[
  {
    "path": ".browserslistrc",
    "content": "# Browsers that we support\n\n[production staging]\n> 1%\nlast 2 version\nie 11\n\n[development]\n> 1%\nlast 2 version\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Don't allow people to merge changes to these generated files, because the result\n# may be invalid.  You need to run \"rush update\" again.\npnpm-lock.yaml               merge=text\nshrinkwrap.yaml              merge=binary\nnpm-shrinkwrap.json          merge=binary\nyarn.lock                    merge=binary\n\n# Rush's JSON config files use JavaScript-style code comments.  The rule below prevents pedantic\n# syntax highlighters such as GitHub's from highlighting these comments as errors.  Your text editor\n# may also require a special configuration to allow comments in JSON.\n#\n# For more information, see this issue: https://github.com/microsoft/rushstack/issues/1088\n#\n*.json                       linguist-language=JSON-with-Comments\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nyarn.lock\nes\n.mini-ide/\n\n# lock\npackage-lock.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Typescript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\nbuild\ndist\ntemp\n.DS_Store\n.idea\ndemos\nlib\n\n*.sw*\n*.un~\n\n# cache\n*.cache\npublic\n\nesm\n\nes\n\n.github\n# .storybook\n.vscode/\n\nstats.json\n\n\n\n.nx/cache\n.nx/workspace-data\n\n\n# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov/\n\n# Coverage directory used by tools like istanbul\ncoverage/\n\n# nyc test coverage\n.nyc_output/\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt/\n\n# Bower dependency directory (https://bower.io/)\nbower_components/\n\n# node-waf configuration\n.lock-wscript/\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release/\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm/\n\n# Optional eslint cache\n.eslintcache/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# next.js build output\n.next/\n\n# Docusaurus cache and generated files\n.docusaurus/\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# yarn v2\n.yarn/cache/\n.yarn/unplugged/\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n\n# OS X temporary files\n.DS_Store/\n\n# IntelliJ IDEA project files; if you want to commit IntelliJ settings, this recipe may be helpful:\n# https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore\n.idea/\n*.iml\n\n# Visual Studio Code\n.vscode/\n!.vscode/tasks.json\n!.vscode/launch.json\n\n# Rush temporary files\ncommon/deploy/\ncommon/temp/\ncommon/autoinstallers/*/.npmrc\n**/.rush/temp/\n*.lock\n\n# Common toolchain intermediate files\ntemp/\nlib/\nlib-amd/\nlib-es6/\nlib-esnext/\nlib-commonjs/\nlib-shim/\ndist/\ndist-storybook/\n*.tsbuildinfo\n\n# Heft temporary files\n.cache/\n.heft/\n\npnpm-lock.yaml\n"
  },
  {
    "path": ".npmignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# lock\npackage-lock.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Typescript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\n.DS_Store\n\n# npmignore - content above this line is automatically generated and modifications may be omitted\n# see npmjs.com/npmignore for more details.\ntest\n\n*.sw*\n*.un~\n.idea\nbin\ndemos\ndocs\ntemp\nwebpack-dev.config.js\nwebpack.config.js\npublic\n.cache\nsite\nexamples\ngatsby-browser.js\ngatsby-config.js\n"
  },
  {
    "path": ".prettierrc",
    "content": "{}\n"
  },
  {
    "path": ".stylelintrc.json",
    "content": "{\n  \"extends\": [\"stylelint-prettier/recommended\", \"stylelint-config-standard\"],\n  \"customSyntax\": \"postcss-lit\"\n}\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\n\nnode_js:\n  - '12'\n\nenv:\n  - NODE_ENV=test\n\naddons:\n  apt:\n    packages:\n      - xvfb\n      - libgconf-2-4\n\ninstall:\n  - export DISPLAY=':99.0'\n  - Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &\n  - yarn\n\nscript:\n  - |\n    if [ \"$TEST_TYPE\" = test ]; then\n      yarn ci && bash <(curl -s https://codecov.io/bash)\n    else\n      yarn $TEST_TYPE\n    fi\nenv:\n  matrix:\n    - TEST_TYPE=lint\n    - TEST_TYPE=test\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Alipay.inc\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README-zh-CN.md",
    "content": "# F6：移动端图可视化引擎\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*KV1pSIPeJPAAAAAAAAAAAAAAARQnAQ) [![travis-ci](https://img.shields.io/travis/antvis/f6.svg)](https://travis-ci.org/antvis/f6) [![codecov](https://codecov.io/gh/antvis/f6/branch/master/graph/badge.svg)](https://codecov.io/gh/antvis/f6) ![typescript](https://img.shields.io/badge/language-typescript-red.svg) ![MIT](https://img.shields.io/badge/license-MIT-000000.svg) [![npm package](https://img.shields.io/npm/v/@antv/f6.svg)](https://www.npmjs.com/package/@antv/f6) [![NPM downloads](http://img.shields.io/npm/dm/@antv/f6.svg)](https://npmjs.org/package/@antv/f6) [![Percentage of issues still open](http://isitmaintained.com/badge/open/antvis/f6.svg)](http://isitmaintained.com/project/antvis/f6 \"Percentage of issues still open\")\n\n[English](./README-en-US.md) | 简体中文\n\n## 欢迎扫码体验\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*-VctS49Qe6QAAAAAAAAAAAAAARQnAQ' width=550 alt='img'/>\n\n## 什么是 F6\n\n<a href='https://github.com/antvis/f6' target='_blank'>F6</a> 是一款可以快速、流畅运行于移动设备中的图可视化引擎，通过丰富的布局、组件及分析能力，帮助用户落地跨平台的图可视化应用解决方案。在 H5、小程序等移动端平台上，对包体积、性能有更高的要求，也需要定义一套合适的交互模式。针对以上问题，我们在 G6 的基础上重新设计并构建了 F6。F6 不仅具有基础的关联图绘制、事件、动画，同时内置了常用的移动端交互模式、丰富的布局和分析组件，通过简单的配置即可使用。\n\n<img src='https://raw.githubusercontent.com/antvis/F6/master/examples.gif' width='100%' alt='img'/>\n\n如果您还没有使用过 F6， 建议通过 [快速上手](https://f6.antv.vision/zh/docs/manual/getting-started) 抢先体验 F6 的魅力。\n\n## F6 文档\n\n- [F6 入门教程](https://f6.antv.vision/zh/docs/manual/introduction)\n- [F6 核心概念](https://f6.antv.vision/zh/docs/manual/middle/overview)\n- [F6 扩展阅读](https://f6.antv.vision/zh/docs/manual/advanced/coordinate-system)\n- [API](https://f6.antv.vision/zh/docs/api/Graph)\n- [示例](https://f6.antv.vision/zh/docs/examples/tree/compactBox)\n\n## 安装\n\n```bash\n$ npm install @antv/f6\n```\n\n## 使用\n\n<img src=\"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*g8A8T6urwOEAAAAAAAAAAAAAARQnAQ\" width=500 alt='' />\n\n- <a href='https://herbox-embed.alipay.com/p/f6/demo' target='_blank'>demo</a>\n\n```js\nimport F6 from \"@antv/f6\";\nimport graphData from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\n\nF6.registerLayout(\"dagreLayout\", dagreLayout);\nF6.registerGraph(\"TreeGraph\", TreeGraph);\n\nPage({\n  data: {\n    width: 300,\n    height: 400,\n    pixelRatio: 1,\n  },\n  onLoad() {\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio: pixelRatio,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas, renderer) {\n    this.graph = new F6.TreeGraph({\n      context: ctx,\n      renderer,\n      width: this.data.width,\n      height: this.data.height,\n      linkCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\"],\n      },\n      defaultNode: {\n        size: 40,\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"RL\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: () => {\n          return 26;\n        },\n        getWidth: () => {\n          return 26;\n        },\n        getVGap: () => {\n          return 20;\n        },\n        getHGap: () => {\n          return 30;\n        },\n        radial: false,\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n      };\n    });\n\n    this.graph.data(graphData);\n    this.graph.render();\n    this.graph.fitView();\n  },\n  onTouch(e) {\n    this.graph.emitEvent(e);\n  },\n  onUnload() {\n    this.graph?.destroy();\n  },\n});\n```\n\n## 如何开发\n\n```bash\n$ npm install -g @microsoft/rush\n\n# update dependencies\n$ rush update\n\n# build the packages\n$ rush build\n\n# demo\n$ cd packages/f6 && rushx storybook\n\n```\n\n更详细的内容请参考 [快速上手](https://f6.antv.vision/zh/docs/manual/getting-started) 文档。\n\n## 如何贡献\n\n请让我们知道您要解决或贡献什么，所以在贡献之前请先提交 <a href='https://github.com/antvis/f6/issues' target='_blank'>issues</a> 描述 bug 或建议。\n\n成为一个贡献者前请阅读 <a href='https://github.com/antvis/F6/blob/master/packages/f6/CONTRIBUTING.zh-CN.md' target='_blank'>代码贡献规范</a>。\n\n## License\n\n<a href='https://github.com/antvis/f6/blob/master/LICENSE' target='_blank'>MIT license</a>。\n"
  },
  {
    "path": "README.md",
    "content": "# F6: A Mobile Graph Visualization Framework in TypeScript.\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*KV1pSIPeJPAAAAAAAAAAAAAAARQnAQ)\n![typescript](https://img.shields.io/badge/language-typescript-red.svg)\n![MIT](https://img.shields.io/badge/license-MIT-000000.svg)\n[![npm package](https://img.shields.io/npm/v/@antv/f6.svg)](https://www.npmjs.com/package/@antv/f6)\n[![NPM downloads](http://img.shields.io/npm/dm/@antv/f6.svg)](https://npmjs.org/package/@antv/f6)\n[![Percentage of issues still open](http://isitmaintained.com/badge/open/antvis/f6.svg)](http://isitmaintained.com/project/antvis/f6 \"Percentage of issues still open\")\n\nEnglish | [简体中文](./README-zh-CN.md)\n\n## What is F6\n\n[F6](https://github.com/antvis/f6) is a mobile graph visualization engine, which provides a set of basic mechanisms, including rendering, layout, analysis, interaction, animation, and other auxiliary tools. F6 aims to simplify the relationships, and help people to obtain the insight of relational data.\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zTjwQaXokeQAAAAAAAAAAABkARQnAQ' width=550 alt='' />\n\nDevelopers are able to build graph visualization **analysis** applications or graph visualization **modeling** applications easily.\n\n![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cDzXR4jIWr8AAAAAAAAAAABkARQnAQ)\n\n> Powerful Animation and Interactions\n\n<!-- <img src=\"https://user-images.githubusercontent.com/6113694/44995293-02858600-afd5-11e8-840c-349e4730d63d.gif\" height=150 alt='' /><img src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*I9OdTbXJIi0AAAAAAAAAAABkARQnAQ\" height=150 alt='' /><img src=\"https://user-images.githubusercontent.com/6113694/44995332-2ba61680-afd5-11e8-8cab-db0e9d08ceb7.gif\" height=150 alt='' />\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/HQxYguinFOMIXrGQOABY.gif\" height=150 alt='' /><img src=\"https://gw.alipayobjects.com/zos/rmsportal/nAugyFgrbrUWPmDIDiQm.gif\" height=150 alt='' /><img src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*xoufSYcjK2AAAAAAAAAAAABkARQnAQ\" height=150 alt='' />\n\n> Powerful Layouts -->\n\n## Features\n\n- Abundant Built-in Items: Nodes and edges with free configurations;\n- Steerable Interactions: More than 10 basic interaction behaviors ;\n- Powerful Layout: More than 10 layout algorithms;\n- Convenient Components: Outstanding ability and performance;\n- Friendly User Experience: Complete documents for different levels of user requirements. TypeScript supported.\n\nF6 concentrates on the principle of 'good by default'. In addition, the custom mechanism of the item, interation behavior, and layout satisfies the customazation requirements.\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Y0c6S7cxjVkAAAAAAAAAAABkARQnAQ' width=800 height=200 alt='' />\n\n> Abundant Built-in Items\n\n## Installation\n\n```bash\n$ npm install @antv/f6\n```\n\n## Usage\n\n<img src=\"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*g8A8T6urwOEAAAAAAAAAAAAAARQnAQ\" width=500 alt='' />\n\n- <a href='https://herbox-embed.alipay.com/p/f6/demo' target='_blank'>demo</a>\n\n```js\nimport F6 from \"@antv/f6\";\nimport graphData from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\n\nF6.registerLayout(\"dagreLayout\", dagreLayout);\nF6.registerGraph(\"TreeGraph\", TreeGraph);\n\nPage({\n  data: {\n    width: 300,\n    height: 400,\n    pixelRatio: 1,\n  },\n  onLoad() {\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio: pixelRatio,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas, renderer) {\n    this.graph = new F6.TreeGraph({\n      context: ctx,\n      renderer,\n      width: this.data.width,\n      height: this.data.height,\n      linkCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\"],\n      },\n      defaultNode: {\n        size: 40,\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"RL\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: () => {\n          return 26;\n        },\n        getWidth: () => {\n          return 26;\n        },\n        getVGap: () => {\n          return 20;\n        },\n        getHGap: () => {\n          return 30;\n        },\n        radial: false,\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n      };\n    });\n\n    this.graph.data(graphData);\n    this.graph.render();\n    this.graph.fitView();\n  },\n  onTouch(e) {\n    this.graph.emitEvent(e);\n  },\n  onUnload() {\n    this.graph?.destroy();\n  },\n});\n```\n\nFor more information of the usage, please refer to [Getting Started](https://antv-f6.gitee.io/en/docs/manual/getting-started).\n\n## Development\n\n```bash\n$ npm install -g @microsoft/rush\n\n# update dependencies\n$ rush update\n\n# build the packages\n$ rush build\n\n# demo\n$ cd packages/f6 && rushx storybook\n\n```\n\n## Documents\n\n- <a href='https://f6.antv.vision/zh/docs/manual/introduction' target='_blank'>Tutorial</a>\n- <a href='https://f6.antv.vision/zh/docs/manual/middle/overview' target='_blank'>Middle Guides</a>\n- <a href='https://f6.antv.vision/zh/docs/manual/advanced/coordinate-system' target='_blank'>Further Reading</a>\n- <a href='https://f6.antv.vision/zh/docs/api/Graph' target='_blank'>API Reference</a>\n\n## How to Contribute\n\nPlease let us know what you are you going to help. Do check out [issues](https://github.com/antvis/f6/issues) for bug reports or suggestions first.\n\nTo become a contributor, please follow our [contributing guide](https://github.com/antvis/f6/blob/master/packages/f6/CONTRIBUTING.md).\n\n## License\n\n[MIT license](./LICENSE).\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Introduction\n\nThis security policy outlines how to report and handle security vulnerabilities in our project.\n\n## Reporting a Vulnerability\n\nIf you discover a potential security vulnerability, please email us at [openwayne@gmail.com](mailto:openwayne@gmail.com) with the details. To protect our users, we request that you do not publicly disclose the vulnerability until it has been addressed.\n\nWhen reporting a vulnerability, please include as much of the following information as possible:\n\n- A detailed description of the vulnerability\n- Steps to reproduce the issue\n- Any relevant logs or screenshots\n- Your contact information (optional)\n\nWe will acknowledge your report within 7 days and provide a preliminary response.\n\n## Response Process\n\nUpon receiving a vulnerability report, we will:\n\n1. Acknowledge receipt of the report within 7 days.\n2. Assess the severity and impact of the vulnerability.\n3. Develop and test a fix.\n4. Release a security update once the vulnerability is fixed.\n5. If necessary, issue a security advisory to inform users.\n\nWe aim to address all critical vulnerabilities within 30 days. If a fix takes longer, we will provide updates on the progress to the reporter.\n\n## Security Advisories\n\nWe will publish all security advisories on the [project's releases page](https://github.com/antvis/F6/releases). Please check this page regularly to ensure your version is up-to-date and secure.\n\n## Responsible Disclosure\n\nWe ask that all reporters practice responsible disclosure by not publicly disclosing vulnerability details until a fix has been made. We believe responsible disclosure helps ensure the safety of our users while giving the development team adequate time to address the issue.\n"
  },
  {
    "path": "binding.gyp",
    "content": "{\n  \"targets\": [\n    {\n      \"target_name\": \"binding\",\n      \"sources\": [ \"src/binding.cc\" ]\n    }\n  ]\n}\n"
  },
  {
    "path": "common/autoinstallers/rush-prettier/package.json",
    "content": "{\n  \"name\": \"rush-prettier\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"dependencies\": {},\n  \"repository\": \"git@github.com:antvis/F6.git\",\n  \"dependencies\": {\n    \"prettier\": \"^3.3.2\",\n    \"pretty-quick\": \"^4.0.0\"\n  }\n}\n"
  },
  {
    "path": "common/config/rush/.npmrc",
    "content": "# Rush uses this file to configure the NPM package registry during installation.  It is applicable\n# to PNPM, NPM, and Yarn package managers.  It is used by operations such as \"rush install\",\n# \"rush update\", and the \"install-run.js\" scripts.\n#\n# NOTE: The \"rush publish\" command uses .npmrc-publish instead.\n#\n# Before invoking the package manager, Rush will generate an .npmrc in the folder where installation\n# is performed.  This generated file will omit any config lines that reference environment variables\n# that are undefined in that session; this avoids problems that would otherwise result due to\n# a missing variable being replaced by an empty string.\n#\n# If \"subspacesEnabled\" is true in subspaces.json, the generated file will merge settings from\n# \"common/config/rush/.npmrc\" and \"common/config/subspaces/<name>/.npmrc\", with the latter taking\n# precedence.\n#\n# * * * SECURITY WARNING * * *\n#\n# It is NOT recommended to store authentication tokens in a text file on a lab machine, because\n# other unrelated processes may be able to read that file.  Also, the file may persist indefinitely,\n# for example if the machine loses power.  A safer practice is to pass the token via an\n# environment variable, which can be referenced from .npmrc using ${} expansion.  For example:\n#\n#   //registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}\n#\nregistry=https://registry.npmjs.org/\nalways-auth=false\n"
  },
  {
    "path": "common/config/rush/.npmrc-publish",
    "content": "# This config file is very similar to common/config/rush/.npmrc, except that .npmrc-publish\n# is used by the \"rush publish\" command, as publishing often involves different credentials\n# and registries than other operations.\n#\n# Before invoking the package manager, Rush will copy this file to \"common/temp/publish-home/.npmrc\"\n# and then temporarily map that folder as the \"home directory\" for the current user account.\n# This enables the same settings to apply for each project folder that gets published.  The copied file\n# will omit any config lines that reference environment variables that are undefined in that session;\n# this avoids problems that would otherwise result due to a missing variable being replaced by\n# an empty string.\n#\n# * * * SECURITY WARNING * * *\n#\n# It is NOT recommended to store authentication tokens in a text file on a lab machine, because\n# other unrelated processes may be able to read the file.  Also, the file may persist indefinitely,\n# for example if the machine loses power.  A safer practice is to pass the token via an\n# environment variable, which can be referenced from .npmrc using ${} expansion.  For example:\n#\n#   //registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}\n#\n"
  },
  {
    "path": "common/config/rush/.pnpmfile.cjs",
    "content": "\"use strict\";\n\n/**\n * When using the PNPM package manager, you can use pnpmfile.js to workaround\n * dependencies that have mistakes in their package.json file.  (This feature is\n * functionally similar to Yarn's \"resolutions\".)\n *\n * For details, see the PNPM documentation:\n * https://pnpm.js.org/docs/en/hooks.html\n *\n * IMPORTANT: SINCE THIS FILE CONTAINS EXECUTABLE CODE, MODIFYING IT IS LIKELY TO INVALIDATE\n * ANY CACHED DEPENDENCY ANALYSIS.  After any modification to pnpmfile.js, it's recommended to run\n * \"rush update --full\" so that PNPM will recalculate all version selections.\n */\nmodule.exports = {\n  hooks: {\n    readPackage,\n  },\n};\n\n/**\n * This hook is invoked during installation before a package's dependencies\n * are selected.\n * The `packageJson` parameter is the deserialized package.json\n * contents for the package that is about to be installed.\n * The `context` parameter provides a log() function.\n * The return value is the updated object.\n */\nfunction readPackage(packageJson, context) {\n  // // The karma types have a missing dependency on typings from the log4js package.\n  // if (packageJson.name === '@types/karma') {\n  //  context.log('Fixed up dependencies for @types/karma');\n  //  packageJson.dependencies['log4js'] = '0.6.38';\n  // }\n\n  return packageJson;\n}\n"
  },
  {
    "path": "common/config/rush/artifactory.json",
    "content": "/**\n * This configuration file manages Rush integration with JFrog Artifactory services.\n * More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/artifactory.schema.json\",\n\n  \"packageRegistry\": {\n    /**\n     * (Required) Set this to \"true\" to enable Rush to manage tokens for an Artifactory NPM registry.\n     * When enabled, \"rush install\" will automatically detect when the user's ~/.npmrc\n     * authentication token is missing or expired.  And \"rush setup\" will prompt the user to\n     * renew their token.\n     *\n     * The default value is false.\n     */\n    \"enabled\": false,\n\n    /**\n     * (Required) Specify the URL of your NPM registry.  This is the same URL that appears in\n     * your .npmrc file.  It should look something like this example:\n     *\n     *   https://your-company.jfrog.io/your-project/api/npm/npm-private/\n     */\n    \"registryUrl\": \"\",\n\n    /**\n     * A list of custom strings that \"rush setup\" should add to the user's ~/.npmrc file at the time\n     * when the token is updated.  This could be used for example to configure the company registry\n     * to be used whenever NPM is invoked as a standalone command (but it's not needed for Rush\n     * operations like \"rush add\" and \"rush install\", which get their mappings from the monorepo's\n     * common/config/rush/.npmrc file).\n     *\n     * NOTE: The ~/.npmrc settings are global for the user account on a given machine, so be careful\n     * about adding settings that may interfere with other work outside the monorepo.\n     */\n    \"userNpmrcLinesToAdd\": [\n      // \"@example:registry=https://your-company.jfrog.io/your-project/api/npm/npm-private/\"\n    ],\n\n    /**\n     * (Required) Specifies the URL of the Artifactory control panel where the user can generate\n     * an API key.  This URL is printed after the \"visitWebsite\" message.\n     * It should look something like this example:  https://your-company.jfrog.io/\n     * Specify an empty string to suppress this line entirely.\n     */\n    \"artifactoryWebsiteUrl\": \"\",\n\n    /**\n     * Uncomment this line to specify the type of credential to save in the user's ~/.npmrc file.\n     * The default is \"password\", which means the user's API token will be traded in for an\n     * npm password specific to that registry. Optionally you can specify \"authToken\", which\n     * will save the user's API token as credentials instead.\n     */\n    // \"credentialType\": \"password\",\n\n    /**\n     * These settings allow the \"rush setup\" interactive prompts to be customized, for\n     * example with messages specific to your team or configuration.  Specify an empty string\n     * to suppress that message entirely.\n     */\n    \"messageOverrides\": {\n      /**\n       * Overrides the message that normally says:\n       * \"This monorepo consumes packages from an Artifactory private NPM registry.\"\n       */\n      // \"introduction\": \"\",\n      /**\n       * Overrides the message that normally says:\n       * \"Please contact the repository maintainers for help with setting up an Artifactory user account.\"\n       */\n      // \"obtainAnAccount\": \"\",\n      /**\n       * Overrides the message that normally says:\n       * \"Please open this URL in your web browser:\"\n       *\n       * The \"artifactoryWebsiteUrl\" string is printed after this message.\n       */\n      // \"visitWebsite\": \"\",\n      /**\n       * Overrides the message that normally says:\n       * \"Your user name appears in the upper-right corner of the JFrog website.\"\n       */\n      // \"locateUserName\": \"\",\n      /**\n       * Overrides the message that normally says:\n       * \"Click 'Edit Profile' on the JFrog website.  Click the 'Generate API Key'\n       * button if you haven't already done so previously.\"\n       */\n      // \"locateApiKey\": \"\"\n      /**\n       * Overrides the message that normally prompts:\n       * \"What is your Artifactory user name?\"\n       */\n      // \"userNamePrompt\": \"\"\n      /**\n       * Overrides the message that normally prompts:\n       * \"What is your Artifactory API key?\"\n       */\n      // \"apiKeyPrompt\": \"\"\n    }\n  }\n}\n"
  },
  {
    "path": "common/config/rush/build-cache.json",
    "content": "/**\n * This configuration file manages Rush's build cache feature.\n * More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/build-cache.schema.json\",\n\n  /**\n   * (Required) EXPERIMENTAL - Set this to true to enable the build cache feature.\n   *\n   * See https://rushjs.io/pages/maintainer/build_cache/ for details about this experimental feature.\n   */\n  \"buildCacheEnabled\": false,\n\n  /**\n   * (Required) Choose where project build outputs will be cached.\n   *\n   * Possible values: \"local-only\", \"azure-blob-storage\", \"amazon-s3\"\n   */\n  \"cacheProvider\": \"local-only\",\n\n  /**\n   * Setting this property overrides the cache entry ID.  If this property is set, it must contain\n   * a [hash] token.\n   *\n   * Other available tokens:\n   *  - [projectName]             Example: \"@my-scope/my-project\"\n   *  - [projectName:normalize]   Example: \"my-scope+my-project\"\n   *  - [phaseName]               Example: \"_phase:test/api\"\n   *  - [phaseName:normalize]     Example: \"_phase:test+api\"\n   *  - [phaseName:trimPrefix]    Example: \"test/api\"\n   *  - [os]                      Example: \"win32\"\n   *  - [arch]                    Example: \"x64\"\n   */\n  // \"cacheEntryNamePattern\": \"[projectName:normalize]-[phaseName:normalize]-[hash]\"\n\n  /**\n   * Use this configuration with \"cacheProvider\"=\"azure-blob-storage\"\n   */\n  \"azureBlobStorageConfiguration\": {\n    /**\n     * (Required) The name of the the Azure storage account to use for build cache.\n     */\n    // \"storageAccountName\": \"example\",\n    /**\n     * (Required) The name of the container in the Azure storage account to use for build cache.\n     */\n    // \"storageContainerName\": \"my-container\",\n    /**\n     * The Azure environment the storage account exists in. Defaults to AzurePublicCloud.\n     *\n     * Possible values: \"AzurePublicCloud\", \"AzureChina\", \"AzureGermany\", \"AzureGovernment\"\n     */\n    // \"azureEnvironment\": \"AzurePublicCloud\",\n    /**\n     * An optional prefix for cache item blob names.\n     */\n    // \"blobPrefix\": \"my-prefix\",\n    /**\n     * If set to true, allow writing to the cache. Defaults to false.\n     */\n    // \"isCacheWriteAllowed\": true\n  },\n\n  /**\n   * Use this configuration with \"cacheProvider\"=\"amazon-s3\"\n   */\n  \"amazonS3Configuration\": {\n    /**\n     * (Required unless s3Endpoint is specified) The name of the bucket to use for build cache.\n     * Example: \"my-bucket\"\n     */\n    // \"s3Bucket\": \"my-bucket\",\n    /**\n     * (Required unless s3Bucket is specified) The Amazon S3 endpoint of the bucket to use for build cache.\n     * This should not include any path; use the s3Prefix to set the path.\n     * Examples: \"my-bucket.s3.us-east-2.amazonaws.com\" or \"http://localhost:9000\"\n     */\n    // \"s3Endpoint\": \"https://my-bucket.s3.us-east-2.amazonaws.com\",\n    /**\n     * (Required) The Amazon S3 region of the bucket to use for build cache.\n     * Example: \"us-east-1\"\n     */\n    // \"s3Region\": \"us-east-1\",\n    /**\n     * An optional prefix (\"folder\") for cache items. It should not start with \"/\".\n     */\n    // \"s3Prefix\": \"my-prefix\",\n    /**\n     * If set to true, allow writing to the cache. Defaults to false.\n     */\n    // \"isCacheWriteAllowed\": true\n  },\n\n  /**\n   * Use this configuration with \"cacheProvider\"=\"http\"\n   */\n  \"httpConfiguration\": {\n    /**\n     * (Required) The URL of the server that stores the caches.\n     * Example: \"https://build-cacches.example.com/\"\n     */\n    // \"url\": \"https://build-cacches.example.com/\",\n    /**\n     * (Optional) The HTTP method to use when writing to the cache (defaults to PUT).\n     * Should be one of PUT, POST, or PATCH.\n     * Example: \"PUT\"\n     */\n    // \"uploadMethod\": \"PUT\",\n    /**\n     * (Optional) HTTP headers to pass to the cache server.\n     * Example: { \"X-HTTP-Company-Id\": \"109283\" }\n     */\n    // \"headers\": {},\n    /**\n     * (Optional) Shell command that prints the authorization token needed to communicate with the\n     * cache server, and exits with exit code 0. This command will be executed from the root of\n     * the monorepo.\n     * Example: { \"exec\": \"node\", \"args\": [\"common/scripts/auth.js\"] }\n     */\n    // \"tokenHandler\": { \"exec\": \"node\", \"args\": [\"common/scripts/auth.js\"] },\n    /**\n     * (Optional) Prefix for cache keys.\n     * Example: \"my-company-\"\n     */\n    // \"cacheKeyPrefix\": \"\",\n    /**\n     * (Optional) If set to true, allow writing to the cache. Defaults to false.\n     */\n    // \"isCacheWriteAllowed\": true\n  }\n}\n"
  },
  {
    "path": "common/config/rush/cobuild.json",
    "content": "/**\n * This configuration file manages Rush's cobuild feature.\n * More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/cobuild.schema.json\",\n\n  /**\n   * (Required) EXPERIMENTAL - Set this to true to enable the cobuild feature.\n   * RUSH_COBUILD_CONTEXT_ID should always be specified as an environment variable with an non-empty string,\n   * otherwise the cobuild feature will be disabled.\n   */\n  \"cobuildFeatureEnabled\": false,\n\n  /**\n   * (Required) Choose where cobuild lock will be acquired.\n   *\n   * The lock provider is registered by the rush plugins.\n   * For example, @rushstack/rush-redis-cobuild-plugin registers the \"redis\" lock provider.\n   */\n  \"cobuildLockProvider\": \"redis\"\n}\n"
  },
  {
    "path": "common/config/rush/command-line.json",
    "content": "/**\n * This configuration file defines custom commands for the \"rush\" command-line.\n * More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json\",\n\n  /**\n   * Custom \"commands\" introduce new verbs for the command-line.  To see the help for these\n   * example commands, try \"rush --help\", \"rush my-bulk-command --help\", or\n   * \"rush my-global-command --help\".\n   */\n  \"commands\": [\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom command.\n    //    * Rush's \"bulk\" commands are invoked separately for each project.  By default, the command will run for\n    //    * every project in the repo, according to the dependency graph (similar to how \"rush build\" works).\n    //    * The set of projects can be restricted e.g. using the \"--to\" or \"--from\" parameters.\n    //    */\n    //   \"commandKind\": \"bulk\",\n    //\n    //   /**\n    //    * (Required) The name that will be typed as part of the command line.  This is also the name\n    //    * of the \"scripts\" hook in the project's package.json file (if \"shellCommand\" is not specified).\n    //    *\n    //    * The name should be comprised of lower case words separated by hyphens or colons. The name should include an\n    //    * English verb (e.g. \"deploy\"). Use a hyphen to separate words (e.g. \"upload-docs\"). A group of related commands\n    //    * can be prefixed with a colon (e.g. \"docs:generate\", \"docs:deploy\", \"docs:serve\", etc).\n    //    *\n    //    * Note that if the \"rebuild\" command is overridden here, it becomes separated from the \"build\" command\n    //    * and will call the \"rebuild\" script instead of the \"build\" script.\n    //    */\n    //   \"name\": \"my-bulk-command\",\n    //\n    //   /**\n    //    * (Required) A short summary of the custom command to be shown when printing command line\n    //    * help, e.g. \"rush --help\".\n    //    */\n    //   \"summary\": \"Example bulk custom command\",\n    //\n    //   /**\n    //    * A detailed description of the command to be shown when printing command line\n    //    * help (e.g. \"rush --help my-command\").\n    //    * If omitted, the \"summary\" text will be shown instead.\n    //    *\n    //    * Whenever you introduce commands/parameters, taking a little time to write meaningful\n    //    * documentation can make a big difference for the developer experience in your repo.\n    //    */\n    //   \"description\": \"This is an example custom command that runs separately for each project\",\n    //\n    //   /**\n    //    * By default, Rush operations acquire a lock file which prevents multiple commands from executing simultaneously\n    //    * in the same repo folder.  (For example, it would be a mistake to run \"rush install\" and \"rush build\" at the\n    //    * same time.)  If your command makes sense to run concurrently with other operations,\n    //    * set \"safeForSimultaneousRushProcesses\" to true to disable this protection.\n    //    *\n    //    * In particular, this is needed for custom scripts that invoke other Rush commands.\n    //    */\n    //   \"safeForSimultaneousRushProcesses\": false,\n    //\n    //   /**\n    //    * (Optional) If the `shellCommand` field is set for a bulk command, Rush will invoke it for each\n    //    * selected project; otherwise, Rush will invoke the package.json `\"scripts\"` entry matching Rush command name.\n    //    *\n    //    * The string is the path to a script that will be invoked using the OS shell. The working directory will be\n    //    * the folder that contains rush.json.  If custom parameters are associated with this command, their\n    //    * values will be appended to the end of this string.\n    //    */\n    //   // \"shellCommand\": \"node common/scripts/my-bulk-command.js\",\n    //\n    //   /**\n    //    * (Required) If true, then this command is safe to be run in parallel, i.e. executed\n    //    * simultaneously for multiple projects.  Similar to \"rush build\", regardless of parallelism\n    //    * projects will not start processing until their dependencies have completed processing.\n    //    */\n    //   \"enableParallelism\": false,\n    //\n    //   /**\n    //    * Normally projects will be processed according to their dependency order: a given project will not start\n    //    * processing the command until all of its dependencies have completed.  This restriction doesn't apply for\n    //    * certain operations, for example a \"clean\" task that deletes output files.  In this case\n    //    * you can set \"ignoreDependencyOrder\" to true to increase parallelism.\n    //    */\n    //   \"ignoreDependencyOrder\": false,\n    //\n    //   /**\n    //    * Normally Rush requires that each project's package.json has a \"scripts\" entry matching\n    //    * the custom command name.  To disable this check, set \"ignoreMissingScript\" to true;\n    //    * projects with a missing definition will be skipped.\n    //    */\n    //   \"ignoreMissingScript\": false,\n    //\n    //   /**\n    //    * When invoking shell scripts, Rush uses a heuristic to distinguish errors from warnings:\n    //    * - If the shell script returns a nonzero process exit code, Rush interprets this as \"one or more errors\".\n    //    * Error output is displayed in red, and it prevents Rush from attempting to process any downstream projects.\n    //    * - If the shell script returns a zero process exit code but writes something to its stderr stream,\n    //    * Rush interprets this as \"one or more warnings\". Warning output is printed in yellow, but does NOT prevent\n    //    * Rush from processing downstream projects.\n    //    *\n    //    * Thus, warnings do not interfere with local development, but they will cause a CI job to fail, because\n    //    * the Rush process itself returns a nonzero exit code if there are any warnings or errors. This is by design.\n    //    * In an active monorepo, we've found that if you allow any warnings in your main branch, it inadvertently\n    //    * teaches developers to ignore warnings, which quickly leads to a situation where so many \"expected\" warnings\n    //    * have accumulated that warnings no longer serve any useful purpose.\n    //    *\n    //    * Sometimes a poorly behaved task will write output to stderr even though its operation was successful.\n    //    * In that case, it's strongly recommended to fix the task.  However, as a workaround you can set\n    //    * allowWarningsInSuccessfulBuild=true, which causes Rush to return a nonzero exit code for errors only.\n    //    *\n    //    * Note: The default value is false. In Rush 5.7.x and earlier, the default value was true.\n    //    */\n    //   \"allowWarningsInSuccessfulBuild\": false,\n    //\n    //   /**\n    //    * If true then this command will be incremental like the built-in \"build\" command\n    //    */\n    //   \"incremental\": false,\n    //\n    //   /**\n    //    * (EXPERIMENTAL) Normally Rush terminates after the command finishes. If this option is set to \"true\" Rush\n    //    * will instead enter a loop where it watches the file system for changes to the selected projects. Whenever a\n    //    * change is detected, the command will be invoked again for the changed project and any selected projects that\n    //    * directly or indirectly depend on it.\n    //    *\n    //    * For details, refer to the website article \"Using watch mode\".\n    //    */\n    //   \"watchForChanges\": false,\n    //\n    //   /**\n    //    * (EXPERIMENTAL) Disable cache for this action. This may be useful if this command affects state outside of\n    //    * projects' own folders.\n    //    */\n    //   \"disableBuildCache\": false\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom command.\n    //    * Rush's \"global\" commands are invoked once for the entire repo.\n    //    */\n    //   \"commandKind\": \"global\",\n    //\n    //   \"name\": \"my-global-command\",\n    //   \"summary\": \"Example global custom command\",\n    //   \"description\": \"This is an example custom command that runs once for the entire repo\",\n    //\n    //   \"safeForSimultaneousRushProcesses\": false,\n    //\n    //   /**\n    //    * (Required) A script that will be invoked using the OS shell. The working directory will be\n    //    * the folder that contains rush.json.  If custom parameters are associated with this command, their\n    //    * values will be appended to the end of this string.\n    //    */\n    //   \"shellCommand\": \"node common/scripts/my-global-command.js\",\n    //\n    //   /**\n    //    * If your \"shellCommand\" script depends on NPM packages, the recommended best practice is\n    //    * to make it into a regular Rush project that builds using your normal toolchain.  In cases where\n    //    * the command needs to work without first having to run \"rush build\", the recommended practice\n    //    * is to publish the project to an NPM registry and use common/scripts/install-run.js to launch it.\n    //    *\n    //    * Autoinstallers offer another possibility: They are folders under \"common/autoinstallers\" with\n    //    * a package.json file and shrinkwrap file. Rush will automatically invoke the package manager to\n    //    * install these dependencies before an associated command is invoked.  Autoinstallers have the\n    //    * advantage that they work even in a branch where \"rush install\" is broken, which makes them a\n    //    * good solution for Git hook scripts.  But they have the disadvantages of not being buildable\n    //    * projects, and of increasing the overall installation footprint for your monorepo.\n    //    *\n    //    * The \"autoinstallerName\" setting must not contain a path and must be a valid NPM package name.\n    //    * For example, the name \"my-task\" would map to \"common/autoinstallers/my-task/package.json\", and\n    //    * the \"common/autoinstallers/my-task/node_modules/.bin\" folder would be added to the shell PATH when\n    //    * invoking the \"shellCommand\".\n    //    */\n    //   // \"autoinstallerName\": \"my-task\"\n    // }\n    {\n      \"name\": \"prettier\",\n      \"commandKind\": \"global\",\n      \"summary\": \"Used by the pre-commit Git hook. This command invokes Prettier to reformat staged changes.\",\n      \"safeForSimultaneousRushProcesses\": true,\n\n      \"autoinstallerName\": \"rush-prettier\",\n\n      // This will invoke common/autoinstallers/rush-prettier/node_modules/.bin/pretty-quick\n      \"shellCommand\": \"pretty-quick --staged\"\n    },\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"storybook\",\n      \"summary\": \"Run Storybook for all projects\",\n      \"description\": \"Run Storybook for all projects\",\n      \"enableParallelism\": true,\n      \"ignoreDependencyOrder\": true,\n      \"safeForSimultaneousRushProcesses\": true,\n      \"shellCommand\": \"npm run storybook\"\n    }\n  ],\n\n  /**\n   * Custom \"parameters\" introduce new parameters for specified Rush command-line commands.\n   * For example, you might define a \"--production\" parameter for the \"rush build\" command.\n   */\n  \"parameters\": [\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * A \"flag\" is a custom command-line parameter whose presence acts as an on/off switch.\n    //    */\n    //   \"parameterKind\": \"flag\",\n    //\n    //   /**\n    //    * (Required) The long name of the parameter.  It must be lower-case and use dash delimiters.\n    //    */\n    //   \"longName\": \"--my-flag\",\n    //\n    //   /**\n    //    * An optional alternative short name for the parameter.  It must be a dash followed by a single\n    //    * lower-case or upper-case letter, which is case-sensitive.\n    //    *\n    //    * NOTE: The Rush developers recommend that automation scripts should always use the long name\n    //    * to improve readability.  The short name is only intended as a convenience for humans.\n    //    * The alphabet letters run out quickly, and are difficult to memorize, so *only* use\n    //    * a short name if you expect the parameter to be needed very often in everyday operations.\n    //    */\n    //   \"shortName\": \"-m\",\n    //\n    //   /**\n    //    * (Required) A long description to be shown in the command-line help.\n    //    *\n    //    * Whenever you introduce commands/parameters, taking a little time to write meaningful\n    //    * documentation can make a big difference for the developer experience in your repo.\n    //    */\n    //   \"description\": \"A custom flag parameter that is passed to the scripts that are invoked when building projects\",\n    //\n    //   /**\n    //    * (Required) A list of custom commands and/or built-in Rush commands that this parameter may\n    //    * be used with.  The parameter will be appended to the shell command that Rush invokes.\n    //    */\n    //   \"associatedCommands\": [\"build\", \"rebuild\"]\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * A \"string\" is a custom command-line parameter whose argument is a single text string.\n    //    */\n    //   \"parameterKind\": \"string\",\n    //   \"longName\": \"--my-string\",\n    //   \"description\": \"A custom string parameter for the \\\"my-global-command\\\" custom command\",\n    //\n    //   \"associatedCommands\": [\"my-global-command\"],\n    //\n    //   \"argumentName\": \"SOME_TEXT\",\n    //\n    //   /**\n    //    * If true, this parameter must be included with the command.  The default is false.\n    //    */\n    //   \"required\": false\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * A \"choice\" is a custom command-line parameter whose argument must be chosen from a list of\n    //    * allowable alternatives (similar to an enum).\n    //    */\n    //   \"parameterKind\": \"choice\",\n    //   \"longName\": \"--my-choice\",\n    //   \"description\": \"A custom choice parameter for the \\\"my-global-command\\\" custom command\",\n    //\n    //   \"associatedCommands\": [\"my-global-command\"],\n    //   \"required\": false,\n    //\n    //   /**\n    //    * If a \"defaultValue\" is specified, then if the Rush command line is invoked without\n    //    * this parameter, it will be automatically added with the \"defaultValue\" as the argument.\n    //    * The value must be one of the defined alternatives.\n    //    */\n    //   \"defaultValue\": \"vanilla\",\n    //\n    //   /**\n    //    * (Required) A list of alternative argument values that can be chosen for this parameter.\n    //    */\n    //   \"alternatives\": [\n    //     {\n    //       /**\n    //        * A token that is one of the alternatives that can be used with the choice parameter,\n    //        * e.g. \"vanilla\" in \"--flavor vanilla\".\n    //        */\n    //       \"name\": \"vanilla\",\n    //\n    //       /**\n    //        * A detailed description for the alternative that can be shown in the command-line help.\n    //        *\n    //        * Whenever you introduce commands/parameters, taking a little time to write meaningful\n    //        * documentation can make a big difference for the developer experience in your repo.\n    //        */\n    //       \"description\": \"Use the vanilla flavor\"\n    //     },\n    //\n    //     {\n    //       \"name\": \"chocolate\",\n    //       \"description\": \"Use the chocolate flavor\"\n    //     },\n    //\n    //     {\n    //       \"name\": \"strawberry\",\n    //       \"description\": \"Use the strawberry flavor\"\n    //     }\n    //   ]\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * An \"integer\" is a custom command-line parameter whose value is an integer number.\n    //    */\n    //   \"parameterKind\": \"integer\",\n    //   \"longName\": \"--my-integer\",\n    //   \"description\": \"A custom integer parameter for the \\\"my-global-command\\\" custom command\",\n    //\n    //   \"associatedCommands\": [\"my-global-command\"],\n    //   \"argumentName\": \"SOME_NUMBER\",\n    //   \"required\": false\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * An \"integerList\" is a custom command-line parameter whose argument is an integer.\n    //    * The parameter can be specified multiple times to build a list.\n    //    *\n    //    * For example, if the parameter name is \"--my-integer-list\", then the custom command\n    //    * might be invoked as\n    //    * `rush my-global-command --my-integer-list 1 --my-integer-list 2 --my-integer-list 3`\n    //    * and the parsed array would be [1,2,3].\n    //    */\n    //   \"parameterKind\": \"integerList\",\n    //   \"longName\": \"--my-integer-list\",\n    //   \"description\": \"A custom integer list parameter for the \\\"my-global-command\\\" custom command\",\n    //\n    //   \"associatedCommands\": [\"my-global-command\"],\n    //   \"argumentName\": \"SOME_NUMBER\",\n    //   \"required\": false\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * An \"stringList\" is a custom command-line parameter whose argument is a text string.\n    //    * The parameter can be specified multiple times to build a list.\n    //    *\n    //    * For example, if the parameter name is \"--my-string-list\", then the custom command\n    //    * might be invoked as\n    //    * `rush my-global-command --my-string-list A --my-string-list B --my-string-list C`\n    //    * and the parsed array would be [A,B,C].\n    //    */\n    //   \"parameterKind\": \"stringList\",\n    //   \"longName\": \"--my-string-list\",\n    //   \"description\": \"A custom string list parameter for the \\\"my-global-command\\\" custom command\",\n    //\n    //   \"associatedCommands\": [\"my-global-command\"],\n    //   \"argumentName\": \"SOME_TEXT\",\n    //   \"required\": false\n    // },\n    //\n    // {\n    //   /**\n    //    * (Required) Determines the type of custom parameter.\n    //    * A \"choice\" is a custom command-line parameter whose argument must be chosen from a list of\n    //    * allowable alternatives (similar to an enum).\n    //    * The parameter can be specified multiple times to build a list.\n    //    *\n    //    * For example, if the parameter name is \"--my-choice-list\", then the custom command\n    //    * might be invoked as\n    //    * `rush my-global-command --my-string-list vanilla --my-string-list chocolate`\n    //    * and the parsed array would be [vanilla,chocolate].\n    //    */\n    //   \"parameterKind\": \"choiceList\",\n    //   \"longName\": \"--my-choice-list\",\n    //   \"description\": \"A custom choice list parameter for the \\\"my-global-command\\\" custom command\",\n    //\n    //   \"associatedCommands\": [\"my-global-command\"],\n    //   \"required\": false,\n    //\n    //   /**\n    //    * (Required) A list of alternative argument values that can be chosen for this parameter.\n    //    */\n    //   \"alternatives\": [\n    //     {\n    //       /**\n    //        * A token that is one of the alternatives that can be used with the choice parameter,\n    //        * e.g. \"vanilla\" in \"--flavor vanilla\".\n    //        */\n    //       \"name\": \"vanilla\",\n    //\n    //       /**\n    //        * A detailed description for the alternative that can be shown in the command-line help.\n    //        *\n    //        * Whenever you introduce commands/parameters, taking a little time to write meaningful\n    //        * documentation can make a big difference for the developer experience in your repo.\n    //        */\n    //       \"description\": \"Use the vanilla flavor\"\n    //     },\n    //\n    //     {\n    //       \"name\": \"chocolate\",\n    //       \"description\": \"Use the chocolate flavor\"\n    //     },\n    //\n    //     {\n    //       \"name\": \"strawberry\",\n    //       \"description\": \"Use the strawberry flavor\"\n    //     }\n    //   ]\n    // }\n  ]\n}\n"
  },
  {
    "path": "common/config/rush/common-versions.json",
    "content": "/**\n * This configuration file specifies NPM dependency version selections that affect all projects\n * in a Rush repo.  More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json\",\n\n  /**\n   * A table that specifies a \"preferred version\" for a given NPM package.  This feature is typically used\n   * to hold back an indirect dependency to a specific older version, or to reduce duplication of indirect dependencies.\n   *\n   * The \"preferredVersions\" value can be any SemVer range specifier (e.g. \"~1.2.3\").  Rush injects these values into\n   * the \"dependencies\" field of the top-level common/temp/package.json, which influences how the package manager\n   * will calculate versions.  The specific effect depends on your package manager.  Generally it will have no\n   * effect on an incompatible or already constrained SemVer range.  If you are using PNPM, similar effects can be\n   * achieved using the pnpmfile.js hook.  See the Rush documentation for more details.\n   *\n   * After modifying this field, it's recommended to run \"rush update --full\" so that the package manager\n   * will recalculate all version selections.\n   */\n  \"preferredVersions\": {\n    /**\n     * When someone asks for \"^1.0.0\" make sure they get \"1.2.3\" when working in this repo,\n     * instead of the latest version.\n     */\n    // \"some-library\": \"1.2.3\"\n  },\n\n  /**\n   * When set to true, for all projects in the repo, all dependencies will be automatically added as preferredVersions,\n   * except in cases where different projects specify different version ranges for a given dependency.  For older\n   * package managers, this tended to reduce duplication of indirect dependencies.  However, it can sometimes cause\n   * trouble for indirect dependencies with incompatible peerDependencies ranges.\n   *\n   * The default value is true.  If you're encountering installation errors related to peer dependencies,\n   * it's recommended to set this to false.\n   *\n   * After modifying this field, it's recommended to run \"rush update --full\" so that the package manager\n   * will recalculate all version selections.\n   */\n  // \"implicitlyPreferredVersions\": false,\n\n  /**\n   * If you would like the version specifiers for your dependencies to be consistent, then\n   * uncomment this line. This is effectively similar to running \"rush check\" before any\n   * of the following commands:\n   *\n   *   rush install, rush update, rush link, rush version, rush publish\n   *\n   * In some cases you may want this turned on, but need to allow certain packages to use a different\n   * version. In those cases, you will need to add an entry to the \"allowedAlternativeVersions\"\n   * section of the common-versions.json.\n   *\n   * In the case that subspaces is enabled, this setting will take effect at a subspace level.\n   */\n  // \"ensureConsistentVersions\": true,\n\n  /**\n   * The \"rush check\" command can be used to enforce that every project in the repo must specify\n   * the same SemVer range for a given dependency.  However, sometimes exceptions are needed.\n   * The allowedAlternativeVersions table allows you to list other SemVer ranges that will be\n   * accepted by \"rush check\" for a given dependency.\n   *\n   * IMPORTANT: THIS TABLE IS FOR *ADDITIONAL* VERSION RANGES THAT ARE ALTERNATIVES TO THE\n   * USUAL VERSION (WHICH IS INFERRED BY LOOKING AT ALL PROJECTS IN THE REPO).\n   * This design avoids unnecessary churn in this file.\n   */\n  \"allowedAlternativeVersions\": {\n    /**\n     * For example, allow some projects to use an older TypeScript compiler\n     * (in addition to whatever \"usual\" version is being used by other projects in the repo):\n     */\n    // \"typescript\": [\n    //   \"~2.4.0\"\n    // ]\n  }\n}\n"
  },
  {
    "path": "common/config/rush/custom-tips.json",
    "content": "/**\n * This configuration file allows repo maintainers to configure extra details to be\n * printed alongside certain Rush messages.  More documentation is available on the\n * Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/custom-tips.schema.json\",\n\n  /**\n   * Custom tips allow you to annotate Rush's console messages with advice tailored for\n   * your specific monorepo.\n   */\n  \"customTips\": [\n    // {\n    //   /**\n    //    * (REQUIRED) An identifier indicating a message that may be printed by Rush.\n    //    * If that message is printed, then this custom tip will be shown.\n    //    * The list of available tip identifiers can be found on this page:\n    //    * https://rushjs.io/pages/maintainer/custom_tips/\n    //    */\n    //   \"tipId\": \"TIP_RUSH_INCONSISTENT_VERSIONS\",\n    //\n    //   /**\n    //    * (REQUIRED) The message text to be displayed for this tip.\n    //    */\n    //   \"message\": \"For additional troubleshooting information, refer this wiki article:\\n\\nhttps://intranet.contoso.com/docs/pnpm-mismatch\"\n    // }\n  ]\n}\n"
  },
  {
    "path": "common/config/rush/experiments.json",
    "content": "/**\n * This configuration file allows repo maintainers to enable and disable experimental\n * Rush features.  More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/experiments.schema.json\"\n\n  /**\n   * By default, 'rush install' passes --no-prefer-frozen-lockfile to 'pnpm install'.\n   * Set this option to true to pass '--frozen-lockfile' instead for faster installs.\n   */\n  // \"usePnpmFrozenLockfileForRushInstall\": true,\n\n  /**\n   * By default, 'rush update' passes --no-prefer-frozen-lockfile to 'pnpm install'.\n   * Set this option to true to pass '--prefer-frozen-lockfile' instead to minimize shrinkwrap changes.\n   */\n  // \"usePnpmPreferFrozenLockfileForRushUpdate\": true,\n\n  /**\n   * By default, 'rush update' runs as a single operation.\n   * Set this option to true to instead update the lockfile with `--lockfile-only`, then perform a `--frozen-lockfile` install.\n   * Necessary when using the `afterAllResolved` hook in .pnpmfile.cjs.\n   */\n  // \"usePnpmLockfileOnlyThenFrozenLockfileForRushUpdate\": true,\n\n  /**\n   * If using the 'preventManualShrinkwrapChanges' option, restricts the hash to only include the layout of external dependencies.\n   * Used to allow links between workspace projects or the addition/removal of references to existing dependency versions to not\n   * cause hash changes.\n   */\n  // \"omitImportersFromPreventManualShrinkwrapChanges\": true,\n\n  /**\n   * If true, the chmod field in temporary project tar headers will not be normalized.\n   * This normalization can help ensure consistent tarball integrity across platforms.\n   */\n  // \"noChmodFieldInTarHeaderNormalization\": true,\n\n  /**\n   * If true, build caching will respect the allowWarningsInSuccessfulBuild flag and cache builds with warnings.\n   * This will not replay warnings from the cached build.\n   */\n  // \"buildCacheWithAllowWarningsInSuccessfulBuild\": true,\n\n  /**\n   * If true, build skipping will respect the allowWarningsInSuccessfulBuild flag and skip builds with warnings.\n   * This will not replay warnings from the skipped build.\n   */\n  // \"buildSkipWithAllowWarningsInSuccessfulBuild\": true,\n\n  /**\n   * If true, perform a clean install after when running `rush install` or `rush update` if the\n   * `.npmrc` file has changed since the last install.\n   */\n  // \"cleanInstallAfterNpmrcChanges\": true,\n\n  /**\n   * If true, print the outputs of shell commands defined in event hooks to the console.\n   */\n  // \"printEventHooksOutputToConsole\": true,\n\n  /**\n   * If true, Rush will not allow node_modules in the repo folder or in parent folders.\n   */\n  // \"forbidPhantomResolvableNodeModulesFolders\": true,\n\n  /**\n   * (UNDER DEVELOPMENT) For certain installation problems involving peer dependencies, PNPM cannot\n   * correctly satisfy versioning requirements without installing duplicate copies of a package inside the\n   * node_modules folder. This poses a problem for \"workspace:*\" dependencies, as they are normally\n   * installed by making a symlink to the local project source folder. PNPM's \"injected dependencies\"\n   * feature provides a model for copying the local project folder into node_modules, however copying\n   * must occur AFTER the dependency project is built and BEFORE the consuming project starts to build.\n   * The \"pnpm-sync\" tool manages this operation; see its documentation for details.\n   * Enable this experiment if you want \"rush\" and \"rushx\" commands to resync injected dependencies\n   * by invoking \"pnpm-sync\" during the build.\n   */\n  // \"usePnpmSyncForInjectedDependencies\": true,\n\n  /**\n   * If set to true, Rush will generate a `project-impact-graph.yaml` file in the repository root during `rush update`.\n   */\n  // \"generateProjectImpactGraphDuringRushUpdate\": true,\n  /**\n   * If true, when running in watch mode, Rush will check for phase scripts named `_phase:<name>:ipc` and run them instead\n   * of `_phase:<name>` if they exist. The created child process will be provided with an IPC channel and expected to persist\n   * across invocations.\n   */\n  // \"useIPCScriptsInWatchMode\": true\n}\n"
  },
  {
    "path": "common/config/rush/pnpm-config.json",
    "content": "/**\n * This configuration file provides settings specific to the PNPM package manager.\n * More documentation is available on the Rush website: https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/pnpm-config.schema.json\",\n\n  /**\n   * If true, then `rush install` and `rush update` will use the PNPM workspaces feature\n   * to perform the install, instead of the old model where Rush generated the symlinks\n   * for each projects's node_modules folder.\n   *\n   * When using workspaces, Rush will generate a `common/temp/pnpm-workspace.yaml` file referencing\n   * all local projects to install. Rush will also generate a `.pnpmfile.cjs` shim which implements\n   * Rush-specific features such as preferred versions.  The user's `common/config/rush/.pnpmfile.cjs`\n   * is invoked by the shim.\n   *\n   * This option is strongly recommended. The default value is false.\n   */\n  \"useWorkspaces\": true,\n\n  /**\n   * This setting determines how PNPM chooses version numbers during `rush update`.\n   * For example, suppose `lib-x@3.0.0` depends on `\"lib-y\": \"^1.2.3\"` whose latest major\n   * releases are `1.8.9` and `2.3.4`.  The resolution mode `lowest-direct` might choose\n   * `lib-y@1.2.3`, wheres `highest` will choose 1.8.9, and `time-based` will pick the\n   * highest compatible version at the time when `lib-x@3.0.0` itself was published (ensuring\n   * that the version could have been tested by the maintainer of \"lib-x\").  For local workspace\n   * projects, `time-based` instead works like `lowest-direct`, avoiding upgrades unless\n   * they are explicitly requested. Although `time-based` is the most robust option, it may be\n   * slightly slower with registries such as npmjs.com that have not implemented an optimization.\n   *\n   * IMPORTANT: Be aware that PNPM 8.0.0 initially defaulted to `lowest-direct` instead of\n   * `highest`, but PNPM reverted this decision in 8.6.12 because it caused confusion for users.\n   * Rush version 5.106.0 and newer avoids this confusion by consistently defaulting to\n   * `highest` when `resolutionMode` is not explicitly set in pnpm-config.json or .npmrc,\n   * regardless of your PNPM version.\n   *\n   * PNPM documentation: https://pnpm.io/npmrc#resolution-mode\n   *\n   * Possible values are: `highest`, `time-based`, and `lowest-direct`.\n   * The default is `highest`.\n   */\n  // \"resolutionMode\": \"time-based\",\n\n  /**\n   * This setting determines whether PNPM will automatically install (non-optional)\n   * missing peer dependencies instead of reporting an error.  Doing so conveniently\n   * avoids the need to specify peer versions in package.json, but in a large monorepo\n   * this often creates worse problems.  The reason is that peer dependency behavior\n   * is inherently complicated, and it is easier to troubleshoot consequences of an explicit\n   * version than an invisible heuristic.  The original NPM RFC discussion pointed out\n   * some other problems with this feature: https://github.com/npm/rfcs/pull/43\n\n   * IMPORTANT: Without Rush, the setting defaults to true for PNPM 8 and newer; however,\n   * as of Rush version 5.109.0 the default is always false unless `autoInstallPeers`\n   * is specified in pnpm-config.json or .npmrc, regardless of your PNPM version.\n\n   * PNPM documentation: https://pnpm.io/npmrc#auto-install-peers\n\n   * The default value is false.\n   */\n  // \"autoInstallPeers\": false,\n\n  /**\n   * If true, then Rush will add the `--strict-peer-dependencies` command-line parameter when\n   * invoking PNPM.  This causes `rush update` to fail if there are unsatisfied peer dependencies,\n   * which is an invalid state that can cause build failures or incompatible dependency versions.\n   * (For historical reasons, JavaScript package managers generally do not treat this invalid\n   * state as an error.)\n   *\n   * PNPM documentation: https://pnpm.io/npmrc#strict-peer-dependencies\n   *\n   * The default value is false to avoid legacy compatibility issues.\n   * It is strongly recommended to set `strictPeerDependencies=true`.\n   */\n  // \"strictPeerDependencies\": true,\n\n  /**\n   * Environment variables that will be provided to PNPM.\n   */\n  // \"environmentVariables\": {\n  //   \"NODE_OPTIONS\": {\n  //     \"value\": \"--max-old-space-size=4096\",\n  //     \"override\": false\n  //   }\n  // },\n\n  /**\n   * Specifies the location of the PNPM store.  There are two possible values:\n   *\n   * - `local` - use the `pnpm-store` folder in the current configured temp folder:\n   *   `common/temp/pnpm-store` by default.\n   * - `global` - use PNPM's global store, which has the benefit of being shared\n   *    across multiple repo folders, but the disadvantage of less isolation for builds\n   *    (for example, bugs or incompatibilities when two repos use different releases of PNPM)\n   *\n   * In both cases, the store path can be overridden by the environment variable `RUSH_PNPM_STORE_PATH`.\n   *\n   * The default value is `local`.\n   */\n  // \"pnpmStore\": \"global\",\n\n  /**\n   * If true, then `rush install` will report an error if manual modifications\n   * were made to the PNPM shrinkwrap file without running `rush update` afterwards.\n   *\n   * This feature protects against accidental inconsistencies that may be introduced\n   * if the PNPM shrinkwrap file (`pnpm-lock.yaml`) is manually edited.  When this\n   * feature is enabled, `rush update` will append a hash to the file as a YAML comment,\n   * and then `rush update` and `rush install` will validate the hash.  Note that this\n   * does not prohibit manual modifications, but merely requires `rush update` be run\n   * afterwards, ensuring that PNPM can report or repair any potential inconsistencies.\n   *\n   * To temporarily disable this validation when invoking `rush install`, use the\n   * `--bypass-policy` command-line parameter.\n   *\n   * The default value is false.\n   */\n  // \"preventManualShrinkwrapChanges\": true,\n\n  /**\n   * When a project uses `workspace:` to depend on another Rush project, PNPM normally installs\n   * it by creating a symlink under `node_modules`.  This generally works well, but in certain\n   * cases such as differing `peerDependencies` versions, symlinking may cause trouble\n   * such as incorrectly satisfied versions.  For such cases, the dependency can be declared\n   * as \"injected\", causing PNPM to copy its built output into `node_modules` like a real\n   * install from a registry.  Details here: https://rushjs.io/pages/advanced/injected_deps/\n   *\n   * When using Rush subspaces, these sorts of versioning problems are much more likely if\n   * `workspace:` refers to a project from a different subspace.  This is because the symlink\n   * would point to a separate `node_modules` tree installed by a different PNPM lockfile.\n   * A comprehensive solution is to enable `alwaysInjectDependenciesFromOtherSubspaces`,\n   * which automatically treats all projects from other subspaces as injected dependencies\n   * without having to manually configure them.\n   *\n   * NOTE: Use carefully -- excessive file copying can slow down the `rush install` and\n   * `pnpm-sync` operations if too many dependencies become injected.\n   *\n   * The default value is false.\n   */\n  // \"alwaysInjectDependenciesFromOtherSubspaces\": false,\n\n  /**\n   * Defines the policies to be checked for the `pnpm-lock.yaml` file.\n   */\n  \"pnpmLockfilePolicies\": {\n    /**\n     * This policy will cause \"rush update\" to report an error if `pnpm-lock.yaml` contains\n     * any SHA1 integrity hashes.\n     *\n     * For each NPM dependency, `pnpm-lock.yaml` normally stores an `integrity` hash.  Although\n     * its main purpose is to detect corrupted or truncated network requests, this hash can also\n     * serve as a security fingerprint to protect against attacks that would substitute a\n     * malicious tarball, for example if a misconfigured .npmrc caused a machine to accidentally\n     * download a matching package name+version from npmjs.com instead of the private NPM registry.\n     * NPM originally used a SHA1 hash; this was insecure because an attacker can too easily craft\n     * a tarball with a matching fingerprint.  For this reason, NPM later deprecated SHA1 and\n     * instead adopted a cryptographically strong SHA512 hash.  Nonetheless, SHA1 hashes can\n     * occasionally reappear during \"rush update\", for example due to missing metadata fallbacks\n     * (https://github.com/orgs/pnpm/discussions/6194) or an incompletely migrated private registry.\n     * The `disallowInsecureSha1` policy prevents this, avoiding potential security/compliance alerts.\n     */\n    // \"disallowInsecureSha1\": {\n    //   /**\n    //    * Enables the \"disallowInsecureSha1\" policy.  The default value is false.\n    //    */\n    //   \"enabled\": true,\n    //\n    //   /**\n    //    * In rare cases, a private NPM registry may continue to serve SHA1 hashes for very old\n    //    * package versions, perhaps due to a caching issue or database migration glitch.  To avoid\n    //    * having to disable the \"disallowInsecureSha1\" policy for the entire monorepo, the problematic\n    //    * package versions can be individually ignored.  The \"exemptPackageVersions\" key is the\n    //    * package name, and the array value lists exact version numbers to be ignored.\n    //    */\n    //   \"exemptPackageVersions\": {\n    //     \"example1\": [\"1.0.0\"],\n    //     \"example2\": [\"2.0.0\", \"2.0.1\"]\n    //   }\n    // }\n  },\n\n  /**\n   * The \"globalOverrides\" setting provides a simple mechanism for overriding version selections\n   * for all dependencies of all projects in the monorepo workspace.  The settings are copied\n   * into the `pnpm.overrides` field of the `common/temp/package.json` file that is generated\n   * by Rush during installation.\n   *\n   * Order of precedence: `.pnpmfile.cjs` has the highest precedence, followed by\n   * `unsupportedPackageJsonSettings`, `globalPeerDependencyRules`, `globalPackageExtensions`,\n   * and `globalOverrides` has lowest precedence.\n   *\n   * PNPM documentation: https://pnpm.io/package_json#pnpmoverrides\n   */\n  \"globalOverrides\": {\n    \"@antv/f6-hammerjs\": \"^0.0.2\"\n    // \"example1\": \"^1.0.0\",\n    // \"example2\": \"npm:@company/example2@^1.0.0\"\n  },\n\n  /**\n   * The `globalPeerDependencyRules` setting provides various settings for suppressing validation errors\n   * that are reported during installation with `strictPeerDependencies=true`.  The settings are copied\n   * into the `pnpm.peerDependencyRules` field of the `common/temp/package.json` file that is generated\n   * by Rush during installation.\n   *\n   * Order of precedence: `.pnpmfile.cjs` has the highest precedence, followed by\n   * `unsupportedPackageJsonSettings`, `globalPeerDependencyRules`, `globalPackageExtensions`,\n   * and `globalOverrides` has lowest precedence.\n   *\n   * https://pnpm.io/package_json#pnpmpeerdependencyrules\n   */\n  \"globalPeerDependencyRules\": {\n    // \"ignoreMissing\": [\"@eslint/*\"],\n    // \"allowedVersions\": { \"react\": \"17\" },\n    // \"allowAny\": [\"@babel/*\"]\n  },\n\n  /**\n   * The `globalPackageExtension` setting provides a way to patch arbitrary package.json fields\n   * for any PNPM dependency of the monorepo.  The settings are copied into the `pnpm.packageExtensions`\n   * field of the `common/temp/package.json` file that is generated by Rush during installation.\n   * The `globalPackageExtension` setting has similar capabilities as `.pnpmfile.cjs` but without\n   * the downsides of an executable script (nondeterminism, unreliable caching, performance concerns).\n   *\n   * Order of precedence: `.pnpmfile.cjs` has the highest precedence, followed by\n   * `unsupportedPackageJsonSettings`, `globalPeerDependencyRules`, `globalPackageExtensions`,\n   * and `globalOverrides` has lowest precedence.\n   *\n   * PNPM documentation: https://pnpm.io/package_json#pnpmpackageextensions\n   */\n  \"globalPackageExtensions\": {\n    // \"fork-ts-checker-webpack-plugin\": {\n    //   \"dependencies\": {\n    //     \"@babel/core\": \"1\"\n    //   },\n    //   \"peerDependencies\": {\n    //     \"eslint\": \">= 6\"\n    //   },\n    //   \"peerDependenciesMeta\": {\n    //     \"eslint\": {\n    //       \"optional\": true\n    //     }\n    //   }\n    // }\n  },\n\n  /**\n   * The `globalNeverBuiltDependencies` setting suppresses the `preinstall`, `install`, and `postinstall`\n   * lifecycle events for the specified NPM dependencies.  This is useful for scripts with poor practices\n   * such as downloading large binaries without retries or attempting to invoke OS tools such as\n   * a C++ compiler.  (PNPM's terminology refers to these lifecycle events as \"building\" a package;\n   * it has nothing to do with build system operations such as `rush build` or `rushx build`.)\n   * The settings are copied into the `pnpm.neverBuiltDependencies` field of the `common/temp/package.json`\n   * file that is generated by Rush during installation.\n   *\n   * PNPM documentation: https://pnpm.io/package_json#pnpmneverbuiltdependencies\n   */\n  \"globalNeverBuiltDependencies\": [\n    // \"fsevents\"\n  ],\n\n  /**\n   * The `globalAllowedDeprecatedVersions` setting suppresses installation warnings for package\n   * versions that the NPM registry reports as being deprecated.  This is useful if the\n   * deprecated package is an indirect dependency of an external package that has not released a fix.\n   * The settings are copied into the `pnpm.allowedDeprecatedVersions` field of the `common/temp/package.json`\n   * file that is generated by Rush during installation.\n   *\n   * PNPM documentation: https://pnpm.io/package_json#pnpmalloweddeprecatedversions\n   *\n   * If you are working to eliminate a deprecated version, it's better to specify `allowedDeprecatedVersions`\n   * in the package.json file for individual Rush projects.\n   */\n  \"globalAllowedDeprecatedVersions\": {\n    // \"request\": \"*\"\n  },\n\n  /**\n   * (THIS FIELD IS MACHINE GENERATED)  The \"globalPatchedDependencies\" field is updated automatically\n   * by the `rush-pnpm patch-commit` command.  It is a dictionary, where the key is an NPM package name\n   * and exact version, and the value is a relative path to the associated patch file.\n   *\n   * PNPM documentation: https://pnpm.io/package_json#pnpmpatcheddependencies\n   */\n  \"globalPatchedDependencies\": {},\n\n  /**\n   * (USE AT YOUR OWN RISK)  This is a free-form property bag that will be copied into\n   * the `common/temp/package.json` file that is generated by Rush during installation.\n   * This provides a way to experiment with new PNPM features.  These settings will override\n   * any other Rush configuration associated with a given JSON field except for `.pnpmfile.cjs`.\n   *\n   * USAGE OF THIS SETTING IS NOT SUPPORTED BY THE RUSH MAINTAINERS AND MAY CAUSE RUSH\n   * TO MALFUNCTION.  If you encounter a missing PNPM setting that you believe should\n   * be supported, please create a GitHub issue or PR.  Note that Rush does not aim to\n   * support every possible PNPM setting, but rather to promote a battle-tested installation\n   * strategy that is known to provide a good experience for large teams with lots of projects.\n   */\n  \"unsupportedPackageJsonSettings\": {\n    // \"dependencies\": {\n    //   \"not-a-good-practice\": \"*\"\n    // },\n    // \"scripts\": {\n    //   \"do-something\": \"echo Also not a good practice\"\n    // },\n    // \"pnpm\": { \"futurePnpmFeature\": true }\n  }\n}\n"
  },
  {
    "path": "common/config/rush/repo-state.json",
    "content": "// DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush.\n{\n  \"preferredVersionsHash\": \"bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f\"\n}\n"
  },
  {
    "path": "common/config/rush/rush-plugins.json",
    "content": "/**\n * This configuration file manages Rush's plugin feature.\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-plugins.schema.json\",\n  \"plugins\": [\n    /**\n     * Each item configures a plugin to be loaded by Rush.\n     */\n    // {\n    //   /**\n    //    * The name of the NPM package that provides the plugin.\n    //    */\n    //   \"packageName\": \"@scope/my-rush-plugin\",\n    //   /**\n    //    * The name of the plugin.  This can be found in the \"pluginName\"\n    //    * field of the \"rush-plugin-manifest.json\" file in the NPM package folder.\n    //    */\n    //   \"pluginName\": \"my-plugin-name\",\n    //   /**\n    //    * The name of a Rush autoinstaller that will be used for installation, which\n    //    * can be created using \"rush init-autoinstaller\".  Add the plugin's NPM package\n    //    * to the package.json \"dependencies\" of your autoinstaller, then run\n    //    * \"rush update-autoinstaller\".\n    //    */\n    //   \"autoinstallerName\": \"rush-plugins\"\n    // }\n  ]\n}\n"
  },
  {
    "path": "common/config/rush/subspaces.json",
    "content": "/**\n * This configuration file manages the experimental \"subspaces\" feature for Rush,\n * which allows multiple PNPM lockfiles to be used in a single Rush workspace.\n * For full documentation, please see https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/subspaces.schema.json\",\n\n  /**\n   * Set this flag to \"true\" to enable usage of subspaces.\n   */\n  \"subspacesEnabled\": false,\n\n  /**\n   * (DEPRECATED) This is a temporary workaround for migrating from an earlier prototype\n   * of this feature: https://github.com/microsoft/rushstack/pull/3481\n   * It allows subspaces with only one project to store their config files in the project folder.\n   */\n  \"splitWorkspaceCompatibility\": false,\n\n  /**\n   * When a command such as \"rush update\" is invoked without the \"--subspace\" or \"--to\"\n   * parameters, Rush will install all subspaces.  In a huge monorepo with numerous subspaces,\n   * this would be extremely slow.  Set \"preventSelectingAllSubspaces\" to true to avoid this\n   * mistake by always requiring selection parameters for commands such as \"rush update\".\n   */\n  \"preventSelectingAllSubspaces\": false,\n\n  /**\n   * The list of subspace names, which should be lowercase alphanumeric words separated by\n   * hyphens, for example \"my-subspace\".  The corresponding config files will have paths\n   * such as \"common/config/subspaces/my-subspace/package-lock.yaml\".\n   */\n  \"subspaceNames\": []\n}\n"
  },
  {
    "path": "common/config/rush/version-policies.json",
    "content": "/**\n * This is configuration file is used for advanced publishing configurations with Rush.\n * More documentation is available on the Rush website: https://rushjs.io\n */\n\n/**\n * A list of version policy definitions.  A \"version policy\" is a custom package versioning\n * strategy that affects \"rush change\", \"rush version\", and \"rush publish\".  The strategy applies\n * to a set of projects that are specified using the \"versionPolicyName\" field in rush.json.\n */\n[\n  // {\n  //   /**\n  //    * (Required) Indicates the kind of version policy being defined (\"lockStepVersion\" or \"individualVersion\").\n  //    *\n  //    * The \"lockStepVersion\" mode specifies that the projects will use \"lock-step versioning\".  This\n  //    * strategy is appropriate for a set of packages that act as selectable components of a\n  //    * unified product.  The entire set of packages are always published together, and always share\n  //    * the same NPM version number.  When the packages depend on other packages in the set, the\n  //    * SemVer range is usually restricted to a single version.\n  //    */\n  //   \"definitionName\": \"lockStepVersion\",\n  //\n  //   /**\n  //    * (Required) The name that will be used for the \"versionPolicyName\" field in rush.json.\n  //    * This name is also used command-line parameters such as \"--version-policy\"\n  //    * and \"--to-version-policy\".\n  //    */\n  //   \"policyName\": \"MyBigFramework\",\n  //\n  //   /**\n  //    * (Required) The current version.  All packages belonging to the set should have this version\n  //    * in the current branch.  When bumping versions, Rush uses this to determine the next version.\n  //    * (The \"version\" field in package.json is NOT considered.)\n  //    */\n  //   \"version\": \"1.0.0\",\n  //\n  //   /**\n  //    * (Required) The type of bump that will be performed when publishing the next release.\n  //    * When creating a release branch in Git, this field should be updated according to the\n  //    * type of release.\n  //    *\n  //    * Valid values are: \"prerelease\", \"preminor\", \"minor\", \"patch\", \"major\"\n  //    */\n  //   \"nextBump\": \"prerelease\",\n  //\n  //   /**\n  //    * (Optional) If specified, all packages in the set share a common CHANGELOG.md file.\n  //    * This file is stored with the specified \"main\" project, which must be a member of the set.\n  //    *\n  //    * If this field is omitted, then a separate CHANGELOG.md file will be maintained for each\n  //    * package in the set.\n  //    */\n  //   \"mainProject\": \"my-app\",\n  //\n  //   /**\n  //    * (Optional) If enabled, the \"rush change\" command will prompt the user for their email address\n  //    * and include it in the JSON change files.  If an organization maintains multiple repos, tracking\n  //    * this contact information may be useful for a service that automatically upgrades packages and\n  //    * needs to notify engineers whose change may be responsible for a downstream build break.  It might\n  //    * also be useful for crediting contributors.  Rush itself does not do anything with the collected\n  //    * email addresses.  The default value is \"false\".\n  //    */\n  //   // \"includeEmailInChangeFile\": true\n  // },\n  //\n  // {\n  //   /**\n  //    * (Required) Indicates the kind of version policy being defined (\"lockStepVersion\" or \"individualVersion\").\n  //    *\n  //    * The \"individualVersion\" mode specifies that the projects will use \"individual versioning\".\n  //    * This is the typical NPM model where each package has an independent version number\n  //    * and CHANGELOG.md file.  Although a single CI definition is responsible for publishing the\n  //    * packages, they otherwise don't have any special relationship.  The version bumping will\n  //    * depend on how developers answer the \"rush change\" questions for each package that\n  //    * is changed.\n  //    */\n  //   \"definitionName\": \"individualVersion\",\n  //\n  //   \"policyName\": \"MyRandomLibraries\",\n  //\n  //   /**\n  //    * (Optional) This can be used to enforce that all packages in the set must share a common\n  //    * major version number, e.g. because they are from the same major release branch.\n  //    * It can also be used to discourage people from accidentally making \"MAJOR\" SemVer changes\n  //    * inappropriately.  The minor/patch version parts will be bumped independently according\n  //    * to the types of changes made to each project, according to the \"rush change\" command.\n  //    */\n  //   \"lockedMajor\": 3,\n  //\n  //   /**\n  //    * (Optional) When publishing is managed by Rush, by default the \"rush change\" command will\n  //    * request changes for any projects that are modified by a pull request. These change entries\n  //    * will produce a CHANGELOG.md file. If you author your CHANGELOG.md manually or announce updates\n  //    * in some other way, set \"exemptFromRushChange\" to true to tell \"rush change\" to ignore the projects\n  //    * belonging to this version policy.\n  //    */\n  //   \"exemptFromRushChange\": false,\n  //\n  //   // \"includeEmailInChangeFile\": true\n  // }\n]\n"
  },
  {
    "path": "common/git-hooks/commit-msg.sample",
    "content": "#!/bin/sh\n#\n# This is an example Git hook for use with Rush.  To enable this hook, rename this file\n# to \"commit-msg\" and then run \"rush install\", which will copy it from common/git-hooks\n# to the .git/hooks folder.\n#\n# TO LEARN MORE ABOUT GIT HOOKS\n#\n# The Git documentation is here: https://git-scm.com/docs/githooks\n# Some helpful resources: https://githooks.com\n#\n# ABOUT THIS EXAMPLE\n#\n# The commit-msg hook is called by \"git commit\" with one argument, the name of the file\n# that has the commit message.  The hook should exit with non-zero status after issuing\n# an appropriate message if it wants to stop the commit.  The hook is allowed to edit\n# the commit message file.\n\n# This example enforces that commit message should contain a minimum amount of\n# description text.\nif [ `cat $1 | wc -w` -lt 3 ]; then\n  echo \"\"\n  echo \"Invalid commit message: The message must contain at least 3 words.\"\n\texit 1\nfi\n"
  },
  {
    "path": "common/git-hooks/pre-commit",
    "content": "#!/bin/sh\n# Called by \"git commit\" with no arguments.  The hook should\n# exit with non-zero status after issuing an appropriate message if\n# it wants to stop the commit.\n\n# Invoke the \"rush prettier\" custom command to reformat files whenever they\n# are committed. The command is defined in common/config/rush/command-line.json\n# and uses the \"rush-prettier\" autoinstaller.\nnode common/scripts/install-run-rush.js prettier || exit $?\n\n"
  },
  {
    "path": "common/scripts/install-run-rush-pnpm.js",
    "content": "// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.\n//\n// This script is intended for usage in an automated build environment where the Rush command may not have\n// been preinstalled, or may have an unpredictable version.  This script will automatically install the version of Rush\n// specified in the rush.json configuration file (if not already installed), and then pass a command-line to the\n// rush-pnpm command.\n//\n// An example usage would be:\n//\n//    node common/scripts/install-run-rush-pnpm.js pnpm-command\n//\n// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/\n//\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See the @microsoft/rush package's LICENSE file for details.\n\n/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\nvar __webpack_exports__ = {};\n/*!*****************************************************!*\\\n  !*** ./lib-esnext/scripts/install-run-rush-pnpm.js ***!\n  \\*****************************************************/\n\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\nrequire('./install-run-rush');\n//# sourceMappingURL=install-run-rush-pnpm.js.map\nmodule.exports = __webpack_exports__;\n/******/ })()\n;\n//# sourceMappingURL=install-run-rush-pnpm.js.map"
  },
  {
    "path": "common/scripts/install-run-rush.js",
    "content": "// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.\n//\n// This script is intended for usage in an automated build environment where the Rush command may not have\n// been preinstalled, or may have an unpredictable version.  This script will automatically install the version of Rush\n// specified in the rush.json configuration file (if not already installed), and then pass a command-line to it.\n// An example usage would be:\n//\n//    node common/scripts/install-run-rush.js install\n//\n// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/\n//\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See the @microsoft/rush package's LICENSE file for details.\n\n/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 657147:\n/*!*********************!*\\\n  !*** external \"fs\" ***!\n  \\*********************/\n/***/ ((module) => {\n\nmodule.exports = require(\"fs\");\n\n/***/ }),\n\n/***/ 371017:\n/*!***********************!*\\\n  !*** external \"path\" ***!\n  \\***********************/\n/***/ ((module) => {\n\nmodule.exports = require(\"path\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!************************************************!*\\\n  !*** ./lib-esnext/scripts/install-run-rush.js ***!\n  \\************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! path */ 371017);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ 657147);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n/* eslint-disable no-console */\n\n\nconst { installAndRun, findRushJsonFolder, RUSH_JSON_FILENAME, runWithErrorAndStatusCode } = require('./install-run');\nconst PACKAGE_NAME = '@microsoft/rush';\nconst RUSH_PREVIEW_VERSION = 'RUSH_PREVIEW_VERSION';\nconst INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE = 'INSTALL_RUN_RUSH_LOCKFILE_PATH';\nfunction _getRushVersion(logger) {\n    const rushPreviewVersion = process.env[RUSH_PREVIEW_VERSION];\n    if (rushPreviewVersion !== undefined) {\n        logger.info(`Using Rush version from environment variable ${RUSH_PREVIEW_VERSION}=${rushPreviewVersion}`);\n        return rushPreviewVersion;\n    }\n    const rushJsonFolder = findRushJsonFolder();\n    const rushJsonPath = path__WEBPACK_IMPORTED_MODULE_0__.join(rushJsonFolder, RUSH_JSON_FILENAME);\n    try {\n        const rushJsonContents = fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync(rushJsonPath, 'utf-8');\n        // Use a regular expression to parse out the rushVersion value because rush.json supports comments,\n        // but JSON.parse does not and we don't want to pull in more dependencies than we need to in this script.\n        const rushJsonMatches = rushJsonContents.match(/\\\"rushVersion\\\"\\s*\\:\\s*\\\"([0-9a-zA-Z.+\\-]+)\\\"/);\n        return rushJsonMatches[1];\n    }\n    catch (e) {\n        throw new Error(`Unable to determine the required version of Rush from ${RUSH_JSON_FILENAME} (${rushJsonFolder}). ` +\n            `The 'rushVersion' field is either not assigned in ${RUSH_JSON_FILENAME} or was specified ` +\n            'using an unexpected syntax.');\n    }\n}\nfunction _getBin(scriptName) {\n    switch (scriptName.toLowerCase()) {\n        case 'install-run-rush-pnpm.js':\n            return 'rush-pnpm';\n        case 'install-run-rushx.js':\n            return 'rushx';\n        default:\n            return 'rush';\n    }\n}\nfunction _run() {\n    const [nodePath /* Ex: /bin/node */, scriptPath /* /repo/common/scripts/install-run-rush.js */, ...packageBinArgs /* [build, --to, myproject] */] = process.argv;\n    // Detect if this script was directly invoked, or if the install-run-rushx script was invokved to select the\n    // appropriate binary inside the rush package to run\n    const scriptName = path__WEBPACK_IMPORTED_MODULE_0__.basename(scriptPath);\n    const bin = _getBin(scriptName);\n    if (!nodePath || !scriptPath) {\n        throw new Error('Unexpected exception: could not detect node path or script path');\n    }\n    let commandFound = false;\n    let logger = { info: console.log, error: console.error };\n    for (const arg of packageBinArgs) {\n        if (arg === '-q' || arg === '--quiet') {\n            // The -q/--quiet flag is supported by both `rush` and `rushx`, and will suppress\n            // any normal informational/diagnostic information printed during startup.\n            //\n            // To maintain the same user experience, the install-run* scripts pass along this\n            // flag but also use it to suppress any diagnostic information normally printed\n            // to stdout.\n            logger = {\n                info: () => { },\n                error: console.error\n            };\n        }\n        else if (!arg.startsWith('-') || arg === '-h' || arg === '--help') {\n            // We either found something that looks like a command (i.e. - doesn't start with a \"-\"),\n            // or we found the -h/--help flag, which can be run without a command\n            commandFound = true;\n        }\n    }\n    if (!commandFound) {\n        console.log(`Usage: ${scriptName} <command> [args...]`);\n        if (scriptName === 'install-run-rush-pnpm.js') {\n            console.log(`Example: ${scriptName} pnpm-command`);\n        }\n        else if (scriptName === 'install-run-rush.js') {\n            console.log(`Example: ${scriptName} build --to myproject`);\n        }\n        else {\n            console.log(`Example: ${scriptName} custom-command`);\n        }\n        process.exit(1);\n    }\n    runWithErrorAndStatusCode(logger, () => {\n        const version = _getRushVersion(logger);\n        logger.info(`The ${RUSH_JSON_FILENAME} configuration requests Rush version ${version}`);\n        const lockFilePath = process.env[INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE];\n        if (lockFilePath) {\n            logger.info(`Found ${INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE}=\"${lockFilePath}\", installing with lockfile.`);\n        }\n        return installAndRun(logger, PACKAGE_NAME, version, bin, packageBinArgs, lockFilePath);\n    });\n}\n_run();\n//# sourceMappingURL=install-run-rush.js.map\n})();\n\nmodule.exports = __webpack_exports__;\n/******/ })()\n;\n//# sourceMappingURL=install-run-rush.js.map"
  },
  {
    "path": "common/scripts/install-run-rushx.js",
    "content": "// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.\n//\n// This script is intended for usage in an automated build environment where the Rush command may not have\n// been preinstalled, or may have an unpredictable version.  This script will automatically install the version of Rush\n// specified in the rush.json configuration file (if not already installed), and then pass a command-line to the\n// rushx command.\n//\n// An example usage would be:\n//\n//    node common/scripts/install-run-rushx.js custom-command\n//\n// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/\n//\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See the @microsoft/rush package's LICENSE file for details.\n\n/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\nvar __webpack_exports__ = {};\n/*!*************************************************!*\\\n  !*** ./lib-esnext/scripts/install-run-rushx.js ***!\n  \\*************************************************/\n\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\nrequire('./install-run-rush');\n//# sourceMappingURL=install-run-rushx.js.map\nmodule.exports = __webpack_exports__;\n/******/ })()\n;\n//# sourceMappingURL=install-run-rushx.js.map"
  },
  {
    "path": "common/scripts/install-run.js",
    "content": "// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.\n//\n// This script is intended for usage in an automated build environment where a Node tool may not have\n// been preinstalled, or may have an unpredictable version.  This script will automatically install the specified\n// version of the specified tool (if not already installed), and then pass a command-line to it.\n// An example usage would be:\n//\n//    node common/scripts/install-run.js qrcode@1.2.2 qrcode https://rushjs.io\n//\n// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/\n//\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See the @microsoft/rush package's LICENSE file for details.\n\n/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 679877:\n/*!************************************************!*\\\n  !*** ./lib-esnext/utilities/npmrcUtilities.js ***!\n  \\************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"isVariableSetInNpmrcFile\": () => (/* binding */ isVariableSetInNpmrcFile),\n/* harmony export */   \"syncNpmrc\": () => (/* binding */ syncNpmrc)\n/* harmony export */ });\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ 657147);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ 371017);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n// IMPORTANT - do not use any non-built-in libraries in this file\n\n\n/**\n * This function reads the content for given .npmrc file path, and also trims\n * unusable lines from the .npmrc file.\n *\n * @returns\n * The text of the the .npmrc.\n */\n// create a global _combinedNpmrc for cache purpose\nconst _combinedNpmrcMap = new Map();\nfunction _trimNpmrcFile(options) {\n    const { sourceNpmrcPath, linesToPrepend, linesToAppend } = options;\n    const combinedNpmrcFromCache = _combinedNpmrcMap.get(sourceNpmrcPath);\n    if (combinedNpmrcFromCache !== undefined) {\n        return combinedNpmrcFromCache;\n    }\n    let npmrcFileLines = [];\n    if (linesToPrepend) {\n        npmrcFileLines.push(...linesToPrepend);\n    }\n    if (fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(sourceNpmrcPath)) {\n        npmrcFileLines.push(...fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(sourceNpmrcPath).toString().split('\\n'));\n    }\n    if (linesToAppend) {\n        npmrcFileLines.push(...linesToAppend);\n    }\n    npmrcFileLines = npmrcFileLines.map((line) => (line || '').trim());\n    const resultLines = [];\n    // This finds environment variable tokens that look like \"${VAR_NAME}\"\n    const expansionRegExp = /\\$\\{([^\\}]+)\\}/g;\n    // Comment lines start with \"#\" or \";\"\n    const commentRegExp = /^\\s*[#;]/;\n    // Trim out lines that reference environment variables that aren't defined\n    for (let line of npmrcFileLines) {\n        let lineShouldBeTrimmed = false;\n        //remove spaces before or after key and value\n        line = line\n            .split('=')\n            .map((lineToTrim) => lineToTrim.trim())\n            .join('=');\n        // Ignore comment lines\n        if (!commentRegExp.test(line)) {\n            const environmentVariables = line.match(expansionRegExp);\n            if (environmentVariables) {\n                for (const token of environmentVariables) {\n                    // Remove the leading \"${\" and the trailing \"}\" from the token\n                    const environmentVariableName = token.substring(2, token.length - 1);\n                    // Is the environment variable defined?\n                    if (!process.env[environmentVariableName]) {\n                        // No, so trim this line\n                        lineShouldBeTrimmed = true;\n                        break;\n                    }\n                }\n            }\n        }\n        if (lineShouldBeTrimmed) {\n            // Example output:\n            // \"; MISSING ENVIRONMENT VARIABLE: //my-registry.com/npm/:_authToken=${MY_AUTH_TOKEN}\"\n            resultLines.push('; MISSING ENVIRONMENT VARIABLE: ' + line);\n        }\n        else {\n            resultLines.push(line);\n        }\n    }\n    const combinedNpmrc = resultLines.join('\\n');\n    //save the cache\n    _combinedNpmrcMap.set(sourceNpmrcPath, combinedNpmrc);\n    return combinedNpmrc;\n}\nfunction _copyAndTrimNpmrcFile(options) {\n    const { logger, sourceNpmrcPath, targetNpmrcPath, linesToPrepend, linesToAppend } = options;\n    logger.info(`Transforming ${sourceNpmrcPath}`); // Verbose\n    logger.info(`  --> \"${targetNpmrcPath}\"`);\n    const combinedNpmrc = _trimNpmrcFile({\n        sourceNpmrcPath,\n        linesToPrepend,\n        linesToAppend\n    });\n    fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(targetNpmrcPath, combinedNpmrc);\n    return combinedNpmrc;\n}\nfunction syncNpmrc(options) {\n    const { sourceNpmrcFolder, targetNpmrcFolder, useNpmrcPublish, logger = {\n        // eslint-disable-next-line no-console\n        info: console.log,\n        // eslint-disable-next-line no-console\n        error: console.error\n    }, createIfMissing = false, linesToAppend, linesToPrepend } = options;\n    const sourceNpmrcPath = path__WEBPACK_IMPORTED_MODULE_1__.join(sourceNpmrcFolder, !useNpmrcPublish ? '.npmrc' : '.npmrc-publish');\n    const targetNpmrcPath = path__WEBPACK_IMPORTED_MODULE_1__.join(targetNpmrcFolder, '.npmrc');\n    try {\n        if (fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(sourceNpmrcPath) || createIfMissing) {\n            // Ensure the target folder exists\n            if (!fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(targetNpmrcFolder)) {\n                fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync(targetNpmrcFolder, { recursive: true });\n            }\n            return _copyAndTrimNpmrcFile({\n                sourceNpmrcPath,\n                targetNpmrcPath,\n                logger,\n                linesToAppend,\n                linesToPrepend\n            });\n        }\n        else if (fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(targetNpmrcPath)) {\n            // If the source .npmrc doesn't exist and there is one in the target, delete the one in the target\n            logger.info(`Deleting ${targetNpmrcPath}`); // Verbose\n            fs__WEBPACK_IMPORTED_MODULE_0__.unlinkSync(targetNpmrcPath);\n        }\n    }\n    catch (e) {\n        throw new Error(`Error syncing .npmrc file: ${e}`);\n    }\n}\nfunction isVariableSetInNpmrcFile(sourceNpmrcFolder, variableKey) {\n    const sourceNpmrcPath = `${sourceNpmrcFolder}/.npmrc`;\n    //if .npmrc file does not exist, return false directly\n    if (!fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(sourceNpmrcPath)) {\n        return false;\n    }\n    const trimmedNpmrcFile = _trimNpmrcFile({ sourceNpmrcPath });\n    const variableKeyRegExp = new RegExp(`^${variableKey}=`, 'm');\n    return trimmedNpmrcFile.match(variableKeyRegExp) !== null;\n}\n//# sourceMappingURL=npmrcUtilities.js.map\n\n/***/ }),\n\n/***/ 532081:\n/*!********************************!*\\\n  !*** external \"child_process\" ***!\n  \\********************************/\n/***/ ((module) => {\n\nmodule.exports = require(\"child_process\");\n\n/***/ }),\n\n/***/ 657147:\n/*!*********************!*\\\n  !*** external \"fs\" ***!\n  \\*********************/\n/***/ ((module) => {\n\nmodule.exports = require(\"fs\");\n\n/***/ }),\n\n/***/ 822037:\n/*!*********************!*\\\n  !*** external \"os\" ***!\n  \\*********************/\n/***/ ((module) => {\n\nmodule.exports = require(\"os\");\n\n/***/ }),\n\n/***/ 371017:\n/*!***********************!*\\\n  !*** external \"path\" ***!\n  \\***********************/\n/***/ ((module) => {\n\nmodule.exports = require(\"path\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!*******************************************!*\\\n  !*** ./lib-esnext/scripts/install-run.js ***!\n  \\*******************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"RUSH_JSON_FILENAME\": () => (/* binding */ RUSH_JSON_FILENAME),\n/* harmony export */   \"findRushJsonFolder\": () => (/* binding */ findRushJsonFolder),\n/* harmony export */   \"getNpmPath\": () => (/* binding */ getNpmPath),\n/* harmony export */   \"installAndRun\": () => (/* binding */ installAndRun),\n/* harmony export */   \"runWithErrorAndStatusCode\": () => (/* binding */ runWithErrorAndStatusCode)\n/* harmony export */ });\n/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! child_process */ 532081);\n/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(child_process__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ 657147);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! os */ 822037);\n/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(os__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! path */ 371017);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utilities_npmrcUtilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utilities/npmrcUtilities */ 679877);\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n/* eslint-disable no-console */\n\n\n\n\n\nconst RUSH_JSON_FILENAME = 'rush.json';\nconst RUSH_TEMP_FOLDER_ENV_VARIABLE_NAME = 'RUSH_TEMP_FOLDER';\nconst INSTALL_RUN_LOCKFILE_PATH_VARIABLE = 'INSTALL_RUN_LOCKFILE_PATH';\nconst INSTALLED_FLAG_FILENAME = 'installed.flag';\nconst NODE_MODULES_FOLDER_NAME = 'node_modules';\nconst PACKAGE_JSON_FILENAME = 'package.json';\n/**\n * Parse a package specifier (in the form of name\\@version) into name and version parts.\n */\nfunction _parsePackageSpecifier(rawPackageSpecifier) {\n    rawPackageSpecifier = (rawPackageSpecifier || '').trim();\n    const separatorIndex = rawPackageSpecifier.lastIndexOf('@');\n    let name;\n    let version = undefined;\n    if (separatorIndex === 0) {\n        // The specifier starts with a scope and doesn't have a version specified\n        name = rawPackageSpecifier;\n    }\n    else if (separatorIndex === -1) {\n        // The specifier doesn't have a version\n        name = rawPackageSpecifier;\n    }\n    else {\n        name = rawPackageSpecifier.substring(0, separatorIndex);\n        version = rawPackageSpecifier.substring(separatorIndex + 1);\n    }\n    if (!name) {\n        throw new Error(`Invalid package specifier: ${rawPackageSpecifier}`);\n    }\n    return { name, version };\n}\nlet _npmPath = undefined;\n/**\n * Get the absolute path to the npm executable\n */\nfunction getNpmPath() {\n    if (!_npmPath) {\n        try {\n            if (_isWindows()) {\n                // We're on Windows\n                const whereOutput = child_process__WEBPACK_IMPORTED_MODULE_0__.execSync('where npm', { stdio: [] }).toString();\n                const lines = whereOutput.split(os__WEBPACK_IMPORTED_MODULE_2__.EOL).filter((line) => !!line);\n                // take the last result, we are looking for a .cmd command\n                // see https://github.com/microsoft/rushstack/issues/759\n                _npmPath = lines[lines.length - 1];\n            }\n            else {\n                // We aren't on Windows - assume we're on *NIX or Darwin\n                _npmPath = child_process__WEBPACK_IMPORTED_MODULE_0__.execSync('command -v npm', { stdio: [] }).toString();\n            }\n        }\n        catch (e) {\n            throw new Error(`Unable to determine the path to the NPM tool: ${e}`);\n        }\n        _npmPath = _npmPath.trim();\n        if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(_npmPath)) {\n            throw new Error('The NPM executable does not exist');\n        }\n    }\n    return _npmPath;\n}\nfunction _ensureFolder(folderPath) {\n    if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(folderPath)) {\n        const parentDir = path__WEBPACK_IMPORTED_MODULE_3__.dirname(folderPath);\n        _ensureFolder(parentDir);\n        fs__WEBPACK_IMPORTED_MODULE_1__.mkdirSync(folderPath);\n    }\n}\n/**\n * Create missing directories under the specified base directory, and return the resolved directory.\n *\n * Does not support \".\" or \"..\" path segments.\n * Assumes the baseFolder exists.\n */\nfunction _ensureAndJoinPath(baseFolder, ...pathSegments) {\n    let joinedPath = baseFolder;\n    try {\n        for (let pathSegment of pathSegments) {\n            pathSegment = pathSegment.replace(/[\\\\\\/]/g, '+');\n            joinedPath = path__WEBPACK_IMPORTED_MODULE_3__.join(joinedPath, pathSegment);\n            if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(joinedPath)) {\n                fs__WEBPACK_IMPORTED_MODULE_1__.mkdirSync(joinedPath);\n            }\n        }\n    }\n    catch (e) {\n        throw new Error(`Error building local installation folder (${path__WEBPACK_IMPORTED_MODULE_3__.join(baseFolder, ...pathSegments)}): ${e}`);\n    }\n    return joinedPath;\n}\nfunction _getRushTempFolder(rushCommonFolder) {\n    const rushTempFolder = process.env[RUSH_TEMP_FOLDER_ENV_VARIABLE_NAME];\n    if (rushTempFolder !== undefined) {\n        _ensureFolder(rushTempFolder);\n        return rushTempFolder;\n    }\n    else {\n        return _ensureAndJoinPath(rushCommonFolder, 'temp');\n    }\n}\n/**\n * Compare version strings according to semantic versioning.\n * Returns a positive integer if \"a\" is a later version than \"b\",\n * a negative integer if \"b\" is later than \"a\",\n * and 0 otherwise.\n */\nfunction _compareVersionStrings(a, b) {\n    const aParts = a.split(/[.-]/);\n    const bParts = b.split(/[.-]/);\n    const numberOfParts = Math.max(aParts.length, bParts.length);\n    for (let i = 0; i < numberOfParts; i++) {\n        if (aParts[i] !== bParts[i]) {\n            return (Number(aParts[i]) || 0) - (Number(bParts[i]) || 0);\n        }\n    }\n    return 0;\n}\n/**\n * Resolve a package specifier to a static version\n */\nfunction _resolvePackageVersion(logger, rushCommonFolder, { name, version }) {\n    if (!version) {\n        version = '*'; // If no version is specified, use the latest version\n    }\n    if (version.match(/^[a-zA-Z0-9\\-\\+\\.]+$/)) {\n        // If the version contains only characters that we recognize to be used in static version specifiers,\n        // pass the version through\n        return version;\n    }\n    else {\n        // version resolves to\n        try {\n            const rushTempFolder = _getRushTempFolder(rushCommonFolder);\n            const sourceNpmrcFolder = path__WEBPACK_IMPORTED_MODULE_3__.join(rushCommonFolder, 'config', 'rush');\n            (0,_utilities_npmrcUtilities__WEBPACK_IMPORTED_MODULE_4__.syncNpmrc)({\n                sourceNpmrcFolder,\n                targetNpmrcFolder: rushTempFolder,\n                logger\n            });\n            const npmPath = getNpmPath();\n            // This returns something that looks like:\n            // ```\n            // [\n            //   \"3.0.0\",\n            //   \"3.0.1\",\n            //   ...\n            //   \"3.0.20\"\n            // ]\n            // ```\n            //\n            // if multiple versions match the selector, or\n            //\n            // ```\n            // \"3.0.0\"\n            // ```\n            //\n            // if only a single version matches.\n            const spawnSyncOptions = {\n                cwd: rushTempFolder,\n                stdio: [],\n                shell: _isWindows()\n            };\n            const platformNpmPath = _getPlatformPath(npmPath);\n            const npmVersionSpawnResult = child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync(platformNpmPath, ['view', `${name}@${version}`, 'version', '--no-update-notifier', '--json'], spawnSyncOptions);\n            if (npmVersionSpawnResult.status !== 0) {\n                throw new Error(`\"npm view\" returned error code ${npmVersionSpawnResult.status}`);\n            }\n            const npmViewVersionOutput = npmVersionSpawnResult.stdout.toString();\n            const parsedVersionOutput = JSON.parse(npmViewVersionOutput);\n            const versions = Array.isArray(parsedVersionOutput)\n                ? parsedVersionOutput\n                : [parsedVersionOutput];\n            let latestVersion = versions[0];\n            for (let i = 1; i < versions.length; i++) {\n                const latestVersionCandidate = versions[i];\n                if (_compareVersionStrings(latestVersionCandidate, latestVersion) > 0) {\n                    latestVersion = latestVersionCandidate;\n                }\n            }\n            if (!latestVersion) {\n                throw new Error('No versions found for the specified version range.');\n            }\n            return latestVersion;\n        }\n        catch (e) {\n            throw new Error(`Unable to resolve version ${version} of package ${name}: ${e}`);\n        }\n    }\n}\nlet _rushJsonFolder;\n/**\n * Find the absolute path to the folder containing rush.json\n */\nfunction findRushJsonFolder() {\n    if (!_rushJsonFolder) {\n        let basePath = __dirname;\n        let tempPath = __dirname;\n        do {\n            const testRushJsonPath = path__WEBPACK_IMPORTED_MODULE_3__.join(basePath, RUSH_JSON_FILENAME);\n            if (fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(testRushJsonPath)) {\n                _rushJsonFolder = basePath;\n                break;\n            }\n            else {\n                basePath = tempPath;\n            }\n        } while (basePath !== (tempPath = path__WEBPACK_IMPORTED_MODULE_3__.dirname(basePath))); // Exit the loop when we hit the disk root\n        if (!_rushJsonFolder) {\n            throw new Error(`Unable to find ${RUSH_JSON_FILENAME}.`);\n        }\n    }\n    return _rushJsonFolder;\n}\n/**\n * Detects if the package in the specified directory is installed\n */\nfunction _isPackageAlreadyInstalled(packageInstallFolder) {\n    try {\n        const flagFilePath = path__WEBPACK_IMPORTED_MODULE_3__.join(packageInstallFolder, INSTALLED_FLAG_FILENAME);\n        if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(flagFilePath)) {\n            return false;\n        }\n        const fileContents = fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync(flagFilePath).toString();\n        return fileContents.trim() === process.version;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Delete a file. Fail silently if it does not exist.\n */\nfunction _deleteFile(file) {\n    try {\n        fs__WEBPACK_IMPORTED_MODULE_1__.unlinkSync(file);\n    }\n    catch (err) {\n        if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n            throw err;\n        }\n    }\n}\n/**\n * Removes the following files and directories under the specified folder path:\n *  - installed.flag\n *  -\n *  - node_modules\n */\nfunction _cleanInstallFolder(rushTempFolder, packageInstallFolder, lockFilePath) {\n    try {\n        const flagFile = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, INSTALLED_FLAG_FILENAME);\n        _deleteFile(flagFile);\n        const packageLockFile = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, 'package-lock.json');\n        if (lockFilePath) {\n            fs__WEBPACK_IMPORTED_MODULE_1__.copyFileSync(lockFilePath, packageLockFile);\n        }\n        else {\n            // Not running `npm ci`, so need to cleanup\n            _deleteFile(packageLockFile);\n            const nodeModulesFolder = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME);\n            if (fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(nodeModulesFolder)) {\n                const rushRecyclerFolder = _ensureAndJoinPath(rushTempFolder, 'rush-recycler');\n                fs__WEBPACK_IMPORTED_MODULE_1__.renameSync(nodeModulesFolder, path__WEBPACK_IMPORTED_MODULE_3__.join(rushRecyclerFolder, `install-run-${Date.now().toString()}`));\n            }\n        }\n    }\n    catch (e) {\n        throw new Error(`Error cleaning the package install folder (${packageInstallFolder}): ${e}`);\n    }\n}\nfunction _createPackageJson(packageInstallFolder, name, version) {\n    try {\n        const packageJsonContents = {\n            name: 'ci-rush',\n            version: '0.0.0',\n            dependencies: {\n                [name]: version\n            },\n            description: \"DON'T WARN\",\n            repository: \"DON'T WARN\",\n            license: 'MIT'\n        };\n        const packageJsonPath = path__WEBPACK_IMPORTED_MODULE_3__.join(packageInstallFolder, PACKAGE_JSON_FILENAME);\n        fs__WEBPACK_IMPORTED_MODULE_1__.writeFileSync(packageJsonPath, JSON.stringify(packageJsonContents, undefined, 2));\n    }\n    catch (e) {\n        throw new Error(`Unable to create package.json: ${e}`);\n    }\n}\n/**\n * Run \"npm install\" in the package install folder.\n */\nfunction _installPackage(logger, packageInstallFolder, name, version, command) {\n    try {\n        logger.info(`Installing ${name}...`);\n        const npmPath = getNpmPath();\n        const platformNpmPath = _getPlatformPath(npmPath);\n        const result = child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync(platformNpmPath, [command], {\n            stdio: 'inherit',\n            cwd: packageInstallFolder,\n            env: process.env,\n            shell: _isWindows()\n        });\n        if (result.status !== 0) {\n            throw new Error(`\"npm ${command}\" encountered an error`);\n        }\n        logger.info(`Successfully installed ${name}@${version}`);\n    }\n    catch (e) {\n        throw new Error(`Unable to install package: ${e}`);\n    }\n}\n/**\n * Get the \".bin\" path for the package.\n */\nfunction _getBinPath(packageInstallFolder, binName) {\n    const binFolderPath = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin');\n    const resolvedBinName = _isWindows() ? `${binName}.cmd` : binName;\n    return path__WEBPACK_IMPORTED_MODULE_3__.resolve(binFolderPath, resolvedBinName);\n}\n/**\n * Returns a cross-platform path - windows must enclose any path containing spaces within double quotes.\n */\nfunction _getPlatformPath(platformPath) {\n    return _isWindows() && platformPath.includes(' ') ? `\"${platformPath}\"` : platformPath;\n}\nfunction _isWindows() {\n    return os__WEBPACK_IMPORTED_MODULE_2__.platform() === 'win32';\n}\n/**\n * Write a flag file to the package's install directory, signifying that the install was successful.\n */\nfunction _writeFlagFile(packageInstallFolder) {\n    try {\n        const flagFilePath = path__WEBPACK_IMPORTED_MODULE_3__.join(packageInstallFolder, INSTALLED_FLAG_FILENAME);\n        fs__WEBPACK_IMPORTED_MODULE_1__.writeFileSync(flagFilePath, process.version);\n    }\n    catch (e) {\n        throw new Error(`Unable to create installed.flag file in ${packageInstallFolder}`);\n    }\n}\nfunction installAndRun(logger, packageName, packageVersion, packageBinName, packageBinArgs, lockFilePath = process.env[INSTALL_RUN_LOCKFILE_PATH_VARIABLE]) {\n    const rushJsonFolder = findRushJsonFolder();\n    const rushCommonFolder = path__WEBPACK_IMPORTED_MODULE_3__.join(rushJsonFolder, 'common');\n    const rushTempFolder = _getRushTempFolder(rushCommonFolder);\n    const packageInstallFolder = _ensureAndJoinPath(rushTempFolder, 'install-run', `${packageName}@${packageVersion}`);\n    if (!_isPackageAlreadyInstalled(packageInstallFolder)) {\n        // The package isn't already installed\n        _cleanInstallFolder(rushTempFolder, packageInstallFolder, lockFilePath);\n        const sourceNpmrcFolder = path__WEBPACK_IMPORTED_MODULE_3__.join(rushCommonFolder, 'config', 'rush');\n        (0,_utilities_npmrcUtilities__WEBPACK_IMPORTED_MODULE_4__.syncNpmrc)({\n            sourceNpmrcFolder,\n            targetNpmrcFolder: packageInstallFolder,\n            logger\n        });\n        _createPackageJson(packageInstallFolder, packageName, packageVersion);\n        const command = lockFilePath ? 'ci' : 'install';\n        _installPackage(logger, packageInstallFolder, packageName, packageVersion, command);\n        _writeFlagFile(packageInstallFolder);\n    }\n    const statusMessage = `Invoking \"${packageBinName} ${packageBinArgs.join(' ')}\"`;\n    const statusMessageLine = new Array(statusMessage.length + 1).join('-');\n    logger.info('\\n' + statusMessage + '\\n' + statusMessageLine + '\\n');\n    const binPath = _getBinPath(packageInstallFolder, packageBinName);\n    const binFolderPath = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin');\n    // Windows environment variables are case-insensitive.  Instead of using SpawnSyncOptions.env, we need to\n    // assign via the process.env proxy to ensure that we append to the right PATH key.\n    const originalEnvPath = process.env.PATH || '';\n    let result;\n    try {\n        // `npm` bin stubs on Windows are `.cmd` files\n        // Node.js will not directly invoke a `.cmd` file unless `shell` is set to `true`\n        const platformBinPath = _getPlatformPath(binPath);\n        process.env.PATH = [binFolderPath, originalEnvPath].join(path__WEBPACK_IMPORTED_MODULE_3__.delimiter);\n        result = child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync(platformBinPath, packageBinArgs, {\n            stdio: 'inherit',\n            windowsVerbatimArguments: false,\n            shell: _isWindows(),\n            cwd: process.cwd(),\n            env: process.env\n        });\n    }\n    finally {\n        process.env.PATH = originalEnvPath;\n    }\n    if (result.status !== null) {\n        return result.status;\n    }\n    else {\n        throw result.error || new Error('An unknown error occurred.');\n    }\n}\nfunction runWithErrorAndStatusCode(logger, fn) {\n    process.exitCode = 1;\n    try {\n        const exitCode = fn();\n        process.exitCode = exitCode;\n    }\n    catch (e) {\n        logger.error('\\n\\n' + e.toString() + '\\n\\n');\n    }\n}\nfunction _run() {\n    const [nodePath /* Ex: /bin/node */, scriptPath /* /repo/common/scripts/install-run-rush.js */, rawPackageSpecifier /* qrcode@^1.2.0 */, packageBinName /* qrcode */, ...packageBinArgs /* [-f, myproject/lib] */] = process.argv;\n    if (!nodePath) {\n        throw new Error('Unexpected exception: could not detect node path');\n    }\n    if (path__WEBPACK_IMPORTED_MODULE_3__.basename(scriptPath).toLowerCase() !== 'install-run.js') {\n        // If install-run.js wasn't directly invoked, don't execute the rest of this function. Return control\n        // to the script that (presumably) imported this file\n        return;\n    }\n    if (process.argv.length < 4) {\n        console.log('Usage: install-run.js <package>@<version> <command> [args...]');\n        console.log('Example: install-run.js qrcode@1.2.2 qrcode https://rushjs.io');\n        process.exit(1);\n    }\n    const logger = { info: console.log, error: console.error };\n    runWithErrorAndStatusCode(logger, () => {\n        const rushJsonFolder = findRushJsonFolder();\n        const rushCommonFolder = _ensureAndJoinPath(rushJsonFolder, 'common');\n        const packageSpecifier = _parsePackageSpecifier(rawPackageSpecifier);\n        const name = packageSpecifier.name;\n        const version = _resolvePackageVersion(logger, rushCommonFolder, packageSpecifier);\n        if (packageSpecifier.version !== version) {\n            console.log(`Resolved to ${name}@${version}`);\n        }\n        return installAndRun(logger, name, version, packageBinName, packageBinArgs);\n    });\n}\n_run();\n//# sourceMappingURL=install-run.js.map\n})();\n\nmodule.exports = __webpack_exports__;\n/******/ })()\n;\n//# sourceMappingURL=install-run.js.map"
  },
  {
    "path": "eslint.config.js",
    "content": "import eslintConfigPrettier from \"eslint-config-prettier\";\nimport eslintPluginPrettierRecommended from \"eslint-plugin-prettier/recommended\";\nimport typescriptEslint from \"typescript-eslint\";\n\nexport default [\n  eslintConfigPrettier,\n  {\n    //extends: [\"eslint:recommended\", \"plugin:prettier/recommended\"],\n    plugins: { eslintPluginPrettierRecommended },\n    rules: {},\n    files: [\"**/*.jsx\", \"**/*.tsx\", \"**/*.js\", \"**/*.ts\"],\n    settings: {\n      \"import/resolver\": {\n        node: {\n          extensions: [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\"],\n        },\n      },\n    },\n  },\n  ...typescriptEslint.configs.recommended,\n  {\n    ignores: [\"**/es/\", \"**/dist/\", \"**/lib/\", \"**/node_modules/\"],\n  },\n];\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"f6\",\n  \"private\": true,\n  \"workspaces\": [\n    \"packages/core\",\n    \"packages/hammer\",\n    \"packages/element\",\n    \"packages/f6-ui\",\n    \"packages/plugin\",\n    \"packages/site\",\n    \"packages/f6\",\n    \"packages/f6-alipay\",\n    \"packages/f6-wx\"\n  ],\n  \"scripts\": {\n    \"build:site\": \"cd ./packages/site && npm run start\",\n    \"prettier\": \"prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'\",\n    \"pretty-quick\": \"pretty-quick\",\n    \"clean:modules\": \"rimraf node_modules\",\n    \"prepare\": \"simple-git-hooks\",\n    \"update\": \"rush update\",\n    \"build\": \"rush build\",\n    \"dev\": \"cd packages/f6 && npm run storybook\"\n  },\n  \"lint-staged\": {\n    \"*.{js,jsx,tsx,ts,less,md,json}\": [\n      \"pretty-quick —-staged\"\n    ]\n  },\n  \"devDependencies\": {\n    \"@eslint/compat\": \"^1.1.0\",\n    \"@eslint/js\": \"^9.5.0\",\n    \"eslint\": \"^9.5.0\",\n    \"eslint-config-prettier\": \"^9.1.0\",\n    \"eslint-plugin-prettier\": \"^5.1.3\",\n    \"eslint-plugin-react\": \"^7.34.3\",\n    \"install-peerdeps\": \"^3.0.3\",\n    \"jest\": \"^27.5.1\",\n    \"lint-staged\": \"^15.2.7\",\n    \"node-gyp\": \"^10.1.0\",\n    \"postcss-lit\": \"^1.1.1\",\n    \"pre-commit\": \"^1.2.2\",\n    \"prettier\": \"3.3.2\",\n    \"pretty-quick\": \"^4.0.0\",\n    \"react-scripts\": \"3.1.2\",\n    \"rimraf\": \"^5.0.7\",\n    \"simple-git-hooks\": \"^2.11.1\",\n    \"stylelint\": \"^16.6.1\",\n    \"stylelint-config-standard\": \"^36.0.1\",\n    \"stylelint-prettier\": \"^5.0.0\",\n    \"typescript-eslint\": \"^7.13.1\"\n  },\n  \"resolutions\": {\n    \"@types/react\": \"^16.9.35\"\n  },\n  \"repository\": \"https://github.com/antvis/F6.git\",\n  \"simple-git-hooks\": {\n    \"pre-commit\": \"pretty-quick --staged\"\n  }\n}\n"
  },
  {
    "path": "packages/core/jest.config.js",
    "content": "module.exports = {\n  preset: \"ts-jest\",\n  testEnvironment: \"node\",\n  transform: {\n    \"^.+\\\\.(ts|tsx)$\": [\n      \"ts-jest\",\n      {\n        tsconfig: \"tsconfig.json\",\n      },\n    ],\n  },\n  testMatch: [\n    \"**/tests/unit/**/*.ts\", // Ensure this matches the path to your test files\n  ],\n  // Other configurations...\n};\n"
  },
  {
    "path": "packages/core/package.json",
    "content": "{\n  \"name\": \"@antv/f6-core\",\n  \"version\": \"0.0.2\",\n  \"description\": \"A Graph Visualization Framework in JavaScript\",\n  \"keywords\": [\n    \"antv\",\n    \"g6\",\n    \"graph\",\n    \"graph analysis\",\n    \"graph editor\",\n    \"graph visualization\",\n    \"relational data\"\n  ],\n  \"homepage\": \"https://g6.antv.vision\",\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/f6/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/antvis/f6\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"https://github.com/orgs/antvis/people\",\n  \"main\": \"dist/cjs/index.cjs.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"unpkg\": \"dist/umd/index.umd.js\",\n  \"types\": \"lib/index.d.ts\",\n  \"files\": [\n    \"package.json\",\n    \"es\",\n    \"lib\",\n    \"dist\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"scripts\": {\n    \"build\": \"vite build\",\n    \"clean\": \"rimraf dist\",\n    \"test\": \"jest\"\n  },\n  \"dependencies\": {\n    \"@antv/algorithm\": \"^0.1.8\",\n    \"@antv/dom-util\": \"^2.0.1\",\n    \"@antv/event-emitter\": \"~0.1.0\",\n    \"@antv/g-base\": \"^0.5.9\",\n    \"@antv/g-math\": \"^0.1.1\",\n    \"@antv/g-mobile\": \"^0.0.13\",\n    \"@antv/matrix-util\": \"^3.0.4\",\n    \"@antv/path-util\": \"^2.0.3\",\n    \"@antv/util\": \"~2.0.5\",\n    \"ml-matrix\": \"^6.5.0\",\n    \"tslib\": \"^2.1.0\",\n    \"@vitejs/plugin-react\": \"~4.3.1\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"~5.3.1\",\n    \"@vitejs/plugin-react\": \"~4.3.1\",\n    \"jest\": \"~29.7.0\",\n    \"@types/jest\": \"~29.5.12\",\n    \"ts-jest\": \"~29.1.5\",\n    \"typescript\": \"4.3\"\n  }\n}\n"
  },
  {
    "path": "packages/core/src/behavior/behavior.ts",
    "content": "import { clone, each, wrapBehavior } from \"@antv/util\";\nimport { BehaviorOption } from \"../types\";\nimport behaviorOption from \"./behaviorOption\";\n\nexport default class Behavior {\n  // 所有自定义的 Behavior 的实例\n  private static types = {};\n\n  /**\n   * 自定义 Behavior\n   * @param type Behavior 名称\n   * @param behavior Behavior 定义的方法集合\n   */\n  public static registerBehavior(type: string, behavior: BehaviorOption) {\n    if (!behavior) {\n      throw new Error(`please specify handler for this behavior: ${type}`);\n    }\n\n    const prototype = clone(behaviorOption);\n\n    Object.assign(prototype, behavior);\n\n    // eslint-disable-next-line func-names\n    const base = function (cfg: any) {\n      Object.assign(this, this.getDefaultCfg(), cfg);\n\n      const events = this.getEvents();\n      this.events = null;\n\n      const eventsToBind = {};\n\n      if (events) {\n        each(events, (handle, event) => {\n          eventsToBind[event] = wrapBehavior(this, handle);\n        });\n        this.events = eventsToBind;\n      }\n    };\n\n    base.prototype = prototype;\n    Behavior.types[type] = base;\n  }\n\n  public static hasBehavior(type: string) {\n    return !!Behavior.types[type];\n  }\n\n  public static getBehavior(type: string) {\n    return Behavior.types[type];\n  }\n}\n"
  },
  {
    "path": "packages/core/src/behavior/behaviorOption.ts",
    "content": "import { each } from \"@antv/util\";\nimport { IAbstractGraph } from \"../interface/graph\";\nimport { G6Event } from \"../types\";\n\n// 自定义 Behavior 时候共有的方法\nexport default {\n  getDefaultCfg() {\n    return {};\n  },\n\n  /**\n   * register event handler, behavior will auto bind events\n   * for example:\n   * return {\n   *  click: 'onClick'\n   * }\n   */\n  getEvents() {\n    return {};\n  },\n\n  updateCfg(cfg: object) {\n    Object.assign(this, cfg);\n    return true;\n  },\n\n  shouldBegin() {\n    return true;\n  },\n\n  shouldUpdate() {\n    return true;\n  },\n\n  shouldEnd() {\n    return true;\n  },\n\n  /**\n   * auto bind events when register behavior\n   * @param graph Graph instance\n   */\n  bind(graph: IAbstractGraph) {\n    const { events } = this;\n    this.graph = graph;\n    if (\n      this.type === \"drag-canvas\" ||\n      this.type === \"brush-select\" ||\n      this.type === \"lasso-select\"\n    ) {\n      graph.get(\"canvas\").set(\"draggable\", true);\n    }\n    each(events, (handler: () => void, event: G6Event) => {\n      graph.on(event, handler);\n    });\n  },\n\n  unbind(graph: IAbstractGraph) {\n    const { events } = this;\n    if (\n      this.type === \"drag-canvas\" ||\n      this.type === \"brush-select\" ||\n      this.type === \"lasso-select\"\n    ) {\n      graph.get(\"canvas\").set(\"draggable\", false);\n    }\n    each(events, (handler: () => void, event: G6Event) => {\n      graph.off(event, handler);\n    });\n  },\n\n  get(val: string) {\n    return (this as any)[val];\n  },\n\n  set(key: string, val: any) {\n    (this as any)[key] = val;\n    return this;\n  },\n};\n"
  },
  {
    "path": "packages/core/src/behavior/index.ts",
    "content": "import Behavior from \"./behavior\";\n\nexport default Behavior;\n"
  },
  {
    "path": "packages/core/src/element/arrow.ts",
    "content": "export default {\n  triangle: (width: number = 10, length: number = 15, d: number = 0) => {\n    const begin = d * 2;\n    const path = `M ${begin},0 L ${begin + length},-${width / 2} L ${\n      begin + length\n    },${width / 2} Z`;\n    return path;\n  },\n  vee: (width: number = 15, length: number = 20, d: number = 0) => {\n    const begin = d * 2;\n    const path = `M ${begin},0 L ${begin + length},-${width / 2}\n        L ${begin + (2 * length) / 3},0 L ${begin + length},${width / 2} Z`;\n    return path;\n  },\n  circle: (r: number = 5, d: number = 0) => {\n    const begin = d * 2;\n    const path = `M ${begin}, 0\n            a ${r},${r} 0 1,0 ${r * 2},0\n            a ${r},${r} 0 1,0 ${-r * 2},0`;\n    return path;\n  },\n  rect: (width: number = 10, length: number = 10, d: number = 0) => {\n    const begin = d * 2;\n    const path = `M ${begin},${-width / 2} \n        L ${begin + length},${-width / 2} \n        L ${begin + length},${width / 2} \n        L ${begin},${width / 2} Z`;\n    return path;\n  },\n  diamond: (width: number = 15, length: number = 15, d: number = 0) => {\n    const begin = d * 2;\n    const path = `M ${begin},0 \n        L ${begin + length / 2},${-width / 2} \n        L ${begin + length},0 \n        L ${begin + length / 2},${width / 2} Z`;\n    return path;\n  },\n  triangleRect: (\n    tWidth: number = 15,\n    tLength: number = 15,\n    rWidth: number = 15,\n    rLength: number = 3,\n    gap: number = 5,\n    d: number = 0,\n  ) => {\n    const begin = d * 2;\n    const rectBegin = begin + tLength + gap;\n    const path = `M ${begin},0 L ${begin + tLength},-${tWidth / 2} L ${\n      begin + tLength\n    },${tWidth / 2} Z\n            M ${rectBegin}, -${rWidth / 2}\n            L ${rectBegin + rLength} -${rWidth / 2}\n            L ${rectBegin + rLength} ${rWidth / 2}\n            L ${rectBegin} ${rWidth / 2}\n            Z`;\n    return path;\n  },\n};\n"
  },
  {
    "path": "packages/core/src/element/combo.ts",
    "content": "/**\n * @fileOverview common combo shape\n * @author shiwu.wyy@antfin.com\n */\nimport { IGroup, IShape } from \"@antv/g-base\";\nimport { isArray, isNil, clone } from \"@antv/util\";\nimport { ILabelConfig, ShapeOptions } from \"../interface/shape\";\nimport {\n  Item,\n  LabelStyle,\n  NodeConfig,\n  ModelConfig,\n  ShapeStyle,\n} from \"../types\";\nimport Global from \"../global\";\nimport Shape from \"./shape\";\nimport { shapeBase } from \"./shapeBase\";\n\nconst singleCombo: ShapeOptions = {\n  itemType: \"combo\",\n  // 单个图形的类型\n  shapeType: \"single-combo\",\n  /**\n   * Combo 标题文本相对图形的位置，默认为 top\n   * 位置包括： top, bottom, left, right, center\n   * @type {String}\n   */\n  labelPosition: \"top\",\n  /**\n   * 标题文本相对偏移，当 labelPosition 不为 center 时有效\n   * @type {Number}\n   */\n  refX: Global.comboLabel.refX,\n  refY: Global.comboLabel.refY,\n\n  options: {\n    style: {\n      stroke: Global.defaultCombo.style.stroke,\n      fill: Global.defaultCombo.style.fill,\n      lineWidth: Global.defaultCombo.style.lineWidth,\n    },\n    labelCfg: {\n      style: {\n        fill: Global.comboLabel.style.fill,\n        fontSize: Global.comboLabel.style.fontSize,\n      },\n    },\n    stateStyles: {\n      ...Global.comboStateStyles,\n    },\n  },\n  /**\n   * 获取 Combo 宽高\n   * @internal 返回 Combo 的大小，以 [width, height] 的方式维护\n   * @param  {Object} cfg Combo 的配置项\n   * @return {Array} 宽高\n   */\n  getSize(cfg: ModelConfig): number[] {\n    let size: number | number[] = clone(\n      cfg.size || this.options!.size || Global.defaultCombo.size,\n    );\n\n    // size 是数组，若长度为 1，则补长度为 2\n    if (isArray(size) && size.length === 1) {\n      size = [size[0], size[0]];\n    }\n\n    // size 为数字，则转换为数组\n    if (!isArray(size)) {\n      size = [size, size];\n    }\n    return size;\n  },\n  // 私有方法，不希望扩展的 Combo 复写这个方法\n  getLabelStyleByPosition(cfg: NodeConfig, labelCfg: ILabelConfig): LabelStyle {\n    const labelPosition = labelCfg.position || this.labelPosition;\n    const { style: cfgStyle } = cfg;\n    let padding: number | number[] = cfg.padding || this.options.padding;\n    if (isArray(padding)) padding = padding[0];\n\n    let { refX, refY } = labelCfg;\n    // 考虑 refX 和 refY = 0 的场景，不用用 labelCfg.refX || Global.nodeLabel.refX\n    if (isNil(refX)) {\n      refX = this.refX as number; // 不居中时的偏移量\n    }\n    if (isNil(refY)) {\n      refY = this.refY as number; // 不居中时的偏移量\n    }\n\n    const size = this.getSize!(cfg as ModelConfig);\n\n    const r = Math.max(cfgStyle.r, size[0] / 2) || size[0] / 2;\n\n    const dis = r + padding;\n\n    let style: any;\n    switch (labelPosition) {\n      case \"top\":\n        style = {\n          x: 0,\n          y: -dis - (refY as number),\n          textBaseline: \"bottom\", // 文本在图形的上方\n          textAlign: \"center\",\n        };\n        break;\n      case \"bottom\":\n        style = {\n          x: 0,\n          y: dis + (refY as number),\n          textBaseline: \"bottom\",\n          textAlign: \"center\",\n        };\n        break;\n      case \"left\":\n        style = {\n          x: -dis + (refX as number),\n          y: 0,\n          textAlign: \"left\",\n        };\n        break;\n      case \"center\":\n        style = {\n          x: 0,\n          y: 0,\n          text: cfg!.label,\n          textAlign: \"center\",\n        };\n        break;\n      default:\n        style = {\n          x: dis + (refX as number),\n          y: 0,\n          textAlign: \"right\",\n        };\n        break;\n    }\n    style.text = cfg.label;\n    return style;\n  },\n  drawShape(cfg: NodeConfig, group: IGroup): IShape {\n    const { shapeType } = this; // || this.type，都已经加了 shapeType\n    const style = this.getShapeStyle!(cfg);\n    const shape = group.addShape(shapeType, {\n      attrs: style,\n      draggable: true,\n      name: \"combo-shape\",\n    });\n    return shape;\n  },\n  updateShape(cfg: NodeConfig, item: Item, keyShapeStyle: ShapeStyle) {\n    const keyShape = item.get(\"keyShape\");\n    const animate =\n      cfg.animate === undefined ? this.options.animate : cfg.animate;\n    if (animate && keyShape.animate) {\n      keyShape.animate(keyShapeStyle, {\n        duration: 200,\n        easing: \"easeLinear\",\n      });\n    } else {\n      keyShape.attr({\n        ...keyShapeStyle,\n      });\n    }\n\n    (this as any).updateLabel(cfg, item);\n    // special for some types of nodes\n  },\n};\n\nconst singleComboDef = { ...shapeBase, ...singleCombo };\nShape.registerCombo(\"single-combo\", singleComboDef);\n"
  },
  {
    "path": "packages/core/src/element/combos/circle.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { Item, ComboConfig, ShapeStyle } from \"../../types\";\nimport Global from \"../../global\";\nimport Shape from \"../shape\";\nimport { ShapeOptions } from \"../../interface/shape\";\nimport { isNumber, clone, mix, isArray } from \"@antv/util\";\n\n// 圆形 Combo\nShape.registerCombo(\n  \"circle\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: [Global.defaultCombo.size[0], Global.defaultCombo.size[0]],\n      padding: Global.defaultCombo.padding[0],\n      animate: true,\n      style: {\n        stroke: Global.defaultCombo.style.stroke,\n        fill: Global.defaultCombo.style.fill,\n        lineWidth: Global.defaultCombo.style.lineWidth,\n      },\n      labelCfg: {\n        style: {\n          fill: Global.comboLabel.style.fill,\n          fontSize: Global.comboLabel.style.fontSize,\n        },\n        refX: 0,\n        refY: 0,\n      },\n      stateStyles: {\n        ...Global.comboStateStyles,\n      },\n    },\n    shapeType: \"circle\",\n    // 文本位置\n    labelPosition: \"top\",\n    drawShape(cfg: ComboConfig, group: IGroup): IShape {\n      const style = this.getShapeStyle!(cfg);\n      delete style.height;\n      delete style.width;\n      const keyShape: IShape = group.addShape(\"circle\", {\n        attrs: style,\n        className: \"circle-combo\",\n        name: \"circle-combo\",\n        draggable: true,\n      });\n\n      return keyShape;\n    },\n    /**\n     * 获取 Combo 的样式，供基于该 Combo 自定义时使用\n     * @param {Object} cfg Combo 数据模型\n     * @return {Object} Combo 的样式\n     */\n    getShapeStyle(cfg: ComboConfig): ShapeStyle {\n      const { style: defaultStyle } = this.options as ComboConfig;\n      let padding: number | number[] = cfg.padding || this.options.padding;\n      if (isArray(padding)) padding = padding[0];\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle, cfg.style);\n      let r: number;\n      if (cfg.fixSize) {\n        r = isNumber(cfg.fixSize) ? cfg.fixSize : cfg.fixSize[0];\n      } else {\n        const size = (this as ShapeOptions).getSize!(cfg);\n        if (!isNumber(style.r) || isNaN(style.r))\n          r = size[0] / 2 || Global.defaultCombo.style.r;\n        else r = Math.max(style.r, size[0] / 2) || size[0] / 2;\n      }\n\n      style.r = r + padding;\n      const styles = {\n        x: 0,\n        y: 0,\n        ...style,\n      };\n      if (cfg.style) cfg.style.r = r;\n      else {\n        cfg.style = { r };\n      }\n      return styles;\n    },\n    update(cfg: ComboConfig, item: Item) {\n      const size = (this as ShapeOptions).getSize!(cfg);\n      let padding: number | number[] = cfg.padding || this.options.padding;\n      if (isArray(padding)) padding = padding[0];\n      const cfgStyle = clone(cfg.style);\n      let r;\n      if (cfg.fixSize) {\n        r = isNumber(cfg.fixSize) ? cfg.fixSize : cfg.fixSize[0];\n      } else {\n        r = Math.max(cfgStyle.r, size[0] / 2) || size[0] / 2;\n      }\n      cfgStyle.r = r + padding;\n\n      const itemCacheSize = item.get(\"sizeCache\");\n      if (itemCacheSize) {\n        itemCacheSize.r = cfgStyle.r;\n      }\n\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      const style = mix({}, keyShape.attr(), strokeStyle, cfgStyle);\n\n      if (cfg.style) cfg.style.r = r;\n      else {\n        cfg.style = { r };\n      }\n\n      (this as any).updateShape(cfg, item, style, true);\n    },\n  },\n  \"single-combo\",\n);\n"
  },
  {
    "path": "packages/core/src/element/combos/index.ts",
    "content": "import \"./circle\";\nimport \"./rect\";\n"
  },
  {
    "path": "packages/core/src/element/combos/rect.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { mix, isNumber, clone, isNil } from \"@antv/util\";\nimport { LabelStyle, Item, ComboConfig, ShapeStyle } from \"../../types\";\nimport Global from \"../../global\";\nimport Shape from \"../shape\";\nimport { ILabelConfig, ShapeOptions } from \"../../interface/shape\";\n\nShape.registerCombo(\n  \"rect\",\n  {\n    // 自定义 Combo 时的配置\n    options: {\n      size: [40, 5],\n      padding: [25, 20, 15, 20],\n      animate: true,\n      style: {\n        radius: 0,\n        stroke: Global.defaultCombo.style.stroke,\n        fill: Global.defaultCombo.style.fill,\n        lineWidth: Global.defaultCombo.style.lineWidth,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: Global.comboLabel.style.fill,\n          fontSize: Global.comboLabel.style.fontSize,\n        },\n      },\n      // 连接点，默认为左右\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      stateStyles: {\n        ...Global.comboStateStyles,\n      },\n    },\n    shapeType: \"rect\",\n    labelPosition: \"top\",\n    drawShape(cfg: ComboConfig, group: IGroup): IShape {\n      const style = this.getShapeStyle!(cfg);\n      const keyShape = group.addShape(\"rect\", {\n        attrs: style,\n        className: \"rect-combo\",\n        name: \"rect-combo\",\n        draggable: true,\n      });\n      return keyShape;\n    },\n    // 私有方法，不希望扩展的 Combo 复写这个方法\n    getLabelStyleByPosition(\n      cfg: ComboConfig,\n      labelCfg: ILabelConfig,\n    ): LabelStyle {\n      const labelPosition = labelCfg.position || this.labelPosition;\n      const { style: cfgStyle } = cfg;\n      let padding = cfg.padding || this.options.padding;\n      if (isNumber(padding)) padding = [padding, padding, padding, padding];\n\n      let { refX, refY } = labelCfg;\n      // 考虑 refX 和 refY = 0 的场景，不用用 labelCfg.refX || Global.nodeLabel.refY\n      if (isNil(refX)) {\n        refX = this.refX as number; // 不居中时的偏移量\n      }\n      if (isNil(refY)) {\n        refY = this.refY as number; // 不居中时的偏移量\n      }\n\n      const leftDis = cfgStyle.width / 2 + padding[3];\n      const topDis = cfgStyle.height / 2 + padding[0];\n\n      let style: any;\n      switch (labelPosition) {\n        case \"top\":\n          style = {\n            x: 0 - leftDis + refX,\n            y: 0 - topDis + refY,\n            textBaseline: \"top\", // 文本在图形的上方\n            textAlign: \"left\",\n          };\n          break;\n        case \"bottom\":\n          style = {\n            x: 0,\n            y: topDis + refY,\n            textBaseline: \"bottom\",\n            textAlign: \"center\",\n          };\n          break;\n        case \"left\":\n          style = {\n            x: 0 - leftDis + refY,\n            y: 0,\n            textAlign: \"left\",\n          };\n          break;\n        case \"center\":\n          style = {\n            x: 0,\n            y: 0,\n            text: cfg!.label,\n            textAlign: \"center\",\n          };\n          break;\n        default:\n          style = {\n            x: leftDis + refX,\n            y: 0,\n            textAlign: \"right\",\n          };\n          break;\n      }\n      style.text = cfg.label;\n      return style;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: ComboConfig) {\n      const { style: defaultStyle } = this.options as ComboConfig;\n      let padding: number | number[] = cfg.padding || this.options.padding;\n      if (isNumber(padding)) padding = [padding, padding, padding, padding];\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle, cfg.style);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      let width: number;\n      let height: number;\n      const fixSize =\n        cfg.collapsed && cfg.fixCollapseSize\n          ? cfg.fixCollapseSize\n          : cfg.fixSize;\n      if (fixSize) {\n        if (isNumber(fixSize)) {\n          width = fixSize;\n          height = fixSize;\n        } else {\n          width = fixSize[0];\n          height = fixSize[1];\n        }\n      } else {\n        if (!isNumber(style.width) || isNaN(style.width))\n          width = size[0] || Global.defaultCombo.style.width;\n        else width = Math.max(style.width, size[0]) || size[0];\n        if (!isNumber(style.height) || isNaN(style.height))\n          height = size[1] || Global.defaultCombo.style.height;\n        else height = Math.max(style.height, size[1]) || size[1];\n      }\n\n      const x = -width / 2 - padding[3];\n      const y = -height / 2 - padding[0];\n\n      style.width = width + padding[1] + padding[3];\n      style.height = height + padding[0] + padding[2];\n\n      const styles = {\n        x,\n        y,\n        ...style,\n      };\n      if (!cfg.style) {\n        cfg.style = {\n          width,\n          height,\n        };\n      } else {\n        cfg.style.width = width;\n        cfg.style.height = height;\n      }\n      return styles;\n    },\n    update(cfg: ComboConfig, item: Item) {\n      const size = (this as ShapeOptions).getSize!(cfg);\n      let padding: number | number[] = cfg.padding || this.options.padding;\n      if (isNumber(padding)) padding = [padding, padding, padding, padding];\n      const cfgStyle = clone(cfg.style);\n      let width, height;\n      const fixSize =\n        cfg.collapsed && cfg.fixCollapseSize\n          ? cfg.fixCollapseSize\n          : cfg.fixSize;\n      if (fixSize) {\n        if (isNumber(fixSize)) {\n          width = fixSize;\n          height = fixSize;\n        } else {\n          width = fixSize[0];\n          height = fixSize[1];\n        }\n      } else {\n        width = Math.max(cfgStyle.width, size[0]) || size[0];\n        height = Math.max(cfgStyle.height, size[1]) || size[1];\n      }\n\n      cfgStyle.width = width + padding[1] + padding[3];\n      cfgStyle.height = height + padding[0] + padding[2];\n\n      const itemCacheSize = item.get(\"sizeCache\");\n      if (itemCacheSize) {\n        itemCacheSize.width = cfgStyle.width;\n        itemCacheSize.height = cfgStyle.height;\n      }\n\n      cfgStyle.x = -width / 2 - padding[3];\n      cfgStyle.y = -height / 2 - padding[0];\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      const style = mix({}, keyShape.attr(), strokeStyle, cfgStyle);\n\n      if (cfg.style) {\n        cfg.style.width = width;\n        cfg.style.height = height;\n      } else {\n        cfg.style = { width, height };\n      }\n\n      (this as any).updateShape(cfg, item, style, false);\n    },\n    updateShape(cfg: ComboConfig, item: Item, keyShapeStyle: object) {\n      const keyShape = item.get(\"keyShape\");\n      const animate =\n        cfg.animate === undefined ? this.options.animate : cfg.animate;\n      if (animate && keyShape.animate) {\n        keyShape.animate(keyShapeStyle, {\n          duration: 200,\n          easing: \"easeLinear\",\n        });\n      } else {\n        keyShape.attr({\n          ...keyShapeStyle,\n        });\n      }\n\n      (this as any).updateLabel(cfg, item);\n    },\n  },\n  \"single-combo\",\n);\n"
  },
  {
    "path": "packages/core/src/element/edge.ts",
    "content": "/**\n * @fileOverview 自定义边\n * @description 自定义边中有大量逻辑同自定义节点重复，虽然可以提取成为 mixin ，但是考虑到代码的可读性，还是单独实现。\n */\n\nimport { IGroup, IShape, IElement, Point } from \"@antv/g-base\";\nimport { deepMix, mix, each, isNil, isNumber, isArray } from \"@antv/util\";\nimport { ILabelConfig, ShapeOptions } from \"../interface/shape\";\nimport {\n  EdgeConfig,\n  EdgeData,\n  IPoint,\n  LabelStyle,\n  ShapeStyle,\n  Item,\n  ModelConfig,\n} from \"../types\";\nimport { getLabelPosition, getLoopCfgs } from \"../util/graphic\";\nimport { distance, getCircleCenterByPoints } from \"../util/math\";\nimport { getControlPoint, getSpline } from \"../util/path\";\nimport Global from \"../global\";\nimport Shape from \"./shape\";\nimport { shapeBase, CLS_LABEL_BG_SUFFIX } from \"./shapeBase\";\n\nconst CLS_SHAPE = \"edge-shape\";\n\n// start,end 倒置，center 不变\nfunction revertAlign(labelPosition: string): string {\n  let textAlign = labelPosition;\n  if (labelPosition === \"start\") {\n    textAlign = \"end\";\n  } else if (labelPosition === \"end\") {\n    textAlign = \"start\";\n  }\n  return textAlign;\n}\n\nconst singleEdge: ShapeOptions = {\n  itemType: \"edge\",\n  /**\n   * 文本的位置\n   * @type {String}\n   */\n  labelPosition: \"center\", // start, end, center\n  /**\n   * 文本的 x 偏移\n   * @type {Number}\n   */\n  refX: 0,\n  /**\n   * 文本的 y 偏移\n   * @type {Number}\n   */\n  refY: 0,\n  /**\n   * 文本是否跟着线自动旋转，默认 false\n   * @type {Boolean}\n   */\n  labelAutoRotate: false,\n\n  // 自定义边时的配置\n  options: {\n    size: Global.defaultEdge.size,\n    style: {\n      x: 0,\n      y: 0,\n      stroke: Global.defaultEdge.style.stroke,\n      lineAppendWidth: Global.defaultEdge.style.lineAppendWidth,\n    },\n    labelCfg: {\n      style: {\n        fill: Global.edgeLabel.style.fill,\n        fontSize: Global.edgeLabel.style.fontSize,\n      },\n    },\n    stateStyles: {\n      ...Global.edgeStateStyles,\n    },\n  },\n  /**\n   * 获取边的 path\n   * @internal 供扩展的边覆盖\n   * @param  {Array} points 构成边的点的集合\n   * @return {Array} 构成 path 的数组\n   */\n  getPath(points: Point[]): Array<Array<string | number>> {\n    const path: Array<Array<string | number>> = [];\n    each(points, (point: Point, index: number) => {\n      if (index === 0) {\n        path.push([\"M\", point.x, point.y]);\n      } else {\n        path.push([\"L\", point.x, point.y]);\n      }\n    });\n    return path;\n  },\n  getShapeStyle(cfg: EdgeConfig): ShapeStyle {\n    const { style: defaultStyle } = this.options as ModelConfig;\n    const strokeStyle: ShapeStyle = {\n      stroke: cfg.color,\n    };\n    // 如果设置了color，则覆盖默认的stroke属性\n    const style: ShapeStyle = mix({}, defaultStyle, strokeStyle, cfg.style);\n\n    const size = cfg.size || Global.defaultEdge.size;\n    cfg = this.getPathPoints!(cfg);\n    const { startPoint, endPoint } = cfg;\n\n    const controlPoints = this.getControlPoints!(cfg);\n    let points = [startPoint]; // 添加起始点\n    // 添加控制点\n    if (controlPoints) {\n      points = points.concat(controlPoints);\n    }\n    // 添加结束点\n    points.push(endPoint);\n    const path = (this as any).getPath(points);\n    const styles = mix(\n      {},\n      Global.defaultEdge.style as ShapeStyle,\n      {\n        stroke: Global.defaultEdge.color,\n        lineWidth: size,\n        path,\n      } as ShapeStyle,\n      style,\n    );\n    return styles;\n  },\n  updateShapeStyle(cfg: EdgeConfig, item: Item) {\n    const group = item.getContainer();\n    const strokeStyle: ShapeStyle = {\n      stroke: cfg.color,\n    };\n    const shape =\n      group.find((element) => element.get(\"className\") === \"edge-shape\") ||\n      item.getKeyShape();\n\n    const { size } = cfg;\n    cfg = this.getPathPoints!(cfg);\n\n    const { startPoint, endPoint } = cfg;\n\n    const controlPoints = this.getControlPoints!(cfg); // || cfg.controlPoints;\n    let points = [startPoint]; // 添加起始点\n    // 添加控制点\n    if (controlPoints) {\n      points = points.concat(controlPoints);\n    }\n    // 添加结束点\n    points.push(endPoint);\n\n    const currentAttr = shape.attr();\n    const previousStyle = mix({}, strokeStyle, currentAttr, cfg.style);\n    const source = cfg.sourceNode;\n    const target = cfg.targetNode;\n    let routeCfg: { [key: string]: unknown } = { radius: previousStyle.radius };\n    if (!controlPoints) {\n      routeCfg = {\n        source,\n        target,\n        offset: previousStyle.offset,\n        radius: previousStyle.radius,\n      };\n    }\n    if (currentAttr.endArrow && previousStyle.endArrow === false) {\n      cfg.style.endArrow = {\n        path: \"\",\n      };\n    }\n    if (currentAttr.startArrow && previousStyle.startArrow === false) {\n      cfg.style.startArrow = {\n        path: \"\",\n      };\n    }\n    const path = (this as any).getPath(points, routeCfg);\n    const style = mix(\n      strokeStyle,\n      shape.attr(),\n      {\n        lineWidth: size,\n        path,\n      },\n      cfg.style,\n    );\n\n    if (shape) {\n      shape.attr(style);\n    }\n  },\n  getLabelStyleByPosition(\n    cfg: EdgeConfig,\n    labelCfg: ILabelConfig,\n    group?: IGroup,\n  ): LabelStyle {\n    const labelPosition = labelCfg.position || this.labelPosition; // 文本的位置用户可以传入\n    const style: LabelStyle = {};\n\n    const pathShape =\n      group && group.find((element) => element.get(\"className\") === CLS_SHAPE);\n\n    // 不对 pathShape 进行判空，如果线不存在，说明有问题了\n    let pointPercent;\n    if (labelPosition === \"start\") {\n      pointPercent = 0;\n    } else if (labelPosition === \"end\") {\n      pointPercent = 1;\n    } else {\n      pointPercent = 0.5;\n    }\n    // 偏移量\n    const offsetX = labelCfg.refX || (this.refX as number);\n    const offsetY = labelCfg.refY || (this.refY as number);\n    // 如果两个节点重叠，线就变成了一个点，这时候label的位置，就是这个点 + 绝对偏移\n    if (\n      cfg.startPoint!.x === cfg.endPoint!.x &&\n      cfg.startPoint!.y === cfg.endPoint!.y\n    ) {\n      style.x = cfg.startPoint!.x + offsetX;\n      style.y = cfg.startPoint!.y + offsetY;\n      style.text = cfg.label as string;\n      return style;\n    }\n\n    let autoRotate;\n    if (isNil(labelCfg.autoRotate)) autoRotate = this.labelAutoRotate;\n    else autoRotate = labelCfg.autoRotate;\n    const offsetStyle = getLabelPosition(\n      pathShape,\n      pointPercent,\n      offsetX,\n      offsetY,\n      autoRotate as boolean,\n    );\n    style.x = offsetStyle.x;\n    style.y = offsetStyle.y;\n    style.rotate = offsetStyle.rotate;\n    style.textAlign = this._getTextAlign!(\n      labelPosition as string,\n      offsetStyle.angle as number,\n    );\n    style.text = cfg.label as string;\n    return style;\n  },\n  getLabelBgStyleByPosition(\n    label: IElement,\n    cfg: EdgeConfig,\n    labelCfg?: ILabelConfig,\n    group?: IGroup,\n  ) {\n    if (!label) {\n      return {};\n    }\n    const bbox = label.getBBox();\n    const backgroundStyle = labelCfg.style && labelCfg.style.background;\n    if (!backgroundStyle) {\n      return {};\n    }\n    const { padding } = backgroundStyle;\n    const backgroundWidth = bbox.width + padding[1] + padding[3];\n    const backgroundHeight = bbox.height + padding[0] + padding[2];\n    const labelPosition = labelCfg.position || this.labelPosition;\n    const style = {\n      ...backgroundStyle,\n      width: backgroundWidth,\n      height: backgroundHeight,\n      x: bbox.minX - padding[2],\n      y: bbox.minY - padding[0],\n      rotate: 0,\n    };\n    let autoRotate;\n    if (isNil(labelCfg.autoRotate)) autoRotate = this.labelAutoRotate;\n    else autoRotate = labelCfg.autoRotate;\n\n    const pathShape =\n      group && group.find((element) => element.get(\"className\") === CLS_SHAPE);\n\n    // 不对 pathShape 进行判空，如果线不存在，说明有问题了\n    let pointPercent;\n    if (labelPosition === \"start\") {\n      pointPercent = 0;\n    } else if (labelPosition === \"end\") {\n      pointPercent = 1;\n    } else {\n      pointPercent = 0.5;\n    }\n    // 偏移量\n    const offsetX = labelCfg.refX || (this.refX as number);\n    const offsetY = labelCfg.refY || (this.refY as number);\n    // // 如果两个节点重叠，线就变成了一个点，这时候label的位置，就是这个点 + 绝对偏移\n    if (\n      cfg.startPoint!.x === cfg.endPoint!.x &&\n      cfg.startPoint!.y === cfg.endPoint!.y\n    ) {\n      style.x = cfg.startPoint!.x + offsetX - backgroundWidth / 2;\n      style.y = cfg.startPoint!.y + offsetY - backgroundHeight / 2;\n      return style;\n    }\n\n    let offsetStyle = getLabelPosition(\n      pathShape,\n      pointPercent,\n      offsetX - backgroundWidth / 2,\n      offsetY + backgroundHeight / 2,\n      autoRotate,\n    );\n\n    const rad = offsetStyle.angle;\n\n    if (rad > (1 / 2) * Math.PI && rad < ((3 * 1) / 2) * Math.PI) {\n      offsetStyle = getLabelPosition(\n        pathShape,\n        pointPercent,\n        offsetX + backgroundWidth / 2,\n        offsetY + backgroundHeight / 2,\n        autoRotate,\n      );\n    }\n\n    if (autoRotate) {\n      style.x = offsetStyle.x;\n      style.y = offsetStyle.y;\n    }\n    style.rotate = offsetStyle.rotate;\n    return style;\n  },\n  // 获取文本对齐方式\n  _getTextAlign(labelPosition: string, angle: number): string {\n    let textAlign = \"center\";\n    if (!angle) {\n      return labelPosition;\n    }\n    angle = angle % (Math.PI * 2); // 取模\n    if (labelPosition !== \"center\") {\n      if (\n        (angle >= 0 && angle <= Math.PI / 2) ||\n        (angle >= (3 / 2) * Math.PI && angle < 2 * Math.PI)\n      ) {\n        textAlign = labelPosition;\n      } else {\n        textAlign = revertAlign(labelPosition);\n      }\n    }\n    return textAlign;\n  },\n  /**\n   * @internal 获取边的控制点\n   * @param  {Object} cfg 边的配置项\n   * @return {Array} 控制点的数组\n   */\n  getControlPoints(cfg: EdgeConfig): IPoint[] | undefined {\n    return cfg.controlPoints;\n  },\n  /**\n   * @internal 处理需要重计算点和边的情况\n   * @param {Object} cfg 边的配置项\n   * @return {Object} 边的配置项\n   */\n  getPathPoints(cfg: EdgeConfig): EdgeConfig {\n    return cfg;\n  },\n  /**\n   * 绘制边\n   * @override\n   * @param  {Object} cfg   边的配置项\n   * @param  {G.Group} group 边的容器\n   * @return {IShape} 图形\n   */\n  drawShape(cfg: EdgeConfig, group: IGroup): IShape {\n    const shapeStyle = this.getShapeStyle!(cfg);\n    const shape = group.addShape(\"path\", {\n      className: CLS_SHAPE,\n      name: CLS_SHAPE,\n      attrs: shapeStyle,\n    });\n    return shape;\n  },\n  drawLabel(cfg: EdgeConfig, group: IGroup): IShape {\n    const { labelCfg: defaultLabelCfg } = this.options as ModelConfig;\n    let defaultFontFamily;\n    if (\n      typeof window !== \"undefined\" &&\n      typeof window.getComputedStyle !== \"undefined\"\n    )\n      defaultFontFamily =\n        window\n          .getComputedStyle(document.body, null)\n          .getPropertyValue(\"font-family\") || \"Arial, sans-serif\";\n    else defaultFontFamily = \"Arial, sans-serif\";\n\n    const labelCfg = deepMix(\n      {\n        fontFamily: defaultFontFamily,\n      },\n      defaultLabelCfg,\n      cfg.labelCfg,\n    );\n    const labelStyle = this.getLabelStyle!(cfg, labelCfg, group);\n    const rotate = labelStyle.rotate;\n    delete labelStyle.rotate;\n    const label = group.addShape(\"text\", {\n      attrs: labelStyle,\n      name: \"text-shape\",\n    });\n    if (rotate) {\n      label.rotateAtStart(rotate);\n    }\n\n    if (labelStyle.background) {\n      const rect = this.drawLabelBg(cfg, group, label);\n      const labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n      rect.set(\"classname\", labelBgClassname);\n      label.toFront();\n    }\n    return label;\n  },\n  drawLabelBg(cfg: ModelConfig, group: IGroup, label: IElement) {\n    const { labelCfg: defaultLabelCfg } = this.options as ModelConfig;\n    const labelCfg = deepMix({}, defaultLabelCfg, cfg.labelCfg);\n    const labelStyle = this.getLabelStyle!(cfg, labelCfg, group);\n    const rotate = labelStyle.rotate;\n\n    const style = this.getLabelBgStyleByPosition(label, cfg, labelCfg, group);\n    delete style.rotate;\n    const rect = group.addShape(\"rect\", {\n      name: \"text-bg-shape\",\n      attrs: style,\n    });\n    if (rotate) rect.rotateAtStart(rotate);\n    return rect;\n  },\n};\n\nconst singleEdgeDef = { ...shapeBase, ...singleEdge };\nShape.registerEdge(\"single-edge\", singleEdgeDef);\n\n// 直线, 不支持控制点\nShape.registerEdge(\n  \"line\",\n  {\n    // 控制点不生效\n    getControlPoints() {\n      return undefined;\n    },\n  },\n  \"single-edge\",\n);\n\n// 直线\nShape.registerEdge(\n  \"spline\",\n  {\n    getPath(points: Point[]): Array<Array<string | number>> {\n      const path = getSpline(points);\n      return path;\n    },\n  },\n  \"single-edge\",\n);\n\nShape.registerEdge(\n  \"arc\",\n  {\n    curveOffset: 20,\n    clockwise: 1,\n    getControlPoints(cfg: EdgeConfig): IPoint[] {\n      const { startPoint, endPoint } = cfg;\n\n      const midPoint = {\n        x: (startPoint.x + endPoint.x) / 2,\n        y: (startPoint.y + endPoint.y) / 2,\n      };\n      let center;\n      let arcPoint;\n      // 根据给定点计算圆弧\n      if (cfg.controlPoints !== undefined) {\n        arcPoint = cfg.controlPoints[0];\n        center = getCircleCenterByPoints(startPoint, arcPoint, endPoint);\n        // 根据控制点和直线关系决定 clockwise值\n        if (startPoint.x <= endPoint.x && startPoint.y > endPoint.y) {\n          this.clockwise = center.x > arcPoint.x ? 0 : 1;\n        } else if (startPoint.x <= endPoint.x && startPoint.y < endPoint.y) {\n          this.clockwise = center.x > arcPoint.x ? 1 : 0;\n        } else if (startPoint.x > endPoint.x && startPoint.y <= endPoint.y) {\n          this.clockwise = center.y < arcPoint.y ? 0 : 1;\n        } else {\n          this.clockwise = center.y < arcPoint.y ? 1 : 0;\n        }\n        // 若给定点和两端点共线，无法生成圆弧，绘制直线\n        if (\n          (arcPoint.x - startPoint.x) / (arcPoint.y - startPoint.y) ===\n          (endPoint.x - startPoint.x) / (endPoint.y - startPoint.y)\n        ) {\n          return [];\n        }\n      } else {\n        // 根据直线连线中点的的偏移计算圆弧\n        // 若用户给定偏移量则根据其计算，否则按照默认偏移值计算\n        if (cfg.curveOffset === undefined) {\n          cfg.curveOffset = this.curveOffset;\n        }\n        if (isArray(cfg.curveOffset)) {\n          cfg.curveOffset = cfg.curveOffset[0];\n        }\n        if (cfg.curveOffset < 0) {\n          this.clockwise = 0;\n        } else {\n          this.clockwise = 1;\n        }\n        const vec = {\n          x: endPoint.x - startPoint.x,\n          y: endPoint.y - startPoint.y,\n        };\n        const edgeAngle = Math.atan2(vec.y, vec.x);\n        arcPoint = {\n          x: cfg.curveOffset * Math.cos(-Math.PI / 2 + edgeAngle) + midPoint.x,\n          y: cfg.curveOffset * Math.sin(-Math.PI / 2 + edgeAngle) + midPoint.y,\n        };\n        center = getCircleCenterByPoints(startPoint, arcPoint, endPoint);\n      }\n      const radius = distance(startPoint, center);\n      const controlPoints = [{ x: radius, y: radius }];\n\n      return controlPoints;\n    },\n    getPath(points: Point[]): Array<Array<string | number>> {\n      const path: Array<Array<string | number>> = [];\n      path.push([\"M\", points[0].x, points[0].y]);\n      // 控制点与端点共线\n      if (points.length === 2) {\n        path.push([\"L\", points[1].x, points[1].y]);\n      } else {\n        path.push([\n          \"A\",\n          points[1].x,\n          points[1].y,\n          0,\n          0,\n          this.clockwise as number,\n          points[2].x,\n          points[2].y,\n        ]);\n      }\n      return path;\n    },\n  },\n  \"single-edge\",\n);\n\nShape.registerEdge(\n  \"quadratic\",\n  {\n    curvePosition: 0.5, // 弯曲的默认位置\n    curveOffset: -20, // 弯曲度，沿着 startPoint, endPoint 的垂直向量（顺时针）方向，距离线的距离，距离越大越弯曲\n    getControlPoints(cfg: EdgeConfig): IPoint[] {\n      let { controlPoints } = cfg; // 指定controlPoints\n      if (!controlPoints || !controlPoints.length) {\n        const { startPoint, endPoint } = cfg;\n        if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n        if (cfg.curvePosition === undefined)\n          cfg.curvePosition = this.curvePosition;\n        if (isArray(this.curveOffset)) cfg.curveOffset = cfg.curveOffset[0];\n        if (isArray(this.curvePosition)) cfg.curvePosition = cfg.curveOffset[0];\n        const innerPoint = getControlPoint(\n          startPoint as Point,\n          endPoint as Point,\n          cfg.curvePosition as number,\n          cfg.curveOffset as number,\n        );\n        controlPoints = [innerPoint];\n      }\n      return controlPoints;\n    },\n    getPath(points: Point[]): Array<Array<string | number>> {\n      const path = [];\n      path.push([\"M\", points[0].x, points[0].y]);\n      path.push([\"Q\", points[1].x, points[1].y, points[2].x, points[2].y]);\n      return path;\n    },\n  },\n  \"single-edge\",\n);\n\nShape.registerEdge(\n  \"cubic\",\n  {\n    curvePosition: [1 / 2, 1 / 2],\n    curveOffset: [-20, 20],\n    getControlPoints(cfg: EdgeConfig): IPoint[] {\n      let { controlPoints } = cfg; // 指定 controlPoints\n      if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n      if (cfg.curvePosition === undefined)\n        cfg.curvePosition = this.curvePosition;\n      if (isNumber(cfg.curveOffset))\n        cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset];\n      if (isNumber(cfg.curvePosition))\n        cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition];\n      if (!controlPoints || !controlPoints.length || controlPoints.length < 2) {\n        const { startPoint, endPoint } = cfg;\n        const innerPoint1 = getControlPoint(\n          startPoint as Point,\n          endPoint as Point,\n          cfg.curvePosition[0],\n          cfg.curveOffset[0],\n        );\n        const innerPoint2 = getControlPoint(\n          startPoint as Point,\n          endPoint as Point,\n          cfg.curvePosition[1],\n          cfg.curveOffset[1],\n        );\n        controlPoints = [innerPoint1, innerPoint2];\n      }\n      return controlPoints;\n    },\n    getPath(points: Point[]): Array<Array<string | number>> {\n      const path = [];\n      path.push([\"M\", points[0].x, points[0].y]);\n      path.push([\n        \"C\",\n        points[1].x,\n        points[1].y,\n        points[2].x,\n        points[2].y,\n        points[3].x,\n        points[3].y,\n      ]);\n      return path;\n    },\n  },\n  \"single-edge\",\n);\n\n// 垂直方向的三阶贝塞尔曲线，不再考虑用户外部传入的控制点\nShape.registerEdge(\n  \"cubic-vertical\",\n  {\n    curvePosition: [1 / 2, 1 / 2],\n    minCurveOffset: [0, 0],\n    curveOffset: undefined,\n    getControlPoints(cfg: EdgeConfig): IPoint[] {\n      const { startPoint, endPoint } = cfg;\n      if (cfg.curvePosition === undefined)\n        cfg.curvePosition = this.curvePosition;\n      if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n      if (cfg.minCurveOffset === undefined)\n        cfg.minCurveOffset = this.minCurveOffset;\n      if (isNumber(cfg.curveOffset))\n        cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset];\n      if (isNumber(cfg.minCurveOffset))\n        cfg.minCurveOffset = [cfg.minCurveOffset, -cfg.minCurveOffset];\n      if (isNumber(cfg.curvePosition))\n        cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition];\n\n      const yDist = endPoint!.y - startPoint!.y;\n      let curveOffset: number[] = [0, 0];\n      if (cfg.curveOffset) {\n        curveOffset = cfg.curveOffset;\n      } else if (Math.abs(yDist) < Math.abs(cfg.minCurveOffset[0])) {\n        curveOffset = cfg.minCurveOffset;\n      }\n\n      const innerPoint1 = {\n        x: startPoint!.x,\n        y:\n          startPoint!.y +\n          yDist * (this as any).curvePosition[0] +\n          curveOffset[0],\n      };\n      const innerPoint2 = {\n        x: endPoint!.x,\n        y:\n          endPoint!.y - yDist * (this as any).curvePosition[1] + curveOffset[1],\n      };\n      return [innerPoint1, innerPoint2];\n    },\n  },\n  \"cubic\",\n);\n\n// 水平方向的三阶贝塞尔曲线，不再考虑用户外部传入的控制点\nShape.registerEdge(\n  \"cubic-horizontal\",\n  {\n    curvePosition: [1 / 2, 1 / 2],\n    minCurveOffset: [0, 0],\n    curveOffset: undefined,\n    getControlPoints(cfg: EdgeConfig): IPoint[] {\n      const { startPoint, endPoint } = cfg;\n      if (cfg.curvePosition === undefined)\n        cfg.curvePosition = this.curvePosition;\n      if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n      if (cfg.minCurveOffset === undefined)\n        cfg.minCurveOffset = this.minCurveOffset;\n      if (isNumber(cfg.curveOffset))\n        cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset];\n      if (isNumber(cfg.minCurveOffset))\n        cfg.minCurveOffset = [cfg.minCurveOffset, -cfg.minCurveOffset];\n      if (isNumber(cfg.curvePosition))\n        cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition];\n\n      const xDist = endPoint!.x - startPoint!.x;\n      let curveOffset: number[] = [0, 0];\n      if (cfg.curveOffset) {\n        curveOffset = cfg.curveOffset;\n      } else if (Math.abs(xDist) < Math.abs(cfg.minCurveOffset[0])) {\n        curveOffset = cfg.minCurveOffset;\n      }\n\n      const innerPoint1 = {\n        x:\n          startPoint!.x +\n          xDist * (this as any).curvePosition[0] +\n          curveOffset[0],\n        y: startPoint!.y,\n      };\n      const innerPoint2 = {\n        x:\n          endPoint!.x - xDist * (this as any).curvePosition[1] + curveOffset[1],\n        y: endPoint!.y,\n      };\n      const controlPoints = [innerPoint1, innerPoint2];\n      return controlPoints;\n    },\n  },\n  \"cubic\",\n);\n\nShape.registerEdge(\n  \"loop\",\n  {\n    getPathPoints(cfg: ModelConfig): EdgeData {\n      return getLoopCfgs(cfg as EdgeData);\n    },\n    getControlPoints(cfg: EdgeConfig): IPoint[] | undefined {\n      return cfg.controlPoints;\n    },\n    afterDraw(cfg: EdgeConfig) {\n      cfg.controlPoints = undefined;\n    },\n    afterUpdate(cfg: EdgeConfig) {\n      cfg.controlPoints = undefined;\n    },\n  },\n  \"cubic\",\n);\n"
  },
  {
    "path": "packages/core/src/element/hull/bubbleset.ts",
    "content": "import { IPoint, IBBox, Item, BubblesetCfg } from \"../../types\";\nimport {\n  squareDist,\n  pointLineSquareDist,\n  itemIntersectByLine,\n  getPointsCenter,\n  fractionToLine,\n  isPointsOverlap,\n  pointRectSquareDist,\n  Line,\n  isPointInPolygon,\n} from \"../../util/math\";\n\nconst defaultOps = {\n  maxRoutingIterations: 100, // number of times to run the algorithm to refine the path finding in difficult areas\n  maxMarchingIterations: 100, // number of times to refine the boundary\n  pixelGroupSize: 2, // the resolution of the algorithm in square pixels\n  edgeR0: 10, // the distance from edges at which energy is 1 (full influence)\n  edgeR1: 10, // the distance from edges at which energy is 0 (no influence)\n  nodeR0: 5, // the distance from nodes which energy is 1 (full influence)\n  nodeR1: 10, // the distance from nodes at which energy is 0 (no influence)\n  morphBuffer: 5, // DEFAULT_NODE_R0; the amount of space to move the virtual edge when wrapping around obstacles\n  threshold: 0.001,\n  skip: 16,\n  nodeInfluenceFactor: 1,\n  edgeInfluenceFactor: 1,\n  negativeNodeInfluenceFactor: -0.5,\n};\n\n/**\n * Marching square algorithm for traching the contour of a pixel group\n * https://www.emanueleferonato.com/2013/03/01/using-marching-squares-algorithm-to-trace-the-contour-of-an-image/\n * @param potentialArea\n * @param threshold\n */\nfunction MarchingSquares(contour, potentialArea, threshold) {\n  let marched = false;\n  const getVal = (x: number, y: number) => {\n    return potentialArea.cells[x + y * potentialArea.width];\n  };\n\n  const getState = (x: number, y: number) => {\n    let squareVal = 0;\n    if (getVal(x - 1, y - 1) >= threshold) {\n      squareVal += 1;\n    }\n    if (getVal(x, y - 1) > threshold) {\n      squareVal += 2;\n    }\n    if (getVal(x - 1, y) > threshold) {\n      squareVal += 4;\n    }\n    if (getVal(x, y) > threshold) {\n      squareVal += 8;\n    }\n    return squareVal;\n  };\n\n  const doMarch = (xPos: number, yPos: number) => {\n    let x = xPos;\n    let y = yPos;\n    let prevX;\n    let prevY;\n\n    for (let i = 0; i < potentialArea.width * potentialArea.height; i++) {\n      prevX = x;\n      prevY = y;\n      if (contour.findIndex((item) => item.x === x && item.y === y) > -1) {\n        if (contour[0].x !== x || contour[0].y !== y) {\n          // encountered a loop but haven't returned to start: change direction using conditionals and continue back to start\n        } else {\n          return true;\n        }\n      } else {\n        contour.push({ x, y });\n      }\n\n      const state = getState(x, y);\n      // assign the move direction according to state of the square\n      switch (state) {\n        case -1:\n          console.warn(\"Marched out of bounds\");\n          return true;\n        case 0:\n        case 3:\n        case 2:\n        case 7:\n          x++; // go right\n          break;\n        case 12:\n        case 14:\n        case 4:\n          x--; // go left\n          break;\n        case 6: // go left if come from up else go right\n          if (prevX === 0) {\n            if (prevY === -1) {\n              x -= 1;\n            } else {\n              x += 1;\n            }\n          }\n          break;\n        case 1:\n        case 13:\n        case 5:\n          y--; // go up\n          break;\n        case 9: // go up if come from right else go down\n          if (prevX === 1) {\n            if (prevY === 0) {\n              y -= 1;\n            } else {\n              y += 1;\n            }\n          }\n          break;\n        case 10:\n        case 8:\n        case 11:\n          y++; // go down\n          break;\n        default:\n          console.warn(`Marching squares invalid state: ${state}`);\n          return true;\n      }\n    }\n  };\n\n  this.march = () => {\n    for (let x = 0; x < potentialArea.width && !marched; x += 1) {\n      for (let y = 0; y < potentialArea.height && !marched; y += 1) {\n        if (getVal(x, y) > threshold && getState(x, y) !== 15) {\n          marched = doMarch(x, y);\n        }\n      }\n    }\n    return marched;\n  };\n}\n\n/**\n * Space partition & assign value to each cell\n * @param points\n */\nconst initGridCells = (\n  width: number,\n  height: number,\n  pixelGroupSize: number,\n) => {\n  const scaleWidth = Math.ceil(width / pixelGroupSize);\n  const scaleHeight = Math.ceil(height / pixelGroupSize);\n  const gridCells = new Float32Array(\n    Math.max(0, scaleWidth * scaleHeight),\n  ).fill(0);\n  return {\n    cells: gridCells,\n    width: scaleWidth,\n    height: scaleHeight,\n  };\n};\n\n/**\n * Find the optimal already visited member to item;\n   Optimal: minimize cost(j) = distance(i,j) ∗ countObstacles(i,j)\n * @param item\n * @param visited\n */\nconst pickBestNeighbor = (\n  item: Item,\n  visited: Item[],\n  nonMembers: Item[],\n): Item | null => {\n  let closestNeighbour = null;\n  let minCost = Number.POSITIVE_INFINITY;\n\n  visited.forEach((neighbourItem) => {\n    const itemP = { x: item.getModel().x, y: item.getModel().y };\n    const neighbourItemP = {\n      x: neighbourItem.getModel().x,\n      y: neighbourItem.getModel().y,\n    };\n    const dist = squareDist(itemP, neighbourItemP);\n    const directLine = new Line(\n      itemP.x,\n      itemP.y,\n      neighbourItemP.x,\n      neighbourItemP.y,\n    );\n    const numberObstacles = nonMembers.reduce((count, _item) => {\n      if (fractionToLine(_item, directLine) > 0) {\n        return count + 1;\n      }\n      return count;\n    }, 0);\n    if (dist * (numberObstacles + 1) ** 2 < minCost) {\n      closestNeighbour = neighbourItem;\n      minCost = dist * (numberObstacles + 1) ** 2;\n    }\n  });\n  return closestNeighbour;\n};\n\n/**\n * 返回和线相交的item中，离边的起点最近的item\n * @param items\n * @param line\n */\nconst getIntersectItem = (items: Item[], line: Line): Item | null => {\n  let minDistance = Number.POSITIVE_INFINITY;\n  let closestItem = null;\n\n  items.forEach((item) => {\n    const distance = fractionToLine(item, line);\n    // find closest intersection\n    if (distance >= 0 && distance < minDistance) {\n      closestItem = item;\n      minDistance = distance;\n    }\n  });\n  return closestItem;\n};\n\n/**\n * Modify the directLine and Route virtual edges around obstacles\n */\nconst computeRoute = (\n  directLine: Line,\n  nonMembers: Item[],\n  maxRoutingIterations: number,\n  morphBuffer: number,\n): Line[] => {\n  const checkedLines: Line[] = [];\n  const linesToCheck: Line[] = [];\n  linesToCheck.push(directLine);\n\n  let hasIntersection = true;\n  let iterations = 0;\n\n  const pointExists = (point: IPoint, lines: Line[]) => {\n    let flag = false;\n    lines.forEach((line) => {\n      if (flag) return;\n      if (\n        isPointsOverlap(point, { x: line.x1, y: line.y1 }) ||\n        isPointsOverlap(point, { x: line.x2, y: line.y2 })\n      ) {\n        flag = true;\n      }\n    });\n    return flag;\n  };\n  const isPointInNonMembers = (point: IPoint, _nonMembers: Item[]) => {\n    for (const item of _nonMembers) {\n      const bbox = item.getBBox();\n      const itemContour = [\n        [bbox.x, bbox.y],\n        [bbox.x + bbox.width, bbox.y],\n        [bbox.x, bbox.y + bbox.height],\n        [bbox.x + bbox.width, bbox.y + bbox.height],\n      ];\n      if (isPointInPolygon(itemContour, point.x, point.y)) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  // outer loop end when no more intersections or out of iterations\n  while (hasIntersection && iterations < maxRoutingIterations) {\n    hasIntersection = false;\n    // inner loop end when out of lines or found an intersection\n    while (!hasIntersection && linesToCheck.length) {\n      const line = linesToCheck.pop();\n      const closestItem = getIntersectItem(nonMembers, line);\n      if (closestItem) {\n        const [intersections, countIntersections] = itemIntersectByLine(\n          closestItem,\n          line,\n        );\n        // if line passes through item\n        if (countIntersections === 2) {\n          const testReroute = (isFirst: boolean) => {\n            let tempMorphBuffer = morphBuffer;\n            let virtualNode = rerouteLine(\n              closestItem,\n              tempMorphBuffer,\n              intersections,\n              isFirst,\n            );\n            // test the virtualNode already exists\n            let exist =\n              pointExists(virtualNode, linesToCheck) ||\n              pointExists(virtualNode, checkedLines);\n            let pointInside = isPointInNonMembers(virtualNode, nonMembers);\n\n            while (!exist && pointInside && tempMorphBuffer >= 1) {\n              // try a smaller buffer\n              tempMorphBuffer /= 1.5;\n              virtualNode = rerouteLine(\n                closestItem,\n                tempMorphBuffer,\n                intersections,\n                isFirst,\n              );\n              exist =\n                pointExists(virtualNode, linesToCheck) ||\n                pointExists(virtualNode, checkedLines);\n              pointInside = isPointInNonMembers(virtualNode, nonMembers);\n            }\n\n            // 第二次route时不要求pointInside\n            if (virtualNode && !exist && (!isFirst || !pointInside)) {\n              // add 2 rerouted lines to check\n              linesToCheck.push(\n                new Line(line.x1, line.y1, virtualNode.x, virtualNode.y),\n              );\n              linesToCheck.push(\n                new Line(virtualNode.x, virtualNode.y, line.x2, line.y2),\n              );\n              hasIntersection = true;\n            }\n          };\n\n          testReroute(true);\n          if (!hasIntersection) {\n            // if we didn't find a valid point around the first corner, try the second\n            testReroute(false);\n          }\n        }\n      }\n\n      // no intersection found, mark this line as completed\n      if (!hasIntersection) {\n        checkedLines.push(line);\n      }\n      iterations += 1;\n    }\n  }\n\n  // 加入剩余的线\n  while (linesToCheck.length) {\n    checkedLines.push(linesToCheck.pop());\n  }\n  return checkedLines;\n};\n\n/**\n *  Connect item with visited members using direct line or virtual edges\n */\nfunction getRoute(\n  item: Item,\n  nonMembers: Item[],\n  visited: Item[],\n  maxRoutingIterations: number,\n  morphBuffer: number,\n) {\n  const optimalNeighbor = pickBestNeighbor(item, visited, nonMembers);\n  if (optimalNeighbor === null) {\n    return [];\n  }\n\n  //  merge the consecutive lines\n  const mergeLines = (checkedLines: Line[]): Line[] => {\n    const finalRoute: Line[] = [];\n    while (checkedLines.length > 0) {\n      const line1 = checkedLines.pop()!;\n      if (checkedLines.length === 0) {\n        finalRoute.push(line1);\n        break;\n      }\n      const line2 = checkedLines.pop()!;\n      const mergeLine = new Line(line1.x1, line1.y1, line2.x2, line2.y2);\n      const closestItem = getIntersectItem(nonMembers, mergeLine);\n      // merge most recent line and previous line\n      if (!closestItem) {\n        checkedLines.push(mergeLine);\n      } else {\n        finalRoute.push(line1);\n        checkedLines.push(line2);\n      }\n    }\n    return finalRoute;\n  };\n  const directLine = new Line(\n    item.getModel().x,\n    item.getModel().y,\n    optimalNeighbor.getModel().x,\n    optimalNeighbor.getModel().y,\n  );\n  const checkedLines = computeRoute(\n    directLine,\n    nonMembers,\n    maxRoutingIterations,\n    morphBuffer,\n  );\n  const finalRoute = mergeLines(checkedLines);\n  return finalRoute;\n}\n\n/**\n * Calculate the countor that includes the  selected items and exclues the non-selected items\n * @param graph\n * @param members\n * @param nonMembers\n * @param options\n */\nexport const genBubbleSet = (\n  members: Item[],\n  nonMembers: Item[],\n  ops?: BubblesetCfg,\n) => {\n  // eslint-disable-next-line no-redeclare\n  const options = Object.assign(defaultOps, ops);\n  const centroid = getPointsCenter(\n    members.map((item) => ({ x: item.getModel().x, y: item.getModel().y })),\n  );\n  // 按照到中心距离远近排序\n  members = members.sort(\n    (a, b) =>\n      squareDist({ x: a.getModel().x, y: a.getModel().y }, centroid) -\n      squareDist({ x: b.getModel().x, y: b.getModel().y }, centroid),\n  );\n  const visited: Item[] = [];\n  const virtualEdges: Line[] = [];\n  members.forEach((item) => {\n    const lines = getRoute(\n      item,\n      nonMembers,\n      visited,\n      options.maxRoutingIterations,\n      options.morphBuffer,\n    );\n    lines.forEach((l) => {\n      virtualEdges.push(l);\n    });\n    visited.push(item);\n  });\n  // 由于edge也可以作为member和nonMember传入，暂时不考虑把edges作为参数传入genBubbleSet\n  // edges && edges.forEach(e => {\n  //   virtualEdges.push(new Line(e.getSource().getModel().x, e.getSource().getModel().y, e.getTarget().getModel().x, e.getTarget().getModel().y));\n  // });\n\n  const activeRegion = getActiveRregion(members, virtualEdges, options.nodeR0);\n  const potentialArea = initGridCells(\n    activeRegion.width,\n    activeRegion.height,\n    options.pixelGroupSize,\n  );\n\n  // Use march squares to generate contour\n  let contour = [];\n  let hull = [];\n  for (\n    let iterations = 0;\n    iterations < options.maxMarchingIterations;\n    iterations++\n  ) {\n    fillPotentialArea(\n      members,\n      nonMembers,\n      virtualEdges,\n      activeRegion,\n      potentialArea,\n      options,\n    );\n    contour = [];\n    hull = [];\n    if (!new MarchingSquares(contour, potentialArea, options.threshold).march())\n      continue;\n    const marchedPath = contour.map((point) => ({\n      x: Math.round(point.x * options.pixelGroupSize + activeRegion.minX),\n      y: Math.round(point.y * options.pixelGroupSize + activeRegion.minY),\n    }));\n    // const marchedPath = marchingSquares(potentialArea, options.threshold).map(point => ({ x: Math.round(point.x * options.pixelGroupSize + activeRegion.minX), y: Math.round(point.y * options.pixelGroupSize + activeRegion.minY) }))\n    if (marchedPath) {\n      let size = marchedPath.length;\n      if (options.skip > 1) {\n        size = Math.floor(marchedPath.length / options.skip);\n        // if we reduced too much (fewer than three points in reduced surface) reduce skip and try again\n        while (size < 3 && options.skip > 1) {\n          options.skip -= 1;\n          size = Math.floor(marchedPath.length / options.skip);\n        }\n      }\n      // copy hull values\n      for (let i = 0, j = 0; j < size; j += 1, i += options.skip) {\n        hull.push({ x: marchedPath[i].x, y: marchedPath[i].y });\n      }\n    }\n\n    const isContourValid = () => {\n      for (const item of members) {\n        const hullPoints = hull.map((point) => [point.x, point.y]);\n        if (\n          !isPointInPolygon(\n            hullPoints,\n            item.getBBox().centerX,\n            item.getBBox().centerY,\n          )\n        )\n          return false;\n      }\n      // 不强制要求所有nonMembers都没有包含在内\n      // for (const item of nonMembers) {\n      //   if (isPointInPolygon({ x: item.getBBox().centerX, y: item.getBBox().centerY }, contour)) return false\n      // }\n      return true;\n    };\n\n    if (hull && isContourValid()) {\n      return hull;\n    }\n\n    // update parameters for next iteraction\n    options.threshold *= 0.9;\n    if (iterations <= options.maxMarchingIterations * 0.5) {\n      options.memberInfluenceFactor *= 1.2;\n      options.edgeInfluenceFactor *= 1.2;\n    } else if (\n      options.nonMemberInfluenceFactor !== 0 &&\n      nonMembers.length > 0\n    ) {\n      // after half the iterations, start increasing positive energy and lowering the threshold\n      options.nonMemberInfluenceFactor *= 0.8;\n    } else {\n      break;\n    }\n  }\n  return hull;\n};\n\n/**\n * unionboundingbox\n * @param members\n * @param edges\n */\nfunction getActiveRregion(\n  members: Item[],\n  edges: Line[],\n  offset: number,\n): IBBox {\n  const activeRegion = {\n    minX: Number.POSITIVE_INFINITY,\n    minY: Number.POSITIVE_INFINITY,\n    maxX: Number.NEGATIVE_INFINITY,\n    maxY: Number.NEGATIVE_INFINITY,\n    width: 0,\n    height: 0,\n    x: 0,\n    y: 0,\n  };\n  const bboxes = [];\n\n  members.forEach((item) => {\n    bboxes.push(item.getBBox());\n  });\n  edges.forEach((l) => {\n    bboxes.push(l.getBBox());\n  });\n\n  for (const bbox of bboxes) {\n    activeRegion.minX =\n      (bbox.minX < activeRegion.minX ? bbox.minX : activeRegion.minX) - offset;\n    activeRegion.minY =\n      (bbox.minY < activeRegion.minY ? bbox.minY : activeRegion.minY) - offset;\n    activeRegion.maxX =\n      (bbox.maxX > activeRegion.maxX ? bbox.maxX : activeRegion.maxX) + offset;\n    activeRegion.maxY =\n      (bbox.maxY > activeRegion.maxY ? bbox.maxY : activeRegion.maxY) + offset;\n  }\n  activeRegion.width = activeRegion.maxX - activeRegion.minX;\n  activeRegion.height = activeRegion.maxY - activeRegion.minY;\n  activeRegion.x = activeRegion.minX;\n  activeRegion.y = activeRegion.minY;\n  return activeRegion;\n}\n\nfunction fillPotentialArea(\n  members: Item[],\n  nonMembers: Item[],\n  edges: Line[],\n  activeRegion: IBBox,\n  potentialArea,\n  options: BubblesetCfg,\n) {\n  function pos2GridIx(x, offset) {\n    const gridIx = Math.floor((x - offset) / options.pixelGroupSize);\n    return gridIx < 0 ? 0 : gridIx;\n  }\n\n  function gridIx2Pos(x, offset) {\n    return x * options.pixelGroupSize + offset;\n  }\n\n  // using inverse a for numerical stability\n  const nodeInfA =\n    (options.nodeR0 - options.nodeR1) * (options.nodeR0 - options.nodeR1);\n  const edgeInfA =\n    (options.edgeR0 - options.edgeR1) * (options.edgeR0 - options.edgeR1);\n\n  const getAffectedRegion = (bbox, thresholdR) => {\n    const startX = Math.min(\n      pos2GridIx(bbox.minX, thresholdR + activeRegion.minX),\n      potentialArea.width,\n    );\n    const startY = Math.min(\n      pos2GridIx(bbox.minY, thresholdR + activeRegion.minY),\n      potentialArea.height,\n    );\n    const endX = Math.min(\n      pos2GridIx(bbox.maxX, -thresholdR + activeRegion.minX),\n      potentialArea.width,\n    );\n    const endY = Math.min(\n      pos2GridIx(bbox.maxY, -thresholdR + activeRegion.minY),\n      potentialArea.height,\n    );\n    return [startX, startY, endX, endY];\n  };\n  const addItemInfluence = (item: Item, influenceFactor: number) => {\n    const bbox = item.getBBox();\n    const [startX, startY, endX, endY] = getAffectedRegion(\n      bbox,\n      options.nodeR1,\n    );\n    // calculate item influence for each cell\n    for (let y = startY; y < endY; y += 1) {\n      for (let x = startX; x < endX; x += 1) {\n        if (\n          influenceFactor < 0 &&\n          potentialArea[x + y * potentialArea.width] <= 0\n        ) {\n          continue;\n        }\n        const tempX = gridIx2Pos(x, activeRegion.minX);\n        const tempY = gridIx2Pos(y, activeRegion.minY);\n        const distanceSq = pointRectSquareDist(\n          { x: tempX, y: tempY },\n          {\n            x: bbox.minX,\n            y: bbox.minY,\n            width: bbox.width,\n            height: bbox.height,\n          },\n        );\n        if (distanceSq < options.nodeR1 ** 2) {\n          const dr = Math.sqrt(distanceSq) - options.nodeR1;\n          potentialArea.cells[x + y * potentialArea.width] +=\n            influenceFactor * dr * dr;\n        }\n      }\n    }\n  };\n\n  const addEdgeInfluence = (line: Line, influenceFactor: number) => {\n    const bbox = line.getBBox();\n    const [startX, startY, endX, endY] = getAffectedRegion(\n      bbox,\n      options.edgeR1,\n    );\n    // for every point in active part of potentialArea, calculate distance to nearest point on line and add influence\n    for (let y = startY; y < endY; y += 1) {\n      for (let x = startX; x < endX; x += 1) {\n        if (\n          influenceFactor < 0 &&\n          potentialArea.cells[x + y * potentialArea.width] <= 0\n        ) {\n          continue;\n        }\n        const tempX = gridIx2Pos(x, activeRegion.minX);\n        const tempY = gridIx2Pos(y, activeRegion.minY);\n        const minDistanceSq = pointLineSquareDist({ x: tempX, y: tempY }, line);\n        // only influence if less than r1\n        if (minDistanceSq < options.edgeR1 ** 2) {\n          const mdr = Math.sqrt(minDistanceSq) - options.edgeR1;\n          potentialArea.cells[x + y * potentialArea.width] +=\n            influenceFactor * mdr * mdr;\n        }\n      }\n    }\n  };\n\n  if (options.nodeInfluenceFactor) {\n    members.forEach((item) => {\n      addItemInfluence(item, options.nodeInfluenceFactor / nodeInfA);\n    });\n  }\n\n  if (options.edgeInfluenceFactor) {\n    edges.forEach((edge) => {\n      addEdgeInfluence(edge, options.edgeInfluenceFactor / edgeInfA);\n    });\n  }\n  if (options.negativeNodeInfluenceFactor) {\n    nonMembers.forEach((item) => {\n      addItemInfluence(item, options.negativeNodeInfluenceFactor / nodeInfA);\n    });\n  }\n}\n\nfunction rerouteLine(\n  item,\n  buffer: number,\n  intersections: IPoint[],\n  wrapNormal: boolean,\n): IPoint {\n  const bbox = item.getBBox();\n  const [topIntersect, leftIntersect, bottomIntersect, rightIntersect] =\n    intersections;\n  const cornerPos = {\n    topLeft: { x: bbox.minX - buffer, y: bbox.minY - buffer },\n    topRight: { x: bbox.maxX + buffer, y: bbox.minY - buffer },\n    bottomLeft: { x: bbox.minX - buffer, y: bbox.maxY + buffer },\n    bottomRight: { x: bbox.maxX + buffer, y: bbox.maxY + buffer },\n  };\n\n  const totalArea = bbox.height * bbox.width;\n  function calcHalfArea(intersect1, intersect2) {\n    return (\n      bbox.width *\n      ((intersect1.y - bbox.minY + (intersect2.y - bbox.minY)) * 0.5)\n    );\n  }\n\n  // 根据线和boundingbox相交的情况，确定control point的位置\n  if (leftIntersect) {\n    // 相交区域有三角形\n    if (topIntersect)\n      return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight;\n    if (bottomIntersect)\n      return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight;\n    // 相交区域分成上下两个梯形，比较面积\n    const topArea = calcHalfArea(leftIntersect, rightIntersect);\n    if (topArea < totalArea * 0.5) {\n      if (leftIntersect.y > rightIntersect.y)\n        return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight;\n      return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft;\n    }\n    if (leftIntersect.y < rightIntersect.y)\n      return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight;\n    return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft;\n  }\n\n  if (rightIntersect) {\n    if (topIntersect)\n      return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft;\n    if (bottomIntersect)\n      return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft;\n  }\n\n  // 相交区域分成左右两个梯形\n  const leftArea = calcHalfArea(topIntersect, bottomIntersect);\n  if (leftArea < totalArea * 0.5) {\n    if (topIntersect.x > bottomIntersect.x)\n      return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight;\n    return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight;\n  }\n  if (topIntersect.x < bottomIntersect.x)\n    return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft;\n  return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft;\n}\n"
  },
  {
    "path": "packages/core/src/element/hull/convexHull.ts",
    "content": "import { IPoint, Item } from \"../../types\";\n\n/**\n * Use cross product to judge the direction of the turn.\n * Returns a positive value, if OAB makes a clockwise turn,\n * negative for counter-clockwise turn, and zero if the points are collinear.\n */\nexport const cross = (a: IPoint, b: IPoint, o: IPoint) => {\n  return (a.y - o.y) * (b.x - o.x) - (a.x - o.x) * (b.y - o.y);\n};\n\n/**\n * Generate a convex hull of given points. Andrew's monotone chain algorithm.\n * @param points An array of [x, y] representing the coordinates of points.\n * @return a list of vertices of the convex hull in counter-clockwise order,\n */\nexport const genConvexHull = (items: Item[]) => {\n  const points: IPoint[] = items.map((item) => ({\n    x: item.getModel().x,\n    y: item.getModel().y,\n  }));\n  points.sort((a, b) => {\n    return a.x === b.x ? a.y - b.y : a.x - b.x;\n  });\n\n  if (points.length === 1) {\n    return points;\n  }\n\n  // build the lower hull\n  const lower = [];\n  for (let i = 0; i < points.length; i++) {\n    while (\n      lower.length >= 2 &&\n      cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0\n    ) {\n      lower.pop();\n    }\n    lower.push(points[i]);\n  }\n\n  // build the upper hull\n  const upper = [];\n  for (let i = points.length - 1; i >= 0; i--) {\n    while (\n      upper.length >= 2 &&\n      cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0\n    ) {\n      upper.pop();\n    }\n    upper.push(points[i]);\n  }\n  upper.pop();\n  lower.pop();\n  const strictHull = lower.concat(upper);\n  return strictHull;\n};\n"
  },
  {
    "path": "packages/core/src/element/index.ts",
    "content": "import Shape from \"./shape\";\n\nimport \"./node\";\nimport \"./edge\";\nimport \"./combo\";\nimport \"./combos\";\nimport \"./nodes\";\n\nexport { default as Arrow } from \"./arrow\";\nexport { default as Marker } from \"./marker\";\n\nexport default Shape;\n"
  },
  {
    "path": "packages/core/src/element/marker.ts",
    "content": "export default {\n  collapse: (x, y, r) => {\n    return [\n      [\"M\", x - r, y],\n      [\"a\", r, r, 0, 1, 0, r * 2, 0],\n      [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n      [\"M\", x - r + 4, y],\n      [\"L\", x + r - 4, y],\n    ];\n  },\n  expand: (x, y, r) => {\n    return [\n      [\"M\", x - r, y],\n      [\"a\", r, r, 0, 1, 0, r * 2, 0],\n      [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n      [\"M\", x - r + 4, y],\n      [\"L\", x - r + 2 * r - 4, y],\n      [\"M\", x - r + r, y - r + 4],\n      [\"L\", x, y + r - 4],\n    ];\n  },\n  upTriangle: (x, y, r) => {\n    const l1 = r * Math.cos(Math.PI / 6);\n    const l2 = r * Math.sin(Math.PI / 6);\n    return [\n      [\"M\", x - l1, y + l2],\n      [\"L\", x + l1, y + l2],\n      [\"L\", x, y - r],\n      [\"Z\"],\n    ];\n  },\n  downTriangle: (x, y, r) => {\n    const l1 = r * Math.cos(Math.PI / 6);\n    const l2 = r * Math.sin(Math.PI / 6);\n    return [\n      [\"M\", x - l1, y - l2],\n      [\"L\", x + l1, y - l2],\n      [\"L\", x, y + r],\n      [\"Z\"],\n    ];\n  },\n};\n"
  },
  {
    "path": "packages/core/src/element/node.ts",
    "content": "/**\n * @fileOverview common node shape\n * @author huangtonger@aliyun.com\n */\nimport { IGroup, IShape, IElement } from \"@antv/g-base\";\nimport { isArray, isNil, mix } from \"@antv/util\";\nimport { ILabelConfig, ShapeOptions } from \"../interface/shape\";\nimport { Item, LabelStyle, NodeConfig, ModelConfig } from \"../types\";\nimport { formatPadding } from \"../util/base\";\nimport Global from \"../global\";\nimport Shape from \"./shape\";\nimport { shapeBase } from \"./shapeBase\";\n\nconst singleNode: ShapeOptions = {\n  itemType: \"node\",\n  // 单个图形的类型\n  shapeType: \"single-node\",\n  /**\n   * 文本相对图形的位置，默认以中心点\n   * 位置包括： top, bottom, left, right, center\n   * @type {String}\n   */\n  labelPosition: \"center\",\n  /**\n   * 文本相对偏移，当 labelPosition 不为 center 时有效\n   * @type {Number}\n   */\n  offset: Global.nodeLabel.offset,\n  /**\n   * 获取节点宽高\n   * @internal 返回节点的大小，以 [width, height] 的方式维护\n   * @param  {Object} cfg 节点的配置项\n   * @return {Array} 宽高\n   */\n  getSize(cfg: ModelConfig): number[] {\n    let size: number | number[] =\n      cfg.size || this.getOptions({})!.size || Global.defaultNode.size;\n\n    // size 是数组，但长度为1，则补长度为2\n    if (isArray(size) && size.length === 1) {\n      size = [size[0], size[0]];\n    }\n\n    // size 为数字，则转换为数组\n    if (!isArray(size)) {\n      size = [size, size];\n    }\n    return size;\n  },\n  // 私有方法，不希望扩展的节点复写这个方法\n  getLabelStyleByPosition(cfg: NodeConfig, labelCfg: ILabelConfig): LabelStyle {\n    const labelPosition = labelCfg.position || this.labelPosition;\n\n    // 默认的位置（最可能的情形），所以放在最上面\n    if (labelPosition === \"center\") {\n      return { x: 0, y: 0, text: cfg!.label as string };\n    }\n\n    let { offset } = labelCfg;\n    if (isNil(offset)) {\n      // 考虑 offset = 0 的场景，不用用 labelCfg.offset || Global.nodeLabel.offset\n      offset = this.offset as number; // 不居中时的偏移量\n    }\n\n    const size = this.getSize!(cfg as ModelConfig);\n\n    const width = size[0];\n    const height = size[1];\n\n    let style: any;\n    switch (labelPosition) {\n      case \"top\":\n        style = {\n          x: 0,\n          y: 0 - height / 2 - (offset as number),\n          textBaseline: \"bottom\", // 文本在图形的上面\n        };\n        break;\n      case \"bottom\":\n        style = {\n          x: 0,\n          y: height / 2 + (offset as number),\n          textBaseline: \"top\",\n        };\n        break;\n      case \"left\":\n        style = {\n          x: 0 - width / 2 - (offset as number),\n          y: 0,\n          textAlign: \"right\",\n        };\n        break;\n      default:\n        style = {\n          x: width / 2 + (offset as number),\n          y: 0,\n          textAlign: \"left\",\n        };\n        break;\n    }\n    style.text = cfg.label;\n    return style;\n  },\n  getLabelBgStyleByPosition(\n    label: IElement,\n    cfg: ModelConfig,\n    labelCfg?: ILabelConfig,\n    group?: IGroup,\n  ) {\n    if (!label) {\n      return {};\n    }\n    const bbox = label.getBBox();\n    const backgroundStyle = labelCfg.style && labelCfg.style.background;\n    if (!backgroundStyle) {\n      return {};\n    }\n\n    const padding = formatPadding(backgroundStyle.padding);\n    const backgroundWidth = bbox.width + padding[1] + padding[3];\n    const backgroundHeight = bbox.height + padding[0] + padding[2];\n\n    let { offset } = labelCfg;\n    if (isNil(offset)) {\n      // 考虑 offset = 0 的场景，不用用 labelCfg.offset || Global.nodeLabel.offset\n      offset = this.offset as number; // 不居中时的偏移量\n    }\n\n    let style: any;\n    style = {\n      x: bbox.minX - padding[3],\n      y: bbox.minY - padding[0],\n    };\n\n    style = {\n      ...style,\n      ...backgroundStyle,\n      width: backgroundWidth,\n      height: backgroundHeight,\n    };\n\n    return style;\n  },\n  drawShape(cfg: NodeConfig, group: IGroup): IShape {\n    const { shapeType } = this; // || this.type，都已经加了 shapeType\n    const style = this.getShapeStyle!(cfg);\n    const shape = group.addShape(shapeType, {\n      attrs: style,\n      draggable: true,\n      name: \"node-shape\",\n    });\n    return shape;\n  },\n\n  /**\n   * 更新linkPoints\n   * @param {Object} cfg 节点数据配置项\n   * @param {Group} group Item所在的group\n   */\n  updateLinkPoints(cfg: NodeConfig, group: IGroup) {\n    const { linkPoints: defaultLinkPoints } = this.getOptions(\n      cfg,\n    ) as ModelConfig;\n\n    const markLeft = group.find(\n      (element) => element.get(\"className\") === \"link-point-left\",\n    );\n    const markRight = group.find(\n      (element) => element.get(\"className\") === \"link-point-right\",\n    );\n    const markTop = group.find(\n      (element) => element.get(\"className\") === \"link-point-top\",\n    );\n    const markBottom = group.find(\n      (element) => element.get(\"className\") === \"link-point-bottom\",\n    );\n\n    let currentLinkPoints;\n    if (markLeft) {\n      currentLinkPoints = markLeft.attr();\n    }\n    if (markRight && !currentLinkPoints) {\n      currentLinkPoints = markRight.attr();\n    }\n    if (markTop && !currentLinkPoints) {\n      currentLinkPoints = markTop.attr();\n    }\n    if (markBottom && !currentLinkPoints) {\n      currentLinkPoints = markBottom.attr();\n    }\n    if (!currentLinkPoints) currentLinkPoints = defaultLinkPoints;\n\n    const linkPoints = mix({}, currentLinkPoints, cfg.linkPoints);\n\n    const {\n      fill: markFill,\n      stroke: markStroke,\n      lineWidth: borderWidth,\n    } = linkPoints;\n    let markSize = linkPoints.size / 2;\n    if (!markSize) markSize = linkPoints.r;\n    const { left, right, top, bottom } = cfg.linkPoints\n      ? cfg.linkPoints\n      : {\n          left: undefined,\n          right: undefined,\n          top: undefined,\n          bottom: undefined,\n        };\n\n    const size = this.getSize!(cfg);\n    const width = size[0];\n    const height = size[1];\n    const styles = {\n      r: markSize,\n      fill: markFill,\n      stroke: markStroke,\n      lineWidth: borderWidth,\n    };\n\n    if (markLeft) {\n      if (!left && left !== undefined) {\n        markLeft.remove();\n      } else {\n        markLeft.attr({\n          ...styles,\n          x: -width / 2,\n          y: 0,\n        });\n      }\n    } else if (left) {\n      group.addShape(\"circle\", {\n        attrs: {\n          ...styles,\n          x: -width / 2,\n          y: 0,\n        },\n        className: \"link-point-left\",\n        name: \"link-point-left\",\n        isAnchorPoint: true,\n      });\n    }\n\n    if (markRight) {\n      if (!right && right !== undefined) {\n        markRight.remove();\n      }\n      markRight.attr({\n        ...styles,\n        x: width / 2,\n        y: 0,\n      });\n    } else if (right) {\n      group.addShape(\"circle\", {\n        attrs: {\n          ...styles,\n          x: width / 2,\n          y: 0,\n        },\n        className: \"link-point-right\",\n        name: \"link-point-right\",\n        isAnchorPoint: true,\n      });\n    }\n\n    if (markTop) {\n      if (!top && top !== undefined) {\n        markTop.remove();\n      }\n      markTop.attr({\n        ...styles,\n        x: 0,\n        y: -height / 2,\n      });\n    } else if (top) {\n      group.addShape(\"circle\", {\n        attrs: {\n          ...styles,\n          x: 0,\n          y: -height / 2,\n        },\n        className: \"link-point-top\",\n        name: \"link-point-top\",\n        isAnchorPoint: true,\n      });\n    }\n\n    if (markBottom) {\n      if (!bottom && bottom !== undefined) {\n        markBottom.remove();\n      } else {\n        markBottom.attr({\n          ...styles,\n          x: 0,\n          y: height / 2,\n        });\n      }\n    } else if (bottom) {\n      group.addShape(\"circle\", {\n        attrs: {\n          ...styles,\n          x: 0,\n          y: height / 2,\n        },\n        className: \"link-point-bottom\",\n        name: \"link-point-bottom\",\n        isAnchorPoint: true,\n      });\n    }\n  },\n  updateShape(\n    cfg: NodeConfig,\n    item: Item,\n    keyShapeStyle: object,\n    hasIcon: boolean,\n  ) {\n    const keyShape = item.get(\"keyShape\");\n    keyShape.attr({\n      ...keyShapeStyle,\n    });\n\n    (this as any).updateLabel(cfg, item);\n    // special for some types of nodes\n\n    if (hasIcon) {\n      (this as any).updateIcon(cfg, item);\n    }\n  },\n  updateIcon(cfg: NodeConfig, item: Item) {\n    const group = item.getContainer();\n    const { icon } = this.getOptions(cfg) as NodeConfig;\n    const { show } = cfg.icon ? cfg.icon : { show: undefined };\n    const iconShape = group.find(\n      (element) => element.get(\"className\") === `${this.type}-icon`,\n    );\n    if (iconShape) {\n      // 若原先存在 icon\n      if (show || show === undefined) {\n        // 若传入 show: true, 或没有设置，则更新原有的 icon 样式\n        const iconConfig = mix({}, iconShape.attr(), icon);\n        const { width: w, height: h } = iconConfig;\n        iconShape.attr({\n          ...iconConfig,\n          x: -w / 2,\n          y: -h / 2,\n        });\n      } else {\n        // 若传入了 show: false 则删除原先的 icon\n        iconShape.remove();\n      }\n    } else if (show) {\n      // 如果原先不存在 icon，但传入了 show: true，则新增 icon\n      const { width: w, height: h } = icon;\n      group.addShape(\"image\", {\n        attrs: {\n          ...icon,\n          x: -w! / 2,\n          y: -h! / 2,\n        },\n        className: `${this.type}-icon`,\n        name: `${this.type}-icon`,\n      });\n      // to ensure the label is on the top of all the shapes\n      const labelShape = group.find(\n        (element) => element.get(\"className\") === `node-label`,\n      );\n      if (labelShape) {\n        labelShape.toFront();\n      }\n    }\n  },\n};\n\nconst singleNodeDef = { ...shapeBase, ...singleNode };\nShape.registerNode(\"single-node\", singleNodeDef);\n"
  },
  {
    "path": "packages/core/src/element/nodes/image.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport Shape from \"../shape\";\nimport { NodeConfig, Item } from \"../../types\";\n\n/**\n * 基本的图片，可以添加文本，默认文本在图片的下面\n */\nShape.registerNode(\n  \"image\",\n  {\n    options: {\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ\",\n      size: 200,\n      clipCfg: {\n        show: false,\n        type: \"circle\",\n        // circle\n        r: 50,\n        // ellipse\n        rx: 50,\n        ry: 35,\n        // rect\n        width: 50,\n        height: 35,\n        // polygon\n        points: [\n          [30, 12],\n          [12, 30],\n          [30, 48],\n          [48, 30],\n        ],\n        // path\n        path: [\n          [\"M\", 25, 25],\n          [\"L\", 50, 25],\n          [\"A\", 12.5, 12.5, 0, 1, 1, 50, 50],\n          [\"A\", 12.5, 12.5, 0, 1, 0, 50, 50],\n          [\"L\", 25, 75],\n          [\"Z\"],\n        ],\n        // 坐标\n        x: 0,\n        y: 0,\n        // clip 的属性样式\n        // style: {\n        //   lineWidth: 1\n        // },\n      },\n    },\n    shapeType: \"image\",\n    labelPosition: \"bottom\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { shapeType } = this; // || this.type，都已经加了 shapeType\n      const style = this.getShapeStyle!(cfg);\n      delete style.fill;\n      const shape = group.addShape(shapeType, {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n      (this as any).drawClip(cfg, shape);\n      return shape;\n    },\n    drawClip(cfg: NodeConfig, shape: IShape) {\n      const { clipCfg: clip } = this.getOptions(cfg);\n\n      if (!clip.show) {\n        return;\n      }\n      // 支持 circle、rect、ellipse、Polygon 及自定义 path clip\n      const { type, x, y, style } = clip;\n      if (type === \"circle\") {\n        const { r } = clip;\n        shape.setClip({\n          type: \"circle\",\n          attrs: {\n            r,\n            x,\n            y,\n            ...style,\n          },\n        });\n      } else if (type === \"rect\") {\n        const { width, height } = clip;\n        const rectX = x - width / 2;\n        const rectY = y - height / 2;\n        shape.setClip({\n          type: \"rect\",\n          attrs: {\n            x: rectX,\n            y: rectY,\n            width,\n            height,\n            ...style,\n          },\n        });\n      } else if (type === \"ellipse\") {\n        const { rx, ry } = clip;\n        shape.setClip({\n          type: \"ellipse\",\n          attrs: {\n            x,\n            y,\n            rx,\n            ry,\n            ...style,\n          },\n        });\n      } else if (type === \"polygon\") {\n        const { points } = clip;\n        shape.setClip({\n          type: \"polygon\",\n          attrs: {\n            points,\n            ...style,\n          },\n        });\n      } else if (type === \"path\") {\n        const { path } = clip;\n        shape.setClip({\n          type: \"path\",\n          attrs: {\n            path,\n            ...style,\n          },\n        });\n      }\n    },\n    getShapeStyle(cfg: NodeConfig) {\n      const { style: defaultStyle } = this.getOptions(cfg);\n      const size = this.getSize!(cfg);\n      const { img } = this.getOptions(cfg);\n      let width = size[0];\n      let height = size[1];\n      if (defaultStyle) {\n        width = defaultStyle.width || size[0];\n        height = defaultStyle.height || size[1];\n      }\n      const style = {\n        x: -width / 2, // 节点的位置在上层确定，所以这里仅使用相对位置即可\n        y: -height / 2,\n        width,\n        height,\n        img,\n        ...defaultStyle,\n      };\n      return style;\n    },\n    updateShapeStyle(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      const shapeClassName = `${this.itemType}-shape`;\n      const shape =\n        group.find((element) => element.get(\"className\") === shapeClassName) ||\n        item.getKeyShape();\n      const shapeStyle = this.getShapeStyle!(cfg);\n      if (shape) {\n        shape.attr(shapeStyle);\n      }\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/core/src/element/nodes/index.ts",
    "content": "import \"./simple-circle\";\nimport \"./simple-rect\";\nimport \"./image\";\n"
  },
  {
    "path": "packages/core/src/element/nodes/simple-circle.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { deepMix } from \"@antv/util\";\nimport { Item, NodeConfig, ShapeStyle } from \"../../types\";\nimport Global from \"../../global\";\nimport Shape from \"../shape\";\nimport { ShapeOptions } from \"../../interface/shape\";\n\n// 带有图标的圆，可用于拓扑图中\nShape.registerNode(\n  \"simple-circle\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: Global.defaultNode.size,\n      style: {\n        x: 0,\n        y: 0,\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"simple-circle\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const style = this.getShapeStyle!(cfg);\n      const keyShape: IShape = group.addShape(\"circle\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      return keyShape;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig): ShapeStyle {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = deepMix({}, defaultStyle, strokeStyle);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const r = size[0] / 2;\n      const styles = {\n        x: 0,\n        y: 0,\n        r,\n        ...style,\n      };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const size = (this as ShapeOptions).getSize!(cfg);\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        r: size[0] / 2,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      const style = deepMix({}, keyShape.attr(), strokeStyle, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, true);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/core/src/element/nodes/simple-rect.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { mix } from \"@antv/util\";\nimport { Item, NodeConfig, ShapeStyle } from \"../../types\";\nimport Global from \"../../global\";\nimport Shape from \"../shape\";\nimport { ShapeOptions } from \"../../interface/shape\";\n\nShape.registerNode(\n  \"simple-rect\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: [100, 30],\n      style: {\n        radius: 0,\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 连接点，默认为左右\n      // anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"simple-rect\",\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const style = this.getShapeStyle!(cfg);\n\n      const keyShape = group.addShape(\"rect\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      return keyShape;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig) {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = style.width || size[0];\n      const height = style.height || size[1];\n      const styles = {\n        x: -width / 2,\n        y: -height / 2,\n        width,\n        height,\n        ...style,\n      };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n      const { style: defaultStyle } = this.getOptions({}) as NodeConfig;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const keyShape = item.get(\"keyShape\");\n      if (!cfg.size) {\n        size[0] = keyShape.attr(\"width\") || defaultStyle.width;\n        size[1] = keyShape.attr(\"height\") || defaultStyle.height;\n      }\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        x: -size[0] / 2,\n        y: -size[1] / 2,\n        width: size[0],\n        height: size[1],\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      let style = mix({}, defaultStyle, keyShape.attr(), strokeStyle);\n      style = mix(style, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, false);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/core/src/element/shape.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { upperFirst } from \"@antv/util\";\nimport { ShapeOptions, ShapeDefine } from \"../interface/shape\";\nimport { IPoint, Item, ModelConfig, NodeConfig, EdgeConfig } from \"../types\";\nimport { createNodeFromXML } from \"./xml\";\n\nconst cache: {\n  [key: string]: string;\n} = {}; // ucfirst 开销过大，进行缓存\n\n// 首字母大写\nfunction ucfirst(str: string) {\n  if (!cache[str]) {\n    cache[str] = upperFirst(str);\n  }\n  return cache[str];\n}\n\n/**\n * 工厂方法的基类\n * @type Shape.FactoryBase\n */\nexport const ShapeFactoryBase = {\n  /**\n   * 默认的形状，当没有指定/匹配 shapeType 时，使用默认的\n   * @type {String}\n   */\n  defaultShapeType: \"defaultType\",\n  /**\n   * 形状的 className，用于搜索\n   * @type {String}\n   */\n  className: null,\n  /**\n   * 获取绘制 Shape 的工具类，无状态\n   * @param  {String} type 类型\n   * @return {Shape} 工具类\n   */\n  getShape(type?: string): ShapeOptions {\n    const self = this as any;\n    const shape =\n      self[type!] || self[self.defaultShapeType] || self[\"simple-circle\"];\n    return shape;\n  },\n  /**\n   * 绘制图形\n   * @param  {String} type  类型\n   * @param  {Object} cfg 配置项\n   * @param  {G.Group} group 图形的分组\n   * @return {IShape} 图形对象\n   */\n  draw(type: string, cfg: ModelConfig, group: IGroup): IShape {\n    const shape = this.getShape(type);\n    const rst = shape.draw!(cfg, group);\n    if (shape.afterDraw) {\n      shape.afterDraw(cfg, group, rst);\n    }\n    return rst;\n  },\n  /**\n   * 更新\n   * @param  {String} type  类型\n   * @param  {Object} cfg 配置项\n   * @param  {G6.Item} item 节点、边、分组等\n   */\n  baseUpdate(type: string, cfg: ModelConfig, item: Item) {\n    const shape = this.getShape(type);\n    if (shape.update) {\n      // 防止没定义 update 函数\n      shape.update(cfg, item);\n    }\n\n    if (shape.afterUpdate) {\n      shape.afterUpdate(cfg, item);\n    }\n  },\n  /**\n   * 设置状态\n   * @param {String} type  类型\n   * @param {String} name  状态名\n   * @param {String | Boolean} value 状态值\n   * @param {G6.Item} item  节点、边、分组等\n   */\n  setState(type: string, name: string, value: string | boolean, item: Item) {\n    const shape = this.getShape(type);\n\n    // 调用 shape/shapeBase.ts 中的 setState 方法\n    shape.setState!(name, value, item);\n  },\n  /**\n   * 是否允许更新，不重新绘制图形\n   * @param  {String} type 类型\n   * @return {Boolean} 是否允许使用更新\n   */\n  shouldUpdate(type: string): boolean {\n    const shape = this.getShape(type);\n    return !!shape.update;\n  },\n  getControlPoints(type: string, cfg: ModelConfig): IPoint[] | undefined {\n    const shape = this.getShape(type);\n    return shape.getControlPoints!(cfg);\n  },\n  /**\n   * 获取控制点\n   * @param {String} type 节点、边类型\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 控制点的数组,如果为 null，则没有控制点\n   */\n  getAnchorPoints(type: string, cfg: ModelConfig): number[][] | undefined {\n    const shape = this.getShape(type);\n    return shape.getAnchorPoints!(cfg);\n  },\n};\n\n/**\n * 元素的框架\n */\nconst ShapeFramework = {\n  // 默认样式及配置\n  options: {},\n  /**\n   * 绘制\n   */\n  draw(cfg, group) {\n    return this.drawShape(cfg, group);\n  },\n  /**\n   * 绘制\n   */\n  drawShape(/* cfg, group */) {},\n  /**\n   * 绘制完成后的操作，便于用户继承现有的节点、边\n   */\n  afterDraw(/* cfg, group */) {},\n  // update(cfg, item) // 默认不定义\n  afterUpdate(/* cfg, item */) {},\n  /**\n   * 设置节点、边状态\n   */\n  setState(/* name, value, item */) {},\n  /**\n   * 获取控制点\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 控制点的数组,如果为 null，则没有控制点\n   */\n  getControlPoints(cfg: NodeConfig | EdgeConfig) {\n    return cfg.controlPoints;\n  },\n  /**\n   * 获取控制点\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 控制点的数组,如果为 null，则没有控制点\n   */\n  getAnchorPoints(cfg: NodeConfig | EdgeConfig) {\n    const { anchorPoints: defaultAnchorPoints } = this.options as any;\n    const anchorPoints = cfg.anchorPoints || defaultAnchorPoints;\n    return anchorPoints;\n  },\n  /* 如果没定义 update 方法，每次都调用 draw 方法\n  update(cfg, item) {\n\n  }\n  */\n};\n\nexport default class Shape {\n  public static Node: any;\n\n  public static Edge: any;\n\n  public static Combo: any;\n\n  public static registerFactory(factoryType: string, cfg: object): object {\n    const className = ucfirst(factoryType);\n    const factoryBase = ShapeFactoryBase;\n    const shapeFactory = { ...factoryBase, ...cfg } as any;\n    (Shape as any)[className] = shapeFactory;\n    shapeFactory.className = className;\n    return shapeFactory;\n  }\n\n  public static getFactory(factoryType: string) {\n    const className = ucfirst(factoryType);\n    return (Shape as any)[className];\n  }\n\n  public static registerNode(\n    shapeType: string,\n    nodeDefinition: ShapeOptions | ShapeDefine,\n    extendShapeType?: string,\n  ) {\n    const shapeFactory = Shape.Node;\n    let shapeObj;\n\n    if (\n      typeof nodeDefinition === \"string\" ||\n      typeof nodeDefinition === \"function\"\n    ) {\n      const autoNodeDefinition = createNodeFromXML(nodeDefinition);\n      shapeObj = {\n        ...shapeFactory.getShape(\"single-node\"),\n        ...autoNodeDefinition,\n      };\n    } else if (nodeDefinition.jsx) {\n      const { jsx } = nodeDefinition;\n      const autoNodeDefinition = createNodeFromXML(jsx);\n      shapeObj = {\n        ...shapeFactory.getShape(\"single-node\"),\n        ...autoNodeDefinition,\n        ...nodeDefinition,\n      };\n    } else {\n      shapeFactory.getShape(extendShapeType);\n      const extendShape = extendShapeType\n        ? shapeFactory.getShape(extendShapeType)\n        : ShapeFramework;\n      shapeObj = { ...extendShape, ...nodeDefinition };\n    }\n\n    shapeObj.type = shapeType;\n    shapeObj.itemType = \"node\";\n    shapeFactory[shapeType] = shapeObj;\n    return shapeObj;\n  }\n\n  public static registerEdge(\n    shapeType: string,\n    edgeDefinition: ShapeOptions,\n    extendShapeType?: string,\n  ) {\n    const shapeFactory = Shape.Edge;\n    const extendShape = extendShapeType\n      ? shapeFactory.getShape(extendShapeType)\n      : ShapeFramework;\n    const shapeObj = { ...extendShape, ...edgeDefinition };\n    shapeObj.type = shapeType;\n    shapeObj.itemType = \"edge\";\n    shapeFactory[shapeType] = shapeObj;\n    return shapeObj;\n  }\n\n  public static registerCombo(\n    shapeType: string,\n    comboDefinition: ShapeOptions,\n    extendShapeType?: string,\n  ) {\n    const shapeFactory = Shape.Combo;\n    const extendShape = extendShapeType\n      ? shapeFactory.getShape(extendShapeType)\n      : ShapeFramework;\n\n    const shapeObj = { ...extendShape, ...comboDefinition };\n    shapeObj.type = shapeType;\n    shapeObj.itemType = \"combo\";\n    shapeFactory[shapeType] = shapeObj;\n    return shapeObj;\n  }\n}\n\n// 注册 Node 的工厂方法\nShape.registerFactory(\"node\", {\n  defaultShapeType: \"circle\",\n});\n\n// 注册 Edge 的工厂方法\nShape.registerFactory(\"edge\", {\n  defaultShapeType: \"line\",\n});\n\n// 注册 Combo 的工厂方法\nShape.registerFactory(\"combo\", {\n  defaultShapeType: \"circle\",\n});\n"
  },
  {
    "path": "packages/core/src/element/shapeBase.ts",
    "content": "/**\n * @fileOverview 自定义节点和边的过程中，发现大量重复代码\n * @author dxq613@gmail.com\n */\nimport { IGroup, IShape, IElement } from \"@antv/g-base\";\nimport { ShapeOptions, ILabelConfig } from \"../interface/shape\";\nimport {\n  IPoint,\n  Item,\n  LabelStyle,\n  ShapeStyle,\n  ModelConfig,\n  EdgeConfig,\n} from \"../types\";\nimport Global from \"../global\";\nimport { ext } from \"@antv/matrix-util\";\nimport {\n  deepMix,\n  each,\n  mix,\n  isBoolean,\n  isPlainObject,\n  clone,\n} from \"@antv/util\";\nimport { cloneBesidesImg } from \"../util/graphic\";\n\nconst transform = ext.transform;\n\nconst CLS_SHAPE_SUFFIX = \"-shape\";\nconst CLS_LABEL_SUFFIX = \"-label\";\nconst ARROWS = [\"startArrow\", \"endArrow\"];\nconst SHAPE_DEFAULT_ATTRS = {\n  lineWidth: 1,\n  stroke: undefined,\n  fill: undefined,\n  lineAppendWidth: 1,\n  opacity: undefined,\n  strokeOpacity: undefined,\n  fillOpacity: undefined,\n  x: 0,\n  y: 0,\n  r: 10,\n  width: 20,\n  height: 20,\n  shadowColor: undefined,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n};\nconst PATH_SHAPE_DEFAULT_ATTRS = {\n  lineWidth: 1,\n  stroke: \"#000\",\n  lineDash: undefined,\n  startArrow: false,\n  endArrow: false,\n  opacity: undefined,\n  strokeOpacity: undefined,\n  fillOpacity: undefined,\n  shadowColor: undefined,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n};\nconst SHAPES_DEFAULT_ATTRS = {\n  edge: PATH_SHAPE_DEFAULT_ATTRS,\n  node: SHAPE_DEFAULT_ATTRS,\n  combo: SHAPE_DEFAULT_ATTRS,\n};\n\nexport const CLS_LABEL_BG_SUFFIX = \"-label-bg\";\n\n// 单个 shape 带有一个 label，共用这段代码\nexport const shapeBase: ShapeOptions = {\n  // 默认样式及配置\n  options: {},\n  itemType: \"\", // node, edge, combo 等\n  /**\n   * 形状的类型，例如 circle，ellipse，polyline...\n   */\n  type: \"\",\n  getCustomConfig(cfg: ModelConfig): ModelConfig {\n    return {};\n  },\n  getOptions(cfg: ModelConfig): ModelConfig {\n    return deepMix(\n      {\n        // 解决局部渲染导致的文字移动残影问题\n        labelCfg: {\n          style: {\n            fontFamily:\n              typeof window !== \"undefined\" && window.getComputedStyle\n                ? window\n                    .getComputedStyle(document.body, null)\n                    .getPropertyValue(\"font-family\") || \"Arial, sans-serif\"\n                : \"Arial, sans-serif\",\n          },\n        },\n        descriptionCfg: {\n          style: {\n            fontFamily:\n              typeof window !== \"undefined\" && window.getComputedStyle\n                ? window\n                    .getComputedStyle(document.body, null)\n                    .getPropertyValue(\"font-family\") || \"Arial, sans-serif\"\n                : \"Arial, sans-serif\",\n          },\n        },\n      },\n      this.options,\n      this.getCustomConfig(cfg) || {},\n      cfg,\n    );\n  },\n  /**\n   * 绘制节点/边，包含文本\n   * @override\n   * @param  {Object} cfg 节点的配置项\n   * @param  {G.Group} group 节点的容器\n   * @return {IShape} 绘制的图形\n   */\n  draw(cfg: ModelConfig, group: IGroup): IShape {\n    const shape: IShape = this.drawShape!(cfg, group);\n    shape.set(\"className\", this.itemType + CLS_SHAPE_SUFFIX);\n    if (cfg.label) {\n      const label = this.drawLabel!(cfg, group);\n      label.set(\"className\", this.itemType + CLS_LABEL_SUFFIX);\n    }\n    return shape;\n  },\n  /**\n   * 绘制完成后的操作，便于用户继承现有的节点、边\n   * @param cfg\n   * @param group\n   * @param keyShape\n   */\n  afterDraw(cfg?: ModelConfig, group?: IGroup, keyShape?: IShape) {},\n  drawShape(cfg?: ModelConfig, group?: IGroup): IShape {\n    return null as any;\n  },\n  drawLabel(cfg: ModelConfig, group: IGroup): IShape {\n    const { labelCfg: defaultLabelCfg } = this.getOptions(cfg) as ModelConfig;\n    // image的情况下有可能为null\n    const labelCfg = (defaultLabelCfg || {}) as ILabelConfig;\n    const labelStyle = this.getLabelStyle!(cfg, labelCfg, group);\n    const rotate = labelStyle.rotate;\n    delete labelStyle.rotate;\n    const label = group.addShape(\"text\", {\n      attrs: labelStyle,\n      draggable: true,\n      className: \"text-shape\",\n      name: \"text-shape\",\n    });\n    if (rotate) {\n      const labelBBox = label.getBBox();\n      let labelMatrix = label.getMatrix();\n      if (!labelMatrix) {\n        labelMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n      }\n      if (labelStyle.rotateCenter) {\n        switch (labelStyle.rotateCenter) {\n          case \"center\":\n            labelMatrix = transform(labelMatrix, [\n              [\"t\", -labelBBox.width / 2, -labelBBox.height / 2],\n              [\"r\", rotate],\n              [\"t\", labelBBox.width / 2, labelBBox.height / 2],\n            ]);\n            break;\n          case \"lefttop\":\n            labelMatrix = transform(labelMatrix, [\n              [\"t\", -labelStyle.x!, -labelStyle.y!],\n              [\"r\", rotate],\n              [\"t\", labelStyle.x, labelStyle.y],\n            ]);\n            break;\n          case \"leftcenter\":\n            labelMatrix = transform(labelMatrix, [\n              [\"t\", -labelStyle.x!, -labelStyle.y! - labelBBox.height / 2],\n              [\"r\", rotate],\n              [\"t\", labelStyle.x, labelStyle.y! + labelBBox.height / 2],\n            ]);\n            break;\n          default:\n            labelMatrix = transform(labelMatrix, [\n              [\"t\", -labelBBox.width / 2, -labelBBox.height / 2],\n              [\"r\", rotate],\n              [\"t\", labelBBox.width / 2, labelBBox.height / 2],\n            ]);\n            break;\n        }\n      } else {\n        labelMatrix = transform(labelMatrix, [\n          [\"t\", -labelStyle.x!, -labelStyle.y! - labelBBox.height / 2],\n          [\"r\", rotate],\n          [\"t\", labelStyle.x, labelStyle.y! + labelBBox.height / 2],\n        ]);\n      }\n      label.setMatrix(labelMatrix);\n    }\n    if (labelStyle.background) {\n      const rect = this.drawLabelBg(cfg, group, label);\n      const labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n      rect.set(\"classname\", labelBgClassname);\n      label.toFront();\n    }\n    return label;\n  },\n  drawLabelBg(cfg: ModelConfig, group: IGroup, label: IElement) {\n    const { labelCfg: defaultLabelCfg } = this.options as ModelConfig;\n    const labelCfg = mix({}, defaultLabelCfg, cfg.labelCfg) as ILabelConfig;\n    const style = this.getLabelBgStyleByPosition(label, cfg, labelCfg, group);\n    const rect = group.addShape(\"rect\", {\n      name: \"text-bg-shape\",\n      attrs: style,\n    });\n    return rect;\n  },\n  getLabelStyleByPosition(\n    cfg: ModelConfig,\n    labelCfg?: ILabelConfig,\n    group?: IGroup,\n  ): LabelStyle {\n    return { text: cfg.label as string };\n  },\n  getLabelBgStyleByPosition(\n    label: IElement,\n    cfg: ModelConfig,\n    labelCfg?: ILabelConfig,\n    group?: IGroup,\n  ): LabelStyle {\n    return {};\n  },\n\n  /**\n   * 获取文本的配置项\n   * @param cfg 节点的配置项\n   * @param labelCfg 文本的配置项\n   * @param group 父容器，label 的定位可能与图形相关\n   */\n  getLabelStyle(\n    cfg: ModelConfig,\n    labelCfg: ILabelConfig,\n    group: IGroup,\n  ): LabelStyle {\n    const calculateStyle = this.getLabelStyleByPosition!(cfg, labelCfg, group);\n    const attrName = `${this.itemType}Label`; // 取 nodeLabel，edgeLabel 的配置项\n    const defaultStyle = (Global as any)[attrName]\n      ? (Global as any)[attrName].style\n      : null;\n    const labelStyle = {\n      ...defaultStyle,\n      ...calculateStyle,\n      ...labelCfg.style,\n    };\n    return labelStyle;\n  },\n\n  /**\n   * 获取图形的配置项\n   * @param cfg\n   */\n  getShapeStyle(cfg: ModelConfig): ShapeStyle {\n    return cfg.style!;\n  },\n  /**\n   * 更新节点，包含文本\n   * @override\n   * @param  {Object} cfg 节点/边的配置项\n   * @param  {G6.Item} item 节点/边\n   */\n  update(cfg: ModelConfig, item: Item) {\n    (this as any).updateShapeStyle(cfg, item);\n    (this as any).updateLabel(cfg, item);\n  },\n  updateShapeStyle(cfg: ModelConfig, item: Item) {\n    const group = item.getContainer();\n    const shape = item.getKeyShape();\n    const shapeStyle = mix({}, shape.attr(), cfg.style);\n    for (const key in shapeStyle) {\n      const style = shapeStyle[key];\n      if (isPlainObject(style)) {\n        // 更新图元素样式，支持更新子元素\n        const subShape = group.find((element) => element.get(\"name\") === key);\n        if (subShape) {\n          subShape.attr(style);\n        }\n      } else {\n        shape.attr({\n          [key]: style,\n        });\n      }\n    }\n  },\n\n  updateLabel(cfg: ModelConfig, item: Item) {\n    const group = item.getContainer();\n    const { labelCfg: defaultLabelCfg } = this.getOptions({}) as ModelConfig;\n    const labelClassName = this.itemType + CLS_LABEL_SUFFIX;\n    const label = group.find(\n      (element) => element.get(\"className\") === labelClassName,\n    );\n    const labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n    let labelBg = group.find(\n      (element) => element.get(\"classname\") === labelBgClassname,\n    );\n    // 防止 cfg.label = \"\" 的情况\n    if (cfg.label || cfg.label === \"\") {\n      // 若传入的新配置中有 label，（用户没传入但原先有 label，label 也会有值）\n      if (!label) {\n        // 若原先不存在 label，则绘制一个新的 label\n        const newLabel = this.drawLabel!(cfg, group);\n        newLabel.set(\"className\", labelClassName);\n      } else {\n        // 若原先存在 label，则更新样式。与 getLabelStyle 不同在于这里需要融合当前 label 的样式\n        // 用于融合 style 以外的属性：position, offset, ...\n        let currentLabelCfg = {} as any;\n        if (item.getModel) {\n          currentLabelCfg = item.getModel().labelCfg;\n        }\n        // 这里不能去掉\n        const labelCfg = deepMix(\n          {},\n          defaultLabelCfg,\n          currentLabelCfg,\n          cfg.labelCfg,\n        );\n\n        // 获取位置信息\n        const calculateStyle = (this as any).getLabelStyleByPosition(\n          cfg,\n          labelCfg,\n          group,\n        );\n\n        // 取 nodeLabel，edgeLabel 的配置项\n        const cfgStyle = cfg.labelCfg ? cfg.labelCfg.style : undefined;\n        const cfgBgStyle = labelCfg.style && labelCfg.style.background;\n\n        // 需要融合当前\b label 的样式 label.attr()。不再需要全局/默认样式，因为已经应用在当前的 label 上\n        const labelStyle = { ...label.attr(), ...calculateStyle, ...cfgStyle };\n        const rotate = labelStyle.rotate;\n        delete labelStyle.rotate;\n\n        // 计算 label 的旋转矩阵\n        if (rotate) {\n          // if G 4.x define the rotateAtStart, use it directly instead of using the following codes\n          let rotateMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n          rotateMatrix = transform(rotateMatrix, [\n            [\"t\", -labelStyle.x, -labelStyle.y],\n            [\"r\", rotate],\n            [\"t\", labelStyle.x, labelStyle.y],\n          ]);\n          label.resetMatrix();\n          label.attr({ ...labelStyle, matrix: rotateMatrix });\n        } else {\n          label.resetMatrix();\n          label.attr(labelStyle);\n        }\n\n        if (!labelBg) {\n          if (labelStyle.background) {\n            labelBg = this.drawLabelBg(cfg, group, label);\n            labelBg.set(\"classname\", labelBgClassname);\n            label.toFront();\n          }\n        } else if (labelStyle.background) {\n          const calculateBgStyle = (this as any).getLabelBgStyleByPosition(\n            label,\n            cfg,\n            labelCfg,\n            group,\n          );\n          const labelBgStyle = { ...calculateBgStyle, ...cfgBgStyle };\n          labelBg.resetMatrix();\n          if (rotate) {\n            let bgRotateMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n            bgRotateMatrix = transform(bgRotateMatrix, [\n              [\"t\", -labelBgStyle.x, -labelBgStyle.y],\n              [\"r\", rotate],\n              [\"t\", labelBgStyle.x, labelBgStyle.y],\n            ]);\n            labelBgStyle.matrix = bgRotateMatrix;\n          }\n          labelBg.attr(labelBgStyle);\n        } else {\n          group.removeChild(labelBg);\n        }\n      }\n    }\n  },\n\n  // update(cfg, item) // 默认不定义\n  afterUpdate(cfg?: ModelConfig, item?: Item) {},\n  /**\n   * 设置节点的状态，主要是交互状态，业务状态请在 draw 方法中实现\n   * 单图形的节点仅考虑 selected、active 状态，有其他状态需求的用户自己复写这个方法\n   * @override\n   * @param  {String} name 状态名称\n   * @param  {String | Boolean} value 状态值\n   * @param  {G6.Item} item 节点\n   */\n  setState(name: string, value: string | boolean, item: Item) {\n    const shape: IShape = item.get(\"keyShape\");\n    if (!shape || shape.destroyed) return;\n\n    const type = item.getType();\n\n    const stateName = isBoolean(value) ? name : `${name}:${value}`;\n    const shapeStateStyle = this.getStateStyle(stateName, item);\n    const itemStateStyle = item.getStateStyle(stateName);\n    // const originStyle = item.getOriginStyle();\n\n    // 不允许设置一个不存在的状态\n    if (!itemStateStyle && !shapeStateStyle) {\n      return;\n    }\n\n    // 要设置或取消的状态的样式\n    // 当没有 state 状态时，默认使用 model.stateStyles 中的样式\n    const styles = mix({}, itemStateStyle || shapeStateStyle);\n\n    const group = item.getContainer();\n\n    // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值。使用对象检索更快\n    const keptAttrs: any = { x: 1, y: 1, cx: 1, cy: 1 };\n    if (type === \"combo\") {\n      keptAttrs.r = 1;\n      keptAttrs.width = 1;\n      keptAttrs.height = 1;\n    }\n\n    if (value) {\n      // style 为要设置的状态的样式\n      for (const key in styles) {\n        const style = styles[key];\n        if (isPlainObject(style) && !ARROWS.includes(key)) {\n          const subShape = group.find((element) => element.get(\"name\") === key);\n          if (subShape) {\n            subShape.attr(style);\n          }\n        } else {\n          // 非纯对象，则认为是设置到 keyShape 上面的\n          shape.attr({\n            [key]: style,\n          });\n        }\n      }\n    } else {\n      // 所有生效的 state 的样式\n      const enableStatesStyle = cloneBesidesImg(item.getCurrentStatesStyle());\n\n      const model = item.getModel();\n      // 原始样式\n      const originStyle = mix(\n        {},\n        model.style,\n        cloneBesidesImg(item.getOriginStyle()),\n      );\n\n      const keyShapeName = shape.get(\"name\");\n\n      // cloning  shape.attr(), keys.forEach to avoid cloning the img attr, which leads to maximum clone heap #2383\n      // const keyShapeStyles = clone(shape.attr())\n      const shapeAttrs = shape.attr();\n      const keyShapeStyles = {};\n      Object.keys(shapeAttrs).forEach((key) => {\n        if (key === \"img\") return;\n        const attr = shapeAttrs[key];\n        if (attr && typeof attr === \"object\") {\n          keyShapeStyles[key] = clone(attr);\n        } else {\n          keyShapeStyles[key] = attr;\n        }\n      });\n\n      // 已有样式 - 要取消的状态的样式\n      const filtetDisableStatesStyle: any = {};\n\n      // styles 为要取消的状态的样式\n      for (const p in styles) {\n        const style = styles[p];\n        if (isPlainObject(style) && !ARROWS.includes(p)) {\n          const subShape = group.find((element) => element.get(\"name\") === p);\n          if (subShape) {\n            const subShapeStyles = clone(subShape.attr());\n            each(style, (v, key) => {\n              if (\n                p === keyShapeName &&\n                keyShapeStyles[key] &&\n                !keptAttrs[key]\n              ) {\n                delete keyShapeStyles[key];\n                const value =\n                  originStyle[p][key] || SHAPES_DEFAULT_ATTRS[type][key];\n                shape.attr(key, value);\n              } else if (subShapeStyles[key] || subShapeStyles[key] === 0) {\n                delete subShapeStyles[key];\n                const value =\n                  originStyle[p][key] || SHAPES_DEFAULT_ATTRS[type][key];\n                subShape.attr(key, value);\n              }\n            });\n            filtetDisableStatesStyle[p] = subShapeStyles;\n          }\n        } else {\n          if (keyShapeStyles[p] && !keptAttrs[p]) {\n            delete keyShapeStyles[p];\n            const value =\n              originStyle[p] ||\n              (originStyle[keyShapeName]\n                ? originStyle[keyShapeName][p]\n                : undefined) ||\n              SHAPES_DEFAULT_ATTRS[type][p];\n            shape.attr(p, value);\n          }\n        }\n      }\n\n      // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值后，\n      // 如果 keyShape 有 name 属性，则 filtetDisableStatesStyle 的格式为 { keyShapeName: {} }\n      // 否则为普通对象\n      if (!keyShapeName) {\n        mix(filtetDisableStatesStyle, keyShapeStyles);\n      } else {\n        filtetDisableStatesStyle[keyShapeName] = keyShapeStyles;\n      }\n      for (const key in enableStatesStyle) {\n        if (keptAttrs[key]) continue;\n        const enableStyle = enableStatesStyle[key];\n        if (!isPlainObject(enableStyle) || ARROWS.includes(key)) {\n          // 把样式属性merge到keyShape中\n          if (!keyShapeName) {\n            mix(originStyle, {\n              [key]: enableStyle,\n            });\n          } else {\n            mix(originStyle[keyShapeName], {\n              [key]: enableStyle,\n            });\n            delete originStyle[key];\n          }\n          delete enableStatesStyle[key];\n        }\n      }\n\n      const originstyles = {};\n      deepMix(\n        originstyles,\n        originStyle,\n        filtetDisableStatesStyle,\n        enableStatesStyle,\n      );\n      let keyShapeSetted = false;\n\n      for (const originKey in originstyles) {\n        const style = originstyles[originKey];\n        if (isPlainObject(style) && !ARROWS.includes(originKey)) {\n          const subShape = group.find(\n            (element) => element.get(\"name\") === originKey,\n          );\n          if (subShape) {\n            if (originKey === keyShapeName) {\n              if (type === \"combo\") {\n                delete (style as any).r;\n                delete (style as any).width;\n                delete (style as any).height;\n              }\n              keyShapeSetted = true;\n            }\n            subShape.attr(style);\n          }\n        } else if (!keyShapeSetted) {\n          const value = style || SHAPES_DEFAULT_ATTRS[type][originKey];\n          // 当更新 combo 状态时，当不存在 keyShapeName 时候，则认为是设置到 keyShape 上面的\n          if (type === \"combo\") {\n            if (!keyShapeName) {\n              shape.attr({\n                [originKey]: value,\n              });\n            }\n          } else {\n            shape.attr({\n              [originKey]: value,\n            });\n          }\n        }\n      }\n    }\n  },\n\n  /**\n   * 获取不同状态下的样式\n   *\n   * @param {string} name 状态名称\n   * @param {Item} item Node或Edge的实例\n   * @return {object} 样式\n   */\n  getStateStyle(name: string, item: Item): ShapeStyle {\n    const model = item.getModel();\n    const type = item.getType();\n    const { stateStyles, style = {} } = this.getOptions(model);\n\n    const modelStateStyle = model.stateStyles\n      ? model.stateStyles[name]\n      : stateStyles && stateStyles[name];\n\n    if (type === \"combo\") {\n      return clone(modelStateStyle);\n    }\n    return mix({}, style, modelStateStyle);\n  },\n  /**\n   * 获取控制点\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 控制点的数组,如果为 null，则没有控制点\n   */\n  getControlPoints(cfg: EdgeConfig): IPoint[] | undefined {\n    return cfg.controlPoints;\n  },\n  /**\n   * 获取控制点\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 锚点的数组,如果为 null，则没有锚点\n   */\n  getAnchorPoints(cfg: ModelConfig): number[][] | undefined {\n    const { anchorPoints } = this.getOptions(cfg) as ModelConfig;\n    return anchorPoints;\n  },\n};\n"
  },
  {
    "path": "packages/core/src/element/xml.ts",
    "content": "/**\n * @fileOverview 从xml建立自定义Node，包含update\n * @author xuzhi.mxz@antfin.com\n */\n\nimport { get } from \"@antv/util\";\nimport { getTextSize } from \"../util/graphic\";\n\n/**\n * 一种更宽松的JSON 解析，如果遇到不符合规范的字段会直接转为字符串\n * @param text json 内容\n */\nfunction looseJSONParse(text) {\n  if (typeof text !== \"string\") {\n    return text;\n  }\n  const safeParse = (str) => {\n    if (typeof str !== \"string\") {\n      return str;\n    }\n    try {\n      return JSON.parse(str.trim());\n    } catch (e) {\n      return str.trim();\n    }\n  };\n  const firstAttempt = safeParse(text);\n  if (typeof firstAttempt !== \"string\") {\n    return firstAttempt;\n  }\n  const tail = (arr) => arr[arr.length - 1];\n  const str = text.trim();\n  const objectStack = [];\n  const syntaxStack = [];\n  const isLastPair = (...syntaxes) =>\n    syntaxes.some((syntax) => tail(syntaxStack) === syntax);\n  const getValueStore = () => tail(objectStack);\n  let rst = null;\n  let i = 0;\n  let temp = \"\";\n\n  while (i < str.length) {\n    const nowChar = str[i];\n    const isInString = isLastPair('\"', \"'\");\n\n    if (!isInString && !nowChar.trim()) {\n      i += 1;\n      continue;\n    }\n\n    const isLastTranslate = str[i - 1] === \"\\\\\";\n    const isInObject = isLastPair(\"}\");\n    const isInArray = isLastPair(\"]\");\n    const isWaitingValue = isLastPair(\",\");\n    const tempArr = getValueStore();\n\n    if (isInString) {\n      if (tail(syntaxStack) === nowChar && !isLastTranslate) {\n        syntaxStack.pop();\n        const value = safeParse(temp);\n        tempArr.push(value);\n        rst = value;\n        temp = \"\";\n      } else {\n        temp += nowChar;\n      }\n    } else if (isInArray && nowChar === \",\") {\n      if (temp) {\n        tempArr.push(safeParse(temp));\n        temp = \"\";\n      }\n    } else if (isInObject && nowChar === \":\") {\n      syntaxStack.push(\",\");\n      if (temp) {\n        tempArr.push(temp);\n        temp = \"\";\n      }\n    } else if (isWaitingValue && nowChar === \",\") {\n      if (temp) {\n        tempArr.push(safeParse(temp));\n        temp = \"\";\n      }\n      syntaxStack.pop();\n    } else if (nowChar === \"}\" && (isInObject || isWaitingValue)) {\n      if (temp) {\n        tempArr.push(safeParse(temp));\n        temp = \"\";\n      }\n      if (isWaitingValue) {\n        syntaxStack.pop();\n      }\n      const obj = {};\n      for (let c = 1; c < tempArr.length; c += 2) {\n        obj[tempArr[c - 1]] = tempArr[c];\n      }\n      objectStack.pop();\n      if (objectStack.length) {\n        tail(objectStack).push(obj);\n      }\n      syntaxStack.pop();\n      rst = obj;\n    } else if (nowChar === \"]\" && isInArray) {\n      if (temp) {\n        tempArr.push(safeParse(temp));\n        temp = \"\";\n      }\n      objectStack.pop();\n      if (objectStack.length) {\n        tail(objectStack).push(tempArr);\n      }\n      syntaxStack.pop();\n      rst = tempArr;\n    } else if (nowChar === \"{\") {\n      objectStack.push([]);\n      syntaxStack.push(\"}\");\n    } else if (nowChar === \"[\") {\n      objectStack.push([]);\n      syntaxStack.push(\"]\");\n    } else if (nowChar === '\"') {\n      syntaxStack.push('\"');\n    } else if (nowChar === \"'\") {\n      syntaxStack.push(\"'\");\n    } else {\n      temp += nowChar;\n    }\n\n    i += 1;\n  }\n  return rst || temp;\n}\n\n/**\n * 内部用于最终实际渲染的结构\n */\ninterface NodeInstructure {\n  type: string;\n  attrs: { [key: string]: any };\n  children: NodeInstructure[];\n  bbox: {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  };\n}\n\nconst keyConvert = (str) =>\n  str.split(\"-\").reduce((a, b) => a + b.charAt(0).toUpperCase() + b.slice(1));\n\n/**\n * 简单的一个{{}}模板渲染，不包含任何复杂语法\n * @param xml\n */\nexport const xmlDataRenderer = (xml: string) => (data) => {\n  const len = xml.length;\n  const arr = [];\n  let i = 0;\n  let tmp = \"\";\n  while (i < len) {\n    if (xml[i] === \"{\" && xml[i + 1] === \"{\") {\n      arr.push(tmp);\n      tmp = \"\";\n      i += 2;\n    } else if (xml[i] === \"}\" && xml[i + 1] === \"}\") {\n      if (arr.length) {\n        const last = arr.pop();\n        tmp = get(data, tmp, last.endsWith(\"=\") ? `\"{${tmp}}\"` : tmp);\n        arr.push(last + tmp);\n      }\n      i += 2;\n      tmp = \"\";\n    } else {\n      tmp += xml[i];\n      i += 1;\n    }\n  }\n\n  arr.push(tmp);\n  return arr\n    .map((e, index) =>\n      arr[index - 1] && arr[index - 1].endsWith(\"=\") ? `\"{${e}}\"` : e,\n    )\n    .join(\"\");\n};\n\n/**\n * 解析XML，并转化为相应的JSON结构\n * @param xml xml解析后的节点\n */\nexport function parseXML(xml: HTMLElement, cfg) {\n  let attrs = {} as { [key: string]: any };\n  const keys =\n    (xml.getAttributeNames && xml.getAttributeNames()) || ([] as string[]);\n  const children =\n    xml.children &&\n    Array.from(xml.children).map((e) => parseXML(e as HTMLElement, cfg));\n  const rst = {} as { [key: string]: any } & NodeInstructure;\n  const tagName = xml.tagName ? xml.tagName.toLowerCase() : \"group\";\n\n  if (tagName === \"text\") {\n    attrs.text = xml.innerText;\n  }\n\n  rst.type = tagName;\n\n  if (tagName === \"img\") {\n    rst.type = \"image\";\n  }\n\n  Array.from(keys).forEach((k) => {\n    const key = keyConvert(k);\n    const val = xml.getAttribute(k);\n\n    try {\n      if (key === \"style\" || key === \"attrs\") {\n        const style = looseJSONParse(val);\n        attrs = {\n          ...attrs,\n          ...style,\n        };\n      } else {\n        rst[key] = looseJSONParse(val);\n      }\n    } catch (e) {\n      if (key === \"style\") {\n        throw e;\n      }\n      rst[key] = val;\n    }\n  });\n\n  rst.attrs = attrs;\n\n  if (cfg && cfg.style && rst.name && typeof cfg.style[rst.name] === \"object\") {\n    rst.attrs = {\n      ...rst.attrs,\n      ...cfg.style[rst.name],\n    };\n  }\n\n  if (cfg && cfg.style && rst.keyshape) {\n    rst.attrs = {\n      ...rst.attrs,\n      ...cfg.style,\n    };\n  }\n\n  if (children.length) {\n    rst.children = children;\n  }\n\n  return rst;\n}\n\n/**\n * 根据偏移量和内部节点最终的bounding box来得出该shape最终的bbox\n */\nexport function getBBox(\n  node: NodeInstructure,\n  offset: { x: number; y: number },\n  chilrenBBox: { width: number; height: number },\n) {\n  const { attrs = {} } = node;\n  const bbox = {\n    x: offset.x || 0,\n    y: offset.y || 0,\n    width: chilrenBBox.width || 0,\n    height: chilrenBBox.height || 0,\n  };\n\n  let shapeHeight, shapeWidth;\n  switch (node.type) {\n    case \"maker\":\n    case \"circle\":\n      if (attrs.r) {\n        shapeWidth = 2 * attrs.r;\n        shapeHeight = 2 * attrs.r;\n      }\n      break;\n    case \"text\":\n      if (attrs.text) {\n        shapeWidth = getTextSize(attrs.text, attrs.fontSize || 12)[0];\n        shapeHeight = 16;\n        bbox.y += shapeHeight;\n        bbox.height = shapeHeight;\n        bbox.width = shapeWidth;\n        node.attrs = {\n          fontSize: 12,\n          fill: \"#000\",\n          ...attrs,\n        };\n      }\n      break;\n    default:\n      if (attrs.width) {\n        shapeWidth = attrs.width;\n      }\n      if (attrs.height) {\n        shapeHeight = attrs.height;\n      }\n  }\n  if (shapeHeight >= 0) {\n    bbox.height = shapeHeight;\n  }\n  if (shapeWidth >= 0) {\n    bbox.width = shapeWidth;\n  }\n\n  if (attrs.marginTop) {\n    bbox.y += attrs.marginTop;\n  }\n\n  if (attrs.marginLeft) {\n    bbox.x += attrs.marginLeft;\n  }\n\n  return bbox;\n}\n\n/**\n * 把从xml计算出的结构填上位置信息，补全attrs\n * @param target\n * @param lastOffset\n */\nexport function generateTarget(\n  target: NodeInstructure,\n  lastOffset = { x: 0, y: 0 },\n) {\n  const defaultBbox = {\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0,\n    ...lastOffset,\n  };\n\n  if (target.children?.length) {\n    const { attrs = {} } = target;\n    const { marginTop } = attrs;\n    const offset = { ...lastOffset };\n\n    if (marginTop) {\n      offset.y += marginTop;\n    }\n\n    for (let index = 0; index < target.children.length; index++) {\n      target.children[index].attrs.key = `${attrs.key || \"root\"} -${index} `;\n      const node = generateTarget(target.children[index], offset);\n      if (node.bbox) {\n        const { bbox } = node;\n        if (node.attrs.next === \"inline\") {\n          offset.x += node.bbox.width;\n        } else {\n          offset.y += node.bbox.height;\n        }\n        if (bbox.width + bbox.x > defaultBbox.width) {\n          defaultBbox.width = bbox.width + bbox.x;\n        }\n        if (bbox.height + bbox.y > defaultBbox.height) {\n          defaultBbox.height = bbox.height + bbox.y;\n        }\n      }\n    }\n  }\n\n  target.bbox = getBBox(target, lastOffset, defaultBbox);\n\n  target.attrs = {\n    ...target.attrs,\n    ...target.bbox,\n  };\n\n  return target;\n}\n\n/**\n * 对比前后两个最终计算出来的node，并对比出最小改动,\n * 动作： 'add' 添加节点 ｜ ’delete‘ 删除节点 ｜ ’change‘ 改变节点attrs ｜ 'restructure' 重构节点\n * @param nowTarget\n * @param formerTarget\n */\nexport function compareTwoTarget(\n  nowTarget: NodeInstructure,\n  formerTarget: NodeInstructure,\n) {\n  const { type } = nowTarget || {};\n  const { key } = formerTarget?.attrs || {};\n\n  if (key && nowTarget) {\n    nowTarget.attrs.key = key;\n  }\n\n  if (!nowTarget && formerTarget) {\n    return {\n      action: \"delete\",\n      val: formerTarget,\n      type,\n      key,\n    };\n  }\n  if (nowTarget && !formerTarget) {\n    return {\n      action: \"add\",\n      val: nowTarget,\n      type,\n    };\n  }\n  if (!nowTarget && !formerTarget) {\n    return {\n      action: \"same\",\n      type,\n    };\n  }\n  const children = [];\n\n  if (nowTarget.children?.length > 0 || formerTarget.children?.length > 0) {\n    const length = Math.max(\n      nowTarget.children?.length,\n      formerTarget.children?.length,\n    );\n    const formerChilren = formerTarget.children || [];\n    const nowChilren = nowTarget.children || [];\n\n    for (let index = 0; index < length; index += 1) {\n      children.push(compareTwoTarget(nowChilren[index], formerChilren[index]));\n    }\n  }\n\n  const formerKeys = Object.keys(formerTarget.attrs);\n  const nowKeys = Object.keys(nowTarget.attrs);\n\n  if (formerTarget.type !== nowTarget.type) {\n    return {\n      action: \"restructure\",\n      nowTarget,\n      formerTarget,\n      key,\n      children,\n    };\n  }\n\n  if (\n    formerKeys\n      .filter((e) => e !== \"children\")\n      .some(\n        (e) =>\n          nowTarget.attrs[e] !== formerTarget.attrs[e] || !nowKeys.includes(e),\n      )\n  ) {\n    return {\n      action: \"change\",\n      val: nowTarget,\n      children,\n      type,\n      key,\n    };\n  }\n\n  return {\n    action: \"same\",\n    children,\n    type,\n    key,\n  };\n}\n\n/**\n * 根据xml或者返回xml的函数构建自定义节点的结构\n * @param gen\n */\nexport function createNodeFromXML(gen: string | ((node: any) => string)) {\n  const structures = {};\n  const compileXML = (cfg) => {\n    const rawStr = typeof gen === \"function\" ? gen(cfg) : gen;\n    const target = xmlDataRenderer(rawStr)(cfg);\n    // TODO 这里需要一个patch #16\n    const xmlParser = document.createElement(\"div\");\n    xmlParser.innerHTML = target;\n    const xml = xmlParser.children[0] as HTMLElement;\n    const result = generateTarget(parseXML(xml, cfg));\n\n    xmlParser.remove();\n\n    return result;\n  };\n\n  return {\n    draw(cfg, group) {\n      const resultTarget = compileXML(cfg);\n      let keyshape = group;\n      const renderTarget = (target) => {\n        const { attrs = {}, bbox, type, children, ...rest } = target;\n        if (target.type !== \"group\") {\n          const shape = group.addShape(target.type, {\n            attrs,\n            origin: {\n              bbox,\n              type,\n              children,\n            },\n            ...rest,\n          });\n          if (target.keyshape) {\n            keyshape = shape;\n          }\n        }\n\n        if (target.children) {\n          target.children.forEach((n) => renderTarget(n));\n        }\n      };\n\n      renderTarget(resultTarget);\n\n      structures[cfg.id] = [resultTarget];\n\n      return keyshape;\n    },\n    update(cfg, node) {\n      if (!structures[cfg.id]) {\n        structures[cfg.id] = [];\n      }\n      const container = node.getContainer();\n      const children = container.get(\"children\");\n      const newTarget = compileXML(cfg);\n      const lastTarget = structures[cfg.id].pop();\n      const diffResult = compareTwoTarget(newTarget, lastTarget);\n      const addShape = (shape) => {\n        if (shape.type !== \"group\") {\n          container.addShape(shape.type, { attrs: shape.attrs });\n        }\n        if (shape.children?.length) {\n          shape.children.map((e) => addShape(e));\n        }\n      };\n      const delShape = (shape) => {\n        const targetShape = children.find(\n          (e) => e.attrs.key === shape.attrs.key,\n        );\n        if (targetShape) {\n          container.removeChild(targetShape);\n        }\n        if (shape.children?.length) {\n          shape.children.map((e) => delShape(e));\n        }\n      };\n      const updateTarget = (target) => {\n        const { key } = target;\n        if (target.type !== \"group\") {\n          const targetShape = children.find((e) => e.attrs.key === key);\n          switch (target.action) {\n            case \"change\":\n              if (targetShape) {\n                const originAttr = target.val.keyshape\n                  ? node.getOriginStyle()\n                  : {};\n                targetShape.attr({ ...originAttr, ...target.val.attrs });\n              }\n              break;\n            case \"add\":\n              addShape(target.val);\n              break;\n            case \"delete\":\n              delShape(target.val);\n              break;\n            case \"restructure\":\n              delShape(target.formerTarget);\n              addShape(target.nowTarget);\n              break;\n            default:\n              break;\n          }\n        }\n\n        if (target.children) {\n          target.children.forEach((n) => updateTarget(n));\n        }\n      };\n\n      updateTarget(diffResult);\n\n      structures[cfg.id].push(newTarget);\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n        [0.5, 1],\n        [0.5, 0],\n      ];\n    },\n  };\n}\n"
  },
  {
    "path": "packages/core/src/global.ts",
    "content": "const subjectColor = \"rgb(95, 149, 255)\";\nconst backColor = \"rgb(255, 255, 255)\";\nconst textColor = \"rgb(0, 0, 0)\";\n\nconst activeFill = \"rgb(247, 250, 255)\";\nconst nodeMainFill = \"rgb(239, 244, 255)\";\nconst comboFill = \"rgb(253, 253, 253)\";\nconst disabledFill = \"rgb(250, 250, 250)\";\n\nconst edgeMainStroke = \"rgb(224, 224, 224)\";\nconst edgeInactiveStroke = \"rgb(234, 234, 234)\";\nconst edgeDisablesStroke = \"rgb(245, 245, 245)\";\nconst inactiveStroke = \"rgb(191, 213, 255)\";\n\nconst highlightStroke = \"#4572d9\";\nconst highlightFill = \"rgb(223, 234, 255)\";\n\nconst colorSet = {\n  // for nodes\n  mainStroke: subjectColor,\n  mainFill: nodeMainFill,\n\n  activeStroke: subjectColor,\n  activeFill,\n\n  inactiveStroke,\n  inactiveFill: activeFill,\n\n  selectedStroke: subjectColor,\n  selectedFill: backColor,\n\n  highlightStroke,\n  highlightFill,\n\n  disableStroke: edgeMainStroke,\n  disableFill: disabledFill,\n\n  // for edges\n  edgeMainStroke,\n  edgeActiveStroke: subjectColor,\n  edgeInactiveStroke,\n  edgeSelectedStroke: subjectColor,\n  edgeHighlightStroke: subjectColor,\n  edgeDisableStroke: edgeDisablesStroke,\n\n  // for combos\n  comboMainStroke: edgeMainStroke,\n  comboMainFill: comboFill,\n\n  comboActiveStroke: subjectColor,\n  comboActiveFill: activeFill,\n\n  comboInactiveStroke: edgeMainStroke,\n  comboInactiveFill: comboFill,\n\n  comboSelectedStroke: subjectColor,\n  comboSelectedFill: comboFill,\n\n  comboHighlightStroke: highlightStroke, // 'rgb(53, 119, 222)', // TODO: how to generate it ???\n  comboHighlightFill: comboFill,\n\n  comboDisableStroke: edgeInactiveStroke,\n  comboDisableFill: disabledFill,\n};\n\nexport default {\n  version: \"0.0.2\",\n  rootContainerClassName: \"root-container\",\n  nodeContainerClassName: \"node-container\",\n  edgeContainerClassName: \"edge-container\",\n  comboContainerClassName: \"combo-container\",\n  delegateContainerClassName: \"delegate-container\",\n  defaultLoopPosition: \"top\",\n  nodeLabel: {\n    style: {\n      fill: \"#000\",\n      fontSize: 12,\n      textAlign: \"center\",\n      textBaseline: \"middle\",\n    },\n    offset: 4, // 节点的默认文本不居中时的偏移量\n  },\n  defaultNode: {\n    type: \"circle\",\n    style: {\n      lineWidth: 1,\n      stroke: colorSet.mainStroke,\n      fill: nodeMainFill,\n    },\n    size: 20,\n    color: colorSet.mainStroke,\n    linkPoints: {\n      size: 8,\n      lineWidth: 1,\n      fill: colorSet.activeFill,\n      stroke: colorSet.activeStroke,\n    },\n  },\n  // 节点应用状态后的样式，默认仅提供 active、selected、highlight、inactive、disable，用户可以自己扩展\n  nodeStateStyles: {\n    active: {\n      fill: colorSet.activeFill,\n      stroke: colorSet.activeStroke,\n      lineWidth: 2,\n      shadowColor: colorSet.mainStroke,\n      shadowBlur: 10,\n    },\n    selected: {\n      fill: colorSet.selectedFill,\n      stroke: colorSet.selectedStroke,\n      lineWidth: 4,\n      shadowColor: colorSet.selectedStroke,\n      shadowBlur: 10,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    highlight: {\n      fill: colorSet.highlightFill,\n      stroke: colorSet.highlightStroke,\n      lineWidth: 2,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    inactive: {\n      fill: colorSet.inactiveFill,\n      stroke: colorSet.inactiveStroke,\n      lineWidth: 1,\n    },\n    disable: {\n      fill: colorSet.disableFill,\n      stroke: colorSet.disableStroke,\n      lineWidth: 1,\n    },\n  },\n  edgeLabel: {\n    style: {\n      fill: textColor,\n      textAlign: \"center\",\n      textBaseline: \"middle\",\n      fontSize: 12,\n    },\n  },\n  defaultEdge: {\n    type: \"line\",\n    size: 1,\n    style: {\n      stroke: colorSet.edgeMainStroke,\n      lineAppendWidth: 2,\n    },\n    color: colorSet.edgeMainStroke,\n  },\n  // 边应用状态后的样式，默认仅提供 active、selected、highlight、inactive、disable，用户可以自己扩展\n  edgeStateStyles: {\n    active: {\n      stroke: colorSet.edgeActiveStroke,\n      lineWidth: 1,\n    },\n    selected: {\n      stroke: colorSet.edgeSelectedStroke,\n      lineWidth: 2,\n      shadowColor: colorSet.edgeSelectedStroke,\n      shadowBlur: 10,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    highlight: {\n      stroke: colorSet.edgeHighlightStroke,\n      lineWidth: 2,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    inactive: {\n      stroke: colorSet.edgeInactiveStroke,\n      lineWidth: 1,\n    },\n    disable: {\n      stroke: colorSet.edgeDisableStroke,\n      lineWidth: 1,\n    },\n  },\n  comboLabel: {\n    style: {\n      fill: textColor,\n      // textAlign: 'center',\n      textBaseline: \"middle\",\n      fontSize: 12,\n    },\n    refY: 10, // Combo 的默认文本不居中时的偏移量\n    refX: 10, // Combo 的默认文本不居中时的偏移量\n  },\n  defaultCombo: {\n    type: \"circle\",\n    style: {\n      fill: colorSet.comboMainFill,\n      lineWidth: 1,\n      stroke: colorSet.comboMainStroke,\n      r: 5,\n      width: 20,\n      height: 10,\n    },\n    size: [20, 5],\n    color: colorSet.comboMainStroke,\n    padding: [25, 20, 15, 20],\n  },\n  // combo 应用状态后的样式，默认仅提供 active、selected、highlight、inactive、disable，用户可以自己扩展\n  comboStateStyles: {\n    active: {\n      stroke: colorSet.comboActiveStroke,\n      lineWidth: 1,\n      fill: colorSet.comboActiveFill,\n    },\n    selected: {\n      stroke: colorSet.comboSelectedStroke,\n      lineWidth: 2,\n      fill: colorSet.comboSelectedFill,\n      shadowColor: colorSet.comboSelectedStroke,\n      shadowBlur: 10,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    highlight: {\n      stroke: colorSet.comboHighlightStroke,\n      lineWidth: 2,\n      fill: colorSet.comboHighlightFill,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    inactive: {\n      stroke: colorSet.comboInactiveStroke,\n      fill: colorSet.comboInactiveFill,\n      lineWidth: 1,\n    },\n    disable: {\n      stroke: colorSet.comboDisableStroke,\n      fill: colorSet.comboDisableFill,\n      lineWidth: 1,\n    },\n  },\n  delegateStyle: {\n    fill: \"#F3F9FF\",\n    fillOpacity: 0.5,\n    stroke: \"#1890FF\",\n    strokeOpacity: 0.9,\n    lineDash: [5, 5],\n  },\n};\n"
  },
  {
    "path": "packages/core/src/graph/controller/event.ts",
    "content": "import { IAbstractGraph } from \"../../interface/graph\";\n\nexport default abstract class EventController {\n  protected graph: IAbstractGraph;\n\n  public destroyed: boolean;\n\n  constructor(graph: IAbstractGraph) {\n    this.graph = graph;\n    this.destroyed = false;\n    this.initEvents();\n  }\n\n  // 初始化 G6 中的事件\n  protected abstract initEvents(): void;\n\n  public abstract destroy(): void;\n}\n"
  },
  {
    "path": "packages/core/src/graph/controller/index.ts",
    "content": "export { default as ModeController } from \"./mode\";\nexport { default as ViewController } from \"./view\";\nexport { default as ItemController } from \"./item\";\nexport { default as StateController } from \"./state\";\n"
  },
  {
    "path": "packages/core/src/graph/controller/item.ts",
    "content": "import { IGroup } from \"@antv/g-base\";\nimport {\n  clone,\n  deepMix,\n  each,\n  isArray,\n  isObject,\n  isString,\n  upperFirst,\n} from \"@antv/util\";\nimport Edge from \"../../item/edge\";\nimport Node from \"../../item/node\";\nimport Combo from \"../../item/combo\";\nimport {\n  EdgeConfig,\n  Item,\n  ITEM_TYPE,\n  ModelConfig,\n  NodeConfig,\n  NodeMap,\n  ComboTree,\n  ComboConfig,\n} from \"../../types\";\nimport { IAbstractGraph } from \"../../interface/graph\";\nimport { IEdge, INode, ICombo } from \"../../interface/item\";\nimport {\n  traverseTreeUp,\n  traverseTree,\n  getComboBBox,\n  shouldRefreshEdge,\n} from \"../../util/graphic\";\n\nconst NODE = \"node\";\nconst EDGE = \"edge\";\nconst VEDGE = \"vedge\";\nconst COMBO = \"combo\";\nconst CFG_PREFIX = \"default\";\nconst MAPPER_SUFFIX = \"Mapper\";\nconst STATE_SUFFIX = \"stateStyles\";\n\ntype Id = string | Item | undefined;\n\nexport default class ItemController {\n  private graph: IAbstractGraph;\n\n  public destroyed: boolean;\n\n  constructor(graph: IAbstractGraph) {\n    this.graph = graph;\n    this.destroyed = false;\n  }\n\n  /**\n   * 增加 Item 实例\n   *\n   * @param {ITEM_TYPE} type 实例类型，node 或 edge\n   * @param {(NodeConfig & EdgeConfig)} model 数据模型\n   * @returns {(Item)}\n   * @memberof ItemController\n   */\n  public addItem<T extends Item>(type: ITEM_TYPE, model: ModelConfig) {\n    const { graph } = this;\n    const vType = type === VEDGE ? EDGE : type;\n    const parent: IGroup = graph.get(`${vType}Group`) || graph.get(\"group\");\n    const upperType = upperFirst(vType);\n\n    let item: Item | null = null;\n    // 获取 this.get('styles') 中的值\n    let styles = graph.get(vType + upperFirst(STATE_SUFFIX)) || {};\n    const defaultModel = graph.get(CFG_PREFIX + upperType);\n\n    if (model[STATE_SUFFIX]) {\n      // 设置 this.get('styles') 中的值\n      styles = model[STATE_SUFFIX];\n    }\n\n    if (defaultModel) {\n      // 很多布局会直接修改原数据模型，所以不能用 merge 的形式，逐个写入原 model 中\n      each(defaultModel, (val, cfg) => {\n        if (isObject(val) && !isArray(val)) {\n          model[cfg] = deepMix({}, val, model[cfg]);\n        } else if (isArray(val)) {\n          model[cfg] = model[cfg] || clone(defaultModel[cfg]);\n        } else {\n          model[cfg] = model[cfg] || defaultModel[cfg];\n        }\n      });\n    }\n\n    const mapper = graph.get(vType + MAPPER_SUFFIX);\n    if (mapper) {\n      const mappedModel = mapper(model);\n      if (mappedModel[STATE_SUFFIX]) {\n        // 设置 this.get('styles') 中的值\n        styles = mappedModel[STATE_SUFFIX];\n        delete mappedModel[STATE_SUFFIX];\n      }\n\n      // 如果配置了 defaultEdge 或 defaultNode，则将默认配置的数据也合并进去\n\n      each(mappedModel, (val, cfg) => {\n        if (isObject(val) && !isArray(val)) {\n          model[cfg] = deepMix({}, model[cfg], val);\n        } else {\n          model[cfg] = mappedModel[cfg] || model[cfg];\n        }\n      });\n    }\n\n    graph.emit(\"beforeadditem\", { type, model });\n\n    if (type === EDGE || type === VEDGE) {\n      let source: Id;\n      let target: Id;\n      source = (model as EdgeConfig).source; // eslint-disable-line prefer-destructuring\n      target = (model as EdgeConfig).target; // eslint-disable-line prefer-destructuring\n\n      if (source && isString(source)) {\n        source = graph.findById(source);\n      }\n      if (target && isString(target)) {\n        target = graph.findById(target);\n      }\n\n      if (!source || !target) {\n        console.warn(\n          `The source or target node of edge ${model.id} does not exist!`,\n        );\n        return;\n      }\n\n      if ((source as Item).getType && (source as Item).getType() === \"combo\") {\n        model.isComboEdge = true;\n        // graph.updateCombo(source as ICombo);\n      }\n      if ((target as Item).getType && (target as Item).getType() === \"combo\") {\n        model.isComboEdge = true;\n        // graph.updateCombo(target as ICombo);\n      }\n\n      item = new Edge({\n        model,\n        source,\n        target,\n        styles,\n        linkCenter: graph.get(\"linkCenter\"),\n        group: parent.addGroup(),\n      });\n    } else if (type === NODE) {\n      item = new Node({\n        model,\n        styles,\n        group: parent.addGroup(),\n      });\n    } else if (type === COMBO) {\n      const children: ComboTree[] = (model as ComboConfig).children;\n\n      const comboBBox = getComboBBox(children, graph);\n      if (!isNaN(comboBBox.x)) model.x = comboBBox.x;\n      else if (isNaN(model.x)) model.x = Math.random() * 100;\n      if (!isNaN(comboBBox.y)) model.y = comboBBox.y;\n      else if (isNaN(model.y)) model.y = Math.random() * 100;\n\n      const comboGroup = parent.addGroup();\n      comboGroup.setZIndex((model as ComboConfig).depth as number);\n      item = new Combo({\n        model,\n        styles,\n        bbox: model.collapsed ? getComboBBox([], graph) : comboBBox,\n        group: comboGroup,\n      });\n\n      const comboModel = item.getModel();\n\n      (children || []).forEach((child) => {\n        const childItem = graph.findById(child.id) as ICombo | INode;\n        (item as ICombo).addChild(childItem);\n        child.depth = (comboModel.depth as number) + 2;\n      });\n\n      // collapse the combo if the collapsed is true in the model\n      if (model.collapsed) {\n        setTimeout(() => {\n          graph.collapseCombo(item as ICombo);\n        }, 16);\n      }\n    }\n\n    if (item) {\n      graph.get(`${type}s`).push(item);\n      graph.get(\"itemMap\")[item.get(\"id\")] = item;\n      graph.emit(\"afteradditem\", { item, model });\n      // eslint-disable-next-line consistent-return\n      return item as T;\n    }\n  }\n\n  /**\n   * 更新节点或边\n   *\n   * @param {Item} item ID 或 实例\n   * @param {(EdgeConfig | Partial<NodeConfig>)} cfg 数据模型\n   * @returns\n   * @memberof ItemController\n   */\n  public updateItem(\n    item: Item | string,\n    cfg: EdgeConfig | Partial<NodeConfig>,\n  ) {\n    const { graph } = this;\n\n    if (isString(item)) {\n      item = graph.findById(item) as Item;\n    }\n\n    if (!item || item.destroyed) {\n      return;\n    }\n\n    // 更新的 item 的类型\n    let type = \"\";\n    if (item.getType) type = item.getType();\n\n    const mapper = graph.get(type + MAPPER_SUFFIX);\n    const model = item.getModel();\n\n    const isOnlyMove = item.isOnlyMove(cfg);\n\n    if (mapper) {\n      const result: ModelConfig = deepMix({}, model, cfg);\n      const mappedModel: ModelConfig = mapper(result);\n      // 将 update 时候用户传入的参数与mapperModel做deepMix，以便复用之前设置的参数值\n      const newModel: ModelConfig = deepMix({}, model, mappedModel, cfg);\n\n      if (mappedModel[STATE_SUFFIX]) {\n        item.set(\"styles\", newModel[STATE_SUFFIX]);\n        delete newModel[STATE_SUFFIX];\n      }\n\n      each(newModel, (val, key) => {\n        cfg[key] = val;\n      });\n    } else {\n      // merge update传进来的对象参数，model中没有的数据不做处理，对象和字符串值也不做处理，直接替换原来的\n      each(cfg, (val, key) => {\n        if (model[key]) {\n          if (isObject(val) && !isArray(val)) {\n            cfg[key] = { ...(model[key] as Object), ...(cfg[key] as Object) };\n          }\n        }\n      });\n    }\n\n    // emit beforeupdateitem 事件\n    graph.emit(\"beforeupdateitem\", { item, cfg });\n\n    if (type === EDGE) {\n      // 若是边要更新source || target, 为了不影响示例内部model，并且重新计算startPoint和endPoint，手动设置\n      if (cfg.source) {\n        let source: INode = cfg.source as INode;\n        if (isString(source)) {\n          source = graph.findById(source) as INode;\n        }\n        (item as IEdge).setSource(source);\n      }\n      if (cfg.target) {\n        let target: INode = cfg.target as INode;\n        if (isString(target)) {\n          target = graph.findById(target) as INode;\n        }\n        (item as IEdge).setTarget(target);\n      }\n      item.update(cfg);\n    }\n\n    // item.update(cfg);\n\n    if (type === NODE || type === COMBO) {\n      item.update(cfg, isOnlyMove);\n      const edges: IEdge[] = (item as INode).getEdges();\n      const refreshEdge = shouldRefreshEdge(cfg)!;\n      if (refreshEdge && type === NODE)\n        each(edges, (edge: IEdge) => {\n          edge.refresh();\n        });\n      else if (refreshEdge && type === COMBO) {\n        const shapeFactory = item.get(\"shapeFactory\");\n        const shapeType = (model.type as string) || \"circle\";\n        const comboAnimate =\n          model.animate === undefined || cfg.animate === undefined\n            ? shapeFactory[shapeType]?.options?.animate\n            : model.animate || cfg.animate;\n        if (comboAnimate) {\n          setTimeout(() => {\n            if (!item || (item as ICombo).destroyed) return;\n            const keyShape = (item as ICombo).getKeyShape();\n            if (!keyShape || keyShape.destroyed) return;\n            each(edges, (edge: IEdge) => {\n              if (edge && !edge.destroyed) edge.refresh();\n            });\n          }, 201);\n        } else {\n          each(edges, (edge: IEdge) => {\n            edge.refresh();\n          });\n        }\n      }\n    }\n    graph.emit(\"afterupdateitem\", { item, cfg });\n  }\n\n  /**\n   * 根据 combo 的子元素更新 combo 的位置及大小\n   *\n   * @param {ICombo} combo ID 或 实例\n   * @returns\n   * @memberof ItemController\n   */\n  public updateCombo(combo: ICombo | string, children: ComboTree[]) {\n    const { graph } = this;\n\n    if (isString(combo)) {\n      combo = graph.findById(combo) as ICombo;\n    }\n\n    if (!combo || combo.destroyed) {\n      return;\n    }\n    const model = combo.getModel();\n    const comboBBox = getComboBBox(model.collapsed ? [] : children, graph);\n\n    combo.set(\"bbox\", comboBBox);\n    combo.update({\n      x: comboBBox.x,\n      y: comboBBox.y,\n    });\n\n    const shapeFactory = combo.get(\"shapeFactory\");\n    const shapeType = (model.type as string) || \"circle\";\n    const comboAnimate =\n      model.animate === undefined\n        ? shapeFactory[shapeType]?.options?.animate\n        : model.animate;\n    if (comboAnimate) {\n      setTimeout(() => {\n        if (!combo || (combo as ICombo).destroyed) return;\n        const keyShape = (combo as ICombo).getKeyShape();\n        if (!keyShape || keyShape.destroyed) return;\n        (combo as ICombo).getShapeCfg(model); // 更新 combo 缓存的 size\n        this.updateComboEdges(combo as ICombo);\n      }, 201);\n    } else {\n      this.updateComboEdges(combo as ICombo);\n    }\n  }\n\n  private updateComboEdges(combo: ICombo) {\n    const combEdges = combo.getEdges() || [];\n    for (let i = 0; i < combEdges.length; i++) {\n      const edge = combEdges[i];\n      if (edge && !edge.destroyed) {\n        const edgeSF = edge.get(\"shapeFactory\");\n        const edgeCfg = edge.getShapeCfg(edge.getModel());\n        const edgeGroup = edge.getContainer();\n        edgeGroup.clear();\n        const keyShape = edgeSF.draw(edgeCfg.type, edgeCfg, edgeGroup);\n        edge.set(\"keyShape\", keyShape);\n        keyShape.set(\"isKeyShape\", true);\n        keyShape.set(\"draggable\", true);\n        edge.setOriginStyle();\n      }\n    }\n  }\n\n  /**\n   * 收起 combo，隐藏相关元素\n   */\n  public collapseCombo(combo: ICombo | string) {\n    const graph = this.graph;\n    if (isString(combo)) {\n      combo = graph.findById(combo) as ICombo;\n    }\n    const children = (combo as ICombo).getChildren();\n    children.nodes.forEach((node) => {\n      graph.hideItem(node);\n    });\n    children.combos.forEach((c) => {\n      graph.hideItem(c);\n    });\n  }\n\n  /**\n   * 展开 combo，相关元素出现\n   * 若子 combo 原先是收起状态，则保持它的收起状态\n   */\n  public expandCombo(combo: ICombo | string) {\n    const graph = this.graph;\n    if (isString(combo)) {\n      combo = graph.findById(combo) as ICombo;\n    }\n    const children = (combo as ICombo).getChildren();\n    children.nodes.forEach((node) => {\n      graph.showItem(node);\n    });\n    children.combos.forEach((c) => {\n      if (c.getModel().collapsed) {\n        c.show();\n      } else {\n        graph.showItem(c);\n      }\n    });\n  }\n\n  /**\n   * 删除指定的节点或边\n   *\n   * @param {Item} item item ID 或实例\n   * @returns {void}\n   * @memberof ItemController\n   */\n  public removeItem(item: Item | string): void {\n    const { graph } = this;\n    if (isString(item)) {\n      item = graph.findById(item);\n    }\n\n    if (!item || item.destroyed) {\n      return;\n    }\n\n    const itemModel = clone(item.getModel());\n    graph.emit(\"beforeremoveitem\", { item: itemModel });\n\n    let type = \"\";\n    if (item.getType) type = item.getType();\n    const items = graph.get(`${type}s`);\n    const index = items.indexOf(item);\n    if (index > -1) items.splice(index, 1);\n    if (type === EDGE) {\n      const vitems = graph.get(`v${type}s`);\n      const vindex = vitems.indexOf(item);\n      if (vindex > -1) vitems.splice(vindex, 1);\n    }\n\n    const itemId: string = item.get(\"id\");\n    const itemMap: NodeMap = graph.get(\"itemMap\");\n    delete itemMap[itemId];\n\n    const comboTrees = graph.get(\"comboTrees\");\n    const id = item.get(\"id\");\n    if (type === NODE) {\n      const comboId = item.getModel().comboId as string;\n      if (comboTrees && comboId) {\n        let brothers = comboTrees;\n        let found = false; // the flag to terminate the forEach circulation\n        // remove the node from the children array of its parent fromt he tree\n        comboTrees.forEach((ctree) => {\n          if (found) return;\n          traverseTree<ComboTree>(ctree, (combo) => {\n            if (combo.id === id && brothers) {\n              const bidx = brothers.indexOf(combo);\n              brothers.splice(bidx, 1);\n              found = true;\n              return false; // terminate the traverse\n            }\n            brothers = combo.children;\n            return true;\n          });\n        });\n      }\n      // 若移除的是节点，需要将与之相连的边一同删除\n      const edges = (item as INode).getEdges();\n      for (let i = edges.length - 1; i >= 0; i--) {\n        graph.removeItem(edges[i], false);\n      }\n      if (comboId) graph.updateCombo(comboId);\n    } else if (type === COMBO) {\n      const parentId = item.getModel().parentId as string;\n      let comboInTree;\n      // find the subtree rooted at the item to be removed\n      let found = false; // the flag to terminate the forEach circulation\n      (comboTrees || []).forEach((ctree) => {\n        if (found) return;\n        traverseTree<ComboTree>(ctree, (combo) => {\n          if (combo.id === id) {\n            comboInTree = combo;\n            found = true;\n            return false; // terminate the traverse\n          }\n          return true;\n        });\n      });\n      comboInTree.removed = true;\n      if (comboInTree && comboInTree.children) {\n        comboInTree.children.forEach((child) => {\n          this.removeItem(child.id);\n        });\n      }\n      // 若移除的是 combo，需要将与之相连的边一同删除\n      const edges = (item as ICombo).getEdges();\n      for (let i = edges.length; i >= 0; i--) {\n        graph.removeItem(edges[i], false);\n      }\n      if (parentId) graph.updateCombo(parentId);\n    }\n\n    item.destroy();\n    graph.emit(\"afterremoveitem\", { item: itemModel });\n  }\n\n  /**\n   * 更新 item 状态\n   *\n   * @param {Item} item Item 实例\n   * @param {string} state 状态名称\n   * @param {boolean} value 是否启用状态或状态值\n   * @returns {void}\n   * @memberof ItemController\n   */\n  public setItemState(\n    item: Item,\n    state: string,\n    value: string | boolean,\n  ): void {\n    const { graph } = this;\n\n    let stateName = state;\n    if (isString(value)) {\n      stateName = `${state}:${value}`;\n    }\n\n    // 已经存在要设置的 state，或不存在 state 的样式为 undefined\n    if (\n      (item.hasState(stateName) === value && value) || // 当该状态已经存在且现在需要设置为 true 时，不需要继续。当该状态不存在，且设置为 false 时，需要继续\n      (isString(value) && item.hasState(stateName))\n    ) {\n      // 当该状态 value 是字符串，且已经存在该状态，不需要继续\n      return;\n    }\n\n    graph.emit(\"beforeitemstatechange\", {\n      item,\n      state: stateName,\n      enabled: value,\n    });\n\n    item.setState(state, value);\n\n    graph.autoPaint();\n    graph.emit(\"afteritemstatechange\", {\n      item,\n      state: stateName,\n      enabled: value,\n    });\n  }\n\n  /**\n   * 将指定状态的优先级提升为最高优先级\n   * @param {Item} item 元素id或元素实例\n   * @param state 状态名称\n   */\n  public priorityState(item: Item | string, state: string): void {\n    const { graph } = this;\n\n    let currentItem = item;\n    if (isString(item)) {\n      currentItem = graph.findById(item);\n    }\n    // 先取消已有的 state\n    this.setItemState(currentItem as Item, state, false);\n\n    // 再设置state，则此时该优先级为最高\n    this.setItemState(currentItem as Item, state, true);\n  }\n\n  /**\n   * 清除所有指定的状态\n   *\n   * @param {Item} item Item 实例\n   * @param {string[]} states 状态名称集合\n   * @memberof ItemController\n   */\n  public clearItemStates(\n    item: Item | string,\n    states?: string | string[],\n  ): void {\n    const { graph } = this;\n\n    if (isString(item)) {\n      item = graph.findById(item);\n    }\n\n    graph.emit(\"beforeitemstatesclear\", { item, states });\n\n    item.clearStates(states);\n\n    graph.emit(\"afteritemstatesclear\", { item, states });\n  }\n\n  /**\n   * 刷新指定的 Item\n   *\n   * @param {Item} item Item ID 或 实例\n   * @memberof ItemController\n   */\n  public refreshItem(item: Item | string): void {\n    const { graph } = this;\n\n    if (isString(item)) {\n      item = graph.findById(item);\n    }\n\n    graph.emit(\"beforeitemrefresh\", { item });\n\n    // 调用 Item 的 refresh 方法，实现刷新功能\n    item.refresh();\n\n    graph.emit(\"afteritemrefresh\", { item });\n  }\n\n  /**\n   * 根据 graph 上用 combos 数据生成的 comboTree 来增加所有 combos\n   *\n   * @param {ComboTree[]} comboTrees graph 上用 combos 数据生成的 comboTree\n   * @param {ComboConfig[]} comboModels combos 数据\n   * @memberof ItemController\n   */\n  public addCombos(comboTrees: ComboTree[], comboModels: ComboConfig[]) {\n    const { graph } = this;\n    (comboTrees || []).forEach((ctree: ComboTree) => {\n      traverseTreeUp<ComboTree>(ctree, (child) => {\n        let comboModel;\n        comboModels.forEach((model) => {\n          if (model.id === child.id) {\n            model.children = child.children;\n            model.depth = child.depth;\n            comboModel = model;\n          }\n        });\n        if (comboModel) {\n          this.addItem(\"combo\", comboModel);\n        }\n        return true;\n      });\n    });\n    const comboGroup = graph.get(\"comboGroup\");\n    if (comboGroup) comboGroup.sort();\n  }\n\n  /**\n   * 改变Item的显示状态\n   *\n   * @param {Item} item Item ID 或 实例\n   * @param {boolean} visible 是否显示\n   * @memberof ItemController\n   */\n  public changeItemVisibility(item: Item | string, visible: boolean): Item {\n    const { graph } = this;\n\n    if (isString(item)) {\n      item = graph.findById(item);\n    }\n\n    if (!item) {\n      console.warn(\"The item to be shown or hidden does not exist!\");\n      return;\n    }\n\n    graph.emit(\"beforeitemvisibilitychange\", { item, visible });\n\n    item.changeVisibility(visible);\n\n    if (item.getType && item.getType() === NODE) {\n      const edges = (item as INode).getEdges();\n      each(edges, (edge: IEdge) => {\n        // 若隐藏节点，则将与之关联的边也隐藏\n        // 若显示节点，则将与之关联的边也显示，但是需要判断边两端的节点都是可见的\n        if (\n          visible &&\n          !(edge.get(\"source\").isVisible() && edge.get(\"target\").isVisible())\n        ) {\n          return;\n        }\n\n        this.changeItemVisibility(edge, visible);\n      });\n    } else if (item.getType && item.getType() === COMBO) {\n      const comboTrees = graph.get(\"comboTrees\");\n      const id = item.get(\"id\");\n      let children = [];\n      let found = false; // flag the terminate the forEach\n      (comboTrees || []).forEach((ctree) => {\n        if (found) return;\n        if (!ctree.children || ctree.children.length === 0) return;\n        traverseTree<ComboTree>(ctree, (combo) => {\n          if (combo.id === id) {\n            children = combo.children;\n            found = true;\n            return false; // terminate the traverse\n          }\n          return true;\n        });\n      });\n      if (children && (!visible || (visible && !item.getModel().collapsed))) {\n        children.forEach((child) => {\n          const childItem = graph.findById(child.id);\n          this.changeItemVisibility(childItem, visible);\n        });\n      }\n\n      const edges = (item as INode).getEdges();\n      each(edges, (edge: IEdge) => {\n        // 若隐藏 combo，则将与 combo 本身关联的边也隐藏\n        // 若显示 combo，则将与 combo 本身关联的边也显示，但是需要判断边两端的节点都是可见的\n        if (\n          visible &&\n          !(edge.get(\"source\").isVisible() && edge.get(\"target\").isVisible())\n        ) {\n          return;\n        }\n        this.changeItemVisibility(edge, visible);\n      });\n    }\n    graph.emit(\"afteritemvisibilitychange\", { item, visible });\n    return item;\n  }\n\n  public destroy() {\n    (this.graph as IAbstractGraph | null) = null;\n    this.destroyed = true;\n  }\n}\n"
  },
  {
    "path": "packages/core/src/graph/controller/layout.ts",
    "content": "import { isFunction, groupBy } from \"@antv/util\";\nimport { isNaN, calculationItemsBBox } from \"../../util/base\";\nimport { GraphData } from \"../../types\";\nimport { IAbstractGraph } from \"../../interface/graph\";\n\nexport default abstract class LayoutController {\n  public graph: IAbstractGraph;\n\n  public destroyed: boolean;\n\n  protected layoutCfg;\n\n  protected layoutType: string | string[];\n\n  protected layoutMethods;\n\n  protected data;\n\n  constructor(graph: IAbstractGraph) {\n    this.graph = graph;\n    this.layoutCfg = graph.get(\"layout\") || {};\n    this.layoutType = this.getLayoutType();\n    this.layoutMethods = [];\n    this.initLayout();\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  protected initLayout() {\n    // no data before rendering\n  }\n\n  public getLayoutType(): string | string[] {\n    return this.getLayoutCfgType(this.layoutCfg);\n  }\n\n  protected getLayoutCfgType(layoutCfg): string | string[] {\n    const type = layoutCfg.type;\n    // type should be top priority\n    if (type) {\n      return type;\n    }\n\n    const pipes = layoutCfg.pipes;\n    if (Array.isArray(pipes)) {\n      return pipes.map((pipe) => pipe?.type || \"\");\n    }\n\n    return null;\n  }\n\n  protected isLayoutTypeSame(cfg): boolean {\n    const current = this.getLayoutCfgType(cfg);\n    // already has pipes\n    if (Array.isArray(this.layoutType)) {\n      return this.layoutType.every((type, index) => type === current[index]);\n    }\n\n    return cfg?.type === this.layoutType;\n  }\n\n  /**\n   * @param {function} success callback\n   * @return {boolean} 是否使用web worker布局\n   */\n  public abstract layout(success?: () => void): boolean;\n\n  // 绘制\n  public refreshLayout() {\n    const { graph } = this;\n    if (!graph) return;\n    if (graph.get(\"animate\")) {\n      graph.positionsAnimate();\n    } else {\n      graph.refreshPositions();\n    }\n  }\n\n  // 更新布局参数\n  public abstract updateLayoutCfg(cfg);\n\n  // 更换布局\n  public changeLayout(cfg) {\n    this.layoutCfg = cfg;\n\n    this.destoryLayoutMethods();\n    this.layout();\n  }\n\n  // 更换数据\n  public changeData() {\n    this.destoryLayoutMethods();\n    this.layout();\n  }\n\n  public destoryLayoutMethods() {\n    const { layoutMethods } = this;\n    layoutMethods?.forEach((layoutMethod) => {\n      layoutMethod.destroy();\n    });\n    this.layoutMethods = [];\n  }\n\n  // 销毁布局，不能使用 this.destroy，因为 controller 还需要被使用，只是把布局算法销毁\n  public destroyLayout() {\n    const { graph } = this;\n    this.destoryLayoutMethods();\n\n    graph.set(\"layout\", undefined);\n    this.layoutCfg = undefined;\n    this.layoutType = undefined;\n    this.layoutMethods = undefined;\n  }\n\n  // 从 this.graph 获取数据\n  public setDataFromGraph(): GraphData {\n    const nodes = [];\n    const hiddenNodes = [];\n    const edges = [];\n    const hiddenEdges = [];\n    const comboEdges = [];\n    const combos = [];\n    const hiddenCombos = [];\n    const nodeItems = this.graph.getNodes();\n    const edgeItems = this.graph.getEdges();\n    const comboItems = this.graph.getCombos();\n    const nodeLength = nodeItems.length;\n    for (let i = 0; i < nodeLength; i++) {\n      const nodeItem = nodeItems[i];\n      if (!nodeItem || nodeItem.destroyed) continue;\n      const model = nodeItem.getModel();\n      if (!nodeItem.isVisible()) {\n        hiddenNodes.push(model);\n        continue;\n      }\n      nodes.push(model);\n    }\n\n    const edgeLength = edgeItems.length;\n    for (let i = 0; i < edgeLength; i++) {\n      const edgeItem = edgeItems[i];\n      if (!edgeItem || edgeItem.destroyed) continue;\n      const model = edgeItem.getModel();\n      if (!edgeItem.isVisible()) {\n        hiddenEdges.push(model);\n        continue;\n      }\n      if (!model.isComboEdge) edges.push(model);\n      else comboEdges.push(model);\n    }\n\n    const comboLength = comboItems.length;\n    for (let i = 0; i < comboLength; i++) {\n      const comboItem = comboItems[i];\n      if (comboItem.destroyed) continue;\n      const model = comboItem.getModel();\n      if (!comboItem.isVisible()) {\n        hiddenEdges.push(model);\n        continue;\n      }\n      combos.push(model);\n    }\n    return {\n      nodes,\n      hiddenNodes,\n      edges,\n      hiddenEdges,\n      combos,\n      hiddenCombos,\n      comboEdges,\n    } as GraphData;\n  }\n\n  protected reLayoutMethod(layoutMethod, layoutCfg): Promise<void> {\n    return new Promise((reslove, reject) => {\n      const { graph } = this;\n      const layoutType = layoutCfg?.type;\n\n      // 每个布局方法都需要注册\n      layoutCfg.onLayoutEnd = () => {\n        graph.emit(\"aftersublayout\", { type: layoutType });\n        reslove();\n      };\n\n      layoutMethod.init(this.data);\n      if (layoutType === \"force\") {\n        layoutMethod.ticking = false;\n        layoutMethod.forceSimulation.stop();\n      }\n\n      graph.emit(\"beforesublayout\", { type: layoutType });\n      layoutMethod.execute();\n      if (layoutMethod.isCustomLayout && layoutCfg.onLayoutEnd)\n        layoutCfg.onLayoutEnd();\n    });\n  }\n\n  // 重新布局\n  public relayout(reloadData?: boolean) {\n    const { graph, layoutMethods, layoutCfg } = this;\n\n    if (reloadData) {\n      this.data = this.setDataFromGraph();\n      const { nodes } = this.data;\n      if (!nodes) {\n        return false;\n      }\n      this.initPositions(layoutCfg.center, nodes);\n    }\n\n    graph.emit(\"beforelayout\");\n\n    let start = Promise.resolve();\n    layoutMethods?.forEach((layoutMethod: any, index: number) => {\n      const currentCfg = layoutCfg[index];\n      start = start.then(() => this.reLayoutMethod(layoutMethod, currentCfg));\n    });\n\n    start\n      .then(() => {\n        if (layoutCfg.onAllLayoutEnd) layoutCfg.onAllLayoutEnd();\n      })\n      .catch((error) => {\n        console.warn(\"relayout failed\", error);\n      });\n  }\n\n  // 筛选参与布局的nodes和edges\n  protected filterLayoutData(data, cfg) {\n    const { nodes, edges, ...rest } = data;\n    if (!nodes) {\n      return data;\n    }\n\n    let nodesFilter;\n    let edegsFilter;\n    if (isFunction(cfg?.nodesFilter)) {\n      nodesFilter = cfg.nodesFilter;\n    } else {\n      nodesFilter = () => true;\n    }\n\n    if (isFunction(cfg?.edgesFilter)) {\n      edegsFilter = cfg.edgesFilter;\n    } else {\n      const nodesMap = nodes.reduce((acc, cur) => {\n        acc[cur.id] = true;\n        return acc;\n      }, {});\n      edegsFilter = (edge) => {\n        return nodesMap[edge.source] && nodesMap[edge.target];\n      };\n    }\n\n    return {\n      nodes: nodes.filter(nodesFilter),\n      edges: edges.filter(edegsFilter),\n      ...rest,\n    };\n  }\n\n  protected getLayoutBBox(nodes) {\n    const { graph } = this;\n    const graphGroupNodes = groupBy(graph.getNodes(), (n: any) => {\n      return n.getModel().layoutOrder;\n    });\n    const layoutNodes = Object.values(graphGroupNodes).map((value) => {\n      const bbox: any = calculationItemsBBox(value as any);\n      bbox.size = [bbox.width, bbox.height];\n      return bbox;\n    });\n\n    const groupNodes = Object.values(groupBy(nodes, \"layoutOrder\"));\n    return {\n      groupNodes,\n      layoutNodes,\n    };\n  }\n\n  // 控制布局动画\n  // eslint-disable-next-line class-methods-use-this\n  public layoutAnimate() {}\n\n  // 将当前节点的平均中心移动到原点\n  public moveToZero() {\n    const { graph } = this;\n\n    const data = graph.get(\"data\");\n    const { nodes } = data;\n    if (nodes[0].x === undefined || nodes[0].x === null || isNaN(nodes[0].x)) {\n      return;\n    }\n    const meanCenter = [0, 0];\n    const nodeLength = nodes.length;\n    for (let i = 0; i < nodeLength; i++) {\n      const node = nodes[i];\n      meanCenter[0] += node.x;\n      meanCenter[1] += node.y;\n    }\n\n    meanCenter[0] /= nodes.length;\n    meanCenter[1] /= nodes.length;\n\n    for (let i = 0; i < nodeLength; i++) {\n      const node = nodes[i];\n      node.x -= meanCenter[0];\n      node.y -= meanCenter[1];\n    }\n  }\n\n  // 初始化节点到 center 附近\n  public initPositions(center, nodes): boolean {\n    const { graph } = this;\n    if (!nodes) {\n      return false;\n    }\n    const nodeLength = nodes ? nodes.length : 0;\n    if (!nodeLength) return;\n\n    const width = graph.get(\"width\") * 0.85;\n    const height = graph.get(\"height\") * 0.85;\n    const horiNum = Math.ceil(Math.sqrt(nodeLength) * (width / height));\n    const vertiNum = Math.ceil(nodeLength / horiNum);\n    let horiGap = width / (horiNum - 1);\n    let vertiGap = height / (vertiNum - 1);\n    if (!isFinite(horiGap) || !horiGap) horiGap = 0;\n    if (!isFinite(vertiGap) || !horiGap) vertiGap = 0;\n    const beginX = center[0] - width / 2;\n    const beginY = center[1] - height / 2;\n\n    let allHavePos = true;\n    for (let i = 0; i < nodeLength; i++) {\n      const node = nodes[i];\n      if (isNaN(node.x)) {\n        allHavePos = false;\n        node.x = (i % horiNum) * horiGap + beginX;\n      }\n      if (isNaN(node.y)) {\n        allHavePos = false;\n        node.y = Math.floor(i / horiNum) * vertiGap + beginY;\n      }\n    }\n\n    return allHavePos;\n  }\n\n  public destroy() {\n    this.graph = null;\n    this.destoryLayoutMethods();\n\n    this.destroyed = true;\n  }\n\n  public onTick(timestamp: number) {\n    this.layoutMethods?.forEach((layoutMethod) => {\n      layoutMethod?.onTick?.(timestamp);\n    });\n  }\n}\n"
  },
  {
    "path": "packages/core/src/graph/controller/mode.ts",
    "content": "import { each, isArray, isString } from \"@antv/util\";\nimport Behavior from \"../../behavior/behavior\";\nimport { IBehaviorOption } from \"../../interface/behavior\";\nimport { IAbstractGraph } from \"../../interface/graph\";\nimport { ModeType, Modes } from \"../../types\";\n\nexport default class ModeController {\n  private graph: IAbstractGraph;\n\n  public destroyed: boolean;\n\n  /**\n   * modes = {\n   *  default: [ 'drag-node', 'zoom-canvas' ],\n   *  edit: [ 'drag-canvas', {\n   *    type: 'brush-select',\n   *    trigger: 'ctrl'\n   *  }]\n   * }\n   *\n   * @private\n   * @type {Modes}\n   * @memberof Mode\n   */\n  public modes: Modes;\n\n  /**\n   * mode = 'drag-node'\n   *\n   * @private\n   * @type {string}\n   * @memberof Mode\n   */\n  public mode: string;\n\n  private currentBehaves: IBehaviorOption[];\n\n  constructor(graph: IAbstractGraph) {\n    this.graph = graph;\n    this.destroyed = false;\n    this.modes = graph.get(\"modes\") || {\n      default: [],\n    };\n    this.formatModes();\n\n    this.mode = graph.get(\"defaultMode\") || \"default\";\n    this.currentBehaves = [];\n    this.setMode(this.mode);\n  }\n\n  private formatModes() {\n    const { modes } = this;\n    each(modes, (mode) => {\n      each(mode, (behavior, i) => {\n        if (isString(behavior)) {\n          mode[i] = { type: behavior };\n        }\n      });\n    });\n  }\n\n  private setBehaviors(mode: string) {\n    const { graph } = this;\n    const behaviors = this.modes[mode];\n    const behaves: IBehaviorOption[] = [];\n    let behave: IBehaviorOption;\n    each(behaviors || [], (behavior) => {\n      const BehaviorInstance = Behavior.getBehavior(behavior.type || behavior);\n      if (!BehaviorInstance) {\n        return;\n      }\n\n      behave = new BehaviorInstance(behavior);\n      if (behave) {\n        behave.bind(graph as IAbstractGraph);\n        behaves.push(behave);\n      }\n    });\n    this.currentBehaves = behaves;\n  }\n\n  private static mergeBehaviors(\n    modeBehaviors: ModeType[],\n    behaviors: ModeType[],\n  ): ModeType[] {\n    each(behaviors, (behavior) => {\n      if (modeBehaviors.indexOf(behavior) < 0) {\n        if (isString(behavior)) {\n          behavior = { type: behavior };\n        }\n        modeBehaviors.push(behavior);\n      }\n    });\n    return modeBehaviors;\n  }\n\n  private static filterBehaviors(\n    modeBehaviors: ModeType[],\n    behaviors: ModeType[],\n  ): ModeType[] {\n    const result: ModeType[] = [];\n    modeBehaviors.forEach((behavior) => {\n      let type: string = \"\";\n      if (isString(behavior)) {\n        type = behavior;\n      } else {\n        // eslint-disable-next-line prefer-destructuring\n        type = behavior.type;\n      }\n      if (behaviors.indexOf(type) < 0) {\n        result.push(behavior);\n      }\n    });\n    return result;\n  }\n\n  public setMode(mode: string) {\n    const { modes, graph } = this;\n\n    const current = mode;\n\n    const behaviors = modes[current];\n    if (!behaviors) {\n      return;\n    }\n    graph.emit(\"beforemodechange\", { mode });\n\n    each(this.currentBehaves, (behave) => {\n      if (behave.delegate) behave.delegate.remove();\n      behave.unbind(graph);\n    });\n\n    this.setBehaviors(current);\n\n    graph.emit(\"aftermodechange\", { mode });\n    this.mode = mode;\n  }\n\n  public getMode(): string {\n    return this.mode;\n  }\n\n  /**\n   * 动态增加或删除 Behavior\n   *\n   * @param {ModeType[]} behaviors\n   * @param {(ModeType[] | ModeType)} modes\n   * @param {boolean} isAdd\n   * @returns {Mode}\n   * @memberof Mode\n   */\n  public manipulateBehaviors(\n    behaviors: ModeType[] | ModeType,\n    modes: string[] | string,\n    isAdd: boolean,\n  ): ModeController {\n    let behaves: ModeType[];\n    if (!isArray(behaviors)) {\n      behaves = [behaviors];\n    } else {\n      behaves = behaviors;\n    }\n\n    if (isArray(modes)) {\n      each(modes, (mode) => {\n        if (!this.modes[mode]) {\n          if (isAdd) {\n            this.modes[mode] = behaves;\n          }\n        } else if (isAdd) {\n          this.modes[mode] = ModeController.mergeBehaviors(\n            this.modes[mode] || [],\n            behaves,\n          );\n        } else {\n          this.modes[mode] = ModeController.filterBehaviors(\n            this.modes[mode] || [],\n            behaves,\n          );\n        }\n      });\n\n      return this;\n    }\n\n    let currentMode = modes;\n    if (!modes) {\n      currentMode = this.mode; // isString(this.mode) ? this.mode : this.mode.type\n    }\n\n    if (!this.modes[currentMode]) {\n      if (isAdd) {\n        this.modes[currentMode] = behaves;\n      }\n    }\n\n    if (isAdd) {\n      this.modes[currentMode] = ModeController.mergeBehaviors(\n        this.modes[currentMode] || [],\n        behaves,\n      );\n    } else {\n      this.modes[currentMode] = ModeController.filterBehaviors(\n        this.modes[currentMode] || [],\n        behaves,\n      );\n    }\n\n    this.setMode(this.mode);\n\n    return this;\n  }\n\n  /**\n   * 更新行为参数\n   * @param {string | ModeOption | ModeType} behavior 需要更新的行为\n   * @param {string | string[]} modes 指定的模式中的行为，不指定则为 default\n   * @return {Graph} Graph\n   */\n  public updateBehavior(\n    behavior: string | ModeType,\n    newCfg: object,\n    mode?: string,\n  ): ModeController {\n    if (isString(behavior)) {\n      behavior = { type: behavior };\n    }\n    let behaviorSet = [];\n    if (!mode || mode === this.mode || mode === \"default\") {\n      behaviorSet = this.currentBehaves;\n      if (!behaviorSet || !behaviorSet.length) {\n        console.warn(\n          \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n        );\n        return this;\n      }\n      const length = behaviorSet.length;\n      for (let i = 0; i < length; i++) {\n        const behave = behaviorSet[i];\n        if (behave.type === behavior.type) {\n          behave.updateCfg(newCfg);\n          return this;\n        }\n        if (i === length - 1)\n          console.warn(\n            \"Update behavior failed! There is no such behavior in the mode\",\n          );\n      }\n    } else {\n      behaviorSet = this.modes[mode];\n      if (!behaviorSet || !behaviorSet.length) {\n        console.warn(\n          \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n        );\n        return this;\n      }\n      const length = behaviorSet.length;\n      for (let i = 0; i < length; i++) {\n        let behave = behaviorSet[i];\n        if (behave.type === behavior.type || behave === behavior.type) {\n          if (behave === behavior.type) behave = { type: behave };\n          Object.assign(behave, newCfg);\n          behaviorSet[i] = behave;\n          return this;\n        }\n        if (i === length - 1)\n          console.warn(\n            \"Update behavior failed! There is no such behavior in the mode\",\n          );\n      }\n    }\n\n    return this;\n  }\n\n  public destroy() {\n    (this.graph as IAbstractGraph | null) = null;\n    (this.modes as Modes | null) = null;\n    (this.currentBehaves as IBehaviorOption[] | null) = null;\n    this.destroyed = true;\n  }\n}\n"
  },
  {
    "path": "packages/core/src/graph/controller/state.ts",
    "content": "import { each, isString } from \"@antv/util\";\nimport { Item, States } from \"../../types\";\nimport { IAbstractGraph } from \"../../interface/graph\";\nimport { INode } from \"../../interface/item\";\n\ninterface CachedStates {\n  enabled: States;\n  disabled: States;\n}\n\nlet timer: any = null;\n\nexport default class StateController {\n  private graph: IAbstractGraph;\n\n  private cachedStates: CachedStates;\n\n  public destroyed: boolean;\n\n  constructor(graph: IAbstractGraph) {\n    this.graph = graph;\n    /**\n     * this.cachedStates = {\n     *    enabled: {\n     *        hover: [Node]\n     *    },\n     *     disabled: {}\n     *  }\n     */\n    this.cachedStates = {\n      enabled: {},\n      disabled: {},\n    };\n    this.destroyed = false;\n  }\n\n  /**\n   * 检查 cache 的可用性\n   *\n   * @private\n   * @param {Item} item\n   * @param {string} state\n   * @param {object} cache\n   * @returns\n   * @memberof State\n   */\n  private static checkCache(\n    item: Item,\n    state: string,\n    cache: { [key: string]: any },\n  ) {\n    if (!cache[state]) {\n      return;\n    }\n    const index = cache[state].indexOf(item);\n    if (index >= 0) {\n      cache[state].splice(index, 1);\n    }\n  }\n\n  /**\n   * 缓存 state\n   *\n   * @private\n   * @param {Item} item Item 实例\n   * @param {string} state 状态名称\n   * @param {object} states\n   * @memberof State\n   */\n  private static cacheState(item: Item, state: string, states: States) {\n    if (!states[state]) {\n      states[state] = [];\n    }\n    states[state].push(item as INode);\n  }\n\n  /**\n   * 更新 Item 的状态\n   *\n   * @param {Item} item Item实例\n   * @param {string} state 状态名称\n   * @param {boolean} enabled 状态是否可用\n   * @memberof State\n   */\n  public updateState(item: Item, state: string, enabled: boolean) {\n    const { checkCache, cacheState } = StateController;\n    if (item.destroyed) {\n      return;\n    }\n\n    const { cachedStates } = this;\n\n    const enabledStates = cachedStates.enabled;\n    const disabledStates = cachedStates.disabled;\n\n    if (enabled) {\n      checkCache(item, state, disabledStates);\n      cacheState(item, state, enabledStates);\n    } else {\n      checkCache(item, state, enabledStates);\n      cacheState(item, state, disabledStates);\n    }\n\n    if (timer) {\n      clearTimeout(timer);\n    }\n\n    timer = setTimeout(() => {\n      timer = null;\n      this.updateGraphStates();\n    }, 16);\n  }\n\n  /**\n   * 批量更新 states，兼容 updateState，支持更新一个 state\n   *\n   * @param {Item} item\n   * @param {(string | string[])} states\n   * @param {boolean} enabled\n   * @memberof State\n   */\n  public updateStates(item: Item, states: string | string[], enabled: boolean) {\n    if (isString(states)) {\n      this.updateState(item, states, enabled);\n    } else {\n      states.forEach((state) => {\n        this.updateState(item, state, enabled);\n      });\n    }\n  }\n\n  /**\n   * 更新 states\n   *\n   * @memberof State\n   */\n  public updateGraphStates() {\n    const states = this.graph.get(\"states\") as States;\n    const { cachedStates } = this;\n\n    each(cachedStates.disabled, (val, key) => {\n      if (states[key]) {\n        states[key] = states[key].filter(\n          (item) => val.indexOf(item) < 0 && !val.destroyed,\n        );\n      }\n    });\n\n    each(cachedStates.enabled, (val: INode[], key) => {\n      if (!states[key]) {\n        states[key] = val;\n      } else {\n        const map: { [key: string]: boolean } = {};\n        states[key].forEach((item) => {\n          if (!item.destroyed) {\n            map[item.get(\"id\")] = true;\n          }\n        });\n        val.forEach((item: Item) => {\n          if (!item.destroyed) {\n            const id = item.get(\"id\");\n            if (!map[id]) {\n              map[id] = true;\n              states[key].push(item as INode);\n            }\n          }\n        });\n      }\n    });\n\n    this.graph.emit(\"graphstatechange\", { states });\n    this.cachedStates = {\n      enabled: {},\n      disabled: {},\n    };\n  }\n\n  public destroy() {\n    (this.graph as IAbstractGraph | null) = null;\n    (this.cachedStates as CachedStates | null) = null;\n    if (timer) {\n      clearTimeout(timer);\n    }\n    timer = null;\n    this.destroyed = true;\n  }\n}\n"
  },
  {
    "path": "packages/core/src/graph/controller/view.ts",
    "content": "import { AbstractCanvas } from \"@antv/g-base\";\nimport { Point, IGroup } from \"@antv/g-base\";\nimport { isNumber, isString } from \"@antv/util\";\nimport { modifyCSS } from \"@antv/dom-util\";\nimport { Item, Matrix, Padding, GraphAnimateConfig, IEdge } from \"../../types\";\nimport { formatPadding } from \"../../util/base\";\nimport { applyMatrix, invertMatrix } from \"../../util/math\";\nimport { IAbstractGraph } from \"../../interface/graph\";\n\nexport default class ViewController {\n  private graph: IAbstractGraph;\n\n  public destroyed: boolean = false;\n\n  constructor(graph: IAbstractGraph) {\n    this.graph = graph;\n    this.destroyed = false;\n  }\n\n  // get view center coordinate\n  private getViewCenter(): Point {\n    const padding = this.getFormatPadding();\n    const { graph } = this;\n    const width: number = this.graph.get(\"width\");\n    const height: number = graph.get(\"height\");\n    return {\n      x: (width - padding[1] - padding[3]) / 2 + padding[3],\n      y: (height - padding[0] - padding[2]) / 2 + padding[0],\n    };\n  }\n\n  public fitCenter() {\n    const { graph } = this;\n    const group: IGroup = graph.get(\"group\");\n    group.resetMatrix();\n    const bbox = group.getCanvasBBox();\n    if (bbox.width === 0 || bbox.height === 0) return;\n    const viewCenter = this.getViewCenter();\n    const groupCenter: Point = {\n      x: bbox.x + bbox.width / 2,\n      y: bbox.y + bbox.height / 2,\n    };\n\n    graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y);\n  }\n\n  // fit view graph\n  public fitView() {\n    const { graph } = this;\n    const padding = this.getFormatPadding();\n    const width: number = graph.get(\"width\");\n    const height: number = graph.get(\"height\");\n    const group: IGroup = graph.get(\"group\");\n    group.resetMatrix();\n    const bbox = group.getCanvasBBox();\n\n    if (bbox.width === 0 || bbox.height === 0) return;\n    const viewCenter = this.getViewCenter();\n\n    const groupCenter: Point = {\n      x: bbox.x + bbox.width / 2,\n      y: bbox.y + bbox.height / 2,\n    };\n\n    graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y);\n    const w = (width - padding[1] - padding[3]) / bbox.width;\n    const h = (height - padding[0] - padding[2]) / bbox.height;\n    let ratio = w;\n    if (w > h) {\n      ratio = h;\n    }\n    graph.zoom(ratio, viewCenter);\n  }\n\n  public getFormatPadding(): number[] {\n    const padding = this.graph.get(\"fitViewPadding\") as Padding;\n    return formatPadding(padding);\n  }\n\n  public focusPoint(\n    point: Point,\n    animate?: boolean,\n    animateCfg?: GraphAnimateConfig,\n  ) {\n    const viewCenter = this.getViewCenter();\n    const modelCenter = this.getPointByCanvas(viewCenter.x, viewCenter.y);\n    let viewportMatrix: Matrix = this.graph.get(\"group\").getMatrix();\n    if (!viewportMatrix) viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    if (animate) {\n      const dx = (modelCenter.x - point.x) * viewportMatrix[0];\n      const dy = (modelCenter.y - point.y) * viewportMatrix[4];\n      let lastX = 0;\n      let lastY = 0;\n      let newX = 0;\n      let newY = 0;\n      // 动画每次平移一点，直到目标位置\n      this.graph.get(\"canvas\").animate(\n        (ratio) => {\n          newX = dx * ratio;\n          newY = dy * ratio;\n          this.graph.translate(newX - lastX, newY - lastY);\n          lastX = newX;\n          lastY = newY;\n        },\n        {\n          ...animateCfg,\n        },\n      );\n    } else {\n      this.graph.translate(\n        (modelCenter.x - point.x) * viewportMatrix[0],\n        (modelCenter.y - point.y) * viewportMatrix[4],\n      );\n    }\n  }\n\n  /**\n   * 将 Canvas 坐标转成视口坐标\n   * @param canvasX canvas x 坐标\n   * @param canvasY canvas y 坐标\n   */\n  public getPointByCanvas(canvasX: number, canvasY: number): Point {\n    let viewportMatrix: Matrix = this.graph.get(\"group\").getMatrix();\n    if (!viewportMatrix) {\n      viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    }\n    const point = invertMatrix({ x: canvasX, y: canvasY }, viewportMatrix);\n    return point;\n  }\n\n  /**\n   * 将页面坐标转成视口坐标\n   * @param clientX 页面 x 坐标\n   * @param clientY 页面 y 坐标\n   */\n  public getPointByClient(clientX: number, clientY: number): Point {\n    const canvas: AbstractCanvas = this.graph.get(\"canvas\");\n    const canvasPoint: Point = canvas.getPointByClient(clientX, clientY);\n    return this.getPointByCanvas(canvasPoint.x, canvasPoint.y);\n  }\n\n  /**\n   * 将视口坐标转成页面坐标\n   * @param x 视口 x 坐标\n   * @param y 视口 y 坐标\n   */\n  public getClientByPoint(x: number, y: number): Point {\n    const canvas: AbstractCanvas = this.graph.get(\"canvas\");\n    const canvasPoint = this.getCanvasByPoint(x, y);\n    const point = canvas.getClientByPoint(canvasPoint.x, canvasPoint.y);\n\n    return { x: point.x, y: point.y };\n  }\n\n  /**\n   * 将视口坐标转成 Canvas 坐标\n   * @param x 视口 x 坐标\n   * @param y 视口 y 坐标\n   */\n  public getCanvasByPoint(x: number, y: number): Point {\n    let viewportMatrix: Matrix = this.graph.get(\"group\").getMatrix();\n    if (!viewportMatrix) {\n      viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    }\n    return applyMatrix({ x, y }, viewportMatrix);\n  }\n\n  /**\n   * 将元素移动到画布中心\n   * @param item Item 实例或 id\n   * @param {boolean} animate 是否带有动画地移动\n   * @param {GraphAnimateConfig} animateCfg 若带有动画，动画的配置项\n   */\n  public focus(\n    item: string | Item,\n    animate?: boolean,\n    animateCfg?: GraphAnimateConfig,\n  ) {\n    if (isString(item)) {\n      item = this.graph.findById(item);\n    }\n\n    if (item) {\n      let x = 0,\n        y = 0;\n      if (item.getType && item.getType() === \"edge\") {\n        const sourceMatrix: IGroup = (item as IEdge)\n          .getSource()\n          .get(\"group\")\n          .getMatrix();\n        const targetMatrix: IGroup = (item as IEdge)\n          .getTarget()\n          .get(\"group\")\n          .getMatrix();\n        if (sourceMatrix && targetMatrix) {\n          x = (sourceMatrix[6] + targetMatrix[6]) / 2;\n          y = (sourceMatrix[7] + targetMatrix[7]) / 2;\n        } else if (sourceMatrix || targetMatrix) {\n          x = sourceMatrix ? sourceMatrix[6] : targetMatrix[6];\n          y = sourceMatrix ? sourceMatrix[7] : targetMatrix[7];\n        }\n      } else {\n        const group: IGroup = item.get(\"group\");\n        let matrix: Matrix = group.getMatrix();\n        if (!matrix) matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n        x = matrix[6];\n        y = matrix[7];\n      }\n      // 用实际位置而不是model中的x,y,防止由于拖拽等的交互导致model的x,y并不是当前的x,y\n      this.focusPoint({ x, y }, animate, animateCfg);\n    }\n  }\n\n  /**\n   * 改变 canvas 画布的宽度和高度\n   * @param width canvas 宽度\n   * @param height canvas 高度\n   */\n  public changeSize(width: number, height: number) {\n    const { graph } = this;\n    if (!isNumber(width) || !isNumber(height)) {\n      throw Error(\n        \"invalid canvas width & height, please make sure width & height type is number\",\n      );\n    }\n\n    graph.set({ width, height });\n    const canvas: AbstractCanvas = graph.get(\"canvas\");\n    canvas.changeSize(width, height);\n\n    // change the size of grid plugin if it exists on graph\n    const plugins = graph.get(\"plugins\");\n    plugins.forEach((plugin) => {\n      if (plugin.get(\"gridContainer\")) {\n        const minZoom = graph.get(\"minZoom\");\n        modifyCSS(plugin.get(\"container\"), {\n          width: `${width}px`,\n          height: `${height}px`,\n        });\n        modifyCSS(plugin.get(\"gridContainer\"), {\n          width: `${width / minZoom}px`,\n          height: `${height / minZoom}px`,\n          left: 0,\n          top: 0,\n        });\n      }\n    });\n  }\n\n  public destroy() {\n    (this.graph as IAbstractGraph | null) = null;\n    this.destroyed = false;\n  }\n}\n"
  },
  {
    "path": "packages/core/src/graph/graph.ts",
    "content": "import EventEmitter from \"@antv/event-emitter\";\nimport { ICanvas, IGroup, Point } from \"@antv/g-base\";\nimport {\n  requestAnimationFrame,\n  clearAnimationFrame,\n} from \"@antv/g-mobile/esm/util/time\";\nimport { ext } from \"@antv/matrix-util\";\nimport { clone, deepMix, each, isPlainObject, isString } from \"@antv/util\";\nimport {\n  getDegree,\n  getAdjMatrix as getAdjacentMatrix,\n  Stack,\n  floydWarshall,\n} from \"@antv/algorithm\";\nimport { IAbstractGraph } from \"../interface/graph\";\nimport { IEdge, INode, ICombo } from \"../interface/item\";\nimport {\n  GraphAnimateConfig,\n  GraphOptions,\n  EdgeConfig,\n  GraphData,\n  Item,\n  ITEM_TYPE,\n  ModelConfig,\n  NodeConfig,\n  NodeMap,\n  Padding,\n  TreeGraphData,\n  ComboConfig,\n  ModeOption,\n  ModeType,\n  States,\n  ComboTree,\n  HullCfg,\n  IG6GraphEvent,\n} from \"../types\";\nimport { move } from \"../util/math\";\nimport { dataValidation, singleDataValidation } from \"../util/validation\";\nimport Global from \"../global\";\nimport {\n  ItemController,\n  ModeController,\n  StateController,\n  ViewController,\n} from \"./controller\";\nimport {\n  plainCombosToTrees,\n  traverseTree,\n  reconstructTree,\n  traverseTreeUp,\n} from \"../util/graphic\";\nimport Hull from \"../item/hull\";\n\nconst { transform } = ext;\nconst NODE = \"node\";\n\nexport interface PrivateGraphOption extends GraphOptions {\n  data: GraphData;\n\n  // capture event\n  event: boolean;\n\n  nodes: NodeConfig[];\n\n  edges: EdgeConfig[];\n\n  vedges: EdgeConfig[];\n\n  combos: ComboConfig[];\n\n  itemMap: NodeMap;\n\n  callback: () => void;\n\n  /**\n   * 格式：\n   * {\n   *  hover: [Node, Node],\n   *  selected: [Node]\n   * }\n   */\n  states: States;\n}\n\nexport default abstract class AbstractGraph\n  extends EventEmitter\n  implements IAbstractGraph\n{\n  protected animating: boolean;\n\n  protected cfg: GraphOptions & { [key: string]: any };\n\n  public destroyed: boolean;\n\n  // undo 栈\n  protected undoStack: Stack;\n\n  // redo 栈\n  protected redoStack: Stack;\n\n  // requestAnimationFrame 引用\n  protected timeIndex: number;\n\n  constructor(cfg: GraphOptions) {\n    super();\n    this.cfg = deepMix(this.getDefaultCfg(), cfg);\n    this.init();\n    this.animating = false;\n    this.destroyed = false;\n\n    // 启用 stack 后，实例化 undoStack 和 redoStack\n    if (this.cfg.enabledStack) {\n      // 实例化 undo 和 redo 栈\n      this.undoStack = new Stack(this.cfg.maxStep);\n      this.redoStack = new Stack(this.cfg.maxStep);\n    }\n  }\n\n  protected init() {\n    this.initCanvas();\n\n    // instance controller\n    const viewController = new ViewController(this);\n    const modeController = new ModeController(this);\n    const itemController = new ItemController(this);\n    const stateController = new StateController(this);\n\n    this.set({\n      viewController,\n      modeController,\n      itemController,\n      stateController,\n    });\n\n    // 初始化布局机制\n    this.initLayoutController();\n\n    // 初始化事件机制\n    this.initEventController();\n\n    this.initGroups();\n\n    /** 初始化插件 */\n    this.initPlugins();\n\n    this.timeIndex = requestAnimationFrame(this.onTick.bind(this));\n  }\n\n  protected abstract initLayoutController(): void;\n\n  protected abstract initEventController(): void;\n\n  /**\n   * initCanvas 需要在 PC 和 Mobile 分别实现\n   */\n  protected abstract initCanvas(): void;\n\n  /**\n   * initPlugins 需要在 PC 和 Mobile 分别实现\n   */\n  protected abstract initPlugins(): void;\n\n  // 初始化所有 Group\n  protected initGroups(): void {\n    const canvas: ICanvas = this.get(\"canvas\");\n    const el: HTMLElement = this.get(\"canvas\").get(\"el\");\n    const { id } = el;\n\n    const group: IGroup = canvas.addGroup({\n      id: `${id}-root`,\n      className: Global.rootContainerClassName,\n    });\n\n    if (this.get(\"groupByTypes\")) {\n      const edgeGroup: IGroup = group.addGroup({\n        id: `${id}-edge`,\n        className: Global.edgeContainerClassName,\n      });\n\n      const nodeGroup: IGroup = group.addGroup({\n        id: `${id}-node`,\n        className: Global.nodeContainerClassName,\n      });\n      const comboGroup: IGroup = group.addGroup({\n        id: `${id}-combo`,\n        className: Global.comboContainerClassName,\n      });\n\n      // 用于存储自定义的群组\n      comboGroup.toBack();\n\n      this.set({ nodeGroup, edgeGroup, comboGroup });\n    }\n    const delegateGroup: IGroup = group.addGroup({\n      id: `${id}-delegate`,\n      className: Global.delegateContainerClassName,\n    });\n    this.set({ delegateGroup });\n    this.set(\"group\", group);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  public getDefaultCfg(): Partial<PrivateGraphOption> {\n    return {\n      /**\n       * Container could be dom object or dom id\n       */\n      container: undefined,\n\n      /**\n       * Canvas width\n       * unit pixel if undefined force fit width\n       */\n      width: undefined,\n\n      /**\n       * Canvas height\n       * unit pixel if undefined force fit height\n       */\n      height: undefined,\n      /**\n       * renderer canvas or svg\n       * @type {string}\n       */\n      renderer: \"canvas\",\n      /**\n       * control graph behaviors\n       */\n      modes: {},\n      /**\n       * 注册插件\n       */\n      plugins: [],\n      /**\n       * source data\n       */\n      data: {},\n      /**\n       * Fit view padding (client scale)\n       */\n      fitViewPadding: 10,\n      /**\n       * Minimum scale size\n       */\n      minZoom: 0.2,\n      /**\n       * Maxmum scale size\n       */\n      maxZoom: 10,\n      /**\n       *  capture events\n       */\n      event: true,\n      /**\n       * group node & edges into different graphic groups\n       */\n      groupByTypes: true,\n      /**\n       * determine if it's a directed graph\n       */\n      directed: false,\n      /**\n       * when data or shape changed, should canvas draw automatically\n       */\n      autoPaint: true,\n      /**\n       * store all the node instances\n       */\n      nodes: [],\n      /**\n       * store all the edge instances\n       */\n      edges: [],\n      /**\n       * store all the combo instances\n       */\n      combos: [],\n      /**\n       * store all the edge instances which are virtual edges related to collapsed combo\n       */\n      vedges: [],\n      /**\n       * all the instances indexed by id\n       */\n      itemMap: {},\n      /**\n       * 边直接连接到节点的中心，不再考虑锚点\n       */\n      linkCenter: false,\n      /**\n       * 默认的节点配置，data 上定义的配置会覆盖这些配置。例如：\n       * defaultNode: {\n       *  type: 'rect',\n       *  size: [60, 40],\n       *  style: {\n       *    //... 样式配置项\n       *  }\n       * }\n       * 若数据项为 { id: 'node', x: 100, y: 100 }\n       * 实际创建的节点模型是 { id: 'node', x: 100, y: 100， type: 'rect', size: [60, 40] }\n       * 若数据项为 { id: 'node', x: 100, y: 100, type: 'circle' }\n       * 实际创建的节点模型是 { id: 'node', x: 100, y: 100， type: 'circle', size: [60, 40] }\n       */\n      defaultNode: {},\n      /**\n       * 默认边配置，data 上定义的配置会覆盖这些配置。用法同 defaultNode\n       */\n      defaultEdge: {},\n      /**\n       * 节点默认样式，也可以添加状态样式\n       * 例如：\n       * const graph = new G6.Graph({\n       *  nodeStateStyles: {\n       *    selected: { fill: '#ccc', stroke: '#666' },\n       *    active: { lineWidth: 2 }\n       *  },\n       *  ...\n       * });\n       *\n       */\n      nodeStateStyles: {},\n      /**\n       * 边默认样式，用法同nodeStateStyle\n       */\n      edgeStateStyles: {},\n      /**\n       * graph 状态\n       */\n      states: {},\n      /**\n       * 是否启用全局动画\n       */\n      animate: false,\n      /**\n       * 动画设置,仅在 animate 为 true 时有效\n       */\n      animateCfg: {\n        /**\n         * 帧回调函数，用于自定义节点运动路径，为空时线性运动\n         */\n        onFrame: undefined,\n        /**\n         * 动画时长(ms)\n         */\n        duration: 500,\n        /**\n         * 指定动画动效\n         */\n        easing: \"easeLinear\",\n      },\n      callback: undefined,\n\n      // 默认不启用 undo & redo 功能\n      enabledStack: false,\n\n      // 只有当 enabledStack 为 true 时才起作用\n      maxStep: 10,\n\n      // 存储图上的 tooltip dom，方便销毁\n      tooltips: [],\n    };\n  }\n\n  /**\n   * 将值设置到 this.cfg 变量上面\n   * @param key 键 或 对象值\n   * @param val 值\n   */\n  public set<T = any>(key: string | object, val?: T): AbstractGraph {\n    if (isPlainObject(key)) {\n      this.cfg = { ...this.cfg, ...key };\n    } else {\n      this.cfg[key] = val;\n    }\n    return this;\n  }\n\n  /**\n   * 获取 this.cfg 中的值\n   * @param key 键\n   */\n  public get(key: string) {\n    return this.cfg[key];\n  }\n\n  /**\n   * 获取 graph 的根图形分组\n   * @return 根 group\n   */\n  public getGroup(): IGroup {\n    return this.get(\"group\");\n  }\n\n  /**\n   * 获取 graph 的 DOM 容器\n   * @return DOM 容器\n   */\n  public getContainer(): HTMLElement {\n    return this.get(\"container\");\n  }\n\n  /**\n   * 获取 graph 的最小缩放比例\n   * @return minZoom\n   */\n  public getMinZoom(): number {\n    return this.get(\"minZoom\");\n  }\n\n  /**\n   * 设置 graph 的最小缩放比例\n   * @return minZoom\n   */\n  public setMinZoom(ratio: number) {\n    return this.set(\"minZoom\", ratio);\n  }\n\n  /**\n   * 获取 graph 的最大缩放比例\n   * @param maxZoom\n   */\n  public getMaxZoom(): number {\n    return this.get(\"maxZoom\");\n  }\n\n  /**\n   * 设置 graph 的最大缩放比例\n   * @param maxZoom\n   */\n  public setMaxZoom(ratio: number) {\n    return this.set(\"maxZoom\", ratio);\n  }\n\n  /**\n   * 获取 graph 的宽度\n   * @return width\n   */\n  public getWidth(): number {\n    return this.get(\"width\");\n  }\n\n  /**\n   * 获取 graph 的高度\n   * @return width\n   */\n  public getHeight(): number {\n    return this.get(\"height\");\n  }\n\n  /**\n   * 清理元素多个状态\n   * @param {string|Item} item 元素id或元素实例\n   * @param {string[]} states 状态\n   */\n  public clearItemStates(\n    item: Item | string,\n    states?: string[] | string,\n  ): void {\n    if (isString(item)) {\n      item = this.findById(item);\n    }\n\n    const itemController: ItemController = this.get(\"itemController\");\n\n    if (!states) {\n      states = item.get<string[]>(\"states\");\n    }\n\n    itemController.clearItemStates(item, states);\n\n    const stateController: StateController = this.get(\"stateController\");\n    stateController.updateStates(item, states, false);\n  }\n\n  /**\n   * 设置各个节点样式，以及在各种状态下节点 keyShape 的样式。\n   * 若是自定义节点切在各种状态下\n   * graph.node(node => {\n   *  return {\n   *    type: 'rect',\n   *    label: node.id,\n   *    style: { fill: '#666' },\n   *    stateStyles: {\n   *       selected: { fill: 'blue' },\n   *       custom: { fill: 'green' }\n   *     }\n   *   }\n   * });\n   * @param {function} nodeFn 指定每个节点样式\n   */\n  public node(nodeFn: (config: NodeConfig) => Partial<NodeConfig>): void {\n    if (typeof nodeFn === \"function\") {\n      this.set(\"nodeMapper\", nodeFn);\n    }\n  }\n\n  /**\n   * 设置各个边样式\n   * @param {function} edgeFn 指定每个边的样式,用法同 node\n   */\n  public edge(edgeFn: (config: EdgeConfig) => Partial<EdgeConfig>): void {\n    if (typeof edgeFn === \"function\") {\n      this.set(\"edgeMapper\", edgeFn);\n    }\n  }\n\n  /**\n   * 设置各个 combo 的配置\n   * @param comboFn\n   */\n  public combo(comboFn: (config: ComboConfig) => Partial<ComboConfig>): void {\n    if (typeof comboFn === \"function\") {\n      this.set(\"comboMapper\", comboFn);\n    }\n  }\n\n  /**\n   * 根据 ID 查询图元素实例\n   * @param id 图元素 ID\n   */\n  public findById(id: string): Item {\n    return this.get(\"itemMap\")[id];\n  }\n\n  /**\n   * 根据对应规则查找单个元素\n   * @param {ITEM_TYPE} type 元素类型(node | edge | group)\n   * @param {(item: T, index: number) => T} fn 指定规则\n   * @return {T} 元素实例\n   */\n  public find<T extends Item>(\n    type: ITEM_TYPE,\n    fn: (item: T, index?: number) => boolean,\n  ): T | undefined {\n    let result: T | undefined;\n    const items = this.get(`${type}s`);\n\n    // eslint-disable-next-line consistent-return\n    each(items, (item, i) => {\n      if (fn(item, i)) {\n        result = item;\n        return result;\n      }\n    });\n\n    return result;\n  }\n\n  /**\n   * 查找所有满足规则的元素\n   * @param {string} type 元素类型(node|edge)\n   * @param {string} fn 指定规则\n   * @return {array} 元素实例\n   */\n  public findAll<T extends Item>(\n    type: ITEM_TYPE,\n    fn: (item: T, index?: number) => boolean,\n  ): T[] {\n    const result: T[] = [];\n\n    each(this.get(`${type}s`), (item, i) => {\n      if (fn(item, i)) {\n        result.push(item);\n      }\n    });\n\n    return result;\n  }\n\n  /**\n   * 查找所有处于指定状态的元素\n   * @param {string} type 元素类型(node|edge)\n   * @param {string} state 状态\n   * @return {object} 元素实例\n   */\n  public findAllByState<T extends Item>(type: ITEM_TYPE, state: string): T[] {\n    return this.findAll(type, (item) => item.hasState(state));\n  }\n\n  /**\n   * 平移画布\n   * @param dx 水平方向位移\n   * @param dy 垂直方向位移\n   */\n  public translate(dx: number, dy: number): void {\n    const group: IGroup = this.get(\"group\");\n\n    let matrix = clone(group.getMatrix());\n    if (!matrix) {\n      matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    }\n    matrix = transform(matrix, [[\"t\", dx, dy]]);\n\n    group.setMatrix(matrix);\n\n    this.emit(\"viewportchange\", {\n      action: \"translate\",\n      matrix: group.getMatrix(),\n    });\n    this.autoPaint();\n  }\n\n  /**\n   * 平移画布到某点\n   * @param {number} x 水平坐标\n   * @param {number} y 垂直坐标\n   */\n  public moveTo(x: number, y: number): void {\n    const group: IGroup = this.get(\"group\");\n    move(group, { x, y });\n    this.emit(\"viewportchange\", { action: \"move\", matrix: group.getMatrix() });\n  }\n\n  /**\n   * 调整视口适应视图\n   * @param {object} padding 四周围边距\n   */\n  public fitView(padding?: Padding): void {\n    if (padding) {\n      this.set(\"fitViewPadding\", padding);\n    }\n\n    const viewController: ViewController = this.get(\"viewController\");\n    viewController.fitView();\n\n    this.autoPaint();\n  }\n\n  /**\n   * 调整视口适应视图，不缩放，仅将图 bbox 中心对齐到画布中心\n   */\n  public fitCenter(): void {\n    const viewController: ViewController = this.get(\"viewController\");\n    viewController.fitCenter();\n    this.autoPaint();\n  }\n\n  /**\n   * 新增行为\n   * @param {string | ModeOption | ModeType[]} behaviors 添加的行为\n   * @param {string | string[]} modes 添加到对应的模式\n   * @return {Graph} Graph\n   */\n  public addBehaviors(\n    behaviors: string | ModeOption | ModeType[],\n    modes: string | string[],\n  ): AbstractGraph {\n    const modeController: ModeController = this.get(\"modeController\");\n    modeController.manipulateBehaviors(behaviors, modes, true);\n    return this;\n  }\n\n  /**\n   * 移除行为\n   * @param {string | ModeOption | ModeType[]} behaviors 移除的行为\n   * @param {string | string[]} modes 从指定的模式中移除\n   * @return {Graph} Graph\n   */\n  public removeBehaviors(\n    behaviors: string | ModeOption | ModeType[],\n    modes: string | string[],\n  ): AbstractGraph {\n    const modeController: ModeController = this.get(\"modeController\");\n    modeController.manipulateBehaviors(behaviors, modes, false);\n    return this;\n  }\n\n  /**\n   * 更新行为参数\n   * @param {string | ModeOption | ModeType} behavior 需要更新的行为\n   * @param {string | string[]} modes 指定的模式中的行为，不指定则为 default\n   * @return {Graph} Graph\n   */\n  public updateBehavior(\n    behavior: string,\n    newCfg: object,\n    mode?: string,\n  ): AbstractGraph {\n    const modeController: ModeController = this.get(\"modeController\");\n    modeController.updateBehavior(behavior, newCfg, mode);\n    return this;\n  }\n\n  /**\n   * 伸缩窗口\n   * @param ratio 伸缩比例\n   * @param center 以center的x, y坐标为中心缩放\n   */\n  public zoom(ratio: number, center?: Point): void {\n    const group: IGroup = this.get(\"group\");\n    let matrix = clone(group.getMatrix());\n    const minZoom: number = this.get(\"minZoom\");\n    const maxZoom: number = this.get(\"maxZoom\");\n\n    if (!matrix) {\n      matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    }\n\n    if (center) {\n      matrix = transform(matrix, [\n        [\"t\", -center.x, -center.y],\n        [\"s\", ratio, ratio],\n        [\"t\", center.x, center.y],\n      ]);\n    } else {\n      matrix = transform(matrix, [[\"s\", ratio, ratio]]);\n    }\n\n    if ((minZoom && matrix[0] < minZoom) || (maxZoom && matrix[0] > maxZoom)) {\n      return;\n    }\n    // matrix = [2, 0, 0, 0, 2, 0, -125, -125, 1];\n\n    group.setMatrix(matrix);\n    this.emit(\"viewportchange\", { action: \"zoom\", matrix });\n    this.autoPaint();\n  }\n\n  /**\n   * 伸缩视口到一固定比例\n   * @param {number} toRatio 伸缩比例\n   * @param {Point} center 以center的x, y坐标为中心缩放\n   */\n  public zoomTo(toRatio: number, center?: Point): void {\n    const ratio = toRatio / this.getZoom();\n    this.zoom(ratio, center);\n  }\n\n  /**\n   * 将元素移动到视口中心\n   * @param {Item} item 指定元素\n   * @param {boolean} animate 是否带有动画地移动\n   * @param {GraphAnimateConfig} animateCfg 若带有动画，动画的配置项\n   */\n  public focusItem(\n    item: Item | string,\n    animate?: boolean,\n    animateCfg?: GraphAnimateConfig,\n  ): void {\n    const viewController: ViewController = this.get(\"viewController\");\n    let isAnimate = false;\n    if (animate) isAnimate = true;\n    else if (animate === undefined) isAnimate = this.get(\"animate\");\n    let curAniamteCfg = {} as GraphAnimateConfig;\n    if (animateCfg) curAniamteCfg = animateCfg;\n    else if (animateCfg === undefined) curAniamteCfg = this.get(\"animateCfg\");\n\n    viewController.focus(item, isAnimate, curAniamteCfg);\n\n    this.autoPaint();\n  }\n\n  /**\n   * 自动重绘\n   * @internal 仅供内部更新机制调用，外部根据需求调用 render 或 paint 接口\n   */\n  public autoPaint(): void {\n    if (this.get(\"autoPaint\")) {\n      this.paint();\n    }\n  }\n\n  /**\n   * 仅画布重新绘制\n   */\n  public paint(): void {\n    this.emit(\"beforepaint\");\n    this.get(\"canvas\").draw();\n    this.emit(\"afterpaint\");\n  }\n\n  /**\n   * 将屏幕坐标转换为视口坐标\n   * @param {number} clientX 屏幕x坐标\n   * @param {number} clientY 屏幕y坐标\n   * @return {Point} 视口坐标\n   */\n  public getPointByClient(clientX: number, clientY: number): Point {\n    const viewController: ViewController = this.get(\"viewController\");\n    return viewController.getPointByClient(clientX, clientY);\n  }\n\n  /**\n   * 将绘制坐标转换为屏幕坐标\n   * @param {number} x 绘制坐标 x\n   * @param {number} y 绘制坐标 y\n   * @return {Point} 绘制坐标\n   */\n  public getClientByPoint(x: number, y: number): Point {\n    const viewController: ViewController = this.get(\"viewController\");\n    return viewController.getClientByPoint(x, y);\n  }\n\n  /**\n   * 将画布坐标转换为绘制坐标\n   * @param {number} canvasX 画布 x 坐标\n   * @param {number} canvasY 画布 y 坐标\n   * @return {object} 绘制坐标\n   */\n  public getPointByCanvas(canvasX: number, canvasY: number): Point {\n    const viewController: ViewController = this.get(\"viewController\");\n    return viewController.getPointByCanvas(canvasX, canvasY);\n  }\n\n  /**\n   * 将绘制坐标转换为画布坐标\n   * @param {number} x 绘制坐标 x\n   * @param {number} y 绘制坐标 y\n   * @return {object} 画布坐标\n   */\n  public getCanvasByPoint(x: number, y: number): Point {\n    const viewController: ViewController = this.get(\"viewController\");\n    return viewController.getCanvasByPoint(x, y);\n  }\n\n  /**\n   * 获取图内容的中心绘制坐标\n   * @return {object} 中心绘制坐标\n   */\n  public getGraphCenterPoint(): Point {\n    const bbox = this.get(\"group\").getCanvasBBox();\n    return {\n      x: (bbox.minX + bbox.maxX) / 2,\n      y: (bbox.minY + bbox.maxY) / 2,\n    };\n  }\n\n  /**\n   * 获取视口中心绘制坐标\n   * @return {object} 视口中心绘制坐标\n   */\n  public getViewPortCenterPoint(): Point {\n    return this.getPointByCanvas(this.get(\"width\") / 2, this.get(\"height\") / 2);\n  }\n\n  /**\n   * 显示元素\n   * @param {Item} item 指定元素\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  public showItem(item: Item | string, stack: boolean = true): void {\n    const itemController: ItemController = this.get(\"itemController\");\n    const object = itemController.changeItemVisibility(item, true);\n    if (stack && this.get(\"enabledStack\")) {\n      const id = object.getID();\n      const type = object.getType();\n      const before: GraphData = {};\n      const after: GraphData = {};\n      switch (type) {\n        case \"node\":\n          before.nodes = [{ id, visible: false }];\n          after.nodes = [{ id, visible: true }];\n          break;\n        case \"edge\":\n          before.nodes = [{ id, visible: false }];\n          after.edges = [{ id, visible: true }];\n          break;\n        case \"combo\":\n          before.nodes = [{ id, visible: false }];\n          after.combos = [{ id, visible: true }];\n          break;\n        default:\n          break;\n      }\n      this.pushStack(\"visible\", { before, after });\n    }\n  }\n\n  /**\n   * 隐藏元素\n   * @param {Item} item 指定元素\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  public hideItem(item: Item | string, stack: boolean = true): void {\n    const itemController: ItemController = this.get(\"itemController\");\n    const object = itemController.changeItemVisibility(item, false);\n    if (stack && this.get(\"enabledStack\")) {\n      const id = object.getID();\n      const type = object.getType();\n      const before: GraphData = {};\n      const after: GraphData = {};\n      switch (type) {\n        case \"node\":\n          before.nodes = [{ id, visible: true }];\n          after.nodes = [{ id, visible: false }];\n          break;\n        case \"edge\":\n          before.nodes = [{ id, visible: true }];\n          after.edges = [{ id, visible: false }];\n          break;\n        case \"combo\":\n          before.nodes = [{ id, visible: true }];\n          after.combos = [{ id, visible: false }];\n          break;\n        default:\n          break;\n      }\n      this.pushStack(\"visible\", { before, after });\n    }\n  }\n\n  /**\n   * 刷新元素\n   * @param {string|object} item 元素id或元素实例\n   */\n  public refreshItem(item: Item | string) {\n    const itemController: ItemController = this.get(\"itemController\");\n    itemController.refreshItem(item);\n  }\n\n  /**\n   * 设置是否在更新/刷新后自动重绘\n   * @param {boolean} auto 自动重绘\n   */\n  public setAutoPaint(auto: boolean): void {\n    const self = this;\n    self.set(\"autoPaint\", auto);\n    const canvas: ICanvas = self.get(\"canvas\");\n    canvas.set(\"autoDraw\", auto);\n  }\n\n  /**\n   * 删除元素\n   * @param {Item} item 元素id或元素实例\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  public remove(item: Item | string, stack: boolean = true): void {\n    this.removeItem(item, stack);\n  }\n\n  /**\n   * 删除元素\n   * @param {Item} item 元素id或元素实例\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  public removeItem(item: Item | string, stack: boolean = true): void {\n    let nodeItem = item;\n    if (isString(item)) nodeItem = this.findById(item as string);\n\n    if (!nodeItem && isString(item)) {\n      console.warn(\"The item to be removed does not exist!\");\n    } else if (nodeItem) {\n      let type = \"\";\n      if ((nodeItem as Item).getType) type = (nodeItem as Item).getType();\n\n      // 将删除的元素入栈\n      if (stack && this.get(\"enabledStack\")) {\n        const deletedModel = {\n          ...(nodeItem as Item).getModel(),\n          itemType: type,\n        };\n        const before: GraphData = {};\n        switch (type) {\n          case \"node\": {\n            before.nodes = [deletedModel as NodeConfig];\n            before.edges = [];\n            const edges = (nodeItem as INode).getEdges();\n            for (let i = edges.length - 1; i >= 0; i--) {\n              before.edges.push({\n                ...edges[i].getModel(),\n                itemType: \"edge\",\n              });\n            }\n            break;\n          }\n          case \"edge\":\n            before.edges = [deletedModel as EdgeConfig];\n            break;\n          case \"combo\":\n            before.combos = [deletedModel as ComboConfig];\n            break;\n          default:\n            break;\n        }\n        this.pushStack(\"delete\", {\n          before,\n          after: {},\n        });\n      }\n\n      if (type === \"node\") {\n        const model = (nodeItem as INode).getModel();\n        // 如果删除的是节点，且该节点存在于某个 Combo 中，则需要先将 node 从 combo 中移除，否则删除节点后，操作 combo 会出错\n        if (model.comboId) {\n          this.updateComboTree(nodeItem as INode);\n        }\n      }\n\n      const itemController: ItemController = this.get(\"itemController\");\n      itemController.removeItem(nodeItem);\n      if (type === \"combo\") {\n        const newComboTrees = reconstructTree(this.get(\"comboTrees\"));\n        this.set(\"comboTrees\", newComboTrees);\n      }\n    }\n  }\n\n  /**\n   * 新增元素\n   * @param {ITEM_TYPE} type 元素类型(node | edge)\n   * @param {ModelConfig} model 元素数据模型\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   * @param {boolean} sortCombo 本次操作是否需要更新 combo 层级顺序，内部参数，用户在外部使用 addItem 时始终时需要更新\n   * @return {Item} 元素实例\n   */\n  public addItem(\n    type: ITEM_TYPE,\n    model: ModelConfig,\n    stack: boolean = true,\n    sortCombo: boolean = true,\n  ) {\n    const currentComboSorted = this.get(\"comboSorted\");\n    this.set(\"comboSorted\", currentComboSorted && !sortCombo);\n    const itemController: ItemController = this.get(\"itemController\");\n\n    // 添加节点、边或combo之前，先验证数据是否符合规范\n    if (!singleDataValidation(type, model)) {\n      return false;\n    }\n\n    if (model.id && this.findById(model.id as string)) {\n      console.warn(\n        `This item exists already. Be sure the id %c${model.id}%c is unique.`,\n        \"font-size: 20px; color: red;\",\n        \"\",\n      );\n      return;\n    }\n\n    let item;\n    let comboTrees = this.get(\"comboTrees\");\n    if (!comboTrees) comboTrees = [];\n    if (type === \"combo\") {\n      const itemMap = this.get(\"itemMap\");\n      let foundParent = false;\n      comboTrees.forEach((ctree: ComboTree) => {\n        if (foundParent) return; // terminate the forEach after the tree containing the item is done\n        traverseTreeUp<ComboTree>(ctree, (child) => {\n          // find the parent\n          if (model.parentId === child.id) {\n            foundParent = true;\n            const newCombo: ComboTree = {\n              id: model.id as string,\n              depth: child.depth + 2,\n              ...model,\n            };\n            if (child.children) child.children.push(newCombo);\n            else child.children = [newCombo];\n            model.depth = newCombo.depth;\n            item = itemController.addItem(type, model) as ICombo;\n          }\n          const childItem = itemMap[child.id];\n          // after the parent is found, update all the ancestors\n          if (\n            foundParent &&\n            childItem &&\n            childItem.getType &&\n            childItem.getType() === \"combo\"\n          ) {\n            itemController.updateCombo(childItem, child.children);\n          }\n          return true;\n        });\n      });\n      // if the parent is not found, add it to the root\n      if (!foundParent) {\n        const newCombo: ComboTree = {\n          id: model.id as string,\n          depth: 0,\n          ...model,\n        };\n        model.depth = newCombo.depth;\n        comboTrees.push(newCombo);\n        item = itemController.addItem(type, model) as ICombo;\n      }\n      this.set(\"comboTrees\", comboTrees);\n    } else if (type === \"node\" && isString(model.comboId) && comboTrees) {\n      const parentCombo = this.findById(model.comboId as string);\n      if (\n        parentCombo &&\n        parentCombo.getType &&\n        parentCombo.getType() !== \"combo\"\n      ) {\n        console.warn(\n          `'${model.comboId}' is not a id of a combo in the graph, the node will be added without combo.`,\n        );\n      }\n      item = itemController.addItem(type, model);\n\n      const itemMap = this.get(\"itemMap\");\n      let foundParent = false,\n        foundNode = false;\n      (comboTrees || []).forEach((ctree: ComboTree) => {\n        if (foundNode || foundParent) return; // terminate the forEach\n        traverseTreeUp<ComboTree>(ctree, (child) => {\n          if (child.id === model.id) {\n            // if the item exists in the tree already, terminate\n            foundNode = true;\n            return false;\n          }\n          if (model.comboId === child.id && !foundNode) {\n            // found the parent, add the item to the children of its parent in the tree\n            foundParent = true;\n            const cloneNode = clone(model);\n            cloneNode.itemType = \"node\";\n            if (child.children) child.children.push(cloneNode as any);\n            else child.children = [cloneNode as any];\n            cloneNode.depth = child.depth + 1;\n          }\n          // update the size of all the ancestors\n          if (\n            foundParent &&\n            itemMap[child.id].getType &&\n            itemMap[child.id].getType() === \"combo\"\n          ) {\n            itemController.updateCombo(itemMap[child.id], child.children);\n          }\n          return true;\n        });\n      });\n    } else {\n      item = itemController.addItem(type, model);\n    }\n\n    if (\n      (type === \"node\" && model.comboId) ||\n      (type === \"combo\" && model.parentId)\n    ) {\n      // add the combo to the parent's children array\n      const parentCombo = this.findById(\n        (model.comboId as string) || (model.parentId as string),\n      ) as ICombo;\n      if (\n        parentCombo &&\n        parentCombo.getType &&\n        parentCombo.getType() === \"combo\"\n      )\n        parentCombo.addChild(item);\n    }\n\n    const combos = this.get(\"combos\");\n    if (combos && combos.length > 0) {\n      this.sortCombos();\n    }\n    this.autoPaint();\n\n    if (stack && this.get(\"enabledStack\")) {\n      const addedModel = {\n        ...item.getModel(),\n        itemType: type,\n      };\n      const after: GraphData = {};\n      switch (type) {\n        case \"node\":\n          after.nodes = [addedModel];\n          break;\n        case \"edge\":\n          after.edges = [addedModel];\n          break;\n        case \"combo\":\n          after.combos = [addedModel];\n          break;\n        default:\n          break;\n      }\n      this.pushStack(\"add\", {\n        before: {},\n        after,\n      });\n    }\n\n    return item;\n  }\n\n  /**\n   * 新增元素\n   * @param {ITEM_TYPE} type 元素类型(node | edge)\n   * @param {ModelConfig} model 元素数据模型\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   * @return {Item} 元素实例\n   */\n  public add(\n    type: ITEM_TYPE,\n    model: ModelConfig,\n    stack: boolean = true,\n    sortCombo: boolean = true,\n  ): Item {\n    return this.addItem(type, model, stack, sortCombo);\n  }\n\n  /**\n   * 更新元素\n   * @param {Item} item 元素id或元素实例\n   * @param {Partial<NodeConfig> | EdgeConfig} cfg 需要更新的数据\n   */\n  public updateItem(\n    item: Item | string,\n    cfg: Partial<NodeConfig> | EdgeConfig,\n    stack: boolean = true,\n  ): void {\n    const itemController: ItemController = this.get(\"itemController\");\n    let currentItem;\n    if (isString(item)) {\n      currentItem = this.findById(item as string);\n    } else {\n      currentItem = item;\n    }\n\n    const UnupdateModel = clone(currentItem.getModel());\n\n    let type = \"\";\n    if (currentItem.getType) type = currentItem.getType();\n    const states = [...currentItem.getStates()];\n    if (type === \"combo\") {\n      each(states, (state) => this.setItemState(currentItem, state, false));\n    }\n    itemController.updateItem(currentItem, cfg);\n\n    if (type === \"combo\") {\n      each(states, (state) => this.setItemState(currentItem, state, true));\n    }\n\n    if (stack && this.get(\"enabledStack\")) {\n      const before = { nodes: [], edges: [], combos: [] };\n      const after = { nodes: [], edges: [], combos: [] };\n      const afterModel = {\n        id: UnupdateModel.id,\n        ...cfg,\n      };\n      switch (type) {\n        case \"node\":\n          before.nodes.push(UnupdateModel);\n          after.nodes.push(afterModel);\n          break;\n        case \"edge\":\n          before.edges.push(UnupdateModel);\n          after.edges.push(afterModel);\n          break;\n        case \"combo\":\n          before.combos.push(UnupdateModel);\n          after.combos.push(afterModel);\n          break;\n        default:\n          break;\n      }\n      if (type === \"node\") {\n        before.nodes.push(UnupdateModel);\n      }\n      this.pushStack(\"update\", { before, after });\n    }\n  }\n\n  /**\n   * 更新元素\n   * @param {Item} item 元素id或元素实例\n   * @param {Partial<NodeConfig> | EdgeConfig} cfg 需要更新的数据\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  public update(\n    item: Item | string,\n    cfg: Partial<NodeConfig> | EdgeConfig,\n    stack: boolean = true,\n  ): void {\n    this.updateItem(item, cfg, stack);\n  }\n\n  /**\n   * 设置元素状态\n   * @param {Item} item 元素id或元素实例\n   * @param {string} state 状态名称\n   * @param {string | boolean} value 是否启用状态 或 状态值\n   */\n  public setItemState(\n    item: Item | string,\n    state: string,\n    value: string | boolean,\n  ): void {\n    if (isString(item)) {\n      item = this.findById(item as string);\n    }\n\n    const itemController: ItemController = this.get(\"itemController\");\n    itemController.setItemState(item, state, value);\n\n    const stateController: StateController = this.get(\"stateController\");\n\n    if (isString(value)) {\n      stateController.updateState(item, `${state}:${value}`, true);\n    } else {\n      stateController.updateState(item, state, value);\n    }\n  }\n\n  /**\n   * 将指定状态的优先级提升为最高优先级\n   * @param {Item} item 元素id或元素实例\n   * @param state 状态名称\n   */\n  public priorityState(item: Item | string, state: string): void {\n    const itemController: ItemController = this.get(\"itemController\");\n    itemController.priorityState(item, state);\n  }\n\n  /**\n   * 设置视图初始化数据\n   * @param {GraphData} data 初始化数据\n   */\n  public data(data?: GraphData | TreeGraphData): void {\n    dataValidation(data);\n    this.set(\"data\", data);\n  }\n\n  /**\n   * 根据data接口的数据渲染视图\n   */\n  public render(): void {\n    const self = this;\n    this.set(\"comboSorted\", false);\n    const data: GraphData = this.get(\"data\");\n\n    if (this.get(\"enabledStack\")) {\n      // render 之前清空 redo 和 undo 栈\n      this.clearStack();\n    }\n\n    if (!data) {\n      throw new Error(\"data must be defined first\");\n    }\n\n    const { nodes = [], edges = [], combos = [] } = data;\n\n    this.clear(true);\n\n    this.emit(\"beforerender\");\n\n    each(nodes, (node: NodeConfig) => {\n      self.add(\"node\", node, false, false);\n    });\n\n    // process the data to tree structure\n    if (combos && combos.length !== 0) {\n      const comboTrees = plainCombosToTrees(combos, nodes);\n      this.set(\"comboTrees\", comboTrees);\n      // add combos\n      self.addCombos(combos);\n    }\n\n    each(edges, (edge: EdgeConfig) => {\n      self.add(\"edge\", edge, false, false);\n    });\n\n    const animate = self.get(\"animate\");\n    if (self.get(\"fitView\") || self.get(\"fitCenter\")) {\n      self.set(\"animate\", false);\n    }\n\n    // layout\n    const layoutController = self.get(\"layoutController\");\n    if (layoutController) {\n      layoutController.layout(success);\n      // 布局后立即初始化边的数据\n      this.refreshPositions();\n      if (this.destroyed) return;\n    } else {\n      if (self.get(\"fitView\")) {\n        self.fitView();\n      }\n      if (self.get(\"fitCenter\")) {\n        self.fitCenter();\n      }\n\n      self.emit(\"afterrender\");\n      self.set(\"animate\", animate);\n    }\n    // 将在 onLayoutEnd 中被调用\n    function success() {\n      // fitView 与 fitCenter 共存时，fitView 优先，fitCenter 不再执行\n      if (self.get(\"fitView\")) {\n        self.fitView();\n      } else if (self.get(\"fitCenter\")) {\n        self.fitCenter();\n      }\n      self.autoPaint();\n      self.emit(\"afterrender\");\n      if (self.get(\"fitView\") || self.get(\"fitCenter\")) {\n        self.set(\"animate\", animate);\n      }\n    }\n\n    if (!this.get(\"groupByTypes\")) {\n      if (combos && combos.length !== 0) {\n        this.sortCombos();\n      } else {\n        // 为提升性能，选择数量少的进行操作\n        if (data.nodes && data.edges && data.nodes.length < data.edges.length) {\n          const nodesArr = this.getNodes();\n\n          // 遍历节点实例，将所有节点提前。\n          nodesArr.forEach((node) => {\n            node.toFront();\n          });\n        } else {\n          const edgesArr = this.getEdges();\n\n          // 遍历节点实例，将所有节点提前。\n          edgesArr.forEach((edge) => {\n            edge.toBack();\n          });\n        }\n      }\n    }\n\n    if (this.get(\"enabledStack\")) {\n      this.pushStack(\"render\");\n    }\n  }\n\n  /**\n   * 接收数据进行渲染\n   * @Param {Object} data 初始化数据\n   */\n  public read(data: GraphData) {\n    this.data(data);\n    this.render();\n  }\n\n  // 比较item\n  protected diffItems(\n    type: ITEM_TYPE,\n    items: { nodes: INode[]; edges: IEdge[] },\n    models: NodeConfig[] | EdgeConfig[],\n  ) {\n    const self = this;\n    let item: INode;\n    const itemMap: NodeMap = this.get(\"itemMap\");\n\n    each(models, (model) => {\n      item = itemMap[model.id];\n      if (item) {\n        if (self.get(\"animate\") && type === NODE) {\n          let containerMatrix = item.getContainer().getMatrix();\n          if (!containerMatrix) containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n          item.set(\"originAttrs\", {\n            x: containerMatrix[6],\n            y: containerMatrix[7],\n          });\n        }\n\n        self.updateItem(item, model, false);\n      } else {\n        item = self.addItem(type, model, false);\n      }\n      if (item) (items as { [key: string]: any[] })[`${type}s`].push(item);\n    });\n  }\n\n  /**\n   * 更改源数据，根据新数据重新渲染视图\n   * @param {GraphData | TreeGraphData} data 源数据\n   * @param {boolean} 是否入栈，默认为true\n   * @return {object} this\n   */\n  public changeData(\n    data?: GraphData | TreeGraphData,\n    stack: boolean = true,\n  ): AbstractGraph {\n    const self = this;\n    if (!dataValidation(data)) {\n      return this;\n    }\n    if (stack && this.get(\"enabledStack\")) {\n      this.pushStack(\"changedata\", {\n        before: self.save(),\n        after: data,\n      });\n    }\n    this.set(\"comboSorted\", false);\n\n    // 删除 hulls\n    this.removeHulls();\n\n    // 更改数据源后，取消所有状态\n    this.getNodes().map((node) => self.clearItemStates(node));\n    this.getEdges().map((edge) => self.clearItemStates(edge));\n\n    const canvas: ICanvas = this.get(\"canvas\");\n    const localRefresh: boolean = canvas.get(\"localRefresh\");\n    canvas.set(\"localRefresh\", false);\n\n    if (!self.get(\"data\")) {\n      self.data(data);\n      self.render();\n    }\n\n    const itemMap: NodeMap = this.get(\"itemMap\");\n\n    const items: {\n      nodes: INode[];\n      edges: IEdge[];\n    } = {\n      nodes: [],\n      edges: [],\n    };\n\n    const combosData = (data as GraphData).combos;\n    if (combosData) {\n      const comboTrees = plainCombosToTrees(\n        combosData,\n        (data as GraphData).nodes,\n      );\n      this.set(\"comboTrees\", comboTrees);\n    }\n\n    this.diffItems(\"node\", items, (data as GraphData).nodes!);\n\n    each(itemMap, (item: INode & IEdge & ICombo, id: number) => {\n      itemMap[id].getModel().depth = 0;\n      if (item.getType && item.getType() === \"edge\") return;\n      if (item.getType && item.getType() === \"combo\") {\n        delete itemMap[id];\n        item.destroy();\n      } else if (items.nodes.indexOf(item) < 0) {\n        delete itemMap[id];\n        self.remove(item, false);\n      }\n    });\n\n    // clear the destroyed combos here to avoid removing sub nodes before removing the parent combo\n    const comboItems = this.getCombos();\n    const combosLength = comboItems.length;\n    for (let i = combosLength - 1; i >= 0; i--) {\n      if (comboItems[i].destroyed) {\n        comboItems.splice(i, 1);\n      }\n    }\n\n    // process the data to tree structure\n    if (combosData) {\n      // add combos\n      self.addCombos(combosData);\n      if (!this.get(\"groupByTypes\")) {\n        this.sortCombos();\n      }\n    }\n\n    this.diffItems(\"edge\", items, (data as GraphData).edges!);\n    each(itemMap, (item: INode & IEdge & ICombo, id: number) => {\n      if (\n        item.getType &&\n        (item.getType() === \"node\" || item.getType() === \"combo\")\n      )\n        return;\n      if (items.edges.indexOf(item) < 0) {\n        delete itemMap[id];\n        self.remove(item, false);\n      }\n    });\n\n    this.set({ nodes: items.nodes, edges: items.edges });\n\n    const layoutController = this.get(\"layoutController\");\n    if (layoutController) {\n      layoutController.changeData();\n\n      if (self.get(\"animate\") && !layoutController.getLayoutType()) {\n        // 如果没有指定布局\n        self.positionsAnimate();\n      } else {\n        self.autoPaint();\n      }\n    }\n\n    setTimeout(() => {\n      canvas.set(\"localRefresh\", localRefresh);\n    }, 16);\n    return this;\n  }\n\n  /**\n   * 私有方法，在 render 和 changeData 的时候批量添加数据中所有平铺的 combos\n   * @param {ComboConfig[]} combos 平铺的 combos 数据\n   */\n  protected addCombos(combos: ComboConfig[]) {\n    const self = this;\n    const comboTrees = self.get(\"comboTrees\");\n    const itemController: ItemController = this.get(\"itemController\");\n    itemController.addCombos(comboTrees, combos);\n  }\n\n  /**\n   * 根据已经存在的节点或 combo 创建新的 combo\n   * @param combo combo ID 或 Combo 配置\n   * @param children 添加到 Combo 中的元素，包括节点和 combo\n   */\n  public createCombo(combo: string | ComboConfig, children: string[]): void {\n    this.set(\"comboSorted\", false);\n    // step 1: 创建新的 Combo\n    let comboId = \"\";\n    let comboConfig: ComboConfig;\n    if (!combo) return;\n    if (isString(combo)) {\n      comboId = combo;\n      comboConfig = {\n        id: combo,\n      };\n    } else {\n      comboId = combo.id;\n      if (!comboId) {\n        console.warn(\n          \"Create combo failed. Please assign a unique string id for the adding combo.\",\n        );\n        return;\n      }\n      comboConfig = combo;\n    }\n\n    // step2: 更新 children，根据类型添加 comboId 或 parentId\n    const trees: ComboTree[] = children.map((elementId) => {\n      const item = this.findById(elementId);\n      const model = item.getModel();\n\n      let type = \"\";\n      if (item.getType) type = item.getType();\n      const cItem: ComboTree = {\n        id: item.getID(),\n        itemType: type as \"node\" | \"combo\",\n      };\n\n      if (type === \"combo\") {\n        (cItem as ComboConfig).parentId = comboId;\n        model.parentId = comboId;\n      } else if (type === \"node\") {\n        (cItem as NodeConfig).comboId = comboId;\n        model.comboId = comboId;\n      }\n\n      return cItem;\n    });\n\n    comboConfig.children = trees;\n\n    // step 3: 添加 Combo，addItem 时会将子将元素添加到 Combo 中\n    this.addItem(\"combo\", comboConfig, false);\n    this.set(\"comboSorted\", false);\n\n    // step4: 更新 comboTrees 结构\n    const comboTrees = this.get(\"comboTrees\");\n    (comboTrees || []).forEach((ctree) => {\n      traverseTreeUp<ComboTree>(ctree, (child) => {\n        if (child.id === comboId) {\n          child.itemType = \"combo\";\n          child.children = trees as ComboTree[];\n          return false;\n        }\n        return true;\n      });\n    });\n    if (comboTrees) {\n      this.sortCombos();\n    }\n  }\n\n  /**\n   * 解散 combo\n   * @param {String | INode | ICombo} combo 需要被解散的 Combo item 或 id\n   */\n  public uncombo(combo: string | ICombo) {\n    const self = this;\n    let comboItem: ICombo = combo as ICombo;\n    if (isString(combo)) {\n      comboItem = this.findById(combo) as ICombo;\n    }\n\n    if (!comboItem || (comboItem.getType && comboItem.getType() !== \"combo\")) {\n      console.warn(\"The item is not a combo!\");\n      return;\n    }\n\n    const parentId = comboItem.getModel().parentId;\n    let comboTrees = self.get(\"comboTrees\");\n    if (!comboTrees) comboTrees = [];\n    const itemMap = this.get(\"itemMap\");\n    const comboId = comboItem.get(\"id\");\n    let treeToBeUncombo;\n    let brothers = [];\n    const comboItems = this.get(\"combos\");\n    const parentItem = this.findById(parentId as string) as ICombo;\n\n    comboTrees.forEach((ctree) => {\n      if (treeToBeUncombo) return; // terminate the forEach\n      traverseTreeUp<ComboTree>(ctree, (subtree) => {\n        // find the combo to be uncomboed, delete the combo from map and cache\n        if (subtree.id === comboId) {\n          treeToBeUncombo = subtree;\n          // delete the related edges\n          const edges = comboItem.getEdges();\n          edges.forEach((edge) => {\n            this.removeItem(edge, false);\n          });\n          const index = comboItems.indexOf(combo);\n          comboItems.splice(index, 1);\n          delete itemMap[comboId];\n          comboItem.destroy();\n        }\n        // find the parent to remove the combo from the combo's brothers array and add the combo's children to the combo's brothers array in the tree\n        if (parentId && treeToBeUncombo && subtree.id === parentId) {\n          parentItem.removeCombo(comboItem);\n          brothers = subtree.children; // the combo's brothers\n          // remove the combo from its brothers array\n          const index = brothers.indexOf(treeToBeUncombo);\n          if (index !== -1) {\n            brothers.splice(index, 1);\n          }\n\n          // append the combo's children to the combo's brothers array\n          treeToBeUncombo.children.forEach((child) => {\n            const item = this.findById(child.id) as ICombo | INode;\n            const childModel = item.getModel();\n            if (item.getType && item.getType() === \"combo\") {\n              child.parentId = parentId;\n              delete child.comboId;\n              childModel.parentId = parentId; // update the parentId of the model\n              delete childModel.comboId;\n            } else if (item.getType && item.getType() === \"node\") {\n              child.comboId = parentId;\n              childModel.comboId = parentId; // update the parentId of the model\n            }\n            parentItem.addChild(item);\n            brothers.push(child);\n          });\n          return false;\n        }\n        return true;\n      });\n    });\n\n    // if the parentId is not found, remove the combo from the roots\n    if (!parentId && treeToBeUncombo) {\n      const index = comboTrees.indexOf(treeToBeUncombo);\n      comboTrees.splice(index, 1);\n      // modify the parentId of the children\n      treeToBeUncombo.children.forEach((child) => {\n        child.parentId = undefined;\n        const childModel = this.findById(child.id).getModel();\n        delete childModel.parentId; // update the parentId of the model\n        delete childModel.comboId; // update the comboId of the model\n        if (child.itemType !== \"node\") comboTrees.push(child);\n      });\n    }\n  }\n\n  /**\n   * 根据节点的 bbox 更新所有 combos 的绘制，包括 combos 的位置和范围\n   */\n  public updateCombos() {\n    const self = this;\n    const comboTrees = this.get(\"comboTrees\");\n    const itemController: ItemController = self.get(\"itemController\");\n\n    const itemMap = self.get(\"itemMap\");\n    (comboTrees || []).forEach((ctree: ComboTree) => {\n      traverseTreeUp<ComboTree>(ctree, (child) => {\n        if (!child) {\n          return true;\n        }\n        const childItem = itemMap[child.id];\n        if (childItem && childItem.getType && childItem.getType() === \"combo\") {\n          // 更新具体的 Combo 之前先清除所有的已有状态，以免将 state 中的样式更新为 Combo 的样式\n          const states = [...childItem.getStates()];\n          each(states, (state) => this.setItemState(childItem, state, false));\n\n          // 更新具体的 Combo\n          itemController.updateCombo(childItem, child.children);\n\n          // 更新 Combo 后，还原已有的状态\n          each(states, (state) => this.setItemState(childItem, state, true));\n        }\n        return true;\n      });\n    });\n    self.sortCombos();\n  }\n\n  /**\n   * 根据节点的 bbox 更新 combo 及其祖先 combos 的绘制，包括 combos 的位置和范围\n   * @param {String | ICombo} combo 需要被更新的 Combo 或 id，若指定，则该 Combo 及所有祖先 Combod 都会被更新\n   */\n  public updateCombo(combo: string | ICombo) {\n    const self = this;\n\n    let comboItem: ICombo = combo as ICombo;\n    let comboId;\n    if (isString(combo)) {\n      comboItem = this.findById(combo) as ICombo;\n    }\n    if (!comboItem || (comboItem.getType && comboItem.getType() !== \"combo\")) {\n      console.warn(\"The item to be updated is not a combo!\");\n      return;\n    }\n    comboId = comboItem.get(\"id\");\n\n    const comboTrees = this.get(\"comboTrees\");\n    const itemController: ItemController = self.get(\"itemController\");\n\n    const itemMap = self.get(\"itemMap\");\n    (comboTrees || []).forEach((ctree: ComboTree) => {\n      traverseTreeUp<ComboTree>(ctree, (child) => {\n        if (!child) {\n          return true;\n        }\n        const childItem = itemMap[child.id];\n        if (\n          comboId === child.id &&\n          childItem &&\n          childItem.getType &&\n          childItem.getType() === \"combo\"\n        ) {\n          // 更新具体的 Combo 之前先清除所有的已有状态，以免将 state 中的样式更新为 Combo 的样式\n          const states = [...childItem.getStates()];\n          // || !item.getStateStyle(stateName)\n          each(states, (state) => {\n            if (childItem.getStateStyle(state)) {\n              this.setItemState(childItem, state, false);\n            }\n          });\n\n          // 更新具体的 Combo\n          itemController.updateCombo(childItem, child.children);\n\n          // 更新 Combo 后，还原已有的状态\n          each(states, (state) => {\n            if (childItem.getStateStyle(state)) {\n              this.setItemState(childItem, state, true);\n            }\n          });\n\n          if (comboId) comboId = child.parentId;\n        }\n        return true;\n      });\n    });\n  }\n\n  /**\n   * 更新树结构，例如移动子树等\n   * @param {String | INode | ICombo} item 需要被更新的 Combo 或 节点 id\n   * @param {string | undefined} parentId 新的父 combo id，undefined 代表没有父 combo\n   */\n  public updateComboTree(\n    item: string | INode | ICombo,\n    parentId?: string | undefined,\n    stack: boolean = true,\n  ) {\n    const self = this;\n    this.set(\"comboSorted\", false);\n    let uItem: INode | ICombo;\n    if (isString(item)) {\n      uItem = self.findById(item) as INode | ICombo;\n    } else {\n      uItem = item as INode | ICombo;\n    }\n\n    const model = uItem.getModel();\n    const oldParentId = (model.comboId as string) || (model.parentId as string);\n\n    let type = \"\";\n    if (uItem.getType) type = uItem.getType();\n\n    // 若 item 是 Combo，且 parentId 是其子孙 combo 的 id，则警告并终止\n    if (parentId && type === \"combo\") {\n      const comboTrees = this.get(\"comboTrees\");\n      let valid = true;\n      let itemSubTree;\n      (comboTrees || []).forEach((ctree) => {\n        if (itemSubTree) return;\n        traverseTree(ctree, (subTree) => {\n          if (itemSubTree) return;\n          // 找到从 item 开始的子树\n          if (subTree.id === uItem.getID()) {\n            itemSubTree = subTree;\n          }\n          return true;\n        });\n      });\n      // 在以 item 为根的子树中寻找与 parentId 相同的后继元素\n      traverseTree(itemSubTree, (subTree) => {\n        if (subTree.id === parentId) {\n          valid = false;\n          return false;\n        }\n        return true;\n      });\n      // parentId 是 item 的一个后继元素，不能进行更新\n      if (!valid) {\n        console.warn(\n          \"Failed to update the combo tree! The parentId points to a descendant of the combo!\",\n        );\n        return;\n      }\n    }\n\n    if (stack && this.get(\"enabledStack\")) {\n      const beforeData: GraphData = {},\n        afterData: GraphData = {};\n      if (type === \"combo\") {\n        beforeData.combos = [\n          {\n            id: model.id,\n            parentId: (model as ComboConfig).parentId,\n          },\n        ];\n        afterData.combos = [\n          {\n            id: model.id,\n            parentId,\n          },\n        ];\n      } else if (type === \"node\") {\n        beforeData.nodes = [\n          {\n            id: model.id,\n            parentId: (model as NodeConfig).comboId,\n          },\n        ];\n        afterData.nodes = [\n          {\n            id: model.id,\n            parentId,\n          },\n        ];\n      }\n      this.pushStack(\"updateComboTree\", {\n        before: beforeData,\n        after: afterData,\n      });\n    }\n\n    // 当 combo 存在 parentId 或 comboId 时，才将其移除\n    if (model.parentId || model.comboId) {\n      const combo = this.findById(\n        (model.parentId || model.comboId) as string,\n      ) as ICombo;\n      if (combo) {\n        combo.removeChild(uItem);\n      }\n    }\n\n    if (type === \"combo\") {\n      model.parentId = parentId;\n    } else if (type === \"node\") {\n      model.comboId = parentId;\n    }\n\n    // 只有当移入到指定 combo 时才添加\n    if (parentId) {\n      const parentCombo = this.findById(parentId) as ICombo;\n      if (parentCombo) {\n        // 将元素添加到 parentCombo 中\n        parentCombo.addChild(uItem as ICombo | INode);\n      }\n    }\n    // 如果原先有父亲 combo，则从原父 combo 的子元素数组中删除\n    if (oldParentId) {\n      const parentCombo = this.findById(oldParentId) as ICombo;\n      if (parentCombo) {\n        // 将元素从 parentCombo 中移除\n        parentCombo.removeChild(uItem as ICombo | INode);\n      }\n    }\n\n    const newComboTrees = reconstructTree(\n      this.get(\"comboTrees\"),\n      model.id,\n      parentId,\n    );\n    this.set(\"comboTrees\", newComboTrees);\n\n    this.updateCombos();\n  }\n\n  /**\n   * 导出图数据\n   * @return {object} data\n   */\n  public save(): GraphData | TreeGraphData {\n    const nodes: NodeConfig[] = [];\n    const edges: EdgeConfig[] = [];\n    const combos: ComboConfig[] = [];\n    each(this.get(\"nodes\"), (node: INode) => {\n      nodes.push(node.getModel() as NodeConfig);\n    });\n\n    each(this.get(\"edges\"), (edge: IEdge) => {\n      edges.push(edge.getModel() as EdgeConfig);\n    });\n\n    each(this.get(\"combos\"), (combo: ICombo) => {\n      combos.push(combo.getModel() as ComboConfig);\n    });\n\n    return { nodes, edges, combos };\n  }\n\n  /**\n   * 改变画布大小\n   * @param  {number} width  画布宽度\n   * @param  {number} height 画布高度\n   * @return {object} this\n   */\n  public changeSize(width: number, height: number): AbstractGraph {\n    const viewController: ViewController = this.get(\"viewController\");\n    viewController.changeSize(width, height);\n    return this;\n  }\n\n  /**\n   * 当源数据在外部发生变更时，根据新数据刷新视图。但是不刷新节点位置\n   */\n  public refresh(): void {\n    const self = this;\n\n    self.emit(\"beforegraphrefresh\");\n\n    if (self.get(\"animate\")) {\n      self.positionsAnimate();\n    } else {\n      const nodes: INode[] = self.get(\"nodes\");\n      const edges: IEdge[] = self.get(\"edges\");\n      const vedges: IEdge[] = self.get(\"edges\");\n\n      each(nodes, (node: INode) => {\n        node.refresh();\n      });\n\n      each(edges, (edge: IEdge) => {\n        edge.refresh();\n      });\n\n      each(vedges, (vedge: IEdge) => {\n        vedge.refresh();\n      });\n    }\n\n    self.emit(\"aftergraphrefresh\");\n    self.autoPaint();\n  }\n\n  /**\n   * 获取当前图中所有节点的item实例\n   * @return {INode} item数组\n   */\n  public getNodes(): INode[] {\n    return this.get(\"nodes\");\n  }\n\n  /**\n   * 获取当前图中所有边的item实例\n   * @return {IEdge} item数组\n   */\n  public getEdges(): IEdge[] {\n    return this.get(\"edges\");\n  }\n\n  /**\n   * 获取图中所有的 combo 实例\n   */\n  public getCombos(): ICombo[] {\n    return this.get(\"combos\");\n  }\n\n  /**\n   * 获取指定 Combo 中所有的节点\n   * @param comboId combo ID\n   */\n  public getComboChildren(combo: string | ICombo): {\n    nodes: INode[];\n    combos: ICombo[];\n  } {\n    if (isString(combo)) {\n      combo = this.findById(combo) as ICombo;\n    }\n    if (!combo || (combo.getType && combo.getType() !== \"combo\")) {\n      console.warn(\"The combo does not exist!\");\n      return;\n    }\n    return combo.getChildren();\n  }\n\n  /**\n   * 根据 graph 上的 animateCfg 进行视图中节点位置动画接口\n   */\n  public positionsAnimate(): void {\n    const self = this;\n    self.emit(\"beforeanimate\");\n\n    const animateCfg: GraphAnimateConfig = self.get(\"animateCfg\");\n\n    const { onFrame } = animateCfg;\n\n    const nodes = self.getNodes();\n\n    const toNodes = nodes.map((node) => {\n      const model = node.getModel();\n      return {\n        id: model.id,\n        x: model.x,\n        y: model.y,\n      };\n    });\n\n    if (self.isAnimating()) {\n      self.stopAnimate();\n    }\n\n    const canvas: ICanvas = self.get(\"canvas\");\n\n    canvas.animate(\n      (ratio: number) => {\n        each(toNodes, (data) => {\n          const node: Item = self.findById(data.id);\n\n          if (!node || node.destroyed) {\n            return;\n          }\n\n          let originAttrs: Point = node.get(\"originAttrs\");\n\n          const model: NodeConfig = node.get(\"model\");\n\n          if (!originAttrs) {\n            let containerMatrix = node.getContainer().getMatrix();\n            if (!containerMatrix) containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n            originAttrs = {\n              x: containerMatrix[6],\n              y: containerMatrix[7],\n            };\n            node.set(\"originAttrs\", originAttrs);\n          }\n\n          if (onFrame) {\n            const attrs = onFrame(node, ratio, data, originAttrs);\n            node.set(\"model\", Object.assign(model, attrs));\n          } else {\n            model.x = originAttrs.x + (data.x - originAttrs.x) * ratio;\n            model.y = originAttrs.y + (data.y - originAttrs.y) * ratio;\n          }\n        });\n\n        self.refreshPositions();\n      },\n      {\n        duration: animateCfg.duration,\n        easing: animateCfg.easing,\n        callback: () => {\n          each(nodes, (node: INode) => {\n            node.set(\"originAttrs\", null);\n          });\n\n          if (animateCfg.callback) {\n            animateCfg.callback();\n          }\n          self.emit(\"afteranimate\");\n          self.animating = false;\n        },\n      },\n    );\n  }\n\n  /**\n   * 当节点位置在外部发生改变时，刷新所有节点位置，重计算边\n   */\n  public refreshPositions() {\n    const self = this;\n    self.emit(\"beforegraphrefreshposition\");\n\n    const nodes: INode[] = self.get(\"nodes\");\n    const edges: IEdge[] = self.get(\"edges\");\n    const vedges: IEdge[] = self.get(\"vedges\");\n    const combos: ICombo[] = self.get(\"combos\");\n\n    let model: NodeConfig;\n\n    const updatedNodes: { [key: string]: boolean } = {};\n\n    each(nodes, (node: INode) => {\n      model = node.getModel() as NodeConfig;\n      const originAttrs = node.get(\"originAttrs\");\n      if (\n        originAttrs &&\n        model.x === originAttrs.x &&\n        model.y === originAttrs.y\n      ) {\n        return;\n      }\n      const changed = node.updatePosition({ x: model.x!, y: model.y! });\n      updatedNodes[model.id] = changed;\n      if (model.comboId)\n        updatedNodes[model.comboId] = updatedNodes[model.comboId] || changed;\n    });\n\n    if (combos && combos.length !== 0) {\n      self.updateCombos();\n    }\n\n    each(edges, (edge: IEdge) => {\n      const sourceModel = edge.getSource().getModel();\n      const target = edge.getTarget();\n      // 避免 target 是纯对象的情况下调用 getModel 方法\n      // 拖动生成边的时候 target 会是纯对象\n      if (!isPlainObject(target)) {\n        const targetModel = (target as INode | ICombo).getModel();\n        if (\n          updatedNodes[sourceModel.id as string] ||\n          updatedNodes[targetModel.id as string] ||\n          edge.getModel().isComboEdge\n        ) {\n          edge.refresh();\n        }\n      }\n    });\n\n    each(vedges, (vedge: IEdge) => {\n      vedge.refresh();\n    });\n\n    self.emit(\"aftergraphrefreshposition\");\n    self.autoPaint();\n  }\n\n  public stopAnimate(): void {\n    this.get(\"canvas\").stopAnimate();\n  }\n\n  public isAnimating(): boolean {\n    return this.animating;\n  }\n\n  /**\n   * 获取当前视口伸缩比例\n   * @return {number} 比例\n   */\n  public getZoom(): number {\n    const matrix = this.get(\"group\").getMatrix();\n    return matrix ? matrix[0] : 1;\n  }\n\n  /**\n   * 获取当前的行为模式\n   * @return {string} 当前行为模式\n   */\n  public getCurrentMode(): string {\n    const modeController: ModeController = this.get(\"modeController\");\n    return modeController.getMode();\n  }\n\n  /**\n   * 切换行为模式\n   * @param {string} mode 指定模式\n   * @return {object} this\n   */\n  public setMode(mode: string): AbstractGraph {\n    const modeController: ModeController = this.get(\"modeController\");\n    modeController.setMode(mode);\n    return this;\n  }\n\n  /**\n   * 清除画布元素\n   * @return {object} this\n   */\n  public clear(avoidEmit: boolean = false): AbstractGraph {\n    const canvas: ICanvas = this.get(\"canvas\");\n    canvas.clear();\n\n    this.initGroups();\n\n    // 清空画布时同时清除数据\n    this.set({\n      itemMap: {},\n      nodes: [],\n      edges: [],\n      groups: [],\n      combos: [],\n      comboTrees: [],\n    });\n    if (!avoidEmit) this.emit(\"afterrender\");\n    return this;\n  }\n\n  /**\n   * 更换布局配置项\n   * @param {object} cfg 新布局配置项\n   * 若 cfg 含有 type 字段或为 String 类型，且与现有布局方法不同，则更换布局\n   * 若 cfg 不包括 type ，则保持原有布局方法，仅更新布局配置项\n   */\n  public updateLayout(cfg: any): void {\n    const layoutController = this.get(\"layoutController\");\n\n    if (isString(cfg)) {\n      cfg = {\n        type: cfg,\n      };\n    }\n\n    const oriLayoutCfg = this.get(\"layout\");\n    const layoutCfg: any = {};\n    Object.assign(layoutCfg, oriLayoutCfg, cfg);\n    this.set(\"layout\", layoutCfg);\n\n    if (\n      layoutController.isLayoutTypeSame(layoutCfg) &&\n      layoutCfg.gpuEnabled === oriLayoutCfg.gpuEnabled\n    ) {\n      // no type or same type, or switch the gpu and cpu, update layout\n      layoutController.updateLayoutCfg(layoutCfg);\n    } else {\n      // has different type, change layout\n      layoutController.changeLayout(layoutCfg);\n    }\n  }\n\n  /**\n   * 销毁布局，changeData 时不会再使用原来的布局方法对新数据进行布局\n   */\n  public destroyLayout(): void {\n    const layoutController = this.get(\"layoutController\");\n    layoutController.destroyLayout();\n  }\n\n  /**\n   * 重新以当前示例中配置的属性进行一次布局\n   */\n  public layout(): void {\n    const layoutController = this.get(\"layoutController\");\n    const layoutCfg = this.get(\"layout\");\n    if (!layoutCfg || !layoutController) return;\n\n    if (layoutCfg.workerEnabled) {\n      // 如果使用web worker布局\n      layoutController.layout();\n      return;\n    }\n    if (layoutController.layoutMethod) {\n      layoutController.relayout(true);\n    } else {\n      layoutController.layout();\n    }\n  }\n\n  /**\n   * 收起指定的 combo\n   * @param {string | ICombo} combo combo ID 或 combo item\n   */\n  public collapseCombo(combo: string | ICombo): void {\n    if (isString(combo)) {\n      combo = this.findById(combo) as ICombo;\n    }\n    if (!combo) {\n      console.warn(\"The combo to be collapsed does not exist!\");\n      return;\n    }\n    this.emit(\"beforecollapseexpandcombo\", { action: \"expand\", item: combo });\n\n    const comboModel = combo.getModel();\n\n    const itemController: ItemController = this.get(\"itemController\");\n    itemController.collapseCombo(combo);\n    comboModel.collapsed = true;\n\n    // add virtual edges\n    const edges = this.getEdges().concat(this.get(\"vedges\"));\n\n    // find all the descendant nodes and combos\n    let cnodes = [];\n    let ccombos = [];\n    const comboTrees = this.get(\"comboTrees\");\n    let found = false;\n    (comboTrees || []).forEach((ctree) => {\n      if (found) return; // if the combo is found, terminate the forEach\n      traverseTree(ctree, (subTree) => {\n        // if the combo is found and it is traversing the other branches, terminate\n        if (found && subTree.depth <= comboModel.depth) return false;\n        // if the combo is found\n        if (comboModel.id === subTree.id) found = true;\n        if (found) {\n          // if the combo is found, concat the descendant nodes and combos\n          const item = this.findById(subTree.id) as ICombo;\n          if (item && item.getType && item.getType() === \"combo\") {\n            cnodes = cnodes.concat(item.getNodes());\n            ccombos = ccombos.concat(item.getCombos());\n          }\n        }\n        return true;\n      });\n    });\n\n    const edgeWeightMap = {};\n    const addedVEdges = [];\n    edges.forEach((edge) => {\n      if (edge.isVisible() && !edge.getModel().isVEdge) return;\n      let source = edge.getSource();\n      let target = edge.getTarget();\n      if (\n        ((cnodes.includes(source) || ccombos.includes(source)) &&\n          !cnodes.includes(target) &&\n          !ccombos.includes(target)) ||\n        source.getModel().id === comboModel.id\n      ) {\n        const edgeModel = edge.getModel();\n        if (edgeModel.isVEdge) {\n          this.removeItem(edge, false);\n          return;\n        }\n\n        let targetModel = target.getModel();\n        while (!target.isVisible()) {\n          target = this.findById(\n            (targetModel.parentId as string) || (targetModel.comboId as string),\n          ) as ICombo;\n          if (!target || (!targetModel.parentId && !targetModel.comboId))\n            return; // all the ancestors are hidden, then ignore the edge\n          targetModel = target.getModel();\n        }\n\n        const targetId = targetModel.id;\n\n        if (edgeWeightMap[`${comboModel.id}-${targetId}`]) {\n          edgeWeightMap[`${comboModel.id}-${targetId}`] += edgeModel.size || 1;\n          return;\n        }\n        // the source is in the combo, the target is not\n        const vedge = this.addItem(\n          \"vedge\",\n          {\n            source: comboModel.id,\n            target: targetId,\n            isVEdge: true,\n          },\n          false,\n        );\n        edgeWeightMap[`${comboModel.id}-${targetId}`] = edgeModel.size || 1;\n        addedVEdges.push(vedge);\n      } else if (\n        (!cnodes.includes(source) &&\n          !ccombos.includes(source) &&\n          (cnodes.includes(target) || ccombos.includes(target))) ||\n        target.getModel().id === comboModel.id\n      ) {\n        const edgeModel = edge.getModel();\n        if (edgeModel.isVEdge) {\n          this.removeItem(edge, false);\n          return;\n        }\n        let sourceModel = source.getModel();\n        while (!source.isVisible()) {\n          source = this.findById(\n            (sourceModel.parentId as string) || (sourceModel.comboId as string),\n          ) as ICombo;\n          if (!source || (!sourceModel.parentId && !sourceModel.comboId))\n            return; // all the ancestors are hidden, then ignore the edge\n          sourceModel = source.getModel();\n        }\n        const sourceId = sourceModel.id;\n        if (edgeWeightMap[`${sourceId}-${comboModel.id}`]) {\n          edgeWeightMap[`${sourceId}-${comboModel.id}`] += edgeModel.size || 1;\n          return;\n        }\n        // the target is in the combo, the source is not\n        const vedge = this.addItem(\n          \"vedge\",\n          {\n            target: comboModel.id,\n            source: sourceId,\n            isVEdge: true,\n          },\n          false,\n        );\n        edgeWeightMap[`${sourceId}-${comboModel.id}`] = edgeModel.size || 1;\n        addedVEdges.push(vedge);\n      }\n    });\n\n    // update the width of the virtual edges, which is the sum of merged actual edges\n    // be attention that the actual edges with same endpoints but different directions will be represented by two different virtual edges\n    addedVEdges.forEach((vedge) => {\n      const vedgeModel = vedge.getModel();\n      this.updateItem(\n        vedge,\n        {\n          size: edgeWeightMap[`${vedgeModel.source}-${vedgeModel.target}`],\n        },\n        false,\n      );\n    });\n    this.emit(\"aftercollapseexpandcombo\", { action: \"collapse\", item: combo });\n  }\n\n  /**\n   * 展开指定的 combo\n   * @param {string | ICombo} combo combo ID 或 combo item\n   */\n  public expandCombo(combo: string | ICombo): void {\n    if (isString(combo)) {\n      combo = this.findById(combo) as ICombo;\n    }\n    if (!combo || (combo.getType && combo.getType() !== \"combo\")) {\n      console.warn(\"The combo to be collapsed does not exist!\");\n      return;\n    }\n    this.emit(\"beforecollapseexpandcombo\", { action: \"expand\", item: combo });\n\n    const comboModel = combo.getModel();\n\n    const itemController: ItemController = this.get(\"itemController\");\n    itemController.expandCombo(combo);\n    comboModel.collapsed = false;\n\n    // add virtual edges\n    const edges = this.getEdges().concat(this.get(\"vedges\"));\n\n    // find all the descendant nodes and combos\n    let cnodes = [];\n    let ccombos = [];\n    const comboTrees = this.get(\"comboTrees\");\n    let found = false;\n    (comboTrees || []).forEach((ctree) => {\n      if (found) return; // if the combo is found, terminate\n      traverseTree(ctree, (subTree) => {\n        // if the combo is found and it is traversing the other branches, terminate\n        if (found && subTree.depth <= comboModel.depth) return false;\n        if (comboModel.id === subTree.id) found = true;\n        if (found) {\n          const item = this.findById(subTree.id) as ICombo;\n          if (item && item.getType && item.getType() === \"combo\") {\n            cnodes = cnodes.concat(item.getNodes());\n            ccombos = ccombos.concat(item.getCombos());\n          }\n        }\n        return true;\n      });\n    });\n\n    const edgeWeightMap = {};\n    const addedVEdges = {};\n    edges.forEach((edge) => {\n      if (edge.isVisible() && !edge.getModel().isVEdge) return;\n      let source = edge.getSource();\n      let target = edge.getTarget();\n      let sourceId = source.get(\"id\");\n      let targetId = target.get(\"id\");\n      if (\n        ((cnodes.includes(source) || ccombos.includes(source)) &&\n          !cnodes.includes(target) &&\n          !ccombos.includes(target)) ||\n        sourceId === comboModel.id\n      ) {\n        // the source is in the combo, the target is not\n\n        // ignore the virtual edges\n        if (edge.getModel().isVEdge) {\n          this.removeItem(edge, false);\n          return;\n        }\n\n        let targetModel = target.getModel();\n        // find the nearest visible ancestor\n        while (!target.isVisible()) {\n          target = this.findById(\n            (targetModel.comboId as string) || (targetModel.parentId as string),\n          ) as ICombo;\n          if (!target || (!targetModel.parentId && !targetModel.comboId)) {\n            return; // if all the ancestors of the oppsite are all hidden, ignore the edge\n          }\n          targetModel = target.getModel();\n        }\n        targetId = targetModel.id;\n\n        let sourceModel = source.getModel();\n        // find the nearest visible ancestor\n        while (!source.isVisible()) {\n          source = this.findById(\n            (sourceModel.comboId as string) || (sourceModel.parentId as string),\n          ) as ICombo;\n          if (!source || (!sourceModel.parentId && !sourceModel.comboId)) {\n            return; // if all the ancestors of the oppsite are all hidden, ignore the edge\n          }\n          if (\n            sourceModel.comboId === comboModel.id ||\n            sourceModel.parentId === comboModel.id\n          ) {\n            break; // if the next ancestor is the combo, break the while\n          }\n          sourceModel = source.getModel();\n        }\n        sourceId = sourceModel.id;\n\n        if (targetId) {\n          const vedgeId = `${sourceId}-${targetId}`;\n          // update the width of the virtual edges, which is the sum of merged actual edges\n          // be attention that the actual edges with same endpoints but different directions will be represented by two different virtual edges\n          if (edgeWeightMap[vedgeId]) {\n            edgeWeightMap[vedgeId] += edge.getModel().size || 1;\n            this.updateItem(\n              addedVEdges[vedgeId],\n              {\n                size: edgeWeightMap[vedgeId],\n              },\n              false,\n            );\n            return;\n          }\n          const vedge = this.addItem(\n            \"vedge\",\n            {\n              source: sourceId,\n              target: targetId,\n              isVEdge: true,\n            },\n            false,\n          );\n\n          edgeWeightMap[vedgeId] = edge.getModel().size || 1;\n          addedVEdges[vedgeId] = vedge;\n        }\n      } else if (\n        (!cnodes.includes(source) &&\n          !ccombos.includes(source) &&\n          (cnodes.includes(target) || ccombos.includes(target))) ||\n        targetId === comboModel.id\n      ) {\n        // the target is in the combo, the source is not\n\n        // ignore the virtual edges\n        if (edge.getModel().isVEdge) {\n          this.removeItem(edge, false);\n          return;\n        }\n\n        let sourceModel = source.getModel();\n        // find the nearest visible ancestor\n        while (!source.isVisible()) {\n          source = this.findById(\n            (sourceModel.comboId as string) || (sourceModel.parentId as string),\n          ) as ICombo;\n          if (!source || (!sourceModel.parentId && !sourceModel.comboId)) {\n            return; // if all the ancestors of the oppsite are all hidden, ignore the edge\n          }\n          sourceModel = source.getModel();\n        }\n        sourceId = sourceModel.id;\n\n        let targetModel = target.getModel();\n        // find the nearest visible ancestor\n        while (!target.isVisible()) {\n          target = this.findById(\n            (targetModel.comboId as string) || (targetModel.parentId as string),\n          ) as ICombo;\n          if (!target || (!targetModel.parentId && !targetModel.comboId)) {\n            return; // if all the ancestors of the oppsite are all hidden, ignore the edge\n          }\n          if (\n            targetModel.comboId === comboModel.id ||\n            targetModel.parentId === comboModel.id\n          ) {\n            break; // if the next ancestor is the combo, break the while\n          }\n          targetModel = target.getModel();\n        }\n        targetId = targetModel.id;\n\n        if (sourceId) {\n          const vedgeId = `${sourceId}-${targetId}`;\n          // update the width of the virtual edges, which is the sum of merged actual edges\n          // be attention that the actual edges with same endpoints but different directions will be represented by two different virtual edges\n          if (edgeWeightMap[vedgeId]) {\n            edgeWeightMap[vedgeId] += edge.getModel().size || 1;\n            this.updateItem(\n              addedVEdges[vedgeId],\n              {\n                size: edgeWeightMap[vedgeId],\n              },\n              false,\n            );\n            return;\n          }\n          const vedge = this.addItem(\n            \"vedge\",\n            {\n              target: targetId,\n              source: sourceId,\n              isVEdge: true,\n            },\n            false,\n          );\n          edgeWeightMap[vedgeId] = edge.getModel().size || 1;\n          addedVEdges[vedgeId] = vedge;\n        }\n      } else if (\n        (cnodes.includes(source) || ccombos.includes(source)) &&\n        (cnodes.includes(target) || ccombos.includes(target))\n      ) {\n        // both source and target are in the combo, if the target and source are both visible, show the edge\n        if (source.isVisible() && target.isVisible()) {\n          edge.show();\n        }\n      }\n    });\n    this.emit(\"aftercollapseexpandcombo\", { action: \"expand\", item: combo });\n  }\n\n  public collapseExpandCombo(combo: string | ICombo) {\n    if (isString(combo)) {\n      combo = this.findById(combo) as ICombo;\n    }\n    if (!combo || (combo.getType && combo.getType() !== \"combo\")) return;\n\n    const comboModel = combo.getModel();\n\n    // if one ancestor combo of the combo is collapsed, it should not be collapsed or expanded\n    let parentItem = this.findById(comboModel.parentId as string);\n    while (parentItem) {\n      const parentModel = parentItem.getModel();\n      if (parentModel.collapsed) {\n        console.warn(\n          `Fail to expand the combo since it's ancestor combo is collapsed.`,\n        );\n        parentItem = undefined;\n        return;\n      }\n      parentItem = this.findById(parentModel.parentId as string);\n    }\n    const collapsed = comboModel.collapsed;\n    // 该群组已经处于收起状态，需要展开\n    if (collapsed) {\n      this.expandCombo(combo);\n    } else {\n      this.collapseCombo(combo);\n    }\n    this.updateCombo(combo);\n  }\n\n  /**\n   * 根据 comboTree 结构整理 Combo 相关的图形绘制层级，包括 Combo 本身、节点、边\n   * @param {GraphData} data 数据\n   */\n  protected sortCombos() {\n    const comboSorted = this.get(\"comboSorted\");\n    if (comboSorted) return;\n    this.set(\"comboSorted\", true);\n    const depthMap = [];\n    const dataDepthMap = {};\n    const comboTrees = this.get(\"comboTrees\");\n    (comboTrees || []).forEach((cTree) => {\n      traverseTree(cTree, (child) => {\n        if (depthMap[child.depth]) depthMap[child.depth].push(child.id);\n        else depthMap[child.depth] = [child.id];\n        dataDepthMap[child.id] = child.depth;\n        return true;\n      });\n    });\n    const edges = this.getEdges().concat(this.get(\"vedges\"));\n    (edges || []).forEach((edgeItem) => {\n      const edge = edgeItem.getModel();\n      const sourceDepth: number = dataDepthMap[edge.source as string] || 0;\n      const targetDepth: number = dataDepthMap[edge.target as string] || 0;\n      const depth = Math.max(sourceDepth, targetDepth);\n      if (depthMap[depth]) depthMap[depth].push(edge.id);\n      else depthMap[depth] = [edge.id];\n    });\n    depthMap.forEach((array) => {\n      if (!array || !array.length) return;\n      for (let i = array.length - 1; i >= 0; i--) {\n        const item = this.findById(array[i]);\n        if (item) item.toFront();\n      }\n    });\n  }\n\n  /**\n   * 获取节点所有的邻居节点\n   *\n   * @param {(string | INode)} node 节点 ID 或实例\n   * @returns {INode[]}\n   * @memberof IAbstractGraph\n   */\n  public getNeighbors(\n    node: string | INode,\n    type?: \"source\" | \"target\" | undefined,\n  ): INode[] {\n    let item = node as INode;\n    if (isString(node)) {\n      item = this.findById(node) as INode;\n    }\n    return item.getNeighbors(type);\n  }\n\n  /**\n   * 获取 node 的度数\n   *\n   * @param {(string | INode)} node 节点 ID 或实例\n   * @param {('in' | 'out' | 'total' | 'all' | undefined)} 度数类型，in 入度，out 出度，total 总度数，all 返回三种类型度数的对象\n   * @returns {Number | Object} 该节点的度数\n   * @memberof IAbstractGraph\n   */\n  public getNodeDegree(\n    node: string | INode,\n    type: \"in\" | \"out\" | \"total\" | \"all\" | undefined = undefined,\n    refresh: boolean = false,\n  ): Number | Object {\n    let item = node as INode;\n    if (isString(node)) {\n      item = this.findById(node) as INode;\n    }\n    let degrees = this.get(\"degrees\");\n    if (!degrees || refresh) {\n      degrees = getDegree(this.save() as any);\n      this.set(\"degrees\", degrees);\n    }\n    const nodeDegrees = degrees[item.getID()];\n\n    let res = 0;\n    // 如果是通过 addItem 后面新增加的节点，此时它的所有度数都为 0\n    if (!nodeDegrees) {\n      return 0;\n    }\n\n    switch (type) {\n      case \"in\":\n        res = nodeDegrees.inDegree;\n        break;\n      case \"out\":\n        res = nodeDegrees.outDegree;\n        break;\n      case \"all\":\n        res = nodeDegrees;\n        break;\n      default:\n        res = nodeDegrees.degree;\n        break;\n    }\n    return res;\n  }\n\n  public getUndoStack() {\n    return this.undoStack;\n  }\n\n  public getRedoStack() {\n    return this.redoStack;\n  }\n\n  /**\n   * 获取 undo 和 redo 栈的数据\n   */\n  public getStackData() {\n    if (!this.get(\"enabledStack\")) {\n      return null;\n    }\n\n    return {\n      undoStack: this.undoStack.toArray(),\n      redoStack: this.redoStack.toArray(),\n    };\n  }\n\n  /**\n   * 清空 undo stack & redo stack\n   */\n  public clearStack() {\n    if (this.get(\"enabledStack\")) {\n      this.undoStack.clear();\n      this.redoStack.clear();\n    }\n  }\n\n  /**\n   * 将操作类型和操作数据入栈\n   * @param action 操作类型\n   * @param data 入栈的数据\n   * @param stackType 栈的类型\n   */\n  public pushStack(\n    action: string = \"update\",\n    data?: unknown,\n    stackType: string = \"undo\",\n  ) {\n    if (!this.get(\"enabledStack\")) {\n      console.warn(\n        \"请先启用 undo & redo 功能，在实例化 Graph 时候配置 enabledStack: true !\",\n      );\n      return;\n    }\n\n    const stackData = data\n      ? clone(data)\n      : {\n          before: {},\n          after: clone(this.save()),\n        };\n\n    if (stackType === \"redo\") {\n      this.redoStack.push({\n        action,\n        data: stackData,\n      });\n    } else {\n      this.undoStack.push({\n        action,\n        data: stackData,\n      });\n    }\n\n    this.emit(\"stackchange\", {\n      undoStack: this.undoStack,\n      redoStack: this.redoStack,\n    });\n  }\n\n  /**\n   * 获取邻接矩阵\n   *\n   * @param {boolean} cache 是否使用缓存的\n   * @param {boolean} directed 是否是有向图，默认取 graph.directed\n   * @returns {Matrix} 邻接矩阵\n   * @memberof IAbstractGraph\n   */\n  public getAdjMatrix(\n    cache: boolean = true,\n    directed?: boolean,\n  ): Number | Object {\n    if (directed === undefined) directed = this.get(\"directed\");\n    let currentAdjMatrix = this.get(\"adjMatrix\");\n    if (!currentAdjMatrix || !cache) {\n      currentAdjMatrix = getAdjacentMatrix(this.save() as any, directed);\n      this.set(\"adjMatrix\", currentAdjMatrix);\n    }\n    return currentAdjMatrix;\n  }\n\n  /**\n   * 获取最短路径矩阵\n   *\n   * @param {boolean} cache 是否使用缓存的\n   * @param {boolean} directed 是否是有向图，默认取 graph.directed\n   * @returns {Matrix} 最短路径矩阵\n   * @memberof IAbstractGraph\n   */\n  public getShortestPathMatrix(\n    cache: boolean = true,\n    directed?: boolean,\n  ): Number | Object {\n    if (directed === undefined) directed = this.get(\"directed\");\n    let currentAdjMatrix = this.get(\"adjMatrix\");\n    let currentShourtestPathMatrix = this.get(\"shortestPathMatrix\");\n    if (!currentAdjMatrix || !cache) {\n      currentAdjMatrix = getAdjacentMatrix(this.save() as any, directed);\n      this.set(\"adjMatrix\", currentAdjMatrix);\n    }\n    if (!currentShourtestPathMatrix || !cache) {\n      currentShourtestPathMatrix = floydWarshall(this.save() as any, directed);\n      this.set(\"shortestPathMatrix\", currentShourtestPathMatrix);\n    }\n    return currentShourtestPathMatrix;\n  }\n\n  /**\n   * 重新定义监听函数，复写参数类型\n   */\n  public on<T = IG6GraphEvent>(\n    eventName: string,\n    callback: (e: T) => void,\n    once?: boolean,\n  ): this {\n    return super.on(eventName, callback, once);\n  }\n\n  /**\n   * 销毁画布\n   */\n  public destroy() {\n    this.clear();\n\n    clearAnimationFrame(this.timeIndex);\n    // 清空栈数据\n    this.clearStack();\n\n    this.get(\"itemController\").destroy();\n    this.get(\"modeController\").destroy();\n    this.get(\"viewController\").destroy();\n    this.get(\"stateController\").destroy();\n    this.get(\"canvas\").destroy();\n\n    (this.cfg as any) = null;\n    this.destroyed = true;\n    this.redoStack = null;\n    this.undoStack = null;\n  }\n\n  /**\n   * 创建凸包或凹包轮廓\n   * @param cfg HullCfg 轮廓配置项\n   */\n  public createHull(cfg: HullCfg) {\n    if (!cfg.members || cfg.members.length < 1) {\n      console.warn(\"Create hull failed! The members is empty.\");\n      return;\n    }\n    let parent = this.get(\"hullGroup\");\n    let hullMap = this.get(\"hullMap\");\n    if (!hullMap) {\n      hullMap = {};\n      this.set(\"hullMap\", hullMap);\n    }\n    if (!parent || parent.get(\"destroyed\")) {\n      parent = this.get(\"group\").addGroup({\n        id: \"hullGroup\",\n      });\n      parent.toBack();\n      this.set(\"hullGroup\", parent);\n    }\n    if (hullMap[cfg.id]) {\n      console.warn(\"Existed hull id.\");\n      return hullMap[cfg.id];\n    }\n    const group = parent.addGroup({\n      id: `${cfg.id}-container`,\n    });\n    const hull = new Hull(this, {\n      ...cfg,\n      group,\n    });\n    const hullId = hull.id;\n    hullMap[hullId] = hull;\n    return hull;\n  }\n\n  /**\n   * 获取当前 graph 中存在的包裹轮廓\n   * @return {[key: string]: Hull} Hull 的 map，hullId 对应的 hull 实例\n   */\n  public getHulls(): { [key: string]: Hull } {\n    return this.get(\"hullMap\");\n  }\n\n  /**\n   * 根据 hullId 获取对应的 hull\n   * @return Hull\n   */\n  public getHullById(hullId: string): Hull {\n    return this.get(\"hullMap\")[hullId];\n  }\n\n  public removeHull(hull: Hull | string) {\n    let hullInstance: Hull;\n    if (isString(hull)) {\n      hullInstance = this.getHullById(hull);\n    } else {\n      hullInstance = hull;\n    }\n    const hullMap = this.get(\"hullMap\");\n    delete hullMap[hullInstance.id];\n    hullInstance.destroy();\n  }\n\n  public removeHulls() {\n    const hulls = this.getHulls();\n    if (!hulls || !Object.keys(hulls).length) return;\n    Object.keys(hulls).forEach((key) => {\n      const hull = hulls[key];\n      hull.destroy();\n    });\n    this.set(\"hullMap\", {});\n  }\n\n  public onTick(timestamp: number): void {\n    const layoutController = this.get(\"layoutController\");\n    if (layoutController) {\n      layoutController.onTick(timestamp);\n\n      this.timeIndex = requestAnimationFrame(this.onTick.bind(this));\n    }\n  }\n}\n"
  },
  {
    "path": "packages/core/src/index.ts",
    "content": "import Behavior from \"./behavior\";\nimport AbstractGraph from \"./graph/graph\";\nimport Shape, { Arrow, Marker } from \"./element\";\nimport { IBehavior } from \"./types\";\nimport Global from \"./global\";\nimport Util from \"./util\";\n// 用于 PC 和 Mobile 端分别实现 layout 和 updateLayoutCfg 方法\nimport AbstractLayout from \"./graph/controller/layout\";\nimport AbstractEvent from \"./graph/controller/event\";\n\nimport Node from \"./item/node\";\nimport Edge from \"./item/edge\";\nimport Hull from \"./item/hull\";\nimport Combo from \"./item/combo\";\n\nconst registerNode = Shape.registerNode;\nconst registerEdge = Shape.registerEdge;\nconst registerCombo = Shape.registerCombo;\nconst registerBehavior = (Behavior as IBehavior).registerBehavior;\nconst BaseGlobal = Global;\n\nexport * from \"./types\";\n\nexport {\n  Arrow,\n  Shape,\n  Node,\n  Edge,\n  Combo,\n  Hull,\n  Marker,\n  registerNode,\n  registerCombo,\n  AbstractGraph,\n  Util,\n  registerEdge,\n  registerBehavior,\n  AbstractLayout,\n  AbstractEvent,\n  BaseGlobal,\n};\n\nexport default {\n  version: Global.version,\n  AbstractGraph,\n  BaseGlobal,\n  Util,\n  Shape,\n  Node,\n  Edge,\n  Combo,\n  Hull,\n  registerNode: Shape.registerNode,\n  registerEdge: Shape.registerEdge,\n  registerCombo: Shape.registerCombo,\n  registerBehavior: (Behavior as IBehavior).registerBehavior,\n  Arrow,\n  Marker,\n  AbstractLayout,\n  AbstractEvent,\n};\n"
  },
  {
    "path": "packages/core/src/interface/behavior.ts",
    "content": "import { Event as GraphEvent, ICanvas } from \"@antv/g-base\";\nimport {\n  G6Event,\n  IG6GraphEvent,\n  IShapeBase,\n  Item,\n  BehaviorOption,\n} from \"../types\";\nimport { IAbstractGraph } from \"./graph\";\n\nexport interface IBehavior {\n  registerBehavior: (type: string, behavior: BehaviorOption) => void;\n  hasBehavior: (type: string) => boolean;\n  getBehavior: (type: string) => any;\n}\n\nexport interface IBehaviorOption {\n  type: string;\n  getEvents: () => {\n    [key in G6Event]?: string;\n  };\n  updateCfg: (cfg: object) => {};\n  getDefaultCfg?: () => object;\n  shouldBegin?: (e?: IG6GraphEvent) => boolean;\n  shouldUpdate?: (e?: IG6GraphEvent) => boolean;\n  shouldEnd?: (e?: IG6GraphEvent) => boolean;\n  bind?: (e: IAbstractGraph) => void;\n  unbind?: (e: IAbstractGraph) => void;\n}\n\nexport class G6GraphEvent extends GraphEvent implements IG6GraphEvent {\n  public item: Item;\n\n  public canvasX: number;\n\n  public canvasY: number;\n\n  public clientX: number;\n\n  public clientY: number;\n\n  public detail: number;\n\n  public target!: IShapeBase & ICanvas;\n\n  [key: string]: unknown;\n\n  constructor(type: string, event: IG6GraphEvent) {\n    super(type, event);\n    this.item = event.item;\n    this.canvasX = event.canvasX;\n    this.canvasY = event.canvasY;\n    this.detail = event.detail;\n  }\n}\n"
  },
  {
    "path": "packages/core/src/interface/graph.ts",
    "content": "import EventEmitter from \"@antv/event-emitter\";\nimport { IGroup, Point } from \"@antv/g-base\";\nimport Graph from \"../graph/graph\";\nimport {\n  EdgeConfig,\n  GraphData,\n  Item,\n  ITEM_TYPE,\n  ModelConfig,\n  NodeConfig,\n  Padding,\n  TreeGraphData,\n  LayoutConfig,\n  GraphOptions,\n  ModeOption,\n  ModeType,\n  ComboConfig,\n  GraphAnimateConfig,\n  StackData,\n  HullCfg,\n  IG6GraphEvent,\n} from \"../types\";\nimport { IEdge, INode, ICombo } from \"./item\";\nimport Hull from \"../item/hull\";\nimport { Stack } from \"@antv/algorithm\";\n\nexport interface IAbstractGraph extends EventEmitter {\n  getDefaultCfg: () => Partial<GraphOptions>;\n  get: <T = any>(key: string) => T;\n  set: <T = any>(key: string | object, value?: T) => Graph;\n  findById: (id: string) => Item;\n  translate: (dx: number, dy: number) => void;\n  zoom: (ratio: number, center?: Point) => void;\n\n  /**\n   * 获取 graph 的根图形分组\n   * @return 根 group\n   */\n  getGroup: () => IGroup;\n\n  /**\n   * 获取 graph 的 DOM 容器\n   * @return DOM 容器\n   */\n  getContainer: () => HTMLElement;\n\n  /**\n   * 获取 graph 的最小缩放比例\n   * @return minZoom\n   */\n  getMinZoom: () => number;\n\n  /**\n   * 设置 graph 的最小缩放比例\n   * @return minZoom\n   */\n  setMinZoom: (ratio: number) => void;\n\n  /**\n   * 获取 graph 的最大缩放比例\n   * @param maxZoom\n   */\n  getMaxZoom: () => number;\n\n  /**\n   * 设置 graph 的最大缩放比例\n   * @param maxZoom\n   */\n  setMaxZoom: (ratio: number) => void;\n\n  /**\n   * 获取 graph 的宽度\n   * @return width\n   */\n  getWidth: () => number;\n\n  /**\n   * 获取 graph 的高度\n   * @return height\n   */\n  getHeight: () => number;\n\n  /**\n   * 将屏幕坐标转换为视口坐标\n   * @param {number} clientX 屏幕 x 坐标\n   * @param {number} clientY 屏幕 y 坐标\n   * @return {Point} 视口坐标\n   */\n  getPointByClient: (clientX: number, clientY: number) => Point;\n\n  /**\n   * 将视口坐标转换为屏幕坐标\n   * @param {number} x 视口x坐标\n   * @param {number} y 视口y坐标\n   * @return {object} 视口坐标\n   */\n  getClientByPoint: (x: number, y: number) => Point;\n\n  /**\n   * 将画布坐标转换为视口坐标\n   * @param {number} canvasX 画布 x 坐标\n   * @param {number} canvasY 画布 y 坐标\n   * @return {Point} 视口坐标\n   */\n  getPointByCanvas: (canvasX: number, canvasY: number) => Point;\n\n  /**\n   * 将视口坐标转换为画布坐标\n   * @param {number} x 视口 x 坐标\n   * @param {number} y 视口 y 坐标\n   * @return {Point} 画布坐标\n   */\n  getCanvasByPoint: (x: number, y: number) => Point;\n\n  /**\n   * 获取图内容的中心绘制坐标\n   * @return {object} 中心绘制坐标\n   */\n  getGraphCenterPoint: () => Point;\n\n  /**\n   * 获取视口中心绘制坐标\n   * @return {object} 视口中心绘制坐标\n   */\n  getViewPortCenterPoint: () => Point;\n\n  /**\n   * 设置是否在更新/刷新后自动重绘\n   * @param {boolean} auto 自动重绘\n   */\n  setAutoPaint: (auto: boolean) => void;\n\n  /**\n   * 显示元素\n   * @param {Item} item 指定元素\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  showItem: (item: Item | string, stack?: boolean) => void;\n\n  /**\n   * 隐藏元素\n   * @param {Item} item 指定元素\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  hideItem: (item: Item | string, stack?: boolean) => void;\n\n  /**\n   * 仅画布重新绘制\n   */\n  paint: () => void;\n\n  /**\n   * 自动重绘\n   */\n  autoPaint: () => void;\n\n  /**\n   * 刷新元素\n   * @param {Item} item 元素id或元素实例\n   */\n  refreshItem: (item: Item | string) => void;\n\n  /**\n   * 将元素移动到视口中心\n   * @param {Item} item 指定元素\n   * @param {boolean} animate 是否带有动画地移动\n   * @param {GraphAnimateConfig} animateCfg 若带有动画，动画的配置项\n   */\n  focusItem: (\n    item: Item | string,\n    animate?: boolean,\n    animateCfg?: GraphAnimateConfig,\n  ) => void;\n\n  /**\n   * 调整视口适应视图\n   * @param {Padding} padding 四周围边距\n   */\n  fitView: (padding?: Padding) => void;\n\n  /**\n   * 调整视口适应视图，不缩放，仅将图 bbox 中心对齐到画布中心\n   */\n  fitCenter: () => void;\n\n  /**\n   * 伸缩视口到一固定比例\n   * @param {number} toRatio 伸缩比例\n   * @param {Point} center 以center的x, y坐标为中心缩放\n   */\n  zoomTo: (toRatio: number, center?: Point) => void;\n\n  /**\n   * 删除元素\n   * @param {Item} item 元素id或元素实例\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  removeItem: (item: Item | string, stack?: boolean) => void;\n\n  /**\n   * 删除元素\n   * @param {Item} item 元素id或元素实例\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  remove: (item: Item | string, stack?: boolean) => void;\n\n  /**\n   * 新增元素\n   * @param {string} type 元素类型(node | edge)\n   * @param {ModelConfig} model 元素数据模型\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   * @return {Item} 元素实例\n   */\n  addItem: (type: ITEM_TYPE, model: ModelConfig, stack?: boolean) => Item;\n\n  add: (type: ITEM_TYPE, model: ModelConfig, stack?: boolean) => Item;\n\n  /**\n   * 更新元素\n   * @param {Item} item 元素id或元素实例\n   * @param {EdgeConfig | NodeConfig} cfg 需要更新的数据\n   * @param {boolean} stack 本次操作是否入栈，默认为 true\n   */\n  updateItem: (\n    item: Item | string,\n    cfg: Partial<NodeConfig> | EdgeConfig,\n    stack?: boolean,\n  ) => void;\n\n  update: (\n    item: Item | string,\n    cfg: Partial<NodeConfig> | EdgeConfig,\n    stack?: boolean,\n  ) => void;\n\n  /**\n   * 更新 Combo 结构，例如移动子树等\n   * @param {string | INode | ICombo} item 需要被更新的 Combo 或 节点 id\n   * @param {string | undefined} parentId 新的父 combo id，undefined 代表没有父 combo\n   */\n  updateComboTree: (\n    item: string | INode | ICombo,\n    parentId?: string | undefined,\n    stack?: boolean,\n  ) => void;\n\n  /**\n   * 解散 combo\n   * @param {String | ICombo} item 需要被解散的 Combo item 或 id\n   */\n  uncombo: (item: string | ICombo) => void;\n\n  /**\n   * 根据已经存在的节点或 combo 创建新的 combo\n   * @param combo combo ID 或 Combo 配置\n   * @param elements 添加到 Combo 中的元素，包括节点和 combo\n   */\n  createCombo: (combo: string | ComboConfig, elements: string[]) => void;\n\n  /**\n   * 设置元素状态\n   * @param {Item} item 元素id或元素实例\n   * @param {string} state 状态名称\n   * @param {boolean} value 是否启用状态或状态值\n   */\n  setItemState: (\n    item: Item | string,\n    state: string,\n    value: string | boolean,\n  ) => void;\n\n  /**\n   * 将指定状态的优先级提升为最高优先级\n   * @param {Item} item 元素id或元素实例\n   * @param state 状态名称\n   */\n  priorityState: (item: Item | string, state: string) => void;\n\n  /**\n   * 设置视图初始化数据\n   * @param {GraphData} data 初始化数据\n   */\n  data: (data?: GraphData | TreeGraphData) => void;\n\n  /**\n   * 当源数据在外部发生变更时，根据新数据刷新视图。但是不刷新节点位置\n   */\n  refresh: () => void;\n\n  /**\n   * 根据 graph 上的 animateCfg 进行视图中节点位置动画接口\n   */\n  positionsAnimate: () => void;\n\n  /**\n   * 当节点位置在外部发生改变时，刷新所有节点位置，重计算边\n   */\n  refreshPositions: () => void;\n\n  /**\n   * 根据data接口的数据渲染视图\n   */\n  render: () => void;\n\n  /**\n   * 获取当前图中所有节点的item实例\n   */\n  getNodes: () => INode[];\n\n  /**\n   * 获取当前图中所有边的item实例\n   */\n  getEdges: () => IEdge[];\n\n  /**\n   * 获取当前图中所有 combo 的实例\n   */\n  getCombos: () => ICombo[];\n\n  /**\n   * 获取节点所有的邻居节点，有向图中效果同无向图\n   *\n   * @param {(string | INode)} node 节点 ID 或实例\n   * @returns {INode[]}\n   * @memberof IAbstractGraph\n   */\n  getNeighbors: (\n    node: string | INode,\n    type?: \"source\" | \"target\" | undefined,\n  ) => INode[];\n\n  /**\n   * 获取 node 的度数\n   *\n   * @param {(string | INode)} node 节点 ID 或实例\n   * @param {('in' | 'out' | 'total' | 'all' | undefined)} 度数类型，in 入度，out 出度，total 总度数，all 返回三种类型度数的对象\n   * @returns {Number | Object} 该节点的度数\n   * @memberof IAbstractGraph\n   */\n  getNodeDegree: (\n    node: string | INode,\n    type?: \"in\" | \"out\" | \"total\" | \"all\" | undefined,\n    refresh?: boolean,\n  ) => Number | Object;\n  /**\n   * 获取指定 combo 中所有的节点\n   * @param comboId Combo ID 或 combo 实例\n   */\n  getComboChildren: (combo: string | ICombo) => {\n    nodes: INode[];\n    combos: ICombo[];\n  };\n\n  /**\n   * 获取当前视口伸缩比例\n   * @return {number} 比例\n   */\n  getZoom: () => number;\n\n  /**\n   * 获取当前的行为模式\n   */\n  getCurrentMode: () => string;\n\n  /**\n   * 切换行为模式\n   * @param {string} mode 指定模式\n   */\n  setMode: (mode: string) => Graph;\n\n  isAnimating: () => boolean;\n\n  stopAnimate: () => void;\n\n  /**\n   * 新增行为\n   * @param {string | ModeOption | ModeType[]} behaviors 添加的行为\n   * @param {string | string[]} modes 添加到对应的模式\n   * @return {Graph} Graph\n   */\n  addBehaviors: (\n    behaviors: string | ModeOption | ModeType[],\n    modes: string | string[],\n  ) => Graph;\n\n  /**\n   * 移除行为\n   * @param {string | ModeOption | ModeType[]} behaviors 移除的行为\n   * @param {string | string[]} modes 从指定的模式中移除\n   * @return {Graph} Graph\n   */\n  removeBehaviors: (\n    behaviors: string | ModeOption | ModeType[],\n    modes: string | string[],\n  ) => Graph;\n\n  /**\n   * 更新行为参数\n   * @param {string} behavior 需要更新的行为\n   * @param {object} newCfg 需要更新的参数\n   * @param {string} mode 指定的模式中的行为，不指定则为 default\n   * @return {Graph} Graph\n   */\n  updateBehavior: (behavior: string, newCfg: object, mode?: string) => Graph;\n\n  /**\n   * 清除画布元素\n   */\n  clear: (avoidEmit?: boolean) => Graph;\n\n  /**\n   * 接收数据进行渲染\n   * @Param {GraphData} data 初始化数据\n   */\n  read: (data: GraphData) => void;\n\n  /**\n   * 更改源数据，根据新数据重新渲染视图\n   * @param {GraphData | TreeGraphData} data 源数据\n   * @param {boolean} 是否入栈，默认为true\n   * @return {object} this\n   */\n  changeData: (data?: GraphData | TreeGraphData, stack?: boolean) => Graph;\n\n  /**\n   * 导出图数据\n   * @return {GraphData} data\n   */\n  save: () => TreeGraphData | GraphData;\n\n  /**\n   * 改变画布大小\n   * @param  {number} width  画布宽度\n   * @param  {number} height 画布高度\n   * @return {Graph} this\n   */\n  changeSize: (width: number, height: number) => Graph;\n\n  /**\n   * 清理元素多个状态\n   * @param {string|Item} item 元素id或元素实例\n   * @param {string | string[]} states 状态\n   */\n  clearItemStates: (item: Item | string, states?: string | string[]) => void;\n\n  /**\n   * 设置各个节点样式，以及在各种状态下节点 keyShape 的样式。\n   * 若是自定义节点切在各种状态下\n   * graph.node(node => {\n   *  return {\n   *    {\n   *       type: 'rect',\n   *      label: node.id,\n   *       style: { fill: '#666' },\n   *      stateStyles: {\n   *         selected: { fill: 'blue' },\n   *         custom: { fill: 'green' }\n   *       }\n   *     }\n   *  }\n   * });\n   * @param {function} nodeFn 指定每个节点样式\n   */\n  node: (nodeFn: (config: NodeConfig) => Partial<NodeConfig>) => void;\n\n  /**\n   * 设置各个边样式\n   * @param {function} edgeFn 指定每个边的样式,用法同 node\n   */\n  edge: (edgeFn: (config: EdgeConfig) => Partial<EdgeConfig>) => void;\n\n  /**\n   * 设置每个 combo 的配置\n   * @param comboFn 指定每个 combo 的配置\n   */\n  combo: (comboFn: (config: ComboConfig) => Partial<ComboConfig>) => void;\n\n  /**\n   * 平移画布到某点\n   * @param {number} x 水平坐标\n   * @param {number} y 垂直坐标\n   */\n  moveTo: (x: number, y: number) => void;\n\n  /**\n   * 根据对应规则查找单个元素\n   * @param {ITEM_TYPE} type 元素类型(node | edge | group)\n   * @param {(item: T, index: number) => T} fn 指定规则\n   * @return {T} 元素实例\n   */\n  find: <T extends Item>(\n    type: ITEM_TYPE,\n    fn: (item: T, index?: number) => boolean,\n  ) => T | undefined;\n\n  /**\n   * 查找所有满足规则的元素\n   * @param {string} type 元素类型(node|edge)\n   * @param {string} fn 指定规则\n   * @return {array} 元素实例\n   */\n  findAll: <T extends Item>(\n    type: ITEM_TYPE,\n    fn: (item: T, index?: number) => boolean,\n  ) => T[];\n\n  /**\n   * 查找所有处于指定状态的元素\n   * @param {string} type 元素类型(node|edge)\n   * @param {string} state z状态\n   * @return {object} 元素实例\n   */\n  findAllByState: <T extends Item>(type: ITEM_TYPE, state: string) => T[];\n\n  /**\n   * 更换布局配置项\n   * @param {object} cfg 新布局配置项\n   * 若 cfg 含有 type 字段或为 String 类型，且与现有布局方法不同，则更换布局\n   * 若 cfg 不包括 type ，则保持原有布局方法，仅更新布局配置项\n   */\n  updateLayout: (cfg: LayoutConfig) => void;\n\n  /**\n   * 重新以当前示例中配置的属性进行一次布局\n   */\n  layout: () => void;\n\n  /**\n   * 收起指定的 Combo\n   * @param comboId combo ID 或 combo 实例\n   */\n  collapseCombo: (combo: string | ICombo) => void;\n\n  /**\n   * 展开指定的 Combo\n   * @param combo combo ID 或 combo 实例\n   */\n  expandCombo: (combo: string | ICombo) => void;\n\n  /**\n   * 展开或收缩指定的 Combo\n   * @param comboId combo ID 或 combo 实例\n   */\n  collapseExpandCombo: (combo: string | ICombo) => void;\n\n  /**\n   * 根据节点的 bbox 更新所有 combos 的绘制，包括 combos 的位置和范围\n   */\n  updateCombos: () => void;\n\n  /**\n   * 获取 undo stack\n   */\n  getUndoStack: () => Stack;\n\n  /**\n   * 获取 redo stack\n   */\n  getRedoStack: () => Stack;\n\n  /**\n   * 获取 undo 和 redo 栈的数据\n   */\n  getStackData: () => {\n    undoStack: StackData[];\n    redoStack: StackData[];\n  };\n\n  /**\n   * 清空 undo stack & redo stack\n   */\n  clearStack: () => void;\n\n  /**\n   * 将操作类型和操作数据入栈\n   * @param action 操作类型\n   * @param data 入栈的数据\n   * @param stackType 入栈的类型\n   */\n  pushStack: (\n    action?: string,\n    data?: unknown,\n    stackType?: \"redo\" | \"undo\",\n  ) => void;\n\n  /**\n   * 根据节点的 bbox 更新 combo 及其祖先 combos 的绘制，包括 combos 的位置和范围\n   * @param combo 需要更新的 combo\n   */\n  updateCombo: (combo: string | ICombo) => void;\n\n  /**\n   * 获取邻接矩阵\n   *\n   * @param {boolean} cache 是否使用缓存的\n   * @param {boolean} directed 是否是有向图，默认取 graph.directed\n   * @returns {Matrix} 邻接矩阵\n   * @memberof IAbstractGraph\n   */\n  getAdjMatrix: (cache: boolean, directed?: boolean) => Number | Object;\n\n  /**\n   * 获取最短路径矩阵\n   *\n   * @param {boolean} cache 是否使用缓存的\n   * @param {boolean} directed 是否是有向图，默认取 graph.directed\n   * @returns {Matrix} 最短路径矩阵\n   * @memberof IAbstractGraph\n   */\n  getShortestPathMatrix: (\n    cache: boolean,\n    directed?: boolean,\n  ) => Number | Object;\n\n  /**\n   * 创建凸包或凹包轮廓\n   * @param cfg HullCfg 轮廓配置项\n   */\n  createHull: (cfg: HullCfg) => void;\n\n  /**\n   * 获取当前 graph 中存在的包裹轮廓\n   * @return {[key: string]: Hull} Hull 的 map，hullId 对应的 hull 实例\n   */\n  getHulls: () => { [key: string]: Hull };\n\n  /**\n   * 根据 hullId 获取对应的 hull\n   * @return Hull\n   */\n  getHullById: (hullId: string) => Hull;\n\n  /**\n   * 根据 hullId 删除 Hull\n   */\n  removeHull: (hull: Hull | string) => void;\n\n  /**\n   * 删除所有 Hulls\n   */\n  removeHulls: () => void;\n\n  /**\n   * 重新定义监听函数，复写参数类型\n   */\n  on: <T = IG6GraphEvent>(\n    eventName: string,\n    callback: (e: T) => void,\n    once?: boolean,\n  ) => this;\n  /**\n   * 销毁画布\n   */\n  destroy: () => void;\n\n  /**\n   * 每一帧回调\n   */\n  onTick: (timestamp: number) => void;\n}\n"
  },
  {
    "path": "packages/core/src/interface/index.ts",
    "content": "export * from \"./graph\";\nexport * from \"./behavior\";\nexport * from \"./item\";\nexport * from \"./shape\";\n"
  },
  {
    "path": "packages/core/src/interface/item.ts",
    "content": "/* eslint @typescript-eslint/no-use-before-define: 0 */\nimport { IGroup, Point } from \"@antv/g-base\";\nimport {\n  IBBox,\n  IPoint,\n  IShapeBase,\n  Item,\n  ModelConfig,\n  NodeConfig,\n  EdgeConfig,\n  ModelStyle,\n  ShapeStyle,\n  Indexable,\n  ComboConfig,\n  ITEM_TYPE,\n  TreeGraphData,\n} from \"../types\";\n\n// item 的配置项\nexport type IItemBaseConfig = Partial<{\n  /**\n   * id\n   */\n  id: string;\n\n  /**\n   * 类型\n   */\n  type: \"item\" | \"node\" | \"edge\" | \"combo\" | \"vedge\";\n\n  /**\n   * data model\n   */\n  model: ModelConfig;\n\n  /**\n   * G Group\n   */\n  group: IGroup;\n\n  /**\n   * is open animate\n   */\n  animate: boolean;\n\n  /**\n   * visible - not group visible\n   */\n  visible: boolean;\n\n  /**\n   * locked - lock node\n   */\n  locked: boolean;\n  /**\n   * capture event\n   */\n  event: boolean;\n  /**\n   * key shape to calculate item's bbox\n   */\n  keyShape: IShapeBase;\n  /**\n   * item's states, such as selected or active\n   * @type Array\n   */\n  states: string[];\n\n  /**\n   * Item 的样式\n   */\n  styles: ModelStyle;\n\n  source: string | Item;\n  target: string | Item;\n\n  linkCenter: boolean;\n}> &\n  Indexable<any>;\n\nexport interface IItemBase {\n  _cfg: IItemBaseConfig | null;\n\n  destroyed: boolean;\n\n  isItem: () => boolean;\n\n  setOriginStyle: () => void;\n\n  getShapeStyleByName: (name?: string) => ShapeStyle;\n\n  /**\n   * 获取当前元素的所有状态\n   * @return {Array} 元素的所有状态\n   */\n  getStates: () => string[];\n\n  /**\n   * 当前元素是否处于某状态\n   * @param {String} state 状态名\n   * @return {Boolean} 是否处于某状态\n   */\n  hasState: (state: string) => boolean;\n\n  getStateStyle: (state: string) => ShapeStyle;\n\n  getOriginStyle: () => ShapeStyle;\n\n  getCurrentStatesStyle: () => ShapeStyle;\n\n  /**\n   * 更改元素状态， visible 不属于这个范畴\n   * @internal 仅提供内部类 graph 使用\n   * @param {String} state 状态名\n   * @param {Boolean} value 节点状态值\n   */\n  setState: (state: string, value: string | boolean) => void;\n\n  clearStates: (states?: string | string[]) => void;\n\n  /**\n   * 节点的图形容器\n   * @return {G.Group} 图形容器\n   */\n  getContainer: () => IGroup;\n\n  /**\n   * 节点的关键形状，用于计算节点大小，连线截距等\n   * @return {IShapeBase} 关键形状\n   */\n  getKeyShape: () => IShapeBase;\n\n  /**\n   * 节点 / 边 / Combo 的数据模型\n   * @return {Object} 数据模型\n   */\n  getModel: () => NodeConfig | EdgeConfig | ComboConfig | TreeGraphData;\n\n  /**\n   * 节点类型\n   * @return {string} 节点的类型\n   */\n  getType: () => ITEM_TYPE;\n\n  /**\n   * 获取 Item 的ID\n   */\n  getID: () => string;\n\n  getShapeCfg: (model: ModelConfig) => ModelConfig;\n\n  /**\n   * 刷新一般用于处理几种情况\n   * 1. item model 在外部被改变\n   * 2. 边的节点位置发生改变，需要重新计算边\n   *\n   * 因为数据从外部被修改无法判断一些属性是否被修改，直接走位置和 shape 的更新\n   */\n  refresh: () => void;\n\n  /**\n   * 将更新应用到 model 上，刷新属性\n   * @internal 仅提供给 Graph 使用，外部直接调用 graph.update 接口\n   * @param  {Object} cfg       配置项，可以是增量信息\n   * @param  {boolean} onlyMove 是否仅移动，只有 node 和 combo 可能是 true\n   */\n  update: (cfg: ModelConfig, onlyMove?: boolean) => void;\n\n  /**\n   * 更新元素内容，样式\n   */\n  updateShape: () => void;\n\n  /**\n   * 更新位置，避免整体重绘\n   * @param {object} cfg 待更新数据\n   */\n  updatePosition: (cfg: Point) => boolean;\n\n  /**\n   * 绘制元素\n   */\n  draw: () => void;\n\n  /**\n   * 获取 item 的包围盒，这个包围盒是相对于 item 自己，不会将 matrix 计算在内\n   */\n  getBBox: () => IBBox;\n\n  /**\n   * 获取 item 相对于画布的包围盒，会将从顶层到当前元素的 matrix 都计算在内\n   */\n  getCanvasBBox: () => IBBox;\n\n  /**\n   * 将元素放到最前面\n   */\n  toFront: () => void;\n\n  /**\n   * 将元素放到最后面\n   */\n  toBack: () => void;\n\n  /**\n   * 显示元素\n   */\n  show: () => void;\n\n  /**\n   * 隐藏元素\n   */\n  hide: () => void;\n\n  /**\n   * 更改是否显示\n   * @param  {Boolean} visible 是否显示\n   */\n  changeVisibility: (visible: boolean) => void;\n\n  /**\n   * 是否捕获及触发该元素的交互事件\n   * @param {Boolean} enable 标识位\n   */\n  enableCapture: (enable: boolean) => void;\n\n  isVisible: () => boolean;\n\n  isOnlyMove: (cfg: ModelConfig) => boolean;\n\n  get: <T = any>(key: string) => T;\n  set: <T = any>(key: string, value: T) => void;\n\n  destroy: () => void;\n}\n\nexport interface IEdge extends IItemBase {\n  setSource: (source: INode | ICombo) => void;\n  setTarget: (target: INode | ICombo) => void;\n  getSource: () => INode | ICombo;\n  getTarget: () => INode | ICombo;\n}\n\nexport interface INode extends IItemBase {\n  /**\n   * 获取从节点关联的所有边\n   * @return {Array} 边的集合\n   */\n  getEdges: () => IEdge[];\n\n  /**\n   * 获取引入节点的边 target == this\n   * @return {Array} 边的集合\n   */\n  getInEdges: () => IEdge[];\n\n  /**\n   * 获取从节点引出的边 source == this\n   * @return {Array} 边的集合\n   */\n  getOutEdges: () => IEdge[];\n\n  /**\n   * 根据锚点的索引获取连接点\n   * @param  {Number} index 索引\n   * @return {Object} 连接点 {x,y}\n   */\n  getLinkPointByAnchor: (index: number) => IPoint;\n\n  /**\n   * 获取连接点\n   * @param {Object} point 节点外面的一个点，用于计算交点、最近的锚点\n   * @return {Object} 连接点 {x,y}\n   */\n  getLinkPoint: (point: IPoint) => IPoint | null;\n\n  /**\n   * 添加边\n   * @param {Edge} edge 边\n   */\n  addEdge: (edge: IEdge) => void;\n\n  /**\n   * 移除边\n   * @param {Edge} edge 边\n   */\n  removeEdge: (edge: IEdge) => void;\n\n  /**\n   * 获取锚点的定义\n   * @return {array} anchorPoints， {x,y,...cfg}\n   */\n  getAnchorPoints: () => IPoint[] | number[][];\n\n  hasLocked: () => boolean;\n\n  lock: () => void;\n\n  unlock: () => void;\n\n  /**\n   * 获取节点所有的邻居节点\n   *\n   * @returns {INode[]}\n   * @memberof INode\n   */\n  getNeighbors: (type?: \"source\" | \"target\" | undefined) => INode[];\n}\n\nexport interface ICombo extends INode {\n  /**\n   * 获取 Combo 中所有的子元素，包括 Combo、Node 及 Edge\n   */\n  getChildren: () => { nodes: INode[]; combos: ICombo[] };\n\n  /**\n   * 获取 Combo 中所有节点\n   */\n  getNodes: () => INode[];\n\n  /**\n   * 获取 Combo 中所有子 combo\n   */\n  getCombos: () => INode[];\n\n  /**\n   * 向 Combo 中增加 combo\n   * @param item 节点或 combo 的 Item 实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  addChild: (item: INode | ICombo) => boolean;\n\n  /**\n   * 向 Combo 中增加 combo\n   * @param combo Combo 实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  addCombo: (combo: ICombo) => boolean;\n\n  /**\n   * 向 Combo 中添加节点\n   * @param node 节点实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  addNode: (node: string | INode) => boolean;\n\n  /**\n   * 从 Combo 中移除子元素\n   * @param item Combo 或 Node 实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  removeChild: (item: ICombo | INode) => boolean;\n\n  /**\n   * 从 Combo 中移除指定的 combo\n   * @param combo Combo 实例\n   * @return boolean 移除成功返回 true，否则返回 false\n   */\n  removeCombo: (combo: ICombo) => boolean;\n\n  /**\n   * 向 Combo 中移除指定的节点\n   * @param node 节点实例\n   * @return boolean 移除成功返回 true，否则返回 false\n   */\n  removeNode: (node: INode) => boolean;\n}\n"
  },
  {
    "path": "packages/core/src/interface/shape.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { IPoint, Item, LabelStyle, ModelConfig } from \"../types\";\n\nexport type ILabelConfig = Partial<{\n  position: string;\n  offset: number;\n  refX: number;\n  refY: number;\n  autoRotate: boolean;\n  style: LabelStyle;\n}>;\n\nexport type ShapeDefine = string | ((cfg: ModelConfig) => string);\n\nexport type ShapeOptions = Partial<{\n  options: ModelConfig;\n  /**\n   * 形状的类型，例如 circle，ellipse，polyline...\n   */\n  type: string;\n\n  itemType: string;\n  shapeType: string;\n  labelPosition: string;\n  labelAutoRotate: boolean;\n\n  jsx: ShapeDefine;\n  [key: string]: any;\n\n  /**\n   * 绘制\n   */\n  draw: (cfg?: ModelConfig, group?: IGroup) => IShape;\n\n  getCustomConfig: (cfg: ModelConfig) => ModelConfig;\n  drawShape: (cfg?: ModelConfig, group?: IGroup) => IShape;\n  drawLabel: (cfg: ModelConfig, group: IGroup) => IShape;\n  getLabelStyleByPosition: (\n    cfg: ModelConfig,\n    labelCfg: ILabelConfig,\n    group?: IGroup,\n  ) => LabelStyle;\n  getLabelStyle: (\n    cfg: ModelConfig,\n    labelCfg: ILabelConfig,\n    group: IGroup,\n  ) => LabelStyle;\n\n  /**\n   * 绘制完成后的操作，便于用户继承现有的节点、边\n   */\n  afterDraw: (cfg?: ModelConfig, group?: IGroup, rst?: IShape) => void;\n\n  afterUpdate: (cfg?: ModelConfig, item?: Item) => void;\n\n  /**\n   * 设置节点、边状态\n   */\n  setState: (name?: string, value?: string | boolean, item?: Item) => void;\n\n  /**\n   * 获取控制点\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 控制点的数组,如果为 null，则没有控制点\n   */\n  getControlPoints: (cfg: ModelConfig) => IPoint[] | undefined;\n\n  /**\n   * 获取控制点\n   * @param  {Object} cfg 节点、边的配置项\n   * @return {Array|null} 控制点的数组,如果为 null，则没有控制点\n   */\n  getAnchorPoints: (cfg?: ModelConfig) => number[][] | undefined;\n\n  // 如果没定义 update 方法，每次都调用 draw 方法\n  update: (cfg: ModelConfig, item: Item) => void;\n\n  // 获取节点的大小，只对节点起效\n  getSize: (cfg: ModelConfig) => number[];\n\n  // 获取路径\n  // getPath: (cfg?: ModelConfig) => Array<Array<string | number>>\n  // getPath: (points?: Point[]) => Array<Array<string | number>>\n  // getPath: (points: Point[], routeCfg) => Array<Array<string | number>> | string\n  // getPath: (...args: Point[] | object[] | ModelConfig[]) => Array<Array<string | number>> | string\n\n  // 获取文本对齐方式，只对边起效\n  _getTextAlign: (labelPosition: string, angle: number) => string;\n\n  /**\n   * @internal 处理需要重计算点和边的情况\n   * @param {Object} cfg 边的配置项\n   * @return {Object} 边的配置项\n   */\n  getPathPoints: (cfg: ModelConfig) => ModelConfig;\n\n  // [key: string]: (...args: string[] | number[] | object[] | ModelConfig[]) => unknown\n}>;\n"
  },
  {
    "path": "packages/core/src/item/combo.ts",
    "content": "import { IGroup } from \"@antv/g-base\";\nimport { ICombo, INode, IItemBaseConfig } from \"../interface/item\";\nimport Node from \"./node\";\nimport { ComboConfig, IBBox, IShapeBase, ModelConfig } from \"../types\";\nimport Global from \"../global\";\nimport { getBBox } from \"../util/graphic\";\nimport { isNumber } from \"@antv/util\";\n\nconst CACHE_BBOX = \"bboxCache\";\nconst CACHE_CANVAS_BBOX = \"bboxCanvasCache\";\nconst CACHE_SIZE = \"sizeCache\";\nconst CACHE_ANCHOR_POINTS = \"anchorPointsCache\";\n\nexport default class Combo extends Node implements ICombo {\n  public getDefaultCfg() {\n    return {\n      type: \"combo\",\n      nodes: [],\n      edges: [],\n      combos: [],\n    };\n  }\n\n  public getShapeCfg(model: ModelConfig): ModelConfig {\n    const styles = this.get(\"styles\");\n    const bbox = this.get(\"bbox\");\n    if (styles && bbox) {\n      // merge graph的item样式与数据模型中的样式\n      const newModel = model;\n      const size = {\n        r:\n          Math.hypot(bbox.height, bbox.width) / 2 ||\n          Global.defaultCombo.size[0] / 2,\n        width: bbox.width || Global.defaultCombo.size[0],\n        height: bbox.height || Global.defaultCombo.size[1],\n      };\n      newModel.style = { ...styles, ...model.style, ...size };\n      const padding = model.padding || Global.defaultCombo.padding;\n      if (isNumber(padding)) {\n        size.r += padding;\n        size.width += padding * 2;\n        size.height += padding * 2;\n      } else {\n        size.r += padding[0];\n        size.width += padding[1] + padding[3] || padding[1] * 2;\n        size.height += padding[0] + padding[2] || padding[0] * 2;\n      }\n      this.set(CACHE_SIZE, size);\n      return newModel;\n    }\n    return model;\n  }\n\n  /**\n   * 根据 keyshape 计算包围盒\n   */\n  public calculateCanvasBBox(): IBBox {\n    if (this.destroyed) return;\n    const keyShape: IShapeBase = this.get(\"keyShape\");\n    const group: IGroup = this.get(\"group\");\n    // 因为 group 可能会移动，所以必须通过父元素计算才能计算出正确的包围盒\n    const bbox = getBBox(keyShape, group);\n    bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n    bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n    const cacheSize = this.get(CACHE_SIZE);\n\n    const cacheBBox = this.get(CACHE_BBOX) || {};\n    const oriX = cacheBBox.x;\n    const oriY = cacheBBox.x;\n\n    if (cacheSize) {\n      cacheSize.width = Math.max(cacheSize.width, bbox.width);\n      cacheSize.height = Math.max(cacheSize.height, bbox.height);\n      const type: string = keyShape.get(\"type\");\n      if (type === \"circle\") {\n        bbox.width = cacheSize.r * 2;\n        bbox.height = cacheSize.r * 2;\n      } else {\n        bbox.width = cacheSize.width;\n        bbox.height = cacheSize.height;\n      }\n      bbox.minX = bbox.centerX - bbox.width / 2;\n      bbox.minY = bbox.centerY - bbox.height / 2;\n      bbox.maxX = bbox.centerX + bbox.width / 2;\n      bbox.maxY = bbox.centerY + bbox.height / 2;\n    } else {\n      bbox.width = bbox.maxX - bbox.minX;\n      bbox.height = bbox.maxY - bbox.minY;\n      bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n      bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n    }\n    bbox.x = bbox.minX;\n    bbox.y = bbox.minY;\n    if (bbox.x !== oriX || bbox.y !== oriY) this.set(CACHE_ANCHOR_POINTS, null);\n    return bbox;\n  }\n\n  /**\n   * 获取 Combo 中所有的子元素，包括 Combo、Node 及 Edge\n   */\n  public getChildren(): { nodes: INode[]; combos: ICombo[] } {\n    const self = this;\n    return {\n      nodes: self.getNodes(),\n      combos: self.getCombos(),\n    };\n  }\n\n  /**\n   * 获取 Combo 中所有子节点\n   */\n  getNodes(): INode[] {\n    const self = this;\n    return self.get(\"nodes\");\n  }\n\n  /**\n   * 获取 Combo 中所有子 combo\n   */\n  getCombos(): ICombo[] {\n    const self = this;\n    return self.get(\"combos\");\n  }\n\n  /**\n   * 向 Combo 中增加子 combo 或 node\n   * @param item Combo 或节点实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  addChild(item: ICombo | INode): boolean {\n    const self = this;\n    const itemType = item.getType();\n    switch (itemType) {\n      case \"node\":\n        self.addNode(item);\n        break;\n      case \"combo\":\n        self.addCombo(item as ICombo);\n        break;\n      default:\n        console.warn(\n          \"Only node or combo items are allowed to be added into a combo\",\n        );\n        return false;\n    }\n    return true;\n  }\n\n  /**\n   * 向 Combo 中增加 combo\n   * @param combo Combo 实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  addCombo(combo: ICombo): boolean {\n    const self = this;\n    self.get(\"combos\").push(combo);\n    return true;\n  }\n\n  /**\n   * 向 Combo 中添加节点\n   * @param node 节点实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  addNode(node: string | INode): boolean {\n    const self = this;\n    self.get(\"nodes\").push(node);\n    return true;\n  }\n\n  /**\n   * 向 Combo 中增加子 combo 或 node\n   * @param item Combo 或节点实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  removeChild(item: ICombo | INode): boolean {\n    const self = this;\n    const itemType = item.getType();\n    switch (itemType) {\n      case \"node\":\n        self.removeNode(item);\n        break;\n      case \"combo\":\n        self.removeCombo(item as ICombo);\n        break;\n      default:\n        console.warn(\n          \"Only node or combo items are allowed to be added into a combo\",\n        );\n        return false;\n    }\n    return true;\n  }\n\n  /**\n   * 从 Combo 中移除指定的 combo\n   * @param combo Combo 实例\n   * @return boolean 移除成功返回 true，否则返回 false\n   */\n  removeCombo(combo: ICombo): boolean {\n    if (!combo) return;\n    const combos = this.getCombos();\n    const index = combos.indexOf(combo);\n    if (index > -1) {\n      combos.splice(index, 1);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * 向 Combo 中移除指定的节点\n   * @param node 节点实例\n   * @return boolean 移除成功返回 true，否则返回 false\n   */\n  removeNode(node: INode): boolean {\n    if (!node) return;\n    const nodes = this.getNodes();\n    const index = nodes.indexOf(node);\n    if (index > -1) {\n      nodes.splice(index, 1);\n      return true;\n    }\n    return false;\n  }\n\n  public isOnlyMove(cfg?: any): boolean {\n    return false;\n  }\n\n  /**\n   * 获取 item 的包围盒，这个包围盒是相对于 item 自己，不会将 matrix 计算在内\n   * @return {Object} 包含 x,y,width,height, centerX, centerY\n   */\n  public getBBox(): IBBox {\n    this.set(CACHE_CANVAS_BBOX, null);\n    const bbox: IBBox = this.calculateCanvasBBox();\n    return bbox;\n  }\n\n  public clearCache() {\n    this.set(CACHE_BBOX, null); // 清理缓存的 bbox\n    this.set(CACHE_CANVAS_BBOX, null);\n    this.set(CACHE_ANCHOR_POINTS, null);\n  }\n\n  public destroy() {\n    if (!this.destroyed) {\n      const animate = this.get(\"animate\");\n      const group: IGroup = this.get(\"group\");\n      if (animate) {\n        group.stopAnimate();\n      }\n      this.clearCache();\n      this.set(CACHE_SIZE, null);\n      this.set(\"bbox\", null);\n      group.remove();\n      (this._cfg as IItemBaseConfig | null) = null;\n      this.destroyed = true;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/core/src/item/edge.ts",
    "content": "import { isString, isPlainObject, isNil, mix } from \"@antv/util\";\nimport { IEdge, INode, ICombo } from \"../interface/item\";\nimport {\n  EdgeConfig,\n  IPoint,\n  NodeConfig,\n  SourceTarget,\n  Indexable,\n} from \"../types\";\nimport Item from \"./item\";\nimport Node from \"./node\";\n\nconst END_MAP: Indexable<string> = { source: \"start\", target: \"end\" };\nconst ITEM_NAME_SUFFIX = \"Node\"; // 端点的后缀，如 sourceNode, targetNode\nconst POINT_NAME_SUFFIX = \"Point\"; // 起点或者结束点的后缀，如 startPoint, endPoint\nconst ANCHOR_NAME_SUFFIX = \"Anchor\";\n\nexport default class Edge extends Item implements IEdge {\n  protected getDefaultCfg() {\n    return {\n      type: \"edge\",\n      sourceNode: null,\n      targetNode: null,\n      startPoint: null,\n      endPoint: null,\n      linkCenter: false,\n    };\n  }\n\n  private setEnd(name: SourceTarget, value: INode) {\n    const pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n    const itemName = name + ITEM_NAME_SUFFIX;\n    const preItem = this.get(itemName);\n    if (preItem && !preItem.destroyed) {\n      // 如果之前存在节点，则移除掉边\n      preItem.removeEdge(this);\n    }\n\n    if (isPlainObject(value)) {\n      // 如果设置成具体的点，则清理节点\n      this.set(pointName, value);\n      this.set(itemName, null);\n    } else {\n      (value as any).addEdge(this);\n      this.set(itemName, value);\n      this.set(pointName, null);\n    }\n  }\n\n  /**\n   * 获取连接点的坐标\n   * @param name source | target\n   * @param model 边的数据模型\n   * @param controlPoints 控制点\n   */\n  private getLinkPoint(\n    name: SourceTarget,\n    model: EdgeConfig,\n    controlPoints: IPoint[],\n  ): IPoint {\n    const pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n    const itemName = name + ITEM_NAME_SUFFIX;\n    let point = this.get(pointName);\n    if (!point) {\n      const item = this.get(itemName);\n      const anchorName = name + ANCHOR_NAME_SUFFIX;\n      const prePoint = this.getPrePoint(name, controlPoints);\n      const anchorIndex = model[anchorName];\n      if (!isNil(anchorIndex)) {\n        // 如果有锚点，则使用锚点索引获取连接点\n        point = item.getLinkPointByAnchor(anchorIndex);\n      }\n      // 如果锚点没有对应的点或者没有锚点，则直接计算连接点\n      point = point || item.getLinkPoint(prePoint);\n      if (!isNil(point.index)) {\n        this.set(`${name}AnchorIndex`, point.index);\n      }\n    }\n    return point;\n  }\n\n  /**\n   * 获取同端点进行连接的点，计算交汇点\n   * @param name\n   * @param controlPoints\n   */\n  private getPrePoint(\n    name: SourceTarget,\n    controlPoints: IPoint[],\n  ): NodeConfig | IPoint {\n    if (controlPoints && controlPoints.length) {\n      const index = name === \"source\" ? 0 : controlPoints.length - 1;\n      return controlPoints[index];\n    }\n    const oppositeName = name === \"source\" ? \"target\" : \"source\"; // 取另一个节点的位置\n    return this.getEndPoint(oppositeName);\n  }\n\n  /**\n   * 获取端点的位置\n   * @param name\n   */\n  private getEndPoint(name: SourceTarget): NodeConfig | IPoint {\n    const itemName = name + ITEM_NAME_SUFFIX;\n    const pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n    const item = this.get(itemName);\n    // 如果有端点，直接使用 model\n    if (item) {\n      return item.get(\"model\");\n    } // 否则直接使用点\n    return this.get(pointName);\n  }\n\n  /**\n   * 通过端点的中心获取控制点\n   * @param model\n   */\n  private getControlPointsByCenter(model: EdgeConfig) {\n    const sourcePoint = this.getEndPoint(\"source\");\n    const targetPoint = this.getEndPoint(\"target\");\n    const shapeFactory = this.get(\"shapeFactory\");\n    const type = model.type;\n    return shapeFactory.getControlPoints(type, {\n      startPoint: sourcePoint,\n      endPoint: targetPoint,\n    });\n  }\n\n  private getEndCenter(name: SourceTarget): IPoint {\n    const itemName = name + ITEM_NAME_SUFFIX;\n    const pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n    const item = this.get(itemName);\n    // 如果有端点，直接使用 model\n    if (item) {\n      const bbox = item.getBBox();\n      return {\n        x: bbox.centerX,\n        y: bbox.centerY,\n      };\n    } // 否则直接使用点\n    return this.get(pointName);\n  }\n\n  protected init() {\n    super.init();\n    // 初始化两个端点\n    this.setSource(this.get(\"source\"));\n    this.setTarget(this.get(\"target\"));\n  }\n\n  public getShapeCfg(model: EdgeConfig): EdgeConfig {\n    const self = this;\n    const linkCenter: boolean = self.get(\"linkCenter\"); // 如果连接到中心，忽视锚点、忽视控制点\n\n    const cfg = super.getShapeCfg(model) as EdgeConfig;\n\n    if (linkCenter) {\n      cfg.startPoint = self.getEndCenter(\"source\");\n      cfg.endPoint = self.getEndCenter(\"target\");\n    } else {\n      const controlPoints =\n        cfg.controlPoints || self.getControlPointsByCenter(cfg);\n      cfg.startPoint = self.getLinkPoint(\"source\", model, controlPoints);\n      cfg.endPoint = self.getLinkPoint(\"target\", model, controlPoints);\n    }\n    cfg.sourceNode = self.get(\"sourceNode\");\n    cfg.targetNode = self.get(\"targetNode\");\n\n    return cfg;\n  }\n\n  /**\n   * 获取边的数据模型\n   */\n  public getModel(): EdgeConfig {\n    const out: EdgeConfig = this.get(\"model\");\n    const sourceItem = this.get(`source${ITEM_NAME_SUFFIX}`);\n    const targetItem = this.get(`target${ITEM_NAME_SUFFIX}`);\n    if (sourceItem) {\n      delete out[`source${ITEM_NAME_SUFFIX}`];\n    } else {\n      out.source = this.get(`start${POINT_NAME_SUFFIX}`);\n    }\n\n    if (targetItem) {\n      delete out[`target${ITEM_NAME_SUFFIX}`];\n    } else {\n      out.target = this.get(`end${POINT_NAME_SUFFIX}`);\n    }\n\n    if (!isString(out.source) && !isPlainObject(out.source)) {\n      out.source = (out.source as any).getID();\n    }\n\n    if (!isString(out.target) && !isPlainObject(out.target)) {\n      out.target = (out.target as any).getID();\n    }\n\n    return out;\n  }\n\n  public setSource(source: INode | ICombo) {\n    this.setEnd(\"source\", source);\n    this.set(\"source\", source);\n  }\n\n  public setTarget(target: INode | ICombo) {\n    this.setEnd(\"target\", target);\n    this.set(\"target\", target);\n  }\n\n  public getSource(): INode | ICombo {\n    return this.get(\"source\");\n  }\n\n  public getTarget(): INode | ICombo {\n    return this.get(\"target\");\n  }\n\n  public updatePosition() {\n    return false;\n  }\n\n  /**\n   * 边不需要重计算容器位置，直接重新计算 path 位置\n   * @param {object} cfg 待更新数据\n   */\n  public update(cfg: EdgeConfig, onlyMove: boolean = false) {\n    const model: EdgeConfig = this.get(\"model\");\n    const oriVisible = model.visible;\n    const cfgVisible = cfg.visible;\n    if (oriVisible !== cfgVisible && cfgVisible !== undefined)\n      this.changeVisibility(cfgVisible);\n\n    const styles = this.get(\"styles\");\n    if (cfg.stateStyles) {\n      // 更新 item 时更新 this.get('styles') 中的值\n      const { stateStyles } = cfg;\n      mix(styles, stateStyles);\n      delete cfg.stateStyles;\n    }\n\n    Object.assign(model, cfg);\n    this.updateShape();\n    this.afterUpdate();\n    this.clearCache();\n  }\n\n  public destroy() {\n    const sourceItem: Node = this.get(`source${ITEM_NAME_SUFFIX}`);\n    const targetItem: Node = this.get(`target${ITEM_NAME_SUFFIX}`);\n    if (sourceItem && !sourceItem.destroyed) {\n      sourceItem.removeEdge(this);\n    }\n\n    if (targetItem && !targetItem.destroyed) {\n      targetItem.removeEdge(this);\n    }\n    super.destroy();\n  }\n}\n"
  },
  {
    "path": "packages/core/src/item/hull.ts",
    "content": "import { IGroup } from \"@antv/g-base\";\nimport { deepMix, isString } from \"@antv/util\";\nimport { parsePathString } from \"@antv/path-util\";\nimport { Item, BubblesetCfg, HullCfg } from \"../types\";\nimport {\n  pathToPoints,\n  getClosedSpline,\n  roundedHull,\n  paddedHull,\n} from \"../util/path\";\n\nimport { isPolygonsIntersect } from \"../util/math\";\nimport { IAbstractGraph } from \"../interface/graph\";\n\nimport { genConvexHull } from \"../element/hull/convexHull\";\nimport { genBubbleSet } from \"../element/hull/bubbleset\";\n\n/**\n * 用于包裹内部的成员的轮廓。\n * convex hull(凸包)：http://geomalgorithms.com/a10-_hull-1.html#Monotone%20Chain\n * bubble: 使用 bubbleset算法，refer: http://vialab.science.uoit.ca/wp-content/papercite-data/pdf/col2009c.pdf\n * 通过配置 padding 可以调节包裹轮廓对节点的松紧程度\n */\nexport default class Hull {\n  id: string;\n\n  graph: IAbstractGraph;\n\n  cfg: any;\n\n  path: any[][];\n\n  group: IGroup;\n\n  members: Item[];\n\n  nonMembers: Item[];\n\n  padding: number;\n\n  bubbleCfg: Partial<BubblesetCfg>;\n\n  type: string;\n\n  constructor(graph: IAbstractGraph, cfg: HullCfg) {\n    this.cfg = deepMix(this.getDefaultCfg(), cfg);\n    this.graph = graph;\n    this.id = this.cfg.id;\n    this.group = this.cfg.group;\n    this.members = this.cfg.members.map((item) =>\n      isString(item) ? graph.findById(item) : item,\n    );\n    this.nonMembers = this.cfg.nonMembers.map((item) =>\n      isString(item) ? graph.findById(item) : item,\n    );\n    this.setPadding();\n    this.setType();\n\n    this.path = this.calcPath(this.members, this.nonMembers);\n    this.render();\n  }\n\n  public getDefaultCfg(): HullCfg {\n    return {\n      id: \"g6-hull\",\n      type: \"round-convex\", // 'round-convex' /'smooth-convex' / 'bubble'\n      members: [],\n      nonMembers: [],\n      style: {\n        fill: \"lightblue\",\n        stroke: \"blue\",\n        opacity: 0.2,\n      },\n      padding: 10,\n    };\n  }\n\n  setPadding() {\n    const nodeSize =\n      this.members.length &&\n      this.members[0].getKeyShape().getCanvasBBox().width / 2;\n    this.padding =\n      this.cfg.padding > 0 ? this.cfg.padding + nodeSize : 10 + nodeSize;\n    this.cfg.bubbleCfg = {\n      nodeR0: this.padding - nodeSize,\n      nodeR1: this.padding - nodeSize,\n      morphBuffer: this.padding - nodeSize,\n    };\n  }\n\n  setType() {\n    this.type = this.cfg.type;\n    if (this.members.length < 3) {\n      this.type = \"round-convex\";\n    }\n    if (\n      this.type !== \"round-convex\" &&\n      this.type !== \"smooth-convex\" &&\n      this.type !== \"bubble\"\n    ) {\n      console.warn(\n        \"The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default.\",\n      );\n      this.type = \"round-convex\";\n    }\n  }\n\n  calcPath(members: Item[], nonMembers: Item[]) {\n    let contour, path, hull;\n    switch (this.type) {\n      case \"round-convex\":\n        contour = genConvexHull(members);\n        hull = roundedHull(\n          contour.map((p) => [p.x, p.y]),\n          this.padding,\n        );\n        path = parsePathString(hull);\n        break;\n      case \"smooth-convex\":\n        contour = genConvexHull(members);\n        if (contour.length === 2) {\n          hull = roundedHull(\n            contour.map((p) => [p.x, p.y]),\n            this.padding,\n          );\n          path = parsePathString(hull);\n        } else if (contour.length > 2) {\n          hull = paddedHull(\n            contour.map((p) => [p.x, p.y]),\n            this.padding,\n          );\n          path = getClosedSpline(hull);\n        }\n        break;\n      case \"bubble\":\n        contour = genBubbleSet(members, nonMembers, this.cfg.bubbleCfg);\n        path = contour.length >= 2 && getClosedSpline(contour);\n        break;\n      default:\n    }\n    return path;\n  }\n\n  render() {\n    this.group.addShape(\"path\", {\n      attrs: {\n        path: this.path,\n        ...this.cfg.style,\n      },\n      id: this.id,\n      name: this.cfg.id,\n    });\n    this.group.toBack();\n  }\n\n  /**\n   * 增加hull的成员，同时如果该成员原先在nonMembers中，则从nonMembers中去掉\n   * @param item 节点实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  public addMember(item: Item | string): boolean {\n    if (!item) return;\n    if (isString(item)) item = this.graph.findById(item);\n    this.members.push(item);\n    const index = this.nonMembers.indexOf(item);\n    if (index > -1) {\n      this.nonMembers.splice(index, 1);\n    }\n    this.updateData(this.members, this.nonMembers);\n    return true;\n  }\n\n  /**\n   * 增加hull需要排除的节点，同时如果该成员原先在members中，则从members中去掉\n   * @param item 节点实例\n   * @return boolean 添加成功返回 true，否则返回 false\n   */\n  public addNonMember(item: Item | string): boolean {\n    if (!item) return;\n    if (isString(item)) item = this.graph.findById(item);\n    this.nonMembers.push(item);\n    const index = this.members.indexOf(item);\n    if (index > -1) {\n      this.members.splice(index, 1);\n    }\n    this.updateData(this.members, this.nonMembers);\n    return true;\n  }\n\n  /**\n   * 移除hull中的成员\n   * @param node 节点实例\n   * @return boolean 移除成功返回 true，否则返回 false\n   */\n  public removeMember(item: Item | string): boolean {\n    if (!item) return;\n    if (isString(item)) item = this.graph.findById(item);\n    const index = this.members.indexOf(item);\n    if (index > -1) {\n      this.members.splice(index, 1);\n      this.updateData(this.members, this.nonMembers);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * @param node 节点实例\n   * @return boolean 移除成功返回 true，否则返回 false\n   */\n  public removeNonMember(item: Item | string): boolean {\n    if (!item) return;\n    if (isString(item)) item = this.graph.findById(item);\n    const index = this.nonMembers.indexOf(item);\n    if (index > -1) {\n      this.nonMembers.splice(index, 1);\n      this.updateData(this.members, this.nonMembers);\n      return true;\n    }\n    return false;\n  }\n\n  public updateData(members: Item[] | string[], nonMembers: string[] | Item[]) {\n    this.group.findById(this.id).remove();\n    if (members)\n      this.members = (members as any[]).map((item) =>\n        isString(item) ? this.graph.findById(item) : item,\n      );\n    if (nonMembers)\n      this.nonMembers = (nonMembers as any[]).map((item) =>\n        isString(item) ? this.graph.findById(item) : item,\n      );\n    this.path = this.calcPath(this.members, this.nonMembers);\n    this.render();\n  }\n\n  public updateStyle(cfg: HullCfg[\"style\"]) {\n    const path = this.group.findById(this.id);\n    path.attr({\n      ...cfg,\n    });\n  }\n\n  /**\n   * 更新 hull\n   * @param cfg hull 配置项\n   */\n  public updateCfg(cfg: Partial<HullCfg>) {\n    this.cfg = deepMix(this.cfg, cfg);\n    this.id = this.cfg.id;\n    this.group = this.cfg.group;\n    if (cfg.members) {\n      this.members = this.cfg.members.map((item) =>\n        isString(item) ? this.graph.findById(item) : item,\n      );\n    }\n    if (cfg.nonMembers) {\n      this.nonMembers = this.cfg.nonMembers.map((item) =>\n        isString(item) ? this.graph.findById(item) : item,\n      );\n    }\n    // TODO padding 设置太大，会影响到 contain 结果\n    this.setPadding();\n    this.setType();\n    this.path = this.calcPath(this.members, this.nonMembers);\n    this.render();\n  }\n\n  /**\n   * 判断是否在hull内部\n   * @param item\n   */\n  public contain(item: Item | string): boolean {\n    let nodeItem: Item;\n    if (isString(item)) {\n      nodeItem = this.graph.findById(item);\n    } else {\n      nodeItem = item;\n    }\n    let shapePoints;\n    const shape = nodeItem.getKeyShape();\n    if (nodeItem.get(\"type\") === \"path\") {\n      shapePoints = pathToPoints(shape.attr(\"path\"));\n    } else {\n      const shapeBBox = shape.getCanvasBBox();\n      shapePoints = [\n        [shapeBBox.minX, shapeBBox.minY],\n        [shapeBBox.maxX, shapeBBox.minY],\n        [shapeBBox.maxX, shapeBBox.maxY],\n        [shapeBBox.minX, shapeBBox.maxY],\n      ];\n    }\n    shapePoints = shapePoints.map((canvasPoint) => {\n      const point = this.graph.getPointByCanvas(canvasPoint[0], canvasPoint[1]);\n      return [point.x, point.y];\n    });\n    return isPolygonsIntersect(shapePoints, pathToPoints(this.path));\n  }\n\n  public destroy() {\n    this.group.remove();\n    this.cfg = null;\n  }\n}\n"
  },
  {
    "path": "packages/core/src/item/item.ts",
    "content": "import { IGroup } from \"@antv/g-base\";\nimport {\n  each,\n  isNil,\n  isPlainObject,\n  isString,\n  isBoolean,\n  mix,\n  deepMix,\n  clone,\n} from \"@antv/util\";\nimport { IItemBase, IItemBaseConfig } from \"../interface/item\";\nimport Shape from \"../element/shape\";\nimport {\n  IBBox,\n  IPoint,\n  IShapeBase,\n  ModelConfig,\n  ShapeStyle,\n  Indexable,\n  NodeConfig,\n  EdgeConfig,\n  ComboConfig,\n  ITEM_TYPE,\n} from \"../types\";\nimport { getBBox } from \"../util/graphic\";\nimport { translate } from \"../util/math\";\nimport { uniqueId } from \"../util/base\";\n\nconst CACHE_BBOX = \"bboxCache\";\nconst CACHE_CANVAS_BBOX = \"bboxCanvasCache\";\nconst ARROWS = [\"startArrow\", \"endArrow\"];\n\nexport default class ItemBase implements IItemBase {\n  public _cfg: IItemBaseConfig & {\n    [key: string]: unknown;\n  } = {};\n\n  public destroyed: boolean = false;\n\n  constructor(cfg: IItemBaseConfig) {\n    const defaultCfg: IItemBaseConfig = {\n      /**\n       * id\n       * @type {string}\n       */\n      id: undefined,\n\n      /**\n       * 类型\n       * @type {string}\n       */\n      type: \"item\",\n\n      /**\n       * data model\n       * @type {object}\n       */\n      model: {} as ModelConfig,\n\n      /**\n       * g group\n       * @type {G.Group}\n       */\n      group: undefined,\n\n      /**\n       * is open animate\n       * @type {boolean}\n       */\n      animate: false,\n\n      /**\n       * visible - not group visible\n       * @type {boolean}\n       */\n      visible: true,\n\n      /**\n       * locked - lock node\n       * @type {boolean}\n       */\n      locked: false,\n      /**\n       * capture event\n       * @type {boolean}\n       */\n      event: true,\n      /**\n       * key shape to calculate item's bbox\n       * @type object\n       */\n      keyShape: undefined,\n      /**\n       * item's states, such as selected or active\n       * @type Array\n       */\n      states: [],\n    };\n    this._cfg = Object.assign(defaultCfg, this.getDefaultCfg(), cfg);\n\n    const model = this.get(\"model\");\n    let { id } = model;\n\n    const itemType = this.get(\"type\");\n\n    if (!id) {\n      id = uniqueId(itemType);\n      this.get(\"model\").id = id;\n    }\n\n    this.set(\"id\", id);\n\n    const { group } = cfg;\n    if (group) {\n      group.set(\"item\", this);\n      group.set(\"id\", id);\n    }\n\n    this.init();\n    this.draw();\n\n    const shapeType =\n      (model.shape as string) ||\n      (model.type as string) ||\n      (itemType === \"edge\" ? \"line\" : \"circle\");\n    const shapeFactory = this.get(\"shapeFactory\");\n    if (shapeFactory && shapeFactory[shapeType]) {\n      const { options } = shapeFactory[shapeType];\n      // merge the stateStyles from item and shape\n      if (options && options.stateStyles) {\n        let styles = this.get(\"styles\") || model.stateStyles;\n        styles = deepMix({}, options.stateStyles, styles);\n        this.set(\"styles\", styles);\n      }\n    }\n  }\n\n  /**\n   * 根据 keyshape 计算包围盒\n   */\n  private calculateBBox(): IBBox {\n    const keyShape: IShapeBase = this.get(\"keyShape\");\n    const group: IGroup = this.get(\"group\");\n    // 因为 group 可能会移动，所以必须通过父元素计算才能计算出正确的包围盒\n    const bbox = getBBox(keyShape, group);\n    bbox.x = bbox.minX;\n    bbox.y = bbox.minY;\n    bbox.width = bbox.maxX - bbox.minX;\n    bbox.height = bbox.maxY - bbox.minY;\n    bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n    bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n    return bbox;\n  }\n\n  /**\n   * 根据 keyshape 计算包围盒\n   */\n  public calculateCanvasBBox(): IBBox {\n    const keyShape: IShapeBase = this.get(\"keyShape\");\n    const group: IGroup = this.get(\"group\");\n    // 因为 group 可能会移动，所以必须通过父元素计算才能计算出正确的包围盒\n    const bbox = getBBox(keyShape, group);\n    bbox.x = bbox.minX;\n    bbox.y = bbox.minY;\n    bbox.width = bbox.maxX - bbox.minX;\n    bbox.height = bbox.maxY - bbox.minY;\n    bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n    bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n    return bbox;\n  }\n\n  /**\n   * draw shape\n   */\n  private drawInner() {\n    const self = this;\n    const shapeFactory = self.get(\"shapeFactory\");\n    const group: IGroup = self.get(\"group\");\n    const model: ModelConfig = self.get(\"model\");\n    group.clear();\n    const visible = model.visible;\n    if (visible !== undefined && !visible) self.changeVisibility(visible);\n\n    if (!shapeFactory) {\n      return;\n    }\n    self.updatePosition(model);\n    const cfg = self.getShapeCfg(model); // 可能会附加额外信息\n    const shapeType = cfg.type as string;\n\n    const keyShape: IShapeBase = shapeFactory.draw(shapeType, cfg, group);\n\n    if (keyShape) {\n      self.set(\"keyShape\", keyShape);\n      keyShape.set(\"isKeyShape\", true);\n      keyShape.set(\"draggable\", true);\n    }\n\n    this.setOriginStyle();\n\n    // 防止由于用户外部修改 model 中的 shape 导致 shape 不更新\n    this.set(\"currentShape\", shapeType);\n    this.restoreStates(shapeFactory, shapeType!);\n  }\n\n  /**\n   * 设置图元素原始样式\n   * @param keyShape 图元素 keyShape\n   * @param group Group 容器\n   */\n  public setOriginStyle() {\n    const group: IGroup = this.get(\"group\");\n    const children = group.get(\"children\");\n    const keyShape: IShapeBase = this.getKeyShape();\n    const self = this;\n    const keyShapeName = keyShape.get(\"name\");\n\n    if (!this.get(\"originStyle\")) {\n      // 第一次 set originStyle，直接拿首次渲染所有图形的 attrs\n      const originStyles = {};\n      each(children, (child) => {\n        const shapeType = child.get(\"type\");\n        const name = child.get(\"name\");\n        if (name && name !== keyShapeName) {\n          originStyles[name] =\n            shapeType !== \"image\"\n              ? clone(child.attr())\n              : self.getShapeStyleByName(name);\n        } else {\n          // !name || name === keyShape\n          const keyShapeStyle: ShapeStyle = self.getShapeStyleByName(); // 可优化，需要去除 child.attr 中其他 shape 名的对象\n          if (keyShapeStyle.path) delete keyShapeStyle.path;\n          if (keyShapeStyle.matrix) delete keyShapeStyle.matrix;\n          if (!keyShapeName) {\n            Object.assign(originStyles, keyShapeStyle);\n          } else {\n            // 若 keyShape 有 name 且 !name，这个图形不是 keyShape，给这个图形一个 name\n            if (!name) {\n              const shapeName = uniqueId(\"shape\");\n              child.set(\"name\", shapeName);\n              originStyles[shapeName] =\n                shapeType !== \"image\"\n                  ? clone(child.attr())\n                  : self.getShapeStyleByName(name);\n            } else originStyles[keyShapeName] = keyShapeStyle;\n          }\n        }\n      });\n      self.set(\"originStyle\", originStyles);\n    } else {\n      // 第二次 set originStyles，需要找到不是 stateStyles 的样式，更新到 originStyles 中\n\n      // 上一次设置的 originStyle，是初始的 shape attrs\n      const styles: ShapeStyle = this.getOriginStyle();\n      // let styles: ShapeStyle = {};\n      if (keyShapeName && !styles[keyShapeName]) styles[keyShapeName] = {};\n\n      // 获取当前状态样式\n      const currentStatesStyle = this.getCurrentStatesStyle();\n\n      // 遍历当前所有图形的 attrs，找到不是 stateStyles 的样式更新到 originStyles 中\n      each(children, (child) => {\n        const name = child.get(\"name\");\n        const shapeAttrs = child.attr();\n        if (name && name !== keyShapeName) {\n          // 有 name 的非 keyShape 图形\n          const shapeStateStyle = currentStatesStyle[name];\n          if (!styles[name]) styles[name] = {};\n          if (shapeStateStyle) {\n            Object.keys(shapeAttrs).forEach((key) => {\n              const value = shapeAttrs[key];\n              if (value !== shapeStateStyle[key]) styles[name][key] = value;\n            });\n          } else {\n            styles[name] =\n              child.get(\"type\") !== \"image\"\n                ? clone(shapeAttrs)\n                : self.getShapeStyleByName(name);\n          }\n        } else {\n          const shapeAttrs = child.attr();\n          const keyShapeStateStyles = {\n            ...currentStatesStyle,\n            ...currentStatesStyle[keyShapeName],\n          };\n          Object.keys(shapeAttrs).forEach((key) => {\n            const value = shapeAttrs[key];\n            // 如果是对象且不是 arrow，则是其他 shape 的样式\n            // if (isPlainObject(value) && ARROWS.indexOf(name) === -1) return;\n            if (keyShapeStateStyles[key] !== value) {\n              if (keyShapeName) styles[keyShapeName][key] = value;\n              else styles[key] = value;\n            }\n          });\n        }\n      });\n\n      if (styles.path) delete styles.path;\n      if (styles.matrix) delete styles.matrix;\n      if (styles.x) delete styles.x;\n      if (styles.y) delete styles.y;\n      if (styles[keyShapeName] && styles[keyShapeName].x)\n        delete styles[keyShapeName].x;\n      if (styles[keyShapeName] && styles[keyShapeName].y)\n        delete styles[keyShapeName].y;\n      self.set(\"originStyle\", styles);\n    }\n  }\n\n  /**\n   * restore shape states\n   * @param shapeFactory\n   * @param shapeType\n   */\n  private restoreStates(shapeFactory: any, shapeType: string) {\n    const self = this;\n    const states: string[] = self.get(\"states\");\n    each(states, (state) => {\n      shapeFactory.setState(shapeType, state, true, self);\n    });\n  }\n\n  protected init() {\n    const shapeFactory = Shape.getFactory(this.get(\"type\"));\n    this.set(\"shapeFactory\", shapeFactory);\n  }\n\n  /**\n   * 获取属性\n   * @internal 仅内部类使用\n   * @param  {String} key 属性名\n   * @return {object | string | number} 属性值\n   */\n  public get<T = any>(key: string): T {\n    return this._cfg[key] as T;\n  }\n\n  /**\n   * 设置属性\n   * @internal 仅内部类使用\n   * @param {String|Object} key 属性名，也可以是对象\n   * @param {object | string | number} val 属性值\n   */\n  public set(key: string | object, val?: unknown): void {\n    if (isPlainObject(key)) {\n      this._cfg = { ...this._cfg, ...key };\n    } else {\n      this._cfg[key] = val;\n    }\n  }\n\n  protected getDefaultCfg() {\n    return {};\n  }\n\n  /**\n   * 更新/刷新等操作后，清除 cache\n   */\n  protected clearCache() {\n    this.set(CACHE_BBOX, null);\n    this.set(CACHE_CANVAS_BBOX, null);\n  }\n\n  /**\n   * 渲染前的逻辑，提供给子类复写\n   */\n  protected beforeDraw() {}\n\n  /**\n   * 渲染后的逻辑，提供给子类复写\n   */\n  protected afterDraw() {}\n\n  /**\n   * 更新后做一些工作\n   */\n  protected afterUpdate() {}\n\n  /**\n   * draw shape\n   */\n  public draw() {\n    this.beforeDraw();\n    this.drawInner();\n    this.afterDraw();\n  }\n\n  public getShapeStyleByName(name?: string): ShapeStyle {\n    const group: IGroup = this.get(\"group\");\n    let currentShape: IShapeBase;\n\n    if (name) {\n      currentShape = group.find(\n        (element) => element.get(\"name\") === name,\n      ) as IShapeBase;\n    } else {\n      currentShape = this.getKeyShape();\n    }\n\n    if (currentShape) {\n      const styles: ShapeStyle & Indexable<any> = {};\n\n      each(currentShape.attr(), (val, key) => {\n        // 修改 img 通过 updateItem 实现\n        if (key !== \"img\") {\n          styles[key] = val;\n        }\n      });\n      return styles;\n    }\n    return {};\n  }\n\n  public getShapeCfg(model: ModelConfig): ModelConfig {\n    const styles = this.get(\"styles\");\n    if (styles) {\n      // merge graph的item样式与数据模型中的样式\n      const newModel = model;\n      newModel.style = { ...styles, ...model.style };\n      return newModel;\n    }\n    return model;\n  }\n\n  /**\n   * 获取指定状态的样式，去除了全局样式\n   * @param state 状态名称\n   */\n  public getStateStyle(state: string) {\n    const styles = this.get(\"styles\");\n    const stateStyle = styles && styles[state];\n    return stateStyle;\n  }\n\n  /**\n   * get keyshape style\n   */\n  public getOriginStyle(): ShapeStyle {\n    return this.get(\"originStyle\");\n  }\n\n  public getCurrentStatesStyle(): ShapeStyle {\n    const self = this;\n    let styles = {};\n    const states = self.getStates();\n    if (!states || !states.length) {\n      return this.getOriginStyle();\n    }\n    each(self.getStates(), (state) => {\n      styles = Object.assign(styles, self.getStateStyle(state));\n    });\n    return styles;\n  }\n\n  /**\n   * 更改元素状态， visible 不属于这个范畴\n   * @internal 仅提供内部类 graph 使用\n   * @param {String} state 状态名\n   * @param {Boolean} value 节点状态值\n   */\n  public setState(state: string, value: string | boolean) {\n    const states: string[] = this.get(\"states\");\n    const shapeFactory = this.get(\"shapeFactory\");\n    let stateName = state;\n    let filterStateName = state;\n    if (isString(value)) {\n      stateName = `${state}:${value}`;\n      filterStateName = `${state}:`;\n    }\n\n    let newStates = states;\n\n    if (isBoolean(value)) {\n      const index = states.indexOf(filterStateName);\n      if (value) {\n        if (index > -1) {\n          return;\n        }\n        states.push(stateName);\n      } else if (index > -1) {\n        states.splice(index, 1);\n      }\n    } else if (isString(value)) {\n      // 过滤掉 states 中 filterStateName 相关的状态\n      const filterStates = states.filter((name) =>\n        name.includes(filterStateName),\n      );\n\n      if (filterStates.length > 0) {\n        this.clearStates(filterStates);\n      }\n      newStates = newStates.filter((name) => !name.includes(filterStateName));\n\n      newStates.push(stateName);\n      this.set(\"states\", newStates);\n    }\n\n    if (shapeFactory) {\n      const model: ModelConfig = this.get(\"model\");\n      const type = model.type;\n\n      // 调用 shape/shape.ts 中的 setState\n      shapeFactory.setState(type, state, value, this);\n    }\n  }\n\n  /**\n   * 清除指定的状态，如果参数为空，则不做任务处理\n   * @param states 状态名称\n   */\n  public clearStates(states?: string | string[]) {\n    const self = this;\n    const originStates = self.getStates();\n    const shapeFactory = self.get(\"shapeFactory\");\n    const model: ModelConfig = self.get(\"model\");\n    const shape = model.type;\n    if (!states) {\n      states = originStates;\n    }\n\n    if (isString(states)) {\n      states = [states];\n    }\n\n    const newStates = originStates.filter(\n      (state) => states.indexOf(state) === -1,\n    );\n    self.set(\"states\", newStates);\n\n    states.forEach((state) => {\n      shapeFactory.setState(shape, state, false, self);\n    });\n  }\n\n  /**\n   * 节点的图形容器\n   * @return {G.Group} 图形容器\n   */\n  public getContainer(): IGroup {\n    return this.get(\"group\");\n  }\n\n  /**\n   * 节点的关键形状，用于计算节点大小，连线截距等\n   * @return {IShapeBase} 关键形状\n   */\n  public getKeyShape(): IShapeBase {\n    return this.get(\"keyShape\");\n  }\n\n  /**\n   * 节点数据模型\n   * @return {Object} 数据模型\n   */\n  public getModel(): NodeConfig | EdgeConfig | ComboConfig {\n    return this.get(\"model\");\n  }\n\n  /**\n   * 节点类型\n   * @return {string} 节点的类型\n   */\n  public getType(): ITEM_TYPE {\n    return this.get(\"type\");\n  }\n\n  /**\n   * 获取 Item 的ID\n   */\n  public getID(): string {\n    return this.get(\"id\");\n  }\n\n  /**\n   * 是否是 Item 对象，悬空边情况下进行判定\n   */\n  public isItem(): boolean {\n    return true;\n  }\n\n  /**\n   * 获取当前元素的所有状态\n   * @return {Array} 元素的所有状态\n   */\n  public getStates(): string[] {\n    return this.get(\"states\");\n  }\n\n  /**\n   * 当前元素是否处于某状态\n   * @param {String} state 状态名\n   * @return {Boolean} 是否处于某状态\n   */\n  public hasState(state: string): boolean {\n    const states = this.getStates();\n    return states.indexOf(state) >= 0;\n  }\n\n  /**\n   * 刷新一般用于处理几种情况\n   * 1. item model 在外部被改变\n   * 2. 边的节点位置发生改变，需要重新计算边\n   *\n   * 因为数据从外部被修改无法判断一些属性是否被修改，直接走位置和 shape 的更新\n   */\n  public refresh() {\n    const model: ModelConfig = this.get(\"model\");\n    // 更新元素位置\n    this.updatePosition(model);\n    // 更新元素内容，样式\n    this.updateShape();\n    // 做一些更新之后的操作\n    this.afterUpdate();\n    // 清除缓存\n    this.clearCache();\n  }\n\n  public isOnlyMove(cfg?: ModelConfig): boolean {\n    return false;\n  }\n\n  /**\n   * 将更新应用到 model 上，刷新属性\n   * @internal 仅提供给 Graph 使用，外部直接调用 graph.update 接口\n   * @param  {Object} cfg       配置项，可以是增量信息\n   */\n  public update(cfg: ModelConfig, onlyMove: boolean = false) {\n    const model: ModelConfig = this.get(\"model\");\n    const oriVisible = model.visible;\n    const cfgVisible = cfg.visible;\n    if (oriVisible !== cfgVisible && cfgVisible !== undefined)\n      this.changeVisibility(cfgVisible);\n    const originPosition: IPoint = { x: model.x!, y: model.y! };\n    cfg.x = isNaN(cfg.x) ? model.x : cfg.x;\n    cfg.y = isNaN(cfg.y) ? model.y : cfg.y;\n\n    const styles = this.get(\"styles\");\n    if (cfg.stateStyles) {\n      // 更新 item 时更新 this.get('styles') 中的值\n      const { stateStyles } = cfg;\n      mix(styles, stateStyles);\n      delete cfg.stateStyles;\n    }\n\n    // 直接将更新合到原数据模型上，可以保证用户在外部修改源数据然后刷新时的样式符合期待。\n    Object.assign(model, cfg);\n\n    // isOnlyMove 仅用于node\n    // const onlyMove = this.isOnlyMove(cfg);\n\n    // 仅仅移动位置时，既不更新，也不重绘\n    if (onlyMove) {\n      this.updatePosition(cfg);\n    } else {\n      // 如果 x,y 有变化，先重置位置\n      if (originPosition.x !== cfg.x || originPosition.y !== cfg.y) {\n        this.updatePosition(cfg);\n      }\n      this.updateShape();\n    }\n    this.afterUpdate();\n    this.clearCache();\n  }\n\n  /**\n   * 更新元素内容，样式\n   */\n  public updateShape() {\n    const shapeFactory = this.get(\"shapeFactory\");\n    const model = this.get(\"model\");\n    const shape = model.type;\n    // 判定是否允许更新\n    // 1. 注册的节点允许更新\n    // 2. 更新后的 shape 等于原先的 shape\n    if (\n      shapeFactory.shouldUpdate(shape) &&\n      shape === this.get(\"currentShape\")\n    ) {\n      const updateCfg = this.getShapeCfg(model);\n      shapeFactory.baseUpdate(shape, updateCfg, this);\n\n      // 更新完以后重新设置原始样式\n      this.setOriginStyle();\n    } else {\n      // 如果不满足上面两种状态，重新绘制\n      this.draw();\n    }\n\n    // 更新后重置节点状态\n    this.restoreStates(shapeFactory, shape);\n  }\n\n  /**\n   * 更新位置，避免整体重绘\n   * @param {object} cfg 待更新数据\n   */\n  public updatePosition(cfg: ModelConfig): boolean {\n    const model: ModelConfig = this.get(\"model\");\n\n    const x = isNil(cfg.x) ? model.x : cfg.x;\n    const y = isNil(cfg.y) ? model.y : cfg.y;\n\n    const group: IGroup = this.get(\"group\");\n\n    if (isNil(x) || isNil(y)) {\n      return false;\n    }\n    model.x = x;\n    model.y = y;\n\n    const matrix = group.getMatrix();\n    if (matrix && matrix[6] === x && matrix[7] === y) return false;\n\n    group.resetMatrix();\n    // G 4.0 element 中移除了矩阵相关方法，详见https://www.yuque.com/antv/blog/kxzk9g#4rMMV\n    translate(group, { x: x!, y: y! });\n    this.clearCache(); // 位置更新后需要清除缓存\n    return true;\n  }\n\n  /**\n   * 获取 item 的包围盒，这个包围盒是相对于 item 自己，不会将 matrix 计算在内\n   * @return {Object} 包含 x,y,width,height, centerX, centerY\n   */\n  public getBBox(): IBBox {\n    // 计算 bbox 开销有些大，缓存\n    let bbox: IBBox = this.get(CACHE_BBOX);\n    if (!bbox) {\n      bbox = this.calculateBBox();\n      this.set(CACHE_BBOX, bbox);\n    }\n    return bbox;\n  }\n\n  /**\n   * 获取 item 相对于画布的包围盒，会将从顶层到当前元素的 matrix 都计算在内\n   * @return {Object} 包含 x,y,width,height, centerX, centerY\n   */\n  public getCanvasBBox(): IBBox {\n    // 计算 bbox 开销有些大，缓存\n    let bbox: IBBox = this.get(CACHE_CANVAS_BBOX);\n    if (!bbox) {\n      bbox = this.calculateCanvasBBox();\n      this.set(CACHE_CANVAS_BBOX, bbox);\n    }\n    return bbox;\n  }\n\n  /**\n   * 将元素放到最前面\n   */\n  public toFront() {\n    const group: IGroup = this.get(\"group\");\n    group.toFront();\n  }\n\n  /**\n   * 将元素放到最后面\n   */\n  public toBack() {\n    const group: IGroup = this.get(\"group\");\n    group.toBack();\n  }\n\n  /**\n   * 显示元素\n   */\n  public show() {\n    this.changeVisibility(true);\n  }\n\n  /**\n   * 隐藏元素\n   */\n  public hide() {\n    this.changeVisibility(false);\n  }\n\n  /**\n   * 更改是否显示\n   * @param  {Boolean} visible 是否显示\n   */\n  public changeVisibility(visible: boolean) {\n    const group: IGroup = this.get(\"group\");\n    if (visible) {\n      group.show();\n    } else {\n      group.hide();\n    }\n    this.set(\"visible\", visible);\n  }\n\n  /**\n   * 元素是否可见\n   * @return {Boolean} 返回该元素是否可见\n   */\n  public isVisible(): boolean {\n    return this.get(\"visible\");\n  }\n\n  /**\n   * 是否拾取及出发该元素的交互事件\n   * @param {Boolean} enable 标识位\n   */\n  public enableCapture(enable: boolean) {\n    const group: IGroup = this.get(\"group\");\n    if (group) {\n      group.set(\"capture\", enable);\n    }\n  }\n\n  public destroy() {\n    if (!this.destroyed) {\n      const animate = this.get(\"animate\");\n      const group: IGroup = this.get(\"group\");\n      if (animate) {\n        group.stopAnimate();\n      }\n      this.clearCache();\n      group.remove();\n      (this._cfg as IItemBaseConfig | null) = null;\n      this.destroyed = true;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/core/src/item/node.ts",
    "content": "import { each, isNil, mix } from \"@antv/util\";\nimport { IEdge, INode } from \"../interface/item\";\nimport { IPoint, IShapeBase, ModelConfig, NodeConfig } from \"../types\";\nimport { getBBox } from \"../util/graphic\";\nimport {\n  distance,\n  getCircleIntersectByPoint,\n  getEllipseIntersectByPoint,\n  getRectIntersectByPoint,\n} from \"../util/math\";\nimport Item from \"./item\";\n\nconst CACHE_ANCHOR_POINTS = \"anchorPointsCache\";\nconst CACHE_BBOX = \"bboxCache\";\n\nexport default class Node extends Item implements INode {\n  public getNearestPoint(points: IPoint[], curPoint: IPoint): IPoint {\n    let index = 0;\n    let nearestPoint = points[0];\n    let minDistance = distance(points[0], curPoint);\n    for (let i = 0; i < points.length; i++) {\n      const point = points[i];\n      const dis = distance(point, curPoint);\n      if (dis < minDistance) {\n        nearestPoint = point;\n        minDistance = dis;\n        index = i;\n      }\n    }\n    nearestPoint.anchorIndex = index;\n    return nearestPoint;\n  }\n\n  public getDefaultCfg() {\n    return {\n      type: \"node\",\n      edges: [],\n    };\n  }\n\n  /**\n   * 获取从节点关联的所有边\n   */\n  public getEdges(): IEdge[] {\n    return this.get(\"edges\");\n  }\n\n  /**\n   * 获取所有的入边\n   */\n  public getInEdges(): IEdge[] {\n    const self = this;\n    return this.get(\"edges\").filter(\n      (edge: IEdge) => edge.get(\"target\") === self,\n    );\n  }\n\n  /**\n   * 获取所有的出边\n   */\n  public getOutEdges(): IEdge[] {\n    const self = this;\n    return this.get(\"edges\").filter(\n      (edge: IEdge) => edge.get(\"source\") === self,\n    );\n  }\n\n  /**\n   * 获取节点的邻居节点\n   *\n   * @returns {INode[]}\n   * @memberof Node\n   */\n  public getNeighbors(type?: \"target\" | \"source\" | undefined): INode[] {\n    const edges = this.get(\"edges\") as IEdge[];\n\n    if (type === \"target\") {\n      // 当前节点为 source，它所指向的目标节点\n      const neighhborsConverter = (edge: IEdge) => {\n        return edge.getSource() === this;\n      };\n      return edges.filter(neighhborsConverter).map((edge) => edge.getTarget());\n    }\n    if (type === \"source\") {\n      // 当前节点为 target，它所指向的源节点\n      const neighhborsConverter = (edge: IEdge) => {\n        return edge.getTarget() === this;\n      };\n      return edges.filter(neighhborsConverter).map((edge) => edge.getSource());\n    }\n\n    // 若未指定 type ，则返回所有邻居\n    const neighhborsConverter = (edge: IEdge) => {\n      return edge.getSource() === this ? edge.getTarget() : edge.getSource();\n    };\n    return edges.map(neighhborsConverter);\n  }\n\n  /**\n   * 根据锚点的索引获取连接点\n   * @param  {Number} index 索引\n   */\n  public getLinkPointByAnchor(index: number): IPoint {\n    const anchorPoints = this.getAnchorPoints();\n    return anchorPoints[index];\n  }\n\n  /**\n   * 获取连接点\n   * @param point\n   */\n  public getLinkPoint(point: IPoint): IPoint | null {\n    const keyShape: IShapeBase = this.get(\"keyShape\");\n    const type: string = keyShape.get(\"type\");\n    const itemType: string = this.get(\"type\");\n    let centerX;\n    let centerY;\n    const bbox = this.getBBox();\n    if (itemType === \"combo\") {\n      centerX = bbox.centerX || (bbox.maxX + bbox.minX) / 2;\n      centerY = bbox.centerY || (bbox.maxY + bbox.minY) / 2;\n    } else {\n      centerX = bbox.centerX;\n      centerY = bbox.centerY;\n    }\n    const anchorPoints = this.getAnchorPoints();\n    let intersectPoint: IPoint | null;\n    switch (type) {\n      case \"circle\":\n        intersectPoint = getCircleIntersectByPoint(\n          {\n            x: centerX!,\n            y: centerY!,\n            r: bbox.width / 2,\n          },\n          point,\n        );\n        break;\n      case \"ellipse\":\n        intersectPoint = getEllipseIntersectByPoint(\n          {\n            x: centerX!,\n            y: centerY!,\n            rx: bbox.width / 2,\n            ry: bbox.height / 2,\n          },\n          point,\n        );\n        break;\n      default:\n        intersectPoint = getRectIntersectByPoint(bbox, point);\n    }\n    let linkPoint = intersectPoint;\n    // 如果存在锚点，则使用交点计算最近的锚点\n    if (anchorPoints.length) {\n      if (!linkPoint) {\n        // 如果计算不出交点\n        linkPoint = point;\n      }\n      linkPoint = this.getNearestPoint(anchorPoints, linkPoint);\n    }\n    if (!linkPoint) {\n      // 如果最终依然没法找到锚点和连接点，直接返回中心点\n      linkPoint = { x: centerX, y: centerY } as IPoint;\n    }\n    return linkPoint;\n  }\n\n  /**\n   * 获取锚点的定义\n   * @return {array} anchorPoints\n   */\n  public getAnchorPoints(): IPoint[] {\n    let anchorPoints: IPoint[] = this.get(CACHE_ANCHOR_POINTS);\n    if (!anchorPoints) {\n      anchorPoints = [];\n      const shapeFactory = this.get(\"shapeFactory\");\n      const bbox = this.getBBox();\n      const model: NodeConfig = this.get(\"model\");\n      const shapeCfg = this.getShapeCfg(model);\n      const type = model.type;\n      const points = shapeFactory.getAnchorPoints(type, shapeCfg) || [];\n\n      each(points, (pointArr, index) => {\n        const point = {\n          x: bbox.minX + pointArr[0] * bbox.width,\n          y: bbox.minY + pointArr[1] * bbox.height,\n          anchorIndex: index,\n        };\n        anchorPoints.push(point);\n      });\n      this.set(CACHE_ANCHOR_POINTS, anchorPoints);\n    }\n    return anchorPoints;\n  }\n\n  /**\n   * add edge\n   * @param edge Edge instance\n   */\n  public addEdge(edge: IEdge) {\n    this.get(\"edges\").push(edge);\n  }\n\n  /**\n   * 锁定节点\n   */\n  public lock() {\n    this.set(\"locked\", true);\n  }\n\n  /**\n   * 解锁锁定的节点\n   */\n  public unlock() {\n    this.set(\"locked\", false);\n  }\n\n  public hasLocked(): boolean {\n    return this.get(\"locked\");\n  }\n\n  /**\n   * 移除边\n   * @param {Edge} edge 边\n   */\n  public removeEdge(edge: IEdge) {\n    const edges = this.getEdges();\n    const index = edges.indexOf(edge);\n    if (index > -1) {\n      edges.splice(index, 1);\n    }\n  }\n\n  public clearCache() {\n    this.set(CACHE_BBOX, null); // 清理缓存的 bbox\n    this.set(CACHE_ANCHOR_POINTS, null);\n  }\n\n  /**\n   * 是否仅仅移动节点，其他属性没变化\n   * @param cfg 节点数据模型\n   */\n  public isOnlyMove(cfg: ModelConfig): boolean {\n    if (!cfg) {\n      return false;\n    }\n\n    const existX = !isNil(cfg.x);\n    const existY = !isNil(cfg.y);\n\n    const keys = Object.keys(cfg);\n\n    // 仅有一个字段，包含 x 或者 包含 y\n    // 两个字段，同时有 x，同时有 y\n    return (\n      (keys.length === 1 && (existX || existY)) ||\n      (keys.length === 2 && existX && existY)\n    );\n  }\n}\n"
  },
  {
    "path": "packages/core/src/types/index.ts",
    "content": "/* eslint @typescript-eslint/no-use-before-define: 0 */\nimport {\n  IGroup,\n  Event as GraphEvent,\n  BBox,\n  AnimateCfg,\n  ICanvas,\n  IShape,\n} from \"@antv/g-base\";\nimport Node from \"../item/node\";\nimport { IAbstractGraph } from \"../interface/graph\";\nimport { IEdge, INode, ICombo } from \"../interface/item\";\nimport { ILabelConfig } from \"../interface/shape\";\n\nexport * from \"../interface\";\n\n// Node Edge Combo 实例\nexport type Item = INode | IEdge | ICombo;\n\nexport interface IG6GraphEvent extends GraphEvent {\n  item: Item | null;\n  canvasX: number;\n  canvasY: number;\n  clientX: number;\n  clientY: number;\n  x: number;\n  y: number;\n  detail: number;\n  key?: string;\n  target: IShapeBase & ICanvas;\n  [key: string]: unknown;\n}\n\n// Math types\nexport interface IPoint {\n  x: number;\n  y: number;\n  // 获取连接点时使用\n  anchorIndex?: number;\n  [key: string]: number | undefined;\n}\n\nexport type IPointTuple = [number, number];\n\nexport type Matrix = number[];\n\nexport interface IBBox extends BBox {\n  centerX?: number;\n  centerY?: number;\n  [key: string]: number | undefined;\n}\n\nexport type Padding = number | string | number[];\n\nexport interface ArrowConfig {\n  d?: number;\n  path?: string;\n  stroke?: string;\n  fill?: string;\n}\n\n// Shape types\nexport type ShapeStyle = Partial<{\n  x: number;\n  y: number;\n  r: number;\n  radius: number;\n  width: number;\n  height: number;\n  offset: number | number[];\n  stroke: string | null;\n  strokeOpacity: number;\n  fill: string | null;\n  fillOpacity: number;\n  lineWidth: number;\n  lineAppendWidth: number;\n  lineDash: number[];\n  path: string | object[];\n  points: object[];\n  matrix: number[];\n  opacity: number;\n  size: number | number[];\n  endArrow: boolean | ArrowConfig;\n  startArrow: boolean | ArrowConfig;\n  shadowColor: string;\n  shadowBlur: number;\n  shadowOffsetX: number;\n  shadowOffsetY: number;\n  cursor: string;\n  position: string;\n  fontSize: number;\n\n  keepVisualSize: boolean;\n  // support more properties\n  [key: string]: any;\n}>;\n\nexport interface IShapeBase extends IShape {\n  isKeyShape: boolean;\n}\n\nexport interface IRect extends IPoint {\n  width: number;\n  height: number;\n}\n\nexport interface ICircle extends IPoint {\n  r: number;\n}\n\nexport interface IEllipse extends IPoint {\n  rx: number;\n  ry: number;\n}\n\nexport type SourceTarget = \"source\" | \"target\";\n\n// 自环边配置\nexport type LoopConfig = Partial<{\n  dist: number;\n  position: string;\n  // 如果逆时针画，交换起点和终点\n  clockwise: boolean;\n}>;\n\nexport interface LayoutConfig {\n  type?: string;\n  gpuEnabled?: boolean;\n  workerEnabled?: boolean;\n  // 只有当 workerEnabled 为 true 时才生效\n  workerScriptURL?: string;\n  onLayoutEnd?: () => void;\n  [key: string]: unknown;\n}\n\nexport interface ModeOption {\n  type: string;\n  delegate?: boolean;\n  delegateStyle?: object;\n  updateEdge?: boolean;\n  trigger?: string;\n  enableDelegate?: boolean;\n  maxZoom?: number;\n  minZoom?: number;\n  enableOptimize?: boolean;\n  enableDebounce?: boolean;\n  allowDragOnItem?: boolean;\n  optimizeZoom?: number;\n  multiple?: boolean;\n  activeState?: string;\n  inactiveState?: string;\n  comboActiveState?: string;\n  selectedState?: string;\n  onlyChangeComboSize?: boolean;\n  includeEdges?: boolean;\n  direction?: \"x\" | \"y\";\n  scalableRange?: number;\n  offset?: number;\n  sensitivity?: number;\n  fixSelectedItems?: Partial<{\n    fixAll: boolean;\n    fixLineWidth: boolean;\n    fixLabel: boolean;\n    fixState: string;\n  }>;\n  key?: string | undefined;\n  edgeConfig?: EdgeConfig;\n  functionName?: string;\n  functionParams?: any[];\n  relayout?: boolean;\n  brushStyle?: object;\n  zoomKey?: \"shift\" | \"ctrl\" | \"alt\" | \"control\";\n  shouldUpdate?: (e: IG6GraphEvent) => boolean;\n  shouldBegin?: (e: IG6GraphEvent) => boolean;\n  shouldEnd?: (e: IG6GraphEvent) => boolean;\n  onChange?: (item?: Item, judge?: boolean) => unknown;\n  onSelect?: (selectedNodes?: Item[], selectedEdges?: Item[]) => unknown;\n  onDeselect?: (selectedNodes?: Item[], selectedEdges?: Item[]) => unknown;\n  formatText?: (data: { [key: string]: unknown }) => string;\n}\n\nexport type ModeType = string | ModeOption;\n\nexport interface Modes {\n  default?: ModeType[];\n  [key: string]: ModeType[] | undefined;\n}\n\n// Graph 配置项中 state 的类型\nexport interface States {\n  [key: string]: INode[];\n}\n\nexport interface StateStyles {\n  [key: string]:\n    | ShapeStyle\n    | {\n        [key: string]: ShapeStyle;\n      };\n}\n\n// model types (node edge group)\nexport type ModelStyle = Partial<{\n  [key: string]: unknown;\n  style: ShapeStyle;\n  stateStyles: StateStyles;\n}>;\n\nexport interface GraphOptions {\n  /**\n   * 图的 DOM 容器，可以传入该 DOM 的 id 或者直接传入容器的 HTML 节点对象\n   */\n  container: string | HTMLElement;\n  /**\n   * 指定画布宽度，单位为 'px'，可选，默认为容器宽度\n   */\n  width?: number;\n  /**\n   * 指定画布高度，单位为 'px'，可选，默认为容器宽度\n   */\n  height?: number;\n  /**\n   * renderer canvas or svg\n   */\n  renderer?: string;\n\n  fitView?: boolean;\n\n  fitCenter?: boolean;\n\n  layout?: LayoutConfig;\n\n  /**\n   * 图适应画布时，指定四周的留白。\n   * 可以是一个值, 例如：fitViewPadding: 20\n   * 也可以是一个数组，例如：fitViewPadding: [20, 40, 50,20]\n   * 当指定一个值时，四边的边距都相等，当指定数组时，数组内数值依次对应 上，右，下，左四边的边距。\n   */\n  fitViewPadding?: Padding;\n  /**\n   * 各种元素是否在一个分组内，决定节点和边的层级问题，默认情况下所有的节点在一个分组中，所有的边在一个分组中，当这个参数为 false 时，节点和边的层级根据生成的顺序确定。\n   * 默认值：true\n   */\n  groupByTypes?: boolean;\n\n  // 是否有向图\n  directed?: boolean;\n\n  groupStyle?: {\n    style?: {\n      [key: string]: ShapeStyle;\n    };\n  };\n\n  /**\n   * 当图中元素更新，或视口变换时，是否自动重绘。建议在批量操作节点时关闭，以提高性能，完成批量操作后再打开，参见后面的 setAutoPaint() 方法。\n   * 默认值：true\n   */\n  autoPaint?: boolean;\n\n  /**\n   * 设置画布的模式。详情可见G6中的Mode文档。\n   */\n  modes?: Modes;\n\n  /**\n   * 默认状态下节点的配置，比如 type, size, color。会被写入的 data 覆盖。\n   */\n  defaultNode?: Partial<{\n    type: string;\n    size: number | number[];\n    color: string;\n  }> &\n    ModelStyle;\n\n  /**\n   * 默认状态下边的配置，比如 type, size, color。会被写入的 data 覆盖。\n   */\n  defaultEdge?: Partial<{\n    type: string;\n    size: number | number[];\n    color: string;\n  }> &\n    ModelStyle;\n\n  /**\n   * Combo 默认配置\n   */\n  defaultCombo?: Partial<{\n    type: string;\n    size: number | number[];\n    color: string;\n  }> &\n    ModelStyle;\n\n  nodeStateStyles?: StateStyles;\n\n  edgeStateStyles?: StateStyles;\n\n  // Combo 状态样式\n  comboStateStyles?: StateStyles;\n\n  /**\n   * 向 graph 注册插件。插件机制请见：plugin\n   */\n  plugins?: any[];\n  /**\n   * 是否启用全局动画。\n   */\n  animate?: boolean;\n\n  /**\n   * 动画配置项，仅在animate为true时有效。\n   */\n  animateCfg?: GraphAnimateConfig;\n  /**\n   * 最小缩放比例\n   * 默认值 0.2\n   */\n  minZoom?: number;\n  /**\n   * 最大缩放比例\n   * 默认值 10\n   */\n  maxZoom?: number;\n\n  groupType?: string;\n\n  /**\n   * Edge 是否连接到节点中间\n   */\n  linkCenter?: boolean;\n\n  /**\n   * 是否启用 stack，即是否开启 redo & undo 功能\n   */\n  enabledStack?: boolean;\n\n  /**\n   * redo & undo 最大步数, 只有当 enabledStack 为 true 时才起作用\n   */\n  maxStep?: number;\n\n  /**\n   * 存储图上的 tooltip dom，方便销毁\n   */\n  tooltips?: [];\n\n  pixelRatio?: number;\n}\n\nexport type LabelStyle = Partial<{\n  rotate: number;\n  textAlign: \"center\" | \"start\" | \"end\" | \"left\" | \"right\";\n  angle: number;\n  x: number;\n  y: number;\n  text: string;\n  stroke: string | null;\n  opacity: number;\n  fontSize: number;\n  fontStyle: \"normal\" | \"italic\" | \"oblique\";\n  fontWeight?: \"normal\" | \"bold\" | \"bolder\" | \"lighter\" | number;\n  fill: string | null;\n  rotateCenter: string;\n  lineWidth: number;\n  shadowColor: string;\n  shadowBlur: number;\n  shadowOffsetX?: number;\n  shadowOffsetY?: number;\n  position: string;\n  textBaseline:\n    | \"top\"\n    | \"middle\"\n    | \"bottom\"\n    | \"hanging\"\n    | \"alphabetic\"\n    | \"ideographic\";\n  offset: number;\n  background?: {\n    fill?: string;\n    stroke?: string;\n    lineWidth?: number;\n    radius?: number[] | number;\n    padding?: number[] | number;\n  };\n}>;\n\nexport type Easeing =\n  | \"easeLinear\"\n  | \"easePolyIn\"\n  | \"easePolyOut\"\n  | \"easePolyInOut\"\n  | \"easeQuad\"\n  | \"easeQuadIn\"\n  | \"easeQuadOut\"\n  | \"easeQuadInOut\"\n  | string;\n\nexport interface ModelConfig extends ModelStyle {\n  // 节点或边的类型\n  type?: string;\n  label?: string | LabelStyle;\n  labelCfg?: ILabelConfig;\n  x?: number;\n  y?: number;\n  size?: number | number[];\n  color?: string;\n  anchorPoints?: number[][];\n  startPoint?: {\n    x: number;\n    y: number;\n  };\n  endPoint?: {\n    x: number;\n    y: number;\n  };\n  visible?: boolean;\n}\n\nexport interface TreeGraphData {\n  id: string;\n  label?: string;\n  x?: number;\n  y?: number;\n  children?: TreeGraphData[];\n  data?: ModelConfig;\n  side?: \"left\" | \"right\";\n  depth?: number;\n  collapsed?: boolean;\n  style?:\n    | ShapeStyle\n    | {\n        [key: string]: ShapeStyle;\n      };\n  stateStyles?: StateStyles;\n  [key: string]: unknown;\n}\n\nexport interface NodeConfig extends ModelConfig {\n  id: string;\n  groupId?: string;\n  comboId?: string;\n  children?: TreeGraphData[];\n  description?: string;\n  descriptionCfg?: {\n    style?: object;\n    [key: string]: any;\n  };\n  img?: string;\n  innerR?: number;\n  direction?: string;\n  preRect?: {\n    show?: boolean;\n    [key: string]: any;\n  };\n  logoIcon?: {\n    show?: boolean;\n    [key: string]: any;\n  };\n  stateIcon?: {\n    show?: boolean;\n    [key: string]: any;\n  };\n  linkPoints?: {\n    top?: boolean;\n    right?: boolean;\n    bottom?: boolean;\n    left?: boolean;\n    size?: number;\n    lineWidth?: number;\n    fill?: string;\n    stroke?: string;\n    r?: number;\n    [key: string]: any;\n  };\n  icon?: {\n    show?: boolean;\n    // icon的地址，字符串类型\n    img?: string;\n    text?: string;\n    width?: number;\n    height?: number;\n    offset?: number;\n  };\n  clipCfg?: {\n    show?: boolean;\n    type?: string;\n    // circle\n    r?: number;\n    // ellipse\n    rx?: number;\n    ry?: number;\n    // rect\n    width?: number;\n    height?: number;\n    // polygon\n    points?: number[][];\n    // path\n    path?: Array<Array<string | number>>;\n    // 坐标\n    x?: number;\n    y?: number;\n    // clip 的属性样式\n    // style?: ShapeStyle\n  };\n}\n\nexport interface ComboTree {\n  id: string;\n  label?: string | LabelStyle;\n  children?: ComboTree[];\n  depth?: number;\n  parentId?: string;\n  removed?: boolean;\n  itemType?: \"node\" | \"combo\";\n  [key: string]: unknown;\n}\n\nexport interface ComboConfig extends ModelConfig {\n  id: string;\n  parentId?: string;\n  children?: ComboTree[];\n  depth?: number;\n  padding?: number | number[];\n  collapseIcon?: Partial<{\n    show: boolean;\n    collapseSymbol: any;\n    expandSymbol: any;\n    r: number;\n    lineWidth: number;\n    stroke: string;\n    offsetX: number;\n    offsetY: number;\n  }>;\n}\n\nexport interface EdgeConfig extends ModelConfig {\n  id?: string;\n  source?: string;\n  target?: string;\n  sourceNode?: Node;\n  targetNode?: Node;\n  startPoint?: IPoint;\n  endPoint?: IPoint;\n  controlPoints?: IPoint[];\n  curveOffset?: number | number[];\n  minCurveOffset?: number | number[];\n  // loop edge config\n  loopCfg?: LoopConfig;\n  labelCfg?: ILabelConfig;\n  curvePosition?: number | number[];\n}\n\nexport type EdgeData = EdgeConfig & {\n  sourceNode: Node;\n  targetNode: Node;\n  startPoint: IPoint;\n  endPoint: IPoint;\n};\n\nexport interface NodeMap {\n  [key: string]: INode;\n}\n\nexport interface NodeConfigMap {\n  [key: string]: NodeConfig;\n}\n\nexport interface GraphData {\n  nodes?: NodeConfig[];\n  edges?: EdgeConfig[];\n  combos?: ComboConfig[];\n  [key: string]: any;\n}\n\nexport interface GraphAnimateConfig extends AnimateCfg {\n  /**\n   * 回调函数，用于自定义节点运动路径。\n   */\n  onFrame?: (\n    item: Item,\n    ratio: number,\n    data?: GraphData,\n    originAttrs?: ShapeStyle,\n  ) => unknown;\n}\n\nexport interface GroupNodeIds {\n  [key: string]: string[];\n}\n\n// Behavior type file\nexport enum G6Event {\n  // common events\n  CLICK = \"click\",\n  DBLCLICK = \"dblclick\",\n  TAP = \"tap\",\n  DBLTAP = \"dbltap\",\n  DRAGSTART = \"dragstart\",\n  DRAGEND = \"dragend\",\n  DRAG = \"drag\",\n  DRAGENTER = \"dragenter\",\n  DRAGLEAVE = \"dragleave\",\n  DRAGOVER = \"dragover\",\n  DRAGOUT = \"dragout\",\n  DDROP = \"drop\",\n  PINCHSTART = \"pinchstart\",\n  PINCHMOVE = \"pinchmove\",\n  PANSTART = \"panstart\",\n  PANMOVE = \"panmove\",\n  PANEND = \"panend\",\n  PRESS = \"press\",\n  ACTION_END = \"actionend\",\n\n  // touch events\n  TOUCHSTART = \"touchstart\",\n  TOUCHMOVE = \"touchmove\",\n  TOUCHEND = \"touchend\",\n  CANVAS_TOUCHSTART = \"canvas:touchstart\",\n  CANVAS_TOUCHMOVE = \"canvas:touchmove\",\n  CANVAS_TOUCHEND = \"canvas:touchend\",\n  NODE_TOUCHSTART = \"node:touchstart\",\n  NODE_TOUCHMOVE = \"node:touchmove\",\n  NODE_TOUCHEND = \"node:touchend\",\n  COMBO_TOUCHSTART = \"combo:touchstart\",\n  COMBO_TOUCHMOVE = \"combo:touchmove\",\n  COMBO_TOUCHEND = \"combo:touchend\",\n  EDGE_TOUCHSTART = \"edge:touchstart\",\n  EDGE_TOUCHMOVE = \"edge:touchmove\",\n  EDGE_TOUCHEND = \"edge:touchend\",\n\n  // node events\n  NODE_CLICK = \"node:click\",\n  NODE_DBLCLICK = \"node:dblclick\",\n  NODE_DROP = \"node:drop\",\n  NODE_DRAGOVER = \"node:dragover\",\n  NODE_DRAGENTER = \"node:dragenter\",\n  NODE_DRAGLEAVE = \"node:dragleave\",\n  NODE_DRAGSTART = \"node:dragstart\",\n  NODE_DRAG = \"node:drag\",\n  NODE_DRAGEND = \"node:dragend\",\n  NODE_TAP = \"node:tap\",\n  NODE_DBLTAP = \"node:dbltap\",\n  NODE_PANSTART = \"node:panstart\",\n  NODE_PANMOVE = \"node:panmove\",\n  NODE_PANEND = \"node:panend\",\n  NODE_PRESS = \"node:press\",\n\n  // combo, extends from nodes\n  COMBO_CLICK = \"combo:click\",\n  COMBO_DBLCLICK = \"combo:dblclick\",\n  COMBO_DROP = \"combo:drop\",\n  COMBO_DRAGOVER = \"combo:dragover\",\n  COMBO_DRAGENTER = \"combo:dragenter\",\n  COMBO_DRAGLEAVE = \"combo:dragleave\",\n  COMBO_DRAGSTART = \"combo:dragstart\",\n  COMBO_DRAG = \"combo:drag\",\n  COMBO_DRAGEND = \"combo:dragend\",\n  COMBO_TAP = \"combo:tap\",\n  COMBO_DBLTAP = \"combo:dbltap\",\n  COMBO_PANSTART = \"combo:panstart\",\n  COMBO_PANMOVE = \"combo:panmove\",\n  COMBO_PANEND = \"combo:panend\",\n  COMBO_PRESS = \"combo:press\",\n\n  // edge events\n  EDGE_CLICK = \"edge:click\",\n  EDGE_DBLCLICK = \"edge:dblclick\",\n  EDGE_DROP = \"edge:drop\",\n  EDGE_DRAGOVER = \"edge:dragover\",\n  EDGE_DRAGENTER = \"edge:dragenter\",\n  EDGE_DRAGLEAVE = \"edge:dragleave\",\n  EDGE_TAP = \"edge:tap\",\n  EDGE_DBLTAP = \"edge:dbltap\",\n  EDGE_PRESS = \"edge:press\",\n\n  // canvas events\n  CANVAS_CLICK = \"canvas:click\",\n  CANVAS_DBLCLICK = \"canvas:dblclick\",\n  CANVAS_DROP = \"canvas:drop\",\n  CANVAS_DRAGENTER = \"canvas:dragenter\",\n  CANVAS_DRAGLEAVE = \"canvas:dragleave\",\n  CANVAS_DRAGSTART = \"canvas:dragstart\",\n  CANVAS_DRAG = \"canvas:drag\",\n  CANVAS_DRAGEND = \"canvas:dragend\",\n  CANVAS_TAP = \"canvas:tap\",\n  CANVAS_DBLTAP = \"canvas:dbltap\",\n  CANVAS_PANSTART = \"canvas:panstart\",\n  CANVAS_PANMOVE = \"canvas:panmove\",\n  CANVAS_PANEND = \"canvas:panend\",\n  CANVAS_PRESS = \"canvas:press\",\n\n  // timing events\n  BEFORERENDER = \"beforerender\",\n  AFTERRENDER = \"afterrender\",\n  BEFOREADDITEM = \"beforeadditem\",\n  AFTERADDITEM = \"afteradditem\",\n  BEFOREREMOVEITEM = \"beforeremoveitem\",\n  AFTERREMOVEITEM = \"afterremoveitem\",\n  BEFOREUPDATEITEM = \"beforeupdateitem\",\n  AFTERUPDATEITEM = \"afterupdateitem\",\n  BEFOREITEMVISIBILITYCHANGE = \"beforeitemvisibilitychange\",\n  AFTERITEMVISIBILITYCHANGE = \"afteritemvisibilitychange\",\n  BEFOREITEMSTATECHANGE = \"beforeitemstatechange\",\n  AFTERITEMSTATECHANGE = \"afteritemstatechange\",\n  BEFOREITEMREFRESH = \"beforeitemrefresh\",\n  AFTERITEMREFRESH = \"afteritemrefresh\",\n  BEFOREITEMSTATESCLEAR = \"beforeitemstatesclear\",\n  AFTERITEMSTATESCLEAR = \"afteritemstatesclear\",\n  BEFOREMODECHANGE = \"beforemodechange\",\n  AFTERMODECHANGE = \"aftermodechange\",\n  BEFORELAYOUT = \"beforelayout\",\n  AFTERLAYOUT = \"afterlayout\",\n  BEFORECREATEEDGE = \"beforecreateedge\",\n  AFTERCREATEEDGE = \"aftercreateedge\",\n  BEFOREGRAPHREFRESHPOSITION = \"beforegraphrefreshposition\",\n  AFTERGRAPHREFRESHPOSITION = \"aftergraphrefreshposition\",\n  BEFOREGRAPHREFRESH = \"beforegraphrefresh\",\n  AFTERGRAPHREFRESH = \"aftergraphrefresh\",\n  BEFOREANIMATE = \"beforeanimate\",\n  AFTERANIMATE = \"afteranimate\",\n  BEFOREPAINT = \"beforepaint\",\n  AFTERPAINT = \"afterpaint\",\n  BEFORECOLLAPSEEXPANDCOMBO = \"beforecollapseexpandcombo\",\n  AFTERCOLLAPSEEXPANDCOMBO = \"aftercollapseexpandcombo\",\n\n  GRAPHSTATECHANGE = \"graphstatechange\",\n  AFTERACTIVATERELATIONS = \"afteractivaterelations\",\n  NODESELECTCHANGE = \"nodeselectchange\",\n  TOOLTIPCHANGE = \"tooltipchange\",\n  WHEELZOOM = \"wheelzoom\",\n  VIEWPORTCHANGE = \"viewportchange\",\n  DRAGNODEEND = \"dragnodeend\",\n  STACKCHANGE = \"stackchange\",\n}\n\nexport type DefaultBehaviorType = IG6GraphEvent | string | number | object;\n\nexport interface BehaviorOption {\n  getEvents: () => {\n    [key in G6Event]?: string;\n  };\n  getDefaultCfg?: () => object;\n  shouldBegin?: (e?: IG6GraphEvent) => boolean;\n  shouldUpdate?: (e?: IG6GraphEvent) => boolean;\n  shouldEnd?: (e?: IG6GraphEvent) => boolean;\n  bind?: (e: IAbstractGraph) => void;\n  unbind?: (e: IAbstractGraph) => void;\n  [key: string]: unknown;\n}\n\nexport type IEvent = Record<G6Event, string>;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport type ITEM_TYPE = \"node\" | \"edge\" | \"combo\" | \"vedge\";\n\nexport type NodeIdxMap = {\n  [key: string]: number;\n};\n\n// 触发 viewportchange 事件的参数\nexport interface ViewPortEventParam {\n  action: string;\n  matrix: Matrix;\n}\n\nexport interface Indexable<T> {\n  [key: string]: T;\n}\n\n// 图算法回调方法接口定义\nexport interface IAlgorithmCallbacks {\n  enter?: (param: { current: INode; previous: INode }) => void;\n  leave?: (param: { current: INode; previous?: INode }) => void;\n  allowTraversal?: (param: {\n    previous?: INode;\n    current?: INode;\n    next: INode;\n  }) => boolean;\n}\n\n// 栈中数据格式\nexport interface StackData {\n  action: string;\n  data: GraphData;\n}\n\nexport interface BubblesetCfg {\n  morphBuffer?: number; // DEFAULT_NODE_R0; the amount of space to move the virtual edge when wrapping around obstacles\n  pixelGroupSize?: number; // the resolution of the algorithm in square pixels, 4 by default\n  maxMarchingIterations?: number; // number of times to refine the boundary, 100 by default\n  maxRoutingIterations?: number; // number of times to run the algorithm to refine the path finding in difficult areas\n  nodeR0?: number; // the distance from nodes which energy is 1 (full influence)\n  nodeR1?: number; // the distance from nodes at which energy is 0 (no influence)\n  edgeR0?: number; // the distance from edges at which energy is 1 (full influence)\n  edgeR1?: number; // the distance from edges at which energy is 0 (no influence)\n  nodeInfluenceFactor?: number; // node influence factor\n  negativeNodeInfluenceFactor?: number; // negativeNode influence factor\n  edgeInfluenceFactor?: number; // edge influence factor\n  memberInfluenceFactor?: number; // member influence factor\n  nonMemberInfluenceFactor?: number; // nonMember influence factor\n}\n\nexport type TimeBarType = \"trend\" | \"simple\" | \"tick\";\n\nexport interface HullCfg {\n  id: string;\n  members?: Item[] | string[]; // 节点实例或节点 Id 数组\n  nonMembers?: Item[] | string[];\n  group?: IGroup;\n  type?: string; // 'round-convex'(圆角凸包) /'smooth-convex'(平滑凸包) / 'bubble'(平滑凹包),\n  padding?: number; // 轮廓边缘和内部成员间距\n  style?: {\n    fill?: string;\n    stroke?: string;\n    opacity?: number;\n  };\n  bubbleCfg?: BubblesetCfg; // 用于更精细控制bubble的效果（点和边轮廓的松弛程度，轮廓粒度），一般不需要配置\n  update?: string;\n}\n"
  },
  {
    "path": "packages/core/src/util/base.ts",
    "content": "import { isString, isNumber, isNil, isArray } from \"@antv/util\";\nimport { G6GraphEvent } from \"../interface/behavior\";\nimport { IG6GraphEvent, Padding, Matrix, Item } from \"../types\";\n\nexport const uniqueId = (type: string): string => {\n  return `${type}-${Math.random()}${Date.now()}`;\n};\n\n/**\n * turn padding into [top, right, bottom, right]\n * @param  {Number|Array} padding input padding\n * @return {array} output\n */\nexport const formatPadding = (padding: Padding): number[] => {\n  let top = 0;\n  let left = 0;\n  let right = 0;\n  let bottom = 0;\n\n  if (isNumber(padding)) {\n    top = left = right = bottom = padding;\n  } else if (isString(padding)) {\n    const intPadding = parseInt(padding, 10);\n    top = left = right = bottom = intPadding;\n  } else if (isArray(padding)) {\n    top = padding[0];\n    right = !isNil(padding[1]) ? padding[1] : padding[0];\n    bottom = !isNil(padding[2]) ? padding[2] : padding[0];\n    left = !isNil(padding[3]) ? padding[3] : right;\n  }\n  return [top, right, bottom, left];\n};\n\n/**\n * clone event\n * @param e\n */\nexport const cloneEvent = (e: IG6GraphEvent): IG6GraphEvent => {\n  const event = new G6GraphEvent(e.type, e);\n  event.clientX = e.clientX;\n  event.clientY = e.clientY;\n  event.x = e.x;\n  event.y = e.y;\n  event.target = e.target;\n  event.currentTarget = e.currentTarget;\n  event.bubbles = true;\n  (event.item as Item | null) = e.item;\n  return event;\n};\n\n/**\n * 判断 viewport 是否改变，通过和单位矩阵对比\n * @param matrix Viewport 的 Matrix\n */\nexport const isViewportChanged = (matrix: Matrix) => {\n  // matrix 为 null， 则说明没有变化\n  if (!matrix) {\n    return false;\n  }\n\n  const MATRIX_LEN = 9;\n  const ORIGIN_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n  for (let i = 0; i < MATRIX_LEN; i++) {\n    if (matrix[i] !== ORIGIN_MATRIX[i]) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexport const isNaN = (input: any) => Number.isNaN(Number(input));\n\n/**\n * 计算一组 Item 的 BBox\n * @param items 选中的一组Item，可以是 node 或 combo\n */\nexport const calculationItemsBBox = (items: Item[]) => {\n  let minx = Infinity;\n  let maxx = -Infinity;\n  let miny = Infinity;\n  let maxy = -Infinity;\n\n  // 获取已节点的所有最大最小x y值\n  for (let i = 0; i < items.length; i++) {\n    const element = items[i];\n    const bbox = element.getBBox();\n    const { minX, minY, maxX, maxY } = bbox;\n    if (minX < minx) {\n      minx = minX;\n    }\n\n    if (minY < miny) {\n      miny = minY;\n    }\n\n    if (maxX > maxx) {\n      maxx = maxX;\n    }\n\n    if (maxY > maxy) {\n      maxy = maxY;\n    }\n  }\n\n  const x = Math.floor(minx);\n  const y = Math.floor(miny);\n  const width = Math.ceil(maxx) - Math.floor(minx);\n  const height = Math.ceil(maxy) - Math.floor(miny);\n\n  return {\n    x,\n    y,\n    width,\n    height,\n    minX: minx,\n    minY: miny,\n    maxX: maxx,\n    maxY: maxy,\n  };\n};\n\n/**\n * 若 edges 中存在两端点相同的边，使用 quadratic 边并自动计算 curveOffset 使它们不相互重叠\n * 文档: https://g6.antv.vision/en/docs/api/Util\n * @param edges 边数据集合\n * @param offsetDiff 相邻两边的 offset 之差\n * @param multiEdgeType\n * @param singleEdgeType\n * @param loopEdgeType\n */\nexport const processParallelEdges = (\n  edges,\n  offsetDiff = 15,\n  multiEdgeType: string = \"quadratic\",\n  singleEdgeType: string = undefined,\n  loopEdgeType: string = undefined,\n) => {\n  const len = edges.length;\n  const cod = offsetDiff * 2;\n  const loopPosition = [\n    \"top\",\n    \"top-right\",\n    \"right\",\n    \"bottom-right\",\n    \"bottom\",\n    \"bottom-left\",\n    \"left\",\n    \"top-left\",\n  ];\n  const edgeMap = {};\n  const tags = [];\n  const reverses = {};\n  for (let i = 0; i < len; i++) {\n    const edge = edges[i];\n    const { source, target } = edge;\n    const sourceTarget = `${source}-${target}`;\n\n    if (tags[i]) continue;\n    if (!edgeMap[sourceTarget]) {\n      edgeMap[sourceTarget] = [];\n    }\n    tags[i] = true;\n    edgeMap[sourceTarget].push(edge);\n    for (let j = 0; j < len; j++) {\n      if (i === j) continue;\n      const sedge = edges[j];\n      const src = sedge.source;\n      const dst = sedge.target;\n\n      // 两个节点之间共同的边\n      // 第一条的source = 第二条的target\n      // 第一条的target = 第二条的source\n      if (!tags[j]) {\n        if (source === dst && target === src) {\n          edgeMap[sourceTarget].push(sedge);\n          tags[j] = true;\n          reverses[`${src}|${dst}|${edgeMap[sourceTarget].length - 1}`] = true;\n        } else if (source === src && target === dst) {\n          edgeMap[sourceTarget].push(sedge);\n          tags[j] = true;\n        }\n      }\n    }\n  }\n\n  for (const key in edgeMap) {\n    const arcEdges = edgeMap[key];\n    const { length } = arcEdges;\n    for (let k = 0; k < length; k++) {\n      const current = arcEdges[k];\n      if (current.source === current.target) {\n        if (loopEdgeType) current.type = loopEdgeType;\n        // 超过8条自环边，则需要重新处理\n        current.loopCfg = {\n          position: loopPosition[k % 8],\n          dist: Math.floor(k / 8) * 20 + 50,\n        };\n        continue;\n      }\n      if (length === 1 && singleEdgeType && current.source !== current.target) {\n        current.type = singleEdgeType;\n        continue;\n      }\n      current.type = multiEdgeType;\n      const sign =\n        (k % 2 === 0 ? 1 : -1) *\n        (reverses[`${current.source}|${current.target}|${k}`] ? -1 : 1);\n      if (length % 2 === 1) {\n        current.curveOffset = sign * Math.ceil(k / 2) * cod;\n      } else {\n        current.curveOffset = sign * (Math.floor(k / 2) * cod + offsetDiff);\n      }\n    }\n  }\n  return edges;\n};\n"
  },
  {
    "path": "packages/core/src/util/color.ts",
    "content": "export const defaultSubjectColors = [\n  \"#5F95FF\", // blue\n  \"#61DDAA\",\n  \"#65789B\",\n  \"#F6BD16\",\n  \"#7262FD\",\n  \"#78D3F8\",\n  \"#9661BC\",\n  \"#F6903D\",\n  \"#008685\",\n  \"#F08BB4\",\n];\n"
  },
  {
    "path": "packages/core/src/util/graphic.ts",
    "content": "import { IGroup, BBox } from \"@antv/g-base\";\nimport { vec2 } from \"@antv/matrix-util\";\nimport Global from \"../global\";\nimport {\n  EdgeData,\n  IBBox,\n  IPoint,\n  IShapeBase,\n  LabelStyle,\n  NodeConfig,\n  ComboTree,\n  ComboConfig,\n} from \"../types\";\nimport { applyMatrix } from \"./math\";\nimport letterAspectRatio from \"./letterAspectRatio\";\nimport { isString, clone, isNumber, isObject } from \"@antv/util\";\nimport { IAbstractGraph } from \"../interface/graph\";\n\nconst { PI, sin, cos } = Math;\n\n// 一共支持8个方向的自环，每个环占的角度是45度，在计算时再二分，为22.5度\nconst SELF_LINK_SIN: number = sin(PI / 8);\nconst SELF_LINK_COS: number = cos(PI / 8);\n\nexport const getBBox = (element: IShapeBase, group: IGroup): IBBox => {\n  const bbox = element.getBBox();\n  let leftTop: IPoint = {\n    x: bbox.minX,\n    y: bbox.minY,\n  };\n  let rightBottom: IPoint = {\n    x: bbox.maxX,\n    y: bbox.maxY,\n  };\n  // 根据父元素变换矩阵\n  if (group) {\n    let matrix = group.getMatrix();\n    if (!matrix) {\n      matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    }\n    leftTop = applyMatrix(leftTop, matrix);\n    rightBottom = applyMatrix(rightBottom, matrix);\n  }\n\n  const { x: lx, y: ly } = leftTop;\n  const { x: rx, y: ry } = rightBottom;\n\n  return {\n    x: lx,\n    y: ly,\n    minX: lx,\n    minY: ly,\n    maxX: rx,\n    maxY: ry,\n    width: rx - lx,\n    height: ry - ly,\n  };\n};\n\n/**\n * get loop edge config\n * @param cfg edge config\n */\nexport const getLoopCfgs = (cfg: EdgeData): EdgeData => {\n  const item = cfg.sourceNode || cfg.targetNode;\n  const container: IGroup = item.get(\"group\");\n  let containerMatrix = container.getMatrix();\n  if (!containerMatrix) containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n  const keyShape: IShapeBase = item.getKeyShape();\n  const bbox: IBBox = keyShape.getBBox();\n\n  const loopCfg = cfg.loopCfg || {};\n  // 距离keyShape边的最高距离\n  const dist: number = loopCfg.dist || Math.max(bbox.width, bbox.height) * 2;\n  // 自环边与keyShape的相对位置关系\n  const position: string = loopCfg.position || Global.defaultLoopPosition;\n\n  // 中心取group上真实位置\n  const center = [containerMatrix[6], containerMatrix[7]];\n  let startPoint = [cfg.startPoint.x, cfg.startPoint.y];\n  let endPoint = [cfg.endPoint.x, cfg.endPoint.y];\n\n  let rstart = bbox.height / 2;\n  let rend = bbox.height / 2;\n  let sinDeltaStart = rstart * SELF_LINK_SIN;\n  let cosDeltaStart = rstart * SELF_LINK_COS;\n  let sinDeltaEnd = rend * SELF_LINK_SIN;\n  let cosDeltaEnd = rend * SELF_LINK_COS;\n\n  // 如果定义了锚点的，直接用锚点坐标，否则，根据自环的 cfg 计算\n  if (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1]) {\n    switch (position) {\n      case \"top\":\n        startPoint = [center[0] - sinDeltaStart, center[1] - cosDeltaStart];\n        endPoint = [center[0] + sinDeltaEnd, center[1] - cosDeltaEnd];\n        break;\n      case \"top-right\":\n        rstart = bbox.height / 2;\n        rend = bbox.width / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] + sinDeltaStart, center[1] - cosDeltaStart];\n        endPoint = [center[0] + cosDeltaEnd, center[1] - sinDeltaEnd];\n        break;\n      case \"right\":\n        rstart = bbox.width / 2;\n        rend = bbox.width / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] + cosDeltaStart, center[1] - sinDeltaStart];\n        endPoint = [center[0] + cosDeltaEnd, center[1] + sinDeltaEnd];\n        break;\n      case \"bottom-right\":\n        rstart = bbox.width / 2;\n        rend = bbox.height / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] + cosDeltaStart, center[1] + sinDeltaStart];\n        endPoint = [center[0] + sinDeltaEnd, center[1] + cosDeltaEnd];\n        break;\n      case \"bottom\":\n        rstart = bbox.height / 2;\n        rend = bbox.height / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] + sinDeltaStart, center[1] + cosDeltaStart];\n        endPoint = [center[0] - sinDeltaEnd, center[1] + cosDeltaEnd];\n        break;\n      case \"bottom-left\":\n        rstart = bbox.height / 2;\n        rend = bbox.width / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] - sinDeltaStart, center[1] + cosDeltaStart];\n        endPoint = [center[0] - cosDeltaEnd, center[1] + sinDeltaEnd];\n        break;\n      case \"left\":\n        rstart = bbox.width / 2;\n        rend = bbox.width / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] - cosDeltaStart, center[1] + sinDeltaStart];\n        endPoint = [center[0] - cosDeltaEnd, center[1] - sinDeltaEnd];\n        break;\n      case \"top-left\":\n        rstart = bbox.width / 2;\n        rend = bbox.height / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] - cosDeltaStart, center[1] - sinDeltaStart];\n        endPoint = [center[0] - sinDeltaEnd, center[1] - cosDeltaEnd];\n        break;\n      default:\n        rstart = bbox.width / 2;\n        rend = bbox.width / 2;\n        sinDeltaStart = rstart * SELF_LINK_SIN;\n        cosDeltaStart = rstart * SELF_LINK_COS;\n        sinDeltaEnd = rend * SELF_LINK_SIN;\n        cosDeltaEnd = rend * SELF_LINK_COS;\n        startPoint = [center[0] - sinDeltaStart, center[1] - cosDeltaStart];\n        endPoint = [center[0] + sinDeltaEnd, center[1] - cosDeltaEnd];\n    }\n    // 如果逆时针画，交换起点和终点\n    if (loopCfg.clockwise === false) {\n      const swap = [startPoint[0], startPoint[1]];\n      startPoint = [endPoint[0], endPoint[1]];\n      endPoint = [swap[0], swap[1]];\n    }\n  }\n\n  const startVec: vec2 = [startPoint[0] - center[0], startPoint[1] - center[1]];\n  let scaleRateStart = (rstart + dist) / rstart;\n  let scaleRateEnd = (rend + dist) / rend;\n  if (loopCfg.clockwise === false) {\n    scaleRateStart = (rend + dist) / rend;\n    scaleRateEnd = (rstart + dist) / rstart;\n  }\n\n  const startExtendVec = vec2.scale([0, 0], startVec, scaleRateStart);\n  const controlPoint1 = [\n    center[0] + startExtendVec[0],\n    center[1] + startExtendVec[1],\n  ];\n  const endVec: vec2 = [endPoint[0] - center[0], endPoint[1] - center[1]];\n\n  const endExtendVec = vec2.scale([0, 0], endVec, scaleRateEnd);\n  const controlPoint2 = [\n    center[0] + endExtendVec[0],\n    center[1] + endExtendVec[1],\n  ];\n\n  cfg.startPoint = { x: startPoint[0], y: startPoint[1] };\n  cfg.endPoint = { x: endPoint[0], y: endPoint[1] };\n  cfg.controlPoints = [\n    { x: controlPoint1[0], y: controlPoint1[1] },\n    { x: controlPoint2[0], y: controlPoint2[1] },\n  ];\n  return cfg;\n};\n\n/**\n * 根据 label 所在线条的位置百分比，计算 label 坐标\n * @param {object}  pathShape  G 的 path 实例，一般是 Edge 实例的 keyShape\n * @param {number}  percent    范围 0 - 1 的线条百分比\n * @param {number}  refX     x 轴正方向为基准的 label 偏移\n * @param {number}  refY     y 轴正方向为基准的 label 偏移\n * @param {boolean} rotate     是否根据线条斜率旋转文本\n * @return {object} 文本的 x, y, 文本的旋转角度\n */\nexport const getLabelPosition = (\n  pathShape,\n  percent: number,\n  refX: number,\n  refY: number,\n  rotate: boolean,\n): LabelStyle => {\n  const TAN_OFFSET = 0.0001;\n  let vector: number[][] = [];\n  const point: IPoint = pathShape.getPoint(percent);\n  if (point === null) {\n    return {\n      x: 0,\n      y: 0,\n      angle: 0,\n    };\n  }\n\n  // 头尾最可能，放在最前面，使用 g path 上封装的方法\n  if (percent < TAN_OFFSET) {\n    vector = pathShape.getStartTangent().reverse();\n  } else if (percent > 1 - TAN_OFFSET) {\n    vector = pathShape.getEndTangent();\n  } else {\n    // 否则取指定位置的点,与少量偏移的点，做微分向量\n    const offsetPoint: IPoint = pathShape.getPoint(percent + TAN_OFFSET);\n    vector.push([point.x, point.y]);\n    vector.push([offsetPoint.x, offsetPoint.y]);\n  }\n\n  let rad: number = Math.atan2(\n    vector[1][1] - vector[0][1],\n    vector[1][0] - vector[0][0],\n  );\n\n  if (rad < 0) {\n    rad += PI * 2;\n  }\n\n  if (refX) {\n    point.x += cos(rad) * refX;\n    point.y += sin(rad) * refX;\n  }\n  if (refY) {\n    // 默认方向是 x 轴正方向，法线是 求出角度 - 90°\n    let normal = rad - PI / 2;\n    // 若法线角度在 y 轴负方向，切到正方向，保证 refY 相对于 y 轴正方向\n    if (rad > (1 / 2) * PI && rad < ((3 * 1) / 2) * PI) {\n      normal -= PI;\n    }\n    point.x += cos(normal) * refY;\n    point.y += sin(normal) * refY;\n  }\n\n  const result = {\n    x: point.x,\n    y: point.y,\n    angle: rad,\n  };\n\n  if (rotate) {\n    if (rad > (1 / 2) * PI && rad < ((3 * 1) / 2) * PI) {\n      rad -= PI;\n    }\n    return {\n      rotate: rad,\n      ...result,\n    };\n  }\n  return result;\n};\n\n/**\n * depth first traverse, from root to leaves, children in inverse order\n *  if the fn returns false, terminate the traverse\n */\nconst traverse = <T extends { children?: T[] }>(\n  data: T,\n  fn: (param: T) => boolean,\n) => {\n  if (fn(data) === false) {\n    return false;\n  }\n\n  if (data && data.children) {\n    for (let i = data.children.length - 1; i >= 0; i--) {\n      if (!traverse(data.children[i], fn)) return false;\n    }\n  }\n  return true;\n};\n\n/**\n * depth first traverse, from leaves to root, children in inverse order\n *  if the fn returns false, terminate the traverse\n */\nconst traverseUp = <T extends { children?: T[] }>(\n  data: T,\n  fn: (param: T) => boolean,\n) => {\n  if (data && data.children) {\n    for (let i = data.children.length - 1; i >= 0; i--) {\n      if (!traverseUp(data.children[i], fn)) return;\n    }\n  }\n\n  if (fn(data) === false) {\n    return false;\n  }\n  return true;\n};\n\n/**\n * depth first traverse, from root to leaves, children in inverse order\n *  if the fn returns false, terminate the traverse\n */\nexport const traverseTree = <T extends { children?: T[] }>(\n  data: T,\n  fn: (param: T) => boolean,\n) => {\n  if (typeof fn !== \"function\") {\n    return;\n  }\n  traverse(data, fn);\n};\n\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nexport const traverseTreeUp = <T extends { children?: T[] }>(\n  data: T,\n  fn: (param: T) => boolean,\n) => {\n  if (typeof fn !== \"function\") {\n    return;\n  }\n  traverseUp(data, fn);\n};\n\n/**\n *\n * @param letter the letter\n * @param fontSize\n * @return the letter's width\n */\nexport const getLetterWidth = (letter, fontSize) => {\n  return fontSize * (letterAspectRatio[letter] || 1);\n};\n\n/**\n *\n * @param text the text\n * @param fontSize\n * @return the text's size\n */\nexport const getTextSize = (text: string, fontSize: number) => {\n  let width = 0;\n  const pattern = new RegExp(\"[\\u{4E00}-\\u{9FA5}]+\");\n  text.split(\"\").forEach((letter) => {\n    if (pattern.test(letter)) {\n      // 中文字符\n      width += fontSize;\n    } else {\n      width += getLetterWidth(letter, fontSize);\n    }\n  });\n  return [width, fontSize];\n};\n\n/**\n * construct the trees from combos data\n * @param array the combos array\n * @param nodes the nodes array\n * @return the tree\n */\nexport const plainCombosToTrees = (\n  array: ComboConfig[],\n  nodes?: NodeConfig[],\n) => {\n  const result: ComboTree[] = [];\n  const addedMap = {};\n  const modelMap = {};\n  array.forEach((d) => {\n    modelMap[d.id] = d;\n  });\n\n  array.forEach((d, i) => {\n    const cd = clone(d);\n    cd.itemType = \"combo\";\n    cd.children = undefined;\n    if (cd.parentId === cd.id) {\n      console.warn(\n        `The parentId for combo ${cd.id} can not be the same as the combo's id`,\n      );\n      delete cd.parentId;\n    } else if (cd.parentId && !modelMap[cd.parentId]) {\n      console.warn(`The parent combo for combo ${cd.id} does not exist!`);\n      delete cd.parentId;\n    }\n    let mappedObj = addedMap[cd.id];\n    if (mappedObj) {\n      cd.children = mappedObj.children;\n      addedMap[cd.id] = cd;\n      mappedObj = cd;\n      if (!mappedObj.parentId) {\n        result.push(mappedObj);\n        return;\n      }\n      const mappedParent = addedMap[mappedObj.parentId];\n      if (mappedParent) {\n        if (mappedParent.children) mappedParent.children.push(cd);\n        else mappedParent.children = [cd];\n      } else {\n        const parent = {\n          id: mappedObj.parentId,\n          children: [mappedObj],\n        };\n        addedMap[mappedObj.parentId] = parent;\n        addedMap[cd.id] = cd;\n      }\n      return;\n    }\n    if (isString(d.parentId)) {\n      const parent = addedMap[d.parentId];\n      if (parent) {\n        if (parent.children) parent.children.push(cd);\n        else parent.children = [cd];\n        addedMap[cd.id] = cd;\n      } else {\n        const pa = {\n          id: d.parentId,\n          children: [cd],\n        };\n        addedMap[pa.id] = pa;\n        addedMap[cd.id] = cd;\n      }\n    } else {\n      result.push(cd);\n      addedMap[cd.id] = cd;\n    }\n  });\n\n  // proccess the nodes\n  const nodeMap = {};\n  (nodes || []).forEach((node) => {\n    nodeMap[node.id] = node;\n    const combo = addedMap[node.comboId as string];\n    if (combo) {\n      const cnode: NodeConfig = {\n        id: node.id,\n        comboId: node.comboId as string,\n      };\n      if (combo.children) combo.children.push(cnode);\n      else combo.children = [cnode];\n      cnode.itemType = \"node\";\n      addedMap[node.id] = cnode;\n    }\n  });\n\n  // assign the depth for each element\n  let maxDepth = 0;\n  result.forEach((tree: ComboTree) => {\n    tree.depth = maxDepth + 10;\n    traverse<ComboTree>(tree, (child) => {\n      let parent;\n      const itemType = addedMap[child.id].itemType;\n      if (itemType === \"node\") {\n        parent = addedMap[child.comboId as string];\n      } else {\n        parent = addedMap[child.parentId];\n      }\n      if (parent) {\n        if (itemType === \"node\") child.depth = maxDepth + 1;\n        else child.depth = maxDepth + 10;\n      } else {\n        child.depth = maxDepth + 10;\n      }\n      if (maxDepth < child.depth) maxDepth = child.depth;\n      const oriNodeModel = nodeMap[child.id];\n      if (oriNodeModel) {\n        oriNodeModel.depth = child.depth;\n      }\n      return true;\n    });\n  });\n  return result;\n};\n\nexport const reconstructTree = (\n  trees: ComboTree[],\n  subtreeId?: string,\n  newParentId?: string | undefined,\n): ComboTree[] => {\n  let brothers = trees;\n  let subtree;\n  const comboChildsMap = {\n    root: {\n      children: trees,\n    },\n  };\n  let foundSubTree = false;\n  let oldParentId = \"root\";\n  (trees || []).forEach((tree) => {\n    if (foundSubTree) return;\n    if (tree.id === subtreeId) {\n      subtree = tree;\n      if (tree.itemType === \"combo\") {\n        subtree.parentId = newParentId;\n      } else {\n        subtree.comboId = newParentId;\n      }\n      foundSubTree = true;\n      return;\n    }\n    traverseTree<ComboTree>(tree, (child: any) => {\n      comboChildsMap[child.id] = {\n        children: child.children,\n      };\n      // store the old parent id to delete the subtree from the old parent's children in next recursion\n      brothers =\n        comboChildsMap[child.parentId || child.comboId || \"root\"].children;\n      if (child && (child.removed || subtreeId === child.id) && brothers) {\n        oldParentId = child.parentId || child.comboId || \"root\";\n        subtree = child;\n        // re-assign the parentId or comboId for the moved subtree\n        if (child.itemType === \"combo\") {\n          subtree.parentId = newParentId;\n        } else {\n          subtree.comboId = newParentId;\n        }\n        foundSubTree = true;\n        return false;\n      }\n      return true;\n    });\n  });\n\n  brothers = comboChildsMap[oldParentId].children;\n  const index = brothers ? brothers.indexOf(subtree) : -1;\n  if (index > -1) brothers.splice(index, 1);\n\n  // 如果遍历完整棵树还没有找到，说明之前就不在树中\n  if (!foundSubTree) {\n    subtree = {\n      id: subtreeId,\n      itemType: \"node\",\n      comboId: newParentId,\n    };\n\n    comboChildsMap[subtreeId] = {\n      children: undefined,\n    };\n  }\n\n  // append to new parent\n  if (subtreeId) {\n    let found = false;\n    // newParentId is undefined means the subtree will have no parent\n    if (newParentId) {\n      let newParentDepth = 0;\n      (trees || []).forEach((tree) => {\n        if (found) return; // terminate\n        traverseTree<ComboTree>(tree, (child: any) => {\n          // append subtree to the new parent ans assign the depth to the subtree\n          if (newParentId === child.id) {\n            found = true;\n            if (child.children) child.children.push(subtree);\n            else child.children = [subtree];\n            newParentDepth = child.depth;\n            if (subtree.itemType === \"node\") subtree.depth = newParentDepth + 2;\n            else subtree.depth = newParentDepth + 1;\n            return false; // terminate\n          }\n          return true;\n        });\n      });\n    } else if ((!newParentId || !found) && subtree.itemType !== \"node\") {\n      // if the newParentId is undefined or it is not found in the tree, add the subTree to the root\n      trees.push(subtree);\n    }\n    // update the depth of the subtree and its children from the subtree\n    let currentDepth = subtree.depth;\n    traverseTree<ComboTree>(subtree, (child: any) => {\n      if (child.itemType === \"node\") currentDepth += 2;\n      else currentDepth += 1;\n      child.depth = currentDepth;\n      return true;\n    });\n  }\n  return trees;\n};\n\nexport const getComboBBox = (\n  children: ComboTree[],\n  graph: IAbstractGraph,\n): BBox => {\n  const comboBBox = {\n    minX: Infinity,\n    minY: Infinity,\n    maxX: -Infinity,\n    maxY: -Infinity,\n    x: undefined,\n    y: undefined,\n    width: undefined,\n    height: undefined,\n    centerX: undefined,\n    centerY: undefined,\n  };\n\n  if (!children || children.length === 0) {\n    return comboBBox;\n  }\n\n  children.forEach((child) => {\n    const childItem = graph.findById(child.id);\n    if (!childItem || !childItem.isVisible()) return; // ignore hidden children\n    childItem.set(\"bboxCanvasCache\", undefined);\n    const childBBox = childItem.getCanvasBBox();\n    if (childBBox.x && comboBBox.minX > childBBox.minX)\n      comboBBox.minX = childBBox.minX;\n    if (childBBox.y && comboBBox.minY > childBBox.minY)\n      comboBBox.minY = childBBox.minY;\n    if (childBBox.x && comboBBox.maxX < childBBox.maxX)\n      comboBBox.maxX = childBBox.maxX;\n    if (childBBox.y && comboBBox.maxY < childBBox.maxY)\n      comboBBox.maxY = childBBox.maxY;\n  });\n  comboBBox.x = (comboBBox.minX + comboBBox.maxX) / 2;\n  comboBBox.y = (comboBBox.minY + comboBBox.maxY) / 2;\n  comboBBox.width = comboBBox.maxX - comboBBox.minX;\n  comboBBox.height = comboBBox.maxY - comboBBox.minY;\n\n  comboBBox.centerX = (comboBBox.minX + comboBBox.maxX) / 2;\n  comboBBox.centerY = (comboBBox.minY + comboBBox.maxY) / 2;\n\n  Object.keys(comboBBox).forEach((key) => {\n    if (comboBBox[key] === Infinity || comboBBox[key] === -Infinity) {\n      comboBBox[key] = undefined;\n    }\n  });\n\n  return comboBBox;\n};\n\nexport const shouldRefreshEdge = (cfg) => {\n  let refreshEdge =\n    isNumber(cfg.x) ||\n    isNumber(cfg.y) ||\n    cfg.type ||\n    cfg.anchorPoints ||\n    cfg.size;\n  if (cfg.style)\n    refreshEdge =\n      refreshEdge ||\n      isNumber(cfg.style.r) ||\n      isNumber(cfg.style.width) ||\n      isNumber(cfg.style.height) ||\n      isNumber(cfg.style.rx) ||\n      isNumber(cfg.style.ry);\n  return refreshEdge;\n};\n\nexport const cloneBesidesImg = (obj) => {\n  const clonedObj = {};\n  Object.keys(obj).forEach((key1) => {\n    const obj2 = obj[key1];\n    if (isObject(obj2)) {\n      const clonedObj2 = {};\n      Object.keys(obj2).forEach((key2) => {\n        const v = obj2[key2];\n        if (key2 === \"img\" && !isString(v)) return;\n        clonedObj2[key2] = clone(v);\n      });\n      clonedObj[key1] = clonedObj2;\n    } else {\n      clonedObj[key1] = clone(obj2);\n    }\n  });\n  return clonedObj;\n};\n"
  },
  {
    "path": "packages/core/src/util/index.ts",
    "content": "import * as MathUtil from \"./math\";\nimport * as GraphicUtil from \"./graphic\";\nimport * as PathUtil from \"./path\";\nimport * as BaseUtil from \"./base\";\nimport * as ColorUtil from \"./color\";\nimport { ext, mat3 } from \"@antv/matrix-util\";\n\nconst transform = ext.transform;\n\nconst Util = {\n  ...BaseUtil,\n  ...GraphicUtil,\n  ...PathUtil,\n  ...MathUtil,\n  ...ColorUtil,\n  transform,\n  mat3,\n};\nexport default Util;\n"
  },
  {
    "path": "packages/core/src/util/letterAspectRatio.ts",
    "content": "export default {\n  \" \": 0.3329986572265625,\n  a: 0.5589996337890625,\n  A: 0.6569992065429687,\n  b: 0.58599853515625,\n  B: 0.6769989013671875,\n  c: 0.5469985961914062,\n  C: 0.7279998779296875,\n  d: 0.58599853515625,\n  D: 0.705999755859375,\n  e: 0.554998779296875,\n  E: 0.63699951171875,\n  f: 0.37299957275390627,\n  F: 0.5769989013671875,\n  g: 0.5909988403320312,\n  G: 0.7479995727539063,\n  h: 0.555999755859375,\n  H: 0.7199996948242188,\n  i: 0.255999755859375,\n  I: 0.23699951171875,\n  j: 0.26699981689453123,\n  J: 0.5169998168945312,\n  k: 0.5289993286132812,\n  K: 0.6899993896484375,\n  l: 0.23499908447265624,\n  L: 0.5879989624023437,\n  m: 0.854998779296875,\n  M: 0.8819992065429687,\n  n: 0.5589996337890625,\n  N: 0.7189987182617188,\n  o: 0.58599853515625,\n  O: 0.7669998168945312,\n  p: 0.58599853515625,\n  P: 0.6419998168945312,\n  q: 0.58599853515625,\n  Q: 0.7669998168945312,\n  r: 0.3649993896484375,\n  R: 0.6759994506835938,\n  s: 0.504998779296875,\n  S: 0.6319992065429687,\n  t: 0.354998779296875,\n  T: 0.6189987182617187,\n  u: 0.5599990844726562,\n  U: 0.7139999389648437,\n  v: 0.48199920654296874,\n  V: 0.6389999389648438,\n  w: 0.754998779296875,\n  W: 0.929998779296875,\n  x: 0.5089996337890625,\n  X: 0.63699951171875,\n  y: 0.4959991455078125,\n  Y: 0.66199951171875,\n  z: 0.48699951171875,\n  Z: 0.6239990234375,\n  \"0\": 0.6,\n  \"1\": 0.40099945068359377,\n  \"2\": 0.6,\n  \"3\": 0.6,\n  \"4\": 0.6,\n  \"5\": 0.6,\n  \"6\": 0.6,\n  \"7\": 0.5469985961914062,\n  \"8\": 0.6,\n  \"9\": 0.6,\n  \"[\": 0.3329986572265625,\n  \"]\": 0.3329986572265625,\n  \",\": 0.26399993896484375,\n  \".\": 0.26399993896484375,\n  \";\": 0.26399993896484375,\n  \":\": 0.26399993896484375,\n  \"{\": 0.3329986572265625,\n  \"}\": 0.3329986572265625,\n  \"\\\\\": 0.5,\n  \"|\": 0.19499969482421875,\n  \"=\": 0.604998779296875,\n  \"+\": 0.604998779296875,\n  \"-\": 0.604998779296875,\n  _: 0.5,\n  \"`\": 0.3329986572265625,\n  \" ~\": 0.8329986572265625,\n  \"!\": 0.3329986572265625,\n  \"@\": 0.8579986572265625,\n  \"#\": 0.6,\n  $: 0.6,\n  \"%\": 0.9699996948242188,\n  \"^\": 0.517999267578125,\n  \"&\": 0.7259994506835937,\n  \"*\": 0.505999755859375,\n  \"(\": 0.3329986572265625,\n  \")\": 0.3329986572265625,\n  \"<\": 0.604998779296875,\n  \">\": 0.604998779296875,\n  \"/\": 0.5,\n  \"?\": 0.53699951171875,\n};\n"
  },
  {
    "path": "packages/core/src/util/math.ts",
    "content": "import { Point, IGroup } from \"@antv/g-base\";\nimport { mat3, vec3, ext, vec2 } from \"@antv/matrix-util\";\nimport { isArray, each } from \"@antv/util\";\nimport {\n  GraphData,\n  ICircle,\n  IEllipse,\n  IRect,\n  Matrix,\n  EdgeConfig,\n  NodeIdxMap,\n  IBBox,\n  Item,\n  IPoint,\n} from \"../types\";\n\nconst transform = ext.transform;\n\n/**\n * 对比对象，用于对象数组排序\n * @param   {string}       attributeName  排序依据的字段名称\n * @param   {number}       min    最小值\n * @param   {number}       max    最大值\n * @return  {boolean}      bool   布尔\n */\nexport const compare = (attributeName: string) => {\n  return (m, n) => {\n    return m[attributeName] - n[attributeName];\n  };\n};\n\n/**\n * 是否在区间内\n * @param   {number}       value  值\n * @param   {number}       min    最小值\n * @param   {number}       max    最大值\n * @return  {boolean}      bool   布尔\n */\nconst isBetween = (value: number, min: number, max: number) =>\n  value >= min && value <= max;\n\n/**\n * 获取两条线段的交点\n * @param  {Point}  p0 第一条线段起点\n * @param  {Point}  p1 第一条线段终点\n * @param  {Point}  p2 第二条线段起点\n * @param  {Point}  p3 第二条线段终点\n * @return {Point}  交点\n */\nexport const getLineIntersect = (\n  p0: Point,\n  p1: Point,\n  p2: Point,\n  p3: Point,\n): Point | null => {\n  const tolerance = 0.0001;\n\n  const E: Point = {\n    x: p2.x - p0.x,\n    y: p2.y - p0.y,\n  };\n  const D0: Point = {\n    x: p1.x - p0.x,\n    y: p1.y - p0.y,\n  };\n  const D1: Point = {\n    x: p3.x - p2.x,\n    y: p3.y - p2.y,\n  };\n  const kross: number = D0.x * D1.y - D0.y * D1.x;\n  const sqrKross: number = kross * kross;\n  const invertKross: number = 1 / kross;\n  const sqrLen0: number = D0.x * D0.x + D0.y * D0.y;\n  const sqrLen1: number = D1.x * D1.x + D1.y * D1.y;\n  if (sqrKross > tolerance * sqrLen0 * sqrLen1) {\n    const s = (E.x * D1.y - E.y * D1.x) * invertKross;\n    const t = (E.x * D0.y - E.y * D0.x) * invertKross;\n    if (!isBetween(s, 0, 1) || !isBetween(t, 0, 1)) return null;\n    return {\n      x: p0.x + s * D0.x,\n      y: p0.y + s * D0.y,\n    };\n  }\n  return null;\n};\n\n/**\n * point and rectangular intersection point\n * @param  {IRect} rect  rect\n * @param  {Point} point point\n * @return {PointPoint} rst;\n */\nexport const getRectIntersectByPoint = (\n  rect: IRect,\n  point: Point,\n): Point | null => {\n  const { x, y, width, height } = rect;\n  const cx = x + width / 2;\n  const cy = y + height / 2;\n  const points: Point[] = [];\n  const center: Point = {\n    x: cx,\n    y: cy,\n  };\n  points.push({\n    x,\n    y,\n  });\n  points.push({\n    x: x + width,\n    y,\n  });\n  points.push({\n    x: x + width,\n    y: y + height,\n  });\n  points.push({\n    x,\n    y: y + height,\n  });\n  points.push({\n    x,\n    y,\n  });\n  let rst: Point | null = null;\n  for (let i = 1; i < points.length; i++) {\n    rst = getLineIntersect(points[i - 1], points[i], center, point);\n    if (rst) {\n      break;\n    }\n  }\n  return rst;\n};\n\n/**\n * get point and circle inIntersect\n * @param {ICircle} circle 圆点，x,y,r\n * @param {Point} point 点 x,y\n * @return {Point} applied point\n */\nexport const getCircleIntersectByPoint = (\n  circle: ICircle,\n  point: Point,\n): Point | null => {\n  const { x: cx, y: cy, r } = circle;\n  const { x, y } = point;\n\n  const dx = x - cx;\n  const dy = y - cy;\n  const d = Math.sqrt(dx * dx + dy * dy);\n  if (d < r) {\n    return null;\n  }\n  const signX = Math.sign(dx);\n  const signY = Math.sign(dy);\n  const angle = Math.atan(dy / dx);\n  return {\n    x: cx + Math.abs(r * Math.cos(angle)) * signX,\n    y: cy + Math.abs(r * Math.sin(angle)) * signY,\n  };\n};\n\n/**\n * get point and ellipse inIntersect\n * @param {Object} ellipse 椭圆 x,y,rx,ry\n * @param {Object} point 点 x,y\n * @return {object} applied point\n */\nexport const getEllipseIntersectByPoint = (\n  ellipse: IEllipse,\n  point: Point,\n): Point => {\n  const a = ellipse.rx;\n  const b = ellipse.ry;\n  const cx = ellipse.x;\n  const cy = ellipse.y;\n\n  const dx = point.x - cx;\n  const dy = point.y - cy;\n  // 直接通过 x,y 求夹角，求出来的范围是 -PI, PI\n  let angle = Math.atan2(dy / b, dx / a);\n\n  if (angle < 0) {\n    angle += 2 * Math.PI; // 转换到 0，2PI\n  }\n\n  return {\n    x: cx + a * Math.cos(angle),\n    y: cy + b * Math.sin(angle),\n  };\n};\n\n/**\n * coordinate matrix transformation\n * @param  {number} point   coordinate\n * @param  {Matrix} matrix  matrix\n * @param  {number} tag     could be 0 or 1\n * @return {Point} transformed point\n */\nexport const applyMatrix = (\n  point: Point,\n  matrix: Matrix,\n  tag: 0 | 1 = 1,\n): Point => {\n  const vector: vec3 = [point.x, point.y, tag];\n  if (!matrix || isNaN(matrix[0])) {\n    matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n  }\n\n  vec3.transformMat3(vector, vector, matrix as mat3);\n\n  return {\n    x: vector[0],\n    y: vector[1],\n  };\n};\n\n/**\n * coordinate matrix invert transformation\n * @param  {number} point   coordinate\n * @param  {number} matrix  matrix\n * @param  {number} tag     could be 0 or 1\n * @return {object} transformed point\n */\nexport const invertMatrix = (\n  point: Point,\n  matrix: Matrix,\n  tag: 0 | 1 = 1,\n): Point => {\n  if (!matrix || isNaN(matrix[0])) {\n    matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n  }\n\n  let inversedMatrix = mat3.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], matrix as mat3);\n  if (!inversedMatrix) {\n    inversedMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n  }\n  const vector: vec3 = [point.x, point.y, tag];\n  vec3.transformMat3(vector, vector, inversedMatrix);\n\n  return {\n    x: vector[0],\n    y: vector[1],\n  };\n};\n\n/**\n *\n * @param p1 First coordinate\n * @param p2 second coordinate\n * @param p3 three coordinate\n */\nexport const getCircleCenterByPoints = (\n  p1: Point,\n  p2: Point,\n  p3: Point,\n): Point => {\n  const a = p1.x - p2.x;\n  const b = p1.y - p2.y;\n  const c = p1.x - p3.x;\n  const d = p1.y - p3.y;\n  const e = (p1.x * p1.x - p2.x * p2.x - p2.y * p2.y + p1.y * p1.y) / 2;\n  const f = (p1.x * p1.x - p3.x * p3.x - p3.y * p3.y + p1.y * p1.y) / 2;\n  const denominator = b * c - a * d;\n  return {\n    x: -(d * e - b * f) / denominator,\n    y: -(a * f - c * e) / denominator,\n  };\n};\n\n/**\n * get distance by two points\n * @param p1 first point\n * @param p2 second point\n */\nexport const distance = (p1: Point, p2: Point): number => {\n  const vx = p1.x - p2.x;\n  const vy = p1.y - p2.y;\n  return Math.sqrt(vx * vx + vy * vy);\n};\n\n/**\n * scale matrix\n * @param matrix [ [], [], [] ]\n * @param ratio\n */\nexport const scaleMatrix = (matrix: Matrix[], ratio: number) => {\n  const result: Matrix[] = [];\n  matrix.forEach((row) => {\n    const newRow: number[] = [];\n    row.forEach((v) => {\n      newRow.push(v * ratio);\n    });\n    result.push(newRow);\n  });\n  return result;\n};\n\n/**\n * Floyd Warshall algorithm for shortest path distances matrix\n * @param  {array} adjMatrix   adjacency matrix\n * @return {array} distances   shortest path distances matrix\n */\nexport const floydWarshall = (adjMatrix: Matrix[]): Matrix[] => {\n  // initialize\n  const dist: Matrix[] = [];\n  const size = adjMatrix.length;\n  for (let i = 0; i < size; i += 1) {\n    dist[i] = [];\n    for (let j = 0; j < size; j += 1) {\n      if (i === j) {\n        dist[i][j] = 0;\n      } else if (adjMatrix[i][j] === 0 || !adjMatrix[i][j]) {\n        dist[i][j] = Infinity;\n      } else {\n        dist[i][j] = adjMatrix[i][j];\n      }\n    }\n  }\n  // floyd\n  for (let k = 0; k < size; k += 1) {\n    for (let i = 0; i < size; i += 1) {\n      for (let j = 0; j < size; j += 1) {\n        if (dist[i][j] > dist[i][k] + dist[k][j]) {\n          dist[i][j] = dist[i][k] + dist[k][j];\n        }\n      }\n    }\n  }\n  return dist;\n};\n\n/**\n * get adjacency matrix\n * @param data graph data\n * @param directed whether it's a directed graph\n */\nexport const getAdjMatrix = (data: GraphData, directed: boolean): Matrix[] => {\n  const { nodes, edges } = data;\n  const matrix: Matrix[] = [];\n  // map node with index in data.nodes\n  const nodeMap: {\n    [key: string]: number;\n  } = {};\n\n  if (!nodes) {\n    throw new Error(\"invalid nodes data!\");\n  }\n  if (nodes) {\n    nodes.forEach((node, i) => {\n      nodeMap[node.id] = i;\n      const row: number[] = [];\n      matrix.push(row);\n    });\n  }\n\n  if (edges) {\n    edges.forEach((e) => {\n      const { source, target } = e;\n      const sIndex = nodeMap[source as string];\n      const tIndex = nodeMap[target as string];\n      matrix[sIndex][tIndex] = 1;\n      if (!directed) {\n        matrix[tIndex][sIndex] = 1;\n      }\n    });\n  }\n\n  return matrix;\n};\n\n/**\n * 平移group\n * @param group Group 实例\n * @param vec 移动向量\n */\nexport const translate = (group: IGroup, vec: Point) => {\n  group.translate(vec.x, vec.y);\n};\n\n/**\n * 移动到指定坐标点\n * @param group Group 实例\n * @param point 移动到的坐标点\n */\nexport const move = (group: IGroup, point: Point) => {\n  let matrix: Matrix = group.getMatrix();\n  if (!matrix) {\n    matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n  }\n  const bbox = group.getCanvasBBox();\n  const vx = point.x - bbox.minX;\n  const vy = point.y - bbox.minY;\n\n  const movedMatrix = transform(matrix, [[\"t\", vx, vy]]);\n  group.setMatrix(movedMatrix);\n};\n\n/**\n * 缩放 group\n * @param group Group 实例\n * @param point 在x 和 y 方向上的缩放比例\n */\nexport const scale = (group: IGroup, ratio: number | number[]) => {\n  let matrix: Matrix = group.getMatrix();\n  if (!matrix) {\n    matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n  }\n\n  let scaleXY = ratio;\n  if (!isArray(ratio)) {\n    scaleXY = [ratio, ratio];\n  }\n\n  if (isArray(ratio) && ratio.length === 1) {\n    scaleXY = [ratio[0], ratio[0]];\n  }\n\n  matrix = transform(matrix, [\n    [\"s\", (scaleXY as number[])[0], (scaleXY as number[])[1]],\n  ]);\n\n  group.setMatrix(matrix);\n};\n\n/**\n *\n * @param group Group 实例\n * @param ratio 选择角度\n */\nexport const rotate = (group: IGroup, angle: number) => {\n  let matrix: Matrix = group.getMatrix();\n  if (!matrix) {\n    matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n  }\n  matrix = transform(matrix, [[\"r\", angle]]);\n\n  group.setMatrix(matrix);\n};\n\nexport const getDegree = (\n  n: number,\n  nodeIdxMap: NodeIdxMap,\n  edges: EdgeConfig[],\n): number[] => {\n  const degrees: number[] = [];\n  for (let i = 0; i < n; i++) {\n    degrees[i] = 0;\n  }\n  edges.forEach((e) => {\n    if (e.source) {\n      degrees[nodeIdxMap[e.source]] += 1;\n    }\n    if (e.target) {\n      degrees[nodeIdxMap[e.target]] += 1;\n    }\n  });\n  return degrees;\n};\n\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n  if (\n    (q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) &&\n    Math.min(p1[0], p2[0]) <= q[0] &&\n    q[0] <= Math.max(p1[0], p2[0]) &&\n    Math.min(p1[1], p2[1]) <= q[1] &&\n    q[1] <= Math.max(p1[1], p2[1])\n  ) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * 判断点P在多边形内-射线法. Borrow from https://github.com/antvis/util/blob/master/packages/path-util/src/point-in-polygon.ts\n * @param points\n * @param x\n * @param y\n */\nexport const isPointInPolygon = (points: number[][], x: number, y: number) => {\n  let isHit = false;\n  const n = points.length;\n  // 判断两个double在eps精度下的大小关系\n  const tolerance = 1e-6;\n  function dcmp(xValue) {\n    if (Math.abs(xValue) < tolerance) {\n      return 0;\n    }\n    return xValue < 0 ? -1 : 1;\n  }\n  if (n <= 2) {\n    // svg 中点小于 3 个时，不显示，也无法被拾取\n    return false;\n  }\n  for (let i = 0; i < n; i++) {\n    const p1 = points[i];\n    const p2 = points[(i + 1) % n];\n    if (onSegment(p1, p2, [x, y])) {\n      // 点在多边形一条边上\n      return true;\n    }\n    // 前一个判断min(p1[1],p2[1])<P.y<=max(p1[1],p2[1])\n    // 后一个判断被测点 在 射线与边交点 的左边\n    if (\n      dcmp(p1[1] - y) > 0 !== dcmp(p2[1] - y) > 0 &&\n      dcmp(x - ((y - p1[1]) * (p1[0] - p2[0])) / (p1[1] - p2[1]) - p1[0]) < 0\n    ) {\n      isHit = !isHit;\n    }\n  }\n  return isHit;\n};\n\n// 判断两个BBox是否相交\nexport const intersectBBox = (box1: Partial<IBBox>, box2: Partial<IBBox>) => {\n  return !(\n    box2.minX > box1.maxX ||\n    box2.maxX < box1.minX ||\n    box2.minY > box1.maxY ||\n    box2.maxY < box1.minY\n  );\n};\n\nconst lineIntersectPolygon = (lines, line) => {\n  let isIntersect = false;\n  each(lines, (l) => {\n    if (getLineIntersect(l.from, l.to, line.from, line.to)) {\n      isIntersect = true;\n      return false;\n    }\n  });\n  return isIntersect;\n};\n\n/**\n * 判断两个polygon是否相交。\n * borrow from @antv/path-util\n * @param points1 polygon1的顶点数组\n * @param points2 polygon2的顶点数组\n */\nexport const isPolygonsIntersect = (\n  points1: number[][],\n  points2: number[][],\n): boolean => {\n  type BBox = Partial<IBBox>;\n  const getBBox = (points): BBox => {\n    const xArr = points.map((p) => p[0]);\n    const yArr = points.map((p) => p[1]);\n    return {\n      minX: Math.min.apply(null, xArr),\n      maxX: Math.max.apply(null, xArr),\n      minY: Math.min.apply(null, yArr),\n      maxY: Math.max.apply(null, yArr),\n    };\n  };\n\n  const parseToLines = (points: number[][]) => {\n    const lines = [];\n    const count = points.length;\n    for (let i = 0; i < count - 1; i++) {\n      const point = points[i];\n      const next = points[i + 1];\n      lines.push({\n        from: {\n          x: point[0],\n          y: point[1],\n        },\n        to: {\n          x: next[0],\n          y: next[1],\n        },\n      });\n    }\n    if (lines.length > 1) {\n      const first = points[0];\n      const last = points[count - 1];\n      lines.push({\n        from: {\n          x: last[0],\n          y: last[1],\n        },\n        to: {\n          x: first[0],\n          y: first[1],\n        },\n      });\n    }\n    return lines;\n  };\n\n  // 空数组，或者一个点返回 false\n  if (points1.length < 2 || points2.length < 2) {\n    return false;\n  }\n\n  const bbox1 = getBBox(points1);\n  const bbox2 = getBBox(points2);\n  // 判定包围盒是否相交，比判定点是否在多边形内要快的多，可以筛选掉大多数情况\n  if (!intersectBBox(bbox1, bbox2)) {\n    return false;\n  }\n\n  let isIn = false;\n  // 判定点是否在多边形内部，一旦有一个点在另一个多边形内，则返回\n  each(points2, (point) => {\n    if (isPointInPolygon(points1, point[0], point[1])) {\n      isIn = true;\n      return false;\n    }\n  });\n  if (isIn) {\n    return true;\n  }\n  each(points1, (point) => {\n    if (isPointInPolygon(points2, point[0], point[1])) {\n      isIn = true;\n      return false;\n    }\n  });\n  if (isIn) {\n    return true;\n  }\n\n  const lines1 = parseToLines(points1);\n  const lines2 = parseToLines(points2);\n  let isIntersect = false;\n  each(lines2, (line) => {\n    if (lineIntersectPolygon(lines1, line)) {\n      isIntersect = true;\n      return false;\n    }\n  });\n  return isIntersect;\n};\n\nexport class Line {\n  public x1: number;\n\n  public y1: number;\n\n  public x2: number;\n\n  public y2: number;\n\n  constructor(x1: number, y1: number, x2: number, y2: number) {\n    this.x1 = x1;\n    this.y1 = y1;\n    this.x2 = x2;\n    this.y2 = y2;\n  }\n\n  public getBBox() {\n    const minX = Math.min(this.x1, this.x2);\n    const minY = Math.min(this.y1, this.y2);\n    const maxX = Math.max(this.x1, this.x2);\n    const maxY = Math.max(this.y1, this.y2);\n    const res = {\n      x: minX,\n      y: minY,\n      minX,\n      minY,\n      maxX,\n      maxY,\n      width: maxX - minX,\n      height: maxY - minY,\n    };\n    return res;\n  }\n}\n\nexport const getBBoxBoundLine = (bbox: IBBox, direction: string) => {\n  const bounds = {\n    top: [bbox.minX, bbox.minY, bbox.maxX, bbox.minY],\n    left: [bbox.minX, bbox.minY, bbox.minX, bbox.maxY],\n    bottom: [bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY],\n    right: [bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY],\n  };\n  return bounds[direction];\n};\n\n/**\n * 计算两条线段相交时，相交点对第一条线段上的分割比例\n */\nconst fractionAlongLineA = (la: Line, lb: Line) => {\n  const uaT =\n    (lb.x2 - lb.x1) * (la.y1 - lb.y1) - (lb.y2 - lb.y1) * (la.x1 - lb.x1);\n  const ubT =\n    (la.x2 - la.x1) * (la.y1 - lb.y1) - (la.y2 - la.y1) * (la.x1 - lb.x1);\n  const uB =\n    (lb.y2 - lb.y1) * (la.x2 - la.x1) - (lb.x2 - lb.x1) * (la.y2 - la.y1);\n  if (uB) {\n    const ua = uaT / uB;\n    const ub = ubT / uB;\n    if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n      return ua;\n    }\n  }\n  return Number.POSITIVE_INFINITY;\n};\n\nexport const itemIntersectByLine = (\n  item: Item,\n  line: Line,\n): [IPoint[], number] => {\n  const directions = [\"top\", \"left\", \"bottom\", \"right\"];\n  const bbox = item.getBBox();\n  let countIntersections = 0;\n  const intersections = [];\n\n  for (let i = 0; i < 4; i++) {\n    const [x1, y1, x2, y2] = getBBoxBoundLine(bbox, directions[i]);\n    intersections[i] = getLineIntersect(\n      { x: line.x1, y: line.y1 },\n      { x: line.x2, y: line.y2 },\n      { x: x1, y: y1 },\n      { x: x2, y: y2 },\n    );\n    if (intersections[i]) {\n      countIntersections += 1;\n    }\n  }\n  return [intersections, countIntersections];\n};\n\nexport const fractionToLine = (item: Item, line: Line) => {\n  const directions = [\"top\", \"left\", \"bottom\", \"right\"];\n  const bbox = item.getBBox();\n  let minDistance = Number.POSITIVE_INFINITY;\n  let countIntersections = 0;\n  for (let i = 0; i < 4; i++) {\n    const [x1, y1, x2, y2] = getBBoxBoundLine(bbox, directions[i]);\n    let testDistance = fractionAlongLineA(line, new Line(x1, y1, x2, y2));\n    testDistance = Math.abs(testDistance - 0.5);\n    if (testDistance >= 0 && testDistance <= 1) {\n      countIntersections += 1;\n      minDistance = testDistance < minDistance ? testDistance : minDistance;\n    }\n  }\n\n  if (countIntersections === 0) return -1;\n  return minDistance;\n};\n\nexport const getPointsCenter = (points: IPoint[]): IPoint => {\n  let centerX = 0;\n  let centerY = 0;\n  if (points.length > 0) {\n    for (const point of points) {\n      centerX += point.x;\n      centerY += point.y;\n    }\n    centerX /= points.length;\n    centerY /= points.length;\n  }\n  return { x: centerX, y: centerY };\n};\n\nexport const squareDist = (a: IPoint, b: IPoint): number => {\n  return (a.x - b.x) ** 2 + (a.y - b.y) ** 2;\n};\n\nexport const pointLineSquareDist = (point: IPoint, line: Line) => {\n  const x1 = line.x1;\n  const y1 = line.y1;\n  const x2 = line.x2 - x1;\n  const y2 = line.y2 - y1;\n  let px = point.x - x1;\n  let py = point.y - y1;\n  let dotprod = px * x2 + py * y2;\n  let projlenSq;\n  if (dotprod <= 0) {\n    projlenSq = 0;\n  } else {\n    px = x2 - px;\n    py = y2 - py;\n    dotprod = px * x2 + py * y2;\n    if (dotprod <= 0) {\n      projlenSq = 0;\n    } else {\n      projlenSq = (dotprod * dotprod) / (x2 * x2 + y2 * y2);\n    }\n  }\n  let lenSq = px * px + py * py - projlenSq;\n  if (lenSq < 0) {\n    lenSq = 0;\n  }\n  return lenSq;\n};\n\nexport const isPointsOverlap = (p1, p2, e = 1e-3) => {\n  return (p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2 < e ** 2;\n};\n\n/**\n * 点到矩形的距离的平方：矩形内部点视作距离为0，外部的点若投影落在矩形边上则为点到矩形边的最近的垂直距离，否则为点到矩形顶点的距离，\n * @param point IPoint\n * @param rect IRect\n */\nexport const pointRectSquareDist = (point: Point, rect: IRect) => {\n  const isLeft = point.x < rect.x;\n  const isRight = point.x > rect.x + rect.width;\n  const isTop = point.y > rect.y + rect.height;\n  const isBottom = point.y < rect.y;\n\n  const isPointOutside = isLeft || isRight || isTop || isBottom;\n  if (!isPointOutside) {\n    return 0;\n  }\n  if (isTop && !isLeft && !isRight) {\n    return (rect.y + rect.height - point.y) ** 2;\n  }\n  if (isBottom && !isLeft && !isRight) {\n    return (point.y - rect.y) ** 2;\n  }\n  if (isLeft && !isTop && !isBottom) {\n    return (rect.x - point.x) ** 2;\n  }\n  if (isRight && !isTop && !isBottom) {\n    return (rect.x + rect.width - point.x) ** 2;\n  }\n  const dx = Math.min(\n    Math.abs(rect.x - point.x),\n    Math.abs(rect.x + rect.width - point.x),\n  );\n  const dy = Math.min(\n    Math.abs(rect.y - point.y),\n    Math.abs(rect.y + rect.height - point.y),\n  );\n  return dx * dx + dy * dy;\n};\n\n/**\n * point to line distance\n * @param  {array} line 线的四个顶点 [x1, y1, x2, y2]\n * @param  {object} point 坐标点 {x, y}\n * @return {Number|NaN} distance\n */\nexport const pointLineDistance = (line, point) => {\n  const [x1, y1, x2, y2] = line;\n  const { x, y } = point;\n  const d = [x2 - x1, y2 - y1];\n  if (vec2.exactEquals(d as any, [0, 0])) {\n    return NaN;\n  }\n\n  const u = [-d[1], d[0]];\n  // @ts-ignore\n  vec2.normalize(u, u);\n  const a = [x - x1, y - y1];\n  // @ts-ignore\n  return Math.abs(vec2.dot(a, u));\n};\n"
  },
  {
    "path": "packages/core/src/util/path.ts",
    "content": "import { vec2 } from \"@antv/matrix-util\";\nimport { catmullRom2Bezier } from \"@antv/path-util\";\nimport { IPoint } from \"../types\";\n\n/**\n * 替换字符串中的字段\n * @param {String} str 模版字符串\n * @param {Object} o json data\n */\nconst substitute = (str: string, o: any): string => {\n  if (!str || !o) {\n    return str;\n  }\n\n  return str.replace(/\\\\?\\{([^{}]+)\\}/g, (match: string, name: string) => {\n    if (match.charAt(0) === \"\\\\\") {\n      return match.slice(1);\n    }\n    let res = o[name];\n    if (res === 0) res = \"0\";\n    return res || \"\";\n  });\n};\n\n/**\n * 给定坐标获取三次贝塞尔曲线的 M 及 C 值\n * @param points coordinate set\n */\nexport const getSpline = (points: IPoint[]) => {\n  const data: number[] = [];\n\n  if (points.length < 2) {\n    throw new Error(\n      `point length must largn than 2, now it's ${points.length}`,\n    );\n  }\n  for (const point of points) {\n    const { x, y } = point;\n    data.push(x);\n    data.push(y);\n  }\n\n  const spliePath = catmullRom2Bezier(data);\n  spliePath.unshift([\"M\", points[0].x, points[0].y]);\n  return spliePath;\n};\n\n/**\n * 根据起始点、相对位置、偏移量计算控制点\n * @param  {IPoint} startPoint 起始点，包含 x,y\n * @param  {IPoint} endPoint  结束点, 包含 x,y\n * @param  {Number} percent   相对位置,范围 0-1\n * @param  {Number} offset    偏移量\n * @return {IPoint} 控制点，包含 x,y\n */\nexport const getControlPoint = (\n  startPoint: IPoint,\n  endPoint: IPoint,\n  percent: number = 0,\n  offset: number = 0,\n): IPoint => {\n  const point: IPoint = {\n    x: (1 - percent) * startPoint.x + percent * endPoint.x,\n    y: (1 - percent) * startPoint.y + percent * endPoint.y,\n  };\n\n  let tangent: vec2 = [0, 0];\n  vec2.normalize(tangent, [\n    endPoint.x - startPoint.x,\n    endPoint.y - startPoint.y,\n  ]);\n\n  if (!tangent || (!tangent[0] && !tangent[1])) {\n    tangent = [0, 0];\n  }\n  const perpendicular = [-tangent[1] * offset, tangent[0] * offset]; // 垂直向量\n  point.x += perpendicular[0];\n  point.y += perpendicular[1];\n  return point;\n};\n\n/**\n * 点集转化为Path多边形\n * @param {Array} points 点集\n * @param {Boolen} z 是否封闭\n * @return {Array} Path\n */\nexport const pointsToPolygon = (\n  points: IPoint[] | ({ x: number; y: number } | string)[],\n  z?: boolean,\n): string => {\n  const { length } = points;\n  if (!length) {\n    return \"\";\n  }\n\n  let path = \"\";\n  let str = \"\";\n\n  for (let i = 0; i < length; i++) {\n    const item = points[i];\n    if (i === 0) {\n      str = \"M{x} {y}\";\n    } else {\n      str = \"L{x} {y}\";\n    }\n    path += substitute(str, item);\n  }\n\n  if (z) {\n    path += \"Z\";\n  }\n  return path;\n};\n\nexport const pathToPoints = (path: any[]) => {\n  const points = [];\n  path.forEach((seg) => {\n    const command = seg[0];\n    if (command !== \"A\") {\n      for (let i = 1; i < seg.length; i = i + 2) {\n        points.push([seg[i], seg[i + 1]]);\n      }\n    } else {\n      const length = seg.length;\n      points.push([seg[length - 2], seg[length - 1]]);\n    }\n  });\n  return points;\n};\n\n/**\n * 生成平滑的闭合曲线\n * @param points\n */\nexport const getClosedSpline = (points: IPoint[]) => {\n  if (points.length < 2) {\n    throw new Error(\n      `point length must largn than 2, now it's ${points.length}`,\n    );\n  }\n  const first = points[0];\n  const second = points[1];\n  const last = points[points.length - 1];\n  const lastSecond = points[points.length - 2];\n\n  points.unshift(last);\n  points.unshift(lastSecond);\n  points.push(first);\n  points.push(second);\n\n  const closedPath = [];\n  for (let i = 1; i < points.length - 2; i += 1) {\n    const x0 = points[i - 1].x;\n    const y0 = points[i - 1].y;\n    const x1 = points[i].x;\n    const y1 = points[i].y;\n    const x2 = points[i + 1].x;\n    const y2 = points[i + 1].y;\n    const x3 = i !== points.length - 2 ? points[i + 2].x : x2;\n    const y3 = i !== points.length - 2 ? points[i + 2].y : y2;\n\n    const cp1x = x1 + (x2 - x0) / 6;\n    const cp1y = y1 + (y2 - y0) / 6;\n    const cp2x = x2 - (x3 - x1) / 6;\n    const cp2y = y2 - (y3 - y1) / 6;\n    closedPath.push([\"C\", cp1x, cp1y, cp2x, cp2y, x2, y2]);\n  }\n  closedPath.unshift([\"M\", last.x, last.y]);\n  return closedPath;\n};\n\nconst vecScaleTo = (v: vec2, length: number) => {\n  // Vector with direction of v with specified length\n  return vec2.scale([0, 0], vec2.normalize([0, 0], v), length);\n};\n\nconst unitNormal = (p0: vec2, p1: vec2): vec2 => {\n  // Returns the unit normal to the line segment from p0 to p1.\n  const n = [p0[1] - p1[1], p1[0] - p0[0]];\n  const nLength = Math.sqrt(n[0] * n[0] + n[1] * n[1]);\n  if (nLength === 0) {\n    throw new Error(\"p0 should not be equal to p1\");\n  }\n  return [n[0] / nLength, n[1] / nLength];\n};\n\nconst vecFrom = (p0: vec2, p1: vec2): vec2 => {\n  // Vector from p0 to p1\n  return [p1[0] - p0[0], p1[1] - p0[1]] as vec2;\n};\n\n/**\n * 传入的节点作为多边形顶点，生成有圆角的多边形\n * @param polyPoints 多边形顶点\n * @param padding 在原多边形基础上增加最终轮廓和原多边形的空白间隔\n */\nexport function roundedHull(polyPoints: vec2[], padding: number) {\n  // The rounded hull path around a single point\n  const roundedHull1 = (points: vec2[]) => {\n    const p1 = [points[0][0], points[0][1] - padding];\n    const p2 = [points[0][0], points[0][1] + padding];\n\n    return `M ${p1} A ${padding},${padding},0,0,0,${p2} A ${padding},${padding},0,0,0,${p1}`;\n  };\n\n  // The rounded hull path around two points\n  const roundedHull2 = (points: vec2[]) => {\n    const offsetVector = vec2.scale(\n      [0, 0],\n      unitNormal(points[0], points[1]),\n      padding,\n    );\n    const invOffsetVector = vec2.scale([0, 0], offsetVector, -1);\n\n    const p0 = vec2.add([0, 0], points[0], offsetVector);\n    const p1 = vec2.add([0, 0], points[1], offsetVector);\n    const p2 = vec2.add([0, 0], points[1], invOffsetVector);\n    const p3 = vec2.add([0, 0], points[0], invOffsetVector);\n\n    return `M ${p0} L ${p1} A ${[padding, padding, \"0,0,0\", p2].join(\n      \",\",\n    )} L ${p3} A ${[padding, padding, \"0,0,0\", p0].join(\",\")}`;\n  };\n\n  // 特殊情况处理：节点数小于等于2\n  if (!polyPoints || polyPoints.length < 1) return \"\";\n  if (polyPoints.length === 1) return roundedHull1(polyPoints);\n  if (polyPoints.length === 2) return roundedHull2(polyPoints);\n\n  let segments = new Array(polyPoints.length);\n\n  // Calculate each offset (outwards) segment of the convex hull.\n  for (let segmentIndex = 0; segmentIndex < segments.length; ++segmentIndex) {\n    const p0 =\n      segmentIndex === 0\n        ? polyPoints[polyPoints.length - 1]\n        : polyPoints[segmentIndex - 1];\n    const p1 = polyPoints[segmentIndex];\n\n    // Compute the offset vector for the line segment, with length = padding.\n    const offset = vec2.scale([0, 0], unitNormal(p0, p1), padding);\n\n    segments[segmentIndex] = [\n      vec2.add([0, 0], p0, offset),\n      vec2.add([0, 0], p1, offset),\n    ];\n  }\n\n  const arcData = `A ${[padding, padding, \"0,0,0,\"].join(\",\")}`;\n\n  segments = segments.map((segment, index) => {\n    let pathFragment = \"\";\n    if (index === 0) {\n      pathFragment = `M ${segments[segments.length - 1][1]} `;\n    }\n    pathFragment += `${arcData + segment[0]} L ${segment[1]}`;\n    return pathFragment;\n  });\n\n  return segments.join(\" \");\n}\n\n/**\n * 传入的节点作为多边形顶点，生成平滑的闭合多边形\n * @param polyPoints\n * @param padding\n */\nexport function paddedHull(polyPoints: vec2[], padding: number) {\n  const pointCount = polyPoints.length;\n\n  const smoothHull1 = (points) => {\n    // Returns the path for a circular hull around a single point.\n\n    const p1 = [points[0][0], points[0][1] - padding];\n    const p2 = [points[0][0], points[0][1] + padding];\n\n    return `M ${p1} A ${[padding, padding, \"0,0,0\", p2].join(\",\")} A ${[\n      padding,\n      padding,\n      \"0,0,0\",\n      p1,\n    ].join(\",\")}`;\n  };\n\n  // Returns the path for a rounded hull around two points.\n  const smoothHull2 = (points) => {\n    const v = vecFrom(points[0], points[1]);\n    const extensionVec = vecScaleTo(v, padding);\n\n    const extension0 = vec2.add(\n      [0, 0],\n      points[0],\n      vec2.scale([0, 0], extensionVec, -1),\n    );\n    const extension1 = vec2.add([0, 0], points[1], extensionVec);\n\n    const tangentHalfLength = 1.2 * padding;\n    const controlDelta = vecScaleTo(\n      vec2.normalize([0, 0], v),\n      tangentHalfLength,\n    );\n    const invControlDelta = vec2.scale([0, 0], controlDelta, -1);\n\n    const control0 = vec2.add([0, 0], extension0, invControlDelta);\n    const control1 = vec2.add([0, 0], extension1, invControlDelta);\n    const control3 = vec2.add([0, 0], extension0, controlDelta);\n\n    // return [\n    //   ['M', extension0[0], extension0[1]],\n    //   ['C', control0, control1, extension1],\n    //   ['S', control3, extension0],\n    //   'Z',\n    // ];\n    return `M ${extension0} C ${[control0, control1, extension1].join(\n      \",\",\n    )} S ${[control3, extension0].join(\",\")} Z`;\n  };\n\n  // Handle special cases\n  if (!polyPoints || pointCount < 1) return \"\";\n  if (pointCount === 1) return smoothHull1(polyPoints);\n  if (pointCount === 2) return smoothHull2(polyPoints);\n\n  const hullPoints = polyPoints.map((point, index) => {\n    const pNext = polyPoints[(index + 1) % pointCount];\n    return {\n      p: point,\n      v: vec2.normalize([0, 0], vecFrom(point, pNext)),\n    };\n  });\n\n  // Compute the expanded hull points, and the nearest prior control point for each.\n  for (let i = 0; i < hullPoints.length; ++i) {\n    const priorIndex = i > 0 ? i - 1 : pointCount - 1;\n    const extensionVec = vec2.normalize(\n      [0, 0],\n      vec2.add(\n        [0, 0],\n        hullPoints[priorIndex].v,\n        vec2.scale([0, 0], hullPoints[i].v, -1),\n      ),\n    );\n    hullPoints[i].p = vec2.add(\n      [0, 0],\n      hullPoints[i].p as vec2,\n      vec2.scale([0, 0], extensionVec, padding),\n    );\n  }\n\n  return hullPoints.map((obj) => {\n    const point = obj.p;\n    return { x: point[0], y: point[1] };\n  });\n}\n"
  },
  {
    "path": "packages/core/src/util/validation.ts",
    "content": "import { isString, isPlainObject } from \"@antv/util\";\nimport {\n  GraphData,\n  TreeGraphData,\n  NodeConfig,\n  EdgeConfig,\n  ComboConfig,\n  ITEM_TYPE,\n} from \"../types\";\nimport { traverseTree } from \"./graphic\";\n\n/**\n * 验证关系图或树图数据的合法性，必须符合以下规则才会渲染图：\n * 1. 必须传入数据\n * 2. 节点的 ID 必须为字符串，暂不支持数字类型，如果支持数字类型，会出现类似 123 与 '123' 是否相等的问题\n * 3. 边的 source 和 target 值必须在节点 ID 中存在\n * @param data 关系图或树图数据\n * @return boolean 全部验证通过返回 true，否则返回 false\n */\nexport const dataValidation = (data?: GraphData | TreeGraphData): boolean => {\n  // 1. 必须传入数据\n  if (!data) {\n    console.error(\"G6 Error Tips: the data must be defined\");\n    return false;\n  }\n\n  // 2. 节点的 ID 必须为字符串或数字类型\n  const { nodes, edges, combos = [] } = data;\n  if (!nodes && !edges) {\n    let validated = true;\n    // 不存在 nodes 和 edges，则说明是 TreeGraphData，按 TreeGraphData 规则验证\n    traverseTree(data as TreeGraphData, (param) => {\n      if (!isString(param.id)) {\n        validated = false;\n        return false;\n      }\n      return true;\n    });\n    return validated;\n  }\n\n  const nonNode = ((nodes as NodeConfig[]) || []).find(\n    (node) => !isString(node.id),\n  );\n  if (nonNode) {\n    console.warn(\n      `G6 Warning Tips: missing 'id' property, or %c${nonNode.id}%c is not a string.`,\n      \"font-size: 20px; color: red;\",\n      \"\",\n    );\n    return false;\n  }\n\n  // 3. 边的 source 和 target 必须存在于节点 或 Combo中\n  const nodeIds = ((nodes as NodeConfig[]) || []).map((node) => node.id);\n  const comboIds = (combos as ComboConfig[]).map((combo) => combo.id);\n  const ids = [...nodeIds, ...comboIds];\n  const nonEdges = ((edges as EdgeConfig[]) || []).find(\n    (edge) => !ids.includes(edge.source) || !ids.includes(edge.target),\n  );\n  if (nonEdges) {\n    console.warn(\n      `G6 Warning Tips: The source %c${nonEdges.source}%c or the target %c${nonEdges.target}%c of the edge do not exist in the nodes or combos.`,\n      \"font-size: 20px; color: red;\",\n      \"\",\n      \"font-size: 20px; color: red;\",\n      \"\",\n    );\n    return false;\n  }\n  return true;\n};\n\n/**\n * 验证添加节点、边或从combo时的数据\n * @param type 节点、边或从combo\n * @param data 添加的单条数据\n * @return boolean 全部验证通过返回 true，否则返回 false\n */\nexport const singleDataValidation = (\n  type: ITEM_TYPE,\n  data: NodeConfig | EdgeConfig | ComboConfig,\n): boolean => {\n  if (type === \"node\" || type === \"combo\") {\n    // 必须有 id 字段，且id必须为字符串类型\n    if (data.id && !isString(data.id)) {\n      console.warn(\n        `G6 Warning Tips: missing 'id' property, or the 'id' %c${data.id}%c is not a string.`,\n        \"font-size: 20px; color: red;\",\n        \"\",\n      );\n      return false;\n    }\n  } else if (type === \"edge\") {\n    // 必须有 source 和 target 字段\n    if (!(data as EdgeConfig).source || !(data as EdgeConfig).target) {\n      console.warn(\n        `G6 Warning Tips: missing 'source' or 'target' for the edge.`,\n      );\n      return false;\n    }\n  }\n  return true;\n};\n"
  },
  {
    "path": "packages/core/tests/unit/index-spec.ts",
    "content": "import { version } from \"../../package.json\";\nimport Global from \"../../src/global\";\n\ndescribe(\"G6 version\", () => {\n  it(\"export\", () => {\n    expect(Global.version).toBe(version);\n  });\n});\n"
  },
  {
    "path": "packages/core/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es5\",\n    \"lib\": [\"es5\", \"es6\", \"dom\", \"es2016\"],\n    \"esModuleInterop\": true,\n    \"allowJs\": true,\n    \"resolveJsonModule\": true, // Enable this to import JSON modules\n    \"moduleResolution\": \"node\" // This often needs to be set as well\n  },\n  \"include\": [\"src/**/*.ts\", \"tests/**/*.ts\"]\n}\n"
  },
  {
    "path": "packages/core/vite.config.ts",
    "content": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport path from \"path\";\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: {\n      \"@\": path.resolve(__dirname, \"src\"),\n    },\n  },\n  build: {\n    lib: {\n      entry: path.resolve(__dirname, \"src/index.ts\"), // 入口文件\n      name: \"f6-core\", // UMD 构建时的全局变量名\n      fileName: (format) => `index.${format}.js`, // 输出文件名\n    },\n    rollupOptions: {\n      // 确保 external 包不会被打包到库中\n      external: [\"react\", \"react-dom\"],\n      output: [\n        {\n          // CommonJS\n          format: \"cjs\",\n          dir: \"dist/cjs\",\n        },\n        {\n          // ESM\n          format: \"es\",\n          dir: \"dist/esm\",\n        },\n        {\n          // UMD\n          format: \"umd\",\n          dir: \"dist/umd\",\n          name: \"f6-core\",\n          globals: {\n            react: \"React\",\n            \"react-dom\": \"ReactDOM\",\n          },\n        },\n      ],\n    },\n  },\n});\n"
  },
  {
    "path": "packages/element/package.json",
    "content": "{\n  \"name\": \"@antv/f6-element\",\n  \"version\": \"0.0.1\",\n  \"description\": \"A Graph Visualization Framework in JavaScript\",\n  \"keywords\": [\n    \"antv\",\n    \"g6\",\n    \"graph\",\n    \"graph analysis\",\n    \"graph editor\",\n    \"graph visualization\",\n    \"relational data\"\n  ],\n  \"homepage\": \"https://g6.antv.vision\",\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/g6/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/antvis/g6\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"https://github.com/orgs/antvis/people\",\n  \"files\": [\n    \"package.json\",\n    \"es\",\n    \"lib\",\n    \"dist\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"main\": \"dist/cjs/index.cjs.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"unpkg\": \"dist/umd/index.umd.js\",\n  \"types\": \"lib/index.d.ts\",\n  \"scripts\": {\n    \"clean\": \"rimraf dist\",\n    \"build\": \"vite build\"\n  },\n  \"dependencies\": {\n    \"@antv/g-base\": \"^0.5.9\",\n    \"@antv/f6-core\": \"workspace:*\",\n    \"@antv/util\": \"~2.0.5\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"~5.3.1\",\n    \"@vitejs/plugin-react\": \"~4.3.1\"\n  }\n}\n"
  },
  {
    "path": "packages/element/src/edges/index.ts",
    "content": "import \"./polyline\";\n"
  },
  {
    "path": "packages/element/src/edges/polyline-util.ts",
    "content": "import { each } from \"@antv/util\";\nimport { INode, ICombo } from \"@antv/f6-core\";\nimport { Point } from \"@antv/g-base\";\n\nexport interface PolyPoint {\n  x: number;\n  y: number;\n  id?: string;\n}\n\nexport type PBBox = Partial<{\n  x: number;\n  y: number;\n  minX: number;\n  minY: number;\n  maxX: number;\n  maxY: number;\n  height: number;\n  width: number;\n  centerX: number;\n  centerY: number;\n}>;\n\nexport const getBBoxFromPoint = (point: PolyPoint): PBBox => {\n  const { x, y } = point;\n  return {\n    x,\n    y,\n    centerX: x,\n    centerY: y,\n    minX: x,\n    minY: y,\n    maxX: x,\n    maxY: y,\n    height: 0,\n    width: 0,\n  };\n};\nexport const getBBoxFromPoints = (points: PolyPoint[] = []): PBBox => {\n  const xs: number[] = [];\n  const ys: number[] = [];\n  points.forEach((p) => {\n    xs.push(p.x);\n    ys.push(p.y);\n  });\n  const minX = Math.min.apply(Math, xs);\n  const maxX = Math.max.apply(Math, xs);\n  const minY = Math.min.apply(Math, ys);\n  const maxY = Math.max.apply(Math, ys);\n  return {\n    centerX: (minX + maxX) / 2,\n    centerY: (minY + maxY) / 2,\n    maxX,\n    maxY,\n    minX,\n    minY,\n    height: maxY - minY,\n    width: maxX - minX,\n  };\n};\nexport const isBBoxesOverlapping = (b1: PBBox, b2: PBBox) =>\n  Math.abs(b1.centerX - b2.centerX) * 2 < b1.width + b2.width &&\n  Math.abs(b1.centerY - b2.centerY) * 2 < b1.height + b2.height;\n\nexport const filterConnectPoints = (points: PolyPoint[]): PolyPoint[] => {\n  // pre-process: remove duplicated points\n  const result: any[] = [];\n  const pointsMap: any = {};\n  const pointsLength = points.length;\n  for (let i = pointsLength - 1; i >= 0; i--) {\n    const p = points[i];\n    p.id = `${p.x}|||${p.y}`;\n    pointsMap[p.id] = p;\n    result.push(p);\n  }\n  return result;\n};\nexport const simplifyPolyline = (points: PolyPoint[]): PolyPoint[] => {\n  return filterConnectPoints(points);\n};\nexport const getSimplePolyline = (\n  sPoint: PolyPoint,\n  tPoint: PolyPoint,\n): PolyPoint[] => [sPoint, { x: sPoint.x, y: tPoint.y }, tPoint];\n\nexport const getExpandedBBox = (bbox: any, offset: number): PBBox => {\n  if (bbox.width || bbox.height) {\n    return {\n      centerX: bbox.centerX,\n      centerY: bbox.centerY,\n      minX: bbox.minX - offset,\n      minY: bbox.minY - offset,\n      maxX: bbox.maxX + offset,\n      maxY: bbox.maxY + offset,\n      height: bbox.height + 2 * offset,\n      width: bbox.width + 2 * offset,\n    };\n  }\n  // when it is a point\n  return bbox;\n};\nexport const isHorizontalPort = (\n  port: PolyPoint,\n  bbox: PBBox,\n): boolean | number => {\n  const dx = Math.abs(port.x - bbox.centerX);\n  const dy = Math.abs(port.y - bbox.centerY);\n  if (dx === 0 && dy === 0) return 0;\n  return dx / bbox.width > dy / bbox.height;\n};\nexport const getExpandedBBoxPoint = (\n  bbox: any, // 将原来节点 bbox 扩展了 offset 后的 bbox，且被 gridSize 格式化\n  point: PolyPoint, // 被 gridSize 格式化后的位置（anchorPoint）\n  anotherPoint: PolyPoint, // 另一端被 gridSize 格式化后的位置\n): PolyPoint => {\n  const isHorizontal = isHorizontalPort(point, bbox);\n  if (isHorizontal === 0) {\n    // 说明锚点是节点中心，linkCenter: true。需要根据两个节点的相对关系决定方向\n    let x = bbox.centerX;\n    let y = bbox.centerY;\n    if (anotherPoint.y < point.y) {\n      // 另一端在左上/右上方时，总是从上方走\n      y = bbox.minY;\n    } else if (anotherPoint.x > point.x) {\n      // 另一端在右下方，往右边走\n      x = bbox.maxX;\n    } else if (anotherPoint.x < point.x) {\n      // 另一端在左下方，往左边走\n      x = bbox.minX;\n    } else if (anotherPoint.x === point.x) {\n      // 另一段在正下方，往下走\n      y = bbox.maxY;\n    }\n    return { x, y };\n  }\n  if (isHorizontal) {\n    return {\n      x: point.x > bbox.centerX ? bbox.maxX : bbox.minX,\n      y: point.y,\n    };\n  }\n  return {\n    x: point.x,\n    y: point.y > bbox.centerY ? bbox.maxY : bbox.minY,\n  };\n};\n/**\n *\n * @param b1\n * @param b2\n */\nexport const mergeBBox = (b1: PBBox, b2: PBBox): PBBox => {\n  const minX = Math.min(b1.minX, b2.minX);\n  const minY = Math.min(b1.minY, b2.minY);\n  const maxX = Math.max(b1.maxX, b2.maxX);\n  const maxY = Math.max(b1.maxY, b2.maxY);\n  return {\n    centerX: (minX + maxX) / 2,\n    centerY: (minY + maxY) / 2,\n    minX,\n    minY,\n    maxX,\n    maxY,\n    height: maxY - minY,\n    width: maxX - minX,\n  };\n};\nexport const getPointsFromBBox = (bbox: PBBox): PolyPoint[] => {\n  // anticlockwise\n  // const { minX, minY, maxX, maxY } = bbox;\n  return [\n    {\n      x: bbox.minX,\n      y: bbox.minY,\n    },\n    {\n      x: bbox.maxX,\n      y: bbox.minY,\n    },\n    {\n      x: bbox.maxX,\n      y: bbox.maxY,\n    },\n    {\n      x: bbox.minX,\n      y: bbox.maxY,\n    },\n  ];\n};\nexport const isPointOutsideBBox = (point: PolyPoint, bbox: PBBox): boolean => {\n  const { x, y } = point;\n  return x < bbox.minX || x > bbox.maxX || y < bbox.minY || y > bbox.maxY;\n};\nexport const getBBoxXCrossPoints = (bbox: PBBox, x: number): PolyPoint[] => {\n  if (x < bbox.minX || x > bbox.maxX) {\n    return [];\n  }\n  return [\n    {\n      x,\n      y: bbox.minY,\n    },\n    {\n      x,\n      y: bbox.maxY,\n    },\n  ];\n};\nexport const getBBoxYCrossPoints = (bbox: PBBox, y: number): PolyPoint[] => {\n  if (y < bbox.minY || y > bbox.maxY) {\n    return [];\n  }\n  return [\n    {\n      x: bbox.minX,\n      y,\n    },\n    {\n      x: bbox.maxX,\n      y,\n    },\n  ];\n};\nexport const getBBoxCrossPointsByPoint = (\n  bbox: PBBox,\n  point: PolyPoint,\n): PolyPoint[] =>\n  getBBoxXCrossPoints(bbox, point.x).concat(getBBoxYCrossPoints(bbox, point.y));\n\n/**\n * 曼哈顿距离\n */\nexport const distance = (p1: PolyPoint, p2: PolyPoint): number =>\n  Math.abs(p1.x - p2.x) + Math.abs(p1.y - p2.y);\n\n/**\n * 如果 points 中的一个节点 x 与 p 相等，则消耗 -2。y 同\n * 即优先选择和 points 在同一水平线 / 垂直线上的点\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const _costByPoints = (p: PolyPoint, points: PolyPoint[]): number => {\n  const offset = -2;\n  let result = 0;\n  points.forEach((point) => {\n    if (point) {\n      if (p.x === point.x) {\n        result += offset;\n      }\n      if (p.y === point.y) {\n        result += offset;\n      }\n    }\n  });\n  return result;\n};\n\n/**\n * ps 经过 p 到 pt 的距离，减去其他路过节点造成的消耗\n */\nexport const heuristicCostEstimate = (\n  p: PolyPoint,\n  ps: PolyPoint,\n  pt: PolyPoint,\n  source?: PolyPoint,\n  target?: PolyPoint,\n): number =>\n  distance(p, ps) +\n  distance(p, pt) +\n  _costByPoints(p, [ps, pt, source!, target!]);\n\nexport const reconstructPath = (\n  pathPoints: PolyPoint[],\n  pointById: any,\n  cameFrom: any,\n  currentId: string,\n  iterator: number = 0,\n) => {\n  pathPoints.unshift(pointById[currentId]);\n  if (\n    cameFrom[currentId] &&\n    cameFrom[currentId] !== currentId &&\n    iterator <= 100\n  ) {\n    reconstructPath(\n      pathPoints,\n      pointById,\n      cameFrom,\n      cameFrom[currentId],\n      iterator + 1,\n    );\n  }\n};\n\n/**\n * 从 arr 中删去 item\n */\nexport const removeFrom = (arr: PolyPoint[], item: PolyPoint) => {\n  const index = arr.indexOf(item);\n  if (index > -1) {\n    arr.splice(index, 1);\n  }\n};\nexport const isSegmentsIntersected = (\n  p0: PolyPoint,\n  p1: PolyPoint,\n  p2: PolyPoint,\n  p3: PolyPoint,\n): boolean => {\n  const v1x = p2.x - p0.x;\n  const v1y = p2.y - p0.y;\n  const v2x = p3.x - p0.x;\n  const v2y = p3.y - p0.y;\n  const v3x = p2.x - p1.x;\n  const v3y = p2.y - p1.y;\n  const v4x = p3.x - p1.x;\n  const v4y = p3.y - p1.y;\n\n  const pd1 = v1x * v2y - v1y * v2x;\n  const pd2 = v3x * v4y - v3y * v4x;\n  const pd3 = v1x * v3y - v1y * v3x;\n  const pd4 = v2x * v4y - v2y * v4x;\n\n  return pd1 * pd2 <= 0 && pd3 * pd4 <= 0;\n};\nexport const isSegmentCrossingBBox = (\n  p1: PolyPoint,\n  p2: PolyPoint,\n  bbox: PBBox,\n): boolean => {\n  if (bbox.width || bbox.height) {\n    const [pa, pb, pc, pd] = getPointsFromBBox(bbox);\n    return (\n      isSegmentsIntersected(p1, p2, pa, pb) ||\n      isSegmentsIntersected(p1, p2, pa, pd) ||\n      isSegmentsIntersected(p1, p2, pb, pc) ||\n      isSegmentsIntersected(p1, p2, pc, pd)\n    );\n  }\n  return false;\n};\n/**\n * 在 points 中找到满足 x 或 y 和 point 的 x 或 y 相等，且与 point 连线不经过 bbox1 与 bbox2 的点\n */\nexport const getNeighborPoints = (\n  points: PolyPoint[],\n  point: PolyPoint,\n  bbox1: PBBox,\n  bbox2: PBBox,\n): PolyPoint[] => {\n  const neighbors: Point[] = [];\n  points.forEach((p) => {\n    if (p === point) return;\n    if (p.x === point.x || p.y === point.y) {\n      if (\n        isSegmentCrossingBBox(p, point, bbox1) ||\n        isSegmentCrossingBBox(p, point, bbox2)\n      )\n        return;\n      neighbors.push(p);\n    }\n  });\n  return filterConnectPoints(neighbors);\n};\nexport const pathFinder = (\n  points: PolyPoint[],\n  start: PolyPoint,\n  goal: any,\n  sBBox: PBBox,\n  tBBox: PBBox,\n  os: any,\n  ot: any,\n): PolyPoint[] => {\n  // A-Star Algorithm\n  const closedSet: any = [];\n  const openSet = [start];\n  const cameFrom: {\n    [key: string]: any;\n  } = {};\n\n  const gScore: {\n    [key: string]: number;\n  } = {}; // all default values are Infinity\n\n  const fScore: {\n    [key: string]: number;\n  } = {}; // all default values are Infinity\n\n  gScore[start.id] = 0;\n  fScore[start.id] = heuristicCostEstimate(start, goal, start);\n\n  const pointById: {\n    [key: string]: PolyPoint;\n  } = {};\n\n  points.forEach((p) => {\n    pointById[p.id] = p;\n  });\n\n  let current, lowestFScore;\n  while (openSet.length) {\n    current = undefined;\n    lowestFScore = Infinity;\n    // 找到 openSet 中 fScore 最小的点\n    openSet.forEach((p: any) => {\n      if (fScore[p.id] <= lowestFScore) {\n        lowestFScore = fScore[p.id];\n        current = p;\n      }\n    });\n\n    // 若 openSet 中 fScore 最小的点就是终点\n    if (current === goal) {\n      // ending condition\n      const pathPoints: any = [];\n      reconstructPath(pathPoints, pointById, cameFrom, goal.id);\n      return pathPoints;\n    }\n\n    removeFrom(openSet, current);\n    closedSet.push(current);\n\n    getNeighborPoints(points, current, sBBox, tBBox).forEach((neighbor) => {\n      if (closedSet.indexOf(neighbor) !== -1) {\n        return;\n      }\n\n      if (openSet.indexOf(neighbor) === -1) {\n        openSet.push(neighbor);\n      }\n\n      const tentativeGScore = fScore[current.id] + distance(current, neighbor); // + distance(neighbor, goal);\n      if (gScore[neighbor.id] && tentativeGScore >= gScore[neighbor.id]) {\n        return;\n      }\n\n      cameFrom[neighbor.id] = current.id;\n      gScore[neighbor.id] = tentativeGScore;\n      fScore[neighbor.id] =\n        gScore[neighbor.id] +\n        heuristicCostEstimate(neighbor, goal, start, os, ot);\n    });\n  }\n  // throw new Error('Cannot find path');\n  return [start, goal];\n};\nexport const isBending = (\n  p0: PolyPoint,\n  p1: PolyPoint,\n  p2: PolyPoint,\n): boolean =>\n  !((p0.x === p1.x && p1.x === p2.x) || (p0.y === p1.y && p1.y === p2.y));\n\nexport const getBorderRadiusPoints = (\n  p0: PolyPoint,\n  p1: PolyPoint,\n  p2: PolyPoint,\n  r: number,\n): PolyPoint[] => {\n  const d0 = distance(p0, p1);\n  const d1 = distance(p2, p1);\n  if (d0 < r) {\n    r = d0;\n  }\n  if (d1 < r) {\n    r = d1;\n  }\n  const ps = {\n    x: p1.x - (r / d0) * (p1.x - p0.x),\n    y: p1.y - (r / d0) * (p1.y - p0.y),\n  };\n  const pt = {\n    x: p1.x - (r / d1) * (p1.x - p2.x),\n    y: p1.y - (r / d1) * (p1.y - p2.y),\n  };\n  return [ps, pt];\n};\nexport const getPathWithBorderRadiusByPolyline = (\n  points: PolyPoint[],\n  borderRadius: number,\n): string => {\n  const pathSegments: string[] = [];\n  const startPoint = points[0];\n  pathSegments.push(`M${startPoint.x} ${startPoint.y}`);\n  points.forEach((p, i) => {\n    const p1 = points[i + 1];\n    const p2 = points[i + 2];\n    if (p1 && p2) {\n      if (isBending(p, p1, p2)) {\n        const [ps, pt] = getBorderRadiusPoints(p, p1, p2, borderRadius);\n        pathSegments.push(`L${ps.x} ${ps.y}`);\n        pathSegments.push(`Q${p1.x} ${p1.y} ${pt.x} ${pt.y}`);\n        pathSegments.push(`L${pt.x} ${pt.y}`);\n      } else {\n        pathSegments.push(`L${p1.x} ${p1.y}`);\n      }\n    } else if (p1) {\n      pathSegments.push(`L${p1.x} ${p1.y}`);\n    }\n  });\n  return pathSegments.join(\"\");\n};\nexport const getPolylinePoints = (\n  start: PolyPoint,\n  end: PolyPoint,\n  sNode: INode | ICombo,\n  tNode: INode | ICombo,\n  offset: number,\n): PolyPoint[] => {\n  let sBBox: PBBox, tBBox: PBBox;\n\n  if (!sNode || !sNode.getType()) {\n    sBBox = getBBoxFromPoint(start);\n  } else if (sNode.getType() === \"combo\") {\n    const sNodeKeyShape = sNode.getKeyShape();\n    sBBox = sNodeKeyShape.getCanvasBBox() || (getBBoxFromPoint(start) as PBBox);\n    sBBox.centerX = (sBBox.minX + sBBox.maxX) / 2;\n    sBBox.centerY = (sBBox.minY + sBBox.maxY) / 2;\n  } else {\n    sBBox = sNode.getBBox();\n  }\n\n  if (!tNode || !tNode.getType()) {\n    tBBox = getBBoxFromPoint(end);\n  } else if (tNode.getType() === \"combo\") {\n    const tKeyShapeBBox = tNode.getKeyShape().getBBox();\n    if (tKeyShapeBBox) {\n      const { x: tx, y: ty } = tNode.getModel();\n      tBBox = {\n        x: tx,\n        y: ty,\n        width: tKeyShapeBBox.width,\n        height: tKeyShapeBBox.height,\n        minX: tKeyShapeBBox.minX + tx,\n        maxX: tKeyShapeBBox.maxX + tx,\n        minY: tKeyShapeBBox.minY + ty,\n        maxY: tKeyShapeBBox.maxY + ty,\n      };\n      tBBox.centerX = (tBBox.minX + tBBox.maxX) / 2;\n      tBBox.centerY = (tBBox.minY + tBBox.maxY) / 2;\n    } else {\n      tBBox = getBBoxFromPoint(end) as PBBox;\n    }\n  } else {\n    tBBox = tNode && tNode.getBBox();\n  }\n\n  // if (isBBoxesOverlapping(sBBox, tBBox)) {\n  //   // source and target nodes are overlapping\n  //   return simplifyPolyline(getSimplePolyline(start, end));\n  // }\n  const sxBBox = getExpandedBBox(sBBox, offset);\n  const txBBox = getExpandedBBox(tBBox, offset);\n  // if (isBBoxesOverlapping(sxBBox, txBBox)) {\n  //   // the expanded bounding boxes of source and target nodes are overlapping\n  //   return simplifyPolyline(getSimplePolyline(start, end));\n  // }\n  const sPoint = getExpandedBBoxPoint(sxBBox, start, end);\n  const tPoint = getExpandedBBoxPoint(txBBox, end, start);\n  const lineBBox = getBBoxFromPoints([sPoint, tPoint]);\n  const sMixBBox = mergeBBox(sxBBox, lineBBox);\n  const tMixBBox = mergeBBox(txBBox, lineBBox);\n  let connectPoints: any = [];\n  connectPoints = connectPoints\n    .concat(\n      getPointsFromBBox(sMixBBox), // .filter(p => !isPointIntersectBBox(p, txBBox))\n    )\n    .concat(\n      getPointsFromBBox(tMixBBox), // .filter(p => !isPointIntersectBBox(p, sxBBox))\n    );\n  const centerPoint = {\n    x: (start.x + end.x) / 2,\n    y: (start.y + end.y) / 2,\n  };\n  [lineBBox, sMixBBox, tMixBBox].forEach((bbox: PBBox) => {\n    connectPoints = connectPoints.concat(\n      getBBoxCrossPointsByPoint(bbox, centerPoint).filter(\n        (p) => isPointOutsideBBox(p, sxBBox) && isPointOutsideBBox(p, txBBox),\n      ),\n    );\n  });\n  [\n    {\n      x: sPoint.x,\n      y: tPoint.y,\n    },\n    {\n      x: tPoint.x,\n      y: sPoint.y,\n    },\n  ].forEach((p) => {\n    // impossible!!\n    if (\n      isPointOutsideBBox(p, sxBBox) &&\n      isPointOutsideBBox(p, txBBox) // &&\n      // isPointInsideBBox(p, sMixBBox) && isPointInsideBBox(p, tMixBBox)\n    ) {\n      connectPoints.push(p);\n    }\n  });\n  connectPoints.unshift(sPoint);\n  connectPoints.push(tPoint);\n  // filter out dulplicated points in connectPoints\n  connectPoints = filterConnectPoints(connectPoints); // , sxBBox, txBBox, outerBBox\n  const pathPoints = pathFinder(\n    connectPoints,\n    sPoint,\n    tPoint,\n    sBBox,\n    tBBox,\n    start,\n    end,\n  );\n  pathPoints.unshift(start);\n  pathPoints.push(end);\n\n  return simplifyPolyline(pathPoints);\n};\n"
  },
  {
    "path": "packages/element/src/edges/polyline.ts",
    "content": "import { Point, IGroup } from \"@antv/g-base\";\nimport { mix, each, isArray, isString } from \"@antv/util\";\nimport {\n  registerEdge,\n  ShapeStyle,\n  EdgeConfig,\n  Item,\n  INode,\n  Util,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\nimport {\n  getPathWithBorderRadiusByPolyline,\n  getPolylinePoints,\n} from \"./polyline-util\";\nimport { RouterCfg, pathFinder } from \"./router\";\n\n// 折线\nregisterEdge(\n  \"polyline\",\n  {\n    options: {\n      color: Global.defaultEdge.color,\n      size: Global.defaultEdge.size,\n      style: {\n        radius: 0,\n        offset: 15,\n        x: 0,\n        y: 0,\n        stroke: Global.defaultEdge.style.stroke,\n        lineAppendWidth: Global.defaultEdge.style.lineAppendWidth,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: Global.edgeLabel.style.fill,\n          fontSize: Global.edgeLabel.style.fontSize,\n        },\n      },\n      routeCfg: {\n        obstacles: [], // 希望边绕过的障碍节点\n        maxAllowedDirectionChange: Math.PI, // 允许的最大转角，弧度制\n        maximumLoops: 500,\n        gridSize: 10, // 指定精度\n      },\n      stateStyles: {\n        ...Global.edgeStateStyles,\n      },\n    },\n    shapeType: \"polyline\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: EdgeConfig, group: IGroup) {\n      const shapeStyle = (this as any).getShapeStyle(cfg);\n      if (shapeStyle.radius === 0) delete shapeStyle.radius;\n      const keyShape = group.addShape(\"path\", {\n        className: \"edge-shape\",\n        name: \"edge-shape\",\n        attrs: shapeStyle,\n      });\n      return keyShape;\n    },\n    getShapeStyle(cfg: EdgeConfig): ShapeStyle {\n      const { style: defaultStyle } = this.options;\n\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n\n      const style: ShapeStyle = mix({}, defaultStyle, strokeStyle, cfg.style);\n      cfg = (this as any).getPathPoints(cfg);\n\n      this.radius = style.radius;\n      this.offset = style.offset;\n\n      const { startPoint, endPoint } = cfg;\n      const controlPoints = (this as any).getControlPoints(cfg);\n      let points = [startPoint]; // 添加起始点\n      // 添加控制点\n      if (controlPoints) {\n        points = points.concat(controlPoints);\n      }\n      // 添加结束点\n      points.push(endPoint);\n      const source = cfg.sourceNode;\n      const target = cfg.targetNode;\n      const radius = style.radius;\n      const { routeCfg: defaultRouteCfg } = this.options;\n      const routeCfg = mix({}, defaultRouteCfg, cfg.routeCfg);\n      routeCfg.offset = style.offset;\n\n      let path = (this as any).getPath(\n        points,\n        source,\n        target,\n        radius,\n        routeCfg,\n      );\n      if (\n        (isArray(path) && path.length <= 1) ||\n        (isString(path) && path.indexOf(\"L\") === -1)\n      ) {\n        path = \"M0 0, L0 0\";\n      }\n      if (\n        isNaN(startPoint.x) ||\n        isNaN(startPoint.y) ||\n        isNaN(endPoint.x) ||\n        isNaN(endPoint.y)\n      ) {\n        path = \"M0 0, L0 0\";\n      }\n\n      const attrs: ShapeStyle = mix(\n        {},\n        Global.defaultEdge.style as ShapeStyle,\n        style,\n        {\n          lineWidth: cfg.size,\n          path,\n        } as ShapeStyle,\n      );\n      return attrs;\n    },\n    updateShapeStyle(cfg: EdgeConfig, item: Item) {\n      const group = item.getContainer();\n      if (!item.isVisible()) return;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      const shape =\n        group.find((element) => element.get(\"className\") === \"edge-shape\") ||\n        item.getKeyShape();\n\n      const { size } = cfg;\n      cfg = this.getPathPoints!(cfg);\n\n      const { startPoint, endPoint } = cfg;\n      const controlPoints = this.getControlPoints!(cfg); // || cfg.controlPoints;\n      let points = [startPoint]; // 添加起始点\n      // 添加控制点\n      if (controlPoints) {\n        points = points.concat(controlPoints);\n      }\n      // 添加结束点\n      points.push(endPoint);\n\n      const currentAttr = shape.attr();\n      const previousStyle = mix({}, strokeStyle, currentAttr, cfg.style);\n      const source = cfg.sourceNode;\n      const target = cfg.targetNode;\n      const radius = previousStyle.radius;\n      const { routeCfg: defaultRouteCfg } = this.options;\n      const routeCfg = mix({}, defaultRouteCfg, cfg.routeCfg);\n      routeCfg.offset = previousStyle.offset;\n\n      let path = (this as any).getPath(\n        points,\n        source,\n        target,\n        radius,\n        routeCfg,\n      );\n      if (\n        (isArray(path) && path.length <= 1) ||\n        (isString(path) && path.indexOf(\"L\") === -1)\n      ) {\n        path = \"M0 0, L0 0\";\n      }\n      if (\n        isNaN(startPoint.x) ||\n        isNaN(startPoint.y) ||\n        isNaN(endPoint.x) ||\n        isNaN(endPoint.y)\n      ) {\n        path = \"M0 0, L0 0\";\n      }\n      if (currentAttr.endArrow && previousStyle.endArrow === false) {\n        cfg.style.endArrow = {\n          path: \"\",\n        };\n      }\n      if (currentAttr.startArrow && previousStyle.startArrow === false) {\n        cfg.style.startArrow = {\n          path: \"\",\n        };\n      }\n      const style = mix(\n        strokeStyle,\n        shape.attr(),\n        {\n          lineWidth: size,\n          path,\n        },\n        cfg.style,\n      );\n\n      if (shape) {\n        shape.attr(style);\n      }\n    },\n    getPath(\n      points: Point[],\n      source: INode,\n      target: INode,\n      radius: number,\n      routeCfg?: RouterCfg,\n    ): Array<Array<string | number>> | string {\n      const { offset, simple } = routeCfg;\n      // 指定了控制点\n      if (!offset || points.length > 2) {\n        if (radius) {\n          return getPathWithBorderRadiusByPolyline(points, radius);\n        }\n\n        const pathArray: Array<Array<string | number>> = [];\n        each(points, (point, index) => {\n          if (index === 0) {\n            pathArray.push([\"M\", point.x, point.y]);\n          } else {\n            pathArray.push([\"L\", point.x, point.y]);\n          }\n        });\n        return pathArray;\n      }\n\n      // 未指定控制点\n      const polylinePoints = simple\n        ? getPolylinePoints(\n            points[points.length - 1],\n            points[0],\n            target,\n            source,\n            offset,\n          )\n        : pathFinder(\n            points[0],\n            points[points.length - 1],\n            source,\n            target,\n            routeCfg,\n          );\n\n      if (!polylinePoints || !polylinePoints.length) return \"M0 0, L0 0\";\n\n      if (radius) {\n        const res = getPathWithBorderRadiusByPolyline(polylinePoints, radius);\n        return res;\n      }\n\n      const res = Util.pointsToPolygon(polylinePoints);\n      return res;\n    },\n  },\n  \"single-edge\",\n);\n"
  },
  {
    "path": "packages/element/src/edges/router.ts",
    "content": "/**\n * 通过配置不同的 costFunc, distFunc, constraints 可以得到不同效果的 router\n * generalRouter: 不限制搜索时的移动方向，避开障碍即可\n * orthogonal: 线必须沿着竖直或水平方向（4个方向）\n * octolinearRouter: 线沿着竖直、水平、对角线方向（8个方向）\n */\nimport { INode, Item, Util } from \"@antv/f6-core\";\nimport { deepMix } from \"@antv/util\";\nimport {\n  getExpandedBBox,\n  getExpandedBBoxPoint,\n  PolyPoint,\n  getPolylinePoints,\n  simplifyPolyline,\n  isSegmentCrossingBBox,\n} from \"./polyline-util\";\n\nexport interface RouterCfg {\n  offset?: number; // 连线和点的间距\n  gridSize?: number;\n  obstacles?: Item[];\n  maxAllowedDirectionChange?: number; // 允许的最大转角，弧度制\n  directions?: any[]; // 允许的边的方向\n  startDirections?: string[]; // 边从点出发的方向（e.g. 从上拐 / 从下拐）\n  penalties?: {}; // 附加的分数\n  simple?: boolean;\n  distFunc?: (p1: PolyPoint, p2: PolyPoint) => number;\n  fallbackRoute?: (\n    p1: PolyPoint,\n    p2: PolyPoint,\n    startNode?: INode,\n    endNode?: INode,\n    cfg?: RouterCfg,\n  ) => PolyPoint[]; // 若找不到符合要求的路径时的退化路径方案\n  maximumLoops?: number;\n}\n\nconst manhattanDist = (p1: PolyPoint, p2: PolyPoint): number =>\n  Math.abs(p1.x - p2.x) + Math.abs(p1.y - p2.y);\n\nconst eucliDist = (p1: PolyPoint, p2: PolyPoint): number =>\n  Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2);\n\nconst straightPath = (start: PolyPoint, end: PolyPoint): PolyPoint[] => {\n  // console.warn('fallbackRoute: straight path');\n  return [start, end];\n};\n\nconst simplePolyline = (\n  start: PolyPoint,\n  end: PolyPoint,\n  startNode: INode,\n  endNode: INode,\n  cfg: RouterCfg,\n) => {\n  return simplifyPolyline(\n    getPolylinePoints(start, end, startNode, endNode, cfg.offset),\n  );\n};\n// getPolylinePoints\n\nconst defaultCfg: RouterCfg = {\n  offset: 20,\n  maxAllowedDirectionChange: Math.PI / 2,\n  maximumLoops: 2000,\n  gridSize: 10,\n  directions: [\n    { stepX: 1, stepY: 0 }, // right\n    { stepX: -1, stepY: 0 }, // left\n    { stepX: 0, stepY: 1 }, // bottom\n    { stepX: 0, stepY: -1 }, // top\n  ],\n  get penalties() {\n    return {\n      0: 0,\n      45: this.gridSize / 2,\n      90: this.gridSize / 2,\n    };\n  },\n  distFunc: manhattanDist,\n  fallbackRoute: simplePolyline,\n};\n\nexport const octolinearCfg: RouterCfg = {\n  maxAllowedDirectionChange: Math.PI / 4,\n  // 8 个方向: 上下左右 + 45度斜线方向\n  directions: [\n    { stepX: 1, stepY: 0 },\n    { stepX: 1, stepY: 1 },\n    { stepX: 0, stepY: 1 },\n    { stepX: -1, stepY: 1 },\n    { stepX: -1, stepY: 0 },\n    { stepX: -1, stepY: -1 },\n    { stepX: 0, stepY: -1 },\n    { stepX: 1, stepY: -1 },\n  ],\n  distFunc: eucliDist,\n  fallbackRoute: straightPath,\n};\n\nconst pos2GridIx = (pos: number, gridSize: number) => {\n  const gridIx = Math.round(Math.abs(pos / gridSize));\n  const sign = pos < 0 ? -1 : 1;\n  return gridIx < 0 ? 0 : sign * gridIx;\n};\n\nconst getObstacleMap = (items: Item[], gridSize: number, offset: number) => {\n  const map = {};\n  items.forEach((item: Item) => {\n    // create-edge 时，当边类型为 polyline 时 endNode 为 null\n    if (!item) return;\n    const bbox = getExpandedBBox(item.getBBox(), offset);\n    for (\n      let x = pos2GridIx(bbox.minX, gridSize);\n      x <= pos2GridIx(bbox.maxX, gridSize);\n      x += 1\n    ) {\n      for (\n        let y = pos2GridIx(bbox.minY, gridSize);\n        y <= pos2GridIx(bbox.maxY, gridSize);\n        y += 1\n      ) {\n        map[`${x}|||${y}`] = true;\n      }\n    }\n  });\n  return map;\n};\n\n/**\n * 方向角：计算从 p1 到 p2 的射线与水平线形成的夹角度数（顺时针从右侧0°转到该射线的角度）\n * @param p1 PolyPoint\n * @param p2 PolyPoint\n */\nconst getDirectionAngle = (p1: PolyPoint, p2: PolyPoint) => {\n  const deltaX = p2.x - p1.x;\n  const deltaY = p2.y - p1.y;\n  if (deltaX || deltaY) {\n    return Math.atan2(deltaY, deltaX);\n  }\n  return 0;\n};\n\n/**\n * 方向角的改变，取小于180度角\n * @param angle1\n * @param angle2\n */\nconst getAngleDiff = (angle1: number, angle2: number) => {\n  const directionChange = Math.abs(angle1 - angle2);\n  return directionChange > Math.PI\n    ? 2 * Math.PI - directionChange\n    : directionChange;\n  // return directionChange > 180 ? 360 - directionChange : directionChange;\n};\n\n// Path finder //\nconst estimateCost = (from: PolyPoint, endPoints: PolyPoint[], distFunc) => {\n  let min = Infinity;\n  for (let i = 0, len = endPoints.length; i < len; i++) {\n    const cost = distFunc(from, endPoints[i]);\n    if (cost < min) {\n      min = cost;\n    }\n  }\n  return min;\n};\n\n// 计算考虑 offset 后的 BBox 上的连接点\nconst getBoxPoints = (\n  point: PolyPoint, // 被 gridSize 格式化后的位置（anchorPoint）\n  oriPoint: PolyPoint, // 未被 gridSize 格式化的位置（anchorPoint）\n  node: INode, // 原始节点，用于获取 bbox\n  anotherPoint: PolyPoint, // 另一端被 gridSize 格式化后的位置\n  cfg: RouterCfg,\n): PolyPoint[] => {\n  const points = [];\n  // create-edge 生成边的过程中，endNode 为 null\n  if (!node) {\n    return [point];\n  }\n\n  const { directions, offset } = cfg;\n  const bbox = node.getBBox();\n  const isInside =\n    oriPoint.x > bbox.minX &&\n    oriPoint.x < bbox.maxX &&\n    oriPoint.y > bbox.minY &&\n    oriPoint.y < bbox.maxY;\n\n  const expandBBox = getExpandedBBox(bbox, offset);\n  for (const i in expandBBox) {\n    expandBBox[i] = pos2GridIx(expandBBox[i], cfg.gridSize);\n  }\n\n  if (isInside) {\n    // 如果 anchorPoint 在节点内部，允许第一段线穿过节点\n    for (const dir of directions) {\n      const bounds = [\n        [\n          {\n            x: expandBBox.minX,\n            y: expandBBox.minY,\n          },\n          {\n            x: expandBBox.maxX,\n            y: expandBBox.minY,\n          },\n        ],\n        [\n          {\n            x: expandBBox.minX,\n            y: expandBBox.minY,\n          },\n          {\n            x: expandBBox.minX,\n            y: expandBBox.maxY,\n          },\n        ],\n        [\n          {\n            x: expandBBox.maxX,\n            y: expandBBox.minY,\n          },\n          {\n            x: expandBBox.maxX,\n            y: expandBBox.maxY,\n          },\n        ],\n        [\n          {\n            x: expandBBox.minX,\n            y: expandBBox.maxY,\n          },\n          {\n            x: expandBBox.maxX,\n            y: expandBBox.maxY,\n          },\n        ],\n      ];\n      for (let i = 0; i < 4; i++) {\n        const boundLine = bounds[i];\n        const insterctP = Util.getLineIntersect(\n          point,\n          {\n            x: point.x + dir.stepX * expandBBox.width,\n            y: point.y + dir.stepY * expandBBox.height,\n          },\n          boundLine[0],\n          boundLine[1],\n        ) as PolyPoint;\n        if (insterctP && !isSegmentCrossingBBox(point, insterctP, bbox)) {\n          insterctP.id = `${insterctP.x}|||${insterctP.y}`;\n          points.push(insterctP);\n        }\n      }\n    }\n    return points;\n  }\n  // 如果 anchorPoint 在节点上，只有一个可选方向\n  const insterctP = getExpandedBBoxPoint(expandBBox, point, anotherPoint);\n  insterctP.id = `${insterctP.x}|||${insterctP.y}`;\n  return [insterctP];\n};\n\nconst getDirectionChange = (\n  current: PolyPoint,\n  neighbor: PolyPoint,\n  cameFrom: {\n    [key: string]: {\n      id: string;\n      x: number;\n      y: number;\n    };\n  },\n  scaleStartPoint: PolyPoint,\n): number => {\n  const directionAngle = getDirectionAngle(current, neighbor);\n  if (!cameFrom[current.id]) {\n    const startAngle = getDirectionAngle(scaleStartPoint, current);\n    return getAngleDiff(startAngle, directionAngle);\n  }\n  const prevDirectionAngle = getDirectionAngle(\n    {\n      x: cameFrom[current.id].x,\n      y: cameFrom[current.id].y,\n    },\n    current,\n  );\n  return getAngleDiff(prevDirectionAngle, directionAngle);\n};\n\nconst getControlPoints = (\n  current,\n  cameFrom,\n  scaleStartPoint,\n  endPoint,\n  startPoint,\n  scaleEndPoint,\n  gridSize,\n) => {\n  const controlPoints = [endPoint];\n  let currentId = current.id;\n  let currentX = current.x;\n  let currentY = current.y;\n  const lastPoint = {\n    x: currentX,\n    y: currentY,\n    id: currentId,\n  };\n  if (getDirectionChange(lastPoint, scaleEndPoint, cameFrom, scaleStartPoint)) {\n    // if (scaleEndPoint.x === endPoint.x && scaleEndPoint.y === endPoint.y)\n    //   controlPoints.unshift({\n    //     x: endPoint.x,\n    //     y: endPoint.y\n    //   })\n    // else\n    //   controlPoints.unshift({\n    //     x: lastPoint.x * gridSize,\n    //     y: lastPoint.y * gridSize,\n    //   });\n\n    controlPoints.unshift({\n      x: scaleEndPoint.x === endPoint.x ? endPoint.x : lastPoint.x * gridSize,\n      y: scaleEndPoint.y === endPoint.y ? endPoint.y : lastPoint.y * gridSize,\n    });\n  }\n  while (cameFrom[currentId] && cameFrom[currentId].id !== currentId) {\n    const point = {\n      x: currentX,\n      y: currentY,\n      id: currentId,\n    };\n    const preId = cameFrom[currentId].id;\n    const preX = cameFrom[currentId].x;\n    const preY = cameFrom[currentId].y;\n    const prePoint = {\n      x: preX,\n      y: preY,\n      id: preId,\n    };\n    const directionChange = getDirectionChange(\n      prePoint,\n      point,\n      cameFrom,\n      scaleStartPoint,\n    );\n    if (directionChange) {\n      // if (prePoint.x === point.x && prePoint.y === point.y)\n      //   controlPoints.unshift({\n      //     x: controlPoints[0].x,\n      //     y: controlPoints[0].y\n      //   })\n      // else\n      //   controlPoints.unshift({\n      //     x: prePoint.x * gridSize,\n      //     y: prePoint.y * gridSize,\n      //   });\n\n      controlPoints.unshift({\n        x: prePoint.x === point.x ? controlPoints[0].x : prePoint.x * gridSize,\n        y: prePoint.y === point.y ? controlPoints[0].y : prePoint.y * gridSize,\n      });\n    }\n\n    currentId = preId;\n    currentX = preX;\n    currentY = preY;\n  }\n\n  // 和startNode对齐\n  const firstPoint = {\n    x: currentX,\n    y: currentY,\n    id: currentId,\n  };\n\n  // if (firstPoint.x === scaleStartPoint.x && firstPoint.y === scaleStartPoint.y) {\n  //   controlPoints[0].x = startPoint.x;\n  //   controlPoints[0].y = startPoint.y;\n  // }\n\n  controlPoints[0].x =\n    firstPoint.x === scaleStartPoint.x ? startPoint.x : controlPoints[0].x;\n  controlPoints[0].y =\n    firstPoint.y === scaleStartPoint.y ? startPoint.y : controlPoints[0].y;\n  controlPoints.unshift(startPoint);\n  return controlPoints;\n};\n\nexport const pathFinder = (\n  startPoint: PolyPoint,\n  endPoint: PolyPoint,\n  startNode: INode,\n  endNode: INode,\n  routerCfg?: RouterCfg,\n): PolyPoint[] => {\n  if (isNaN(startPoint.x) || isNaN(endPoint.x)) return [];\n  const cfg: RouterCfg = deepMix(defaultCfg, routerCfg);\n  cfg.obstacles = cfg.obstacles || [];\n  const gridSize = cfg.gridSize;\n  const map = getObstacleMap(\n    cfg.obstacles.concat([startNode, endNode]),\n    gridSize,\n    cfg.offset,\n  );\n\n  const scaleStartPoint = {\n    x: pos2GridIx(startPoint.x, gridSize),\n    y: pos2GridIx(startPoint.y, gridSize),\n  };\n  const scaleEndPoint = {\n    x: pos2GridIx(endPoint.x, gridSize),\n    y: pos2GridIx(endPoint.y, gridSize),\n  };\n\n  startPoint.id = `${scaleStartPoint.x}|||${scaleStartPoint.y}`;\n  endPoint.id = `${scaleEndPoint.x}|||${scaleEndPoint.y}`;\n  const startPoints = getBoxPoints(\n    scaleStartPoint,\n    startPoint,\n    startNode,\n    scaleEndPoint,\n    cfg,\n  );\n  const endPoints = getBoxPoints(\n    scaleEndPoint,\n    endPoint,\n    endNode,\n    scaleStartPoint,\n    cfg,\n  );\n  startPoints.forEach((point) => {\n    delete map[point.id];\n  });\n  endPoints.forEach((point) => {\n    delete map[point.id];\n  });\n\n  const openSet = {};\n  const closedSet = {};\n  const cameFrom: {\n    [key: string]: {\n      id: string;\n      x: number;\n      y: number;\n    };\n  } = {};\n\n  // 从起点到当前点已产生的 cost, default: Infinity\n  const gScore: {\n    [key: string]: number;\n  } = {};\n\n  // 起点经过当前点到达终点预估的 cost, default: Infinity\n  const fScore: {\n    [key: string]: number;\n  } = {};\n\n  // initialize\n  for (let i = 0; i < startPoints.length; i++) {\n    const firstStep = startPoints[i];\n    openSet[firstStep.id] = firstStep;\n    // cameFrom[firstStep.id] = startPoint.id;\n    gScore[firstStep.id] = 0;\n    fScore[firstStep.id] = estimateCost(firstStep, endPoints, cfg.distFunc);\n  }\n  let remainLoops = cfg.maximumLoops;\n  const penalties = cfg.penalties;\n  let current,\n    curCost,\n    direction,\n    neighbor,\n    neighborCost,\n    costFromStart,\n    directionChange;\n  while (Object.keys(openSet).length > 0 && remainLoops > 0) {\n    current = undefined;\n    curCost = Infinity;\n\n    // 找到 openSet 中 fScore 最小的点\n    Object.keys(openSet).forEach((key) => {\n      const id = openSet[key].id;\n      if (fScore[id] <= curCost) {\n        curCost = fScore[id];\n        current = openSet[id];\n      }\n    });\n    if (!current) break;\n\n    // 如果 fScore 最小的点就是终点\n    if (\n      endPoints.findIndex(\n        (point) => point.x === current.x && point.y === current.y,\n      ) > -1\n    ) {\n      return getControlPoints(\n        current,\n        cameFrom,\n        scaleStartPoint,\n        endPoint,\n        startPoint,\n        scaleEndPoint,\n        gridSize,\n      );\n    }\n\n    delete openSet[current.id];\n    closedSet[current.id] = true;\n\n    // 获取符合条件的下一步的候选连接点\n    // 沿候选方向走一步\n    for (let i = 0; i < cfg.directions.length; i++) {\n      direction = cfg.directions[i];\n      neighbor = {\n        x: current.x + direction.stepX,\n        y: current.y + direction.stepY,\n        id: `${Math.round(current.x) + direction.stepX}|||${\n          Math.round(current.y) + direction.stepY\n        }`,\n      };\n\n      if (closedSet[neighbor.id]) continue;\n      directionChange = getDirectionChange(\n        current,\n        neighbor,\n        cameFrom,\n        scaleStartPoint,\n      );\n      if (directionChange > cfg.maxAllowedDirectionChange) continue;\n      if (map[neighbor.id]) continue; // 如果交叉则跳过\n\n      // 将候选点加入 openSet, 并计算每个候选点的 cost\n      if (!openSet[neighbor.id]) {\n        openSet[neighbor.id] = neighbor;\n      }\n      neighborCost =\n        cfg.distFunc(current, neighbor) +\n        (isNaN(penalties[directionChange])\n          ? gridSize\n          : penalties[directionChange]);\n      costFromStart = gScore[current.id] + neighborCost;\n      if (gScore[neighbor.id] && costFromStart >= gScore[neighbor.id]) {\n        continue;\n      }\n\n      cameFrom[neighbor.id] = current;\n      gScore[neighbor.id] = costFromStart;\n      fScore[neighbor.id] =\n        costFromStart + estimateCost(neighbor, endPoints, cfg.distFunc);\n    }\n\n    remainLoops -= 1;\n  }\n\n  return cfg.fallbackRoute(startPoint, endPoint, startNode, endNode, cfg);\n};\n"
  },
  {
    "path": "packages/element/src/index.ts",
    "content": "import \"./nodes\";\nimport \"./edges\";\n"
  },
  {
    "path": "packages/element/src/nodes/circle.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  ShapeOptions,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\nimport { deepMix } from \"@antv/util\";\n\n// 带有图标的圆，可用于拓扑图中\nregisterNode(\n  \"circle\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: Global.defaultNode.size,\n      style: {\n        x: 0,\n        y: 0,\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"circle\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { icon: defaultIcon = {} } = this.getOptions(cfg) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n      const icon = deepMix({}, defaultIcon, cfg.icon);\n      const keyShape: IShape = group.addShape(\"circle\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      const { width, height, show, text } = icon;\n      if (show) {\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              x: -width / 2,\n              y: -height / 2,\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        }\n      }\n\n      (this as any).drawLinkPoints(cfg, group);\n\n      return keyShape;\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {} } = this.getOptions(cfg) as NodeConfig;\n\n      const {\n        top,\n        left,\n        right,\n        bottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n      const size = this.getSize!(cfg);\n      const r = size[0] / 2;\n      if (left) {\n        // left circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: -r,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (right) {\n        // right circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: r,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (top) {\n        // top circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: -r,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (bottom) {\n        // bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: r,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-bottom\",\n          name: \"link-point-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig): ShapeStyle {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = deepMix({}, defaultStyle, strokeStyle);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const r = size[0] / 2;\n      const styles = {\n        x: 0,\n        y: 0,\n        r,\n        ...style,\n      };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      const size = (this as ShapeOptions).getSize!(cfg);\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        r: size[0] / 2,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      const style = deepMix({}, keyShape.attr(), strokeStyle, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, true);\n      (this as any).updateLinkPoints(cfg, group);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/diamond.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\nimport { mix } from \"@antv/util\";\n\n// 菱形shape\nregisterNode(\n  \"diamond\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: [80, 80],\n      style: {\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"diamond\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { icon = {} } = this.getOptions(cfg) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n\n      const keyShape = group.addShape(\"path\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      const { width: w, height: h, show, text } = icon;\n      if (show) {\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              x: -w! / 2,\n              y: -h! / 2,\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        }\n      }\n\n      (this as any).drawLinkPoints(cfg, group);\n\n      return keyShape;\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {} } = this.getOptions(cfg) as NodeConfig;\n\n      const {\n        top,\n        left,\n        right,\n        bottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n      const size = this.getSize!(cfg);\n      const width = size[0];\n      const height = size[1];\n      if (left) {\n        // left circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: -width / 2,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (right) {\n        // right circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: width / 2,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (top) {\n        // top circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: -height / 2,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (bottom) {\n        // bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: height / 2,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-bottom\",\n          name: \"link-point-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n    },\n    getPath(cfg: NodeConfig): Array<Array<string | number>> {\n      const size = this.getSize!(cfg);\n      const width = size[0];\n      const height = size[1];\n      const path = [\n        [\"M\", 0, -height / 2], // 上部顶点\n        [\"L\", width / 2, 0], // 右侧点\n        [\"L\", 0, height / 2], // 下部\n        [\"L\", -width / 2, 0], // 左侧\n        [\"Z\"], // 封闭\n      ];\n      return path;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig): ShapeStyle {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle);\n      const path = (this as any).getPath(cfg);\n      const styles = { path, ...style };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n      const { style: defaultStyle } = this.getOptions({}) as NodeConfig;\n      const path = (this as any).getPath(cfg);\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        path,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      let style = mix({}, defaultStyle, keyShape.attr(), strokeStyle);\n      style = mix(style, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, true);\n      (this as any).updateLinkPoints(cfg, group);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/donut.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  ShapeOptions,\n  BaseGlobal as Global,\n  Util,\n} from \"@antv/f6-core\";\nimport { deepMix, isNumber, isArray } from \"@antv/util\";\n\nconst { defaultSubjectColors } = Util;\n\n// 饼图节点\nregisterNode(\n  \"donut\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: Global.defaultNode.size,\n      style: {\n        x: 0,\n        y: 0,\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"circle\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { icon: defaultIcon = {} } = this.getOptions(cfg) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n      const icon = deepMix({}, defaultIcon, cfg.icon);\n      const keyShape: IShape = group.addShape(\"circle\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        draggable: true,\n        name: `${this.type}-keyShape`,\n      });\n\n      const { width, height, show, text } = icon;\n      if (show) {\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              x: -width / 2,\n              y: -height / 2,\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        }\n      }\n\n      const donutR = keyShape.attr(\"r\");\n      const innerR = 0.6 * donutR; // 甜甜圈的内环半径\n      const arcR = (donutR + innerR) / 2; // 内环半径与外环半径的平均值\n\n      const { donutAttrs = {}, donutColorMap = {} } = cfg as any;\n      const attrNum = Object.keys(donutAttrs).length;\n      if (donutAttrs && attrNum > 1) {\n        const attrs: any[] = [];\n        let totalValue = 0;\n        Object.keys(donutAttrs).forEach((name) => {\n          const value = donutAttrs[name] || 0;\n          if (!isNumber(value)) return;\n          attrs.push({\n            key: name,\n            value,\n            color: donutColorMap[name],\n          });\n          totalValue += value;\n        });\n        if (totalValue) {\n          const lineWidth = donutR - innerR;\n          if (attrNum === 1) {\n            group.addShape(\"circle\", {\n              attrs: {\n                r: arcR,\n                x: 0,\n                y: 0,\n                stroke: attrs[0].color || defaultSubjectColors[0],\n                lineWidth,\n              },\n              name: `fan-shape-0`,\n            });\n            return;\n          }\n          let arcBegin = [arcR, 0];\n          let beginAngle = 0;\n          attrs.forEach((attr, i) => {\n            let percent = attr.value / totalValue;\n            if (percent < 0.001) return;\n            if (percent > 0.999) percent = 1;\n            if (percent === 1) {\n              group.addShape(\"circle\", {\n                attrs: {\n                  r: arcR,\n                  x: 0,\n                  y: 0,\n                  stroke:\n                    attr.color ||\n                    defaultSubjectColors[i % defaultSubjectColors.length],\n                  lineWidth,\n                },\n                name: `fan-shape-${i}`,\n              });\n              return;\n            }\n            attr.percent = percent;\n            attr.angle = percent * Math.PI * 2;\n            attr.beginAgnle = beginAngle;\n            beginAngle += attr.angle;\n            attr.endAngle = beginAngle;\n            attr.arcBegin = arcBegin;\n            attr.arcEnd = [\n              arcR * Math.cos(attr.endAngle),\n              -arcR * Math.sin(attr.endAngle),\n            ];\n            const isBig = attr.angle > Math.PI ? 1 : 0;\n            const path = [\n              [\"M\", attr.arcBegin[0], attr.arcBegin[1]],\n              [\"A\", arcR, arcR, 0, isBig, 0, attr.arcEnd[0], attr.arcEnd[1]],\n              [\"L\", attr.arcEnd[0], attr.arcEnd[1]],\n            ];\n            group.addShape(\"path\", {\n              attrs: {\n                path,\n                lineWidth,\n                stroke:\n                  attr.color ||\n                  defaultSubjectColors[i % defaultSubjectColors.length],\n              },\n              name: `fan-shape-${i}`,\n            });\n            arcBegin = attr.arcEnd;\n          });\n        }\n      }\n\n      (this as any).drawLinkPoints(cfg, group);\n\n      return keyShape;\n    },\n    update: undefined,\n  },\n  \"circle\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/ellipse.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\nimport { mix } from \"@antv/util\";\n\n/**\n * 基本的椭圆，可以添加文本，默认文本居中\n */\nregisterNode(\n  \"ellipse\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: [80, 40],\n      style: {\n        x: 0,\n        y: 0,\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"ellipse\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { icon = {} } = this.getOptions(cfg) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n\n      const keyShape = group.addShape(\"ellipse\", {\n        attrs: style,\n        className: \"ellipse-keyShape\",\n        name: \"ellipse-keyShape\",\n        draggable: true,\n      });\n\n      const { width, height, show, text } = icon;\n      if (show) {\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              x: -width! / 2,\n              y: -height! / 2,\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        }\n      }\n\n      (this as any).drawLinkPoints(cfg, group);\n\n      return keyShape;\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {} } = this.getOptions(cfg) as NodeConfig;\n\n      const {\n        top,\n        left,\n        right,\n        bottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n      const size = this.getSize!(cfg);\n      const rx = size[0] / 2;\n      const ry = size[1] / 2;\n\n      if (left) {\n        // left circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: -rx,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (right) {\n        // right circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: rx,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (top) {\n        // top circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: -ry,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (bottom) {\n        // bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: ry,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-bottom\",\n          name: \"link-point-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig): ShapeStyle {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle);\n      const size = this.getSize!(cfg);\n      const rx = size[0] / 2;\n      const ry = size[1] / 2;\n      const styles = {\n        x: 0,\n        y: 0,\n        rx,\n        ry,\n        ...style,\n      };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n      const { style: defaultStyle } = this.getOptions({}) as NodeConfig;\n      const size = this.getSize!(cfg);\n\n      const strokeStyle = {\n        stroke: cfg.color,\n        rx: size[0] / 2,\n        ry: size[1] / 2,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      let style = mix({}, defaultStyle, keyShape.attr(), strokeStyle);\n      style = mix(style, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, true);\n      (this as any).updateLinkPoints(cfg, group);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/image.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport { registerNode, Item, NodeConfig } from \"@antv/f6-core\";\n\n/**\n * 基本的图片，可以添加文本，默认文本在图片的下面\n */\nregisterNode(\n  \"image\",\n  {\n    options: {\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ\",\n      size: 200,\n      clipCfg: {\n        show: false,\n        type: \"circle\",\n        // circle\n        r: 50,\n        // ellipse\n        rx: 50,\n        ry: 35,\n        // rect\n        width: 50,\n        height: 35,\n        // polygon\n        points: [\n          [30, 12],\n          [12, 30],\n          [30, 48],\n          [48, 30],\n        ],\n        // path\n        path: [\n          [\"M\", 25, 25],\n          [\"L\", 50, 25],\n          [\"A\", 12.5, 12.5, 0, 1, 1, 50, 50],\n          [\"A\", 12.5, 12.5, 0, 1, 0, 50, 50],\n          [\"L\", 25, 75],\n          [\"Z\"],\n        ],\n        // 坐标\n        x: 0,\n        y: 0,\n        // clip 的属性样式\n        // style: {\n        //   lineWidth: 1\n        // },\n      },\n    },\n    shapeType: \"image\",\n    labelPosition: \"bottom\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { shapeType } = this; // || this.type，都已经加了 shapeType\n      const style = this.getShapeStyle!(cfg);\n      delete style.fill;\n      const shape = group.addShape(shapeType, {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n      (this as any).drawClip(cfg, shape);\n      return shape;\n    },\n    drawClip(cfg: NodeConfig, shape: IShape) {\n      const { clipCfg: clip } = this.getOptions(cfg);\n\n      if (!clip.show) {\n        return;\n      }\n      // 支持 circle、rect、ellipse、Polygon 及自定义 path clip\n      const { type, x, y, style } = clip;\n      if (type === \"circle\") {\n        const { r } = clip;\n        shape.setClip({\n          type: \"circle\",\n          attrs: {\n            r,\n            x,\n            y,\n            ...style,\n          },\n        });\n      } else if (type === \"rect\") {\n        const { width, height } = clip;\n        const rectX = x - width / 2;\n        const rectY = y - height / 2;\n        shape.setClip({\n          type: \"rect\",\n          attrs: {\n            x: rectX,\n            y: rectY,\n            width,\n            height,\n            ...style,\n          },\n        });\n      } else if (type === \"ellipse\") {\n        const { rx, ry } = clip;\n        shape.setClip({\n          type: \"ellipse\",\n          attrs: {\n            x,\n            y,\n            rx,\n            ry,\n            ...style,\n          },\n        });\n      } else if (type === \"polygon\") {\n        const { points } = clip;\n        shape.setClip({\n          type: \"polygon\",\n          attrs: {\n            points,\n            ...style,\n          },\n        });\n      } else if (type === \"path\") {\n        const { path } = clip;\n        shape.setClip({\n          type: \"path\",\n          attrs: {\n            path,\n            ...style,\n          },\n        });\n      }\n    },\n    getShapeStyle(cfg: NodeConfig) {\n      const { style: defaultStyle } = this.getOptions(cfg);\n      const size = this.getSize!(cfg);\n      const { img } = this.getOptions(cfg);\n      let width = size[0];\n      let height = size[1];\n      if (defaultStyle) {\n        width = defaultStyle.width || size[0];\n        height = defaultStyle.height || size[1];\n      }\n      const style = {\n        x: -width / 2, // 节点的位置在上层确定，所以这里仅使用相对位置即可\n        y: -height / 2,\n        width,\n        height,\n        img,\n        ...defaultStyle,\n      };\n      return style;\n    },\n    updateShapeStyle(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      const shapeClassName = `${this.itemType}-shape`;\n      const shape =\n        group.find((element) => element.get(\"className\") === shapeClassName) ||\n        item.getKeyShape();\n      const shapeStyle = this.getShapeStyle!(cfg);\n      if (shape) {\n        shape.attr(shapeStyle);\n      }\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/index.ts",
    "content": "import \"./circle\";\nimport \"./rect\";\nimport \"./ellipse\";\nimport \"./diamond\";\nimport \"./triangle\";\nimport \"./modelRect\";\nimport \"./star\";\nimport \"./donut\";\n// import './image';\n"
  },
  {
    "path": "packages/element/src/nodes/modelRect.ts",
    "content": "import { mix, isString } from \"@antv/util\";\nimport { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  ShapeOptions,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\n\nregisterNode(\n  \"modelRect\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: [185, 70],\n      style: {\n        radius: 5,\n        stroke: \"#69c0ff\",\n        fill: \"#ffffff\",\n        lineWidth: Global.defaultNode.style.lineWidth,\n        fillOpacity: 1,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: \"#595959\",\n          fontSize: 14,\n        },\n        offset: 30, // 距离左侧的 offset，没有设置 y 轴上移动的配置\n      },\n      descriptionCfg: {\n        style: {\n          fontSize: 12,\n          fill: \"#bfbfbf\",\n        },\n        paddingTop: 0,\n      },\n      preRect: {\n        show: true,\n        width: 4,\n        fill: \"#40a9ff\",\n        radius: 2,\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: 10,\n        lineWidth: 1,\n        fill: \"#72CC4A\",\n        stroke: \"#72CC4A\",\n      },\n      // 节点中icon配置\n      logoIcon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: true,\n        x: 0,\n        y: 0,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n        width: 16,\n        height: 16,\n        // 用于调整图标的左右位置\n        offset: 0,\n      },\n      // 节点中表示状态的icon配置\n      stateIcon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: true,\n        x: 0,\n        y: 0,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n        width: 16,\n        height: 16,\n        // 用于调整图标的左右位置\n        offset: -5,\n      },\n      // 连接点，默认为左右\n      // anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    shapeType: \"modelRect\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { preRect = {} } = this.getOptions(cfg) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n      const height = size[1];\n\n      const keyShape = group.addShape(\"rect\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      const { show: preRectShow, ...preRectStyle } = preRect;\n      if (preRectShow) {\n        group.addShape(\"rect\", {\n          attrs: {\n            x: -width / 2,\n            y: -height / 2,\n            height,\n            ...preRectStyle,\n          },\n          className: \"pre-rect\",\n          name: \"pre-rect\",\n          draggable: true,\n        });\n      }\n\n      (this as any).drawLogoIcon(cfg, group);\n\n      (this as any).drawStateIcon(cfg, group);\n\n      (this as any).drawLinkPoints(cfg, group);\n      return keyShape;\n    },\n    /**\n     * 绘制模型矩形左边的logo图标\n     * @param {Object} cfg 数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLogoIcon(cfg: NodeConfig, group: IGroup) {\n      const { logoIcon = {} } = this.getOptions(cfg) as NodeConfig;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n\n      if (logoIcon.show) {\n        const {\n          width: w,\n          height: h,\n          x,\n          y,\n          offset,\n          text,\n          ...logoIconStyle\n        } = logoIcon;\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...logoIconStyle,\n            },\n            className: \"rect-logo-icon\",\n            name: \"rect-logo-icon\",\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              ...logoIconStyle,\n              x: x || -width / 2 + (w as number) + (offset as number),\n              y: y || -(h as number) / 2,\n              width: w,\n              height: h,\n            },\n            className: \"rect-logo-icon\",\n            name: \"rect-logo-icon\",\n            draggable: true,\n          });\n        }\n      }\n    },\n    /**\n     * 绘制模型矩形右边的状态图标\n     * @param {Object} cfg 数据配置项\n     * @param {Group} group Group实例\n     */\n    drawStateIcon(cfg: NodeConfig, group: IGroup) {\n      const { stateIcon = {} } = this.getOptions(cfg) as NodeConfig;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n\n      if (stateIcon.show) {\n        const {\n          width: w,\n          height: h,\n          x,\n          y,\n          offset,\n          text,\n          ...iconStyle\n        } = stateIcon;\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...iconStyle,\n            },\n            className: \"rect-state-icon\",\n            name: \"rect-state-icon\",\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              ...iconStyle,\n              x: x || width / 2 - (w as number) + (offset as number),\n              y: y || -(h as number) / 2,\n              width: w,\n              height: h,\n            },\n            className: \"rect-state-icon\",\n            name: \"rect-state-icon\",\n            draggable: true,\n          });\n        }\n      }\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {} } = this.getOptions(cfg) as NodeConfig;\n\n      const {\n        top,\n        left,\n        right,\n        bottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n      const height = size[1];\n      if (left) {\n        // left circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: -width / 2,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (right) {\n        // right circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: width / 2,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (top) {\n        // top circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: -height / 2,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (bottom) {\n        // bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: height / 2,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-bottom\",\n          name: \"link-point-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n    },\n    drawLabel(cfg: NodeConfig, group: IGroup): IShape {\n      const {\n        labelCfg = {},\n        logoIcon = {},\n        descriptionCfg = {},\n      } = this.getOptions(cfg) as NodeConfig;\n\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n\n      let label = null;\n\n      const { show, width: w } = logoIcon;\n      let offsetX = -width / 2 + labelCfg.offset;\n\n      if (show) {\n        offsetX = -width / 2 + (w as number) + labelCfg.offset;\n      }\n\n      const { style: fontStyle } = labelCfg;\n      const { style: descriptionStyle, paddingTop: descriptionPaddingTop } =\n        descriptionCfg;\n      if (isString(cfg.description)) {\n        label = group.addShape(\"text\", {\n          attrs: {\n            ...fontStyle,\n            x: offsetX,\n            y: -5,\n            text: cfg.label,\n          },\n          className: \"text-shape\",\n          name: \"text-shape\",\n          draggable: true,\n        });\n\n        group.addShape(\"text\", {\n          attrs: {\n            ...descriptionStyle,\n            x: offsetX,\n            y: 17 + ((descriptionPaddingTop as any) || 0),\n            text: cfg.description,\n          },\n          className: \"rect-description\",\n          name: \"rect-description\",\n          draggable: true,\n        });\n      } else {\n        label = group.addShape(\"text\", {\n          attrs: {\n            ...fontStyle,\n            x: offsetX,\n            y: 7,\n            text: cfg.label,\n          },\n          className: \"text-shape\",\n          name: \"text-shape\",\n          draggable: true,\n        });\n      }\n      return label;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig) {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style: ShapeStyle = mix({}, defaultStyle, strokeStyle);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = style.width || size[0];\n      const height = style.height || size[1];\n      const styles = {\n        x: -width / 2,\n        y: -height / 2,\n        width,\n        height,\n        ...style,\n      };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const {\n        style = {},\n        labelCfg = {},\n        descriptionCfg = {},\n      } = this.getOptions(cfg) as NodeConfig;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n      const height = size[1];\n      const keyShape = item.get(\"keyShape\");\n      keyShape.attr({\n        ...style,\n        x: -width / 2,\n        y: -height / 2,\n        width,\n        height,\n      });\n\n      const group = item.getContainer();\n\n      const logoIconShape = group.find(\n        (element) => element.get(\"className\") === \"rect-logo-icon\",\n      );\n      const currentLogoIconAttr = logoIconShape ? logoIconShape.attr() : {};\n\n      const logoIcon = mix({}, currentLogoIconAttr, cfg.logoIcon);\n\n      let { width: w } = logoIcon;\n      if (w === undefined) {\n        w = (this as any).options.logoIcon.width;\n      }\n      const show = cfg.logoIcon ? cfg.logoIcon.show : undefined;\n\n      const { offset } = labelCfg;\n      let offsetX = -width / 2 + w + offset;\n\n      if (!show && show !== undefined) {\n        offsetX = -width / 2 + offset;\n      }\n\n      const label = group.find(\n        (element) => element.get(\"className\") === \"node-label\",\n      );\n      const description = group.find(\n        (element) => element.get(\"className\") === \"rect-description\",\n      );\n      if (cfg.label) {\n        if (!label) {\n          group.addShape(\"text\", {\n            attrs: {\n              ...labelCfg.style,\n              x: offsetX,\n              y: cfg.description ? -5 : 7,\n              text: cfg.label,\n            },\n            className: \"node-label\",\n            name: \"node-label\",\n            draggable: true,\n          });\n        } else {\n          const cfgStyle = cfg.labelCfg ? cfg.labelCfg.style : {};\n          const labelStyle = mix({}, label.attr(), cfgStyle);\n          if (cfg.label) labelStyle.text = cfg.label;\n          labelStyle.x = offsetX;\n          if (isString(cfg.description)) labelStyle.y = -5;\n          if (description) {\n            description.resetMatrix();\n            description.attr({\n              x: offsetX,\n            });\n          }\n          label.resetMatrix();\n          label.attr(labelStyle);\n        }\n      }\n      if (isString(cfg.description)) {\n        const { paddingTop } = descriptionCfg;\n        if (!description) {\n          group.addShape(\"text\", {\n            attrs: {\n              ...descriptionCfg.style,\n              x: offsetX,\n              y: 17 + ((paddingTop as any) || 0),\n              text: cfg.description,\n            },\n            className: \"rect-description\",\n            name: \"rect-description\",\n            draggable: true,\n          });\n        } else {\n          const cfgStyle = cfg.descriptionCfg ? cfg.descriptionCfg.style : {};\n          const descriptionStyle = mix({}, description.attr(), cfgStyle);\n          if (isString(cfg.description))\n            descriptionStyle.text = cfg.description;\n          descriptionStyle.x = offsetX;\n          description.resetMatrix();\n          description.attr({\n            ...descriptionStyle,\n            y: 17 + ((paddingTop as any) || 0),\n          });\n        }\n      }\n\n      const preRectShape = group.find(\n        (element) => element.get(\"className\") === \"pre-rect\",\n      );\n      if (preRectShape) {\n        const preRect = mix({}, preRectShape.attr(), cfg.preRect);\n        preRectShape.attr({\n          ...preRect,\n          x: -width / 2,\n          y: -height / 2,\n          height,\n        });\n      }\n\n      if (logoIconShape) {\n        if (!show && show !== undefined) {\n          logoIconShape.remove();\n        } else {\n          const {\n            width: logoW,\n            height: h,\n            x,\n            y,\n            offset: logoOffset,\n            ...logoIconStyle\n          } = logoIcon;\n          logoIconShape.attr({\n            ...logoIconStyle,\n            x: x || -width / 2 + logoW + logoOffset,\n            y: y || -h / 2,\n            width: logoW,\n            height: h,\n          });\n        }\n      } else if (show) {\n        (this as any).drawLogoIcon(cfg, group);\n      }\n\n      const stateIconShape = group.find(\n        (element) => element.get(\"className\") === \"rect-state-icon\",\n      );\n      const currentStateIconAttr = stateIconShape ? stateIconShape.attr() : {};\n      const stateIcon = mix({}, currentStateIconAttr, cfg.stateIcon);\n      if (stateIconShape) {\n        if (!stateIcon.show && stateIcon.show !== undefined) {\n          stateIconShape.remove();\n        }\n        const {\n          width: stateW,\n          height: h,\n          x,\n          y,\n          offset: stateOffset,\n          ...stateIconStyle\n        } = stateIcon;\n        stateIconShape.attr({\n          ...stateIconStyle,\n          x: x || width / 2 - stateW + stateOffset,\n          y: y || -h / 2,\n          width: stateW,\n          height: h,\n        });\n      } else if (stateIcon.show) {\n        (this as any).drawStateIcon(cfg, group);\n      }\n\n      (this as any).updateLinkPoints(cfg, group);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/rect.ts",
    "content": "import { mix } from \"@antv/util\";\nimport { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  ShapeOptions,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\n\nregisterNode(\n  \"rect\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: [100, 30],\n      style: {\n        radius: 0,\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      // 文本样式配置\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n      },\n      // 连接点，默认为左右\n      // anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"rect\",\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const style = this.getShapeStyle!(cfg);\n\n      const keyShape = group.addShape(\"rect\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      (this as any).drawLinkPoints(cfg, group);\n      return keyShape;\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {} } = this.getOptions(cfg) as NodeConfig;\n\n      const {\n        top,\n        left,\n        right,\n        bottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = size[0];\n      const height = size[1];\n\n      if (left) {\n        // left circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: -width / 2,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (right) {\n        // right circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: width / 2,\n            y: 0,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (top) {\n        // top circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: -height / 2,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n          isAnchorPoint: true,\n        });\n      }\n\n      if (bottom) {\n        // bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: 0,\n            y: height / 2,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-bottom\",\n          name: \"link-point-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig) {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle);\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const width = style.width || size[0];\n      const height = style.height || size[1];\n      const styles = {\n        x: -width / 2,\n        y: -height / 2,\n        width,\n        height,\n        ...style,\n      };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n      const { style: defaultStyle } = this.getOptions({}) as NodeConfig;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const keyShape = item.get(\"keyShape\");\n      if (!cfg.size) {\n        size[0] = keyShape.attr(\"width\") || defaultStyle.width;\n        size[1] = keyShape.attr(\"height\") || defaultStyle.height;\n      }\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        x: -size[0] / 2,\n        y: -size[1] / 2,\n        width: size[0],\n        height: size[1],\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      let style = mix({}, defaultStyle, keyShape.attr(), strokeStyle);\n      style = mix(style, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, false);\n      (this as any).updateLinkPoints(cfg, group);\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/star.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  ShapeOptions,\n  BaseGlobal as Global,\n} from \"@antv/f6-core\";\n\nimport { mix } from \"@antv/util\";\n\n// 五角星shape\nregisterNode(\n  \"star\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: 60,\n      style: {\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"star\",\n    // 文本位置\n    labelPosition: \"center\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { icon = {} } = this.getOptions(cfg) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n\n      const keyShape = group.addShape(\"path\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      const { width: w, height: h, show, text } = icon;\n      if (show) {\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        } else {\n          group.addShape(\"image\", {\n            attrs: {\n              x: -w! / 2,\n              y: -h! / 2,\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        }\n      }\n\n      (this as any).drawLinkPoints(cfg, group);\n\n      return keyShape;\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {} } = this.getOptions(cfg) as NodeConfig;\n\n      const {\n        top,\n        left,\n        right,\n        leftBottom,\n        rightBottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const outerR = size[0];\n\n      if (right) {\n        // right circle\n        // up down left right 四个方向的坐标均不相同\n        const x1 = Math.cos(((18 + 72 * 0) / 180) * Math.PI) * outerR;\n        const y1 = Math.sin(((18 + 72 * 0) / 180) * Math.PI) * outerR;\n\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: x1,\n            y: -y1,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n        });\n      }\n\n      if (top) {\n        // up down left right 四个方向的坐标均不相同\n        const x1 = Math.cos(((18 + 72 * 1) / 180) * Math.PI) * outerR;\n        const y1 = Math.sin(((18 + 72 * 1) / 180) * Math.PI) * outerR;\n\n        // top circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: x1,\n            y: -y1,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n        });\n      }\n\n      if (left) {\n        // up down left right 四个方向的坐标均不相同\n        const x1 = Math.cos(((18 + 72 * 2) / 180) * Math.PI) * outerR;\n        const y1 = Math.sin(((18 + 72 * 2) / 180) * Math.PI) * outerR;\n\n        // left circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: x1,\n            y: -y1,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n        });\n      }\n\n      if (leftBottom) {\n        // up down left right 四个方向的坐标均不相同\n        const x1 = Math.cos(((18 + 72 * 3) / 180) * Math.PI) * outerR;\n        const y1 = Math.sin(((18 + 72 * 3) / 180) * Math.PI) * outerR;\n\n        // left bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: x1,\n            y: -y1,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-left-bottom\",\n          name: \"link-point-left-bottom\",\n        });\n      }\n\n      if (rightBottom) {\n        // up down left right 四个方向的坐标均不相同\n        const x1 = Math.cos(((18 + 72 * 4) / 180) * Math.PI) * outerR;\n        const y1 = Math.sin(((18 + 72 * 4) / 180) * Math.PI) * outerR;\n\n        // left bottom circle\n        group.addShape(\"circle\", {\n          attrs: {\n            ...markStyle,\n            x: x1,\n            y: -y1,\n            r: markSize / 2 || markR || 5,\n          },\n          className: \"link-point-right-bottom\",\n          name: \"link-point-right-bottom\",\n        });\n      }\n    },\n    getPath(cfg: NodeConfig) {\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const outerR = size[0];\n      const defaultInnerR = (outerR * 3) / 8;\n      const innerR = cfg.innerR || defaultInnerR;\n      const path = [];\n      for (let i = 0; i < 5; i++) {\n        const x1 = Math.cos(((18 + 72 * i) / 180) * Math.PI) * outerR;\n        const y1 = Math.sin(((18 + 72 * i) / 180) * Math.PI) * outerR;\n        const x2 = Math.cos(((54 + 72 * i) / 180) * Math.PI) * innerR;\n        const y2 = Math.sin(((54 + 72 * i) / 180) * Math.PI) * innerR;\n\n        if (i === 0) {\n          path.push([\"M\", x1, -y1]);\n        } else {\n          path.push([\"L\", x1, -y1]);\n        }\n        path.push([\"L\", x2, -y2]);\n      }\n\n      path.push([\"Z\"]);\n\n      return path;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig): ShapeStyle {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖原来默认的 stroke 属性。但 cfg 中但 stroke 属性优先级更高\n      const style = mix({}, defaultStyle, strokeStyle);\n      const path = (this as any).getPath(cfg);\n      const styles = { path, ...style };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n      const { style: defaultStyle } = this.getOptions({}) as NodeConfig;\n      const path = (this as any).getPath(cfg);\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        path,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      let style = mix({}, defaultStyle, keyShape.attr(), strokeStyle);\n      style = mix(style, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, true);\n      (this as any).updateLinkPoints(cfg, group);\n    },\n\n    /**\n     * 更新linkPoints\n     * @param {Object} cfg 节点数据配置项\n     * @param {Group} group Item所在的group\n     */\n    updateLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints: defaultLinkPoints } = this.getOptions(\n        {},\n      ) as NodeConfig;\n      const markLeft = group.find(\n        (element) => element.get(\"className\") === \"link-point-left\",\n      );\n      const markRight = group.find(\n        (element) => element.get(\"className\") === \"link-point-right\",\n      );\n      const markTop = group.find(\n        (element) => element.get(\"className\") === \"link-point-top\",\n      );\n      const markLeftBottom = group.find(\n        (element) => element.get(\"className\") === \"link-point-left-bottom\",\n      );\n      const markRightBottom = group.find(\n        (element) => element.get(\"className\") === \"link-point-right-bottom\",\n      );\n\n      let currentLinkPoints = defaultLinkPoints;\n      const existLinkPoint =\n        markLeft || markRight || markTop || markLeftBottom || markRightBottom;\n      if (existLinkPoint) {\n        currentLinkPoints = existLinkPoint.attr();\n      }\n\n      const linkPoints = mix({}, currentLinkPoints, cfg.linkPoints);\n\n      const {\n        fill: markFill,\n        stroke: markStroke,\n        lineWidth: borderWidth,\n      } = linkPoints;\n      let markSize = linkPoints.size / 2;\n      if (!markSize) markSize = linkPoints.r;\n      const { left, right, top, leftBottom, rightBottom } = cfg.linkPoints\n        ? cfg.linkPoints\n        : {\n            left: undefined,\n            right: undefined,\n            top: undefined,\n            leftBottom: undefined,\n            rightBottom: undefined,\n          };\n\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const outerR = size[0];\n      const styles = {\n        r: markSize,\n        fill: markFill,\n        stroke: markStroke,\n        lineWidth: borderWidth,\n      };\n\n      let x = Math.cos(((18 + 72 * 0) / 180) * Math.PI) * outerR;\n      let y = Math.sin(((18 + 72 * 0) / 180) * Math.PI) * outerR;\n      if (markRight) {\n        if (!right && right !== undefined) {\n          markRight.remove();\n        } else {\n          markRight.attr({\n            ...styles,\n            x,\n            y: -y,\n          });\n        }\n      } else if (right) {\n        group.addShape(\"circle\", {\n          attrs: {\n            ...styles,\n            x,\n            y: -y,\n          },\n          className: \"link-point-right\",\n          name: \"link-point-right\",\n          isAnchorPoint: true,\n        });\n      }\n\n      x = Math.cos(((18 + 72 * 1) / 180) * Math.PI) * outerR;\n      y = Math.sin(((18 + 72 * 1) / 180) * Math.PI) * outerR;\n      if (markTop) {\n        if (!top && top !== undefined) {\n          markTop.remove();\n        } else {\n          markTop.attr({\n            ...styles,\n            x,\n            y: -y,\n          });\n        }\n      } else if (top) {\n        group.addShape(\"circle\", {\n          attrs: {\n            ...styles,\n            x,\n            y: -y,\n          },\n          className: \"link-point-top\",\n          name: \"link-point-top\",\n          isAnchorPoint: true,\n        });\n      }\n\n      x = Math.cos(((18 + 72 * 2) / 180) * Math.PI) * outerR;\n      y = Math.sin(((18 + 72 * 2) / 180) * Math.PI) * outerR;\n      if (markLeft) {\n        if (!left && left !== undefined) {\n          markLeft.remove();\n        } else {\n          markLeft.attr({\n            ...styles,\n            x,\n            y: -y,\n          });\n        }\n      } else if (left) {\n        group.addShape(\"circle\", {\n          attrs: {\n            ...styles,\n            x,\n            y: -y,\n          },\n          className: \"link-point-left\",\n          name: \"link-point-left\",\n          isAnchorPoint: true,\n        });\n      }\n\n      x = Math.cos(((18 + 72 * 3) / 180) * Math.PI) * outerR;\n      y = Math.sin(((18 + 72 * 3) / 180) * Math.PI) * outerR;\n      if (markLeftBottom) {\n        if (!leftBottom && leftBottom !== undefined) {\n          markLeftBottom.remove();\n        } else {\n          markLeftBottom.attr({\n            ...styles,\n            x,\n            y: -y,\n          });\n        }\n      } else if (leftBottom) {\n        group.addShape(\"circle\", {\n          attrs: {\n            ...styles,\n            x,\n            y: -y,\n          },\n          className: \"link-point-left-bottom\",\n          name: \"link-point-left-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n\n      x = Math.cos(((18 + 72 * 4) / 180) * Math.PI) * outerR;\n      y = Math.sin(((18 + 72 * 4) / 180) * Math.PI) * outerR;\n      if (markRightBottom) {\n        if (!rightBottom && rightBottom !== undefined) {\n          markLeftBottom.remove();\n        } else {\n          markRightBottom.attr({\n            ...styles,\n            x,\n            y: -y,\n          });\n        }\n      } else if (rightBottom) {\n        group.addShape(\"circle\", {\n          attrs: {\n            ...styles,\n            x,\n            y: -y,\n          },\n          className: \"link-point-right-bottom\",\n          name: \"link-point-right-bottom\",\n          isAnchorPoint: true,\n        });\n      }\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/src/nodes/triangle.ts",
    "content": "import { IGroup, IShape } from \"@antv/g-base\";\nimport {\n  registerNode,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  ShapeOptions,\n  BaseGlobal as Global,\n  ModelConfig,\n} from \"@antv/f6-core\";\n\nimport { mix } from \"@antv/util\";\n\n// 三角形\nregisterNode(\n  \"triangle\",\n  {\n    // 自定义节点时的配置\n    options: {\n      size: 40,\n      direction: \"up\",\n      style: {\n        stroke: Global.defaultNode.style.stroke,\n        fill: Global.defaultNode.style.fill,\n        lineWidth: Global.defaultNode.style.lineWidth,\n      },\n      labelCfg: {\n        style: {\n          fill: Global.nodeLabel.style.fill,\n          fontSize: Global.nodeLabel.style.fontSize,\n        },\n        offset: 15,\n      },\n      // 节点上左右上下四个方向上的链接circle配置\n      linkPoints: {\n        top: false,\n        right: false,\n        bottom: false,\n        left: false,\n        // circle的大小\n        size: Global.defaultNode.linkPoints.size,\n        lineWidth: Global.defaultNode.linkPoints.lineWidth,\n        fill: Global.defaultNode.linkPoints.fill,\n        stroke: Global.defaultNode.linkPoints.stroke,\n      },\n      // 节点中icon配置\n      icon: {\n        // 是否显示icon，值为 false 则不渲染icon\n        show: false,\n        // icon的地址，字符串类型\n        img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n        width: 20,\n        height: 20,\n        offset: 6,\n      },\n      stateStyles: {\n        ...Global.nodeStateStyles,\n      },\n    },\n    shapeType: \"triangle\",\n    // 文本位置\n    labelPosition: \"bottom\",\n    drawShape(cfg: NodeConfig, group: IGroup): IShape {\n      const { icon = {}, direction: defaultDirection } = this.getOptions(\n        cfg,\n      ) as NodeConfig;\n      const style = this.getShapeStyle!(cfg);\n      const direction = cfg.direction || defaultDirection;\n\n      const keyShape = group.addShape(\"path\", {\n        attrs: style,\n        className: `${this.type}-keyShape`,\n        name: `${this.type}-keyShape`,\n        draggable: true,\n      });\n\n      const { width: w, height: h, show, offset, text } = icon;\n      if (show) {\n        if (text) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              fontSize: 12,\n              fill: \"#000\",\n              stroke: \"#000\",\n              textBaseline: \"middle\",\n              textAlign: \"center\",\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        } else {\n          let iconW = -w! / 2;\n          let iconH = -h! / 2;\n          if (direction === \"up\" || direction === \"down\") {\n            iconH += offset;\n          }\n          if (direction === \"left\" || direction === \"right\") {\n            iconW += offset;\n          }\n          group.addShape(\"image\", {\n            attrs: {\n              x: iconW,\n              y: iconH,\n              ...icon,\n            },\n            className: `${this.type}-icon`,\n            name: `${this.type}-icon`,\n            draggable: true,\n          });\n        }\n      }\n\n      (this as any).drawLinkPoints(cfg, group);\n\n      return keyShape;\n    },\n    /**\n     * 绘制节点上的LinkPoints\n     * @param {Object} cfg data数据配置项\n     * @param {Group} group Group实例\n     */\n    drawLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints = {}, direction: defaultDirection } = this.getOptions(\n        cfg,\n      ) as NodeConfig;\n\n      const direction = cfg.direction || defaultDirection;\n\n      const {\n        top,\n        left,\n        right,\n        bottom,\n        size: markSize,\n        r: markR,\n        ...markStyle\n      } = linkPoints;\n\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const len = size[0];\n\n      if (left) {\n        // up down left right 四个方向的坐标均不相同\n        let leftPos = null;\n        const diffY = len * Math.sin((1 / 3) * Math.PI);\n        const r = len * Math.sin((1 / 3) * Math.PI);\n        if (direction === \"up\") {\n          leftPos = [-r, diffY];\n        } else if (direction === \"down\") {\n          leftPos = [-r, -diffY];\n        } else if (direction === \"left\") {\n          leftPos = [-r, r - diffY];\n        }\n\n        if (leftPos) {\n          // left circle\n          group.addShape(\"circle\", {\n            attrs: {\n              ...markStyle,\n              x: leftPos[0],\n              y: leftPos[1],\n              r: markSize / 2 || markR || 5,\n            },\n            className: \"link-point-left\",\n            name: \"link-point-left\",\n          });\n        }\n      }\n\n      if (right) {\n        // right circle\n        // up down left right 四个方向的坐标均不相同\n        let rightPos = null;\n        const diffY = len * Math.sin((1 / 3) * Math.PI);\n        const r = len * Math.sin((1 / 3) * Math.PI);\n        if (direction === \"up\") {\n          rightPos = [r, diffY];\n        } else if (direction === \"down\") {\n          rightPos = [r, -diffY];\n        } else if (direction === \"right\") {\n          rightPos = [r, r - diffY];\n        }\n\n        if (rightPos) {\n          group.addShape(\"circle\", {\n            attrs: {\n              ...markStyle,\n              x: rightPos[0],\n              y: rightPos[1],\n              r: markSize / 2 || markR || 5,\n            },\n            className: \"link-point-right\",\n            name: \"link-point-right\",\n          });\n        }\n      }\n\n      if (top) {\n        // up down left right 四个方向的坐标均不相同\n        let topPos = null;\n        const diffY = len * Math.sin((1 / 3) * Math.PI);\n        const r = len * Math.sin((1 / 3) * Math.PI);\n        if (direction === \"up\") {\n          topPos = [r - diffY, -diffY];\n        } else if (direction === \"left\") {\n          topPos = [r, -diffY];\n        } else if (direction === \"right\") {\n          topPos = [-r, -diffY];\n        }\n\n        if (topPos) {\n          // top circle\n          group.addShape(\"circle\", {\n            attrs: {\n              ...markStyle,\n              x: topPos[0],\n              y: topPos[1],\n              r: markSize / 2 || markR || 5,\n            },\n            className: \"link-point-top\",\n            name: \"link-point-top\",\n          });\n        }\n      }\n\n      if (bottom) {\n        // up down left right 四个方向的坐标均不相同\n        let bottomPos = null;\n        const diffY = len * Math.sin((1 / 3) * Math.PI);\n        const r = len * Math.sin((1 / 3) * Math.PI);\n        if (direction === \"down\") {\n          bottomPos = [-r + diffY, diffY];\n        } else if (direction === \"left\") {\n          bottomPos = [r, diffY];\n        } else if (direction === \"right\") {\n          bottomPos = [-r, diffY];\n        }\n\n        if (bottomPos) {\n          // bottom circle\n          group.addShape(\"circle\", {\n            attrs: {\n              ...markStyle,\n              x: bottomPos[0],\n              y: bottomPos[1],\n              r: markSize / 2 || markR || 5,\n            },\n            className: \"link-point-bottom\",\n            name: \"link-point-bottom\",\n          });\n        }\n      }\n    },\n    getPath(cfg: ModelConfig) {\n      const { direction: defaultDirection } = this.getOptions(\n        cfg,\n      ) as NodeConfig;\n\n      const direction = cfg.direction || defaultDirection;\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const len = size[0];\n\n      const diffY = len * Math.sin((1 / 3) * Math.PI);\n      const r = len * Math.sin((1 / 3) * Math.PI);\n      let path = [\n        [\"M\", -r, diffY],\n        [\"L\", 0, -diffY],\n        [\"L\", r, diffY],\n        [\"Z\"], // 封闭\n      ];\n\n      if (direction === \"down\") {\n        path = [\n          [\"M\", -r, -diffY],\n          [\"L\", r, -diffY],\n          [\"L\", 0, diffY],\n          [\"Z\"], // 封闭\n        ];\n      } else if (direction === \"left\") {\n        path = [\n          [\"M\", -r, r - diffY],\n          [\"L\", r, -r],\n          [\"L\", r, r],\n          [\"Z\"], // 封闭\n        ];\n      } else if (direction === \"right\") {\n        path = [\n          [\"M\", r, r - diffY],\n          [\"L\", -r, r],\n          [\"L\", -r, -r],\n          [\"Z\"], // 封闭\n        ];\n      }\n      return path;\n    },\n    /**\n     * 获取节点的样式，供基于该节点自定义时使用\n     * @param {Object} cfg 节点数据模型\n     * @return {Object} 节点的样式\n     */\n    getShapeStyle(cfg: NodeConfig) {\n      const { style: defaultStyle } = this.getOptions(cfg) as NodeConfig;\n      const strokeStyle: ShapeStyle = {\n        stroke: cfg.color,\n      };\n      // 如果设置了color，则覆盖默认的stroke属性\n      const style = mix({}, defaultStyle, strokeStyle);\n      const path = (this as any).getPath(cfg);\n      const styles = { path, ...style };\n      return styles;\n    },\n    update(cfg: NodeConfig, item: Item) {\n      const group = item.getContainer();\n      // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n      const { style: defaultStyle } = this.getOptions({}) as NodeConfig;\n      const path = (this as any).getPath(cfg);\n      // 下面这些属性需要覆盖默认样式与目前样式，但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n      const strokeStyle = {\n        stroke: cfg.color,\n        path,\n      };\n      // 与 getShapeStyle 不同在于，update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性，保留当前的配置。\n      const keyShape = item.get(\"keyShape\");\n      let style = mix({}, defaultStyle, keyShape.attr(), strokeStyle);\n      style = mix(style, cfg.style);\n\n      (this as any).updateShape(cfg, item, style, true);\n      (this as any).updateLinkPoints(cfg, group);\n    },\n    /**\n     * 更新linkPoints\n     * @param {Object} cfg 节点数据配置项\n     * @param {Group} group Item所在的group\n     */\n    updateLinkPoints(cfg: NodeConfig, group: IGroup) {\n      const { linkPoints: defaultLinkPoints, direction: defaultDirection } =\n        this.getOptions({}) as NodeConfig;\n\n      const direction = cfg.direction || defaultDirection;\n\n      const markLeft = group.find(\n        (element) => element.get(\"className\") === \"link-point-left\",\n      );\n      const markRight = group.find(\n        (element) => element.get(\"className\") === \"link-point-right\",\n      );\n      const markTop = group.find(\n        (element) => element.get(\"className\") === \"link-point-top\",\n      );\n      const markBottom = group.find(\n        (element) => element.get(\"className\") === \"link-point-bottom\",\n      );\n\n      let currentLinkPoints = defaultLinkPoints;\n      const existLinkPoint = markLeft || markRight || markTop || markBottom;\n      if (existLinkPoint) {\n        currentLinkPoints = existLinkPoint.attr();\n      }\n\n      const linkPoints = mix({}, currentLinkPoints, cfg.linkPoints);\n\n      const {\n        fill: markFill,\n        stroke: markStroke,\n        lineWidth: borderWidth,\n      } = linkPoints;\n      let markSize = linkPoints.size / 2;\n      if (!markSize) markSize = linkPoints.r;\n      const { left, right, top, bottom } = cfg.linkPoints\n        ? cfg.linkPoints\n        : {\n            left: undefined,\n            right: undefined,\n            top: undefined,\n            bottom: undefined,\n          };\n\n      const size = (this as ShapeOptions).getSize!(cfg);\n      const len = size[0];\n      const styles = {\n        r: markSize,\n        fill: markFill,\n        stroke: markStroke,\n        lineWidth: borderWidth,\n      };\n\n      let leftPos = null;\n      const diffY = len * Math.sin((1 / 3) * Math.PI);\n      const r = len * Math.sin((1 / 3) * Math.PI);\n      if (direction === \"up\") {\n        leftPos = [-r, diffY];\n      } else if (direction === \"down\") {\n        leftPos = [-r, -diffY];\n      } else if (direction === \"left\") {\n        leftPos = [-r, r - diffY];\n      }\n      if (leftPos) {\n        if (markLeft) {\n          if (!left && left !== undefined) {\n            markLeft.remove();\n          } else {\n            markLeft.attr({\n              ...styles,\n              x: leftPos[0],\n              y: leftPos[1],\n            });\n          }\n        } else if (left) {\n          group.addShape(\"circle\", {\n            attrs: {\n              ...styles,\n              x: leftPos[0],\n              y: leftPos[1],\n            },\n            className: \"link-point-left\",\n            name: \"link-point-left\",\n            isAnchorPoint: true,\n          });\n        }\n      }\n\n      let rightPos = null;\n      if (direction === \"up\") {\n        rightPos = [r, diffY];\n      } else if (direction === \"down\") {\n        rightPos = [r, -diffY];\n      } else if (direction === \"right\") {\n        rightPos = [r, r - diffY];\n      }\n      if (rightPos) {\n        if (markRight) {\n          if (!right && right !== undefined) {\n            markRight.remove();\n          } else {\n            markRight.attr({\n              ...styles,\n              x: rightPos[0],\n              y: rightPos[1],\n            });\n          }\n        } else if (right) {\n          group.addShape(\"circle\", {\n            attrs: {\n              ...styles,\n              x: rightPos[0],\n              y: rightPos[1],\n            },\n            className: \"link-point-right\",\n            name: \"link-point-right\",\n            isAnchorPoint: true,\n          });\n        }\n      }\n\n      let topPos = null;\n      if (direction === \"up\") {\n        topPos = [r - diffY, -diffY];\n      } else if (direction === \"left\") {\n        topPos = [r, -diffY];\n      } else if (direction === \"right\") {\n        topPos = [-r, -diffY];\n      }\n      if (topPos) {\n        if (markTop) {\n          if (!top && top !== undefined) {\n            markTop.remove();\n          } else {\n            // top circle\n            markTop.attr({\n              ...styles,\n              x: topPos[0],\n              y: topPos[1],\n            });\n          }\n        } else if (top) {\n          group.addShape(\"circle\", {\n            attrs: {\n              ...styles,\n              x: topPos[0],\n              y: topPos[1],\n            },\n            className: \"link-point-top\",\n            name: \"link-point-top\",\n            isAnchorPoint: true,\n          });\n        }\n      }\n\n      let bottomPos = null;\n      if (direction === \"down\") {\n        bottomPos = [-r + diffY, diffY];\n      } else if (direction === \"left\") {\n        bottomPos = [r, diffY];\n      } else if (direction === \"right\") {\n        bottomPos = [-r, diffY];\n      }\n      if (bottomPos) {\n        if (markBottom) {\n          if (!bottom && bottom !== undefined) {\n            markBottom.remove();\n          } else {\n            markBottom.attr({\n              ...styles,\n              x: bottomPos[0],\n              y: bottomPos[1],\n            });\n          }\n        } else if (bottom) {\n          group.addShape(\"circle\", {\n            attrs: {\n              ...styles,\n              x: bottomPos[0],\n              y: bottomPos[1],\n            },\n            className: \"link-point-bottom\",\n            name: \"link-point-bottom\",\n            isAnchorPoint: true,\n          });\n        }\n      }\n    },\n  },\n  \"single-node\",\n);\n"
  },
  {
    "path": "packages/element/tests/unit/issues-spec.ts",
    "content": "import G6 from \"@antv/g6\";\n\nconst div = document.createElement(\"div\");\ndiv.id = \"container\";\ndocument.body.appendChild(div);\n\ndescribe(\"edge click state\", () => {\n  it(\"edge \", () => {\n    G6.registerBehavior(\"active-edge\", {\n      getEvents() {\n        return {\n          \"edge:click\": \"onEdgeSelect\",\n          \"edge:mouseenter\": \"onEdgeHover\",\n          \"edge:mouseleave\": \"onEdgeLeave\",\n          \"canvas:mousedown\": \"clearSelectedEdge\",\n        };\n      },\n      onEdgeSelect(evt) {\n        const item = evt.item;\n        if (item.hasState(\"select\")) {\n          this.graph.setItemState(item, \"select\", false);\n          return;\n        }\n        this.graph.setItemState(item, \"select\", true);\n      },\n      onEdgeHover(evt) {\n        const item = evt.item;\n        if (item.hasState(\"select\")) {\n          return false;\n        }\n        this.graph.setItemState(item, \"hover\", true);\n      },\n      onEdgeLeave(evt) {\n        const item = evt.item;\n        this.graph.setItemState(item, \"hover\", false);\n      },\n      clearSelectedEdge(evt) {\n        const edges = this.graph.findAllByState(\"edge\", \"select\");\n        edges.forEach((edge) => {\n          this.graph.setItemState(edge, \"select\", false);\n        });\n      },\n    });\n\n    const graph = new G6.Graph({\n      container: \"container\",\n      width: 500,\n      height: 500,\n      defaultEdge: {\n        type: \"line\",\n        style: {\n          stroke: \"#24A0FF\",\n          radius: 4,\n          offset: 15,\n          lineWidth: 2,\n          lineAppendWidth: 4,\n          cursor: \"pointer\",\n          endArrow: {\n            path: \"M 0,0 L 7,3 L 5,0 L 7,-3 Z\",\n            fill: \"#24A0FF\",\n          },\n        },\n      },\n      edgeStateStyles: {\n        hover: {\n          stroke: \"#0ff\",\n          endArrow: {\n            fill: \"#FF7868\",\n          },\n        },\n        select: {\n          stroke: \"#FF7868\",\n          endArrow: {\n            fill: \"#FF7868\",\n          },\n        },\n      },\n      modes: {\n        default: [\"drag-node\", \"active-edge\"],\n      },\n    });\n\n    graph.read({\n      nodes: [\n        { id: \"1\", x: 100, y: 100 },\n        { id: \"2\", x: 100, y: 220 },\n      ],\n      edges: [{ source: \"1\", target: \"2\" }],\n    });\n  });\n});\n\ndescribe(\"dragenter dragleave\", () => {\n  const data = {\n    nodes: [\n      {\n        id: \"node1\",\n        x: 100,\n        y: 100,\n      },\n      {\n        id: \"node2\",\n        x: 200,\n        y: 100,\n      },\n    ],\n    edges: [],\n  };\n  const graph = new G6.Graph({\n    container: \"container\",\n    width: 500,\n    height: 500,\n    modes: {\n      default: [\"drag-node\"],\n    },\n  });\n  graph.data(data);\n  graph.render();\n  it(\"dragenter\", () => {\n    graph.on(\"node:dragenter\", (e) => {\n      // console.log('dragenter');\n    });\n    graph.on(\"node:dragleave\", (e) => {\n      // console.log('dragleave');\n    });\n    graph.on(\"node:mouseenter\", (e) => {\n      // console.log('mouseenter');\n    });\n    graph.on(\"node:mouseleave\", (e) => {\n      // console.log('mouseleave');\n    });\n    graph.on(\"node:dragover\", (e) => {\n      // console.log('dragover');\n    });\n  });\n  graph.destroy();\n});\n\n// closes: #1026\ndescribe(\"empty data array + fitview\", () => {\n  const data = {\n    nodes: [],\n    edges: [],\n  };\n  const graph = new G6.Graph({\n    container: \"container\",\n    width: 500,\n    height: 500,\n    fitView: true,\n  });\n  graph.data(data);\n  it(\"empty data array + fitview\", () => {\n    graph.render();\n    graph.destroy();\n  });\n});\n\n// closes: #1301\ndescribe(\"change data with rect node\", () => {\n  const data = {\n    nodes: [\n      {\n        name: \"source\",\n        id: \"source\",\n        label: \"source\",\n        type: \"rect\",\n        x: 100,\n        y: 100,\n        //size: [60, 60],\n        style: {\n          width: 60,\n          height: 20,\n        },\n      },\n    ],\n    edges: [],\n  };\n  const graph = new G6.Graph({\n    container: \"container\",\n    width: 500,\n    height: 500,\n  });\n  graph.data(data);\n  it(\"change data\", () => {\n    graph.render();\n    graph.changeData(data);\n    graph.destroy();\n  });\n});\n\ndescribe(\"cubic with layout\", () => {\n  const data = {\n    nodes: [\n      {\n        id: \"1\",\n        label: \"冲压\",\n        degree: 1,\n        // x: 0,\n        // y: 0\n        // x: 100,\n        // y: 300\n      },\n      {\n        id: \"2\",\n        label: \"电镀\",\n        degree: 2,\n        // x: 0,\n        // y: 0\n        // x: 600,\n        // y: 300\n      },\n    ],\n    edges: [\n      {\n        source: \"1\",\n        target: \"2\",\n      },\n    ],\n  };\n  const dashArray = [\n    [0, 1],\n    [0, 2],\n    [1, 2],\n    [0, 1, 1, 2],\n    [0, 2, 1, 2],\n    [1, 2, 1, 2],\n    [2, 2, 1, 2],\n    [3, 2, 1, 2],\n    [4, 2, 1, 2],\n  ];\n\n  const lineDash = [4, 2, 1, 2];\n  const interval = 9; // lineDash 的和\n  G6.registerEdge(\n    \"line-dash\",\n    {\n      afterDraw(cfg, group) {\n        // 获得该边的第一个图形，这里是边的 path\n        const shape = group.get(\"children\")[0];\n        // 获得边的 path 的总长度\n        const length = shape.getTotalLength();\n\n        let totalArray = [];\n        // 计算出整条线的 lineDash\n        for (let i = 0; i < length; i += interval) {\n          totalArray = totalArray.concat(lineDash);\n        }\n\n        let index = 0;\n        // 边 path 图形的动画\n        shape.animate(\n          (ratio) => {\n            const cfg = {\n              lineDash: dashArray[index].concat(totalArray),\n            };\n            // 每次移动 1\n            index = (index + 1) % interval;\n            // 返回需要修改的参数集，这里只修改了 lineDash\n            return cfg;\n          },\n          {\n            repeat: true,\n            duration: 3000,\n          },\n        ); // 一次动画的时长为 3000\n      },\n    },\n    \"cubic\",\n  ); // 该自定义边继承了内置三阶贝塞尔曲线边 cubic\n  const graph = new G6.Graph({\n    container: \"container\",\n    width: 500,\n    height: 500,\n    //animate: true,\n    defaultEdge: {\n      size: 2,\n      type: \"line-dash\", //'line',//'line-dash',//\n      color: \"rgb(150, 150, 150)\",\n    },\n    layout: {\n      type: \"dagre\",\n      rankdir: \"LR\",\n      nodesep: 30,\n      //controlPoints: false\n      // ranksep: 100\n    },\n  });\n  it(\"change data\", () => {\n    graph.data(data);\n    graph.render();\n    graph.destroy();\n  });\n});\n\ndescribe(\"changdata states\", () => {\n  it(\"changeData\", () => {\n    const data = {\n      nodes: [\n        {\n          id: \"0\",\n          label: \"0\",\n        },\n        {\n          id: \"1\",\n          label: \"1\",\n        },\n        {\n          id: \"2\",\n          label: \"2\",\n        },\n        {\n          id: \"3\",\n          label: \"3\",\n        },\n        {\n          id: \"4\",\n          label: \"4\",\n        },\n        {\n          id: \"5\",\n          label: \"5\",\n        },\n        {\n          id: \"6\",\n          label: \"6\",\n        },\n        {\n          id: \"7\",\n          label: \"7\",\n        },\n        {\n          id: \"8\",\n          label: \"8\",\n        },\n        {\n          id: \"9\",\n          label: \"9\",\n        },\n        {\n          id: \"10\",\n          label: \"10\",\n        },\n        {\n          id: \"11\",\n          label: \"11\",\n        },\n        {\n          id: \"12\",\n          label: \"12\",\n        },\n        {\n          id: \"13\",\n          label: \"13\",\n        },\n        {\n          id: \"14\",\n          label: \"14\",\n        },\n        {\n          id: \"15\",\n          label: \"15\",\n        },\n        {\n          id: \"16\",\n          label: \"16\",\n        },\n        {\n          id: \"17\",\n          label: \"17\",\n        },\n        {\n          id: \"18\",\n          label: \"18\",\n        },\n        {\n          id: \"19\",\n          label: \"19\",\n        },\n        {\n          id: \"20\",\n          label: \"20\",\n        },\n        {\n          id: \"21\",\n          label: \"21\",\n        },\n        {\n          id: \"22\",\n          label: \"22\",\n        },\n        {\n          id: \"23\",\n          label: \"23\",\n        },\n        {\n          id: \"24\",\n          label: \"24\",\n        },\n        {\n          id: \"25\",\n          label: \"25\",\n        },\n        {\n          id: \"26\",\n          label: \"26\",\n        },\n        {\n          id: \"27\",\n          label: \"27\",\n        },\n        {\n          id: \"28\",\n          label: \"28\",\n        },\n        {\n          id: \"29\",\n          label: \"29\",\n        },\n        {\n          id: \"30\",\n          label: \"30\",\n        },\n        {\n          id: \"31\",\n          label: \"31\",\n        },\n        {\n          id: \"32\",\n          label: \"32\",\n        },\n        {\n          id: \"33\",\n          label: \"33\",\n        },\n      ],\n      edges: [\n        {\n          source: \"0\",\n          target: \"1\",\n        },\n        {\n          source: \"0\",\n          target: \"2\",\n        },\n        {\n          source: \"0\",\n          target: \"3\",\n        },\n        {\n          source: \"0\",\n          target: \"4\",\n        },\n        {\n          source: \"0\",\n          target: \"5\",\n        },\n        {\n          source: \"0\",\n          target: \"7\",\n        },\n        {\n          source: \"0\",\n          target: \"8\",\n        },\n        {\n          source: \"0\",\n          target: \"9\",\n        },\n        {\n          source: \"0\",\n          target: \"10\",\n        },\n        {\n          source: \"0\",\n          target: \"11\",\n        },\n        {\n          source: \"0\",\n          target: \"13\",\n        },\n        {\n          source: \"0\",\n          target: \"14\",\n        },\n        {\n          source: \"0\",\n          target: \"15\",\n        },\n        {\n          source: \"0\",\n          target: \"16\",\n        },\n        {\n          source: \"2\",\n          target: \"3\",\n        },\n        {\n          source: \"4\",\n          target: \"5\",\n        },\n        {\n          source: \"4\",\n          target: \"6\",\n        },\n        {\n          source: \"5\",\n          target: \"6\",\n        },\n        {\n          source: \"7\",\n          target: \"13\",\n        },\n        {\n          source: \"8\",\n          target: \"14\",\n        },\n        {\n          source: \"9\",\n          target: \"10\",\n        },\n        {\n          source: \"10\",\n          target: \"22\",\n        },\n        {\n          source: \"10\",\n          target: \"14\",\n        },\n        {\n          source: \"10\",\n          target: \"12\",\n        },\n        {\n          source: \"10\",\n          target: \"24\",\n        },\n        {\n          source: \"10\",\n          target: \"21\",\n        },\n        {\n          source: \"10\",\n          target: \"20\",\n        },\n        {\n          source: \"11\",\n          target: \"24\",\n        },\n        {\n          source: \"11\",\n          target: \"22\",\n        },\n        {\n          source: \"11\",\n          target: \"14\",\n        },\n        {\n          source: \"12\",\n          target: \"13\",\n        },\n        {\n          source: \"16\",\n          target: \"17\",\n        },\n        {\n          source: \"16\",\n          target: \"18\",\n        },\n        {\n          source: \"16\",\n          target: \"21\",\n        },\n        {\n          source: \"16\",\n          target: \"22\",\n        },\n        {\n          source: \"17\",\n          target: \"18\",\n        },\n        {\n          source: \"17\",\n          target: \"20\",\n        },\n        {\n          source: \"18\",\n          target: \"19\",\n        },\n        {\n          source: \"19\",\n          target: \"20\",\n        },\n        {\n          source: \"19\",\n          target: \"33\",\n        },\n        {\n          source: \"19\",\n          target: \"22\",\n        },\n        {\n          source: \"19\",\n          target: \"23\",\n        },\n        {\n          source: \"20\",\n          target: \"21\",\n        },\n        {\n          source: \"21\",\n          target: \"22\",\n        },\n        {\n          source: \"22\",\n          target: \"24\",\n        },\n        {\n          source: \"22\",\n          target: \"25\",\n        },\n        {\n          source: \"22\",\n          target: \"26\",\n        },\n        {\n          source: \"22\",\n          target: \"23\",\n        },\n        {\n          source: \"22\",\n          target: \"28\",\n        },\n        {\n          source: \"22\",\n          target: \"30\",\n        },\n        {\n          source: \"22\",\n          target: \"31\",\n        },\n        {\n          source: \"22\",\n          target: \"32\",\n        },\n        {\n          source: \"22\",\n          target: \"33\",\n        },\n        {\n          source: \"23\",\n          target: \"28\",\n        },\n        {\n          source: \"23\",\n          target: \"27\",\n        },\n        {\n          source: \"23\",\n          target: \"29\",\n        },\n        {\n          source: \"23\",\n          target: \"30\",\n        },\n        {\n          source: \"23\",\n          target: \"31\",\n        },\n        {\n          source: \"23\",\n          target: \"33\",\n        },\n        {\n          source: \"32\",\n          target: \"33\",\n        },\n      ],\n    };\n\n    const width = 500;\n    const height = 500;\n    const graph = new G6.Graph({\n      container: \"container\",\n      width,\n      height,\n      modes: {\n        default: [\"activate-relations\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n      },\n      nodeStateStyles: {\n        active: {\n          stroke: \"red\",\n        },\n      },\n      edgeStateStyles: {\n        active: {\n          stroke: \"#000\",\n          opacity: 1,\n        },\n        inactive: {\n          color: \"#969696\",\n          opacity: 0.5,\n        },\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n        style: {\n          lineWidth: 2,\n          fill: \"rgb(239, 244, 255)\",\n          stroke: \"rgb(95, 149, 255)\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"rgb(150, 150, 150)\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"rgb(150, 150, 150)\",\n          },\n        },\n      },\n    });\n    graph.data(data);\n    graph.render();\n\n    const node1 = graph.findById(\"1\");\n    graph.setItemState(node1, \"active\", true);\n    const edge1 = graph.getEdges()[0];\n    graph.setItemState(edge1, \"active\", true);\n\n    expect(graph.findAllByState(\"node\", \"active\").length).toBe(1);\n    expect(graph.findAllByState(\"edge\", \"active\").length).toBe(1);\n\n    graph.changeData(data);\n    expect(graph.findAllByState(\"node\", \"active\").length).toBe(0);\n    expect(graph.findAllByState(\"edge\", \"active\").length).toBe(0);\n\n    graph.destroy();\n  });\n});\n\ndescribe(\"defaultStyle states\", () => {\n  it(\"label\", () => {\n    const data = {\n      nodes: [\n        {\n          id: \"node1\",\n          label: \"node1\",\n          x: 100,\n          y: 100,\n        },\n      ],\n    };\n\n    const graph = new G6.Graph({\n      container: \"container\",\n      width: 500,\n      height: 500,\n      defaultEdge: {\n        color: \"rgb(150, 150, 150)\",\n        lineAppendWidth: 3,\n      },\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"rgb(95, 149, 255)\",\n        },\n      },\n      nodeStateStyles: {\n        hover: {\n          lineWidth: 5,\n          fillOpacity: 1,\n          \"text-shape\": {\n            fontSize: 20,\n            fill: \"#003a8c\",\n          },\n        },\n      },\n      edgeStateStyles: {\n        hover: {\n          lineWidth: 3,\n        },\n      },\n    });\n    graph.data(data);\n    graph.render();\n\n    graph.on(\"node:mouseenter\", function (evt) {\n      const node = evt.item;\n      const model = node.getModel();\n      model.oriLabel = model.label;\n      graph.setItemState(node, \"hover\", true);\n      graph.updateItem(node, {\n        label: \"hover 后 \" + model.id,\n        labelCfg: {\n          style: {\n            fill: \"blue\",\n          },\n        },\n      });\n    });\n\n    graph.on(\"node:mouseleave\", function (evt) {\n      const node = evt.item;\n      const model = node.getModel();\n\n      graph.setItemState(node, \"hover\", false);\n\n      graph.updateItem(node, {\n        label: model.oriLabel,\n        style: {\n          \"text-shape\": {\n            fill: \"red\",\n          },\n        },\n        labelCfg: {\n          style: {\n            fill: \"red\",\n          },\n        },\n      });\n    });\n\n    graph.on(\"edge:mouseenter\", function (evt) {\n      const edge = evt.item;\n      const model = edge.getModel();\n      model.oriLabel = model.label;\n      graph.setItemState(edge, \"hover\", true);\n      graph.updateItem(edge, {\n        label: \"hover 后\",\n        labelCfg: {\n          style: {\n            fill: \"#003a8c\",\n          },\n        },\n      });\n    });\n\n    graph.on(\"edge:mouseleave\", function (evt) {\n      const edge = evt.item;\n      graph.setItemState(edge, \"hover\", false);\n      graph.updateItem(edge, {\n        label: \"hover 前的边文本\",\n        labelCfg: {\n          style: {\n            fill: \"#555\",\n          },\n        },\n      });\n    });\n\n    // graph.destroy()\n  });\n});\n"
  },
  {
    "path": "packages/element/tests/unit/template-spec.ts",
    "content": "describe(\"template\", () => {\n  const el = document.createElement(\"div\");\n  el.id = \"test-div-id\";\n  el.innerHTML = \"hello g6\";\n  document.querySelector(\"body\").appendChild(el);\n\n  it(\"div content\", () => {\n    expect(document.querySelector(\"#test-div-id\").innerHTML).toBe(\"hello g6\");\n  });\n});\n"
  },
  {
    "path": "packages/element/vite.config.ts",
    "content": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport path from \"path\";\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: {\n      \"@\": path.resolve(__dirname, \"src\"),\n    },\n  },\n  build: {\n    lib: {\n      entry: path.resolve(__dirname, \"src/index.ts\"), // 入口文件\n      name: \"f6-element\", // UMD 构建时的全局变量名\n      fileName: (format) => `index.${format}.js`, // 输出文件名\n    },\n    rollupOptions: {\n      // 确保 external 包不会被打包到库中\n      external: [\"react\", \"react-dom\"],\n      output: [\n        {\n          // CommonJS\n          format: \"cjs\",\n          dir: \"dist/cjs\",\n        },\n        {\n          // ESM\n          format: \"es\",\n          dir: \"dist/esm\",\n        },\n        {\n          // UMD\n          format: \"umd\",\n          dir: \"dist/umd\",\n          name: \"f6-element\",\n          globals: {\n            react: \"React\",\n            \"react-dom\": \"ReactDOM\",\n          },\n        },\n      ],\n    },\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/app.acss",
    "content": ".container {\n  min-height: 100%;\n}\n\n.content {\n  width: 100%;\n}\n\n.tiny-button {\n  font-size: 28rpx;\n  padding: 0 0.7em;\n  line-height: 60rpx;\n  text-align: center;\n  border-radius: 4rpx;\n}\n"
  },
  {
    "path": "packages/examples-alipay/app.js",
    "content": "App({\n  globalData: {},\n  async onLaunch() {\n    console.log(\"app onLaunch\");\n    /**\n     * RPC 调用示例\n     */\n    my.call(\n      \"rpc\",\n      {\n        operationType: \"alipay.xx\",\n        requestData: [{}],\n        headers: {},\n      },\n      function (result) {\n        console.log(result);\n      },\n    );\n  },\n  onShow() {\n    console.log(\"app onShow\");\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/app.json",
    "content": "{\n  \"pages\": [\n    \"pages/index/index\",\n    \"pages/search/search\",\n    \"pages/tree-graph/compact-box/index\",\n    \"pages/tree-graph/tb-compact-box/index\",\n    \"pages/tree-graph/compact-box-left-align/index\",\n    \"pages/tree-graph/mind-map/index\",\n    \"pages/tree-graph/right-mind-map/index\",\n    \"pages/tree-graph/left-mind-map/index\",\n    \"pages/tree-graph/custom-side-mind-map/index\",\n    \"pages/tree-graph/file-system/index\",\n    \"pages/tree-graph/intend-align-top/index\",\n    \"pages/tree-graph/intended/index\",\n    \"pages/tree-graph/basic-dendrogram/index\",\n    \"pages/tree-graph/tb-dendrogram/index\",\n    \"pages/tree-graph/radial-dendrogram/index\",\n    \"pages/tree-graph/radial-compact-box/index\",\n    \"pages/tree-graph/custom-edge-tree/index\",\n    \"pages/tree-graph/tree-edge-label/index\",\n    \"pages/tree-graph/custom-tree/index\",\n    \"pages/general-graph/basic-force-directed/index\",\n    \"pages/general-graph/basic-FA2/index\",\n    \"pages/general-graph/force-directed-prevent-overlap/index\",\n    \"pages/general-graph/force-directed-force-clustering/index\",\n    \"pages/general-graph/force-directed-functional-params/index\",\n    \"pages/general-graph/basic-force-directed-drag-fix/index\",\n    \"pages/general-graph/force-directed-configuration-translate/index\",\n    \"pages/general-graph/force-bubbles/index\",\n    \"pages/general-graph/force-constrained-in-rect/index\",\n    \"pages/general-graph/basic-dagre/index\",\n    \"pages/general-graph/dagre-combo/index\",\n    \"pages/general-graph/dagre-UL/index\",\n    \"pages/general-graph/dagre/index\",\n    \"pages/general-graph/dagre-configuration-translate/index\",\n    \"pages/general-graph/fruchterman/index\",\n    \"pages/general-graph/fruchterman-clustering/index\",\n    \"pages/general-graph/fruchterman-configuration-translate/index\",\n    \"pages/general-graph/fruchterman-worker/index\",\n    \"pages/general-graph/basic-radial/index\",\n    \"pages/general-graph/prevent-overlap-radial/index\",\n    \"pages/general-graph/prevent-overlap-unstrict-radial/index\",\n    \"pages/general-graph/interact-radial/index\",\n    \"pages/general-graph/radial-configuration-translate/index\",\n    \"pages/general-graph/sort-radial/index\",\n    \"pages/general-graph/degree-circular/index\",\n    \"pages/general-graph/spiral-circular/index\",\n    \"pages/general-graph/basic-circular/index\",\n    \"pages/general-graph/division-circular/index\",\n    \"pages/general-graph/circular-configuration-translate/index\",\n    \"pages/general-graph/basic-grid/index\",\n    \"pages/general-graph/cluster-grid/index\",\n    \"pages/general-graph/basic-concentric/index\",\n    \"pages/general-graph/basic-MDS/index\",\n    \"pages/general-graph/basic-arc-diagram/index\",\n    \"pages/general-graph/circular-arc-diagram/index\",\n    \"pages/general-graph/basic-combo-force/index\",\n    \"pages/general-graph/layout-translate/index\",\n    \"pages/general-graph/subgraph-layout/index\",\n    \"pages/general-graph/data-change/index\",\n    \"pages/general-graph/custom-bi-graph/index\",\n    \"pages/general-graph/layout-timing/index\",\n    \"pages/elements/circle/index\",\n    \"pages/elements/donut/index\",\n    \"pages/elements/ellipse/index\",\n    \"pages/elements/rect/index\",\n    \"pages/elements/mode-rect/index\",\n    \"pages/elements/diamond/index\",\n    \"pages/elements/star/index\",\n    \"pages/elements/triangle/index\",\n    \"pages/elements/image/index\",\n    \"pages/elements/polyline1/index\",\n    \"pages/elements/polyline2/index\",\n    \"pages/elements/polyline3/index\",\n    \"pages/elements/cubic1/index\",\n    \"pages/elements/cubic2/index\",\n    \"pages/elements/arc/index\",\n    \"pages/elements/loop/index\",\n    \"pages/elements/circle-with-combo/index\",\n    \"pages/elements/rect-with-combo/index\",\n    \"pages/elements/built-in-arrows/index\",\n    \"pages/elements/custom-arrows/index\",\n    \"pages/elements/card/index\",\n    \"pages/elements/card-node/index\",\n    \"pages/elements/area-chart/index\",\n    \"pages/elements/stack-chart/index\",\n    \"pages/elements/line-chart/index\",\n    \"pages/elements/bar-chart/index\",\n    \"pages/elements/point-chart/index\",\n    \"pages/elements/pie-chart/index\",\n    \"pages/elements/list/index\",\n    \"pages/elements/extra-shape/index\",\n    \"pages/elements/custom-polyline/index\",\n    \"pages/elements/custom-polyline2/index\",\n    \"pages/elements/edge-mul-label/index\",\n    \"pages/elements/c-circle/index\",\n    \"pages/elements/c-rect/index\",\n    \"pages/elements/label-len/index\",\n    \"pages/elements/label-len1/index\",\n    \"pages/elements/node-bg/index\",\n    \"pages/elements/edge-bg/index\",\n    \"pages/elements/multi-edges/index\",\n    \"pages/interactive/highlight-dark/index\",\n    \"pages/interactive/drag-subtree/index\",\n    \"pages/interactive/collapse-slibing/index\",\n    \"pages/interactive/change-data/index\",\n    \"pages/interactive/add-child/index\",\n    \"pages/interactive/combo-circle/index\",\n    \"pages/interactive/combo-rect/index\",\n    \"pages/interactive/move-animate/index\",\n    \"pages/interactive/move/index\",\n    \"pages/interactive/partial-node/index\",\n    \"pages/interactive/set-mode/index\",\n    \"pages/interactive/canvas-two-fingers/index\",\n    \"pages/interactive/hide-item/index\",\n    \"pages/interactive/fix-item/index\",\n    \"pages/interactive/hull/index\",\n    \"pages/interactive/change-members/index\",\n    \"pages/animation/node-node/index\",\n    \"pages/animation/point-in-line/index\",\n    \"pages/animation/edge-edge/index\",\n    \"pages/animation/edge-line-growth/index\",\n    \"pages/animation/state-change-hover/index\",\n    \"pages/animation/change-position-default/index\",\n    \"pages/animation/custom-animate-position/index\",\n    \"pages/scene-case/knowledge-tree-graph/index\",\n    \"pages/scene-case/metro-lines/index\",\n    \"pages/scene-case/custom-flow/index\",\n    \"pages/scene-case/sankey/index\",\n    \"pages/plugins/tool-tip/index\",\n    \"pages/plugins/donut-transfer/index\",\n    \"pages/plugins/edge-filter/index\",\n    \"pages/plugins/fisheye/index\",\n    \"pages/plugins/timebar/index\",\n    \"pages/plugins/zoom-slider/index\",\n    \"pages/plugins/bundling/index\",\n    \"pages/plugins/menu/index\",\n    \"pages/plugins/snap-line/index\",\n    \"pages/plugins/mini-map/index\"\n  ],\n  \"window\": {\n    \"defaultTitle\": \"F6移动端DEMO\",\n    \"allowsBounceVertical\": \"NO\",\n    \"canPullDown\": \"NO\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/common/components/block-list/block-list.acss",
    "content": ".block-list-container {\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  background-color: #fff;\n}\n\n.block-list {\n  display: flex;\n  justify-content: start;\n  flex-wrap: wrap;\n  width: 100%;\n  padding-bottom: 20rpx;\n}\n\n.block-item {\n  height: 50rpx;\n  margin-right: 20rpx;\n  margin-bottom: 20rpx;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  color: #333;\n  font-size: 24rpx;\n  background-color: rgba(245, 245, 245, 0.71);\n  padding: 0 18rpx;\n}\n"
  },
  {
    "path": "packages/examples-alipay/common/components/block-list/block-list.axml",
    "content": "<view class=\"block-list-container {{className}}\">\n  <view class=\"block-list\">\n    <block a:for=\"{{listData}}\">\n      <navigator a:if=\"{{item.url}}\" url=\"{{item.url}}\">\n        <view class=\"block-item\" onTap=\"onItemTap\" data-name=\"{{item.name}}\">{{item.name}}</view>\n      </navigator>\n      <view a:else class=\"block-item\" onTap=\"onItemTap\" data-name=\"{{item.name}}\">{{item.name}}</view>\n    </block>\n  </view>\n</view>\n"
  },
  {
    "path": "packages/examples-alipay/common/components/block-list/block-list.js",
    "content": "Component({\n  methods: {\n    onItemTap(e) {\n      const { onItemTap } = this.props;\n      const { name } = e.target.dataset;\n      if (onItemTap) {\n        onItemTap({ name });\n      }\n    },\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/common/components/block-list/block-list.json",
    "content": "{\n  \"component\": true\n}\n"
  },
  {
    "path": "packages/examples-alipay/common/components/search/search.acss",
    "content": "page {\n  background-color: #fff;\n}\n\n.page {\n  padding: 0;\n}\n\n.search-bar {\n  position: sticky;\n  top: 0;\n  background-color: #fff;\n  z-index: 2;\n  padding-top: 14rpx;\n  overflow: hidden;\n}\n\n.am-search-input {\n  height: 35px;\n  line-height: 35px;\n}\n\n.am-search-synthetic {\n  height: 35px;\n  line-height: 35px;\n}\n\n.am-search-value {\n  height: 35px;\n}\n\n.am-search-clear {\n  height: 35px;\n  width: 35px;\n}\n\n.am-search-cancel {\n  color: #333;\n}\n\n.search-bar .am-search-input {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.search-container {\n  box-sizing: border-box;\n  padding: 20px 12px;\n}\n\n.history {\n  position: relative;\n  padding-left: 2px;\n  padding-bottom: 1px;\n  color: #333;\n  font-size: 36rpx;\n  font-weight: bold;\n}\n\n.history .clear {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  transform: translateY(-50%);\n  height: 40rpx;\n  width: 40rpx;\n  background-image: url('/image/clear.png');\n  background-size: 50%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n.history-list {\n  margin-top: 10px;\n}\n\n.hot {\n  padding-left: 2px;\n  padding-bottom: 2px;\n  color: #333;\n  font-size: 36rpx;\n  font-weight: bold;\n}\n\n.hot-list {\n  margin-top: 10px;\n}\n\n.search-results {\n  padding: 16px 12 0 0;\n}\n\n.component-name {\n  color: #333;\n  margin-right: 10rpx;\n}\n\n.thumb {\n  height: 60rpx;\n  width: 60rpx;\n  margin-right: 30rpx;\n}\n\n.component .am-list-line-bottom::after {\n  left: auto;\n  right: 0;\n  width: calc(100% - 80rpx);\n}\n\n.am-list-body::before {\n  display: none;\n}\n\n.am-list-body::after {\n  display: none;\n}\n\n.list-header {\n  height: 100rpx;\n  display: flex;\n  align-items: center;\n  background-color: #fff;\n  color: #333;\n  font-weight: bold;\n  font-size: 34rpx;\n}\n\n.am-list-header {\n  padding: 8px 16px 0;\n}\n\n.no-search-result {\n  height: 300px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n\n.no-search-result image {\n  width: 87rpx;\n  height: 87rpx;\n}\n\n.no-search-result text {\n  margin-top: 37rpx;\n  color: #999;\n  font-size: 28rpx;\n}\n.am-list-text-wrapper {\n  width: 100%;\n}\n"
  },
  {
    "path": "packages/examples-alipay/common/components/search/search.axml",
    "content": "<view class=\"page\">\n  <view class=\"search-bar\">\n    <search-bar\n      focus=\"{{true}}\"\n      value=\"{{value}}\"\n      placeholder=\"搜索你想要的组件和API\"\n      onInput=\"onInput\"\n      onCancel=\"onCancel\"\n      onClear=\"onClear\"\n      showCancelButton=\"{{false}}\" />\n  </view>\n  <view class=\"search-container\" a:if=\"{{componentSuggestions.length === 0 && apiSuggestions.length === 0}}\">\n    <view a:if=\"{{value.length === 0}}\">\n      <view a:if=\"{{ history.length > 0 }}\" style=\"border-bottom: 1rpx solid #F5F5F5; margin-bottom: 16px;\">\n        <view class=\"history\">历史<view class=\"clear\" onTap=\"clear\"></view></view>\n        <block-list listData=\"{{history}}\" class=\"history-list\" onItemTap=\"onItemTap\" />\n      </view>\n      <view>\n        <view class=\"hot\">热门</view>\n        <block-list listData=\"{{hot}}\" class=\"history-list\" />\n      </view>\n    </view>\n    <view class=\"no-search-result\" a:else>\n      <image src=\"/image/icon/no_search_result.png\" />\n      <text>未找到搜索结果</text>\n    </view>\n  </view>\n  <view class=\"search-results\" a:else>\n    <view a:if=\"{{componentSuggestions.length > 0}}\" class=\"component\">\n      <list>\n        <view slot=\"header\" class=\"list-header\">组件</view>\n        <block a:for=\"{{componentSuggestions}}\">\n          <list-item\n            arrow=\"{{true}}\"\n            multipleLine=\"{{false}}\"\n            key=\"items-{{item.name}}\"\n            last=\"{{index === componentSuggestions.length - 1}}\">\n            <view\n              onTap=\"onListItemTap\"\n              data-url=\"{{item.path}}\"\n              data-name=\"{{item.name}}\"\n              style=\"display: flex; align-items: center\">\n              <image src=\"{{item.thumb}}\" class=\"thumb\" />\n              <text class=\"component-name\">{{item.name}}</text>\n            </view>\n          </list-item>\n        </block>\n      </list>\n    </view>\n    <view a:if=\"{{apiSuggestions.length > 0}}\" class=\"api\">\n      <list>\n        <view slot=\"header\" class=\"list-header\">API</view>\n        <block a:for=\"{{apiSuggestions}}\">\n          <list-item\n            arrow=\"{{true}}\"\n            multipleLine=\"{{false}}\"\n            key=\"items-{{item.name}}\"\n            last=\"{{index === apiSuggestions.length - 1}}\">\n            <view\n              onTap=\"onListItemTap\"\n              data-url=\"{{item.path}}\"\n              data-name=\"{{item.name}}\"\n              style=\"display: flex; align-items: center\">\n              <image src=\"{{item.thumb}}\" class=\"thumb\" a:if=\"{{thumb}}\" />\n              <text class=\"component-name\">{{item.name}}</text>\n            </view>\n          </list-item>\n        </block>\n      </list>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "packages/examples-alipay/common/components/search/search.js",
    "content": "import { debounce } from \"../../../common/utils/common\";\nimport { componentList } from \"../../../utils/process\";\n// 搜索推荐\nconst apiList = [];\n\nPage({\n  data: {\n    value: \"\",\n    history: my.getStorageSync({ key: \"searchHistory\" }).data || [],\n    hot: [\n      { name: \"知识图谱树\", url: \"../../SceneCase/knowledgeTreeGraph/index\" },\n      { name: \"基本弧线图\", url: \"../../GeneralGraph/basicArcDiagram/index\" },\n      { name: \"FA气泡图\", url: \"../../GeneralGraph/forceBubbles/index\" },\n      { name: \"无到有的边\", url: \"../../Animation/edge_lineGrowth/index\" },\n      { name: \"自定义流向图\", url: \"../../SceneCase/customFlow/index\" },\n      { name: \"生态树\", url: \"../../TreeGraph/BasicDendrogram/index\" },\n      { name: \"自定义树中的边\", url: \"../../TreeGraph/customEdgeTree/index\" },\n      {\n        name: \"基本同心圆布局\",\n        url: \"../../GeneralGraph/basicConcentric/index\",\n      },\n      { name: \"布局切换\", url: \"../../GeneralGraph/layoutTranslate/index\" },\n    ],\n    componentSuggestions: [],\n    apiSuggestions: [],\n  },\n  onLoad() {\n    this.setData({\n      history: my.getStorageSync({ key: \"searchHistory\" }).data,\n    });\n    console.log(my.getStorageSync({ key: \"searchHistory\" }).data);\n    this.onInput = debounce(this.onInput.bind(this), 400);\n    my.setNavigationBar({\n      borderBottomColor: \"#fff\",\n    });\n  },\n  clear() {\n    my.confirm({\n      content: \"确定删除相关历史？\",\n      success: (res) => {\n        if (res.confirm) {\n          my.clearStorage();\n          this.setData({\n            history: [],\n          });\n        }\n      },\n    });\n  },\n  onInput(keyword) {\n    this.setData({\n      value: keyword,\n    });\n    const regExp = /[A-Za-z]/;\n    if (keyword === \"\" || (regExp.test(keyword) && keyword.length === 1)) {\n      this.setData({\n        componentSuggestions: [],\n        apiSuggestions: [],\n      });\n      return;\n    }\n    const componentSuggestions = [];\n    const apiSuggestions = [];\n    for (let i = 0; i < componentList.length; i++) {\n      if (\n        componentList[i].suggestion\n          .toLocaleLowerCase()\n          .indexOf(keyword.toLocaleLowerCase()) !== -1\n      ) {\n        componentSuggestions.push(componentList[i]);\n      }\n    }\n\n    for (let i = 0; i < apiList.length; i++) {\n      if (\n        apiList[i].suggestion\n          .toLocaleLowerCase()\n          .indexOf(keyword.toLocaleLowerCase()) !== -1\n      ) {\n        apiSuggestions.push(apiList[i]);\n      }\n    }\n    this.setData({ componentSuggestions, apiSuggestions });\n  },\n  onClear() {\n    this.setData({\n      value: \"\",\n    });\n  },\n  onCancel() {\n    this.setData({\n      componentSuggestions: [],\n      apiSuggestions: [],\n      value: \"\",\n    });\n    my.navigateBack();\n  },\n  onItemTap({ name }) {\n    this.setData({\n      value: name,\n    });\n\n    this.onInput(name);\n  },\n  onListItemTap(e) {\n    const { name, url } = e.target.dataset;\n    this.addToHistory(name);\n    console.log(url);\n    my.navigateTo({ url });\n  },\n  addToHistory(keyword) {\n    const searchHistory =\n      my.getStorageSync({ key: \"searchHistory\" }).data || [];\n    let index = -1;\n\n    for (let i = 0; i < searchHistory.length; i++) {\n      if (searchHistory[i].name === keyword) {\n        index = i;\n        break;\n      }\n    }\n\n    let history = [];\n\n    if (searchHistory.length >= 8) {\n      if (index === -1) {\n        history = [{ name: keyword }, ...searchHistory.slice(0, 7)];\n      } else {\n        searchHistory.splice(index, 1).slice(0, 7);\n        history = [{ name: keyword }, ...searchHistory];\n      }\n    } else if (index === -1) {\n      history = [{ name: keyword }, ...searchHistory];\n    } else {\n      searchHistory.splice(index, 1);\n      history = [{ name: keyword }, ...searchHistory];\n    }\n\n    my.setStorageSync({\n      key: \"searchHistory\",\n      data: history,\n    });\n\n    this.setData({\n      history,\n    });\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/common/components/search/search.json",
    "content": "{\n  \"defaultTitle\": \"搜索\",\n  \"transparentTitle\": \"none\",\n  \"allowsBounceVertical\": \"NO\",\n  \"usingComponents\": {\n    \"search-bar\": \"mini-ali-ui/es/search-bar/index\",\n    \"block-list\": \"../block-list/block-list\",\n    \"list\": \"mini-ali-ui/es/list/index\",\n    \"list-item\": \"mini-ali-ui/es/list/list-item/index\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/common/utils/common.js",
    "content": "function strLen(str = \"\") {\n  let len = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) {\n      len += 1;\n    } else {\n      len += 2;\n    }\n  }\n\n  return len;\n}\n\nfunction measureText(text, font) {\n  let fontSize = 12;\n  if (font) {\n    fontSize = parseInt(font.split(\" \")[3], 10);\n  }\n  fontSize /= 2;\n  return {\n    width: strLen(text) * fontSize,\n  };\n}\n\nfunction processSearchData(all_data) {\n  const all_result = [];\n  all_data.forEach((obj) => {\n    const { name: groupName, thumb, nameEn, detailList } = obj;\n    detailList.forEach((detail) => {\n      const { name, path: tmpPath } = detail;\n      const suggestion = nameEn + groupName + name;\n      const path = tmpPath.replace(/../, \"/pages\");\n      const result = {\n        name,\n        thumb,\n        path,\n        suggestion,\n      };\n      all_result.push(result);\n    });\n  });\n  return all_result;\n}\n\n// 防抖\nfunction debounce(fn, wait) {\n  let timeout;\n  return function () {\n    const ctx = this;\n    const args = arguments;\n    clearTimeout(timeout);\n    timeout = setTimeout(function () {\n      fn.apply(ctx, args);\n    }, wait);\n  };\n}\n\nexport { measureText, processSearchData, debounce };\n"
  },
  {
    "path": "packages/examples-alipay/common/utils/context.js",
    "content": "import { measureText } from \"./common\";\n/**\n * 部分小程序context会缺少函数，补上\n */\nfunction wrapContext(ctx) {\n  if (!ctx) return;\n  if (!ctx.measureText) {\n    ctx.measureText = measureText;\n  }\n  return ctx;\n}\n\nexport { wrapContext };\n"
  },
  {
    "path": "packages/examples-alipay/common/utils/data.js",
    "content": "// 下面是第一个tab中的内容\nexport const treeGraphContainer = [\n  {\n    name: \"紧凑树\",\n    thumb: \"/common/images/icon/compactbox.png\",\n    nameEn: \"CompactTree\",\n    detailList: [\n      {\n        name: \"紧凑树\",\n        path: \"../tree-graph/compact-box/index\",\n      },\n      {\n        name: \"至上而下的紧凑树\",\n        path: \"../tree-graph/tb-compact-box/index\",\n      },\n      {\n        name: \"节点左对齐的紧凑树\",\n        path: \"../tree-graph/compact-box-left-align/index\",\n      },\n    ],\n  },\n  {\n    name: \"生态树\",\n    thumb: \"/common/images/icon/dendrogram.png\",\n    nameEn: \"Dendrogram\",\n    detailList: [\n      {\n        name: \"生态树\",\n        path: \"../tree-graph/basic-dendrogram/index\",\n      },\n      {\n        name: \"至上而下的生态树\",\n        path: \"../tree-graph/tb-dendrogram/index\",\n      },\n    ],\n  },\n  {\n    name: \"脑图树\",\n    thumb: \"/common/images/icon/mind.png\",\n    nameEn: \"MindMap\",\n    detailList: [\n      {\n        name: \"子节点自动两侧分布\",\n        path: \"../tree-graph/mind-map/index\",\n      },\n      {\n        name: \"子节点右侧分布\",\n        path: \"../tree-graph/right-mind-map/index\",\n      },\n      {\n        name: \"子节点左侧分布\",\n        path: \"../tree-graph/left-mind-map/index\",\n      },\n      {\n        name: \"自定义子节点分布\",\n        path: \"../tree-graph/custom-side-mind-map/index\",\n      },\n    ],\n  },\n  {\n    name: \"缩进树\",\n    thumb: \"/common/images/icon/indent.png\",\n    nameEn: \"Intend\",\n    path: \"/page/component/movable-view/movable-view\",\n    detailList: [\n      {\n        name: \"文件系统\",\n        path: \"../tree-graph/file-system/index\",\n      },\n      {\n        name: \"顶部对齐\",\n        path: \"../tree-graph/intend-align-top/index\",\n      },\n      {\n        name: \"子节点两侧分布\",\n        path: \"../tree-graph/intended/index\",\n      },\n    ],\n  },\n  {\n    name: \"辐射树\",\n    thumb: \"/common/images/icon/radial.png\",\n    nameEn: \"Radial\",\n    detailList: [\n      {\n        name: \"生态辐射树\",\n        path: \"../tree-graph/radial-dendrogram/index\",\n      },\n      {\n        name: \"紧凑辐射树\",\n        path: \"../tree-graph/radial-compact-box/index\",\n      },\n    ],\n  },\n  {\n    name: \"定制样式树\",\n    thumb: \"/common/images/icon/dingzhi.png\",\n    nameEn: \"Custom\",\n    detailList: [\n      {\n        name: \"自定义树中的边\",\n        path: \"../tree-graph/custom-edge-tree/index\",\n      },\n      {\n        name: \"树边上的标签\",\n        path: \"../tree-graph/tree-edge-label/index\",\n      },\n      {\n        name: \"复杂树样式\",\n        path: \"../tree-graph/custom-tree/index\",\n      },\n    ],\n  },\n];\n\nexport const generalGraphContainer = [\n  {\n    name: \"力导向图\",\n    thumb: \"/common/images/icon/fa.png\",\n    nameEn: \"ForceAtalas\",\n    detailList: [\n      {\n        name: \"FA布局及节点拖拽\",\n        path: \"../general-graph/basic-force-directed/index\",\n      },\n      {\n        name: \"FA2布局\",\n        path: \"../general-graph/basic-FA2/index\",\n      },\n      {\n        name: \"FA布局防止节点重叠\",\n        path: \"../general-graph/force-directed-prevent-overlap/index\",\n      },\n      {\n        name: \"FA布局聚类\",\n        path: \"../general-graph/force-directed-force-clustering/index\",\n      },\n      {\n        name: \"定制不同节点的参数\",\n        path: \"../general-graph/force-directed-functional-params/index\",\n      },\n      {\n        name: \"固定被拖拽节点\",\n        path: \"../general-graph/basic-force-directed-drag-fix/index\",\n      },\n      {\n        name: \"FA布局参数动态变化\",\n        path: \"../general-graph/force-directed-configuration-translate/index\",\n      },\n      {\n        name: \"FA气泡图\",\n        path: \"../general-graph/force-bubbles/index\",\n      },\n      {\n        name: \"约束在范围内布局\",\n        path: \"../general-graph/force-constrained-in-rect/index\",\n      },\n      {\n        name: \"Combo FA布局\",\n        path: \"../general-graph/basic-combo-force/index\",\n      },\n    ],\n  },\n  {\n    name: \"流程图\",\n    thumb: \"/common/images/icon/dagre.png\",\n    nameEn: \"Dagre\",\n    detailList: [\n      {\n        name: \"流程图\",\n        path: \"../general-graph/basic-dagre/index\",\n      },\n      {\n        name: \"带有Combo的流程图\",\n        path: \"../general-graph/dagre-combo/index\",\n      },\n      {\n        name: \"自左向右的流程图\",\n        path: \"../general-graph/dagre/index\",\n      },\n      {\n        name: \"自左向右的流程图对齐\",\n        path: \"../general-graph/dagre-UL/index\",\n      },\n      {\n        name: \"布局参数动态变化\",\n        path: \"../general-graph/dagre-configuration-translate/index\",\n      },\n    ],\n  },\n  {\n    name: \"Fruchterman图\",\n    thumb: \"/common/images/icon/terms.png\",\n    nameEn: \"Fruchterman\",\n    detailList: [\n      {\n        name: \"基本Fruchterman\",\n        path: \"../general-graph/fruchterman/index\",\n      },\n      {\n        name: \"Fruchterman聚类\",\n        path: \"../general-graph/fruchterman-clustering/index\",\n      },\n      {\n        name: \"参数动态变化\",\n        path: \"../general-graph/fruchterman-configuration-translate/index\",\n      },\n    ],\n  },\n  {\n    name: \"辐射图\",\n    thumb: \"/common/images/icon/radial.png\",\n    nameEn: \"Radial\",\n    detailList: [\n      {\n        name: \"基本辐射布局\",\n        path: \"../general-graph/basic-radial/index\",\n      },\n      {\n        name: \"防止节点重叠的严格辐射布局\",\n        path: \"../general-graph/prevent-overlap-radial/index\",\n      },\n      {\n        name: \"防止节点重叠的非严格辐射布局\",\n        path: \"../general-graph/prevent-overlap-unstrict-radial/index\",\n      },\n      {\n        name: \"交互扩展节点的辐射布局\",\n        path: \"../general-graph/interact-radial/index\",\n      },\n      {\n        name: \"布局参数动态变化\",\n        path: \"../general-graph/radial-configuration-translate/index\",\n      },\n      {\n        name: \"同层节点按照指定字段聚类\",\n        path: \"../general-graph/sort-radial/index\",\n      },\n    ],\n  },\n  {\n    name: \"环形图\",\n    thumb: \"/common/images/icon/circle.png\",\n    nameEn: \"Circle\",\n    detailList: [\n      {\n        name: \"基本环形布局\",\n        path: \"../general-graph/basic-circular/index\",\n      },\n      {\n        name: \"按节点度数排序\",\n        path: \"../general-graph/degree-circular/index\",\n      },\n      {\n        name: \"螺旋线布局\",\n        path: \"../general-graph/spiral-circular/index\",\n      },\n      {\n        name: \"分割环形布局\",\n        path: \"../general-graph/division-circular/index\",\n      },\n      {\n        name: \"参数动态变化\",\n        path: \"../general-graph/circular-configuration-translate/index\",\n      },\n    ],\n  },\n  {\n    name: \"网格图\",\n    thumb: \"/common/images/icon/grid.png\",\n    nameEn: \"Grid\",\n    detailList: [\n      {\n        name: \"基本网格布局\",\n        path: \"../general-graph/basic-grid/index\",\n      },\n      {\n        name: \"指定排序方式的网格布局\",\n        path: \"../general-graph/cluster-grid/index\",\n      },\n    ],\n  },\n  {\n    name: \"同心圆\",\n    thumb: \"/common/images/icon/concentric.png\",\n    nameEn: \"Concentric\",\n    detailList: [\n      {\n        name: \"基本同心圆布局\",\n        path: \"../general-graph/basic-concentric/index\",\n      },\n    ],\n  },\n  {\n    name: \"降维图\",\n    thumb: \"/common/images/icon/degree.png\",\n    nameEn: \"MDS\",\n    detailList: [\n      {\n        name: \"基本降维布局图\",\n        path: \"../general-graph/basic-MDS/index\",\n      },\n    ],\n  },\n  {\n    name: \"弧线图\",\n    thumb: \"/common/images/icon/arc.png\",\n    nameEn: \"Arc Diagram \",\n    detailList: [\n      {\n        name: \"基本弧线图\",\n        path: \"../general-graph/basic-arc-diagram/index\",\n      },\n      {\n        name: \"环形弧线图\",\n        path: \"../general-graph/circular-arc-diagram/index\",\n      },\n    ],\n  },\n  {\n    name: \"布局机制\",\n    thumb: \"/common/images/icon/buju.png\",\n    nameEn: \"Layout\",\n    detailList: [\n      {\n        name: \"布局切换\",\n        path: \"../general-graph/layout-translate/index\",\n      },\n      {\n        name: \"子图布局\",\n        path: \"../general-graph/subgraph-layout/index\",\n      },\n      // {\n      //   name: '流水线子图布局',\n      //   path: '../general-graph/sublayoutPipes/index',\n      // },\n      {\n        name: \"数据动态切换\",\n        path: \"../general-graph/data-change/index\",\n      },\n      {\n        name: \"自定义二分图布局\",\n        path: \"../general-graph/custom-bi-graph/index\",\n      },\n      {\n        name: \"布局时机监听\",\n        path: \"../general-graph/layout-timing/index\",\n      },\n    ],\n  },\n];\n\nexport const basicElementContainer = [\n  {\n    name: \"内置节点\",\n    thumb: \"/common/images/icon/node.png\",\n    nameEn: \"Node\",\n    detailList: [\n      {\n        name: \"圆形\",\n        path: \"../elements/circle/index\",\n      },\n      {\n        name: \"甜甜圈\",\n        path: \"../elements/donut/index\",\n      },\n      {\n        name: \"椭圆\",\n        path: \"../elements/ellipse/index\",\n      },\n      {\n        name: \"矩形\",\n        path: \"../elements/rect/index\",\n      },\n      {\n        name: \"模态矩形\",\n        path: \"../elements/mode-rect/index\",\n      },\n      {\n        name: \"模态菱形\",\n        path: \"../elements/diamond/index\",\n      },\n      {\n        name: \"五角星\",\n        path: \"../elements/star/index\",\n      },\n      {\n        name: \"三角形\",\n        path: \"../elements/triangle/index\",\n      },\n      {\n        name: \"图片\",\n        path: \"../elements/image/index\",\n      },\n    ],\n  },\n  {\n    name: \"内置边\",\n    thumb: \"/common/images/icon/defaultEdge.png\",\n    nameEn: \"Edge\",\n    detailList: [\n      {\n        name: \"折线1\",\n        path: \"../elements/polyline1/index\",\n      },\n      {\n        name: \"折线2\",\n        path: \"../elements/polyline2/index\",\n      },\n      {\n        name: \"折线3\",\n        path: \"../elements/polyline3/index\",\n      },\n      {\n        name: \"三次贝塞尔曲线-垂直\",\n        path: \"../elements/cubic1/index\",\n      },\n      {\n        name: \"三次贝塞尔曲线-水平\",\n        path: \"../elements/cubic2/index\",\n      },\n      {\n        name: \"弧线\",\n        path: \"../elements/arc/index\",\n      },\n      {\n        name: \"自环边\",\n        path: \"../elements/loop/index\",\n      },\n    ],\n  },\n  {\n    name: \"内置组合\",\n    thumb: \"/common/images/icon/combo.png\",\n    nameEn: \"Combo\",\n    detailList: [\n      {\n        name: \"圆形\",\n        path: \"../elements/circle-with-combo/index\",\n      },\n      {\n        name: \"矩形\",\n        path: \"../elements/rect-with-combo/index\",\n      },\n    ],\n  },\n  {\n    name: \"边的箭头\",\n    thumb: \"/common/images/icon/arrow.png\",\n    nameEn: \"Arrow\",\n    detailList: [\n      {\n        name: \"默认内置箭头\",\n        path: \"../elements/built-in-arrows/index\",\n      },\n      {\n        name: \"自定义箭头\",\n        path: \"../elements/custom-arrows/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义节点\",\n    thumb: \"/common/images/icon/customNode.png\",\n    nameEn: \"CustomNode\",\n    detailList: [\n      {\n        name: \"卡片\",\n        path: \"../elements/card/index\",\n      },\n      {\n        name: \"卡片2\",\n        path: \"../elements/card-node/index\",\n      },\n      {\n        name: \"面积图节点\",\n        path: \"../elements/area-chart/index\",\n      },\n      {\n        name: \"堆叠图节点\",\n        path: \"../elements/stack-chart/index\",\n      },\n      {\n        name: \"折线图节点\",\n        path: \"../elements/line-chart/index\",\n      },\n      {\n        name: \"南丁格尔图节点\",\n        path: \"../elements/bar-chart/index\",\n      },\n      {\n        name: \"点线图节点\",\n        path: \"../elements/point-chart/index\",\n      },\n      {\n        name: \"饼图节点\",\n        path: \"../elements/pie-chart/index\",\n      },\n      {\n        name: \"列表\",\n        path: \"../elements/list/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义边\",\n    thumb: \"/common/images/icon/customEdge.png\",\n    nameEn: \"CustomEdge\",\n    detailList: [\n      {\n        name: \"添加额外图形\",\n        path: \"../elements/extra-shape/index\",\n      },\n      {\n        name: \"自定义折线\",\n        path: \"../elements/custom-polyline/index\",\n      },\n      {\n        name: \"自定义折线2\",\n        path: \"../elements/custom-polyline2/index\",\n      },\n      {\n        name: \"多标签边\",\n        path: \"../elements/edge-mul-label/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义组合\",\n    thumb: \"/common/images/icon/customCombo.png\",\n    nameEn: \"CustomCombo\",\n    detailList: [\n      {\n        name: \"带有Marker的圆\",\n        path: \"../elements/c-circle/index\",\n      },\n      {\n        name: \"带有Marker的矩形\",\n        path: \"../elements/c-rect/index\",\n      },\n    ],\n  },\n  {\n    name: \"超长文本\",\n    thumb: \"/common/images/icon/article.png\",\n    nameEn: \"Long\",\n    detailList: [\n      {\n        name: \"文本超长\",\n        path: \"../elements/label-len/index\",\n      },\n      {\n        name: \"使用换行符处理\",\n        path: \"../elements/label-len1/index\",\n      },\n    ],\n  },\n  {\n    name: \"文本背景\",\n    thumb: \"/common/images/icon/background.png\",\n    nameEn: \"Background\",\n    detailList: [\n      {\n        name: \"节点文本背景\",\n        path: \"../elements/node-bg/index\",\n      },\n      {\n        name: \"边上文本背景\",\n        path: \"../elements/edge-bg/index\",\n      },\n    ],\n  },\n  {\n    name: \"多边定点\",\n    thumb: \"/common/images/icon/multiedges.png\",\n    nameEn: \"Multiple\",\n    detailList: [\n      {\n        name: \"两节点间存在多条边\",\n        path: \"../elements/multi-edges/index\",\n      },\n    ],\n  },\n];\n\nexport const basicInteractiveContainer = [\n  // {\n  //   name: '高亮',\n  //   thumb: '/common/images/icon/button.png',\n  //   nameEn: 'HighLight',\n  //   detailList: [\n  //     {\n  //       name: '内置的高亮节点',\n  //       path: '../interactive/activateRelations/index',\n  //     },\n  //     {\n  //       name: '自定义高亮',\n  //       path: '../interactive/highlightDark/index',\n  //     },\n  //   ],\n  // },\n  {\n    name: \"自定义树图交互\",\n    thumb: \"/common/images/icon/interact.png\",\n    nameEn: \"Tree-Graph\",\n    detailList: [\n      {\n        name: \"拖拽子树改变结构\",\n        path: \"../interactive/drag-subtree/index\",\n      },\n      {\n        name: \"合并同类兄弟节点\",\n        path: \"../interactive/collapse-slibing/index\",\n      },\n      {\n        name: \"使用changeData\",\n        path: \"../interactive/change-data/index\",\n      },\n      {\n        name: \"使用addChild\",\n        path: \"../interactive/add-child/index\",\n      },\n    ],\n  },\n  {\n    name: \"节点分组\",\n    thumb: \"/common/images/icon/label.png\",\n    nameEn: \"Combo\",\n    detailList: [\n      {\n        name: \"圆形组合\",\n        path: \"../interactive/combo-circle/index\",\n      },\n      {\n        name: \"矩形组合\",\n        path: \"../interactive/combo-rect/index\",\n      },\n    ],\n  },\n  {\n    name: \"节点集轮廓包裹\",\n    thumb: \"/common/images/icon/textarea.png\",\n    nameEn: \"Hull\",\n    detailList: [\n      {\n        name: \"用轮廓包裹节点集合\",\n        path: \"../interactive/hull/index\",\n      },\n      {\n        name: \"修改包裹内部成员\",\n        path: \"../interactive/change-members/index\",\n      },\n    ],\n  },\n  {\n    name: \"聚集一个节点\",\n    thumb: \"/common/images/icon/radio.png\",\n    nameEn: \"Move\",\n    detailList: [\n      {\n        name: \"点击节点移动\",\n        path: \"../interactive/move/index\",\n      },\n      {\n        name: \"点击节点动画\",\n        path: \"../interactive/move-animate/index\",\n      },\n    ],\n  },\n  {\n    name: \"响应区域事件\",\n    thumb: \"/common/images/icon/checkbox.png\",\n    nameEn: \"Response\",\n    detailList: [\n      {\n        name: \"响应节点中部分区域\",\n        path: \"../interactive/partial-node/index\",\n      },\n    ],\n  },\n  {\n    name: \"切换模式增加点和边\",\n    thumb: \"/common/images/icon/switch.png\",\n    nameEn: \"Switch\",\n    detailList: [\n      {\n        name: \"设置交互模式\",\n        path: \"../interactive/set-mode/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义交互\",\n    thumb: \"/common/images/icon/slider.png\",\n    nameEn: \"CustomInteraction\",\n    detailList: [\n      {\n        name: \"两指平移画布\",\n        path: \"../interactive/canvas-two-fingers/index\",\n      },\n    ],\n  },\n  {\n    name: \"画布交互\",\n    thumb: \"/common/images/icon/picker-view.png\",\n    nameEn: \"Canvas\",\n    detailList: [\n      {\n        name: \"缩放画布时固定元素\",\n        path: \"../interactive/fix-item/index\",\n      },\n      {\n        name: \"拖拽画布时候隐藏\",\n        path: \"../interactive/hide-item/index\",\n      },\n    ],\n  },\n];\n\nexport const aminationContainer = [\n  {\n    name: \"节点动画\",\n    thumb: \"/common/images/icon/nodeAminate.png\",\n    nameEn: \"NodeAnimate\",\n    detailList: [\n      {\n        name: \"节点动画\",\n        path: \"../animation/node-node/index\",\n      },\n    ],\n  },\n  {\n    name: \"边动画\",\n    thumb: \"/common/images/icon/edgeMove.png\",\n    nameEn: \"EdgeAnimate\",\n    detailList: [\n      {\n        name: \"圆点沿边运动\",\n        path: \"../animation/point-in-line/index\",\n      },\n      {\n        name: \"虚线运动\",\n        path: \"../animation/edge-edge/index\",\n      },\n      {\n        name: \"无到有的边\",\n        path: \"../animation/edge-line-growth/index\",\n      },\n    ],\n  },\n  {\n    name: \"状态切换\",\n    thumb: \"/common/images/icon/change.png\",\n    nameEn: \"Change\",\n    detailList: [\n      {\n        name: \"状态与动画\",\n        path: \"../animation/state-change-hover/index\",\n      },\n    ],\n  },\n  {\n    name: \"节点移动动画\",\n    thumb: \"/common/images/icon/nodeMove.png\",\n    nameEn: \"NodeMove\",\n    detailList: [\n      {\n        name: \"节点移动动画\",\n        path: \"../animation/change-position-default/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义动画\",\n    thumb: \"/common/images/icon/navigator.png\",\n    nameEn: \"CustomAminate\",\n    detailList: [\n      {\n        name: \"自定义动画\",\n        path: \"../animation/custom-animate-position/index\",\n      },\n    ],\n  },\n];\n\n// 下面是第二个tab内容\nexport const customizeTree = [\n  {\n    name: \"自定义树图\",\n    thumb: \"/common/images/icon/radial.png\",\n    nameEn: \"Custom\",\n    detailList: [\n      // {\n      //   name: '决策树',\n      //   path: '../scene-case/decision-tree/index',\n      // },\n      {\n        name: \"知识图谱树\",\n        path: \"../scene-case/knowledge-tree-graph/index\",\n      },\n    ],\n  },\n];\n\nexport const classicCace = [\n  {\n    name: \"经典案例\",\n    thumb: \"/common/images/icon/classic.png\",\n    nameEn: \"Classic\",\n    detailList: [\n      {\n        name: \"自定义流向图\",\n        path: \"../scene-case/custom-flow/index\",\n      },\n      // {\n      //   name: '桑基图',\n      //   path: '../scene-case/sankey/index',\n      // },\n      // {\n      //   name: '思维导图',\n      //   path: '../scene-case/mind-map/index',\n      // },\n      // {\n      //   name: '甜甜圈转账图',\n      //   path: '../scene-case/donut-transfer/index',\n      // },\n    ],\n  },\n];\n\nexport const newsMapVisualize = [\n  {\n    name: \"新闻图可视化\",\n    thumb: \"/common/images/icon/news.png\",\n    nameEn: \"News\",\n    detailList: [\n      {\n        name: \"地铁路线图\",\n        path: \"../scene-case/metro-lines/index\",\n      },\n    ],\n  },\n];\n\nexport const plugins = [\n  {\n    name: \"提示框\",\n    nameEn: \"Tooltip\",\n    detailList: [\n      {\n        name: \"Tooltip\",\n        path: \"../plugins/tool-tip/index\",\n      },\n    ],\n  },\n  {\n    name: \"图例\",\n    nameEn: \"Legend\",\n    detailList: [\n      {\n        name: \"Legend\",\n        path: \"../plugins/donut-transfer/index\",\n      },\n    ],\n  },\n  {\n    name: \"边过滤\",\n    nameEn: \"EdgeFilter\",\n    detailList: [\n      {\n        name: \"EdgeFilter\",\n        path: \"../plugins/edge-filter/index\",\n      },\n    ],\n  },\n  {\n    name: \"鱼眼\",\n    nameEn: \"Fisheye\",\n    detailList: [\n      {\n        name: \"Fisheye\",\n        path: \"../plugins/fisheye/index\",\n      },\n    ],\n  },\n  {\n    name: \"时间轴\",\n    nameEn: \"Timebar\",\n    detailList: [\n      {\n        name: \"Timebar\",\n        path: \"../plugins/timebar/index\",\n      },\n    ],\n  },\n  {\n    name: \"缩放轴\",\n    nameEn: \"ZoomSlider\",\n    detailList: [\n      {\n        name: \"ZoomSlider\",\n        path: \"../plugins/zoom-slider/index\",\n      },\n    ],\n  },\n  {\n    name: \"边绑定\",\n    nameEn: \"Bundling\",\n    detailList: [\n      {\n        name: \"Bundling\",\n        path: \"../plugins/bundling/index\",\n      },\n    ],\n  },\n  {\n    name: \"上下文菜单\",\n    nameEn: \"Menu\",\n    detailList: [\n      {\n        name: \"Menu\",\n        path: \"../plugins/menu/index\",\n      },\n    ],\n  },\n  {\n    name: \"对齐线\",\n    nameEn: \"SnapLine\",\n    detailList: [\n      {\n        name: \"SnapLine\",\n        path: \"../plugins/snap-line/index\",\n      },\n    ],\n  },\n  {\n    name: \"minimap\",\n    nameEn: \"minimap\",\n    detailList: [\n      {\n        name: \"minimap\",\n        path: \"../plugins/mini-map/index\",\n      },\n    ],\n  },\n];\n\n// 控制搜索框下面的热搜词\nexport const hot = [\n  { name: \"知识图谱树\", url: \"../scene-case/knowledge-tree-graph/index\" },\n  { name: \"基本弧线图\", url: \"../general-graph/basic-arc-diagram/index\" },\n  { name: \"FA气泡图\", url: \"../general-graph/force-bubbles/index\" },\n  { name: \"无到有的边\", url: \"../animation/edge_line-growth/index\" },\n  { name: \"自定义流向图\", url: \"../scene-case/custom-flow/index\" },\n  { name: \"生态树\", url: \"../tree-graph/basic-dendrogram/index\" },\n  { name: \"自定义树中的边\", url: \"../tree-graph/custom-edge-tree/index\" },\n  { name: \"基本同心圆布局\", url: \"../general-graph/basic-concentric/index\" },\n  { name: \"布局切换\", url: \"../general-graph/layout-translate/index\" },\n];\n\nexport const tabs = [\"基础能力\", \"拓展能力\"];\n"
  },
  {
    "path": "packages/examples-alipay/common/utils/debounce.js",
    "content": "export default function debounce(fn, wait) {\n  let timeout;\n  return function () {\n    const ctx = this;\n    const args = arguments;\n    clearTimeout(timeout);\n    timeout = setTimeout(function () {\n      fn.apply(ctx, args);\n    }, wait);\n  };\n}\n"
  },
  {
    "path": "packages/examples-alipay/common/utils/process.js",
    "content": "import { processSearchData } from \"./common\";\nimport {\n  treeGraphContainer,\n  generalGraphContainer,\n  basicElementContainer,\n  basicInteractiveContainer,\n  aminationContainer,\n  customizeTree,\n  classicCace,\n  newsMapVisualize,\n} from \"./data\";\n\nconst all_data = [\n  ...treeGraphContainer,\n  ...generalGraphContainer,\n  ...basicElementContainer,\n  ...basicInteractiveContainer,\n  ...aminationContainer,\n  ...customizeTree,\n  ...classicCace,\n  ...newsMapVisualize,\n];\n\n// 搜索数据\nconst componentList = processSearchData(all_data);\nexport { componentList };\n"
  },
  {
    "path": "packages/examples-alipay/mini.project.json",
    "content": "{\n  \"enableAppxNg\": true,\n  \"enableNodeModuleBabelTransform\": true,\n  \"node_modules_es6_whitelist\": [\"@antv/f6\"],\n  \"component2\": true,\n  \"exclude\": [\"dist/**/*\"]\n}\n"
  },
  {
    "path": "packages/examples-alipay/package.json",
    "content": "{\n  \"name\": \"alipay\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"@antv/f6\": \"^0.0.15\",\n    \"@antv/f6-alipay\": \"^0.0.7\",\n    \"@antv/f6-plugin\": \"^1.0.3\",\n    \"mini-ali-ui\": \"^1.3.8\"\n  },\n  \"repository\": \"git@github.com:antvis/F6.git\"\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/change-position-default/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"a\",\n      x: 200,\n      y: 100,\n      style: { fill: \"#5B8FF9\", stroke: null },\n    },\n    {\n      id: \"b\",\n      x: 100,\n      y: 200,\n      style: { fill: \"#5AD8A6\", stroke: null },\n    },\n    {\n      id: \"c\",\n      x: 300,\n      y: 200,\n      style: { fill: \"#5D7092\", stroke: null },\n    },\n  ],\n  edges: [\n    {\n      id: \"a2b\",\n      source: \"a\",\n      target: \"b\",\n    },\n    {\n      id: \"a2c\",\n      source: \"a\",\n      target: \"c\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/change-position-default/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/change-position-default/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/animation/change-position-default/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * changePosition#default\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      animate: true,\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    setInterval(() => {\n      data.nodes.forEach((node) => {\n        node.x += Math.random() * 50 - 25;\n        node.y += Math.random() * 50 - 25;\n      });\n      this.graph.changeData(data);\n    }, 600);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/change-position-default/index.json",
    "content": "{\n  \"defaultTitle\": \"节点移动动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/custom-animate-position/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/custom-animate-position/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/custom-animate-position/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\n/**\n * customAnimate#position\n */\n\nconst r = 50;\nconst radius = Math.PI;\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      animate: true,\n      animateCfg: {\n        duration: 1000,\n        onFrame(node, ratio, toAttrs, fromAttrs) {\n          const current = radius * ratio;\n          let { x } = fromAttrs;\n          let { y } = fromAttrs;\n          if (fromAttrs.x > toAttrs.x) {\n            x = x - r + r * Math.cos(current);\n            y += r * Math.sin(current);\n          } else {\n            x = x + r - r * Math.cos(current);\n            y -= r * Math.sin(current);\n          }\n          return { x, y };\n        },\n      },\n    });\n\n    // 加入两个节点\n    const node1 = this.graph.addItem(\"node\", {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      type: \"circle\",\n      style: { fill: \"#5B8FF9\", lineWidth: 0 },\n    });\n    const node2 = this.graph.addItem(\"node\", {\n      id: \"node2\",\n      x: 200,\n      y: 100,\n      type: \"circle\",\n      style: { fill: \"#5AD8A6\", lineWidth: 0 },\n    });\n\n    // 循环动画\n    let count = 0;\n    setInterval(() => {\n      if (count % 2 === 0) {\n        node1.get(\"model\").x = 200;\n        node2.get(\"model\").x = 100;\n      } else {\n        node1.get(\"model\").x = 100;\n        node2.get(\"model\").x = 200;\n      }\n      count++;\n      this.graph.refresh();\n    }, 1000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/custom-animate-position/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-edge/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-edge/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-edge/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-edge/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * edge#edge\n */\nconst lineDash = [4, 2, 1, 2];\nF6.registerEdge(\n  \"line-dash\",\n  {\n    afterDraw(cfg, group) {\n      // get the first shape in the group, it is the edge's path here=\n      const shape = group.get(\"children\")[0];\n      let index = 0;\n      // Define the animation\n      shape.animate(\n        () => {\n          index++;\n          if (index > 9) {\n            index = 0;\n          }\n          const res = {\n            lineDash,\n            lineDashOffset: -index,\n          };\n          // returns the modified configurations here, lineDash and lineDashOffset here\n          return res;\n        },\n        {\n          repeat: true, // whether executes the animation repeatly\n          duration: 3000, // the duration for executing once\n        },\n      );\n    },\n  },\n  \"cubic\", // extend the built-in edge 'cubic'\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultEdge: {\n        type: \"line-dash\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#bae7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-edge/index.json",
    "content": "{\n  \"defaultTitle\": \"虚线运动\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-line-growth/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-line-growth/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-line-growth/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-line-growth/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * edge#lineGrowth\n */\n\nF6.registerEdge(\n  \"line-growth\",\n  {\n    afterDraw(_, group) {\n      const shape = group.get(\"children\")[0];\n      const length = shape.getTotalLength();\n      console.log(_);\n      shape.animate(\n        (ratio) => {\n          // the operations in each frame. Ratio ranges from 0 to 1 indicating the prograss of the animation. Returns the modified configurations\n          const startLen = ratio * length;\n          // Calculate the lineDash\n          const cfg = {\n            lineDash: [startLen, length - startLen],\n          };\n          return cfg;\n        },\n        {\n          repeat: true, // Whether executes the animation repeatly\n          duration: 2000, // the duration for executing once\n        },\n      );\n    },\n  },\n  \"cubic\", // extend the built-in edge 'cubic'\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultEdge: {\n        type: \"line-growth\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#bae7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/edge-line-growth/index.json",
    "content": "{\n  \"defaultTitle\": \"无到有的边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/node-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      type: \"circle-animate\",\n      size: 20,\n      label: \"Scale Animation\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      type: \"background-animate\",\n      color: \"#40a9ff\",\n      size: 20,\n      label: \"Background Animation\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n    {\n      id: \"node3\",\n      x: 400,\n      y: 100,\n      size: [40, 40],\n      type: \"inner-animate\",\n      img: \"data:image/webp;base64,UklGRq4FAABXRUJQVlA4IKIFAABwHwCdASo8ADwAPiEMhEGhhv6rQAYAgS2NHsdCq/4D8AOoA64OEUAj/XPxVwyvRGvyO/gGxN/t3oK/1X6zesX3L/p/RP/2HCgKAB9AGeAbCB+AGwAbQBtA/8c/m/4PYHTonm+SzRH6B9sv2i/rOZC+G/ln9l/ML/GdoD7APcA/TD+09QDzAfrX+vHYM9AD+Uf0zrAPQA/bH0vv2t+CH9qf2R+A39e6X098/I7IAcLcs8Gjmc/9T7gPbX9H+wJ+rPVV9En9ZmBI5oUiYhkYHIVjRr9hzCTPcV5Rs/wjjIHkxPgtr/3ALZSuUm146HHwqQVA23hnnqH/4aJ/k4v4hU6RBZ0AAAD+//8ARPyL9yWIlAbWBAD0oKSqlYWreuRa3Oj02u+TvSQS8iwMYewUYTWLDNp9wOlFJaWnqE+za35UwUXuDAT6T0I4fwY+u+qrRVhl+S1ir4X7BQiNswug5AX+MjQcXEeUwfSIEUT+DFPCr+BUiwTbFxLni7fv61vRbmXoauLz4tiqOFTzEGP8tNXP5+H7mZVGfNjIxapT3FGUtqBdp/SD5cTOYOkn2fawkpqpCSqf2+CfiGWtIF673fEzlk/hIbWDhQ81C/ddxLn609d/5efckbdZ8HZbhhVmM82/Uat7CFmw1SH5xCxRxEEhjpf1EP1Xn5q9VZfm1+OFTab/MN67Xha8K//5oVBlMgZALE653X0fas/+2xMqiyCu5Wa7PHsCwbBwqROfNmzi4LPOTjkFPHVKDD1Nfj4/sul6cANdF68rf2jszlyZsUUoLTP7H3swSroc3ssNXSRVAcYd7+iBZpfoAYWvKgnr+Hv62fHZX5ZbjYbYzVjq6fsXkubto858NuUx4+ILb5y7dP6W3/IYVeUSF0yZseKIZhOMs9BBf5uB2Y3Ott//+1OG7hYINzcqigrzWAOJbSmVw3G0ULywkobx+rvfk8VmZFzQGgP/+4T74mp/vsZyM1NLguiTO2gNO05tcpXwveq5mrcweXrJ/bRZDmU2KBrnXhkXq+735c+UHTFq4h4jMOPm5shKioB6XaqhUf3DJlMg8937g/SKjrgD0H5sNm0/k4FfilBbcrsjc3dd6cwEYJo3CNhe3SpNJ2geNXyV4/hq/BZXZ1kiVknjmf5cUx7Tv/9Sb+fQ/DgAsRNSz1wiVodiLjP7aVrkxbWx5gJ8U/j0o1Ipm/nyDZRPrQXmbPAcy1eDDejxTDBKe42ElHpC2QlFdhOedsp4i9QVjt8EqWGy1YzPaGqZhCVg/LWt8/+4BmiCzNGtpR21MGJf4kI/n/1sbe36e1QBCBAx4EVfTM82ZM2lh0P189e7eY0A3NzXWVrUek8SEn+DYYCQeEaC5hDHGreFHT1baY6KyrFx3G9oMm3fLrCqmNjFRnZa3LB/5m8FgCpq9B/1OCLRE5GzVTZnVzj/4V38PgCIpX16Kznijf01+MkDeS9oCF2hEXQ9tr+mPLrjGy4Cg5fyLgyCj1fUq33nMf79Svli2h83m3gqkoxJcXvBetFQP8V/gRjBNGmFXK5TfwLhbolWEjDqUGK3n+hxzQLif9zreYO88EIRTUNbzE1/Sn7rBEtjB0uawNje5OubWsB62SOlMZoZpxrDbMb4UvQrODPhSafmhcYe9zm/dHxssMfUthhDKjyMhoRhngPjbzfGXmIV2Omgrn/zbefK/PawUGSH6x4Qk4HCN4/X8S+XCf51JJtOQeHST/yfwg69uMkE07SONnhGUrL6j5oQn6JI+zkaH/H/P/Ti/pfOTfAWxQNiMvWX08mqbuUweFSQ/G5YUP/uCvZAXutf1+Nhl2jj/n4/fPOihPjwvfFnnjOaQvs9PSpF33d+396LASZ3IID/4UP4pf9eOMXw82ccoUUUHX6MfBWyBDvARCrdPmerUwKwW+lBIAe1dsAAAA==\",\n      label: \"Image Rotate\",\n      labelCfg: {\n        position: \"right\",\n      },\n    },\n    {\n      id: \"node4\",\n      x: 300,\n      y: 300,\n      type: \"rect\",\n      label: \"No Animation\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node4\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/node-node/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/animation/node-node/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/animation/node-node/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * node#node\n */\n\nconst { Util } = F6;\n\n// // Scale Animation\nF6.registerNode(\n  \"circle-animate\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      shape.animate(\n        (ratio) => {\n          const diff = ratio <= 0.5 ? ratio * 10 : (1 - ratio) * 10;\n          return {\n            r: cfg.size / 2 + diff,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"circle\",\n);\n\n// Background Animation\nF6.registerNode(\n  \"background-animate\",\n  {\n    afterDraw(cfg, group) {\n      const r = cfg.size / 2;\n      const back1 = group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back1-shape\",\n      });\n      const back2 = group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back2-shape\",\n      });\n      const back3 = group.addShape(\"circle\", {\n        zIndex: -1,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back3-shape\",\n      });\n      group.sort(); // Sort according to the zIndex\n      back1.animate(\n        {\n          // Magnifying and disappearing\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 0,\n          repeat: true, // repeat\n        },\n      ); // no delay\n      back2.animate(\n        {\n          // Magnifying and disappearing\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 1000,\n          repeat: true, // repeat\n        },\n      ); // 1s delay\n      back3.animate(\n        {\n          // Magnifying and disappearing\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 2000,\n          repeat: true, // repeat\n        },\n      ); // 3s delay\n    },\n  },\n  \"circle\",\n);\n\n// // Image animation\nF6.registerNode(\n  \"inner-animate\",\n  {\n    afterDraw(cfg, group) {\n      const { size } = cfg;\n      const width = size[0] - 12;\n      const height = size[1] - 12;\n      const image = group.addShape(\"image\", {\n        attrs: {\n          x: -width / 2,\n          y: -height / 2,\n          width,\n          height,\n          img: cfg.img,\n        },\n        name: \"image-shape\",\n      });\n      image.animate(\n        (ratio) => {\n          const toMatrix = Util.transform(\n            [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            [[\"r\", ratio * Math.PI * 2]],\n          );\n          return {\n            matrix: toMatrix,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"rect\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          lineWidth: 1,\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/node-node/index.json",
    "content": "{\n  \"defaultTitle\": \"节点动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/point-in-line/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/point-in-line/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/animation/point-in-line/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/animation/point-in-line/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * pointInLine\n */\n\nF6.registerEdge(\n  \"circle-running\",\n  {\n    afterDraw(cfg, group) {\n      // get the first shape in the group, it is the edge's path here=\n      const shape = group.get(\"children\")[0];\n      // the start position of the edge's path\n      const startPoint = shape.getPoint(0);\n\n      // add red circle shape\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          x: startPoint.x,\n          y: startPoint.y,\n          fill: \"#1890ff\",\n          r: 3,\n        },\n        name: \"circle-shape\",\n      });\n\n      // animation for the red circle\n      circle.animate(\n        (ratio) => {\n          // the operations in each frame. Ratio ranges from 0 to 1 indicating the prograss of the animation. Returns the modified configurations\n          // get the position on the edge according to the ratio\n          const tmpPoint = shape.getPoint(ratio);\n          // returns the modified configurations here, x and y here\n          return {\n            x: tmpPoint.x,\n            y: tmpPoint.y,\n          };\n        },\n        {\n          repeat: true, // Whether executes the animation repeatly\n          duration: 3000, // the duration for executing once\n        },\n      );\n    },\n  },\n  \"cubic\", // extend the built-in edge 'cubic'\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultEdge: {\n        type: \"circle-running\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#bae7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/point-in-line/index.json",
    "content": "{\n  \"defaultTitle\": \"圆点沿边运动\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/state-change-hover/data.js",
    "content": "const nodes = [];\nconst edges = [];\n\n// Center node\nconst centerNode = {\n  id: \"center\",\n  x: 500,\n  y: 300,\n  type: \"center-node\",\n  size: 20,\n};\nnodes.push(centerNode);\n// Add 4 nodes on the left\nfor (let i = 0; i < 4; i++) {\n  const id = `left${i}`;\n  nodes.push({\n    id,\n    x: 250,\n    y: (i + 1) * 100 + 50,\n    type: \"leaf-node\",\n  });\n  edges.push({ source: id, target: \"center\", type: \"can-running\" });\n}\n// Add 6 nodes on the right\nfor (let i = 0; i < 6; i++) {\n  const id = `right${i}`;\n  nodes.push({\n    id,\n    x: 750,\n    y: i * 100 + 50,\n    type: \"leaf-node\",\n  });\n  edges.push({ source: \"center\", target: id, type: \"can-running\" });\n}\n\nexport { nodes, edges };\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/state-change-hover/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/animation/state-change-hover/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/animation/state-change-hover/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { nodes, edges } from \"./data\";\n\n/**\n * stateChange_hover\n */\n\nF6.registerNode(\n  \"leaf-node\",\n  {\n    afterDraw(cfg, group) {\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          r: 5,\n          fill: cfg.color || \"#5B8FF9\",\n        },\n        name: \"circle-shape\",\n      });\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n  },\n  \"circle\",\n);\n\nF6.registerNode(\n  \"center-node\",\n  {\n    afterDraw(cfg, group) {\n      const r = cfg.size / 2;\n      group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r: r + 10,\n          fill: \"gray\",\n          opacity: 0.4,\n        },\n        name: \"circle-shape1\",\n      });\n      group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r: r + 20,\n          fill: \"gray\",\n          opacity: 0.2,\n        },\n        name: \"circle-shape2\",\n      });\n      group.sort();\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n  },\n  \"circle\",\n);\n\n// lineDash array\nconst lineDash = [4, 2, 1, 2];\n\nF6.registerEdge(\n  \"can-running\",\n  {\n    setState(name, value, item) {\n      const shape = item.get(\"keyShape\");\n      if (name === \"running\") {\n        if (value) {\n          let index = 0;\n          shape.animate(\n            () => {\n              index += 1;\n              if (index > 9) {\n                index = 0;\n              }\n              const res = {\n                lineDash,\n                lineDashOffset: -index,\n              };\n              // return the params for this frame\n              return res;\n            },\n            {\n              repeat: true,\n              duration: 3000,\n            },\n          );\n        } else {\n          shape.stopAnimate();\n          shape.attr(\"lineDash\", null);\n        }\n      }\n    },\n  },\n  \"cubic-horizontal\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n\n    this.graph.data({ nodes, edges });\n    this.graph.render();\n    this.graph.fitView();\n\n    this.graph.on(\"node:tap\", (ev) => {\n      const node = ev.item;\n      const edges_ = node.getEdges();\n      edges_.forEach((edge) => this.graph.setItemState(edge, \"running\", true));\n    });\n    // this.graph.on('node:dbltap', (ev) => {\n    //   console.log('点击了')\n    //   const node = ev.item;\n    //   const edges_ = node.getEdges();\n    //   edges_.forEach((edge) => this.graph.setItemState(edge, 'running', false));\n    // });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/animation/state-change-hover/index.json",
    "content": "{\n  \"defaultTitle\": \"状态与动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/arc/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    // Built-in arc edges\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"curveOffset = 20\",\n      curveOffset: 20,\n    },\n    {\n      id: \"edge1\",\n      source: \"0\",\n      target: \"1\",\n      label: \"curveOffset = 50\", // the bending degree\n      curveOffset: 50,\n    },\n    {\n      id: \"edge2\",\n      source: \"0\",\n      target: \"1\",\n      label: \"curveOffset = -50\", // the bending degree\n      curveOffset: -50,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/arc/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/arc/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/arc/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * arc\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        // 支持的 behavior\n        default: [\"drag-node\"],\n      },\n      defaultEdge: {\n        type: \"arc\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n        labelCfg: {\n          autoRotate: true,\n          refY: -10,\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/arc/index.json",
    "content": "{\n  \"defaultTitle\": \"弧线\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/area-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeD\",\n      x: 150,\n      y: 150,\n      label: \"Area1\",\n      type: \"area\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeD2\",\n      x: 500,\n      y: 150,\n      label: \"Area2\",\n      type: \"area\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeD\",\n      target: \"nodeD2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/area-chart/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/area-chart/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/area-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * areaChart\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    F6.registerNode(\"area\", {\n      draw(cfg, group) {\n        const baseR = 30;\n\n        // Ref line\n        let refR = baseR;\n        const refInc = 10;\n        for (let i = 0; i < 6; i++) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              r: (refR += refInc),\n              stroke: \"#bae7ff\",\n              lineDash: [4, 4],\n            },\n            name: \"circle-shape\",\n          });\n        }\n        const everyIncAngle = (2 * Math.PI * (360 / 5)) / 360;\n        const tempIncValues = [baseR, baseR, baseR, baseR, baseR];\n        const allRs = [];\n        cfg.details.forEach((cat) => {\n          const oneRs = [];\n          cat.values.forEach((v, i) => {\n            const R = tempIncValues[i] + v * 0.4;\n            oneRs.push(R);\n            tempIncValues[i] = R;\n          });\n          allRs.push(oneRs);\n        });\n        const strokeColors = [\n          \"rgba(91, 143, 249,1)\",\n          \"rgba(90, 216, 166,1)\",\n          \"rgba(246, 189, 22,1)\",\n          \"rgba(232, 104, 74,1)\",\n          \"rgba(255, 157, 77,1)\",\n        ];\n        const fillColors = [\n          \"rgba(91, 143, 249,0.5)\",\n          \"rgba(90, 216, 166,0.5)\",\n          \"rgba(246, 189, 22,0.5)\",\n          \"rgba(232, 104, 74,0.5)\",\n          \"rgba(255, 157, 77,0.5)\",\n        ];\n\n        allRs.reverse().forEach((Rs, index) => {\n          let curAngle = 0;\n          const poss = [];\n          Rs.forEach((r) => {\n            const xPos = r * Math.cos(curAngle);\n            const yPos = r * Math.sin(curAngle);\n            curAngle += everyIncAngle;\n            poss.push([xPos, yPos]);\n          });\n          const Ls = poss.map((p, i) => {\n            if (i === 0) {\n              return [\"M\", ...p];\n            }\n            return [\"L\", ...p];\n          });\n\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                ...Ls,\n                [\"Z\"], // close the path\n              ],\n              stroke: strokeColors[index],\n              fill: fillColors[index],\n            },\n            name: \"path-shape1\",\n          });\n        });\n        let nowAngle2 = 0;\n        const everyIncAngleCat = (2 * Math.PI * (360 / 5)) / 360;\n        for (let i = 0; i < 5; i++) {\n          const r = 30 + 60;\n          const xPos = r * Math.cos(nowAngle2);\n          const yPos = r * Math.sin(nowAngle2);\n\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", 0, 0],\n                [\"L\", xPos, yPos],\n              ],\n              lineDash: [4, 4],\n              stroke: \"darkgray\",\n            },\n            name: \"path-shape2\",\n          });\n          nowAngle2 += everyIncAngleCat;\n        }\n\n        // add a circle with the same filling color with background\n        group.addShape(\"circle\", {\n          // attrs: style\n          attrs: {\n            x: 0, // 居中\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            // attrs: style\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/area-chart/index.json",
    "content": "{\n  \"defaultTitle\": \"面积图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/bar-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeA\",\n      x: 150,\n      y: 150,\n      label: \"Bar1\",\n      type: \"circleBar\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeA2\",\n      x: 500,\n      y: 150,\n      label: \"Bar2\",\n      type: \"circleBar\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeA\",\n      target: \"nodeA2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/bar-chart/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/bar-chart/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/bar-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * barChart：使用G自定义的南丁格尔图节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    const getPath = (cx, cy, rs, re, startAngle, endAngle, clockwise) => {\n      const flag1 = clockwise ? 1 : 0;\n      const flag2 = clockwise ? 0 : 1;\n      return [\n        [\"M\", Math.cos(startAngle) * rs + cx, Math.sin(startAngle) * rs + cy],\n        [\"L\", Math.cos(startAngle) * re + cx, Math.sin(startAngle) * re + cy],\n        [\n          \"A\",\n          re,\n          re,\n          0,\n          0,\n          flag1,\n          Math.cos(endAngle) * re + cx,\n          Math.sin(endAngle) * re + cy,\n        ],\n        [\"L\", Math.cos(endAngle) * rs + cx, Math.sin(endAngle) * rs + cy],\n        [\n          \"A\",\n          rs,\n          rs,\n          0,\n          0,\n          flag2,\n          Math.cos(startAngle) * rs + cx,\n          Math.sin(startAngle) * rs + cy,\n        ],\n        [\"Z\"],\n      ];\n    };\n    F6.registerNode(\"circleBar\", {\n      draw(cfg, group) {\n        /*\n          G:\n          Fan\n          x: the circle center of the fan\n          y: the circle center of the fan\n          rs: inner radius\n          re: outer radius\n          startAngle: start angle\n          endAngle: end angle\n          clockwise: render clockwisely if it is true\n        */\n        const baseR = 30;\n        let nowAngle = 0;\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        cfg.details.forEach((cat) => {\n          cat.values.forEach((item) => {\n            const re = item + baseR;\n            const path0 = getPath(\n              0,\n              0,\n              baseR,\n              item + baseR,\n              nowAngle,\n              (nowAngle += everyIncAngle),\n              false,\n            );\n            const fan = group.addShape(\"path\", {\n              attrs: {\n                path: path0,\n                stroke: \"darkgray\",\n                fill: cat.color,\n              },\n              name: \"path-shape\",\n            });\n            // behavior animation\n            fan.on(\"mouseenter\", () => {\n              fan.animate(\n                {\n                  re: re + 8,\n                },\n                {\n                  repeat: false,\n                  duration: 300,\n                },\n              );\n            });\n            fan.on(\"mouseleave\", () => {\n              fan.animate(\n                {\n                  re,\n                },\n                {\n                  repeat: false,\n                  duration: 300,\n                },\n              );\n            });\n            // set the name\n            fan.set(\"name\", \"littleCircle\");\n          });\n        });\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/bar-chart/index.json",
    "content": "{\n  \"defaultTitle\": \"南丁格尔图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/built-in-arrows/data.js",
    "content": "import F6 from \"@antv/f6\";\n// 需要用到箭头\nconst data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 50,\n    },\n    {\n      id: \"2\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 100,\n    },\n    {\n      id: \"4\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"5\",\n      x: 350,\n      y: 150,\n    },\n    {\n      id: \"6\",\n      x: 150,\n      y: 200,\n    },\n    {\n      id: \"7\",\n      x: 350,\n      y: 200,\n    },\n    {\n      id: \"8\",\n      x: 150,\n      y: 250,\n    },\n    {\n      id: \"9\",\n      x: 350,\n      y: 250,\n    },\n    {\n      id: \"10\",\n      x: 150,\n      y: 300,\n    },\n    {\n      id: \"11\",\n      x: 350,\n      y: 300,\n    },\n    {\n      id: \"12\",\n      x: 150,\n      y: 350,\n    },\n    {\n      id: \"13\",\n      x: 350,\n      y: 350,\n    },\n    {\n      id: \"14\",\n      x: 150,\n      y: 400,\n    },\n    {\n      id: \"15\",\n      x: 350,\n      y: 400,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"default arrow\",\n      style: {\n        endArrow: true,\n      },\n    },\n    {\n      id: \"edge1\",\n      source: \"2\",\n      target: \"3\",\n      label: \"triangle arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.triangle(),\n        },\n      },\n    },\n    {\n      id: \"edge2\",\n      source: \"4\",\n      target: \"5\",\n      label: \"vee arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.vee(),\n        },\n      },\n    },\n    {\n      id: \"edge3\",\n      source: \"6\",\n      target: \"7\",\n      label: \"circle arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.circle(5, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge4\",\n      source: \"8\",\n      target: \"9\",\n      label: \"diamond arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.diamond(10, 10, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge5\",\n      source: \"10\",\n      target: \"11\",\n      label: \"rect arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.rect(10, 10, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge6\",\n      source: \"12\",\n      target: \"13\",\n      label: \"rect arrow 2\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.rect(10, 2, 5),\n          d: 5,\n        },\n      },\n    },\n    {\n      id: \"edge7\",\n      source: \"14\",\n      target: \"15\",\n      label: \"triangleRect arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.triangleRect(10, 10, 10, 2, 4),\n        },\n      },\n    },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.style.stroke = \"#F6BD16\";\n  console.log(edge.style.endArrow);\n  if (edge.id !== \"edge0\") edge.style.endArrow.fill = \"#F6BD16\";\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/built-in-arrows/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/built-in-arrows/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/built-in-arrows/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * built in arrows\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        size: 15,\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      modes: {\n        // behaviors\n        default: [\"drag-node\"],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/built-in-arrows/index.json",
    "content": "{\n  \"defaultTitle\": \"默认内置箭头\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-circle/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 250, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 300, y: 200, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-circle/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-circle/index.axml",
    "content": "<text>Click the bottom marker to collapse/expand the combo.</text>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-circle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * cCircle\n */\n\n// The symbols for the marker inside the combo\nconst collapseIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n  ];\n};\nconst expandIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n    [\"M\", x - r + r, y - r + 4],\n    [\"L\", x, y + r - 4],\n  ];\n};\n\nF6.registerCombo(\n  \"cCircle\",\n  {\n    drawShape: function draw(cfg, group) {\n      const self = this;\n      // Get the shape style, where the style.r corresponds to the R in the Illustration of Built-in Rect Combo\n      const style = self.getShapeStyle(cfg);\n      // Add a circle shape as keyShape which is the same as the extended 'circle' type Combo\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          ...style,\n          x: 0,\n          y: 0,\n          r: style.r,\n        },\n        draggable: true,\n        name: \"combo-keyShape\",\n      });\n      // Add the marker on the bottom\n      group.addShape(\"marker\", {\n        attrs: {\n          ...style,\n          fill: \"#fff\",\n          opacity: 1,\n          x: 0,\n          y: style.r,\n          r: 10,\n          symbol: collapseIcon,\n        },\n        draggable: true,\n        name: \"combo-marker-shape\",\n      });\n\n      return circle;\n    },\n    // Define the updating logic for the marker\n    afterUpdate: function afterUpdate(cfg, combo) {\n      const self = this;\n      // Get the shape style, where the style.r corresponds to the R in the Illustration of Built-in Rect Combo\n      const style = self.getShapeStyle(cfg);\n      const group = combo.get(\"group\");\n      // Find the marker shape in the graphics group of the Combo\n      const marker = group.find(\n        (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n      );\n      // Update the marker shape\n      marker.attr({\n        x: 0,\n        y: style.r,\n        // The property 'collapsed' in the combo data represents the collapsing state of the Combo\n        // Update the symbol according to 'collapsed'\n        symbol: cfg.collapsed ? expandIcon : collapseIcon,\n      });\n    },\n  },\n  \"circle\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      // Configure the combos globally\n      defaultCombo: {\n        // The type of the combos. You can also assign type in the data of combos\n        type: \"cCircle\",\n        labelCfg: {\n          refY: 2,\n        },\n        // ... Other global configurations for combos\n      },\n      modes: {\n        default: [\"drag-combo\", \"drag-node\", \"drag-canvas\"],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // collapse/expand when click the marker\n    this.graph.on(\"combo:tap\", (e) => {\n      if (e.target.get(\"name\") === \"combo-marker-shape\") {\n        // graph.collapseExpandCombo(e.item.getModel().id);\n        this.graph.collapseExpandCombo(e.item);\n        if (this.graph.get(\"layout\")) this.graph.layout();\n        else this.graph.refreshPositions();\n      }\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-circle/index.json",
    "content": "{\n  \"defaultTitle\": \"带有Marker的圆\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-rect/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 250, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 300, y: 200, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-rect/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-rect/index.axml",
    "content": "<text>Click the bottom marker to collapse/expand the combo.</text>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * cRect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    // The symbols for the marker inside the combo\n    const collapseIcon = (x, y, r) => {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n      ];\n    };\n    const expandIcon = (x, y, r) => {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n        [\"M\", x - r + r, y - r + 4],\n        [\"L\", x, y + r - 4],\n      ];\n    };\n\n    F6.registerCombo(\n      \"cRect\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const self = this;\n          // Get the padding from the configuration\n          cfg.padding = cfg.padding || [50, 20, 20, 20];\n          // Get the shape's style, where the style.width and style.height correspond to the width and height in the figure of Illustration of Built-in Rect Combo\n          const style = self.getShapeStyle(cfg);\n          // Add a rect shape as the keyShape which is the same as the extended rect Combo\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              ...style,\n              x: -style.width / 2 - (cfg.padding[3] - cfg.padding[1]) / 2,\n              y: -style.height / 2 - (cfg.padding[0] - cfg.padding[2]) / 2,\n              width: style.width,\n              height: style.height,\n            },\n            draggable: true,\n            name: \"combo-keyShape\",\n          });\n          // Add the circle on the right\n          group.addShape(\"marker\", {\n            attrs: {\n              ...style,\n              fill: \"#fff\",\n              opacity: 1,\n              // cfg.style.width and cfg.style.heigth correspond to the innerWidth and innerHeight in the figure of Illustration of Built-in Rect Combo\n              x: cfg.style.width / 2 + cfg.padding[1],\n              y: (cfg.padding[2] - cfg.padding[0]) / 2,\n              r: 10,\n              symbol: collapseIcon,\n            },\n            draggable: true,\n            name: \"combo-marker-shape\",\n          });\n          return rect;\n        },\n        // Define the updating logic of the right circle\n        afterUpdate: function afterUpdate(cfg, combo) {\n          const group = combo.get(\"group\");\n          // Find the circle shape in the graphics group of the Combo by name\n          const marker = group.find(\n            (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n          );\n          // Update the position of the right circle\n          marker.attr({\n            // cfg.style.width and cfg.style.heigth correspond to the innerWidth and innerHeight in the figure of Illustration of Built-in Rect Combo\n            x: cfg.style.width / 2 + cfg.padding[1],\n            y: (cfg.padding[2] - cfg.padding[0]) / 2,\n            // The property 'collapsed' in the combo data represents the collapsing state of the Combo\n            // Update the symbol according to 'collapsed'\n            symbol: cfg.collapsed ? expandIcon : collapseIcon,\n          });\n        },\n      },\n      \"rect\",\n    );\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      // Configure the combos globally\n      defaultCombo: {\n        // The type of the combos. You can also assign type in the data of combos\n        type: \"cRect\",\n        // ... Other global configurations for combos\n      },\n      modes: {\n        default: [\"drag-combo\", \"drag-node\", \"drag-canvas\"],\n      },\n    });\n\n    // collapse/expand when click the marker\n    this.graph.on(\"combo:tap\", (e) => {\n      if (e.target.get(\"name\") === \"combo-marker-shape\") {\n        // graph.collapseExpandCombo(e.item.getModel().id);\n        this.graph.collapseExpandCombo(e.item);\n        if (this.graph.get(\"layout\")) this.graph.layout();\n        else this.graph.refreshPositions();\n      }\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/c-rect/index.json",
    "content": "{\n  \"defaultTitle\": \"带有Marker的矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card/data.js",
    "content": "export default {\n  nodes: [\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: true,\n      dataType: \"root\",\n      keyInfo: \"this is a card node info\",\n      x: 100,\n      y: 50,\n    },\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: false,\n      dataType: \"subRoot\",\n      keyInfo: \"this is sub root\",\n      x: 100,\n      y: 150,\n    },\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: false,\n      dataType: \"subRoot\",\n      keyInfo: \"this is sub root\",\n      x: 100,\n      y: 250,\n      children: [\n        {\n          name: \"sub\",\n        },\n      ],\n    },\n  ],\n  edges: [],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * card\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const ERROR_COLOR = \"#F5222D\";\n    const getNodeConfig = (node) => {\n      if (node.nodeError) {\n        return {\n          basicColor: ERROR_COLOR,\n          fontColor: \"#FFF\",\n          borderColor: ERROR_COLOR,\n          bgColor: \"#E66A6C\",\n        };\n      }\n      let config = {\n        basicColor: \"#5B8FF9\",\n        fontColor: \"#5B8FF9\",\n        borderColor: \"#5B8FF9\",\n        bgColor: \"#C6E5FF\",\n      };\n      switch (node.type) {\n        case \"root\": {\n          config = {\n            basicColor: \"#E3E6E8\",\n            fontColor: \"rgba(0,0,0,0.85)\",\n            borderColor: \"#E3E6E8\",\n            bgColor: \"#5b8ff9\",\n          };\n          break;\n        }\n        default:\n          break;\n      }\n      return config;\n    };\n\n    const COLLAPSE_ICON = function COLLAPSE_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n      ];\n    };\n    const EXPAND_ICON = function EXPAND_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n        [\"M\", x - r + r, y - r + 4],\n        [\"L\", x, y + r - 4],\n      ];\n    };\n    const nodeBasicMethod = {\n      createNodeBox: (group, config, w, h, isRoot) => {\n        /* 最外面的大矩形 */\n        const container = group.addShape(\"rect\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            width: w,\n            heigh: h,\n          },\n          name: \"big-rect-shape\",\n        });\n        if (!isRoot) {\n          /* 左边的小圆点 */\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 3,\n              y: h / 2,\n              r: 6,\n              fill: config.basicColor,\n            },\n            name: \"left-dot-shape\",\n          });\n        }\n        /* 矩形 */\n        group.addShape(\"rect\", {\n          attrs: {\n            x: 3,\n            y: 0,\n            width: w - 19,\n            height: h,\n            fill: config.bgColor,\n            stroke: config.borderColor,\n            radius: 2,\n            cursor: \"pointer\",\n          },\n          name: \"rect-shape\",\n        });\n\n        /* 左边的粗线 */\n        group.addShape(\"rect\", {\n          attrs: {\n            x: 3,\n            y: 0,\n            width: 3,\n            height: h,\n            fill: config.basicColor,\n            radius: 1.5,\n          },\n          name: \"left-border-shape\",\n        });\n        return container;\n      },\n      /* 生成树上的 marker */\n      createNodeMarker: (group, collapsed, x, y) => {\n        group.addShape(\"circle\", {\n          attrs: {\n            x,\n            y,\n            r: 13,\n            fill: \"rgba(47, 84, 235, 0.05)\",\n            opacity: 0,\n            zIndex: -2,\n          },\n          name: \"collapse-icon-bg\",\n        });\n        group.addShape(\"marker\", {\n          attrs: {\n            x,\n            y,\n            r: 7,\n            symbol: collapsed ? EXPAND_ICON : COLLAPSE_ICON,\n            stroke: \"rgba(0,0,0,0.25)\",\n            fill: \"rgba(0,0,0,0)\",\n            lineWidth: 1,\n            cursor: \"pointer\",\n          },\n          name: \"collapse-icon\",\n        });\n      },\n      afterDraw: (cfg, group) => {\n        /* 操作 marker 的背景色显示隐藏 */\n        const icon = group.find(\n          (element) => element.get(\"name\") === \"collapse-icon\",\n        );\n        if (icon) {\n          const bg = group.find(\n            (element) => element.get(\"name\") === \"collapse-icon-bg\",\n          );\n          icon.on(\"mouseenter\", () => {\n            bg.attr(\"opacity\", 1);\n            this.graph.get(\"canvas\").draw();\n          });\n          icon.on(\"mouseleave\", () => {\n            bg.attr(\"opacity\", 0);\n            this.graph.get(\"canvas\").draw();\n          });\n        }\n        /* ip 显示 */\n        const ipBox = group.find((element) => element.get(\"name\") === \"ip-box\");\n        if (ipBox) {\n          /* ip 复制的几个元素 */\n          const ipLine = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-line\",\n          );\n          const ipBG = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-bg\",\n          );\n          const ipIcon = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-icon\",\n          );\n          const ipCPBox = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-box\",\n          );\n\n          const onMouseEnter = () => {\n            ipLine.attr(\"opacity\", 1);\n            ipBG.attr(\"opacity\", 1);\n            ipIcon.attr(\"opacity\", 1);\n            this.graph.get(\"canvas\").draw();\n          };\n          const onMouseLeave = () => {\n            ipLine.attr(\"opacity\", 0);\n            ipBG.attr(\"opacity\", 0);\n            ipIcon.attr(\"opacity\", 0);\n            this.graph.get(\"canvas\").draw();\n          };\n          ipBox.on(\"mouseenter\", () => {\n            onMouseEnter();\n          });\n          ipBox.on(\"mouseleave\", () => {\n            onMouseLeave();\n          });\n          ipCPBox.on(\"mouseenter\", () => {\n            onMouseEnter();\n          });\n          ipCPBox.on(\"mouseleave\", () => {\n            onMouseLeave();\n          });\n          ipCPBox.on(\"click\", () => {});\n        }\n      },\n      setState: (name, value, item) => {\n        const hasOpacityClass = [\n          \"ip-cp-line\",\n          \"ip-cp-bg\",\n          \"ip-cp-icon\",\n          \"ip-cp-box\",\n          \"ip-box\",\n          \"collapse-icon-bg\",\n        ];\n        const group = item.getContainer();\n        const childrens = group.get(\"children\");\n        this.graph.setAutoPaint(false);\n        if (name === \"emptiness\") {\n          if (value) {\n            childrens.forEach((shape) => {\n              if (hasOpacityClass.indexOf(shape.get(\"name\")) > -1) {\n                return;\n              }\n              shape.attr(\"opacity\", 0.4);\n            });\n          } else {\n            childrens.forEach((shape) => {\n              if (hasOpacityClass.indexOf(shape.get(\"name\")) > -1) {\n                return;\n              }\n              shape.attr(\"opacity\", 1);\n            });\n          }\n        }\n        this.graph.setAutoPaint(true);\n      },\n    };\n\n    F6.registerNode(\"card-node\", {\n      draw: (cfg, group) => {\n        const config = getNodeConfig(cfg);\n        const isRoot = cfg.dataType === \"root\";\n        const { nodeError } = cfg;\n        /* the biggest rect */\n        const container = nodeBasicMethod.createNodeBox(\n          group,\n          config,\n          243,\n          64,\n          isRoot,\n        );\n\n        if (cfg.dataType !== \"root\") {\n          /* the type text */\n          group.addShape(\"text\", {\n            attrs: {\n              text: cfg.dataType,\n              x: 3,\n              y: -10,\n              fontSize: 12,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: \"rgba(0,0,0,0.65)\",\n            },\n            name: \"type-text-shape\",\n          });\n        }\n\n        if (cfg.ip) {\n          /* ip start */\n          /* ipBox */\n          const ipRect = group.addShape(\"rect\", {\n            attrs: {\n              fill: nodeError ? null : \"#FFF\",\n              stroke: nodeError ? \"rgba(255,255,255,0.65)\" : null,\n              radius: 2,\n              cursor: \"pointer\",\n            },\n            name: \"ip-container-shape\",\n          });\n\n          /* ip */\n          const ipText = group.addShape(\"text\", {\n            attrs: {\n              text: cfg.ip,\n              x: 0,\n              y: 19,\n              fontSize: 12,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: nodeError ? \"rgba(255,255,255,0.85)\" : \"rgba(0,0,0,0.65)\",\n              cursor: \"pointer\",\n            },\n            name: \"ip-text-shape\",\n          });\n\n          const ipBBox = ipText.getBBox();\n          /* the distance from the IP to the right is 12px */\n          ipText.attr({\n            x: 224 - 12 - ipBBox.width,\n          });\n          /* ipBox */\n          ipRect.attr({\n            x: 224 - 12 - ipBBox.width - 4,\n            y: ipBBox.minY - 5,\n            width: ipBBox.width + 8,\n            height: ipBBox.height + 10,\n          });\n\n          /* a transparent shape on the IP for click listener */\n          group.addShape(\"rect\", {\n            attrs: {\n              stroke: \"\",\n              cursor: \"pointer\",\n              x: 224 - 12 - ipBBox.width - 4,\n              y: ipBBox.minY - 5,\n              width: ipBBox.width + 8,\n              height: ipBBox.height + 10,\n              fill: \"#fff\",\n              opacity: 0,\n            },\n            name: \"ip-box\",\n          });\n\n          /* copyIpLine */\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 194,\n              y: 7,\n              width: 1,\n              height: 24,\n              fill: \"#E3E6E8\",\n              opacity: 0,\n            },\n            name: \"ip-cp-line\",\n          });\n          /* copyIpBG */\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 195,\n              y: 8,\n              width: 22,\n              height: 22,\n              fill: \"#FFF\",\n              cursor: \"pointer\",\n              opacity: 0,\n            },\n            name: \"ip-cp-bg\",\n          });\n          /* copyIpIcon */\n          group.addShape(\"image\", {\n            attrs: {\n              x: 200,\n              y: 13,\n              height: 12,\n              width: 10,\n              img: \"https://os.alipayobjects.com/rmsportal/DFhnQEhHyPjSGYW.png\",\n              cursor: \"pointer\",\n              opacity: 0,\n            },\n            name: \"ip-cp-icon\",\n          });\n          /* a transparent rect on the icon area for click listener */\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 195,\n              y: 8,\n              width: 22,\n              height: 22,\n              fill: \"#FFF\",\n              cursor: \"pointer\",\n              opacity: 0,\n            },\n            name: \"ip-cp-box\",\n            tooltip: \"Copy the IP\",\n          });\n\n          /* ip end */\n        }\n\n        /* name */\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.name,\n            x: 19,\n            y: 19,\n            fontSize: 14,\n            fontWeight: 700,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: config.fontColor,\n            cursor: \"pointer\",\n          },\n          name: \"name-text-shape\",\n        });\n\n        /* the description text */\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.keyInfo,\n            x: 19,\n            y: 45,\n            fontSize: 14,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: config.fontColor,\n            cursor: \"pointer\",\n          },\n          name: \"bottom-text-shape\",\n        });\n\n        if (nodeError) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 191,\n              y: 62,\n              text: \"⚠️\",\n              fill: \"#000\",\n              fontSize: 18,\n            },\n            name: \"error-text-shape\",\n          });\n        }\n\n        const hasChildren = cfg.children && cfg.children.length > 0;\n        if (hasChildren) {\n          nodeBasicMethod.createNodeMarker(group, cfg.collapsed, 236, 32);\n        }\n        return container;\n      },\n      afterDraw: nodeBasicMethod.afterDraw,\n      setState: nodeBasicMethod.setState,\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        type: \"card-node\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card/index.json",
    "content": "{\n  \"defaultTitle\": \"卡片\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      title: \"node1\",\n      error: true,\n      nodeType: \"a\",\n      id: \"node1\",\n      nodeLevel: 2,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      x: 100,\n      y: 100,\n    },\n    {\n      title: \"node2\",\n      error: false,\n      nodeType: \"b\",\n      id: \"node2\",\n      nodeLevel: 0,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      x: 100,\n      y: 200,\n    },\n    {\n      title: \"node3\",\n      error: false,\n      nodeType: \"a\",\n      id: \"node3\",\n      nodeLevel: 3,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      collapse: true,\n      x: 100,\n      y: 300,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card-node/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card-node/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card-node/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * cardNode\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const ICON_MAP = {\n      a: \"https://gw.alipayobjects.com/mdn/rms_8fd2eb/afts/img/A*0HC-SawWYUoAAAAAAAAAAABkARQnAQ\",\n      b: \"https://gw.alipayobjects.com/mdn/rms_8fd2eb/afts/img/A*sxK0RJ1UhNkAAAAAAAAAAABkARQnAQ\",\n    };\n\n    F6.registerNode(\n      \"card-node\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const color = cfg.error ? \"#F4664A\" : \"#30BF78\";\n          const r = 2;\n          const shape = group.addShape(\"rect\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              width: 200,\n              height: 60,\n              stroke: color,\n              radius: r,\n            },\n            name: \"main-box\",\n            draggable: true,\n          });\n\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              width: 200,\n              height: 20,\n              fill: color,\n              radius: [r, r, 0, 0],\n            },\n            name: \"title-box\",\n            draggable: true,\n          });\n\n          // left icon\n          group.addShape(\"image\", {\n            attrs: {\n              x: 4,\n              y: 2,\n              height: 16,\n              width: 16,\n              cursor: \"pointer\",\n              img: ICON_MAP[cfg.nodeType || \"app\"],\n            },\n            name: \"node-icon\",\n          });\n\n          // title text\n          group.addShape(\"text\", {\n            attrs: {\n              textBaseline: \"top\",\n              y: 2,\n              x: 24,\n              lineHeight: 20,\n              text: cfg.title,\n              fill: \"#fff\",\n            },\n            name: \"title\",\n          });\n\n          if (cfg.nodeLevel > 0) {\n            group.addShape(\"marker\", {\n              attrs: {\n                x: 184,\n                y: 30,\n                r: 6,\n                cursor: \"pointer\",\n                symbol: cfg.collapse ? F6.Marker.expand : F6.Marker.collapse,\n                stroke: \"#666\",\n                lineWidth: 1,\n              },\n              name: \"collapse-icon\",\n            });\n          }\n\n          // The content list\n          cfg.panels.forEach((item, index) => {\n            // name text\n            group.addShape(\"text\", {\n              attrs: {\n                textBaseline: \"top\",\n                y: 25,\n                x: 24 + index * 60,\n                lineHeight: 20,\n                text: item.title,\n                fill: \"rgba(0,0,0, 0.4)\",\n              },\n              name: `index-title-${index}`,\n            });\n\n            // value text\n            group.addShape(\"text\", {\n              attrs: {\n                textBaseline: \"top\",\n                y: 42,\n                x: 24 + index * 60,\n                lineHeight: 20,\n                text: item.value,\n                fill: \"#595959\",\n              },\n              name: `index-title-${index}`,\n            });\n          });\n          return shape;\n        },\n      },\n      \"single-node\",\n    );\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        type: \"card-node\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/card-node/index.json",
    "content": "{\n  \"defaultTitle\": \"卡片2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"circle\",\n      label: \"Circle\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * circle\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n\n      defaultNode: {\n        /* node type */\n        type: \"circle\",\n        /* node size */\n        size: [60],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle/index.json",
    "content": "{\n  \"defaultTitle\": \"圆形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle-with-combo/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 250,\n      y: 150,\n      comboId: \"combo\",\n    },\n    {\n      id: \"node2\",\n      x: 350,\n      y: 150,\n      comboId: \"combo\",\n    },\n  ],\n  combos: [\n    {\n      id: \"combo\",\n      label: \"Combo\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle-with-combo/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle-with-combo/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle-with-combo/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * circleWithCombo\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n        ],\n      },\n      defaultCombo: {\n        type: \"circle\",\n        /* style for the keyShape */\n        // style: {\n        //   lineWidth: 1,\n        // },\n        labelCfg: {\n          /* label's offset to the keyShape */\n          // refY: 10,\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"top\",\n          /* label's style */\n          // style: {\n          //   fontSize: 18,\n          // },\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      /* you can extend it or override it as you want */\n      // comboStateStyles: {\n      //   active: {\n      //     fill: '#f00',\n      //     opacity: 0.5\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/circle-with-combo/index.json",
    "content": "{\n  \"defaultTitle\": \"圆形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic1/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node0\",\n      x: 200,\n      y: 10,\n      size: 20,\n    },\n    {\n      id: \"node1\",\n      x: 200,\n      y: 50,\n      label: \"1222\",\n      type: \"my-rect\",\n    },\n    {\n      id: \"node2\",\n      x: 150,\n      y: 150,\n      type: \"my-rect\",\n    },\n    {\n      id: \"node3\",\n      x: 250,\n      y: 150,\n      type: \"my-rect\",\n    },\n    {\n      id: \"node4\",\n      x: 200,\n      y: 250,\n      type: \"my-rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node0\",\n      target: \"node1\",\n    },\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n    },\n    {\n      source: \"node2\",\n      target: \"node4\",\n    },\n    {\n      source: \"node3\",\n      target: \"node4\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic1/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic1/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic1/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * cubic1\n */\n\nF6.registerNode(\n  \"my-rect\",\n  {\n    getAnchorPoints: function getAnchorPoints() {\n      return [\n        [0.5, 0],\n        [0.5, 1],\n      ];\n    },\n  },\n  \"rect\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultEdge: {\n        type: \"cubic-vertical\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic1/index.json",
    "content": "{\n  \"defaultTitle\": \"三次贝塞尔曲线-垂直\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node5\",\n      x: 150,\n      y: 200,\n      label: \"5\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node6\",\n      x: 300,\n      y: 150,\n      label: \"6\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node7\",\n      x: 300,\n      y: 250,\n      label: \"7\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node5\",\n      target: \"node6\",\n      type: \"cubic-horizontal\",\n    },\n    {\n      source: \"node5\",\n      target: \"node7\",\n      type: \"cubic-horizontal\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic2/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic2/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * cubic2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/cubic2/index.json",
    "content": "{\n  \"defaultTitle\": \"三次贝塞尔曲线-水平\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-arrows/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 50,\n    },\n    {\n      id: \"2\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 100,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"custom arrow 1\",\n      style: {\n        endArrow: {\n          path: \"M 3,-5 L 3,5 L 15,10 L 15,-10 Z\",\n        },\n      },\n    },\n    {\n      id: \"edge1\",\n      source: \"2\",\n      target: \"3\",\n      label: \"custom arrow 2\",\n      style: {\n        endArrow: {\n          path: \"M0,0 L10,4 L14,14 L18,4 L28,0 L18,-4 L14,-14 L10,-4 Z\",\n        },\n      },\n    },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.style.stroke = \"#F6BD16\";\n  console.log(edge.style.endArrow);\n  edge.style.endArrow.fill = \"#F6BD16\";\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-arrows/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-arrows/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-arrows/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * custom Arrows\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        size: 15,\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      modes: {\n        // behaviors\n        default: [\"drag-node\"],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-arrows/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义箭头\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"7\",\n      x: 150,\n      y: 100,\n      size: 40,\n      anchorPoints: [\n        [1, 0.5],\n        [1, 0],\n      ],\n    },\n    {\n      id: \"8\",\n      x: 300,\n      y: 200,\n      size: 40,\n      anchorPoints: [\n        [0, 0.5],\n        [0, 1],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"7\",\n      target: \"8\",\n      sourceAnchor: 0,\n      targetAnchor: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * customPolyline\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    // 注册边\n    F6.registerEdge(\n      \"line-arrow\",\n      {\n        getPath(points) {\n          const startPoint = points[0];\n          const endPoint = points[1];\n          return [\n            [\"M\", startPoint.x, startPoint.y],\n            [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y],\n            [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y],\n            [\"L\", endPoint.x, endPoint.y],\n          ];\n        },\n        getShapeStyle(cfg) {\n          const { startPoint } = cfg;\n          const { endPoint } = cfg;\n          const controlPoints = this.getControlPoints(cfg);\n          let points = [startPoint]; // the start point\n          // the control points\n          if (controlPoints) {\n            points = points.concat(controlPoints);\n          }\n          // the end point\n          points.push(endPoint);\n          const path = this.getPath(points);\n          const style = Object.assign(\n            {},\n            F6.Global.defaultEdge.style,\n            {\n              stroke: \"#BBB\",\n              lineWidth: 1,\n              path,\n            },\n            cfg.style,\n          );\n          return style;\n        },\n      },\n      \"line\",\n    );\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\", \"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"circle\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        linkPoints: {\n          left: true,\n          right: true,\n          fill: \"#fff\",\n          stroke: \"#1890FF\",\n          size: 3,\n        },\n      },\n      defaultEdge: {\n        type: \"line-arrow\",\n        style: {\n          stroke: \"#F6BD16\",\n          startArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n          endArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义折线\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"7\",\n      x: 150,\n      y: 100,\n      size: 40,\n      anchorPoints: [\n        [1, 0.5],\n        [1, 0],\n      ],\n    },\n    {\n      id: \"8\",\n      x: 300,\n      y: 200,\n      size: 40,\n      anchorPoints: [\n        [0, 0.5],\n        [0, 1],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"7\",\n      target: \"8\",\n      sourceAnchor: 0,\n      targetAnchor: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline2/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline2/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * customPolyline2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerEdge(\"line-arrow\", {\n      options: {\n        style: {\n          stroke: \"#ccc\",\n        },\n      },\n      draw: function draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n\n        const stroke =\n          (cfg.style && cfg.style.stroke) || this.options.style.stroke;\n        const startArrow = (cfg.style && cfg.style.startArrow) || undefined;\n        const endArrow = (cfg.style && cfg.style.endArrow) || undefined;\n\n        const keyShape = group.addShape(\"path\", {\n          attrs: {\n            path: [\n              [\"M\", startPoint.x, startPoint.y],\n              [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y],\n              [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y],\n              [\"L\", endPoint.x, endPoint.y],\n            ],\n            stroke,\n            lineWidth: 1,\n            startArrow,\n            endArrow,\n          },\n          className: \"edge-shape\",\n          name: \"edge-shape\",\n        });\n        return keyShape;\n      },\n    });\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\", \"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"circle\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        linkPoints: {\n          left: true,\n          right: true,\n          fill: \"#fff\",\n          stroke: \"#1890FF\",\n          size: 3,\n        },\n      },\n      defaultEdge: {\n        type: \"line-arrow\",\n        style: {\n          stroke: \"#F6BD16\",\n          startArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n          endArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/custom-polyline2/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义折线2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/diamond/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"diamond\",\n      label: \"Diamond\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/diamond/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/diamond/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/diamond/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * diamond\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n\n      defaultNode: {\n        /* node type */\n        type: \"diamond\",\n        /* node size */\n        size: [80, 60],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/diamond/index.json",
    "content": "{\n  \"defaultTitle\": \"模态菱形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/donut/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"donut\",\n      label: \"Donut\",\n      x: 250,\n      y: 150,\n      // the attributes for drawing donut\n      donutAttrs: {\n        prop1: 10,\n        prop2: 20,\n        prop3: 25,\n      },\n      // the color map for drawing donut\n      donutColorMap: {\n        prop1: \"#8eaade\",\n        prop2: \"#5c7cb8\",\n        prop3: \"#1e3f7d\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/donut/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/donut/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/donut/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * donut\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      fitViewPadding: 60,\n\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        /* node type, the priority is lower than the type in the node data */\n        type: \"donut\",\n        /* node size */\n        size: 60,\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        // linkPoints: {\n        //   top: true,\n        //   right: true,\n        //   bottom: true,\n        //   left: true,\n        //   /* linkPoints' size, 8 by default */\n        //   //   size: 5,\n        //   /* linkPoints' style */\n        //   //   fill: '#ccc',\n        //   //   stroke: '#333',\n        //   //   lineWidth: 2,\n        // },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/donut/index.json",
    "content": "{\n  \"defaultTitle\": \"甜甜圈\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-bg/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 200,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 350,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"edge 1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n      label: \"edge 2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n      label: \"edge 3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-bg/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-bg/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-bg/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * edgeBg\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        type: \"circle\",\n        labelCfg: {\n          position: \"bottom\",\n        },\n      },\n      defaultEdge: {\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            fill: \"#1890ff\",\n            fontSize: 14,\n            background: {\n              fill: \"#ffffff\",\n              stroke: \"#9EC9FF\",\n              padding: [2, 2, 2, 2],\n              radius: 2,\n            },\n          },\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        // style configurations for hover state\n        hover: {\n          fillOpacity: 0.8,\n        },\n        // style configurations for selected state\n        selected: {\n          lineWidth: 5,\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-bg/index.json",
    "content": "{\n  \"defaultTitle\": \"边上文本背景\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-mul-label/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 100,\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      // The left and right labels\n      label: [\"hello\", \"world\"],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-mul-label/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-mul-label/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-mul-label/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * 多标签边\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerEdge(\"multipleLabelsEdge\", {\n      options: {\n        style: {\n          stroke: \"#000\",\n        },\n      },\n      labelAutoRotate: true,\n      draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n        const stroke =\n          (cfg.style && cfg.style.stroke) || this.options.style.stroke;\n\n        const shape = group.addShape(\"path\", {\n          attrs: {\n            stroke,\n            path: [\n              [\"M\", startPoint.x, startPoint.y],\n              [\"L\", endPoint.x, endPoint.y],\n            ],\n          },\n          name: \"path-shape\",\n        });\n        if (cfg.label && cfg.label.length) {\n          // the left label\n          group.addShape(\"text\", {\n            attrs: {\n              text: cfg.label[0],\n              fill: \"#595959\",\n              textAlign: \"start\",\n              textBaseline: \"middle\",\n              x: startPoint.x,\n              y: startPoint.y - 10,\n            },\n            name: \"left-text-shape\",\n          });\n          if (cfg.label.length > 1) {\n            // the right label\n            group.addShape(\"text\", {\n              attrs: {\n                text: cfg.label[1],\n                fill: \"#595959\",\n                textAlign: \"end\",\n                textBaseline: \"middle\",\n                x: endPoint.x,\n                y: endPoint.y - 10,\n              },\n              name: \"right-text-shape\",\n            });\n          }\n        }\n        // return the keyShape\n        return shape;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\n          {\n            type: \"drag-node\",\n            delegate: false,\n          },\n          \"drag-canvas\",\n          {\n            type: \"zoom-canvas\",\n            sensitivity: 0.5,\n          },\n        ],\n      },\n      defaultNode: {\n        type: \"circle\",\n        size: [50],\n        linkPoints: {\n          left: true,\n          right: true,\n        },\n      },\n      defaultEdge: {\n        type: \"multipleLabelsEdge\",\n        style: {\n          stroke: \"#F6BD16\",\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/edge-mul-label/index.json",
    "content": "{\n  \"defaultTitle\": \"多标签边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/ellipse/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"ellipse\",\n      label: \"Ellipse\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/ellipse/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/ellipse/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/ellipse/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * ellipse\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        type: \"ellipse\",\n        size: [80, 50],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/ellipse/index.json",
    "content": "{\n  \"defaultTitle\": \"椭圆\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/extra-shape/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 100,\n    },\n    {\n      id: \"node3\",\n      x: 300,\n      y: 200,\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      midPointColor: \"#f00\",\n      quatileColor: \"#f00\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      midPointColor: \"#0f0\",\n      quatileColor: \"#0f0\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/extra-shape/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/extra-shape/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/extra-shape/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * extraShapes\n */\n// 注册边\nF6.registerEdge(\n  \"extra-shape-edge\",\n  {\n    afterDraw(cfg, group) {\n      // get the first shape in the graphics group of this edge, it is the path of the edge here\n      // 获取图形组中的第一个图形，在这里就是边的路径图形\n      const shape = group.get(\"children\")[0];\n      // get the coordinate of the mid point on the path\n      // 获取路径图形的中点坐标\n      const midPoint = shape.getPoint(0.5);\n      const rectColor = cfg.midPointColor || \"#333\";\n      // add a rect on the mid point of the path. note that the origin of a rect shape is on its lefttop\n      // 在中点增加一个矩形，注意矩形的原点在其左上角\n      group.addShape(\"rect\", {\n        attrs: {\n          width: 10,\n          height: 10,\n          fill: rectColor || \"#333\",\n          // x and y should be minus width / 2 and height / 2 respectively to translate the center of the rect to the midPoint\n          // x 和 y 分别减去 width / 2 与 height / 2，使矩形中心在 midPoint 上\n          x: midPoint.x - 5,\n          y: midPoint.y - 5,\n        },\n      });\n\n      // get the coordinate of the quatile on the path\n      // 获取路径上的四分位点坐标\n      const quatile = shape.getPoint(0.25);\n      const quatileColor = cfg.quatileColor || \"#333\";\n      // add a circle on the quatile of the path\n      // 在四分位点上放置一个圆形\n      group.addShape(\"circle\", {\n        attrs: {\n          r: 5,\n          fill: quatileColor || \"#333\",\n          x: quatile.x,\n          y: quatile.y,\n        },\n      });\n    },\n    update: undefined,\n  },\n  \"cubic\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\", \"drag-canvas\"],\n      },\n      defaultEdge: {\n        type: \"extra-shape-edge\",\n        style: {\n          stroke: \"#F6BD16\",\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/extra-shape/index.json",
    "content": "{\n  \"defaultTitle\": \"添加额外图形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/image/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"image\",\n      img: \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/image/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/image/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/image/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * image\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n\n      defaultNode: {\n        type: \"image\",\n        size: [260, 80],\n        clipCfg: {\n          show: false,\n          // Clip type options: circle, ellipse, rect, path\n          type: \"circle\",\n          // circle\n          r: 30,\n          // clip style\n          style: {\n            lineWidth: 1,\n          },\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/image/index.json",
    "content": "{\n  \"defaultTitle\": \"图片\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len/data.js",
    "content": "import F6 from \"@antv/f6\";\n\nconst globalFontSize = 12;\n\nconst fittingString = (str, maxWidth, fontSize) => {\n  const ellipsis = \"...\";\n  const ellipsisLength = F6.Util.getTextSize(ellipsis, fontSize)[0];\n  let currentWidth = 0;\n  let res = str;\n  const pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\"); // distinguish the Chinese charactors and letters\n  str.split(\"\").forEach((letter, i) => {\n    if (currentWidth > maxWidth - ellipsisLength) return;\n    if (pattern.test(letter)) {\n      // Chinese charactors\n      currentWidth += fontSize;\n    } else {\n      // get the width of single letter according to the fontSize\n      currentWidth += F6.Util.getLetterWidth(letter, fontSize);\n    }\n    if (currentWidth > maxWidth - ellipsisLength) {\n      res = `${str.substr(0, i)}${ellipsis}`;\n    }\n  });\n  return res;\n};\n\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      size: 40,\n      label: \"This label is too long to be displayed\",\n      id: \"node1\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      x: 300,\n      y: 100,\n      size: 80,\n      label: \"This label is also too long to be displayed\",\n      id: \"node2\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"This label is too long to be displayed\",\n      labelCfg: {\n        refY: 20,\n        style: {\n          fontSize: globalFontSize,\n        },\n      },\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n\n// Modify the label in the data\ndata.nodes.forEach(function (node) {\n  node.label = fittingString(node.label, node.size, globalFontSize);\n});\ndata.edges.forEach(function (edge) {\n  edge.label = fittingString(edge.label, 120, globalFontSize);\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * labelLen\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        labelCfg: {\n          style: {\n            fontSize: 12,\n          },\n        },\n      },\n      defaultEdge: {\n        color: \"#F6BD16\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len/index.json",
    "content": "{\n  \"defaultTitle\": \"文本超长\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len1/data.js",
    "content": "import F6 from \"@antv/f6\";\n\nconst fittingString = (str, maxWidth, fontSize) => {\n  let currentWidth = 0;\n  let res = str;\n  const pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\"); // distinguish the Chinese charactors and letters\n  str.split(\"\").forEach((letter, i) => {\n    if (currentWidth > maxWidth) return;\n    if (pattern.test(letter)) {\n      // Chinese charactors\n      currentWidth += fontSize;\n    } else {\n      // get the width of single letter according to the fontSize\n      currentWidth += F6.Util.getLetterWidth(letter, fontSize);\n    }\n    if (currentWidth > maxWidth) {\n      res = `${str.substr(0, i)}\\n${str.substr(i)}`;\n    }\n  });\n  return res;\n};\n\nconst globalFontSize = 12;\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      label: fittingString(\n        \"Break the line if it is too long\",\n        80,\n        globalFontSize,\n      ),\n      id: \"node1\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      x: 300,\n      y: 100,\n      label: fittingString(\n        \"Break the line if it is too long\",\n        80,\n        globalFontSize,\n      ),\n      id: \"node2\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: fittingString(\n        \"Break the line if it is too long\",\n        100,\n        globalFontSize,\n      ),\n      labelCfg: {\n        refY: 20,\n      },\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len1/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len1/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len1/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * labelLen1\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        type: \"rect\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        color: \"#F6BD16\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/label-len1/index.json",
    "content": "{\n  \"defaultTitle\": \"使用换行符处理\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/line-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeB\",\n      x: 150,\n      y: 150,\n      label: \"Line1\",\n      type: \"circleLine\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeB2\",\n      x: 500,\n      y: 150,\n      label: \"Line2\",\n      type: \"circleLine\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 50, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [50, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 50, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeB\",\n      target: \"nodeB2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/line-chart/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/line-chart/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/line-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * lineChart\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    F6.registerNode(\"circleLine\", {\n      draw(cfg, group) {\n        const baseR = 30;\n        let nowAngle = 0;\n\n        // Ref line\n        let refR = baseR;\n        const refInc = 10;\n        for (let i = 0; i < 5; i++) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              r: (refR += refInc),\n              stroke: \"#bae7ff\",\n              lineDash: [4, 4],\n            },\n            name: \"circle-shape\",\n          });\n        }\n\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        cfg.details.forEach((cat) => {\n          // 计算一系列点的位置\n          const postions = [];\n          cat.values.forEach((item, index) => {\n            const r = baseR + item;\n            const xPos = r * Math.cos(nowAngle);\n            const yPos = r * Math.sin(nowAngle);\n            nowAngle += everyIncAngle;\n            postions.push([xPos, yPos]);\n            if (index === 4) {\n              const r_ = baseR + item;\n              const xPos_ = r_ * Math.cos(nowAngle);\n              const yPos_ = r_ * Math.sin(nowAngle);\n              postions.push([xPos_, yPos_]);\n            }\n          });\n          const pathArrayL = postions.map((item) => [\"L\", ...item]);\n          // add the connecting line\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", 0, 0], // the top vertex\n                ...pathArrayL,\n                [\"Z\"], // close the path\n              ],\n              stroke: cat.color,\n            },\n            name: \"path-shape\",\n          });\n\n          postions.forEach((pos, index) => {\n            if (index !== 5) {\n              const littleCircle = group.addShape(\"circle\", {\n                // attrs: style\n                attrs: {\n                  x: pos[0],\n                  y: pos[1],\n                  r: 2,\n                  fill: \"black\",\n                  stroke: cat.color,\n                  cursor: \"pointer\",\n                },\n                name: \"circle-shape\",\n              });\n              // 加上交互动画\n              littleCircle.on(\"mouseenter\", function () {\n                littleCircle.animate(\n                  {\n                    r: 5,\n                  },\n                  {\n                    repeat: false,\n                    duration: 200,\n                  },\n                );\n              });\n              littleCircle.on(\"mouseleave\", function () {\n                littleCircle.animate(\n                  {\n                    r: 2,\n                  },\n                  {\n                    repeat: false,\n                    duration: 200,\n                  },\n                );\n              });\n              // set the name\n              littleCircle.set(\"name\", \"littleCircle\");\n            }\n          });\n        });\n\n        // add a circle with the same color with the background color\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0, // 居中\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/line-chart/index.json",
    "content": "{\n  \"defaultTitle\": \"折线图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/list/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"shape2\",\n      x: 0,\n      y: 0,\n      type: \"expandNode\",\n      name: \"网站引流\",\n      values: [\n        {\n          key: \"曝光率\",\n          value: \"19.09\",\n        },\n        {\n          key: \"流入UV\",\n          value: \"910\",\n        },\n        {\n          key: \"点击率\",\n          value: \"90\",\n        },\n        {\n          key: \"占比\",\n          value: \"90\",\n        },\n      ],\n      properties: [\n        {\n          name: \"搜索\",\n          value1: \"102\",\n          value2: \"102\",\n          value3: \"102\",\n          value4: \"102\",\n        },\n        {\n          name: \"扫一扫\",\n          value1: \"102\",\n          value2: \"102\",\n          value3: \"102\",\n          value4: \"102\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/list/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/list/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/list/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data_ from \"./data\";\n/**\n * list:列表\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerNode(\"expandNode\", {\n      draw: function draw(cfg, group) {\n        const mainGroup = group.addGroup({\n          id: \"main-group\",\n        });\n        const keyShape = mainGroup.addShape(\"rect\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            width: 100 + 60 * cfg.values.length,\n            height: 50,\n            fill: \"#C6E5FF\",\n          },\n          name: \"key-rect-shape\",\n        });\n\n        // name text\n        mainGroup.addShape(\"text\", {\n          attrs: {\n            text: cfg.name,\n            fill: \"#000\",\n            width: 130,\n            x: 10,\n            y: 32,\n          },\n          name: \"name-text-shape\",\n        });\n\n        const subGroup = group.addGroup({\n          id: \"sub-group\",\n        });\n        cfg.values.forEach(function (data, index) {\n          subGroup.addShape(\"rect\", {\n            attrs: {\n              x: 110 + index * 60,\n              y: 0,\n              width: 50,\n              height: 50,\n            },\n            name: \"rect-shape\",\n          });\n\n          subGroup.addShape(\"text\", {\n            attrs: {\n              text: data.key,\n              fill: \"#000\",\n              x: 130 + index * 60,\n              y: 20,\n              fontSize: 10,\n              textBaseline: \"middle\",\n              className: \"sub-group-text\",\n            },\n            name: \"sub-text-shape1\",\n          });\n\n          subGroup.addShape(\"text\", {\n            attrs: {\n              text: data.value,\n              fill: \"#000\",\n              x: 130 + index * 60,\n              y: 30,\n              fontSize: 10,\n              textBaseline: \"middle\",\n              textAlign: \"left\",\n              className: \"sub-group-text\",\n            },\n            name: \"name-text-shape2\",\n          });\n        });\n\n        const listGroup = group.addGroup({\n          id: \"detail-list-group\",\n        });\n\n        listGroup.addShape(\"rect\", {\n          attrs: {\n            width: 100 + 60 * cfg.values.length - 70,\n            height: 30 * cfg.properties.length + 20,\n            fill: \"#fff\",\n            x: 70,\n            y: 30,\n          },\n          name: \"list-rect-shape1\",\n        });\n\n        const rectWidth = 100 + 60 * cfg.values.length - 80;\n        cfg.properties.forEach(function (property, index) {\n          listGroup.addShape(\"rect\", {\n            attrs: {\n              width: rectWidth,\n              height: 30,\n              fill: \"#9EC9FF\",\n              x: 80,\n              y: 40 * index + 40,\n            },\n            name: \"list-rect-shape2\",\n          });\n          let count = 0;\n          for (const p in property) {\n            // 每个rect中添加5个文本\n            listGroup.addShape(\"text\", {\n              attrs: {\n                text: property[p],\n                fill: \"#000\",\n                x: 85 + count * (rectWidth / cfg.values.length) - count * 10,\n                y: 40 * index + 40 + 15,\n                fontSize: 10,\n                textBaseline: \"middle\",\n                textAlign: \"left\",\n              },\n              name: \"text-shape\",\n            });\n            count++;\n          }\n        });\n        listGroup.hide();\n        return keyShape;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    this.graph.on(\"node:tap\", function (evt) {\n      const { target } = evt;\n\n      const parentGroup = target.get(\"parent\").get(\"parent\");\n      const detailGroup = parentGroup.findById(\"detail-list-group\");\n      // 将sub-group中的内容网上移动一段距离\n      const subGroup = parentGroup.findById(\"sub-group\");\n      const keyTexts = subGroup.findAll(function (item) {\n        return item.attr(\"className\") === \"sub-group-text\";\n      });\n      const isVisible = detailGroup.get(\"visible\");\n      if (isVisible) {\n        detailGroup.hide();\n        keyTexts.forEach(function (text) {\n          const top = text.attr(\"y\");\n          text.attr(\"y\", top + 10);\n        });\n      } else {\n        keyTexts.forEach(function (text) {\n          const top = text.attr(\"y\");\n          text.attr(\"y\", top - 10);\n        });\n        detailGroup.show();\n      }\n      this.graph.paint();\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/list/index.json",
    "content": "{\n  \"defaultTitle\": \"列表\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/loop/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 150,\n    },\n  ],\n  edges: [\n    // 内置 loop\n    {\n      source: \"0\",\n      target: \"0\",\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/loop/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/loop/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/loop/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * loop\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // 支持的 behavior\n        default: [\"drag-node\"],\n      },\n      defaultEdge: {\n        type: \"loop\",\n        /* you can configure the global edge style as following lines */\n        style: {\n          // stroke: '#F6BD16',\n          endArrow: {\n            path: \"M 0,0 L 20,10 L 20,-10 Z\",\n            fill: \"#eee\",\n          },\n        },\n        // 更多关于 loop 的配置请参考http://antv.alipay.com/zh/docs/manual/middle/elements/edges/loop/#%E8%87%AA%E7%8E%AF%E7%89%B9%E6%AE%8A%E9%85%8D%E7%BD%AE-loopcfg\n        loopCfg: {\n          position: \"top\",\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/loop/index.json",
    "content": "{\n  \"defaultTitle\": \"自环边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/mode-rect/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"rect1\",\n      label: \"rect1\",\n      description: \"description, hidden when undefined\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/mode-rect/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/mode-rect/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/mode-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * modeRect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n\n      fitCenter: true,\n      defaultNode: {\n        type: \"modelRect\",\n        size: [270, 80],\n        style: {\n          radius: 5,\n          stroke: \"#69c0ff\",\n          fill: \"#ffffff\",\n          lineWidth: 1,\n          fillOpacity: 1,\n        },\n        // label configurations\n        labelCfg: {\n          style: {\n            fill: \"#595959\",\n            fontSize: 14,\n          },\n          offset: 30,\n        },\n        // left rect\n        preRect: {\n          show: true,\n          width: 4,\n          fill: \"#40a9ff\",\n          radius: 2,\n        },\n        // configurations for the four linkpoints\n        linkPoints: {\n          top: false,\n          right: false,\n          bottom: false,\n          left: false,\n          // the size of the linkpoints' circle\n          size: 10,\n          lineWidth: 1,\n          fill: \"#72CC4A\",\n          stroke: \"#72CC4A\",\n        },\n        // configurations for the icon\n        logoIcon: {\n          // whether to show the icon\n          show: true,\n          x: 0,\n          y: 0,\n          // the image url for the icon, string type\n          img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n          width: 16,\n          height: 16,\n          // adjust the offset along x-axis for the icon\n          offset: 0,\n        },\n        // configurations for state icon\n        stateIcon: {\n          // whether to show the icon\n          show: true,\n          x: 0,\n          y: 0,\n          // the image url for the icon, string type\n          img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n          width: 16,\n          height: 16,\n          // adjust hte offset along x-axis for the icon\n          offset: -5,\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        hover: {\n          lineWidth: 2,\n          stroke: \"#1890ff\",\n          fill: \"#e6f7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"hover\", true);\n    });\n\n    // this.graph.on('canvas:tap', (evt) => {\n    //   const { item } = evt;\n    //   this.graph.setItemState(item, 'hover', false);\n    // });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/mode-rect/index.json",
    "content": "{\n  \"defaultTitle\": \"模态矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/multi-edges/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 50,\n      y: 350,\n      label: \"A\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 150,\n      label: \"B\",\n    },\n    {\n      id: \"node3\",\n      x: 450,\n      y: 350,\n      label: \"C\",\n    },\n  ],\n  edges: [],\n};\n\nfor (let i = 0; i < 10; i++) {\n  data.edges.push({\n    source: \"node1\",\n    target: \"node2\",\n    label: `${i}th edge of A-B`,\n  });\n}\nfor (let i = 0; i < 5; i++) {\n  data.edges.push({\n    source: \"node2\",\n    target: \"node3\",\n    label: `${i}th edge of B-C`,\n  });\n}\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/multi-edges/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/multi-edges/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/multi-edges/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * multiEdges\n */\n\nF6.Util.processParallelEdges(data.edges);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      // the edges are linked to the center of source and target ndoes\n      linkCenter: true,\n      defaultNode: {\n        type: \"circle\",\n        size: [40],\n        color: \"#5B8FF9\",\n        style: {\n          fill: \"#9EC9FF\",\n          lineWidth: 3,\n        },\n        labelCfg: {\n          style: {\n            fill: \"#000\",\n            fontSize: 14,\n          },\n        },\n      },\n      defaultEdge: {\n        type: \"quadratic\",\n        labelCfg: {\n          autoRotate: true,\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        // style configurations for hover state\n        hover: {\n          fillOpacity: 0.8,\n        },\n        // style configurations for selected state\n        selected: {\n          lineWidth: 5,\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/multi-edges/index.json",
    "content": "{\n  \"defaultTitle\": \"两节点间存在多条边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/node-bg/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 200,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 350,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"edge 1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n      label: \"edge 2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n      label: \"edge 3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/node-bg/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/node-bg/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/node-bg/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * nodeBg\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        type: \"circle\",\n        labelCfg: {\n          style: {\n            fill: \"#1890ff\",\n            fontSize: 14,\n            background: {\n              fill: \"#ffffff\",\n              stroke: \"#9EC9FF\",\n              padding: [2, 2, 2, 2],\n              radius: 2,\n            },\n          },\n          position: \"bottom\",\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        // style configurations for hover state\n        hover: {\n          fillOpacity: 0.8,\n        },\n        // style configurations for selected state\n        selected: {\n          lineWidth: 5,\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/node-bg/index.json",
    "content": "{\n  \"defaultTitle\": \"节点文本背景\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/pie-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"pie1\",\n      size: 80,\n      inDegree: 80,\n      degree: 360,\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"pie2\",\n      size: 80,\n      inDegree: 280,\n      degree: 360,\n      x: 350,\n      y: 150,\n    },\n  ],\n  edges: [\n    {\n      source: \"pie1\",\n      target: \"pie2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/pie-chart/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/pie-chart/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/pie-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * pieChart：使用G自定义的饼图节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    const lightBlue = \"#5b8ff9\";\n    const lightOrange = \"#5ad8a6\";\n\n    // register a pie chart node\n    F6.registerNode(\"pie-node\", {\n      draw: (cfg, group) => {\n        const radius = cfg.size / 2; // node radius\n        const inPercentage = cfg.inDegree / cfg.degree; // the ratio of indegree to outdegree\n        const inAngle = inPercentage * Math.PI * 2; // the anble for the indegree fan\n        const inArcEnd = [\n          radius * Math.cos(inAngle),\n          -radius * Math.sin(inAngle),\n        ]; // the end position for the in-degree fan\n        let isInBigArc = 0;\n        let isOutBigArc = 1;\n        if (inAngle > Math.PI) {\n          isInBigArc = 1;\n          isOutBigArc = 0;\n        }\n        // fan shape for the in degree\n        const fanIn = group.addShape(\"path\", {\n          attrs: {\n            path: [\n              [\"M\", radius, 0],\n              [\"A\", radius, radius, 0, isInBigArc, 0, inArcEnd[0], inArcEnd[1]],\n              [\"L\", 0, 0],\n              [\"Z\"],\n            ],\n            lineWidth: 0,\n            fill: lightOrange,\n          },\n          name: \"in-fan-shape\",\n        });\n        // draw the fan shape\n        group.addShape(\"path\", {\n          attrs: {\n            path: [\n              [\"M\", inArcEnd[0], inArcEnd[1]],\n              [\"A\", radius, radius, 0, isOutBigArc, 0, radius, 0],\n              [\"L\", 0, 0],\n              [\"Z\"],\n            ],\n            lineWidth: 0,\n            fill: lightBlue,\n          },\n          name: \"out-fan-shape\",\n        });\n        // 返回 keyshape\n        return fanIn;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      defaultNode: {\n        type: \"pie-node\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/pie-chart/index.json",
    "content": "{\n  \"defaultTitle\": \"饼图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/point-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeC\",\n      x: 150,\n      y: 150,\n      label: \"Point2\",\n      type: \"justPoints\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeC2\",\n      x: 500,\n      y: 150,\n      label: \"Point2\",\n      type: \"justPoints\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 50, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [50, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 50, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeC\",\n      target: \"nodeC2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/point-chart/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/point-chart/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/point-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * pointChart：使用G自定义的点线图节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerNode(\"justPoints\", {\n      draw(cfg, group) {\n        const baseR = 30;\n        let nowAngle = 0;\n\n        // Ref line\n        let refR = baseR;\n        const refInc = 10;\n        for (let i = 0; i < 5; i++) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              r: (refR += refInc),\n              stroke: \"#5ad8a6\",\n              lineDash: [4, 4],\n            },\n            name: \"circle-shape\",\n          });\n        }\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        nowAngle += everyIncAngle / 2;\n        cfg.details.forEach((cat) => {\n          // Calculate the positions for vertexes\n          const postions = [];\n          cat.values.forEach((item, index) => {\n            const r = baseR + item;\n            const xPos = r * Math.cos(nowAngle);\n            const yPos = r * Math.sin(nowAngle);\n            nowAngle += everyIncAngle;\n            postions.push([xPos, yPos]);\n            if (index === 4) {\n              const r_ = baseR + item;\n              const xPos_ = r_ * Math.cos(nowAngle);\n              const yPos_ = r_ * Math.sin(nowAngle);\n              postions.push([xPos_, yPos_]);\n            }\n          });\n\n          // add marks\n          postions.forEach((pos, index) => {\n            if (index !== 5) {\n              group.addShape(\"circle\", {\n                attrs: {\n                  x: pos[0],\n                  y: pos[1],\n                  r: 3,\n                  lineWidth: 2,\n                  stroke: cat.color,\n                },\n                name: \"circle-marker-shape\",\n              });\n            }\n          });\n        });\n\n        let nowAngle2 = 0;\n        const everyIncAngleCat = (2 * Math.PI * (360 / 5)) / 360;\n        for (let i = 0; i < 5; i++) {\n          const r = 30 + 50;\n          const xPos = r * Math.cos(nowAngle2);\n          const yPos = r * Math.sin(nowAngle2);\n\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", 0, 0],\n                [\"L\", xPos, yPos],\n              ],\n              lineDash: [4, 4],\n              stroke: \"#5ad8a6\",\n            },\n            name: \"path-shape\",\n          });\n          nowAngle2 += everyIncAngleCat;\n        }\n        // add a circle with the same color with the background color\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"#fff\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/point-chart/index.json",
    "content": "{\n  \"defaultTitle\": \"点线图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline1/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 300,\n    },\n  ],\n  edges: [\n    // Built-in polyline\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline1/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline1/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline1/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * polyline1\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n\n      defaultEdge: {\n        type: \"polyline\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline1/index.json",
    "content": "{\n  \"defaultTitle\": \"折线1\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"2\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline2/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline2/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * polyline2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n\n      defaultEdge: {\n        type: \"polyline\",\n        /* configure the bending radius and min distance to the end nodes */\n        style: {\n          radius: 10,\n          offset: 30,\n          endArrow: true,\n          /* and other styles */\n          // stroke: '#F6BD16',\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline2/index.json",
    "content": "{\n  \"defaultTitle\": \"折线2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline3/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"4\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"5\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    {\n      source: \"4\",\n      target: \"5\",\n      // assign the control points to control the bending positions\n      controlPoints: [\n        {\n          x: 260,\n          y: 80,\n        },\n        {\n          x: 320,\n          y: 50,\n        },\n        {\n          x: 390,\n          y: 110,\n        },\n        {\n          x: 420,\n          y: 110,\n        },\n        {\n          x: 420,\n          y: 140,\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline3/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline3/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline3/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * polyline3\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\"],\n      },\n      defaultEdge: {\n        type: \"polyline\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/polyline3/index.json",
    "content": "{\n  \"defaultTitle\": \"折线3\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"rect\",\n      label: \"rect\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * rect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        type: \"rect\",\n        size: [80, 50],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"center\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect/index.json",
    "content": "{\n  \"defaultTitle\": \"矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect-with-combo/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 250,\n      y: 150,\n      comboId: \"combo\",\n    },\n    {\n      id: \"node2\",\n      x: 350,\n      y: 150,\n      comboId: \"combo\",\n    },\n  ],\n  combos: [\n    {\n      id: \"combo\",\n      label: \"Combo\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect-with-combo/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect-with-combo/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect-with-combo/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * rectWithCombo\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n        ],\n      },\n      defaultCombo: {\n        type: \"rect\",\n        size: [50, 50],\n        /* style for the keyShape */\n        // style: {\n        //   lineWidth: 1,\n        // },\n        labelCfg: {\n          /* label's offset to the keyShape */\n          // refY: 10,\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"top\",\n          /* label's style */\n          // style: {\n          //   fontSize: 18,\n          // },\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      /* you can extend it or override it as you want */\n      // comboStateStyles: {\n      //   active: {\n      //     fill: '#f00',\n      //     opacity: 0.5\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/rect-with-combo/index.json",
    "content": "{\n  \"defaultTitle\": \"矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/stack-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeF\",\n      x: 150,\n      y: 150,\n      label: \"StackedBar1\",\n      type: \"stacked-bar-node\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeF2\",\n      x: 500,\n      y: 150,\n      label: \"StackedBar2\",\n      type: \"stacked-bar-node\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeF\",\n      target: \"nodeF2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/stack-chart/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/stack-chart/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/stack-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * stackChart\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    const getPath = (cx, cy, rs, re, startAngle, endAngle, clockwise) => {\n      const flag1 = clockwise ? 1 : 0;\n      const flag2 = clockwise ? 0 : 1;\n      return [\n        [\"M\", Math.cos(startAngle) * rs + cx, Math.sin(startAngle) * rs + cy],\n        [\"L\", Math.cos(startAngle) * re + cx, Math.sin(startAngle) * re + cy],\n        [\n          \"A\",\n          re,\n          re,\n          0,\n          0,\n          flag1,\n          Math.cos(endAngle) * re + cx,\n          Math.sin(endAngle) * re + cy,\n        ],\n        [\"L\", Math.cos(endAngle) * rs + cx, Math.sin(endAngle) * rs + cy],\n        [\n          \"A\",\n          rs,\n          rs,\n          0,\n          0,\n          flag2,\n          Math.cos(startAngle) * rs + cx,\n          Math.sin(startAngle) * rs + cy,\n        ],\n        [\"Z\"],\n      ];\n    };\n\n    // Custom stacked bar chart node\n    F6.registerNode(\"stacked-bar-node\", {\n      draw(cfg, group) {\n        /*\n          G:\n          Fan\n          x: the circle center of the fan\n          y: the circle center of the fan\n          rs: inner radius\n          re: outer radius\n          startAngle: start angle\n          endAngle: end angle\n          clockwise: render clockwisely if it is true\n        */\n        const baseR = 30;\n        let nowAngle = 0;\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        cfg.details.forEach((cat) => {\n          cat.values.forEach((item) => {\n            const baseNbr = Math.ceil(item / 10);\n            const baseIncR = 7;\n            let nowStartR = baseR;\n            const last = item % 10;\n            const endAngle = nowAngle + everyIncAngle;\n            for (let i = 0; i < baseNbr; i++) {\n              const path0 = getPath(\n                0,\n                0,\n                nowStartR,\n                nowStartR + baseIncR,\n                nowAngle,\n                endAngle,\n                false,\n              );\n              group.addShape(\"path\", {\n                attrs: {\n                  path: path0,\n                  stroke: \"darkgray\",\n                  fill: cat.color,\n                },\n                name: \"path-shape1\",\n              });\n              nowStartR = nowStartR + baseIncR + 2;\n              if (i === baseNbr - 1 && last !== 0) {\n                const path1 = getPath(\n                  0,\n                  0,\n                  nowStartR,\n                  nowStartR + (baseIncR * last) / 10,\n                  nowAngle,\n                  endAngle,\n                  false,\n                );\n                group.addShape(\"path\", {\n                  attrs: {\n                    path: path1,\n                    stroke: \"darkgray\",\n                    fill: cat.color,\n                  },\n                  name: \"path-shape2\",\n                });\n              }\n            }\n            nowAngle = endAngle;\n          });\n        });\n\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/stack-chart/index.json",
    "content": "{\n  \"defaultTitle\": \"堆叠图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/star/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"star\",\n      label: \"Star\",\n      x: 250,\n      y: 200,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/star/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/star/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/star/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * star\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n\n      defaultNode: {\n        /* node type */\n        type: \"star\",\n        /* node size */\n        size: [60, 60],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/star/index.json",
    "content": "{\n  \"defaultTitle\": \"五角星\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/triangle/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"circle\",\n      label: \"Triangle\",\n      x: 250,\n      y: 200,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/triangle/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/elements/triangle/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/elements/triangle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * triangle\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n\n      defaultNode: {\n        /* node type */\n        type: \"triangle\",\n        /* node size */\n        size: [40],\n        direction: \"up\",\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: true,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/elements/triangle/index.json",
    "content": "{\n  \"defaultTitle\": \"三角形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-FA2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-FA2/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-FA2/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-FA2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport forceAtlas2 from \"@antv/f6/dist/extends/layout/forceAtlas2Layout\";\n\n/**\n * 基本 Force Atlas 2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"forceAtlas2\", forceAtlas2);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"forceAtlas2\",\n        preventOverlap: true,\n        kr: 10,\n        center: [250, 250],\n      },\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    data.nodes.forEach((node) => {\n      node.x = Math.random() * 1;\n    });\n    this.graph.on(\"afterlayout\", () => {\n      this.graph.fitView();\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-FA2/index.json",
    "content": "{\n  \"defaultTitle\": \"力导向布局2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-MDS/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-MDS/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-MDS/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-MDS/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\n/**\n * basicMDS\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"mds\", mds);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-node\"],\n      },\n      layout: {\n        type: \"mds\",\n        linkDistance: 100,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-MDS/index.json",
    "content": "{\n  \"defaultTitle\": \"基本降维布局图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-arc-diagram/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      name: \"analytics.cluster\",\n      cluster: \"analytics\",\n      value: 21,\n    },\n    {\n      id: \"1\",\n      name: \"analytics.graph\",\n      cluster: \"analytics\",\n      value: 34,\n    },\n    {\n      id: \"2\",\n      name: \"analytics.optimization\",\n      cluster: \"analytics\",\n      value: 8,\n    },\n    {\n      id: \"3\",\n      name: \"animate\",\n      cluster: \"animate\",\n      value: 40,\n    },\n    {\n      id: \"4\",\n      name: \"animate.interpolate\",\n      cluster: \"animate\",\n      value: 18,\n    },\n    {\n      id: \"5\",\n      name: \"data.converters\",\n      cluster: \"data\",\n      value: 25,\n    },\n    {\n      id: \"6\",\n      name: \"data\",\n      cluster: \"data\",\n      value: 10,\n    },\n    {\n      id: \"7\",\n      name: \"display\",\n      cluster: \"display\",\n      value: 4,\n    },\n    {\n      id: \"8\",\n      name: \"flex\",\n      cluster: \"flex\",\n      value: 6,\n    },\n    {\n      id: \"9\",\n      name: \"physics\",\n      cluster: \"physics\",\n      value: 22,\n    },\n    {\n      id: \"10\",\n      name: \"query\",\n      cluster: \"query\",\n      value: 67,\n    },\n    {\n      id: \"11\",\n      name: \"query.methods\",\n      cluster: \"query\",\n      value: 71,\n    },\n    {\n      id: \"12\",\n      name: \"scale\",\n      cluster: \"scale\",\n      value: 33,\n    },\n    {\n      id: \"13\",\n      name: \"util\",\n      cluster: \"util\",\n      value: 23,\n    },\n    {\n      id: \"14\",\n      name: \"util.heap\",\n      cluster: \"util\",\n      value: 2,\n    },\n    {\n      id: \"15\",\n      cluster: \"util\",\n      name: \"util.math\",\n      value: 2,\n    },\n    {\n      id: \"16\",\n      name: \"util.palette\",\n      cluster: \"util\",\n      value: 5,\n    },\n    {\n      id: \"17\",\n      name: \"vis.axis\",\n      cluster: \"vis\",\n      value: 24,\n    },\n    {\n      id: \"18\",\n      name: \"vis.controls\",\n      cluster: \"vis\",\n      value: 28,\n    },\n    {\n      id: \"19\",\n      name: \"vis.data\",\n      cluster: \"vis\",\n      value: 70,\n    },\n    {\n      id: \"20\",\n      name: \"vis.data.render\",\n      cluster: \"vis\",\n      value: 11,\n    },\n    {\n      id: \"21\",\n      name: \"vis.events\",\n      cluster: \"vis\",\n      value: 8,\n    },\n    {\n      id: \"22\",\n      name: \"vis.legend\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"23\",\n      name: \"vis.operator.distortion\",\n      cluster: \"vis\",\n      value: 9,\n    },\n    {\n      id: \"24\",\n      name: \"vis.operator.encoder\",\n      cluster: \"vis\",\n      value: 30,\n    },\n    {\n      id: \"25\",\n      name: \"vis.operator.filter\",\n      cluster: \"vis\",\n      value: 17,\n    },\n    {\n      id: \"26\",\n      name: \"vis.operator\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"27\",\n      name: \"vis.operator.label\",\n      cluster: \"vis\",\n      value: 18,\n    },\n    {\n      id: \"28\",\n      name: \"vis.operator.layout\",\n      cluster: \"vis\",\n      value: 91,\n    },\n    {\n      id: \"29\",\n      name: \"vis\",\n      cluster: \"vis\",\n      value: 13,\n    },\n  ],\n  edges: [\n    {\n      source: \"10\",\n      target: \"10\",\n      sourceWeight: 61,\n      targetWeight: 61,\n    },\n    {\n      source: \"11\",\n      target: \"11\",\n      sourceWeight: 39,\n      targetWeight: 39,\n    },\n    {\n      source: \"3\",\n      target: \"3\",\n      sourceWeight: 30,\n      targetWeight: 30,\n    },\n    {\n      source: \"19\",\n      target: \"19\",\n      sourceWeight: 26,\n      targetWeight: 26,\n    },\n    {\n      source: \"13\",\n      target: \"13\",\n      sourceWeight: 23,\n      targetWeight: 23,\n    },\n    {\n      source: \"9\",\n      target: \"9\",\n      sourceWeight: 22,\n      targetWeight: 22,\n    },\n    {\n      source: \"12\",\n      target: \"12\",\n      sourceWeight: 19,\n      targetWeight: 19,\n    },\n    {\n      source: \"28\",\n      target: \"19\",\n      sourceWeight: 34,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"4\",\n      sourceWeight: 16,\n      targetWeight: 16,\n    },\n    {\n      source: \"11\",\n      target: \"10\",\n      sourceWeight: 32,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"28\",\n      sourceWeight: 14,\n      targetWeight: 14,\n    },\n    {\n      source: \"18\",\n      target: \"18\",\n      sourceWeight: 12,\n      targetWeight: 12,\n    },\n    {\n      source: \"26\",\n      target: \"26\",\n      sourceWeight: 11,\n      targetWeight: 11,\n    },\n    {\n      source: \"28\",\n      target: \"13\",\n      sourceWeight: 20,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      sourceWeight: 17,\n      targetWeight: 2,\n    },\n    {\n      source: \"19\",\n      target: \"13\",\n      sourceWeight: 17,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"17\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"6\",\n      target: \"6\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"19\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"5\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"21\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 4,\n    },\n    {\n      source: \"25\",\n      target: \"19\",\n      sourceWeight: 10,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"0\",\n      sourceWeight: 5,\n      targetWeight: 5,\n    },\n    {\n      source: \"3\",\n      target: \"13\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"19\",\n      sourceWeight: 5,\n      targetWeight: 4,\n    },\n    {\n      source: \"19\",\n      target: \"12\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"22\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"24\",\n      target: \"24\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"26\",\n      target: \"3\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"16\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"16\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"10\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"22\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"20\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"1\",\n      target: \"26\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"12\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"7\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"3\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"7\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 2,\n    },\n    {\n      source: \"22\",\n      target: \"16\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"21\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"23\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"29\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"28\",\n      target: \"17\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"15\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"27\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"14\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"18\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 1,\n    },\n    {\n      source: \"25\",\n      target: \"26\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"9\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"12\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"6\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"21\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"29\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"23\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"17\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"12\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"20\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"6\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"6\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-arc-diagram/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-arc-diagram/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-arc-diagram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"mds\", mds);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 定义颜色\n    const colors = [\n      \"rgb(91, 143, 249)\",\n      \"rgb(90, 216, 166)\",\n      \"rgb(93, 112, 146)\",\n      \"rgb(246, 189, 22)\",\n      \"rgb(232, 104, 74)\",\n      \"rgb(109, 200, 236)\",\n      \"rgb(146, 112, 202)\",\n      \"rgb(255, 157, 77)\",\n      \"rgb(38, 154, 153)\",\n      \"rgb(227, 137, 163)\",\n    ];\n\n    // 后面会用到的函数\n    function scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n      const outLength = outRange[1] - outRange[0];\n      const dataLength = dataRange[1] - dataRange[0];\n      nodes.forEach(function (n) {\n        n[propName] =\n          ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n          outRange[0];\n      });\n    }\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"edge-tooltip\",\n            formatText: function formatText(model) {\n              const text = `source: ${model.sourceName}<br/> target: ${model.targetName}`;\n              return text;\n            },\n          },\n        ],\n      },\n      defaultNode: {\n        style: {\n          opacity: 0.8,\n          lineWidth: 1,\n          stroke: \"#999\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          opacity: 0.6,\n          lineAppendWidth: 3,\n        },\n      },\n    });\n    // 处理数据\n    const { edges } = data;\n    const { nodes } = data;\n    const nodeMap = new Map();\n    const clusterMap = new Map();\n    let clusterId = 0;\n    const n = nodes.length;\n    const horiPadding = 10;\n    const begin = [horiPadding, height * 0.7];\n    const end = [width - horiPadding, height * 0.7];\n    const xLength = end[0] - begin[0];\n    const yLength = end[1] - begin[1];\n    const xSep = xLength / n;\n    const ySep = yLength / n;\n    nodes.forEach(function (node, i) {\n      node.x = begin[0] + i * xSep;\n      node.y = begin[1] + i * ySep;\n      nodeMap.set(node.id, node);\n      // cluster\n      if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n        clusterMap.set(node.cluster, clusterId);\n        clusterId++;\n      }\n      const id = clusterMap.get(node.cluster);\n      if (node.style) {\n        node.style.fill = colors[id % colors.length];\n      } else {\n        node.style = {\n          fill: colors[id % colors.length],\n        };\n      }\n      // label\n      node.label = node.name;\n      node.labelCfg = {\n        position: \"bottom\",\n        offset: 5,\n        style: {\n          rotate: Math.PI / 2,\n          textAlign: \"start\",\n        },\n      };\n    });\n    edges.forEach((edge) => {\n      edge.type = \"arc\";\n      const source = nodeMap.get(edge.source);\n      const target = nodeMap.get(edge.target);\n      const endsSepStep = (target.x - source.x) / xSep;\n      const sign = endsSepStep < 0 ? -1 : 1;\n      const curveOffset = sign * 10 * Math.ceil(Math.abs(endsSepStep));\n      edge.curveOffset = curveOffset;\n      edge.color = source.style.fill;\n      edge.sourceName = source.name;\n      edge.targetName = target.name;\n    });\n\n    // map the value to node size\n    let maxValue = -9999;\n    let minValue = 9999;\n    nodes.forEach(function (k) {\n      if (maxValue < k.value) maxValue = k.value;\n      if (minValue > k.value) minValue = k.value;\n    });\n    const sizeRange = [3, 25];\n    const sizeDataRange = [minValue, maxValue];\n    scaleNodeProp(nodes, \"size\", \"value\", sizeDataRange, sizeRange);\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-arc-diagram/index.json",
    "content": "{\n  \"defaultTitle\": \"基本弧线图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-circular/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-circular/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\n/**\n * basicCircular布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-circular/index.json",
    "content": "{\n  \"defaultTitle\": \"基本环形布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-combo-force/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-combo-force/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-combo-force/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-combo-force/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport comboforce from \"@antv/f6/dist/extends/layout/comboForceLayout\";\n/**\n * basicComboForce\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"comboforce\", comboforce);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      minZoom: 0.00000001,\n      layout: {\n        type: \"comboforce\",\n        nodeSpacing: (d) => {\n          if (d.id == \"0\") return 100;\n          return 10;\n        },\n      },\n      defaultNode: {\n        size: 15,\n        color: \"#5B8FF9\",\n        style: {\n          lineWidth: 2,\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        size: 2,\n        color: \"#e2e2e2\",\n      },\n      modes: {\n        default: [\"drag-combo\", \"drag-node\", \"drag-canvas\", \"zoom-canvas\"],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-combo-force/index.json",
    "content": "{\n  \"defaultTitle\": \"Combo力导向布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-concentric/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"HIRA\",\n      altered: 0,\n      rank: 148,\n      cited: 53,\n      uniprotdesc:\n        \"Cooperates with ASF1A to promote replication-independentchromatin assembly. Required for the periodic repression ofhistone gene transcription during the cell cycle. Required for theformation of senescence-associated heterochromatin foci (SAHF) andefficient senescence-associated cell cycle exit.\",\n      isseed: false,\n      uniprot: \"P54198\",\n      isvalid: true,\n      importance: 3,\n      ox: 539.5,\n      oy: 641.7372431003224,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SERPINE1\",\n      altered: 0,\n      rank: 5,\n      cited: 7063,\n      uniprotdesc:\n        \"Serine protease inhibitor. This inhibitor acts as 'bait'for tissue plasminogen activator, urokinase, protein C andmatriptase-3/TMPRSS7. Its rapid interaction with PLAT may functionas a major control point in the regulation of fibrinolysis.\",\n      isseed: false,\n      uniprot: \"P05121\",\n      isvalid: true,\n      importance: 3,\n      ox: 670.4301869950953,\n      oy: 229.70989985711336,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FAS\",\n      altered: 0,\n      rank: 38,\n      cited: 1011,\n      uniprotdesc:\n        \"Receptor for TNFSF6/FASLG. The adapter molecule FADDrecruits caspase-8 to the activated receptor. The resulting death-inducing signaling complex (DISC) performs caspase-8 proteolyticactivation which initiates the subsequent cascade of caspases(aspartate-specific cysteine proteases) mediating apoptosis. FAS-mediated apoptosis may have a role in the induction of peripheraltolerance, in the antigen-stimulated suicide of mature T-cells, orboth. The secreted isoforms 2 to 6 block apoptosis (in vitro).\",\n      isseed: false,\n      uniprot: \"P25445\",\n      isvalid: true,\n      importance: 3,\n      ox: 771.3915110914829,\n      oy: 613.8066148172879,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"H1F0\",\n      altered: 0,\n      rank: 179,\n      cited: 8,\n      uniprotdesc:\n        \"Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structures. The H1F0 histonesare found in cells that are in terminal stages of differentiationor that have low rates of cell division.\",\n      isseed: false,\n      uniprot: \"P07305\",\n      isvalid: true,\n      importance: 3,\n      ox: 396.564243092928,\n      oy: 545.1295331255458,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2\",\n      altered: 0,\n      rank: 42,\n      cited: 859,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase which is required forcheckpoint-mediated cell cycle arrest, activation of DNA repairand apoptosis in response to the presence of DNA double-strandbreaks. May also negatively regulate cell cycle progression duringunperturbed cell cycles. Following activation, phosphorylatesnumerous effectors preferentially at the consensus sequence [L-X-R-X-X-S/T]. Regulates cell cycle checkpoint arrest throughphosphorylation of CDC25A, CDC25B and CDC25C, inhibiting theiractivity. Inhibition of CDC25 phosphatase activity leads toincreased inhibitory tyrosine phosphorylation of CDK-cyclincomplexes and blocks cell cycle progression. May alsophosphorylate NEK6 which is involved in G2/M cell cycle arrest.Regulates DNA repair through phosphorylation of BRCA2, enhancingthe association of RAD51 with chromatin which promotes DNA repairby homologous recombination. Also stimulates the transcription ofgenes involved in DNA repair (including BRCA2) through thephosphorylation and activation of the transcription factor FOXM1.Regulates apoptosis through the phosphorylation of p53/TP53, MDM4and PML. Phosphorylation of p53/TP53 at 'Ser-20' by CHEK2 mayalleviate inhibition by MDM2, leading to accumulation of activep53/TP53. Phosphorylation of MDM4 may also reduce degradation ofp53/TP53. Also controls the transcription of pro-apoptotic genesthrough phosphorylation of the transcription factor E2F1. Tumorsuppressor, it may also have a DNA damage-independent function inmitotic spindle assembly by phosphorylating BRCA1. Its absence maybe a cause of the chromosomal instability observed in some cancercells. \",\n      isseed: false,\n      uniprot: \"O96017\",\n      isvalid: true,\n      importance: 3,\n      ox: 665.61605725324,\n      oy: 327.88536532731405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"COL18A1\",\n      altered: 0,\n      rank: 157,\n      cited: 30,\n      uniprotdesc:\n        \"COLA18A probably plays a major role in determining theretinal structure as well as in the closure of the neural tube.Endostatin potently inhibits endothelial cellproliferation and angiogenesis. May inhibit angiogenesis bybinding to the heparan sulfate proteoglycans involved in growthfactor signaling.\",\n      isseed: false,\n      uniprot: \"P39060\",\n      isvalid: true,\n      importance: 3,\n      ox: 315.495548442639,\n      oy: 356.3503242429216,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP\",\n      altered: 0,\n      rank: 24,\n      cited: 2442,\n      uniprotdesc:\n        \"Acetylates histones, giving a specific tag fortranscriptional activation. Also acetylates non-histone proteins,like NCOA3 and FOXO1. Binds specifically to phosphorylated CREBand enhances its transcriptional activity toward cAMP-responsivegenes. Acts as a coactivator of ALX1 in the presence of EP300.Acts as a circadian transcriptional coactivator which enhances theactivity of the circadian transcriptional activators: NPAS2-ARNTL/BMAL1 and CLOCK-ARNTL/BMAL1 heterodimers.\",\n      isseed: false,\n      uniprot: \"Q92793\",\n      isvalid: true,\n      importance: 3,\n      ox: 468.2392322240752,\n      oy: 311.08612174318614,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FDXR\",\n      altered: 0,\n      rank: 147,\n      cited: 54,\n      uniprotdesc:\n        \"Serves as the first electron transfer protein in all themitochondrial P450 systems. Including cholesterol side chaincleavage in all steroidogenic tissues, steroid 11-betahydroxylation in the adrenal cortex, 25-OH-vitamin D3-24hydroxylation in the kidney, and sterol C-27 hydroxylation in theliver.\",\n      isseed: false,\n      uniprot: \"P22570\",\n      isvalid: true,\n      importance: 3,\n      ox: 614.0116881932149,\n      oy: 209.57981996234878,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SMYD2\",\n      altered: 0,\n      rank: 175,\n      cited: 12,\n      uniprotdesc:\n        \"Protein-lysine N-methyltransferase that methylates bothhistones and non-histone proteins, including p53/TP53 and RB1.Specifically methylates histone H3 'Lys-4' (H3K4me) anddimethylates histone H3 'Lys-36' (H3K36me2). Shows even highermethyltransferase activity on p53/TP53. Monomethylates 'Lys-370'of p53/TP53, leading to decreased DNA-binding activity andsubsequent transcriptional regulation activity of p53/TP53.Monomethylates RB1 at 'Lys-860'. \",\n      isseed: false,\n      uniprot: \"Q9NRG4\",\n      isvalid: true,\n      importance: 3,\n      ox: 799.3458853307084,\n      oy: 560.8271840491047,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR\",\n      altered: 0,\n      rank: 52,\n      cited: 628,\n      uniprotdesc:\n        \"Serine/threonine protein kinase which activatescheckpoint signaling upon genotoxic stresses such as ionizingradiation (IR), ultraviolet light (UV), or DNA replicationstalling, thereby acting as a DNA damage sensor. Recognizes thesubstrate consensus sequence [ST]-Q. Phosphorylates BRCA1, CHEK1,MCM2, RAD17, RPA2, SMC1 and p53/TP53, which collectively inhibitDNA replication and mitosis and promote DNA repair, recombinationand apoptosis. Phosphorylates 'Ser-139' of histone variantH2AX/H2AFX at sites of DNA damage, thereby regulating DNA damageresponse mechanism. Required for FANCD2 ubiquitination. Criticalfor maintenance of fragile site stability and efficient regulationof centrosome duplication. \",\n      isseed: false,\n      uniprot: \"Q13535\",\n      isvalid: true,\n      importance: 3,\n      ox: 696.7065384003552,\n      oy: 570.6754072575451,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HGF\",\n      altered: 0,\n      rank: 4,\n      cited: 7554,\n      uniprotdesc:\n        \"Potent mitogen for mature parenchymal hepatocyte cells,seems to be a hepatotrophic factor, and acts as a growth factorfor a broad spectrum of tissues and cell types. Activating ligandfor the receptor tyrosine kinase MET by binding to it andpromoting its dimerization. \",\n      isseed: false,\n      uniprot: \"P14210\",\n      isvalid: true,\n      importance: 3,\n      ox: 732.163947642761,\n      oy: 659.0776363377252,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM\",\n      altered: 0,\n      rank: 25,\n      cited: 2298,\n      uniprotdesc:\n        \"Serine/threonine protein kinase which activatescheckpoint signaling upon double strand breaks (DSBs), apoptosisand genotoxic stresses such as ionizing ultraviolet A light (UVA),thereby acting as a DNA damage sensor. Recognizes the substrateconsensus sequence [ST]-Q. Phosphorylates 'Ser-139' of histonevariant H2AX/H2AFX at double strand breaks (DSBs), therebyregulating DNA damage response mechanism. Also plays a role inpre-B cell allelic exclusion, a process leading to expression of asingle immunoglobulin heavy chain allele to enforce clonality andmonospecific recognition by the B-cell antigen receptor (BCR)expressed on individual B-lymphocytes. After the introduction ofDNA breaks by the RAG complex on one immunoglobulin allele, actsby mediating a repositioning of the second allele topericentromeric heterochromatin, preventing accessibility to theRAG complex and recombination of the second allele. Also involvedin signal transduction and cell cycle control. May function as atumor suppressor. Necessary for activation of ABL1 and SAPK.Phosphorylates DYRK2, CHEK2, p53/TP53, FANCD2, NFKBIA, BRCA1,CTIP, nibrin (NBN), TERF1, RAD9 and DCLRE1C. May play a role invesicle and/or protein transport. Could play a role in T-celldevelopment, gonad and neurological function. Plays a role inreplication-dependent histone mRNA degradation. Binds DNA ends.Phosphorylation of DYRK2 in nucleus in response to genotoxicstress prevents its MDM2-mediated ubiquitination and subsequentproteasome degradation. Phosphorylates ATF2 which stimulates itsfunction in DNA damage response. \",\n      isseed: false,\n      uniprot: \"Q13315\",\n      isvalid: true,\n      importance: 3,\n      ox: 723.6214512404813,\n      oy: 517.2928623066505,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP63\",\n      altered: 0,\n      rank: 37,\n      cited: 1171,\n      uniprotdesc:\n        \"Acts as a sequence specific DNA binding transcriptionalactivator or repressor. The isoforms contain a varying set oftransactivation and auto-regulating transactivation inhibitingdomains thus showing an isoform specific activity. Isoform 2activates RIPK4 transcription. May be required in conjunction withTP73/p73 for initiation of p53/TP53 dependent apoptosis inresponse to genotoxic insults and the presence of activatedoncogenes. Involved in Notch signaling by probably inducing JAG1and JAG2. Plays a role in the regulation of epithelialmorphogenesis. The ratio of DeltaN-type and TA*-type isoforms maygovern the maintenance of epithelial stem cell compartments andregulate the initiation of epithelial stratification from theundifferentiated embryonal ectoderm. Required for limb formationfrom the apical ectodermal ridge. Activates transcription of thep21 promoter. \",\n      isseed: false,\n      uniprot: \"Q9H3D4\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 495.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GPX1\",\n      altered: 0,\n      rank: 13,\n      cited: 3644,\n      uniprotdesc:\n        \"Protects the hemoglobin in erythrocytes from oxidativebreakdown.\",\n      isseed: false,\n      uniprot: \"P07203\",\n      isvalid: true,\n      importance: 3,\n      ox: 412.4474306913114,\n      oy: 244.4618875964815,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TRIAP1\",\n      altered: 0,\n      rank: 183,\n      cited: 7,\n      uniprotdesc:\n        \"Involved in the modulation of the mitochondrialapoptotic pathway by ensuring the accumulation of cardiolipin (CL)in mitochondrial membranes. In vitro, the TRIAP1:PRELID1 complexmediates the transfer of phosphatidic acid (PA) between liposomesand probably functions as a PA transporter across themitochondrion intermembrane space to provide PA for CL synthesisin the inner membrane. Mediates cell survival by inhibitingactivation of caspase-9 which prevents induction of apoptosis.\",\n      isseed: false,\n      uniprot: \"O43715\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 202.751489857487,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1E\",\n      altered: 0,\n      rank: 167,\n      cited: 19,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P10412\",\n      isvalid: true,\n      importance: 3,\n      ox: 509.931522689569,\n      oy: 636.667218490667,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1D\",\n      altered: 0,\n      rank: 184,\n      cited: 6,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16402\",\n      isvalid: true,\n      importance: 3,\n      ox: 385.3785487595187,\n      oy: 517.2928623066505,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1C\",\n      altered: 0,\n      rank: 174,\n      cited: 13,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16403\",\n      isvalid: true,\n      importance: 3,\n      ox: 379.058170659647,\n      oy: 487.9662051382201,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1B\",\n      altered: 0,\n      rank: 96,\n      cited: 209,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16401\",\n      isvalid: true,\n      importance: 3,\n      ox: 381.59546915616875,\n      oy: 428.2362230943135,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1A\",\n      altered: 0,\n      rank: 173,\n      cited: 13,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"Q02539\",\n      isvalid: true,\n      importance: 3,\n      ox: 443.3839427467599,\n      oy: 327.88536532731405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53\",\n      altered: 0,\n      rank: 0,\n      cited: 24824,\n      uniprotdesc:\n        \"Acts as a tumor suppressor in many tumor types; inducesgrowth arrest or apoptosis depending on the physiologicalcircumstances and cell type. Involved in cell cycle regulation asa trans-activator that acts to negatively regulate cell divisionby controlling a set of genes required for this process. One ofthe activated genes is an inhibitor of cyclin-dependent kinases.Apoptosis induction seems to be mediated either by stimulation ofBAX and FAS antigen expression, or by repression of Bcl-2expression. In cooperation with mitochondrial PPIF is involved inactivating oxidative stress-induced necrosis; the function islargely independent of transcription. Induces the transcription oflong intergenic non-coding RNA p21 (lincRNA-p21) and lincRNA-Mkln1. LincRNA-p21 participates in TP53-dependent transcriptionalrepression leading to apoptosis and seem to have to effect oncell-cycle regulation. Implicated in Notch signaling cross-over.Prevents CDK7 kinase activity when associated to CAK complex inresponse to DNA damage, thus stopping cell cycle progression.Isoform 2 enhances the transactivation activity of isoform 1 fromsome but not all TP53-inducible promoters. Isoform 4 suppressestransactivation activity and impairs growth suppression mediatedby isoform 1. Isoform 7 inhibits isoform 1-mediated apoptosis.\",\n      isseed: true,\n      uniprot: \"P04637\",\n      isvalid: true,\n      importance: 4,\n      ox: 554.5,\n      oy: 465.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GADD45A\",\n      altered: 0,\n      rank: 98,\n      cited: 198,\n      uniprotdesc:\n        \"In T-cells, functions as a regulator of p38 MAPKs byinhibiting p88 phosphorylation and activity (By similarity). Mightaffect PCNA interaction with some CDK (cell division proteinkinase) complexes; stimulates DNA excision repair in vitro andinhibits entry of cells into S phase. \",\n      isseed: false,\n      uniprot: \"P24522\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 375.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML\",\n      altered: 0,\n      rank: 35,\n      cited: 1300,\n      uniprotdesc:\n        \"Functions via its association with PML-nuclear bodies(PML-NBs) in a wide range of important cellular processes,including tumor suppression, transcriptional regulation,apoptosis, senescence, DNA damage response, and viral defensemechanisms. Acts as the scaffold of PML-NBs allowing otherproteins to shuttle in and out, a process which is regulated bySUMO-mediated modifications and interactions. Isoform PML-4 has amultifaceted role in the regulation of apoptosis and growthsuppression: activates RB1 and inhibits AKT1 via interactions withPP1 and PP2A phosphatases respectively, negatively affects thePI3K pathway by inhibiting MTOR and activating PTEN, andpositively regulates p53/TP53 by acting at different levels (bypromoting its acetylation and phosphorylation and by inhibitingits MDM2-dependent degradation). Isoform PML-4 also: acts as atranscriptional repressor of TBX2 during cellular senescence andthe repression is dependent on a functional RBL2/E2F4 repressorcomplex, regulates double-strand break repair in gamma-irradiation-induced DNA damage responses via its interaction withWRN, acts as a negative regulator of telomerase by interactingwith TERT, and regulates PER2 nuclear localization and circadianfunction. Isoform PML-6 inhibits specifically the activity of thetetrameric form of PKM. The nuclear isoforms (isoform PML-1,isoform PML-2, isoform PML-3, isoform PML-4 and isoform PML-5) inconcert with SATB1 are involved in local chromatin-loop remodelingand gene expression regulation at the MHC-I locus. Isoform PML-2is required for efficient IFN-gamma induced MHC II genetranscription via regulation of CIITA. Cytoplasmic PML is involvedin the regulation of the TGF-beta signaling pathway. PML alsoregulates transcription activity of ELF4 and can act as animportant mediator for TNF-alpha- and IFN-alpha-mediatedinhibition of endothelial cell network formation and migration.Exhibits antiviral activity against both DNA and RNAviruses. The antiviral activity can involve one or severalisoform(s) and can be enhanced by the permanent PML-NB-associatedprotein DAXX or by the recruitment of p53/TP53 within thesestructures. Isoform PML-4 restricts varicella zoster virus (VZV)via sequestration of virion capsids in PML-NBs thereby preventingtheir nuclear egress and inhibiting formation of infectious virusparticles. The sumoylated isoform PML-4 restricts rabies virus byinhibiting viral mRNA and protein synthesis. The cytoplasmicisoform PML-14 can restrict herpes simplex virus-1 (HHV-1)replication by sequestering the viral E3 ubiquitin-protein ligaseICP0 in the cytoplasm. Isoform PML-6 shows restriction activitytowards human cytomegalovirus (HCMV) and influenza A virus strainsPR8(H1N1) and ST364(H3N2). Sumoylated isoform PML-4 and isoformPML-12 show antiviral activity against encephalomyocarditis virus(EMCV) by promoting nuclear sequestration of viral polymerase(P3D-POL) within PML NBs. Isoform PML-3 exhibits antiviralactivity against poliovirus by inducing apoptosis in infectedcells through the recruitment and the activation of p53/TP53 inthe PML-NBs. Isoform PML-3 represses human foamy virus (HFV)transcription by complexing the HFV transactivator, bel1/tas,preventing its binding to viral DNA. PML may positively regulateinfectious hepatitis C viral (HCV) production and isoform PML-2may enhance adenovirus transcription.\",\n      isseed: false,\n      uniprot: \"P29590\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 555.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1\",\n      altered: 0,\n      rank: 36,\n      cited: 1235,\n      uniprotdesc:\n        \"Ubiquitin-like protein that can be covalently attachedto proteins as a monomer or a lysine-linked polymer. Covalentattachment via an isopeptide bond to its substrates requires prioractivation by the E1 complex SAE1-SAE2 and linkage to the E2enzyme UBE2I, and can be promoted by E3 ligases such as PIAS1-4,RANBP2 or CBX4. This post-translational modification on lysineresidues of proteins plays a crucial role in a number of cellularprocesses such as nuclear transport, DNA replication and repair,mitosis and signal transduction. Involved for instance intargeting RANGAP1 to the nuclear pore complex protein RANBP2.Polymeric SUMO1 chains are also susceptible to polyubiquitinationwhich functions as a signal for proteasomal degradation ofmodified proteins. May also regulate a network of genes involvedin palate development. \",\n      isseed: false,\n      uniprot: \"P63165\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 288.62556472004735,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA\",\n      altered: 0,\n      rank: 146,\n      cited: 55,\n      uniprotdesc:\n        \"PP2A is the major phosphatase for microtubule-associatedproteins (MAPs). PP2A can modulate the activity of phosphorylase Bkinase casein kinase 2, mitogen-stimulated S6 kinase, and MAP-2kinase. Cooperates with SGOL2 to protect centromeric cohesin fromseparase-mediated cleavage in oocytes specifically during meiosisI (By similarity). Can dephosphorylate SV40 large T antigen andp53/TP53. Activates RAF1 by dephosphorylating it at 'Ser-259'.\",\n      isseed: false,\n      uniprot: \"P67775\",\n      isvalid: true,\n      importance: 3,\n      ox: 727.4045308438311,\n      oy: 428.2362230943131,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB\",\n      altered: 0,\n      rank: 185,\n      cited: 6,\n      uniprotdesc:\n        \"PP2A can modulate the activity of phosphorylase B kinasecasein kinase 2, mitogen-stimulated S6 kinase, and MAP-2 kinase.\",\n      isseed: false,\n      uniprot: \"P62714\",\n      isvalid: true,\n      importance: 3,\n      ox: 584.3919246562758,\n      oy: 291.16974245431265,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1\",\n      altered: 0,\n      rank: 78,\n      cited: 330,\n      uniprotdesc:\n        \"Catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Regulates lipid synthesis byphosphorylating and inactivating lipid metabolic enzymes such asACACA, ACACB, GYS1, HMGCR and LIPE; regulates fatty acid andcholesterol synthesis by phosphorylating acetyl-CoA carboxylase(ACACA and ACACB) and hormone-sensitive lipase (LIPE) enzymes,respectively. Regulates insulin-signaling and glycolysis byphosphorylating IRS1, PFKFB2 and PFKFB3. AMPK stimulates glucoseuptake in muscle by increasing the translocation of the glucosetransporter SLC2A4/GLUT4 to the plasma membrane, possibly bymediating phosphorylation of TBC1D4/AS160. Regulates transcriptionand chromatin structure by phosphorylating transcriptionregulators involved in energy metabolism such as CRTC2/TORC2,FOXO3, histone H2B, HDAC5, MEF2C, MLXIPL/ChREBP, EP300, HNF4A,p53/TP53, SREBF1, SREBF2 and PPARGC1A. Acts as a key regulator ofglucose homeostasis in liver by phosphorylating CRTC2/TORC2,leading to CRTC2/TORC2 sequestration in the cytoplasm. In responseto stress, phosphorylates 'Ser-36' of histone H2B (H2BS36ph),leading to promote transcription. Acts as a key regulator of cellgrowth and proliferation by phosphorylating TSC2, RPTOR andATG1/ULK1: in response to nutrient limitation, negativelyregulates the mTORC1 complex by phosphorylating RPTOR component ofthe mTORC1 complex and by phosphorylating and activating TSC2. Inresponse to nutrient limitation, promotes autophagy byphosphorylating and activating ATG1/ULK1. AMPK also acts as aregulator of circadian rhythm by mediating phosphorylation ofCRY1, leading to destabilize it. May regulate the Wnt signalingpathway by phosphorylating CTNNB1, leading to stabilize it. Alsohas tau-protein kinase activity: in response to amyloid beta A4protein (APP) exposure, activated by CAMKK2, leading tophosphorylation of MAPT/TAU; however the relevance of such dataremains unclear in vivo. Also phosphorylates CFTR, EEF2K, KLC1,NOS3 and SLC12A1. \",\n      isseed: false,\n      uniprot: \"Q13131\",\n      isvalid: true,\n      importance: 3,\n      ox: 731.2150654362375,\n      oy: 457.9932361520795,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2\",\n      altered: 0,\n      rank: 29,\n      cited: 2074,\n      uniprotdesc:\n        \"Catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Regulates lipid synthesis byphosphorylating and inactivating lipid metabolic enzymes such asACACA, ACACB, GYS1, HMGCR and LIPE; regulates fatty acid andcholesterol synthesis by phosphorylating acetyl-CoA carboxylase(ACACA and ACACB) and hormone-sensitive lipase (LIPE) enzymes,respectively. Regulates insulin-signaling and glycolysis byphosphorylating IRS1, PFKFB2 and PFKFB3. AMPK stimulates glucoseuptake in muscle by increasing the translocation of the glucosetransporter SLC2A4/GLUT4 to the plasma membrane, possibly bymediating phosphorylation of TBC1D4/AS160. Regulates transcriptionand chromatin structure by phosphorylating transcriptionregulators involved in energy metabolism such as CRTC2/TORC2,FOXO3, histone H2B, HDAC5, MEF2C, MLXIPL/ChREBP, EP300, HNF4A,p53/TP53, SREBF1, SREBF2 and PPARGC1A. Acts as a key regulator ofglucose homeostasis in liver by phosphorylating CRTC2/TORC2,leading to CRTC2/TORC2 sequestration in the cytoplasm. In responseto stress, phosphorylates 'Ser-36' of histone H2B (H2BS36ph),leading to promote transcription. Acts as a key regulator of cellgrowth and proliferation by phosphorylating TSC2, RPTOR andATG1/ULK1: in response to nutrient limitation, negativelyregulates the mTORC1 complex by phosphorylating RPTOR component ofthe mTORC1 complex and by phosphorylating and activating TSC2. Inresponse to nutrient limitation, promotes autophagy byphosphorylating and activating ATG1/ULK1. AMPK also acts as aregulator of circadian rhythm by mediating phosphorylation ofCRY1, leading to destabilize it. May regulate the Wnt signalingpathway by phosphorylating CTNNB1, leading to stabilize it. Alsophosphorylates CFTR, EEF2K, KLC1, NOS3 and SLC12A1.\",\n      isseed: false,\n      uniprot: \"P54646\",\n      isvalid: true,\n      importance: 3,\n      ox: 613.4239130642807,\n      oy: 298.7290842958664,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11\",\n      altered: 0,\n      rank: 127,\n      cited: 81,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK11 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors. Accordingly, p38 MAPKsphosphorylate a broad range of proteins and it has been estimatedthat they may have approximately 200 to 300 substrates each.MAPK11 functions are mostly redundant with those of MAPK14. Someof the targets are downstream kinases which are activated throughphosphorylation and further phosphorylate additional targets.RPS6KA5/MSK1 and RPS6KA4/MSK2 can directly phosphorylate andactivate transcription factors such as CREB1, ATF1, the NF-kappa-Bisoform RELA/NFKB3, STAT1 and STAT3, but can also phosphorylatehistone H3 and the nucleosomal protein HMGN1. RPS6KA5/MSK1 andRPS6KA4/MSK2 play important roles in the rapid induction ofimmediate-early genes in response to stress or mitogenic stimuli,either by inducing chromatin remodeling or by recruiting thetranscription machinery. On the other hand, two other kinasetargets, MAPKAPK2/MK2 and MAPKAPK3/MK3, participate in the controlof gene expression mostly at the post-transcriptional level, byphosphorylating ZFP36 (tristetraprolin) and ELAVL1, and byregulating EEF2K, which is important for the elongation of mRNAduring translation. MKNK1/MNK1 and MKNK2/MNK2, two other kinasesactivated by p38 MAPKs, regulate protein synthesis byphosphorylating the initiation factor EIF4E2. In the cytoplasm,the p38 MAPK pathway is an important regulator of proteinturnover. For example, CFLAR is an inhibitor of TNF-inducedapoptosis whose proteasome-mediated degradation is regulated byp38 MAPK phosphorylation. Ectodomain shedding of transmembraneproteins is regulated by p38 MAPKs as well. In response toinflammatory stimuli, p38 MAPKs phosphorylate the membrane-associated metalloprotease ADAM17. Such phosphorylation isrequired for ADAM17-mediated ectodomain shedding of TGF-alphafamily ligands, which results in the activation of EGFR signalingand cell proliferation. Additional examples of p38 MAPK substratesare the FGFR1. FGFR1 can be translocated from the extracellularspace into the cytosol and nucleus of target cells, and regulatesprocesses such as rRNA synthesis and cell growth. FGFR1translocation requires p38 MAPK activation. In the nucleus, manytranscription factors are phosphorylated and activated by p38MAPKs in response to different stimuli. Classical examples includeATF1, ATF2, ATF6, ELK1, PTPRH, DDIT3, TP53/p53 and MEF2C andMEF2A. The p38 MAPKs are emerging as important modulators of geneexpression by regulating chromatin modifiers and remodelers. Thepromoters of several genes involved in the inflammatory response,such as IL6, IL8 and IL12B, display a p38 MAPK-dependentenrichment of histone H3 phosphorylation on 'Ser-10' (H3S10ph) inLPS-stimulated myeloid cells. This phosphorylation enhances theaccessibility of the cryptic NF-kappa-B-binding sites markingpromoters for increased NF-kappa-B recruitment.\",\n      isseed: false,\n      uniprot: \"Q15759\",\n      isvalid: true,\n      importance: 3,\n      ox: 640.7607677759248,\n      oy: 311.0861217431862,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP73\",\n      altered: 0,\n      rank: 116,\n      cited: 124,\n      uniprotdesc:\n        \"Participates in the apoptotic response to DNA damage.Isoforms containing the transactivation domain are pro-apoptotic,isoforms lacking the domain are anti-apoptotic and block thefunction of p53 and transactivating p73 isoforms. May be a tumorsuppressor protein. \",\n      isseed: false,\n      uniprot: \"O15350\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 435.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CCNB1\",\n      altered: 0,\n      rank: 62,\n      cited: 491,\n      uniprotdesc:\n        \"Essential for the control of the cell cycle at the G2/M(mitosis) transition. \",\n      isseed: false,\n      uniprot: \"P14635\",\n      isvalid: true,\n      importance: 3,\n      ox: 455.45477593090067,\n      oy: 612.0421763339963,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12\",\n      altered: 0,\n      rank: 131,\n      cited: 79,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK12 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors such as ELK1 and ATF2.Accordingly, p38 MAPKs phosphorylate a broad range of proteins andit has been estimated that they may have approximately 200 to 300substrates each. Some of the targets are downstream kinases suchas MAPKAPK2, which are activated through phosphorylation andfurther phosphorylate additional targets. Plays a role in myoblastdifferentiation and also in the down-regulation of cyclin D1 inresponse to hypoxia in adrenal cells suggesting MAPK12 may inhibitcell proliferation while promoting differentiation. PhosphorylatesDLG1. Following osmotic shock, MAPK12 in the cell nucleusincreases its association with nuclear DLG1, thereby causingdissociation of DLG1-SFPQ complexes. This function is independentof its catalytic activity and could affect mRNA processing and/orgene transcription to aid cell adaptation to osmolarity changes inthe environment. Regulates UV-induced checkpoint signaling andrepair of UV-induced DNA damage and G2 arrest after gamma-radiation exposure. MAPK12 is involved in the regulation of SLC2A1expression and basal glucose uptake in L6 myotubes; and negativelyregulates SLC2A4 expression and contraction-mediated glucoseuptake in adult skeletal muscle. C-Jun (JUN) phosphorylation isstimulated by MAPK14 and inhibited by MAPK12, leading to adistinct AP-1 regulation. MAPK12 is required for the normalkinetochore localization of PLK1, prevents chromosomal instabilityand supports mitotic cell viability. MAPK12-signaling is alsopositively regulating the expansion of transient amplifyingmyogenic precursor cells during muscle growth and regeneration.\",\n      isseed: false,\n      uniprot: \"P53778\",\n      isvalid: true,\n      importance: 3,\n      ox: 569.5000000000001,\n      oy: 641.7372431003224,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13\",\n      altered: 0,\n      rank: 126,\n      cited: 88,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK13 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors such as ELK1 and ATF2.Accordingly, p38 MAPKs phosphorylate a broad range of proteins andit has been estimated that they may have approximately 200 to 300substrates each. MAPK13 is one of the less studied p38 MAPKisoforms. Some of the targets are downstream kinases such asMAPKAPK2, which are activated through phosphorylation and furtherphosphorylate additional targets. Plays a role in the regulationof protein translation by phosphorylating and inactivating EEF2K.Involved in cytoskeletal remodeling through phosphorylation ofMAPT and STMN1. Mediates UV irradiation induced up-regulation ofthe gene expression of CXCL14. Plays an important role in theregulation of epidermal keratinocyte differentiation, apoptosisand skin tumor development. Phosphorylates the transcriptionalactivator MYB in response to stress which leads to rapid MYBdegradation via a proteasome-dependent pathway. MAPK13 alsophosphorylates and down-regulates PRKD1 during regulation ofinsulin secretion in pancreatic beta cells.\",\n      isseed: false,\n      uniprot: \"O15264\",\n      isvalid: true,\n      importance: 3,\n      ox: 687.2747400718758,\n      oy: 348.6435313966404,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14\",\n      altered: 0,\n      rank: 23,\n      cited: 2528,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK14 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors. Accordingly, p38 MAPKsphosphorylate a broad range of proteins and it has been estimatedthat they may have approximately 200 to 300 substrates each. Someof the targets are downstream kinases which are activated throughphosphorylation and further phosphorylate additional targets.RPS6KA5/MSK1 and RPS6KA4/MSK2 can directly phosphorylate andactivate transcription factors such as CREB1, ATF1, the NF-kappa-Bisoform RELA/NFKB3, STAT1 and STAT3, but can also phosphorylatehistone H3 and the nucleosomal protein HMGN1. RPS6KA5/MSK1 andRPS6KA4/MSK2 play important roles in the rapid induction ofimmediate-early genes in response to stress or mitogenic stimuli,either by inducing chromatin remodeling or by recruiting thetranscription machinery. On the other hand, two other kinasetargets, MAPKAPK2/MK2 and MAPKAPK3/MK3, participate in the controlof gene expression mostly at the post-transcriptional level, byphosphorylating ZFP36 (tristetraprolin) and ELAVL1, and byregulating EEF2K, which is important for the elongation of mRNAduring translation. MKNK1/MNK1 and MKNK2/MNK2, two other kinasesactivated by p38 MAPKs, regulate protein synthesis byphosphorylating the initiation factor EIF4E2. MAPK14 interactsalso with casein kinase II, leading to its activation throughautophosphorylation and further phosphorylation of TP53/p53. Inthe cytoplasm, the p38 MAPK pathway is an important regulator ofprotein turnover. For example, CFLAR is an inhibitor of TNF-induced apoptosis whose proteasome-mediated degradation isregulated by p38 MAPK phosphorylation. In a similar way, MAPK14phosphorylates the ubiquitin ligase SIAH2, regulating its activitytowards EGLN3. MAPK14 may also inhibit the lysosomal degradationpathway of autophagy by interfering with the intracellulartrafficking of the transmembrane protein ATG9. Another function ofMAPK14 is to regulate the endocytosis of membrane receptors bydifferent mechanisms that impinge on the small GTPase RAB5A. Inaddition, clathrin-mediated EGFR internalization induced byinflammatory cytokines and UV irradiation depends on MAPK14-mediated phosphorylation of EGFR itself as well as of RAB5Aeffectors. Ectodomain shedding of transmembrane proteins isregulated by p38 MAPKs as well. In response to inflammatorystimuli, p38 MAPKs phosphorylate the membrane-associatedmetalloprotease ADAM17. Such phosphorylation is required forADAM17-mediated ectodomain shedding of TGF-alpha family ligands,which results in the activation of EGFR signaling and cellproliferation. Another p38 MAPK substrate is FGFR1. FGFR1 can betranslocated from the extracellular space into the cytosol andnucleus of target cells, and regulates processes such as rRNAsynthesis and cell growth. FGFR1 translocation requires p38 MAPKactivation. In the nucleus, many transcription factors arephosphorylated and activated by p38 MAPKs in response to differentstimuli. Classical examples include ATF1, ATF2, ATF6, ELK1, PTPRH,DDIT3, TP53/p53 and MEF2C and MEF2A. The p38 MAPKs are emerging asimportant modulators of gene expression by regulating chromatinmodifiers and remodelers. The promoters of several genes involvedin the inflammatory response, such as IL6, IL8 and IL12B, displaya p38 MAPK-dependent enrichment of histone H3 phosphorylation on'Ser-10' (H3S10ph) in LPS-stimulated myeloid cells. Thisphosphorylation enhances the accessibility of the cryptic NF-kappa-B-binding sites marking promoters for increased NF-kappa-Brecruitment. Phosphorylates CDC25B and CDC25C which is requiredfor binding to 14-3-3 proteins and leads to initiation of a G2delay after ultraviolet radiation. Phosphorylates TIAR followingDNA damage, releasing TIAR from GADD45A mRNA and preventing mRNAdegradation. The p38 MAPKs may also have kinase-independent roles,which are thought to be due to the binding to targets in theabsence of phosphorylation. Protein O-Glc-N-acylation catalyzed bythe OGT is regulated by MAPK14, and, although OGT does not seem tobe phosphorylated by MAPK14, their interaction increases uponMAPK14 activation induced by glucose deprivation. This interactionmay regulate OGT activity by recruiting it to specific targetssuch as neurofilament H, stimulating its O-Glc-N-acylation.Required in mid-fetal development for the growth of embryo-derivedblood vessels in the labyrinth layer of the placenta. Also playsan essential role in developmental and stress-inducederythropoiesis, through regulation of EPO gene expression. IsoformMXI2 activation is stimulated by mitogens and oxidative stress andonly poorly phosphorylates ELK1 and ATF2. Isoform EXIP may play arole in the early onset of apoptosis. Phosphorylates S100A9 at'Thr-113'. \",\n      isseed: false,\n      uniprot: \"Q16539\",\n      isvalid: true,\n      importance: 3,\n      ox: 705.1137353610045,\n      oy: 372.7634453076487,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2\",\n      altered: 0,\n      rank: 189,\n      cited: 4,\n      uniprotdesc:\n        \"Non-catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Beta non-catalytic subunit acts as ascaffold on which the AMPK complex assembles, via its C-terminusthat bridges alpha (PRKAA1 or PRKAA2) and gamma subunits (PRKAG1,PRKAG2 or PRKAG3).\",\n      isseed: false,\n      uniprot: \"O43741\",\n      isvalid: true,\n      importance: 3,\n      ox: 718.6198477055347,\n      oy: 399.5512210521357,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1\",\n      altered: 0,\n      rank: 73,\n      cited: 368,\n      uniprotdesc:\n        \"Non-catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Beta non-catalytic subunit acts as ascaffold on which the AMPK complex assembles, via its C-terminusthat bridges alpha (PRKAA1 or PRKAA2) and gamma subunits (PRKAG1,PRKAG2 or PRKAG3).\",\n      isseed: false,\n      uniprot: \"Q9Y478\",\n      isvalid: true,\n      importance: 3,\n      ox: 476.5577136594006,\n      oy: 420.49999999999994,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300\",\n      altered: 0,\n      rank: 19,\n      cited: 2835,\n      uniprotdesc:\n        \"Functions as histone acetyltransferase and regulatestranscription via chromatin remodeling. Acetylates all four corehistones in nucleosomes. Histone acetylation gives an epigenetictag for transcriptional activation. Mediates cAMP-gene regulationby binding specifically to phosphorylated CREB protein. Mediatesacetylation of histone H3 at 'Lys-122' (H3K122ac), a modificationthat localizes at the surface of the histone octamer andstimulates transcription, possibly by promoting nucleosomeinstability. Mediates acetylation of histone H3 at 'Lys-27'(H3K27ac). Also functions as acetyltransferase for nonhistonetargets. Acetylates 'Lys-131' of ALX1 and acts as its coactivatorin the presence of CREBBP. Acetylates SIRT2 and is proposed toindirectly increase the transcriptional activity of TP53 throughacetylation and subsequent attenuation of SIRT2 deacetylasefunction. Acetylates HDAC1 leading to its inactivation andmodulation of transcription. Acts as a TFAP2A-mediatedtranscriptional coactivator in presence of CITED2. Plays a role asa coactivator of NEUROD1-dependent transcription of the secretinand p21 genes and controls terminal differentiation of cells inthe intestinal epithelium. Promotes cardiac myocyte enlargement.Can also mediate transcriptional repression. Binds to and may beinvolved in the transforming capacity of the adenovirus E1Aprotein. In case of HIV-1 infection, it is recruited by the viralprotein Tat. Regulates Tat's transactivating activity and may helpinducing chromatin remodeling of proviral genes. Acetylates FOXO1and enhances its transcriptional activity. Acetylates BCL6 wichdisrupts its ability to recruit histone deacetylases and hindersits transcriptional repressor activity. Participates in CLOCK orNPAS2-regulated rhythmic gene transcription; exhibits a circadianassociation with CLOCK or NPAS2, correlating with increase inPER1/2 mRNA and histone H3 acetylation on the PER1/2 promoter.Acetylates MTA1 at 'Lys-626' which is essential for itstranscriptional coactivator activity (PubMed:10733570,PubMed:11430825, PubMed:11701890, PubMed:12402037,PubMed:12586840, PubMed:12929931, PubMed:14645221,PubMed:15186775, PubMed:15890677, PubMed:16617102,PubMed:16762839, PubMed:18722353, PubMed:18995842,PubMed:23415232, PubMed:23911289, PubMed:23934153,PubMed:8945521). Acetylates XBP1 isoform 2; acetylation increasesprotein stability of XBP1 isoform 2 and enhances itstranscriptional activity (By similarity).\",\n      isseed: false,\n      uniprot: \"Q09472\",\n      isvalid: true,\n      importance: 3,\n      ox: 476.5577136594005,\n      oy: 510.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1\",\n      altered: 0,\n      rank: 125,\n      cited: 89,\n      uniprotdesc:\n        \"Associated to surface IgM-receptor; may be involved insignal transduction. Involved in regulation of the catalyticactivity of the phosphatases PP2A, PP4 and PP6 by protecting theirpartially folded catalytic subunits from degradativepolyubiquitination until they associate with regulatory subunits.\",\n      isseed: false,\n      uniprot: \"P78318\",\n      isvalid: true,\n      importance: 3,\n      ox: 729.941829340353,\n      oy: 487.96620513822,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11\",\n      altered: 0,\n      rank: 188,\n      cited: 5,\n      uniprotdesc:\n        \"Substrate recognition component of a SCF (SKP1-CUL1-F-box protein) E3 ubiquitin-protein ligase complex which mediatesthe ubiquitination and subsequent proteasomal degradation oftarget proteins, such as DTL/CDT2, BCL6 and PRDM1/BLIMP1. TheSCF(FBXO11) complex mediates ubiquitination and degradation ofBCL6, thereby playing a role in the germinal center B-cellsterminal differentiation toward memory B-cells and plasma cells.The SCF(FBXO11) complex also mediates ubiquitination anddegradation of DTL, an important step for the regulation of TGF-beta signaling, cell migration and the timing of the cell-cycleprogression and exit. Binds to and neddylates phosphorylatedp53/TP53, inhibiting its transcriptional activity. SCF(FBXO11)does not seem to direct ubiquitination of p53/TP53.\",\n      isseed: false,\n      uniprot: \"Q86XK2\",\n      isvalid: true,\n      importance: 3,\n      ox: 481.64519932573637,\n      oy: 626.6730246484053,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1\",\n      altered: 0,\n      rank: 54,\n      cited: 617,\n      uniprotdesc:\n        \"DNA binding proteins that associates with chromatin andhas the ability to bend DNA. Binds preferentially single-strandedDNA. Involved in V(D)J recombination by acting as a cofactor ofthe RAG complex. Acts by stimulating cleavage and RAG proteinbinding at the 23 bp spacer of conserved recombination signalsequences (RSS). Heparin-binding protein that has a role in theextension of neurite-type cytoplasmic processes in developingcells (By similarity). \",\n      isseed: false,\n      uniprot: \"P09429\",\n      isvalid: true,\n      importance: 3,\n      ox: 712.435756907072,\n      oy: 545.1295331255459,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NEDD8\",\n      altered: 0,\n      rank: 205,\n      cited: 236,\n      uniprotdesc:\n        \"Ubiquitin-like protein which plays an important role incell cycle control and embryogenesis. Covalent attachment to itssubstrates requires prior activation by the E1 complex UBE1C-APPBP1 and linkage to the E2 enzyme UBE2M. Attachment of NEDD8 tocullins activates their associated E3 ubiquitin ligase activity,and thus promotes polyubiquitination and proteasomal degradationof cyclins and other regulatory proteins.\",\n      isseed: false,\n      uniprot: \"Q15843\",\n      isvalid: true,\n      importance: 2,\n      ox: 432.1137033013474,\n      oy: 593.195576415127,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ASF1A\",\n      altered: 0,\n      rank: 161,\n      cited: 27,\n      uniprotdesc:\n        \"Histone chaperone that facilitates histone depositionand histone exchange and removal during nucleosome assembly anddisassembly. Cooperates with chromatin assembly factor 1 (CAF-1)to promote replication-dependent chromatin assembly and with HIRAto promote replication-independent chromatin assembly. Requiredfor the formation of senescence-associated heterochromatin foci(SAHF) and efficient senescence-associated cell cycle exit.\",\n      isseed: false,\n      uniprot: \"Q9Y294\",\n      isvalid: true,\n      importance: 3,\n      ox: 412.29346159964496,\n      oy: 570.6754072575452,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT8\",\n      altered: 0,\n      rank: 199,\n      cited: 0,\n      uniprotdesc:\n        \"Histone acetyltransferase which may be involved intranscriptional activation. May influence the function of ATM. Aspart of the MSL complex it is involved in acetylation ofnucleosomal histone H4 producing specifically H4K16ac. As part ofthe NSL complex it may be involved in acetylation of nucleosomalhistone H4 on several lysine residues. That activity is lessspecific than the one of the MSL complex. Can also acetylateTP53/p53 at 'Lys-120'. \",\n      isseed: false,\n      uniprot: \"Q9H7Z6\",\n      isvalid: true,\n      importance: 3,\n      ox: 452.21985952208775,\n      oy: 707.5238675129558,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT\",\n      altered: 0,\n      rank: 43,\n      cited: 858,\n      uniprotdesc:\n        \"May play a role in microtubule-mediated transport orvesicle function.\",\n      isseed: false,\n      uniprot: \"P42858\",\n      isvalid: true,\n      importance: 3,\n      ox: 632.4422863405995,\n      oy: 510.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN\",\n      altered: 0,\n      rank: 53,\n      cited: 621,\n      uniprotdesc:\n        \"Multifunctional enzyme that has both magnesium and ATP-dependent DNA-helicase activity and 3'->5' exonuclease activitytowards double-stranded DNA with a 5'-overhang. Has no nucleaseactivity towards single-stranded DNA or blunt-ended double-stranded DNA. Binds preferentially to DNA substrates containingalternate secondary structures, such as replication forks andHolliday junctions. May play an important role in the dissociationof joint DNA molecules that can arise as products of homologousrecombination, at stalled replication forks or during DNA repair.Alleviates stalling of DNA polymerases at the site of DNA lesions.Important for genomic integrity. Plays a role in the formation ofDNA replication focal centers; stably associates with focielements generating binding sites for RP-A (By similarity). Playsa role in double-strand break repair after gamma-irradiation.\",\n      isseed: false,\n      uniprot: \"Q14191\",\n      isvalid: true,\n      importance: 3,\n      ox: 676.8862966986526,\n      oy: 593.1955764151269,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDKN1A\",\n      altered: 0,\n      rank: 9,\n      cited: 4784,\n      uniprotdesc:\n        \"May be the important intermediate by which p53/TP53mediates its role as an inhibitor of cellular proliferation inresponse to DNA damage. Binds to and inhibits cyclin-dependentkinase activity, preventing phosphorylation of critical cyclin-dependent kinase substrates and blocking cell cycle progression.Functions in the nuclear localization and assembly of cyclin D-CDK4 complex and promotes its kinase activity towards RB1. Athigher stoichiometric ratios, inhibits the kinase activity of thecyclin D-CDK4 complex. \",\n      isseed: false,\n      uniprot: \"P38936\",\n      isvalid: true,\n      importance: 3,\n      ox: 653.5452240690994,\n      oy: 612.0421763339962,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PLK3\",\n      altered: 0,\n      rank: 115,\n      cited: 130,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved in cell cycleregulation, response to stress and Golgi disassembly. Polo-likekinases act by binding and phosphorylating proteins are thatalready phosphorylated on a specific motif recognized by the POLObox domains. Phosphorylates ATF2, BCL2L1, CDC25A, CDC25C, CHEK2,HIF1A, JUN, p53/TP53, p73/TP73, PTEN, TOP2A and VRK1. Involved incell cycle regulation: required for entry into S phase andcytokinesis. Phosphorylates BCL2L1, leading to regulate the G2checkpoint and progression to cytokinesis during mitosis. Plays akey role in response to stress: rapidly activated upon stressstimulation, such as ionizing radiation, reactive oxygen species(ROS), hyperosmotic stress, UV irradiation and hypoxia. Involvedin DNA damage response and G1/S transition checkpoint byphosphorylating CDC25A, p53/TP53 and p73/TP73. Phosphorylatesp53/TP53 in response to reactive oxygen species (ROS), therebypromoting p53/TP53-mediated apoptosis. Phosphorylates CHEK2 inresponse to DNA damage, promoting the G2/M transition checkpoint.Phosphorylates the transcription factor p73/TP73 in response toDNA damage, leading to inhibit p73/TP73-mediated transcriptionalactivation and pro-apoptotic functions. Phosphorylates HIF1A andJUN is response to hypoxia. Phosphorylates ATF2 followinghyperosmotic stress in corneal epithelium. Also involved in Golgidisassembly during the cell cycle: part of a MEK1/MAP2K1-dependentpathway that induces Golgi fragmentation during mitosis bymediating phosphorylation of VRK1. May participate in endomitoticcell cycle, a form of mitosis in which both karyokinesis andcytokinesis are interrupted and is a hallmark of megakaryocytedifferentiation, via its interaction with CIB1.\",\n      isseed: false,\n      uniprot: \"Q9H4B4\",\n      isvalid: true,\n      importance: 3,\n      ox: 377.7849345637625,\n      oy: 457.9932361520796,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DYRK1A\",\n      altered: 0,\n      rank: 128,\n      cited: 81,\n      uniprotdesc:\n        \"May play a role in a signaling pathway regulatingnuclear functions of cell proliferation. Modulates alternativesplicing by phosphorylating the splice factor SRSF6 (Bysimilarity). Phosphorylates serine, threonine and tyrosineresidues in its sequence and in exogenous substrates such as CRY2,FOXO1, SRSF6 and SIRT1. Exhibits a sugstrate preference forproline at position P+1 and arginine at position P-3.\",\n      isseed: false,\n      uniprot: \"Q13627\",\n      isvalid: true,\n      importance: 3,\n      ox: 584.451073117784,\n      oy: 204.46415418337006,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1\",\n      altered: 0,\n      rank: 177,\n      cited: 11,\n      uniprotdesc:\n        \"AMP/ATP-binding subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Gamma non-catalytic subunit mediatesbinding to AMP, ADP and ATP, leading to activate or inhibit AMPK:AMP-binding results in allosteric activation of alpha catalyticsubunit (PRKAA1 or PRKAA2) both by inducing phosphorylation andpreventing dephosphorylation of catalytic subunits. ADP alsostimulates phosphorylation, without stimulating alreadyphosphorylated catalytic subunit. ATP promotes dephosphorylationof catalytic subunit, rendering the AMPK enzyme inactive.\",\n      isseed: false,\n      uniprot: \"P54619\",\n      isvalid: true,\n      importance: 3,\n      ox: 627.3548006742639,\n      oy: 626.6730246484052,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP6\",\n      altered: 0,\n      rank: 104,\n      cited: 161,\n      uniprotdesc:\n        \"Involved in the activation cascade of caspasesresponsible for apoptosis execution. Cleaves poly(ADP-ribose)polymerase in vitro, as well as lamins. Overexpression promotesprogrammed cell death.\",\n      isseed: false,\n      uniprot: \"P55212\",\n      isvalid: true,\n      importance: 3,\n      ox: 642.7964774016498,\n      oy: 218.03179666759164,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAX\",\n      altered: 0,\n      rank: 158,\n      cited: 28,\n      uniprotdesc:\n        \"Transcription regulator. Forms a sequence-specific DNA-binding protein complex with MYC or MAD which recognizes the coresequence 5'-CAC[GA]TG-3'. The MYC:MAX complex is a transcriptionalactivator, whereas the MAD:MAX complex is a repressor. May represstranscription via the recruitment of a chromatin remodelingcomplex containing H3 'Lys-9' histone methyltransferase activity.\",\n      isseed: false,\n      uniprot: \"P61244\",\n      isvalid: true,\n      importance: 3,\n      ox: 524.5489268822162,\n      oy: 204.46415418337,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FOS\",\n      altered: 0,\n      rank: 61,\n      cited: 496,\n      uniprotdesc:\n        \"Nuclear phosphoprotein which forms a tight but non-covalently linked complex with the JUN/AP-1 transcription factor.In the heterodimer, FOS and JUN/AP-1 basic regions each seems tointeract with symmetrical DNA half sites. On TGF-beta activation,forms a multimeric SMAD3/SMAD4/JUN/FOS complex at the AP1/SMAD-binding site to regulate TGF-beta-mediated signaling. Has acritical function in regulating the development of cells destinedto form and maintain the skeleton. It is thought to have animportant role in signal transduction, cell proliferation anddifferentiation. In growing cells, activates phospholipidsynthesis, possibly by activating CDS1 and PI4K2A. This activityrequires Tyr-dephosphorylation and association with theendoplasmic reticulum. \",\n      isseed: false,\n      uniprot: \"P01100\",\n      isvalid: true,\n      importance: 3,\n      ox: 696.5525693086885,\n      oy: 244.46188759648143,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53I3\",\n      altered: 0,\n      rank: 152,\n      cited: 39,\n      uniprotdesc:\n        \"May be involved in the generation of reactive oxygenspecies (ROS). Has low NADPH-dependent beta-naphthoquinonereductase activity, with a preference for 1,2-beta-naphthoquinoneover 1,4-beta-naphthoquinone. Has low NADPH-dependent diaminereductase activity (in vitro). \",\n      isseed: false,\n      uniprot: \"Q53FA7\",\n      isvalid: true,\n      importance: 3,\n      ox: 720.823079139937,\n      oy: 262.0954451652557,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT1\",\n      altered: 0,\n      rank: 206,\n      cited: 189,\n      uniprotdesc:\n        \"Arginine methyltransferase that methylates (mono andasymmetric dimethylation) the guanidino nitrogens of arginylresidues present in proteins such as ESR1, histone H2, H3 and H4,PIAS1, HNRNPA1, HNRNPD, NFATC2IP, SUPT5H, TAF15 and EWS.Constitutes the main enzyme that mediates monomethylation andasymmetric dimethylation of histone H4 'Arg-4' (H4R3me1 andH4R3me2a, respectively), a specific tag for epigenetictranscriptional activation. Together with dimethylated PIAS1,represses STAT1 transcriptional activity, in the late phase ofinterferon gamma (IFN-gamma) signaling. May be involved in theregulation of TAF15 transcriptional activity, act as an activatorof estrogen receptor (ER)-mediated transactivation, play a keyrole in neurite outgrowth and act as a negative regulator ofmegakaryocytic differentiation, by modulating p38 MAPK pathway.Methylates FOXO1 and retains it in the nucleus increasing itstranscriptional activity. \",\n      isseed: false,\n      uniprot: \"Q99873\",\n      isvalid: true,\n      importance: 2,\n      ox: 742.9253132762292,\n      oy: 282.3806921734763,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PCBP4\",\n      altered: 0,\n      rank: 165,\n      cited: 20,\n      uniprotdesc:\n        \"Single-stranded nucleic acid binding protein that bindspreferentially to oligo dC. \",\n      isseed: false,\n      uniprot: \"P57723\",\n      isvalid: true,\n      importance: 3,\n      ox: 762.5711352945876,\n      oy: 305.05317940410396,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT5\",\n      altered: 0,\n      rank: 118,\n      cited: 111,\n      uniprotdesc:\n        \"Arginine methyltransferase that can both catalyze theformation of omega-N monomethylarginine (MMA) and symmetricaldimethylarginine (sDMA), with a preference for the formation ofMMA. Specifically mediates the symmetrical dimethylation ofarginine residues in the small nuclear ribonucleoproteins Sm D1(SNRPD1) and Sm D3 (SNRPD3); such methylation being required forthe assembly and biogenesis of snRNP core particles. MethylatesSUPT5H. Mono- and dimethylates arginine residues of myelin basicprotein (MBP) in vitro. Plays a role in the assembly of snRNP coreparticles. May play a role in cytokine-activated transductionpathways. Negatively regulates cyclin E1 promoter activity andcellular proliferation. May regulate the SUPT5H transcriptionalelongation properties. May be part of a pathway that is connectedto a chloride current, possibly through cytoskeletalrearrangement. Methylates histone H2A and H4 'Arg-3' during germcell development. Methylates histone H3 'Arg-8', which may represstranscription. Methylates the Piwi proteins (PIWIL1, PIWIL2 andPIWIL4), methylation of Piwi proteins being required for theinteraction with Tudor domain-containing proteins and subsequentlocalization to the meiotic nuage. Methylates RPS10. AttenuatesEGF signaling through the MAPK1/MAPK3 pathway acting at 2 levels.First, monomethylates EGFR; this enhances EGFR 'Tyr-1197'phosphorylation and PTPN6 recruitment, eventually leading toreduced SOS1 phosphorylation. Second, methylates RAF1 and probablyBRAF, hence destabilizing these 2 signaling proteins and reducingtheir catalytic activity. Required for induction of E-selectin andVCAM-1, on the endothelial cells surface at sites of inflammation.Methylates HOXA9. Methylates and regulates SRGAP2 which isinvolved in cell migration and differentiation. Acts as atranscriptional corepressor in CRY1-mediated repression of thecore circadian component PER1 by regulating the H4R3 dimethylationat the PER1 promoter. \",\n      isseed: false,\n      uniprot: \"O14744\",\n      isvalid: true,\n      importance: 3,\n      ox: 779.5044318605908,\n      oy: 329.8173363129873,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"E4F1\",\n      altered: 0,\n      rank: 150,\n      cited: 47,\n      uniprotdesc:\n        \"May function as a transcriptional repressor. May alsofunction as a ubiquitin ligase mediating ubiquitination ofchromatin-associated TP53. Functions in cell survival andproliferation through control of the cell cycle. Functions in thep53 and pRB tumor suppressor pathways and regulates the cyclinCCNA2 transcription.Identified as a cellular target of the adenoviraloncoprotein E1A, it is required for both transcriptionalactivation and repression of viral genes.\",\n      isseed: false,\n      uniprot: \"Q66K89\",\n      isvalid: true,\n      importance: 3,\n      ox: 793.504451557361,\n      oy: 356.35032424292166,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP1\",\n      altered: 0,\n      rank: 64,\n      cited: 473,\n      uniprotdesc:\n        \"Thiol protease that cleaves IL-1 beta between an Asp andan Ala, releasing the mature cytokine which is involved in avariety of inflammatory processes. Important for defense againstpathogens. Cleaves and activates sterol regulatory element bindingproteins (SREBPs). Can also promote apoptosis.\",\n      isseed: false,\n      uniprot: \"P29466\",\n      isvalid: true,\n      importance: 3,\n      ox: 804.3886827178802,\n      oy: 384.3062451192652,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCA\",\n      altered: 0,\n      rank: 84,\n      cited: 275,\n      uniprotdesc:\n        \"Calcium-activated, phospholipid- and diacylglycerol(DAG)-dependent serine/threonine-protein kinase that is involvedin positive and negative regulation of cell proliferation,apoptosis, differentiation, migration and adhesion, tumorigenesis,cardiac hypertrophy, angiogenesis, platelet function andinflammation, by directly phosphorylating targets such as RAF1,BCL2, CSPG4, TNNT2/CTNT, or activating signaling cascade involvingMAPK1/3 (ERK1/2) and RAP1GAP. Involved in cell proliferation andcell growth arrest by positive and negative regulation of the cellcycle. Can promote cell growth by phosphorylating and activatingRAF1, which mediates the activation of the MAPK/ERK signalingcascade, and/or by up-regulating CDKN1A, which facilitates activecyclin-dependent kinase (CDK) complex formation in glioma cells.In intestinal cells stimulated by the phorbol ester PMA, cantrigger a cell cycle arrest program which is associated with theaccumulation of the hyper-phosphorylated growth-suppressive formof RB1 and induction of the CDK inhibitors CDKN1A and CDKN1B.Exhibits anti-apoptotic function in glioma cells and protects themfrom apoptosis by suppressing the p53/TP53-mediated activation ofIGFBP3, and in leukemia cells mediates anti-apoptotic action byphosphorylating BCL2. During macrophage differentiation induced bymacrophage colony-stimulating factor (CSF1), is translocated tothe nucleus and is associated with macrophage development. Afterwounding, translocates from focal contacts to lamellipodia andparticipates in the modulation of desmosomal adhesion. Plays arole in cell motility by phosphorylating CSPG4, which inducesassociation of CSPG4 with extensive lamellipodia at the cellperiphery and polarization of the cell accompanied by increases incell motility. Is highly expressed in a number of cancer cellswhere it can act as a tumor promoter and is implicated inmalignant phenotypes of several tumors such as gliomas and breastcancers. Negatively regulates myocardial contractility andpositively regulates angiogenesis, platelet aggregation andthrombus formation in arteries. Mediates hypertrophic growth ofneonatal cardiomyocytes, in part through a MAPK1/3 (ERK1/2)-dependent signaling pathway, and upon PMA treatment, is requiredto induce cardiomyocyte hypertrophy up to heart failure and death,by increasing protein synthesis, protein-DNA ratio and cellsurface area. Regulates cardiomyocyte function by phosphorylatingcardiac troponin T (TNNT2/CTNT), which induces significantreduction in actomyosin ATPase activity, myofilament calciumsensitivity and myocardial contractility. In angiogenesis, isrequired for full endothelial cell migration, adhesion tovitronectin (VTN), and vascular endothelial growth factor A(VEGFA)-dependent regulation of kinase activation and vasculartube formation. Involved in the stabilization of VEGFA mRNA atpost-transcriptional level and mediates VEGFA-induced cellproliferation. In the regulation of calcium-induced plateletaggregation, mediates signals from the CD36/GP4 receptor forgranule release, and activates the integrin heterodimer ITGA2B-ITGB3 through the RAP1GAP pathway for adhesion. During response tolipopolysaccharides (LPS), may regulate selective LPS-inducedmacrophage functions involved in host defense and inflammation.But in some inflammatory responses, may negatively regulate NF-kappa-B-induced genes, through IL1A-dependent induction of NF-kappa-B inhibitor alpha (NFKBIA/IKBA). Upon stimulation with 12-O-tetradecanoylphorbol-13-acetate (TPA), phosphorylates EIF4G1,which modulates EIF4G1 binding to MKNK1 and may be involved in theregulation of EIF4E phosphorylation. Phosphorylates KIT, leadingto inhibition of KIT activity. Phosphorylates ATF2 which promotescooperation between ATF2 and JUN, activating transcription.\",\n      isseed: false,\n      uniprot: \"P17252\",\n      isvalid: true,\n      importance: 3,\n      ox: 812.0152327436849,\n      oy: 413.32065076032404,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK1\",\n      altered: 0,\n      rank: 27,\n      cited: 2149,\n      uniprotdesc:\n        \"Plays a key role in the control of the eukaryotic cellcycle by modulating the centrosome cycle as well as mitotic onset;promotes G2-M transition, and regulates G1 progress and G1-Stransition via association with multiple interphase cyclins.Required in higher cells for entry into S-phase and mitosis.Phosphorylates PARVA/actopaxin, APC, AMPH, APC, BARD1, Bcl-xL/BCL2L1, BRCA2, CALD1, CASP8, CDC7, CDC20, CDC25A, CDC25C,CC2D1A, CSNK2 proteins/CKII, FZR1/CDH1, CDK7, CEBPB, CHAMP1,DMD/dystrophin, EEF1 proteins/EF-1, EZH2, KIF11/EG5, EGFR, FANCG,FOS, GFAP, GOLGA2/GM130, GRASP1, UBE2A/hHR6A, HIST1H1proteins/histone H1, HMGA1, HIVEP3/KRC, LMNA, LMNB, LMNC, LBR,LATS1, MAP1B, MAP4, MARCKS, MCM2, MCM4, MKLP1, MYB, NEFH, NFIC,NPC/nuclear pore complex, PITPNM1/NIR2, NPM1, NCL, NUCKS1,NPM1/numatrin, ORC1, PRKAR2A, EEF1E1/p18, EIF3F/p47, p53/TP53,NONO/p54NRB, PAPOLA, PLEC/plectin, RB1, UL40/R2, RAB4A, RAP1GAP,RCC1, RPS6KB1/S6K1, KHDRBS1/SAM68, ESPL1, SKI, BIRC5/survivin,STIP1, TEX14, beta-tubulins, MAPT/TAU, NEDD1, VIM/vimentin, TK1,FOXO1, RUNX1/AML1, SIRT2 and RUNX2. CDK1/CDC2-cyclin-B controlspronuclear union in interphase fertilized eggs. Essential forearly stages of embryonic development. During G2 and earlymitosis, CDC25A/B/C-mediated dephosphorylation activatesCDK1/cyclin complexes which phosphorylate several substrates thattrigger at least centrosome separation, Golgi dynamics, nuclearenvelope breakdown and chromosome condensation. Once chromosomesare condensed and aligned at the metaphase plate, CDK1 activity isswitched off by WEE1- and PKMYT1-mediated phosphorylation to allowsister chromatid separation, chromosome decondensation,reformation of the nuclear envelope and cytokinesis. Inactivatedby PKR/EIF2AK2- and WEE1-mediated phosphorylation upon DNA damageto stop cell cycle and genome replication at the G2 checkpointthus facilitating DNA repair. Reactivated after successful DNArepair through WIP1-dependent signaling leading to CDC25A/B/C-mediated dephosphorylation and restoring cell cycle progression.In proliferating cells, CDK1-mediated FOXO1 phosphorylation at theG2-M phase represses FOXO1 interaction with 14-3-3 proteins andthereby promotes FOXO1 nuclear accumulation and transcriptionfactor activity, leading to cell death of postmitotic neurons. Thephosphorylation of beta-tubulins regulates microtubule dynamicsduring mitosis. NEDD1 phosphorylation promotes PLK1-mediated NEDD1phosphorylation and subsequent targeting of the gamma-tubulin ringcomplex (gTuRC) to the centrosome, an important step for spindleformation. In addition, CC2D1A phosphorylation regulates CC2D1Aspindle pole localization and association with SCC1/RAD21 andcentriole cohesion during mitosis. The phosphorylation of Bcl-xL/BCL2L1 after prolongated G2 arrest upon DNA damage triggersapoptosis. In contrast, CASP8 phosphorylation during mitosisprevents its activation by proteolysis and subsequent apoptosis.This phosphorylation occurs in cancer cell lines, as well as inprimary breast tissues and lymphocytes. EZH2 phosphorylationpromotes H3K27me3 maintenance and epigenetic gene silencing. CALD1phosphorylation promotes Schwann cell migration during peripheralnerve regeneration. \",\n      isseed: false,\n      uniprot: \"P06493\",\n      isvalid: true,\n      importance: 3,\n      ox: 816.2846778918833,\n      oy: 443.01529401675197,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK9\",\n      altered: 0,\n      rank: 66,\n      cited: 448,\n      uniprotdesc:\n        \"Protein kinase involved in the regulation oftranscription. Member of the cyclin-dependent kinase pair(CDK9/cyclin-T) complex, also called positive transcriptionelongation factor b (P-TEFb), which facilitates the transitionfrom abortive to productive elongation by phosphorylating the CTD(C-terminal domain) of the large subunit of RNA polymerase II(RNAP II) POLR2A, SUPT5H and RDBP. This complex is inactive whenin the 7SK snRNP complex form. Phosphorylates EP300, MYOD1,RPB1/POLR2A and AR, and the negative elongation factors DSIF andNELF. Regulates cytokine inducible transcription networks byfacilitating promoter recognition of target transcription factors(e.g. TNF-inducible RELA/p65 activation and IL-6-inducible STAT3signaling). Promotes RNA synthesis in genetic programs for cellgrowth, differentiation and viral pathogenesis. P-TEFb is alsoinvolved in cotranscriptional histone modification, mRNAprocessing and mRNA export. Modulates a complex network ofchromatin modifications including histone H2B monoubiquitination(H2Bub1), H3 lysine 4 trimethylation (H3K4me3) and H3K36me3;integrates phosphorylation during transcription with chromatinmodifications to control co-transcriptional histone mRNAprocessing. The CDK9/cyclin-K complex has also a kinase activitytowards CTD of RNAP II and can substitute for CDK9/cyclin-T P-TEFbin vitro. Replication stress response protein; the CDK9/cyclin-Kcomplex is required for genome integrity maintenance, by promotingcell cycle recovery from replication arrest and limiting single-stranded DNA amount in response to replication stress, thusreducing the breakdown of stalled replication forks and avoidingDNA damage. In addition, probable function in DNA repair ofisoform 2 via interaction with KU70/XRCC6. Promotes cardiacmyocyte enlargement. RPB1/POLR2A phosphorylation on 'Ser-2' in CTDactivates transcription. AR phosphorylation modulates ARtranscription factor promoter selectivity and cell growth. DSIFand NELF phosphorylation promotes transcription by inhibitingtheir negative effect. The phosphorylation of MYOD1 enhances itstranscriptional activity and thus promotes muscle differentiation.\",\n      isseed: false,\n      uniprot: \"P50750\",\n      isvalid: true,\n      importance: 3,\n      ox: 817.1413594156943,\n      oy: 473.0030598015976,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RB1\",\n      altered: 0,\n      rank: 15,\n      cited: 3201,\n      uniprotdesc:\n        \"Key regulator of entry into cell division that acts as atumor suppressor. Promotes G0-G1 transition when phosphorylated byCDK3/cyclin-C. Acts as a transcription repressor of E2F1 targetgenes. The underphosphorylated, active form of RB1 interacts withE2F1 and represses its transcription activity, leading to cellcycle arrest. Directly involved in heterochromatin formation bymaintaining overall chromatin structure and, in particular, thatof constitutive heterochromatin by stabilizing histonemethylation. Recruits and targets histone methyltransferasesSUV39H1, SUV420H1 and SUV420H2, leading to epigenetictranscriptional repression. Controls histone H4 'Lys-20'trimethylation. Inhibits the intrinsic kinase activity of TAF1.Mediates transcriptional repression by SMARCA4/BRG1 by recruitinga histone deacetylase (HDAC) complex to the c-FOS promoter. Inresting neurons, transcription of the c-FOS promoter is inhibitedby BRG1-dependent recruitment of a phospho-RB1-HDAC1 repressorcomplex. Upon calcium influx, RB1 is dephosphorylated bycalcineurin, which leads to release of the repressor complex (Bysimilarity). In case of viral infections, interactions with SV40large T antigen, HPV E7 protein or adenovirus E1A protein inducethe disassembly of RB1-E2F1 complex thereby disrupting RB1'sactivity. \",\n      isseed: false,\n      uniprot: \"P06400\",\n      isvalid: true,\n      importance: 3,\n      ox: 814.574109161329,\n      oy: 502.89301172747827,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK7\",\n      altered: 0,\n      rank: 72,\n      cited: 372,\n      uniprotdesc:\n        \"Serine/threonine kinase involved in cell cycle controland in RNA polymerase II-mediated RNA transcription. Cyclin-dependent kinases (CDKs) are activated by the binding to a cyclinand mediate the progression through the cell cycle. Each differentcomplex controls a specific transition between 2 subsequent phasesin the cell cycle. Required for both activation and complexformation of CDK1/cyclin-B during G2-M transition, and foractivation of CDK2/cyclins during G1-S transition (but not complexformation). CDK7 is the catalytic subunit of the CDK-activatingkinase (CAK) complex. Phosphorylates SPT5/SUPT5H, SF1/NR5A1,POLR2A, p53/TP53, CDK1, CDK2, CDK4, CDK6 and CDK11B/CDK11. CAKactivates the cyclin-associated kinases CDK1, CDK2, CDK4 and CDK6by threonine phosphorylation, thus regulating cell cycleprogression. CAK complexed to the core-TFIIH basal transcriptionfactor activates RNA polymerase II by serine phosphorylation ofthe repetitive C-terminal domain (CTD) of its large subunit(POLR2A), allowing its escape from the promoter and elongation ofthe transcripts. Phosphorylation of POLR2A in complex with DNApromotes transcription initiation by triggering dissociation fromDNA. Its expression and activity are constant throughout the cellcycle. Upon DNA damage, triggers p53/TP53 activation byphosphorylation, but is inactivated in turn by p53/TP53; thisfeedback loop may lead to an arrest of the cell cycle and of thetranscription, helping in cell recovery, or to apoptosis. Requiredfor DNA-bound peptides-mediated transcription and cellular growthinhibition. \",\n      isseed: false,\n      uniprot: \"P50613\",\n      isvalid: true,\n      importance: 3,\n      ox: 808.6163951619568,\n      oy: 532.2954885602501,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGA2\",\n      altered: 0,\n      rank: 82,\n      cited: 280,\n      uniprotdesc:\n        \"Functions as a transcriptional regulator. Functions incell cycle regulation through CCNA2. Plays an important role inchromosome condensation during the meiotic G2/M transition ofspermatocytes. \",\n      isseed: false,\n      uniprot: \"P52926\",\n      isvalid: true,\n      importance: 3,\n      ox: 390.3801522944653,\n      oy: 399.55122105213593,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK3\",\n      altered: 0,\n      rank: 112,\n      cited: 146,\n      uniprotdesc:\n        \"Serine/threonine kinase which is involved in theregulation of apoptosis, autophagy, transcription, translation andactin cytoskeleton reorganization. Involved in the regulation ofsmooth muscle contraction. Regulates both type I (caspase-dependent) apoptotic and type II (caspase-independent) autophagiccell deaths signal, depending on the cellular setting. Involved inregulation of starvation-induced autophagy. Regulates myosinphosphorylation in both smooth muscle and non-muscle cells. Insmooth muscle, regulates myosin either directly by phosphorylatingMYL12B and MYL9 or through inhibition of smooth muscle myosinphosphatase (SMPP1M) via phosphorylation of PPP1R12A; theinhibition of SMPP1M functions to enhance muscle responsiveness toCa(2+) and promote a contractile state. Phosphorylates MYL12B innon-muscle cells leading to reorganization of actin cytoskeleton.Isoform 2 can phosphorylate myosin, PPP1R12A and MYL12B.Overexpression leads to condensation of actin stress fibers intothick bundles. Involved in actin filament focal adhesion dynamics.The function in both reorganization of actin cytoskeleton andfocal adhesion dissolution is modulated by RhoD. Positivelyregulates canonical Wnt/beta-catenin signaling through interactionwith NLK and TCF7L2. Phosphorylates RPL13A on 'Ser-77' uponinterferon-gamma activation which is causing RPL13A release fromthe ribosome, RPL13A association with the GAIT complex and itssubsequent involvement in transcript-selective translationinhibition. Enhances transcription from AR-responsive promoters ina hormone- and kinase-dependent manner. Involved in regulation ofcell cycle progression and cell proliferation. May be a tumorsuppressor. \",\n      isseed: false,\n      uniprot: \"O43293\",\n      isvalid: true,\n      importance: 3,\n      ox: 786.8834349406518,\n      oy: 588.1161439097402,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGA1\",\n      altered: 0,\n      rank: 111,\n      cited: 147,\n      uniprotdesc:\n        \"HMG-I/Y bind preferentially to the minor groove of A+Trich regions in double-stranded DNA. It is suggested that theseproteins could function in nucleosome phasing and in the 3'-endprocessing of mRNA transcripts. They are also involved in thetranscription regulation of genes containing, or in closeproximity to A+T-rich regions.\",\n      isseed: false,\n      uniprot: \"P17096\",\n      isvalid: true,\n      importance: 3,\n      ox: 403.8862646389955,\n      oy: 372.7634453076488,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCD\",\n      altered: 0,\n      rank: 122,\n      cited: 90,\n      uniprotdesc:\n        \"Calcium-independent, phospholipid- and diacylglycerol(DAG)-dependent serine/threonine-protein kinase that playscontrasting roles in cell death and cell survival by functioningas a pro-apoptotic protein during DNA damage-induced apoptosis,but acting as an anti-apoptotic protein during cytokine receptor-initiated cell death, is involved in tumor suppression as well assurvival of several cancers, is required for oxygen radicalproduction by NADPH oxidase and acts as positive or negativeregulator in platelet functional responses. Negatively regulates Bcell proliferation and also has an important function in self-antigen induced B cell tolerance induction. Upon DNA damage,activates the promoter of the death-promoting transcription factorBCLAF1/Btf to trigger BCLAF1-mediated p53/TP53 gene transcriptionand apoptosis. In response to oxidative stress, interact with andactivate CHUK/IKKA in the nucleus, causing the phosphorylation ofp53/TP53. In the case of ER stress or DNA damage-inducedapoptosis, can form a complex with the tyrosine-protein kinaseABL1 which trigger apoptosis independently of p53/TP53. In cytosolcan trigger apoptosis by activating MAPK11 or MAPK14, inhibitingAKT1 and decreasing the level of X-linked inhibitor of apoptosisprotein (XIAP), whereas in nucleus induces apoptosis via theactivation of MAPK8 or MAPK9. Upon ionizing radiation treatment,is required for the activation of the apoptosis regulators BAX andBAK, which trigger the mitochondrial cell death pathway. Canphosphorylate MCL1 and target it for degradation which issufficient to trigger for BAX activation and apoptosis. Isrequired for the control of cell cycle progression both at G1/Sand G2/M phases. Mediates phorbol 12-myristate 13-acetate (PMA)-induced inhibition of cell cycle progression at G1/S phase by up-regulating the CDK inhibitor CDKN1A/p21 and inhibiting the cyclinCCNA2 promoter activity. In response to UV irradiation canphosphorylate CDK1, which is important for the G2/M DNA damagecheckpoint activation. Can protect glioma cells from the apoptosisinduced by TNFSF10/TRAIL, probably by inducing increasedphosphorylation and subsequent activation of AKT1. Is highlyexpressed in a number of cancer cells and promotes cell survivaland resistance against chemotherapeutic drugs by inducing cyclinD1 (CCND1) and hyperphosphorylation of RB1, and via several pro-survival pathways, including NF-kappa-B, AKT1 and MAPK1/3(ERK1/2). Can also act as tumor suppressor upon mitogenicstimulation with PMA or TPA. In N-formyl-methionyl-leucyl-phenylalanine (fMLP)-treated cells, is required for NCF1 (p47-phox) phosphorylation and activation of NADPH oxidase activity,and regulates TNF-elicited superoxide anion production inneutrophils, by direct phosphorylation and activation of NCF1 orindirectly through MAPK1/3 (ERK1/2) signaling pathways. May alsoplay a role in the regulation of NADPH oxidase activity ineosinophil after stimulation with IL5, leukotriene B4 or PMA. Incollagen-induced platelet aggregation, acts a negative regulatorof filopodia formation and actin polymerization by interactingwith and negatively regulating VASP phosphorylation. Downstream ofPAR1, PAR4 and CD36/GP4 receptors, regulates differentiallyplatelet dense granule secretion; acts as a positive regulator inPAR-mediated granule secretion, whereas it negatively regulatesCD36/GP4-mediated granule release. Phosphorylates MUC1 in the C-terminal and regulates the interaction between MUC1 and beta-catenin. The catalytic subunit phosphorylates 14-3-3 proteins(YWHAB, YWHAZ and YWHAH) in a sphingosine-dependent fashion (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"Q05655\",\n      isvalid: true,\n      importance: 3,\n      ox: 753.0720747024197,\n      oy: 637.5636821949563,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"UBN1\",\n      altered: 0,\n      rank: 180,\n      cited: 8,\n      uniprotdesc:\n        \"Acts as a novel regulator of senescence. Involved in theformation of senescence-associated heterochromatin foci (SAHF),which represses expression of proliferation-promoting genes. Bindsto proliferation-promoting genes. May be required for replication-independent chromatin assembly. \",\n      isseed: false,\n      uniprot: \"Q9NPG3\",\n      isvalid: true,\n      importance: 3,\n      ox: 421.7252599281241,\n      oy: 348.6435313966405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK5\",\n      altered: 0,\n      rank: 44,\n      cited: 837,\n      uniprotdesc:\n        \"Proline-directed serine/threonine-protein kinaseessential for neuronal cell cycle arrest and differentiation andmay be involved in apoptotic cell death in neuronal diseases bytriggering abortive cell cycle re-entry. Interacts with D1 and D3-type G1 cyclins. Phosphorylates SRC, NOS3, VIM/vimentin,p35/CDK5R1, MEF2A, SIPA1L1, SH3GLB1, PXN, PAK1, MCAM/MUC18, SEPT5,SYN1, DNM1, AMPH, SYNJ1, CDK16, RAC1, RHOA, CDC42, TONEBP/NFAT5,MAPT/TAU, MAP1B, histone H1, p53/TP53, HDAC1, APEX1, PTK2/FAK1,huntingtin/HTT, ATM, MAP2, NEFH and NEFM. Regulates severalneuronal development and physiological processes includingneuronal survival, migration and differentiation, axonal andneurite growth, synaptogenesis, oligodendrocyte differentiation,synaptic plasticity and neurotransmission, by phosphorylating keyproteins. Activated by interaction with CDK5R1 (p35) and CDK5R2(p39), especially in post-mitotic neurons, and promotes CDK5R1(p35) expression in an autostimulation loop. Phosphorylates manydownstream substrates such as Rho and Ras family small GTPases(e.g. PAK1, RAC1, RHOA, CDC42) or microtubule-binding proteins(e.g. MAPT/TAU, MAP2, MAP1B), and modulates actin dynamics toregulate neurite growth and/or spine morphogenesis. Phosphorylatesalso exocytosis associated proteins such as MCAM/MUC18, SEPT5,SYN1, and CDK16/PCTAIRE1 as well as endocytosis associatedproteins such as DNM1, AMPH and SYNJ1 at synaptic terminals. Inthe mature central nervous system (CNS), regulatesneurotransmitter movements by phosphorylating substratesassociated with neurotransmitter release and synapse plasticity;synaptic vesicle exocytosis, vesicles fusion with the presynapticmembrane, and endocytosis. Promotes cell survival by activatinganti-apoptotic proteins BCL2 and STAT3, and negatively regulatingof JNK3/MAPK10 activity. Phosphorylation of p53/TP53 in responseto genotoxic and oxidative stresses enhances its stabilization bypreventing ubiquitin ligase-mediated proteasomal degradation, andinduces transactivation of p53/TP53 target genes, thus regulatingapoptosis. Phosphorylation of p35/CDK5R1 enhances itsstabilization by preventing calpain-mediated proteolysis producingp25/CDK5R1 and avoiding ubiquitin ligase-mediated proteasomaldegradation. During aberrant cell-cycle activity and DNA damage,p25/CDK5 activity elicits cell-cycle activity and double-strandDNA breaks that precedes neuronal death by deregulating HDAC1. DNAdamage triggered phosphorylation of huntingtin/HTT in nuclei ofneurons protects neurons against polyglutamine expansion as wellas DNA damage mediated toxicity. Phosphorylation of PXN reducesits interaction with PTK2/FAK1 in matrix-cell focal adhesions(MCFA) during oligodendrocytes (OLs) differentiation. Negativeregulator of Wnt/beta-catenin signaling pathway. Activator of theGAIT (IFN-gamma-activated inhibitor of translation) pathway, whichsuppresses expression of a post-transcriptional regulon ofproinflammatory genes in myeloid cells; phosphorylates the linkerdomain of glutamyl-prolyl tRNA synthetase (EPRS) in a IFN-gamma-dependent manner, the initial event in assembly of the GAITcomplex. Phosphorylation of SH3GLB1 is required for autophagyinduction in starved neurons. Phosphorylation of TONEBP/NFAT5 inresponse to osmotic stress mediates its rapid nuclearlocalization. MEF2 is inactivated by phosphorylation in nucleus inresponse to neurotoxin, thus leading to neuronal apoptosis. APEX1AP-endodeoxyribonuclease is repressed by phosphorylation,resulting in accumulation of DNA damage and contributing toneuronal death. NOS3 phosphorylation down regulates NOS3-derivednitrite (NO) levels. SRC phosphorylation mediates its ubiquitin-dependent degradation and thus leads to cytoskeletalreorganization. May regulate endothelial cell migration andangiogenesis via the modulation of lamellipodia formation.Involved in dendritic spine morphogenesis by mediating the EFNA1-EPHA4 signaling. The complex p35/CDK5 participates in theregulation of the circadian clock by modulating the function ofCLOCK protein: phosphorylates CLOCK at 'Thr-451' and 'Thr-461' andregulates the transcriptional activity of the CLOCK-ARNTL/BMAL1heterodimer in association with altered stability and subcellulardistribution. \",\n      isseed: false,\n      uniprot: \"Q00535\",\n      isvalid: true,\n      importance: 3,\n      ox: 708.9396993235885,\n      oy: 678.0680099519911,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK2\",\n      altered: 0,\n      rank: 34,\n      cited: 1469,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved in the controlof the cell cycle; essential for meiosis, but dispensable formitosis. Phosphorylates CTNNB1, USP37, p53/TP53, NPM1, CDK7, RB1,BRCA2, MYC, NPAT, EZH2. Interacts with cyclins A, B1, B3, D, or E.Triggers duplication of centrosomes and DNA. Acts at the G1-Stransition to promote the E2F transcriptional program and theinitiation of DNA synthesis, and modulates G2 progression;controls the timing of entry into mitosis/meiosis by controllingthe subsequent activation of cyclin B/CDK1 by phosphorylation, andcoordinates the activation of cyclin B/CDK1 at the centrosome andin the nucleus. Crucial role in orchestrating a fine balancebetween cellular proliferation, cell death, and DNA repair inhuman embryonic stem cells (hESCs). Activity of CDK2 is maximalduring S phase and G2; activated by interaction with cyclin Eduring the early stages of DNA synthesis to permit G1-Stransition, and subsequently activated by cyclin A2 (cyclin A1 ingerm cells) during the late stages of DNA replication to drive thetransition from S phase to mitosis, the G2 phase. EZH2phosphorylation promotes H3K27me3 maintenance and epigenetic genesilencing. Phosphorylates CABLES1 (By similarity). Cyclin E/CDK2prevents oxidative stress-mediated Ras-induced senescence byphosphorylating MYC. Involved in G1-S phase DNA damage checkpointthat prevents cells with damaged DNA from initiating mitosis;regulates homologous recombination-dependent repair byphosphorylating BRCA2, this phosphorylation is low in S phase whenrecombination is active, but increases as cells progress towardsmitosis. In response to DNA damage, double-strand break repair byhomologous recombination a reduction of CDK2-mediated BRCA2phosphorylation. Phosphorylation of RB1 disturbs its interactionwith E2F1. NPM1 phosphorylation by cyclin E/CDK2 promotes itsdissociates from unduplicated centrosomes, thus initiatingcentrosome duplication. Cyclin E/CDK2-mediated phosphorylation ofNPAT at G1-S transition and until prophase stimulates the NPAT-mediated activation of histone gene transcription during S phase.Required for vitamin D-mediated growth inhibition by being itselfinactivated. Involved in the nitric oxide- (NO) mediated signalingin a nitrosylation/activation-dependent manner. USP37 is activatedby phosphorylation and thus triggers G1-S transition. CTNNB1phosphorylation regulates insulin internalization. \",\n      isseed: false,\n      uniprot: \"P24941\",\n      isvalid: true,\n      importance: 3,\n      ox: 683.702093338653,\n      oy: 694.2872344756593,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK1\",\n      altered: 0,\n      rank: 49,\n      cited: 691,\n      uniprotdesc:\n        \"Calcium/calmodulin-dependent serine/threonine kinaseinvolved in multiple cellular signaling pathways that trigger cellsurvival, apoptosis, and autophagy. Regulates both type Iapoptotic and type II autophagic cell deaths signal, depending onthe cellular setting. The former is caspase-dependent, while thelatter is caspase-independent and is characterized by theaccumulation of autophagic vesicles. Phosphorylates PIN1 resultingin inhibition of its catalytic activity, nuclear localization, andcellular function. Phosphorylates TPM1, enhancing stress fiberformation in endothelial cells. Phosphorylates STX1A andsignificantly decreases its binding to STXBP1. PhosphorylatesPRKD1 and regulates JNK signaling by binding and activating PRKD1under oxidative stress. Phosphorylates BECN1, reducing itsinteraction with BCL2 and BCL2L1 and promoting the induction ofautophagy. Phosphorylates TSC2, disrupting the TSC1-TSC2 complexand stimulating mTORC1 activity in a growth factor-dependentpathway. Phosphorylates RPS6, MYL9 and DAPK3. Acts as a signalingamplifier of NMDA receptors at extrasynaptic sites for mediatingbrain damage in stroke. Cerebral ischemia recruits DAPK1 into theNMDA receptor complex and it phosphorylates GRINB at Ser-1303inducing injurious Ca(2+) influx through NMDA receptor channels,resulting in an irreversible neuronal death. Required togetherwith DAPK3 for phosphorylation of RPL13A upon interferon-gammaactivation which is causing RPL13A involvement in transcript-selective translation inhibition.Isoform 2 cannot induce apoptosis but can inducemembrane blebbing.\",\n      isseed: false,\n      uniprot: \"P53355\",\n      isvalid: true,\n      importance: 3,\n      ox: 656.7801404779123,\n      oy: 707.5238675129558,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RFWD2\",\n      altered: 0,\n      rank: 143,\n      cited: 60,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase that mediates ubiquitinationand subsequent proteasomal degradation of target proteins. E3ubiquitin ligases accept ubiquitin from an E2 ubiquitin-conjugating enzyme in the form of a thioester and then directlytransfers the ubiquitin to targeted substrates. Involved in JUNubiquitination and degradation. Directly involved in p53 (TP53)ubiquitination and degradation, thereby abolishing p53-dependenttranscription and apoptosis. Ubiquitinates p53 independently ofMDM2 or RCHY1. Probably mediates E3 ubiquitin ligase activity byfunctioning as the essential RING domain subunit of larger E3complexes. In contrast, it does not constitute the catalytic RINGsubunit in the DCX DET1-COP1 complex that negatively regulatesJUN, the ubiquitin ligase activity being mediated by RBX1.Involved in 14-3-3 protein sigma/SFN ubiquitination andproteasomal degradation, leading to AKT activation and promotionof cell survival. Ubiquitinates MTA1 leading to its proteasomaldegradation. \",\n      isseed: false,\n      uniprot: \"Q8NHY2\",\n      isvalid: true,\n      importance: 3,\n      ox: 628.5248095687266,\n      oy: 717.6053493094187,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPM1J\",\n      altered: 0,\n      rank: 191,\n      cited: 3,\n      uniprotdesc: \"\",\n      isseed: false,\n      uniprot: \"Q5JR12\",\n      isvalid: true,\n      importance: 3,\n      ox: 599.3044520604564,\n      oy: 724.4002523321917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"BTG2\",\n      altered: 0,\n      rank: 97,\n      cited: 205,\n      uniprotdesc:\n        \"Anti-proliferative protein; the function is mediated byassociation with deadenylase subunits of the CCR4-NOT complex.Activates mRNA deadenylation in a CNOT6 and CNOT7-dependentmanner. In vitro can inhibit deadenylase activity of CNOT7 andCNOT8. Involved in cell cycle regulation. Could be involved in thegrowth arrest and differentiation of the neuronal precursors (Bysimilarity). Modulates transcription regulation mediated by ESR1.Involved in mitochondrial depolarization and neurite outgrowth.\",\n      isseed: false,\n      uniprot: \"P78543\",\n      isvalid: true,\n      importance: 3,\n      ox: 569.5000000000001,\n      oy: 727.8199946289078,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CD82\",\n      altered: 0,\n      rank: 69,\n      cited: 417,\n      uniprotdesc:\n        \"Associates with CD4 or CD8 and delivers costimulatorysignals for the TCR/CD3 pathway.\",\n      isseed: false,\n      uniprot: \"P27701\",\n      isvalid: true,\n      importance: 3,\n      ox: 539.5,\n      oy: 727.8199946289078,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIPK2\",\n      altered: 0,\n      rank: 70,\n      cited: 405,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved intranscription regulation, p53/TP53-mediated cellular apoptosis andregulation of the cell cycle. Acts as a corepressor of severaltranscription factors, including SMAD1 and POU4F1/Brn3a andprobably NK homeodomain transcription factors. PhosphorylatesPDX1, ATF1, PML, p53/TP53, CREB1, CTBP1, CBX4, RUNX1, EP300,CTNNB1, HMGA1 and ZBTB4. Inhibits cell growth and promotesapoptosis through the activation of p53/TP53 both at thetranscription level and at the protein level (by phosphorylationand indirect acetylation). The phosphorylation of p53/TP53 may bemediated by a p53/TP53-HIPK2-AXIN1 complex. Involved in theresponse to hypoxia by acting as a transcriptional co-suppressorof HIF1A. Mediates transcriptional activation of TP73. In responseto TGFB, cooperates with DAXX to activate JNK. Negative regulatorthrough phosphorylation and subsequent proteasomal degradation ofCTNNB1 and the antiapoptotic factor CTBP1. In the Wnt/beta-cateninsignaling pathway acts as an intermediate kinase betweenMAP3K7/TAK1 and NLK to promote the proteasomal degradation of MYB.Phosphorylates CBX4 upon DNA damage and promotes its E3 SUMO-protein ligase activity. Activates CREB1 and ATF1 transcriptionfactors by phosphorylation in response to genotoxic stress. Inresponse to DNA damage, stabilizes PML by phosphorylation. PML,HIPK2 and FBXO3 may act synergically to activate p53/TP53-dependent transactivation. Promotes angiogenesis, and is involvedin erythroid differentiation, especially during fetal livererythropoiesis. Phosphorylation of RUNX1 and EP300 stimulatesEP300 transcription regulation activity. Triggers ZBTB4 proteindegradation in response to DNA damage. Modulates HMGA1 DNA-bindingaffinity. In response to high glucose, triggers phosphorylation-mediated subnuclear localization shifting of PDX1. Involved in theregulation of eye size, lens formation and retinal laminationduring late embryogenesis. \",\n      isseed: false,\n      uniprot: \"Q9H2X6\",\n      isvalid: true,\n      importance: 3,\n      ox: 509.69554793954376,\n      oy: 724.4002523321917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DDB2\",\n      altered: 0,\n      rank: 102,\n      cited: 168,\n      uniprotdesc:\n        \"Required for DNA repair. Binds to DDB1 to form the UV-damaged DNA-binding protein complex (the UV-DDB complex). The UV-DDB complex may recognize UV-induced DNA damage and recruitproteins of the nucleotide excision repair pathway (the NERpathway) to initiate DNA repair. The UV-DDB complex preferentiallybinds to cyclobutane pyrimidine dimers (CPD), 6-4 photoproducts(6-4 PP), apurinic sites and short mismatches. Also appears tofunction as the substrate recognition module for the DCX (DDB1-CUL4-X-box) E3 ubiquitin-protein ligase complex DDB1-CUL4-ROC1(also known as CUL4-DDB-ROC1 and CUL4-DDB-RBX1). The DDB1-CUL4-ROC1 complex may ubiquitinate histone H2A, histone H3 and histoneH4 at sites of UV-induced DNA damage. The ubiquitination ofhistones may facilitate their removal from the nucleosome andpromote subsequent DNA repair. The DDB1-CUL4-ROC1 complex alsoubiquitinates XPC, which may enhance DNA-binding by XPC andpromote NER. Isoform D1 and isoform D2 inhibit UV-damaged DNArepair. \",\n      isseed: false,\n      uniprot: \"Q92466\",\n      isvalid: true,\n      importance: 3,\n      ox: 480.47519043127363,\n      oy: 717.6053493094188,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2\",\n      altered: 0,\n      rank: 7,\n      cited: 5024,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase that mediates ubiquitinationof p53/TP53, leading to its degradation by the proteasome.Inhibits p53/TP53- and p73/TP73-mediated cell cycle arrest andapoptosis by binding its transcriptional activation domain. Alsoacts as a ubiquitin ligase E3 toward itself and ARRB1. Permits thenuclear export of p53/TP53. Promotes proteasome-dependentubiquitin-independent degradation of retinoblastoma RB1 protein.Inhibits DAXX-mediated apoptosis by inducing its ubiquitinationand degradation. Component of the TRIM28/KAP1-MDM2-p53/TP53complex involved in stabilizing p53/TP53. Also component of theTRIM28/KAP1-ERBB4-MDM2 complex which links growth factor and DNAdamage response pathways. Mediates ubiquitination and subsequentproteasome degradation of DYRK2 in nucleus. Ubiquitinates IGF1Rand SNAI1 and promotes them to proteasomal degradation.\",\n      isseed: false,\n      uniprot: \"Q00987\",\n      isvalid: true,\n      importance: 3,\n      ox: 599.0684773104314,\n      oy: 636.667218490667,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CTSD\",\n      altered: 0,\n      rank: 85,\n      cited: 273,\n      uniprotdesc:\n        \"Acid protease active in intracellular protein breakdown.Involved in the pathogenesis of several diseases such as breastcancer and possibly Alzheimer disease.\",\n      isseed: false,\n      uniprot: \"P07339\",\n      isvalid: true,\n      importance: 3,\n      ox: 425.2979066613468,\n      oy: 694.287234475659,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NGFR\",\n      altered: 0,\n      rank: 80,\n      cited: 313,\n      uniprotdesc:\n        \"Plays a role in the regulation of the translocation ofGLUT4 to the cell surface in adipocytes and skeletal muscle cellsin response to insulin, probably by regulating RAB31 activity, andthereby contributes to the regulation of insulin-dependent glucoseuptake (By similarity). Low affinity receptor which can bind toNGF, BDNF, NT-3, and NT-4. Can mediate cell survival as well ascell death of neural cells. Necessary for the circadianoscillation of the clock genes ARNTL/BMAL1, PER1, PER2 and NR1D1in the suprachiasmatic nucleus (SCN) of the brain and in liver andof the genes involved in glucose and lipid metabolism in theliver. \",\n      isseed: false,\n      uniprot: \"P08138\",\n      isvalid: true,\n      importance: 3,\n      ox: 400.06030067641166,\n      oy: 678.0680099519913,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CARM1\",\n      altered: 0,\n      rank: 207,\n      cited: 152,\n      uniprotdesc:\n        \"Methylates (mono- and asymmetric dimethylation) theguanidino nitrogens of arginyl residues in several proteinsinvolved in DNA packaging, transcription regulation, pre-mRNAsplicing, and mRNA stability. Recruited to promoters upon geneactivation together with histone acetyltransferases fromEP300/P300 and p160 families, methylates histone H3 at 'Arg-17'(H3R17me), forming mainly asymmetric dimethylarginine (H3R17me2a),leading to activate transcription via chromatin remodeling. Duringnuclear hormone receptor activation and TCF7L2/TCF4 activation,acts synergically with EP300/P300 and either one of the p160histone acetyltransferases NCOA1/SRC1, NCOA2/GRIP1 and NCOA3/ACTRor CTNNB1/beta-catenin to activate transcription. During myogenictranscriptional activation, acts together with NCOA3/ACTR as acoactivator for MEF2C. During monocyte inflammatory stimulation,acts together with EP300/P300 as a coactivator for NF-kappa-B.Acts as coactivator for PPARG, promotes adipocyte differentiationand the accumulation of brown fat tissue. Plays a role in theregulation of pre-mRNA alternative splicing by methylation ofsplicing factors. Also seems to be involved in p53/TP53transcriptional activation. Methylates EP300/P300, both at 'Arg-2142', which may loosen its interaction with NCOA2/GRIP1, and at'Arg-580' and 'Arg-604' in the KIX domain, which impairs itsinteraction with CREB and inhibits CREB-dependent transcriptionalactivation. Also methylates arginine residues in RNA-bindingproteins PABPC1, ELAVL1 and ELAV4, which may affect their mRNA-stabilizing properties and the half-life of their target mRNAs.\",\n      isseed: false,\n      uniprot: \"Q86X55\",\n      isvalid: true,\n      importance: 2,\n      ox: 376.83605235723905,\n      oy: 659.0776363377252,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TYRP1\",\n      altered: 0,\n      rank: 87,\n      cited: 265,\n      uniprotdesc:\n        \"Oxidation of 5,6-dihydroxyindole-2-carboxylic acid(DHICA) into indole-5,6-quinone-2-carboxylic acid. May regulate orinfluence the type of melanin synthesized.\",\n      isseed: false,\n      uniprot: \"P17643\",\n      isvalid: true,\n      importance: 3,\n      ox: 355.92792529758043,\n      oy: 637.5636821949564,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKDC\",\n      altered: 0,\n      rank: 74,\n      cited: 363,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase that acts as a molecularsensor for DNA damage. Involved in DNA non-homologous end joining(NHEJ) required for double-strand break (DSB) repair and V(D)Jrecombination. Must be bound to DNA to express its catalyticproperties. Promotes processing of hairpin DNA structures in V(D)Jrecombination by activation of the hairpin endonuclease artemis(DCLRE1C). The assembly of the DNA-PK complex at DNA ends is alsorequired for the NHEJ ligation step. Required to protect and alignbroken ends of DNA. May also act as a scaffold protein to aid thelocalization of DNA repair proteins to the site of damage. Foundat the ends of chromosomes, suggesting a further role in themaintenance of telomeric stability and the prevention ofchromosomal end fusion. Also involved in modulation oftranscription. Recognizes the substrate consensus sequence [ST]-Q.Phosphorylates 'Ser-139' of histone variant H2AX/H2AFX, therebyregulating DNA damage response mechanism. Phosphorylates DCLRE1C,c-Abl/ABL1, histone H1, HSPCA, c-jun/JUN, p53/TP53, PARP1, POU2F1,DHX9, SRF, XRCC1, XRCC1, XRCC4, XRCC5, XRCC6, WRN, MYC and RFA2.Can phosphorylate C1D not only in the presence of linear DNA butalso in the presence of supercoiled DNA. Ability to phosphorylatep53/TP53 in the presence of supercoiled DNA is dependent on C1D.Contributes to the determination of the circadian period length byantagonizing phosphorylation of CRY1 'Ser-588' and increasing CRY1protein stability, most likely through an indirect machanism.Interacts with CRY1 and CRY2; negatively regulates CRY1phosphorylation. \",\n      isseed: false,\n      uniprot: \"P78527\",\n      isvalid: true,\n      importance: 3,\n      ox: 337.6084889085172,\n      oy: 613.806614817288,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIC1\",\n      altered: 0,\n      rank: 99,\n      cited: 185,\n      uniprotdesc:\n        \"Transcriptional repressor. Recognizes and binds to theconsensus sequence '5-[CG]NG[CG]GGGCA[CA]CC-3'. May act as a tumorsuppressor. May be involved in development of head, face, limbsand ventral body wall. Involved in down-regulation of SIRT1 andthereby is involved in regulation of p53/TP53-dependent apoptoticDNA-damage responses. The specific target gene promoterassociation seems to be depend on corepressors, such as CTBP1 orCTBP2 and MTA1. The regulation of SIRT1 transcription in responseto nutrient deprivation seems to involve CTBP1. In cooperationwith MTA1 (indicative for an association with the NuRD complex)represses transcription from CCND1/cyclin-D1 and CDKN1C/p57Kip2specifically in quiescent cells. Involved in regulation of the Wntsignaling pathway probably by association with TCF7L2 andpreventing TCF7L2 and CTNNB1 association with promoters of TCF-responsive genes. Seems to repress transcription from E2F1 andATOH1 which involves ARID1A, indicative for the participation of adistinct SWI/SNF-type chromatin-remodeling complex. Probablyrepresses transcription from ACKR3, FGFBP1 and EFNA1.\",\n      isseed: false,\n      uniprot: \"Q14526\",\n      isvalid: true,\n      importance: 3,\n      ox: 322.1165650593482,\n      oy: 588.1161439097402,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TAP1\",\n      altered: 0,\n      rank: 63,\n      cited: 474,\n      uniprotdesc:\n        \"Involved in the transport of antigens from the cytoplasmto the endoplasmic reticulum for association with MHC class Imolecules. Also acts as a molecular scaffold for the final stageof MHC class I folding, namely the binding of peptide. Nascent MHCclass I molecules associate with TAP via tapasin. Inhibited by thecovalent attachment of herpes simplex virus ICP47 protein, whichblocks the peptide-binding site of TAP. Inhibited by humancytomegalovirus US6 glycoprotein, which binds to the lumenal sideof the TAP complex and inhibits peptide translocation byspecifically blocking ATP-binding to TAP1 and prevents theconformational rearrangement of TAP induced by peptide binding.Inhibited by human adenovirus E3-19K glycoprotein, which binds theTAP complex and acts as a tapasin inhibitor, preventing MHC classI/TAP association. Expression of TAP1 is down-regulated by humanEpstein-Barr virus vIL-10 protein, thereby affecting the transportof peptides into the endoplasmic reticulum and subsequent peptideloading by MHC class I molecules.\",\n      isseed: false,\n      uniprot: \"Q03518\",\n      isvalid: true,\n      importance: 3,\n      ox: 309.6541146692916,\n      oy: 560.8271840491045,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PYCARD\",\n      altered: 0,\n      rank: 89,\n      cited: 244,\n      uniprotdesc:\n        \"Functions as key mediator in apoptosis and inflammation.Promotes caspase-mediated apoptosis involving predominantlycaspase-8 and also caspase-9 in a probable cell type-specificmanner. Involved in activation of the mitochondrial apoptoticpathway, promotes caspase-8-dependent proteolytic maturation ofBID independently of FADD in certain cell types and also mediatesmitochondrial translocation of BAX and activates BAX-dependentapoptosis coupled to activation of caspase-9, -2 and -3. Involvedin macrophage pyroptosis, a caspase-1-dependent inflammatory formof cell death and is the major constituent of the ASC pyroptosomewhich forms upon potassium depletion and rapidly recruits andactivates caspase-1. In innate immune response believed to act asan integral adapter in the assembly of the inflammasome whichactivates caspase-1 leading to processing and secretion ofproinflammatory cytokines. The function as activating adapter indifferent types of inflammasomes is mediated by the DAPIN and CARDdomains and their homotypic interactions. Required for recruitmentof caspase-1 to inflammasomes containing certain patternrecognition receptors, such as NLRP2, NLRP3, AIM2 and probablyIFI16. In the NLRP1 and NLRC4 inflammasomes seems not be requiredbut facilitates the processing of procaspase-1. In cooperationwith NOD2 involved in an inflammasome activated by bacterialmuramyl dipeptide leading to caspase-1 activation. May be involvedin DDX58-triggered proinflammatory responses and inflammasomeactivation. Isoform 2 may have a regulating effect on the functionas inflammasome adapter. Isoform 3 seems to inhibit inflammasome-mediated maturation of interleukin-1 beta. In collaboration withAIM2 which detects cytosolic double-stranded DNA may also beinvolved in a caspase-1-independent cell death that involvescaspase-8. In adaptive immunity may be involved in maturation ofdendritic cells to stimulate T-cell immunity and in cytoskeletalrearrangements coupled to chemotaxis and antigen uptake may beinvolved in post-transcriptional regulation of the guaninenucleotide exchange factor DOCK2; the latter function is proposedto involve the nuclear form. Also involved in transcriptionalactivation of cytokines and chemokines independent of theinflammasome; this function may involve AP-1, NF-kappa-B, MAPK andcaspase-8 signaling pathways. For regulation of NF-kappa-Bactivating and inhibiting functions have been reported. ModulatesNF-kappa-B induction at the level of the IKK complex by inhibitingkinase activity of CHUK and IKBK. Proposed to compete with RIPK2for association with CASP1 thereby down-regulating CASP1-mediatedRIPK2-dependent NF-kappa-B activation and activating interleukin-1beta processing. \",\n      isseed: false,\n      uniprot: \"Q9ULZ3\",\n      isvalid: true,\n      importance: 3,\n      ox: 300.38360483804325,\n      oy: 532.2954885602502,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"APC\",\n      altered: 0,\n      rank: 22,\n      cited: 2683,\n      uniprotdesc:\n        \"Tumor suppressor. Promotes rapid degradation of CTNNB1and participates in Wnt signaling as a negative regulator. APCactivity is correlated with its phosphorylation state. Activatesthe GEF activity of SPATA13 and ARHGEF4. Plays a role inhepatocyte growth factor (HGF)-induced cell migration. Requiredfor MMP9 up-regulation via the JNK signaling pathway in colorectaltumor cells. Acts as a mediator of ERBB2-dependent stabilizationof microtubules at the cell cortex. It is required for thelocalization of MACF1 to the cell membrane and this localizationof MACF1 is critical for its function in microtubulestabilization. \",\n      isseed: false,\n      uniprot: \"P25054\",\n      isvalid: true,\n      importance: 3,\n      ox: 294.42589083867097,\n      oy: 502.89301172747867,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RNF144B\",\n      altered: 0,\n      rank: 190,\n      cited: 4,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase which accepts ubiquitin fromE2 ubiquitin-conjugating enzymes UBE2L3 and UBE2L6 in the form ofa thioester and then directly transfers the ubiquitin to targetedsubstrates such as LCMT2, thereby promoting their degradation.Induces apoptosis via a p53/TP53-dependent but caspase-independentmechanism. However, its overexpression also produces a decrease ofthe ubiquitin-dependent stability of BAX, a pro-apoptotic protein,ultimately leading to protection of cell death; But, it is not ananti-apoptotic protein per se. \",\n      isseed: false,\n      uniprot: \"Q7Z419\",\n      isvalid: true,\n      importance: 3,\n      ox: 291.8586405843057,\n      oy: 473.0030598015978,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT2B\",\n      altered: 0,\n      rank: 55,\n      cited: 609,\n      uniprotdesc: null,\n      isseed: false,\n      uniprot: null,\n      isvalid: true,\n      importance: 3,\n      ox: 292.7153221081166,\n      oy: 443.0152940167519,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MSH2\",\n      altered: 0,\n      rank: 21,\n      cited: 2696,\n      uniprotdesc:\n        \"Component of the post-replicative DNA mismatch repairsystem (MMR). Forms two different heterodimers: MutS alpha (MSH2-MSH6 heterodimer) and MutS beta (MSH2-MSH3 heterodimer) whichbinds to DNA mismatches thereby initiating DNA repair. When bound,heterodimers bend the DNA helix and shields approximately 20 basepairs. MutS alpha recognizes single base mismatches anddinucleotide insertion-deletion loops (IDL) in the DNA. MutS betarecognizes larger insertion-deletion loops up to 13 nucleotideslong. After mismatch binding, MutS alpha or beta forms a ternarycomplex with the MutL alpha heterodimer, which is thought to beresponsible for directing the downstream MMR events, includingstrand discrimination, excision, and resynthesis. ATP binding andhydrolysis play a pivotal role in mismatch repair functions. TheATPase activity associated with MutS alpha regulates bindingsimilar to a molecular switch: mismatched DNA provokes ADP-->ATPexchange, resulting in a discernible conformational transitionthat converts MutS alpha into a sliding clamp capable ofhydrolysis-independent diffusion along the DNA backbone. Thistransition is crucial for mismatch repair. MutS alpha may alsoplay a role in DNA homologous recombination repair. In melanocytesmay modulate both UV-B-induced cell cycle regulation andapoptosis. \",\n      isseed: false,\n      uniprot: \"P43246\",\n      isvalid: true,\n      importance: 3,\n      ox: 296.9847672563152,\n      oy: 413.32065076032376,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP1R13L\",\n      altered: 0,\n      rank: 140,\n      cited: 63,\n      uniprotdesc:\n        \"Regulator that plays a central role in regulation ofapoptosis and transcription via its interaction with NF-kappa-Band p53/TP53 proteins. Blocks transcription of HIV-1 virus byinhibiting the action of both NF-kappa-B and SP1. Also inhibitsp53/TP53 function, possibly by preventing the association betweenp53/TP53 and ASPP1 or ASPP2, and therefore suppressing thesubsequent activation of apoptosis. \",\n      isseed: false,\n      uniprot: \"Q8WUF5\",\n      isvalid: true,\n      importance: 3,\n      ox: 304.6113172821198,\n      oy: 384.3062451192653,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1\",\n      altered: 0,\n      rank: 46,\n      cited: 799,\n      uniprotdesc:\n        \"NAD-dependent protein deacetylase that linkstranscriptional regulation directly to intracellular energeticsand participates in the coordination of several separated cellularfunctions such as cell cycle, response to DNA damage, metobolism,apoptosis and autophagy. Can modulate chromatin function throughdeacetylation of histones and can promote alterations in themethylation of histones and DNA, leading to transcriptionalrepression. Deacetylates a broad range of transcription factorsand coregulators, thereby regulating target gene expressionpositively and negatively. Serves as a sensor of the cytosolicratio of NAD(+)/NADH which is altered by glucose deprivation andmetabolic changes associated with caloric restriction. Isessential in skeletal muscle cell differentiation and in responseto low nutrients mediates the inhibitory effect on skeletalmyoblast differentiation which also involves 5'-AMP-activatedprotein kinase (AMPK) and nicotinamide phosphoribosyltransferase(NAMPT). Component of the eNoSC (energy-dependent nucleolarsilencing) complex, a complex that mediates silencing of rDNA inresponse to intracellular energy status and acts by recruitinghistone-modifying enzymes. The eNoSC complex is able to sense theenergy status of cell: upon glucose starvation, elevation ofNAD(+)/NADP(+) ratio activates SIRT1, leading to histone H3deacetylation followed by dimethylation of H3 at 'Lys-9' (H3K9me2)by SUV39H1 and the formation of silent chromatin in the rDNAlocus. Deacetylates 'Lys-266' of SUV39H1, leading to itsactivation. Inhibits skeletal muscle differentiation bydeacetylating PCAF and MYOD1. Deacetylates H2A and 'Lys-26' ofHIST1H1E. Deacetylates 'Lys-16' of histone H4 (in vitro). Involvedin NR0B2/SHP corepression function through chromatin remodeling:Recruited to LRH1 target gene promoters by NR0B2/SHP therebystimulating histone H3 and H4 deacetylation leading totranscriptional repression. Proposed to contribute to genomicintegrity via positive regulation of telomere length; however,reports on localization to pericentromeric heterochromatin areconflicting. Proposed to play a role in constitutiveheterochromatin (CH) formation and/or maintenance throughregulation of the available pool of nuclear SUV39H1. Uponoxidative/metabolic stress decreases SUV39H1 degradation byinhibiting SUV39H1 polyubiquitination by MDM2. This increase inSUV39H1 levels enhances SUV39H1 turnover in CH, which in turnseems to accelerate renewal of the heterochromatin whichcorrelates with greater genomic integrity during stress response.Deacetylates 'Lys-382' of p53/TP53 and impairs its ability toinduce transcription-dependent proapoptotic program and modulatecell senescence. Deacetylates TAF1B and thereby represses rDNAtranscription by the RNA polymerase I. Deacetylates MYC, promotesthe association of MYC with MAX and decreases MYC stabilityleading to compromised transformational capability. DeacetylatesFOXO3 in response to oxidative stress thereby increasing itsability to induce cell cycle arrest and resistance to oxidativestress but inhibiting FOXO3-mediated induction of apoptosistranscriptional activity; also leading to FOXO3 ubiquitination andprotesomal degradation. Appears to have a similar effect onMLLT7/FOXO4 in regulation of transcriptional activity andapoptosis. Deacetylates DNMT1; thereby impairs DNMT1methyltransferase-independent transcription repressor activity,modulates DNMT1 cell cycle regulatory function and DNMT1-mediatedgene silencing. Deacetylates RELA/NF-kappa-B p65 therebyinhibiting its transactivating potential and augments apoptosis inresponse to TNF-alpha. Deacetylates HIF1A, KAT5/TIP60, RB1 andHIC1. Deacetylates FOXO1 resulting in its nuclear retention andenhancement of its transcriptional activity leading to increasedgluconeogenesis in liver. Inhibits E2F1 transcriptional activityand apoptotic function, possibly by deacetylation. Involved inHES1- and HEY2-mediated transcriptional repression. In cooperationwith MYCN seems to be involved in transcriptional repression ofDUSP6/MAPK3 leading to MYCN stabilization by phosphorylation at'Ser-62'. Deacetylates MEF2D. Required for antagonist-mediatedtranscription suppression of AR-dependent genes which may belinked to local deacetylation of histone H3. Represses HNF1A-mediated transcription. Required for the repression of ESRRG byCREBZF. Modulates AP-1 transcription factor activity. DeacetylatesNR1H3 AND NR1H2 and deacetylation of NR1H3 at 'Lys-434' positivelyregulates transcription of NR1H3:RXR target genes, promotes NR1H3proteosomal degradation and results in cholesterol efflux; apromoter clearing mechanism after reach round of transcription isproposed. Involved in lipid metabolism. Implicated in regulationof adipogenesis and fat mobilization in white adipocytes byrepression of PPARG which probably involves association with NCOR1and SMRT/NCOR2. Deacetylates ACSS2 leading to its activation, andHMGCS1. Involved in liver and muscle metabolism. Throughdeacteylation and activation of PPARGC1A is required to activatefatty acid oxidation in skeletel muscle under low-glucoseconditions and is involved in glucose homeostasis. Involved inregulation of PPARA and fatty acid beta-oxidation in liver.Involved in positive regulation of insulin secretion in pancreaticbeta cells in response to glucose; the function seems to implytranscriptional repression of UCP2. Proposed to deacetylate IRS2thereby facilitating its insulin-induced tyrosine phosphorylation.Deacetylates SREBF1 isoform SREBP-1C thereby decreasing itsstability and transactivation in lipogenic gene expression.Involved in DNA damage response by repressing genes which areinvolved in DNA repair, such as XPC and TP73, deacetylatingXRCC6/Ku70, and faciliting recruitment of additional factors tosites of damaged DNA, such as SIRT1-deacetylated NBN can recruitATM to initiate DNA repair and SIRT1-deacetylated XPA interactswith RPA2. Also involved in DNA repair of DNA double-strand breaksby homologous recombination and specifically single-strandannealing independently of XRCC6/Ku70 and NBN. Transcriptionalsuppression of XPC probably involves an E2F4:RBL2 suppressorcomplex and protein kinase B (AKT) signaling. Transcriptionalsuppression of TP73 probably involves E2F4 and PCAF. DeacetylatesWRN thereby regulating its helicase and exonuclease activities andregulates WRN nuclear translocation in response to DNA damage.Deacetylates APEX1 at 'Lys-6' and 'Lys-7' and stimulates cellularAP endonuclease activity by promoting the association of APEX1 toXRCC1. Increases p53/TP53-mediated transcription-independentapoptosis by blocking nuclear translocation of cytoplasmicp53/TP53 and probably redirecting it to mitochondria. DeacetylatesXRCC6/Ku70 at 'Lys-539' and 'Lys-542' causing it to sequester BAXaway from mitochondria thereby inhibiting stress-inducedapoptosis. Is involved in autophagy, presumably by deacetylatingATG5, ATG7 and MAP1LC3B/ATG8. Deacetylates AKT1 which leads toenhanced binding of AKT1 and PDK1 to PIP3 and promotes theiractivation. Proposed to play role in regulation of STK11/LBK1-dependent AMPK signaling pathways implicated in cellularsenescence which seems to involve the regulation of theacetylation status of STK11/LBK1. Can deacetylate STK11/LBK1 andthereby increase its activity, cytoplasmic localization andassociation with STRAD; however, the relevance of such activity innormal cells is unclear. In endothelial cells is shown to inhibitSTK11/LBK1 activity and to promote its degradation. DeacetylatesSMAD7 at 'Lys-64' and 'Lys-70' thereby promoting its degradation.Deacetylates CIITA and augments its MHC class II transactivationand contributes to its stability. Deacteylates MECOM/EVI1. Isoform2 is shown to deacetylate 'Lys-382' of p53/TP53, however withlower activity than isoform 1. In combination, the two isoformsexert an additive effect. Isoform 2 regulates p53/TP53 expressionand cellular stress response and is in turn repressed by p53/TP53presenting a SIRT1 isoform-dependent auto-regulatory loop. In caseof HIV-1 infection, interacts with and deacetylates the viral Tatprotein. The viral Tat protein inhibits SIRT1 deacetylationactivity toward RELA/NF-kappa-B p65, thereby potentiates itstranscriptional activity and SIRT1 is proposed to contribute to T-cell hyperactivation during infection. Deacetylates PML at 'Lys-487' and this deacetylation promotes PML control of PER2 nuclearlocalization. During the neurogenic transition, repress selectiveNOTCH1-target genes through histone deacetylation in a BCL6-dependent manner and leading to neuronal differentiation.Regulates the circadian expression of several core clock genes,including ARNTL/BMAL1, RORC, PER2 and CRY1 and plays a criticalrole in maintaining a controlled rhythmicity in histoneacetylation, thereby contributing to circadian chromatinremodeling. Deacetylates ARNTL/BMAL1 and histones at the circadiangene promoters in order to facilitate repression by inhibitorycomponents of the circadian oscillator. Deacetylates PER2,facilitating its ubiquitination and degradation by the proteosome.Protects cardiomyocytes against palmitate-induced apoptosis(PubMed:11672523, PubMed:12006491, PubMed:14976264,PubMed:14980222, PubMed:15126506, PubMed:15152190,PubMed:15205477, PubMed:15469825, PubMed:15692560,PubMed:16079181, PubMed:16166628, PubMed:16892051,PubMed:16998810, PubMed:17283066, PubMed:17334224,PubMed:17505061, PubMed:17612497, PubMed:17620057,PubMed:17936707, PubMed:18203716, PubMed:18296641,PubMed:18662546, PubMed:18687677, PubMed:19188449,PubMed:19220062, PubMed:19364925, PubMed:19690166,PubMed:19934257, PubMed:20097625, PubMed:20100829,PubMed:20203304, PubMed:20375098, PubMed:20620956,PubMed:20670893, PubMed:20817729, PubMed:20975832,PubMed:21149730, PubMed:21245319, PubMed:21471201,PubMed:21504832, PubMed:21555002, PubMed:21698133,PubMed:21701047, PubMed:21775285, PubMed:21807113,PubMed:21841822, PubMed:21890893, PubMed:21909281,PubMed:21947282, PubMed:22274616). Deacetylates XBP1 isoform 2;deacetylation decreases protein stability of XBP1 isoform 2 andinhibits its transcriptional activity (By similarity).\",\n      isseed: false,\n      uniprot: \"Q96EB6\",\n      isvalid: true,\n      importance: 3,\n      ox: 632.4422863405995,\n      oy: 420.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP10\",\n      altered: 0,\n      rank: 100,\n      cited: 181,\n      uniprotdesc:\n        \"Involved in the activation cascade of caspasesresponsible for apoptosis execution. Recruited to both Fas- andTNFR-1 receptors in a FADD dependent manner. May participate inthe granzyme B apoptotic pathways. Cleaves and activates caspase-3, -4, -6, -7, -8, and -9. Hydrolyzes the small- moleculesubstrates, Tyr-Val-Ala-Asp-|-AMC and Asp-Glu-Val-Asp-|-AMC.\",\n      isseed: false,\n      uniprot: \"Q92851\",\n      isvalid: true,\n      importance: 3,\n      ox: 329.4955681394091,\n      oy: 329.81733631298744,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SP1\",\n      altered: 0,\n      rank: 204,\n      cited: 351,\n      uniprotdesc:\n        \"Transcription factor that can activate or represstranscription in response to physiological and pathologicalstimuli. Binds with high affinity to GC-rich motifs and regulatesthe expression of a large number of genes involved in a variety ofprocesses such as cell growth, apoptosis, differentiation andimmune responses. Highly regulated by post-translationalmodifications (phosphorylations, sumoylation, proteolyticcleavage, glycosylation and acetylation). Binds also the PDGFR-alpha G-box promoter. May have a role in modulating the cellularresponse to DNA damage. Implicated in chromatin remodeling. Playsa role in the recruitment of SMARCA4/BRG1 on the c-FOS promoter.Plays an essential role in the regulation of FE65 gene expression.In complex with ATF7IP, maintains telomerase activity in cancercells by inducing TERT and TERC gene expression. Isoform 3 is astronger activator of transcription than isoform 1. Positivelyregulates the transcription of the core clock componentARNTL/BMAL1. \",\n      isseed: false,\n      uniprot: \"P08047\",\n      isvalid: true,\n      importance: 2,\n      ox: 346.42886470541225,\n      oy: 305.05317940410407,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IRF5\",\n      altered: 0,\n      rank: 101,\n      cited: 180,\n      uniprotdesc:\n        \"Transcription factor involved in the induction ofinterferons IFNA and INFB and inflammatory cytokines upon virusinfection. Activated by TLR7 or TLR8 signaling.\",\n      isseed: false,\n      uniprot: \"Q13568\",\n      isvalid: true,\n      importance: 3,\n      ox: 366.0746867237709,\n      oy: 282.3806921734762,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"BAX\",\n      altered: 0,\n      rank: 51,\n      cited: 635,\n      uniprotdesc:\n        \"Accelerates programmed cell death by binding to, andantagonizing the apoptosis repressor BCL2 or its adenovirushomolog E1B 19k protein. Under stress conditions, undergoes aconformation change that causes translocation to the mitochondrionmembrane, leading to the release of cytochrome c that thentriggers apoptosis. Promotes activation of CASP3, and therebyapoptosis. \",\n      isseed: false,\n      uniprot: \"Q07812\",\n      isvalid: true,\n      importance: 3,\n      ox: 495.57608693571933,\n      oy: 298.7290842958664,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CABIN1\",\n      altered: 0,\n      rank: 132,\n      cited: 77,\n      uniprotdesc:\n        \"May be required for replication-independent chromatinassembly. May serve as a negative regulator of T-cell receptor(TCR) signaling via inhibition of calcineurin. Inhibition ofactivated calcineurin is dependent on both PKC and calciumsignals. Acts as a negative regulator of p53/TP53 by keeping p53in an inactive state on chromatin at promoters of a subset of it'starget genes. \",\n      isseed: false,\n      uniprot: \"Q9Y6J0\",\n      isvalid: true,\n      importance: 3,\n      ox: 524.6080753437241,\n      oy: 291.16974245431265,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD7\",\n      altered: 0,\n      rank: 156,\n      cited: 32,\n      uniprotdesc:\n        \"Histone methyltransferase that specificallymonomethylates 'Lys-4' of histone H3. H3 'Lys-4' methylationrepresents a specific tag for epigenetic transcriptionalactivation. Plays a central role in the transcriptional activationof genes such as collagenase or insulin. Recruited by IPF1/PDX-1to the insulin promoter, leading to activate transcription. Hasalso methyltransferase activity toward non-histone proteins suchas p53/TP53, TAF10, and possibly TAF7 by recognizing and bindingthe [KR]-[STA]-K in substrate proteins. Monomethylates 'Lys-189'of TAF10, leading to increase the affinity of TAF10 for RNApolymerase II. Monomethylates 'Lys-372' of p53/TP53, stabilizingp53/TP53 and increasing p53/TP53-mediated transcriptionalactivation. \",\n      isseed: false,\n      uniprot: \"Q8WTS6\",\n      isvalid: true,\n      importance: 3,\n      ox: 438.5698130049044,\n      oy: 229.70989985711353,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD8\",\n      altered: 0,\n      rank: 164,\n      cited: 22,\n      uniprotdesc:\n        \"Protein-lysine N-methyltransferase that monomethylatesboth histones and non-histone proteins. Specificallymonomethylates 'Lys-20' of histone H4 (H4K20me1). H4K20me1 isenriched during mitosis and represents a specific tag forepigenetic transcriptional repression. Mainly functions ineuchromatin regions, thereby playing a central role in thesilencing of euchromatic genes. Required for cell proliferation,probably by contributing to the maintenance of proper higher-orderstructure of DNA during mitosis. Involved in chromosomecondensation and proper cytokinesis. Nucleosomes are preferred assubstrate compared to free histones. Mediates monomethylation ofp53/TP53 at 'Lys-382', leading to repress p53/TP53-target genes.Plays a negative role in TGF-beta response regulation and apositive role in cell migration. \",\n      isseed: false,\n      uniprot: \"Q9NQR1\",\n      isvalid: true,\n      importance: 3,\n      ox: 466.2035225983501,\n      oy: 218.0317966675917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"APAF1\",\n      altered: 0,\n      rank: 83,\n      cited: 278,\n      uniprotdesc:\n        \"Oligomeric Apaf-1 mediates the cytochrome c-dependentautocatalytic activation of pro-caspase-9 (Apaf-3), leading to theactivation of caspase-3 and apoptosis. This activation requiresATP. Isoform 6 is less effective in inducing apoptosis.\",\n      isseed: false,\n      uniprot: \"O14727\",\n      isvalid: true,\n      importance: 3,\n      ox: 494.98831180678513,\n      oy: 209.57981996234875,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GDF15\",\n      altered: 0,\n      rank: 91,\n      cited: 232,\n      uniprotdesc: \"\",\n      isseed: false,\n      uniprot: \"Q99988\",\n      isvalid: true,\n      importance: 3,\n      ox: 388.1769208600632,\n      oy: 262.09544516525557,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n  ],\n  edges: [\n    {\n      id: \"TP53-controls-state-change-of-H1F0\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"H1F0\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-IRF5\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"IRF5\",\n      pubmed: [\"11973653\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT8-controls-state-change-of-TP53\",\n      source: \"KAT8\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"17189187\", \"17534149\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11-controls-state-change-of-TP53\",\n      source: \"FBXO11\",\n      cited: 4,\n      target: \"TP53\",\n      pubmed: [\"17098746\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP53\",\n      source: \"ATR\",\n      cited: 24,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15665826\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11-controls-state-change-of-NEDD8\",\n      source: \"FBXO11\",\n      cited: 1,\n      target: \"NEDD8\",\n      pubmed: [\"17098746\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP53\",\n      source: \"ATM\",\n      cited: 237,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733514\",\n        \"9733515\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SMYD2-controls-state-change-of-TP53\",\n      source: \"SMYD2\",\n      cited: 6,\n      target: \"TP53\",\n      pubmed: [\"17108971\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NGFR-controls-state-change-of-TP53\",\n      source: \"NGFR\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"15668238\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAX-controls-expression-of-TP53\",\n      source: \"MAX\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"8494784\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PRKAB1\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"PRKAB1\",\n      pubmed: [\"16140933\", \"17409411\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2-controls-state-change-of-TP53\",\n      source: \"MDM2\",\n      cited: 2748,\n      target: \"TP53\",\n      pubmed: [\n        \"10734067\",\n        \"11127820\",\n        \"11340074\",\n        \"11713287\",\n        \"14654783\",\n        \"14671306\",\n        \"14702041\",\n        \"15210108\",\n        \"15242646\",\n        \"16107876\",\n        \"9153395\",\n        \"9153396\",\n        \"9450543\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD8-controls-state-change-of-TP53\",\n      source: \"SETD8\",\n      cited: 8,\n      target: \"TP53\",\n      pubmed: [\"17707234\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD7-controls-state-change-of-TP53\",\n      source: \"SETD7\",\n      cited: 8,\n      target: \"TP53\",\n      pubmed: [\"15525938\", \"17646389\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TYRP1\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"TYRP1\",\n      pubmed: [\"10640990\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP63\",\n      source: \"ATR\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCA-controls-state-change-of-TP53\",\n      source: \"PRKCA\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\n        \"10706102\",\n        \"10733583\",\n        \"11007451\",\n        \"11423984\",\n        \"11585729\",\n        \"12080066\",\n        \"14640983\",\n        \"14744935\",\n        \"15659650\",\n        \"16227590\",\n        \"17898864\",\n        \"18812399\",\n        \"19819244\",\n        \"19933256\",\n        \"9254608\",\n        \"9315650\",\n        \"9571186\",\n        \"9620776\",\n        \"9739174\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP63\",\n      source: \"ATM\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP73\",\n      source: \"CHEK2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-DDB2\",\n      source: \"TP53\",\n      cited: 23,\n      target: \"DDB2\",\n      pubmed: [\"11971958\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCD-controls-state-change-of-TP53\",\n      source: \"PRKCD\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11030628\",\n        \"11101524\",\n        \"11300786\",\n        \"11495913\",\n        \"11740489\",\n        \"11780126\",\n        \"11875057\",\n        \"12021785\",\n        \"12093737\",\n        \"12397361\",\n        \"12427754\",\n        \"12676607\",\n        \"12860987\",\n        \"12902982\",\n        \"12907596\",\n        \"14749479\",\n        \"15322239\",\n        \"15381073\",\n        \"15471885\",\n        \"15489221\",\n        \"15526030\",\n        \"15619621\",\n        \"15657359\",\n        \"15706352\",\n        \"15750624\",\n        \"15843377\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16247456\",\n        \"16377624\",\n        \"16601678\",\n        \"16717128\",\n        \"16738336\",\n        \"16793543\",\n        \"17105820\",\n        \"17107963\",\n        \"17210684\",\n        \"17332358\",\n        \"17349958\",\n        \"17349959\",\n        \"17380123\",\n        \"17567906\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"18056705\",\n        \"18160537\",\n        \"18216278\",\n        \"18536714\",\n        \"18560558\",\n        \"18769132\",\n        \"19465479\",\n        \"19819244\",\n        \"19828042\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19965871\",\n        \"20018442\",\n        \"20024960\",\n        \"20123963\",\n        \"20171273\",\n        \"20363803\",\n        \"20514025\",\n        \"20610713\",\n        \"20673369\",\n        \"20696760\",\n        \"20811699\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21383696\",\n        \"21394211\",\n        \"21642861\",\n        \"21660965\",\n        \"21765463\",\n        \"21765464\",\n        \"22011578\",\n        \"22797063\",\n        \"22878263\",\n        \"23149944\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24899407\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP63\",\n      source: \"TP53\",\n      cited: 257,\n      target: \"TP63\",\n      pubmed: [\"14576823\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PML\",\n      source: \"TP53\",\n      cited: 102,\n      target: \"PML\",\n      pubmed: [\"14992722\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP73\",\n      source: \"ATM\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP63\",\n      source: \"WRN\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP73\",\n      source: \"ATR\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PCBP4\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"PCBP4\",\n      pubmed: [\"10891498\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GADD45A\",\n      source: \"TP53\",\n      cited: 45,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKDC-controls-state-change-of-TP53\",\n      source: \"PRKDC\",\n      cited: 10,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10930428\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19345189\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21386980\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22496350\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GDF15\",\n      source: \"TP53\",\n      cited: 18,\n      target: \"GDF15\",\n      pubmed: [\"10618379\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP73\",\n      source: \"WRN\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-SERPINE1\",\n      source: \"TP53\",\n      cited: 35,\n      target: \"SERPINE1\",\n      pubmed: [\"7479001\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PPM1J\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"PPM1J\",\n      pubmed: [\"16260627\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP63\",\n      source: \"HTT\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"CASP1\",\n      pubmed: [\"11278253\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP63\",\n      source: \"MAPK14\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP73\",\n      source: \"HMGB1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP6\",\n      source: \"TP53\",\n      cited: 13,\n      target: \"CASP6\",\n      pubmed: [\"12089322\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP63\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP53\",\n      source: \"HTT\",\n      cited: 9,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP63\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP63\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-expression-of-CDKN1A\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"CDKN1A\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP53\",\n      source: \"PML\",\n      cited: 101,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP-controls-state-change-of-TP53\",\n      source: \"CREBBP\",\n      cited: 72,\n      target: \"TP53\",\n      pubmed: [\"18485870\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TAP1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"TAP1\",\n      pubmed: [\"10618714\", \"12857899\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP53\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP53\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP53\",\n      source: \"MAPK14\",\n      cited: 65,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10212189\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10747897\",\n        \"10958792\",\n        \"11030628\",\n        \"11078726\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11283254\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15657359\",\n        \"15665826\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16552184\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17942552\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9372954\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP53\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"10212189\", \"10747897\", \"17254968\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-BAX\",\n      source: \"TP53\",\n      cited: 95,\n      target: \"BAX\",\n      pubmed: [\"14963330\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP63\",\n      source: \"HMGB1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP73\",\n      source: \"TP53\",\n      cited: 42,\n      target: \"TP73\",\n      pubmed: [\"11314010\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP63\",\n      source: \"PML\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP73\",\n      source: \"PPP2CA\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP73\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FOS-controls-expression-of-TP53\",\n      source: \"FOS\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\"10072388\", \"11136975\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP-controls-expression-of-GADD45A\",\n      source: \"CREBBP\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CDKN1A\",\n      source: \"TP53\",\n      cited: 1480,\n      target: \"CDKN1A\",\n      pubmed: [\n        \"11080152\",\n        \"15655109\",\n        \"17110336\",\n        \"17409421\",\n        \"17707234\",\n        \"17719541\",\n        \"17938176\",\n        \"18250150\",\n        \"18485870\",\n        \"19011621\",\n        \"7796420\",\n        \"8242752\",\n      ],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"Reactome\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP73\",\n      source: \"PML\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP53\",\n      source: \"HMGB1\",\n      cited: 21,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP73\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIPK2-controls-state-change-of-TP53\",\n      source: \"HIPK2\",\n      cited: 98,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11030628\",\n        \"11101524\",\n        \"11300786\",\n        \"11495913\",\n        \"11740489\",\n        \"11780126\",\n        \"11875057\",\n        \"12021785\",\n        \"12093737\",\n        \"12397361\",\n        \"12427754\",\n        \"12676607\",\n        \"12860987\",\n        \"12902982\",\n        \"12907596\",\n        \"14749479\",\n        \"15322239\",\n        \"15381073\",\n        \"15471885\",\n        \"15489221\",\n        \"15526030\",\n        \"15619621\",\n        \"15657359\",\n        \"15706352\",\n        \"15750624\",\n        \"15843377\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16247456\",\n        \"16377624\",\n        \"16601678\",\n        \"16717128\",\n        \"16738336\",\n        \"16793543\",\n        \"17105820\",\n        \"17107963\",\n        \"17210684\",\n        \"17332358\",\n        \"17349958\",\n        \"17349959\",\n        \"17380123\",\n        \"17567906\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"18056705\",\n        \"18160537\",\n        \"18216278\",\n        \"18536714\",\n        \"18560558\",\n        \"18769132\",\n        \"19465479\",\n        \"19819244\",\n        \"19828042\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19965871\",\n        \"20018442\",\n        \"20024960\",\n        \"20123963\",\n        \"20171273\",\n        \"20363803\",\n        \"20514025\",\n        \"20610713\",\n        \"20673369\",\n        \"20696760\",\n        \"20811699\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21383696\",\n        \"21394211\",\n        \"21642861\",\n        \"21660965\",\n        \"21765463\",\n        \"21765464\",\n        \"22011578\",\n        \"22797063\",\n        \"22878263\",\n        \"23149944\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24899407\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RNF144B\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"RNF144B\",\n      pubmed: [\"12853982\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HIC1\",\n      source: \"TP53\",\n      cited: 22,\n      target: \"HIC1\",\n      pubmed: [\"16301995\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIRA\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"HIRA\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP73\",\n      source: \"MAPK14\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-UBN1\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"UBN1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RB1\",\n      source: \"TP53\",\n      cited: 262,\n      target: \"RB1\",\n      pubmed: [\"8119988\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP73\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HMGA2\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"HMGA2\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HMGA1\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"HMGA1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP73\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP73\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP63\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP53I3\",\n      source: \"TP53\",\n      cited: 28,\n      target: \"TP53I3\",\n      pubmed: [\"11684014\", \"11919562\", \"17719542\", \"18485870\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DYRK1A-controls-state-change-of-TP53\",\n      source: \"DYRK1A\",\n      cited: 1,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15665826\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP73\",\n      source: \"SUMO1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP63\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP73\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP63\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP53\",\n      source: \"CHEK2\",\n      cited: 73,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11585729\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14640983\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15659650\",\n        \"15665826\",\n        \"15671037\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17898864\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18812399\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19933256\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20009884\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21386980\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9363941\",\n        \"9571186\",\n        \"9620776\",\n        \"9733515\",\n        \"9739174\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP63\",\n      source: \"PPP2CA\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK7-controls-state-change-of-TP53\",\n      source: \"CDK7\",\n      cited: 7,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10348343\",\n        \"10581258\",\n        \"10656682\",\n        \"10656795\",\n        \"10706102\",\n        \"10733583\",\n        \"10747897\",\n        \"11007451\",\n        \"11101524\",\n        \"11239457\",\n        \"11300786\",\n        \"11423984\",\n        \"11495913\",\n        \"11526498\",\n        \"11583595\",\n        \"11585729\",\n        \"11707453\",\n        \"11709713\",\n        \"11850826\",\n        \"11875057\",\n        \"12021785\",\n        \"12080066\",\n        \"12091386\",\n        \"12393879\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12519780\",\n        \"12676607\",\n        \"12776195\",\n        \"12860987\",\n        \"12959929\",\n        \"1406679\",\n        \"14640983\",\n        \"14665630\",\n        \"14744935\",\n        \"14968111\",\n        \"15064747\",\n        \"15155458\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15619621\",\n        \"15659650\",\n        \"15792956\",\n        \"15843377\",\n        \"16083285\",\n        \"16227590\",\n        \"16319070\",\n        \"16436515\",\n        \"16552184\",\n        \"16632641\",\n        \"16651424\",\n        \"16717128\",\n        \"16818520\",\n        \"17105820\",\n        \"17108107\",\n        \"17237827\",\n        \"17591690\",\n        \"17891183\",\n        \"17898864\",\n        \"17906639\",\n        \"17942552\",\n        \"17975552\",\n        \"18490454\",\n        \"18523266\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18812399\",\n        \"19251701\",\n        \"19369195\",\n        \"19413330\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"19933256\",\n        \"20009884\",\n        \"20024960\",\n        \"20123963\",\n        \"20562916\",\n        \"20663147\",\n        \"20686112\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21423215\",\n        \"21455220\",\n        \"21460857\",\n        \"21832239\",\n        \"22011578\",\n        \"22112863\",\n        \"22975381\",\n        \"23312004\",\n        \"23603988\",\n        \"23871434\",\n        \"24194938\",\n        \"24657168\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9372954\",\n        \"9467949\",\n        \"9571186\",\n        \"9620776\",\n        \"9739174\",\n        \"9744860\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK9-controls-state-change-of-TP53\",\n      source: \"CDK9\",\n      cited: 19,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10348343\",\n        \"10581258\",\n        \"10644693\",\n        \"10656682\",\n        \"10656795\",\n        \"10706102\",\n        \"10733583\",\n        \"10747897\",\n        \"11078726\",\n        \"11101524\",\n        \"11239457\",\n        \"11300786\",\n        \"11423984\",\n        \"11495913\",\n        \"11526498\",\n        \"11583595\",\n        \"11687964\",\n        \"11707453\",\n        \"11709713\",\n        \"11850826\",\n        \"11875057\",\n        \"12021785\",\n        \"12091386\",\n        \"12393879\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12519780\",\n        \"12676607\",\n        \"12776195\",\n        \"12860987\",\n        \"12959929\",\n        \"1406679\",\n        \"14640983\",\n        \"14665630\",\n        \"14702041\",\n        \"14744935\",\n        \"14968111\",\n        \"15064747\",\n        \"15155458\",\n        \"15302935\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15619621\",\n        \"15792956\",\n        \"15843377\",\n        \"16037820\",\n        \"16083285\",\n        \"16227590\",\n        \"16319070\",\n        \"16436515\",\n        \"16552184\",\n        \"16632641\",\n        \"16651424\",\n        \"16674116\",\n        \"16717128\",\n        \"16784539\",\n        \"16818520\",\n        \"17105820\",\n        \"17108107\",\n        \"17237827\",\n        \"17287340\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"17942552\",\n        \"17975552\",\n        \"18490454\",\n        \"18521083\",\n        \"18523266\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18847512\",\n        \"19251701\",\n        \"19369195\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20123963\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20663147\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21423215\",\n        \"21455220\",\n        \"21460857\",\n        \"21659604\",\n        \"21832239\",\n        \"21983960\",\n        \"22011578\",\n        \"22112863\",\n        \"22496350\",\n        \"22547687\",\n        \"22975381\",\n        \"23201157\",\n        \"23312004\",\n        \"23603988\",\n        \"23871434\",\n        \"24194938\",\n        \"24657168\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9372954\",\n        \"9467949\",\n        \"9739174\",\n        \"9744860\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK2-controls-state-change-of-TP53\",\n      source: \"CDK2\",\n      cited: 26,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"10644693\",\n        \"10656795\",\n        \"11078726\",\n        \"11283254\",\n        \"11300786\",\n        \"11687964\",\n        \"11875057\",\n        \"12021785\",\n        \"12397361\",\n        \"12397362\",\n        \"12860987\",\n        \"1406679\",\n        \"14640983\",\n        \"14702041\",\n        \"14744935\",\n        \"15302935\",\n        \"15619621\",\n        \"16037820\",\n        \"16227590\",\n        \"16552184\",\n        \"16674116\",\n        \"16784539\",\n        \"17287340\",\n        \"17906639\",\n        \"17942552\",\n        \"18521083\",\n        \"18769132\",\n        \"18847512\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"21659604\",\n        \"21983960\",\n        \"22011578\",\n        \"22496350\",\n        \"22547687\",\n        \"23201157\",\n        \"23312004\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK5-controls-state-change-of-TP53\",\n      source: \"CDK5\",\n      cited: 23,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16552184\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17942552\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9372954\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP53\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-BAX\",\n      source: \"TP53\",\n      cited: 95,\n      target: \"BAX\",\n      pubmed: [\n        \"10518217\",\n        \"11080152\",\n        \"11278953\",\n        \"11684014\",\n        \"11850816\",\n        \"15598651\",\n        \"17145718\",\n        \"17189187\",\n      ],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CCNB1\",\n      source: \"TP53\",\n      cited: 23,\n      target: \"CCNB1\",\n      pubmed: [\"15710382\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP63\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP73\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-MDM2\",\n      source: \"TP53\",\n      cited: 2784,\n      target: \"MDM2\",\n      pubmed: [\"12138177\", \"17409421\", \"7651818\", \"8319905\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP53\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP53\",\n      source: \"PPP2CA\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP63\",\n      source: \"CHEK2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CD82\",\n      source: \"TP53\",\n      cited: 44,\n      target: \"CD82\",\n      pubmed: [\"9736732\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-FDXR\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"FDXR\",\n      pubmed: [\"12370809\", \"17409421\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HTT\",\n      source: \"TP53\",\n      cited: 9,\n      target: \"HTT\",\n      pubmed: [\"16278683\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CTSD\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"CTSD\",\n      pubmed: [\"9619826\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP53\",\n      source: \"SIRT1\",\n      cited: 50,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP10\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"CASP10\",\n      pubmed: [\"14688482\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-APAF1\",\n      source: \"TP53\",\n      cited: 26,\n      target: \"APAF1\",\n      pubmed: [\"11559530\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HGF\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"HGF\",\n      pubmed: [\"9023107\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT5-controls-state-change-of-TP53\",\n      source: \"PRMT5\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"19011621\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-APC\",\n      source: \"TP53\",\n      cited: 166,\n      target: \"APC\",\n      pubmed: [\"11279192\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-BTG2\",\n      source: \"TP53\",\n      cited: 14,\n      target: \"BTG2\",\n      pubmed: [\"11814693\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT1-controls-expression-of-GADD45A\",\n      source: \"PRMT1\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-ASF1A\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"ASF1A\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-FAS\",\n      source: \"TP53\",\n      cited: 114,\n      target: \"FAS\",\n      pubmed: [\"9841917\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP73\",\n      source: \"HTT\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP53\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TRIAP1\",\n      source: \"TP53\",\n      cited: 2,\n      target: \"TRIAP1\",\n      pubmed: [\"15735003\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RFWD2\",\n      source: \"TP53\",\n      cited: 11,\n      target: \"RFWD2\",\n      pubmed: [\"15103385\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP63\",\n      source: \"EP300\",\n      cited: 2,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-COL18A1\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"COL18A1\",\n      pubmed: [\"15958553\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-expression-of-GADD45A\",\n      source: \"EP300\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP73\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP53\",\n      source: \"EP300\",\n      cited: 117,\n      target: \"TP53\",\n      pubmed: [\"18485870\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP73\",\n      source: \"PRKAB1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1B\",\n      source: \"TP53\",\n      cited: 2,\n      target: \"HIST1H1B\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP73\",\n      source: \"EP300\",\n      cited: 1,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1C\",\n      source: \"TP53\",\n      cited: 4,\n      target: \"HIST1H1C\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1A\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1A\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CARM1-controls-expression-of-GADD45A\",\n      source: \"CARM1\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1D\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1D\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1E\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1E\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP53\",\n      source: \"WRN\",\n      cited: 46,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-MSH2\",\n      source: \"TP53\",\n      cited: 109,\n      target: \"MSH2\",\n      pubmed: [\"10984493\", \"11350971\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT2B-controls-state-change-of-TP53\",\n      source: \"KAT2B\",\n      cited: 34,\n      target: \"TP53\",\n      pubmed: [\"17110336\", \"9744860\", \"9891054\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PYCARD\",\n      source: \"TP53\",\n      cited: 13,\n      target: \"PYCARD\",\n      pubmed: [\"14730312\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP53\",\n      source: \"PRKAA2\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SP1-controls-expression-of-CCNB1\",\n      source: \"SP1\",\n      cited: 1,\n      target: \"CCNB1\",\n      pubmed: [\"15710382\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP53\",\n      source: \"PRKAA1\",\n      cited: 1,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10606744\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10733583\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15355354\",\n        \"15471885\",\n        \"15489221\",\n        \"15542844\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18246126\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"18794113\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21386980\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GPX1\",\n      source: \"TP53\",\n      cited: 10,\n      target: \"GPX1\",\n      pubmed: [\"16140933\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-CABIN1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"CABIN1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2-controls-state-change-of-NEDD8\",\n      source: \"MDM2\",\n      cited: 10,\n      target: \"NEDD8\",\n      pubmed: [\"15242646\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PLK3-controls-state-change-of-TP53\",\n      source: \"PLK3\",\n      cited: 16,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP53\",\n      source: \"PRKAB1\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP53\",\n      source: \"SUMO1\",\n      cited: 39,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP63\",\n      source: \"PRKAA1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP1R13L-controls-state-change-of-TP53\",\n      source: \"PPP1R13L\",\n      cited: 13,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11740489\",\n        \"11780126\",\n        \"16377624\",\n        \"17349958\",\n        \"17906639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PLK3\",\n      source: \"TP53\",\n      cited: 16,\n      target: \"PLK3\",\n      pubmed: [\"16140933\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP63\",\n      source: \"PRKAA2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP53\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK1-controls-state-change-of-TP53\",\n      source: \"DAPK1\",\n      cited: 6,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10606744\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10733583\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15355354\",\n        \"15471885\",\n        \"15489221\",\n        \"15542844\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18246126\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"18794113\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20847049\",\n        \"20851891\",\n        \"20959462\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21386980\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK1-controls-state-change-of-TP53\",\n      source: \"CDK1\",\n      cited: 47,\n      target: \"TP53\",\n      pubmed: [\n        \"10644693\",\n        \"10656795\",\n        \"11078726\",\n        \"11300786\",\n        \"11687964\",\n        \"11875057\",\n        \"12021785\",\n        \"12397361\",\n        \"12397362\",\n        \"12860987\",\n        \"1406679\",\n        \"14640983\",\n        \"14702041\",\n        \"14744935\",\n        \"15302935\",\n        \"15619621\",\n        \"16037820\",\n        \"16227590\",\n        \"16552184\",\n        \"16674116\",\n        \"16784539\",\n        \"17287340\",\n        \"17906639\",\n        \"17942552\",\n        \"18521083\",\n        \"18769132\",\n        \"18847512\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"21659604\",\n        \"21983960\",\n        \"22011578\",\n        \"22496350\",\n        \"22547687\",\n        \"23201157\",\n        \"23312004\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK3-controls-state-change-of-TP53\",\n      source: \"DAPK3\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP63\",\n      source: \"PRKAB1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP63\",\n      source: \"SUMO1\",\n      cited: 1,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP73\",\n      source: \"PRKAA1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"E4F1-controls-state-change-of-TP53\",\n      source: \"E4F1\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\"17110336\", \"9288740\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP73\",\n      source: \"PRKAA2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP63\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-concentric/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-concentric/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-concentric/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport concentric from \"@antv/f6/dist/extends/layout/concentricLayout\";\n/**\n * basicConcentric\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"concentric\", concentric);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"concentric\",\n        maxLevelDiff: 0.5,\n        sortBy: \"degree\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 5,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-concentric/index.json",
    "content": "{\n  \"defaultTitle\": \"基本同心圆布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-dagre/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      dataType: \"alps\",\n      name: \"alps_file1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"2\",\n      dataType: \"alps\",\n      name: \"alps_file2\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"3\",\n      dataType: \"alps\",\n      name: \"alps_file3\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"4\",\n      dataType: \"sql\",\n      name: \"sql_file1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"5\",\n      dataType: \"sql\",\n      name: \"sql_file2\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"6\",\n      dataType: \"feature_etl\",\n      name: \"feature_etl_1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"7\",\n      dataType: \"feature_etl\",\n      name: \"feature_etl_1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"8\",\n      dataType: \"feature_extractor\",\n      name: \"feature_extractor\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n    },\n    {\n      source: \"2\",\n      target: \"4\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"6\",\n      target: \"7\",\n    },\n    {\n      source: \"6\",\n      target: \"8\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-dagre/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-dagre/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-dagre/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n\n/**\n * Dagre流程图\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n    F6.registerNode(\n      \"sql\",\n      {\n        drawShape(cfg, group) {\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              x: -75,\n              y: -25,\n              width: 150,\n              height: 50,\n              radius: 10,\n              stroke: \"#5B8FF9\",\n              fill: \"#C6E5FF\",\n              lineWidth: 3,\n            },\n            name: \"rect-shape\",\n          });\n          if (cfg.name) {\n            group.addShape(\"text\", {\n              attrs: {\n                text: cfg.name,\n                x: 0,\n                y: 0,\n                fill: \"#00287E\",\n                fontSize: 14,\n                textAlign: \"center\",\n                textBaseline: \"middle\",\n                fontWeight: \"bold\",\n              },\n              name: \"text-shape\",\n            });\n          }\n          return rect;\n        },\n      },\n      \"single-node\",\n    );\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      layout: {\n        type: \"dagre\",\n        nodesepFunc: (d) => {\n          if (d.id === \"3\") {\n            return 500;\n          }\n          return 50;\n        },\n        ranksep: 70,\n        controlPoints: true,\n      },\n      defaultNode: {\n        type: \"sql\",\n      },\n      defaultEdge: {\n        type: \"polyline\",\n        style: {\n          radius: 20,\n          offset: 45,\n          endArrow: true,\n          lineWidth: 2,\n          stroke: \"#C2C8D5\",\n        },\n      },\n      nodeStateStyles: {\n        selected: {\n          stroke: \"#d9d9d9\",\n          fill: \"#5394ef\",\n        },\n      },\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"zoom-canvas\",\n          \"click-select\",\n          {\n            type: \"tooltip\",\n            formatText(model) {\n              const cfg = model.conf;\n              const text = [];\n              cfg.forEach((row) => {\n                text.push(`${row.label}:${row.value}<br>`);\n              });\n              return text.join(\"\\n\");\n            },\n            offset: 30,\n          },\n        ],\n      },\n      fitView: true,\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-dagre/index.json",
    "content": "{\n  \"defaultTitle\": \"流程图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 基本力导向布局及节点拖拽\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n      },\n      defaultNode: {\n        size: 15,\n      },\n    });\n    const data = getData();\n\n    // 注册数据\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map(function (edge, i) {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    // 更新位置用的函数\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n\n    // 监听事件\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", function (e) {\n      const forceLayout = this.graph.get(\"layoutController\").layoutMethods[0];\n      forceLayout.execute();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", function (e) {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed/index.json",
    "content": "{\n  \"defaultTitle\": \"基本力导向布局及节点拖拽\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed-drag-fix/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed-drag-fix/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed-drag-fix/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed-drag-fix/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 固定被拖拽节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const data = getData();\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        nodeSize: 20,\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n    this.graph.on(\"node:dragstart\", (e) => {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      refreshDragedNodePosition(e);\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-force-directed-drag-fix/index.json",
    "content": "{\n  \"defaultTitle\": \"固定被拖拽节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-grid/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-grid/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-grid/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-grid/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\n/**\n * basicGrid布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"grid\", grid);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"grid\",\n        begin: [20, 20],\n        width: width - 20,\n        height: height - 20,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-grid/index.json",
    "content": "{\n  \"defaultTitle\": \"基本网格布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-radial/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-radial/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-radial/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\n/**\n * basicRadial\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 50,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/basic-radial/index.json",
    "content": "{\n  \"defaultTitle\": \"基本辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-arc-diagram/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      name: \"analytics.cluster\",\n      cluster: \"analytics\",\n      value: 21,\n    },\n    {\n      id: \"1\",\n      name: \"analytics.graph\",\n      cluster: \"analytics\",\n      value: 34,\n    },\n    {\n      id: \"2\",\n      name: \"analytics.optimization\",\n      cluster: \"analytics\",\n      value: 8,\n    },\n    {\n      id: \"3\",\n      name: \"animate\",\n      cluster: \"animate\",\n      value: 40,\n    },\n    {\n      id: \"4\",\n      name: \"animate.interpolate\",\n      cluster: \"animate\",\n      value: 18,\n    },\n    {\n      id: \"5\",\n      name: \"data.converters\",\n      cluster: \"data\",\n      value: 25,\n    },\n    {\n      id: \"6\",\n      name: \"data\",\n      cluster: \"data\",\n      value: 10,\n    },\n    {\n      id: \"7\",\n      name: \"display\",\n      cluster: \"display\",\n      value: 4,\n    },\n    {\n      id: \"8\",\n      name: \"flex\",\n      cluster: \"flex\",\n      value: 6,\n    },\n    {\n      id: \"9\",\n      name: \"physics\",\n      cluster: \"physics\",\n      value: 22,\n    },\n    {\n      id: \"10\",\n      name: \"query\",\n      cluster: \"query\",\n      value: 67,\n    },\n    {\n      id: \"11\",\n      name: \"query.methods\",\n      cluster: \"query\",\n      value: 71,\n    },\n    {\n      id: \"12\",\n      name: \"scale\",\n      cluster: \"scale\",\n      value: 33,\n    },\n    {\n      id: \"13\",\n      name: \"util\",\n      cluster: \"util\",\n      value: 23,\n    },\n    {\n      id: \"14\",\n      name: \"util.heap\",\n      cluster: \"util\",\n      value: 2,\n    },\n    {\n      id: \"15\",\n      cluster: \"util\",\n      name: \"util.math\",\n      value: 2,\n    },\n    {\n      id: \"16\",\n      name: \"util.palette\",\n      cluster: \"util\",\n      value: 5,\n    },\n    {\n      id: \"17\",\n      name: \"vis.axis\",\n      cluster: \"vis\",\n      value: 24,\n    },\n    {\n      id: \"18\",\n      name: \"vis.controls\",\n      cluster: \"vis\",\n      value: 28,\n    },\n    {\n      id: \"19\",\n      name: \"vis.data\",\n      cluster: \"vis\",\n      value: 70,\n    },\n    {\n      id: \"20\",\n      name: \"vis.data.render\",\n      cluster: \"vis\",\n      value: 11,\n    },\n    {\n      id: \"21\",\n      name: \"vis.events\",\n      cluster: \"vis\",\n      value: 8,\n    },\n    {\n      id: \"22\",\n      name: \"vis.legend\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"23\",\n      name: \"vis.operator.distortion\",\n      cluster: \"vis\",\n      value: 9,\n    },\n    {\n      id: \"24\",\n      name: \"vis.operator.encoder\",\n      cluster: \"vis\",\n      value: 30,\n    },\n    {\n      id: \"25\",\n      name: \"vis.operator.filter\",\n      cluster: \"vis\",\n      value: 17,\n    },\n    {\n      id: \"26\",\n      name: \"vis.operator\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"27\",\n      name: \"vis.operator.label\",\n      cluster: \"vis\",\n      value: 18,\n    },\n    {\n      id: \"28\",\n      name: \"vis.operator.layout\",\n      cluster: \"vis\",\n      value: 91,\n    },\n    {\n      id: \"29\",\n      name: \"vis\",\n      cluster: \"vis\",\n      value: 13,\n    },\n  ],\n  edges: [\n    {\n      source: \"10\",\n      target: \"10\",\n      sourceWeight: 61,\n      targetWeight: 61,\n    },\n    {\n      source: \"11\",\n      target: \"11\",\n      sourceWeight: 39,\n      targetWeight: 39,\n    },\n    {\n      source: \"3\",\n      target: \"3\",\n      sourceWeight: 30,\n      targetWeight: 30,\n    },\n    {\n      source: \"19\",\n      target: \"19\",\n      sourceWeight: 26,\n      targetWeight: 26,\n    },\n    {\n      source: \"13\",\n      target: \"13\",\n      sourceWeight: 23,\n      targetWeight: 23,\n    },\n    {\n      source: \"9\",\n      target: \"9\",\n      sourceWeight: 22,\n      targetWeight: 22,\n    },\n    {\n      source: \"12\",\n      target: \"12\",\n      sourceWeight: 19,\n      targetWeight: 19,\n    },\n    {\n      source: \"28\",\n      target: \"19\",\n      sourceWeight: 34,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"4\",\n      sourceWeight: 16,\n      targetWeight: 16,\n    },\n    {\n      source: \"11\",\n      target: \"10\",\n      sourceWeight: 32,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"28\",\n      sourceWeight: 14,\n      targetWeight: 14,\n    },\n    {\n      source: \"18\",\n      target: \"18\",\n      sourceWeight: 12,\n      targetWeight: 12,\n    },\n    {\n      source: \"26\",\n      target: \"26\",\n      sourceWeight: 11,\n      targetWeight: 11,\n    },\n    {\n      source: \"28\",\n      target: \"13\",\n      sourceWeight: 20,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      sourceWeight: 17,\n      targetWeight: 2,\n    },\n    {\n      source: \"19\",\n      target: \"13\",\n      sourceWeight: 17,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"17\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"6\",\n      target: \"6\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"19\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"5\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"21\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 4,\n    },\n    {\n      source: \"25\",\n      target: \"19\",\n      sourceWeight: 10,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"0\",\n      sourceWeight: 5,\n      targetWeight: 5,\n    },\n    {\n      source: \"3\",\n      target: \"13\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"19\",\n      sourceWeight: 5,\n      targetWeight: 4,\n    },\n    {\n      source: \"19\",\n      target: \"12\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"22\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"24\",\n      target: \"24\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"26\",\n      target: \"3\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"16\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"16\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"10\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"22\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"20\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"1\",\n      target: \"26\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"12\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"7\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"3\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"7\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 2,\n    },\n    {\n      source: \"22\",\n      target: \"16\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"21\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"23\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"29\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"28\",\n      target: \"17\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"15\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"27\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"14\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"18\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 1,\n    },\n    {\n      source: \"25\",\n      target: \"26\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"9\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"12\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"6\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"21\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"29\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"23\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"17\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"12\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"20\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"6\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"6\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-arc-diagram/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-arc-diagram/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-arc-diagram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\n/**\n * 环形弧线图\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"mds\", mds);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const colors = [\n      \"rgb(91, 143, 249)\",\n      \"rgb(90, 216, 166)\",\n      \"rgb(93, 112, 146)\",\n      \"rgb(246, 189, 22)\",\n      \"rgb(232, 104, 74)\",\n      \"rgb(109, 200, 236)\",\n      \"rgb(146, 112, 202)\",\n      \"rgb(255, 157, 77)\",\n      \"rgb(38, 154, 153)\",\n      \"rgb(227, 137, 163)\",\n    ];\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"edge-tooltip\",\n            formatText: function formatText(model) {\n              const text = `source: ${model.sourceName}<br/> target: ${model.targetName}`;\n              return text;\n            },\n          },\n        ],\n      },\n      defaultNode: {\n        style: {\n          opacity: 0.8,\n          lineWidth: 1,\n          stroke: \"#999\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          opacity: 0.6,\n          lineAppendWidth: 3,\n        },\n      },\n    });\n\n    // 处理数据\n    function scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n      const outLength = outRange[1] - outRange[0];\n      const dataLength = dataRange[1] - dataRange[0];\n      nodes.forEach(function (n) {\n        n[propName] =\n          ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n          outRange[0];\n      });\n    }\n\n    const origin = [width / 2, height / 2];\n    const radius = width < height ? width / 3 : height / 3;\n    const { edges } = data;\n    const { nodes } = data;\n    const nodeMap = new Map();\n    const clusterMap = new Map();\n    let clusterId = 0;\n    const n = nodes.length;\n    const angleSep = (Math.PI * 2) / n;\n    nodes.forEach(function (node, i) {\n      const angle = i * angleSep;\n      node.x = radius * Math.cos(angle) + origin[0];\n      node.y = radius * Math.sin(angle) + origin[1];\n      node.angle = angle;\n      nodeMap.set(node.id, node);\n      // cluster\n      if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n        clusterMap.set(node.cluster, clusterId);\n        clusterId++;\n      }\n      const id = clusterMap.get(node.cluster);\n      if (node.style) {\n        node.style.fill = colors[id % colors.length];\n      } else {\n        node.style = {\n          fill: colors[id % colors.length],\n        };\n      }\n      // label\n      node.label = node.name;\n      node.labelCfg = {\n        position: \"center\",\n        style: {\n          rotate: angle,\n          rotateCenter: \"lefttop\",\n          textAlign: \"start\",\n        },\n      };\n    });\n    edges.forEach((edge) => {\n      edge.type = \"quadratic\";\n      const source = nodeMap.get(edge.source);\n      const target = nodeMap.get(edge.target);\n      edge.controlPoints = [\n        {\n          x: origin[0],\n          y: origin[1],\n        },\n      ];\n      edge.color = source.style.fill;\n      edge.sourceName = source.name;\n      edge.targetName = target.name;\n    });\n\n    // map the value to node size\n    let maxValue = -9999;\n    let minValue = 9999;\n    nodes.forEach(function (k) {\n      if (maxValue < k.value) maxValue = k.value;\n      if (minValue > k.value) minValue = k.value;\n    });\n    const sizeRange = [3, 30];\n    const sizeDataRange = [minValue, maxValue];\n    scaleNodeProp(nodes, \"size\", \"value\", sizeDataRange, sizeRange);\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-arc-diagram/index.json",
    "content": "{\n  \"defaultTitle\": \"环形弧线图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-configuration-translate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-configuration-translate/index.axml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\n/**\n * Circular布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    discription:\n      \"Circular layout with radius: take full use of the canvas, ordering: topology\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    setInterval(function () {\n      layoutConfigTranslation();\n    }, 11500);\n\n    function layoutConfigTranslation() {\n      setTimeout(function () {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 200, divisions = 5, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n          startAngle: Math.PI / 4,\n          endAngle: Math.PI,\n          divisions: 5,\n          ordering: \"degree\",\n        });\n      }, 1000);\n\n      setTimeout(function () {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 200, divisions = 3, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          startAngle: Math.PI / 4,\n          endAngle: Math.PI,\n          divisions: 3,\n        });\n      }, 2500);\n\n      setTimeout(function () {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 200, divisions = 8, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n          startAngle: 0,\n          endAngle: Math.PI / 2,\n          divisions: 8,\n        });\n      }, 4000);\n\n      setTimeout(function () {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 10～300(spiral), endAngle: PI, divisions = 1, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: null,\n          startRadius: 10,\n          endRadius: 300,\n          divisions: 1,\n          startAngle: 0,\n          endAngle: Math.PI,\n        });\n      }, 5500);\n\n      setTimeout(function () {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 10～300(spiral),endAngle: 2 * PI, divisions= 1, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          endAngle: 2 * Math.PI,\n        });\n      }, 7000);\n\n      setTimeout(function () {\n        me.setData({\n          discription: \"Circular layout, radius = 200, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n        });\n      }, 8500);\n\n      setTimeout(function () {\n        me.setData({\n          discription: \"Circular layout, radius = 200, ordering: topology\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n          ordering: \"topology\",\n        });\n      }, 10000);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/circular-configuration-translate/index.json",
    "content": "{\n  \"defaultTitle\": \"参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/cluster-grid/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"0\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"0\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"0\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"0\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"3\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"0\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"0\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"0\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"3\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"3\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"2\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"2\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"4\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"2\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"2\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"2\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"1\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"4\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"4\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"4\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"0\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"2\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"2\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"2\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"3\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"4\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"4\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"1\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"1\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"4\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"4\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"1\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst colors = [\n  \"#BDD2FD\",\n  \"#BDEFDB\",\n  \"#C2C8D5\",\n  \"#FBE5A2\",\n  \"#F6C3B7\",\n  \"#B6E3F5\",\n  \"#D3C6EA\",\n  \"#FFD8B8\",\n  \"#AAD8D8\",\n  \"#FFD6E7\",\n];\nconst strokes = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#E8684A\",\n  \"#6DC8EC\",\n  \"#9270CA\",\n  \"#FF9D4D\",\n  \"#269A99\",\n  \"#FF99C3\",\n];\n\nconst { nodes } = data;\nconst clusterMap = new Map();\nlet clusterId = 0;\nnodes.forEach(function (node) {\n  // cluster\n  if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n    clusterMap.set(node.cluster, clusterId);\n    clusterId++;\n  }\n  const cid = clusterMap.get(node.cluster);\n  if (!node.style) node.style = {};\n  node.style.fill = colors[cid % colors.length];\n  node.style.stroke = strokes[cid % strokes.length];\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/cluster-grid/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/cluster-grid/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/cluster-grid/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\n/**\n * 指定排序方式的网格布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"grid\", grid);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"grid\",\n        begin: [20, 20],\n        width: width - 20,\n        height: height - 20,\n        sortBy: \"cluster\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/cluster-grid/index.json",
    "content": "{\n  \"defaultTitle\": \"指定排序方式的网格布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/custom-bi-graph/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"A\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"1\",\n      label: \"B\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"2\",\n      label: \"C\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"3\",\n      label: \"D\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"4\",\n      label: \"E\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"5\",\n      label: \"F\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"6\",\n      label: \"a\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"7\",\n      label: \"b\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"8\",\n      label: \"c\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"9\",\n      label: \"d\",\n      cluster: \"part2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"6\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"1\",\n      target: \"6\",\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n    },\n    {\n      source: \"1\",\n      target: \"7\",\n    },\n    {\n      source: \"2\",\n      target: \"8\",\n    },\n    {\n      source: \"2\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"6\",\n    },\n    {\n      source: \"3\",\n      target: \"8\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n    },\n    {\n      source: \"5\",\n      target: \"9\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/custom-bi-graph/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/custom-bi-graph/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/custom-bi-graph/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * customBiGraph\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"bigraphLayout\", {\n      execute() {\n        const self = this;\n        const center = self.center || [0, 0];\n        const biSep = self.biSep || 100;\n        const nodeSep = self.nodeSep || 20;\n        const nodeSize = self.nodeSize || 20;\n        const direction = self.direction || \"horizontal\";\n        let part1Pos = 0;\n        let part2Pos = 0;\n        if (direction === \"horizontal\") {\n          part1Pos = center[0] - biSep / 2;\n          part2Pos = center[0] + biSep / 2;\n        }\n        const { nodes, edges } = self;\n        const part1Nodes = [];\n        const part2Nodes = [];\n        const part1NodeMap = new Map();\n        const part2NodeMap = new Map();\n        // separate the nodes and init the positions\n        nodes.forEach(function (node, i) {\n          if (node.cluster === \"part1\") {\n            part1Nodes.push(node);\n            part1NodeMap.set(node.id, i);\n          } else {\n            part2Nodes.push(node);\n            part2NodeMap.set(node.id, i);\n          }\n        });\n\n        // order the part1 node\n        part1Nodes.forEach(function (p1n) {\n          let index = 0;\n          let adjCount = 0;\n          edges.forEach(function (edge) {\n            const sourceId = edge.source;\n            const targetId = edge.target;\n            if (sourceId === p1n.id) {\n              index += part2NodeMap.get(targetId);\n              adjCount += 1;\n            } else if (targetId === p1n.id) {\n              index += part2NodeMap.get(sourceId);\n              adjCount += 1;\n            }\n          });\n          index /= adjCount;\n          p1n.index = index;\n        });\n        part1Nodes.sort(function (a, b) {\n          return a.index - b.index;\n        });\n        part2Nodes.forEach(function (p2n) {\n          let index = 0;\n          let adjCount = 0;\n          edges.forEach(function (edge) {\n            const sourceId = edge.source;\n            const targetId = edge.target;\n            if (sourceId === p2n.id) {\n              index += part1NodeMap.get(targetId);\n              adjCount += 1;\n            } else if (targetId === p2n.id) {\n              index += part1NodeMap.get(sourceId);\n              adjCount += 1;\n            }\n          });\n          index /= adjCount;\n          p2n.index = index;\n        });\n        part2Nodes.sort(function (a, b) {\n          return a.index - b.index;\n        });\n\n        // place the nodes\n        const hLength =\n          part1Nodes.length > part2Nodes.length\n            ? part1Nodes.length\n            : part2Nodes.length;\n        const height = hLength * (nodeSep + nodeSize);\n        let begin = center[1] - height / 2;\n        if (direction === \"vertical\") {\n          begin = center[0] - height / 2;\n        }\n        part1Nodes.forEach(function (p1n, i) {\n          if (direction === \"horizontal\") {\n            p1n.x = part1Pos;\n            p1n.y = begin + i * (nodeSep + nodeSize);\n          } else {\n            p1n.x = begin + i * (nodeSep + nodeSize);\n            p1n.y = part1Pos;\n          }\n        });\n        part2Nodes.forEach(function (p2n, i) {\n          if (direction === \"horizontal\") {\n            p2n.x = part2Pos;\n            p2n.y = begin + i * (nodeSep + nodeSize);\n          } else {\n            p2n.x = begin + i * (nodeSep + nodeSize);\n            p2n.y = part2Pos;\n          }\n        });\n      },\n    });\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"bigraphLayout\",\n        biSep: 300,\n        nodeSep: 20,\n        nodeSize: 20,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/custom-bi-graph/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义二分图布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n\n/**\n * 自左向右的Dagre\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        align: \"DL\",\n        nodesepFunc: () => 1,\n        ranksepFunc: () => 1,\n      },\n      defaultNode: {\n        size: [30, 20],\n        type: \"rect\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre/index.json",
    "content": "{\n  \"defaultTitle\": \"自左向右的流程图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-UL/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"7\",\n    },\n    {\n      source: \"5\",\n      target: \"8\",\n    },\n    {\n      source: \"8\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"9\",\n    },\n    {\n      source: \"3\",\n      target: \"9\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-UL/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-UL/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-UL/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n\n/**\n * 自左向右的Dagre上对齐\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        align: \"UL\",\n        controlPoints: true,\n        nodesepFunc: () => 1,\n        ranksepFunc: () => 1,\n      },\n      defaultNode: {\n        size: [30, 20],\n        type: \"rect\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        type: \"polyline\",\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n          radius: 20,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-UL/index.json",
    "content": "{\n  \"defaultTitle\": \"自左向右的流程图对齐\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-combo/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      comboId: \"A\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      comboId: \"B\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      comboId: \"A\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      comboId: \"C\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      comboId: \"C\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      comboId: \"A\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      comboId: \"B\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      comboId: \"B\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n    },\n    {\n      source: \"1\",\n      target: \"6\",\n    },\n    {\n      source: \"1\",\n      target: \"7\",\n    },\n    {\n      source: \"3\",\n      target: \"8\",\n    },\n    {\n      source: \"3\",\n      target: \"9\",\n    },\n    {\n      source: \"5\",\n      target: \"10\",\n    },\n    {\n      source: \"5\",\n      target: \"11\",\n    },\n  ],\n  combos: [\n    {\n      id: \"A\",\n      label: \"combo A\",\n      style: {\n        fill: \"#C4E3B2\",\n        stroke: \"#C4E3B2\",\n      },\n    },\n    {\n      id: \"B\",\n      label: \"combo B\",\n      style: {\n        stroke: \"#99C0ED\",\n        fill: \"#99C0ED\",\n      },\n    },\n    {\n      id: \"C\",\n      label: \"combo C\",\n      style: {\n        stroke: \"#eee\",\n        fill: \"#eee\",\n      },\n    },\n  ],\n};\n\ndata.nodes.forEach((node) => {\n  switch (node.ComboId) {\n    case \"A\":\n      node.style = {\n        fill: \"#C4E3B2\",\n        stroke: \"#aaa\",\n      };\n      break;\n    case \"B\":\n      node.style = {\n        fill: \"#99C0ED\",\n        stroke: \"#aaa\",\n      };\n      break;\n    case \"C\":\n      node.style = {\n        fill: \"#eee\",\n        stroke: \"#aaa\",\n      };\n      break;\n    default:\n      node.style = {\n        fill: \"#FDE1CE\",\n        stroke: \"#aaa\",\n      };\n      break;\n  }\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-combo/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-combo/index.axml",
    "content": "<button\n  onTap=\"handleClickButton\"\n>{{description}}</button>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-combo/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n\n/**\n * dagreCombo\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n  sortByCombo: false,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    description: \"Enable sortByCombo\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  handleClickButton() {\n    console.log(\"click\", this.sortByCombo);\n    this.sortByCombo = !this.sortByCombo;\n    this.setData({\n      description: this.sortByCombo\n        ? \"Disable sortByCombo\"\n        : \"Enable sortByCombo\",\n    });\n    const { sortByCombo } = this;\n    this.graph.updateLayout({\n      sortByCombo,\n    });\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 30,\n      animate: true,\n      groupByTypes: false,\n      modes: {\n        default: [\n          \"drag-combo\",\n          \"drag-node\",\n          \"drag-canvas\",\n          {\n            type: \"collapse-expand-combo\",\n            relayout: false,\n          },\n        ],\n      },\n      layout: {\n        type: \"dagre\",\n        sortByCombo: false,\n        ranksep: 10,\n        nodesep: 10,\n      },\n      defaultNode: {\n        size: [60, 30],\n        type: \"rect\",\n        anchorPoints: [\n          [0.5, 0],\n          [0.5, 1],\n        ],\n      },\n      defaultEdge: {\n        type: \"line\",\n      },\n      defaultCombo: {\n        type: \"rect\",\n        style: {\n          fillOpacity: 0.1,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-combo/index.json",
    "content": "{\n  \"defaultTitle\": \"带有Combo的流程图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-configuration-translate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-configuration-translate/index.axml",
    "content": "<view>{{description}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n\n/**\n * Dagre布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    description: \"\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 30,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"dagre\",\n        nodeSize: [40, 20],\n        nodesep: 1,\n        ranksep: 1,\n      },\n      animate: true,\n      defaultNode: {\n        size: [40, 20],\n        type: \"rect\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    function layoutConfigTranslation() {\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 1, layout direction: Top->Bottom, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          ranksep: 10,\n        });\n      }, 1000);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          nodesep: 5,\n        });\n      }, 2500);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UL\",\n        });\n        me.graph.updateLayout({\n          align: \"UL\",\n        });\n      }, 4000);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UR\",\n        });\n        me.graph.updateLayout({\n          align: \"UR\",\n        });\n      }, 5500);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          rankdir: \"LR\",\n          align: \"DL\",\n        });\n      }, 7000);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 30, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          ranksep: 30,\n        });\n      }, 8500);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/dagre-configuration-translate/index.json",
    "content": "{\n  \"defaultTitle\": \"布局参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/data-change/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst data2 = {\n  nodes: [\n    {\n      id: \"b0\",\n      label: \"0\",\n    },\n    {\n      id: \"b1\",\n      label: \"1\",\n    },\n    {\n      id: \"b2\",\n      label: \"2\",\n    },\n    {\n      id: \"b3\",\n      label: \"3\",\n    },\n    {\n      id: \"b4\",\n      label: \"4\",\n    },\n    {\n      id: \"b5\",\n      label: \"5\",\n    },\n  ],\n  edges: [\n    {\n      id: \"be1\",\n      source: \"b0\",\n      target: \"b1\",\n    },\n    {\n      id: \"be2\",\n      source: \"b0\",\n      target: \"b2\",\n    },\n    {\n      id: \"be3\",\n      source: \"b0\",\n      target: \"b3\",\n    },\n    {\n      id: \"be4\",\n      source: \"b0\",\n      target: \"b4\",\n    },\n    {\n      id: \"be5\",\n      source: \"b0\",\n      target: \"b5\",\n    },\n  ],\n};\n\nexport { data, data2 };\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/data-change/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/data-change/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/data-change/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { data, data2 } from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n/**\n * layoutTranslate\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"force\",\n      },\n      // animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 切换数据\n    setTimeout(() => {\n      this.graph.changeData(data2);\n    }, 2500);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/data-change/index.json",
    "content": "{\n  \"defaultTitle\": \"数据动态切换\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/degree-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/degree-circular/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/degree-circular/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/degree-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\n/**\n * 按照节点度数排序的Circular\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n        ordering: \"degree\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/degree-circular/index.json",
    "content": "{\n  \"defaultTitle\": \"按节点度数排序\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/division-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/division-circular/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/division-circular/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/division-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\n/**\n * 分割环形布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n        divisions: 5,\n        radius: 200,\n        startAngle: Math.PI / 4,\n        endAngle: Math.PI,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/division-circular/index.json",
    "content": "{\n  \"defaultTitle\": \"分割环形布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-bubbles/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      value: 10,\n      cluster: \"a\",\n      description: \"this is node 0, \\nand the value of it is 10\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      value: 20,\n      cluster: \"b\",\n      description: \"this is node 1, \\nand the value of it is 20\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      value: 5,\n      cluster: \"a\",\n      description: \"this is node 2, \\nand the value of it is 5\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      value: 10,\n      cluster: \"a\",\n      description: \"this is node 3, \\nand the value of it is 10\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      value: 12,\n      cluster: \"c\",\n      subCluster: \"sb\",\n      description: \"this is node 4, \\nand the value of it is 12\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      value: 18,\n      cluster: \"c\",\n      subCluster: \"sa\",\n      description: \"this is node 5, \\nand the value of it is 18\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      value: 3,\n      cluster: \"c\",\n      subCluster: \"sa\",\n      description: \"this is node 6, \\nand the value of it is 3\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      value: 7,\n      cluster: \"b\",\n      subCluster: \"sa\",\n      description: \"this is node 7, \\nand the value of it is 7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      value: 21,\n      cluster: \"d\",\n      subCluster: \"sb\",\n      description: \"this is node 8, \\nand the value of it is 21\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      value: 9,\n      cluster: \"d\",\n      subCluster: \"sb\",\n      description: \"this is node 9, \\nand the value of it is 9\",\n    },\n  ],\n  edges: [],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-bubbles/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-bubbles/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-bubbles/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 力导向气泡图\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        nodeStrength: 30,\n        collideStrength: 0.7,\n        alphaDecay: 0.01,\n        preventOverlap: true,\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        size: [10, 10],\n      },\n    });\n\n    function _defineProperty(obj, key, value) {\n      if (key in obj) {\n        Object.defineProperty(obj, key, {\n          value,\n          enumerable: true,\n          configurable: true,\n          writable: true,\n        });\n      } else {\n        obj[key] = value;\n      }\n      return obj;\n    }\n\n    const colors = [\n      \"#BDD2FD\",\n      \"#BDEFDB\",\n      \"#C2C8D5\",\n      \"#FBE5A2\",\n      \"#F6C3B7\",\n      \"#B6E3F5\",\n      \"#D3C6EA\",\n      \"#FFD8B8\",\n      \"#AAD8D8\",\n      \"#FFD6E7\",\n    ];\n    const strokes = [\n      \"#5B8FF9\",\n      \"#5AD8A6\",\n      \"#5D7092\",\n      \"#F6BD16\",\n      \"#E8684A\",\n      \"#6DC8EC\",\n      \"#9270CA\",\n      \"#FF9D4D\",\n      \"#269A99\",\n      \"#FF99C3\",\n    ];\n\n    const { nodes } = data;\n    const nodeMap = new Map();\n    const clusterMap = new Map();\n    let clusterId = 0;\n    nodes.forEach((node) => {\n      nodeMap.set(node.id, node);\n      // cluster\n      if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n        clusterMap.set(node.cluster, clusterId);\n        clusterId++;\n      }\n      const cid = clusterMap.get(node.cluster);\n      if (!node.style) node.style = {};\n      node.style.fill = colors[cid % colors.length];\n      node.style.stroke = strokes[cid % strokes.length];\n      node.x = width / 2 + 200 * (Math.random() - 0.5);\n      node.y = height / 2 + 200 * (Math.random() - 0.5);\n    });\n\n    // map the value to node size\n    let maxNodeValue = -9999;\n    let minNodeValue = 9999;\n    nodes.forEach(function (n) {\n      if (maxNodeValue < n.value) maxNodeValue = n.value;\n      if (minNodeValue > n.value) minNodeValue = n.value;\n    });\n    const nodeSizeRange = [10, 30];\n    const nodeSizeDataRange = [minNodeValue, maxNodeValue];\n    scaleNodeProp(nodes, \"size\", \"value\", nodeSizeDataRange, nodeSizeRange);\n\n    nodes.forEach(function (node) {\n      node.oriSize = node.size;\n      node.oriLabel = node.label;\n    });\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n\n    // 监听\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", function (e) {\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", function (e) {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n    this.graph.on(\"node:click\", function (e) {\n      const node = e.item;\n      const states = node.getStates();\n      let clicked = false;\n      const model = node.getModel();\n      let size = 200;\n      let labelText = `NODE: ${model.id}\\n${model.description}`;\n      states.forEach(function (state) {\n        if (state === \"click\") {\n          clicked = true;\n          size = model.oriSize;\n          labelText = model.oriLabel;\n        }\n      });\n      this.graph.setItemState(node, \"click\", !clicked);\n      this.graph.updateItem(node, {\n        size,\n        label: labelText,\n      });\n      this.graph.layout();\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    function scaleNodeProp(\n      elements,\n      propName,\n      refPropName,\n      dataRange,\n      outRange,\n    ) {\n      const outLength = outRange[1] - outRange[0];\n      const dataLength = dataRange[1] - dataRange[0];\n      elements.forEach(function (n) {\n        if (propName.split(\".\")[0] === \"style\") {\n          if (n.style) {\n            n.style[propName.split(\".\")[1]] =\n              ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n              outRange[0];\n          } else {\n            n.style = _defineProperty(\n              {},\n              propName.split(\".\")[1],\n              ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n                outRange[0],\n            );\n          }\n        } else {\n          n[propName] =\n            ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n            outRange[0];\n        }\n      });\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-bubbles/index.json",
    "content": "{\n  \"defaultTitle\": \"力导向气泡图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-constrained-in-rect/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-constrained-in-rect/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-constrained-in-rect/index.axml",
    "content": "<!-- TODO：这个背景怎么实现？ -->\n<view\n  width:=\"{{constrainBox.width}}\"\n  height=\"{{constrainBox.height}}\"\n></view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-constrained-in-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 约束在范围内布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n    const { nodes } = data;\n\n    // 包裹范围的参数\n    const constrainBox = { x: 60, y: 50, width: 500, height: 150 };\n    const onTick = () => {\n      let minx = 99999999;\n      let maxx = -99999999;\n      let miny = 99999999;\n      let maxy = -99999999;\n      let maxsize = -9999999;\n      nodes.forEach((node) => {\n        if (minx > node.x) {\n          minx = node.x;\n        }\n        if (maxx < node.x) {\n          maxx = node.x;\n        }\n        if (miny > node.y) {\n          miny = node.y;\n        }\n        if (maxy < node.y) {\n          maxy = node.y;\n        }\n        if (maxsize < node.size) {\n          maxsize = node.size;\n        }\n      });\n      const scalex = (constrainBox.width - maxsize) / (maxx - minx);\n      const scaley = (constrainBox.height - maxsize) / (maxy - miny);\n      nodes.forEach((node) => {\n        node.x = (node.x - minx) * scalex + constrainBox.x;\n        node.y = (node.y - miny) * scaley + constrainBox.y;\n      });\n    };\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        onTick,\n      },\n      defaultNode: {\n        size: 15,\n      },\n    });\n\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map(function (edge, i) {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-constrained-in-rect/index.json",
    "content": "{\n  \"defaultTitle\": \"约束在范围内布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-configuration-translate/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-configuration-translate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-configuration-translate/index.axml",
    "content": "<view>{{desc}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 力导向布局参数动态变化\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    desc: \"\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"force\",\n        linkDistance: 50,\n        center: [width / 2, height / 2],\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n    const my = this;\n    setInterval(() => {\n      layoutConfigTranslation();\n    }, 5000);\n\n    function layoutConfigTranslation() {\n      setTimeout(() => {\n        my.setData({\n          desc: \"Force layout, linkDistance = 100, preventOverlap: true\",\n        });\n        my.graph.updateLayout({\n          linkDistance: 100,\n          preventOverlap: true,\n          nodeSize: 20,\n        });\n      }, 2500);\n      setTimeout(() => {\n        my.setData({\n          desc: \"Force layout, linkDistance = 50, preventOverlap: false\",\n        });\n        my.graph.updateLayout({\n          linkDistance: 50,\n          preventOverlap: false,\n        });\n      }, 5000);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-configuration-translate/index.json",
    "content": "{\n  \"defaultTitle\": \"力导向布局参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-force-clustering/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"4\",\n      sim_name: \"AFG\",\n      name: \"Afghanistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 57.847,\n      weight: 73.355,\n    },\n    {\n      id: \"8\",\n      sim_name: \"ALB\",\n      name: \"Albania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 556.3332546,\n      weight: 1214.363,\n    },\n    {\n      id: \"10\",\n      sim_name: \"ATA\",\n      name: \"Antarctica\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2829.367,\n      weight: 11113.564,\n    },\n    {\n      id: \"12\",\n      sim_name: \"DZA\",\n      name: \"Algeria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105217.8151,\n      weight: 146857.7593,\n    },\n    {\n      id: \"16\",\n      sim_name: \"ASM\",\n      name: \"American Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 97.623,\n      weight: 982.085,\n    },\n    {\n      id: \"20\",\n      sim_name: \"AND\",\n      name: \"Andorra\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 787.166,\n      weight: 1240.056,\n    },\n    {\n      id: \"24\",\n      sim_name: \"AGO\",\n      name: \"Angola\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.366,\n      weight: 0.211,\n    },\n    {\n      id: \"28\",\n      sim_name: \"ATG\",\n      name: \"Antigua and Barbuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30831.87949,\n      weight: 72065.168,\n    },\n    {\n      id: \"31\",\n      sim_name: \"AZE\",\n      name: \"Azerbaijan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46917.41553,\n      weight: 45114.87169,\n    },\n    {\n      id: \"32\",\n      sim_name: \"ARG\",\n      name: \"Argentina\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11347322.78,\n      weight: 38200326.47,\n    },\n    {\n      id: \"36\",\n      sim_name: \"AUS\",\n      name: \"Australia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10983308.38,\n      weight: 32933532.17,\n    },\n    {\n      id: \"40\",\n      sim_name: \"AUT\",\n      name: \"Austria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 714932.2545,\n      weight: 1683224.24,\n    },\n    {\n      id: \"44\",\n      sim_name: \"BHS\",\n      name: \"Bahamas\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 427.395,\n      weight: 969.33,\n    },\n    {\n      id: \"48\",\n      sim_name: \"BHR\",\n      name: \"Bahrain\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22229.96717,\n      weight: 53856.78001,\n    },\n    {\n      id: \"50\",\n      sim_name: \"BGD\",\n      name: \"Bangladesh\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22330.75971,\n      weight: 86944.1853,\n    },\n    {\n      id: \"51\",\n      sim_name: \"ARM\",\n      name: \"Armenia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 206.6709842,\n      weight: 223.5014745,\n    },\n    {\n      id: \"52\",\n      sim_name: \"BRB\",\n      name: \"Barbados\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4790.290139,\n      weight: 7428.399008,\n    },\n    {\n      id: \"56\",\n      sim_name: \"BEL\",\n      name: \"Belgium\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1896499.584,\n      weight: 3625004.302,\n    },\n    {\n      id: \"60\",\n      sim_name: \"BMU\",\n      name: \"Bermuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 100.264,\n      weight: 250,\n    },\n    {\n      id: \"64\",\n      sim_name: \"BTN\",\n      name: \"Bhutan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1100.663269,\n      weight: 3990.493739,\n    },\n    {\n      id: \"68\",\n      sim_name: \"BOL\",\n      name: \"Bolivia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 107152.4673,\n      weight: 117438.7654,\n    },\n    {\n      id: \"70\",\n      sim_name: \"BIH\",\n      name: \"Bosnia Herzegovina\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10652.90002,\n      weight: 25582.17925,\n    },\n    {\n      id: \"72\",\n      sim_name: \"BWA\",\n      name: \"Botswana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7635.744989,\n      weight: 24790.60442,\n    },\n    {\n      id: \"76\",\n      sim_name: \"BRA\",\n      name: \"Brazil\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7114534.381,\n      weight: 22441162.41,\n    },\n    {\n      id: \"84\",\n      sim_name: \"BLZ\",\n      name: \"Belize\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28037.35873,\n      weight: 77441.91463,\n    },\n    {\n      id: \"90\",\n      sim_name: \"SLB\",\n      name: \"Solomon Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"92\",\n      sim_name: \"VGB\",\n      name: \"British Virgin Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15328.77,\n      weight: 51127.16,\n    },\n    {\n      id: \"96\",\n      sim_name: \"BRN\",\n      name: \"Brunei Darussalam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46.438,\n      weight: 35.416,\n    },\n    {\n      id: \"100\",\n      sim_name: \"BGR\",\n      name: \"Bulgaria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1258892.481,\n      weight: 4147538.49,\n    },\n    {\n      id: \"104\",\n      sim_name: \"MMR\",\n      name: \"Myanmar\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 599204.3703,\n      weight: 1218435.323,\n    },\n    {\n      id: \"108\",\n      sim_name: \"BDI\",\n      name: \"Burundi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 523.644,\n      weight: 2841.873,\n    },\n    {\n      id: \"112\",\n      sim_name: \"BLR\",\n      name: \"Belarus\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 52538.61827,\n      weight: 137692.36,\n    },\n    {\n      id: \"116\",\n      sim_name: \"KHM\",\n      name: \"Cambodia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 167651.1526,\n      weight: 265914.0128,\n    },\n    {\n      id: \"120\",\n      sim_name: \"CMR\",\n      name: \"Cameroon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1263.861619,\n      weight: 2235.140891,\n    },\n    {\n      id: \"124\",\n      sim_name: \"CAN\",\n      name: \"Canada\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8982050.268,\n      weight: 24667183.74,\n    },\n    {\n      id: \"132\",\n      sim_name: \"CPV\",\n      name: \"Cabo Verde\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2344.96,\n      weight: 4095.993,\n    },\n    {\n      id: \"140\",\n      sim_name: \"CAF\",\n      name: \"Central African Rep.\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"144\",\n      sim_name: \"LKA\",\n      name: \"Sri Lanka\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 181369.2559,\n      weight: 489552.3718,\n    },\n    {\n      id: \"152\",\n      sim_name: \"CHL\",\n      name: \"Chile\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 412283.3672,\n      weight: 270900.3596,\n    },\n    {\n      id: \"156\",\n      sim_name: \"CHN\",\n      name: \"China\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1490564.833,\n      weight: 2304819.508,\n    },\n    {\n      id: \"170\",\n      sim_name: \"COL\",\n      name: \"Colombia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46615.80539,\n      weight: 52684.28073,\n    },\n    {\n      id: \"188\",\n      sim_name: \"CRI\",\n      name: \"Costa Rica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17710.68444,\n      weight: 28937.25094,\n    },\n    {\n      id: \"191\",\n      sim_name: \"HRV\",\n      name: \"Croatia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 192245.2115,\n      weight: 580710.257,\n    },\n    {\n      id: \"192\",\n      sim_name: \"CUB\",\n      name: \"Cuba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 793.321,\n      weight: 1620.825,\n    },\n    {\n      id: \"196\",\n      sim_name: \"CYP\",\n      name: \"Cyprus\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 47981.18874,\n      weight: 126474.07,\n    },\n    {\n      id: \"203\",\n      sim_name: \"CZE\",\n      name: \"Czech Rep.\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 922618.0722,\n      weight: 3054247.331,\n    },\n    {\n      id: \"204\",\n      sim_name: \"BEN\",\n      name: \"Benin\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12987.78421,\n      weight: 55672.72433,\n    },\n    {\n      id: \"208\",\n      sim_name: \"DNK\",\n      name: \"Denmark\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 701199.8922,\n      weight: 1992757.212,\n    },\n    {\n      id: \"212\",\n      sim_name: \"DMA\",\n      name: \"Dominica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.351,\n      weight: 0.692,\n    },\n    {\n      id: \"214\",\n      sim_name: \"DOM\",\n      name: \"Dominican Rep.\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105510.1813,\n      weight: 210275.29,\n    },\n    {\n      id: \"218\",\n      sim_name: \"ECU\",\n      name: \"Ecuador\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30957.4275,\n      weight: 49399.64362,\n    },\n    {\n      id: \"222\",\n      sim_name: \"SLV\",\n      name: \"El Salvador\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77105.01061,\n      weight: 129245.0661,\n    },\n    {\n      id: \"231\",\n      sim_name: \"ETH\",\n      name: \"Ethiopia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44330.31405,\n      weight: 29794.00055,\n    },\n    {\n      id: \"233\",\n      sim_name: \"EST\",\n      name: \"Estonia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 150772.6292,\n      weight: 458854.905,\n    },\n    {\n      id: \"234\",\n      sim_name: \"FRO\",\n      name: \"Faeroe Isds\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.298,\n      weight: 44.726,\n    },\n    {\n      id: \"242\",\n      sim_name: \"FJI\",\n      name: \"Fiji\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15966.92145,\n      weight: 24119.72685,\n    },\n    {\n      id: \"246\",\n      sim_name: \"FIN\",\n      name: \"Finland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 266364.4975,\n      weight: 753973.3063,\n    },\n    {\n      id: \"251\",\n      sim_name: \"FRA\",\n      name: \"France\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11027310.62,\n      weight: 31368277.85,\n    },\n    {\n      id: \"262\",\n      sim_name: \"DJI\",\n      name: \"Djibouti\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1936.537,\n      weight: 2932.238,\n    },\n    {\n      id: \"266\",\n      sim_name: \"GAB\",\n      name: \"Gabon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2624.516,\n      weight: 10407.907,\n    },\n    {\n      id: \"268\",\n      sim_name: \"GEO\",\n      name: \"Georgia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48754.57507,\n      weight: 158741.3575,\n    },\n    {\n      id: \"270\",\n      sim_name: \"GMB\",\n      name: \"Gambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 38.193,\n      weight: 24.45,\n    },\n    {\n      id: \"275\",\n      sim_name: \"PSE\",\n      name: \"State of Palestine\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16057.14949,\n      weight: 13745.84557,\n    },\n    {\n      id: \"276\",\n      sim_name: \"DEU\",\n      name: \"Germany\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4635549.458,\n      weight: 12647922.94,\n    },\n    {\n      id: \"288\",\n      sim_name: \"GHA\",\n      name: \"Ghana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8210.66114,\n      weight: 28560.44817,\n    },\n    {\n      id: \"292\",\n      sim_name: \"GIB\",\n      name: \"Gibraltar\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 728.465,\n      weight: 809.623,\n    },\n    {\n      id: \"296\",\n      sim_name: \"KIR\",\n      name: \"Kiribati\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.052,\n      weight: 18.562,\n    },\n    {\n      id: \"300\",\n      sim_name: \"GRC\",\n      name: \"Greece\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 263693.016,\n      weight: 644312.8604,\n    },\n    {\n      id: \"304\",\n      sim_name: \"GRL\",\n      name: \"Greenland\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"308\",\n      sim_name: \"GRD\",\n      name: \"Grenada\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4657.914,\n      weight: 9335.526,\n    },\n    {\n      id: \"316\",\n      sim_name: \"GUM\",\n      name: \"Guam\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 527.033,\n      weight: 982.642,\n    },\n    {\n      id: \"320\",\n      sim_name: \"GTM\",\n      name: \"Guatemala\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 20968.96314,\n      weight: 22893.23335,\n    },\n    {\n      id: \"324\",\n      sim_name: \"GIN\",\n      name: \"Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2636.849,\n      weight: 7422.12,\n    },\n    {\n      id: \"328\",\n      sim_name: \"GUY\",\n      name: \"Guyana\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 334196.3131,\n      weight: 520437.64,\n    },\n    {\n      id: \"332\",\n      sim_name: \"HTI\",\n      name: \"Haiti\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5.134,\n      weight: 16.128,\n    },\n    {\n      id: \"340\",\n      sim_name: \"HND\",\n      name: \"Honduras\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22936.79385,\n      weight: 43129.60369,\n    },\n    {\n      id: \"348\",\n      sim_name: \"HUN\",\n      name: \"Hungary\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2015665.793,\n      weight: 6379394.988,\n    },\n    {\n      id: \"352\",\n      sim_name: \"ISL\",\n      name: \"Iceland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 891.513,\n      weight: 2118.828,\n    },\n    {\n      id: \"360\",\n      sim_name: \"IDN\",\n      name: \"Indonesia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 175738.8156,\n      weight: 544860.3789,\n    },\n    {\n      id: \"364\",\n      sim_name: \"IRN\",\n      name: \"Iran\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7978.124,\n      weight: 20473.686,\n    },\n    {\n      id: \"368\",\n      sim_name: \"IRQ\",\n      name: \"Iraq\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 253.845,\n      weight: 246.151,\n    },\n    {\n      id: \"372\",\n      sim_name: \"IRL\",\n      name: \"Ireland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 166058.1767,\n      weight: 476236.2048,\n    },\n    {\n      id: \"376\",\n      sim_name: \"ISR\",\n      name: \"Israel\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 197912.4336,\n      weight: 431193.8203,\n    },\n    {\n      id: \"381\",\n      sim_name: \"ITA\",\n      name: \"Italy\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1288077.184,\n      weight: 1887032.489,\n    },\n    {\n      id: \"384\",\n      sim_name: \"CIV\",\n      name: \"Cote d'Ivoire\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77750.0467,\n      weight: 254222.8878,\n    },\n    {\n      id: \"388\",\n      sim_name: \"JAM\",\n      name: \"Jamaica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6751.46461,\n      weight: 12484.22296,\n    },\n    {\n      id: \"392\",\n      sim_name: \"JPN\",\n      name: \"Japan\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 189561.3237,\n      weight: 359553.4615,\n    },\n    {\n      id: \"398\",\n      sim_name: \"KAZ\",\n      name: \"Kazakhstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2535465.094,\n      weight: 10562777.14,\n    },\n    {\n      id: \"400\",\n      sim_name: \"JOR\",\n      name: \"Jordan\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2022.699859,\n      weight: 1810.995193,\n    },\n    {\n      id: \"404\",\n      sim_name: \"KEN\",\n      name: \"Kenya\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31813.863,\n      weight: 84144.582,\n    },\n    {\n      id: \"414\",\n      sim_name: \"KWT\",\n      name: \"Kuwait\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28509.72,\n      weight: 41425.612,\n    },\n    {\n      id: \"417\",\n      sim_name: \"KGZ\",\n      name: \"Kyrgyzstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 344.2343218,\n      weight: 452.0188439,\n    },\n    {\n      id: \"418\",\n      sim_name: \"LAO\",\n      name: \"Lao PDR\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 58500.6357,\n      weight: 212304.4463,\n    },\n    {\n      id: \"422\",\n      sim_name: \"LBN\",\n      name: \"Lebanon\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16263.18003,\n      weight: 38974.77174,\n    },\n    {\n      id: \"426\",\n      sim_name: \"LSO\",\n      name: \"Lesotho\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 19865.12276,\n      weight: 54350.43934,\n    },\n    {\n      id: \"428\",\n      sim_name: \"LVA\",\n      name: \"Latvia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 516410.4254,\n      weight: 1643243.015,\n    },\n    {\n      id: \"430\",\n      sim_name: \"LBR\",\n      name: \"Liberia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.35,\n      weight: 53.471,\n    },\n    {\n      id: \"434\",\n      sim_name: \"LBY\",\n      name: \"Libya\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 634.239,\n      weight: 2102.142,\n    },\n    {\n      id: \"440\",\n      sim_name: \"LTU\",\n      name: \"Lithuania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 871039.5602,\n      weight: 2446114.811,\n    },\n    {\n      id: \"442\",\n      sim_name: \"LUX\",\n      name: \"Luxembourg\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68969.99793,\n      weight: 178380.981,\n    },\n    {\n      id: \"450\",\n      sim_name: \"MDG\",\n      name: \"Madagascar\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 950.8530206,\n      weight: 3780.89311,\n    },\n    {\n      id: \"454\",\n      sim_name: \"MWI\",\n      name: \"Malawi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11553.98159,\n      weight: 41269.33681,\n    },\n    {\n      id: \"458\",\n      sim_name: \"MYS\",\n      name: \"Malaysia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 99255.71471,\n      weight: 142965.3262,\n    },\n    {\n      id: \"462\",\n      sim_name: \"MDV\",\n      name: \"Maldives\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.448,\n      weight: 14.6,\n    },\n    {\n      id: \"466\",\n      sim_name: \"MLI\",\n      name: \"Mali\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3143.270747,\n      weight: 11121.96188,\n    },\n    {\n      id: \"470\",\n      sim_name: \"MLT\",\n      name: \"Malta\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 35991.55686,\n      weight: 94799.54871,\n    },\n    {\n      id: \"478\",\n      sim_name: \"MRT\",\n      name: \"Mauritania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 292.538,\n      weight: 627.637,\n    },\n    {\n      id: \"480\",\n      sim_name: \"MUS\",\n      name: \"Mauritius\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17602.67917,\n      weight: 36755.35938,\n    },\n    {\n      id: \"484\",\n      sim_name: \"MEX\",\n      name: \"Mexico\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 571803.2432,\n      weight: 1234860.795,\n    },\n    {\n      id: \"496\",\n      sim_name: \"MNG\",\n      name: \"Mongolia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1328.368,\n      weight: 10672.694,\n    },\n    {\n      id: \"498\",\n      sim_name: \"MDA\",\n      name: \"Moldova\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 59072.0085,\n      weight: 188178.1824,\n    },\n    {\n      id: \"499\",\n      sim_name: \"MNE\",\n      name: \"Montenegro\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2444.455322,\n      weight: 6125.451,\n    },\n    {\n      id: \"504\",\n      sim_name: \"MAR\",\n      name: \"Morocco\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 86884.06321,\n      weight: 161631.8094,\n    },\n    {\n      id: \"508\",\n      sim_name: \"MOZ\",\n      name: \"Mozambique\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68388.81722,\n      weight: 146520.864,\n    },\n    {\n      id: \"512\",\n      sim_name: \"OMN\",\n      name: \"Oman\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 55530.66234,\n      weight: 88434.23327,\n    },\n    {\n      id: \"516\",\n      sim_name: \"NAM\",\n      name: \"Namibia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5168.27047,\n      weight: 7877.053106,\n    },\n    {\n      id: \"524\",\n      sim_name: \"NPL\",\n      name: \"Nepal\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4032.41279,\n      weight: 17770.75769,\n    },\n    {\n      id: \"528\",\n      sim_name: \"NLD\",\n      name: \"Netherlands\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1424347.018,\n      weight: 3125730.04,\n    },\n    {\n      id: \"531\",\n      sim_name: \"CUW\",\n      name: \"Curacao\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 535.691,\n      weight: 2358.613,\n    },\n    {\n      id: \"533\",\n      sim_name: \"ABW\",\n      name: \"Aruba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178879.593,\n      weight: 560431.967,\n    },\n    {\n      id: \"540\",\n      sim_name: \"NCL\",\n      name: \"New Caledonia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 205.777282,\n      weight: 363.439991,\n    },\n    {\n      id: \"548\",\n      sim_name: \"VUT\",\n      name: \"Vanuatu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 160.463,\n      weight: 440.332,\n    },\n    {\n      id: \"554\",\n      sim_name: \"NZL\",\n      name: \"New Zealand\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 33994.85867,\n      weight: 35177.57975,\n    },\n    {\n      id: \"558\",\n      sim_name: \"NIC\",\n      name: \"Nicaragua\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 41294.65615,\n      weight: 85186.87824,\n    },\n    {\n      id: \"562\",\n      sim_name: \"NER\",\n      name: \"Niger\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31152.35763,\n      weight: 44518.07202,\n    },\n    {\n      id: \"566\",\n      sim_name: \"NGA\",\n      name: \"Nigeria\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 323839.5301,\n      weight: 192057.843,\n    },\n    {\n      id: \"579\",\n      sim_name: \"NOR\",\n      name: \"Norway\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2382.344541,\n      weight: 2488.51136,\n    },\n    {\n      id: \"580\",\n      sim_name: \"MNP\",\n      name: \"N. Mariana Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.144,\n      weight: 1.864,\n    },\n    {\n      id: \"581\",\n      sim_name: \"UMI\",\n      name: \"United States Minor Outlying Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.008,\n      weight: 21,\n    },\n    {\n      id: \"585\",\n      sim_name: \"PLW\",\n      name: \"Palau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2.151,\n      weight: 0.22,\n    },\n    {\n      id: \"586\",\n      sim_name: \"PAK\",\n      name: \"Pakistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2412673.261,\n      weight: 4864111.072,\n    },\n    {\n      id: \"591\",\n      sim_name: \"PAN\",\n      name: \"Panama\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10056.54107,\n      weight: 26993.1125,\n    },\n    {\n      id: \"598\",\n      sim_name: \"PNG\",\n      name: \"Papua New Guinea\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 319.374,\n      weight: 2210.48,\n    },\n    {\n      id: \"600\",\n      sim_name: \"PRY\",\n      name: \"Paraguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1009228.641,\n      weight: 3862696.891,\n    },\n    {\n      id: \"604\",\n      sim_name: \"PER\",\n      name: \"Peru\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 91326.10676,\n      weight: 128637.0767,\n    },\n    {\n      id: \"608\",\n      sim_name: \"PHL\",\n      name: \"Philippines\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12041.64316,\n      weight: 16205.94695,\n    },\n    {\n      id: \"616\",\n      sim_name: \"POL\",\n      name: \"Poland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1028089.751,\n      weight: 3186360.963,\n    },\n    {\n      id: \"620\",\n      sim_name: \"PRT\",\n      name: \"Portugal\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92543.15766,\n      weight: 192795.3179,\n    },\n    {\n      id: \"624\",\n      sim_name: \"GNB\",\n      name: \"Guinea-Bissau\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37.268,\n      weight: 135,\n    },\n    {\n      id: \"626\",\n      sim_name: \"TLS\",\n      name: \"Timor-Leste\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.551,\n      weight: 10.883,\n    },\n    {\n      id: \"634\",\n      sim_name: \"QAT\",\n      name: \"Qatar\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6936.324,\n      weight: 11122.252,\n    },\n    {\n      id: \"642\",\n      sim_name: \"ROU\",\n      name: \"Romania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1778677.092,\n      weight: 5301402.18,\n    },\n    {\n      id: \"643\",\n      sim_name: \"RUS\",\n      name: \"Russian Federation\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7440900.086,\n      weight: 23852343.49,\n    },\n    {\n      id: \"646\",\n      sim_name: \"RWA\",\n      name: \"Rwanda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37520.31393,\n      weight: 73367.60768,\n    },\n    {\n      id: \"659\",\n      sim_name: \"KNA\",\n      name: \"Saint Kitts and Nevis\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.062,\n      weight: 0.009,\n    },\n    {\n      id: \"662\",\n      sim_name: \"LCA\",\n      name: \"Saint Lucia\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"670\",\n      sim_name: \"VCT\",\n      name: \"Saint Vincent and the Grenadines\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16002.19104,\n      weight: 17977.52343,\n    },\n    {\n      id: \"674\",\n      sim_name: \"SMR\",\n      name: \"San Marino\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"682\",\n      sim_name: \"SAU\",\n      name: \"Saudi Arabia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92568.76043,\n      weight: 56036.2484,\n    },\n    {\n      id: \"686\",\n      sim_name: \"SEN\",\n      name: \"Senegal\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44740.28095,\n      weight: 98109.85876,\n    },\n    {\n      id: \"688\",\n      sim_name: \"SRB\",\n      name: \"Serbia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 907006.831,\n      weight: 3003936.426,\n    },\n    {\n      id: \"690\",\n      sim_name: \"SYC\",\n      name: \"Seychelles\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 387.548,\n      weight: 246.84,\n    },\n    {\n      id: \"694\",\n      sim_name: \"SLE\",\n      name: \"Sierra Leone\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 147.544,\n      weight: 705.466,\n    },\n    {\n      id: \"699\",\n      sim_name: \"IND\",\n      name: \"India\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 9062980.928,\n      weight: 19031680.14,\n    },\n    {\n      id: \"702\",\n      sim_name: \"SGP\",\n      name: \"Singapore\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 193120.3466,\n      weight: 470488.3668,\n    },\n    {\n      id: \"703\",\n      sim_name: \"SVK\",\n      name: \"Slovakia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 580789.4685,\n      weight: 1589777.797,\n    },\n    {\n      id: \"704\",\n      sim_name: \"VNM\",\n      name: \"Vietnam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3558044.517,\n      weight: 7381230.275,\n    },\n    {\n      id: \"705\",\n      sim_name: \"SVN\",\n      name: \"Slovenia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 75282.28683,\n      weight: 227283.1873,\n    },\n    {\n      id: \"706\",\n      sim_name: \"SOM\",\n      name: \"Somalia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 240.399,\n      weight: 1055,\n    },\n    {\n      id: \"710\",\n      sim_name: \"ZAF\",\n      name: \"South Africa\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 938907.5758,\n      weight: 2190384.881,\n    },\n    {\n      id: \"716\",\n      sim_name: \"ZWE\",\n      name: \"Zimbabwe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6067.581387,\n      weight: 21394.92603,\n    },\n    {\n      id: \"724\",\n      sim_name: \"ESP\",\n      name: \"Spain\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 906018.1944,\n      weight: 1602797.031,\n    },\n    {\n      id: \"729\",\n      sim_name: \"SDN\",\n      name: \"Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18327.14063,\n      weight: 66310.50556,\n    },\n    {\n      id: \"740\",\n      sim_name: \"SUR\",\n      name: \"Suriname\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73211.6794,\n      weight: 83933.84802,\n    },\n    {\n      id: \"748\",\n      sim_name: \"SWZ\",\n      name: \"Swaziland\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6674.46,\n      weight: 16386.136,\n    },\n    {\n      id: \"752\",\n      sim_name: \"SWE\",\n      name: \"Sweden\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 439154.313,\n      weight: 1207272.863,\n    },\n    {\n      id: \"757\",\n      sim_name: \"CHE\",\n      name: \"Switzerland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 492516.8323,\n      weight: 1581172.074,\n    },\n    {\n      id: \"760\",\n      sim_name: \"SYR\",\n      name: \"Syria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4169.742,\n      weight: 7890.447,\n    },\n    {\n      id: \"762\",\n      sim_name: \"TJK\",\n      name: \"Tajikistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 300.162,\n      weight: 712.396,\n    },\n    {\n      id: \"764\",\n      sim_name: \"THA\",\n      name: \"Thailand\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5003324.321,\n      weight: 6926962.31,\n    },\n    {\n      id: \"768\",\n      sim_name: \"TGO\",\n      name: \"Togo\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16809.12488,\n      weight: 43975.34784,\n    },\n    {\n      id: \"772\",\n      sim_name: \"TKL\",\n      name: \"Tokelau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1012.213,\n      weight: 1926.401,\n    },\n    {\n      id: \"776\",\n      sim_name: \"TON\",\n      name: \"Tonga\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.18,\n      weight: 0.011,\n    },\n    {\n      id: \"780\",\n      sim_name: \"TTO\",\n      name: \"Trinidad and Tobago\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5731.199288,\n      weight: 9463.821332,\n    },\n    {\n      id: \"784\",\n      sim_name: \"ARE\",\n      name: \"United Arab Emirates\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 442646.1236,\n      weight: 684603.6345,\n    },\n    {\n      id: \"788\",\n      sim_name: \"TUN\",\n      name: \"Tunisia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 202627.2087,\n      weight: 121296.0689,\n    },\n    {\n      id: \"792\",\n      sim_name: \"TUR\",\n      name: \"Turkey\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1205009.52,\n      weight: 2692733.392,\n    },\n    {\n      id: \"795\",\n      sim_name: \"TKM\",\n      name: \"Turkmenistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1020.566,\n      weight: 3442.938,\n    },\n    {\n      id: \"796\",\n      sim_name: \"TCA\",\n      name: \"Turks and Caicos Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1029.474,\n      weight: 2224.885,\n    },\n    {\n      id: \"800\",\n      sim_name: \"UGA\",\n      name: \"Uganda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 153220.9856,\n      weight: 467968.0664,\n    },\n    {\n      id: \"804\",\n      sim_name: \"UKR\",\n      name: \"Ukraine\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8444175.988,\n      weight: 29508635.03,\n    },\n    {\n      id: \"818\",\n      sim_name: \"EGY\",\n      name: \"Egypt\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178849.3005,\n      weight: 310332.3386,\n    },\n    {\n      id: \"826\",\n      sim_name: \"GBR\",\n      name: \"United Kingdom\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1224264.681,\n      weight: 3079070.328,\n    },\n    {\n      id: \"834\",\n      sim_name: \"TZA\",\n      name: \"Tanzania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 152688.2977,\n      weight: 493774.3125,\n    },\n    {\n      id: \"838\",\n      sim_name: \"\",\n      name: \"Free Zones\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1488.719,\n      weight: 4904.648,\n    },\n    {\n      id: \"842\",\n      sim_name: \"USA\",\n      name: \"United States\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23694720.38,\n      weight: 66623810.06,\n    },\n    {\n      id: \"854\",\n      sim_name: \"BFA\",\n      name: \"Burkina Faso\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3861.072093,\n      weight: 17132.42303,\n    },\n    {\n      id: \"858\",\n      sim_name: \"URY\",\n      name: \"Uruguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1550881.026,\n      weight: 4155101.445,\n    },\n    {\n      id: \"860\",\n      sim_name: \"UZB\",\n      name: \"Uzbekistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2094.579,\n      weight: 7229.088,\n    },\n    {\n      id: \"862\",\n      sim_name: \"VEN\",\n      name: \"Venezuela\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73.53,\n      weight: 91.675,\n    },\n    {\n      id: \"882\",\n      sim_name: \"WSM\",\n      name: \"Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.603,\n      weight: 6.415,\n    },\n    {\n      id: \"887\",\n      sim_name: \"YEM\",\n      name: \"Yemen\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48184.79726,\n      weight: 245917.1867,\n    },\n    {\n      id: \"894\",\n      sim_name: \"ZMB\",\n      name: \"Zambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 470664.7641,\n      weight: 863829.2506,\n    },\n    {\n      id: \"86\",\n      sim_name: \"IOT\",\n      name: \"British Indian Ocean Territory\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 36.802,\n      weight: 21.33,\n    },\n    {\n      id: \"136\",\n      sim_name: \"CYM\",\n      name: \"Cayman Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"148\",\n      sim_name: \"TCD\",\n      name: \"Chad\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 24.335,\n      weight: 103.232,\n    },\n    {\n      id: \"166\",\n      sim_name: \"CCK\",\n      name: \"Cocos Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 2.417,\n      weight: 2,\n    },\n    {\n      id: \"174\",\n      sim_name: \"COM\",\n      name: \"Comoros\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 19,\n      weight: 21,\n    },\n    {\n      id: \"226\",\n      sim_name: \"GNQ\",\n      name: \"Equatorial Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"232\",\n      sim_name: \"ERI\",\n      name: \"Eritrea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"238\",\n      sim_name: \"FLK\",\n      name: \"Falkland Isds (Malvinas)\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 177.295,\n      weight: 47.1,\n    },\n    {\n      id: \"258\",\n      sim_name: \"PYF\",\n      name: \"French Polynesia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 1.65,\n      weight: 0.6,\n    },\n    {\n      id: \"534\",\n      sim_name: \"SXM\",\n      name: \"Sint Maarten (Dutch part)\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"584\",\n      sim_name: \"MHL\",\n      name: \"Marshall Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 47.581,\n      weight: 26.942,\n    },\n    {\n      id: \"612\",\n      sim_name: \"PCN\",\n      name: \"Pitcairn\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 95.892,\n      weight: 265,\n    },\n    {\n      id: \"728\",\n      sim_name: \"SSD\",\n      name: \"South Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"798\",\n      sim_name: \"TUV\",\n      name: \"Tuvalu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"184\",\n      sim_name: \"COK\",\n      name: \"Cook Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"654\",\n      sim_name: \"SHN\",\n      name: \"Saint Helena\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"660\",\n      sim_name: \"AIA\",\n      name: \"Anguilla\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"678\",\n      sim_name: \"STP\",\n      name: \"Sao Tome and Principe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 198.633,\n      weight: 350,\n    },\n    {\n      id: \"837\",\n      sim_name: \"\",\n      name: \"Bunkers\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"732\",\n      sim_name: \"ESH\",\n      name: \"Western Sahara\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2015,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"666\",\n      sim_name: \"SPM\",\n      name: \"Saint Pierre and Miquelon\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2016,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"162\",\n      sim_name: \"CXR\",\n      name: \"Christmas Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 131.818,\n      weight: 99.95,\n    },\n    {\n      id: \"336\",\n      sim_name: \"VAT\",\n      name: \"Holy See\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 24.492,\n      weight: 42.805,\n    },\n    {\n      id: \"520\",\n      sim_name: \"NRU\",\n      name: \"Nauru\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 496.386,\n      weight: 457.721,\n    },\n    {\n      id: \"535\",\n      sim_name: \"BES\",\n      name: \"Bonaire\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 326.45,\n      weight: 551.554,\n    },\n  ],\n  edges: [\n    {\n      eid: \"e16\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.049\",\n      weight: \"11.52\",\n      embodiedLand: \"4.765\",\n      embodiedWater: \"348.756\",\n    },\n    {\n      eid: \"e17\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.306\",\n      weight: \"64.74\",\n      embodiedLand: \"37.716\",\n      embodiedWater: \"726.512\",\n    },\n    {\n      eid: \"e18\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"94.052\",\n      weight: \"230.588\",\n      embodiedLand: \"141.564\",\n      embodiedWater: \"1851.16\",\n    },\n    {\n      eid: \"e19\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"13.068\",\n      weight: \"65.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e20\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"34.399\",\n      weight: \"171.996\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e21\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e22\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.812\",\n      weight: \"4.061\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e43\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e44\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e45\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.875\",\n      weight: \"1.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e48\",\n      source: \"10\",\n      sourceSimName: \"ATA\",\n      sourceRegion: \"Antarctica\",\n      sourceName: \"Other\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.837\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e85\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.886\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e86\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"23.9136184\",\n      weight: \"40.2929249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e88\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e89\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.9393726\",\n      weight: \"1.75517982\",\n      embodiedLand: \"0.38365313\",\n      embodiedWater: \"17.7067202\",\n    },\n    {\n      eid: \"e90\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e91\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e92\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.249\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e93\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e103\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e104\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e105\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e115\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e116\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"128.652\",\n      weight: \"96\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e117\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5.117\",\n      weight: \"26.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e118\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e119\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"798.871\",\n      weight: \"4322.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e128\",\n      source: \"24\",\n      sourceSimName: \"AGO\",\n      sourceRegion: \"Angola\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.401\",\n      weight: \"0.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e155\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.91\",\n      weight: \"1.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e156\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"177.885\",\n      weight: \"967.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e157\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e158\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"51.175\",\n      weight: \"76.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e159\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e160\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2456.668\",\n      weight: \"2481.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e182\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.356\",\n      weight: \"27.2\",\n      embodiedLand: \"13.377\",\n      embodiedWater: \"156.237\",\n    },\n    {\n      eid: \"e183\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.344\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e185\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"108.397\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e186\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.814\",\n      weight: \"2.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e187\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.044\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e188\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"5.8\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e351\",\n      source: \"32\",\n      sourceSimName: \"ARG\",\n      sourceRegion: \"Argentina\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.29\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e494\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"25.78\",\n      weight: \"206.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e495\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.036\",\n      weight: \"18.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e496\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.503\",\n      weight: \"101.04\",\n      embodiedLand: \"41.936\",\n      embodiedWater: \"35.869\",\n    },\n    {\n      eid: \"e497\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.141\",\n      weight: \"0.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e498\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e499\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e615\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.335\",\n      weight: \"1.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e616\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.006\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.109\",\n    },\n    {\n      eid: \"e617\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.018\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.043\",\n    },\n    {\n      eid: \"e618\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.37\",\n      weight: \"0.2\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e619\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"147.228\",\n      weight: \"490.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e620\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.761\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e621\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.19\",\n      weight: \"1.625\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e622\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e635\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e636\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"55.7439049\",\n      weight: \"55.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e637\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e638\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e694\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e696\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e697\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.929\",\n      weight: \"7.4\",\n      embodiedLand: \"2.029\",\n      embodiedWater: \"95.282\",\n    },\n    {\n      eid: \"e698\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.248\",\n      weight: \"1.862\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"18.661\",\n    },\n    {\n      eid: \"e699\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e700\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"136\",\n      targetSimName: \"CYM\",\n      targetName: \"Cayman Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e701\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.067\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e702\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"124.768\",\n      weight: \"92.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e754\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e755\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.969\",\n      weight: \"1.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e756\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.12\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e757\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.138\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e758\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.494\",\n      weight: \"0.915\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e776\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e777\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.47\",\n      weight: \"30.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e778\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"795\",\n      targetSimName: \"TKM\",\n      targetName: \"Turkmenistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"8.71\",\n      weight: \"1.675\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e798\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e799\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e800\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e801\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e802\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e803\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.199\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e804\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e805\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e990\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.472\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e992\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.178\",\n      weight: \"0.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e993\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"626\",\n      targetSimName: \"TLS\",\n      targetName: \"Timor-Leste\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.32\",\n      weight: \"357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e998\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.135\",\n      weight: \"42\",\n      embodiedLand: \"\",\n      embodiedWater: \"43.89\",\n    },\n    {\n      eid: \"e999\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"78.825\",\n      weight: \"212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1008\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.302\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1009\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.708\",\n      weight: \"25.193\",\n      embodiedLand: \"8.687\",\n      embodiedWater: \"31.29\",\n    },\n    {\n      eid: \"e1010\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.024\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1095\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.5\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1097\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.14\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1098\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1099\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.249\",\n      weight: \"0.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1100\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"40.776\",\n      weight: \"17.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1101\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.83\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1102\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"376.317\",\n      weight: \"60.619\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1103\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.19096077\",\n      weight: \"5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1104\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.406\",\n      weight: \"0.043\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1105\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.287\",\n      weight: \"2.911\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1106\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"30.2\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1107\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.4\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1108\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1109\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.683\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1141\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.132\",\n      weight: \"0.13\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"0.087\",\n    },\n    {\n      eid: \"e1142\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.356\",\n      weight: \"0.38\",\n      embodiedLand: \"0.09\",\n      embodiedWater: \"0.274\",\n    },\n    {\n      eid: \"e1143\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"111.882952\",\n      weight: \"50.4723321\",\n      embodiedLand: \"14.3646986\",\n      embodiedWater: \"12.7187331\",\n    },\n    {\n      eid: \"e1144\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1145\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1146\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1147\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.501\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1164\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1165\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1319\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"700.563\",\n      weight: \"3567.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1320\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.279294\",\n      weight: \"36.0515982\",\n      embodiedLand: \"12.9758444\",\n      embodiedWater: \"467.733115\",\n    },\n    {\n      eid: \"e1321\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1322\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"80.401\",\n      weight: \"267\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1323\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.084\",\n      weight: \"0.743\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1324\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"41.263\",\n      weight: \"73.557\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1325\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.673\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1326\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1350\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1351\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1352\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.033\",\n      weight: \"0.176\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1353\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.767\",\n      weight: \"2.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1354\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"34.953\",\n      weight: \"152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1356\",\n      source: \"86\",\n      sourceSimName: \"IOT\",\n      sourceRegion: \"British Indian Ocean Territory\",\n      sourceName: \"Oceania\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1361\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.167\",\n      weight: \"42.315\",\n      embodiedLand: \"3.486\",\n      embodiedWater: \"5.332\",\n    },\n    {\n      eid: \"e1362\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1377\",\n      source: \"92\",\n      sourceSimName: \"VGB\",\n      sourceRegion: \"British Virgin Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"101.43\",\n      weight: \"490\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1387\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1388\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1389\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38.441\",\n      weight: \"44.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1390\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.04\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1483\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24858.849\",\n      weight: \"99000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1484\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"4.755\",\n      weight: \"1.934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1485\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"93.704\",\n      weight: \"126.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1486\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"10.413\",\n      weight: \"27.25\",\n      embodiedLand: \"24.418\",\n      embodiedWater: \"8.965\",\n    },\n    {\n      eid: \"e1487\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17703.297\",\n      weight: \"77309.781\",\n      embodiedLand: \"18435.802\",\n      embodiedWater: \"20873.641\",\n    },\n    {\n      eid: \"e1489\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"18.8800973\",\n      weight: \"86.0444724\",\n      embodiedLand: \"30.7293419\",\n      embodiedWater: \"1.7204033\",\n    },\n    {\n      eid: \"e1490\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"160.110577\",\n      weight: \"483.392365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1491\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7432.909\",\n      weight: \"38483.49\",\n      embodiedLand: \"9381.188\",\n      embodiedWater: \"11121.729\",\n    },\n    {\n      eid: \"e1493\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"189.513\",\n      weight: \"314\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1494\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.029\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1495\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"12.528\",\n      weight: \"0.77\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1496\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1497\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5189.99451\",\n      weight: \"28567.1783\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1498\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14084.1964\",\n      weight: \"76915.5622\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1499\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"692.331\",\n      weight: \"4066.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1500\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"60.703\",\n      weight: \"339.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1609\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.25\",\n      weight: \"12.219\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1610\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"112\",\n      targetSimName: \"BLR\",\n      targetName: \"Belarus\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"25.7\",\n      weight: \"75\",\n      embodiedLand: \"25.54\",\n      embodiedWater: \"174.3\",\n    },\n    {\n      eid: \"e1611\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"108.75\",\n      weight: \"129.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1612\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1613\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"43.5\",\n      weight: \"52.27\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1614\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"104.4\",\n      weight: \"125.448\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1615\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"598\",\n      targetSimName: \"PNG\",\n      targetName: \"Papua New Guinea\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.75\",\n      weight: \"54.372\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1616\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1617\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1775\",\n      weight: \"1500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1619\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"103.45\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1620\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"137.5\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1621\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1622\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"44.4\",\n      weight: \"120\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1633\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.606\",\n      weight: \"0.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1634\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.844\",\n      weight: \"0.74\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1635\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"53.041\",\n      weight: \"90\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1636\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.492\",\n      weight: \"1.142\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1637\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.021\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1679\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1680\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.1\",\n      weight: \"21.96\",\n      embodiedLand: \"22.086\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1681\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"120.2641915\",\n      weight: \"207.744065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1682\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.2\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1683\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"44.5214625\",\n      weight: \"83.785883\",\n      embodiedLand: \"26.1168536\",\n      embodiedWater: \"7.20580295\",\n    },\n    {\n      eid: \"e1684\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.083\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1685\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"991.896\",\n      weight: \"5092.85\",\n      embodiedLand: \"1019.042\",\n      embodiedWater: \"6610.519\",\n    },\n    {\n      eid: \"e1686\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"165.472676\",\n      weight: \"53.1172551\",\n      embodiedLand: \"17.4316463\",\n      embodiedWater: \"2398.72164\",\n    },\n    {\n      eid: \"e1687\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.31077251\",\n      weight: \"2.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1688\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"27.5722272\",\n      weight: \"53.4685049\",\n      embodiedLand: \"19.9639795\",\n      embodiedWater: \"4.70535121\",\n    },\n    {\n      eid: \"e1689\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.773\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1690\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"10.6\",\n      weight: \"26.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1691\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"482.1\",\n      weight: \"2008.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1693\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.9\",\n      weight: \"24.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1694\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"27\",\n      weight: \"72.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1695\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.9\",\n      weight: \"43.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1696\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1.4152175\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1697\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"15.216\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1792\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.058\",\n      weight: \"1.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1793\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"19.9307517\",\n      weight: \"54.9268674\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1795\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"722.843\",\n      weight: \"2000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1796\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.05\",\n      embodiedLand: \"0.0215\",\n      embodiedWater: \"0.279\",\n    },\n    {\n      eid: \"e1797\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.5893875\",\n      weight: \"46\",\n      embodiedLand: \"22.382\",\n      embodiedWater: \"419.888\",\n    },\n    {\n      eid: \"e1798\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1799\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.49\",\n      weight: \"24.993\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1800\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"35.6075332\",\n      weight: \"62.4991805\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1801\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"87.223\",\n      weight: \"190\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1802\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"123.708\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1803\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"49.454\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1804\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.332\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1830\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1831\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1832\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.398\",\n      weight: \"0.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1833\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.09\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1834\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.031\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1835\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.069\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1836\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2006\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2007\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.816\",\n      weight: \"27.5\",\n      embodiedLand: \"11.52\",\n      embodiedWater: \"91.465\",\n    },\n    {\n      eid: \"e2008\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.942\",\n      weight: \"5.224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2009\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1549.864\",\n      weight: \"6461\",\n      embodiedLand: \"2292.263\",\n      embodiedWater: \"24648.715\",\n    },\n    {\n      eid: \"e2010\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.366\",\n      weight: \"29.392\",\n      embodiedLand: \"4.087\",\n      embodiedWater: \"203.275\",\n    },\n    {\n      eid: \"e2011\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.105\",\n      weight: \"0.346\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2012\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.087\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2013\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10.485\",\n      weight: \"23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2014\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"71.847\",\n      weight: \"90.718\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2015\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.063\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2026\",\n      source: \"136\",\n      sourceSimName: \"CYM\",\n      sourceRegion: \"Cayman Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2028\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"256.296\",\n      weight: \"584\",\n      embodiedLand: \"388.652\",\n      embodiedWater: \"3227.184\",\n    },\n    {\n      eid: \"e2029\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2030\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2122\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.617\",\n      weight: \"0.4\",\n      embodiedLand: \"0.171\",\n      embodiedWater: \"9.947\",\n    },\n    {\n      eid: \"e2123\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.022\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.074\",\n    },\n    {\n      eid: \"e2124\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.465\",\n      weight: \"4\",\n      embodiedLand: \"1.462\",\n      embodiedWater: \"24.56\",\n    },\n    {\n      eid: \"e2125\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"674.364\",\n      weight: \"998.75\",\n      embodiedLand: \"394.423\",\n      embodiedWater: \"8358.539\",\n    },\n    {\n      eid: \"e2126\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.169684\",\n      weight: \"10\",\n      embodiedLand: \"4.832\",\n      embodiedWater: \"129.36\",\n    },\n    {\n      eid: \"e2127\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.6929921\",\n      weight: \"0.39911438\",\n      embodiedLand: \"0.02313548\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2128\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2129\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"956.722\",\n      weight: \"1340\",\n      embodiedLand: \"468.637\",\n      embodiedWater: \"10142.46\",\n    },\n    {\n      eid: \"e2130\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.129\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2131\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2581.403\",\n      weight: \"1630\",\n      embodiedLand: \"593.987\",\n      embodiedWater: \"13326.88\",\n    },\n    {\n      eid: \"e2132\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01799708\",\n      weight: \"0.01963527\",\n      embodiedLand: \"0.00589058\",\n      embodiedWater: \"0.15119156\",\n    },\n    {\n      eid: \"e2133\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.055\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2135\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.797\",\n      weight: \"0.084\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2139\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2140\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.114\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2141\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2142\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2143\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.421\",\n      weight: \"2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2227\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.466\",\n      weight: \"0.804\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2228\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.644\",\n      weight: \"1\",\n      embodiedLand: \"0.016\",\n      embodiedWater: \"14.459\",\n    },\n    {\n      eid: \"e2229\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2230\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"32.659\",\n      weight: \"18.144\",\n      embodiedLand: \"2.013\",\n      embodiedWater: \"25.347\",\n    },\n    {\n      eid: \"e2231\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"50.962\",\n      weight: \"29.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2232\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.158\",\n      weight: \"0.366\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2233\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.57\",\n      weight: \"0.216\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2234\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.176\",\n      weight: \"3.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2235\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"13.32\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2236\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2237\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.426\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2238\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2239\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.899\",\n      weight: \"0.564\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2240\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2241\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2433\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"63.059\",\n      weight: \"215.408\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2434\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.045\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2435\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"9502.75\",\n      weight: \"30250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2436\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.317\",\n      weight: \"40.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2439\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2440\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2507\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2508\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.945\",\n      weight: \"5.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2509\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2510\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"1.68\",\n      embodiedLand: \"0.624\",\n      embodiedWater: \"11.764\",\n    },\n    {\n      eid: \"e2511\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.99707857\",\n      weight: \"0.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2513\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2514\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02360264\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2515\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.014\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2516\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.661\",\n      weight: \"0.55\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2517\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"24.4083904\",\n      weight: \"21.9972541\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2518\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2519\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"29.328\",\n      weight: \"9.319\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2520\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2521\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"28.266\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2522\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.253\",\n      weight: \"0.239\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2526\",\n      source: \"174\",\n      sourceSimName: \"COM\",\n      sourceRegion: \"Comoros\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"64.83\",\n      weight: \"89.969\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2562\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.003\",\n    },\n    {\n      eid: \"e2563\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.068\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2564\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"770.502\",\n      weight: \"4498.68\",\n      embodiedLand: \"242.589\",\n      embodiedWater: \"7341.846\",\n    },\n    {\n      eid: \"e2565\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2566\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"17.311\",\n      weight: \"18.402\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2630\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4009.71895\",\n      weight: \"10426.471\",\n      embodiedLand: \"4547.15483\",\n      embodiedWater: \"417.058952\",\n    },\n    {\n      eid: \"e2631\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.162\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"0.163\",\n    },\n    {\n      eid: \"e2632\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.009\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e2634\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.4225\",\n      weight: \"1.3\",\n      embodiedLand: \"0.385\",\n      embodiedWater: \"0.016\",\n    },\n    {\n      eid: \"e2635\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2636\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"36.137\",\n      weight: \"68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2637\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.947\",\n      weight: \"0.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2639\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"356.137\",\n      weight: \"742.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2640\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.272\",\n      weight: \"25.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2641\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"195.135725\",\n      weight: \"405.023926\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2642\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1927.978\",\n      weight: \"5003.87\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2653\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.015\",\n      weight: \"22\",\n      embodiedLand: \"1.121\",\n      embodiedWater: \"30.294\",\n    },\n    {\n      eid: \"e2654\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2655\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2710\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.025\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2711\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2712\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"275.094068\",\n      weight: \"518.04557\",\n      embodiedLand: \"852.454555\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2713\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.123\",\n      weight: \"0.515\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2714\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.749\",\n      weight: \"0.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2815\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.19775118\",\n      weight: \"19.4429394\",\n      embodiedLand: \"1.01453375\",\n      embodiedWater: \"6.43614933\",\n    },\n    {\n      eid: \"e2816\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"47.058\",\n      weight: \"31.738\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2817\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"465.089207\",\n      weight: \"1056.18955\",\n      embodiedLand: \"59.5149034\",\n      embodiedWater: \"349.59874\",\n    },\n    {\n      eid: \"e2818\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.53\",\n      weight: \"0.296\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2819\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2820\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1233.57708\",\n      weight: \"2500\",\n      embodiedLand: \"273.915\",\n      embodiedWater: \"302.5\",\n    },\n    {\n      eid: \"e2821\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.512\",\n      weight: \"0.287\",\n      embodiedLand: \"1.023\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2822\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.392\",\n      weight: \"50.1\",\n      embodiedLand: \"8.127\",\n      embodiedWater: \"0.601\",\n    },\n    {\n      eid: \"e2823\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.59\",\n      weight: \"1.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2824\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"53.08\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2825\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.409\",\n      weight: \"7.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2826\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2827\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12283.216\",\n      weight: \"51375.101\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2828\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6823.806\",\n      weight: \"28549.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2852\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.041\",\n      weight: \"0.125\",\n      embodiedLand: \"0.007\",\n      embodiedWater: \"1.054\",\n    },\n    {\n      eid: \"e2853\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.541\",\n      weight: \"1\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.369\",\n    },\n    {\n      eid: \"e2854\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.017\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.129\",\n    },\n    {\n      eid: \"e2855\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.19\",\n      weight: \"17.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2856\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.874\",\n      weight: \"0.506\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2857\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"17.743\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2858\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"15.773\",\n      weight: \"220\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2992\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17845.867\",\n      weight: \"88000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2994\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"21.161\",\n      weight: \"46\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2995\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2996\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2997\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.023\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.191\",\n    },\n    {\n      eid: \"e2999\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.679\",\n      weight: \"14\",\n      embodiedLand: \"3.32\",\n      embodiedWater: \"25.83\",\n    },\n    {\n      eid: \"e3000\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.035\",\n      weight: \"0.031\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.435\",\n    },\n    {\n      eid: \"e3001\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.53\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3002\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.629\",\n      weight: \"272.52\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3003\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3005\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3006\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3007\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.206\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3008\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"22.102\",\n      weight: \"41.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3009\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3020\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.813\",\n      weight: \"1.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3021\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2016\",\n      value: \"6.079\",\n      weight: \"9.869\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3022\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3073\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"62.9969656\",\n      weight: \"133.149681\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3074\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3075\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3076\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.744\",\n      weight: \"63.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3077\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3078\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.752\",\n      weight: \"0.558\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3080\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3081\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3082\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.258\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3129\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.25\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3130\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"655.12\",\n      weight: \"117.45\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3131\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.508\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3132\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.061\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3133\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3134\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.20254593\",\n      weight: \"0.0630884\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3136\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3137\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3151\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e3152\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.36\",\n      weight: \"26.04\",\n      embodiedLand: \"4.462\",\n      embodiedWater: \"131.762\",\n    },\n    {\n      eid: \"e3153\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.231\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3154\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.36\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3155\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3156\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25\",\n      weight: \"0.076\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3157\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.651\",\n      weight: \"0.464\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3158\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.55\",\n      weight: \"1.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3160\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3161\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3214\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.757\",\n      weight: \"0.78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3215\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3216\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.24744121\",\n      weight: \"0.12643068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3217\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.1\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"0.881\",\n    },\n    {\n      eid: \"e3218\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.045\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3219\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3220\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.025\",\n      embodiedLand: \"0.073\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3221\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.015\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3223\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.388\",\n      weight: \"0.705\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"0.492\",\n    },\n    {\n      eid: \"e3224\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"17.374\",\n      weight: \"40\",\n      embodiedLand: \"16.921\",\n      embodiedWater: \"2.24\",\n    },\n    {\n      eid: \"e3225\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.641\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3226\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3231\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3232\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3283\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.169\",\n      weight: \"40.581\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3284\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"12273.129\",\n      weight: \"69000\",\n      embodiedLand: \"19376.402\",\n      embodiedWater: \"3036\",\n    },\n    {\n      eid: \"e3285\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8159.47956\",\n      weight: \"44000\",\n      embodiedLand: \"12365.057\",\n      embodiedWater: \"308\",\n    },\n    {\n      eid: \"e3286\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5697.635\",\n      weight: \"31498.19\",\n      embodiedLand: \"8131.804\",\n      embodiedWater: \"10992.868\",\n    },\n    {\n      eid: \"e3287\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"19.337\",\n      weight: \"53.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3288\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6239.34\",\n      weight: \"22384.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3289\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3166.555\",\n      weight: \"15864\",\n      embodiedLand: \"4286.655\",\n      embodiedWater: \"5393.76\",\n    },\n    {\n      eid: \"e3290\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.019\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e3291\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.176\",\n      weight: \"2.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3292\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12.414\",\n      weight: \"49.122\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3293\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3294\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"629.386\",\n      weight: \"2596.853\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3295\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3296\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"31.581\",\n      weight: \"76.353\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3297\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4160.65711\",\n      weight: \"25476.5045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3338\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.068\",\n      weight: \"88.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3339\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3435\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"481.381304\",\n      weight: \"1599.203\",\n      embodiedLand: \"471.659\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3436\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.092\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3437\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3438\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.086\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3439\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.48\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3440\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.018\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e3441\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.029\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3442\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.849\",\n      weight: \"36.603\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3443\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.071\",\n      weight: \"0.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3444\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.572\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3445\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.1\",\n      weight: \"0.929\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3446\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.762\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3447\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3448\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"1.191\",\n      weight: \"0.475\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3449\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.182\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3640\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3641\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3643\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3644\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"796\",\n      targetSimName: \"TCA\",\n      targetName: \"Turks and Caicos Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3646\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.303\",\n      weight: \"0.161\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.66\",\n    },\n    {\n      eid: \"e3647\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.76\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3661\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1697.791\",\n      weight: \"4715.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3662\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3663\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.466\",\n      weight: \"5.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3674\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3675\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3676\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3677\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3707\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.048\",\n      weight: \"0.038\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3708\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4.8\",\n      weight: \"24\",\n      embodiedLand: \"18.872\",\n      embodiedWater: \"2.136\",\n    },\n    {\n      eid: \"e3709\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3710\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.678\",\n      weight: \"38.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3711\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.252\",\n      weight: \"0.455\",\n      embodiedLand: \"0.074\",\n      embodiedWater: \"1.176\",\n    },\n    {\n      eid: \"e3712\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27\",\n      weight: \"4.86\",\n      embodiedLand: \"2.151\",\n      embodiedWater: \"5.56\",\n    },\n    {\n      eid: \"e3713\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.61599203\",\n      weight: \"1.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3714\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"23.6\",\n      weight: \"47.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3715\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.179\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3716\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"9.5\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3718\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.00114478\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3719\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.278\",\n      weight: \"19.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3720\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3734\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8.156\",\n      weight: \"9\",\n      embodiedLand: \"0.265\",\n      embodiedWater: \"11.43\",\n    },\n    {\n      eid: \"e3735\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3766\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"1.468\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3767\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"6.887\",\n      weight: \"10.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3769\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.621\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3770\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.922\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3771\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.035\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3963\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.908\",\n      weight: \"23\",\n      embodiedLand: \"6.114\",\n      embodiedWater: \"87.285\",\n    },\n    {\n      eid: \"e3964\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3965\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.0348425\",\n      weight: \"26\",\n      embodiedLand: \"4.29\",\n      embodiedWater: \"0.234\",\n    },\n    {\n      eid: \"e3966\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3967\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"612\",\n      targetSimName: \"PCN\",\n      targetName: \"Pitcairn\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3968\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.096\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4026\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4028\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"427.155\",\n      weight: \"1504\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4029\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4034\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4035\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.999\",\n      weight: \"3.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4038\",\n      source: \"296\",\n      sourceSimName: \"KIR\",\n      sourceRegion: \"Kiribati\",\n      sourceName: \"Oceania\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.46\",\n      weight: \"0.327\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4130\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.592\",\n      weight: \"0.381\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4131\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.535\",\n      weight: \"0.685\",\n      embodiedLand: \"0.344\",\n      embodiedWater: \"2.925\",\n    },\n    {\n      eid: \"e4132\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.225\",\n      weight: \"0.51\",\n      embodiedLand: \"0.297\",\n      embodiedWater: \"0.907\",\n    },\n    {\n      eid: \"e4133\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4134\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.619\",\n      weight: \"0.9\",\n      embodiedLand: \"0.215\",\n      embodiedWater: \"12.695\",\n    },\n    {\n      eid: \"e4135\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.643\",\n      weight: \"0.811\",\n      embodiedLand: \"0.35\",\n      embodiedWater: \"22.782\",\n    },\n    {\n      eid: \"e4136\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9.296\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4139\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.194\",\n      weight: \"0.105\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4140\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4141\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.549\",\n      weight: \"0.33\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4144\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4145\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.094\",\n      weight: \"0.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4160\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4161\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.258\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4166\",\n      source: \"316\",\n      sourceSimName: \"GUM\",\n      sourceRegion: \"Guam\",\n      sourceName: \"Oceania\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.645\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4197\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.45\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4198\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4199\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4200\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.225\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4201\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.383\",\n      weight: \"0.959\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4222\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4223\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1121.1076\",\n      weight: \"9902.574\",\n      embodiedLand: \"74.073\",\n      embodiedWater: \"16091.683\",\n    },\n    {\n      eid: \"e4224\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"151.325\",\n      weight: \"781.716\",\n      embodiedLand: \"851.781\",\n      embodiedWater: \"8133.755\",\n    },\n    {\n      eid: \"e4225\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.702\",\n      weight: \"22.538\",\n      embodiedLand: \"26.147\",\n      embodiedWater: \"54.384\",\n    },\n    {\n      eid: \"e4226\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4227\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"514.56\",\n      weight: \"516\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4229\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4274\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.93\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4275\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"12.9452924\",\n      weight: \"80.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4276\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"79.617\",\n      weight: \"404.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4277\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"146.081\",\n      weight: \"186.97\",\n      embodiedLand: \"46.045\",\n      embodiedWater: \"1298.32\",\n    },\n    {\n      eid: \"e4278\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2751.76304\",\n      weight: \"3460.64811\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4279\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.957\",\n      weight: \"2.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4280\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4281\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"336\",\n      targetSimName: \"VAT\",\n      targetName: \"Holy See\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4282\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.016\",\n      weight: \"50.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4283\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.893\",\n      weight: \"24.705\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4284\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4285\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.422\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4298\",\n      source: \"332\",\n      sourceSimName: \"HTI\",\n      sourceRegion: \"Haiti\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4323\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"201.042\",\n      weight: \"323.82\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4324\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.24\",\n      weight: \"39.916\",\n      embodiedLand: \"24.266\",\n      embodiedWater: \"18.162\",\n    },\n    {\n      eid: \"e4326\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"47.6473533\",\n      weight: \"48.6243931\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4327\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4328\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.858\",\n      weight: \"8.732\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4329\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.64\",\n      weight: \"96.16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4428\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4429\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4430\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.109\",\n      weight: \"0.125\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4431\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"119.521\",\n      weight: \"420\",\n      embodiedLand: \"51.421\",\n      embodiedWater: \"660.66\",\n    },\n    {\n      eid: \"e4432\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"658.77\",\n      weight: \"2218.1\",\n      embodiedLand: \"206.877\",\n      embodiedWater: \"2437.692\",\n    },\n    {\n      eid: \"e4434\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"83.377\",\n      weight: \"273\",\n      embodiedLand: \"31.384\",\n      embodiedWater: \"559.377\",\n    },\n    {\n      eid: \"e4435\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.016\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e4436\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.865\",\n      weight: \"21\",\n      embodiedLand: \"2.303\",\n      embodiedWater: \"31.017\",\n    },\n    {\n      eid: \"e4437\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"13.347\",\n      weight: \"102.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4439\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"677.568524\",\n      weight: \"630.017434\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4461\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.403\",\n      weight: \"4.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4462\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"62.13\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4463\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4464\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4465\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4568\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.048\",\n      weight: \"120.8\",\n      embodiedLand: \"11.771\",\n      embodiedWater: \"164.409\",\n    },\n    {\n      eid: \"e4569\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.273\",\n      weight: \"67.74\",\n      embodiedLand: \"35.111\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4570\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.304\",\n      weight: \"0.144\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4571\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4572\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.065\",\n      weight: \"0.081\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"0.774\",\n    },\n    {\n      eid: \"e4573\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"64.711\",\n      weight: \"26.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4574\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"219\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4575\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.083\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4576\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.501\",\n      weight: \"0.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4577\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2424\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4578\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.756\",\n      weight: \"0.947\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4579\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"74.884\",\n      weight: \"270\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4581\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.437\",\n      weight: \"0.069\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4582\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.06\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4583\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.59\",\n      weight: \"0.745\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4584\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.473\",\n      weight: \"1.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4635\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4159.919\",\n      weight: \"14678.618\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4636\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.04\",\n      weight: \"0.15\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"2.752\",\n    },\n    {\n      eid: \"e4637\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.595\",\n      weight: \"6.84\",\n      embodiedLand: \"2.127\",\n      embodiedWater: \"193.278\",\n    },\n    {\n      eid: \"e4638\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"8.79\",\n      weight: \"43.87\",\n      embodiedLand: \"15.986\",\n      embodiedWater: \"396.322\",\n    },\n    {\n      eid: \"e4639\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.24\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4640\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.044\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4641\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4642\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.244\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4643\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"398.292\",\n      weight: \"821.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4644\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.079\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4645\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.62\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4646\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.157\",\n      weight: \"0.279\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4647\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.129\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4649\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4650\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.078\",\n      weight: \"1.118\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4661\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4662\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.843\",\n      weight: \"1.59\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4663\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"160.874\",\n      weight: \"36.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4664\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4731\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"159.042\",\n      weight: \"32.792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4732\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.867\",\n      weight: \"44.1\",\n      embodiedLand: \"6.096\",\n      embodiedWater: \"34.089\",\n    },\n    {\n      eid: \"e4733\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.516\",\n      weight: \"0.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4734\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"21.023\",\n      weight: \"42.5\",\n      embodiedLand: \"0.457\",\n      embodiedWater: \"48.195\",\n    },\n    {\n      eid: \"e4735\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.011\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4736\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"0.378\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4737\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.542\",\n      weight: \"0.94\",\n      embodiedLand: \"0.161\",\n      embodiedWater: \"0.968\",\n    },\n    {\n      eid: \"e4738\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.238\",\n      weight: \"2.262\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4739\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4740\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4742\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.468\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4743\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.066\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4744\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.695\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4745\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.132\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4824\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4825\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4826\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"134.901099\",\n      weight: \"54.1360357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4827\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1\",\n      weight: \"0.5\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"4.356\",\n    },\n    {\n      eid: \"e4828\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4829\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.005348\",\n      weight: \"27.7814111\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4830\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.071\",\n      weight: \"48\",\n      embodiedLand: \"2.36\",\n      embodiedWater: \"517.776\",\n    },\n    {\n      eid: \"e4831\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10\",\n      weight: \"7.385\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4832\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1\",\n      weight: \"2.895\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4833\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"121\",\n      weight: \"381.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4834\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.828\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4835\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2\",\n      weight: \"4.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5015\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.273\",\n      weight: \"1.5\",\n      embodiedLand: \"0.94\",\n      embodiedWater: \"5.117\",\n    },\n    {\n      eid: \"e5016\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"762\",\n      targetSimName: \"TJK\",\n      targetName: \"Tajikistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.747\",\n      weight: \"3.75\",\n      embodiedLand: \"1.24\",\n      embodiedWater: \"1.117\",\n    },\n    {\n      eid: \"e5017\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5018\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5019\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5065\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.837\",\n      weight: \"0.288\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5066\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.057\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5067\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.102\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5068\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"26.888\",\n      weight: \"155.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5104\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"819.786\",\n      weight: \"4674.18\",\n      embodiedLand: \"7.562\",\n      embodiedWater: \"5814.68\",\n    },\n    {\n      eid: \"e5105\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.202\",\n      weight: \"20.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5106\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.134\",\n      weight: \"0.159\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5107\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.186\",\n      weight: \"1.973\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5108\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5246\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.646\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5247\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.115\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5248\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1285.878\",\n      weight: \"3253\",\n      embodiedLand: \"695.174\",\n      embodiedWater: \"27878.21\",\n    },\n    {\n      eid: \"e5249\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.677\",\n      weight: \"2\",\n      embodiedLand: \"0.486\",\n      embodiedWater: \"17.53\",\n    },\n    {\n      eid: \"e5250\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5251\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.128\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5252\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.792\",\n      weight: \"1.676\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5253\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.33\",\n      weight: \"0.339\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5254\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1536.952\",\n      weight: \"2498.778\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5319\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.05\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5321\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5368\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.112\",\n      weight: \"6.518\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5369\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.631\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5370\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.879\",\n      weight: \"0.168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5371\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.34\",\n      weight: \"1.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5372\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5373\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5374\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.066\",\n      weight: \"0.649\",\n      embodiedLand: \"0.046\",\n      embodiedWater: \"1.955\",\n    },\n    {\n      eid: \"e5375\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.143\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5376\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15280.683\",\n      weight: \"52494.791\",\n      embodiedLand: \"49024.216\",\n      embodiedWater: \"2673717.19\",\n    },\n    {\n      eid: \"e5377\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.138\",\n      weight: \"0.053\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5378\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.011\",\n      weight: \"115\",\n      embodiedLand: \"4.942\",\n      embodiedWater: \"825.24\",\n    },\n    {\n      eid: \"e5379\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.825\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5380\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5381\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.946\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5382\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5383\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14.272\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5384\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5447\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.05\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"0.286\",\n    },\n    {\n      eid: \"e5448\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5449\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5450\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"75.807\",\n      weight: \"147.131\",\n      embodiedLand: \"88.514\",\n      embodiedWater: \"387.69\",\n    },\n    {\n      eid: \"e5451\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5452\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"21.654\",\n      weight: \"2.897\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5453\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5494\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.118\",\n      weight: \"3.342\",\n      embodiedLand: \"0.863\",\n      embodiedWater: \"4.802\",\n    },\n    {\n      eid: \"e5495\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.729\",\n    },\n    {\n      eid: \"e5496\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5497\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.364\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5498\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.66\",\n      weight: \"0.715\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"7.631\",\n    },\n    {\n      eid: \"e5499\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.079\",\n      weight: \"0.06\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e5500\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5501\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.392\",\n    },\n    {\n      eid: \"e5502\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.255\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5503\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.325\",\n      weight: \"0.708\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5504\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5505\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.309\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5506\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.636\",\n      weight: \"8.967\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5507\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.419\",\n      weight: \"1.356\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5508\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.096\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5524\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.494\",\n      weight: \"0.62\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"3.678\",\n    },\n    {\n      eid: \"e5525\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.088\",\n    },\n    {\n      eid: \"e5526\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"3\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5527\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.543\",\n      weight: \"47.935\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5528\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5529\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1391.017\",\n      weight: \"5169.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5568\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.4938257\",\n      weight: \"28.2050024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5569\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.444\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5570\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.04\",\n      embodiedLand: \"0.013\",\n      embodiedWater: \"0.105\",\n    },\n    {\n      eid: \"e5571\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"38.47\",\n      weight: \"46.226\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5573\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"25.024\",\n      weight: \"144.873\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5574\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.454\",\n      weight: \"5.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5680\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.433\",\n      weight: \"1.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5681\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5682\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.07\",\n      weight: \"0.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5683\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.736\",\n      weight: \"0.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5684\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5685\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.448\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5686\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.038\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5687\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.6\",\n      weight: \"2.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5688\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"2.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5689\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.46160548\",\n      weight: \"12.1968756\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5696\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"11.926\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5697\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.18\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5790\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"76.094\",\n      weight: \"231.535\",\n      embodiedLand: \"70.276\",\n      embodiedWater: \"42.371\",\n    },\n    {\n      eid: \"e5791\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.3954741\",\n      weight: \"17.634\",\n      embodiedLand: \"7.808\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5792\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"9.879\",\n      weight: \"16.669\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5793\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"108.18118\",\n      weight: \"282.748174\",\n      embodiedLand: \"120.980124\",\n      embodiedWater: \"113.947519\",\n    },\n    {\n      eid: \"e5794\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"55.429\",\n      weight: \"102\",\n      embodiedLand: \"50.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5795\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.519\",\n      weight: \"16.8\",\n      embodiedLand: \"5.346\",\n      embodiedWater: \"0.79\",\n    },\n    {\n      eid: \"e5796\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3040.717\",\n      weight: \"12000\",\n      embodiedLand: \"3410.976\",\n      embodiedWater: \"1416\",\n    },\n    {\n      eid: \"e5797\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.2\",\n      weight: \"22.5\",\n      embodiedLand: \"9.765\",\n      embodiedWater: \"4.14\",\n    },\n    {\n      eid: \"e5798\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5928.904\",\n      weight: \"27800\",\n      embodiedLand: \"8141.021\",\n      embodiedWater: \"5087.4\",\n    },\n    {\n      eid: \"e5799\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"12.5758647\",\n      weight: \"18.1209308\",\n      embodiedLand: \"9.21064206\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5800\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.085\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5801\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"126.649\",\n      weight: \"523.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5802\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e5803\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9979.327\",\n      weight: \"49080.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5804\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9773.51\",\n      weight: \"50317.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5805\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1120.625\",\n      weight: \"6464.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5806\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.55\",\n      weight: \"13.716\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5807\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"66.234\",\n      weight: \"130.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5808\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"59.9755096\",\n      weight: \"147.628533\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5809\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"7.622\",\n      weight: \"13.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5810\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"32.2000609\",\n      weight: \"184.508668\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5811\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3824.84552\",\n      weight: \"18150\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5812\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.014\",\n      weight: \"1.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5813\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"47.074\",\n      weight: \"169\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5814\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.9\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5823\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"72.763\",\n      weight: \"511.55\",\n      embodiedLand: \"1.752\",\n      embodiedWater: \"713.612\",\n    },\n    {\n      eid: \"e5824\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5860.639\",\n      weight: \"25633.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5825\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"43.94\",\n      weight: \"396.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5832\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5833\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.124\",\n    },\n    {\n      eid: \"e5834\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"278.215\",\n      weight: \"344.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5941\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"11.037\",\n      weight: \"21.99\",\n      embodiedLand: \"11.308\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5942\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"952.419598\",\n      weight: \"1777.69802\",\n      embodiedLand: \"536.005575\",\n      embodiedWater: \"154.659357\",\n    },\n    {\n      eid: \"e5943\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.142\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5944\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.5941818\",\n      weight: \"11.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5945\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1740.776\",\n      weight: \"4444.87\",\n      embodiedLand: \"1391.87\",\n      embodiedWater: \"902.309\",\n    },\n    {\n      eid: \"e5946\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"34.047\",\n      weight: \"75\",\n      embodiedLand: \"25.521\",\n      embodiedWater: \"8.325\",\n    },\n    {\n      eid: \"e5947\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.553\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5948\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.706\",\n      weight: \"21.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5949\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2682.98701\",\n      weight: \"9850\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5950\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.692\",\n      weight: \"0.112\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5951\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"52.1904308\",\n      weight: \"28.8378857\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5952\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"150.48433\",\n      weight: \"617.293342\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5954\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.229\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5955\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5956\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.8723332\",\n      weight: \"14.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5957\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2596.166\",\n      weight: \"14299.874\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5958\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"624\",\n      targetSimName: \"GNB\",\n      targetName: \"Guinea-Bissau\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.352\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5959\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7705.296\",\n      weight: \"32986.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5960\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18663.554\",\n      weight: \"101536.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5961\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.423\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5962\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.777\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5963\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.583\",\n      weight: \"41\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5964\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9794.196\",\n      weight: \"53649.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5997\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5998\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5999\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6000\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.32369588\",\n      weight: \"10\",\n      embodiedLand: \"2.391\",\n      embodiedWater: \"1.34\",\n    },\n    {\n      eid: \"e6002\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.9\",\n      embodiedLand: \"0.216\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6003\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1472.921\",\n      weight: \"4490.059\",\n      embodiedLand: \"819.513\",\n      embodiedWater: \"1333.547\",\n    },\n    {\n      eid: \"e6005\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6006\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6008\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6009\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.556\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6010\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.553\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6029\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6030\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6031\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.4864968\",\n      weight: \"333.932001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6032\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.432\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6033\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6054\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.078\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.068\",\n    },\n    {\n      eid: \"e6055\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.044\",\n    },\n    {\n      eid: \"e6056\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.174\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e6057\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.031\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6058\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6059\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.192\",\n      weight: \"0.072\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6060\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6167\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.033\",\n      weight: \"0.026\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.394\",\n    },\n    {\n      eid: \"e6168\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.24\",\n      weight: \"22.5\",\n      embodiedLand: \"1.165\",\n      embodiedWater: \"57.42\",\n    },\n    {\n      eid: \"e6169\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.547\",\n      weight: \"0.074\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6170\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.178\",\n      weight: \"39.34\",\n      embodiedLand: \"0.219\",\n      embodiedWater: \"24.902\",\n    },\n    {\n      eid: \"e6171\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"250.088\",\n      weight: \"313.5\",\n      embodiedLand: \"205.235\",\n      embodiedWater: \"1026.712\",\n    },\n    {\n      eid: \"e6172\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27.338\",\n      weight: \"16.94\",\n      embodiedLand: \"0.121\",\n      embodiedWater: \"0.813\",\n    },\n    {\n      eid: \"e6174\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"38.385\",\n      weight: \"44.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6175\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.444\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6176\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"39.86\",\n      weight: \"18.976\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6177\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"69.327\",\n      weight: \"39.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6178\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"9.794\",\n      weight: \"4.694\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6179\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.55\",\n      weight: \"1.246\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6180\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"143.017\",\n      weight: \"99.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6181\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6182\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6185\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6186\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6187\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"134.792\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6188\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.466\",\n      weight: \"248\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6189\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"500.517\",\n      weight: \"1376.74\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6210\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.222\",\n      weight: \"24\",\n      embodiedLand: \"11.101\",\n      embodiedWater: \"285.816\",\n    },\n    {\n      eid: \"e6211\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.201\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6212\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6213\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.127\",\n      weight: \"0.024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6214\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6215\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.948\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6216\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.006\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6270\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6113.626\",\n      weight: \"14771.565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6271\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6272\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"14.65\",\n      weight: \"9.6\",\n      embodiedLand: \"0.224\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6273\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"97.941\",\n      weight: \"48\",\n      embodiedLand: \"5.948\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6274\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.261\",\n      weight: \"3.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6275\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.207\",\n      weight: \"23.502\",\n      embodiedLand: \"0.48152987\",\n      embodiedWater: \"30.8105997\",\n    },\n    {\n      eid: \"e6276\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.151\",\n      weight: \"5.43\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6277\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18.135\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6278\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"24.9972232\",\n      weight: \"43.4084916\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6280\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.101\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6281\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.00156596\",\n      weight: \"0.00208085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6282\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.973\",\n      weight: \"1.347\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6293\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.2\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.139\",\n    },\n    {\n      eid: \"e6294\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.391\",\n      weight: \"25\",\n      embodiedLand: \"7.002\",\n      embodiedWater: \"204.525\",\n    },\n    {\n      eid: \"e6295\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.018\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6330\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6331\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.478\",\n      weight: \"30.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6332\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6333\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6334\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"353.845136\",\n      weight: \"1878.10933\",\n      embodiedLand: \"15.5904614\",\n      embodiedWater: \"3562.77322\",\n    },\n    {\n      eid: \"e6335\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.786\",\n      weight: \"42\",\n      embodiedLand: \"0.943\",\n      embodiedWater: \"91.056\",\n    },\n    {\n      eid: \"e6336\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6337\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2562.825\",\n      weight: \"4828.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6437\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.35799817\",\n      weight: \"5.965\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6438\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.96291721\",\n      weight: \"1.082\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"2.028\",\n    },\n    {\n      eid: \"e6439\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.063\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6440\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"1.881\",\n      weight: \"0.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6441\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6442\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"161.633092\",\n      weight: \"131.698943\",\n      embodiedLand: \"103.093103\",\n      embodiedWater: \"356.509274\",\n    },\n    {\n      eid: \"e6443\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.013\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6444\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"337.977\",\n      weight: \"582.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6445\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"1.526\",\n      embodiedLand: \"0.37\",\n      embodiedWater: \"84.283\",\n    },\n    {\n      eid: \"e6446\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4579.296\",\n      weight: \"12984.96\",\n      embodiedLand: \"3316.527\",\n      embodiedWater: \"366708.255\",\n    },\n    {\n      eid: \"e6447\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6448\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.24\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6449\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.862\",\n      weight: \"1.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6451\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6452\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6917.997\",\n      weight: \"32990.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6453\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3719.013\",\n      weight: \"13050\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6454\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.544\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6455\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.933\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6469\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.193\",\n      weight: \"24.894\",\n      embodiedLand: \"1.244\",\n      embodiedWater: \"132.162\",\n    },\n    {\n      eid: \"e6470\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.077\",\n      weight: \"0.186\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6471\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"88.215\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6472\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6473\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.254\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6532\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"8.045\",\n      weight: \"44\",\n      embodiedLand: \"3.73\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6533\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.21\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"0.438\",\n    },\n    {\n      eid: \"e6534\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"15.064\",\n      weight: \"43.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6535\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"326.546\",\n      weight: \"1813.443\",\n      embodiedLand: \"499.351\",\n      embodiedWater: \"223.053\",\n    },\n    {\n      eid: \"e6536\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"3.85\",\n      weight: \"25\",\n      embodiedLand: \"4.393\",\n      embodiedWater: \"5.775\",\n    },\n    {\n      eid: \"e6537\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"3.266\",\n      weight: \"21\",\n      embodiedLand: \"0.97\",\n      embodiedWater: \"69.3\",\n    },\n    {\n      eid: \"e6538\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.59555736\",\n      weight: \"0.96\",\n      embodiedLand: \"0.038\",\n      embodiedWater: \"5.211\",\n    },\n    {\n      eid: \"e6539\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.06377214\",\n      weight: \"0.08899229\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.05394042\",\n    },\n    {\n      eid: \"e6540\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"222.69\",\n      weight: \"1394.035\",\n      embodiedLand: \"436.708\",\n      embodiedWater: \"224.44\",\n    },\n    {\n      eid: \"e6541\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"988.605\",\n      weight: \"5010.909\",\n      embodiedLand: \"1241.576\",\n      embodiedWater: \"410.895\",\n    },\n    {\n      eid: \"e6542\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.986\",\n      weight: \"9.5\",\n      embodiedLand: \"0.479\",\n      embodiedWater: \"45.277\",\n    },\n    {\n      eid: \"e6543\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1092.675\",\n      weight: \"6495\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6544\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"452.602\",\n      weight: \"2038.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6545\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"6.63923657\",\n      weight: \"5.90356819\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6546\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"288.901\",\n      weight: \"2028.38\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6547\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3353.129\",\n      weight: \"19610.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6548\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"948.934454\",\n      weight: \"4372.09334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6549\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6550\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"79.648\",\n      weight: \"504.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6551\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1726.318\",\n      weight: \"9113.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6567\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.01797173\",\n      weight: \"0.839\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"0.103\",\n    },\n    {\n      eid: \"e6568\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.084\",\n      weight: \"0.085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6655\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.865\",\n      weight: \"0.451\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6656\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.841\",\n      weight: \"13.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6657\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6658\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.0198093\",\n      weight: \"10.0095949\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6659\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6660\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.221\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6661\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.444\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6662\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.732751\",\n      weight: \"37.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6663\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6664\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.389\",\n      weight: \"6.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6666\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.611\",\n      weight: \"0.722\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6667\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.014\",\n      weight: \"3.382\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6690\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"227.071\",\n      weight: \"1000.665\",\n      embodiedLand: \"616.851\",\n      embodiedWater: \"729.485\",\n    },\n    {\n      eid: \"e6691\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.486\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6692\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.194\",\n      weight: \"0.633\",\n      embodiedLand: \"0.042\",\n      embodiedWater: \"4.535\",\n    },\n    {\n      eid: \"e6693\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.126\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6694\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.043\",\n      weight: \"0.295\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6695\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.596\",\n      weight: \"6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6696\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6697\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.115\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6698\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.767\",\n      weight: \"0.573\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6739\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"30.039\",\n      weight: \"20\",\n      embodiedLand: \"0.17\",\n      embodiedWater: \"2.22\",\n    },\n    {\n      eid: \"e6740\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6741\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"187.414\",\n      weight: \"81.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6742\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"443.222\",\n      weight: \"441.628\",\n      embodiedLand: \"167.33\",\n      embodiedWater: \"7857.887\",\n    },\n    {\n      eid: \"e6743\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6744\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"49.186\",\n      weight: \"24.728\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6745\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.135\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6746\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1413.126\",\n      weight: \"572.235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6747\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.074\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6802\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6803\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6804\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.327\",\n      weight: \"19.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6805\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6806\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6807\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6808\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.212\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6809\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.228\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6810\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.019\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6811\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6812\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6833\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.219\",\n      weight: \"0.503\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e6834\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"193.924\",\n      weight: \"375\",\n      embodiedLand: \"194.083\",\n      embodiedWater: \"3776.25\",\n    },\n    {\n      eid: \"e6835\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.017\",\n      weight: \"19.5\",\n      embodiedLand: \"8.554\",\n      embodiedWater: \"382.551\",\n    },\n    {\n      eid: \"e6836\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.091\",\n      weight: \"0.02\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6837\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"64\",\n      targetSimName: \"BTN\",\n      targetName: \"Bhutan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"77.909\",\n      weight: \"306\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6838\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6839\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.403\",\n      weight: \"0.365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6840\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7020\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7021\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7022\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"238\",\n      targetSimName: \"FLK\",\n      targetName: \"Falkland Isds (Malvinas)\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7023\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7024\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7025\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7026\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.929\",\n      weight: \"3.746\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7027\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7028\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.672\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7030\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.506\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7031\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7032\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"30.968\",\n      weight: \"60\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7047\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7048\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7049\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7059\",\n      source: \"533\",\n      sourceSimName: \"ABW\",\n      sourceRegion: \"Aruba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7062\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7063\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7064\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7072\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.055\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7073\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7163\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.521\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7164\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.288\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7165\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.328\",\n      weight: \"0.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7166\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"26.252\",\n      weight: \"1.208\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7167\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7168\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7169\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.355\",\n      weight: \"23.559\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7188\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.004\",\n    },\n    {\n      eid: \"e7189\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"21.386\",\n      weight: \"136.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7190\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.379\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7191\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.356\",\n      weight: \"0.982\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7192\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.951\",\n      weight: \"141\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7193\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.256\",\n      weight: \"2.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7221\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7222\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.966\",\n      weight: \"2.817\",\n      embodiedLand: \"0.349\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7223\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"20.293\",\n      weight: \"15.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7224\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"20.609\",\n      weight: \"35\",\n      embodiedLand: \"21.084\",\n      embodiedWater: \"566.545\",\n    },\n    {\n      eid: \"e7225\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.981\",\n      weight: \"28.684\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7226\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"249.489\",\n      weight: \"370\",\n      embodiedLand: \"118.35\",\n      embodiedWater: \"54063.29\",\n    },\n    {\n      eid: \"e7227\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7228\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"177.342\",\n      weight: \"265.715\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7229\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7230\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7231\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"29.038\",\n      weight: \"39.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7305\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.338\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7306\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.014\",\n      weight: \"0.01\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7307\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"672\",\n      weight: \"3264.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7308\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.07\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.106\",\n    },\n    {\n      eid: \"e7309\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7310\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.882\",\n      weight: \"0.84\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7311\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.401\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7312\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7313\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.331\",\n      weight: \"23.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7358\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"108.657\",\n      weight: \"200.963\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7359\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"98.433\",\n      weight: \"151.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7360\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.211\",\n      weight: \"4.3\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"10.109\",\n    },\n    {\n      eid: \"e7361\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.125\",\n      weight: \"6.503\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7362\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.616\",\n      weight: \"41.331\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7363\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.125\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7364\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.165\",\n      weight: \"0.055\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7365\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7366\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.183\",\n      weight: \"0.152\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.036\",\n    },\n    {\n      eid: \"e7367\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7368\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.222\",\n      weight: \"0.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7369\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"143.971\",\n      weight: \"104.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7370\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.444\",\n      weight: \"0.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7371\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.662\",\n      weight: \"4.95\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7372\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"241.798\",\n      weight: \"172.775\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7373\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"7.72031118\",\n      weight: \"13.3129919\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7374\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.143\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7375\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.572\",\n      weight: \"0.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7379\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7380\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7384\",\n      source: \"584\",\n      sourceSimName: \"MHL\",\n      sourceRegion: \"Marshall Isds\",\n      sourceName: \"Oceania\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"173.38\",\n      weight: \"514.539\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7551\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.467\",\n      weight: \"8.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7552\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.749\",\n      weight: \"0.657\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7553\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.707\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7554\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.019\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7555\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.665\",\n      weight: \"0.191\",\n      embodiedLand: \"0.00237267\",\n      embodiedWater: \"2.86855901\",\n    },\n    {\n      eid: \"e7556\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"45.897\",\n      weight: \"108\",\n      embodiedLand: \"94.494\",\n      embodiedWater: \"993.276\",\n    },\n    {\n      eid: \"e7557\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"33.126\",\n      weight: \"85\",\n      embodiedLand: \"49.298\",\n      embodiedWater: \"519.945\",\n    },\n    {\n      eid: \"e7558\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.969\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7600\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.135\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7601\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.396\",\n      weight: \"5.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7602\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.484\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7603\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"89.077\",\n      weight: \"262\",\n      embodiedLand: \"14.9602\",\n      embodiedWater: \"24.628\",\n    },\n    {\n      eid: \"e7604\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"140.541\",\n      weight: \"1387.5\",\n      embodiedLand: \"722.268\",\n      embodiedWater: \"10034.4\",\n    },\n    {\n      eid: \"e7605\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.5\",\n      weight: \"5.26\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7606\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"58.626\",\n      weight: \"142.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7607\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.478\",\n      weight: \"0.354\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7608\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.908\",\n      weight: \"1.673\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7609\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.489\",\n      weight: \"0.251\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7610\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.519\",\n      weight: \"4.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7611\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"22\",\n      weight: \"110\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7612\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.307\",\n      weight: \"25.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7613\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7614\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2.04\",\n      weight: \"3.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7627\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7628\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7629\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7701\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.09\",\n      weight: \"0.056\",\n      embodiedLand: \"0.022\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7702\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.12\",\n      weight: \"23.76\",\n      embodiedLand: \"4.716\",\n      embodiedWater: \"141.396\",\n    },\n    {\n      eid: \"e7703\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"253.201\",\n      weight: \"2164.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7704\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"176\",\n      weight: \"2000\",\n      embodiedLand: \"512.183\",\n      embodiedWater: \"244\",\n    },\n    {\n      eid: \"e7705\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.008\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7706\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"43.718\",\n      weight: \"321.454\",\n      embodiedLand: \"99.0839337\",\n      embodiedWater: \"39.2173983\",\n    },\n    {\n      eid: \"e7707\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.926\",\n      weight: \"1.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7708\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"110\",\n      weight: \"1100\",\n      embodiedLand: \"264.036\",\n      embodiedWater: \"247.5\",\n    },\n    {\n      eid: \"e7709\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4903.23583\",\n      weight: \"30611.0521\",\n      embodiedLand: \"7784.12365\",\n      embodiedWater: \"4254.93621\",\n    },\n    {\n      eid: \"e7710\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"133.791\",\n      weight: \"200.04\",\n      embodiedLand: \"37.571\",\n      embodiedWater: \"3567.513\",\n    },\n    {\n      eid: \"e7711\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.368\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7712\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6301.54229\",\n      weight: \"39230.597\",\n      embodiedLand: \"9966.60233\",\n      embodiedWater: \"4825.3641\",\n    },\n    {\n      eid: \"e7713\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10163.8981\",\n      weight: \"51351.1604\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7714\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"145.554268\",\n      weight: \"317.548282\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7715\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14598.991\",\n      weight: \"82200.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7716\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.114\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7717\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"313.761\",\n      weight: \"653.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7718\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7820\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7821\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.728\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7822\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.665\",\n      weight: \"0.358\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7823\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.026\",\n      weight: \"5.379\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7824\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"28.047\",\n      weight: \"7.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7825\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"0.81\",\n      weight: \"0.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.023\",\n    },\n    {\n      eid: \"e7826\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.355\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7827\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.1145\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7828\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"215.438505\",\n      weight: \"23.9549268\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7829\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"73.9066099\",\n      weight: \"25.626565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7830\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.99\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7831\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.44\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"2.623\",\n    },\n    {\n      eid: \"e7832\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.51186012\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7833\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.093\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7834\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.54\",\n      weight: \"15.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7835\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"64.745\",\n      weight: \"19.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7836\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.872\",\n      weight: \"0.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7912\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.46\",\n      weight: \"0.249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7913\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.823\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7914\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7915\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.149\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7916\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.659\",\n      weight: \"0.955\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7917\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.502\",\n      weight: \"0.139\",\n      embodiedLand: \"0.045\",\n      embodiedWater: \"1.387\",\n    },\n    {\n      eid: \"e7918\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7919\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"48.872\",\n      weight: \"81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7920\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7921\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.177\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7922\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7923\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7924\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.403\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7927\",\n      source: \"612\",\n      sourceSimName: \"PCN\",\n      sourceRegion: \"Pitcairn\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8061\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.139\",\n      weight: \"0.145\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8064\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8065\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"244.824\",\n      weight: \"507.82\",\n      embodiedLand: \"154.861\",\n      embodiedWater: \"22.852\",\n    },\n    {\n      eid: \"e8066\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"70.822\",\n      weight: \"231\",\n      embodiedLand: \"31.512\",\n      embodiedWater: \"476.553\",\n    },\n    {\n      eid: \"e8067\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12161.233\",\n      weight: \"57149.4\",\n      embodiedLand: \"12254.953\",\n      embodiedWater: \"180420.656\",\n    },\n    {\n      eid: \"e8068\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.272\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8070\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"220.92779\",\n      weight: \"400.073031\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8071\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8072\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1248.54\",\n      weight: \"5500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8073\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"302.5090046\",\n      weight: \"656.733934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8074\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1502.111\",\n      weight: \"7201.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8075\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"691.763\",\n      weight: \"1537.68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8076\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8077\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1568.202\",\n      weight: \"4027.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8078\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"80.973\",\n      weight: \"434.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8162\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"56.829\",\n      weight: \"75\",\n      embodiedLand: \"21.703\",\n      embodiedWater: \"1097.55\",\n    },\n    {\n      eid: \"e8163\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"50.3339085\",\n      weight: \"45.9143482\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8164\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"58.8618795\",\n      weight: \"87.6717437\",\n      embodiedLand: \"29.8536241\",\n      embodiedWater: \"1680.66691\",\n    },\n    {\n      eid: \"e8165\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.028\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.032\",\n    },\n    {\n      eid: \"e8166\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.68987608\",\n      weight: \"0.56109969\",\n      embodiedLand: \"0.0422374\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8167\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.006\",\n      weight: \"28\",\n      embodiedLand: \"22.605\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8168\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.111\",\n      weight: \"50\",\n      embodiedLand: \"13.661\",\n      embodiedWater: \"723.6\",\n    },\n    {\n      eid: \"e8169\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"535\",\n      targetSimName: \"BES\",\n      targetName: \"Bonaire\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.166\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8170\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8172\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8173\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"267.644962\",\n      weight: \"510\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8174\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"456.64271\",\n      weight: \"587.244797\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8175\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8176\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"1.765\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8177\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.143\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8178\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8179\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8180\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.027\",\n      weight: \"34.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8182\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.009\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8183\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8184\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.272\",\n      weight: \"0.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8216\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8217\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8219\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"60.79\",\n      weight: \"74.981\",\n      embodiedLand: \"2.912\",\n      embodiedWater: \"1094.423\",\n    },\n    {\n      eid: \"e8220\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"83.636\",\n      weight: \"34.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8221\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"0.00009091\",\n      embodiedWater: \"0.00372727\",\n    },\n    {\n      eid: \"e8222\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"18.134\",\n      weight: \"45.408\",\n      embodiedLand: \"0.035\",\n      embodiedWater: \"79.873\",\n    },\n    {\n      eid: \"e8223\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.824\",\n      weight: \"10\",\n      embodiedLand: \"3.735\",\n      embodiedWater: \"104.17\",\n    },\n    {\n      eid: \"e8224\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8225\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8226\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.458\",\n      weight: \"0.054\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8227\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8324\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2595\",\n      weight: \"15000\",\n      embodiedLand: \"3360.071\",\n      embodiedWater: \"28275\",\n    },\n    {\n      eid: \"e8325\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.024\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.017\",\n    },\n    {\n      eid: \"e8326\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11237.2354\",\n      weight: \"56273.1014\",\n      embodiedLand: \"17817.2079\",\n      embodiedWater: \"134548.986\",\n    },\n    {\n      eid: \"e8327\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1985\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8329\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4093.718\",\n      weight: \"15865.57\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8330\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"214.3\",\n      weight: \"960\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8331\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1094.973\",\n      weight: \"7050.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8332\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"228.149\",\n      weight: \"1193.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8333\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3847.356\",\n      weight: \"21928.554\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8334\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1553.1\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8335\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"142.45\",\n      weight: \"230\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8468\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.432\",\n      weight: \"10.771\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8469\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1384.377\",\n      weight: \"3256\",\n      embodiedLand: \"1499.247\",\n      embodiedWater: \"5655.672\",\n    },\n    {\n      eid: \"e8470\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"301.524\",\n      weight: \"261.39\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8471\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8472\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"13.5\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8473\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8474\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.47\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8475\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1585.217\",\n      weight: \"11000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8476\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"202.572054\",\n      weight: \"1050\",\n      embodiedLand: \"269.74\",\n      embodiedWater: \"5738.25\",\n    },\n    {\n      eid: \"e8478\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1198.008\",\n      weight: \"7131\",\n      embodiedLand: \"2927.035\",\n      embodiedWater: \"11794.674\",\n    },\n    {\n      eid: \"e8480\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1798.27193\",\n      weight: \"8589.5235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8481\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1929.019\",\n      weight: \"9904\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8482\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"11.153\",\n      weight: \"45.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8483\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.0980149\",\n      weight: \"103.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8484\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1427.83359\",\n      weight: \"6406.65847\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8485\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8486\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"257.303\",\n      weight: \"957\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8506\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8507\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8508\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.177\",\n      weight: \"0.178\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8524\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8526\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8527\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"12.999\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8531\",\n      source: \"660\",\n      sourceSimName: \"AIA\",\n      sourceRegion: \"Anguilla\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8545\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"92\",\n      targetSimName: \"VGB\",\n      targetName: \"British Virgin Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8546\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8547\",\n      source: \"666\",\n      sourceSimName: \"SPM\",\n      sourceRegion: \"Saint Pierre and Miquelon\",\n      sourceName: \"North America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8565\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8566\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8567\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8568\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8573\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8574\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8575\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"838\",\n      targetSimName: \"\",\n      targetName: \"Free Zones\",\n      targetRegion: \"Other\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.26\",\n      weight: \"1.155\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8652\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8653\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8654\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.48\",\n      weight: \"21.772\",\n      embodiedLand: \"7.63664924\",\n      embodiedWater: \"109.904952\",\n    },\n    {\n      eid: \"e8655\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.859\",\n      embodiedLand: \"0.014\",\n      embodiedWater: \"0.338\",\n    },\n    {\n      eid: \"e8656\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8657\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.115\",\n      weight: \"2.5\",\n      embodiedLand: \"0.292\",\n      embodiedWater: \"34.81\",\n    },\n    {\n      eid: \"e8658\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.301\",\n    },\n    {\n      eid: \"e8659\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.838\",\n      weight: \"16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8660\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8661\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.252\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8662\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.509\",\n      weight: \"1.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8663\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8664\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"7.747\",\n      weight: \"5.335\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8718\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.062\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8720\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8721\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.085\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8722\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.302\",\n      weight: \"1.31\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8723\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.53\",\n      weight: \"1.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8724\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.214\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8725\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"666\",\n      targetSimName: \"SPM\",\n      targetName: \"Saint Pierre and Miquelon\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"84\",\n      weight: \"261.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8726\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8794\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.967\",\n      weight: \"21.5\",\n      embodiedLand: \"6.634\",\n      embodiedWater: \"5.268\",\n    },\n    {\n      eid: \"e8796\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.028\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.012\",\n    },\n    {\n      eid: \"e8797\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8798\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.2366732\",\n      weight: \"177.68999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8800\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"129.178771\",\n      weight: \"288.216749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8801\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.403\",\n      weight: \"45.042\",\n      embodiedLand: \"13.431\",\n      embodiedWater: \"10.225\",\n    },\n    {\n      eid: \"e8802\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"26.6315535\",\n      weight: \"63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8803\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8804\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"277.534\",\n      weight: \"46.233\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8805\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8806\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8807\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"61.871\",\n      weight: \"225.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8808\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.51515098\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8809\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.25833351\",\n      weight: \"0.76309616\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8810\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.96\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8817\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8818\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18.484\",\n      weight: \"75\",\n      embodiedLand: \"0.094\",\n      embodiedWater: \"95.025\",\n    },\n    {\n      eid: \"e8819\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.553\",\n      weight: \"25.427\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8820\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8821\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"15.778\",\n      weight: \"69\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8835\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.786\",\n      weight: \"2.5\",\n      embodiedLand: \"1.293\",\n      embodiedWater: \"0.832\",\n    },\n    {\n      eid: \"e8836\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.502\",\n      weight: \"2.93\",\n      embodiedLand: \"2.545\",\n      embodiedWater: \"27.483\",\n    },\n    {\n      eid: \"e8837\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8838\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8839\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.401\",\n      weight: \"0.519\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8840\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.13\",\n      weight: \"10.403\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8841\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8842\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9039\",\n      source: \"699\",\n      sourceSimName: \"IND\",\n      sourceRegion: \"India\",\n      sourceName: \"South Asia\",\n      target: \"581\",\n      targetSimName: \"UMI\",\n      targetName: \"United States Minor Outlying Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.376\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9154\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9155\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"520\",\n      targetSimName: \"NRU\",\n      targetName: \"Nauru\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.12\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9156\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.237\",\n      weight: \"63.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9157\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"40.244\",\n      weight: \"48\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9159\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9160\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.15\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9161\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"63.252\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9162\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.757\",\n      weight: \"0.209\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9224\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.768\",\n      weight: \"1.585\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9225\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e9226\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"90.739\",\n      weight: \"210.86\",\n      embodiedLand: \"23.926\",\n      embodiedWater: \"208.33\",\n    },\n    {\n      eid: \"e9227\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.27\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9228\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9230\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1729.926\",\n      weight: \"4000\",\n      embodiedLand: \"976.835\",\n      embodiedWater: \"240\",\n    },\n    {\n      eid: \"e9231\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"146.145\",\n      weight: \"460\",\n      embodiedLand: \"229.046\",\n      embodiedWater: \"1751.22\",\n    },\n    {\n      eid: \"e9232\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"31.674\",\n      weight: \"42\",\n      embodiedLand: \"27.568\",\n      embodiedWater: \"21.294\",\n    },\n    {\n      eid: \"e9233\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"344.235\",\n      weight: \"1266.178\",\n      embodiedLand: \"306.755\",\n      embodiedWater: \"4740.57\",\n    },\n    {\n      eid: \"e9234\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.173\",\n      weight: \"1.791\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9235\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.155\",\n      weight: \"1.878\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9236\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.454\",\n      weight: \"3.653\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9237\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.229\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9397\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.297\",\n      weight: \"117.657\",\n      embodiedLand: \"12.759\",\n      embodiedWater: \"163.896\",\n    },\n    {\n      eid: \"e9398\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.78\",\n      weight: \"3.285\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9399\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"100\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9400\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"580\",\n      targetSimName: \"MNP\",\n      targetName: \"N. Mariana Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"28212.429\",\n      weight: \"50643.596\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9401\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"19.732\",\n      weight: \"25.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9402\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.917\",\n      weight: \"30.866\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9403\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"767.08\",\n      weight: \"1370\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9404\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9405\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.189\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9460\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.115\",\n      weight: \"1.485\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9461\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"76.922\",\n      weight: \"78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9462\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.043\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9463\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"285.64339\",\n      weight: \"1519.634\",\n      embodiedLand: \"231.021\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9464\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"91.632\",\n      weight: \"210.82\",\n      embodiedLand: \"23.231\",\n      embodiedWater: \"116.162\",\n    },\n    {\n      eid: \"e9465\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.041\",\n      embodiedLand: \"0.01\",\n      embodiedWater: \"0.436\",\n    },\n    {\n      eid: \"e9467\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"6\",\n      weight: \"3.75\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"36.904\",\n    },\n    {\n      eid: \"e9468\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"52.7905262\",\n      weight: \"139\",\n      embodiedLand: \"46.698\",\n      embodiedWater: \"55.739\",\n    },\n    {\n      eid: \"e9469\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.906\",\n      weight: \"22\",\n      embodiedLand: \"6.456\",\n      embodiedWater: \"8.844\",\n    },\n    {\n      eid: \"e9470\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.687\",\n      weight: \"0.721\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9471\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9472\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.93823874\",\n      weight: \"7.86021619\",\n      embodiedLand: \"0.01751575\",\n      embodiedWater: \"27.1184749\",\n    },\n    {\n      eid: \"e9473\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.876\",\n      weight: \"30.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9474\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9483\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9484\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"19.298\",\n      weight: \"11.899\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9630\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9631\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9632\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9633\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.053\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9634\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.267\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9635\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9636\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9637\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"776\",\n      targetSimName: \"TON\",\n      targetName: \"Tonga\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.01\",\n      weight: \"35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9638\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"10.271\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9639\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"7.992\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9640\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"291.645\",\n      weight: \"223.789\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9641\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"406.568\",\n      weight: \"326.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9642\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9670\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"249.898\",\n      weight: \"235.45\",\n      embodiedLand: \"59.656\",\n      embodiedWater: \"250.99\",\n    },\n    {\n      eid: \"e9671\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9672\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"49.652\",\n      weight: \"10\",\n      embodiedLand: \"15.749\",\n      embodiedWater: \"1.39\",\n    },\n    {\n      eid: \"e9673\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e9674\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"262.679\",\n      weight: \"424.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9675\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9676\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e9677\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.583\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9678\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.8\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9679\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9680\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"108.245803\",\n      weight: \"74.0433696\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9681\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.073\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9682\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.04989606\",\n      weight: \"0.08321444\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9683\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9847\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.162\",\n      weight: \"49.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9848\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.104\",\n      weight: \"0.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9849\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"71.418\",\n      weight: \"180\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9850\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.3543178\",\n      weight: \"71.6911179\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9851\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9852\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9853\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.199\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9856\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9857\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9889\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.333\",\n      weight: \"0.31\",\n      embodiedLand: \"0.02\",\n      embodiedWater: \"11.447\",\n    },\n    {\n      eid: \"e9890\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.181\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9891\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"20.076\",\n      weight: \"40\",\n      embodiedLand: \"69.334\",\n      embodiedWater: \"202.56\",\n    },\n    {\n      eid: \"e9892\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.5\",\n      weight: \"5\",\n      embodiedLand: \"5.013\",\n      embodiedWater: \"44.535\",\n    },\n    {\n      eid: \"e9893\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9894\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9895\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.333\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9896\",\n      source: \"732\",\n      sourceSimName: \"ESH\",\n      sourceRegion: \"Western Sahara\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9934\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"48.174\",\n      weight: \"340.23\",\n      embodiedLand: \"96.561\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9935\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9936\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.141\",\n      weight: \"0.09\",\n      embodiedLand: \"0.034\",\n      embodiedWater: \"0.65\",\n    },\n    {\n      eid: \"e9937\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.15\",\n      embodiedLand: \"0.054\",\n      embodiedWater: \"1.152\",\n    },\n    {\n      eid: \"e9938\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.08\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9939\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"59.563\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9940\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"486\",\n      weight: \"1800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9941\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9942\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2459.276\",\n      weight: \"7800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9943\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.296\",\n      weight: \"45.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9944\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"86.553\",\n      weight: \"168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9945\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"126\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9946\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.625\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9947\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.8\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9960\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.105\",\n      weight: \"26\",\n      embodiedLand: \"14.55\",\n      embodiedWater: \"11.804\",\n    },\n    {\n      eid: \"e9961\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.963\",\n      weight: \"1.128\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9962\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.042\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9963\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.022\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9964\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"136.368\",\n      weight: \"352.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10072\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"321.247599\",\n      weight: \"594.892627\",\n      embodiedLand: \"157.689777\",\n      embodiedWater: \"218.325999\",\n    },\n    {\n      eid: \"e10073\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.166\",\n      weight: \"0.461\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10074\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.097\",\n      weight: \"6.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10075\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.949\",\n      weight: \"1\",\n      embodiedLand: \"1.187\",\n      embodiedWater: \"5.89\",\n    },\n    {\n      eid: \"e10076\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"293.17\",\n      weight: \"713\",\n      embodiedLand: \"176.112\",\n      embodiedWater: \"7.843\",\n    },\n    {\n      eid: \"e10077\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.593\",\n      weight: \"0.373\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10078\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.542\",\n      weight: \"7.661\",\n      embodiedLand: \"2.193\",\n      embodiedWater: \"28.537\",\n    },\n    {\n      eid: \"e10079\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"7903.00956\",\n      weight: \"26948.6797\",\n      embodiedLand: \"6860.2467\",\n      embodiedWater: \"1077.94733\",\n    },\n    {\n      eid: \"e10080\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.537\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10081\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10082\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2650.321\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10083\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10084\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.659\",\n      weight: \"2.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10085\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"525.239248\",\n      weight: \"1150.87085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10086\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"776.713\",\n      weight: \"2078\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10198\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10199\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10200\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10201\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.103\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10202\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"897.592\",\n      weight: \"1303.4\",\n      embodiedLand: \"445.321\",\n      embodiedWater: \"21745.926\",\n    },\n    {\n      eid: \"e10203\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.004\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10204\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e10205\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4511.886\",\n      weight: \"18900\",\n      embodiedLand: \"3534.409\",\n      embodiedWater: \"62181\",\n    },\n    {\n      eid: \"e10206\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10207\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"70.534\",\n      weight: \"150.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10208\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"6.519\",\n      weight: \"6.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10209\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.173\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10210\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10211\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10212\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.429\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10213\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"389.737\",\n      weight: \"477.087\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10214\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.041\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10215\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.1431594\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10245\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.064\",\n      weight: \"0.107\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10246\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.032\",\n      weight: \"0.21\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.014\",\n    },\n    {\n      eid: \"e10247\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10248\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8862.493\",\n      weight: \"24861.286\",\n      embodiedLand: \"1247.997\",\n      embodiedWater: \"1864.596\",\n    },\n    {\n      eid: \"e10250\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.791\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10251\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10252\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.045\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10253\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.034\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10254\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10255\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.895\",\n      weight: \"1.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10264\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"89.465\",\n      weight: \"296.215\",\n      embodiedLand: \"159.202\",\n      embodiedWater: \"74.646\",\n    },\n    {\n      eid: \"e10265\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10461\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"212\",\n      targetSimName: \"DMA\",\n      targetName: \"Dominica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"9.736\",\n      weight: \"25.006\",\n      embodiedLand: \"10.644\",\n      embodiedWater: \"105.225\",\n    },\n    {\n      eid: \"e10462\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"234\",\n      targetSimName: \"FRO\",\n      targetName: \"Faeroe Isds\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.136\",\n      weight: \"0.315\",\n      embodiedLand: \"0.178\",\n      embodiedWater: \"2.462\",\n    },\n    {\n      eid: \"e10464\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.01\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.091\",\n    },\n    {\n      eid: \"e10465\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.484\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10495\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.112\",\n      weight: \"7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10496\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.283\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10497\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5\",\n      weight: \"18.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10498\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.60547527\",\n      weight: \"2.45939658\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10499\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"17.2519049\",\n      weight: \"115.598246\",\n      embodiedLand: \"99.7718139\",\n      embodiedWater: \"58.6084014\",\n    },\n    {\n      eid: \"e10500\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.00827273\",\n    },\n    {\n      eid: \"e10501\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10502\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.981\",\n      weight: \"1.027\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10509\",\n      source: \"772\",\n      sourceSimName: \"TKL\",\n      sourceRegion: \"Tokelau\",\n      sourceName: \"Oceania\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10517\",\n      source: \"776\",\n      sourceSimName: \"TON\",\n      sourceRegion: \"Tonga\",\n      sourceName: \"Oceania\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.113\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10554\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10555\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10556\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10557\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10558\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10559\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10560\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10561\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10562\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10563\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10564\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10565\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10566\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10703\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10704\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10705\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10706\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10707\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.831\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10708\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10709\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.154\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10778\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.737\",\n      weight: \"1.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10779\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.415\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10780\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10781\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"8.223\",\n      weight: \"9.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10782\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4.469\",\n      weight: \"2.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10783\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.389\",\n      weight: \"16.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10784\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.163\",\n      weight: \"19.327\",\n      embodiedLand: \"4.211\",\n      embodiedWater: \"62.813\",\n    },\n    {\n      eid: \"e10785\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"17.492\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10786\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6.28513636\",\n      weight: \"4.23263329\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10787\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10788\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.276\",\n      weight: \"0.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10789\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"46.053\",\n      weight: \"107.5\",\n      embodiedLand: \"2.563\",\n      embodiedWater: \"48.805\",\n    },\n    {\n      eid: \"e10790\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.516\",\n      weight: \"20.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10791\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.274\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10792\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"401.922618\",\n      weight: \"985.504812\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10793\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.042\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10794\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"33.233\",\n      weight: \"41.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10795\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"388.489\",\n      weight: \"300\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10976\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10977\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14.0119386\",\n      weight: \"26.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10978\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.708\",\n      weight: \"233.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10979\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.198\",\n      weight: \"0.714\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10990\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"372.658\",\n      weight: \"1562.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10991\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.407\",\n      weight: \"2.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11003\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.403\",\n      weight: \"24.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11004\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"8.714\",\n      weight: \"21.576\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11049\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11050\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.754\",\n      weight: \"16\",\n      embodiedLand: \"4.518\",\n      embodiedWater: \"69.808\",\n    },\n    {\n      eid: \"e11051\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"8.335\",\n      weight: \"22.5\",\n      embodiedLand: \"10.227\",\n      embodiedWater: \"9.923\",\n    },\n    {\n      eid: \"e11052\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.018\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11053\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.263\",\n      weight: \"0.139\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11054\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.216\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11209\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"24.476\",\n      weight: \"20.587\",\n      embodiedLand: \"11.055\",\n      embodiedWater: \"57.644\",\n    },\n    {\n      eid: \"e11210\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"184\",\n      targetSimName: \"COK\",\n      targetName: \"Cook Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11211\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2451.982731\",\n      weight: \"16689\",\n      embodiedLand: \"2800.015\",\n      embodiedWater: \"84513.096\",\n    },\n    {\n      eid: \"e11212\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11213\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4890.88387\",\n      weight: \"20013.8008\",\n      embodiedLand: \"5001.53453\",\n      embodiedWater: \"32702.5506\",\n    },\n    {\n      eid: \"e11214\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7378.521\",\n      weight: \"27210.945\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11215\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11216\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1486.932\",\n      weight: \"4224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11217\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"6.555\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11218\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25906197\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11219\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1683.6727\",\n      weight: \"6988.48925\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11220\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11221\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11222\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.801\",\n      weight: \"190.825\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11223\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1725.40859\",\n      weight: \"3353.20792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11224\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"29.675\",\n      weight: \"111.862\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11225\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11336\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11337\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11338\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.243\",\n      weight: \"46.01\",\n      embodiedLand: \"10.002\",\n      embodiedWater: \"579.542\",\n    },\n    {\n      eid: \"e11339\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"97.433\",\n      weight: \"247.995\",\n      embodiedLand: \"119.179\",\n      embodiedWater: \"1537.817\",\n    },\n    {\n      eid: \"e11340\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"41.094\",\n      weight: \"88.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11341\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11342\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.135\",\n      weight: \"4.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11343\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.369\",\n      weight: \"0.63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11344\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"140.284\",\n      weight: \"337.113\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11345\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.159\",\n      weight: \"0.854\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11346\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"114.727\",\n      weight: \"85.648\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11347\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"23.162\",\n      weight: \"30.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11348\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.07\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11522\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"125.184\",\n      weight: \"45.6\",\n      embodiedLand: \"9.628\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11523\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11524\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11525\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.981\",\n      weight: \"0.98\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11526\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"3.556\",\n      weight: \"3.554\",\n      embodiedLand: \"0.914\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11527\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.147\",\n      weight: \"0.138\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11528\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.13\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11529\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11580\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.405\",\n      weight: \"23.6\",\n      embodiedLand: \"54.414\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11581\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"113.617\",\n      weight: \"655.96\",\n      embodiedLand: \"650.261\",\n      embodiedWater: \"1034.449\",\n    },\n    {\n      eid: \"e11582\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.097\",\n      weight: \"40\",\n      embodiedLand: \"27.575\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11583\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.054\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.463\",\n    },\n    {\n      eid: \"e11584\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.152\",\n      weight: \"40.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11585\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11586\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.563\",\n      weight: \"14.38\",\n      embodiedLand: \"9.575\",\n      embodiedWater: \"9.707\",\n    },\n    {\n      eid: \"e11587\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.496\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11588\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.863\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11589\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.13198458\",\n      weight: \"5.40716181\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11591\",\n      source: \"837\",\n      sourceSimName: \"\",\n      sourceRegion: \"Bunkers\",\n      sourceName: \"Other\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11597\",\n      source: \"838\",\n      sourceSimName: \"\",\n      sourceRegion: \"Free Zones\",\n      sourceName: \"Other\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.009\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11798\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"6.137\",\n      weight: \"1.878\",\n      embodiedLand: \"0.36\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11799\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"9.639\",\n      weight: \"19.875\",\n      embodiedLand: \"11.311\",\n      embodiedWater: \"1.848\",\n    },\n    {\n      eid: \"e11800\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.64\",\n      weight: \"20.752\",\n      embodiedLand: \"2.723\",\n      embodiedWater: \"10.999\",\n    },\n    {\n      eid: \"e11801\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"72.797\",\n      weight: \"82.805\",\n      embodiedLand: \"8.475\",\n      embodiedWater: \"106.818\",\n    },\n    {\n      eid: \"e11802\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"752.606\",\n      weight: \"2216.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11824\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.785\",\n      weight: \"69\",\n      embodiedLand: \"0.615\",\n      embodiedWater: \"8.901\",\n    },\n    {\n      eid: \"e11825\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"43.6395248\",\n      weight: \"25.096\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11826\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"429.663\",\n      weight: \"250\",\n      embodiedLand: \"111.522\",\n      embodiedWater: \"2267.75\",\n    },\n    {\n      eid: \"e11827\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11828\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"109.987\",\n      weight: \"30\",\n      embodiedLand: \"16.331\",\n      embodiedWater: \"27.69\",\n    },\n    {\n      eid: \"e11829\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.487\",\n      weight: \"2.5\",\n      embodiedLand: \"1.554\",\n      embodiedWater: \"30.817\",\n    },\n    {\n      eid: \"e11830\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11951\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18298.88\",\n      weight: \"67086.608\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11952\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.537\",\n      weight: \"27.011\",\n      embodiedLand: \"11.171\",\n      embodiedWater: \"16.396\",\n    },\n    {\n      eid: \"e11953\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24935.4179\",\n      weight: \"104332.188\",\n      embodiedLand: \"47360.4095\",\n      embodiedWater: \"68441.9161\",\n    },\n    {\n      eid: \"e11954\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"96.16\",\n      weight: \"524.11\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11955\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"13.297\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11967\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24401.666\",\n      weight: \"75279.56\",\n      embodiedLand: \"28122.882\",\n      embodiedWater: \"36209.468\",\n    },\n    {\n      eid: \"e11968\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11996\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"174.23\",\n      weight: \"454.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11997\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11998\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.294\",\n      weight: \"4.58\",\n      embodiedLand: \"1.249\",\n      embodiedWater: \"1.53\",\n    },\n    {\n      eid: \"e11999\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.025\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12000\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.889\",\n      weight: \"21.609\",\n      embodiedLand: \"5.737\",\n      embodiedWater: \"157.097\",\n    },\n    {\n      eid: \"e12001\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.367\",\n      weight: \"1.583\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12002\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.467\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12003\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12004\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"22.327\",\n      weight: \"24.749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12012\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.455\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12013\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12043\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.578\",\n      weight: \"66\",\n      embodiedLand: \"38.092\",\n      embodiedWater: \"4450.248\",\n    },\n    {\n      eid: \"e12044\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12093\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.102\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12094\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"82.825\",\n      weight: \"18.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-force-clustering/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-force-clustering/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-force-clustering/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 力导向布局聚类\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        clustering: true,\n        clusterNodeStrength: -5,\n        clusterEdgeDistance: 200,\n        clusterNodeSize: 20,\n        clusterFociStrength: 1.2,\n        nodeSpacing: 5,\n        preventOverlap: true,\n      },\n      defaultNode: {\n        size: 15,\n      },\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n    });\n    const colorMap = {\n      2012: \"#BDD2FD\",\n      2013: \"#BDEFDB\",\n      2014: \"#F6C3B7\",\n      2015: \"#FFD8B8\",\n      2016: \"#D3C6EA\",\n    };\n\n    this.graph.data(data);\n    data.nodes.forEach((i) => {\n      i.cluster = i.year;\n      i.style = Object.assign(i.style || {}, {\n        fill: colorMap[i.year],\n      });\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-force-clustering/index.json",
    "content": "{\n  \"defaultTitle\": \"力导向布局聚类\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-functional-params/data.js",
    "content": "export default () => ({\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-functional-params/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-functional-params/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-functional-params/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 定制不同节点的参数\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        linkDistance: (d) => {\n          if (d.source.id === \"node0\") {\n            return 100;\n          }\n          return 30;\n        },\n        nodeStrength: (d) => {\n          if (d.isLeaf) {\n            return -50;\n          }\n          return -10;\n        },\n        edgeStrength: (d) => {\n          if (\n            d.source.id === \"node1\" ||\n            d.source.id === \"node2\" ||\n            d.source.id === \"node3\"\n          ) {\n            return 0.7;\n          }\n          return 0.1;\n        },\n      },\n      defaultNode: {\n        color: \"#5B8FF9\",\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    const { nodes } = data;\n    this.graph.data({\n      nodes,\n      edges: data.edges.map(function (edge, i) {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", function (e) {\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", function (e) {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-functional-params/index.json",
    "content": "{\n  \"defaultTitle\": \"定制不同节点的参数\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-prevent-overlap/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-prevent-overlap/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-prevent-overlap/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-prevent-overlap/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * 力导向布局防止节点重叠\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n\n    const { nodes } = data;\n    // randomize the node size\n    nodes.forEach((node) => {\n      node.size = Math.random() * 30 + 5;\n    });\n    this.graph.data({\n      nodes,\n      edges: data.edges.map(function (edge, i) {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", function (e) {\n      const forceLayout = this.graph.get(\"layoutController\").layoutMethods[0];\n      forceLayout.execute();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", function (e) {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/force-directed-prevent-overlap/index.json",
    "content": "{\n  \"defaultTitle\": \"力导向布局防止节点重叠\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"a\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"a\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"a\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"a\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"a\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"a\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"a\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"a\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"a\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"a\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"a\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"a\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"a\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"b\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"b\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"b\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"b\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"b\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"c\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"c\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"c\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"c\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"c\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"c\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"c\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"c\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"c\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"c\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"c\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"c\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"c\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"d\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"d\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        gravity: 5,\n        speed: 5,\n        // for rendering after each iteration\n        tick: () => {\n          this.graph.refreshPositions();\n        },\n      },\n      animate: true,\n      defaultNode: {\n        size: 30,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman/index.json",
    "content": "{\n  \"defaultTitle\": \"基本Fruchterman\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-clustering/data.js",
    "content": "function getData() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n        cluster: \"a\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n        cluster: \"a\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n        cluster: \"a\",\n      },\n      {\n        id: \"3\",\n        label: \"3\",\n        cluster: \"a\",\n      },\n      {\n        id: \"4\",\n        label: \"4\",\n        cluster: \"a\",\n      },\n      {\n        id: \"5\",\n        label: \"5\",\n        cluster: \"a\",\n      },\n      {\n        id: \"6\",\n        label: \"6\",\n        cluster: \"a\",\n      },\n      {\n        id: \"7\",\n        label: \"7\",\n        cluster: \"a\",\n      },\n      {\n        id: \"8\",\n        label: \"8\",\n        cluster: \"a\",\n      },\n      {\n        id: \"9\",\n        label: \"9\",\n        cluster: \"a\",\n      },\n      {\n        id: \"10\",\n        label: \"10\",\n        cluster: \"a\",\n      },\n      {\n        id: \"11\",\n        label: \"11\",\n        cluster: \"a\",\n      },\n      {\n        id: \"12\",\n        label: \"12\",\n        cluster: \"a\",\n      },\n      {\n        id: \"13\",\n        label: \"13\",\n        cluster: \"b\",\n      },\n      {\n        id: \"14\",\n        label: \"14\",\n        cluster: \"b\",\n      },\n      {\n        id: \"15\",\n        label: \"15\",\n        cluster: \"b\",\n      },\n      {\n        id: \"16\",\n        label: \"16\",\n        cluster: \"b\",\n      },\n      {\n        id: \"17\",\n        label: \"17\",\n        cluster: \"b\",\n      },\n      {\n        id: \"18\",\n        label: \"18\",\n        cluster: \"c\",\n      },\n      {\n        id: \"19\",\n        label: \"19\",\n        cluster: \"c\",\n      },\n      {\n        id: \"20\",\n        label: \"20\",\n        cluster: \"c\",\n      },\n      {\n        id: \"21\",\n        label: \"21\",\n        cluster: \"c\",\n      },\n      {\n        id: \"22\",\n        label: \"22\",\n        cluster: \"c\",\n      },\n      {\n        id: \"23\",\n        label: \"23\",\n        cluster: \"c\",\n      },\n      {\n        id: \"24\",\n        label: \"24\",\n        cluster: \"c\",\n      },\n      {\n        id: \"25\",\n        label: \"25\",\n        cluster: \"c\",\n      },\n      {\n        id: \"26\",\n        label: \"26\",\n        cluster: \"c\",\n      },\n      {\n        id: \"27\",\n        label: \"27\",\n        cluster: \"c\",\n      },\n      {\n        id: \"28\",\n        label: \"28\",\n        cluster: \"c\",\n      },\n      {\n        id: \"29\",\n        label: \"29\",\n        cluster: \"c\",\n      },\n      {\n        id: \"30\",\n        label: \"30\",\n        cluster: \"c\",\n      },\n      {\n        id: \"31\",\n        label: \"31\",\n        cluster: \"d\",\n      },\n      {\n        id: \"32\",\n        label: \"32\",\n        cluster: \"d\",\n      },\n      {\n        id: \"33\",\n        label: \"33\",\n        cluster: \"d\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n      {\n        source: \"0\",\n        target: \"3\",\n      },\n      {\n        source: \"0\",\n        target: \"4\",\n      },\n      {\n        source: \"0\",\n        target: \"5\",\n      },\n      {\n        source: \"0\",\n        target: \"7\",\n      },\n      {\n        source: \"0\",\n        target: \"8\",\n      },\n      {\n        source: \"0\",\n        target: \"9\",\n      },\n      {\n        source: \"0\",\n        target: \"10\",\n      },\n      {\n        source: \"0\",\n        target: \"11\",\n      },\n      {\n        source: \"0\",\n        target: \"13\",\n      },\n      {\n        source: \"0\",\n        target: \"14\",\n      },\n      {\n        source: \"0\",\n        target: \"15\",\n      },\n      {\n        source: \"0\",\n        target: \"16\",\n      },\n      {\n        source: \"2\",\n        target: \"3\",\n      },\n      {\n        source: \"4\",\n        target: \"5\",\n      },\n      {\n        source: \"4\",\n        target: \"6\",\n      },\n      {\n        source: \"5\",\n        target: \"6\",\n      },\n      {\n        source: \"7\",\n        target: \"13\",\n      },\n      {\n        source: \"8\",\n        target: \"14\",\n      },\n      {\n        source: \"9\",\n        target: \"10\",\n      },\n      {\n        source: \"10\",\n        target: \"22\",\n      },\n      {\n        source: \"10\",\n        target: \"14\",\n      },\n      {\n        source: \"10\",\n        target: \"12\",\n      },\n      {\n        source: \"10\",\n        target: \"24\",\n      },\n      {\n        source: \"10\",\n        target: \"21\",\n      },\n      {\n        source: \"10\",\n        target: \"20\",\n      },\n      {\n        source: \"11\",\n        target: \"24\",\n      },\n      {\n        source: \"11\",\n        target: \"22\",\n      },\n      {\n        source: \"11\",\n        target: \"14\",\n      },\n      {\n        source: \"12\",\n        target: \"13\",\n      },\n      {\n        source: \"16\",\n        target: \"17\",\n      },\n      {\n        source: \"16\",\n        target: \"18\",\n      },\n      {\n        source: \"16\",\n        target: \"21\",\n      },\n      {\n        source: \"16\",\n        target: \"22\",\n      },\n      {\n        source: \"17\",\n        target: \"18\",\n      },\n      {\n        source: \"17\",\n        target: \"20\",\n      },\n      {\n        source: \"18\",\n        target: \"19\",\n      },\n      {\n        source: \"19\",\n        target: \"20\",\n      },\n      {\n        source: \"19\",\n        target: \"33\",\n      },\n      {\n        source: \"19\",\n        target: \"22\",\n      },\n      {\n        source: \"19\",\n        target: \"23\",\n      },\n      {\n        source: \"20\",\n        target: \"21\",\n      },\n      {\n        source: \"21\",\n        target: \"22\",\n      },\n      {\n        source: \"22\",\n        target: \"24\",\n      },\n      {\n        source: \"22\",\n        target: \"25\",\n      },\n      {\n        source: \"22\",\n        target: \"26\",\n      },\n      {\n        source: \"22\",\n        target: \"23\",\n      },\n      {\n        source: \"22\",\n        target: \"28\",\n      },\n      {\n        source: \"22\",\n        target: \"30\",\n      },\n      {\n        source: \"22\",\n        target: \"31\",\n      },\n      {\n        source: \"22\",\n        target: \"32\",\n      },\n      {\n        source: \"22\",\n        target: \"33\",\n      },\n      {\n        source: \"23\",\n        target: \"28\",\n      },\n      {\n        source: \"23\",\n        target: \"27\",\n      },\n      {\n        source: \"23\",\n        target: \"29\",\n      },\n      {\n        source: \"23\",\n        target: \"30\",\n      },\n      {\n        source: \"23\",\n        target: \"31\",\n      },\n      {\n        source: \"23\",\n        target: \"33\",\n      },\n      {\n        source: \"32\",\n        target: \"33\",\n      },\n    ],\n  };\n\n  const colors = [\n    \"#BDD2FD\",\n    \"#BDEFDB\",\n    \"#C2C8D5\",\n    \"#FBE5A2\",\n    \"#F6C3B7\",\n    \"#B6E3F5\",\n    \"#D3C6EA\",\n    \"#FFD8B8\",\n    \"#AAD8D8\",\n    \"#FFD6E7\",\n  ];\n  const strokes = [\n    \"#5B8FF9\",\n    \"#5AD8A6\",\n    \"#5D7092\",\n    \"#F6BD16\",\n    \"#E8684A\",\n    \"#6DC8EC\",\n    \"#9270CA\",\n    \"#FF9D4D\",\n    \"#269A99\",\n    \"#FF99C3\",\n  ];\n\n  const { nodes } = data;\n  const clusterMap = new Map();\n  let clusterId = 0;\n  nodes.forEach(function (node) {\n    // cluster\n    if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n      clusterMap.set(node.cluster, clusterId);\n      clusterId++;\n    }\n    const cid = clusterMap.get(node.cluster);\n    if (!node.style) {\n      node.style = {};\n    }\n    node.style.fill = colors[cid % colors.length];\n    node.style.stroke = strokes[cid % strokes.length];\n  });\n\n  return data;\n}\n\nexport default getData;\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-clustering/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-clustering/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-clustering/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman 聚类布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        gravity: 10,\n        speed: 5,\n        clustering: true,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-clustering/index.json",
    "content": "{\n  \"defaultTitle\": \"Fruchterman聚类\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-configuration-translate/data.js",
    "content": "function getData() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n        cluster: \"a\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n        cluster: \"a\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n        cluster: \"a\",\n      },\n      {\n        id: \"3\",\n        label: \"3\",\n        cluster: \"a\",\n      },\n      {\n        id: \"4\",\n        label: \"4\",\n        cluster: \"a\",\n      },\n      {\n        id: \"5\",\n        label: \"5\",\n        cluster: \"a\",\n      },\n      {\n        id: \"6\",\n        label: \"6\",\n        cluster: \"a\",\n      },\n      {\n        id: \"7\",\n        label: \"7\",\n        cluster: \"a\",\n      },\n      {\n        id: \"8\",\n        label: \"8\",\n        cluster: \"a\",\n      },\n      {\n        id: \"9\",\n        label: \"9\",\n        cluster: \"a\",\n      },\n      {\n        id: \"10\",\n        label: \"10\",\n        cluster: \"a\",\n      },\n      {\n        id: \"11\",\n        label: \"11\",\n        cluster: \"a\",\n      },\n      {\n        id: \"12\",\n        label: \"12\",\n        cluster: \"a\",\n      },\n      {\n        id: \"13\",\n        label: \"13\",\n        cluster: \"b\",\n      },\n      {\n        id: \"14\",\n        label: \"14\",\n        cluster: \"b\",\n      },\n      {\n        id: \"15\",\n        label: \"15\",\n        cluster: \"b\",\n      },\n      {\n        id: \"16\",\n        label: \"16\",\n        cluster: \"b\",\n      },\n      {\n        id: \"17\",\n        label: \"17\",\n        cluster: \"b\",\n      },\n      {\n        id: \"18\",\n        label: \"18\",\n        cluster: \"c\",\n      },\n      {\n        id: \"19\",\n        label: \"19\",\n        cluster: \"c\",\n      },\n      {\n        id: \"20\",\n        label: \"20\",\n        cluster: \"c\",\n      },\n      {\n        id: \"21\",\n        label: \"21\",\n        cluster: \"c\",\n      },\n      {\n        id: \"22\",\n        label: \"22\",\n        cluster: \"c\",\n      },\n      {\n        id: \"23\",\n        label: \"23\",\n        cluster: \"c\",\n      },\n      {\n        id: \"24\",\n        label: \"24\",\n        cluster: \"c\",\n      },\n      {\n        id: \"25\",\n        label: \"25\",\n        cluster: \"c\",\n      },\n      {\n        id: \"26\",\n        label: \"26\",\n        cluster: \"c\",\n      },\n      {\n        id: \"27\",\n        label: \"27\",\n        cluster: \"c\",\n      },\n      {\n        id: \"28\",\n        label: \"28\",\n        cluster: \"c\",\n      },\n      {\n        id: \"29\",\n        label: \"29\",\n        cluster: \"c\",\n      },\n      {\n        id: \"30\",\n        label: \"30\",\n        cluster: \"c\",\n      },\n      {\n        id: \"31\",\n        label: \"31\",\n        cluster: \"d\",\n      },\n      {\n        id: \"32\",\n        label: \"32\",\n        cluster: \"d\",\n      },\n      {\n        id: \"33\",\n        label: \"33\",\n        cluster: \"d\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n      {\n        source: \"0\",\n        target: \"3\",\n      },\n      {\n        source: \"0\",\n        target: \"4\",\n      },\n      {\n        source: \"0\",\n        target: \"5\",\n      },\n      {\n        source: \"0\",\n        target: \"7\",\n      },\n      {\n        source: \"0\",\n        target: \"8\",\n      },\n      {\n        source: \"0\",\n        target: \"9\",\n      },\n      {\n        source: \"0\",\n        target: \"10\",\n      },\n      {\n        source: \"0\",\n        target: \"11\",\n      },\n      {\n        source: \"0\",\n        target: \"13\",\n      },\n      {\n        source: \"0\",\n        target: \"14\",\n      },\n      {\n        source: \"0\",\n        target: \"15\",\n      },\n      {\n        source: \"0\",\n        target: \"16\",\n      },\n      {\n        source: \"2\",\n        target: \"3\",\n      },\n      {\n        source: \"4\",\n        target: \"5\",\n      },\n      {\n        source: \"4\",\n        target: \"6\",\n      },\n      {\n        source: \"5\",\n        target: \"6\",\n      },\n      {\n        source: \"7\",\n        target: \"13\",\n      },\n      {\n        source: \"8\",\n        target: \"14\",\n      },\n      {\n        source: \"9\",\n        target: \"10\",\n      },\n      {\n        source: \"10\",\n        target: \"22\",\n      },\n      {\n        source: \"10\",\n        target: \"14\",\n      },\n      {\n        source: \"10\",\n        target: \"12\",\n      },\n      {\n        source: \"10\",\n        target: \"24\",\n      },\n      {\n        source: \"10\",\n        target: \"21\",\n      },\n      {\n        source: \"10\",\n        target: \"20\",\n      },\n      {\n        source: \"11\",\n        target: \"24\",\n      },\n      {\n        source: \"11\",\n        target: \"22\",\n      },\n      {\n        source: \"11\",\n        target: \"14\",\n      },\n      {\n        source: \"12\",\n        target: \"13\",\n      },\n      {\n        source: \"16\",\n        target: \"17\",\n      },\n      {\n        source: \"16\",\n        target: \"18\",\n      },\n      {\n        source: \"16\",\n        target: \"21\",\n      },\n      {\n        source: \"16\",\n        target: \"22\",\n      },\n      {\n        source: \"17\",\n        target: \"18\",\n      },\n      {\n        source: \"17\",\n        target: \"20\",\n      },\n      {\n        source: \"18\",\n        target: \"19\",\n      },\n      {\n        source: \"19\",\n        target: \"20\",\n      },\n      {\n        source: \"19\",\n        target: \"33\",\n      },\n      {\n        source: \"19\",\n        target: \"22\",\n      },\n      {\n        source: \"19\",\n        target: \"23\",\n      },\n      {\n        source: \"20\",\n        target: \"21\",\n      },\n      {\n        source: \"21\",\n        target: \"22\",\n      },\n      {\n        source: \"22\",\n        target: \"24\",\n      },\n      {\n        source: \"22\",\n        target: \"25\",\n      },\n      {\n        source: \"22\",\n        target: \"26\",\n      },\n      {\n        source: \"22\",\n        target: \"23\",\n      },\n      {\n        source: \"22\",\n        target: \"28\",\n      },\n      {\n        source: \"22\",\n        target: \"30\",\n      },\n      {\n        source: \"22\",\n        target: \"31\",\n      },\n      {\n        source: \"22\",\n        target: \"32\",\n      },\n      {\n        source: \"22\",\n        target: \"33\",\n      },\n      {\n        source: \"23\",\n        target: \"28\",\n      },\n      {\n        source: \"23\",\n        target: \"27\",\n      },\n      {\n        source: \"23\",\n        target: \"29\",\n      },\n      {\n        source: \"23\",\n        target: \"30\",\n      },\n      {\n        source: \"23\",\n        target: \"31\",\n      },\n      {\n        source: \"23\",\n        target: \"33\",\n      },\n      {\n        source: \"32\",\n        target: \"33\",\n      },\n    ],\n  };\n\n  const colors = [\n    \"#BDD2FD\",\n    \"#BDEFDB\",\n    \"#C2C8D5\",\n    \"#FBE5A2\",\n    \"#F6C3B7\",\n    \"#B6E3F5\",\n    \"#D3C6EA\",\n    \"#FFD8B8\",\n    \"#AAD8D8\",\n    \"#FFD6E7\",\n  ];\n  const strokes = [\n    \"#5B8FF9\",\n    \"#5AD8A6\",\n    \"#5D7092\",\n    \"#F6BD16\",\n    \"#E8684A\",\n    \"#6DC8EC\",\n    \"#9270CA\",\n    \"#FF9D4D\",\n    \"#269A99\",\n    \"#FF99C3\",\n  ];\n\n  const { nodes } = data;\n  const clusterMap = new Map();\n  let clusterId = 0;\n  nodes.forEach(function (node) {\n    // cluster\n    if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n      clusterMap.set(node.cluster, clusterId);\n      clusterId++;\n    }\n    const cid = clusterMap.get(node.cluster);\n    if (!node.style) {\n      node.style = {};\n    }\n    node.style.fill = colors[cid % colors.length];\n    node.style.stroke = strokes[cid % strokes.length];\n  });\n  return data;\n}\n\nexport default getData;\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-configuration-translate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-configuration-translate/index.axml",
    "content": "<view>{{description}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman 布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    description: \"Fructherman layout, gravity = 1\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        gravity: 1,\n        speed: 5,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    function layoutConfigTranslation() {\n      setTimeout(function () {\n        me.setData({\n          description: \"Fructherman layout, gravity = 5\",\n        });\n        me.graph.updateLayout({\n          gravity: 5,\n        });\n      }, 1000);\n\n      setTimeout(function () {\n        me.setData({\n          description: \"Fructherman layout, gravity = 10, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 10,\n          clustering: true,\n        });\n      }, 2500);\n\n      setTimeout(function () {\n        me.setData({\n          description: \"Fructherman layout, gravity = 20, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 20,\n        });\n      }, 4000);\n\n      setTimeout(function () {\n        me.setData({\n          description: \"Fructherman layout, gravity = 50, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 50,\n        });\n      }, 5500);\n\n      setTimeout(function () {\n        me.setData({\n          description: \"Fructherman layout, gravity = 80, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 80,\n        });\n      }, 7000);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-configuration-translate/index.json",
    "content": "{\n  \"defaultTitle\": \"参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-worker/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"4\",\n      sim_name: \"AFG\",\n      name: \"Afghanistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 57.847,\n      weight: 73.355,\n    },\n    {\n      id: \"8\",\n      sim_name: \"ALB\",\n      name: \"Albania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 556.3332546,\n      weight: 1214.363,\n    },\n    {\n      id: \"10\",\n      sim_name: \"ATA\",\n      name: \"Antarctica\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2829.367,\n      weight: 11113.564,\n    },\n    {\n      id: \"12\",\n      sim_name: \"DZA\",\n      name: \"Algeria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105217.8151,\n      weight: 146857.7593,\n    },\n    {\n      id: \"16\",\n      sim_name: \"ASM\",\n      name: \"American Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 97.623,\n      weight: 982.085,\n    },\n    {\n      id: \"20\",\n      sim_name: \"AND\",\n      name: \"Andorra\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 787.166,\n      weight: 1240.056,\n    },\n    {\n      id: \"24\",\n      sim_name: \"AGO\",\n      name: \"Angola\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.366,\n      weight: 0.211,\n    },\n    {\n      id: \"28\",\n      sim_name: \"ATG\",\n      name: \"Antigua and Barbuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30831.87949,\n      weight: 72065.168,\n    },\n    {\n      id: \"31\",\n      sim_name: \"AZE\",\n      name: \"Azerbaijan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46917.41553,\n      weight: 45114.87169,\n    },\n    {\n      id: \"32\",\n      sim_name: \"ARG\",\n      name: \"Argentina\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11347322.78,\n      weight: 38200326.47,\n    },\n    {\n      id: \"36\",\n      sim_name: \"AUS\",\n      name: \"Australia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10983308.38,\n      weight: 32933532.17,\n    },\n    {\n      id: \"40\",\n      sim_name: \"AUT\",\n      name: \"Austria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 714932.2545,\n      weight: 1683224.24,\n    },\n    {\n      id: \"44\",\n      sim_name: \"BHS\",\n      name: \"Bahamas\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 427.395,\n      weight: 969.33,\n    },\n    {\n      id: \"48\",\n      sim_name: \"BHR\",\n      name: \"Bahrain\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22229.96717,\n      weight: 53856.78001,\n    },\n    {\n      id: \"50\",\n      sim_name: \"BGD\",\n      name: \"Bangladesh\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22330.75971,\n      weight: 86944.1853,\n    },\n    {\n      id: \"51\",\n      sim_name: \"ARM\",\n      name: \"Armenia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 206.6709842,\n      weight: 223.5014745,\n    },\n    {\n      id: \"52\",\n      sim_name: \"BRB\",\n      name: \"Barbados\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4790.290139,\n      weight: 7428.399008,\n    },\n    {\n      id: \"56\",\n      sim_name: \"BEL\",\n      name: \"Belgium\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1896499.584,\n      weight: 3625004.302,\n    },\n    {\n      id: \"60\",\n      sim_name: \"BMU\",\n      name: \"Bermuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 100.264,\n      weight: 250,\n    },\n    {\n      id: \"64\",\n      sim_name: \"BTN\",\n      name: \"Bhutan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1100.663269,\n      weight: 3990.493739,\n    },\n    {\n      id: \"68\",\n      sim_name: \"BOL\",\n      name: \"Bolivia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 107152.4673,\n      weight: 117438.7654,\n    },\n    {\n      id: \"70\",\n      sim_name: \"BIH\",\n      name: \"Bosnia Herzegovina\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10652.90002,\n      weight: 25582.17925,\n    },\n    {\n      id: \"72\",\n      sim_name: \"BWA\",\n      name: \"Botswana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7635.744989,\n      weight: 24790.60442,\n    },\n    {\n      id: \"76\",\n      sim_name: \"BRA\",\n      name: \"Brazil\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7114534.381,\n      weight: 22441162.41,\n    },\n    {\n      id: \"84\",\n      sim_name: \"BLZ\",\n      name: \"Belize\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28037.35873,\n      weight: 77441.91463,\n    },\n    {\n      id: \"90\",\n      sim_name: \"SLB\",\n      name: \"Solomon Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"92\",\n      sim_name: \"VGB\",\n      name: \"British Virgin Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15328.77,\n      weight: 51127.16,\n    },\n    {\n      id: \"96\",\n      sim_name: \"BRN\",\n      name: \"Brunei Darussalam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46.438,\n      weight: 35.416,\n    },\n    {\n      id: \"100\",\n      sim_name: \"BGR\",\n      name: \"Bulgaria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1258892.481,\n      weight: 4147538.49,\n    },\n    {\n      id: \"104\",\n      sim_name: \"MMR\",\n      name: \"Myanmar\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 599204.3703,\n      weight: 1218435.323,\n    },\n    {\n      id: \"108\",\n      sim_name: \"BDI\",\n      name: \"Burundi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 523.644,\n      weight: 2841.873,\n    },\n    {\n      id: \"112\",\n      sim_name: \"BLR\",\n      name: \"Belarus\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 52538.61827,\n      weight: 137692.36,\n    },\n    {\n      id: \"116\",\n      sim_name: \"KHM\",\n      name: \"Cambodia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 167651.1526,\n      weight: 265914.0128,\n    },\n    {\n      id: \"120\",\n      sim_name: \"CMR\",\n      name: \"Cameroon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1263.861619,\n      weight: 2235.140891,\n    },\n    {\n      id: \"124\",\n      sim_name: \"CAN\",\n      name: \"Canada\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8982050.268,\n      weight: 24667183.74,\n    },\n    {\n      id: \"132\",\n      sim_name: \"CPV\",\n      name: \"Cabo Verde\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2344.96,\n      weight: 4095.993,\n    },\n    {\n      id: \"140\",\n      sim_name: \"CAF\",\n      name: \"Central African Rep.\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"144\",\n      sim_name: \"LKA\",\n      name: \"Sri Lanka\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 181369.2559,\n      weight: 489552.3718,\n    },\n    {\n      id: \"152\",\n      sim_name: \"CHL\",\n      name: \"Chile\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 412283.3672,\n      weight: 270900.3596,\n    },\n    {\n      id: \"156\",\n      sim_name: \"CHN\",\n      name: \"China\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1490564.833,\n      weight: 2304819.508,\n    },\n    {\n      id: \"170\",\n      sim_name: \"COL\",\n      name: \"Colombia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46615.80539,\n      weight: 52684.28073,\n    },\n    {\n      id: \"188\",\n      sim_name: \"CRI\",\n      name: \"Costa Rica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17710.68444,\n      weight: 28937.25094,\n    },\n    {\n      id: \"191\",\n      sim_name: \"HRV\",\n      name: \"Croatia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 192245.2115,\n      weight: 580710.257,\n    },\n    {\n      id: \"192\",\n      sim_name: \"CUB\",\n      name: \"Cuba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 793.321,\n      weight: 1620.825,\n    },\n    {\n      id: \"196\",\n      sim_name: \"CYP\",\n      name: \"Cyprus\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 47981.18874,\n      weight: 126474.07,\n    },\n    {\n      id: \"203\",\n      sim_name: \"CZE\",\n      name: \"Czech Rep.\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 922618.0722,\n      weight: 3054247.331,\n    },\n    {\n      id: \"204\",\n      sim_name: \"BEN\",\n      name: \"Benin\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12987.78421,\n      weight: 55672.72433,\n    },\n    {\n      id: \"208\",\n      sim_name: \"DNK\",\n      name: \"Denmark\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 701199.8922,\n      weight: 1992757.212,\n    },\n    {\n      id: \"212\",\n      sim_name: \"DMA\",\n      name: \"Dominica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.351,\n      weight: 0.692,\n    },\n    {\n      id: \"214\",\n      sim_name: \"DOM\",\n      name: \"Dominican Rep.\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105510.1813,\n      weight: 210275.29,\n    },\n    {\n      id: \"218\",\n      sim_name: \"ECU\",\n      name: \"Ecuador\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30957.4275,\n      weight: 49399.64362,\n    },\n    {\n      id: \"222\",\n      sim_name: \"SLV\",\n      name: \"El Salvador\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77105.01061,\n      weight: 129245.0661,\n    },\n    {\n      id: \"231\",\n      sim_name: \"ETH\",\n      name: \"Ethiopia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44330.31405,\n      weight: 29794.00055,\n    },\n    {\n      id: \"233\",\n      sim_name: \"EST\",\n      name: \"Estonia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 150772.6292,\n      weight: 458854.905,\n    },\n    {\n      id: \"234\",\n      sim_name: \"FRO\",\n      name: \"Faeroe Isds\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.298,\n      weight: 44.726,\n    },\n    {\n      id: \"242\",\n      sim_name: \"FJI\",\n      name: \"Fiji\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15966.92145,\n      weight: 24119.72685,\n    },\n    {\n      id: \"246\",\n      sim_name: \"FIN\",\n      name: \"Finland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 266364.4975,\n      weight: 753973.3063,\n    },\n    {\n      id: \"251\",\n      sim_name: \"FRA\",\n      name: \"France\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11027310.62,\n      weight: 31368277.85,\n    },\n    {\n      id: \"262\",\n      sim_name: \"DJI\",\n      name: \"Djibouti\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1936.537,\n      weight: 2932.238,\n    },\n    {\n      id: \"266\",\n      sim_name: \"GAB\",\n      name: \"Gabon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2624.516,\n      weight: 10407.907,\n    },\n    {\n      id: \"268\",\n      sim_name: \"GEO\",\n      name: \"Georgia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48754.57507,\n      weight: 158741.3575,\n    },\n    {\n      id: \"270\",\n      sim_name: \"GMB\",\n      name: \"Gambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 38.193,\n      weight: 24.45,\n    },\n    {\n      id: \"275\",\n      sim_name: \"PSE\",\n      name: \"State of Palestine\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16057.14949,\n      weight: 13745.84557,\n    },\n    {\n      id: \"276\",\n      sim_name: \"DEU\",\n      name: \"Germany\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4635549.458,\n      weight: 12647922.94,\n    },\n    {\n      id: \"288\",\n      sim_name: \"GHA\",\n      name: \"Ghana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8210.66114,\n      weight: 28560.44817,\n    },\n    {\n      id: \"292\",\n      sim_name: \"GIB\",\n      name: \"Gibraltar\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 728.465,\n      weight: 809.623,\n    },\n    {\n      id: \"296\",\n      sim_name: \"KIR\",\n      name: \"Kiribati\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.052,\n      weight: 18.562,\n    },\n    {\n      id: \"300\",\n      sim_name: \"GRC\",\n      name: \"Greece\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 263693.016,\n      weight: 644312.8604,\n    },\n    {\n      id: \"304\",\n      sim_name: \"GRL\",\n      name: \"Greenland\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"308\",\n      sim_name: \"GRD\",\n      name: \"Grenada\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4657.914,\n      weight: 9335.526,\n    },\n    {\n      id: \"316\",\n      sim_name: \"GUM\",\n      name: \"Guam\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 527.033,\n      weight: 982.642,\n    },\n    {\n      id: \"320\",\n      sim_name: \"GTM\",\n      name: \"Guatemala\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 20968.96314,\n      weight: 22893.23335,\n    },\n    {\n      id: \"324\",\n      sim_name: \"GIN\",\n      name: \"Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2636.849,\n      weight: 7422.12,\n    },\n    {\n      id: \"328\",\n      sim_name: \"GUY\",\n      name: \"Guyana\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 334196.3131,\n      weight: 520437.64,\n    },\n    {\n      id: \"332\",\n      sim_name: \"HTI\",\n      name: \"Haiti\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5.134,\n      weight: 16.128,\n    },\n    {\n      id: \"340\",\n      sim_name: \"HND\",\n      name: \"Honduras\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22936.79385,\n      weight: 43129.60369,\n    },\n    {\n      id: \"348\",\n      sim_name: \"HUN\",\n      name: \"Hungary\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2015665.793,\n      weight: 6379394.988,\n    },\n    {\n      id: \"352\",\n      sim_name: \"ISL\",\n      name: \"Iceland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 891.513,\n      weight: 2118.828,\n    },\n    {\n      id: \"360\",\n      sim_name: \"IDN\",\n      name: \"Indonesia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 175738.8156,\n      weight: 544860.3789,\n    },\n    {\n      id: \"364\",\n      sim_name: \"IRN\",\n      name: \"Iran\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7978.124,\n      weight: 20473.686,\n    },\n    {\n      id: \"368\",\n      sim_name: \"IRQ\",\n      name: \"Iraq\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 253.845,\n      weight: 246.151,\n    },\n    {\n      id: \"372\",\n      sim_name: \"IRL\",\n      name: \"Ireland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 166058.1767,\n      weight: 476236.2048,\n    },\n    {\n      id: \"376\",\n      sim_name: \"ISR\",\n      name: \"Israel\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 197912.4336,\n      weight: 431193.8203,\n    },\n    {\n      id: \"381\",\n      sim_name: \"ITA\",\n      name: \"Italy\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1288077.184,\n      weight: 1887032.489,\n    },\n    {\n      id: \"384\",\n      sim_name: \"CIV\",\n      name: \"Cote d'Ivoire\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77750.0467,\n      weight: 254222.8878,\n    },\n    {\n      id: \"388\",\n      sim_name: \"JAM\",\n      name: \"Jamaica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6751.46461,\n      weight: 12484.22296,\n    },\n    {\n      id: \"392\",\n      sim_name: \"JPN\",\n      name: \"Japan\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 189561.3237,\n      weight: 359553.4615,\n    },\n    {\n      id: \"398\",\n      sim_name: \"KAZ\",\n      name: \"Kazakhstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2535465.094,\n      weight: 10562777.14,\n    },\n    {\n      id: \"400\",\n      sim_name: \"JOR\",\n      name: \"Jordan\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2022.699859,\n      weight: 1810.995193,\n    },\n    {\n      id: \"404\",\n      sim_name: \"KEN\",\n      name: \"Kenya\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31813.863,\n      weight: 84144.582,\n    },\n    {\n      id: \"414\",\n      sim_name: \"KWT\",\n      name: \"Kuwait\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28509.72,\n      weight: 41425.612,\n    },\n    {\n      id: \"417\",\n      sim_name: \"KGZ\",\n      name: \"Kyrgyzstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 344.2343218,\n      weight: 452.0188439,\n    },\n    {\n      id: \"418\",\n      sim_name: \"LAO\",\n      name: \"Lao PDR\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 58500.6357,\n      weight: 212304.4463,\n    },\n    {\n      id: \"422\",\n      sim_name: \"LBN\",\n      name: \"Lebanon\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16263.18003,\n      weight: 38974.77174,\n    },\n    {\n      id: \"426\",\n      sim_name: \"LSO\",\n      name: \"Lesotho\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 19865.12276,\n      weight: 54350.43934,\n    },\n    {\n      id: \"428\",\n      sim_name: \"LVA\",\n      name: \"Latvia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 516410.4254,\n      weight: 1643243.015,\n    },\n    {\n      id: \"430\",\n      sim_name: \"LBR\",\n      name: \"Liberia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.35,\n      weight: 53.471,\n    },\n    {\n      id: \"434\",\n      sim_name: \"LBY\",\n      name: \"Libya\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 634.239,\n      weight: 2102.142,\n    },\n    {\n      id: \"440\",\n      sim_name: \"LTU\",\n      name: \"Lithuania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 871039.5602,\n      weight: 2446114.811,\n    },\n    {\n      id: \"442\",\n      sim_name: \"LUX\",\n      name: \"Luxembourg\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68969.99793,\n      weight: 178380.981,\n    },\n    {\n      id: \"450\",\n      sim_name: \"MDG\",\n      name: \"Madagascar\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 950.8530206,\n      weight: 3780.89311,\n    },\n    {\n      id: \"454\",\n      sim_name: \"MWI\",\n      name: \"Malawi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11553.98159,\n      weight: 41269.33681,\n    },\n    {\n      id: \"458\",\n      sim_name: \"MYS\",\n      name: \"Malaysia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 99255.71471,\n      weight: 142965.3262,\n    },\n    {\n      id: \"462\",\n      sim_name: \"MDV\",\n      name: \"Maldives\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.448,\n      weight: 14.6,\n    },\n    {\n      id: \"466\",\n      sim_name: \"MLI\",\n      name: \"Mali\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3143.270747,\n      weight: 11121.96188,\n    },\n    {\n      id: \"470\",\n      sim_name: \"MLT\",\n      name: \"Malta\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 35991.55686,\n      weight: 94799.54871,\n    },\n    {\n      id: \"478\",\n      sim_name: \"MRT\",\n      name: \"Mauritania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 292.538,\n      weight: 627.637,\n    },\n    {\n      id: \"480\",\n      sim_name: \"MUS\",\n      name: \"Mauritius\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17602.67917,\n      weight: 36755.35938,\n    },\n    {\n      id: \"484\",\n      sim_name: \"MEX\",\n      name: \"Mexico\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 571803.2432,\n      weight: 1234860.795,\n    },\n    {\n      id: \"496\",\n      sim_name: \"MNG\",\n      name: \"Mongolia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1328.368,\n      weight: 10672.694,\n    },\n    {\n      id: \"498\",\n      sim_name: \"MDA\",\n      name: \"Moldova\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 59072.0085,\n      weight: 188178.1824,\n    },\n    {\n      id: \"499\",\n      sim_name: \"MNE\",\n      name: \"Montenegro\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2444.455322,\n      weight: 6125.451,\n    },\n    {\n      id: \"504\",\n      sim_name: \"MAR\",\n      name: \"Morocco\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 86884.06321,\n      weight: 161631.8094,\n    },\n    {\n      id: \"508\",\n      sim_name: \"MOZ\",\n      name: \"Mozambique\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68388.81722,\n      weight: 146520.864,\n    },\n    {\n      id: \"512\",\n      sim_name: \"OMN\",\n      name: \"Oman\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 55530.66234,\n      weight: 88434.23327,\n    },\n    {\n      id: \"516\",\n      sim_name: \"NAM\",\n      name: \"Namibia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5168.27047,\n      weight: 7877.053106,\n    },\n    {\n      id: \"524\",\n      sim_name: \"NPL\",\n      name: \"Nepal\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4032.41279,\n      weight: 17770.75769,\n    },\n    {\n      id: \"528\",\n      sim_name: \"NLD\",\n      name: \"Netherlands\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1424347.018,\n      weight: 3125730.04,\n    },\n    {\n      id: \"531\",\n      sim_name: \"CUW\",\n      name: \"Curacao\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 535.691,\n      weight: 2358.613,\n    },\n    {\n      id: \"533\",\n      sim_name: \"ABW\",\n      name: \"Aruba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178879.593,\n      weight: 560431.967,\n    },\n    {\n      id: \"540\",\n      sim_name: \"NCL\",\n      name: \"New Caledonia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 205.777282,\n      weight: 363.439991,\n    },\n    {\n      id: \"548\",\n      sim_name: \"VUT\",\n      name: \"Vanuatu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 160.463,\n      weight: 440.332,\n    },\n    {\n      id: \"554\",\n      sim_name: \"NZL\",\n      name: \"New Zealand\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 33994.85867,\n      weight: 35177.57975,\n    },\n    {\n      id: \"558\",\n      sim_name: \"NIC\",\n      name: \"Nicaragua\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 41294.65615,\n      weight: 85186.87824,\n    },\n    {\n      id: \"562\",\n      sim_name: \"NER\",\n      name: \"Niger\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31152.35763,\n      weight: 44518.07202,\n    },\n    {\n      id: \"566\",\n      sim_name: \"NGA\",\n      name: \"Nigeria\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 323839.5301,\n      weight: 192057.843,\n    },\n    {\n      id: \"579\",\n      sim_name: \"NOR\",\n      name: \"Norway\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2382.344541,\n      weight: 2488.51136,\n    },\n    {\n      id: \"580\",\n      sim_name: \"MNP\",\n      name: \"N. Mariana Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.144,\n      weight: 1.864,\n    },\n    {\n      id: \"581\",\n      sim_name: \"UMI\",\n      name: \"United States Minor Outlying Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.008,\n      weight: 21,\n    },\n    {\n      id: \"585\",\n      sim_name: \"PLW\",\n      name: \"Palau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2.151,\n      weight: 0.22,\n    },\n    {\n      id: \"586\",\n      sim_name: \"PAK\",\n      name: \"Pakistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2412673.261,\n      weight: 4864111.072,\n    },\n    {\n      id: \"591\",\n      sim_name: \"PAN\",\n      name: \"Panama\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10056.54107,\n      weight: 26993.1125,\n    },\n    {\n      id: \"598\",\n      sim_name: \"PNG\",\n      name: \"Papua New Guinea\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 319.374,\n      weight: 2210.48,\n    },\n    {\n      id: \"600\",\n      sim_name: \"PRY\",\n      name: \"Paraguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1009228.641,\n      weight: 3862696.891,\n    },\n    {\n      id: \"604\",\n      sim_name: \"PER\",\n      name: \"Peru\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 91326.10676,\n      weight: 128637.0767,\n    },\n    {\n      id: \"608\",\n      sim_name: \"PHL\",\n      name: \"Philippines\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12041.64316,\n      weight: 16205.94695,\n    },\n    {\n      id: \"616\",\n      sim_name: \"POL\",\n      name: \"Poland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1028089.751,\n      weight: 3186360.963,\n    },\n    {\n      id: \"620\",\n      sim_name: \"PRT\",\n      name: \"Portugal\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92543.15766,\n      weight: 192795.3179,\n    },\n    {\n      id: \"624\",\n      sim_name: \"GNB\",\n      name: \"Guinea-Bissau\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37.268,\n      weight: 135,\n    },\n    {\n      id: \"626\",\n      sim_name: \"TLS\",\n      name: \"Timor-Leste\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.551,\n      weight: 10.883,\n    },\n    {\n      id: \"634\",\n      sim_name: \"QAT\",\n      name: \"Qatar\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6936.324,\n      weight: 11122.252,\n    },\n    {\n      id: \"642\",\n      sim_name: \"ROU\",\n      name: \"Romania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1778677.092,\n      weight: 5301402.18,\n    },\n    {\n      id: \"643\",\n      sim_name: \"RUS\",\n      name: \"Russian Federation\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7440900.086,\n      weight: 23852343.49,\n    },\n    {\n      id: \"646\",\n      sim_name: \"RWA\",\n      name: \"Rwanda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37520.31393,\n      weight: 73367.60768,\n    },\n    {\n      id: \"659\",\n      sim_name: \"KNA\",\n      name: \"Saint Kitts and Nevis\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.062,\n      weight: 0.009,\n    },\n    {\n      id: \"662\",\n      sim_name: \"LCA\",\n      name: \"Saint Lucia\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"670\",\n      sim_name: \"VCT\",\n      name: \"Saint Vincent and the Grenadines\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16002.19104,\n      weight: 17977.52343,\n    },\n    {\n      id: \"674\",\n      sim_name: \"SMR\",\n      name: \"San Marino\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"682\",\n      sim_name: \"SAU\",\n      name: \"Saudi Arabia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92568.76043,\n      weight: 56036.2484,\n    },\n    {\n      id: \"686\",\n      sim_name: \"SEN\",\n      name: \"Senegal\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44740.28095,\n      weight: 98109.85876,\n    },\n    {\n      id: \"688\",\n      sim_name: \"SRB\",\n      name: \"Serbia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 907006.831,\n      weight: 3003936.426,\n    },\n    {\n      id: \"690\",\n      sim_name: \"SYC\",\n      name: \"Seychelles\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 387.548,\n      weight: 246.84,\n    },\n    {\n      id: \"694\",\n      sim_name: \"SLE\",\n      name: \"Sierra Leone\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 147.544,\n      weight: 705.466,\n    },\n    {\n      id: \"699\",\n      sim_name: \"IND\",\n      name: \"India\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 9062980.928,\n      weight: 19031680.14,\n    },\n    {\n      id: \"702\",\n      sim_name: \"SGP\",\n      name: \"Singapore\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 193120.3466,\n      weight: 470488.3668,\n    },\n    {\n      id: \"703\",\n      sim_name: \"SVK\",\n      name: \"Slovakia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 580789.4685,\n      weight: 1589777.797,\n    },\n    {\n      id: \"704\",\n      sim_name: \"VNM\",\n      name: \"Vietnam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3558044.517,\n      weight: 7381230.275,\n    },\n    {\n      id: \"705\",\n      sim_name: \"SVN\",\n      name: \"Slovenia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 75282.28683,\n      weight: 227283.1873,\n    },\n    {\n      id: \"706\",\n      sim_name: \"SOM\",\n      name: \"Somalia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 240.399,\n      weight: 1055,\n    },\n    {\n      id: \"710\",\n      sim_name: \"ZAF\",\n      name: \"South Africa\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 938907.5758,\n      weight: 2190384.881,\n    },\n    {\n      id: \"716\",\n      sim_name: \"ZWE\",\n      name: \"Zimbabwe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6067.581387,\n      weight: 21394.92603,\n    },\n    {\n      id: \"724\",\n      sim_name: \"ESP\",\n      name: \"Spain\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 906018.1944,\n      weight: 1602797.031,\n    },\n    {\n      id: \"729\",\n      sim_name: \"SDN\",\n      name: \"Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18327.14063,\n      weight: 66310.50556,\n    },\n    {\n      id: \"740\",\n      sim_name: \"SUR\",\n      name: \"Suriname\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73211.6794,\n      weight: 83933.84802,\n    },\n    {\n      id: \"748\",\n      sim_name: \"SWZ\",\n      name: \"Swaziland\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6674.46,\n      weight: 16386.136,\n    },\n    {\n      id: \"752\",\n      sim_name: \"SWE\",\n      name: \"Sweden\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 439154.313,\n      weight: 1207272.863,\n    },\n    {\n      id: \"757\",\n      sim_name: \"CHE\",\n      name: \"Switzerland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 492516.8323,\n      weight: 1581172.074,\n    },\n    {\n      id: \"760\",\n      sim_name: \"SYR\",\n      name: \"Syria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4169.742,\n      weight: 7890.447,\n    },\n    {\n      id: \"762\",\n      sim_name: \"TJK\",\n      name: \"Tajikistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 300.162,\n      weight: 712.396,\n    },\n    {\n      id: \"764\",\n      sim_name: \"THA\",\n      name: \"Thailand\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5003324.321,\n      weight: 6926962.31,\n    },\n    {\n      id: \"768\",\n      sim_name: \"TGO\",\n      name: \"Togo\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16809.12488,\n      weight: 43975.34784,\n    },\n    {\n      id: \"772\",\n      sim_name: \"TKL\",\n      name: \"Tokelau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1012.213,\n      weight: 1926.401,\n    },\n    {\n      id: \"776\",\n      sim_name: \"TON\",\n      name: \"Tonga\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.18,\n      weight: 0.011,\n    },\n    {\n      id: \"780\",\n      sim_name: \"TTO\",\n      name: \"Trinidad and Tobago\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5731.199288,\n      weight: 9463.821332,\n    },\n    {\n      id: \"784\",\n      sim_name: \"ARE\",\n      name: \"United Arab Emirates\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 442646.1236,\n      weight: 684603.6345,\n    },\n    {\n      id: \"788\",\n      sim_name: \"TUN\",\n      name: \"Tunisia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 202627.2087,\n      weight: 121296.0689,\n    },\n    {\n      id: \"792\",\n      sim_name: \"TUR\",\n      name: \"Turkey\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1205009.52,\n      weight: 2692733.392,\n    },\n    {\n      id: \"795\",\n      sim_name: \"TKM\",\n      name: \"Turkmenistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1020.566,\n      weight: 3442.938,\n    },\n    {\n      id: \"796\",\n      sim_name: \"TCA\",\n      name: \"Turks and Caicos Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1029.474,\n      weight: 2224.885,\n    },\n    {\n      id: \"800\",\n      sim_name: \"UGA\",\n      name: \"Uganda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 153220.9856,\n      weight: 467968.0664,\n    },\n    {\n      id: \"804\",\n      sim_name: \"UKR\",\n      name: \"Ukraine\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8444175.988,\n      weight: 29508635.03,\n    },\n    {\n      id: \"818\",\n      sim_name: \"EGY\",\n      name: \"Egypt\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178849.3005,\n      weight: 310332.3386,\n    },\n    {\n      id: \"826\",\n      sim_name: \"GBR\",\n      name: \"United Kingdom\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1224264.681,\n      weight: 3079070.328,\n    },\n    {\n      id: \"834\",\n      sim_name: \"TZA\",\n      name: \"Tanzania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 152688.2977,\n      weight: 493774.3125,\n    },\n    {\n      id: \"838\",\n      sim_name: \"\",\n      name: \"Free Zones\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1488.719,\n      weight: 4904.648,\n    },\n    {\n      id: \"842\",\n      sim_name: \"USA\",\n      name: \"United States\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23694720.38,\n      weight: 66623810.06,\n    },\n    {\n      id: \"854\",\n      sim_name: \"BFA\",\n      name: \"Burkina Faso\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3861.072093,\n      weight: 17132.42303,\n    },\n    {\n      id: \"858\",\n      sim_name: \"URY\",\n      name: \"Uruguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1550881.026,\n      weight: 4155101.445,\n    },\n    {\n      id: \"860\",\n      sim_name: \"UZB\",\n      name: \"Uzbekistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2094.579,\n      weight: 7229.088,\n    },\n    {\n      id: \"862\",\n      sim_name: \"VEN\",\n      name: \"Venezuela\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73.53,\n      weight: 91.675,\n    },\n    {\n      id: \"882\",\n      sim_name: \"WSM\",\n      name: \"Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.603,\n      weight: 6.415,\n    },\n    {\n      id: \"887\",\n      sim_name: \"YEM\",\n      name: \"Yemen\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48184.79726,\n      weight: 245917.1867,\n    },\n    {\n      id: \"894\",\n      sim_name: \"ZMB\",\n      name: \"Zambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 470664.7641,\n      weight: 863829.2506,\n    },\n    {\n      id: \"86\",\n      sim_name: \"IOT\",\n      name: \"British Indian Ocean Territory\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 36.802,\n      weight: 21.33,\n    },\n    {\n      id: \"136\",\n      sim_name: \"CYM\",\n      name: \"Cayman Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"148\",\n      sim_name: \"TCD\",\n      name: \"Chad\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 24.335,\n      weight: 103.232,\n    },\n    {\n      id: \"166\",\n      sim_name: \"CCK\",\n      name: \"Cocos Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 2.417,\n      weight: 2,\n    },\n    {\n      id: \"174\",\n      sim_name: \"COM\",\n      name: \"Comoros\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 19,\n      weight: 21,\n    },\n    {\n      id: \"226\",\n      sim_name: \"GNQ\",\n      name: \"Equatorial Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"232\",\n      sim_name: \"ERI\",\n      name: \"Eritrea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"238\",\n      sim_name: \"FLK\",\n      name: \"Falkland Isds (Malvinas)\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 177.295,\n      weight: 47.1,\n    },\n    {\n      id: \"258\",\n      sim_name: \"PYF\",\n      name: \"French Polynesia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 1.65,\n      weight: 0.6,\n    },\n    {\n      id: \"534\",\n      sim_name: \"SXM\",\n      name: \"Sint Maarten (Dutch part)\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"584\",\n      sim_name: \"MHL\",\n      name: \"Marshall Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 47.581,\n      weight: 26.942,\n    },\n    {\n      id: \"612\",\n      sim_name: \"PCN\",\n      name: \"Pitcairn\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 95.892,\n      weight: 265,\n    },\n    {\n      id: \"728\",\n      sim_name: \"SSD\",\n      name: \"South Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"798\",\n      sim_name: \"TUV\",\n      name: \"Tuvalu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"184\",\n      sim_name: \"COK\",\n      name: \"Cook Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"654\",\n      sim_name: \"SHN\",\n      name: \"Saint Helena\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"660\",\n      sim_name: \"AIA\",\n      name: \"Anguilla\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"678\",\n      sim_name: \"STP\",\n      name: \"Sao Tome and Principe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 198.633,\n      weight: 350,\n    },\n    {\n      id: \"837\",\n      sim_name: \"\",\n      name: \"Bunkers\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"732\",\n      sim_name: \"ESH\",\n      name: \"Western Sahara\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2015,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"666\",\n      sim_name: \"SPM\",\n      name: \"Saint Pierre and Miquelon\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2016,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"162\",\n      sim_name: \"CXR\",\n      name: \"Christmas Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 131.818,\n      weight: 99.95,\n    },\n    {\n      id: \"336\",\n      sim_name: \"VAT\",\n      name: \"Holy See\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 24.492,\n      weight: 42.805,\n    },\n    {\n      id: \"520\",\n      sim_name: \"NRU\",\n      name: \"Nauru\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 496.386,\n      weight: 457.721,\n    },\n    {\n      id: \"535\",\n      sim_name: \"BES\",\n      name: \"Bonaire\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 326.45,\n      weight: 551.554,\n    },\n  ],\n  edges: [\n    {\n      eid: \"e16\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.049\",\n      weight: \"11.52\",\n      embodiedLand: \"4.765\",\n      embodiedWater: \"348.756\",\n    },\n    {\n      eid: \"e17\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.306\",\n      weight: \"64.74\",\n      embodiedLand: \"37.716\",\n      embodiedWater: \"726.512\",\n    },\n    {\n      eid: \"e18\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"94.052\",\n      weight: \"230.588\",\n      embodiedLand: \"141.564\",\n      embodiedWater: \"1851.16\",\n    },\n    {\n      eid: \"e19\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"13.068\",\n      weight: \"65.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e20\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"34.399\",\n      weight: \"171.996\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e21\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e22\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.812\",\n      weight: \"4.061\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e43\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e44\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e45\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.875\",\n      weight: \"1.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e48\",\n      source: \"10\",\n      sourceSimName: \"ATA\",\n      sourceRegion: \"Antarctica\",\n      sourceName: \"Other\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.837\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e85\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.886\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e86\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"23.9136184\",\n      weight: \"40.2929249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e88\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e89\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.9393726\",\n      weight: \"1.75517982\",\n      embodiedLand: \"0.38365313\",\n      embodiedWater: \"17.7067202\",\n    },\n    {\n      eid: \"e90\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e91\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e92\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.249\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e93\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e103\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e104\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e105\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e115\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e116\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"128.652\",\n      weight: \"96\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e117\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5.117\",\n      weight: \"26.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e118\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e119\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"798.871\",\n      weight: \"4322.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e128\",\n      source: \"24\",\n      sourceSimName: \"AGO\",\n      sourceRegion: \"Angola\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.401\",\n      weight: \"0.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e155\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.91\",\n      weight: \"1.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e156\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"177.885\",\n      weight: \"967.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e157\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e158\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"51.175\",\n      weight: \"76.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e159\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e160\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2456.668\",\n      weight: \"2481.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e182\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.356\",\n      weight: \"27.2\",\n      embodiedLand: \"13.377\",\n      embodiedWater: \"156.237\",\n    },\n    {\n      eid: \"e183\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.344\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e185\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"108.397\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e186\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.814\",\n      weight: \"2.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e187\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.044\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e188\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"5.8\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e351\",\n      source: \"32\",\n      sourceSimName: \"ARG\",\n      sourceRegion: \"Argentina\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.29\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e494\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"25.78\",\n      weight: \"206.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e495\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.036\",\n      weight: \"18.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e496\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.503\",\n      weight: \"101.04\",\n      embodiedLand: \"41.936\",\n      embodiedWater: \"35.869\",\n    },\n    {\n      eid: \"e497\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.141\",\n      weight: \"0.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e498\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e499\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e615\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.335\",\n      weight: \"1.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e616\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.006\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.109\",\n    },\n    {\n      eid: \"e617\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.018\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.043\",\n    },\n    {\n      eid: \"e618\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.37\",\n      weight: \"0.2\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e619\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"147.228\",\n      weight: \"490.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e620\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.761\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e621\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.19\",\n      weight: \"1.625\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e622\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e635\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e636\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"55.7439049\",\n      weight: \"55.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e637\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e638\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e694\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e696\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e697\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.929\",\n      weight: \"7.4\",\n      embodiedLand: \"2.029\",\n      embodiedWater: \"95.282\",\n    },\n    {\n      eid: \"e698\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.248\",\n      weight: \"1.862\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"18.661\",\n    },\n    {\n      eid: \"e699\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e700\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"136\",\n      targetSimName: \"CYM\",\n      targetName: \"Cayman Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e701\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.067\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e702\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"124.768\",\n      weight: \"92.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e754\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e755\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.969\",\n      weight: \"1.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e756\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.12\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e757\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.138\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e758\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.494\",\n      weight: \"0.915\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e776\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e777\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.47\",\n      weight: \"30.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e778\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"795\",\n      targetSimName: \"TKM\",\n      targetName: \"Turkmenistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"8.71\",\n      weight: \"1.675\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e798\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e799\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e800\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e801\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e802\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e803\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.199\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e804\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e805\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e990\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.472\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e992\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.178\",\n      weight: \"0.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e993\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"626\",\n      targetSimName: \"TLS\",\n      targetName: \"Timor-Leste\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.32\",\n      weight: \"357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e998\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.135\",\n      weight: \"42\",\n      embodiedLand: \"\",\n      embodiedWater: \"43.89\",\n    },\n    {\n      eid: \"e999\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"78.825\",\n      weight: \"212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1008\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.302\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1009\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.708\",\n      weight: \"25.193\",\n      embodiedLand: \"8.687\",\n      embodiedWater: \"31.29\",\n    },\n    {\n      eid: \"e1010\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.024\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1095\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.5\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1097\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.14\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1098\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1099\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.249\",\n      weight: \"0.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1100\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"40.776\",\n      weight: \"17.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1101\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.83\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1102\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"376.317\",\n      weight: \"60.619\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1103\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.19096077\",\n      weight: \"5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1104\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.406\",\n      weight: \"0.043\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1105\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.287\",\n      weight: \"2.911\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1106\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"30.2\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1107\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.4\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1108\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1109\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.683\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1141\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.132\",\n      weight: \"0.13\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"0.087\",\n    },\n    {\n      eid: \"e1142\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.356\",\n      weight: \"0.38\",\n      embodiedLand: \"0.09\",\n      embodiedWater: \"0.274\",\n    },\n    {\n      eid: \"e1143\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"111.882952\",\n      weight: \"50.4723321\",\n      embodiedLand: \"14.3646986\",\n      embodiedWater: \"12.7187331\",\n    },\n    {\n      eid: \"e1144\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1145\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1146\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1147\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.501\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1164\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1165\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1319\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"700.563\",\n      weight: \"3567.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1320\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.279294\",\n      weight: \"36.0515982\",\n      embodiedLand: \"12.9758444\",\n      embodiedWater: \"467.733115\",\n    },\n    {\n      eid: \"e1321\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1322\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"80.401\",\n      weight: \"267\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1323\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.084\",\n      weight: \"0.743\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1324\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"41.263\",\n      weight: \"73.557\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1325\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.673\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1326\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1350\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1351\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1352\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.033\",\n      weight: \"0.176\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1353\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.767\",\n      weight: \"2.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1354\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"34.953\",\n      weight: \"152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1356\",\n      source: \"86\",\n      sourceSimName: \"IOT\",\n      sourceRegion: \"British Indian Ocean Territory\",\n      sourceName: \"Oceania\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1361\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.167\",\n      weight: \"42.315\",\n      embodiedLand: \"3.486\",\n      embodiedWater: \"5.332\",\n    },\n    {\n      eid: \"e1362\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1377\",\n      source: \"92\",\n      sourceSimName: \"VGB\",\n      sourceRegion: \"British Virgin Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"101.43\",\n      weight: \"490\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1387\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1388\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1389\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38.441\",\n      weight: \"44.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1390\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.04\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1483\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24858.849\",\n      weight: \"99000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1484\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"4.755\",\n      weight: \"1.934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1485\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"93.704\",\n      weight: \"126.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1486\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"10.413\",\n      weight: \"27.25\",\n      embodiedLand: \"24.418\",\n      embodiedWater: \"8.965\",\n    },\n    {\n      eid: \"e1487\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17703.297\",\n      weight: \"77309.781\",\n      embodiedLand: \"18435.802\",\n      embodiedWater: \"20873.641\",\n    },\n    {\n      eid: \"e1489\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"18.8800973\",\n      weight: \"86.0444724\",\n      embodiedLand: \"30.7293419\",\n      embodiedWater: \"1.7204033\",\n    },\n    {\n      eid: \"e1490\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"160.110577\",\n      weight: \"483.392365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1491\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7432.909\",\n      weight: \"38483.49\",\n      embodiedLand: \"9381.188\",\n      embodiedWater: \"11121.729\",\n    },\n    {\n      eid: \"e1493\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"189.513\",\n      weight: \"314\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1494\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.029\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1495\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"12.528\",\n      weight: \"0.77\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1496\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1497\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5189.99451\",\n      weight: \"28567.1783\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1498\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14084.1964\",\n      weight: \"76915.5622\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1499\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"692.331\",\n      weight: \"4066.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1500\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"60.703\",\n      weight: \"339.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1609\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.25\",\n      weight: \"12.219\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1610\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"112\",\n      targetSimName: \"BLR\",\n      targetName: \"Belarus\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"25.7\",\n      weight: \"75\",\n      embodiedLand: \"25.54\",\n      embodiedWater: \"174.3\",\n    },\n    {\n      eid: \"e1611\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"108.75\",\n      weight: \"129.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1612\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1613\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"43.5\",\n      weight: \"52.27\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1614\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"104.4\",\n      weight: \"125.448\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1615\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"598\",\n      targetSimName: \"PNG\",\n      targetName: \"Papua New Guinea\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.75\",\n      weight: \"54.372\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1616\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1617\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1775\",\n      weight: \"1500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1619\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"103.45\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1620\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"137.5\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1621\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1622\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"44.4\",\n      weight: \"120\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1633\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.606\",\n      weight: \"0.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1634\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.844\",\n      weight: \"0.74\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1635\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"53.041\",\n      weight: \"90\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1636\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.492\",\n      weight: \"1.142\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1637\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.021\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1679\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1680\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.1\",\n      weight: \"21.96\",\n      embodiedLand: \"22.086\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1681\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"120.2641915\",\n      weight: \"207.744065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1682\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.2\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1683\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"44.5214625\",\n      weight: \"83.785883\",\n      embodiedLand: \"26.1168536\",\n      embodiedWater: \"7.20580295\",\n    },\n    {\n      eid: \"e1684\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.083\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1685\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"991.896\",\n      weight: \"5092.85\",\n      embodiedLand: \"1019.042\",\n      embodiedWater: \"6610.519\",\n    },\n    {\n      eid: \"e1686\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"165.472676\",\n      weight: \"53.1172551\",\n      embodiedLand: \"17.4316463\",\n      embodiedWater: \"2398.72164\",\n    },\n    {\n      eid: \"e1687\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.31077251\",\n      weight: \"2.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1688\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"27.5722272\",\n      weight: \"53.4685049\",\n      embodiedLand: \"19.9639795\",\n      embodiedWater: \"4.70535121\",\n    },\n    {\n      eid: \"e1689\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.773\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1690\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"10.6\",\n      weight: \"26.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1691\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"482.1\",\n      weight: \"2008.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1693\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.9\",\n      weight: \"24.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1694\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"27\",\n      weight: \"72.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1695\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.9\",\n      weight: \"43.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1696\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1.4152175\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1697\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"15.216\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1792\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.058\",\n      weight: \"1.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1793\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"19.9307517\",\n      weight: \"54.9268674\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1795\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"722.843\",\n      weight: \"2000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1796\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.05\",\n      embodiedLand: \"0.0215\",\n      embodiedWater: \"0.279\",\n    },\n    {\n      eid: \"e1797\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.5893875\",\n      weight: \"46\",\n      embodiedLand: \"22.382\",\n      embodiedWater: \"419.888\",\n    },\n    {\n      eid: \"e1798\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1799\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.49\",\n      weight: \"24.993\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1800\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"35.6075332\",\n      weight: \"62.4991805\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1801\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"87.223\",\n      weight: \"190\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1802\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"123.708\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1803\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"49.454\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1804\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.332\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1830\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1831\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1832\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.398\",\n      weight: \"0.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1833\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.09\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1834\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.031\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1835\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.069\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1836\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2006\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2007\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.816\",\n      weight: \"27.5\",\n      embodiedLand: \"11.52\",\n      embodiedWater: \"91.465\",\n    },\n    {\n      eid: \"e2008\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.942\",\n      weight: \"5.224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2009\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1549.864\",\n      weight: \"6461\",\n      embodiedLand: \"2292.263\",\n      embodiedWater: \"24648.715\",\n    },\n    {\n      eid: \"e2010\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.366\",\n      weight: \"29.392\",\n      embodiedLand: \"4.087\",\n      embodiedWater: \"203.275\",\n    },\n    {\n      eid: \"e2011\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.105\",\n      weight: \"0.346\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2012\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.087\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2013\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10.485\",\n      weight: \"23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2014\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"71.847\",\n      weight: \"90.718\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2015\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.063\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2026\",\n      source: \"136\",\n      sourceSimName: \"CYM\",\n      sourceRegion: \"Cayman Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2028\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"256.296\",\n      weight: \"584\",\n      embodiedLand: \"388.652\",\n      embodiedWater: \"3227.184\",\n    },\n    {\n      eid: \"e2029\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2030\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2122\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.617\",\n      weight: \"0.4\",\n      embodiedLand: \"0.171\",\n      embodiedWater: \"9.947\",\n    },\n    {\n      eid: \"e2123\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.022\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.074\",\n    },\n    {\n      eid: \"e2124\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.465\",\n      weight: \"4\",\n      embodiedLand: \"1.462\",\n      embodiedWater: \"24.56\",\n    },\n    {\n      eid: \"e2125\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"674.364\",\n      weight: \"998.75\",\n      embodiedLand: \"394.423\",\n      embodiedWater: \"8358.539\",\n    },\n    {\n      eid: \"e2126\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.169684\",\n      weight: \"10\",\n      embodiedLand: \"4.832\",\n      embodiedWater: \"129.36\",\n    },\n    {\n      eid: \"e2127\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.6929921\",\n      weight: \"0.39911438\",\n      embodiedLand: \"0.02313548\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2128\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2129\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"956.722\",\n      weight: \"1340\",\n      embodiedLand: \"468.637\",\n      embodiedWater: \"10142.46\",\n    },\n    {\n      eid: \"e2130\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.129\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2131\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2581.403\",\n      weight: \"1630\",\n      embodiedLand: \"593.987\",\n      embodiedWater: \"13326.88\",\n    },\n    {\n      eid: \"e2132\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01799708\",\n      weight: \"0.01963527\",\n      embodiedLand: \"0.00589058\",\n      embodiedWater: \"0.15119156\",\n    },\n    {\n      eid: \"e2133\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.055\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2135\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.797\",\n      weight: \"0.084\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2139\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2140\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.114\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2141\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2142\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2143\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.421\",\n      weight: \"2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2227\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.466\",\n      weight: \"0.804\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2228\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.644\",\n      weight: \"1\",\n      embodiedLand: \"0.016\",\n      embodiedWater: \"14.459\",\n    },\n    {\n      eid: \"e2229\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2230\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"32.659\",\n      weight: \"18.144\",\n      embodiedLand: \"2.013\",\n      embodiedWater: \"25.347\",\n    },\n    {\n      eid: \"e2231\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"50.962\",\n      weight: \"29.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2232\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.158\",\n      weight: \"0.366\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2233\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.57\",\n      weight: \"0.216\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2234\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.176\",\n      weight: \"3.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2235\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"13.32\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2236\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2237\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.426\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2238\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2239\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.899\",\n      weight: \"0.564\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2240\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2241\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2433\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"63.059\",\n      weight: \"215.408\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2434\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.045\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2435\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"9502.75\",\n      weight: \"30250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2436\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.317\",\n      weight: \"40.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2439\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2440\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2507\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2508\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.945\",\n      weight: \"5.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2509\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2510\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"1.68\",\n      embodiedLand: \"0.624\",\n      embodiedWater: \"11.764\",\n    },\n    {\n      eid: \"e2511\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.99707857\",\n      weight: \"0.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2513\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2514\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02360264\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2515\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.014\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2516\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.661\",\n      weight: \"0.55\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2517\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"24.4083904\",\n      weight: \"21.9972541\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2518\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2519\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"29.328\",\n      weight: \"9.319\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2520\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2521\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"28.266\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2522\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.253\",\n      weight: \"0.239\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2526\",\n      source: \"174\",\n      sourceSimName: \"COM\",\n      sourceRegion: \"Comoros\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"64.83\",\n      weight: \"89.969\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2562\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.003\",\n    },\n    {\n      eid: \"e2563\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.068\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2564\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"770.502\",\n      weight: \"4498.68\",\n      embodiedLand: \"242.589\",\n      embodiedWater: \"7341.846\",\n    },\n    {\n      eid: \"e2565\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2566\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"17.311\",\n      weight: \"18.402\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2630\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4009.71895\",\n      weight: \"10426.471\",\n      embodiedLand: \"4547.15483\",\n      embodiedWater: \"417.058952\",\n    },\n    {\n      eid: \"e2631\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.162\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"0.163\",\n    },\n    {\n      eid: \"e2632\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.009\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e2634\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.4225\",\n      weight: \"1.3\",\n      embodiedLand: \"0.385\",\n      embodiedWater: \"0.016\",\n    },\n    {\n      eid: \"e2635\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2636\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"36.137\",\n      weight: \"68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2637\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.947\",\n      weight: \"0.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2639\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"356.137\",\n      weight: \"742.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2640\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.272\",\n      weight: \"25.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2641\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"195.135725\",\n      weight: \"405.023926\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2642\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1927.978\",\n      weight: \"5003.87\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2653\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.015\",\n      weight: \"22\",\n      embodiedLand: \"1.121\",\n      embodiedWater: \"30.294\",\n    },\n    {\n      eid: \"e2654\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2655\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2710\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.025\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2711\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2712\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"275.094068\",\n      weight: \"518.04557\",\n      embodiedLand: \"852.454555\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2713\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.123\",\n      weight: \"0.515\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2714\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.749\",\n      weight: \"0.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2815\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.19775118\",\n      weight: \"19.4429394\",\n      embodiedLand: \"1.01453375\",\n      embodiedWater: \"6.43614933\",\n    },\n    {\n      eid: \"e2816\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"47.058\",\n      weight: \"31.738\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2817\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"465.089207\",\n      weight: \"1056.18955\",\n      embodiedLand: \"59.5149034\",\n      embodiedWater: \"349.59874\",\n    },\n    {\n      eid: \"e2818\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.53\",\n      weight: \"0.296\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2819\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2820\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1233.57708\",\n      weight: \"2500\",\n      embodiedLand: \"273.915\",\n      embodiedWater: \"302.5\",\n    },\n    {\n      eid: \"e2821\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.512\",\n      weight: \"0.287\",\n      embodiedLand: \"1.023\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2822\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.392\",\n      weight: \"50.1\",\n      embodiedLand: \"8.127\",\n      embodiedWater: \"0.601\",\n    },\n    {\n      eid: \"e2823\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.59\",\n      weight: \"1.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2824\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"53.08\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2825\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.409\",\n      weight: \"7.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2826\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2827\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12283.216\",\n      weight: \"51375.101\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2828\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6823.806\",\n      weight: \"28549.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2852\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.041\",\n      weight: \"0.125\",\n      embodiedLand: \"0.007\",\n      embodiedWater: \"1.054\",\n    },\n    {\n      eid: \"e2853\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.541\",\n      weight: \"1\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.369\",\n    },\n    {\n      eid: \"e2854\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.017\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.129\",\n    },\n    {\n      eid: \"e2855\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.19\",\n      weight: \"17.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2856\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.874\",\n      weight: \"0.506\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2857\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"17.743\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2858\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"15.773\",\n      weight: \"220\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2992\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17845.867\",\n      weight: \"88000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2994\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"21.161\",\n      weight: \"46\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2995\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2996\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2997\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.023\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.191\",\n    },\n    {\n      eid: \"e2999\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.679\",\n      weight: \"14\",\n      embodiedLand: \"3.32\",\n      embodiedWater: \"25.83\",\n    },\n    {\n      eid: \"e3000\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.035\",\n      weight: \"0.031\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.435\",\n    },\n    {\n      eid: \"e3001\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.53\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3002\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.629\",\n      weight: \"272.52\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3003\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3005\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3006\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3007\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.206\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3008\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"22.102\",\n      weight: \"41.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3009\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3020\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.813\",\n      weight: \"1.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3021\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2016\",\n      value: \"6.079\",\n      weight: \"9.869\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3022\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3073\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"62.9969656\",\n      weight: \"133.149681\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3074\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3075\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3076\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.744\",\n      weight: \"63.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3077\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3078\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.752\",\n      weight: \"0.558\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3080\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3081\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3082\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.258\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3129\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.25\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3130\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"655.12\",\n      weight: \"117.45\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3131\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.508\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3132\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.061\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3133\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3134\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.20254593\",\n      weight: \"0.0630884\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3136\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3137\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3151\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e3152\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.36\",\n      weight: \"26.04\",\n      embodiedLand: \"4.462\",\n      embodiedWater: \"131.762\",\n    },\n    {\n      eid: \"e3153\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.231\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3154\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.36\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3155\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3156\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25\",\n      weight: \"0.076\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3157\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.651\",\n      weight: \"0.464\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3158\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.55\",\n      weight: \"1.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3160\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3161\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3214\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.757\",\n      weight: \"0.78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3215\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3216\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.24744121\",\n      weight: \"0.12643068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3217\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.1\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"0.881\",\n    },\n    {\n      eid: \"e3218\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.045\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3219\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3220\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.025\",\n      embodiedLand: \"0.073\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3221\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.015\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3223\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.388\",\n      weight: \"0.705\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"0.492\",\n    },\n    {\n      eid: \"e3224\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"17.374\",\n      weight: \"40\",\n      embodiedLand: \"16.921\",\n      embodiedWater: \"2.24\",\n    },\n    {\n      eid: \"e3225\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.641\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3226\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3231\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3232\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3283\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.169\",\n      weight: \"40.581\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3284\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"12273.129\",\n      weight: \"69000\",\n      embodiedLand: \"19376.402\",\n      embodiedWater: \"3036\",\n    },\n    {\n      eid: \"e3285\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8159.47956\",\n      weight: \"44000\",\n      embodiedLand: \"12365.057\",\n      embodiedWater: \"308\",\n    },\n    {\n      eid: \"e3286\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5697.635\",\n      weight: \"31498.19\",\n      embodiedLand: \"8131.804\",\n      embodiedWater: \"10992.868\",\n    },\n    {\n      eid: \"e3287\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"19.337\",\n      weight: \"53.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3288\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6239.34\",\n      weight: \"22384.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3289\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3166.555\",\n      weight: \"15864\",\n      embodiedLand: \"4286.655\",\n      embodiedWater: \"5393.76\",\n    },\n    {\n      eid: \"e3290\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.019\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e3291\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.176\",\n      weight: \"2.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3292\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12.414\",\n      weight: \"49.122\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3293\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3294\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"629.386\",\n      weight: \"2596.853\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3295\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3296\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"31.581\",\n      weight: \"76.353\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3297\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4160.65711\",\n      weight: \"25476.5045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3338\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.068\",\n      weight: \"88.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3339\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3435\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"481.381304\",\n      weight: \"1599.203\",\n      embodiedLand: \"471.659\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3436\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.092\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3437\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3438\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.086\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3439\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.48\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3440\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.018\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e3441\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.029\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3442\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.849\",\n      weight: \"36.603\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3443\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.071\",\n      weight: \"0.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3444\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.572\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3445\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.1\",\n      weight: \"0.929\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3446\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.762\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3447\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3448\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"1.191\",\n      weight: \"0.475\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3449\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.182\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3640\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3641\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3643\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3644\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"796\",\n      targetSimName: \"TCA\",\n      targetName: \"Turks and Caicos Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3646\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.303\",\n      weight: \"0.161\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.66\",\n    },\n    {\n      eid: \"e3647\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.76\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3661\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1697.791\",\n      weight: \"4715.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3662\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3663\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.466\",\n      weight: \"5.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3674\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3675\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3676\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3677\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3707\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.048\",\n      weight: \"0.038\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3708\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4.8\",\n      weight: \"24\",\n      embodiedLand: \"18.872\",\n      embodiedWater: \"2.136\",\n    },\n    {\n      eid: \"e3709\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3710\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.678\",\n      weight: \"38.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3711\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.252\",\n      weight: \"0.455\",\n      embodiedLand: \"0.074\",\n      embodiedWater: \"1.176\",\n    },\n    {\n      eid: \"e3712\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27\",\n      weight: \"4.86\",\n      embodiedLand: \"2.151\",\n      embodiedWater: \"5.56\",\n    },\n    {\n      eid: \"e3713\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.61599203\",\n      weight: \"1.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3714\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"23.6\",\n      weight: \"47.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3715\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.179\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3716\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"9.5\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3718\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.00114478\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3719\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.278\",\n      weight: \"19.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3720\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3734\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8.156\",\n      weight: \"9\",\n      embodiedLand: \"0.265\",\n      embodiedWater: \"11.43\",\n    },\n    {\n      eid: \"e3735\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3766\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"1.468\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3767\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"6.887\",\n      weight: \"10.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3769\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.621\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3770\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.922\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3771\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.035\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3963\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.908\",\n      weight: \"23\",\n      embodiedLand: \"6.114\",\n      embodiedWater: \"87.285\",\n    },\n    {\n      eid: \"e3964\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3965\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.0348425\",\n      weight: \"26\",\n      embodiedLand: \"4.29\",\n      embodiedWater: \"0.234\",\n    },\n    {\n      eid: \"e3966\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3967\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"612\",\n      targetSimName: \"PCN\",\n      targetName: \"Pitcairn\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3968\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.096\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4026\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4028\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"427.155\",\n      weight: \"1504\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4029\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4034\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4035\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.999\",\n      weight: \"3.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4038\",\n      source: \"296\",\n      sourceSimName: \"KIR\",\n      sourceRegion: \"Kiribati\",\n      sourceName: \"Oceania\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.46\",\n      weight: \"0.327\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4130\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.592\",\n      weight: \"0.381\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4131\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.535\",\n      weight: \"0.685\",\n      embodiedLand: \"0.344\",\n      embodiedWater: \"2.925\",\n    },\n    {\n      eid: \"e4132\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.225\",\n      weight: \"0.51\",\n      embodiedLand: \"0.297\",\n      embodiedWater: \"0.907\",\n    },\n    {\n      eid: \"e4133\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4134\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.619\",\n      weight: \"0.9\",\n      embodiedLand: \"0.215\",\n      embodiedWater: \"12.695\",\n    },\n    {\n      eid: \"e4135\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.643\",\n      weight: \"0.811\",\n      embodiedLand: \"0.35\",\n      embodiedWater: \"22.782\",\n    },\n    {\n      eid: \"e4136\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9.296\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4139\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.194\",\n      weight: \"0.105\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4140\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4141\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.549\",\n      weight: \"0.33\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4144\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4145\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.094\",\n      weight: \"0.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4160\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4161\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.258\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4166\",\n      source: \"316\",\n      sourceSimName: \"GUM\",\n      sourceRegion: \"Guam\",\n      sourceName: \"Oceania\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.645\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4197\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.45\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4198\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4199\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4200\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.225\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4201\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.383\",\n      weight: \"0.959\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4222\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4223\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1121.1076\",\n      weight: \"9902.574\",\n      embodiedLand: \"74.073\",\n      embodiedWater: \"16091.683\",\n    },\n    {\n      eid: \"e4224\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"151.325\",\n      weight: \"781.716\",\n      embodiedLand: \"851.781\",\n      embodiedWater: \"8133.755\",\n    },\n    {\n      eid: \"e4225\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.702\",\n      weight: \"22.538\",\n      embodiedLand: \"26.147\",\n      embodiedWater: \"54.384\",\n    },\n    {\n      eid: \"e4226\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4227\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"514.56\",\n      weight: \"516\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4229\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4274\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.93\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4275\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"12.9452924\",\n      weight: \"80.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4276\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"79.617\",\n      weight: \"404.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4277\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"146.081\",\n      weight: \"186.97\",\n      embodiedLand: \"46.045\",\n      embodiedWater: \"1298.32\",\n    },\n    {\n      eid: \"e4278\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2751.76304\",\n      weight: \"3460.64811\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4279\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.957\",\n      weight: \"2.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4280\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4281\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"336\",\n      targetSimName: \"VAT\",\n      targetName: \"Holy See\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4282\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.016\",\n      weight: \"50.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4283\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.893\",\n      weight: \"24.705\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4284\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4285\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.422\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4298\",\n      source: \"332\",\n      sourceSimName: \"HTI\",\n      sourceRegion: \"Haiti\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4323\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"201.042\",\n      weight: \"323.82\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4324\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.24\",\n      weight: \"39.916\",\n      embodiedLand: \"24.266\",\n      embodiedWater: \"18.162\",\n    },\n    {\n      eid: \"e4326\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"47.6473533\",\n      weight: \"48.6243931\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4327\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4328\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.858\",\n      weight: \"8.732\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4329\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.64\",\n      weight: \"96.16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4428\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4429\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4430\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.109\",\n      weight: \"0.125\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4431\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"119.521\",\n      weight: \"420\",\n      embodiedLand: \"51.421\",\n      embodiedWater: \"660.66\",\n    },\n    {\n      eid: \"e4432\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"658.77\",\n      weight: \"2218.1\",\n      embodiedLand: \"206.877\",\n      embodiedWater: \"2437.692\",\n    },\n    {\n      eid: \"e4434\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"83.377\",\n      weight: \"273\",\n      embodiedLand: \"31.384\",\n      embodiedWater: \"559.377\",\n    },\n    {\n      eid: \"e4435\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.016\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e4436\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.865\",\n      weight: \"21\",\n      embodiedLand: \"2.303\",\n      embodiedWater: \"31.017\",\n    },\n    {\n      eid: \"e4437\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"13.347\",\n      weight: \"102.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4439\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"677.568524\",\n      weight: \"630.017434\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4461\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.403\",\n      weight: \"4.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4462\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"62.13\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4463\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4464\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4465\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4568\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.048\",\n      weight: \"120.8\",\n      embodiedLand: \"11.771\",\n      embodiedWater: \"164.409\",\n    },\n    {\n      eid: \"e4569\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.273\",\n      weight: \"67.74\",\n      embodiedLand: \"35.111\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4570\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.304\",\n      weight: \"0.144\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4571\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4572\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.065\",\n      weight: \"0.081\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"0.774\",\n    },\n    {\n      eid: \"e4573\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"64.711\",\n      weight: \"26.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4574\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"219\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4575\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.083\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4576\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.501\",\n      weight: \"0.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4577\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2424\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4578\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.756\",\n      weight: \"0.947\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4579\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"74.884\",\n      weight: \"270\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4581\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.437\",\n      weight: \"0.069\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4582\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.06\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4583\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.59\",\n      weight: \"0.745\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4584\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.473\",\n      weight: \"1.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4635\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4159.919\",\n      weight: \"14678.618\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4636\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.04\",\n      weight: \"0.15\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"2.752\",\n    },\n    {\n      eid: \"e4637\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.595\",\n      weight: \"6.84\",\n      embodiedLand: \"2.127\",\n      embodiedWater: \"193.278\",\n    },\n    {\n      eid: \"e4638\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"8.79\",\n      weight: \"43.87\",\n      embodiedLand: \"15.986\",\n      embodiedWater: \"396.322\",\n    },\n    {\n      eid: \"e4639\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.24\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4640\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.044\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4641\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4642\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.244\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4643\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"398.292\",\n      weight: \"821.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4644\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.079\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4645\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.62\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4646\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.157\",\n      weight: \"0.279\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4647\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.129\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4649\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4650\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.078\",\n      weight: \"1.118\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4661\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4662\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.843\",\n      weight: \"1.59\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4663\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"160.874\",\n      weight: \"36.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4664\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4731\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"159.042\",\n      weight: \"32.792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4732\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.867\",\n      weight: \"44.1\",\n      embodiedLand: \"6.096\",\n      embodiedWater: \"34.089\",\n    },\n    {\n      eid: \"e4733\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.516\",\n      weight: \"0.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4734\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"21.023\",\n      weight: \"42.5\",\n      embodiedLand: \"0.457\",\n      embodiedWater: \"48.195\",\n    },\n    {\n      eid: \"e4735\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.011\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4736\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"0.378\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4737\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.542\",\n      weight: \"0.94\",\n      embodiedLand: \"0.161\",\n      embodiedWater: \"0.968\",\n    },\n    {\n      eid: \"e4738\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.238\",\n      weight: \"2.262\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4739\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4740\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4742\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.468\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4743\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.066\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4744\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.695\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4745\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.132\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4824\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4825\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4826\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"134.901099\",\n      weight: \"54.1360357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4827\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1\",\n      weight: \"0.5\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"4.356\",\n    },\n    {\n      eid: \"e4828\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4829\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.005348\",\n      weight: \"27.7814111\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4830\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.071\",\n      weight: \"48\",\n      embodiedLand: \"2.36\",\n      embodiedWater: \"517.776\",\n    },\n    {\n      eid: \"e4831\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10\",\n      weight: \"7.385\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4832\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1\",\n      weight: \"2.895\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4833\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"121\",\n      weight: \"381.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4834\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.828\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4835\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2\",\n      weight: \"4.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5015\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.273\",\n      weight: \"1.5\",\n      embodiedLand: \"0.94\",\n      embodiedWater: \"5.117\",\n    },\n    {\n      eid: \"e5016\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"762\",\n      targetSimName: \"TJK\",\n      targetName: \"Tajikistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.747\",\n      weight: \"3.75\",\n      embodiedLand: \"1.24\",\n      embodiedWater: \"1.117\",\n    },\n    {\n      eid: \"e5017\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5018\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5019\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5065\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.837\",\n      weight: \"0.288\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5066\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.057\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5067\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.102\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5068\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"26.888\",\n      weight: \"155.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5104\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"819.786\",\n      weight: \"4674.18\",\n      embodiedLand: \"7.562\",\n      embodiedWater: \"5814.68\",\n    },\n    {\n      eid: \"e5105\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.202\",\n      weight: \"20.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5106\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.134\",\n      weight: \"0.159\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5107\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.186\",\n      weight: \"1.973\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5108\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5246\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.646\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5247\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.115\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5248\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1285.878\",\n      weight: \"3253\",\n      embodiedLand: \"695.174\",\n      embodiedWater: \"27878.21\",\n    },\n    {\n      eid: \"e5249\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.677\",\n      weight: \"2\",\n      embodiedLand: \"0.486\",\n      embodiedWater: \"17.53\",\n    },\n    {\n      eid: \"e5250\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5251\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.128\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5252\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.792\",\n      weight: \"1.676\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5253\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.33\",\n      weight: \"0.339\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5254\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1536.952\",\n      weight: \"2498.778\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5319\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.05\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5321\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5368\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.112\",\n      weight: \"6.518\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5369\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.631\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5370\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.879\",\n      weight: \"0.168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5371\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.34\",\n      weight: \"1.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5372\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5373\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5374\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.066\",\n      weight: \"0.649\",\n      embodiedLand: \"0.046\",\n      embodiedWater: \"1.955\",\n    },\n    {\n      eid: \"e5375\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.143\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5376\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15280.683\",\n      weight: \"52494.791\",\n      embodiedLand: \"49024.216\",\n      embodiedWater: \"2673717.19\",\n    },\n    {\n      eid: \"e5377\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.138\",\n      weight: \"0.053\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5378\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.011\",\n      weight: \"115\",\n      embodiedLand: \"4.942\",\n      embodiedWater: \"825.24\",\n    },\n    {\n      eid: \"e5379\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.825\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5380\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5381\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.946\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5382\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5383\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14.272\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5384\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5447\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.05\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"0.286\",\n    },\n    {\n      eid: \"e5448\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5449\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5450\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"75.807\",\n      weight: \"147.131\",\n      embodiedLand: \"88.514\",\n      embodiedWater: \"387.69\",\n    },\n    {\n      eid: \"e5451\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5452\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"21.654\",\n      weight: \"2.897\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5453\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5494\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.118\",\n      weight: \"3.342\",\n      embodiedLand: \"0.863\",\n      embodiedWater: \"4.802\",\n    },\n    {\n      eid: \"e5495\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.729\",\n    },\n    {\n      eid: \"e5496\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5497\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.364\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5498\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.66\",\n      weight: \"0.715\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"7.631\",\n    },\n    {\n      eid: \"e5499\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.079\",\n      weight: \"0.06\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e5500\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5501\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.392\",\n    },\n    {\n      eid: \"e5502\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.255\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5503\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.325\",\n      weight: \"0.708\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5504\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5505\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.309\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5506\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.636\",\n      weight: \"8.967\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5507\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.419\",\n      weight: \"1.356\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5508\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.096\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5524\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.494\",\n      weight: \"0.62\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"3.678\",\n    },\n    {\n      eid: \"e5525\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.088\",\n    },\n    {\n      eid: \"e5526\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"3\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5527\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.543\",\n      weight: \"47.935\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5528\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5529\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1391.017\",\n      weight: \"5169.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5568\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.4938257\",\n      weight: \"28.2050024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5569\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.444\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5570\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.04\",\n      embodiedLand: \"0.013\",\n      embodiedWater: \"0.105\",\n    },\n    {\n      eid: \"e5571\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"38.47\",\n      weight: \"46.226\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5573\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"25.024\",\n      weight: \"144.873\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5574\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.454\",\n      weight: \"5.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5680\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.433\",\n      weight: \"1.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5681\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5682\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.07\",\n      weight: \"0.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5683\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.736\",\n      weight: \"0.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5684\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5685\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.448\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5686\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.038\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5687\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.6\",\n      weight: \"2.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5688\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"2.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5689\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.46160548\",\n      weight: \"12.1968756\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5696\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"11.926\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5697\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.18\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5790\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"76.094\",\n      weight: \"231.535\",\n      embodiedLand: \"70.276\",\n      embodiedWater: \"42.371\",\n    },\n    {\n      eid: \"e5791\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.3954741\",\n      weight: \"17.634\",\n      embodiedLand: \"7.808\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5792\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"9.879\",\n      weight: \"16.669\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5793\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"108.18118\",\n      weight: \"282.748174\",\n      embodiedLand: \"120.980124\",\n      embodiedWater: \"113.947519\",\n    },\n    {\n      eid: \"e5794\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"55.429\",\n      weight: \"102\",\n      embodiedLand: \"50.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5795\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.519\",\n      weight: \"16.8\",\n      embodiedLand: \"5.346\",\n      embodiedWater: \"0.79\",\n    },\n    {\n      eid: \"e5796\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3040.717\",\n      weight: \"12000\",\n      embodiedLand: \"3410.976\",\n      embodiedWater: \"1416\",\n    },\n    {\n      eid: \"e5797\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.2\",\n      weight: \"22.5\",\n      embodiedLand: \"9.765\",\n      embodiedWater: \"4.14\",\n    },\n    {\n      eid: \"e5798\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5928.904\",\n      weight: \"27800\",\n      embodiedLand: \"8141.021\",\n      embodiedWater: \"5087.4\",\n    },\n    {\n      eid: \"e5799\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"12.5758647\",\n      weight: \"18.1209308\",\n      embodiedLand: \"9.21064206\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5800\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.085\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5801\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"126.649\",\n      weight: \"523.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5802\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e5803\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9979.327\",\n      weight: \"49080.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5804\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9773.51\",\n      weight: \"50317.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5805\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1120.625\",\n      weight: \"6464.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5806\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.55\",\n      weight: \"13.716\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5807\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"66.234\",\n      weight: \"130.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5808\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"59.9755096\",\n      weight: \"147.628533\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5809\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"7.622\",\n      weight: \"13.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5810\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"32.2000609\",\n      weight: \"184.508668\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5811\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3824.84552\",\n      weight: \"18150\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5812\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.014\",\n      weight: \"1.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5813\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"47.074\",\n      weight: \"169\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5814\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.9\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5823\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"72.763\",\n      weight: \"511.55\",\n      embodiedLand: \"1.752\",\n      embodiedWater: \"713.612\",\n    },\n    {\n      eid: \"e5824\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5860.639\",\n      weight: \"25633.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5825\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"43.94\",\n      weight: \"396.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5832\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5833\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.124\",\n    },\n    {\n      eid: \"e5834\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"278.215\",\n      weight: \"344.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5941\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"11.037\",\n      weight: \"21.99\",\n      embodiedLand: \"11.308\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5942\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"952.419598\",\n      weight: \"1777.69802\",\n      embodiedLand: \"536.005575\",\n      embodiedWater: \"154.659357\",\n    },\n    {\n      eid: \"e5943\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.142\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5944\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.5941818\",\n      weight: \"11.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5945\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1740.776\",\n      weight: \"4444.87\",\n      embodiedLand: \"1391.87\",\n      embodiedWater: \"902.309\",\n    },\n    {\n      eid: \"e5946\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"34.047\",\n      weight: \"75\",\n      embodiedLand: \"25.521\",\n      embodiedWater: \"8.325\",\n    },\n    {\n      eid: \"e5947\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.553\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5948\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.706\",\n      weight: \"21.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5949\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2682.98701\",\n      weight: \"9850\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5950\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.692\",\n      weight: \"0.112\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5951\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"52.1904308\",\n      weight: \"28.8378857\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5952\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"150.48433\",\n      weight: \"617.293342\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5954\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.229\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5955\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5956\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.8723332\",\n      weight: \"14.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5957\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2596.166\",\n      weight: \"14299.874\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5958\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"624\",\n      targetSimName: \"GNB\",\n      targetName: \"Guinea-Bissau\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.352\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5959\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7705.296\",\n      weight: \"32986.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5960\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18663.554\",\n      weight: \"101536.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5961\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.423\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5962\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.777\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5963\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.583\",\n      weight: \"41\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5964\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9794.196\",\n      weight: \"53649.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5997\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5998\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5999\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6000\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.32369588\",\n      weight: \"10\",\n      embodiedLand: \"2.391\",\n      embodiedWater: \"1.34\",\n    },\n    {\n      eid: \"e6002\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.9\",\n      embodiedLand: \"0.216\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6003\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1472.921\",\n      weight: \"4490.059\",\n      embodiedLand: \"819.513\",\n      embodiedWater: \"1333.547\",\n    },\n    {\n      eid: \"e6005\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6006\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6008\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6009\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.556\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6010\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.553\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6029\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6030\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6031\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.4864968\",\n      weight: \"333.932001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6032\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.432\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6033\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6054\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.078\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.068\",\n    },\n    {\n      eid: \"e6055\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.044\",\n    },\n    {\n      eid: \"e6056\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.174\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e6057\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.031\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6058\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6059\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.192\",\n      weight: \"0.072\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6060\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6167\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.033\",\n      weight: \"0.026\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.394\",\n    },\n    {\n      eid: \"e6168\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.24\",\n      weight: \"22.5\",\n      embodiedLand: \"1.165\",\n      embodiedWater: \"57.42\",\n    },\n    {\n      eid: \"e6169\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.547\",\n      weight: \"0.074\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6170\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.178\",\n      weight: \"39.34\",\n      embodiedLand: \"0.219\",\n      embodiedWater: \"24.902\",\n    },\n    {\n      eid: \"e6171\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"250.088\",\n      weight: \"313.5\",\n      embodiedLand: \"205.235\",\n      embodiedWater: \"1026.712\",\n    },\n    {\n      eid: \"e6172\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27.338\",\n      weight: \"16.94\",\n      embodiedLand: \"0.121\",\n      embodiedWater: \"0.813\",\n    },\n    {\n      eid: \"e6174\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"38.385\",\n      weight: \"44.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6175\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.444\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6176\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"39.86\",\n      weight: \"18.976\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6177\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"69.327\",\n      weight: \"39.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6178\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"9.794\",\n      weight: \"4.694\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6179\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.55\",\n      weight: \"1.246\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6180\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"143.017\",\n      weight: \"99.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6181\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6182\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6185\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6186\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6187\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"134.792\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6188\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.466\",\n      weight: \"248\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6189\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"500.517\",\n      weight: \"1376.74\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6210\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.222\",\n      weight: \"24\",\n      embodiedLand: \"11.101\",\n      embodiedWater: \"285.816\",\n    },\n    {\n      eid: \"e6211\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.201\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6212\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6213\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.127\",\n      weight: \"0.024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6214\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6215\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.948\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6216\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.006\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6270\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6113.626\",\n      weight: \"14771.565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6271\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6272\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"14.65\",\n      weight: \"9.6\",\n      embodiedLand: \"0.224\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6273\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"97.941\",\n      weight: \"48\",\n      embodiedLand: \"5.948\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6274\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.261\",\n      weight: \"3.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6275\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.207\",\n      weight: \"23.502\",\n      embodiedLand: \"0.48152987\",\n      embodiedWater: \"30.8105997\",\n    },\n    {\n      eid: \"e6276\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.151\",\n      weight: \"5.43\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6277\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18.135\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6278\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"24.9972232\",\n      weight: \"43.4084916\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6280\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.101\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6281\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.00156596\",\n      weight: \"0.00208085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6282\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.973\",\n      weight: \"1.347\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6293\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.2\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.139\",\n    },\n    {\n      eid: \"e6294\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.391\",\n      weight: \"25\",\n      embodiedLand: \"7.002\",\n      embodiedWater: \"204.525\",\n    },\n    {\n      eid: \"e6295\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.018\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6330\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6331\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.478\",\n      weight: \"30.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6332\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6333\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6334\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"353.845136\",\n      weight: \"1878.10933\",\n      embodiedLand: \"15.5904614\",\n      embodiedWater: \"3562.77322\",\n    },\n    {\n      eid: \"e6335\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.786\",\n      weight: \"42\",\n      embodiedLand: \"0.943\",\n      embodiedWater: \"91.056\",\n    },\n    {\n      eid: \"e6336\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6337\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2562.825\",\n      weight: \"4828.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6437\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.35799817\",\n      weight: \"5.965\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6438\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.96291721\",\n      weight: \"1.082\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"2.028\",\n    },\n    {\n      eid: \"e6439\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.063\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6440\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"1.881\",\n      weight: \"0.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6441\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6442\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"161.633092\",\n      weight: \"131.698943\",\n      embodiedLand: \"103.093103\",\n      embodiedWater: \"356.509274\",\n    },\n    {\n      eid: \"e6443\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.013\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6444\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"337.977\",\n      weight: \"582.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6445\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"1.526\",\n      embodiedLand: \"0.37\",\n      embodiedWater: \"84.283\",\n    },\n    {\n      eid: \"e6446\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4579.296\",\n      weight: \"12984.96\",\n      embodiedLand: \"3316.527\",\n      embodiedWater: \"366708.255\",\n    },\n    {\n      eid: \"e6447\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6448\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.24\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6449\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.862\",\n      weight: \"1.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6451\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6452\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6917.997\",\n      weight: \"32990.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6453\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3719.013\",\n      weight: \"13050\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6454\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.544\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6455\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.933\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6469\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.193\",\n      weight: \"24.894\",\n      embodiedLand: \"1.244\",\n      embodiedWater: \"132.162\",\n    },\n    {\n      eid: \"e6470\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.077\",\n      weight: \"0.186\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6471\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"88.215\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6472\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6473\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.254\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6532\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"8.045\",\n      weight: \"44\",\n      embodiedLand: \"3.73\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6533\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.21\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"0.438\",\n    },\n    {\n      eid: \"e6534\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"15.064\",\n      weight: \"43.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6535\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"326.546\",\n      weight: \"1813.443\",\n      embodiedLand: \"499.351\",\n      embodiedWater: \"223.053\",\n    },\n    {\n      eid: \"e6536\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"3.85\",\n      weight: \"25\",\n      embodiedLand: \"4.393\",\n      embodiedWater: \"5.775\",\n    },\n    {\n      eid: \"e6537\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"3.266\",\n      weight: \"21\",\n      embodiedLand: \"0.97\",\n      embodiedWater: \"69.3\",\n    },\n    {\n      eid: \"e6538\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.59555736\",\n      weight: \"0.96\",\n      embodiedLand: \"0.038\",\n      embodiedWater: \"5.211\",\n    },\n    {\n      eid: \"e6539\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.06377214\",\n      weight: \"0.08899229\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.05394042\",\n    },\n    {\n      eid: \"e6540\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"222.69\",\n      weight: \"1394.035\",\n      embodiedLand: \"436.708\",\n      embodiedWater: \"224.44\",\n    },\n    {\n      eid: \"e6541\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"988.605\",\n      weight: \"5010.909\",\n      embodiedLand: \"1241.576\",\n      embodiedWater: \"410.895\",\n    },\n    {\n      eid: \"e6542\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.986\",\n      weight: \"9.5\",\n      embodiedLand: \"0.479\",\n      embodiedWater: \"45.277\",\n    },\n    {\n      eid: \"e6543\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1092.675\",\n      weight: \"6495\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6544\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"452.602\",\n      weight: \"2038.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6545\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"6.63923657\",\n      weight: \"5.90356819\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6546\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"288.901\",\n      weight: \"2028.38\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6547\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3353.129\",\n      weight: \"19610.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6548\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"948.934454\",\n      weight: \"4372.09334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6549\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6550\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"79.648\",\n      weight: \"504.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6551\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1726.318\",\n      weight: \"9113.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6567\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.01797173\",\n      weight: \"0.839\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"0.103\",\n    },\n    {\n      eid: \"e6568\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.084\",\n      weight: \"0.085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6655\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.865\",\n      weight: \"0.451\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6656\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.841\",\n      weight: \"13.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6657\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6658\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.0198093\",\n      weight: \"10.0095949\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6659\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6660\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.221\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6661\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.444\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6662\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.732751\",\n      weight: \"37.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6663\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6664\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.389\",\n      weight: \"6.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6666\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.611\",\n      weight: \"0.722\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6667\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.014\",\n      weight: \"3.382\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6690\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"227.071\",\n      weight: \"1000.665\",\n      embodiedLand: \"616.851\",\n      embodiedWater: \"729.485\",\n    },\n    {\n      eid: \"e6691\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.486\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6692\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.194\",\n      weight: \"0.633\",\n      embodiedLand: \"0.042\",\n      embodiedWater: \"4.535\",\n    },\n    {\n      eid: \"e6693\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.126\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6694\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.043\",\n      weight: \"0.295\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6695\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.596\",\n      weight: \"6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6696\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6697\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.115\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6698\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.767\",\n      weight: \"0.573\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6739\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"30.039\",\n      weight: \"20\",\n      embodiedLand: \"0.17\",\n      embodiedWater: \"2.22\",\n    },\n    {\n      eid: \"e6740\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6741\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"187.414\",\n      weight: \"81.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6742\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"443.222\",\n      weight: \"441.628\",\n      embodiedLand: \"167.33\",\n      embodiedWater: \"7857.887\",\n    },\n    {\n      eid: \"e6743\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6744\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"49.186\",\n      weight: \"24.728\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6745\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.135\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6746\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1413.126\",\n      weight: \"572.235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6747\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.074\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6802\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6803\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6804\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.327\",\n      weight: \"19.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6805\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6806\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6807\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6808\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.212\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6809\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.228\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6810\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.019\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6811\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6812\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6833\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.219\",\n      weight: \"0.503\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e6834\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"193.924\",\n      weight: \"375\",\n      embodiedLand: \"194.083\",\n      embodiedWater: \"3776.25\",\n    },\n    {\n      eid: \"e6835\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.017\",\n      weight: \"19.5\",\n      embodiedLand: \"8.554\",\n      embodiedWater: \"382.551\",\n    },\n    {\n      eid: \"e6836\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.091\",\n      weight: \"0.02\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6837\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"64\",\n      targetSimName: \"BTN\",\n      targetName: \"Bhutan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"77.909\",\n      weight: \"306\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6838\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6839\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.403\",\n      weight: \"0.365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6840\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7020\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7021\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7022\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"238\",\n      targetSimName: \"FLK\",\n      targetName: \"Falkland Isds (Malvinas)\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7023\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7024\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7025\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7026\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.929\",\n      weight: \"3.746\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7027\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7028\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.672\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7030\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.506\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7031\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7032\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"30.968\",\n      weight: \"60\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7047\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7048\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7049\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7059\",\n      source: \"533\",\n      sourceSimName: \"ABW\",\n      sourceRegion: \"Aruba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7062\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7063\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7064\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7072\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.055\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7073\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7163\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.521\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7164\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.288\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7165\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.328\",\n      weight: \"0.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7166\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"26.252\",\n      weight: \"1.208\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7167\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7168\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7169\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.355\",\n      weight: \"23.559\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7188\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.004\",\n    },\n    {\n      eid: \"e7189\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"21.386\",\n      weight: \"136.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7190\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.379\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7191\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.356\",\n      weight: \"0.982\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7192\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.951\",\n      weight: \"141\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7193\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.256\",\n      weight: \"2.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7221\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7222\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.966\",\n      weight: \"2.817\",\n      embodiedLand: \"0.349\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7223\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"20.293\",\n      weight: \"15.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7224\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"20.609\",\n      weight: \"35\",\n      embodiedLand: \"21.084\",\n      embodiedWater: \"566.545\",\n    },\n    {\n      eid: \"e7225\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.981\",\n      weight: \"28.684\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7226\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"249.489\",\n      weight: \"370\",\n      embodiedLand: \"118.35\",\n      embodiedWater: \"54063.29\",\n    },\n    {\n      eid: \"e7227\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7228\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"177.342\",\n      weight: \"265.715\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7229\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7230\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7231\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"29.038\",\n      weight: \"39.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7305\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.338\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7306\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.014\",\n      weight: \"0.01\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7307\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"672\",\n      weight: \"3264.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7308\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.07\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.106\",\n    },\n    {\n      eid: \"e7309\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7310\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.882\",\n      weight: \"0.84\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7311\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.401\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7312\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7313\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.331\",\n      weight: \"23.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7358\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"108.657\",\n      weight: \"200.963\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7359\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"98.433\",\n      weight: \"151.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7360\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.211\",\n      weight: \"4.3\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"10.109\",\n    },\n    {\n      eid: \"e7361\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.125\",\n      weight: \"6.503\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7362\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.616\",\n      weight: \"41.331\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7363\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.125\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7364\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.165\",\n      weight: \"0.055\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7365\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7366\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.183\",\n      weight: \"0.152\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.036\",\n    },\n    {\n      eid: \"e7367\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7368\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.222\",\n      weight: \"0.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7369\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"143.971\",\n      weight: \"104.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7370\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.444\",\n      weight: \"0.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7371\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.662\",\n      weight: \"4.95\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7372\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"241.798\",\n      weight: \"172.775\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7373\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"7.72031118\",\n      weight: \"13.3129919\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7374\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.143\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7375\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.572\",\n      weight: \"0.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7379\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7380\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7384\",\n      source: \"584\",\n      sourceSimName: \"MHL\",\n      sourceRegion: \"Marshall Isds\",\n      sourceName: \"Oceania\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"173.38\",\n      weight: \"514.539\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7551\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.467\",\n      weight: \"8.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7552\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.749\",\n      weight: \"0.657\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7553\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.707\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7554\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.019\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7555\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.665\",\n      weight: \"0.191\",\n      embodiedLand: \"0.00237267\",\n      embodiedWater: \"2.86855901\",\n    },\n    {\n      eid: \"e7556\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"45.897\",\n      weight: \"108\",\n      embodiedLand: \"94.494\",\n      embodiedWater: \"993.276\",\n    },\n    {\n      eid: \"e7557\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"33.126\",\n      weight: \"85\",\n      embodiedLand: \"49.298\",\n      embodiedWater: \"519.945\",\n    },\n    {\n      eid: \"e7558\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.969\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7600\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.135\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7601\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.396\",\n      weight: \"5.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7602\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.484\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7603\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"89.077\",\n      weight: \"262\",\n      embodiedLand: \"14.9602\",\n      embodiedWater: \"24.628\",\n    },\n    {\n      eid: \"e7604\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"140.541\",\n      weight: \"1387.5\",\n      embodiedLand: \"722.268\",\n      embodiedWater: \"10034.4\",\n    },\n    {\n      eid: \"e7605\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.5\",\n      weight: \"5.26\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7606\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"58.626\",\n      weight: \"142.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7607\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.478\",\n      weight: \"0.354\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7608\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.908\",\n      weight: \"1.673\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7609\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.489\",\n      weight: \"0.251\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7610\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.519\",\n      weight: \"4.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7611\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"22\",\n      weight: \"110\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7612\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.307\",\n      weight: \"25.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7613\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7614\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2.04\",\n      weight: \"3.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7627\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7628\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7629\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7701\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.09\",\n      weight: \"0.056\",\n      embodiedLand: \"0.022\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7702\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.12\",\n      weight: \"23.76\",\n      embodiedLand: \"4.716\",\n      embodiedWater: \"141.396\",\n    },\n    {\n      eid: \"e7703\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"253.201\",\n      weight: \"2164.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7704\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"176\",\n      weight: \"2000\",\n      embodiedLand: \"512.183\",\n      embodiedWater: \"244\",\n    },\n    {\n      eid: \"e7705\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.008\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7706\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"43.718\",\n      weight: \"321.454\",\n      embodiedLand: \"99.0839337\",\n      embodiedWater: \"39.2173983\",\n    },\n    {\n      eid: \"e7707\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.926\",\n      weight: \"1.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7708\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"110\",\n      weight: \"1100\",\n      embodiedLand: \"264.036\",\n      embodiedWater: \"247.5\",\n    },\n    {\n      eid: \"e7709\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4903.23583\",\n      weight: \"30611.0521\",\n      embodiedLand: \"7784.12365\",\n      embodiedWater: \"4254.93621\",\n    },\n    {\n      eid: \"e7710\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"133.791\",\n      weight: \"200.04\",\n      embodiedLand: \"37.571\",\n      embodiedWater: \"3567.513\",\n    },\n    {\n      eid: \"e7711\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.368\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7712\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6301.54229\",\n      weight: \"39230.597\",\n      embodiedLand: \"9966.60233\",\n      embodiedWater: \"4825.3641\",\n    },\n    {\n      eid: \"e7713\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10163.8981\",\n      weight: \"51351.1604\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7714\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"145.554268\",\n      weight: \"317.548282\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7715\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14598.991\",\n      weight: \"82200.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7716\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.114\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7717\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"313.761\",\n      weight: \"653.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7718\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7820\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7821\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.728\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7822\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.665\",\n      weight: \"0.358\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7823\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.026\",\n      weight: \"5.379\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7824\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"28.047\",\n      weight: \"7.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7825\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"0.81\",\n      weight: \"0.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.023\",\n    },\n    {\n      eid: \"e7826\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.355\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7827\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.1145\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7828\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"215.438505\",\n      weight: \"23.9549268\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7829\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"73.9066099\",\n      weight: \"25.626565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7830\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.99\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7831\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.44\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"2.623\",\n    },\n    {\n      eid: \"e7832\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.51186012\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7833\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.093\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7834\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.54\",\n      weight: \"15.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7835\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"64.745\",\n      weight: \"19.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7836\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.872\",\n      weight: \"0.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7912\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.46\",\n      weight: \"0.249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7913\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.823\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7914\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7915\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.149\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7916\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.659\",\n      weight: \"0.955\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7917\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.502\",\n      weight: \"0.139\",\n      embodiedLand: \"0.045\",\n      embodiedWater: \"1.387\",\n    },\n    {\n      eid: \"e7918\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7919\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"48.872\",\n      weight: \"81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7920\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7921\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.177\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7922\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7923\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7924\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.403\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7927\",\n      source: \"612\",\n      sourceSimName: \"PCN\",\n      sourceRegion: \"Pitcairn\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8061\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.139\",\n      weight: \"0.145\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8064\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8065\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"244.824\",\n      weight: \"507.82\",\n      embodiedLand: \"154.861\",\n      embodiedWater: \"22.852\",\n    },\n    {\n      eid: \"e8066\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"70.822\",\n      weight: \"231\",\n      embodiedLand: \"31.512\",\n      embodiedWater: \"476.553\",\n    },\n    {\n      eid: \"e8067\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12161.233\",\n      weight: \"57149.4\",\n      embodiedLand: \"12254.953\",\n      embodiedWater: \"180420.656\",\n    },\n    {\n      eid: \"e8068\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.272\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8070\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"220.92779\",\n      weight: \"400.073031\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8071\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8072\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1248.54\",\n      weight: \"5500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8073\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"302.5090046\",\n      weight: \"656.733934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8074\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1502.111\",\n      weight: \"7201.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8075\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"691.763\",\n      weight: \"1537.68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8076\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8077\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1568.202\",\n      weight: \"4027.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8078\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"80.973\",\n      weight: \"434.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8162\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"56.829\",\n      weight: \"75\",\n      embodiedLand: \"21.703\",\n      embodiedWater: \"1097.55\",\n    },\n    {\n      eid: \"e8163\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"50.3339085\",\n      weight: \"45.9143482\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8164\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"58.8618795\",\n      weight: \"87.6717437\",\n      embodiedLand: \"29.8536241\",\n      embodiedWater: \"1680.66691\",\n    },\n    {\n      eid: \"e8165\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.028\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.032\",\n    },\n    {\n      eid: \"e8166\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.68987608\",\n      weight: \"0.56109969\",\n      embodiedLand: \"0.0422374\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8167\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.006\",\n      weight: \"28\",\n      embodiedLand: \"22.605\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8168\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.111\",\n      weight: \"50\",\n      embodiedLand: \"13.661\",\n      embodiedWater: \"723.6\",\n    },\n    {\n      eid: \"e8169\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"535\",\n      targetSimName: \"BES\",\n      targetName: \"Bonaire\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.166\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8170\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8172\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8173\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"267.644962\",\n      weight: \"510\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8174\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"456.64271\",\n      weight: \"587.244797\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8175\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8176\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"1.765\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8177\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.143\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8178\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8179\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8180\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.027\",\n      weight: \"34.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8182\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.009\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8183\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8184\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.272\",\n      weight: \"0.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8216\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8217\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8219\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"60.79\",\n      weight: \"74.981\",\n      embodiedLand: \"2.912\",\n      embodiedWater: \"1094.423\",\n    },\n    {\n      eid: \"e8220\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"83.636\",\n      weight: \"34.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8221\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"0.00009091\",\n      embodiedWater: \"0.00372727\",\n    },\n    {\n      eid: \"e8222\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"18.134\",\n      weight: \"45.408\",\n      embodiedLand: \"0.035\",\n      embodiedWater: \"79.873\",\n    },\n    {\n      eid: \"e8223\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.824\",\n      weight: \"10\",\n      embodiedLand: \"3.735\",\n      embodiedWater: \"104.17\",\n    },\n    {\n      eid: \"e8224\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8225\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8226\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.458\",\n      weight: \"0.054\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8227\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8324\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2595\",\n      weight: \"15000\",\n      embodiedLand: \"3360.071\",\n      embodiedWater: \"28275\",\n    },\n    {\n      eid: \"e8325\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.024\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.017\",\n    },\n    {\n      eid: \"e8326\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11237.2354\",\n      weight: \"56273.1014\",\n      embodiedLand: \"17817.2079\",\n      embodiedWater: \"134548.986\",\n    },\n    {\n      eid: \"e8327\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1985\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8329\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4093.718\",\n      weight: \"15865.57\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8330\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"214.3\",\n      weight: \"960\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8331\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1094.973\",\n      weight: \"7050.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8332\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"228.149\",\n      weight: \"1193.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8333\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3847.356\",\n      weight: \"21928.554\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8334\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1553.1\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8335\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"142.45\",\n      weight: \"230\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8468\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.432\",\n      weight: \"10.771\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8469\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1384.377\",\n      weight: \"3256\",\n      embodiedLand: \"1499.247\",\n      embodiedWater: \"5655.672\",\n    },\n    {\n      eid: \"e8470\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"301.524\",\n      weight: \"261.39\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8471\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8472\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"13.5\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8473\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8474\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.47\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8475\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1585.217\",\n      weight: \"11000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8476\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"202.572054\",\n      weight: \"1050\",\n      embodiedLand: \"269.74\",\n      embodiedWater: \"5738.25\",\n    },\n    {\n      eid: \"e8478\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1198.008\",\n      weight: \"7131\",\n      embodiedLand: \"2927.035\",\n      embodiedWater: \"11794.674\",\n    },\n    {\n      eid: \"e8480\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1798.27193\",\n      weight: \"8589.5235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8481\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1929.019\",\n      weight: \"9904\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8482\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"11.153\",\n      weight: \"45.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8483\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.0980149\",\n      weight: \"103.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8484\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1427.83359\",\n      weight: \"6406.65847\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8485\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8486\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"257.303\",\n      weight: \"957\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8506\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8507\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8508\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.177\",\n      weight: \"0.178\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8524\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8526\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8527\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"12.999\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8531\",\n      source: \"660\",\n      sourceSimName: \"AIA\",\n      sourceRegion: \"Anguilla\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8545\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"92\",\n      targetSimName: \"VGB\",\n      targetName: \"British Virgin Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8546\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8547\",\n      source: \"666\",\n      sourceSimName: \"SPM\",\n      sourceRegion: \"Saint Pierre and Miquelon\",\n      sourceName: \"North America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8565\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8566\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8567\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8568\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8573\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8574\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8575\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"838\",\n      targetSimName: \"\",\n      targetName: \"Free Zones\",\n      targetRegion: \"Other\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.26\",\n      weight: \"1.155\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8652\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8653\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8654\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.48\",\n      weight: \"21.772\",\n      embodiedLand: \"7.63664924\",\n      embodiedWater: \"109.904952\",\n    },\n    {\n      eid: \"e8655\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.859\",\n      embodiedLand: \"0.014\",\n      embodiedWater: \"0.338\",\n    },\n    {\n      eid: \"e8656\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8657\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.115\",\n      weight: \"2.5\",\n      embodiedLand: \"0.292\",\n      embodiedWater: \"34.81\",\n    },\n    {\n      eid: \"e8658\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.301\",\n    },\n    {\n      eid: \"e8659\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.838\",\n      weight: \"16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8660\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8661\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.252\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8662\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.509\",\n      weight: \"1.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8663\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8664\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"7.747\",\n      weight: \"5.335\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8718\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.062\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8720\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8721\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.085\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8722\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.302\",\n      weight: \"1.31\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8723\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.53\",\n      weight: \"1.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8724\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.214\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8725\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"666\",\n      targetSimName: \"SPM\",\n      targetName: \"Saint Pierre and Miquelon\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"84\",\n      weight: \"261.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8726\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8794\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.967\",\n      weight: \"21.5\",\n      embodiedLand: \"6.634\",\n      embodiedWater: \"5.268\",\n    },\n    {\n      eid: \"e8796\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.028\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.012\",\n    },\n    {\n      eid: \"e8797\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8798\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.2366732\",\n      weight: \"177.68999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8800\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"129.178771\",\n      weight: \"288.216749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8801\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.403\",\n      weight: \"45.042\",\n      embodiedLand: \"13.431\",\n      embodiedWater: \"10.225\",\n    },\n    {\n      eid: \"e8802\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"26.6315535\",\n      weight: \"63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8803\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8804\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"277.534\",\n      weight: \"46.233\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8805\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8806\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8807\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"61.871\",\n      weight: \"225.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8808\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.51515098\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8809\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.25833351\",\n      weight: \"0.76309616\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8810\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.96\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8817\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8818\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18.484\",\n      weight: \"75\",\n      embodiedLand: \"0.094\",\n      embodiedWater: \"95.025\",\n    },\n    {\n      eid: \"e8819\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.553\",\n      weight: \"25.427\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8820\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8821\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"15.778\",\n      weight: \"69\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8835\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.786\",\n      weight: \"2.5\",\n      embodiedLand: \"1.293\",\n      embodiedWater: \"0.832\",\n    },\n    {\n      eid: \"e8836\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.502\",\n      weight: \"2.93\",\n      embodiedLand: \"2.545\",\n      embodiedWater: \"27.483\",\n    },\n    {\n      eid: \"e8837\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8838\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8839\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.401\",\n      weight: \"0.519\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8840\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.13\",\n      weight: \"10.403\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8841\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8842\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9039\",\n      source: \"699\",\n      sourceSimName: \"IND\",\n      sourceRegion: \"India\",\n      sourceName: \"South Asia\",\n      target: \"581\",\n      targetSimName: \"UMI\",\n      targetName: \"United States Minor Outlying Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.376\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9154\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9155\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"520\",\n      targetSimName: \"NRU\",\n      targetName: \"Nauru\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.12\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9156\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.237\",\n      weight: \"63.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9157\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"40.244\",\n      weight: \"48\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9159\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9160\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.15\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9161\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"63.252\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9162\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.757\",\n      weight: \"0.209\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9224\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.768\",\n      weight: \"1.585\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9225\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e9226\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"90.739\",\n      weight: \"210.86\",\n      embodiedLand: \"23.926\",\n      embodiedWater: \"208.33\",\n    },\n    {\n      eid: \"e9227\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.27\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9228\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9230\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1729.926\",\n      weight: \"4000\",\n      embodiedLand: \"976.835\",\n      embodiedWater: \"240\",\n    },\n    {\n      eid: \"e9231\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"146.145\",\n      weight: \"460\",\n      embodiedLand: \"229.046\",\n      embodiedWater: \"1751.22\",\n    },\n    {\n      eid: \"e9232\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"31.674\",\n      weight: \"42\",\n      embodiedLand: \"27.568\",\n      embodiedWater: \"21.294\",\n    },\n    {\n      eid: \"e9233\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"344.235\",\n      weight: \"1266.178\",\n      embodiedLand: \"306.755\",\n      embodiedWater: \"4740.57\",\n    },\n    {\n      eid: \"e9234\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.173\",\n      weight: \"1.791\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9235\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.155\",\n      weight: \"1.878\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9236\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.454\",\n      weight: \"3.653\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9237\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.229\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9397\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.297\",\n      weight: \"117.657\",\n      embodiedLand: \"12.759\",\n      embodiedWater: \"163.896\",\n    },\n    {\n      eid: \"e9398\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.78\",\n      weight: \"3.285\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9399\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"100\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9400\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"580\",\n      targetSimName: \"MNP\",\n      targetName: \"N. Mariana Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"28212.429\",\n      weight: \"50643.596\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9401\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"19.732\",\n      weight: \"25.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9402\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.917\",\n      weight: \"30.866\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9403\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"767.08\",\n      weight: \"1370\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9404\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9405\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.189\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9460\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.115\",\n      weight: \"1.485\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9461\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"76.922\",\n      weight: \"78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9462\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.043\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9463\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"285.64339\",\n      weight: \"1519.634\",\n      embodiedLand: \"231.021\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9464\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"91.632\",\n      weight: \"210.82\",\n      embodiedLand: \"23.231\",\n      embodiedWater: \"116.162\",\n    },\n    {\n      eid: \"e9465\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.041\",\n      embodiedLand: \"0.01\",\n      embodiedWater: \"0.436\",\n    },\n    {\n      eid: \"e9467\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"6\",\n      weight: \"3.75\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"36.904\",\n    },\n    {\n      eid: \"e9468\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"52.7905262\",\n      weight: \"139\",\n      embodiedLand: \"46.698\",\n      embodiedWater: \"55.739\",\n    },\n    {\n      eid: \"e9469\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.906\",\n      weight: \"22\",\n      embodiedLand: \"6.456\",\n      embodiedWater: \"8.844\",\n    },\n    {\n      eid: \"e9470\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.687\",\n      weight: \"0.721\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9471\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9472\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.93823874\",\n      weight: \"7.86021619\",\n      embodiedLand: \"0.01751575\",\n      embodiedWater: \"27.1184749\",\n    },\n    {\n      eid: \"e9473\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.876\",\n      weight: \"30.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9474\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9483\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9484\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"19.298\",\n      weight: \"11.899\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9630\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9631\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9632\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9633\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.053\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9634\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.267\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9635\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9636\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9637\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"776\",\n      targetSimName: \"TON\",\n      targetName: \"Tonga\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.01\",\n      weight: \"35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9638\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"10.271\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9639\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"7.992\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9640\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"291.645\",\n      weight: \"223.789\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9641\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"406.568\",\n      weight: \"326.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9642\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9670\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"249.898\",\n      weight: \"235.45\",\n      embodiedLand: \"59.656\",\n      embodiedWater: \"250.99\",\n    },\n    {\n      eid: \"e9671\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9672\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"49.652\",\n      weight: \"10\",\n      embodiedLand: \"15.749\",\n      embodiedWater: \"1.39\",\n    },\n    {\n      eid: \"e9673\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e9674\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"262.679\",\n      weight: \"424.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9675\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9676\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e9677\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.583\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9678\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.8\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9679\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9680\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"108.245803\",\n      weight: \"74.0433696\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9681\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.073\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9682\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.04989606\",\n      weight: \"0.08321444\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9683\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9847\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.162\",\n      weight: \"49.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9848\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.104\",\n      weight: \"0.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9849\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"71.418\",\n      weight: \"180\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9850\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.3543178\",\n      weight: \"71.6911179\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9851\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9852\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9853\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.199\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9856\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9857\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9889\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.333\",\n      weight: \"0.31\",\n      embodiedLand: \"0.02\",\n      embodiedWater: \"11.447\",\n    },\n    {\n      eid: \"e9890\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.181\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9891\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"20.076\",\n      weight: \"40\",\n      embodiedLand: \"69.334\",\n      embodiedWater: \"202.56\",\n    },\n    {\n      eid: \"e9892\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.5\",\n      weight: \"5\",\n      embodiedLand: \"5.013\",\n      embodiedWater: \"44.535\",\n    },\n    {\n      eid: \"e9893\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9894\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9895\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.333\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9896\",\n      source: \"732\",\n      sourceSimName: \"ESH\",\n      sourceRegion: \"Western Sahara\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9934\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"48.174\",\n      weight: \"340.23\",\n      embodiedLand: \"96.561\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9935\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9936\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.141\",\n      weight: \"0.09\",\n      embodiedLand: \"0.034\",\n      embodiedWater: \"0.65\",\n    },\n    {\n      eid: \"e9937\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.15\",\n      embodiedLand: \"0.054\",\n      embodiedWater: \"1.152\",\n    },\n    {\n      eid: \"e9938\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.08\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9939\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"59.563\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9940\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"486\",\n      weight: \"1800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9941\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9942\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2459.276\",\n      weight: \"7800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9943\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.296\",\n      weight: \"45.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9944\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"86.553\",\n      weight: \"168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9945\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"126\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9946\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.625\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9947\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.8\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9960\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.105\",\n      weight: \"26\",\n      embodiedLand: \"14.55\",\n      embodiedWater: \"11.804\",\n    },\n    {\n      eid: \"e9961\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.963\",\n      weight: \"1.128\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9962\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.042\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9963\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.022\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9964\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"136.368\",\n      weight: \"352.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10072\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"321.247599\",\n      weight: \"594.892627\",\n      embodiedLand: \"157.689777\",\n      embodiedWater: \"218.325999\",\n    },\n    {\n      eid: \"e10073\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.166\",\n      weight: \"0.461\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10074\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.097\",\n      weight: \"6.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10075\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.949\",\n      weight: \"1\",\n      embodiedLand: \"1.187\",\n      embodiedWater: \"5.89\",\n    },\n    {\n      eid: \"e10076\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"293.17\",\n      weight: \"713\",\n      embodiedLand: \"176.112\",\n      embodiedWater: \"7.843\",\n    },\n    {\n      eid: \"e10077\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.593\",\n      weight: \"0.373\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10078\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.542\",\n      weight: \"7.661\",\n      embodiedLand: \"2.193\",\n      embodiedWater: \"28.537\",\n    },\n    {\n      eid: \"e10079\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"7903.00956\",\n      weight: \"26948.6797\",\n      embodiedLand: \"6860.2467\",\n      embodiedWater: \"1077.94733\",\n    },\n    {\n      eid: \"e10080\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.537\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10081\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10082\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2650.321\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10083\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10084\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.659\",\n      weight: \"2.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10085\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"525.239248\",\n      weight: \"1150.87085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10086\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"776.713\",\n      weight: \"2078\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10198\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10199\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10200\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10201\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.103\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10202\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"897.592\",\n      weight: \"1303.4\",\n      embodiedLand: \"445.321\",\n      embodiedWater: \"21745.926\",\n    },\n    {\n      eid: \"e10203\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.004\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10204\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e10205\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4511.886\",\n      weight: \"18900\",\n      embodiedLand: \"3534.409\",\n      embodiedWater: \"62181\",\n    },\n    {\n      eid: \"e10206\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10207\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"70.534\",\n      weight: \"150.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10208\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"6.519\",\n      weight: \"6.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10209\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.173\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10210\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10211\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10212\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.429\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10213\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"389.737\",\n      weight: \"477.087\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10214\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.041\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10215\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.1431594\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10245\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.064\",\n      weight: \"0.107\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10246\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.032\",\n      weight: \"0.21\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.014\",\n    },\n    {\n      eid: \"e10247\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10248\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8862.493\",\n      weight: \"24861.286\",\n      embodiedLand: \"1247.997\",\n      embodiedWater: \"1864.596\",\n    },\n    {\n      eid: \"e10250\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.791\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10251\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10252\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.045\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10253\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.034\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10254\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10255\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.895\",\n      weight: \"1.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10264\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"89.465\",\n      weight: \"296.215\",\n      embodiedLand: \"159.202\",\n      embodiedWater: \"74.646\",\n    },\n    {\n      eid: \"e10265\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10461\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"212\",\n      targetSimName: \"DMA\",\n      targetName: \"Dominica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"9.736\",\n      weight: \"25.006\",\n      embodiedLand: \"10.644\",\n      embodiedWater: \"105.225\",\n    },\n    {\n      eid: \"e10462\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"234\",\n      targetSimName: \"FRO\",\n      targetName: \"Faeroe Isds\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.136\",\n      weight: \"0.315\",\n      embodiedLand: \"0.178\",\n      embodiedWater: \"2.462\",\n    },\n    {\n      eid: \"e10464\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.01\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.091\",\n    },\n    {\n      eid: \"e10465\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.484\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10495\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.112\",\n      weight: \"7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10496\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.283\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10497\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5\",\n      weight: \"18.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10498\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.60547527\",\n      weight: \"2.45939658\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10499\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"17.2519049\",\n      weight: \"115.598246\",\n      embodiedLand: \"99.7718139\",\n      embodiedWater: \"58.6084014\",\n    },\n    {\n      eid: \"e10500\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.00827273\",\n    },\n    {\n      eid: \"e10501\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10502\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.981\",\n      weight: \"1.027\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10509\",\n      source: \"772\",\n      sourceSimName: \"TKL\",\n      sourceRegion: \"Tokelau\",\n      sourceName: \"Oceania\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10517\",\n      source: \"776\",\n      sourceSimName: \"TON\",\n      sourceRegion: \"Tonga\",\n      sourceName: \"Oceania\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.113\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10554\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10555\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10556\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10557\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10558\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10559\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10560\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10561\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10562\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10563\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10564\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10565\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10566\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10703\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10704\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10705\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10706\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10707\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.831\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10708\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10709\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.154\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10778\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.737\",\n      weight: \"1.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10779\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.415\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10780\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10781\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"8.223\",\n      weight: \"9.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10782\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4.469\",\n      weight: \"2.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10783\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.389\",\n      weight: \"16.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10784\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.163\",\n      weight: \"19.327\",\n      embodiedLand: \"4.211\",\n      embodiedWater: \"62.813\",\n    },\n    {\n      eid: \"e10785\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"17.492\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10786\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6.28513636\",\n      weight: \"4.23263329\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10787\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10788\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.276\",\n      weight: \"0.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10789\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"46.053\",\n      weight: \"107.5\",\n      embodiedLand: \"2.563\",\n      embodiedWater: \"48.805\",\n    },\n    {\n      eid: \"e10790\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.516\",\n      weight: \"20.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10791\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.274\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10792\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"401.922618\",\n      weight: \"985.504812\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10793\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.042\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10794\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"33.233\",\n      weight: \"41.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10795\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"388.489\",\n      weight: \"300\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10976\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10977\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14.0119386\",\n      weight: \"26.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10978\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.708\",\n      weight: \"233.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10979\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.198\",\n      weight: \"0.714\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10990\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"372.658\",\n      weight: \"1562.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10991\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.407\",\n      weight: \"2.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11003\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.403\",\n      weight: \"24.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11004\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"8.714\",\n      weight: \"21.576\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11049\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11050\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.754\",\n      weight: \"16\",\n      embodiedLand: \"4.518\",\n      embodiedWater: \"69.808\",\n    },\n    {\n      eid: \"e11051\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"8.335\",\n      weight: \"22.5\",\n      embodiedLand: \"10.227\",\n      embodiedWater: \"9.923\",\n    },\n    {\n      eid: \"e11052\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.018\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11053\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.263\",\n      weight: \"0.139\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11054\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.216\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11209\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"24.476\",\n      weight: \"20.587\",\n      embodiedLand: \"11.055\",\n      embodiedWater: \"57.644\",\n    },\n    {\n      eid: \"e11210\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"184\",\n      targetSimName: \"COK\",\n      targetName: \"Cook Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11211\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2451.982731\",\n      weight: \"16689\",\n      embodiedLand: \"2800.015\",\n      embodiedWater: \"84513.096\",\n    },\n    {\n      eid: \"e11212\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11213\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4890.88387\",\n      weight: \"20013.8008\",\n      embodiedLand: \"5001.53453\",\n      embodiedWater: \"32702.5506\",\n    },\n    {\n      eid: \"e11214\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7378.521\",\n      weight: \"27210.945\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11215\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11216\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1486.932\",\n      weight: \"4224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11217\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"6.555\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11218\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25906197\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11219\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1683.6727\",\n      weight: \"6988.48925\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11220\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11221\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11222\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.801\",\n      weight: \"190.825\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11223\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1725.40859\",\n      weight: \"3353.20792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11224\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"29.675\",\n      weight: \"111.862\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11225\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11336\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11337\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11338\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.243\",\n      weight: \"46.01\",\n      embodiedLand: \"10.002\",\n      embodiedWater: \"579.542\",\n    },\n    {\n      eid: \"e11339\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"97.433\",\n      weight: \"247.995\",\n      embodiedLand: \"119.179\",\n      embodiedWater: \"1537.817\",\n    },\n    {\n      eid: \"e11340\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"41.094\",\n      weight: \"88.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11341\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11342\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.135\",\n      weight: \"4.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11343\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.369\",\n      weight: \"0.63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11344\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"140.284\",\n      weight: \"337.113\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11345\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.159\",\n      weight: \"0.854\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11346\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"114.727\",\n      weight: \"85.648\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11347\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"23.162\",\n      weight: \"30.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11348\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.07\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11522\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"125.184\",\n      weight: \"45.6\",\n      embodiedLand: \"9.628\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11523\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11524\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11525\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.981\",\n      weight: \"0.98\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11526\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"3.556\",\n      weight: \"3.554\",\n      embodiedLand: \"0.914\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11527\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.147\",\n      weight: \"0.138\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11528\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.13\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11529\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11580\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.405\",\n      weight: \"23.6\",\n      embodiedLand: \"54.414\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11581\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"113.617\",\n      weight: \"655.96\",\n      embodiedLand: \"650.261\",\n      embodiedWater: \"1034.449\",\n    },\n    {\n      eid: \"e11582\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.097\",\n      weight: \"40\",\n      embodiedLand: \"27.575\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11583\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.054\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.463\",\n    },\n    {\n      eid: \"e11584\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.152\",\n      weight: \"40.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11585\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11586\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.563\",\n      weight: \"14.38\",\n      embodiedLand: \"9.575\",\n      embodiedWater: \"9.707\",\n    },\n    {\n      eid: \"e11587\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.496\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11588\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.863\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11589\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.13198458\",\n      weight: \"5.40716181\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11591\",\n      source: \"837\",\n      sourceSimName: \"\",\n      sourceRegion: \"Bunkers\",\n      sourceName: \"Other\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11597\",\n      source: \"838\",\n      sourceSimName: \"\",\n      sourceRegion: \"Free Zones\",\n      sourceName: \"Other\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.009\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11798\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"6.137\",\n      weight: \"1.878\",\n      embodiedLand: \"0.36\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11799\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"9.639\",\n      weight: \"19.875\",\n      embodiedLand: \"11.311\",\n      embodiedWater: \"1.848\",\n    },\n    {\n      eid: \"e11800\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.64\",\n      weight: \"20.752\",\n      embodiedLand: \"2.723\",\n      embodiedWater: \"10.999\",\n    },\n    {\n      eid: \"e11801\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"72.797\",\n      weight: \"82.805\",\n      embodiedLand: \"8.475\",\n      embodiedWater: \"106.818\",\n    },\n    {\n      eid: \"e11802\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"752.606\",\n      weight: \"2216.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11824\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.785\",\n      weight: \"69\",\n      embodiedLand: \"0.615\",\n      embodiedWater: \"8.901\",\n    },\n    {\n      eid: \"e11825\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"43.6395248\",\n      weight: \"25.096\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11826\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"429.663\",\n      weight: \"250\",\n      embodiedLand: \"111.522\",\n      embodiedWater: \"2267.75\",\n    },\n    {\n      eid: \"e11827\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11828\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"109.987\",\n      weight: \"30\",\n      embodiedLand: \"16.331\",\n      embodiedWater: \"27.69\",\n    },\n    {\n      eid: \"e11829\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.487\",\n      weight: \"2.5\",\n      embodiedLand: \"1.554\",\n      embodiedWater: \"30.817\",\n    },\n    {\n      eid: \"e11830\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11951\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18298.88\",\n      weight: \"67086.608\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11952\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.537\",\n      weight: \"27.011\",\n      embodiedLand: \"11.171\",\n      embodiedWater: \"16.396\",\n    },\n    {\n      eid: \"e11953\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24935.4179\",\n      weight: \"104332.188\",\n      embodiedLand: \"47360.4095\",\n      embodiedWater: \"68441.9161\",\n    },\n    {\n      eid: \"e11954\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"96.16\",\n      weight: \"524.11\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11955\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"13.297\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11967\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24401.666\",\n      weight: \"75279.56\",\n      embodiedLand: \"28122.882\",\n      embodiedWater: \"36209.468\",\n    },\n    {\n      eid: \"e11968\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11996\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"174.23\",\n      weight: \"454.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11997\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11998\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.294\",\n      weight: \"4.58\",\n      embodiedLand: \"1.249\",\n      embodiedWater: \"1.53\",\n    },\n    {\n      eid: \"e11999\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.025\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12000\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.889\",\n      weight: \"21.609\",\n      embodiedLand: \"5.737\",\n      embodiedWater: \"157.097\",\n    },\n    {\n      eid: \"e12001\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.367\",\n      weight: \"1.583\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12002\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.467\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12003\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12004\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"22.327\",\n      weight: \"24.749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12012\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.455\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12013\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12043\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.578\",\n      weight: \"66\",\n      embodiedLand: \"38.092\",\n      embodiedWater: \"4450.248\",\n    },\n    {\n      eid: \"e12044\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12093\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.102\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12094\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"82.825\",\n      weight: \"18.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-worker/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-worker/index.axml",
    "content": "<view>{{description}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-worker/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman 使用WebWorker\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    description:\n      \"Doing layout... web-worker is enabled in this demo, so the layout will not block the page.\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        maxIteration: 8000,\n        gravity: 1,\n        workerEnabled: true,\n      },\n      animate: true,\n      defaultNode: {\n        size: 10,\n      },\n      defaultEdge: {\n        size: 1,\n      },\n    });\n\n    this.graph.on(\"afterlayout\", () => {\n      this.setData({\n        description: \"Done!\",\n      });\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/fruchterman-worker/index.json",
    "content": "{\n  \"defaultTitle\": \"使用Web-worker\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/interact-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst data2_m = {\n  nodes: [\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"1001\",\n      label: \"1001\",\n    },\n    {\n      id: \"1002\",\n      label: \"1002\",\n    },\n    {\n      id: \"1003\",\n      label: \"1003\",\n    },\n    {\n      id: \"1004\",\n      label: \"1004\",\n    },\n    {\n      id: \"1005\",\n      label: \"1005\",\n    },\n    {\n      id: \"1006\",\n      label: \"1006\",\n    },\n    {\n      id: \"1007\",\n      label: \"1007\",\n    },\n    {\n      id: \"1008\",\n      label: \"1008\",\n    },\n    {\n      id: \"1009\",\n      label: \"1009\",\n    },\n    {\n      id: \"1010\",\n      label: \"1010\",\n    },\n    {\n      id: \"1011\",\n      label: \"1011\",\n    },\n    {\n      id: \"1012\",\n      label: \"1012\",\n    },\n    {\n      id: \"1013\",\n      label: \"1013\",\n    },\n    {\n      id: \"1014\",\n      label: \"1014\",\n    },\n    {\n      id: \"1015\",\n      label: \"1015\",\n    },\n    {\n      id: \"1016\",\n      label: \"1016\",\n    },\n    {\n      id: \"1017\",\n      label: \"1017\",\n    },\n    {\n      id: \"1018\",\n      label: \"1018\",\n    },\n    {\n      id: \"1019\",\n      label: \"1019\",\n    },\n    {\n      id: \"1020\",\n      label: \"1020\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"41\",\n      label: \"41\",\n    },\n  ],\n  edges: [\n    {\n      source: \"2\",\n      target: \"1001\",\n    },\n    {\n      source: \"2\",\n      target: \"1002\",\n    },\n    {\n      source: \"2\",\n      target: \"1003\",\n    },\n    {\n      source: \"2\",\n      target: \"1004\",\n    },\n    {\n      source: \"2\",\n      target: \"1005\",\n    },\n    {\n      source: \"1001\",\n      target: \"1006\",\n    },\n    {\n      source: \"1001\",\n      target: \"1007\",\n    },\n    {\n      source: \"1001\",\n      target: \"1008\",\n    },\n    {\n      source: \"1001\",\n      target: \"1009\",\n    },\n    {\n      source: \"1001\",\n      target: \"1010\",\n    },\n    {\n      source: \"1002\",\n      target: \"1006\",\n    },\n    {\n      source: \"1002\",\n      target: \"1007\",\n    },\n    {\n      source: \"1002\",\n      target: \"1008\",\n    },\n    {\n      source: \"1002\",\n      target: \"1009\",\n    },\n    {\n      source: \"1002\",\n      target: \"1010\",\n    },\n    {\n      source: \"1003\",\n      target: \"1006\",\n    },\n    {\n      source: \"1003\",\n      target: \"1007\",\n    },\n    {\n      source: \"1003\",\n      target: \"1008\",\n    },\n    {\n      source: \"1003\",\n      target: \"1009\",\n    },\n    {\n      source: \"1003\",\n      target: \"1010\",\n    },\n    {\n      source: \"1010\",\n      target: \"1011\",\n    },\n    {\n      source: \"1010\",\n      target: \"1012\",\n    },\n    {\n      source: \"1010\",\n      target: \"1013\",\n    },\n    {\n      source: \"1010\",\n      target: \"1014\",\n    },\n    {\n      source: \"1010\",\n      target: \"1015\",\n    },\n    {\n      source: \"1010\",\n      target: \"1016\",\n    },\n    {\n      source: \"1010\",\n      target: \"1017\",\n    },\n    {\n      source: \"1008\",\n      target: \"1014\",\n    },\n    {\n      source: \"1008\",\n      target: \"1015\",\n    },\n    {\n      source: \"1008\",\n      target: \"1016\",\n    },\n    {\n      source: \"1008\",\n      target: \"1017\",\n    },\n    {\n      source: \"1017\",\n      target: \"1018\",\n    },\n    {\n      source: \"1017\",\n      target: \"1019\",\n    },\n    {\n      source: \"1016\",\n      target: \"1020\",\n    },\n    {\n      source: \"1016\",\n      target: \"1020\",\n    },\n    {\n      source: \"5\",\n      target: \"1020\",\n    },\n    {\n      source: \"41\",\n      target: \"1020\",\n    },\n    {\n      source: \"5\",\n      target: \"1009\",\n    },\n    {\n      source: \"41\",\n      target: \"1009\",\n    },\n  ],\n};\n\nexport { data, data2_m };\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/interact-radial/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/interact-radial/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/interact-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { data, data2_m } from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\n/**\n * 交互扩展节点的辐射布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n  mainUnitRadius: 80,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const focusNode = data.nodes[22];\n    focusNode.style = {\n      stroke: \"#00419F\",\n      fill: \"#729FFC\",\n      lineWidth: 2,\n    };\n\n    data.nodes[2].style = {\n      stroke: \"#00419F\",\n      fill: \"#729FFC\",\n      lineWidth: 2,\n    };\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"radial\",\n        maxIteration: 200,\n        focusNode,\n        unitRadius: this.mainUnitRadius,\n        linkDistance: 100,\n        preventOverlap: true,\n        nodeSize: 20,\n      },\n      animate: true,\n      modes: {\n        default: [\"drag-node\", \"click-select\", \"click-add-node\", \"drag-canvas\"],\n      },\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.on(\"node:tap\", (ev) => {\n      const itemModel = ev.item.getModel();\n      const nodes = this.graph.getNodes();\n      const edges = this.graph.getEdges();\n      let newData;\n      if (itemModel.id === \"2\") newData = data2_m;\n      else return;\n      const newNodeModels = newData.nodes;\n      const newEdgeModels = [];\n      // deduplication the items in newEdgeModels\n      newData.edges.forEach(function (e) {\n        let exist = false;\n        newEdgeModels.forEach(function (ne) {\n          if (ne.source === e.source && ne.target === e.target) exist = true;\n        });\n        if (!exist) {\n          newEdgeModels.push(e);\n        }\n      });\n\n      // for graph.changeData()\n      const allNodeModels = [];\n      const allEdgeModels = [];\n\n      // add new nodes to graph\n      const nodeMap = new Map();\n      nodes.forEach((n) => {\n        const nModel = n.getModel();\n        nodeMap.set(nModel.id, n);\n      });\n      newNodeModels.forEach((nodeModel) => {\n        if (nodeMap.get(nodeModel.id) === undefined) {\n          // set the initial positions of the new nodes to the focus(clicked) node\n          nodeModel.x = itemModel.x;\n          nodeModel.y = itemModel.y;\n          this.graph.addItem(\"node\", nodeModel);\n        }\n      });\n\n      // add new edges to graph\n      const edgeMap = new Map();\n      edges.forEach(function (e, i) {\n        const eModel = e.getModel();\n        edgeMap.set(`${eModel.source},${eModel.target}`, i);\n      });\n      const oldEdgeNum = edges.length;\n      newEdgeModels.forEach(function (em, i) {\n        const exist = edgeMap.get(`${em.source},${em.target}`);\n        if (exist === undefined) {\n          this.graph.addItem(\"edge\", em);\n          edgeMap.set(`${em.source},${em.target}`, oldEdgeNum + i);\n        }\n      });\n\n      edges.forEach((e) => {\n        allEdgeModels.push(e.getModel());\n      });\n      nodes.forEach((n) => {\n        allNodeModels.push(n.getModel());\n      });\n      // the max degree about foces(clicked) node in the newly added data\n      const maxDegree = 4;\n      // the max degree about foces(clicked) node in the original data\n      const oMaxDegree = 3;\n      const unitRadius = 40;\n      // re-place the clicked node far away the exisiting items\n      // along the radius from center node to it\n      const vx = itemModel.x - focusNode.x;\n      const vy = itemModel.y - focusNode.y;\n      const vlength = Math.sqrt(vx * vx + vy * vy);\n      const ideallength =\n        unitRadius * maxDegree + this.mainUnitRadius * oMaxDegree;\n      itemModel.x = (ideallength * vx) / vlength + focusNode.x;\n      itemModel.y = (ideallength * vy) / vlength + focusNode.y;\n\n      const Radial = F6.layout.radial;\n      const subRadialLayout = new Radial({\n        center: [itemModel.x, itemModel.y],\n        maxIteration: 200,\n        focusNode: \"2\",\n        unitRadius,\n        linkDistance: 180,\n        preventOverlap: true,\n      });\n      subRadialLayout.init({\n        nodes: newNodeModels,\n        edges: newEdgeModels,\n      });\n      subRadialLayout.execute();\n      this.graph.positionsAnimate();\n      this.graph.data({\n        nodes: allNodeModels,\n        edges: allEdgeModels,\n      });\n    });\n\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/interact-radial/index.json",
    "content": "{\n  \"defaultTitle\": \"交互扩展节点的辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-timing/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-timing/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-timing/index.axml",
    "content": "<view> {{message}} </view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-timing/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * layoutTiming\n */\n\nlet currentPage = null;\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    message: \"\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    // 获取文本框\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n    currentPage = this;\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 40,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        nodeSize: 20,\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n    });\n\n    // 监听\n    this.graph.on(\"beforelayout\", function () {\n      currentPage.setData({\n        message:\n          \"Doing force-directed layout... the text will be changed after the layout being done.\",\n      });\n    });\n\n    this.graph.on(\"afterlayout\", function () {\n      currentPage.setData({\n        message: \"Done!\",\n      });\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-timing/index.json",
    "content": "{\n  \"defaultTitle\": \"布局时机监听\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-translate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-translate/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nimport concentric from \"@antv/f6/dist/extends/layout/concentricLayout\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\n\n/**\n * layoutTranslate\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n    F6.registerLayout(\"grid\", grid);\n    F6.registerLayout(\"force\", force);\n    F6.registerLayout(\"radial\", radial);\n    F6.registerLayout(\"concentric\", concentric);\n    F6.registerLayout(\"mds\", mds);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"circular\", // TODO:random\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n      animate: true,\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"circular\",\n        radius: 200,\n      });\n    }, 3000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"grid\",\n      });\n    }, 6000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"force\",\n        preventOverlap: true,\n        nodeSize: 20,\n      });\n    }, 9000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"radial\",\n        preventOverlap: true,\n        nodeSize: 15,\n      });\n    }, 12000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"concentric\",\n        minNodeSpacing: 30,\n      });\n    }, 15000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"mds\",\n        linkDistance: 100,\n      });\n    }, 18000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/layout-translate/index.json",
    "content": "{\n  \"defaultTitle\": \"布局切换\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst { nodes } = data;\nnodes.forEach((node) => {\n  node.size = Math.random() * 20 + 10;\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-radial/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-radial/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\n/**\n * 防止节点重叠的严格辐射布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 50,\n        preventOverlap: true,\n        maxPreventOverlapIteration: 100,\n      },\n      animate: true,\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-radial/index.json",
    "content": "{\n  \"defaultTitle\": \"防止节点重叠的严格辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-unstrict-radial/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-unstrict-radial/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-unstrict-radial/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-unstrict-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\n/**\n * 防止节点重叠的非严格辐射布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 70,\n        preventOverlap: true,\n        strictRadial: false,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/prevent-overlap-unstrict-radial/index.json",
    "content": "{\n  \"defaultTitle\": \"防止节点重叠的非严格辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/radial-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/radial-configuration-translate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/radial-configuration-translate/index.axml",
    "content": "<view>{{description}}</view><f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/radial-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\n/**\n * Radial布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    description:\n      \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: false\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 50,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    setInterval(function () {\n      layoutConfigTranslation();\n    }, 7000);\n\n    function layoutConfigTranslation() {\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          preventOverlap: true,\n          nodeSize: 20,\n        });\n      }, 1000);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 0, unitRadius = 80, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          unitRadius: 80,\n        });\n      }, 2500);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 10, unitRadius = 80, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          focusNode: \"10\",\n        });\n      }, 4000);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 20, unitRadius = 80, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          focusNode: \"20\",\n        });\n      }, 5500);\n\n      setTimeout(function () {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: false\",\n        });\n        me.graph.updateLayout({\n          focusNode: \"0\",\n          preventOverlap: false,\n          unitRadius: 50,\n        });\n      }, 5500);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/radial-configuration-translate/index.json",
    "content": "{\n  \"defaultTitle\": \"布局参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sort-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"1\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"2\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"3\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"4\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"5\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"6\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"7\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"8\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"9\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"10\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"11\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"12\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"13\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"14\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"15\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"16\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"17\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"18\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"19\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"20\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"21\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"22\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"23\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"24\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"25\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"26\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"27\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"28\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"29\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"30\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"31\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"32\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"33\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst colors = [\"steelblue\", \"green\", \"pink\", \"grey\"];\nconst colorsObj = { a: \"steelblue\", b: \"green\", c: \"pink\", d: \"grey\" };\ndata.nodes.forEach((node) => {\n  node.size = 20;\n  node.style = {\n    lineWidth: 4,\n    fill: \"#fff\",\n    stroke: colors[node.sortAttr2] || colorsObj[node.sortAttr2],\n  };\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sort-radial/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sort-radial/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sort-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\n/**\n * 同层节点按照指定字段聚类\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 30,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 70,\n        maxIteration: 1000,\n        linkDistance: 10,\n        preventOverlap: true,\n        nodeSize: 30,\n        sortBy: \"sortAttr2\",\n        sortStrength: 50,\n      },\n      animate: true,\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sort-radial/index.json",
    "content": "{\n  \"defaultTitle\": \"同层节点按照指定字段聚类\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/spiral-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/spiral-circular/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/spiral-circular/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/spiral-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\n/**\n * 螺旋线布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n        startRadius: 10,\n        endRadius: 300,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/spiral-circular/index.json",
    "content": "{\n  \"defaultTitle\": \"螺旋线布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/subgraph-layout/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/subgraph-layout/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/subgraph-layout/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/subgraph-layout/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport Force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * subgraphLayout\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const { nodes } = data;\n\n    nodes.forEach(function (node, i) {\n      if (i <= 16 && i !== 12) {\n        if (!node.style) {\n          node.style = {\n            fill: \"#F6C3B7\",\n            stroke: \"#E8684A\",\n          };\n        } else {\n          node.style.fill = \"lightsteelblue\";\n        }\n      }\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 40,\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        size: 20,\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    setTimeout(() => {\n      // const { nodes } = data;\n      const { edges } = data;\n      const newNodes = [];\n      const newEdges = [];\n      const newNodeMap = new Map();\n      // fix the nodes[0]\n      nodes[0].fx = nodes[0].x;\n      nodes[0].fy = nodes[0].y;\n      // add the nodes which should be re-layout\n      nodes.forEach(function (node, i) {\n        if (i <= 16 && i !== 12) {\n          newNodes.push(node);\n          newNodeMap.set(node.id, i);\n        }\n      });\n      // add related edges\n      edges.forEach(function (edge) {\n        const sourceId = edge.source;\n        const targetId = edge.target;\n        if (\n          newNodeMap.get(sourceId) !== undefined &&\n          newNodeMap.get(targetId) !== undefined\n        ) {\n          newEdges.push(edge);\n        }\n      });\n\n      const subForceLayout = new Force({\n        center: [nodes[0].x, nodes[0].y],\n        linkDistance: 70,\n        preventOverlap: true,\n        nodeSize: 20,\n        tick: () => {\n          // the tick function to show the animation of layout process\n          this.graph.refreshPositions();\n        },\n      });\n      subForceLayout.init({\n        nodes: newNodes,\n        edges: newEdges,\n      });\n      subForceLayout.execute();\n    }, 1000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/subgraph-layout/index.json",
    "content": "{\n  \"defaultTitle\": \"子图布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sublayout-pipes/data.js",
    "content": "const data = { nodes: [], edges: [] };\nfor (let i = 0; i < 32; i++) {\n  data.nodes.push({\n    id: `${i}`,\n    label: i < 17 ? `employee-${i}` : `company-${i - 17}`,\n    dataType: i < 17 ? \"employee\" : \"company\",\n    style:\n      i < 17\n        ? { stroke: \"#5D7092\", fill: \"#5D7092\", fillOpacity: 0.5 }\n        : { stroke: \"#5B8FF9\", fill: \"#5B8FF9\", fillOpacity: 0.5 },\n  });\n}\ndata.edges = [\n  { source: \"0\", target: \"1\" },\n  { source: \"0\", target: \"2\" },\n  { source: \"0\", target: \"3\" },\n  { source: \"0\", target: \"4\" },\n  { source: \"0\", target: \"5\" },\n  { source: \"0\", target: \"6\" },\n  { source: \"1\", target: \"2\" },\n  { source: \"1\", target: \"3\" },\n  { source: \"1\", target: \"4\" },\n  { source: \"1\", target: \"5\" },\n  { source: \"1\", target: \"6\" },\n  { source: \"2\", target: \"3\" },\n  { source: \"2\", target: \"4\" },\n  { source: \"2\", target: \"5\" },\n  { source: \"2\", target: \"6\" },\n\n  { source: \"7\", target: \"8\" },\n  { source: \"8\", target: \"9\" },\n  { source: \"9\", target: \"10\" },\n\n  { source: \"11\", target: \"12\" },\n  { source: \"12\", target: \"13\" },\n  { source: \"13\", target: \"14\" },\n  { source: \"14\", target: \"15\" },\n  { source: \"15\", target: \"16\" },\n  { source: \"11\", target: \"14\" },\n\n  { source: \"31\", target: \"11\" },\n  { source: \"24\", target: \"4\" },\n  { source: \"23\", target: \"7\" },\n];\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"employee\",\n      label: \"employee\",\n      style: { stroke: \"#5D7092\", fill: \"#5D7092\" },\n    },\n    {\n      id: \"company\",\n      label: \"company\",\n      style: { stroke: \"#5B8FF9\", fill: \"#5B8FF9\" },\n    },\n  ],\n  edges: [],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sublayout-pipes/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sublayout-pipes/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sublayout-pipes/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { data, legendData } from \"./data\";\n// import fruchtermanLayout from '@antv/f6/dist/extends/layout/fruchtermanLayout';\n/**\n * sublayoutPipes\n */\n\n// 注册布局\n// F6.registerLayout('fruchterman', fruchtermanLayout);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 新建F6.legend实例\n    // TODO:Ledgend is not a constructor\n    const legend = new F6.Legend({\n      data: legendData,\n      align: \"center\",\n      layout: \"horizontal\", // vertical\n      position: \"bottom-left\",\n      vertiSep: 12,\n      horiSep: 24,\n      offsetY: -24,\n      padding: [4, 16, 8, 16],\n      containerStyle: {\n        fill: \"#ccc\",\n        lineWidth: 1,\n      },\n      title: \"Legend\",\n      titleConfig: {\n        position: \"left\",\n        offsetX: 0,\n        offsetY: 12,\n      },\n      filter: {\n        enable: true,\n        multiple: true,\n        trigger: \"click\",\n        graphActiveState: \"activeByLegend\",\n        graphInactiveState: \"inactiveByLegend\",\n        filterFunctions: {\n          a: (d) => {\n            if (d.cluster === \"a\") return true;\n            return false;\n          },\n          b: (d) => {\n            if (d.cluster === \"b\") return true;\n            return false;\n          },\n          c: (d) => {\n            if (d.cluster === \"c\") return true;\n            return false;\n          },\n          d: (d) => {\n            if (d.cluster === \"d\") return true;\n            return false;\n          },\n        },\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 40,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      plugins: [legend],\n      animate: true,\n      nodeStateStyles: {\n        activeByLegend: {\n          lineWidth: 5,\n          strokeOpacity: 0.5,\n          stroke: \"#f00\",\n        },\n        inactiveByLegend: {\n          opacity: 0.5,\n        },\n      },\n      layout: {\n        pipes: [\n          {\n            type: \"circular\",\n            nodesFilter: (node) => +node.id <= 6,\n            center: [(width / 5) * 4 - 30, height / 2],\n            radius: width / 10,\n          },\n          {\n            type: \"circular\",\n            nodesFilter: (node) => +node.id >= 7 && +node.id <= 10,\n            center: [width / 20 + 30, (height / 3) * 2],\n            radius: width / 20,\n          },\n          {\n            type: \"circular\",\n            nodesFilter: (node) => +node.id >= 11 && +node.id <= 16,\n            center: [width / 20 + 30, height / 3],\n            radius: width / 20,\n          },\n          {\n            type: \"grid\",\n            nodesFilter: (node) => +node.id > 16,\n            begin: [width / 10 + 50, 20],\n            width: (width / 5) * 3 - 100,\n            height: height - 40,\n          },\n        ],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/general-graph/sublayout-pipes/index.json",
    "content": "{\n  \"defaultTitle\": \"流水线子图布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/index/index.acss",
    "content": ".banner {\n  height: 455rpx;\n  width: 100%;\n  background-image: url('../../common/images/component_bg.png');\n  background-size: contain;\n  background-repeat: no-repeat;\n  position: relative;\n  z-index: 2;\n}\n\n.logo {\n  width: 105rpx;\n  height: 117rpx;\n  position: absolute;\n  top: 122rpx;\n  left: 50%;\n  transform: translate(-50%);\n}\n\n.logo image {\n  width: 100%;\n  height: 100%;\n}\n\n.title {\n  font-size: 46rpx;\n  color: #fff;\n  position: absolute;\n  top: 260rpx;\n  left: 50%;\n  font-weight: bold;\n  transform: translate(-50%);\n}\n\n.sub-title {\n  color: rgba(255, 255, 255, 0.48);\n  font-size: 24rpx;\n  position: absolute;\n  top: 330rpx;\n  left: 50%;\n  transform: translate(-50%);\n}\n\n.fake-searchbar {\n  position: absolute;\n  bottom: 0;\n  left: 50%;\n  transform: translate(-50%, 50%);\n  height: 92rpx;\n  width: 91.4%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  background-color: #fff;\n  border-radius: 4rpx;\n  box-shadow: rgba(153, 153, 153, 0.24) 0 2px 7px;\n}\n\n.fake-placeholder {\n  margin-left: 12rpx;\n  color: rgba(153, 153, 153, 0.89);\n  font-size: 28rpx;\n}\n\n.hot {\n  padding-top: 60px;\n  padding-bottom: 30rpx;\n  padding-left: 4.26%;\n  padding-right: 4.26%;\n  box-sizing: border-box;\n}\n\n.tabs {\n  height: 92rpx;\n  position: sticky;\n  background-color: #fff;\n  z-index: 1;\n}\n\n.tabs.shadow {\n  box-shadow: rgba(153, 153, 153, 0.24) 0 2px 7px;\n}\n\n.tabs-bar {\n  padding: 0 64rpx;\n  display: flex;\n  height: 100%;\n}\n\n.tabs-bar-tab {\n  bottom: 0;\n  flex: 1;\n  display: flex;\n  justify-content: center;\n  font-size: 32rpx;\n}\n\n.tabs-bar-tab-title {\n  color: #999;\n  padding: 16rpx 0;\n  display: flex;\n  align-items: center;\n  border-bottom: 3px solid transparent;\n  box-sizing: border-box;\n}\n\n.tabs-bar-tab-title.active {\n  font-weight: bold;\n  color: #1371f7;\n  border-bottom: 3px solid #1371f7;\n}\n\n.component-name {\n  color: rgb(51, 51, 51);\n  margin-right: 10rpx;\n  text-indent: 3em;\n}\n\n.component-brief {\n  color: #ccc;\n  font-size: 34rpx;\n}\n\n.list {\n  padding: 32rpx;\n  flex-shrink: 0;\n  box-sizing: border-box;\n  width: 100%;\n}\n\n.list-header {\n  width: 100%;\n  box-sizing: border-box;\n  padding-top: 40rpx;\n  padding-bottom: 20rpx;\n  display: flex;\n  align-items: center;\n  background-color: #fff;\n  color: #333;\n  font-weight: bold;\n  font-size: 34rpx;\n  padding-left: 32rpx;\n}\n\n.thumb-wrapper {\n  position: relative;\n}\n.thumb {\n  height: 40rpx;\n  width: 40rpx;\n  position: absolute;\n  top: 22rpx;\n  margin-left: 30rpx;\n}\n\n.am-collapse-item-title-text-wrapper {\n  text-indent: 2em;\n}\n\n.am-icon-right {\n  color: black;\n}\n\n.am-list-header {\n  box-sizing: border-box;\n  padding: 0;\n}\n\n.am-list-body::before {\n  display: none;\n}\n\n.list-item {\n  margin-bottom: 35rpx;\n}\n\n.list-wrap {\n  overflow: hidden;\n}\n\n.list-container {\n  display: flex;\n  width: 100%;\n  transition-duration: 500ms;\n}\n\n.logo_devCenter {\n  position: fixed;\n  right: 32rpx;\n  bottom: 44rpx;\n  width: 109rpx;\n  height: 121rpx;\n}\n\n.border-false {\n  border: 1rpx solid #ddd;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/index/index.axml",
    "content": "<view>\n  <view class=\"banner\">\n    <view class=\"logo\" style=\"opacity: {{titleOpacity}}\"><image src=\"../../common/images/antvf6.png\" mode=\"aspectFit\" /></view>\n    <view class=\"title\" style=\"opacity: {{titleOpacity}}\">F6官方示例</view>\n    <view class=\"sub-title\"style=\"opacity: {{titleOpacity}}\">移动端可视化解决方案F6 demos</view>\n    <view class=\"fake-searchbar\" onTap=\"onSearchBarTap\">\n      <icon type=\"search\" size=\"14\" color=\"#1D1D1D\" />\n      <text class=\"fake-placeholder\">搜索你感兴趣的图可视化方案</text>\n    </view>\n  </view>\n\n  <!-- 热搜词 -->\n  <block-list listData=\"{{hot}}\" className=\"hot\" />\n  <view class=\"tabs {{shadow ? 'shadow' : ''}}\" style=\"top: {{top}}px\">\n    <view class=\"tabs-bar\">\n      <block a:for=\"{{tabs}}\">\n        <view class=\"tabs-bar-tab\" data-index=\"{{index}}\" onTap=\"onTabBarTap\">\n          <view class=\"tabs-bar-tab-title {{activeTab === index ? 'active' : ''}}\">{{item}}</view>\n        </view>\n      </block>\n    </view>\n  </view>\n\n  <!-- 展示列表 -->\n  <view class=\"list-wrap\">\n    <view class=\"list-container\" style=\"{{ transform: 'translate3d(' +(-activeTab * 100) + 'vw, 0, 0)' }}\">\n      \n      \n      <!-- 基础能力 -->\n      <view class=\"list\" style=\"{{ height: activeTab === 0 ? 'auto' : 0 }}\">\n        <block a:for=\"{{basicComponentList}}\" a:for-item=\"list\">\n          <list className=\"list-item\">\n            <view slot=\"header\" class=\"list-header\">{{list.type}}</view>\n            <collapse\n              className=\"demo-collapse\"\n              collapseKey=\"collapse\"\n              activeKey=\"{{[]}}\"\n              onChange=\"onChange\"\n            >\n              <block a:for=\"{{list.list}}\">\n                <view class=\"thumb-wrapper\">\n                  <image src=\"{{item.thumb}}\" class=\"thumb\"  mode=\"aspectFit\" />\n                </view>\n                <collapse-item header=\"{{item.name}}\" itemKey=\"item-{{item.nameEn}}\" collapseKey=\"collapse\">\n                  <block a:for=\"{{item.detailList}}\">\n                    <list-item arrow=\"{{true}}\" multipleLine=\"{{false}}\" key=\"items-{{item.name}}\" last=\"{{true}}\" onClick=\"openPage\" data-url=\"{{item.path}}\">\n                      <view style=\"display: flex; align-items: center\">\n                        <image src=\"{{nut}}\" class=\"thumb\"  mode=\"aspectFit\" />\n                        <text class=\"component-name\">{{item.name}}</text>\n                      </view>\n                    </list-item>\n                  </block>\n                </collapse-item>\n              </block>\n            </collapse>\n          </list>\n        </block>\n      </view>\n\n\n\n      <!-- 拓展能力 -->\n      <view class=\"list\" style=\"{{ height: activeTab === 1 ? 'auto' : 0 }}\">\n        <block a:for=\"{{extComponentList}}\" a:for-item=\"list\">\n          <list className=\"list-item\">\n            <view slot=\"header\" class=\"list-header\">{{list.type}}</view>\n            <collapse\n              className=\"demo-collapse\"\n              collapseKey=\"collapse\"\n              activeKey=\"{{[]}}\"\n              onChange=\"onChange\"\n            >\n              <block a:for=\"{{list.list}}\">\n                <view class=\"thumb-wrapper\">\n                  <image src=\"{{item.thumb}}\" class=\"thumb\" mode=\"aspectFit\" />\n                </view>\n                <collapse-item header=\"{{item.name}}\" itemKey=\"item-{{item.nameEn}}\" collapseKey=\"collapse\">\n                <block a:for=\"{{item.detailList}}\">\n                  <list-item arrow=\"{{true}}\" multipleLine=\"{{false}}\" key=\"items-{{item.name}}\" last=\"{{true}}\" onClick=\"openPage\" data-url=\"{{item.path}}\">\n                    <view style=\"display: flex; align-items: center\">\n                      <image src=\"{{nut}}\" class=\"thumb\"  mode=\"aspectFit\" />\n                      <text class=\"component-name\">{{item.name}}</text>\n                    </view>\n                  </list-item>\n                </block>\n                </collapse-item>\n              </block>\n            </collapse>\n          </list>\n        </block>\n      </view>\n    </view>\n  </view>\n</view>\n\n<!-- 下面这个可以删除，是开发者按钮 -->\n<image mode=\"scaleToFill\" src=\"/image/logo_devCenter.png\" class=\"logo_devCenter\" onTap=\"goDevCenter\"/>"
  },
  {
    "path": "packages/examples-alipay/pages/index/index.js",
    "content": "import {\n  treeGraphContainer,\n  generalGraphContainer,\n  basicElementContainer,\n  basicInteractiveContainer,\n  aminationContainer,\n  customizeTree,\n  classicCace,\n  newsMapVisualize,\n  plugins,\n  hot,\n  tabs,\n} from \"../../common/utils/data\";\n\n// 这个是基础组件tab的标题\nconst basicComponentList = [\n  {\n    type: \"树图\",\n    list: treeGraphContainer,\n  },\n  {\n    type: \"一般图\",\n    list: generalGraphContainer,\n  },\n  {\n    type: \"元素\",\n    list: basicElementContainer,\n  },\n  {\n    type: \"交互\",\n    list: basicInteractiveContainer,\n  },\n  {\n    type: \"动画\",\n    list: aminationContainer,\n  },\n];\n\n// 这里控制拓展组件的盒子个数\nconst extComponentList = [\n  {\n    type: \"自定义树\",\n    list: customizeTree,\n  },\n  {\n    type: \"经典案例\",\n    list: classicCace,\n  },\n  {\n    type: \"新闻图可视化\",\n    list: newsMapVisualize,\n  },\n  {\n    type: \"分析组件\",\n    list: plugins,\n  },\n];\n\nPage({\n  data: {\n    showInfoObj: {}, // 控制各个框框的气泡显示\n    nut: \"/images/icon/nut.png\", // 下拉框的项目符号\n    top: 0,\n    hot, // 控制搜索框下面的热词\n    tabs, // 控制tab栏的文字显示\n    activeTab: 0, // 默认的tab激活\n    basicComponentList, // 基础组件tab\n    extComponentList, // 拓展组件tab\n    titleOpacity: 1,\n    shadow: false,\n  },\n  onPageScroll(e) {\n    const { scrollTop } = e;\n    let titleOpacity = 1 - scrollTop * 0.02;\n    let shadow = false;\n\n    if (titleOpacity < 0) {\n      titleOpacity = 0;\n    }\n\n    if (titleOpacity > 1) {\n      titleOpacity = 1;\n    }\n\n    if (scrollTop > 80) {\n      my.setNavigationBar({\n        title: \"F6官方示例\",\n      });\n    } else {\n      my.setNavigationBar({\n        title: \" \",\n      });\n    }\n\n    if (scrollTop > 320) {\n      shadow = true;\n    } else {\n      shadow = false;\n    }\n\n    this.setData({\n      shadow,\n      titleOpacity,\n    });\n  },\n  onSearchBarTap() {\n    // 点击搜索框的回调\n    console.log(\"点击了搜索框\");\n    my.navigateTo({\n      url: \"../search/search\",\n    });\n  },\n  onTabBarTap(e) {\n    const { index } = e.target.dataset;\n    this.setData({\n      activeTab: index,\n    });\n    console.log(\"activeTab\", this.data.activeTab);\n  },\n  onLoad() {\n    my.getSystemInfo({\n      // 获取系统信息\n      success: (res) => {\n        if (res.statusBarHeight && res.titleBarHeight) {\n          this.setData({\n            top: res.statusBarHeight + res.titleBarHeight,\n          });\n        }\n      },\n    });\n  },\n  goDevCenter() {\n    // 开发者中心的按钮，后续可以去掉\n    my.navigateToMiniProgram({\n      appId: \"2018082061148052\",\n      path: \"pages/discover/discover\",\n      extraData: {\n        from: \"miniDemo\",\n      },\n    });\n  },\n  openPage(e) {\n    // 点开页面的回调\n    my.navigateTo({\n      url: e.target.dataset.url,\n    });\n  },\n\n  // 检查点击是否成功\n  onChange(e) {\n    console.log(\"collapse change\", e);\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/index/index.json",
    "content": "{\n  \"defaultTitle\": \"\",\n  \"allowsBounceVertical\": \"NO\",\n  \"transparentTitle\": \"auto\",\n  \"titleBarColor\": \"#262833\",\n  \"usingComponents\": {\n    \"block-list\": \"../../common/components/block-list/block-list\",\n    \"list\": \"mini-ali-ui/es/list/index\",\n    \"list-item\": \"mini-ali-ui/es/list/list-item/index\",\n    \"collapse\": \"mini-ali-ui/es/collapse/index\",\n    \"collapse-item\": \"mini-ali-ui/es/collapse/collapse-item/index\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/activate-relations/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/activate-relations/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/activate-relations/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/activate-relations/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * activateRelations:内置的高亮节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerLayout(\"force\", force);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const tooltip = new F6.Tooltip({\n      offsetX: 10,\n      offsetY: 10,\n      fixToNode: [1, 0.5],\n      // the types of items that allow the tooltip show up\n      // 允许出现 tooltip 的 item 类型\n      itemTypes: [\"node\", \"edge\"],\n      // custom the tooltip's content\n      // 自定义 tooltip 内容\n      getContent: (e) => {\n        const outDiv = document.createElement(\"div\");\n        outDiv.style.width = \"fit-content\";\n        outDiv.style.height = \"fit-content\";\n        const model = e.item.getModel();\n        if (e.item.getType() === \"node\") {\n          outDiv.innerHTML = `${model.name}`;\n        } else {\n          const source = e.item.getSource();\n          const target = e.item.getTarget();\n          outDiv.innerHTML = `来源：${source.getModel().name}<br/>去向：${\n            target.getModel().name\n          }`;\n        }\n        return outDiv;\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      layout: {\n        type: \"force\",\n        edgeStrength: 0.7,\n      },\n      plugins: [tooltip],\n      modes: {\n        default: [\"drag-canvas\", \"activate-relations\"],\n      },\n      defaultNode: {\n        size: [10, 10],\n        /* style for the keyShape */\n        // style: {\n        //   lineWidth: 2,\n        //   fill: '#DEE9FF',\n        //   stroke: '#5B8FF9',\n        // },\n      },\n      defaultEdge: {\n        /* style for the keyShape */\n        style: {\n          stroke: \"#aaa\",\n          lineAppendWidth: 2,\n          opacity: 0.3,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/activate-relations/index.json",
    "content": "{\n  \"defaultTitle\": \"内置的高亮节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/add-child/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/add-child/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/add-child/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/add-child/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * addChild\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      modes: {\n        default: [\"collapse-expand\", \"drag-canvas\"],\n      },\n      fitView: true,\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        defalutPosition: [],\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 50;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n    this.graph.node(function (node) {\n      return {\n        size: 16,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        label: node.id,\n        labelCfg: {\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    this.graph.edge(function () {\n      return {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    let count = 0;\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n\n      const nodeId = item.get(\"id\");\n      const model = item.getModel();\n      const { children } = model;\n      if (!children || children.length === 0) {\n        const childData = {\n          id: `child-data-${count}`,\n          type: \"rect\",\n          children: [\n            {\n              id: `x-${count}`,\n            },\n            {\n              id: `y-${count}`,\n            },\n          ],\n        };\n        this.graph.addChild(childData, nodeId);\n        count++;\n      }\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/add-child/index.json",
    "content": "{\n  \"defaultTitle\": \"使用addChild\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/canvas-two-fingers/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/canvas-two-fingers/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/canvas-two-fingers/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/canvas-two-fingers/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * canvasTwoFingers\n */\n\n// 注册行为\nF6.registerBehavior(\"double-finger-drag-canvas\", {\n  getEvents: function getEvents() {\n    return {\n      \"canvas:drag\": \"onWheel\",\n    };\n  },\n\n  onWheel: function onWheel(ev) {\n    if (ev.ctrlKey) {\n      const canvas = this.graph.get(\"canvas\"); // 这里显示graph找不到\n      const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n      let ratio = this.graph.getZoom();\n      if (ev.wheelDelta > 0) {\n        ratio += ratio * 0.05;\n      } else {\n        ratio -= ratio * 0.05;\n      }\n      this.graph.zoomTo(ratio, {\n        x: point.x,\n        y: point.y,\n      });\n    } else {\n      const x = ev.deltaX || ev.movementX;\n      const y = ev.deltaY || ev.movementY;\n      this.graph.translate(-x, -y);\n    }\n    ev.preventDefault();\n  },\n});\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    currentMode: \"请选择模式\",\n  },\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\"double-finger-drag-canvas\"],\n      },\n      layout: {\n        type: \"force\",\n      },\n    });\n\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/canvas-two-fingers/index.json",
    "content": "{\n  \"defaultTitle\": \"两指平移画布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-data/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-data/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-data/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-data/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * changeData\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      modes: {\n        default: [\"collapse-expand\", \"drag-canvas\"],\n      },\n      fitView: true,\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        defalutPosition: [],\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 50;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        size: 16,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        label: node.id,\n        labelCfg: {\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    let i = 0;\n    this.graph.edge(function () {\n      i++;\n      return {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n        label: i,\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    let count = 0;\n\n    this.graph.on(\"node:tap\", function (evt) {\n      const { item } = evt;\n\n      const nodeId = item.get(\"id\");\n      const model = item.getModel();\n      const { children } = model;\n      if (!children || children.length === 0) {\n        const childData = [\n          {\n            id: `child-data-${count}`,\n            type: \"rect\",\n            children: [\n              {\n                id: `x-${count}`,\n              },\n              {\n                id: `y-${count}`,\n              },\n            ],\n          },\n          {\n            id: `child-data1-${count}`,\n            children: [\n              {\n                id: `x1-${count}`,\n              },\n              {\n                id: `y1-${count}`,\n              },\n            ],\n          },\n        ];\n\n        const parentData = this.graph.findDataById(nodeId);\n        if (!parentData.children) {\n          parentData.children = [];\n        }\n        // 如果childData是一个数组，则直接赋值给parentData.children\n        // 如果是一个对象，则使用parentData.children.push(obj)\n        parentData.children = childData;\n        this.graph.changeData();\n        count++;\n      }\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-data/index.json",
    "content": "{\n  \"defaultTitle\": \"使用changeData\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-members/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"公司1\",\n      group: 1,\n    },\n    {\n      id: \"2\",\n      label: \"公司2\",\n      group: 1,\n    },\n    {\n      id: \"3\",\n      label: \"公司3\",\n      group: 1,\n    },\n    {\n      id: \"4\",\n      label: \"公司4\",\n      group: 1,\n    },\n    {\n      id: \"5\",\n      label: \"公司5\",\n      group: 2,\n    },\n    {\n      id: \"6\",\n      label: \"公司6\",\n      group: 2,\n    },\n    {\n      id: \"7\",\n      label: \"公司7\",\n      group: 2,\n    },\n    {\n      id: \"8\",\n      label: \"公司8\",\n      group: 2,\n    },\n    {\n      id: \"9\",\n      label: \"公司9\",\n      group: 2,\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"1\",\n      type: \"loop\",\n    },\n    {\n      source: \"2\",\n      target: \"2\",\n      type: \"loop\",\n    },\n    {\n      source: \"1\",\n      target: \"2\",\n      data: {\n        type: \"A\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"8\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-members/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-members/index.axml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-members/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\n\n/**\n * changeMembers：修改包裹内部成员\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    discription: \"Wait for the layout to complete...\",\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerLayout(\"grid\", grid);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"grid\",\n      },\n    });\n\n    const hull1 = this.graph.createHull({\n      id: \"hull1\",\n      type: \"smooth-convex\",\n      padding: 15,\n      members: this.graph\n        .getNodes()\n        .filter((node) => node.getModel().group === 1),\n    });\n    const hull2 = this.graph.createHull({\n      id: \"hull2\",\n      members: this.graph\n        .getNodes()\n        .filter((node) => node.getModel().group === 2),\n      padding: 15,\n      type: \"bubble\",\n      style: {\n        fill: \"pink\",\n        stroke: \"red\",\n      },\n      update: \"drag\",\n    });\n\n    this.graph.on(\"canvas:contextmenu\", (ev) => {\n      ev.preventDefault();\n      ev.stopPropagation();\n      const item = this.graph.addItem(\"node\", {\n        x: ev.x,\n        y: ev.y,\n        id: Math.random(),\n        group: 2,\n      });\n      hull2.addMember(item);\n    });\n\n    this.graph.on(\"afterupdateitem\", (e) => {\n      if (\n        hull1.members.indexOf(e.item) > -1 ||\n        hull1.nonMembers.indexOf(e.item) > -1\n      ) {\n        hull1.updateData(hull1.members);\n      }\n    });\n\n    this.graph.on(\"node:dragend\", (e) => {\n      const { item } = e;\n      const memberIdx = hull2.members.indexOf(item);\n      if (memberIdx > -1) {\n        // 如果移出原hull范围，则去掉\n        if (!hull2.contain(item)) {\n          hull2.removeMember(item);\n        } else {\n          hull2.updateData(hull2.members);\n        }\n      } else if (hull2.contain(item)) hull2.addMember(item);\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/change-members/index.json",
    "content": "{\n  \"defaultTitle\": \"修改包裹内部成员\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/collapse-slibing/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  cluster: \"c0\",\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      cluster: \"c0\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n          cluster: \"c1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          cluster: \"c1\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n              cluster: \"c1\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode5\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode6\",\n      cluster: \"c1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/collapse-slibing/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/collapse-slibing/index.axml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/collapse-slibing/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data.js\";\n\n/**\n * dragSubtree:拖拽子树改变结构\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    discription:\n      \"Click a node to collapse the siblings with same cluster, and click again to expand\",\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // custom the collapse-sibling behavior\n    F6.registerBehavior(\"collapse-slibing\", {\n      getEvents() {\n        return {\n          \"node:click\": \"onClick\",\n        };\n      },\n      onClick(evt) {\n        const { item } = evt;\n        const model = item.getModel();\n        const { cluster } = model;\n        const parentData = item.get(\"parent\").getModel();\n        const me = this;\n\n        if (model.collapsedSiblings) {\n          this.graph.removeChild(model.id);\n          setTimeout(() => {\n            const { children } = parentData;\n            for (let i = model.collapsedSiblings.length - 1; i >= 0; i--) {\n              const add = model.collapsedSiblings[i];\n              children.splice(add.idx, 0, add);\n            }\n            delete model.collapsedSiblings;\n            me.graph.updateChildren(children, parentData.id);\n          }, 550);\n          return;\n        }\n        const siblingData = parentData.children;\n        if (siblingData.length <= 1) return;\n        let count = 0;\n        const aggregateNode = {\n          id: `aggregate-node-${model.id}`,\n          children: [],\n          cluster,\n          collapsedSiblings: [],\n        };\n        let modelIdx = siblingData.length - 1;\n        for (let i = siblingData.length - 1; i >= 0; i--) {\n          const sibling = siblingData[i];\n          if (sibling.id === model.id) {\n            const remove = siblingData[i];\n            remove.idx = i;\n            aggregateNode.collapsedSiblings.push(remove);\n            modelIdx = Math.min(i, modelIdx);\n\n            aggregateNode.children = (siblingData[i].children || []).concat(\n              aggregateNode.children,\n            );\n          } else if (sibling.cluster === cluster && sibling.id !== model.id) {\n            count++;\n            aggregateNode.children = (siblingData[i].children || []).concat(\n              aggregateNode.children,\n            );\n            const remove = siblingData.splice(i, 1)[0];\n            remove.idx = i;\n            aggregateNode.collapsedSiblings.push(remove);\n            modelIdx = Math.min(i, modelIdx);\n          }\n        }\n        if (!count) return;\n        aggregateNode.label = count + 1;\n        aggregateNode.size = 16 + (count + 1) * 4;\n\n        this.graph.removeChild(model.id);\n        siblingData.splice(modelIdx, 0, aggregateNode);\n        setTimeout(() => {\n          me.graph.updateChildren(siblingData, parentData.id);\n        }, 550);\n      },\n    });\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const colors = [\"#5F95FF\", \"#61DDAA\", \"#65789B\"];\n    const colorSets = F6.Util.getColorSetsBySubjectColors(\n      colors,\n      \"#fff\",\n      \"default\",\n      \"#777\",\n    );\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"collapse-slibing\", \"drag-canvas\"],\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        defalutPosition: [],\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 50;\n        },\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n      },\n    });\n\n    this.graph.node(function (node) {\n      const colorSet = colorSets[+node.cluster.replace(\"c\", \"\")];\n      return {\n        size: node.size || 16,\n        style: {\n          fill: colorSet.mainFill || \"#DEE9FF\",\n          stroke: colorSet.mainStroke || \"#5B8FF9\",\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/collapse-slibing/index.json",
    "content": "{\n  \"defaultTitle\": \"合并同类兄弟节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-circle/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 350, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 350, y: 250, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  edges: [\n    { source: \"node1\", target: \"node2\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"combo1\", target: \"node3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-circle/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-circle/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-circle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n/**\n * combo_circle\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      defaultCombo: {\n        type: \"circle\",\n        style: {\n          lineWidth: 1,\n        },\n        labelCfg: {\n          refY: 15,\n          position: \"bottom\",\n        },\n      },\n      comboStateStyles: {\n        dragenter: {\n          lineWidth: 4,\n          stroke: \"#FE9797\",\n        },\n      },\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n          \"click-select\",\n        ],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"combo:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n    this.graph.on(\"node:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n    this.graph.on(\"combo:dragenter\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", true);\n    });\n    this.graph.on(\"combo:dragleave\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", false);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-circle/index.json",
    "content": "{\n  \"defaultTitle\": \"圆形组合\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-rect/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 350, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 350, y: 250, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  edges: [\n    { source: \"node1\", target: \"node2\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"combo1\", target: \"node3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-rect/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-rect/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * combo_rect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      defaultCombo: {\n        type: \"rect\",\n        size: [40, 10], // The minimum size of the Combo\n        padding: [30, 20, 10, 20],\n        style: {\n          lineWidth: 1,\n        },\n        labelCfg: {\n          refY: 10,\n          refX: 20,\n          position: \"bottom\",\n        },\n      },\n      comboStateStyles: {\n        dragenter: {\n          lineWidth: 4,\n          stroke: \"#FE9797\",\n        },\n      },\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n          \"click-select\",\n        ],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"combo:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n    this.graph.on(\"node:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n\n    this.graph.on(\"combo:dragenter\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", true);\n    });\n    this.graph.on(\"combo:dragleave\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", false);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/combo-rect/index.json",
    "content": "{\n  \"defaultTitle\": \"矩形组合\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/drag-subtree/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/drag-subtree/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/drag-subtree/index.axml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/drag-subtree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data.js\";\n\n/**\n * dragSubtree:拖拽子树改变结构\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    discription:\n      \"Move a subtree to a new parent by dragging the root node of the subtree.\",\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"zoom-canvas\",\n          {\n            type: \"drag-node\",\n            enableDelegate: true,\n          },\n        ],\n      },\n      defaultNode: {\n        size: [26, 26],\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      nodeStateStyles: {\n        closest: {\n          fill: \"#f00\",\n        },\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 10,\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    let minDisNode;\n    this.graph.on(\"node:dragstart\", () => {\n      minDisNode = undefined;\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      minDisNode = undefined;\n      const { item } = e;\n      const model = item.getModel();\n      const nodes = this.graph.getNodes();\n      let minDis = Infinity;\n      nodes.forEach((inode) => {\n        this.graph.setItemState(inode, \"closest\", false);\n        const node = inode.getModel();\n        if (node.id === model.id) return;\n        const dis =\n          (node.x - e.x) * (node.x - e.x) + (node.y - e.y) * (node.y - e.y);\n        if (dis < minDis) {\n          minDis = dis;\n          minDisNode = inode;\n        }\n      });\n      console.log(\"minDis\", minDis, minDisNode);\n      if (minDis < 2000) this.graph.setItemState(minDisNode, \"closest\", true);\n      else minDisNode = undefined;\n    });\n\n    this.graph.on(\"node:dragend\", (e) => {\n      if (!minDisNode) {\n        this.setData({\n          discription: \"Failed. No node close to the dragged node.\",\n        });\n        return;\n      }\n      const { item } = e;\n      const id = item.getID();\n      const data = this.graph.findDataById(id);\n      // if the minDisNode is a descent of the dragged node, return\n      let isDescent = false;\n      const minDisNodeId = minDisNode.getID();\n      console.log(\"dragend\", minDisNodeId, isDescent, data, id);\n\n      F6.Util.traverseTree(data, (d) => {\n        if (d.id === minDisNodeId) isDescent = true;\n      });\n      if (isDescent) {\n        this.setData({\n          discription:\n            \"Failed. The target node is a descendant of the dragged node.\",\n        });\n        return;\n      }\n      this.graph.removeChild(id);\n\n      const me = this;\n\n      setTimeout(() => {\n        const newParentData = this.graph.findDataById(minDisNodeId);\n        let newChildren = newParentData.children;\n        if (newChildren) newChildren.push(data);\n        else newChildren = [data];\n        me.graph.updateChildren(newChildren, minDisNodeId);\n        me.setData({\n          discription: \"Success.\",\n        });\n      }, 600);\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/drag-subtree/index.json",
    "content": "{\n  \"defaultTitle\": \"拖拽子树改变结构\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/fix-item/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50, label: \"0\", x: 326, y: 268 },\n    { id: \"node1\", size: 30, label: \"1\", x: 280, y: 384 },\n    { id: \"node2\", size: 30, label: \"2\", x: 234, y: 167 },\n    { id: \"node3\", size: 30, label: \"3\", x: 391, y: 368 },\n    { id: \"node4\", size: 30, label: \"4\", x: 444, y: 209 },\n    { id: \"node5\", size: 30, label: \"5\", x: 378, y: 157 },\n    { id: \"node6\", size: 15, label: \"6\", x: 229, y: 400 },\n    { id: \"node7\", size: 15, label: \"7\", x: 281, y: 440 },\n    { id: \"node8\", size: 15, label: \"8\", x: 188, y: 119 },\n    { id: \"node9\", size: 15, label: \"9\", x: 287, y: 157 },\n    { id: \"node10\", size: 15, label: \"10\", x: 185, y: 200 },\n    { id: \"node11\", size: 15, label: \"11\", x: 238, y: 110 },\n    { id: \"node12\", size: 15, label: \"12\", x: 239, y: 221 },\n    { id: \"node13\", size: 15, label: \"13\", x: 176, y: 160 },\n    { id: \"node14\", size: 15, label: \"14\", x: 389, y: 423 },\n    { id: \"node15\", size: 15, label: \"15\", x: 441, y: 341 },\n    { id: \"node16\", size: 15, label: \"16\", x: 442, y: 398 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\", label: \"0-1\" },\n    { source: \"node0\", target: \"node2\", label: \"0-2\" },\n    { source: \"node0\", target: \"node3\", label: \"0-3\" },\n    { source: \"node0\", target: \"node4\", label: \"0-4\" },\n    { source: \"node0\", target: \"node5\", label: \"0-5\" },\n    { source: \"node1\", target: \"node6\", label: \"1-6\" },\n    { source: \"node1\", target: \"node7\", label: \"1-7\" },\n    { source: \"node2\", target: \"node8\", label: \"2-8\" },\n    { source: \"node2\", target: \"node9\", label: \"2-9\" },\n    { source: \"node2\", target: \"node10\", label: \"2-10\" },\n    { source: \"node2\", target: \"node11\", label: \"2-11\" },\n    { source: \"node2\", target: \"node12\", label: \"2-12\" },\n    { source: \"node2\", target: \"node13\", label: \"2-13\" },\n    { source: \"node3\", target: \"node14\", label: \"3-14\" },\n    { source: \"node3\", target: \"node15\", label: \"3-15\" },\n    { source: \"node3\", target: \"node16\", label: \"3-16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/fix-item/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/fix-item/index.axml",
    "content": "<view class=\"page-section-demo\">\n  <button type=\"primary\" onTap=\"openOne\">{{currentMode}}</button>\n</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/fix-item/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * fixItem:缩放画布时固定元素\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    currentMode: \"Fix all\", // 按钮的显示\n    fixSelectedItems: {\n      fixAll: true,\n      fixLabel: false,\n      fixLineWidth: false,\n      fixState: \"yourStateName\", // 'selected' by default\n    },\n  },\n  // 选项框\n  openOne() {\n    const modeList = [\n      \"Fix all\",\n      \"Fix fontSize of label\",\n      \"Fix lineWidth of label\",\n    ];\n    my.optionsSelect({\n      title: \"模式选择\",\n      optionsOne: [\n        \"Fix all\",\n        \"Fix fontSize of label\",\n        \"Fix lineWidth of label\",\n      ], // 按钮的选项\n      selectedOneIndex: 0, // 默认选项的索引下标\n      success: (res) => {\n        // my.alert({\n        //   content: res\n        // });\n        // 获取到选择项的下标\n        const modeNum = res.selectedOneIndex;\n        // console.log(modeNum, 'modeNum');\n        // console.log(modeList[Number(modeNum)], 'thisis');\n        this.setData({\n          currentMode: modeList[Number(modeNum)],\n        });\n        // 添加模式\n        switch (Number(modeNum)) {\n          case 0:\n            this.setData({\n              fixSelectedItems: {\n                fixAll: true,\n                fixLabel: false,\n                fixLineWidth: false,\n                fixState: \"yourStateName\",\n              },\n            });\n            // this.fixSelectedItems.fixAll = true;\n            break;\n          case 1:\n            this.setData({\n              fixSelectedItems: {\n                fixAll: false,\n                fixLabel: true,\n                fixLineWidth: false,\n                fixState: \"yourStateName\",\n              },\n            });\n            // this.fixSelectedItems.fixLabel = true;\n            break;\n          case 2:\n            this.setData({\n              fixSelectedItems: {\n                fixAll: false,\n                fixLabel: false,\n                fixLineWidth: true,\n                fixState: \"yourStateName\",\n              },\n            });\n            // this.fixSelectedItems.fixLineWidth = true;\n            break;\n        }\n\n        console.log(this.data.fixSelectedItems);\n        this.updateChart();\n      },\n    });\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio, fixSelectedItems } = this.data;\n    console.log(\"update\", fixSelectedItems);\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          {\n            type: \"zoom-canvas\",\n            fixSelectedItems,\n          },\n        ],\n      },\n      defaultNode: {\n        size: [10, 10],\n        style: {\n          lineWidth: 2,\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          stroke: \"#e2e2e2\",\n          lineAppendWidth: 2,\n        },\n      },\n      nodeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n      edgeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n    });\n\n    // 监听\n    this.graph.on(\"node:tap\", (e) => {\n      this.graph.setItemState(e.item, \"yourStateName\", true);\n    });\n    this.graph.on(\"edge:tap\", (e) => {\n      this.graph.setItemState(e.item, \"yourStateName\", true);\n    });\n\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.findAllByState(\"node\", \"yourStateName\").forEach((node) => {\n        this.graph.setItemState(node, \"yourStateName\", false);\n      });\n      this.graph.findAllByState(\"edge\", \"yourStateName\").forEach((edge) => {\n        this.graph.setItemState(edge, \"yourStateName\", false);\n      });\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/fix-item/index.json",
    "content": "{\n  \"defaultTitle\": \"缩放画布时固定元素\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hide-item/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50, label: \"0\", x: 326, y: 268 },\n    { id: \"node1\", size: 30, label: \"1\", x: 280, y: 384 },\n    { id: \"node2\", size: 30, label: \"2\", x: 234, y: 167 },\n    { id: \"node3\", size: 30, label: \"3\", x: 391, y: 368 },\n    { id: \"node4\", size: 30, label: \"4\", x: 444, y: 209 },\n    { id: \"node5\", size: 30, label: \"5\", x: 378, y: 157 },\n    { id: \"node6\", size: 15, label: \"6\", x: 229, y: 400 },\n    { id: \"node7\", size: 15, label: \"7\", x: 281, y: 440 },\n    { id: \"node8\", size: 15, label: \"8\", x: 188, y: 119 },\n    { id: \"node9\", size: 15, label: \"9\", x: 287, y: 157 },\n    { id: \"node10\", size: 15, label: \"10\", x: 185, y: 200 },\n    { id: \"node11\", size: 15, label: \"11\", x: 238, y: 110 },\n    { id: \"node12\", size: 15, label: \"12\", x: 239, y: 221 },\n    { id: \"node13\", size: 15, label: \"13\", x: 176, y: 160 },\n    { id: \"node14\", size: 15, label: \"14\", x: 389, y: 423 },\n    { id: \"node15\", size: 15, label: \"15\", x: 441, y: 341 },\n    { id: \"node16\", size: 15, label: \"16\", x: 442, y: 398 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\", label: \"0-1\" },\n    { source: \"node0\", target: \"node2\", label: \"0-2\" },\n    { source: \"node0\", target: \"node3\", label: \"0-3\" },\n    { source: \"node0\", target: \"node4\", label: \"0-4\" },\n    { source: \"node0\", target: \"node5\", label: \"0-5\" },\n    { source: \"node1\", target: \"node6\", label: \"1-6\" },\n    { source: \"node1\", target: \"node7\", label: \"1-7\" },\n    { source: \"node2\", target: \"node8\", label: \"2-8\" },\n    { source: \"node2\", target: \"node9\", label: \"2-9\" },\n    { source: \"node2\", target: \"node10\", label: \"2-10\" },\n    { source: \"node2\", target: \"node11\", label: \"2-11\" },\n    { source: \"node2\", target: \"node12\", label: \"2-12\" },\n    { source: \"node2\", target: \"node13\", label: \"2-13\" },\n    { source: \"node3\", target: \"node14\", label: \"3-14\" },\n    { source: \"node3\", target: \"node15\", label: \"3-15\" },\n    { source: \"node3\", target: \"node16\", label: \"3-16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hide-item/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hide-item/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hide-item/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * hideItem\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          \"drag-node\",\n          {\n            type: \"drag-canvas\",\n            enableOptimize: true, // enable the optimize to hide the shapes beside nodes' keyShape\n          },\n          {\n            type: \"zoom-canvas\",\n            enableOptimize: true, // enable the optimize to hide the shapes beside nodes' keyShape\n          },\n        ],\n      },\n      defaultNode: {\n        size: [10, 10],\n        style: {\n          lineWidth: 2,\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          stroke: \"#e2e2e2\",\n          lineAppendWidth: 2,\n        },\n      },\n      nodeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n      edgeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hide-item/index.json",
    "content": "{\n  \"defaultTitle\": \"拖拽画布时候隐藏\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/highlight-dark/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/highlight-dark/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/highlight-dark/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/highlight-dark/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * highlightDark:自定义高亮\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerLayout(\"force\", force);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const tooltip = new F6.Tooltip({\n      offsetX: 10,\n      offsetY: 10,\n      fixToNode: [1, 0.5],\n      // the types of items that allow the tooltip show up\n      // 允许出现 tooltip 的 item 类型\n      itemTypes: [\"node\", \"edge\"],\n      // custom the tooltip's content\n      // 自定义 tooltip 内容\n      getContent: (e) => {\n        const outDiv = document.createElement(\"div\");\n        outDiv.style.width = \"fit-content\";\n        outDiv.style.height = \"fit-content\";\n        const model = e.item.getModel();\n        if (e.item.getType() === \"node\") {\n          outDiv.innerHTML = `${model.name}`;\n        } else {\n          const source = e.item.getSource();\n          const target = e.item.getTarget();\n          outDiv.innerHTML = `来源：${source.getModel().name}<br/>去向：${\n            target.getModel().name\n          }`;\n        }\n        return outDiv;\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      plugins: [tooltip],\n      layout: {\n        type: \"force\",\n        edgeStrength: 0.7,\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        size: [10, 10],\n        style: {\n          lineWidth: 2,\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          stroke: \"#e2e2e2\",\n          lineAppendWidth: 2,\n        },\n      },\n      nodeStateStyles: {\n        highlight: {\n          opacity: 1,\n        },\n        dark: {\n          opacity: 0.2,\n        },\n      },\n      edgeStateStyles: {\n        highlight: {\n          stroke: \"#999\",\n        },\n      },\n    });\n\n    // 监听\n    function clearAllStats() {\n      this.graph.setAutoPaint(false);\n      this.graph.getNodes().forEach(function (node) {\n        this.graph.clearItemStates(node);\n      });\n      this.graph.getEdges().forEach(function (edge) {\n        this.graph.clearItemStates(edge);\n      });\n      this.graph.paint();\n      this.graph.setAutoPaint(true);\n    }\n\n    this.graph.on(\"node:mouseenter\", function (e) {\n      const { item } = e;\n      this.graph.setAutoPaint(false);\n      this.graph.getNodes().forEach(function (node) {\n        this.graph.clearItemStates(node);\n        this.graph.setItemState(node, \"dark\", true);\n      });\n      this.graph.setItemState(item, \"dark\", false);\n      this.graph.setItemState(item, \"highlight\", true);\n      this.graph.getEdges().forEach(function (edge) {\n        if (edge.getSource() === item) {\n          this.graph.setItemState(edge.getTarget(), \"dark\", false);\n          this.graph.setItemState(edge.getTarget(), \"highlight\", true);\n          this.graph.setItemState(edge, \"highlight\", true);\n          edge.toFront();\n        } else if (edge.getTarget() === item) {\n          this.graph.setItemState(edge.getSource(), \"dark\", false);\n          this.graph.setItemState(edge.getSource(), \"highlight\", true);\n          this.graph.setItemState(edge, \"highlight\", true);\n          edge.toFront();\n        } else {\n          this.graph.setItemState(edge, \"highlight\", false);\n        }\n      });\n      this.graph.paint();\n      this.graph.setAutoPaint(true);\n    });\n    this.graph.on(\"node:mouseleave\", clearAllStats);\n    this.graph.on(\"canvas:tap\", clearAllStats);\n\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map(function (edge, i) {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/highlight-dark/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义高亮\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hull/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hull/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hull/index.axml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hull/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\n\n/**\n * hull:用轮廓包裹节点集合\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    discription: \"Wait for the layout to complete...\",\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerLayout(\"force\", force);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const { nodes } = data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\", \"lasso-select\"],\n      },\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        linkDistance: (d) => {\n          if (d.source.id === \"node0\") {\n            return 300;\n          }\n          return 60;\n        },\n        nodeStrength: (d) => {\n          if (d.isLeaf) {\n            return -50;\n          }\n          return -10;\n        },\n        edgeStrength: (d) => {\n          if (\n            d.source.id === \"node1\" ||\n            d.source.id === \"node2\" ||\n            d.source.id === \"node3\"\n          ) {\n            return 0.7;\n          }\n          return 0.1;\n        },\n      },\n    });\n\n    this.graph.data({\n      nodes,\n      edges: data.edges.map(function (edge, i) {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    const centerNodes = this.graph\n      .getNodes()\n      .filter((node) => !node.getModel().isLeaf);\n\n    this.graph.on(\"afterlayout\", () => {\n      this.setData({\n        discription: \"\",\n      });\n      const hull1 = this.graph.createHull({\n        id: \"centerNode-hull\",\n        type: \"bubble\",\n        members: centerNodes,\n        padding: 10,\n      });\n\n      const hull2 = this.graph.createHull({\n        id: \"leafNode-hull1\",\n        members: [\"node6\", \"node7\"],\n        padding: 10,\n        style: {\n          fill: \"lightgreen\",\n          stroke: \"green\",\n        },\n      });\n\n      const hull3 = this.graph.createHull({\n        id: \"leafNode-hull2\",\n        members: [\"node8\", \"node9\", \"node10\", \"node11\", \"node12\", \"node13\"],\n        padding: 10,\n        style: {\n          fill: \"lightgreen\",\n          stroke: \"green\",\n        },\n      });\n\n      this.graph.on(\"afterupdateitem\", () => {\n        hull1.updateData(hull1.members);\n        hull2.updateData(hull2.members);\n        hull3.updateData(hull3.members);\n      });\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/hull/index.json",
    "content": "{\n  \"defaultTitle\": \"用轮廓包裹节点集合\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 150,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 150,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * move\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // function handleNodeClick(event) {\n    //   const { item } = event;\n    //   console.log('item后', item)\n    //   // animately move the graph to focus on the item.\n    //   // the second parameter controlls whether move with animation, the third parameter is the animate configuration\n    //   this.graph.focusItem(item);\n    // }\n\n    // listen to the node click event\n    this.graph.on(\"node:tap\", (event) => {\n      const { item } = event;\n      // animately move the graph to focus on the item.\n      // the second parameter controlls whether move with animation, the third parameter is the animate configuration\n      this.graph.focusItem(item);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move/index.json",
    "content": "{\n  \"defaultTitle\": \"点击节点移动\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move-animate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 150,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 150,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move-animate/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move-animate/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move-animate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * moveAnimate\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n      // The global configuration for graph animation also takes effect on the focusItem\n      // animate: true,\n      // animateCfg: {\n      //   easing: 'easeCubic',\n      //   duration: 500\n      // }\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // listen to the node click event\n    this.graph.on(\"node:tap\", (event) => {\n      const { item } = event;\n      // animately move the graph to focus on the item.\n      // the second parameter controlls whether move with animation, the third parameter is the animate configuration\n      this.graph.focusItem(item, true, {\n        easing: \"easeCubic\",\n        duration: 500,\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/move-animate/index.json",
    "content": "{\n  \"defaultTitle\": \"点击节点动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/partial-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 150,\n      label: \"node1\",\n      size: 100,\n      type: \"customNode\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 150,\n      label: \"node2\",\n      size: 100,\n      type: \"customNode\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/partial-node/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/partial-node/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/partial-node/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * partialNode\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义节点\n    F6.registerNode(\n      \"customNode\",\n      {\n        // 绘制节点\n        drawShape: function drawShape(cfg, group) {\n          const { shapeType } = this;\n          const style = Object.assign({}, this.getShapeStyle(cfg), {\n            x: 0,\n            y: 0,\n            r: 50,\n          });\n          const shape = group.addShape(shapeType, {\n            attrs: style,\n            name: \"key-shape\",\n          });\n          // 绘制节点里面的小圆。点击这个小圆会显示tooltip\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: -30,\n              r: 10,\n              fill: \"#096dd9\",\n              cursor: \"pointer\",\n            },\n            name: \"circle-shape\",\n          });\n          return shape;\n        },\n      },\n      \"circle\",\n    );\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          {\n            type: \"drag-node\",\n            delegate: false,\n          },\n        ],\n      },\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        labelCfg: {\n          style: {\n            fontSize: 12,\n          },\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#e2e2e2\",\n        },\n      },\n      nodeStateStyles: {\n        selected: {\n          stroke: \"red\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 节点上的点击事件\n    this.graph.on(\"node:tap\", (event) => {\n      const { item } = event;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n\n    this.graph.on(\"circle-shape:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.updateItem(item, {\n        label: \"点击了局部\",\n        labelCfg: {\n          style: {\n            fill: \"#003a8c\",\n            fontSize: 16,\n          },\n        },\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/partial-node/index.json",
    "content": "{\n  \"defaultTitle\": \"响应节点中部分区域\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/set-mode/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 200,\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n    },\n    {\n      id: \"node3\",\n      x: 300,\n      y: 300,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge1\",\n      target: \"node2\",\n      source: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/set-mode/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/set-mode/index.axml",
    "content": "<view class=\"page-section-demo\">\n  <button type=\"primary\" onTap=\"openOne\">{{currentMode}}</button>\n</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/set-mode/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\n\n/**\n * setMode\n */\nlet modeNum = 0; // 用来标记选择的模式\nconst modeList = [\"默认模式\", \"添加节点模式\", \"添加边模式\"];\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n    currentMode: \"请选择模式\",\n  },\n\n  // 选项框\n  openOne() {\n    my.optionsSelect({\n      title: \"模式选择\",\n      optionsOne: [\"默认模式\", \"添加节点模式\", \"添加边模式\"],\n      selectedOneIndex: 0, // 默认选项的索引下标\n      success: (res) => {\n        // my.alert({\n        //   content: res\n        // });\n        modeNum = res.selectedOneIndex;\n        this.setData({\n          currentMode: modeList[modeNum],\n        });\n        switch (modeNum) {\n          case 0:\n            this.graph.setMode(\"default\");\n            console.log(\"default\");\n            break;\n          case 1:\n            this.graph.setMode(\"addNode\");\n            console.log(\"addNode\");\n            break;\n          case 2:\n            this.graph.setMode(\"addEdge\");\n            console.log(\"addEdge\");\n            break;\n        }\n      },\n    });\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    // 注册自定义节点\n    let addedCount = 0;\n    // Register a custom behavior: add a node when user click the blank part of canvas\n    F6.registerBehavior(\"click-add-node\", {\n      // Set the events and the corresponding responsing function for this behavior\n      getEvents() {\n        // The event is canvas:click, the responsing function is onClick\n        return {\n          \"canvas:tap\": \"onClick\",\n        };\n      },\n      // Click event\n      onClick(ev) {\n        const self = this;\n        const { graph } = self;\n        // Add a new node\n        graph.addItem(\"node\", {\n          x: ev.canvasX,\n          y: ev.canvasY,\n          id: `node-${addedCount}`, // Generate the unique id\n        });\n        addedCount++;\n      },\n    });\n    // Register a custom behavior: click two end nodes to add an edge\n    F6.registerBehavior(\"click-add-edge\", {\n      // Set the events and the corresponding responsing function for this behavior\n      getEvents() {\n        return {\n          \"node:tap\": \"onClick\", // The event is canvas:click, the responsing function is onClick\n          \"canvas:panmove\": \"onMousemove\", // The event is mousemove, the responsing function is onMousemove\n          \"edge:tap\": \"onEdgeClick\", // The event is edge:click, the responsing function is onEdgeClick\n        };\n      },\n      // The responsing function for node:click defined in getEvents\n      onClick(ev) {\n        const self = this;\n        const node = ev.item;\n        const { graph } = self;\n        // The position where the mouse clicks\n        // const point = { x: ev.x, y: ev.y };\n        const model = node.getModel();\n        if (self.addingEdge && self.edge) {\n          graph.updateItem(self.edge, {\n            target: model.id,\n          });\n\n          self.edge = null;\n          self.addingEdge = false;\n        } else {\n          // Add anew edge, the end node is the current node user clicks\n          self.edge = graph.addItem(\"edge\", {\n            source: model.id,\n            target: model.id,\n          });\n          self.addingEdge = true;\n        }\n      },\n      // The responsing function for mousemove defined in getEvents\n      onMousemove(ev) {\n        const self = this;\n        // The current position the mouse clicks\n        const point = { x: ev.x, y: ev.y };\n        if (self.addingEdge && self.edge) {\n          // Update the end node to the current node the mouse clicks\n          self.graph.updateItem(self.edge, {\n            target: point,\n          });\n        }\n      },\n      // The responsing function for edge:click defined in getEvents\n      onEdgeClick(ev) {\n        const self = this;\n        const currentEdge = ev.item;\n        if (self.addingEdge && self.edge === currentEdge) {\n          self.graph.removeItem(self.edge);\n          self.edge = null;\n          self.addingEdge = false;\n        }\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // The sets of behavior modes\n      modes: {\n        // Defualt mode\n        default: [\"drag-node\", \"click-select\"],\n        // Adding node mode\n        addNode: [\"click-add-node\", \"click-select\"],\n        // Adding edge mode\n        addEdge: [\"click-add-edge\", \"click-select\"],\n      },\n      // The node styles in different states\n      nodeStateStyles: {\n        // The node styles in selected state\n        selected: {\n          stroke: \"#666\",\n          lineWidth: 2,\n          fill: \"steelblue\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/interactive/set-mode/index.json",
    "content": "{\n  \"defaultTitle\": \"设置交互模式\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/bundling/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/bundling/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/bundling/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/bundling/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport CircularLayout from \"@antv/f6/dist/extends/layout/circularLayout\";\nimport { Bundling } from \"@antv/f6-plugin\";\n\nF6.registerLayout(\"circular\", CircularLayout);\n\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const edgeBundling = new Bundling({\n      bundleThreshold: 0.1,\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      width,\n      height,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\"],\n      },\n      layout: {\n        type: \"circular\",\n        center: [width / 2, height / 2],\n        radius: height / 2.5,\n        ordering: null,\n      },\n      plugins: [edgeBundling],\n      defaultNode: {\n        size: [20, 20],\n        color: \"steelblue\",\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#999\",\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n    setTimeout(() => {\n      edgeBundling.bundling(data);\n    }, 1000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/bundling/index.json",
    "content": "{\n  \"defaultTitle\": \"边绑定\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/donut-transfer/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"person A\",\n      label: \"person A\",\n      // the attributes for drawing donut\n      donutAttrs: {\n        income: 10,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person B\",\n      label: \"person B\",\n      donutAttrs: {\n        income: 20,\n        outcome: 10,\n        unknown: 5,\n      },\n    },\n    {\n      id: \"person C\",\n      label: \"person C\",\n      donutAttrs: {\n        income: 200,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person D\",\n      label: \"person D\",\n      donutAttrs: {\n        income: 50,\n        outcome: 10,\n        unknown: 15,\n      },\n    },\n    {\n      id: \"person E\",\n      label: \"person E\",\n      donutAttrs: {\n        income: 80,\n        outcome: 40,\n        unknown: 45,\n      },\n    },\n    {\n      id: \"person F\",\n      label: \"person F\",\n      donutAttrs: {\n        income: 90,\n        outcome: 110,\n        unknown: 15,\n      },\n    },\n  ],\n  edges: [\n    { source: \"person C\", target: \"person F\", size: 10 },\n    { source: \"person B\", target: \"person A\", size: 5 },\n    { source: \"person D\", target: \"person E\", size: 20 },\n    { source: \"person D\", target: \"person C\", size: 5 },\n    { source: \"person B\", target: \"person C\", size: 10 },\n    { source: \"person A\", target: \"person C\", size: 5 },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.label = `Transfer $${edge.size}`;\n});\n\nconst colors = {\n  income: \"#61DDAA\",\n  outcome: \"#F08BB4\",\n  unknown: \"#65789B\",\n};\n\ndata.nodes.forEach((node) => {\n  node.donutColorMap = colors;\n  node.size = 0;\n  Object.keys(node.donutAttrs).forEach((key) => {\n    node.size += node.donutAttrs[key];\n  });\n  node.size = Math.sqrt(node.size) * 5;\n});\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"income\",\n      label: \"Income\",\n      order: 0,\n      style: {\n        fill: \"#61DDAA\",\n      },\n    },\n    {\n      id: \"outcome\",\n      label: \"Outcome\",\n      order: 2,\n      style: {\n        fill: \"#F08BB4\",\n      },\n    },\n    {\n      id: \"unknown\",\n      label: \"Unknown\",\n      order: 2,\n      style: {\n        fill: \"#65789B\",\n      },\n    },\n  ],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/donut-transfer/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/donut-transfer/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/donut-transfer/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { data, legendData } from \"./data\";\nimport { Legend } from \"@antv/f6-plugin\";\n\nimport radialLayout from \"@antv/f6/dist/extends/layout/radialLayout\";\n\nF6.registerLayout(\"radial\", radialLayout);\n/**\n * donutTransfer\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const legend = new Legend({\n      width: 300,\n      height: 80,\n      offsetY: 0,\n      offsetX: 0,\n      data: legendData,\n      align: \"center\",\n      layout: \"horizontal\", // vertical\n      position: \"top-left\",\n      padding: 10,\n      margin: 0,\n      containerStyle: {\n        fill: \"#ccc\",\n        lineWidth: 1,\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: false,\n      plugins: [legend], // 这里的plugin不知道能不能用\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        focusNode: \"li\",\n        linkDistance: 200,\n        unitRadius: 200,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: true,\n        },\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            stroke: \"#fff\",\n            lineWidth: 5,\n          },\n        },\n      },\n      defaultNode: {\n        type: \"donut\",\n        style: {\n          lineWidth: 0,\n        },\n        labelCfg: {\n          position: \"bottom\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/donut-transfer/index.json",
    "content": "{\n  \"defaultTitle\": \"图例\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/edge-filter/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/edge-filter/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/edge-filter/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/edge-filter/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport { EdgeFilterLens } from \"@antv/f6-plugin\";\n\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    data.edges.forEach((edge) => {\n      edge.color = \"#aaa\";\n      edge.size = 2;\n      edge.style = {\n        opacity: 0.7,\n      };\n      edge.label = \"a\";\n    });\n    const filterConfigs = {\n      trigger: \"drag\",\n      showLabel: \"edge\",\n      r: 60,\n    };\n    const filterLens = new EdgeFilterLens(filterConfigs);\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      fitView: true,\n      width,\n      height,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [filterLens],\n      defaultEdge: {\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            stroke: \"#fff\",\n            lineWidth: 2,\n          },\n        },\n      },\n      defaultNode: {\n        size: 15,\n        color: \"#5B8FF9\",\n        style: {\n          lineWidth: 2,\n          fill: \"#C6E5FF\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n    this.graph.getEdges().forEach((edge) => {\n      edge\n        .getContainer()\n        .getChildren()\n        .forEach((shape) => {\n          if (shape.get(\"type\") === \"text\") shape.set(\"visible\", false);\n        });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/edge-filter/index.json",
    "content": "{\n  \"defaultTitle\": \"边过滤\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/fisheye/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/fisheye/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/fisheye/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/fisheye/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { Fisheye } from \"@antv/f6-plugin\";\n\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const fisheye = new Fisheye({\n      r: 200,\n      trigger: \"drag\",\n    });\n    const colors = [\n      \"#8FE9FF\",\n      \"#87EAEF\",\n      \"#FFC9E3\",\n      \"#A7C2FF\",\n      \"#FFA1E3\",\n      \"#FFE269\",\n      \"#BFCFEE\",\n      \"#FFA0C5\",\n      \"#D5FF86\",\n    ];\n\n    data.nodes.forEach((node) => {\n      node.label = node.id;\n      node.size = Math.random() * 30 + 10;\n      node.style = {\n        fill: colors[Math.floor(Math.random() * 9)],\n        lineWidth: 0,\n      };\n    });\n\n    this.graph = new F6.Graph({\n      renderer: this.renderer,\n      container: this.canvas,\n      context: this.ctx,\n      pixelRatio,\n      width,\n      height,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [fisheye],\n    });\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/fisheye/index.json",
    "content": "{\n  \"defaultTitle\": \"鱼眼\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/menu/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      x: 200,\n      y: 100,\n      type: \"rect\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n      x: 250,\n      y: 250,\n      type: \"rect\",\n    },\n    {\n      id: \"node3\",\n      label: \"node3\",\n      x: 350,\n      y: 100,\n      type: \"rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"Test Label\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      label: \"Test Label 2\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/menu/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/menu/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/menu/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport { Menu } from \"@antv/f6-plugin\";\n\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const contextMenu = new Menu({\n      getContent(evt) {\n        let header;\n        if (evt.target && evt.target.isCanvas && evt.target.isCanvas()) {\n          header = \"Canvas ContextMenu\";\n        } else if (evt.item) {\n          const itemType = evt.item.getType();\n          header = `${itemType.toUpperCase()} ContextMenu`;\n        }\n        return `\n        <div class=\"container\">\n          <div class=\"header\" title=\"header\">${header}</div>\n          <div>\n            <div class=\"li\" title=\"1\">div 1</div>\n            <div class=\"li\" title=\"2\">div 2</div>\n          </div>\n        </div>\n        `;\n      },\n      getCss: () => {\n        return `\n          .container {\n            opacity: 0.9;\n            width: 150;\n            padding: 10 8;\n            border: 1 solid #e2e2e2;\n          }\n          .header {\n            padding-bottom: 10;\n            font-weight: bold;\n          }\n          .li {\n            padding-bottom: 10;\n          }\n        `;\n      },\n      handleMenuClick: (target) => {\n        my.alert({\n          title: `点击了: ${target.title}`,\n        });\n      },\n      // offsetX and offsetY include the padding of the parent container\n      // 需要加上父级容器的 padding-left 16 与自身偏移量 10\n      offsetX: 0,\n      // 需要加上父级容器的 padding-top 24 、画布兄弟元素高度、与自身偏移量 10\n      offsetY: 0,\n      // the types of items that allow the menu show up\n      // 在哪些类型的元素上响应\n      itemTypes: [\"node\", \"edge\", \"canvas\"],\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      width,\n      height,\n      linkCenter: true,\n      fitView: true,\n      plugins: [contextMenu],\n      defaultNode: {\n        size: [80, 40],\n        type: \"rect\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n          lineAppendWidth: 3, // Enlarge the range the edge to be hitted\n        },\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            // A white stroke with width 5 helps show the label more clearly avoiding the interference of the overlapped edge\n            stroke: \"white\",\n            lineWidth: 5,\n          },\n        },\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/menu/index.json",
    "content": "{\n  \"defaultTitle\": \"上下文菜单\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/mini-map/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/mini-map/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/mini-map/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/mini-map/index.js",
    "content": "import { MiniMap } from \"@antv/f6-plugin\";\nimport data from \"./data\";\nimport F6 from \"@antv/f6\";\n\nPage({\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const sys = my.getSystemInfoSync();\n    const {\n      windowWidth,\n      screenHeight,\n      titleBarHeight,\n      statusBarHeight,\n      pixelRatio,\n    } = sys;\n    this.setData({\n      width: windowWidth,\n      height: screenHeight - titleBarHeight - statusBarHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    const miniMap = new MiniMap({\n      className: \"custom-container\",\n      viewportClassName: \"custom-viewport\",\n      getCss: () => {\n        return `\n          .custom-container {\n            top: 0;\n            background: #eee;\n            border: 1 solid #333;\n          }\n          .custom-viewport {\n            border:1 solid blue;\n          }\n        `;\n      },\n    });\n    const { width, height, pixelRatio } = this.data;\n    console.log(\"------->\", ctx, rect, canvas, renderer);\n    this.graph = new F6.Graph({\n      context: ctx,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      renderer,\n      defaultNode: {\n        size: 30,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [miniMap],\n    });\n    this.graph.data(data);\n    this.graph.render();\n\n    // 目前在使用plugin时,需要关闭局部刷新\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/mini-map/index.json",
    "content": "{\n  \"defaultTitle\": \"miniMap\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/snap-line/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/snap-line/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/snap-line/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/snap-line/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport { SnapLine } from \"@antv/f6-plugin\";\n\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const snapLine = new SnapLine();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      width,\n      height,\n      linkCenter: true,\n      defaultNode: {\n        size: 30,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [snapLine],\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/snap-line/index.json",
    "content": "{\n  \"defaultTitle\": \"边绑定\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/timebar/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/timebar/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/timebar/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { TimeBar } from \"@antv/f6-plugin\";\n\n/**\n * basicArcDiagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = {\n      nodes: [],\n      edges: [],\n    };\n\n    for (let i = 0; i < 50; i++) {\n      const id = `node-${i}`;\n      data.nodes.push({\n        id,\n        date: Number(`2020${i}`),\n        value: Math.round(Math.random() * 300),\n      });\n\n      data.edges.push({\n        source: `node-${Math.round(Math.random() * 90)}`,\n        target: `node-${Math.round(Math.random() * 90)}`,\n      });\n    }\n\n    const timeBarData = [];\n\n    for (let i = 0; i < 50; i++) {\n      timeBarData.push({\n        date: Number(`2020${i}`),\n        value: Math.round(Math.random() * 300),\n      });\n    }\n    const timebar = new TimeBar({\n      x: 0,\n      y: 0,\n      width,\n      padding: 0,\n      type: \"simple\",\n      data: timeBarData,\n    });\n\n    this.graph = new F6.Graph({\n      renderer: this.renderer,\n      container: this.canvas,\n      context: this.ctx,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      localRefresh: false,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      animate: false,\n      defaultNode: {\n        size: 30,\n      },\n      plugins: [timebar],\n    });\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/timebar/index.json",
    "content": "{\n  \"defaultTitle\": \"时间轴\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/timebar/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport { TimeBar } from \"@antv/f6-plugin\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n  const data = {\n    nodes: [],\n    edges: [],\n  };\n\n  for (let i = 0; i < 50; i++) {\n    const id = `node-${i}`;\n    data.nodes.push({\n      id,\n      date: Number(`2020${i}`),\n      value: Math.round(Math.random() * 300),\n    });\n\n    data.edges.push({\n      source: `node-${Math.round(Math.random() * 90)}`,\n      target: `node-${Math.round(Math.random() * 90)}`,\n    });\n  }\n\n  const timeBarData = [];\n\n  for (let i = 0; i < 50; i++) {\n    timeBarData.push({\n      date: Number(`2020${i}`),\n      value: Math.round(Math.random() * 300),\n    });\n  }\n  const timebar = new TimeBar({\n    x: 0,\n    y: 0,\n    width,\n    padding: 0,\n    type: \"simple\",\n    data: timeBarData,\n  });\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        localRefresh: false,\n        modes: {\n          default: [\"drag-canvas\", \"drag-node\"],\n        },\n        animate: false,\n        defaultNode: {\n          size: 30,\n        },\n        plugins: [timebar],\n      } as any);\n\n      graph.get(\"canvas\").set(\"localRefresh\", false);\n      graph.data(data);\n      graph.render();\n      graph.fitView();\n    }\n  }, []);\n\n  return <div ref={ref} />;\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/tool-tip/data.js",
    "content": "export default {\n  id: \"g1\",\n  name: \"Name1\",\n  count: 123456,\n  label: \"538.90\",\n  currency: \"Yuan\",\n  rate: 1.0,\n  status: \"B\",\n  variableName: \"V1\",\n  variableValue: 0.341,\n  variableUp: false,\n  children: [\n    {\n      id: \"g12\",\n      name: \"Deal with LONG label LONG label LONG label LONG label\",\n      count: 123456,\n      label: \"338.00\",\n      rate: 0.627,\n      status: \"R\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.179,\n      variableUp: true,\n      children: [\n        {\n          id: \"g121\",\n          name: \"Name3\",\n          collapsed: true,\n          count: 123456,\n          label: \"138.00\",\n          rate: 0.123,\n          status: \"B\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.27,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1211\",\n              name: \"Name4\",\n              count: 123456,\n              label: \"138.00\",\n              rate: 1.0,\n              status: \"B\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.164,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g122\",\n          name: \"Name5\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.259,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1221\",\n              name: \"Name6\",\n              count: 123456,\n              label: \"40.00\",\n              rate: 0.4,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.135,\n              variableUp: true,\n              children: [\n                {\n                  id: \"g12211\",\n                  name: \"Name6-1\",\n                  count: 123456,\n                  label: \"40.00\",\n                  rate: 1.0,\n                  status: \"R\",\n                  currency: \"Yuan\",\n                  variableName: \"V1\",\n                  variableValue: 0.181,\n                  variableUp: true,\n                  children: [],\n                },\n              ],\n            },\n            {\n              id: \"g1222\",\n              name: \"Name7\",\n              count: 123456,\n              label: \"60.00\",\n              rate: 0.6,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.239,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g123\",\n          name: \"Name8\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"DI\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.131,\n          variableUp: false,\n          children: [\n            {\n              id: \"g1231\",\n              name: \"Name8-1\",\n              count: 123456,\n              label: \"100.00\",\n              rate: 1.0,\n              status: \"DI\",\n              currency: \"Yuan\",\n              variableName: \"V2\",\n              variableValue: 0.131,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"g13\",\n      name: \"Name9\",\n      count: 123456,\n      label: \"100.90\",\n      rate: 0.187,\n      status: \"B\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.221,\n      variableUp: true,\n      children: [\n        {\n          id: \"g131\",\n          name: \"Name10\",\n          count: 123456,\n          label: \"33.90\",\n          rate: 0.336,\n          status: \"R\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.12,\n          variableUp: true,\n          children: [],\n        },\n        {\n          id: \"g132\",\n          name: \"Name11\",\n          count: 123456,\n          label: \"67.00\",\n          rate: 0.664,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.241,\n          variableUp: false,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"g14\",\n      name: \"Name12\",\n      count: 123456,\n      label: \"100.00\",\n      rate: 0.186,\n      status: \"G\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.531,\n      variableUp: true,\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/tool-tip/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/tool-tip/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/tool-tip/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport mockData from \"./data\";\nimport { Tooltip } from \"@antv/f6-plugin\";\n\n/**\n * decisionTree\n */\n\nconst colors = {\n  B: \"#5B8FF9\",\n  R: \"#F46649\",\n  Y: \"#EEBC20\",\n  G: \"#5BD8A6\",\n  DI: \"#A7A7A7\",\n};\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 默认配置\n    const defaultConfig = {\n      width,\n      height,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\"],\n      },\n      fitView: true,\n      animate: true,\n      defaultNode: {\n        type: \"flow-rect\",\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#CED4D9\",\n        },\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"LR\",\n        dropCap: false,\n        indent: 300,\n        getHeight: () => {\n          return 60;\n        },\n      },\n    };\n\n    //  组件props\n    const props = {\n      data: mockData,\n      config: {\n        padding: [20, 50],\n        defaultLevel: 3,\n        defaultZoom: 0.8,\n        modes: { default: [\"zoom-canvas\", \"drag-canvas\"] },\n      },\n    };\n\n    // 自定义节点、边\n    const registerFn = () => {\n      /**\n       * 自定义节点\n       */\n      F6.registerNode(\n        \"flow-rect\",\n        {\n          shapeType: \"flow-rect\",\n          draw(cfg, group) {\n            const {\n              name = \"\",\n              variableName,\n              variableValue,\n              variableUp,\n              label,\n              collapsed,\n              currency,\n              status,\n              // rate,\n            } = cfg;\n            const grey = \"#CED4D9\";\n            // 逻辑不应该在这里判断\n            const rectConfig = {\n              width: 202,\n              height: 60,\n              lineWidth: 1,\n              fontSize: 12,\n              fill: \"#fff\",\n              radius: 4,\n              stroke: grey,\n              opacity: 1,\n            };\n\n            const nodeOrigin = {\n              x: -rectConfig.width / 2,\n              y: -rectConfig.height / 2,\n            };\n\n            const textConfig = {\n              textAlign: \"left\",\n              textBaseline: \"bottom\",\n            };\n\n            const rect = group.addShape(\"rect\", {\n              attrs: {\n                x: nodeOrigin.x,\n                y: nodeOrigin.y,\n                ...rectConfig,\n              },\n            });\n\n            const rectBBox = rect.getBBox();\n\n            // label title\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: 20 + nodeOrigin.y,\n                text: name.length > 28 ? `${name.substr(0, 28)}...` : name,\n                fontSize: 12,\n                opacity: 0.85,\n                fill: \"#000\",\n                cursor: \"pointer\",\n              },\n              name: \"name-shape\",\n            });\n\n            // price\n            const price = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: rectBBox.maxY - 12,\n                text: label,\n                fontSize: 16,\n                fill: \"#000\",\n                opacity: 0.85,\n              },\n            });\n\n            // label currency\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: price.getBBox().maxX + 5,\n                y: rectBBox.maxY - 12,\n                text: currency,\n                fontSize: 12,\n                fill: \"#000\",\n                opacity: 0.75,\n              },\n            });\n\n            // percentage\n            const percentText = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: rectBBox.maxX - 8,\n                y: rectBBox.maxY - 12,\n                text: `${((variableValue || 0) * 100).toFixed(2)}%`,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: colors[status],\n              },\n            });\n\n            // percentage triangle\n            const symbol = variableUp ? \"triangle\" : \"triangle-down\";\n            const triangle = group.addShape(\"marker\", {\n              attrs: {\n                ...textConfig,\n                x: percentText.getBBox().minX - 10,\n                y: rectBBox.maxY - 12 - 6,\n                symbol,\n                r: 6,\n                fill: colors[status],\n              },\n            });\n\n            // variable name\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: triangle.getBBox().minX - 4,\n                y: rectBBox.maxY - 12,\n                text: variableName,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: \"#000\",\n                opacity: 0.45,\n              },\n            });\n\n            // bottom line background\n            // const bottomBackRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rectConfig.width,\n            //     height: 4,\n            //     radius: [0, 0, rectConfig.radius, rectConfig.radius],\n            //     fill: '#E0DFE3',\n            //   },\n            // });\n\n            // bottom percent\n            // const bottomRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rate * rectBBox.width,\n            //     height: 4,\n            //     radius: [0, 0, 0, rectConfig.radius],\n            //     fill: colors[status],\n            //   },\n            // });\n\n            // collapse rect\n            if (cfg.children && cfg.children.length) {\n              group.addShape(\"rect\", {\n                attrs: {\n                  x: rectConfig.width / 2 - 8,\n                  y: -8,\n                  width: 16,\n                  height: 16,\n                  stroke: \"rgba(0, 0, 0, 0.25)\",\n                  cursor: \"pointer\",\n                  fill: \"#fff\",\n                },\n                name: \"collapse-back\",\n                modelId: cfg.id,\n              });\n\n              // collpase text\n              group.addShape(\"text\", {\n                attrs: {\n                  x: rectConfig.width / 2,\n                  y: -1,\n                  textAlign: \"center\",\n                  textBaseline: \"middle\",\n                  text: collapsed ? \"+\" : \"-\",\n                  fontSize: 16,\n                  cursor: \"pointer\",\n                  fill: \"rgba(0, 0, 0, 0.25)\",\n                },\n                name: \"collapse-text\",\n                modelId: cfg.id,\n              });\n            }\n\n            this.drawLinkPoints(cfg, group);\n            return rect;\n          },\n          update(cfg, item) {\n            const group = item.getContainer();\n            this.updateLinkPoints(cfg, group);\n          },\n          setState(name, value, item) {\n            if (name === \"collapse\") {\n              const group = item.getContainer();\n              const collapseText = group.find(\n                (e) => e.get(\"name\") === \"collapse-text\",\n              );\n              if (collapseText) {\n                if (!value) {\n                  collapseText.attr({\n                    text: \"-\",\n                  });\n                } else {\n                  collapseText.attr({\n                    text: \"+\",\n                  });\n                }\n              }\n            }\n          },\n          getAnchorPoints() {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n            ];\n          },\n        },\n        \"rect\",\n      );\n\n      F6.registerEdge(\n        \"flow-cubic\",\n        {\n          getControlPoints(cfg) {\n            let { controlPoints } = cfg; // 指定controlPoints\n            if (!controlPoints || !controlPoints.length) {\n              const { startPoint, endPoint, sourceNode, targetNode } = cfg;\n              const {\n                x: startX,\n                y: startY,\n                coefficientX,\n                coefficientY,\n              } = sourceNode ? sourceNode.getModel() : startPoint;\n              const { x: endX, y: endY } = targetNode\n                ? targetNode.getModel()\n                : endPoint;\n              let curveStart = (endX - startX) * coefficientX;\n              let curveEnd = (endY - startY) * coefficientY;\n              curveStart = curveStart > 40 ? 40 : curveStart;\n              curveEnd = curveEnd < -30 ? curveEnd : -30;\n              controlPoints = [\n                { x: startPoint.x + curveStart, y: startPoint.y },\n                { x: endPoint.x + curveEnd, y: endPoint.y },\n              ];\n            }\n            return controlPoints;\n          },\n          getPath(points) {\n            const path = [];\n            path.push([\"M\", points[0].x, points[0].y]);\n            path.push([\n              \"C\",\n              points[1].x,\n              points[1].y,\n              points[2].x,\n              points[2].y,\n              points[3].x,\n              points[3].y,\n            ]);\n            return path;\n          },\n        },\n        \"single-line\",\n      );\n    };\n    registerFn();\n\n    const { config } = props;\n    const tooltip = new Tooltip({\n      trigger: \"press\",\n      // TODO: _f2.default.Tooltip is not a constructor\n      // offsetX and offsetY include the padding of the parent container\n      // the types of items that allow the tooltip show up\n      // 允许出现 tooltip 的 item 类型\n      itemTypes: [\"node\"],\n      // custom the tooltip's content\n      // 自定义 tooltip 内容\n      getContent: (e) => {\n        // outDiv.style.padding = '0px 0px 20px 0px';\n        return `\n          <div class=\"f6-tooltip-container\">\n            <div>Custom Content</div>\n            <div class='tooltip-type'>Type: ${e.item.getType()}</div>\n            <div class='tooltip-id'>Label: ${\n              e.item.getModel().label || e.item.getModel().id\n            }</div>\n          </div>\n      `;\n      },\n      getCss: () => `\n        .f6-tooltip-container {\n          position: absolute;\n          width: 150;\n          border: 1 solid #e2e2e2;\n          border-radius: 4;\n          font-size: 12;\n          color: #545454;\n          background-color: rgba(255, 255, 255, 0.9);\n          padding: 10 8;\n        }\n    \n        .f6-tooltip-container div{\n          height: 20;\n        }\n        \n        .tooltip-type {\n          padding: 0;\n          margin: 0;\n        }\n        .tooltip-id {\n          color: #531dab;\n        }\n      `,\n\n      shouldBegin: (e) => {\n        if (e.target.get(\"name\") === \"name-shape\") return true;\n        return true;\n      },\n    });\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n\n      ...defaultConfig,\n      ...config,\n      plugins: [tooltip],\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n        requestAnimationFrame: this.canvas.requestAnimationFrame,\n        cancelAnimationFrame: this.canvas.cancelAnimationFrame,\n      },\n    });\n    console.log(\n      this.canvas.requestAnimationFrame,\n      this.canvas.cancelAnimationFrame,\n    );\n\n    this.graph.data(mockData);\n    this.graph.render();\n    this.graph.fitView();\n    this.graph.zoom(config.defaultZoom || 1);\n\n    const handleCollapse = (e) => {\n      const { target } = e;\n      const id = target.get(\"modelId\");\n      const item = this.graph.findById(id);\n      const nodeModel = item.getModel();\n      nodeModel.collapsed = !nodeModel.collapsed;\n      this.graph.layout();\n      this.graph.setItemState(item, \"collapse\", nodeModel.collapsed);\n    };\n    this.graph.on(\"collapse-text:tap\", (e) => {\n      handleCollapse(e);\n    });\n    this.graph.on(\"collapse-back:tap\", (e) => {\n      handleCollapse(e);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/tool-tip/index.json",
    "content": "{\n  \"defaultTitle\": \"提示框\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/zoom-slider/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/zoom-slider/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/zoom-slider/index.js",
    "content": "import { ZoomSlider } from \"@antv/f6-plugin\";\nimport data from \"./data\";\nimport F6 from \"@antv/f6\";\n\nPage({\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    const zoomSlider = new ZoomSlider();\n    const { width, height, pixelRatio } = this.data;\n    console.log(\"------->\", ctx, rect, canvas, renderer);\n    this.graph = new F6.Graph({\n      context: ctx,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      renderer,\n      defaultNode: {\n        size: 30,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [zoomSlider],\n    });\n    this.graph.data(data);\n    this.graph.render();\n\n    // 目前在使用plugin时,需要关闭局部刷新\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/plugins/zoom-slider/index.json",
    "content": "{\n  \"defaultTitle\": \"ZoomSlider\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/custom-flow/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"Company1\",\n    },\n    {\n      id: \"2\",\n      label: \"Company2\",\n    },\n    {\n      id: \"3\",\n      label: \"Company3\",\n    },\n    {\n      id: \"4\",\n      label: \"Company4\",\n    },\n    {\n      id: \"5\",\n      label: \"Company5\",\n    },\n    {\n      id: \"6\",\n      label: \"Company6\",\n    },\n    {\n      id: \"7\",\n      label: \"Company7\",\n    },\n    {\n      id: \"8\",\n      label: \"Company8\",\n    },\n    {\n      id: \"9\",\n      label: \"Company9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n      data: {\n        type: \"A\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"8\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/custom-flow/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/custom-flow/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/custom-flow/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n/**\n * customFlow\n */\nimport { isObject } from \"@antv/util\";\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    const colorMap = {\n      A: \"#72CC4A\",\n      B: \"#1A91FF\",\n      C: \"#FFAA15\",\n    };\n    F6.registerNode(\n      \"round-rect\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const { width } = cfg.style;\n          const { stroke } = cfg.style;\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              x: -width / 2,\n              y: -15,\n              width,\n              height: 30,\n              radius: 15,\n              stroke,\n              lineWidth: 1.2,\n              fillOpacity: 1,\n            },\n            name: \"rect-shape\",\n          });\n          group.addShape(\"circle\", {\n            attrs: {\n              x: -width / 2,\n              y: 0,\n              r: 3,\n              fill: stroke,\n            },\n            name: \"circle-shape\",\n          });\n          group.addShape(\"circle\", {\n            attrs: {\n              x: width / 2,\n              y: 0,\n              r: 3,\n              fill: stroke,\n            },\n            name: \"circle-shape2\",\n          });\n          return rect;\n        },\n        getAnchorPoints: function getAnchorPoints() {\n          return [\n            [0, 0.5],\n            [1, 0.5],\n          ];\n        },\n        update: function update(cfg, item) {\n          const group = item.getContainer();\n          const children = group.get(\"children\");\n          const node = children[0];\n          const circleLeft = children[1];\n          const circleRight = children[2];\n\n          const { stroke } = cfg.style;\n\n          if (stroke) {\n            node.attr(\"stroke\", stroke);\n            circleLeft.attr(\"fill\", stroke);\n            circleRight.attr(\"fill\", stroke);\n          }\n        },\n      },\n      \"single-node\",\n    );\n\n    F6.registerEdge(\"fund-polyline\", {\n      itemType: \"edge\",\n      draw: function draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n        const { stroke } = cfg.style;\n\n        const Ydiff = endPoint.y - startPoint.y;\n\n        const slope = Ydiff !== 0 ? Math.min(500 / Math.abs(Ydiff), 20) : 0;\n\n        const cpOffset = slope > 15 ? 0 : 16;\n        const offset = Ydiff < 0 ? cpOffset : -cpOffset;\n\n        const line1EndPoint = {\n          x: startPoint.x + slope,\n          y: endPoint.y + offset,\n        };\n        const line2StartPoint = {\n          x: line1EndPoint.x + cpOffset,\n          y: endPoint.y,\n        };\n\n        // 控制点坐标\n        const controlPoint = {\n          x:\n            ((line1EndPoint.x - startPoint.x) * (endPoint.y - startPoint.y)) /\n              (line1EndPoint.y - startPoint.y) +\n            startPoint.x,\n          y: endPoint.y,\n        };\n\n        let path = [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", line1EndPoint.x, line1EndPoint.y],\n          [\n            \"Q\",\n            controlPoint.x,\n            controlPoint.y,\n            line2StartPoint.x,\n            line2StartPoint.y,\n          ],\n          [\"L\", endPoint.x, endPoint.y],\n        ];\n\n        if (Math.abs(Ydiff) <= 5) {\n          path = [\n            [\"M\", startPoint.x, startPoint.y],\n            [\"L\", endPoint.x, endPoint.y],\n          ];\n        }\n\n        const endArrow =\n          cfg.style && cfg.style.endArrow ? cfg.style.endArrow : false; // 不支持？.\n        if (isObject(endArrow)) endArrow.fill = stroke;\n        const line = group.addShape(\"path\", {\n          attrs: {\n            path,\n            stroke: colorMap[cfg.data && cfg.data.type],\n            lineWidth: 1.2,\n            endArrow,\n          },\n          name: \"path-shape\",\n        });\n\n        const labelLeftOffset = 0;\n        const labelTopOffset = 8;\n        // amount\n        const amount = group.addShape(\"text\", {\n          attrs: {\n            text: cfg.data && cfg.data.amount,\n            x: line2StartPoint.x + labelLeftOffset,\n            y: endPoint.y - labelTopOffset - 2,\n            fontSize: 14,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: \"#000000D9\",\n          },\n          name: \"text-shape-amount\",\n        });\n        // type\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.data && cfg.data.type,\n            x: line2StartPoint.x + labelLeftOffset,\n            y: endPoint.y - labelTopOffset - amount.getBBox().height - 2,\n            fontSize: 10,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: \"#000000D9\",\n          },\n          name: \"text-shape-type\",\n        });\n        // date\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.data && cfg.data.date,\n            x: line2StartPoint.x + labelLeftOffset,\n            y: endPoint.y + labelTopOffset + 4,\n            fontSize: 12,\n            fontWeight: 300,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: \"#000000D9\",\n          },\n          name: \"text-shape-date\",\n        });\n        return line;\n      },\n    });\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        nodesep: 30,\n        ranksep: 100,\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"round-rect\",\n        labelCfg: {\n          style: {\n            fill: \"#000000A6\",\n            fontSize: 10,\n          },\n        },\n        style: {\n          stroke: \"#72CC4A\",\n          width: 150,\n        },\n      },\n      defaultEdge: {\n        type: \"fund-polyline\",\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n\n    const edges = this.graph.getEdges();\n    edges.forEach(function (edge) {\n      const line = edge.getKeyShape();\n      const stroke = line.attr(\"stroke\");\n      const targetNode = edge.getTarget();\n      targetNode.update({\n        style: {\n          stroke,\n        },\n      });\n    });\n    this.graph.paint();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/custom-flow/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义流向图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/decision-tree/data.js",
    "content": "export default {\n  id: \"g1\",\n  name: \"Name1\",\n  count: 123456,\n  label: \"538.90\",\n  currency: \"Yuan\",\n  rate: 1.0,\n  status: \"B\",\n  variableName: \"V1\",\n  variableValue: 0.341,\n  variableUp: false,\n  children: [\n    {\n      id: \"g12\",\n      name: \"Deal with LONG label LONG label LONG label LONG label\",\n      count: 123456,\n      label: \"338.00\",\n      rate: 0.627,\n      status: \"R\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.179,\n      variableUp: true,\n      children: [\n        {\n          id: \"g121\",\n          name: \"Name3\",\n          collapsed: true,\n          count: 123456,\n          label: \"138.00\",\n          rate: 0.123,\n          status: \"B\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.27,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1211\",\n              name: \"Name4\",\n              count: 123456,\n              label: \"138.00\",\n              rate: 1.0,\n              status: \"B\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.164,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g122\",\n          name: \"Name5\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.259,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1221\",\n              name: \"Name6\",\n              count: 123456,\n              label: \"40.00\",\n              rate: 0.4,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.135,\n              variableUp: true,\n              children: [\n                {\n                  id: \"g12211\",\n                  name: \"Name6-1\",\n                  count: 123456,\n                  label: \"40.00\",\n                  rate: 1.0,\n                  status: \"R\",\n                  currency: \"Yuan\",\n                  variableName: \"V1\",\n                  variableValue: 0.181,\n                  variableUp: true,\n                  children: [],\n                },\n              ],\n            },\n            {\n              id: \"g1222\",\n              name: \"Name7\",\n              count: 123456,\n              label: \"60.00\",\n              rate: 0.6,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.239,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g123\",\n          name: \"Name8\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"DI\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.131,\n          variableUp: false,\n          children: [\n            {\n              id: \"g1231\",\n              name: \"Name8-1\",\n              count: 123456,\n              label: \"100.00\",\n              rate: 1.0,\n              status: \"DI\",\n              currency: \"Yuan\",\n              variableName: \"V2\",\n              variableValue: 0.131,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"g13\",\n      name: \"Name9\",\n      count: 123456,\n      label: \"100.90\",\n      rate: 0.187,\n      status: \"B\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.221,\n      variableUp: true,\n      children: [\n        {\n          id: \"g131\",\n          name: \"Name10\",\n          count: 123456,\n          label: \"33.90\",\n          rate: 0.336,\n          status: \"R\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.12,\n          variableUp: true,\n          children: [],\n        },\n        {\n          id: \"g132\",\n          name: \"Name11\",\n          count: 123456,\n          label: \"67.00\",\n          rate: 0.664,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.241,\n          variableUp: false,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"g14\",\n      name: \"Name12\",\n      count: 123456,\n      label: \"100.00\",\n      rate: 0.186,\n      status: \"G\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.531,\n      variableUp: true,\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/decision-tree/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/decision-tree/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/decision-tree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport mockData from \"./data\";\n\n/**\n * decisionTree\n */\n\nconst colors = {\n  B: \"#5B8FF9\",\n  R: \"#F46649\",\n  Y: \"#EEBC20\",\n  G: \"#5BD8A6\",\n  DI: \"#A7A7A7\",\n};\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 默认配置\n    const defaultConfig = {\n      width,\n      height,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\"],\n      },\n      fitView: true,\n      animate: true,\n      defaultNode: {\n        type: \"flow-rect\",\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#CED4D9\",\n        },\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"LR\",\n        dropCap: false,\n        indent: 300,\n        getHeight: () => {\n          return 60;\n        },\n      },\n    };\n\n    //  组件props\n    const props = {\n      data: mockData,\n      config: {\n        padding: [20, 50],\n        defaultLevel: 3,\n        defaultZoom: 0.8,\n        modes: { default: [\"zoom-canvas\", \"drag-canvas\"] },\n      },\n    };\n\n    // 自定义节点、边\n    const registerFn = () => {\n      /**\n       * 自定义节点\n       */\n      F6.registerNode(\n        \"flow-rect\",\n        {\n          shapeType: \"flow-rect\",\n          draw(cfg, group) {\n            const {\n              name = \"\",\n              variableName,\n              variableValue,\n              variableUp,\n              label,\n              collapsed,\n              currency,\n              status,\n              // rate,\n            } = cfg;\n            const grey = \"#CED4D9\";\n            // 逻辑不应该在这里判断\n            const rectConfig = {\n              width: 202,\n              height: 60,\n              lineWidth: 1,\n              fontSize: 12,\n              fill: \"#fff\",\n              radius: 4,\n              stroke: grey,\n              opacity: 1,\n            };\n\n            const nodeOrigin = {\n              x: -rectConfig.width / 2,\n              y: -rectConfig.height / 2,\n            };\n\n            const textConfig = {\n              textAlign: \"left\",\n              textBaseline: \"bottom\",\n            };\n\n            const rect = group.addShape(\"rect\", {\n              attrs: {\n                x: nodeOrigin.x,\n                y: nodeOrigin.y,\n                ...rectConfig,\n              },\n            });\n\n            const rectBBox = rect.getBBox();\n\n            // label title\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: 20 + nodeOrigin.y,\n                text: name.length > 28 ? `${name.substr(0, 28)}...` : name,\n                fontSize: 12,\n                opacity: 0.85,\n                fill: \"#000\",\n                cursor: \"pointer\",\n              },\n              name: \"name-shape\",\n            });\n\n            // price\n            const price = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: rectBBox.maxY - 12,\n                text: label,\n                fontSize: 16,\n                fill: \"#000\",\n                opacity: 0.85,\n              },\n            });\n\n            // label currency\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: price.getBBox().maxX + 5,\n                y: rectBBox.maxY - 12,\n                text: currency,\n                fontSize: 12,\n                fill: \"#000\",\n                opacity: 0.75,\n              },\n            });\n\n            // percentage\n            const percentText = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: rectBBox.maxX - 8,\n                y: rectBBox.maxY - 12,\n                text: `${((variableValue || 0) * 100).toFixed(2)}%`,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: colors[status],\n              },\n            });\n\n            // percentage triangle\n            const symbol = variableUp ? \"triangle\" : \"triangle-down\";\n            const triangle = group.addShape(\"marker\", {\n              attrs: {\n                ...textConfig,\n                x: percentText.getBBox().minX - 10,\n                y: rectBBox.maxY - 12 - 6,\n                symbol,\n                r: 6,\n                fill: colors[status],\n              },\n            });\n\n            // variable name\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: triangle.getBBox().minX - 4,\n                y: rectBBox.maxY - 12,\n                text: variableName,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: \"#000\",\n                opacity: 0.45,\n              },\n            });\n\n            // bottom line background\n            // const bottomBackRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rectConfig.width,\n            //     height: 4,\n            //     radius: [0, 0, rectConfig.radius, rectConfig.radius],\n            //     fill: '#E0DFE3',\n            //   },\n            // });\n\n            // bottom percent\n            // const bottomRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rate * rectBBox.width,\n            //     height: 4,\n            //     radius: [0, 0, 0, rectConfig.radius],\n            //     fill: colors[status],\n            //   },\n            // });\n\n            // collapse rect\n            if (cfg.children && cfg.children.length) {\n              group.addShape(\"rect\", {\n                attrs: {\n                  x: rectConfig.width / 2 - 8,\n                  y: -8,\n                  width: 16,\n                  height: 16,\n                  stroke: \"rgba(0, 0, 0, 0.25)\",\n                  cursor: \"pointer\",\n                  fill: \"#fff\",\n                },\n                name: \"collapse-back\",\n                modelId: cfg.id,\n              });\n\n              // collpase text\n              group.addShape(\"text\", {\n                attrs: {\n                  x: rectConfig.width / 2,\n                  y: -1,\n                  textAlign: \"center\",\n                  textBaseline: \"middle\",\n                  text: collapsed ? \"+\" : \"-\",\n                  fontSize: 16,\n                  cursor: \"pointer\",\n                  fill: \"rgba(0, 0, 0, 0.25)\",\n                },\n                name: \"collapse-text\",\n                modelId: cfg.id,\n              });\n            }\n\n            this.drawLinkPoints(cfg, group);\n            return rect;\n          },\n          update(cfg, item) {\n            const group = item.getContainer();\n            this.updateLinkPoints(cfg, group);\n          },\n          setState(name, value, item) {\n            if (name === \"collapse\") {\n              const group = item.getContainer();\n              const collapseText = group.find(\n                (e) => e.get(\"name\") === \"collapse-text\",\n              );\n              if (collapseText) {\n                if (!value) {\n                  collapseText.attr({\n                    text: \"-\",\n                  });\n                } else {\n                  collapseText.attr({\n                    text: \"+\",\n                  });\n                }\n              }\n            }\n          },\n          getAnchorPoints() {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n            ];\n          },\n        },\n        \"rect\",\n      );\n\n      F6.registerEdge(\n        \"flow-cubic\",\n        {\n          getControlPoints(cfg) {\n            let { controlPoints } = cfg; // 指定controlPoints\n            if (!controlPoints || !controlPoints.length) {\n              const { startPoint, endPoint, sourceNode, targetNode } = cfg;\n              const {\n                x: startX,\n                y: startY,\n                coefficientX,\n                coefficientY,\n              } = sourceNode ? sourceNode.getModel() : startPoint;\n              const { x: endX, y: endY } = targetNode\n                ? targetNode.getModel()\n                : endPoint;\n              let curveStart = (endX - startX) * coefficientX;\n              let curveEnd = (endY - startY) * coefficientY;\n              curveStart = curveStart > 40 ? 40 : curveStart;\n              curveEnd = curveEnd < -30 ? curveEnd : -30;\n              controlPoints = [\n                { x: startPoint.x + curveStart, y: startPoint.y },\n                { x: endPoint.x + curveEnd, y: endPoint.y },\n              ];\n            }\n            return controlPoints;\n          },\n          getPath(points) {\n            const path = [];\n            path.push([\"M\", points[0].x, points[0].y]);\n            path.push([\n              \"C\",\n              points[1].x,\n              points[1].y,\n              points[2].x,\n              points[2].y,\n              points[3].x,\n              points[3].y,\n            ]);\n            return path;\n          },\n        },\n        \"single-line\",\n      );\n    };\n    registerFn();\n\n    const { onInit, config } = props;\n    console.log(onInit);\n    const tooltip = new F6.Tooltip({\n      // TODO: _f2.default.Tooltip is not a constructor\n      // offsetX and offsetY include the padding of the parent container\n      offsetX: 20,\n      offsetY: 30,\n      // the types of items that allow the tooltip show up\n      // 允许出现 tooltip 的 item 类型\n      itemTypes: [\"node\"],\n      // custom the tooltip's content\n      // 自定义 tooltip 内容\n      getContent: (e) => {\n        const outDiv = document.createElement(\"div\");\n        // outDiv.style.padding = '0px 0px 20px 0px';\n        const nodeName = e.item.getModel().name;\n        let formatedNodeName = \"\";\n        for (let i = 0; i < nodeName.length; i++) {\n          formatedNodeName = `${formatedNodeName}${nodeName[i]}`;\n          if (i !== 0 && i % 20 === 0)\n            formatedNodeName = `${formatedNodeName}<br/>`;\n        }\n        outDiv.innerHTML = `${formatedNodeName}`;\n        return outDiv;\n      },\n      shouldBegin: (e) => {\n        if (e.target.get(\"name\") === \"name-shape\") return true;\n        return false;\n      },\n    });\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n\n      ...defaultConfig,\n      ...config,\n      plugins: [tooltip],\n    });\n\n    this.graph.data(mockData);\n    this.graph.render();\n    this.graph.fitView();\n    this.graph.zoom(config.defaultZoom || 1);\n\n    const handleCollapse = (e) => {\n      const { target } = e;\n      const id = target.get(\"modelId\");\n      const item = this.graph.findById(id);\n      const nodeModel = item.getModel();\n      nodeModel.collapsed = !nodeModel.collapsed;\n      this.graph.layout();\n      this.graph.setItemState(item, \"collapse\", nodeModel.collapsed);\n    };\n    this.graph.on(\"collapse-text:tap\", (e) => {\n      handleCollapse(e);\n    });\n    this.graph.on(\"collapse-back:tap\", (e) => {\n      handleCollapse(e);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/decision-tree/index.json",
    "content": "{\n  \"defaultTitle\": \"决策树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/donut-transfer/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"person A\",\n      label: \"person A\",\n      // the attributes for drawing donut\n      donutAttrs: {\n        income: 10,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person B\",\n      label: \"person B\",\n      donutAttrs: {\n        income: 20,\n        outcome: 10,\n        unknown: 5,\n      },\n    },\n    {\n      id: \"person C\",\n      label: \"person C\",\n      donutAttrs: {\n        income: 200,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person D\",\n      label: \"person D\",\n      donutAttrs: {\n        income: 50,\n        outcome: 10,\n        unknown: 15,\n      },\n    },\n    {\n      id: \"person E\",\n      label: \"person E\",\n      donutAttrs: {\n        income: 80,\n        outcome: 40,\n        unknown: 45,\n      },\n    },\n    {\n      id: \"person F\",\n      label: \"person F\",\n      donutAttrs: {\n        income: 90,\n        outcome: 110,\n        unknown: 15,\n      },\n    },\n  ],\n  edges: [\n    { source: \"person C\", target: \"person F\", size: 10 },\n    { source: \"person B\", target: \"person A\", size: 5 },\n    { source: \"person D\", target: \"person E\", size: 20 },\n    { source: \"person D\", target: \"person C\", size: 5 },\n    { source: \"person B\", target: \"person C\", size: 10 },\n    { source: \"person A\", target: \"person C\", size: 5 },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.label = `Transfer $${edge.size}`;\n});\n\nconst colors = {\n  income: \"#61DDAA\",\n  outcome: \"#F08BB4\",\n  unknown: \"#65789B\",\n};\n\ndata.nodes.forEach((node) => {\n  node.donutColorMap = colors;\n  node.size = 0;\n  Object.keys(node.donutAttrs).forEach((key) => {\n    node.size += node.donutAttrs[key];\n  });\n  node.size = Math.sqrt(node.size) * 5;\n});\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"income\",\n      label: \"Income\",\n      order: 0,\n      style: {\n        fill: \"#61DDAA\",\n      },\n    },\n    {\n      id: \"outcome\",\n      label: \"Outcome\",\n      order: 2,\n      style: {\n        fill: \"#F08BB4\",\n      },\n    },\n    {\n      id: \"unknown\",\n      label: \"Unknown\",\n      order: 2,\n      style: {\n        fill: \"#65789B\",\n      },\n    },\n  ],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/donut-transfer/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/donut-transfer/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/donut-transfer/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { data, legendData } from \"./data\";\n/**\n * donutTransfer\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const legend = new F6.Legend({\n      data: legendData,\n      align: \"center\",\n      layout: \"horizontal\", // vertical\n      position: \"bottom-left\",\n      vertiSep: 12,\n      horiSep: 24,\n      offsetY: -24,\n      padding: [4, 16, 8, 16],\n      containerStyle: {\n        fill: \"#ccc\",\n        lineWidth: 1,\n      },\n      title: \" \",\n      titleConfig: {\n        offsetY: -8,\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      plugins: [legend], // 这里的plugin不知道能不能用\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        focusNode: \"li\",\n        linkDistance: 200,\n        unitRadius: 200,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: true,\n        },\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            stroke: \"#fff\",\n            lineWidth: 5,\n          },\n        },\n      },\n      defaultNode: {\n        type: \"donut\",\n        style: {\n          lineWidth: 0,\n        },\n        labelCfg: {\n          position: \"bottom\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/donut-transfer/index.json",
    "content": "{\n  \"defaultTitle\": \"甜甜圈转账图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/knowledge-tree-graph/data.js",
    "content": "export default {\n  id: \"200000004\",\n  tooltip: \"Thing\",\n  label: \"事物\",\n  description: null,\n  descriptionZh: null,\n  depth: 3,\n  subTypeCount: 9,\n  status: 0,\n  children: [\n    {\n      id: \"500000061\",\n      tooltip: \"Person\",\n      label: \"自然人\",\n      description: null,\n      descriptionZh: null,\n      depth: 1,\n      subTypeCount: 1,\n      status: 0,\n      children: [\n        {\n          id: \"707000085\",\n          tooltip: \"FilmPerson\",\n          label: \"电影人\",\n          description: null,\n          descriptionZh: null,\n          depth: 5,\n          subTypeCount: 3,\n          status: 1,\n          children: [\n            {\n              id: \"707000090\",\n              tooltip: \"FilmDirector\",\n              label: \"电影导演\",\n              description: null,\n              descriptionZh: null,\n              depth: 0,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000091\",\n              tooltip: \"FilmWriter\",\n              label: \"电影编剧\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000092\",\n              tooltip: \"FilmStar\",\n              label: \"电影主演\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"707000086\",\n          tooltip: \"MusicPerson\",\n          label: \"音乐人\",\n          description: null,\n          descriptionZh: null,\n          depth: 17,\n          subTypeCount: 2,\n          status: 1,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"200000005\",\n      tooltip: \"Music\",\n      label: \"音乐\",\n      description: null,\n      descriptionZh: null,\n      depth: 3,\n      subTypeCount: 2,\n      status: 1,\n      children: [],\n    },\n    {\n      id: \"707000128\",\n      tooltip: \"Film\",\n      label: \"电影\",\n      description: null,\n      descriptionZh: null,\n      depth: 4,\n      subTypeCount: 0,\n      status: 1,\n      children: [\n        {\n          id: \"7070032328\",\n          tooltip: \"Comedy\",\n          label: \"喜剧\",\n          description: null,\n          descriptionZh: null,\n          depth: 4,\n          operation: \"C\",\n          subTypeCount: 0,\n          status: 1,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"707000095\",\n      tooltip: \"FilmGenre\",\n      label: \"电影类别\",\n      description: null,\n      descriptionZh: null,\n      depth: 4,\n      subTypeCount: 0,\n      status: 1,\n      children: [],\n    },\n    {\n      id: \"702000021\",\n      tooltip: \"Organization\",\n      label: \"机构\",\n      description: null,\n      descriptionZh: null,\n      depth: 47,\n      subTypeCount: 1,\n      status: 0,\n      children: [\n        {\n          id: \"500000063\",\n          tooltip: \"Company\",\n          label: \"公司\",\n          description: null,\n          descriptionZh: null,\n          depth: 4,\n          subTypeCount: 2,\n          status: 1,\n          children: [\n            {\n              id: \"707000093\",\n              tooltip: \"FilmCompany\",\n              label: \"电影公司\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000094\",\n              tooltip: \"MusicCompany\",\n              label: \"音乐公司\",\n              description: null,\n              descriptionZh: null,\n              depth: 2,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/knowledge-tree-graph/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/knowledge-tree-graph/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/knowledge-tree-graph/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\n\n/**\n * 知识图谱树\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    const minWidth = 60;\n\n    // TODO:这里需要定义两次，因为onLoad()里面传不到,updateChart()里面,如果定义在Page外面是不是就是全局的\n    const BaseConfig = {\n      nameFontSize: 12,\n      childCountWidth: 22,\n      countMarginLeft: 0,\n      itemPadding: 16,\n      nameMarginLeft: 4,\n      rootPadding: 18,\n    };\n    F6.registerNode(\"treeNode\", {\n      draw: (cfg, group) => {\n        const { label, collapsed, selected, children, depth } = cfg;\n        const rootNode = depth === 0;\n        const hasChildren = children && children.length !== 0;\n\n        const {\n          childCountWidth,\n          countMarginLeft,\n          itemPadding,\n          nameMarginLeft,\n          rootPadding,\n        } = BaseConfig;\n\n        let width = 0;\n        const height = 28;\n        const x = 0;\n        const y = -height / 2;\n\n        // 名称文本\n        const text = group.addShape(\"text\", {\n          attrs: {\n            text: label,\n            x: x * 2,\n            y,\n            textAlign: \"left\",\n            textBaseline: \"top\",\n            fontFamily: \"PingFangSC-Regular\",\n          },\n          cursor: \"pointer\",\n          name: \"name-text-shape\",\n        });\n        const textWidth = text.getBBox().width;\n        width = textWidth + itemPadding + nameMarginLeft;\n\n        width = width < minWidth ? minWidth : width;\n\n        if (!rootNode && hasChildren) {\n          width += countMarginLeft;\n          width += childCountWidth;\n        }\n\n        const keyShapeAttrs = {\n          x,\n          y,\n          width,\n          height,\n          radius: 4,\n        };\n\n        // keyShape根节点选中样式\n        if (rootNode && selected) {\n          keyShapeAttrs.fill = \"#e8f7ff\";\n          keyShapeAttrs.stroke = \"#e8f7ff\";\n        }\n        const keyShape = group.addShape(\"rect\", {\n          attrs: keyShapeAttrs,\n          name: \"root-key-shape-rect-shape\",\n        });\n\n        if (!rootNode) {\n          // 底部横线\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", x - 1, 0],\n                [\"L\", width, 0],\n              ],\n              stroke: \"#AAB7C4\",\n              lineWidth: 1,\n            },\n            name: \"node-path-shape\",\n          });\n        }\n\n        const mainX = x - 10;\n        const mainY = -height + 15;\n\n        if (rootNode) {\n          group.addShape(\"rect\", {\n            attrs: {\n              x: mainX,\n              y: mainY,\n              width: width + 12,\n              height,\n              radius: 14,\n              fill: \"#e8f7ff\",\n              cursor: \"pointer\",\n            },\n            name: \"main-shape\",\n          });\n        }\n\n        let nameColor = \"rgba(0, 0, 0, .65)\";\n        if (selected) {\n          nameColor = \"#40A8FF\";\n        }\n\n        // 名称\n        if (rootNode) {\n          group.addShape(\"text\", {\n            attrs: {\n              text: label,\n              x: mainX + rootPadding,\n              y: 1,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: nameColor,\n              fontSize: 12,\n              fontFamily: \"PingFangSC-Regular\",\n              cursor: \"pointer\",\n            },\n            name: \"root-text-shape\",\n          });\n        } else {\n          group.addShape(\"text\", {\n            attrs: {\n              text: label,\n              x: selected ? mainX + 6 + nameMarginLeft : mainX + 6,\n              y: y - 5,\n              textAlign: \"start\",\n              textBaseline: \"top\",\n              fill: nameColor,\n              fontSize: 12,\n              fontFamily: \"PingFangSC-Regular\",\n              cursor: \"pointer\",\n            },\n            name: \"not-root-text-shape\",\n          });\n        }\n\n        // 子类数量\n        if (hasChildren && !rootNode) {\n          const childCountHeight = 12;\n          const childCountX = width - childCountWidth;\n          const childCountY = -childCountHeight / 2;\n\n          group.addShape(\"rect\", {\n            attrs: {\n              width: childCountWidth,\n              height: 12,\n              stroke: collapsed ? \"#1890ff\" : \"#5CDBD3\",\n              fill: collapsed ? \"#fff\" : \"#E6FFFB\",\n              x: childCountX,\n              y: childCountY,\n              radius: 6,\n              cursor: \"pointer\",\n            },\n            name: \"child-count-rect-shape\",\n          });\n          group.addShape(\"text\", {\n            attrs: {\n              text: `${children.length}`,\n              fill: \"rgba(0, 0, 0, .65)\",\n              x: childCountX + childCountWidth / 2,\n              y: childCountY + 12,\n              fontSize: 10,\n              width: childCountWidth,\n              textAlign: \"center\",\n              cursor: \"pointer\",\n            },\n            name: \"child-count-text-shape\",\n          });\n        }\n\n        return keyShape;\n      },\n    });\n\n    F6.registerEdge(\"smooth\", {\n      draw(cfg, group) {\n        const { startPoint, endPoint } = cfg;\n        const hgap = Math.abs(endPoint.x - startPoint.x);\n\n        const path = [\n          [\"M\", startPoint.x, startPoint.y],\n          [\n            \"C\",\n            startPoint.x + hgap / 4,\n            startPoint.y,\n            endPoint.x - hgap / 2,\n            endPoint.y,\n            endPoint.x,\n            endPoint.y,\n          ],\n        ];\n\n        const shape = group.addShape(\"path\", {\n          attrs: {\n            stroke: \"#AAB7C4\",\n            path,\n          },\n          name: \"smooth-path-shape\",\n        });\n        return shape;\n      },\n    });\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const BaseConfig = {\n      nameFontSize: 12,\n      childCountWidth: 22,\n      countMarginLeft: 0,\n      itemPadding: 16,\n      nameMarginLeft: 4,\n      rootPadding: 18,\n    };\n    // 创建F6实例\n\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        type: \"treeNode\",\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"smooth\",\n      },\n      layout: {\n        type: \"compactBox\", // TODO：为什么这里找不到\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth(d) {\n          const labelWidth = F6.Util.getTextSize(\n            d.label,\n            BaseConfig.nameFontSize,\n          )[0];\n          const width_ =\n            BaseConfig.itemPadding +\n            BaseConfig.nameMarginLeft +\n            labelWidth +\n            BaseConfig.rootPadding +\n            BaseConfig.childCountWidth;\n          return width_;\n        },\n        getVGap: function getVGap() {\n          return 15;\n        },\n        getHGap: function getHGap() {\n          return 30;\n        },\n      },\n    });\n\n    // 注册数据\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/knowledge-tree-graph/index.json",
    "content": "{\n  \"defaultTitle\": \"知识图谱树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/metro-lines/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 12955418.07889617,\n      y: 4858516.455509626,\n      class: \"地铁二号线\",\n      name: \"地铁二号线 0\",\n    },\n    {\n      id: \"1\",\n      x: 12955418.07889617,\n      y: 4858516.455509626,\n      class: \"地铁二号线\",\n      name: \"地铁二号线 1\",\n    },\n    {\n      id: \"2\",\n      x: 12960805.702543395,\n      y: 4843623.153783939,\n      class: \"地铁五号线\",\n      name: \"地铁五号线 0\",\n    },\n    {\n      id: \"3\",\n      x: 12957909.41496727,\n      y: 4878612.7284845,\n      class: \"地铁五号线\",\n      name: \"地铁五号线 1\",\n    },\n    {\n      id: \"4\",\n      x: 12924431.591067636,\n      y: 4826881.565994551,\n      class: \"地铁房山线\",\n      name: \"地铁房山线 0\",\n    },\n    {\n      id: \"5\",\n      x: 12946675.914777644,\n      y: 4839000.571326079,\n      class: \"地铁房山线\",\n      name: \"地铁房山线 1\",\n    },\n    {\n      id: \"6\",\n      x: 12960805.702543395,\n      y: 4843623.153783939,\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 0\",\n    },\n    {\n      id: \"7\",\n      x: 12980513.522539986,\n      y: 4840611.685434834,\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 1\",\n    },\n    {\n      id: \"8\",\n      x: 12970460.425604625,\n      y: 4852660.505494347,\n      class: \"地铁一号线\",\n      name: \"地铁一号线 0\",\n    },\n    {\n      id: \"9\",\n      x: 12932857.683691781,\n      y: 4855262.558461167,\n      class: \"地铁一号线\",\n      name: \"地铁一号线 1\",\n    },\n    {\n      id: \"10\",\n      x: 12954336.341521818,\n      y: 4841957.844498525,\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 0\",\n    },\n    {\n      id: \"11\",\n      x: 12948661.393356105,\n      y: 4818156.255552412,\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 1\",\n    },\n    {\n      id: \"12\",\n      x: 12954336.341521818,\n      y: 4841957.844498525,\n      class: \"地铁四号线\",\n      name: \"地铁四号线 0\",\n    },\n    {\n      id: \"13\",\n      x: 12943094.565471629,\n      y: 4868005.960957178,\n      class: \"地铁四号线\",\n      name: \"地铁四号线 1\",\n    },\n    {\n      id: \"14\",\n      x: 12943697.439571828,\n      y: 4856096.365355702,\n      class: \"地铁六号线\",\n      name: \"地铁六号线 0\",\n    },\n    {\n      id: \"15\",\n      x: 12982538.96049167,\n      y: 4855210.774849254,\n      class: \"地铁六号线\",\n      name: \"地铁六号线 1\",\n    },\n    {\n      id: \"16\",\n      x: 12946675.914777644,\n      y: 4839000.571326079,\n      class: \"地铁九号线\",\n      name: \"地铁九号线 0\",\n    },\n    {\n      id: \"17\",\n      x: 12949261.040454354,\n      y: 4857656.700765552,\n      class: \"地铁九号线\",\n      name: \"地铁九号线 1\",\n    },\n    {\n      id: \"18\",\n      x: 12956918.23852815,\n      y: 4858529.6221339535,\n      class: \"地铁八号线\",\n      name: \"地铁八号线 0\",\n    },\n    {\n      id: \"19\",\n      x: 12957923.222643975,\n      y: 4856285.931514598,\n      class: \"地铁八号线\",\n      name: \"地铁八号线 1\",\n    },\n    {\n      id: \"20\",\n      x: 12947165.66572366,\n      y: 4873622.718414709,\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 0\",\n    },\n    {\n      id: \"21\",\n      x: 12945101.617382836,\n      y: 4896059.0154147735,\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 1\",\n    },\n    {\n      id: \"22\",\n      x: 12970460.425604625,\n      y: 4852660.505494347,\n      class: \"地铁八通线\",\n      name: \"地铁八通线 0\",\n    },\n    {\n      id: \"23\",\n      x: 12989768.23411335,\n      y: 4847232.117513346,\n      class: \"地铁八通线\",\n      name: \"地铁八通线 1\",\n    },\n    {\n      id: \"24\",\n      x: 12961385.775293019,\n      y: 4857425.3359782435,\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 0\",\n    },\n    {\n      id: \"25\",\n      x: 12952415.003097966,\n      y: 4857385.42314959,\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 1\",\n    },\n    {\n      id: \"26\",\n      x: 12964405.448829094,\n      y: 4849043.663728292,\n      class: \"地铁十号线\",\n      name: \"地铁十号线 0\",\n    },\n    {\n      id: \"27\",\n      x: 12945523.914777555,\n      y: 4862157.070927259,\n      class: \"地铁十号线\",\n      name: \"地铁十号线 1\",\n    },\n    {\n      id: \"28\",\n      x: 12937182.6004098,\n      y: 4846484.783681809,\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 0\",\n    },\n    {\n      id: \"29\",\n      x: 12946851.421569752,\n      y: 4846551.5626413245,\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 1\",\n    },\n    {\n      id: \"30\",\n      x: 12975248.324027628,\n      y: 4879080.29109743,\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 0\",\n    },\n    {\n      id: \"31\",\n      x: 12962862.26847603,\n      y: 4865214.088371204,\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 1\",\n    },\n    {\n      id: \"32\",\n      x: 12981143.037271895,\n      y: 4871509.161726701,\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 0\",\n    },\n    {\n      id: \"33\",\n      x: 12961347.967621036,\n      y: 4857396.841326526,\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 1\",\n    },\n  ],\n  edges: [\n    {\n      id: \"0\",\n      source: \"0\",\n      target: \"1\",\n      class: \"地铁二号线\",\n      name: \"地铁二号线 0\",\n      controlPoints: [\n        {\n          x: 12956158.028659772,\n          y: 4858523.099945488,\n        },\n        {\n          x: 12956181.882943347,\n          y: 4858523.313643505,\n        },\n        {\n          x: 12956333.569265882,\n          y: 4858524.675979247,\n        },\n        {\n          x: 12956722.101097316,\n          y: 4858528.426228019,\n        },\n        {\n          x: 12956892.09019568,\n          y: 4858529.577087689,\n        },\n        {\n          x: 12957092.031747662,\n          y: 4858532.537231651,\n        },\n        {\n          x: 12957285.500773665,\n          y: 4858534.624581567,\n        },\n        {\n          x: 12958025.324180173,\n          y: 4858542.359953267,\n        },\n        {\n          x: 12958025.324180173,\n          y: 4858542.359953267,\n        },\n        {\n          x: 12958040.386887064,\n          y: 4858542.398858417,\n        },\n        {\n          x: 12958051.381729262,\n          y: 4858542.39594296,\n        },\n        {\n          x: 12958077.436647858,\n          y: 4858542.626090849,\n        },\n        {\n          x: 12958156.437099922,\n          y: 4858543.794072316,\n        },\n        {\n          x: 12958189.185511772,\n          y: 4858543.944439034,\n        },\n        {\n          x: 12958309.191310784,\n          y: 4858545.279485739,\n        },\n        {\n          x: 12958458.470410347,\n          y: 4858547.406977885,\n        },\n        {\n          x: 12958499.690753505,\n          y: 4858547.988957175,\n        },\n        {\n          x: 12958505.143835366,\n          y: 4858548.099568159,\n        },\n        {\n          x: 12958552.455966821,\n          y: 4858548.335831382,\n        },\n        {\n          x: 12958768.467696369,\n          y: 4858549.399143227,\n        },\n        {\n          x: 12958859.902949648,\n          y: 4858552.977807331,\n        },\n        {\n          x: 12958924.391812265,\n          y: 4858556.413893195,\n        },\n        {\n          x: 12958993.172822965,\n          y: 4858558.959445135,\n        },\n        {\n          x: 12959013.547905065,\n          y: 4858559.7809649445,\n        },\n        {\n          x: 12959327.7774419,\n          y: 4858574.063556792,\n        },\n        {\n          x: 12959423.21800485,\n          y: 4858577.691630111,\n        },\n        {\n          x: 12959426.045447897,\n          y: 4858577.797144458,\n        },\n        {\n          x: 12959659.119375631,\n          y: 4858587.989742429,\n        },\n        {\n          x: 12959737.865294052,\n          y: 4858591.668097373,\n        },\n        {\n          x: 12959846.282077461,\n          y: 4858596.613007342,\n        },\n        {\n          x: 12959955.561247244,\n          y: 4858601.256188295,\n        },\n        {\n          x: 12960095.413179535,\n          y: 4858607.094133126,\n        },\n        {\n          x: 12960179.06451476,\n          y: 4858611.470739427,\n        },\n        {\n          x: 12960222.914558794,\n          y: 4858613.727307291,\n        },\n        {\n          x: 12960421.743963502,\n          y: 4858622.407685848,\n        },\n        {\n          x: 12960445.476249201,\n          y: 4858623.093869879,\n        },\n        {\n          x: 12960629.592854993,\n          y: 4858630.086065551,\n        },\n        {\n          x: 12960751.203872466,\n          y: 4858635.467581922,\n        },\n        {\n          x: 12960848.858819682,\n          y: 4858639.927849644,\n        },\n        {\n          x: 12960917.431335308,\n          y: 4858642.696504292,\n        },\n        {\n          x: 12960954.897539183,\n          y: 4858643.0533597935,\n        },\n        {\n          x: 12960982.959798397,\n          y: 4858642.704017011,\n        },\n        {\n          x: 12961014.781746428,\n          y: 4858640.30966017,\n        },\n        {\n          x: 12961051.662476636,\n          y: 4858634.414079347,\n        },\n        {\n          x: 12961083.478422668,\n          y: 4858626.929183689,\n        },\n        {\n          x: 12961111.532563318,\n          y: 4858617.271161616,\n        },\n        {\n          x: 12961140.594020512,\n          y: 4858604.699543408,\n        },\n        {\n          x: 12961160.7368578,\n          y: 4858593.842589348,\n        },\n        {\n          x: 12961181.649884878,\n          y: 4858581.485318099,\n        },\n        {\n          x: 12961198.850660494,\n          y: 4858569.376089524,\n        },\n        {\n          x: 12961224.140661275,\n          y: 4858547.942074989,\n        },\n        {\n          x: 12961236.424254648,\n          y: 4858536.280756947,\n        },\n        {\n          x: 12961250.296104662,\n          y: 4858521.997990917,\n        },\n        {\n          x: 12961263.585987432,\n          y: 4858506.114455221,\n        },\n        {\n          x: 12961276.44120637,\n          y: 4858488.344153348,\n        },\n        {\n          x: 12961286.408321457,\n          y: 4858473.632750297,\n        },\n        {\n          x: 12961294.63870108,\n          y: 4858460.527513578,\n        },\n        {\n          x: 12961303.735586522,\n          y: 4858443.4908795785,\n        },\n        {\n          x: 12961311.961795231,\n          y: 4858426.312269373,\n        },\n        {\n          x: 12961324.544825437,\n          y: 4858394.384768109,\n        },\n        {\n          x: 12961332.599563174,\n          y: 4858367.639883998,\n        },\n        {\n          x: 12961338.437462995,\n          y: 4858349.099767153,\n        },\n        {\n          x: 12961341.2480161,\n          y: 4858329.523211644,\n        },\n        {\n          x: 12961344.471828079,\n          y: 4858307.641213481,\n        },\n        {\n          x: 12961347.327668607,\n          y: 4858271.276643974,\n        },\n        {\n          x: 12961347.988308016,\n          y: 4858252.824580443,\n        },\n        {\n          x: 12961348.859027859,\n          y: 4858200.010594391,\n        },\n        {\n          x: 12961348.859027859,\n          y: 4858200.0103943935,\n        },\n        {\n          x: 12961347.38216376,\n          y: 4858144.4708304275,\n        },\n        {\n          x: 12961343.338631237,\n          y: 4857930.979484696,\n        },\n        {\n          x: 12961343.002661625,\n          y: 4857896.233210593,\n        },\n        {\n          x: 12961340.747563919,\n          y: 4857737.363889014,\n        },\n        {\n          x: 12961338.592553958,\n          y: 4857671.84297017,\n        },\n        {\n          x: 12961341.18922736,\n          y: 4857596.35911637,\n        },\n        {\n          x: 12961344.975191534,\n          y: 4857477.302133615,\n        },\n        {\n          x: 12961347.967621036,\n          y: 4857396.841326526,\n        },\n        {\n          x: 12961350.020733643,\n          y: 4857318.561403474,\n        },\n        {\n          x: 12961355.68061802,\n          y: 4857153.852373557,\n        },\n        {\n          x: 12961355.680618014,\n          y: 4857153.852273558,\n        },\n        {\n          x: 12961359.731217345,\n          y: 4857006.275839691,\n        },\n        {\n          x: 12961359.731017353,\n          y: 4857006.131939777,\n        },\n        {\n          x: 12961360.845305737,\n          y: 4856963.669545529,\n        },\n        {\n          x: 12961366.890092889,\n          y: 4856784.230691269,\n        },\n        {\n          x: 12961368.58851819,\n          y: 4856746.131025358,\n        },\n        {\n          x: 12961372.266035046,\n          y: 4856660.336259479,\n        },\n        {\n          x: 12961372.829975668,\n          y: 4856646.230202675,\n        },\n        {\n          x: 12961378.034419877,\n          y: 4856495.295969707,\n        },\n        {\n          x: 12961382.403443811,\n          y: 4856377.660000789,\n        },\n        {\n          x: 12961384.942063117,\n          y: 4856311.497820034,\n        },\n        {\n          x: 12961386.465992313,\n          y: 4856243.30465021,\n        },\n        {\n          x: 12961390.674716666,\n          y: 4856107.682763318,\n        },\n        {\n          x: 12961394.329897156,\n          y: 4855999.369524935,\n        },\n        {\n          x: 12961394.516375585,\n          y: 4855993.8847022,\n        },\n        {\n          x: 12961417.584882293,\n          y: 4855310.507392769,\n        },\n        {\n          x: 12961417.694868386,\n          y: 4855307.2384764915,\n        },\n        {\n          x: 12961425.988003194,\n          y: 4855061.622208351,\n        },\n        {\n          x: 12961440.215299333,\n          y: 4854643.566032893,\n        },\n        {\n          x: 12961461.215758536,\n          y: 4854015.5516425,\n        },\n        {\n          x: 12961471.471998505,\n          y: 4853691.795660701,\n        },\n        {\n          x: 12961471.611776885,\n          y: 4853686.561937957,\n        },\n        {\n          x: 12961474.998051625,\n          y: 4853601.811384682,\n        },\n        {\n          x: 12961478.809553925,\n          y: 4853507.031446198,\n        },\n        {\n          x: 12961480.521483717,\n          y: 4853483.915660419,\n        },\n        {\n          x: 12961481.521725276,\n          y: 4853474.174593727,\n        },\n        {\n          x: 12961482.954997385,\n          y: 4853459.926853736,\n        },\n        {\n          x: 12961485.39370743,\n          y: 4853441.314944552,\n        },\n        {\n          x: 12961494.966948297,\n          y: 4853364.78470371,\n        },\n        {\n          x: 12961499.936921315,\n          y: 4853336.948636642,\n        },\n        {\n          x: 12961547.758241706,\n          y: 4853069.064103569,\n        },\n        {\n          x: 12961553.642808063,\n          y: 4853027.336298535,\n        },\n        {\n          x: 12961555.648717735,\n          y: 4853011.198681677,\n        },\n        {\n          x: 12961558.402478581,\n          y: 4852968.599887655,\n        },\n        {\n          x: 12961561.595948681,\n          y: 4852886.1285595605,\n        },\n        {\n          x: 12961562.434182541,\n          y: 4852851.8992535565,\n        },\n        {\n          x: 12961567.092653673,\n          y: 4852663.388779601,\n        },\n        {\n          x: 12961567.151841797,\n          y: 4852661.004664356,\n        },\n        {\n          x: 12961571.615182877,\n          y: 4852499.601380691,\n        },\n        {\n          x: 12961570.762650162,\n          y: 4852327.846076672,\n        },\n        {\n          x: 12961554.898502,\n          y: 4852258.290511526,\n        },\n        {\n          x: 12961533.80510204,\n          y: 4852226.950476327,\n        },\n        {\n          x: 12961502.181787156,\n          y: 4852194.501877436,\n        },\n        {\n          x: 12961463.801001186,\n          y: 4852175.682708853,\n        },\n        {\n          x: 12961419.411661869,\n          y: 4852168.225375068,\n        },\n        {\n          x: 12961360.726703899,\n          y: 4852159.287636606,\n        },\n        {\n          x: 12961305.806766747,\n          y: 4852155.632147181,\n        },\n        {\n          x: 12961091.327734,\n          y: 4852150.8841911405,\n        },\n        {\n          x: 12961044.05355995,\n          y: 4852148.93802986,\n        },\n        {\n          x: 12960991.078574985,\n          y: 4852148.12380065,\n        },\n        {\n          x: 12960926.683247,\n          y: 4852147.134333183,\n        },\n        {\n          x: 12960858.046176687,\n          y: 4852148.206427826,\n        },\n        {\n          x: 12960832.258540388,\n          y: 4852148.44774515,\n        },\n        {\n          x: 12960823.161300883,\n          y: 4852148.574651271,\n        },\n        {\n          x: 12960804.266769528,\n          y: 4852149.284002013,\n        },\n        {\n          x: 12960648.459496386,\n          y: 4852144.033337599,\n        },\n        {\n          x: 12960623.783721833,\n          y: 4852142.918236917,\n        },\n        {\n          x: 12960610.08653878,\n          y: 4852142.2999238875,\n        },\n        {\n          x: 12960436.33035975,\n          y: 4852141.569412107,\n        },\n        {\n          x: 12960425.323876735,\n          y: 4852141.588789343,\n        },\n        {\n          x: 12960418.062649192,\n          y: 4852140.894469294,\n        },\n        {\n          x: 12960397.685451128,\n          y: 4852136.929909052,\n        },\n        {\n          x: 12960381.523315413,\n          y: 4852132.778561514,\n        },\n        {\n          x: 12960359.877821121,\n          y: 4852123.64158053,\n        },\n        {\n          x: 12960334.346658466,\n          y: 4852109.556173046,\n        },\n        {\n          x: 12960318.030734146,\n          y: 4852101.525721443,\n        },\n        {\n          x: 12960299.754816394,\n          y: 4852089.551346909,\n        },\n        {\n          x: 12960273.273841146,\n          y: 4852069.355692289,\n        },\n        {\n          x: 12960250.771053055,\n          y: 4852047.738776747,\n        },\n        {\n          x: 12960236.237871027,\n          y: 4852032.227379977,\n        },\n        {\n          x: 12960225.220958065,\n          y: 4852021.18490097,\n        },\n        {\n          x: 12960202.953132067,\n          y: 4851998.62513292,\n        },\n        {\n          x: 12960134.803431373,\n          y: 4851930.302729313,\n        },\n        {\n          x: 12960131.415559309,\n          y: 4851926.836000303,\n        },\n        {\n          x: 12960033.302394766,\n          y: 4851823.178699325,\n        },\n        {\n          x: 12959943.550656857,\n          y: 4851717.754021466,\n        },\n        {\n          x: 12959908.855465326,\n          y: 4851685.719289181,\n        },\n        {\n          x: 12959858.337924149,\n          y: 4851648.509466072,\n        },\n        {\n          x: 12959827.947234219,\n          y: 4851635.216304059,\n        },\n        {\n          x: 12959793.596422547,\n          y: 4851620.193270011,\n        },\n        {\n          x: 12959764.33089034,\n          y: 4851609.816513307,\n        },\n        {\n          x: 12959751.845001617,\n          y: 4851605.540422947,\n        },\n        {\n          x: 12959710.096488312,\n          y: 4851595.58055257,\n        },\n        {\n          x: 12959644.793413645,\n          y: 4851583.581423427,\n        },\n        {\n          x: 12959487.546643838,\n          y: 4851579.1003289465,\n        },\n        {\n          x: 12959322.352977112,\n          y: 4851573.1751883635,\n        },\n        {\n          x: 12959215.355539855,\n          y: 4851567.487059426,\n        },\n        {\n          x: 12958906.741867626,\n          y: 4851555.576738978,\n        },\n        {\n          x: 12958503.588496968,\n          y: 4851536.078897831,\n        },\n        {\n          x: 12958347.549098158,\n          y: 4851535.177370091,\n        },\n        {\n          x: 12958020.7967457,\n          y: 4851519.547451833,\n        },\n        {\n          x: 12958020.774536882,\n          y: 4851519.546442713,\n        },\n        {\n          x: 12957918.246551817,\n          y: 4851517.112404003,\n        },\n        {\n          x: 12957847.278726801,\n          y: 4851508.301972056,\n        },\n        {\n          x: 12957786.075293908,\n          y: 4851497.8561179675,\n        },\n        {\n          x: 12957620.930185705,\n          y: 4851464.46553163,\n        },\n        {\n          x: 12957553.206441535,\n          y: 4851451.069831951,\n        },\n        {\n          x: 12957184.967742233,\n          y: 4851438.277567215,\n        },\n        {\n          x: 12957151.372959128,\n          y: 4851442.83206844,\n        },\n        {\n          x: 12956984.39334164,\n          y: 4851457.2499878295,\n        },\n        {\n          x: 12956887.683125133,\n          y: 4851467.99801078,\n        },\n        {\n          x: 12956842.417678,\n          y: 4851471.246557499,\n        },\n        {\n          x: 12956795.847498052,\n          y: 4851471.877345327,\n        },\n        {\n          x: 12956726.805401612,\n          y: 4851470.21078116,\n        },\n        {\n          x: 12956719.005096909,\n          y: 4851470.206809098,\n        },\n        {\n          x: 12956690.032717621,\n          y: 4851466.331142748,\n        },\n        {\n          x: 12956671.745146377,\n          y: 4851465.288835637,\n        },\n        {\n          x: 12956647.92701909,\n          y: 4851464.086883708,\n        },\n        {\n          x: 12956432.678734198,\n          y: 4851457.009062028,\n        },\n        {\n          x: 12956305.238743283,\n          y: 4851452.754473514,\n        },\n        {\n          x: 12956260.077742493,\n          y: 4851451.052139781,\n        },\n        {\n          x: 12956108.520973446,\n          y: 4851442.943084553,\n        },\n        {\n          x: 12955979.955562841,\n          y: 4851437.82970239,\n        },\n        {\n          x: 12955830.878658453,\n          y: 4851433.243655892,\n        },\n        {\n          x: 12955632.99933834,\n          y: 4851425.357106182,\n        },\n        {\n          x: 12955594.773108216,\n          y: 4851423.831054184,\n        },\n        {\n          x: 12955514.958767148,\n          y: 4851420.40654864,\n        },\n        {\n          x: 12955415.916358192,\n          y: 4851415.173754157,\n        },\n        {\n          x: 12955412.341824232,\n          y: 4851415.068560076,\n        },\n        {\n          x: 12955220.500590362,\n          y: 4851409.551334249,\n        },\n        {\n          x: 12955177.214926412,\n          y: 4851406.5893032905,\n        },\n        {\n          x: 12955161.53826209,\n          y: 4851406.056397046,\n        },\n        {\n          x: 12955016.683409026,\n          y: 4851400.736845952,\n        },\n        {\n          x: 12954738.676569056,\n          y: 4851389.629311211,\n        },\n        {\n          x: 12954418.456831554,\n          y: 4851372.282889688,\n        },\n        {\n          x: 12954112.367106372,\n          y: 4851361.821497771,\n        },\n        {\n          x: 12954112.366906373,\n          y: 4851361.821497775,\n        },\n        {\n          x: 12954095.960447045,\n          y: 4851361.608137167,\n        },\n        {\n          x: 12954011.183086088,\n          y: 4851358.621103881,\n        },\n        {\n          x: 12953877.563076375,\n          y: 4851352.740857408,\n        },\n        {\n          x: 12953853.85732765,\n          y: 4851351.967020577,\n        },\n        {\n          x: 12953803.748811886,\n          y: 4851349.749490414,\n        },\n        {\n          x: 12953512.054691948,\n          y: 4851336.624567439,\n        },\n        {\n          x: 12953304.439376486,\n          y: 4851326.941645583,\n        },\n        {\n          x: 12953215.990118599,\n          y: 4851343.405356978,\n        },\n        {\n          x: 12953186.516178105,\n          y: 4851352.304914633,\n        },\n        {\n          x: 12953160.820809599,\n          y: 4851360.075985219,\n        },\n        {\n          x: 12953135.6284275,\n          y: 4851368.607839927,\n        },\n        {\n          x: 12953110.773697035,\n          y: 4851379.448142389,\n        },\n        {\n          x: 12953078.728780996,\n          y: 4851396.784940073,\n        },\n        {\n          x: 12953055.671146156,\n          y: 4851410.242045931,\n        },\n        {\n          x: 12953025.125081131,\n          y: 4851430.283492892,\n        },\n        {\n          x: 12953002.867918571,\n          y: 4851441.908865417,\n        },\n        {\n          x: 12952970.9803234,\n          y: 4851464.194335162,\n        },\n        {\n          x: 12952948.54425685,\n          y: 4851486.7574834535,\n        },\n        {\n          x: 12952924.669249073,\n          y: 4851516.663157407,\n        },\n        {\n          x: 12952893.865250975,\n          y: 4851558.425931095,\n        },\n        {\n          x: 12952868.114842031,\n          y: 4851601.291024181,\n        },\n        {\n          x: 12952849.72221334,\n          y: 4851633.9557742765,\n        },\n        {\n          x: 12952840.178024879,\n          y: 4851649.33032892,\n        },\n        {\n          x: 12952831.61507648,\n          y: 4851664.098507009,\n        },\n        {\n          x: 12952820.749844346,\n          y: 4851683.626532975,\n        },\n        {\n          x: 12952808.35960638,\n          y: 4851712.713968235,\n        },\n        {\n          x: 12952805.20735029,\n          y: 4851721.38335488,\n        },\n        {\n          x: 12952799.79260895,\n          y: 4851738.36548495,\n        },\n        {\n          x: 12952789.190178515,\n          y: 4851772.8758911565,\n        },\n        {\n          x: 12952788.761437649,\n          y: 4851774.851755323,\n        },\n        {\n          x: 12952777.120529784,\n          y: 4851828.491181396,\n        },\n        {\n          x: 12952769.442166151,\n          y: 4851865.129402015,\n        },\n        {\n          x: 12952767.325349899,\n          y: 4851875.233108534,\n        },\n        {\n          x: 12952767.225566436,\n          y: 4851887.288016115,\n        },\n        {\n          x: 12952766.931015346,\n          y: 4851923.099737246,\n        },\n        {\n          x: 12952761.952007528,\n          y: 4852049.700375895,\n        },\n        {\n          x: 12952753.300309705,\n          y: 4852305.149185844,\n        },\n        {\n          x: 12952748.81253644,\n          y: 4852466.605133841,\n        },\n        {\n          x: 12952741.572670683,\n          y: 4852644.392438163,\n        },\n        {\n          x: 12952738.74974852,\n          y: 4852719.016327442,\n        },\n        {\n          x: 12952741.79628366,\n          y: 4852826.032311127,\n        },\n        {\n          x: 12952754.022033157,\n          y: 4852951.122076449,\n        },\n        {\n          x: 12952755.67102211,\n          y: 4852968.493352729,\n        },\n        {\n          x: 12952758.734429048,\n          y: 4853002.058635834,\n        },\n        {\n          x: 12952761.031034866,\n          y: 4853033.715526356,\n        },\n        {\n          x: 12952761.5816642,\n          y: 4853041.308351835,\n        },\n        {\n          x: 12952765.105510674,\n          y: 4853089.883771956,\n        },\n        {\n          x: 12952768.26850136,\n          y: 4853131.897335772,\n        },\n        {\n          x: 12952769.995078206,\n          y: 4853158.94429872,\n        },\n        {\n          x: 12952770.288851582,\n          y: 4853209.010686412,\n        },\n        {\n          x: 12952769.71843731,\n          y: 4853247.566692912,\n        },\n        {\n          x: 12952767.145004591,\n          y: 4853346.541922129,\n        },\n        {\n          x: 12952765.253378324,\n          y: 4853436.619436339,\n        },\n        {\n          x: 12952765.214083849,\n          y: 4853437.930242571,\n        },\n        {\n          x: 12952764.052342676,\n          y: 4853458.187819974,\n        },\n        {\n          x: 12952760.168979194,\n          y: 4853554.878914973,\n        },\n        {\n          x: 12952757.95248891,\n          y: 4853628.164651818,\n        },\n        {\n          x: 12952754.901710529,\n          y: 4853716.499504081,\n        },\n        {\n          x: 12952752.129394304,\n          y: 4853804.555406498,\n        },\n        {\n          x: 12952749.6335356,\n          y: 4853872.268162026,\n        },\n        {\n          x: 12952743.72513416,\n          y: 4854014.227085098,\n        },\n        {\n          x: 12952741.487142773,\n          y: 4854096.795681505,\n        },\n        {\n          x: 12952740.271323254,\n          y: 4854189.877021544,\n        },\n        {\n          x: 12952735.244090632,\n          y: 4854295.470985418,\n        },\n        {\n          x: 12952732.246698955,\n          y: 4854403.93734809,\n        },\n        {\n          x: 12952731.594985832,\n          y: 4854421.351329048,\n        },\n        {\n          x: 12952728.21683085,\n          y: 4854497.1336529,\n        },\n        {\n          x: 12952727.968463881,\n          y: 4854504.109582829,\n        },\n        {\n          x: 12952726.933201442,\n          y: 4854533.194906944,\n        },\n        {\n          x: 12952726.57184963,\n          y: 4854544.113349503,\n        },\n        {\n          x: 12952721.050076714,\n          y: 4854688.295102883,\n        },\n        {\n          x: 12952720.966294285,\n          y: 4854713.652392979,\n        },\n        {\n          x: 12952718.064468559,\n          y: 4854769.647643217,\n        },\n        {\n          x: 12952715.044363484,\n          y: 4854852.440379618,\n        },\n        {\n          x: 12952709.221122695,\n          y: 4855060.2259299345,\n        },\n        {\n          x: 12952706.836731823,\n          y: 4855138.965809699,\n        },\n        {\n          x: 12952705.041061016,\n          y: 4855185.826583675,\n        },\n        {\n          x: 12952701.912666142,\n          y: 4855297.303072879,\n        },\n        {\n          x: 12952701.774883661,\n          y: 4855301.000993471,\n        },\n        {\n          x: 12952698.542893687,\n          y: 4855388.379772971,\n        },\n        {\n          x: 12952694.722481314,\n          y: 4855513.192139022,\n        },\n        {\n          x: 12952694.351429062,\n          y: 4855527.489094137,\n        },\n        {\n          x: 12952693.024699595,\n          y: 4855578.268289678,\n        },\n        {\n          x: 12952691.583080197,\n          y: 4855615.825893778,\n        },\n        {\n          x: 12952690.241251186,\n          y: 4855663.662486527,\n        },\n        {\n          x: 12952689.665623294,\n          y: 4855679.603567254,\n        },\n        {\n          x: 12952688.776130756,\n          y: 4855688.786687114,\n        },\n        {\n          x: 12952687.754061554,\n          y: 4855729.323832838,\n        },\n        {\n          x: 12952686.019483153,\n          y: 4855798.026277147,\n        },\n        {\n          x: 12952677.323277667,\n          y: 4856106.12994655,\n        },\n        {\n          x: 12952676.787444718,\n          y: 4856125.15381618,\n        },\n        {\n          x: 12952664.53774193,\n          y: 4856474.271753169,\n        },\n        {\n          x: 12952649.541640174,\n          y: 4856902.04310439,\n        },\n        {\n          x: 12952649.394057715,\n          y: 4856906.40602088,\n        },\n        {\n          x: 12952635.915840019,\n          y: 4857296.152572144,\n        },\n        {\n          x: 12952629.098613512,\n          y: 4857468.8577486845,\n        },\n        {\n          x: 12952638.14364149,\n          y: 4857509.197665979,\n        },\n        {\n          x: 12952650.97963757,\n          y: 4857566.931901507,\n        },\n        {\n          x: 12952656.040774604,\n          y: 4857583.179374015,\n        },\n        {\n          x: 12952668.497268757,\n          y: 4857619.1841071565,\n        },\n        {\n          x: 12952685.776569141,\n          y: 4857653.8455795515,\n        },\n        {\n          x: 12952706.290524684,\n          y: 4857693.299857913,\n        },\n        {\n          x: 12952720.33970559,\n          y: 4857717.258845025,\n        },\n        {\n          x: 12952728.768056454,\n          y: 4857729.804878156,\n        },\n        {\n          x: 12952742.39713164,\n          y: 4857747.850560737,\n        },\n        {\n          x: 12952755.039200235,\n          y: 4857761.81094819,\n        },\n        {\n          x: 12952769.509095559,\n          y: 4857774.792433353,\n        },\n        {\n          x: 12952782.996884435,\n          y: 4857785.801023545,\n        },\n        {\n          x: 12952788.77239826,\n          y: 4857789.984151489,\n        },\n        {\n          x: 12952798.589047497,\n          y: 4857797.094653569,\n        },\n        {\n          x: 12952808.39067999,\n          y: 4857802.308737876,\n        },\n        {\n          x: 12952837.452516967,\n          y: 4857817.2604270065,\n        },\n        {\n          x: 12952881.01716795,\n          y: 4857832.991883696,\n        },\n        {\n          x: 12952938.897575248,\n          y: 4857852.0831211675,\n        },\n        {\n          x: 12952998.780647367,\n          y: 4857874.054135021,\n        },\n        {\n          x: 12953258.491335763,\n          y: 4857983.238622202,\n        },\n        {\n          x: 12953413.859664995,\n          y: 4858039.332894681,\n        },\n        {\n          x: 12953461.589598283,\n          y: 4858056.89652088,\n        },\n        {\n          x: 12953597.722309152,\n          y: 4858106.241247336,\n        },\n        {\n          x: 12953667.79405445,\n          y: 4858131.433108243,\n        },\n        {\n          x: 12953748.275540665,\n          y: 4858167.149194927,\n        },\n        {\n          x: 12953812.476893716,\n          y: 4858200.790776387,\n        },\n        {\n          x: 12954043.962199515,\n          y: 4858326.647837333,\n        },\n        {\n          x: 12954069.141445398,\n          y: 4858340.297104379,\n        },\n        {\n          x: 12954072.957342735,\n          y: 4858342.340504059,\n        },\n        {\n          x: 12954114.16432913,\n          y: 4858364.427001315,\n        },\n        {\n          x: 12954137.618859049,\n          y: 4858375.535725627,\n        },\n        {\n          x: 12954295.058541333,\n          y: 4858440.811649338,\n        },\n        {\n          x: 12954302.457537467,\n          y: 4858443.441923854,\n        },\n        {\n          x: 12954310.15020407,\n          y: 4858445.926167106,\n        },\n        {\n          x: 12954332.638227137,\n          y: 4858452.508316665,\n        },\n        {\n          x: 12954353.823772585,\n          y: 4858458.21648571,\n        },\n        {\n          x: 12954389.227238271,\n          y: 4858467.144308251,\n        },\n        {\n          x: 12954466.181852238,\n          y: 4858479.982544497,\n        },\n        {\n          x: 12954466.70470393,\n          y: 4858480.069293314,\n        },\n        {\n          x: 12954681.711705219,\n          y: 4858497.4227523925,\n        },\n        {\n          x: 12954881.814571371,\n          y: 4858508.773537354,\n        },\n        {\n          x: 12954977.646000914,\n          y: 4858510.359249282,\n        },\n        {\n          x: 12955052.400974875,\n          y: 4858511.444873559,\n        },\n        {\n          x: 12955252.256507836,\n          y: 4858514.336868981,\n        },\n        {\n          x: 12955253.967495963,\n          y: 4858514.361726689,\n        },\n        {\n          x: 12955289.19954713,\n          y: 4858514.5128645515,\n        },\n        {\n          x: 12955354.90360536,\n          y: 4858516.033826125,\n        },\n        {\n          x: 12955355.483066956,\n          y: 4858516.047198033,\n        },\n      ],\n    },\n    {\n      id: \"1\",\n      source: \"2\",\n      target: \"3\",\n      class: \"地铁五号线\",\n      name: \"地铁五号线 0\",\n      controlPoints: [\n        {\n          x: 12960720.74502968,\n          y: 4843624.831892422,\n        },\n        {\n          x: 12960633.531054523,\n          y: 4843628.020999428,\n        },\n        {\n          x: 12960615.721414793,\n          y: 4843628.698697272,\n        },\n        {\n          x: 12960529.018550536,\n          y: 4843631.993865521,\n        },\n        {\n          x: 12960395.923003213,\n          y: 4843634.498433887,\n        },\n        {\n          x: 12960303.4487313,\n          y: 4843658.086022387,\n        },\n        {\n          x: 12960247.83253429,\n          y: 4843698.236051296,\n        },\n        {\n          x: 12960198.244516307,\n          y: 4843756.513927734,\n        },\n        {\n          x: 12960152.936239943,\n          y: 4843826.831983379,\n        },\n        {\n          x: 12960093.80567492,\n          y: 4844050.470482044,\n        },\n        {\n          x: 12960074.685721893,\n          y: 4844241.260554531,\n        },\n        {\n          x: 12960067.43941915,\n          y: 4844443.961097181,\n        },\n        {\n          x: 12960064.463686703,\n          y: 4844812.802009133,\n        },\n        {\n          x: 12960051.958804457,\n          y: 4845167.465485617,\n        },\n        {\n          x: 12960045.686471423,\n          y: 4845319.993679029,\n        },\n        {\n          x: 12960040.290314263,\n          y: 4845427.501735388,\n        },\n        {\n          x: 12960000.078505961,\n          y: 4846409.670004274,\n        },\n        {\n          x: 12959967.360368509,\n          y: 4847353.92871215,\n        },\n        {\n          x: 12959903.599435318,\n          y: 4849086.018465949,\n        },\n        {\n          x: 12959897.308980407,\n          y: 4849189.719214646,\n        },\n        {\n          x: 12959894.110421222,\n          y: 4849203.583410498,\n        },\n        {\n          x: 12959890.4317169,\n          y: 4849219.531068828,\n        },\n        {\n          x: 12959886.89822709,\n          y: 4849232.656139195,\n        },\n        {\n          x: 12959877.73105254,\n          y: 4849260.436420323,\n        },\n        {\n          x: 12959865.561524102,\n          y: 4849290.043697017,\n        },\n        {\n          x: 12959837.38401807,\n          y: 4849362.616048384,\n        },\n        {\n          x: 12959808.903257467,\n          y: 4849435.004427626,\n        },\n        {\n          x: 12959779.115515891,\n          y: 4849512.45632027,\n        },\n        {\n          x: 12959744.160038425,\n          y: 4849599.294323696,\n        },\n        {\n          x: 12959725.117032269,\n          y: 4849657.80245415,\n        },\n        {\n          x: 12959719.313276159,\n          y: 4849682.1804609,\n        },\n        {\n          x: 12959715.446228703,\n          y: 4849703.304149181,\n        },\n        {\n          x: 12959711.903727653,\n          y: 4849724.430177948,\n        },\n        {\n          x: 12959709.011729391,\n          y: 4849753.676989364,\n        },\n        {\n          x: 12959707.415947258,\n          y: 4849783.8967948,\n        },\n        {\n          x: 12959706.932266207,\n          y: 4849809.126489505,\n        },\n        {\n          x: 12959706.941864654,\n          y: 4849836.458652587,\n        },\n        {\n          x: 12959706.941864647,\n          y: 4849836.458852586,\n        },\n        {\n          x: 12959706.73825638,\n          y: 4849843.058438657,\n        },\n        {\n          x: 12959701.188848983,\n          y: 4850022.751749156,\n        },\n        {\n          x: 12959698.75643586,\n          y: 4850092.048955763,\n        },\n        {\n          x: 12959696.677162938,\n          y: 4850153.857703244,\n        },\n        {\n          x: 12959695.78056296,\n          y: 4850188.632551699,\n        },\n        {\n          x: 12959694.918345,\n          y: 4850201.721921542,\n        },\n        {\n          x: 12959692.002134146,\n          y: 4850243.844071576,\n        },\n        {\n          x: 12959688.713196509,\n          y: 4850307.368296433,\n        },\n        {\n          x: 12959688.399038235,\n          y: 4850412.527108991,\n        },\n        {\n          x: 12959688.405735636,\n          y: 4850420.937318844,\n        },\n        {\n          x: 12959688.343863737,\n          y: 4850445.110083258,\n        },\n        {\n          x: 12959686.127736844,\n          y: 4850539.017117742,\n        },\n        {\n          x: 12959683.968880652,\n          y: 4850587.739754507,\n        },\n        {\n          x: 12959680.875828847,\n          y: 4850658.134830053,\n        },\n        {\n          x: 12959679.529814905,\n          y: 4850705.839287117,\n        },\n        {\n          x: 12959676.829087818,\n          y: 4850793.495084584,\n        },\n        {\n          x: 12959675.815426968,\n          y: 4850823.398964908,\n        },\n        {\n          x: 12959675.182101322,\n          y: 4850846.066167584,\n        },\n        {\n          x: 12959674.637837825,\n          y: 4850881.825140678,\n        },\n        {\n          x: 12959674.600854788,\n          y: 4850900.231972202,\n        },\n        {\n          x: 12959672.17730142,\n          y: 4850971.880703524,\n        },\n        {\n          x: 12959670.889156122,\n          y: 4851002.727395804,\n        },\n        {\n          x: 12959670.698638307,\n          y: 4851010.549985337,\n        },\n        {\n          x: 12959668.117749112,\n          y: 4851106.755282467,\n        },\n        {\n          x: 12959665.56854209,\n          y: 4851184.430341829,\n        },\n        {\n          x: 12959663.290916206,\n          y: 4851257.106068522,\n        },\n        {\n          x: 12959662.369610716,\n          y: 4851304.277585146,\n        },\n        {\n          x: 12959661.413917739,\n          y: 4851326.766808909,\n        },\n        {\n          x: 12959657.931598857,\n          y: 4851433.829044472,\n        },\n        {\n          x: 12959658.028261015,\n          y: 4851474.80850299,\n        },\n        {\n          x: 12959657.267483199,\n          y: 4851488.965234568,\n        },\n        {\n          x: 12959651.951822918,\n          y: 4851544.541841047,\n        },\n        {\n          x: 12959644.793413645,\n          y: 4851583.581423427,\n        },\n        {\n          x: 12959595.684288755,\n          y: 4852619.8846618915,\n        },\n        {\n          x: 12959574.465131808,\n          y: 4853929.7776421,\n        },\n        {\n          x: 12959536.880014552,\n          y: 4854963.031257658,\n        },\n        {\n          x: 12959497.404227743,\n          y: 4856298.871464132,\n        },\n        {\n          x: 12959482.020338908,\n          y: 4856720.60653976,\n        },\n        {\n          x: 12959481.210910158,\n          y: 4856745.719910398,\n        },\n        {\n          x: 12959480.218744718,\n          y: 4856801.67083334,\n        },\n        {\n          x: 12959480.657100372,\n          y: 4856811.732979886,\n        },\n        {\n          x: 12959473.537570594,\n          y: 4857026.976625398,\n        },\n        {\n          x: 12959472.67316361,\n          y: 4857117.529377648,\n        },\n        {\n          x: 12959471.826244202,\n          y: 4857148.4116494795,\n        },\n        {\n          x: 12959471.914116398,\n          y: 4857157.0041156085,\n        },\n        {\n          x: 12959471.914116394,\n          y: 4857157.004315607,\n        },\n        {\n          x: 12959468.421265613,\n          y: 4857243.442849801,\n        },\n        {\n          x: 12959465.42503048,\n          y: 4857320.248131243,\n        },\n        {\n          x: 12959457.359831337,\n          y: 4857487.904976163,\n        },\n        {\n          x: 12959441.732397161,\n          y: 4858203.22983063,\n        },\n        {\n          x: 12959436.13624882,\n          y: 4858459.380345282,\n        },\n        {\n          x: 12959415.193417262,\n          y: 4858615.8007214,\n        },\n        {\n          x: 12959400.093169626,\n          y: 4858713.511716538,\n        },\n        {\n          x: 12959399.09985982,\n          y: 4858740.126114421,\n        },\n        {\n          x: 12959398.923112214,\n          y: 4858756.581567208,\n        },\n        {\n          x: 12959400.425177053,\n          y: 4858770.664816282,\n        },\n        {\n          x: 12959403.329731172,\n          y: 4858781.277141151,\n        },\n        {\n          x: 12959406.81271103,\n          y: 4858791.891385901,\n        },\n        {\n          x: 12959411.454041706,\n          y: 4858801.77406984,\n        },\n        {\n          x: 12959416.960302725,\n          y: 4858809.912175236,\n        },\n        {\n          x: 12959421.887523,\n          y: 4858817.179145314,\n        },\n        {\n          x: 12959428.263989503,\n          y: 4858824.297946437,\n        },\n        {\n          x: 12959438.405571558,\n          y: 4858834.467323184,\n        },\n        {\n          x: 12959446.951603249,\n          y: 4858840.418765018,\n        },\n        {\n          x: 12959453.47044277,\n          y: 4858844.047635263,\n        },\n        {\n          x: 12959461.338227013,\n          y: 4858847.889734993,\n        },\n        {\n          x: 12959468.530699532,\n          y: 4858850.719229388,\n        },\n        {\n          x: 12959476.367733365,\n          y: 4858853.206677165,\n        },\n        {\n          x: 12959486.177776907,\n          y: 4858855.242211642,\n        },\n        {\n          x: 12959498.356965585,\n          y: 4858856.501662772,\n        },\n        {\n          x: 12959543.238861157,\n          y: 4858861.103129856,\n        },\n        {\n          x: 12959564.955544673,\n          y: 4858862.823145494,\n        },\n        {\n          x: 12959585.658078235,\n          y: 4858864.541516278,\n        },\n        {\n          x: 12959595.839429364,\n          y: 4858866.740035375,\n        },\n        {\n          x: 12959604.626178885,\n          y: 4858869.753969439,\n        },\n        {\n          x: 12959619.393890884,\n          y: 4858875.118084437,\n        },\n        {\n          x: 12959634.602011,\n          y: 4858883.533997516,\n        },\n        {\n          x: 12959647.926199682,\n          y: 4858893.114601357,\n        },\n        {\n          x: 12959659.08101609,\n          y: 4858903.862660445,\n        },\n        {\n          x: 12959672.122859873,\n          y: 4858920.571917142,\n        },\n        {\n          x: 12959683.284136135,\n          y: 4858939.464230514,\n        },\n        {\n          x: 12959691.987331163,\n          y: 4858961.4122961955,\n        },\n        {\n          x: 12959695.907905033,\n          y: 4858977.986510597,\n        },\n        {\n          x: 12959696.897168944,\n          y: 4858990.458458495,\n        },\n        {\n          x: 12959696.95704519,\n          y: 4859022.197030113,\n        },\n        {\n          x: 12959693.756261105,\n          y: 4859059.590188502,\n        },\n        {\n          x: 12959690.179340184,\n          y: 4859134.214310129,\n        },\n        {\n          x: 12959685.340567466,\n          y: 4859249.237691335,\n        },\n        {\n          x: 12959685.339668898,\n          y: 4859260.445091072,\n        },\n        {\n          x: 12959679.606577044,\n          y: 4859423.720155937,\n        },\n        {\n          x: 12959665.286089724,\n          y: 4859737.709063406,\n        },\n        {\n          x: 12959643.000270054,\n          y: 4860035.900026235,\n        },\n        {\n          x: 12959632.910441214,\n          y: 4860295.517810925,\n        },\n        {\n          x: 12959592.233549183,\n          y: 4861342.088331037,\n        },\n        {\n          x: 12959588.730015729,\n          y: 4861432.225749819,\n        },\n        {\n          x: 12959556.060278306,\n          y: 4862388.960503767,\n        },\n        {\n          x: 12959545.695101015,\n          y: 4862688.364754779,\n        },\n        {\n          x: 12959518.592346862,\n          y: 4863435.743969738,\n        },\n        {\n          x: 12959485.60762339,\n          y: 4864345.2318098685,\n        },\n        {\n          x: 12959486.001310887,\n          y: 4864482.759632916,\n        },\n        {\n          x: 12959486.585650299,\n          y: 4865230.9384146165,\n        },\n        {\n          x: 12959489.44520427,\n          y: 4865436.730097548,\n        },\n        {\n          x: 12959497.988421464,\n          y: 4865529.704413291,\n        },\n        {\n          x: 12959497.988421455,\n          y: 4865529.704613299,\n        },\n        {\n          x: 12959519.200702442,\n          y: 4865741.969269226,\n        },\n        {\n          x: 12959522.357194034,\n          y: 4865776.148131042,\n        },\n        {\n          x: 12959522.573317947,\n          y: 4865778.504652967,\n        },\n        {\n          x: 12959522.916097239,\n          y: 4865782.246629099,\n        },\n        {\n          x: 12959551.022895565,\n          y: 4866071.32380023,\n        },\n        {\n          x: 12959556.838158142,\n          y: 4866160.7037429465,\n        },\n        {\n          x: 12959551.949571997,\n          y: 4866262.940886653,\n        },\n        {\n          x: 12959540.38150212,\n          y: 4866354.7103297105,\n        },\n        {\n          x: 12959539.340979226,\n          y: 4866362.459925865,\n        },\n        {\n          x: 12959513.475078186,\n          y: 4866576.75533692,\n        },\n        {\n          x: 12959513.47507818,\n          y: 4866576.755436918,\n        },\n        {\n          x: 12959497.755400725,\n          y: 4866692.268572319,\n        },\n        {\n          x: 12959497.610949984,\n          y: 4866693.40672459,\n        },\n        {\n          x: 12959483.493606979,\n          y: 4866796.261737931,\n        },\n        {\n          x: 12959466.691132883,\n          y: 4866917.22829191,\n        },\n        {\n          x: 12959461.210504338,\n          y: 4866960.1057711635,\n        },\n        {\n          x: 12959426.407796139,\n          y: 4867225.807957604,\n        },\n        {\n          x: 12959418.801394718,\n          y: 4867288.213382227,\n        },\n        {\n          x: 12959416.692326868,\n          y: 4867306.0886218455,\n        },\n        {\n          x: 12959410.47637647,\n          y: 4867351.37610048,\n        },\n        {\n          x: 12959400.148907803,\n          y: 4867462.455263302,\n        },\n        {\n          x: 12959399.112409318,\n          y: 4867478.93856583,\n        },\n        {\n          x: 12959396.256439034,\n          y: 4867556.841285077,\n        },\n        {\n          x: 12959394.84524912,\n          y: 4867623.882782224,\n        },\n        {\n          x: 12959402.914618,\n          y: 4867739.272140503,\n        },\n        {\n          x: 12959407.505976537,\n          y: 4867797.003244392,\n        },\n        {\n          x: 12959415.808022052,\n          y: 4867872.177101691,\n        },\n        {\n          x: 12959437.831136882,\n          y: 4868003.5787004335,\n        },\n        {\n          x: 12959443.098101616,\n          y: 4868036.394816039,\n        },\n        {\n          x: 12959464.101440175,\n          y: 4868167.242968876,\n        },\n        {\n          x: 12959478.37498549,\n          y: 4868261.98680037,\n        },\n        {\n          x: 12959508.23051181,\n          y: 4868432.816097544,\n        },\n        {\n          x: 12959539.922123043,\n          y: 4868629.3165109595,\n        },\n        {\n          x: 12959551.24160535,\n          y: 4868728.22086592,\n        },\n        {\n          x: 12959555.049512597,\n          y: 4868834.379861189,\n        },\n        {\n          x: 12959557.09776522,\n          y: 4869178.128956159,\n        },\n        {\n          x: 12959557.46233141,\n          y: 4869212.439258056,\n        },\n        {\n          x: 12959560.523011155,\n          y: 4869592.048363338,\n        },\n        {\n          x: 12959577.865984676,\n          y: 4869718.394291774,\n        },\n        {\n          x: 12959590.012423703,\n          y: 4869827.204686913,\n        },\n        {\n          x: 12959595.795077762,\n          y: 4869869.18333726,\n        },\n        {\n          x: 12959598.248023918,\n          y: 4869952.360503471,\n        },\n        {\n          x: 12959599.56821579,\n          y: 4870095.040123146,\n        },\n        {\n          x: 12959609.728836436,\n          y: 4870531.437161518,\n        },\n        {\n          x: 12959603.972221585,\n          y: 4870603.500963714,\n        },\n        {\n          x: 12959588.040449219,\n          y: 4870699.62726807,\n        },\n        {\n          x: 12959577.341958042,\n          y: 4870759.729165575,\n        },\n        {\n          x: 12959552.550153958,\n          y: 4870890.017106278,\n        },\n        {\n          x: 12959549.504474476,\n          y: 4870907.895185102,\n        },\n        {\n          x: 12959536.238199469,\n          y: 4870980.633462292,\n        },\n        {\n          x: 12959519.906514881,\n          y: 4871059.136581221,\n        },\n        {\n          x: 12959498.606091205,\n          y: 4871123.470002014,\n        },\n        {\n          x: 12959483.02793797,\n          y: 4871158.4458806105,\n        },\n        {\n          x: 12959398.579719294,\n          y: 4871307.904408066,\n        },\n        {\n          x: 12959372.473708287,\n          y: 4871364.923557604,\n        },\n        {\n          x: 12959355.676189639,\n          y: 4871417.85108307,\n        },\n        {\n          x: 12959345.382419249,\n          y: 4871467.110988155,\n        },\n        {\n          x: 12959337.246138988,\n          y: 4871518.719362454,\n        },\n        {\n          x: 12959331.993689496,\n          y: 4871552.047085774,\n        },\n        {\n          x: 12959329.720869558,\n          y: 4871566.954753559,\n        },\n        {\n          x: 12959309.401737848,\n          y: 4871682.640660545,\n        },\n        {\n          x: 12959284.09575571,\n          y: 4871813.104051212,\n        },\n        {\n          x: 12959272.141485408,\n          y: 4871880.577467433,\n        },\n        {\n          x: 12959212.679174809,\n          y: 4872024.938082188,\n        },\n        {\n          x: 12959122.218527583,\n          y: 4872236.515550644,\n        },\n        {\n          x: 12959101.497205438,\n          y: 4872286.842893077,\n        },\n        {\n          x: 12959082.233978389,\n          y: 4872332.857224708,\n        },\n        {\n          x: 12959064.438388105,\n          y: 4872374.568487362,\n        },\n        {\n          x: 12959002.833097033,\n          y: 4872476.910775585,\n        },\n        {\n          x: 12958978.720982237,\n          y: 4872510.998020613,\n        },\n        {\n          x: 12958934.40716439,\n          y: 4872572.781793622,\n        },\n        {\n          x: 12958888.474905616,\n          y: 4872641.302003023,\n        },\n        {\n          x: 12958847.253143456,\n          y: 4872732.877987774,\n        },\n        {\n          x: 12958840.613299651,\n          y: 4872775.301160091,\n        },\n        {\n          x: 12958826.01344493,\n          y: 4872861.8293480575,\n        },\n        {\n          x: 12958817.526527362,\n          y: 4873017.26494393,\n        },\n        {\n          x: 12958814.054718142,\n          y: 4873226.284171534,\n        },\n        {\n          x: 12958816.11193364,\n          y: 4873266.055943593,\n        },\n        {\n          x: 12958816.129135203,\n          y: 4873290.15488096,\n        },\n        {\n          x: 12958821.354560152,\n          y: 4873309.887136759,\n        },\n        {\n          x: 12958841.32562995,\n          y: 4873397.115248937,\n        },\n        {\n          x: 12958844.285408415,\n          y: 4873409.713148855,\n        },\n        {\n          x: 12958847.915875804,\n          y: 4873422.442037873,\n        },\n        {\n          x: 12958889.630321097,\n          y: 4873507.434415227,\n        },\n        {\n          x: 12958925.449787276,\n          y: 4873574.258471447,\n        },\n        {\n          x: 12959052.396737209,\n          y: 4873809.916450764,\n        },\n        {\n          x: 12959072.334776778,\n          y: 4873851.7039971035,\n        },\n        {\n          x: 12959091.382334014,\n          y: 4873912.579314463,\n        },\n        {\n          x: 12959103.205925986,\n          y: 4873994.365655067,\n        },\n        {\n          x: 12959105.049669469,\n          y: 4874040.715385412,\n        },\n        {\n          x: 12959098.781538986,\n          y: 4874130.696496499,\n        },\n        {\n          x: 12959091.653604891,\n          y: 4874277.942229356,\n        },\n        {\n          x: 12959073.762015432,\n          y: 4874560.621555201,\n        },\n        {\n          x: 12959055.88026487,\n          y: 4874851.491609374,\n        },\n        {\n          x: 12959035.313639542,\n          y: 4875190.5466335295,\n        },\n        {\n          x: 12959020.984397592,\n          y: 4875394.165125814,\n        },\n        {\n          x: 12958976.23099209,\n          y: 4876077.778969328,\n        },\n        {\n          x: 12958959.745692749,\n          y: 4876337.611516656,\n        },\n        {\n          x: 12958959.782791425,\n          y: 4876388.517880667,\n        },\n        {\n          x: 12958963.47494545,\n          y: 4876487.604684548,\n        },\n        {\n          x: 12958978.051701134,\n          y: 4876614.863733437,\n        },\n        {\n          x: 12959002.615098093,\n          y: 4876782.118274665,\n        },\n        {\n          x: 12959044.457185756,\n          y: 4877060.270620597,\n        },\n        {\n          x: 12959067.219679391,\n          y: 4877241.168949157,\n        },\n        {\n          x: 12959071.783226173,\n          y: 4877290.243072816,\n        },\n        {\n          x: 12959070.11534219,\n          y: 4877482.0814475445,\n        },\n        {\n          x: 12959050.419169253,\n          y: 4877777.579645479,\n        },\n        {\n          x: 12959032.750496056,\n          y: 4878102.221159315,\n        },\n        {\n          x: 12959032.750496058,\n          y: 4878102.221259315,\n        },\n        {\n          x: 12959003.26866052,\n          y: 4878470.802548815,\n        },\n        {\n          x: 12959000.418311324,\n          y: 4878535.557270987,\n        },\n        {\n          x: 12958996.46075172,\n          y: 4878573.393290567,\n        },\n        {\n          x: 12958986.710555336,\n          y: 4878612.325690378,\n        },\n        {\n          x: 12958984.36114175,\n          y: 4878620.285756933,\n        },\n        {\n          x: 12958979.482719835,\n          y: 4878633.567604723,\n        },\n        {\n          x: 12958971.70519758,\n          y: 4878648.669953857,\n        },\n        {\n          x: 12958960.310788708,\n          y: 4878668.732809022,\n        },\n        {\n          x: 12958954.159688484,\n          y: 4878678.6962916935,\n        },\n        {\n          x: 12958940.408512954,\n          y: 4878697.079788669,\n        },\n        {\n          x: 12958920.863620294,\n          y: 4878718.556967109,\n        },\n        {\n          x: 12958911.0902516,\n          y: 4878726.568490176,\n        },\n        {\n          x: 12958895.161451222,\n          y: 4878738.950175331,\n        },\n        {\n          x: 12958883.032721909,\n          y: 4878747.3254355155,\n        },\n        {\n          x: 12958866.73870309,\n          y: 4878756.433205192,\n        },\n        {\n          x: 12958839.217742998,\n          y: 4878769.914421513,\n        },\n        {\n          x: 12958816.400635526,\n          y: 4878777.388295637,\n        },\n        {\n          x: 12958783.623366289,\n          y: 4878784.917193882,\n        },\n        {\n          x: 12958771.309150409,\n          y: 4878786.744063957,\n        },\n        {\n          x: 12958739.429878792,\n          y: 4878788.584452175,\n        },\n        {\n          x: 12958705.738986243,\n          y: 4878786.424910058,\n        },\n        {\n          x: 12958578.932445105,\n          y: 4878772.682927707,\n        },\n        {\n          x: 12958490.16318142,\n          y: 4878762.546866739,\n        },\n        {\n          x: 12958476.030639933,\n          y: 4878759.645153562,\n        },\n        {\n          x: 12958398.482079366,\n          y: 4878738.585155731,\n        },\n        {\n          x: 12958337.60009126,\n          y: 4878723.697450009,\n        },\n        {\n          x: 12958319.258018306,\n          y: 4878717.823743411,\n        },\n        {\n          x: 12958285.414545368,\n          y: 4878706.985809459,\n        },\n        {\n          x: 12958281.24441303,\n          y: 4878706.124142206,\n        },\n        {\n          x: 12958265.300704759,\n          y: 4878704.674592208,\n        },\n        {\n          x: 12958248.322873216,\n          y: 4878700.7330124155,\n        },\n        {\n          x: 12958235.48402549,\n          y: 4878697.874149074,\n        },\n        {\n          x: 12958209.66504376,\n          y: 4878694.661718712,\n        },\n        {\n          x: 12958185.394430613,\n          y: 4878692.518259022,\n        },\n        {\n          x: 12958163.832025072,\n          y: 4878687.433936088,\n        },\n        {\n          x: 12958149.29817478,\n          y: 4878683.5722363135,\n        },\n        {\n          x: 12958127.588537483,\n          y: 4878677.8039692715,\n        },\n        {\n          x: 12958103.488411777,\n          y: 4878671.445979302,\n        },\n        {\n          x: 12958088.084013943,\n          y: 4878666.72080967,\n        },\n        {\n          x: 12958073.22210372,\n          y: 4878661.450932288,\n        },\n        {\n          x: 12958053.105073934,\n          y: 4878653.090874466,\n        },\n        {\n          x: 12958019.939165607,\n          y: 4878639.8218743205,\n        },\n        {\n          x: 12957987.498125235,\n          y: 4878626.005036278,\n        },\n        {\n          x: 12957976.804148829,\n          y: 4878622.369122046,\n        },\n        {\n          x: 12957959.95128188,\n          y: 4878618.734327142,\n        },\n        {\n          x: 12957933.674733272,\n          y: 4878614.921507571,\n        },\n      ],\n    },\n    {\n      id: \"2\",\n      source: \"4\",\n      target: \"5\",\n      class: \"地铁房山线\",\n      name: \"地铁房山线 0\",\n      controlPoints: [\n        {\n          x: 12924448.17238817,\n          y: 4826880.333482542,\n        },\n        {\n          x: 12924525.979211709,\n          y: 4826872.878344628,\n        },\n        {\n          x: 12924651.003975658,\n          y: 4826850.186382258,\n        },\n        {\n          x: 12924772.909010362,\n          y: 4826831.637862584,\n        },\n        {\n          x: 12924892.815210382,\n          y: 4826808.910764785,\n        },\n        {\n          x: 12924979.825081667,\n          y: 4826797.17955122,\n        },\n        {\n          x: 12925084.39744784,\n          y: 4826783.365645579,\n        },\n        {\n          x: 12925155.81120956,\n          y: 4826773.302022665,\n        },\n        {\n          x: 12925191.531802883,\n          y: 4826763.145386636,\n        },\n        {\n          x: 12925246.401130036,\n          y: 4826741.508641205,\n        },\n        {\n          x: 12925289.809143692,\n          y: 4826716.000219138,\n        },\n        {\n          x: 12925328.122217724,\n          y: 4826687.913828323,\n        },\n        {\n          x: 12925435.446934095,\n          y: 4826589.547291209,\n        },\n        {\n          x: 12925667.935929714,\n          y: 4826383.866700324,\n        },\n        {\n          x: 12925703.114335984,\n          y: 4826349.828286723,\n        },\n        {\n          x: 12925770.622207448,\n          y: 4826279.8993723765,\n        },\n        {\n          x: 12925812.089063462,\n          y: 4826236.363691168,\n        },\n        {\n          x: 12925860.064926796,\n          y: 4826185.624213163,\n        },\n        {\n          x: 12925972.45908047,\n          y: 4826067.695006573,\n        },\n        {\n          x: 12926072.836947165,\n          y: 4825968.627523454,\n        },\n        {\n          x: 12926117.70970191,\n          y: 4825926.122953221,\n        },\n        {\n          x: 12926163.925422803,\n          y: 4825891.864408059,\n        },\n        {\n          x: 12926224.487089904,\n          y: 4825859.005237854,\n        },\n        {\n          x: 12926272.713245494,\n          y: 4825838.833351052,\n        },\n        {\n          x: 12926306.225330409,\n          y: 4825828.247220456,\n        },\n        {\n          x: 12926323.66112753,\n          y: 4825823.471552652,\n        },\n        {\n          x: 12926342.999038229,\n          y: 4825815.638790402,\n        },\n        {\n          x: 12926395.038321048,\n          y: 4825807.019948717,\n        },\n        {\n          x: 12926456.619666297,\n          y: 4825801.386693386,\n        },\n        {\n          x: 12926771.931888463,\n          y: 4825802.616129439,\n        },\n        {\n          x: 12926851.048048986,\n          y: 4825801.631130125,\n        },\n        {\n          x: 12926918.475671358,\n          y: 4825800.789146462,\n        },\n        {\n          x: 12927029.359667536,\n          y: 4825801.827672996,\n        },\n        {\n          x: 12927182.830807276,\n          y: 4825803.048420769,\n        },\n        {\n          x: 12927499.41885292,\n          y: 4825801.064920832,\n        },\n        {\n          x: 12927985.316114604,\n          y: 4825802.302803997,\n        },\n        {\n          x: 12928151.253302878,\n          y: 4825800.059199896,\n        },\n        {\n          x: 12928748.07329185,\n          y: 4825800.240476295,\n        },\n        {\n          x: 12929111.030443402,\n          y: 4825800.274953787,\n        },\n        {\n          x: 12929262.734959431,\n          y: 4825802.042122076,\n        },\n        {\n          x: 12929411.395781256,\n          y: 4825802.035455338,\n        },\n        {\n          x: 12929506.992909838,\n          y: 4825802.706934221,\n        },\n        {\n          x: 12929650.07556503,\n          y: 4825802.544157764,\n        },\n        {\n          x: 12929720.668591391,\n          y: 4825802.142241587,\n        },\n        {\n          x: 12929772.983434387,\n          y: 4825800.887369454,\n        },\n        {\n          x: 12929857.446321096,\n          y: 4825798.160825567,\n        },\n        {\n          x: 12929912.070413183,\n          y: 4825797.961849597,\n        },\n        {\n          x: 12930020.049115648,\n          y: 4825798.40702736,\n        },\n        {\n          x: 12930163.955832295,\n          y: 4825797.372447041,\n        },\n        {\n          x: 12930397.554672962,\n          y: 4825796.54976334,\n        },\n        {\n          x: 12930475.738706259,\n          y: 4825796.886377486,\n        },\n        {\n          x: 12930546.696718559,\n          y: 4825797.190814849,\n        },\n        {\n          x: 12930678.19064345,\n          y: 4825796.767765474,\n        },\n        {\n          x: 12930758.84637836,\n          y: 4825797.611875748,\n        },\n        {\n          x: 12930844.12941692,\n          y: 4825797.184218957,\n        },\n        {\n          x: 12931658.797219362,\n          y: 4825797.407901417,\n        },\n        {\n          x: 12932033.235206187,\n          y: 4825795.320207194,\n        },\n        {\n          x: 12932233.393439343,\n          y: 4825794.180152587,\n        },\n        {\n          x: 12932721.308799969,\n          y: 4825803.219910631,\n        },\n        {\n          x: 12932928.523249036,\n          y: 4825803.557711617,\n        },\n        {\n          x: 12933053.790329,\n          y: 4825812.987185039,\n        },\n        {\n          x: 12933138.900921563,\n          y: 4825833.806609662,\n        },\n        {\n          x: 12933190.809829095,\n          y: 4825856.349271142,\n        },\n        {\n          x: 12933226.429307265,\n          y: 4825874.795930243,\n        },\n        {\n          x: 12933272.213535246,\n          y: 4825905.5475769965,\n        },\n        {\n          x: 12933330.19116232,\n          y: 4825952.706628941,\n        },\n        {\n          x: 12933394.224417783,\n          y: 4826031.661583878,\n        },\n        {\n          x: 12933434.848204572,\n          y: 4826099.343443693,\n        },\n        {\n          x: 12933457.160278024,\n          y: 4826153.699179631,\n        },\n        {\n          x: 12933477.393874265,\n          y: 4826231.651463547,\n        },\n        {\n          x: 12933483.411973838,\n          y: 4826283.965274176,\n        },\n        {\n          x: 12933484.24966211,\n          y: 4826383.467920047,\n        },\n        {\n          x: 12933484.612918697,\n          y: 4826744.564537366,\n        },\n        {\n          x: 12933484.578816487,\n          y: 4826763.36453251,\n        },\n        {\n          x: 12933483.779386565,\n          y: 4826924.895615106,\n        },\n        {\n          x: 12933482.610669505,\n          y: 4827007.992815708,\n        },\n        {\n          x: 12933492.646572754,\n          y: 4827092.110644749,\n        },\n        {\n          x: 12933513.41196703,\n          y: 4827439.884337276,\n        },\n        {\n          x: 12933543.228519833,\n          y: 4827854.75280781,\n        },\n        {\n          x: 12933566.570100563,\n          y: 4828176.552121379,\n        },\n        {\n          x: 12933594.643939137,\n          y: 4828596.572517603,\n        },\n        {\n          x: 12933629.925192222,\n          y: 4829103.087824667,\n        },\n        {\n          x: 12933645.64381434,\n          y: 4829320.597027384,\n        },\n        {\n          x: 12933649.89045366,\n          y: 4829382.144115338,\n        },\n        {\n          x: 12933667.168927083,\n          y: 4829632.556420974,\n        },\n        {\n          x: 12933676.117122944,\n          y: 4829774.023766041,\n        },\n        {\n          x: 12933682.081289982,\n          y: 4829869.157117123,\n        },\n        {\n          x: 12933689.928693485,\n          y: 4829940.817807672,\n        },\n        {\n          x: 12933703.310192509,\n          y: 4830006.297419812,\n        },\n        {\n          x: 12933719.154849395,\n          y: 4830066.214843579,\n        },\n        {\n          x: 12933755.774424188,\n          y: 4830174.310550475,\n        },\n        {\n          x: 12933810.744445253,\n          y: 4830313.90749861,\n        },\n        {\n          x: 12933922.503728205,\n          y: 4830609.788269573,\n        },\n        {\n          x: 12934038.543576436,\n          y: 4830918.028547641,\n        },\n        {\n          x: 12934058.694520555,\n          y: 4830974.859139696,\n        },\n        {\n          x: 12934069.58014834,\n          y: 4831005.072471465,\n        },\n        {\n          x: 12934119.846976575,\n          y: 4831143.433958218,\n        },\n        {\n          x: 12934149.991077174,\n          y: 4831222.949836257,\n        },\n        {\n          x: 12934198.033104936,\n          y: 4831349.678156342,\n        },\n        {\n          x: 12934223.473509623,\n          y: 4831400.412253144,\n        },\n        {\n          x: 12934259.369952803,\n          y: 4831461.028016709,\n        },\n        {\n          x: 12934309.114426302,\n          y: 4831520.072779361,\n        },\n        {\n          x: 12934377.085065225,\n          y: 4831581.991332408,\n        },\n        {\n          x: 12934396.69835483,\n          y: 4831595.164926664,\n        },\n        {\n          x: 12934437.243386144,\n          y: 4831618.212550709,\n        },\n        {\n          x: 12934478.449542966,\n          y: 4831638.623777254,\n        },\n        {\n          x: 12934524.898399867,\n          y: 4831655.075704626,\n        },\n        {\n          x: 12934580.515549589,\n          y: 4831668.889447878,\n        },\n        {\n          x: 12934636.143351322,\n          y: 4831676.770691342,\n        },\n        {\n          x: 12934666.908025475,\n          y: 4831679.39163554,\n        },\n        {\n          x: 12934765.756048232,\n          y: 4831678.685510442,\n        },\n        {\n          x: 12934930.73367185,\n          y: 4831674.651678714,\n        },\n        {\n          x: 12935250.876591342,\n          y: 4831667.251747576,\n        },\n        {\n          x: 12935499.671785736,\n          y: 4831663.187574107,\n        },\n        {\n          x: 12935746.513249094,\n          y: 4831659.130713738,\n        },\n        {\n          x: 12935815.915508969,\n          y: 4831660.42132409,\n        },\n        {\n          x: 12935908.050789848,\n          y: 4831663.982781072,\n        },\n        {\n          x: 12935967.815653212,\n          y: 4831666.293463208,\n        },\n        {\n          x: 12936241.494185515,\n          y: 4831674.4963234225,\n        },\n        {\n          x: 12936369.370711273,\n          y: 4831678.336400013,\n        },\n        {\n          x: 12936425.785732588,\n          y: 4831676.31555289,\n        },\n        {\n          x: 12936581.316240864,\n          y: 4831673.037189442,\n        },\n        {\n          x: 12936633.370649267,\n          y: 4831674.963771561,\n        },\n        {\n          x: 12936737.713978717,\n          y: 4831679.370178035,\n        },\n        {\n          x: 12936831.315349536,\n          y: 4831683.322450787,\n        },\n        {\n          x: 12936877.589160608,\n          y: 4831685.252679165,\n        },\n        {\n          x: 12936910.361308584,\n          y: 4831690.419854687,\n        },\n        {\n          x: 12936949.558532905,\n          y: 4831696.881239256,\n        },\n        {\n          x: 12936987.467610013,\n          y: 4831706.574167675,\n        },\n        {\n          x: 12937022.15788816,\n          y: 4831719.5039792955,\n        },\n        {\n          x: 12937065.199754963,\n          y: 4831736.958924886,\n        },\n        {\n          x: 12937110.158974504,\n          y: 4831760.881236912,\n        },\n        {\n          x: 12937157.036534246,\n          y: 4831793.8590075895,\n        },\n        {\n          x: 12937199.404558316,\n          y: 4831833.307823846,\n        },\n        {\n          x: 12937237.91287837,\n          y: 4831875.343509309,\n        },\n        {\n          x: 12937258.446807722,\n          y: 4831901.211682247,\n        },\n        {\n          x: 12937284.10526521,\n          y: 4831938.723324833,\n        },\n        {\n          x: 12937312.95239147,\n          y: 4831994.991182708,\n        },\n        {\n          x: 12937327.68762551,\n          y: 4832030.564244142,\n        },\n        {\n          x: 12937343.684707167,\n          y: 4832083.600788961,\n        },\n        {\n          x: 12937351.972602425,\n          y: 4832131.461705969,\n        },\n        {\n          x: 12937358.31940185,\n          y: 4832186.438225887,\n        },\n        {\n          x: 12937355.622857124,\n          y: 4832274.4059191365,\n        },\n        {\n          x: 12937339.975481886,\n          y: 4832427.060379704,\n        },\n        {\n          x: 12937324.788945852,\n          y: 4832705.848365801,\n        },\n        {\n          x: 12937293.01305762,\n          y: 4832897.32304263,\n        },\n        {\n          x: 12937270.892804373,\n          y: 4833079.740939002,\n        },\n        {\n          x: 12937248.767915612,\n          y: 4833263.455352972,\n        },\n        {\n          x: 12937209.689481642,\n          y: 4833612.138889359,\n        },\n        {\n          x: 12937165.784590699,\n          y: 4834031.900756954,\n        },\n        {\n          x: 12937138.418116648,\n          y: 4834222.711592586,\n        },\n        {\n          x: 12937083.08660543,\n          y: 4834535.844936789,\n        },\n        {\n          x: 12937052.334413424,\n          y: 4834663.757169239,\n        },\n        {\n          x: 12936994.342385216,\n          y: 4834895.126983638,\n        },\n        {\n          x: 12936953.854431149,\n          y: 4835030.737985154,\n        },\n        {\n          x: 12936869.843218748,\n          y: 4835313.3219827665,\n        },\n        {\n          x: 12936862.532161772,\n          y: 4835339.778036121,\n        },\n        {\n          x: 12936836.320704404,\n          y: 4835434.637730703,\n        },\n        {\n          x: 12936827.217503313,\n          y: 4835519.169988192,\n        },\n        {\n          x: 12936827.124637516,\n          y: 4835581.758973662,\n        },\n        {\n          x: 12936837.906126408,\n          y: 4835663.063325517,\n        },\n        {\n          x: 12936864.056538468,\n          y: 4835757.266142062,\n        },\n        {\n          x: 12936880.668495258,\n          y: 4835797.917881852,\n        },\n        {\n          x: 12936907.667939143,\n          y: 4835847.318738415,\n        },\n        {\n          x: 12936952.878761742,\n          y: 4835914.1082075,\n        },\n        {\n          x: 12937000.216170117,\n          y: 4835969.234486032,\n        },\n        {\n          x: 12937063.361933991,\n          y: 4836023.2971759755,\n        },\n        {\n          x: 12937143.36704171,\n          y: 4836079.4810301885,\n        },\n        {\n          x: 12937217.081887215,\n          y: 4836115.519519725,\n        },\n        {\n          x: 12937329.790312514,\n          y: 4836151.556748291,\n        },\n        {\n          x: 12937431.328256749,\n          y: 4836175.655924688,\n        },\n        {\n          x: 12937851.122850813,\n          y: 4836275.4876682935,\n        },\n        {\n          x: 12938154.622310877,\n          y: 4836341.2390868,\n        },\n        {\n          x: 12938362.244614977,\n          y: 4836390.037264124,\n        },\n        {\n          x: 12938503.041870078,\n          y: 4836411.664485504,\n        },\n        {\n          x: 12938564.047320768,\n          y: 4836418.793423229,\n        },\n        {\n          x: 12938988.303480383,\n          y: 4836457.009886602,\n        },\n        {\n          x: 12939480.568825236,\n          y: 4836493.208155112,\n        },\n        {\n          x: 12939792.38983277,\n          y: 4836515.385447704,\n        },\n        {\n          x: 12940262.993302846,\n          y: 4836548.909357694,\n        },\n        {\n          x: 12940393.59269819,\n          y: 4836559.504709913,\n        },\n        {\n          x: 12940478.91780255,\n          y: 4836571.822251312,\n        },\n        {\n          x: 12940790.622461848,\n          y: 4836636.837138435,\n        },\n        {\n          x: 12941203.633091165,\n          y: 4836730.122990206,\n        },\n        {\n          x: 12941712.749939607,\n          y: 4836839.200160033,\n        },\n        {\n          x: 12942167.786199445,\n          y: 4836936.5137574095,\n        },\n        {\n          x: 12942294.984682916,\n          y: 4836959.65357408,\n        },\n        {\n          x: 12942610.524821742,\n          y: 4837005.682620561,\n        },\n        {\n          x: 12942843.547300853,\n          y: 4837039.413158133,\n        },\n        {\n          x: 12943166.318173433,\n          y: 4837086.947605261,\n        },\n        {\n          x: 12943510.46784253,\n          y: 4837134.81698191,\n        },\n        {\n          x: 12943617.3707184,\n          y: 4837150.799628537,\n        },\n        {\n          x: 12943658.487001108,\n          y: 4837158.769269097,\n        },\n        {\n          x: 12943691.736804834,\n          y: 4837167.08383111,\n        },\n        {\n          x: 12943717.587123148,\n          y: 4837172.921819401,\n        },\n        {\n          x: 12943814.810048617,\n          y: 4837200.232098826,\n        },\n        {\n          x: 12943917.263605423,\n          y: 4837238.058053253,\n        },\n        {\n          x: 12943974.78713743,\n          y: 4837264.277939439,\n        },\n        {\n          x: 12944030.153658753,\n          y: 4837291.952562648,\n        },\n        {\n          x: 12944135.650915911,\n          y: 4837354.294186727,\n        },\n        {\n          x: 12944445.141549075,\n          y: 4837528.417611227,\n        },\n        {\n          x: 12944644.509050895,\n          y: 4837635.945078776,\n        },\n        {\n          x: 12944685.94060137,\n          y: 4837654.409708789,\n        },\n        {\n          x: 12944719.086739298,\n          y: 4837669.359215808,\n        },\n        {\n          x: 12944794.975247588,\n          y: 4837699.716510274,\n        },\n        {\n          x: 12944947.1976908,\n          y: 4837760.873124597,\n        },\n        {\n          x: 12945035.745333357,\n          y: 4837798.266491122,\n        },\n        {\n          x: 12945124.72566364,\n          y: 4837845.286033468,\n        },\n        {\n          x: 12945270.414963193,\n          y: 4837921.319729365,\n        },\n        {\n          x: 12945450.582071586,\n          y: 4838013.632744957,\n        },\n        {\n          x: 12945577.533408465,\n          y: 4838080.445217846,\n        },\n        {\n          x: 12945834.434212714,\n          y: 4838202.613398697,\n        },\n        {\n          x: 12946075.31690205,\n          y: 4838296.146027662,\n        },\n        {\n          x: 12946292.279576164,\n          y: 4838360.532187274,\n        },\n        {\n          x: 12946521.019224824,\n          y: 4838491.165573925,\n        },\n        {\n          x: 12946638.949600644,\n          y: 4838621.542593471,\n        },\n        {\n          x: 12946650.686066799,\n          y: 4838737.438298838,\n        },\n      ],\n    },\n    {\n      id: \"3\",\n      source: \"6\",\n      target: \"7\",\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 0\",\n      controlPoints: [\n        {\n          x: 12960801.92985531,\n          y: 4843268.231642703,\n        },\n        {\n          x: 12960819.048596159,\n          y: 4842751.648234617,\n        },\n        {\n          x: 12960883.71369413,\n          y: 4842268.659267911,\n        },\n        {\n          x: 12960932.9503868,\n          y: 4842163.931739517,\n        },\n        {\n          x: 12961006.927248925,\n          y: 4842097.692273121,\n        },\n        {\n          x: 12961168.66192465,\n          y: 4842014.7338780835,\n        },\n        {\n          x: 12962601.717469966,\n          y: 4841896.79575762,\n        },\n        {\n          x: 12962754.46753597,\n          y: 4841885.241291034,\n        },\n        {\n          x: 12962943.500290178,\n          y: 4841880.673982279,\n        },\n        {\n          x: 12963012.112349365,\n          y: 4841876.615867013,\n        },\n        {\n          x: 12963059.010006737,\n          y: 4841861.67650217,\n        },\n        {\n          x: 12963116.452138275,\n          y: 4841834.8158408785,\n        },\n        {\n          x: 12963210.447880082,\n          y: 4841771.47221078,\n        },\n        {\n          x: 12963235.833946913,\n          y: 4841754.363392143,\n        },\n        {\n          x: 12963662.654879957,\n          y: 4841466.647965242,\n        },\n        {\n          x: 12964038.994342858,\n          y: 4841212.831358209,\n        },\n        {\n          x: 12964154.545155134,\n          y: 4841070.441342094,\n        },\n        {\n          x: 12964171.735590378,\n          y: 4841010.993206987,\n        },\n        {\n          x: 12964339.916463993,\n          y: 4840434.314594529,\n        },\n        {\n          x: 12964343.389385078,\n          y: 4840399.329742603,\n        },\n        {\n          x: 12964334.817316562,\n          y: 4840225.397102979,\n        },\n        {\n          x: 12964331.221136974,\n          y: 4840162.554061632,\n        },\n        {\n          x: 12964328.50535713,\n          y: 4840100.593094604,\n        },\n        {\n          x: 12964332.779831221,\n          y: 4840004.0775054535,\n        },\n        {\n          x: 12964346.582668858,\n          y: 4839794.207556842,\n        },\n        {\n          x: 12964363.097590594,\n          y: 4839601.773416806,\n        },\n        {\n          x: 12964380.328964364,\n          y: 4839365.602941362,\n        },\n        {\n          x: 12964385.8482237,\n          y: 4839211.548689884,\n        },\n        {\n          x: 12964387.499547305,\n          y: 4839127.002529577,\n        },\n        {\n          x: 12964391.276917182,\n          y: 4838985.794324284,\n        },\n        {\n          x: 12964392.443018869,\n          y: 4838864.958482721,\n        },\n        {\n          x: 12964394.955731656,\n          y: 4838766.690857032,\n        },\n        {\n          x: 12964393.975998627,\n          y: 4838687.027470687,\n        },\n        {\n          x: 12964387.294707682,\n          y: 4838617.567328025,\n        },\n        {\n          x: 12964367.416052649,\n          y: 4838539.309062238,\n        },\n        {\n          x: 12964347.51619,\n          y: 4838431.650587995,\n        },\n        {\n          x: 12964322.767169563,\n          y: 4838324.645467618,\n        },\n        {\n          x: 12964313.562428541,\n          y: 4838262.541243617,\n        },\n        {\n          x: 12964310.411869453,\n          y: 4838225.729635625,\n        },\n        {\n          x: 12964309.355618041,\n          y: 4838208.017849213,\n        },\n        {\n          x: 12964309.656222237,\n          y: 4838174.319843992,\n        },\n        {\n          x: 12964311.684558112,\n          y: 4838140.960443022,\n        },\n        {\n          x: 12964317.833830703,\n          y: 4838091.9543595165,\n        },\n        {\n          x: 12964329.018005343,\n          y: 4838019.745353896,\n        },\n        {\n          x: 12964357.57037216,\n          y: 4837928.397117701,\n        },\n        {\n          x: 12964379.95742845,\n          y: 4837836.721116149,\n        },\n        {\n          x: 12964395.761376698,\n          y: 4837785.937210788,\n        },\n        {\n          x: 12964408.481659109,\n          y: 4837751.494051737,\n        },\n        {\n          x: 12964423.958059136,\n          y: 4837713.2194660455,\n        },\n        {\n          x: 12964454.929082762,\n          y: 4837651.608776794,\n        },\n        {\n          x: 12964485.908545986,\n          y: 4837599.028090593,\n        },\n        {\n          x: 12964502.078122087,\n          y: 4837575.000819509,\n        },\n        {\n          x: 12964507.944067815,\n          y: 4837566.284373945,\n        },\n        {\n          x: 12964538.941616124,\n          y: 4837526.901722564,\n        },\n        {\n          x: 12964580.623847708,\n          y: 4837481.571345544,\n        },\n        {\n          x: 12964632.30168787,\n          y: 4837432.37855521,\n        },\n        {\n          x: 12964707.289879689,\n          y: 4837377.0810903795,\n        },\n        {\n          x: 12964746.5828552,\n          y: 4837352.947415166,\n        },\n        {\n          x: 12964787.599945143,\n          y: 4837330.888655926,\n        },\n        {\n          x: 12964847.234552702,\n          y: 4837303.540100147,\n        },\n        {\n          x: 12964952.379239444,\n          y: 4837263.837261641,\n        },\n        {\n          x: 12965041.659042722,\n          y: 4837228.367036585,\n        },\n        {\n          x: 12965086.817706559,\n          y: 4837212.190291242,\n        },\n        {\n          x: 12965125.425630035,\n          y: 4837197.083091712,\n        },\n        {\n          x: 12965198.852510314,\n          y: 4837173.487209741,\n        },\n        {\n          x: 12965285.035077993,\n          y: 4837148.788444636,\n        },\n        {\n          x: 12965345.022458684,\n          y: 4837136.015256971,\n        },\n        {\n          x: 12965376.741696445,\n          y: 4837131.008352433,\n        },\n        {\n          x: 12965413.288189877,\n          y: 4837126.675422853,\n        },\n        {\n          x: 12965466.732716972,\n          y: 4837121.571415942,\n        },\n        {\n          x: 12965495.35177725,\n          y: 4837119.3559531085,\n        },\n        {\n          x: 12965530.521028334,\n          y: 4837117.112703386,\n        },\n        {\n          x: 12965593.968191253,\n          y: 4837116.473776446,\n        },\n        {\n          x: 12965649.486601945,\n          y: 4837118.648806222,\n        },\n        {\n          x: 12965697.768784914,\n          y: 4837122.941340376,\n        },\n        {\n          x: 12965780.881747998,\n          y: 4837133.843576874,\n        },\n        {\n          x: 12965906.431954557,\n          y: 4837162.43093923,\n        },\n        {\n          x: 12966118.21979879,\n          y: 4837224.64350029,\n        },\n        {\n          x: 12966330.35727124,\n          y: 4837296.215654915,\n        },\n        {\n          x: 12966430.728530029,\n          y: 4837328.721880014,\n        },\n        {\n          x: 12966526.230111593,\n          y: 4837358.910915481,\n        },\n        {\n          x: 12966643.884234305,\n          y: 4837396.097468287,\n        },\n        {\n          x: 12966715.9714909,\n          y: 4837420.053074277,\n        },\n        {\n          x: 12966775.298984269,\n          y: 4837442.68182159,\n        },\n        {\n          x: 12966834.282130612,\n          y: 4837464.615069852,\n        },\n        {\n          x: 12966877.402287401,\n          y: 4837483.848933528,\n        },\n        {\n          x: 12966941.220910013,\n          y: 4837513.053573998,\n        },\n        {\n          x: 12967048.56698116,\n          y: 4837567.953487057,\n        },\n        {\n          x: 12967160.356455721,\n          y: 4837633.033932691,\n        },\n        {\n          x: 12967341.830451151,\n          y: 4837734.223029286,\n        },\n        {\n          x: 12967598.515018187,\n          y: 4837876.520746398,\n        },\n        {\n          x: 12967695.550281677,\n          y: 4837931.8672629995,\n        },\n        {\n          x: 12967769.295083275,\n          y: 4837973.927233142,\n        },\n        {\n          x: 12967806.210225426,\n          y: 4837994.921276422,\n        },\n        {\n          x: 12967880.373314308,\n          y: 4838029.263222194,\n        },\n        {\n          x: 12967942.458581364,\n          y: 4838054.463929446,\n        },\n        {\n          x: 12968006.949619304,\n          y: 4838074.960467259,\n        },\n        {\n          x: 12968064.880156811,\n          y: 4838089.239839763,\n        },\n        {\n          x: 12968160.7317529,\n          y: 4838106.785960654,\n        },\n        {\n          x: 12968223.818423554,\n          y: 4838111.656953844,\n        },\n        {\n          x: 12968280.003925696,\n          y: 4838113.086931953,\n        },\n        {\n          x: 12968326.878944056,\n          y: 4838112.138498563,\n        },\n        {\n          x: 12968367.54589312,\n          y: 4838109.4857799625,\n        },\n        {\n          x: 12968389.51656575,\n          y: 4838106.448409635,\n        },\n        {\n          x: 12968438.187831255,\n          y: 4838099.719152986,\n        },\n        {\n          x: 12968498.833145326,\n          y: 4838088.619169914,\n        },\n        {\n          x: 12968538.110375632,\n          y: 4838079.370846887,\n        },\n        {\n          x: 12968616.314083783,\n          y: 4838057.750684839,\n        },\n        {\n          x: 12968698.633058043,\n          y: 4838023.949189746,\n        },\n        {\n          x: 12968811.931290373,\n          y: 4837966.003419178,\n        },\n        {\n          x: 12968881.824553497,\n          y: 4837922.53959489,\n        },\n        {\n          x: 12968943.430079784,\n          y: 4837870.786756742,\n        },\n        {\n          x: 12969022.924111847,\n          y: 4837800.520362136,\n        },\n        {\n          x: 12969055.9530577,\n          y: 4837765.945136667,\n        },\n        {\n          x: 12969084.843050089,\n          y: 4837731.392991392,\n        },\n        {\n          x: 12969120.958078042,\n          y: 4837688.466172142,\n        },\n        {\n          x: 12969155.332209961,\n          y: 4837635.4723625,\n        },\n        {\n          x: 12969242.285513127,\n          y: 4837496.730319538,\n        },\n        {\n          x: 12969333.712761667,\n          y: 4837355.187852096,\n        },\n        {\n          x: 12969408.647255532,\n          y: 4837235.936020544,\n        },\n        {\n          x: 12969513.801304353,\n          y: 4837064.791048047,\n        },\n        {\n          x: 12969590.779687598,\n          y: 4836941.394981127,\n        },\n        {\n          x: 12969705.899936745,\n          y: 4836755.955416486,\n        },\n        {\n          x: 12969806.238916375,\n          y: 4836594.567940544,\n        },\n        {\n          x: 12969938.533153186,\n          y: 4836382.639398942,\n        },\n        {\n          x: 12970039.8160462,\n          y: 4836217.531831086,\n        },\n        {\n          x: 12970129.245947173,\n          y: 4836071.878209337,\n        },\n        {\n          x: 12970220.246216761,\n          y: 4835926.897614078,\n        },\n        {\n          x: 12970286.073547151,\n          y: 4835822.025633852,\n        },\n        {\n          x: 12970415.07546836,\n          y: 4835612.642595116,\n        },\n        {\n          x: 12970568.870650535,\n          y: 4835365.18734994,\n        },\n        {\n          x: 12970669.724938907,\n          y: 4835202.376148994,\n        },\n        {\n          x: 12970752.484735584,\n          y: 4835070.152439515,\n        },\n        {\n          x: 12970832.895625059,\n          y: 4834939.975857269,\n        },\n        {\n          x: 12970899.569476828,\n          y: 4834832.910757041,\n        },\n        {\n          x: 12971033.918129083,\n          y: 4834616.066050077,\n        },\n        {\n          x: 12971144.158073269,\n          y: 4834433.937266104,\n        },\n        {\n          x: 12971198.069970135,\n          y: 4834344.871445297,\n        },\n        {\n          x: 12971305.26943295,\n          y: 4834167.479451596,\n        },\n        {\n          x: 12971364.235194443,\n          y: 4834074.351988931,\n        },\n        {\n          x: 12971525.71156008,\n          y: 4833814.364471716,\n        },\n        {\n          x: 12971682.679083303,\n          y: 4833562.284042895,\n        },\n        {\n          x: 12971812.288419375,\n          y: 4833350.753875024,\n        },\n        {\n          x: 12972017.979800759,\n          y: 4833021.125112385,\n        },\n        {\n          x: 12972103.744545488,\n          y: 4832885.194999167,\n        },\n        {\n          x: 12972135.257382995,\n          y: 4832846.417732776,\n        },\n        {\n          x: 12972160.077781122,\n          y: 4832821.220722371,\n        },\n        {\n          x: 12972199.662509607,\n          y: 4832785.10628778,\n        },\n        {\n          x: 12972264.123885086,\n          y: 4832742.901302573,\n        },\n        {\n          x: 12972264.12408505,\n          y: 4832742.901202536,\n        },\n        {\n          x: 12972324.21434308,\n          y: 4832713.4141902095,\n        },\n        {\n          x: 12972386.305619905,\n          y: 4832692.675651716,\n        },\n        {\n          x: 12972428.804140508,\n          y: 4832685.222868618,\n        },\n        {\n          x: 12972485.012097614,\n          y: 4832680.520476171,\n        },\n        {\n          x: 12972542.168608952,\n          y: 4832680.834396475,\n        },\n        {\n          x: 12972604.011630796,\n          y: 4832688.654398485,\n        },\n        {\n          x: 12972644.212348452,\n          y: 4832699.10386752,\n        },\n        {\n          x: 12972696.734916897,\n          y: 4832717.642597281,\n        },\n        {\n          x: 12972757.695351638,\n          y: 4832749.00336457,\n        },\n        {\n          x: 12972859.999908108,\n          y: 4832813.088811927,\n        },\n        {\n          x: 12972941.093523078,\n          y: 4832860.97338974,\n        },\n        {\n          x: 12973004.727402989,\n          y: 4832901.107069043,\n        },\n        {\n          x: 12973063.375094922,\n          y: 4832939.388312671,\n        },\n        {\n          x: 12973118.709117647,\n          y: 4832976.2564467145,\n        },\n        {\n          x: 12973157.278549964,\n          y: 4833001.955820043,\n        },\n        {\n          x: 12973287.045299167,\n          y: 4833078.76948663,\n        },\n        {\n          x: 12973336.018910544,\n          y: 4833107.376876498,\n        },\n        {\n          x: 12973532.737387815,\n          y: 4833234.050880133,\n        },\n        {\n          x: 12973711.056147737,\n          y: 4833345.140835251,\n        },\n        {\n          x: 12973939.785549805,\n          y: 4833486.730983602,\n        },\n        {\n          x: 12974177.84357694,\n          y: 4833635.477147498,\n        },\n        {\n          x: 12974448.095380764,\n          y: 4833804.380259698,\n        },\n        {\n          x: 12974616.656587714,\n          y: 4833906.469350846,\n        },\n        {\n          x: 12974744.179042902,\n          y: 4833983.66343434,\n        },\n        {\n          x: 12974848.457567113,\n          y: 4834048.738895861,\n        },\n        {\n          x: 12975023.307596708,\n          y: 4834158.038177878,\n        },\n        {\n          x: 12975344.80631824,\n          y: 4834362.369596276,\n        },\n        {\n          x: 12975542.195598783,\n          y: 4834485.718127945,\n        },\n        {\n          x: 12975589.153098417,\n          y: 4834515.976788436,\n        },\n        {\n          x: 12975743.362999665,\n          y: 4834615.341611351,\n        },\n        {\n          x: 12976018.28541726,\n          y: 4834788.58647766,\n        },\n        {\n          x: 12976156.837017762,\n          y: 4834874.4406398935,\n        },\n        {\n          x: 12976203.26410973,\n          y: 4834903.209489788,\n        },\n        {\n          x: 12976425.749449603,\n          y: 4835044.1395141035,\n        },\n        {\n          x: 12976682.803252261,\n          y: 4835209.05760146,\n        },\n        {\n          x: 12977612.288689816,\n          y: 4836078.591476348,\n        },\n        {\n          x: 12977703.538800083,\n          y: 4836157.900805114,\n        },\n        {\n          x: 12977801.888863295,\n          y: 4836235.662686368,\n        },\n        {\n          x: 12978758.33292605,\n          y: 4837259.312987513,\n        },\n        {\n          x: 12978842.971959101,\n          y: 4837349.736883194,\n        },\n        {\n          x: 12979531.54154612,\n          y: 4838049.719256911,\n        },\n        {\n          x: 12979689.378903074,\n          y: 4838256.735438744,\n        },\n        {\n          x: 12980051.853140548,\n          y: 4838731.323685468,\n        },\n        {\n          x: 12980384.15998818,\n          y: 4839120.990048823,\n        },\n        {\n          x: 12980467.93565266,\n          y: 4839255.613023306,\n        },\n        {\n          x: 12980521.623321274,\n          y: 4839397.296177998,\n        },\n        {\n          x: 12980529.827086125,\n          y: 4839430.697709363,\n        },\n        {\n          x: 12980535.501366084,\n          y: 4839564.805608976,\n        },\n        {\n          x: 12980538.135068312,\n          y: 4840222.645451332,\n        },\n        {\n          x: 12980538.379641674,\n          y: 4840283.5996034695,\n        },\n        {\n          x: 12980538.543424217,\n          y: 4840324.221498785,\n        },\n        {\n          x: 12980535.067586645,\n          y: 4840405.430398631,\n        },\n        {\n          x: 12980525.345959615,\n          y: 4840470.937074263,\n        },\n        {\n          x: 12980513.995958695,\n          y: 4840544.736949112,\n        },\n      ],\n    },\n    {\n      id: \"4\",\n      source: \"8\",\n      target: \"9\",\n      class: \"地铁一号线\",\n      name: \"地铁一号线 0\",\n      controlPoints: [\n        {\n          x: 12969787.144385956,\n          y: 4852662.477041108,\n        },\n        {\n          x: 12969236.284285808,\n          y: 4852670.237943584,\n        },\n        {\n          x: 12968944.36629118,\n          y: 4852676.464039239,\n        },\n        {\n          x: 12968472.728321342,\n          y: 4852684.58530441,\n        },\n        {\n          x: 12968414.420578972,\n          y: 4852687.842999674,\n        },\n        {\n          x: 12968235.54912727,\n          y: 4852697.8323459625,\n        },\n        {\n          x: 12968069.523958666,\n          y: 4852708.845800531,\n        },\n        {\n          x: 12967520.284252618,\n          y: 4852709.247613191,\n        },\n        {\n          x: 12967117.366149856,\n          y: 4852665.62205985,\n        },\n        {\n          x: 12966772.612022452,\n          y: 4852628.17396013,\n        },\n        {\n          x: 12966517.096762186,\n          y: 4852623.936320605,\n        },\n        {\n          x: 12966223.985369124,\n          y: 4852617.830735498,\n        },\n        {\n          x: 12964521.542056274,\n          y: 4852636.984637193,\n        },\n        {\n          x: 12964462.063732337,\n          y: 4852637.63680008,\n        },\n        {\n          x: 12964380.646967553,\n          y: 4852638.41249018,\n        },\n        {\n          x: 12964310.636384122,\n          y: 4852638.548196548,\n        },\n        {\n          x: 12964259.391907305,\n          y: 4852638.609292217,\n        },\n        {\n          x: 12964063.789477564,\n          y: 4852640.250627404,\n        },\n        {\n          x: 12964002.433399238,\n          y: 4852641.068996505,\n        },\n        {\n          x: 12963990.595935801,\n          y: 4852641.261031478,\n        },\n        {\n          x: 12963890.25903454,\n          y: 4852642.515969342,\n        },\n        {\n          x: 12963809.987625448,\n          y: 4852643.546429879,\n        },\n        {\n          x: 12963781.834338633,\n          y: 4852643.942282169,\n        },\n        {\n          x: 12963774.327120606,\n          y: 4852643.970398907,\n        },\n        {\n          x: 12963455.081045607,\n          y: 4852646.588025983,\n        },\n        {\n          x: 12963322.230220675,\n          y: 4852647.784045951,\n        },\n        {\n          x: 12963223.166991241,\n          y: 4852649.725733759,\n        },\n        {\n          x: 12963190.819152791,\n          y: 4852650.417434513,\n        },\n        {\n          x: 12963127.561328052,\n          y: 4852650.0517423265,\n        },\n        {\n          x: 12963039.607865393,\n          y: 4852649.766256757,\n        },\n        {\n          x: 12962819.058636826,\n          y: 4852651.358893755,\n        },\n        {\n          x: 12962593.866965737,\n          y: 4852653.665194887,\n        },\n        {\n          x: 12962462.408622202,\n          y: 4852654.791986625,\n        },\n        {\n          x: 12962183.756523842,\n          y: 4852657.365475698,\n        },\n        {\n          x: 12962157.173752429,\n          y: 4852659.766562548,\n        },\n        {\n          x: 12961924.104038442,\n          y: 4852660.11712501,\n        },\n        {\n          x: 12961924.059855,\n          y: 4852660.116942157,\n        },\n        {\n          x: 12961900.696391538,\n          y: 4852660.033076115,\n        },\n        {\n          x: 12961567.092653673,\n          y: 4852663.388779601,\n        },\n        {\n          x: 12961454.569802668,\n          y: 4852664.505495348,\n        },\n        {\n          x: 12961217.079500727,\n          y: 4852658.515584384,\n        },\n        {\n          x: 12961149.13715287,\n          y: 4852657.212458487,\n        },\n        {\n          x: 12961133.237071244,\n          y: 4852657.247371087,\n        },\n        {\n          x: 12961027.846655574,\n          y: 4852654.2780048065,\n        },\n        {\n          x: 12960863.900760658,\n          y: 4852649.966801163,\n        },\n        {\n          x: 12960818.644700909,\n          y: 4852648.896293183,\n        },\n        {\n          x: 12960637.184863163,\n          y: 4852644.743311257,\n        },\n        {\n          x: 12960624.025816733,\n          y: 4852644.477645673,\n        },\n        {\n          x: 12960602.480219977,\n          y: 4852643.937047354,\n        },\n        {\n          x: 12960506.031680021,\n          y: 4852641.9318091385,\n        },\n        {\n          x: 12960391.353551494,\n          y: 4852639.083787939,\n        },\n        {\n          x: 12960320.201913092,\n          y: 4852637.313773441,\n        },\n        {\n          x: 12960062.18095632,\n          y: 4852628.1362550985,\n        },\n        {\n          x: 12959904.438548937,\n          y: 4852627.023597047,\n        },\n        {\n          x: 12959595.684288755,\n          y: 4852619.8846618915,\n        },\n        {\n          x: 12959323.178066703,\n          y: 4852609.481755874,\n        },\n        {\n          x: 12958840.802221617,\n          y: 4852590.942915122,\n        },\n        {\n          x: 12957502.352622895,\n          y: 4852528.684166141,\n        },\n        {\n          x: 12956620.835296787,\n          y: 4852504.508925668,\n        },\n        {\n          x: 12955674.942021938,\n          y: 4852471.61015628,\n        },\n        {\n          x: 12955416.308852747,\n          y: 4852469.018503432,\n        },\n        {\n          x: 12954706.035138829,\n          y: 4852461.803325078,\n        },\n        {\n          x: 12953928.716739,\n          y: 4852464.489858927,\n        },\n        {\n          x: 12952788.83672684,\n          y: 4852466.54282573,\n        },\n        {\n          x: 12952748.81253644,\n          y: 4852466.605133841,\n        },\n        {\n          x: 12951563.203060223,\n          y: 4852477.671537925,\n        },\n        {\n          x: 12951199.751181506,\n          y: 4852495.122833292,\n        },\n        {\n          x: 12950198.141508736,\n          y: 4852495.025451202,\n        },\n        {\n          x: 12949965.299984097,\n          y: 4852495.077305805,\n        },\n        {\n          x: 12949129.26242653,\n          y: 4852504.598358415,\n        },\n        {\n          x: 12947838.444126923,\n          y: 4852505.90698292,\n        },\n        {\n          x: 12947589.306786017,\n          y: 4852505.320736883,\n        },\n        {\n          x: 12945901.390879856,\n          y: 4852501.577557874,\n        },\n        {\n          x: 12944980.974916212,\n          y: 4852499.625168126,\n        },\n        {\n          x: 12943548.12132782,\n          y: 4852497.380847655,\n        },\n        {\n          x: 12942376.001682293,\n          y: 4852500.03430738,\n        },\n        {\n          x: 12941203.789519304,\n          y: 4852502.985840143,\n        },\n        {\n          x: 12939774.001753055,\n          y: 4852500.299665425,\n        },\n        {\n          x: 12938324.854233196,\n          y: 4852497.834034189,\n        },\n        {\n          x: 12938281.788912078,\n          y: 4852497.828983922,\n        },\n        {\n          x: 12938058.817138307,\n          y: 4852497.810737135,\n        },\n        {\n          x: 12937898.86276059,\n          y: 4852497.3685845565,\n        },\n        {\n          x: 12937671.875809424,\n          y: 4852496.791572168,\n        },\n        {\n          x: 12937460.220387606,\n          y: 4852497.967734828,\n        },\n        {\n          x: 12937174.041187,\n          y: 4852498.731022245,\n        },\n        {\n          x: 12937173.96999806,\n          y: 4852498.730233027,\n        },\n        {\n          x: 12937136.194604035,\n          y: 4852498.300376261,\n        },\n        {\n          x: 12936946.821682766,\n          y: 4852498.918736944,\n        },\n        {\n          x: 12936849.614381388,\n          y: 4852498.356186343,\n        },\n        {\n          x: 12936692.322356569,\n          y: 4852497.959326306,\n        },\n        {\n          x: 12936587.17645106,\n          y: 4852498.5677669365,\n        },\n        {\n          x: 12934252.339824114,\n          y: 4852499.457888381,\n        },\n        {\n          x: 12934092.666854141,\n          y: 4852498.783005591,\n        },\n        {\n          x: 12933957.2920676,\n          y: 4852554.157396755,\n        },\n        {\n          x: 12933867.245068891,\n          y: 4852636.768727248,\n        },\n        {\n          x: 12933790.29537299,\n          y: 4852771.049393255,\n        },\n        {\n          x: 12933709.54499776,\n          y: 4852986.243814959,\n        },\n        {\n          x: 12933275.354659256,\n          y: 4854146.7353322515,\n        },\n      ],\n    },\n    {\n      id: \"5\",\n      source: \"10\",\n      target: \"11\",\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 0\",\n      controlPoints: [\n        {\n          x: 12954320.097829182,\n          y: 4841755.370768595,\n        },\n        {\n          x: 12954269.565863218,\n          y: 4841475.231416884,\n        },\n        {\n          x: 12954109.467427691,\n          y: 4840587.804965775,\n        },\n        {\n          x: 12953795.666789988,\n          y: 4838847.936111765,\n        },\n        {\n          x: 12953779.74076359,\n          y: 4838781.406112334,\n        },\n        {\n          x: 12953764.911988458,\n          y: 4838735.372116771,\n        },\n        {\n          x: 12953728.040718146,\n          y: 4838684.612972186,\n        },\n        {\n          x: 12953200.942060454,\n          y: 4837849.787883376,\n        },\n        {\n          x: 12953071.02731984,\n          y: 4837651.869209399,\n        },\n        {\n          x: 12952979.616992796,\n          y: 4837589.00545091,\n        },\n        {\n          x: 12952903.159508042,\n          y: 4837579.42379109,\n        },\n        {\n          x: 12952782.211602798,\n          y: 4837577.388802782,\n        },\n        {\n          x: 12952678.006507806,\n          y: 4837568.850794091,\n        },\n        {\n          x: 12952630.246652557,\n          y: 4837568.346663251,\n        },\n        {\n          x: 12952563.144880537,\n          y: 4837569.3784104185,\n        },\n        {\n          x: 12952459.727695232,\n          y: 4837576.654353493,\n        },\n        {\n          x: 12952047.259057738,\n          y: 4837602.473680529,\n        },\n        {\n          x: 12951992.11263072,\n          y: 4837607.014363404,\n        },\n        {\n          x: 12951930.600837775,\n          y: 4837607.287158209,\n        },\n        {\n          x: 12951859.333033504,\n          y: 4837604.988006545,\n        },\n        {\n          x: 12951659.950799704,\n          y: 4837590.463923004,\n        },\n        {\n          x: 12951511.86811374,\n          y: 4837581.708907432,\n        },\n        {\n          x: 12951503.592170091,\n          y: 4837581.306936129,\n        },\n        {\n          x: 12951471.758692794,\n          y: 4837579.760443551,\n        },\n        {\n          x: 12951416.434195919,\n          y: 4837581.464508876,\n        },\n        {\n          x: 12951320.836636368,\n          y: 4837591.26673181,\n        },\n        {\n          x: 12951208.471245904,\n          y: 4837608.1171654025,\n        },\n        {\n          x: 12951130.332944639,\n          y: 4837620.206020496,\n        },\n        {\n          x: 12951053.162266875,\n          y: 4837624.532130631,\n        },\n        {\n          x: 12950994.073467728,\n          y: 4837620.818036712,\n        },\n        {\n          x: 12950952.099045333,\n          y: 4837614.236065724,\n        },\n        {\n          x: 12950903.02068405,\n          y: 4837603.431351229,\n        },\n        {\n          x: 12950854.265358152,\n          y: 4837586.804646552,\n        },\n        {\n          x: 12950803.897617934,\n          y: 4837565.966975064,\n        },\n        {\n          x: 12950750.622557428,\n          y: 4837538.00750994,\n        },\n        {\n          x: 12950713.171179097,\n          y: 4837512.0295137195,\n        },\n        {\n          x: 12950613.406373397,\n          y: 4837431.864322759,\n        },\n        {\n          x: 12950473.803516785,\n          y: 4837318.037136518,\n        },\n        {\n          x: 12950224.739204535,\n          y: 4837111.815739738,\n        },\n        {\n          x: 12949781.71624435,\n          y: 4836761.283068602,\n        },\n        {\n          x: 12949728.565575039,\n          y: 4836716.7570553925,\n        },\n        {\n          x: 12949703.653419532,\n          y: 4836690.060944494,\n        },\n        {\n          x: 12949670.437469736,\n          y: 4836646.1427171705,\n        },\n        {\n          x: 12949640.546313735,\n          y: 4836599.462744173,\n        },\n        {\n          x: 12949602.355321119,\n          y: 4836518.919640969,\n        },\n        {\n          x: 12949581.32899617,\n          y: 4836447.855053628,\n        },\n        {\n          x: 12949571.933781365,\n          y: 4836366.283691224,\n        },\n        {\n          x: 12949570.99564922,\n          y: 4836297.018513739,\n        },\n        {\n          x: 12949583.773060184,\n          y: 4836131.096596216,\n        },\n        {\n          x: 12949630.95790481,\n          y: 4835587.242148269,\n        },\n        {\n          x: 12949644.605106963,\n          y: 4835427.978435933,\n        },\n        {\n          x: 12949674.069930378,\n          y: 4835084.076939791,\n        },\n        {\n          x: 12949741.123785608,\n          y: 4834412.860058607,\n        },\n        {\n          x: 12949881.255387962,\n          y: 4833114.597124276,\n        },\n        {\n          x: 12949988.167188657,\n          y: 4831634.321648644,\n        },\n        {\n          x: 12950011.8904392,\n          y: 4831024.642033773,\n        },\n        {\n          x: 12950045.949834898,\n          y: 4830169.250105037,\n        },\n        {\n          x: 12950067.86965607,\n          y: 4829187.531131907,\n        },\n        {\n          x: 12950068.411119526,\n          y: 4828643.488667632,\n        },\n        {\n          x: 12950089.439076275,\n          y: 4827012.598861079,\n        },\n        {\n          x: 12950075.332266735,\n          y: 4825735.265538567,\n        },\n        {\n          x: 12950077.6177772,\n          y: 4825610.926281617,\n        },\n        {\n          x: 12950063.743562018,\n          y: 4825551.423688702,\n        },\n        {\n          x: 12949886.484341538,\n          y: 4825355.5838901615,\n        },\n        {\n          x: 12949714.24435096,\n          y: 4825240.542840744,\n        },\n        {\n          x: 12948810.72447873,\n          y: 4824919.1962220995,\n        },\n        {\n          x: 12948630.372620959,\n          y: 4824779.957329413,\n        },\n        {\n          x: 12948551.763527192,\n          y: 4824562.001534207,\n        },\n        {\n          x: 12948571.333401924,\n          y: 4824233.799839876,\n        },\n        {\n          x: 12948851.677430334,\n          y: 4820591.681083957,\n        },\n        {\n          x: 12948856.025176648,\n          y: 4820535.340838382,\n        },\n        {\n          x: 12948857.519128771,\n          y: 4820485.531178259,\n        },\n      ],\n    },\n    {\n      id: \"6\",\n      source: \"12\",\n      target: \"13\",\n      class: \"地铁四号线\",\n      name: \"地铁四号线 0\",\n      controlPoints: [\n        {\n          x: 12954373.657756021,\n          y: 4843560.934009259,\n        },\n        {\n          x: 12954403.308395952,\n          y: 4844637.092136642,\n        },\n        {\n          x: 12954443.631939387,\n          y: 4845049.84687948,\n        },\n        {\n          x: 12954465.385927541,\n          y: 4845230.316998346,\n        },\n        {\n          x: 12954477.104733607,\n          y: 4845295.713890768,\n        },\n        {\n          x: 12954510.159202749,\n          y: 4845363.4843960125,\n        },\n        {\n          x: 12954722.716019211,\n          y: 4845628.35857464,\n        },\n        {\n          x: 12954922.594454948,\n          y: 4845874.895440882,\n        },\n        {\n          x: 12955211.028271338,\n          y: 4846209.062552702,\n        },\n        {\n          x: 12955269.78815066,\n          y: 4846334.5600019405,\n        },\n        {\n          x: 12955267.306704495,\n          y: 4846529.094981971,\n        },\n        {\n          x: 12955200.99362026,\n          y: 4846713.313157282,\n        },\n        {\n          x: 12955050.45468214,\n          y: 4846989.573067081,\n        },\n        {\n          x: 12954853.97442472,\n          y: 4847378.402945743,\n        },\n        {\n          x: 12954774.906886864,\n          y: 4847675.2444390515,\n        },\n        {\n          x: 12954731.85449024,\n          y: 4848212.883938044,\n        },\n        {\n          x: 12954744.79924884,\n          y: 4848786.391306657,\n        },\n        {\n          x: 12954747.612023802,\n          y: 4849835.643590178,\n        },\n        {\n          x: 12954747.682216099,\n          y: 4849861.774043528,\n        },\n        {\n          x: 12954741.08816034,\n          y: 4850881.230635524,\n        },\n        {\n          x: 12954737.645653786,\n          y: 4851386.201206222,\n        },\n        {\n          x: 12954721.760149185,\n          y: 4851926.74810973,\n        },\n        {\n          x: 12954706.035138829,\n          y: 4852461.803325078,\n        },\n        {\n          x: 12954661.27452527,\n          y: 4853769.120768002,\n        },\n        {\n          x: 12954633.49377667,\n          y: 4854880.847809376,\n        },\n        {\n          x: 12954587.535533391,\n          y: 4856278.18149549,\n        },\n        {\n          x: 12954557.952698175,\n          y: 4857155.485744631,\n        },\n        {\n          x: 12954557.437163154,\n          y: 4857170.770202318,\n        },\n        {\n          x: 12954537.64640468,\n          y: 4857234.798733779,\n        },\n        {\n          x: 12954507.61800925,\n          y: 4857265.498611502,\n        },\n        {\n          x: 12954448.18840873,\n          y: 4857290.387739614,\n        },\n        {\n          x: 12954389.022163786,\n          y: 4857304.787614773,\n        },\n        {\n          x: 12954302.10618948,\n          y: 4857314.253741188,\n        },\n        {\n          x: 12954046.446788153,\n          y: 4857314.448443049,\n        },\n        {\n          x: 12952788.718781503,\n          y: 4857298.136733208,\n        },\n        {\n          x: 12952635.915840019,\n          y: 4857296.152572144,\n        },\n        {\n          x: 12952564.595755607,\n          y: 4857295.107641618,\n        },\n        {\n          x: 12952364.409316596,\n          y: 4857273.12227582,\n        },\n        {\n          x: 12952154.040871462,\n          y: 4857235.468350076,\n        },\n        {\n          x: 12951969.43909615,\n          y: 4857201.456667664,\n        },\n        {\n          x: 12951808.104168849,\n          y: 4857155.825128381,\n        },\n        {\n          x: 12951795.707910977,\n          y: 4857150.112186163,\n        },\n        {\n          x: 12951672.542241815,\n          y: 4857093.348351254,\n        },\n        {\n          x: 12951530.459501661,\n          y: 4857032.392475653,\n        },\n        {\n          x: 12951457.165035697,\n          y: 4857016.611367204,\n        },\n        {\n          x: 12951413.82925054,\n          y: 4857010.241801462,\n        },\n        {\n          x: 12951362.398381047,\n          y: 4857007.948880891,\n        },\n        {\n          x: 12951289.260741765,\n          y: 4857006.283719927,\n        },\n        {\n          x: 12951243.494159421,\n          y: 4857003.966436169,\n        },\n        {\n          x: 12951198.613096055,\n          y: 4857003.604147996,\n        },\n        {\n          x: 12951191.52223199,\n          y: 4857003.216630181,\n        },\n        {\n          x: 12951176.410532618,\n          y: 4857002.724713779,\n        },\n        {\n          x: 12950664.103792224,\n          y: 4856969.636138788,\n        },\n        {\n          x: 12950490.915616779,\n          y: 4856960.604637075,\n        },\n        {\n          x: 12950376.449417142,\n          y: 4856957.730451393,\n        },\n        {\n          x: 12950275.412423559,\n          y: 4856958.095432962,\n        },\n        {\n          x: 12950197.754097624,\n          y: 4856965.795888429,\n        },\n        {\n          x: 12950087.769172028,\n          y: 4856976.7011729805,\n        },\n        {\n          x: 12949969.030407438,\n          y: 4856988.731925641,\n        },\n        {\n          x: 12949611.385620916,\n          y: 4857033.614270364,\n        },\n        {\n          x: 12949433.088418497,\n          y: 4857064.900798794,\n        },\n        {\n          x: 12949359.045249254,\n          y: 4857097.992433988,\n        },\n        {\n          x: 12949324.284422386,\n          y: 4857141.787668212,\n        },\n        {\n          x: 12949323.829516204,\n          y: 4857143.221560914,\n        },\n        {\n          x: 12949294.040752294,\n          y: 4857237.088716105,\n        },\n        {\n          x: 12949290.965819698,\n          y: 4857281.5241520675,\n        },\n        {\n          x: 12949290.844836328,\n          y: 4857284.326685918,\n        },\n        {\n          x: 12949286.84859171,\n          y: 4857363.3786635455,\n        },\n        {\n          x: 12949255.74271649,\n          y: 4857669.774620552,\n        },\n        {\n          x: 12949251.021282567,\n          y: 4857716.034187529,\n        },\n        {\n          x: 12949240.534414742,\n          y: 4857818.781418282,\n        },\n        {\n          x: 12949229.599655101,\n          y: 4857925.935052169,\n        },\n        {\n          x: 12949223.285025857,\n          y: 4857987.8014169345,\n        },\n        {\n          x: 12949218.68930698,\n          y: 4858032.839792737,\n        },\n        {\n          x: 12949202.705857255,\n          y: 4858189.081518219,\n        },\n        {\n          x: 12949201.91675542,\n          y: 4858197.081514944,\n        },\n        {\n          x: 12949188.720634252,\n          y: 4858325.005565848,\n        },\n        {\n          x: 12949171.484932527,\n          y: 4858492.101118972,\n        },\n        {\n          x: 12949140.242605533,\n          y: 4858794.965387163,\n        },\n        {\n          x: 12949128.462758997,\n          y: 4858908.105794337,\n        },\n        {\n          x: 12949119.684607878,\n          y: 4858997.242106079,\n        },\n        {\n          x: 12949117.630120248,\n          y: 4859021.712509141,\n        },\n        {\n          x: 12949113.161648553,\n          y: 4859077.167116614,\n        },\n        {\n          x: 12949110.991163222,\n          y: 4859101.470621213,\n        },\n        {\n          x: 12949110.099969309,\n          y: 4859112.821822983,\n        },\n        {\n          x: 12949108.911677599,\n          y: 4859127.083425599,\n        },\n        {\n          x: 12949101.505333235,\n          y: 4859206.231246072,\n        },\n        {\n          x: 12949098.141760852,\n          y: 4859235.087958121,\n        },\n        {\n          x: 12949086.945661454,\n          y: 4859330.204405712,\n        },\n        {\n          x: 12949080.506525062,\n          y: 4859390.090037273,\n        },\n        {\n          x: 12949072.760807924,\n          y: 4859454.574381684,\n        },\n        {\n          x: 12949053.421043288,\n          y: 4859613.1813176535,\n        },\n        {\n          x: 12949006.291508188,\n          y: 4860099.103019413,\n        },\n        {\n          x: 12948987.273876615,\n          y: 4860281.083185734,\n        },\n        {\n          x: 12948981.095505225,\n          y: 4860340.214580902,\n        },\n        {\n          x: 12948971.386815451,\n          y: 4860438.818238612,\n        },\n        {\n          x: 12948968.790673513,\n          y: 4860465.186182631,\n        },\n        {\n          x: 12948957.099444743,\n          y: 4860583.923590711,\n        },\n        {\n          x: 12948954.944696926,\n          y: 4860602.30153119,\n        },\n        {\n          x: 12948953.629329322,\n          y: 4860611.371156355,\n        },\n        {\n          x: 12948945.376137566,\n          y: 4860665.772419023,\n        },\n        {\n          x: 12948943.371389516,\n          y: 4860677.809759844,\n        },\n        {\n          x: 12948941.428640455,\n          y: 4860688.287999877,\n        },\n        {\n          x: 12948940.027077485,\n          y: 4860695.8687290335,\n        },\n        {\n          x: 12948933.979640268,\n          y: 4860726.099657515,\n        },\n        {\n          x: 12948928.21129958,\n          y: 4860754.943783897,\n        },\n        {\n          x: 12948925.53477491,\n          y: 4860767.8741438445,\n        },\n        {\n          x: 12948914.390798561,\n          y: 4860816.020402436,\n        },\n        {\n          x: 12948908.818966143,\n          y: 4860838.981437038,\n        },\n        {\n          x: 12948891.21272109,\n          y: 4860906.962985634,\n        },\n        {\n          x: 12948891.084425297,\n          y: 4860907.371989038,\n        },\n        {\n          x: 12948849.368497113,\n          y: 4861042.125295077,\n        },\n        {\n          x: 12948835.90431828,\n          y: 4861088.737227414,\n        },\n        {\n          x: 12948830.296142103,\n          y: 4861108.420813816,\n        },\n        {\n          x: 12948822.04407856,\n          y: 4861138.651794888,\n        },\n        {\n          x: 12948813.499036651,\n          y: 4861166.617294492,\n        },\n        {\n          x: 12948805.08019881,\n          y: 4861193.008798196,\n        },\n        {\n          x: 12948779.113573417,\n          y: 4861277.779889043,\n        },\n        {\n          x: 12948764.04589559,\n          y: 4861326.974101848,\n        },\n        {\n          x: 12948764.026496535,\n          y: 4861327.037202654,\n        },\n        {\n          x: 12948753.359326178,\n          y: 4861360.815953497,\n        },\n        {\n          x: 12948743.747416658,\n          y: 4861389.941771785,\n        },\n        {\n          x: 12948718.178381432,\n          y: 4861470.921841358,\n        },\n        {\n          x: 12948696.13872888,\n          y: 4861543.199816692,\n        },\n        {\n          x: 12948691.345809,\n          y: 4861558.918058851,\n        },\n        {\n          x: 12948670.805545585,\n          y: 4861626.292230624,\n        },\n        {\n          x: 12948635.660998613,\n          y: 4861741.800393923,\n        },\n        {\n          x: 12948620.137949644,\n          y: 4861792.813013884,\n        },\n        {\n          x: 12948586.362157172,\n          y: 4861900.900528574,\n        },\n        {\n          x: 12948570.146171637,\n          y: 4861955.959000696,\n        },\n        {\n          x: 12948553.55913321,\n          y: 4862007.46980901,\n        },\n        {\n          x: 12948506.607909067,\n          y: 4862151.020102147,\n        },\n        {\n          x: 12948474.477154713,\n          y: 4862249.710439044,\n        },\n        {\n          x: 12948433.854782313,\n          y: 4862372.508539395,\n        },\n        {\n          x: 12948405.896567902,\n          y: 4862457.026555028,\n        },\n        {\n          x: 12948387.467864858,\n          y: 4862540.95750102,\n        },\n        {\n          x: 12948369.72084694,\n          y: 4862608.589042327,\n        },\n        {\n          x: 12948351.287448928,\n          y: 4862705.352991365,\n        },\n        {\n          x: 12948349.399856329,\n          y: 4862717.969572795,\n        },\n        {\n          x: 12948342.9554688,\n          y: 4862761.161096935,\n        },\n        {\n          x: 12948334.103059907,\n          y: 4862815.789967469,\n        },\n        {\n          x: 12948330.745336216,\n          y: 4862847.533998459,\n        },\n        {\n          x: 12948330.324781813,\n          y: 4862857.667238568,\n        },\n        {\n          x: 12948330.719618713,\n          y: 4862923.321583864,\n        },\n        {\n          x: 12948329.271456743,\n          y: 4863030.035711758,\n        },\n        {\n          x: 12948318.983617261,\n          y: 4863152.700650098,\n        },\n        {\n          x: 12948308.624791207,\n          y: 4863323.528821448,\n        },\n        {\n          x: 12948305.573238118,\n          y: 4863383.023344128,\n        },\n        {\n          x: 12948304.882713268,\n          y: 4863410.205718649,\n        },\n        {\n          x: 12948304.34907461,\n          y: 4863418.883075538,\n        },\n        {\n          x: 12948304.349074604,\n          y: 4863418.883175537,\n        },\n        {\n          x: 12948293.57852302,\n          y: 4863594.090943488,\n        },\n        {\n          x: 12948292.26537664,\n          y: 4863615.222388438,\n        },\n        {\n          x: 12948285.911429897,\n          y: 4863694.78289179,\n        },\n        {\n          x: 12948279.888862576,\n          y: 4863721.625153882,\n        },\n        {\n          x: 12948276.328498306,\n          y: 4863738.652548549,\n        },\n        {\n          x: 12948273.0212985,\n          y: 4863779.761424982,\n        },\n        {\n          x: 12948271.391195413,\n          y: 4863804.060012918,\n        },\n        {\n          x: 12948269.44583099,\n          y: 4863833.063038297,\n        },\n        {\n          x: 12948268.544436276,\n          y: 4863862.57964908,\n        },\n        {\n          x: 12948264.951457486,\n          y: 4863980.229798113,\n        },\n        {\n          x: 12948262.743327497,\n          y: 4864012.842760259,\n        },\n        {\n          x: 12948253.95970473,\n          y: 4864163.393230665,\n        },\n        {\n          x: 12948251.540303396,\n          y: 4864206.470731608,\n        },\n        {\n          x: 12948212.079753308,\n          y: 4864794.335183325,\n        },\n        {\n          x: 12948192.775449837,\n          y: 4865057.815886522,\n        },\n        {\n          x: 12948172.296877252,\n          y: 4865301.5112607,\n        },\n        {\n          x: 12948164.786289226,\n          y: 4865392.804538419,\n        },\n        {\n          x: 12948154.255917,\n          y: 4865512.14757284,\n        },\n        {\n          x: 12948154.255917,\n          y: 4865512.1477728365,\n        },\n        {\n          x: 12948149.74303433,\n          y: 4865560.011840421,\n        },\n        {\n          x: 12948144.366829144,\n          y: 4865612.142398512,\n        },\n        {\n          x: 12948143.959623424,\n          y: 4865618.525997311,\n        },\n        {\n          x: 12948137.439734928,\n          y: 4865720.508486359,\n        },\n        {\n          x: 12948107.519605923,\n          y: 4865814.2291544955,\n        },\n        {\n          x: 12948078.069647746,\n          y: 4865856.462480031,\n        },\n        {\n          x: 12948024.306038419,\n          y: 4865884.525941556,\n        },\n        {\n          x: 12947948.793208137,\n          y: 4865895.857790665,\n        },\n        {\n          x: 12947726.110412342,\n          y: 4865901.65407643,\n        },\n        {\n          x: 12947662.03325602,\n          y: 4865903.549335554,\n        },\n        {\n          x: 12947582.728775566,\n          y: 4865884.474219018,\n        },\n        {\n          x: 12947578.428732935,\n          y: 4865883.43990478,\n        },\n        {\n          x: 12947516.084078891,\n          y: 4865861.968135664,\n        },\n        {\n          x: 12947457.991019811,\n          y: 4865841.929292836,\n        },\n        {\n          x: 12947430.320338927,\n          y: 4865825.17744688,\n        },\n        {\n          x: 12947403.34891173,\n          y: 4865801.908641243,\n        },\n        {\n          x: 12947385.583410634,\n          y: 4865783.125515066,\n        },\n        {\n          x: 12947366.462947419,\n          y: 4865758.28002787,\n        },\n        {\n          x: 12947349.636991477,\n          y: 4865736.761035594,\n        },\n        {\n          x: 12947325.434427919,\n          y: 4865705.9521581745,\n        },\n        {\n          x: 12947293.294439247,\n          y: 4865662.223273893,\n        },\n        {\n          x: 12947280.026460873,\n          y: 4865645.503535422,\n        },\n        {\n          x: 12947272.790190758,\n          y: 4865637.152186299,\n        },\n        {\n          x: 12947264.45234974,\n          y: 4865630.50206878,\n        },\n        {\n          x: 12947253.895662466,\n          y: 4865622.890310138,\n        },\n        {\n          x: 12947242.3961359,\n          y: 4865615.799413275,\n        },\n        {\n          x: 12947228.023148427,\n          y: 4865608.898160762,\n        },\n        {\n          x: 12947219.081559768,\n          y: 4865605.561492597,\n        },\n        {\n          x: 12947209.673061684,\n          y: 4865603.139115063,\n        },\n        {\n          x: 12947199.896463385,\n          y: 4865601.658737004,\n        },\n        {\n          x: 12947170.376100887,\n          y: 4865598.241728645,\n        },\n        {\n          x: 12947114.262342412,\n          y: 4865594.002744353,\n        },\n        {\n          x: 12947069.303568143,\n          y: 4865590.097302363,\n        },\n        {\n          x: 12946996.955287198,\n          y: 4865580.432522639,\n        },\n        {\n          x: 12946941.228131976,\n          y: 4865573.255125918,\n        },\n        {\n          x: 12946900.084918642,\n          y: 4865569.517658332,\n        },\n        {\n          x: 12946822.761463061,\n          y: 4865560.673446433,\n        },\n        {\n          x: 12946727.614742137,\n          y: 4865552.84563637,\n        },\n        {\n          x: 12946678.905013254,\n          y: 4865548.119018174,\n        },\n        {\n          x: 12946642.17997207,\n          y: 4865544.956115833,\n        },\n        {\n          x: 12946584.893309405,\n          y: 4865543.859270443,\n        },\n        {\n          x: 12946544.506879704,\n          y: 4865545.213818521,\n        },\n        {\n          x: 12946501.165103968,\n          y: 4865545.26638306,\n        },\n        {\n          x: 12946422.048745677,\n          y: 4865542.2614939865,\n        },\n        {\n          x: 12946366.591065088,\n          y: 4865538.478497777,\n        },\n        {\n          x: 12946343.54274385,\n          y: 4865536.796393288,\n        },\n        {\n          x: 12946313.331102742,\n          y: 4865534.072102609,\n        },\n        {\n          x: 12946276.992936801,\n          y: 4865530.295722415,\n        },\n        {\n          x: 12946044.983768271,\n          y: 4865506.53848812,\n        },\n        {\n          x: 12946044.982468616,\n          y: 4865506.538388461,\n        },\n        {\n          x: 12945999.054564236,\n          y: 4865501.51634233,\n        },\n        {\n          x: 12945939.11875475,\n          y: 4865501.919490546,\n        },\n        {\n          x: 12945842.188083762,\n          y: 4865505.838142619,\n        },\n        {\n          x: 12945841.360324211,\n          y: 4865506.238193714,\n        },\n        {\n          x: 12945718.088826543,\n          y: 4865565.803399573,\n        },\n        {\n          x: 12945361.171856038,\n          y: 4865725.241244186,\n        },\n        {\n          x: 12945288.888034362,\n          y: 4865771.876347319,\n        },\n        {\n          x: 12944971.787632536,\n          y: 4865960.501491743,\n        },\n        {\n          x: 12944694.050529143,\n          y: 4866125.748562615,\n        },\n        {\n          x: 12944571.275779925,\n          y: 4866175.496896087,\n        },\n        {\n          x: 12944486.984637886,\n          y: 4866196.026940467,\n        },\n        {\n          x: 12944376.91914833,\n          y: 4866212.279980763,\n        },\n        {\n          x: 12943875.491423381,\n          y: 4866303.184805465,\n        },\n        {\n          x: 12943715.625648474,\n          y: 4866329.140561554,\n        },\n        {\n          x: 12943691.286623739,\n          y: 4866336.782693048,\n        },\n        {\n          x: 12943666.684753045,\n          y: 4866355.700580207,\n        },\n        {\n          x: 12943647.036226608,\n          y: 4866386.77867161,\n        },\n        {\n          x: 12943618.683377,\n          y: 4866431.5171539625,\n        },\n        {\n          x: 12943575.591938026,\n          y: 4866503.065200196,\n        },\n        {\n          x: 12943549.272841655,\n          y: 4866548.372445914,\n        },\n        {\n          x: 12943513.655516205,\n          y: 4866606.664160266,\n        },\n        {\n          x: 12943464.443157,\n          y: 4866692.552688016,\n        },\n        {\n          x: 12943362.33352031,\n          y: 4866844.144888357,\n        },\n        {\n          x: 12943298.332087196,\n          y: 4866965.865469642,\n        },\n        {\n          x: 12943194.660765983,\n          y: 4867152.9265388595,\n        },\n        {\n          x: 12943140.884084987,\n          y: 4867273.386822292,\n        },\n        {\n          x: 12943114.423065275,\n          y: 4867594.932334096,\n        },\n        {\n          x: 12943113.763426922,\n          y: 4867602.948598135,\n        },\n        {\n          x: 12943108.181515867,\n          y: 4867757.799791251,\n        },\n      ],\n    },\n    {\n      id: \"7\",\n      source: \"14\",\n      target: \"15\",\n      class: \"地铁六号线\",\n      name: \"地铁六号线 0\",\n      controlPoints: [\n        {\n          x: 12944329.792132245,\n          y: 4856125.732393313,\n        },\n        {\n          x: 12944374.963417206,\n          y: 4856132.075934602,\n        },\n        {\n          x: 12944438.830775484,\n          y: 4856136.896376604,\n        },\n        {\n          x: 12944515.16641718,\n          y: 4856137.056480541,\n        },\n        {\n          x: 12944577.483953971,\n          y: 4856135.625803216,\n        },\n        {\n          x: 12944642.924413817,\n          y: 4856126.389908644,\n        },\n        {\n          x: 12944711.48482392,\n          y: 4856114.036716937,\n        },\n        {\n          x: 12944790.955263415,\n          y: 4856098.58349056,\n        },\n        {\n          x: 12944854.842780758,\n          y: 4856089.348004857,\n        },\n        {\n          x: 12944925.484679118,\n          y: 4856086.034136885,\n        },\n        {\n          x: 12944964.41973033,\n          y: 4856083.331773158,\n        },\n        {\n          x: 12944978.393002376,\n          y: 4856082.950699846,\n        },\n        {\n          x: 12945058.975743152,\n          y: 4856080.754937213,\n        },\n        {\n          x: 12945281.461997462,\n          y: 4856092.418480259,\n        },\n        {\n          x: 12945643.041754864,\n          y: 4856110.003093847,\n        },\n        {\n          x: 12945784.907202916,\n          y: 4856113.134308052,\n        },\n        {\n          x: 12946578.056629626,\n          y: 4856112.4447421245,\n        },\n        {\n          x: 12947587.39674028,\n          y: 4856115.133251456,\n        },\n        {\n          x: 12947613.274919279,\n          y: 4856115.203954564,\n        },\n        {\n          x: 12948409.558918482,\n          y: 4856120.2980670845,\n        },\n        {\n          x: 12950197.88091994,\n          y: 4856127.655709365,\n        },\n        {\n          x: 12950522.56167453,\n          y: 4856128.972474555,\n        },\n        {\n          x: 12952789.177160164,\n          y: 4856124.15803456,\n        },\n        {\n          x: 12953464.615126304,\n          y: 4856122.0006891955,\n        },\n        {\n          x: 12954530.376567366,\n          y: 4856151.814350079,\n        },\n        {\n          x: 12955417.241989752,\n          y: 4856201.3555319505,\n        },\n        {\n          x: 12956068.761834681,\n          y: 4856237.46303956,\n        },\n        {\n          x: 12956833.347700687,\n          y: 4856274.21357933,\n        },\n        {\n          x: 12958297.780383743,\n          y: 4856277.010194032,\n        },\n        {\n          x: 12958569.623250166,\n          y: 4856268.920119228,\n        },\n        {\n          x: 12958601.133725567,\n          y: 4855382.984479329,\n        },\n        {\n          x: 12958611.676282825,\n          y: 4855232.673994465,\n        },\n        {\n          x: 12958632.866942339,\n          y: 4855139.665765479,\n        },\n        {\n          x: 12958688.973578054,\n          y: 4855045.110782978,\n        },\n        {\n          x: 12958728.4139951,\n          y: 4855000.874038989,\n        },\n        {\n          x: 12958770.892719645,\n          y: 4854961.207780969,\n        },\n        {\n          x: 12958799.677543039,\n          y: 4854945.921102297,\n        },\n        {\n          x: 12959324.962061018,\n          y: 4854945.451113535,\n        },\n        {\n          x: 12959585.872160498,\n          y: 4854945.153439757,\n        },\n        {\n          x: 12961042.442201044,\n          y: 4854962.677000188,\n        },\n        {\n          x: 12961432.109595038,\n          y: 4854972.467899889,\n        },\n        {\n          x: 12961926.386577822,\n          y: 4854934.294285994,\n        },\n        {\n          x: 12962148.74759053,\n          y: 4854917.131482158,\n        },\n        {\n          x: 12962283.599321207,\n          y: 4854895.403863202,\n        },\n        {\n          x: 12962563.81989391,\n          y: 4854825.953182589,\n        },\n        {\n          x: 12962930.401073314,\n          y: 4854769.91200932,\n        },\n        {\n          x: 12963190.916752387,\n          y: 4854738.551506216,\n        },\n        {\n          x: 12964441.84613731,\n          y: 4854799.404628956,\n        },\n        {\n          x: 12964524.312877567,\n          y: 4854798.896359394,\n        },\n        {\n          x: 12965180.991672397,\n          y: 4854794.927301339,\n        },\n        {\n          x: 12965609.29152333,\n          y: 4854782.320431698,\n        },\n        {\n          x: 12965890.746902762,\n          y: 4854765.761862335,\n        },\n        {\n          x: 12966166.126872526,\n          y: 4854749.201512711,\n        },\n        {\n          x: 12966285.65860789,\n          y: 4854745.572490727,\n        },\n        {\n          x: 12966514.13404955,\n          y: 4854747.498023047,\n        },\n        {\n          x: 12967120.576418092,\n          y: 4854750.252015507,\n        },\n        {\n          x: 12968417.872233221,\n          y: 4854755.563269503,\n        },\n        {\n          x: 12968618.637517042,\n          y: 4854756.352373138,\n        },\n        {\n          x: 12969113.28223611,\n          y: 4854778.000756352,\n        },\n        {\n          x: 12969684.88717921,\n          y: 4854779.300801552,\n        },\n        {\n          x: 12970067.575502042,\n          y: 4854781.712135722,\n        },\n        {\n          x: 12970534.989097549,\n          y: 4854786.685865359,\n        },\n        {\n          x: 12970699.884643015,\n          y: 4854793.3733178545,\n        },\n        {\n          x: 12970823.931856325,\n          y: 4854795.719200881,\n        },\n        {\n          x: 12970982.830224,\n          y: 4854826.832892539,\n        },\n        {\n          x: 12971113.005257478,\n          y: 4854865.732206641,\n        },\n        {\n          x: 12971202.287273336,\n          y: 4854878.94766238,\n        },\n        {\n          x: 12971370.206297623,\n          y: 4854874.950868926,\n        },\n        {\n          x: 12972309.189289698,\n          y: 4854855.496835954,\n        },\n        {\n          x: 12973018.812017871,\n          y: 4854841.117131226,\n        },\n        {\n          x: 12973547.047963066,\n          y: 4854830.666734374,\n        },\n        {\n          x: 12974064.854700932,\n          y: 4854852.350465733,\n        },\n        {\n          x: 12974472.82455872,\n          y: 4854876.455052272,\n        },\n        {\n          x: 12975051.371356072,\n          y: 4854904.052996347,\n        },\n        {\n          x: 12975605.826026462,\n          y: 4854907.507188204,\n        },\n        {\n          x: 12975778.549655946,\n          y: 4854906.705688043,\n        },\n        {\n          x: 12976205.686714906,\n          y: 4854908.883752931,\n        },\n        {\n          x: 12977221.096053148,\n          y: 4854914.252570144,\n        },\n        {\n          x: 12977364.010499585,\n          y: 4854929.9394761175,\n        },\n        {\n          x: 12977849.475332348,\n          y: 4854987.676906845,\n        },\n        {\n          x: 12978108.4311247,\n          y: 4855013.81299573,\n        },\n        {\n          x: 12978521.22706543,\n          y: 4855058.406105899,\n        },\n        {\n          x: 12980109.377856214,\n          y: 4855165.781190299,\n        },\n        {\n          x: 12980283.977902222,\n          y: 4855177.638637634,\n        },\n        {\n          x: 12980489.227525037,\n          y: 4855187.924099469,\n        },\n        {\n          x: 12980583.71991004,\n          y: 4855179.543517038,\n        },\n        {\n          x: 12980688.925014246,\n          y: 4855138.6160322325,\n        },\n        {\n          x: 12980767.103468414,\n          y: 4855089.631526497,\n        },\n        {\n          x: 12980869.512862012,\n          y: 4855013.486901767,\n        },\n        {\n          x: 12981090.661572816,\n          y: 4854899.114190809,\n        },\n        {\n          x: 12981198.816266755,\n          y: 4854879.956045967,\n        },\n        {\n          x: 12981320.40982718,\n          y: 4854890.50993648,\n        },\n        {\n          x: 12982163.741886314,\n          y: 4855124.274679628,\n        },\n      ],\n    },\n    {\n      id: \"8\",\n      source: \"16\",\n      target: \"17\",\n      class: \"地铁九号线\",\n      name: \"地铁九号线 0\",\n      controlPoints: [\n        {\n          x: 12946648.06073432,\n          y: 4839260.025729084,\n        },\n        {\n          x: 12946544.074465087,\n          y: 4839619.202216059,\n        },\n        {\n          x: 12946445.496254807,\n          y: 4839771.777087536,\n        },\n        {\n          x: 12946363.495286731,\n          y: 4839808.518510458,\n        },\n        {\n          x: 12946292.702186562,\n          y: 4839843.812617867,\n        },\n        {\n          x: 12946221.884510016,\n          y: 4839925.221959326,\n        },\n        {\n          x: 12946200.062497655,\n          y: 4839988.63678963,\n        },\n        {\n          x: 12946126.464738874,\n          y: 4840577.558530562,\n        },\n        {\n          x: 12946154.121327115,\n          y: 4841454.65715364,\n        },\n        {\n          x: 12946159.216413628,\n          y: 4841615.166540137,\n        },\n        {\n          x: 12946163.133984758,\n          y: 4841750.3172009885,\n        },\n        {\n          x: 12946166.16397019,\n          y: 4841854.414496068,\n        },\n        {\n          x: 12946134.718988903,\n          y: 4842145.305047408,\n        },\n        {\n          x: 12946011.482648093,\n          y: 4842839.443615038,\n        },\n        {\n          x: 12945967.3702783,\n          y: 4843175.101744513,\n        },\n        {\n          x: 12945875.098454604,\n          y: 4843833.607067226,\n        },\n        {\n          x: 12945815.866086949,\n          y: 4844216.664802826,\n        },\n        {\n          x: 12945773.952396747,\n          y: 4844701.295741741,\n        },\n        {\n          x: 12945762.960414361,\n          y: 4844884.183169307,\n        },\n        {\n          x: 12945811.645641796,\n          y: 4846485.73907944,\n        },\n        {\n          x: 12945821.760873735,\n          y: 4846713.698002954,\n        },\n        {\n          x: 12945850.240499485,\n          y: 4847377.283903233,\n        },\n        {\n          x: 12945860.277378498,\n          y: 4847457.126713241,\n        },\n        {\n          x: 12945889.251105716,\n          y: 4847545.70699325,\n        },\n        {\n          x: 12946012.904132249,\n          y: 4847683.799611397,\n        },\n        {\n          x: 12946527.681154523,\n          y: 4848401.627416125,\n        },\n        {\n          x: 12946550.388778795,\n          y: 4848450.652934715,\n        },\n        {\n          x: 12946578.885636054,\n          y: 4848483.879589509,\n        },\n        {\n          x: 12946614.230164707,\n          y: 4848509.121830013,\n        },\n        {\n          x: 12946687.204717232,\n          y: 4848555.03996301,\n        },\n        {\n          x: 12946714.570161361,\n          y: 4848573.402833471,\n        },\n        {\n          x: 12946927.965178315,\n          y: 4848771.050237301,\n        },\n        {\n          x: 12947039.251749933,\n          y: 4848874.121019451,\n        },\n        {\n          x: 12947590.671676153,\n          y: 4849210.0301651545,\n        },\n        {\n          x: 12947894.176283287,\n          y: 4849394.908355361,\n        },\n        {\n          x: 12948001.161563184,\n          y: 4849454.528594686,\n        },\n        {\n          x: 12948726.115618171,\n          y: 4849833.574366419,\n        },\n        {\n          x: 12948780.697656307,\n          y: 4849859.709410215,\n        },\n        {\n          x: 12948804.10908822,\n          y: 4849909.061453937,\n        },\n        {\n          x: 12948808.591585146,\n          y: 4849968.572800762,\n        },\n        {\n          x: 12948813.15515829,\n          y: 4850598.421530288,\n        },\n        {\n          x: 12949122.850263117,\n          y: 4852505.623073113,\n        },\n        {\n          x: 12949328.200350346,\n          y: 4854831.558034923,\n        },\n        {\n          x: 12949353.269647257,\n          y: 4856109.000245334,\n        },\n        {\n          x: 12949291.632125383,\n          y: 4857143.131243851,\n        },\n      ],\n    },\n    {\n      id: \"9\",\n      source: \"18\",\n      target: \"19\",\n      class: \"地铁八号线\",\n      name: \"地铁八号线 0\",\n      controlPoints: [\n        {\n          x: 12957190.97175418,\n          y: 4856829.187045242,\n        },\n        {\n          x: 12957268.3578042,\n          y: 4856387.328711017,\n        },\n        {\n          x: 12957289.353013203,\n          y: 4856359.317449307,\n        },\n        {\n          x: 12957331.343025276,\n          y: 4856327.797491008,\n        },\n        {\n          x: 12957376.831138888,\n          y: 4856317.277947678,\n        },\n        {\n          x: 12957891.704380175,\n          y: 4856296.418069313,\n        },\n      ],\n    },\n    {\n      id: \"10\",\n      source: \"20\",\n      target: \"21\",\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 0\",\n      controlPoints: [\n        {\n          x: 12947094.115985483,\n          y: 4873731.336740117,\n        },\n        {\n          x: 12947072.54413634,\n          y: 4873784.735931892,\n        },\n        {\n          x: 12947042.017514793,\n          y: 4873859.579611177,\n        },\n        {\n          x: 12946995.4508778,\n          y: 4873970.753583026,\n        },\n        {\n          x: 12946943.109137688,\n          y: 4874095.283923113,\n        },\n        {\n          x: 12946899.787751423,\n          y: 4874206.107863865,\n        },\n        {\n          x: 12946881.01472949,\n          y: 4874253.759727108,\n        },\n        {\n          x: 12946789.68802783,\n          y: 4874467.089710582,\n        },\n        {\n          x: 12946751.78362451,\n          y: 4874555.5292996485,\n        },\n        {\n          x: 12946700.523958035,\n          y: 4874674.650758464,\n        },\n        {\n          x: 12946655.766671386,\n          y: 4874767.410641011,\n        },\n        {\n          x: 12946571.364045683,\n          y: 4874925.748577232,\n        },\n        {\n          x: 12946510.5646055,\n          y: 4875031.897509199,\n        },\n        {\n          x: 12946472.444944305,\n          y: 4875099.449536901,\n        },\n        {\n          x: 12946378.125857558,\n          y: 4875270.873813889,\n        },\n        {\n          x: 12946315.432537835,\n          y: 4875442.5781064425,\n        },\n        {\n          x: 12945987.019381497,\n          y: 4876429.405849195,\n        },\n        {\n          x: 12945494.324537683,\n          y: 4877247.425781118,\n        },\n        {\n          x: 12945212.872442825,\n          y: 4877783.708641315,\n        },\n        {\n          x: 12944881.49739096,\n          y: 4878774.737871047,\n        },\n        {\n          x: 12944906.896743502,\n          y: 4879158.180641696,\n        },\n        {\n          x: 12945532.959607262,\n          y: 4879647.417083359,\n        },\n        {\n          x: 12946150.468651066,\n          y: 4879791.647184245,\n        },\n        {\n          x: 12946905.53928399,\n          y: 4879921.626008038,\n        },\n        {\n          x: 12947757.621608311,\n          y: 4880143.70392179,\n        },\n        {\n          x: 12948030.412870025,\n          y: 4880398.632118471,\n        },\n        {\n          x: 12948052.616659699,\n          y: 4880692.773681223,\n        },\n        {\n          x: 12947846.20854383,\n          y: 4881514.465746558,\n        },\n        {\n          x: 12947597.065183768,\n          y: 4882366.221916524,\n        },\n        {\n          x: 12947351.139175126,\n          y: 4883370.132124624,\n        },\n        {\n          x: 12947176.67206149,\n          y: 4883933.272704212,\n        },\n        {\n          x: 12946774.041093351,\n          y: 4884211.771737467,\n        },\n        {\n          x: 12946459.054291379,\n          y: 4884228.537864571,\n        },\n        {\n          x: 12945934.213743346,\n          y: 4884401.946771053,\n        },\n        {\n          x: 12945765.765805947,\n          y: 4884775.110386402,\n        },\n        {\n          x: 12945765.322226081,\n          y: 4884788.004333703,\n        },\n        {\n          x: 12945769.507831955,\n          y: 4885435.210764532,\n        },\n        {\n          x: 12945706.715861775,\n          y: 4886123.159872877,\n        },\n        {\n          x: 12945619.689717943,\n          y: 4886769.72363822,\n        },\n        {\n          x: 12945442.673617564,\n          y: 4887206.479468694,\n        },\n        {\n          x: 12945265.150235325,\n          y: 4887443.841590078,\n        },\n        {\n          x: 12944956.967706354,\n          y: 4887910.572665611,\n        },\n        {\n          x: 12944764.2703165,\n          y: 4888414.954761419,\n        },\n        {\n          x: 12944490.393851373,\n          y: 4889211.049688148,\n        },\n        {\n          x: 12944158.000725761,\n          y: 4890227.3009047955,\n        },\n        {\n          x: 12943939.50054619,\n          y: 4890938.589379339,\n        },\n        {\n          x: 12943741.193033013,\n          y: 4891765.333179633,\n        },\n        {\n          x: 12943523.89343197,\n          y: 4892817.059629789,\n        },\n        {\n          x: 12943477.185800951,\n          y: 4893223.648609116,\n        },\n        {\n          x: 12943632.832055906,\n          y: 4893581.194364219,\n        },\n        {\n          x: 12944230.352351204,\n          y: 4893813.015893581,\n        },\n        {\n          x: 12944907.808217492,\n          y: 4894017.717405242,\n        },\n        {\n          x: 12945120.621122792,\n          y: 4894152.507246883,\n        },\n        {\n          x: 12945341.919177428,\n          y: 4894481.916219006,\n        },\n      ],\n    },\n    {\n      id: \"11\",\n      source: \"22\",\n      target: \"23\",\n      class: \"地铁八通线\",\n      name: \"地铁八通线 0\",\n      controlPoints: [\n        {\n          x: 12970985.252146643,\n          y: 4852637.932500459,\n        },\n        {\n          x: 12971008.063154463,\n          y: 4852637.603850775,\n        },\n        {\n          x: 12971057.7816163,\n          y: 4852638.1331448015,\n        },\n        {\n          x: 12971134.73710355,\n          y: 4852640.9154947065,\n        },\n        {\n          x: 12971179.237531189,\n          y: 4852645.416718783,\n        },\n        {\n          x: 12971201.570727265,\n          y: 4852648.649302951,\n        },\n        {\n          x: 12971249.17801756,\n          y: 4852658.196621391,\n        },\n        {\n          x: 12971255.746157914,\n          y: 4852659.512994105,\n        },\n        {\n          x: 12971346.991565293,\n          y: 4852680.378101265,\n        },\n        {\n          x: 12971465.503559206,\n          y: 4852715.45222975,\n        },\n        {\n          x: 12971556.44305453,\n          y: 4852739.194460047,\n        },\n        {\n          x: 12971603.653185746,\n          y: 4852750.417086441,\n        },\n        {\n          x: 12971652.445129333,\n          y: 4852760.353265841,\n        },\n        {\n          x: 12971690.783407204,\n          y: 4852768.115819445,\n        },\n        {\n          x: 12971748.39988629,\n          y: 4852774.830285477,\n        },\n        {\n          x: 12971832.350691043,\n          y: 4852785.209187933,\n        },\n        {\n          x: 12971909.010570884,\n          y: 4852791.801163421,\n        },\n        {\n          x: 12971924.359283764,\n          y: 4852792.523685262,\n        },\n        {\n          x: 12971999.921089781,\n          y: 4852796.079471216,\n        },\n        {\n          x: 12972107.290890923,\n          y: 4852793.567220141,\n        },\n        {\n          x: 12972304.93984065,\n          y: 4852791.354142118,\n        },\n        {\n          x: 12972304.939940628,\n          y: 4852791.354142104,\n        },\n        {\n          x: 12972558.358169641,\n          y: 4852786.198665246,\n        },\n        {\n          x: 12972686.068063304,\n          y: 4852781.700119552,\n        },\n        {\n          x: 12972843.240578711,\n          y: 4852778.233391634,\n        },\n        {\n          x: 12972922.890764125,\n          y: 4852776.13617569,\n        },\n        {\n          x: 12973043.782765854,\n          y: 4852773.582308092,\n        },\n        {\n          x: 12973160.438646115,\n          y: 4852771.291533754,\n        },\n        {\n          x: 12973301.369215274,\n          y: 4852766.977022844,\n        },\n        {\n          x: 12973376.555572206,\n          y: 4852766.575507644,\n        },\n        {\n          x: 12973483.79407899,\n          y: 4852764.105804903,\n        },\n        {\n          x: 12973602.57893526,\n          y: 4852764.972085765,\n        },\n        {\n          x: 12973986.241797326,\n          y: 4852757.068452248,\n        },\n        {\n          x: 12974216.115580516,\n          y: 4852753.700414064,\n        },\n        {\n          x: 12974536.719347281,\n          y: 4852751.372519053,\n        },\n        {\n          x: 12974901.466203645,\n          y: 4852758.063962363,\n        },\n        {\n          x: 12974983.483695555,\n          y: 4852759.700171818,\n        },\n        {\n          x: 12975075.477382166,\n          y: 4852761.366109267,\n        },\n        {\n          x: 12975146.21345055,\n          y: 4852762.740995125,\n        },\n        {\n          x: 12975252.652350875,\n          y: 4852765.001749013,\n        },\n        {\n          x: 12975418.029274665,\n          y: 4852769.231663441,\n        },\n        {\n          x: 12975512.274773095,\n          y: 4852771.693583396,\n        },\n        {\n          x: 12975667.430020995,\n          y: 4852774.665220624,\n        },\n        {\n          x: 12975945.482280165,\n          y: 4852780.652428524,\n        },\n        {\n          x: 12976048.941242512,\n          y: 4852783.088273825,\n        },\n        {\n          x: 12976157.13466884,\n          y: 4852786.1686903015,\n        },\n        {\n          x: 12976200.541262798,\n          y: 4852787.159456441,\n        },\n        {\n          x: 12976234.258291336,\n          y: 4852787.5677579185,\n        },\n        {\n          x: 12976365.991912834,\n          y: 4852790.688773559,\n        },\n        {\n          x: 12976483.576280847,\n          y: 4852793.632750944,\n        },\n        {\n          x: 12976521.657226892,\n          y: 4852795.637126801,\n        },\n        {\n          x: 12976580.431624653,\n          y: 4852800.4899075935,\n        },\n        {\n          x: 12976630.833259074,\n          y: 4852806.145179798,\n        },\n        {\n          x: 12976695.08046594,\n          y: 4852815.315654606,\n        },\n        {\n          x: 12976729.999958823,\n          y: 4852820.657543227,\n        },\n        {\n          x: 12976776.474955026,\n          y: 4852827.352541805,\n        },\n        {\n          x: 12976812.252139,\n          y: 4852833.2147945,\n        },\n        {\n          x: 12976815.968375333,\n          y: 4852833.822868197,\n        },\n        {\n          x: 12976885.429953378,\n          y: 4852844.764512234,\n        },\n        {\n          x: 12976975.596115217,\n          y: 4852858.43044723,\n        },\n        {\n          x: 12977055.606962522,\n          y: 4852871.247395306,\n        },\n        {\n          x: 12977150.103301922,\n          y: 4852886.690040669,\n        },\n        {\n          x: 12977164.484104557,\n          y: 4852889.144325767,\n        },\n        {\n          x: 12977349.452764807,\n          y: 4852911.35750741,\n        },\n        {\n          x: 12977396.826802246,\n          y: 4852914.6312842835,\n        },\n        {\n          x: 12977445.21322845,\n          y: 4852917.3740233835,\n        },\n        {\n          x: 12977499.905881032,\n          y: 4852919.653667679,\n        },\n        {\n          x: 12977561.24229945,\n          y: 4852918.623041482,\n        },\n        {\n          x: 12977618.078808535,\n          y: 4852916.964759332,\n        },\n        {\n          x: 12977670.621610347,\n          y: 4852911.879830347,\n        },\n        {\n          x: 12977751.148635335,\n          y: 4852902.670739922,\n        },\n        {\n          x: 12977786.88548381,\n          y: 4852897.948010646,\n        },\n        {\n          x: 12977824.596628416,\n          y: 4852892.215955226,\n        },\n        {\n          x: 12977838.222668163,\n          y: 4852889.785354156,\n        },\n        {\n          x: 12977897.63684129,\n          y: 4852879.987122803,\n        },\n        {\n          x: 12978112.587513769,\n          y: 4852847.147889897,\n        },\n        {\n          x: 12978212.010580407,\n          y: 4852831.849550509,\n        },\n        {\n          x: 12978289.722346092,\n          y: 4852819.825778696,\n        },\n        {\n          x: 12978376.198797919,\n          y: 4852806.369032904,\n        },\n        {\n          x: 12978443.1247446,\n          y: 4852796.941799674,\n        },\n        {\n          x: 12978511.962721677,\n          y: 4852789.040221515,\n        },\n        {\n          x: 12978556.675266935,\n          y: 4852784.800445814,\n        },\n        {\n          x: 12978603.675698506,\n          y: 4852781.445204418,\n        },\n        {\n          x: 12978657.285893984,\n          y: 4852778.451914039,\n        },\n        {\n          x: 12978800.565625936,\n          y: 4852773.68229988,\n        },\n        {\n          x: 12978914.98070244,\n          y: 4852769.67853182,\n        },\n        {\n          x: 12979058.626918213,\n          y: 4852765.050844271,\n        },\n        {\n          x: 12979117.93108979,\n          y: 4852764.395843838,\n        },\n        {\n          x: 12979200.907964638,\n          y: 4852760.896022486,\n        },\n        {\n          x: 12979376.070149522,\n          y: 4852755.492429703,\n        },\n        {\n          x: 12979821.264409432,\n          y: 4852740.865419091,\n        },\n        {\n          x: 12979869.005644636,\n          y: 4852738.659817284,\n        },\n        {\n          x: 12980006.684293807,\n          y: 4852733.642694393,\n        },\n        {\n          x: 12980010.412107708,\n          y: 4852733.505705852,\n        },\n        {\n          x: 12980102.14796544,\n          y: 4852731.09585125,\n        },\n        {\n          x: 12980102.150365561,\n          y: 4852731.095751376,\n        },\n        {\n          x: 12980241.426094191,\n          y: 4852724.458911123,\n        },\n        {\n          x: 12980383.972661799,\n          y: 4852720.275860491,\n        },\n        {\n          x: 12980452.567191115,\n          y: 4852718.295604612,\n        },\n        {\n          x: 12980501.279651301,\n          y: 4852717.168056968,\n        },\n        {\n          x: 12980511.817043953,\n          y: 4852716.940679275,\n        },\n        {\n          x: 12980527.720170368,\n          y: 4852714.900895137,\n        },\n        {\n          x: 12980546.205864942,\n          y: 4852712.0589568885,\n        },\n        {\n          x: 12980556.739903979,\n          y: 4852710.6345186,\n        },\n        {\n          x: 12980575.024717016,\n          y: 4852707.192393184,\n        },\n        {\n          x: 12980600.064811092,\n          y: 4852702.138990685,\n        },\n        {\n          x: 12980620.733107321,\n          y: 4852697.095017998,\n        },\n        {\n          x: 12980641.992123496,\n          y: 4852691.0518540675,\n        },\n        {\n          x: 12980667.422524082,\n          y: 4852682.803530873,\n        },\n        {\n          x: 12980697.81666234,\n          y: 4852671.350689514,\n        },\n        {\n          x: 12980750.44375973,\n          y: 4852646.269770028,\n        },\n        {\n          x: 12980789.758654011,\n          y: 4852625.613153645,\n        },\n        {\n          x: 12980817.158831125,\n          y: 4852610.176831961,\n        },\n        {\n          x: 12980871.562055342,\n          y: 4852579.505635189,\n        },\n        {\n          x: 12980917.628692484,\n          y: 4852553.447517574,\n        },\n        {\n          x: 12981043.583099704,\n          y: 4852484.690581212,\n        },\n        {\n          x: 12981099.336563937,\n          y: 4852456.01893319,\n        },\n        {\n          x: 12981140.890511304,\n          y: 4852432.9686271055,\n        },\n        {\n          x: 12981182.135998141,\n          y: 4852411.356320457,\n        },\n        {\n          x: 12981255.809566528,\n          y: 4852369.673110186,\n        },\n        {\n          x: 12981306.254684363,\n          y: 4852342.213287527,\n        },\n        {\n          x: 12981355.360464152,\n          y: 4852316.156478455,\n        },\n        {\n          x: 12981380.125408497,\n          y: 4852304.328818308,\n        },\n        {\n          x: 12981404.370375846,\n          y: 4852293.9445663355,\n        },\n        {\n          x: 12981411.357722916,\n          y: 4852291.019192892,\n        },\n        {\n          x: 12981429.138416857,\n          y: 4852284.705685185,\n        },\n        {\n          x: 12981449.445248626,\n          y: 4852278.144038033,\n        },\n        {\n          x: 12981466.988468504,\n          y: 4852273.038244298,\n        },\n        {\n          x: 12981483.934169278,\n          y: 4852269.01732057,\n        },\n        {\n          x: 12981501.72129354,\n          y: 4852264.633525485,\n        },\n        {\n          x: 12981521.195052542,\n          y: 4852260.970876668,\n        },\n        {\n          x: 12981540.429482171,\n          y: 4852257.912291013,\n        },\n        {\n          x: 12981556.300366443,\n          y: 4852255.823523872,\n        },\n        {\n          x: 12981570.366991611,\n          y: 4852253.983978159,\n        },\n        {\n          x: 12981590.808079034,\n          y: 4852252.37024785,\n        },\n        {\n          x: 12981606.562289793,\n          y: 4852251.488995252,\n        },\n        {\n          x: 12981636.507357743,\n          y: 4852250.579113849,\n        },\n        {\n          x: 12981656.356278451,\n          y: 4852250.896393729,\n        },\n        {\n          x: 12981692.086214192,\n          y: 4852252.868202504,\n        },\n        {\n          x: 12981714.223939104,\n          y: 4852254.872887953,\n        },\n        {\n          x: 12981755.862461897,\n          y: 4852261.416093576,\n        },\n        {\n          x: 12981787.756915031,\n          y: 4852268.344546958,\n        },\n        {\n          x: 12981824.48947952,\n          y: 4852277.740325138,\n        },\n        {\n          x: 12982006.994348593,\n          y: 4852327.843007399,\n        },\n        {\n          x: 12982014.941592565,\n          y: 4852330.480576966,\n        },\n        {\n          x: 12982026.402121745,\n          y: 4852333.381042817,\n        },\n        {\n          x: 12982040.946943458,\n          y: 4852337.063108767,\n        },\n        {\n          x: 12982067.796619976,\n          y: 4852344.124059822,\n        },\n        {\n          x: 12982082.244231999,\n          y: 4852347.351909036,\n        },\n        {\n          x: 12982111.255736986,\n          y: 4852353.085681991,\n        },\n        {\n          x: 12982129.791819442,\n          y: 4852355.941803544,\n        },\n        {\n          x: 12982150.73459613,\n          y: 4852358.6745200455,\n        },\n        {\n          x: 12982173.599064307,\n          y: 4852360.678826859,\n        },\n        {\n          x: 12982199.590729142,\n          y: 4852362.073329141,\n        },\n        {\n          x: 12982224.25684918,\n          y: 4852362.508778318,\n        },\n        {\n          x: 12982242.781496631,\n          y: 4852362.108043774,\n        },\n        {\n          x: 12982265.278136691,\n          y: 4852361.098500819,\n        },\n        {\n          x: 12982291.742691308,\n          y: 4852358.874468977,\n        },\n        {\n          x: 12982315.67474395,\n          y: 4852355.811827975,\n        },\n        {\n          x: 12982335.035976896,\n          y: 4852352.394862233,\n        },\n        {\n          x: 12982357.042847889,\n          y: 4852348.851728803,\n        },\n        {\n          x: 12982382.295058098,\n          y: 4852343.857827946,\n        },\n        {\n          x: 12982417.531268932,\n          y: 4852337.395309842,\n        },\n        {\n          x: 12982448.197524806,\n          y: 4852331.785528333,\n        },\n        {\n          x: 12982478.86330164,\n          y: 4852326.658255823,\n        },\n        {\n          x: 12982531.423479121,\n          y: 4852319.199320662,\n        },\n        {\n          x: 12982583.51522219,\n          y: 4852315.239714849,\n        },\n        {\n          x: 12982619.249260034,\n          y: 4852313.483230399,\n        },\n        {\n          x: 12982707.726446714,\n          y: 4852311.01354565,\n        },\n        {\n          x: 12982818.643484026,\n          y: 4852310.195081021,\n        },\n        {\n          x: 12982926.718911368,\n          y: 4852308.423580399,\n        },\n        {\n          x: 12982969.351654056,\n          y: 4852307.719497175,\n        },\n        {\n          x: 12983023.546593202,\n          y: 4852306.599390685,\n        },\n        {\n          x: 12983109.423810175,\n          y: 4852304.789328974,\n        },\n        {\n          x: 12983167.539974144,\n          y: 4852304.283514513,\n        },\n        {\n          x: 12983217.219463198,\n          y: 4852303.191877694,\n        },\n        {\n          x: 12983281.254377576,\n          y: 4852302.216069689,\n        },\n        {\n          x: 12983366.75675525,\n          y: 4852300.701005913,\n        },\n        {\n          x: 12983452.20281669,\n          y: 4852299.1755383825,\n        },\n        {\n          x: 12983534.11611313,\n          y: 4852296.359641885,\n        },\n        {\n          x: 12983559.667424409,\n          y: 4852295.629501179,\n        },\n        {\n          x: 12983601.161266102,\n          y: 4852294.627091015,\n        },\n        {\n          x: 12983611.984969016,\n          y: 4852293.890433964,\n        },\n        {\n          x: 12983622.368472738,\n          y: 4852292.692271228,\n        },\n        {\n          x: 12983631.964793393,\n          y: 4852291.967613732,\n        },\n        {\n          x: 12983642.347676827,\n          y: 4852290.532228432,\n        },\n        {\n          x: 12983664.288969724,\n          y: 4852286.790795176,\n        },\n        {\n          x: 12983681.665854465,\n          y: 4852283.294093203,\n        },\n        {\n          x: 12983691.650165133,\n          y: 4852280.518425564,\n        },\n        {\n          x: 12983704.937446222,\n          y: 4852276.871566698,\n        },\n        {\n          x: 12983719.485094307,\n          y: 4852271.960088485,\n        },\n        {\n          x: 12983734.576153021,\n          y: 4852266.573224977,\n        },\n        {\n          x: 12983749.349894535,\n          y: 4852260.636238543,\n        },\n        {\n          x: 12983764.356448224,\n          y: 4852253.439065454,\n        },\n        {\n          x: 12983783.229950167,\n          y: 4852243.675282068,\n        },\n        {\n          x: 12983809.54016834,\n          y: 4852227.647694631,\n        },\n        {\n          x: 12983819.177255707,\n          y: 4852221.021988448,\n        },\n        {\n          x: 12983830.24508297,\n          y: 4852212.4117375035,\n        },\n        {\n          x: 12983845.626987867,\n          y: 4852200.007109512,\n        },\n        {\n          x: 12983856.53356637,\n          y: 4852190.291205582,\n        },\n        {\n          x: 12983870.184671514,\n          y: 4852177.732756121,\n        },\n        {\n          x: 12983883.752366735,\n          y: 4852163.04569551,\n        },\n        {\n          x: 12983893.242055438,\n          y: 4852153.491082963,\n        },\n        {\n          x: 12983901.156669818,\n          y: 4852143.226680874,\n        },\n        {\n          x: 12983911.419729222,\n          y: 4852128.860448257,\n        },\n        {\n          x: 12983920.032326968,\n          y: 4852115.678436422,\n        },\n        {\n          x: 12983928.333826244,\n          y: 4852103.047421788,\n        },\n        {\n          x: 12983936.314326718,\n          y: 4852088.763105886,\n        },\n        {\n          x: 12983946.18360984,\n          y: 4852068.498493203,\n        },\n        {\n          x: 12984045.08972995,\n          y: 4851885.404455599,\n        },\n        {\n          x: 12984080.804905687,\n          y: 4851817.337034466,\n        },\n        {\n          x: 12984134.748354,\n          y: 4851706.836804487,\n        },\n        {\n          x: 12984195.8623765,\n          y: 4851591.525543062,\n        },\n        {\n          x: 12984254.587788567,\n          y: 4851478.621198026,\n        },\n        {\n          x: 12984307.768564539,\n          y: 4851379.326535712,\n        },\n        {\n          x: 12984344.27421628,\n          y: 4851308.864740265,\n        },\n        {\n          x: 12984375.225174434,\n          y: 4851249.609910724,\n        },\n        {\n          x: 12984415.701271733,\n          y: 4851172.74323114,\n        },\n        {\n          x: 12984461.729403371,\n          y: 4851084.666569579,\n        },\n        {\n          x: 12984517.277267791,\n          y: 4850976.575614915,\n        },\n        {\n          x: 12984628.35638987,\n          y: 4850756.39703862,\n        },\n        {\n          x: 12984643.441411281,\n          y: 4850729.173746353,\n        },\n        {\n          x: 12984659.718515014,\n          y: 4850700.1083314745,\n        },\n        {\n          x: 12984681.711487297,\n          y: 4850670.601281623,\n        },\n        {\n          x: 12984717.725659953,\n          y: 4850629.896011068,\n        },\n        {\n          x: 12984754.999484044,\n          y: 4850595.784380661,\n        },\n        {\n          x: 12984794.35474119,\n          y: 4850566.24036794,\n        },\n        {\n          x: 12984822.179769346,\n          y: 4850548.063337961,\n        },\n        {\n          x: 12984863.461169159,\n          y: 4850526.723240278,\n        },\n        {\n          x: 12984915.289983816,\n          y: 4850505.12020892,\n        },\n        {\n          x: 12984951.72965507,\n          y: 4850491.149559257,\n        },\n        {\n          x: 12985164.594748862,\n          y: 4850408.269419757,\n        },\n        {\n          x: 12985223.73663421,\n          y: 4850386.334720776,\n        },\n        {\n          x: 12985231.332473703,\n          y: 4850382.288306166,\n        },\n        {\n          x: 12985243.255608164,\n          y: 4850375.964354305,\n        },\n        {\n          x: 12985309.485768877,\n          y: 4850350.550316565,\n        },\n        {\n          x: 12985309.485868897,\n          y: 4850350.550316587,\n        },\n        {\n          x: 12986172.233193466,\n          y: 4850032.791403444,\n        },\n        {\n          x: 12986172.8663129,\n          y: 4850032.558329904,\n        },\n        {\n          x: 12986339.175501348,\n          y: 4849968.327595861,\n        },\n        {\n          x: 12986505.507225916,\n          y: 4849904.089056084,\n        },\n        {\n          x: 12986656.604391119,\n          y: 4849847.60963517,\n        },\n        {\n          x: 12986702.483696718,\n          y: 4849828.918664281,\n        },\n        {\n          x: 12986760.975453354,\n          y: 4849792.3676841725,\n        },\n        {\n          x: 12986797.326063676,\n          y: 4849765.012441939,\n        },\n        {\n          x: 12986830.880906345,\n          y: 4849735.181111031,\n        },\n        {\n          x: 12986886.127819829,\n          y: 4849677.217710046,\n        },\n        {\n          x: 12987120.13083682,\n          y: 4849429.888750661,\n        },\n        {\n          x: 12987545.455182405,\n          y: 4848990.56075093,\n        },\n        {\n          x: 12987572.780970717,\n          y: 4848962.972667584,\n        },\n        {\n          x: 12987750.347789623,\n          y: 4848775.995218805,\n        },\n        {\n          x: 12987812.698881118,\n          y: 4848712.132626582,\n        },\n        {\n          x: 12987888.840439832,\n          y: 4848629.514697122,\n        },\n        {\n          x: 12987922.383888729,\n          y: 4848595.374774107,\n        },\n        {\n          x: 12988054.963756831,\n          y: 4848456.434616343,\n        },\n        {\n          x: 12988203.560175221,\n          y: 4848293.895912913,\n        },\n        {\n          x: 12988250.566429619,\n          y: 4848245.193567729,\n        },\n        {\n          x: 12988306.722374829,\n          y: 4848191.552325912,\n        },\n        {\n          x: 12988429.814042207,\n          y: 4848060.358476343,\n        },\n        {\n          x: 12988509.892477134,\n          y: 4847972.732590752,\n        },\n        {\n          x: 12988516.052521963,\n          y: 4847966.473292817,\n        },\n        {\n          x: 12988531.25232795,\n          y: 4847951.020837734,\n        },\n        {\n          x: 12988547.774189414,\n          y: 4847934.22664656,\n        },\n        {\n          x: 12988684.205479793,\n          y: 4847792.520992836,\n        },\n        {\n          x: 12988709.83813206,\n          y: 4847765.978322433,\n        },\n        {\n          x: 12988751.064218508,\n          y: 4847721.917838166,\n        },\n        {\n          x: 12988806.893480845,\n          y: 4847664.753238427,\n        },\n        {\n          x: 12988838.47984446,\n          y: 4847638.4005759265,\n        },\n        {\n          x: 12988863.550537288,\n          y: 4847617.484576525,\n        },\n        {\n          x: 12988871.447747946,\n          y: 4847610.900250857,\n        },\n        {\n          x: 12988928.71596574,\n          y: 4847568.305396379,\n        },\n        {\n          x: 12989015.639990052,\n          y: 4847513.087871169,\n        },\n        {\n          x: 12989070.178705394,\n          y: 4847482.192075563,\n        },\n        {\n          x: 12989148.863691295,\n          y: 4847447.998694799,\n        },\n        {\n          x: 12989221.630766438,\n          y: 4847420.154502207,\n        },\n        {\n          x: 12989339.331564289,\n          y: 4847380.68202523,\n        },\n        {\n          x: 12989542.519483887,\n          y: 4847312.531220079,\n        },\n        {\n          x: 12989591.848173946,\n          y: 4847295.984625068,\n        },\n      ],\n    },\n    {\n      id: \"12\",\n      source: \"24\",\n      target: \"25\",\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 0\",\n      controlPoints: [\n        {\n          x: 12961384.821093876,\n          y: 4857604.895638846,\n        },\n        {\n          x: 12961379.888425605,\n          y: 4857950.407662031,\n        },\n        {\n          x: 12961378.603161972,\n          y: 4858178.984029268,\n        },\n        {\n          x: 12961378.251699504,\n          y: 4858199.941669665,\n        },\n        {\n          x: 12961362.948288757,\n          y: 4859113.050576728,\n        },\n        {\n          x: 12961351.774871988,\n          y: 4859246.305776181,\n        },\n        {\n          x: 12961344.673628464,\n          y: 4859330.995740561,\n        },\n        {\n          x: 12961338.185205506,\n          y: 4859379.136027955,\n        },\n        {\n          x: 12961326.701474292,\n          y: 4859430.3762181355,\n        },\n        {\n          x: 12961296.23872469,\n          y: 4859534.623118192,\n        },\n        {\n          x: 12961279.573160157,\n          y: 4859595.157872784,\n        },\n        {\n          x: 12961271.432916135,\n          y: 4859636.755033974,\n        },\n        {\n          x: 12961227.692613533,\n          y: 4859930.467545727,\n        },\n        {\n          x: 12961219.290961184,\n          y: 4859990.017196776,\n        },\n        {\n          x: 12961215.868152,\n          y: 4860031.195887179,\n        },\n        {\n          x: 12961213.956200192,\n          y: 4860042.603136049,\n        },\n        {\n          x: 12961206.891662417,\n          y: 4860091.520899557,\n        },\n        {\n          x: 12961188.165871859,\n          y: 4860211.789308975,\n        },\n        {\n          x: 12961182.052734978,\n          y: 4860252.9748706035,\n        },\n        {\n          x: 12961177.381970651,\n          y: 4860285.458304639,\n        },\n        {\n          x: 12961133.584798172,\n          y: 4861282.165295659,\n        },\n        {\n          x: 12961131.197062261,\n          y: 4861339.773361728,\n        },\n        {\n          x: 12961125.764970018,\n          y: 4861465.195775947,\n        },\n        {\n          x: 12961124.551248107,\n          y: 4861505.652557301,\n        },\n        {\n          x: 12961122.644612342,\n          y: 4861570.024727552,\n        },\n        {\n          x: 12961122.505511757,\n          y: 4861612.817632623,\n        },\n        {\n          x: 12961126.125387294,\n          y: 4861656.679218022,\n        },\n        {\n          x: 12961134.236030966,\n          y: 4861724.086379644,\n        },\n        {\n          x: 12961147.346890498,\n          y: 4861783.573658952,\n        },\n        {\n          x: 12961169.949061126,\n          y: 4861856.88455326,\n        },\n        {\n          x: 12961190.92239628,\n          y: 4861908.443200537,\n        },\n        {\n          x: 12961244.80679,\n          y: 4862017.212104109,\n        },\n        {\n          x: 12961785.271410704,\n          y: 4863090.557436891,\n        },\n        {\n          x: 12962406.945922375,\n          y: 4864318.974454228,\n        },\n        {\n          x: 12963018.284754738,\n          y: 4865521.493683898,\n        },\n        {\n          x: 12963018.284854762,\n          y: 4865521.493783919,\n        },\n        {\n          x: 12963224.051473433,\n          y: 4866039.3565800125,\n        },\n        {\n          x: 12963500.971012274,\n          y: 4867139.241053313,\n        },\n        {\n          x: 12963650.819367116,\n          y: 4867725.703316142,\n        },\n        {\n          x: 12963888.949552327,\n          y: 4868660.037686641,\n        },\n        {\n          x: 12964153.29996666,\n          y: 4869706.424707541,\n        },\n        {\n          x: 12964161.049777685,\n          y: 4869739.748010959,\n        },\n        {\n          x: 12964169.022003202,\n          y: 4869783.887620618,\n        },\n        {\n          x: 12964169.79918989,\n          y: 4869788.187596136,\n        },\n        {\n          x: 12964170.396725647,\n          y: 4869792.28592288,\n        },\n        {\n          x: 12964178.09229784,\n          y: 4869845.141780633,\n        },\n        {\n          x: 12964182.866363246,\n          y: 4869906.602764703,\n        },\n        {\n          x: 12964186.742670394,\n          y: 4869983.180502373,\n        },\n        {\n          x: 12964187.80107099,\n          y: 4870004.059485736,\n        },\n        {\n          x: 12964194.767189663,\n          y: 4870141.601109272,\n        },\n        {\n          x: 12964195.586355446,\n          y: 4870157.791065987,\n        },\n        {\n          x: 12964195.629143188,\n          y: 4870158.625753281,\n        },\n        {\n          x: 12964197.365642045,\n          y: 4870232.162939279,\n        },\n        {\n          x: 12964199.986983918,\n          y: 4870338.989878203,\n        },\n        {\n          x: 12964198.233979,\n          y: 4870399.4780171625,\n        },\n        {\n          x: 12964195.521848764,\n          y: 4870426.330630218,\n        },\n        {\n          x: 12964189.688597165,\n          y: 4870457.628060375,\n        },\n        {\n          x: 12964178.76505046,\n          y: 4870495.275356304,\n        },\n        {\n          x: 12964167.839258399,\n          y: 4870529.241804792,\n        },\n        {\n          x: 12964156.90262342,\n          y: 4870556.635705516,\n        },\n        {\n          x: 12964139.446759911,\n          y: 4870591.940950339,\n        },\n        {\n          x: 12964119.380342938,\n          y: 4870629.3612662265,\n        },\n        {\n          x: 12964087.063558495,\n          y: 4870686.289743977,\n        },\n        {\n          x: 12964065.951472988,\n          y: 4870723.716488513,\n        },\n        {\n          x: 12964052.918280806,\n          y: 4870746.119234959,\n        },\n        {\n          x: 12964041.187130783,\n          y: 4870764.046505531,\n        },\n        {\n          x: 12964018.239456784,\n          y: 4870796.744059516,\n        },\n        {\n          x: 12963997.373145364,\n          y: 4870821.018842714,\n        },\n        {\n          x: 12963975.979364637,\n          y: 4870842.403550631,\n        },\n        {\n          x: 12963943.620649595,\n          y: 4870869.876901368,\n        },\n        {\n          x: 12963912.565489624,\n          y: 4870894.189978186,\n        },\n        {\n          x: 12963888.553606404,\n          y: 4870910.587164291,\n        },\n        {\n          x: 12963855.921490764,\n          y: 4870928.856058391,\n        },\n        {\n          x: 12963818.847341483,\n          y: 4870946.088721298,\n        },\n        {\n          x: 12963778.372132206,\n          y: 4870961.231012497,\n        },\n        {\n          x: 12963730.060326898,\n          y: 4870976.4015065245,\n        },\n        {\n          x: 12963657.978381645,\n          y: 4870995.602780929,\n        },\n        {\n          x: 12963622.05854108,\n          y: 4871004.430416085,\n        },\n        {\n          x: 12963558.724530451,\n          y: 4871019.810885714,\n        },\n        {\n          x: 12963512.503679566,\n          y: 4871035.906957649,\n        },\n        {\n          x: 12963453.681321735,\n          y: 4871059.763481818,\n        },\n        {\n          x: 12963248.80497939,\n          y: 4871172.328870646,\n        },\n        {\n          x: 12963244.572822267,\n          y: 4871174.658396504,\n        },\n        {\n          x: 12963038.471529033,\n          y: 4871288.035313995,\n        },\n        {\n          x: 12962853.820973437,\n          y: 4871391.186996228,\n        },\n        {\n          x: 12962725.303994041,\n          y: 4871462.571934574,\n        },\n        {\n          x: 12962724.957375426,\n          y: 4871462.752610938,\n        },\n        {\n          x: 12962723.887909118,\n          y: 4871463.345629024,\n        },\n        {\n          x: 12962716.736546198,\n          y: 4871467.315161244,\n        },\n        {\n          x: 12962716.284189595,\n          y: 4871467.567097997,\n        },\n        {\n          x: 12962579.957906647,\n          y: 4871543.225352538,\n        },\n        {\n          x: 12962098.530270364,\n          y: 4871808.314025743,\n        },\n        {\n          x: 12961985.615570927,\n          y: 4871875.438409937,\n        },\n        {\n          x: 12961943.360948866,\n          y: 4871903.003423259,\n        },\n        {\n          x: 12961806.371053975,\n          y: 4871987.009769704,\n        },\n        {\n          x: 12961737.483883223,\n          y: 4872026.3265607115,\n        },\n        {\n          x: 12961633.115452316,\n          y: 4872086.751682198,\n        },\n        {\n          x: 12961545.844782017,\n          y: 4872134.320089415,\n        },\n        {\n          x: 12961361.563495556,\n          y: 4872236.98400638,\n        },\n        {\n          x: 12961327.331658702,\n          y: 4872255.833857056,\n        },\n        {\n          x: 12961251.875342408,\n          y: 4872297.087065438,\n        },\n        {\n          x: 12961204.826219695,\n          y: 4872325.325771341,\n        },\n        {\n          x: 12961132.023615833,\n          y: 4872361.658743605,\n        },\n        {\n          x: 12961052.11865231,\n          y: 4872405.144750871,\n        },\n        {\n          x: 12960972.646711243,\n          y: 4872441.930478759,\n        },\n        {\n          x: 12960858.106042854,\n          y: 4872506.91698905,\n        },\n        {\n          x: 12960760.426450621,\n          y: 4872559.359681711,\n        },\n        {\n          x: 12960724.908352494,\n          y: 4872580.416320622,\n        },\n        {\n          x: 12960641.560702814,\n          y: 4872626.948672511,\n        },\n        {\n          x: 12960409.848923735,\n          y: 4872755.68364987,\n        },\n        {\n          x: 12960214.328045709,\n          y: 4872860.212735837,\n        },\n        {\n          x: 12960127.928549424,\n          y: 4872909.2953869505,\n        },\n        {\n          x: 12960102.655544914,\n          y: 4872922.969133999,\n        },\n        {\n          x: 12960020.162988434,\n          y: 4872967.3561403835,\n        },\n        {\n          x: 12959950.134860648,\n          y: 4873006.403798974,\n        },\n        {\n          x: 12959863.03802686,\n          y: 4873054.88910155,\n        },\n        {\n          x: 12959777.644680386,\n          y: 4873104.258241601,\n        },\n        {\n          x: 12959699.508191582,\n          y: 4873147.282306783,\n        },\n        {\n          x: 12959620.328795532,\n          y: 4873191.4477808075,\n        },\n        {\n          x: 12959477.877193257,\n          y: 4873269.404125038,\n        },\n        {\n          x: 12959357.123719096,\n          y: 4873335.684058211,\n        },\n        {\n          x: 12959338.647690238,\n          y: 4873345.82380848,\n        },\n        {\n          x: 12958925.449787276,\n          y: 4873574.258471447,\n        },\n        {\n          x: 12958914.496696375,\n          y: 4873580.313011027,\n        },\n        {\n          x: 12958908.925432095,\n          y: 4873583.384761498,\n        },\n        {\n          x: 12958469.664608255,\n          y: 4873826.333185746,\n        },\n        {\n          x: 12958317.119431961,\n          y: 4873910.348894859,\n        },\n        {\n          x: 12958173.63725258,\n          y: 4873989.354939118,\n        },\n        {\n          x: 12958109.864433711,\n          y: 4874026.411209632,\n        },\n        {\n          x: 12958056.459419694,\n          y: 4874055.42987156,\n        },\n        {\n          x: 12958035.572431948,\n          y: 4874066.780988242,\n        },\n        {\n          x: 12957541.464879088,\n          y: 4874339.316503633,\n        },\n        {\n          x: 12957541.314450411,\n          y: 4874339.40007746,\n        },\n        {\n          x: 12957515.50602984,\n          y: 4874353.589680841,\n        },\n        {\n          x: 12957515.424667433,\n          y: 4874353.63521974,\n        },\n        {\n          x: 12957178.774763126,\n          y: 4874538.369890689,\n        },\n        {\n          x: 12957143.891148778,\n          y: 4874557.897348821,\n        },\n        {\n          x: 12956953.433700653,\n          y: 4874662.620502712,\n        },\n        {\n          x: 12956865.14112665,\n          y: 4874711.491226545,\n        },\n        {\n          x: 12956730.395010892,\n          y: 4874784.283691582,\n        },\n        {\n          x: 12956584.60989753,\n          y: 4874864.17479837,\n        },\n        {\n          x: 12956514.690003015,\n          y: 4874902.207189248,\n        },\n        {\n          x: 12956415.921079142,\n          y: 4874957.945257982,\n        },\n        {\n          x: 12956350.318605551,\n          y: 4874993.942196934,\n        },\n        {\n          x: 12955970.523661379,\n          y: 4875204.572856644,\n        },\n        {\n          x: 12955961.168925371,\n          y: 4875209.826648806,\n        },\n        {\n          x: 12955608.616340334,\n          y: 4875403.58048848,\n        },\n        {\n          x: 12955424.989326235,\n          y: 4875505.19312055,\n        },\n        {\n          x: 12955208.191654494,\n          y: 4875621.246472876,\n        },\n        {\n          x: 12955106.685266893,\n          y: 4875676.949542184,\n        },\n        {\n          x: 12954909.088653814,\n          y: 4875785.6214146055,\n        },\n        {\n          x: 12954898.699293226,\n          y: 4875791.33469513,\n        },\n        {\n          x: 12954809.86015897,\n          y: 4875840.183103034,\n        },\n        {\n          x: 12954515.78755851,\n          y: 4876003.857567704,\n        },\n        {\n          x: 12954425.351083811,\n          y: 4876047.515434021,\n        },\n        {\n          x: 12954361.536701877,\n          y: 4876075.173523097,\n        },\n        {\n          x: 12954318.522177251,\n          y: 4876092.11950955,\n        },\n        {\n          x: 12954285.295954525,\n          y: 4876103.586379883,\n        },\n        {\n          x: 12954230.248733655,\n          y: 4876121.545707381,\n        },\n        {\n          x: 12954175.140615348,\n          y: 4876137.686398102,\n        },\n        {\n          x: 12954117.372576779,\n          y: 4876152.031328337,\n        },\n        {\n          x: 12954117.372476779,\n          y: 4876152.031328334,\n        },\n        {\n          x: 12954063.303781305,\n          y: 4876163.662863832,\n        },\n        {\n          x: 12954007.331071056,\n          y: 4876172.399246002,\n        },\n        {\n          x: 12953967.211788474,\n          y: 4876178.65975709,\n        },\n        {\n          x: 12953802.621925015,\n          y: 4876196.237827291,\n        },\n        {\n          x: 12953668.73601341,\n          y: 4876199.186105529,\n        },\n        {\n          x: 12953503.298073018,\n          y: 4876194.053015986,\n        },\n        {\n          x: 12953435.898150826,\n          y: 4876195.031116625,\n        },\n        {\n          x: 12952907.1719517,\n          y: 4876202.110021278,\n        },\n        {\n          x: 12952854.57708836,\n          y: 4876202.818902422,\n        },\n        {\n          x: 12952810.046254802,\n          y: 4876203.418551955,\n        },\n        {\n          x: 12952736.613090457,\n          y: 4876203.294253911,\n        },\n        {\n          x: 12952624.4348891,\n          y: 4876204.555723625,\n        },\n        {\n          x: 12952552.43031391,\n          y: 4876204.964896776,\n        },\n        {\n          x: 12952497.943888191,\n          y: 4876207.608055034,\n        },\n        {\n          x: 12952468.042451413,\n          y: 4876210.829014632,\n        },\n        {\n          x: 12952437.79969268,\n          y: 4876214.509841102,\n        },\n        {\n          x: 12952375.588643614,\n          y: 4876223.886731359,\n        },\n        {\n          x: 12952301.856311196,\n          y: 4876236.1209624605,\n        },\n        {\n          x: 12952251.31522576,\n          y: 4876242.8451233655,\n        },\n        {\n          x: 12952214.021838313,\n          y: 4876246.965370512,\n        },\n        {\n          x: 12952162.807325037,\n          y: 4876250.527753233,\n        },\n        {\n          x: 12952103.452750135,\n          y: 4876251.697783142,\n        },\n        {\n          x: 12952023.611417918,\n          y: 4876253.082581543,\n        },\n        {\n          x: 12951892.55511939,\n          y: 4876253.812631988,\n        },\n        {\n          x: 12951846.328905031,\n          y: 4876253.171084735,\n        },\n        {\n          x: 12951802.992080217,\n          y: 4876249.116505366,\n        },\n        {\n          x: 12951766.843265098,\n          y: 4876244.26441203,\n        },\n        {\n          x: 12951714.743373726,\n          y: 4876233.633230178,\n        },\n        {\n          x: 12951654.073062496,\n          y: 4876222.691277131,\n        },\n        {\n          x: 12951616.46554052,\n          y: 4876216.252301995,\n        },\n        {\n          x: 12951584.63468386,\n          y: 4876213.574076274,\n        },\n        {\n          x: 12951561.015438031,\n          y: 4876212.359467597,\n        },\n        {\n          x: 12951502.289814433,\n          y: 4876212.143345088,\n        },\n        {\n          x: 12951293.085304,\n          y: 4876214.875420837,\n        },\n        {\n          x: 12951031.075470097,\n          y: 4876215.897535212,\n        },\n        {\n          x: 12950959.097605025,\n          y: 4876216.275884133,\n        },\n        {\n          x: 12950894.730929183,\n          y: 4876215.974946514,\n        },\n        {\n          x: 12950773.64057589,\n          y: 4876216.703301484,\n        },\n        {\n          x: 12950673.746751422,\n          y: 4876225.670588799,\n        },\n        {\n          x: 12950616.565179903,\n          y: 4876229.034309006,\n        },\n        {\n          x: 12950568.486162541,\n          y: 4876230.042798452,\n        },\n        {\n          x: 12950375.145719487,\n          y: 4876231.976121928,\n        },\n        {\n          x: 12950194.78158641,\n          y: 4876234.464466195,\n        },\n        {\n          x: 12950048.658437809,\n          y: 4876236.2574803205,\n        },\n        {\n          x: 12950001.4772779,\n          y: 4876235.293804152,\n        },\n        {\n          x: 12949948.747199,\n          y: 4876229.307334167,\n        },\n        {\n          x: 12949849.140274497,\n          y: 4876224.443260822,\n        },\n        {\n          x: 12948886.90103617,\n          y: 4876237.644317312,\n        },\n        {\n          x: 12948886.90093617,\n          y: 4876237.644317315,\n        },\n        {\n          x: 12948715.380098497,\n          y: 4876239.997015189,\n        },\n        {\n          x: 12948425.68643085,\n          y: 4876243.705096172,\n        },\n        {\n          x: 12948424.112088347,\n          y: 4876243.72353365,\n        },\n        {\n          x: 12948407.06491928,\n          y: 4876243.944145824,\n        },\n        {\n          x: 12948405.98243078,\n          y: 4876243.95624331,\n        },\n        {\n          x: 12948361.171213618,\n          y: 4876244.531933125,\n        },\n        {\n          x: 12948356.092076505,\n          y: 4876244.596227219,\n        },\n        {\n          x: 12948294.145588111,\n          y: 4876245.390073654,\n        },\n        {\n          x: 12948293.421376245,\n          y: 4876245.398151391,\n        },\n        {\n          x: 12948245.081662236,\n          y: 4876246.017528498,\n        },\n        {\n          x: 12948244.258669348,\n          y: 4876246.030423269,\n        },\n        {\n          x: 12948227.313400865,\n          y: 4876246.246399225,\n        },\n        {\n          x: 12948226.443416782,\n          y: 4876246.256701933,\n        },\n        {\n          x: 12948223.250043418,\n          y: 4876246.298279974,\n        },\n        {\n          x: 12947945.409350824,\n          y: 4876250.961636466,\n        },\n        {\n          x: 12947934.332267188,\n          y: 4876250.890472651,\n        },\n        {\n          x: 12947877.07401595,\n          y: 4876250.914315445,\n        },\n        {\n          x: 12947815.021065967,\n          y: 4876253.851354821,\n        },\n        {\n          x: 12947763.487477783,\n          y: 4876261.1465055365,\n        },\n        {\n          x: 12947725.059790507,\n          y: 4876269.052617193,\n        },\n        {\n          x: 12947653.430817837,\n          y: 4876293.225426714,\n        },\n        {\n          x: 12947609.2695425,\n          y: 4876314.985599062,\n        },\n        {\n          x: 12947579.101654992,\n          y: 4876329.096570221,\n        },\n        {\n          x: 12947532.916624067,\n          y: 4876357.08904473,\n        },\n        {\n          x: 12947462.2262063,\n          y: 4876393.072714213,\n        },\n        {\n          x: 12947421.555621969,\n          y: 4876408.477083252,\n        },\n        {\n          x: 12947369.78948997,\n          y: 4876424.051528886,\n        },\n        {\n          x: 12947316.08051995,\n          y: 4876430.96623273,\n        },\n        {\n          x: 12947288.108453162,\n          y: 4876433.523245403,\n        },\n        {\n          x: 12947233.34126908,\n          y: 4876432.790803788,\n        },\n        {\n          x: 12947188.401168212,\n          y: 4876429.088000529,\n        },\n        {\n          x: 12947141.165666422,\n          y: 4876420.772086076,\n        },\n        {\n          x: 12947111.803456603,\n          y: 4876412.760024161,\n        },\n        {\n          x: 12947064.825877437,\n          y: 4876399.584901326,\n        },\n        {\n          x: 12947029.14763327,\n          y: 4876383.288698463,\n        },\n        {\n          x: 12947000.45767468,\n          y: 4876366.611471653,\n        },\n        {\n          x: 12946972.12493202,\n          y: 4876348.110056718,\n        },\n        {\n          x: 12946952.979055353,\n          y: 4876335.007395409,\n        },\n        {\n          x: 12946936.827550543,\n          y: 4876323.077202845,\n        },\n        {\n          x: 12946921.333707113,\n          y: 4876310.548771458,\n        },\n        {\n          x: 12946816.8297496,\n          y: 4876219.287650481,\n        },\n        {\n          x: 12946732.699527778,\n          y: 4876127.270037018,\n        },\n        {\n          x: 12946657.488720905,\n          y: 4876045.210086455,\n        },\n        {\n          x: 12946622.587940522,\n          y: 4875983.965371542,\n        },\n        {\n          x: 12946496.471341081,\n          y: 4875762.643722024,\n        },\n        {\n          x: 12946423.522392513,\n          y: 4875557.850478406,\n        },\n        {\n          x: 12946399.995473424,\n          y: 4875459.537530149,\n        },\n        {\n          x: 12946396.978958678,\n          y: 4875437.0025600875,\n        },\n        {\n          x: 12946396.993859813,\n          y: 4875409.162322274,\n        },\n        {\n          x: 12946399.79561764,\n          y: 4875362.09033934,\n        },\n        {\n          x: 12946402.86393251,\n          y: 4875338.563648224,\n        },\n        {\n          x: 12946405.625597931,\n          y: 4875320.088412483,\n        },\n        {\n          x: 12946410.942566253,\n          y: 4875295.299492259,\n        },\n        {\n          x: 12946416.254743187,\n          y: 4875274.811186232,\n        },\n        {\n          x: 12946428.647654204,\n          y: 4875238.394850413,\n        },\n        {\n          x: 12946449.128231185,\n          y: 4875187.827926565,\n        },\n        {\n          x: 12946468.842936842,\n          y: 4875151.68413807,\n        },\n        {\n          x: 12946489.817988945,\n          y: 4875118.8342050975,\n        },\n        {\n          x: 12946522.546502326,\n          y: 4875072.470895908,\n        },\n        {\n          x: 12946570.68181112,\n          y: 4875007.932055009,\n        },\n        {\n          x: 12946590.31852286,\n          y: 4874978.982263895,\n        },\n        {\n          x: 12946617.815584973,\n          y: 4874935.88435813,\n        },\n        {\n          x: 12946646.325475948,\n          y: 4874873.520782715,\n        },\n        {\n          x: 12946820.499390153,\n          y: 4874459.418667514,\n        },\n        {\n          x: 12946888.30456704,\n          y: 4874294.857213484,\n        },\n        {\n          x: 12946930.646429846,\n          y: 4874192.6851136675,\n        },\n        {\n          x: 12946949.005201655,\n          y: 4874148.378390104,\n        },\n        {\n          x: 12947044.284756513,\n          y: 4873918.4637040915,\n        },\n        {\n          x: 12947056.289818808,\n          y: 4873889.083139696,\n        },\n        {\n          x: 12947165.66572366,\n          y: 4873622.718414709,\n        },\n        {\n          x: 12947202.737800827,\n          y: 4873531.999517411,\n        },\n        {\n          x: 12947209.63262473,\n          y: 4873515.652391753,\n        },\n        {\n          x: 12947273.282788856,\n          y: 4873364.7546024555,\n        },\n        {\n          x: 12947273.708122,\n          y: 4873363.743532597,\n        },\n        {\n          x: 12947287.460317507,\n          y: 4873331.140831067,\n        },\n        {\n          x: 12947304.830566434,\n          y: 4873289.959057868,\n        },\n        {\n          x: 12947411.8537799,\n          y: 4873054.533746381,\n        },\n        {\n          x: 12947541.50808741,\n          y: 4872842.7485984,\n        },\n        {\n          x: 12947580.982706897,\n          y: 4872777.370338213,\n        },\n        {\n          x: 12947615.711724276,\n          y: 4872723.318503141,\n        },\n        {\n          x: 12947649.183798542,\n          y: 4872667.856626571,\n        },\n        {\n          x: 12947675.12323022,\n          y: 4872624.93555951,\n        },\n        {\n          x: 12947696.263067583,\n          y: 4872593.158431816,\n        },\n        {\n          x: 12947734.29565014,\n          y: 4872530.60731087,\n        },\n        {\n          x: 12947764.795609327,\n          y: 4872480.528620551,\n        },\n        {\n          x: 12947824.300805386,\n          y: 4872380.158015446,\n        },\n        {\n          x: 12947865.335921923,\n          y: 4872300.691582129,\n        },\n        {\n          x: 12947868.4019642,\n          y: 4872293.260799115,\n        },\n        {\n          x: 12947877.607004203,\n          y: 4872273.69886109,\n        },\n        {\n          x: 12947897.445241943,\n          y: 4872226.595834379,\n        },\n        {\n          x: 12947927.647142874,\n          y: 4872153.107787066,\n        },\n        {\n          x: 12947994.798658265,\n          y: 4871994.343646774,\n        },\n        {\n          x: 12948026.296440713,\n          y: 4871921.612665893,\n        },\n        {\n          x: 12948040.948586507,\n          y: 4871894.217878682,\n        },\n        {\n          x: 12948057.308193548,\n          y: 4871865.8032324435,\n        },\n        {\n          x: 12948067.326472418,\n          y: 4871850.338413439,\n        },\n        {\n          x: 12948081.773480348,\n          y: 4871830.043075507,\n        },\n        {\n          x: 12948106.005618699,\n          y: 4871796.572364472,\n        },\n        {\n          x: 12948147.255517324,\n          y: 4871752.044003956,\n        },\n        {\n          x: 12948212.569000661,\n          y: 4871679.780786607,\n        },\n        {\n          x: 12948214.328663053,\n          y: 4871677.809478982,\n        },\n        {\n          x: 12948273.504086189,\n          y: 4871611.484093596,\n        },\n        {\n          x: 12948317.798932584,\n          y: 4871561.862160343,\n        },\n        {\n          x: 12948344.377879875,\n          y: 4871527.5162396645,\n        },\n        {\n          x: 12948380.890677512,\n          y: 4871477.605026336,\n        },\n        {\n          x: 12948413.38959998,\n          y: 4871425.5829799725,\n        },\n        {\n          x: 12948414.44249342,\n          y: 4871423.82499065,\n        },\n        {\n          x: 12948447.049964357,\n          y: 4871369.071132418,\n        },\n        {\n          x: 12948447.986775042,\n          y: 4871367.444350426,\n        },\n        {\n          x: 12948505.566148069,\n          y: 4871267.333064074,\n        },\n        {\n          x: 12948544.503004055,\n          y: 4871190.001687928,\n        },\n        {\n          x: 12948579.413090972,\n          y: 4871111.04819233,\n        },\n        {\n          x: 12948621.84723699,\n          y: 4871002.001678927,\n        },\n        {\n          x: 12948649.245005308,\n          y: 4870919.800386681,\n        },\n        {\n          x: 12948729.034075115,\n          y: 4870659.041565615,\n        },\n        {\n          x: 12948806.660201645,\n          y: 4870408.542141671,\n        },\n        {\n          x: 12948816.10369674,\n          y: 4870377.056894108,\n        },\n        {\n          x: 12948817.112454178,\n          y: 4870373.69505771,\n        },\n        {\n          x: 12948822.827115472,\n          y: 4870354.633454126,\n        },\n        {\n          x: 12948823.264697373,\n          y: 4870353.177438731,\n        },\n        {\n          x: 12948871.583647873,\n          y: 4870192.062297062,\n        },\n        {\n          x: 12948888.256377492,\n          y: 4870137.412837239,\n        },\n        {\n          x: 12948888.256477488,\n          y: 4870137.412437243,\n        },\n        {\n          x: 12948981.13241698,\n          y: 4869833.0181290535,\n        },\n        {\n          x: 12949020.38513926,\n          y: 4869703.696545276,\n        },\n        {\n          x: 12949062.757994082,\n          y: 4869570.843921744,\n        },\n        {\n          x: 12949090.169382466,\n          y: 4869479.2850293545,\n        },\n        {\n          x: 12949123.989708498,\n          y: 4869371.588525548,\n        },\n        {\n          x: 12949143.001308247,\n          y: 4869300.813594804,\n        },\n        {\n          x: 12949146.761492698,\n          y: 4869288.429210793,\n        },\n        {\n          x: 12949163.7803404,\n          y: 4869233.145301005,\n        },\n        {\n          x: 12949175.026622072,\n          y: 4869195.787679086,\n        },\n        {\n          x: 12949196.938022848,\n          y: 4869123.013569744,\n        },\n        {\n          x: 12949208.873643316,\n          y: 4869083.2070951825,\n        },\n        {\n          x: 12949223.461787153,\n          y: 4869036.1056654295,\n        },\n        {\n          x: 12949242.728116639,\n          y: 4868973.956351733,\n        },\n        {\n          x: 12949271.681629652,\n          y: 4868877.983261017,\n        },\n        {\n          x: 12949297.10128093,\n          y: 4868796.606128646,\n        },\n        {\n          x: 12949301.07802554,\n          y: 4868786.43636378,\n        },\n        {\n          x: 12949316.770515563,\n          y: 4868745.313714858,\n        },\n        {\n          x: 12949322.956596527,\n          y: 4868730.50358208,\n        },\n        {\n          x: 12949339.748933367,\n          y: 4868696.689288448,\n        },\n        {\n          x: 12949362.183788385,\n          y: 4868657.470406632,\n        },\n        {\n          x: 12949389.99988878,\n          y: 4868612.036959275,\n        },\n        {\n          x: 12949405.211090067,\n          y: 4868588.465232985,\n        },\n        {\n          x: 12949424.342096223,\n          y: 4868564.828507317,\n        },\n        {\n          x: 12949513.190764954,\n          y: 4868460.242782986,\n        },\n        {\n          x: 12949542.465744024,\n          y: 4868426.322580645,\n        },\n        {\n          x: 12949544.338502375,\n          y: 4868424.150033486,\n        },\n        {\n          x: 12949600.872280473,\n          y: 4868356.658526145,\n        },\n        {\n          x: 12949646.996273136,\n          y: 4868303.803243655,\n        },\n        {\n          x: 12949696.144125719,\n          y: 4868246.537783951,\n        },\n        {\n          x: 12949755.723785738,\n          y: 4868181.855453389,\n        },\n        {\n          x: 12949832.37526342,\n          y: 4868093.127098315,\n        },\n        {\n          x: 12949851.813717443,\n          y: 4868068.399532126,\n        },\n        {\n          x: 12949894.667583121,\n          y: 4868017.630119035,\n        },\n        {\n          x: 12949932.221547332,\n          y: 4867975.033422636,\n        },\n        {\n          x: 12949984.350867936,\n          y: 4867915.6628556745,\n        },\n        {\n          x: 12950051.280432409,\n          y: 4867836.640979047,\n        },\n        {\n          x: 12950119.532814305,\n          y: 4867759.173557603,\n        },\n        {\n          x: 12950170.049738903,\n          y: 4867700.545102677,\n        },\n        {\n          x: 12950196.18372548,\n          y: 4867669.647630281,\n        },\n        {\n          x: 12950245.012623828,\n          y: 4867612.641024118,\n        },\n        {\n          x: 12950366.341310102,\n          y: 4867472.554440256,\n        },\n        {\n          x: 12950396.016682621,\n          y: 4867437.159853344,\n        },\n        {\n          x: 12950433.41414459,\n          y: 4867388.174952161,\n        },\n        {\n          x: 12950467.047766922,\n          y: 4867337.197051575,\n        },\n        {\n          x: 12950472.727024797,\n          y: 4867327.624837841,\n        },\n        {\n          x: 12950504.43931956,\n          y: 4867270.541731104,\n        },\n        {\n          x: 12950506.66515916,\n          y: 4867265.686943075,\n        },\n        {\n          x: 12950513.328076823,\n          y: 4867251.147877864,\n        },\n        {\n          x: 12950522.125427773,\n          y: 4867231.948518946,\n        },\n        {\n          x: 12950543.25084689,\n          y: 4867180.747377998,\n        },\n        {\n          x: 12950554.610753339,\n          y: 4867148.755648968,\n        },\n        {\n          x: 12950565.938845547,\n          y: 4867113.7289358685,\n        },\n        {\n          x: 12950577.077540115,\n          y: 4867070.725547691,\n        },\n        {\n          x: 12950584.992247868,\n          y: 4867034.253515085,\n        },\n        {\n          x: 12950597.570781464,\n          y: 4866945.446932178,\n        },\n        {\n          x: 12950602.621253733,\n          y: 4866858.218872007,\n        },\n        {\n          x: 12950604.351725787,\n          y: 4866798.591035709,\n        },\n        {\n          x: 12950604.673463916,\n          y: 4866769.830411211,\n        },\n        {\n          x: 12950608.500044588,\n          y: 4866652.0108254915,\n        },\n        {\n          x: 12950610.319620667,\n          y: 4866589.554543856,\n        },\n        {\n          x: 12950610.359324489,\n          y: 4866588.2321465295,\n        },\n        {\n          x: 12950610.80126891,\n          y: 4866566.6265690895,\n        },\n        {\n          x: 12950612.409021743,\n          y: 4866522.173389596,\n        },\n        {\n          x: 12950616.621330654,\n          y: 4866372.98018754,\n        },\n        {\n          x: 12950618.97605836,\n          y: 4866293.007567341,\n        },\n        {\n          x: 12950619.842244353,\n          y: 4866255.184129226,\n        },\n        {\n          x: 12950625.910927346,\n          y: 4866063.848140013,\n        },\n        {\n          x: 12950628.387367597,\n          y: 4865977.081155829,\n        },\n        {\n          x: 12950629.753005603,\n          y: 4865908.9763710955,\n        },\n        {\n          x: 12950632.086528255,\n          y: 4865841.0262908945,\n        },\n        {\n          x: 12950632.35165354,\n          y: 4865833.33471617,\n        },\n        {\n          x: 12950633.79978892,\n          y: 4865801.28505746,\n        },\n        {\n          x: 12950635.690965662,\n          y: 4865759.427843475,\n        },\n        {\n          x: 12950637.922484085,\n          y: 4865674.26866093,\n        },\n        {\n          x: 12950641.139187874,\n          y: 4865591.213986744,\n        },\n        {\n          x: 12950643.134781921,\n          y: 4865519.6466930285,\n        },\n        {\n          x: 12950643.368005117,\n          y: 4865509.419217591,\n        },\n        {\n          x: 12950643.529421674,\n          y: 4865500.599934787,\n        },\n        {\n          x: 12950643.977363357,\n          y: 4865491.176881495,\n        },\n        {\n          x: 12950644.362001631,\n          y: 4865474.307022515,\n        },\n        {\n          x: 12950644.872350669,\n          y: 4865458.107876617,\n        },\n        {\n          x: 12950645.130576981,\n          y: 4865444.560304754,\n        },\n        {\n          x: 12950645.57682058,\n          y: 4865427.882852814,\n        },\n        {\n          x: 12950645.993461674,\n          y: 4865410.917198133,\n        },\n        {\n          x: 12950646.667225737,\n          y: 4865391.909170426,\n        },\n        {\n          x: 12950647.177975576,\n          y: 4865372.994126345,\n        },\n        {\n          x: 12950647.75493018,\n          y: 4865357.594288625,\n        },\n        {\n          x: 12950648.042257652,\n          y: 4865348.937219927,\n        },\n        {\n          x: 12950648.42689613,\n          y: 4865331.427963337,\n        },\n        {\n          x: 12950649.226270262,\n          y: 4865315.3585491525,\n        },\n        {\n          x: 12950650.507293697,\n          y: 4865273.423391737,\n        },\n        {\n          x: 12950650.697711246,\n          y: 4865269.97251224,\n        },\n        {\n          x: 12950651.401779896,\n          y: 4865244.094692232,\n        },\n        {\n          x: 12950652.233156506,\n          y: 4865229.016682226,\n        },\n        {\n          x: 12950652.74640693,\n          y: 4865208.822741665,\n        },\n        {\n          x: 12950653.64269155,\n          y: 4865185.438841808,\n        },\n        {\n          x: 12950654.09033895,\n          y: 4865156.015598994,\n        },\n        {\n          x: 12950655.11473383,\n          y: 4865135.615712103,\n        },\n        {\n          x: 12950655.81880249,\n          y: 4865109.7205952415,\n        },\n        {\n          x: 12950656.266944723,\n          y: 4865098.219646195,\n        },\n        {\n          x: 12950656.776491228,\n          y: 4865090.42570183,\n        },\n        {\n          x: 12950657.610074416,\n          y: 4865053.173004747,\n        },\n        {\n          x: 12950657.80429587,\n          y: 4865037.45393246,\n        },\n        {\n          x: 12950665.057790544,\n          y: 4864813.469608394,\n        },\n        {\n          x: 12950666.31470639,\n          y: 4864789.756353396,\n        },\n        {\n          x: 12950666.825456835,\n          y: 4864768.799620799,\n        },\n        {\n          x: 12950667.593330417,\n          y: 4864744.839817025,\n        },\n        {\n          x: 12950667.977868663,\n          y: 4864728.163469017,\n        },\n        {\n          x: 12950669.195489043,\n          y: 4864677.813533126,\n        },\n        {\n          x: 12950669.835947098,\n          y: 4864668.869905654,\n        },\n        {\n          x: 12950670.091873968,\n          y: 4864653.088344843,\n        },\n        {\n          x: 12950670.988058263,\n          y: 4864630.3428553175,\n        },\n        {\n          x: 12950670.92435391,\n          y: 4864626.509652139,\n        },\n        {\n          x: 12950671.691826217,\n          y: 4864606.63864744,\n        },\n        {\n          x: 12950672.203278288,\n          y: 4864580.504222692,\n        },\n        {\n          x: 12950673.228074549,\n          y: 4864554.884550185,\n        },\n        {\n          x: 12950673.73952671,\n          y: 4864528.497326723,\n        },\n        {\n          x: 12950674.890434487,\n          y: 4864500.769470086,\n        },\n        {\n          x: 12950675.2757754,\n          y: 4864475.593033784,\n        },\n        {\n          x: 12950675.409487799,\n          y: 4864472.776850138,\n        },\n        {\n          x: 12950676.010148842,\n          y: 4864442.529341358,\n        },\n        {\n          x: 12950677.468085546,\n          y: 4864406.737226046,\n        },\n        {\n          x: 12950678.344374934,\n          y: 4864361.629262644,\n        },\n        {\n          x: 12950681.645047376,\n          y: 4864252.127616024,\n        },\n        {\n          x: 12950682.9547692,\n          y: 4864216.335625385,\n        },\n        {\n          x: 12950683.100682352,\n          y: 4864214.154238779,\n        },\n        {\n          x: 12950684.236285895,\n          y: 4864191.999439908,\n        },\n        {\n          x: 12950685.866634507,\n          y: 4864160.1778856525,\n        },\n        {\n          x: 12950689.79278639,\n          y: 4864108.3870529765,\n        },\n        {\n          x: 12950689.938599342,\n          y: 4864106.931066905,\n        },\n        {\n          x: 12950697.064031562,\n          y: 4864036.379448896,\n        },\n        {\n          x: 12950699.534748787,\n          y: 4864019.216889406,\n        },\n        {\n          x: 12950699.680561578,\n          y: 4864018.345103669,\n        },\n        {\n          x: 12950716.396330617,\n          y: 4863888.161824789,\n        },\n        {\n          x: 12950718.57772101,\n          y: 4863874.636737837,\n        },\n        {\n          x: 12950718.577821152,\n          y: 4863874.05533762,\n        },\n        {\n          x: 12950732.387228379,\n          y: 4863767.873478454,\n        },\n        {\n          x: 12950748.375318805,\n          y: 4863648.896232093,\n        },\n        {\n          x: 12950765.67291641,\n          y: 4863514.502311158,\n        },\n        {\n          x: 12950777.731654065,\n          y: 4863426.117281793,\n        },\n        {\n          x: 12950782.448058736,\n          y: 4863391.472539309,\n        },\n        {\n          x: 12950787.587200012,\n          y: 4863348.835337318,\n        },\n        {\n          x: 12950801.256266356,\n          y: 4863250.146561549,\n        },\n        {\n          x: 12950805.275908938,\n          y: 4863217.932650578,\n        },\n        {\n          x: 12950818.28101368,\n          y: 4863113.762708521,\n        },\n        {\n          x: 12950822.999512516,\n          y: 4863078.5401642835,\n        },\n        {\n          x: 12950827.797217675,\n          y: 4863040.997227563,\n        },\n        {\n          x: 12950833.851926966,\n          y: 4862997.421011249,\n        },\n        {\n          x: 12950838.379305013,\n          y: 4862973.344145836,\n        },\n        {\n          x: 12950848.476446522,\n          y: 4862915.367113537,\n        },\n        {\n          x: 12950856.118280582,\n          y: 4862873.256843487,\n        },\n        {\n          x: 12950862.060671719,\n          y: 4862842.477409358,\n        },\n        {\n          x: 12950882.653269414,\n          y: 4862709.589368273,\n        },\n        {\n          x: 12950907.883131918,\n          y: 4862524.421459502,\n        },\n        {\n          x: 12950907.90533372,\n          y: 4862524.26986159,\n        },\n        {\n          x: 12950920.067918759,\n          y: 4862435.001208198,\n        },\n        {\n          x: 12950928.527198693,\n          y: 4862379.783399951,\n        },\n        {\n          x: 12950939.681083987,\n          y: 4862336.514125757,\n        },\n        {\n          x: 12950954.29343263,\n          y: 4862293.863553435,\n        },\n        {\n          x: 12950967.571566563,\n          y: 4862263.107846068,\n        },\n        {\n          x: 12950978.195387682,\n          y: 4862240.704492119,\n        },\n        {\n          x: 12950999.06198339,\n          y: 4862206.546426427,\n        },\n        {\n          x: 12951021.446772633,\n          y: 4862168.969866098,\n        },\n        {\n          x: 12951097.70213785,\n          y: 4862042.200138503,\n        },\n        {\n          x: 12951174.075577334,\n          y: 4861915.693221821,\n        },\n        {\n          x: 12951267.776776478,\n          y: 4861760.078948706,\n        },\n        {\n          x: 12951395.236453552,\n          y: 4861519.784399533,\n        },\n        {\n          x: 12951412.303520849,\n          y: 4861476.874540171,\n        },\n        {\n          x: 12951451.654131988,\n          y: 4861334.408202046,\n        },\n        {\n          x: 12951451.745536273,\n          y: 4861334.052106667,\n        },\n        {\n          x: 12951466.623726709,\n          y: 4861241.564646258,\n        },\n        {\n          x: 12951489.13393889,\n          y: 4861018.001826673,\n        },\n        {\n          x: 12951490.383194035,\n          y: 4860999.999285448,\n        },\n        {\n          x: 12951491.439840542,\n          y: 4860985.560035131,\n        },\n        {\n          x: 12951503.010040093,\n          y: 4860889.175072468,\n        },\n        {\n          x: 12951531.140403,\n          y: 4860680.970427163,\n        },\n        {\n          x: 12951557.758936353,\n          y: 4860485.587344637,\n        },\n        {\n          x: 12951565.10420882,\n          y: 4860453.124738692,\n        },\n        {\n          x: 12951575.364280945,\n          y: 4860406.458640103,\n        },\n        {\n          x: 12951581.065583235,\n          y: 4860384.268158007,\n        },\n        {\n          x: 12951610.884689623,\n          y: 4860288.296338669,\n        },\n        {\n          x: 12951620.19888619,\n          y: 4860261.224956072,\n        },\n        {\n          x: 12951627.274605729,\n          y: 4860242.081190622,\n        },\n        {\n          x: 12951637.413111666,\n          y: 4860215.23171692,\n        },\n        {\n          x: 12951657.721893568,\n          y: 4860163.979635463,\n        },\n        {\n          x: 12951666.949544173,\n          y: 4860142.223200858,\n        },\n        {\n          x: 12951668.869595224,\n          y: 4860137.696654858,\n        },\n        {\n          x: 12951693.982928237,\n          y: 4860078.331821876,\n        },\n        {\n          x: 12951736.262245214,\n          y: 4859972.802878212,\n        },\n        {\n          x: 12951779.310281485,\n          y: 4859859.063131411,\n        },\n        {\n          x: 12951799.296553789,\n          y: 4859804.14710355,\n        },\n        {\n          x: 12951825.224839896,\n          y: 4859739.862680752,\n        },\n        {\n          x: 12951906.509982908,\n          y: 4859546.26065336,\n        },\n        {\n          x: 12951960.443026407,\n          y: 4859429.470375646,\n        },\n        {\n          x: 12951999.771882042,\n          y: 4859335.105420177,\n        },\n        {\n          x: 12952032.435444733,\n          y: 4859254.969474848,\n        },\n        {\n          x: 12952037.41706581,\n          y: 4859242.9403781,\n        },\n        {\n          x: 12952060.923649335,\n          y: 4859187.91377235,\n        },\n        {\n          x: 12952072.317820875,\n          y: 4859160.3641980635,\n        },\n        {\n          x: 12952084.970246904,\n          y: 4859131.4834706,\n        },\n        {\n          x: 12952113.084959969,\n          y: 4859065.12985738,\n        },\n        {\n          x: 12952130.693674402,\n          y: 4859023.732486952,\n        },\n        {\n          x: 12952141.643150551,\n          y: 4858996.55370852,\n        },\n        {\n          x: 12952162.804377414,\n          y: 4858947.308924186,\n        },\n        {\n          x: 12952171.755373834,\n          y: 4858927.981571281,\n        },\n        {\n          x: 12952175.604139445,\n          y: 4858917.094515989,\n        },\n        {\n          x: 12952180.82205369,\n          y: 4858900.9651018735,\n        },\n        {\n          x: 12952184.554718394,\n          y: 4858889.243946094,\n        },\n        {\n          x: 12952190.769288482,\n          y: 4858868.280381973,\n        },\n        {\n          x: 12952193.507485226,\n          y: 4858857.610563799,\n        },\n        {\n          x: 12952195.947291974,\n          y: 4858845.681757747,\n        },\n        {\n          x: 12952197.797320686,\n          y: 4858836.642376694,\n        },\n        {\n          x: 12952199.129268397,\n          y: 4858825.304718492,\n        },\n        {\n          x: 12952203.716285268,\n          y: 4858778.431416472,\n        },\n        {\n          x: 12952205.964993557,\n          y: 4858749.46331663,\n        },\n        {\n          x: 12952207.408630643,\n          y: 4858703.901754291,\n        },\n        {\n          x: 12952205.633196818,\n          y: 4858677.13773786,\n        },\n        {\n          x: 12952200.97007183,\n          y: 4858631.018552714,\n        },\n        {\n          x: 12952196.971420817,\n          y: 4858601.209733323,\n        },\n        {\n          x: 12952192.67917836,\n          y: 4858569.843524169,\n        },\n        {\n          x: 12952188.386933465,\n          y: 4858539.217911885,\n        },\n        {\n          x: 12952168.84610709,\n          y: 4858394.254627763,\n        },\n        {\n          x: 12952159.519210786,\n          y: 4858329.002694597,\n        },\n        {\n          x: 12952158.632838566,\n          y: 4858318.547228751,\n        },\n        {\n          x: 12952157.151183436,\n          y: 4858288.818485506,\n        },\n        {\n          x: 12952156.706496444,\n          y: 4858276.218902411,\n        },\n        {\n          x: 12952157.149780104,\n          y: 4858257.685985396,\n        },\n        {\n          x: 12952159.218710119,\n          y: 4858232.933605842,\n        },\n        {\n          x: 12952159.810389748,\n          y: 4858223.449482893,\n        },\n        {\n          x: 12952162.532997137,\n          y: 4858196.9427767545,\n        },\n        {\n          x: 12952172.755045319,\n          y: 4858146.897168553,\n        },\n        {\n          x: 12952179.958089378,\n          y: 4858120.216771117,\n        },\n        {\n          x: 12952191.658258049,\n          y: 4858079.657970377,\n        },\n        {\n          x: 12952208.58059935,\n          y: 4858022.51880722,\n        },\n        {\n          x: 12952216.501576891,\n          y: 4857997.283134168,\n        },\n        {\n          x: 12952225.680391517,\n          y: 4857966.100288983,\n        },\n        {\n          x: 12952269.24519301,\n          y: 4857823.342887307,\n        },\n        {\n          x: 12952302.724863112,\n          y: 4857711.949002681,\n        },\n      ],\n    },\n    {\n      id: \"13\",\n      source: \"26\",\n      target: \"27\",\n      class: \"地铁十号线\",\n      name: \"地铁十号线 0\",\n      controlPoints: [\n        {\n          x: 12964391.173261674,\n          y: 4847959.964747035,\n        },\n        {\n          x: 12964381.421162914,\n          y: 4847238.950861313,\n        },\n        {\n          x: 12964379.013229802,\n          y: 4847130.369249381,\n        },\n        {\n          x: 12964369.707333228,\n          y: 4846953.233573841,\n        },\n        {\n          x: 12964365.098653296,\n          y: 4846899.529372901,\n        },\n        {\n          x: 12964350.271597194,\n          y: 4846844.7236321755,\n        },\n        {\n          x: 12964328.613459915,\n          y: 4846773.943192761,\n        },\n        {\n          x: 12964303.571447244,\n          y: 4846720.321707801,\n        },\n        {\n          x: 12964261.49123042,\n          y: 4846658.767114734,\n        },\n        {\n          x: 12964219.422329223,\n          y: 4846606.356004327,\n        },\n        {\n          x: 12964163.72308854,\n          y: 4846548.283066274,\n        },\n        {\n          x: 12964117.115347376,\n          y: 4846498.174184149,\n        },\n        {\n          x: 12963719.24125982,\n          y: 4846081.363070078,\n        },\n        {\n          x: 12963666.940189386,\n          y: 4846020.980269377,\n        },\n        {\n          x: 12963651.029381108,\n          y: 4846008.466281171,\n        },\n        {\n          x: 12963640.792827746,\n          y: 4845993.645627467,\n        },\n        {\n          x: 12963630.555030722,\n          y: 4845977.682026026,\n        },\n        {\n          x: 12963622.579870086,\n          y: 4845954.85254285,\n        },\n        {\n          x: 12963622.547271827,\n          y: 4845927.422297171,\n        },\n        {\n          x: 12963624.705055857,\n          y: 4845832.5516995825,\n        },\n        {\n          x: 12963605.106422728,\n          y: 4844950.156548626,\n        },\n        {\n          x: 12963600.552929461,\n          y: 4844939.887775902,\n        },\n        {\n          x: 12963641.28504856,\n          y: 4844029.840890613,\n        },\n        {\n          x: 12963635.07102118,\n          y: 4843895.785437119,\n        },\n        {\n          x: 12963592.56494142,\n          y: 4843790.304489117,\n        },\n        {\n          x: 12963515.79594813,\n          y: 4843723.544249312,\n        },\n        {\n          x: 12963437.02641232,\n          y: 4843673.039785006,\n        },\n        {\n          x: 12963372.392513098,\n          y: 4843630.608396946,\n        },\n        {\n          x: 12963273.452605404,\n          y: 4843594.387913362,\n        },\n        {\n          x: 12963212.653908446,\n          y: 4843577.914113967,\n        },\n        {\n          x: 12963206.82489125,\n          y: 4843576.334664474,\n        },\n        {\n          x: 12963057.427614385,\n          y: 4843550.431693091,\n        },\n        {\n          x: 12962954.477380954,\n          y: 4843548.741287049,\n        },\n        {\n          x: 12962788.932332132,\n          y: 4843539.119846538,\n        },\n        {\n          x: 12960734.413928954,\n          y: 4843579.436506579,\n        },\n        {\n          x: 12960615.677401308,\n          y: 4843579.296389959,\n        },\n        {\n          x: 12959224.804679275,\n          y: 4843577.132908265,\n        },\n        {\n          x: 12958165.962075146,\n          y: 4843552.786071934,\n        },\n        {\n          x: 12958015.842937116,\n          y: 4843539.299682281,\n        },\n        {\n          x: 12957633.083574392,\n          y: 4843505.052930688,\n        },\n        {\n          x: 12956758.552751072,\n          y: 4843474.381786778,\n        },\n        {\n          x: 12956086.236845858,\n          y: 4843457.686331021,\n        },\n        {\n          x: 12955417.836020822,\n          y: 4843562.642953932,\n        },\n        {\n          x: 12955413.075883733,\n          y: 4843564.0987397935,\n        },\n        {\n          x: 12955318.578314304,\n          y: 4843592.994666116,\n        },\n        {\n          x: 12955279.765356282,\n          y: 4843598.897849127,\n        },\n        {\n          x: 12955190.622782081,\n          y: 4843602.847728858,\n        },\n        {\n          x: 12953646.394080758,\n          y: 4843575.957979132,\n        },\n        {\n          x: 12953060.552869217,\n          y: 4843574.760301962,\n        },\n        {\n          x: 12952787.031931885,\n          y: 4843571.511276698,\n        },\n        {\n          x: 12951953.230827896,\n          y: 4843561.903501986,\n        },\n        {\n          x: 12951924.357645055,\n          y: 4843559.360785293,\n        },\n        {\n          x: 12951835.590379665,\n          y: 4843551.541948503,\n        },\n        {\n          x: 12951527.588141518,\n          y: 4843484.482094485,\n        },\n        {\n          x: 12951075.84273588,\n          y: 4843410.169546208,\n        },\n        {\n          x: 12950795.208394462,\n          y: 4843386.56777375,\n        },\n        {\n          x: 12950199.79003986,\n          y: 4843370.818621907,\n        },\n        {\n          x: 12950187.299179578,\n          y: 4843370.485690744,\n        },\n        {\n          x: 12948755.739655264,\n          y: 4843370.555741397,\n        },\n        {\n          x: 12948301.7684026,\n          y: 4843375.188304583,\n        },\n        {\n          x: 12948278.325845689,\n          y: 4843375.123114149,\n        },\n        {\n          x: 12947913.423896424,\n          y: 4843373.865129756,\n        },\n        {\n          x: 12947592.303468505,\n          y: 4843394.1161822025,\n        },\n        {\n          x: 12947581.215097992,\n          y: 4843394.815685296,\n        },\n        {\n          x: 12947415.424213238,\n          y: 4843437.701399312,\n        },\n        {\n          x: 12947274.850617228,\n          y: 4843509.5493655335,\n        },\n        {\n          x: 12947145.066987505,\n          y: 4843631.989033849,\n        },\n        {\n          x: 12947083.745603528,\n          y: 4843765.448522134,\n        },\n        {\n          x: 12947029.622192265,\n          y: 4843916.987015813,\n        },\n        {\n          x: 12946979.091048203,\n          y: 4844090.2070025485,\n        },\n        {\n          x: 12946955.102622215,\n          y: 4844184.990607465,\n        },\n        {\n          x: 12946945.915349547,\n          y: 4844319.830258014,\n        },\n        {\n          x: 12946923.770701075,\n          y: 4845315.372927731,\n        },\n        {\n          x: 12946851.421569752,\n          y: 4846551.5626413245,\n        },\n        {\n          x: 12946848.88594415,\n          y: 4846594.6202231655,\n        },\n        {\n          x: 12946848.609652413,\n          y: 4846598.19993173,\n        },\n        {\n          x: 12946696.54362537,\n          y: 4848569.1295227185,\n        },\n        {\n          x: 12946757.730386814,\n          y: 4848764.400754196,\n        },\n        {\n          x: 12946757.762984468,\n          y: 4848770.602855413,\n        },\n        {\n          x: 12946761.025258096,\n          y: 4849389.514336067,\n        },\n        {\n          x: 12946767.82605037,\n          y: 4850217.041711847,\n        },\n        {\n          x: 12946789.423173606,\n          y: 4850282.143556595,\n        },\n        {\n          x: 12946825.465052422,\n          y: 4850311.148186556,\n        },\n        {\n          x: 12947052.561481878,\n          y: 4850452.686121019,\n        },\n        {\n          x: 12947214.803034527,\n          y: 4850514.554585377,\n        },\n        {\n          x: 12947308.555685857,\n          y: 4850529.261912783,\n        },\n        {\n          x: 12947449.196901781,\n          y: 4850533.256072254,\n        },\n        {\n          x: 12947590.121115766,\n          y: 4850533.639384969,\n        },\n        {\n          x: 12947604.269979956,\n          y: 4850533.6780554075,\n        },\n        {\n          x: 12947595.595432382,\n          y: 4853171.930337626,\n        },\n        {\n          x: 12947588.6332791,\n          y: 4853230.507756927,\n        },\n        {\n          x: 12947570.25534986,\n          y: 4853385.134998881,\n        },\n        {\n          x: 12947534.132989677,\n          y: 4853500.7123848,\n        },\n        {\n          x: 12947451.113532243,\n          y: 4853616.16379296,\n        },\n        {\n          x: 12947332.03107398,\n          y: 4853706.215145492,\n        },\n        {\n          x: 12947133.576039799,\n          y: 4853828.591678857,\n        },\n        {\n          x: 12946866.97284939,\n          y: 4854028.085858982,\n        },\n        {\n          x: 12946608.167520212,\n          y: 4854187.260197411,\n        },\n        {\n          x: 12946364.738988684,\n          y: 4854328.7254704805,\n        },\n        {\n          x: 12946303.257037977,\n          y: 4854430.402571901,\n        },\n        {\n          x: 12946252.383757986,\n          y: 4854573.552461346,\n        },\n        {\n          x: 12946214.461752877,\n          y: 4854793.706838007,\n        },\n        {\n          x: 12946220.215499429,\n          y: 4854990.273434222,\n        },\n        {\n          x: 12946219.011349382,\n          y: 4855034.084710322,\n        },\n        {\n          x: 12946156.333146382,\n          y: 4855155.899273862,\n        },\n        {\n          x: 12946061.71710423,\n          y: 4855352.240931815,\n        },\n        {\n          x: 12946050.635431375,\n          y: 4855405.652363556,\n        },\n        {\n          x: 12946036.841429455,\n          y: 4855472.970938698,\n        },\n        {\n          x: 12945937.184814524,\n          y: 4856212.898218268,\n        },\n        {\n          x: 12945963.10362221,\n          y: 4857094.046675076,\n        },\n        {\n          x: 12945958.921351675,\n          y: 4857134.026535522,\n        },\n        {\n          x: 12945884.03047807,\n          y: 4857857.218830575,\n        },\n        {\n          x: 12945847.638054904,\n          y: 4858399.611054495,\n        },\n        {\n          x: 12945847.280553274,\n          y: 4859007.224022067,\n        },\n        {\n          x: 12945860.526034107,\n          y: 4859226.599693325,\n        },\n        {\n          x: 12945864.842806887,\n          y: 4859298.0925262105,\n        },\n        {\n          x: 12945879.5175261,\n          y: 4859405.1651427485,\n        },\n        {\n          x: 12945886.625513952,\n          y: 4859589.651325276,\n        },\n        {\n          x: 12945864.662784807,\n          y: 4859694.379973758,\n        },\n        {\n          x: 12945784.912348324,\n          y: 4859882.159043464,\n        },\n        {\n          x: 12945727.11821354,\n          y: 4859994.151868572,\n        },\n        {\n          x: 12945701.784202412,\n          y: 4860124.311216468,\n        },\n        {\n          x: 12945698.14559977,\n          y: 4860174.944243185,\n        },\n        {\n          x: 12945452.47590781,\n          y: 4860713.3477798365,\n        },\n        {\n          x: 12945196.058016783,\n          y: 4861128.770078741,\n        },\n        {\n          x: 12945092.686995683,\n          y: 4861317.482488749,\n        },\n        {\n          x: 12945051.578445194,\n          y: 4861392.531520205,\n        },\n        {\n          x: 12945015.437229244,\n          y: 4861490.129152049,\n        },\n        {\n          x: 12945008.163701242,\n          y: 4861576.939256895,\n        },\n        {\n          x: 12945015.284018965,\n          y: 4861718.049761452,\n        },\n        {\n          x: 12945022.23002506,\n          y: 4861756.836245517,\n        },\n        {\n          x: 12945035.651318152,\n          y: 4861797.3254907355,\n        },\n        {\n          x: 12945054.888690906,\n          y: 4861837.528089324,\n        },\n        {\n          x: 12945105.325637072,\n          y: 4861946.179124048,\n        },\n        {\n          x: 12945125.370065786,\n          y: 4861974.055941134,\n        },\n        {\n          x: 12945163.446826743,\n          y: 4862019.098382124,\n        },\n        {\n          x: 12945194.809906306,\n          y: 4862048.391273372,\n        },\n        {\n          x: 12945228.090067945,\n          y: 4862073.16642714,\n        },\n        {\n          x: 12945255.305523323,\n          y: 4862092.36230406,\n        },\n        {\n          x: 12945285.556679495,\n          y: 4862110.414454173,\n        },\n        {\n          x: 12945315.808265274,\n          y: 4862128.467023728,\n        },\n        {\n          x: 12945361.54760602,\n          y: 4862142.217026062,\n        },\n        {\n          x: 12945487.830327151,\n          y: 4862156.985505024,\n        },\n      ],\n    },\n    {\n      id: \"14\",\n      source: \"28\",\n      target: \"29\",\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 0\",\n      controlPoints: [\n        {\n          x: 12937234.877597623,\n          y: 4846515.674866713,\n        },\n        {\n          x: 12937368.988537306,\n          y: 4846593.191490097,\n        },\n        {\n          x: 12937461.335291399,\n          y: 4846647.398606839,\n        },\n        {\n          x: 12937532.375518117,\n          y: 4846688.019702177,\n        },\n        {\n          x: 12937591.769328088,\n          y: 4846720.059432032,\n        },\n        {\n          x: 12937621.188342465,\n          y: 4846732.002843995,\n        },\n        {\n          x: 12937671.789557256,\n          y: 4846748.737535954,\n        },\n        {\n          x: 12937709.602904188,\n          y: 4846758.320650579,\n        },\n        {\n          x: 12937735.762316125,\n          y: 4846763.326932602,\n        },\n        {\n          x: 12937752.397758542,\n          y: 4846765.615152837,\n        },\n        {\n          x: 12937773.44091199,\n          y: 4846768.332774585,\n        },\n        {\n          x: 12937804.297495496,\n          y: 4846770.764304414,\n        },\n        {\n          x: 12937827.33427437,\n          y: 4846772.051537565,\n        },\n        {\n          x: 12937868.008451082,\n          y: 4846771.479321919,\n        },\n        {\n          x: 12937892.32897584,\n          y: 4846770.33498424,\n        },\n        {\n          x: 12937918.075058706,\n          y: 4846766.901995257,\n        },\n        {\n          x: 12937940.834554123,\n          y: 4846763.6122220345,\n        },\n        {\n          x: 12937968.574529182,\n          y: 4846758.463006948,\n        },\n        {\n          x: 12937995.180239107,\n          y: 4846751.025023762,\n        },\n        {\n          x: 12938017.517118562,\n          y: 4846745.160619812,\n        },\n        {\n          x: 12938042.132414829,\n          y: 4846737.43681869,\n        },\n        {\n          x: 12938076.570282334,\n          y: 4846723.276240112,\n        },\n        {\n          x: 12938122.822349729,\n          y: 4846702.393192925,\n        },\n        {\n          x: 12938155.702757211,\n          y: 4846683.512634498,\n        },\n        {\n          x: 12938188.444042044,\n          y: 4846662.62954278,\n        },\n        {\n          x: 12938219.76602793,\n          y: 4846639.600848661,\n        },\n        {\n          x: 12938250.095861865,\n          y: 4846614.140497331,\n        },\n        {\n          x: 12938278.438376905,\n          y: 4846585.962328421,\n        },\n        {\n          x: 12938304.220769178,\n          y: 4846557.783944012,\n        },\n        {\n          x: 12938329.579807637,\n          y: 4846527.173999285,\n        },\n        {\n          x: 12938353.520818293,\n          y: 4846493.274026497,\n        },\n        {\n          x: 12938372.907309297,\n          y: 4846461.6623603245,\n        },\n        {\n          x: 12938391.017690128,\n          y: 4846427.046785262,\n        },\n        {\n          x: 12938412.561981687,\n          y: 4846377.125676343,\n        },\n        {\n          x: 12938434.974010698,\n          y: 4846316.476277426,\n        },\n        {\n          x: 12938448.248669473,\n          y: 4846281.574595996,\n        },\n        {\n          x: 12938475.656359944,\n          y: 4846207.766580478,\n        },\n        {\n          x: 12938490.211433839,\n          y: 4846172.579389068,\n        },\n        {\n          x: 12938507.041724533,\n          y: 4846137.6790905995,\n        },\n        {\n          x: 12938526.29072453,\n          y: 4846102.493274418,\n        },\n        {\n          x: 12938542.26056133,\n          y: 4846073.028826507,\n        },\n        {\n          x: 12938584.740041988,\n          y: 4846003.660309321,\n        },\n        {\n          x: 12938633.06400581,\n          y: 4845924.638571542,\n        },\n        {\n          x: 12938715.454181843,\n          y: 4845792.771941782,\n        },\n        {\n          x: 12938776.553557053,\n          y: 4845700.585488995,\n        },\n        {\n          x: 12938781.398345944,\n          y: 4845694.149817628,\n        },\n        {\n          x: 12938800.081236716,\n          y: 4845673.873968367,\n        },\n        {\n          x: 12938830.820290571,\n          y: 4845645.815687927,\n        },\n        {\n          x: 12938844.393556165,\n          y: 4845633.390067325,\n        },\n        {\n          x: 12938873.132778017,\n          y: 4845610.143030206,\n        },\n        {\n          x: 12938936.183000699,\n          y: 4845573.274183875,\n        },\n        {\n          x: 12938969.9751077,\n          y: 4845523.292870295,\n        },\n        {\n          x: 12939008.30658488,\n          y: 4845483.611718048,\n        },\n        {\n          x: 12939046.62636937,\n          y: 4845453.553428374,\n        },\n        {\n          x: 12939107.67397802,\n          y: 4845425.508528395,\n        },\n        {\n          x: 12939139.988430338,\n          y: 4845415.095566754,\n        },\n        {\n          x: 12939215.636890687,\n          y: 4845415.718690437,\n        },\n        {\n          x: 12939308.039270518,\n          y: 4845421.266472513,\n        },\n        {\n          x: 12939491.25690715,\n          y: 4845458.350894194,\n        },\n        {\n          x: 12939790.511140315,\n          y: 4845556.207267058,\n        },\n        {\n          x: 12939988.628771447,\n          y: 4845616.1622475535,\n        },\n        {\n          x: 12940117.839141306,\n          y: 4845661.911291016,\n        },\n        {\n          x: 12940686.897376765,\n          y: 4845952.2196258595,\n        },\n        {\n          x: 12941074.89764744,\n          y: 4846157.503429323,\n        },\n        {\n          x: 12941335.171058182,\n          y: 4846317.370755986,\n        },\n        {\n          x: 12941559.500148436,\n          y: 4846435.253157876,\n        },\n        {\n          x: 12941942.0737714,\n          y: 4846649.584496282,\n        },\n        {\n          x: 12942044.003008543,\n          y: 4846663.89086179,\n        },\n        {\n          x: 12942128.18335582,\n          y: 4846652.232800751,\n        },\n        {\n          x: 12942566.46418881,\n          y: 4846526.042660932,\n        },\n        {\n          x: 12942889.715147126,\n          y: 4846450.953434545,\n        },\n        {\n          x: 12943968.393642,\n          y: 4846408.250017698,\n        },\n        {\n          x: 12944809.837601995,\n          y: 4846425.649451,\n        },\n        {\n          x: 12944985.099897848,\n          y: 4846441.60822536,\n        },\n        {\n          x: 12945546.215890277,\n          y: 4846492.747584046,\n        },\n        {\n          x: 12946211.229001617,\n          y: 4846547.780306945,\n        },\n      ],\n    },\n    {\n      id: \"15\",\n      source: \"30\",\n      target: \"31\",\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 0\",\n      controlPoints: [\n        {\n          x: 12975220.360613192,\n          y: 4878868.526210992,\n        },\n        {\n          x: 12975170.101829547,\n          y: 4878482.810853661,\n        },\n        {\n          x: 12975127.393577926,\n          y: 4878166.084186471,\n        },\n        {\n          x: 12975102.3383307,\n          y: 4877971.094415046,\n        },\n        {\n          x: 12975067.230635904,\n          y: 4877703.212676576,\n        },\n        {\n          x: 12975028.196639525,\n          y: 4877408.433615002,\n        },\n        {\n          x: 12974992.782733576,\n          y: 4877135.782488413,\n        },\n        {\n          x: 12974961.616855532,\n          y: 4876898.418269849,\n        },\n        {\n          x: 12974957.635438241,\n          y: 4876867.667671654,\n        },\n        {\n          x: 12974924.692424836,\n          y: 4876613.225913413,\n        },\n        {\n          x: 12974904.122140514,\n          y: 4876457.185169152,\n        },\n        {\n          x: 12974891.114395186,\n          y: 4876358.838107704,\n        },\n        {\n          x: 12974881.80755435,\n          y: 4876318.801830084,\n        },\n        {\n          x: 12974850.30174708,\n          y: 4876128.145737729,\n        },\n        {\n          x: 12974841.600142721,\n          y: 4876060.242186066,\n        },\n        {\n          x: 12974833.693115635,\n          y: 4875993.44712488,\n        },\n        {\n          x: 12974824.851303473,\n          y: 4875896.879010218,\n        },\n        {\n          x: 12974823.581860177,\n          y: 4875861.890374971,\n        },\n        {\n          x: 12974804.231609207,\n          y: 4875717.818793602,\n        },\n        {\n          x: 12974793.363254767,\n          y: 4875644.593833729,\n        },\n        {\n          x: 12974780.733046675,\n          y: 4875579.452634726,\n        },\n        {\n          x: 12974765.457217943,\n          y: 4875526.588724708,\n        },\n        {\n          x: 12974748.090285787,\n          y: 4875469.247595661,\n        },\n        {\n          x: 12974731.657055452,\n          y: 4875430.44830189,\n        },\n        {\n          x: 12974707.759133428,\n          y: 4875374.935044397,\n        },\n        {\n          x: 12974682.982388051,\n          y: 4875324.213162166,\n        },\n        {\n          x: 12974660.60794111,\n          y: 4875285.743106426,\n        },\n        {\n          x: 12974635.85688353,\n          y: 4875245.7891169265,\n        },\n        {\n          x: 12974592.33221722,\n          y: 4875182.6007377645,\n        },\n        {\n          x: 12974565.515120054,\n          y: 4875148.641781552,\n        },\n        {\n          x: 12974477.340428105,\n          y: 4875046.200795493,\n        },\n        {\n          x: 12974324.23997027,\n          y: 4874868.727412534,\n        },\n        {\n          x: 12974285.225031873,\n          y: 4874824.06709895,\n        },\n        {\n          x: 12974250.676817749,\n          y: 4874784.765451768,\n        },\n        {\n          x: 12974226.548435159,\n          y: 4874754.982961457,\n        },\n        {\n          x: 12974179.793554721,\n          y: 4874702.287665765,\n        },\n        {\n          x: 12974152.700378012,\n          y: 4874674.611620291,\n        },\n        {\n          x: 12974102.993937358,\n          y: 4874629.4094777135,\n        },\n        {\n          x: 12974057.281876976,\n          y: 4874592.149864237,\n        },\n        {\n          x: 12974010.571259402,\n          y: 4874557.10058754,\n        },\n        {\n          x: 12973965.349593911,\n          y: 4874523.243715123,\n        },\n        {\n          x: 12973927.86306645,\n          y: 4874495.325444062,\n        },\n        {\n          x: 12973778.829987278,\n          y: 4874388.442810681,\n        },\n        {\n          x: 12973631.292726409,\n          y: 4874281.260318043,\n        },\n        {\n          x: 12973511.128084678,\n          y: 4874193.07702723,\n        },\n        {\n          x: 12973457.885669941,\n          y: 4874152.090015151,\n        },\n        {\n          x: 12973424.569167605,\n          y: 4874125.653511811,\n        },\n        {\n          x: 12973401.064728435,\n          y: 4874103.948181291,\n        },\n        {\n          x: 12973364.466450525,\n          y: 4874069.155318013,\n        },\n        {\n          x: 12973343.040548371,\n          y: 4874047.737895291,\n        },\n        {\n          x: 12973301.971003683,\n          y: 4874004.595285215,\n        },\n        {\n          x: 12973268.333740914,\n          y: 4873965.001992706,\n        },\n        {\n          x: 12973223.968151508,\n          y: 4873907.523655236,\n        },\n        {\n          x: 12973200.145078428,\n          y: 4873874.757068463,\n        },\n        {\n          x: 12973184.359140303,\n          y: 4873851.817254196,\n        },\n        {\n          x: 12973151.288220981,\n          y: 4873799.065100245,\n        },\n        {\n          x: 12973133.104508085,\n          y: 4873765.071843533,\n        },\n        {\n          x: 12973115.220516248,\n          y: 4873731.975402937,\n        },\n        {\n          x: 12973083.514099035,\n          y: 4873666.6145877475,\n        },\n        {\n          x: 12972958.272448545,\n          y: 4873409.226124313,\n        },\n        {\n          x: 12972918.910218379,\n          y: 4873326.610352403,\n        },\n        {\n          x: 12972826.476255693,\n          y: 4873134.840144364,\n        },\n        {\n          x: 12972795.763337882,\n          y: 4873070.719005933,\n        },\n        {\n          x: 12972744.76742065,\n          y: 4872959.163678453,\n        },\n        {\n          x: 12972720.60264992,\n          y: 4872901.886303345,\n        },\n        {\n          x: 12972659.997036628,\n          y: 4872735.667320859,\n        },\n        {\n          x: 12972643.299525585,\n          y: 4872699.580940345,\n        },\n        {\n          x: 12972559.100747146,\n          y: 4872455.805418115,\n        },\n        {\n          x: 12972532.783339068,\n          y: 4872369.677216135,\n        },\n        {\n          x: 12972491.590280673,\n          y: 4872256.099208747,\n        },\n        {\n          x: 12972431.316032,\n          y: 4872100.655541013,\n        },\n        {\n          x: 12972411.705557901,\n          y: 4872052.949093282,\n        },\n        {\n          x: 12972344.317184499,\n          y: 4871873.754390362,\n        },\n        {\n          x: 12972344.317084517,\n          y: 4871873.754090381,\n        },\n        {\n          x: 12972283.901539784,\n          y: 4871713.096747656,\n        },\n        {\n          x: 12972231.51025757,\n          y: 4871590.704161345,\n        },\n        {\n          x: 12972220.786418218,\n          y: 4871568.055674147,\n        },\n        {\n          x: 12972187.677583814,\n          y: 4871506.46596912,\n        },\n        {\n          x: 12972159.917606726,\n          y: 4871462.740223999,\n        },\n        {\n          x: 12972122.405523332,\n          y: 4871409.778587388,\n        },\n        {\n          x: 12972070.897276413,\n          y: 4871345.708445298,\n        },\n        {\n          x: 12972018.521820415,\n          y: 4871290.250138916,\n        },\n        {\n          x: 12971949.740475345,\n          y: 4871227.65827687,\n        },\n        {\n          x: 12971856.352377752,\n          y: 4871157.9745282065,\n        },\n        {\n          x: 12971744.543129945,\n          y: 4871096.1426233165,\n        },\n        {\n          x: 12971666.305498093,\n          y: 4871059.28347291,\n        },\n        {\n          x: 12971573.517186211,\n          y: 4871028.317100962,\n        },\n        {\n          x: 12971543.275268642,\n          y: 4871019.710796947,\n        },\n        {\n          x: 12970313.75580163,\n          y: 4871029.4038401535,\n        },\n        {\n          x: 12969743.624482477,\n          y: 4871013.157693107,\n        },\n        {\n          x: 12969526.746136123,\n          y: 4871006.97216711,\n        },\n        {\n          x: 12969268.713759044,\n          y: 4870954.619065353,\n        },\n        {\n          x: 12969027.21710455,\n          y: 4870806.293398591,\n        },\n        {\n          x: 12968695.732934553,\n          y: 4870386.919417365,\n        },\n        {\n          x: 12968267.842089783,\n          y: 4869845.614706303,\n        },\n        {\n          x: 12968041.977084596,\n          y: 4869507.853755934,\n        },\n        {\n          x: 12967897.801472468,\n          y: 4868972.889715916,\n        },\n        {\n          x: 12967878.337220326,\n          y: 4867594.394019558,\n        },\n        {\n          x: 12967868.77862341,\n          y: 4866238.919959571,\n        },\n        {\n          x: 12967801.717744218,\n          y: 4865970.777359848,\n        },\n        {\n          x: 12967494.283058798,\n          y: 4865925.768674796,\n        },\n        {\n          x: 12965837.973847104,\n          y: 4865743.023798019,\n        },\n        {\n          x: 12965348.196035301,\n          y: 4865688.751628207,\n        },\n        {\n          x: 12964443.21307059,\n          y: 4865516.203149938,\n        },\n      ],\n    },\n    {\n      id: \"16\",\n      source: \"32\",\n      target: \"33\",\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 0\",\n      controlPoints: [\n        {\n          x: 12981108.370146083,\n          y: 4871488.68313175,\n        },\n        {\n          x: 12981018.508214273,\n          y: 4871439.9092021575,\n        },\n        {\n          x: 12980902.535834748,\n          y: 4871405.203097882,\n        },\n        {\n          x: 12980821.525095403,\n          y: 4871396.07635756,\n        },\n        {\n          x: 12980751.756629316,\n          y: 4871395.085485736,\n        },\n        {\n          x: 12980685.769679295,\n          y: 4871406.921907764,\n        },\n        {\n          x: 12980609.835639,\n          y: 4871428.117243195,\n        },\n        {\n          x: 12980553.791983627,\n          y: 4871454.35924438,\n        },\n        {\n          x: 12980504.260708505,\n          y: 4871483.782440005,\n        },\n        {\n          x: 12980435.350114407,\n          y: 4871539.621344493,\n        },\n        {\n          x: 12980398.504969673,\n          y: 4871582.03131289,\n        },\n        {\n          x: 12980362.007896207,\n          y: 4871632.577822356,\n        },\n        {\n          x: 12980332.654508604,\n          y: 4871686.360369531,\n        },\n        {\n          x: 12980319.13294245,\n          y: 4871720.246401924,\n        },\n        {\n          x: 12980306.26908758,\n          y: 4871757.385237568,\n        },\n        {\n          x: 12980293.763164897,\n          y: 4871806.2405863255,\n        },\n        {\n          x: 12980277.698010115,\n          y: 4871929.260816189,\n        },\n        {\n          x: 12980261.290169481,\n          y: 4871965.0230897125,\n        },\n        {\n          x: 12980254.749320468,\n          y: 4871910.852033942,\n        },\n        {\n          x: 12980243.756181171,\n          y: 4871816.594568528,\n        },\n        {\n          x: 12980227.70573535,\n          y: 4871752.941176994,\n        },\n        {\n          x: 12980203.072226636,\n          y: 4871672.165283503,\n        },\n        {\n          x: 12980150.33990551,\n          y: 4871582.889266779,\n        },\n        {\n          x: 12980101.34029352,\n          y: 4871516.884384831,\n        },\n        {\n          x: 12980048.722460367,\n          y: 4871461.910039693,\n        },\n        {\n          x: 12979996.111785132,\n          y: 4871413.06501025,\n        },\n        {\n          x: 12979909.333892826,\n          y: 4871359.422428334,\n        },\n        {\n          x: 12979799.058829894,\n          y: 4871312.3731178045,\n        },\n        {\n          x: 12979720.936799372,\n          y: 4871295.456660487,\n        },\n        {\n          x: 12979624.500482768,\n          y: 4871274.924462654,\n        },\n        {\n          x: 12979479.39873571,\n          y: 4871277.213494264,\n        },\n        {\n          x: 12979085.453077132,\n          y: 4871280.917372964,\n        },\n        {\n          x: 12978992.156225236,\n          y: 4871279.384364794,\n        },\n        {\n          x: 12978956.177897697,\n          y: 4871277.666599098,\n        },\n        {\n          x: 12978900.674255166,\n          y: 4871271.113841657,\n        },\n        {\n          x: 12978860.293281717,\n          y: 4871262.702607095,\n        },\n        {\n          x: 12978764.752916442,\n          y: 4871245.472966051,\n        },\n        {\n          x: 12978664.480746558,\n          y: 4871226.718917767,\n        },\n        {\n          x: 12978629.714270562,\n          y: 4871220.650472208,\n        },\n        {\n          x: 12978620.414652059,\n          y: 4871219.068466421,\n        },\n        {\n          x: 12978564.580504624,\n          y: 4871213.590081386,\n        },\n        {\n          x: 12978460.737579372,\n          y: 4871195.649671084,\n        },\n        {\n          x: 12978328.733081415,\n          y: 4871172.822299577,\n        },\n        {\n          x: 12978213.58406164,\n          y: 4871153.546776074,\n        },\n        {\n          x: 12978126.884770632,\n          y: 4871139.996553964,\n        },\n        {\n          x: 12978030.808147773,\n          y: 4871127.039056859,\n        },\n        {\n          x: 12977949.096244726,\n          y: 4871117.637013953,\n        },\n        {\n          x: 12977857.7281794,\n          y: 4871107.719554274,\n        },\n        {\n          x: 12977818.256715368,\n          y: 4871103.431990254,\n        },\n        {\n          x: 12977782.926936783,\n          y: 4871099.961185381,\n        },\n        {\n          x: 12977738.76375114,\n          y: 4871094.860768784,\n        },\n        {\n          x: 12977699.015983863,\n          y: 4871089.466841593,\n        },\n        {\n          x: 12977670.034107389,\n          y: 4871085.695982234,\n        },\n        {\n          x: 12977617.58207723,\n          y: 4871075.083050405,\n        },\n        {\n          x: 12977586.096101644,\n          y: 4871069.051658005,\n        },\n        {\n          x: 12977553.816080883,\n          y: 4871065.107010753,\n        },\n        {\n          x: 12977547.258727068,\n          y: 4871063.901849335,\n        },\n        {\n          x: 12977530.618654177,\n          y: 4871060.843754747,\n        },\n        {\n          x: 12977510.63402144,\n          y: 4871057.271591576,\n        },\n        {\n          x: 12977488.410456756,\n          y: 4871052.304085646,\n        },\n        {\n          x: 12977476.108263735,\n          y: 4871049.825167599,\n        },\n        {\n          x: 12977449.974956136,\n          y: 4871043.750099359,\n        },\n        {\n          x: 12977426.211063186,\n          y: 4871036.9651420405,\n        },\n        {\n          x: 12977355.623273922,\n          y: 4871014.777517495,\n        },\n        {\n          x: 12977296.479809767,\n          y: 4870992.125603299,\n        },\n        {\n          x: 12977282.77631216,\n          y: 4870986.002440447,\n        },\n        {\n          x: 12977251.719621776,\n          y: 4870972.154493815,\n        },\n        {\n          x: 12977247.24550043,\n          y: 4870969.812148521,\n        },\n        {\n          x: 12977238.854476603,\n          y: 4870965.421079147,\n        },\n        {\n          x: 12977209.761773894,\n          y: 4870950.136411922,\n        },\n        {\n          x: 12977096.757856315,\n          y: 4870889.44525773,\n        },\n        {\n          x: 12976968.08990173,\n          y: 4870816.956775016,\n        },\n        {\n          x: 12976780.16768485,\n          y: 4870720.01310895,\n        },\n        {\n          x: 12976677.82368606,\n          y: 4870666.528023298,\n        },\n        {\n          x: 12976655.8764118,\n          y: 4870655.5205783425,\n        },\n        {\n          x: 12976529.223142704,\n          y: 4870592.317432991,\n        },\n        {\n          x: 12976428.586317737,\n          y: 4870542.427981049,\n        },\n        {\n          x: 12976366.5421185,\n          y: 4870518.407870099,\n        },\n        {\n          x: 12976329.380473636,\n          y: 4870506.354736436,\n        },\n        {\n          x: 12976271.82754423,\n          y: 4870490.321866817,\n        },\n        {\n          x: 12976228.111302977,\n          y: 4870481.388277324,\n        },\n        {\n          x: 12976188.09288433,\n          y: 4870478.038546045,\n        },\n        {\n          x: 12976149.436712662,\n          y: 4870471.373423314,\n        },\n        {\n          x: 12976071.072179394,\n          y: 4870465.607346994,\n        },\n        {\n          x: 12975965.86990555,\n          y: 4870455.646798379,\n        },\n        {\n          x: 12975917.917454332,\n          y: 4870449.027466127,\n        },\n        {\n          x: 12975868.894021038,\n          y: 4870442.773831003,\n        },\n        {\n          x: 12975820.580020344,\n          y: 4870433.638390911,\n        },\n        {\n          x: 12975790.158459982,\n          y: 4870426.94054179,\n        },\n        {\n          x: 12975775.838848663,\n          y: 4870422.328125062,\n        },\n        {\n          x: 12975751.13866662,\n          y: 4870414.524700168,\n        },\n        {\n          x: 12975725.00528259,\n          y: 4870405.648373743,\n        },\n        {\n          x: 12975714.620193584,\n          y: 4870400.657944233,\n        },\n        {\n          x: 12975694.938773984,\n          y: 4870397.150636553,\n        },\n        {\n          x: 12975674.888572035,\n          y: 4870388.966441453,\n        },\n        {\n          x: 12975636.937384691,\n          y: 4870373.667942694,\n        },\n        {\n          x: 12975612.227725828,\n          y: 4870361.187195985,\n        },\n        {\n          x: 12975582.510264473,\n          y: 4870348.370360326,\n        },\n        {\n          x: 12975500.513648823,\n          y: 4870309.887833572,\n        },\n        {\n          x: 12975383.793644667,\n          y: 4870256.097796813,\n        },\n        {\n          x: 12975133.184359929,\n          y: 4870136.739612404,\n        },\n        {\n          x: 12974949.40711058,\n          y: 4870050.794763821,\n        },\n        {\n          x: 12974941.365436705,\n          y: 4870047.009858454,\n        },\n        {\n          x: 12974724.15676446,\n          y: 4869944.777526178,\n        },\n        {\n          x: 12974559.111049827,\n          y: 4869868.410730108,\n        },\n        {\n          x: 12974550.453614099,\n          y: 4869864.520617537,\n        },\n        {\n          x: 12974441.55043712,\n          y: 4869814.212693192,\n        },\n        {\n          x: 12974270.106768792,\n          y: 4869734.071269941,\n        },\n        {\n          x: 12974091.838388277,\n          y: 4869651.027056911,\n        },\n        {\n          x: 12973885.444597295,\n          y: 4869555.245051317,\n        },\n        {\n          x: 12973766.248404168,\n          y: 4869500.831533556,\n        },\n        {\n          x: 12973540.981958374,\n          y: 4869392.930468844,\n        },\n        {\n          x: 12973391.381564768,\n          y: 4869323.244557277,\n        },\n        {\n          x: 12973283.232700225,\n          y: 4869272.859937838,\n        },\n        {\n          x: 12972573.852092165,\n          y: 4868943.251794805,\n        },\n        {\n          x: 12970368.479611576,\n          y: 4867801.281579257,\n        },\n        {\n          x: 12970186.368543653,\n          y: 4867581.247939134,\n        },\n        {\n          x: 12970138.160652429,\n          y: 4867522.999803067,\n        },\n        {\n          x: 12970014.83652081,\n          y: 4867376.428914912,\n        },\n        {\n          x: 12969982.687756885,\n          y: 4867339.028822399,\n        },\n        {\n          x: 12969938.176704682,\n          y: 4867288.1582316635,\n        },\n        {\n          x: 12969884.318320546,\n          y: 4867223.8002079725,\n        },\n        {\n          x: 12969842.279029265,\n          y: 4867174.850547206,\n        },\n        {\n          x: 12969736.51761531,\n          y: 4867052.928304552,\n        },\n        {\n          x: 12969715.618553909,\n          y: 4867028.835423228,\n        },\n        {\n          x: 12969620.004793288,\n          y: 4866917.186788599,\n        },\n        {\n          x: 12969438.04374979,\n          y: 4866711.844669058,\n        },\n        {\n          x: 12969408.156057132,\n          y: 4866677.285747163,\n        },\n        {\n          x: 12969324.820910655,\n          y: 4866578.791680055,\n        },\n        {\n          x: 12969226.67533753,\n          y: 4866469.379122947,\n        },\n        {\n          x: 12968956.364812195,\n          y: 4866149.976631404,\n        },\n        {\n          x: 12968801.20089387,\n          y: 4865953.939934027,\n        },\n        {\n          x: 12968661.628187554,\n          y: 4865774.016041136,\n        },\n        {\n          x: 12968440.203180425,\n          y: 4865520.086029257,\n        },\n        {\n          x: 12968418.752663735,\n          y: 4865496.720383862,\n        },\n        {\n          x: 12968265.16366474,\n          y: 4865329.4158122465,\n        },\n        {\n          x: 12968082.376416814,\n          y: 4865118.794538391,\n        },\n        {\n          x: 12967977.74367467,\n          y: 4865003.326373822,\n        },\n        {\n          x: 12967875.580874648,\n          y: 4864890.602510729,\n        },\n        {\n          x: 12967828.859212246,\n          y: 4864840.529032915,\n        },\n        {\n          x: 12967771.529788392,\n          y: 4864773.642307851,\n        },\n        {\n          x: 12967754.0789727,\n          y: 4864752.1729925005,\n        },\n        {\n          x: 12967615.98897636,\n          y: 4864590.439552254,\n        },\n        {\n          x: 12967559.654778784,\n          y: 4864523.543494982,\n        },\n        {\n          x: 12967512.793535465,\n          y: 4864468.1316355625,\n        },\n        {\n          x: 12967489.97373297,\n          y: 4864440.960919648,\n        },\n        {\n          x: 12967391.600998314,\n          y: 4864324.055311191,\n        },\n        {\n          x: 12967258.997379664,\n          y: 4864167.803726059,\n        },\n        {\n          x: 12967157.800077152,\n          y: 4864048.489056851,\n        },\n        {\n          x: 12967072.064892631,\n          y: 4863952.160647396,\n        },\n        {\n          x: 12966932.938263306,\n          y: 4863786.109663975,\n        },\n        {\n          x: 12966772.422852328,\n          y: 4863597.399173657,\n        },\n        {\n          x: 12966615.568496268,\n          y: 4863412.808523439,\n        },\n        {\n          x: 12966305.336633127,\n          y: 4863047.703772259,\n        },\n        {\n          x: 12966269.190687215,\n          y: 4863001.279273752,\n        },\n        {\n          x: 12965833.711641828,\n          y: 4862475.155696717,\n        },\n        {\n          x: 12965806.851898653,\n          y: 4862442.704151941,\n        },\n        {\n          x: 12964858.528949967,\n          y: 4861327.4237803,\n        },\n        {\n          x: 12964224.475284964,\n          y: 4860561.038983111,\n        },\n        {\n          x: 12963811.623681322,\n          y: 4860051.71716615,\n        },\n        {\n          x: 12963154.244359475,\n          y: 4859240.959120094,\n        },\n        {\n          x: 12962659.851017611,\n          y: 4858630.950164011,\n        },\n        {\n          x: 12962035.08051321,\n          y: 4857953.39954861,\n        },\n        {\n          x: 12961929.533509394,\n          y: 4857864.163282811,\n        },\n        {\n          x: 12961663.821656032,\n          y: 4857639.499910775,\n        },\n        {\n          x: 12961465.562880669,\n          y: 4857485.1627320545,\n        },\n        {\n          x: 12961385.775293019,\n          y: 4857425.3359782435,\n        },\n      ],\n    },\n  ],\n};\nconst colors = [\n  \"rgb(64, 174, 247)\",\n  \"rgb(108, 207, 169)\",\n  \"rgb(157, 223, 125)\",\n  \"rgb(240, 198, 74)\",\n  \"rgb(221, 158, 97)\",\n  \"rgb(141, 163, 112)\",\n  \"rgb(115, 136, 220)\",\n  \"rgb(133, 88, 219)\",\n  \"rgb(203, 135, 226)\",\n  \"rgb(227, 137, 163)\",\n];\nconst { nodes } = data;\nconst { edges } = data;\nconst classMap = new Map();\nlet classId = 0;\nnodes.forEach(function (node) {\n  node.y = -node.y;\n});\nedges.forEach(function (edge) {\n  edge.id = `edge-${edge.id}`;\n  // edge cluster\n  if (edge.class && classMap.get(edge.class) === undefined) {\n    classMap.set(edge.class, classId);\n    classId++;\n  }\n  const cid = classMap.get(edge.class);\n  edge.color = colors[cid % colors.length];\n  const { controlPoints } = edge;\n\n  controlPoints.forEach(function (cp) {\n    cp.y = -cp.y;\n  });\n});\n\nexport { nodes, edges, data };\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/metro-lines/index.acss",
    "content": "page {\n  background-color: #101424;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.canvas {\n  margin-top: 200rpx;\n  background: url(\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*G23iRqkiibIAAAAAAAAAAABkARQnAQ\");\n  background-size: 100% 100%;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/metro-lines/index.axml",
    "content": "<view class=\"canvas\">\n  <f6-canvas\n    width=\"{{width}}\"\n    height=\"{{height}}\"\n    forceMini=\"{{forceMini}}\"\n    pixelRatio=\"{{pixelRatio}}\"\n    onTouchEvent=\"handleTouch\"\n    onInit=\"handleInit\"\n  ></f6-canvas>\n</view>\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/metro-lines/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport { nodes, edges, data } from \"./data\";\n/**\n * metroLines\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 412,\n    height: 412,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { pixelRatio } = my.getSystemInfoSync();\n\n    my.setBackgroundColor({\n      backgroundColorTop: \"#000000\",\n      backgroundColorBottom: \"#000000\",\n    });\n    // custom the node\n    F6.registerNode(\n      \"breath-node\",\n      {\n        afterDraw(cfg, group) {\n          const r = cfg.size / 2;\n          const back1 = group.addShape(\"circle\", {\n            zIndex: -3,\n            attrs: {\n              x: 0,\n              y: 0,\n              r,\n              fill: cfg.color || (cfg.style && cfg.style.fill),\n              opacity: 0.6,\n            },\n            name: \"back1-shape\",\n          });\n          const back2 = group.addShape(\"circle\", {\n            zIndex: -2,\n            attrs: {\n              x: 0,\n              y: 0,\n              r,\n              fill: cfg.color,\n              // 为了显示清晰，随意设置了颜色\n              opacity: 0.6,\n            },\n            name: \"back2-shape\",\n          });\n          const back3 = group.addShape(\"circle\", {\n            zIndex: -1,\n            attrs: {\n              x: 0,\n              y: 0,\n              r,\n              fill: cfg.color,\n              opacity: 0.6,\n            },\n            name: \"back3-shape\",\n          });\n          group.sort(); // 排序，根据zIndex 排序\n          const delayBase = Math.random() * 2000;\n          back1.animate(\n            {\n              // 逐渐放大，并消失\n              r: r + 10,\n              opacity: 0.0,\n            },\n            {\n              repeat: true, // 循环\n              duration: 3000,\n              easing: \"easeCubic\",\n              delay: delayBase, // 无延迟\n            },\n          );\n          back2.animate(\n            {\n              // 逐渐放大，并消失\n              r: r + 10,\n              opacity: 0.0,\n            },\n            {\n              repeat: true, // 循环\n              duration: 3000,\n              easing: \"easeCubic\",\n              delay: delayBase + 1000, // 1 秒延迟\n            },\n          );\n          back3.animate(\n            {\n              // 逐渐放大，并消失\n              r: r + 10,\n              opacity: 0.0,\n            },\n            {\n              repeat: true, // 循环\n              duration: 3000,\n              easing: \"easeCubic\",\n              delay: delayBase + 2000, // 2 秒延迟\n            },\n          );\n        },\n      },\n      \"circle\",\n    );\n\n    // custom the edge\n    F6.registerEdge(\n      \"running-polyline\",\n      {\n        afterDraw(cfg, group) {\n          const shape = group.get(\"children\")[0];\n          const length = shape.getTotalLength();\n          let circleCount = Math.ceil(length / 20);\n          circleCount = circleCount === 0 ? 1 : circleCount;\n\n          const _loop = function _loop(i) {\n            const delay = Math.random() * 1000;\n            const start = shape.getPoint(i / circleCount);\n            const circle = group.addShape(\"circle\", {\n              attrs: {\n                x: start.x,\n                y: start.y,\n                r: 0.8,\n                fill: \"#A0F3AF\",\n                shadowColor: \"#fff\",\n                shadowBlur: 30,\n              },\n              name: \"circle-shape\",\n            });\n            circle.animate(\n              (ratio) => {\n                ratio += i / circleCount;\n                if (ratio > 1) {\n                  ratio %= 1;\n                }\n                const tmpPoint = shape.getPoint(ratio);\n                return {\n                  x: tmpPoint.x,\n                  y: tmpPoint.y,\n                };\n              },\n              {\n                repeat: true,\n                duration: 10 * length,\n                easing: \"easeCubic\",\n                delay,\n              },\n            );\n          };\n\n          for (let i = 0; i < circleCount; i++) {\n            _loop(i);\n          }\n        },\n      },\n      \"polyline\",\n    );\n\n    this.setData({\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    function scaleNodesPoints(nodes_, edges_, graphSize) {\n      const size = graphSize[0] < graphSize[1] ? graphSize[0] : graphSize[1];\n      let minX = 99999999999999999;\n      let maxX = -99999999999999999;\n      let minY = 99999999999999999;\n      let maxY = -99999999999999999;\n      nodes_.forEach(function (node) {\n        if (node.x > maxX) maxX = node.x;\n        if (node.x < minX) minX = node.x;\n        if (node.y > maxY) maxY = node.y;\n        if (node.y < minY) minY = node.y;\n      });\n\n      edges_.forEach(function (edge) {\n        const { controlPoints } = edge;\n        controlPoints.forEach(function (cp) {\n          if (cp.x > maxX) maxX = cp.x;\n          if (cp.x < minX) minX = cp.x;\n          if (cp.y > maxY) maxY = cp.y;\n          if (cp.y < minY) minY = cp.y;\n        });\n      });\n\n      const xScale = maxX - minX;\n      const yScale = maxY - minY;\n      nodes_.forEach(function (node) {\n        node.orix = node.x;\n        node.oriy = node.y;\n        node.x = ((node.x - minX) / xScale) * size;\n        node.y = ((node.y - minY) / yScale) * size;\n      });\n      edges_.forEach(function (edge) {\n        const { controlPoints } = edge;\n        controlPoints.forEach(function (cp) {\n          cp.x = ((cp.x - minX) / xScale) * size;\n          cp.y = ((cp.y - minY) / yScale) * size;\n        });\n      });\n    }\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"edge-tooltip\",\n            formatText: function formatText(model) {\n              const text = model.class;\n              return text;\n            },\n          },\n        ],\n      },\n      defaultNode: {\n        type: \"breath-node\",\n        size: 3,\n        style: {\n          lineWidth: 0,\n          fill: \"rgb(240, 223, 83)\",\n        },\n      },\n      defaultEdge: {\n        type: \"running-polyline\",\n        size: 1,\n        color: \"rgb(14,142,63)\",\n        style: {\n          opacity: 0.8,\n          lineAppendWidth: 3,\n        },\n      },\n    });\n    const graphSize = [500, 500];\n    scaleNodesPoints(nodes, edges, graphSize);\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/metro-lines/index.json",
    "content": "{\n  \"defaultTitle\": \"地铁路线图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/mind-map/data.js",
    "content": "const rawData = {\n  label: \"Modeling Methods\",\n  id: \"0\",\n  children: [\n    {\n      label: \"Classification\",\n      id: \"0-1\",\n      color: \"#5AD8A6\",\n      children: [\n        {\n          label: \"Logistic regression\",\n          id: \"0-1-1\",\n        },\n        {\n          label: \"Linear discriminant analysis\",\n          id: \"0-1-2\",\n        },\n        {\n          label: \"Rules\",\n          id: \"0-1-3\",\n        },\n        {\n          label: \"Decision trees\",\n          id: \"0-1-4\",\n        },\n        {\n          label: \"Naive Bayes\",\n          id: \"0-1-5\",\n        },\n        {\n          label: \"K nearest neighbor\",\n          id: \"0-1-6\",\n        },\n        {\n          label: \"Probabilistic neural network\",\n          id: \"0-1-7\",\n        },\n        {\n          label: \"Support vector machine\",\n          id: \"0-1-8\",\n        },\n      ],\n    },\n    {\n      label: \"Consensus\",\n      id: \"0-2\",\n      color: \"#F6BD16\",\n      children: [\n        {\n          label: \"Models diversity\",\n          id: \"0-2-1\",\n          children: [\n            {\n              label: \"Different initializations\",\n              id: \"0-2-1-1\",\n            },\n            {\n              label: \"Different parameter choices\",\n              id: \"0-2-1-2\",\n            },\n            {\n              label: \"Different architectures\",\n              id: \"0-2-1-3\",\n            },\n            {\n              label: \"Different modeling methods\",\n              id: \"0-2-1-4\",\n            },\n            {\n              label: \"Different training sets\",\n              id: \"0-2-1-5\",\n            },\n            {\n              label: \"Different feature sets\",\n              id: \"0-2-1-6\",\n            },\n          ],\n        },\n        {\n          label: \"Methods\",\n          id: \"0-2-2\",\n          children: [\n            {\n              label: \"Classifier selection\",\n              id: \"0-2-2-1\",\n            },\n            {\n              label: \"Classifier fusion\",\n              id: \"0-2-2-2\",\n            },\n          ],\n        },\n        {\n          label: \"Common\",\n          id: \"0-2-3\",\n          children: [\n            {\n              label: \"Bagging\",\n              id: \"0-2-3-1\",\n            },\n            {\n              label: \"Boosting\",\n              id: \"0-2-3-2\",\n            },\n            {\n              label: \"AdaBoost\",\n              id: \"0-2-3-3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      label: \"Regression\",\n      id: \"0-3\",\n      color: \"#269A99\",\n      children: [\n        {\n          label: \"Multiple linear regression\",\n          id: \"0-3-1\",\n        },\n        {\n          label: \"Partial least squares\",\n          id: \"0-3-2\",\n        },\n        {\n          label: \"Multi-layer feedforward neural network\",\n          id: \"0-3-3\",\n        },\n        {\n          label: \"General regression neural network\",\n          id: \"0-3-4\",\n        },\n        {\n          label: \"Support vector regression\",\n          id: \"0-3-5\",\n        },\n      ],\n    },\n  ],\n};\n\nconst dataTransform = (data_) => {\n  const changeData = (d, level = 0, color) => {\n    const data = {\n      ...d,\n    };\n    switch (level) {\n      case 0:\n        data.type = \"dice-mind-map-root\";\n        break;\n      case 1:\n        data.type = \"dice-mind-map-sub\";\n        break;\n      default:\n        data.type = \"dice-mind-map-leaf\";\n        break;\n    }\n\n    data.hover = false;\n\n    if (color) {\n      data.color = color;\n    }\n\n    if (level === 1 && !d.direction) {\n      if (!d.direction) {\n        data.direction =\n          d.id.charCodeAt(d.id.length - 1) % 2 === 0 ? \"right\" : \"left\";\n      }\n    }\n\n    if (d.children) {\n      data.children = d.children.map((child) =>\n        changeData(child, level + 1, data.color),\n      );\n    }\n    return data;\n  };\n  return changeData(data_);\n};\n\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/mind-map/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/mind-map/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport result from \"./data\";\n\n/**\n * mindMap\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    const { Util } = F6;\n    // const colorArr = [\n    //   '#5B8FF9',\n    //   '#5AD8A6',\n    //   '#5D7092',\n    //   '#F6BD16',\n    //   '#6F5EF9',\n    //   '#6DC8EC',\n    //   '#D3EEF9',\n    //   '#DECFEA',\n    //   '#FFE0C7',\n    //   '#1E9493',\n    //   '#BBDEDE',\n    //   '#FF99C3',\n    //   '#FFE0ED',\n    //   '#CDDDFD',\n    //   '#CDF3E4',\n    //   '#CED4DE',\n    //   '#FCEBB9',\n    //   '#D3CEFD',\n    //   '#945FB9',\n    //   '#FF9845',\n    // ];\n\n    F6.registerNode(\n      \"dice-mind-map-root\",\n      {\n        jsx: (cfg) => {\n          const width = Util.getTextSize(cfg.label, 16)[0] + 24;\n          const stroke = cfg.style.stroke || \"#096dd9\";\n\n          return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${width}, height: 42, stroke: ${stroke}, radius: 4}} keyshape>\n              <text style={{ fontSize: 16, marginLeft: 12, marginTop: 12 }}>${\n                cfg.label\n              }</text>\n              <text style={{ marginLeft: ${\n                width - 16\n              }, marginTop: -20, stroke: '#66ccff', fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              } }} action=\"add\">+</text>\n            </rect>\n          </group>\n        `;\n        },\n        getAnchorPoints() {\n          return [\n            [0, 0.5],\n            [1, 0.5],\n          ];\n        },\n      },\n      \"single-node\",\n    );\n    F6.registerNode(\n      \"dice-mind-map-sub\",\n      {\n        jsx: (cfg) => {\n          const width = Util.getTextSize(cfg.label, 14)[0] + 24;\n          const color = cfg.color || cfg.style.stroke;\n\n          return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${\n              width + 24\n            }, height: 22}} keyshape>\n              <text draggable=\"true\" style={{ fontSize: 14, marginLeft: 12, marginTop: 6 }}>${\n                cfg.label\n              }</text>\n              <text style={{ marginLeft: ${\n                width - 8\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"add\">+</text>\n              <text style={{ marginLeft: ${\n                width - 4\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"delete\">-</text>\n            </rect>\n            <rect style={{ fill: ${color}, width: ${\n              width + 24\n            }, height: 2, x: 0, y: 22 }} />\n            \n          </group>\n        `;\n        },\n        getAnchorPoints() {\n          return [\n            [0, 0.965],\n            [1, 0.965],\n          ];\n        },\n      },\n      \"single-node\",\n    );\n    F6.registerNode(\n      \"dice-mind-map-leaf\",\n      {\n        jsx: (cfg) => {\n          const width = Util.getTextSize(cfg.label, 12)[0] + 24;\n          const color = cfg.color || cfg.style.stroke;\n\n          return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${\n              width + 20\n            }, height: 26, fill: 'transparent' }}>\n              <text style={{ fontSize: 12, marginLeft: 12, marginTop: 6 }}>${\n                cfg.label\n              }</text>\n                  <text style={{ marginLeft: ${\n                    width - 8\n                  }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                    cfg.hover ? 0.75 : 0\n                  }, next: 'inline' }} action=\"add\">+</text>\n                  <text style={{ marginLeft: ${\n                    width - 4\n                  }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                    cfg.hover ? 0.75 : 0\n                  }, next: 'inline' }} action=\"delete\">-</text>\n            </rect>\n            <rect style={{ fill: ${color}, width: ${\n              width + 24\n            }, height: 2, x: 0, y: 32 }} />\n            \n          </group>\n        `;\n        },\n        getAnchorPoints() {\n          return [\n            [0, 0.965],\n            [1, 0.965],\n          ];\n        },\n      },\n      \"single-node\",\n    );\n    F6.registerBehavior(\"dice-mindmap\", {\n      getEvents() {\n        return {\n          \"node:click\": \"clickNode\",\n          \"node:dblclick\": \"editNode\",\n          \"node:mouseenter\": \"hoverNode\",\n          \"node:mouseleave\": \"hoverNodeOut\",\n        };\n      },\n\n      clickNode(evt) {\n        // const model = evt.item.get('model');\n        const name = evt.target.get(\"action\");\n        switch (name) {\n          // TODO:这里没办法过语法检查\n          // case 'add':\n          //   const newId = `${model.id}-${\n          //     ((model.children || []).reduce((a, b) => {\n          //       const num = Number(b.id.split('-').pop());\n          //       return a < num ? num : a;\n          //     }, 0) || 0) + 1\n          //   }`;\n          //   evt.currentTarget.updateItem(evt.item, {\n          //     children: (model.children || []).concat([\n          //       {\n          //         id: newId,\n          //         direction: newId.charCodeAt(newId.length - 1) % 2 === 0 ? 'right' : 'left',\n          //         label: 'New',\n          //         type: 'dice-mind-map-leaf',\n          //         color: model.color || colorArr[Math.floor(Math.random() * colorArr.length)],\n          //       },\n          //     ]),\n          //   });\n          //   evt.currentTarget.layout(false);\n          //   break;\n          // case 'delete':\n          //   const parent = evt.item.get('parent');\n          //   evt.currentTarget.updateItem(parent, {\n          //     children: (parent.get('model').children || []).filter((e) => e.id !== model.id),\n          //   });\n          //   evt.currentTarget.layout(false);\n          //   break;\n          case \"edit\":\n            break;\n          default:\n        }\n      },\n      editNode(evt) {\n        const { item } = evt;\n        const model = item.get(\"model\");\n        const { x, y } = item.calculateBBox();\n        const graph = evt.currentTarget;\n        const realPosition = evt.currentTarget.getClientByPoint(x, y);\n        const el = document.createElement(\"div\");\n        const fontSizeMap = {\n          \"dice-mind-map-root\": 24,\n          \"dice-mind-map-sub\": 18,\n          \"dice-mind-map-leaf\": 16,\n        };\n        el.style.fontSize = `${fontSizeMap[model.type]}px`;\n        el.style.position = \"fixed\";\n        el.style.top = `${realPosition.y}px`;\n        el.style.left = `${realPosition.x}px`;\n        el.style.paddingLeft = \"12px\";\n        el.style.transformOrigin = \"top left\";\n        el.style.transform = `scale(${evt.currentTarget.getZoom()})`;\n        const input = document.createElement(\"input\");\n        input.style.border = \"none\";\n        input.value = model.label;\n        input.style.width = `${\n          Util.getTextSize(model.label, fontSizeMap[model.type])[0]\n        }px`;\n        input.className = \"dice-input\";\n        el.className = \"dice-input\";\n        el.appendChild(input);\n        document.body.appendChild(el);\n        const destroyEl = () => {\n          document.body.removeChild(el);\n        };\n        const clickEvt = (event) => {\n          if (\n            !(\n              event.target &&\n              event.target.className &&\n              event.target.className.includes(\"dice-input\")\n            )\n          ) {\n            window.removeEventListener(\"mousedown\", clickEvt);\n            window.removeEventListener(\"scroll\", clickEvt);\n            graph.updateItem(item, {\n              label: input.value,\n            });\n            graph.layout(false);\n            graph.off(\"wheelZoom\", clickEvt);\n            destroyEl();\n          }\n        };\n        graph.on(\"wheelZoom\", clickEvt);\n        window.addEventListener(\"mousedown\", clickEvt);\n        window.addEventListener(\"scroll\", clickEvt);\n        input.addEventListener(\"keyup\", (event) => {\n          if (event.key === \"Enter\") {\n            clickEvt({\n              target: {},\n            });\n          }\n        });\n      },\n      hoverNode(evt) {\n        evt.currentTarget.updateItem(evt.item, {\n          hover: true,\n        });\n      },\n      hoverNodeOut(evt) {\n        evt.currentTarget.updateItem(evt.item, {\n          hover: false,\n        });\n      },\n    });\n    F6.registerBehavior(\"scroll-canvas\", {\n      getEvents: function getEvents() {\n        return {\n          wheel: \"onWheel\",\n        };\n      },\n\n      onWheel: function onWheel(ev) {\n        const { graph } = this;\n        if (!graph) {\n          return;\n        }\n        if (ev.ctrlKey) {\n          const canvas = graph.get(\"canvas\");\n          const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n          let ratio = graph.getZoom();\n          if (ev.wheelDelta > 0) {\n            ratio += ratio * 0.05;\n          } else {\n            ratio *= ratio * 0.05;\n          }\n          graph.zoomTo(ratio, {\n            x: point.x,\n            y: point.y,\n          });\n        } else {\n          const x = ev.deltaX || ev.movementX;\n          const y = ev.deltaY || ev.movementY || (-ev.wheelDelta * 125) / 3;\n          graph.translate(-x, -y);\n        }\n        ev.preventDefault();\n      },\n    });\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: [10, 20],\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: (node) => {\n          return node.level === 0\n            ? F6.Util.getTextSize(node.label, 16)[0] + 12\n            : F6.Util.getTextSize(node.label, 12)[0];\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 60;\n        },\n        getSide: (node) => {\n          return node.data.direction;\n        },\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          lineWidth: 2,\n        },\n      },\n      minZoom: 0.5,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"dice-mindmap\"],\n      },\n    });\n\n    this.graph.data(result);\n    this.graph.render();\n    // this.graph.fitView();\n  },\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/mind-map/index.json",
    "content": "{\n  \"defaultTitle\": \"思维导图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/sankey/data.js",
    "content": "const colorArr = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#6F5EF9\",\n  \"#6DC8EC\",\n  \"#D3EEF9\",\n  \"#DECFEA\",\n  \"#FFE0C7\",\n  \"#1E9493\",\n  \"#BBDEDE\",\n  \"#FF99C3\",\n  \"#FFE0ED\",\n  \"#CDDDFD\",\n  \"#CDF3E4\",\n  \"#CED4DE\",\n  \"#FCEBB9\",\n  \"#D3CEFD\",\n  \"#945FB9\",\n  \"#FF9845\",\n];\n\nconst rawData = [\n  {\n    label: \"A\",\n    id: \"A\",\n    to: [\n      {\n        target: \"C\",\n        value: 200,\n      },\n    ],\n  },\n  {\n    label: \"B\",\n    id: \"B\",\n    to: [\n      {\n        target: \"C\",\n        value: 400,\n      },\n    ],\n  },\n  {\n    label: \"C\",\n    id: \"C\",\n    to: [\n      {\n        target: \"D\",\n        value: 300,\n      },\n      {\n        target: \"E\",\n        value: 300,\n      },\n    ],\n  },\n  {\n    label: \"D\",\n    id: \"D\",\n    to: [\n      {\n        target: \"F\",\n        value: 100,\n      },\n      {\n        target: \"G\",\n        value: 200,\n      },\n    ],\n  },\n  {\n    label: \"E\",\n    id: \"E\",\n    to: [\n      {\n        target: \"F\",\n        value: 200,\n      },\n      {\n        target: \"G\",\n        value: 100,\n      },\n    ],\n  },\n  {\n    label: \"F\",\n    id: \"F\",\n  },\n  {\n    label: \"G\",\n    id: \"G\",\n  },\n];\n\nconst dataTransform = (data) => {\n  const nodes = [];\n  const edges = [];\n  const nodeRecvMap = {};\n\n  data.forEach((node, i) => {\n    const { id, label, color = colorArr[i % colorArr.length], to = [] } = node;\n\n    let index = 0;\n    to.forEach((rel) => {\n      edges.push({\n        source: id,\n        target: rel.target,\n        value: rel.value,\n        color,\n        sourceIndex: index,\n        targetIndex: nodeRecvMap[rel.target] || 0,\n      });\n      index += rel.value || 0;\n      if (rel.value) {\n        nodeRecvMap[rel.target] = (nodeRecvMap[rel.target] || 0) + rel.value;\n      }\n    });\n    nodes.push({\n      id,\n      label,\n      color,\n      outSize: index,\n    });\n  });\n\n  nodes.forEach((node) => {\n    node.inSize = nodeRecvMap[node.id] || 0;\n    node.size = [4, Math.max(4, node.inSize, node.outSize)];\n  });\n\n  return {\n    nodes,\n    edges,\n  };\n};\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/sankey/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/sankey/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/sankey/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { wrapContext } from \"../../../common/utils/context\";\nimport result from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\n\n/**\n * sankey\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    F6.registerNode(\n      \"dice-sankey-node\",\n      {\n        jsx: (cfg) => `\n        <group>\n          <rect style={{ width: ${cfg.size[0]}, height: ${cfg.size[1]}, fill: ${cfg.color} }} />\n          <text style={{ marginLeft: 6, marginTop: 24,  fill: #333, stroke: ${cfg.color}, lineWidth: 2, fontSize: 24 }}>${cfg.label} ${cfg.size[1]}</text>\n        </group>\n      `,\n        getAnchorPoints() {\n          return [[0, 0]];\n        },\n      },\n      \"single-node\",\n    );\n\n    F6.registerEdge(\"dice-sankey-edge\", {\n      draw(cfg, group) {\n        const { startPoint, endPoint, color } = cfg;\n        const deltaY1 = Number(cfg.sourceIndex);\n        const deltaY2 = Number(cfg.sourceIndex) + Number(cfg.value);\n        const deltaY3 = Number(cfg.targetIndex);\n        const deltaY4 = Number(cfg.targetIndex) + Number(cfg.value);\n        const quaterX = (Math.abs(endPoint.x - startPoint.x) / 5) * 3;\n        return group.addShape(\"path\", {\n          attrs: {\n            fill: color,\n            opacity: 0.6,\n            path: [\n              [\"M\", startPoint.x, startPoint.y + deltaY1],\n              [\n                \"C\",\n                endPoint.x - quaterX,\n                startPoint.y + deltaY1,\n                startPoint.x + quaterX,\n                endPoint.y + deltaY3,\n                endPoint.x,\n                endPoint.y + deltaY3,\n              ],\n              [\"L\", endPoint.x, endPoint.y + deltaY4],\n              [\n                \"C\",\n                startPoint.x + quaterX,\n                endPoint.y + deltaY4,\n                endPoint.x - quaterX,\n                startPoint.y + deltaY2,\n                startPoint.x,\n                startPoint.y + deltaY2,\n              ],\n              [\"L\", startPoint.x, startPoint.y + deltaY1],\n              [\"Z\"],\n            ],\n          },\n        });\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      defaultNode: {\n        type: \"dice-sankey-node\",\n      },\n      defaultEdge: {\n        type: \"dice-sankey-edge\",\n      },\n      fitView: true,\n      fitViewPadding: 60,\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        nodesep: 10,\n        ranksep: 130,\n        align: \"ul\",\n      },\n    });\n\n    this.graph.data(result);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/scene-case/sankey/index.json",
    "content": "{\n  \"defaultTitle\": \"桑基图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/search/search.acss",
    "content": "page {\n  background-color: #fff;\n}\n\n.page {\n  padding: 0;\n}\n\n.search-bar {\n  position: sticky;\n  top: 0;\n  background-color: #fff;\n  z-index: 2;\n  padding-top: 14rpx;\n  overflow: hidden;\n}\n\n.am-search-input {\n  height: 35px;\n  line-height: 35px;\n}\n\n.am-search-synthetic {\n  height: 35px;\n  line-height: 35px;\n}\n\n.am-search-value {\n  height: 35px;\n}\n\n.am-search-clear {\n  height: 35px;\n  width: 35px;\n}\n\n.am-search-cancel {\n  color: #333;\n}\n\n.search-bar .am-search-input {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.search-container {\n  box-sizing: border-box;\n  padding: 20px 12px;\n}\n\n.history {\n  position: relative;\n  padding-left: 2px;\n  padding-bottom: 1px;\n  color: #333;\n  font-size: 36rpx;\n  font-weight: bold;\n}\n\n.history .clear {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  transform: translateY(-50%);\n  height: 40rpx;\n  width: 40rpx;\n  background-image: url('/image/clear.png');\n  background-size: 50%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n.history-list {\n  margin-top: 10px;\n}\n\n.hot {\n  padding-left: 2px;\n  padding-bottom: 2px;\n  color: #333;\n  font-size: 36rpx;\n  font-weight: bold;\n}\n\n.hot-list {\n  margin-top: 10px;\n}\n\n.search-results {\n  padding: 16px 12 0 0;\n}\n\n.component-name {\n  color: #333;\n  margin-right: 10rpx;\n}\n\n.thumb {\n  height: 60rpx;\n  width: 60rpx;\n  margin-right: 30rpx;\n}\n\n.component .am-list-line-bottom::after {\n  left: auto;\n  right: 0;\n  width: calc(100% - 80rpx);\n}\n\n.am-list-body::before {\n  display: none;\n}\n\n.am-list-body::after {\n  display: none;\n}\n\n.list-header {\n  height: 100rpx;\n  display: flex;\n  align-items: center;\n  background-color: #fff;\n  color: #333;\n  font-weight: bold;\n  font-size: 34rpx;\n}\n\n.am-list-header {\n  padding: 8px 16px 0;\n}\n\n.no-search-result {\n  height: 300px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n\n.no-search-result image {\n  width: 87rpx;\n  height: 87rpx;\n}\n\n.no-search-result text {\n  margin-top: 37rpx;\n  color: #999;\n  font-size: 28rpx;\n}\n.am-list-text-wrapper {\n  width: 100%;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/search/search.axml",
    "content": "<view class=\"page\">\n  <view class=\"search-bar\">\n    <search-bar\n      focus=\"{{true}}\"\n      value=\"{{value}}\"\n      placeholder=\"搜索你想要的组件和API\"\n      onInput=\"onInput\"\n      onCancel=\"onCancel\"\n      onClear=\"onClear\"\n      showCancelButton=\"{{false}}\" />\n  </view>\n  <view class=\"search-container\" a:if=\"{{componentSuggestions.length === 0 && apiSuggestions.length === 0}}\">\n    <view a:if=\"{{value.length === 0}}\">\n      <view a:if=\"{{ history.length > 0 }}\" style=\"border-bottom: 1rpx solid #F5F5F5; margin-bottom: 16px;\">\n        <view class=\"history\">历史<view class=\"clear\" onTap=\"clear\"></view></view>\n        <block-list listData=\"{{history}}\" class=\"history-list\" onItemTap=\"onItemTap\" />\n      </view>\n      <view>\n        <view class=\"hot\">热门</view>\n        <block-list listData=\"{{hot}}\" class=\"history-list\" />\n      </view>\n    </view>\n    <view class=\"no-search-result\" a:else>\n      <image src=\"/image/icon/no_search_result.png\" />\n      <text>未找到搜索结果</text>\n    </view>\n  </view>\n  <view class=\"search-results\" a:else>\n    <view a:if=\"{{componentSuggestions.length > 0}}\" class=\"component\">\n      <list>\n        <view slot=\"header\" class=\"list-header\">组件</view>\n        <block a:for=\"{{componentSuggestions}}\">\n          <list-item\n            arrow=\"{{true}}\"\n            multipleLine=\"{{false}}\"\n            key=\"items-{{item.name}}\"\n            last=\"{{index === componentSuggestions.length - 1}}\">\n            <view\n              onTap=\"onListItemTap\"\n              data-url=\"{{item.path}}\"\n              data-name=\"{{item.name}}\"\n              style=\"display: flex; align-items: center\">\n              <image src=\"{{item.thumb}}\" class=\"thumb\" />\n              <text class=\"component-name\">{{item.name}}</text>\n            </view>\n          </list-item>\n        </block>\n      </list>\n    </view>\n    <view a:if=\"{{apiSuggestions.length > 0}}\" class=\"api\">\n      <list>\n        <view slot=\"header\" class=\"list-header\">API</view>\n        <block a:for=\"{{apiSuggestions}}\">\n          <list-item\n            arrow=\"{{true}}\"\n            multipleLine=\"{{false}}\"\n            key=\"items-{{item.name}}\"\n            last=\"{{index === apiSuggestions.length - 1}}\">\n            <view\n              onTap=\"onListItemTap\"\n              data-url=\"{{item.path}}\"\n              data-name=\"{{item.name}}\"\n              style=\"display: flex; align-items: center\">\n              <image src=\"{{item.thumb}}\" class=\"thumb\" a:if=\"{{thumb}}\" />\n              <text class=\"component-name\">{{item.name}}</text>\n            </view>\n          </list-item>\n        </block>\n      </list>\n    </view>\n  </view>\n</view>"
  },
  {
    "path": "packages/examples-alipay/pages/search/search.js",
    "content": "import { debounce } from \"../../common/utils/common\";\nimport { componentList } from \"../../common/utils/process\";\n// 搜索推荐\nconst apiList = [];\n\nPage({\n  data: {\n    value: \"\",\n    history: my.getStorageSync({ key: \"searchHistory\" }).data || [],\n    hot: [\n      { name: \"知识图谱树\", url: \"../../SceneCase/knowledgeTreeGraph/index\" },\n      { name: \"基本弧线图\", url: \"../../GeneralGraph/basicArcDiagram/index\" },\n      { name: \"FA气泡图\", url: \"../../GeneralGraph/forceBubbles/index\" },\n      { name: \"无到有的边\", url: \"../../Animation/edge_lineGrowth/index\" },\n      { name: \"自定义流向图\", url: \"../../SceneCase/customFlow/index\" },\n      { name: \"生态树\", url: \"../../TreeGraph/BasicDendrogram/index\" },\n      { name: \"自定义树中的边\", url: \"../../TreeGraph/customEdgeTree/index\" },\n      {\n        name: \"基本同心圆布局\",\n        url: \"../../GeneralGraph/basicConcentric/index\",\n      },\n      { name: \"布局切换\", url: \"../../GeneralGraph/layoutTranslate/index\" },\n    ],\n    componentSuggestions: [],\n    apiSuggestions: [],\n  },\n  onLoad() {\n    this.setData({\n      history: my.getStorageSync({ key: \"searchHistory\" }).data,\n    });\n    console.log(my.getStorageSync({ key: \"searchHistory\" }).data);\n    this.onInput = debounce(this.onInput.bind(this), 400);\n    my.setNavigationBar({\n      borderBottomColor: \"#fff\",\n    });\n  },\n  clear() {\n    my.confirm({\n      content: \"确定删除相关历史？\",\n      success: (res) => {\n        if (res.confirm) {\n          my.clearStorage();\n          this.setData({\n            history: [],\n          });\n        }\n      },\n    });\n  },\n  onInput(keyword) {\n    this.setData({\n      value: keyword,\n    });\n    const regExp = /[A-Za-z]/;\n    if (keyword === \"\" || (regExp.test(keyword) && keyword.length === 1)) {\n      this.setData({\n        componentSuggestions: [],\n        apiSuggestions: [],\n      });\n      return;\n    }\n    const componentSuggestions = [];\n    const apiSuggestions = [];\n    for (let i = 0; i < componentList.length; i++) {\n      if (\n        componentList[i].suggestion\n          .toLocaleLowerCase()\n          .indexOf(keyword.toLocaleLowerCase()) != -1\n      ) {\n        componentSuggestions.push(componentList[i]);\n      }\n    }\n\n    for (let i = 0; i < apiList.length; i++) {\n      if (\n        apiList[i].suggestion\n          .toLocaleLowerCase()\n          .indexOf(keyword.toLocaleLowerCase()) != -1\n      ) {\n        apiSuggestions.push(apiList[i]);\n      }\n    }\n    this.setData({ componentSuggestions, apiSuggestions });\n  },\n  onClear() {\n    this.setData({\n      value: \"\",\n    });\n  },\n  onCancel() {\n    this.setData({\n      componentSuggestions: [],\n      apiSuggestions: [],\n      value: \"\",\n    });\n    my.navigateBack();\n  },\n  onItemTap({ name }) {\n    this.setData({\n      value: name,\n    });\n\n    this.onInput(name);\n  },\n  onListItemTap(e) {\n    const { name, url } = e.target.dataset;\n    this.addToHistory(name);\n    console.log(url);\n    my.navigateTo({ url });\n  },\n  addToHistory(keyword) {\n    const searchHistory =\n      my.getStorageSync({ key: \"searchHistory\" }).data || [];\n    let index = -1;\n\n    for (let i = 0; i < searchHistory.length; i++) {\n      if (searchHistory[i].name === keyword) {\n        index = i;\n        break;\n      }\n    }\n\n    let history = [];\n\n    if (searchHistory.length >= 8) {\n      if (index === -1) {\n        history = [{ name: keyword }, ...searchHistory.slice(0, 7)];\n      } else {\n        searchHistory.splice(index, 1).slice(0, 7);\n        history = [{ name: keyword }, ...searchHistory];\n      }\n    } else if (index === -1) {\n      history = [{ name: keyword }, ...searchHistory];\n    } else {\n      searchHistory.splice(index, 1);\n      history = [{ name: keyword }, ...searchHistory];\n    }\n\n    my.setStorageSync({\n      key: \"searchHistory\",\n      data: history,\n    });\n\n    this.setData({\n      history,\n    });\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/search/search.json",
    "content": "{\n  \"defaultTitle\": \"搜索\",\n  \"transparentTitle\": \"none\",\n  \"allowsBounceVertical\": \"NO\",\n  \"usingComponents\": {\n    \"search-bar\": \"mini-ali-ui/es/search-bar/index\",\n    \"block-list\": \"../../common/components/block-list/block-list\",\n    \"list\": \"mini-ali-ui/es/list/index\",\n    \"list-item\": \"mini-ali-ui/es/list/list-item/index\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/basic-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/basic-dendrogram/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/basic-dendrogram/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/basic-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 生态树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"dendrogram\",\n        direction: \"LR\",\n        nodeSep: 30,\n        rankSep: 100,\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 5,\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/basic-dendrogram/index.json",
    "content": "{\n  \"defaultTitle\": \"生态树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data.js\";\n\n/**\n * 紧凑树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 10,\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box/index.json",
    "content": "{\n  \"defaultTitle\": \"紧凑树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box-left-align/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box-left-align/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box-left-align/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box-left-align/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data.js\";\n\n/**\n * 节点左右对齐的紧凑树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const fontSize = 15;\n    F6.registerNode(\"crect\", {\n      draw: (cfg, group) => {\n        const width = cfg.id.length * 10;\n        const rect = group.addShape(\"rect\", {\n          attrs: {\n            x: 0,\n            y: -10,\n            ...cfg.style,\n            width,\n            height: 20,\n            lineWidth: 0,\n            opacity: 0,\n          },\n          name: \"rect-shape\",\n          draggable: true,\n        });\n        const label = group.addShape(\"text\", {\n          attrs: {\n            text: cfg.id,\n            fill: \"#ccc\",\n            fontSize,\n            x: 0,\n            y: 0,\n          },\n          name: \"label-shape\",\n          draggable: true,\n        });\n        const bboxWidth = label.getBBox().width + 20;\n        rect.attr({ width: bboxWidth });\n\n        group.addShape(\"path\", {\n          attrs: {\n            lineWidth: 1,\n            fill: \"#ccc\",\n            stroke: \"#ccc\",\n            path: [\n              [\"M\", 0, 0],\n              [\"L\", bboxWidth, 0],\n            ],\n          },\n          name: \"path-shape\",\n          draggable: true,\n        });\n\n        return rect;\n      },\n      getAnchorPoints: () => {\n        return [\n          [0, 0.5],\n          [1, 0.5],\n        ];\n      },\n    });\n\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"collapse-expand\", \"drag-canvas\", \"zoom-canvas\"],\n      },\n      defaultNode: {\n        type: \"crect\",\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n        getWidth: function getWidth(d) {\n          return F6.Util.getTextSize(d.id, fontSize)[0] + 20;\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/compact-box-left-align/index.json",
    "content": "{\n  \"defaultTitle\": \"节点左右对齐的紧凑树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-edge-tree/data.js",
    "content": "export default {\n  id: \"root\",\n  label: \"root\",\n  children: [\n    {\n      id: \"c1\",\n      label: \"c1\",\n      children: [\n        {\n          id: \"c1-1\",\n          label: \"c1-1\",\n        },\n        {\n          id: \"c1-2\",\n          label: \"c1-2\",\n          children: [\n            {\n              id: \"c1-2-1\",\n              label: \"c1-2-1\",\n            },\n            {\n              id: \"c1-2-2\",\n              label: \"c1-2-2\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"c2\",\n      label: \"c2\",\n    },\n    {\n      id: \"c3\",\n      label: \"c3\",\n      children: [\n        {\n          id: \"c3-1\",\n          label: \"c3-1\",\n        },\n        {\n          id: \"c3-2\",\n          label: \"c3-2\",\n          children: [\n            {\n              id: \"c3-2-1\",\n              label: \"c3-2-1\",\n            },\n            {\n              id: \"c3-2-2\",\n              label: \"c3-2-2\",\n            },\n            {\n              id: \"c3-2-3\",\n              label: \"c3-2-3\",\n            },\n          ],\n        },\n        {\n          id: \"c3-3\",\n          label: \"c3-3\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-edge-tree/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-edge-tree/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-edge-tree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 自定义图中的边\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const COLLAPSE_ICON = function COLLAPSE_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y - r],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x + 2 - r, y - r],\n        [\"L\", x + r - 2, y - r],\n      ];\n    };\n    const EXPAND_ICON = function EXPAND_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y - r],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x + 2 - r, y - r],\n        [\"L\", x + r - 2, y - r],\n        [\"M\", x, y - 2 * r + 2],\n        [\"L\", x, y - 2],\n      ];\n    };\n\n    F6.Util.traverseTree(data, (d) => {\n      d.leftIcon = {\n        style: {\n          fill: \"#e6fffb\",\n          stroke: \"#e6fffb\",\n        },\n        img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\",\n      };\n      return true;\n    });\n\n    F6.registerNode(\n      \"icon-node\",\n      {\n        options: {\n          size: [60, 20],\n          stroke: \"#91d5ff\",\n          fill: \"#91d5ff\",\n        },\n        draw(cfg, group) {\n          const styles = this.getShapeStyle(cfg);\n          const { labelCfg = {} } = cfg;\n\n          const w = styles.width;\n          const h = styles.height;\n\n          const keyShape = group.addShape(\"rect\", {\n            attrs: {\n              ...styles,\n              x: -w / 2,\n              y: -h / 2,\n            },\n          });\n\n          /**\n           * leftIcon 格式如下：\n           *  {\n           *    style: ShapeStyle;\n           *    img: ''\n           *  }\n           */\n          console.log(\"cfg.leftIcon\", cfg.leftIcon);\n          if (cfg.leftIcon) {\n            const { style, img } = cfg.leftIcon;\n            group.addShape(\"rect\", {\n              attrs: {\n                x: 1 - w / 2,\n                y: 1 - h / 2,\n                width: 38,\n                height: styles.height - 2,\n                fill: \"#8c8c8c\",\n                ...style,\n              },\n            });\n            group.addShape(\"image\", {\n              attrs: {\n                x: 8 - w / 2,\n                y: 8 - h / 2,\n                width: 24,\n                height: 24,\n                img:\n                  img ||\n                  \"https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png\",\n              },\n              name: \"image-shape\",\n            });\n          }\n\n          // 如果不需要动态增加或删除元素，则不需要 add 这两个 marker\n          group.addShape(\"marker\", {\n            attrs: {\n              x: 40 - w / 2,\n              y: 52 - h / 2,\n              r: 6,\n              stroke: \"#73d13d\",\n              cursor: \"pointer\",\n              symbol: EXPAND_ICON,\n            },\n            name: \"add-item\",\n          });\n\n          group.addShape(\"marker\", {\n            attrs: {\n              x: 80 - w / 2,\n              y: 52 - h / 2,\n              r: 6,\n              stroke: \"#ff4d4f\",\n              cursor: \"pointer\",\n              symbol: COLLAPSE_ICON,\n            },\n            name: \"remove-item\",\n          });\n\n          if (cfg.label) {\n            group.addShape(\"text\", {\n              attrs: {\n                ...labelCfg.style,\n                text: cfg.label,\n                x: 50 - w / 2,\n                y: 25 - h / 2,\n              },\n            });\n          }\n\n          return keyShape;\n        },\n        update: undefined,\n      },\n      \"rect\",\n    );\n\n    F6.registerEdge(\"flow-line\", {\n      draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n\n        const { style } = cfg;\n        const shape = group.addShape(\"path\", {\n          attrs: {\n            stroke: style.stroke,\n            endArrow: style.endArrow,\n            path: [\n              [\"M\", startPoint.x, startPoint.y],\n              [\"L\", startPoint.x, (startPoint.y + endPoint.y) / 2],\n              [\"L\", endPoint.x, (startPoint.y + endPoint.y) / 2],\n              [\"L\", endPoint.x, endPoint.y],\n            ],\n          },\n        });\n\n        return shape;\n      },\n    });\n\n    const defaultStateStyles = {\n      hover: {\n        stroke: \"#1890ff\",\n        lineWidth: 2,\n      },\n    };\n\n    const defaultNodeStyle = {\n      fill: \"#91d5ff\",\n      stroke: \"#40a9ff\",\n      radius: 5,\n    };\n\n    const defaultEdgeStyle = {\n      stroke: \"#91d5ff\",\n      endArrow: {\n        path: \"M 0,0 L 12, 6 L 9,0 L 12, -6 Z\",\n        fill: \"#91d5ff\",\n        d: -20,\n      },\n    };\n\n    const defaultLayout = {\n      type: \"compactBox\",\n      direction: \"TB\",\n      getId: function getId(d) {\n        return d.id;\n      },\n      getHeight: function getHeight() {\n        return 16;\n      },\n      getWidth: function getWidth() {\n        return 16;\n      },\n      getVGap: function getVGap() {\n        return 40;\n      },\n      getHGap: function getHGap() {\n        return 70;\n      },\n    };\n\n    const defaultLabelCfg = {\n      style: {\n        fill: \"#000\",\n        fontSize: 12,\n      },\n    };\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      // plugins: [minimap],\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\"],\n      },\n      defaultNode: {\n        type: \"icon-node\",\n        size: [120, 40],\n        style: defaultNodeStyle,\n        labelCfg: defaultLabelCfg,\n      },\n      defaultEdge: {\n        type: \"flow-line\",\n        style: defaultEdgeStyle,\n      },\n      nodeStateStyles: defaultStateStyles,\n      edgeStateStyles: defaultStateStyles,\n      layout: defaultLayout,\n    });\n\n    // 监听\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item, target } = evt;\n      const targetType = target.get(\"type\");\n      const name = target.get(\"name\");\n\n      // 增加元素\n      if (targetType === \"marker\") {\n        const model = item.getModel();\n        if (name === \"add-item\") {\n          if (!model.children) {\n            model.children = [];\n          }\n          const id = `n-${Math.random()}`;\n          model.children.push({\n            id,\n            label: id.substr(0, 8),\n            leftIcon: {\n              style: {\n                fill: \"#e6fffb\",\n                stroke: \"#e6fffb\",\n              },\n              img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\",\n            },\n          });\n          this.graph.updateChild(model, model.id);\n        } else if (name === \"remove-item\") {\n          this.graph.removeChild(model.id);\n        }\n      }\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-edge-tree/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义树中的边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-side-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-side-mind-map/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-side-mind-map/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-side-mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 脑图-自定义子节点分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: () => {\n          return 16;\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 50;\n        },\n        getSide: (d) => {\n          if (d.id === \"Classification\") {\n            return \"left\";\n          }\n          return \"right\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node(function (node) {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"right\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-side-mind-map/index.json",
    "content": "{\n  \"defaultTitle\": \"自定义子节点分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-tree/data.js",
    "content": "export default {\n  name: \"Modeling Methods\",\n  children: [\n    {\n      name: \"Classification\",\n      children: [\n        {\n          name: \"Logistic regression\",\n        },\n        {\n          name: \"Linear discriminant analysis\",\n        },\n        {\n          name: \"Rules\",\n        },\n        {\n          name: \"Decision trees\",\n        },\n        {\n          name: \"Naive Bayes\",\n        },\n        {\n          name: \"K nearest neighbor\",\n        },\n        {\n          name: \"Probabilistic neural network\",\n        },\n        {\n          name: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      name: \"Consensus\",\n      children: [\n        {\n          name: \"Models diversity\",\n          children: [\n            {\n              name: \"Different initializations\",\n            },\n            {\n              name: \"Different parameter choices\",\n            },\n            {\n              name: \"Different architectures\",\n            },\n            {\n              name: \"Different modeling methods\",\n            },\n            {\n              name: \"Different training sets\",\n            },\n            {\n              name: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          name: \"Methods\",\n          children: [\n            {\n              name: \"Classifier selection\",\n            },\n            {\n              name: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          name: \"Common\",\n          children: [\n            {\n              name: \"Bagging\",\n            },\n            {\n              name: \"Boosting\",\n            },\n            {\n              name: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      name: \"Regression\",\n      children: [\n        {\n          name: \"Multiple linear regression\",\n        },\n        {\n          name: \"Partial least squares\",\n        },\n        {\n          name: \"Multi-layer feedforward neural network\",\n        },\n        {\n          name: \"General regression neural network\",\n        },\n        {\n          name: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-tree/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-tree/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-tree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 自定义复杂树图样式\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n    F6.registerNode(\n      \"tree-node\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              fill: \"#fff\",\n              stroke: \"#666\",\n              x: 0,\n              y: 0,\n              width: 1,\n              height: 1,\n            },\n            name: \"rect-shape\",\n          });\n          const content = cfg.name.replace(/(.{19})/g, \"$1\\n\");\n          const text = group.addShape(\"text\", {\n            attrs: {\n              text: content,\n              x: 0,\n              y: 0,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: \"#666\",\n            },\n            name: \"text-shape\",\n          });\n          const bbox = text.getBBox();\n          const hasChildren = cfg.children && cfg.children.length > 0;\n          rect.attr({\n            x: -bbox.width / 2 - 4,\n            y: -bbox.height / 2 - 6,\n            width: bbox.width + (hasChildren ? 26 : 12),\n            height: bbox.height + 12,\n          });\n          text.attr({\n            x: -bbox.width / 2,\n            y: 0,\n          });\n          if (hasChildren) {\n            group.addShape(\"marker\", {\n              attrs: {\n                x: bbox.width / 2 + 12,\n                y: 0,\n                r: 6,\n                symbol: cfg.collapsed ? F6.Marker.expand : F6.Marker.collapse,\n                stroke: \"#666\",\n                lineWidth: 2,\n              },\n              name: \"collapse-icon\",\n            });\n          }\n          return rect;\n        },\n        update: (cfg, item) => {\n          const group = item.getContainer();\n          const icon = group.find((e) => e.get(\"name\") === \"collapse-icon\");\n          icon.attr(\n            \"symbol\",\n            cfg.collapsed ? F6.Marker.expand : F6.Marker.collapse,\n          );\n        },\n      },\n      \"single-node\",\n    );\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              this.graph.updateItem(item, {\n                collapsed,\n              });\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        type: \"tree-node\",\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 20;\n        },\n        getHGap: function getHGap() {\n          return 80;\n        },\n      },\n    });\n\n    F6.Util.traverseTree(data_, function (item) {\n      item.id = item.name;\n    });\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/custom-tree/index.json",
    "content": "{\n  \"defaultTitle\": \"复杂树样式\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/file-system/data.js",
    "content": "export default {\n  id: \"1\",\n  name: \"src\",\n  children: [\n    {\n      id: \"1-1\",\n      name: \"behavior\",\n      children: [],\n    },\n    {\n      id: \"1-3\",\n      name: \"graph\",\n      children: [\n        {\n          id: \"1-3-1\",\n          name: \"controller\",\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"1-5\",\n      name: \"item\",\n      children: [],\n    },\n    {\n      id: \"1-6\",\n      name: \"shape\",\n      children: [\n        {\n          id: \"1-6-2\",\n          name: \"extend\",\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"1-7\",\n      name: \"util\",\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/file-system/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/file-system/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/file-system/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 缩进树-文件系统\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // registerNode\n    F6.registerNode(\"file-node\", {\n      draw: function draw(cfg, group) {\n        const keyShape = group.addShape(\"rect\", {\n          attrs: {\n            x: 10,\n            y: -12,\n            fill: \"#fff\",\n            stroke: null,\n          },\n        });\n        let isLeaf = false;\n        if (cfg.collapsed) {\n          group.addShape(\"marker\", {\n            attrs: {\n              symbol: \"triangle\",\n              x: 4,\n              y: -2,\n              r: 4,\n              fill: \"#666\",\n            },\n            name: \"marker-shape\",\n          });\n        } else if (cfg.children && cfg.children.length > 0) {\n          group.addShape(\"marker\", {\n            attrs: {\n              symbol: \"triangle-down\",\n              x: 4,\n              y: -2,\n              r: 4,\n              fill: \"#666\",\n            },\n            name: \"marker-shape\",\n          });\n        } else {\n          isLeaf = true;\n        }\n        const shape = group.addShape(\"text\", {\n          attrs: {\n            x: 15,\n            y: 4,\n            text: cfg.name,\n            fill: \"#666\",\n            fontSize: 16,\n            textAlign: \"left\",\n            fontFamily:\n              typeof window !== \"undefined\"\n                ? window\n                    .getComputedStyle(document.body, null)\n                    .getPropertyValue(\"font-family\") || \"Arial, sans-serif\"\n                : \"Arial, sans-serif\",\n          },\n          name: \"text-shape\",\n        });\n        const bbox = shape.getBBox();\n        let backRectW = bbox.width;\n        let backRectX = keyShape.attr(\"x\");\n        if (!isLeaf) {\n          backRectW += 8;\n          backRectX -= 15;\n        }\n        keyShape.attr({\n          width: backRectW,\n          height: bbox.height + 4,\n          x: backRectX,\n        });\n        return keyShape;\n      },\n    });\n\n    // registerEdge\n    F6.registerEdge(\n      \"step-line\",\n      {\n        getControlPoints: function getControlPoints(cfg) {\n          const { startPoint } = cfg;\n          const { endPoint } = cfg;\n          return [\n            startPoint,\n            {\n              x: startPoint.x,\n              y: endPoint.y,\n            },\n            endPoint,\n          ];\n        },\n      },\n      \"polyline\",\n    );\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            animate: false,\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      layout: {\n        type: \"indented\",\n        isHorizontal: true,\n        direction: \"LR\",\n        indent: 30,\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node(function (node) {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n\n      // position的取值（由于ESlint禁止嵌套的三元表达，所以单独提取出来写）\n      let position_value = null;\n      if (node.children && node.children.length > 0) {\n        position_value = \"left\";\n      } else if (node.x > centerX) position_value = \"right\";\n      else position_value = \"left\";\n\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 5,\n          position: position_value,\n        },\n      };\n    });\n\n    this.graph.node((node) => {\n      return {\n        type: \"file-node\",\n        label: node.name,\n      };\n    });\n\n    this.graph.edge(() => {\n      return {\n        type: \"step-line\",\n      };\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/file-system/index.json",
    "content": "{\n  \"defaultTitle\": \"文件系统\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intend-align-top/data.js",
    "content": "export default {\n  id: \"A\",\n  children: [\n    {\n      id: \"A1\",\n      children: [{ id: \"A11\" }, { id: \"A12\" }, { id: \"A13\" }, { id: \"A14\" }],\n    },\n    {\n      id: \"A2\",\n      children: [\n        {\n          id: \"A21\",\n          children: [{ id: \"A211\" }, { id: \"A212\" }],\n        },\n        {\n          id: \"A22\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intend-align-top/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intend-align-top/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intend-align-top/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 缩进树-顶部对齐\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n    F6.registerNode(\"card-node\", {\n      draw: function drawShape(cfg, group) {\n        const r = 2;\n        const color = \"#5B8FF9\";\n        const w = cfg.size[0];\n        const h = cfg.size[1];\n        const shape = group.addShape(\"rect\", {\n          attrs: {\n            x: -w / 2,\n            y: -h / 2,\n            width: w, // 200,\n            height: h, // 60\n            stroke: color,\n            radius: r,\n            fill: \"#fff\",\n          },\n          name: \"main-box\",\n          draggable: true,\n        });\n\n        group.addShape(\"rect\", {\n          attrs: {\n            x: -w / 2,\n            y: -h / 2,\n            width: w, // 200,\n            height: h / 2, // 60\n            fill: color,\n            radius: [r, r, 0, 0],\n          },\n          name: \"title-box\",\n          draggable: true,\n        });\n\n        // title text\n        group.addShape(\"text\", {\n          attrs: {\n            textBaseline: \"top\",\n            x: -w / 2 + 8,\n            y: -h / 2 + 2,\n            lineHeight: 20,\n            text: cfg.id,\n            fill: \"#fff\",\n          },\n          name: \"title\",\n        });\n        cfg.children &&\n          group.addShape(\"marker\", {\n            attrs: {\n              x: w / 2,\n              y: 0,\n              r: 6,\n              cursor: \"pointer\",\n              symbol: F6.Marker.collapse,\n              stroke: \"#666\",\n              lineWidth: 1,\n              fill: \"#fff\",\n            },\n            name: \"collapse-icon\",\n          });\n        group.addShape(\"text\", {\n          attrs: {\n            textBaseline: \"top\",\n            x: -w / 2 + 8,\n            y: -h / 2 + 24,\n            lineHeight: 20,\n            text: \"description\",\n            fill: \"rgba(0,0,0, 1)\",\n          },\n          name: `description`,\n        });\n        return shape;\n      },\n      setState(name, value, item) {\n        if (name === \"collapsed\") {\n          const marker = item\n            .get(\"group\")\n            .find((ele) => ele.get(\"name\") === \"collapse-icon\");\n          const icon = value ? F6.Marker.expand : F6.Marker.collapse;\n          marker.attr(\"symbol\", icon);\n        }\n      },\n    });\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"card-node\",\n        size: [100, 40],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          endArrow: true,\n        },\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"LR\",\n        dropCap: false,\n        indent: 200,\n        getHeight: () => {\n          return 60;\n        },\n      },\n    });\n    this.graph.on(\"node:tap\", (e) => {\n      if (e.target.get(\"name\") === \"collapse-icon\") {\n        e.item.getModel().collapsed = !e.item.getModel().collapsed;\n        this.graph.setItemState(\n          e.item,\n          \"collapsed\",\n          e.item.getModel().collapsed,\n        );\n        this.graph.layout();\n      }\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intend-align-top/index.json",
    "content": "{\n  \"defaultTitle\": \"顶部对齐\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intended/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intended/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intended/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intended/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 缩进树-子节点两侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"H\",\n        indent: 80,\n        getHeight: () => {\n          return 10;\n        },\n        getWidth: () => {\n          return 10;\n        },\n        getSide: (d) => {\n          if (d.id === \"Regression\" || d.id === \"Classification\") return \"left\";\n          return \"right\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node(function (node) {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"left\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/intended/index.json",
    "content": "{\n  \"defaultTitle\": \"子节点两侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/left-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/left-mind-map/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/left-mind-map/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/left-mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 脑图-子节点右侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: () => {\n          return 16;\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 100;\n        },\n        getSide: () => {\n          return \"left\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node(function (node) {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"right\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/left-mind-map/index.json",
    "content": "{\n  \"defaultTitle\": \"子节点左侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/mind-map/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/mind-map/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 脑图-自节点自动两侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 50;\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node(function (node) {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n\n      // position的取值（由于ESlint禁止嵌套的三元表达，所以单独提取出来写）\n      let position_value = null;\n      if (node.children && node.children.length > 0) {\n        position_value = \"left\";\n      } else if (node.x > centerX) position_value = \"right\";\n      else position_value = \"left\";\n\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 5,\n          position: position_value,\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/mind-map/index.json",
    "content": "{\n  \"defaultTitle\": \"子节点自动两侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-compact-box/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-compact-box/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-compact-box/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 紧凑辐射树\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"RL\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: () => {\n          return 26;\n        },\n        getWidth: () => {\n          return 26;\n        },\n        getVGap: () => {\n          return 20;\n        },\n        getHGap: () => {\n          return 30;\n        },\n        radial: true,\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-compact-box/index.json",
    "content": "{\n  \"defaultTitle\": \"紧凑辐射树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-dendrogram/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-dendrogram/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data from \"./data\";\n\n/**\n * 生态辐射树\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n      },\n      layout: {\n        type: \"dendrogram\",\n        direction: \"LR\",\n        nodeSep: 20,\n        rankSep: 100,\n        radial: true,\n      },\n    });\n\n    this.graph.node(function (node) {\n      return {\n        label: node.id,\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/radial-dendrogram/index.json",
    "content": "{\n  \"defaultTitle\": \"生态辐射树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/right-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/right-mind-map/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/right-mind-map/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/right-mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 脑图-子节点右侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: () => {\n          return 16;\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 100;\n        },\n        getSide: () => {\n          return \"right\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node(function (node) {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"right\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/right-mind-map/index.json",
    "content": "{\n  \"defaultTitle\": \"子节点右侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-compact-box/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-compact-box/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-compact-box/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data.js\";\n\n/**\n * 至上而下的紧凑树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      linkCenter: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.getModel();\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-vertical\",\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"TB\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 80;\n        },\n        getHGap: function getHGap() {\n          return 20;\n        },\n      },\n    });\n\n    this.graph.node(function (node) {\n      let position = \"right\";\n      let rotate = 0;\n      if (!node.children) {\n        position = \"bottom\";\n        rotate = Math.PI / 2;\n      }\n      return {\n        label: node.id,\n        labelCfg: {\n          position,\n          offset: 5,\n          style: {\n            rotate,\n            textAlign: \"start\",\n          },\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-compact-box/index.json",
    "content": "{\n  \"defaultTitle\": \"至上而下的紧凑树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-dendrogram/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-dendrogram/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 至上而下的生态树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      linkCenter: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-vertical\",\n      },\n      layout: {\n        type: \"dendrogram\",\n        direction: \"TB\", // H / V / LR / RL / TB / BT\n        nodeSep: 40,\n        rankSep: 100,\n      },\n    });\n\n    this.graph.node(function (node) {\n      let position = \"right\";\n      let rotate = 0;\n      if (!node.children) {\n        position = \"bottom\";\n        rotate = Math.PI / 2;\n      }\n      return {\n        label: node.id,\n        labelCfg: {\n          position,\n          offset: 5,\n          style: {\n            rotate,\n            textAlign: \"start\",\n          },\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tb-dendrogram/index.json",
    "content": "{\n  \"defaultTitle\": \"至上而下的生态树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tree-edge-label/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n    {\n      id: \"SubTreeNode7\",\n    },\n    {\n      id: \"SubTreeNode8\",\n    },\n    {\n      id: \"SubTreeNode9\",\n    },\n    {\n      id: \"SubTreeNode10\",\n    },\n    {\n      id: \"SubTreeNode11\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tree-edge-label/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tree-edge-label/index.axml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onTouchEvent=\"handleTouch\"\n  onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tree-edge-label/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport { wrapContext } from \"../../../common/utils/context\";\n\nimport data_ from \"./data\";\n\n/**\n * 树图边上的标签\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(ctx, rect, canvas, renderer) {\n    this.isCanvasInit = true;\n    this.ctx = wrapContext(ctx);\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 30,\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    // 点\n    this.graph.node(function (node) {\n      return {\n        size: 16,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n        label: node.id,\n        labelCfg: {\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n          offset: 5,\n        },\n      };\n    });\n\n    // 边\n    let i = 0;\n    this.graph.edge(function () {\n      i++;\n      return {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n        label: i,\n      };\n    });\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-alipay/pages/tree-graph/tree-edge-label/index.json",
    "content": "{\n  \"defaultTitle\": \"树边上的标签\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-uniapp/.hbuilderx/launch.json",
    "content": "{\n  // launch.json 配置了启动调试时相关设置，configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/\n  // launchtype项可配置值为local或remote, local代表前端连本地云函数，remote代表前端连云端云函数\n  \"version\": \"0.0\",\n  \"configurations\": [\n    {\n      \"default\": {\n        \"launchtype\": \"local\"\n      },\n      \"h5\": {\n        \"launchtype\": \"local\"\n      },\n      \"mp-weixin\": {\n        \"launchtype\": \"local\"\n      },\n      \"type\": \"uniCloud\"\n    }\n  ]\n}\n"
  },
  {
    "path": "packages/examples-uniapp/App.vue",
    "content": "<script>\nexport default {\n  onLaunch: function () {\n    console.log(\"App Launch\");\n  },\n  onShow: function () {\n    console.log(\"App Show\");\n  },\n  onHide: function () {\n    console.log(\"App Hide\");\n  },\n};\n</script>\n\n<style>\n/*每个页面公共css */\n</style>\n"
  },
  {
    "path": "packages/examples-uniapp/components/canvas/canvas.vue",
    "content": "<template>\n  <!-- #ifdef H5 -->\n  <view ref=\"f6-canvess\"> </view>\n  <!-- #endif -->\n  <!-- #ifndef H5 -->\n  <canvas\n    ref=\"f6-canvess\"\n    name=\"f6-canvas\"\n    type=\"2d\"\n    canvas-id=\"f6-canvas\"\n    id=\"f6-canvas\"\n    :width=\"width * finalRatio\"\n    :height=\"height * finalRatio\"\n    :style=\"styleCanvas\"\n    @touchstart=\"onTouch\"\n    @touchmove=\"onTouch\"\n    @touchend=\"onTouch\"\n  ></canvas>\n  <!-- #endif -->\n</template>\n\n<script>\nexport default {\n  name: \"f6-canvas\",\n  computed: {\n    styleCanvas() {\n      return `width: ${this.$props.width}px; height: ${this.$props.height}px; ${this.$props.styles}`;\n    },\n    finalRatio() {\n      return this.$props.pixelRatio >= 1\n        ? Math.ceil(this.$props.pixelRatio)\n        : 1;\n    },\n  },\n  props: {\n    styles: {\n      type: String,\n      default: \"\",\n    },\n    width: {\n      type: Number,\n      default: 100,\n    },\n    height: {\n      type: Number,\n      default: 100,\n    },\n    onInit: {\n      type: Function,\n      default: function () {\n        return () => {};\n      },\n    },\n    onTouchEvent: {\n      type: Function,\n      default: function () {\n        return () => {};\n      },\n    },\n    onError: {\n      type: Function,\n      default: function () {\n        return () => {};\n      },\n    },\n    pixelRatio: {\n      type: Number,\n      default: 1,\n    },\n  },\n  mounted: function (e) {\n    // #ifdef H5\n    const container = this.$el;\n    this.rect = null;\n    this.ctx = null;\n\n    this.$emit(\"onInit\", {\n      ctx: this.ctx,\n      rect: this.rect,\n      container: container,\n      renderer: \"h5\",\n    });\n    // #endif\n\n    // #ifdef MP-ALIPAY\n    my.createSelectorQuery()\n      .select(\"#f6-canvas\")\n      .boundingClientRect()\n      .exec((ret) => {\n        my._createCanvas({\n          id: \"f6-canvas\",\n          success: (canvas) => {\n            this.$emit(\"onInit\", {\n              ctx: canvas.getContext(\"2d\"),\n              rect: {\n                width: ret[0].width,\n                height: ret[0].height,\n                left: ret[0].left,\n                top: ret[0].top,\n              },\n              container: null,\n              renderer: \"mini-native\",\n            });\n          },\n        });\n      });\n    // #endif\n\n    // #ifdef MP-WEIXIN\n    const query = uni.createSelectorQuery().in(this);\n    query\n      .select(\"#f6-canvas\")\n      .fields({\n        node: true,\n        size: true,\n      })\n      .exec((ret) => {\n        console.log(\"ret\", ret);\n        var canvas = ret[0].node;\n        canvas.width = this.$props.width * this.finalRatio;\n        canvas.height = this.$props.height * this.finalRatio;\n        this.rect = {\n          width: this.$props.width,\n          height: this.$props.height,\n          left: canvas._left,\n          top: canvas._top,\n        };\n        this.ctx = canvas.getContext(\"2d\");\n        this.$emit(\"onInit\", {\n          ctx: this.ctx,\n          rect: this.rect,\n          container: canvas,\n          renderer: \"mini-native\",\n        });\n      });\n\n    // #endif\n  },\n  methods: {\n    onTouch(e) {\n      const origin = e.mp;\n      let i = 0;\n      for (i = 0; i < origin.touches.length; i++) {\n        modifyEvent(origin.touches[i]);\n      }\n\n      for (i = 0; i < origin.changedTouches.length; i++) {\n        modifyEvent(origin.changedTouches[i]);\n      }\n      this.$emit(\"onTouchEvent\", origin);\n    },\n  },\n};\n\nfunction modifyEvent(touchEvent) {\n  touchEvent.clientX = touchEvent.x;\n  touchEvent.clientY = touchEvent.y;\n  touchEvent.pageX = touchEvent.x;\n  touchEvent.pageY = touchEvent.y;\n}\n</script>\n\n<style></style>\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/graph/treeGraph.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.TreeGraph = n())\n    : (t.TreeGraph = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function r(e) {\n      if (n[e]) return n[e].exports;\n      var i = (n[e] = { i: e, l: !1, exports: {} });\n      return t[e].call(i.exports, i, i.exports, r), (i.l = !0), i.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = n),\n      (r.d = function (t, n, e) {\n        r.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: e });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, n) {\n        if ((1 & n && (t = r(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var e = Object.create(null);\n        if (\n          (r.r(e),\n          Object.defineProperty(e, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var i in t)\n            r.d(\n              e,\n              i,\n              function (n) {\n                return t[n];\n              }.bind(null, i),\n            );\n        return e;\n      }),\n      (r.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(n, \"a\", n), n;\n      }),\n      (r.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (r.p = \"\"),\n      r((r.s = 196))\n    );\n  })({\n    0: function (t, n, r) {\n      \"use strict\";\n      r.r(n),\n        r.d(n, \"contains\", function () {\n          return i;\n        }),\n        r.d(n, \"includes\", function () {\n          return i;\n        }),\n        r.d(n, \"difference\", function () {\n          return o;\n        }),\n        r.d(n, \"find\", function () {\n          return O;\n        }),\n        r.d(n, \"findIndex\", function () {\n          return j;\n        }),\n        r.d(n, \"firstValue\", function () {\n          return x;\n        }),\n        r.d(n, \"flatten\", function () {\n          return w;\n        }),\n        r.d(n, \"flattenDeep\", function () {\n          return A;\n        }),\n        r.d(n, \"getRange\", function () {\n          return E;\n        }),\n        r.d(n, \"pull\", function () {\n          return T;\n        }),\n        r.d(n, \"pullAt\", function () {\n          return N;\n        }),\n        r.d(n, \"reduce\", function () {\n          return k;\n        }),\n        r.d(n, \"remove\", function () {\n          return I;\n        }),\n        r.d(n, \"sortBy\", function () {\n          return F;\n        }),\n        r.d(n, \"union\", function () {\n          return H;\n        }),\n        r.d(n, \"uniq\", function () {\n          return D;\n        }),\n        r.d(n, \"valuesOfKey\", function () {\n          return R;\n        }),\n        r.d(n, \"head\", function () {\n          return z;\n        }),\n        r.d(n, \"last\", function () {\n          return V;\n        }),\n        r.d(n, \"startsWith\", function () {\n          return q;\n        }),\n        r.d(n, \"endsWith\", function () {\n          return U;\n        }),\n        r.d(n, \"filter\", function () {\n          return u;\n        }),\n        r.d(n, \"every\", function () {\n          return W;\n        }),\n        r.d(n, \"some\", function () {\n          return G;\n        }),\n        r.d(n, \"group\", function () {\n          return $;\n        }),\n        r.d(n, \"groupBy\", function () {\n          return K;\n        }),\n        r.d(n, \"groupToMap\", function () {\n          return X;\n        }),\n        r.d(n, \"getWrapBehavior\", function () {\n          return J;\n        }),\n        r.d(n, \"wrapBehavior\", function () {\n          return Q;\n        }),\n        r.d(n, \"number2color\", function () {\n          return tt;\n        }),\n        r.d(n, \"parseRadius\", function () {\n          return nt;\n        }),\n        r.d(n, \"clamp\", function () {\n          return rt;\n        }),\n        r.d(n, \"fixedBase\", function () {\n          return et;\n        }),\n        r.d(n, \"isDecimal\", function () {\n          return ut;\n        }),\n        r.d(n, \"isEven\", function () {\n          return ot;\n        }),\n        r.d(n, \"isInteger\", function () {\n          return at;\n        }),\n        r.d(n, \"isNegative\", function () {\n          return ct;\n        }),\n        r.d(n, \"isNumberEqual\", function () {\n          return ft;\n        }),\n        r.d(n, \"isOdd\", function () {\n          return st;\n        }),\n        r.d(n, \"isPositive\", function () {\n          return lt;\n        }),\n        r.d(n, \"max\", function () {\n          return S;\n        }),\n        r.d(n, \"maxBy\", function () {\n          return dt;\n        }),\n        r.d(n, \"min\", function () {\n          return P;\n        }),\n        r.d(n, \"minBy\", function () {\n          return ht;\n        }),\n        r.d(n, \"mod\", function () {\n          return pt;\n        }),\n        r.d(n, \"toDegree\", function () {\n          return yt;\n        }),\n        r.d(n, \"toInteger\", function () {\n          return gt;\n        }),\n        r.d(n, \"toRadian\", function () {\n          return mt;\n        }),\n        r.d(n, \"forIn\", function () {\n          return Ot;\n        }),\n        r.d(n, \"has\", function () {\n          return jt;\n        }),\n        r.d(n, \"hasKey\", function () {\n          return xt;\n        }),\n        r.d(n, \"hasValue\", function () {\n          return At;\n        }),\n        r.d(n, \"keys\", function () {\n          return v;\n        }),\n        r.d(n, \"isMatch\", function () {\n          return y;\n        }),\n        r.d(n, \"values\", function () {\n          return wt;\n        }),\n        r.d(n, \"lowerCase\", function () {\n          return Pt;\n        }),\n        r.d(n, \"lowerFirst\", function () {\n          return Et;\n        }),\n        r.d(n, \"substitute\", function () {\n          return _t;\n        }),\n        r.d(n, \"upperCase\", function () {\n          return Ct;\n        }),\n        r.d(n, \"upperFirst\", function () {\n          return Mt;\n        }),\n        r.d(n, \"getType\", function () {\n          return Bt;\n        }),\n        r.d(n, \"isArguments\", function () {\n          return Nt;\n        }),\n        r.d(n, \"isArray\", function () {\n          return l;\n        }),\n        r.d(n, \"isArrayLike\", function () {\n          return e;\n        }),\n        r.d(n, \"isBoolean\", function () {\n          return kt;\n        }),\n        r.d(n, \"isDate\", function () {\n          return It;\n        }),\n        r.d(n, \"isError\", function () {\n          return Lt;\n        }),\n        r.d(n, \"isFunction\", function () {\n          return f;\n        }),\n        r.d(n, \"isFinite\", function () {\n          return Ft;\n        }),\n        r.d(n, \"isNil\", function () {\n          return s;\n        }),\n        r.d(n, \"isNull\", function () {\n          return Dt;\n        }),\n        r.d(n, \"isNumber\", function () {\n          return it;\n        }),\n        r.d(n, \"isObject\", function () {\n          return h;\n        }),\n        r.d(n, \"isObjectLike\", function () {\n          return b;\n        }),\n        r.d(n, \"isPlainObject\", function () {\n          return m;\n        }),\n        r.d(n, \"isPrototype\", function () {\n          return Rt;\n        }),\n        r.d(n, \"isRegExp\", function () {\n          return zt;\n        }),\n        r.d(n, \"isString\", function () {\n          return L;\n        }),\n        r.d(n, \"isType\", function () {\n          return c;\n        }),\n        r.d(n, \"isUndefined\", function () {\n          return Vt;\n        }),\n        r.d(n, \"isElement\", function () {\n          return qt;\n        }),\n        r.d(n, \"requestAnimationFrame\", function () {\n          return Ut;\n        }),\n        r.d(n, \"clearAnimationFrame\", function () {\n          return Wt;\n        }),\n        r.d(n, \"augment\", function () {\n          return Kt;\n        }),\n        r.d(n, \"clone\", function () {\n          return $t;\n        }),\n        r.d(n, \"debounce\", function () {\n          return Jt;\n        }),\n        r.d(n, \"memoize\", function () {\n          return Qt;\n        }),\n        r.d(n, \"deepMix\", function () {\n          return tn;\n        }),\n        r.d(n, \"each\", function () {\n          return p;\n        }),\n        r.d(n, \"extend\", function () {\n          return nn;\n        }),\n        r.d(n, \"indexOf\", function () {\n          return rn;\n        }),\n        r.d(n, \"isEmpty\", function () {\n          return un;\n        }),\n        r.d(n, \"isEqual\", function () {\n          return on;\n        }),\n        r.d(n, \"isEqualWith\", function () {\n          return an;\n        }),\n        r.d(n, \"map\", function () {\n          return cn;\n        }),\n        r.d(n, \"mapValues\", function () {\n          return sn;\n        }),\n        r.d(n, \"mix\", function () {\n          return Yt;\n        }),\n        r.d(n, \"assign\", function () {\n          return Yt;\n        }),\n        r.d(n, \"get\", function () {\n          return ln;\n        }),\n        r.d(n, \"set\", function () {\n          return dn;\n        }),\n        r.d(n, \"pick\", function () {\n          return pn;\n        }),\n        r.d(n, \"omit\", function () {\n          return vn;\n        }),\n        r.d(n, \"throttle\", function () {\n          return yn;\n        }),\n        r.d(n, \"toArray\", function () {\n          return gn;\n        }),\n        r.d(n, \"toString\", function () {\n          return St;\n        }),\n        r.d(n, \"uniqueId\", function () {\n          return mn;\n        }),\n        r.d(n, \"noop\", function () {\n          return On;\n        }),\n        r.d(n, \"identity\", function () {\n          return jn;\n        }),\n        r.d(n, \"size\", function () {\n          return xn;\n        }),\n        r.d(n, \"measureTextWidth\", function () {\n          return Sn;\n        }),\n        r.d(n, \"getEllipsisText\", function () {\n          return Pn;\n        }),\n        r.d(n, \"Cache\", function () {\n          return En;\n        });\n      var e = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = function (t, n) {\n          return !!e(t) && t.indexOf(n) > -1;\n        },\n        u = function (t, n) {\n          if (!e(t)) return t;\n          for (var r = [], i = 0; i < t.length; i++) {\n            var u = t[i];\n            n(u, i) && r.push(u);\n          }\n          return r;\n        },\n        o = function (t, n) {\n          return (\n            void 0 === n && (n = []),\n            u(t, function (t) {\n              return !i(n, t);\n            })\n          );\n        },\n        a = {}.toString,\n        c = function (t, n) {\n          return a.call(t) === \"[object \" + n + \"]\";\n        },\n        f = function (t) {\n          return c(t, \"Function\");\n        },\n        s = function (t) {\n          return null == t;\n        },\n        l = function (t) {\n          return Array.isArray ? Array.isArray(t) : c(t, \"Array\");\n        };\n      function d(t) {\n        return (d =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var h = function (t) {\n        var n = d(t);\n        return (null !== t && \"object\" === n) || \"function\" === n;\n      };\n      var p = function (t, n) {\n          if (t)\n            if (l(t))\n              for (var r = 0, e = t.length; r < e && !1 !== n(t[r], r); r++);\n            else if (h(t))\n              for (var i in t)\n                if (t.hasOwnProperty(i) && !1 === n(t[i], i)) break;\n        },\n        v = Object.keys\n          ? function (t) {\n              return Object.keys(t);\n            }\n          : function (t) {\n              var n = [];\n              return (\n                p(t, function (r, e) {\n                  (f(t) && \"prototype\" === e) || n.push(e);\n                }),\n                n\n              );\n            };\n      var y = function (t, n) {\n        var r = v(n),\n          e = r.length;\n        if (s(t)) return !e;\n        for (var i = 0; i < e; i += 1) {\n          var u = r[i];\n          if (n[u] !== t[u] || !(u in t)) return !1;\n        }\n        return !0;\n      };\n      function g(t) {\n        return (g =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var b = function (t) {\n          return \"object\" === g(t) && null !== t;\n        },\n        m = function (t) {\n          if (!b(t) || !c(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var n = t; null !== Object.getPrototypeOf(n); )\n            n = Object.getPrototypeOf(n);\n          return Object.getPrototypeOf(t) === n;\n        };\n      var O = function (t, n) {\n        if (!l(t)) return null;\n        var r;\n        if (\n          (f(n) && (r = n),\n          m(n) &&\n            (r = function (t) {\n              return y(t, n);\n            }),\n          r)\n        )\n          for (var e = 0; e < t.length; e += 1) if (r(t[e])) return t[e];\n        return null;\n      };\n      var j = function (t, n, r) {\n          void 0 === r && (r = 0);\n          for (var e = r; e < t.length; e++) if (n(t[e], e)) return e;\n          return -1;\n        },\n        x = function (t, n) {\n          for (var r = null, e = 0; e < t.length; e++) {\n            var i = t[e][n];\n            if (!s(i)) {\n              r = l(i) ? i[0] : i;\n              break;\n            }\n          }\n          return r;\n        },\n        w = function (t) {\n          if (!l(t)) return [];\n          for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n          return n;\n        },\n        A = function t(n, r) {\n          if ((void 0 === r && (r = []), l(n)))\n            for (var e = 0; e < n.length; e += 1) t(n[e], r);\n          else r.push(n);\n          return r;\n        },\n        S = function (t) {\n          if (l(t))\n            return t.reduce(function (t, n) {\n              return Math.max(t, n);\n            }, t[0]);\n        },\n        P = function (t) {\n          if (l(t))\n            return t.reduce(function (t, n) {\n              return Math.min(t, n);\n            }, t[0]);\n        },\n        E = function (t) {\n          var n = t.filter(function (t) {\n            return !isNaN(t);\n          });\n          if (!n.length) return { min: 0, max: 0 };\n          if (l(t[0])) {\n            for (var r = [], e = 0; e < t.length; e++) r = r.concat(t[e]);\n            n = r;\n          }\n          var i = S(n);\n          return { min: P(n), max: i };\n        },\n        _ = Array.prototype,\n        C = _.splice,\n        M = _.indexOf,\n        T = function (t) {\n          for (var n = [], r = 1; r < arguments.length; r++)\n            n[r - 1] = arguments[r];\n          for (var e = 0; e < n.length; e++)\n            for (var i = n[e], u = -1; (u = M.call(t, i)) > -1; )\n              C.call(t, u, 1);\n          return t;\n        },\n        B = Array.prototype.splice,\n        N = function (t, n) {\n          if (!e(t)) return [];\n          for (var r = t ? n.length : 0, i = r - 1; r--; ) {\n            var u = void 0,\n              o = n[r];\n            (r !== i && o === u) || ((u = o), B.call(t, o, 1));\n          }\n          return t;\n        },\n        k = function (t, n, r) {\n          if (!l(t) && !m(t)) return t;\n          var e = r;\n          return (\n            p(t, function (t, r) {\n              e = n(e, t, r);\n            }),\n            e\n          );\n        },\n        I = function (t, n) {\n          var r = [];\n          if (!e(t)) return r;\n          for (var i = -1, u = [], o = t.length; ++i < o; ) {\n            var a = t[i];\n            n(a, i, t) && (r.push(a), u.push(i));\n          }\n          return N(t, u), r;\n        },\n        L = function (t) {\n          return c(t, \"String\");\n        };\n      var F = function (t, n) {\n        var r;\n        if (f(n))\n          r = function (t, r) {\n            return n(t) - n(r);\n          };\n        else {\n          var e = [];\n          L(n) ? e.push(n) : l(n) && (e = n),\n            (r = function (t, n) {\n              for (var r = 0; r < e.length; r += 1) {\n                var i = e[r];\n                if (t[i] > n[i]) return 1;\n                if (t[i] < n[i]) return -1;\n              }\n              return 0;\n            });\n        }\n        return t.sort(r), t;\n      };\n      function D(t, n) {\n        void 0 === n && (n = new Map());\n        var r = [];\n        if (Array.isArray(t))\n          for (var e = 0, i = t.length; e < i; e++) {\n            var u = t[e];\n            n.has(u) || (r.push(u), n.set(u, !0));\n          }\n        return r;\n      }\n      var H = function () {\n          for (var t = [], n = 0; n < arguments.length; n++)\n            t[n] = arguments[n];\n          return D([].concat.apply([], t));\n        },\n        R = function (t, n) {\n          for (var r = [], e = {}, i = 0; i < t.length; i++) {\n            var u = t[i][n];\n            if (!s(u)) {\n              l(u) || (u = [u]);\n              for (var o = 0; o < u.length; o++) {\n                var a = u[o];\n                e[a] || (r.push(a), (e[a] = !0));\n              }\n            }\n          }\n          return r;\n        };\n      function z(t) {\n        if (e(t)) return t[0];\n      }\n      function V(t) {\n        if (e(t)) {\n          return t[t.length - 1];\n        }\n      }\n      var q = function (t, n) {\n        return !(!l(t) && !L(t)) && t[0] === n;\n      };\n      var U = function (t, n) {\n          return !(!l(t) && !L(t)) && t[t.length - 1] === n;\n        },\n        W = function (t, n) {\n          for (var r = 0; r < t.length; r++) if (!n(t[r], r)) return !1;\n          return !0;\n        },\n        G = function (t, n) {\n          for (var r = 0; r < t.length; r++) if (n(t[r], r)) return !0;\n          return !1;\n        },\n        Y = Object.prototype.hasOwnProperty;\n      var K = function (t, n) {\n        if (!n || !l(t)) return {};\n        for (\n          var r,\n            e = {},\n            i = f(n)\n              ? n\n              : function (t) {\n                  return t[n];\n                },\n            u = 0;\n          u < t.length;\n          u++\n        ) {\n          var o = t[u];\n          (r = i(o)), Y.call(e, r) ? e[r].push(o) : (e[r] = [o]);\n        }\n        return e;\n      };\n      function X(t, n) {\n        if (!n) return { 0: t };\n        if (!f(n)) {\n          var r = l(n) ? n : n.replace(/\\s+/g, \"\").split(\"*\");\n          n = function (t) {\n            for (var n = \"_\", e = 0, i = r.length; e < i; e++)\n              n += t[r[e]] && t[r[e]].toString();\n            return n;\n          };\n        }\n        return K(t, n);\n      }\n      var $ = function (t, n) {\n        if (!n) return [t];\n        var r = X(t, n),\n          e = [];\n        for (var i in r) e.push(r[i]);\n        return e;\n      };\n      var J = function (t, n) {\n        return t[\"_wrap_\" + n];\n      };\n      var Q = function (t, n) {\n          if (t[\"_wrap_\" + n]) return t[\"_wrap_\" + n];\n          var r = function (r) {\n            t[n](r);\n          };\n          return (t[\"_wrap_\" + n] = r), r;\n        },\n        Z = {};\n      var tt = function (t) {\n        var n = Z[t];\n        if (!n) {\n          for (var r = t.toString(16), e = r.length; e < 6; e++) r = \"0\" + r;\n          (n = \"#\" + r), (Z[t] = n);\n        }\n        return n;\n      };\n      var nt = function (t) {\n          var n = 0,\n            r = 0,\n            e = 0,\n            i = 0;\n          return (\n            l(t)\n              ? 1 === t.length\n                ? (n = r = e = i = t[0])\n                : 2 === t.length\n                ? ((n = e = t[0]), (r = i = t[1]))\n                : 3 === t.length\n                ? ((n = t[0]), (r = i = t[1]), (e = t[2]))\n                : ((n = t[0]), (r = t[1]), (e = t[2]), (i = t[3]))\n              : (n = r = e = i = t),\n            { r1: n, r2: r, r3: e, r4: i }\n          );\n        },\n        rt = function (t, n, r) {\n          return t < n ? n : t > r ? r : t;\n        },\n        et = function (t, n) {\n          var r = n.toString(),\n            e = r.indexOf(\".\");\n          if (-1 === e) return Math.round(t);\n          var i = r.substr(e + 1).length;\n          return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n        },\n        it = function (t) {\n          return c(t, \"Number\");\n        },\n        ut = function (t) {\n          return it(t) && t % 1 != 0;\n        },\n        ot = function (t) {\n          return it(t) && t % 2 == 0;\n        },\n        at = Number.isInteger\n          ? Number.isInteger\n          : function (t) {\n              return it(t) && t % 1 == 0;\n            },\n        ct = function (t) {\n          return it(t) && t < 0;\n        };\n      function ft(t, n, r) {\n        return void 0 === r && (r = 1e-5), Math.abs(t - n) < r;\n      }\n      var st = function (t) {\n          return it(t) && t % 2 != 0;\n        },\n        lt = function (t) {\n          return it(t) && t > 0;\n        },\n        dt = function (t, n) {\n          if (l(t)) {\n            for (var r, e = -1 / 0, i = 0; i < t.length; i++) {\n              var u = t[i],\n                o = f(n) ? n(u) : u[n];\n              o > e && ((r = u), (e = o));\n            }\n            return r;\n          }\n        },\n        ht = function (t, n) {\n          if (l(t)) {\n            for (var r, e = 1 / 0, i = 0; i < t.length; i++) {\n              var u = t[i],\n                o = f(n) ? n(u) : u[n];\n              o < e && ((r = u), (e = o));\n            }\n            return r;\n          }\n        },\n        pt = function (t, n) {\n          return ((t % n) + n) % n;\n        },\n        vt = 180 / Math.PI,\n        yt = function (t) {\n          return vt * t;\n        },\n        gt = parseInt,\n        bt = Math.PI / 180,\n        mt = function (t) {\n          return bt * t;\n        },\n        Ot = p,\n        jt = function (t, n) {\n          return t.hasOwnProperty(n);\n        },\n        xt = jt,\n        wt = Object.values\n          ? function (t) {\n              return Object.values(t);\n            }\n          : function (t) {\n              var n = [];\n              return (\n                p(t, function (r, e) {\n                  (f(t) && \"prototype\" === e) || n.push(r);\n                }),\n                n\n              );\n            },\n        At = function (t, n) {\n          return i(wt(t), n);\n        },\n        St = function (t) {\n          return s(t) ? \"\" : t.toString();\n        },\n        Pt = function (t) {\n          return St(t).toLowerCase();\n        },\n        Et = function (t) {\n          var n = St(t);\n          return n.charAt(0).toLowerCase() + n.substring(1);\n        };\n      var _t = function (t, n) {\n          return t && n\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, r) {\n                return \"\\\\\" === t.charAt(0)\n                  ? t.slice(1)\n                  : void 0 === n[r]\n                  ? \"\"\n                  : n[r];\n              })\n            : t;\n        },\n        Ct = function (t) {\n          return St(t).toUpperCase();\n        },\n        Mt = function (t) {\n          var n = St(t);\n          return n.charAt(0).toUpperCase() + n.substring(1);\n        },\n        Tt = {}.toString,\n        Bt = function (t) {\n          return Tt.call(t)\n            .replace(/^\\[object /, \"\")\n            .replace(/]$/, \"\");\n        },\n        Nt = function (t) {\n          return c(t, \"Arguments\");\n        },\n        kt = function (t) {\n          return c(t, \"Boolean\");\n        },\n        It = function (t) {\n          return c(t, \"Date\");\n        },\n        Lt = function (t) {\n          return c(t, \"Error\");\n        },\n        Ft = function (t) {\n          return it(t) && isFinite(t);\n        },\n        Dt = function (t) {\n          return null === t;\n        },\n        Ht = Object.prototype,\n        Rt = function (t) {\n          var n = t && t.constructor;\n          return t === ((\"function\" == typeof n && n.prototype) || Ht);\n        },\n        zt = function (t) {\n          return c(t, \"RegExp\");\n        },\n        Vt = function (t) {\n          return void 0 === t;\n        },\n        qt = function (t) {\n          return t instanceof Element || t instanceof HTMLDocument;\n        };\n      function Ut(t) {\n        return (\n          window.requestAnimationFrame ||\n          window.webkitRequestAnimationFrame ||\n          window.mozRequestAnimationFrame ||\n          window.msRequestAnimationFrame ||\n          function (t) {\n            return setTimeout(t, 16);\n          }\n        )(t);\n      }\n      function Wt(t) {\n        (\n          window.cancelAnimationFrame ||\n          window.webkitCancelAnimationFrame ||\n          window.mozCancelAnimationFrame ||\n          window.msCancelAnimationFrame ||\n          clearTimeout\n        )(t);\n      }\n      function Gt(t, n) {\n        for (var r in n)\n          n.hasOwnProperty(r) &&\n            \"constructor\" !== r &&\n            void 0 !== n[r] &&\n            (t[r] = n[r]);\n      }\n      function Yt(t, n, r, e) {\n        return n && Gt(t, n), r && Gt(t, r), e && Gt(t, e), t;\n      }\n      var Kt = function () {\n        for (var t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];\n        for (var r = t[0], e = 1; e < t.length; e++) {\n          var i = t[e];\n          f(i) && (i = i.prototype), Yt(r.prototype, i);\n        }\n      };\n      function Xt(t) {\n        return (Xt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var $t = function t(n) {\n        if (\"object\" !== Xt(n) || null === n) return n;\n        var r;\n        if (l(n)) {\n          r = [];\n          for (var e = 0, i = n.length; e < i; e++)\n            \"object\" === Xt(n[e]) && null != n[e]\n              ? (r[e] = t(n[e]))\n              : (r[e] = n[e]);\n        } else\n          for (var u in ((r = {}), n))\n            \"object\" === Xt(n[u]) && null != n[u]\n              ? (r[u] = t(n[u]))\n              : (r[u] = n[u]);\n        return r;\n      };\n      var Jt = function (t, n, r) {\n          var e;\n          return function () {\n            var i = this,\n              u = arguments,\n              o = function () {\n                (e = null), r || t.apply(i, u);\n              },\n              a = r && !e;\n            clearTimeout(e), (e = setTimeout(o, n)), a && t.apply(i, u);\n          };\n        },\n        Qt = function (t, n) {\n          if (!f(t)) throw new TypeError(\"Expected a function\");\n          var r = function r() {\n            for (var e = [], i = 0; i < arguments.length; i++)\n              e[i] = arguments[i];\n            var u = n ? n.apply(this, e) : e[0],\n              o = r.cache;\n            if (o.has(u)) return o.get(u);\n            var a = t.apply(this, e);\n            return o.set(u, a), a;\n          };\n          return (r.cache = new Map()), r;\n        };\n      function Zt(t, n, r, e) {\n        for (var i in ((r = r || 0), (e = e || 5), n))\n          if (n.hasOwnProperty(i)) {\n            var u = n[i];\n            null !== u && m(u)\n              ? (m(t[i]) || (t[i] = {}),\n                r < e ? Zt(t[i], u, r + 1, e) : (t[i] = n[i]))\n              : l(u)\n              ? ((t[i] = []), (t[i] = t[i].concat(u)))\n              : void 0 !== u && (t[i] = u);\n          }\n      }\n      var tn = function (t) {\n          for (var n = [], r = 1; r < arguments.length; r++)\n            n[r - 1] = arguments[r];\n          for (var e = 0; e < n.length; e += 1) Zt(t, n[e]);\n          return t;\n        },\n        nn = function (t, n, r, e) {\n          f(n) || ((r = n), (n = t), (t = function () {}));\n          var i = Object.create\n              ? function (t, n) {\n                  return Object.create(t, { constructor: { value: n } });\n                }\n              : function (t, n) {\n                  function r() {}\n                  r.prototype = t;\n                  var e = new r();\n                  return (e.constructor = n), e;\n                },\n            u = i(n.prototype, t);\n          return (\n            (t.prototype = Yt(u, t.prototype)),\n            (t.superclass = i(n.prototype, n)),\n            Yt(u, r),\n            Yt(t, e),\n            t\n          );\n        },\n        rn = function (t, n) {\n          if (!e(t)) return -1;\n          var r = Array.prototype.indexOf;\n          if (r) return r.call(t, n);\n          for (var i = -1, u = 0; u < t.length; u++)\n            if (t[u] === n) {\n              i = u;\n              break;\n            }\n          return i;\n        },\n        en = Object.prototype.hasOwnProperty;\n      var un = function (t) {\n          if (s(t)) return !0;\n          if (e(t)) return !t.length;\n          var n = Bt(t);\n          if (\"Map\" === n || \"Set\" === n) return !t.size;\n          if (Rt(t)) return !Object.keys(t).length;\n          for (var r in t) if (en.call(t, r)) return !1;\n          return !0;\n        },\n        on = function t(n, r) {\n          if (n === r) return !0;\n          if (!n || !r) return !1;\n          if (L(n) || L(r)) return !1;\n          if (e(n) || e(r)) {\n            if (n.length !== r.length) return !1;\n            for (var i = !0, u = 0; u < n.length && (i = t(n[u], r[u])); u++);\n            return i;\n          }\n          if (b(n) || b(r)) {\n            var o = Object.keys(n),\n              a = Object.keys(r);\n            if (o.length !== a.length) return !1;\n            for (i = !0, u = 0; u < o.length && (i = t(n[o[u]], r[o[u]])); u++);\n            return i;\n          }\n          return !1;\n        },\n        an = function (t, n, r) {\n          return f(r) ? !!r(t, n) : on(t, n);\n        },\n        cn = function (t, n) {\n          if (!e(t)) return t;\n          for (var r = [], i = 0; i < t.length; i++) {\n            var u = t[i];\n            r.push(n(u, i));\n          }\n          return r;\n        },\n        fn = function (t) {\n          return t;\n        },\n        sn = function (t, n) {\n          void 0 === n && (n = fn);\n          var r = {};\n          return (\n            h(t) &&\n              !s(t) &&\n              Object.keys(t).forEach(function (e) {\n                r[e] = n(t[e], e);\n              }),\n            r\n          );\n        },\n        ln = function (t, n, r) {\n          for (var e = 0, i = L(n) ? n.split(\".\") : n; t && e < i.length; )\n            t = t[i[e++]];\n          return void 0 === t || e < i.length ? r : t;\n        },\n        dn = function (t, n, r) {\n          var e = t,\n            i = L(n) ? n.split(\".\") : n;\n          return (\n            i.forEach(function (t, n) {\n              n < i.length - 1\n                ? (h(e[t]) || (e[t] = it(i[n + 1]) ? [] : {}), (e = e[t]))\n                : (e[t] = r);\n            }),\n            t\n          );\n        },\n        hn = Object.prototype.hasOwnProperty,\n        pn = function (t, n) {\n          if (null === t || !m(t)) return {};\n          var r = {};\n          return (\n            p(n, function (n) {\n              hn.call(t, n) && (r[n] = t[n]);\n            }),\n            r\n          );\n        },\n        vn = function (t, n) {\n          return k(\n            t,\n            function (t, r, e) {\n              return n.includes(e) || (t[e] = r), t;\n            },\n            {},\n          );\n        },\n        yn = function (t, n, r) {\n          var e,\n            i,\n            u,\n            o,\n            a = 0;\n          r || (r = {});\n          var c = function () {\n              (a = !1 === r.leading ? 0 : Date.now()),\n                (e = null),\n                (o = t.apply(i, u)),\n                e || (i = u = null);\n            },\n            f = function () {\n              var f = Date.now();\n              a || !1 !== r.leading || (a = f);\n              var s = n - (f - a);\n              return (\n                (i = this),\n                (u = arguments),\n                s <= 0 || s > n\n                  ? (e && (clearTimeout(e), (e = null)),\n                    (a = f),\n                    (o = t.apply(i, u)),\n                    e || (i = u = null))\n                  : e || !1 === r.trailing || (e = setTimeout(c, s)),\n                o\n              );\n            };\n          return (\n            (f.cancel = function () {\n              clearTimeout(e), (a = 0), (e = i = u = null);\n            }),\n            f\n          );\n        },\n        gn = function (t) {\n          return e(t) ? Array.prototype.slice.call(t) : [];\n        },\n        bn = {},\n        mn = function (t) {\n          return bn[(t = t || \"g\")] ? (bn[t] += 1) : (bn[t] = 1), t + bn[t];\n        },\n        On = function () {},\n        jn = function (t) {\n          return t;\n        };\n      function xn(t) {\n        return s(t) ? 0 : e(t) ? t.length : Object.keys(t).length;\n      }\n      var wn,\n        An = r(1),\n        Sn = Qt(\n          function (t, n) {\n            void 0 === n && (n = {});\n            var r = n.fontSize,\n              e = n.fontFamily,\n              i = n.fontWeight,\n              u = n.fontStyle,\n              o = n.fontVariant;\n            return (\n              wn || (wn = document.createElement(\"canvas\").getContext(\"2d\")),\n              (wn.font = [u, o, i, r + \"px\", e].join(\" \")),\n              wn.measureText(L(t) ? t : \"\").width\n            );\n          },\n          function (t, n) {\n            return void 0 === n && (n = {}), Object(An.g)([t], wt(n)).join(\"\");\n          },\n        ),\n        Pn = function (t, n, r, e) {\n          void 0 === e && (e = \"...\");\n          var i,\n            u,\n            o = Sn(e, r),\n            a = L(t) ? t : St(t),\n            c = n,\n            f = [];\n          if (Sn(t, r) <= n) return t;\n          for (; (i = a.substr(0, 16)), !((u = Sn(i, r)) + o > c && u > c); )\n            if ((f.push(i), (c -= u), !(a = a.substr(16)))) return f.join(\"\");\n          for (; (i = a.substr(0, 1)), !((u = Sn(i, r)) + o > c); )\n            if ((f.push(i), (c -= u), !(a = a.substr(1)))) return f.join(\"\");\n          return \"\" + f.join(\"\") + e;\n        },\n        En = (function () {\n          function t() {\n            this.map = {};\n          }\n          return (\n            (t.prototype.has = function (t) {\n              return void 0 !== this.map[t];\n            }),\n            (t.prototype.get = function (t, n) {\n              var r = this.map[t];\n              return void 0 === r ? n : r;\n            }),\n            (t.prototype.set = function (t, n) {\n              this.map[t] = n;\n            }),\n            (t.prototype.clear = function () {\n              this.map = {};\n            }),\n            (t.prototype.delete = function (t) {\n              delete this.map[t];\n            }),\n            (t.prototype.size = function () {\n              return Object.keys(this.map).length;\n            }),\n            t\n          );\n        })();\n    },\n    1: function (t, n, r) {\n      \"use strict\";\n      r.d(n, \"c\", function () {\n        return i;\n      }),\n        r.d(n, \"a\", function () {\n          return u;\n        }),\n        r.d(n, \"e\", function () {\n          return o;\n        }),\n        r.d(n, \"b\", function () {\n          return a;\n        }),\n        r.d(n, \"d\", function () {\n          return c;\n        }),\n        r.d(n, \"g\", function () {\n          return f;\n        }),\n        r.d(n, \"f\", function () {\n          return s;\n        });\n      /*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n      var e = function (t, n) {\n        return (e =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, n) {\n              t.__proto__ = n;\n            }) ||\n          function (t, n) {\n            for (var r in n)\n              Object.prototype.hasOwnProperty.call(n, r) && (t[r] = n[r]);\n          })(t, n);\n      };\n      function i(t, n) {\n        if (\"function\" != typeof n && null !== n)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(n) +\n              \" is not a constructor or null\",\n          );\n        function r() {\n          this.constructor = t;\n        }\n        e(t, n),\n          (t.prototype =\n            null === n\n              ? Object.create(n)\n              : ((r.prototype = n.prototype), new r()));\n      }\n      var u = function () {\n        return (u =\n          Object.assign ||\n          function (t) {\n            for (var n, r = 1, e = arguments.length; r < e; r++)\n              for (var i in (n = arguments[r]))\n                Object.prototype.hasOwnProperty.call(n, i) && (t[i] = n[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function o(t, n) {\n        var r = {};\n        for (var e in t)\n          Object.prototype.hasOwnProperty.call(t, e) &&\n            n.indexOf(e) < 0 &&\n            (r[e] = t[e]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (e = Object.getOwnPropertySymbols(t); i < e.length; i++)\n            n.indexOf(e[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, e[i]) &&\n              (r[e[i]] = t[e[i]]);\n        }\n        return r;\n      }\n      function a(t, n, r, e) {\n        return new (r || (r = Promise))(function (i, u) {\n          function o(t) {\n            try {\n              c(e.next(t));\n            } catch (t) {\n              u(t);\n            }\n          }\n          function a(t) {\n            try {\n              c(e.throw(t));\n            } catch (t) {\n              u(t);\n            }\n          }\n          function c(t) {\n            var n;\n            t.done\n              ? i(t.value)\n              : ((n = t.value),\n                n instanceof r\n                  ? n\n                  : new r(function (t) {\n                      t(n);\n                    })).then(o, a);\n          }\n          c((e = e.apply(t, n || [])).next());\n        });\n      }\n      function c(t, n) {\n        var r,\n          e,\n          i,\n          u,\n          o = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (u = { next: a(0), throw: a(1), return: a(2) }),\n          \"function\" == typeof Symbol &&\n            (u[Symbol.iterator] = function () {\n              return this;\n            }),\n          u\n        );\n        function a(u) {\n          return function (a) {\n            return (function (u) {\n              if (r) throw new TypeError(\"Generator is already executing.\");\n              for (; o; )\n                try {\n                  if (\n                    ((r = 1),\n                    e &&\n                      (i =\n                        2 & u[0]\n                          ? e.return\n                          : u[0]\n                          ? e.throw || ((i = e.return) && i.call(e), 0)\n                          : e.next) &&\n                      !(i = i.call(e, u[1])).done)\n                  )\n                    return i;\n                  switch (((e = 0), i && (u = [2 & u[0], i.value]), u[0])) {\n                    case 0:\n                    case 1:\n                      i = u;\n                      break;\n                    case 4:\n                      return o.label++, { value: u[1], done: !1 };\n                    case 5:\n                      o.label++, (e = u[1]), (u = [0]);\n                      continue;\n                    case 7:\n                      (u = o.ops.pop()), o.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = o.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== u[0] && 2 !== u[0]))\n                      ) {\n                        o = 0;\n                        continue;\n                      }\n                      if (3 === u[0] && (!i || (u[1] > i[0] && u[1] < i[3]))) {\n                        o.label = u[1];\n                        break;\n                      }\n                      if (6 === u[0] && o.label < i[1]) {\n                        (o.label = i[1]), (i = u);\n                        break;\n                      }\n                      if (i && o.label < i[2]) {\n                        (o.label = i[2]), o.ops.push(u);\n                        break;\n                      }\n                      i[2] && o.ops.pop(), o.trys.pop();\n                      continue;\n                  }\n                  u = n.call(t, o);\n                } catch (t) {\n                  (u = [6, t]), (e = 0);\n                } finally {\n                  r = i = 0;\n                }\n              if (5 & u[0]) throw u[1];\n              return { value: u[0] ? u[1] : void 0, done: !0 };\n            })([u, a]);\n          };\n        }\n      }\n      Object.create;\n      function f() {\n        for (var t = 0, n = 0, r = arguments.length; n < r; n++)\n          t += arguments[n].length;\n        var e = Array(t),\n          i = 0;\n        for (n = 0; n < r; n++)\n          for (var u = arguments[n], o = 0, a = u.length; o < a; o++, i++)\n            e[i] = u[o];\n        return e;\n      }\n      function s(t, n, r) {\n        if (r || 2 === arguments.length)\n          for (var e, i = 0, u = n.length; i < u; i++)\n            (!e && i in n) ||\n              (e || (e = Array.prototype.slice.call(n, 0, i)), (e[i] = n[i]));\n        return t.concat(e || Array.prototype.slice.call(n));\n      }\n      Object.create;\n    },\n    196: function (t, n, r) {\n      \"use strict\";\n      r.r(n);\n      var e = r(1),\n        i = r(99),\n        u = r.n(i),\n        o = r(0);\n      n.default = function (t) {\n        var n = t.Graph,\n          r = t.Util,\n          i = r.radialLayout,\n          a = r.traverseTree;\n        return (function (t) {\n          function n(n) {\n            var r = t.call(this, n) || this;\n            return (\n              (r.layoutAnimating = !1),\n              r.set(\"removeList\", []),\n              r.set(\"layoutMethod\", r.getLayout()),\n              r\n            );\n          }\n          return (\n            Object(e.c)(n, t),\n            (n.prototype.getLayout = function () {\n              var t = this.get(\"layout\");\n              return t\n                ? \"function\" == typeof t\n                  ? t\n                  : (t.type || (t.type = \"dendrogram\"),\n                    t.direction || (t.direction = \"TB\"),\n                    t.radial\n                      ? function (n) {\n                          var r = u.a[t.type](n, t);\n                          return i(r), r;\n                        }\n                      : function (n) {\n                          return u.a[t.type](n, t);\n                        })\n                : null;\n            }),\n            (n.indexOfChild = function (t, n) {\n              var r = -1;\n              return (\n                Object(o.each)(t, function (t, e) {\n                  if (n === t.id) return (r = e), !1;\n                }),\n                r\n              );\n            }),\n            (n.prototype.getDefaultCfg = function () {\n              var n = t.prototype.getDefaultCfg.call(this);\n              return (n.animate = !0), n;\n            }),\n            (n.prototype.innerAddChild = function (t, n, r) {\n              var e = this,\n                i = t.data;\n              i && ((i.x = t.x), (i.y = t.y), (i.depth = t.depth));\n              var u = e.addItem(\"node\", i, !1);\n              if (n) {\n                if ((u.set(\"parent\", n), r)) {\n                  var a = n.get(\"originAttrs\");\n                  if (a) u.set(\"originAttrs\", a);\n                  else {\n                    var c = n.getModel();\n                    u.set(\"originAttrs\", { x: c.x, y: c.y });\n                  }\n                }\n                var f = n.get(\"children\");\n                f ? f.push(u) : n.set(\"children\", [u]),\n                  e.addItem(\n                    \"edge\",\n                    {\n                      source: n,\n                      target: u,\n                      id: n.get(\"id\") + \":\" + u.get(\"id\"),\n                    },\n                    !1,\n                  );\n              }\n              return (\n                Object(o.each)(t.children || [], function (t) {\n                  e.innerAddChild(t, u, r);\n                }),\n                e.emit(\"afteraddchild\", { item: u, parent: n }),\n                u\n              );\n            }),\n            (n.prototype.innerUpdateChild = function (t, r, e) {\n              var i = this,\n                u = i.findById(t.id);\n              if (u) {\n                Object(o.each)(t.children || [], function (t) {\n                  i.innerUpdateChild(t, u, e);\n                });\n                var a,\n                  c,\n                  f = u.get(\"children\");\n                if (f)\n                  if (f.length > 0)\n                    for (var s = f.length - 1; s >= 0; s--) {\n                      var l = f[s].getModel();\n                      -1 === n.indexOfChild(t.children || [], l.id) &&\n                        (i.innerRemoveChild(l.id, { x: t.x, y: t.y }, e),\n                        f.splice(s, 1));\n                    }\n                u.get(\"originAttrs\") &&\n                  ((a = u.get(\"originAttrs\").x), (c = u.get(\"originAttrs\").y));\n                var d = u.getModel();\n                e && u.set(\"originAttrs\", { x: d.x, y: d.y }),\n                  u.set(\"model\", t.data),\n                  (a === t.x && c === t.y) ||\n                    u.updatePosition({ x: t.x, y: t.y });\n              } else i.innerAddChild(t, r, e);\n            }),\n            (n.prototype.innerRemoveChild = function (t, n, r) {\n              var e = this,\n                i = e.findById(t);\n              if (i)\n                if (\n                  (Object(o.each)(i.get(\"children\"), function (t) {\n                    e.innerRemoveChild(t.getModel().id, n, r);\n                  }),\n                  r)\n                ) {\n                  var u = i.getModel();\n                  i.set(\"to\", n),\n                    i.set(\"originAttrs\", { x: u.x, y: u.y }),\n                    e.get(\"removeList\").push(i);\n                } else e.removeItem(i);\n            }),\n            (n.prototype.changeData = function (t) {\n              var n = this;\n              this.getNodes().map(function (t) {\n                return n.clearItemStates(t);\n              }),\n                this.getEdges().map(function (t) {\n                  return n.clearItemStates(t);\n                }),\n                t ? (n.data(t), n.render()) : n.layout(this.get(\"fitView\"));\n            }),\n            (n.prototype.changeLayout = function (t) {\n              console.warn(\n                \"Please call updateLayout instead of changeLayout. changeLayout will be discarded soon\",\n              );\n              this.updateLayout(t);\n            }),\n            (n.prototype.updateLayout = function (t) {\n              t\n                ? (this.set(\"layout\", t),\n                  this.set(\"layoutMethod\", this.getLayout()),\n                  this.layout())\n                : console.warn(\"layout cannot be null\");\n            }),\n            (n.prototype.refreshLayout = function (t) {\n              console.warn(\n                \"Please call layout instead of refreshLayout. refreshLayout will be discarded soon\",\n              );\n              this.layout(t);\n            }),\n            (n.prototype.layout = function (t) {\n              var n = this.get(\"data\"),\n                r = this.get(\"layoutMethod\")(n, this.get(\"layout\")),\n                e = this.get(\"animate\");\n              (this.emit(\"beforerefreshlayout\", { data: n, layoutData: r }),\n              this.emit(\"beforelayout\"),\n              this.innerUpdateChild(r, void 0, e),\n              t) && this.get(\"viewController\").fitView();\n              e ? this.layoutAnimate(r) : (this.refresh(), this.paint()),\n                this.emit(\"afterrefreshlayout\", { data: n, layoutData: r }),\n                this.emit(\"afterlayout\");\n            }),\n            (n.prototype.addChild = function (t, n) {\n              this.emit(\"beforeaddchild\", { model: t, parent: n }),\n                Object(o.isString)(n) || (n = n.get(\"id\"));\n              var r = this.findDataById(n);\n              r &&\n                (r.children || (r.children = []),\n                r.children.push(t),\n                this.changeData());\n            }),\n            (n.prototype.updateChildren = function (t, n) {\n              n && this.findById(n)\n                ? ((this.findDataById(n).children = t), this.changeData())\n                : console.warn(\n                    \"Update children failed! There is no node with id '\" +\n                      n +\n                      \"'\",\n                  );\n            }),\n            (n.prototype.updateChild = function (t, r) {\n              if (r && this.findById(r)) {\n                var e = this.findDataById(r),\n                  i = this.findById(t.id);\n                if ((e.children || (e.children = []), i)) {\n                  var u = n.indexOfChild(e.children, t.id);\n                  e.children[u] = t;\n                } else e.children.push(t);\n                this.changeData();\n              } else this.changeData(t);\n            }),\n            (n.prototype.removeChild = function (t) {\n              var r = this.findById(t);\n              if (r) {\n                var e = r.get(\"parent\");\n                if (e && !e.destroyed) {\n                  var i = this.findDataById(e.get(\"id\")),\n                    u = (i && i.children) || [],\n                    o = r.getModel(),\n                    a = n.indexOfChild(u, o.id);\n                  u.splice(a, 1);\n                }\n                this.changeData();\n              }\n            }),\n            (n.prototype.findDataById = function (t, n) {\n              var r = this;\n              if ((n || (n = r.get(\"data\")), t === n.id)) return n;\n              var e = null;\n              return (\n                Object(o.each)(n.children || [], function (n) {\n                  return n.id === t\n                    ? ((e = n), !1)\n                    : !(e = r.findDataById(t, n)) && void 0;\n                }),\n                e\n              );\n            }),\n            (n.prototype.layoutAnimate = function (t, n) {\n              var r = this,\n                e = this.get(\"animateCfg\");\n              r.emit(\"beforeanimate\", { data: t }),\n                r.getEdges().forEach(function (t) {\n                  var n = t.get(\"model\");\n                  n.sourceAnchor ||\n                    (n.sourceAnchor = t.get(\"sourceAnchorIndex\"));\n                }),\n                this.get(\"canvas\").animate(\n                  function (e) {\n                    a(t, function (i) {\n                      var u = r.findById(i.id);\n                      if (u) {\n                        var o = u.get(\"originAttrs\"),\n                          a = u.get(\"model\");\n                        if (\n                          (o ||\n                            ((o = { x: a.x, y: a.y }), u.set(\"originAttrs\", o)),\n                          n)\n                        ) {\n                          var c = n(u, e, o, t);\n                          u.set(\"model\", Object.assign(a, c));\n                        } else\n                          (a.x = o.x + (i.x - o.x) * e),\n                            (a.y = o.y + (i.y - o.y) * e);\n                      }\n                      return !0;\n                    }),\n                      Object(o.each)(r.get(\"removeList\"), function (t) {\n                        var n = t.getModel(),\n                          r = t.get(\"originAttrs\"),\n                          i = t.get(\"to\");\n                        (n.x = r.x + (i.x - r.x) * e),\n                          (n.y = r.y + (i.y - r.y) * e);\n                      }),\n                      r.refreshPositions();\n                  },\n                  {\n                    duration: e.duration,\n                    easing: e.ease,\n                    callback: function () {\n                      Object(o.each)(r.getNodes(), function (t) {\n                        t.set(\"originAttrs\", null);\n                      }),\n                        Object(o.each)(r.get(\"removeList\"), function (t) {\n                          r.removeItem(t);\n                        }),\n                        r.set(\"removeList\", []),\n                        e.callback && e.callback(),\n                        r.emit(\"afteranimate\", { data: t });\n                    },\n                    delay: e.delay,\n                  },\n                );\n            }),\n            (n.prototype.stopLayoutAnimate = function () {\n              this.get(\"canvas\").stopAnimate(),\n                this.emit(\"layoutanimateend\", { data: this.get(\"data\") }),\n                (this.layoutAnimating = !1);\n            }),\n            (n.prototype.isLayoutAnimating = function () {\n              return this.layoutAnimating;\n            }),\n            (n.prototype.render = function () {\n              if (!this.get(\"data\"))\n                throw new Error(\"data must be defined first\");\n              this.clear(),\n                this.emit(\"beforerender\"),\n                this.layout(this.get(\"fitView\")),\n                this.emit(\"afterrender\");\n            }),\n            (n.prototype.save = function () {\n              return this.get(\"data\");\n            }),\n            n\n          );\n        })(n);\n      };\n    },\n    45: function (t, n) {\n      t.exports = function (t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function () {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function () {\n                return t.l;\n              },\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function () {\n                return t.i;\n              },\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n    99: function (t, n, r) {\n      (function (t) {\n        var r, e, i, u;\n        function o(t) {\n          return (o =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        \"undefined\" != typeof self && self,\n          (u = function () {\n            return (function (t) {\n              var n = {};\n              function r(e) {\n                if (n[e]) return n[e].exports;\n                var i = (n[e] = { i: e, l: !1, exports: {} });\n                return (\n                  t[e].call(i.exports, i, i.exports, r), (i.l = !0), i.exports\n                );\n              }\n              return (\n                (r.m = t),\n                (r.c = n),\n                (r.d = function (t, n, e) {\n                  r.o(t, n) ||\n                    Object.defineProperty(t, n, {\n                      configurable: !1,\n                      enumerable: !0,\n                      get: e,\n                    });\n                }),\n                (r.n = function (t) {\n                  var n =\n                    t && t.__esModule\n                      ? function () {\n                          return t.default;\n                        }\n                      : function () {\n                          return t;\n                        };\n                  return r.d(n, \"a\", n), n;\n                }),\n                (r.o = function (t, n) {\n                  return Object.prototype.hasOwnProperty.call(t, n);\n                }),\n                (r.p = \"\"),\n                r((r.s = 31))\n              );\n            })([\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Array.isArray\n                    ? Array.isArray(t)\n                    : Object(e.a)(t, \"Array\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return (\n                    null !== t && \"function\" != typeof t && isFinite(t.length)\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(13);\n                n.a = function (t, n) {\n                  if (t)\n                    if (Object(e.a)(t))\n                      for (\n                        var r = 0, u = t.length;\n                        r < u && !1 !== n(t[r], r);\n                        r++\n                      );\n                    else if (Object(i.a)(t))\n                      for (var o in t)\n                        if (t.hasOwnProperty(o) && !1 === n(t[o], o)) break;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Function\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {}.toString;\n                n.a = function (t, n) {\n                  return e.call(t) === \"[object \" + n + \"]\";\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Number\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return null == t;\n                };\n              },\n              function (t, n, r) {\n                var e = r(33).mix;\n                t.exports = { assign: e };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"String\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(15),\n                  i = r(4);\n                n.a = function (t) {\n                  if (!Object(e.a)(t) || !Object(i.a)(t, \"Object\")) return !1;\n                  if (null === Object.getPrototypeOf(t)) return !0;\n                  for (var n = t; null !== Object.getPrototypeOf(n); )\n                    n = Object.getPrototypeOf(n);\n                  return Object.getPrototypeOf(t) === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6);\n                n.a = function (t) {\n                  return Object(e.a)(t) ? \"\" : t.toString();\n                };\n              },\n              function (t, n, r) {\n                var e = r(18),\n                  i = (function () {\n                    function t(t, n) {\n                      void 0 === n && (n = {}),\n                        (this.options = n),\n                        (this.rootNode = e(t, n));\n                    }\n                    return (\n                      (t.prototype.execute = function () {\n                        throw new Error(\"please override this method\");\n                      }),\n                      t\n                    );\n                  })();\n                t.exports = i;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t, n) {\n                  return !!Object(e.a)(t) && t.indexOf(n) > -1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  var n = o(t);\n                  return (null !== t && \"object\" === n) || \"function\" === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(1);\n                n.a = function (t, n) {\n                  if (!Object(i.a)(t)) return t;\n                  var r = [];\n                  return (\n                    Object(e.a)(t, function (t, e) {\n                      n(t, e) && r.push(t);\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return \"object\" === o(t) && null !== t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                function e(t, n) {\n                  for (var r in n)\n                    n.hasOwnProperty(r) &&\n                      \"constructor\" !== r &&\n                      void 0 !== n[r] &&\n                      (t[r] = n[r]);\n                }\n                n.a = function (t, n, r, i) {\n                  return n && e(t, n), r && e(t, r), i && e(t, i), t;\n                };\n              },\n              function (t, n, r) {\n                var e = r(30),\n                  i = [\"LR\", \"RL\", \"TB\", \"BT\", \"H\", \"V\"],\n                  u = [\"LR\", \"RL\", \"H\"],\n                  o = i[0];\n                t.exports = function (t, n, r) {\n                  var a = n.direction || o;\n                  if (\n                    ((n.isHorizontal = (function (t) {\n                      return u.indexOf(t) > -1;\n                    })(a)),\n                    a && -1 === i.indexOf(a))\n                  )\n                    throw new TypeError(\"Invalid direction: \" + a);\n                  if (a === i[0]) r(t, n);\n                  else if (a === i[1]) r(t, n), t.right2left();\n                  else if (a === i[2]) r(t, n);\n                  else if (a === i[3]) r(t, n), t.bottom2top();\n                  else if (a === i[4] || a === i[5]) {\n                    var c = e(t, n),\n                      f = c.left,\n                      s = c.right;\n                    r(f, n),\n                      r(s, n),\n                      n.isHorizontal ? f.right2left() : f.bottom2top(),\n                      s.translate(f.x - s.x, f.y - s.y),\n                      (t.x = f.x),\n                      (t.y = s.y);\n                    var l = t.getBoundingBox();\n                    n.isHorizontal\n                      ? l.top < 0 && t.translate(0, -l.top)\n                      : l.left < 0 && t.translate(-l.left, 0);\n                  }\n                  var d = n.fixedRoot;\n                  return (\n                    void 0 === d && (d = !0),\n                    d &&\n                      t.translate(\n                        -(t.x + t.width / 2 + t.hgap),\n                        -(t.y + t.height / 2 + t.vgap),\n                      ),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = r(7),\n                  i = {\n                    getId: function (t) {\n                      return t.id || t.name;\n                    },\n                    getPreH: function (t) {\n                      return t.preH || 0;\n                    },\n                    getPreV: function (t) {\n                      return t.preV || 0;\n                    },\n                    getHGap: function (t) {\n                      return t.hgap || 18;\n                    },\n                    getVGap: function (t) {\n                      return t.vgap || 18;\n                    },\n                    getChildren: function (t) {\n                      return t.children;\n                    },\n                    getHeight: function (t) {\n                      return t.height || 36;\n                    },\n                    getWidth: function (t) {\n                      var n = t.label || \" \";\n                      return t.width || 18 * n.split(\"\").length;\n                    },\n                  };\n                function u(t, n) {\n                  var r = this;\n                  if (((r.vgap = r.hgap = 0), t instanceof u)) return t;\n                  r.data = t;\n                  var e = n.getHGap(t),\n                    i = n.getVGap(t);\n                  return (\n                    (r.preH = n.getPreH(t)),\n                    (r.preV = n.getPreV(t)),\n                    (r.width = n.getWidth(t)),\n                    (r.height = n.getHeight(t)),\n                    (r.width += r.preH),\n                    (r.height += r.preV),\n                    (r.id = n.getId(t)),\n                    (r.x = r.y = 0),\n                    (r.depth = 0),\n                    r.children || (r.children = []),\n                    r.addGap(e, i),\n                    r\n                  );\n                }\n                e.assign(u.prototype, {\n                  isRoot: function () {\n                    return 0 === this.depth;\n                  },\n                  isLeaf: function () {\n                    return 0 === this.children.length;\n                  },\n                  addGap: function (t, n) {\n                    (this.hgap += t),\n                      (this.vgap += n),\n                      (this.width += 2 * t),\n                      (this.height += 2 * n);\n                  },\n                  eachNode: function (t) {\n                    for (var n, r = [this]; (n = r.shift()); )\n                      t(n), (r = n.children.concat(r));\n                  },\n                  DFTraverse: function (t) {\n                    this.eachNode(t);\n                  },\n                  BFTraverse: function (t) {\n                    for (var n, r = [this]; (n = r.shift()); )\n                      t(n), (r = r.concat(n.children));\n                  },\n                  getBoundingBox: function () {\n                    var t = {\n                      left: Number.MAX_VALUE,\n                      top: Number.MAX_VALUE,\n                      width: 0,\n                      height: 0,\n                    };\n                    return (\n                      this.eachNode(function (n) {\n                        (t.left = Math.min(t.left, n.x)),\n                          (t.top = Math.min(t.top, n.y)),\n                          (t.width = Math.max(t.width, n.x + n.width)),\n                          (t.height = Math.max(t.height, n.y + n.height));\n                      }),\n                      t\n                    );\n                  },\n                  translate: function (t, n) {\n                    void 0 === t && (t = 0),\n                      void 0 === n && (n = 0),\n                      this.eachNode(function (r) {\n                        (r.x += t),\n                          (r.y += n),\n                          (r.x += r.preH),\n                          (r.y += r.preV);\n                      });\n                  },\n                  right2left: function () {\n                    var t = this.getBoundingBox();\n                    this.eachNode(function (n) {\n                      n.x = n.x - 2 * (n.x - t.left) - n.width;\n                    }),\n                      this.translate(t.width, 0);\n                  },\n                  bottom2top: function () {\n                    var t = this.getBoundingBox();\n                    this.eachNode(function (n) {\n                      n.y = n.y - 2 * (n.y - t.top) - n.height;\n                    }),\n                      this.translate(0, t.height);\n                  },\n                }),\n                  (t.exports = function (t, n, r) {\n                    void 0 === n && (n = {});\n                    var o,\n                      a = new u(t, (n = e.assign({}, i, n))),\n                      c = [a];\n                    if (!r && !t.collapsed)\n                      for (; (o = c.shift()); )\n                        if (!o.data.collapsed) {\n                          var f = n.getChildren(o.data),\n                            s = f ? f.length : 0;\n                          if (((o.children = new Array(s)), f && s))\n                            for (var l = 0; l < s; l++) {\n                              var d = new u(f[l], n);\n                              (o.children[l] = d),\n                                c.push(d),\n                                (d.parent = o),\n                                (d.depth = o.depth + 1);\n                            }\n                        }\n                    return a;\n                  });\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(20);\n                n.a = function (t, n) {\n                  var r = Object(i.a)(n),\n                    u = r.length;\n                  if (Object(e.a)(t)) return !u;\n                  for (var o = 0; o < u; o += 1) {\n                    var a = r[o];\n                    if (n[a] !== t[a] || !(a in t)) return !1;\n                  }\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(3),\n                  u = Object.keys\n                    ? function (t) {\n                        return Object.keys(t);\n                      }\n                    : function (t) {\n                        var n = [];\n                        return (\n                          Object(e.a)(t, function (r, e) {\n                            (Object(i.a)(t) && \"prototype\" === e) || n.push(e);\n                          }),\n                          n\n                        );\n                      };\n                n.a = u;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1),\n                  i = Array.prototype.splice;\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t)) return [];\n                  for (var r = t ? n.length : 0, u = r - 1; r--; ) {\n                    var o = void 0,\n                      a = n[r];\n                    (r !== u && a === o) || ((o = a), i.call(t, a, 1));\n                  }\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(12),\n                  i = r(2);\n                n.a = function (t) {\n                  var n = [];\n                  return (\n                    Object(i.a)(t, function (t) {\n                      Object(e.a)(n, t) || n.push(t);\n                    }),\n                    n\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(3),\n                  u = r(24);\n                n.a = function (t, n) {\n                  if (!n) return { 0: t };\n                  if (!Object(i.a)(n)) {\n                    var r = Object(e.a)(n)\n                      ? n\n                      : n.replace(/\\s+/g, \"\").split(\"*\");\n                    n = function (t) {\n                      for (var n = \"_\", e = 0, i = r.length; e < i; e++)\n                        n += t[r[e]] && t[r[e]].toString();\n                      return n;\n                    };\n                  }\n                  return Object(u.a)(t, n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  u = r(3),\n                  o = Object.prototype.hasOwnProperty;\n                n.a = function (t, n) {\n                  if (!n || !Object(i.a)(t)) return {};\n                  var r,\n                    a = {},\n                    c = Object(u.a)(n)\n                      ? n\n                      : function (t) {\n                          return t[n];\n                        };\n                  return (\n                    Object(e.a)(t, function (t) {\n                      (r = c(t)), o.call(a, r) ? a[r].push(t) : (a[r] = [t]);\n                    }),\n                    a\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t.hasOwnProperty(n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(3),\n                  u = Object.values\n                    ? function (t) {\n                        return Object.values(t);\n                      }\n                    : function (t) {\n                        var n = [];\n                        return (\n                          Object(e.a)(t, function (r, e) {\n                            (Object(i.a)(t) && \"prototype\" === e) || n.push(r);\n                          }),\n                          n\n                        );\n                      };\n                n.a = u;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {}.toString;\n                n.a = function (t) {\n                  return e\n                    .call(t)\n                    .replace(/^\\[object /, \"\")\n                    .replace(/]$/, \"\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Object.prototype;\n                n.a = function (t) {\n                  var n = t && t.constructor;\n                  return t === ((\"function\" == typeof n && n.prototype) || e);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(15),\n                  i = r(1),\n                  u = r(8);\n                n.a = function t(n, r) {\n                  if (n === r) return !0;\n                  if (!n || !r) return !1;\n                  if (Object(u.a)(n) || Object(u.a)(r)) return !1;\n                  if (Object(i.a)(n) || Object(i.a)(r)) {\n                    if (n.length !== r.length) return !1;\n                    for (\n                      var o = !0, a = 0;\n                      a < n.length && (o = t(n[a], r[a]));\n                      a++\n                    );\n                    return o;\n                  }\n                  if (Object(e.a)(n) || Object(e.a)(r)) {\n                    var c = Object.keys(n),\n                      f = Object.keys(r);\n                    if (c.length !== f.length) return !1;\n                    for (\n                      o = !0, a = 0;\n                      a < c.length && (o = t(n[c[a]], r[c[a]]));\n                      a++\n                    );\n                    return o;\n                  }\n                  return !1;\n                };\n              },\n              function (t, n, r) {\n                var e = r(18);\n                t.exports = function (t, n) {\n                  for (\n                    var r = e(t.data, n, !0),\n                      i = e(t.data, n, !0),\n                      u = t.children.length,\n                      o = Math.round(u / 2),\n                      a =\n                        n.getSide ||\n                        function (t, n) {\n                          return n < o ? \"right\" : \"left\";\n                        },\n                      c = 0;\n                    c < u;\n                    c++\n                  ) {\n                    var f = t.children[c];\n                    \"right\" === a(f, c)\n                      ? i.children.push(f)\n                      : r.children.push(f);\n                  }\n                  return (\n                    r.eachNode(function (t) {\n                      t.isRoot() || (t.side = \"left\");\n                    }),\n                    i.eachNode(function (t) {\n                      t.isRoot() || (t.side = \"right\");\n                    }),\n                    { left: r, right: i }\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = {\n                  compactBox: r(32),\n                  dendrogram: r(114),\n                  indented: r(116),\n                  mindmap: r(118),\n                };\n                t.exports = e;\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(113),\n                  u = r(17),\n                  o = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return u(this.rootNode, this.options, i);\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = o.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                Object.defineProperty(n, \"__esModule\", { value: !0 });\n                var e = r(12);\n                r.d(n, \"contains\", function () {\n                  return e.a;\n                }),\n                  r.d(n, \"includes\", function () {\n                    return e.a;\n                  });\n                var i = r(34);\n                r.d(n, \"difference\", function () {\n                  return i.a;\n                });\n                var u = r(35);\n                r.d(n, \"find\", function () {\n                  return u.a;\n                });\n                var o = r(36);\n                r.d(n, \"findIndex\", function () {\n                  return o.a;\n                });\n                var a = r(37);\n                r.d(n, \"firstValue\", function () {\n                  return a.a;\n                });\n                var c = r(38);\n                r.d(n, \"flatten\", function () {\n                  return c.a;\n                });\n                var f = r(39);\n                r.d(n, \"flattenDeep\", function () {\n                  return f.a;\n                });\n                var s = r(40);\n                r.d(n, \"getRange\", function () {\n                  return s.a;\n                });\n                var l = r(41);\n                r.d(n, \"pull\", function () {\n                  return l.a;\n                });\n                var d = r(21);\n                r.d(n, \"pullAt\", function () {\n                  return d.a;\n                });\n                var h = r(42);\n                r.d(n, \"reduce\", function () {\n                  return h.a;\n                });\n                var p = r(43);\n                r.d(n, \"remove\", function () {\n                  return p.a;\n                });\n                var v = r(44);\n                r.d(n, \"sortBy\", function () {\n                  return v.a;\n                });\n                var y = r(45);\n                r.d(n, \"union\", function () {\n                  return y.a;\n                });\n                var g = r(22);\n                r.d(n, \"uniq\", function () {\n                  return g.a;\n                });\n                var b = r(46);\n                r.d(n, \"valuesOfKey\", function () {\n                  return b.a;\n                });\n                var m = r(47);\n                r.d(n, \"head\", function () {\n                  return m.a;\n                });\n                var O = r(48);\n                r.d(n, \"last\", function () {\n                  return O.a;\n                });\n                var j = r(49);\n                r.d(n, \"startsWith\", function () {\n                  return j.a;\n                });\n                var x = r(50);\n                r.d(n, \"endsWith\", function () {\n                  return x.a;\n                });\n                var w = r(14);\n                r.d(n, \"filter\", function () {\n                  return w.a;\n                });\n                var A = r(51);\n                r.d(n, \"every\", function () {\n                  return A.a;\n                });\n                var S = r(52);\n                r.d(n, \"some\", function () {\n                  return S.a;\n                });\n                var P = r(53);\n                r.d(n, \"group\", function () {\n                  return P.a;\n                });\n                var E = r(24);\n                r.d(n, \"groupBy\", function () {\n                  return E.a;\n                });\n                var _ = r(23);\n                r.d(n, \"groupToMap\", function () {\n                  return _.a;\n                });\n                var C = r(54);\n                r.d(n, \"getWrapBehavior\", function () {\n                  return C.a;\n                });\n                var M = r(55);\n                r.d(n, \"wrapBehavior\", function () {\n                  return M.a;\n                });\n                var T = r(56);\n                r.d(n, \"number2color\", function () {\n                  return T.a;\n                });\n                var B = r(57);\n                r.d(n, \"parseRadius\", function () {\n                  return B.a;\n                });\n                var N = r(58);\n                r.d(n, \"clamp\", function () {\n                  return N.a;\n                });\n                var k = r(59);\n                r.d(n, \"fixedBase\", function () {\n                  return k.a;\n                });\n                var I = r(60);\n                r.d(n, \"isDecimal\", function () {\n                  return I.a;\n                });\n                var L = r(61);\n                r.d(n, \"isEven\", function () {\n                  return L.a;\n                });\n                var F = r(62);\n                r.d(n, \"isInteger\", function () {\n                  return F.a;\n                });\n                var D = r(63);\n                r.d(n, \"isNegative\", function () {\n                  return D.a;\n                });\n                var H = r(64);\n                r.d(n, \"isNumberEqual\", function () {\n                  return H.a;\n                });\n                var R = r(65);\n                r.d(n, \"isOdd\", function () {\n                  return R.a;\n                });\n                var z = r(66);\n                r.d(n, \"isPositive\", function () {\n                  return z.a;\n                });\n                var V = r(67);\n                r.d(n, \"maxBy\", function () {\n                  return V.a;\n                });\n                var q = r(68);\n                r.d(n, \"minBy\", function () {\n                  return q.a;\n                });\n                var U = r(69);\n                r.d(n, \"mod\", function () {\n                  return U.a;\n                });\n                var W = r(70);\n                r.d(n, \"toDegree\", function () {\n                  return W.a;\n                });\n                var G = r(71);\n                r.d(n, \"toInteger\", function () {\n                  return G.a;\n                });\n                var Y = r(72);\n                r.d(n, \"toRadian\", function () {\n                  return Y.a;\n                });\n                var K = r(73);\n                r.d(n, \"forIn\", function () {\n                  return K.a;\n                });\n                var X = r(25);\n                r.d(n, \"has\", function () {\n                  return X.a;\n                });\n                var $ = r(74);\n                r.d(n, \"hasKey\", function () {\n                  return $.a;\n                });\n                var J = r(75);\n                r.d(n, \"hasValue\", function () {\n                  return J.a;\n                });\n                var Q = r(20);\n                r.d(n, \"keys\", function () {\n                  return Q.a;\n                });\n                var Z = r(19);\n                r.d(n, \"isMatch\", function () {\n                  return Z.a;\n                });\n                var tt = r(26);\n                r.d(n, \"values\", function () {\n                  return tt.a;\n                });\n                var nt = r(76);\n                r.d(n, \"lowerCase\", function () {\n                  return nt.a;\n                });\n                var rt = r(77);\n                r.d(n, \"lowerFirst\", function () {\n                  return rt.a;\n                });\n                var et = r(78);\n                r.d(n, \"substitute\", function () {\n                  return et.a;\n                });\n                var it = r(79);\n                r.d(n, \"upperCase\", function () {\n                  return it.a;\n                });\n                var ut = r(80);\n                r.d(n, \"upperFirst\", function () {\n                  return ut.a;\n                });\n                var ot = r(27);\n                r.d(n, \"getType\", function () {\n                  return ot.a;\n                });\n                var at = r(81);\n                r.d(n, \"isArguments\", function () {\n                  return at.a;\n                });\n                var ct = r(0);\n                r.d(n, \"isArray\", function () {\n                  return ct.a;\n                });\n                var ft = r(1);\n                r.d(n, \"isArrayLike\", function () {\n                  return ft.a;\n                });\n                var st = r(82);\n                r.d(n, \"isBoolean\", function () {\n                  return st.a;\n                });\n                var lt = r(83);\n                r.d(n, \"isDate\", function () {\n                  return lt.a;\n                });\n                var dt = r(84);\n                r.d(n, \"isError\", function () {\n                  return dt.a;\n                });\n                var ht = r(3);\n                r.d(n, \"isFunction\", function () {\n                  return ht.a;\n                });\n                var pt = r(85);\n                r.d(n, \"isFinite\", function () {\n                  return pt.a;\n                });\n                var vt = r(6);\n                r.d(n, \"isNil\", function () {\n                  return vt.a;\n                });\n                var yt = r(86);\n                r.d(n, \"isNull\", function () {\n                  return yt.a;\n                });\n                var gt = r(5);\n                r.d(n, \"isNumber\", function () {\n                  return gt.a;\n                });\n                var bt = r(13);\n                r.d(n, \"isObject\", function () {\n                  return bt.a;\n                });\n                var mt = r(15);\n                r.d(n, \"isObjectLike\", function () {\n                  return mt.a;\n                });\n                var Ot = r(9);\n                r.d(n, \"isPlainObject\", function () {\n                  return Ot.a;\n                });\n                var jt = r(28);\n                r.d(n, \"isPrototype\", function () {\n                  return jt.a;\n                });\n                var xt = r(87);\n                r.d(n, \"isRegExp\", function () {\n                  return xt.a;\n                });\n                var wt = r(8);\n                r.d(n, \"isString\", function () {\n                  return wt.a;\n                });\n                var At = r(4);\n                r.d(n, \"isType\", function () {\n                  return At.a;\n                });\n                var St = r(88);\n                r.d(n, \"isUndefined\", function () {\n                  return St.a;\n                });\n                var Pt = r(89);\n                r.d(n, \"isElement\", function () {\n                  return Pt.a;\n                });\n                var Et = r(90);\n                r.d(n, \"requestAnimationFrame\", function () {\n                  return Et.a;\n                });\n                var _t = r(91);\n                r.d(n, \"clearAnimationFrame\", function () {\n                  return _t.a;\n                });\n                var Ct = r(92);\n                r.d(n, \"augment\", function () {\n                  return Ct.a;\n                });\n                var Mt = r(93);\n                r.d(n, \"clone\", function () {\n                  return Mt.a;\n                });\n                var Tt = r(94);\n                r.d(n, \"debounce\", function () {\n                  return Tt.a;\n                });\n                var Bt = r(95);\n                r.d(n, \"memoize\", function () {\n                  return Bt.a;\n                });\n                var Nt = r(96);\n                r.d(n, \"deepMix\", function () {\n                  return Nt.a;\n                });\n                var kt = r(2);\n                r.d(n, \"each\", function () {\n                  return kt.a;\n                });\n                var It = r(97);\n                r.d(n, \"extend\", function () {\n                  return It.a;\n                });\n                var Lt = r(98);\n                r.d(n, \"indexOf\", function () {\n                  return Lt.a;\n                });\n                var Ft = r(99);\n                r.d(n, \"isEmpty\", function () {\n                  return Ft.a;\n                });\n                var Dt = r(29);\n                r.d(n, \"isEqual\", function () {\n                  return Dt.a;\n                });\n                var Ht = r(100);\n                r.d(n, \"isEqualWith\", function () {\n                  return Ht.a;\n                });\n                var Rt = r(101);\n                r.d(n, \"map\", function () {\n                  return Rt.a;\n                });\n                var zt = r(102);\n                r.d(n, \"mapValues\", function () {\n                  return zt.a;\n                });\n                var Vt = r(16);\n                r.d(n, \"mix\", function () {\n                  return Vt.a;\n                }),\n                  r.d(n, \"assign\", function () {\n                    return Vt.a;\n                  });\n                var qt = r(103);\n                r.d(n, \"get\", function () {\n                  return qt.a;\n                });\n                var Ut = r(104);\n                r.d(n, \"set\", function () {\n                  return Ut.a;\n                });\n                var Wt = r(105);\n                r.d(n, \"pick\", function () {\n                  return Wt.a;\n                });\n                var Gt = r(106);\n                r.d(n, \"throttle\", function () {\n                  return Gt.a;\n                });\n                var Yt = r(107);\n                r.d(n, \"toArray\", function () {\n                  return Yt.a;\n                });\n                var Kt = r(10);\n                r.d(n, \"toString\", function () {\n                  return Kt.a;\n                });\n                var Xt = r(108);\n                r.d(n, \"uniqueId\", function () {\n                  return Xt.a;\n                });\n                var $t = r(109);\n                r.d(n, \"noop\", function () {\n                  return $t.a;\n                });\n                var Jt = r(110);\n                r.d(n, \"identity\", function () {\n                  return Jt.a;\n                });\n                var Qt = r(111);\n                r.d(n, \"size\", function () {\n                  return Qt.a;\n                });\n                var Zt = r(112);\n                r.d(n, \"Cache\", function () {\n                  return Zt.a;\n                });\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(14),\n                  i = r(12);\n                n.a = function (t, n) {\n                  return (\n                    void 0 === n && (n = []),\n                    Object(e.a)(t, function (t) {\n                      return !Object(i.a)(n, t);\n                    })\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3),\n                  i = r(19),\n                  u = r(0),\n                  o = r(9);\n                n.a = function (t, n) {\n                  if (!Object(u.a)(t)) return null;\n                  var r;\n                  if (\n                    (Object(e.a)(n) && (r = n),\n                    Object(o.a)(n) &&\n                      (r = function (t) {\n                        return Object(i.a)(t, n);\n                      }),\n                    r)\n                  )\n                    for (var a = 0; a < t.length; a += 1)\n                      if (r(t[a])) return t[a];\n                  return null;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  void 0 === r && (r = 0);\n                  for (var e = r; e < t.length; e++) if (n(t[e], e)) return e;\n                  return -1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(0);\n                n.a = function (t, n) {\n                  for (var r = null, u = 0; u < t.length; u++) {\n                    var o = t[u][n];\n                    if (!Object(e.a)(o)) {\n                      r = Object(i.a)(o) ? o[0] : o;\n                      break;\n                    }\n                  }\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function (t) {\n                  if (!Object(e.a)(t)) return [];\n                  for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n                  return n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function t(n, r) {\n                  if ((void 0 === r && (r = []), Object(e.a)(n)))\n                    for (var i = 0; i < n.length; i += 1) t(n[i], r);\n                  else r.push(n);\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(14);\n                n.a = function (t) {\n                  if (\n                    !(t = Object(i.a)(t, function (t) {\n                      return !isNaN(t);\n                    })).length\n                  )\n                    return { min: 0, max: 0 };\n                  if (Object(e.a)(t[0])) {\n                    for (var n = [], r = 0; r < t.length; r++)\n                      n = n.concat(t[r]);\n                    t = n;\n                  }\n                  var u = Math.max.apply(null, t);\n                  return { min: Math.min.apply(null, t), max: u };\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Array.prototype,\n                  i = e.splice,\n                  u = e.indexOf;\n                n.a = function (t) {\n                  for (var n = [], r = 1; r < arguments.length; r++)\n                    n[r - 1] = arguments[r];\n                  for (var e = 0; e < n.length; e++)\n                    for (var o = n[e], a = -1; (a = u.call(t, o)) > -1; )\n                      i.call(t, a, 1);\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  u = r(9);\n                n.a = function (t, n, r) {\n                  if (!Object(i.a)(t) && !Object(u.a)(t)) return t;\n                  var o = r;\n                  return (\n                    Object(e.a)(t, function (t, r) {\n                      o = n(o, t, r);\n                    }),\n                    o\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1),\n                  i = r(21);\n                n.a = function (t, n) {\n                  var r = [];\n                  if (!Object(e.a)(t)) return r;\n                  for (var u = -1, o = [], a = t.length; ++u < a; ) {\n                    var c = t[u];\n                    n(c, u, t) && (r.push(c), o.push(u));\n                  }\n                  return Object(i.a)(t, o), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8),\n                  u = r(3);\n                n.a = function (t, n) {\n                  var r;\n                  if (Object(u.a)(n))\n                    r = function (t, r) {\n                      return n(t) - n(r);\n                    };\n                  else {\n                    var o = [];\n                    Object(i.a)(n) ? o.push(n) : Object(e.a)(n) && (o = n),\n                      (r = function (t, n) {\n                        for (var r = 0; r < o.length; r += 1) {\n                          var e = o[r];\n                          if (t[e] > n[e]) return 1;\n                          if (t[e] < n[e]) return -1;\n                        }\n                        return 0;\n                      });\n                  }\n                  return t.sort(r), t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(22);\n                n.a = function () {\n                  for (var t = [], n = 0; n < arguments.length; n++)\n                    t[n] = arguments[n];\n                  return Object(e.a)([].concat.apply([], t));\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  u = r(6);\n                n.a = function (t, n) {\n                  var r = [],\n                    o = {};\n                  return (\n                    t.forEach(function (t) {\n                      var a = t[n];\n                      Object(u.a)(a) ||\n                        (Object(i.a)(a) || (a = [a]),\n                        Object(e.a)(a, function (t) {\n                          o[t] || (r.push(t), (o[t] = !0));\n                        }));\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return t[0];\n                };\n                var e = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return t[t.length - 1];\n                };\n                var e = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8);\n                n.a = function (t, n) {\n                  return !(!Object(e.a)(t) && !Object(i.a)(t)) && t[0] === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8);\n                n.a = function (t, n) {\n                  return (\n                    !(!Object(e.a)(t) && !Object(i.a)(t)) &&\n                    t[t.length - 1] === n\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  for (var r = 0; r < t.length; r++) if (!n(t[r], r)) return !1;\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  for (var r = 0; r < t.length; r++) if (n(t[r], r)) return !0;\n                  return !1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(23);\n                n.a = function (t, n) {\n                  if (!n) return [t];\n                  var r = Object(e.a)(t, n),\n                    i = [];\n                  for (var u in r) i.push(r[u]);\n                  return i;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t[\"_wrap_\" + n];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  if (t[\"_wrap_\" + n]) return t[\"_wrap_\" + n];\n                  var r = function (r) {\n                    t[n](r);\n                  };\n                  return (t[\"_wrap_\" + n] = r), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {};\n                n.a = function (t) {\n                  var n = e[t];\n                  if (!n) {\n                    for (var r = t.toString(16), i = r.length; i < 6; i++)\n                      r = \"0\" + r;\n                    (n = \"#\" + r), (e[t] = n);\n                  }\n                  return n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function (t) {\n                  var n = 0,\n                    r = 0,\n                    i = 0,\n                    u = 0;\n                  return (\n                    Object(e.a)(t)\n                      ? 1 === t.length\n                        ? (n = r = i = u = t[0])\n                        : 2 === t.length\n                        ? ((n = i = t[0]), (r = u = t[1]))\n                        : 3 === t.length\n                        ? ((n = t[0]), (r = u = t[1]), (i = t[2]))\n                        : ((n = t[0]), (r = t[1]), (i = t[2]), (u = t[3]))\n                      : (n = r = i = u = t),\n                    { r1: n, r2: r, r3: i, r4: u }\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  return t < n ? n : t > r ? r : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  var r = n.toString(),\n                    e = r.indexOf(\".\");\n                  if (-1 === e) return Math.round(t);\n                  var i = r.substr(e + 1).length;\n                  return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 1 != 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 2 == 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5),\n                  i = Number.isInteger\n                    ? Number.isInteger\n                    : function (t) {\n                        return Object(e.a)(t) && t % 1 == 0;\n                      };\n                n.a = i;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t < 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  return void 0 === r && (r = 1e-5), Math.abs(t - n) < r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 2 != 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t > 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  u = r(3);\n                n.a = function (t, n) {\n                  if (Object(i.a)(t)) {\n                    var r,\n                      o,\n                      a = t[0];\n                    return (\n                      (r = Object(u.a)(n) ? n(t[0]) : t[0][n]),\n                      Object(e.a)(t, function (t) {\n                        (o = Object(u.a)(n) ? n(t) : t[n]) > r &&\n                          ((a = t), (r = o));\n                      }),\n                      a\n                    );\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  u = r(3);\n                n.a = function (t, n) {\n                  if (Object(i.a)(t)) {\n                    var r,\n                      o,\n                      a = t[0];\n                    return (\n                      (r = Object(u.a)(n) ? n(t[0]) : t[0][n]),\n                      Object(e.a)(t, function (t) {\n                        (o = Object(u.a)(n) ? n(t) : t[n]) < r &&\n                          ((a = t), (r = o));\n                      }),\n                      a\n                    );\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return ((t % n) + n) % n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = 180 / Math.PI;\n                n.a = function (t) {\n                  return e * t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = parseInt;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Math.PI / 180;\n                n.a = function (t) {\n                  return e * t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2);\n                n.a = e.a;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(25);\n                n.a = e.a;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(12),\n                  i = r(26);\n                n.a = function (t, n) {\n                  return Object(e.a)(Object(i.a)(t), n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  return Object(e.a)(t).toLowerCase();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  var n = Object(e.a)(t);\n                  return n.charAt(0).toLowerCase() + n.substring(1);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t && n\n                    ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, r) {\n                        return \"\\\\\" === t.charAt(0)\n                          ? t.slice(1)\n                          : void 0 === n[r]\n                          ? \"\"\n                          : n[r];\n                      })\n                    : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  return Object(e.a)(t).toUpperCase();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  var n = Object(e.a)(t);\n                  return n.charAt(0).toUpperCase() + n.substring(1);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Arguments\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Boolean\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Date\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Error\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && isFinite(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return null === t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"RegExp\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return void 0 === t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return t instanceof Element || t instanceof HTMLDocument;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return (\n                    window.requestAnimationFrame ||\n                    window.webkitRequestAnimationFrame ||\n                    window.mozRequestAnimationFrame ||\n                    window.msRequestAnimationFrame ||\n                    function (t) {\n                      return setTimeout(t, 16);\n                    }\n                  )(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  (\n                    window.cancelAnimationFrame ||\n                    window.webkitCancelAnimationFrame ||\n                    window.mozCancelAnimationFrame ||\n                    window.msCancelAnimationFrame ||\n                    clearTimeout\n                  )(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(16),\n                  i = r(3);\n                n.a = function () {\n                  for (var t = [], n = 0; n < arguments.length; n++)\n                    t[n] = arguments[n];\n                  for (var r = t[0], u = 1; u < t.length; u++) {\n                    var o = t[u];\n                    Object(i.a)(o) && (o = o.prototype),\n                      Object(e.a)(r.prototype, o);\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function t(n) {\n                  if (\"object\" !== o(n) || null === n) return n;\n                  var r;\n                  if (Object(e.a)(n)) {\n                    r = [];\n                    for (var i = 0, u = n.length; i < u; i++)\n                      \"object\" === o(n[i]) && null != n[i]\n                        ? (r[i] = t(n[i]))\n                        : (r[i] = n[i]);\n                  } else\n                    for (var a in ((r = {}), n))\n                      \"object\" === o(n[a]) && null != n[a]\n                        ? (r[a] = t(n[a]))\n                        : (r[a] = n[a]);\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  var e;\n                  return function () {\n                    var i = this,\n                      u = arguments,\n                      o = function () {\n                        (e = null), r || t.apply(i, u);\n                      },\n                      a = r && !e;\n                    clearTimeout(e), (e = setTimeout(o, n)), a && t.apply(i, u);\n                  };\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3);\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t))\n                    throw new TypeError(\"Expected a function\");\n                  var r = function r() {\n                    for (var e = [], i = 0; i < arguments.length; i++)\n                      e[i] = arguments[i];\n                    var u = n ? n.apply(this, e) : e[0],\n                      o = r.cache;\n                    if (o.has(u)) return o.get(u);\n                    var a = t.apply(this, e);\n                    return o.set(u, a), a;\n                  };\n                  return (r.cache = new Map()), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(9);\n                function u(t, n, r, o) {\n                  for (var a in ((r = r || 0), (o = o || 5), n))\n                    if (n.hasOwnProperty(a)) {\n                      var c = n[a];\n                      null !== c && Object(i.a)(c)\n                        ? (Object(i.a)(t[a]) || (t[a] = {}),\n                          r < o ? u(t[a], c, r + 1, o) : (t[a] = n[a]))\n                        : Object(e.a)(c)\n                        ? ((t[a] = []), (t[a] = t[a].concat(c)))\n                        : void 0 !== c && (t[a] = c);\n                    }\n                }\n                n.a = function (t) {\n                  for (var n = [], r = 1; r < arguments.length; r++)\n                    n[r - 1] = arguments[r];\n                  for (var e = 0; e < n.length; e += 1) u(t, n[e]);\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(16),\n                  i = r(3);\n                n.a = function (t, n, r, u) {\n                  Object(i.a)(n) || ((r = n), (n = t), (t = function () {}));\n                  var o = Object.create\n                      ? function (t, n) {\n                          return Object.create(t, {\n                            constructor: { value: n },\n                          });\n                        }\n                      : function (t, n) {\n                          function r() {}\n                          r.prototype = t;\n                          var e = new r();\n                          return (e.constructor = n), e;\n                        },\n                    a = o(n.prototype, t);\n                  return (\n                    (t.prototype = Object(e.a)(a, t.prototype)),\n                    (t.superclass = o(n.prototype, n)),\n                    Object(e.a)(a, r),\n                    Object(e.a)(t, u),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t)) return -1;\n                  var r = Array.prototype.indexOf;\n                  if (r) return r.call(t, n);\n                  for (var i = -1, u = 0; u < t.length; u++)\n                    if (t[u] === n) {\n                      i = u;\n                      break;\n                    }\n                  return i;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(1),\n                  u = r(27),\n                  o = r(28),\n                  a = Object.prototype.hasOwnProperty;\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return !0;\n                  if (Object(i.a)(t)) return !t.length;\n                  var n = Object(u.a)(t);\n                  if (\"Map\" === n || \"Set\" === n) return !t.size;\n                  if (Object(o.a)(t)) return !Object.keys(t).length;\n                  for (var r in t) if (a.call(t, r)) return !1;\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3),\n                  i = r(29);\n                n.a = function (t, n, r) {\n                  return Object(e.a)(r) ? !!r(t, n) : Object(i.a)(t, n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(1);\n                n.a = function (t, n) {\n                  if (!Object(i.a)(t)) return t;\n                  var r = [];\n                  return (\n                    Object(e.a)(t, function (t, e) {\n                      r.push(n(t, e));\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(13),\n                  u = function (t) {\n                    return t;\n                  };\n                n.a = function (t, n) {\n                  void 0 === n && (n = u);\n                  var r = {};\n                  return (\n                    Object(i.a)(t) &&\n                      !Object(e.a)(t) &&\n                      Object.keys(t).forEach(function (e) {\n                        r[e] = n(t[e], e);\n                      }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(8);\n                n.a = function (t, n, r) {\n                  for (\n                    var i = 0, u = Object(e.a)(n) ? n.split(\".\") : n;\n                    t && i < u.length;\n\n                  )\n                    t = t[u[i++]];\n                  return void 0 === t || i < u.length ? r : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(13),\n                  i = r(8),\n                  u = r(5);\n                n.a = function (t, n, r) {\n                  var o = t,\n                    a = Object(i.a)(n) ? n.split(\".\") : n;\n                  return (\n                    a.forEach(function (t, n) {\n                      n < a.length - 1\n                        ? (Object(e.a)(o[t]) ||\n                            (o[t] = Object(u.a)(a[n + 1]) ? [] : {}),\n                          (o = o[t]))\n                        : (o[t] = r);\n                    }),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(9),\n                  u = Object.prototype.hasOwnProperty;\n                n.a = function (t, n) {\n                  if (null === t || !Object(i.a)(t)) return {};\n                  var r = {};\n                  return (\n                    Object(e.a)(n, function (n) {\n                      u.call(t, n) && (r[n] = t[n]);\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  var e,\n                    i,\n                    u,\n                    o,\n                    a = 0;\n                  r || (r = {});\n                  var c = function () {\n                      (a = !1 === r.leading ? 0 : Date.now()),\n                        (e = null),\n                        (o = t.apply(i, u)),\n                        e || (i = u = null);\n                    },\n                    f = function () {\n                      var f = Date.now();\n                      a || !1 !== r.leading || (a = f);\n                      var s = n - (f - a);\n                      return (\n                        (i = this),\n                        (u = arguments),\n                        s <= 0 || s > n\n                          ? (e && (clearTimeout(e), (e = null)),\n                            (a = f),\n                            (o = t.apply(i, u)),\n                            e || (i = u = null))\n                          : e || !1 === r.trailing || (e = setTimeout(c, s)),\n                        o\n                      );\n                    };\n                  return (\n                    (f.cancel = function () {\n                      clearTimeout(e), (a = 0), (e = i = u = null);\n                    }),\n                    f\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t) {\n                  return Object(e.a)(t) ? Array.prototype.slice.call(t) : [];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {};\n                n.a = function (t) {\n                  return e[(t = t || \"g\")] ? (e[t] += 1) : (e[t] = 1), t + e[t];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function () {};\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return Object(e.a)(t)\n                    ? 0\n                    : Object(i.a)(t)\n                    ? t.length\n                    : Object.keys(t).length;\n                };\n                var e = r(6),\n                  i = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = (function () {\n                  function t() {\n                    this.map = {};\n                  }\n                  return (\n                    (t.prototype.has = function (t) {\n                      return void 0 !== this.map[t];\n                    }),\n                    (t.prototype.get = function (t, n) {\n                      var r = this.map[t];\n                      return void 0 === r ? n : r;\n                    }),\n                    (t.prototype.set = function (t, n) {\n                      this.map[t] = n;\n                    }),\n                    (t.prototype.clear = function () {\n                      this.map = {};\n                    }),\n                    (t.prototype.delete = function (t) {\n                      delete this.map[t];\n                    }),\n                    (t.prototype.size = function () {\n                      return Object.keys(this.map).length;\n                    }),\n                    t\n                  );\n                })();\n                n.a = e;\n              },\n              function (t, n) {\n                function r(t, n, r, e) {\n                  void 0 === e && (e = []);\n                  var i = this;\n                  (i.w = t || 0),\n                    (i.h = n || 0),\n                    (i.y = r || 0),\n                    (i.x = 0),\n                    (i.c = e || []),\n                    (i.cs = e.length),\n                    (i.prelim = 0),\n                    (i.mod = 0),\n                    (i.shift = 0),\n                    (i.change = 0),\n                    (i.tl = null),\n                    (i.tr = null),\n                    (i.el = null),\n                    (i.er = null),\n                    (i.msel = 0),\n                    (i.mser = 0);\n                }\n                function e(t, n) {\n                  var r = (function t(n, r) {\n                    var e = r ? n.y : n.x;\n                    return (\n                      n.children.forEach(function (n) {\n                        e = Math.min(t(n, r), e);\n                      }),\n                      e\n                    );\n                  })(t, n);\n                  !(function t(n, r, e) {\n                    e ? (n.y += r) : (n.x += r),\n                      n.children.forEach(function (n) {\n                        t(n, r, e);\n                      });\n                  })(t, -r, n);\n                }\n                (r.fromNode = function (t, n) {\n                  if (!t) return null;\n                  var e = [];\n                  return (\n                    t.children.forEach(function (t) {\n                      e.push(r.fromNode(t, n));\n                    }),\n                    n\n                      ? new r(t.height, t.width, t.x, e)\n                      : new r(t.width, t.height, t.y, e)\n                  );\n                }),\n                  (t.exports = function (t, n) {\n                    void 0 === n && (n = {});\n                    var i = n.isHorizontal;\n                    function u(t) {\n                      0 === t.cs\n                        ? ((t.el = t), (t.er = t), (t.msel = t.mser = 0))\n                        : ((t.el = t.c[0].el),\n                          (t.msel = t.c[0].msel),\n                          (t.er = t.c[t.cs - 1].er),\n                          (t.mser = t.c[t.cs - 1].mser));\n                    }\n                    function o(t, n, r) {\n                      for (\n                        var e = t.c[n - 1], i = e.mod, u = t.c[n], o = u.mod;\n                        null !== e && null !== u;\n\n                      ) {\n                        s(e) > r.low && (r = r.nxt);\n                        var l = i + e.prelim + e.w - (o + u.prelim);\n                        l > 0 && ((o += l), a(t, n, r.index, l));\n                        var d = s(e),\n                          h = s(u);\n                        d <= h && null !== (e = f(e)) && (i += e.mod),\n                          d >= h && null !== (u = c(u)) && (o += u.mod);\n                      }\n                      !e && u\n                        ? (function (t, n, r, e) {\n                            var i = t.c[0].el;\n                            i.tl = r;\n                            var u = e - r.mod - t.c[0].msel;\n                            (i.mod += u),\n                              (i.prelim -= u),\n                              (t.c[0].el = t.c[n].el),\n                              (t.c[0].msel = t.c[n].msel);\n                          })(t, n, u, o)\n                        : e &&\n                          !u &&\n                          (function (t, n, r, e) {\n                            var i = t.c[n].er;\n                            i.tr = r;\n                            var u = e - r.mod - t.c[n].mser;\n                            (i.mod += u),\n                              (i.prelim -= u),\n                              (t.c[n].er = t.c[n - 1].er),\n                              (t.c[n].mser = t.c[n - 1].mser);\n                          })(t, n, e, i);\n                    }\n                    function a(t, n, r, e) {\n                      (t.c[n].mod += e),\n                        (t.c[n].msel += e),\n                        (t.c[n].mser += e),\n                        (function (t, n, r, e) {\n                          if (r !== n - 1) {\n                            var i = n - r;\n                            (t.c[r + 1].shift += e / i),\n                              (t.c[n].shift -= e / i),\n                              (t.c[n].change -= e - e / i);\n                          }\n                        })(t, n, r, e);\n                    }\n                    function c(t) {\n                      return 0 === t.cs ? t.tl : t.c[0];\n                    }\n                    function f(t) {\n                      return 0 === t.cs ? t.tr : t.c[t.cs - 1];\n                    }\n                    function s(t) {\n                      return t.y + t.h;\n                    }\n                    function l(t, n, r) {\n                      for (; null !== r && t >= r.low; ) r = r.nxt;\n                      return { low: t, index: n, nxt: r };\n                    }\n                    !(function t(n, r, e) {\n                      void 0 === e && (e = 0),\n                        r\n                          ? ((n.x = e), (e += n.width))\n                          : ((n.y = e), (e += n.height)),\n                        n.children.forEach(function (n) {\n                          t(n, r, e);\n                        });\n                    })(t, i);\n                    var d = r.fromNode(t, i);\n                    return (\n                      (function t(n) {\n                        if (0 !== n.cs) {\n                          t(n.c[0]);\n                          for (\n                            var r = l(s(n.c[0].el), 0, null), e = 1;\n                            e < n.cs;\n                            ++e\n                          ) {\n                            t(n.c[e]);\n                            var i = s(n.c[e].er);\n                            o(n, e, r), (r = l(i, e, r));\n                          }\n                          !(function (t) {\n                            t.prelim =\n                              (t.c[0].prelim +\n                                t.c[0].mod +\n                                t.c[t.cs - 1].mod +\n                                t.c[t.cs - 1].prelim +\n                                t.c[t.cs - 1].w) /\n                                2 -\n                              t.w / 2;\n                          })(n),\n                            u(n);\n                        } else u(n);\n                      })(d),\n                      (function t(n, r) {\n                        (r += n.mod),\n                          (n.x = n.prelim + r),\n                          (function (t) {\n                            for (var n = 0, r = 0, e = 0; e < t.cs; e++)\n                              (n += t.c[e].shift),\n                                (r += n + t.c[e].change),\n                                (t.c[e].mod += r);\n                          })(n);\n                        for (var e = 0; e < n.cs; e++) t(n.c[e], r);\n                      })(d, 0),\n                      (function t(n, r, e) {\n                        e ? (r.y = n.x) : (r.x = n.x),\n                          n.c.forEach(function (n, i) {\n                            t(n, r.children[i], e);\n                          });\n                      })(d, t, i),\n                      e(t, i),\n                      t\n                    );\n                  });\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(115),\n                  u = r(17),\n                  o = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return (\n                          (this.rootNode.width = 0),\n                          u(this.rootNode, this.options, i)\n                        );\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = o.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                var e = r(7);\n                function i(t, n) {\n                  void 0 === t && (t = 0), void 0 === n && (n = []);\n                  var r = this;\n                  (r.x = r.y = 0),\n                    (r.leftChild = r.rightChild = null),\n                    (r.height = 0),\n                    (r.children = n);\n                }\n                var u = {\n                  isHorizontal: !0,\n                  nodeSep: 20,\n                  nodeSize: 20,\n                  rankSep: 200,\n                  subTreeSep: 10,\n                };\n                t.exports = function (t, n) {\n                  void 0 === n && (n = {}), (n = e.assign({}, u, n));\n                  var r,\n                    o = 0,\n                    a = (function t(n) {\n                      if (!n) return null;\n                      (n.width = 0), n.depth && n.depth > o && (o = n.depth);\n                      var r = n.children,\n                        e = r.length,\n                        u = new i(n.height, []);\n                      return (\n                        r.forEach(function (n, r) {\n                          var i = t(n);\n                          u.children.push(i),\n                            0 === r && (u.leftChild = i),\n                            r === e - 1 && (u.rightChild = i);\n                        }),\n                        (u.originNode = n),\n                        (u.isLeaf = n.isLeaf()),\n                        u\n                      );\n                    })(t);\n                  return (\n                    (function t(n) {\n                      if (n.isLeaf || 0 === n.children.length)\n                        n.drawingDepth = o;\n                      else {\n                        var r = n.children.map(function (n) {\n                            return t(n);\n                          }),\n                          e = Math.min.apply(null, r);\n                        n.drawingDepth = e - 1;\n                      }\n                      return n.drawingDepth;\n                    })(a),\n                    (function t(e) {\n                      (e.x = e.drawingDepth * n.rankSep),\n                        e.isLeaf\n                          ? ((e.y = 0),\n                            r &&\n                              ((e.y = r.y + r.height + n.nodeSep),\n                              e.originNode.parent !== r.originNode.parent &&\n                                (e.y += n.subTreeSep)),\n                            (r = e))\n                          : (e.children.forEach(function (n) {\n                              t(n);\n                            }),\n                            (e.y = (e.leftChild.y + e.rightChild.y) / 2));\n                    })(a),\n                    (function t(n, r, e) {\n                      e\n                        ? ((r.x = n.x), (r.y = n.y))\n                        : ((r.x = n.y), (r.y = n.x)),\n                        n.children.forEach(function (n, i) {\n                          t(n, r.children[i], e);\n                        });\n                    })(a, t, n.isHorizontal),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(117),\n                  u = r(30),\n                  o = r(7),\n                  a = [\"LR\", \"RL\", \"H\"],\n                  c = a[0],\n                  f = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        var t = this.options,\n                          n = this.rootNode;\n                        t.isHorizontal = !0;\n                        var r = t.indent,\n                          e = void 0 === r ? 20 : r,\n                          o = t.dropCap,\n                          f = void 0 === o || o,\n                          s = t.direction || c;\n                        if (s && -1 === a.indexOf(s))\n                          throw new TypeError(\"Invalid direction: \" + s);\n                        if (s === a[0]) i(n, e, f);\n                        else if (s === a[1]) i(n, e, f), n.right2left();\n                        else if (s === a[2]) {\n                          var l = u(n, t),\n                            d = l.left,\n                            h = l.right;\n                          i(d, e, f), d.right2left(), i(h, e, f);\n                          var p = d.getBoundingBox();\n                          h.translate(p.width, 0), (n.x = h.x - n.width / 2);\n                        }\n                        return n;\n                      }),\n                      e\n                    );\n                  })(e),\n                  s = {};\n                t.exports = function (t, n) {\n                  return (n = o.assign({}, s, n)), new f(t, n).execute();\n                };\n              },\n              function (t, n) {\n                t.exports = function (t, n, r) {\n                  var e = null;\n                  t.eachNode(function (t) {\n                    !(function (t, n, r, e) {\n                      var i = \"function\" == typeof r ? r(t) : r * t.depth;\n                      if (!e)\n                        try {\n                          if (t.id === t.parent.children[0].id)\n                            return (t.x += i), void (t.y = n ? n.y : 0);\n                        } catch (t) {}\n                      (t.x += i), (t.y = n ? n.y + n.height : 0);\n                    })(t, e, n, r),\n                      (e = t);\n                  });\n                };\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(119),\n                  u = r(17),\n                  o = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return u(this.rootNode, this.options, i);\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = o.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                var e = r(7),\n                  i = {\n                    getSubTreeSep: function () {\n                      return 0;\n                    },\n                  };\n                t.exports = function (t, n) {\n                  void 0 === n && (n = {}),\n                    (n = e.assign({}, i, n)),\n                    (t.parent = { x: 0, width: 0, height: 0, y: 0 }),\n                    t.BFTraverse(function (t) {\n                      t.x = t.parent.x + t.parent.width;\n                    }),\n                    (t.parent = null),\n                    (function t(n, r) {\n                      var e = 0;\n                      return (\n                        n.children.length\n                          ? n.children.forEach(function (n) {\n                              e += t(n, r);\n                            })\n                          : (e = n.height),\n                        (n._subTreeSep = r.getSubTreeSep(n.data)),\n                        (n.totalHeight =\n                          Math.max(n.height, e) + 2 * n._subTreeSep),\n                        n.totalHeight\n                      );\n                    })(t, n),\n                    (t.startY = 0),\n                    (t.y = t.totalHeight / 2 - t.height / 2),\n                    t.eachNode(function (t) {\n                      var n = t.children,\n                        r = n.length;\n                      if (r) {\n                        var e = n[0];\n                        if (((e.startY = t.startY + t._subTreeSep), 1 === r))\n                          e.y = t.y + t.height / 2 - e.height / 2;\n                        else {\n                          e.y = e.startY + e.totalHeight / 2 - e.height / 2;\n                          for (var i = 1; i < r; i++) {\n                            var u = n[i];\n                            (u.startY = n[i - 1].startY + n[i - 1].totalHeight),\n                              (u.y =\n                                u.startY + u.totalHeight / 2 - u.height / 2);\n                          }\n                        }\n                      }\n                    }),\n                    (function t(n) {\n                      var r = n.children,\n                        e = r.length;\n                      if (e) {\n                        r.forEach(function (n) {\n                          t(n);\n                        });\n                        var i = r[0],\n                          u = r[e - 1],\n                          o = u.y - i.y + u.height,\n                          a = 0;\n                        if (\n                          (r.forEach(function (t) {\n                            a += t.totalHeight;\n                          }),\n                          o > n.height)\n                        )\n                          n.y = i.y + o / 2 - n.height / 2;\n                        else if (1 !== r.length || n.height > a) {\n                          var c = n.y + (n.height - o) / 2 - i.y;\n                          r.forEach(function (t) {\n                            t.translate(0, c);\n                          });\n                        } else\n                          n.y =\n                            (i.y + i.height / 2 + u.y + u.height / 2) / 2 -\n                            n.height / 2;\n                      }\n                    })(t);\n                };\n              },\n            ]);\n          }),\n          \"object\" === o(n) && \"object\" === o(t)\n            ? (t.exports = u())\n            : ((e = []),\n              void 0 ===\n                (i = \"function\" == typeof (r = u) ? r.apply(n, e) : r) ||\n                (t.exports = i));\n      }).call(this, r(45)(t));\n    },\n  }).default;\n});\n//# sourceMappingURL=treeGraph.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/circularLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.CircularLayout = e())\n    : (t.CircularLayout = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function r(n) {\n      if (e[n]) return e[n].exports;\n      var o = (e[n] = { i: n, l: !1, exports: {} });\n      return t[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = e),\n      (r.d = function (t, e, n) {\n        r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, e) {\n        if ((1 & e && (t = r(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var n = Object.create(null);\n        if (\n          (r.r(n),\n          Object.defineProperty(n, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            r.d(\n              n,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return n;\n      }),\n      (r.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(e, \"a\", e), e;\n      }),\n      (r.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (r.p = \"\"),\n      r((r.s = 197))\n    );\n  })({\n    10: function (t, e, r) {\n      \"use strict\";\n      var n =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, r, n) {\n                void 0 === n && (n = r),\n                  Object.defineProperty(t, n, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[r];\n                    },\n                  });\n              }\n            : function (t, e, r, n) {\n                void 0 === n && (n = r), (t[n] = e[r]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var r in t)\n              \"default\" === r ||\n                Object.prototype.hasOwnProperty.call(e, r) ||\n                n(e, t, r);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(r(11), e),\n        o(r(12), e),\n        o(r(13), e),\n        o(r(14), e),\n        o(r(15), e),\n        o(r(16), e);\n    },\n    11: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var n,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((n = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = n(t));\n        });\n    },\n    12: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var r = parseFloat(t);\n        return e.isNaN(r) ? t : r;\n      };\n    },\n    14: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, r) {\n        for (var n = [], o = 0; o < t; o++) n[o] = 0;\n        return r\n          ? (r.forEach(function (t) {\n              t.source && (n[e[t.source]] += 1),\n                t.target && (n[e[t.target]] += 1);\n            }),\n            n)\n          : n;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], r = t.length, n = 0; n < r; n += 1) {\n          e[n] = [];\n          for (var o = 0; o < r; o += 1)\n            n === o\n              ? (e[n][o] = 0)\n              : 0 !== t[n][o] && t[n][o]\n              ? (e[n][o] = t[n][o])\n              : (e[n][o] = 1 / 0);\n        }\n        for (var i = 0; i < r; i += 1)\n          for (n = 0; n < r; n += 1)\n            for (o = 0; o < r; o += 1)\n              e[n][o] > e[n][i] + e[i][o] && (e[n][o] = e[n][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var r = t.nodes,\n          n = t.edges,\n          o = [],\n          i = {};\n        if (!r) throw new Error(\"invalid nodes data!\");\n        return (\n          r &&\n            r.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          n &&\n            n.forEach(function (t) {\n              var r = t.source,\n                n = t.target,\n                u = i[r],\n                s = i[n];\n              (o[u][s] = 1), e || (o[s][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var r = [];\n        return (\n          t.forEach(function (t) {\n            var n = [];\n            t.forEach(function (t) {\n              n.push(t * e);\n            }),\n              r.push(n);\n          }),\n          r\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, r) {\n            if (e && e.children)\n              for (var n = e.children.length - 1; n >= 0; n--)\n                if (!t(e.children[n], r)) return;\n            return !!r(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, r) {\n      \"use strict\";\n      function n(t) {\n        return (n =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, r = 1, n = arguments.length; r < n; r++)\n                for (var o in (e = arguments[r]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === n(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var r = [];\n          return (\n            t.forEach(function (t) {\n              r.push(t);\n            }),\n            r.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === n(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    158: function (t, e, r) {\n      \"use strict\";\n      var n,\n        o =\n          (this && this.__extends) ||\n          ((n = function (t, e) {\n            return (n =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var r in e)\n                  Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function r() {\n              this.constructor = t;\n            }\n            n(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((r.prototype = e.prototype), new r()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.CircularLayout = void 0);\n      var i = r(9),\n        u = r(10);\n      function s(t, e) {\n        var r = t.degree,\n          n = e.degree;\n        return r < n ? -1 : r > n ? 1 : 0;\n      }\n      var c = (function (t) {\n        function e(e) {\n          var r = t.call(this) || this;\n          return (\n            (r.radius = null),\n            (r.startRadius = null),\n            (r.endRadius = null),\n            (r.startAngle = 0),\n            (r.endAngle = 2 * Math.PI),\n            (r.clockwise = !0),\n            (r.divisions = 1),\n            (r.ordering = null),\n            (r.angleRatio = 1),\n            (r.nodes = []),\n            (r.edges = []),\n            (r.nodeMap = {}),\n            (r.degrees = []),\n            (r.width = 300),\n            (r.height = 300),\n            r.updateCfg(e),\n            r\n          );\n        }\n        return (\n          o(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return {\n              radius: null,\n              startRadius: null,\n              endRadius: null,\n              startAngle: 0,\n              endAngle: 2 * Math.PI,\n              clockwise: !0,\n              divisions: 1,\n              ordering: null,\n              angleRatio: 1,\n            };\n          }),\n          (e.prototype.execute = function () {\n            var t = this.nodes,\n              e = this.edges,\n              r = t.length;\n            if (0 !== r) {\n              this.width ||\n                \"undefined\" == typeof window ||\n                (this.width = window.innerWidth),\n                this.height ||\n                  \"undefined\" == typeof window ||\n                  (this.height = window.innerHeight),\n                this.center ||\n                  (this.center = [this.width / 2, this.height / 2]);\n              var n = this.center;\n              if (1 === r)\n                return (\n                  (t[0].x = n[0]),\n                  (t[0].y = n[1]),\n                  void (this.onLayoutEnd && this.onLayoutEnd())\n                );\n              var o = this.radius,\n                i = this.startRadius,\n                s = this.endRadius,\n                c = this.divisions,\n                a = this.startAngle,\n                f = this.endAngle,\n                d = (f - a) / r,\n                l = {};\n              t.forEach(function (t, e) {\n                l[t.id] = e;\n              }),\n                (this.nodeMap = l);\n              var h = u.getDegree(t.length, l, e);\n              (this.degrees = h),\n                o || i || s\n                  ? !i && s\n                    ? (i = s)\n                    : i && !s && (s = i)\n                  : (o =\n                      this.height > this.width\n                        ? this.width / 2\n                        : this.height / 2);\n              var p = d * this.angleRatio,\n                y = this.ordering,\n                g = [];\n              g =\n                \"topology\" === y\n                  ? this.topologyOrdering()\n                  : \"topology-directed\" === y\n                  ? this.topologyOrdering(!0)\n                  : \"degree\" === y\n                  ? this.degreeOrdering()\n                  : t;\n              for (\n                var v = this.clockwise, b = Math.ceil(r / c), _ = 0;\n                _ < r;\n                ++_\n              ) {\n                var O = o;\n                O ||\n                  null === i ||\n                  null === s ||\n                  (O = i + (_ * (s - i)) / (r - 1)),\n                  O || (O = 10 + (100 * _) / (r - 1));\n                var j =\n                  a + (_ % b) * p + ((2 * Math.PI) / c) * Math.floor(_ / b);\n                v ||\n                  (j =\n                    f - (_ % b) * p - ((2 * Math.PI) / c) * Math.floor(_ / b)),\n                  (g[_].x = n[0] + Math.cos(j) * O),\n                  (g[_].y = n[1] + Math.sin(j) * O),\n                  (g[_].weight = h[_]);\n              }\n              return (\n                this.onLayoutEnd && this.onLayoutEnd(),\n                { nodes: g, edges: this.edges }\n              );\n            }\n            this.onLayoutEnd && this.onLayoutEnd();\n          }),\n          (e.prototype.topologyOrdering = function (t) {\n            void 0 === t && (t = !1);\n            var e = this.degrees,\n              r = this.edges,\n              n = this.nodes,\n              o = u.clone(n),\n              i = this.nodeMap,\n              s = [o[0]],\n              c = [n[0]],\n              a = [],\n              f = n.length;\n            (a[0] = !0),\n              (function (t, e, r, n) {\n                t.forEach(function (e, r) {\n                  (t[r].children = []), (t[r].parent = []);\n                }),\n                  n\n                    ? e.forEach(function (e) {\n                        var n = 0;\n                        e.source && (n = r[e.source]);\n                        var o = 0;\n                        e.target && (o = r[e.target]);\n                        var i = t[n].children,\n                          u = t[o].parent;\n                        i.push(t[o].id), u.push(t[n].id);\n                      })\n                    : e.forEach(function (e) {\n                        var n = 0;\n                        e.source && (n = r[e.source]);\n                        var o = 0;\n                        e.target && (o = r[e.target]);\n                        var i = t[n].children,\n                          u = t[o].children;\n                        i.push(t[o].id), u.push(t[n].id);\n                      });\n              })(o, r, i, t);\n            var d = 0;\n            return (\n              o.forEach(function (t, u) {\n                if (0 !== u)\n                  if (\n                    (u !== f - 1 &&\n                      e[u] === e[u + 1] &&\n                      !(function (t, e, r) {\n                        for (var n = r.length, o = 0; o < n; o++)\n                          if (\n                            (t.id === r[o].source && e.id === r[o].target) ||\n                            (e.id === r[o].source && t.id === r[o].target)\n                          )\n                            return !0;\n                        return !1;\n                      })(s[d], t, r)) ||\n                    a[u]\n                  ) {\n                    for (\n                      var l = s[d].children, h = !1, p = 0;\n                      p < l.length;\n                      p++\n                    ) {\n                      var y = i[l[p]];\n                      if (e[y] === e[u] && !a[y]) {\n                        s.push(o[y]),\n                          c.push(n[i[o[y].id]]),\n                          (a[y] = !0),\n                          (h = !0);\n                        break;\n                      }\n                    }\n                    for (\n                      var g = 0;\n                      !h &&\n                      (a[g] ||\n                        (s.push(o[g]),\n                        c.push(n[i[o[g].id]]),\n                        (a[g] = !0),\n                        (h = !0)),\n                      ++g !== f);\n\n                    );\n                  } else s.push(t), c.push(n[i[t.id]]), (a[u] = !0), d++;\n              }),\n              c\n            );\n          }),\n          (e.prototype.degreeOrdering = function () {\n            var t = this.nodes,\n              e = [],\n              r = this.degrees;\n            return (\n              t.forEach(function (t, n) {\n                (t.degree = r[n]), e.push(t);\n              }),\n              e.sort(s),\n              e\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"circular\";\n          }),\n          e\n        );\n      })(i.Base);\n      e.CircularLayout = c;\n    },\n    16: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    197: function (t, e, r) {\n      \"use strict\";\n      r.r(e);\n      var n = r(158);\n      e.default = n.CircularLayout;\n    },\n    9: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var n = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = n;\n    },\n  }).default;\n});\n//# sourceMappingURL=circularLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/comboForceLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.ComboForceLayout = t())\n    : (e.ComboForceLayout = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function o(r) {\n      if (t[r]) return t[r].exports;\n      var n = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(n.exports, n, n.exports, o), (n.l = !0), n.exports;\n    }\n    return (\n      (o.m = e),\n      (o.c = t),\n      (o.d = function (e, t, r) {\n        o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (o.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (e, t) {\n        if ((1 & t && (e = o(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (o.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var n in e)\n            o.d(\n              r,\n              n,\n              function (t) {\n                return e[t];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (o.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return o.d(t, \"a\", t), t;\n      }),\n      (o.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (o.p = \"\"),\n      o((o.s = 198))\n    );\n  })({\n    10: function (e, t, o) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, o, r) {\n                void 0 === r && (r = o),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[o];\n                    },\n                  });\n              }\n            : function (e, t, o, r) {\n                void 0 === r && (r = o), (e[r] = t[o]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var o in e)\n              \"default\" === o ||\n                Object.prototype.hasOwnProperty.call(t, o) ||\n                r(t, e, o);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        n(o(11), t),\n        n(o(12), t),\n        n(o(13), t),\n        n(o(14), t),\n        n(o(15), t),\n        n(o(16), t);\n    },\n    11: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        n,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (e) {\n          return n[e] || (n[e] = r(e));\n        });\n    },\n    12: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var o = parseFloat(e);\n        return t.isNaN(o) ? e : o;\n      };\n    },\n    14: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, o) {\n        for (var r = [], n = 0; n < e; n++) r[n] = 0;\n        return o\n          ? (o.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], o = e.length, r = 0; r < o; r += 1) {\n          t[r] = [];\n          for (var n = 0; n < o; n += 1)\n            r === n\n              ? (t[r][n] = 0)\n              : 0 !== e[r][n] && e[r][n]\n              ? (t[r][n] = e[r][n])\n              : (t[r][n] = 1 / 0);\n        }\n        for (var i = 0; i < o; i += 1)\n          for (r = 0; r < o; r += 1)\n            for (n = 0; n < o; n += 1)\n              t[r][n] > t[r][i] + t[i][n] && (t[r][n] = t[r][i] + t[i][n]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var o = e.nodes,\n          r = e.edges,\n          n = [],\n          i = {};\n        if (!o) throw new Error(\"invalid nodes data!\");\n        return (\n          o &&\n            o.forEach(function (e, t) {\n              i[e.id] = t;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var o = e.source,\n                r = e.target,\n                c = i[o],\n                a = i[r];\n              (n[c][a] = 1), t || (n[a][c] = 1);\n            }),\n          n\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var o = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              o.push(r);\n          }),\n          o\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, o) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], o)) return;\n            return !!o(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, o) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (e) {\n              for (var t, o = 1, r = arguments.length; o < r; o++)\n                for (var n in (t = arguments[o]))\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var o = [];\n          return (\n            e.forEach(function (e) {\n              o.push(e);\n            }),\n            o.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = n({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    159: function (e, t, o) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var o in t)\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((o.prototype = t.prototype), new o()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.ComboForceLayout = void 0);\n      var i = o(9),\n        c = o(10),\n        a = (function (e) {\n          function t(t) {\n            var o = e.call(this) || this;\n            return (\n              (o.center = [0, 0]),\n              (o.maxIteration = 100),\n              (o.gravity = 10),\n              (o.comboGravity = 10),\n              (o.linkDistance = 10),\n              (o.alpha = 1),\n              (o.alphaMin = 0.001),\n              (o.alphaDecay = 1 - Math.pow(o.alphaMin, 1 / 300)),\n              (o.alphaTarget = 0),\n              (o.velocityDecay = 0.6),\n              (o.edgeStrength = 0.6),\n              (o.nodeStrength = 30),\n              (o.preventOverlap = !1),\n              (o.preventNodeOverlap = !1),\n              (o.preventComboOverlap = !1),\n              (o.collideStrength = void 0),\n              (o.nodeCollideStrength = 0.5),\n              (o.comboCollideStrength = 0.5),\n              (o.comboSpacing = 20),\n              (o.comboPadding = 10),\n              (o.optimizeRangeFactor = 1),\n              (o.onTick = function () {}),\n              (o.onLayoutEnd = function () {}),\n              (o.depthAttractiveForceScale = 1),\n              (o.depthRepulsiveForceScale = 2),\n              (o.nodes = []),\n              (o.edges = []),\n              (o.combos = []),\n              (o.comboTrees = []),\n              (o.width = 300),\n              (o.height = 300),\n              (o.bias = []),\n              (o.nodeMap = {}),\n              (o.oriComboMap = {}),\n              (o.indexMap = {}),\n              (o.comboMap = {}),\n              (o.previousLayouted = !1),\n              o.updateCfg(t),\n              o\n            );\n          }\n          return (\n            n(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                maxIteration: 100,\n                center: [0, 0],\n                gravity: 10,\n                speed: 1,\n                comboGravity: 30,\n                preventOverlap: !1,\n                preventComboOverlap: !0,\n                preventNodeOverlap: !0,\n                nodeSpacing: void 0,\n                collideStrength: void 0,\n                nodeCollideStrength: 0.5,\n                comboCollideStrength: 0.5,\n                comboSpacing: 20,\n                comboPadding: 10,\n                edgeStrength: 0.6,\n                nodeStrength: 30,\n                linkDistance: 10,\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this.nodes,\n                t = this.center;\n              if (\n                ((this.comboTree = {\n                  id: \"comboTreeRoot\",\n                  depth: -1,\n                  children: this.comboTrees,\n                }),\n                e && 0 !== e.length)\n              ) {\n                if (1 === e.length)\n                  return (\n                    (e[0].x = t[0]),\n                    (e[0].y = t[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                this.initVals(),\n                  this.run(),\n                  this.onLayoutEnd && this.onLayoutEnd();\n              } else this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (t.prototype.run = function () {\n              var e = this,\n                t = e.nodes,\n                o = e.previousLayouted ? e.maxIteration / 5 : e.maxIteration;\n              e.width ||\n                \"undefined\" == typeof window ||\n                (e.width = window.innerWidth),\n                e.height ||\n                  \"undefined\" == typeof window ||\n                  (e.height = window.innerHeight);\n              var r = e.center,\n                n = e.velocityDecay,\n                i = e.comboMap;\n              e.previousLayouted || e.initPos(i);\n              for (\n                var a = function (o) {\n                    var r = [];\n                    t.forEach(function (e, t) {\n                      r[t] = { x: 0, y: 0 };\n                    }),\n                      e.applyCalculate(r),\n                      e.applyComboCenterForce(r),\n                      t.forEach(function (e, t) {\n                        c.isNumber(e.x) &&\n                          c.isNumber(e.y) &&\n                          ((e.x += r[t].x * n), (e.y += r[t].y * n));\n                      }),\n                      (e.alpha += (e.alphaTarget - e.alpha) * e.alphaDecay),\n                      e.onTick();\n                  },\n                  u = 0;\n                u < o;\n                u++\n              )\n                a();\n              var s = [0, 0];\n              t.forEach(function (e) {\n                c.isNumber(e.x) &&\n                  c.isNumber(e.y) &&\n                  ((s[0] += e.x), (s[1] += e.y));\n              }),\n                (s[0] /= t.length),\n                (s[1] /= t.length);\n              var d = [r[0] - s[0], r[1] - s[1]];\n              t.forEach(function (e, t) {\n                c.isNumber(e.x) &&\n                  c.isNumber(e.y) &&\n                  ((e.x += d[0]), (e.y += d[1]));\n              }),\n                e.combos.forEach(function (e) {\n                  var t = i[e.id];\n                  t && t.empty && ((e.x = t.cx || e.x), (e.y = t.cy || e.y));\n                }),\n                (e.previousLayouted = !0);\n            }),\n            (t.prototype.initVals = function () {\n              var e = this.edges,\n                t = this.nodes,\n                o = this.combos,\n                r = {},\n                n = {},\n                i = {};\n              t.forEach(function (e, t) {\n                (n[e.id] = e), (i[e.id] = t);\n              }),\n                (this.nodeMap = n),\n                (this.indexMap = i);\n              var a = {};\n              o.forEach(function (e) {\n                a[e.id] = e;\n              }),\n                (this.oriComboMap = a),\n                (this.comboMap = this.getComboMap());\n              var u = this.preventOverlap;\n              (this.preventComboOverlap = this.preventComboOverlap || u),\n                (this.preventNodeOverlap = this.preventNodeOverlap || u);\n              var s = this.collideStrength;\n              s &&\n                ((this.comboCollideStrength = s),\n                (this.nodeCollideStrength = s)),\n                (this.comboCollideStrength = this.comboCollideStrength\n                  ? this.comboCollideStrength\n                  : 0),\n                (this.nodeCollideStrength = this.nodeCollideStrength\n                  ? this.nodeCollideStrength\n                  : 0);\n              for (var d = 0; d < e.length; ++d)\n                r[e[d].source] ? r[e[d].source]++ : (r[e[d].source] = 1),\n                  r[e[d].target] ? r[e[d].target]++ : (r[e[d].target] = 1);\n              var f = [];\n              for (d = 0; d < e.length; ++d)\n                f[d] = r[e[d].source] / (r[e[d].source] + r[e[d].target]);\n              this.bias = f;\n              var p,\n                h,\n                l = this.nodeSize,\n                y = this.nodeSpacing;\n              if (\n                ((h = c.isNumber(y)\n                  ? function () {\n                      return y;\n                    }\n                  : c.isFunction(y)\n                  ? y\n                  : function () {\n                      return 0;\n                    }),\n                (this.nodeSpacing = h),\n                l)\n              )\n                if (c.isFunction(l))\n                  p = function (e) {\n                    return l(e);\n                  };\n                else if (c.isArray(l)) {\n                  var v = (l[0] > l[1] ? l[0] : l[1]) / 2;\n                  p = function (e) {\n                    return v;\n                  };\n                } else {\n                  var m = l / 2;\n                  p = function (e) {\n                    return m;\n                  };\n                }\n              else\n                p = function (e) {\n                  return e.size\n                    ? c.isArray(e.size)\n                      ? (e.size[0] > e.size[1] ? e.size[0] : e.size[1]) / 2\n                      : e.size / 2\n                    : 10;\n                };\n              this.nodeSize = p;\n              var b,\n                g = this.comboSpacing;\n              (b = c.isNumber(g)\n                ? function () {\n                    return g;\n                  }\n                : c.isFunction(g)\n                ? g\n                : function () {\n                    return 0;\n                  }),\n                (this.comboSpacing = b);\n              var x,\n                S = this.comboPadding;\n              (x = c.isNumber(S)\n                ? function () {\n                    return S;\n                  }\n                : c.isArray(S)\n                ? function () {\n                    return Math.max.apply(null, S);\n                  }\n                : c.isFunction(S)\n                ? S\n                : function () {\n                    return 0;\n                  }),\n                (this.comboPadding = x);\n              var M,\n                O = this.linkDistance;\n              O || (O = 10),\n                (M = c.isNumber(O)\n                  ? function (e) {\n                      return O;\n                    }\n                  : O),\n                (this.linkDistance = M);\n              var C,\n                N = this.edgeStrength;\n              N || (N = 1),\n                (C = c.isNumber(N)\n                  ? function (e) {\n                      return N;\n                    }\n                  : N),\n                (this.edgeStrength = C);\n              var E,\n                _ = this.nodeStrength;\n              _ || (_ = 30),\n                (E = c.isNumber(_)\n                  ? function (e) {\n                      return _;\n                    }\n                  : _),\n                (this.nodeStrength = E);\n            }),\n            (t.prototype.initPos = function (e) {\n              this.nodes.forEach(function (t, o) {\n                var r = t.comboId,\n                  n = e[r];\n                r && n\n                  ? ((t.x = n.cx + 100 / (o + 1)), (t.y = n.cy + 100 / (o + 1)))\n                  : ((t.x = 100 / (o + 1)), (t.y = 100 / (o + 1)));\n              });\n            }),\n            (t.prototype.getComboMap = function () {\n              var e = this,\n                t = e.nodeMap,\n                o = e.indexMap,\n                r = e.comboTrees,\n                n = e.oriComboMap,\n                i = {};\n              return (\n                (r || []).forEach(function (r) {\n                  var a = [];\n                  c.traverseTreeUp(r, function (r) {\n                    if (\"node\" === r.itemType) return !0;\n                    if (!n[r.id]) return !0;\n                    if (void 0 === i[r.id]) {\n                      var u = {\n                        id: r.id,\n                        name: r.id,\n                        cx: 0,\n                        cy: 0,\n                        count: 0,\n                        depth: e.oriComboMap[r.id].depth,\n                        children: [],\n                      };\n                      i[r.id] = u;\n                    }\n                    var s = r.children;\n                    s &&\n                      s.forEach(function (e) {\n                        if (!i[e.id] && !t[e.id]) return !0;\n                        a.push(e);\n                      });\n                    var d = i[r.id];\n                    if (((d.cx = 0), (d.cy = 0), 0 === a.length)) {\n                      d.empty = !0;\n                      var f = n[r.id],\n                        p = Object.keys(t).length,\n                        h = r.id + \"-visual-child-\" + p,\n                        l = {\n                          id: h,\n                          x: f.x,\n                          y: f.y,\n                          depth: d.depth + 1,\n                          itemType: \"node\",\n                        };\n                      e.nodes.push(l),\n                        (t[h] = l),\n                        (o[h] = p),\n                        (d.cx = f.x),\n                        (d.cy = f.y),\n                        a.push(l);\n                    }\n                    return (\n                      a.forEach(function (e) {\n                        if ((d.count++, \"node\" !== e.itemType)) {\n                          var o = i[e.id];\n                          return (\n                            c.isNumber(o.cx) && (d.cx += o.cx),\n                            void (c.isNumber(o.cy) && (d.cy += o.cy))\n                          );\n                        }\n                        var r = t[e.id];\n                        r &&\n                          (c.isNumber(r.x) && (d.cx += r.x),\n                          c.isNumber(r.y) && (d.cy += r.y));\n                      }),\n                      (d.cx /= d.count),\n                      (d.cy /= d.count),\n                      (d.children = a),\n                      !0\n                    );\n                  });\n                }),\n                i\n              );\n            }),\n            (t.prototype.applyComboCenterForce = function (e) {\n              var t = this.gravity,\n                o = this.comboGravity || t,\n                r = this.alpha,\n                n = this.comboTrees,\n                i = this.indexMap,\n                a = this.nodeMap,\n                u = this.comboMap;\n              (n || []).forEach(function (t) {\n                c.traverseTreeUp(t, function (t) {\n                  if (\"node\" === t.itemType) return !0;\n                  if (!u[t.id]) return !0;\n                  var n = u[t.id],\n                    s = ((n.depth + 1) / 10) * 0.5,\n                    d = n.cx,\n                    f = n.cy;\n                  return (\n                    (n.cx = 0),\n                    (n.cy = 0),\n                    n.children.forEach(function (t) {\n                      if (\"node\" !== t.itemType) {\n                        var p = u[t.id];\n                        return (\n                          p && c.isNumber(p.cx) && (n.cx += p.cx),\n                          void (p && c.isNumber(p.cy) && (n.cy += p.cy))\n                        );\n                      }\n                      var h = a[t.id],\n                        l = h.x - d || 0.005,\n                        y = h.y - f || 0.005,\n                        v = Math.sqrt(l * l + y * y),\n                        m = i[h.id],\n                        b = ((o * r) / v) * s;\n                      (e[m].x -= l * b),\n                        (e[m].y -= y * b),\n                        c.isNumber(h.x) && (n.cx += h.x),\n                        c.isNumber(h.y) && (n.cy += h.y);\n                    }),\n                    (n.cx /= n.count),\n                    (n.cy /= n.count),\n                    !0\n                  );\n                });\n              });\n            }),\n            (t.prototype.applyCalculate = function (e) {\n              var t = this.comboMap,\n                o = this.nodes,\n                r = {};\n              o.forEach(function (e, t) {\n                o.forEach(function (o, n) {\n                  if (!(t < n)) {\n                    var i = e.x - o.x || 0.005,\n                      c = e.y - o.y || 0.005,\n                      a = i * i + c * c,\n                      u = Math.sqrt(a);\n                    a < 1 && (a = u),\n                      (r[e.id + \"-\" + o.id] = { vx: i, vy: c, vl2: a, vl: u }),\n                      (r[o.id + \"-\" + e.id] = {\n                        vl2: a,\n                        vl: u,\n                        vx: -i,\n                        vy: -c,\n                      });\n                  }\n                });\n              }),\n                this.updateComboSizes(t),\n                this.calRepulsive(e, r),\n                this.calAttractive(e, r),\n                this.preventComboOverlap && this.comboNonOverlapping(e, t);\n            }),\n            (t.prototype.updateComboSizes = function (e) {\n              var t = this,\n                o = t.comboTrees,\n                r = t.nodeMap,\n                n = t.nodeSize,\n                i = t.comboSpacing,\n                a = t.comboPadding;\n              (o || []).forEach(function (o) {\n                var u = [];\n                c.traverseTreeUp(o, function (o) {\n                  if (\"node\" === o.itemType) return !0;\n                  var s = e[o.id];\n                  if (!s) return !1;\n                  var d = o.children;\n                  d &&\n                    d.forEach(function (t) {\n                      (e[t.id] || r[t.id]) && u.push(t);\n                    }),\n                    (s.minX = 1 / 0),\n                    (s.minY = 1 / 0),\n                    (s.maxX = -1 / 0),\n                    (s.maxY = -1 / 0),\n                    u.forEach(function (e) {\n                      if (\"node\" !== e.itemType) return !0;\n                      var t = r[e.id];\n                      if (!t) return !0;\n                      var o = n(t),\n                        i = t.x - o,\n                        c = t.y - o,\n                        a = t.x + o,\n                        u = t.y + o;\n                      s.minX > i && (s.minX = i),\n                        s.minY > c && (s.minY = c),\n                        s.maxX < a && (s.maxX = a),\n                        s.maxY < u && (s.maxY = u);\n                    });\n                  var f = t.oriComboMap[o.id].size || 10;\n                  c.isArray(f) && (f = f[0]);\n                  var p = Math.max(s.maxX - s.minX, s.maxY - s.minY, f);\n                  return (s.r = p / 2 + i(s) / 2 + a(s)), !0;\n                });\n              });\n            }),\n            (t.prototype.comboNonOverlapping = function (e, t) {\n              var o = this.comboTree,\n                r = this.comboCollideStrength,\n                n = this.indexMap,\n                i = this.nodeMap;\n              c.traverseTreeUp(o, function (o) {\n                if (!t[o.id] && !i[o.id] && \"comboTreeRoot\" !== o.id) return !1;\n                var c = o.children;\n                return (\n                  c &&\n                    c.length > 1 &&\n                    c.forEach(function (o, a) {\n                      if (\"node\" === o.itemType) return !1;\n                      var u = t[o.id];\n                      u &&\n                        c.forEach(function (c, s) {\n                          if (a <= s) return !1;\n                          if (\"node\" === c.itemType) return !1;\n                          var d = t[c.id];\n                          if (!d) return !1;\n                          var f = u.cx - d.cx || 0.005,\n                            p = u.cy - d.cy || 0.005,\n                            h = f * f + p * p,\n                            l = u.r,\n                            y = d.r,\n                            v = l + y,\n                            m = y * y,\n                            b = l * l;\n                          if (h < v * v) {\n                            var g = o.children;\n                            if (!g || 0 === g.length) return !1;\n                            var x = c.children;\n                            if (!x || 0 === x.length) return !1;\n                            var S = Math.sqrt(h),\n                              M = ((v - S) / S) * r,\n                              O = f * M,\n                              C = p * M,\n                              N = m / (b + m),\n                              E = 1 - N;\n                            g.forEach(function (t) {\n                              if (\"node\" !== t.itemType) return !1;\n                              if (i[t.id]) {\n                                var o = n[t.id];\n                                x.forEach(function (t) {\n                                  if (\"node\" !== t.itemType) return !1;\n                                  if (!i[t.id]) return !1;\n                                  var r = n[t.id];\n                                  (e[o].x += O * N),\n                                    (e[o].y += C * N),\n                                    (e[r].x -= O * E),\n                                    (e[r].y -= C * E);\n                                });\n                              }\n                            });\n                          }\n                        });\n                    }),\n                  !0\n                );\n              });\n            }),\n            (t.prototype.calRepulsive = function (e, t) {\n              var o = this,\n                r = o.nodes,\n                n = o.width * o.optimizeRangeFactor,\n                i = o.nodeStrength,\n                c = o.alpha,\n                a = o.nodeCollideStrength,\n                u = o.preventNodeOverlap,\n                s = o.nodeSize,\n                d = o.nodeSpacing,\n                f = o.depthRepulsiveForceScale,\n                p = o.center;\n              r.forEach(function (h, l) {\n                if (h.x && h.y) {\n                  if (p) {\n                    var y = o.gravity,\n                      v = h.x - p[0] || 0.005,\n                      m = h.y - p[1] || 0.005,\n                      b = Math.sqrt(v * v + m * m);\n                    (e[l].x -= (v * y * c) / b), (e[l].y -= (m * y * c) / b);\n                  }\n                  r.forEach(function (o, r) {\n                    if (l !== r && o.x && o.y) {\n                      var p = t[h.id + \"-\" + o.id],\n                        y = p.vl2,\n                        v = p.vl;\n                      if (!(v > n)) {\n                        var m = t[h.id + \"-\" + o.id],\n                          b = m.vx,\n                          g = m.vy,\n                          x =\n                            Math.log(Math.abs(o.depth - h.depth) / 10) + 1 || 1;\n                        (x = x < 1 ? 1 : x),\n                          o.comboId !== h.comboId && (x += 1);\n                        var S = x ? Math.pow(f, x) : 1,\n                          M = ((i(o) * c) / y) * S;\n                        if (\n                          ((e[l].x += b * M), (e[l].y += g * M), l < r && u)\n                        ) {\n                          var O = s(h) + d(h),\n                            C = s(o) + d(o),\n                            N = O + C;\n                          if (y < N * N) {\n                            var E = ((N - v) / v) * a,\n                              _ = C * C,\n                              j = _ / (O * O + _),\n                              T = b * E,\n                              w = g * E;\n                            (e[l].x += T * j),\n                              (e[l].y += w * j),\n                              (j = 1 - j),\n                              (e[r].x -= T * j),\n                              (e[r].y -= w * j);\n                          }\n                        }\n                      }\n                    }\n                  });\n                }\n              });\n            }),\n            (t.prototype.calAttractive = function (e, t) {\n              var o = this,\n                r = o.edges,\n                n = o.linkDistance,\n                i = o.alpha,\n                a = o.edgeStrength,\n                u = o.bias,\n                s = o.depthAttractiveForceScale;\n              r.forEach(function (r, d) {\n                if (r.source && r.target && r.source !== r.target) {\n                  var f = o.indexMap[r.source],\n                    p = o.indexMap[r.target],\n                    h = o.nodeMap[r.source],\n                    l = o.nodeMap[r.target];\n                  if (h && l) {\n                    var y = Math.log(Math.abs(h.depth - l.depth) / 10);\n                    h.comboId === l.comboId && (y /= 2);\n                    var v = y ? Math.pow(s, y) : 1;\n                    if (\n                      (h.comboId !== l.comboId && 1 === v\n                        ? (v = s / 2)\n                        : h.comboId === l.comboId && (v = 2),\n                      c.isNumber(l.x) &&\n                        c.isNumber(h.x) &&\n                        c.isNumber(l.y) &&\n                        c.isNumber(h.y))\n                    ) {\n                      var m = t[r.target + \"-\" + r.source],\n                        b = m.vl,\n                        g = m.vx,\n                        x = m.vy,\n                        S = ((b - n(r)) / b) * i * a(r) * v,\n                        M = g * S,\n                        O = x * S,\n                        C = u[d];\n                      (e[p].x -= M * C),\n                        (e[p].y -= O * C),\n                        (e[f].x += M * (1 - C)),\n                        (e[f].y += O * (1 - C));\n                    }\n                  }\n                }\n              });\n            }),\n            (t.prototype.getType = function () {\n              return \"comboForce\";\n            }),\n            t\n          );\n        })(i.Base);\n      t.ComboForceLayout = a;\n    },\n    16: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    198: function (e, t, o) {\n      \"use strict\";\n      o.r(t);\n      var r = o(159);\n      t.default = r.ComboForceLayout;\n    },\n    9: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=comboForceLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/concentricLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.ConcentricLayout = t())\n    : (e.ConcentricLayout = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function n(r) {\n      if (t[r]) return t[r].exports;\n      var o = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = e),\n      (n.c = t),\n      (n.d = function (e, t, r) {\n        n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (n.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (e, t) {\n        if ((1 & t && (e = n(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var o in e)\n            n.d(\n              r,\n              o,\n              function (t) {\n                return e[t];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return n.d(t, \"a\", t), t;\n      }),\n      (n.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (n.p = \"\"),\n      n((n.s = 199))\n    );\n  })({\n    10: function (e, t, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[n];\n                    },\n                  });\n              }\n            : function (e, t, n, r) {\n                void 0 === r && (r = n), (e[r] = t[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var n in e)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(t, n) ||\n                r(t, e, n);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        o(n(11), t),\n        o(n(12), t),\n        o(n(13), t),\n        o(n(14), t),\n        o(n(15), t),\n        o(n(16), t);\n    },\n    11: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (e) {\n          return o[e] || (o[e] = r(e));\n        });\n    },\n    12: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var n = parseFloat(e);\n        return t.isNaN(n) ? e : n;\n      };\n    },\n    14: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, n) {\n        for (var r = [], o = 0; o < e; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], n = e.length, r = 0; r < n; r += 1) {\n          t[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (t[r][o] = 0)\n              : 0 !== e[r][o] && e[r][o]\n              ? (t[r][o] = e[r][o])\n              : (t[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              t[r][o] > t[r][i] + t[i][o] && (t[r][o] = t[r][i] + t[i][o]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var n = e.nodes,\n          r = e.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (e, t) {\n              i[e.id] = t;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var n = e.source,\n                r = e.target,\n                u = i[n],\n                c = i[r];\n              (o[u][c] = 1), t || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var n = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, n) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], n)) return;\n            return !!n(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, n) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (e) {\n              for (var t, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (t = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var n = [];\n          return (\n            e.forEach(function (e) {\n              n.push(e);\n            }),\n            n.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = o({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    160: function (e, t, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var n in t)\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((n.prototype = t.prototype), new n()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.ConcentricLayout = void 0);\n      var i = n(10),\n        u = (function (e) {\n          function t(t) {\n            var n = e.call(this) || this;\n            return (\n              (n.nodeSize = 30),\n              (n.minNodeSpacing = 10),\n              (n.preventOverlap = !1),\n              (n.equidistant = !1),\n              (n.startAngle = 1.5 * Math.PI),\n              (n.clockwise = !0),\n              (n.sortBy = \"degree\"),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.onLayoutEnd = function () {}),\n              n.updateCfg(t),\n              n\n            );\n          }\n          return (\n            o(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                nodeSize: 30,\n                minNodeSpacing: 10,\n                preventOverlap: !1,\n                sweep: void 0,\n                equidistant: !1,\n                startAngle: 1.5 * Math.PI,\n                clockwise: !0,\n                maxLevelDiff: void 0,\n                sortBy: \"degree\",\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this,\n                t = e.nodes,\n                n = e.edges,\n                r = t.length;\n              if (0 !== r) {\n                e.width ||\n                  \"undefined\" == typeof window ||\n                  (e.width = window.innerWidth),\n                  e.height ||\n                    \"undefined\" == typeof window ||\n                    (e.height = window.innerHeight),\n                  e.center || (e.center = [e.width / 2, e.height / 2]);\n                var o = e.center;\n                if (1 === r)\n                  return (\n                    (t[0].x = o[0]),\n                    (t[0].y = o[1]),\n                    void (e.onLayoutEnd && e.onLayoutEnd())\n                  );\n                var u,\n                  c = [];\n                (u = i.isArray(e.nodeSize)\n                  ? Math.max(e.nodeSize[0], e.nodeSize[1])\n                  : e.nodeSize),\n                  t.forEach(function (e) {\n                    c.push(e);\n                    var t = u;\n                    i.isArray(e.size)\n                      ? (t = Math.max(e.size[0], e.size[1]))\n                      : i.isNumber(e.size) && (t = e.size),\n                      (u = Math.max(u, t));\n                  }),\n                  (e.clockwise =\n                    void 0 !== e.counterclockwise\n                      ? !e.counterclockwise\n                      : e.clockwise);\n                var a = {},\n                  s = {};\n                if (\n                  (c.forEach(function (e, t) {\n                    (a[e.id] = e), (s[e.id] = t);\n                  }),\n                  !(\n                    (\"degree\" !== e.sortBy &&\n                      i.isString(e.sortBy) &&\n                      void 0 !== c[0][e.sortBy]) ||\n                    ((e.sortBy = \"degree\"), i.isNumber(t[0].degree))\n                  ))\n                ) {\n                  var f = i.getDegree(t.length, s, n);\n                  c.forEach(function (e, t) {\n                    e.degree = f[t];\n                  });\n                }\n                c.sort(function (t, n) {\n                  return n[e.sortBy] - t[e.sortBy];\n                }),\n                  (e.maxValueNode = c[0]),\n                  (e.maxLevelDiff =\n                    e.maxLevelDiff || e.maxValueNode[e.sortBy] / 4);\n                var d = [[]],\n                  l = d[0];\n                c.forEach(function (t) {\n                  if (l.length > 0) {\n                    var n = Math.abs(l[0][e.sortBy] - t[e.sortBy]);\n                    e.maxLevelDiff &&\n                      n >= e.maxLevelDiff &&\n                      ((l = []), d.push(l));\n                  }\n                  l.push(t);\n                });\n                var p = u + e.minNodeSpacing;\n                if (!e.preventOverlap) {\n                  var h = d.length > 0 && d[0].length > 1,\n                    y =\n                      (Math.min(e.width, e.height) / 2 - p) /\n                      (d.length + (h ? 1 : 0));\n                  p = Math.min(p, y);\n                }\n                var v = 0;\n                if (\n                  (d.forEach(function (t) {\n                    var n = e.sweep;\n                    void 0 === n &&\n                      (n = 2 * Math.PI - (2 * Math.PI) / t.length);\n                    var r = (t.dTheta = n / Math.max(1, t.length - 1));\n                    if (t.length > 1 && e.preventOverlap) {\n                      var o = Math.cos(r) - Math.cos(0),\n                        i = Math.sin(r) - Math.sin(0),\n                        u = Math.sqrt((p * p) / (o * o + i * i));\n                      v = Math.max(u, v);\n                    }\n                    (t.r = v), (v += p);\n                  }),\n                  e.equidistant)\n                ) {\n                  for (var g = 0, b = 0, m = 0; m < d.length; m++) {\n                    var _ = d[m].r - b;\n                    g = Math.max(g, _);\n                  }\n                  (b = 0),\n                    d.forEach(function (e, t) {\n                      0 === t && (b = e.r), (e.r = b), (b += g);\n                    });\n                }\n                return (\n                  d.forEach(function (t) {\n                    var n = t.dTheta,\n                      r = t.r;\n                    t.forEach(function (t, i) {\n                      var u = e.startAngle + (e.clockwise ? 1 : -1) * n * i;\n                      (t.x = o[0] + r * Math.cos(u)),\n                        (t.y = o[1] + r * Math.sin(u));\n                    });\n                  }),\n                  e.onLayoutEnd && e.onLayoutEnd(),\n                  { nodes: t, edges: n }\n                );\n              }\n              e.onLayoutEnd && e.onLayoutEnd();\n            }),\n            (t.prototype.getType = function () {\n              return \"concentric\";\n            }),\n            t\n          );\n        })(n(9).Base);\n      t.ConcentricLayout = u;\n    },\n    199: function (e, t, n) {\n      \"use strict\";\n      n.r(t);\n      var r = n(160);\n      t.default = r.ConcentricLayout;\n    },\n    9: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=concentricLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/dagreLayout.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.DagreLayout = n())\n    : (t.DagreLayout = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function e(r) {\n      if (n[r]) return n[r].exports;\n      var o = (n[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, e), (o.l = !0), o.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = n),\n      (e.d = function (t, n, r) {\n        e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: r });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, n) {\n        if ((1 & n && (t = e(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (e.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var o in t)\n            e.d(\n              r,\n              o,\n              function (n) {\n                return t[n];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (e.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(n, \"a\", n), n;\n      }),\n      (e.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (e.p = \"\"),\n      e((e.s = 200))\n    );\n  })([\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r;\n      try {\n        r = {\n          cloneDeep: e(316),\n          constant: e(89),\n          defaults: e(317),\n          each: e(121),\n          filter: e(124),\n          find: e(318),\n          flatten: e(151),\n          forEach: e(122),\n          forIn: e(325),\n          has: e(135),\n          isUndefined: e(136),\n          last: e(326),\n          map: e(137),\n          mapValues: e(327),\n          max: e(328),\n          merge: e(330),\n          min: e(336),\n          minBy: e(337),\n          now: e(338),\n          pick: e(339),\n          range: e(344),\n          reduce: e(139),\n          sortBy: e(347),\n          uniqueId: e(352),\n          values: e(144),\n          zipObject: e(353),\n        };\n      } catch (t) {}\n      r || (r = window._), (t.exports = r);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), (n.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      n.Base = r;\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        o(e(11), n),\n        o(e(12), n),\n        o(e(13), n),\n        o(e(14), n),\n        o(e(15), n),\n        o(e(16), n);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.camelize = n.isString = void 0);\n      n.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      n.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, n) {\n            return n ? n.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isArray = void 0),\n        (n.isArray = Array.isArray);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.toNumber = n.isNaN = n.isNumber = void 0);\n      n.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      n.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      n.toNumber = function (t) {\n        var e = parseFloat(t);\n        return n.isNaN(e) ? t : e;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.traverseTreeUp =\n          n.scaleMatrix =\n          n.getAdjMatrix =\n          n.floydWarshall =\n          n.getDegree =\n            void 0);\n      n.getDegree = function (t, n, e) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (r[n[t.source]] += 1),\n                t.target && (r[n[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      n.floydWarshall = function (t) {\n        for (var n = [], e = t.length, r = 0; r < e; r += 1) {\n          n[r] = [];\n          for (var o = 0; o < e; o += 1)\n            r === o\n              ? (n[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (n[r][o] = t[r][o])\n              : (n[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (r = 0; r < e; r += 1)\n            for (o = 0; o < e; o += 1)\n              n[r][o] > n[r][i] + n[i][o] && (n[r][o] = n[r][i] + n[i][o]);\n        return n;\n      };\n      n.getAdjMatrix = function (t, n) {\n        var e = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, n) {\n              i[t.id] = n;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var e = t.source,\n                r = t.target,\n                u = i[e],\n                c = i[r];\n              (o[u][c] = 1), n || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      n.scaleMatrix = function (t, n) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * n);\n            }),\n              e.push(r);\n          }),\n          e\n        );\n      };\n      n.traverseTreeUp = function (t, n) {\n        \"function\" == typeof n &&\n          (function t(n, e) {\n            if (n && n.children)\n              for (var r = n.children.length - 1; r >= 0; r--)\n                if (!t(n.children[r], e)) return;\n            return !!e(n);\n          })(t, n);\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var n, e = 1, r = arguments.length; e < r; e++)\n                for (var o in (n = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.clone = n.isObject = void 0);\n      n.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      n.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return n.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = n.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isFunction = void 0);\n      n.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    function (t, n) {\n      var e = Array.isArray;\n      t.exports = e;\n    },\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(23).Graph;\n      function i(t, n, e, o) {\n        var i;\n        do {\n          i = r.uniqueId(o);\n        } while (t.hasNode(i));\n        return (e.dummy = n), t.setNode(i, e), i;\n      }\n      function u(t) {\n        return r.max(\n          r.map(t.nodes(), function (n) {\n            var e = t.node(n).rank;\n            if (!r.isUndefined(e)) return e;\n          }),\n        );\n      }\n      t.exports = {\n        addDummyNode: i,\n        simplify: function (t) {\n          var n = new o().setGraph(t.graph());\n          return (\n            r.forEach(t.nodes(), function (e) {\n              n.setNode(e, t.node(e));\n            }),\n            r.forEach(t.edges(), function (e) {\n              var r = n.edge(e.v, e.w) || { weight: 0, minlen: 1 },\n                o = t.edge(e);\n              n.setEdge(e.v, e.w, {\n                weight: r.weight + o.weight,\n                minlen: Math.max(r.minlen, o.minlen),\n              });\n            }),\n            n\n          );\n        },\n        asNonCompoundGraph: function (t) {\n          var n = new o({ multigraph: t.isMultigraph() }).setGraph(t.graph());\n          return (\n            r.forEach(t.nodes(), function (e) {\n              t.children(e).length || n.setNode(e, t.node(e));\n            }),\n            r.forEach(t.edges(), function (e) {\n              n.setEdge(e, t.edge(e));\n            }),\n            n\n          );\n        },\n        successorWeights: function (t) {\n          var n = r.map(t.nodes(), function (n) {\n            var e = {};\n            return (\n              r.forEach(t.outEdges(n), function (n) {\n                e[n.w] = (e[n.w] || 0) + t.edge(n).weight;\n              }),\n              e\n            );\n          });\n          return r.zipObject(t.nodes(), n);\n        },\n        predecessorWeights: function (t) {\n          var n = r.map(t.nodes(), function (n) {\n            var e = {};\n            return (\n              r.forEach(t.inEdges(n), function (n) {\n                e[n.v] = (e[n.v] || 0) + t.edge(n).weight;\n              }),\n              e\n            );\n          });\n          return r.zipObject(t.nodes(), n);\n        },\n        intersectRect: function (t, n) {\n          var e,\n            r,\n            o = t.x,\n            i = t.y,\n            u = n.x - o,\n            c = n.y - i,\n            a = t.width / 2,\n            f = t.height / 2;\n          if (!u && !c)\n            throw new Error(\n              \"Not possible to find intersection inside of the rectangle\",\n            );\n          Math.abs(c) * a > Math.abs(u) * f\n            ? (c < 0 && (f = -f), (e = (f * u) / c), (r = f))\n            : (u < 0 && (a = -a), (e = a), (r = (a * c) / u));\n          return { x: o + e, y: i + r };\n        },\n        buildLayerMatrix: function (t) {\n          var n = r.map(r.range(u(t) + 1), function () {\n            return [];\n          });\n          return (\n            r.forEach(t.nodes(), function (e) {\n              var o = t.node(e),\n                i = o.rank;\n              r.isUndefined(i) || (n[i][o.order] = e);\n            }),\n            n\n          );\n        },\n        normalizeRanks: function (t) {\n          var n = r.min(\n            r.map(t.nodes(), function (n) {\n              return t.node(n).rank;\n            }),\n          );\n          r.forEach(t.nodes(), function (e) {\n            var o = t.node(e);\n            r.has(o, \"rank\") && (o.rank -= n);\n          });\n        },\n        removeEmptyRanks: function (t) {\n          var n = r.min(\n              r.map(t.nodes(), function (n) {\n                return t.node(n).rank;\n              }),\n            ),\n            e = [];\n          r.forEach(t.nodes(), function (r) {\n            var o = t.node(r).rank - n;\n            e[o] || (e[o] = []), e[o].push(r);\n          });\n          var o = 0,\n            i = t.graph().nodeRankFactor;\n          r.forEach(e, function (n, e) {\n            r.isUndefined(n) && e % i != 0\n              ? --o\n              : o &&\n                r.forEach(n, function (n) {\n                  t.node(n).rank += o;\n                });\n          });\n        },\n        addBorderNode: function (t, n, e, r) {\n          var o = { width: 0, height: 0 };\n          arguments.length >= 4 && ((o.rank = e), (o.order = r));\n          return i(t, \"border\", o, n);\n        },\n        maxRank: u,\n        partition: function (t, n) {\n          var e = { lhs: [], rhs: [] };\n          return (\n            r.forEach(t, function (t) {\n              n(t) ? e.lhs.push(t) : e.rhs.push(t);\n            }),\n            e\n          );\n        },\n        time: function (t, n) {\n          var e = r.now();\n          try {\n            return n();\n          } finally {\n            console.log(t + \" time: \" + (r.now() - e) + \"ms\");\n          }\n        },\n        notime: function (t, n) {\n          return n();\n        },\n      };\n    },\n    function (t, n, e) {\n      var r;\n      try {\n        r = {\n          clone: e(204),\n          constant: e(89),\n          each: e(121),\n          filter: e(124),\n          has: e(135),\n          isArray: e(17),\n          isEmpty: e(280),\n          isFunction: e(46),\n          isUndefined: e(136),\n          keys: e(31),\n          map: e(137),\n          reduce: e(139),\n          size: e(283),\n          transform: e(289),\n          union: e(290),\n          values: e(144),\n        };\n      } catch (t) {}\n      r || (r = window._), (t.exports = r);\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        var n = e(t);\n        return null != t && (\"object\" == n || \"function\" == n);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r;\n      try {\n        r = e(202);\n      } catch (t) {}\n      r || (r = window.graphlib), (t.exports = r);\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(104),\n        i =\n          \"object\" == (\"undefined\" == typeof self ? \"undefined\" : r(self)) &&\n          self &&\n          self.Object === Object &&\n          self,\n        u = o || i || Function(\"return this\")();\n      t.exports = u;\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        return null != t && \"object\" == e(t);\n      };\n    },\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(46),\n        o = e(83);\n      t.exports = function (t) {\n        return null != t && o(t.length) && !r(t);\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(260),\n        i = e(270),\n        u = e(36),\n        c = e(17),\n        a = e(277);\n      t.exports = function (t) {\n        return \"function\" == typeof t\n          ? t\n          : null == t\n          ? u\n          : \"object\" == r(t)\n          ? c(t)\n            ? i(t[0], t[1])\n            : o(t)\n          : a(t);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r = e(107),\n        o = e(85),\n        i = e(28);\n      t.exports = function (t) {\n        return i(t) ? r(t) : o(t);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r = e(215),\n        o = e(220);\n      t.exports = function (t, n) {\n        var e = o(t, n);\n        return r(e) ? e : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = e(216),\n        i = e(217),\n        u = r ? r.toStringTag : void 0;\n      t.exports = function (t) {\n        return null == t\n          ? void 0 === t\n            ? \"[object Undefined]\"\n            : \"[object Null]\"\n          : u && u in Object(t)\n          ? o(t)\n          : i(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(107),\n        o = e(240),\n        i = e(28);\n      t.exports = function (t) {\n        return i(t) ? r(t, !0) : o(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t === n || (t != t && n != n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(24).Symbol;\n      t.exports = r;\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(24),\n          i = e(236),\n          u = \"object\" == r(n) && n && !n.nodeType && n,\n          c = u && \"object\" == r(t) && t && !t.nodeType && t,\n          a = c && c.exports === u ? o.Buffer : void 0,\n          f = (a ? a.isBuffer : void 0) || i;\n        t.exports = f;\n      }).call(this, e(45)(t));\n    },\n    function (t, n, e) {\n      var r = e(245),\n        o = e(80),\n        i = e(246),\n        u = e(116),\n        c = e(247),\n        a = e(34),\n        f = e(105),\n        s = f(r),\n        p = f(o),\n        d = f(i),\n        h = f(u),\n        l = f(c),\n        v = a;\n      ((r && \"[object DataView]\" != v(new r(new ArrayBuffer(1)))) ||\n        (o && \"[object Map]\" != v(new o())) ||\n        (i && \"[object Promise]\" != v(i.resolve())) ||\n        (u && \"[object Set]\" != v(new u())) ||\n        (c && \"[object WeakMap]\" != v(new c()))) &&\n        (v = function (t) {\n          var n = a(t),\n            e = \"[object Object]\" == n ? t.constructor : void 0,\n            r = e ? f(e) : \"\";\n          if (r)\n            switch (r) {\n              case s:\n                return \"[object DataView]\";\n              case p:\n                return \"[object Map]\";\n              case d:\n                return \"[object Promise]\";\n              case h:\n                return \"[object Set]\";\n              case l:\n                return \"[object WeakMap]\";\n            }\n          return n;\n        }),\n        (t.exports = v);\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(34),\n        i = e(25);\n      t.exports = function (t) {\n        return \"symbol\" == r(t) || (i(t) && \"[object Symbol]\" == o(t));\n      };\n    },\n    ,\n    ,\n    ,\n    function (t, n) {\n      t.exports = function (t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function () {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function () {\n                return t.l;\n              },\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function () {\n                return t.i;\n              },\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(34),\n        o = e(21);\n      t.exports = function (t) {\n        if (!o(t)) return !1;\n        var n = r(t);\n        return (\n          \"[object Function]\" == n ||\n          \"[object GeneratorFunction]\" == n ||\n          \"[object AsyncFunction]\" == n ||\n          \"[object Proxy]\" == n\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(59),\n        o = e(60);\n      t.exports = function (t, n, e, i) {\n        var u = !e;\n        e || (e = {});\n        for (var c = -1, a = n.length; ++c < a; ) {\n          var f = n[c],\n            s = i ? i(e[f], t[f], f, e, t) : void 0;\n          void 0 === s && (s = t[f]), u ? o(e, f, s) : r(e, f, s);\n        }\n        return e;\n      };\n    },\n    function (t, n, e) {\n      var r = e(235),\n        o = e(25),\n        i = Object.prototype,\n        u = i.hasOwnProperty,\n        c = i.propertyIsEnumerable,\n        a = r(\n          (function () {\n            return arguments;\n          })(),\n        )\n          ? r\n          : function (t) {\n              return o(t) && u.call(t, \"callee\") && !c.call(t, \"callee\");\n            };\n      t.exports = a;\n    },\n    function (t, n, e) {\n      var r = e(237),\n        o = e(62),\n        i = e(84),\n        u = i && i.isTypedArray,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(41);\n      t.exports = function (t) {\n        if (\"string\" == typeof t || r(t)) return t;\n        var n = t + \"\";\n        return \"0\" == n && 1 / t == -1 / 0 ? \"-0\" : n;\n      };\n    },\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(55),\n        o = e(210),\n        i = e(211),\n        u = e(212),\n        c = e(213),\n        a = e(214);\n      function f(t) {\n        var n = (this.__data__ = new r(t));\n        this.size = n.size;\n      }\n      (f.prototype.clear = o),\n        (f.prototype.delete = i),\n        (f.prototype.get = u),\n        (f.prototype.has = c),\n        (f.prototype.set = a),\n        (t.exports = f);\n    },\n    function (t, n, e) {\n      var r = e(205),\n        o = e(206),\n        i = e(207),\n        u = e(208),\n        c = e(209);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n, e) {\n      var r = e(37);\n      t.exports = function (t, n) {\n        for (var e = t.length; e--; ) if (r(t[e][0], n)) return e;\n        return -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(33)(Object, \"create\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(229);\n      t.exports = function (t, n) {\n        var e = t.__data__;\n        return r(n) ? e[\"string\" == typeof n ? \"string\" : \"hash\"] : e.map;\n      };\n    },\n    function (t, n, e) {\n      var r = e(60),\n        o = e(37),\n        i = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e) {\n        var u = t[n];\n        (i.call(t, n) && o(u, e) && (void 0 !== e || n in t)) || r(t, n, e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(106);\n      t.exports = function (t, n, e) {\n        \"__proto__\" == n && r\n          ? r(t, n, {\n              configurable: !0,\n              enumerable: !0,\n              value: e,\n              writable: !0,\n            })\n          : (t[n] = e);\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r = /^(?:0|[1-9]\\d*)$/;\n      t.exports = function (t, n) {\n        var o = e(t);\n        return (\n          !!(n = null == n ? 9007199254740991 : n) &&\n          (\"number\" == o || (\"symbol\" != o && r.test(t))) &&\n          t > -1 &&\n          t % 1 == 0 &&\n          t < n\n        );\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n) {\n          return t(n);\n        };\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype;\n      t.exports = function (t) {\n        var n = t && t.constructor;\n        return t === ((\"function\" == typeof n && n.prototype) || e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(108)(Object.getPrototypeOf, Object);\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(90),\n        o = e(258)(r);\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(67),\n        o = e(50);\n      t.exports = function (t, n) {\n        for (var e = 0, i = (n = r(n, t)).length; null != t && e < i; )\n          t = t[o(n[e++])];\n        return e && e == i ? t : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(17),\n        o = e(93),\n        i = e(272),\n        u = e(131);\n      t.exports = function (t, n) {\n        return r(t) ? t : o(t, n) ? [t] : i(u(t));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = null == t ? 0 : t.length, o = Array(r); ++e < r; )\n          o[e] = n(t[e], e, t);\n        return o;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(140),\n        i = e(141);\n      t.exports = function (t, n) {\n        return i(o(t, n, r), t + \"\");\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(37),\n        i = e(28),\n        u = e(61),\n        c = e(21);\n      t.exports = function (t, n, e) {\n        if (!c(e)) return !1;\n        var a = r(n);\n        return (\n          !!(\"number\" == a\n            ? i(e) && u(n, e.length)\n            : \"string\" == a && n in e) && o(e[n], t)\n        );\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8);\n      t.exports = {\n        longestPath: function (t) {\n          var n = {};\n          r.forEach(t.sources(), function e(o) {\n            var i = t.node(o);\n            if (r.has(n, o)) return i.rank;\n            n[o] = !0;\n            var u = r.min(\n              r.map(t.outEdges(o), function (n) {\n                return e(n.w) - t.edge(n).minlen;\n              }),\n            );\n            return (\n              (u !== Number.POSITIVE_INFINITY && null != u) || (u = 0),\n              (i.rank = u)\n            );\n          });\n        },\n        slack: function (t, n) {\n          return t.node(n.w).rank - t.node(n.v).rank - t.edge(n).minlen;\n        },\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r;\n      r = (function () {\n        return this;\n      })();\n      try {\n        r = r || new Function(\"return this\")();\n      } catch (t) {\n        \"object\" === (\"undefined\" == typeof window ? \"undefined\" : e(window)) &&\n          (r = window);\n      }\n      t.exports = r;\n    },\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(20);\n      t.exports = i;\n      function i(t) {\n        (this._isDirected = !o.has(t, \"directed\") || t.directed),\n          (this._isMultigraph = !!o.has(t, \"multigraph\") && t.multigraph),\n          (this._isCompound = !!o.has(t, \"compound\") && t.compound),\n          (this._label = void 0),\n          (this._defaultNodeLabelFn = o.constant(void 0)),\n          (this._defaultEdgeLabelFn = o.constant(void 0)),\n          (this._nodes = {}),\n          this._isCompound &&\n            ((this._parent = {}),\n            (this._children = {}),\n            (this._children[\"\\0\"] = {})),\n          (this._in = {}),\n          (this._preds = {}),\n          (this._out = {}),\n          (this._sucs = {}),\n          (this._edgeObjs = {}),\n          (this._edgeLabels = {});\n      }\n      function u(t, n) {\n        t[n] ? t[n]++ : (t[n] = 1);\n      }\n      function c(t, n) {\n        --t[n] || delete t[n];\n      }\n      function a(t, n, e, r) {\n        var i = \"\" + n,\n          u = \"\" + e;\n        if (!t && i > u) {\n          var c = i;\n          (i = u), (u = c);\n        }\n        return i + \"\u0001\" + u + \"\u0001\" + (o.isUndefined(r) ? \"\\0\" : r);\n      }\n      function f(t, n, e, r) {\n        var o = \"\" + n,\n          i = \"\" + e;\n        if (!t && o > i) {\n          var u = o;\n          (o = i), (i = u);\n        }\n        var c = { v: o, w: i };\n        return r && (c.name = r), c;\n      }\n      function s(t, n) {\n        return a(t, n.v, n.w, n.name);\n      }\n      (i.prototype._nodeCount = 0),\n        (i.prototype._edgeCount = 0),\n        (i.prototype.isDirected = function () {\n          return this._isDirected;\n        }),\n        (i.prototype.isMultigraph = function () {\n          return this._isMultigraph;\n        }),\n        (i.prototype.isCompound = function () {\n          return this._isCompound;\n        }),\n        (i.prototype.setGraph = function (t) {\n          return (this._label = t), this;\n        }),\n        (i.prototype.graph = function () {\n          return this._label;\n        }),\n        (i.prototype.setDefaultNodeLabel = function (t) {\n          return (\n            o.isFunction(t) || (t = o.constant(t)),\n            (this._defaultNodeLabelFn = t),\n            this\n          );\n        }),\n        (i.prototype.nodeCount = function () {\n          return this._nodeCount;\n        }),\n        (i.prototype.nodes = function () {\n          return o.keys(this._nodes);\n        }),\n        (i.prototype.sources = function () {\n          var t = this;\n          return o.filter(this.nodes(), function (n) {\n            return o.isEmpty(t._in[n]);\n          });\n        }),\n        (i.prototype.sinks = function () {\n          var t = this;\n          return o.filter(this.nodes(), function (n) {\n            return o.isEmpty(t._out[n]);\n          });\n        }),\n        (i.prototype.setNodes = function (t, n) {\n          var e = arguments,\n            r = this;\n          return (\n            o.each(t, function (t) {\n              e.length > 1 ? r.setNode(t, n) : r.setNode(t);\n            }),\n            this\n          );\n        }),\n        (i.prototype.setNode = function (t, n) {\n          return o.has(this._nodes, t)\n            ? (arguments.length > 1 && (this._nodes[t] = n), this)\n            : ((this._nodes[t] =\n                arguments.length > 1 ? n : this._defaultNodeLabelFn(t)),\n              this._isCompound &&\n                ((this._parent[t] = \"\\0\"),\n                (this._children[t] = {}),\n                (this._children[\"\\0\"][t] = !0)),\n              (this._in[t] = {}),\n              (this._preds[t] = {}),\n              (this._out[t] = {}),\n              (this._sucs[t] = {}),\n              ++this._nodeCount,\n              this);\n        }),\n        (i.prototype.node = function (t) {\n          return this._nodes[t];\n        }),\n        (i.prototype.hasNode = function (t) {\n          return o.has(this._nodes, t);\n        }),\n        (i.prototype.removeNode = function (t) {\n          var n = this;\n          if (o.has(this._nodes, t)) {\n            var e = function (t) {\n              n.removeEdge(n._edgeObjs[t]);\n            };\n            delete this._nodes[t],\n              this._isCompound &&\n                (this._removeFromParentsChildList(t),\n                delete this._parent[t],\n                o.each(this.children(t), function (t) {\n                  n.setParent(t);\n                }),\n                delete this._children[t]),\n              o.each(o.keys(this._in[t]), e),\n              delete this._in[t],\n              delete this._preds[t],\n              o.each(o.keys(this._out[t]), e),\n              delete this._out[t],\n              delete this._sucs[t],\n              --this._nodeCount;\n          }\n          return this;\n        }),\n        (i.prototype.setParent = function (t, n) {\n          if (!this._isCompound)\n            throw new Error(\"Cannot set parent in a non-compound graph\");\n          if (o.isUndefined(n)) n = \"\\0\";\n          else {\n            for (var e = (n += \"\"); !o.isUndefined(e); e = this.parent(e))\n              if (e === t)\n                throw new Error(\n                  \"Setting \" +\n                    n +\n                    \" as parent of \" +\n                    t +\n                    \" would create a cycle\",\n                );\n            this.setNode(n);\n          }\n          return (\n            this.setNode(t),\n            this._removeFromParentsChildList(t),\n            (this._parent[t] = n),\n            (this._children[n][t] = !0),\n            this\n          );\n        }),\n        (i.prototype._removeFromParentsChildList = function (t) {\n          delete this._children[this._parent[t]][t];\n        }),\n        (i.prototype.parent = function (t) {\n          if (this._isCompound) {\n            var n = this._parent[t];\n            if (\"\\0\" !== n) return n;\n          }\n        }),\n        (i.prototype.children = function (t) {\n          if ((o.isUndefined(t) && (t = \"\\0\"), this._isCompound)) {\n            var n = this._children[t];\n            if (n) return o.keys(n);\n          } else {\n            if (\"\\0\" === t) return this.nodes();\n            if (this.hasNode(t)) return [];\n          }\n        }),\n        (i.prototype.predecessors = function (t) {\n          var n = this._preds[t];\n          if (n) return o.keys(n);\n        }),\n        (i.prototype.successors = function (t) {\n          var n = this._sucs[t];\n          if (n) return o.keys(n);\n        }),\n        (i.prototype.neighbors = function (t) {\n          var n = this.predecessors(t);\n          if (n) return o.union(n, this.successors(t));\n        }),\n        (i.prototype.isLeaf = function (t) {\n          return (\n            0 ===\n            (this.isDirected() ? this.successors(t) : this.neighbors(t)).length\n          );\n        }),\n        (i.prototype.filterNodes = function (t) {\n          var n = new this.constructor({\n            directed: this._isDirected,\n            multigraph: this._isMultigraph,\n            compound: this._isCompound,\n          });\n          n.setGraph(this.graph());\n          var e = this;\n          o.each(this._nodes, function (e, r) {\n            t(r) && n.setNode(r, e);\n          }),\n            o.each(this._edgeObjs, function (t) {\n              n.hasNode(t.v) && n.hasNode(t.w) && n.setEdge(t, e.edge(t));\n            });\n          var r = {};\n          return (\n            this._isCompound &&\n              o.each(n.nodes(), function (t) {\n                n.setParent(\n                  t,\n                  (function t(o) {\n                    var i = e.parent(o);\n                    return void 0 === i || n.hasNode(i)\n                      ? ((r[o] = i), i)\n                      : i in r\n                      ? r[i]\n                      : t(i);\n                  })(t),\n                );\n              }),\n            n\n          );\n        }),\n        (i.prototype.setDefaultEdgeLabel = function (t) {\n          return (\n            o.isFunction(t) || (t = o.constant(t)),\n            (this._defaultEdgeLabelFn = t),\n            this\n          );\n        }),\n        (i.prototype.edgeCount = function () {\n          return this._edgeCount;\n        }),\n        (i.prototype.edges = function () {\n          return o.values(this._edgeObjs);\n        }),\n        (i.prototype.setPath = function (t, n) {\n          var e = this,\n            r = arguments;\n          return (\n            o.reduce(t, function (t, o) {\n              return r.length > 1 ? e.setEdge(t, o, n) : e.setEdge(t, o), o;\n            }),\n            this\n          );\n        }),\n        (i.prototype.setEdge = function () {\n          var t,\n            n,\n            e,\n            i,\n            c = !1,\n            s = arguments[0];\n          \"object\" === r(s) && null !== s && \"v\" in s\n            ? ((t = s.v),\n              (n = s.w),\n              (e = s.name),\n              2 === arguments.length && ((i = arguments[1]), (c = !0)))\n            : ((t = s),\n              (n = arguments[1]),\n              (e = arguments[3]),\n              arguments.length > 2 && ((i = arguments[2]), (c = !0))),\n            (t = \"\" + t),\n            (n = \"\" + n),\n            o.isUndefined(e) || (e = \"\" + e);\n          var p = a(this._isDirected, t, n, e);\n          if (o.has(this._edgeLabels, p))\n            return c && (this._edgeLabels[p] = i), this;\n          if (!o.isUndefined(e) && !this._isMultigraph)\n            throw new Error(\n              \"Cannot set a named edge when isMultigraph = false\",\n            );\n          this.setNode(t),\n            this.setNode(n),\n            (this._edgeLabels[p] = c ? i : this._defaultEdgeLabelFn(t, n, e));\n          var d = f(this._isDirected, t, n, e);\n          return (\n            (t = d.v),\n            (n = d.w),\n            Object.freeze(d),\n            (this._edgeObjs[p] = d),\n            u(this._preds[n], t),\n            u(this._sucs[t], n),\n            (this._in[n][p] = d),\n            (this._out[t][p] = d),\n            this._edgeCount++,\n            this\n          );\n        }),\n        (i.prototype.edge = function (t, n, e) {\n          var r =\n            1 === arguments.length\n              ? s(this._isDirected, arguments[0])\n              : a(this._isDirected, t, n, e);\n          return this._edgeLabels[r];\n        }),\n        (i.prototype.hasEdge = function (t, n, e) {\n          var r =\n            1 === arguments.length\n              ? s(this._isDirected, arguments[0])\n              : a(this._isDirected, t, n, e);\n          return o.has(this._edgeLabels, r);\n        }),\n        (i.prototype.removeEdge = function (t, n, e) {\n          var r =\n              1 === arguments.length\n                ? s(this._isDirected, arguments[0])\n                : a(this._isDirected, t, n, e),\n            o = this._edgeObjs[r];\n          return (\n            o &&\n              ((t = o.v),\n              (n = o.w),\n              delete this._edgeLabels[r],\n              delete this._edgeObjs[r],\n              c(this._preds[n], t),\n              c(this._sucs[t], n),\n              delete this._in[n][r],\n              delete this._out[t][r],\n              this._edgeCount--),\n            this\n          );\n        }),\n        (i.prototype.inEdges = function (t, n) {\n          var e = this._in[t];\n          if (e) {\n            var r = o.values(e);\n            return n\n              ? o.filter(r, function (t) {\n                  return t.v === n;\n                })\n              : r;\n          }\n        }),\n        (i.prototype.outEdges = function (t, n) {\n          var e = this._out[t];\n          if (e) {\n            var r = o.values(e);\n            return n\n              ? o.filter(r, function (t) {\n                  return t.w === n;\n                })\n              : r;\n          }\n        }),\n        (i.prototype.nodeEdges = function (t, n) {\n          var e = this.inEdges(t, n);\n          if (e) return e.concat(this.outEdges(t, n));\n        });\n    },\n    function (t, n, e) {\n      var r = e(33)(e(24), \"Map\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(221),\n        o = e(228),\n        i = e(230),\n        u = e(231),\n        c = e(232);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (\n          var e = -1, r = null == t ? 0 : t.length;\n          ++e < r && !1 !== n(t[e], e, t);\n\n        );\n        return t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return (\n          \"number\" == typeof t && t > -1 && t % 1 == 0 && t <= 9007199254740991\n        );\n      };\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(104),\n          i = \"object\" == r(n) && n && !n.nodeType && n,\n          u = i && \"object\" == r(t) && t && !t.nodeType && t,\n          c = u && u.exports === i && o.process,\n          a = (function () {\n            try {\n              var t = u && u.require && u.require(\"util\").types;\n              return t || (c && c.binding && c.binding(\"util\"));\n            } catch (t) {}\n          })();\n        t.exports = a;\n      }).call(this, e(45)(t));\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(238),\n        i = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (!r(t)) return o(t);\n        var n = [];\n        for (var e in Object(t))\n          i.call(t, e) && \"constructor\" != e && n.push(e);\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(111),\n        o = e(112),\n        i = Object.prototype.propertyIsEnumerable,\n        u = Object.getOwnPropertySymbols,\n        c = u\n          ? function (t) {\n              return null == t\n                ? []\n                : ((t = Object(t)),\n                  r(u(t), function (n) {\n                    return i.call(t, n);\n                  }));\n            }\n          : o;\n      t.exports = c;\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = n.length, o = t.length; ++e < r; ) t[o + e] = n[e];\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(117);\n      t.exports = function (t) {\n        var n = new t.constructor(t.byteLength);\n        return new r(n).set(new r(t)), n;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function () {\n          return t;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(91),\n        o = e(31);\n      t.exports = function (t, n) {\n        return t && r(t, n, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(257)();\n      t.exports = r;\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = -1,\n          e = Array(t.size);\n        return (\n          t.forEach(function (t) {\n            e[++n] = t;\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(17),\n        i = e(41),\n        u = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n        c = /^\\w*$/;\n      t.exports = function (t, n) {\n        if (o(t)) return !1;\n        var e = r(t);\n        return (\n          !(\n            \"number\" != e &&\n            \"symbol\" != e &&\n            \"boolean\" != e &&\n            null != t &&\n            !i(t)\n          ) ||\n          c.test(t) ||\n          !u.test(t) ||\n          (null != n && t in Object(n))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(87),\n        o = e(291);\n      t.exports = function t(n, e, i, u, c) {\n        var a = -1,\n          f = n.length;\n        for (i || (i = o), c || (c = []); ++a < f; ) {\n          var s = n[a];\n          e > 0 && i(s)\n            ? e > 1\n              ? t(s, e - 1, i, u, c)\n              : r(c, s)\n            : u || (c[c.length] = s);\n        }\n        return c;\n      };\n    },\n    function (t, n, e) {\n      var r = e(41);\n      t.exports = function (t, n, e) {\n        for (var o = -1, i = t.length; ++o < i; ) {\n          var u = t[o],\n            c = n(u);\n          if (null != c && (void 0 === a ? c == c && !r(c) : e(c, a)))\n            var a = c,\n              f = u;\n        }\n        return f;\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(54),\n        o = e(82),\n        i = e(59),\n        u = e(233),\n        c = e(239),\n        a = e(109),\n        f = e(110),\n        s = e(242),\n        p = e(243),\n        d = e(114),\n        h = e(244),\n        l = e(40),\n        v = e(248),\n        y = e(249),\n        g = e(119),\n        b = e(17),\n        m = e(39),\n        x = e(253),\n        _ = e(21),\n        w = e(255),\n        E = e(31),\n        j = e(35),\n        k = {};\n      (k[\"[object Arguments]\"] =\n        k[\"[object Array]\"] =\n        k[\"[object ArrayBuffer]\"] =\n        k[\"[object DataView]\"] =\n        k[\"[object Boolean]\"] =\n        k[\"[object Date]\"] =\n        k[\"[object Float32Array]\"] =\n        k[\"[object Float64Array]\"] =\n        k[\"[object Int8Array]\"] =\n        k[\"[object Int16Array]\"] =\n        k[\"[object Int32Array]\"] =\n        k[\"[object Map]\"] =\n        k[\"[object Number]\"] =\n        k[\"[object Object]\"] =\n        k[\"[object RegExp]\"] =\n        k[\"[object Set]\"] =\n        k[\"[object String]\"] =\n        k[\"[object Symbol]\"] =\n        k[\"[object Uint8Array]\"] =\n        k[\"[object Uint8ClampedArray]\"] =\n        k[\"[object Uint16Array]\"] =\n        k[\"[object Uint32Array]\"] =\n          !0),\n        (k[\"[object Error]\"] =\n          k[\"[object Function]\"] =\n          k[\"[object WeakMap]\"] =\n            !1),\n        (t.exports = function t(n, e, S, O, N, I) {\n          var P,\n            M = 1 & e,\n            C = 2 & e,\n            A = 4 & e;\n          if ((S && (P = N ? S(n, O, N, I) : S(n)), void 0 !== P)) return P;\n          if (!_(n)) return n;\n          var L = b(n);\n          if (L) {\n            if (((P = v(n)), !M)) return f(n, P);\n          } else {\n            var T = l(n),\n              z = \"[object Function]\" == T || \"[object GeneratorFunction]\" == T;\n            if (m(n)) return a(n, M);\n            if (\n              \"[object Object]\" == T ||\n              \"[object Arguments]\" == T ||\n              (z && !N)\n            ) {\n              if (((P = C || z ? {} : g(n)), !M))\n                return C ? p(n, c(P, n)) : s(n, u(P, n));\n            } else {\n              if (!k[T]) return N ? n : {};\n              P = y(n, T, M);\n            }\n          }\n          I || (I = new r());\n          var F = I.get(n);\n          if (F) return F;\n          I.set(n, P),\n            w(n)\n              ? n.forEach(function (r) {\n                  P.add(t(r, e, S, r, n, I));\n                })\n              : x(n) &&\n                n.forEach(function (r, o) {\n                  P.set(o, t(r, e, S, o, n, I));\n                });\n          var D = L ? void 0 : (A ? (C ? h : d) : C ? j : E)(n);\n          return (\n            o(D || n, function (r, o) {\n              D && (r = n[(o = r)]), i(P, o, t(r, e, S, o, n, I));\n            }),\n            P\n          );\n        });\n    },\n    function (t, n, e) {\n      (function (n) {\n        function e(t) {\n          return (e =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var r =\n          \"object\" == (void 0 === n ? \"undefined\" : e(n)) &&\n          n &&\n          n.Object === Object &&\n          n;\n        t.exports = r;\n      }).call(this, e(77));\n    },\n    function (t, n) {\n      var e = Function.prototype.toString;\n      t.exports = function (t) {\n        if (null != t) {\n          try {\n            return e.call(t);\n          } catch (t) {}\n          try {\n            return t + \"\";\n          } catch (t) {}\n        }\n        return \"\";\n      };\n    },\n    function (t, n, e) {\n      var r = e(33),\n        o = (function () {\n          try {\n            var t = r(Object, \"defineProperty\");\n            return t({}, \"\", {}), t;\n          } catch (t) {}\n        })();\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(234),\n        o = e(48),\n        i = e(17),\n        u = e(39),\n        c = e(61),\n        a = e(49),\n        f = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n) {\n        var e = i(t),\n          s = !e && o(t),\n          p = !e && !s && u(t),\n          d = !e && !s && !p && a(t),\n          h = e || s || p || d,\n          l = h ? r(t.length, String) : [],\n          v = l.length;\n        for (var y in t)\n          (!n && !f.call(t, y)) ||\n            (h &&\n              (\"length\" == y ||\n                (p && (\"offset\" == y || \"parent\" == y)) ||\n                (d &&\n                  (\"buffer\" == y || \"byteLength\" == y || \"byteOffset\" == y)) ||\n                c(y, v))) ||\n            l.push(y);\n        return l;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return function (e) {\n          return t(n(e));\n        };\n      };\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(24),\n          i = \"object\" == r(n) && n && !n.nodeType && n,\n          u = i && \"object\" == r(t) && t && !t.nodeType && t,\n          c = u && u.exports === i ? o.Buffer : void 0,\n          a = c ? c.allocUnsafe : void 0;\n        t.exports = function (t, n) {\n          if (n) return t.slice();\n          var e = t.length,\n            r = a ? a(e) : new t.constructor(e);\n          return t.copy(r), r;\n        };\n      }).call(this, e(45)(t));\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        var e = -1,\n          r = t.length;\n        for (n || (n = Array(r)); ++e < r; ) n[e] = t[e];\n        return n;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (\n          var e = -1, r = null == t ? 0 : t.length, o = 0, i = [];\n          ++e < r;\n\n        ) {\n          var u = t[e];\n          n(u, e, t) && (i[o++] = u);\n        }\n        return i;\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        return [];\n      };\n    },\n    function (t, n, e) {\n      var r = e(87),\n        o = e(64),\n        i = e(86),\n        u = e(112),\n        c = Object.getOwnPropertySymbols\n          ? function (t) {\n              for (var n = []; t; ) r(n, i(t)), (t = o(t));\n              return n;\n            }\n          : u;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(115),\n        o = e(86),\n        i = e(31);\n      t.exports = function (t) {\n        return r(t, i, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(87),\n        o = e(17);\n      t.exports = function (t, n, e) {\n        var i = n(t);\n        return o(t) ? i : r(i, e(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(33)(e(24), \"Set\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(24).Uint8Array;\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(88);\n      t.exports = function (t, n) {\n        var e = n ? r(t.buffer) : t.buffer;\n        return new t.constructor(e, t.byteOffset, t.length);\n      };\n    },\n    function (t, n, e) {\n      var r = e(120),\n        o = e(64),\n        i = e(63);\n      t.exports = function (t) {\n        return \"function\" != typeof t.constructor || i(t) ? {} : r(o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = Object.create,\n        i = (function () {\n          function t() {}\n          return function (n) {\n            if (!r(n)) return {};\n            if (o) return o(n);\n            t.prototype = n;\n            var e = new t();\n            return (t.prototype = void 0), e;\n          };\n        })();\n      t.exports = i;\n    },\n    function (t, n, e) {\n      t.exports = e(122);\n    },\n    function (t, n, e) {\n      var r = e(82),\n        o = e(65),\n        i = e(123),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : o)(t, i(n));\n      };\n    },\n    function (t, n, e) {\n      var r = e(36);\n      t.exports = function (t) {\n        return \"function\" == typeof t ? t : r;\n      };\n    },\n    function (t, n, e) {\n      var r = e(111),\n        o = e(259),\n        i = e(29),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : o)(t, i(n, 3));\n      };\n    },\n    function (t, n, e) {\n      var r = e(262),\n        o = e(25);\n      t.exports = function t(n, e, i, u, c) {\n        return (\n          n === e ||\n          (null == n || null == e || (!o(n) && !o(e))\n            ? n != n && e != e\n            : r(n, e, i, u, t, c))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(127),\n        o = e(265),\n        i = e(128);\n      t.exports = function (t, n, e, u, c, a) {\n        var f = 1 & e,\n          s = t.length,\n          p = n.length;\n        if (s != p && !(f && p > s)) return !1;\n        var d = a.get(t),\n          h = a.get(n);\n        if (d && h) return d == n && h == t;\n        var l = -1,\n          v = !0,\n          y = 2 & e ? new r() : void 0;\n        for (a.set(t, n), a.set(n, t); ++l < s; ) {\n          var g = t[l],\n            b = n[l];\n          if (u) var m = f ? u(b, g, l, n, t, a) : u(g, b, l, t, n, a);\n          if (void 0 !== m) {\n            if (m) continue;\n            v = !1;\n            break;\n          }\n          if (y) {\n            if (\n              !o(n, function (t, n) {\n                if (!i(y, n) && (g === t || c(g, t, e, u, a))) return y.push(n);\n              })\n            ) {\n              v = !1;\n              break;\n            }\n          } else if (g !== b && !c(g, b, e, u, a)) {\n            v = !1;\n            break;\n          }\n        }\n        return a.delete(t), a.delete(n), v;\n      };\n    },\n    function (t, n, e) {\n      var r = e(81),\n        o = e(263),\n        i = e(264);\n      function u(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.__data__ = new r(); ++n < e; ) this.add(t[n]);\n      }\n      (u.prototype.add = u.prototype.push = o),\n        (u.prototype.has = i),\n        (t.exports = u);\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t.has(n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t) {\n        return t == t && !r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return function (e) {\n          return null != e && e[t] === n && (void 0 !== n || t in Object(e));\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(275);\n      t.exports = function (t) {\n        return null == t ? \"\" : r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(276),\n        o = e(133);\n      t.exports = function (t, n) {\n        return null != t && o(t, n, r);\n      };\n    },\n    function (t, n, e) {\n      var r = e(67),\n        o = e(48),\n        i = e(17),\n        u = e(61),\n        c = e(83),\n        a = e(50);\n      t.exports = function (t, n, e) {\n        for (var f = -1, s = (n = r(n, t)).length, p = !1; ++f < s; ) {\n          var d = a(n[f]);\n          if (!(p = null != t && e(t, d))) break;\n          t = t[d];\n        }\n        return p || ++f != s\n          ? p\n          : !!(s = null == t ? 0 : t.length) &&\n              c(s) &&\n              u(d, s) &&\n              (i(t) || o(t));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n) {\n          return null == n ? void 0 : n[t];\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(279),\n        o = e(133);\n      t.exports = function (t, n) {\n        return null != t && o(t, n, r);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return void 0 === t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(68),\n        o = e(29),\n        i = e(138),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : i)(t, o(n, 3));\n      };\n    },\n    function (t, n, e) {\n      var r = e(65),\n        o = e(28);\n      t.exports = function (t, n) {\n        var e = -1,\n          i = o(t) ? Array(t.length) : [];\n        return (\n          r(t, function (t, r, o) {\n            i[++e] = n(t, r, o);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(281),\n        o = e(65),\n        i = e(29),\n        u = e(282),\n        c = e(17);\n      t.exports = function (t, n, e) {\n        var a = c(t) ? r : u,\n          f = arguments.length < 3;\n        return a(t, i(n, 4), e, f, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(292),\n        o = Math.max;\n      t.exports = function (t, n, e) {\n        return (\n          (n = o(void 0 === n ? t.length - 1 : n, 0)),\n          function () {\n            for (\n              var i = arguments, u = -1, c = o(i.length - n, 0), a = Array(c);\n              ++u < c;\n\n            )\n              a[u] = i[n + u];\n            u = -1;\n            for (var f = Array(n + 1); ++u < n; ) f[u] = i[u];\n            return (f[n] = e(a)), r(t, this, f);\n          }\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(293),\n        o = e(294)(r);\n      t.exports = o;\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r) {\n        for (var o = t.length, i = e + (r ? 1 : -1); r ? i-- : ++i < o; )\n          if (n(t[i], i, t)) return i;\n        return -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(28),\n        o = e(25);\n      t.exports = function (t) {\n        return o(t) && r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(303),\n        o = e(31);\n      t.exports = function (t) {\n        return null == t ? [] : r(t, o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(20),\n        o = e(146);\n      t.exports = function (t, n, e, r) {\n        return (function (t, n, e, r) {\n          var i,\n            u,\n            c = {},\n            a = new o(),\n            f = function (t) {\n              var n = t.v !== i ? t.v : t.w,\n                r = c[n],\n                o = e(t),\n                f = u.distance + o;\n              if (o < 0)\n                throw new Error(\n                  \"dijkstra does not allow negative edge weights. Bad edge: \" +\n                    t +\n                    \" Weight: \" +\n                    o,\n                );\n              f < r.distance &&\n                ((r.distance = f), (r.predecessor = i), a.decrease(n, f));\n            };\n          t.nodes().forEach(function (t) {\n            var e = t === n ? 0 : Number.POSITIVE_INFINITY;\n            (c[t] = { distance: e }), a.add(t, e);\n          });\n          for (\n            ;\n            a.size() > 0 &&\n            ((i = a.removeMin()),\n            (u = c[i]).distance !== Number.POSITIVE_INFINITY);\n\n          )\n            r(i).forEach(f);\n          return c;\n        })(\n          t,\n          String(n),\n          e || i,\n          r ||\n            function (n) {\n              return t.outEdges(n);\n            },\n        );\n      };\n      var i = r.constant(1);\n    },\n    function (t, n, e) {\n      var r = e(20);\n      function o() {\n        (this._arr = []), (this._keyIndices = {});\n      }\n      (t.exports = o),\n        (o.prototype.size = function () {\n          return this._arr.length;\n        }),\n        (o.prototype.keys = function () {\n          return this._arr.map(function (t) {\n            return t.key;\n          });\n        }),\n        (o.prototype.has = function (t) {\n          return r.has(this._keyIndices, t);\n        }),\n        (o.prototype.priority = function (t) {\n          var n = this._keyIndices[t];\n          if (void 0 !== n) return this._arr[n].priority;\n        }),\n        (o.prototype.min = function () {\n          if (0 === this.size()) throw new Error(\"Queue underflow\");\n          return this._arr[0].key;\n        }),\n        (o.prototype.add = function (t, n) {\n          var e = this._keyIndices;\n          if (((t = String(t)), !r.has(e, t))) {\n            var o = this._arr,\n              i = o.length;\n            return (\n              (e[t] = i), o.push({ key: t, priority: n }), this._decrease(i), !0\n            );\n          }\n          return !1;\n        }),\n        (o.prototype.removeMin = function () {\n          this._swap(0, this._arr.length - 1);\n          var t = this._arr.pop();\n          return delete this._keyIndices[t.key], this._heapify(0), t.key;\n        }),\n        (o.prototype.decrease = function (t, n) {\n          var e = this._keyIndices[t];\n          if (n > this._arr[e].priority)\n            throw new Error(\n              \"New priority is greater than current priority. Key: \" +\n                t +\n                \" Old: \" +\n                this._arr[e].priority +\n                \" New: \" +\n                n,\n            );\n          (this._arr[e].priority = n), this._decrease(e);\n        }),\n        (o.prototype._heapify = function (t) {\n          var n = this._arr,\n            e = 2 * t,\n            r = e + 1,\n            o = t;\n          e < n.length &&\n            ((o = n[e].priority < n[o].priority ? e : o),\n            r < n.length && (o = n[r].priority < n[o].priority ? r : o),\n            o !== t && (this._swap(t, o), this._heapify(o)));\n        }),\n        (o.prototype._decrease = function (t) {\n          for (\n            var n, e = this._arr, r = e[t].priority;\n            0 !== t && !(e[(n = t >> 1)].priority < r);\n\n          )\n            this._swap(t, n), (t = n);\n        }),\n        (o.prototype._swap = function (t, n) {\n          var e = this._arr,\n            r = this._keyIndices,\n            o = e[t],\n            i = e[n];\n          (e[t] = i), (e[n] = o), (r[i.key] = t), (r[o.key] = n);\n        });\n    },\n    function (t, n, e) {\n      var r = e(20);\n      t.exports = function (t) {\n        var n = 0,\n          e = [],\n          o = {},\n          i = [];\n        return (\n          t.nodes().forEach(function (u) {\n            r.has(o, u) ||\n              (function u(c) {\n                var a = (o[c] = { onStack: !0, lowlink: n, index: n++ });\n                if (\n                  (e.push(c),\n                  t.successors(c).forEach(function (t) {\n                    r.has(o, t)\n                      ? o[t].onStack &&\n                        (a.lowlink = Math.min(a.lowlink, o[t].index))\n                      : (u(t), (a.lowlink = Math.min(a.lowlink, o[t].lowlink)));\n                  }),\n                  a.lowlink === a.index)\n                ) {\n                  var f,\n                    s = [];\n                  do {\n                    (f = e.pop()), (o[f].onStack = !1), s.push(f);\n                  } while (c !== f);\n                  i.push(s);\n                }\n              })(u);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(20);\n      function o(t) {\n        var n = {},\n          e = {},\n          o = [];\n        if (\n          (r.each(t.sinks(), function u(c) {\n            if (r.has(e, c)) throw new i();\n            r.has(n, c) ||\n              ((e[c] = !0),\n              (n[c] = !0),\n              r.each(t.predecessors(c), u),\n              delete e[c],\n              o.push(c));\n          }),\n          r.size(n) !== t.nodeCount())\n        )\n          throw new i();\n        return o;\n      }\n      function i() {}\n      (t.exports = o), (o.CycleException = i), (i.prototype = new Error());\n    },\n    function (t, n, e) {\n      var r = e(20);\n      t.exports = function (t, n, e) {\n        r.isArray(n) || (n = [n]);\n        var o = (t.isDirected() ? t.successors : t.neighbors).bind(t),\n          i = [],\n          u = {};\n        return (\n          r.each(n, function (n) {\n            if (!t.hasNode(n))\n              throw new Error(\"Graph does not have node: \" + n);\n            !(function t(n, e, o, i, u, c) {\n              r.has(i, e) ||\n                ((i[e] = !0),\n                o || c.push(e),\n                r.each(u(e), function (e) {\n                  t(n, e, o, i, u, c);\n                }),\n                o && c.push(e));\n            })(t, n, \"post\" === e, u, o, i);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(322);\n      t.exports = function (t) {\n        return t\n          ? (t = r(t)) === 1 / 0 || t === -1 / 0\n            ? 17976931348623157e292 * (t < 0 ? -1 : 1)\n            : t == t\n            ? t\n            : 0\n          : 0 === t\n          ? t\n          : 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(94);\n      t.exports = function (t) {\n        return (null == t ? 0 : t.length) ? r(t, 1) : [];\n      };\n    },\n    function (t, n, e) {\n      var r = e(60),\n        o = e(37);\n      t.exports = function (t, n, e) {\n        ((void 0 !== e && !o(t[n], e)) || (void 0 === e && !(n in t))) &&\n          r(t, n, e);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        if (\n          (\"constructor\" !== n || \"function\" != typeof t[n]) &&\n          \"__proto__\" != n\n        )\n          return t[n];\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t < n;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(23).Graph,\n        i = e(71).slack;\n      function u(t, n) {\n        return (\n          r.forEach(t.nodes(), function e(o) {\n            r.forEach(n.nodeEdges(o), function (r) {\n              var u = r.v,\n                c = o === u ? r.w : u;\n              t.hasNode(c) ||\n                i(n, r) ||\n                (t.setNode(c, {}), t.setEdge(o, c, {}), e(c));\n            });\n          }),\n          t.nodeCount()\n        );\n      }\n      function c(t, n) {\n        return r.minBy(n.edges(), function (e) {\n          if (t.hasNode(e.v) !== t.hasNode(e.w)) return i(n, e);\n        });\n      }\n      function a(t, n, e) {\n        r.forEach(t.nodes(), function (t) {\n          n.node(t).rank += e;\n        });\n      }\n      t.exports = function (t) {\n        var n,\n          e,\n          r = new o({ directed: !1 }),\n          f = t.nodes()[0],\n          s = t.nodeCount();\n        r.setNode(f, {});\n        for (; u(r, t) < s; )\n          (n = c(r, t)), (e = r.hasNode(n.v) ? i(t, n) : -i(t, n)), a(r, t, e);\n        return r;\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, n) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, n) {\n                  t.__proto__ = n;\n                }) ||\n              function (t, n) {\n                for (var e in n)\n                  Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);\n              })(t, n);\n          }),\n          function (t, n) {\n            if (\"function\" != typeof n && null !== n)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(n) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            r(t, n),\n              (t.prototype =\n                null === n\n                  ? Object.create(n)\n                  : ((e.prototype = n.prototype), new e()));\n          }),\n        i =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.DagreLayout = void 0);\n      var u = i(e(201)),\n        c = e(10),\n        a = (function (t) {\n          function n(n) {\n            var e = t.call(this) || this;\n            return (\n              (e.rankdir = \"TB\"),\n              (e.nodesep = 50),\n              (e.ranksep = 50),\n              (e.controlPoints = !1),\n              (e.sortByCombo = !1),\n              (e.nodes = []),\n              (e.edges = []),\n              (e.onLayoutEnd = function () {}),\n              e.updateCfg(n),\n              e\n            );\n          }\n          return (\n            o(n, t),\n            (n.prototype.getDefaultCfg = function () {\n              return {\n                rankdir: \"TB\",\n                align: void 0,\n                nodeSize: void 0,\n                nodesepFunc: void 0,\n                ranksepFunc: void 0,\n                nodesep: 50,\n                ranksep: 50,\n                controlPoints: !1,\n              };\n            }),\n            (n.prototype.execute = function () {\n              var t = this,\n                n = this,\n                e = n.nodes,\n                r = n.nodeSize,\n                o = n.rankdir,\n                i = n.combos;\n              if (e) {\n                var a,\n                  s = n.edges || [],\n                  p = new u.default.graphlib.Graph({\n                    multigraph: !0,\n                    compound: !0,\n                  });\n                a = r\n                  ? c.isArray(r)\n                    ? function () {\n                        return r;\n                      }\n                    : function () {\n                        return [r, r];\n                      }\n                  : function (t) {\n                      return t.size\n                        ? c.isArray(t.size)\n                          ? t.size\n                          : [t.size, t.size]\n                        : [40, 40];\n                    };\n                var d = f(n.nodesepFunc, n.nodesep, 50),\n                  h = f(n.ranksepFunc, n.ranksep, 50);\n                (\"LR\" !== o && \"RL\" !== o) ||\n                  ((d = f(n.ranksepFunc, n.ranksep, 50)),\n                  (h = f(n.nodesepFunc, n.nodesep, 50))),\n                  p.setDefaultEdgeLabel(function () {\n                    return {};\n                  }),\n                  p.setGraph(n);\n                var l,\n                  v = {};\n                return (\n                  e.forEach(function (n) {\n                    var e = a(n),\n                      r = h(n),\n                      o = d(n),\n                      i = e[0] + 2 * o,\n                      u = e[1] + 2 * r;\n                    p.setNode(n.id, { width: i, height: u }),\n                      t.sortByCombo &&\n                        n.comboId &&\n                        (v[n.comboId] ||\n                          ((v[n.comboId] = !0), p.setNode(n.comboId, {})),\n                        p.setParent(n.id, n.comboId));\n                  }),\n                  this.sortByCombo &&\n                    i &&\n                    i.forEach(function (t) {\n                      t.parentId &&\n                        (v[t.parentId] ||\n                          ((v[t.parentId] = !0), p.setNode(t.parentId, {})),\n                        p.setParent(t.id, t.parentId));\n                    }),\n                  s.forEach(function (t) {\n                    p.setEdge(t.source, t.target, { weight: t.weight || 1 });\n                  }),\n                  u.default.layout(p),\n                  p.nodes().forEach(function (t) {\n                    l = p.node(t);\n                    var n = e.findIndex(function (n) {\n                      return n.id === t;\n                    });\n                    e[n] && ((e[n].x = l.x), (e[n].y = l.y));\n                  }),\n                  p.edges().forEach(function (t) {\n                    l = p.edge(t);\n                    var e = s.findIndex(function (n) {\n                      return n.source === t.v && n.target === t.w;\n                    });\n                    n.controlPoints &&\n                      \"loop\" !== s[e].type &&\n                      (s[e].controlPoints = l.points.slice(\n                        1,\n                        l.points.length - 1,\n                      ));\n                  }),\n                  n.onLayoutEnd && n.onLayoutEnd(),\n                  { nodes: e, edges: s }\n                );\n              }\n            }),\n            (n.prototype.getType = function () {\n              return \"dagre\";\n            }),\n            n\n          );\n        })(e(9).Base);\n      function f(t, n, e) {\n        return (\n          t ||\n          (c.isNumber(n)\n            ? function () {\n                return n;\n              }\n            : function () {\n                return e;\n              })\n        );\n      }\n      n.DagreLayout = a;\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      e.r(n);\n      var r = e(161);\n      n.default = r.DagreLayout;\n    },\n    function (t, n, e) {\n      t.exports = {\n        graphlib: e(23),\n        layout: e(315),\n        debug: e(376),\n        util: { time: e(19).time, notime: e(19).notime },\n        version: e(377),\n      };\n    },\n    function (t, n, e) {\n      var r = e(203);\n      t.exports = {\n        Graph: r.Graph,\n        json: e(305),\n        alg: e(306),\n        version: r.version,\n      };\n    },\n    function (t, n, e) {\n      t.exports = { Graph: e(79), version: e(304) };\n    },\n    function (t, n, e) {\n      var r = e(103);\n      t.exports = function (t) {\n        return r(t, 4);\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        (this.__data__ = []), (this.size = 0);\n      };\n    },\n    function (t, n, e) {\n      var r = e(56),\n        o = Array.prototype.splice;\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = r(n, t);\n        return (\n          !(e < 0) &&\n          (e == n.length - 1 ? n.pop() : o.call(n, e, 1), --this.size, !0)\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(56);\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = r(n, t);\n        return e < 0 ? void 0 : n[e][1];\n      };\n    },\n    function (t, n, e) {\n      var r = e(56);\n      t.exports = function (t) {\n        return r(this.__data__, t) > -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(56);\n      t.exports = function (t, n) {\n        var e = this.__data__,\n          o = r(e, t);\n        return o < 0 ? (++this.size, e.push([t, n])) : (e[o][1] = n), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(55);\n      t.exports = function () {\n        (this.__data__ = new r()), (this.size = 0);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = n.delete(t);\n        return (this.size = n.size), e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.get(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.has(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(55),\n        o = e(80),\n        i = e(81);\n      t.exports = function (t, n) {\n        var e = this.__data__;\n        if (e instanceof r) {\n          var u = e.__data__;\n          if (!o || u.length < 199)\n            return u.push([t, n]), (this.size = ++e.size), this;\n          e = this.__data__ = new i(u);\n        }\n        return e.set(t, n), (this.size = e.size), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(46),\n        o = e(218),\n        i = e(21),\n        u = e(105),\n        c = /^\\[object .+?Constructor\\]$/,\n        a = Function.prototype,\n        f = Object.prototype,\n        s = a.toString,\n        p = f.hasOwnProperty,\n        d = RegExp(\n          \"^\" +\n            s\n              .call(p)\n              .replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\")\n              .replace(\n                /hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\n                \"$1.*?\",\n              ) +\n            \"$\",\n        );\n      t.exports = function (t) {\n        return !(!i(t) || o(t)) && (r(t) ? d : c).test(u(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = Object.prototype,\n        i = o.hasOwnProperty,\n        u = o.toString,\n        c = r ? r.toStringTag : void 0;\n      t.exports = function (t) {\n        var n = i.call(t, c),\n          e = t[c];\n        try {\n          t[c] = void 0;\n          var r = !0;\n        } catch (t) {}\n        var o = u.call(t);\n        return r && (n ? (t[c] = e) : delete t[c]), o;\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype.toString;\n      t.exports = function (t) {\n        return e.call(t);\n      };\n    },\n    function (t, n, e) {\n      var r,\n        o = e(219),\n        i = (r = /[^.]+$/.exec((o && o.keys && o.keys.IE_PROTO) || \"\"))\n          ? \"Symbol(src)_1.\" + r\n          : \"\";\n      t.exports = function (t) {\n        return !!i && i in t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(24)[\"__core-js_shared__\"];\n      t.exports = r;\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return null == t ? void 0 : t[n];\n      };\n    },\n    function (t, n, e) {\n      var r = e(222),\n        o = e(55),\n        i = e(80);\n      t.exports = function () {\n        (this.size = 0),\n          (this.__data__ = {\n            hash: new r(),\n            map: new (i || o)(),\n            string: new r(),\n          });\n      };\n    },\n    function (t, n, e) {\n      var r = e(223),\n        o = e(224),\n        i = e(225),\n        u = e(226),\n        c = e(227);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n, e) {\n      var r = e(57);\n      t.exports = function () {\n        (this.__data__ = r ? r(null) : {}), (this.size = 0);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = this.has(t) && delete this.__data__[t];\n        return (this.size -= n ? 1 : 0), n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(57),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = this.__data__;\n        if (r) {\n          var e = n[t];\n          return \"__lodash_hash_undefined__\" === e ? void 0 : e;\n        }\n        return o.call(n, t) ? n[t] : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(57),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = this.__data__;\n        return r ? void 0 !== n[t] : o.call(n, t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(57);\n      t.exports = function (t, n) {\n        var e = this.__data__;\n        return (\n          (this.size += this.has(t) ? 0 : 1),\n          (e[t] = r && void 0 === n ? \"__lodash_hash_undefined__\" : n),\n          this\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(58);\n      t.exports = function (t) {\n        var n = r(this, t).delete(t);\n        return (this.size -= n ? 1 : 0), n;\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        var n = e(t);\n        return \"string\" == n || \"number\" == n || \"symbol\" == n || \"boolean\" == n\n          ? \"__proto__\" !== t\n          : null === t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(58);\n      t.exports = function (t) {\n        return r(this, t).get(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(58);\n      t.exports = function (t) {\n        return r(this, t).has(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(58);\n      t.exports = function (t, n) {\n        var e = r(this, t),\n          o = e.size;\n        return e.set(t, n), (this.size += e.size == o ? 0 : 1), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(47),\n        o = e(31);\n      t.exports = function (t, n) {\n        return t && r(n, o(n), t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = Array(t); ++e < t; ) r[e] = n(e);\n        return r;\n      };\n    },\n    function (t, n, e) {\n      var r = e(34),\n        o = e(25);\n      t.exports = function (t) {\n        return o(t) && \"[object Arguments]\" == r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(34),\n        o = e(83),\n        i = e(25),\n        u = {};\n      (u[\"[object Float32Array]\"] =\n        u[\"[object Float64Array]\"] =\n        u[\"[object Int8Array]\"] =\n        u[\"[object Int16Array]\"] =\n        u[\"[object Int32Array]\"] =\n        u[\"[object Uint8Array]\"] =\n        u[\"[object Uint8ClampedArray]\"] =\n        u[\"[object Uint16Array]\"] =\n        u[\"[object Uint32Array]\"] =\n          !0),\n        (u[\"[object Arguments]\"] =\n          u[\"[object Array]\"] =\n          u[\"[object ArrayBuffer]\"] =\n          u[\"[object Boolean]\"] =\n          u[\"[object DataView]\"] =\n          u[\"[object Date]\"] =\n          u[\"[object Error]\"] =\n          u[\"[object Function]\"] =\n          u[\"[object Map]\"] =\n          u[\"[object Number]\"] =\n          u[\"[object Object]\"] =\n          u[\"[object RegExp]\"] =\n          u[\"[object Set]\"] =\n          u[\"[object String]\"] =\n          u[\"[object WeakMap]\"] =\n            !1),\n        (t.exports = function (t) {\n          return i(t) && o(t.length) && !!u[r(t)];\n        });\n    },\n    function (t, n, e) {\n      var r = e(108)(Object.keys, Object);\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(47),\n        o = e(35);\n      t.exports = function (t, n) {\n        return t && r(n, o(n), t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(63),\n        i = e(241),\n        u = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (!r(t)) return i(t);\n        var n = o(t),\n          e = [];\n        for (var c in t)\n          (\"constructor\" != c || (!n && u.call(t, c))) && e.push(c);\n        return e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = [];\n        if (null != t) for (var e in Object(t)) n.push(e);\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(47),\n        o = e(86);\n      t.exports = function (t, n) {\n        return r(t, o(t), n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(47),\n        o = e(113);\n      t.exports = function (t, n) {\n        return r(t, o(t), n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(115),\n        o = e(113),\n        i = e(35);\n      t.exports = function (t) {\n        return r(t, i, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(33)(e(24), \"DataView\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(33)(e(24), \"Promise\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(33)(e(24), \"WeakMap\");\n      t.exports = r;\n    },\n    function (t, n) {\n      var e = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = t.length,\n          r = new t.constructor(n);\n        return (\n          n &&\n            \"string\" == typeof t[0] &&\n            e.call(t, \"index\") &&\n            ((r.index = t.index), (r.input = t.input)),\n          r\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(88),\n        o = e(250),\n        i = e(251),\n        u = e(252),\n        c = e(118);\n      t.exports = function (t, n, e) {\n        var a = t.constructor;\n        switch (n) {\n          case \"[object ArrayBuffer]\":\n            return r(t);\n          case \"[object Boolean]\":\n          case \"[object Date]\":\n            return new a(+t);\n          case \"[object DataView]\":\n            return o(t, e);\n          case \"[object Float32Array]\":\n          case \"[object Float64Array]\":\n          case \"[object Int8Array]\":\n          case \"[object Int16Array]\":\n          case \"[object Int32Array]\":\n          case \"[object Uint8Array]\":\n          case \"[object Uint8ClampedArray]\":\n          case \"[object Uint16Array]\":\n          case \"[object Uint32Array]\":\n            return c(t, e);\n          case \"[object Map]\":\n            return new a();\n          case \"[object Number]\":\n          case \"[object String]\":\n            return new a(t);\n          case \"[object RegExp]\":\n            return i(t);\n          case \"[object Set]\":\n            return new a();\n          case \"[object Symbol]\":\n            return u(t);\n        }\n      };\n    },\n    function (t, n, e) {\n      var r = e(88);\n      t.exports = function (t, n) {\n        var e = n ? r(t.buffer) : t.buffer;\n        return new t.constructor(e, t.byteOffset, t.byteLength);\n      };\n    },\n    function (t, n) {\n      var e = /\\w*$/;\n      t.exports = function (t) {\n        var n = new t.constructor(t.source, e.exec(t));\n        return (n.lastIndex = t.lastIndex), n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = r ? r.prototype : void 0,\n        i = o ? o.valueOf : void 0;\n      t.exports = function (t) {\n        return i ? Object(i.call(t)) : {};\n      };\n    },\n    function (t, n, e) {\n      var r = e(254),\n        o = e(62),\n        i = e(84),\n        u = i && i.isMap,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(40),\n        o = e(25);\n      t.exports = function (t) {\n        return o(t) && \"[object Map]\" == r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(256),\n        o = e(62),\n        i = e(84),\n        u = i && i.isSet,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(40),\n        o = e(25);\n      t.exports = function (t) {\n        return o(t) && \"[object Set]\" == r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n, e, r) {\n          for (var o = -1, i = Object(n), u = r(n), c = u.length; c--; ) {\n            var a = u[t ? c : ++o];\n            if (!1 === e(i[a], a, i)) break;\n          }\n          return n;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(28);\n      t.exports = function (t, n) {\n        return function (e, o) {\n          if (null == e) return e;\n          if (!r(e)) return t(e, o);\n          for (\n            var i = e.length, u = n ? i : -1, c = Object(e);\n            (n ? u-- : ++u < i) && !1 !== o(c[u], u, c);\n\n          );\n          return e;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(65);\n      t.exports = function (t, n) {\n        var e = [];\n        return (\n          r(t, function (t, r, o) {\n            n(t, r, o) && e.push(t);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(261),\n        o = e(269),\n        i = e(130);\n      t.exports = function (t) {\n        var n = o(t);\n        return 1 == n.length && n[0][2]\n          ? i(n[0][0], n[0][1])\n          : function (e) {\n              return e === t || r(e, t, n);\n            };\n      };\n    },\n    function (t, n, e) {\n      var r = e(54),\n        o = e(125);\n      t.exports = function (t, n, e, i) {\n        var u = e.length,\n          c = u,\n          a = !i;\n        if (null == t) return !c;\n        for (t = Object(t); u--; ) {\n          var f = e[u];\n          if (a && f[2] ? f[1] !== t[f[0]] : !(f[0] in t)) return !1;\n        }\n        for (; ++u < c; ) {\n          var s = (f = e[u])[0],\n            p = t[s],\n            d = f[1];\n          if (a && f[2]) {\n            if (void 0 === p && !(s in t)) return !1;\n          } else {\n            var h = new r();\n            if (i) var l = i(p, d, s, t, n, h);\n            if (!(void 0 === l ? o(d, p, 3, i, h) : l)) return !1;\n          }\n        }\n        return !0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(54),\n        o = e(126),\n        i = e(266),\n        u = e(268),\n        c = e(40),\n        a = e(17),\n        f = e(39),\n        s = e(49),\n        p = \"[object Object]\",\n        d = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e, h, l, v) {\n        var y = a(t),\n          g = a(n),\n          b = y ? \"[object Array]\" : c(t),\n          m = g ? \"[object Array]\" : c(n),\n          x = (b = \"[object Arguments]\" == b ? p : b) == p,\n          _ = (m = \"[object Arguments]\" == m ? p : m) == p,\n          w = b == m;\n        if (w && f(t)) {\n          if (!f(n)) return !1;\n          (y = !0), (x = !1);\n        }\n        if (w && !x)\n          return (\n            v || (v = new r()),\n            y || s(t) ? o(t, n, e, h, l, v) : i(t, n, b, e, h, l, v)\n          );\n        if (!(1 & e)) {\n          var E = x && d.call(t, \"__wrapped__\"),\n            j = _ && d.call(n, \"__wrapped__\");\n          if (E || j) {\n            var k = E ? t.value() : t,\n              S = j ? n.value() : n;\n            return v || (v = new r()), l(k, S, e, h, v);\n          }\n        }\n        return !!w && (v || (v = new r()), u(t, n, e, h, l, v));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.set(t, \"__lodash_hash_undefined__\"), this;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.has(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = null == t ? 0 : t.length; ++e < r; )\n          if (n(t[e], e, t)) return !0;\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = e(117),\n        i = e(37),\n        u = e(126),\n        c = e(267),\n        a = e(92),\n        f = r ? r.prototype : void 0,\n        s = f ? f.valueOf : void 0;\n      t.exports = function (t, n, e, r, f, p, d) {\n        switch (e) {\n          case \"[object DataView]\":\n            if (t.byteLength != n.byteLength || t.byteOffset != n.byteOffset)\n              return !1;\n            (t = t.buffer), (n = n.buffer);\n          case \"[object ArrayBuffer]\":\n            return !(t.byteLength != n.byteLength || !p(new o(t), new o(n)));\n          case \"[object Boolean]\":\n          case \"[object Date]\":\n          case \"[object Number]\":\n            return i(+t, +n);\n          case \"[object Error]\":\n            return t.name == n.name && t.message == n.message;\n          case \"[object RegExp]\":\n          case \"[object String]\":\n            return t == n + \"\";\n          case \"[object Map]\":\n            var h = c;\n          case \"[object Set]\":\n            var l = 1 & r;\n            if ((h || (h = a), t.size != n.size && !l)) return !1;\n            var v = d.get(t);\n            if (v) return v == n;\n            (r |= 2), d.set(t, n);\n            var y = u(h(t), h(n), r, f, p, d);\n            return d.delete(t), y;\n          case \"[object Symbol]\":\n            if (s) return s.call(t) == s.call(n);\n        }\n        return !1;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = -1,\n          e = Array(t.size);\n        return (\n          t.forEach(function (t, r) {\n            e[++n] = [r, t];\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(114),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e, i, u, c) {\n        var a = 1 & e,\n          f = r(t),\n          s = f.length;\n        if (s != r(n).length && !a) return !1;\n        for (var p = s; p--; ) {\n          var d = f[p];\n          if (!(a ? d in n : o.call(n, d))) return !1;\n        }\n        var h = c.get(t),\n          l = c.get(n);\n        if (h && l) return h == n && l == t;\n        var v = !0;\n        c.set(t, n), c.set(n, t);\n        for (var y = a; ++p < s; ) {\n          var g = t[(d = f[p])],\n            b = n[d];\n          if (i) var m = a ? i(b, g, d, n, t, c) : i(g, b, d, t, n, c);\n          if (!(void 0 === m ? g === b || u(g, b, e, i, c) : m)) {\n            v = !1;\n            break;\n          }\n          y || (y = \"constructor\" == d);\n        }\n        if (v && !y) {\n          var x = t.constructor,\n            _ = n.constructor;\n          x == _ ||\n            !(\"constructor\" in t) ||\n            !(\"constructor\" in n) ||\n            (\"function\" == typeof x &&\n              x instanceof x &&\n              \"function\" == typeof _ &&\n              _ instanceof _) ||\n            (v = !1);\n        }\n        return c.delete(t), c.delete(n), v;\n      };\n    },\n    function (t, n, e) {\n      var r = e(129),\n        o = e(31);\n      t.exports = function (t) {\n        for (var n = o(t), e = n.length; e--; ) {\n          var i = n[e],\n            u = t[i];\n          n[e] = [i, u, r(u)];\n        }\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(125),\n        o = e(271),\n        i = e(132),\n        u = e(93),\n        c = e(129),\n        a = e(130),\n        f = e(50);\n      t.exports = function (t, n) {\n        return u(t) && c(n)\n          ? a(f(t), n)\n          : function (e) {\n              var u = o(e, t);\n              return void 0 === u && u === n ? i(e, t) : r(n, u, 3);\n            };\n      };\n    },\n    function (t, n, e) {\n      var r = e(66);\n      t.exports = function (t, n, e) {\n        var o = null == t ? void 0 : r(t, n);\n        return void 0 === o ? e : o;\n      };\n    },\n    function (t, n, e) {\n      var r = e(273),\n        o =\n          /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,\n        i = /\\\\(\\\\)?/g,\n        u = r(function (t) {\n          var n = [];\n          return (\n            46 === t.charCodeAt(0) && n.push(\"\"),\n            t.replace(o, function (t, e, r, o) {\n              n.push(r ? o.replace(i, \"$1\") : e || t);\n            }),\n            n\n          );\n        });\n      t.exports = u;\n    },\n    function (t, n, e) {\n      var r = e(274);\n      t.exports = function (t) {\n        var n = r(t, function (t) {\n            return 500 === e.size && e.clear(), t;\n          }),\n          e = n.cache;\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(81);\n      function o(t, n) {\n        if (\"function\" != typeof t || (null != n && \"function\" != typeof n))\n          throw new TypeError(\"Expected a function\");\n        var e = function e() {\n          var r = arguments,\n            o = n ? n.apply(this, r) : r[0],\n            i = e.cache;\n          if (i.has(o)) return i.get(o);\n          var u = t.apply(this, r);\n          return (e.cache = i.set(o, u) || i), u;\n        };\n        return (e.cache = new (o.Cache || r)()), e;\n      }\n      (o.Cache = r), (t.exports = o);\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = e(68),\n        i = e(17),\n        u = e(41),\n        c = r ? r.prototype : void 0,\n        a = c ? c.toString : void 0;\n      t.exports = function t(n) {\n        if (\"string\" == typeof n) return n;\n        if (i(n)) return o(n, t) + \"\";\n        if (u(n)) return a ? a.call(n) : \"\";\n        var e = n + \"\";\n        return \"0\" == e && 1 / n == -1 / 0 ? \"-0\" : e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return null != t && n in Object(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(134),\n        o = e(278),\n        i = e(93),\n        u = e(50);\n      t.exports = function (t) {\n        return i(t) ? r(u(t)) : o(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(66);\n      t.exports = function (t) {\n        return function (n) {\n          return r(n, t);\n        };\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n) {\n        return null != t && e.call(t, n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(85),\n        o = e(40),\n        i = e(48),\n        u = e(17),\n        c = e(28),\n        a = e(39),\n        f = e(63),\n        s = e(49),\n        p = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (null == t) return !0;\n        if (\n          c(t) &&\n          (u(t) ||\n            \"string\" == typeof t ||\n            \"function\" == typeof t.splice ||\n            a(t) ||\n            s(t) ||\n            i(t))\n        )\n          return !t.length;\n        var n = o(t);\n        if (\"[object Map]\" == n || \"[object Set]\" == n) return !t.size;\n        if (f(t)) return !r(t).length;\n        for (var e in t) if (p.call(t, e)) return !1;\n        return !0;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r) {\n        var o = -1,\n          i = null == t ? 0 : t.length;\n        for (r && i && (e = t[++o]); ++o < i; ) e = n(e, t[o], o, t);\n        return e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r, o) {\n        return (\n          o(t, function (t, o, i) {\n            e = r ? ((r = !1), t) : n(e, t, o, i);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(85),\n        o = e(40),\n        i = e(28),\n        u = e(284),\n        c = e(285);\n      t.exports = function (t) {\n        if (null == t) return 0;\n        if (i(t)) return u(t) ? c(t) : t.length;\n        var n = o(t);\n        return \"[object Map]\" == n || \"[object Set]\" == n\n          ? t.size\n          : r(t).length;\n      };\n    },\n    function (t, n, e) {\n      var r = e(34),\n        o = e(17),\n        i = e(25);\n      t.exports = function (t) {\n        return (\n          \"string\" == typeof t || (!o(t) && i(t) && \"[object String]\" == r(t))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(286),\n        o = e(287),\n        i = e(288);\n      t.exports = function (t) {\n        return o(t) ? i(t) : r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(134)(\"length\");\n      t.exports = r;\n    },\n    function (t, n) {\n      var e = RegExp(\n        \"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\",\n      );\n      t.exports = function (t) {\n        return e.test(t);\n      };\n    },\n    function (t, n) {\n      var e = \"[\\\\ud800-\\\\udfff]\",\n        r = \"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\n        o = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n        i = \"[^\\\\ud800-\\\\udfff]\",\n        u = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n        c = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n        a = \"(?:\" + r + \"|\" + o + \")\" + \"?\",\n        f =\n          \"[\\\\ufe0e\\\\ufe0f]?\" +\n          a +\n          (\"(?:\\\\u200d(?:\" +\n            [i, u, c].join(\"|\") +\n            \")[\\\\ufe0e\\\\ufe0f]?\" +\n            a +\n            \")*\"),\n        s = \"(?:\" + [i + r + \"?\", r, u, c, e].join(\"|\") + \")\",\n        p = RegExp(o + \"(?=\" + o + \")|\" + s + f, \"g\");\n      t.exports = function (t) {\n        for (var n = (p.lastIndex = 0); p.test(t); ) ++n;\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(82),\n        o = e(120),\n        i = e(90),\n        u = e(29),\n        c = e(64),\n        a = e(17),\n        f = e(39),\n        s = e(46),\n        p = e(21),\n        d = e(49);\n      t.exports = function (t, n, e) {\n        var h = a(t),\n          l = h || f(t) || d(t);\n        if (((n = u(n, 4)), null == e)) {\n          var v = t && t.constructor;\n          e = l ? (h ? new v() : []) : p(t) && s(v) ? o(c(t)) : {};\n        }\n        return (\n          (l ? r : i)(t, function (t, r, o) {\n            return n(e, t, r, o);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(94),\n        o = e(69),\n        i = e(295),\n        u = e(143),\n        c = o(function (t) {\n          return i(r(t, 1, u, !0));\n        });\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = e(48),\n        i = e(17),\n        u = r ? r.isConcatSpreadable : void 0;\n      t.exports = function (t) {\n        return i(t) || o(t) || !!(u && t && t[u]);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        switch (e.length) {\n          case 0:\n            return t.call(n);\n          case 1:\n            return t.call(n, e[0]);\n          case 2:\n            return t.call(n, e[0], e[1]);\n          case 3:\n            return t.call(n, e[0], e[1], e[2]);\n        }\n        return t.apply(n, e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(89),\n        o = e(106),\n        i = e(36),\n        u = o\n          ? function (t, n) {\n              return o(t, \"toString\", {\n                configurable: !0,\n                enumerable: !1,\n                value: r(n),\n                writable: !0,\n              });\n            }\n          : i;\n      t.exports = u;\n    },\n    function (t, n) {\n      var e = Date.now;\n      t.exports = function (t) {\n        var n = 0,\n          r = 0;\n        return function () {\n          var o = e(),\n            i = 16 - (o - r);\n          if (((r = o), i > 0)) {\n            if (++n >= 800) return arguments[0];\n          } else n = 0;\n          return t.apply(void 0, arguments);\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(127),\n        o = e(296),\n        i = e(300),\n        u = e(128),\n        c = e(301),\n        a = e(92);\n      t.exports = function (t, n, e) {\n        var f = -1,\n          s = o,\n          p = t.length,\n          d = !0,\n          h = [],\n          l = h;\n        if (e) (d = !1), (s = i);\n        else if (p >= 200) {\n          var v = n ? null : c(t);\n          if (v) return a(v);\n          (d = !1), (s = u), (l = new r());\n        } else l = n ? [] : h;\n        t: for (; ++f < p; ) {\n          var y = t[f],\n            g = n ? n(y) : y;\n          if (((y = e || 0 !== y ? y : 0), d && g == g)) {\n            for (var b = l.length; b--; ) if (l[b] === g) continue t;\n            n && l.push(g), h.push(y);\n          } else s(l, g, e) || (l !== h && l.push(g), h.push(y));\n        }\n        return h;\n      };\n    },\n    function (t, n, e) {\n      var r = e(297);\n      t.exports = function (t, n) {\n        return !!(null == t ? 0 : t.length) && r(t, n, 0) > -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(142),\n        o = e(298),\n        i = e(299);\n      t.exports = function (t, n, e) {\n        return n == n ? i(t, n, e) : r(t, o, e);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return t != t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = e - 1, o = t.length; ++r < o; ) if (t[r] === n) return r;\n        return -1;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = -1, o = null == t ? 0 : t.length; ++r < o; )\n          if (e(n, t[r])) return !0;\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(116),\n        o = e(302),\n        i = e(92),\n        u =\n          r && 1 / i(new r([, -0]))[1] == 1 / 0\n            ? function (t) {\n                return new r(t);\n              }\n            : o;\n      t.exports = u;\n    },\n    function (t, n) {\n      t.exports = function () {};\n    },\n    function (t, n, e) {\n      var r = e(68);\n      t.exports = function (t, n) {\n        return r(n, function (n) {\n          return t[n];\n        });\n      };\n    },\n    function (t, n) {\n      t.exports = \"2.1.8\";\n    },\n    function (t, n, e) {\n      var r = e(20),\n        o = e(79);\n      function i(t) {\n        return r.map(t.nodes(), function (n) {\n          var e = t.node(n),\n            o = t.parent(n),\n            i = { v: n };\n          return (\n            r.isUndefined(e) || (i.value = e),\n            r.isUndefined(o) || (i.parent = o),\n            i\n          );\n        });\n      }\n      function u(t) {\n        return r.map(t.edges(), function (n) {\n          var e = t.edge(n),\n            o = { v: n.v, w: n.w };\n          return (\n            r.isUndefined(n.name) || (o.name = n.name),\n            r.isUndefined(e) || (o.value = e),\n            o\n          );\n        });\n      }\n      t.exports = {\n        write: function (t) {\n          var n = {\n            options: {\n              directed: t.isDirected(),\n              multigraph: t.isMultigraph(),\n              compound: t.isCompound(),\n            },\n            nodes: i(t),\n            edges: u(t),\n          };\n          r.isUndefined(t.graph()) || (n.value = r.clone(t.graph()));\n          return n;\n        },\n        read: function (t) {\n          var n = new o(t.options).setGraph(t.value);\n          return (\n            r.each(t.nodes, function (t) {\n              n.setNode(t.v, t.value), t.parent && n.setParent(t.v, t.parent);\n            }),\n            r.each(t.edges, function (t) {\n              n.setEdge({ v: t.v, w: t.w, name: t.name }, t.value);\n            }),\n            n\n          );\n        },\n      };\n    },\n    function (t, n, e) {\n      t.exports = {\n        components: e(307),\n        dijkstra: e(145),\n        dijkstraAll: e(308),\n        findCycles: e(309),\n        floydWarshall: e(310),\n        isAcyclic: e(311),\n        postorder: e(312),\n        preorder: e(313),\n        prim: e(314),\n        tarjan: e(147),\n        topsort: e(148),\n      };\n    },\n    function (t, n, e) {\n      var r = e(20);\n      t.exports = function (t) {\n        var n,\n          e = {},\n          o = [];\n        function i(o) {\n          r.has(e, o) ||\n            ((e[o] = !0),\n            n.push(o),\n            r.each(t.successors(o), i),\n            r.each(t.predecessors(o), i));\n        }\n        return (\n          r.each(t.nodes(), function (t) {\n            (n = []), i(t), n.length && o.push(n);\n          }),\n          o\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(145),\n        o = e(20);\n      t.exports = function (t, n, e) {\n        return o.transform(\n          t.nodes(),\n          function (o, i) {\n            o[i] = r(t, i, n, e);\n          },\n          {},\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(20),\n        o = e(147);\n      t.exports = function (t) {\n        return r.filter(o(t), function (n) {\n          return n.length > 1 || (1 === n.length && t.hasEdge(n[0], n[0]));\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(20);\n      t.exports = function (t, n, e) {\n        return (function (t, n, e) {\n          var r = {},\n            o = t.nodes();\n          return (\n            o.forEach(function (t) {\n              (r[t] = {}),\n                (r[t][t] = { distance: 0 }),\n                o.forEach(function (n) {\n                  t !== n && (r[t][n] = { distance: Number.POSITIVE_INFINITY });\n                }),\n                e(t).forEach(function (e) {\n                  var o = e.v === t ? e.w : e.v,\n                    i = n(e);\n                  r[t][o] = { distance: i, predecessor: t };\n                });\n            }),\n            o.forEach(function (t) {\n              var n = r[t];\n              o.forEach(function (e) {\n                var i = r[e];\n                o.forEach(function (e) {\n                  var r = i[t],\n                    o = n[e],\n                    u = i[e],\n                    c = r.distance + o.distance;\n                  c < u.distance &&\n                    ((u.distance = c), (u.predecessor = o.predecessor));\n                });\n              });\n            }),\n            r\n          );\n        })(\n          t,\n          n || o,\n          e ||\n            function (n) {\n              return t.outEdges(n);\n            },\n        );\n      };\n      var o = r.constant(1);\n    },\n    function (t, n, e) {\n      var r = e(148);\n      t.exports = function (t) {\n        try {\n          r(t);\n        } catch (t) {\n          if (t instanceof r.CycleException) return !1;\n          throw t;\n        }\n        return !0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(149);\n      t.exports = function (t, n) {\n        return r(t, n, \"post\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(149);\n      t.exports = function (t, n) {\n        return r(t, n, \"pre\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(20),\n        o = e(79),\n        i = e(146);\n      t.exports = function (t, n) {\n        var e,\n          u = new o(),\n          c = {},\n          a = new i();\n        function f(t) {\n          var r = t.v === e ? t.w : t.v,\n            o = a.priority(r);\n          if (void 0 !== o) {\n            var i = n(t);\n            i < o && ((c[r] = e), a.decrease(r, i));\n          }\n        }\n        if (0 === t.nodeCount()) return u;\n        r.each(t.nodes(), function (t) {\n          a.add(t, Number.POSITIVE_INFINITY), u.setNode(t);\n        }),\n          a.decrease(t.nodes()[0], 0);\n        var s = !1;\n        for (; a.size() > 0; ) {\n          if (((e = a.removeMin()), r.has(c, e))) u.setEdge(e, c[e]);\n          else {\n            if (s) throw new Error(\"Input graph is not connected: \" + t);\n            s = !0;\n          }\n          t.nodeEdges(e).forEach(f);\n        }\n        return u;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(355),\n        i = e(358),\n        u = e(359),\n        c = e(19).normalizeRanks,\n        a = e(361),\n        f = e(19).removeEmptyRanks,\n        s = e(362),\n        p = e(363),\n        d = e(364),\n        h = e(365),\n        l = e(374),\n        v = e(19),\n        y = e(23).Graph;\n      t.exports = function (t, n) {\n        var e = n && n.debugTiming ? v.time : v.notime;\n        e(\"layout\", function () {\n          var n = e(\"  buildLayoutGraph\", function () {\n            return (function (t) {\n              var n = new y({ multigraph: !0, compound: !0 }),\n                e = S(t.graph());\n              return (\n                n.setGraph(r.merge({}, b, k(e, g), r.pick(e, m))),\n                r.forEach(t.nodes(), function (e) {\n                  var o = S(t.node(e));\n                  n.setNode(e, r.defaults(k(o, x), _)),\n                    n.setParent(e, t.parent(e));\n                }),\n                r.forEach(t.edges(), function (e) {\n                  var o = S(t.edge(e));\n                  n.setEdge(e, r.merge({}, E, k(o, w), r.pick(o, j)));\n                }),\n                n\n              );\n            })(t);\n          });\n          e(\"  runLayout\", function () {\n            !(function (t, n) {\n              n(\"    makeSpaceForEdgeLabels\", function () {\n                !(function (t) {\n                  var n = t.graph();\n                  (n.ranksep /= 2),\n                    r.forEach(t.edges(), function (e) {\n                      var r = t.edge(e);\n                      (r.minlen *= 2),\n                        \"c\" !== r.labelpos.toLowerCase() &&\n                          (\"TB\" === n.rankdir || \"BT\" === n.rankdir\n                            ? (r.width += r.labeloffset)\n                            : (r.height += r.labeloffset));\n                    });\n                })(t);\n              }),\n                n(\"    removeSelfEdges\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      if (n.v === n.w) {\n                        var e = t.node(n.v);\n                        e.selfEdges || (e.selfEdges = []),\n                          e.selfEdges.push({ e: n, label: t.edge(n) }),\n                          t.removeEdge(n);\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    acyclic\", function () {\n                  o.run(t);\n                }),\n                n(\"    nestingGraph.run\", function () {\n                  s.run(t);\n                }),\n                n(\"    rank\", function () {\n                  u(v.asNonCompoundGraph(t));\n                }),\n                n(\"    injectEdgeLabelProxies\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      if (e.width && e.height) {\n                        var r = t.node(n.v),\n                          o = {\n                            rank: (t.node(n.w).rank - r.rank) / 2 + r.rank,\n                            e: n,\n                          };\n                        v.addDummyNode(t, \"edge-proxy\", o, \"_ep\");\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    removeEmptyRanks\", function () {\n                  f(t);\n                }),\n                n(\"    nestingGraph.cleanup\", function () {\n                  s.cleanup(t);\n                }),\n                n(\"    normalizeRanks\", function () {\n                  c(t);\n                }),\n                n(\"    assignRankMinMax\", function () {\n                  !(function (t) {\n                    var n = 0;\n                    r.forEach(t.nodes(), function (e) {\n                      var o = t.node(e);\n                      o.borderTop &&\n                        ((o.minRank = t.node(o.borderTop).rank),\n                        (o.maxRank = t.node(o.borderBottom).rank),\n                        (n = r.max(n, o.maxRank)));\n                    }),\n                      (t.graph().maxRank = n);\n                  })(t);\n                }),\n                n(\"    removeEdgeLabelProxies\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      var e = t.node(n);\n                      \"edge-proxy\" === e.dummy &&\n                        ((t.edge(e.e).labelRank = e.rank), t.removeNode(n));\n                    });\n                  })(t);\n                }),\n                n(\"    normalize.run\", function () {\n                  i.run(t);\n                }),\n                n(\"    parentDummyChains\", function () {\n                  a(t);\n                }),\n                n(\"    addBorderSegments\", function () {\n                  p(t);\n                }),\n                n(\"    order\", function () {\n                  h(t);\n                }),\n                n(\"    insertSelfEdges\", function () {\n                  !(function (t) {\n                    var n = v.buildLayerMatrix(t);\n                    r.forEach(n, function (n) {\n                      var e = 0;\n                      r.forEach(n, function (n, o) {\n                        var i = t.node(n);\n                        (i.order = o + e),\n                          r.forEach(i.selfEdges, function (n) {\n                            v.addDummyNode(\n                              t,\n                              \"selfedge\",\n                              {\n                                width: n.label.width,\n                                height: n.label.height,\n                                rank: i.rank,\n                                order: o + ++e,\n                                e: n.e,\n                                label: n.label,\n                              },\n                              \"_se\",\n                            );\n                          }),\n                          delete i.selfEdges;\n                      });\n                    });\n                  })(t);\n                }),\n                n(\"    adjustCoordinateSystem\", function () {\n                  d.adjust(t);\n                }),\n                n(\"    position\", function () {\n                  l(t);\n                }),\n                n(\"    positionSelfEdges\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      var e = t.node(n);\n                      if (\"selfedge\" === e.dummy) {\n                        var r = t.node(e.e.v),\n                          o = r.x + r.width / 2,\n                          i = r.y,\n                          u = e.x - o,\n                          c = r.height / 2;\n                        t.setEdge(e.e, e.label),\n                          t.removeNode(n),\n                          (e.label.points = [\n                            { x: o + (2 * u) / 3, y: i - c },\n                            { x: o + (5 * u) / 6, y: i - c },\n                            { x: o + u, y: i },\n                            { x: o + (5 * u) / 6, y: i + c },\n                            { x: o + (2 * u) / 3, y: i + c },\n                          ]),\n                          (e.label.x = e.x),\n                          (e.label.y = e.y);\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    removeBorderNodes\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      if (t.children(n).length) {\n                        var e = t.node(n),\n                          o = t.node(e.borderTop),\n                          i = t.node(e.borderBottom),\n                          u = t.node(r.last(e.borderLeft)),\n                          c = t.node(r.last(e.borderRight));\n                        (e.width = Math.abs(c.x - u.x)),\n                          (e.height = Math.abs(i.y - o.y)),\n                          (e.x = u.x + e.width / 2),\n                          (e.y = o.y + e.height / 2);\n                      }\n                    }),\n                      r.forEach(t.nodes(), function (n) {\n                        \"border\" === t.node(n).dummy && t.removeNode(n);\n                      });\n                  })(t);\n                }),\n                n(\"    normalize.undo\", function () {\n                  i.undo(t);\n                }),\n                n(\"    fixupEdgeLabelCoords\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      if (r.has(e, \"x\"))\n                        switch (\n                          ((\"l\" !== e.labelpos && \"r\" !== e.labelpos) ||\n                            (e.width -= e.labeloffset),\n                          e.labelpos)\n                        ) {\n                          case \"l\":\n                            e.x -= e.width / 2 + e.labeloffset;\n                            break;\n                          case \"r\":\n                            e.x += e.width / 2 + e.labeloffset;\n                        }\n                    });\n                  })(t);\n                }),\n                n(\"    undoCoordinateSystem\", function () {\n                  d.undo(t);\n                }),\n                n(\"    translateGraph\", function () {\n                  !(function (t) {\n                    var n = Number.POSITIVE_INFINITY,\n                      e = 0,\n                      o = Number.POSITIVE_INFINITY,\n                      i = 0,\n                      u = t.graph(),\n                      c = u.marginx || 0,\n                      a = u.marginy || 0;\n                    function f(t) {\n                      var r = t.x,\n                        u = t.y,\n                        c = t.width,\n                        a = t.height;\n                      (n = Math.min(n, r - c / 2)),\n                        (e = Math.max(e, r + c / 2)),\n                        (o = Math.min(o, u - a / 2)),\n                        (i = Math.max(i, u + a / 2));\n                    }\n                    r.forEach(t.nodes(), function (n) {\n                      f(t.node(n));\n                    }),\n                      r.forEach(t.edges(), function (n) {\n                        var e = t.edge(n);\n                        r.has(e, \"x\") && f(e);\n                      }),\n                      (n -= c),\n                      (o -= a),\n                      r.forEach(t.nodes(), function (e) {\n                        var r = t.node(e);\n                        (r.x -= n), (r.y -= o);\n                      }),\n                      r.forEach(t.edges(), function (e) {\n                        var i = t.edge(e);\n                        r.forEach(i.points, function (t) {\n                          (t.x -= n), (t.y -= o);\n                        }),\n                          r.has(i, \"x\") && (i.x -= n),\n                          r.has(i, \"y\") && (i.y -= o);\n                      }),\n                      (u.width = e - n + c),\n                      (u.height = i - o + a);\n                  })(t);\n                }),\n                n(\"    assignNodeIntersects\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e,\n                        r,\n                        o = t.edge(n),\n                        i = t.node(n.v),\n                        u = t.node(n.w);\n                      o.points\n                        ? ((e = o.points[0]),\n                          (r = o.points[o.points.length - 1]))\n                        : ((o.points = []), (e = u), (r = i)),\n                        o.points.unshift(v.intersectRect(i, e)),\n                        o.points.push(v.intersectRect(u, r));\n                    });\n                  })(t);\n                }),\n                n(\"    reversePoints\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      e.reversed && e.points.reverse();\n                    });\n                  })(t);\n                }),\n                n(\"    acyclic.undo\", function () {\n                  o.undo(t);\n                });\n            })(n, e);\n          }),\n            e(\"  updateInputGraph\", function () {\n              !(function (t, n) {\n                r.forEach(t.nodes(), function (e) {\n                  var r = t.node(e),\n                    o = n.node(e);\n                  r &&\n                    ((r.x = o.x),\n                    (r.y = o.y),\n                    n.children(e).length &&\n                      ((r.width = o.width), (r.height = o.height)));\n                }),\n                  r.forEach(t.edges(), function (e) {\n                    var o = t.edge(e),\n                      i = n.edge(e);\n                    (o.points = i.points),\n                      r.has(i, \"x\") && ((o.x = i.x), (o.y = i.y));\n                  }),\n                  (t.graph().width = n.graph().width),\n                  (t.graph().height = n.graph().height);\n              })(t, n);\n            });\n        });\n      };\n      var g = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"],\n        b = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" },\n        m = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"],\n        x = [\"width\", \"height\"],\n        _ = { width: 0, height: 0 },\n        w = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"],\n        E = {\n          minlen: 1,\n          weight: 1,\n          width: 0,\n          height: 0,\n          labeloffset: 10,\n          labelpos: \"r\",\n        },\n        j = [\"labelpos\"];\n      function k(t, n) {\n        return r.mapValues(r.pick(t, n), Number);\n      }\n      function S(t) {\n        var n = {};\n        return (\n          r.forEach(t, function (t, e) {\n            n[e.toLowerCase()] = t;\n          }),\n          n\n        );\n      }\n    },\n    function (t, n, e) {\n      var r = e(103);\n      t.exports = function (t) {\n        return r(t, 5);\n      };\n    },\n    function (t, n, e) {\n      var r = e(69),\n        o = e(37),\n        i = e(70),\n        u = e(35),\n        c = Object.prototype,\n        a = c.hasOwnProperty,\n        f = r(function (t, n) {\n          t = Object(t);\n          var e = -1,\n            r = n.length,\n            f = r > 2 ? n[2] : void 0;\n          for (f && i(n[0], n[1], f) && (r = 1); ++e < r; )\n            for (var s = n[e], p = u(s), d = -1, h = p.length; ++d < h; ) {\n              var l = p[d],\n                v = t[l];\n              (void 0 === v || (o(v, c[l]) && !a.call(t, l))) && (t[l] = s[l]);\n            }\n          return t;\n        });\n      t.exports = f;\n    },\n    function (t, n, e) {\n      var r = e(319)(e(320));\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(29),\n        o = e(28),\n        i = e(31);\n      t.exports = function (t) {\n        return function (n, e, u) {\n          var c = Object(n);\n          if (!o(n)) {\n            var a = r(e, 3);\n            (n = i(n)),\n              (e = function (t) {\n                return a(c[t], t, c);\n              });\n          }\n          var f = t(n, e, u);\n          return f > -1 ? c[a ? n[f] : f] : void 0;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(142),\n        o = e(29),\n        i = e(321),\n        u = Math.max;\n      t.exports = function (t, n, e) {\n        var c = null == t ? 0 : t.length;\n        if (!c) return -1;\n        var a = null == e ? 0 : i(e);\n        return a < 0 && (a = u(c + a, 0)), r(t, o(n, 3), a);\n      };\n    },\n    function (t, n, e) {\n      var r = e(150);\n      t.exports = function (t) {\n        var n = r(t),\n          e = n % 1;\n        return n == n ? (e ? n - e : n) : 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(323),\n        o = e(21),\n        i = e(41),\n        u = /^[-+]0x[0-9a-f]+$/i,\n        c = /^0b[01]+$/i,\n        a = /^0o[0-7]+$/i,\n        f = parseInt;\n      t.exports = function (t) {\n        if (\"number\" == typeof t) return t;\n        if (i(t)) return NaN;\n        if (o(t)) {\n          var n = \"function\" == typeof t.valueOf ? t.valueOf() : t;\n          t = o(n) ? n + \"\" : n;\n        }\n        if (\"string\" != typeof t) return 0 === t ? t : +t;\n        t = r(t);\n        var e = c.test(t);\n        return e || a.test(t) ? f(t.slice(2), e ? 2 : 8) : u.test(t) ? NaN : +t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(324),\n        o = /^\\s+/;\n      t.exports = function (t) {\n        return t ? t.slice(0, r(t) + 1).replace(o, \"\") : t;\n      };\n    },\n    function (t, n) {\n      var e = /\\s/;\n      t.exports = function (t) {\n        for (var n = t.length; n-- && e.test(t.charAt(n)); );\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(91),\n        o = e(123),\n        i = e(35);\n      t.exports = function (t, n) {\n        return null == t ? t : r(t, o(n), i);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = null == t ? 0 : t.length;\n        return n ? t[n - 1] : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(60),\n        o = e(90),\n        i = e(29);\n      t.exports = function (t, n) {\n        var e = {};\n        return (\n          (n = i(n, 3)),\n          o(t, function (t, o, i) {\n            r(e, o, n(t, o, i));\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(95),\n        o = e(329),\n        i = e(36);\n      t.exports = function (t) {\n        return t && t.length ? r(t, i, o) : void 0;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t > n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(331),\n        o = e(335)(function (t, n, e) {\n          r(t, n, e);\n        });\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(54),\n        o = e(152),\n        i = e(91),\n        u = e(332),\n        c = e(21),\n        a = e(35),\n        f = e(153);\n      t.exports = function t(n, e, s, p, d) {\n        n !== e &&\n          i(\n            e,\n            function (i, a) {\n              if ((d || (d = new r()), c(i))) u(n, e, a, s, t, p, d);\n              else {\n                var h = p ? p(f(n, a), i, a + \"\", n, e, d) : void 0;\n                void 0 === h && (h = i), o(n, a, h);\n              }\n            },\n            a,\n          );\n      };\n    },\n    function (t, n, e) {\n      var r = e(152),\n        o = e(109),\n        i = e(118),\n        u = e(110),\n        c = e(119),\n        a = e(48),\n        f = e(17),\n        s = e(143),\n        p = e(39),\n        d = e(46),\n        h = e(21),\n        l = e(333),\n        v = e(49),\n        y = e(153),\n        g = e(334);\n      t.exports = function (t, n, e, b, m, x, _) {\n        var w = y(t, e),\n          E = y(n, e),\n          j = _.get(E);\n        if (j) r(t, e, j);\n        else {\n          var k = x ? x(w, E, e + \"\", t, n, _) : void 0,\n            S = void 0 === k;\n          if (S) {\n            var O = f(E),\n              N = !O && p(E),\n              I = !O && !N && v(E);\n            (k = E),\n              O || N || I\n                ? f(w)\n                  ? (k = w)\n                  : s(w)\n                  ? (k = u(w))\n                  : N\n                  ? ((S = !1), (k = o(E, !0)))\n                  : I\n                  ? ((S = !1), (k = i(E, !0)))\n                  : (k = [])\n                : l(E) || a(E)\n                ? ((k = w), a(w) ? (k = g(w)) : (h(w) && !d(w)) || (k = c(E)))\n                : (S = !1);\n          }\n          S && (_.set(E, k), m(k, E, b, x, _), _.delete(E)), r(t, e, k);\n        }\n      };\n    },\n    function (t, n, e) {\n      var r = e(34),\n        o = e(64),\n        i = e(25),\n        u = Function.prototype,\n        c = Object.prototype,\n        a = u.toString,\n        f = c.hasOwnProperty,\n        s = a.call(Object);\n      t.exports = function (t) {\n        if (!i(t) || \"[object Object]\" != r(t)) return !1;\n        var n = o(t);\n        if (null === n) return !0;\n        var e = f.call(n, \"constructor\") && n.constructor;\n        return \"function\" == typeof e && e instanceof e && a.call(e) == s;\n      };\n    },\n    function (t, n, e) {\n      var r = e(47),\n        o = e(35);\n      t.exports = function (t) {\n        return r(t, o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(69),\n        o = e(70);\n      t.exports = function (t) {\n        return r(function (n, e) {\n          var r = -1,\n            i = e.length,\n            u = i > 1 ? e[i - 1] : void 0,\n            c = i > 2 ? e[2] : void 0;\n          for (\n            u = t.length > 3 && \"function\" == typeof u ? (i--, u) : void 0,\n              c && o(e[0], e[1], c) && ((u = i < 3 ? void 0 : u), (i = 1)),\n              n = Object(n);\n            ++r < i;\n\n          ) {\n            var a = e[r];\n            a && t(n, a, r, u);\n          }\n          return n;\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(95),\n        o = e(154),\n        i = e(36);\n      t.exports = function (t) {\n        return t && t.length ? r(t, i, o) : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(95),\n        o = e(29),\n        i = e(154);\n      t.exports = function (t, n) {\n        return t && t.length ? r(t, o(n, 2), i) : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(24);\n      t.exports = function () {\n        return r.Date.now();\n      };\n    },\n    function (t, n, e) {\n      var r = e(340),\n        o = e(343)(function (t, n) {\n          return null == t ? {} : r(t, n);\n        });\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(341),\n        o = e(132);\n      t.exports = function (t, n) {\n        return r(t, n, function (n, e) {\n          return o(t, e);\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(66),\n        o = e(342),\n        i = e(67);\n      t.exports = function (t, n, e) {\n        for (var u = -1, c = n.length, a = {}; ++u < c; ) {\n          var f = n[u],\n            s = r(t, f);\n          e(s, f) && o(a, i(f, t), s);\n        }\n        return a;\n      };\n    },\n    function (t, n, e) {\n      var r = e(59),\n        o = e(67),\n        i = e(61),\n        u = e(21),\n        c = e(50);\n      t.exports = function (t, n, e, a) {\n        if (!u(t)) return t;\n        for (\n          var f = -1, s = (n = o(n, t)).length, p = s - 1, d = t;\n          null != d && ++f < s;\n\n        ) {\n          var h = c(n[f]),\n            l = e;\n          if (\"__proto__\" === h || \"constructor\" === h || \"prototype\" === h)\n            return t;\n          if (f != p) {\n            var v = d[h];\n            void 0 === (l = a ? a(v, h, d) : void 0) &&\n              (l = u(v) ? v : i(n[f + 1]) ? [] : {});\n          }\n          r(d, h, l), (d = d[h]);\n        }\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(151),\n        o = e(140),\n        i = e(141);\n      t.exports = function (t) {\n        return i(o(t, void 0, r), t + \"\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(345)();\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(346),\n        o = e(70),\n        i = e(150);\n      t.exports = function (t) {\n        return function (n, e, u) {\n          return (\n            u && \"number\" != typeof u && o(n, e, u) && (e = u = void 0),\n            (n = i(n)),\n            void 0 === e ? ((e = n), (n = 0)) : (e = i(e)),\n            (u = void 0 === u ? (n < e ? 1 : -1) : i(u)),\n            r(n, e, u, t)\n          );\n        };\n      };\n    },\n    function (t, n) {\n      var e = Math.ceil,\n        r = Math.max;\n      t.exports = function (t, n, o, i) {\n        for (var u = -1, c = r(e((n - t) / (o || 1)), 0), a = Array(c); c--; )\n          (a[i ? c : ++u] = t), (t += o);\n        return a;\n      };\n    },\n    function (t, n, e) {\n      var r = e(94),\n        o = e(348),\n        i = e(69),\n        u = e(70),\n        c = i(function (t, n) {\n          if (null == t) return [];\n          var e = n.length;\n          return (\n            e > 1 && u(t, n[0], n[1])\n              ? (n = [])\n              : e > 2 && u(n[0], n[1], n[2]) && (n = [n[0]]),\n            o(t, r(n, 1), [])\n          );\n        });\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(68),\n        o = e(66),\n        i = e(29),\n        u = e(138),\n        c = e(349),\n        a = e(62),\n        f = e(350),\n        s = e(36),\n        p = e(17);\n      t.exports = function (t, n, e) {\n        n = n.length\n          ? r(n, function (t) {\n              return p(t)\n                ? function (n) {\n                    return o(n, 1 === t.length ? t[0] : t);\n                  }\n                : t;\n            })\n          : [s];\n        var d = -1;\n        n = r(n, a(i));\n        var h = u(t, function (t, e, o) {\n          return {\n            criteria: r(n, function (n) {\n              return n(t);\n            }),\n            index: ++d,\n            value: t,\n          };\n        });\n        return c(h, function (t, n) {\n          return f(t, n, e);\n        });\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        var e = t.length;\n        for (t.sort(n); e--; ) t[e] = t[e].value;\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(351);\n      t.exports = function (t, n, e) {\n        for (\n          var o = -1,\n            i = t.criteria,\n            u = n.criteria,\n            c = i.length,\n            a = e.length;\n          ++o < c;\n\n        ) {\n          var f = r(i[o], u[o]);\n          if (f) return o >= a ? f : f * (\"desc\" == e[o] ? -1 : 1);\n        }\n        return t.index - n.index;\n      };\n    },\n    function (t, n, e) {\n      var r = e(41);\n      t.exports = function (t, n) {\n        if (t !== n) {\n          var e = void 0 !== t,\n            o = null === t,\n            i = t == t,\n            u = r(t),\n            c = void 0 !== n,\n            a = null === n,\n            f = n == n,\n            s = r(n);\n          if (\n            (!a && !s && !u && t > n) ||\n            (u && c && f && !a && !s) ||\n            (o && c && f) ||\n            (!e && f) ||\n            !i\n          )\n            return 1;\n          if (\n            (!o && !u && !s && t < n) ||\n            (s && e && i && !o && !u) ||\n            (a && e && i) ||\n            (!c && i) ||\n            !f\n          )\n            return -1;\n        }\n        return 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(131),\n        o = 0;\n      t.exports = function (t) {\n        var n = ++o;\n        return r(t) + n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(59),\n        o = e(354);\n      t.exports = function (t, n) {\n        return o(t || [], n || [], r);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = -1, o = t.length, i = n.length, u = {}; ++r < o; ) {\n          var c = r < i ? n[r] : void 0;\n          e(u, t[r], c);\n        }\n        return u;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(356);\n      t.exports = {\n        run: function (t) {\n          var n =\n            \"greedy\" === t.graph().acyclicer\n              ? o(\n                  t,\n                  (function (t) {\n                    return function (n) {\n                      return t.edge(n).weight;\n                    };\n                  })(t),\n                )\n              : (function (t) {\n                  var n = [],\n                    e = {},\n                    o = {};\n                  function i(u) {\n                    r.has(o, u) ||\n                      ((o[u] = !0),\n                      (e[u] = !0),\n                      r.forEach(t.outEdges(u), function (t) {\n                        r.has(e, t.w) ? n.push(t) : i(t.w);\n                      }),\n                      delete e[u]);\n                  }\n                  return r.forEach(t.nodes(), i), n;\n                })(t);\n          r.forEach(n, function (n) {\n            var e = t.edge(n);\n            t.removeEdge(n),\n              (e.forwardName = n.name),\n              (e.reversed = !0),\n              t.setEdge(n.w, n.v, e, r.uniqueId(\"rev\"));\n          });\n        },\n        undo: function (t) {\n          r.forEach(t.edges(), function (n) {\n            var e = t.edge(n);\n            if (e.reversed) {\n              t.removeEdge(n);\n              var r = e.forwardName;\n              delete e.reversed,\n                delete e.forwardName,\n                t.setEdge(n.w, n.v, e, r);\n            }\n          });\n        },\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(23).Graph,\n        i = e(357);\n      t.exports = function (t, n) {\n        if (t.nodeCount() <= 1) return [];\n        var e = (function (t, n) {\n            var e = new o(),\n              u = 0,\n              c = 0;\n            r.forEach(t.nodes(), function (t) {\n              e.setNode(t, { v: t, in: 0, out: 0 });\n            }),\n              r.forEach(t.edges(), function (t) {\n                var r = e.edge(t.v, t.w) || 0,\n                  o = n(t),\n                  i = r + o;\n                e.setEdge(t.v, t.w, i),\n                  (c = Math.max(c, (e.node(t.v).out += o))),\n                  (u = Math.max(u, (e.node(t.w).in += o)));\n              });\n            var f = r.range(c + u + 3).map(function () {\n                return new i();\n              }),\n              s = u + 1;\n            return (\n              r.forEach(e.nodes(), function (t) {\n                a(f, s, e.node(t));\n              }),\n              { graph: e, buckets: f, zeroIdx: s }\n            );\n          })(t, n || u),\n          f = (function (t, n, e) {\n            var r,\n              o = [],\n              i = n[n.length - 1],\n              u = n[0];\n            for (; t.nodeCount(); ) {\n              for (; (r = u.dequeue()); ) c(t, n, e, r);\n              for (; (r = i.dequeue()); ) c(t, n, e, r);\n              if (t.nodeCount())\n                for (var a = n.length - 2; a > 0; --a)\n                  if ((r = n[a].dequeue())) {\n                    o = o.concat(c(t, n, e, r, !0));\n                    break;\n                  }\n            }\n            return o;\n          })(e.graph, e.buckets, e.zeroIdx);\n        return r.flatten(\n          r.map(f, function (n) {\n            return t.outEdges(n.v, n.w);\n          }),\n          !0,\n        );\n      };\n      var u = r.constant(1);\n      function c(t, n, e, o, i) {\n        var u = i ? [] : void 0;\n        return (\n          r.forEach(t.inEdges(o.v), function (r) {\n            var o = t.edge(r),\n              c = t.node(r.v);\n            i && u.push({ v: r.v, w: r.w }), (c.out -= o), a(n, e, c);\n          }),\n          r.forEach(t.outEdges(o.v), function (r) {\n            var o = t.edge(r),\n              i = r.w,\n              u = t.node(i);\n            (u.in -= o), a(n, e, u);\n          }),\n          t.removeNode(o.v),\n          u\n        );\n      }\n      function a(t, n, e) {\n        e.out\n          ? e.in\n            ? t[e.out - e.in + n].enqueue(e)\n            : t[t.length - 1].enqueue(e)\n          : t[0].enqueue(e);\n      }\n    },\n    function (t, n) {\n      function e() {\n        var t = {};\n        (t._next = t._prev = t), (this._sentinel = t);\n      }\n      function r(t) {\n        (t._prev._next = t._next),\n          (t._next._prev = t._prev),\n          delete t._next,\n          delete t._prev;\n      }\n      function o(t, n) {\n        if (\"_next\" !== t && \"_prev\" !== t) return n;\n      }\n      (t.exports = e),\n        (e.prototype.dequeue = function () {\n          var t = this._sentinel,\n            n = t._prev;\n          if (n !== t) return r(n), n;\n        }),\n        (e.prototype.enqueue = function (t) {\n          var n = this._sentinel;\n          t._prev && t._next && r(t),\n            (t._next = n._next),\n            (n._next._prev = t),\n            (n._next = t),\n            (t._prev = n);\n        }),\n        (e.prototype.toString = function () {\n          for (var t = [], n = this._sentinel, e = n._prev; e !== n; )\n            t.push(JSON.stringify(e, o)), (e = e._prev);\n          return \"[\" + t.join(\", \") + \"]\";\n        });\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(19);\n      t.exports = {\n        run: function (t) {\n          (t.graph().dummyChains = []),\n            r.forEach(t.edges(), function (n) {\n              !(function (t, n) {\n                var e,\n                  r,\n                  i,\n                  u = n.v,\n                  c = t.node(u).rank,\n                  a = n.w,\n                  f = t.node(a).rank,\n                  s = n.name,\n                  p = t.edge(n),\n                  d = p.labelRank;\n                if (f === c + 1) return;\n                for (t.removeEdge(n), i = 0, ++c; c < f; ++i, ++c)\n                  (p.points = []),\n                    (r = {\n                      width: 0,\n                      height: 0,\n                      edgeLabel: p,\n                      edgeObj: n,\n                      rank: c,\n                    }),\n                    (e = o.addDummyNode(t, \"edge\", r, \"_d\")),\n                    c === d &&\n                      ((r.width = p.width),\n                      (r.height = p.height),\n                      (r.dummy = \"edge-label\"),\n                      (r.labelpos = p.labelpos)),\n                    t.setEdge(u, e, { weight: p.weight }, s),\n                    0 === i && t.graph().dummyChains.push(e),\n                    (u = e);\n                t.setEdge(u, a, { weight: p.weight }, s);\n              })(t, n);\n            });\n        },\n        undo: function (t) {\n          r.forEach(t.graph().dummyChains, function (n) {\n            var e,\n              r = t.node(n),\n              o = r.edgeLabel;\n            for (t.setEdge(r.edgeObj, o); r.dummy; )\n              (e = t.successors(n)[0]),\n                t.removeNode(n),\n                o.points.push({ x: r.x, y: r.y }),\n                \"edge-label\" === r.dummy &&\n                  ((o.x = r.x),\n                  (o.y = r.y),\n                  (o.width = r.width),\n                  (o.height = r.height)),\n                (n = e),\n                (r = t.node(n));\n          });\n        },\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(71).longestPath,\n        o = e(155),\n        i = e(360);\n      t.exports = function (t) {\n        switch (t.graph().ranker) {\n          case \"network-simplex\":\n            c(t);\n            break;\n          case \"tight-tree\":\n            !(function (t) {\n              r(t), o(t);\n            })(t);\n            break;\n          case \"longest-path\":\n            u(t);\n            break;\n          default:\n            c(t);\n        }\n      };\n      var u = r;\n      function c(t) {\n        i(t);\n      }\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(155),\n        i = e(71).slack,\n        u = e(71).longestPath,\n        c = e(23).alg.preorder,\n        a = e(23).alg.postorder,\n        f = e(19).simplify;\n      function s(t) {\n        (t = f(t)), u(t);\n        var n,\n          e = o(t);\n        for (h(e), p(e, t); (n = v(e)); ) g(e, t, n, y(e, t, n));\n      }\n      function p(t, n) {\n        var e = a(t, t.nodes());\n        (e = e.slice(0, e.length - 1)),\n          r.forEach(e, function (e) {\n            !(function (t, n, e) {\n              var r = t.node(e).parent;\n              t.edge(e, r).cutvalue = d(t, n, e);\n            })(t, n, e);\n          });\n      }\n      function d(t, n, e) {\n        var o = t.node(e).parent,\n          i = !0,\n          u = n.edge(e, o),\n          c = 0;\n        return (\n          u || ((i = !1), (u = n.edge(o, e))),\n          (c = u.weight),\n          r.forEach(n.nodeEdges(e), function (r) {\n            var u,\n              a,\n              f = r.v === e,\n              s = f ? r.w : r.v;\n            if (s !== o) {\n              var p = f === i,\n                d = n.edge(r).weight;\n              if (((c += p ? d : -d), (u = e), (a = s), t.hasEdge(u, a))) {\n                var h = t.edge(e, s).cutvalue;\n                c += p ? -h : h;\n              }\n            }\n          }),\n          c\n        );\n      }\n      function h(t, n) {\n        arguments.length < 2 && (n = t.nodes()[0]), l(t, {}, 1, n);\n      }\n      function l(t, n, e, o, i) {\n        var u = e,\n          c = t.node(o);\n        return (\n          (n[o] = !0),\n          r.forEach(t.neighbors(o), function (i) {\n            r.has(n, i) || (e = l(t, n, e, i, o));\n          }),\n          (c.low = u),\n          (c.lim = e++),\n          i ? (c.parent = i) : delete c.parent,\n          e\n        );\n      }\n      function v(t) {\n        return r.find(t.edges(), function (n) {\n          return t.edge(n).cutvalue < 0;\n        });\n      }\n      function y(t, n, e) {\n        var o = e.v,\n          u = e.w;\n        n.hasEdge(o, u) || ((o = e.w), (u = e.v));\n        var c = t.node(o),\n          a = t.node(u),\n          f = c,\n          s = !1;\n        c.lim > a.lim && ((f = a), (s = !0));\n        var p = r.filter(n.edges(), function (n) {\n          return s === b(t, t.node(n.v), f) && s !== b(t, t.node(n.w), f);\n        });\n        return r.minBy(p, function (t) {\n          return i(n, t);\n        });\n      }\n      function g(t, n, e, o) {\n        var i = e.v,\n          u = e.w;\n        t.removeEdge(i, u),\n          t.setEdge(o.v, o.w, {}),\n          h(t),\n          p(t, n),\n          (function (t, n) {\n            var e = r.find(t.nodes(), function (t) {\n                return !n.node(t).parent;\n              }),\n              o = c(t, e);\n            (o = o.slice(1)),\n              r.forEach(o, function (e) {\n                var r = t.node(e).parent,\n                  o = n.edge(e, r),\n                  i = !1;\n                o || ((o = n.edge(r, e)), (i = !0)),\n                  (n.node(e).rank =\n                    n.node(r).rank + (i ? o.minlen : -o.minlen));\n              });\n          })(t, n);\n      }\n      function b(t, n, e) {\n        return e.low <= n.lim && n.lim <= e.lim;\n      }\n      (t.exports = s),\n        (s.initLowLimValues = h),\n        (s.initCutValues = p),\n        (s.calcCutValue = d),\n        (s.leaveEdge = v),\n        (s.enterEdge = y),\n        (s.exchangeEdges = g);\n    },\n    function (t, n, e) {\n      var r = e(8);\n      t.exports = function (t) {\n        var n = (function (t) {\n          var n = {},\n            e = 0;\n          function o(i) {\n            var u = e;\n            r.forEach(t.children(i), o), (n[i] = { low: u, lim: e++ });\n          }\n          return r.forEach(t.children(), o), n;\n        })(t);\n        r.forEach(t.graph().dummyChains, function (e) {\n          for (\n            var r = t.node(e),\n              o = r.edgeObj,\n              i = (function (t, n, e, r) {\n                var o,\n                  i,\n                  u = [],\n                  c = [],\n                  a = Math.min(n[e].low, n[r].low),\n                  f = Math.max(n[e].lim, n[r].lim);\n                o = e;\n                do {\n                  (o = t.parent(o)), u.push(o);\n                } while (o && (n[o].low > a || f > n[o].lim));\n                (i = o), (o = r);\n                for (; (o = t.parent(o)) !== i; ) c.push(o);\n                return { path: u.concat(c.reverse()), lca: i };\n              })(t, n, o.v, o.w),\n              u = i.path,\n              c = i.lca,\n              a = 0,\n              f = u[a],\n              s = !0;\n            e !== o.w;\n\n          ) {\n            if (((r = t.node(e)), s)) {\n              for (; (f = u[a]) !== c && t.node(f).maxRank < r.rank; ) a++;\n              f === c && (s = !1);\n            }\n            if (!s) {\n              for (\n                ;\n                a < u.length - 1 && t.node((f = u[a + 1])).minRank <= r.rank;\n\n              )\n                a++;\n              f = u[a];\n            }\n            t.setParent(e, f), (e = t.successors(e)[0]);\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(19);\n      t.exports = {\n        run: function (t) {\n          var n = o.addDummyNode(t, \"root\", {}, \"_root\"),\n            e = (function (t) {\n              var n = {};\n              return (\n                r.forEach(t.children(), function (e) {\n                  !(function e(o, i) {\n                    var u = t.children(o);\n                    u &&\n                      u.length &&\n                      r.forEach(u, function (t) {\n                        e(t, i + 1);\n                      });\n                    n[o] = i;\n                  })(e, 1);\n                }),\n                n\n              );\n            })(t),\n            i = r.max(r.values(e)) - 1,\n            u = 2 * i + 1;\n          (t.graph().nestingRoot = n),\n            r.forEach(t.edges(), function (n) {\n              t.edge(n).minlen *= u;\n            });\n          var c =\n            (function (t) {\n              return r.reduce(\n                t.edges(),\n                function (n, e) {\n                  return n + t.edge(e).weight;\n                },\n                0,\n              );\n            })(t) + 1;\n          r.forEach(t.children(), function (a) {\n            !(function t(n, e, i, u, c, a, f) {\n              var s = n.children(f);\n              if (!s.length)\n                return void (\n                  f !== e && n.setEdge(e, f, { weight: 0, minlen: i })\n                );\n              var p = o.addBorderNode(n, \"_bt\"),\n                d = o.addBorderNode(n, \"_bb\"),\n                h = n.node(f);\n              n.setParent(p, f),\n                (h.borderTop = p),\n                n.setParent(d, f),\n                (h.borderBottom = d),\n                r.forEach(s, function (r) {\n                  t(n, e, i, u, c, a, r);\n                  var o = n.node(r),\n                    s = o.borderTop ? o.borderTop : r,\n                    h = o.borderBottom ? o.borderBottom : r,\n                    l = o.borderTop ? u : 2 * u,\n                    v = s !== h ? 1 : c - a[f] + 1;\n                  n.setEdge(p, s, { weight: l, minlen: v, nestingEdge: !0 }),\n                    n.setEdge(h, d, { weight: l, minlen: v, nestingEdge: !0 });\n                }),\n                n.parent(f) || n.setEdge(e, p, { weight: 0, minlen: c + a[f] });\n            })(t, n, u, c, i, e, a);\n          }),\n            (t.graph().nodeRankFactor = u);\n        },\n        cleanup: function (t) {\n          var n = t.graph();\n          t.removeNode(n.nestingRoot),\n            delete n.nestingRoot,\n            r.forEach(t.edges(), function (n) {\n              t.edge(n).nestingEdge && t.removeEdge(n);\n            });\n        },\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(19);\n      function i(t, n, e, r, i, u) {\n        var c = { width: 0, height: 0, rank: u, borderType: n },\n          a = i[n][u - 1],\n          f = o.addDummyNode(t, \"border\", c, e);\n        (i[n][u] = f), t.setParent(f, r), a && t.setEdge(a, f, { weight: 1 });\n      }\n      t.exports = function (t) {\n        r.forEach(t.children(), function n(e) {\n          var o = t.children(e),\n            u = t.node(e);\n          if ((o.length && r.forEach(o, n), r.has(u, \"minRank\"))) {\n            (u.borderLeft = []), (u.borderRight = []);\n            for (var c = u.minRank, a = u.maxRank + 1; c < a; ++c)\n              i(t, \"borderLeft\", \"_bl\", e, u, c),\n                i(t, \"borderRight\", \"_br\", e, u, c);\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8);\n      function o(t) {\n        r.forEach(t.nodes(), function (n) {\n          i(t.node(n));\n        }),\n          r.forEach(t.edges(), function (n) {\n            i(t.edge(n));\n          });\n      }\n      function i(t) {\n        var n = t.width;\n        (t.width = t.height), (t.height = n);\n      }\n      function u(t) {\n        t.y = -t.y;\n      }\n      function c(t) {\n        var n = t.x;\n        (t.x = t.y), (t.y = n);\n      }\n      t.exports = {\n        adjust: function (t) {\n          var n = t.graph().rankdir.toLowerCase();\n          (\"lr\" !== n && \"rl\" !== n) || o(t);\n        },\n        undo: function (t) {\n          var n = t.graph().rankdir.toLowerCase();\n          (\"bt\" !== n && \"rl\" !== n) ||\n            (function (t) {\n              r.forEach(t.nodes(), function (n) {\n                u(t.node(n));\n              }),\n                r.forEach(t.edges(), function (n) {\n                  var e = t.edge(n);\n                  r.forEach(e.points, u), r.has(e, \"y\") && u(e);\n                });\n            })(t);\n          (\"lr\" !== n && \"rl\" !== n) ||\n            (!(function (t) {\n              r.forEach(t.nodes(), function (n) {\n                c(t.node(n));\n              }),\n                r.forEach(t.edges(), function (n) {\n                  var e = t.edge(n);\n                  r.forEach(e.points, c), r.has(e, \"x\") && c(e);\n                });\n            })(t),\n            o(t));\n        },\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(366),\n        i = e(367),\n        u = e(368),\n        c = e(372),\n        a = e(373),\n        f = e(23).Graph,\n        s = e(19);\n      function p(t, n, e) {\n        return r.map(n, function (n) {\n          return c(t, n, e);\n        });\n      }\n      function d(t, n) {\n        var e = new f();\n        r.forEach(t, function (t) {\n          var o = t.graph().root,\n            i = u(t, o, e, n);\n          r.forEach(i.vs, function (n, e) {\n            t.node(n).order = e;\n          }),\n            a(t, e, i.vs);\n        });\n      }\n      function h(t, n) {\n        r.forEach(n, function (n) {\n          r.forEach(n, function (n, e) {\n            t.node(n).order = e;\n          });\n        });\n      }\n      t.exports = function (t) {\n        var n = s.maxRank(t),\n          e = p(t, r.range(1, n + 1), \"inEdges\"),\n          u = p(t, r.range(n - 1, -1, -1), \"outEdges\"),\n          c = o(t);\n        h(t, c);\n        for (\n          var a, f = Number.POSITIVE_INFINITY, l = 0, v = 0;\n          v < 4;\n          ++l, ++v\n        ) {\n          d(l % 2 ? e : u, l % 4 >= 2), (c = s.buildLayerMatrix(t));\n          var y = i(t, c);\n          y < f && ((v = 0), (a = r.cloneDeep(c)), (f = y));\n        }\n        h(t, a);\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8);\n      t.exports = function (t) {\n        var n = {},\n          e = r.filter(t.nodes(), function (n) {\n            return !t.children(n).length;\n          }),\n          o = r.max(\n            r.map(e, function (n) {\n              return t.node(n).rank;\n            }),\n          ),\n          i = r.map(r.range(o + 1), function () {\n            return [];\n          });\n        var u = r.sortBy(e, function (n) {\n          return t.node(n).rank;\n        });\n        return (\n          r.forEach(u, function e(o) {\n            if (r.has(n, o)) return;\n            n[o] = !0;\n            var u = t.node(o);\n            i[u.rank].push(o), r.forEach(t.successors(o), e);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8);\n      function o(t, n, e) {\n        for (\n          var o = r.zipObject(\n              e,\n              r.map(e, function (t, n) {\n                return n;\n              }),\n            ),\n            i = r.flatten(\n              r.map(n, function (n) {\n                return r.sortBy(\n                  r.map(t.outEdges(n), function (n) {\n                    return { pos: o[n.w], weight: t.edge(n).weight };\n                  }),\n                  \"pos\",\n                );\n              }),\n              !0,\n            ),\n            u = 1;\n          u < e.length;\n\n        )\n          u <<= 1;\n        var c = 2 * u - 1;\n        u -= 1;\n        var a = r.map(new Array(c), function () {\n            return 0;\n          }),\n          f = 0;\n        return (\n          r.forEach(\n            i.forEach(function (t) {\n              var n = t.pos + u;\n              a[n] += t.weight;\n              for (var e = 0; n > 0; )\n                n % 2 && (e += a[n + 1]), (a[(n = (n - 1) >> 1)] += t.weight);\n              f += t.weight * e;\n            }),\n          ),\n          f\n        );\n      }\n      t.exports = function (t, n) {\n        for (var e = 0, r = 1; r < n.length; ++r) e += o(t, n[r - 1], n[r]);\n        return e;\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(369),\n        i = e(370),\n        u = e(371);\n      t.exports = function t(n, e, c, a) {\n        var f = n.children(e),\n          s = n.node(e),\n          p = s ? s.borderLeft : void 0,\n          d = s ? s.borderRight : void 0,\n          h = {};\n        p &&\n          (f = r.filter(f, function (t) {\n            return t !== p && t !== d;\n          }));\n        var l = o(n, f);\n        r.forEach(l, function (e) {\n          if (n.children(e.v).length) {\n            var o = t(n, e.v, c, a);\n            (h[e.v] = o),\n              r.has(o, \"barycenter\") &&\n                ((i = e),\n                (u = o),\n                r.isUndefined(i.barycenter)\n                  ? ((i.barycenter = u.barycenter), (i.weight = u.weight))\n                  : ((i.barycenter =\n                      (i.barycenter * i.weight + u.barycenter * u.weight) /\n                      (i.weight + u.weight)),\n                    (i.weight += u.weight)));\n          }\n          var i, u;\n        });\n        var v = i(l, c);\n        !(function (t, n) {\n          r.forEach(t, function (t) {\n            t.vs = r.flatten(\n              t.vs.map(function (t) {\n                return n[t] ? n[t].vs : t;\n              }),\n              !0,\n            );\n          });\n        })(v, h);\n        var y = u(v, a);\n        if (\n          p &&\n          ((y.vs = r.flatten([p, y.vs, d], !0)), n.predecessors(p).length)\n        ) {\n          var g = n.node(n.predecessors(p)[0]),\n            b = n.node(n.predecessors(d)[0]);\n          r.has(y, \"barycenter\") || ((y.barycenter = 0), (y.weight = 0)),\n            (y.barycenter =\n              (y.barycenter * y.weight + g.order + b.order) / (y.weight + 2)),\n            (y.weight += 2);\n        }\n        return y;\n      };\n    },\n    function (t, n, e) {\n      var r = e(8);\n      t.exports = function (t, n) {\n        return r.map(n, function (n) {\n          var e = t.inEdges(n);\n          if (e.length) {\n            var o = r.reduce(\n              e,\n              function (n, e) {\n                var r = t.edge(e),\n                  o = t.node(e.v);\n                return {\n                  sum: n.sum + r.weight * o.order,\n                  weight: n.weight + r.weight,\n                };\n              },\n              { sum: 0, weight: 0 },\n            );\n            return { v: n, barycenter: o.sum / o.weight, weight: o.weight };\n          }\n          return { v: n };\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8);\n      t.exports = function (t, n) {\n        var e = {};\n        return (\n          r.forEach(t, function (t, n) {\n            var o = (e[t.v] = {\n              indegree: 0,\n              in: [],\n              out: [],\n              vs: [t.v],\n              i: n,\n            });\n            r.isUndefined(t.barycenter) ||\n              ((o.barycenter = t.barycenter), (o.weight = t.weight));\n          }),\n          r.forEach(n.edges(), function (t) {\n            var n = e[t.v],\n              o = e[t.w];\n            r.isUndefined(n) ||\n              r.isUndefined(o) ||\n              (o.indegree++, n.out.push(e[t.w]));\n          }),\n          (function (t) {\n            var n = [];\n            function e(t) {\n              return function (n) {\n                n.merged ||\n                  ((r.isUndefined(n.barycenter) ||\n                    r.isUndefined(t.barycenter) ||\n                    n.barycenter >= t.barycenter) &&\n                    (function (t, n) {\n                      var e = 0,\n                        r = 0;\n                      t.weight &&\n                        ((e += t.barycenter * t.weight), (r += t.weight));\n                      n.weight &&\n                        ((e += n.barycenter * n.weight), (r += n.weight));\n                      (t.vs = n.vs.concat(t.vs)),\n                        (t.barycenter = e / r),\n                        (t.weight = r),\n                        (t.i = Math.min(n.i, t.i)),\n                        (n.merged = !0);\n                    })(t, n));\n              };\n            }\n            function o(n) {\n              return function (e) {\n                e.in.push(n), 0 == --e.indegree && t.push(e);\n              };\n            }\n            for (; t.length; ) {\n              var i = t.pop();\n              n.push(i),\n                r.forEach(i.in.reverse(), e(i)),\n                r.forEach(i.out, o(i));\n            }\n            return r.map(\n              r.filter(n, function (t) {\n                return !t.merged;\n              }),\n              function (t) {\n                return r.pick(t, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n              },\n            );\n          })(\n            r.filter(e, function (t) {\n              return !t.indegree;\n            }),\n          )\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(19);\n      function i(t, n, e) {\n        for (var o; n.length && (o = r.last(n)).i <= e; )\n          n.pop(), t.push(o.vs), e++;\n        return e;\n      }\n      t.exports = function (t, n) {\n        var e = o.partition(t, function (t) {\n            return r.has(t, \"barycenter\");\n          }),\n          u = e.lhs,\n          c = r.sortBy(e.rhs, function (t) {\n            return -t.i;\n          }),\n          a = [],\n          f = 0,\n          s = 0,\n          p = 0;\n        u.sort(\n          ((d = !!n),\n          function (t, n) {\n            return t.barycenter < n.barycenter\n              ? -1\n              : t.barycenter > n.barycenter\n              ? 1\n              : d\n              ? n.i - t.i\n              : t.i - n.i;\n          }),\n        ),\n          (p = i(a, c, p)),\n          r.forEach(u, function (t) {\n            (p += t.vs.length),\n              a.push(t.vs),\n              (f += t.barycenter * t.weight),\n              (s += t.weight),\n              (p = i(a, c, p));\n          });\n        var d;\n        var h = { vs: r.flatten(a, !0) };\n        s && ((h.barycenter = f / s), (h.weight = s));\n        return h;\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(23).Graph;\n      t.exports = function (t, n, e) {\n        var i = (function (t) {\n            var n;\n            for (; t.hasNode((n = r.uniqueId(\"_root\"))); );\n            return n;\n          })(t),\n          u = new o({ compound: !0 })\n            .setGraph({ root: i })\n            .setDefaultNodeLabel(function (n) {\n              return t.node(n);\n            });\n        return (\n          r.forEach(t.nodes(), function (o) {\n            var c = t.node(o),\n              a = t.parent(o);\n            (c.rank === n || (c.minRank <= n && n <= c.maxRank)) &&\n              (u.setNode(o),\n              u.setParent(o, a || i),\n              r.forEach(t[e](o), function (n) {\n                var e = n.v === o ? n.w : n.v,\n                  i = u.edge(e, o),\n                  c = r.isUndefined(i) ? 0 : i.weight;\n                u.setEdge(e, o, { weight: t.edge(n).weight + c });\n              }),\n              r.has(c, \"minRank\") &&\n                u.setNode(o, {\n                  borderLeft: c.borderLeft[n],\n                  borderRight: c.borderRight[n],\n                }));\n          }),\n          u\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(8);\n      t.exports = function (t, n, e) {\n        var o,\n          i = {};\n        r.forEach(e, function (e) {\n          for (var r, u, c = t.parent(e); c; ) {\n            if (\n              ((r = t.parent(c))\n                ? ((u = i[r]), (i[r] = c))\n                : ((u = o), (o = c)),\n              u && u !== c)\n            )\n              return void n.setEdge(u, c);\n            c = r;\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(19),\n        i = e(375).positionX;\n      t.exports = function (t) {\n        (function (t) {\n          var n = o.buildLayerMatrix(t),\n            e = t.graph().ranksep,\n            i = 0;\n          r.forEach(n, function (n) {\n            var o = r.max(\n              r.map(n, function (n) {\n                return t.node(n).height;\n              }),\n            );\n            r.forEach(n, function (n) {\n              t.node(n).y = i + o / 2;\n            }),\n              (i += o + e);\n          });\n        })((t = o.asNonCompoundGraph(t))),\n          r.forEach(i(t), function (n, e) {\n            t.node(e).x = n;\n          });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(8),\n        o = e(23).Graph,\n        i = e(19);\n      function u(t, n) {\n        var e = {};\n        return (\n          r.reduce(n, function (n, o) {\n            var i = 0,\n              u = 0,\n              c = n.length,\n              f = r.last(o);\n            return (\n              r.forEach(o, function (n, s) {\n                var p = (function (t, n) {\n                    if (t.node(n).dummy)\n                      return r.find(t.predecessors(n), function (n) {\n                        return t.node(n).dummy;\n                      });\n                  })(t, n),\n                  d = p ? t.node(p).order : c;\n                (p || n === f) &&\n                  (r.forEach(o.slice(u, s + 1), function (n) {\n                    r.forEach(t.predecessors(n), function (r) {\n                      var o = t.node(r),\n                        u = o.order;\n                      !(u < i || d < u) ||\n                        (o.dummy && t.node(n).dummy) ||\n                        a(e, r, n);\n                    });\n                  }),\n                  (u = s + 1),\n                  (i = d));\n              }),\n              o\n            );\n          }),\n          e\n        );\n      }\n      function c(t, n) {\n        var e = {};\n        function o(n, o, i, u, c) {\n          var f;\n          r.forEach(r.range(o, i), function (o) {\n            (f = n[o]),\n              t.node(f).dummy &&\n                r.forEach(t.predecessors(f), function (n) {\n                  var r = t.node(n);\n                  r.dummy && (r.order < u || r.order > c) && a(e, n, f);\n                });\n          });\n        }\n        return (\n          r.reduce(n, function (n, e) {\n            var i,\n              u = -1,\n              c = 0;\n            return (\n              r.forEach(e, function (r, a) {\n                if (\"border\" === t.node(r).dummy) {\n                  var f = t.predecessors(r);\n                  f.length &&\n                    ((i = t.node(f[0]).order),\n                    o(e, c, a, u, i),\n                    (c = a),\n                    (u = i));\n                }\n                o(e, c, e.length, i, n.length);\n              }),\n              e\n            );\n          }),\n          e\n        );\n      }\n      function a(t, n, e) {\n        if (n > e) {\n          var r = n;\n          (n = e), (e = r);\n        }\n        var o = t[n];\n        o || (t[n] = o = {}), (o[e] = !0);\n      }\n      function f(t, n, e) {\n        if (n > e) {\n          var o = n;\n          (n = e), (e = o);\n        }\n        return r.has(t[n], e);\n      }\n      function s(t, n, e, o) {\n        var i = {},\n          u = {},\n          c = {};\n        return (\n          r.forEach(n, function (t) {\n            r.forEach(t, function (t, n) {\n              (i[t] = t), (u[t] = t), (c[t] = n);\n            });\n          }),\n          r.forEach(n, function (t) {\n            var n = -1;\n            r.forEach(t, function (t) {\n              var a = o(t);\n              if (a.length)\n                for (\n                  var s =\n                      ((a = r.sortBy(a, function (t) {\n                        return c[t];\n                      })).length -\n                        1) /\n                      2,\n                    p = Math.floor(s),\n                    d = Math.ceil(s);\n                  p <= d;\n                  ++p\n                ) {\n                  var h = a[p];\n                  u[t] === t &&\n                    n < c[h] &&\n                    !f(e, t, h) &&\n                    ((u[h] = t), (u[t] = i[t] = i[h]), (n = c[h]));\n                }\n            });\n          }),\n          { root: i, align: u }\n        );\n      }\n      function p(t, n, e, i, u) {\n        var c = {},\n          a = (function (t, n, e, i) {\n            var u = new o(),\n              c = t.graph(),\n              a = (function (t, n, e) {\n                return function (o, i, u) {\n                  var c,\n                    a = o.node(i),\n                    f = o.node(u),\n                    s = 0;\n                  if (((s += a.width / 2), r.has(a, \"labelpos\")))\n                    switch (a.labelpos.toLowerCase()) {\n                      case \"l\":\n                        c = -a.width / 2;\n                        break;\n                      case \"r\":\n                        c = a.width / 2;\n                    }\n                  if (\n                    (c && (s += e ? c : -c),\n                    (c = 0),\n                    (s += (a.dummy ? n : t) / 2),\n                    (s += (f.dummy ? n : t) / 2),\n                    (s += f.width / 2),\n                    r.has(f, \"labelpos\"))\n                  )\n                    switch (f.labelpos.toLowerCase()) {\n                      case \"l\":\n                        c = f.width / 2;\n                        break;\n                      case \"r\":\n                        c = -f.width / 2;\n                    }\n                  return c && (s += e ? c : -c), (c = 0), s;\n                };\n              })(c.nodesep, c.edgesep, i);\n            return (\n              r.forEach(n, function (n) {\n                var o;\n                r.forEach(n, function (n) {\n                  var r = e[n];\n                  if ((u.setNode(r), o)) {\n                    var i = e[o],\n                      c = u.edge(i, r);\n                    u.setEdge(i, r, Math.max(a(t, n, o), c || 0));\n                  }\n                  o = n;\n                });\n              }),\n              u\n            );\n          })(t, n, e, u),\n          f = u ? \"borderLeft\" : \"borderRight\";\n        function s(t, n) {\n          for (var e = a.nodes(), r = e.pop(), o = {}; r; )\n            o[r] ? t(r) : ((o[r] = !0), e.push(r), (e = e.concat(n(r)))),\n              (r = e.pop());\n        }\n        return (\n          s(function (t) {\n            c[t] = a.inEdges(t).reduce(function (t, n) {\n              return Math.max(t, c[n.v] + a.edge(n));\n            }, 0);\n          }, a.predecessors.bind(a)),\n          s(function (n) {\n            var e = a.outEdges(n).reduce(function (t, n) {\n                return Math.min(t, c[n.w] - a.edge(n));\n              }, Number.POSITIVE_INFINITY),\n              r = t.node(n);\n            e !== Number.POSITIVE_INFINITY &&\n              r.borderType !== f &&\n              (c[n] = Math.max(c[n], e));\n          }, a.successors.bind(a)),\n          r.forEach(i, function (t) {\n            c[t] = c[e[t]];\n          }),\n          c\n        );\n      }\n      function d(t, n) {\n        return r.minBy(r.values(n), function (n) {\n          var e = Number.NEGATIVE_INFINITY,\n            o = Number.POSITIVE_INFINITY;\n          return (\n            r.forIn(n, function (n, r) {\n              var i =\n                (function (t, n) {\n                  return t.node(n).width;\n                })(t, r) / 2;\n              (e = Math.max(n + i, e)), (o = Math.min(n - i, o));\n            }),\n            e - o\n          );\n        });\n      }\n      function h(t, n) {\n        var e = r.values(n),\n          o = r.min(e),\n          i = r.max(e);\n        r.forEach([\"u\", \"d\"], function (e) {\n          r.forEach([\"l\", \"r\"], function (u) {\n            var c,\n              a = e + u,\n              f = t[a];\n            if (f !== n) {\n              var s = r.values(f);\n              (c = \"l\" === u ? o - r.min(s) : i - r.max(s)) &&\n                (t[a] = r.mapValues(f, function (t) {\n                  return t + c;\n                }));\n            }\n          });\n        });\n      }\n      function l(t, n) {\n        return r.mapValues(t.ul, function (e, o) {\n          if (n) return t[n.toLowerCase()][o];\n          var i = r.sortBy(r.map(t, o));\n          return (i[1] + i[2]) / 2;\n        });\n      }\n      t.exports = {\n        positionX: function (t) {\n          var n,\n            e = i.buildLayerMatrix(t),\n            o = r.merge(u(t, e), c(t, e)),\n            a = {};\n          r.forEach([\"u\", \"d\"], function (i) {\n            (n = \"u\" === i ? e : r.values(e).reverse()),\n              r.forEach([\"l\", \"r\"], function (e) {\n                \"r\" === e &&\n                  (n = r.map(n, function (t) {\n                    return r.values(t).reverse();\n                  }));\n                var u = (\"u\" === i ? t.predecessors : t.successors).bind(t),\n                  c = s(t, n, o, u),\n                  f = p(t, n, c.root, c.align, \"r\" === e);\n                \"r\" === e &&\n                  (f = r.mapValues(f, function (t) {\n                    return -t;\n                  })),\n                  (a[i + e] = f);\n              });\n          });\n          var f = d(t, a);\n          return h(a, f), l(a, t.graph().align);\n        },\n        findType1Conflicts: u,\n        findType2Conflicts: c,\n        addConflict: a,\n        hasConflict: f,\n        verticalAlignment: s,\n        horizontalCompaction: p,\n        alignCoordinates: h,\n        findSmallestWidthAlignment: d,\n        balance: l,\n      };\n    },\n    function (t, n, e) {\n      var r = e(8),\n        o = e(19),\n        i = e(23).Graph;\n      t.exports = {\n        debugOrdering: function (t) {\n          var n = o.buildLayerMatrix(t),\n            e = new i({ compound: !0, multigraph: !0 }).setGraph({});\n          return (\n            r.forEach(t.nodes(), function (n) {\n              e.setNode(n, { label: n }),\n                e.setParent(n, \"layer\" + t.node(n).rank);\n            }),\n            r.forEach(t.edges(), function (t) {\n              e.setEdge(t.v, t.w, {}, t.name);\n            }),\n            r.forEach(n, function (t, n) {\n              var o = \"layer\" + n;\n              e.setNode(o, { rank: \"same\" }),\n                r.reduce(t, function (t, n) {\n                  return e.setEdge(t, n, { style: \"invis\" }), n;\n                });\n            }),\n            e\n          );\n        },\n      };\n    },\n    function (t, n) {\n      t.exports = \"0.8.5\";\n    },\n  ]).default;\n});\n//# sourceMappingURL=dagreLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/forceAtlas2Layout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.ForceAtlas2Layout = e())\n    : (t.ForceAtlas2Layout = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function r(i) {\n      if (e[i]) return e[i].exports;\n      var n = (e[i] = { i: i, l: !1, exports: {} });\n      return t[i].call(n.exports, n, n.exports, r), (n.l = !0), n.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = e),\n      (r.d = function (t, e, i) {\n        r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: i });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, e) {\n        if ((1 & e && (t = r(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var i = Object.create(null);\n        if (\n          (r.r(i),\n          Object.defineProperty(i, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var n in t)\n            r.d(\n              i,\n              n,\n              function (e) {\n                return t[e];\n              }.bind(null, n),\n            );\n        return i;\n      }),\n      (r.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(e, \"a\", e), e;\n      }),\n      (r.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (r.p = \"\"),\n      r((r.s = 378))\n    );\n  })({\n    10: function (t, e, r) {\n      \"use strict\";\n      var i =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, r, i) {\n                void 0 === i && (i = r),\n                  Object.defineProperty(t, i, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[r];\n                    },\n                  });\n              }\n            : function (t, e, r, i) {\n                void 0 === i && (i = r), (t[i] = e[r]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var r in t)\n              \"default\" === r ||\n                Object.prototype.hasOwnProperty.call(e, r) ||\n                i(e, t, r);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        n(r(11), e),\n        n(r(12), e),\n        n(r(13), e),\n        n(r(14), e),\n        n(r(15), e),\n        n(r(16), e);\n    },\n    11: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var i,\n        n,\n        o = /-(\\w)/g;\n      e.camelize =\n        ((i = function (t) {\n          return t.replace(o, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = i(t));\n        });\n    },\n    12: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var r = parseFloat(t);\n        return e.isNaN(r) ? t : r;\n      };\n    },\n    14: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, r) {\n        for (var i = [], n = 0; n < t; n++) i[n] = 0;\n        return r\n          ? (r.forEach(function (t) {\n              t.source && (i[e[t.source]] += 1),\n                t.target && (i[e[t.target]] += 1);\n            }),\n            i)\n          : i;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], r = t.length, i = 0; i < r; i += 1) {\n          e[i] = [];\n          for (var n = 0; n < r; n += 1)\n            i === n\n              ? (e[i][n] = 0)\n              : 0 !== t[i][n] && t[i][n]\n              ? (e[i][n] = t[i][n])\n              : (e[i][n] = 1 / 0);\n        }\n        for (var o = 0; o < r; o += 1)\n          for (i = 0; i < r; i += 1)\n            for (n = 0; n < r; n += 1)\n              e[i][n] > e[i][o] + e[o][n] && (e[i][n] = e[i][o] + e[o][n]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var r = t.nodes,\n          i = t.edges,\n          n = [],\n          o = {};\n        if (!r) throw new Error(\"invalid nodes data!\");\n        return (\n          r &&\n            r.forEach(function (t, e) {\n              o[t.id] = e;\n              n.push([]);\n            }),\n          i &&\n            i.forEach(function (t) {\n              var r = t.source,\n                i = t.target,\n                s = o[r],\n                u = o[i];\n              (n[s][u] = 1), e || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var r = [];\n        return (\n          t.forEach(function (t) {\n            var i = [];\n            t.forEach(function (t) {\n              i.push(t * e);\n            }),\n              r.push(i);\n          }),\n          r\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, r) {\n            if (e && e.children)\n              for (var i = e.children.length - 1; i >= 0; i--)\n                if (!t(e.children[i], r)) return;\n            return !!r(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, r) {\n      \"use strict\";\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var e, r = 1, i = arguments.length; r < i; r++)\n                for (var n in (e = arguments[r]))\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === i(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var r = [];\n          return (\n            t.forEach(function (t) {\n              r.push(t);\n            }),\n            r.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === i(t) && t !== {}) {\n          var o = n({}, t);\n          return (\n            Object.keys(o).forEach(function (t) {\n              o[t] = e.clone(o[t]);\n            }),\n            o\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    162: function (t, e, r) {\n      \"use strict\";\n      var i,\n        n =\n          (this && this.__extends) ||\n          ((i = function (t, e) {\n            return (i =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var r in e)\n                  Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function r() {\n              this.constructor = t;\n            }\n            i(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((r.prototype = e.prototype), new r()));\n          }),\n        o =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.ForceAtlas2Layout = void 0);\n      var s = r(9),\n        u = r(10),\n        h = o(r(379)),\n        a = o(r(380)),\n        c = o(r(381)),\n        d = (function (t) {\n          function e(e) {\n            var r = t.call(this) || this;\n            return (\n              (r.center = [0, 0]),\n              (r.width = 300),\n              (r.height = 300),\n              (r.nodes = []),\n              (r.edges = []),\n              (r.kr = 5),\n              (r.kg = 1),\n              (r.mode = \"normal\"),\n              (r.preventOverlap = !1),\n              (r.dissuadeHubs = !1),\n              (r.barnesHut = !1),\n              (r.maxIteration = 0),\n              (r.ks = 0.1),\n              (r.ksmax = 10),\n              (r.tao = 0.1),\n              (r.onLayoutEnd = function () {}),\n              (r.prune = !1),\n              r.updateCfg(e),\n              r\n            );\n          }\n          return (\n            n(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.execute = function () {\n              var t = this.nodes,\n                e = this.maxIteration,\n                r = this.onLayoutEnd,\n                i = this.prune;\n              this.width ||\n                \"undefined\" == typeof window ||\n                (this.width = window.innerWidth),\n                this.height ||\n                  \"undefined\" == typeof window ||\n                  (this.height = window.innerHeight);\n              for (var n = [], o = t.length, s = 0; s < o; s += 1) {\n                var h = t[s],\n                  a = 10,\n                  c = 10;\n                u.isNumber(h.size) && ((a = h.size), (c = h.size)),\n                  u.isArray(h.size) &&\n                    (isNaN(h.size[0]) || (a = h.size[0]),\n                    isNaN(h.size[1]) || (c = h.size[1])),\n                  this.getWidth &&\n                    !isNaN(this.getWidth(h)) &&\n                    (c = this.getWidth(h)),\n                  this.getHeight &&\n                    !isNaN(this.getHeight(h)) &&\n                    (a = this.getHeight(h));\n                var d = Math.max(a, c);\n                n.push(d);\n              }\n              !this.barnesHut && o > 250 && (this.barnesHut = !0),\n                !this.prune && o > 100 && (this.prune = !0),\n                0 !== this.maxIteration || this.prune\n                  ? 0 === this.maxIteration &&\n                    i &&\n                    ((e = 100),\n                    o <= 200 && o > 100 ? (e = 500) : o > 200 && (e = 950),\n                    (this.maxIteration = e))\n                  : ((e = 250),\n                    o <= 200 && o > 100 ? (e = 1e3) : o > 200 && (e = 1200),\n                    (this.maxIteration = e)),\n                this.kr ||\n                  ((this.kr = 50),\n                  o > 100 && o <= 500\n                    ? (this.kr = 20)\n                    : o > 500 && (this.kr = 1)),\n                this.kg ||\n                  ((this.kg = 20),\n                  o > 100 && o <= 500\n                    ? (this.kg = 10)\n                    : o > 500 && (this.kg = 1)),\n                (this.nodes = this.updateNodesByForces(n)),\n                r();\n            }),\n            (e.prototype.updateNodesByForces = function (t) {\n              for (\n                var e = this.nodes,\n                  r = this.edges,\n                  i = this.maxIteration,\n                  n = r.filter(function (t) {\n                    return t.source !== t.target;\n                  }),\n                  o = e.length,\n                  s = n.length,\n                  u = [],\n                  h = {},\n                  a = {},\n                  c = [],\n                  d = 0;\n                d < o;\n                d += 1\n              )\n                (h[e[d].id] = d),\n                  (u[d] = 0),\n                  (void 0 === e[d].x || isNaN(e[d].x)) &&\n                    (e[d].x = 1e3 * Math.random()),\n                  (void 0 === e[d].y || isNaN(e[d].y)) &&\n                    (e[d].y = 1e3 * Math.random()),\n                  c.push({ x: e[d].x, y: e[d].y });\n              for (d = 0; d < s; d += 1) {\n                for (\n                  var f = void 0, p = void 0, l = 0, y = 0, g = 0;\n                  g < o;\n                  g += 1\n                )\n                  e[g].id === n[d].source\n                    ? ((f = e[g]), (l = g))\n                    : e[g].id === n[d].target && ((p = e[g]), (y = g)),\n                    (a[d] = { sourceIdx: l, targetIdx: y });\n                f && (u[h[f.id]] += 1), p && (u[h[p.id]] += 1);\n              }\n              var v = i;\n              if (((e = this.iterate(v, h, a, s, u, t)), this.prune)) {\n                for (g = 0; g < s; g += 1)\n                  u[a[g].sourceIdx] <= 1\n                    ? ((e[a[g].sourceIdx].x = e[a[g].targetIdx].x),\n                      (e[a[g].sourceIdx].y = e[a[g].targetIdx].y))\n                    : u[a[g].targetIdx] <= 1 &&\n                      ((e[a[g].targetIdx].x = e[a[g].sourceIdx].x),\n                      (e[a[g].targetIdx].y = e[a[g].sourceIdx].y));\n                (this.prune = !1),\n                  (this.barnesHut = !1),\n                  (v = 100),\n                  (e = this.iterate(v, h, a, s, u, t));\n              }\n              return e;\n            }),\n            (e.prototype.iterate = function (t, e, r, i, n, o) {\n              for (\n                var s = this.nodes,\n                  u = this.kr,\n                  a = this.preventOverlap,\n                  c = this.barnesHut,\n                  d = s.length,\n                  f = 0,\n                  p = t,\n                  l = [],\n                  y = [],\n                  g = [],\n                  v = 0;\n                v < d;\n                v += 1\n              )\n                if (((l[2 * v] = 0), (l[2 * v + 1] = 0), c)) {\n                  var x = {\n                    id: v,\n                    rx: s[v].x,\n                    ry: s[v].y,\n                    mass: 1,\n                    g: u,\n                    degree: n[v],\n                  };\n                  g[v] = new h.default(x);\n                }\n              for (; p > 0; ) {\n                for (v = 0; v < d; v += 1)\n                  (y[2 * v] = l[2 * v]),\n                    (y[2 * v + 1] = l[2 * v + 1]),\n                    (l[2 * v] = 0),\n                    (l[2 * v + 1] = 0);\n                (l = this.getAttrForces(p, 50, i, e, r, n, o, l)),\n                  (l =\n                    c && ((a && p > 50) || !a)\n                      ? this.getOptRepGraForces(l, g, n)\n                      : this.getRepGraForces(p, 50, l, 100, o, n));\n                var m = this.updatePos(l, y, f, n);\n                (s = m.nodes), (f = m.sg), p--, this.tick && this.tick();\n              }\n              return s;\n            }),\n            (e.prototype.getAttrForces = function (t, e, r, i, n, o, s, u) {\n              for (\n                var h = this.nodes,\n                  a = this.preventOverlap,\n                  c = this.dissuadeHubs,\n                  d = this.mode,\n                  f = this.prune,\n                  p = 0;\n                p < r;\n                p += 1\n              ) {\n                var l = h[n[p].sourceIdx],\n                  y = n[p].sourceIdx,\n                  g = h[n[p].targetIdx],\n                  v = n[p].targetIdx;\n                if (!f || !(o[y] <= 1 || o[v] <= 1)) {\n                  var x = [g.x - l.x, g.y - l.y],\n                    m = Math.hypot(x[0], x[1]);\n                  (m = m < 1e-4 ? 1e-4 : m),\n                    (x[0] = x[0] / m),\n                    (x[1] = x[1] / m),\n                    a && t < e && (m = m - s[y] - s[v]);\n                  var b = m,\n                    _ = b;\n                  \"linlog\" === d && (_ = b = Math.log(1 + m)),\n                    c && ((b = m / o[y]), (_ = m / o[v])),\n                    a && t < e && m <= 0\n                      ? ((b = 0), (_ = 0))\n                      : a && t < e && m > 0 && ((b = m), (_ = m)),\n                    (u[2 * i[l.id]] += b * x[0]),\n                    (u[2 * i[g.id]] -= _ * x[0]),\n                    (u[2 * i[l.id] + 1] += b * x[1]),\n                    (u[2 * i[g.id] + 1] -= _ * x[1]);\n                }\n              }\n              return u;\n            }),\n            (e.prototype.getRepGraForces = function (t, e, r, i, n, o) {\n              for (\n                var s = this.nodes,\n                  u = this.preventOverlap,\n                  h = this.kr,\n                  a = this.kg,\n                  c = this.center,\n                  d = this.prune,\n                  f = s.length,\n                  p = 0;\n                p < f;\n                p += 1\n              ) {\n                for (var l = p + 1; l < f; l += 1)\n                  if (!d || !(o[p] <= 1 || o[l] <= 1)) {\n                    var y = [s[l].x - s[p].x, s[l].y - s[p].y],\n                      g = Math.hypot(y[0], y[1]);\n                    (g = g < 1e-4 ? 1e-4 : g),\n                      (y[0] = y[0] / g),\n                      (y[1] = y[1] / g),\n                      u && t < e && (g = g - n[p] - n[l]);\n                    var v = (h * (o[p] + 1) * (o[l] + 1)) / g;\n                    u && t < e && g < 0\n                      ? (v = i * (o[p] + 1) * (o[l] + 1))\n                      : u && t < e && 0 === g\n                      ? (v = 0)\n                      : u &&\n                        t < e &&\n                        g > 0 &&\n                        (v = (h * (o[p] + 1) * (o[l] + 1)) / g),\n                      (r[2 * p] -= v * y[0]),\n                      (r[2 * l] += v * y[0]),\n                      (r[2 * p + 1] -= v * y[1]),\n                      (r[2 * l + 1] += v * y[1]);\n                  }\n                var x = [s[p].x - c[0], s[p].y - c[1]],\n                  m = Math.hypot(x[0], x[1]);\n                (x[0] = x[0] / m), (x[1] = x[1] / m);\n                var b = a * (o[p] + 1);\n                (r[2 * p] -= b * x[0]), (r[2 * p + 1] -= b * x[1]);\n              }\n              return r;\n            }),\n            (e.prototype.getOptRepGraForces = function (t, e, r) {\n              for (\n                var i = this.nodes,\n                  n = this.kg,\n                  o = this.center,\n                  s = this.prune,\n                  u = i.length,\n                  h = 9e10,\n                  d = -9e10,\n                  f = 9e10,\n                  p = -9e10,\n                  l = 0;\n                l < u;\n                l += 1\n              )\n                (s && r[l] <= 1) ||\n                  (e[l].setPos(i[l].x, i[l].y),\n                  i[l].x >= d && (d = i[l].x),\n                  i[l].x <= h && (h = i[l].x),\n                  i[l].y >= p && (p = i[l].y),\n                  i[l].y <= f && (f = i[l].y));\n              var y = {\n                  xmid: (d + h) / 2,\n                  ymid: (p + f) / 2,\n                  length: Math.max(d - h, p - f),\n                  massCenter: o,\n                  mass: u,\n                },\n                g = new a.default(y),\n                v = new c.default(g);\n              for (l = 0; l < u; l += 1)\n                (s && r[l] <= 1) || (e[l].in(g) && v.insert(e[l]));\n              for (l = 0; l < u; l += 1)\n                if (!(s && r[l] <= 1)) {\n                  e[l].resetForce(),\n                    v.updateForce(e[l]),\n                    (t[2 * l] -= e[l].fx),\n                    (t[2 * l + 1] -= e[l].fy);\n                  var x = [i[l].x - o[0], i[l].y - o[1]],\n                    m = Math.hypot(x[0], x[1]);\n                  (m = m < 1e-4 ? 1e-4 : m),\n                    (x[0] = x[0] / m),\n                    (x[1] = x[1] / m);\n                  var b = n * (r[l] + 1);\n                  (t[2 * l] -= b * x[0]), (t[2 * l + 1] -= b * x[1]);\n                }\n              return t;\n            }),\n            (e.prototype.updatePos = function (t, e, r, i) {\n              for (\n                var n = this.nodes,\n                  o = this.ks,\n                  s = this.tao,\n                  u = this.prune,\n                  h = this.ksmax,\n                  a = n.length,\n                  c = [],\n                  d = [],\n                  f = 0,\n                  p = 0,\n                  l = 0;\n                l < a;\n                l += 1\n              )\n                if (!(u && i[l] <= 1)) {\n                  var y = [t[2 * l] - e[2 * l], t[2 * l + 1] - e[2 * l + 1]],\n                    g = Math.hypot(y[0], y[1]),\n                    v = [t[2 * l] + e[2 * l], t[2 * l + 1] + e[2 * l + 1]],\n                    x = Math.hypot(v[0], v[1]);\n                  (c[l] = g),\n                    (d[l] = x / 2),\n                    (f += (i[l] + 1) * c[l]),\n                    (p += (i[l] + 1) * d[l]);\n                }\n              var m = r;\n              (r = (s * p) / f), 0 !== m && (r = r > 1.5 * m ? 1.5 * m : r);\n              for (l = 0; l < a; l += 1)\n                if (!(u && i[l] <= 1)) {\n                  var b = (o * r) / (1 + r * Math.sqrt(c[l])),\n                    _ = Math.hypot(t[2 * l], t[2 * l + 1]),\n                    N = h / (_ = _ < 1e-4 ? 1e-4 : _),\n                    O = (b = b > N ? N : b) * t[2 * l],\n                    j = b * t[2 * l + 1];\n                  (n[l].x += O), (n[l].y += j);\n                }\n              return { nodes: n, sg: r };\n            }),\n            e\n          );\n        })(s.Base);\n      e.ForceAtlas2Layout = d;\n    },\n    378: function (t, e, r) {\n      \"use strict\";\n      r.r(e);\n      var i = r(162);\n      e.default = i.ForceAtlas2Layout;\n    },\n    379: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var i = (function () {\n        function t(t) {\n          (this.id = t.id || 0),\n            (this.rx = t.rx),\n            (this.ry = t.ry),\n            (this.fx = 0),\n            (this.fy = 0),\n            (this.mass = t.mass),\n            (this.degree = t.degree),\n            (this.g = t.g || 0);\n        }\n        return (\n          (t.prototype.distanceTo = function (t) {\n            var e = this.rx - t.rx,\n              r = this.ry - t.ry;\n            return Math.hypot(e, r);\n          }),\n          (t.prototype.setPos = function (t, e) {\n            (this.rx = t), (this.ry = e);\n          }),\n          (t.prototype.resetForce = function () {\n            (this.fx = 0), (this.fy = 0);\n          }),\n          (t.prototype.addForce = function (t) {\n            var e = t.rx - this.rx,\n              r = t.ry - this.ry,\n              i = Math.hypot(e, r);\n            i = i < 1e-4 ? 1e-4 : i;\n            var n = (this.g * (this.degree + 1) * (t.degree + 1)) / i;\n            (this.fx += (n * e) / i), (this.fy += (n * r) / i);\n          }),\n          (t.prototype.in = function (t) {\n            return t.contains(this.rx, this.ry);\n          }),\n          (t.prototype.add = function (e) {\n            var r = this.mass + e.mass;\n            return new t({\n              rx: (this.rx * this.mass + e.rx * e.mass) / r,\n              ry: (this.ry * this.mass + e.ry * e.mass) / r,\n              mass: r,\n              degree: this.degree + e.degree,\n            });\n          }),\n          t\n        );\n      })();\n      e.default = i;\n    },\n    380: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var i = (function () {\n        function t(t) {\n          (this.xmid = t.xmid),\n            (this.ymid = t.ymid),\n            (this.length = t.length),\n            (this.massCenter = t.massCenter || [0, 0]),\n            (this.mass = t.mass || 1);\n        }\n        return (\n          (t.prototype.getLength = function () {\n            return this.length;\n          }),\n          (t.prototype.contains = function (t, e) {\n            var r = this.length / 2;\n            return (\n              t <= this.xmid + r &&\n              t >= this.xmid - r &&\n              e <= this.ymid + r &&\n              e >= this.ymid - r\n            );\n          }),\n          (t.prototype.NW = function () {\n            return new t({\n              xmid: this.xmid - this.length / 4,\n              ymid: this.ymid + this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.NE = function () {\n            return new t({\n              xmid: this.xmid + this.length / 4,\n              ymid: this.ymid + this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.SW = function () {\n            return new t({\n              xmid: this.xmid - this.length / 4,\n              ymid: this.ymid - this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.SE = function () {\n            return new t({\n              xmid: this.xmid + this.length / 4,\n              ymid: this.ymid - this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          t\n        );\n      })();\n      e.default = i;\n    },\n    381: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var i = (function () {\n        function t(t) {\n          (this.body = null),\n            (this.quad = null),\n            (this.NW = null),\n            (this.NE = null),\n            (this.SW = null),\n            (this.SE = null),\n            (this.theta = 0.5),\n            null != t && (this.quad = t);\n        }\n        return (\n          (t.prototype.insert = function (e) {\n            null != this.body\n              ? this._isExternal()\n                ? (this.quad &&\n                    ((this.NW = new t(this.quad.NW())),\n                    (this.NE = new t(this.quad.NE())),\n                    (this.SW = new t(this.quad.SW())),\n                    (this.SE = new t(this.quad.SE()))),\n                  this._putBody(this.body),\n                  this._putBody(e),\n                  (this.body = this.body.add(e)))\n                : ((this.body = this.body.add(e)), this._putBody(e))\n              : (this.body = e);\n          }),\n          (t.prototype._putBody = function (t) {\n            this.quad &&\n              (t.in(this.quad.NW()) && this.NW\n                ? this.NW.insert(t)\n                : t.in(this.quad.NE()) && this.NE\n                ? this.NE.insert(t)\n                : t.in(this.quad.SW()) && this.SW\n                ? this.SW.insert(t)\n                : t.in(this.quad.SE()) && this.SE && this.SE.insert(t));\n          }),\n          (t.prototype._isExternal = function () {\n            return (\n              null == this.NW &&\n              null == this.NE &&\n              null == this.SW &&\n              null == this.SE\n            );\n          }),\n          (t.prototype.updateForce = function (t) {\n            null != this.body &&\n              t !== this.body &&\n              (this._isExternal() ||\n              (this.quad ? this.quad.getLength() : 0) /\n                this.body.distanceTo(t) <\n                this.theta\n                ? t.addForce(this.body)\n                : (this.NW && this.NW.updateForce(t),\n                  this.NE && this.NE.updateForce(t),\n                  this.SW && this.SW.updateForce(t),\n                  this.SE && this.SE.updateForce(t)));\n          }),\n          t\n        );\n      })();\n      e.default = i;\n    },\n    9: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var i = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = i;\n    },\n  }).default;\n});\n//# sourceMappingURL=forceAtlas2Layout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/forceLayout.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.ForceLayout = n())\n    : (t.ForceLayout = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function e(r) {\n      if (n[r]) return n[r].exports;\n      var o = (n[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, e), (o.l = !0), o.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = n),\n      (e.d = function (t, n, r) {\n        e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: r });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, n) {\n        if ((1 & n && (t = e(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (e.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var o in t)\n            e.d(\n              r,\n              o,\n              function (n) {\n                return t[n];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (e.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(n, \"a\", n), n;\n      }),\n      (e.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (e.p = \"\"),\n      e((e.s = 382))\n    );\n  })({\n    10: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        o(e(11), n),\n        o(e(12), n),\n        o(e(13), n),\n        o(e(14), n),\n        o(e(15), n),\n        o(e(16), n);\n    },\n    11: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.camelize = n.isString = void 0);\n      n.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      n.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, n) {\n            return n ? n.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isArray = void 0),\n        (n.isArray = Array.isArray);\n    },\n    13: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.toNumber = n.isNaN = n.isNumber = void 0);\n      n.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      n.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      n.toNumber = function (t) {\n        var e = parseFloat(t);\n        return n.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.traverseTreeUp =\n          n.scaleMatrix =\n          n.getAdjMatrix =\n          n.floydWarshall =\n          n.getDegree =\n            void 0);\n      n.getDegree = function (t, n, e) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (r[n[t.source]] += 1),\n                t.target && (r[n[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      n.floydWarshall = function (t) {\n        for (var n = [], e = t.length, r = 0; r < e; r += 1) {\n          n[r] = [];\n          for (var o = 0; o < e; o += 1)\n            r === o\n              ? (n[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (n[r][o] = t[r][o])\n              : (n[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (r = 0; r < e; r += 1)\n            for (o = 0; o < e; o += 1)\n              n[r][o] > n[r][i] + n[i][o] && (n[r][o] = n[r][i] + n[i][o]);\n        return n;\n      };\n      n.getAdjMatrix = function (t, n) {\n        var e = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, n) {\n              i[t.id] = n;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var e = t.source,\n                r = t.target,\n                u = i[e],\n                c = i[r];\n              (o[u][c] = 1), n || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      n.scaleMatrix = function (t, n) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * n);\n            }),\n              e.push(r);\n          }),\n          e\n        );\n      };\n      n.traverseTreeUp = function (t, n) {\n        \"function\" == typeof n &&\n          (function t(n, e) {\n            if (n && n.children)\n              for (var r = n.children.length - 1; r >= 0; r--)\n                if (!t(n.children[r], e)) return;\n            return !!e(n);\n          })(t, n);\n      };\n    },\n    15: function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var n, e = 1, r = arguments.length; e < r; e++)\n                for (var o in (n = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.clone = n.isObject = void 0);\n      n.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      n.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return n.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = n.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    156: function (t, n, e) {\n      \"use strict\";\n      e.r(n),\n        e.d(n, \"forceCenter\", function () {\n          return r;\n        }),\n        e.d(n, \"forceCollide\", function () {\n          return v;\n        }),\n        e.d(n, \"forceLink\", function () {\n          return b;\n        }),\n        e.d(n, \"forceManyBody\", function () {\n          return V;\n        }),\n        e.d(n, \"forceRadial\", function () {\n          return Z;\n        }),\n        e.d(n, \"forceSimulation\", function () {\n          return Q;\n        }),\n        e.d(n, \"forceX\", function () {\n          return $;\n        }),\n        e.d(n, \"forceY\", function () {\n          return tt;\n        });\n      var r = function (t, n) {\n        var e,\n          r = 1;\n        function o() {\n          var o,\n            i,\n            u = e.length,\n            c = 0,\n            f = 0;\n          for (o = 0; o < u; ++o) (c += (i = e[o]).x), (f += i.y);\n          for (c = (c / u - t) * r, f = (f / u - n) * r, o = 0; o < u; ++o)\n            ((i = e[o]).x -= c), (i.y -= f);\n        }\n        return (\n          null == t && (t = 0),\n          null == n && (n = 0),\n          (o.initialize = function (t) {\n            e = t;\n          }),\n          (o.x = function (n) {\n            return arguments.length ? ((t = +n), o) : t;\n          }),\n          (o.y = function (t) {\n            return arguments.length ? ((n = +t), o) : n;\n          }),\n          (o.strength = function (t) {\n            return arguments.length ? ((r = +t), o) : r;\n          }),\n          o\n        );\n      };\n      function o(t, n, e, r) {\n        if (isNaN(n) || isNaN(e)) return t;\n        var o,\n          i,\n          u,\n          c,\n          f,\n          a,\n          l,\n          s,\n          h,\n          d = t._root,\n          y = { data: r },\n          p = t._x0,\n          v = t._y0,\n          g = t._x1,\n          _ = t._y1;\n        if (!d) return (t._root = y), t;\n        for (; d.length; )\n          if (\n            ((a = n >= (i = (p + g) / 2)) ? (p = i) : (g = i),\n            (l = e >= (u = (v + _) / 2)) ? (v = u) : (_ = u),\n            (o = d),\n            !(d = d[(s = (l << 1) | a)]))\n          )\n            return (o[s] = y), t;\n        if (\n          ((c = +t._x.call(null, d.data)),\n          (f = +t._y.call(null, d.data)),\n          n === c && e === f)\n        )\n          return (y.next = d), o ? (o[s] = y) : (t._root = y), t;\n        do {\n          (o = o ? (o[s] = new Array(4)) : (t._root = new Array(4))),\n            (a = n >= (i = (p + g) / 2)) ? (p = i) : (g = i),\n            (l = e >= (u = (v + _) / 2)) ? (v = u) : (_ = u);\n        } while ((s = (l << 1) | a) == (h = ((f >= u) << 1) | (c >= i)));\n        return (o[h] = d), (o[s] = y), t;\n      }\n      var i = function (t, n, e, r, o) {\n        (this.node = t),\n          (this.x0 = n),\n          (this.y0 = e),\n          (this.x1 = r),\n          (this.y1 = o);\n      };\n      function u(t) {\n        return t[0];\n      }\n      function c(t) {\n        return t[1];\n      }\n      function f(t, n, e) {\n        var r = new a(null == n ? u : n, null == e ? c : e, NaN, NaN, NaN, NaN);\n        return null == t ? r : r.addAll(t);\n      }\n      function a(t, n, e, r, o, i) {\n        (this._x = t),\n          (this._y = n),\n          (this._x0 = e),\n          (this._y0 = r),\n          (this._x1 = o),\n          (this._y1 = i),\n          (this._root = void 0);\n      }\n      function l(t) {\n        for (var n = { data: t.data }, e = n; (t = t.next); )\n          e = e.next = { data: t.data };\n        return n;\n      }\n      var s = (f.prototype = a.prototype);\n      (s.copy = function () {\n        var t,\n          n,\n          e = new a(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n          r = this._root;\n        if (!r) return e;\n        if (!r.length) return (e._root = l(r)), e;\n        for (\n          t = [{ source: r, target: (e._root = new Array(4)) }];\n          (r = t.pop());\n\n        )\n          for (var o = 0; o < 4; ++o)\n            (n = r.source[o]) &&\n              (n.length\n                ? t.push({ source: n, target: (r.target[o] = new Array(4)) })\n                : (r.target[o] = l(n)));\n        return e;\n      }),\n        (s.add = function (t) {\n          var n = +this._x.call(null, t),\n            e = +this._y.call(null, t);\n          return o(this.cover(n, e), n, e, t);\n        }),\n        (s.addAll = function (t) {\n          var n,\n            e,\n            r,\n            i,\n            u = t.length,\n            c = new Array(u),\n            f = new Array(u),\n            a = 1 / 0,\n            l = 1 / 0,\n            s = -1 / 0,\n            h = -1 / 0;\n          for (e = 0; e < u; ++e)\n            isNaN((r = +this._x.call(null, (n = t[e])))) ||\n              isNaN((i = +this._y.call(null, n))) ||\n              ((c[e] = r),\n              (f[e] = i),\n              r < a && (a = r),\n              r > s && (s = r),\n              i < l && (l = i),\n              i > h && (h = i));\n          if (a > s || l > h) return this;\n          for (this.cover(a, l).cover(s, h), e = 0; e < u; ++e)\n            o(this, c[e], f[e], t[e]);\n          return this;\n        }),\n        (s.cover = function (t, n) {\n          if (isNaN((t = +t)) || isNaN((n = +n))) return this;\n          var e = this._x0,\n            r = this._y0,\n            o = this._x1,\n            i = this._y1;\n          if (isNaN(e))\n            (o = (e = Math.floor(t)) + 1), (i = (r = Math.floor(n)) + 1);\n          else {\n            for (\n              var u, c, f = o - e || 1, a = this._root;\n              e > t || t >= o || r > n || n >= i;\n\n            )\n              switch (\n                ((c = ((n < r) << 1) | (t < e)),\n                ((u = new Array(4))[c] = a),\n                (a = u),\n                (f *= 2),\n                c)\n              ) {\n                case 0:\n                  (o = e + f), (i = r + f);\n                  break;\n                case 1:\n                  (e = o - f), (i = r + f);\n                  break;\n                case 2:\n                  (o = e + f), (r = i - f);\n                  break;\n                case 3:\n                  (e = o - f), (r = i - f);\n              }\n            this._root && this._root.length && (this._root = a);\n          }\n          return (\n            (this._x0 = e), (this._y0 = r), (this._x1 = o), (this._y1 = i), this\n          );\n        }),\n        (s.data = function () {\n          var t = [];\n          return (\n            this.visit(function (n) {\n              if (!n.length)\n                do {\n                  t.push(n.data);\n                } while ((n = n.next));\n            }),\n            t\n          );\n        }),\n        (s.extent = function (t) {\n          return arguments.length\n            ? this.cover(+t[0][0], +t[0][1]).cover(+t[1][0], +t[1][1])\n            : isNaN(this._x0)\n            ? void 0\n            : [\n                [this._x0, this._y0],\n                [this._x1, this._y1],\n              ];\n        }),\n        (s.find = function (t, n, e) {\n          var r,\n            o,\n            u,\n            c,\n            f,\n            a,\n            l,\n            s = this._x0,\n            h = this._y0,\n            d = this._x1,\n            y = this._y1,\n            p = [],\n            v = this._root;\n          for (\n            v && p.push(new i(v, s, h, d, y)),\n              null == e\n                ? (e = 1 / 0)\n                : ((s = t - e),\n                  (h = n - e),\n                  (d = t + e),\n                  (y = n + e),\n                  (e *= e));\n            (a = p.pop());\n\n          )\n            if (\n              !(\n                !(v = a.node) ||\n                (o = a.x0) > d ||\n                (u = a.y0) > y ||\n                (c = a.x1) < s ||\n                (f = a.y1) < h\n              )\n            )\n              if (v.length) {\n                var g = (o + c) / 2,\n                  _ = (u + f) / 2;\n                p.push(\n                  new i(v[3], g, _, c, f),\n                  new i(v[2], o, _, g, f),\n                  new i(v[1], g, u, c, _),\n                  new i(v[0], o, u, g, _),\n                ),\n                  (l = ((n >= _) << 1) | (t >= g)) &&\n                    ((a = p[p.length - 1]),\n                    (p[p.length - 1] = p[p.length - 1 - l]),\n                    (p[p.length - 1 - l] = a));\n              } else {\n                var x = t - +this._x.call(null, v.data),\n                  b = n - +this._y.call(null, v.data),\n                  w = x * x + b * b;\n                if (w < e) {\n                  var m = Math.sqrt((e = w));\n                  (s = t - m),\n                    (h = n - m),\n                    (d = t + m),\n                    (y = n + m),\n                    (r = v.data);\n                }\n              }\n          return r;\n        }),\n        (s.remove = function (t) {\n          if (\n            isNaN((i = +this._x.call(null, t))) ||\n            isNaN((u = +this._y.call(null, t)))\n          )\n            return this;\n          var n,\n            e,\n            r,\n            o,\n            i,\n            u,\n            c,\n            f,\n            a,\n            l,\n            s,\n            h,\n            d = this._root,\n            y = this._x0,\n            p = this._y0,\n            v = this._x1,\n            g = this._y1;\n          if (!d) return this;\n          if (d.length)\n            for (;;) {\n              if (\n                ((a = i >= (c = (y + v) / 2)) ? (y = c) : (v = c),\n                (l = u >= (f = (p + g) / 2)) ? (p = f) : (g = f),\n                (n = d),\n                !(d = d[(s = (l << 1) | a)]))\n              )\n                return this;\n              if (!d.length) break;\n              (n[(s + 1) & 3] || n[(s + 2) & 3] || n[(s + 3) & 3]) &&\n                ((e = n), (h = s));\n            }\n          for (; d.data !== t; ) if (((r = d), !(d = d.next))) return this;\n          return (\n            (o = d.next) && delete d.next,\n            r\n              ? (o ? (r.next = o) : delete r.next, this)\n              : n\n              ? (o ? (n[s] = o) : delete n[s],\n                (d = n[0] || n[1] || n[2] || n[3]) &&\n                  d === (n[3] || n[2] || n[1] || n[0]) &&\n                  !d.length &&\n                  (e ? (e[h] = d) : (this._root = d)),\n                this)\n              : ((this._root = o), this)\n          );\n        }),\n        (s.removeAll = function (t) {\n          for (var n = 0, e = t.length; n < e; ++n) this.remove(t[n]);\n          return this;\n        }),\n        (s.root = function () {\n          return this._root;\n        }),\n        (s.size = function () {\n          var t = 0;\n          return (\n            this.visit(function (n) {\n              if (!n.length)\n                do {\n                  ++t;\n                } while ((n = n.next));\n            }),\n            t\n          );\n        }),\n        (s.visit = function (t) {\n          var n,\n            e,\n            r,\n            o,\n            u,\n            c,\n            f = [],\n            a = this._root;\n          for (\n            a && f.push(new i(a, this._x0, this._y0, this._x1, this._y1));\n            (n = f.pop());\n\n          )\n            if (\n              !t(\n                (a = n.node),\n                (r = n.x0),\n                (o = n.y0),\n                (u = n.x1),\n                (c = n.y1),\n              ) &&\n              a.length\n            ) {\n              var l = (r + u) / 2,\n                s = (o + c) / 2;\n              (e = a[3]) && f.push(new i(e, l, s, u, c)),\n                (e = a[2]) && f.push(new i(e, r, s, l, c)),\n                (e = a[1]) && f.push(new i(e, l, o, u, s)),\n                (e = a[0]) && f.push(new i(e, r, o, l, s));\n            }\n          return this;\n        }),\n        (s.visitAfter = function (t) {\n          var n,\n            e = [],\n            r = [];\n          for (\n            this._root &&\n            e.push(new i(this._root, this._x0, this._y0, this._x1, this._y1));\n            (n = e.pop());\n\n          ) {\n            var o = n.node;\n            if (o.length) {\n              var u,\n                c = n.x0,\n                f = n.y0,\n                a = n.x1,\n                l = n.y1,\n                s = (c + a) / 2,\n                h = (f + l) / 2;\n              (u = o[0]) && e.push(new i(u, c, f, s, h)),\n                (u = o[1]) && e.push(new i(u, s, f, a, h)),\n                (u = o[2]) && e.push(new i(u, c, h, s, l)),\n                (u = o[3]) && e.push(new i(u, s, h, a, l));\n            }\n            r.push(n);\n          }\n          for (; (n = r.pop()); ) t(n.node, n.x0, n.y0, n.x1, n.y1);\n          return this;\n        }),\n        (s.x = function (t) {\n          return arguments.length ? ((this._x = t), this) : this._x;\n        }),\n        (s.y = function (t) {\n          return arguments.length ? ((this._y = t), this) : this._y;\n        });\n      var h = function (t) {\n          return function () {\n            return t;\n          };\n        },\n        d = function (t) {\n          return 1e-6 * (t() - 0.5);\n        };\n      function y(t) {\n        return t.x + t.vx;\n      }\n      function p(t) {\n        return t.y + t.vy;\n      }\n      var v = function (t) {\n        var n,\n          e,\n          r,\n          o = 1,\n          i = 1;\n        function u() {\n          for (var t, u, a, l, s, h, v, g = n.length, _ = 0; _ < i; ++_)\n            for (u = f(n, y, p).visitAfter(c), t = 0; t < g; ++t)\n              (a = n[t]),\n                (h = e[a.index]),\n                (v = h * h),\n                (l = a.x + a.vx),\n                (s = a.y + a.vy),\n                u.visit(x);\n          function x(t, n, e, i, u) {\n            var c = t.data,\n              f = t.r,\n              y = h + f;\n            if (!c) return n > l + y || i < l - y || e > s + y || u < s - y;\n            if (c.index > a.index) {\n              var p = l - c.x - c.vx,\n                g = s - c.y - c.vy,\n                _ = p * p + g * g;\n              _ < y * y &&\n                (0 === p && (_ += (p = d(r)) * p),\n                0 === g && (_ += (g = d(r)) * g),\n                (_ = ((y - (_ = Math.sqrt(_))) / _) * o),\n                (a.vx += (p *= _) * (y = (f *= f) / (v + f))),\n                (a.vy += (g *= _) * y),\n                (c.vx -= p * (y = 1 - y)),\n                (c.vy -= g * y));\n            }\n          }\n        }\n        function c(t) {\n          if (t.data) return (t.r = e[t.data.index]);\n          for (var n = (t.r = 0); n < 4; ++n)\n            t[n] && t[n].r > t.r && (t.r = t[n].r);\n        }\n        function a() {\n          if (n) {\n            var r,\n              o,\n              i = n.length;\n            for (e = new Array(i), r = 0; r < i; ++r)\n              (o = n[r]), (e[o.index] = +t(o, r, n));\n          }\n        }\n        return (\n          \"function\" != typeof t && (t = h(null == t ? 1 : +t)),\n          (u.initialize = function (t, e) {\n            (n = t), (r = e), a();\n          }),\n          (u.iterations = function (t) {\n            return arguments.length ? ((i = +t), u) : i;\n          }),\n          (u.strength = function (t) {\n            return arguments.length ? ((o = +t), u) : o;\n          }),\n          (u.radius = function (n) {\n            return arguments.length\n              ? ((t = \"function\" == typeof n ? n : h(+n)), a(), u)\n              : t;\n          }),\n          u\n        );\n      };\n      function g(t) {\n        return (g =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function _(t) {\n        return t.index;\n      }\n      function x(t, n) {\n        var e = t.get(n);\n        if (!e) throw new Error(\"node not found: \" + n);\n        return e;\n      }\n      var b = function (t) {\n          var n,\n            e,\n            r,\n            o,\n            i,\n            u,\n            c = _,\n            f = function (t) {\n              return 1 / Math.min(o[t.source.index], o[t.target.index]);\n            },\n            a = h(30),\n            l = 1;\n          function s(r) {\n            for (var o = 0, c = t.length; o < l; ++o)\n              for (var f, a, s, h, y, p, v, g = 0; g < c; ++g)\n                (a = (f = t[g]).source),\n                  (h = (s = f.target).x + s.vx - a.x - a.vx || d(u)),\n                  (y = s.y + s.vy - a.y - a.vy || d(u)),\n                  (h *= p =\n                    (((p = Math.sqrt(h * h + y * y)) - e[g]) / p) * r * n[g]),\n                  (y *= p),\n                  (s.vx -= h * (v = i[g])),\n                  (s.vy -= y * v),\n                  (a.vx += h * (v = 1 - v)),\n                  (a.vy += y * v);\n          }\n          function y() {\n            if (r) {\n              var u,\n                f,\n                a = r.length,\n                l = t.length,\n                s = new Map(\n                  r.map(function (t, n) {\n                    return [c(t, n, r), t];\n                  }),\n                );\n              for (u = 0, o = new Array(a); u < l; ++u)\n                ((f = t[u]).index = u),\n                  \"object\" !== g(f.source) && (f.source = x(s, f.source)),\n                  \"object\" !== g(f.target) && (f.target = x(s, f.target)),\n                  (o[f.source.index] = (o[f.source.index] || 0) + 1),\n                  (o[f.target.index] = (o[f.target.index] || 0) + 1);\n              for (u = 0, i = new Array(l); u < l; ++u)\n                (f = t[u]),\n                  (i[u] =\n                    o[f.source.index] /\n                    (o[f.source.index] + o[f.target.index]));\n              (n = new Array(l)), p(), (e = new Array(l)), v();\n            }\n          }\n          function p() {\n            if (r)\n              for (var e = 0, o = t.length; e < o; ++e) n[e] = +f(t[e], e, t);\n          }\n          function v() {\n            if (r)\n              for (var n = 0, o = t.length; n < o; ++n) e[n] = +a(t[n], n, t);\n          }\n          return (\n            null == t && (t = []),\n            (s.initialize = function (t, n) {\n              (r = t), (u = n), y();\n            }),\n            (s.links = function (n) {\n              return arguments.length ? ((t = n), y(), s) : t;\n            }),\n            (s.id = function (t) {\n              return arguments.length ? ((c = t), s) : c;\n            }),\n            (s.iterations = function (t) {\n              return arguments.length ? ((l = +t), s) : l;\n            }),\n            (s.strength = function (t) {\n              return arguments.length\n                ? ((f = \"function\" == typeof t ? t : h(+t)), p(), s)\n                : f;\n            }),\n            (s.distance = function (t) {\n              return arguments.length\n                ? ((a = \"function\" == typeof t ? t : h(+t)), v(), s)\n                : a;\n            }),\n            s\n          );\n        },\n        w = { value: function () {} };\n      function m() {\n        for (var t, n = 0, e = arguments.length, r = {}; n < e; ++n) {\n          if (!(t = arguments[n] + \"\") || t in r || /[\\s.]/.test(t))\n            throw new Error(\"illegal type: \" + t);\n          r[t] = [];\n        }\n        return new S(r);\n      }\n      function S(t) {\n        this._ = t;\n      }\n      function N(t, n) {\n        return t\n          .trim()\n          .split(/^|\\s+/)\n          .map(function (t) {\n            var e = \"\",\n              r = t.indexOf(\".\");\n            if (\n              (r >= 0 && ((e = t.slice(r + 1)), (t = t.slice(0, r))),\n              t && !n.hasOwnProperty(t))\n            )\n              throw new Error(\"unknown type: \" + t);\n            return { type: t, name: e };\n          });\n      }\n      function O(t, n) {\n        for (var e, r = 0, o = t.length; r < o; ++r)\n          if ((e = t[r]).name === n) return e.value;\n      }\n      function k(t, n, e) {\n        for (var r = 0, o = t.length; r < o; ++r)\n          if (t[r].name === n) {\n            (t[r] = w), (t = t.slice(0, r).concat(t.slice(r + 1)));\n            break;\n          }\n        return null != e && t.push({ name: n, value: e }), t;\n      }\n      S.prototype = m.prototype = {\n        constructor: S,\n        on: function (t, n) {\n          var e,\n            r = this._,\n            o = N(t + \"\", r),\n            i = -1,\n            u = o.length;\n          if (!(arguments.length < 2)) {\n            if (null != n && \"function\" != typeof n)\n              throw new Error(\"invalid callback: \" + n);\n            for (; ++i < u; )\n              if ((e = (t = o[i]).type)) r[e] = k(r[e], t.name, n);\n              else if (null == n) for (e in r) r[e] = k(r[e], t.name, null);\n            return this;\n          }\n          for (; ++i < u; )\n            if ((e = (t = o[i]).type) && (e = O(r[e], t.name))) return e;\n        },\n        copy: function () {\n          var t = {},\n            n = this._;\n          for (var e in n) t[e] = n[e].slice();\n          return new S(t);\n        },\n        call: function (t, n) {\n          if ((e = arguments.length - 2) > 0)\n            for (var e, r, o = new Array(e), i = 0; i < e; ++i)\n              o[i] = arguments[i + 2];\n          if (!this._.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n          for (i = 0, e = (r = this._[t]).length; i < e; ++i)\n            r[i].value.apply(n, o);\n        },\n        apply: function (t, n, e) {\n          if (!this._.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n          for (var r = this._[t], o = 0, i = r.length; o < i; ++o)\n            r[o].value.apply(n, e);\n        },\n      };\n      var M = m;\n      function j(t) {\n        return (j =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var E,\n        A,\n        P = 0,\n        z = 0,\n        D = 0,\n        L = 0,\n        T = 0,\n        F = 0,\n        U =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : j(performance)) && performance.now\n            ? performance\n            : Date,\n        C =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : j(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function q() {\n        return T || (C(B), (T = U.now() + F));\n      }\n      function B() {\n        T = 0;\n      }\n      function Y() {\n        this._call = this._time = this._next = null;\n      }\n      function R(t, n, e) {\n        var r = new Y();\n        return r.restart(t, n, e), r;\n      }\n      function G() {\n        (T = (L = U.now()) + F), (P = z = 0);\n        try {\n          !(function () {\n            q(), ++P;\n            for (var t, n = E; n; )\n              (t = T - n._time) >= 0 && n._call.call(null, t), (n = n._next);\n            --P;\n          })();\n        } finally {\n          (P = 0),\n            (function () {\n              var t,\n                n,\n                e = E,\n                r = 1 / 0;\n              for (; e; )\n                e._call\n                  ? (r > e._time && (r = e._time), (t = e), (e = e._next))\n                  : ((n = e._next),\n                    (e._next = null),\n                    (e = t ? (t._next = n) : (E = n)));\n              (A = t), W(r);\n            })(),\n            (T = 0);\n        }\n      }\n      function I() {\n        var t = U.now(),\n          n = t - L;\n        n > 1e3 && ((F -= n), (L = t));\n      }\n      function W(t) {\n        P ||\n          (z && (z = clearTimeout(z)),\n          t - T > 24\n            ? (t < 1 / 0 && (z = setTimeout(G, t - U.now() - F)),\n              D && (D = clearInterval(D)))\n            : (D || ((L = U.now()), (D = setInterval(I, 1e3))), (P = 1), C(G)));\n      }\n      Y.prototype = R.prototype = {\n        constructor: Y,\n        restart: function (t, n, e) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (e = (null == e ? q() : +e) + (null == n ? 0 : +n)),\n            this._next ||\n              A === this ||\n              (A ? (A._next = this) : (E = this), (A = this)),\n            (this._call = t),\n            (this._time = e),\n            W();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), W());\n        },\n      };\n      var X = 4294967296;\n      function K(t) {\n        return t.x;\n      }\n      function H(t) {\n        return t.y;\n      }\n      var J = Math.PI * (3 - Math.sqrt(5)),\n        Q = function (t) {\n          var n,\n            e,\n            r = 1,\n            o = 0.001,\n            i = 1 - Math.pow(o, 1 / 300),\n            u = 0,\n            c = 0.6,\n            f = new Map(),\n            a = R(h),\n            l = M(\"tick\", \"end\"),\n            s =\n              ((e = 1),\n              function () {\n                return (e = (1664525 * e + 1013904223) % X) / X;\n              });\n          function h() {\n            d(), l.call(\"tick\", n), r < o && (a.stop(), l.call(\"end\", n));\n          }\n          function d(e) {\n            var o,\n              a,\n              l = t.length;\n            void 0 === e && (e = 1);\n            for (var s = 0; s < e; ++s)\n              for (\n                r += (u - r) * i,\n                  f.forEach(function (t) {\n                    t(r);\n                  }),\n                  o = 0;\n                o < l;\n                ++o\n              )\n                null == (a = t[o]).fx\n                  ? (a.x += a.vx *= c)\n                  : ((a.x = a.fx), (a.vx = 0)),\n                  null == a.fy\n                    ? (a.y += a.vy *= c)\n                    : ((a.y = a.fy), (a.vy = 0));\n            return n;\n          }\n          function y() {\n            for (var n, e = 0, r = t.length; e < r; ++e) {\n              if (\n                (((n = t[e]).index = e),\n                null != n.fx && (n.x = n.fx),\n                null != n.fy && (n.y = n.fy),\n                isNaN(n.x) || isNaN(n.y))\n              ) {\n                var o = 10 * Math.sqrt(0.5 + e),\n                  i = e * J;\n                (n.x = o * Math.cos(i)), (n.y = o * Math.sin(i));\n              }\n              (isNaN(n.vx) || isNaN(n.vy)) && (n.vx = n.vy = 0);\n            }\n          }\n          function p(n) {\n            return n.initialize && n.initialize(t, s), n;\n          }\n          return (\n            null == t && (t = []),\n            y(),\n            (n = {\n              tick: d,\n              restart: function () {\n                return a.restart(h), n;\n              },\n              stop: function () {\n                return a.stop(), n;\n              },\n              nodes: function (e) {\n                return arguments.length ? ((t = e), y(), f.forEach(p), n) : t;\n              },\n              alpha: function (t) {\n                return arguments.length ? ((r = +t), n) : r;\n              },\n              alphaMin: function (t) {\n                return arguments.length ? ((o = +t), n) : o;\n              },\n              alphaDecay: function (t) {\n                return arguments.length ? ((i = +t), n) : +i;\n              },\n              alphaTarget: function (t) {\n                return arguments.length ? ((u = +t), n) : u;\n              },\n              velocityDecay: function (t) {\n                return arguments.length ? ((c = 1 - t), n) : 1 - c;\n              },\n              randomSource: function (t) {\n                return arguments.length ? ((s = t), f.forEach(p), n) : s;\n              },\n              force: function (t, e) {\n                return arguments.length > 1\n                  ? (null == e ? f.delete(t) : f.set(t, p(e)), n)\n                  : f.get(t);\n              },\n              find: function (n, e, r) {\n                var o,\n                  i,\n                  u,\n                  c,\n                  f,\n                  a = 0,\n                  l = t.length;\n                for (null == r ? (r = 1 / 0) : (r *= r), a = 0; a < l; ++a)\n                  (u = (o = n - (c = t[a]).x) * o + (i = e - c.y) * i) < r &&\n                    ((f = c), (r = u));\n                return f;\n              },\n              on: function (t, e) {\n                return arguments.length > 1 ? (l.on(t, e), n) : l.on(t);\n              },\n            })\n          );\n        },\n        V = function () {\n          var t,\n            n,\n            e,\n            r,\n            o,\n            i = h(-30),\n            u = 1,\n            c = 1 / 0,\n            a = 0.81;\n          function l(e) {\n            var o,\n              i = t.length,\n              u = f(t, K, H).visitAfter(y);\n            for (r = e, o = 0; o < i; ++o) (n = t[o]), u.visit(p);\n          }\n          function s() {\n            if (t) {\n              var n,\n                e,\n                r = t.length;\n              for (o = new Array(r), n = 0; n < r; ++n)\n                (e = t[n]), (o[e.index] = +i(e, n, t));\n            }\n          }\n          function y(t) {\n            var n,\n              e,\n              r,\n              i,\n              u,\n              c = 0,\n              f = 0;\n            if (t.length) {\n              for (r = i = u = 0; u < 4; ++u)\n                (n = t[u]) &&\n                  (e = Math.abs(n.value)) &&\n                  ((c += n.value), (f += e), (r += e * n.x), (i += e * n.y));\n              (t.x = r / f), (t.y = i / f);\n            } else {\n              ((n = t).x = n.data.x), (n.y = n.data.y);\n              do {\n                c += o[n.data.index];\n              } while ((n = n.next));\n            }\n            t.value = c;\n          }\n          function p(t, i, f, l) {\n            if (!t.value) return !0;\n            var s = t.x - n.x,\n              h = t.y - n.y,\n              y = l - i,\n              p = s * s + h * h;\n            if ((y * y) / a < p)\n              return (\n                p < c &&\n                  (0 === s && (p += (s = d(e)) * s),\n                  0 === h && (p += (h = d(e)) * h),\n                  p < u && (p = Math.sqrt(u * p)),\n                  (n.vx += (s * t.value * r) / p),\n                  (n.vy += (h * t.value * r) / p)),\n                !0\n              );\n            if (!(t.length || p >= c)) {\n              (t.data !== n || t.next) &&\n                (0 === s && (p += (s = d(e)) * s),\n                0 === h && (p += (h = d(e)) * h),\n                p < u && (p = Math.sqrt(u * p)));\n              do {\n                t.data !== n &&\n                  ((y = (o[t.data.index] * r) / p),\n                  (n.vx += s * y),\n                  (n.vy += h * y));\n              } while ((t = t.next));\n            }\n          }\n          return (\n            (l.initialize = function (n, r) {\n              (t = n), (e = r), s();\n            }),\n            (l.strength = function (t) {\n              return arguments.length\n                ? ((i = \"function\" == typeof t ? t : h(+t)), s(), l)\n                : i;\n            }),\n            (l.distanceMin = function (t) {\n              return arguments.length ? ((u = t * t), l) : Math.sqrt(u);\n            }),\n            (l.distanceMax = function (t) {\n              return arguments.length ? ((c = t * t), l) : Math.sqrt(c);\n            }),\n            (l.theta = function (t) {\n              return arguments.length ? ((a = t * t), l) : Math.sqrt(a);\n            }),\n            l\n          );\n        },\n        Z = function (t, n, e) {\n          var r,\n            o,\n            i,\n            u = h(0.1);\n          function c(t) {\n            for (var u = 0, c = r.length; u < c; ++u) {\n              var f = r[u],\n                a = f.x - n || 1e-6,\n                l = f.y - e || 1e-6,\n                s = Math.sqrt(a * a + l * l),\n                h = ((i[u] - s) * o[u] * t) / s;\n              (f.vx += a * h), (f.vy += l * h);\n            }\n          }\n          function f() {\n            if (r) {\n              var n,\n                e = r.length;\n              for (o = new Array(e), i = new Array(e), n = 0; n < e; ++n)\n                (i[n] = +t(r[n], n, r)),\n                  (o[n] = isNaN(i[n]) ? 0 : +u(r[n], n, r));\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(+t)),\n            null == n && (n = 0),\n            null == e && (e = 0),\n            (c.initialize = function (t) {\n              (r = t), f();\n            }),\n            (c.strength = function (t) {\n              return arguments.length\n                ? ((u = \"function\" == typeof t ? t : h(+t)), f(), c)\n                : u;\n            }),\n            (c.radius = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), f(), c)\n                : t;\n            }),\n            (c.x = function (t) {\n              return arguments.length ? ((n = +t), c) : n;\n            }),\n            (c.y = function (t) {\n              return arguments.length ? ((e = +t), c) : e;\n            }),\n            c\n          );\n        },\n        $ = function (t) {\n          var n,\n            e,\n            r,\n            o = h(0.1);\n          function i(t) {\n            for (var o, i = 0, u = n.length; i < u; ++i)\n              (o = n[i]).vx += (r[i] - o.x) * e[i] * t;\n          }\n          function u() {\n            if (n) {\n              var i,\n                u = n.length;\n              for (e = new Array(u), r = new Array(u), i = 0; i < u; ++i)\n                e[i] = isNaN((r[i] = +t(n[i], i, n))) ? 0 : +o(n[i], i, n);\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(null == t ? 0 : +t)),\n            (i.initialize = function (t) {\n              (n = t), u();\n            }),\n            (i.strength = function (t) {\n              return arguments.length\n                ? ((o = \"function\" == typeof t ? t : h(+t)), u(), i)\n                : o;\n            }),\n            (i.x = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), u(), i)\n                : t;\n            }),\n            i\n          );\n        },\n        tt = function (t) {\n          var n,\n            e,\n            r,\n            o = h(0.1);\n          function i(t) {\n            for (var o, i = 0, u = n.length; i < u; ++i)\n              (o = n[i]).vy += (r[i] - o.y) * e[i] * t;\n          }\n          function u() {\n            if (n) {\n              var i,\n                u = n.length;\n              for (e = new Array(u), r = new Array(u), i = 0; i < u; ++i)\n                e[i] = isNaN((r[i] = +t(n[i], i, n))) ? 0 : +o(n[i], i, n);\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(null == t ? 0 : +t)),\n            (i.initialize = function (t) {\n              (n = t), u();\n            }),\n            (i.strength = function (t) {\n              return arguments.length\n                ? ((o = \"function\" == typeof t ? t : h(+t)), u(), i)\n                : o;\n            }),\n            (i.y = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), u(), i)\n                : t;\n            }),\n            i\n          );\n        };\n    },\n    16: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isFunction = void 0);\n      n.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    163: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), o(e(383), n);\n    },\n    382: function (t, n, e) {\n      \"use strict\";\n      e.r(n);\n      var r = e(163);\n      n.default = r.ForceLayout;\n    },\n    383: function (t, n, e) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, n) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, n) {\n                  t.__proto__ = n;\n                }) ||\n              function (t, n) {\n                for (var e in n)\n                  Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);\n              })(t, n);\n          }),\n          function (t, n) {\n            if (\"function\" != typeof n && null !== n)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(n) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            r(t, n),\n              (t.prototype =\n                null === n\n                  ? Object.create(n)\n                  : ((e.prototype = n.prototype), new e()));\n          }),\n        i =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        u =\n          (this && this.__setModuleDefault) ||\n          (Object.create\n            ? function (t, n) {\n                Object.defineProperty(t, \"default\", {\n                  enumerable: !0,\n                  value: n,\n                });\n              }\n            : function (t, n) {\n                t.default = n;\n              }),\n        c =\n          (this && this.__importStar) ||\n          function (t) {\n            if (t && t.__esModule) return t;\n            var n = {};\n            if (null != t)\n              for (var e in t)\n                \"default\" !== e &&\n                  Object.prototype.hasOwnProperty.call(t, e) &&\n                  i(n, t, e);\n            return u(n, t), n;\n          },\n        f =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.ForceLayout = void 0);\n      var a = c(e(156)),\n        l = f(e(384)),\n        s = e(10),\n        h = e(9),\n        d = e(385),\n        y = (function (t) {\n          function n(n) {\n            var e = t.call(this) || this;\n            return (\n              (e.center = [0, 0]),\n              (e.nodeStrength = null),\n              (e.edgeStrength = null),\n              (e.preventOverlap = !1),\n              (e.clusterNodeStrength = null),\n              (e.clusterEdgeStrength = null),\n              (e.clusterEdgeDistance = null),\n              (e.clusterNodeSize = null),\n              (e.clusterFociStrength = null),\n              (e.linkDistance = 50),\n              (e.alphaDecay = 0.028),\n              (e.alphaMin = 0.001),\n              (e.alpha = 0.3),\n              (e.collideStrength = 1),\n              (e.workerEnabled = !1),\n              (e.tick = function () {}),\n              (e.onLayoutEnd = function () {}),\n              (e.ticking = void 0),\n              n && e.updateCfg(n),\n              e\n            );\n          }\n          return (\n            o(n, t),\n            (n.prototype.getDefaultCfg = function () {\n              return {\n                center: [0, 0],\n                nodeStrength: null,\n                edgeStrength: null,\n                preventOverlap: !1,\n                nodeSize: void 0,\n                nodeSpacing: void 0,\n                linkDistance: 50,\n                forceSimulation: null,\n                alphaDecay: 0.028,\n                alphaMin: 0.001,\n                alpha: 0.3,\n                collideStrength: 1,\n                clustering: !1,\n                clusterNodeStrength: -1,\n                clusterEdgeStrength: 0.1,\n                clusterEdgeDistance: 100,\n                clusterFociStrength: 0.8,\n                clusterNodeSize: 10,\n                tick: function () {},\n                onLayoutEnd: function () {},\n                workerEnabled: !1,\n              };\n            }),\n            (n.prototype.init = function (t) {\n              this.nodes = t.nodes || [];\n              var n = t.edges || [];\n              (this.edges = n.map(function (t) {\n                var n = {},\n                  e = [\"targetNode\", \"sourceNode\", \"startPoint\", \"endPoint\"];\n                return (\n                  Object.keys(t).forEach(function (r) {\n                    e.indexOf(r) > -1 || (n[r] = t[r]);\n                  }),\n                  n\n                );\n              })),\n                (this.ticking = !1);\n            }),\n            (n.prototype.execute = function (t) {\n              var n = this,\n                e = n.nodes,\n                r = n.edges;\n              if (!n.ticking) {\n                var o = n.forceSimulation,\n                  i = n.alphaMin,\n                  u = n.alphaDecay,\n                  c = n.alpha;\n                if (o) {\n                  if (t)\n                    if (\n                      (n.clustering &&\n                        n.clusterForce &&\n                        (n.clusterForce.nodes(e), n.clusterForce.links(r)),\n                      o.nodes(e),\n                      r && n.edgeForce)\n                    )\n                      n.edgeForce.links(r);\n                    else if (r && !n.edgeForce) {\n                      h = a\n                        .forceLink()\n                        .id(function (t) {\n                          return t.id;\n                        })\n                        .links(r);\n                      n.edgeStrength && h.strength(n.edgeStrength),\n                        n.linkDistance && h.distance(n.linkDistance),\n                        (n.edgeForce = h),\n                        o.force(\"link\", h);\n                    }\n                  n.preventOverlap && n.overlapProcess(o),\n                    o.alpha(c).restart(),\n                    (this.ticking = !0);\n                } else\n                  try {\n                    var f = a.forceManyBody();\n                    if (\n                      (n.nodeStrength && f.strength(n.nodeStrength),\n                      (o = a.forceSimulation().nodes(e)),\n                      n.clustering)\n                    ) {\n                      var s = l.default();\n                      s\n                        .centerX(n.center[0])\n                        .centerY(n.center[1])\n                        .template(\"force\")\n                        .strength(n.clusterFociStrength),\n                        r && s.links(r),\n                        e && s.nodes(e),\n                        s\n                          .forceLinkDistance(n.clusterEdgeDistance)\n                          .forceLinkStrength(n.clusterEdgeStrength)\n                          .forceCharge(n.clusterNodeStrength)\n                          .forceNodeSize(n.clusterNodeSize),\n                        (n.clusterForce = s),\n                        o.force(\"group\", s);\n                    }\n                    if (\n                      (o\n                        .force(\n                          \"center\",\n                          a.forceCenter(n.center[0], n.center[1]),\n                        )\n                        .force(\"charge\", f)\n                        .alpha(c)\n                        .alphaDecay(u)\n                        .alphaMin(i),\n                      n.preventOverlap && n.overlapProcess(o),\n                      r)\n                    ) {\n                      var h = a\n                        .forceLink()\n                        .id(function (t) {\n                          return t.id;\n                        })\n                        .links(r);\n                      n.edgeStrength && h.strength(n.edgeStrength),\n                        n.linkDistance && h.distance(n.linkDistance),\n                        (n.edgeForce = h),\n                        o.force(\"link\", h);\n                    }\n                    if (\n                      (n.workerEnabled &&\n                        !p() &&\n                        ((n.workerEnabled = !1),\n                        console.warn(\n                          \"workerEnabled option is only supported when running in web worker.\",\n                        )),\n                      n.workerEnabled)\n                    ) {\n                      o.stop();\n                      for (\n                        var y = (function (t) {\n                            var n = t.alphaMin(),\n                              e = t.alphaTarget(),\n                              r = t.alpha(),\n                              o =\n                                Math.log((n - e) / (r - e)) /\n                                Math.log(1 - t.alphaDecay());\n                            return Math.ceil(o);\n                          })(o),\n                          v = 1;\n                        v <= y;\n                        v++\n                      )\n                        o.tick(),\n                          postMessage(\n                            {\n                              nodes: e,\n                              currentTick: v,\n                              totalTicks: y,\n                              type: d.LAYOUT_MESSAGE.TICK,\n                            },\n                            void 0,\n                          );\n                      n.ticking = !1;\n                    } else\n                      o\n                        .on(\"tick\", function () {\n                          n.tick();\n                        })\n                        .on(\"end\", function () {\n                          (n.ticking = !1), n.onLayoutEnd && n.onLayoutEnd();\n                        }),\n                        (n.ticking = !0);\n                    (n.forceSimulation = o), (n.ticking = !0);\n                  } catch (t) {\n                    (n.ticking = !1), console.warn(t);\n                  }\n              }\n            }),\n            (n.prototype.overlapProcess = function (t) {\n              var n,\n                e,\n                r = this.nodeSize,\n                o = this.nodeSpacing,\n                i = this.collideStrength;\n              if (\n                ((e = s.isNumber(o)\n                  ? function () {\n                      return o;\n                    }\n                  : s.isFunction(o)\n                  ? o\n                  : function () {\n                      return 0;\n                    }),\n                r)\n              )\n                if (s.isFunction(r))\n                  n = function (t) {\n                    return r(t) + e(t);\n                  };\n                else if (s.isArray(r)) {\n                  var u = (r[0] > r[1] ? r[0] : r[1]) / 2;\n                  n = function (t) {\n                    return u + e(t);\n                  };\n                } else if (s.isNumber(r)) {\n                  var c = r / 2;\n                  n = function (t) {\n                    return c + e(t);\n                  };\n                } else\n                  n = function () {\n                    return 10;\n                  };\n              else\n                n = function (t) {\n                  return t.size\n                    ? s.isArray(t.size)\n                      ? (t.size[0] > t.size[1] ? t.size[0] : t.size[1]) / 2 +\n                        e(t)\n                      : t.size / 2 + e(t)\n                    : 10 + e(t);\n                };\n              t.force(\"collisionForce\", a.forceCollide(n).strength(i));\n            }),\n            (n.prototype.updateCfg = function (t) {\n              this.ticking &&\n                (this.forceSimulation.stop(), (this.ticking = !1)),\n                (this.forceSimulation = null),\n                Object.assign(this, t);\n            }),\n            (n.prototype.destroy = function () {\n              this.ticking &&\n                (this.forceSimulation.stop(), (this.ticking = !1)),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            n\n          );\n        })(h.Base);\n      function p() {\n        return (\n          \"undefined\" != typeof WorkerGlobalScope &&\n          self instanceof WorkerGlobalScope\n        );\n      }\n      n.ForceLayout = y;\n    },\n    384: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__setModuleDefault) ||\n          (Object.create\n            ? function (t, n) {\n                Object.defineProperty(t, \"default\", {\n                  enumerable: !0,\n                  value: n,\n                });\n              }\n            : function (t, n) {\n                t.default = n;\n              }),\n        i =\n          (this && this.__importStar) ||\n          function (t) {\n            if (t && t.__esModule) return t;\n            var n = {};\n            if (null != t)\n              for (var e in t)\n                \"default\" !== e &&\n                  Object.prototype.hasOwnProperty.call(t, e) &&\n                  r(n, t, e);\n            return o(n, t), n;\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 });\n      var u = i(e(156));\n      n.default = function () {\n        function t(t) {\n          return function () {\n            return t;\n          };\n        }\n        var n,\n          e = function (t) {\n            return t.cluster;\n          },\n          r = t(1),\n          o = t(-1),\n          i = t(100),\n          c = t(0.1),\n          f = [0, 0],\n          a = [],\n          l = {},\n          s = [],\n          h = 100,\n          d = 100,\n          y = { none: { x: 0, y: 0 } },\n          p = [],\n          v = \"force\",\n          g = !0,\n          _ = 0.1;\n        function x(t) {\n          if (!g) return x;\n          n.tick(), w();\n          for (var r = 0, o = a.length, i = void 0, u = t * _; r < o; ++r)\n            ((i = a[r]).vx += (y[e(i)].x - i.x) * u),\n              (i.vy += (y[e(i)].y - i.y) * u);\n        }\n        function b() {\n          a &&\n            (function () {\n              if (!a || !a.length) return;\n              if (void 0 === e(a[0]))\n                throw Error(\n                  \"Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInABox.groupBy('clusterAttr') before calling .links()\",\n                );\n              var t =\n                ((y = []),\n                (v = []),\n                (g = {}),\n                (_ = []),\n                (f = (function (t) {\n                  var n = {};\n                  return (\n                    t.forEach(function (t) {\n                      var r = e(t);\n                      n[r] || (n[r] = { count: 0, sumforceNodeSize: 0 });\n                    }),\n                    t.forEach(function (t) {\n                      var o = e(t),\n                        i = r(t),\n                        u = n[o];\n                      (u.count = u.count + 1),\n                        (u.sumforceNodeSize =\n                          u.sumforceNodeSize + Math.PI * (i * i) * 1.3),\n                        (n[o] = u);\n                    }),\n                    n\n                  );\n                })(a)),\n                (_ = (function (t) {\n                  var n = {},\n                    r = [];\n                  return (\n                    t.forEach(function (t) {\n                      var r = (function (t) {\n                          var n = e(l[t.source]),\n                            r = e(l[t.target]);\n                          return n <= r ? n + \"~\" + r : r + \"~\" + n;\n                        })(t),\n                        o = 0;\n                      void 0 !== n[r] && (o = n[r]), (o += 1), (n[r] = o);\n                    }),\n                    Object.entries(n).forEach(function (t) {\n                      var n = t[0],\n                        e = t[1],\n                        o = n.split(\"~\")[0],\n                        i = n.split(\"~\")[1];\n                      void 0 !== o &&\n                        void 0 !== i &&\n                        r.push({ source: o, target: i, count: e });\n                    }),\n                    r\n                  );\n                })(s)),\n                Object.keys(f).forEach(function (t, n) {\n                  var e = f[t];\n                  y.push({\n                    id: t,\n                    size: e.count,\n                    r: Math.sqrt(e.sumforceNodeSize / Math.PI),\n                  }),\n                    (g[t] = n);\n                }),\n                _.forEach(function (t) {\n                  var n = g[t.source],\n                    e = g[t.target];\n                  void 0 !== n &&\n                    void 0 !== e &&\n                    v.push({ source: n, target: e, count: t.count });\n                }),\n                { nodes: y, links: v });\n              var f, y, v, g, _;\n              (n = u\n                .forceSimulation(t.nodes)\n                .force(\"x\", u.forceX(h).strength(0.1))\n                .force(\"y\", u.forceY(d).strength(0.1))\n                .force(\n                  \"collide\",\n                  u\n                    .forceCollide(function (t) {\n                      return t.r;\n                    })\n                    .iterations(4),\n                )\n                .force(\"charge\", u.forceManyBody().strength(o))\n                .force(\n                  \"links\",\n                  u\n                    .forceLink(t.nodes.length ? t.links : [])\n                    .distance(i)\n                    .strength(c),\n                )),\n                (p = n.nodes()),\n                w();\n            })();\n        }\n        function w() {\n          return (\n            (y = { none: { x: 0, y: 0 } }),\n            p.forEach(function (t) {\n              y[t.id] = { x: t.x - f[0], y: t.y - f[1] };\n            }),\n            y\n          );\n        }\n        function m(t) {\n          (l = {}),\n            t.forEach(function (t) {\n              l[t.id] = t;\n            });\n        }\n        return (\n          (x.initialize = function (t) {\n            (a = t), b();\n          }),\n          (x.template = function (t) {\n            return arguments.length ? ((v = t), b(), x) : v;\n          }),\n          (x.groupBy = function (t) {\n            return arguments.length\n              ? \"string\" == typeof t\n                ? ((e = function (n) {\n                    return n[t];\n                  }),\n                  x)\n                : ((e = t), x)\n              : e;\n          }),\n          (x.enableGrouping = function (t) {\n            return arguments.length ? ((g = t), x) : g;\n          }),\n          (x.strength = function (t) {\n            return arguments.length ? ((_ = t), x) : _;\n          }),\n          (x.centerX = function (t) {\n            return arguments.length ? ((h = t), x) : h;\n          }),\n          (x.centerY = function (t) {\n            return arguments.length ? ((d = t), x) : d;\n          }),\n          (x.nodes = function (t) {\n            return arguments.length ? (m(t || []), (a = t || []), x) : a;\n          }),\n          (x.links = function (t) {\n            return arguments.length ? ((s = t || []), b(), x) : s;\n          }),\n          (x.forceNodeSize = function (n) {\n            return arguments.length\n              ? ((r = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : r;\n          }),\n          (x.nodeSize = x.forceNodeSize),\n          (x.forceCharge = function (n) {\n            return arguments.length\n              ? ((o = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : o;\n          }),\n          (x.forceLinkDistance = function (n) {\n            return arguments.length\n              ? ((i = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : i;\n          }),\n          (x.forceLinkStrength = function (n) {\n            return arguments.length\n              ? ((c = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : c;\n          }),\n          (x.offset = function (t) {\n            return arguments.length ? ((f = t), x) : f;\n          }),\n          (x.getFocis = w),\n          x\n        );\n      };\n    },\n    385: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.LAYOUT_MESSAGE = void 0),\n        (n.LAYOUT_MESSAGE = {\n          RUN: \"LAYOUT_RUN\",\n          END: \"LAYOUT_END\",\n          ERROR: \"LAYOUT_ERROR\",\n          TICK: \"LAYOUT_TICK\",\n          GPURUN: \"GPU_LAYOUT_RUN\",\n          GPUEND: \"GPU_LAYOUT_END\",\n        });\n    },\n    9: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), (n.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      n.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=forceLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/fruchtermanLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.FruchtermanLayout = e())\n    : (t.FruchtermanLayout = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var o = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            n.d(\n              r,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 386))\n    );\n  })({\n    10: function (t, e, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[n];\n                    },\n                  });\n              }\n            : function (t, e, n, r) {\n                void 0 === r && (r = n), (t[r] = e[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var n in t)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(e, n) ||\n                r(e, t, n);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(n(11), e),\n        o(n(12), e),\n        o(n(13), e),\n        o(n(14), e),\n        o(n(15), e),\n        o(n(16), e);\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    14: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n          e[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (e[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (e[r][o] = t[r][o])\n              : (e[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              e[r][o] > e[r][i] + e[i][o] && (e[r][o] = e[r][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                u = i[n],\n                c = i[r];\n              (o[u][c] = 1), e || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (e = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    164: function (t, e, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.FruchtermanLayout = void 0);\n      var i = n(9),\n        u = n(10),\n        c = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.maxIteration = 1e3),\n              (n.gravity = 10),\n              (n.speed = 5),\n              (n.clustering = !1),\n              (n.clusterGravity = 10),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.nodeMap = {}),\n              (n.nodeIdxMap = {}),\n              (n.onLayoutEnd = function () {}),\n              (n.tick = function () {}),\n              n.updateCfg(e),\n              n\n            );\n          }\n          return (\n            o(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                maxIteration: 1e3,\n                gravity: 10,\n                speed: 1,\n                clustering: !1,\n                clusterGravity: 10,\n              };\n            }),\n            (e.prototype.execute = function () {\n              var t = this,\n                e = this.nodes;\n              if (\n                (void 0 !== this.timeInterval &&\n                  \"undefined\" != typeof window &&\n                  window.clearInterval(this.timeInterval),\n                e && 0 !== e.length)\n              ) {\n                this.width ||\n                  \"undefined\" == typeof window ||\n                  (this.width = window.innerWidth),\n                  this.height ||\n                    \"undefined\" == typeof window ||\n                    (this.height = window.innerHeight),\n                  this.center ||\n                    (this.center = [this.width / 2, this.height / 2]);\n                var n = this.center;\n                if (1 === e.length)\n                  return (\n                    (e[0].x = n[0]),\n                    (e[0].y = n[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                var r = {},\n                  o = {};\n                return (\n                  e.forEach(function (e, n) {\n                    u.isNumber(e.x) || (e.x = Math.random() * t.width),\n                      u.isNumber(e.y) || (e.y = Math.random() * t.height),\n                      (r[e.id] = e),\n                      (o[e.id] = n);\n                  }),\n                  (this.nodeMap = r),\n                  (this.nodeIdxMap = o),\n                  this.run()\n                );\n              }\n              this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (e.prototype.run = function () {\n              var t = this,\n                e = t.nodes;\n              if (e) {\n                var n = t.edges,\n                  r = t.maxIteration,\n                  o = t.center,\n                  i = t.height * t.width,\n                  c = Math.sqrt(i) / 10,\n                  s = i / (e.length + 1),\n                  a = Math.sqrt(s),\n                  f = t.gravity,\n                  y = t.speed,\n                  l = t.clustering,\n                  d = {};\n                if (l)\n                  for (var p in (e.forEach(function (t) {\n                    if (void 0 === d[t.cluster]) {\n                      var e = { name: t.cluster, cx: 0, cy: 0, count: 0 };\n                      d[t.cluster] = e;\n                    }\n                    var n = d[t.cluster];\n                    u.isNumber(t.x) && (n.cx += t.x),\n                      u.isNumber(t.y) && (n.cy += t.y),\n                      n.count++;\n                  }),\n                  d))\n                    (d[p].cx /= d[p].count), (d[p].cy /= d[p].count);\n                if (\"undefined\" != typeof window) {\n                  var h = 0;\n                  return (\n                    (this.timeInterval = window.setInterval(function () {\n                      if (e) {\n                        var i = [];\n                        if (\n                          (e.forEach(function (t, e) {\n                            i[e] = { x: 0, y: 0 };\n                          }),\n                          t.applyCalculate(e, n, i, a, s),\n                          l)\n                        ) {\n                          var p = t.clusterGravity || f;\n                          for (var v in (e.forEach(function (t, e) {\n                            if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                              var n = d[t.cluster],\n                                r = Math.sqrt(\n                                  (t.x - n.cx) * (t.x - n.cx) +\n                                    (t.y - n.cy) * (t.y - n.cy),\n                                ),\n                                o = a * p;\n                              (i[e].x -= (o * (t.x - n.cx)) / r),\n                                (i[e].y -= (o * (t.y - n.cy)) / r);\n                            }\n                          }),\n                          d))\n                            (d[v].cx = 0), (d[v].cy = 0), (d[v].count = 0);\n                          for (var v in (e.forEach(function (t) {\n                            var e = d[t.cluster];\n                            u.isNumber(t.x) && (e.cx += t.x),\n                              u.isNumber(t.y) && (e.cy += t.y),\n                              e.count++;\n                          }),\n                          d))\n                            (d[v].cx /= d[v].count), (d[v].cy /= d[v].count);\n                        }\n                        e.forEach(function (t, e) {\n                          if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                            var n = 0.01 * a * f;\n                            (i[e].x -= n * (t.x - o[0])),\n                              (i[e].y -= n * (t.y - o[1]));\n                          }\n                        }),\n                          e.forEach(function (t, e) {\n                            if (u.isNumber(t.fx) && u.isNumber(t.fy))\n                              return (t.x = t.fx), void (t.y = t.fy);\n                            if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                              var n = Math.sqrt(\n                                i[e].x * i[e].x + i[e].y * i[e].y,\n                              );\n                              if (n > 0) {\n                                var r = Math.min(c * (y / 800), n);\n                                (t.x += (i[e].x / n) * r),\n                                  (t.y += (i[e].y / n) * r);\n                              }\n                            }\n                          }),\n                          t.tick && t.tick(),\n                          ++h >= r &&\n                            (t.onLayoutEnd && t.onLayoutEnd(),\n                            window.clearInterval(t.timeInterval));\n                      }\n                    }, 0)),\n                    { nodes: e, edges: n }\n                  );\n                }\n              }\n            }),\n            (e.prototype.applyCalculate = function (t, e, n, r, o) {\n              this.calRepulsive(t, n, o), e && this.calAttractive(e, n, r);\n            }),\n            (e.prototype.calRepulsive = function (t, e, n) {\n              t.forEach(function (r, o) {\n                (e[o] = { x: 0, y: 0 }),\n                  t.forEach(function (t, i) {\n                    if (\n                      o !== i &&\n                      u.isNumber(r.x) &&\n                      u.isNumber(t.x) &&\n                      u.isNumber(r.y) &&\n                      u.isNumber(t.y)\n                    ) {\n                      var c = r.x - t.x,\n                        s = r.y - t.y,\n                        a = c * c + s * s;\n                      if (0 === a) {\n                        a = 1;\n                        var f = o > i ? 1 : -1;\n                        (c = 0.01 * f), (s = 0.01 * f);\n                      }\n                      var y = n / a;\n                      (e[o].x += c * y), (e[o].y += s * y);\n                    }\n                  });\n              });\n            }),\n            (e.prototype.calAttractive = function (t, e, n) {\n              var r = this;\n              t.forEach(function (t) {\n                if (t.source && t.target) {\n                  var o = r.nodeIdxMap[t.source],\n                    i = r.nodeIdxMap[t.target];\n                  if (o !== i) {\n                    var c = r.nodeMap[t.source],\n                      s = r.nodeMap[t.target];\n                    if (\n                      u.isNumber(s.x) &&\n                      u.isNumber(c.x) &&\n                      u.isNumber(s.y) &&\n                      u.isNumber(c.y)\n                    ) {\n                      var a = s.x - c.x,\n                        f = s.y - c.y,\n                        y = Math.sqrt(a * a + f * f),\n                        l = (y * y) / n;\n                      (e[i].x -= (a / y) * l),\n                        (e[i].y -= (f / y) * l),\n                        (e[o].x += (a / y) * l),\n                        (e[o].y += (f / y) * l);\n                    }\n                  }\n                }\n              });\n            }),\n            (e.prototype.stop = function () {\n              this.timeInterval &&\n                \"undefined\" != typeof window &&\n                window.clearInterval(this.timeInterval);\n            }),\n            (e.prototype.destroy = function () {\n              this.stop(),\n                (this.tick = null),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.getType = function () {\n              return \"fruchterman\";\n            }),\n            e\n          );\n        })(i.Base);\n      e.FruchtermanLayout = c;\n    },\n    386: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var r = n(164);\n      e.default = r.FruchtermanLayout;\n    },\n    9: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=fruchtermanLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/gForceLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.GForceLayout = e())\n    : (t.GForceLayout = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var o = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            n.d(\n              r,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 387))\n    );\n  })({\n    10: function (t, e, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[n];\n                    },\n                  });\n              }\n            : function (t, e, n, r) {\n                void 0 === r && (r = n), (t[r] = e[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var n in t)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(e, n) ||\n                r(e, t, n);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(n(11), e),\n        o(n(12), e),\n        o(n(13), e),\n        o(n(14), e),\n        o(n(15), e),\n        o(n(16), e);\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    14: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n          e[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (e[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (e[r][o] = t[r][o])\n              : (e[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              e[r][o] > e[r][i] + e[i][o] && (e[r][o] = e[r][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                u = i[n],\n                a = i[r];\n              (o[u][a] = 1), e || (o[a][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (e = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    165: function (t, e, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.GForceLayout = void 0);\n      var i = n(9),\n        u = n(10),\n        a = function (t, e) {\n          return t\n            ? u.isNumber(t)\n              ? function (e) {\n                  return t;\n                }\n              : t\n            : function (t) {\n                return e || 1;\n              };\n        },\n        c = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.maxIteration = 1e3),\n              (n.edgeStrength = 200),\n              (n.nodeStrength = 1e3),\n              (n.coulombDisScale = 0.005),\n              (n.damping = 0.9),\n              (n.maxSpeed = 1e3),\n              (n.minMovement = 0.5),\n              (n.interval = 0.02),\n              (n.factor = 1),\n              (n.linkDistance = 1),\n              (n.gravity = 10),\n              (n.preventOverlap = !0),\n              (n.tick = function () {}),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.nodeMap = {}),\n              (n.nodeIdxMap = {}),\n              n.updateCfg(e),\n              n\n            );\n          }\n          return (\n            o(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { maxIteration: 500, gravity: 10, enableTick: !0 };\n            }),\n            (e.prototype.execute = function () {\n              var t = this,\n                e = t.nodes;\n              if (\n                (void 0 !== t.timeInterval &&\n                  \"undefined\" != typeof window &&\n                  window.clearInterval(t.timeInterval),\n                e && 0 !== e.length)\n              ) {\n                t.width ||\n                  \"undefined\" == typeof window ||\n                  (t.width = window.innerWidth),\n                  t.height ||\n                    \"undefined\" == typeof window ||\n                    (t.height = window.innerHeight),\n                  t.center || (t.center = [t.width / 2, t.height / 2]);\n                var n = t.center;\n                if (1 === e.length)\n                  return (\n                    (e[0].x = n[0]),\n                    (e[0].y = n[1]),\n                    void (t.onLayoutEnd && t.onLayoutEnd())\n                  );\n                var r = {},\n                  o = {};\n                e.forEach(function (e, n) {\n                  u.isNumber(e.x) || (e.x = Math.random() * t.width),\n                    u.isNumber(e.y) || (e.y = Math.random() * t.height),\n                    (r[e.id] = e),\n                    (o[e.id] = n);\n                }),\n                  (t.nodeMap = r),\n                  (t.nodeIdxMap = o),\n                  (t.linkDistance = a(t.linkDistance, 1)),\n                  (t.nodeStrength = a(t.nodeStrength, 1)),\n                  (t.edgeStrength = a(t.edgeStrength, 1));\n                var i,\n                  c = t.nodeSize;\n                if (t.preventOverlap) {\n                  var s,\n                    f = t.nodeSpacing;\n                  (s = u.isNumber(f)\n                    ? function () {\n                        return f;\n                      }\n                    : u.isFunction(f)\n                    ? f\n                    : function () {\n                        return 0;\n                      }),\n                    (i = c\n                      ? u.isArray(c)\n                        ? function (t) {\n                            return (c[0] > c[1] ? c[0] : c[1]) + s(t);\n                          }\n                        : function (t) {\n                            return c + s(t);\n                          }\n                      : function (t) {\n                          return t.size\n                            ? u.isArray(t.size)\n                              ? (t.size[0] > t.size[1]\n                                  ? t.size[0]\n                                  : t.size[1]) + s(t)\n                              : t.size + s(t)\n                            : 10 + s(t);\n                        });\n                }\n                t.nodeSize = i;\n                var d = t.edges;\n                (t.degrees = u.getDegree(e.length, t.nodeIdxMap, d)),\n                  t.getMass ||\n                    (t.getMass = function (e) {\n                      return t.degrees[t.nodeIdxMap[e.id]] || 1;\n                    }),\n                  t.run();\n              } else t.onLayoutEnd && t.onLayoutEnd();\n            }),\n            (e.prototype.run = function () {\n              var t = this,\n                e = t.nodes,\n                n = t.edges,\n                r = t.maxIteration;\n              if (\"undefined\" != typeof window) {\n                var o = 0;\n                this.timeInterval = window.setInterval(function () {\n                  var i = [],\n                    u = [];\n                  if (e) {\n                    e.forEach(function (t, e) {\n                      (i[2 * e] = 0),\n                        (i[2 * e + 1] = 0),\n                        (u[2 * e] = 0),\n                        (u[2 * e + 1] = 0);\n                    }),\n                      t.calRepulsive(i, e),\n                      n && t.calAttractive(i, n),\n                      t.calGravity(i, e);\n                    var a = Math.max(0.02, t.interval - 0.002 * o);\n                    t.updateVelocity(i, u, a, e);\n                    var c = [];\n                    e.forEach(function (t) {\n                      c.push({ x: t.x, y: t.y });\n                    }),\n                      t.updatePosition(u, a, e),\n                      t.tick && t.tick();\n                    var s = 0;\n                    e.forEach(function (t, e) {\n                      var n = t.x - c[e].x,\n                        r = t.y - c[e].y;\n                      s += Math.sqrt(n * n + r * r);\n                    }),\n                      (s /= e.length) < t.minMovement &&\n                        (window.clearInterval(t.timeInterval),\n                        t.onLayoutEnd && t.onLayoutEnd()),\n                      ++o >= r &&\n                        (t.onLayoutEnd && t.onLayoutEnd(),\n                        window.clearInterval(t.timeInterval));\n                  }\n                }, 0);\n              }\n            }),\n            (e.prototype.calRepulsive = function (t, e) {\n              var n = this.getMass,\n                r = this.nodeStrength,\n                o = this.factor,\n                i = this.coulombDisScale,\n                u = this.preventOverlap,\n                a = this.nodeSize;\n              e.forEach(function (c, s) {\n                var f = n ? n(c) : 1;\n                e.forEach(function (e, d) {\n                  if (!(s >= d)) {\n                    var l = c.x - e.x,\n                      p = c.y - e.y,\n                      y = Math.sqrt(l * l + p * p) + 0.01,\n                      h = (y + 0.1) * i,\n                      v = l / y,\n                      g = p / y,\n                      b = (((r(c) + r(e)) / 2) * o) / (h * h),\n                      m = n ? n(e) : 1;\n                    if (\n                      ((t[2 * s] += v * b),\n                      (t[2 * s + 1] += g * b),\n                      (t[2 * d] -= v * b),\n                      (t[2 * d + 1] -= g * b),\n                      u && y < (a(c) + a(e)) / 2)\n                    ) {\n                      var x = (r(c) + r(e)) / 2 / (y * y);\n                      (t[2 * s] += (v * x) / f),\n                        (t[2 * s + 1] += (g * x) / f),\n                        (t[2 * d] -= (v * x) / m),\n                        (t[2 * d + 1] -= (g * x) / m);\n                    }\n                  }\n                });\n              });\n            }),\n            (e.prototype.calAttractive = function (t, e) {\n              var n = this.nodeMap,\n                r = this.nodeIdxMap,\n                o = this.linkDistance,\n                i = this.edgeStrength,\n                u = this.getMass;\n              e.forEach(function (e, a) {\n                var c = n[e.source],\n                  s = n[e.target],\n                  f = s.x - c.x,\n                  d = s.y - c.y,\n                  l = Math.sqrt(f * f + d * d) + 0.01,\n                  p = f / l,\n                  y = d / l,\n                  h = ((o(e) || 1) - l) * i(e),\n                  v = r[e.source],\n                  g = r[e.target],\n                  b = u ? u(c) : 1,\n                  m = u ? u(s) : 1;\n                (t[2 * v] -= (p * h) / b),\n                  (t[2 * v + 1] -= (y * h) / b),\n                  (t[2 * g] += (p * h) / m),\n                  (t[2 * g + 1] += (y * h) / m);\n              });\n            }),\n            (e.prototype.calGravity = function (t, e) {\n              for (\n                var n = this.center,\n                  r = this.gravity,\n                  o = this.degrees,\n                  i = e.length,\n                  a = 0;\n                a < i;\n                a++\n              ) {\n                var c = e[a],\n                  s = c.x - n[0],\n                  f = c.y - n[1],\n                  d = r;\n                if (this.getCenter) {\n                  var l = this.getCenter(c, o[a]);\n                  l &&\n                    u.isNumber(l[0]) &&\n                    u.isNumber(l[1]) &&\n                    u.isNumber(l[2]) &&\n                    ((s = c.x - l[0]), (f = c.y - l[1]), (d = l[2]));\n                }\n                d && ((t[2 * a] -= d * s), (t[2 * a + 1] -= d * f));\n              }\n            }),\n            (e.prototype.updateVelocity = function (t, e, n, r) {\n              var o = this,\n                i = n * o.damping;\n              r.forEach(function (n, r) {\n                var u = t[2 * r] * i || 0.01,\n                  a = t[2 * r + 1] * i || 0.01,\n                  c = Math.sqrt(u * u + a * a);\n                if (c > o.maxSpeed) {\n                  var s = o.maxSpeed / c;\n                  (u *= s), (a *= s);\n                }\n                (e[2 * r] = u), (e[2 * r + 1] = a);\n              });\n            }),\n            (e.prototype.updatePosition = function (t, e, n) {\n              n.forEach(function (n, r) {\n                if (u.isNumber(n.fx) && u.isNumber(n.fy))\n                  return (n.x = n.fx), void (n.y = n.fy);\n                var o = t[2 * r] * e,\n                  i = t[2 * r + 1] * e;\n                (n.x += o), (n.y += i);\n              });\n            }),\n            (e.prototype.stop = function () {\n              this.timeInterval &&\n                \"undefined\" != typeof window &&\n                window.clearInterval(this.timeInterval);\n            }),\n            (e.prototype.destroy = function () {\n              this.stop(),\n                (this.tick = null),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.getType = function () {\n              return \"gForce\";\n            }),\n            e\n          );\n        })(i.Base);\n      e.GForceLayout = c;\n    },\n    387: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var r = n(165);\n      e.default = r.GForceLayout;\n    },\n    9: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=gForceLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/gridLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.GridLayout = t())\n    : (e.GridLayout = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function o(r) {\n      if (t[r]) return t[r].exports;\n      var n = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(n.exports, n, n.exports, o), (n.l = !0), n.exports;\n    }\n    return (\n      (o.m = e),\n      (o.c = t),\n      (o.d = function (e, t, r) {\n        o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (o.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (e, t) {\n        if ((1 & t && (e = o(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (o.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var n in e)\n            o.d(\n              r,\n              n,\n              function (t) {\n                return e[t];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (o.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return o.d(t, \"a\", t), t;\n      }),\n      (o.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (o.p = \"\"),\n      o((o.s = 388))\n    );\n  })({\n    10: function (e, t, o) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, o, r) {\n                void 0 === r && (r = o),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[o];\n                    },\n                  });\n              }\n            : function (e, t, o, r) {\n                void 0 === r && (r = o), (e[r] = t[o]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var o in e)\n              \"default\" === o ||\n                Object.prototype.hasOwnProperty.call(t, o) ||\n                r(t, e, o);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        n(o(11), t),\n        n(o(12), t),\n        n(o(13), t),\n        n(o(14), t),\n        n(o(15), t),\n        n(o(16), t);\n    },\n    11: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        n,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (e) {\n          return n[e] || (n[e] = r(e));\n        });\n    },\n    12: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var o = parseFloat(e);\n        return t.isNaN(o) ? e : o;\n      };\n    },\n    14: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, o) {\n        for (var r = [], n = 0; n < e; n++) r[n] = 0;\n        return o\n          ? (o.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], o = e.length, r = 0; r < o; r += 1) {\n          t[r] = [];\n          for (var n = 0; n < o; n += 1)\n            r === n\n              ? (t[r][n] = 0)\n              : 0 !== e[r][n] && e[r][n]\n              ? (t[r][n] = e[r][n])\n              : (t[r][n] = 1 / 0);\n        }\n        for (var i = 0; i < o; i += 1)\n          for (r = 0; r < o; r += 1)\n            for (n = 0; n < o; n += 1)\n              t[r][n] > t[r][i] + t[i][n] && (t[r][n] = t[r][i] + t[i][n]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var o = e.nodes,\n          r = e.edges,\n          n = [],\n          i = {};\n        if (!o) throw new Error(\"invalid nodes data!\");\n        return (\n          o &&\n            o.forEach(function (e, t) {\n              i[e.id] = t;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var o = e.source,\n                r = e.target,\n                s = i[o],\n                u = i[r];\n              (n[s][u] = 1), t || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var o = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              o.push(r);\n          }),\n          o\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, o) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], o)) return;\n            return !!o(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, o) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (e) {\n              for (var t, o = 1, r = arguments.length; o < r; o++)\n                for (var n in (t = arguments[o]))\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var o = [];\n          return (\n            e.forEach(function (e) {\n              o.push(e);\n            }),\n            o.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = n({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    166: function (e, t, o) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var o in t)\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((o.prototype = t.prototype), new o()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.GridLayout = void 0);\n      var i = o(10),\n        s = (function (e) {\n          function t(t) {\n            var o = e.call(this) || this;\n            return (\n              (o.begin = [0, 0]),\n              (o.preventOverlap = !0),\n              (o.preventOverlapPadding = 10),\n              (o.condense = !1),\n              (o.sortBy = \"degree\"),\n              (o.nodeSize = 30),\n              (o.nodes = []),\n              (o.edges = []),\n              (o.width = 300),\n              (o.height = 300),\n              (o.row = 0),\n              (o.col = 0),\n              (o.cellWidth = 0),\n              (o.cellHeight = 0),\n              (o.cellUsed = {}),\n              (o.id2manPos = {}),\n              (o.onLayoutEnd = function () {}),\n              o.updateCfg(t),\n              o\n            );\n          }\n          return (\n            n(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                begin: [0, 0],\n                preventOverlap: !0,\n                preventOverlapPadding: 10,\n                condense: !1,\n                rows: void 0,\n                cols: void 0,\n                position: void 0,\n                sortBy: \"degree\",\n                nodeSize: 30,\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this,\n                t = e.nodes,\n                o = t.length,\n                r = e.begin;\n              if (0 !== o) {\n                if (1 === o)\n                  return (\n                    (t[0].x = r[0]),\n                    (t[0].y = r[1]),\n                    void (e.onLayoutEnd && e.onLayoutEnd())\n                  );\n                var n = e.edges,\n                  s = [];\n                t.forEach(function (e) {\n                  s.push(e);\n                });\n                var u = {};\n                if (\n                  (s.forEach(function (e, t) {\n                    u[e.id] = t;\n                  }),\n                  (\"degree\" === e.sortBy ||\n                    !i.isString(e.sortBy) ||\n                    void 0 === s[0][e.sortBy]) &&\n                    ((e.sortBy = \"degree\"), i.isNaN(t[0].degree)))\n                ) {\n                  var c = i.getDegree(s.length, u, n);\n                  s.forEach(function (e, t) {\n                    e.degree = c[t];\n                  });\n                }\n                s.sort(function (t, o) {\n                  return o[e.sortBy] - t[e.sortBy];\n                }),\n                  e.width ||\n                    \"undefined\" == typeof window ||\n                    (e.width = window.innerWidth),\n                  e.height ||\n                    \"undefined\" == typeof window ||\n                    (e.height = window.innerHeight);\n                var l = e.rows,\n                  a = null != e.cols ? e.cols : e.columns;\n                if (\n                  ((e.cells = o),\n                  null != l && null != a\n                    ? ((e.rows = l), (e.cols = a))\n                    : null != l && null == a\n                    ? ((e.rows = l), (e.cols = Math.ceil(e.cells / e.rows)))\n                    : null == l && null != a\n                    ? ((e.cols = a), (e.rows = Math.ceil(e.cells / e.cols)))\n                    : ((e.splits = Math.sqrt((e.cells * e.height) / e.width)),\n                      (e.rows = Math.round(e.splits)),\n                      (e.cols = Math.round((e.width / e.height) * e.splits))),\n                  e.cols * e.rows > e.cells)\n                )\n                  ((d = e.small()) - 1) * (f = e.large()) >= e.cells\n                    ? e.small(d - 1)\n                    : (f - 1) * d >= e.cells && e.large(f - 1);\n                else\n                  for (; e.cols * e.rows < e.cells; ) {\n                    var f,\n                      d = e.small();\n                    ((f = e.large()) + 1) * d >= e.cells\n                      ? e.large(f + 1)\n                      : e.small(d + 1);\n                  }\n                (e.cellWidth = e.width / e.cols),\n                  (e.cellHeight = e.height / e.rows),\n                  e.condense && ((e.cellWidth = 0), (e.cellHeight = 0)),\n                  e.preventOverlap &&\n                    s.forEach(function (t) {\n                      var o, r;\n                      (t.x && t.y) || ((t.x = 0), (t.y = 0)),\n                        i.isArray(t.size)\n                          ? ((o = t.size[0]), (r = t.size[1]))\n                          : i.isNumber(t.size) && ((o = t.size), (r = t.size)),\n                        (void 0 !== o && void 0 !== r) ||\n                          (i.isArray(e.nodeSize)\n                            ? ((o = e.nodeSize[0]), (r = e.nodeSize[1]))\n                            : i.isNumber(e.nodeSize)\n                            ? ((o = e.nodeSize), (r = e.nodeSize))\n                            : ((o = 30), (r = 30)));\n                      var n = e.preventOverlapPadding,\n                        s = o + n,\n                        u = r + n;\n                      (e.cellWidth = Math.max(e.cellWidth, s)),\n                        (e.cellHeight = Math.max(e.cellHeight, u));\n                    }),\n                  (e.cellUsed = {}),\n                  (e.row = 0),\n                  (e.col = 0),\n                  (e.id2manPos = {});\n                for (var p = 0; p < s.length; p++) {\n                  var h = s[p],\n                    y = void 0;\n                  if (\n                    (e.position && (y = e.position(h)),\n                    y && (void 0 !== y.row || void 0 !== y.col))\n                  ) {\n                    var v = { row: y.row, col: y.col };\n                    if (void 0 === v.col)\n                      for (v.col = 0; e.used(v.row, v.col); ) v.col++;\n                    else if (void 0 === v.row)\n                      for (v.row = 0; e.used(v.row, v.col); ) v.row++;\n                    (e.id2manPos[h.id] = v), e.use(v.row, v.col);\n                  }\n                  e.getPos(h);\n                }\n                return e.onLayoutEnd && e.onLayoutEnd(), { edges: n, nodes: s };\n              }\n              e.onLayoutEnd && e.onLayoutEnd();\n            }),\n            (t.prototype.small = function (e) {\n              var t,\n                o = this.rows || 5,\n                r = this.cols || 5;\n              null == e\n                ? (t = Math.min(o, r))\n                : Math.min(o, r) === this.rows\n                ? (this.rows = e)\n                : (this.cols = e);\n              return t;\n            }),\n            (t.prototype.large = function (e) {\n              var t,\n                o = this.rows || 5,\n                r = this.cols || 5;\n              null == e\n                ? (t = Math.max(o, r))\n                : Math.max(o, r) === this.rows\n                ? (this.rows = e)\n                : (this.cols = e);\n              return t;\n            }),\n            (t.prototype.used = function (e, t) {\n              return this.cellUsed[\"c-\" + e + \"-\" + t] || !1;\n            }),\n            (t.prototype.use = function (e, t) {\n              this.cellUsed[\"c-\" + e + \"-\" + t] = !0;\n            }),\n            (t.prototype.moveToNextCell = function () {\n              var e = this.cols || 5;\n              this.col++, this.col >= e && ((this.col = 0), this.row++);\n            }),\n            (t.prototype.getPos = function (e) {\n              var t,\n                o,\n                r = this.begin,\n                n = this.cellWidth,\n                i = this.cellHeight,\n                s = this.id2manPos[e.id];\n              if (s)\n                (t = s.col * n + n / 2 + r[0]), (o = s.row * i + i / 2 + r[1]);\n              else {\n                for (; this.used(this.row, this.col); ) this.moveToNextCell();\n                (t = this.col * n + n / 2 + r[0]),\n                  (o = this.row * i + i / 2 + r[1]),\n                  this.use(this.row, this.col),\n                  this.moveToNextCell();\n              }\n              (e.x = t), (e.y = o);\n            }),\n            (t.prototype.getType = function () {\n              return \"grid\";\n            }),\n            t\n          );\n        })(o(9).Base);\n      t.GridLayout = s;\n    },\n    388: function (e, t, o) {\n      \"use strict\";\n      o.r(t);\n      var r = o(166);\n      t.default = r.GridLayout;\n    },\n    9: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=gridLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/mdsLayout.js",
    "content": "!(function (t, r) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = r())\n    : \"function\" == typeof define && define.amd\n    ? define([], r)\n    : \"object\" == typeof exports\n    ? (exports.MdsLayout = r())\n    : (t.MdsLayout = r());\n})(this, function () {\n  return (function (t) {\n    var r = {};\n    function e(o) {\n      if (r[o]) return r[o].exports;\n      var n = (r[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(n.exports, n, n.exports, e), (n.l = !0), n.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = r),\n      (e.d = function (t, r, o) {\n        e.o(t, r) || Object.defineProperty(t, r, { enumerable: !0, get: o });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, r) {\n        if ((1 & r && (t = e(t)), 8 & r)) return t;\n        if (4 & r && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (e.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & r && \"string\" != typeof t)\n        )\n          for (var n in t)\n            e.d(\n              o,\n              n,\n              function (r) {\n                return t[r];\n              }.bind(null, n),\n            );\n        return o;\n      }),\n      (e.n = function (t) {\n        var r =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(r, \"a\", r), r;\n      }),\n      (e.o = function (t, r) {\n        return Object.prototype.hasOwnProperty.call(t, r);\n      }),\n      (e.p = \"\"),\n      e((e.s = 389))\n    );\n  })({\n    10: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        n(e(11), r),\n        n(e(12), r),\n        n(e(13), r),\n        n(e(14), r),\n        n(e(15), r),\n        n(e(16), r);\n    },\n    11: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.camelize = r.isString = void 0);\n      r.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var o,\n        n,\n        i = /-(\\w)/g;\n      r.camelize =\n        ((o = function (t) {\n          return t.replace(i, function (t, r) {\n            return r ? r.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = o(t));\n        });\n    },\n    12: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isArray = void 0),\n        (r.isArray = Array.isArray);\n    },\n    13: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.toNumber = r.isNaN = r.isNumber = void 0);\n      r.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      r.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      r.toNumber = function (t) {\n        var e = parseFloat(t);\n        return r.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.traverseTreeUp =\n          r.scaleMatrix =\n          r.getAdjMatrix =\n          r.floydWarshall =\n          r.getDegree =\n            void 0);\n      r.getDegree = function (t, r, e) {\n        for (var o = [], n = 0; n < t; n++) o[n] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (o[r[t.source]] += 1),\n                t.target && (o[r[t.target]] += 1);\n            }),\n            o)\n          : o;\n      };\n      r.floydWarshall = function (t) {\n        for (var r = [], e = t.length, o = 0; o < e; o += 1) {\n          r[o] = [];\n          for (var n = 0; n < e; n += 1)\n            o === n\n              ? (r[o][n] = 0)\n              : 0 !== t[o][n] && t[o][n]\n              ? (r[o][n] = t[o][n])\n              : (r[o][n] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (o = 0; o < e; o += 1)\n            for (n = 0; n < e; n += 1)\n              r[o][n] > r[o][i] + r[i][n] && (r[o][n] = r[o][i] + r[i][n]);\n        return r;\n      };\n      r.getAdjMatrix = function (t, r) {\n        var e = t.nodes,\n          o = t.edges,\n          n = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, r) {\n              i[t.id] = r;\n              n.push([]);\n            }),\n          o &&\n            o.forEach(function (t) {\n              var e = t.source,\n                o = t.target,\n                s = i[e],\n                u = i[o];\n              (n[s][u] = 1), r || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      r.scaleMatrix = function (t, r) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var o = [];\n            t.forEach(function (t) {\n              o.push(t * r);\n            }),\n              e.push(o);\n          }),\n          e\n        );\n      };\n      r.traverseTreeUp = function (t, r) {\n        \"function\" == typeof r &&\n          (function t(r, e) {\n            if (r && r.children)\n              for (var o = r.children.length - 1; o >= 0; o--)\n                if (!t(r.children[o], e)) return;\n            return !!e(r);\n          })(t, r);\n      };\n    },\n    15: function (t, r, e) {\n      \"use strict\";\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var r, e = 1, o = arguments.length; e < o; e++)\n                for (var n in (r = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.clone = r.isObject = void 0);\n      r.isObject = function (t) {\n        return null !== t && \"object\" === o(t);\n      };\n      r.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return r.clone(t);\n            })\n          );\n        }\n        if (\"object\" === o(t) && t !== {}) {\n          var i = n({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = r.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isFunction = void 0);\n      r.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    167: function (t, r, e) {\n      \"use strict\";\n      var o,\n        n =\n          (this && this.__extends) ||\n          ((o = function (t, r) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, r) {\n                  t.__proto__ = r;\n                }) ||\n              function (t, r) {\n                for (var e in r)\n                  Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]);\n              })(t, r);\n          }),\n          function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(r) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            o(t, r),\n              (t.prototype =\n                null === r\n                  ? Object.create(r)\n                  : ((e.prototype = r.prototype), new e()));\n          });\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.MDSLayout = void 0);\n      var i = e(96),\n        s = e(10),\n        u = (function (t) {\n          function r(r) {\n            var e = t.call(this) || this;\n            return (\n              (e.center = [0, 0]),\n              (e.linkDistance = 50),\n              (e.nodes = []),\n              (e.edges = []),\n              (e.onLayoutEnd = function () {}),\n              e.updateCfg(r),\n              e\n            );\n          }\n          return (\n            n(r, t),\n            (r.prototype.getDefaultCfg = function () {\n              return { center: [0, 0], linkDistance: 50 };\n            }),\n            (r.prototype.execute = function () {\n              var t = this.nodes,\n                r = this.edges,\n                e = void 0 === r ? [] : r,\n                o = this.center;\n              if (t && 0 !== t.length) {\n                if (1 === t.length)\n                  return (\n                    (t[0].x = o[0]),\n                    (t[0].y = o[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                var n = this.linkDistance,\n                  i = s.getAdjMatrix({ nodes: t, edges: e }, !1),\n                  u = s.floydWarshall(i);\n                this.handleInfinity(u);\n                var a = s.scaleMatrix(u, n);\n                this.scaledDistances = a;\n                var f = this.runMDS();\n                return (\n                  (this.positions = f),\n                  f.forEach(function (r, e) {\n                    (t[e].x = r[0] + o[0]), (t[e].y = r[1] + o[1]);\n                  }),\n                  this.onLayoutEnd && this.onLayoutEnd(),\n                  { nodes: t, edges: e }\n                );\n              }\n              this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (r.prototype.runMDS = function () {\n              var t = this.scaledDistances,\n                r = i.Matrix.mul(i.Matrix.pow(t, 2), -0.5),\n                e = r.mean(\"row\"),\n                o = r.mean(\"column\"),\n                n = r.mean();\n              r.add(n).subRowVector(e).subColumnVector(o);\n              var s = new i.SingularValueDecomposition(r),\n                u = i.Matrix.sqrt(s.diagonalMatrix).diagonal();\n              return s.leftSingularVectors.toJSON().map(function (t) {\n                return i.Matrix.mul([t], [u]).toJSON()[0].splice(0, 2);\n              });\n            }),\n            (r.prototype.handleInfinity = function (t) {\n              var r = -999999;\n              t.forEach(function (t) {\n                t.forEach(function (t) {\n                  t !== 1 / 0 && r < t && (r = t);\n                });\n              }),\n                t.forEach(function (e, o) {\n                  e.forEach(function (e, n) {\n                    e === 1 / 0 && (t[o][n] = r);\n                  });\n                });\n            }),\n            (r.prototype.getType = function () {\n              return \"mds\";\n            }),\n            r\n          );\n        })(e(9).Base);\n      r.MDSLayout = u;\n    },\n    389: function (t, r, e) {\n      \"use strict\";\n      e.r(r);\n      var o = e(167);\n      r.default = o.MDSLayout;\n    },\n    9: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), (r.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      r.Base = o;\n    },\n    96: function (t, r, e) {\n      \"use strict\";\n      e.r(r),\n        e.d(r, \"AbstractMatrix\", function () {\n          return U;\n        }),\n        e.d(r, \"default\", function () {\n          return Y;\n        }),\n        e.d(r, \"Matrix\", function () {\n          return Y;\n        }),\n        e.d(r, \"MatrixColumnView\", function () {\n          return ut;\n        }),\n        e.d(r, \"MatrixColumnSelectionView\", function () {\n          return yt;\n        }),\n        e.d(r, \"MatrixFlipColumnView\", function () {\n          return Mt;\n        }),\n        e.d(r, \"MatrixFlipRowView\", function () {\n          return Rt;\n        }),\n        e.d(r, \"MatrixRowView\", function () {\n          return It;\n        }),\n        e.d(r, \"MatrixRowSelectionView\", function () {\n          return zt;\n        }),\n        e.d(r, \"MatrixSelectionView\", function () {\n          return Kt;\n        }),\n        e.d(r, \"MatrixSubView\", function () {\n          return er;\n        }),\n        e.d(r, \"MatrixTransposeView\", function () {\n          return fr;\n        }),\n        e.d(r, \"wrap\", function () {\n          return Or;\n        }),\n        e.d(r, \"WrapperMatrix1D\", function () {\n          return gr;\n        }),\n        e.d(r, \"WrapperMatrix2D\", function () {\n          return Sr;\n        }),\n        e.d(r, \"solve\", function () {\n          return Ir;\n        }),\n        e.d(r, \"inverse\", function () {\n          return Dr;\n        }),\n        e.d(r, \"determinant\", function () {\n          return Vr;\n        }),\n        e.d(r, \"linearDependencies\", function () {\n          return Fr;\n        }),\n        e.d(r, \"pseudoInverse\", function () {\n          return Lr;\n        }),\n        e.d(r, \"covariance\", function () {\n          return zr;\n        }),\n        e.d(r, \"correlation\", function () {\n          return Wr;\n        }),\n        e.d(r, \"SingularValueDecomposition\", function () {\n          return Nr;\n        }),\n        e.d(r, \"SVD\", function () {\n          return Nr;\n        }),\n        e.d(r, \"EigenvalueDecomposition\", function () {\n          return Yr;\n        }),\n        e.d(r, \"EVD\", function () {\n          return Yr;\n        }),\n        e.d(r, \"CholeskyDecomposition\", function () {\n          return te;\n        }),\n        e.d(r, \"CHO\", function () {\n          return te;\n        }),\n        e.d(r, \"LuDecomposition\", function () {\n          return jr;\n        }),\n        e.d(r, \"LU\", function () {\n          return jr;\n        }),\n        e.d(r, \"QrDecomposition\", function () {\n          return _r;\n        }),\n        e.d(r, \"QR\", function () {\n          return _r;\n        }),\n        e.d(r, \"Nipals\", function () {\n          return ne;\n        }),\n        e.d(r, \"NIPALS\", function () {\n          return ne;\n        });\n      var o = Object.prototype.toString;\n      function n(t) {\n        return o.call(t).endsWith(\"Array]\");\n      }\n      function i(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] > u && (u = t[a]);\n        return u;\n      }\n      function s(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] < u && (u = t[a]);\n        return u;\n      }\n      function u(t) {\n        var r,\n          e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        if (void 0 !== e.output) {\n          if (!n(e.output))\n            throw new TypeError(\"output option must be an array if specified\");\n          r = e.output;\n        } else r = new Array(t.length);\n        var o = s(t),\n          u = i(t);\n        if (o === u)\n          throw new RangeError(\n            \"minimum and maximum input values are equal. Cannot rescale a constant array\",\n          );\n        var a = e.min,\n          f = void 0 === a ? (e.autoMinMax ? o : 0) : a,\n          c = e.max,\n          h = void 0 === c ? (e.autoMinMax ? u : 1) : c;\n        if (f >= h)\n          throw new RangeError(\"min option must be smaller than max option\");\n        for (var l = (h - f) / (u - o), p = 0; p < t.length; p++)\n          r[p] = (t[p] - o) * l + f;\n        return r;\n      }\n      var a = \" \".repeat(2),\n        f = \" \".repeat(4);\n      function c(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = r.maxRows,\n          o = void 0 === e ? 15 : e,\n          n = r.maxColumns,\n          i = void 0 === n ? 10 : n,\n          s = r.maxNumSize,\n          u = void 0 === s ? 8 : s;\n        return \"\"\n          .concat(t.constructor.name, \" {\\n\")\n          .concat(a, \"[\\n\")\n          .concat(f)\n          .concat(h(t, o, i, u), \"\\n\")\n          .concat(a, \"]\\n\")\n          .concat(a, \"rows: \")\n          .concat(t.rows, \"\\n\")\n          .concat(a, \"columns: \")\n          .concat(t.columns, \"\\n}\");\n      }\n      function h(t, r, e, o) {\n        for (\n          var n = t.rows,\n            i = t.columns,\n            s = Math.min(n, r),\n            u = Math.min(i, e),\n            a = [],\n            c = 0;\n          c < s;\n          c++\n        ) {\n          for (var h = [], p = 0; p < u; p++) h.push(l(t.get(c, p), o));\n          a.push(\"\".concat(h.join(\" \")));\n        }\n        return (\n          u !== i &&\n            (a[a.length - 1] += \" ... \".concat(i - e, \" more columns\")),\n          s !== n && a.push(\"... \".concat(n - r, \" more rows\")),\n          a.join(\"\\n\".concat(f))\n        );\n      }\n      function l(t, r) {\n        var e = String(t);\n        if (e.length <= r) return e.padEnd(r, \" \");\n        var o = t.toPrecision(r - 2);\n        if (o.length <= r) return o;\n        var n = t.toExponential(r - 2),\n          i = n.indexOf(\"e\"),\n          s = n.slice(i);\n        return n.slice(0, r - s.length) + s;\n      }\n      function p(t, r, e) {\n        var o = e ? t.rows : t.rows - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Row index out of range\");\n      }\n      function y(t, r, e) {\n        var o = e ? t.columns : t.columns - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Column index out of range\");\n      }\n      function v(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.columns))\n          throw new RangeError(\n            \"vector size must be the same as the number of columns\",\n          );\n        return r;\n      }\n      function m(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.rows))\n          throw new RangeError(\n            \"vector size must be the same as the number of rows\",\n          );\n        return r;\n      }\n      function g(t, r) {\n        if (!n(r)) throw new TypeError(\"row indices must be an array\");\n        for (var e = 0; e < r.length; e++)\n          if (r[e] < 0 || r[e] >= t.rows)\n            throw new RangeError(\"row indices are out of range\");\n      }\n      function w(t, r) {\n        if (!n(r)) throw new TypeError(\"column indices must be an array\");\n        for (var e = 0; e < r.length; e++)\n          if (r[e] < 0 || r[e] >= t.columns)\n            throw new RangeError(\"column indices are out of range\");\n      }\n      function b(t, r, e, o, n) {\n        if (5 !== arguments.length)\n          throw new RangeError(\"expected 4 arguments\");\n        if (\n          (M(\"startRow\", r),\n          M(\"endRow\", e),\n          M(\"startColumn\", o),\n          M(\"endColumn\", n),\n          r > e ||\n            o > n ||\n            r < 0 ||\n            r >= t.rows ||\n            e < 0 ||\n            e >= t.rows ||\n            o < 0 ||\n            o >= t.columns ||\n            n < 0 ||\n            n >= t.columns)\n        )\n          throw new RangeError(\"Submatrix indices are out of range\");\n      }\n      function d(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : 0,\n            e = [],\n            o = 0;\n          o < t;\n          o++\n        )\n          e.push(r);\n        return e;\n      }\n      function M(t, r) {\n        if (\"number\" != typeof r)\n          throw new TypeError(\"\".concat(t, \" must be a number\"));\n      }\n      function x(t) {\n        if (t.isEmpty())\n          throw new Error(\"Empty matrix has no elements to index\");\n      }\n      function k(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < o; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < n; c++)\n            (u += f = t.get(s, c) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / n) / (n - 1))\n            : i.push((a - (u * u) / n) / n);\n        }\n        return i;\n      }\n      function S(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < n; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < o; c++)\n            (u += f = t.get(c, s) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / o) / (o - 1))\n            : i.push((a - (u * u) / o) / o);\n        }\n        return i;\n      }\n      function O(t, r, e) {\n        for (\n          var o = t.rows, n = t.columns, i = o * n, s = 0, u = 0, a = 0, f = 0;\n          f < o;\n          f++\n        )\n          for (var c = 0; c < n; c++) (s += a = t.get(f, c) - e), (u += a * a);\n        return r ? (u - (s * s) / i) / (i - 1) : (u - (s * s) / i) / i;\n      }\n      function E(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[e]);\n      }\n      function j(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[o]);\n      }\n      function R(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r);\n      }\n      function P(t) {\n        for (var r = [], e = 0; e < t.rows; e++) {\n          for (var o = 0, n = 0; n < t.columns; n++)\n            o += Math.pow(t.get(e, n), 2) / (t.columns - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function _(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[e]);\n      }\n      function T(t) {\n        for (var r = [], e = 0; e < t.columns; e++) {\n          for (var o = 0, n = 0; n < t.rows; n++)\n            o += Math.pow(t.get(n, e), 2) / (t.rows - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function C(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[o]);\n      }\n      function N(t) {\n        for (var r = t.size - 1, e = 0, o = 0; o < t.columns; o++)\n          for (var n = 0; n < t.rows; n++) e += Math.pow(t.get(n, o), 2) / r;\n        return Math.sqrt(e);\n      }\n      function D(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r);\n      }\n      function I(t, r) {\n        return (I =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function V(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = A(t);\n          if (r) {\n            var n = A(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return q(this, e);\n        };\n      }\n      function q(t, r) {\n        if (r && (\"object\" === F(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function A(t) {\n        return (A = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      function F(t) {\n        return (F =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function L(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function B(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function z(t, r, e) {\n        return (\n          r && B(t.prototype, r),\n          e && B(t, e),\n          Object.defineProperty(t, \"prototype\", { writable: !1 }),\n          t\n        );\n      }\n      var U = (function () {\n        function t() {\n          L(this, t);\n        }\n        return (\n          z(\n            t,\n            [\n              {\n                key: \"size\",\n                get: function () {\n                  return this.rows * this.columns;\n                },\n              },\n              {\n                key: \"apply\",\n                value: function (t) {\n                  if (\"function\" != typeof t)\n                    throw new TypeError(\"callback must be a function\");\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) t.call(this, r, e);\n                  return this;\n                },\n              },\n              {\n                key: \"to1DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      t.push(this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"to2DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++) {\n                    t.push([]);\n                    for (var e = 0; e < this.columns; e++)\n                      t[r].push(this.get(r, e));\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"toJSON\",\n                value: function () {\n                  return this.to2DArray();\n                },\n              },\n              {\n                key: \"isRowVector\",\n                value: function () {\n                  return 1 === this.rows;\n                },\n              },\n              {\n                key: \"isColumnVector\",\n                value: function () {\n                  return 1 === this.columns;\n                },\n              },\n              {\n                key: \"isVector\",\n                value: function () {\n                  return 1 === this.rows || 1 === this.columns;\n                },\n              },\n              {\n                key: \"isSquare\",\n                value: function () {\n                  return this.rows === this.columns;\n                },\n              },\n              {\n                key: \"isEmpty\",\n                value: function () {\n                  return 0 === this.rows || 0 === this.columns;\n                },\n              },\n              {\n                key: \"isSymmetric\",\n                value: function () {\n                  if (this.isSquare()) {\n                    for (var t = 0; t < this.rows; t++)\n                      for (var r = 0; r <= t; r++)\n                        if (this.get(t, r) !== this.get(r, t)) return !1;\n                    return !0;\n                  }\n                  return !1;\n                },\n              },\n              {\n                key: \"isEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"isReducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    for (var i = r + 1; i < this.rows; i++)\n                      0 !== this.get(t, i) && (o = !1);\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"echelonForm\",\n                value: function () {\n                  for (\n                    var t = this.clone(), r = 0, e = 0;\n                    r < t.rows && e < t.columns;\n\n                  ) {\n                    for (var o = r, n = r; n < t.rows; n++)\n                      t.get(n, e) > t.get(o, e) && (o = n);\n                    if (0 === t.get(o, e)) e++;\n                    else {\n                      t.swapRows(r, o);\n                      for (var i = t.get(r, e), s = e; s < t.columns; s++)\n                        t.set(r, s, t.get(r, s) / i);\n                      for (var u = r + 1; u < t.rows; u++) {\n                        var a = t.get(u, e) / t.get(r, e);\n                        t.set(u, e, 0);\n                        for (var f = e + 1; f < t.columns; f++)\n                          t.set(u, f, t.get(u, f) - t.get(r, f) * a);\n                      }\n                      r++, e++;\n                    }\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"reducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = this.echelonForm(),\n                      r = t.columns,\n                      e = t.rows,\n                      o = e - 1;\n                    o >= 0;\n\n                  )\n                    if (0 === t.maxRow(o)) o--;\n                    else {\n                      for (var n = 0, i = !1; n < e && !1 === i; )\n                        1 === t.get(o, n) ? (i = !0) : n++;\n                      for (var s = 0; s < o; s++)\n                        for (var u = t.get(s, n), a = n; a < r; a++) {\n                          var f = t.get(s, a) - u * t.get(o, a);\n                          t.set(s, a, f);\n                        }\n                      o--;\n                    }\n                  return t;\n                },\n              },\n              {\n                key: \"set\",\n                value: function () {\n                  throw new Error(\"set method is unimplemented\");\n                },\n              },\n              {\n                key: \"get\",\n                value: function () {\n                  throw new Error(\"get method is unimplemented\");\n                },\n              },\n              {\n                key: \"repeat\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== F(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.rows,\n                    e = void 0 === r ? 1 : r,\n                    o = t.columns,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isInteger(e) || e <= 0)\n                    throw new TypeError(\"rows must be a positive integer\");\n                  if (!Number.isInteger(n) || n <= 0)\n                    throw new TypeError(\"columns must be a positive integer\");\n                  for (\n                    var i = new Y(this.rows * e, this.columns * n), s = 0;\n                    s < e;\n                    s++\n                  )\n                    for (var u = 0; u < n; u++)\n                      i.setSubMatrix(this, this.rows * s, this.columns * u);\n                  return i;\n                },\n              },\n              {\n                key: \"fill\",\n                value: function (t) {\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"neg\",\n                value: function () {\n                  return this.mulS(-1);\n                },\n              },\n              {\n                key: \"getRow\",\n                value: function (t) {\n                  p(this, t);\n                  for (var r = [], e = 0; e < this.columns; e++)\n                    r.push(this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"getRowVector\",\n                value: function (t) {\n                  return Y.rowVector(this.getRow(t));\n                },\n              },\n              {\n                key: \"setRow\",\n                value: function (t, r) {\n                  p(this, t), (r = v(this, r));\n                  for (var e = 0; e < this.columns; e++) this.set(t, e, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapRows\",\n                value: function (t, r) {\n                  p(this, t), p(this, r);\n                  for (var e = 0; e < this.columns; e++) {\n                    var o = this.get(t, e);\n                    this.set(t, e, this.get(r, e)), this.set(r, e, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"getColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = [], e = 0; e < this.rows; e++)\n                    r.push(this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"getColumnVector\",\n                value: function (t) {\n                  return Y.columnVector(this.getColumn(t));\n                },\n              },\n              {\n                key: \"setColumn\",\n                value: function (t, r) {\n                  y(this, t), (r = m(this, r));\n                  for (var e = 0; e < this.rows; e++) this.set(e, t, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapColumns\",\n                value: function (t, r) {\n                  y(this, t), y(this, r);\n                  for (var e = 0; e < this.rows; e++) {\n                    var o = this.get(e, t);\n                    this.set(e, t, this.get(e, r)), this.set(e, r, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"addRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"subRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"divRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"addColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"subColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"divColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRow\",\n                value: function (t, r) {\n                  p(this, t);\n                  for (var e = 0; e < this.columns; e++)\n                    this.set(t, e, this.get(t, e) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumn\",\n                value: function (t, r) {\n                  y(this, t);\n                  for (var e = 0; e < this.rows; e++)\n                    this.set(e, t, this.get(e, t) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"max\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) > t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"maxIndex\",\n                value: function () {\n                  x(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) > t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"min\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) < t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"minIndex\",\n                value: function () {\n                  x(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) < t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRow\",\n                value: function (t) {\n                  if ((p(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) > r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRowIndex\",\n                value: function (t) {\n                  p(this, t), x(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) > r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minRow\",\n                value: function (t) {\n                  if ((p(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) < r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"minRowIndex\",\n                value: function (t) {\n                  p(this, t), x(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) < r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"maxColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) > r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"maxColumnIndex\",\n                value: function (t) {\n                  y(this, t), x(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) > r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) < r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"minColumnIndex\",\n                value: function (t) {\n                  y(this, t), x(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) < r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = [], e = 0;\n                    e < t;\n                    e++\n                  )\n                    r.push(this.get(e, e));\n                  return r;\n                },\n              },\n              {\n                key: \"norm\",\n                value: function () {\n                  var t =\n                      arguments.length > 0 && void 0 !== arguments[0]\n                        ? arguments[0]\n                        : \"frobenius\",\n                    r = 0;\n                  if (\"max\" === t) return this.max();\n                  if (\"frobenius\" === t) {\n                    for (var e = 0; e < this.rows; e++)\n                      for (var o = 0; o < this.columns; o++)\n                        r += this.get(e, o) * this.get(e, o);\n                    return Math.sqrt(r);\n                  }\n                  throw new RangeError(\"unknown norm type: \".concat(t));\n                },\n              },\n              {\n                key: \"cumulativeSum\",\n                value: function () {\n                  for (var t = 0, r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      (t += this.get(r, e)), this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"dot\",\n                value: function (r) {\n                  t.isMatrix(r) && (r = r.to1DArray());\n                  var e = this.to1DArray();\n                  if (e.length !== r.length)\n                    throw new RangeError(\"vectors do not have the same size\");\n                  for (var o = 0, n = 0; n < e.length; n++) o += e[n] * r[n];\n                  return o;\n                },\n              },\n              {\n                key: \"mmul\",\n                value: function (t) {\n                  t = Y.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.columns,\n                      n = new Y(r, o),\n                      i = new Float64Array(e),\n                      s = 0;\n                    s < o;\n                    s++\n                  ) {\n                    for (var u = 0; u < e; u++) i[u] = t.get(u, s);\n                    for (var a = 0; a < r; a++) {\n                      for (var f = 0, c = 0; c < e; c++)\n                        f += this.get(a, c) * i[c];\n                      n.set(a, s, f);\n                    }\n                  }\n                  return n;\n                },\n              },\n              {\n                key: \"strassen2x2\",\n                value: function (t) {\n                  t = Y.checkMatrix(t);\n                  var r = new Y(2, 2),\n                    e = this.get(0, 0),\n                    o = t.get(0, 0),\n                    n = this.get(0, 1),\n                    i = t.get(0, 1),\n                    s = this.get(1, 0),\n                    u = t.get(1, 0),\n                    a = this.get(1, 1),\n                    f = t.get(1, 1),\n                    c = (e + a) * (o + f),\n                    h = (s + a) * o,\n                    l = e * (i - f),\n                    p = a * (u - o),\n                    y = (e + n) * f,\n                    v = c + p - y + (n - a) * (u + f),\n                    m = l + y,\n                    g = h + p,\n                    w = c - h + l + (s - e) * (o + i);\n                  return (\n                    r.set(0, 0, v),\n                    r.set(0, 1, m),\n                    r.set(1, 0, g),\n                    r.set(1, 1, w),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"strassen3x3\",\n                value: function (t) {\n                  t = Y.checkMatrix(t);\n                  var r = new Y(3, 3),\n                    e = this.get(0, 0),\n                    o = this.get(0, 1),\n                    n = this.get(0, 2),\n                    i = this.get(1, 0),\n                    s = this.get(1, 1),\n                    u = this.get(1, 2),\n                    a = this.get(2, 0),\n                    f = this.get(2, 1),\n                    c = this.get(2, 2),\n                    h = t.get(0, 0),\n                    l = t.get(0, 1),\n                    p = t.get(0, 2),\n                    y = t.get(1, 0),\n                    v = t.get(1, 1),\n                    m = t.get(1, 2),\n                    g = t.get(2, 0),\n                    w = t.get(2, 1),\n                    b = t.get(2, 2),\n                    d = (e - i) * (-l + v),\n                    M = (-e + i + s) * (h - l + v),\n                    x = (i + s) * (-h + l),\n                    k = e * h,\n                    S = (-e + a + f) * (h - p + m),\n                    O = (-e + a) * (p - m),\n                    E = (a + f) * (-h + p),\n                    j = (-n + f + c) * (v + g - w),\n                    R = (n - c) * (v - w),\n                    P = n * g,\n                    _ = (f + c) * (-g + w),\n                    T = (-n + s + u) * (m + g - b),\n                    C = (n - u) * (m - b),\n                    N = (s + u) * (-g + b),\n                    D = k + P + o * y,\n                    I = (e + o + n - i - s - f - c) * v + M + x + k + j + P + _,\n                    V = k + S + E + (e + o + n - s - u - a - f) * m + P + T + N,\n                    q =\n                      d + s * (-h + l + y - v - m - g + b) + M + k + P + T + C,\n                    A = d + M + x + k + u * w,\n                    F = P + T + C + N + i * p,\n                    L =\n                      k + S + O + f * (-h + p + y - v - m - g + w) + j + R + P,\n                    B = j + R + P + _ + a * l,\n                    z = k + S + O + E + c * b;\n                  return (\n                    r.set(0, 0, D),\n                    r.set(0, 1, I),\n                    r.set(0, 2, V),\n                    r.set(1, 0, q),\n                    r.set(1, 1, A),\n                    r.set(1, 2, F),\n                    r.set(2, 0, L),\n                    r.set(2, 1, B),\n                    r.set(2, 2, z),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"mmulStrassen\",\n                value: function (r) {\n                  r = Y.checkMatrix(r);\n                  var e = this.clone(),\n                    o = e.rows,\n                    n = e.columns,\n                    i = r.rows,\n                    s = r.columns;\n                  function u(r, e, o) {\n                    var n = r.rows,\n                      i = r.columns;\n                    if (n === e && i === o) return r;\n                    var s = t.zeros(e, o);\n                    return (s = s.setSubMatrix(r, 0, 0));\n                  }\n                  n !== i &&\n                    console.warn(\n                      \"Multiplying \"\n                        .concat(o, \" x \")\n                        .concat(n, \" and \")\n                        .concat(i, \" x \")\n                        .concat(s, \" matrix: dimensions do not match.\"),\n                    );\n                  var a = Math.max(o, i),\n                    f = Math.max(n, s);\n                  return (function r(e, o, n, i) {\n                    if (n <= 512 || i <= 512) return e.mmul(o);\n                    n % 2 == 1 && i % 2 == 1\n                      ? ((e = u(e, n + 1, i + 1)), (o = u(o, n + 1, i + 1)))\n                      : n % 2 == 1\n                      ? ((e = u(e, n + 1, i)), (o = u(o, n + 1, i)))\n                      : i % 2 == 1 &&\n                        ((e = u(e, n, i + 1)), (o = u(o, n, i + 1)));\n                    var s = parseInt(e.rows / 2, 10),\n                      a = parseInt(e.columns / 2, 10),\n                      f = e.subMatrix(0, s - 1, 0, a - 1),\n                      c = o.subMatrix(0, s - 1, 0, a - 1),\n                      h = e.subMatrix(0, s - 1, a, e.columns - 1),\n                      l = o.subMatrix(0, s - 1, a, o.columns - 1),\n                      p = e.subMatrix(s, e.rows - 1, 0, a - 1),\n                      y = o.subMatrix(s, o.rows - 1, 0, a - 1),\n                      v = e.subMatrix(s, e.rows - 1, a, e.columns - 1),\n                      m = o.subMatrix(s, o.rows - 1, a, o.columns - 1),\n                      g = r(t.add(f, v), t.add(c, m), s, a),\n                      w = r(t.add(p, v), c, s, a),\n                      b = r(f, t.sub(l, m), s, a),\n                      d = r(v, t.sub(y, c), s, a),\n                      M = r(t.add(f, h), m, s, a),\n                      x = r(t.sub(p, f), t.add(c, l), s, a),\n                      k = r(t.sub(h, v), t.add(y, m), s, a),\n                      S = t.add(g, d);\n                    S.sub(M), S.add(k);\n                    var O = t.add(b, M),\n                      E = t.add(w, d),\n                      j = t.sub(g, w);\n                    j.add(b), j.add(x);\n                    var R = t.zeros(2 * S.rows, 2 * S.columns);\n                    return (R = (R = (R = (R = R.setSubMatrix(\n                      S,\n                      0,\n                      0,\n                    )).setSubMatrix(O, S.rows, 0)).setSubMatrix(\n                      E,\n                      0,\n                      S.columns,\n                    )).setSubMatrix(j, S.rows, S.columns)).subMatrix(\n                      0,\n                      n - 1,\n                      0,\n                      i - 1,\n                    );\n                  })((e = u(e, a, f)), (r = u(r, a, f)), a, f);\n                },\n              },\n              {\n                key: \"scaleRows\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== F(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new Y(this.rows, this.columns), s = 0;\n                    s < this.rows;\n                    s++\n                  ) {\n                    var a = this.getRow(s);\n                    a.length > 0 && u(a, { min: e, max: n, output: a }),\n                      i.setRow(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"scaleColumns\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== F(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new Y(this.rows, this.columns), s = 0;\n                    s < this.columns;\n                    s++\n                  ) {\n                    var a = this.getColumn(s);\n                    a.length && u(a, { min: e, max: n, output: a }),\n                      i.setColumn(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"flipRows\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.columns / 2), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(r, e),\n                        n = this.get(r, this.columns - 1 - e);\n                      this.set(r, e, n), this.set(r, this.columns - 1 - e, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"flipColumns\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.rows / 2), r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(e, r),\n                        n = this.get(this.rows - 1 - e, r);\n                      this.set(e, r, n), this.set(this.rows - 1 - e, r, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"kroneckerProduct\",\n                value: function (t) {\n                  t = Y.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.rows,\n                      n = t.columns,\n                      i = new Y(r * o, e * n),\n                      s = 0;\n                    s < r;\n                    s++\n                  )\n                    for (var u = 0; u < e; u++)\n                      for (var a = 0; a < o; a++)\n                        for (var f = 0; f < n; f++)\n                          i.set(\n                            o * s + a,\n                            n * u + f,\n                            this.get(s, u) * t.get(a, f),\n                          );\n                  return i;\n                },\n              },\n              {\n                key: \"kroneckerSum\",\n                value: function (t) {\n                  if (\n                    ((t = Y.checkMatrix(t)), !this.isSquare() || !t.isSquare())\n                  )\n                    throw new Error(\"Kronecker Sum needs two Square Matrices\");\n                  var r = this.rows,\n                    e = t.rows,\n                    o = this.kroneckerProduct(Y.eye(e, e)),\n                    n = Y.eye(r, r).kroneckerProduct(t);\n                  return o.add(n);\n                },\n              },\n              {\n                key: \"transpose\",\n                value: function () {\n                  for (\n                    var t = new Y(this.columns, this.rows), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(e, r, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sortRows\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : W,\n                      r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    this.setRow(r, this.getRow(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"sortColumns\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : W,\n                      r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    this.setColumn(r, this.getColumn(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"subMatrix\",\n                value: function (t, r, e, o) {\n                  b(this, t, r, e, o);\n                  for (var n = new Y(r - t + 1, o - e + 1), i = t; i <= r; i++)\n                    for (var s = e; s <= o; s++)\n                      n.set(i - t, s - e, this.get(i, s));\n                  return n;\n                },\n              },\n              {\n                key: \"subMatrixRow\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.columns - 1),\n                    r > e ||\n                      r < 0 ||\n                      r >= this.columns ||\n                      e < 0 ||\n                      e >= this.columns)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new Y(t.length, e - r + 1), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.rows)\n                        throw new RangeError(\n                          \"Row index out of range: \".concat(t[n]),\n                        );\n                      o.set(n, i - r, this.get(t[n], i));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"subMatrixColumn\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.rows - 1),\n                    r > e || r < 0 || r >= this.rows || e < 0 || e >= this.rows)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new Y(e - r + 1, t.length), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.columns)\n                        throw new RangeError(\n                          \"Column index out of range: \".concat(t[n]),\n                        );\n                      o.set(i - r, n, this.get(i, t[n]));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"setSubMatrix\",\n                value: function (t, r, e) {\n                  if ((t = Y.checkMatrix(t)).isEmpty()) return this;\n                  b(this, r, r + t.rows - 1, e, e + t.columns - 1);\n                  for (var o = 0; o < t.rows; o++)\n                    for (var n = 0; n < t.columns; n++)\n                      this.set(r + o, e + n, t.get(o, n));\n                  return this;\n                },\n              },\n              {\n                key: \"selection\",\n                value: function (t, r) {\n                  g(this, t), w(this, r);\n                  for (\n                    var e = new Y(t.length, r.length), o = 0;\n                    o < t.length;\n                    o++\n                  )\n                    for (var n = t[o], i = 0; i < r.length; i++) {\n                      var s = r[i];\n                      e.set(o, i, this.get(n, s));\n                    }\n                  return e;\n                },\n              },\n              {\n                key: \"trace\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = 0, e = 0;\n                    e < t;\n                    e++\n                  )\n                    r += this.get(e, e);\n                  return r;\n                },\n              },\n              {\n                key: \"clone\",\n                value: function () {\n                  for (\n                    var t = new Y(this.rows, this.columns), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(r, e, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sum\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = d(t.rows), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = d(t.columns), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 0, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r += t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"product\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = d(t.rows, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = d(t.columns, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 1, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r *= t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"mean\",\n                value: function (t) {\n                  var r = this.sum(t);\n                  switch (t) {\n                    case \"row\":\n                      for (var e = 0; e < this.rows; e++) r[e] /= this.columns;\n                      return r;\n                    case \"column\":\n                      for (var o = 0; o < this.columns; o++) r[o] /= this.rows;\n                      return r;\n                    case void 0:\n                      return r / this.size;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"variance\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === F(t) && ((r = t), (t = void 0)),\n                    \"object\" !== F(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.unbiased,\n                    i = void 0 === o || o,\n                    s = e.mean,\n                    u = void 0 === s ? this.mean(t) : s;\n                  if (\"boolean\" != typeof i)\n                    throw new TypeError(\"unbiased must be a boolean\");\n                  switch (t) {\n                    case \"row\":\n                      if (!n(u)) throw new TypeError(\"mean must be an array\");\n                      return k(this, i, u);\n                    case \"column\":\n                      if (!n(u)) throw new TypeError(\"mean must be an array\");\n                      return S(this, i, u);\n                    case void 0:\n                      if (\"number\" != typeof u)\n                        throw new TypeError(\"mean must be a number\");\n                      return O(this, i, u);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"standardDeviation\",\n                value: function (t, r) {\n                  \"object\" === F(t) && ((r = t), (t = void 0));\n                  var e = this.variance(t, r);\n                  if (void 0 === t) return Math.sqrt(e);\n                  for (var o = 0; o < e.length; o++) e[o] = Math.sqrt(e[o]);\n                  return e;\n                },\n              },\n              {\n                key: \"center\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === F(t) && ((r = t), (t = void 0)),\n                    \"object\" !== F(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.center,\n                    i = void 0 === o ? this.mean(t) : o;\n                  switch (t) {\n                    case \"row\":\n                      if (!n(i)) throw new TypeError(\"center must be an array\");\n                      return E(this, i), this;\n                    case \"column\":\n                      if (!n(i)) throw new TypeError(\"center must be an array\");\n                      return j(this, i), this;\n                    case void 0:\n                      if (\"number\" != typeof i)\n                        throw new TypeError(\"center must be a number\");\n                      return R(this, i), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"scale\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === F(t) && ((r = t), (t = void 0)),\n                    \"object\" !== F(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r.scale;\n                  switch (t) {\n                    case \"row\":\n                      if (void 0 === e) e = P(this);\n                      else if (!n(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return _(this, e), this;\n                    case \"column\":\n                      if (void 0 === e) e = T(this);\n                      else if (!n(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return C(this, e), this;\n                    case void 0:\n                      if (void 0 === e) e = N(this);\n                      else if (\"number\" != typeof e)\n                        throw new TypeError(\"scale must be a number\");\n                      return D(this, e), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"toString\",\n                value: function (t) {\n                  return c(this, t);\n                },\n              },\n            ],\n            [\n              {\n                key: \"from1DArray\",\n                value: function (t, r, e) {\n                  if (t * r !== e.length)\n                    throw new RangeError(\n                      \"data length does not match given dimensions\",\n                    );\n                  for (var o = new Y(t, r), n = 0; n < t; n++)\n                    for (var i = 0; i < r; i++) o.set(n, i, e[n * r + i]);\n                  return o;\n                },\n              },\n              {\n                key: \"rowVector\",\n                value: function (t) {\n                  for (var r = new Y(1, t.length), e = 0; e < t.length; e++)\n                    r.set(0, e, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"columnVector\",\n                value: function (t) {\n                  for (var r = new Y(t.length, 1), e = 0; e < t.length; e++)\n                    r.set(e, 0, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"zeros\",\n                value: function (t, r) {\n                  return new Y(t, r);\n                },\n              },\n              {\n                key: \"ones\",\n                value: function (t, r) {\n                  return new Y(t, r).fill(1);\n                },\n              },\n              {\n                key: \"rand\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== F(e))\n                    throw new TypeError(\"options must be an object\");\n                  for (\n                    var o = e.random,\n                      n = void 0 === o ? Math.random : o,\n                      i = new Y(t, r),\n                      s = 0;\n                    s < t;\n                    s++\n                  )\n                    for (var u = 0; u < r; u++) i.set(s, u, n());\n                  return i;\n                },\n              },\n              {\n                key: \"randInt\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== F(e))\n                    throw new TypeError(\"options must be an object\");\n                  var o = e.min,\n                    n = void 0 === o ? 0 : o,\n                    i = e.max,\n                    s = void 0 === i ? 1e3 : i,\n                    u = e.random,\n                    a = void 0 === u ? Math.random : u;\n                  if (!Number.isInteger(n))\n                    throw new TypeError(\"min must be an integer\");\n                  if (!Number.isInteger(s))\n                    throw new TypeError(\"max must be an integer\");\n                  if (n >= s)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (var f = s - n, c = new Y(t, r), h = 0; h < t; h++)\n                    for (var l = 0; l < r; l++) {\n                      var p = n + Math.round(a() * f);\n                      c.set(h, l, p);\n                    }\n                  return c;\n                },\n              },\n              {\n                key: \"eye\",\n                value: function (t, r, e) {\n                  void 0 === r && (r = t), void 0 === e && (e = 1);\n                  for (\n                    var o = Math.min(t, r), n = this.zeros(t, r), i = 0;\n                    i < o;\n                    i++\n                  )\n                    n.set(i, i, e);\n                  return n;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function (t, r, e) {\n                  var o = t.length;\n                  void 0 === r && (r = o), void 0 === e && (e = r);\n                  for (\n                    var n = Math.min(o, r, e), i = this.zeros(r, e), s = 0;\n                    s < n;\n                    s++\n                  )\n                    i.set(s, s, t[s]);\n                  return i;\n                },\n              },\n              {\n                key: \"min\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new Y(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.min(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"max\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new this(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.max(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"checkMatrix\",\n                value: function (r) {\n                  return t.isMatrix(r) ? r : new Y(r);\n                },\n              },\n              {\n                key: \"isMatrix\",\n                value: function (t) {\n                  return null != t && \"Matrix\" === t.klass;\n                },\n              },\n            ],\n          ),\n          t\n        );\n      })();\n      function W(t, r) {\n        return t - r;\n      }\n      (U.prototype.klass = \"Matrix\"),\n        \"undefined\" != typeof Symbol &&\n          (U.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = function () {\n            return c(this);\n          }),\n        (U.random = U.rand),\n        (U.randomInt = U.randInt),\n        (U.diagonal = U.diag),\n        (U.prototype.diagonal = U.prototype.diag),\n        (U.identity = U.eye),\n        (U.prototype.negate = U.prototype.neg),\n        (U.prototype.tensorProduct = U.prototype.kroneckerProduct);\n      var Q,\n        J,\n        Y = (function (t) {\n          !(function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Super expression must either be null or a function\",\n              );\n            (t.prototype = Object.create(r && r.prototype, {\n              constructor: { value: t, writable: !0, configurable: !0 },\n            })),\n              Object.defineProperty(t, \"prototype\", { writable: !1 }),\n              r && I(t, r);\n          })(e, t);\n          var r = V(e);\n          function e(t, o) {\n            var i;\n            if ((L(this, e), (i = r.call(this)), e.isMatrix(t)))\n              return q(i, t.clone());\n            if (Number.isInteger(t) && t >= 0) {\n              if (((i.data = []), !(Number.isInteger(o) && o >= 0)))\n                throw new TypeError(\"nColumns must be a positive integer\");\n              for (var s = 0; s < t; s++) i.data.push(new Float64Array(o));\n            } else {\n              if (!n(t))\n                throw new TypeError(\n                  \"First argument must be a positive number or an array\",\n                );\n              var u = t;\n              if (\"number\" != typeof (o = (t = u.length) ? u[0].length : 0))\n                throw new TypeError(\n                  \"Data must be a 2D array with at least one element\",\n                );\n              i.data = [];\n              for (var a = 0; a < t; a++) {\n                if (u[a].length !== o)\n                  throw new RangeError(\"Inconsistent array dimensions\");\n                i.data.push(Float64Array.from(u[a]));\n              }\n            }\n            return (i.rows = t), (i.columns = o), i;\n          }\n          return (\n            z(e, [\n              {\n                key: \"set\",\n                value: function (t, r, e) {\n                  return (this.data[t][r] = e), this;\n                },\n              },\n              {\n                key: \"get\",\n                value: function (t, r) {\n                  return this.data[t][r];\n                },\n              },\n              {\n                key: \"removeRow\",\n                value: function (t) {\n                  return (\n                    p(this, t), this.data.splice(t, 1), (this.rows -= 1), this\n                  );\n                },\n              },\n              {\n                key: \"addRow\",\n                value: function (t, r) {\n                  return (\n                    void 0 === r && ((r = t), (t = this.rows)),\n                    p(this, t, !0),\n                    (r = Float64Array.from(v(this, r))),\n                    this.data.splice(t, 0, r),\n                    (this.rows += 1),\n                    this\n                  );\n                },\n              },\n              {\n                key: \"removeColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = 0; r < this.rows; r++) {\n                    for (\n                      var e = new Float64Array(this.columns - 1), o = 0;\n                      o < t;\n                      o++\n                    )\n                      e[o] = this.data[r][o];\n                    for (var n = t + 1; n < this.columns; n++)\n                      e[n - 1] = this.data[r][n];\n                    this.data[r] = e;\n                  }\n                  return (this.columns -= 1), this;\n                },\n              },\n              {\n                key: \"addColumn\",\n                value: function (t, r) {\n                  void 0 === r && ((r = t), (t = this.columns)),\n                    y(this, t, !0),\n                    (r = m(this, r));\n                  for (var e = 0; e < this.rows; e++) {\n                    for (\n                      var o = new Float64Array(this.columns + 1), n = 0;\n                      n < t;\n                      n++\n                    )\n                      o[n] = this.data[e][n];\n                    for (o[n++] = r[e]; n < this.columns + 1; n++)\n                      o[n] = this.data[e][n - 1];\n                    this.data[e] = o;\n                  }\n                  return (this.columns += 1), this;\n                },\n              },\n            ]),\n            e\n          );\n        })(U);\n      function H(t) {\n        return (H =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function K(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function X(t, r) {\n        return (X =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function G(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = $(t);\n          if (r) {\n            var n = $(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Z(this, e);\n        };\n      }\n      function Z(t, r) {\n        if (r && (\"object\" === H(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function $(t) {\n        return ($ = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      (J = Y),\n        ((Q = U).prototype.add = function (t) {\n          return \"number\" == typeof t ? this.addS(t) : this.addM(t);\n        }),\n        (Q.prototype.addS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t);\n          return this;\n        }),\n        (Q.prototype.addM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t.get(r, e));\n          return this;\n        }),\n        (Q.add = function (t, r) {\n          return new J(t).add(r);\n        }),\n        (Q.prototype.sub = function (t) {\n          return \"number\" == typeof t ? this.subS(t) : this.subM(t);\n        }),\n        (Q.prototype.subS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t);\n          return this;\n        }),\n        (Q.prototype.subM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t.get(r, e));\n          return this;\n        }),\n        (Q.sub = function (t, r) {\n          return new J(t).sub(r);\n        }),\n        (Q.prototype.subtract = Q.prototype.sub),\n        (Q.prototype.subtractS = Q.prototype.subS),\n        (Q.prototype.subtractM = Q.prototype.subM),\n        (Q.subtract = Q.sub),\n        (Q.prototype.mul = function (t) {\n          return \"number\" == typeof t ? this.mulS(t) : this.mulM(t);\n        }),\n        (Q.prototype.mulS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t);\n          return this;\n        }),\n        (Q.prototype.mulM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t.get(r, e));\n          return this;\n        }),\n        (Q.mul = function (t, r) {\n          return new J(t).mul(r);\n        }),\n        (Q.prototype.multiply = Q.prototype.mul),\n        (Q.prototype.multiplyS = Q.prototype.mulS),\n        (Q.prototype.multiplyM = Q.prototype.mulM),\n        (Q.multiply = Q.mul),\n        (Q.prototype.div = function (t) {\n          return \"number\" == typeof t ? this.divS(t) : this.divM(t);\n        }),\n        (Q.prototype.divS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t);\n          return this;\n        }),\n        (Q.prototype.divM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t.get(r, e));\n          return this;\n        }),\n        (Q.div = function (t, r) {\n          return new J(t).div(r);\n        }),\n        (Q.prototype.divide = Q.prototype.div),\n        (Q.prototype.divideS = Q.prototype.divS),\n        (Q.prototype.divideM = Q.prototype.divM),\n        (Q.divide = Q.div),\n        (Q.prototype.mod = function (t) {\n          return \"number\" == typeof t ? this.modS(t) : this.modM(t);\n        }),\n        (Q.prototype.modS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t);\n          return this;\n        }),\n        (Q.prototype.modM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t.get(r, e));\n          return this;\n        }),\n        (Q.mod = function (t, r) {\n          return new J(t).mod(r);\n        }),\n        (Q.prototype.modulus = Q.prototype.mod),\n        (Q.prototype.modulusS = Q.prototype.modS),\n        (Q.prototype.modulusM = Q.prototype.modM),\n        (Q.modulus = Q.mod),\n        (Q.prototype.and = function (t) {\n          return \"number\" == typeof t ? this.andS(t) : this.andM(t);\n        }),\n        (Q.prototype.andS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t);\n          return this;\n        }),\n        (Q.prototype.andM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t.get(r, e));\n          return this;\n        }),\n        (Q.and = function (t, r) {\n          return new J(t).and(r);\n        }),\n        (Q.prototype.or = function (t) {\n          return \"number\" == typeof t ? this.orS(t) : this.orM(t);\n        }),\n        (Q.prototype.orS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t);\n          return this;\n        }),\n        (Q.prototype.orM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t.get(r, e));\n          return this;\n        }),\n        (Q.or = function (t, r) {\n          return new J(t).or(r);\n        }),\n        (Q.prototype.xor = function (t) {\n          return \"number\" == typeof t ? this.xorS(t) : this.xorM(t);\n        }),\n        (Q.prototype.xorS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t);\n          return this;\n        }),\n        (Q.prototype.xorM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t.get(r, e));\n          return this;\n        }),\n        (Q.xor = function (t, r) {\n          return new J(t).xor(r);\n        }),\n        (Q.prototype.leftShift = function (t) {\n          return \"number\" == typeof t ? this.leftShiftS(t) : this.leftShiftM(t);\n        }),\n        (Q.prototype.leftShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t);\n          return this;\n        }),\n        (Q.prototype.leftShiftM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t.get(r, e));\n          return this;\n        }),\n        (Q.leftShift = function (t, r) {\n          return new J(t).leftShift(r);\n        }),\n        (Q.prototype.signPropagatingRightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.signPropagatingRightShiftS(t)\n            : this.signPropagatingRightShiftM(t);\n        }),\n        (Q.prototype.signPropagatingRightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t);\n          return this;\n        }),\n        (Q.prototype.signPropagatingRightShiftM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t.get(r, e));\n          return this;\n        }),\n        (Q.signPropagatingRightShift = function (t, r) {\n          return new J(t).signPropagatingRightShift(r);\n        }),\n        (Q.prototype.rightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.rightShiftS(t)\n            : this.rightShiftM(t);\n        }),\n        (Q.prototype.rightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t);\n          return this;\n        }),\n        (Q.prototype.rightShiftM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t.get(r, e));\n          return this;\n        }),\n        (Q.rightShift = function (t, r) {\n          return new J(t).rightShift(r);\n        }),\n        (Q.prototype.zeroFillRightShift = Q.prototype.rightShift),\n        (Q.prototype.zeroFillRightShiftS = Q.prototype.rightShiftS),\n        (Q.prototype.zeroFillRightShiftM = Q.prototype.rightShiftM),\n        (Q.zeroFillRightShift = Q.rightShift),\n        (Q.prototype.not = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, ~this.get(t, r));\n          return this;\n        }),\n        (Q.not = function (t) {\n          return new J(t).not();\n        }),\n        (Q.prototype.abs = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.abs(this.get(t, r)));\n          return this;\n        }),\n        (Q.abs = function (t) {\n          return new J(t).abs();\n        }),\n        (Q.prototype.acos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acos(this.get(t, r)));\n          return this;\n        }),\n        (Q.acos = function (t) {\n          return new J(t).acos();\n        }),\n        (Q.prototype.acosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acosh(this.get(t, r)));\n          return this;\n        }),\n        (Q.acosh = function (t) {\n          return new J(t).acosh();\n        }),\n        (Q.prototype.asin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asin(this.get(t, r)));\n          return this;\n        }),\n        (Q.asin = function (t) {\n          return new J(t).asin();\n        }),\n        (Q.prototype.asinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asinh(this.get(t, r)));\n          return this;\n        }),\n        (Q.asinh = function (t) {\n          return new J(t).asinh();\n        }),\n        (Q.prototype.atan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atan(this.get(t, r)));\n          return this;\n        }),\n        (Q.atan = function (t) {\n          return new J(t).atan();\n        }),\n        (Q.prototype.atanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atanh(this.get(t, r)));\n          return this;\n        }),\n        (Q.atanh = function (t) {\n          return new J(t).atanh();\n        }),\n        (Q.prototype.cbrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cbrt(this.get(t, r)));\n          return this;\n        }),\n        (Q.cbrt = function (t) {\n          return new J(t).cbrt();\n        }),\n        (Q.prototype.ceil = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.ceil(this.get(t, r)));\n          return this;\n        }),\n        (Q.ceil = function (t) {\n          return new J(t).ceil();\n        }),\n        (Q.prototype.clz32 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.clz32(this.get(t, r)));\n          return this;\n        }),\n        (Q.clz32 = function (t) {\n          return new J(t).clz32();\n        }),\n        (Q.prototype.cos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cos(this.get(t, r)));\n          return this;\n        }),\n        (Q.cos = function (t) {\n          return new J(t).cos();\n        }),\n        (Q.prototype.cosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cosh(this.get(t, r)));\n          return this;\n        }),\n        (Q.cosh = function (t) {\n          return new J(t).cosh();\n        }),\n        (Q.prototype.exp = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.exp(this.get(t, r)));\n          return this;\n        }),\n        (Q.exp = function (t) {\n          return new J(t).exp();\n        }),\n        (Q.prototype.expm1 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.expm1(this.get(t, r)));\n          return this;\n        }),\n        (Q.expm1 = function (t) {\n          return new J(t).expm1();\n        }),\n        (Q.prototype.floor = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.floor(this.get(t, r)));\n          return this;\n        }),\n        (Q.floor = function (t) {\n          return new J(t).floor();\n        }),\n        (Q.prototype.fround = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.fround(this.get(t, r)));\n          return this;\n        }),\n        (Q.fround = function (t) {\n          return new J(t).fround();\n        }),\n        (Q.prototype.log = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log(this.get(t, r)));\n          return this;\n        }),\n        (Q.log = function (t) {\n          return new J(t).log();\n        }),\n        (Q.prototype.log1p = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log1p(this.get(t, r)));\n          return this;\n        }),\n        (Q.log1p = function (t) {\n          return new J(t).log1p();\n        }),\n        (Q.prototype.log10 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log10(this.get(t, r)));\n          return this;\n        }),\n        (Q.log10 = function (t) {\n          return new J(t).log10();\n        }),\n        (Q.prototype.log2 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log2(this.get(t, r)));\n          return this;\n        }),\n        (Q.log2 = function (t) {\n          return new J(t).log2();\n        }),\n        (Q.prototype.round = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.round(this.get(t, r)));\n          return this;\n        }),\n        (Q.round = function (t) {\n          return new J(t).round();\n        }),\n        (Q.prototype.sign = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sign(this.get(t, r)));\n          return this;\n        }),\n        (Q.sign = function (t) {\n          return new J(t).sign();\n        }),\n        (Q.prototype.sin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sin(this.get(t, r)));\n          return this;\n        }),\n        (Q.sin = function (t) {\n          return new J(t).sin();\n        }),\n        (Q.prototype.sinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sinh(this.get(t, r)));\n          return this;\n        }),\n        (Q.sinh = function (t) {\n          return new J(t).sinh();\n        }),\n        (Q.prototype.sqrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sqrt(this.get(t, r)));\n          return this;\n        }),\n        (Q.sqrt = function (t) {\n          return new J(t).sqrt();\n        }),\n        (Q.prototype.tan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tan(this.get(t, r)));\n          return this;\n        }),\n        (Q.tan = function (t) {\n          return new J(t).tan();\n        }),\n        (Q.prototype.tanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tanh(this.get(t, r)));\n          return this;\n        }),\n        (Q.tanh = function (t) {\n          return new J(t).tanh();\n        }),\n        (Q.prototype.trunc = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.trunc(this.get(t, r)));\n          return this;\n        }),\n        (Q.trunc = function (t) {\n          return new J(t).trunc();\n        }),\n        (Q.pow = function (t, r) {\n          return new J(t).pow(r);\n        }),\n        (Q.prototype.pow = function (t) {\n          return \"number\" == typeof t ? this.powS(t) : this.powM(t);\n        }),\n        (Q.prototype.powS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t));\n          return this;\n        }),\n        (Q.prototype.powM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t.get(r, e)));\n          return this;\n        });\n      var tt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && X(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = G(i);\n        function i(t, r, e) {\n          var o;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((o = n.call(this)).matrix = t),\n            (o.rows = r),\n            (o.columns = e),\n            o\n          );\n        }\n        return (\n          (r = i),\n          e && K(r.prototype, e),\n          o && K(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          r\n        );\n      })(U);\n      function rt(t) {\n        return (rt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function et(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ot(t, r) {\n        return (ot =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function nt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = st(t);\n          if (r) {\n            var n = st(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return it(this, e);\n        };\n      }\n      function it(t, r) {\n        if (r && (\"object\" === rt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function st(t) {\n        return (st = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var ut = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && ot(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = nt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            y(t, r),\n            ((e = n.call(this, t, t.rows, 1)).column = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.column, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t) {\n                return this.matrix.get(t, this.column);\n              },\n            },\n          ]) && et(r.prototype, e),\n          o && et(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function at(t) {\n        return (at =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ft(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ct(t, r) {\n        return (ct =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function ht(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = pt(t);\n          if (r) {\n            var n = pt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return lt(this, e);\n        };\n      }\n      function lt(t, r) {\n        if (r && (\"object\" === at(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function pt(t) {\n        return (pt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var yt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && ct(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = ht(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            w(t, r),\n            ((e = n.call(this, t, t.rows, r.length)).columnIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columnIndices[r], e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columnIndices[r]);\n              },\n            },\n          ]) && ft(r.prototype, e),\n          o && ft(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function vt(t) {\n        return (vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function mt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function gt(t, r) {\n        return (gt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function wt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = dt(t);\n          if (r) {\n            var n = dt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return bt(this, e);\n        };\n      }\n      function bt(t, r) {\n        if (r && (\"object\" === vt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function dt(t) {\n        return (dt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Mt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && gt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = wt(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columns - r - 1, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columns - r - 1);\n              },\n            },\n          ]) && mt(r.prototype, e),\n          o && mt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function xt(t) {\n        return (xt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function kt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function St(t, r) {\n        return (St =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ot(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = jt(t);\n          if (r) {\n            var n = jt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Et(this, e);\n        };\n      }\n      function Et(t, r) {\n        if (r && (\"object\" === xt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function jt(t) {\n        return (jt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Rt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && St(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ot(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rows - t - 1, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rows - t - 1, r);\n              },\n            },\n          ]) && kt(r.prototype, e),\n          o && kt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Pt(t) {\n        return (Pt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function _t(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Tt(t, r) {\n        return (Tt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ct(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Dt(t);\n          if (r) {\n            var n = Dt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Nt(this, e);\n        };\n      }\n      function Nt(t, r) {\n        if (r && (\"object\" === Pt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function Dt(t) {\n        return (Dt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var It = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && Tt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ct(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            p(t, r),\n            ((e = n.call(this, t, 1, t.columns)).row = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.row, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.row, r);\n              },\n            },\n          ]) && _t(r.prototype, e),\n          o && _t(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Vt(t) {\n        return (Vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function At(t, r) {\n        return (At =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ft(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Bt(t);\n          if (r) {\n            var n = Bt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Lt(this, e);\n        };\n      }\n      function Lt(t, r) {\n        if (r && (\"object\" === Vt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function Bt(t) {\n        return (Bt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var zt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && At(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ft(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            g(t, r),\n            ((e = n.call(this, t, r.length, t.columns)).rowIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rowIndices[t], r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rowIndices[t], r);\n              },\n            },\n          ]) && qt(r.prototype, e),\n          o && qt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Ut(t) {\n        return (Ut =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Wt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Qt(t, r) {\n        return (Qt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Jt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Ht(t);\n          if (r) {\n            var n = Ht(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Yt(this, e);\n        };\n      }\n      function Yt(t, r) {\n        if (r && (\"object\" === Ut(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function Ht(t) {\n        return (Ht = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Kt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && Qt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Jt(i);\n        function i(t, r, e) {\n          var o;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            g(t, r),\n            w(t, e),\n            ((o = n.call(this, t, r.length, e.length)).rowIndices = r),\n            (o.columnIndices = e),\n            o\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.rowIndices[t], this.columnIndices[r], e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(\n                  this.rowIndices[t],\n                  this.columnIndices[r],\n                );\n              },\n            },\n          ]) && Wt(r.prototype, e),\n          o && Wt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Xt(t) {\n        return (Xt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Gt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Zt(t, r) {\n        return (Zt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function $t(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = rr(t);\n          if (r) {\n            var n = rr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return tr(this, e);\n        };\n      }\n      function tr(t, r) {\n        if (r && (\"object\" === Xt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function rr(t) {\n        return (rr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var er = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && Zt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = $t(i);\n        function i(t, r, e, o, s) {\n          var u;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            b(t, r, e, o, s),\n            ((u = n.call(this, t, e - r + 1, s - o + 1)).startRow = r),\n            (u.startColumn = o),\n            u\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.startRow + t, this.startColumn + r, e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.startRow + t, this.startColumn + r);\n              },\n            },\n          ]) && Gt(r.prototype, e),\n          o && Gt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function or(t) {\n        return (or =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function nr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ir(t, r) {\n        return (ir =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function sr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = ar(t);\n          if (r) {\n            var n = ar(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return ur(this, e);\n        };\n      }\n      function ur(t, r) {\n        if (r && (\"object\" === or(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function ar(t) {\n        return (ar = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var fr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && ir(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = sr(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.columns, t.rows)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(r, t, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(r, t);\n              },\n            },\n          ]) && nr(r.prototype, e),\n          o && nr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function cr(t) {\n        return (cr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function hr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function lr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function pr(t, r) {\n        return (pr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function yr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = mr(t);\n          if (r) {\n            var n = mr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return vr(this, e);\n        };\n      }\n      function vr(t, r) {\n        if (r && (\"object\" === cr(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function mr(t) {\n        return (mr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var gr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && pr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = yr(i);\n        function i(t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          hr(this, i);\n          var o = e.rows,\n            s = void 0 === o ? 1 : o;\n          if (t.length % s != 0)\n            throw new Error(\n              \"the data length is not divisible by the number of rows\",\n            );\n          return (\n            ((r = n.call(this)).rows = s),\n            (r.columns = t.length / s),\n            (r.data = t),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                var o = this._calculateIndex(t, r);\n                return (this.data[o] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                var e = this._calculateIndex(t, r);\n                return this.data[e];\n              },\n            },\n            {\n              key: \"_calculateIndex\",\n              value: function (t, r) {\n                return t * this.columns + r;\n              },\n            },\n          ]) && lr(r.prototype, e),\n          o && lr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(U);\n      function wr(t) {\n        return (wr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function br(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function dr(t, r) {\n        return (dr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Mr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = kr(t);\n          if (r) {\n            var n = kr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return xr(this, e);\n        };\n      }\n      function xr(t, r) {\n        if (r && (\"object\" === wr(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function kr(t) {\n        return (kr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Sr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && dr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Mr(i);\n        function i(t) {\n          var r;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((r = n.call(this)).data = t),\n            (r.rows = t.length),\n            (r.columns = t[0].length),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (this.data[t][r] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.data[t][r];\n              },\n            },\n          ]) && br(r.prototype, e),\n          o && br(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(U);\n      function Or(t, r) {\n        if (n(t)) return t[0] && n(t[0]) ? new Sr(t) : new gr(t, r);\n        throw new Error(\"the argument is not an array\");\n      }\n      function Er(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var jr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s,\n            u,\n            a,\n            f,\n            c,\n            h = (r = Sr.checkMatrix(r)).clone(),\n            l = h.rows,\n            p = h.columns,\n            y = new Float64Array(l),\n            v = 1;\n          for (e = 0; e < l; e++) y[e] = e;\n          for (f = new Float64Array(l), o = 0; o < p; o++) {\n            for (e = 0; e < l; e++) f[e] = h.get(e, o);\n            for (e = 0; e < l; e++) {\n              for (c = Math.min(e, o), s = 0, n = 0; n < c; n++)\n                s += h.get(e, n) * f[n];\n              (f[e] -= s), h.set(e, o, f[e]);\n            }\n            for (i = o, e = o + 1; e < l; e++)\n              Math.abs(f[e]) > Math.abs(f[i]) && (i = e);\n            if (i !== o) {\n              for (n = 0; n < p; n++)\n                (u = h.get(i, n)), h.set(i, n, h.get(o, n)), h.set(o, n, u);\n              (a = y[i]), (y[i] = y[o]), (y[o] = a), (v = -v);\n            }\n            if (o < l && 0 !== h.get(o, o))\n              for (e = o + 1; e < l; e++)\n                h.set(e, o, h.get(e, o) / h.get(o, o));\n          }\n          (this.LU = h), (this.pivotVector = y), (this.pivotSign = v);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isSingular\",\n              value: function () {\n                for (var t = this.LU, r = t.columns, e = 0; e < r; e++)\n                  if (0 === t.get(e, e)) return !0;\n                return !1;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Y.checkMatrix(t);\n                var r = this.LU;\n                if (r.rows !== t.rows)\n                  throw new Error(\"Invalid matrix dimensions\");\n                if (this.isSingular()) throw new Error(\"LU matrix is singular\");\n                var e,\n                  o,\n                  n,\n                  i = t.columns,\n                  s = t.subMatrixRow(this.pivotVector, 0, i - 1),\n                  u = r.columns;\n                for (n = 0; n < u; n++)\n                  for (e = n + 1; e < u; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                for (n = u - 1; n >= 0; n--) {\n                  for (o = 0; o < i; o++)\n                    s.set(n, o, s.get(n, o) / r.get(n, n));\n                  for (e = 0; e < n; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                }\n                return s;\n              },\n            },\n            {\n              key: \"determinant\",\n              get: function () {\n                var t = this.LU;\n                if (!t.isSquare()) throw new Error(\"Matrix must be square\");\n                for (var r = this.pivotSign, e = t.columns, o = 0; o < e; o++)\n                  r *= t.get(o, o);\n                return r;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new Y(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n > i\n                      ? o.set(n, i, t.get(n, i))\n                      : n === i\n                      ? o.set(n, i, 1)\n                      : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new Y(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n <= i ? o.set(n, i, t.get(n, i)) : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"pivotPermutationVector\",\n              get: function () {\n                return Array.from(this.pivotVector);\n              },\n            },\n          ]) && Er(r.prototype, e),\n          o && Er(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Rr(t, r) {\n        var e = 0;\n        return Math.abs(t) > Math.abs(r)\n          ? ((e = r / t), Math.abs(t) * Math.sqrt(1 + e * e))\n          : 0 !== r\n          ? ((e = t / r), Math.abs(r) * Math.sqrt(1 + e * e))\n          : 0;\n      }\n      function Pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var _r = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s = (r = Sr.checkMatrix(r)).clone(),\n            u = r.rows,\n            a = r.columns,\n            f = new Float64Array(a);\n          for (n = 0; n < a; n++) {\n            var c = 0;\n            for (e = n; e < u; e++) c = Rr(c, s.get(e, n));\n            if (0 !== c) {\n              for (s.get(n, n) < 0 && (c = -c), e = n; e < u; e++)\n                s.set(e, n, s.get(e, n) / c);\n              for (s.set(n, n, s.get(n, n) + 1), o = n + 1; o < a; o++) {\n                for (i = 0, e = n; e < u; e++) i += s.get(e, n) * s.get(e, o);\n                for (i = -i / s.get(n, n), e = n; e < u; e++)\n                  s.set(e, o, s.get(e, o) + i * s.get(e, n));\n              }\n            }\n            f[n] = -c;\n          }\n          (this.QR = s), (this.Rdiag = f);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Y.checkMatrix(t);\n                var r = this.QR,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix row dimensions must agree\");\n                if (!this.isFullRank())\n                  throw new Error(\"Matrix is rank deficient\");\n                var o,\n                  n,\n                  i,\n                  s,\n                  u = t.columns,\n                  a = t.clone(),\n                  f = r.columns;\n                for (i = 0; i < f; i++)\n                  for (n = 0; n < u; n++) {\n                    for (s = 0, o = i; o < e; o++)\n                      s += r.get(o, i) * a.get(o, n);\n                    for (s = -s / r.get(i, i), o = i; o < e; o++)\n                      a.set(o, n, a.get(o, n) + s * r.get(o, i));\n                  }\n                for (i = f - 1; i >= 0; i--) {\n                  for (n = 0; n < u; n++)\n                    a.set(i, n, a.get(i, n) / this.Rdiag[i]);\n                  for (o = 0; o < i; o++)\n                    for (n = 0; n < u; n++)\n                      a.set(o, n, a.get(o, n) - a.get(i, n) * r.get(o, i));\n                }\n                return a.subMatrix(0, f - 1, 0, u - 1);\n              },\n            },\n            {\n              key: \"isFullRank\",\n              value: function () {\n                for (var t = this.QR.columns, r = 0; r < t; r++)\n                  if (0 === this.Rdiag[r]) return !1;\n                return !0;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.QR,\n                  o = e.columns,\n                  n = new Y(o, o);\n                for (t = 0; t < o; t++)\n                  for (r = 0; r < o; r++)\n                    t < r\n                      ? n.set(t, r, e.get(t, r))\n                      : t === r\n                      ? n.set(t, r, this.Rdiag[t])\n                      : n.set(t, r, 0);\n                return n;\n              },\n            },\n            {\n              key: \"orthogonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e,\n                  o,\n                  n = this.QR,\n                  i = n.rows,\n                  s = n.columns,\n                  u = new Y(i, s);\n                for (e = s - 1; e >= 0; e--) {\n                  for (t = 0; t < i; t++) u.set(t, e, 0);\n                  for (u.set(e, e, 1), r = e; r < s; r++)\n                    if (0 !== n.get(e, e)) {\n                      for (o = 0, t = e; t < i; t++)\n                        o += n.get(t, e) * u.get(t, r);\n                      for (o = -o / n.get(e, e), t = e; t < i; t++)\n                        u.set(t, r, u.get(t, r) + o * n.get(t, e));\n                    }\n                }\n                return u;\n              },\n            },\n          ]) && Pr(r.prototype, e),\n          o && Pr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Tr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Cr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Nr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          if ((Tr(this, t), (r = Sr.checkMatrix(r)).isEmpty()))\n            throw new Error(\"Matrix must be non-empty\");\n          var o,\n            n = r.rows,\n            i = r.columns,\n            s = e.computeLeftSingularVectors,\n            u = void 0 === s || s,\n            a = e.computeRightSingularVectors,\n            f = void 0 === a || a,\n            c = e.autoTranspose,\n            h = void 0 !== c && c,\n            l = Boolean(u),\n            p = Boolean(f),\n            y = !1;\n          if (n < i)\n            if (h) {\n              (n = (o = r.transpose()).rows), (i = o.columns), (y = !0);\n              var v = l;\n              (l = p), (p = v);\n            } else\n              (o = r.clone()),\n                console.warn(\n                  \"Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose\",\n                );\n          else o = r.clone();\n          for (\n            var m = Math.min(n, i),\n              g = Math.min(n + 1, i),\n              w = new Float64Array(g),\n              b = new Y(n, m),\n              d = new Y(i, i),\n              M = new Float64Array(i),\n              x = new Float64Array(n),\n              k = new Float64Array(g),\n              S = 0;\n            S < g;\n            S++\n          )\n            k[S] = S;\n          for (\n            var O = Math.min(n - 1, i),\n              E = Math.max(0, Math.min(i - 2, n)),\n              j = Math.max(O, E),\n              R = 0;\n            R < j;\n            R++\n          ) {\n            if (R < O) {\n              w[R] = 0;\n              for (var P = R; P < n; P++) w[R] = Rr(w[R], o.get(P, R));\n              if (0 !== w[R]) {\n                o.get(R, R) < 0 && (w[R] = -w[R]);\n                for (var _ = R; _ < n; _++) o.set(_, R, o.get(_, R) / w[R]);\n                o.set(R, R, o.get(R, R) + 1);\n              }\n              w[R] = -w[R];\n            }\n            for (var T = R + 1; T < i; T++) {\n              if (R < O && 0 !== w[R]) {\n                for (var C = 0, N = R; N < n; N++)\n                  C += o.get(N, R) * o.get(N, T);\n                C = -C / o.get(R, R);\n                for (var D = R; D < n; D++)\n                  o.set(D, T, o.get(D, T) + C * o.get(D, R));\n              }\n              M[T] = o.get(R, T);\n            }\n            if (l && R < O)\n              for (var I = R; I < n; I++) b.set(I, R, o.get(I, R));\n            if (R < E) {\n              M[R] = 0;\n              for (var V = R + 1; V < i; V++) M[R] = Rr(M[R], M[V]);\n              if (0 !== M[R]) {\n                M[R + 1] < 0 && (M[R] = 0 - M[R]);\n                for (var q = R + 1; q < i; q++) M[q] /= M[R];\n                M[R + 1] += 1;\n              }\n              if (((M[R] = -M[R]), R + 1 < n && 0 !== M[R])) {\n                for (var A = R + 1; A < n; A++) x[A] = 0;\n                for (var F = R + 1; F < n; F++)\n                  for (var L = R + 1; L < i; L++) x[F] += M[L] * o.get(F, L);\n                for (var B = R + 1; B < i; B++)\n                  for (var z = -M[B] / M[R + 1], U = R + 1; U < n; U++)\n                    o.set(U, B, o.get(U, B) + z * x[U]);\n              }\n              if (p) for (var W = R + 1; W < i; W++) d.set(W, R, M[W]);\n            }\n          }\n          var Q = Math.min(i, n + 1);\n          if (\n            (O < i && (w[O] = o.get(O, O)),\n            n < Q && (w[Q - 1] = 0),\n            E + 1 < Q && (M[E] = o.get(E, Q - 1)),\n            (M[Q - 1] = 0),\n            l)\n          ) {\n            for (var J = O; J < m; J++) {\n              for (var H = 0; H < n; H++) b.set(H, J, 0);\n              b.set(J, J, 1);\n            }\n            for (var K = O - 1; K >= 0; K--)\n              if (0 !== w[K]) {\n                for (var X = K + 1; X < m; X++) {\n                  for (var G = 0, Z = K; Z < n; Z++)\n                    G += b.get(Z, K) * b.get(Z, X);\n                  G = -G / b.get(K, K);\n                  for (var $ = K; $ < n; $++)\n                    b.set($, X, b.get($, X) + G * b.get($, K));\n                }\n                for (var tt = K; tt < n; tt++) b.set(tt, K, -b.get(tt, K));\n                b.set(K, K, 1 + b.get(K, K));\n                for (var rt = 0; rt < K - 1; rt++) b.set(rt, K, 0);\n              } else {\n                for (var et = 0; et < n; et++) b.set(et, K, 0);\n                b.set(K, K, 1);\n              }\n          }\n          if (p)\n            for (var ot = i - 1; ot >= 0; ot--) {\n              if (ot < E && 0 !== M[ot])\n                for (var nt = ot + 1; nt < i; nt++) {\n                  for (var it = 0, st = ot + 1; st < i; st++)\n                    it += d.get(st, ot) * d.get(st, nt);\n                  it = -it / d.get(ot + 1, ot);\n                  for (var ut = ot + 1; ut < i; ut++)\n                    d.set(ut, nt, d.get(ut, nt) + it * d.get(ut, ot));\n                }\n              for (var at = 0; at < i; at++) d.set(at, ot, 0);\n              d.set(ot, ot, 1);\n            }\n          for (var ft = Q - 1, ct = Number.EPSILON; Q > 0; ) {\n            var ht = void 0,\n              lt = void 0;\n            for (ht = Q - 2; ht >= -1 && -1 !== ht; ht--) {\n              var pt =\n                Number.MIN_VALUE + ct * Math.abs(w[ht] + Math.abs(w[ht + 1]));\n              if (Math.abs(M[ht]) <= pt || Number.isNaN(M[ht])) {\n                M[ht] = 0;\n                break;\n              }\n            }\n            if (ht === Q - 2) lt = 4;\n            else {\n              var yt = void 0;\n              for (yt = Q - 1; yt >= ht && yt !== ht; yt--) {\n                var vt =\n                  (yt !== Q ? Math.abs(M[yt]) : 0) +\n                  (yt !== ht + 1 ? Math.abs(M[yt - 1]) : 0);\n                if (Math.abs(w[yt]) <= ct * vt) {\n                  w[yt] = 0;\n                  break;\n                }\n              }\n              yt === ht\n                ? (lt = 3)\n                : yt === Q - 1\n                ? (lt = 1)\n                : ((lt = 2), (ht = yt));\n            }\n            switch ((ht++, lt)) {\n              case 1:\n                var mt = M[Q - 2];\n                M[Q - 2] = 0;\n                for (var gt = Q - 2; gt >= ht; gt--) {\n                  var wt = Rr(w[gt], mt),\n                    bt = w[gt] / wt,\n                    dt = mt / wt;\n                  if (\n                    ((w[gt] = wt),\n                    gt !== ht &&\n                      ((mt = -dt * M[gt - 1]), (M[gt - 1] = bt * M[gt - 1])),\n                    p)\n                  )\n                    for (var Mt = 0; Mt < i; Mt++)\n                      (wt = bt * d.get(Mt, gt) + dt * d.get(Mt, Q - 1)),\n                        d.set(\n                          Mt,\n                          Q - 1,\n                          -dt * d.get(Mt, gt) + bt * d.get(Mt, Q - 1),\n                        ),\n                        d.set(Mt, gt, wt);\n                }\n                break;\n              case 2:\n                var xt = M[ht - 1];\n                M[ht - 1] = 0;\n                for (var kt = ht; kt < Q; kt++) {\n                  var St = Rr(w[kt], xt),\n                    Ot = w[kt] / St,\n                    Et = xt / St;\n                  if (\n                    ((w[kt] = St), (xt = -Et * M[kt]), (M[kt] = Ot * M[kt]), l)\n                  )\n                    for (var jt = 0; jt < n; jt++)\n                      (St = Ot * b.get(jt, kt) + Et * b.get(jt, ht - 1)),\n                        b.set(\n                          jt,\n                          ht - 1,\n                          -Et * b.get(jt, kt) + Ot * b.get(jt, ht - 1),\n                        ),\n                        b.set(jt, kt, St);\n                }\n                break;\n              case 3:\n                var Rt = Math.max(\n                    Math.abs(w[Q - 1]),\n                    Math.abs(w[Q - 2]),\n                    Math.abs(M[Q - 2]),\n                    Math.abs(w[ht]),\n                    Math.abs(M[ht]),\n                  ),\n                  Pt = w[Q - 1] / Rt,\n                  _t = w[Q - 2] / Rt,\n                  Tt = M[Q - 2] / Rt,\n                  Ct = w[ht] / Rt,\n                  Nt = M[ht] / Rt,\n                  Dt = ((_t + Pt) * (_t - Pt) + Tt * Tt) / 2,\n                  It = Pt * Tt * (Pt * Tt),\n                  Vt = 0;\n                (0 === Dt && 0 === It) ||\n                  (Vt =\n                    It /\n                    (Dt +\n                      (Vt =\n                        Dt < 0\n                          ? 0 - Math.sqrt(Dt * Dt + It)\n                          : Math.sqrt(Dt * Dt + It))));\n                for (\n                  var qt = (Ct + Pt) * (Ct - Pt) + Vt, At = Ct * Nt, Ft = ht;\n                  Ft < Q - 1;\n                  Ft++\n                ) {\n                  var Lt = Rr(qt, At);\n                  0 === Lt && (Lt = Number.MIN_VALUE);\n                  var Bt = qt / Lt,\n                    zt = At / Lt;\n                  if (\n                    (Ft !== ht && (M[Ft - 1] = Lt),\n                    (qt = Bt * w[Ft] + zt * M[Ft]),\n                    (M[Ft] = Bt * M[Ft] - zt * w[Ft]),\n                    (At = zt * w[Ft + 1]),\n                    (w[Ft + 1] = Bt * w[Ft + 1]),\n                    p)\n                  )\n                    for (var Ut = 0; Ut < i; Ut++)\n                      (Lt = Bt * d.get(Ut, Ft) + zt * d.get(Ut, Ft + 1)),\n                        d.set(\n                          Ut,\n                          Ft + 1,\n                          -zt * d.get(Ut, Ft) + Bt * d.get(Ut, Ft + 1),\n                        ),\n                        d.set(Ut, Ft, Lt);\n                  if (\n                    (0 === (Lt = Rr(qt, At)) && (Lt = Number.MIN_VALUE),\n                    (Bt = qt / Lt),\n                    (zt = At / Lt),\n                    (w[Ft] = Lt),\n                    (qt = Bt * M[Ft] + zt * w[Ft + 1]),\n                    (w[Ft + 1] = -zt * M[Ft] + Bt * w[Ft + 1]),\n                    (At = zt * M[Ft + 1]),\n                    (M[Ft + 1] = Bt * M[Ft + 1]),\n                    l && Ft < n - 1)\n                  )\n                    for (var Wt = 0; Wt < n; Wt++)\n                      (Lt = Bt * b.get(Wt, Ft) + zt * b.get(Wt, Ft + 1)),\n                        b.set(\n                          Wt,\n                          Ft + 1,\n                          -zt * b.get(Wt, Ft) + Bt * b.get(Wt, Ft + 1),\n                        ),\n                        b.set(Wt, Ft, Lt);\n                }\n                (M[Q - 2] = qt), 1;\n                break;\n              case 4:\n                if (w[ht] <= 0 && ((w[ht] = w[ht] < 0 ? -w[ht] : 0), p))\n                  for (var Qt = 0; Qt <= ft; Qt++)\n                    d.set(Qt, ht, -d.get(Qt, ht));\n                for (; ht < ft && !(w[ht] >= w[ht + 1]); ) {\n                  var Jt = w[ht];\n                  if (((w[ht] = w[ht + 1]), (w[ht + 1] = Jt), p && ht < i - 1))\n                    for (var Yt = 0; Yt < i; Yt++)\n                      (Jt = d.get(Yt, ht + 1)),\n                        d.set(Yt, ht + 1, d.get(Yt, ht)),\n                        d.set(Yt, ht, Jt);\n                  if (l && ht < n - 1)\n                    for (var Ht = 0; Ht < n; Ht++)\n                      (Jt = b.get(Ht, ht + 1)),\n                        b.set(Ht, ht + 1, b.get(Ht, ht)),\n                        b.set(Ht, ht, Jt);\n                  ht++;\n                }\n                0, Q--;\n            }\n          }\n          if (y) {\n            var Kt = d;\n            (d = b), (b = Kt);\n          }\n          (this.m = n), (this.n = i), (this.s = w), (this.U = b), (this.V = d);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                for (\n                  var r = t,\n                    e = this.threshold,\n                    o = this.s.length,\n                    n = Y.zeros(o, o),\n                    i = 0;\n                  i < o;\n                  i++\n                )\n                  Math.abs(this.s[i]) <= e\n                    ? n.set(i, i, 0)\n                    : n.set(i, i, 1 / this.s[i]);\n                for (\n                  var s = this.U,\n                    u = this.rightSingularVectors,\n                    a = u.mmul(n),\n                    f = u.rows,\n                    c = s.rows,\n                    h = Y.zeros(f, c),\n                    l = 0;\n                  l < f;\n                  l++\n                )\n                  for (var p = 0; p < c; p++) {\n                    for (var y = 0, v = 0; v < o; v++)\n                      y += a.get(l, v) * s.get(p, v);\n                    h.set(l, p, y);\n                  }\n                return h.mmul(r);\n              },\n            },\n            {\n              key: \"solveForDiagonal\",\n              value: function (t) {\n                return this.solve(Y.diag(t));\n              },\n            },\n            {\n              key: \"inverse\",\n              value: function () {\n                for (\n                  var t = this.V,\n                    r = this.threshold,\n                    e = t.rows,\n                    o = t.columns,\n                    n = new Y(e, this.s.length),\n                    i = 0;\n                  i < e;\n                  i++\n                )\n                  for (var s = 0; s < o; s++)\n                    Math.abs(this.s[s]) > r &&\n                      n.set(i, s, t.get(i, s) / this.s[s]);\n                for (\n                  var u = this.U,\n                    a = u.rows,\n                    f = u.columns,\n                    c = new Y(e, a),\n                    h = 0;\n                  h < e;\n                  h++\n                )\n                  for (var l = 0; l < a; l++) {\n                    for (var p = 0, y = 0; y < f; y++)\n                      p += n.get(h, y) * u.get(l, y);\n                    c.set(h, l, p);\n                  }\n                return c;\n              },\n            },\n            {\n              key: \"condition\",\n              get: function () {\n                return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n              },\n            },\n            {\n              key: \"norm2\",\n              get: function () {\n                return this.s[0];\n              },\n            },\n            {\n              key: \"rank\",\n              get: function () {\n                for (\n                  var t = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON,\n                    r = 0,\n                    e = this.s,\n                    o = 0,\n                    n = e.length;\n                  o < n;\n                  o++\n                )\n                  e[o] > t && r++;\n                return r;\n              },\n            },\n            {\n              key: \"diagonal\",\n              get: function () {\n                return Array.from(this.s);\n              },\n            },\n            {\n              key: \"threshold\",\n              get: function () {\n                return (\n                  (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0]\n                );\n              },\n            },\n            {\n              key: \"leftSingularVectors\",\n              get: function () {\n                return this.U;\n              },\n            },\n            {\n              key: \"rightSingularVectors\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                return Y.diag(this.s);\n              },\n            },\n          ]) && Cr(r.prototype, e),\n          o && Cr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Dr(t) {\n        var r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n        return (\n          (t = Sr.checkMatrix(t)),\n          r ? new Nr(t).inverse() : Ir(t, Y.eye(t.rows))\n        );\n      }\n      function Ir(t, r) {\n        var e = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\n        return (\n          (t = Sr.checkMatrix(t)),\n          (r = Sr.checkMatrix(r)),\n          e\n            ? new Nr(t).solve(r)\n            : t.isSquare()\n            ? new jr(t).solve(r)\n            : new _r(t).solve(r)\n        );\n      }\n      function Vr(t) {\n        var r, e, o, n, i, s;\n        if ((t = Y.checkMatrix(t)).isSquare())\n          return 0 === t.columns\n            ? 1\n            : 2 === t.columns\n            ? ((r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(1, 0)),\n              r * t.get(1, 1) - e * o)\n            : 3 === t.columns\n            ? ((n = new Kt(t, [1, 2], [1, 2])),\n              (i = new Kt(t, [1, 2], [0, 2])),\n              (s = new Kt(t, [1, 2], [0, 1])),\n              (r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(0, 2)),\n              r * Vr(n) - e * Vr(i) + o * Vr(s))\n            : new jr(t).determinant;\n        throw Error(\"determinant can only be calculated for a square matrix\");\n      }\n      function qr(t, r) {\n        for (var e = [], o = 0; o < t; o++) o !== r && e.push(o);\n        return e;\n      }\n      function Ar(t, r, e) {\n        var o =\n            arguments.length > 3 && void 0 !== arguments[3]\n              ? arguments[3]\n              : 1e-9,\n          n =\n            arguments.length > 4 && void 0 !== arguments[4]\n              ? arguments[4]\n              : 1e-9;\n        if (t > n) return new Array(r.rows + 1).fill(0);\n        for (var i = r.addRow(e, [0]), s = 0; s < i.rows; s++)\n          Math.abs(i.get(s, 0)) < o && i.set(s, 0, 0);\n        return i.to1DArray();\n      }\n      function Fr(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            e = r.thresholdValue,\n            o = void 0 === e ? 1e-9 : e,\n            n = r.thresholdError,\n            i = void 0 === n ? 1e-9 : n,\n            s = (t = Y.checkMatrix(t)).rows,\n            u = new Y(s, s),\n            a = 0;\n          a < s;\n          a++\n        ) {\n          var f = Y.columnVector(t.getRow(a)),\n            c = t.subMatrixRow(qr(s, a)).transpose(),\n            h = new Nr(c),\n            l = h.solve(f),\n            p = Y.sub(f, c.mmul(l)).abs().max();\n          u.setRow(a, Ar(p, l, a, o, i));\n        }\n        return u;\n      }\n      function Lr(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1]\n            ? arguments[1]\n            : Number.EPSILON;\n        if ((t = Y.checkMatrix(t)).isEmpty()) return t.transpose();\n        for (\n          var e = new Nr(t, { autoTranspose: !0 }),\n            o = e.leftSingularVectors,\n            n = e.rightSingularVectors,\n            i = e.diagonal,\n            s = 0;\n          s < i.length;\n          s++\n        )\n          Math.abs(i[s]) > r ? (i[s] = 1 / i[s]) : (i[s] = 0);\n        return n.mmul(Y.diag(i).mmul(o.transpose()));\n      }\n      function Br(t) {\n        return (Br =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function zr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new Y(t);\n        var o = !1;\n        if (\n          (\"object\" !== Br(r) || Y.isMatrix(r) || n(r)\n            ? (r = new Y(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var i = e,\n          s = i.center,\n          u = void 0 === s || s;\n        u && ((t = t.center(\"column\")), o || (r = r.center(\"column\")));\n        for (var a = t.transpose().mmul(r), f = 0; f < a.rows; f++)\n          for (var c = 0; c < a.columns; c++)\n            a.set(f, c, a.get(f, c) * (1 / (t.rows - 1)));\n        return a;\n      }\n      function Ur(t) {\n        return (Ur =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Wr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new Y(t);\n        var o = !1;\n        if (\n          (\"object\" !== Ur(r) || Y.isMatrix(r) || n(r)\n            ? (r = new Y(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var i = e,\n          s = i.center,\n          u = void 0 === s || s,\n          a = i.scale,\n          f = void 0 === a || a;\n        u && (t.center(\"column\"), o || r.center(\"column\")),\n          f && (t.scale(\"column\"), o || r.scale(\"column\"));\n        for (\n          var c = t.standardDeviation(\"column\", { unbiased: !0 }),\n            h = o ? c : r.standardDeviation(\"column\", { unbiased: !0 }),\n            l = t.transpose().mmul(r),\n            p = 0;\n          p < l.rows;\n          p++\n        )\n          for (var y = 0; y < l.columns; y++)\n            l.set(p, y, l.get(p, y) * (1 / (c[p] * h[y])) * (1 / (t.rows - 1)));\n        return l;\n      }\n      function Qr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Jr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Yr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          Qr(this, t);\n          var o = e.assumeSymmetric,\n            n = void 0 !== o && o;\n          if (!(r = Sr.checkMatrix(r)).isSquare())\n            throw new Error(\"Matrix is not a square matrix\");\n          if (r.isEmpty()) throw new Error(\"Matrix must be non-empty\");\n          var i,\n            s,\n            u = r.columns,\n            a = new Y(u, u),\n            f = new Float64Array(u),\n            c = new Float64Array(u),\n            h = r;\n          if (!!n || r.isSymmetric()) {\n            for (i = 0; i < u; i++)\n              for (s = 0; s < u; s++) a.set(i, s, h.get(i, s));\n            Hr(u, c, f, a), Kr(u, c, f, a);\n          } else {\n            var l = new Y(u, u),\n              p = new Float64Array(u);\n            for (s = 0; s < u; s++)\n              for (i = 0; i < u; i++) l.set(i, s, h.get(i, s));\n            Xr(u, l, p, a), Gr(u, c, f, a, l);\n          }\n          (this.n = u), (this.e = c), (this.d = f), (this.V = a);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"realEigenvalues\",\n              get: function () {\n                return Array.from(this.d);\n              },\n            },\n            {\n              key: \"imaginaryEigenvalues\",\n              get: function () {\n                return Array.from(this.e);\n              },\n            },\n            {\n              key: \"eigenvectorMatrix\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.n,\n                  o = this.e,\n                  n = this.d,\n                  i = new Y(e, e);\n                for (t = 0; t < e; t++) {\n                  for (r = 0; r < e; r++) i.set(t, r, 0);\n                  i.set(t, t, n[t]),\n                    o[t] > 0\n                      ? i.set(t, t + 1, o[t])\n                      : o[t] < 0 && i.set(t, t - 1, o[t]);\n                }\n                return i;\n              },\n            },\n          ]) && Jr(r.prototype, e),\n          o && Jr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Hr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h;\n        for (a = 0; a < t; a++) e[a] = o.get(t - 1, a);\n        for (u = t - 1; u > 0; u--) {\n          for (h = 0, s = 0, f = 0; f < u; f++) h += Math.abs(e[f]);\n          if (0 === h)\n            for (r[u] = e[u - 1], a = 0; a < u; a++)\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0), o.set(a, u, 0);\n          else {\n            for (f = 0; f < u; f++) (e[f] /= h), (s += e[f] * e[f]);\n            for (\n              n = e[u - 1],\n                i = Math.sqrt(s),\n                n > 0 && (i = -i),\n                r[u] = h * i,\n                s -= n * i,\n                e[u - 1] = n - i,\n                a = 0;\n              a < u;\n              a++\n            )\n              r[a] = 0;\n            for (a = 0; a < u; a++) {\n              for (\n                n = e[a], o.set(a, u, n), i = r[a] + o.get(a, a) * n, f = a + 1;\n                f <= u - 1;\n                f++\n              )\n                (i += o.get(f, a) * e[f]), (r[f] += o.get(f, a) * n);\n              r[a] = i;\n            }\n            for (n = 0, a = 0; a < u; a++) (r[a] /= s), (n += r[a] * e[a]);\n            for (c = n / (s + s), a = 0; a < u; a++) r[a] -= c * e[a];\n            for (a = 0; a < u; a++) {\n              for (n = e[a], i = r[a], f = a; f <= u - 1; f++)\n                o.set(f, a, o.get(f, a) - (n * r[f] + i * e[f]));\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0);\n            }\n          }\n          e[u] = s;\n        }\n        for (u = 0; u < t - 1; u++) {\n          if (\n            (o.set(t - 1, u, o.get(u, u)), o.set(u, u, 1), 0 !== (s = e[u + 1]))\n          ) {\n            for (f = 0; f <= u; f++) e[f] = o.get(f, u + 1) / s;\n            for (a = 0; a <= u; a++) {\n              for (i = 0, f = 0; f <= u; f++)\n                i += o.get(f, u + 1) * o.get(f, a);\n              for (f = 0; f <= u; f++) o.set(f, a, o.get(f, a) - i * e[f]);\n            }\n          }\n          for (f = 0; f <= u; f++) o.set(f, u + 1, 0);\n        }\n        for (a = 0; a < t; a++) (e[a] = o.get(t - 1, a)), o.set(t - 1, a, 0);\n        o.set(t - 1, t - 1, 1), (r[0] = 0);\n      }\n      function Kr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h, l, p, y, v, m, g, w, b;\n        for (s = 1; s < t; s++) r[s - 1] = r[s];\n        r[t - 1] = 0;\n        var d = 0,\n          M = 0,\n          x = Number.EPSILON;\n        for (f = 0; f < t; f++) {\n          for (\n            M = Math.max(M, Math.abs(e[f]) + Math.abs(r[f])), c = f;\n            c < t && !(Math.abs(r[c]) <= x * M);\n\n          )\n            c++;\n          if (c > f) {\n            0;\n            do {\n              for (\n                1,\n                  n = e[f],\n                  l = Rr((h = (e[f + 1] - n) / (2 * r[f])), 1),\n                  h < 0 && (l = -l),\n                  e[f] = r[f] / (h + l),\n                  e[f + 1] = r[f] * (h + l),\n                  p = e[f + 1],\n                  i = n - e[f],\n                  s = f + 2;\n                s < t;\n                s++\n              )\n                e[s] -= i;\n              for (\n                d += i,\n                  h = e[c],\n                  v = y = 1,\n                  m = y,\n                  g = r[f + 1],\n                  w = 0,\n                  b = 0,\n                  s = c - 1;\n                s >= f;\n                s--\n              )\n                for (\n                  m = v,\n                    v = y,\n                    b = w,\n                    n = y * r[s],\n                    i = y * h,\n                    l = Rr(h, r[s]),\n                    r[s + 1] = w * l,\n                    w = r[s] / l,\n                    h = (y = h / l) * e[s] - w * n,\n                    e[s + 1] = i + w * (y * n + w * e[s]),\n                    a = 0;\n                  a < t;\n                  a++\n                )\n                  (i = o.get(a, s + 1)),\n                    o.set(a, s + 1, w * o.get(a, s) + y * i),\n                    o.set(a, s, y * o.get(a, s) - w * i);\n              (h = (-w * b * m * g * r[f]) / p), (r[f] = w * h), (e[f] = y * h);\n            } while (Math.abs(r[f]) > x * M);\n          }\n          (e[f] = e[f] + d), (r[f] = 0);\n        }\n        for (s = 0; s < t - 1; s++) {\n          for (a = s, h = e[s], u = s + 1; u < t; u++)\n            e[u] < h && ((a = u), (h = e[u]));\n          if (a !== s)\n            for (e[a] = e[s], e[s] = h, u = 0; u < t; u++)\n              (h = o.get(u, s)), o.set(u, s, o.get(u, a)), o.set(u, a, h);\n        }\n      }\n      function Xr(t, r, e, o) {\n        var n,\n          i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h = t - 1;\n        for (f = 1; f <= h - 1; f++) {\n          for (c = 0, u = f; u <= h; u++) c += Math.abs(r.get(u, f - 1));\n          if (0 !== c) {\n            for (s = 0, u = h; u >= f; u--)\n              (e[u] = r.get(u, f - 1) / c), (s += e[u] * e[u]);\n            for (\n              i = Math.sqrt(s),\n                e[f] > 0 && (i = -i),\n                s -= e[f] * i,\n                e[f] = e[f] - i,\n                a = f;\n              a < t;\n              a++\n            ) {\n              for (n = 0, u = h; u >= f; u--) n += e[u] * r.get(u, a);\n              for (n /= s, u = f; u <= h; u++)\n                r.set(u, a, r.get(u, a) - n * e[u]);\n            }\n            for (u = 0; u <= h; u++) {\n              for (n = 0, a = h; a >= f; a--) n += e[a] * r.get(u, a);\n              for (n /= s, a = f; a <= h; a++)\n                r.set(u, a, r.get(u, a) - n * e[a]);\n            }\n            (e[f] = c * e[f]), r.set(f, f - 1, c * i);\n          }\n        }\n        for (u = 0; u < t; u++)\n          for (a = 0; a < t; a++) o.set(u, a, u === a ? 1 : 0);\n        for (f = h - 1; f >= 1; f--)\n          if (0 !== r.get(f, f - 1)) {\n            for (u = f + 1; u <= h; u++) e[u] = r.get(u, f - 1);\n            for (a = f; a <= h; a++) {\n              for (i = 0, u = f; u <= h; u++) i += e[u] * o.get(u, a);\n              for (i = i / e[f] / r.get(f, f - 1), u = f; u <= h; u++)\n                o.set(u, a, o.get(u, a) + i * e[u]);\n            }\n          }\n      }\n      function Gr(t, r, e, o, n) {\n        var i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h,\n          l,\n          p,\n          y,\n          v,\n          m,\n          g,\n          w,\n          b,\n          d = t - 1,\n          M = t - 1,\n          x = Number.EPSILON,\n          k = 0,\n          S = 0,\n          O = 0,\n          E = 0,\n          j = 0,\n          R = 0,\n          P = 0,\n          _ = 0;\n        for (i = 0; i < t; i++)\n          for (\n            (i < 0 || i > M) && ((e[i] = n.get(i, i)), (r[i] = 0)),\n              s = Math.max(i - 1, 0);\n            s < t;\n            s++\n          )\n            S += Math.abs(n.get(i, s));\n        for (; d >= 0; ) {\n          for (\n            a = d;\n            a > 0 &&\n            (0 ===\n              (R = Math.abs(n.get(a - 1, a - 1)) + Math.abs(n.get(a, a))) &&\n              (R = S),\n            !(Math.abs(n.get(a, a - 1)) < x * R));\n\n          )\n            a--;\n          if (a === d)\n            n.set(d, d, n.get(d, d) + k),\n              (e[d] = n.get(d, d)),\n              (r[d] = 0),\n              d--,\n              (_ = 0);\n          else if (a === d - 1) {\n            if (\n              ((h = n.get(d, d - 1) * n.get(d - 1, d)),\n              (E = (O = (n.get(d - 1, d - 1) - n.get(d, d)) / 2) * O + h),\n              (P = Math.sqrt(Math.abs(E))),\n              n.set(d, d, n.get(d, d) + k),\n              n.set(d - 1, d - 1, n.get(d - 1, d - 1) + k),\n              (l = n.get(d, d)),\n              E >= 0)\n            ) {\n              for (\n                P = O >= 0 ? O + P : O - P,\n                  e[d - 1] = l + P,\n                  e[d] = e[d - 1],\n                  0 !== P && (e[d] = l - h / P),\n                  r[d - 1] = 0,\n                  r[d] = 0,\n                  O = (l = n.get(d, d - 1)) / (R = Math.abs(l) + Math.abs(P)),\n                  E = P / R,\n                  O /= j = Math.sqrt(O * O + E * E),\n                  E /= j,\n                  s = d - 1;\n                s < t;\n                s++\n              )\n                (P = n.get(d - 1, s)),\n                  n.set(d - 1, s, E * P + O * n.get(d, s)),\n                  n.set(d, s, E * n.get(d, s) - O * P);\n              for (i = 0; i <= d; i++)\n                (P = n.get(i, d - 1)),\n                  n.set(i, d - 1, E * P + O * n.get(i, d)),\n                  n.set(i, d, E * n.get(i, d) - O * P);\n              for (i = 0; i <= M; i++)\n                (P = o.get(i, d - 1)),\n                  o.set(i, d - 1, E * P + O * o.get(i, d)),\n                  o.set(i, d, E * o.get(i, d) - O * P);\n            } else\n              (e[d - 1] = l + O), (e[d] = l + O), (r[d - 1] = P), (r[d] = -P);\n            (d -= 2), (_ = 0);\n          } else {\n            if (\n              ((l = n.get(d, d)),\n              (p = 0),\n              (h = 0),\n              a < d &&\n                ((p = n.get(d - 1, d - 1)),\n                (h = n.get(d, d - 1) * n.get(d - 1, d))),\n              10 === _)\n            ) {\n              for (k += l, i = 0; i <= d; i++) n.set(i, i, n.get(i, i) - l);\n              (l = p =\n                0.75 *\n                (R =\n                  Math.abs(n.get(d, d - 1)) + Math.abs(n.get(d - 1, d - 2)))),\n                (h = -0.4375 * R * R);\n            }\n            if (30 === _ && (R = (R = (p - l) / 2) * R + h) > 0) {\n              for (\n                R = Math.sqrt(R),\n                  p < l && (R = -R),\n                  R = l - h / ((p - l) / 2 + R),\n                  i = 0;\n                i <= d;\n                i++\n              )\n                n.set(i, i, n.get(i, i) - R);\n              (k += R), (l = p = h = 0.964);\n            }\n            for (\n              _ += 1, f = d - 2;\n              f >= a &&\n              ((O =\n                ((j = l - (P = n.get(f, f))) * (R = p - P) - h) /\n                  n.get(f + 1, f) +\n                n.get(f, f + 1)),\n              (E = n.get(f + 1, f + 1) - P - j - R),\n              (j = n.get(f + 2, f + 1)),\n              (O /= R = Math.abs(O) + Math.abs(E) + Math.abs(j)),\n              (E /= R),\n              (j /= R),\n              f !== a) &&\n              !(\n                Math.abs(n.get(f, f - 1)) * (Math.abs(E) + Math.abs(j)) <\n                x *\n                  (Math.abs(O) *\n                    (Math.abs(n.get(f - 1, f - 1)) +\n                      Math.abs(P) +\n                      Math.abs(n.get(f + 1, f + 1))))\n              );\n\n            )\n              f--;\n            for (i = f + 2; i <= d; i++)\n              n.set(i, i - 2, 0), i > f + 2 && n.set(i, i - 3, 0);\n            for (\n              u = f;\n              u <= d - 1 &&\n              ((w = u !== d - 1),\n              u !== f &&\n                ((O = n.get(u, u - 1)),\n                (E = n.get(u + 1, u - 1)),\n                (j = w ? n.get(u + 2, u - 1) : 0),\n                0 !== (l = Math.abs(O) + Math.abs(E) + Math.abs(j)) &&\n                  ((O /= l), (E /= l), (j /= l))),\n              0 !== l);\n              u++\n            )\n              if (\n                ((R = Math.sqrt(O * O + E * E + j * j)),\n                O < 0 && (R = -R),\n                0 !== R)\n              ) {\n                for (\n                  u !== f\n                    ? n.set(u, u - 1, -R * l)\n                    : a !== f && n.set(u, u - 1, -n.get(u, u - 1)),\n                    l = (O += R) / R,\n                    p = E / R,\n                    P = j / R,\n                    E /= O,\n                    j /= O,\n                    s = u;\n                  s < t;\n                  s++\n                )\n                  (O = n.get(u, s) + E * n.get(u + 1, s)),\n                    w &&\n                      ((O += j * n.get(u + 2, s)),\n                      n.set(u + 2, s, n.get(u + 2, s) - O * P)),\n                    n.set(u, s, n.get(u, s) - O * l),\n                    n.set(u + 1, s, n.get(u + 1, s) - O * p);\n                for (i = 0; i <= Math.min(d, u + 3); i++)\n                  (O = l * n.get(i, u) + p * n.get(i, u + 1)),\n                    w &&\n                      ((O += P * n.get(i, u + 2)),\n                      n.set(i, u + 2, n.get(i, u + 2) - O * j)),\n                    n.set(i, u, n.get(i, u) - O),\n                    n.set(i, u + 1, n.get(i, u + 1) - O * E);\n                for (i = 0; i <= M; i++)\n                  (O = l * o.get(i, u) + p * o.get(i, u + 1)),\n                    w &&\n                      ((O += P * o.get(i, u + 2)),\n                      o.set(i, u + 2, o.get(i, u + 2) - O * j)),\n                    o.set(i, u, o.get(i, u) - O),\n                    o.set(i, u + 1, o.get(i, u + 1) - O * E);\n              }\n          }\n        }\n        if (0 !== S) {\n          for (d = t - 1; d >= 0; d--)\n            if (((O = e[d]), 0 === (E = r[d])))\n              for (a = d, n.set(d, d, 1), i = d - 1; i >= 0; i--) {\n                for (h = n.get(i, i) - O, j = 0, s = a; s <= d; s++)\n                  j += n.get(i, s) * n.get(s, d);\n                if (r[i] < 0) (P = h), (R = j);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? n.set(i, d, 0 !== h ? -j / h : -j / (x * S))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (c =\n                        (l * R - P * j) /\n                        (E = (e[i] - O) * (e[i] - O) + r[i] * r[i])),\n                      n.set(i, d, c),\n                      n.set(\n                        i + 1,\n                        d,\n                        Math.abs(l) > Math.abs(P)\n                          ? (-j - h * c) / l\n                          : (-R - p * c) / P,\n                      )),\n                  x * (c = Math.abs(n.get(i, d))) * c > 1)\n                )\n                  for (s = i; s <= d; s++) n.set(s, d, n.get(s, d) / c);\n              }\n            else if (E < 0)\n              for (\n                a = d - 1,\n                  Math.abs(n.get(d, d - 1)) > Math.abs(n.get(d - 1, d))\n                    ? (n.set(d - 1, d - 1, E / n.get(d, d - 1)),\n                      n.set(d - 1, d, -(n.get(d, d) - O) / n.get(d, d - 1)))\n                    : ((b = Zr(\n                        0,\n                        -n.get(d - 1, d),\n                        n.get(d - 1, d - 1) - O,\n                        E,\n                      )),\n                      n.set(d - 1, d - 1, b[0]),\n                      n.set(d - 1, d, b[1])),\n                  n.set(d, d - 1, 0),\n                  n.set(d, d, 1),\n                  i = d - 2;\n                i >= 0;\n                i--\n              ) {\n                for (y = 0, v = 0, s = a; s <= d; s++)\n                  (y += n.get(i, s) * n.get(s, d - 1)),\n                    (v += n.get(i, s) * n.get(s, d));\n                if (((h = n.get(i, i) - O), r[i] < 0))\n                  (P = h), (j = y), (R = v);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? ((b = Zr(-y, -v, h, E)),\n                      n.set(i, d - 1, b[0]),\n                      n.set(i, d, b[1]))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (m = (e[i] - O) * (e[i] - O) + r[i] * r[i] - E * E),\n                      (g = 2 * (e[i] - O) * E),\n                      0 === m &&\n                        0 === g &&\n                        (m =\n                          x *\n                          S *\n                          (Math.abs(h) +\n                            Math.abs(E) +\n                            Math.abs(l) +\n                            Math.abs(p) +\n                            Math.abs(P))),\n                      (b = Zr(\n                        l * j - P * y + E * v,\n                        l * R - P * v - E * y,\n                        m,\n                        g,\n                      )),\n                      n.set(i, d - 1, b[0]),\n                      n.set(i, d, b[1]),\n                      Math.abs(l) > Math.abs(P) + Math.abs(E)\n                        ? (n.set(\n                            i + 1,\n                            d - 1,\n                            (-y - h * n.get(i, d - 1) + E * n.get(i, d)) / l,\n                          ),\n                          n.set(\n                            i + 1,\n                            d,\n                            (-v - h * n.get(i, d) - E * n.get(i, d - 1)) / l,\n                          ))\n                        : ((b = Zr(\n                            -j - p * n.get(i, d - 1),\n                            -R - p * n.get(i, d),\n                            P,\n                            E,\n                          )),\n                          n.set(i + 1, d - 1, b[0]),\n                          n.set(i + 1, d, b[1]))),\n                  x *\n                    (c = Math.max(\n                      Math.abs(n.get(i, d - 1)),\n                      Math.abs(n.get(i, d)),\n                    )) *\n                    c >\n                    1)\n                )\n                  for (s = i; s <= d; s++)\n                    n.set(s, d - 1, n.get(s, d - 1) / c),\n                      n.set(s, d, n.get(s, d) / c);\n              }\n          for (i = 0; i < t; i++)\n            if (i < 0 || i > M)\n              for (s = i; s < t; s++) o.set(i, s, n.get(i, s));\n          for (s = t - 1; s >= 0; s--)\n            for (i = 0; i <= M; i++) {\n              for (P = 0, u = 0; u <= Math.min(s, M); u++)\n                P += o.get(i, u) * n.get(u, s);\n              o.set(i, s, P);\n            }\n        }\n      }\n      function Zr(t, r, e, o) {\n        var n, i;\n        return Math.abs(e) > Math.abs(o)\n          ? [(t + (n = o / e) * r) / (i = e + n * o), (r - n * t) / i]\n          : [((n = e / o) * t + r) / (i = o + n * e), (n * r - t) / i];\n      }\n      function $r(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var te = (function () {\n        function t(r) {\n          if (\n            ((function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, t),\n            !(r = Sr.checkMatrix(r)).isSymmetric())\n          )\n            throw new Error(\"Matrix is not symmetric\");\n          var e,\n            o,\n            n,\n            i = r,\n            s = i.rows,\n            u = new Y(s, s),\n            a = !0;\n          for (o = 0; o < s; o++) {\n            var f = 0;\n            for (n = 0; n < o; n++) {\n              var c = 0;\n              for (e = 0; e < n; e++) c += u.get(n, e) * u.get(o, e);\n              (c = (i.get(o, n) - c) / u.get(n, n)),\n                u.set(o, n, c),\n                (f += c * c);\n            }\n            for (\n              a &= (f = i.get(o, o) - f) > 0,\n                u.set(o, o, Math.sqrt(Math.max(f, 0))),\n                n = o + 1;\n              n < s;\n              n++\n            )\n              u.set(o, n, 0);\n          }\n          (this.L = u), (this.positiveDefinite = Boolean(a));\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isPositiveDefinite\",\n              value: function () {\n                return this.positiveDefinite;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Sr.checkMatrix(t);\n                var r = this.L,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix dimensions do not match\");\n                if (!1 === this.isPositiveDefinite())\n                  throw new Error(\"Matrix is not positive definite\");\n                var o,\n                  n,\n                  i,\n                  s = t.columns,\n                  u = t.clone();\n                for (i = 0; i < e; i++)\n                  for (n = 0; n < s; n++) {\n                    for (o = 0; o < i; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(i, o));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                for (i = e - 1; i >= 0; i--)\n                  for (n = 0; n < s; n++) {\n                    for (o = i + 1; o < e; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(o, i));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                return u;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                return this.L;\n              },\n            },\n          ]) && $r(r.prototype, e),\n          o && $r(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function re(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ee(t, r, e) {\n        return (\n          r && re(t.prototype, r),\n          e && re(t, e),\n          Object.defineProperty(t, \"prototype\", { writable: !1 }),\n          t\n        );\n      }\n      function oe(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      var ne = ee(function t(r) {\n        var e =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        oe(this, t), (r = Sr.checkMatrix(r));\n        var o,\n          i = e.Y,\n          s = e.scaleScores,\n          u = void 0 !== s && s,\n          a = e.maxIterations,\n          f = void 0 === a ? 1e3 : a,\n          c = e.terminationCriteria,\n          h = void 0 === c ? 1e-10 : c;\n        if (i) {\n          if (\n            (i =\n              n(i) && \"number\" == typeof i[0]\n                ? Y.columnVector(i)\n                : Sr.checkMatrix(i)).rows !== r.rows\n          )\n            throw new Error(\"Y should have the same number of rows as X\");\n          o = i.getColumnVector(0);\n        } else o = r.getColumnVector(0);\n        for (var l, p, y, v, m = 1, g = 0; g < f && m > h; g++)\n          (y = (y = r\n            .transpose()\n            .mmul(o)\n            .div(o.transpose().mmul(o).get(0, 0))).div(y.norm())),\n            (l = r.mmul(y).div(y.transpose().mmul(y).get(0, 0))),\n            g > 0 && (m = l.clone().sub(v).pow(2).sum()),\n            (v = l.clone()),\n            i\n              ? ((p = (p = i\n                  .transpose()\n                  .mmul(l)\n                  .div(l.transpose().mmul(l).get(0, 0))).div(p.norm())),\n                (o = i.mmul(p).div(p.transpose().mmul(p).get(0, 0))))\n              : (o = l);\n        if (i) {\n          var w = r.transpose().mmul(l).div(l.transpose().mmul(l).get(0, 0));\n          w = w.div(w.norm());\n          var b = r.clone().sub(l.clone().mmul(w.transpose())),\n            d = o.transpose().mmul(l).div(l.transpose().mmul(l).get(0, 0)),\n            M = i.clone().sub(l.clone().mulS(d.get(0, 0)).mmul(p.transpose()));\n          (this.t = l),\n            (this.p = w.transpose()),\n            (this.w = y.transpose()),\n            (this.q = p),\n            (this.u = o),\n            (this.s = l.transpose().mmul(l)),\n            (this.xResidual = b),\n            (this.yResidual = M),\n            (this.betas = d);\n        } else\n          (this.w = y.transpose()),\n            (this.s = l.transpose().mmul(l).sqrt()),\n            (this.t = u ? l.clone().div(this.s.get(0, 0)) : l),\n            (this.xResidual = r.sub(l.mmul(y.transpose())));\n      });\n    },\n  }).default;\n});\n//# sourceMappingURL=mdsLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/radialLayout.js",
    "content": "!(function (t, r) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = r())\n    : \"function\" == typeof define && define.amd\n    ? define([], r)\n    : \"object\" == typeof exports\n    ? (exports.RadialLayout = r())\n    : (t.RadialLayout = r());\n})(this, function () {\n  return (function (t) {\n    var r = {};\n    function e(o) {\n      if (r[o]) return r[o].exports;\n      var n = (r[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(n.exports, n, n.exports, e), (n.l = !0), n.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = r),\n      (e.d = function (t, r, o) {\n        e.o(t, r) || Object.defineProperty(t, r, { enumerable: !0, get: o });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, r) {\n        if ((1 & r && (t = e(t)), 8 & r)) return t;\n        if (4 & r && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (e.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & r && \"string\" != typeof t)\n        )\n          for (var n in t)\n            e.d(\n              o,\n              n,\n              function (r) {\n                return t[r];\n              }.bind(null, n),\n            );\n        return o;\n      }),\n      (e.n = function (t) {\n        var r =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(r, \"a\", r), r;\n      }),\n      (e.o = function (t, r) {\n        return Object.prototype.hasOwnProperty.call(t, r);\n      }),\n      (e.p = \"\"),\n      e((e.s = 390))\n    );\n  })({\n    10: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        n(e(11), r),\n        n(e(12), r),\n        n(e(13), r),\n        n(e(14), r),\n        n(e(15), r),\n        n(e(16), r);\n    },\n    11: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.camelize = r.isString = void 0);\n      r.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var o,\n        n,\n        i = /-(\\w)/g;\n      r.camelize =\n        ((o = function (t) {\n          return t.replace(i, function (t, r) {\n            return r ? r.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = o(t));\n        });\n    },\n    12: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isArray = void 0),\n        (r.isArray = Array.isArray);\n    },\n    13: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.toNumber = r.isNaN = r.isNumber = void 0);\n      r.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      r.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      r.toNumber = function (t) {\n        var e = parseFloat(t);\n        return r.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.traverseTreeUp =\n          r.scaleMatrix =\n          r.getAdjMatrix =\n          r.floydWarshall =\n          r.getDegree =\n            void 0);\n      r.getDegree = function (t, r, e) {\n        for (var o = [], n = 0; n < t; n++) o[n] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (o[r[t.source]] += 1),\n                t.target && (o[r[t.target]] += 1);\n            }),\n            o)\n          : o;\n      };\n      r.floydWarshall = function (t) {\n        for (var r = [], e = t.length, o = 0; o < e; o += 1) {\n          r[o] = [];\n          for (var n = 0; n < e; n += 1)\n            o === n\n              ? (r[o][n] = 0)\n              : 0 !== t[o][n] && t[o][n]\n              ? (r[o][n] = t[o][n])\n              : (r[o][n] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (o = 0; o < e; o += 1)\n            for (n = 0; n < e; n += 1)\n              r[o][n] > r[o][i] + r[i][n] && (r[o][n] = r[o][i] + r[i][n]);\n        return r;\n      };\n      r.getAdjMatrix = function (t, r) {\n        var e = t.nodes,\n          o = t.edges,\n          n = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, r) {\n              i[t.id] = r;\n              n.push([]);\n            }),\n          o &&\n            o.forEach(function (t) {\n              var e = t.source,\n                o = t.target,\n                s = i[e],\n                u = i[o];\n              (n[s][u] = 1), r || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      r.scaleMatrix = function (t, r) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var o = [];\n            t.forEach(function (t) {\n              o.push(t * r);\n            }),\n              e.push(o);\n          }),\n          e\n        );\n      };\n      r.traverseTreeUp = function (t, r) {\n        \"function\" == typeof r &&\n          (function t(r, e) {\n            if (r && r.children)\n              for (var o = r.children.length - 1; o >= 0; o--)\n                if (!t(r.children[o], e)) return;\n            return !!e(r);\n          })(t, r);\n      };\n    },\n    15: function (t, r, e) {\n      \"use strict\";\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var r, e = 1, o = arguments.length; e < o; e++)\n                for (var n in (r = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.clone = r.isObject = void 0);\n      r.isObject = function (t) {\n        return null !== t && \"object\" === o(t);\n      };\n      r.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return r.clone(t);\n            })\n          );\n        }\n        if (\"object\" === o(t) && t !== {}) {\n          var i = n({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = r.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isFunction = void 0);\n      r.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    168: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), n(e(391), r);\n    },\n    390: function (t, r, e) {\n      \"use strict\";\n      e.r(r);\n      var o = e(168);\n      r.default = o.RadialLayout;\n    },\n    391: function (t, r, e) {\n      \"use strict\";\n      var o,\n        n =\n          (this && this.__extends) ||\n          ((o = function (t, r) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, r) {\n                  t.__proto__ = r;\n                }) ||\n              function (t, r) {\n                for (var e in r)\n                  Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]);\n              })(t, r);\n          }),\n          function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(r) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            o(t, r),\n              (t.prototype =\n                null === r\n                  ? Object.create(r)\n                  : ((e.prototype = r.prototype), new e()));\n          }),\n        i =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.RadialLayout = void 0);\n      var s = e(10),\n        u = e(9),\n        a = i(e(392)),\n        f = i(e(393));\n      function c(t, r) {\n        return Math.sqrt(\n          (t[0] - r[0]) * (t[0] - r[0]) + (t[1] - r[1]) * (t[1] - r[1]),\n        );\n      }\n      var h = (function (t) {\n        function r(r) {\n          var e = t.call(this) || this;\n          return (\n            (e.maxIteration = 1e3),\n            (e.focusNode = null),\n            (e.unitRadius = null),\n            (e.linkDistance = 50),\n            (e.preventOverlap = !1),\n            (e.strictRadial = !0),\n            (e.maxPreventOverlapIteration = 200),\n            (e.sortStrength = 10),\n            (e.nodes = []),\n            (e.edges = []),\n            e.updateCfg(r),\n            e\n          );\n        }\n        return (\n          n(r, t),\n          (r.prototype.getDefaultCfg = function () {\n            return {\n              maxIteration: 1e3,\n              focusNode: null,\n              unitRadius: null,\n              linkDistance: 50,\n              preventOverlap: !1,\n              nodeSize: void 0,\n              nodeSpacing: void 0,\n              strictRadial: !0,\n              maxPreventOverlapIteration: 200,\n              sortBy: void 0,\n              sortStrength: 10,\n            };\n          }),\n          (r.prototype.execute = function () {\n            var t = this,\n              r = t.nodes,\n              e = t.edges || [];\n            if (r && 0 !== r.length) {\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n                t.height ||\n                  \"undefined\" == typeof window ||\n                  (t.height = window.innerHeight),\n                t.center || (t.center = [t.width / 2, t.height / 2]);\n              var o = t.center;\n              if (1 === r.length)\n                return (\n                  (r[0].x = o[0]),\n                  (r[0].y = o[1]),\n                  void (t.onLayoutEnd && t.onLayoutEnd())\n                );\n              var n = t.linkDistance,\n                i = null;\n              if (s.isString(t.focusNode)) {\n                for (var u = !1, c = 0; c < r.length; c++)\n                  r[c].id === t.focusNode &&\n                    ((i = r[c]), (t.focusNode = i), (u = !0), (c = r.length));\n                u || (i = null);\n              } else i = t.focusNode;\n              i || ((i = r[0]), (t.focusNode = i));\n              var h,\n                l,\n                p,\n                y =\n                  ((h = r),\n                  (l = i.id),\n                  (p = -1),\n                  h.forEach(function (t, r) {\n                    t.id === l && (p = r);\n                  }),\n                  p);\n              t.focusIndex = y;\n              var v = s.getAdjMatrix({ nodes: r, edges: e }, !1),\n                m = s.floydWarshall(v),\n                g = t.maxToFocus(m, y);\n              t.handleInfinity(m, y, g + 1), (t.distances = m);\n              var w = m[y],\n                d = t.width || 500,\n                b = t.height || 500,\n                M = d - o[0] > o[0] ? o[0] : d - o[0],\n                x = b - o[1] > o[1] ? o[1] : b - o[1];\n              0 === M && (M = d / 2), 0 === x && (x = b / 2);\n              var k = x > M ? M : x,\n                S = Math.max.apply(Math, w),\n                O = [];\n              w.forEach(function (r, e) {\n                t.unitRadius || (t.unitRadius = k / S),\n                  (O[e] = r * t.unitRadius);\n              }),\n                (t.radii = O);\n              var E = t.eIdealDisMatrix();\n              t.eIdealDistances = E;\n              var j = (function (t) {\n                for (\n                  var r = t.length, e = t[0].length, o = [], n = 0;\n                  n < r;\n                  n++\n                ) {\n                  for (var i = [], s = 0; s < e; s++)\n                    0 !== t[n][s] ? i.push(1 / (t[n][s] * t[n][s])) : i.push(0);\n                  o.push(i);\n                }\n                return o;\n              })(E);\n              t.weights = j;\n              var R = new a.default({ linkDistance: n, distances: E }).layout();\n              R.forEach(function (t) {\n                s.isNaN(t[0]) && (t[0] = Math.random() * n),\n                  s.isNaN(t[1]) && (t[1] = Math.random() * n);\n              }),\n                (t.positions = R),\n                R.forEach(function (t, e) {\n                  (r[e].x = t[0] + o[0]), (r[e].y = t[1] + o[1]);\n                }),\n                R.forEach(function (t) {\n                  (t[0] -= R[y][0]), (t[1] -= R[y][1]);\n                }),\n                t.run();\n              var P,\n                _ = t.preventOverlap,\n                T = t.nodeSize,\n                I = t.strictRadial;\n              if (_) {\n                var N,\n                  C = t.nodeSpacing;\n                (N = s.isNumber(C)\n                  ? function () {\n                      return C;\n                    }\n                  : s.isFunction(C)\n                  ? C\n                  : function () {\n                      return 0;\n                    }),\n                  (P = T\n                    ? s.isArray(T)\n                      ? function (t) {\n                          return (T[0] > T[1] ? T[0] : T[1]) + N(t);\n                        }\n                      : function (t) {\n                          return T + N(t);\n                        }\n                    : function (t) {\n                        return t.size\n                          ? s.isArray(t.size)\n                            ? (t.size[0] > t.size[1] ? t.size[0] : t.size[1]) +\n                              N(t)\n                            : t.size + N(t)\n                          : 10 + N(t);\n                      });\n                var D = {\n                    nodes: r,\n                    nodeSizeFunc: P,\n                    adjMatrix: v,\n                    positions: R,\n                    radii: O,\n                    height: b,\n                    width: d,\n                    strictRadial: I,\n                    focusID: y,\n                    iterations: t.maxPreventOverlapIteration || 200,\n                    k: R.length / 4.5,\n                  },\n                  V = new f.default(D);\n                R = V.layout();\n              }\n              return (\n                R.forEach(function (t, e) {\n                  (r[e].x = t[0] + o[0]), (r[e].y = t[1] + o[1]);\n                }),\n                t.onLayoutEnd && t.onLayoutEnd(),\n                { nodes: r, edges: e }\n              );\n            }\n            t.onLayoutEnd && t.onLayoutEnd();\n          }),\n          (r.prototype.run = function () {\n            for (\n              var t = this.maxIteration,\n                r = this.positions || [],\n                e = this.weights || [],\n                o = this.eIdealDistances || [],\n                n = this.radii || [],\n                i = 0;\n              i <= t;\n              i++\n            ) {\n              var s = i / t;\n              this.oneIteration(s, r, n, o, e);\n            }\n          }),\n          (r.prototype.oneIteration = function (t, r, e, o, n) {\n            var i = 1 - t,\n              s = this.focusIndex;\n            r.forEach(function (u, a) {\n              var f = c(u, [0, 0]),\n                h = 0 === f ? 0 : 1 / f;\n              if (a !== s) {\n                var l = 0,\n                  p = 0,\n                  y = 0;\n                r.forEach(function (t, r) {\n                  if (a !== r) {\n                    var e = c(u, t),\n                      i = 0 === e ? 0 : 1 / e,\n                      s = o[r][a];\n                    (y += n[a][r]),\n                      (l += n[a][r] * (t[0] + s * (u[0] - t[0]) * i)),\n                      (p += n[a][r] * (t[1] + s * (u[1] - t[1]) * i));\n                  }\n                });\n                var v = 0 === e[a] ? 0 : 1 / e[a];\n                (y *= i),\n                  (y += t * v * v),\n                  (l *= i),\n                  (l += t * v * u[0] * h),\n                  (u[0] = l / y),\n                  (p *= i),\n                  (p += t * v * u[1] * h),\n                  (u[1] = p / y);\n              }\n            });\n          }),\n          (r.prototype.eIdealDisMatrix = function () {\n            var t = this,\n              r = t.nodes;\n            if (!r) return [];\n            var e = t.distances,\n              o = t.linkDistance,\n              n = t.radii || [],\n              i = t.unitRadius || 50,\n              u = [];\n            return (\n              e &&\n                e.forEach(function (e, a) {\n                  var f = [];\n                  e.forEach(function (e, u) {\n                    if (a === u) f.push(0);\n                    else if (n[a] === n[u])\n                      if (\"data\" === t.sortBy)\n                        f.push(\n                          (e * (Math.abs(a - u) * t.sortStrength)) / (n[a] / i),\n                        );\n                      else if (t.sortBy) {\n                        var c = r[a][t.sortBy] || 0,\n                          h = r[u][t.sortBy] || 0;\n                        s.isString(c) && (c = c.charCodeAt(0)),\n                          s.isString(h) && (h = h.charCodeAt(0)),\n                          f.push(\n                            (e * (Math.abs(c - h) * t.sortStrength)) /\n                              (n[a] / i),\n                          );\n                      } else f.push((e * o) / (n[a] / i));\n                    else {\n                      var l = (o + i) / 2;\n                      f.push(e * l);\n                    }\n                  }),\n                    u.push(f);\n                }),\n              u\n            );\n          }),\n          (r.prototype.handleInfinity = function (t, r, e) {\n            for (var o = t.length, n = 0; n < o; n++)\n              if (t[r][n] === 1 / 0) {\n                (t[r][n] = e), (t[n][r] = e);\n                for (var i = 0; i < o; i++)\n                  t[n][i] !== 1 / 0 &&\n                    t[r][i] === 1 / 0 &&\n                    ((t[r][i] = e + t[n][i]), (t[i][r] = e + t[n][i]));\n              }\n            for (n = 0; n < o; n++)\n              if (n !== r)\n                for (i = 0; i < o; i++)\n                  if (t[n][i] === 1 / 0) {\n                    var s = Math.abs(t[r][n] - t[r][i]);\n                    (s = 0 === s ? 1 : s), (t[n][i] = s);\n                  }\n          }),\n          (r.prototype.maxToFocus = function (t, r) {\n            for (var e = 0, o = 0; o < t[r].length; o++)\n              t[r][o] !== 1 / 0 && (e = t[r][o] > e ? t[r][o] : e);\n            return e;\n          }),\n          (r.prototype.getType = function () {\n            return \"radial\";\n          }),\n          r\n        );\n      })(u.Base);\n      r.RadialLayout = h;\n    },\n    392: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 });\n      var o = e(96),\n        n = (function () {\n          function t(t) {\n            (this.distances = t.distances),\n              (this.dimension = t.dimension || 2),\n              (this.linkDistance = t.linkDistance);\n          }\n          return (\n            (t.prototype.layout = function () {\n              var t = this.dimension,\n                r = this.distances,\n                e = this.linkDistance;\n              try {\n                var n = o.Matrix.mul(o.Matrix.pow(r, 2), -0.5),\n                  i = n.mean(\"row\"),\n                  s = n.mean(\"column\"),\n                  u = n.mean();\n                n.add(u).subRowVector(i).subColumnVector(s);\n                var a = new o.SingularValueDecomposition(n),\n                  f = o.Matrix.sqrt(a.diagonalMatrix).diagonal();\n                return a.leftSingularVectors.toJSON().map(function (r) {\n                  return o.Matrix.mul([r], [f]).toJSON()[0].splice(0, t);\n                });\n              } catch (t) {\n                for (var c = [], h = 0; h < r.length; h++) {\n                  var l = Math.random() * e,\n                    p = Math.random() * e;\n                  c.push([l, p]);\n                }\n                return c;\n              }\n            }),\n            t\n          );\n        })();\n      r.default = n;\n    },\n    393: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 });\n      var o = (function () {\n        function t(t) {\n          (this.disp = []),\n            (this.positions = t.positions),\n            (this.adjMatrix = t.adjMatrix),\n            (this.focusID = t.focusID),\n            (this.radii = t.radii),\n            (this.iterations = t.iterations || 10),\n            (this.height = t.height || 10),\n            (this.width = t.width || 10),\n            (this.speed = t.speed || 100),\n            (this.gravity = t.gravity || 10),\n            (this.nodeSizeFunc = t.nodeSizeFunc),\n            (this.k = t.k || 5),\n            (this.strictRadial = t.strictRadial),\n            (this.nodes = t.nodes);\n        }\n        return (\n          (t.prototype.layout = function () {\n            var t = this.positions,\n              r = [],\n              e = this.iterations,\n              o = this.width / 10;\n            (this.maxDisplace = o), (this.disp = r);\n            for (var n = 0; n < e; n++)\n              t.forEach(function (t, e) {\n                r[e] = { x: 0, y: 0 };\n              }),\n                this.getRepulsion(),\n                this.updatePositions();\n            return t;\n          }),\n          (t.prototype.getRepulsion = function () {\n            var t = this,\n              r = t.positions,\n              e = t.nodes,\n              o = t.disp,\n              n = t.k,\n              i = t.radii || [];\n            r.forEach(function (s, u) {\n              (o[u] = { x: 0, y: 0 }),\n                r.forEach(function (r, a) {\n                  if (u !== a && i[u] === i[a]) {\n                    var f = s[0] - r[0],\n                      c = s[1] - r[1],\n                      h = Math.sqrt(f * f + c * c);\n                    if (0 === h) {\n                      h = 1;\n                      var l = u > a ? 1 : -1;\n                      (f = 0.01 * l), (c = 0.01 * l);\n                    }\n                    if (\n                      h <\n                      t.nodeSizeFunc(e[u]) / 2 + t.nodeSizeFunc(e[a]) / 2\n                    ) {\n                      var p = (n * n) / h;\n                      (o[u].x += (f / h) * p), (o[u].y += (c / h) * p);\n                    }\n                  }\n                });\n            });\n          }),\n          (t.prototype.updatePositions = function () {\n            var t = this.positions,\n              r = this.disp,\n              e = this.speed,\n              o = this.strictRadial,\n              n = this.focusID,\n              i = this.maxDisplace || this.width / 10;\n            o &&\n              r.forEach(function (r, e) {\n                var o = t[e][0] - t[n][0],\n                  i = t[e][1] - t[n][1],\n                  s = Math.sqrt(o * o + i * i),\n                  u = i / s,\n                  a = -o / s,\n                  f = Math.sqrt(r.x * r.x + r.y * r.y),\n                  c = Math.acos((u * r.x + a * r.y) / f);\n                c > Math.PI / 2 && ((c -= Math.PI / 2), (u *= -1), (a *= -1));\n                var h = Math.cos(c) * f;\n                (r.x = u * h), (r.y = a * h);\n              });\n            var s = this.radii;\n            t.forEach(function (u, a) {\n              if (a !== n) {\n                var f = Math.sqrt(r[a].x * r[a].x + r[a].y * r[a].y);\n                if (f > 0 && a !== n) {\n                  var c = Math.min(i * (e / 800), f);\n                  if (\n                    ((u[0] += (r[a].x / f) * c), (u[1] += (r[a].y / f) * c), o)\n                  ) {\n                    var h = u[0] - t[n][0],\n                      l = u[1] - t[n][1],\n                      p = Math.sqrt(h * h + l * l);\n                    (h = (h / p) * s[a]),\n                      (l = (l / p) * s[a]),\n                      (u[0] = t[n][0] + h),\n                      (u[1] = t[n][1] + l);\n                  }\n                }\n              }\n            });\n          }),\n          t\n        );\n      })();\n      r.default = o;\n    },\n    9: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), (r.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      r.Base = o;\n    },\n    96: function (t, r, e) {\n      \"use strict\";\n      e.r(r),\n        e.d(r, \"AbstractMatrix\", function () {\n          return U;\n        }),\n        e.d(r, \"default\", function () {\n          return H;\n        }),\n        e.d(r, \"Matrix\", function () {\n          return H;\n        }),\n        e.d(r, \"MatrixColumnView\", function () {\n          return ut;\n        }),\n        e.d(r, \"MatrixColumnSelectionView\", function () {\n          return yt;\n        }),\n        e.d(r, \"MatrixFlipColumnView\", function () {\n          return Mt;\n        }),\n        e.d(r, \"MatrixFlipRowView\", function () {\n          return Rt;\n        }),\n        e.d(r, \"MatrixRowView\", function () {\n          return Dt;\n        }),\n        e.d(r, \"MatrixRowSelectionView\", function () {\n          return Lt;\n        }),\n        e.d(r, \"MatrixSelectionView\", function () {\n          return Kt;\n        }),\n        e.d(r, \"MatrixSubView\", function () {\n          return er;\n        }),\n        e.d(r, \"MatrixTransposeView\", function () {\n          return fr;\n        }),\n        e.d(r, \"wrap\", function () {\n          return Or;\n        }),\n        e.d(r, \"WrapperMatrix1D\", function () {\n          return gr;\n        }),\n        e.d(r, \"WrapperMatrix2D\", function () {\n          return Sr;\n        }),\n        e.d(r, \"solve\", function () {\n          return Dr;\n        }),\n        e.d(r, \"inverse\", function () {\n          return Cr;\n        }),\n        e.d(r, \"determinant\", function () {\n          return Vr;\n        }),\n        e.d(r, \"linearDependencies\", function () {\n          return Fr;\n        }),\n        e.d(r, \"pseudoInverse\", function () {\n          return Br;\n        }),\n        e.d(r, \"covariance\", function () {\n          return Lr;\n        }),\n        e.d(r, \"correlation\", function () {\n          return Wr;\n        }),\n        e.d(r, \"SingularValueDecomposition\", function () {\n          return Nr;\n        }),\n        e.d(r, \"SVD\", function () {\n          return Nr;\n        }),\n        e.d(r, \"EigenvalueDecomposition\", function () {\n          return Hr;\n        }),\n        e.d(r, \"EVD\", function () {\n          return Hr;\n        }),\n        e.d(r, \"CholeskyDecomposition\", function () {\n          return te;\n        }),\n        e.d(r, \"CHO\", function () {\n          return te;\n        }),\n        e.d(r, \"LuDecomposition\", function () {\n          return jr;\n        }),\n        e.d(r, \"LU\", function () {\n          return jr;\n        }),\n        e.d(r, \"QrDecomposition\", function () {\n          return _r;\n        }),\n        e.d(r, \"QR\", function () {\n          return _r;\n        }),\n        e.d(r, \"Nipals\", function () {\n          return ne;\n        }),\n        e.d(r, \"NIPALS\", function () {\n          return ne;\n        });\n      var o = Object.prototype.toString;\n      function n(t) {\n        return o.call(t).endsWith(\"Array]\");\n      }\n      function i(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] > u && (u = t[a]);\n        return u;\n      }\n      function s(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] < u && (u = t[a]);\n        return u;\n      }\n      function u(t) {\n        var r,\n          e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        if (void 0 !== e.output) {\n          if (!n(e.output))\n            throw new TypeError(\"output option must be an array if specified\");\n          r = e.output;\n        } else r = new Array(t.length);\n        var o = s(t),\n          u = i(t);\n        if (o === u)\n          throw new RangeError(\n            \"minimum and maximum input values are equal. Cannot rescale a constant array\",\n          );\n        var a = e.min,\n          f = void 0 === a ? (e.autoMinMax ? o : 0) : a,\n          c = e.max,\n          h = void 0 === c ? (e.autoMinMax ? u : 1) : c;\n        if (f >= h)\n          throw new RangeError(\"min option must be smaller than max option\");\n        for (var l = (h - f) / (u - o), p = 0; p < t.length; p++)\n          r[p] = (t[p] - o) * l + f;\n        return r;\n      }\n      var a = \" \".repeat(2),\n        f = \" \".repeat(4);\n      function c(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = r.maxRows,\n          o = void 0 === e ? 15 : e,\n          n = r.maxColumns,\n          i = void 0 === n ? 10 : n,\n          s = r.maxNumSize,\n          u = void 0 === s ? 8 : s;\n        return \"\"\n          .concat(t.constructor.name, \" {\\n\")\n          .concat(a, \"[\\n\")\n          .concat(f)\n          .concat(h(t, o, i, u), \"\\n\")\n          .concat(a, \"]\\n\")\n          .concat(a, \"rows: \")\n          .concat(t.rows, \"\\n\")\n          .concat(a, \"columns: \")\n          .concat(t.columns, \"\\n}\");\n      }\n      function h(t, r, e, o) {\n        for (\n          var n = t.rows,\n            i = t.columns,\n            s = Math.min(n, r),\n            u = Math.min(i, e),\n            a = [],\n            c = 0;\n          c < s;\n          c++\n        ) {\n          for (var h = [], p = 0; p < u; p++) h.push(l(t.get(c, p), o));\n          a.push(\"\".concat(h.join(\" \")));\n        }\n        return (\n          u !== i &&\n            (a[a.length - 1] += \" ... \".concat(i - e, \" more columns\")),\n          s !== n && a.push(\"... \".concat(n - r, \" more rows\")),\n          a.join(\"\\n\".concat(f))\n        );\n      }\n      function l(t, r) {\n        var e = String(t);\n        if (e.length <= r) return e.padEnd(r, \" \");\n        var o = t.toPrecision(r - 2);\n        if (o.length <= r) return o;\n        var n = t.toExponential(r - 2),\n          i = n.indexOf(\"e\"),\n          s = n.slice(i);\n        return n.slice(0, r - s.length) + s;\n      }\n      function p(t, r, e) {\n        var o = e ? t.rows : t.rows - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Row index out of range\");\n      }\n      function y(t, r, e) {\n        var o = e ? t.columns : t.columns - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Column index out of range\");\n      }\n      function v(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.columns))\n          throw new RangeError(\n            \"vector size must be the same as the number of columns\",\n          );\n        return r;\n      }\n      function m(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.rows))\n          throw new RangeError(\n            \"vector size must be the same as the number of rows\",\n          );\n        return r;\n      }\n      function g(t, r) {\n        if (!n(r)) throw new TypeError(\"row indices must be an array\");\n        for (var e = 0; e < r.length; e++)\n          if (r[e] < 0 || r[e] >= t.rows)\n            throw new RangeError(\"row indices are out of range\");\n      }\n      function w(t, r) {\n        if (!n(r)) throw new TypeError(\"column indices must be an array\");\n        for (var e = 0; e < r.length; e++)\n          if (r[e] < 0 || r[e] >= t.columns)\n            throw new RangeError(\"column indices are out of range\");\n      }\n      function d(t, r, e, o, n) {\n        if (5 !== arguments.length)\n          throw new RangeError(\"expected 4 arguments\");\n        if (\n          (M(\"startRow\", r),\n          M(\"endRow\", e),\n          M(\"startColumn\", o),\n          M(\"endColumn\", n),\n          r > e ||\n            o > n ||\n            r < 0 ||\n            r >= t.rows ||\n            e < 0 ||\n            e >= t.rows ||\n            o < 0 ||\n            o >= t.columns ||\n            n < 0 ||\n            n >= t.columns)\n        )\n          throw new RangeError(\"Submatrix indices are out of range\");\n      }\n      function b(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : 0,\n            e = [],\n            o = 0;\n          o < t;\n          o++\n        )\n          e.push(r);\n        return e;\n      }\n      function M(t, r) {\n        if (\"number\" != typeof r)\n          throw new TypeError(\"\".concat(t, \" must be a number\"));\n      }\n      function x(t) {\n        if (t.isEmpty())\n          throw new Error(\"Empty matrix has no elements to index\");\n      }\n      function k(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < o; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < n; c++)\n            (u += f = t.get(s, c) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / n) / (n - 1))\n            : i.push((a - (u * u) / n) / n);\n        }\n        return i;\n      }\n      function S(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < n; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < o; c++)\n            (u += f = t.get(c, s) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / o) / (o - 1))\n            : i.push((a - (u * u) / o) / o);\n        }\n        return i;\n      }\n      function O(t, r, e) {\n        for (\n          var o = t.rows, n = t.columns, i = o * n, s = 0, u = 0, a = 0, f = 0;\n          f < o;\n          f++\n        )\n          for (var c = 0; c < n; c++) (s += a = t.get(f, c) - e), (u += a * a);\n        return r ? (u - (s * s) / i) / (i - 1) : (u - (s * s) / i) / i;\n      }\n      function E(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[e]);\n      }\n      function j(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[o]);\n      }\n      function R(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r);\n      }\n      function P(t) {\n        for (var r = [], e = 0; e < t.rows; e++) {\n          for (var o = 0, n = 0; n < t.columns; n++)\n            o += Math.pow(t.get(e, n), 2) / (t.columns - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function _(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[e]);\n      }\n      function T(t) {\n        for (var r = [], e = 0; e < t.columns; e++) {\n          for (var o = 0, n = 0; n < t.rows; n++)\n            o += Math.pow(t.get(n, e), 2) / (t.rows - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function I(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[o]);\n      }\n      function N(t) {\n        for (var r = t.size - 1, e = 0, o = 0; o < t.columns; o++)\n          for (var n = 0; n < t.rows; n++) e += Math.pow(t.get(n, o), 2) / r;\n        return Math.sqrt(e);\n      }\n      function C(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r);\n      }\n      function D(t, r) {\n        return (D =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function V(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = A(t);\n          if (r) {\n            var n = A(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return q(this, e);\n        };\n      }\n      function q(t, r) {\n        if (r && (\"object\" === F(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function A(t) {\n        return (A = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      function F(t) {\n        return (F =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function B(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function z(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function L(t, r, e) {\n        return (\n          r && z(t.prototype, r),\n          e && z(t, e),\n          Object.defineProperty(t, \"prototype\", { writable: !1 }),\n          t\n        );\n      }\n      var U = (function () {\n        function t() {\n          B(this, t);\n        }\n        return (\n          L(\n            t,\n            [\n              {\n                key: \"size\",\n                get: function () {\n                  return this.rows * this.columns;\n                },\n              },\n              {\n                key: \"apply\",\n                value: function (t) {\n                  if (\"function\" != typeof t)\n                    throw new TypeError(\"callback must be a function\");\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) t.call(this, r, e);\n                  return this;\n                },\n              },\n              {\n                key: \"to1DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      t.push(this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"to2DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++) {\n                    t.push([]);\n                    for (var e = 0; e < this.columns; e++)\n                      t[r].push(this.get(r, e));\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"toJSON\",\n                value: function () {\n                  return this.to2DArray();\n                },\n              },\n              {\n                key: \"isRowVector\",\n                value: function () {\n                  return 1 === this.rows;\n                },\n              },\n              {\n                key: \"isColumnVector\",\n                value: function () {\n                  return 1 === this.columns;\n                },\n              },\n              {\n                key: \"isVector\",\n                value: function () {\n                  return 1 === this.rows || 1 === this.columns;\n                },\n              },\n              {\n                key: \"isSquare\",\n                value: function () {\n                  return this.rows === this.columns;\n                },\n              },\n              {\n                key: \"isEmpty\",\n                value: function () {\n                  return 0 === this.rows || 0 === this.columns;\n                },\n              },\n              {\n                key: \"isSymmetric\",\n                value: function () {\n                  if (this.isSquare()) {\n                    for (var t = 0; t < this.rows; t++)\n                      for (var r = 0; r <= t; r++)\n                        if (this.get(t, r) !== this.get(r, t)) return !1;\n                    return !0;\n                  }\n                  return !1;\n                },\n              },\n              {\n                key: \"isEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"isReducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    for (var i = r + 1; i < this.rows; i++)\n                      0 !== this.get(t, i) && (o = !1);\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"echelonForm\",\n                value: function () {\n                  for (\n                    var t = this.clone(), r = 0, e = 0;\n                    r < t.rows && e < t.columns;\n\n                  ) {\n                    for (var o = r, n = r; n < t.rows; n++)\n                      t.get(n, e) > t.get(o, e) && (o = n);\n                    if (0 === t.get(o, e)) e++;\n                    else {\n                      t.swapRows(r, o);\n                      for (var i = t.get(r, e), s = e; s < t.columns; s++)\n                        t.set(r, s, t.get(r, s) / i);\n                      for (var u = r + 1; u < t.rows; u++) {\n                        var a = t.get(u, e) / t.get(r, e);\n                        t.set(u, e, 0);\n                        for (var f = e + 1; f < t.columns; f++)\n                          t.set(u, f, t.get(u, f) - t.get(r, f) * a);\n                      }\n                      r++, e++;\n                    }\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"reducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = this.echelonForm(),\n                      r = t.columns,\n                      e = t.rows,\n                      o = e - 1;\n                    o >= 0;\n\n                  )\n                    if (0 === t.maxRow(o)) o--;\n                    else {\n                      for (var n = 0, i = !1; n < e && !1 === i; )\n                        1 === t.get(o, n) ? (i = !0) : n++;\n                      for (var s = 0; s < o; s++)\n                        for (var u = t.get(s, n), a = n; a < r; a++) {\n                          var f = t.get(s, a) - u * t.get(o, a);\n                          t.set(s, a, f);\n                        }\n                      o--;\n                    }\n                  return t;\n                },\n              },\n              {\n                key: \"set\",\n                value: function () {\n                  throw new Error(\"set method is unimplemented\");\n                },\n              },\n              {\n                key: \"get\",\n                value: function () {\n                  throw new Error(\"get method is unimplemented\");\n                },\n              },\n              {\n                key: \"repeat\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== F(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.rows,\n                    e = void 0 === r ? 1 : r,\n                    o = t.columns,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isInteger(e) || e <= 0)\n                    throw new TypeError(\"rows must be a positive integer\");\n                  if (!Number.isInteger(n) || n <= 0)\n                    throw new TypeError(\"columns must be a positive integer\");\n                  for (\n                    var i = new H(this.rows * e, this.columns * n), s = 0;\n                    s < e;\n                    s++\n                  )\n                    for (var u = 0; u < n; u++)\n                      i.setSubMatrix(this, this.rows * s, this.columns * u);\n                  return i;\n                },\n              },\n              {\n                key: \"fill\",\n                value: function (t) {\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"neg\",\n                value: function () {\n                  return this.mulS(-1);\n                },\n              },\n              {\n                key: \"getRow\",\n                value: function (t) {\n                  p(this, t);\n                  for (var r = [], e = 0; e < this.columns; e++)\n                    r.push(this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"getRowVector\",\n                value: function (t) {\n                  return H.rowVector(this.getRow(t));\n                },\n              },\n              {\n                key: \"setRow\",\n                value: function (t, r) {\n                  p(this, t), (r = v(this, r));\n                  for (var e = 0; e < this.columns; e++) this.set(t, e, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapRows\",\n                value: function (t, r) {\n                  p(this, t), p(this, r);\n                  for (var e = 0; e < this.columns; e++) {\n                    var o = this.get(t, e);\n                    this.set(t, e, this.get(r, e)), this.set(r, e, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"getColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = [], e = 0; e < this.rows; e++)\n                    r.push(this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"getColumnVector\",\n                value: function (t) {\n                  return H.columnVector(this.getColumn(t));\n                },\n              },\n              {\n                key: \"setColumn\",\n                value: function (t, r) {\n                  y(this, t), (r = m(this, r));\n                  for (var e = 0; e < this.rows; e++) this.set(e, t, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapColumns\",\n                value: function (t, r) {\n                  y(this, t), y(this, r);\n                  for (var e = 0; e < this.rows; e++) {\n                    var o = this.get(e, t);\n                    this.set(e, t, this.get(e, r)), this.set(e, r, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"addRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"subRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"divRowVector\",\n                value: function (t) {\n                  t = v(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"addColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"subColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"divColumnVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRow\",\n                value: function (t, r) {\n                  p(this, t);\n                  for (var e = 0; e < this.columns; e++)\n                    this.set(t, e, this.get(t, e) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumn\",\n                value: function (t, r) {\n                  y(this, t);\n                  for (var e = 0; e < this.rows; e++)\n                    this.set(e, t, this.get(e, t) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"max\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) > t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"maxIndex\",\n                value: function () {\n                  x(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) > t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"min\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) < t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"minIndex\",\n                value: function () {\n                  x(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) < t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRow\",\n                value: function (t) {\n                  if ((p(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) > r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRowIndex\",\n                value: function (t) {\n                  p(this, t), x(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) > r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minRow\",\n                value: function (t) {\n                  if ((p(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) < r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"minRowIndex\",\n                value: function (t) {\n                  p(this, t), x(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) < r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"maxColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) > r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"maxColumnIndex\",\n                value: function (t) {\n                  y(this, t), x(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) > r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) < r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"minColumnIndex\",\n                value: function (t) {\n                  y(this, t), x(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) < r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = [], e = 0;\n                    e < t;\n                    e++\n                  )\n                    r.push(this.get(e, e));\n                  return r;\n                },\n              },\n              {\n                key: \"norm\",\n                value: function () {\n                  var t =\n                      arguments.length > 0 && void 0 !== arguments[0]\n                        ? arguments[0]\n                        : \"frobenius\",\n                    r = 0;\n                  if (\"max\" === t) return this.max();\n                  if (\"frobenius\" === t) {\n                    for (var e = 0; e < this.rows; e++)\n                      for (var o = 0; o < this.columns; o++)\n                        r += this.get(e, o) * this.get(e, o);\n                    return Math.sqrt(r);\n                  }\n                  throw new RangeError(\"unknown norm type: \".concat(t));\n                },\n              },\n              {\n                key: \"cumulativeSum\",\n                value: function () {\n                  for (var t = 0, r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      (t += this.get(r, e)), this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"dot\",\n                value: function (r) {\n                  t.isMatrix(r) && (r = r.to1DArray());\n                  var e = this.to1DArray();\n                  if (e.length !== r.length)\n                    throw new RangeError(\"vectors do not have the same size\");\n                  for (var o = 0, n = 0; n < e.length; n++) o += e[n] * r[n];\n                  return o;\n                },\n              },\n              {\n                key: \"mmul\",\n                value: function (t) {\n                  t = H.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.columns,\n                      n = new H(r, o),\n                      i = new Float64Array(e),\n                      s = 0;\n                    s < o;\n                    s++\n                  ) {\n                    for (var u = 0; u < e; u++) i[u] = t.get(u, s);\n                    for (var a = 0; a < r; a++) {\n                      for (var f = 0, c = 0; c < e; c++)\n                        f += this.get(a, c) * i[c];\n                      n.set(a, s, f);\n                    }\n                  }\n                  return n;\n                },\n              },\n              {\n                key: \"strassen2x2\",\n                value: function (t) {\n                  t = H.checkMatrix(t);\n                  var r = new H(2, 2),\n                    e = this.get(0, 0),\n                    o = t.get(0, 0),\n                    n = this.get(0, 1),\n                    i = t.get(0, 1),\n                    s = this.get(1, 0),\n                    u = t.get(1, 0),\n                    a = this.get(1, 1),\n                    f = t.get(1, 1),\n                    c = (e + a) * (o + f),\n                    h = (s + a) * o,\n                    l = e * (i - f),\n                    p = a * (u - o),\n                    y = (e + n) * f,\n                    v = c + p - y + (n - a) * (u + f),\n                    m = l + y,\n                    g = h + p,\n                    w = c - h + l + (s - e) * (o + i);\n                  return (\n                    r.set(0, 0, v),\n                    r.set(0, 1, m),\n                    r.set(1, 0, g),\n                    r.set(1, 1, w),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"strassen3x3\",\n                value: function (t) {\n                  t = H.checkMatrix(t);\n                  var r = new H(3, 3),\n                    e = this.get(0, 0),\n                    o = this.get(0, 1),\n                    n = this.get(0, 2),\n                    i = this.get(1, 0),\n                    s = this.get(1, 1),\n                    u = this.get(1, 2),\n                    a = this.get(2, 0),\n                    f = this.get(2, 1),\n                    c = this.get(2, 2),\n                    h = t.get(0, 0),\n                    l = t.get(0, 1),\n                    p = t.get(0, 2),\n                    y = t.get(1, 0),\n                    v = t.get(1, 1),\n                    m = t.get(1, 2),\n                    g = t.get(2, 0),\n                    w = t.get(2, 1),\n                    d = t.get(2, 2),\n                    b = (e - i) * (-l + v),\n                    M = (-e + i + s) * (h - l + v),\n                    x = (i + s) * (-h + l),\n                    k = e * h,\n                    S = (-e + a + f) * (h - p + m),\n                    O = (-e + a) * (p - m),\n                    E = (a + f) * (-h + p),\n                    j = (-n + f + c) * (v + g - w),\n                    R = (n - c) * (v - w),\n                    P = n * g,\n                    _ = (f + c) * (-g + w),\n                    T = (-n + s + u) * (m + g - d),\n                    I = (n - u) * (m - d),\n                    N = (s + u) * (-g + d),\n                    C = k + P + o * y,\n                    D = (e + o + n - i - s - f - c) * v + M + x + k + j + P + _,\n                    V = k + S + E + (e + o + n - s - u - a - f) * m + P + T + N,\n                    q =\n                      b + s * (-h + l + y - v - m - g + d) + M + k + P + T + I,\n                    A = b + M + x + k + u * w,\n                    F = P + T + I + N + i * p,\n                    B =\n                      k + S + O + f * (-h + p + y - v - m - g + w) + j + R + P,\n                    z = j + R + P + _ + a * l,\n                    L = k + S + O + E + c * d;\n                  return (\n                    r.set(0, 0, C),\n                    r.set(0, 1, D),\n                    r.set(0, 2, V),\n                    r.set(1, 0, q),\n                    r.set(1, 1, A),\n                    r.set(1, 2, F),\n                    r.set(2, 0, B),\n                    r.set(2, 1, z),\n                    r.set(2, 2, L),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"mmulStrassen\",\n                value: function (r) {\n                  r = H.checkMatrix(r);\n                  var e = this.clone(),\n                    o = e.rows,\n                    n = e.columns,\n                    i = r.rows,\n                    s = r.columns;\n                  function u(r, e, o) {\n                    var n = r.rows,\n                      i = r.columns;\n                    if (n === e && i === o) return r;\n                    var s = t.zeros(e, o);\n                    return (s = s.setSubMatrix(r, 0, 0));\n                  }\n                  n !== i &&\n                    console.warn(\n                      \"Multiplying \"\n                        .concat(o, \" x \")\n                        .concat(n, \" and \")\n                        .concat(i, \" x \")\n                        .concat(s, \" matrix: dimensions do not match.\"),\n                    );\n                  var a = Math.max(o, i),\n                    f = Math.max(n, s);\n                  return (function r(e, o, n, i) {\n                    if (n <= 512 || i <= 512) return e.mmul(o);\n                    n % 2 == 1 && i % 2 == 1\n                      ? ((e = u(e, n + 1, i + 1)), (o = u(o, n + 1, i + 1)))\n                      : n % 2 == 1\n                      ? ((e = u(e, n + 1, i)), (o = u(o, n + 1, i)))\n                      : i % 2 == 1 &&\n                        ((e = u(e, n, i + 1)), (o = u(o, n, i + 1)));\n                    var s = parseInt(e.rows / 2, 10),\n                      a = parseInt(e.columns / 2, 10),\n                      f = e.subMatrix(0, s - 1, 0, a - 1),\n                      c = o.subMatrix(0, s - 1, 0, a - 1),\n                      h = e.subMatrix(0, s - 1, a, e.columns - 1),\n                      l = o.subMatrix(0, s - 1, a, o.columns - 1),\n                      p = e.subMatrix(s, e.rows - 1, 0, a - 1),\n                      y = o.subMatrix(s, o.rows - 1, 0, a - 1),\n                      v = e.subMatrix(s, e.rows - 1, a, e.columns - 1),\n                      m = o.subMatrix(s, o.rows - 1, a, o.columns - 1),\n                      g = r(t.add(f, v), t.add(c, m), s, a),\n                      w = r(t.add(p, v), c, s, a),\n                      d = r(f, t.sub(l, m), s, a),\n                      b = r(v, t.sub(y, c), s, a),\n                      M = r(t.add(f, h), m, s, a),\n                      x = r(t.sub(p, f), t.add(c, l), s, a),\n                      k = r(t.sub(h, v), t.add(y, m), s, a),\n                      S = t.add(g, b);\n                    S.sub(M), S.add(k);\n                    var O = t.add(d, M),\n                      E = t.add(w, b),\n                      j = t.sub(g, w);\n                    j.add(d), j.add(x);\n                    var R = t.zeros(2 * S.rows, 2 * S.columns);\n                    return (R = (R = (R = (R = R.setSubMatrix(\n                      S,\n                      0,\n                      0,\n                    )).setSubMatrix(O, S.rows, 0)).setSubMatrix(\n                      E,\n                      0,\n                      S.columns,\n                    )).setSubMatrix(j, S.rows, S.columns)).subMatrix(\n                      0,\n                      n - 1,\n                      0,\n                      i - 1,\n                    );\n                  })((e = u(e, a, f)), (r = u(r, a, f)), a, f);\n                },\n              },\n              {\n                key: \"scaleRows\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== F(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new H(this.rows, this.columns), s = 0;\n                    s < this.rows;\n                    s++\n                  ) {\n                    var a = this.getRow(s);\n                    a.length > 0 && u(a, { min: e, max: n, output: a }),\n                      i.setRow(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"scaleColumns\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== F(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new H(this.rows, this.columns), s = 0;\n                    s < this.columns;\n                    s++\n                  ) {\n                    var a = this.getColumn(s);\n                    a.length && u(a, { min: e, max: n, output: a }),\n                      i.setColumn(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"flipRows\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.columns / 2), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(r, e),\n                        n = this.get(r, this.columns - 1 - e);\n                      this.set(r, e, n), this.set(r, this.columns - 1 - e, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"flipColumns\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.rows / 2), r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(e, r),\n                        n = this.get(this.rows - 1 - e, r);\n                      this.set(e, r, n), this.set(this.rows - 1 - e, r, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"kroneckerProduct\",\n                value: function (t) {\n                  t = H.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.rows,\n                      n = t.columns,\n                      i = new H(r * o, e * n),\n                      s = 0;\n                    s < r;\n                    s++\n                  )\n                    for (var u = 0; u < e; u++)\n                      for (var a = 0; a < o; a++)\n                        for (var f = 0; f < n; f++)\n                          i.set(\n                            o * s + a,\n                            n * u + f,\n                            this.get(s, u) * t.get(a, f),\n                          );\n                  return i;\n                },\n              },\n              {\n                key: \"kroneckerSum\",\n                value: function (t) {\n                  if (\n                    ((t = H.checkMatrix(t)), !this.isSquare() || !t.isSquare())\n                  )\n                    throw new Error(\"Kronecker Sum needs two Square Matrices\");\n                  var r = this.rows,\n                    e = t.rows,\n                    o = this.kroneckerProduct(H.eye(e, e)),\n                    n = H.eye(r, r).kroneckerProduct(t);\n                  return o.add(n);\n                },\n              },\n              {\n                key: \"transpose\",\n                value: function () {\n                  for (\n                    var t = new H(this.columns, this.rows), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(e, r, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sortRows\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : W,\n                      r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    this.setRow(r, this.getRow(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"sortColumns\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : W,\n                      r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    this.setColumn(r, this.getColumn(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"subMatrix\",\n                value: function (t, r, e, o) {\n                  d(this, t, r, e, o);\n                  for (var n = new H(r - t + 1, o - e + 1), i = t; i <= r; i++)\n                    for (var s = e; s <= o; s++)\n                      n.set(i - t, s - e, this.get(i, s));\n                  return n;\n                },\n              },\n              {\n                key: \"subMatrixRow\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.columns - 1),\n                    r > e ||\n                      r < 0 ||\n                      r >= this.columns ||\n                      e < 0 ||\n                      e >= this.columns)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new H(t.length, e - r + 1), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.rows)\n                        throw new RangeError(\n                          \"Row index out of range: \".concat(t[n]),\n                        );\n                      o.set(n, i - r, this.get(t[n], i));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"subMatrixColumn\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.rows - 1),\n                    r > e || r < 0 || r >= this.rows || e < 0 || e >= this.rows)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new H(e - r + 1, t.length), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.columns)\n                        throw new RangeError(\n                          \"Column index out of range: \".concat(t[n]),\n                        );\n                      o.set(i - r, n, this.get(i, t[n]));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"setSubMatrix\",\n                value: function (t, r, e) {\n                  if ((t = H.checkMatrix(t)).isEmpty()) return this;\n                  d(this, r, r + t.rows - 1, e, e + t.columns - 1);\n                  for (var o = 0; o < t.rows; o++)\n                    for (var n = 0; n < t.columns; n++)\n                      this.set(r + o, e + n, t.get(o, n));\n                  return this;\n                },\n              },\n              {\n                key: \"selection\",\n                value: function (t, r) {\n                  g(this, t), w(this, r);\n                  for (\n                    var e = new H(t.length, r.length), o = 0;\n                    o < t.length;\n                    o++\n                  )\n                    for (var n = t[o], i = 0; i < r.length; i++) {\n                      var s = r[i];\n                      e.set(o, i, this.get(n, s));\n                    }\n                  return e;\n                },\n              },\n              {\n                key: \"trace\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = 0, e = 0;\n                    e < t;\n                    e++\n                  )\n                    r += this.get(e, e);\n                  return r;\n                },\n              },\n              {\n                key: \"clone\",\n                value: function () {\n                  for (\n                    var t = new H(this.rows, this.columns), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(r, e, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sum\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = b(t.rows), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = b(t.columns), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 0, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r += t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"product\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = b(t.rows, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = b(t.columns, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 1, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r *= t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"mean\",\n                value: function (t) {\n                  var r = this.sum(t);\n                  switch (t) {\n                    case \"row\":\n                      for (var e = 0; e < this.rows; e++) r[e] /= this.columns;\n                      return r;\n                    case \"column\":\n                      for (var o = 0; o < this.columns; o++) r[o] /= this.rows;\n                      return r;\n                    case void 0:\n                      return r / this.size;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"variance\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === F(t) && ((r = t), (t = void 0)),\n                    \"object\" !== F(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.unbiased,\n                    i = void 0 === o || o,\n                    s = e.mean,\n                    u = void 0 === s ? this.mean(t) : s;\n                  if (\"boolean\" != typeof i)\n                    throw new TypeError(\"unbiased must be a boolean\");\n                  switch (t) {\n                    case \"row\":\n                      if (!n(u)) throw new TypeError(\"mean must be an array\");\n                      return k(this, i, u);\n                    case \"column\":\n                      if (!n(u)) throw new TypeError(\"mean must be an array\");\n                      return S(this, i, u);\n                    case void 0:\n                      if (\"number\" != typeof u)\n                        throw new TypeError(\"mean must be a number\");\n                      return O(this, i, u);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"standardDeviation\",\n                value: function (t, r) {\n                  \"object\" === F(t) && ((r = t), (t = void 0));\n                  var e = this.variance(t, r);\n                  if (void 0 === t) return Math.sqrt(e);\n                  for (var o = 0; o < e.length; o++) e[o] = Math.sqrt(e[o]);\n                  return e;\n                },\n              },\n              {\n                key: \"center\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === F(t) && ((r = t), (t = void 0)),\n                    \"object\" !== F(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.center,\n                    i = void 0 === o ? this.mean(t) : o;\n                  switch (t) {\n                    case \"row\":\n                      if (!n(i)) throw new TypeError(\"center must be an array\");\n                      return E(this, i), this;\n                    case \"column\":\n                      if (!n(i)) throw new TypeError(\"center must be an array\");\n                      return j(this, i), this;\n                    case void 0:\n                      if (\"number\" != typeof i)\n                        throw new TypeError(\"center must be a number\");\n                      return R(this, i), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"scale\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === F(t) && ((r = t), (t = void 0)),\n                    \"object\" !== F(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r.scale;\n                  switch (t) {\n                    case \"row\":\n                      if (void 0 === e) e = P(this);\n                      else if (!n(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return _(this, e), this;\n                    case \"column\":\n                      if (void 0 === e) e = T(this);\n                      else if (!n(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return I(this, e), this;\n                    case void 0:\n                      if (void 0 === e) e = N(this);\n                      else if (\"number\" != typeof e)\n                        throw new TypeError(\"scale must be a number\");\n                      return C(this, e), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"toString\",\n                value: function (t) {\n                  return c(this, t);\n                },\n              },\n            ],\n            [\n              {\n                key: \"from1DArray\",\n                value: function (t, r, e) {\n                  if (t * r !== e.length)\n                    throw new RangeError(\n                      \"data length does not match given dimensions\",\n                    );\n                  for (var o = new H(t, r), n = 0; n < t; n++)\n                    for (var i = 0; i < r; i++) o.set(n, i, e[n * r + i]);\n                  return o;\n                },\n              },\n              {\n                key: \"rowVector\",\n                value: function (t) {\n                  for (var r = new H(1, t.length), e = 0; e < t.length; e++)\n                    r.set(0, e, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"columnVector\",\n                value: function (t) {\n                  for (var r = new H(t.length, 1), e = 0; e < t.length; e++)\n                    r.set(e, 0, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"zeros\",\n                value: function (t, r) {\n                  return new H(t, r);\n                },\n              },\n              {\n                key: \"ones\",\n                value: function (t, r) {\n                  return new H(t, r).fill(1);\n                },\n              },\n              {\n                key: \"rand\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== F(e))\n                    throw new TypeError(\"options must be an object\");\n                  for (\n                    var o = e.random,\n                      n = void 0 === o ? Math.random : o,\n                      i = new H(t, r),\n                      s = 0;\n                    s < t;\n                    s++\n                  )\n                    for (var u = 0; u < r; u++) i.set(s, u, n());\n                  return i;\n                },\n              },\n              {\n                key: \"randInt\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== F(e))\n                    throw new TypeError(\"options must be an object\");\n                  var o = e.min,\n                    n = void 0 === o ? 0 : o,\n                    i = e.max,\n                    s = void 0 === i ? 1e3 : i,\n                    u = e.random,\n                    a = void 0 === u ? Math.random : u;\n                  if (!Number.isInteger(n))\n                    throw new TypeError(\"min must be an integer\");\n                  if (!Number.isInteger(s))\n                    throw new TypeError(\"max must be an integer\");\n                  if (n >= s)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (var f = s - n, c = new H(t, r), h = 0; h < t; h++)\n                    for (var l = 0; l < r; l++) {\n                      var p = n + Math.round(a() * f);\n                      c.set(h, l, p);\n                    }\n                  return c;\n                },\n              },\n              {\n                key: \"eye\",\n                value: function (t, r, e) {\n                  void 0 === r && (r = t), void 0 === e && (e = 1);\n                  for (\n                    var o = Math.min(t, r), n = this.zeros(t, r), i = 0;\n                    i < o;\n                    i++\n                  )\n                    n.set(i, i, e);\n                  return n;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function (t, r, e) {\n                  var o = t.length;\n                  void 0 === r && (r = o), void 0 === e && (e = r);\n                  for (\n                    var n = Math.min(o, r, e), i = this.zeros(r, e), s = 0;\n                    s < n;\n                    s++\n                  )\n                    i.set(s, s, t[s]);\n                  return i;\n                },\n              },\n              {\n                key: \"min\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new H(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.min(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"max\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new this(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.max(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"checkMatrix\",\n                value: function (r) {\n                  return t.isMatrix(r) ? r : new H(r);\n                },\n              },\n              {\n                key: \"isMatrix\",\n                value: function (t) {\n                  return null != t && \"Matrix\" === t.klass;\n                },\n              },\n            ],\n          ),\n          t\n        );\n      })();\n      function W(t, r) {\n        return t - r;\n      }\n      (U.prototype.klass = \"Matrix\"),\n        \"undefined\" != typeof Symbol &&\n          (U.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = function () {\n            return c(this);\n          }),\n        (U.random = U.rand),\n        (U.randomInt = U.randInt),\n        (U.diagonal = U.diag),\n        (U.prototype.diagonal = U.prototype.diag),\n        (U.identity = U.eye),\n        (U.prototype.negate = U.prototype.neg),\n        (U.prototype.tensorProduct = U.prototype.kroneckerProduct);\n      var Q,\n        J,\n        H = (function (t) {\n          !(function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Super expression must either be null or a function\",\n              );\n            (t.prototype = Object.create(r && r.prototype, {\n              constructor: { value: t, writable: !0, configurable: !0 },\n            })),\n              Object.defineProperty(t, \"prototype\", { writable: !1 }),\n              r && D(t, r);\n          })(e, t);\n          var r = V(e);\n          function e(t, o) {\n            var i;\n            if ((B(this, e), (i = r.call(this)), e.isMatrix(t)))\n              return q(i, t.clone());\n            if (Number.isInteger(t) && t >= 0) {\n              if (((i.data = []), !(Number.isInteger(o) && o >= 0)))\n                throw new TypeError(\"nColumns must be a positive integer\");\n              for (var s = 0; s < t; s++) i.data.push(new Float64Array(o));\n            } else {\n              if (!n(t))\n                throw new TypeError(\n                  \"First argument must be a positive number or an array\",\n                );\n              var u = t;\n              if (\"number\" != typeof (o = (t = u.length) ? u[0].length : 0))\n                throw new TypeError(\n                  \"Data must be a 2D array with at least one element\",\n                );\n              i.data = [];\n              for (var a = 0; a < t; a++) {\n                if (u[a].length !== o)\n                  throw new RangeError(\"Inconsistent array dimensions\");\n                i.data.push(Float64Array.from(u[a]));\n              }\n            }\n            return (i.rows = t), (i.columns = o), i;\n          }\n          return (\n            L(e, [\n              {\n                key: \"set\",\n                value: function (t, r, e) {\n                  return (this.data[t][r] = e), this;\n                },\n              },\n              {\n                key: \"get\",\n                value: function (t, r) {\n                  return this.data[t][r];\n                },\n              },\n              {\n                key: \"removeRow\",\n                value: function (t) {\n                  return (\n                    p(this, t), this.data.splice(t, 1), (this.rows -= 1), this\n                  );\n                },\n              },\n              {\n                key: \"addRow\",\n                value: function (t, r) {\n                  return (\n                    void 0 === r && ((r = t), (t = this.rows)),\n                    p(this, t, !0),\n                    (r = Float64Array.from(v(this, r))),\n                    this.data.splice(t, 0, r),\n                    (this.rows += 1),\n                    this\n                  );\n                },\n              },\n              {\n                key: \"removeColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = 0; r < this.rows; r++) {\n                    for (\n                      var e = new Float64Array(this.columns - 1), o = 0;\n                      o < t;\n                      o++\n                    )\n                      e[o] = this.data[r][o];\n                    for (var n = t + 1; n < this.columns; n++)\n                      e[n - 1] = this.data[r][n];\n                    this.data[r] = e;\n                  }\n                  return (this.columns -= 1), this;\n                },\n              },\n              {\n                key: \"addColumn\",\n                value: function (t, r) {\n                  void 0 === r && ((r = t), (t = this.columns)),\n                    y(this, t, !0),\n                    (r = m(this, r));\n                  for (var e = 0; e < this.rows; e++) {\n                    for (\n                      var o = new Float64Array(this.columns + 1), n = 0;\n                      n < t;\n                      n++\n                    )\n                      o[n] = this.data[e][n];\n                    for (o[n++] = r[e]; n < this.columns + 1; n++)\n                      o[n] = this.data[e][n - 1];\n                    this.data[e] = o;\n                  }\n                  return (this.columns += 1), this;\n                },\n              },\n            ]),\n            e\n          );\n        })(U);\n      function Y(t) {\n        return (Y =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function K(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function X(t, r) {\n        return (X =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function G(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = $(t);\n          if (r) {\n            var n = $(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Z(this, e);\n        };\n      }\n      function Z(t, r) {\n        if (r && (\"object\" === Y(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function $(t) {\n        return ($ = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      (J = H),\n        ((Q = U).prototype.add = function (t) {\n          return \"number\" == typeof t ? this.addS(t) : this.addM(t);\n        }),\n        (Q.prototype.addS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t);\n          return this;\n        }),\n        (Q.prototype.addM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t.get(r, e));\n          return this;\n        }),\n        (Q.add = function (t, r) {\n          return new J(t).add(r);\n        }),\n        (Q.prototype.sub = function (t) {\n          return \"number\" == typeof t ? this.subS(t) : this.subM(t);\n        }),\n        (Q.prototype.subS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t);\n          return this;\n        }),\n        (Q.prototype.subM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t.get(r, e));\n          return this;\n        }),\n        (Q.sub = function (t, r) {\n          return new J(t).sub(r);\n        }),\n        (Q.prototype.subtract = Q.prototype.sub),\n        (Q.prototype.subtractS = Q.prototype.subS),\n        (Q.prototype.subtractM = Q.prototype.subM),\n        (Q.subtract = Q.sub),\n        (Q.prototype.mul = function (t) {\n          return \"number\" == typeof t ? this.mulS(t) : this.mulM(t);\n        }),\n        (Q.prototype.mulS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t);\n          return this;\n        }),\n        (Q.prototype.mulM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t.get(r, e));\n          return this;\n        }),\n        (Q.mul = function (t, r) {\n          return new J(t).mul(r);\n        }),\n        (Q.prototype.multiply = Q.prototype.mul),\n        (Q.prototype.multiplyS = Q.prototype.mulS),\n        (Q.prototype.multiplyM = Q.prototype.mulM),\n        (Q.multiply = Q.mul),\n        (Q.prototype.div = function (t) {\n          return \"number\" == typeof t ? this.divS(t) : this.divM(t);\n        }),\n        (Q.prototype.divS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t);\n          return this;\n        }),\n        (Q.prototype.divM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t.get(r, e));\n          return this;\n        }),\n        (Q.div = function (t, r) {\n          return new J(t).div(r);\n        }),\n        (Q.prototype.divide = Q.prototype.div),\n        (Q.prototype.divideS = Q.prototype.divS),\n        (Q.prototype.divideM = Q.prototype.divM),\n        (Q.divide = Q.div),\n        (Q.prototype.mod = function (t) {\n          return \"number\" == typeof t ? this.modS(t) : this.modM(t);\n        }),\n        (Q.prototype.modS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t);\n          return this;\n        }),\n        (Q.prototype.modM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t.get(r, e));\n          return this;\n        }),\n        (Q.mod = function (t, r) {\n          return new J(t).mod(r);\n        }),\n        (Q.prototype.modulus = Q.prototype.mod),\n        (Q.prototype.modulusS = Q.prototype.modS),\n        (Q.prototype.modulusM = Q.prototype.modM),\n        (Q.modulus = Q.mod),\n        (Q.prototype.and = function (t) {\n          return \"number\" == typeof t ? this.andS(t) : this.andM(t);\n        }),\n        (Q.prototype.andS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t);\n          return this;\n        }),\n        (Q.prototype.andM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t.get(r, e));\n          return this;\n        }),\n        (Q.and = function (t, r) {\n          return new J(t).and(r);\n        }),\n        (Q.prototype.or = function (t) {\n          return \"number\" == typeof t ? this.orS(t) : this.orM(t);\n        }),\n        (Q.prototype.orS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t);\n          return this;\n        }),\n        (Q.prototype.orM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t.get(r, e));\n          return this;\n        }),\n        (Q.or = function (t, r) {\n          return new J(t).or(r);\n        }),\n        (Q.prototype.xor = function (t) {\n          return \"number\" == typeof t ? this.xorS(t) : this.xorM(t);\n        }),\n        (Q.prototype.xorS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t);\n          return this;\n        }),\n        (Q.prototype.xorM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t.get(r, e));\n          return this;\n        }),\n        (Q.xor = function (t, r) {\n          return new J(t).xor(r);\n        }),\n        (Q.prototype.leftShift = function (t) {\n          return \"number\" == typeof t ? this.leftShiftS(t) : this.leftShiftM(t);\n        }),\n        (Q.prototype.leftShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t);\n          return this;\n        }),\n        (Q.prototype.leftShiftM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t.get(r, e));\n          return this;\n        }),\n        (Q.leftShift = function (t, r) {\n          return new J(t).leftShift(r);\n        }),\n        (Q.prototype.signPropagatingRightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.signPropagatingRightShiftS(t)\n            : this.signPropagatingRightShiftM(t);\n        }),\n        (Q.prototype.signPropagatingRightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t);\n          return this;\n        }),\n        (Q.prototype.signPropagatingRightShiftM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t.get(r, e));\n          return this;\n        }),\n        (Q.signPropagatingRightShift = function (t, r) {\n          return new J(t).signPropagatingRightShift(r);\n        }),\n        (Q.prototype.rightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.rightShiftS(t)\n            : this.rightShiftM(t);\n        }),\n        (Q.prototype.rightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t);\n          return this;\n        }),\n        (Q.prototype.rightShiftM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t.get(r, e));\n          return this;\n        }),\n        (Q.rightShift = function (t, r) {\n          return new J(t).rightShift(r);\n        }),\n        (Q.prototype.zeroFillRightShift = Q.prototype.rightShift),\n        (Q.prototype.zeroFillRightShiftS = Q.prototype.rightShiftS),\n        (Q.prototype.zeroFillRightShiftM = Q.prototype.rightShiftM),\n        (Q.zeroFillRightShift = Q.rightShift),\n        (Q.prototype.not = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, ~this.get(t, r));\n          return this;\n        }),\n        (Q.not = function (t) {\n          return new J(t).not();\n        }),\n        (Q.prototype.abs = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.abs(this.get(t, r)));\n          return this;\n        }),\n        (Q.abs = function (t) {\n          return new J(t).abs();\n        }),\n        (Q.prototype.acos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acos(this.get(t, r)));\n          return this;\n        }),\n        (Q.acos = function (t) {\n          return new J(t).acos();\n        }),\n        (Q.prototype.acosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acosh(this.get(t, r)));\n          return this;\n        }),\n        (Q.acosh = function (t) {\n          return new J(t).acosh();\n        }),\n        (Q.prototype.asin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asin(this.get(t, r)));\n          return this;\n        }),\n        (Q.asin = function (t) {\n          return new J(t).asin();\n        }),\n        (Q.prototype.asinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asinh(this.get(t, r)));\n          return this;\n        }),\n        (Q.asinh = function (t) {\n          return new J(t).asinh();\n        }),\n        (Q.prototype.atan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atan(this.get(t, r)));\n          return this;\n        }),\n        (Q.atan = function (t) {\n          return new J(t).atan();\n        }),\n        (Q.prototype.atanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atanh(this.get(t, r)));\n          return this;\n        }),\n        (Q.atanh = function (t) {\n          return new J(t).atanh();\n        }),\n        (Q.prototype.cbrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cbrt(this.get(t, r)));\n          return this;\n        }),\n        (Q.cbrt = function (t) {\n          return new J(t).cbrt();\n        }),\n        (Q.prototype.ceil = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.ceil(this.get(t, r)));\n          return this;\n        }),\n        (Q.ceil = function (t) {\n          return new J(t).ceil();\n        }),\n        (Q.prototype.clz32 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.clz32(this.get(t, r)));\n          return this;\n        }),\n        (Q.clz32 = function (t) {\n          return new J(t).clz32();\n        }),\n        (Q.prototype.cos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cos(this.get(t, r)));\n          return this;\n        }),\n        (Q.cos = function (t) {\n          return new J(t).cos();\n        }),\n        (Q.prototype.cosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cosh(this.get(t, r)));\n          return this;\n        }),\n        (Q.cosh = function (t) {\n          return new J(t).cosh();\n        }),\n        (Q.prototype.exp = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.exp(this.get(t, r)));\n          return this;\n        }),\n        (Q.exp = function (t) {\n          return new J(t).exp();\n        }),\n        (Q.prototype.expm1 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.expm1(this.get(t, r)));\n          return this;\n        }),\n        (Q.expm1 = function (t) {\n          return new J(t).expm1();\n        }),\n        (Q.prototype.floor = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.floor(this.get(t, r)));\n          return this;\n        }),\n        (Q.floor = function (t) {\n          return new J(t).floor();\n        }),\n        (Q.prototype.fround = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.fround(this.get(t, r)));\n          return this;\n        }),\n        (Q.fround = function (t) {\n          return new J(t).fround();\n        }),\n        (Q.prototype.log = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log(this.get(t, r)));\n          return this;\n        }),\n        (Q.log = function (t) {\n          return new J(t).log();\n        }),\n        (Q.prototype.log1p = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log1p(this.get(t, r)));\n          return this;\n        }),\n        (Q.log1p = function (t) {\n          return new J(t).log1p();\n        }),\n        (Q.prototype.log10 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log10(this.get(t, r)));\n          return this;\n        }),\n        (Q.log10 = function (t) {\n          return new J(t).log10();\n        }),\n        (Q.prototype.log2 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log2(this.get(t, r)));\n          return this;\n        }),\n        (Q.log2 = function (t) {\n          return new J(t).log2();\n        }),\n        (Q.prototype.round = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.round(this.get(t, r)));\n          return this;\n        }),\n        (Q.round = function (t) {\n          return new J(t).round();\n        }),\n        (Q.prototype.sign = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sign(this.get(t, r)));\n          return this;\n        }),\n        (Q.sign = function (t) {\n          return new J(t).sign();\n        }),\n        (Q.prototype.sin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sin(this.get(t, r)));\n          return this;\n        }),\n        (Q.sin = function (t) {\n          return new J(t).sin();\n        }),\n        (Q.prototype.sinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sinh(this.get(t, r)));\n          return this;\n        }),\n        (Q.sinh = function (t) {\n          return new J(t).sinh();\n        }),\n        (Q.prototype.sqrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sqrt(this.get(t, r)));\n          return this;\n        }),\n        (Q.sqrt = function (t) {\n          return new J(t).sqrt();\n        }),\n        (Q.prototype.tan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tan(this.get(t, r)));\n          return this;\n        }),\n        (Q.tan = function (t) {\n          return new J(t).tan();\n        }),\n        (Q.prototype.tanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tanh(this.get(t, r)));\n          return this;\n        }),\n        (Q.tanh = function (t) {\n          return new J(t).tanh();\n        }),\n        (Q.prototype.trunc = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.trunc(this.get(t, r)));\n          return this;\n        }),\n        (Q.trunc = function (t) {\n          return new J(t).trunc();\n        }),\n        (Q.pow = function (t, r) {\n          return new J(t).pow(r);\n        }),\n        (Q.prototype.pow = function (t) {\n          return \"number\" == typeof t ? this.powS(t) : this.powM(t);\n        }),\n        (Q.prototype.powS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t));\n          return this;\n        }),\n        (Q.prototype.powM = function (t) {\n          if (\n            ((t = J.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t.get(r, e)));\n          return this;\n        });\n      var tt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && X(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = G(i);\n        function i(t, r, e) {\n          var o;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((o = n.call(this)).matrix = t),\n            (o.rows = r),\n            (o.columns = e),\n            o\n          );\n        }\n        return (\n          (r = i),\n          e && K(r.prototype, e),\n          o && K(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          r\n        );\n      })(U);\n      function rt(t) {\n        return (rt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function et(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ot(t, r) {\n        return (ot =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function nt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = st(t);\n          if (r) {\n            var n = st(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return it(this, e);\n        };\n      }\n      function it(t, r) {\n        if (r && (\"object\" === rt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function st(t) {\n        return (st = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var ut = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && ot(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = nt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            y(t, r),\n            ((e = n.call(this, t, t.rows, 1)).column = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.column, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t) {\n                return this.matrix.get(t, this.column);\n              },\n            },\n          ]) && et(r.prototype, e),\n          o && et(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function at(t) {\n        return (at =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ft(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ct(t, r) {\n        return (ct =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function ht(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = pt(t);\n          if (r) {\n            var n = pt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return lt(this, e);\n        };\n      }\n      function lt(t, r) {\n        if (r && (\"object\" === at(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function pt(t) {\n        return (pt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var yt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && ct(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = ht(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            w(t, r),\n            ((e = n.call(this, t, t.rows, r.length)).columnIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columnIndices[r], e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columnIndices[r]);\n              },\n            },\n          ]) && ft(r.prototype, e),\n          o && ft(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function vt(t) {\n        return (vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function mt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function gt(t, r) {\n        return (gt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function wt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = bt(t);\n          if (r) {\n            var n = bt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return dt(this, e);\n        };\n      }\n      function dt(t, r) {\n        if (r && (\"object\" === vt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function bt(t) {\n        return (bt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Mt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && gt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = wt(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columns - r - 1, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columns - r - 1);\n              },\n            },\n          ]) && mt(r.prototype, e),\n          o && mt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function xt(t) {\n        return (xt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function kt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function St(t, r) {\n        return (St =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ot(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = jt(t);\n          if (r) {\n            var n = jt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Et(this, e);\n        };\n      }\n      function Et(t, r) {\n        if (r && (\"object\" === xt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function jt(t) {\n        return (jt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Rt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && St(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ot(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rows - t - 1, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rows - t - 1, r);\n              },\n            },\n          ]) && kt(r.prototype, e),\n          o && kt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Pt(t) {\n        return (Pt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function _t(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Tt(t, r) {\n        return (Tt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function It(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Ct(t);\n          if (r) {\n            var n = Ct(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Nt(this, e);\n        };\n      }\n      function Nt(t, r) {\n        if (r && (\"object\" === Pt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function Ct(t) {\n        return (Ct = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Dt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && Tt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = It(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            p(t, r),\n            ((e = n.call(this, t, 1, t.columns)).row = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.row, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.row, r);\n              },\n            },\n          ]) && _t(r.prototype, e),\n          o && _t(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Vt(t) {\n        return (Vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function At(t, r) {\n        return (At =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ft(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = zt(t);\n          if (r) {\n            var n = zt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Bt(this, e);\n        };\n      }\n      function Bt(t, r) {\n        if (r && (\"object\" === Vt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function zt(t) {\n        return (zt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Lt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && At(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ft(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            g(t, r),\n            ((e = n.call(this, t, r.length, t.columns)).rowIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rowIndices[t], r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rowIndices[t], r);\n              },\n            },\n          ]) && qt(r.prototype, e),\n          o && qt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Ut(t) {\n        return (Ut =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Wt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Qt(t, r) {\n        return (Qt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Jt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Yt(t);\n          if (r) {\n            var n = Yt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Ht(this, e);\n        };\n      }\n      function Ht(t, r) {\n        if (r && (\"object\" === Ut(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function Yt(t) {\n        return (Yt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Kt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && Qt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Jt(i);\n        function i(t, r, e) {\n          var o;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            g(t, r),\n            w(t, e),\n            ((o = n.call(this, t, r.length, e.length)).rowIndices = r),\n            (o.columnIndices = e),\n            o\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.rowIndices[t], this.columnIndices[r], e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(\n                  this.rowIndices[t],\n                  this.columnIndices[r],\n                );\n              },\n            },\n          ]) && Wt(r.prototype, e),\n          o && Wt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function Xt(t) {\n        return (Xt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Gt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Zt(t, r) {\n        return (Zt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function $t(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = rr(t);\n          if (r) {\n            var n = rr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return tr(this, e);\n        };\n      }\n      function tr(t, r) {\n        if (r && (\"object\" === Xt(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function rr(t) {\n        return (rr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var er = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && Zt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = $t(i);\n        function i(t, r, e, o, s) {\n          var u;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            d(t, r, e, o, s),\n            ((u = n.call(this, t, e - r + 1, s - o + 1)).startRow = r),\n            (u.startColumn = o),\n            u\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.startRow + t, this.startColumn + r, e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.startRow + t, this.startColumn + r);\n              },\n            },\n          ]) && Gt(r.prototype, e),\n          o && Gt(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function or(t) {\n        return (or =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function nr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ir(t, r) {\n        return (ir =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function sr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = ar(t);\n          if (r) {\n            var n = ar(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return ur(this, e);\n        };\n      }\n      function ur(t, r) {\n        if (r && (\"object\" === or(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function ar(t) {\n        return (ar = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var fr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && ir(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = sr(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.columns, t.rows)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(r, t, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(r, t);\n              },\n            },\n          ]) && nr(r.prototype, e),\n          o && nr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(tt);\n      function cr(t) {\n        return (cr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function hr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function lr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function pr(t, r) {\n        return (pr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function yr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = mr(t);\n          if (r) {\n            var n = mr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return vr(this, e);\n        };\n      }\n      function vr(t, r) {\n        if (r && (\"object\" === cr(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function mr(t) {\n        return (mr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var gr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && pr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = yr(i);\n        function i(t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          hr(this, i);\n          var o = e.rows,\n            s = void 0 === o ? 1 : o;\n          if (t.length % s != 0)\n            throw new Error(\n              \"the data length is not divisible by the number of rows\",\n            );\n          return (\n            ((r = n.call(this)).rows = s),\n            (r.columns = t.length / s),\n            (r.data = t),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                var o = this._calculateIndex(t, r);\n                return (this.data[o] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                var e = this._calculateIndex(t, r);\n                return this.data[e];\n              },\n            },\n            {\n              key: \"_calculateIndex\",\n              value: function (t, r) {\n                return t * this.columns + r;\n              },\n            },\n          ]) && lr(r.prototype, e),\n          o && lr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(U);\n      function wr(t) {\n        return (wr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function dr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function br(t, r) {\n        return (br =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Mr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = kr(t);\n          if (r) {\n            var n = kr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return xr(this, e);\n        };\n      }\n      function xr(t, r) {\n        if (r && (\"object\" === wr(r) || \"function\" == typeof r)) return r;\n        if (void 0 !== r)\n          throw new TypeError(\n            \"Derived constructors may only return object or undefined\",\n          );\n        return (function (t) {\n          if (void 0 === t)\n            throw new ReferenceError(\n              \"this hasn't been initialised - super() hasn't been called\",\n            );\n          return t;\n        })(t);\n      }\n      function kr(t) {\n        return (kr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Sr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            Object.defineProperty(t, \"prototype\", { writable: !1 }),\n            r && br(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Mr(i);\n        function i(t) {\n          var r;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((r = n.call(this)).data = t),\n            (r.rows = t.length),\n            (r.columns = t[0].length),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (this.data[t][r] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.data[t][r];\n              },\n            },\n          ]) && dr(r.prototype, e),\n          o && dr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          i\n        );\n      })(U);\n      function Or(t, r) {\n        if (n(t)) return t[0] && n(t[0]) ? new Sr(t) : new gr(t, r);\n        throw new Error(\"the argument is not an array\");\n      }\n      function Er(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var jr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s,\n            u,\n            a,\n            f,\n            c,\n            h = (r = Sr.checkMatrix(r)).clone(),\n            l = h.rows,\n            p = h.columns,\n            y = new Float64Array(l),\n            v = 1;\n          for (e = 0; e < l; e++) y[e] = e;\n          for (f = new Float64Array(l), o = 0; o < p; o++) {\n            for (e = 0; e < l; e++) f[e] = h.get(e, o);\n            for (e = 0; e < l; e++) {\n              for (c = Math.min(e, o), s = 0, n = 0; n < c; n++)\n                s += h.get(e, n) * f[n];\n              (f[e] -= s), h.set(e, o, f[e]);\n            }\n            for (i = o, e = o + 1; e < l; e++)\n              Math.abs(f[e]) > Math.abs(f[i]) && (i = e);\n            if (i !== o) {\n              for (n = 0; n < p; n++)\n                (u = h.get(i, n)), h.set(i, n, h.get(o, n)), h.set(o, n, u);\n              (a = y[i]), (y[i] = y[o]), (y[o] = a), (v = -v);\n            }\n            if (o < l && 0 !== h.get(o, o))\n              for (e = o + 1; e < l; e++)\n                h.set(e, o, h.get(e, o) / h.get(o, o));\n          }\n          (this.LU = h), (this.pivotVector = y), (this.pivotSign = v);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isSingular\",\n              value: function () {\n                for (var t = this.LU, r = t.columns, e = 0; e < r; e++)\n                  if (0 === t.get(e, e)) return !0;\n                return !1;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = H.checkMatrix(t);\n                var r = this.LU;\n                if (r.rows !== t.rows)\n                  throw new Error(\"Invalid matrix dimensions\");\n                if (this.isSingular()) throw new Error(\"LU matrix is singular\");\n                var e,\n                  o,\n                  n,\n                  i = t.columns,\n                  s = t.subMatrixRow(this.pivotVector, 0, i - 1),\n                  u = r.columns;\n                for (n = 0; n < u; n++)\n                  for (e = n + 1; e < u; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                for (n = u - 1; n >= 0; n--) {\n                  for (o = 0; o < i; o++)\n                    s.set(n, o, s.get(n, o) / r.get(n, n));\n                  for (e = 0; e < n; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                }\n                return s;\n              },\n            },\n            {\n              key: \"determinant\",\n              get: function () {\n                var t = this.LU;\n                if (!t.isSquare()) throw new Error(\"Matrix must be square\");\n                for (var r = this.pivotSign, e = t.columns, o = 0; o < e; o++)\n                  r *= t.get(o, o);\n                return r;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new H(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n > i\n                      ? o.set(n, i, t.get(n, i))\n                      : n === i\n                      ? o.set(n, i, 1)\n                      : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new H(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n <= i ? o.set(n, i, t.get(n, i)) : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"pivotPermutationVector\",\n              get: function () {\n                return Array.from(this.pivotVector);\n              },\n            },\n          ]) && Er(r.prototype, e),\n          o && Er(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Rr(t, r) {\n        var e = 0;\n        return Math.abs(t) > Math.abs(r)\n          ? ((e = r / t), Math.abs(t) * Math.sqrt(1 + e * e))\n          : 0 !== r\n          ? ((e = t / r), Math.abs(r) * Math.sqrt(1 + e * e))\n          : 0;\n      }\n      function Pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var _r = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s = (r = Sr.checkMatrix(r)).clone(),\n            u = r.rows,\n            a = r.columns,\n            f = new Float64Array(a);\n          for (n = 0; n < a; n++) {\n            var c = 0;\n            for (e = n; e < u; e++) c = Rr(c, s.get(e, n));\n            if (0 !== c) {\n              for (s.get(n, n) < 0 && (c = -c), e = n; e < u; e++)\n                s.set(e, n, s.get(e, n) / c);\n              for (s.set(n, n, s.get(n, n) + 1), o = n + 1; o < a; o++) {\n                for (i = 0, e = n; e < u; e++) i += s.get(e, n) * s.get(e, o);\n                for (i = -i / s.get(n, n), e = n; e < u; e++)\n                  s.set(e, o, s.get(e, o) + i * s.get(e, n));\n              }\n            }\n            f[n] = -c;\n          }\n          (this.QR = s), (this.Rdiag = f);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = H.checkMatrix(t);\n                var r = this.QR,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix row dimensions must agree\");\n                if (!this.isFullRank())\n                  throw new Error(\"Matrix is rank deficient\");\n                var o,\n                  n,\n                  i,\n                  s,\n                  u = t.columns,\n                  a = t.clone(),\n                  f = r.columns;\n                for (i = 0; i < f; i++)\n                  for (n = 0; n < u; n++) {\n                    for (s = 0, o = i; o < e; o++)\n                      s += r.get(o, i) * a.get(o, n);\n                    for (s = -s / r.get(i, i), o = i; o < e; o++)\n                      a.set(o, n, a.get(o, n) + s * r.get(o, i));\n                  }\n                for (i = f - 1; i >= 0; i--) {\n                  for (n = 0; n < u; n++)\n                    a.set(i, n, a.get(i, n) / this.Rdiag[i]);\n                  for (o = 0; o < i; o++)\n                    for (n = 0; n < u; n++)\n                      a.set(o, n, a.get(o, n) - a.get(i, n) * r.get(o, i));\n                }\n                return a.subMatrix(0, f - 1, 0, u - 1);\n              },\n            },\n            {\n              key: \"isFullRank\",\n              value: function () {\n                for (var t = this.QR.columns, r = 0; r < t; r++)\n                  if (0 === this.Rdiag[r]) return !1;\n                return !0;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.QR,\n                  o = e.columns,\n                  n = new H(o, o);\n                for (t = 0; t < o; t++)\n                  for (r = 0; r < o; r++)\n                    t < r\n                      ? n.set(t, r, e.get(t, r))\n                      : t === r\n                      ? n.set(t, r, this.Rdiag[t])\n                      : n.set(t, r, 0);\n                return n;\n              },\n            },\n            {\n              key: \"orthogonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e,\n                  o,\n                  n = this.QR,\n                  i = n.rows,\n                  s = n.columns,\n                  u = new H(i, s);\n                for (e = s - 1; e >= 0; e--) {\n                  for (t = 0; t < i; t++) u.set(t, e, 0);\n                  for (u.set(e, e, 1), r = e; r < s; r++)\n                    if (0 !== n.get(e, e)) {\n                      for (o = 0, t = e; t < i; t++)\n                        o += n.get(t, e) * u.get(t, r);\n                      for (o = -o / n.get(e, e), t = e; t < i; t++)\n                        u.set(t, r, u.get(t, r) + o * n.get(t, e));\n                    }\n                }\n                return u;\n              },\n            },\n          ]) && Pr(r.prototype, e),\n          o && Pr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Tr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Nr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          if ((Tr(this, t), (r = Sr.checkMatrix(r)).isEmpty()))\n            throw new Error(\"Matrix must be non-empty\");\n          var o,\n            n = r.rows,\n            i = r.columns,\n            s = e.computeLeftSingularVectors,\n            u = void 0 === s || s,\n            a = e.computeRightSingularVectors,\n            f = void 0 === a || a,\n            c = e.autoTranspose,\n            h = void 0 !== c && c,\n            l = Boolean(u),\n            p = Boolean(f),\n            y = !1;\n          if (n < i)\n            if (h) {\n              (n = (o = r.transpose()).rows), (i = o.columns), (y = !0);\n              var v = l;\n              (l = p), (p = v);\n            } else\n              (o = r.clone()),\n                console.warn(\n                  \"Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose\",\n                );\n          else o = r.clone();\n          for (\n            var m = Math.min(n, i),\n              g = Math.min(n + 1, i),\n              w = new Float64Array(g),\n              d = new H(n, m),\n              b = new H(i, i),\n              M = new Float64Array(i),\n              x = new Float64Array(n),\n              k = new Float64Array(g),\n              S = 0;\n            S < g;\n            S++\n          )\n            k[S] = S;\n          for (\n            var O = Math.min(n - 1, i),\n              E = Math.max(0, Math.min(i - 2, n)),\n              j = Math.max(O, E),\n              R = 0;\n            R < j;\n            R++\n          ) {\n            if (R < O) {\n              w[R] = 0;\n              for (var P = R; P < n; P++) w[R] = Rr(w[R], o.get(P, R));\n              if (0 !== w[R]) {\n                o.get(R, R) < 0 && (w[R] = -w[R]);\n                for (var _ = R; _ < n; _++) o.set(_, R, o.get(_, R) / w[R]);\n                o.set(R, R, o.get(R, R) + 1);\n              }\n              w[R] = -w[R];\n            }\n            for (var T = R + 1; T < i; T++) {\n              if (R < O && 0 !== w[R]) {\n                for (var I = 0, N = R; N < n; N++)\n                  I += o.get(N, R) * o.get(N, T);\n                I = -I / o.get(R, R);\n                for (var C = R; C < n; C++)\n                  o.set(C, T, o.get(C, T) + I * o.get(C, R));\n              }\n              M[T] = o.get(R, T);\n            }\n            if (l && R < O)\n              for (var D = R; D < n; D++) d.set(D, R, o.get(D, R));\n            if (R < E) {\n              M[R] = 0;\n              for (var V = R + 1; V < i; V++) M[R] = Rr(M[R], M[V]);\n              if (0 !== M[R]) {\n                M[R + 1] < 0 && (M[R] = 0 - M[R]);\n                for (var q = R + 1; q < i; q++) M[q] /= M[R];\n                M[R + 1] += 1;\n              }\n              if (((M[R] = -M[R]), R + 1 < n && 0 !== M[R])) {\n                for (var A = R + 1; A < n; A++) x[A] = 0;\n                for (var F = R + 1; F < n; F++)\n                  for (var B = R + 1; B < i; B++) x[F] += M[B] * o.get(F, B);\n                for (var z = R + 1; z < i; z++)\n                  for (var L = -M[z] / M[R + 1], U = R + 1; U < n; U++)\n                    o.set(U, z, o.get(U, z) + L * x[U]);\n              }\n              if (p) for (var W = R + 1; W < i; W++) b.set(W, R, M[W]);\n            }\n          }\n          var Q = Math.min(i, n + 1);\n          if (\n            (O < i && (w[O] = o.get(O, O)),\n            n < Q && (w[Q - 1] = 0),\n            E + 1 < Q && (M[E] = o.get(E, Q - 1)),\n            (M[Q - 1] = 0),\n            l)\n          ) {\n            for (var J = O; J < m; J++) {\n              for (var Y = 0; Y < n; Y++) d.set(Y, J, 0);\n              d.set(J, J, 1);\n            }\n            for (var K = O - 1; K >= 0; K--)\n              if (0 !== w[K]) {\n                for (var X = K + 1; X < m; X++) {\n                  for (var G = 0, Z = K; Z < n; Z++)\n                    G += d.get(Z, K) * d.get(Z, X);\n                  G = -G / d.get(K, K);\n                  for (var $ = K; $ < n; $++)\n                    d.set($, X, d.get($, X) + G * d.get($, K));\n                }\n                for (var tt = K; tt < n; tt++) d.set(tt, K, -d.get(tt, K));\n                d.set(K, K, 1 + d.get(K, K));\n                for (var rt = 0; rt < K - 1; rt++) d.set(rt, K, 0);\n              } else {\n                for (var et = 0; et < n; et++) d.set(et, K, 0);\n                d.set(K, K, 1);\n              }\n          }\n          if (p)\n            for (var ot = i - 1; ot >= 0; ot--) {\n              if (ot < E && 0 !== M[ot])\n                for (var nt = ot + 1; nt < i; nt++) {\n                  for (var it = 0, st = ot + 1; st < i; st++)\n                    it += b.get(st, ot) * b.get(st, nt);\n                  it = -it / b.get(ot + 1, ot);\n                  for (var ut = ot + 1; ut < i; ut++)\n                    b.set(ut, nt, b.get(ut, nt) + it * b.get(ut, ot));\n                }\n              for (var at = 0; at < i; at++) b.set(at, ot, 0);\n              b.set(ot, ot, 1);\n            }\n          for (var ft = Q - 1, ct = Number.EPSILON; Q > 0; ) {\n            var ht = void 0,\n              lt = void 0;\n            for (ht = Q - 2; ht >= -1 && -1 !== ht; ht--) {\n              var pt =\n                Number.MIN_VALUE + ct * Math.abs(w[ht] + Math.abs(w[ht + 1]));\n              if (Math.abs(M[ht]) <= pt || Number.isNaN(M[ht])) {\n                M[ht] = 0;\n                break;\n              }\n            }\n            if (ht === Q - 2) lt = 4;\n            else {\n              var yt = void 0;\n              for (yt = Q - 1; yt >= ht && yt !== ht; yt--) {\n                var vt =\n                  (yt !== Q ? Math.abs(M[yt]) : 0) +\n                  (yt !== ht + 1 ? Math.abs(M[yt - 1]) : 0);\n                if (Math.abs(w[yt]) <= ct * vt) {\n                  w[yt] = 0;\n                  break;\n                }\n              }\n              yt === ht\n                ? (lt = 3)\n                : yt === Q - 1\n                ? (lt = 1)\n                : ((lt = 2), (ht = yt));\n            }\n            switch ((ht++, lt)) {\n              case 1:\n                var mt = M[Q - 2];\n                M[Q - 2] = 0;\n                for (var gt = Q - 2; gt >= ht; gt--) {\n                  var wt = Rr(w[gt], mt),\n                    dt = w[gt] / wt,\n                    bt = mt / wt;\n                  if (\n                    ((w[gt] = wt),\n                    gt !== ht &&\n                      ((mt = -bt * M[gt - 1]), (M[gt - 1] = dt * M[gt - 1])),\n                    p)\n                  )\n                    for (var Mt = 0; Mt < i; Mt++)\n                      (wt = dt * b.get(Mt, gt) + bt * b.get(Mt, Q - 1)),\n                        b.set(\n                          Mt,\n                          Q - 1,\n                          -bt * b.get(Mt, gt) + dt * b.get(Mt, Q - 1),\n                        ),\n                        b.set(Mt, gt, wt);\n                }\n                break;\n              case 2:\n                var xt = M[ht - 1];\n                M[ht - 1] = 0;\n                for (var kt = ht; kt < Q; kt++) {\n                  var St = Rr(w[kt], xt),\n                    Ot = w[kt] / St,\n                    Et = xt / St;\n                  if (\n                    ((w[kt] = St), (xt = -Et * M[kt]), (M[kt] = Ot * M[kt]), l)\n                  )\n                    for (var jt = 0; jt < n; jt++)\n                      (St = Ot * d.get(jt, kt) + Et * d.get(jt, ht - 1)),\n                        d.set(\n                          jt,\n                          ht - 1,\n                          -Et * d.get(jt, kt) + Ot * d.get(jt, ht - 1),\n                        ),\n                        d.set(jt, kt, St);\n                }\n                break;\n              case 3:\n                var Rt = Math.max(\n                    Math.abs(w[Q - 1]),\n                    Math.abs(w[Q - 2]),\n                    Math.abs(M[Q - 2]),\n                    Math.abs(w[ht]),\n                    Math.abs(M[ht]),\n                  ),\n                  Pt = w[Q - 1] / Rt,\n                  _t = w[Q - 2] / Rt,\n                  Tt = M[Q - 2] / Rt,\n                  It = w[ht] / Rt,\n                  Nt = M[ht] / Rt,\n                  Ct = ((_t + Pt) * (_t - Pt) + Tt * Tt) / 2,\n                  Dt = Pt * Tt * (Pt * Tt),\n                  Vt = 0;\n                (0 === Ct && 0 === Dt) ||\n                  (Vt =\n                    Dt /\n                    (Ct +\n                      (Vt =\n                        Ct < 0\n                          ? 0 - Math.sqrt(Ct * Ct + Dt)\n                          : Math.sqrt(Ct * Ct + Dt))));\n                for (\n                  var qt = (It + Pt) * (It - Pt) + Vt, At = It * Nt, Ft = ht;\n                  Ft < Q - 1;\n                  Ft++\n                ) {\n                  var Bt = Rr(qt, At);\n                  0 === Bt && (Bt = Number.MIN_VALUE);\n                  var zt = qt / Bt,\n                    Lt = At / Bt;\n                  if (\n                    (Ft !== ht && (M[Ft - 1] = Bt),\n                    (qt = zt * w[Ft] + Lt * M[Ft]),\n                    (M[Ft] = zt * M[Ft] - Lt * w[Ft]),\n                    (At = Lt * w[Ft + 1]),\n                    (w[Ft + 1] = zt * w[Ft + 1]),\n                    p)\n                  )\n                    for (var Ut = 0; Ut < i; Ut++)\n                      (Bt = zt * b.get(Ut, Ft) + Lt * b.get(Ut, Ft + 1)),\n                        b.set(\n                          Ut,\n                          Ft + 1,\n                          -Lt * b.get(Ut, Ft) + zt * b.get(Ut, Ft + 1),\n                        ),\n                        b.set(Ut, Ft, Bt);\n                  if (\n                    (0 === (Bt = Rr(qt, At)) && (Bt = Number.MIN_VALUE),\n                    (zt = qt / Bt),\n                    (Lt = At / Bt),\n                    (w[Ft] = Bt),\n                    (qt = zt * M[Ft] + Lt * w[Ft + 1]),\n                    (w[Ft + 1] = -Lt * M[Ft] + zt * w[Ft + 1]),\n                    (At = Lt * M[Ft + 1]),\n                    (M[Ft + 1] = zt * M[Ft + 1]),\n                    l && Ft < n - 1)\n                  )\n                    for (var Wt = 0; Wt < n; Wt++)\n                      (Bt = zt * d.get(Wt, Ft) + Lt * d.get(Wt, Ft + 1)),\n                        d.set(\n                          Wt,\n                          Ft + 1,\n                          -Lt * d.get(Wt, Ft) + zt * d.get(Wt, Ft + 1),\n                        ),\n                        d.set(Wt, Ft, Bt);\n                }\n                (M[Q - 2] = qt), 1;\n                break;\n              case 4:\n                if (w[ht] <= 0 && ((w[ht] = w[ht] < 0 ? -w[ht] : 0), p))\n                  for (var Qt = 0; Qt <= ft; Qt++)\n                    b.set(Qt, ht, -b.get(Qt, ht));\n                for (; ht < ft && !(w[ht] >= w[ht + 1]); ) {\n                  var Jt = w[ht];\n                  if (((w[ht] = w[ht + 1]), (w[ht + 1] = Jt), p && ht < i - 1))\n                    for (var Ht = 0; Ht < i; Ht++)\n                      (Jt = b.get(Ht, ht + 1)),\n                        b.set(Ht, ht + 1, b.get(Ht, ht)),\n                        b.set(Ht, ht, Jt);\n                  if (l && ht < n - 1)\n                    for (var Yt = 0; Yt < n; Yt++)\n                      (Jt = d.get(Yt, ht + 1)),\n                        d.set(Yt, ht + 1, d.get(Yt, ht)),\n                        d.set(Yt, ht, Jt);\n                  ht++;\n                }\n                0, Q--;\n            }\n          }\n          if (y) {\n            var Kt = b;\n            (b = d), (d = Kt);\n          }\n          (this.m = n), (this.n = i), (this.s = w), (this.U = d), (this.V = b);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                for (\n                  var r = t,\n                    e = this.threshold,\n                    o = this.s.length,\n                    n = H.zeros(o, o),\n                    i = 0;\n                  i < o;\n                  i++\n                )\n                  Math.abs(this.s[i]) <= e\n                    ? n.set(i, i, 0)\n                    : n.set(i, i, 1 / this.s[i]);\n                for (\n                  var s = this.U,\n                    u = this.rightSingularVectors,\n                    a = u.mmul(n),\n                    f = u.rows,\n                    c = s.rows,\n                    h = H.zeros(f, c),\n                    l = 0;\n                  l < f;\n                  l++\n                )\n                  for (var p = 0; p < c; p++) {\n                    for (var y = 0, v = 0; v < o; v++)\n                      y += a.get(l, v) * s.get(p, v);\n                    h.set(l, p, y);\n                  }\n                return h.mmul(r);\n              },\n            },\n            {\n              key: \"solveForDiagonal\",\n              value: function (t) {\n                return this.solve(H.diag(t));\n              },\n            },\n            {\n              key: \"inverse\",\n              value: function () {\n                for (\n                  var t = this.V,\n                    r = this.threshold,\n                    e = t.rows,\n                    o = t.columns,\n                    n = new H(e, this.s.length),\n                    i = 0;\n                  i < e;\n                  i++\n                )\n                  for (var s = 0; s < o; s++)\n                    Math.abs(this.s[s]) > r &&\n                      n.set(i, s, t.get(i, s) / this.s[s]);\n                for (\n                  var u = this.U,\n                    a = u.rows,\n                    f = u.columns,\n                    c = new H(e, a),\n                    h = 0;\n                  h < e;\n                  h++\n                )\n                  for (var l = 0; l < a; l++) {\n                    for (var p = 0, y = 0; y < f; y++)\n                      p += n.get(h, y) * u.get(l, y);\n                    c.set(h, l, p);\n                  }\n                return c;\n              },\n            },\n            {\n              key: \"condition\",\n              get: function () {\n                return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n              },\n            },\n            {\n              key: \"norm2\",\n              get: function () {\n                return this.s[0];\n              },\n            },\n            {\n              key: \"rank\",\n              get: function () {\n                for (\n                  var t = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON,\n                    r = 0,\n                    e = this.s,\n                    o = 0,\n                    n = e.length;\n                  o < n;\n                  o++\n                )\n                  e[o] > t && r++;\n                return r;\n              },\n            },\n            {\n              key: \"diagonal\",\n              get: function () {\n                return Array.from(this.s);\n              },\n            },\n            {\n              key: \"threshold\",\n              get: function () {\n                return (\n                  (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0]\n                );\n              },\n            },\n            {\n              key: \"leftSingularVectors\",\n              get: function () {\n                return this.U;\n              },\n            },\n            {\n              key: \"rightSingularVectors\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                return H.diag(this.s);\n              },\n            },\n          ]) && Ir(r.prototype, e),\n          o && Ir(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Cr(t) {\n        var r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n        return (\n          (t = Sr.checkMatrix(t)),\n          r ? new Nr(t).inverse() : Dr(t, H.eye(t.rows))\n        );\n      }\n      function Dr(t, r) {\n        var e = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\n        return (\n          (t = Sr.checkMatrix(t)),\n          (r = Sr.checkMatrix(r)),\n          e\n            ? new Nr(t).solve(r)\n            : t.isSquare()\n            ? new jr(t).solve(r)\n            : new _r(t).solve(r)\n        );\n      }\n      function Vr(t) {\n        var r, e, o, n, i, s;\n        if ((t = H.checkMatrix(t)).isSquare())\n          return 0 === t.columns\n            ? 1\n            : 2 === t.columns\n            ? ((r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(1, 0)),\n              r * t.get(1, 1) - e * o)\n            : 3 === t.columns\n            ? ((n = new Kt(t, [1, 2], [1, 2])),\n              (i = new Kt(t, [1, 2], [0, 2])),\n              (s = new Kt(t, [1, 2], [0, 1])),\n              (r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(0, 2)),\n              r * Vr(n) - e * Vr(i) + o * Vr(s))\n            : new jr(t).determinant;\n        throw Error(\"determinant can only be calculated for a square matrix\");\n      }\n      function qr(t, r) {\n        for (var e = [], o = 0; o < t; o++) o !== r && e.push(o);\n        return e;\n      }\n      function Ar(t, r, e) {\n        var o =\n            arguments.length > 3 && void 0 !== arguments[3]\n              ? arguments[3]\n              : 1e-9,\n          n =\n            arguments.length > 4 && void 0 !== arguments[4]\n              ? arguments[4]\n              : 1e-9;\n        if (t > n) return new Array(r.rows + 1).fill(0);\n        for (var i = r.addRow(e, [0]), s = 0; s < i.rows; s++)\n          Math.abs(i.get(s, 0)) < o && i.set(s, 0, 0);\n        return i.to1DArray();\n      }\n      function Fr(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            e = r.thresholdValue,\n            o = void 0 === e ? 1e-9 : e,\n            n = r.thresholdError,\n            i = void 0 === n ? 1e-9 : n,\n            s = (t = H.checkMatrix(t)).rows,\n            u = new H(s, s),\n            a = 0;\n          a < s;\n          a++\n        ) {\n          var f = H.columnVector(t.getRow(a)),\n            c = t.subMatrixRow(qr(s, a)).transpose(),\n            h = new Nr(c),\n            l = h.solve(f),\n            p = H.sub(f, c.mmul(l)).abs().max();\n          u.setRow(a, Ar(p, l, a, o, i));\n        }\n        return u;\n      }\n      function Br(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1]\n            ? arguments[1]\n            : Number.EPSILON;\n        if ((t = H.checkMatrix(t)).isEmpty()) return t.transpose();\n        for (\n          var e = new Nr(t, { autoTranspose: !0 }),\n            o = e.leftSingularVectors,\n            n = e.rightSingularVectors,\n            i = e.diagonal,\n            s = 0;\n          s < i.length;\n          s++\n        )\n          Math.abs(i[s]) > r ? (i[s] = 1 / i[s]) : (i[s] = 0);\n        return n.mmul(H.diag(i).mmul(o.transpose()));\n      }\n      function zr(t) {\n        return (zr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Lr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new H(t);\n        var o = !1;\n        if (\n          (\"object\" !== zr(r) || H.isMatrix(r) || n(r)\n            ? (r = new H(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var i = e,\n          s = i.center,\n          u = void 0 === s || s;\n        u && ((t = t.center(\"column\")), o || (r = r.center(\"column\")));\n        for (var a = t.transpose().mmul(r), f = 0; f < a.rows; f++)\n          for (var c = 0; c < a.columns; c++)\n            a.set(f, c, a.get(f, c) * (1 / (t.rows - 1)));\n        return a;\n      }\n      function Ur(t) {\n        return (Ur =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Wr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new H(t);\n        var o = !1;\n        if (\n          (\"object\" !== Ur(r) || H.isMatrix(r) || n(r)\n            ? (r = new H(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var i = e,\n          s = i.center,\n          u = void 0 === s || s,\n          a = i.scale,\n          f = void 0 === a || a;\n        u && (t.center(\"column\"), o || r.center(\"column\")),\n          f && (t.scale(\"column\"), o || r.scale(\"column\"));\n        for (\n          var c = t.standardDeviation(\"column\", { unbiased: !0 }),\n            h = o ? c : r.standardDeviation(\"column\", { unbiased: !0 }),\n            l = t.transpose().mmul(r),\n            p = 0;\n          p < l.rows;\n          p++\n        )\n          for (var y = 0; y < l.columns; y++)\n            l.set(p, y, l.get(p, y) * (1 / (c[p] * h[y])) * (1 / (t.rows - 1)));\n        return l;\n      }\n      function Qr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Jr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Hr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          Qr(this, t);\n          var o = e.assumeSymmetric,\n            n = void 0 !== o && o;\n          if (!(r = Sr.checkMatrix(r)).isSquare())\n            throw new Error(\"Matrix is not a square matrix\");\n          if (r.isEmpty()) throw new Error(\"Matrix must be non-empty\");\n          var i,\n            s,\n            u = r.columns,\n            a = new H(u, u),\n            f = new Float64Array(u),\n            c = new Float64Array(u),\n            h = r;\n          if (!!n || r.isSymmetric()) {\n            for (i = 0; i < u; i++)\n              for (s = 0; s < u; s++) a.set(i, s, h.get(i, s));\n            Yr(u, c, f, a), Kr(u, c, f, a);\n          } else {\n            var l = new H(u, u),\n              p = new Float64Array(u);\n            for (s = 0; s < u; s++)\n              for (i = 0; i < u; i++) l.set(i, s, h.get(i, s));\n            Xr(u, l, p, a), Gr(u, c, f, a, l);\n          }\n          (this.n = u), (this.e = c), (this.d = f), (this.V = a);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"realEigenvalues\",\n              get: function () {\n                return Array.from(this.d);\n              },\n            },\n            {\n              key: \"imaginaryEigenvalues\",\n              get: function () {\n                return Array.from(this.e);\n              },\n            },\n            {\n              key: \"eigenvectorMatrix\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.n,\n                  o = this.e,\n                  n = this.d,\n                  i = new H(e, e);\n                for (t = 0; t < e; t++) {\n                  for (r = 0; r < e; r++) i.set(t, r, 0);\n                  i.set(t, t, n[t]),\n                    o[t] > 0\n                      ? i.set(t, t + 1, o[t])\n                      : o[t] < 0 && i.set(t, t - 1, o[t]);\n                }\n                return i;\n              },\n            },\n          ]) && Jr(r.prototype, e),\n          o && Jr(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function Yr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h;\n        for (a = 0; a < t; a++) e[a] = o.get(t - 1, a);\n        for (u = t - 1; u > 0; u--) {\n          for (h = 0, s = 0, f = 0; f < u; f++) h += Math.abs(e[f]);\n          if (0 === h)\n            for (r[u] = e[u - 1], a = 0; a < u; a++)\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0), o.set(a, u, 0);\n          else {\n            for (f = 0; f < u; f++) (e[f] /= h), (s += e[f] * e[f]);\n            for (\n              n = e[u - 1],\n                i = Math.sqrt(s),\n                n > 0 && (i = -i),\n                r[u] = h * i,\n                s -= n * i,\n                e[u - 1] = n - i,\n                a = 0;\n              a < u;\n              a++\n            )\n              r[a] = 0;\n            for (a = 0; a < u; a++) {\n              for (\n                n = e[a], o.set(a, u, n), i = r[a] + o.get(a, a) * n, f = a + 1;\n                f <= u - 1;\n                f++\n              )\n                (i += o.get(f, a) * e[f]), (r[f] += o.get(f, a) * n);\n              r[a] = i;\n            }\n            for (n = 0, a = 0; a < u; a++) (r[a] /= s), (n += r[a] * e[a]);\n            for (c = n / (s + s), a = 0; a < u; a++) r[a] -= c * e[a];\n            for (a = 0; a < u; a++) {\n              for (n = e[a], i = r[a], f = a; f <= u - 1; f++)\n                o.set(f, a, o.get(f, a) - (n * r[f] + i * e[f]));\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0);\n            }\n          }\n          e[u] = s;\n        }\n        for (u = 0; u < t - 1; u++) {\n          if (\n            (o.set(t - 1, u, o.get(u, u)), o.set(u, u, 1), 0 !== (s = e[u + 1]))\n          ) {\n            for (f = 0; f <= u; f++) e[f] = o.get(f, u + 1) / s;\n            for (a = 0; a <= u; a++) {\n              for (i = 0, f = 0; f <= u; f++)\n                i += o.get(f, u + 1) * o.get(f, a);\n              for (f = 0; f <= u; f++) o.set(f, a, o.get(f, a) - i * e[f]);\n            }\n          }\n          for (f = 0; f <= u; f++) o.set(f, u + 1, 0);\n        }\n        for (a = 0; a < t; a++) (e[a] = o.get(t - 1, a)), o.set(t - 1, a, 0);\n        o.set(t - 1, t - 1, 1), (r[0] = 0);\n      }\n      function Kr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h, l, p, y, v, m, g, w, d;\n        for (s = 1; s < t; s++) r[s - 1] = r[s];\n        r[t - 1] = 0;\n        var b = 0,\n          M = 0,\n          x = Number.EPSILON;\n        for (f = 0; f < t; f++) {\n          for (\n            M = Math.max(M, Math.abs(e[f]) + Math.abs(r[f])), c = f;\n            c < t && !(Math.abs(r[c]) <= x * M);\n\n          )\n            c++;\n          if (c > f) {\n            0;\n            do {\n              for (\n                1,\n                  n = e[f],\n                  l = Rr((h = (e[f + 1] - n) / (2 * r[f])), 1),\n                  h < 0 && (l = -l),\n                  e[f] = r[f] / (h + l),\n                  e[f + 1] = r[f] * (h + l),\n                  p = e[f + 1],\n                  i = n - e[f],\n                  s = f + 2;\n                s < t;\n                s++\n              )\n                e[s] -= i;\n              for (\n                b += i,\n                  h = e[c],\n                  v = y = 1,\n                  m = y,\n                  g = r[f + 1],\n                  w = 0,\n                  d = 0,\n                  s = c - 1;\n                s >= f;\n                s--\n              )\n                for (\n                  m = v,\n                    v = y,\n                    d = w,\n                    n = y * r[s],\n                    i = y * h,\n                    l = Rr(h, r[s]),\n                    r[s + 1] = w * l,\n                    w = r[s] / l,\n                    h = (y = h / l) * e[s] - w * n,\n                    e[s + 1] = i + w * (y * n + w * e[s]),\n                    a = 0;\n                  a < t;\n                  a++\n                )\n                  (i = o.get(a, s + 1)),\n                    o.set(a, s + 1, w * o.get(a, s) + y * i),\n                    o.set(a, s, y * o.get(a, s) - w * i);\n              (h = (-w * d * m * g * r[f]) / p), (r[f] = w * h), (e[f] = y * h);\n            } while (Math.abs(r[f]) > x * M);\n          }\n          (e[f] = e[f] + b), (r[f] = 0);\n        }\n        for (s = 0; s < t - 1; s++) {\n          for (a = s, h = e[s], u = s + 1; u < t; u++)\n            e[u] < h && ((a = u), (h = e[u]));\n          if (a !== s)\n            for (e[a] = e[s], e[s] = h, u = 0; u < t; u++)\n              (h = o.get(u, s)), o.set(u, s, o.get(u, a)), o.set(u, a, h);\n        }\n      }\n      function Xr(t, r, e, o) {\n        var n,\n          i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h = t - 1;\n        for (f = 1; f <= h - 1; f++) {\n          for (c = 0, u = f; u <= h; u++) c += Math.abs(r.get(u, f - 1));\n          if (0 !== c) {\n            for (s = 0, u = h; u >= f; u--)\n              (e[u] = r.get(u, f - 1) / c), (s += e[u] * e[u]);\n            for (\n              i = Math.sqrt(s),\n                e[f] > 0 && (i = -i),\n                s -= e[f] * i,\n                e[f] = e[f] - i,\n                a = f;\n              a < t;\n              a++\n            ) {\n              for (n = 0, u = h; u >= f; u--) n += e[u] * r.get(u, a);\n              for (n /= s, u = f; u <= h; u++)\n                r.set(u, a, r.get(u, a) - n * e[u]);\n            }\n            for (u = 0; u <= h; u++) {\n              for (n = 0, a = h; a >= f; a--) n += e[a] * r.get(u, a);\n              for (n /= s, a = f; a <= h; a++)\n                r.set(u, a, r.get(u, a) - n * e[a]);\n            }\n            (e[f] = c * e[f]), r.set(f, f - 1, c * i);\n          }\n        }\n        for (u = 0; u < t; u++)\n          for (a = 0; a < t; a++) o.set(u, a, u === a ? 1 : 0);\n        for (f = h - 1; f >= 1; f--)\n          if (0 !== r.get(f, f - 1)) {\n            for (u = f + 1; u <= h; u++) e[u] = r.get(u, f - 1);\n            for (a = f; a <= h; a++) {\n              for (i = 0, u = f; u <= h; u++) i += e[u] * o.get(u, a);\n              for (i = i / e[f] / r.get(f, f - 1), u = f; u <= h; u++)\n                o.set(u, a, o.get(u, a) + i * e[u]);\n            }\n          }\n      }\n      function Gr(t, r, e, o, n) {\n        var i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h,\n          l,\n          p,\n          y,\n          v,\n          m,\n          g,\n          w,\n          d,\n          b = t - 1,\n          M = t - 1,\n          x = Number.EPSILON,\n          k = 0,\n          S = 0,\n          O = 0,\n          E = 0,\n          j = 0,\n          R = 0,\n          P = 0,\n          _ = 0;\n        for (i = 0; i < t; i++)\n          for (\n            (i < 0 || i > M) && ((e[i] = n.get(i, i)), (r[i] = 0)),\n              s = Math.max(i - 1, 0);\n            s < t;\n            s++\n          )\n            S += Math.abs(n.get(i, s));\n        for (; b >= 0; ) {\n          for (\n            a = b;\n            a > 0 &&\n            (0 ===\n              (R = Math.abs(n.get(a - 1, a - 1)) + Math.abs(n.get(a, a))) &&\n              (R = S),\n            !(Math.abs(n.get(a, a - 1)) < x * R));\n\n          )\n            a--;\n          if (a === b)\n            n.set(b, b, n.get(b, b) + k),\n              (e[b] = n.get(b, b)),\n              (r[b] = 0),\n              b--,\n              (_ = 0);\n          else if (a === b - 1) {\n            if (\n              ((h = n.get(b, b - 1) * n.get(b - 1, b)),\n              (E = (O = (n.get(b - 1, b - 1) - n.get(b, b)) / 2) * O + h),\n              (P = Math.sqrt(Math.abs(E))),\n              n.set(b, b, n.get(b, b) + k),\n              n.set(b - 1, b - 1, n.get(b - 1, b - 1) + k),\n              (l = n.get(b, b)),\n              E >= 0)\n            ) {\n              for (\n                P = O >= 0 ? O + P : O - P,\n                  e[b - 1] = l + P,\n                  e[b] = e[b - 1],\n                  0 !== P && (e[b] = l - h / P),\n                  r[b - 1] = 0,\n                  r[b] = 0,\n                  O = (l = n.get(b, b - 1)) / (R = Math.abs(l) + Math.abs(P)),\n                  E = P / R,\n                  O /= j = Math.sqrt(O * O + E * E),\n                  E /= j,\n                  s = b - 1;\n                s < t;\n                s++\n              )\n                (P = n.get(b - 1, s)),\n                  n.set(b - 1, s, E * P + O * n.get(b, s)),\n                  n.set(b, s, E * n.get(b, s) - O * P);\n              for (i = 0; i <= b; i++)\n                (P = n.get(i, b - 1)),\n                  n.set(i, b - 1, E * P + O * n.get(i, b)),\n                  n.set(i, b, E * n.get(i, b) - O * P);\n              for (i = 0; i <= M; i++)\n                (P = o.get(i, b - 1)),\n                  o.set(i, b - 1, E * P + O * o.get(i, b)),\n                  o.set(i, b, E * o.get(i, b) - O * P);\n            } else\n              (e[b - 1] = l + O), (e[b] = l + O), (r[b - 1] = P), (r[b] = -P);\n            (b -= 2), (_ = 0);\n          } else {\n            if (\n              ((l = n.get(b, b)),\n              (p = 0),\n              (h = 0),\n              a < b &&\n                ((p = n.get(b - 1, b - 1)),\n                (h = n.get(b, b - 1) * n.get(b - 1, b))),\n              10 === _)\n            ) {\n              for (k += l, i = 0; i <= b; i++) n.set(i, i, n.get(i, i) - l);\n              (l = p =\n                0.75 *\n                (R =\n                  Math.abs(n.get(b, b - 1)) + Math.abs(n.get(b - 1, b - 2)))),\n                (h = -0.4375 * R * R);\n            }\n            if (30 === _ && (R = (R = (p - l) / 2) * R + h) > 0) {\n              for (\n                R = Math.sqrt(R),\n                  p < l && (R = -R),\n                  R = l - h / ((p - l) / 2 + R),\n                  i = 0;\n                i <= b;\n                i++\n              )\n                n.set(i, i, n.get(i, i) - R);\n              (k += R), (l = p = h = 0.964);\n            }\n            for (\n              _ += 1, f = b - 2;\n              f >= a &&\n              ((O =\n                ((j = l - (P = n.get(f, f))) * (R = p - P) - h) /\n                  n.get(f + 1, f) +\n                n.get(f, f + 1)),\n              (E = n.get(f + 1, f + 1) - P - j - R),\n              (j = n.get(f + 2, f + 1)),\n              (O /= R = Math.abs(O) + Math.abs(E) + Math.abs(j)),\n              (E /= R),\n              (j /= R),\n              f !== a) &&\n              !(\n                Math.abs(n.get(f, f - 1)) * (Math.abs(E) + Math.abs(j)) <\n                x *\n                  (Math.abs(O) *\n                    (Math.abs(n.get(f - 1, f - 1)) +\n                      Math.abs(P) +\n                      Math.abs(n.get(f + 1, f + 1))))\n              );\n\n            )\n              f--;\n            for (i = f + 2; i <= b; i++)\n              n.set(i, i - 2, 0), i > f + 2 && n.set(i, i - 3, 0);\n            for (\n              u = f;\n              u <= b - 1 &&\n              ((w = u !== b - 1),\n              u !== f &&\n                ((O = n.get(u, u - 1)),\n                (E = n.get(u + 1, u - 1)),\n                (j = w ? n.get(u + 2, u - 1) : 0),\n                0 !== (l = Math.abs(O) + Math.abs(E) + Math.abs(j)) &&\n                  ((O /= l), (E /= l), (j /= l))),\n              0 !== l);\n              u++\n            )\n              if (\n                ((R = Math.sqrt(O * O + E * E + j * j)),\n                O < 0 && (R = -R),\n                0 !== R)\n              ) {\n                for (\n                  u !== f\n                    ? n.set(u, u - 1, -R * l)\n                    : a !== f && n.set(u, u - 1, -n.get(u, u - 1)),\n                    l = (O += R) / R,\n                    p = E / R,\n                    P = j / R,\n                    E /= O,\n                    j /= O,\n                    s = u;\n                  s < t;\n                  s++\n                )\n                  (O = n.get(u, s) + E * n.get(u + 1, s)),\n                    w &&\n                      ((O += j * n.get(u + 2, s)),\n                      n.set(u + 2, s, n.get(u + 2, s) - O * P)),\n                    n.set(u, s, n.get(u, s) - O * l),\n                    n.set(u + 1, s, n.get(u + 1, s) - O * p);\n                for (i = 0; i <= Math.min(b, u + 3); i++)\n                  (O = l * n.get(i, u) + p * n.get(i, u + 1)),\n                    w &&\n                      ((O += P * n.get(i, u + 2)),\n                      n.set(i, u + 2, n.get(i, u + 2) - O * j)),\n                    n.set(i, u, n.get(i, u) - O),\n                    n.set(i, u + 1, n.get(i, u + 1) - O * E);\n                for (i = 0; i <= M; i++)\n                  (O = l * o.get(i, u) + p * o.get(i, u + 1)),\n                    w &&\n                      ((O += P * o.get(i, u + 2)),\n                      o.set(i, u + 2, o.get(i, u + 2) - O * j)),\n                    o.set(i, u, o.get(i, u) - O),\n                    o.set(i, u + 1, o.get(i, u + 1) - O * E);\n              }\n          }\n        }\n        if (0 !== S) {\n          for (b = t - 1; b >= 0; b--)\n            if (((O = e[b]), 0 === (E = r[b])))\n              for (a = b, n.set(b, b, 1), i = b - 1; i >= 0; i--) {\n                for (h = n.get(i, i) - O, j = 0, s = a; s <= b; s++)\n                  j += n.get(i, s) * n.get(s, b);\n                if (r[i] < 0) (P = h), (R = j);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? n.set(i, b, 0 !== h ? -j / h : -j / (x * S))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (c =\n                        (l * R - P * j) /\n                        (E = (e[i] - O) * (e[i] - O) + r[i] * r[i])),\n                      n.set(i, b, c),\n                      n.set(\n                        i + 1,\n                        b,\n                        Math.abs(l) > Math.abs(P)\n                          ? (-j - h * c) / l\n                          : (-R - p * c) / P,\n                      )),\n                  x * (c = Math.abs(n.get(i, b))) * c > 1)\n                )\n                  for (s = i; s <= b; s++) n.set(s, b, n.get(s, b) / c);\n              }\n            else if (E < 0)\n              for (\n                a = b - 1,\n                  Math.abs(n.get(b, b - 1)) > Math.abs(n.get(b - 1, b))\n                    ? (n.set(b - 1, b - 1, E / n.get(b, b - 1)),\n                      n.set(b - 1, b, -(n.get(b, b) - O) / n.get(b, b - 1)))\n                    : ((d = Zr(\n                        0,\n                        -n.get(b - 1, b),\n                        n.get(b - 1, b - 1) - O,\n                        E,\n                      )),\n                      n.set(b - 1, b - 1, d[0]),\n                      n.set(b - 1, b, d[1])),\n                  n.set(b, b - 1, 0),\n                  n.set(b, b, 1),\n                  i = b - 2;\n                i >= 0;\n                i--\n              ) {\n                for (y = 0, v = 0, s = a; s <= b; s++)\n                  (y += n.get(i, s) * n.get(s, b - 1)),\n                    (v += n.get(i, s) * n.get(s, b));\n                if (((h = n.get(i, i) - O), r[i] < 0))\n                  (P = h), (j = y), (R = v);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? ((d = Zr(-y, -v, h, E)),\n                      n.set(i, b - 1, d[0]),\n                      n.set(i, b, d[1]))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (m = (e[i] - O) * (e[i] - O) + r[i] * r[i] - E * E),\n                      (g = 2 * (e[i] - O) * E),\n                      0 === m &&\n                        0 === g &&\n                        (m =\n                          x *\n                          S *\n                          (Math.abs(h) +\n                            Math.abs(E) +\n                            Math.abs(l) +\n                            Math.abs(p) +\n                            Math.abs(P))),\n                      (d = Zr(\n                        l * j - P * y + E * v,\n                        l * R - P * v - E * y,\n                        m,\n                        g,\n                      )),\n                      n.set(i, b - 1, d[0]),\n                      n.set(i, b, d[1]),\n                      Math.abs(l) > Math.abs(P) + Math.abs(E)\n                        ? (n.set(\n                            i + 1,\n                            b - 1,\n                            (-y - h * n.get(i, b - 1) + E * n.get(i, b)) / l,\n                          ),\n                          n.set(\n                            i + 1,\n                            b,\n                            (-v - h * n.get(i, b) - E * n.get(i, b - 1)) / l,\n                          ))\n                        : ((d = Zr(\n                            -j - p * n.get(i, b - 1),\n                            -R - p * n.get(i, b),\n                            P,\n                            E,\n                          )),\n                          n.set(i + 1, b - 1, d[0]),\n                          n.set(i + 1, b, d[1]))),\n                  x *\n                    (c = Math.max(\n                      Math.abs(n.get(i, b - 1)),\n                      Math.abs(n.get(i, b)),\n                    )) *\n                    c >\n                    1)\n                )\n                  for (s = i; s <= b; s++)\n                    n.set(s, b - 1, n.get(s, b - 1) / c),\n                      n.set(s, b, n.get(s, b) / c);\n              }\n          for (i = 0; i < t; i++)\n            if (i < 0 || i > M)\n              for (s = i; s < t; s++) o.set(i, s, n.get(i, s));\n          for (s = t - 1; s >= 0; s--)\n            for (i = 0; i <= M; i++) {\n              for (P = 0, u = 0; u <= Math.min(s, M); u++)\n                P += o.get(i, u) * n.get(u, s);\n              o.set(i, s, P);\n            }\n        }\n      }\n      function Zr(t, r, e, o) {\n        var n, i;\n        return Math.abs(e) > Math.abs(o)\n          ? [(t + (n = o / e) * r) / (i = e + n * o), (r - n * t) / i]\n          : [((n = e / o) * t + r) / (i = o + n * e), (n * r - t) / i];\n      }\n      function $r(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var te = (function () {\n        function t(r) {\n          if (\n            ((function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, t),\n            !(r = Sr.checkMatrix(r)).isSymmetric())\n          )\n            throw new Error(\"Matrix is not symmetric\");\n          var e,\n            o,\n            n,\n            i = r,\n            s = i.rows,\n            u = new H(s, s),\n            a = !0;\n          for (o = 0; o < s; o++) {\n            var f = 0;\n            for (n = 0; n < o; n++) {\n              var c = 0;\n              for (e = 0; e < n; e++) c += u.get(n, e) * u.get(o, e);\n              (c = (i.get(o, n) - c) / u.get(n, n)),\n                u.set(o, n, c),\n                (f += c * c);\n            }\n            for (\n              a &= (f = i.get(o, o) - f) > 0,\n                u.set(o, o, Math.sqrt(Math.max(f, 0))),\n                n = o + 1;\n              n < s;\n              n++\n            )\n              u.set(o, n, 0);\n          }\n          (this.L = u), (this.positiveDefinite = Boolean(a));\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isPositiveDefinite\",\n              value: function () {\n                return this.positiveDefinite;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Sr.checkMatrix(t);\n                var r = this.L,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix dimensions do not match\");\n                if (!1 === this.isPositiveDefinite())\n                  throw new Error(\"Matrix is not positive definite\");\n                var o,\n                  n,\n                  i,\n                  s = t.columns,\n                  u = t.clone();\n                for (i = 0; i < e; i++)\n                  for (n = 0; n < s; n++) {\n                    for (o = 0; o < i; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(i, o));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                for (i = e - 1; i >= 0; i--)\n                  for (n = 0; n < s; n++) {\n                    for (o = i + 1; o < e; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(o, i));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                return u;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                return this.L;\n              },\n            },\n          ]) && $r(r.prototype, e),\n          o && $r(r, o),\n          Object.defineProperty(r, \"prototype\", { writable: !1 }),\n          t\n        );\n      })();\n      function re(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ee(t, r, e) {\n        return (\n          r && re(t.prototype, r),\n          e && re(t, e),\n          Object.defineProperty(t, \"prototype\", { writable: !1 }),\n          t\n        );\n      }\n      function oe(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      var ne = ee(function t(r) {\n        var e =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        oe(this, t), (r = Sr.checkMatrix(r));\n        var o,\n          i = e.Y,\n          s = e.scaleScores,\n          u = void 0 !== s && s,\n          a = e.maxIterations,\n          f = void 0 === a ? 1e3 : a,\n          c = e.terminationCriteria,\n          h = void 0 === c ? 1e-10 : c;\n        if (i) {\n          if (\n            (i =\n              n(i) && \"number\" == typeof i[0]\n                ? H.columnVector(i)\n                : Sr.checkMatrix(i)).rows !== r.rows\n          )\n            throw new Error(\"Y should have the same number of rows as X\");\n          o = i.getColumnVector(0);\n        } else o = r.getColumnVector(0);\n        for (var l, p, y, v, m = 1, g = 0; g < f && m > h; g++)\n          (y = (y = r\n            .transpose()\n            .mmul(o)\n            .div(o.transpose().mmul(o).get(0, 0))).div(y.norm())),\n            (l = r.mmul(y).div(y.transpose().mmul(y).get(0, 0))),\n            g > 0 && (m = l.clone().sub(v).pow(2).sum()),\n            (v = l.clone()),\n            i\n              ? ((p = (p = i\n                  .transpose()\n                  .mmul(l)\n                  .div(l.transpose().mmul(l).get(0, 0))).div(p.norm())),\n                (o = i.mmul(p).div(p.transpose().mmul(p).get(0, 0))))\n              : (o = l);\n        if (i) {\n          var w = r.transpose().mmul(l).div(l.transpose().mmul(l).get(0, 0));\n          w = w.div(w.norm());\n          var d = r.clone().sub(l.clone().mmul(w.transpose())),\n            b = o.transpose().mmul(l).div(l.transpose().mmul(l).get(0, 0)),\n            M = i.clone().sub(l.clone().mulS(b.get(0, 0)).mmul(p.transpose()));\n          (this.t = l),\n            (this.p = w.transpose()),\n            (this.w = y.transpose()),\n            (this.q = p),\n            (this.u = o),\n            (this.s = l.transpose().mmul(l)),\n            (this.xResidual = d),\n            (this.yResidual = M),\n            (this.betas = b);\n        } else\n          (this.w = y.transpose()),\n            (this.s = l.transpose().mmul(l).sqrt()),\n            (this.t = u ? l.clone().div(this.s.get(0, 0)) : l),\n            (this.xResidual = r.sub(l.mmul(y.transpose())));\n      });\n    },\n  }).default;\n});\n//# sourceMappingURL=radialLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/extends/layout/randomLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.RandomLayout = e())\n    : (t.RandomLayout = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function o(n) {\n      if (e[n]) return e[n].exports;\n      var r = (e[n] = { i: n, l: !1, exports: {} });\n      return t[n].call(r.exports, r, r.exports, o), (r.l = !0), r.exports;\n    }\n    return (\n      (o.m = t),\n      (o.c = e),\n      (o.d = function (t, e, n) {\n        o.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n });\n      }),\n      (o.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (t, e) {\n        if ((1 & e && (t = o(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var n = Object.create(null);\n        if (\n          (o.r(n),\n          Object.defineProperty(n, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var r in t)\n            o.d(\n              n,\n              r,\n              function (e) {\n                return t[e];\n              }.bind(null, r),\n            );\n        return n;\n      }),\n      (o.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return o.d(e, \"a\", e), e;\n      }),\n      (o.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (o.p = \"\"),\n      o((o.s = 394))\n    );\n  })({\n    394: function (t, e, o) {\n      \"use strict\";\n      o.r(e);\n      var n = o(52);\n      e.default = n.RandomLayout;\n    },\n    52: function (t, e, o) {\n      \"use strict\";\n      var n,\n        r =\n          ((n = function (t, e) {\n            return (n =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var o in e)\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = t;\n            }\n            n(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((o.prototype = e.prototype), new o()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.RandomLayout = void 0);\n      var i = (function (t) {\n        function e(e) {\n          var o = t.call(this) || this;\n          return (\n            (o.center = [0, 0]),\n            (o.width = 300),\n            (o.height = 300),\n            (o.nodes = []),\n            (o.edges = []),\n            (o.onLayoutEnd = function () {}),\n            o.updateCfg(e),\n            o\n          );\n        }\n        return (\n          r(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { center: [0, 0], width: 300, height: 300 };\n          }),\n          (e.prototype.execute = function () {\n            var t = this,\n              e = t.nodes,\n              o = t.center;\n            return (\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n              t.height ||\n                \"undefined\" == typeof window ||\n                (t.height = window.innerHeight),\n              e &&\n                e.forEach(function (e) {\n                  (e.x = 0.9 * (Math.random() - 0.5) * t.width + o[0]),\n                    (e.y = 0.9 * (Math.random() - 0.5) * t.height + o[1]);\n                }),\n              t.onLayoutEnd && t.onLayoutEnd(),\n              { nodes: e, edges: this.edges }\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"random\";\n          }),\n          e\n        );\n      })(o(53).Base);\n      e.RandomLayout = i;\n    },\n    53: function (t, e, o) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var n = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function () {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = n;\n    },\n  }).default;\n});\n//# sourceMappingURL=randomLayout.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/f6/index.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.F6 = e())\n    : (t.F6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var i = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(i.exports, i, i.exports, n), (i.l = !0), i.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var i in t)\n            n.d(\n              r,\n              i,\n              function (e) {\n                return t[e];\n              }.bind(null, i),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 177))\n    );\n  })({\n    0: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"contains\", function () {\n          return i;\n        }),\n        n.d(e, \"includes\", function () {\n          return i;\n        }),\n        n.d(e, \"difference\", function () {\n          return a;\n        }),\n        n.d(e, \"find\", function () {\n          return x;\n        }),\n        n.d(e, \"findIndex\", function () {\n          return w;\n        }),\n        n.d(e, \"firstValue\", function () {\n          return S;\n        }),\n        n.d(e, \"flatten\", function () {\n          return O;\n        }),\n        n.d(e, \"flattenDeep\", function () {\n          return M;\n        }),\n        n.d(e, \"getRange\", function () {\n          return E;\n        }),\n        n.d(e, \"pull\", function () {\n          return I;\n        }),\n        n.d(e, \"pullAt\", function () {\n          return N;\n        }),\n        n.d(e, \"reduce\", function () {\n          return B;\n        }),\n        n.d(e, \"remove\", function () {\n          return L;\n        }),\n        n.d(e, \"sortBy\", function () {\n          return _;\n        }),\n        n.d(e, \"union\", function () {\n          return F;\n        }),\n        n.d(e, \"uniq\", function () {\n          return R;\n        }),\n        n.d(e, \"valuesOfKey\", function () {\n          return Y;\n        }),\n        n.d(e, \"head\", function () {\n          return X;\n        }),\n        n.d(e, \"last\", function () {\n          return z;\n        }),\n        n.d(e, \"startsWith\", function () {\n          return W;\n        }),\n        n.d(e, \"endsWith\", function () {\n          return q;\n        }),\n        n.d(e, \"filter\", function () {\n          return o;\n        }),\n        n.d(e, \"every\", function () {\n          return V;\n        }),\n        n.d(e, \"some\", function () {\n          return G;\n        }),\n        n.d(e, \"group\", function () {\n          return K;\n        }),\n        n.d(e, \"groupBy\", function () {\n          return U;\n        }),\n        n.d(e, \"groupToMap\", function () {\n          return Z;\n        }),\n        n.d(e, \"getWrapBehavior\", function () {\n          return $;\n        }),\n        n.d(e, \"wrapBehavior\", function () {\n          return Q;\n        }),\n        n.d(e, \"number2color\", function () {\n          return tt;\n        }),\n        n.d(e, \"parseRadius\", function () {\n          return et;\n        }),\n        n.d(e, \"clamp\", function () {\n          return nt;\n        }),\n        n.d(e, \"fixedBase\", function () {\n          return rt;\n        }),\n        n.d(e, \"isDecimal\", function () {\n          return ot;\n        }),\n        n.d(e, \"isEven\", function () {\n          return at;\n        }),\n        n.d(e, \"isInteger\", function () {\n          return st;\n        }),\n        n.d(e, \"isNegative\", function () {\n          return ct;\n        }),\n        n.d(e, \"isNumberEqual\", function () {\n          return ut;\n        }),\n        n.d(e, \"isOdd\", function () {\n          return ht;\n        }),\n        n.d(e, \"isPositive\", function () {\n          return lt;\n        }),\n        n.d(e, \"max\", function () {\n          return k;\n        }),\n        n.d(e, \"maxBy\", function () {\n          return ft;\n        }),\n        n.d(e, \"min\", function () {\n          return C;\n        }),\n        n.d(e, \"minBy\", function () {\n          return dt;\n        }),\n        n.d(e, \"mod\", function () {\n          return pt;\n        }),\n        n.d(e, \"toDegree\", function () {\n          return vt;\n        }),\n        n.d(e, \"toInteger\", function () {\n          return yt;\n        }),\n        n.d(e, \"toRadian\", function () {\n          return bt;\n        }),\n        n.d(e, \"forIn\", function () {\n          return xt;\n        }),\n        n.d(e, \"has\", function () {\n          return wt;\n        }),\n        n.d(e, \"hasKey\", function () {\n          return St;\n        }),\n        n.d(e, \"hasValue\", function () {\n          return Mt;\n        }),\n        n.d(e, \"keys\", function () {\n          return g;\n        }),\n        n.d(e, \"isMatch\", function () {\n          return v;\n        }),\n        n.d(e, \"values\", function () {\n          return Ot;\n        }),\n        n.d(e, \"lowerCase\", function () {\n          return Ct;\n        }),\n        n.d(e, \"lowerFirst\", function () {\n          return Et;\n        }),\n        n.d(e, \"substitute\", function () {\n          return jt;\n        }),\n        n.d(e, \"upperCase\", function () {\n          return Pt;\n        }),\n        n.d(e, \"upperFirst\", function () {\n          return At;\n        }),\n        n.d(e, \"getType\", function () {\n          return Tt;\n        }),\n        n.d(e, \"isArguments\", function () {\n          return Nt;\n        }),\n        n.d(e, \"isArray\", function () {\n          return l;\n        }),\n        n.d(e, \"isArrayLike\", function () {\n          return r;\n        }),\n        n.d(e, \"isBoolean\", function () {\n          return Bt;\n        }),\n        n.d(e, \"isDate\", function () {\n          return Lt;\n        }),\n        n.d(e, \"isError\", function () {\n          return Dt;\n        }),\n        n.d(e, \"isFunction\", function () {\n          return u;\n        }),\n        n.d(e, \"isFinite\", function () {\n          return _t;\n        }),\n        n.d(e, \"isNil\", function () {\n          return h;\n        }),\n        n.d(e, \"isNull\", function () {\n          return Rt;\n        }),\n        n.d(e, \"isNumber\", function () {\n          return it;\n        }),\n        n.d(e, \"isObject\", function () {\n          return d;\n        }),\n        n.d(e, \"isObjectLike\", function () {\n          return m;\n        }),\n        n.d(e, \"isPlainObject\", function () {\n          return b;\n        }),\n        n.d(e, \"isPrototype\", function () {\n          return Yt;\n        }),\n        n.d(e, \"isRegExp\", function () {\n          return Xt;\n        }),\n        n.d(e, \"isString\", function () {\n          return D;\n        }),\n        n.d(e, \"isType\", function () {\n          return c;\n        }),\n        n.d(e, \"isUndefined\", function () {\n          return zt;\n        }),\n        n.d(e, \"isElement\", function () {\n          return Wt;\n        }),\n        n.d(e, \"requestAnimationFrame\", function () {\n          return qt;\n        }),\n        n.d(e, \"clearAnimationFrame\", function () {\n          return Vt;\n        }),\n        n.d(e, \"augment\", function () {\n          return Ut;\n        }),\n        n.d(e, \"clone\", function () {\n          return Kt;\n        }),\n        n.d(e, \"debounce\", function () {\n          return $t;\n        }),\n        n.d(e, \"memoize\", function () {\n          return Qt;\n        }),\n        n.d(e, \"deepMix\", function () {\n          return te;\n        }),\n        n.d(e, \"each\", function () {\n          return p;\n        }),\n        n.d(e, \"extend\", function () {\n          return ee;\n        }),\n        n.d(e, \"indexOf\", function () {\n          return ne;\n        }),\n        n.d(e, \"isEmpty\", function () {\n          return ie;\n        }),\n        n.d(e, \"isEqual\", function () {\n          return oe;\n        }),\n        n.d(e, \"isEqualWith\", function () {\n          return ae;\n        }),\n        n.d(e, \"map\", function () {\n          return se;\n        }),\n        n.d(e, \"mapValues\", function () {\n          return ue;\n        }),\n        n.d(e, \"mix\", function () {\n          return Ht;\n        }),\n        n.d(e, \"assign\", function () {\n          return Ht;\n        }),\n        n.d(e, \"get\", function () {\n          return he;\n        }),\n        n.d(e, \"set\", function () {\n          return le;\n        }),\n        n.d(e, \"pick\", function () {\n          return de;\n        }),\n        n.d(e, \"omit\", function () {\n          return pe;\n        }),\n        n.d(e, \"throttle\", function () {\n          return ge;\n        }),\n        n.d(e, \"toArray\", function () {\n          return ve;\n        }),\n        n.d(e, \"toString\", function () {\n          return kt;\n        }),\n        n.d(e, \"uniqueId\", function () {\n          return me;\n        }),\n        n.d(e, \"noop\", function () {\n          return be;\n        }),\n        n.d(e, \"identity\", function () {\n          return xe;\n        }),\n        n.d(e, \"size\", function () {\n          return we;\n        }),\n        n.d(e, \"measureTextWidth\", function () {\n          return Me;\n        }),\n        n.d(e, \"getEllipsisText\", function () {\n          return ke;\n        }),\n        n.d(e, \"Cache\", function () {\n          return Ce;\n        });\n      var r = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = function (t, e) {\n          return !!r(t) && t.indexOf(e) > -1;\n        },\n        o = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            e(o, i) && n.push(o);\n          }\n          return n;\n        },\n        a = function (t, e) {\n          return (\n            void 0 === e && (e = []),\n            o(t, function (t) {\n              return !i(e, t);\n            })\n          );\n        },\n        s = {}.toString,\n        c = function (t, e) {\n          return s.call(t) === \"[object \" + e + \"]\";\n        },\n        u = function (t) {\n          return c(t, \"Function\");\n        },\n        h = function (t) {\n          return null == t;\n        },\n        l = function (t) {\n          return Array.isArray ? Array.isArray(t) : c(t, \"Array\");\n        };\n      function f(t) {\n        return (f =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var d = function (t) {\n        var e = f(t);\n        return (null !== t && \"object\" === e) || \"function\" === e;\n      };\n      var p = function (t, e) {\n          if (t)\n            if (l(t))\n              for (var n = 0, r = t.length; n < r && !1 !== e(t[n], n); n++);\n            else if (d(t))\n              for (var i in t)\n                if (t.hasOwnProperty(i) && !1 === e(t[i], i)) break;\n        },\n        g = Object.keys\n          ? function (t) {\n              return Object.keys(t);\n            }\n          : function (t) {\n              var e = [];\n              return (\n                p(t, function (n, r) {\n                  (u(t) && \"prototype\" === r) || e.push(r);\n                }),\n                e\n              );\n            };\n      var v = function (t, e) {\n        var n = g(e),\n          r = n.length;\n        if (h(t)) return !r;\n        for (var i = 0; i < r; i += 1) {\n          var o = n[i];\n          if (e[o] !== t[o] || !(o in t)) return !1;\n        }\n        return !0;\n      };\n      function y(t) {\n        return (y =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var m = function (t) {\n          return \"object\" === y(t) && null !== t;\n        },\n        b = function (t) {\n          if (!m(t) || !c(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var e = t; null !== Object.getPrototypeOf(e); )\n            e = Object.getPrototypeOf(e);\n          return Object.getPrototypeOf(t) === e;\n        };\n      var x = function (t, e) {\n        if (!l(t)) return null;\n        var n;\n        if (\n          (u(e) && (n = e),\n          b(e) &&\n            (n = function (t) {\n              return v(t, e);\n            }),\n          n)\n        )\n          for (var r = 0; r < t.length; r += 1) if (n(t[r])) return t[r];\n        return null;\n      };\n      var w = function (t, e, n) {\n          void 0 === n && (n = 0);\n          for (var r = n; r < t.length; r++) if (e(t[r], r)) return r;\n          return -1;\n        },\n        S = function (t, e) {\n          for (var n = null, r = 0; r < t.length; r++) {\n            var i = t[r][e];\n            if (!h(i)) {\n              n = l(i) ? i[0] : i;\n              break;\n            }\n          }\n          return n;\n        },\n        O = function (t) {\n          if (!l(t)) return [];\n          for (var e = [], n = 0; n < t.length; n++) e = e.concat(t[n]);\n          return e;\n        },\n        M = function t(e, n) {\n          if ((void 0 === n && (n = []), l(e)))\n            for (var r = 0; r < e.length; r += 1) t(e[r], n);\n          else n.push(e);\n          return n;\n        },\n        k = function (t) {\n          if (l(t))\n            return t.reduce(function (t, e) {\n              return Math.max(t, e);\n            }, t[0]);\n        },\n        C = function (t) {\n          if (l(t))\n            return t.reduce(function (t, e) {\n              return Math.min(t, e);\n            }, t[0]);\n        },\n        E = function (t) {\n          var e = t.filter(function (t) {\n            return !isNaN(t);\n          });\n          if (!e.length) return { min: 0, max: 0 };\n          if (l(t[0])) {\n            for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n            e = n;\n          }\n          var i = k(e);\n          return { min: C(e), max: i };\n        },\n        j = Array.prototype,\n        P = j.splice,\n        A = j.indexOf,\n        I = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r++)\n            for (var i = e[r], o = -1; (o = A.call(t, i)) > -1; )\n              P.call(t, o, 1);\n          return t;\n        },\n        T = Array.prototype.splice,\n        N = function (t, e) {\n          if (!r(t)) return [];\n          for (var n = t ? e.length : 0, i = n - 1; n--; ) {\n            var o = void 0,\n              a = e[n];\n            (n !== i && a === o) || ((o = a), T.call(t, a, 1));\n          }\n          return t;\n        },\n        B = function (t, e, n) {\n          if (!l(t) && !b(t)) return t;\n          var r = n;\n          return (\n            p(t, function (t, n) {\n              r = e(r, t, n);\n            }),\n            r\n          );\n        },\n        L = function (t, e) {\n          var n = [];\n          if (!r(t)) return n;\n          for (var i = -1, o = [], a = t.length; ++i < a; ) {\n            var s = t[i];\n            e(s, i, t) && (n.push(s), o.push(i));\n          }\n          return N(t, o), n;\n        },\n        D = function (t) {\n          return c(t, \"String\");\n        };\n      var _ = function (t, e) {\n        var n;\n        if (u(e))\n          n = function (t, n) {\n            return e(t) - e(n);\n          };\n        else {\n          var r = [];\n          D(e) ? r.push(e) : l(e) && (r = e),\n            (n = function (t, e) {\n              for (var n = 0; n < r.length; n += 1) {\n                var i = r[n];\n                if (t[i] > e[i]) return 1;\n                if (t[i] < e[i]) return -1;\n              }\n              return 0;\n            });\n        }\n        return t.sort(n), t;\n      };\n      function R(t, e) {\n        void 0 === e && (e = new Map());\n        var n = [];\n        if (Array.isArray(t))\n          for (var r = 0, i = t.length; r < i; r++) {\n            var o = t[r];\n            e.has(o) || (n.push(o), e.set(o, !0));\n          }\n        return n;\n      }\n      var F = function () {\n          for (var t = [], e = 0; e < arguments.length; e++)\n            t[e] = arguments[e];\n          return R([].concat.apply([], t));\n        },\n        Y = function (t, e) {\n          for (var n = [], r = {}, i = 0; i < t.length; i++) {\n            var o = t[i][e];\n            if (!h(o)) {\n              l(o) || (o = [o]);\n              for (var a = 0; a < o.length; a++) {\n                var s = o[a];\n                r[s] || (n.push(s), (r[s] = !0));\n              }\n            }\n          }\n          return n;\n        };\n      function X(t) {\n        if (r(t)) return t[0];\n      }\n      function z(t) {\n        if (r(t)) {\n          return t[t.length - 1];\n        }\n      }\n      var W = function (t, e) {\n        return !(!l(t) && !D(t)) && t[0] === e;\n      };\n      var q = function (t, e) {\n          return !(!l(t) && !D(t)) && t[t.length - 1] === e;\n        },\n        V = function (t, e) {\n          for (var n = 0; n < t.length; n++) if (!e(t[n], n)) return !1;\n          return !0;\n        },\n        G = function (t, e) {\n          for (var n = 0; n < t.length; n++) if (e(t[n], n)) return !0;\n          return !1;\n        },\n        H = Object.prototype.hasOwnProperty;\n      var U = function (t, e) {\n        if (!e || !l(t)) return {};\n        for (\n          var n,\n            r = {},\n            i = u(e)\n              ? e\n              : function (t) {\n                  return t[e];\n                },\n            o = 0;\n          o < t.length;\n          o++\n        ) {\n          var a = t[o];\n          (n = i(a)), H.call(r, n) ? r[n].push(a) : (r[n] = [a]);\n        }\n        return r;\n      };\n      function Z(t, e) {\n        if (!e) return { 0: t };\n        if (!u(e)) {\n          var n = l(e) ? e : e.replace(/\\s+/g, \"\").split(\"*\");\n          e = function (t) {\n            for (var e = \"_\", r = 0, i = n.length; r < i; r++)\n              e += t[n[r]] && t[n[r]].toString();\n            return e;\n          };\n        }\n        return U(t, e);\n      }\n      var K = function (t, e) {\n        if (!e) return [t];\n        var n = Z(t, e),\n          r = [];\n        for (var i in n) r.push(n[i]);\n        return r;\n      };\n      var $ = function (t, e) {\n        return t[\"_wrap_\" + e];\n      };\n      var Q = function (t, e) {\n          if (t[\"_wrap_\" + e]) return t[\"_wrap_\" + e];\n          var n = function (n) {\n            t[e](n);\n          };\n          return (t[\"_wrap_\" + e] = n), n;\n        },\n        J = {};\n      var tt = function (t) {\n        var e = J[t];\n        if (!e) {\n          for (var n = t.toString(16), r = n.length; r < 6; r++) n = \"0\" + n;\n          (e = \"#\" + n), (J[t] = e);\n        }\n        return e;\n      };\n      var et = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          return (\n            l(t)\n              ? 1 === t.length\n                ? (e = n = r = i = t[0])\n                : 2 === t.length\n                ? ((e = r = t[0]), (n = i = t[1]))\n                : 3 === t.length\n                ? ((e = t[0]), (n = i = t[1]), (r = t[2]))\n                : ((e = t[0]), (n = t[1]), (r = t[2]), (i = t[3]))\n              : (e = n = r = i = t),\n            { r1: e, r2: n, r3: r, r4: i }\n          );\n        },\n        nt = function (t, e, n) {\n          return t < e ? e : t > n ? n : t;\n        },\n        rt = function (t, e) {\n          var n = e.toString(),\n            r = n.indexOf(\".\");\n          if (-1 === r) return Math.round(t);\n          var i = n.substr(r + 1).length;\n          return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n        },\n        it = function (t) {\n          return c(t, \"Number\");\n        },\n        ot = function (t) {\n          return it(t) && t % 1 != 0;\n        },\n        at = function (t) {\n          return it(t) && t % 2 == 0;\n        },\n        st = Number.isInteger\n          ? Number.isInteger\n          : function (t) {\n              return it(t) && t % 1 == 0;\n            },\n        ct = function (t) {\n          return it(t) && t < 0;\n        };\n      function ut(t, e, n) {\n        return void 0 === n && (n = 1e-5), Math.abs(t - e) < n;\n      }\n      var ht = function (t) {\n          return it(t) && t % 2 != 0;\n        },\n        lt = function (t) {\n          return it(t) && t > 0;\n        },\n        ft = function (t, e) {\n          if (l(t)) {\n            for (var n, r = -1 / 0, i = 0; i < t.length; i++) {\n              var o = t[i],\n                a = u(e) ? e(o) : o[e];\n              a > r && ((n = o), (r = a));\n            }\n            return n;\n          }\n        },\n        dt = function (t, e) {\n          if (l(t)) {\n            for (var n, r = 1 / 0, i = 0; i < t.length; i++) {\n              var o = t[i],\n                a = u(e) ? e(o) : o[e];\n              a < r && ((n = o), (r = a));\n            }\n            return n;\n          }\n        },\n        pt = function (t, e) {\n          return ((t % e) + e) % e;\n        },\n        gt = 180 / Math.PI,\n        vt = function (t) {\n          return gt * t;\n        },\n        yt = parseInt,\n        mt = Math.PI / 180,\n        bt = function (t) {\n          return mt * t;\n        },\n        xt = p,\n        wt = function (t, e) {\n          return t.hasOwnProperty(e);\n        },\n        St = wt,\n        Ot = Object.values\n          ? function (t) {\n              return Object.values(t);\n            }\n          : function (t) {\n              var e = [];\n              return (\n                p(t, function (n, r) {\n                  (u(t) && \"prototype\" === r) || e.push(n);\n                }),\n                e\n              );\n            },\n        Mt = function (t, e) {\n          return i(Ot(t), e);\n        },\n        kt = function (t) {\n          return h(t) ? \"\" : t.toString();\n        },\n        Ct = function (t) {\n          return kt(t).toLowerCase();\n        },\n        Et = function (t) {\n          var e = kt(t);\n          return e.charAt(0).toLowerCase() + e.substring(1);\n        };\n      var jt = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                return \"\\\\\" === t.charAt(0)\n                  ? t.slice(1)\n                  : void 0 === e[n]\n                  ? \"\"\n                  : e[n];\n              })\n            : t;\n        },\n        Pt = function (t) {\n          return kt(t).toUpperCase();\n        },\n        At = function (t) {\n          var e = kt(t);\n          return e.charAt(0).toUpperCase() + e.substring(1);\n        },\n        It = {}.toString,\n        Tt = function (t) {\n          return It.call(t)\n            .replace(/^\\[object /, \"\")\n            .replace(/]$/, \"\");\n        },\n        Nt = function (t) {\n          return c(t, \"Arguments\");\n        },\n        Bt = function (t) {\n          return c(t, \"Boolean\");\n        },\n        Lt = function (t) {\n          return c(t, \"Date\");\n        },\n        Dt = function (t) {\n          return c(t, \"Error\");\n        },\n        _t = function (t) {\n          return it(t) && isFinite(t);\n        },\n        Rt = function (t) {\n          return null === t;\n        },\n        Ft = Object.prototype,\n        Yt = function (t) {\n          var e = t && t.constructor;\n          return t === ((\"function\" == typeof e && e.prototype) || Ft);\n        },\n        Xt = function (t) {\n          return c(t, \"RegExp\");\n        },\n        zt = function (t) {\n          return void 0 === t;\n        },\n        Wt = function (t) {\n          return t instanceof Element || t instanceof HTMLDocument;\n        };\n      function qt(t) {\n        return (\n          window.requestAnimationFrame ||\n          window.webkitRequestAnimationFrame ||\n          window.mozRequestAnimationFrame ||\n          window.msRequestAnimationFrame ||\n          function (t) {\n            return setTimeout(t, 16);\n          }\n        )(t);\n      }\n      function Vt(t) {\n        (\n          window.cancelAnimationFrame ||\n          window.webkitCancelAnimationFrame ||\n          window.mozCancelAnimationFrame ||\n          window.msCancelAnimationFrame ||\n          clearTimeout\n        )(t);\n      }\n      function Gt(t, e) {\n        for (var n in e)\n          e.hasOwnProperty(n) &&\n            \"constructor\" !== n &&\n            void 0 !== e[n] &&\n            (t[n] = e[n]);\n      }\n      function Ht(t, e, n, r) {\n        return e && Gt(t, e), n && Gt(t, n), r && Gt(t, r), t;\n      }\n      var Ut = function () {\n        for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n        for (var n = t[0], r = 1; r < t.length; r++) {\n          var i = t[r];\n          u(i) && (i = i.prototype), Ht(n.prototype, i);\n        }\n      };\n      function Zt(t) {\n        return (Zt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Kt = function t(e) {\n        if (\"object\" !== Zt(e) || null === e) return e;\n        var n;\n        if (l(e)) {\n          n = [];\n          for (var r = 0, i = e.length; r < i; r++)\n            \"object\" === Zt(e[r]) && null != e[r]\n              ? (n[r] = t(e[r]))\n              : (n[r] = e[r]);\n        } else\n          for (var o in ((n = {}), e))\n            \"object\" === Zt(e[o]) && null != e[o]\n              ? (n[o] = t(e[o]))\n              : (n[o] = e[o]);\n        return n;\n      };\n      var $t = function (t, e, n) {\n          var r;\n          return function () {\n            var i = this,\n              o = arguments,\n              a = function () {\n                (r = null), n || t.apply(i, o);\n              },\n              s = n && !r;\n            clearTimeout(r), (r = setTimeout(a, e)), s && t.apply(i, o);\n          };\n        },\n        Qt = function (t, e) {\n          if (!u(t)) throw new TypeError(\"Expected a function\");\n          var n = function n() {\n            for (var r = [], i = 0; i < arguments.length; i++)\n              r[i] = arguments[i];\n            var o = e ? e.apply(this, r) : r[0],\n              a = n.cache;\n            if (a.has(o)) return a.get(o);\n            var s = t.apply(this, r);\n            return a.set(o, s), s;\n          };\n          return (n.cache = new Map()), n;\n        };\n      function Jt(t, e, n, r) {\n        for (var i in ((n = n || 0), (r = r || 5), e))\n          if (e.hasOwnProperty(i)) {\n            var o = e[i];\n            null !== o && b(o)\n              ? (b(t[i]) || (t[i] = {}),\n                n < r ? Jt(t[i], o, n + 1, r) : (t[i] = e[i]))\n              : l(o)\n              ? ((t[i] = []), (t[i] = t[i].concat(o)))\n              : void 0 !== o && (t[i] = o);\n          }\n      }\n      var te = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r += 1) Jt(t, e[r]);\n          return t;\n        },\n        ee = function (t, e, n, r) {\n          u(e) || ((n = e), (e = t), (t = function () {}));\n          var i = Object.create\n              ? function (t, e) {\n                  return Object.create(t, { constructor: { value: e } });\n                }\n              : function (t, e) {\n                  function n() {}\n                  n.prototype = t;\n                  var r = new n();\n                  return (r.constructor = e), r;\n                },\n            o = i(e.prototype, t);\n          return (\n            (t.prototype = Ht(o, t.prototype)),\n            (t.superclass = i(e.prototype, e)),\n            Ht(o, n),\n            Ht(t, r),\n            t\n          );\n        },\n        ne = function (t, e) {\n          if (!r(t)) return -1;\n          var n = Array.prototype.indexOf;\n          if (n) return n.call(t, e);\n          for (var i = -1, o = 0; o < t.length; o++)\n            if (t[o] === e) {\n              i = o;\n              break;\n            }\n          return i;\n        },\n        re = Object.prototype.hasOwnProperty;\n      var ie = function (t) {\n          if (h(t)) return !0;\n          if (r(t)) return !t.length;\n          var e = Tt(t);\n          if (\"Map\" === e || \"Set\" === e) return !t.size;\n          if (Yt(t)) return !Object.keys(t).length;\n          for (var n in t) if (re.call(t, n)) return !1;\n          return !0;\n        },\n        oe = function t(e, n) {\n          if (e === n) return !0;\n          if (!e || !n) return !1;\n          if (D(e) || D(n)) return !1;\n          if (r(e) || r(n)) {\n            if (e.length !== n.length) return !1;\n            for (var i = !0, o = 0; o < e.length && (i = t(e[o], n[o])); o++);\n            return i;\n          }\n          if (m(e) || m(n)) {\n            var a = Object.keys(e),\n              s = Object.keys(n);\n            if (a.length !== s.length) return !1;\n            for (i = !0, o = 0; o < a.length && (i = t(e[a[o]], n[a[o]])); o++);\n            return i;\n          }\n          return !1;\n        },\n        ae = function (t, e, n) {\n          return u(n) ? !!n(t, e) : oe(t, e);\n        },\n        se = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            n.push(e(o, i));\n          }\n          return n;\n        },\n        ce = function (t) {\n          return t;\n        },\n        ue = function (t, e) {\n          void 0 === e && (e = ce);\n          var n = {};\n          return (\n            d(t) &&\n              !h(t) &&\n              Object.keys(t).forEach(function (r) {\n                n[r] = e(t[r], r);\n              }),\n            n\n          );\n        },\n        he = function (t, e, n) {\n          for (var r = 0, i = D(e) ? e.split(\".\") : e; t && r < i.length; )\n            t = t[i[r++]];\n          return void 0 === t || r < i.length ? n : t;\n        },\n        le = function (t, e, n) {\n          var r = t,\n            i = D(e) ? e.split(\".\") : e;\n          return (\n            i.forEach(function (t, e) {\n              e < i.length - 1\n                ? (d(r[t]) || (r[t] = it(i[e + 1]) ? [] : {}), (r = r[t]))\n                : (r[t] = n);\n            }),\n            t\n          );\n        },\n        fe = Object.prototype.hasOwnProperty,\n        de = function (t, e) {\n          if (null === t || !b(t)) return {};\n          var n = {};\n          return (\n            p(e, function (e) {\n              fe.call(t, e) && (n[e] = t[e]);\n            }),\n            n\n          );\n        },\n        pe = function (t, e) {\n          return B(\n            t,\n            function (t, n, r) {\n              return e.includes(r) || (t[r] = n), t;\n            },\n            {},\n          );\n        },\n        ge = function (t, e, n) {\n          var r,\n            i,\n            o,\n            a,\n            s = 0;\n          n || (n = {});\n          var c = function () {\n              (s = !1 === n.leading ? 0 : Date.now()),\n                (r = null),\n                (a = t.apply(i, o)),\n                r || (i = o = null);\n            },\n            u = function () {\n              var u = Date.now();\n              s || !1 !== n.leading || (s = u);\n              var h = e - (u - s);\n              return (\n                (i = this),\n                (o = arguments),\n                h <= 0 || h > e\n                  ? (r && (clearTimeout(r), (r = null)),\n                    (s = u),\n                    (a = t.apply(i, o)),\n                    r || (i = o = null))\n                  : r || !1 === n.trailing || (r = setTimeout(c, h)),\n                a\n              );\n            };\n          return (\n            (u.cancel = function () {\n              clearTimeout(r), (s = 0), (r = i = o = null);\n            }),\n            u\n          );\n        },\n        ve = function (t) {\n          return r(t) ? Array.prototype.slice.call(t) : [];\n        },\n        ye = {},\n        me = function (t) {\n          return ye[(t = t || \"g\")] ? (ye[t] += 1) : (ye[t] = 1), t + ye[t];\n        },\n        be = function () {},\n        xe = function (t) {\n          return t;\n        };\n      function we(t) {\n        return h(t) ? 0 : r(t) ? t.length : Object.keys(t).length;\n      }\n      var Se,\n        Oe = n(1),\n        Me = Qt(\n          function (t, e) {\n            void 0 === e && (e = {});\n            var n = e.fontSize,\n              r = e.fontFamily,\n              i = e.fontWeight,\n              o = e.fontStyle,\n              a = e.fontVariant;\n            return (\n              Se || (Se = document.createElement(\"canvas\").getContext(\"2d\")),\n              (Se.font = [o, a, i, n + \"px\", r].join(\" \")),\n              Se.measureText(D(t) ? t : \"\").width\n            );\n          },\n          function (t, e) {\n            return void 0 === e && (e = {}), Object(Oe.g)([t], Ot(e)).join(\"\");\n          },\n        ),\n        ke = function (t, e, n, r) {\n          void 0 === r && (r = \"...\");\n          var i,\n            o,\n            a = Me(r, n),\n            s = D(t) ? t : kt(t),\n            c = e,\n            u = [];\n          if (Me(t, n) <= e) return t;\n          for (; (i = s.substr(0, 16)), !((o = Me(i, n)) + a > c && o > c); )\n            if ((u.push(i), (c -= o), !(s = s.substr(16)))) return u.join(\"\");\n          for (; (i = s.substr(0, 1)), !((o = Me(i, n)) + a > c); )\n            if ((u.push(i), (c -= o), !(s = s.substr(1)))) return u.join(\"\");\n          return \"\" + u.join(\"\") + r;\n        },\n        Ce = (function () {\n          function t() {\n            this.map = {};\n          }\n          return (\n            (t.prototype.has = function (t) {\n              return void 0 !== this.map[t];\n            }),\n            (t.prototype.get = function (t, e) {\n              var n = this.map[t];\n              return void 0 === n ? e : n;\n            }),\n            (t.prototype.set = function (t, e) {\n              this.map[t] = e;\n            }),\n            (t.prototype.clear = function () {\n              this.map = {};\n            }),\n            (t.prototype.delete = function (t) {\n              delete this.map[t];\n            }),\n            (t.prototype.size = function () {\n              return Object.keys(this.map).length;\n            }),\n            t\n          );\n        })();\n    },\n    1: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return i;\n      }),\n        n.d(e, \"a\", function () {\n          return o;\n        }),\n        n.d(e, \"e\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        }),\n        n.d(e, \"d\", function () {\n          return c;\n        }),\n        n.d(e, \"g\", function () {\n          return u;\n        }),\n        n.d(e, \"f\", function () {\n          return h;\n        });\n      /*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n      var r = function (t, e) {\n        return (r =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, e) {\n              t.__proto__ = e;\n            }) ||\n          function (t, e) {\n            for (var n in e)\n              Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n          })(t, e);\n      };\n      function i(t, e) {\n        if (\"function\" != typeof e && null !== e)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(e) +\n              \" is not a constructor or null\",\n          );\n        function n() {\n          this.constructor = t;\n        }\n        r(t, e),\n          (t.prototype =\n            null === e\n              ? Object.create(e)\n              : ((n.prototype = e.prototype), new n()));\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function a(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      function s(t, e, n, r) {\n        return new (n || (n = Promise))(function (i, o) {\n          function a(t) {\n            try {\n              c(r.next(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function s(t) {\n            try {\n              c(r.throw(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function c(t) {\n            var e;\n            t.done\n              ? i(t.value)\n              : ((e = t.value),\n                e instanceof n\n                  ? e\n                  : new n(function (t) {\n                      t(e);\n                    })).then(a, s);\n          }\n          c((r = r.apply(t, e || [])).next());\n        });\n      }\n      function c(t, e) {\n        var n,\n          r,\n          i,\n          o,\n          a = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (o = { next: s(0), throw: s(1), return: s(2) }),\n          \"function\" == typeof Symbol &&\n            (o[Symbol.iterator] = function () {\n              return this;\n            }),\n          o\n        );\n        function s(o) {\n          return function (s) {\n            return (function (o) {\n              if (n) throw new TypeError(\"Generator is already executing.\");\n              for (; a; )\n                try {\n                  if (\n                    ((n = 1),\n                    r &&\n                      (i =\n                        2 & o[0]\n                          ? r.return\n                          : o[0]\n                          ? r.throw || ((i = r.return) && i.call(r), 0)\n                          : r.next) &&\n                      !(i = i.call(r, o[1])).done)\n                  )\n                    return i;\n                  switch (((r = 0), i && (o = [2 & o[0], i.value]), o[0])) {\n                    case 0:\n                    case 1:\n                      i = o;\n                      break;\n                    case 4:\n                      return a.label++, { value: o[1], done: !1 };\n                    case 5:\n                      a.label++, (r = o[1]), (o = [0]);\n                      continue;\n                    case 7:\n                      (o = a.ops.pop()), a.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = a.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== o[0] && 2 !== o[0]))\n                      ) {\n                        a = 0;\n                        continue;\n                      }\n                      if (3 === o[0] && (!i || (o[1] > i[0] && o[1] < i[3]))) {\n                        a.label = o[1];\n                        break;\n                      }\n                      if (6 === o[0] && a.label < i[1]) {\n                        (a.label = i[1]), (i = o);\n                        break;\n                      }\n                      if (i && a.label < i[2]) {\n                        (a.label = i[2]), a.ops.push(o);\n                        break;\n                      }\n                      i[2] && a.ops.pop(), a.trys.pop();\n                      continue;\n                  }\n                  o = e.call(t, a);\n                } catch (t) {\n                  (o = [6, t]), (r = 0);\n                } finally {\n                  n = i = 0;\n                }\n              if (5 & o[0]) throw o[1];\n              return { value: o[0] ? o[1] : void 0, done: !0 };\n            })([o, s]);\n          };\n        }\n      }\n      Object.create;\n      function u() {\n        for (var t = 0, e = 0, n = arguments.length; e < n; e++)\n          t += arguments[e].length;\n        var r = Array(t),\n          i = 0;\n        for (e = 0; e < n; e++)\n          for (var o = arguments[e], a = 0, s = o.length; a < s; a++, i++)\n            r[i] = o[a];\n        return r;\n      }\n      function h(t, e, n) {\n        if (n || 2 === arguments.length)\n          for (var r, i = 0, o = e.length; i < o; i++)\n            (!r && i in e) ||\n              (r || (r = Array.prototype.slice.call(e, 0, i)), (r[i] = e[i]));\n        return t.concat(r || Array.prototype.slice.call(e));\n      }\n      Object.create;\n    },\n    100: function (t, e, n) {\n      \"use strict\";\n      var r = n(186),\n        i = {};\n      for (var o in r) r.hasOwnProperty(o) && (i[r[o]] = o);\n      var a = (t.exports = {\n        rgb: { channels: 3, labels: \"rgb\" },\n        hsl: { channels: 3, labels: \"hsl\" },\n        hsv: { channels: 3, labels: \"hsv\" },\n        hwb: { channels: 3, labels: \"hwb\" },\n        cmyk: { channels: 4, labels: \"cmyk\" },\n        xyz: { channels: 3, labels: \"xyz\" },\n        lab: { channels: 3, labels: \"lab\" },\n        lch: { channels: 3, labels: \"lch\" },\n        hex: { channels: 1, labels: [\"hex\"] },\n        keyword: { channels: 1, labels: [\"keyword\"] },\n        ansi16: { channels: 1, labels: [\"ansi16\"] },\n        ansi256: { channels: 1, labels: [\"ansi256\"] },\n        hcg: { channels: 3, labels: [\"h\", \"c\", \"g\"] },\n        apple: { channels: 3, labels: [\"r16\", \"g16\", \"b16\"] },\n        gray: { channels: 1, labels: [\"gray\"] },\n      });\n      for (var s in a)\n        if (a.hasOwnProperty(s)) {\n          if (!(\"channels\" in a[s]))\n            throw new Error(\"missing channels property: \" + s);\n          if (!(\"labels\" in a[s]))\n            throw new Error(\"missing channel labels property: \" + s);\n          if (a[s].labels.length !== a[s].channels)\n            throw new Error(\"channel and label counts mismatch: \" + s);\n          var c = a[s].channels,\n            u = a[s].labels;\n          delete a[s].channels,\n            delete a[s].labels,\n            Object.defineProperty(a[s], \"channels\", { value: c }),\n            Object.defineProperty(a[s], \"labels\", { value: u });\n        }\n      function h(t, e) {\n        return (\n          Math.pow(t[0] - e[0], 2) +\n          Math.pow(t[1] - e[1], 2) +\n          Math.pow(t[2] - e[2], 2)\n        );\n      }\n      (a.rgb.hsl = function (t) {\n        var e,\n          n,\n          r = t[0] / 255,\n          i = t[1] / 255,\n          o = t[2] / 255,\n          a = Math.min(r, i, o),\n          s = Math.max(r, i, o),\n          c = s - a;\n        return (\n          s === a\n            ? (e = 0)\n            : r === s\n            ? (e = (i - o) / c)\n            : i === s\n            ? (e = 2 + (o - r) / c)\n            : o === s && (e = 4 + (r - i) / c),\n          (e = Math.min(60 * e, 360)) < 0 && (e += 360),\n          (n = (a + s) / 2),\n          [\n            e,\n            100 * (s === a ? 0 : n <= 0.5 ? c / (s + a) : c / (2 - s - a)),\n            100 * n,\n          ]\n        );\n      }),\n        (a.rgb.hsv = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a = t[0] / 255,\n            s = t[1] / 255,\n            c = t[2] / 255,\n            u = Math.max(a, s, c),\n            h = u - Math.min(a, s, c),\n            l = function (t) {\n              return (u - t) / 6 / h + 0.5;\n            };\n          return (\n            0 === h\n              ? (i = o = 0)\n              : ((o = h / u),\n                (e = l(a)),\n                (n = l(s)),\n                (r = l(c)),\n                a === u\n                  ? (i = r - n)\n                  : s === u\n                  ? (i = 1 / 3 + e - r)\n                  : c === u && (i = 2 / 3 + n - e),\n                i < 0 ? (i += 1) : i > 1 && (i -= 1)),\n            [360 * i, 100 * o, 100 * u]\n          );\n        }),\n        (a.rgb.hwb = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return [\n            a.rgb.hsl(t)[0],\n            (1 / 255) * Math.min(e, Math.min(n, r)) * 100,\n            100 * (r = 1 - (1 / 255) * Math.max(e, Math.max(n, r))),\n          ];\n        }),\n        (a.rgb.cmyk = function (t) {\n          var e = t[0] / 255,\n            n = t[1] / 255,\n            r = t[2] / 255,\n            i = Math.min(1 - e, 1 - n, 1 - r);\n          return [\n            100 * ((1 - e - i) / (1 - i) || 0),\n            100 * ((1 - n - i) / (1 - i) || 0),\n            100 * ((1 - r - i) / (1 - i) || 0),\n            100 * i,\n          ];\n        }),\n        (a.rgb.keyword = function (t) {\n          var e,\n            n = i[t];\n          if (n) return n;\n          var o,\n            a = 1 / 0;\n          for (var s in r)\n            r.hasOwnProperty(s) && (e = h(t, r[s])) < a && ((a = e), (o = s));\n          return o;\n        }),\n        (a.keyword.rgb = function (t) {\n          return r[t];\n        }),\n        (a.rgb.xyz = function (t) {\n          var e = t[0] / 255,\n            n = t[1] / 255,\n            r = t[2] / 255;\n          return [\n            100 *\n              (0.4124 *\n                (e =\n                  e > 0.04045\n                    ? Math.pow((e + 0.055) / 1.055, 2.4)\n                    : e / 12.92) +\n                0.3576 *\n                  (n =\n                    n > 0.04045\n                      ? Math.pow((n + 0.055) / 1.055, 2.4)\n                      : n / 12.92) +\n                0.1805 *\n                  (r =\n                    r > 0.04045\n                      ? Math.pow((r + 0.055) / 1.055, 2.4)\n                      : r / 12.92)),\n            100 * (0.2126 * e + 0.7152 * n + 0.0722 * r),\n            100 * (0.0193 * e + 0.1192 * n + 0.9505 * r),\n          ];\n        }),\n        (a.rgb.lab = function (t) {\n          var e = a.rgb.xyz(t),\n            n = e[0],\n            r = e[1],\n            i = e[2];\n          return (\n            (r /= 100),\n            (i /= 108.883),\n            (n =\n              (n /= 95.047) > 0.008856\n                ? Math.pow(n, 1 / 3)\n                : 7.787 * n + 16 / 116),\n            [\n              116 *\n                (r = r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116) -\n                16,\n              500 * (n - r),\n              200 *\n                (r -\n                  (i =\n                    i > 0.008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116)),\n            ]\n          );\n        }),\n        (a.hsl.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a,\n            s = t[0] / 360,\n            c = t[1] / 100,\n            u = t[2] / 100;\n          if (0 === c) return [(a = 255 * u), a, a];\n          for (\n            n = 2 * u - (r = u < 0.5 ? u * (1 + c) : u + c - u * c),\n              o = [0, 0, 0],\n              e = 0;\n            e < 3;\n            e++\n          )\n            (i = s + (1 / 3) * -(e - 1)) < 0 && i++,\n              i > 1 && i--,\n              (a =\n                6 * i < 1\n                  ? n + 6 * (r - n) * i\n                  : 2 * i < 1\n                  ? r\n                  : 3 * i < 2\n                  ? n + (r - n) * (2 / 3 - i) * 6\n                  : n),\n              (o[e] = 255 * a);\n          return o;\n        }),\n        (a.hsl.hsv = function (t) {\n          var e = t[0],\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = n,\n            o = Math.max(r, 0.01);\n          return (\n            (n *= (r *= 2) <= 1 ? r : 2 - r),\n            (i *= o <= 1 ? o : 2 - o),\n            [\n              e,\n              100 * (0 === r ? (2 * i) / (o + i) : (2 * n) / (r + n)),\n              ((r + n) / 2) * 100,\n            ]\n          );\n        }),\n        (a.hsv.rgb = function (t) {\n          var e = t[0] / 60,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = Math.floor(e) % 6,\n            o = e - Math.floor(e),\n            a = 255 * r * (1 - n),\n            s = 255 * r * (1 - n * o),\n            c = 255 * r * (1 - n * (1 - o));\n          switch (((r *= 255), i)) {\n            case 0:\n              return [r, c, a];\n            case 1:\n              return [s, r, a];\n            case 2:\n              return [a, r, c];\n            case 3:\n              return [a, s, r];\n            case 4:\n              return [c, a, r];\n            case 5:\n              return [r, a, s];\n          }\n        }),\n        (a.hsv.hsl = function (t) {\n          var e,\n            n,\n            r = t[0],\n            i = t[1] / 100,\n            o = t[2] / 100,\n            a = Math.max(o, 0.01),\n            s = (2 - i) * o;\n          return (\n            (n = i * a),\n            [\n              r,\n              100 * (n = (n /= (e = (2 - i) * a) <= 1 ? e : 2 - e) || 0),\n              100 * (s /= 2),\n            ]\n          );\n        }),\n        (a.hwb.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a,\n            s,\n            c = t[0] / 360,\n            u = t[1] / 100,\n            h = t[2] / 100,\n            l = u + h;\n          switch (\n            (l > 1 && ((u /= l), (h /= l)),\n            (r = 6 * c - (e = Math.floor(6 * c))),\n            0 != (1 & e) && (r = 1 - r),\n            (i = u + r * ((n = 1 - h) - u)),\n            e)\n          ) {\n            default:\n            case 6:\n            case 0:\n              (o = n), (a = i), (s = u);\n              break;\n            case 1:\n              (o = i), (a = n), (s = u);\n              break;\n            case 2:\n              (o = u), (a = n), (s = i);\n              break;\n            case 3:\n              (o = u), (a = i), (s = n);\n              break;\n            case 4:\n              (o = i), (a = u), (s = n);\n              break;\n            case 5:\n              (o = n), (a = u), (s = i);\n          }\n          return [255 * o, 255 * a, 255 * s];\n        }),\n        (a.cmyk.rgb = function (t) {\n          var e = t[0] / 100,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = t[3] / 100;\n          return [\n            255 * (1 - Math.min(1, e * (1 - i) + i)),\n            255 * (1 - Math.min(1, n * (1 - i) + i)),\n            255 * (1 - Math.min(1, r * (1 - i) + i)),\n          ];\n        }),\n        (a.xyz.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i = t[0] / 100,\n            o = t[1] / 100,\n            a = t[2] / 100;\n          return (\n            (n = -0.9689 * i + 1.8758 * o + 0.0415 * a),\n            (r = 0.0557 * i + -0.204 * o + 1.057 * a),\n            (e =\n              (e = 3.2406 * i + -1.5372 * o + -0.4986 * a) > 0.0031308\n                ? 1.055 * Math.pow(e, 1 / 2.4) - 0.055\n                : 12.92 * e),\n            (n =\n              n > 0.0031308 ? 1.055 * Math.pow(n, 1 / 2.4) - 0.055 : 12.92 * n),\n            (r =\n              r > 0.0031308 ? 1.055 * Math.pow(r, 1 / 2.4) - 0.055 : 12.92 * r),\n            [\n              255 * (e = Math.min(Math.max(0, e), 1)),\n              255 * (n = Math.min(Math.max(0, n), 1)),\n              255 * (r = Math.min(Math.max(0, r), 1)),\n            ]\n          );\n        }),\n        (a.xyz.lab = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return (\n            (n /= 100),\n            (r /= 108.883),\n            (e =\n              (e /= 95.047) > 0.008856\n                ? Math.pow(e, 1 / 3)\n                : 7.787 * e + 16 / 116),\n            [\n              116 *\n                (n = n > 0.008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116) -\n                16,\n              500 * (e - n),\n              200 *\n                (n -\n                  (r =\n                    r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116)),\n            ]\n          );\n        }),\n        (a.lab.xyz = function (t) {\n          var e,\n            n,\n            r,\n            i = t[0];\n          (e = t[1] / 500 + (n = (i + 16) / 116)), (r = n - t[2] / 200);\n          var o = Math.pow(n, 3),\n            a = Math.pow(e, 3),\n            s = Math.pow(r, 3);\n          return (\n            (n = o > 0.008856 ? o : (n - 16 / 116) / 7.787),\n            (e = a > 0.008856 ? a : (e - 16 / 116) / 7.787),\n            (r = s > 0.008856 ? s : (r - 16 / 116) / 7.787),\n            [(e *= 95.047), (n *= 100), (r *= 108.883)]\n          );\n        }),\n        (a.lab.lch = function (t) {\n          var e,\n            n = t[0],\n            r = t[1],\n            i = t[2];\n          return (\n            (e = (360 * Math.atan2(i, r)) / 2 / Math.PI) < 0 && (e += 360),\n            [n, Math.sqrt(r * r + i * i), e]\n          );\n        }),\n        (a.lch.lab = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = (t[2] / 360) * 2 * Math.PI;\n          return [e, n * Math.cos(r), n * Math.sin(r)];\n        }),\n        (a.rgb.ansi16 = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2],\n            i = 1 in arguments ? arguments[1] : a.rgb.hsv(t)[2];\n          if (0 === (i = Math.round(i / 50))) return 30;\n          var o =\n            30 +\n            ((Math.round(r / 255) << 2) |\n              (Math.round(n / 255) << 1) |\n              Math.round(e / 255));\n          return 2 === i && (o += 60), o;\n        }),\n        (a.hsv.ansi16 = function (t) {\n          return a.rgb.ansi16(a.hsv.rgb(t), t[2]);\n        }),\n        (a.rgb.ansi256 = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return e === n && n === r\n            ? e < 8\n              ? 16\n              : e > 248\n              ? 231\n              : Math.round(((e - 8) / 247) * 24) + 232\n            : 16 +\n                36 * Math.round((e / 255) * 5) +\n                6 * Math.round((n / 255) * 5) +\n                Math.round((r / 255) * 5);\n        }),\n        (a.ansi16.rgb = function (t) {\n          var e = t % 10;\n          if (0 === e || 7 === e)\n            return t > 50 && (e += 3.5), [(e = (e / 10.5) * 255), e, e];\n          var n = 0.5 * (1 + ~~(t > 50));\n          return [\n            (1 & e) * n * 255,\n            ((e >> 1) & 1) * n * 255,\n            ((e >> 2) & 1) * n * 255,\n          ];\n        }),\n        (a.ansi256.rgb = function (t) {\n          return t >= 232\n            ? [(n = 10 * (t - 232) + 8), n, n]\n            : ((t -= 16),\n              [\n                (Math.floor(t / 36) / 5) * 255,\n                (Math.floor((e = t % 36) / 6) / 5) * 255,\n                ((e % 6) / 5) * 255,\n              ]);\n          var e, n;\n        }),\n        (a.rgb.hex = function (t) {\n          var e = (\n            ((255 & Math.round(t[0])) << 16) +\n            ((255 & Math.round(t[1])) << 8) +\n            (255 & Math.round(t[2]))\n          )\n            .toString(16)\n            .toUpperCase();\n          return \"000000\".substring(e.length) + e;\n        }),\n        (a.hex.rgb = function (t) {\n          var e = t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n          if (!e) return [0, 0, 0];\n          var n = e[0];\n          3 === e[0].length &&\n            (n = n\n              .split(\"\")\n              .map(function (t) {\n                return t + t;\n              })\n              .join(\"\"));\n          var r = parseInt(n, 16);\n          return [(r >> 16) & 255, (r >> 8) & 255, 255 & r];\n        }),\n        (a.rgb.hcg = function (t) {\n          var e,\n            n = t[0] / 255,\n            r = t[1] / 255,\n            i = t[2] / 255,\n            o = Math.max(Math.max(n, r), i),\n            a = Math.min(Math.min(n, r), i),\n            s = o - a;\n          return (\n            (e =\n              s <= 0\n                ? 0\n                : o === n\n                ? ((r - i) / s) % 6\n                : o === r\n                ? 2 + (i - n) / s\n                : 4 + (n - r) / s + 4),\n            (e /= 6),\n            [360 * (e %= 1), 100 * s, 100 * (s < 1 ? a / (1 - s) : 0)]\n          );\n        }),\n        (a.hsl.hcg = function (t) {\n          var e,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = 0;\n          return (\n            (e = r < 0.5 ? 2 * n * r : 2 * n * (1 - r)) < 1 &&\n              (i = (r - 0.5 * e) / (1 - e)),\n            [t[0], 100 * e, 100 * i]\n          );\n        }),\n        (a.hsv.hcg = function (t) {\n          var e = t[1] / 100,\n            n = t[2] / 100,\n            r = e * n,\n            i = 0;\n          return r < 1 && (i = (n - r) / (1 - r)), [t[0], 100 * r, 100 * i];\n        }),\n        (a.hcg.rgb = function (t) {\n          var e = t[0] / 360,\n            n = t[1] / 100,\n            r = t[2] / 100;\n          if (0 === n) return [255 * r, 255 * r, 255 * r];\n          var i,\n            o = [0, 0, 0],\n            a = (e % 1) * 6,\n            s = a % 1,\n            c = 1 - s;\n          switch (Math.floor(a)) {\n            case 0:\n              (o[0] = 1), (o[1] = s), (o[2] = 0);\n              break;\n            case 1:\n              (o[0] = c), (o[1] = 1), (o[2] = 0);\n              break;\n            case 2:\n              (o[0] = 0), (o[1] = 1), (o[2] = s);\n              break;\n            case 3:\n              (o[0] = 0), (o[1] = c), (o[2] = 1);\n              break;\n            case 4:\n              (o[0] = s), (o[1] = 0), (o[2] = 1);\n              break;\n            default:\n              (o[0] = 1), (o[1] = 0), (o[2] = c);\n          }\n          return (\n            (i = (1 - n) * r),\n            [255 * (n * o[0] + i), 255 * (n * o[1] + i), 255 * (n * o[2] + i)]\n          );\n        }),\n        (a.hcg.hsv = function (t) {\n          var e = t[1] / 100,\n            n = e + (t[2] / 100) * (1 - e),\n            r = 0;\n          return n > 0 && (r = e / n), [t[0], 100 * r, 100 * n];\n        }),\n        (a.hcg.hsl = function (t) {\n          var e = t[1] / 100,\n            n = (t[2] / 100) * (1 - e) + 0.5 * e,\n            r = 0;\n          return (\n            n > 0 && n < 0.5\n              ? (r = e / (2 * n))\n              : n >= 0.5 && n < 1 && (r = e / (2 * (1 - n))),\n            [t[0], 100 * r, 100 * n]\n          );\n        }),\n        (a.hcg.hwb = function (t) {\n          var e = t[1] / 100,\n            n = e + (t[2] / 100) * (1 - e);\n          return [t[0], 100 * (n - e), 100 * (1 - n)];\n        }),\n        (a.hwb.hcg = function (t) {\n          var e = t[1] / 100,\n            n = 1 - t[2] / 100,\n            r = n - e,\n            i = 0;\n          return r < 1 && (i = (n - r) / (1 - r)), [t[0], 100 * r, 100 * i];\n        }),\n        (a.apple.rgb = function (t) {\n          return [\n            (t[0] / 65535) * 255,\n            (t[1] / 65535) * 255,\n            (t[2] / 65535) * 255,\n          ];\n        }),\n        (a.rgb.apple = function (t) {\n          return [\n            (t[0] / 255) * 65535,\n            (t[1] / 255) * 65535,\n            (t[2] / 255) * 65535,\n          ];\n        }),\n        (a.gray.rgb = function (t) {\n          return [(t[0] / 100) * 255, (t[0] / 100) * 255, (t[0] / 100) * 255];\n        }),\n        (a.gray.hsl = a.gray.hsv =\n          function (t) {\n            return [0, 0, t[0]];\n          }),\n        (a.gray.hwb = function (t) {\n          return [0, 100, t[0]];\n        }),\n        (a.gray.cmyk = function (t) {\n          return [0, 0, 0, t[0]];\n        }),\n        (a.gray.lab = function (t) {\n          return [t[0], 0, 0];\n        }),\n        (a.gray.hex = function (t) {\n          var e = 255 & Math.round((t[0] / 100) * 255),\n            n = ((e << 16) + (e << 8) + e).toString(16).toUpperCase();\n          return \"000000\".substring(n.length) + n;\n        }),\n        (a.rgb.gray = function (t) {\n          return [((t[0] + t[1] + t[2]) / 3 / 255) * 100];\n        });\n    },\n    101: function (t, e) {},\n    102: function (t, e) {},\n    157: function (t, e, n) {\n      \"use strict\";\n      (function (t) {\n        n.d(e, \"a\", function () {\n          return f;\n        });\n        var r = function (t, e, n) {\n            if (n || 2 === arguments.length)\n              for (var r, i = 0, o = e.length; i < o; i++)\n                (!r && i in e) ||\n                  (r || (r = Array.prototype.slice.call(e, 0, i)),\n                  (r[i] = e[i]));\n            return t.concat(r || Array.prototype.slice.call(e));\n          },\n          i = function (t, e, n) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.type = \"browser\");\n          },\n          o = function (e) {\n            (this.version = e),\n              (this.type = \"node\"),\n              (this.name = \"node\"),\n              (this.os = t.platform);\n          },\n          a = function (t, e, n, r) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.bot = r),\n              (this.type = \"bot-device\");\n          },\n          s = function () {\n            (this.type = \"bot\"),\n              (this.bot = !0),\n              (this.name = \"bot\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          c = function () {\n            (this.type = \"react-native\"),\n              (this.name = \"react-native\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          u =\n            /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/,\n          h = [\n            [\"aol\", /AOLShield\\/([0-9\\._]+)/],\n            [\"edge\", /Edge\\/([0-9\\._]+)/],\n            [\"edge-ios\", /EdgiOS\\/([0-9\\._]+)/],\n            [\"yandexbrowser\", /YaBrowser\\/([0-9\\._]+)/],\n            [\"kakaotalk\", /KAKAOTALK\\s([0-9\\.]+)/],\n            [\"samsung\", /SamsungBrowser\\/([0-9\\.]+)/],\n            [\"silk\", /\\bSilk\\/([0-9._-]+)\\b/],\n            [\"miui\", /MiuiBrowser\\/([0-9\\.]+)$/],\n            [\"beaker\", /BeakerBrowser\\/([0-9\\.]+)/],\n            [\"edge-chromium\", /EdgA?\\/([0-9\\.]+)/],\n            [\n              \"chromium-webview\",\n              /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n            ],\n            [\"chrome\", /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"phantomjs\", /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"crios\", /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"firefox\", /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"fxios\", /FxiOS\\/([0-9\\.]+)/],\n            [\"opera-mini\", /Opera Mini.*Version\\/([0-9\\.]+)/],\n            [\"opera\", /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"opera\", /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"pie\", /^Microsoft Pocket Internet Explorer\\/(\\d+\\.\\d+)$/],\n            [\n              \"pie\",\n              /^Mozilla\\/\\d\\.\\d+\\s\\(compatible;\\s(?:MSP?IE|MSInternet Explorer) (\\d+\\.\\d+);.*Windows CE.*\\)$/,\n            ],\n            [\"netfront\", /^Mozilla\\/\\d\\.\\d+.*NetFront\\/(\\d.\\d)/],\n            [\"ie\", /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n            [\"ie\", /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n            [\"ie\", /MSIE\\s(7\\.0)/],\n            [\"bb10\", /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n            [\"android\", /Android\\s([0-9\\.]+)/],\n            [\"ios\", /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n            [\"safari\", /Version\\/([0-9\\._]+).*Safari/],\n            [\"facebook\", /FB[AS]V\\/([0-9\\.]+)/],\n            [\"instagram\", /Instagram\\s([0-9\\.]+)/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n            [\"curl\", /^curl\\/([0-9\\.]+)$/],\n            [\n              \"searchbot\",\n              /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,\n            ],\n          ],\n          l = [\n            [\"iOS\", /iP(hone|od|ad)/],\n            [\"Android OS\", /Android/],\n            [\"BlackBerry OS\", /BlackBerry|BB10/],\n            [\"Windows Mobile\", /IEMobile/],\n            [\"Amazon OS\", /Kindle/],\n            [\"Windows 3.11\", /Win16/],\n            [\"Windows 95\", /(Windows 95)|(Win95)|(Windows_95)/],\n            [\"Windows 98\", /(Windows 98)|(Win98)/],\n            [\"Windows 2000\", /(Windows NT 5.0)|(Windows 2000)/],\n            [\"Windows XP\", /(Windows NT 5.1)|(Windows XP)/],\n            [\"Windows Server 2003\", /(Windows NT 5.2)/],\n            [\"Windows Vista\", /(Windows NT 6.0)/],\n            [\"Windows 7\", /(Windows NT 6.1)/],\n            [\"Windows 8\", /(Windows NT 6.2)/],\n            [\"Windows 8.1\", /(Windows NT 6.3)/],\n            [\"Windows 10\", /(Windows NT 10.0)/],\n            [\"Windows ME\", /Windows ME/],\n            [\n              \"Windows CE\",\n              /Windows CE|WinCE|Microsoft Pocket Internet Explorer/,\n            ],\n            [\"Open BSD\", /OpenBSD/],\n            [\"Sun OS\", /SunOS/],\n            [\"Chrome OS\", /CrOS/],\n            [\"Linux\", /(Linux)|(X11)/],\n            [\"Mac OS\", /(Mac_PowerPC)|(Macintosh)/],\n            [\"QNX\", /QNX/],\n            [\"BeOS\", /BeOS/],\n            [\"OS/2\", /OS\\/2/],\n          ];\n        function f(e) {\n          return e\n            ? p(e)\n            : \"undefined\" == typeof document &&\n              \"undefined\" != typeof navigator &&\n              \"ReactNative\" === navigator.product\n            ? new c()\n            : \"undefined\" != typeof navigator\n            ? p(navigator.userAgent)\n            : void 0 !== t && t.version\n            ? new o(t.version.slice(1))\n            : null;\n        }\n        function d(t) {\n          return (\n            \"\" !== t &&\n            h.reduce(function (e, n) {\n              var r = n[0],\n                i = n[1];\n              if (e) return e;\n              var o = i.exec(t);\n              return !!o && [r, o];\n            }, !1)\n          );\n        }\n        function p(t) {\n          var e = d(t);\n          if (!e) return null;\n          var n = e[0],\n            o = e[1];\n          if (\"searchbot\" === n) return new s();\n          var c = o[1] && o[1].split(\".\").join(\"_\").split(\"_\").slice(0, 3);\n          c\n            ? c.length < 3 &&\n              (c = r(\n                r([], c, !0),\n                (function (t) {\n                  for (var e = [], n = 0; n < t; n++) e.push(\"0\");\n                  return e;\n                })(3 - c.length),\n                !0,\n              ))\n            : (c = []);\n          var h = c.join(\".\"),\n            f = (function (t) {\n              for (var e = 0, n = l.length; e < n; e++) {\n                var r = l[e],\n                  i = r[0];\n                if (r[1].exec(t)) return i;\n              }\n              return null;\n            })(t),\n            p = u.exec(t);\n          return p && p[1] ? new a(n, h, f, p[1]) : new i(n, h, f);\n        }\n      }).call(this, n(178));\n    },\n    177: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        function (r) {\n          var i = n(97),\n            o =\n              \"undefined\" != typeof globalThis\n                ? globalThis\n                : \"undefined\" != typeof self\n                ? self\n                : \"undefined\" != typeof window\n                ? window\n                : void 0 !== r\n                ? r\n                : void 0;\n          (\"object\" == typeof exports && \"object\" == typeof t) ||\n            (\"function\" == typeof define && n(195)) ||\n            \"object\" == typeof exports ||\n            Object.defineProperties(o, {\n              f6: {\n                get: function () {\n                  return (\n                    console.warn(\"废弃的特性: f6, 请使用 F6 代替 f6\"), i.default\n                  );\n                },\n              },\n            }),\n            (e.default = i.default);\n        }.call(this, n(77));\n    },\n    178: function (t, e) {\n      var n,\n        r,\n        i = (t.exports = {});\n      function o() {\n        throw new Error(\"setTimeout has not been defined\");\n      }\n      function a() {\n        throw new Error(\"clearTimeout has not been defined\");\n      }\n      function s(t) {\n        if (n === setTimeout) return setTimeout(t, 0);\n        if ((n === o || !n) && setTimeout)\n          return (n = setTimeout), setTimeout(t, 0);\n        try {\n          return n(t, 0);\n        } catch (e) {\n          try {\n            return n.call(null, t, 0);\n          } catch (e) {\n            return n.call(this, t, 0);\n          }\n        }\n      }\n      !(function () {\n        try {\n          n = \"function\" == typeof setTimeout ? setTimeout : o;\n        } catch (t) {\n          n = o;\n        }\n        try {\n          r = \"function\" == typeof clearTimeout ? clearTimeout : a;\n        } catch (t) {\n          r = a;\n        }\n      })();\n      var c,\n        u = [],\n        h = !1,\n        l = -1;\n      function f() {\n        h &&\n          c &&\n          ((h = !1), c.length ? (u = c.concat(u)) : (l = -1), u.length && d());\n      }\n      function d() {\n        if (!h) {\n          var t = s(f);\n          h = !0;\n          for (var e = u.length; e; ) {\n            for (c = u, u = []; ++l < e; ) c && c[l].run();\n            (l = -1), (e = u.length);\n          }\n          (c = null),\n            (h = !1),\n            (function (t) {\n              if (r === clearTimeout) return clearTimeout(t);\n              if ((r === a || !r) && clearTimeout)\n                return (r = clearTimeout), clearTimeout(t);\n              try {\n                r(t);\n              } catch (e) {\n                try {\n                  return r.call(null, t);\n                } catch (e) {\n                  return r.call(this, t);\n                }\n              }\n            })(t);\n        }\n      }\n      function p(t, e) {\n        (this.fun = t), (this.array = e);\n      }\n      function g() {}\n      (i.nextTick = function (t) {\n        var e = new Array(arguments.length - 1);\n        if (arguments.length > 1)\n          for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n        u.push(new p(t, e)), 1 !== u.length || h || s(d);\n      }),\n        (p.prototype.run = function () {\n          this.fun.apply(null, this.array);\n        }),\n        (i.title = \"browser\"),\n        (i.browser = !0),\n        (i.env = {}),\n        (i.argv = []),\n        (i.version = \"\"),\n        (i.versions = {}),\n        (i.on = g),\n        (i.addListener = g),\n        (i.once = g),\n        (i.off = g),\n        (i.removeListener = g),\n        (i.removeAllListeners = g),\n        (i.emit = g),\n        (i.prependListener = g),\n        (i.prependOnceListener = g),\n        (i.listeners = function (t) {\n          return [];\n        }),\n        (i.binding = function (t) {\n          throw new Error(\"process.binding is not supported\");\n        }),\n        (i.cwd = function () {\n          return \"/\";\n        }),\n        (i.chdir = function (t) {\n          throw new Error(\"process.chdir is not supported\");\n        }),\n        (i.umask = function () {\n          return 0;\n        });\n    },\n    179: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isAllowCapture =\n          e.isParent =\n          e.upperFirst =\n          e.each =\n          e.mix =\n          e.isArray =\n          e.isObject =\n          e.isString =\n          e.isFunction =\n          e.isNil =\n          e.isBrowser =\n          e.removeFromArray =\n            void 0),\n        (e.removeFromArray = function (t, e) {\n          var n = t.indexOf(e);\n          -1 !== n && t.splice(n, 1);\n        }),\n        (e.isBrowser =\n          \"undefined\" != typeof window && void 0 !== window.document);\n      var r = n(0);\n      Object.defineProperty(e, \"isNil\", {\n        enumerable: !0,\n        get: function () {\n          return r.isNil;\n        },\n      }),\n        Object.defineProperty(e, \"isFunction\", {\n          enumerable: !0,\n          get: function () {\n            return r.isFunction;\n          },\n        }),\n        Object.defineProperty(e, \"isString\", {\n          enumerable: !0,\n          get: function () {\n            return r.isString;\n          },\n        }),\n        Object.defineProperty(e, \"isObject\", {\n          enumerable: !0,\n          get: function () {\n            return r.isObject;\n          },\n        }),\n        Object.defineProperty(e, \"isArray\", {\n          enumerable: !0,\n          get: function () {\n            return r.isArray;\n          },\n        }),\n        Object.defineProperty(e, \"mix\", {\n          enumerable: !0,\n          get: function () {\n            return r.mix;\n          },\n        }),\n        Object.defineProperty(e, \"each\", {\n          enumerable: !0,\n          get: function () {\n            return r.each;\n          },\n        }),\n        Object.defineProperty(e, \"upperFirst\", {\n          enumerable: !0,\n          get: function () {\n            return r.upperFirst;\n          },\n        }),\n        (e.isParent = function (t, e) {\n          if (t.isCanvas()) return !0;\n          for (var n = e.getParent(), r = !1; n; ) {\n            if (n === t) {\n              r = !0;\n              break;\n            }\n            n = n.getParent();\n          }\n          return r;\n        }),\n        (e.isAllowCapture = function (t) {\n          return t.cfg.visible && t.cfg.capture;\n        });\n    },\n    18: function (t, e, n) {\n      \"use strict\";\n      var r = n(75),\n        i = Object(r.getColorsWithSubjectColor)(\n          \"rgb(95, 149, 255)\",\n          \"rgb(255, 255, 255)\",\n        );\n      e.a = {\n        version: \"0.0.16\",\n        rootContainerClassName: \"root-container\",\n        uiContainerClassName: \"ui-container\",\n        waterContainerClassName: \"water-container\",\n        nodeContainerClassName: \"node-container\",\n        edgeContainerClassName: \"edge-container\",\n        comboContainerClassName: \"combo-container\",\n        delegateContainerClassName: \"delegate-container\",\n        defaultLoopPosition: \"top\",\n        nodeLabel: {\n          style: {\n            fill: \"#000\",\n            fontSize: 12,\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n          },\n          offset: 4,\n        },\n        defaultNode: {\n          type: \"circle\",\n          style: { lineWidth: 1, stroke: i.mainStroke, fill: i.mainFill },\n          size: 20,\n          color: i.mainStroke,\n          linkPoints: {\n            size: 8,\n            lineWidth: 1,\n            fill: i.activeFill,\n            stroke: i.activeStroke,\n          },\n        },\n        nodeStateStyles: {\n          active: {\n            fill: i.activeFill,\n            stroke: i.activeStroke,\n            lineWidth: 2,\n            shadowColor: i.mainStroke,\n            shadowBlur: 10,\n          },\n          selected: {\n            fill: i.selectedFill,\n            stroke: i.selectedStroke,\n            lineWidth: 4,\n            shadowColor: i.selectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            fill: i.highlightFill,\n            stroke: i.highlightStroke,\n            lineWidth: 2,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: {\n            fill: i.inactiveFill,\n            stroke: i.inactiveStroke,\n            lineWidth: 1,\n          },\n          disable: {\n            fill: i.disableFill,\n            stroke: i.disableStroke,\n            lineWidth: 1,\n          },\n        },\n        edgeLabel: {\n          style: {\n            fill: \"rgb(0, 0, 0)\",\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n            fontSize: 12,\n          },\n        },\n        defaultEdge: {\n          type: \"line\",\n          size: 1,\n          style: { stroke: i.edgeMainStroke, lineAppendWidth: 2 },\n          color: i.edgeMainStroke,\n        },\n        edgeStateStyles: {\n          active: { stroke: i.edgeActiveStroke, lineWidth: 1 },\n          selected: {\n            stroke: i.edgeSelectedStroke,\n            lineWidth: 2,\n            shadowColor: i.edgeSelectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            stroke: i.edgeHighlightStroke,\n            lineWidth: 2,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: { stroke: i.edgeInactiveStroke, lineWidth: 1 },\n          disable: { stroke: i.edgeDisableStroke, lineWidth: 1 },\n        },\n        comboLabel: {\n          style: { fill: \"rgb(0, 0, 0)\", textBaseline: \"middle\", fontSize: 12 },\n          refY: 10,\n          refX: 10,\n        },\n        defaultCombo: {\n          type: \"circle\",\n          style: {\n            fill: i.comboMainFill,\n            lineWidth: 1,\n            stroke: i.comboMainStroke,\n            r: 5,\n            width: 20,\n            height: 10,\n          },\n          size: [20, 5],\n          color: i.comboMainStroke,\n          padding: [25, 20, 15, 20],\n        },\n        comboStateStyles: {\n          active: {\n            stroke: i.comboActiveStroke,\n            lineWidth: 1,\n            fill: i.comboActiveFill,\n          },\n          selected: {\n            stroke: i.comboSelectedStroke,\n            lineWidth: 2,\n            fill: i.comboSelectedFill,\n            shadowColor: i.comboSelectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            stroke: i.comboHighlightStroke,\n            lineWidth: 2,\n            fill: i.comboHighlightFill,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: {\n            stroke: i.comboInactiveStroke,\n            fill: i.comboInactiveFill,\n            lineWidth: 1,\n          },\n          disable: {\n            stroke: i.comboDisableStroke,\n            fill: i.comboDisableFill,\n            lineWidth: 1,\n          },\n        },\n        delegateStyle: {\n          fill: \"#F3F9FF\",\n          fillOpacity: 0.5,\n          stroke: \"#1890FF\",\n          strokeOpacity: 0.9,\n          lineDash: [5, 5],\n        },\n        textWaterMarkerConfig: {\n          width: 150,\n          height: 100,\n          compatible: !1,\n          text: {\n            x: 0,\n            y: 60,\n            lineHeight: 20,\n            rotate: 20,\n            fontSize: 14,\n            fontFamily: \"Microsoft YaHei\",\n            fill: \"rgba(0, 0, 0, 0.1)\",\n            baseline: \"Middle\",\n          },\n        },\n        imageWaterMarkerConfig: {\n          image: { x: 0, y: 0, width: 30, height: 20, rotate: 0 },\n        },\n        waterMarkerImage:\n          \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n      };\n    },\n    180: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.getOffScreenContext = void 0);\n      var r = null;\n      e.getOffScreenContext = function () {\n        if (!r) {\n          var t = document.createElement(\"canvas\");\n          (t.width = 1), (t.height = 1), (r = t.getContext(\"2d\"));\n        }\n        return r;\n      };\n    },\n    181: function (t, e, n) {\n      \"use strict\";\n      var r = n(182),\n        i = n(183),\n        o = Object.hasOwnProperty,\n        a = {};\n      for (var s in r) o.call(r, s) && (a[r[s]] = s);\n      var c = (t.exports = { to: {}, get: {} });\n      function u(t, e, n) {\n        return Math.min(Math.max(e, t), n);\n      }\n      function h(t) {\n        var e = Math.round(t).toString(16).toUpperCase();\n        return e.length < 2 ? \"0\" + e : e;\n      }\n      (c.get = function (t) {\n        var e, n;\n        switch (t.substring(0, 3).toLowerCase()) {\n          case \"hsl\":\n            (e = c.get.hsl(t)), (n = \"hsl\");\n            break;\n          case \"hwb\":\n            (e = c.get.hwb(t)), (n = \"hwb\");\n            break;\n          default:\n            (e = c.get.rgb(t)), (n = \"rgb\");\n        }\n        return e ? { model: n, value: e } : null;\n      }),\n        (c.get.rgb = function (t) {\n          if (!t) return null;\n          var e,\n            n,\n            i,\n            a,\n            s = [0, 0, 0, 1];\n          if ((n = t.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i))) {\n            for (a = n[2], n = n[1], i = 0; i < 3; i++)\n              (e = 2 * i), (s[i] = parseInt(n.slice(e, e + 2), 16));\n            a && (s[3] = parseInt(a, 16) / 255);\n          } else if ((n = t.match(/^#([a-f0-9]{3,4})$/i))) {\n            for (a = (n = n[1])[3], i = 0; i < 3; i++)\n              s[i] = parseInt(n[i] + n[i], 16);\n            a && (s[3] = parseInt(a + a, 16) / 255);\n          } else if (\n            (n = t.match(\n              /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/,\n            ))\n          ) {\n            for (i = 0; i < 3; i++) s[i] = parseInt(n[i + 1], 0);\n            n[4] &&\n              (n[5]\n                ? (s[3] = 0.01 * parseFloat(n[4]))\n                : (s[3] = parseFloat(n[4])));\n          } else {\n            if (\n              !(n = t.match(\n                /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/,\n              ))\n            )\n              return (n = t.match(/^(\\w+)$/))\n                ? \"transparent\" === n[1]\n                  ? [0, 0, 0, 0]\n                  : o.call(r, n[1])\n                  ? (((s = r[n[1]])[3] = 1), s)\n                  : null\n                : null;\n            for (i = 0; i < 3; i++)\n              s[i] = Math.round(2.55 * parseFloat(n[i + 1]));\n            n[4] &&\n              (n[5]\n                ? (s[3] = 0.01 * parseFloat(n[4]))\n                : (s[3] = parseFloat(n[4])));\n          }\n          for (i = 0; i < 3; i++) s[i] = u(s[i], 0, 255);\n          return (s[3] = u(s[3], 0, 1)), s;\n        }),\n        (c.get.hsl = function (t) {\n          if (!t) return null;\n          var e,\n            n = t.match(\n              /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/,\n            );\n          return n\n            ? ((e = parseFloat(n[4])),\n              [\n                ((parseFloat(n[1]) % 360) + 360) % 360,\n                u(parseFloat(n[2]), 0, 100),\n                u(parseFloat(n[3]), 0, 100),\n                u(isNaN(e) ? 1 : e, 0, 1),\n              ])\n            : null;\n        }),\n        (c.get.hwb = function (t) {\n          if (!t) return null;\n          var e,\n            n = t.match(\n              /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/,\n            );\n          return n\n            ? ((e = parseFloat(n[4])),\n              [\n                ((parseFloat(n[1]) % 360) + 360) % 360,\n                u(parseFloat(n[2]), 0, 100),\n                u(parseFloat(n[3]), 0, 100),\n                u(isNaN(e) ? 1 : e, 0, 1),\n              ])\n            : null;\n        }),\n        (c.to.hex = function () {\n          var t = i(arguments);\n          return (\n            \"#\" +\n            h(t[0]) +\n            h(t[1]) +\n            h(t[2]) +\n            (t[3] < 1 ? h(Math.round(255 * t[3])) : \"\")\n          );\n        }),\n        (c.to.rgb = function () {\n          var t = i(arguments);\n          return t.length < 4 || 1 === t[3]\n            ? \"rgb(\" +\n                Math.round(t[0]) +\n                \", \" +\n                Math.round(t[1]) +\n                \", \" +\n                Math.round(t[2]) +\n                \")\"\n            : \"rgba(\" +\n                Math.round(t[0]) +\n                \", \" +\n                Math.round(t[1]) +\n                \", \" +\n                Math.round(t[2]) +\n                \", \" +\n                t[3] +\n                \")\";\n        }),\n        (c.to.rgb.percent = function () {\n          var t = i(arguments),\n            e = Math.round((t[0] / 255) * 100),\n            n = Math.round((t[1] / 255) * 100),\n            r = Math.round((t[2] / 255) * 100);\n          return t.length < 4 || 1 === t[3]\n            ? \"rgb(\" + e + \"%, \" + n + \"%, \" + r + \"%)\"\n            : \"rgba(\" + e + \"%, \" + n + \"%, \" + r + \"%, \" + t[3] + \")\";\n        }),\n        (c.to.hsl = function () {\n          var t = i(arguments);\n          return t.length < 4 || 1 === t[3]\n            ? \"hsl(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%)\"\n            : \"hsla(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%, \" + t[3] + \")\";\n        }),\n        (c.to.hwb = function () {\n          var t = i(arguments),\n            e = \"\";\n          return (\n            t.length >= 4 && 1 !== t[3] && (e = \", \" + t[3]),\n            \"hwb(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%\" + e + \")\"\n          );\n        }),\n        (c.to.keyword = function (t) {\n          return a[t.slice(0, 3)];\n        });\n    },\n    182: function (t, e, n) {\n      \"use strict\";\n      t.exports = {\n        aliceblue: [240, 248, 255],\n        antiquewhite: [250, 235, 215],\n        aqua: [0, 255, 255],\n        aquamarine: [127, 255, 212],\n        azure: [240, 255, 255],\n        beige: [245, 245, 220],\n        bisque: [255, 228, 196],\n        black: [0, 0, 0],\n        blanchedalmond: [255, 235, 205],\n        blue: [0, 0, 255],\n        blueviolet: [138, 43, 226],\n        brown: [165, 42, 42],\n        burlywood: [222, 184, 135],\n        cadetblue: [95, 158, 160],\n        chartreuse: [127, 255, 0],\n        chocolate: [210, 105, 30],\n        coral: [255, 127, 80],\n        cornflowerblue: [100, 149, 237],\n        cornsilk: [255, 248, 220],\n        crimson: [220, 20, 60],\n        cyan: [0, 255, 255],\n        darkblue: [0, 0, 139],\n        darkcyan: [0, 139, 139],\n        darkgoldenrod: [184, 134, 11],\n        darkgray: [169, 169, 169],\n        darkgreen: [0, 100, 0],\n        darkgrey: [169, 169, 169],\n        darkkhaki: [189, 183, 107],\n        darkmagenta: [139, 0, 139],\n        darkolivegreen: [85, 107, 47],\n        darkorange: [255, 140, 0],\n        darkorchid: [153, 50, 204],\n        darkred: [139, 0, 0],\n        darksalmon: [233, 150, 122],\n        darkseagreen: [143, 188, 143],\n        darkslateblue: [72, 61, 139],\n        darkslategray: [47, 79, 79],\n        darkslategrey: [47, 79, 79],\n        darkturquoise: [0, 206, 209],\n        darkviolet: [148, 0, 211],\n        deeppink: [255, 20, 147],\n        deepskyblue: [0, 191, 255],\n        dimgray: [105, 105, 105],\n        dimgrey: [105, 105, 105],\n        dodgerblue: [30, 144, 255],\n        firebrick: [178, 34, 34],\n        floralwhite: [255, 250, 240],\n        forestgreen: [34, 139, 34],\n        fuchsia: [255, 0, 255],\n        gainsboro: [220, 220, 220],\n        ghostwhite: [248, 248, 255],\n        gold: [255, 215, 0],\n        goldenrod: [218, 165, 32],\n        gray: [128, 128, 128],\n        green: [0, 128, 0],\n        greenyellow: [173, 255, 47],\n        grey: [128, 128, 128],\n        honeydew: [240, 255, 240],\n        hotpink: [255, 105, 180],\n        indianred: [205, 92, 92],\n        indigo: [75, 0, 130],\n        ivory: [255, 255, 240],\n        khaki: [240, 230, 140],\n        lavender: [230, 230, 250],\n        lavenderblush: [255, 240, 245],\n        lawngreen: [124, 252, 0],\n        lemonchiffon: [255, 250, 205],\n        lightblue: [173, 216, 230],\n        lightcoral: [240, 128, 128],\n        lightcyan: [224, 255, 255],\n        lightgoldenrodyellow: [250, 250, 210],\n        lightgray: [211, 211, 211],\n        lightgreen: [144, 238, 144],\n        lightgrey: [211, 211, 211],\n        lightpink: [255, 182, 193],\n        lightsalmon: [255, 160, 122],\n        lightseagreen: [32, 178, 170],\n        lightskyblue: [135, 206, 250],\n        lightslategray: [119, 136, 153],\n        lightslategrey: [119, 136, 153],\n        lightsteelblue: [176, 196, 222],\n        lightyellow: [255, 255, 224],\n        lime: [0, 255, 0],\n        limegreen: [50, 205, 50],\n        linen: [250, 240, 230],\n        magenta: [255, 0, 255],\n        maroon: [128, 0, 0],\n        mediumaquamarine: [102, 205, 170],\n        mediumblue: [0, 0, 205],\n        mediumorchid: [186, 85, 211],\n        mediumpurple: [147, 112, 219],\n        mediumseagreen: [60, 179, 113],\n        mediumslateblue: [123, 104, 238],\n        mediumspringgreen: [0, 250, 154],\n        mediumturquoise: [72, 209, 204],\n        mediumvioletred: [199, 21, 133],\n        midnightblue: [25, 25, 112],\n        mintcream: [245, 255, 250],\n        mistyrose: [255, 228, 225],\n        moccasin: [255, 228, 181],\n        navajowhite: [255, 222, 173],\n        navy: [0, 0, 128],\n        oldlace: [253, 245, 230],\n        olive: [128, 128, 0],\n        olivedrab: [107, 142, 35],\n        orange: [255, 165, 0],\n        orangered: [255, 69, 0],\n        orchid: [218, 112, 214],\n        palegoldenrod: [238, 232, 170],\n        palegreen: [152, 251, 152],\n        paleturquoise: [175, 238, 238],\n        palevioletred: [219, 112, 147],\n        papayawhip: [255, 239, 213],\n        peachpuff: [255, 218, 185],\n        peru: [205, 133, 63],\n        pink: [255, 192, 203],\n        plum: [221, 160, 221],\n        powderblue: [176, 224, 230],\n        purple: [128, 0, 128],\n        rebeccapurple: [102, 51, 153],\n        red: [255, 0, 0],\n        rosybrown: [188, 143, 143],\n        royalblue: [65, 105, 225],\n        saddlebrown: [139, 69, 19],\n        salmon: [250, 128, 114],\n        sandybrown: [244, 164, 96],\n        seagreen: [46, 139, 87],\n        seashell: [255, 245, 238],\n        sienna: [160, 82, 45],\n        silver: [192, 192, 192],\n        skyblue: [135, 206, 235],\n        slateblue: [106, 90, 205],\n        slategray: [112, 128, 144],\n        slategrey: [112, 128, 144],\n        snow: [255, 250, 250],\n        springgreen: [0, 255, 127],\n        steelblue: [70, 130, 180],\n        tan: [210, 180, 140],\n        teal: [0, 128, 128],\n        thistle: [216, 191, 216],\n        tomato: [255, 99, 71],\n        turquoise: [64, 224, 208],\n        violet: [238, 130, 238],\n        wheat: [245, 222, 179],\n        white: [255, 255, 255],\n        whitesmoke: [245, 245, 245],\n        yellow: [255, 255, 0],\n        yellowgreen: [154, 205, 50],\n      };\n    },\n    183: function (t, e, n) {\n      \"use strict\";\n      var r = n(184),\n        i = Array.prototype.concat,\n        o = Array.prototype.slice,\n        a = (t.exports = function (t) {\n          var e,\n            n,\n            a,\n            s = [];\n          for (e = 0, n = t.length; e < n; e++)\n            (a = t[e]), r(a) ? (s = i.call(s, o.call(a))) : s.push(a);\n          return s;\n        });\n      a.wrap = function (t) {\n        return function () {\n          return t(a(arguments));\n        };\n      };\n    },\n    184: function (t, e, n) {\n      \"use strict\";\n      t.exports = function (t) {\n        return (\n          !(!t || \"string\" == typeof t) &&\n          (t instanceof Array ||\n            Array.isArray(t) ||\n            (t.length >= 0 &&\n              (t.splice instanceof Function ||\n                (Object.getOwnPropertyDescriptor(t, t.length - 1) &&\n                  \"String\" !== t.constructor.name))))\n        );\n      };\n    },\n    185: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = n(100),\n        a = n(187),\n        s = {};\n      Object.keys(o).forEach(function (t) {\n        (s[t] = {}),\n          Object.defineProperty(s[t], \"channels\", { value: o[t].channels }),\n          Object.defineProperty(s[t], \"labels\", { value: o[t].labels });\n        var e = a(t);\n        Object.keys(e).forEach(function (n) {\n          var r = e[n];\n          (s[t][n] = (function (t) {\n            var e = function (e) {\n              if (null == e) return e;\n              arguments.length > 1 &&\n                (e = Array.prototype.slice.call(arguments));\n              var n,\n                r,\n                o = t(e);\n              if (\"object\" === i(o))\n                for (n = o.length, r = 0; r < n; r++) o[r] = Math.round(o[r]);\n              return o;\n            };\n            return \"conversion\" in t && (e.conversion = t.conversion), e;\n          })(r)),\n            (s[t][n].raw = (function (t) {\n              var e = function (e) {\n                return null == e\n                  ? e\n                  : (arguments.length > 1 &&\n                      (e = Array.prototype.slice.call(arguments)),\n                    t(e));\n              };\n              return \"conversion\" in t && (e.conversion = t.conversion), e;\n            })(r));\n        });\n      }),\n        (t.exports = s);\n    },\n    186: function (t, e, n) {\n      \"use strict\";\n      t.exports = {\n        aliceblue: [240, 248, 255],\n        antiquewhite: [250, 235, 215],\n        aqua: [0, 255, 255],\n        aquamarine: [127, 255, 212],\n        azure: [240, 255, 255],\n        beige: [245, 245, 220],\n        bisque: [255, 228, 196],\n        black: [0, 0, 0],\n        blanchedalmond: [255, 235, 205],\n        blue: [0, 0, 255],\n        blueviolet: [138, 43, 226],\n        brown: [165, 42, 42],\n        burlywood: [222, 184, 135],\n        cadetblue: [95, 158, 160],\n        chartreuse: [127, 255, 0],\n        chocolate: [210, 105, 30],\n        coral: [255, 127, 80],\n        cornflowerblue: [100, 149, 237],\n        cornsilk: [255, 248, 220],\n        crimson: [220, 20, 60],\n        cyan: [0, 255, 255],\n        darkblue: [0, 0, 139],\n        darkcyan: [0, 139, 139],\n        darkgoldenrod: [184, 134, 11],\n        darkgray: [169, 169, 169],\n        darkgreen: [0, 100, 0],\n        darkgrey: [169, 169, 169],\n        darkkhaki: [189, 183, 107],\n        darkmagenta: [139, 0, 139],\n        darkolivegreen: [85, 107, 47],\n        darkorange: [255, 140, 0],\n        darkorchid: [153, 50, 204],\n        darkred: [139, 0, 0],\n        darksalmon: [233, 150, 122],\n        darkseagreen: [143, 188, 143],\n        darkslateblue: [72, 61, 139],\n        darkslategray: [47, 79, 79],\n        darkslategrey: [47, 79, 79],\n        darkturquoise: [0, 206, 209],\n        darkviolet: [148, 0, 211],\n        deeppink: [255, 20, 147],\n        deepskyblue: [0, 191, 255],\n        dimgray: [105, 105, 105],\n        dimgrey: [105, 105, 105],\n        dodgerblue: [30, 144, 255],\n        firebrick: [178, 34, 34],\n        floralwhite: [255, 250, 240],\n        forestgreen: [34, 139, 34],\n        fuchsia: [255, 0, 255],\n        gainsboro: [220, 220, 220],\n        ghostwhite: [248, 248, 255],\n        gold: [255, 215, 0],\n        goldenrod: [218, 165, 32],\n        gray: [128, 128, 128],\n        green: [0, 128, 0],\n        greenyellow: [173, 255, 47],\n        grey: [128, 128, 128],\n        honeydew: [240, 255, 240],\n        hotpink: [255, 105, 180],\n        indianred: [205, 92, 92],\n        indigo: [75, 0, 130],\n        ivory: [255, 255, 240],\n        khaki: [240, 230, 140],\n        lavender: [230, 230, 250],\n        lavenderblush: [255, 240, 245],\n        lawngreen: [124, 252, 0],\n        lemonchiffon: [255, 250, 205],\n        lightblue: [173, 216, 230],\n        lightcoral: [240, 128, 128],\n        lightcyan: [224, 255, 255],\n        lightgoldenrodyellow: [250, 250, 210],\n        lightgray: [211, 211, 211],\n        lightgreen: [144, 238, 144],\n        lightgrey: [211, 211, 211],\n        lightpink: [255, 182, 193],\n        lightsalmon: [255, 160, 122],\n        lightseagreen: [32, 178, 170],\n        lightskyblue: [135, 206, 250],\n        lightslategray: [119, 136, 153],\n        lightslategrey: [119, 136, 153],\n        lightsteelblue: [176, 196, 222],\n        lightyellow: [255, 255, 224],\n        lime: [0, 255, 0],\n        limegreen: [50, 205, 50],\n        linen: [250, 240, 230],\n        magenta: [255, 0, 255],\n        maroon: [128, 0, 0],\n        mediumaquamarine: [102, 205, 170],\n        mediumblue: [0, 0, 205],\n        mediumorchid: [186, 85, 211],\n        mediumpurple: [147, 112, 219],\n        mediumseagreen: [60, 179, 113],\n        mediumslateblue: [123, 104, 238],\n        mediumspringgreen: [0, 250, 154],\n        mediumturquoise: [72, 209, 204],\n        mediumvioletred: [199, 21, 133],\n        midnightblue: [25, 25, 112],\n        mintcream: [245, 255, 250],\n        mistyrose: [255, 228, 225],\n        moccasin: [255, 228, 181],\n        navajowhite: [255, 222, 173],\n        navy: [0, 0, 128],\n        oldlace: [253, 245, 230],\n        olive: [128, 128, 0],\n        olivedrab: [107, 142, 35],\n        orange: [255, 165, 0],\n        orangered: [255, 69, 0],\n        orchid: [218, 112, 214],\n        palegoldenrod: [238, 232, 170],\n        palegreen: [152, 251, 152],\n        paleturquoise: [175, 238, 238],\n        palevioletred: [219, 112, 147],\n        papayawhip: [255, 239, 213],\n        peachpuff: [255, 218, 185],\n        peru: [205, 133, 63],\n        pink: [255, 192, 203],\n        plum: [221, 160, 221],\n        powderblue: [176, 224, 230],\n        purple: [128, 0, 128],\n        rebeccapurple: [102, 51, 153],\n        red: [255, 0, 0],\n        rosybrown: [188, 143, 143],\n        royalblue: [65, 105, 225],\n        saddlebrown: [139, 69, 19],\n        salmon: [250, 128, 114],\n        sandybrown: [244, 164, 96],\n        seagreen: [46, 139, 87],\n        seashell: [255, 245, 238],\n        sienna: [160, 82, 45],\n        silver: [192, 192, 192],\n        skyblue: [135, 206, 235],\n        slateblue: [106, 90, 205],\n        slategray: [112, 128, 144],\n        slategrey: [112, 128, 144],\n        snow: [255, 250, 250],\n        springgreen: [0, 255, 127],\n        steelblue: [70, 130, 180],\n        tan: [210, 180, 140],\n        teal: [0, 128, 128],\n        thistle: [216, 191, 216],\n        tomato: [255, 99, 71],\n        turquoise: [64, 224, 208],\n        violet: [238, 130, 238],\n        wheat: [245, 222, 179],\n        white: [255, 255, 255],\n        whitesmoke: [245, 245, 245],\n        yellow: [255, 255, 0],\n        yellowgreen: [154, 205, 50],\n      };\n    },\n    187: function (t, e, n) {\n      \"use strict\";\n      var r = n(100);\n      function i(t) {\n        var e,\n          n,\n          i,\n          o,\n          a,\n          s,\n          c = (function () {\n            var t,\n              e,\n              n = {},\n              i = Object.keys(r);\n            for (t = i.length, e = 0; e < t; e++)\n              n[i[e]] = { distance: -1, parent: null };\n            return n;\n          })(),\n          u = [t];\n        for (c[t].distance = 0; u.length; )\n          for (\n            e = u.pop(), i = (n = Object.keys(r[e])).length, o = 0;\n            o < i;\n            o++\n          )\n            -1 === (s = c[(a = n[o])]).distance &&\n              ((s.distance = c[e].distance + 1), (s.parent = e), u.unshift(a));\n        return c;\n      }\n      function o(t, e) {\n        return function (n) {\n          return e(t(n));\n        };\n      }\n      function a(t, e) {\n        for (\n          var n = [e[t].parent, t], i = r[e[t].parent][t], a = e[t].parent;\n          e[a].parent;\n\n        )\n          n.unshift(e[a].parent),\n            (i = o(r[e[a].parent][a], i)),\n            (a = e[a].parent);\n        return (i.conversion = n), i;\n      }\n      t.exports = function (t) {\n        var e,\n          n,\n          r,\n          o = i(t),\n          s = {},\n          c = Object.keys(o);\n        for (e = c.length, n = 0; n < e; n++)\n          null !== o[(r = c[n])].parent && (s[r] = a(r, o));\n        return s;\n      };\n    },\n    188: function (t, e, n) {\n      \"use strict\";\n      var r = Object.create\n          ? function (t, e, n, r) {\n              void 0 === r && (r = n),\n                Object.defineProperty(t, r, {\n                  enumerable: !0,\n                  get: function () {\n                    return e[n];\n                  },\n                });\n            }\n          : function (t, e, n, r) {\n              void 0 === r && (r = n), (t[r] = e[n]);\n            },\n        i = function (t, e) {\n          for (var n in t)\n            \"default\" === n ||\n              Object.prototype.hasOwnProperty.call(e, n) ||\n              r(e, t, n);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        i(n(189), e),\n        i(n(190), e),\n        i(n(191), e),\n        i(n(192), e),\n        i(n(193), e),\n        i(n(194), e);\n    },\n    189: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r = /-(\\w)/g;\n      e.camelize = (function (t) {\n        var e = Object.create(null);\n        return function (n) {\n          return e[n] || (e[n] = t(n));\n        };\n      })(function (t) {\n        return t.replace(r, function (t, e) {\n          return e ? e.toUpperCase() : \"\";\n        });\n      });\n    },\n    190: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    191: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    192: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        var r,\n          i = [];\n        for (r = 0; r < t; r++) i[r] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (i[e[t.source]] += 1),\n                t.target && (i[e[t.target]] += 1);\n            }),\n            i)\n          : i;\n      };\n      e.floydWarshall = function (t) {\n        var e,\n          n = [],\n          r = t.length;\n        for (i = 0; i < r; i += 1)\n          for (n[i] = [], o = 0; o < r; o += 1)\n            i === o\n              ? (n[i][o] = 0)\n              : 0 !== t[i][o] && t[i][o]\n              ? (n[i][o] = t[i][o])\n              : (n[i][o] = 1 / 0);\n        for (e = 0; e < r; e += 1)\n          for (var i = 0; i < r; i += 1)\n            for (var o = 0; o < r; o += 1)\n              n[i][o] > n[i][e] + n[e][o] && (n[i][o] = n[i][e] + n[e][o]);\n        return n;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          i = [],\n          o = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              (o[t.id] = e), i.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                a = o[n],\n                s = o[r];\n              (i[a][s] = 1), e || (i[s][a] = 1);\n            }),\n          i\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            var r;\n            if (e && e.children)\n              for (r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    193: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            var e, n, r;\n            for (n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === i(t);\n      };\n      e.clone = function (t) {\n        var n, r;\n        return null === t\n          ? t\n          : t instanceof Date\n          ? new Date(t.getTime())\n          : t instanceof Array\n          ? ((n = []),\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            }))\n          : \"object\" === i(t) && t !== {}\n          ? ((r = o({}, t)),\n            Object.keys(r).forEach(function (t) {\n              r[t] = e.clone(r[t]);\n            }),\n            r)\n          : t;\n      };\n    },\n    194: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    195: function (t, e) {\n      (function (e) {\n        t.exports = e;\n      }).call(this, {});\n    },\n    2: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"d\", function () {\n        return Le;\n      }),\n        n.d(e, \"g\", function () {\n          return _e;\n        }),\n        n.d(e, \"f\", function () {\n          return De;\n        }),\n        n.d(e, \"l\", function () {\n          return We;\n        }),\n        n.d(e, \"j\", function () {\n          return Ve;\n        }),\n        n.d(e, \"b\", function () {\n          return we;\n        }),\n        n.d(e, \"h\", function () {\n          return Ye;\n        }),\n        n.d(e, \"k\", function () {\n          return qe;\n        }),\n        n.d(e, \"i\", function () {\n          return Ge;\n        }),\n        n.d(e, \"c\", function () {\n          return Xe;\n        }),\n        n.d(e, \"a\", function () {\n          return ze;\n        }),\n        n.d(e, \"e\", function () {\n          return He;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"compare\", function () {\n          return m;\n        }),\n        n.d(r, \"getLineIntersect\", function () {\n          return x;\n        }),\n        n.d(r, \"getRectIntersectByPoint\", function () {\n          return w;\n        }),\n        n.d(r, \"getCircleIntersectByPoint\", function () {\n          return S;\n        }),\n        n.d(r, \"getEllipseIntersectByPoint\", function () {\n          return O;\n        }),\n        n.d(r, \"applyMatrix\", function () {\n          return M;\n        }),\n        n.d(r, \"invertMatrix\", function () {\n          return k;\n        }),\n        n.d(r, \"getCircleCenterByPoints\", function () {\n          return C;\n        }),\n        n.d(r, \"distance\", function () {\n          return E;\n        }),\n        n.d(r, \"scaleMatrix\", function () {\n          return j;\n        }),\n        n.d(r, \"floydWarshall\", function () {\n          return P;\n        }),\n        n.d(r, \"getAdjMatrix\", function () {\n          return A;\n        }),\n        n.d(r, \"translate\", function () {\n          return I;\n        }),\n        n.d(r, \"move\", function () {\n          return T;\n        }),\n        n.d(r, \"scale\", function () {\n          return N;\n        }),\n        n.d(r, \"rotate\", function () {\n          return B;\n        }),\n        n.d(r, \"getDegree\", function () {\n          return L;\n        }),\n        n.d(r, \"isPointInPolygon\", function () {\n          return _;\n        }),\n        n.d(r, \"intersectBBox\", function () {\n          return R;\n        }),\n        n.d(r, \"isPolygonsIntersect\", function () {\n          return F;\n        }),\n        n.d(r, \"Line\", function () {\n          return Y;\n        }),\n        n.d(r, \"getBBoxBoundLine\", function () {\n          return X;\n        }),\n        n.d(r, \"itemIntersectByLine\", function () {\n          return W;\n        }),\n        n.d(r, \"fractionToLine\", function () {\n          return q;\n        }),\n        n.d(r, \"getPointsCenter\", function () {\n          return V;\n        }),\n        n.d(r, \"squareDist\", function () {\n          return G;\n        }),\n        n.d(r, \"pointLineSquareDist\", function () {\n          return H;\n        }),\n        n.d(r, \"isPointsOverlap\", function () {\n          return U;\n        }),\n        n.d(r, \"pointRectSquareDist\", function () {\n          return Z;\n        }),\n        n.d(r, \"pointLineDistance\", function () {\n          return K;\n        });\n      var i = {};\n      n.r(i),\n        n.d(i, \"getBBox\", function () {\n          return ut;\n        }),\n        n.d(i, \"getLoopCfgs\", function () {\n          return ht;\n        }),\n        n.d(i, \"getLabelPosition\", function () {\n          return lt;\n        }),\n        n.d(i, \"traverseTree\", function () {\n          return dt;\n        }),\n        n.d(i, \"traverseTreeUp\", function () {\n          return pt;\n        }),\n        n.d(i, \"getLetterWidth\", function () {\n          return gt;\n        }),\n        n.d(i, \"getTextSize\", function () {\n          return vt;\n        }),\n        n.d(i, \"plainCombosToTrees\", function () {\n          return yt;\n        }),\n        n.d(i, \"reconstructTree\", function () {\n          return mt;\n        }),\n        n.d(i, \"getComboBBox\", function () {\n          return bt;\n        }),\n        n.d(i, \"shouldRefreshEdge\", function () {\n          return xt;\n        }),\n        n.d(i, \"cloneBesidesImg\", function () {\n          return wt;\n        });\n      var o = {};\n      n.r(o),\n        n.d(o, \"uniqueId\", function () {\n          return Ct;\n        }),\n        n.d(o, \"formatPadding\", function () {\n          return Et;\n        }),\n        n.d(o, \"cloneEvent\", function () {\n          return jt;\n        }),\n        n.d(o, \"isViewportChanged\", function () {\n          return Pt;\n        }),\n        n.d(o, \"isNaN\", function () {\n          return At;\n        }),\n        n.d(o, \"calculationItemsBBox\", function () {\n          return It;\n        }),\n        n.d(o, \"processParallelEdges\", function () {\n          return Tt;\n        });\n      var a = {};\n      n.r(a),\n        n.d(a, \"getSpline\", function () {\n          return te;\n        }),\n        n.d(a, \"getControlPoint\", function () {\n          return ee;\n        }),\n        n.d(a, \"pointsToPolygon\", function () {\n          return ne;\n        }),\n        n.d(a, \"pathToPoints\", function () {\n          return re;\n        }),\n        n.d(a, \"getClosedSpline\", function () {\n          return ie;\n        }),\n        n.d(a, \"roundedHull\", function () {\n          return ce;\n        }),\n        n.d(a, \"paddedHull\", function () {\n          return ue;\n        });\n      var s = {};\n      n.r(s),\n        n.d(s, \"defaultSubjectColors\", function () {\n          return Re;\n        });\n      var c = n(0),\n        u = {\n          getDefaultCfg: function () {\n            return {};\n          },\n          getEvents: function () {\n            return {};\n          },\n          updateCfg: function (t) {\n            return Object.assign(this, t), !0;\n          },\n          shouldBegin: function () {\n            return !0;\n          },\n          shouldUpdate: function () {\n            return !0;\n          },\n          shouldEnd: function () {\n            return !0;\n          },\n          bind: function (t) {\n            var e = this.events;\n            (this.graph = t),\n              (\"drag-canvas\" !== this.type &&\n                \"brush-select\" !== this.type &&\n                \"lasso-select\" !== this.type) ||\n                t.get(\"canvas\").set(\"draggable\", !0),\n              Object(c.each)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            (\"drag-canvas\" !== this.type &&\n              \"brush-select\" !== this.type &&\n              \"lasso-select\" !== this.type) ||\n              t.get(\"canvas\").set(\"draggable\", !1),\n              Object(c.each)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n          get: function (t) {\n            return this[t];\n          },\n          set: function (t, e) {\n            return (this[t] = e), this;\n          },\n        },\n        h = (function () {\n          function t() {}\n          return (\n            (t.registerBehavior = function (e, n) {\n              if (!n)\n                throw new Error(\n                  \"please specify handler for this behavior: \".concat(e),\n                );\n              var r = Object(c.clone)(u);\n              Object.assign(r, n);\n              var i = function (t) {\n                var e = this;\n                Object.assign(this, this.getDefaultCfg(), t);\n                var n = this.getEvents();\n                this.events = null;\n                var r = {};\n                n &&\n                  (Object(c.each)(n, function (t, n) {\n                    r[n] = Object(c.wrapBehavior)(e, t);\n                  }),\n                  (this.events = r));\n              };\n              (i.prototype = r), (t.types[e] = i);\n            }),\n            (t.hasBehavior = function (e) {\n              return !!t.types[e];\n            }),\n            (t.getBehavior = function (e) {\n              return t.types[e];\n            }),\n            (t.types = {}),\n            t\n          );\n        })(),\n        l = h,\n        f = n(1),\n        d = n(73),\n        p = n(76),\n        g = n(3),\n        v = n(27),\n        y = g.a.transform,\n        m = function (t) {\n          return function (e, n) {\n            return e[t] - n[t];\n          };\n        },\n        b = function (t, e, n) {\n          return t >= e && t <= n;\n        },\n        x = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = e.x - t.x,\n            s = e.y - t.y,\n            c = r.x - n.x,\n            u = r.y - n.y,\n            h = a * u - s * c,\n            l = 1 / h;\n          if (h * h > 1e-4 * (a * a + s * s) * (c * c + u * u)) {\n            var f = (i * u - o * c) * l,\n              d = (i * s - o * a) * l;\n            return b(f, 0, 1) && b(d, 0, 1)\n              ? { x: t.x + f * a, y: t.y + f * s }\n              : null;\n          }\n          return null;\n        },\n        w = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.width,\n            o = t.height,\n            a = [],\n            s = { x: n + i / 2, y: r + o / 2 };\n          a.push({ x: n, y: r }),\n            a.push({ x: n + i, y: r }),\n            a.push({ x: n + i, y: r + o }),\n            a.push({ x: n, y: r + o }),\n            a.push({ x: n, y: r });\n          for (\n            var c = null, u = 1;\n            u < a.length && !(c = x(a[u - 1], a[u], s, e));\n            u++\n          );\n          return c;\n        },\n        S = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.r,\n            o = e.x - n,\n            a = e.y - r;\n          if (Math.sqrt(o * o + a * a) < i) return null;\n          var s = Math.sign(o),\n            c = Math.sign(a),\n            u = Math.atan(a / o);\n          return {\n            x: n + Math.abs(i * Math.cos(u)) * s,\n            y: r + Math.abs(i * Math.sin(u)) * c,\n          };\n        },\n        O = function (t, e) {\n          var n = t.rx,\n            r = t.ry,\n            i = t.x,\n            o = t.y,\n            a = e.x - i,\n            s = e.y - o,\n            c = Math.atan2(s / r, a / n);\n          return (\n            c < 0 && (c += 2 * Math.PI),\n            { x: i + n * Math.cos(c), y: o + r * Math.sin(c) }\n          );\n        },\n        M = function (t, e, n) {\n          void 0 === n && (n = 1);\n          var r = [t.x, t.y, n];\n          return (\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            g.d.transformMat3(r, r, e),\n            { x: r[0], y: r[1] }\n          );\n        },\n        k = function (t, e, n) {\n          void 0 === n && (n = 1),\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = g.b.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], e);\n          r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var i = [t.x, t.y, n];\n          return g.d.transformMat3(i, i, r), { x: i[0], y: i[1] };\n        },\n        C = function (t, e, n) {\n          var r = t.x - e.x,\n            i = t.y - e.y,\n            o = t.x - n.x,\n            a = t.y - n.y,\n            s = (t.x * t.x - e.x * e.x - e.y * e.y + t.y * t.y) / 2,\n            c = (t.x * t.x - n.x * n.x - n.y * n.y + t.y * t.y) / 2,\n            u = i * o - r * a;\n          return { x: -(a * s - i * c) / u, y: -(r * c - o * s) / u };\n        },\n        E = function (t, e) {\n          var n = t.x - e.x,\n            r = t.y - e.y;\n          return Math.sqrt(n * n + r * r);\n        },\n        j = function (t, e) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              var r = [];\n              t.forEach(function (t) {\n                r.push(t * e);\n              }),\n                n.push(r);\n            }),\n            n\n          );\n        },\n        P = function (t) {\n          for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n            e[r] = [];\n            for (var i = 0; i < n; i += 1)\n              r === i\n                ? (e[r][i] = 0)\n                : 0 !== t[r][i] && t[r][i]\n                ? (e[r][i] = t[r][i])\n                : (e[r][i] = 1 / 0);\n          }\n          for (var o = 0; o < n; o += 1)\n            for (r = 0; r < n; r += 1)\n              for (i = 0; i < n; i += 1)\n                e[r][i] > e[r][o] + e[o][i] && (e[r][i] = e[r][o] + e[o][i]);\n          return e;\n        },\n        A = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (i[a][s] = 1), e || (i[s][a] = 1);\n              }),\n            i\n          );\n        },\n        I = function (t, e) {\n          t.translate(e.x, e.y);\n        },\n        T = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = t.getCanvasBBox(),\n            i = e.x - r.minX,\n            o = e.y - r.minY,\n            a = y(n, [[\"t\", i, o]]);\n          t.setMatrix(a);\n        },\n        N = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e;\n          Object(c.isArray)(e) || (r = [e, e]),\n            Object(c.isArray)(e) && 1 === e.length && (r = [e[0], e[0]]),\n            (n = y(n, [[\"s\", r[0], r[1]]])),\n            t.setMatrix(n);\n        },\n        B = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            (n = y(n, [[\"r\", e]])),\n            t.setMatrix(n);\n        },\n        L = function (t, e, n) {\n          for (var r = [], i = 0; i < t; i++) r[i] = 0;\n          return (\n            n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r\n          );\n        };\n      function D(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      var _ = function (t, e, n) {\n          var r = !1,\n            i = t.length;\n          function o(t) {\n            return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n          }\n          if (i <= 2) return !1;\n          for (var a = 0; a < i; a++) {\n            var s = t[a],\n              c = t[(a + 1) % i];\n            if (D(s, c, [e, n])) return !0;\n            o(s[1] - n) > 0 != o(c[1] - n) > 0 &&\n              o(e - ((n - s[1]) * (s[0] - c[0])) / (s[1] - c[1]) - s[0]) < 0 &&\n              (r = !r);\n          }\n          return r;\n        },\n        R = function (t, e) {\n          return !(\n            e.minX > t.maxX ||\n            e.maxX < t.minX ||\n            e.minY > t.maxY ||\n            e.maxY < t.minY\n          );\n        },\n        F = function (t, e) {\n          var n = function (t) {\n              var e = t.map(function (t) {\n                  return t[0];\n                }),\n                n = t.map(function (t) {\n                  return t[1];\n                });\n              return {\n                minX: Math.min.apply(null, e),\n                maxX: Math.max.apply(null, e),\n                minY: Math.min.apply(null, n),\n                maxY: Math.max.apply(null, n),\n              };\n            },\n            r = function (t) {\n              for (var e = [], n = t.length, r = 0; r < n - 1; r++) {\n                var i = t[r],\n                  o = t[r + 1];\n                e.push({\n                  from: { x: i[0], y: i[1] },\n                  to: { x: o[0], y: o[1] },\n                });\n              }\n              if (e.length > 1) {\n                var a = t[0],\n                  s = t[n - 1];\n                e.push({\n                  from: { x: s[0], y: s[1] },\n                  to: { x: a[0], y: a[1] },\n                });\n              }\n              return e;\n            };\n          if (t.length < 2 || e.length < 2) return !1;\n          var i = n(t),\n            o = n(e);\n          if (!R(i, o)) return !1;\n          var a = !1;\n          if (\n            (Object(c.each)(e, function (e) {\n              if (_(t, e[0], e[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          if (\n            (Object(c.each)(t, function (t) {\n              if (_(e, t[0], t[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          var s = r(t),\n            u = r(e),\n            h = !1;\n          return (\n            Object(c.each)(u, function (t) {\n              if (\n                (function (t, e) {\n                  var n = !1;\n                  return (\n                    Object(c.each)(t, function (t) {\n                      if (x(t.from, t.to, e.from, e.to)) return (n = !0), !1;\n                    }),\n                    n\n                  );\n                })(s, t)\n              )\n                return (h = !0), !1;\n            }),\n            h\n          );\n        },\n        Y = (function () {\n          function t(t, e, n, r) {\n            (this.x1 = t), (this.y1 = e), (this.x2 = n), (this.y2 = r);\n          }\n          return (\n            (t.prototype.getBBox = function () {\n              var t = Math.min(this.x1, this.x2),\n                e = Math.min(this.y1, this.y2),\n                n = Math.max(this.x1, this.x2),\n                r = Math.max(this.y1, this.y2);\n              return {\n                x: t,\n                y: e,\n                minX: t,\n                minY: e,\n                maxX: n,\n                maxY: r,\n                width: n - t,\n                height: r - e,\n              };\n            }),\n            t\n          );\n        })(),\n        X = function (t, e) {\n          return {\n            top: [t.minX, t.minY, t.maxX, t.minY],\n            left: [t.minX, t.minY, t.minX, t.maxY],\n            bottom: [t.minX, t.maxY, t.maxX, t.maxY],\n            right: [t.maxX, t.minY, t.maxX, t.maxY],\n          }[e];\n        },\n        z = function (t, e) {\n          var n = (e.x2 - e.x1) * (t.y1 - e.y1) - (e.y2 - e.y1) * (t.x1 - e.x1),\n            r = (t.x2 - t.x1) * (t.y1 - e.y1) - (t.y2 - t.y1) * (t.x1 - e.x1),\n            i = (e.y2 - e.y1) * (t.x2 - t.x1) - (e.x2 - e.x1) * (t.y2 - t.y1);\n          if (i) {\n            var o = n / i,\n              a = r / i;\n            if (o >= 0 && o <= 1 && a >= 0 && a <= 1) return o;\n          }\n          return Number.POSITIVE_INFINITY;\n        },\n        W = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = 0,\n              o = [],\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = X(r, n[a]),\n              c = s[0],\n              u = s[1],\n              h = s[2],\n              l = s[3];\n            (o[a] = x(\n              { x: e.x1, y: e.y1 },\n              { x: e.x2, y: e.y2 },\n              { x: c, y: u },\n              { x: h, y: l },\n            )),\n              o[a] && (i += 1);\n          }\n          return [o, i];\n        },\n        q = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = Number.POSITIVE_INFINITY,\n              o = 0,\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = X(r, n[a]),\n              c = s[0],\n              u = s[1],\n              h = s[2],\n              l = s[3],\n              f = z(e, new Y(c, u, h, l));\n            (f = Math.abs(f - 0.5)) >= 0 &&\n              f <= 1 &&\n              ((o += 1), (i = f < i ? f : i));\n          }\n          return 0 === o ? -1 : i;\n        },\n        V = function (t) {\n          var e = 0,\n            n = 0;\n          if (t.length > 0) {\n            for (var r = 0, i = t; r < i.length; r++) {\n              var o = i[r];\n              (e += o.x), (n += o.y);\n            }\n            (e /= t.length), (n /= t.length);\n          }\n          return { x: e, y: n };\n        },\n        G = function (t, e) {\n          return Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2);\n        },\n        H = function (t, e) {\n          var n,\n            r = e.x1,\n            i = e.y1,\n            o = e.x2 - r,\n            a = e.y2 - i,\n            s = t.x - r,\n            c = t.y - i,\n            u = s * o + c * a;\n          n =\n            u <= 0 || (u = (s = o - s) * o + (c = a - c) * a) <= 0\n              ? 0\n              : (u * u) / (o * o + a * a);\n          var h = s * s + c * c - n;\n          return h < 0 && (h = 0), h;\n        },\n        U = function (t, e, n) {\n          return (\n            void 0 === n && (n = 0.001),\n            Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2) < Math.pow(n, 2)\n          );\n        },\n        Z = function (t, e) {\n          var n = t.x < e.x,\n            r = t.x > e.x + e.width,\n            i = t.y > e.y + e.height,\n            o = t.y < e.y;\n          if (!(n || r || i || o)) return 0;\n          if (i && !n && !r) return Math.pow(e.y + e.height - t.y, 2);\n          if (o && !n && !r) return Math.pow(t.y - e.y, 2);\n          if (n && !i && !o) return Math.pow(e.x - t.x, 2);\n          if (r && !i && !o) return Math.pow(e.x + e.width - t.x, 2);\n          var a = Math.min(Math.abs(e.x - t.x), Math.abs(e.x + e.width - t.x)),\n            s = Math.min(Math.abs(e.y - t.y), Math.abs(e.y + e.height - t.y));\n          return a * a + s * s;\n        },\n        K = function (t, e) {\n          var n = t[0],\n            r = t[1],\n            i = t[2],\n            o = t[3],\n            a = e.x,\n            s = e.y,\n            c = [i - n, o - r];\n          if (g.c.exactEquals(c, [0, 0])) return NaN;\n          var u = [-c[1], c[0]];\n          g.c.normalize(u, u);\n          var h = [a - n, s - r];\n          return Math.abs(g.c.dot(h, u));\n        },\n        $ = \"rgb(95, 149, 255)\",\n        Q = \"rgb(253, 253, 253)\",\n        J = \"rgb(247, 250, 255)\",\n        tt = \"rgb(224, 224, 224)\",\n        et = \"rgb(224, 224, 224)\",\n        nt = {\n          version: \"0.0.2\",\n          rootContainerClassName: \"root-container\",\n          nodeContainerClassName: \"node-container\",\n          edgeContainerClassName: \"edge-container\",\n          comboContainerClassName: \"combo-container\",\n          delegateContainerClassName: \"delegate-container\",\n          defaultLoopPosition: \"top\",\n          nodeLabel: {\n            style: {\n              fill: \"#000\",\n              fontSize: 12,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n            },\n            offset: 4,\n          },\n          defaultNode: {\n            type: \"circle\",\n            style: { lineWidth: 1, stroke: $, fill: \"rgb(239, 244, 255)\" },\n            size: 20,\n            color: $,\n            linkPoints: { size: 8, lineWidth: 1, fill: J, stroke: $ },\n          },\n          nodeStateStyles: {\n            active: {\n              fill: J,\n              stroke: $,\n              lineWidth: 2,\n              shadowColor: $,\n              shadowBlur: 10,\n            },\n            selected: {\n              fill: \"rgb(255, 255, 255)\",\n              stroke: $,\n              lineWidth: 4,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              fill: \"rgb(223, 234, 255)\",\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: {\n              fill: \"rgb(247, 250, 255)\",\n              stroke: \"rgb(191, 213, 255)\",\n              lineWidth: 1,\n            },\n            disable: {\n              fill: \"rgb(250, 250, 250)\",\n              stroke: \"rgb(224, 224, 224)\",\n              lineWidth: 1,\n            },\n          },\n          edgeLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n          },\n          defaultEdge: {\n            type: \"line\",\n            size: 1,\n            style: { stroke: tt, lineAppendWidth: 2 },\n            color: tt,\n          },\n          edgeStateStyles: {\n            active: { stroke: $, lineWidth: 1 },\n            selected: {\n              stroke: $,\n              lineWidth: 2,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: $,\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(234, 234, 234)\", lineWidth: 1 },\n            disable: { stroke: \"rgb(245, 245, 245)\", lineWidth: 1 },\n          },\n          comboLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n            refY: 10,\n            refX: 10,\n          },\n          defaultCombo: {\n            type: \"circle\",\n            style: {\n              fill: Q,\n              lineWidth: 1,\n              stroke: et,\n              r: 5,\n              width: 20,\n              height: 10,\n            },\n            size: [20, 5],\n            color: et,\n            padding: [25, 20, 15, 20],\n          },\n          comboStateStyles: {\n            active: { stroke: $, lineWidth: 1, fill: \"rgb(247, 250, 255)\" },\n            selected: {\n              stroke: $,\n              lineWidth: 2,\n              fill: Q,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              fill: Q,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(224, 224, 224)\", fill: Q, lineWidth: 1 },\n            disable: {\n              stroke: \"rgb(234, 234, 234)\",\n              fill: \"rgb(250, 250, 250)\",\n              lineWidth: 1,\n            },\n          },\n          delegateStyle: {\n            fill: \"#F3F9FF\",\n            fillOpacity: 0.5,\n            stroke: \"#1890FF\",\n            strokeOpacity: 0.9,\n            lineDash: [5, 5],\n          },\n        },\n        rt = {\n          \" \": 0.3329986572265625,\n          a: 0.5589996337890625,\n          A: 0.6569992065429687,\n          b: 0.58599853515625,\n          B: 0.6769989013671875,\n          c: 0.5469985961914062,\n          C: 0.7279998779296875,\n          d: 0.58599853515625,\n          D: 0.705999755859375,\n          e: 0.554998779296875,\n          E: 0.63699951171875,\n          f: 0.37299957275390627,\n          F: 0.5769989013671875,\n          g: 0.5909988403320312,\n          G: 0.7479995727539063,\n          h: 0.555999755859375,\n          H: 0.7199996948242188,\n          i: 0.255999755859375,\n          I: 0.23699951171875,\n          j: 0.26699981689453123,\n          J: 0.5169998168945312,\n          k: 0.5289993286132812,\n          K: 0.6899993896484375,\n          l: 0.23499908447265624,\n          L: 0.5879989624023437,\n          m: 0.854998779296875,\n          M: 0.8819992065429687,\n          n: 0.5589996337890625,\n          N: 0.7189987182617188,\n          o: 0.58599853515625,\n          O: 0.7669998168945312,\n          p: 0.58599853515625,\n          P: 0.6419998168945312,\n          q: 0.58599853515625,\n          Q: 0.7669998168945312,\n          r: 0.3649993896484375,\n          R: 0.6759994506835938,\n          s: 0.504998779296875,\n          S: 0.6319992065429687,\n          t: 0.354998779296875,\n          T: 0.6189987182617187,\n          u: 0.5599990844726562,\n          U: 0.7139999389648437,\n          v: 0.48199920654296874,\n          V: 0.6389999389648438,\n          w: 0.754998779296875,\n          W: 0.929998779296875,\n          x: 0.5089996337890625,\n          X: 0.63699951171875,\n          y: 0.4959991455078125,\n          Y: 0.66199951171875,\n          z: 0.48699951171875,\n          Z: 0.6239990234375,\n          0: 0.6,\n          1: 0.40099945068359377,\n          2: 0.6,\n          3: 0.6,\n          4: 0.6,\n          5: 0.6,\n          6: 0.6,\n          7: 0.5469985961914062,\n          8: 0.6,\n          9: 0.6,\n          \"[\": 0.3329986572265625,\n          \"]\": 0.3329986572265625,\n          \",\": 0.26399993896484375,\n          \".\": 0.26399993896484375,\n          \";\": 0.26399993896484375,\n          \":\": 0.26399993896484375,\n          \"{\": 0.3329986572265625,\n          \"}\": 0.3329986572265625,\n          \"\\\\\": 0.5,\n          \"|\": 0.19499969482421875,\n          \"=\": 0.604998779296875,\n          \"+\": 0.604998779296875,\n          \"-\": 0.604998779296875,\n          _: 0.5,\n          \"`\": 0.3329986572265625,\n          \" ~\": 0.8329986572265625,\n          \"!\": 0.3329986572265625,\n          \"@\": 0.8579986572265625,\n          \"#\": 0.6,\n          $: 0.6,\n          \"%\": 0.9699996948242188,\n          \"^\": 0.517999267578125,\n          \"&\": 0.7259994506835937,\n          \"*\": 0.505999755859375,\n          \"(\": 0.3329986572265625,\n          \")\": 0.3329986572265625,\n          \"<\": 0.604998779296875,\n          \">\": 0.604998779296875,\n          \"/\": 0.5,\n          \"?\": 0.53699951171875,\n        },\n        it = Math.PI,\n        ot = Math.sin,\n        at = Math.cos,\n        st = ot(it / 8),\n        ct = at(it / 8),\n        ut = function (t, e) {\n          var n = t.getBBox(),\n            r = { x: n.minX, y: n.minY },\n            i = { x: n.maxX, y: n.maxY };\n          if (e) {\n            var o = e.getMatrix();\n            o || (o = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n              (r = M(r, o)),\n              (i = M(i, o));\n          }\n          var a = r.x,\n            s = r.y,\n            c = i.x,\n            u = i.y;\n          return {\n            x: a,\n            y: s,\n            minX: a,\n            minY: s,\n            maxX: c,\n            maxY: u,\n            width: c - a,\n            height: u - s,\n          };\n        },\n        ht = function (t) {\n          var e = t.sourceNode || t.targetNode,\n            n = e.get(\"group\").getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e.getKeyShape().getBBox(),\n            i = t.loopCfg || {},\n            o = i.dist || 2 * Math.max(r.width, r.height),\n            a = i.position || nt.defaultLoopPosition,\n            s = [n[6], n[7]],\n            c = [t.startPoint.x, t.startPoint.y],\n            u = [t.endPoint.x, t.endPoint.y],\n            h = r.height / 2,\n            l = r.height / 2,\n            f = h * st,\n            d = h * ct,\n            p = l * st,\n            v = l * ct;\n          if (c[0] === u[0] && c[1] === u[1]) {\n            switch (a) {\n              case \"top\":\n                (c = [s[0] - f, s[1] - d]), (u = [s[0] + p, s[1] - v]);\n                break;\n              case \"top-right\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] + (f = h * st), s[1] - (d = h * ct)]),\n                  (u = [s[0] + (v = l * ct), s[1] - (p = l * st)]);\n                break;\n              case \"right\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] + (d = h * ct), s[1] - (f = h * st)]),\n                  (u = [s[0] + (v = l * ct), s[1] + (p = l * st)]);\n                break;\n              case \"bottom-right\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] + (d = h * ct), s[1] + (f = h * st)]),\n                  (u = [s[0] + (p = l * st), s[1] + (v = l * ct)]);\n                break;\n              case \"bottom\":\n                (h = r.height / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] + (f = h * st), s[1] + (d = h * ct)]),\n                  (u = [s[0] - (p = l * st), s[1] + (v = l * ct)]);\n                break;\n              case \"bottom-left\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (f = h * st), s[1] + (d = h * ct)]),\n                  (u = [s[0] - (v = l * ct), s[1] + (p = l * st)]);\n                break;\n              case \"left\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (d = h * ct), s[1] + (f = h * st)]),\n                  (u = [s[0] - (v = l * ct), s[1] - (p = l * st)]);\n                break;\n              case \"top-left\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] - (d = h * ct), s[1] - (f = h * st)]),\n                  (u = [s[0] - (p = l * st), s[1] - (v = l * ct)]);\n                break;\n              default:\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (f = h * st), s[1] - (d = h * ct)]),\n                  (u = [s[0] + (p = l * st), s[1] - (v = l * ct)]);\n            }\n            if (!1 === i.clockwise) {\n              var y = [c[0], c[1]];\n              (c = [u[0], u[1]]), (u = [y[0], y[1]]);\n            }\n          }\n          var m = [c[0] - s[0], c[1] - s[1]],\n            b = (h + o) / h,\n            x = (l + o) / l;\n          !1 === i.clockwise && ((b = (l + o) / l), (x = (h + o) / h));\n          var w = g.c.scale([0, 0], m, b),\n            S = [s[0] + w[0], s[1] + w[1]],\n            O = [u[0] - s[0], u[1] - s[1]],\n            M = g.c.scale([0, 0], O, x),\n            k = [s[0] + M[0], s[1] + M[1]];\n          return (\n            (t.startPoint = { x: c[0], y: c[1] }),\n            (t.endPoint = { x: u[0], y: u[1] }),\n            (t.controlPoints = [\n              { x: S[0], y: S[1] },\n              { x: k[0], y: k[1] },\n            ]),\n            t\n          );\n        },\n        lt = function (t, e, n, r, i) {\n          var o = [],\n            a = t.getPoint(e);\n          if (null === a) return { x: 0, y: 0, angle: 0 };\n          if (e < 1e-4) o = t.getStartTangent().reverse();\n          else if (e > 0.9999) o = t.getEndTangent();\n          else {\n            var s = t.getPoint(e + 1e-4);\n            o.push([a.x, a.y]), o.push([s.x, s.y]);\n          }\n          var c = Math.atan2(o[1][1] - o[0][1], o[1][0] - o[0][0]);\n          if (\n            (c < 0 && (c += 2 * it),\n            n && ((a.x += at(c) * n), (a.y += ot(c) * n)),\n            r)\n          ) {\n            var u = c - it / 2;\n            c > 0.5 * it && c < 1.5 * it && (u -= it),\n              (a.x += at(u) * r),\n              (a.y += ot(u) * r);\n          }\n          var h = { x: a.x, y: a.y, angle: c };\n          return i\n            ? (c > 0.5 * it && c < 1.5 * it && (c -= it),\n              Object(f.a)({ rotate: c }, h))\n            : h;\n        },\n        ft = function t(e, n) {\n          if (!1 === n(e)) return !1;\n          if (e && e.children)\n            for (var r = e.children.length - 1; r >= 0; r--)\n              if (!t(e.children[r], n)) return !1;\n          return !0;\n        },\n        dt = function (t, e) {\n          \"function\" == typeof e && ft(t, e);\n        },\n        pt = function (t, e) {\n          \"function\" == typeof e &&\n            (function t(e, n) {\n              if (e && e.children)\n                for (var r = e.children.length - 1; r >= 0; r--)\n                  if (!t(e.children[r], n)) return;\n              return !1 !== n(e);\n            })(t, e);\n        },\n        gt = function (t, e) {\n          return e * (rt[t] || 1);\n        },\n        vt = function (t, e) {\n          var n = 0,\n            r = new RegExp(\"[一-龥]+\");\n          return (\n            t.split(\"\").forEach(function (t) {\n              r.test(t) ? (n += e) : (n += gt(t, e));\n            }),\n            [n, e]\n          );\n        },\n        yt = function (t, e) {\n          var n = [],\n            r = {},\n            i = {};\n          t.forEach(function (t) {\n            i[t.id] = t;\n          }),\n            t.forEach(function (t, e) {\n              var o = Object(c.clone)(t);\n              (o.itemType = \"combo\"),\n                (o.children = void 0),\n                o.parentId === o.id\n                  ? (console.warn(\n                      \"The parentId for combo \".concat(\n                        o.id,\n                        \" can not be the same as the combo's id\",\n                      ),\n                    ),\n                    delete o.parentId)\n                  : o.parentId &&\n                    !i[o.parentId] &&\n                    (console.warn(\n                      \"The parent combo for combo \".concat(\n                        o.id,\n                        \" does not exist!\",\n                      ),\n                    ),\n                    delete o.parentId);\n              var a = r[o.id];\n              if (a) {\n                if (\n                  ((o.children = a.children), (r[o.id] = o), !(a = o).parentId)\n                )\n                  return void n.push(a);\n                var s = r[a.parentId];\n                if (s) s.children ? s.children.push(o) : (s.children = [o]);\n                else {\n                  var u = { id: a.parentId, children: [a] };\n                  (r[a.parentId] = u), (r[o.id] = o);\n                }\n              } else if (Object(c.isString)(t.parentId)) {\n                var h = r[t.parentId];\n                if (h)\n                  h.children ? h.children.push(o) : (h.children = [o]),\n                    (r[o.id] = o);\n                else {\n                  var l = { id: t.parentId, children: [o] };\n                  (r[l.id] = l), (r[o.id] = o);\n                }\n              } else n.push(o), (r[o.id] = o);\n            });\n          var o = {};\n          (e || []).forEach(function (t) {\n            o[t.id] = t;\n            var e = r[t.comboId];\n            if (e) {\n              var n = { id: t.id, comboId: t.comboId };\n              e.children ? e.children.push(n) : (e.children = [n]),\n                (n.itemType = \"node\"),\n                (r[t.id] = n);\n            }\n          });\n          var a = 0;\n          return (\n            n.forEach(function (t) {\n              (t.depth = a + 10),\n                ft(t, function (t) {\n                  var e,\n                    n = r[t.id].itemType;\n                  (e = \"node\" === n ? r[t.comboId] : r[t.parentId]),\n                    (t.depth = e && \"node\" === n ? a + 1 : a + 10),\n                    a < t.depth && (a = t.depth);\n                  var i = o[t.id];\n                  return i && (i.depth = t.depth), !0;\n                });\n            }),\n            n\n          );\n        },\n        mt = function (t, e, n) {\n          var r,\n            i = t,\n            o = { root: { children: t } },\n            a = !1,\n            s = \"root\";\n          (t || []).forEach(function (t) {\n            if (!a)\n              return t.id === e\n                ? ((r = t),\n                  \"combo\" === t.itemType ? (r.parentId = n) : (r.comboId = n),\n                  void (a = !0))\n                : void dt(t, function (t) {\n                    return (\n                      (o[t.id] = { children: t.children }),\n                      (i = o[t.parentId || t.comboId || \"root\"].children),\n                      !t ||\n                        (!t.removed && e !== t.id) ||\n                        !i ||\n                        ((s = t.parentId || t.comboId || \"root\"),\n                        (r = t),\n                        \"combo\" === t.itemType\n                          ? (r.parentId = n)\n                          : (r.comboId = n),\n                        (a = !0),\n                        !1)\n                    );\n                  });\n          });\n          var c = (i = o[s].children) ? i.indexOf(r) : -1;\n          if (\n            (c > -1 && i.splice(c, 1),\n            a ||\n              ((r = { id: e, itemType: \"node\", comboId: n }),\n              (o[e] = { children: void 0 })),\n            e)\n          ) {\n            var u = !1;\n            if (n) {\n              var h = 0;\n              (t || []).forEach(function (t) {\n                u ||\n                  dt(t, function (t) {\n                    return (\n                      n !== t.id ||\n                      ((u = !0),\n                      t.children ? t.children.push(r) : (t.children = [r]),\n                      (h = t.depth),\n                      \"node\" === r.itemType\n                        ? (r.depth = h + 2)\n                        : (r.depth = h + 1),\n                      !1)\n                    );\n                  });\n              });\n            } else (n && u) || \"node\" === r.itemType || t.push(r);\n            var l = r.depth;\n            dt(r, function (t) {\n              return (\n                \"node\" === t.itemType ? (l += 2) : (l += 1), (t.depth = l), !0\n              );\n            });\n          }\n          return t;\n        },\n        bt = function (t, e) {\n          var n = {\n            minX: 1 / 0,\n            minY: 1 / 0,\n            maxX: -1 / 0,\n            maxY: -1 / 0,\n            x: void 0,\n            y: void 0,\n            width: void 0,\n            height: void 0,\n            centerX: void 0,\n            centerY: void 0,\n          };\n          return t && 0 !== t.length\n            ? (t.forEach(function (t) {\n                var r = e.findById(t.id);\n                if (r && r.isVisible()) {\n                  r.set(\"bboxCanvasCache\", void 0);\n                  var i = r.getCanvasBBox();\n                  i.x && n.minX > i.minX && (n.minX = i.minX),\n                    i.y && n.minY > i.minY && (n.minY = i.minY),\n                    i.x && n.maxX < i.maxX && (n.maxX = i.maxX),\n                    i.y && n.maxY < i.maxY && (n.maxY = i.maxY);\n                }\n              }),\n              (n.x = (n.minX + n.maxX) / 2),\n              (n.y = (n.minY + n.maxY) / 2),\n              (n.width = n.maxX - n.minX),\n              (n.height = n.maxY - n.minY),\n              (n.centerX = (n.minX + n.maxX) / 2),\n              (n.centerY = (n.minY + n.maxY) / 2),\n              Object.keys(n).forEach(function (t) {\n                (n[t] !== 1 / 0 && n[t] !== -1 / 0) || (n[t] = void 0);\n              }),\n              n)\n            : n;\n        },\n        xt = function (t) {\n          var e =\n            Object(c.isNumber)(t.x) ||\n            Object(c.isNumber)(t.y) ||\n            t.type ||\n            t.anchorPoints ||\n            t.size;\n          return (\n            t.style &&\n              (e =\n                e ||\n                Object(c.isNumber)(t.style.r) ||\n                Object(c.isNumber)(t.style.width) ||\n                Object(c.isNumber)(t.style.height) ||\n                Object(c.isNumber)(t.style.rx) ||\n                Object(c.isNumber)(t.style.ry)),\n            e\n          );\n        },\n        wt = function (t) {\n          var e = {};\n          return (\n            Object.keys(t).forEach(function (n) {\n              var r = t[n];\n              if (Object(c.isObject)(r)) {\n                var i = {};\n                Object.keys(r).forEach(function (t) {\n                  var e = r[t];\n                  (\"img\" !== t || Object(c.isString)(e)) &&\n                    (i[t] = Object(c.clone)(e));\n                }),\n                  (e[n] = i);\n              } else e[n] = Object(c.clone)(r);\n            }),\n            e\n          );\n        },\n        St = function (t) {\n          if (!t)\n            return console.error(\"G6 Error Tips: the data must be defined\"), !1;\n          var e = t.nodes,\n            n = t.edges,\n            r = t.combos,\n            i = void 0 === r ? [] : r;\n          if (!e && !n) {\n            var o = !0;\n            return (\n              dt(t, function (t) {\n                return !!Object(c.isString)(t.id) || ((o = !1), !1);\n              }),\n              o\n            );\n          }\n          var a = (e || []).find(function (t) {\n            return !Object(c.isString)(t.id);\n          });\n          if (a)\n            return (\n              console.warn(\n                \"G6 Warning Tips: missing 'id' property, or %c\".concat(\n                  a.id,\n                  \"%c is not a string.\",\n                ),\n                \"font-size: 20px; color: red;\",\n                \"\",\n              ),\n              !1\n            );\n          var s = (e || []).map(function (t) {\n              return t.id;\n            }),\n            u = i.map(function (t) {\n              return t.id;\n            }),\n            h = Object(f.f)(Object(f.f)([], s, !0), u, !0),\n            l = (n || []).find(function (t) {\n              return !h.includes(t.source) || !h.includes(t.target);\n            });\n          return (\n            !l ||\n            (console.warn(\n              \"G6 Warning Tips: The source %c\"\n                .concat(l.source, \"%c or the target %c\")\n                .concat(\n                  l.target,\n                  \"%c of the edge do not exist in the nodes or combos.\",\n                ),\n              \"font-size: 20px; color: red;\",\n              \"\",\n              \"font-size: 20px; color: red;\",\n              \"\",\n            ),\n            !1)\n          );\n        },\n        Ot = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.destroyed = !1),\n              (this.modes = t.get(\"modes\") || { default: [] }),\n              this.formatModes(),\n              (this.mode = t.get(\"defaultMode\") || \"default\"),\n              (this.currentBehaves = []),\n              this.setMode(this.mode);\n          }\n          return (\n            (t.prototype.formatModes = function () {\n              var t = this.modes;\n              Object(c.each)(t, function (t) {\n                Object(c.each)(t, function (e, n) {\n                  Object(c.isString)(e) && (t[n] = { type: e });\n                });\n              });\n            }),\n            (t.prototype.setBehaviors = function (t) {\n              var e,\n                n = this.graph,\n                r = this.modes[t],\n                i = [];\n              Object(c.each)(r || [], function (t) {\n                var r = h.getBehavior(t.type || t);\n                r && (e = new r(t)) && (e.bind(n), i.push(e));\n              }),\n                (this.currentBehaves = i);\n            }),\n            (t.mergeBehaviors = function (t, e) {\n              return (\n                Object(c.each)(e, function (e) {\n                  t.indexOf(e) < 0 &&\n                    (Object(c.isString)(e) && (e = { type: e }), t.push(e));\n                }),\n                t\n              );\n            }),\n            (t.filterBehaviors = function (t, e) {\n              var n = [];\n              return (\n                t.forEach(function (t) {\n                  var r = \"\";\n                  (r = Object(c.isString)(t) ? t : t.type),\n                    e.indexOf(r) < 0 && n.push(t);\n                }),\n                n\n              );\n            }),\n            (t.prototype.setMode = function (t) {\n              var e = this.modes,\n                n = this.graph,\n                r = t;\n              e[r] &&\n                (n.emit(\"beforemodechange\", { mode: t }),\n                Object(c.each)(this.currentBehaves, function (t) {\n                  t.delegate && t.delegate.remove(), t.unbind(n);\n                }),\n                this.setBehaviors(r),\n                n.emit(\"aftermodechange\", { mode: t }),\n                (this.mode = t));\n            }),\n            (t.prototype.getMode = function () {\n              return this.mode;\n            }),\n            (t.prototype.manipulateBehaviors = function (e, n, r) {\n              var i,\n                o = this;\n              if (((i = Object(c.isArray)(e) ? e : [e]), Object(c.isArray)(n)))\n                return (\n                  Object(c.each)(n, function (e) {\n                    o.modes[e]\n                      ? (o.modes[e] = r\n                          ? t.mergeBehaviors(o.modes[e] || [], i)\n                          : t.filterBehaviors(o.modes[e] || [], i))\n                      : r && (o.modes[e] = i);\n                  }),\n                  this\n                );\n              var a = n;\n              return (\n                n || (a = this.mode),\n                this.modes[a] || (r && (this.modes[a] = i)),\n                (this.modes[a] = r\n                  ? t.mergeBehaviors(this.modes[a] || [], i)\n                  : t.filterBehaviors(this.modes[a] || [], i)),\n                this.setMode(this.mode),\n                this\n              );\n            }),\n            (t.prototype.updateBehavior = function (t, e, n) {\n              Object(c.isString)(t) && (t = { type: t });\n              var r = [];\n              if (n && n !== this.mode && \"default\" !== n) {\n                if (!(r = this.modes[n]) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                var i = r.length;\n                for (a = 0; a < i; a++) {\n                  if ((s = r[a]).type === t.type || s === t.type)\n                    return (\n                      s === t.type && (s = { type: s }),\n                      Object.assign(s, e),\n                      (r[a] = s),\n                      this\n                    );\n                  a === i - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              } else {\n                if (!(r = this.currentBehaves) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                for (var o = r.length, a = 0; a < o; a++) {\n                  var s;\n                  if ((s = r[a]).type === t.type) return s.updateCfg(e), this;\n                  a === o - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              }\n              return this;\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.modes = null),\n                (this.currentBehaves = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Mt = n(43),\n        kt = (function (t) {\n          function e(e, n) {\n            var r = t.call(this, e, n) || this;\n            return (\n              (r.item = n.item),\n              (r.canvasX = n.canvasX),\n              (r.canvasY = n.canvasY),\n              (r.detail = n.detail),\n              r\n            );\n          }\n          return Object(f.c)(e, t), e;\n        })(n(6).d),\n        Ct = function (t) {\n          return \"\".concat(t, \"-\").concat(Math.random()).concat(Date.now());\n        },\n        Et = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          if (Object(c.isNumber)(t)) e = n = r = i = t;\n          else if (Object(c.isString)(t)) {\n            e = n = r = i = parseInt(t, 10);\n          } else\n            Object(c.isArray)(t) &&\n              ((e = t[0]),\n              (r = Object(c.isNil)(t[1]) ? t[0] : t[1]),\n              (i = Object(c.isNil)(t[2]) ? t[0] : t[2]),\n              (n = Object(c.isNil)(t[3]) ? r : t[3]));\n          return [e, r, i, n];\n        },\n        jt = function (t) {\n          var e = new kt(t.type, t);\n          return (\n            (e.clientX = t.clientX),\n            (e.clientY = t.clientY),\n            (e.x = t.x),\n            (e.y = t.y),\n            (e.target = t.target),\n            (e.currentTarget = t.currentTarget),\n            (e.bubbles = !0),\n            (e.item = t.item),\n            e\n          );\n        },\n        Pt = function (t) {\n          if (!t) return !1;\n          for (var e = [1, 0, 0, 0, 1, 0, 0, 0, 1], n = 0; n < 9; n++)\n            if (t[n] !== e[n]) return !0;\n          return !1;\n        },\n        At = function (t) {\n          return Number.isNaN(Number(t));\n        },\n        It = function (t) {\n          for (\n            var e = 1 / 0, n = -1 / 0, r = 1 / 0, i = -1 / 0, o = 0;\n            o < t.length;\n            o++\n          ) {\n            var a = t[o].getBBox(),\n              s = a.minX,\n              c = a.minY,\n              u = a.maxX,\n              h = a.maxY;\n            s < e && (e = s),\n              c < r && (r = c),\n              u > n && (n = u),\n              h > i && (i = h);\n          }\n          return {\n            x: Math.floor(e),\n            y: Math.floor(r),\n            width: Math.ceil(n) - Math.floor(e),\n            height: Math.ceil(i) - Math.floor(r),\n            minX: e,\n            minY: r,\n            maxX: n,\n            maxY: i,\n          };\n        },\n        Tt = function (t, e, n, r, i) {\n          void 0 === e && (e = 15),\n            void 0 === n && (n = \"quadratic\"),\n            void 0 === r && (r = void 0),\n            void 0 === i && (i = void 0);\n          for (\n            var o = t.length,\n              a = 2 * e,\n              s = [\n                \"top\",\n                \"top-right\",\n                \"right\",\n                \"bottom-right\",\n                \"bottom\",\n                \"bottom-left\",\n                \"left\",\n                \"top-left\",\n              ],\n              c = {},\n              u = [],\n              h = {},\n              l = 0;\n            l < o;\n            l++\n          ) {\n            var f = t[l],\n              d = f.source,\n              p = f.target,\n              g = \"\".concat(d, \"-\").concat(p);\n            if (!u[l]) {\n              c[g] || (c[g] = []), (u[l] = !0), c[g].push(f);\n              for (var v = 0; v < o; v++)\n                if (l !== v) {\n                  var y = t[v],\n                    m = y.source,\n                    b = y.target;\n                  u[v] ||\n                    (d === b && p === m\n                      ? (c[g].push(y),\n                        (u[v] = !0),\n                        (h[\n                          \"\"\n                            .concat(m, \"|\")\n                            .concat(b, \"|\")\n                            .concat(c[g].length - 1)\n                        ] = !0))\n                      : d === m && p === b && (c[g].push(y), (u[v] = !0)));\n                }\n            }\n          }\n          for (var x in c)\n            for (var w = c[x], S = w.length, O = 0; O < S; O++) {\n              var M = w[O];\n              if (M.source !== M.target)\n                if (1 === S && r && M.source !== M.target) M.type = r;\n                else {\n                  M.type = n;\n                  var k =\n                    (O % 2 == 0 ? 1 : -1) *\n                    (h[\"\".concat(M.source, \"|\").concat(M.target, \"|\").concat(O)]\n                      ? -1\n                      : 1);\n                  M.curveOffset =\n                    S % 2 == 1\n                      ? k * Math.ceil(O / 2) * a\n                      : k * (Math.floor(O / 2) * a + e);\n                }\n              else\n                i && (M.type = i),\n                  (M.loopCfg = {\n                    position: s[O % 8],\n                    dist: 20 * Math.floor(O / 8) + 50,\n                  });\n            }\n          return t;\n        },\n        Nt = (function () {\n          function t(t) {\n            (this.destroyed = !1), (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.getViewCenter = function () {\n              var t = this.getFormatPadding(),\n                e = this.graph,\n                n = this.graph.get(\"width\"),\n                r = e.get(\"height\");\n              return {\n                x: (n - t[1] - t[3]) / 2 + t[3],\n                y: (r - t[0] - t[2]) / 2 + t[0],\n              };\n            }),\n            (t.prototype.fitCenter = function () {\n              var t = this.graph,\n                e = t.get(\"group\");\n              e.resetMatrix();\n              var n = e.getCanvasBBox();\n              if (0 !== n.width && 0 !== n.height) {\n                var r = this.getViewCenter(),\n                  i = n.x + n.width / 2,\n                  o = n.y + n.height / 2;\n                t.translate(r.x - i, r.y - o);\n              }\n            }),\n            (t.prototype.fitView = function () {\n              var t = this.graph,\n                e = this.getFormatPadding(),\n                n = t.get(\"width\"),\n                r = t.get(\"height\"),\n                i = t.get(\"group\");\n              i.resetMatrix();\n              var o = i.getCanvasBBox();\n              if (0 !== o.width && 0 !== o.height) {\n                var a = this.getViewCenter(),\n                  s = o.x + o.width / 2,\n                  c = o.y + o.height / 2;\n                t.translate(a.x - s, a.y - c);\n                var u = (n - e[1] - e[3]) / o.width,\n                  h = (r - e[0] - e[2]) / o.height,\n                  l = u;\n                u > h && (l = h), t.zoom(l, a);\n              }\n            }),\n            (t.prototype.getFormatPadding = function () {\n              var t = this.graph.get(\"fitViewPadding\");\n              return Et(t);\n            }),\n            (t.prototype.focusPoint = function (t, e, n) {\n              var r = this,\n                i = this.getViewCenter(),\n                o = this.getPointByCanvas(i.x, i.y),\n                a = this.graph.get(\"group\").getMatrix();\n              if ((a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]), e)) {\n                var s = (o.x - t.x) * a[0],\n                  c = (o.y - t.y) * a[4],\n                  u = 0,\n                  h = 0,\n                  l = 0,\n                  d = 0;\n                this.graph.get(\"canvas\").animate(\n                  function (t) {\n                    (l = s * t),\n                      (d = c * t),\n                      r.graph.translate(l - u, d - h),\n                      (u = l),\n                      (h = d);\n                  },\n                  Object(f.a)({}, n),\n                );\n              } else\n                this.graph.translate((o.x - t.x) * a[0], (o.y - t.y) * a[4]);\n            }),\n            (t.prototype.getPointByCanvas = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), k({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.getPointByClient = function (t, e) {\n              var n = this.graph.get(\"canvas\").getPointByClient(t, e);\n              return this.getPointByCanvas(n.x, n.y);\n            }),\n            (t.prototype.getClientByPoint = function (t, e) {\n              var n = this.graph.get(\"canvas\"),\n                r = this.getCanvasByPoint(t, e),\n                i = n.getClientByPoint(r.x, r.y);\n              return { x: i.x, y: i.y };\n            }),\n            (t.prototype.getCanvasByPoint = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), M({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.focus = function (t, e, n) {\n              if ((Object(c.isString)(t) && (t = this.graph.findById(t)), t)) {\n                var r = 0,\n                  i = 0;\n                if (t.getType && \"edge\" === t.getType()) {\n                  var o = t.getSource().get(\"group\").getMatrix(),\n                    a = t.getTarget().get(\"group\").getMatrix();\n                  o && a\n                    ? ((r = (o[6] + a[6]) / 2), (i = (o[7] + a[7]) / 2))\n                    : (o || a) &&\n                      ((r = o ? o[6] : a[6]), (i = o ? o[7] : a[7]));\n                } else {\n                  var s = t.get(\"group\").getMatrix();\n                  s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                    (r = s[6]),\n                    (i = s[7]);\n                }\n                this.focusPoint({ x: r, y: i }, e, n);\n              }\n            }),\n            (t.prototype.changeSize = function (t, e) {\n              var n = this.graph;\n              if (!Object(c.isNumber)(t) || !Object(c.isNumber)(e))\n                throw Error(\n                  \"invalid canvas width & height, please make sure width & height type is number\",\n                );\n              n.set({ width: t, height: e }),\n                n.get(\"canvas\").changeSize(t, e),\n                n.get(\"plugins\").forEach(function (r) {\n                  if (r.get(\"gridContainer\")) {\n                    var i = n.get(\"minZoom\");\n                    Object(Mt.b)(r.get(\"container\"), {\n                      width: \"\".concat(t, \"px\"),\n                      height: \"\".concat(e, \"px\"),\n                    }),\n                      Object(Mt.b)(r.get(\"gridContainer\"), {\n                        width: \"\".concat(t / i, \"px\"),\n                        height: \"\".concat(e / i, \"px\"),\n                        left: 0,\n                        top: 0,\n                      });\n                  }\n                });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !1);\n            }),\n            t\n          );\n        })();\n      function Bt(t) {\n        return (Bt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Lt(t) {\n        if (\"string\" != typeof t) return t;\n        var e = function (t) {\n            if (\"string\" != typeof t) return t;\n            try {\n              return JSON.parse(t.trim());\n            } catch (e) {\n              return t.trim();\n            }\n          },\n          n = e(t);\n        if (\"string\" != typeof n) return n;\n        for (\n          var r = function (t) {\n              return t[t.length - 1];\n            },\n            i = t.trim(),\n            o = [],\n            a = [],\n            s = function () {\n              for (var t = [], e = 0; e < arguments.length; e++)\n                t[e] = arguments[e];\n              return t.some(function (t) {\n                return r(a) === t;\n              });\n            },\n            c = null,\n            u = 0,\n            h = \"\";\n          u < i.length;\n\n        ) {\n          var l = i[u],\n            f = s('\"', \"'\");\n          if (f || l.trim()) {\n            var d = \"\\\\\" === i[u - 1],\n              p = s(\"}\"),\n              g = s(\"]\"),\n              v = s(\",\"),\n              y = r(o);\n            if (f)\n              if (r(a) !== l || d) h += l;\n              else {\n                a.pop();\n                var m = e(h);\n                y.push(m), (c = m), (h = \"\");\n              }\n            else if (g && \",\" === l) h && (y.push(e(h)), (h = \"\"));\n            else if (p && \":\" === l) a.push(\",\"), h && (y.push(h), (h = \"\"));\n            else if (v && \",\" === l) h && (y.push(e(h)), (h = \"\")), a.pop();\n            else if (\"}\" === l && (p || v)) {\n              h && (y.push(e(h)), (h = \"\")), v && a.pop();\n              for (var b = {}, x = 1; x < y.length; x += 2) b[y[x - 1]] = y[x];\n              o.pop(), o.length && r(o).push(b), a.pop(), (c = b);\n            } else\n              \"]\" === l && g\n                ? (h && (y.push(e(h)), (h = \"\")),\n                  o.pop(),\n                  o.length && r(o).push(y),\n                  a.pop(),\n                  (c = y))\n                : \"{\" === l\n                ? (o.push([]), a.push(\"}\"))\n                : \"[\" === l\n                ? (o.push([]), a.push(\"]\"))\n                : '\"' === l\n                ? a.push('\"')\n                : \"'\" === l\n                ? a.push(\"'\")\n                : (h += l);\n            u += 1;\n          } else u += 1;\n        }\n        return c || h;\n      }\n      function Dt(t, e) {\n        var n;\n        void 0 === e && (e = { x: 0, y: 0 });\n        var r = Object(f.a)({ x: 0, y: 0, width: 0, height: 0 }, e);\n        if (null === (n = t.children) || void 0 === n ? void 0 : n.length) {\n          var i = t.attrs,\n            o = void 0 === i ? {} : i,\n            a = o.marginTop,\n            s = Object(f.a)({}, e);\n          a && (s.y += a);\n          for (var c = 0; c < t.children.length; c++) {\n            t.children[c].attrs.key = \"\"\n              .concat(o.key || \"root\", \" -\")\n              .concat(c, \" \");\n            var u = Dt(t.children[c], s);\n            if (u.bbox) {\n              var h = u.bbox;\n              \"inline\" === u.attrs.next\n                ? (s.x += u.bbox.width)\n                : (s.y += u.bbox.height),\n                h.width + h.x > r.width && (r.width = h.width + h.x),\n                h.height + h.y > r.height && (r.height = h.height + h.y);\n            }\n          }\n        }\n        return (\n          (t.bbox = (function (t, e, n) {\n            var r,\n              i,\n              o = t.attrs,\n              a = void 0 === o ? {} : o,\n              s = {\n                x: e.x || 0,\n                y: e.y || 0,\n                width: n.width || 0,\n                height: n.height || 0,\n              };\n            switch (t.type) {\n              case \"maker\":\n              case \"circle\":\n                a.r && ((i = 2 * a.r), (r = 2 * a.r));\n                break;\n              case \"text\":\n                a.text &&\n                  ((i = vt(a.text, a.fontSize || 12)[0]),\n                  (r = 16),\n                  (s.y += r),\n                  (s.height = r),\n                  (s.width = i),\n                  (t.attrs = Object(f.a)({ fontSize: 12, fill: \"#000\" }, a)));\n                break;\n              default:\n                a.width && (i = a.width), a.height && (r = a.height);\n            }\n            return (\n              r >= 0 && (s.height = r),\n              i >= 0 && (s.width = i),\n              a.marginTop && (s.y += a.marginTop),\n              a.marginLeft && (s.x += a.marginLeft),\n              s\n            );\n          })(t, e, r)),\n          (t.attrs = Object(f.a)(Object(f.a)({}, t.attrs), t.bbox)),\n          t\n        );\n      }\n      function _t(t) {\n        var e = {},\n          n = function (e) {\n            var n = (function (t) {\n                return function (e) {\n                  for (var n = t.length, r = [], i = 0, o = \"\"; i < n; )\n                    if (\"{\" === t[i] && \"{\" === t[i + 1])\n                      r.push(o), (o = \"\"), (i += 2);\n                    else if (\"}\" === t[i] && \"}\" === t[i + 1]) {\n                      if (r.length) {\n                        var a = r.pop();\n                        (o = Object(c.get)(\n                          e,\n                          o,\n                          a.endsWith(\"=\") ? '\"{'.concat(o, '}\"') : o,\n                        )),\n                          r.push(a + o);\n                      }\n                      (i += 2), (o = \"\");\n                    } else (o += t[i]), (i += 1);\n                  return (\n                    r.push(o),\n                    r\n                      .map(function (t, e) {\n                        return r[e - 1] && r[e - 1].endsWith(\"=\")\n                          ? '\"{'.concat(t, '}\"')\n                          : t;\n                      })\n                      .join(\"\")\n                  );\n                };\n              })(\"function\" == typeof t ? t(e) : t)(e),\n              r = document.createElement(\"div\");\n            r.innerHTML = n;\n            var i = Dt(\n              (function t(e, n) {\n                var r = {},\n                  i = (e.getAttributeNames && e.getAttributeNames()) || [],\n                  o =\n                    e.children &&\n                    Array.from(e.children).map(function (e) {\n                      return t(e, n);\n                    }),\n                  a = {},\n                  s = e.tagName ? e.tagName.toLowerCase() : \"group\";\n                return (\n                  \"text\" === s && (r.text = e.innerText),\n                  (a.type = s),\n                  \"img\" === s && (a.type = \"image\"),\n                  Array.from(i).forEach(function (t) {\n                    var n = t.split(\"-\").reduce(function (t, e) {\n                        return t + e.charAt(0).toUpperCase() + e.slice(1);\n                      }),\n                      i = e.getAttribute(t);\n                    try {\n                      if (\"style\" === n || \"attrs\" === n) {\n                        var o = Lt(i);\n                        r = Object(f.a)(Object(f.a)({}, r), o);\n                      } else a[n] = Lt(i);\n                    } catch (t) {\n                      if (\"style\" === n) throw t;\n                      a[n] = i;\n                    }\n                  }),\n                  (a.attrs = r),\n                  n &&\n                    n.style &&\n                    a.name &&\n                    \"object\" === Bt(n.style[a.name]) &&\n                    (a.attrs = Object(f.a)(\n                      Object(f.a)({}, a.attrs),\n                      n.style[a.name],\n                    )),\n                  n &&\n                    n.style &&\n                    a.keyshape &&\n                    (a.attrs = Object(f.a)(Object(f.a)({}, a.attrs), n.style)),\n                  o.length && (a.children = o),\n                  a\n                );\n              })(r.children[0], e),\n            );\n            return r.remove(), i;\n          };\n        return {\n          draw: function (t, r) {\n            var i = n(t),\n              o = r;\n            return (\n              (function t(e) {\n                var n = e.attrs,\n                  i = void 0 === n ? {} : n,\n                  a = e.bbox,\n                  s = e.type,\n                  c = e.children,\n                  u = Object(f.e)(e, [\"attrs\", \"bbox\", \"type\", \"children\"]);\n                if (\"group\" !== e.type) {\n                  var h = r.addShape(\n                    e.type,\n                    Object(f.a)(\n                      { attrs: i, origin: { bbox: a, type: s, children: c } },\n                      u,\n                    ),\n                  );\n                  e.keyshape && (o = h);\n                }\n                e.children &&\n                  e.children.forEach(function (e) {\n                    return t(e);\n                  });\n              })(i),\n              (e[t.id] = [i]),\n              o\n            );\n          },\n          update: function (t, r) {\n            e[t.id] || (e[t.id] = []);\n            var i = r.getContainer(),\n              o = i.get(\"children\"),\n              a = n(t),\n              s = (function t(e, n) {\n                var r,\n                  i,\n                  o,\n                  a,\n                  s = (e || {}).type,\n                  c = ((null == n ? void 0 : n.attrs) || {}).key;\n                if ((c && e && (e.attrs.key = c), !e && n))\n                  return { action: \"delete\", val: n, type: s, key: c };\n                if (e && !n) return { action: \"add\", val: e, type: s };\n                if (!e && !n) return { action: \"same\", type: s };\n                var u = [];\n                if (\n                  (null === (r = e.children) || void 0 === r\n                    ? void 0\n                    : r.length) > 0 ||\n                  (null === (i = n.children) || void 0 === i\n                    ? void 0\n                    : i.length) > 0\n                )\n                  for (\n                    var h = Math.max(\n                        null === (o = e.children) || void 0 === o\n                          ? void 0\n                          : o.length,\n                        null === (a = n.children) || void 0 === a\n                          ? void 0\n                          : a.length,\n                      ),\n                      l = n.children || [],\n                      f = e.children || [],\n                      d = 0;\n                    d < h;\n                    d += 1\n                  )\n                    u.push(t(f[d], l[d]));\n                var p = Object.keys(n.attrs),\n                  g = Object.keys(e.attrs);\n                return n.type !== e.type\n                  ? {\n                      action: \"restructure\",\n                      nowTarget: e,\n                      formerTarget: n,\n                      key: c,\n                      children: u,\n                    }\n                  : p\n                      .filter(function (t) {\n                        return \"children\" !== t;\n                      })\n                      .some(function (t) {\n                        return e.attrs[t] !== n.attrs[t] || !g.includes(t);\n                      })\n                  ? { action: \"change\", val: e, children: u, type: s, key: c }\n                  : { action: \"same\", children: u, type: s, key: c };\n              })(a, e[t.id].pop()),\n              c = function t(e) {\n                var n;\n                \"group\" !== e.type && i.addShape(e.type, { attrs: e.attrs }),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              },\n              u = function t(e) {\n                var n,\n                  r = o.find(function (t) {\n                    return t.attrs.key === e.attrs.key;\n                  });\n                r && i.removeChild(r),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              };\n            !(function t(e) {\n              var n = e.key;\n              if (\"group\" !== e.type) {\n                var i = o.find(function (t) {\n                  return t.attrs.key === n;\n                });\n                switch (e.action) {\n                  case \"change\":\n                    if (i) {\n                      var a = e.val.keyshape ? r.getOriginStyle() : {};\n                      i.attr(Object(f.a)(Object(f.a)({}, a), e.val.attrs));\n                    }\n                    break;\n                  case \"add\":\n                    c(e.val);\n                    break;\n                  case \"delete\":\n                    u(e.val);\n                    break;\n                  case \"restructure\":\n                    u(e.formerTarget), c(e.nowTarget);\n                }\n              }\n              e.children &&\n                e.children.forEach(function (e) {\n                  return t(e);\n                });\n            })(s),\n              e[t.id].push(a);\n          },\n          getAnchorPoints: function () {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n              [0.5, 1],\n              [0.5, 0],\n            ];\n          },\n        };\n      }\n      var Rt = {};\n      function Ft(t) {\n        return Rt[t] || (Rt[t] = Object(c.upperFirst)(t)), Rt[t];\n      }\n      var Yt = {\n          defaultShapeType: \"defaultType\",\n          className: null,\n          getShape: function (t) {\n            return (\n              this[t] || this[this.defaultShapeType] || this[\"simple-circle\"]\n            );\n          },\n          draw: function (t, e, n) {\n            var r = this.getShape(t),\n              i = r.draw(e, n);\n            return r.afterDraw && r.afterDraw(e, n, i), i;\n          },\n          baseUpdate: function (t, e, n) {\n            var r = this.getShape(t);\n            r.update && r.update(e, n), r.afterUpdate && r.afterUpdate(e, n);\n          },\n          setState: function (t, e, n, r) {\n            this.getShape(t).setState(e, n, r);\n          },\n          shouldUpdate: function (t) {\n            return !!this.getShape(t).update;\n          },\n          getControlPoints: function (t, e) {\n            return this.getShape(t).getControlPoints(e);\n          },\n          getAnchorPoints: function (t, e) {\n            return this.getShape(t).getAnchorPoints(e);\n          },\n        },\n        Xt = {\n          options: {},\n          draw: function (t, e) {\n            return this.drawShape(t, e);\n          },\n          drawShape: function () {},\n          afterDraw: function () {},\n          afterUpdate: function () {},\n          setState: function () {},\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            var e = this.options.anchorPoints;\n            return t.anchorPoints || e;\n          },\n        },\n        zt = (function () {\n          function t() {}\n          return (\n            (t.registerFactory = function (e, n) {\n              var r = Ft(e),\n                i = Yt,\n                o = Object(f.a)(Object(f.a)({}, i), n);\n              return (t[r] = o), (o.className = r), o;\n            }),\n            (t.getFactory = function (e) {\n              return t[Ft(e)];\n            }),\n            (t.registerNode = function (e, n, r) {\n              var i,\n                o = t.Node;\n              if (\"string\" == typeof n || \"function\" == typeof n) {\n                var a = _t(n);\n                i = Object(f.a)(Object(f.a)({}, o.getShape(\"single-node\")), a);\n              } else if (n.jsx) {\n                a = _t(n.jsx);\n                i = Object(f.a)(\n                  Object(f.a)(Object(f.a)({}, o.getShape(\"single-node\")), a),\n                  n,\n                );\n              } else {\n                o.getShape(r);\n                var s = r ? o.getShape(r) : Xt;\n                i = Object(f.a)(Object(f.a)({}, s), n);\n              }\n              return (i.type = e), (i.itemType = \"node\"), (o[e] = i), i;\n            }),\n            (t.registerEdge = function (e, n, r) {\n              var i = t.Edge,\n                o = r ? i.getShape(r) : Xt,\n                a = Object(f.a)(Object(f.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"edge\"), (i[e] = a), a;\n            }),\n            (t.registerCombo = function (e, n, r) {\n              var i = t.Combo,\n                o = r ? i.getShape(r) : Xt,\n                a = Object(f.a)(Object(f.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"combo\"), (i[e] = a), a;\n            }),\n            t\n          );\n        })(),\n        Wt = zt;\n      zt.registerFactory(\"node\", { defaultShapeType: \"circle\" }),\n        zt.registerFactory(\"edge\", { defaultShapeType: \"line\" }),\n        zt.registerFactory(\"combo\", { defaultShapeType: \"circle\" });\n      var qt = (function () {\n          function t(t) {\n            (this._cfg = {}), (this.destroyed = !1);\n            var e = {\n              id: void 0,\n              type: \"item\",\n              model: {},\n              group: void 0,\n              animate: !1,\n              visible: !0,\n              locked: !1,\n              event: !0,\n              keyShape: void 0,\n              states: [],\n            };\n            this._cfg = Object.assign(e, this.getDefaultCfg(), t);\n            var n = this.get(\"model\"),\n              r = n.id,\n              i = this.get(\"type\");\n            r || ((r = Ct(i)), (this.get(\"model\").id = r)), this.set(\"id\", r);\n            var o = t.group;\n            o && (o.set(\"item\", this), o.set(\"id\", r)),\n              this.init(),\n              this.draw();\n            var a = n.shape || n.type || (\"edge\" === i ? \"line\" : \"circle\"),\n              s = this.get(\"shapeFactory\");\n            if (s && s[a]) {\n              var u = s[a].options;\n              if (u && u.stateStyles) {\n                var h = this.get(\"styles\") || n.stateStyles;\n                (h = Object(c.deepMix)({}, u.stateStyles, h)),\n                  this.set(\"styles\", h);\n              }\n            }\n          }\n          return (\n            (t.prototype.calculateBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = ut(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.calculateCanvasBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = ut(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.drawInner = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"group\"),\n                n = this.get(\"model\");\n              e.clear();\n              var r = n.visible;\n              if ((void 0 === r || r || this.changeVisibility(r), t)) {\n                this.updatePosition(n);\n                var i = this.getShapeCfg(n),\n                  o = i.type,\n                  a = t.draw(o, i, e);\n                a &&\n                  (this.set(\"keyShape\", a),\n                  a.set(\"isKeyShape\", !0),\n                  a.set(\"draggable\", !0)),\n                  this.setOriginStyle(),\n                  this.set(\"currentShape\", o),\n                  this.restoreStates(t, o);\n              }\n            }),\n            (t.prototype.setOriginStyle = function () {\n              var t = this.get(\"group\").get(\"children\"),\n                e = this.getKeyShape(),\n                n = this,\n                r = e.get(\"name\");\n              if (this.get(\"originStyle\")) {\n                var i = this.getOriginStyle();\n                r && !i[r] && (i[r] = {});\n                var o = this.getCurrentStatesStyle();\n                Object(c.each)(t, function (t) {\n                  var e = t.get(\"name\"),\n                    a = t.attr();\n                  if (e && e !== r) {\n                    var s = o[e];\n                    i[e] || (i[e] = {}),\n                      s\n                        ? Object.keys(a).forEach(function (t) {\n                            var n = a[t];\n                            n !== s[t] && (i[e][t] = n);\n                          })\n                        : (i[e] =\n                            \"image\" !== t.get(\"type\")\n                              ? Object(c.clone)(a)\n                              : n.getShapeStyleByName(e));\n                  } else {\n                    var u = t.attr(),\n                      h = Object(f.a)(Object(f.a)({}, o), o[r]);\n                    Object.keys(u).forEach(function (t) {\n                      var e = u[t];\n                      h[t] !== e && (r ? (i[r][t] = e) : (i[t] = e));\n                    });\n                  }\n                }),\n                  i.path && delete i.path,\n                  i.matrix && delete i.matrix,\n                  i.x && delete i.x,\n                  i.y && delete i.y,\n                  i[r] && i[r].x && delete i[r].x,\n                  i[r] && i[r].y && delete i[r].y,\n                  n.set(\"originStyle\", i);\n              } else {\n                var a = {};\n                Object(c.each)(t, function (t) {\n                  var e = t.get(\"type\"),\n                    i = t.get(\"name\");\n                  if (i && i !== r)\n                    a[i] =\n                      \"image\" !== e\n                        ? Object(c.clone)(t.attr())\n                        : n.getShapeStyleByName(i);\n                  else {\n                    var o = n.getShapeStyleByName();\n                    if (\n                      (o.path && delete o.path, o.matrix && delete o.matrix, r)\n                    )\n                      if (i) a[r] = o;\n                      else {\n                        var s = Ct(\"shape\");\n                        t.set(\"name\", s),\n                          (a[s] =\n                            \"image\" !== e\n                              ? Object(c.clone)(t.attr())\n                              : n.getShapeStyleByName(i));\n                      }\n                    else Object.assign(a, o);\n                  }\n                }),\n                  n.set(\"originStyle\", a);\n              }\n            }),\n            (t.prototype.restoreStates = function (t, e) {\n              var n = this,\n                r = n.get(\"states\");\n              Object(c.each)(r, function (r) {\n                t.setState(e, r, !0, n);\n              });\n            }),\n            (t.prototype.init = function () {\n              var t = Wt.getFactory(this.get(\"type\"));\n              this.set(\"shapeFactory\", t);\n            }),\n            (t.prototype.get = function (t) {\n              return this._cfg[t];\n            }),\n            (t.prototype.set = function (t, e) {\n              Object(c.isPlainObject)(t)\n                ? (this._cfg = Object(f.a)(Object(f.a)({}, this._cfg), t))\n                : (this._cfg[t] = e);\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (t.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"bboxCanvasCache\", null);\n            }),\n            (t.prototype.beforeDraw = function () {}),\n            (t.prototype.afterDraw = function () {}),\n            (t.prototype.afterUpdate = function () {}),\n            (t.prototype.draw = function () {\n              this.beforeDraw(), this.drawInner(), this.afterDraw();\n            }),\n            (t.prototype.getShapeStyleByName = function (t) {\n              var e,\n                n = this.get(\"group\");\n              if (\n                (e = t\n                  ? n.find(function (e) {\n                      return e.get(\"name\") === t;\n                    })\n                  : this.getKeyShape())\n              ) {\n                var r = {};\n                return (\n                  Object(c.each)(e.attr(), function (t, e) {\n                    \"img\" !== e && (r[e] = t);\n                  }),\n                  r\n                );\n              }\n              return {};\n            }),\n            (t.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\");\n              if (e) {\n                var n = t;\n                return (n.style = Object(f.a)(Object(f.a)({}, e), t.style)), n;\n              }\n              return t;\n            }),\n            (t.prototype.getStateStyle = function (t) {\n              var e = this.get(\"styles\");\n              return e && e[t];\n            }),\n            (t.prototype.getOriginStyle = function () {\n              return this.get(\"originStyle\");\n            }),\n            (t.prototype.getCurrentStatesStyle = function () {\n              var t = this,\n                e = {},\n                n = t.getStates();\n              return n && n.length\n                ? (Object(c.each)(t.getStates(), function (n) {\n                    e = Object.assign(e, t.getStateStyle(n));\n                  }),\n                  e)\n                : this.getOriginStyle();\n            }),\n            (t.prototype.setState = function (t, e) {\n              var n = this.get(\"states\"),\n                r = this.get(\"shapeFactory\"),\n                i = t,\n                o = t;\n              Object(c.isString)(e) &&\n                ((i = \"\".concat(t, \":\").concat(e)), (o = \"\".concat(t, \":\")));\n              var a = n;\n              if (Object(c.isBoolean)(e)) {\n                var s = n.indexOf(o);\n                if (e) {\n                  if (s > -1) return;\n                  n.push(i);\n                } else s > -1 && n.splice(s, 1);\n              } else if (Object(c.isString)(e)) {\n                var u = n.filter(function (t) {\n                  return t.includes(o);\n                });\n                u.length > 0 && this.clearStates(u),\n                  (a = a.filter(function (t) {\n                    return !t.includes(o);\n                  })).push(i),\n                  this.set(\"states\", a);\n              }\n              if (r) {\n                var h = this.get(\"model\").type;\n                r.setState(h, t, e, this);\n              }\n            }),\n            (t.prototype.clearStates = function (t) {\n              var e = this,\n                n = e.getStates(),\n                r = e.get(\"shapeFactory\"),\n                i = e.get(\"model\").type;\n              t || (t = n), Object(c.isString)(t) && (t = [t]);\n              var o = n.filter(function (e) {\n                return -1 === t.indexOf(e);\n              });\n              e.set(\"states\", o),\n                t.forEach(function (t) {\n                  r.setState(i, t, !1, e);\n                });\n            }),\n            (t.prototype.getContainer = function () {\n              return this.get(\"group\");\n            }),\n            (t.prototype.getKeyShape = function () {\n              return this.get(\"keyShape\");\n            }),\n            (t.prototype.getModel = function () {\n              return this.get(\"model\");\n            }),\n            (t.prototype.getType = function () {\n              return this.get(\"type\");\n            }),\n            (t.prototype.getID = function () {\n              return this.get(\"id\");\n            }),\n            (t.prototype.isItem = function () {\n              return !0;\n            }),\n            (t.prototype.getStates = function () {\n              return this.get(\"states\");\n            }),\n            (t.prototype.hasState = function (t) {\n              return this.getStates().indexOf(t) >= 0;\n            }),\n            (t.prototype.refresh = function () {\n              var t = this.get(\"model\");\n              this.updatePosition(t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (t.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = n.x,\n                a = n.y;\n              (t.x = isNaN(t.x) ? n.x : t.x), (t.y = isNaN(t.y) ? n.y : t.y);\n              var s = this.get(\"styles\");\n              if (t.stateStyles) {\n                var u = t.stateStyles;\n                Object(c.mix)(s, u), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                e\n                  ? this.updatePosition(t)\n                  : ((o === t.x && a === t.y) || this.updatePosition(t),\n                    this.updateShape()),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.updateShape = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"model\"),\n                n = e.type;\n              if (t.shouldUpdate(n) && n === this.get(\"currentShape\")) {\n                var r = this.getShapeCfg(e);\n                t.baseUpdate(n, r, this), this.setOriginStyle();\n              } else this.draw();\n              this.restoreStates(t, n);\n            }),\n            (t.prototype.updatePosition = function (t) {\n              var e = this.get(\"model\"),\n                n = Object(c.isNil)(t.x) ? e.x : t.x,\n                r = Object(c.isNil)(t.y) ? e.y : t.y,\n                i = this.get(\"group\");\n              if (Object(c.isNil)(n) || Object(c.isNil)(r)) return !1;\n              (e.x = n), (e.y = r);\n              var o = i.getMatrix();\n              return (\n                (!o || o[6] !== n || o[7] !== r) &&\n                (i.resetMatrix(), I(i, { x: n, y: r }), this.clearCache(), !0)\n              );\n            }),\n            (t.prototype.getBBox = function () {\n              var t = this.get(\"bboxCache\");\n              return (\n                t || ((t = this.calculateBBox()), this.set(\"bboxCache\", t)), t\n              );\n            }),\n            (t.prototype.getCanvasBBox = function () {\n              var t = this.get(\"bboxCanvasCache\");\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()),\n                  this.set(\"bboxCanvasCache\", t)),\n                t\n              );\n            }),\n            (t.prototype.toFront = function () {\n              this.get(\"group\").toFront();\n            }),\n            (t.prototype.toBack = function () {\n              this.get(\"group\").toBack();\n            }),\n            (t.prototype.show = function () {\n              this.changeVisibility(!0);\n            }),\n            (t.prototype.hide = function () {\n              this.changeVisibility(!1);\n            }),\n            (t.prototype.changeVisibility = function (t) {\n              var e = this.get(\"group\");\n              t ? e.show() : e.hide(), this.set(\"visible\", t);\n            }),\n            (t.prototype.isVisible = function () {\n              return this.get(\"visible\");\n            }),\n            (t.prototype.enableCapture = function (t) {\n              var e = this.get(\"group\");\n              e && e.set(\"capture\", t);\n            }),\n            (t.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            t\n          );\n        })(),\n        Vt = { source: \"start\", target: \"end\" },\n        Gt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                type: \"edge\",\n                sourceNode: null,\n                targetNode: null,\n                startPoint: null,\n                endPoint: null,\n                linkCenter: !1,\n              };\n            }),\n            (e.prototype.setEnd = function (t, e) {\n              var n = Vt[t] + \"Point\",\n                r = t + \"Node\",\n                i = this.get(r);\n              i && !i.destroyed && i.removeEdge(this),\n                Object(c.isPlainObject)(e)\n                  ? (this.set(n, e), this.set(r, null))\n                  : (e.addEdge(this), this.set(r, e), this.set(n, null));\n            }),\n            (e.prototype.getLinkPoint = function (t, e, n) {\n              var r = Vt[t] + \"Point\",\n                i = t + \"Node\",\n                o = this.get(r);\n              if (!o) {\n                var a = this.get(i),\n                  s = t + \"Anchor\",\n                  u = this.getPrePoint(t, n),\n                  h = e[s];\n                Object(c.isNil)(h) || (o = a.getLinkPointByAnchor(h)),\n                  (o = o || a.getLinkPoint(u)),\n                  Object(c.isNil)(o.index) ||\n                    this.set(\"\".concat(t, \"AnchorIndex\"), o.index);\n              }\n              return o;\n            }),\n            (e.prototype.getPrePoint = function (t, e) {\n              if (e && e.length) return e[\"source\" === t ? 0 : e.length - 1];\n              var n = \"source\" === t ? \"target\" : \"source\";\n              return this.getEndPoint(n);\n            }),\n            (e.prototype.getEndPoint = function (t) {\n              var e = t + \"Node\",\n                n = Vt[t] + \"Point\",\n                r = this.get(e);\n              return r ? r.get(\"model\") : this.get(n);\n            }),\n            (e.prototype.getControlPointsByCenter = function (t) {\n              var e = this.getEndPoint(\"source\"),\n                n = this.getEndPoint(\"target\"),\n                r = this.get(\"shapeFactory\"),\n                i = t.type;\n              return r.getControlPoints(i, { startPoint: e, endPoint: n });\n            }),\n            (e.prototype.getEndCenter = function (t) {\n              var e = t + \"Node\",\n                n = Vt[t] + \"Point\",\n                r = this.get(e);\n              if (r) {\n                var i = r.getBBox();\n                return { x: i.centerX, y: i.centerY };\n              }\n              return this.get(n);\n            }),\n            (e.prototype.init = function () {\n              t.prototype.init.call(this),\n                this.setSource(this.get(\"source\")),\n                this.setTarget(this.get(\"target\"));\n            }),\n            (e.prototype.getShapeCfg = function (e) {\n              var n = this.get(\"linkCenter\"),\n                r = t.prototype.getShapeCfg.call(this, e);\n              if (n)\n                (r.startPoint = this.getEndCenter(\"source\")),\n                  (r.endPoint = this.getEndCenter(\"target\"));\n              else {\n                var i = r.controlPoints || this.getControlPointsByCenter(r);\n                (r.startPoint = this.getLinkPoint(\"source\", e, i)),\n                  (r.endPoint = this.getLinkPoint(\"target\", e, i));\n              }\n              return (\n                (r.sourceNode = this.get(\"sourceNode\")),\n                (r.targetNode = this.get(\"targetNode\")),\n                r\n              );\n            }),\n            (e.prototype.getModel = function () {\n              var t = this.get(\"model\"),\n                e = this.get(\"source\".concat(\"Node\")),\n                n = this.get(\"target\".concat(\"Node\"));\n              return (\n                e\n                  ? delete t[\"source\".concat(\"Node\")]\n                  : (t.source = this.get(\"start\".concat(\"Point\"))),\n                n\n                  ? delete t[\"target\".concat(\"Node\")]\n                  : (t.target = this.get(\"end\".concat(\"Point\"))),\n                Object(c.isString)(t.source) ||\n                  Object(c.isPlainObject)(t.source) ||\n                  (t.source = t.source.getID()),\n                Object(c.isString)(t.target) ||\n                  Object(c.isPlainObject)(t.target) ||\n                  (t.target = t.target.getID()),\n                t\n              );\n            }),\n            (e.prototype.setSource = function (t) {\n              this.setEnd(\"source\", t), this.set(\"source\", t);\n            }),\n            (e.prototype.setTarget = function (t) {\n              this.setEnd(\"target\", t), this.set(\"target\", t);\n            }),\n            (e.prototype.getSource = function () {\n              return this.get(\"source\");\n            }),\n            (e.prototype.getTarget = function () {\n              return this.get(\"target\");\n            }),\n            (e.prototype.updatePosition = function () {\n              return !1;\n            }),\n            (e.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = this.get(\"styles\");\n              if (t.stateStyles) {\n                var a = t.stateStyles;\n                Object(c.mix)(o, a), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"source\".concat(\"Node\")),\n                n = this.get(\"target\".concat(\"Node\"));\n              e && !e.destroyed && e.removeEdge(this),\n                n && !n.destroyed && n.removeEdge(this),\n                t.prototype.destroy.call(this);\n            }),\n            e\n          );\n        })(qt),\n        Ht = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getNearestPoint = function (t, e) {\n              for (\n                var n = 0, r = t[0], i = E(t[0], e), o = 0;\n                o < t.length;\n                o++\n              ) {\n                var a = t[o],\n                  s = E(a, e);\n                s < i && ((r = a), (i = s), (n = o));\n              }\n              return (r.anchorIndex = n), r;\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"node\", edges: [] };\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getInEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"target\") === t;\n              });\n            }),\n            (e.prototype.getOutEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"source\") === t;\n              });\n            }),\n            (e.prototype.getNeighbors = function (t) {\n              var e = this,\n                n = this.get(\"edges\");\n              if (\"target\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getSource() === e;\n                  })\n                  .map(function (t) {\n                    return t.getTarget();\n                  });\n              }\n              if (\"source\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getTarget() === e;\n                  })\n                  .map(function (t) {\n                    return t.getSource();\n                  });\n              }\n              return n.map(function (t) {\n                return t.getSource() === e ? t.getTarget() : t.getSource();\n              });\n            }),\n            (e.prototype.getLinkPointByAnchor = function (t) {\n              return this.getAnchorPoints()[t];\n            }),\n            (e.prototype.getLinkPoint = function (t) {\n              var e,\n                n,\n                r = this.get(\"keyShape\").get(\"type\"),\n                i = this.get(\"type\"),\n                o = this.getBBox();\n              \"combo\" === i\n                ? ((e = o.centerX || (o.maxX + o.minX) / 2),\n                  (n = o.centerY || (o.maxY + o.minY) / 2))\n                : ((e = o.centerX), (n = o.centerY));\n              var a,\n                s = this.getAnchorPoints();\n              switch (r) {\n                case \"circle\":\n                  a = S({ x: e, y: n, r: o.width / 2 }, t);\n                  break;\n                case \"ellipse\":\n                  a = O({ x: e, y: n, rx: o.width / 2, ry: o.height / 2 }, t);\n                  break;\n                default:\n                  a = w(o, t);\n              }\n              var c = a;\n              return (\n                s.length && (c || (c = t), (c = this.getNearestPoint(s, c))),\n                c || (c = { x: e, y: n }),\n                c\n              );\n            }),\n            (e.prototype.getAnchorPoints = function () {\n              var t = this.get(\"anchorPointsCache\");\n              if (!t) {\n                t = [];\n                var e = this.get(\"shapeFactory\"),\n                  n = this.getBBox(),\n                  r = this.get(\"model\"),\n                  i = this.getShapeCfg(r),\n                  o = r.type,\n                  a = e.getAnchorPoints(o, i) || [];\n                Object(c.each)(a, function (e, r) {\n                  var i = {\n                    x: n.minX + e[0] * n.width,\n                    y: n.minY + e[1] * n.height,\n                    anchorIndex: r,\n                  };\n                  t.push(i);\n                }),\n                  this.set(\"anchorPointsCache\", t);\n              }\n              return t;\n            }),\n            (e.prototype.addEdge = function (t) {\n              this.get(\"edges\").push(t);\n            }),\n            (e.prototype.lock = function () {\n              this.set(\"locked\", !0);\n            }),\n            (e.prototype.unlock = function () {\n              this.set(\"locked\", !1);\n            }),\n            (e.prototype.hasLocked = function () {\n              return this.get(\"locked\");\n            }),\n            (e.prototype.removeEdge = function (t) {\n              var e = this.getEdges(),\n                n = e.indexOf(t);\n              n > -1 && e.splice(n, 1);\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              if (!t) return !1;\n              var e = !Object(c.isNil)(t.x),\n                n = !Object(c.isNil)(t.y),\n                r = Object.keys(t);\n              return (1 === r.length && (e || n)) || (2 === r.length && e && n);\n            }),\n            e\n          );\n        })(qt),\n        Ut = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"combo\", nodes: [], edges: [], combos: [] };\n            }),\n            (e.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\"),\n                n = this.get(\"bbox\");\n              if (e && n) {\n                var r = t,\n                  i = {\n                    r:\n                      Math.hypot(n.height, n.width) / 2 ||\n                      nt.defaultCombo.size[0] / 2,\n                    width: n.width || nt.defaultCombo.size[0],\n                    height: n.height || nt.defaultCombo.size[1],\n                  };\n                r.style = Object(f.a)(\n                  Object(f.a)(Object(f.a)({}, e), t.style),\n                  i,\n                );\n                var o = t.padding || nt.defaultCombo.padding;\n                return (\n                  Object(c.isNumber)(o)\n                    ? ((i.r += o), (i.width += 2 * o), (i.height += 2 * o))\n                    : ((i.r += o[0]),\n                      (i.width += o[1] + o[3] || 2 * o[1]),\n                      (i.height += o[0] + o[2] || 2 * o[0])),\n                  this.set(\"sizeCache\", i),\n                  r\n                );\n              }\n              return t;\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"keyShape\"),\n                  e = this.get(\"group\"),\n                  n = ut(t, e);\n                (n.centerX = (n.minX + n.maxX) / 2),\n                  (n.centerY = (n.minY + n.maxY) / 2);\n                var r = this.get(\"sizeCache\"),\n                  i = this.get(\"bboxCache\") || {},\n                  o = i.x,\n                  a = i.x;\n                if (r)\n                  (r.width = Math.max(r.width, n.width)),\n                    (r.height = Math.max(r.height, n.height)),\n                    \"circle\" === t.get(\"type\")\n                      ? ((n.width = 2 * r.r), (n.height = 2 * r.r))\n                      : ((n.width = r.width), (n.height = r.height)),\n                    (n.minX = n.centerX - n.width / 2),\n                    (n.minY = n.centerY - n.height / 2),\n                    (n.maxX = n.centerX + n.width / 2),\n                    (n.maxY = n.centerY + n.height / 2);\n                else\n                  (n.width = n.maxX - n.minX),\n                    (n.height = n.maxY - n.minY),\n                    (n.centerX = (n.minX + n.maxX) / 2),\n                    (n.centerY = (n.minY + n.maxY) / 2);\n                return (\n                  (n.x = n.minX),\n                  (n.y = n.minY),\n                  (n.x === o && n.y === a) ||\n                    this.set(\"anchorPointsCache\", null),\n                  n\n                );\n              }\n            }),\n            (e.prototype.getChildren = function () {\n              return { nodes: this.getNodes(), combos: this.getCombos() };\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.addChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.addNode(t);\n                  break;\n                case \"combo\":\n                  this.addCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.addCombo = function (t) {\n              return this.get(\"combos\").push(t), !0;\n            }),\n            (e.prototype.addNode = function (t) {\n              return this.get(\"nodes\").push(t), !0;\n            }),\n            (e.prototype.removeChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.removeNode(t);\n                  break;\n                case \"combo\":\n                  this.removeCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.removeCombo = function (t) {\n              if (t) {\n                var e = this.getCombos(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.removeNode = function (t) {\n              if (t) {\n                var e = this.getNodes(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (e.prototype.getBBox = function () {\n              return (\n                this.set(\"bboxCanvasCache\", null), this.calculateCanvasBBox()\n              );\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null),\n                this.set(\"bboxCanvasCache\", null),\n                this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  this.set(\"sizeCache\", null),\n                  this.set(\"bbox\", null),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            e\n          );\n        })(Ht),\n        Zt = (function () {\n          function t(t) {\n            (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.addItem = function (t, e) {\n              var n = this.graph,\n                r = \"vedge\" === t ? \"edge\" : t,\n                i = n.get(\"\".concat(r, \"Group\")) || n.get(\"group\"),\n                o = Object(c.upperFirst)(r),\n                a = null,\n                s = n.get(r + Object(c.upperFirst)(\"stateStyles\")) || {},\n                u = n.get(\"default\" + o);\n              e.stateStyles && (s = e.stateStyles),\n                u &&\n                  Object(c.each)(u, function (t, n) {\n                    Object(c.isObject)(t) && !Object(c.isArray)(t)\n                      ? (e[n] = Object(c.deepMix)({}, t, e[n]))\n                      : Object(c.isArray)(t)\n                      ? (e[n] = e[n] || Object(c.clone)(u[n]))\n                      : (e[n] = e[n] || u[n]);\n                  });\n              var h = n.get(r + \"Mapper\");\n              if (h) {\n                var l = h(e);\n                l.stateStyles && ((s = l.stateStyles), delete l.stateStyles),\n                  Object(c.each)(l, function (t, n) {\n                    Object(c.isObject)(t) && !Object(c.isArray)(t)\n                      ? (e[n] = Object(c.deepMix)({}, e[n], t))\n                      : (e[n] = l[n] || e[n]);\n                  });\n              }\n              if (\n                (n.emit(\"beforeadditem\", { type: t, model: e }),\n                \"edge\" === t || \"vedge\" === t)\n              ) {\n                var f = void 0,\n                  d = void 0;\n                if (\n                  ((f = e.source),\n                  (d = e.target),\n                  f && Object(c.isString)(f) && (f = n.findById(f)),\n                  d && Object(c.isString)(d) && (d = n.findById(d)),\n                  !f || !d)\n                )\n                  return void console.warn(\n                    \"The source or target node of edge \".concat(\n                      e.id,\n                      \" does not exist!\",\n                    ),\n                  );\n                f.getType && \"combo\" === f.getType() && (e.isComboEdge = !0),\n                  d.getType && \"combo\" === d.getType() && (e.isComboEdge = !0),\n                  (a = new Gt({\n                    model: e,\n                    source: f,\n                    target: d,\n                    styles: s,\n                    linkCenter: n.get(\"linkCenter\"),\n                    group: i.addGroup(),\n                  }));\n              } else if (\"node\" === t)\n                a = new Ht({ model: e, styles: s, group: i.addGroup() });\n              else if (\"combo\" === t) {\n                var p = e.children,\n                  g = bt(p, n);\n                isNaN(g.x)\n                  ? isNaN(e.x) && (e.x = 100 * Math.random())\n                  : (e.x = g.x),\n                  isNaN(g.y)\n                    ? isNaN(e.y) && (e.y = 100 * Math.random())\n                    : (e.y = g.y);\n                var v = i.addGroup();\n                v.setZIndex(e.depth);\n                var y = (a = new Ut({\n                  model: e,\n                  styles: s,\n                  bbox: e.collapsed ? bt([], n) : g,\n                  group: v,\n                })).getModel();\n                (p || []).forEach(function (t) {\n                  var e = n.findById(t.id);\n                  a.addChild(e), (t.depth = y.depth + 2);\n                }),\n                  e.collapsed &&\n                    setTimeout(function () {\n                      n.collapseCombo(a);\n                    }, 16);\n              }\n              if (a)\n                return (\n                  n.get(\"\".concat(t, \"s\")).push(a),\n                  (n.get(\"itemMap\")[a.get(\"id\")] = a),\n                  n.emit(\"afteradditem\", { item: a, model: e }),\n                  a\n                );\n            }),\n            (t.prototype.updateItem = function (t, e) {\n              var n,\n                r,\n                i = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = i.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var o = \"\";\n                t.getType && (o = t.getType());\n                var a = i.get(o + \"Mapper\"),\n                  s = t.getModel(),\n                  u = t.isOnlyMove(e);\n                if (a) {\n                  var h = a(Object(c.deepMix)({}, s, e)),\n                    l = Object(c.deepMix)({}, s, h, e);\n                  h.stateStyles &&\n                    (t.set(\"styles\", l.stateStyles), delete l.stateStyles),\n                    Object(c.each)(l, function (t, n) {\n                      e[n] = t;\n                    });\n                } else\n                  Object(c.each)(e, function (t, n) {\n                    s[n] &&\n                      Object(c.isObject)(t) &&\n                      !Object(c.isArray)(t) &&\n                      (e[n] = Object(f.a)(Object(f.a)({}, s[n]), e[n]));\n                  });\n                if (\n                  (i.emit(\"beforeupdateitem\", { item: t, cfg: e }),\n                  \"edge\" === o)\n                ) {\n                  if (e.source) {\n                    var d = e.source;\n                    Object(c.isString)(d) && (d = i.findById(d)),\n                      t.setSource(d);\n                  }\n                  if (e.target) {\n                    var p = e.target;\n                    Object(c.isString)(p) && (p = i.findById(p)),\n                      t.setTarget(p);\n                  }\n                  t.update(e);\n                }\n                if (\"node\" === o || \"combo\" === o) {\n                  t.update(e, u);\n                  var g = t.getEdges(),\n                    v = xt(e);\n                  if (v && \"node\" === o)\n                    Object(c.each)(g, function (t) {\n                      t.refresh();\n                    });\n                  else if (v && \"combo\" === o) {\n                    var y = t.get(\"shapeFactory\"),\n                      m = s.type || \"circle\";\n                    (\n                      void 0 === s.animate || void 0 === e.animate\n                        ? null ===\n                            (r =\n                              null === (n = y[m]) || void 0 === n\n                                ? void 0\n                                : n.options) || void 0 === r\n                          ? void 0\n                          : r.animate\n                        : s.animate || e.animate\n                    )\n                      ? setTimeout(function () {\n                          if (t && !t.destroyed) {\n                            var e = t.getKeyShape();\n                            e &&\n                              !e.destroyed &&\n                              Object(c.each)(g, function (t) {\n                                t && !t.destroyed && t.refresh();\n                              });\n                          }\n                        }, 201)\n                      : Object(c.each)(g, function (t) {\n                          t.refresh();\n                        });\n                  }\n                }\n                i.emit(\"afterupdateitem\", { item: t, cfg: e });\n              }\n            }),\n            (t.prototype.updateCombo = function (t, e) {\n              var n,\n                r,\n                i = this,\n                o = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = o.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var a = t.getModel(),\n                  s = bt(a.collapsed ? [] : e, o);\n                t.set(\"bbox\", s), t.update({ x: s.x, y: s.y });\n                var u = t.get(\"shapeFactory\"),\n                  h = a.type || \"circle\";\n                (\n                  void 0 === a.animate\n                    ? null ===\n                        (r =\n                          null === (n = u[h]) || void 0 === n\n                            ? void 0\n                            : n.options) || void 0 === r\n                      ? void 0\n                      : r.animate\n                    : a.animate\n                )\n                  ? setTimeout(function () {\n                      if (t && !t.destroyed) {\n                        var e = t.getKeyShape();\n                        e &&\n                          !e.destroyed &&\n                          (t.getShapeCfg(a), i.updateComboEdges(t));\n                      }\n                    }, 201)\n                  : this.updateComboEdges(t);\n              }\n            }),\n            (t.prototype.updateComboEdges = function (t) {\n              for (var e = t.getEdges() || [], n = 0; n < e.length; n++) {\n                var r = e[n];\n                if (r && !r.destroyed) {\n                  var i = r.get(\"shapeFactory\"),\n                    o = r.getShapeCfg(r.getModel()),\n                    a = r.getContainer();\n                  a.clear();\n                  var s = i.draw(o.type, o, a);\n                  r.set(\"keyShape\", s),\n                    s.set(\"isKeyShape\", !0),\n                    s.set(\"draggable\", !0),\n                    r.setOriginStyle();\n                }\n              }\n            }),\n            (t.prototype.collapseCombo = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.hideItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  e.hideItem(t);\n                });\n            }),\n            (t.prototype.expandCombo = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.showItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  t.getModel().collapsed ? t.show() : e.showItem(t);\n                });\n            }),\n            (t.prototype.removeItem = function (t) {\n              var e = this,\n                n = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = n.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var r = Object(c.clone)(t.getModel());\n                n.emit(\"beforeremoveitem\", { item: r });\n                var i = \"\";\n                t.getType && (i = t.getType());\n                var o = n.get(\"\".concat(i, \"s\")),\n                  a = o.indexOf(t);\n                if ((a > -1 && o.splice(a, 1), \"edge\" === i)) {\n                  var s = n.get(\"v\".concat(i, \"s\")),\n                    u = s.indexOf(t);\n                  u > -1 && s.splice(u, 1);\n                }\n                var h = t.get(\"id\");\n                delete n.get(\"itemMap\")[h];\n                var l = n.get(\"comboTrees\"),\n                  f = t.get(\"id\");\n                if (\"node\" === i) {\n                  var d = t.getModel().comboId;\n                  if (l && d) {\n                    var p = l,\n                      g = !1;\n                    l.forEach(function (t) {\n                      g ||\n                        dt(t, function (t) {\n                          if (t.id === f && p) {\n                            var e = p.indexOf(t);\n                            return p.splice(e, 1), (g = !0), !1;\n                          }\n                          return (p = t.children), !0;\n                        });\n                    });\n                  }\n                  for (var v = (x = t.getEdges()).length - 1; v >= 0; v--)\n                    n.removeItem(x[v], !1);\n                  d && n.updateCombo(d);\n                } else if (\"combo\" === i) {\n                  var y,\n                    m = t.getModel().parentId,\n                    b = !1;\n                  (l || []).forEach(function (t) {\n                    b ||\n                      dt(t, function (t) {\n                        return t.id !== f || ((y = t), (b = !0), !1);\n                      });\n                  }),\n                    (y.removed = !0),\n                    y &&\n                      y.children &&\n                      y.children.forEach(function (t) {\n                        e.removeItem(t.id);\n                      });\n                  var x;\n                  for (v = (x = t.getEdges()).length; v >= 0; v--)\n                    n.removeItem(x[v], !1);\n                  m && n.updateCombo(m);\n                }\n                t.destroy(), n.emit(\"afterremoveitem\", { item: r });\n              }\n            }),\n            (t.prototype.setItemState = function (t, e, n) {\n              var r = this.graph,\n                i = e;\n              Object(c.isString)(n) && (i = \"\".concat(e, \":\").concat(n)),\n                (t.hasState(i) === n && n) ||\n                  (Object(c.isString)(n) && t.hasState(i)) ||\n                  (r.emit(\"beforeitemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }),\n                  t.setState(e, n),\n                  r.autoPaint(),\n                  r.emit(\"afteritemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }));\n            }),\n            (t.prototype.priorityState = function (t, e) {\n              var n = this.graph,\n                r = t;\n              Object(c.isString)(t) && (r = n.findById(t)),\n                this.setItemState(r, e, !1),\n                this.setItemState(r, e, !0);\n            }),\n            (t.prototype.clearItemStates = function (t, e) {\n              var n = this.graph;\n              Object(c.isString)(t) && (t = n.findById(t)),\n                n.emit(\"beforeitemstatesclear\", { item: t, states: e }),\n                t.clearStates(e),\n                n.emit(\"afteritemstatesclear\", { item: t, states: e });\n            }),\n            (t.prototype.refreshItem = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t)),\n                e.emit(\"beforeitemrefresh\", { item: t }),\n                t.refresh(),\n                e.emit(\"afteritemrefresh\", { item: t });\n            }),\n            (t.prototype.addCombos = function (t, e) {\n              var n = this,\n                r = this.graph;\n              (t || []).forEach(function (t) {\n                pt(t, function (t) {\n                  var r;\n                  return (\n                    e.forEach(function (e) {\n                      e.id === t.id &&\n                        ((e.children = t.children),\n                        (e.depth = t.depth),\n                        (r = e));\n                    }),\n                    r && n.addItem(\"combo\", r),\n                    !0\n                  );\n                });\n              });\n              var i = r.get(\"comboGroup\");\n              i && i.sort();\n            }),\n            (t.prototype.changeItemVisibility = function (t, e) {\n              var n = this,\n                r = this.graph;\n              if ((Object(c.isString)(t) && (t = r.findById(t)), t)) {\n                if (\n                  (r.emit(\"beforeitemvisibilitychange\", {\n                    item: t,\n                    visible: e,\n                  }),\n                  t.changeVisibility(e),\n                  t.getType && \"node\" === t.getType())\n                ) {\n                  var i = t.getEdges();\n                  Object(c.each)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                } else if (t.getType && \"combo\" === t.getType()) {\n                  var o = r.get(\"comboTrees\"),\n                    a = t.get(\"id\"),\n                    s = [],\n                    u = !1;\n                  (o || []).forEach(function (t) {\n                    u ||\n                      (t.children &&\n                        0 !== t.children.length &&\n                        dt(t, function (t) {\n                          return t.id !== a || ((s = t.children), (u = !0), !1);\n                        }));\n                  }),\n                    s &&\n                      (!e || (e && !t.getModel().collapsed)) &&\n                      s.forEach(function (t) {\n                        var i = r.findById(t.id);\n                        n.changeItemVisibility(i, e);\n                      });\n                  i = t.getEdges();\n                  Object(c.each)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                }\n                return (\n                  r.emit(\"afteritemvisibilitychange\", { item: t, visible: e }),\n                  t\n                );\n              }\n              console.warn(\"The item to be shown or hidden does not exist!\");\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Kt = null,\n        $t = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.cachedStates = { enabled: {}, disabled: {} }),\n              (this.destroyed = !1);\n          }\n          return (\n            (t.checkCache = function (t, e, n) {\n              if (n[e]) {\n                var r = n[e].indexOf(t);\n                r >= 0 && n[e].splice(r, 1);\n              }\n            }),\n            (t.cacheState = function (t, e, n) {\n              n[e] || (n[e] = []), n[e].push(t);\n            }),\n            (t.prototype.updateState = function (e, n, r) {\n              var i = this,\n                o = t.checkCache,\n                a = t.cacheState;\n              if (!e.destroyed) {\n                var s = this.cachedStates,\n                  c = s.enabled,\n                  u = s.disabled;\n                r ? (o(e, n, u), a(e, n, c)) : (o(e, n, c), a(e, n, u)),\n                  Kt && clearTimeout(Kt),\n                  (Kt = setTimeout(function () {\n                    (Kt = null), i.updateGraphStates();\n                  }, 16));\n              }\n            }),\n            (t.prototype.updateStates = function (t, e, n) {\n              var r = this;\n              Object(c.isString)(e)\n                ? this.updateState(t, e, n)\n                : e.forEach(function (e) {\n                    r.updateState(t, e, n);\n                  });\n            }),\n            (t.prototype.updateGraphStates = function () {\n              var t = this.graph.get(\"states\"),\n                e = this.cachedStates;\n              Object(c.each)(e.disabled, function (e, n) {\n                t[n] &&\n                  (t[n] = t[n].filter(function (t) {\n                    return e.indexOf(t) < 0 && !e.destroyed;\n                  }));\n              }),\n                Object(c.each)(e.enabled, function (e, n) {\n                  if (t[n]) {\n                    var r = {};\n                    t[n].forEach(function (t) {\n                      t.destroyed || (r[t.get(\"id\")] = !0);\n                    }),\n                      e.forEach(function (e) {\n                        if (!e.destroyed) {\n                          var i = e.get(\"id\");\n                          r[i] || ((r[i] = !0), t[n].push(e));\n                        }\n                      });\n                  } else t[n] = e;\n                }),\n                this.graph.emit(\"graphstatechange\", { states: t }),\n                (this.cachedStates = { enabled: {}, disabled: {} });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.cachedStates = null),\n                Kt && clearTimeout(Kt),\n                (Kt = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Qt = n(22),\n        Jt = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                if (\"\\\\\" === t.charAt(0)) return t.slice(1);\n                var r = e[n];\n                return 0 === r && (r = \"0\"), r || \"\";\n              })\n            : t;\n        },\n        te = function (t) {\n          var e = [];\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \".concat(t.length),\n            );\n          for (var n = 0, r = t; n < r.length; n++) {\n            var i = r[n],\n              o = i.x,\n              a = i.y;\n            e.push(o), e.push(a);\n          }\n          var s = Object(Qt.a)(e);\n          return s.unshift([\"M\", t[0].x, t[0].y]), s;\n        },\n        ee = function (t, e, n, r) {\n          void 0 === n && (n = 0), void 0 === r && (r = 0);\n          var i = { x: (1 - n) * t.x + n * e.x, y: (1 - n) * t.y + n * e.y },\n            o = [0, 0];\n          g.c.normalize(o, [e.x - t.x, e.y - t.y]),\n            (o && (o[0] || o[1])) || (o = [0, 0]);\n          var a = [-o[1] * r, o[0] * r];\n          return (i.x += a[0]), (i.y += a[1]), i;\n        },\n        ne = function (t, e) {\n          var n = t.length;\n          if (!n) return \"\";\n          for (var r = \"\", i = 0; i < n; i++) {\n            var o = t[i];\n            r += Jt(0 === i ? \"M{x} {y}\" : \"L{x} {y}\", o);\n          }\n          return e && (r += \"Z\"), r;\n        },\n        re = function (t) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              if (\"A\" !== t[0])\n                for (var n = 1; n < t.length; n += 2) e.push([t[n], t[n + 1]]);\n              else {\n                var r = t.length;\n                e.push([t[r - 2], t[r - 1]]);\n              }\n            }),\n            e\n          );\n        },\n        ie = function (t) {\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \".concat(t.length),\n            );\n          var e = t[0],\n            n = t[1],\n            r = t[t.length - 1],\n            i = t[t.length - 2];\n          t.unshift(r), t.unshift(i), t.push(e), t.push(n);\n          for (var o = [], a = 1; a < t.length - 2; a += 1) {\n            var s = t[a - 1].x,\n              c = t[a - 1].y,\n              u = t[a].x,\n              h = t[a].y,\n              l = t[a + 1].x,\n              f = t[a + 1].y,\n              d = u + (l - s) / 6,\n              p = h + (f - c) / 6,\n              g = l - ((a !== t.length - 2 ? t[a + 2].x : l) - u) / 6,\n              v = f - ((a !== t.length - 2 ? t[a + 2].y : f) - h) / 6;\n            o.push([\"C\", d, p, g, v, l, f]);\n          }\n          return o.unshift([\"M\", r.x, r.y]), o;\n        },\n        oe = function (t, e) {\n          return g.c.scale([0, 0], g.c.normalize([0, 0], t), e);\n        },\n        ae = function (t, e) {\n          var n = [t[1] - e[1], e[0] - t[0]],\n            r = Math.sqrt(n[0] * n[0] + n[1] * n[1]);\n          if (0 === r) throw new Error(\"p0 should not be equal to p1\");\n          return [n[0] / r, n[1] / r];\n        },\n        se = function (t, e) {\n          return [e[0] - t[0], e[1] - t[1]];\n        };\n      function ce(t, e) {\n        if (!t || t.length < 1) return \"\";\n        if (1 === t.length)\n          return (function (t) {\n            var n = [t[0][0], t[0][1] - e],\n              r = [t[0][0], t[0][1] + e];\n            return \"M \"\n              .concat(n, \" A \")\n              .concat(e, \",\")\n              .concat(e, \",0,0,0,\")\n              .concat(r, \" A \")\n              .concat(e, \",\")\n              .concat(e, \",0,0,0,\")\n              .concat(n);\n          })(t);\n        if (2 === t.length)\n          return (function (t) {\n            var n = g.c.scale([0, 0], ae(t[0], t[1]), e),\n              r = g.c.scale([0, 0], n, -1),\n              i = g.c.add([0, 0], t[0], n),\n              o = g.c.add([0, 0], t[1], n),\n              a = g.c.add([0, 0], t[1], r),\n              s = g.c.add([0, 0], t[0], r);\n            return \"M \"\n              .concat(i, \" L \")\n              .concat(o, \" A \")\n              .concat([e, e, \"0,0,0\", a].join(\",\"), \" L \")\n              .concat(s, \" A \")\n              .concat([e, e, \"0,0,0\", i].join(\",\"));\n          })(t);\n        for (var n = new Array(t.length), r = 0; r < n.length; ++r) {\n          var i = 0 === r ? t[t.length - 1] : t[r - 1],\n            o = t[r],\n            a = g.c.scale([0, 0], ae(i, o), e);\n          n[r] = [g.c.add([0, 0], i, a), g.c.add([0, 0], o, a)];\n        }\n        var s = \"A \".concat([e, e, \"0,0,0,\"].join(\",\"));\n        return (n = n.map(function (t, e) {\n          var r = \"\";\n          return (\n            0 === e && (r = \"M \".concat(n[n.length - 1][1], \" \")),\n            (r += \"\".concat(s + t[0], \" L \").concat(t[1]))\n          );\n        })).join(\" \");\n      }\n      function ue(t, e) {\n        var n,\n          r,\n          i,\n          o = t.length;\n        if (!t || o < 1) return \"\";\n        if (1 === o)\n          return (\n            (r = [(n = t)[0][0], n[0][1] - e]),\n            (i = [n[0][0], n[0][1] + e]),\n            \"M \"\n              .concat(r, \" A \")\n              .concat([e, e, \"0,0,0\", i].join(\",\"), \" A \")\n              .concat([e, e, \"0,0,0\", r].join(\",\"))\n          );\n        if (2 === o)\n          return (function (t) {\n            var n = se(t[0], t[1]),\n              r = oe(n, e),\n              i = g.c.add([0, 0], t[0], g.c.scale([0, 0], r, -1)),\n              o = g.c.add([0, 0], t[1], r),\n              a = 1.2 * e,\n              s = oe(g.c.normalize([0, 0], n), a),\n              c = g.c.scale([0, 0], s, -1),\n              u = g.c.add([0, 0], i, c),\n              h = g.c.add([0, 0], o, c),\n              l = g.c.add([0, 0], i, s);\n            return \"M \"\n              .concat(i, \" C \")\n              .concat([u, h, o].join(\",\"), \" S \")\n              .concat([l, i].join(\",\"), \" Z\");\n          })(t);\n        for (\n          var a = t.map(function (e, n) {\n              var r = t[(n + 1) % o];\n              return { p: e, v: g.c.normalize([0, 0], se(e, r)) };\n            }),\n            s = 0;\n          s < a.length;\n          ++s\n        ) {\n          var c = s > 0 ? s - 1 : o - 1,\n            u = g.c.normalize(\n              [0, 0],\n              g.c.add([0, 0], a[c].v, g.c.scale([0, 0], a[s].v, -1)),\n            );\n          a[s].p = g.c.add([0, 0], a[s].p, g.c.scale([0, 0], u, e));\n        }\n        return a.map(function (t) {\n          var e = t.p;\n          return { x: e[0], y: e[1] };\n        });\n      }\n      var he = function (t, e, n) {\n          return (t.y - n.y) * (e.x - n.x) - (t.x - n.x) * (e.y - n.y);\n        },\n        le = function (t) {\n          var e = t.map(function (t) {\n            return { x: t.getModel().x, y: t.getModel().y };\n          });\n          if (\n            (e.sort(function (t, e) {\n              return t.x === e.x ? t.y - e.y : t.x - e.x;\n            }),\n            1 === e.length)\n          )\n            return e;\n          for (var n = [], r = 0; r < e.length; r++) {\n            for (\n              ;\n              n.length >= 2 && he(n[n.length - 2], n[n.length - 1], e[r]) <= 0;\n\n            )\n              n.pop();\n            n.push(e[r]);\n          }\n          var i = [];\n          for (r = e.length - 1; r >= 0; r--) {\n            for (\n              ;\n              i.length >= 2 && he(i[i.length - 2], i[i.length - 1], e[r]) <= 0;\n\n            )\n              i.pop();\n            i.push(e[r]);\n          }\n          return i.pop(), n.pop(), n.concat(i);\n        },\n        fe = {\n          maxRoutingIterations: 100,\n          maxMarchingIterations: 100,\n          pixelGroupSize: 2,\n          edgeR0: 10,\n          edgeR1: 10,\n          nodeR0: 5,\n          nodeR1: 10,\n          morphBuffer: 5,\n          threshold: 0.001,\n          skip: 16,\n          nodeInfluenceFactor: 1,\n          edgeInfluenceFactor: 1,\n          negativeNodeInfluenceFactor: -0.5,\n        };\n      function de(t, e, n) {\n        var r = !1,\n          i = function (t, n) {\n            return e.cells[t + n * e.width];\n          },\n          o = function (t, e) {\n            var r = 0;\n            return (\n              i(t - 1, e - 1) >= n && (r += 1),\n              i(t, e - 1) > n && (r += 2),\n              i(t - 1, e) > n && (r += 4),\n              i(t, e) > n && (r += 8),\n              r\n            );\n          },\n          a = function (n, r) {\n            for (var i, a, s = n, c = r, u = 0; u < e.width * e.height; u++) {\n              if (\n                ((i = s),\n                (a = c),\n                t.findIndex(function (t) {\n                  return t.x === s && t.y === c;\n                }) > -1)\n              ) {\n                if (t[0].x === s && t[0].y === c) return !0;\n              } else t.push({ x: s, y: c });\n              var h = o(s, c);\n              switch (h) {\n                case -1:\n                  return console.warn(\"Marched out of bounds\"), !0;\n                case 0:\n                case 3:\n                case 2:\n                case 7:\n                  s++;\n                  break;\n                case 12:\n                case 14:\n                case 4:\n                  s--;\n                  break;\n                case 6:\n                  0 === i && (-1 === a ? (s -= 1) : (s += 1));\n                  break;\n                case 1:\n                case 13:\n                case 5:\n                  c--;\n                  break;\n                case 9:\n                  1 === i && (0 === a ? (c -= 1) : (c += 1));\n                  break;\n                case 10:\n                case 8:\n                case 11:\n                  c++;\n                  break;\n                default:\n                  return (\n                    console.warn(\"Marching squares invalid state: \".concat(h)),\n                    !0\n                  );\n              }\n            }\n          };\n        this.march = function () {\n          for (var t = 0; t < e.width && !r; t += 1)\n            for (var s = 0; s < e.height && !r; s += 1)\n              i(t, s) > n && 15 !== o(t, s) && (r = a(t, s));\n          return r;\n        };\n      }\n      var pe = function (t, e) {\n        var n = Number.POSITIVE_INFINITY,\n          r = null;\n        return (\n          t.forEach(function (t) {\n            var i = q(t, e);\n            i >= 0 && i < n && ((r = t), (n = i));\n          }),\n          r\n        );\n      };\n      function ge(t, e, n, r, i) {\n        var o = (function (t, e, n) {\n          var r = null,\n            i = Number.POSITIVE_INFINITY;\n          return (\n            e.forEach(function (e) {\n              var o = { x: t.getModel().x, y: t.getModel().y },\n                a = { x: e.getModel().x, y: e.getModel().y },\n                s = G(o, a),\n                c = new Y(o.x, o.y, a.x, a.y),\n                u = n.reduce(function (t, e) {\n                  return q(e, c) > 0 ? t + 1 : t;\n                }, 0);\n              s * Math.pow(u + 1, 2) < i &&\n                ((r = e), (i = s * Math.pow(u + 1, 2)));\n            }),\n            r\n          );\n        })(t, n, e);\n        if (null === o) return [];\n        return (function (t) {\n          for (var n = []; t.length > 0; ) {\n            var r = t.pop();\n            if (0 === t.length) {\n              n.push(r);\n              break;\n            }\n            var i = t.pop(),\n              o = new Y(r.x1, r.y1, i.x2, i.y2);\n            pe(e, o) ? (n.push(r), t.push(i)) : t.push(o);\n          }\n          return n;\n        })(\n          (function (t, e, n, r) {\n            var i = [],\n              o = [];\n            o.push(t);\n            for (\n              var a = !0,\n                s = 0,\n                c = function (t, e) {\n                  var n = !1;\n                  return (\n                    e.forEach(function (e) {\n                      n ||\n                        ((U(t, { x: e.x1, y: e.y1 }) ||\n                          U(t, { x: e.x2, y: e.y2 })) &&\n                          (n = !0));\n                    }),\n                    n\n                  );\n                },\n                u = function (t, e) {\n                  for (var n = 0, r = e; n < r.length; n++) {\n                    var i = r[n].getBBox(),\n                      o = [\n                        [i.x, i.y],\n                        [i.x + i.width, i.y],\n                        [i.x, i.y + i.height],\n                        [i.x + i.width, i.y + i.height],\n                      ];\n                    if (_(o, t.x, t.y)) return !0;\n                  }\n                  return !1;\n                };\n              a && s < n;\n\n            ) {\n              a = !1;\n              for (\n                var h = function () {\n                  var t = o.pop(),\n                    n = pe(e, t);\n                  if (n) {\n                    var h = W(n, t),\n                      l = h[0];\n                    if (2 === h[1]) {\n                      var f = function (s) {\n                        for (\n                          var h = r,\n                            f = me(n, h, l, s),\n                            d = c(f, o) || c(f, i),\n                            p = u(f, e);\n                          !d && p && h >= 1;\n\n                        )\n                          (f = me(n, (h /= 1.5), l, s)),\n                            (d = c(f, o) || c(f, i)),\n                            (p = u(f, e));\n                        !f ||\n                          d ||\n                          (s && p) ||\n                          (o.push(new Y(t.x1, t.y1, f.x, f.y)),\n                          o.push(new Y(f.x, f.y, t.x2, t.y2)),\n                          (a = !0));\n                      };\n                      f(!0), a || f(!1);\n                    }\n                  }\n                  a || i.push(t), (s += 1);\n                };\n                !a && o.length;\n\n              )\n                h();\n            }\n            for (; o.length; ) i.push(o.pop());\n            return i;\n          })(\n            new Y(\n              t.getModel().x,\n              t.getModel().y,\n              o.getModel().x,\n              o.getModel().y,\n            ),\n            e,\n            r,\n            i,\n          ),\n        );\n      }\n      var ve = function (t, e, n) {\n        var r = Object.assign(fe, n),\n          i = V(\n            t.map(function (t) {\n              return { x: t.getModel().x, y: t.getModel().y };\n            }),\n          );\n        t = t.sort(function (t, e) {\n          return (\n            G({ x: t.getModel().x, y: t.getModel().y }, i) -\n            G({ x: e.getModel().x, y: e.getModel().y }, i)\n          );\n        });\n        var o = [],\n          a = [];\n        t.forEach(function (t) {\n          ge(t, e, o, r.maxRoutingIterations, r.morphBuffer).forEach(\n            function (t) {\n              a.push(t);\n            },\n          ),\n            o.push(t);\n        });\n        for (\n          var s,\n            c,\n            u,\n            h,\n            l,\n            f = (function (t, e, n) {\n              var r = {\n                  minX: Number.POSITIVE_INFINITY,\n                  minY: Number.POSITIVE_INFINITY,\n                  maxX: Number.NEGATIVE_INFINITY,\n                  maxY: Number.NEGATIVE_INFINITY,\n                  width: 0,\n                  height: 0,\n                  x: 0,\n                  y: 0,\n                },\n                i = [];\n              t.forEach(function (t) {\n                i.push(t.getBBox());\n              }),\n                e.forEach(function (t) {\n                  i.push(t.getBBox());\n                });\n              for (var o = 0, a = i; o < a.length; o++) {\n                var s = a[o];\n                (r.minX = (s.minX < r.minX ? s.minX : r.minX) - n),\n                  (r.minY = (s.minY < r.minY ? s.minY : r.minY) - n),\n                  (r.maxX = (s.maxX > r.maxX ? s.maxX : r.maxX) + n),\n                  (r.maxY = (s.maxY > r.maxY ? s.maxY : r.maxY) + n);\n              }\n              return (\n                (r.width = r.maxX - r.minX),\n                (r.height = r.maxY - r.minY),\n                (r.x = r.minX),\n                (r.y = r.minY),\n                r\n              );\n            })(t, a, r.nodeR0),\n            d =\n              ((s = f.width),\n              (c = f.height),\n              (u = r.pixelGroupSize),\n              (h = Math.ceil(s / u)),\n              (l = Math.ceil(c / u)),\n              {\n                cells: new Float32Array(Math.max(0, h * l)).fill(0),\n                width: h,\n                height: l,\n              }),\n            p = [],\n            g = [],\n            v = 0;\n          v < r.maxMarchingIterations;\n          v++\n        )\n          if (\n            (ye(t, e, a, f, d, r),\n            (g = []),\n            new de((p = []), d, r.threshold).march())\n          ) {\n            var y = p.map(function (t) {\n              return {\n                x: Math.round(t.x * r.pixelGroupSize + f.minX),\n                y: Math.round(t.y * r.pixelGroupSize + f.minY),\n              };\n            });\n            if (y) {\n              var m = y.length;\n              if (r.skip > 1)\n                for (m = Math.floor(y.length / r.skip); m < 3 && r.skip > 1; )\n                  (r.skip -= 1), (m = Math.floor(y.length / r.skip));\n              for (var b = 0, x = 0; x < m; x += 1, b += r.skip)\n                g.push({ x: y[b].x, y: y[b].y });\n            }\n            if (\n              g &&\n              (function () {\n                for (var e = 0, n = t; e < n.length; e++) {\n                  var r = n[e],\n                    i = g.map(function (t) {\n                      return [t.x, t.y];\n                    });\n                  if (!_(i, r.getBBox().centerX, r.getBBox().centerY))\n                    return !1;\n                }\n                return !0;\n              })()\n            )\n              return g;\n            if (((r.threshold *= 0.9), v <= 0.5 * r.maxMarchingIterations))\n              (r.memberInfluenceFactor *= 1.2), (r.edgeInfluenceFactor *= 1.2);\n            else {\n              if (!(0 !== r.nonMemberInfluenceFactor && e.length > 0)) break;\n              r.nonMemberInfluenceFactor *= 0.8;\n            }\n          }\n        return g;\n      };\n      function ye(t, e, n, r, i, o) {\n        function a(t, e) {\n          var n = Math.floor((t - e) / o.pixelGroupSize);\n          return n < 0 ? 0 : n;\n        }\n        function s(t, e) {\n          return t * o.pixelGroupSize + e;\n        }\n        var c = (o.nodeR0 - o.nodeR1) * (o.nodeR0 - o.nodeR1),\n          u = (o.edgeR0 - o.edgeR1) * (o.edgeR0 - o.edgeR1),\n          h = function (t, e) {\n            return [\n              Math.min(a(t.minX, e + r.minX), i.width),\n              Math.min(a(t.minY, e + r.minY), i.height),\n              Math.min(a(t.maxX, -e + r.minX), i.width),\n              Math.min(a(t.maxY, -e + r.minY), i.height),\n            ];\n          },\n          l = function (t, e) {\n            for (\n              var n = t.getBBox(),\n                a = h(n, o.nodeR1),\n                c = a[0],\n                u = a[1],\n                l = a[2],\n                f = a[3],\n                d = u;\n              d < f;\n              d += 1\n            )\n              for (var p = c; p < l; p += 1)\n                if (!(e < 0 && i[p + d * i.width] <= 0)) {\n                  var g = s(p, r.minX),\n                    v = s(d, r.minY),\n                    y = Z(\n                      { x: g, y: v },\n                      {\n                        x: n.minX,\n                        y: n.minY,\n                        width: n.width,\n                        height: n.height,\n                      },\n                    );\n                  if (y < Math.pow(o.nodeR1, 2)) {\n                    var m = Math.sqrt(y) - o.nodeR1;\n                    i.cells[p + d * i.width] += e * m * m;\n                  }\n                }\n          };\n        o.nodeInfluenceFactor &&\n          t.forEach(function (t) {\n            l(t, o.nodeInfluenceFactor / c);\n          }),\n          o.edgeInfluenceFactor &&\n            n.forEach(function (t) {\n              !(function (t, e) {\n                for (\n                  var n = t.getBBox(),\n                    a = h(n, o.edgeR1),\n                    c = a[0],\n                    u = a[1],\n                    l = a[2],\n                    f = a[3],\n                    d = u;\n                  d < f;\n                  d += 1\n                )\n                  for (var p = c; p < l; p += 1)\n                    if (!(e < 0 && i.cells[p + d * i.width] <= 0)) {\n                      var g = s(p, r.minX),\n                        v = s(d, r.minY),\n                        y = H({ x: g, y: v }, t);\n                      if (y < Math.pow(o.edgeR1, 2)) {\n                        var m = Math.sqrt(y) - o.edgeR1;\n                        i.cells[p + d * i.width] += e * m * m;\n                      }\n                    }\n              })(t, o.edgeInfluenceFactor / u);\n            }),\n          o.negativeNodeInfluenceFactor &&\n            e.forEach(function (t) {\n              l(t, o.negativeNodeInfluenceFactor / c);\n            });\n      }\n      function me(t, e, n, r) {\n        var i = t.getBBox(),\n          o = n[0],\n          a = n[1],\n          s = n[2],\n          c = n[3],\n          u = {\n            topLeft: { x: i.minX - e, y: i.minY - e },\n            topRight: { x: i.maxX + e, y: i.minY - e },\n            bottomLeft: { x: i.minX - e, y: i.maxY + e },\n            bottomRight: { x: i.maxX + e, y: i.maxY + e },\n          },\n          h = i.height * i.width;\n        function l(t, e) {\n          return i.width * (0.5 * (t.y - i.minY + (e.y - i.minY)));\n        }\n        if (a)\n          return o\n            ? r\n              ? u.topLeft\n              : u.bottomRight\n            : s\n            ? r\n              ? u.bottomLeft\n              : u.topRight\n            : l(a, c) < 0.5 * h\n            ? a.y > c.y\n              ? r\n                ? u.topLeft\n                : u.bottomRight\n              : r\n              ? u.topRight\n              : u.bottomLeft\n            : a.y < c.y\n            ? r\n              ? u.bottomLeft\n              : u.topRight\n            : r\n            ? u.bottomRight\n            : u.topLeft;\n        if (c) {\n          if (o) return r ? u.topRight : u.bottomLeft;\n          if (s) return r ? u.bottomRight : u.topLeft;\n        }\n        return l(o, s) < 0.5 * h\n          ? o.x > s.x\n            ? r\n              ? u.topLeft\n              : u.bottomRight\n            : r\n            ? u.bottomLeft\n            : u.topRight\n          : o.x < s.x\n          ? r\n            ? u.topRight\n            : u.bottomLeft\n          : r\n          ? u.bottomRight\n          : u.topLeft;\n      }\n      var be = (function () {\n          function t(t, e) {\n            (this.cfg = Object(c.deepMix)(this.getDefaultCfg(), e)),\n              (this.graph = t),\n              (this.id = this.cfg.id),\n              (this.group = this.cfg.group),\n              (this.members = this.cfg.members.map(function (e) {\n                return Object(c.isString)(e) ? t.findById(e) : e;\n              })),\n              (this.nonMembers = this.cfg.nonMembers.map(function (e) {\n                return Object(c.isString)(e) ? t.findById(e) : e;\n              })),\n              this.setPadding(),\n              this.setType(),\n              (this.path = this.calcPath(this.members, this.nonMembers)),\n              this.render();\n          }\n          return (\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                id: \"g6-hull\",\n                type: \"round-convex\",\n                members: [],\n                nonMembers: [],\n                style: { fill: \"lightblue\", stroke: \"blue\", opacity: 0.2 },\n                padding: 10,\n              };\n            }),\n            (t.prototype.setPadding = function () {\n              var t =\n                this.members.length &&\n                this.members[0].getKeyShape().getCanvasBBox().width / 2;\n              (this.padding =\n                this.cfg.padding > 0 ? this.cfg.padding + t : 10 + t),\n                (this.cfg.bubbleCfg = {\n                  nodeR0: this.padding - t,\n                  nodeR1: this.padding - t,\n                  morphBuffer: this.padding - t,\n                });\n            }),\n            (t.prototype.setType = function () {\n              (this.type = this.cfg.type),\n                this.members.length < 3 && (this.type = \"round-convex\"),\n                \"round-convex\" !== this.type &&\n                  \"smooth-convex\" !== this.type &&\n                  \"bubble\" !== this.type &&\n                  (console.warn(\n                    \"The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default.\",\n                  ),\n                  (this.type = \"round-convex\"));\n            }),\n            (t.prototype.calcPath = function (t, e) {\n              var n, r, i;\n              switch (this.type) {\n                case \"round-convex\":\n                  (i = ce(\n                    (n = le(t)).map(function (t) {\n                      return [t.x, t.y];\n                    }),\n                    this.padding,\n                  )),\n                    (r = Object(Qt.b)(i));\n                  break;\n                case \"smooth-convex\":\n                  2 === (n = le(t)).length\n                    ? ((i = ce(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = Object(Qt.b)(i)))\n                    : n.length > 2 &&\n                      ((i = ue(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = ie(i)));\n                  break;\n                case \"bubble\":\n                  r = (n = ve(t, e, this.cfg.bubbleCfg)).length >= 2 && ie(n);\n              }\n              return r;\n            }),\n            (t.prototype.render = function () {\n              this.group.addShape(\"path\", {\n                attrs: Object(f.a)({ path: this.path }, this.cfg.style),\n                id: this.id,\n                name: this.cfg.id,\n              }),\n                this.group.toBack();\n            }),\n            (t.prototype.addMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t)),\n                  this.members.push(t);\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 && this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.addNonMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t)),\n                  this.nonMembers.push(t);\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 && this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.removeMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t));\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.removeNonMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t));\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.updateData = function (t, e) {\n              var n = this;\n              this.group.findById(this.id).remove(),\n                t &&\n                  (this.members = t.map(function (t) {\n                    return Object(c.isString)(t) ? n.graph.findById(t) : t;\n                  })),\n                e &&\n                  (this.nonMembers = e.map(function (t) {\n                    return Object(c.isString)(t) ? n.graph.findById(t) : t;\n                  })),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.updateStyle = function (t) {\n              this.group.findById(this.id).attr(Object(f.a)({}, t));\n            }),\n            (t.prototype.updateCfg = function (t) {\n              var e = this;\n              (this.cfg = Object(c.deepMix)(this.cfg, t)),\n                (this.id = this.cfg.id),\n                (this.group = this.cfg.group),\n                t.members &&\n                  (this.members = this.cfg.members.map(function (t) {\n                    return Object(c.isString)(t) ? e.graph.findById(t) : t;\n                  })),\n                t.nonMembers &&\n                  (this.nonMembers = this.cfg.nonMembers.map(function (t) {\n                    return Object(c.isString)(t) ? e.graph.findById(t) : t;\n                  })),\n                this.setPadding(),\n                this.setType(),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.contain = function (t) {\n              var e,\n                n,\n                r = this,\n                i = (e = Object(c.isString)(t)\n                  ? this.graph.findById(t)\n                  : t).getKeyShape();\n              if (\"path\" === e.get(\"type\")) n = re(i.attr(\"path\"));\n              else {\n                var o = i.getCanvasBBox();\n                n = [\n                  [o.minX, o.minY],\n                  [o.maxX, o.minY],\n                  [o.maxX, o.maxY],\n                  [o.minX, o.maxY],\n                ];\n              }\n              return (\n                (n = n.map(function (t) {\n                  var e = r.graph.getPointByCanvas(t[0], t[1]);\n                  return [e.x, e.y];\n                })),\n                F(n, re(this.path))\n              );\n            }),\n            (t.prototype.destroy = function () {\n              this.group.remove(), (this.cfg = null);\n            }),\n            t\n          );\n        })(),\n        xe = g.a.transform,\n        we = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.cfg = Object(c.deepMix)(n.getDefaultCfg(), e)),\n              n.init(),\n              (n.animating = !1),\n              (n.destroyed = !1),\n              n.cfg.enabledStack &&\n                ((n.undoStack = new v.Stack(n.cfg.maxStep)),\n                (n.redoStack = new v.Stack(n.cfg.maxStep))),\n              n\n            );\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.init = function () {\n              this.initCanvas();\n              var t = new Nt(this),\n                e = new Ot(this),\n                n = new Zt(this),\n                r = new $t(this);\n              this.set({\n                viewController: t,\n                modeController: e,\n                itemController: n,\n                stateController: r,\n              }),\n                this.initLayoutController(),\n                this.initEventController(),\n                this.initGroups(),\n                this.initPlugins(),\n                (this.timeIndex = Object(p.requestAnimationFrame)(\n                  this.onTick.bind(this),\n                ));\n            }),\n            (e.prototype.initGroups = function () {\n              var t = this.get(\"canvas\"),\n                e = this.get(\"canvas\").get(\"el\").id,\n                n = t.addGroup({\n                  id: \"\".concat(e, \"-root\"),\n                  className: nt.rootContainerClassName,\n                });\n              if (this.get(\"groupByTypes\")) {\n                var r = n.addGroup({\n                    id: \"\".concat(e, \"-edge\"),\n                    className: nt.edgeContainerClassName,\n                  }),\n                  i = n.addGroup({\n                    id: \"\".concat(e, \"-node\"),\n                    className: nt.nodeContainerClassName,\n                  }),\n                  o = n.addGroup({\n                    id: \"\".concat(e, \"-combo\"),\n                    className: nt.comboContainerClassName,\n                  });\n                o.toBack(),\n                  this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n              }\n              var a = n.addGroup({\n                id: \"\".concat(e, \"-delegate\"),\n                className: nt.delegateContainerClassName,\n              });\n              this.set({ delegateGroup: a }), this.set(\"group\", n);\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                container: void 0,\n                width: void 0,\n                height: void 0,\n                renderer: \"canvas\",\n                modes: {},\n                plugins: [],\n                data: {},\n                fitViewPadding: 10,\n                minZoom: 0.2,\n                maxZoom: 10,\n                event: !0,\n                groupByTypes: !0,\n                directed: !1,\n                autoPaint: !0,\n                nodes: [],\n                edges: [],\n                combos: [],\n                vedges: [],\n                itemMap: {},\n                linkCenter: !1,\n                defaultNode: {},\n                defaultEdge: {},\n                nodeStateStyles: {},\n                edgeStateStyles: {},\n                states: {},\n                animate: !1,\n                animateCfg: {\n                  onFrame: void 0,\n                  duration: 500,\n                  easing: \"easeLinear\",\n                },\n                callback: void 0,\n                enabledStack: !1,\n                maxStep: 10,\n                tooltips: [],\n              };\n            }),\n            (e.prototype.set = function (t, e) {\n              return (\n                Object(c.isPlainObject)(t)\n                  ? (this.cfg = Object(f.a)(Object(f.a)({}, this.cfg), t))\n                  : (this.cfg[t] = e),\n                this\n              );\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.getGroup = function () {\n              return this.get(\"group\");\n            }),\n            (e.prototype.getContainer = function () {\n              return this.get(\"container\");\n            }),\n            (e.prototype.getMinZoom = function () {\n              return this.get(\"minZoom\");\n            }),\n            (e.prototype.setMinZoom = function (t) {\n              return this.set(\"minZoom\", t);\n            }),\n            (e.prototype.getMaxZoom = function () {\n              return this.get(\"maxZoom\");\n            }),\n            (e.prototype.setMaxZoom = function (t) {\n              return this.set(\"maxZoom\", t);\n            }),\n            (e.prototype.getWidth = function () {\n              return this.get(\"width\");\n            }),\n            (e.prototype.getHeight = function () {\n              return this.get(\"height\");\n            }),\n            (e.prototype.clearItemStates = function (t, e) {\n              Object(c.isString)(t) && (t = this.findById(t));\n              var n = this.get(\"itemController\");\n              e || (e = t.get(\"states\")),\n                n.clearItemStates(t, e),\n                this.get(\"stateController\").updateStates(t, e, !1);\n            }),\n            (e.prototype.node = function (t) {\n              \"function\" == typeof t && this.set(\"nodeMapper\", t);\n            }),\n            (e.prototype.edge = function (t) {\n              \"function\" == typeof t && this.set(\"edgeMapper\", t);\n            }),\n            (e.prototype.combo = function (t) {\n              \"function\" == typeof t && this.set(\"comboMapper\", t);\n            }),\n            (e.prototype.findById = function (t) {\n              return this.get(\"itemMap\")[t];\n            }),\n            (e.prototype.find = function (t, e) {\n              var n,\n                r = this.get(\"\".concat(t, \"s\"));\n              return (\n                Object(c.each)(r, function (t, r) {\n                  if (e(t, r)) return (n = t);\n                }),\n                n\n              );\n            }),\n            (e.prototype.findAll = function (t, e) {\n              var n = [];\n              return (\n                Object(c.each)(this.get(\"\".concat(t, \"s\")), function (t, r) {\n                  e(t, r) && n.push(t);\n                }),\n                n\n              );\n            }),\n            (e.prototype.findAllByState = function (t, e) {\n              return this.findAll(t, function (t) {\n                return t.hasState(e);\n              });\n            }),\n            (e.prototype.translate = function (t, e) {\n              var n = this.get(\"group\"),\n                r = Object(c.clone)(n.getMatrix());\n              r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                (r = xe(r, [[\"t\", t, e]])),\n                n.setMatrix(r),\n                this.emit(\"viewportchange\", {\n                  action: \"translate\",\n                  matrix: n.getMatrix(),\n                }),\n                this.autoPaint();\n            }),\n            (e.prototype.moveTo = function (t, e) {\n              var n = this.get(\"group\");\n              T(n, { x: t, y: e }),\n                this.emit(\"viewportchange\", {\n                  action: \"move\",\n                  matrix: n.getMatrix(),\n                });\n            }),\n            (e.prototype.fitView = function (t) {\n              t && this.set(\"fitViewPadding\", t),\n                this.get(\"viewController\").fitView(),\n                this.autoPaint();\n            }),\n            (e.prototype.fitCenter = function () {\n              this.get(\"viewController\").fitCenter(), this.autoPaint();\n            }),\n            (e.prototype.addBehaviors = function (t, e) {\n              return (\n                this.get(\"modeController\").manipulateBehaviors(t, e, !0), this\n              );\n            }),\n            (e.prototype.removeBehaviors = function (t, e) {\n              return (\n                this.get(\"modeController\").manipulateBehaviors(t, e, !1), this\n              );\n            }),\n            (e.prototype.updateBehavior = function (t, e, n) {\n              return this.get(\"modeController\").updateBehavior(t, e, n), this;\n            }),\n            (e.prototype.zoom = function (t, e) {\n              var n = this.get(\"group\"),\n                r = Object(c.clone)(n.getMatrix()),\n                i = this.get(\"minZoom\"),\n                o = this.get(\"maxZoom\");\n              r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                (r = xe(\n                  r,\n                  e\n                    ? [\n                        [\"t\", -e.x, -e.y],\n                        [\"s\", t, t],\n                        [\"t\", e.x, e.y],\n                      ]\n                    : [[\"s\", t, t]],\n                )),\n                (i && r[0] < i) ||\n                  (o && r[0] > o) ||\n                  (n.setMatrix(r),\n                  this.emit(\"viewportchange\", { action: \"zoom\", matrix: r }),\n                  this.autoPaint());\n            }),\n            (e.prototype.zoomTo = function (t, e) {\n              var n = t / this.getZoom();\n              this.zoom(n, e);\n            }),\n            (e.prototype.focusItem = function (t, e, n) {\n              var r = this.get(\"viewController\"),\n                i = !1;\n              e ? (i = !0) : void 0 === e && (i = this.get(\"animate\"));\n              var o = {};\n              n ? (o = n) : void 0 === n && (o = this.get(\"animateCfg\")),\n                r.focus(t, i, o),\n                this.autoPaint();\n            }),\n            (e.prototype.autoPaint = function () {\n              this.get(\"autoPaint\") && this.paint();\n            }),\n            (e.prototype.paint = function () {\n              this.emit(\"beforepaint\"),\n                this.get(\"canvas\").draw(),\n                this.emit(\"afterpaint\");\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              return this.get(\"viewController\").getPointByClient(t, e);\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              return this.get(\"viewController\").getClientByPoint(t, e);\n            }),\n            (e.prototype.getPointByCanvas = function (t, e) {\n              return this.get(\"viewController\").getPointByCanvas(t, e);\n            }),\n            (e.prototype.getCanvasByPoint = function (t, e) {\n              return this.get(\"viewController\").getCanvasByPoint(t, e);\n            }),\n            (e.prototype.getGraphCenterPoint = function () {\n              var t = this.get(\"group\").getCanvasBBox();\n              return { x: (t.minX + t.maxX) / 2, y: (t.minY + t.maxY) / 2 };\n            }),\n            (e.prototype.getViewPortCenterPoint = function () {\n              return this.getPointByCanvas(\n                this.get(\"width\") / 2,\n                this.get(\"height\") / 2,\n              );\n            }),\n            (e.prototype.showItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this.get(\"itemController\").changeItemVisibility(t, !0);\n              if (e && this.get(\"enabledStack\")) {\n                var r = n.getID(),\n                  i = {},\n                  o = {};\n                switch (n.getType()) {\n                  case \"node\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.nodes = [{ id: r, visible: !0 }]);\n                    break;\n                  case \"edge\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.edges = [{ id: r, visible: !0 }]);\n                    break;\n                  case \"combo\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.combos = [{ id: r, visible: !0 }]);\n                }\n                this.pushStack(\"visible\", { before: i, after: o });\n              }\n            }),\n            (e.prototype.hideItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this.get(\"itemController\").changeItemVisibility(t, !1);\n              if (e && this.get(\"enabledStack\")) {\n                var r = n.getID(),\n                  i = {},\n                  o = {};\n                switch (n.getType()) {\n                  case \"node\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.nodes = [{ id: r, visible: !1 }]);\n                    break;\n                  case \"edge\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.edges = [{ id: r, visible: !1 }]);\n                    break;\n                  case \"combo\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.combos = [{ id: r, visible: !1 }]);\n                }\n                this.pushStack(\"visible\", { before: i, after: o });\n              }\n            }),\n            (e.prototype.refreshItem = function (t) {\n              this.get(\"itemController\").refreshItem(t);\n            }),\n            (e.prototype.setAutoPaint = function (t) {\n              this.set(\"autoPaint\", t), this.get(\"canvas\").set(\"autoDraw\", t);\n            }),\n            (e.prototype.remove = function (t, e) {\n              void 0 === e && (e = !0), this.removeItem(t, e);\n            }),\n            (e.prototype.removeItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = t;\n              if (\n                (Object(c.isString)(t) && (n = this.findById(t)),\n                !n && Object(c.isString)(t))\n              )\n                console.warn(\"The item to be removed does not exist!\");\n              else if (n) {\n                var r = \"\";\n                if (\n                  (n.getType && (r = n.getType()),\n                  e && this.get(\"enabledStack\"))\n                ) {\n                  var i = Object(f.a)(Object(f.a)({}, n.getModel()), {\n                      itemType: r,\n                    }),\n                    o = {};\n                  switch (r) {\n                    case \"node\":\n                      (o.nodes = [i]), (o.edges = []);\n                      for (var a = n.getEdges(), s = a.length - 1; s >= 0; s--)\n                        o.edges.push(\n                          Object(f.a)(Object(f.a)({}, a[s].getModel()), {\n                            itemType: \"edge\",\n                          }),\n                        );\n                      break;\n                    case \"edge\":\n                      o.edges = [i];\n                      break;\n                    case \"combo\":\n                      o.combos = [i];\n                  }\n                  this.pushStack(\"delete\", { before: o, after: {} });\n                }\n                if (\"node\" === r)\n                  n.getModel().comboId && this.updateComboTree(n);\n                if ((this.get(\"itemController\").removeItem(n), \"combo\" === r)) {\n                  var u = mt(this.get(\"comboTrees\"));\n                  this.set(\"comboTrees\", u);\n                }\n              }\n            }),\n            (e.prototype.addItem = function (t, e, n, r) {\n              void 0 === n && (n = !0), void 0 === r && (r = !0);\n              var i = this.get(\"comboSorted\");\n              this.set(\"comboSorted\", i && !r);\n              var o = this.get(\"itemController\");\n              if (\n                !(function (t, e) {\n                  if (\"node\" === t || \"combo\" === t) {\n                    if (e.id && !Object(c.isString)(e.id))\n                      return (\n                        console.warn(\n                          \"G6 Warning Tips: missing 'id' property, or the 'id' %c\".concat(\n                            e.id,\n                            \"%c is not a string.\",\n                          ),\n                          \"font-size: 20px; color: red;\",\n                          \"\",\n                        ),\n                        !1\n                      );\n                  } else if (!(\"edge\" !== t || (e.source && e.target)))\n                    return (\n                      console.warn(\n                        \"G6 Warning Tips: missing 'source' or 'target' for the edge.\",\n                      ),\n                      !1\n                    );\n                  return !0;\n                })(t, e)\n              )\n                return !1;\n              if (!e.id || !this.findById(e.id)) {\n                var a,\n                  s = this.get(\"comboTrees\");\n                if ((s || (s = []), \"combo\" === t)) {\n                  var u = this.get(\"itemMap\"),\n                    h = !1;\n                  if (\n                    (s.forEach(function (n) {\n                      h ||\n                        pt(n, function (n) {\n                          if (e.parentId === n.id) {\n                            h = !0;\n                            var r = Object(f.a)(\n                              { id: e.id, depth: n.depth + 2 },\n                              e,\n                            );\n                            n.children\n                              ? n.children.push(r)\n                              : (n.children = [r]),\n                              (e.depth = r.depth),\n                              (a = o.addItem(t, e));\n                          }\n                          var i = u[n.id];\n                          return (\n                            h &&\n                              i &&\n                              i.getType &&\n                              \"combo\" === i.getType() &&\n                              o.updateCombo(i, n.children),\n                            !0\n                          );\n                        });\n                    }),\n                    !h)\n                  ) {\n                    var l = Object(f.a)({ id: e.id, depth: 0 }, e);\n                    (e.depth = l.depth), s.push(l), (a = o.addItem(t, e));\n                  }\n                  this.set(\"comboTrees\", s);\n                } else if (\"node\" === t && Object(c.isString)(e.comboId) && s) {\n                  var d;\n                  (d = this.findById(e.comboId)) &&\n                    d.getType &&\n                    \"combo\" !== d.getType() &&\n                    console.warn(\n                      \"'\".concat(\n                        e.comboId,\n                        \"' is not a id of a combo in the graph, the node will be added without combo.\",\n                      ),\n                    ),\n                    (a = o.addItem(t, e));\n                  var p = this.get(\"itemMap\"),\n                    g = !1,\n                    v = !1;\n                  (s || []).forEach(function (t) {\n                    v ||\n                      g ||\n                      pt(t, function (t) {\n                        if (t.id === e.id) return (v = !0), !1;\n                        if (e.comboId === t.id && !v) {\n                          g = !0;\n                          var n = Object(c.clone)(e);\n                          (n.itemType = \"node\"),\n                            t.children\n                              ? t.children.push(n)\n                              : (t.children = [n]),\n                            (n.depth = t.depth + 1);\n                        }\n                        return (\n                          g &&\n                            p[t.id].getType &&\n                            \"combo\" === p[t.id].getType() &&\n                            o.updateCombo(p[t.id], t.children),\n                          !0\n                        );\n                      });\n                  });\n                } else a = o.addItem(t, e);\n                if (\n                  (\"node\" === t && e.comboId) ||\n                  (\"combo\" === t && e.parentId)\n                )\n                  (d = this.findById(e.comboId || e.parentId)) &&\n                    d.getType &&\n                    \"combo\" === d.getType() &&\n                    d.addChild(a);\n                var y = this.get(\"combos\");\n                if (\n                  (y && y.length > 0 && this.sortCombos(),\n                  this.autoPaint(),\n                  n && this.get(\"enabledStack\"))\n                ) {\n                  var m = Object(f.a)(Object(f.a)({}, a.getModel()), {\n                      itemType: t,\n                    }),\n                    b = {};\n                  switch (t) {\n                    case \"node\":\n                      b.nodes = [m];\n                      break;\n                    case \"edge\":\n                      b.edges = [m];\n                      break;\n                    case \"combo\":\n                      b.combos = [m];\n                  }\n                  this.pushStack(\"add\", { before: {}, after: b });\n                }\n                return a;\n              }\n              console.warn(\n                \"This item exists already. Be sure the id %c\".concat(\n                  e.id,\n                  \"%c is unique.\",\n                ),\n                \"font-size: 20px; color: red;\",\n                \"\",\n              );\n            }),\n            (e.prototype.add = function (t, e, n, r) {\n              return (\n                void 0 === n && (n = !0),\n                void 0 === r && (r = !0),\n                this.addItem(t, e, n, r)\n              );\n            }),\n            (e.prototype.updateItem = function (t, e, n) {\n              var r = this;\n              void 0 === n && (n = !0);\n              var i,\n                o = this.get(\"itemController\");\n              i = Object(c.isString)(t) ? this.findById(t) : t;\n              var a = Object(c.clone)(i.getModel()),\n                s = \"\";\n              i.getType && (s = i.getType());\n              var u = Object(f.f)([], i.getStates(), !0);\n              if (\n                (\"combo\" === s &&\n                  Object(c.each)(u, function (t) {\n                    return r.setItemState(i, t, !1);\n                  }),\n                o.updateItem(i, e),\n                \"combo\" === s &&\n                  Object(c.each)(u, function (t) {\n                    return r.setItemState(i, t, !0);\n                  }),\n                n && this.get(\"enabledStack\"))\n              ) {\n                var h = { nodes: [], edges: [], combos: [] },\n                  l = { nodes: [], edges: [], combos: [] },\n                  d = Object(f.a)({ id: a.id }, e);\n                switch (s) {\n                  case \"node\":\n                    h.nodes.push(a), l.nodes.push(d);\n                    break;\n                  case \"edge\":\n                    h.edges.push(a), l.edges.push(d);\n                    break;\n                  case \"combo\":\n                    h.combos.push(a), l.combos.push(d);\n                }\n                \"node\" === s && h.nodes.push(a),\n                  this.pushStack(\"update\", { before: h, after: l });\n              }\n            }),\n            (e.prototype.update = function (t, e, n) {\n              void 0 === n && (n = !0), this.updateItem(t, e, n);\n            }),\n            (e.prototype.setItemState = function (t, e, n) {\n              Object(c.isString)(t) && (t = this.findById(t)),\n                this.get(\"itemController\").setItemState(t, e, n);\n              var r = this.get(\"stateController\");\n              Object(c.isString)(n)\n                ? r.updateState(t, \"\".concat(e, \":\").concat(n), !0)\n                : r.updateState(t, e, n);\n            }),\n            (e.prototype.priorityState = function (t, e) {\n              this.get(\"itemController\").priorityState(t, e);\n            }),\n            (e.prototype.data = function (t) {\n              St(t), this.set(\"data\", t);\n            }),\n            (e.prototype.render = function () {\n              var t = this;\n              this.set(\"comboSorted\", !1);\n              var e = this.get(\"data\");\n              if ((this.get(\"enabledStack\") && this.clearStack(), !e))\n                throw new Error(\"data must be defined first\");\n              var n = e.nodes,\n                r = void 0 === n ? [] : n,\n                i = e.edges,\n                o = void 0 === i ? [] : i,\n                a = e.combos,\n                s = void 0 === a ? [] : a;\n              if (\n                (this.clear(!0),\n                this.emit(\"beforerender\"),\n                Object(c.each)(r, function (e) {\n                  t.add(\"node\", e, !1, !1);\n                }),\n                s && 0 !== s.length)\n              ) {\n                var u = yt(s, r);\n                this.set(\"comboTrees\", u), t.addCombos(s);\n              }\n              Object(c.each)(o, function (e) {\n                t.add(\"edge\", e, !1, !1);\n              });\n              var h = t.get(\"animate\");\n              (t.get(\"fitView\") || t.get(\"fitCenter\")) && t.set(\"animate\", !1);\n              var l = t.get(\"layoutController\");\n              if (l) {\n                if (\n                  (l.layout(function () {\n                    t.get(\"fitView\")\n                      ? t.fitView()\n                      : t.get(\"fitCenter\") && t.fitCenter();\n                    t.autoPaint(),\n                      t.emit(\"afterrender\"),\n                      (t.get(\"fitView\") || t.get(\"fitCenter\")) &&\n                        t.set(\"animate\", h);\n                  }),\n                  this.refreshPositions(),\n                  this.destroyed)\n                )\n                  return;\n              } else\n                t.get(\"fitView\") && t.fitView(),\n                  t.get(\"fitCenter\") && t.fitCenter(),\n                  t.emit(\"afterrender\"),\n                  t.set(\"animate\", h);\n              this.get(\"groupByTypes\") ||\n                (s && 0 !== s.length\n                  ? this.sortCombos()\n                  : e.nodes && e.edges && e.nodes.length < e.edges.length\n                  ? this.getNodes().forEach(function (t) {\n                      t.toFront();\n                    })\n                  : this.getEdges().forEach(function (t) {\n                      t.toBack();\n                    }));\n              this.get(\"enabledStack\") && this.pushStack(\"render\");\n            }),\n            (e.prototype.read = function (t) {\n              this.data(t), this.render();\n            }),\n            (e.prototype.diffItems = function (t, e, n) {\n              var r,\n                i = this,\n                o = this.get(\"itemMap\");\n              Object(c.each)(n, function (n) {\n                if ((r = o[n.id])) {\n                  if (i.get(\"animate\") && \"node\" === t) {\n                    var a = r.getContainer().getMatrix();\n                    a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                      r.set(\"originAttrs\", { x: a[6], y: a[7] });\n                  }\n                  i.updateItem(r, n, !1);\n                } else r = i.addItem(t, n, !1);\n                r && e[\"\".concat(t, \"s\")].push(r);\n              });\n            }),\n            (e.prototype.changeData = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this;\n              if (!St(t)) return this;\n              e &&\n                this.get(\"enabledStack\") &&\n                this.pushStack(\"changedata\", { before: n.save(), after: t }),\n                this.set(\"comboSorted\", !1),\n                this.removeHulls(),\n                this.getNodes().map(function (t) {\n                  return n.clearItemStates(t);\n                }),\n                this.getEdges().map(function (t) {\n                  return n.clearItemStates(t);\n                });\n              var r = this.get(\"canvas\"),\n                i = r.get(\"localRefresh\");\n              r.set(\"localRefresh\", !1),\n                n.get(\"data\") || (n.data(t), n.render());\n              var o = this.get(\"itemMap\"),\n                a = { nodes: [], edges: [] },\n                s = t.combos;\n              if (s) {\n                var u = yt(s, t.nodes);\n                this.set(\"comboTrees\", u);\n              }\n              this.diffItems(\"node\", a, t.nodes),\n                Object(c.each)(o, function (t, e) {\n                  (o[e].getModel().depth = 0),\n                    (t.getType && \"edge\" === t.getType()) ||\n                      (t.getType && \"combo\" === t.getType()\n                        ? (delete o[e], t.destroy())\n                        : a.nodes.indexOf(t) < 0 &&\n                          (delete o[e], n.remove(t, !1)));\n                });\n              for (var h = this.getCombos(), l = h.length - 1; l >= 0; l--)\n                h[l].destroyed && h.splice(l, 1);\n              s &&\n                (n.addCombos(s), this.get(\"groupByTypes\") || this.sortCombos()),\n                this.diffItems(\"edge\", a, t.edges),\n                Object(c.each)(o, function (t, e) {\n                  (!t.getType ||\n                    (\"node\" !== t.getType() && \"combo\" !== t.getType())) &&\n                    a.edges.indexOf(t) < 0 &&\n                    (delete o[e], n.remove(t, !1));\n                }),\n                this.set({ nodes: a.nodes, edges: a.edges });\n              var f = this.get(\"layoutController\");\n              return (\n                f &&\n                  (f.changeData(),\n                  n.get(\"animate\") && !f.getLayoutType()\n                    ? n.positionsAnimate()\n                    : n.autoPaint()),\n                setTimeout(function () {\n                  r.set(\"localRefresh\", i);\n                }, 16),\n                this\n              );\n            }),\n            (e.prototype.addCombos = function (t) {\n              var e = this.get(\"comboTrees\");\n              this.get(\"itemController\").addCombos(e, t);\n            }),\n            (e.prototype.createCombo = function (t, e) {\n              var n = this;\n              this.set(\"comboSorted\", !1);\n              var r,\n                i = \"\";\n              if (t) {\n                if (Object(c.isString)(t)) (i = t), (r = { id: t });\n                else {\n                  if (!(i = t.id))\n                    return void console.warn(\n                      \"Create combo failed. Please assign a unique string id for the adding combo.\",\n                    );\n                  r = t;\n                }\n                var o = e.map(function (t) {\n                  var e = n.findById(t),\n                    r = e.getModel(),\n                    o = \"\";\n                  e.getType && (o = e.getType());\n                  var a = { id: e.getID(), itemType: o };\n                  return (\n                    \"combo\" === o\n                      ? ((a.parentId = i), (r.parentId = i))\n                      : \"node\" === o && ((a.comboId = i), (r.comboId = i)),\n                    a\n                  );\n                });\n                (r.children = o),\n                  this.addItem(\"combo\", r, !1),\n                  this.set(\"comboSorted\", !1);\n                var a = this.get(\"comboTrees\");\n                (a || []).forEach(function (t) {\n                  pt(t, function (t) {\n                    return (\n                      t.id !== i ||\n                      ((t.itemType = \"combo\"), (t.children = o), !1)\n                    );\n                  });\n                }),\n                  a && this.sortCombos();\n              }\n            }),\n            (e.prototype.uncombo = function (t) {\n              var e = this,\n                n = t;\n              if (\n                (Object(c.isString)(t) && (n = this.findById(t)),\n                !n || (n.getType && \"combo\" !== n.getType()))\n              )\n                console.warn(\"The item is not a combo!\");\n              else {\n                var r = n.getModel().parentId,\n                  i = this.get(\"comboTrees\");\n                i || (i = []);\n                var o,\n                  a = this.get(\"itemMap\"),\n                  s = n.get(\"id\"),\n                  u = [],\n                  h = this.get(\"combos\"),\n                  l = this.findById(r);\n                if (\n                  (i.forEach(function (i) {\n                    o ||\n                      pt(i, function (i) {\n                        if (i.id === s) {\n                          (o = i),\n                            n.getEdges().forEach(function (t) {\n                              e.removeItem(t, !1);\n                            });\n                          var c = h.indexOf(t);\n                          h.splice(c, 1), delete a[s], n.destroy();\n                        }\n                        return (\n                          !r ||\n                          !o ||\n                          i.id !== r ||\n                          (l.removeCombo(n),\n                          -1 !== (c = (u = i.children).indexOf(o)) &&\n                            u.splice(c, 1),\n                          o.children.forEach(function (t) {\n                            var n = e.findById(t.id),\n                              i = n.getModel();\n                            n.getType && \"combo\" === n.getType()\n                              ? ((t.parentId = r),\n                                delete t.comboId,\n                                (i.parentId = r),\n                                delete i.comboId)\n                              : n.getType &&\n                                \"node\" === n.getType() &&\n                                ((t.comboId = r), (i.comboId = r)),\n                              l.addChild(n),\n                              u.push(t);\n                          }),\n                          !1)\n                        );\n                      });\n                  }),\n                  !r && o)\n                ) {\n                  var f = i.indexOf(o);\n                  i.splice(f, 1),\n                    o.children.forEach(function (t) {\n                      t.parentId = void 0;\n                      var n = e.findById(t.id).getModel();\n                      delete n.parentId,\n                        delete n.comboId,\n                        \"node\" !== t.itemType && i.push(t);\n                    });\n                }\n              }\n            }),\n            (e.prototype.updateCombos = function () {\n              var t = this,\n                e = this.get(\"comboTrees\"),\n                n = this.get(\"itemController\"),\n                r = this.get(\"itemMap\");\n              (e || []).forEach(function (e) {\n                pt(e, function (e) {\n                  if (!e) return !0;\n                  var i = r[e.id];\n                  if (i && i.getType && \"combo\" === i.getType()) {\n                    var o = Object(f.f)([], i.getStates(), !0);\n                    Object(c.each)(o, function (e) {\n                      return t.setItemState(i, e, !1);\n                    }),\n                      n.updateCombo(i, e.children),\n                      Object(c.each)(o, function (e) {\n                        return t.setItemState(i, e, !0);\n                      });\n                  }\n                  return !0;\n                });\n              }),\n                this.sortCombos();\n            }),\n            (e.prototype.updateCombo = function (t) {\n              var e,\n                n = this,\n                r = t;\n              if (\n                (Object(c.isString)(t) && (r = this.findById(t)),\n                !r || (r.getType && \"combo\" !== r.getType()))\n              )\n                console.warn(\"The item to be updated is not a combo!\");\n              else {\n                e = r.get(\"id\");\n                var i = this.get(\"comboTrees\"),\n                  o = this.get(\"itemController\"),\n                  a = this.get(\"itemMap\");\n                (i || []).forEach(function (t) {\n                  pt(t, function (t) {\n                    if (!t) return !0;\n                    var r = a[t.id];\n                    if (\n                      e === t.id &&\n                      r &&\n                      r.getType &&\n                      \"combo\" === r.getType()\n                    ) {\n                      var i = Object(f.f)([], r.getStates(), !0);\n                      Object(c.each)(i, function (t) {\n                        r.getStateStyle(t) && n.setItemState(r, t, !1);\n                      }),\n                        o.updateCombo(r, t.children),\n                        Object(c.each)(i, function (t) {\n                          r.getStateStyle(t) && n.setItemState(r, t, !0);\n                        }),\n                        e && (e = t.parentId);\n                    }\n                    return !0;\n                  });\n                });\n              }\n            }),\n            (e.prototype.updateComboTree = function (t, e, n) {\n              void 0 === n && (n = !0);\n              var r;\n              this.set(\"comboSorted\", !1);\n              var i,\n                o = (r = Object(c.isString)(t)\n                  ? this.findById(t)\n                  : t).getModel(),\n                a = o.comboId || o.parentId,\n                s = \"\";\n              if ((r.getType && (s = r.getType()), e && \"combo\" === s)) {\n                var u,\n                  h = this.get(\"comboTrees\"),\n                  l = !0;\n                if (\n                  ((h || []).forEach(function (t) {\n                    u ||\n                      dt(t, function (t) {\n                        if (!u) return t.id === r.getID() && (u = t), !0;\n                      });\n                  }),\n                  dt(u, function (t) {\n                    return t.id !== e || ((l = !1), !1);\n                  }),\n                  !l)\n                )\n                  return void console.warn(\n                    \"Failed to update the combo tree! The parentId points to a descendant of the combo!\",\n                  );\n              }\n              if (n && this.get(\"enabledStack\")) {\n                var f = {},\n                  d = {};\n                \"combo\" === s\n                  ? ((f.combos = [{ id: o.id, parentId: o.parentId }]),\n                    (d.combos = [{ id: o.id, parentId: e }]))\n                  : \"node\" === s &&\n                    ((f.nodes = [{ id: o.id, parentId: o.comboId }]),\n                    (d.nodes = [{ id: o.id, parentId: e }])),\n                  this.pushStack(\"updateComboTree\", { before: f, after: d });\n              }\n              if (o.parentId || o.comboId) {\n                var p = this.findById(o.parentId || o.comboId);\n                p && p.removeChild(r);\n              }\n              (\"combo\" === s\n                ? (o.parentId = e)\n                : \"node\" === s && (o.comboId = e),\n              e) &&\n                (i = this.findById(e)) &&\n                i.addChild(r);\n              a && (i = this.findById(a)) && i.removeChild(r);\n              var g = mt(this.get(\"comboTrees\"), o.id, e);\n              this.set(\"comboTrees\", g), this.updateCombos();\n            }),\n            (e.prototype.save = function () {\n              var t = [],\n                e = [],\n                n = [];\n              return (\n                Object(c.each)(this.get(\"nodes\"), function (e) {\n                  t.push(e.getModel());\n                }),\n                Object(c.each)(this.get(\"edges\"), function (t) {\n                  e.push(t.getModel());\n                }),\n                Object(c.each)(this.get(\"combos\"), function (t) {\n                  n.push(t.getModel());\n                }),\n                { nodes: t, edges: e, combos: n }\n              );\n            }),\n            (e.prototype.changeSize = function (t, e) {\n              return this.get(\"viewController\").changeSize(t, e), this;\n            }),\n            (e.prototype.refresh = function () {\n              if ((this.emit(\"beforegraphrefresh\"), this.get(\"animate\")))\n                this.positionsAnimate();\n              else {\n                var t = this.get(\"nodes\"),\n                  e = this.get(\"edges\"),\n                  n = this.get(\"edges\");\n                Object(c.each)(t, function (t) {\n                  t.refresh();\n                }),\n                  Object(c.each)(e, function (t) {\n                    t.refresh();\n                  }),\n                  Object(c.each)(n, function (t) {\n                    t.refresh();\n                  });\n              }\n              this.emit(\"aftergraphrefresh\"), this.autoPaint();\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.getComboChildren = function (t) {\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                t && (!t.getType || \"combo\" === t.getType()))\n              )\n                return t.getChildren();\n              console.warn(\"The combo does not exist!\");\n            }),\n            (e.prototype.positionsAnimate = function () {\n              var t = this;\n              t.emit(\"beforeanimate\");\n              var e = t.get(\"animateCfg\"),\n                n = e.onFrame,\n                r = t.getNodes(),\n                i = r.map(function (t) {\n                  var e = t.getModel();\n                  return { id: e.id, x: e.x, y: e.y };\n                });\n              t.isAnimating() && t.stopAnimate(),\n                t.get(\"canvas\").animate(\n                  function (e) {\n                    Object(c.each)(i, function (r) {\n                      var i = t.findById(r.id);\n                      if (i && !i.destroyed) {\n                        var o = i.get(\"originAttrs\"),\n                          a = i.get(\"model\");\n                        if (!o) {\n                          var s = i.getContainer().getMatrix();\n                          s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                            (o = { x: s[6], y: s[7] }),\n                            i.set(\"originAttrs\", o);\n                        }\n                        if (n) {\n                          var c = n(i, e, r, o);\n                          i.set(\"model\", Object.assign(a, c));\n                        } else\n                          (a.x = o.x + (r.x - o.x) * e),\n                            (a.y = o.y + (r.y - o.y) * e);\n                      }\n                    }),\n                      t.refreshPositions();\n                  },\n                  {\n                    duration: e.duration,\n                    easing: e.easing,\n                    callback: function () {\n                      Object(c.each)(r, function (t) {\n                        t.set(\"originAttrs\", null);\n                      }),\n                        e.callback && e.callback(),\n                        t.emit(\"afteranimate\"),\n                        (t.animating = !1);\n                    },\n                  },\n                );\n            }),\n            (e.prototype.refreshPositions = function () {\n              this.emit(\"beforegraphrefreshposition\");\n              var t,\n                e = this.get(\"nodes\"),\n                n = this.get(\"edges\"),\n                r = this.get(\"vedges\"),\n                i = this.get(\"combos\"),\n                o = {};\n              Object(c.each)(e, function (e) {\n                t = e.getModel();\n                var n = e.get(\"originAttrs\");\n                if (!n || t.x !== n.x || t.y !== n.y) {\n                  var r = e.updatePosition({ x: t.x, y: t.y });\n                  (o[t.id] = r),\n                    t.comboId && (o[t.comboId] = o[t.comboId] || r);\n                }\n              }),\n                i && 0 !== i.length && this.updateCombos(),\n                Object(c.each)(n, function (t) {\n                  var e = t.getSource().getModel(),\n                    n = t.getTarget();\n                  if (!Object(c.isPlainObject)(n)) {\n                    var r = n.getModel();\n                    (o[e.id] || o[r.id] || t.getModel().isComboEdge) &&\n                      t.refresh();\n                  }\n                }),\n                Object(c.each)(r, function (t) {\n                  t.refresh();\n                }),\n                this.emit(\"aftergraphrefreshposition\"),\n                this.autoPaint();\n            }),\n            (e.prototype.stopAnimate = function () {\n              this.get(\"canvas\").stopAnimate();\n            }),\n            (e.prototype.isAnimating = function () {\n              return this.animating;\n            }),\n            (e.prototype.getZoom = function () {\n              var t = this.get(\"group\").getMatrix();\n              return t ? t[0] : 1;\n            }),\n            (e.prototype.getCurrentMode = function () {\n              return this.get(\"modeController\").getMode();\n            }),\n            (e.prototype.setMode = function (t) {\n              return this.get(\"modeController\").setMode(t), this;\n            }),\n            (e.prototype.clear = function (t) {\n              return (\n                void 0 === t && (t = !1),\n                this.get(\"canvas\").clear(),\n                this.initGroups(),\n                this.set({\n                  itemMap: {},\n                  nodes: [],\n                  edges: [],\n                  groups: [],\n                  combos: [],\n                  comboTrees: [],\n                }),\n                t || this.emit(\"afterrender\"),\n                this\n              );\n            }),\n            (e.prototype.updateLayout = function (t) {\n              var e = this.get(\"layoutController\");\n              Object(c.isString)(t) && (t = { type: t });\n              var n = this.get(\"layout\"),\n                r = {};\n              Object.assign(r, n, t),\n                this.set(\"layout\", r),\n                e.isLayoutTypeSame(r) && r.gpuEnabled === n.gpuEnabled\n                  ? e.updateLayoutCfg(r)\n                  : e.changeLayout(r);\n            }),\n            (e.prototype.destroyLayout = function () {\n              this.get(\"layoutController\").destroyLayout();\n            }),\n            (e.prototype.layout = function () {\n              var t = this.get(\"layoutController\"),\n                e = this.get(\"layout\");\n              e &&\n                t &&\n                (e.workerEnabled\n                  ? t.layout()\n                  : t.layoutMethod\n                  ? t.relayout(!0)\n                  : t.layout());\n            }),\n            (e.prototype.collapseCombo = function (t) {\n              var e = this;\n              if ((Object(c.isString)(t) && (t = this.findById(t)), t)) {\n                this.emit(\"beforecollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n                var n = t.getModel();\n                this.get(\"itemController\").collapseCombo(t), (n.collapsed = !0);\n                var r = this.getEdges().concat(this.get(\"vedges\")),\n                  i = [],\n                  o = [],\n                  a = this.get(\"comboTrees\"),\n                  s = !1;\n                (a || []).forEach(function (t) {\n                  s ||\n                    dt(t, function (t) {\n                      if (s && t.depth <= n.depth) return !1;\n                      if ((n.id === t.id && (s = !0), s)) {\n                        var r = e.findById(t.id);\n                        r &&\n                          r.getType &&\n                          \"combo\" === r.getType() &&\n                          ((i = i.concat(r.getNodes())),\n                          (o = o.concat(r.getCombos())));\n                      }\n                      return !0;\n                    });\n                });\n                var u = {},\n                  h = [];\n                r.forEach(function (t) {\n                  if (!t.isVisible() || t.getModel().isVEdge) {\n                    var r = t.getSource(),\n                      a = t.getTarget();\n                    if (\n                      ((i.includes(r) || o.includes(r)) &&\n                        !i.includes(a) &&\n                        !o.includes(a)) ||\n                      r.getModel().id === n.id\n                    ) {\n                      if ((f = t.getModel()).isVEdge)\n                        return void e.removeItem(t, !1);\n                      for (var s = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(s.parentId || s.comboId)) ||\n                          (!s.parentId && !s.comboId)\n                        )\n                          return;\n                        s = a.getModel();\n                      }\n                      var c = s.id;\n                      if (u[\"\".concat(n.id, \"-\").concat(c)])\n                        return void (u[\"\".concat(n.id, \"-\").concat(c)] +=\n                          f.size || 1);\n                      var l = e.addItem(\n                        \"vedge\",\n                        { source: n.id, target: c, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[\"\".concat(n.id, \"-\").concat(c)] = f.size || 1),\n                        h.push(l);\n                    } else if (\n                      (!i.includes(r) &&\n                        !o.includes(r) &&\n                        (i.includes(a) || o.includes(a))) ||\n                      a.getModel().id === n.id\n                    ) {\n                      var f;\n                      if ((f = t.getModel()).isVEdge)\n                        return void e.removeItem(t, !1);\n                      for (var d = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(d.parentId || d.comboId)) ||\n                          (!d.parentId && !d.comboId)\n                        )\n                          return;\n                        d = r.getModel();\n                      }\n                      var p = d.id;\n                      if (u[\"\".concat(p, \"-\").concat(n.id)])\n                        return void (u[\"\".concat(p, \"-\").concat(n.id)] +=\n                          f.size || 1);\n                      l = e.addItem(\n                        \"vedge\",\n                        { target: n.id, source: p, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[\"\".concat(p, \"-\").concat(n.id)] = f.size || 1),\n                        h.push(l);\n                    }\n                  }\n                }),\n                  h.forEach(function (t) {\n                    var n = t.getModel();\n                    e.updateItem(\n                      t,\n                      { size: u[\"\".concat(n.source, \"-\").concat(n.target)] },\n                      !1,\n                    );\n                  }),\n                  this.emit(\"aftercollapseexpandcombo\", {\n                    action: \"collapse\",\n                    item: t,\n                  });\n              } else console.warn(\"The combo to be collapsed does not exist!\");\n            }),\n            (e.prototype.expandCombo = function (t) {\n              var e = this;\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                !t || (t.getType && \"combo\" !== t.getType()))\n              )\n                console.warn(\"The combo to be collapsed does not exist!\");\n              else {\n                this.emit(\"beforecollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n                var n = t.getModel();\n                this.get(\"itemController\").expandCombo(t), (n.collapsed = !1);\n                var r = this.getEdges().concat(this.get(\"vedges\")),\n                  i = [],\n                  o = [],\n                  a = this.get(\"comboTrees\"),\n                  s = !1;\n                (a || []).forEach(function (t) {\n                  s ||\n                    dt(t, function (t) {\n                      if (s && t.depth <= n.depth) return !1;\n                      if ((n.id === t.id && (s = !0), s)) {\n                        var r = e.findById(t.id);\n                        r &&\n                          r.getType &&\n                          \"combo\" === r.getType() &&\n                          ((i = i.concat(r.getNodes())),\n                          (o = o.concat(r.getCombos())));\n                      }\n                      return !0;\n                    });\n                });\n                var u = {},\n                  h = {};\n                r.forEach(function (t) {\n                  if (!t.isVisible() || t.getModel().isVEdge) {\n                    var r = t.getSource(),\n                      a = t.getTarget(),\n                      s = r.get(\"id\"),\n                      c = a.get(\"id\");\n                    if (\n                      ((i.includes(r) || o.includes(r)) &&\n                        !i.includes(a) &&\n                        !o.includes(a)) ||\n                      s === n.id\n                    ) {\n                      if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                      for (var l = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(l.comboId || l.parentId)) ||\n                          (!l.parentId && !l.comboId)\n                        )\n                          return;\n                        l = a.getModel();\n                      }\n                      c = l.id;\n                      for (var f = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(f.comboId || f.parentId)) ||\n                          (!f.parentId && !f.comboId)\n                        )\n                          return;\n                        if (f.comboId === n.id || f.parentId === n.id) break;\n                        f = r.getModel();\n                      }\n                      if (((s = f.id), c)) {\n                        var d = \"\".concat(s, \"-\").concat(c);\n                        if (u[d])\n                          return (\n                            (u[d] += t.getModel().size || 1),\n                            void e.updateItem(h[d], { size: u[d] }, !1)\n                          );\n                        var p = e.addItem(\n                          \"vedge\",\n                          { source: s, target: c, isVEdge: !0 },\n                          !1,\n                        );\n                        (u[d] = t.getModel().size || 1), (h[d] = p);\n                      }\n                    } else if (\n                      (!i.includes(r) &&\n                        !o.includes(r) &&\n                        (i.includes(a) || o.includes(a))) ||\n                      c === n.id\n                    ) {\n                      if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                      for (f = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(f.comboId || f.parentId)) ||\n                          (!f.parentId && !f.comboId)\n                        )\n                          return;\n                        f = r.getModel();\n                      }\n                      s = f.id;\n                      for (l = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(l.comboId || l.parentId)) ||\n                          (!l.parentId && !l.comboId)\n                        )\n                          return;\n                        if (l.comboId === n.id || l.parentId === n.id) break;\n                        l = a.getModel();\n                      }\n                      if (((c = l.id), s)) {\n                        d = \"\".concat(s, \"-\").concat(c);\n                        if (u[d])\n                          return (\n                            (u[d] += t.getModel().size || 1),\n                            void e.updateItem(h[d], { size: u[d] }, !1)\n                          );\n                        p = e.addItem(\n                          \"vedge\",\n                          { target: c, source: s, isVEdge: !0 },\n                          !1,\n                        );\n                        (u[d] = t.getModel().size || 1), (h[d] = p);\n                      }\n                    } else\n                      (i.includes(r) || o.includes(r)) &&\n                        (i.includes(a) || o.includes(a)) &&\n                        r.isVisible() &&\n                        a.isVisible() &&\n                        t.show();\n                  }\n                }),\n                  this.emit(\"aftercollapseexpandcombo\", {\n                    action: \"expand\",\n                    item: t,\n                  });\n              }\n            }),\n            (e.prototype.collapseExpandCombo = function (t) {\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                t && (!t.getType || \"combo\" === t.getType()))\n              ) {\n                for (var e = t.getModel(), n = this.findById(e.parentId); n; ) {\n                  var r = n.getModel();\n                  if (r.collapsed)\n                    return (\n                      console.warn(\n                        \"Fail to expand the combo since it's ancestor combo is collapsed.\",\n                      ),\n                      void (n = void 0)\n                    );\n                  n = this.findById(r.parentId);\n                }\n                e.collapsed ? this.expandCombo(t) : this.collapseCombo(t),\n                  this.updateCombo(t);\n              }\n            }),\n            (e.prototype.sortCombos = function () {\n              var t = this;\n              if (!this.get(\"comboSorted\")) {\n                this.set(\"comboSorted\", !0);\n                var e = [],\n                  n = {};\n                (this.get(\"comboTrees\") || []).forEach(function (t) {\n                  dt(t, function (t) {\n                    return (\n                      e[t.depth]\n                        ? e[t.depth].push(t.id)\n                        : (e[t.depth] = [t.id]),\n                      (n[t.id] = t.depth),\n                      !0\n                    );\n                  });\n                }),\n                  (this.getEdges().concat(this.get(\"vedges\")) || []).forEach(\n                    function (t) {\n                      var r = t.getModel(),\n                        i = n[r.source] || 0,\n                        o = n[r.target] || 0,\n                        a = Math.max(i, o);\n                      e[a] ? e[a].push(r.id) : (e[a] = [r.id]);\n                    },\n                  ),\n                  e.forEach(function (e) {\n                    if (e && e.length)\n                      for (var n = e.length - 1; n >= 0; n--) {\n                        var r = t.findById(e[n]);\n                        r && r.toFront();\n                      }\n                  });\n              }\n            }),\n            (e.prototype.getNeighbors = function (t, e) {\n              var n = t;\n              return (\n                Object(c.isString)(t) && (n = this.findById(t)),\n                n.getNeighbors(e)\n              );\n            }),\n            (e.prototype.getNodeDegree = function (t, e, n) {\n              void 0 === e && (e = void 0), void 0 === n && (n = !1);\n              var r = t;\n              Object(c.isString)(t) && (r = this.findById(t));\n              var i = this.get(\"degrees\");\n              (i && !n) ||\n                ((i = Object(v.getDegree)(this.save())),\n                this.set(\"degrees\", i));\n              var o = i[r.getID()],\n                a = 0;\n              if (!o) return 0;\n              switch (e) {\n                case \"in\":\n                  a = o.inDegree;\n                  break;\n                case \"out\":\n                  a = o.outDegree;\n                  break;\n                case \"all\":\n                  a = o;\n                  break;\n                default:\n                  a = o.degree;\n              }\n              return a;\n            }),\n            (e.prototype.getUndoStack = function () {\n              return this.undoStack;\n            }),\n            (e.prototype.getRedoStack = function () {\n              return this.redoStack;\n            }),\n            (e.prototype.getStackData = function () {\n              return this.get(\"enabledStack\")\n                ? {\n                    undoStack: this.undoStack.toArray(),\n                    redoStack: this.redoStack.toArray(),\n                  }\n                : null;\n            }),\n            (e.prototype.clearStack = function () {\n              this.get(\"enabledStack\") &&\n                (this.undoStack.clear(), this.redoStack.clear());\n            }),\n            (e.prototype.pushStack = function (t, e, n) {\n              if (\n                (void 0 === t && (t = \"update\"),\n                void 0 === n && (n = \"undo\"),\n                this.get(\"enabledStack\"))\n              ) {\n                var r = e\n                  ? Object(c.clone)(e)\n                  : { before: {}, after: Object(c.clone)(this.save()) };\n                \"redo\" === n\n                  ? this.redoStack.push({ action: t, data: r })\n                  : this.undoStack.push({ action: t, data: r }),\n                  this.emit(\"stackchange\", {\n                    undoStack: this.undoStack,\n                    redoStack: this.redoStack,\n                  });\n              } else\n                console.warn(\n                  \"请先启用 undo & redo 功能，在实例化 Graph 时候配置 enabledStack: true !\",\n                );\n            }),\n            (e.prototype.getAdjMatrix = function (t, e) {\n              void 0 === t && (t = !0),\n                void 0 === e && (e = this.get(\"directed\"));\n              var n = this.get(\"adjMatrix\");\n              return (\n                (n && t) ||\n                  ((n = Object(v.getAdjMatrix)(this.save(), e)),\n                  this.set(\"adjMatrix\", n)),\n                n\n              );\n            }),\n            (e.prototype.getShortestPathMatrix = function (t, e) {\n              void 0 === t && (t = !0),\n                void 0 === e && (e = this.get(\"directed\"));\n              var n = this.get(\"adjMatrix\"),\n                r = this.get(\"shortestPathMatrix\");\n              return (\n                (n && t) ||\n                  ((n = Object(v.getAdjMatrix)(this.save(), e)),\n                  this.set(\"adjMatrix\", n)),\n                (r && t) ||\n                  ((r = Object(v.floydWarshall)(this.save(), e)),\n                  this.set(\"shortestPathMatrix\", r)),\n                r\n              );\n            }),\n            (e.prototype.on = function (e, n, r) {\n              return t.prototype.on.call(this, e, n, r);\n            }),\n            (e.prototype.destroy = function () {\n              this.clear(),\n                Object(p.clearAnimationFrame)(this.timeIndex),\n                this.clearStack(),\n                this.get(\"itemController\").destroy(),\n                this.get(\"modeController\").destroy(),\n                this.get(\"viewController\").destroy(),\n                this.get(\"stateController\").destroy(),\n                this.get(\"canvas\").destroy(),\n                (this.cfg = null),\n                (this.destroyed = !0),\n                (this.redoStack = null),\n                (this.undoStack = null);\n            }),\n            (e.prototype.createHull = function (t) {\n              if (t.members && !(t.members.length < 1)) {\n                var e = this.get(\"hullGroup\"),\n                  n = this.get(\"hullMap\");\n                if (\n                  (n || ((n = {}), this.set(\"hullMap\", n)),\n                  (e && !e.get(\"destroyed\")) ||\n                    ((e = this.get(\"group\").addGroup({\n                      id: \"hullGroup\",\n                    })).toBack(),\n                    this.set(\"hullGroup\", e)),\n                  n[t.id])\n                )\n                  return console.warn(\"Existed hull id.\"), n[t.id];\n                var r = e.addGroup({ id: \"\".concat(t.id, \"-container\") }),\n                  i = new be(\n                    this,\n                    Object(f.a)(Object(f.a)({}, t), { group: r }),\n                  );\n                return (n[i.id] = i), i;\n              }\n              console.warn(\"Create hull failed! The members is empty.\");\n            }),\n            (e.prototype.getHulls = function () {\n              return this.get(\"hullMap\");\n            }),\n            (e.prototype.getHullById = function (t) {\n              return this.get(\"hullMap\")[t];\n            }),\n            (e.prototype.removeHull = function (t) {\n              var e;\n              (e = Object(c.isString)(t) ? this.getHullById(t) : t),\n                delete this.get(\"hullMap\")[e.id],\n                e.destroy();\n            }),\n            (e.prototype.removeHulls = function () {\n              var t = this.getHulls();\n              t &&\n                Object.keys(t).length &&\n                (Object.keys(t).forEach(function (e) {\n                  t[e].destroy();\n                }),\n                this.set(\"hullMap\", {}));\n            }),\n            (e.prototype.onTick = function (t) {\n              var e = this.get(\"layoutController\");\n              e &&\n                (e.onTick(t),\n                (this.timeIndex = Object(p.requestAnimationFrame)(\n                  this.onTick.bind(this),\n                )));\n            }),\n            e\n          );\n        })(d.a);\n      function Se(t) {\n        return (Se =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Oe = g.a.transform,\n        Me = [\"startArrow\", \"endArrow\"],\n        ke = {\n          lineWidth: 1,\n          stroke: void 0,\n          fill: void 0,\n          lineAppendWidth: 1,\n          opacity: void 0,\n          strokeOpacity: void 0,\n          fillOpacity: void 0,\n          x: 0,\n          y: 0,\n          r: 10,\n          width: 20,\n          height: 20,\n          shadowColor: void 0,\n          shadowBlur: 0,\n          shadowOffsetX: 0,\n          shadowOffsetY: 0,\n        },\n        Ce = {\n          edge: {\n            lineWidth: 1,\n            stroke: \"#000\",\n            lineDash: void 0,\n            startArrow: !1,\n            endArrow: !1,\n            opacity: void 0,\n            strokeOpacity: void 0,\n            fillOpacity: void 0,\n            shadowColor: void 0,\n            shadowBlur: 0,\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n          },\n          node: ke,\n          combo: ke,\n        },\n        Ee = {\n          options: {},\n          itemType: \"\",\n          type: \"\",\n          getCustomConfig: function (t) {\n            return {};\n          },\n          getOptions: function (t) {\n            return Object(c.deepMix)(\n              {\n                labelCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n                descriptionCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n              },\n              this.options,\n              this.getCustomConfig(t) || {},\n              t,\n            );\n          },\n          draw: function (t, e) {\n            var n = this.drawShape(t, e);\n            (n.set(\"className\", this.itemType + \"-shape\"), t.label) &&\n              this.drawLabel(t, e).set(\"className\", this.itemType + \"-label\");\n            return n;\n          },\n          afterDraw: function (t, e, n) {},\n          drawShape: function (t, e) {\n            return null;\n          },\n          drawLabel: function (t, e) {\n            var n = this.getOptions(t).labelCfg || {},\n              r = this.getLabelStyle(t, n, e),\n              i = r.rotate;\n            delete r.rotate;\n            var o = e.addShape(\"text\", {\n              attrs: r,\n              draggable: !0,\n              className: \"text-shape\",\n              name: \"text-shape\",\n            });\n            if (i) {\n              var a = o.getBBox(),\n                s = o.getMatrix();\n              if ((s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]), r.rotateCenter))\n                switch (r.rotateCenter) {\n                  case \"center\":\n                    s = Oe(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                    break;\n                  case \"lefttop\":\n                    s = Oe(s, [\n                      [\"t\", -r.x, -r.y],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y],\n                    ]);\n                    break;\n                  case \"leftcenter\":\n                    s = Oe(s, [\n                      [\"t\", -r.x, -r.y - a.height / 2],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y + a.height / 2],\n                    ]);\n                    break;\n                  default:\n                    s = Oe(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                }\n              else\n                s = Oe(s, [\n                  [\"t\", -r.x, -r.y - a.height / 2],\n                  [\"r\", i],\n                  [\"t\", r.x, r.y + a.height / 2],\n                ]);\n              o.setMatrix(s);\n            }\n            if (r.background) {\n              var c = this.drawLabelBg(t, e, o),\n                u = this.itemType + \"-label-bg\";\n              c.set(\"classname\", u), o.toFront();\n            }\n            return o;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(c.mix)({}, r, t.labelCfg),\n              o = this.getLabelBgStyleByPosition(n, t, i, e);\n            return e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: o });\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            return { text: t.label };\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            return {};\n          },\n          getLabelStyle: function (t, e, n) {\n            var r = this.getLabelStyleByPosition(t, e, n),\n              i = \"\".concat(this.itemType, \"Label\"),\n              o = nt[i] ? nt[i].style : null;\n            return Object(f.a)(Object(f.a)(Object(f.a)({}, o), r), e.style);\n          },\n          getShapeStyle: function (t) {\n            return t.style;\n          },\n          update: function (t, e) {\n            this.updateShapeStyle(t, e), this.updateLabel(t, e);\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = e.getKeyShape(),\n              i = Object(c.mix)({}, r.attr(), t.style),\n              o = function (t) {\n                var e,\n                  o = i[t];\n                if (Object(c.isPlainObject)(o)) {\n                  var a = n.find(function (e) {\n                    return e.get(\"name\") === t;\n                  });\n                  a && a.attr(o);\n                } else r.attr((((e = {})[t] = o), e));\n              };\n            for (var a in i) o(a);\n          },\n          updateLabel: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getOptions({}).labelCfg,\n              i = this.itemType + \"-label\",\n              o = n.find(function (t) {\n                return t.get(\"className\") === i;\n              }),\n              a = this.itemType + \"-label-bg\",\n              s = n.find(function (t) {\n                return t.get(\"classname\") === a;\n              });\n            if (t.label || \"\" === t.label)\n              if (o) {\n                var u = {};\n                e.getModel && (u = e.getModel().labelCfg);\n                var h = Object(c.deepMix)({}, r, u, t.labelCfg),\n                  l = this.getLabelStyleByPosition(t, h, n),\n                  d = t.labelCfg ? t.labelCfg.style : void 0,\n                  p = h.style && h.style.background,\n                  g = Object(f.a)(Object(f.a)(Object(f.a)({}, o.attr()), l), d),\n                  v = g.rotate;\n                if ((delete g.rotate, v)) {\n                  var y = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                  (y = Oe(y, [\n                    [\"t\", -g.x, -g.y],\n                    [\"r\", v],\n                    [\"t\", g.x, g.y],\n                  ])),\n                    o.resetMatrix(),\n                    o.attr(Object(f.a)(Object(f.a)({}, g), { matrix: y }));\n                } else o.resetMatrix(), o.attr(g);\n                if (s)\n                  if (g.background) {\n                    var m = this.getLabelBgStyleByPosition(o, t, h, n),\n                      b = Object(f.a)(Object(f.a)({}, m), p);\n                    if ((s.resetMatrix(), v)) {\n                      var x = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                      (x = Oe(x, [\n                        [\"t\", -b.x, -b.y],\n                        [\"r\", v],\n                        [\"t\", b.x, b.y],\n                      ])),\n                        (b.matrix = x);\n                    }\n                    s.attr(b);\n                  } else n.removeChild(s);\n                else\n                  g.background &&\n                    ((s = this.drawLabelBg(t, n, o)).set(\"classname\", a),\n                    o.toFront());\n              } else {\n                this.drawLabel(t, n).set(\"className\", i);\n              }\n          },\n          afterUpdate: function (t, e) {},\n          setState: function (t, e, n) {\n            var r,\n              i,\n              o = n.get(\"keyShape\");\n            if (o && !o.destroyed) {\n              var a = n.getType(),\n                s = Object(c.isBoolean)(e) ? t : \"\".concat(t, \":\").concat(e),\n                u = this.getStateStyle(s, n),\n                h = n.getStateStyle(s);\n              if (h || u) {\n                var l = Object(c.mix)({}, h || u),\n                  f = n.getContainer(),\n                  d = { x: 1, y: 1, cx: 1, cy: 1 };\n                if (\n                  (\"combo\" === a && ((d.r = 1), (d.width = 1), (d.height = 1)),\n                  e)\n                ) {\n                  var p = function (t) {\n                    var e,\n                      n = l[t];\n                    if (Object(c.isPlainObject)(n) && !Me.includes(t)) {\n                      var r = f.find(function (e) {\n                        return e.get(\"name\") === t;\n                      });\n                      r && r.attr(n);\n                    } else o.attr((((e = {})[t] = n), e));\n                  };\n                  for (var g in l) p(g);\n                } else {\n                  var v = wt(n.getCurrentStatesStyle()),\n                    y = n.getModel(),\n                    m = Object(c.mix)({}, y.style, wt(n.getOriginStyle())),\n                    b = o.get(\"name\"),\n                    x = o.attr(),\n                    w = {};\n                  Object.keys(x).forEach(function (t) {\n                    if (\"img\" !== t) {\n                      var e = x[t];\n                      e && \"object\" === Se(e)\n                        ? (w[t] = Object(c.clone)(e))\n                        : (w[t] = e);\n                    }\n                  });\n                  var S = {},\n                    O = function (t) {\n                      var e = l[t];\n                      if (Object(c.isPlainObject)(e) && !Me.includes(t)) {\n                        var n = f.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        if (n) {\n                          var r = Object(c.clone)(n.attr());\n                          Object(c.each)(e, function (e, i) {\n                            if (t === b && w[i] && !d[i]) {\n                              delete w[i];\n                              var s = m[t][i] || Ce[a][i];\n                              o.attr(i, s);\n                            } else if (r[i] || 0 === r[i]) {\n                              delete r[i];\n                              var c = m[t][i] || Ce[a][i];\n                              n.attr(i, c);\n                            }\n                          }),\n                            (S[t] = r);\n                        }\n                      } else if (w[t] && !d[t]) {\n                        delete w[t];\n                        var i = m[t] || (m[b] ? m[b][t] : void 0) || Ce[a][t];\n                        o.attr(t, i);\n                      }\n                    };\n                  for (var M in l) O(M);\n                  for (var g in (b ? (S[b] = w) : Object(c.mix)(S, w), v))\n                    if (!d[g]) {\n                      var k = v[g];\n                      (Object(c.isPlainObject)(k) && !Me.includes(g)) ||\n                        (b\n                          ? (Object(c.mix)(m[b], (((i = {})[g] = k), i)),\n                            delete m[g])\n                          : Object(c.mix)(m, (((r = {})[g] = k), r)),\n                        delete v[g]);\n                    }\n                  var C = {};\n                  Object(c.deepMix)(C, m, S, v);\n                  var E = !1,\n                    j = function (t) {\n                      var e,\n                        n,\n                        r = C[t];\n                      if (Object(c.isPlainObject)(r) && !Me.includes(t)) {\n                        var i = f.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        i &&\n                          (t === b &&\n                            (\"combo\" === a &&\n                              (delete r.r, delete r.width, delete r.height),\n                            (E = !0)),\n                          i.attr(r));\n                      } else if (!E) {\n                        var s = r || Ce[a][t];\n                        \"combo\" === a\n                          ? b || o.attr((((e = {})[t] = s), e))\n                          : o.attr((((n = {})[t] = s), n));\n                      }\n                    };\n                  for (var P in C) j(P);\n                }\n              }\n            }\n          },\n          getStateStyle: function (t, e) {\n            var n = e.getModel(),\n              r = e.getType(),\n              i = this.getOptions(n),\n              o = i.stateStyles,\n              a = i.style,\n              s = void 0 === a ? {} : a,\n              u = n.stateStyles ? n.stateStyles[t] : o && o[t];\n            return \"combo\" === r ? Object(c.clone)(u) : Object(c.mix)({}, s, u);\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            return this.getOptions(t).anchorPoints;\n          },\n        },\n        je = {\n          itemType: \"node\",\n          shapeType: \"single-node\",\n          labelPosition: \"center\",\n          offset: nt.nodeLabel.offset,\n          getSize: function (t) {\n            var e = t.size || this.getOptions({}).size || nt.defaultNode.size;\n            return (\n              Object(c.isArray)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(c.isArray)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition;\n            if (\"center\" === n) return { x: 0, y: 0, text: t.label };\n            var r = e.offset;\n            Object(c.isNil)(r) && (r = this.offset);\n            var i,\n              o = this.getSize(t),\n              a = o[0],\n              s = o[1];\n            switch (n) {\n              case \"top\":\n                i = { x: 0, y: 0 - s / 2 - r, textBaseline: \"bottom\" };\n                break;\n              case \"bottom\":\n                i = { x: 0, y: s / 2 + r, textBaseline: \"top\" };\n                break;\n              case \"left\":\n                i = { x: 0 - a / 2 - r, y: 0, textAlign: \"right\" };\n                break;\n              default:\n                i = { x: a / 2 + r, y: 0, textAlign: \"left\" };\n            }\n            return (i.text = t.label), i;\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = Et(o.padding),\n              u = i.width + s[1] + s[3],\n              h = i.height + s[0] + s[2],\n              l = n.offset;\n            return (\n              Object(c.isNil)(l) && (l = this.offset),\n              (a = { x: i.minX - s[3], y: i.minY - s[0] }),\n              (a = Object(f.a)(Object(f.a)(Object(f.a)({}, a), o), {\n                width: u,\n                height: h,\n              }))\n            );\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"node-shape\",\n            });\n          },\n          updateLinkPoints: function (t, e) {\n            var n,\n              r = this.getOptions(t).linkPoints,\n              i = e.find(function (t) {\n                return \"link-point-left\" === t.get(\"className\");\n              }),\n              o = e.find(function (t) {\n                return \"link-point-right\" === t.get(\"className\");\n              }),\n              a = e.find(function (t) {\n                return \"link-point-top\" === t.get(\"className\");\n              }),\n              s = e.find(function (t) {\n                return \"link-point-bottom\" === t.get(\"className\");\n              });\n            i && (n = i.attr()),\n              o && !n && (n = o.attr()),\n              a && !n && (n = a.attr()),\n              s && !n && (n = s.attr()),\n              n || (n = r);\n            var u = Object(c.mix)({}, n, t.linkPoints),\n              h = u.fill,\n              l = u.stroke,\n              d = u.lineWidth,\n              p = u.size / 2;\n            p || (p = u.r);\n            var g = t.linkPoints\n                ? t.linkPoints\n                : { left: void 0, right: void 0, top: void 0, bottom: void 0 },\n              v = g.left,\n              y = g.right,\n              m = g.top,\n              b = g.bottom,\n              x = this.getSize(t),\n              w = x[0],\n              S = x[1],\n              O = { r: p, fill: h, stroke: l, lineWidth: d };\n            i\n              ? v || void 0 === v\n                ? i.attr(Object(f.a)(Object(f.a)({}, O), { x: -w / 2, y: 0 }))\n                : i.remove()\n              : v &&\n                e.addShape(\"circle\", {\n                  attrs: Object(f.a)(Object(f.a)({}, O), { x: -w / 2, y: 0 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n              o\n                ? (y || void 0 === y || o.remove(),\n                  o.attr(Object(f.a)(Object(f.a)({}, O), { x: w / 2, y: 0 })))\n                : y &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: w / 2, y: 0 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n              a\n                ? (m || void 0 === m || a.remove(),\n                  a.attr(Object(f.a)(Object(f.a)({}, O), { x: 0, y: -S / 2 })))\n                : m &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: 0, y: -S / 2 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n              s\n                ? b || void 0 === b\n                  ? s.attr(Object(f.a)(Object(f.a)({}, O), { x: 0, y: S / 2 }))\n                  : s.remove()\n                : b &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: 0, y: S / 2 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n          },\n          updateShape: function (t, e, n, r) {\n            e.get(\"keyShape\").attr(Object(f.a)({}, n)),\n              this.updateLabel(t, e),\n              r && this.updateIcon(t, e);\n          },\n          updateIcon: function (t, e) {\n            var n = this,\n              r = e.getContainer(),\n              i = this.getOptions(t).icon,\n              o = (t.icon ? t.icon : { show: void 0 }).show,\n              a = r.find(function (t) {\n                return t.get(\"className\") === \"\".concat(n.type, \"-icon\");\n              });\n            if (a)\n              if (o || void 0 === o) {\n                var s = Object(c.mix)({}, a.attr(), i),\n                  u = s.width,\n                  h = s.height;\n                a.attr(\n                  Object(f.a)(Object(f.a)({}, s), { x: -u / 2, y: -h / 2 }),\n                );\n              } else a.remove();\n            else if (o) {\n              (u = i.width), (h = i.height);\n              r.addShape(\"image\", {\n                attrs: Object(f.a)(Object(f.a)({}, i), {\n                  x: -u / 2,\n                  y: -h / 2,\n                }),\n                className: \"\".concat(this.type, \"-icon\"),\n                name: \"\".concat(this.type, \"-icon\"),\n              });\n              var l = r.find(function (t) {\n                return \"node-label\" === t.get(\"className\");\n              });\n              l && l.toFront();\n            }\n          },\n        },\n        Pe = Object(f.a)(Object(f.a)({}, Ee), je);\n      Wt.registerNode(\"single-node\", Pe);\n      var Ae = {\n          itemType: \"edge\",\n          labelPosition: \"center\",\n          refX: 0,\n          refY: 0,\n          labelAutoRotate: !1,\n          options: {\n            size: nt.defaultEdge.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: nt.defaultEdge.style.stroke,\n              lineAppendWidth: nt.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: nt.edgeLabel.style.fill,\n                fontSize: nt.edgeLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(f.a)({}, nt.edgeStateStyles),\n          },\n          getPath: function (t) {\n            var e = [];\n            return (\n              Object(c.each)(t, function (t, n) {\n                0 === n ? e.push([\"M\", t.x, t.y]) : e.push([\"L\", t.x, t.y]);\n              }),\n              e\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(c.mix)({}, e, n, t.style),\n              i = t.size || nt.defaultEdge.size,\n              o = (t = this.getPathPoints(t)).startPoint,\n              a = t.endPoint,\n              s = this.getControlPoints(t),\n              u = [o];\n            s && (u = u.concat(s)), u.push(a);\n            var h = this.getPath(u);\n            return Object(c.mix)(\n              {},\n              nt.defaultEdge.style,\n              { stroke: nt.defaultEdge.color, lineWidth: i, path: h },\n              r,\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = { stroke: t.color },\n              i =\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                }) || e.getKeyShape(),\n              o = t.size,\n              a = (t = this.getPathPoints(t)).startPoint,\n              s = t.endPoint,\n              u = this.getControlPoints(t),\n              h = [a];\n            u && (h = h.concat(u)), h.push(s);\n            var l = i.attr(),\n              f = Object(c.mix)({}, r, l, t.style),\n              d = t.sourceNode,\n              p = t.targetNode,\n              g = { radius: f.radius };\n            u ||\n              (g = {\n                source: d,\n                target: p,\n                offset: f.offset,\n                radius: f.radius,\n              }),\n              l.endArrow &&\n                !1 === f.endArrow &&\n                (t.style.endArrow = { path: \"\" }),\n              l.startArrow &&\n                !1 === f.startArrow &&\n                (t.style.startArrow = { path: \"\" });\n            var v = this.getPath(h, g),\n              y = Object(c.mix)(\n                r,\n                i.attr(),\n                { lineWidth: o, path: v },\n                t.style,\n              );\n            i && i.attr(y);\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            var r,\n              i = e.position || this.labelPosition,\n              o = {},\n              a =\n                n &&\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            r = \"start\" === i ? 0 : \"end\" === i ? 1 : 0.5;\n            var s,\n              u = e.refX || this.refX,\n              h = e.refY || this.refY;\n            if (\n              t.startPoint.x === t.endPoint.x &&\n              t.startPoint.y === t.endPoint.y\n            )\n              return (\n                (o.x = t.startPoint.x + u),\n                (o.y = t.startPoint.y + h),\n                (o.text = t.label),\n                o\n              );\n            s = Object(c.isNil)(e.autoRotate)\n              ? this.labelAutoRotate\n              : e.autoRotate;\n            var l = lt(a, r, u, h, s);\n            return (\n              (o.x = l.x),\n              (o.y = l.y),\n              (o.rotate = l.rotate),\n              (o.textAlign = this._getTextAlign(i, l.angle)),\n              (o.text = t.label),\n              o\n            );\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = o.padding,\n              u = i.width + s[1] + s[3],\n              h = i.height + s[0] + s[2],\n              l = n.position || this.labelPosition,\n              d = Object(f.a)(Object(f.a)({}, o), {\n                width: u,\n                height: h,\n                x: i.minX - s[2],\n                y: i.minY - s[0],\n                rotate: 0,\n              });\n            a = Object(c.isNil)(n.autoRotate)\n              ? this.labelAutoRotate\n              : n.autoRotate;\n            var p,\n              g =\n                r &&\n                r.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            p = \"start\" === l ? 0 : \"end\" === l ? 1 : 0.5;\n            var v = n.refX || this.refX,\n              y = n.refY || this.refY;\n            if (\n              e.startPoint.x === e.endPoint.x &&\n              e.startPoint.y === e.endPoint.y\n            )\n              return (\n                (d.x = e.startPoint.x + v - u / 2),\n                (d.y = e.startPoint.y + y - h / 2),\n                d\n              );\n            var m = lt(g, p, v - u / 2, y + h / 2, a),\n              b = m.angle;\n            return (\n              b > 0.5 * Math.PI &&\n                b < 1.5 * Math.PI &&\n                (m = lt(g, p, v + u / 2, y + h / 2, a)),\n              a && ((d.x = m.x), (d.y = m.y)),\n              (d.rotate = m.rotate),\n              d\n            );\n          },\n          _getTextAlign: function (t, e) {\n            var n = \"center\";\n            return e\n              ? ((e %= 2 * Math.PI),\n                \"center\" !== t &&\n                  (n =\n                    (e >= 0 && e <= Math.PI / 2) ||\n                    (e >= 1.5 * Math.PI && e < 2 * Math.PI)\n                      ? t\n                      : (function (t) {\n                          var e = t;\n                          return (\n                            \"start\" === t\n                              ? (e = \"end\")\n                              : \"end\" === t && (e = \"start\"),\n                            e\n                          );\n                        })(t)),\n                n)\n              : t;\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getPathPoints: function (t) {\n            return t;\n          },\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return e.addShape(\"path\", {\n              className: \"edge-shape\",\n              name: \"edge-shape\",\n              attrs: n,\n            });\n          },\n          drawLabel: function (t, e) {\n            var n,\n              r = this.options.labelCfg;\n            n =\n              (\"undefined\" != typeof window &&\n                void 0 !== window.getComputedStyle &&\n                window\n                  .getComputedStyle(document.body, null)\n                  .getPropertyValue(\"font-family\")) ||\n              \"Arial, sans-serif\";\n            var i = Object(c.deepMix)({ fontFamily: n }, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e),\n              a = o.rotate;\n            delete o.rotate;\n            var s = e.addShape(\"text\", { attrs: o, name: \"text-shape\" });\n            if ((a && s.rotateAtStart(a), o.background)) {\n              var u = this.drawLabelBg(t, e, s),\n                h = this.itemType + \"-label-bg\";\n              u.set(\"classname\", h), s.toFront();\n            }\n            return s;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(c.deepMix)({}, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e).rotate,\n              a = this.getLabelBgStyleByPosition(n, t, i, e);\n            delete a.rotate;\n            var s = e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: a });\n            return o && s.rotateAtStart(o), s;\n          },\n        },\n        Ie = Object(f.a)(Object(f.a)({}, Ee), Ae);\n      Wt.registerEdge(\"single-edge\", Ie),\n        Wt.registerEdge(\n          \"line\",\n          { getControlPoints: function () {} },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"spline\",\n          {\n            getPath: function (t) {\n              return te(t);\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"arc\",\n          {\n            curveOffset: 20,\n            clockwise: 1,\n            getControlPoints: function (t) {\n              var e,\n                n,\n                r = t.startPoint,\n                i = t.endPoint,\n                o = (r.x + i.x) / 2,\n                a = (r.y + i.y) / 2;\n              if (void 0 !== t.controlPoints) {\n                if (\n                  ((n = t.controlPoints[0]),\n                  (e = C(r, n, i)),\n                  r.x <= i.x && r.y > i.y\n                    ? (this.clockwise = e.x > n.x ? 0 : 1)\n                    : r.x <= i.x && r.y < i.y\n                    ? (this.clockwise = e.x > n.x ? 1 : 0)\n                    : r.x > i.x && r.y <= i.y\n                    ? (this.clockwise = e.y < n.y ? 0 : 1)\n                    : (this.clockwise = e.y < n.y ? 1 : 0),\n                  (n.x - r.x) / (n.y - r.y) == (i.x - r.x) / (i.y - r.y))\n                )\n                  return [];\n              } else {\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  Object(c.isArray)(t.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  t.curveOffset < 0\n                    ? (this.clockwise = 0)\n                    : (this.clockwise = 1);\n                var s = { x: i.x - r.x, y: i.y - r.y },\n                  u = Math.atan2(s.y, s.x);\n                (n = {\n                  x: t.curveOffset * Math.cos(-Math.PI / 2 + u) + o,\n                  y: t.curveOffset * Math.sin(-Math.PI / 2 + u) + a,\n                }),\n                  (e = C(r, n, i));\n              }\n              var h = E(r, e);\n              return [{ x: h, y: h }];\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                2 === t.length\n                  ? e.push([\"L\", t[1].x, t[1].y])\n                  : e.push([\n                      \"A\",\n                      t[1].x,\n                      t[1].y,\n                      0,\n                      0,\n                      this.clockwise,\n                      t[2].x,\n                      t[2].y,\n                    ]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"quadratic\",\n          {\n            curvePosition: 0.5,\n            curveOffset: -20,\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (!e || !e.length) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  void 0 === t.curvePosition &&\n                    (t.curvePosition = this.curvePosition),\n                  Object(c.isArray)(this.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  Object(c.isArray)(this.curvePosition) &&\n                    (t.curvePosition = t.curveOffset[0]),\n                  (e = [ee(n, r, t.curvePosition, t.curveOffset)]);\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"Q\", t[1].x, t[1].y, t[2].x, t[2].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"cubic\",\n          {\n            curvePosition: [0.5, 0.5],\n            curveOffset: [-20, 20],\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (\n                (void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.curvePosition &&\n                  (t.curvePosition = this.curvePosition),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]),\n                !e || !e.length || e.length < 2)\n              ) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                e = [\n                  ee(n, r, t.curvePosition[0], t.curveOffset[0]),\n                  ee(n, r, t.curvePosition[1], t.curveOffset[1]),\n                ];\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"C\", t[1].x, t[1].y, t[2].x, t[2].y, t[3].x, t[3].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"cubic-vertical\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.y - e.y,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x, y: e.y + r * this.curvePosition[0] + i[0] },\n                  { x: n.x, y: n.y - r * this.curvePosition[1] + i[1] },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Wt.registerEdge(\n          \"cubic-horizontal\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.x - e.x,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x + r * this.curvePosition[0] + i[0], y: e.y },\n                  { x: n.x - r * this.curvePosition[1] + i[1], y: n.y },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Wt.registerEdge(\n          \"loop\",\n          {\n            getPathPoints: function (t) {\n              return ht(t);\n            },\n            getControlPoints: function (t) {\n              return t.controlPoints;\n            },\n            afterDraw: function (t) {\n              t.controlPoints = void 0;\n            },\n            afterUpdate: function (t) {\n              t.controlPoints = void 0;\n            },\n          },\n          \"cubic\",\n        );\n      var Te = {\n          itemType: \"combo\",\n          shapeType: \"single-combo\",\n          labelPosition: \"top\",\n          refX: nt.comboLabel.refX,\n          refY: nt.comboLabel.refY,\n          options: {\n            style: {\n              stroke: nt.defaultCombo.style.stroke,\n              fill: nt.defaultCombo.style.fill,\n              lineWidth: nt.defaultCombo.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: nt.comboLabel.style.fill,\n                fontSize: nt.comboLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(f.a)({}, nt.comboStateStyles),\n          },\n          getSize: function (t) {\n            var e = Object(c.clone)(\n              t.size || this.options.size || nt.defaultCombo.size,\n            );\n            return (\n              Object(c.isArray)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(c.isArray)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition,\n              r = t.style,\n              i = t.padding || this.options.padding;\n            Object(c.isArray)(i) && (i = i[0]);\n            var o = e.refX,\n              a = e.refY;\n            Object(c.isNil)(o) && (o = this.refX),\n              Object(c.isNil)(a) && (a = this.refY);\n            var s,\n              u = this.getSize(t),\n              h = (Math.max(r.r, u[0] / 2) || u[0] / 2) + i;\n            switch (n) {\n              case \"top\":\n                s = {\n                  x: 0,\n                  y: -h - a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"bottom\":\n                s = {\n                  x: 0,\n                  y: h + a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"left\":\n                s = { x: -h + o, y: 0, textAlign: \"left\" };\n                break;\n              case \"center\":\n                s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                break;\n              default:\n                s = { x: h + o, y: 0, textAlign: \"right\" };\n            }\n            return (s.text = t.label), s;\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"combo-shape\",\n            });\n          },\n          updateShape: function (t, e, n) {\n            var r = e.get(\"keyShape\");\n            (void 0 === t.animate ? this.options.animate : t.animate) &&\n            r.animate\n              ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n              : r.attr(Object(f.a)({}, n)),\n              this.updateLabel(t, e);\n          },\n        },\n        Ne = Object(f.a)(Object(f.a)({}, Ee), Te);\n      Wt.registerCombo(\"single-combo\", Ne),\n        Wt.registerCombo(\n          \"circle\",\n          {\n            options: {\n              size: [nt.defaultCombo.size[0], nt.defaultCombo.size[0]],\n              padding: nt.defaultCombo.padding[0],\n              animate: !0,\n              style: {\n                stroke: nt.defaultCombo.style.stroke,\n                fill: nt.defaultCombo.style.fill,\n                lineWidth: nt.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.comboLabel.style.fill,\n                  fontSize: nt.comboLabel.style.fontSize,\n                },\n                refX: 0,\n                refY: 0,\n              },\n              stateStyles: Object(f.a)({}, nt.comboStateStyles),\n            },\n            shapeType: \"circle\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return (\n                delete n.height,\n                delete n.width,\n                e.addShape(\"circle\", {\n                  attrs: n,\n                  className: \"circle-combo\",\n                  name: \"circle-combo\",\n                  draggable: !0,\n                })\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(c.isArray)(n) && (n = n[0]);\n              var r,\n                i = { stroke: t.color },\n                o = Object(c.mix)({}, e, i, t.style);\n              if (t.fixSize)\n                r = Object(c.isNumber)(t.fixSize) ? t.fixSize : t.fixSize[0];\n              else {\n                var a = this.getSize(t);\n                r =\n                  !Object(c.isNumber)(o.r) || isNaN(o.r)\n                    ? a[0] / 2 || nt.defaultCombo.style.r\n                    : Math.max(o.r, a[0] / 2) || a[0] / 2;\n              }\n              o.r = r + n;\n              var s = Object(f.a)({ x: 0, y: 0 }, o);\n              return t.style ? (t.style.r = r) : (t.style = { r: r }), s;\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(c.isArray)(r) && (r = r[0]);\n              var i,\n                o = Object(c.clone)(t.style);\n              (i = t.fixSize\n                ? Object(c.isNumber)(t.fixSize)\n                  ? t.fixSize\n                  : t.fixSize[0]\n                : Math.max(o.r, n[0] / 2) || n[0] / 2),\n                (o.r = i + r);\n              var a = e.get(\"sizeCache\");\n              a && (a.r = o.r);\n              var s = { stroke: t.color },\n                u = e.get(\"keyShape\"),\n                h = Object(c.mix)({}, u.attr(), s, o);\n              t.style ? (t.style.r = i) : (t.style = { r: i }),\n                this.updateShape(t, e, h, !0);\n            },\n          },\n          \"single-combo\",\n        ),\n        Wt.registerCombo(\n          \"rect\",\n          {\n            options: {\n              size: [40, 5],\n              padding: [25, 20, 15, 20],\n              animate: !0,\n              style: {\n                radius: 0,\n                stroke: nt.defaultCombo.style.stroke,\n                fill: nt.defaultCombo.style.fill,\n                lineWidth: nt.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.comboLabel.style.fill,\n                  fontSize: nt.comboLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(f.a)({}, nt.comboStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"rect-combo\",\n                name: \"rect-combo\",\n                draggable: !0,\n              });\n            },\n            getLabelStyleByPosition: function (t, e) {\n              var n = e.position || this.labelPosition,\n                r = t.style,\n                i = t.padding || this.options.padding;\n              Object(c.isNumber)(i) && (i = [i, i, i, i]);\n              var o = e.refX,\n                a = e.refY;\n              Object(c.isNil)(o) && (o = this.refX),\n                Object(c.isNil)(a) && (a = this.refY);\n              var s,\n                u = r.width / 2 + i[3],\n                h = r.height / 2 + i[0];\n              switch (n) {\n                case \"top\":\n                  s = {\n                    x: 0 - u + o,\n                    y: 0 - h + a,\n                    textBaseline: \"top\",\n                    textAlign: \"left\",\n                  };\n                  break;\n                case \"bottom\":\n                  s = {\n                    x: 0,\n                    y: h + a,\n                    textBaseline: \"bottom\",\n                    textAlign: \"center\",\n                  };\n                  break;\n                case \"left\":\n                  s = { x: 0 - u + a, y: 0, textAlign: \"left\" };\n                  break;\n                case \"center\":\n                  s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                  break;\n                default:\n                  s = { x: u + o, y: 0, textAlign: \"right\" };\n              }\n              return (s.text = t.label), s;\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(c.isNumber)(n) && (n = [n, n, n, n]);\n              var r,\n                i,\n                o = { stroke: t.color },\n                a = Object(c.mix)({}, e, o, t.style),\n                s = this.getSize(t),\n                u =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              u\n                ? Object(c.isNumber)(u)\n                  ? ((r = u), (i = u))\n                  : ((r = u[0]), (i = u[1]))\n                : ((r =\n                    !Object(c.isNumber)(a.width) || isNaN(a.width)\n                      ? s[0] || nt.defaultCombo.style.width\n                      : Math.max(a.width, s[0]) || s[0]),\n                  (i =\n                    !Object(c.isNumber)(a.height) || isNaN(a.height)\n                      ? s[1] || nt.defaultCombo.style.height\n                      : Math.max(a.height, s[1]) || s[1]));\n              var h = -r / 2 - n[3],\n                l = -i / 2 - n[0];\n              (a.width = r + n[1] + n[3]), (a.height = i + n[0] + n[2]);\n              var d = Object(f.a)({ x: h, y: l }, a);\n              return (\n                t.style\n                  ? ((t.style.width = r), (t.style.height = i))\n                  : (t.style = { width: r, height: i }),\n                d\n              );\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(c.isNumber)(r) && (r = [r, r, r, r]);\n              var i,\n                o,\n                a = Object(c.clone)(t.style),\n                s =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              s\n                ? Object(c.isNumber)(s)\n                  ? ((i = s), (o = s))\n                  : ((i = s[0]), (o = s[1]))\n                : ((i = Math.max(a.width, n[0]) || n[0]),\n                  (o = Math.max(a.height, n[1]) || n[1])),\n                (a.width = i + r[1] + r[3]),\n                (a.height = o + r[0] + r[2]);\n              var u = e.get(\"sizeCache\");\n              u && ((u.width = a.width), (u.height = a.height)),\n                (a.x = -i / 2 - r[3]),\n                (a.y = -o / 2 - r[0]);\n              var h = { stroke: t.color },\n                l = e.get(\"keyShape\"),\n                f = Object(c.mix)({}, l.attr(), h, a);\n              t.style\n                ? ((t.style.width = i), (t.style.height = o))\n                : (t.style = { width: i, height: o }),\n                this.updateShape(t, e, f, !1);\n            },\n            updateShape: function (t, e, n) {\n              var r = e.get(\"keyShape\");\n              (void 0 === t.animate ? this.options.animate : t.animate) &&\n              r.animate\n                ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n                : r.attr(Object(f.a)({}, n)),\n                this.updateLabel(t, e);\n            },\n          },\n          \"single-combo\",\n        ),\n        Wt.registerNode(\n          \"simple-circle\",\n          {\n            options: {\n              size: nt.defaultNode.size,\n              style: {\n                x: 0,\n                y: 0,\n                stroke: nt.defaultNode.style.stroke,\n                fill: nt.defaultNode.style.fill,\n                lineWidth: nt.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.nodeLabel.style.fill,\n                  fontSize: nt.nodeLabel.style.fontSize,\n                },\n              },\n              stateStyles: Object(f.a)({}, nt.nodeStateStyles),\n            },\n            shapeType: \"simple-circle\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"circle\", {\n                attrs: n,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(c.deepMix)({}, e, n),\n                i = this.getSize(t)[0] / 2;\n              return Object(f.a)({ x: 0, y: 0, r: i }, r);\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = { stroke: t.color, r: n[0] / 2 },\n                i = e.get(\"keyShape\"),\n                o = Object(c.deepMix)({}, i.attr(), r, t.style);\n              this.updateShape(t, e, o, !0);\n            },\n          },\n          \"single-node\",\n        ),\n        Wt.registerNode(\n          \"simple-rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: nt.defaultNode.style.stroke,\n                fill: nt.defaultNode.style.fill,\n                lineWidth: nt.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.nodeLabel.style.fill,\n                  fontSize: nt.nodeLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(f.a)({}, nt.nodeStateStyles),\n            },\n            shapeType: \"simple-rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                name: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(c.mix)({}, e, n),\n                i = this.getSize(t),\n                o = r.width || i[0],\n                a = r.height || i[1];\n              return Object(f.a)(\n                { x: -o / 2, y: -a / 2, width: o, height: a },\n                r,\n              );\n            },\n            update: function (t, e) {\n              e.getContainer();\n              var n = this.getOptions({}).style,\n                r = this.getSize(t),\n                i = e.get(\"keyShape\");\n              t.size ||\n                ((r[0] = i.attr(\"width\") || n.width),\n                (r[1] = i.attr(\"height\") || n.height));\n              var o = {\n                  stroke: t.color,\n                  x: -r[0] / 2,\n                  y: -r[1] / 2,\n                  width: r[0],\n                  height: r[1],\n                },\n                a = Object(c.mix)({}, n, i.attr(), o);\n              (a = Object(c.mix)(a, t.style)), this.updateShape(t, e, a, !1);\n            },\n          },\n          \"single-node\",\n        ),\n        Wt.registerNode(\n          \"image\",\n          {\n            options: {\n              img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ\",\n              size: 200,\n              clipCfg: {\n                show: !1,\n                type: \"circle\",\n                r: 50,\n                rx: 50,\n                ry: 35,\n                width: 50,\n                height: 35,\n                points: [\n                  [30, 12],\n                  [12, 30],\n                  [30, 48],\n                  [48, 30],\n                ],\n                path: [\n                  [\"M\", 25, 25],\n                  [\"L\", 50, 25],\n                  [\"A\", 12.5, 12.5, 0, 1, 1, 50, 50],\n                  [\"A\", 12.5, 12.5, 0, 1, 0, 50, 50],\n                  [\"L\", 25, 75],\n                  [\"Z\"],\n                ],\n                x: 0,\n                y: 0,\n              },\n            },\n            shapeType: \"image\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.shapeType,\n                r = this.getShapeStyle(t);\n              delete r.fill;\n              var i = e.addShape(n, {\n                attrs: r,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                name: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n              return this.drawClip(t, i), i;\n            },\n            drawClip: function (t, e) {\n              var n = this.getOptions(t).clipCfg;\n              if (n.show) {\n                var r = n.type,\n                  i = n.x,\n                  o = n.y,\n                  a = n.style;\n                if (\"circle\" === r) {\n                  var s = n.r;\n                  e.setClip({\n                    type: \"circle\",\n                    attrs: Object(f.a)({ r: s, x: i, y: o }, a),\n                  });\n                } else if (\"rect\" === r) {\n                  var c = n.width,\n                    u = n.height,\n                    h = i - c / 2,\n                    l = o - u / 2;\n                  e.setClip({\n                    type: \"rect\",\n                    attrs: Object(f.a)({ x: h, y: l, width: c, height: u }, a),\n                  });\n                } else if (\"ellipse\" === r) {\n                  var d = n.rx,\n                    p = n.ry;\n                  e.setClip({\n                    type: \"ellipse\",\n                    attrs: Object(f.a)({ x: i, y: o, rx: d, ry: p }, a),\n                  });\n                } else if (\"polygon\" === r) {\n                  var g = n.points;\n                  e.setClip({\n                    type: \"polygon\",\n                    attrs: Object(f.a)({ points: g }, a),\n                  });\n                } else if (\"path\" === r) {\n                  var v = n.path;\n                  e.setClip({\n                    type: \"path\",\n                    attrs: Object(f.a)({ path: v }, a),\n                  });\n                }\n              }\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = this.getSize(t),\n                r = this.getOptions(t).img,\n                i = n[0],\n                o = n[1];\n              return (\n                e && ((i = e.width || n[0]), (o = e.height || n[1])),\n                Object(f.a)(\n                  { x: -i / 2, y: -o / 2, width: i, height: o, img: r },\n                  e,\n                )\n              );\n            },\n            updateShapeStyle: function (t, e) {\n              var n = e.getContainer(),\n                r = \"\".concat(this.itemType, \"-shape\"),\n                i =\n                  n.find(function (t) {\n                    return t.get(\"className\") === r;\n                  }) || e.getKeyShape(),\n                o = this.getShapeStyle(t);\n              i && i.attr(o);\n            },\n          },\n          \"single-node\",\n        );\n      var Be,\n        Le = {\n          triangle: function (t, e, n) {\n            void 0 === t && (t = 10),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 L \")\n              .concat(r + e, \",-\")\n              .concat(t / 2, \" L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          vee: function (t, e, n) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 20),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 L \")\n              .concat(r + e, \",-\")\n              .concat(t / 2, \"\\n        L \")\n              .concat(r + (2 * e) / 3, \",0 L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          circle: function (t, e) {\n            return (\n              void 0 === t && (t = 5),\n              void 0 === e && (e = 0),\n              \"M \"\n                .concat(2 * e, \", 0\\n            a \")\n                .concat(t, \",\")\n                .concat(t, \" 0 1,0 \")\n                .concat(2 * t, \",0\\n            a \")\n                .concat(t, \",\")\n                .concat(t, \" 0 1,0 \")\n                .concat(2 * -t, \",0\")\n            );\n          },\n          rect: function (t, e, n) {\n            void 0 === t && (t = 10),\n              void 0 === e && (e = 10),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" \\n        L \")\n              .concat(r, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          diamond: function (t, e, n) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 \\n        L \")\n              .concat(r + e / 2, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",0 \\n        L \")\n              .concat(r + e / 2, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          triangleRect: function (t, e, n, r, i, o) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 15),\n              void 0 === r && (r = 3),\n              void 0 === i && (i = 5),\n              void 0 === o && (o = 0);\n            var a = 2 * o,\n              s = a + e + i;\n            return \"M \"\n              .concat(a, \",0 L \")\n              .concat(a + e, \",-\")\n              .concat(t / 2, \" L \")\n              .concat(a + e, \",\")\n              .concat(t / 2, \" Z\\n            M \")\n              .concat(s, \", -\")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s + r, \" -\")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s + r, \" \")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s, \" \")\n              .concat(n / 2, \"\\n            Z\");\n          },\n        },\n        De = {\n          collapse: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"a\", n, n, 0, 1, 0, 2 * n, 0],\n              [\"a\", n, n, 0, 1, 0, 2 * -n, 0],\n              [\"M\", t - n + 4, e],\n              [\"L\", t + n - 4, e],\n            ];\n          },\n          expand: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"a\", n, n, 0, 1, 0, 2 * n, 0],\n              [\"a\", n, n, 0, 1, 0, 2 * -n, 0],\n              [\"M\", t - n + 4, e],\n              [\"L\", t - n + 2 * n - 4, e],\n              [\"M\", t - n + n, e - n + 4],\n              [\"L\", t, e + n - 4],\n            ];\n          },\n          upTriangle: function (t, e, n) {\n            var r = n * Math.cos(Math.PI / 6),\n              i = n * Math.sin(Math.PI / 6);\n            return [\n              [\"M\", t - r, e + i],\n              [\"L\", t + r, e + i],\n              [\"L\", t, e - n],\n              [\"Z\"],\n            ];\n          },\n          downTriangle: function (t, e, n) {\n            var r = n * Math.cos(Math.PI / 6),\n              i = n * Math.sin(Math.PI / 6);\n            return [\n              [\"M\", t - r, e - i],\n              [\"L\", t + r, e - i],\n              [\"L\", t, e + n],\n              [\"Z\"],\n            ];\n          },\n        },\n        _e = Wt,\n        Re = [\n          \"#5F95FF\",\n          \"#61DDAA\",\n          \"#65789B\",\n          \"#F6BD16\",\n          \"#7262FD\",\n          \"#78D3F8\",\n          \"#9661BC\",\n          \"#F6903D\",\n          \"#008685\",\n          \"#F08BB4\",\n        ],\n        Fe = g.a.transform,\n        Ye = Object(f.a)(\n          Object(f.a)(\n            Object(f.a)(Object(f.a)(Object(f.a)(Object(f.a)({}, o), i), a), r),\n            s,\n          ),\n          { transform: Fe, mat3: g.b },\n        ),\n        Xe = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.layoutCfg = t.get(\"layout\") || {}),\n              (this.layoutType = this.getLayoutType()),\n              (this.layoutMethods = []),\n              this.initLayout();\n          }\n          return (\n            (t.prototype.initLayout = function () {}),\n            (t.prototype.getLayoutType = function () {\n              return this.getLayoutCfgType(this.layoutCfg);\n            }),\n            (t.prototype.getLayoutCfgType = function (t) {\n              var e = t.type;\n              if (e) return e;\n              var n = t.pipes;\n              return Array.isArray(n)\n                ? n.map(function (t) {\n                    return (null == t ? void 0 : t.type) || \"\";\n                  })\n                : null;\n            }),\n            (t.prototype.isLayoutTypeSame = function (t) {\n              var e = this.getLayoutCfgType(t);\n              return Array.isArray(this.layoutType)\n                ? this.layoutType.every(function (t, n) {\n                    return t === e[n];\n                  })\n                : (null == t ? void 0 : t.type) === this.layoutType;\n            }),\n            (t.prototype.refreshLayout = function () {\n              var t = this.graph;\n              t &&\n                (t.get(\"animate\")\n                  ? t.positionsAnimate()\n                  : t.refreshPositions());\n            }),\n            (t.prototype.changeLayout = function (t) {\n              (this.layoutCfg = t), this.destoryLayoutMethods(), this.layout();\n            }),\n            (t.prototype.changeData = function () {\n              this.destoryLayoutMethods(), this.layout();\n            }),\n            (t.prototype.destoryLayoutMethods = function () {\n              var t = this.layoutMethods;\n              null == t ||\n                t.forEach(function (t) {\n                  t.destroy();\n                }),\n                (this.layoutMethods = []);\n            }),\n            (t.prototype.destroyLayout = function () {\n              var t = this.graph;\n              this.destoryLayoutMethods(),\n                t.set(\"layout\", void 0),\n                (this.layoutCfg = void 0),\n                (this.layoutType = void 0),\n                (this.layoutMethods = void 0);\n            }),\n            (t.prototype.setDataFromGraph = function () {\n              for (\n                var t = [],\n                  e = [],\n                  n = [],\n                  r = [],\n                  i = [],\n                  o = [],\n                  a = this.graph.getNodes(),\n                  s = this.graph.getEdges(),\n                  c = this.graph.getCombos(),\n                  u = a.length,\n                  h = 0;\n                h < u;\n                h++\n              ) {\n                var l = a[h];\n                if (l && !l.destroyed) {\n                  var f = l.getModel();\n                  l.isVisible() ? t.push(f) : e.push(f);\n                }\n              }\n              var d = s.length;\n              for (h = 0; h < d; h++) {\n                var p = s[h];\n                if (p && !p.destroyed) {\n                  f = p.getModel();\n                  p.isVisible()\n                    ? f.isComboEdge\n                      ? i.push(f)\n                      : n.push(f)\n                    : r.push(f);\n                }\n              }\n              var g = c.length;\n              for (h = 0; h < g; h++) {\n                var v = c[h];\n                if (!v.destroyed) {\n                  f = v.getModel();\n                  v.isVisible() ? o.push(f) : r.push(f);\n                }\n              }\n              return {\n                nodes: t,\n                hiddenNodes: e,\n                edges: n,\n                hiddenEdges: r,\n                combos: o,\n                hiddenCombos: [],\n                comboEdges: i,\n              };\n            }),\n            (t.prototype.reLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = null == e ? void 0 : e.type;\n                (e.onLayoutEnd = function () {\n                  o.emit(\"aftersublayout\", { type: a }), r();\n                }),\n                  t.init(n.data),\n                  \"force\" === a && ((t.ticking = !1), t.forceSimulation.stop()),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  t.execute(),\n                  t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n              });\n            }),\n            (t.prototype.relayout = function (t) {\n              var e = this,\n                n = this.graph,\n                r = this.layoutMethods,\n                i = this.layoutCfg;\n              if (t) {\n                this.data = this.setDataFromGraph();\n                var o = this.data.nodes;\n                if (!o) return !1;\n                this.initPositions(i.center, o);\n              }\n              n.emit(\"beforelayout\");\n              var a = Promise.resolve();\n              null == r ||\n                r.forEach(function (t, n) {\n                  var r = i[n];\n                  a = a.then(function () {\n                    return e.reLayoutMethod(t, r);\n                  });\n                }),\n                a\n                  .then(function () {\n                    i.onAllLayoutEnd && i.onAllLayoutEnd();\n                  })\n                  .catch(function (t) {\n                    console.warn(\"relayout failed\", t);\n                  });\n            }),\n            (t.prototype.filterLayoutData = function (t, e) {\n              var n,\n                r,\n                i = t.nodes,\n                o = t.edges,\n                a = Object(f.e)(t, [\"nodes\", \"edges\"]);\n              if (!i) return t;\n              if (\n                ((n = Object(c.isFunction)(null == e ? void 0 : e.nodesFilter)\n                  ? e.nodesFilter\n                  : function () {\n                      return !0;\n                    }),\n                Object(c.isFunction)(null == e ? void 0 : e.edgesFilter))\n              )\n                r = e.edgesFilter;\n              else {\n                var s = i.reduce(function (t, e) {\n                  return (t[e.id] = !0), t;\n                }, {});\n                r = function (t) {\n                  return s[t.source] && s[t.target];\n                };\n              }\n              return Object(f.a)({ nodes: i.filter(n), edges: o.filter(r) }, a);\n            }),\n            (t.prototype.getLayoutBBox = function (t) {\n              var e = this.graph,\n                n = Object(c.groupBy)(e.getNodes(), function (t) {\n                  return t.getModel().layoutOrder;\n                }),\n                r = Object.values(n).map(function (t) {\n                  var e = It(t);\n                  return (e.size = [e.width, e.height]), e;\n                });\n              return {\n                groupNodes: Object.values(Object(c.groupBy)(t, \"layoutOrder\")),\n                layoutNodes: r,\n              };\n            }),\n            (t.prototype.layoutAnimate = function () {}),\n            (t.prototype.moveToZero = function () {\n              var t = this.graph.get(\"data\").nodes;\n              if (void 0 !== t[0].x && null !== t[0].x && !At(t[0].x)) {\n                for (var e = [0, 0], n = t.length, r = 0; r < n; r++) {\n                  var i = t[r];\n                  (e[0] += i.x), (e[1] += i.y);\n                }\n                (e[0] /= t.length), (e[1] /= t.length);\n                for (r = 0; r < n; r++) {\n                  ((i = t[r]).x -= e[0]), (i.y -= e[1]);\n                }\n              }\n            }),\n            (t.prototype.initPositions = function (t, e) {\n              var n = this.graph;\n              if (!e) return !1;\n              var r = e ? e.length : 0;\n              if (r) {\n                var i = 0.85 * n.get(\"width\"),\n                  o = 0.85 * n.get(\"height\"),\n                  a = Math.ceil(Math.sqrt(r) * (i / o)),\n                  s = i / (a - 1),\n                  c = o / (Math.ceil(r / a) - 1);\n                (isFinite(s) && s) || (s = 0), (isFinite(c) && s) || (c = 0);\n                for (\n                  var u = t[0] - i / 2, h = t[1] - o / 2, l = !0, f = 0;\n                  f < r;\n                  f++\n                ) {\n                  var d = e[f];\n                  At(d.x) && ((l = !1), (d.x = (f % a) * s + u)),\n                    At(d.y) && ((l = !1), (d.y = Math.floor(f / a) * c + h));\n                }\n                return l;\n              }\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                this.destoryLayoutMethods(),\n                (this.destroyed = !0);\n            }),\n            (t.prototype.onTick = function (t) {\n              var e;\n              null === (e = this.layoutMethods) ||\n                void 0 === e ||\n                e.forEach(function (e) {\n                  var n;\n                  null === (n = null == e ? void 0 : e.onTick) ||\n                    void 0 === n ||\n                    n.call(e, t);\n                });\n            }),\n            t\n          );\n        })(),\n        ze = function (t) {\n          (this.graph = t), (this.destroyed = !1), this.initEvents();\n        };\n      !(function (t) {\n        (t.CLICK = \"click\"),\n          (t.DBLCLICK = \"dblclick\"),\n          (t.TAP = \"tap\"),\n          (t.DBLTAP = \"dbltap\"),\n          (t.DRAGSTART = \"dragstart\"),\n          (t.DRAGEND = \"dragend\"),\n          (t.DRAG = \"drag\"),\n          (t.DRAGENTER = \"dragenter\"),\n          (t.DRAGLEAVE = \"dragleave\"),\n          (t.DRAGOVER = \"dragover\"),\n          (t.DRAGOUT = \"dragout\"),\n          (t.DDROP = \"drop\"),\n          (t.PINCHSTART = \"pinchstart\"),\n          (t.PINCHMOVE = \"pinchmove\"),\n          (t.PANSTART = \"panstart\"),\n          (t.PANMOVE = \"panmove\"),\n          (t.PANEND = \"panend\"),\n          (t.PRESS = \"press\"),\n          (t.ACTION_END = \"actionend\"),\n          (t.TOUCHSTART = \"touchstart\"),\n          (t.TOUCHMOVE = \"touchmove\"),\n          (t.TOUCHEND = \"touchend\"),\n          (t.CANVAS_TOUCHSTART = \"canvas:touchstart\"),\n          (t.CANVAS_TOUCHMOVE = \"canvas:touchmove\"),\n          (t.CANVAS_TOUCHEND = \"canvas:touchend\"),\n          (t.NODE_TOUCHSTART = \"node:touchstart\"),\n          (t.NODE_TOUCHMOVE = \"node:touchmove\"),\n          (t.NODE_TOUCHEND = \"node:touchend\"),\n          (t.COMBO_TOUCHSTART = \"combo:touchstart\"),\n          (t.COMBO_TOUCHMOVE = \"combo:touchmove\"),\n          (t.COMBO_TOUCHEND = \"combo:touchend\"),\n          (t.EDGE_TOUCHSTART = \"edge:touchstart\"),\n          (t.EDGE_TOUCHMOVE = \"edge:touchmove\"),\n          (t.EDGE_TOUCHEND = \"edge:touchend\"),\n          (t.NODE_CLICK = \"node:click\"),\n          (t.NODE_DBLCLICK = \"node:dblclick\"),\n          (t.NODE_DROP = \"node:drop\"),\n          (t.NODE_DRAGOVER = \"node:dragover\"),\n          (t.NODE_DRAGENTER = \"node:dragenter\"),\n          (t.NODE_DRAGLEAVE = \"node:dragleave\"),\n          (t.NODE_DRAGSTART = \"node:dragstart\"),\n          (t.NODE_DRAG = \"node:drag\"),\n          (t.NODE_DRAGEND = \"node:dragend\"),\n          (t.NODE_TAP = \"node:tap\"),\n          (t.NODE_DBLTAP = \"node:dbltap\"),\n          (t.NODE_PANSTART = \"node:panstart\"),\n          (t.NODE_PANMOVE = \"node:panmove\"),\n          (t.NODE_PANEND = \"node:panend\"),\n          (t.NODE_PRESS = \"node:press\"),\n          (t.COMBO_CLICK = \"combo:click\"),\n          (t.COMBO_DBLCLICK = \"combo:dblclick\"),\n          (t.COMBO_DROP = \"combo:drop\"),\n          (t.COMBO_DRAGOVER = \"combo:dragover\"),\n          (t.COMBO_DRAGENTER = \"combo:dragenter\"),\n          (t.COMBO_DRAGLEAVE = \"combo:dragleave\"),\n          (t.COMBO_DRAGSTART = \"combo:dragstart\"),\n          (t.COMBO_DRAG = \"combo:drag\"),\n          (t.COMBO_DRAGEND = \"combo:dragend\"),\n          (t.COMBO_TAP = \"combo:tap\"),\n          (t.COMBO_DBLTAP = \"combo:dbltap\"),\n          (t.COMBO_PANSTART = \"combo:panstart\"),\n          (t.COMBO_PANMOVE = \"combo:panmove\"),\n          (t.COMBO_PANEND = \"combo:panend\"),\n          (t.COMBO_PRESS = \"combo:press\"),\n          (t.EDGE_CLICK = \"edge:click\"),\n          (t.EDGE_DBLCLICK = \"edge:dblclick\"),\n          (t.EDGE_DROP = \"edge:drop\"),\n          (t.EDGE_DRAGOVER = \"edge:dragover\"),\n          (t.EDGE_DRAGENTER = \"edge:dragenter\"),\n          (t.EDGE_DRAGLEAVE = \"edge:dragleave\"),\n          (t.EDGE_TAP = \"edge:tap\"),\n          (t.EDGE_DBLTAP = \"edge:dbltap\"),\n          (t.EDGE_PRESS = \"edge:press\"),\n          (t.CANVAS_CLICK = \"canvas:click\"),\n          (t.CANVAS_DBLCLICK = \"canvas:dblclick\"),\n          (t.CANVAS_DROP = \"canvas:drop\"),\n          (t.CANVAS_DRAGENTER = \"canvas:dragenter\"),\n          (t.CANVAS_DRAGLEAVE = \"canvas:dragleave\"),\n          (t.CANVAS_DRAGSTART = \"canvas:dragstart\"),\n          (t.CANVAS_DRAG = \"canvas:drag\"),\n          (t.CANVAS_DRAGEND = \"canvas:dragend\"),\n          (t.CANVAS_TAP = \"canvas:tap\"),\n          (t.CANVAS_DBLTAP = \"canvas:dbltap\"),\n          (t.CANVAS_PANSTART = \"canvas:panstart\"),\n          (t.CANVAS_PANMOVE = \"canvas:panmove\"),\n          (t.CANVAS_PANEND = \"canvas:panend\"),\n          (t.CANVAS_PRESS = \"canvas:press\"),\n          (t.BEFORERENDER = \"beforerender\"),\n          (t.AFTERRENDER = \"afterrender\"),\n          (t.BEFOREADDITEM = \"beforeadditem\"),\n          (t.AFTERADDITEM = \"afteradditem\"),\n          (t.BEFOREREMOVEITEM = \"beforeremoveitem\"),\n          (t.AFTERREMOVEITEM = \"afterremoveitem\"),\n          (t.BEFOREUPDATEITEM = \"beforeupdateitem\"),\n          (t.AFTERUPDATEITEM = \"afterupdateitem\"),\n          (t.BEFOREITEMVISIBILITYCHANGE = \"beforeitemvisibilitychange\"),\n          (t.AFTERITEMVISIBILITYCHANGE = \"afteritemvisibilitychange\"),\n          (t.BEFOREITEMSTATECHANGE = \"beforeitemstatechange\"),\n          (t.AFTERITEMSTATECHANGE = \"afteritemstatechange\"),\n          (t.BEFOREITEMREFRESH = \"beforeitemrefresh\"),\n          (t.AFTERITEMREFRESH = \"afteritemrefresh\"),\n          (t.BEFOREITEMSTATESCLEAR = \"beforeitemstatesclear\"),\n          (t.AFTERITEMSTATESCLEAR = \"afteritemstatesclear\"),\n          (t.BEFOREMODECHANGE = \"beforemodechange\"),\n          (t.AFTERMODECHANGE = \"aftermodechange\"),\n          (t.BEFORELAYOUT = \"beforelayout\"),\n          (t.AFTERLAYOUT = \"afterlayout\"),\n          (t.BEFORECREATEEDGE = \"beforecreateedge\"),\n          (t.AFTERCREATEEDGE = \"aftercreateedge\"),\n          (t.BEFOREGRAPHREFRESHPOSITION = \"beforegraphrefreshposition\"),\n          (t.AFTERGRAPHREFRESHPOSITION = \"aftergraphrefreshposition\"),\n          (t.BEFOREGRAPHREFRESH = \"beforegraphrefresh\"),\n          (t.AFTERGRAPHREFRESH = \"aftergraphrefresh\"),\n          (t.BEFOREANIMATE = \"beforeanimate\"),\n          (t.AFTERANIMATE = \"afteranimate\"),\n          (t.BEFOREPAINT = \"beforepaint\"),\n          (t.AFTERPAINT = \"afterpaint\"),\n          (t.BEFORECOLLAPSEEXPANDCOMBO = \"beforecollapseexpandcombo\"),\n          (t.AFTERCOLLAPSEEXPANDCOMBO = \"aftercollapseexpandcombo\"),\n          (t.GRAPHSTATECHANGE = \"graphstatechange\"),\n          (t.AFTERACTIVATERELATIONS = \"afteractivaterelations\"),\n          (t.NODESELECTCHANGE = \"nodeselectchange\"),\n          (t.TOOLTIPCHANGE = \"tooltipchange\"),\n          (t.WHEELZOOM = \"wheelzoom\"),\n          (t.VIEWPORTCHANGE = \"viewportchange\"),\n          (t.DRAGNODEEND = \"dragnodeend\"),\n          (t.STACKCHANGE = \"stackchange\");\n      })(Be || (Be = {}));\n      var We = _e.registerNode,\n        qe = _e.registerEdge,\n        Ve = _e.registerCombo,\n        Ge = l.registerBehavior,\n        He = nt;\n      _e.registerNode, _e.registerEdge, _e.registerCombo, l.registerBehavior;\n    },\n    22: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return c;\n      }),\n        n.d(e, \"b\", function () {\n          return f;\n        }),\n        n.d(e, \"c\", function () {\n          return g;\n        }),\n        n.d(e, \"d\", function () {\n          return S;\n        });\n      var r = n(0),\n        i = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi,\n        o = /[^\\s\\,]+/gi;\n      var a = function (t) {\n          var e = t || [];\n          return Object(r.isArray)(e)\n            ? e\n            : Object(r.isString)(e)\n            ? ((e = e.match(i)),\n              Object(r.each)(e, function (t, n) {\n                if ((t = t.match(o))[0].length > 1) {\n                  var i = t[0].charAt(0);\n                  t.splice(1, 0, t[0].substr(1)), (t[0] = i);\n                }\n                Object(r.each)(t, function (e, n) {\n                  isNaN(e) || (t[n] = +e);\n                }),\n                  (e[n] = t);\n              }),\n              e)\n            : void 0;\n        },\n        s = n(4);\n      var c = function (t, e, n) {\n        void 0 === e && (e = !1),\n          void 0 === n &&\n            (n = [\n              [0, 0],\n              [1, 1],\n            ]);\n        for (var r = !!e, i = [], o = 0, a = t.length; o < a; o += 2)\n          i.push([t[o], t[o + 1]]);\n        var c,\n          u,\n          h,\n          l = (function (t, e, n, r) {\n            var i,\n              o,\n              a,\n              c,\n              u,\n              h,\n              l,\n              f = [],\n              d = !!r;\n            if (d) {\n              (a = r[0]), (c = r[1]);\n              for (var p = 0, g = t.length; p < g; p += 1) {\n                var v = t[p];\n                (a = s.b.min([0, 0], a, v)), (c = s.b.max([0, 0], c, v));\n              }\n            }\n            p = 0;\n            for (var y = t.length; p < y; p += 1) {\n              v = t[p];\n              if (0 !== p || n)\n                if (p !== y - 1 || n) {\n                  (i = t[[p ? p - 1 : y - 1, p - 1][n ? 0 : 1]]),\n                    (o = t[n ? (p + 1) % y : p + 1]);\n                  var m = [0, 0];\n                  (m = s.b.sub(m, o, i)), (m = s.b.scale(m, m, e));\n                  var b = s.b.distance(v, i),\n                    x = s.b.distance(v, o),\n                    w = b + x;\n                  0 !== w && ((b /= w), (x /= w));\n                  var S = s.b.scale([0, 0], m, -b),\n                    O = s.b.scale([0, 0], m, x);\n                  (h = s.b.add([0, 0], v, S)),\n                    (u = s.b.add([0, 0], v, O)),\n                    (u = s.b.min([0, 0], u, s.b.max([0, 0], o, v))),\n                    (u = s.b.max([0, 0], u, s.b.min([0, 0], o, v))),\n                    (S = s.b.sub([0, 0], u, v)),\n                    (S = s.b.scale([0, 0], S, -b / x)),\n                    (h = s.b.add([0, 0], v, S)),\n                    (h = s.b.min([0, 0], h, s.b.max([0, 0], i, v))),\n                    (h = s.b.max([0, 0], h, s.b.min([0, 0], i, v))),\n                    (O = s.b.sub([0, 0], v, h)),\n                    (O = s.b.scale([0, 0], O, x / b)),\n                    (u = s.b.add([0, 0], v, O)),\n                    d &&\n                      ((h = s.b.max([0, 0], h, a)),\n                      (h = s.b.min([0, 0], h, c)),\n                      (u = s.b.max([0, 0], u, a)),\n                      (u = s.b.min([0, 0], u, c))),\n                    f.push(l),\n                    f.push(h),\n                    (l = u);\n                } else (h = v), f.push(l), f.push(h);\n              else l = v;\n            }\n            return n && f.push(f.shift()), f;\n          })(i, 0.4, r, n),\n          f = i.length,\n          d = [];\n        for (o = 0; o < f - 1; o += 1)\n          (c = l[2 * o]),\n            (u = l[2 * o + 1]),\n            (h = i[o + 1]),\n            d.push([\"C\", c[0], c[1], u[0], u[1], h[0], h[1]]);\n        return (\n          r &&\n            ((c = l[f]),\n            (u = l[f + 1]),\n            (h = i[0]),\n            d.push([\"C\", c[0], c[1], u[0], u[1], h[0], h[1]])),\n          d\n        );\n      };\n      var u = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        h = new RegExp(\n          \"([a-z])[\" +\n            u +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            u +\n            \"]*,?[\" +\n            u +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        l = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + u + \"]*,?[\" + u + \"]*\",\n          \"ig\",\n        );\n      function f(t) {\n        if (!t) return null;\n        if (Object(r.isArray)(t)) return t;\n        var e = {\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          n = [];\n        return (\n          String(t).replace(h, function (t, r, i) {\n            var o = [],\n              a = r.toLowerCase();\n            if (\n              (i.replace(l, function (t, e) {\n                e && o.push(+e);\n              }),\n              \"m\" === a &&\n                o.length > 2 &&\n                (n.push([r].concat(o.splice(0, 2))),\n                (a = \"l\"),\n                (r = \"m\" === r ? \"l\" : \"L\")),\n              \"o\" === a && 1 === o.length && n.push([r, o[0]]),\n              \"r\" === a)\n            )\n              n.push([r].concat(o));\n            else\n              for (\n                ;\n                o.length >= e[a] &&\n                (n.push([r].concat(o.splice(0, e[a]))), e[a]);\n\n              );\n            return \"\";\n          }),\n          n\n        );\n      }\n      var d = /[a-z]/;\n      function p(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function g(t) {\n        var e = f(t);\n        if (!e || !e.length) return [[\"M\", 0, 0]];\n        for (var n = !1, r = 0; r < e.length; r++) {\n          var i = e[r][0];\n          if (d.test(i) || [\"V\", \"H\", \"T\", \"S\"].indexOf(i) >= 0) {\n            n = !0;\n            break;\n          }\n        }\n        if (!n) return e;\n        var o = [],\n          a = 0,\n          s = 0,\n          c = 0,\n          u = 0,\n          h = 0,\n          l = e[0];\n        (\"M\" !== l[0] && \"m\" !== l[0]) ||\n          ((c = a = +l[1]), (u = s = +l[2]), h++, (o[0] = [\"M\", a, s]));\n        r = h;\n        for (var g = e.length; r < g; r++) {\n          var v = e[r],\n            y = o[r - 1],\n            m = [],\n            b = (i = v[0]).toUpperCase();\n          if (i !== b)\n            switch (((m[0] = b), b)) {\n              case \"A\":\n                (m[1] = v[1]),\n                  (m[2] = v[2]),\n                  (m[3] = v[3]),\n                  (m[4] = v[4]),\n                  (m[5] = v[5]),\n                  (m[6] = +v[6] + a),\n                  (m[7] = +v[7] + s);\n                break;\n              case \"V\":\n                m[1] = +v[1] + s;\n                break;\n              case \"H\":\n                m[1] = +v[1] + a;\n                break;\n              case \"M\":\n                (c = +v[1] + a), (u = +v[2] + s), (m[1] = c), (m[2] = u);\n                break;\n              default:\n                for (var x = 1, w = v.length; x < w; x++)\n                  m[x] = +v[x] + (x % 2 ? a : s);\n            }\n          else m = e[r];\n          switch (b) {\n            case \"Z\":\n              (a = +c), (s = +u);\n              break;\n            case \"H\":\n              m = [\"L\", (a = m[1]), s];\n              break;\n            case \"V\":\n              m = [\"L\", a, (s = m[1])];\n              break;\n            case \"T\":\n              (a = m[1]), (s = m[2]);\n              var S = p([y[1], y[2]], [y[3], y[4]]);\n              m = [\"Q\", S[0], S[1], a, s];\n              break;\n            case \"S\":\n              (a = m[m.length - 2]), (s = m[m.length - 1]);\n              var O = y.length,\n                M = p([y[O - 4], y[O - 3]], [y[O - 2], y[O - 1]]);\n              m = [\"C\", M[0], M[1], m[1], m[2], a, s];\n              break;\n            case \"M\":\n              (c = m[m.length - 2]), (u = m[m.length - 1]);\n              break;\n            default:\n              (a = m[m.length - 2]), (s = m[m.length - 1]);\n          }\n          o.push(m);\n        }\n        return o;\n      }\n      Math.PI;\n      function v(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function y(t, e) {\n        return v(t) * v(e) ? (t[0] * e[0] + t[1] * e[1]) / (v(t) * v(e)) : 1;\n      }\n      function m(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(y(t, e));\n      }\n      function b(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function x(t, e) {\n        var n = e[1],\n          i = e[2],\n          o = Object(r.mod)(Object(r.toRadian)(e[3]), 2 * Math.PI),\n          a = e[4],\n          s = e[5],\n          c = t[0],\n          u = t[1],\n          h = e[6],\n          l = e[7],\n          f = (Math.cos(o) * (c - h)) / 2 + (Math.sin(o) * (u - l)) / 2,\n          d = (-1 * Math.sin(o) * (c - h)) / 2 + (Math.cos(o) * (u - l)) / 2,\n          p = (f * f) / (n * n) + (d * d) / (i * i);\n        p > 1 && ((n *= Math.sqrt(p)), (i *= Math.sqrt(p)));\n        var g = n * n * (d * d) + i * i * (f * f),\n          v = g ? Math.sqrt((n * n * (i * i) - g) / g) : 1;\n        a === s && (v *= -1), isNaN(v) && (v = 0);\n        var x = i ? (v * n * d) / i : 0,\n          w = n ? (v * -i * f) / n : 0,\n          S = (c + h) / 2 + Math.cos(o) * x - Math.sin(o) * w,\n          O = (u + l) / 2 + Math.sin(o) * x + Math.cos(o) * w,\n          M = [(f - x) / n, (d - w) / i],\n          k = [(-1 * f - x) / n, (-1 * d - w) / i],\n          C = m([1, 0], M),\n          E = m(M, k);\n        return (\n          y(M, k) <= -1 && (E = Math.PI),\n          y(M, k) >= 1 && (E = 0),\n          0 === s && E > 0 && (E -= 2 * Math.PI),\n          1 === s && E < 0 && (E += 2 * Math.PI),\n          {\n            cx: S,\n            cy: O,\n            rx: b(t, [h, l]) ? 0 : n,\n            ry: b(t, [h, l]) ? 0 : i,\n            startAngle: C,\n            endAngle: C + E,\n            xRotation: o,\n            arcFlag: a,\n            sweepFlag: s,\n          }\n        );\n      }\n      function w(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function S(t) {\n        for (\n          var e = [],\n            n = null,\n            r = null,\n            i = null,\n            o = 0,\n            s = (t = a(t)).length,\n            c = 0;\n          c < s;\n          c++\n        ) {\n          var u = t[c];\n          r = t[c + 1];\n          var h = u[0],\n            l = {\n              command: h,\n              prePoint: n,\n              params: u,\n              startTangent: null,\n              endTangent: null,\n            };\n          switch (h) {\n            case \"M\":\n              (i = [u[1], u[2]]), (o = c);\n              break;\n            case \"A\":\n              var f = x(n, u);\n              l.arcParams = f;\n          }\n          if (\"Z\" === h) (n = i), (r = t[o + 1]);\n          else {\n            var d = u.length;\n            n = [u[d - 2], u[d - 1]];\n          }\n          r && \"Z\" === r[0] && ((r = t[o]), e[o] && (e[o].prePoint = n)),\n            (l.currentPoint = n),\n            e[o] && b(n, e[o].currentPoint) && (e[o].prePoint = l.prePoint);\n          var p = r ? [r[r.length - 2], r[r.length - 1]] : null;\n          l.nextPoint = p;\n          var g = l.prePoint;\n          if ([\"L\", \"H\", \"V\"].includes(h))\n            (l.startTangent = [g[0] - n[0], g[1] - n[1]]),\n              (l.endTangent = [n[0] - g[0], n[1] - g[1]]);\n          else if (\"Q\" === h) {\n            var v = [u[1], u[2]];\n            (l.startTangent = [g[0] - v[0], g[1] - v[1]]),\n              (l.endTangent = [n[0] - v[0], n[1] - v[1]]);\n          } else if (\"T\" === h) {\n            v = w((S = e[c - 1]).currentPoint, g);\n            \"Q\" === S.command\n              ? ((l.command = \"Q\"),\n                (l.startTangent = [g[0] - v[0], g[1] - v[1]]),\n                (l.endTangent = [n[0] - v[0], n[1] - v[1]]))\n              : ((l.command = \"TL\"),\n                (l.startTangent = [g[0] - n[0], g[1] - n[1]]),\n                (l.endTangent = [n[0] - g[0], n[1] - g[1]]));\n          } else if (\"C\" === h) {\n            var y = [u[1], u[2]],\n              m = [u[3], u[4]];\n            (l.startTangent = [g[0] - y[0], g[1] - y[1]]),\n              (l.endTangent = [n[0] - m[0], n[1] - m[1]]),\n              0 === l.startTangent[0] &&\n                0 === l.startTangent[1] &&\n                (l.startTangent = [y[0] - m[0], y[1] - m[1]]),\n              0 === l.endTangent[0] &&\n                0 === l.endTangent[1] &&\n                (l.endTangent = [m[0] - y[0], m[1] - y[1]]);\n          } else if (\"S\" === h) {\n            var S;\n            (y = w((S = e[c - 1]).currentPoint, g)), (m = [u[1], u[2]]);\n            \"C\" === S.command\n              ? ((l.command = \"C\"),\n                (l.startTangent = [g[0] - y[0], g[1] - y[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]))\n              : ((l.command = \"SQ\"),\n                (l.startTangent = [g[0] - m[0], g[1] - m[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]));\n          } else if (\"A\" === h) {\n            var O = 0.001,\n              M = l.arcParams || {},\n              k = M.cx,\n              C = void 0 === k ? 0 : k,\n              E = M.cy,\n              j = void 0 === E ? 0 : E,\n              P = M.rx,\n              A = void 0 === P ? 0 : P,\n              I = M.ry,\n              T = void 0 === I ? 0 : I,\n              N = M.sweepFlag,\n              B = void 0 === N ? 0 : N,\n              L = M.startAngle,\n              D = void 0 === L ? 0 : L,\n              _ = M.endAngle,\n              R = void 0 === _ ? 0 : _;\n            0 === B && (O *= -1);\n            var F = A * Math.cos(D - O) + C,\n              Y = T * Math.sin(D - O) + j;\n            l.startTangent = [F - i[0], Y - i[1]];\n            var X = A * Math.cos(D + R + O) + C,\n              z = T * Math.sin(D + R - O) + j;\n            l.endTangent = [g[0] - X, g[1] - z];\n          }\n          e.push(l);\n        }\n        return e;\n      }\n    },\n    26: function (t, e, n) {\n      \"use strict\";\n      var r = n(78);\n      n.d(e, \"a\", function () {\n        return r.Layout;\n      }),\n        n.d(e, \"b\", function () {\n          return r.Layouts;\n        });\n      var i = n(51);\n      n.d(e, \"c\", function () {\n        return i.registerLayout;\n      }),\n        n.d(e, \"d\", function () {\n          return i.unRegisterLayout;\n        });\n      var o = n(52);\n      Object(i.registerLayout)(\"random\", o.RandomLayout);\n    },\n    27: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"getAdjMatrix\", function () {\n          return r;\n        }),\n        n.d(e, \"breadthFirstSearch\", function () {\n          return l;\n        }),\n        n.d(e, \"connectedComponent\", function () {\n          return d;\n        }),\n        n.d(e, \"getDegree\", function () {\n          return g;\n        }),\n        n.d(e, \"getInDegree\", function () {\n          return v;\n        }),\n        n.d(e, \"getOutDegree\", function () {\n          return y;\n        }),\n        n.d(e, \"detectCycle\", function () {\n          return S;\n        }),\n        n.d(e, \"detectDirectedCycle\", function () {\n          return mt;\n        }),\n        n.d(e, \"detectAllCycles\", function () {\n          return w;\n        }),\n        n.d(e, \"detectAllDirectedCycle\", function () {\n          return x;\n        }),\n        n.d(e, \"detectAllUndirectedCycle\", function () {\n          return b;\n        }),\n        n.d(e, \"depthFirstSearch\", function () {\n          return m;\n        }),\n        n.d(e, \"dijkstra\", function () {\n          return k;\n        }),\n        n.d(e, \"findAllPath\", function () {\n          return P;\n        }),\n        n.d(e, \"findShortestPath\", function () {\n          return j;\n        }),\n        n.d(e, \"floydWarshall\", function () {\n          return A;\n        }),\n        n.d(e, \"labelPropagation\", function () {\n          return I;\n        }),\n        n.d(e, \"louvain\", function () {\n          return F;\n        }),\n        n.d(e, \"iLouvain\", function () {\n          return Y;\n        }),\n        n.d(e, \"kCore\", function () {\n          return X;\n        }),\n        n.d(e, \"kMeans\", function () {\n          return W;\n        }),\n        n.d(e, \"cosineSimilarity\", function () {\n          return q;\n        }),\n        n.d(e, \"nodesCosineSimilarity\", function () {\n          return V;\n        }),\n        n.d(e, \"minimumSpanningTree\", function () {\n          return $;\n        }),\n        n.d(e, \"pageRank\", function () {\n          return Q;\n        }),\n        n.d(e, \"getNeighbors\", function () {\n          return c;\n        }),\n        n.d(e, \"Stack\", function () {\n          return yt;\n        }),\n        n.d(e, \"GADDI\", function () {\n          return vt;\n        });\n      var r = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (!a && 0 !== a) ||\n                  (!s && 0 !== s) ||\n                  ((i[a][s] = 1), e || (i[s][a] = 1));\n              }),\n            i\n          );\n        },\n        i = function (t, e) {\n          return t === e;\n        },\n        o = (function () {\n          function t(t, e) {\n            void 0 === e && (e = null), (this.value = t), (this.next = e);\n          }\n          return (\n            (t.prototype.toString = function (t) {\n              return t ? t(this.value) : \"\".concat(this.value);\n            }),\n            t\n          );\n        })(),\n        a = (function () {\n          function t(t) {\n            void 0 === t && (t = i),\n              (this.head = null),\n              (this.tail = null),\n              (this.compare = t);\n          }\n          return (\n            (t.prototype.prepend = function (t) {\n              var e = new o(t, this.head);\n              return (this.head = e), this.tail || (this.tail = e), this;\n            }),\n            (t.prototype.append = function (t) {\n              var e = new o(t);\n              return this.head\n                ? ((this.tail.next = e), (this.tail = e), this)\n                : ((this.head = e), (this.tail = e), this);\n            }),\n            (t.prototype.delete = function (t) {\n              if (!this.head) return null;\n              for (\n                var e = null;\n                this.head && this.compare(this.head.value, t);\n\n              )\n                (e = this.head), (this.head = this.head.next);\n              var n = this.head;\n              if (null !== n)\n                for (; n.next; )\n                  this.compare(n.next.value, t)\n                    ? ((e = n.next), (n.next = n.next.next))\n                    : (n = n.next);\n              return this.compare(this.tail.value, t) && (this.tail = n), e;\n            }),\n            (t.prototype.find = function (t) {\n              var e = t.value,\n                n = void 0 === e ? void 0 : e,\n                r = t.callback,\n                i = void 0 === r ? void 0 : r;\n              if (!this.head) return null;\n              for (var o = this.head; o; ) {\n                if (i && i(o.value)) return o;\n                if (void 0 !== n && this.compare(o.value, n)) return o;\n                o = o.next;\n              }\n              return null;\n            }),\n            (t.prototype.deleteTail = function () {\n              var t = this.tail;\n              if (this.head === this.tail)\n                return (this.head = null), (this.tail = null), t;\n              for (var e = this.head; e.next; )\n                e.next.next ? (e = e.next) : (e.next = null);\n              return (this.tail = e), t;\n            }),\n            (t.prototype.deleteHead = function () {\n              if (!this.head) return null;\n              var t = this.head;\n              return (\n                this.head.next\n                  ? (this.head = this.head.next)\n                  : ((this.head = null), (this.tail = null)),\n                t\n              );\n            }),\n            (t.prototype.fromArray = function (t) {\n              var e = this;\n              return (\n                t.forEach(function (t) {\n                  return e.append(t);\n                }),\n                this\n              );\n            }),\n            (t.prototype.toArray = function () {\n              for (var t = [], e = this.head; e; ) t.push(e), (e = e.next);\n              return t;\n            }),\n            (t.prototype.reverse = function () {\n              for (var t = this.head, e = null, n = null; t; )\n                (n = t.next), (t.next = e), (e = t), (t = n);\n              (this.tail = this.head), (this.head = e);\n            }),\n            (t.prototype.toString = function (t) {\n              return (\n                void 0 === t && (t = void 0),\n                this.toArray()\n                  .map(function (e) {\n                    return e.toString(t);\n                  })\n                  .toString()\n              );\n            }),\n            t\n          );\n        })(),\n        s = (function () {\n          function t() {\n            this.linkedList = new a();\n          }\n          return (\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.peek = function () {\n              return this.linkedList.head ? this.linkedList.head.value : null;\n            }),\n            (t.prototype.enqueue = function (t) {\n              this.linkedList.append(t);\n            }),\n            (t.prototype.dequeue = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toString = function (t) {\n              return this.linkedList.toString(t);\n            }),\n            t\n          );\n        })(),\n        c = function (t, e, n) {\n          void 0 === e && (e = []);\n          var r = e.filter(function (e) {\n            return e.source === t || e.target === t;\n          });\n          if (\"target\" === n) {\n            return r\n              .filter(function (e) {\n                return e.source === t;\n              })\n              .map(function (t) {\n                return t.target;\n              });\n          }\n          if (\"source\" === n) {\n            return r\n              .filter(function (e) {\n                return e.target === t;\n              })\n              .map(function (t) {\n                return t.source;\n              });\n          }\n          return r.map(function (e) {\n            return e.source === t ? e.target : e.source;\n          });\n        },\n        u = function (t, e) {\n          return e.filter(function (e) {\n            return e.source === t || e.target === t;\n          });\n        },\n        h = function (t) {\n          void 0 === t && (t = 0);\n          var e = \"\".concat(Math.random()).split(\".\")[1].substr(0, 5),\n            n = \"\".concat(Math.random()).split(\".\")[1].substr(0, 5);\n          return \"\".concat(t, \"-\").concat(e).concat(n);\n        };\n      var l = function (t, e, n, r) {\n          void 0 === r && (r = !0);\n          var i = (function (t) {\n              void 0 === t && (t = {});\n              var e,\n                n = t,\n                r = function () {},\n                i =\n                  ((e = {}),\n                  function (t) {\n                    var n = t.next;\n                    return !e[n] && ((e[n] = !0), !0);\n                  });\n              return (\n                (n.allowTraversal = t.allowTraversal || i),\n                (n.enter = t.enter || r),\n                (n.leave = t.leave || r),\n                n\n              );\n            })(n),\n            o = new s(),\n            a = t.edges,\n            u = void 0 === a ? [] : a;\n          o.enqueue(e);\n          for (\n            var h = \"\",\n              l = function () {\n                var t = o.dequeue();\n                i.enter({ current: t, previous: h }),\n                  c(t, u, r ? \"target\" : void 0).forEach(function (e) {\n                    i.allowTraversal({ previous: h, current: t, next: e }) &&\n                      o.enqueue(e);\n                  }),\n                  i.leave({ current: t, previous: h }),\n                  (h = t);\n              };\n            !o.isEmpty();\n\n          )\n            l();\n        },\n        f = function (t) {\n          for (\n            var e = t.nodes,\n              n = void 0 === e ? [] : e,\n              r = t.edges,\n              i = void 0 === r ? [] : r,\n              o = [],\n              a = {},\n              s = {},\n              u = {},\n              h = [],\n              l = 0,\n              f = function t(e) {\n                (s[e.id] = l),\n                  (u[e.id] = l),\n                  (l += 1),\n                  o.push(e),\n                  (a[e.id] = !0);\n                for (\n                  var r = c(e.id, i, \"target\").filter(function (t) {\n                      return (\n                        n\n                          .map(function (t) {\n                            return t.id;\n                          })\n                          .indexOf(t) > -1\n                      );\n                    }),\n                    f = function (i) {\n                      var o = r[i];\n                      if (s[o] || 0 === s[o])\n                        a[o] && (u[e.id] = Math.min(u[e.id], s[o]));\n                      else {\n                        var c = n.filter(function (t) {\n                          return t.id === o;\n                        });\n                        c.length > 0 && t(c[0]),\n                          (u[e.id] = Math.min(u[e.id], u[o]));\n                      }\n                    },\n                    d = 0;\n                  d < r.length;\n                  d++\n                )\n                  f(d);\n                if (u[e.id] === s[e.id]) {\n                  for (var p = []; o.length > 0; ) {\n                    var g = o.pop();\n                    if (((a[g.id] = !1), p.push(g), g === e)) break;\n                  }\n                  p.length > 0 && h.push(p);\n                }\n              },\n              d = 0,\n              p = n;\n            d < p.length;\n            d++\n          ) {\n            var g = p[d];\n            s[g.id] || 0 === s[g.id] || f(g);\n          }\n          return h;\n        };\n      function d(t, e) {\n        return e\n          ? f(t)\n          : (function (t) {\n              for (\n                var e = t.nodes,\n                  n = void 0 === e ? [] : e,\n                  r = t.edges,\n                  i = void 0 === r ? [] : r,\n                  o = [],\n                  a = {},\n                  s = [],\n                  u = function t(e) {\n                    s.push(e), (a[e.id] = !0);\n                    for (\n                      var r = c(e.id, i),\n                        o = function (e) {\n                          var i = r[e];\n                          if (!a[i]) {\n                            var o = n.filter(function (t) {\n                              return t.id === i;\n                            });\n                            o.length > 0 && t(o[0]);\n                          }\n                        },\n                        u = 0;\n                      u < r.length;\n                      ++u\n                    )\n                      o(u);\n                  },\n                  h = 0;\n                h < n.length;\n                h++\n              ) {\n                var l = n[h];\n                if (!a[l.id]) {\n                  u(l);\n                  for (var f = []; s.length > 0; ) f.push(s.pop());\n                  o.push(f);\n                }\n              }\n              return o;\n            })(t);\n      }\n      var p = function (t) {\n          var e = {},\n            n = t.nodes,\n            r = void 0 === n ? [] : n,\n            i = t.edges,\n            o = void 0 === i ? [] : i;\n          return (\n            r.forEach(function (t) {\n              e[t.id] = { degree: 0, inDegree: 0, outDegree: 0 };\n            }),\n            o.forEach(function (t) {\n              e[t.source].degree++,\n                e[t.source].outDegree++,\n                e[t.target].degree++,\n                e[t.target].inDegree++;\n            }),\n            e\n          );\n        },\n        g = p,\n        v = function (t, e) {\n          return p(t)[e] ? p(t)[e].inDegree : 0;\n        },\n        y = function (t, e) {\n          return p(t)[e] ? p(t)[e].outDegree : 0;\n        };\n      function m(t, e, n) {\n        !(function t(e, n, r, i) {\n          i.enter({ current: n, previous: r });\n          var o = e.edges;\n          c(n, void 0 === o ? [] : o, \"target\").forEach(function (o) {\n            i.allowTraversal({ previous: r, current: n, next: o }) &&\n              t(e, o, n, i);\n          }),\n            i.leave({ current: n, previous: r });\n        })(\n          t,\n          e,\n          \"\",\n          (function (t) {\n            void 0 === t && (t = {});\n            var e,\n              n = t,\n              r = function () {},\n              i =\n                ((e = {}),\n                function (t) {\n                  var n = t.next;\n                  return !e[n] && ((e[n] = !0), !0);\n                });\n            return (\n              (n.allowTraversal = t.allowTraversal || i),\n              (n.enter = t.enter || r),\n              (n.leave = t.leave || r),\n              n\n            );\n          })(n),\n        );\n      }\n      var b = function (t, e, n) {\n          var r, i;\n          void 0 === n && (n = !0);\n          for (var o = [], a = 0, s = d(t, !1); a < s.length; a++) {\n            var u = s[a];\n            if (u.length)\n              for (\n                var h = u[0],\n                  l = h.id,\n                  f = [h],\n                  p = (((r = {})[l] = h), r),\n                  g = (((i = {})[l] = new Set()), i);\n                f.length > 0;\n\n              )\n                for (\n                  var v = f.pop(),\n                    y = v.id,\n                    m = c(y, t.edges),\n                    b = function (r) {\n                      var i,\n                        a = m[r],\n                        s = t.nodes.find(function (t) {\n                          return t.id === a;\n                        });\n                      if (a === y) o.push((((i = {})[a] = v), i));\n                      else if ((a in g)) {\n                        if (!g[y].has(s)) {\n                          for (\n                            var c = !0, u = [s, v], h = p[y];\n                            g[a].size &&\n                            !g[a].has(h) &&\n                            (u.push(h), h !== p[h.id]);\n\n                          )\n                            h = p[h.id];\n                          if (\n                            (u.push(h),\n                            e && n\n                              ? ((c = !1),\n                                u.findIndex(function (t) {\n                                  return e.indexOf(t.id) > -1;\n                                }) > -1 && (c = !0))\n                              : e &&\n                                !n &&\n                                u.findIndex(function (t) {\n                                  return e.indexOf(t.id) > -1;\n                                }) > -1 &&\n                                (c = !1),\n                            c)\n                          ) {\n                            for (var l = {}, d = 1; d < u.length; d += 1)\n                              l[u[d - 1].id] = u[d];\n                            u.length && (l[u[u.length - 1].id] = u[0]),\n                              o.push(l);\n                          }\n                          g[a].add(v);\n                        }\n                      } else (p[a] = v), f.push(s), (g[a] = new Set([v]));\n                    },\n                    x = 0;\n                  x < m.length;\n                  x += 1\n                )\n                  b(x);\n          }\n          return o;\n        },\n        x = function (t, e, n) {\n          void 0 === n && (n = !0);\n          for (\n            var r = [],\n              i = new Set(),\n              o = [],\n              a = [],\n              s = {},\n              u = {},\n              h = function t(c, u, h) {\n                var l = !1;\n                if (e && !1 === n && e.indexOf(c.id) > -1) return l;\n                r.push(c), i.add(c);\n                for (var f = h[c.id], d = 0; d < f.length; d += 1) {\n                  if ((v = s[f[d]]) === u) {\n                    for (var p = {}, g = 1; g < r.length; g += 1)\n                      p[r[g - 1].id] = r[g];\n                    r.length && (p[r[r.length - 1].id] = r[0]),\n                      a.push(p),\n                      (l = !0);\n                  } else i.has(v) || (t(v, u, h) && (l = !0));\n                }\n                if (l)\n                  !(function (t) {\n                    for (var e = [t]; e.length > 0; ) {\n                      var n = e.pop();\n                      i.has(n) &&\n                        (i.delete(n),\n                        o[n.id].forEach(function (t) {\n                          e.push(t);\n                        }),\n                        o[n.id].clear());\n                    }\n                  })(c);\n                else\n                  for (d = 0; d < f.length; d += 1) {\n                    var v = s[f[d]];\n                    o[v.id].has(c) || o[v.id].add(c);\n                  }\n                return r.pop(), l;\n              },\n              l = t.nodes,\n              d = void 0 === l ? [] : l,\n              p = 0;\n            p < d.length;\n            p += 1\n          ) {\n            var g = d[p],\n              v = g.id;\n            (u[v] = p), (s[p] = g);\n          }\n          if (e && n) {\n            var y = function (t) {\n              var n = e[t];\n              (u[d[t].id] = u[n]),\n                (u[n] = 0),\n                (s[0] = d.find(function (t) {\n                  return t.id === n;\n                })),\n                (s[u[d[t].id]] = d[t]);\n            };\n            for (p = 0; p < e.length; p++) y(p);\n          }\n          for (\n            var m = function (r) {\n                for (var i, o, s = 1 / 0, h = 0; h < r.length; h += 1)\n                  for (var l = r[h], f = 0; f < l.length; f++) {\n                    var d = u[l[f].id];\n                    d < s && ((s = d), (o = h));\n                  }\n                var p = r[o],\n                  g = [];\n                for (h = 0; h < p.length; h += 1) {\n                  var v = p[h];\n                  g[v.id] = [];\n                  for (\n                    var y = 0,\n                      m = c(v.id, t.edges, \"target\").filter(function (t) {\n                        return (\n                          p\n                            .map(function (t) {\n                              return t.id;\n                            })\n                            .indexOf(t) > -1\n                        );\n                      });\n                    y < m.length;\n                    y++\n                  ) {\n                    var b = m[y];\n                    b !== v.id || (!1 === n && e.indexOf(v.id) > -1)\n                      ? g[v.id].push(u[b])\n                      : a.push((((i = {})[v.id] = v), i));\n                  }\n                }\n                return { component: p, adjList: g, minIdx: s };\n              },\n              b = 0;\n            b < d.length;\n\n          ) {\n            var x = d.filter(function (t) {\n                return u[t.id] >= b;\n              }),\n              w = f({ nodes: x, edges: t.edges }).filter(function (t) {\n                return t.length > 1;\n              });\n            if (0 === w.length) break;\n            var S = m(w),\n              O = S.minIdx,\n              M = S.adjList,\n              k = S.component;\n            if (!(k.length > 1)) break;\n            k.forEach(function (t) {\n              o[t.id] = new Set();\n            });\n            var C = s[O];\n            if (e && n && -1 === e.indexOf(C.id)) return a;\n            h(C, C, M), (b = O + 1);\n          }\n          return a;\n        },\n        w = function (t, e, n, r) {\n          return void 0 === r && (r = !0), e ? x(t, n, r) : b(t, n, r);\n        },\n        S = function (t) {\n          var e = null,\n            n = t.nodes,\n            r = {},\n            i = {},\n            o = {},\n            a = {};\n          (void 0 === n ? [] : n).forEach(function (t) {\n            i[t.id] = t;\n          });\n          for (\n            var s = {\n              enter: function (t) {\n                var n = t.current,\n                  a = t.previous;\n                if (o[n]) {\n                  e = {};\n                  for (var s = n, c = a; c !== n; )\n                    (e[s] = c), (s = c), (c = r[c]);\n                  e[s] = c;\n                } else (o[n] = n), delete i[n], (r[n] = a);\n              },\n              leave: function (t) {\n                var e = t.current;\n                (a[e] = e), delete o[e];\n              },\n              allowTraversal: function (t) {\n                var n = t.next;\n                return !e && !a[n];\n              },\n            };\n            Object.keys(i).length;\n\n          ) {\n            m(t, Object.keys(i)[0], s);\n          }\n          return e;\n        },\n        O = n(1),\n        M = n(0),\n        k = function (t, e, n, r) {\n          var i = t.nodes,\n            o = void 0 === i ? [] : i,\n            a = t.edges,\n            s = void 0 === a ? [] : a,\n            c = [],\n            h = {},\n            l = {},\n            f = {};\n          o.forEach(function (t, n) {\n            var r = t.id;\n            c.push(r), (l[r] = 1 / 0), r === e && (l[r] = 0);\n          });\n          for (\n            var d = o.length,\n              p = function (t) {\n                var e = (function (t, e, n) {\n                    for (var r, i = 1 / 0, o = 0; o < e.length; o++) {\n                      var a = e[o].id;\n                      !n[a] && t[a] <= i && ((i = t[a]), (r = e[o]));\n                    }\n                    return r;\n                  })(l, o, h),\n                  i = e.id;\n                if (((h[i] = !0), l[i] === 1 / 0)) return \"continue\";\n                (n\n                  ? (function (t, e) {\n                      return e.filter(function (e) {\n                        return e.source === t;\n                      });\n                    })(i, s)\n                  : u(i, s)\n                ).forEach(function (t) {\n                  var n = t.target,\n                    o = t.source,\n                    a = n === i ? o : n,\n                    s = r && t[r] ? t[r] : 1;\n                  l[a] > l[e.id] + s\n                    ? ((l[a] = l[e.id] + s), (f[a] = [e.id]))\n                    : l[a] === l[e.id] + s && f[a].push(e.id);\n                });\n              },\n              g = 0;\n            g < d;\n            g++\n          )\n            p();\n          f[e] = [e];\n          var v = {};\n          for (var y in l) l[y] !== 1 / 0 && C(e, y, f, v);\n          var m = {};\n          for (var y in v) m[y] = v[y][0];\n          return { length: l, path: m, allPath: v };\n        };\n      function C(t, e, n, r) {\n        if (t === e) return [t];\n        if (r[e]) return r[e];\n        for (var i = [], o = 0, a = n[e]; o < a.length; o++) {\n          var s = C(t, a[o], n, r);\n          if (!s) return;\n          for (var c = 0, u = s; c < u.length; c++) {\n            var h = u[c];\n            Object(M.isArray)(h)\n              ? i.push(Object(O.f)(Object(O.f)([], h, !0), [e], !1))\n              : i.push([h, e]);\n          }\n        }\n        return (r[e] = i), r[e];\n      }\n      var E,\n        j = function (t, e, n, r, i) {\n          var o = k(t, e, r, i),\n            a = o.length,\n            s = o.path,\n            c = o.allPath;\n          return { length: a[n], path: s[n], allPath: c[n] };\n        },\n        P = function (t, e, n, r) {\n          var i;\n          if (e === n) return [[e]];\n          var o = t.edges,\n            a = void 0 === o ? [] : o,\n            s = [e],\n            u = (((i = {})[e] = !0), i),\n            h = [],\n            l = [],\n            f = r ? c(e, a, \"target\") : c(e, a);\n          for (h.push(f); s.length > 0 && h.length > 0; ) {\n            var d = h[h.length - 1];\n            if (d.length) {\n              var p = d.shift();\n              if (\n                (p &&\n                  (s.push(p),\n                  (u[p] = !0),\n                  (f = r ? c(p, a, \"target\") : c(p, a)),\n                  h.push(\n                    f.filter(function (t) {\n                      return !u[t];\n                    }),\n                  )),\n                s[s.length - 1] === n)\n              ) {\n                var g = s.map(function (t) {\n                  return t;\n                });\n                l.push(g);\n                v = s.pop();\n                (u[v] = !1), h.pop();\n              }\n            } else {\n              var v = s.pop();\n              (u[v] = !1), h.pop();\n            }\n          }\n          return l;\n        },\n        A = function (t, e) {\n          for (var n = r(t, e), i = [], o = n.length, a = 0; a < o; a += 1) {\n            i[a] = [];\n            for (var s = 0; s < o; s += 1)\n              a === s\n                ? (i[a][s] = 0)\n                : 0 !== n[a][s] && n[a][s]\n                ? (i[a][s] = n[a][s])\n                : (i[a][s] = 1 / 0);\n          }\n          for (var c = 0; c < o; c += 1)\n            for (a = 0; a < o; a += 1)\n              for (s = 0; s < o; s += 1)\n                i[a][s] > i[a][c] + i[c][s] && (i[a][s] = i[a][c] + i[c][s]);\n          return i;\n        },\n        I = function (t, e, n, i) {\n          void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === i && (i = 1e3);\n          var o = t.nodes,\n            a = void 0 === o ? [] : o,\n            s = t.edges,\n            c = void 0 === s ? [] : s,\n            u = {},\n            l = {};\n          a.forEach(function (t, e) {\n            var n = h();\n            (t.clusterId = n),\n              (u[n] = { id: n, nodes: [t] }),\n              (l[t.id] = { node: t, idx: e });\n          });\n          var f = r(t, e),\n            d = [],\n            p = {};\n          f.forEach(function (t, e) {\n            var n = 0,\n              r = a[e].id;\n            (p[r] = {}),\n              t.forEach(function (t, e) {\n                if (t) {\n                  n += t;\n                  var i = a[e].id;\n                  p[r][i] = t;\n                }\n              }),\n              d.push(n);\n          });\n          for (\n            var g = 0,\n              v = function () {\n                var t = !1;\n                if (\n                  (a.forEach(function (e) {\n                    var n = {};\n                    Object.keys(p[e.id]).forEach(function (t) {\n                      var r = p[e.id][t],\n                        i = l[t].node.clusterId;\n                      n[i] || (n[i] = 0), (n[i] += r);\n                    });\n                    var r = -1 / 0,\n                      i = [];\n                    if (\n                      (Object.keys(n).forEach(function (t) {\n                        r < n[t]\n                          ? ((r = n[t]), (i = [t]))\n                          : r === n[t] && i.push(t);\n                      }),\n                      1 !== i.length || i[0] !== e.clusterId)\n                    ) {\n                      var o = i.indexOf(e.clusterId);\n                      if ((o >= 0 && i.splice(o, 1), i && i.length)) {\n                        t = !0;\n                        var a = u[e.clusterId],\n                          s = a.nodes.indexOf(e);\n                        a.nodes.splice(s, 1);\n                        var c = Math.floor(Math.random() * i.length),\n                          h = u[i[c]];\n                        h.nodes.push(e), (e.clusterId = h.id);\n                      }\n                    }\n                  }),\n                  !t)\n                )\n                  return \"break\";\n                g++;\n              };\n            g < i;\n\n          ) {\n            if (\"break\" === v()) break;\n          }\n          Object.keys(u).forEach(function (t) {\n            var e = u[t];\n            (e.nodes && e.nodes.length) || delete u[t];\n          });\n          var y = [],\n            m = {};\n          c.forEach(function (t) {\n            var e = t.source,\n              r = t.target,\n              i = t[n] || 1,\n              o = l[e].node.clusterId,\n              a = l[r].node.clusterId,\n              s = \"\".concat(o, \"---\").concat(a);\n            if (m[s]) (m[s].weight += i), m[s].count++;\n            else {\n              var c = { source: o, target: a, weight: i, count: 1 };\n              (m[s] = c), y.push(c);\n            }\n          });\n          var b = [];\n          return (\n            Object.keys(u).forEach(function (t) {\n              b.push(u[t]);\n            }),\n            { clusters: b, clusterEdges: y }\n          );\n        },\n        T = (function () {\n          function t(t) {\n            this.arr = t;\n          }\n          return (\n            (t.prototype.getArr = function () {\n              return this.arr || [];\n            }),\n            (t.prototype.add = function (e) {\n              var n,\n                r = e.arr;\n              if (\n                !(null === (n = this.arr) || void 0 === n ? void 0 : n.length)\n              )\n                return new t(r);\n              if (!(null == r ? void 0 : r.length)) return new t(this.arr);\n              if (this.arr.length === r.length) {\n                var i = [];\n                for (var o in this.arr) i[o] = this.arr[o] + r[o];\n                return new t(i);\n              }\n            }),\n            (t.prototype.subtract = function (e) {\n              var n,\n                r = e.arr;\n              if (\n                !(null === (n = this.arr) || void 0 === n ? void 0 : n.length)\n              )\n                return new t(r);\n              if (!(null == r ? void 0 : r.length)) return new t(this.arr);\n              if (this.arr.length === r.length) {\n                var i = [];\n                for (var o in this.arr) i[o] = this.arr[o] - r[o];\n                return new t(i);\n              }\n            }),\n            (t.prototype.avg = function (e) {\n              var n = [];\n              if (0 !== e) for (var r in this.arr) n[r] = this.arr[r] / e;\n              return new t(n);\n            }),\n            (t.prototype.negate = function () {\n              var e = [];\n              for (var n in this.arr) e[n] = -this.arr[n];\n              return new t(e);\n            }),\n            (t.prototype.squareEuclideanDistance = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr)\n                  r += Math.pow(this.arr[i] - t.arr[i], 2);\n                return r;\n              }\n            }),\n            (t.prototype.euclideanDistance = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr)\n                  r += Math.pow(this.arr[i] - t.arr[i], 2);\n                return Math.sqrt(r);\n              }\n              console.error(\"The two vectors are unequal in length.\");\n            }),\n            (t.prototype.normalize = function () {\n              var e = [],\n                n = Object(M.clone)(this.arr);\n              n.sort(function (t, e) {\n                return t - e;\n              });\n              var r = n[n.length - 1],\n                i = n[0];\n              for (var o in this.arr) e[o] = (this.arr[o] - i) / (r - i);\n              return new t(e);\n            }),\n            (t.prototype.norm2 = function () {\n              var t;\n              if (\n                !(null === (t = this.arr) || void 0 === t ? void 0 : t.length)\n              )\n                return 0;\n              var e = 0;\n              for (var n in this.arr) e += Math.pow(this.arr[n], 2);\n              return Math.sqrt(e);\n            }),\n            (t.prototype.dot = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr) r += this.arr[i] * t.arr[i];\n                return r;\n              }\n              console.error(\"The two vectors are unequal in length.\");\n            }),\n            (t.prototype.equal = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                (null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) !== (null == n ? void 0 : n.length)\n              )\n                return !1;\n              for (var r in this.arr) if (this.arr[r] !== n[r]) return !1;\n              return !0;\n            }),\n            t\n          );\n        })(),\n        N = function (t, e) {\n          void 0 === e && (e = void 0);\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              void 0 === e && n.push(t), void 0 !== t[e] && n.push(t[e]);\n            }),\n            n\n          );\n        };\n      !(function (t) {\n        t.EuclideanDistance = \"euclideanDistance\";\n      })(E || (E = {}));\n      var B = function (t, e, n) {\n          var r = [];\n          (null == e ? void 0 : e.length)\n            ? (r = e)\n            : (t.forEach(function (t) {\n                r = r.concat(Object.keys(t));\n              }),\n              (r = Object(M.uniq)(r)));\n          var i = {};\n          return (\n            r.forEach(function (e) {\n              var r = [];\n              t.forEach(function (t) {\n                void 0 !== t[e] && \"\" !== t[e] && r.push(t[e]);\n              }),\n                r.length &&\n                  !(null == n ? void 0 : n.includes(e)) &&\n                  (i[e] = Object(M.uniq)(r));\n            }),\n            i\n          );\n        },\n        L = function (t, e, n) {\n          var r = B(t, e, n),\n            i = [];\n          return Object.keys(r).length\n            ? (t.forEach(function (t, e) {\n                var n = [];\n                if (1 === Object.keys(r).length) {\n                  var o = Object.keys(r)[0];\n                  r[o].every(function (t) {\n                    return !isNaN(Number(t));\n                  }) && (n = [t[o]]);\n                } else\n                  Object.keys(r).forEach(function (e) {\n                    for (\n                      var i = t[e],\n                        o = r[e],\n                        a = o.findIndex(function (t) {\n                          return i === t;\n                        }),\n                        s = [],\n                        c = 0;\n                      c < o.length;\n                      c++\n                    )\n                      c === a ? s.push(1) : s.push(0);\n                    n = n.concat(s);\n                  });\n                i[e] = n;\n              }),\n              i)\n            : i;\n        },\n        D = function (t, e, n, r) {\n          void 0 === n && (n = E.EuclideanDistance);\n          var i = 0;\n          switch (n) {\n            case E.EuclideanDistance:\n              i = new T(t).euclideanDistance(new T(e));\n          }\n          return i;\n        },\n        _ = function (t, e, n, r) {\n          for (var i = e.length, o = 2 * r, a = 0, s = 0; s < i; s++)\n            for (var c = t[s].clusterId, u = 0; u < i; u++) {\n              if (c === t[u].clusterId)\n                a += (e[s][u] || 0) - ((n[s] || 0) * (n[u] || 0)) / o;\n            }\n          return (a *= 1 / o);\n        },\n        R = function (t, e) {\n          void 0 === t && (t = []);\n          for (var n = t.length, r = new T([]), i = 0; i < n; i++)\n            r = r.add(new T(e[i]));\n          var o = r.avg(n);\n          o.normalize();\n          var a = 0;\n          for (i = 0; i < n; i++) {\n            a += (c = new T(e[i])).squareEuclideanDistance(o);\n          }\n          var s = [];\n          t.forEach(function () {\n            s.push([]);\n          });\n          for (i = 0; i < n; i++) {\n            var c = new T(e[i]);\n            t[i].clusterInertial = 0;\n            for (var u = 0; u < n; u++)\n              if (i !== u) {\n                var h = new T(e[u]);\n                (s[i][u] = c.squareEuclideanDistance(h)),\n                  (t[i].clusterInertial += s[i][u]);\n              } else s[i][u] = 0;\n          }\n          var l = 0,\n            f = 2 * n * a;\n          for (i = 0; i < n; i++) {\n            var d = t[i].clusterId;\n            for (u = 0; u < n; u++) {\n              var p = t[u].clusterId;\n              if (i !== u && d === p)\n                l +=\n                  (t[i].clusterInertial * t[u].clusterInertial) /\n                    Math.pow(f, 2) -\n                  s[i][u] / f;\n            }\n          }\n          return Number(l.toFixed(4));\n        },\n        F = function (t, e, n, i, o, a, s, c, u) {\n          void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === i && (i = 1e-4),\n            void 0 === o && (o = !1),\n            void 0 === a && (a = void 0),\n            void 0 === s && (s = []),\n            void 0 === c && (c = [\"id\"]),\n            void 0 === u && (u = 1);\n          var h = t.nodes,\n            l = void 0 === h ? [] : h,\n            f = t.edges,\n            d = void 0 === f ? [] : f,\n            p = [];\n          if (o) {\n            l.forEach(function (t, e) {\n              (t.properties = t.properties || {}), (t.originIndex = e);\n            });\n            var g = [];\n            l.every(function (t) {\n              return t.hasOwnProperty(\"nodeType\");\n            }) &&\n              ((g = Array.from(\n                new Set(\n                  l.map(function (t) {\n                    return t.nodeType;\n                  }),\n                ),\n              )),\n              l.forEach(function (t) {\n                t.properties.nodeType = g.findIndex(function (e) {\n                  return e === t.nodeType;\n                });\n              }));\n            var v = N(l, a);\n            p = L(v, s, c);\n          }\n          var y = 1,\n            m = {},\n            b = {};\n          l.forEach(function (t, e) {\n            var n = String(y++);\n            (t.clusterId = n),\n              (m[n] = { id: n, nodes: [t] }),\n              (b[t.id] = { node: t, idx: e });\n          });\n          var x = r(t, e),\n            w = [],\n            S = {},\n            O = 0;\n          x.forEach(function (t, e) {\n            var n = 0,\n              r = l[e].id;\n            (S[r] = {}),\n              t.forEach(function (t, e) {\n                if (t) {\n                  n += t;\n                  var i = l[e].id;\n                  (S[r][i] = t), (O += t);\n                }\n              }),\n              w.push(n);\n          }),\n            (O /= 2);\n          for (var k = 1 / 0, C = 1 / 0, E = 0, j = [], P = {}; ; ) {\n            (k =\n              o &&\n              l.every(function (t) {\n                return t.hasOwnProperty(\"properties\");\n              })\n                ? _(l, x, w, O) + R(l, p) * u\n                : _(l, x, w, O)),\n              0 === E && ((C = k), (j = l), (P = m));\n            var A = k > 0 && k > C && k - C < i;\n            if (\n              (k > C &&\n                ((j = l.map(function (t) {\n                  return { node: t, clusterId: t.clusterId };\n                })),\n                (P = Object(M.clone)(m)),\n                (C = k)),\n              A || E > 100)\n            )\n              break;\n            E++,\n              Object.keys(m).forEach(function (t) {\n                var e = 0;\n                d.forEach(function (r) {\n                  var i = r.source,\n                    o = r.target,\n                    a = b[i].node.clusterId,\n                    s = b[o].node.clusterId;\n                  ((a === t && s !== t) || (s === t && a !== t)) &&\n                    (e += r[n] || 1);\n                }),\n                  (m[t].sumTot = e);\n              }),\n              l.forEach(function (t, e) {\n                var r,\n                  i = m[t.clusterId],\n                  a = 0,\n                  s = w[e] / (2 * O),\n                  c = 0,\n                  h = i.nodes;\n                h.forEach(function (t) {\n                  var n = b[t.id].idx;\n                  c += x[e][n] || 0;\n                });\n                var l = c - i.sumTot * s,\n                  f = h.filter(function (e) {\n                    return e.id !== t.id;\n                  }),\n                  g = [];\n                f.forEach(function (t, e) {\n                  g[e] = p[t.originIndex];\n                });\n                var v = R(f, p) * u,\n                  y = S[t.id];\n                if (\n                  (Object.keys(y).forEach(function (n) {\n                    var i = b[n].node.clusterId;\n                    if (i !== t.clusterId) {\n                      var c = m[i],\n                        h = c.nodes;\n                      if (h && h.length) {\n                        var f = 0;\n                        h.forEach(function (t) {\n                          var n = b[t.id].idx;\n                          f += x[e][n] || 0;\n                        });\n                        var d = f - c.sumTot * s,\n                          g = h.concat([t]),\n                          y = [];\n                        g.forEach(function (t, e) {\n                          y[e] = p[t.originIndex];\n                        });\n                        var w = R(g, p) * u,\n                          S = d - l;\n                        o && (S = d + w - (l + v)), S > a && ((a = S), (r = c));\n                      }\n                    }\n                  }),\n                  a > 0)\n                ) {\n                  r.nodes.push(t);\n                  var M = t.clusterId;\n                  t.clusterId = r.id;\n                  var k = i.nodes.indexOf(t);\n                  i.nodes.splice(k, 1);\n                  var C = 0,\n                    E = 0;\n                  d.forEach(function (t) {\n                    var e = t.source,\n                      i = t.target,\n                      o = b[e].node.clusterId,\n                      a = b[i].node.clusterId;\n                    ((o === r.id && a !== r.id) ||\n                      (a === r.id && o !== r.id)) &&\n                      (C += t[n] || 1),\n                      ((o === M && a !== M) || (a === M && o !== M)) &&\n                        (E += t[n] || 1);\n                  }),\n                    (r.sumTot = C),\n                    (i.sumTot = E);\n                }\n              });\n          }\n          var I = {},\n            T = 0;\n          Object.keys(P).forEach(function (t) {\n            var e = P[t];\n            if (e.nodes && e.nodes.length) {\n              var n = String(T + 1);\n              n !== t &&\n                ((e.id = n),\n                (e.nodes = e.nodes.map(function (t) {\n                  return { id: t.id, clusterId: n };\n                })),\n                (P[n] = e),\n                (I[t] = n),\n                delete P[t],\n                T++);\n            } else delete P[t];\n          }),\n            j.forEach(function (t) {\n              var e = t.node,\n                n = t.clusterId;\n              (e.clusterId = n),\n                e.clusterId && I[e.clusterId] && (e.clusterId = I[e.clusterId]);\n            });\n          var B = [],\n            D = {};\n          d.forEach(function (t) {\n            var e = t.source,\n              r = t.target,\n              i = t[n] || 1,\n              o = b[e].node.clusterId,\n              a = b[r].node.clusterId,\n              s = \"\".concat(o, \"---\").concat(a);\n            if (D[s]) (D[s].weight += i), D[s].count++;\n            else {\n              var c = { source: o, target: a, weight: i, count: 1 };\n              (D[s] = c), B.push(c);\n            }\n          });\n          var F = [];\n          return (\n            Object.keys(P).forEach(function (t) {\n              F.push(P[t]);\n            }),\n            { clusters: F, clusterEdges: B }\n          );\n        },\n        Y = function (t, e, n, r, i, o, a, s) {\n          return (\n            void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === r && (r = 1e-4),\n            void 0 === i && (i = void 0),\n            void 0 === o && (o = []),\n            void 0 === a && (a = [\"id\"]),\n            void 0 === s && (s = 1),\n            F(t, e, n, r, !0, i, o, a, s)\n          );\n        },\n        X = function (t, e) {\n          var n;\n          void 0 === e && (e = 1);\n          for (\n            var r = Object(M.clone)(t),\n              i = r.nodes,\n              o = void 0 === i ? [] : i,\n              a = r.edges,\n              s = void 0 === a ? [] : a,\n              c = function () {\n                var t = g({ nodes: o, edges: s }),\n                  r = Object.keys(t);\n                r.sort(function (e, n) {\n                  var r, i;\n                  return (\n                    (null === (r = t[e]) || void 0 === r ? void 0 : r.degree) -\n                    (null === (i = t[n]) || void 0 === i ? void 0 : i.degree)\n                  );\n                });\n                var i = r[0];\n                if (\n                  !o.length ||\n                  (null === (n = t[i]) || void 0 === n ? void 0 : n.degree) >= e\n                )\n                  return \"break\";\n                var a = o.findIndex(function (t) {\n                  return t.id === i;\n                });\n                o.splice(a, 1),\n                  (s = s.filter(function (t) {\n                    return !(t.source === i || t.target === i);\n                  }));\n              };\n            ;\n\n          ) {\n            if (\"break\" === c()) break;\n          }\n          return { nodes: o, edges: s };\n        },\n        z = function (t, e, n) {\n          var r = [];\n          switch (t) {\n            case E.EuclideanDistance:\n              r = e[n];\n              break;\n            default:\n              r = [];\n          }\n          return r;\n        },\n        W = function (t, e, n, r, i, o) {\n          void 0 === e && (e = 3),\n            void 0 === n && (n = void 0),\n            void 0 === r && (r = []),\n            void 0 === i && (i = [\"id\"]),\n            void 0 === o && (o = E.EuclideanDistance);\n          var a = t.nodes,\n            s = void 0 === a ? [] : a,\n            c = t.edges,\n            u = void 0 === c ? [] : c,\n            h = { clusters: [{ id: \"0\", nodes: s }], clusterEdges: [] };\n          if (\n            o === E.EuclideanDistance &&\n            !s.every(function (t) {\n              return t.hasOwnProperty(n);\n            })\n          )\n            return h;\n          var l = [],\n            f = [];\n          if (\n            (o === E.EuclideanDistance && ((l = N(s, n)), (f = L(l, r, i))),\n            !f.length)\n          )\n            return h;\n          for (\n            var d = Object(M.uniq)(\n                f.map(function (t) {\n                  return t.join(\"\");\n                }),\n              ),\n              p = Math.min(e, s.length, d.length),\n              g = 0;\n            g < s.length;\n            g++\n          )\n            s[g].originIndex = g;\n          var v = [],\n            y = [],\n            m = [];\n          for (g = 0; g < p; g++)\n            if (0 === g) {\n              var b = Math.floor(Math.random() * s.length);\n              switch (o) {\n                case E.EuclideanDistance:\n                  v[g] = f[b];\n                  break;\n                default:\n                  v[g] = [];\n              }\n              y.push(b), (m[g] = [s[b]]), (s[b].clusterId = String(g));\n            } else {\n              for (\n                var x = -1 / 0,\n                  w = 0,\n                  S = function (t) {\n                    if (!y.includes(t)) {\n                      for (var e = 0, n = 0; n < v.length; n++) {\n                        var r = 0;\n                        switch (o) {\n                          case E.EuclideanDistance:\n                            r = D(f[s[t].originIndex], v[n], o);\n                        }\n                        e += r;\n                      }\n                      var i = e / v.length;\n                      i > x &&\n                        !v.find(function (e) {\n                          return Object(M.isEqual)(\n                            e,\n                            z(o, f, s[t].originIndex),\n                          );\n                        }) &&\n                        ((x = i), (w = t));\n                    }\n                  },\n                  O = 0;\n                O < s.length;\n                O++\n              )\n                S(O);\n              (v[g] = z(o, f, w)),\n                y.push(w),\n                (m[g] = [s[w]]),\n                (s[w].clusterId = String(g));\n            }\n          for (var k = 0; ; ) {\n            for (g = 0; g < s.length; g++) {\n              var C = 0,\n                j = 1 / 0;\n              if (0 !== k || !y.includes(g)) {\n                for (var P = 0; P < v.length; P++) {\n                  var A = 0;\n                  switch (o) {\n                    case E.EuclideanDistance:\n                      A = D(f[g], v[P], o);\n                  }\n                  A < j && ((j = A), (C = P));\n                }\n                if (void 0 !== s[g].clusterId)\n                  for (\n                    var I = m[Number(s[g].clusterId)].length - 1;\n                    I >= 0;\n                    I--\n                  )\n                    m[Number(s[g].clusterId)][I].id === s[g].id &&\n                      m[Number(s[g].clusterId)].splice(I, 1);\n                (s[g].clusterId = String(C)), m[C].push(s[g]);\n              }\n            }\n            var B = !1;\n            for (g = 0; g < m.length; g++) {\n              var _ = m[g],\n                R = new T([]);\n              for (P = 0; P < _.length; P++)\n                R = R.add(new T(f[_[P].originIndex]));\n              var F = R.avg(_.length);\n              F.equal(new T(v[g])) || ((B = !0), (v[g] = F.getArr()));\n            }\n            if (\n              (k++,\n              (s.every(function (t) {\n                return void 0 !== t.clusterId;\n              }) &&\n                B) ||\n                k >= 1e3)\n            )\n              break;\n          }\n          var Y = [],\n            X = {};\n          return (\n            u.forEach(function (t) {\n              var e,\n                n,\n                r = t.source,\n                i = t.target,\n                o =\n                  null ===\n                    (e = s.find(function (t) {\n                      return t.id === r;\n                    })) || void 0 === e\n                    ? void 0\n                    : e.clusterId,\n                a =\n                  null ===\n                    (n = s.find(function (t) {\n                      return t.id === i;\n                    })) || void 0 === n\n                    ? void 0\n                    : n.clusterId,\n                c = \"\".concat(o, \"---\").concat(a);\n              if (X[c]) X[c].count++;\n              else {\n                var u = { source: o, target: a, count: 1 };\n                (X[c] = u), Y.push(u);\n              }\n            }),\n            { clusters: m, clusterEdges: Y }\n          );\n        },\n        q = function (t, e) {\n          var n = new T(e),\n            r = n.norm2(),\n            i = new T(t),\n            o = i.norm2(),\n            a = n.dot(i),\n            s = r * o,\n            c = s ? a / s : 0;\n          return c;\n        },\n        V = function (t, e, n, r, i) {\n          void 0 === t && (t = []),\n            void 0 === n && (n = void 0),\n            void 0 === r && (r = []),\n            void 0 === i && (i = []);\n          var o = Object(M.clone)(\n              t.filter(function (t) {\n                return t.id !== e.id;\n              }),\n            ),\n            a = t.findIndex(function (t) {\n              return t.id === e.id;\n            }),\n            s = N(t, n),\n            c = L(s, r, i),\n            u = c[a],\n            h = [];\n          return (\n            o.forEach(function (t, n) {\n              if (t.id !== e.id) {\n                var r = c[n],\n                  i = q(r, u);\n                h.push(i), (t.cosineSimilarity = i);\n              }\n            }),\n            o.sort(function (t, e) {\n              return e.cosineSimilarity - t.cosineSimilarity;\n            }),\n            { allCosineSimilarity: h, similarNodes: o }\n          );\n        },\n        G = (function () {\n          function t(t) {\n            (this.count = t.length), (this.parent = {});\n            for (var e = 0, n = t; e < n.length; e++) {\n              var r = n[e];\n              this.parent[r] = r;\n            }\n          }\n          return (\n            (t.prototype.find = function (t) {\n              for (; this.parent[t] !== t; ) t = this.parent[t];\n              return t;\n            }),\n            (t.prototype.union = function (t, e) {\n              var n = this.find(t),\n                r = this.find(e);\n              n !== r &&\n                (n < r\n                  ? (this.parent[e] !== e && this.union(this.parent[e], t),\n                    (this.parent[e] = this.parent[t]))\n                  : (this.parent[t] !== t && this.union(this.parent[t], e),\n                    (this.parent[t] = this.parent[e])));\n            }),\n            (t.prototype.connected = function (t, e) {\n              return this.find(t) === this.find(e);\n            }),\n            t\n          );\n        })(),\n        H = function (t, e) {\n          return t - e;\n        },\n        U = (function () {\n          function t(t) {\n            void 0 === t && (t = H), (this.compareFn = t), (this.list = []);\n          }\n          return (\n            (t.prototype.getLeft = function (t) {\n              return 2 * t + 1;\n            }),\n            (t.prototype.getRight = function (t) {\n              return 2 * t + 2;\n            }),\n            (t.prototype.getParent = function (t) {\n              return 0 === t ? null : Math.floor((t - 1) / 2);\n            }),\n            (t.prototype.isEmpty = function () {\n              return this.list.length <= 0;\n            }),\n            (t.prototype.top = function () {\n              return this.isEmpty() ? void 0 : this.list[0];\n            }),\n            (t.prototype.delMin = function () {\n              var t = this.top(),\n                e = this.list.pop();\n              return (\n                this.list.length > 0 && ((this.list[0] = e), this.moveDown(0)),\n                t\n              );\n            }),\n            (t.prototype.insert = function (t) {\n              if (null !== t) {\n                this.list.push(t);\n                var e = this.list.length - 1;\n                return this.moveUp(e), !0;\n              }\n              return !1;\n            }),\n            (t.prototype.moveUp = function (t) {\n              for (\n                var e = this.getParent(t);\n                t && t > 0 && this.compareFn(this.list[e], this.list[t]) > 0;\n\n              ) {\n                var n = this.list[e];\n                (this.list[e] = this.list[t]),\n                  (this.list[t] = n),\n                  (t = e),\n                  (e = this.getParent(t));\n              }\n            }),\n            (t.prototype.moveDown = function (t) {\n              var e,\n                n = t,\n                r = this.getLeft(t),\n                i = this.getRight(t),\n                o = this.list.length;\n              null !== r &&\n              r < o &&\n              this.compareFn(this.list[n], this.list[r]) > 0\n                ? (n = r)\n                : null !== i &&\n                  i < o &&\n                  this.compareFn(this.list[n], this.list[i]) > 0 &&\n                  (n = i),\n                t !== n &&\n                  ((e = [this.list[n], this.list[t]]),\n                  (this.list[t] = e[0]),\n                  (this.list[n] = e[1]),\n                  this.moveDown(n));\n            }),\n            t\n          );\n        })(),\n        Z = function (t, e) {\n          var n = [],\n            r = t.nodes,\n            i = void 0 === r ? [] : r,\n            o = t.edges,\n            a = void 0 === o ? [] : o;\n          if (0 === i.length) return n;\n          var s = i[0],\n            c = new Set();\n          c.add(s);\n          var h = new U(function (t, n) {\n            return e ? t.weight - n.weight : 0;\n          });\n          for (\n            u(s.id, a).forEach(function (t) {\n              h.insert(t);\n            });\n            !h.isEmpty();\n\n          ) {\n            var l = h.delMin(),\n              f = l.source,\n              d = l.target;\n            (c.has(f) && c.has(d)) ||\n              (n.push(l),\n              c.has(f) ||\n                (c.add(f),\n                u(f, a).forEach(function (t) {\n                  h.insert(t);\n                })),\n              c.has(d) ||\n                (c.add(d),\n                u(d, a).forEach(function (t) {\n                  h.insert(t);\n                })));\n          }\n          return n;\n        },\n        K = function (t, e) {\n          var n = [],\n            r = t.nodes,\n            i = void 0 === r ? [] : r,\n            o = t.edges,\n            a = void 0 === o ? [] : o;\n          if (0 === i.length) return n;\n          var s = a.map(function (t) {\n            return t;\n          });\n          e &&\n            s.sort(function (t, e) {\n              return t.weight - e.weight;\n            });\n          for (\n            var c = new G(\n              i.map(function (t) {\n                return t.id;\n              }),\n            );\n            s.length > 0;\n\n          ) {\n            var u = s.shift(),\n              h = u.source,\n              l = u.target;\n            c.connected(h, l) || (n.push(u), c.union(h, l));\n          }\n          return n;\n        },\n        $ = function (t, e, n) {\n          return n ? { prim: Z, kruskal: K }[n](t, e) : K(t, e);\n        },\n        Q = function (t, e, n) {\n          \"number\" != typeof e && (e = 1e-6),\n            \"number\" != typeof n && (n = 0.85);\n          for (\n            var r,\n              i = 1,\n              o = 0,\n              a = 1e3,\n              s = t.nodes,\n              u = void 0 === s ? [] : s,\n              h = t.edges,\n              l = void 0 === h ? [] : h,\n              f = u.length,\n              d = {},\n              p = {},\n              v = 0;\n            v < f;\n            ++v\n          ) {\n            (d[(m = (O = u[v]).id)] = 1 / f), (p[m] = 1 / f);\n          }\n          for (var y = g(t); a > 0 && i > e; ) {\n            o = 0;\n            for (v = 0; v < f; ++v) {\n              var m = (O = u[v]).id;\n              if (((r = 0), 0 === y[O.id].inDegree)) d[m] = 0;\n              else {\n                for (var b = c(m, l, \"source\"), x = 0; x < b.length; ++x) {\n                  var w = b[x],\n                    S = y[w].outDegree;\n                  S > 0 && (r += p[w] / S);\n                }\n                (d[m] = n * r), (o += d[m]);\n              }\n            }\n            (o = (1 - o) / f), (i = 0);\n            for (v = 0; v < f; ++v) {\n              var O;\n              (r = d[(m = (O = u[v]).id)] + o),\n                (i += Math.abs(r - p[m])),\n                (p[m] = r);\n            }\n            a -= 1;\n          }\n          return p;\n        },\n        J = function (t, e, n, r) {\n          void 0 === t && (t = -1),\n            void 0 === e && (e = -1),\n            void 0 === n && (n = -1),\n            void 0 === r && (r = \"-1\"),\n            (this.id = t),\n            (this.from = e),\n            (this.to = n),\n            (this.label = r);\n        },\n        tt = (function () {\n          function t(t, e) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = \"-1\"),\n              (this.id = t),\n              (this.label = e),\n              (this.edges = []),\n              (this.edgeMap = {});\n          }\n          return (\n            (t.prototype.addEdge = function (t) {\n              this.edges.push(t), (this.edgeMap[t.id] = t);\n            }),\n            t\n          );\n        })(),\n        et = (function () {\n          function t(t, e, n) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = !0),\n              void 0 === n && (n = !1),\n              (this.id = t),\n              (this.edgeIdAutoIncrease = e),\n              (this.edges = []),\n              (this.nodes = []),\n              (this.nodeMap = {}),\n              (this.edgeMap = {}),\n              (this.nodeLabelMap = {}),\n              (this.edgeLabelMap = {}),\n              (this.counter = 0),\n              (this.directed = n);\n          }\n          return (\n            (t.prototype.getNodeNum = function () {\n              return this.nodes.length;\n            }),\n            (t.prototype.addNode = function (t, e) {\n              if (!this.nodeMap[t]) {\n                var n = new tt(t, e);\n                this.nodes.push(n),\n                  (this.nodeMap[t] = n),\n                  this.nodeLabelMap[e] || (this.nodeLabelMap[e] = []),\n                  this.nodeLabelMap[e].push(t);\n              }\n            }),\n            (t.prototype.addEdge = function (t, e, n, r) {\n              if (\n                ((this.edgeIdAutoIncrease || void 0 === t) &&\n                  (t = this.counter++),\n                !(\n                  this.nodeMap[e] &&\n                  this.nodeMap[n] &&\n                  this.nodeMap[n].edgeMap[t]\n                ))\n              ) {\n                var i = new J(t, e, n, r);\n                if (\n                  (this.edges.push(i),\n                  (this.edgeMap[t] = i),\n                  this.nodeMap[e].addEdge(i),\n                  this.edgeLabelMap[r] || (this.edgeLabelMap[r] = []),\n                  this.edgeLabelMap[r].push(i),\n                  !this.directed)\n                ) {\n                  var o = new J(t, n, e, r);\n                  this.nodeMap[n].addEdge(o), this.edgeLabelMap[r].push(o);\n                }\n              }\n            }),\n            t\n          );\n        })(),\n        nt = (function () {\n          function t(t, e, n, r, i) {\n            (this.fromNode = t),\n              (this.toNode = e),\n              (this.nodeEdgeNodeLabel = {\n                nodeLabel1: n || \"-1\",\n                edgeLabel: r || \"-1\",\n                nodeLabel2: i || \"-1\",\n              });\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              return (\n                this.fromNode === t.formNode &&\n                this.toNode === t.toNode &&\n                this.nodeEdgeNodeLabel === t.nodeEdgeNodeLabel\n              );\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            t\n          );\n        })(),\n        rt = (function () {\n          function t() {\n            (this.rmpath = []), (this.dfsEdgeList = []);\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              var e = this.dfsEdgeList.length;\n              if (e !== t.length) return !1;\n              for (var n = 0; n < e; n++)\n                if (this.dfsEdgeList[n] !== t[n]) return !1;\n              return !0;\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            (t.prototype.pushBack = function (t, e, n, r, i) {\n              return (\n                this.dfsEdgeList.push(new nt(t, e, n, r, i)), this.dfsEdgeList\n              );\n            }),\n            (t.prototype.toGraph = function (t, e) {\n              void 0 === t && (t = -1), void 0 === e && (e = !1);\n              var n = new et(t, !0, e);\n              return (\n                this.dfsEdgeList.forEach(function (t) {\n                  var e = t.fromNode,\n                    r = t.toNode,\n                    i = t.nodeEdgeNodeLabel,\n                    o = i.nodeLabel1,\n                    a = i.edgeLabel,\n                    s = i.nodeLabel2;\n                  \"-1\" !== o && n.addNode(e, o),\n                    \"-1\" !== s && n.addNode(r, s),\n                    \"-1\" !== o && s !== o && n.addEdge(void 0, e, r, a);\n                }),\n                n\n              );\n            }),\n            (t.prototype.buildRmpath = function () {\n              this.rmpath = [];\n              for (\n                var t = void 0, e = this.dfsEdgeList.length - 1;\n                e >= 0;\n                e--\n              ) {\n                var n = this.dfsEdgeList[e],\n                  r = n.fromNode,\n                  i = n.toNode;\n                r < i &&\n                  (void 0 === t || i === t) &&\n                  (this.rmpath.push(e), (t = r));\n              }\n              return this.rmpath;\n            }),\n            (t.prototype.getNodeNum = function () {\n              var t = {};\n              return (\n                this.dfsEdgeList.forEach(function (e) {\n                  t[e.fromNode] || (t[e.fromNode] = !0),\n                    t[e.toNode] || (t[e.toNode] = !0);\n                }),\n                Object.keys(t).length\n              );\n            }),\n            t\n          );\n        })(),\n        it = (function () {\n          function t(t) {\n            if (\n              ((this.his = {}),\n              (this.nodesUsed = {}),\n              (this.edgesUsed = {}),\n              (this.edges = []),\n              t)\n            ) {\n              for (; t; ) {\n                var e = t.edge;\n                this.edges.push(e),\n                  (this.nodesUsed[e.from] = 1),\n                  (this.nodesUsed[e.to] = 1),\n                  (this.edgesUsed[e.id] = 1),\n                  (t = t.preNode);\n              }\n              this.edges = this.edges.reverse();\n            }\n          }\n          return (\n            (t.prototype.hasNode = function (t) {\n              return 1 === this.nodesUsed[t.id];\n            }),\n            (t.prototype.hasEdge = function (t) {\n              return 1 === this.edgesUsed[t.id];\n            }),\n            t\n          );\n        })(),\n        ot = (function () {\n          function t(t) {\n            var e = t.graphs,\n              n = t.minSupport,\n              r = void 0 === n ? 2 : n,\n              i = t.minNodeNum,\n              o = void 0 === i ? 1 : i,\n              a = t.maxNodeNum,\n              s = void 0 === a ? 4 : a,\n              c = t.top,\n              u = void 0 === c ? 10 : c,\n              h = t.directed,\n              l = void 0 !== h && h,\n              f = t.verbose,\n              d = void 0 !== f && f;\n            (this.graphs = e),\n              (this.dfsCode = new rt()),\n              (this.support = 0),\n              (this.frequentSize1Subgraphs = []),\n              (this.frequentSubgraphs = []),\n              (this.minSupport = r),\n              (this.top = u),\n              (this.directed = l),\n              (this.counter = 0),\n              (this.maxNodeNum = s),\n              (this.minNodeNum = o),\n              (this.verbose = d),\n              this.maxNodeNum < this.minNodeNum &&\n                (this.maxNodeNum = this.minNodeNum),\n              (this.reportDF = []);\n          }\n          return (\n            (t.prototype.findForwardRootEdges = function (t, e) {\n              var n = this,\n                r = [],\n                i = t.nodeMap;\n              return (\n                e.edges.forEach(function (t) {\n                  (n.directed || e.label <= i[t.to].label) && r.push(t);\n                }),\n                r\n              );\n            }),\n            (t.prototype.findBackwardEdge = function (t, e, n, r) {\n              if (!this.directed && e === n) return null;\n              for (\n                var i = t.nodeMap, o = i[n.to].edges, a = o.length, s = 0;\n                s < a;\n                s++\n              ) {\n                var c = o[s];\n                if (!r.hasEdge(c) && c.to === e.from)\n                  if (this.directed) {\n                    if (\n                      i[e.from].label < i[n.to].label ||\n                      (i[e.from].label === i[n.to].label && e.label <= c.label)\n                    )\n                      return c;\n                  } else if (\n                    e.label < c.label ||\n                    (e.label === c.label && i[e.to].label <= i[n.to].label)\n                  )\n                    return c;\n              }\n              return null;\n            }),\n            (t.prototype.findForwardPureEdges = function (t, e, n, r) {\n              for (\n                var i = [],\n                  o = e.to,\n                  a = t.nodeMap[o].edges,\n                  s = a.length,\n                  c = 0;\n                c < s;\n                c++\n              ) {\n                var u = a[c],\n                  h = t.nodeMap[u.to];\n                n <= h.label && !r.hasNode(h) && i.push(u);\n              }\n              return i;\n            }),\n            (t.prototype.findForwardRmpathEdges = function (t, e, n, r) {\n              for (\n                var i = [],\n                  o = t.nodeMap,\n                  a = o[e.to].label,\n                  s = o[e.from].edges,\n                  c = s.length,\n                  u = 0;\n                u < c;\n                u++\n              ) {\n                var h = s[u],\n                  l = o[h.to].label;\n                e.to === h.to ||\n                  n > l ||\n                  r.hasNode(o[h.to]) ||\n                  ((e.label < h.label || (e.label === h.label && a <= l)) &&\n                    i.push(h));\n              }\n              return i;\n            }),\n            (t.prototype.getSupport = function (t) {\n              var e = {};\n              return (\n                t.forEach(function (t) {\n                  e[t.graphId] || (e[t.graphId] = !0);\n                }),\n                Object.keys(e).length\n              );\n            }),\n            (t.prototype.findMinLabel = function (t) {\n              var e = void 0;\n              return (\n                Object.keys(t).forEach(function (n) {\n                  var r = t[n],\n                    i = r.nodeLabel1,\n                    o = r.edgeLabel,\n                    a = r.nodeLabel2;\n                  e\n                    ? (i < e.nodeLabel1 ||\n                        (i === e.nodeLabel1 && o < e.edgeLabel) ||\n                        (i === e.nodeLabel1 &&\n                          o === e.edgeLabel &&\n                          a < e.nodeLabel2)) &&\n                      (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a })\n                    : (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a });\n                }),\n                e\n              );\n            }),\n            (t.prototype.isMin = function () {\n              var t = this,\n                e = this.dfsCode;\n              if (\n                (this.verbose && console.log(\"isMin checking\", e),\n                1 === e.dfsEdgeList.length)\n              )\n                return !0;\n              var n = this.directed,\n                r = e.toGraph(-1, n),\n                i = r.nodeMap,\n                o = new rt(),\n                a = {};\n              r.nodes.forEach(function (e) {\n                t.findForwardRootEdges(r, e).forEach(function (t) {\n                  var n = i[t.to],\n                    o = \"\"\n                      .concat(e.label, \"-\")\n                      .concat(t.label, \"-\")\n                      .concat(n.label);\n                  a[o] ||\n                    (a[o] = {\n                      projected: [],\n                      nodeLabel1: e.label,\n                      edgeLabel: t.label,\n                      nodeLabel2: n.label,\n                    });\n                  var s = { graphId: r.id, edge: t, preNode: null };\n                  a[o].projected.push(s);\n                });\n              });\n              var s = this.findMinLabel(a);\n              if (s) {\n                o.dfsEdgeList.push(\n                  new nt(0, 1, s.nodeLabel1, s.edgeLabel, s.nodeLabel2),\n                );\n                var c = \"\"\n                  .concat(s.nodeLabel1, \"-\")\n                  .concat(s.edgeLabel, \"-\")\n                  .concat(s.nodeLabel2);\n                return (function a(s) {\n                  for (\n                    var c = o.buildRmpath(),\n                      u = o.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                      h = o.dfsEdgeList[c[0]].toNode,\n                      l = {},\n                      f = !1,\n                      d = 0,\n                      p = n ? -1 : 0,\n                      g = function (e) {\n                        if (f) return \"break\";\n                        s.forEach(function (n) {\n                          var i = new it(n),\n                            a = t.findBackwardEdge(\n                              r,\n                              i.edges[c[e]],\n                              i.edges[c[0]],\n                              i,\n                            );\n                          a &&\n                            (l[a.label] ||\n                              (l[a.label] = {\n                                projected: [],\n                                edgeLabel: a.label,\n                              }),\n                            l[a.label].projected.push({\n                              graphId: r.id,\n                              edge: l,\n                              preNode: n,\n                            }),\n                            (d = o.dfsEdgeList[c[e]].fromNode),\n                            (f = !0));\n                        });\n                      },\n                      v = c.length - 1;\n                    v > p;\n                    v--\n                  ) {\n                    if (\"break\" === g(v)) break;\n                  }\n                  if (f) {\n                    var y = t.findMinLabel(l);\n                    o.dfsEdgeList.push(new nt(h, d, \"-1\", y.edgeLabel, \"-1\"));\n                    var m = o.dfsEdgeList.length - 1;\n                    return (\n                      t.dfsCode.dfsEdgeList[m] === o.dfsEdgeList[m] &&\n                      a(l[y.edgeLabel].projected)\n                    );\n                  }\n                  var b = {};\n                  f = !1;\n                  var x = 0;\n                  s.forEach(function (e) {\n                    var n = new it(e),\n                      o = t.findForwardPureEdges(r, n.edges[c[0]], u, n);\n                    o.length > 0 &&\n                      ((f = !0),\n                      (x = h),\n                      o.forEach(function (t) {\n                        var n = \"\".concat(t.label, \"-\").concat(i[t.to].label);\n                        b[n] ||\n                          (b[n] = {\n                            projected: [],\n                            edgeLabel: t.label,\n                            nodeLabel2: i[t.to].label,\n                          }),\n                          b[n].projected.push({\n                            graphId: r.id,\n                            edge: t,\n                            preNode: e,\n                          });\n                      }));\n                  });\n                  var w = c.length,\n                    S = function (e) {\n                      if (f) return \"break\";\n                      var n = c[e];\n                      s.forEach(function (e) {\n                        var a = new it(e),\n                          s = t.findForwardRmpathEdges(r, a.edges[n], u, a);\n                        s.length > 0 &&\n                          ((f = !0),\n                          (x = o.dfsEdgeList[n].fromNode),\n                          s.forEach(function (t) {\n                            var n = \"\"\n                              .concat(t.label, \"-\")\n                              .concat(i[t.to].label);\n                            b[n] ||\n                              (b[n] = {\n                                projected: [],\n                                edgeLabel: t.label,\n                                nodeLabel2: i[t.to].label,\n                              }),\n                              b[n].projected.push({\n                                graphId: r.id,\n                                edge: t,\n                                preNode: e,\n                              });\n                          }));\n                      });\n                    };\n                  for (v = 0; v < w; v++) {\n                    if (\"break\" === S(v)) break;\n                  }\n                  if (!f) return !0;\n                  var O = t.findMinLabel(b);\n                  o.dfsEdgeList.push(\n                    new nt(x, h + 1, \"-1\", O.edgeLabel, O.nodeLabel2),\n                  );\n                  var M = o.dfsEdgeList.length - 1;\n                  return (\n                    e.dfsEdgeList[M] === o.dfsEdgeList[M] &&\n                    a(\n                      b[\"\".concat(O.edgeLabel, \"-\").concat(O.nodeLabel2)]\n                        .projected,\n                    )\n                  );\n                })(a[c].projected);\n              }\n            }),\n            (t.prototype.report = function () {\n              if (!(this.dfsCode.getNodeNum() < this.minNodeNum)) {\n                this.counter++;\n                var t = this.dfsCode.toGraph(this.counter, this.directed);\n                this.frequentSubgraphs.push(Object(M.clone)(t));\n              }\n            }),\n            (t.prototype.subGraphMining = function (t) {\n              var e = this;\n              if (!(this.getSupport(t) < this.minSupport) && this.isMin()) {\n                this.report();\n                var n = this.dfsCode.getNodeNum(),\n                  r = this.dfsCode.buildRmpath(),\n                  i = this.dfsCode.dfsEdgeList[r[0]].toNode,\n                  o = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                  a = {},\n                  s = {};\n                t.forEach(function (t) {\n                  for (\n                    var c = e.graphs[t.graphId],\n                      u = c.nodeMap,\n                      h = new it(t),\n                      l = r.length - 1;\n                    l >= 0;\n                    l--\n                  ) {\n                    var f = e.findBackwardEdge(\n                      c,\n                      h.edges[r[l]],\n                      h.edges[r[0]],\n                      h,\n                    );\n                    if (f) {\n                      var d = \"\"\n                        .concat(e.dfsCode.dfsEdgeList[r[l]].fromNode, \"-\")\n                        .concat(f.label);\n                      s[d] ||\n                        (s[d] = {\n                          projected: [],\n                          toNodeId: e.dfsCode.dfsEdgeList[r[l]].fromNode,\n                          edgeLabel: f.label,\n                        }),\n                        s[d].projected.push({\n                          graphId: t.graphId,\n                          edge: f,\n                          preNode: t,\n                        });\n                    }\n                  }\n                  if (!(n >= e.maxNodeNum)) {\n                    e.findForwardPureEdges(c, h.edges[r[0]], o, h).forEach(\n                      function (e) {\n                        var n = \"\"\n                          .concat(i, \"-\")\n                          .concat(e.label, \"-\")\n                          .concat(u[e.to].label);\n                        a[n] ||\n                          (a[n] = {\n                            projected: [],\n                            fromNodeId: i,\n                            edgeLabel: e.label,\n                            nodeLabel2: u[e.to].label,\n                          }),\n                          a[n].projected.push({\n                            graphId: t.graphId,\n                            edge: e,\n                            preNode: t,\n                          });\n                      },\n                    );\n                    var p = function (n) {\n                      e.findForwardRmpathEdges(c, h.edges[r[n]], o, h).forEach(\n                        function (i) {\n                          var o = \"\"\n                            .concat(e.dfsCode.dfsEdgeList[r[n]].fromNode, \"-\")\n                            .concat(i.label, \"-\")\n                            .concat(u[i.to].label);\n                          a[o] ||\n                            (a[o] = {\n                              projected: [],\n                              fromNodeId: e.dfsCode.dfsEdgeList[r[n]].fromNode,\n                              edgeLabel: i.label,\n                              nodeLabel2: u[i.to].label,\n                            }),\n                            a[o].projected.push({\n                              graphId: t.graphId,\n                              edge: i,\n                              preNode: t,\n                            });\n                        },\n                      );\n                    };\n                    for (l = 0; l < r.length; l++) p(l);\n                  }\n                }),\n                  Object.keys(s).forEach(function (t) {\n                    var n = s[t],\n                      r = n.toNodeId,\n                      o = n.edgeLabel;\n                    e.dfsCode.dfsEdgeList.push(new nt(i, r, \"-1\", o, \"-1\")),\n                      e.subGraphMining(s[t].projected),\n                      e.dfsCode.dfsEdgeList.pop();\n                  }),\n                  Object.keys(a).forEach(function (t) {\n                    var n = a[t],\n                      r = n.fromNodeId,\n                      o = n.edgeLabel,\n                      s = n.nodeLabel2;\n                    e.dfsCode.dfsEdgeList.push(new nt(r, i + 1, \"-1\", o, s)),\n                      e.subGraphMining(a[t].projected),\n                      e.dfsCode.dfsEdgeList.pop();\n                  });\n              }\n            }),\n            (t.prototype.generate1EdgeFrequentSubGraphs = function () {\n              var t = this.graphs,\n                e = this.directed,\n                n = this.minSupport,\n                r = this.frequentSize1Subgraphs,\n                i = {},\n                o = {},\n                a = {},\n                s = {};\n              return (\n                Object.keys(t).forEach(function (n) {\n                  var r = t[n],\n                    c = r.nodeMap;\n                  r.nodes.forEach(function (t, r) {\n                    var u = t.label,\n                      h = \"\".concat(n, \"-\").concat(u);\n                    if (!a[h]) {\n                      var l = i[u] || 0;\n                      l++, (i[u] = l);\n                    }\n                    (a[h] = { graphKey: n, label: u }),\n                      t.edges.forEach(function (t) {\n                        var r = u,\n                          i = c[t.to].label;\n                        if (!e && r > i) {\n                          var a = i;\n                          (i = r), (r = a);\n                        }\n                        var h = t.label,\n                          l = \"\"\n                            .concat(n, \"-\")\n                            .concat(r, \"-\")\n                            .concat(h, \"-\")\n                            .concat(i),\n                          f = \"\".concat(r, \"-\").concat(h, \"-\").concat(i);\n                        if (!o[f]) {\n                          var d = o[f] || 0;\n                          d++, (o[f] = d);\n                        }\n                        s[l] = {\n                          graphId: n,\n                          nodeLabel1: r,\n                          edgeLabel: h,\n                          nodeLabel2: i,\n                        };\n                      });\n                  });\n                }),\n                Object.keys(i).forEach(function (t) {\n                  if (!(i[t] < n)) {\n                    var e = { nodes: [], edges: [] };\n                    e.nodes.push({ id: \"0\", label: t }), r.push(e);\n                  }\n                }),\n                r\n              );\n            }),\n            (t.prototype.run = function () {\n              var t = this;\n              if (\n                ((this.frequentSize1Subgraphs =\n                  this.generate1EdgeFrequentSubGraphs()),\n                !(this.maxNodeNum < 2))\n              ) {\n                var e = this.graphs,\n                  n = (this.directed, {});\n                Object.keys(e).forEach(function (r) {\n                  var i = e[r],\n                    o = i.nodeMap;\n                  i.nodes.forEach(function (e) {\n                    t.findForwardRootEdges(i, e).forEach(function (t) {\n                      var i = o[t.to],\n                        a = \"\"\n                          .concat(e.label, \"-\")\n                          .concat(t.label, \"-\")\n                          .concat(i.label);\n                      n[a] ||\n                        (n[a] = {\n                          projected: [],\n                          nodeLabel1: e.label,\n                          edgeLabel: t.label,\n                          nodeLabel2: i.label,\n                        });\n                      var s = { graphId: r, edge: t, preNode: null };\n                      n[a].projected.push(s);\n                    });\n                  });\n                }),\n                  Object.keys(n).forEach(function (e) {\n                    var r = n[e],\n                      i = r.projected,\n                      o = r.nodeLabel1,\n                      a = r.edgeLabel,\n                      s = r.nodeLabel2;\n                    t.dfsCode.dfsEdgeList.push(new nt(0, 1, o, a, s)),\n                      t.subGraphMining(i),\n                      t.dfsCode.dfsEdgeList.pop();\n                  });\n              }\n            }),\n            t\n          );\n        })(),\n        at = function (t) {\n          var e = t.graphs,\n            n = t.directed,\n            r = void 0 !== n && n,\n            i = t.nodeLabelProp,\n            o = void 0 === i ? \"cluster\" : i,\n            a = t.edgeLabelProp,\n            s = void 0 === a ? \"cluster\" : a,\n            c = (function (t, e, n, r) {\n              var i = {};\n              return (\n                Object.keys(t).forEach(function (o, a) {\n                  var s = t[o],\n                    c = new et(a, !0, e),\n                    u = {};\n                  s.nodes.forEach(function (t, e) {\n                    c.addNode(e, t[n]), (u[t.id] = e);\n                  }),\n                    s.edges.forEach(function (t, e) {\n                      var n = u[t.source],\n                        i = u[t.target];\n                      c.addEdge(-1, n, i, t[r]);\n                    }),\n                    c && c.getNodeNum() && (i[c.id] = c);\n                }),\n                i\n              );\n            })(e, r, o, s),\n            u = t.minSupport,\n            h = t.maxNodeNum,\n            l = t.minNodeNum,\n            f = t.verbose,\n            d = t.top,\n            p = new ot({\n              graphs: c,\n              minSupport: u,\n              maxNodeNum: h,\n              minNodeNum: l,\n              top: d,\n              verbose: f,\n              directed: r,\n            });\n          return (\n            p.run(),\n            (function (t, e, n) {\n              var r = [];\n              return (\n                t.forEach(function (t) {\n                  var i = { nodes: [], edges: [] };\n                  t.nodes.forEach(function (t) {\n                    var n;\n                    i.nodes.push(\n                      (((n = { id: \"\".concat(t.id) })[e] = t.label), n),\n                    );\n                  }),\n                    t.edges.forEach(function (t) {\n                      var e;\n                      i.edges.push(\n                        (((e = {\n                          source: \"\".concat(t.from),\n                          target: \"\".concat(t.to),\n                        })[n] = t.label),\n                        e),\n                      );\n                    }),\n                    r.push(i);\n                }),\n                r\n              );\n            })(p.frequentSubgraphs, o, s)\n          );\n        },\n        st = function (t, e, n, r) {\n          void 0 === n && (n = \"cluster\"), void 0 === r && (r = 2);\n          var i = [],\n            o = t.nodes;\n          return (\n            e.forEach(function (t, e) {\n              i.push(ct(o, t, e, n, r));\n            }),\n            i\n          );\n        },\n        ct = function (t, e, n, r, i) {\n          var o = [n],\n            a = [],\n            s = {};\n          return (\n            e.forEach(function (e, c) {\n              if (e <= i && n !== c) {\n                o.push(c), a.push(t[c]);\n                var u = t[c][r];\n                s[u]\n                  ? (s[u].count++, s[u].dists.push(e))\n                  : (s[u] = { count: 1, dists: [e] });\n              }\n            }),\n            Object.keys(s).forEach(function (t) {\n              s[t].dists = s[t].dists.sort(function (t, e) {\n                return t - e;\n              });\n            }),\n            {\n              nodeIdx: n,\n              nodeId: t[n].id,\n              nodeIdxs: o,\n              neighbors: a,\n              neighborNum: o.length - 1,\n              nodeLabelCountMap: s,\n            }\n          );\n        },\n        ut = function (t, e, n, r) {\n          var i = n.nodes;\n          return (\n            r || (r = {}),\n            Object.keys(t).forEach(function (o) {\n              var a, s;\n              if (!r || !r[o]) {\n                r[o] = { nodes: [], edges: [] };\n                var c = t[o],\n                  u =\n                    null === (a = e[c.start]) || void 0 === a\n                      ? void 0\n                      : a.nodeIdxs,\n                  h =\n                    null === (s = e[c.end]) || void 0 === s\n                      ? void 0\n                      : s.nodeIdxs;\n                if (u && h) {\n                  var l = new Set(h),\n                    f = u.filter(function (t) {\n                      return l.has(t);\n                    });\n                  if (f && f.length) {\n                    for (var d = {}, p = f.length, g = 0; g < p; g++) {\n                      var v = i[f[g]];\n                      r[o].nodes.push(v), (d[v.id] = !0);\n                    }\n                    n.edges.forEach(function (t) {\n                      d[t.source] && d[t.target] && r[o].edges.push(t);\n                    });\n                  }\n                }\n              }\n            }),\n            r\n          );\n        },\n        ht = function (t, e, n, r) {\n          var i,\n            o,\n            a = {};\n          t.nodes.forEach(function (t) {\n            a[t.id] = t;\n          });\n          var s = 0;\n          return !(null === (i = null == e ? void 0 : e.edges) || void 0 === i\n            ? void 0\n            : i.length) ||\n            (null === (o = null == e ? void 0 : e.nodes) || void 0 === o\n              ? void 0\n              : o.length) < 2\n            ? 0\n            : (t.edges.forEach(function (t) {\n                var i = a[t.source][n],\n                  o = a[t.target][n],\n                  c = null == e ? void 0 : e.nodes[0][n],\n                  u = null == e ? void 0 : e.nodes[1][n],\n                  h = null == e ? void 0 : e.edges[0][r];\n                t[r] === h &&\n                  ((i === c && o === u) || (i === u && o === c)) &&\n                  s++;\n              }),\n              s);\n        },\n        lt = function (t, e) {\n          var n = {},\n            r = {};\n          return (\n            t.forEach(function (t, i) {\n              n[t.id] = {\n                idx: i,\n                node: t,\n                degree: 0,\n                inDegree: 0,\n                outDegree: 0,\n              };\n              var o = t[e];\n              r[o] || (r[o] = []), r[o].push(t);\n            }),\n            { nodeMap: n, nodeLabelMap: r }\n          );\n        },\n        ft = function (t, e, n) {\n          var r = {},\n            i = {};\n          return (\n            t.forEach(function (t, o) {\n              r[\"\".concat(h)] = { idx: o, edge: t };\n              var a = t[e];\n              i[a] || (i[a] = []), i[a].push(t);\n              var s = n[t.source];\n              s && (s.degree++, s.outDegree++);\n              var c = n[t.target];\n              c && (c.degree++, c.inDegree++);\n            }),\n            { edgeMap: r, edgeLabelMap: i }\n          );\n        },\n        dt = function (t, e, n) {\n          var r = e.length,\n            i = {};\n          return (\n            e.forEach(function (e, o) {\n              for (var a = n ? 0 : o + 1, s = t[o].id, c = a; c < r; c++)\n                if (o !== c) {\n                  var u = t[c].id,\n                    h = e[c];\n                  (i[\"\".concat(s, \"-\").concat(u)] = h),\n                    n || (i[\"\".concat(u, \"-\").concat(s)] = h);\n                }\n            }),\n            i\n          );\n        },\n        pt = function (t, e, n, r, i, o, a, s, c, u, h) {\n          var l,\n            f = \"\".concat(e.id, \"-\").concat(n.id);\n          if (u && u[f]) return u[f];\n          var d = h ? h[f] : void 0;\n          if (!d) {\n            var p =\n              (((l = {})[f] = {\n                start: r[e.id].idx,\n                end: r[n.id].idx,\n                distance: i,\n              }),\n              l);\n            d = (h = ut(p, o, t, h))[f];\n          }\n          return ht(d, a, s, c);\n        },\n        gt = function (t, e, n, r) {\n          var i,\n            o,\n            a,\n            s = null === (i = t[e]) || void 0 === i ? void 0 : i.degree,\n            c = null === (o = t[e]) || void 0 === o ? void 0 : o.inDegree,\n            u = null === (a = t[e]) || void 0 === a ? void 0 : a.outDegree;\n          return (\n            void 0 === t[e] &&\n              ((s = 1 / 0),\n              (c = 1 / 0),\n              (u = 1 / 0),\n              r[e].forEach(function (t) {\n                var e = n[t.id].degree;\n                s > e && (s = e);\n                var r = n[t.id].inDegree;\n                c > r && (c = r);\n                var i = n[t.id].outDegree;\n                u > i && (u = i);\n              }),\n              (t[e] = { degree: s, inDegree: c, outDegree: u })),\n            {\n              minPatternNodeLabelDegree: s,\n              minPatternNodeLabelInDegree: c,\n              minPatternNodeLabelOutDegree: u,\n            }\n          );\n        },\n        vt = function (t, e, n, r, i, o, a) {\n          var s;\n          if (\n            (void 0 === n && (n = !1),\n            void 0 === o && (o = \"cluster\"),\n            void 0 === a && (a = \"cluster\"),\n            t && t.nodes)\n          ) {\n            var c = t.nodes.length;\n            if (c) {\n              var u = A(t, n),\n                h = A(e, n),\n                l = dt(t.nodes, u, n),\n                f = dt(e.nodes, h, n),\n                d = lt(t.nodes, o),\n                p = d.nodeMap,\n                g = d.nodeLabelMap,\n                v = lt(e.nodes, o),\n                y = v.nodeMap,\n                m = v.nodeLabelMap;\n              ft(t.edges, a, p);\n              var b = ft(e.edges, a, y).edgeLabelMap,\n                x = [];\n              null == h ||\n                h.forEach(function (t) {\n                  x = x.concat(t);\n                }),\n                i ||\n                  (i = Math.max.apply(\n                    Math,\n                    Object(O.f)(Object(O.f)([], x, !1), [2], !1),\n                  )),\n                r || (r = i);\n              var w = st(t, u, o, r),\n                S = st(e, h, o, r),\n                M = (function (t, e, n, r, i) {\n                  var o = Math.ceil(n / e),\n                    a = {},\n                    s = 0;\n                  return (\n                    r.forEach(function (t, r) {\n                      for (\n                        var c = 0, u = 0, h = t.nodeIdxs, l = t.neighborNum - 1;\n                        c < o;\n\n                      ) {\n                        for (\n                          var f = h[1 + Math.floor(Math.random() * l)], d = 0;\n                          (a[\"\".concat(r, \"-\").concat(f)] ||\n                            a[\"\".concat(f, \"-\").concat(r)]) &&\n                          ((f = Math.floor(Math.random() * e)), !(++d > 2 * e));\n\n                        );\n                        if (\n                          d < 2 * e &&\n                          ((a[\"\".concat(r, \"-\").concat(f)] = {\n                            start: r,\n                            end: f,\n                            distance: i[r][f],\n                          }),\n                          c++,\n                          ++s >= n)\n                        )\n                          return a;\n                        if (++u > 2 * e) break;\n                      }\n                      c < o && (o = (o + (o - c)) / (e - r - 1));\n                    }),\n                    a\n                  );\n                })(0, c, Math.min(100, (c * (c - 1)) / 2), w, u),\n                C = ut(M, w, t),\n                E = at({\n                  graphs: C,\n                  nodeLabelProp: o,\n                  edgeLabelProp: a,\n                  minSupport: 1,\n                  minNodeNum: 1,\n                  maxNodeNum: 4,\n                  directed: n,\n                }).slice(0, 10),\n                j = E.length,\n                P = [];\n              E.forEach(function (t, e) {\n                (P[e] = {}),\n                  Object.keys(C).forEach(function (n) {\n                    var r = C[n],\n                      i = ht(r, t, o, a);\n                    P[e][n] = i;\n                  });\n              });\n              var I = (function (t, e, n) {\n                  for (\n                    var r = 1 / 0,\n                      i = 0,\n                      o = function (e) {\n                        var n = t[e],\n                          o = Object.keys(n).sort(function (t, e) {\n                            return n[t] - n[e];\n                          }),\n                          a = [];\n                        o.forEach(function (t, e) {\n                          a[e % 10] ||\n                            (a[e % 10] = {\n                              graphs: [],\n                              totalCount: 0,\n                              aveCount: 0,\n                            }),\n                            a[e % 10].graphs.push(t),\n                            (a[e % 10].totalCount += n[t]);\n                        });\n                        var s = 0,\n                          c = [];\n                        a.forEach(function (t) {\n                          var e = t.totalCount / t.graphs.length;\n                          (t.aveCount = e), c.push(e);\n                          var r = 0,\n                            i = t.length;\n                          t.graphs.forEach(function (e, i) {\n                            var o = n[e];\n                            t.graphs.forEach(function (t, e) {\n                              i !== e && (r += Math.abs(o - n[t]));\n                            });\n                          }),\n                            (s += r /= (i * (i - 1)) / 2);\n                        }),\n                          (s /= a.length);\n                        var u = 0;\n                        c.forEach(function (t, e) {\n                          c.forEach(function (n, r) {\n                            e !== r && (u += Math.abs(t - n));\n                          }),\n                            (u /= (c.length * (c.length - 1)) / 2);\n                        });\n                        var h = u - s;\n                        r < h && ((r = h), (i = e));\n                      },\n                      a = 0;\n                    a < e;\n                    a++\n                  )\n                    o(a);\n                  return { structure: n[i], structureCountMap: t[i] };\n                })(P, j, E),\n                T = I.structure,\n                N = I.structureCountMap,\n                B = e.nodes[0],\n                L = [],\n                D = null === (s = e.nodes[0]) || void 0 === s ? void 0 : s[o],\n                _ = -1 / 0;\n              e.nodes.forEach(function (t) {\n                var e = t[o],\n                  n = g[e];\n                (null == n ? void 0 : n.length) > _ &&\n                  ((_ = n.length), (L = n), (D = e), (B = t));\n              });\n              var R = {},\n                F = {},\n                Y = {},\n                X = {},\n                z = {},\n                W = {};\n              Object.keys(m).forEach(function (r, i) {\n                (z[r] = []), n && (W[r] = []);\n                var s = -1 / 0,\n                  c = m[r],\n                  u = {};\n                c.forEach(function (t) {\n                  var e = f[\"\".concat(B.id, \"-\").concat(t.id)];\n                  if (\n                    (e && z[r].push(e),\n                    s < e && (s = e),\n                    (u[\"\".concat(B.id, \"-\").concat(t.id)] = {\n                      start: 0,\n                      end: y[t.id].idx,\n                      distance: e,\n                    }),\n                    n)\n                  ) {\n                    var i = f[\"\".concat(t.id, \"-\").concat(B.id)];\n                    i && W[r].push(i);\n                  }\n                }),\n                  (z[r] = z[r].sort(function (t, e) {\n                    return t - e;\n                  })),\n                  n &&\n                    (W[r] = W[r].sort(function (t, e) {\n                      return t - e;\n                    })),\n                  (F = ut(u, S, e, F));\n                var h = [];\n                if (\n                  (Object.keys(u).forEach(function (t) {\n                    if (Y[t]) h.push(Y[t]);\n                    else {\n                      var e = F[t];\n                      (Y[t] = ht(e, T, o, a)), h.push(Y[t]);\n                    }\n                  }),\n                  (h = h.sort(function (t, e) {\n                    return e - t;\n                  })),\n                  (X[\"\".concat(B.id, \"-\").concat(r)] = h),\n                  r !== D)\n                )\n                  for (\n                    var d = function (e) {\n                        var n = L[e],\n                          i = w[p[n.id].idx],\n                          s = i.nodeLabelCountMap[r],\n                          c = m[r].length;\n                        if (!s || s.count < c)\n                          return L.splice(e, 1), \"continue\";\n                        for (var u = !1, f = 0; f < c; f++)\n                          if (s.dists[f] > z[r][f]) {\n                            u = !0;\n                            break;\n                          }\n                        if (u) return L.splice(e, 1), \"continue\";\n                        var d = {};\n                        i.neighbors.forEach(function (t) {\n                          var e = l[\"\".concat(n.id, \"-\").concat(t.id)];\n                          d[\"\".concat(n.id, \"-\").concat(t.id)] = {\n                            start: p[n.id].idx,\n                            end: p[t.id].idx,\n                            distance: e,\n                          };\n                        }),\n                          (C = ut(d, w, t, C));\n                        var g = [];\n                        Object.keys(d).forEach(function (t) {\n                          if (N[t]) g.push(N[t]);\n                          else {\n                            var e = C[t];\n                            (N[t] = ht(e, T, o, a)), g.push(N[t]);\n                          }\n                        }),\n                          (g = g.sort(function (t, e) {\n                            return e - t;\n                          }));\n                        var v = !1;\n                        for (f = 0; f < c; f++)\n                          if (g[f] < h[f]) {\n                            v = !0;\n                            break;\n                          }\n                        return v ? (L.splice(e, 1), \"continue\") : void 0;\n                      },\n                      g = ((null == L ? void 0 : L.length) || 0) - 1;\n                    g >= 0;\n                    g--\n                  )\n                    d(g);\n              });\n              var q = [];\n              null == L ||\n                L.forEach(function (r) {\n                  for (\n                    var s = p[r.id].idx,\n                      c = ct(t.nodes, u[s], s, o, i).neighbors,\n                      h = !1,\n                      f = c.length - 1;\n                    f >= 0;\n                    f--\n                  ) {\n                    if (c.length + 1 < e.nodes.length) return void (h = !0);\n                    var d = c[f],\n                      g = d[o];\n                    if (m[g] && m[g].length)\n                      if (z[g] && z[g].length) {\n                        var v = \"\".concat(r.id, \"-\").concat(d.id),\n                          b = l[v],\n                          x = z[g].length - 1;\n                        if (b > z[g][x]) c.splice(f, 1);\n                        else {\n                          if (n) {\n                            var S = \"\".concat(d.id, \"-\").concat(r.id),\n                              O = l[S];\n                            if (((x = W[g].length - 1), O > W[g][x])) {\n                              c.splice(f, 1);\n                              continue;\n                            }\n                          }\n                          var M = N[v]\n                              ? N[v]\n                              : pt(t, r, d, p, b, w, T, o, a, N, C),\n                            k = \"\".concat(B.id, \"-\").concat(g);\n                          if (M < X[k][X[k].length - 1]) c.splice(f, 1);\n                          else {\n                            var E = gt(R, g, y, m),\n                              j = E.minPatternNodeLabelDegree;\n                            E.minPatternNodeLabelInDegree,\n                              E.minPatternNodeLabelOutDegree;\n                            p[d.id].degree < j && c.splice(f, 1);\n                          }\n                        }\n                      } else c.splice(f, 1);\n                    else c.splice(f, 1);\n                  }\n                  h || q.push({ nodes: [r].concat(c) });\n                });\n              var V = k(e, B.id, !1).length,\n                G = {};\n              n\n                ? (Object.keys(V).forEach(function (t) {\n                    var e = y[t].node[o];\n                    G[e] ? G[e].push(V[t]) : (G[e] = [V[t]]);\n                  }),\n                  Object.keys(G).forEach(function (t) {\n                    G[t].sort(function (t, e) {\n                      return t - e;\n                    });\n                  }))\n                : (G = z);\n              for (\n                var H = function (r) {\n                    var i = q[r],\n                      s = i.nodes[0],\n                      c = {},\n                      u = {};\n                    i.nodes.forEach(function (t, e) {\n                      u[t.id] = {\n                        idx: e,\n                        node: t,\n                        degree: 0,\n                        inDegree: 0,\n                        outDegree: 0,\n                      };\n                      var n = t[o];\n                      c[n] ? c[n]++ : (c[n] = 1);\n                    });\n                    var h = [],\n                      l = {};\n                    t.edges.forEach(function (t) {\n                      u[t.source] &&\n                        u[t.target] &&\n                        (h.push(t),\n                        l[t[a]] ? l[t[a]]++ : (l[t[a]] = 1),\n                        u[t.source].degree++,\n                        u[t.target].degree++,\n                        u[t.source].outDegree++,\n                        u[t.target].inDegree++);\n                    });\n                    for (\n                      var f = Object.keys(b).length, d = !1, g = 0;\n                      g < f;\n                      g++\n                    ) {\n                      var v = Object.keys(b)[g];\n                      if (!l[v] || l[v] < b[v].length) {\n                        d = !0;\n                        break;\n                      }\n                    }\n                    if (d) return q.splice(r, 1), \"continue\";\n                    var x = h.length;\n                    if (x < e.edges.length) return q.splice(r, 1), \"break\";\n                    var w = !1,\n                      S = function (t) {\n                        var e = h[t],\n                          r = e[a],\n                          i = b[r];\n                        if (!i || !i.length)\n                          return (\n                            l[r]--,\n                            i && l[r] < i.length\n                              ? ((w = !0), \"break\")\n                              : (h.splice(t, 1),\n                                u[e.source].degree--,\n                                u[e.target].degree--,\n                                u[e.source].outDegree--,\n                                u[e.target].inDegree--,\n                                \"continue\")\n                          );\n                        var s = u[e.source].node[o],\n                          c = u[e.target].node[o],\n                          f = !1;\n                        return (\n                          i.forEach(function (t) {\n                            var e = y[t.source].node,\n                              r = y[t.target].node;\n                            e[o] === s && r[o] === c && (f = !0),\n                              n || e[o] !== c || r[o] !== s || (f = !0);\n                          }),\n                          f\n                            ? void 0\n                            : (l[r]--,\n                              i && l[r] < i.length\n                                ? ((w = !0), \"break\")\n                                : (h.splice(t, 1),\n                                  u[e.source].degree--,\n                                  u[e.target].degree--,\n                                  u[e.source].outDegree--,\n                                  u[e.target].inDegree--,\n                                  \"continue\"))\n                        );\n                      };\n                    for (g = x - 1; g >= 0; g--) {\n                      if (\"break\" === S(g)) break;\n                    }\n                    if (w) return q.splice(r, 1), \"continue\";\n                    i.edges = h;\n                    var O = k(i, i.nodes[0].id, !1).length;\n                    if (\n                      (Object.keys(O)\n                        .reverse()\n                        .forEach(function (t) {\n                          if (t !== i.nodes[0].id && !w) {\n                            if (O[t] === 1 / 0) {\n                              var e = u[t].node[o];\n                              if ((c[e]--, c[e] < m[e].length))\n                                return void (w = !0);\n                              var n = i.nodes.indexOf(u[t].node);\n                              return i.nodes.splice(n, 1), void (u[t] = void 0);\n                            }\n                            var r = p[t].node[o];\n                            if (\n                              !G[r] ||\n                              !G[r].length ||\n                              O[t] > G[r][G[r].length - 1]\n                            ) {\n                              e = u[t].node[o];\n                              if ((c[e]--, c[e] < m[e].length))\n                                return void (w = !0);\n                              n = i.nodes.indexOf(u[t].node);\n                              i.nodes.splice(n, 1), (u[t] = void 0);\n                            }\n                          }\n                        }),\n                      w)\n                    )\n                      return q.splice(r, 1), \"continue\";\n                    for (var M = !0, C = 0; M && !w; ) {\n                      if (\n                        ((M = !1),\n                        n\n                          ? u[s.id].degree < y[B.id].degree ||\n                            u[s.id].inDegree < y[B.id].inDegree ||\n                            u[s.id].outDegree < y[B.id].outDegree\n                          : u[s.id].degree < y[B.id].degree)\n                      ) {\n                        w = !0;\n                        break;\n                      }\n                      if (c[s[o]] < m[s[o]].length) {\n                        w = !0;\n                        break;\n                      }\n                      for (var E = i.nodes.length - 1; E >= 0; E--) {\n                        var j = i.nodes[E],\n                          P = u[j.id].degree,\n                          A = u[j.id].inDegree,\n                          I = u[j.id].outDegree,\n                          T = j[o],\n                          N = gt(R, T, y, m),\n                          L = N.minPatternNodeLabelDegree,\n                          D = N.minPatternNodeLabelInDegree,\n                          _ = N.minPatternNodeLabelOutDegree;\n                        if (n ? P < L || A < D || I < _ : P < L) {\n                          if ((c[j[o]]--, c[j[o]] < m[j[o]].length)) {\n                            w = !0;\n                            break;\n                          }\n                          i.nodes.splice(E, 1), (u[j.id] = void 0), (M = !0);\n                        }\n                      }\n                      if (w || (!M && 0 !== C)) break;\n                      for (var F = (x = h.length) - 1; F >= 0; F--) {\n                        var Y = h[F];\n                        if (!u[Y.source] || !u[Y.target]) {\n                          h.splice(F, 1);\n                          var X = Y[a];\n                          if (\n                            (l[X]--,\n                            u[Y.source] &&\n                              (u[Y.source].degree--, u[Y.source].outDegree--),\n                            u[Y.target] &&\n                              (u[Y.target].degree--, u[Y.target].inDegree--),\n                            b[X] && l[X] < b[X].length)\n                          ) {\n                            w = !0;\n                            break;\n                          }\n                          M = !0;\n                        }\n                      }\n                      C++;\n                    }\n                    return w ||\n                      w ||\n                      i.nodes.length < e.nodes.length ||\n                      h.length < e.edges.length\n                      ? (q.splice(r, 1), \"continue\")\n                      : void 0;\n                  },\n                  U = q.length - 1;\n                U >= 0;\n                U--\n              ) {\n                if (\"break\" === H(U)) break;\n              }\n              var Z = q.length,\n                K = function (t) {\n                  var e = q[t],\n                    n = {};\n                  e.edges.forEach(function (t) {\n                    var e = \"\"\n                      .concat(t.source, \"-\")\n                      .concat(t.target, \"-\")\n                      .concat(t.label);\n                    n[e] ? n[e]++ : (n[e] = 1);\n                  });\n                  for (\n                    var r = function (t) {\n                        var e = q[t],\n                          r = {};\n                        e.edges.forEach(function (t) {\n                          var e = \"\"\n                            .concat(t.source, \"-\")\n                            .concat(t.target, \"-\")\n                            .concat(t.label);\n                          r[e] ? r[e]++ : (r[e] = 1);\n                        });\n                        var i = !0;\n                        Object.keys(r).length !== Object.keys(n).length\n                          ? (i = !1)\n                          : Object.keys(n).forEach(function (t) {\n                              r[t] !== n[t] && (i = !1);\n                            }),\n                          i && q.splice(t, 1);\n                      },\n                      i = Z - 1;\n                    i > t;\n                    i--\n                  )\n                    r(i);\n                  Z = q.length;\n                };\n              for (U = 0; U <= Z - 1; U++) K(U);\n              return q;\n            }\n          }\n        },\n        yt = (function () {\n          function t(t) {\n            void 0 === t && (t = 10),\n              (this.linkedList = new a()),\n              (this.maxStep = t);\n          }\n          return (\n            Object.defineProperty(t.prototype, \"length\", {\n              get: function () {\n                return this.linkedList.toArray().length;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.isMaxStack = function () {\n              return this.toArray().length >= this.maxStep;\n            }),\n            (t.prototype.peek = function () {\n              return this.isEmpty() ? null : this.linkedList.head.value;\n            }),\n            (t.prototype.push = function (t) {\n              this.linkedList.prepend(t),\n                this.length > this.maxStep && this.linkedList.deleteTail();\n            }),\n            (t.prototype.pop = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toArray = function () {\n              return this.linkedList.toArray().map(function (t) {\n                return t.value;\n              });\n            }),\n            (t.prototype.clear = function () {\n              for (; !this.isEmpty(); ) this.pop();\n            }),\n            t\n          );\n        })(),\n        mt = S;\n      e.default = {\n        getAdjMatrix: r,\n        breadthFirstSearch: l,\n        connectedComponent: d,\n        getDegree: g,\n        getInDegree: v,\n        getOutDegree: y,\n        detectCycle: S,\n        detectDirectedCycle: mt,\n        detectAllCycles: w,\n        detectAllDirectedCycle: x,\n        detectAllUndirectedCycle: b,\n        depthFirstSearch: m,\n        dijkstra: k,\n        findAllPath: P,\n        findShortestPath: j,\n        floydWarshall: A,\n        labelPropagation: I,\n        louvain: F,\n        iLouvain: Y,\n        kCore: X,\n        kMeans: W,\n        cosineSimilarity: q,\n        nodesCosineSimilarity: V,\n        minimumSpanningTree: $,\n        pageRank: Q,\n        getNeighbors: c,\n        Stack: yt,\n        GADDI: vt,\n      };\n    },\n    3: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return i.a;\n      }),\n        n.d(e, \"c\", function () {\n          return i.b;\n        }),\n        n.d(e, \"d\", function () {\n          return i.c;\n        }),\n        n.d(e, \"a\", function () {\n          return r;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"leftTranslate\", function () {\n          return o;\n        }),\n        n.d(r, \"leftRotate\", function () {\n          return a;\n        }),\n        n.d(r, \"leftScale\", function () {\n          return s;\n        }),\n        n.d(r, \"transform\", function () {\n          return c;\n        }),\n        n.d(r, \"direction\", function () {\n          return u;\n        }),\n        n.d(r, \"angleTo\", function () {\n          return h;\n        }),\n        n.d(r, \"vertical\", function () {\n          return l;\n        });\n      var i = n(4);\n      function o(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromTranslation(r, n), i.a.multiply(t, r, e);\n      }\n      function a(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromRotation(r, n), i.a.multiply(t, r, e);\n      }\n      function s(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromScaling(r, n), i.a.multiply(t, r, e);\n      }\n      function c(t, e) {\n        for (\n          var n,\n            r,\n            c,\n            u = t ? [].concat(t) : [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            h = 0,\n            l = e.length;\n          h < l;\n          h++\n        ) {\n          var f = e[h];\n          switch (f[0]) {\n            case \"t\":\n              o(u, u, [f[1], f[2]]);\n              break;\n            case \"s\":\n              s(u, u, [f[1], f[2]]);\n              break;\n            case \"r\":\n              a(u, u, f[1]);\n              break;\n            case \"m\":\n              (n = u), (r = u), (c = f[1]), i.a.multiply(n, c, r);\n          }\n        }\n        return u;\n      }\n      function u(t, e) {\n        return t[0] * e[1] - e[0] * t[1];\n      }\n      function h(t, e, n) {\n        var r = i.b.angle(t, e),\n          o = u(t, e) >= 0;\n        return n ? (o ? 2 * Math.PI - r : r) : o ? r : 2 * Math.PI - r;\n      }\n      function l(t, e, n) {\n        return (\n          n\n            ? ((t[0] = e[1]), (t[1] = -1 * e[0]))\n            : ((t[0] = -1 * e[1]), (t[1] = e[0])),\n          t\n        );\n      }\n    },\n    30: function (t, e, n) {\n      self,\n        (t.exports = (function () {\n          \"use strict\";\n          var t = {\n              d: function (e, n) {\n                for (var r in n)\n                  t.o(n, r) &&\n                    !t.o(e, r) &&\n                    Object.defineProperty(e, r, { enumerable: !0, get: n[r] });\n              },\n              o: function (t, e) {\n                return Object.prototype.hasOwnProperty.call(t, e);\n              },\n              r: function (t) {\n                \"undefined\" != typeof Symbol &&\n                  Symbol.toStringTag &&\n                  Object.defineProperty(t, Symbol.toStringTag, {\n                    value: \"Module\",\n                  }),\n                  Object.defineProperty(t, \"__esModule\", { value: !0 });\n              },\n            },\n            e = {};\n          function n(t, e) {\n            return void 0 === t ? e : t;\n          }\n          t.r(e),\n            t.d(e, {\n              default: function () {\n                return de;\n              },\n            });\n          var r,\n            i = Math.round,\n            o = Math.abs,\n            a = Date.now,\n            s = \"compute\",\n            c = \"auto\",\n            u = \"manipulation\",\n            h = \"none\",\n            l = \"pan-x\",\n            f = \"pan-y\",\n            d =\n              ((r = {}),\n              [\n                \"auto\",\n                \"manipulation\",\n                \"pan-y\",\n                \"pan-x\",\n                \"pan-x pan-y\",\n                \"none\",\n              ].forEach(function (t) {\n                return (r[t] = !0);\n              }),\n              r),\n            p = \"touch\",\n            g = [\"x\", \"y\"],\n            v = [\"clientX\", \"clientY\"],\n            y = 32,\n            m =\n              \"function\" != typeof Object.assign\n                ? function (t) {\n                    if (null == t)\n                      throw new TypeError(\n                        \"Cannot convert undefined or null to object\",\n                      );\n                    for (var e = Object(t), n = 1; n < arguments.length; n++) {\n                      var r = arguments[n];\n                      if (null != r)\n                        for (var i in r) r.hasOwnProperty(i) && (e[i] = r[i]);\n                    }\n                    return e;\n                  }\n                : Object.assign,\n            b = 1;\n          function x(t, e, n) {\n            var r;\n            if (t)\n              if (t.forEach) t.forEach(e, n);\n              else if (void 0 !== t.length)\n                for (r = 0; r < t.length; ) e.call(n, t[r], r, t), r++;\n              else for (r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);\n          }\n          function w(t, e, n) {\n            return !!Array.isArray(t) && (x(t, n[e], n), !0);\n          }\n          function S(t, e, n) {\n            if (t.indexOf && !n) return t.indexOf(e);\n            for (var r = 0; r < t.length; ) {\n              if ((n && t[r][n] == e) || (!n && t[r] === e)) return r;\n              r++;\n            }\n            return -1;\n          }\n          function O(t) {\n            return (O =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function M(t, e) {\n            return \"function\" === O(t) ? t.apply((e && e[0]) || void 0, e) : t;\n          }\n          function k(t, e) {\n            var n = e.manager;\n            return n ? n.get(t) : t;\n          }\n          function C(t) {\n            return 16 & t\n              ? \"cancel\"\n              : 8 & t\n              ? \"end\"\n              : 4 & t\n              ? \"move\"\n              : 2 & t\n              ? \"start\"\n              : \"\";\n          }\n          var E = (function () {\n            function t(e) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.options = m({}, this.defaults, e || {})),\n                (this.id = b++),\n                (this.manager = null),\n                (this.options.enable = n(this.options.enable, !0)),\n                (this.state = 1),\n                (this.simultaneous = {}),\n                (this.requireFail = []);\n            }\n            var e, r;\n            return (\n              (e = t),\n              (r = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    return (\n                      m(this.options, t),\n                      this.manager && this.manager.touchAction.update(),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"recognizeWith\",\n                  value: function (t) {\n                    if (w(t, \"recognizeWith\", this)) return this;\n                    var e = this.simultaneous;\n                    return (\n                      e[(t = k(t, this)).id] ||\n                        ((e[t.id] = t), t.recognizeWith(this)),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"dropRecognizeWith\",\n                  value: function (t) {\n                    return (\n                      w(t, \"dropRecognizeWith\", this) ||\n                        ((t = k(t, this)), delete this.simultaneous[t.id]),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"requireFailure\",\n                  value: function (t) {\n                    if (w(t, \"requireFailure\", this)) return this;\n                    var e = this.requireFail;\n                    return (\n                      -1 === S(e, (t = k(t, this))) &&\n                        (e.push(t), t.requireFailure(this)),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"dropRequireFailure\",\n                  value: function (t) {\n                    if (w(t, \"dropRequireFailure\", this)) return this;\n                    t = k(t, this);\n                    var e = S(this.requireFail, t);\n                    return e > -1 && this.requireFail.splice(e, 1), this;\n                  },\n                },\n                {\n                  key: \"hasRequireFailures\",\n                  value: function () {\n                    return this.requireFail.length > 0;\n                  },\n                },\n                {\n                  key: \"canRecognizeWith\",\n                  value: function (t) {\n                    return !!this.simultaneous[t.id];\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.state;\n                    function r(n) {\n                      e.manager.emit(n, t);\n                    }\n                    n < 8 && r(e.options.event + C(n)),\n                      r(e.options.event),\n                      t.additionalEvent && r(t.additionalEvent),\n                      n >= 8 && r(e.options.event + C(n));\n                  },\n                },\n                {\n                  key: \"tryEmit\",\n                  value: function (t) {\n                    if (this.canEmit()) return this.emit(t);\n                    this.state = y;\n                  },\n                },\n                {\n                  key: \"canEmit\",\n                  value: function () {\n                    for (var t = 0; t < this.requireFail.length; ) {\n                      if (!(33 & this.requireFail[t].state)) return !1;\n                      t++;\n                    }\n                    return !0;\n                  },\n                },\n                {\n                  key: \"recognize\",\n                  value: function (t) {\n                    var e = m({}, t);\n                    if (!M(this.options.enable, [this, e]))\n                      return this.reset(), void (this.state = y);\n                    56 & this.state && (this.state = 1),\n                      (this.state = this.process(e)),\n                      30 & this.state && this.tryEmit(e);\n                  },\n                },\n                { key: \"process\", value: function (t) {} },\n                { key: \"getTouchAction\", value: function () {} },\n                { key: \"reset\", value: function () {} },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, r),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function j(t) {\n            return (j =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function P(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function A(t, e) {\n            return (A =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function I(t, e) {\n            if (e && (\"object\" === j(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function T(t) {\n            return (T = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          E.prototype.defaults = {};\n          var N = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && A(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = T(r);\n                  if (i) {\n                    var n = T(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return I(this, t);\n                });\n            function a() {\n              return P(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    var e = this.options.pointers;\n                    return 0 === e || t.pointers.length === e;\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this.state,\n                      n = t.eventType,\n                      r = 6 & e,\n                      i = this.attrTest(t);\n                    return r && (8 & n || !i)\n                      ? 16 | e\n                      : r || i\n                      ? 4 & n\n                        ? 8 | e\n                        : 2 & e\n                        ? 4 | e\n                        : 2\n                      : y;\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(E);\n          function B(t) {\n            return (B =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function L(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function D() {\n            return (D =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get\n                : function (t, e, n) {\n                    var r = _(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function _(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = Y(t));\n\n            );\n            return t;\n          }\n          function R(t, e) {\n            return (R =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function F(t, e) {\n            if (e && (\"object\" === B(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Y(t) {\n            return (Y = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          N.prototype.defaults = { pointers: 1 };\n          var X = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && R(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = Y(r);\n                  if (i) {\n                    var n = Y(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return F(this, t);\n                });\n            function a() {\n              return L(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [h];\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      D(Y(a.prototype), \"attrTest\", this).call(this, t) &&\n                      (Math.abs(t.rotation) > this.options.threshold ||\n                        2 & this.state)\n                    );\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(N);\n          function z(t) {\n            return (z =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function W(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function q() {\n            return (q =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get\n                : function (t, e, n) {\n                    var r = V(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function V(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = U(t));\n\n            );\n            return t;\n          }\n          function G(t, e) {\n            return (G =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function H(t, e) {\n            if (e && (\"object\" === z(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function U(t) {\n            return (U = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          X.prototype.defaults = { event: \"rotate\", threshold: 0, pointers: 2 };\n          var Z = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && G(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = U(r);\n                  if (i) {\n                    var n = U(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return H(this, t);\n                });\n            function a() {\n              return W(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [h];\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      q(U(a.prototype), \"attrTest\", this).call(this, t) &&\n                      (Math.abs(t.scale - 1) > this.options.threshold ||\n                        2 & this.state)\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    if (1 !== t.scale) {\n                      var e = t.scale < 1 ? \"in\" : \"out\";\n                      t.additionalEvent = this.options.event + e;\n                    }\n                    q(U(a.prototype), \"emit\", this).call(this, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(N);\n          function K(t) {\n            return 16 === t\n              ? \"down\"\n              : 8 === t\n              ? \"up\"\n              : 2 === t\n              ? \"left\"\n              : 4 === t\n              ? \"right\"\n              : \"\";\n          }\n          function $(t) {\n            return ($ =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function Q(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function J() {\n            return (J =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get\n                : function (t, e, n) {\n                    var r = tt(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function tt(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = rt(t));\n\n            );\n            return t;\n          }\n          function et(t, e) {\n            return (et =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function nt(t, e) {\n            if (e && (\"object\" === $(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function rt(t) {\n            return (rt = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          Z.prototype.defaults = { event: \"pinch\", threshold: 0, pointers: 2 };\n          var it = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && et(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = rt(r);\n                  if (i) {\n                    var n = rt(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return nt(this, t);\n                });\n            function a() {\n              var t;\n              return (\n                Q(this, a),\n                ((t = o.apply(this, arguments)).pX = null),\n                (t.pY = null),\n                t\n              );\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    var t = this.options.direction,\n                      e = [];\n                    return 6 & t && e.push(f), 24 & t && e.push(l), e;\n                  },\n                },\n                {\n                  key: \"directionTest\",\n                  value: function (t) {\n                    var e = this.options,\n                      n = !0,\n                      r = t.distance,\n                      i = t.direction,\n                      o = t.deltaX,\n                      a = t.deltaY;\n                    return (\n                      i & e.direction ||\n                        (6 & e.direction\n                          ? ((i = 0 === o ? 1 : o < 0 ? 2 : 4),\n                            (n = o !== this.pX),\n                            (r = Math.abs(t.deltaX)))\n                          : ((i = 0 === a ? 1 : a < 0 ? 8 : 16),\n                            (n = a !== this.pY),\n                            (r = Math.abs(t.deltaY)))),\n                      (t.direction = i),\n                      n && r > e.threshold && i & e.direction\n                    );\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      N.prototype.attrTest.call(this, t) &&\n                      (2 & this.state ||\n                        (!(2 & this.state) && this.directionTest(t)))\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    (this.pX = t.deltaX), (this.pY = t.deltaY);\n                    var e = K(t.direction);\n                    e && (t.additionalEvent = this.options.event + e),\n                      J(rt(a.prototype), \"emit\", this).call(this, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(N);\n          function ot(t) {\n            return (ot =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function at(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function st() {\n            return (st =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get\n                : function (t, e, n) {\n                    var r = ct(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function ct(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = lt(t));\n\n            );\n            return t;\n          }\n          function ut(t, e) {\n            return (ut =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function ht(t, e) {\n            if (e && (\"object\" === ot(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function lt(t) {\n            return (lt = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          it.prototype.defaults = {\n            event: \"pan\",\n            threshold: 10,\n            pointers: 1,\n            direction: 30,\n          };\n          var ft = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && ut(t, e);\n            })(s, t);\n            var e,\n              n,\n              r,\n              i,\n              a =\n                ((r = s),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = lt(r);\n                  if (i) {\n                    var n = lt(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return ht(this, t);\n                });\n            function s() {\n              return at(this, s), a.apply(this, arguments);\n            }\n            return (\n              (e = s),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return it.prototype.getTouchAction.call(this);\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    var e,\n                      n = this.options.direction;\n                    return (\n                      30 & n\n                        ? (e = t.overallVelocity)\n                        : 6 & n\n                        ? (e = t.overallVelocityX)\n                        : 24 & n && (e = t.overallVelocityY),\n                      st(lt(s.prototype), \"attrTest\", this).call(this, t) &&\n                        n & t.offsetDirection &&\n                        t.distance > this.options.threshold &&\n                        t.maxPointers === this.options.pointers &&\n                        o(e) > this.options.velocity &&\n                        4 & t.eventType\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    var e = K(t.offsetDirection);\n                    e && this.manager.emit(this.options.event + e, t),\n                      this.manager.emit(this.options.event, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              s\n            );\n          })(N);\n          function dt(t, e) {\n            return function () {\n              return t.apply(e, arguments);\n            };\n          }\n          function pt(t, e, n) {\n            return setTimeout(dt(t, n), e);\n          }\n          function gt(t, e, n) {\n            n || (n = g);\n            var r = e[n[0]] - t[n[0]],\n              i = e[n[1]] - t[n[1]];\n            return Math.sqrt(r * r + i * i);\n          }\n          function vt(t) {\n            return (vt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function yt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function mt(t, e) {\n            return (mt =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function bt(t, e) {\n            if (e && (\"object\" === vt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function xt(t) {\n            return (xt = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          ft.prototype.defaults = {\n            event: \"swipe\",\n            threshold: 10,\n            velocity: 0.3,\n            direction: 30,\n            pointers: 1,\n          };\n          var wt = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && mt(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = xt(r);\n                  if (i) {\n                    var n = xt(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return bt(this, t);\n                });\n            function a() {\n              var t;\n              return (\n                yt(this, a),\n                ((t = o.apply(this, arguments)).pTime = !1),\n                (t.pCenter = !1),\n                (t._timer = null),\n                (t._input = null),\n                (t.count = 0),\n                t\n              );\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [u];\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.options,\n                      r = t.pointers.length === n.pointers,\n                      i = t.distance < n.threshold,\n                      o = t.deltaTime < n.time;\n                    if ((this.reset(), 1 & t.eventType && 0 === this.count))\n                      return this.failTimeout();\n                    if (i && o && r) {\n                      if (4 !== t.eventType) return this.failTimeout();\n                      var a =\n                          !this.pTime || t.timeStamp - this.pTime < n.interval,\n                        s =\n                          !this.pCenter ||\n                          gt(this.pCenter, t.center) < n.posThreshold;\n                      if (\n                        ((this.pTime = t.timeStamp),\n                        (this.pCenter = t.center),\n                        s && a ? (this.count += 1) : (this.count = 1),\n                        (this._input = t),\n                        0 == this.count % n.taps)\n                      )\n                        return this.hasRequireFailures()\n                          ? ((this._timer = pt(\n                              function () {\n                                (e.state = 8), e.tryEmit();\n                              },\n                              n.interval,\n                              this,\n                            )),\n                            2)\n                          : 8;\n                    }\n                    return y;\n                  },\n                },\n                {\n                  key: \"failTimeout\",\n                  value: function () {\n                    var t = this;\n                    return (\n                      (this._timer = pt(\n                        function () {\n                          t.state = y;\n                        },\n                        this.options.interval,\n                        this,\n                      )),\n                      y\n                    );\n                  },\n                },\n                {\n                  key: \"reset\",\n                  value: function () {\n                    clearTimeout(this._timer), (this._timer = null);\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function () {\n                    8 === this.state &&\n                      ((this._input.tapCount = this.count),\n                      this.manager.emit(this.options.event, this._input));\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(E);\n          function St(t) {\n            return (St =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function Ot(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function Mt(t, e) {\n            return (Mt =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function kt(t, e) {\n            if (e && (\"object\" === St(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Ct(t) {\n            return (Ct = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          wt.prototype.defaults = {\n            event: \"tap\",\n            pointers: 1,\n            taps: 1,\n            interval: 300,\n            time: 250,\n            threshold: 9,\n            posThreshold: 10,\n          };\n          var Et = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && Mt(t, e);\n            })(s, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = s),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = Ct(r);\n                  if (i) {\n                    var n = Ct(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return kt(this, t);\n                });\n            function s() {\n              var t;\n              return (\n                Ot(this, s),\n                ((t = o.apply(this, arguments))._timer = null),\n                (t._input = null),\n                t\n              );\n            }\n            return (\n              (e = s),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [c];\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.options,\n                      r = t.pointers.length === n.pointers,\n                      i = t.distance < n.threshold,\n                      o = t.deltaTime > n.time;\n                    if (\n                      ((this._input = t), !i || !r || (12 & t.eventType && !o))\n                    )\n                      this.reset();\n                    else if (1 & t.eventType)\n                      this.reset(),\n                        (this._timer = pt(\n                          function () {\n                            (e.state = 8), e.tryEmit();\n                          },\n                          n.time,\n                          this,\n                        ));\n                    else if (4 & t.eventType) return 8;\n                    return y;\n                  },\n                },\n                {\n                  key: \"reset\",\n                  value: function () {\n                    clearTimeout(this._timer), (this._timer = null);\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    8 === this.state &&\n                      (t && 4 & t.eventType\n                        ? this.manager.emit(\n                            \"\".concat(this.options.event, \"up\"),\n                            t,\n                          )\n                        : ((this._input.timeStamp = a()),\n                          this.manager.emit(this.options.event, this._input)));\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              s\n            );\n          })(E);\n          function jt(t, e) {\n            return t.indexOf(e) > -1;\n          }\n          Et.prototype.defaults = {\n            event: \"press\",\n            pointers: 1,\n            time: 251,\n            threshold: 9,\n          };\n          var Pt = (function () {\n            function t(e, n) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.manager = e),\n                this.set(n);\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    t === s && (t = this.compute()),\n                      (this.actions = t.toLowerCase().trim());\n                  },\n                },\n                {\n                  key: \"update\",\n                  value: function () {\n                    this.set(this.manager.options.touchAction);\n                  },\n                },\n                {\n                  key: \"compute\",\n                  value: function () {\n                    var t = [];\n                    return (\n                      x(this.manager.recognizers, function (e) {\n                        M(e.options.enable, [e]) &&\n                          (t = t.concat(e.getTouchAction()));\n                      }),\n                      (function (t) {\n                        if (jt(t, h)) return h;\n                        var e = jt(t, l),\n                          n = jt(t, f);\n                        return e && n\n                          ? h\n                          : e || n\n                          ? e\n                            ? l\n                            : f\n                          : jt(t, u)\n                          ? u\n                          : c;\n                      })(t.join(\" \"))\n                    );\n                  },\n                },\n                {\n                  key: \"preventDefaults\",\n                  value: function (t) {\n                    var e = t.srcEvent,\n                      n = t.offsetDirection;\n                    if (this.manager.session.prevented) e.preventDefault();\n                    else {\n                      var r = this.actions,\n                        i = jt(r, h) && !d.none,\n                        o = jt(r, f) && !d[\"pan-y\"],\n                        a = jt(r, l) && !d[\"pan-x\"];\n                      if (i) {\n                        var s = 1 === t.pointers.length,\n                          c = t.distance < 2,\n                          u = t.deltaTime < 250;\n                        if (s && c && u) return;\n                      }\n                      if (!a || !o)\n                        return i || (o && 6 & n) || (a && 24 & n)\n                          ? this.preventSrc(e)\n                          : void 0;\n                    }\n                  },\n                },\n                {\n                  key: \"preventSrc\",\n                  value: function (t) {\n                    (this.manager.session.prevented = !0), t.preventDefault();\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function At(t) {\n            var e = t.length;\n            if (1 === e) return { x: i(t[0].clientX), y: i(t[0].clientY) };\n            for (var n = 0, r = 0, o = 0; o < e; )\n              (n += t[o].clientX), (r += t[o].clientY), o++;\n            return { x: i(n / e), y: i(r / e) };\n          }\n          function It(t) {\n            for (var e = [], n = 0; n < t.pointers.length; )\n              (e[n] = {\n                clientX: i(t.pointers[n].clientX),\n                clientY: i(t.pointers[n].clientY),\n              }),\n                n++;\n            return {\n              timeStamp: a(),\n              pointers: e,\n              center: At(e),\n              deltaX: t.deltaX,\n              deltaY: t.deltaY,\n            };\n          }\n          function Tt(t, e, n) {\n            n || (n = g);\n            var r = e[n[0]] - t[n[0]],\n              i = e[n[1]] - t[n[1]];\n            return (180 * Math.atan2(i, r)) / Math.PI;\n          }\n          function Nt(t, e) {\n            return t === e\n              ? 1\n              : o(t) >= o(e)\n              ? t < 0\n                ? 2\n                : 4\n              : e < 0\n              ? 8\n              : 16;\n          }\n          function Bt(t, e, n) {\n            return { x: e / t || 0, y: n / t || 0 };\n          }\n          function Lt(t, e, n) {\n            var r = n.pointers.length,\n              i = n.changedPointers.length,\n              s = 1 & e && r - i == 0,\n              c = 12 & e && r - i == 0;\n            (n.isFirst = !!s),\n              (n.isFinal = !!c),\n              s && (t.session = {}),\n              (n.eventType = e),\n              (function (t, e) {\n                var n = t.session,\n                  r = e.pointers,\n                  i = r.length;\n                n.firstInput || (n.firstInput = It(e)),\n                  i > 1 && !n.firstMultiple\n                    ? (n.firstMultiple = It(e))\n                    : 1 === i && (n.firstMultiple = !1);\n                var s = n.firstInput,\n                  c = n.firstMultiple,\n                  u = c ? c.center : s.center,\n                  h = (e.center = At(r));\n                (e.timeStamp = a()),\n                  (e.deltaTime = e.timeStamp - s.timeStamp),\n                  (e.angle = Tt(u, h)),\n                  (e.distance = gt(u, h)),\n                  (function (t, e) {\n                    var n = e.center,\n                      r = t.offsetDelta || {},\n                      i = t.prevDelta || {},\n                      o = t.prevInput || {};\n                    (1 !== e.eventType && 4 !== o.eventType) ||\n                      ((i = t.prevDelta =\n                        { x: o.deltaX || 0, y: o.deltaY || 0 }),\n                      (r = t.offsetDelta = { x: n.x, y: n.y })),\n                      (e.deltaX = i.x + (n.x - r.x)),\n                      (e.deltaY = i.y + (n.y - r.y));\n                  })(n, e),\n                  (e.offsetDirection = Nt(e.deltaX, e.deltaY));\n                var l,\n                  f,\n                  d = Bt(e.deltaTime, e.deltaX, e.deltaY);\n                (e.overallVelocityX = d.x),\n                  (e.overallVelocityY = d.y),\n                  (e.overallVelocity = o(d.x) > o(d.y) ? d.x : d.y),\n                  (e.scale = c\n                    ? ((l = c.pointers),\n                      gt((f = r)[0], f[1], v) / gt(l[0], l[1], v))\n                    : 1),\n                  (e.rotation = c\n                    ? (function (t, e) {\n                        return Tt(e[1], e[0], v) + Tt(t[1], t[0], v);\n                      })(c.pointers, r)\n                    : 0),\n                  (e.maxPointers = n.prevInput\n                    ? e.pointers.length > n.prevInput.maxPointers\n                      ? e.pointers.length\n                      : n.prevInput.maxPointers\n                    : e.pointers.length),\n                  (function (t, e) {\n                    var n,\n                      r,\n                      i,\n                      a,\n                      s = t.lastInterval || e,\n                      c = e.timeStamp - s.timeStamp;\n                    if (\n                      8 !== e.eventType &&\n                      (c > 25 || void 0 === s.velocity)\n                    ) {\n                      var u = e.deltaX - s.deltaX,\n                        h = e.deltaY - s.deltaY,\n                        l = Bt(c, u, h);\n                      (r = l.x),\n                        (i = l.y),\n                        (n = o(l.x) > o(l.y) ? l.x : l.y),\n                        (a = Nt(u, h)),\n                        (t.lastInterval = e);\n                    } else\n                      (n = s.velocity),\n                        (r = s.velocityX),\n                        (i = s.velocityY),\n                        (a = s.direction);\n                    (e.velocity = n),\n                      (e.velocityX = r),\n                      (e.velocityY = i),\n                      (e.direction = a);\n                  })(n, e);\n              })(t, n),\n              t.emit(\"hammer.input\", n),\n              t.recognize(n),\n              (t.session.prevInput = n);\n          }\n          function Dt(t) {\n            return t.trim().split(/\\s+/g);\n          }\n          function _t(t, e, n) {\n            x(Dt(e), function (e) {\n              t.addEventListener(e, n, !1);\n            });\n          }\n          var Rt = (function () {\n            function t(e, n) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t);\n              var r = this;\n              (this.manager = e),\n                (this.callback = n),\n                (this.eventHandler = function (t) {\n                  M(e.options.enable, [e]) && r.handler(t);\n                }),\n                this.init();\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                { key: \"handler\", value: function () {} },\n                {\n                  key: \"init\",\n                  value: function () {\n                    var t, e, n;\n                    (t = this.manager),\n                      (e = this.events || \"\"),\n                      (n = this.eventHandler),\n                      x(Dt(e), function (e) {\n                        t.on(\"origin_input:\".concat(e), n);\n                      });\n                  },\n                },\n                {\n                  key: \"destroy\",\n                  value: function () {\n                    removeManagerListeners(\n                      this.manager,\n                      this.events || \"\",\n                      this.eventHandler,\n                    );\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function Ft(t) {\n            return Array.prototype.slice.call(t, 0);\n          }\n          function Yt(t, e, n) {\n            for (var r = [], i = [], o = 0; o < t.length; ) {\n              var a = e ? t[o][e] : t[o];\n              S(i, a) < 0 && r.push(t[o]), (i[o] = a), o++;\n            }\n            return (\n              n &&\n                (r = e\n                  ? r.sort(function (t, n) {\n                      return t[e] > n[e];\n                    })\n                  : r.sort()),\n              r\n            );\n          }\n          function Xt(t) {\n            return (Xt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function zt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function Wt(t, e) {\n            return (Wt =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function qt(t, e) {\n            if (e && (\"object\" === Xt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Vt(t) {\n            return (Vt = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          var Gt = { touchstart: 1, touchmove: 2, touchend: 4, touchcancel: 8 },\n            Ht = \"touchstart touchmove touchend touchcancel\",\n            Ut = (function (t) {\n              !(function (t, e) {\n                if (\"function\" != typeof e && null !== e)\n                  throw new TypeError(\n                    \"Super expression must either be null or a function\",\n                  );\n                (t.prototype = Object.create(e && e.prototype, {\n                  constructor: { value: t, writable: !0, configurable: !0 },\n                })),\n                  Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                  e && Wt(t, e);\n              })(a, t);\n              var e,\n                n,\n                r,\n                i,\n                o =\n                  ((r = a),\n                  (i = (function () {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                      return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                      return (\n                        Boolean.prototype.valueOf.call(\n                          Reflect.construct(Boolean, [], function () {}),\n                        ),\n                        !0\n                      );\n                    } catch (t) {\n                      return !1;\n                    }\n                  })()),\n                  function () {\n                    var t,\n                      e = Vt(r);\n                    if (i) {\n                      var n = Vt(this).constructor;\n                      t = Reflect.construct(e, arguments, n);\n                    } else t = e.apply(this, arguments);\n                    return qt(this, t);\n                  });\n              function a() {\n                var t;\n                return (\n                  zt(this, a),\n                  (a.prototype.evTarget = Ht),\n                  (a.prototype.targetIds = {}),\n                  (a.prototype.events = Ht),\n                  ((t = o.apply(this, arguments)).evTarget = Ht),\n                  (t.targetIds = {}),\n                  t\n                );\n              }\n              return (\n                (e = a),\n                (n = [\n                  {\n                    key: \"handler\",\n                    value: function (t) {\n                      var e = Gt[t.type],\n                        n = Zt.call(this, t, e);\n                      n &&\n                        this.callback(this.manager, e, {\n                          pointers: n[0],\n                          changedPointers: n[1],\n                          pointerType: p,\n                          srcEvent: t,\n                        });\n                    },\n                  },\n                ]) &&\n                  (function (t, e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.enumerable = r.enumerable || !1),\n                        (r.configurable = !0),\n                        \"value\" in r && (r.writable = !0),\n                        Object.defineProperty(t, r.key, r);\n                    }\n                  })(e.prototype, n),\n                Object.defineProperty(e, \"prototype\", { writable: !1 }),\n                a\n              );\n            })(Rt);\n          function Zt(t, e) {\n            var n,\n              r,\n              i = Ft(t.touches),\n              o = this.targetIds;\n            if (3 & e && 1 === i.length)\n              return (o[i[0].identifier] = !0), [i, i];\n            var a = Ft(t.changedTouches),\n              s = [];\n            if ((this.target, (r = i), 1 === e))\n              for (n = 0; n < r.length; ) (o[r[n].identifier] = !0), n++;\n            for (n = 0; n < a.length; )\n              o[a[n].identifier] && s.push(a[n]),\n                12 & e && delete o[a[n].identifier],\n                n++;\n            return s.length ? [Yt(r.concat(s), \"identifier\", !0), s] : void 0;\n          }\n          var Kt = (function () {\n            function t(e) {\n              var n,\n                r = this;\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.options = m({}, Qt.defaults, e || {})),\n                (this.handlers = {}),\n                (this.filters = []),\n                (this.session = {}),\n                (this.recognizers = []),\n                (this.input =\n                  ((n = Ut),\n                  this.options.inputClass && (n = inputClass),\n                  new n(this, Lt))),\n                (this.touchAction = new Pt(this, this.options.touchAction)),\n                x(\n                  this.options.recognizers,\n                  function (t) {\n                    var e = r.add(new t[0](t[1]));\n                    t[2] && e.recognizeWith(t[2]),\n                      t[3] && e.requireFailure(t[3]);\n                  },\n                  this,\n                );\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    return (\n                      m(this.options, t),\n                      t.touchAction && this.touchAction.update(),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"stop\",\n                  value: function (t) {\n                    this.session.stopped = t ? 2 : 1;\n                  },\n                },\n                {\n                  key: \"addFilter\",\n                  value: function (t) {\n                    if (\"function\" != typeof t)\n                      throw new Error(\"filter must be a function\");\n                    this.filters.push(t);\n                  },\n                },\n                {\n                  key: \"recognize\",\n                  value: function (t) {\n                    var e = this.session;\n                    if (!e.stopped) {\n                      var n;\n                      this.touchAction.preventDefaults(t);\n                      var r = this.recognizers,\n                        i = e.curRecognizer;\n                      (!i || (i && 8 & i.state)) &&\n                        (i = e.curRecognizer = null);\n                      for (var o = 0; o < r.length; )\n                        (n = r[o]),\n                          2 === e.stopped ||\n                          (i && n !== i && !n.canRecognizeWith(i))\n                            ? n.reset()\n                            : n.recognize(t),\n                          !i && 14 & n.state && (i = e.curRecognizer = n),\n                          o++;\n                    }\n                  },\n                },\n                {\n                  key: \"get\",\n                  value: function (t) {\n                    if (t instanceof E) return t;\n                    for (var e = this.recognizers, n = 0; n < e.length; n++)\n                      if (e[n].options.event === t) return e[n];\n                    return null;\n                  },\n                },\n                {\n                  key: \"add\",\n                  value: function (t) {\n                    if (w(t, \"add\", this)) return this;\n                    var e = this.get(t.options.event);\n                    return (\n                      e && this.remove(e),\n                      this.recognizers.push(t),\n                      (t.manager = this),\n                      this.touchAction.update(),\n                      t\n                    );\n                  },\n                },\n                {\n                  key: \"remove\",\n                  value: function (t) {\n                    if (w(t, \"remove\", this)) return this;\n                    if ((t = this.get(t))) {\n                      var e = this.recognizers,\n                        n = S(e, t);\n                      -1 !== n && (e.splice(n, 1), this.touchAction.update());\n                    }\n                    return this;\n                  },\n                },\n                {\n                  key: \"on\",\n                  value: function (t, e) {\n                    if (void 0 !== t && void 0 !== e) {\n                      var n = this.handlers;\n                      return (\n                        x(Dt(t), function (t) {\n                          (n[t] = n[t] || []), n[t].push(e);\n                        }),\n                        this\n                      );\n                    }\n                  },\n                },\n                {\n                  key: \"off\",\n                  value: function (t, e) {\n                    if (void 0 !== t) {\n                      var n = this.handlers;\n                      return (\n                        x(Dt(t), function (t) {\n                          e ? n[t] && n[t].splice(S(n[t], e), 1) : delete n[t];\n                        }),\n                        this\n                      );\n                    }\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t, e) {\n                    var n = this.handlers[t] && this.handlers[t].slice();\n                    if ((this.filters, n && n.length)) {\n                      t.startsWith(\"origin_input\") ||\n                        ((e.type = t),\n                        (e.preventDefault = function () {\n                          e.srcEvent.preventDefault &&\n                            e.srcEvent.preventDefault();\n                        }));\n                      for (var r = 0; r < n.length; ) n[r](e), r++;\n                    }\n                  },\n                },\n                {\n                  key: \"destroy\",\n                  value: function () {\n                    (this.handlers = {}),\n                      (this.filters = []),\n                      (this.session = {}),\n                      this.input.destroy();\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(t, r.key, r);\n                  }\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function $t(t, e) {\n            for (var n = 0; n < e.length; n++) {\n              var r = e[n];\n              (r.enumerable = r.enumerable || !1),\n                (r.configurable = !0),\n                \"value\" in r && (r.writable = !0),\n                Object.defineProperty(t, r.key, r);\n            }\n          }\n          var Qt = (function (t, e, n) {\n            return (\n              e && $t(t.prototype, e),\n              n && $t(t, n),\n              Object.defineProperty(t, \"prototype\", { writable: !1 }),\n              t\n            );\n          })(function t(e) {\n            return (\n              (function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n              ((e = e || {}).recognizers = n(e.recognizers, t.defaults.preset)),\n              new Kt(e)\n            );\n          });\n          function Jt(t) {\n            return (Jt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function te(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function ee(t, e) {\n            return (ee =\n              Object.setPrototypeOf ||\n              function (t, e) {\n                return (t.__proto__ = e), t;\n              })(t, e);\n          }\n          function ne(t, e) {\n            if (e && (\"object\" === Jt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function re(t) {\n            return (re = Object.setPrototypeOf\n              ? Object.getPrototypeOf\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          Qt.defaults = {\n            domEvents: !1,\n            touchAction: s,\n            enable: !0,\n            inputClass: null,\n            preset: [\n              [X, { enable: !1 }],\n              [Z, { enable: !1 }, [\"rotate\"]],\n              [ft, { direction: 6 }],\n              [it, { direction: 6 }, [\"swipe\"]],\n              [wt],\n              [wt, { event: \"doubletap\", taps: 2 }, [\"tap\"]],\n              [Et],\n            ],\n          };\n          var ie = {\n              pointerdown: 1,\n              pointermove: 2,\n              pointerup: 4,\n              pointercancel: 8,\n              pointerout: 8,\n            },\n            oe = { 2: p, 3: \"pen\", 4: \"mouse\", 5: \"kinect\" },\n            ae = \"pointerdown\",\n            se = \"pointermove pointerup pointercancel\",\n            ce = (function (t) {\n              !(function (t, e) {\n                if (\"function\" != typeof e && null !== e)\n                  throw new TypeError(\n                    \"Super expression must either be null or a function\",\n                  );\n                (t.prototype = Object.create(e && e.prototype, {\n                  constructor: { value: t, writable: !0, configurable: !0 },\n                })),\n                  Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                  e && ee(t, e);\n              })(a, t);\n              var e,\n                n,\n                r,\n                i,\n                o =\n                  ((r = a),\n                  (i = (function () {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                      return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                      return (\n                        Boolean.prototype.valueOf.call(\n                          Reflect.construct(Boolean, [], function () {}),\n                        ),\n                        !0\n                      );\n                    } catch (t) {\n                      return !1;\n                    }\n                  })()),\n                  function () {\n                    var t,\n                      e = re(r);\n                    if (i) {\n                      var n = re(this).constructor;\n                      t = Reflect.construct(e, arguments, n);\n                    } else t = e.apply(this, arguments);\n                    return ne(this, t);\n                  });\n              function a() {\n                var t;\n                return (\n                  te(this, a),\n                  (a.prototype.events = \"\".concat(ae, \" \").concat(se)),\n                  ((t = o.apply(this, arguments)).evEl = ae),\n                  (t.evWin = se),\n                  (t.store = t.manager.session.pointerEvents = []),\n                  t\n                );\n              }\n              return (\n                (e = a),\n                (n = [\n                  {\n                    key: \"handler\",\n                    value: function (t) {\n                      var e = this.store,\n                        n = !1,\n                        r = t.type.toLowerCase().replace(\"ms\", \"\"),\n                        i = ie[r],\n                        o = oe[t.pointerType] || t.pointerType,\n                        a = o === p,\n                        s = S(e, t.pointerId, \"pointerId\");\n                      1 & i && (0 === t.button || a)\n                        ? s < 0 && (e.push(t), (s = e.length - 1))\n                        : 12 & i && (n = !0),\n                        s < 0 ||\n                          ((e[s] = t),\n                          this.callback(this.manager, i, {\n                            pointers: e,\n                            changedPointers: [t],\n                            pointerType: o,\n                            srcEvent: t,\n                          }),\n                          n && e.splice(s, 1));\n                    },\n                  },\n                ]) &&\n                  (function (t, e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.enumerable = r.enumerable || !1),\n                        (r.configurable = !0),\n                        \"value\" in r && (r.writable = !0),\n                        Object.defineProperty(t, r.key, r);\n                    }\n                  })(e.prototype, n),\n                Object.defineProperty(e, \"prototype\", { writable: !1 }),\n                a\n              );\n            })(Rt);\n          function ue(t, e, n) {\n            x(Dt(e), function (e) {\n              t.removeEventListener(e, n, !1);\n            });\n          }\n          function he(t, e, n) {\n            var r = \"DEPRECATED METHOD: \".concat(e, \"\\n\").concat(n, \" AT \\n\");\n            return function () {\n              var e = new Error(\"get-stack-trace\"),\n                n =\n                  e && e.stack\n                    ? e.stack\n                        .replace(/^[^\\(]+?[\\n$]/gm, \"\")\n                        .replace(/^\\s+at\\s+/gm, \"\")\n                        .replace(/^Object.<anonymous>\\s*\\(/gm, \"{anonymous}()@\")\n                    : \"Unknown Stack Trace\",\n                i = console.warn;\n              return i && i(r, n), t.apply(this, arguments);\n            };\n          }\n          var le = he(\n              function (t, e, n) {\n                for (var r = Object.keys(e), i = 0; i < r.length; )\n                  (!n || (n && void 0 === t[r[i]])) && (t[r[i]] = e[r[i]]), i++;\n                return t;\n              },\n              \"extend\",\n              \"Use `assign`.\",\n            ),\n            fe = he(\n              function (t, e) {\n                return le(t, e, !0);\n              },\n              \"merge\",\n              \"Use `assign`.\",\n            ),\n            de = m(Qt, {\n              INPUT_START: 1,\n              INPUT_MOVE: 2,\n              INPUT_END: 4,\n              INPUT_CANCEL: 8,\n              STATE_POSSIBLE: 1,\n              STATE_BEGAN: 2,\n              STATE_CHANGED: 4,\n              STATE_ENDED: 8,\n              STATE_RECOGNIZED: 8,\n              STATE_CANCELLED: 16,\n              STATE_FAILED: y,\n              DIRECTION_NONE: 1,\n              DIRECTION_LEFT: 2,\n              DIRECTION_RIGHT: 4,\n              DIRECTION_UP: 8,\n              DIRECTION_DOWN: 16,\n              DIRECTION_HORIZONTAL: 6,\n              DIRECTION_VERTICAL: 24,\n              DIRECTION_ALL: 30,\n              Manager: Kt,\n              Input: Rt,\n              TouchAction: Pt,\n              TouchInput: Ut,\n              PointerEventInput: ce,\n              Recognizer: E,\n              AttrRecognizer: N,\n              Tap: wt,\n              Pan: it,\n              Swipe: ft,\n              Pinch: Z,\n              Rotate: X,\n              Press: Et,\n              on: _t,\n              off: ue,\n              each: x,\n              merge: fe,\n              extend: le,\n              assign: m,\n              inherit: function (t, e, n) {\n                var r,\n                  i = e.prototype;\n                ((r = t.prototype = Object.create(i)).constructor = t),\n                  (r._super = i),\n                  n && m(r, n);\n              },\n              bindFn: dt,\n              toArray: Ft,\n              inArray: S,\n              uniqueArray: Yt,\n              splitStr: Dt,\n              boolOrFn: M,\n              hasParent: function (t, e) {\n                for (; t; ) {\n                  if (t === e) return !0;\n                  t = t.parentNode;\n                }\n                return !1;\n              },\n              addEventListeners: _t,\n              removeEventListeners: ue,\n            });\n          return e;\n        })());\n    },\n    32: function (t, e, n) {\n      \"use strict\";\n      var r = {};\n      n.r(r),\n        n.d(r, \"proccessToFunc\", function () {\n          return u;\n        }),\n        n.d(r, \"buildTextureData\", function () {\n          return h;\n        }),\n        n.d(r, \"buildTextureDataWithOneEdgeAttr\", function () {\n          return l;\n        }),\n        n.d(r, \"buildTextureDataWithTwoEdgeAttr\", function () {\n          return f;\n        }),\n        n.d(r, \"attributesToTextureData\", function () {\n          return d;\n        }),\n        n.d(r, \"arrayToTextureData\", function () {\n          return p;\n        }),\n        n.d(r, \"radialLayout\", function () {\n          return g;\n        });\n      var i = n(1),\n        o = n(75),\n        a = n(2),\n        s = n(0),\n        c = a.h.traverseTree,\n        u = function (t, e) {\n          return t\n            ? Object(s.isNumber)(t)\n              ? function (e) {\n                  return t;\n                }\n              : t\n            : function (t) {\n                return e || 1;\n              };\n        },\n        h = function (t, e) {\n          var n = [],\n            r = [],\n            i = {},\n            o = 0;\n          for (o = 0; o < t.length; o++) {\n            var a = t[o];\n            (i[a.id] = o),\n              n.push(a.x),\n              n.push(a.y),\n              n.push(0),\n              n.push(0),\n              r.push([]);\n          }\n          for (o = 0; o < e.length; o++) {\n            var s = e[o];\n            r[i[s.source]].push(i[s.target]), r[i[s.target]].push(i[s.source]);\n          }\n          var c = 0;\n          for (o = 0; o < t.length; o++) {\n            var u = n.length,\n              h = r[o],\n              l = h.length;\n            (n[4 * o + 2] = u),\n              (n[4 * o + 3] = h.length),\n              (c = Math.max(c, h.length));\n            for (var f = 0; f < l; ++f) {\n              var d = h[f];\n              n.push(+d);\n            }\n          }\n          for (; n.length % 4 != 0; ) n.push(0);\n          return { array: new Float32Array(n), maxEdgePerVetex: c };\n        },\n        l = function (t, e, n) {\n          var r = [],\n            i = [],\n            o = {},\n            a = 0;\n          for (a = 0; a < t.length; a++) {\n            var s = t[a];\n            (o[s.id] = a),\n              r.push(s.x),\n              r.push(s.y),\n              r.push(0),\n              r.push(0),\n              i.push([]);\n          }\n          for (a = 0; a < e.length; a++) {\n            var c = e[a];\n            i[o[c.source]].push(o[c.target]),\n              i[o[c.source]].push(n(c)),\n              i[o[c.target]].push(o[c.source]),\n              i[o[c.target]].push(n(c));\n          }\n          var u = 0;\n          for (a = 0; a < t.length; a++) {\n            var h = r.length,\n              l = i[a],\n              f = l.length;\n            (r[4 * a + 2] = h),\n              (r[4 * a + 3] = f / 2),\n              (u = Math.max(u, f / 2));\n            for (var d = 0; d < f; ++d) {\n              var p = l[d];\n              r.push(+p);\n            }\n          }\n          for (; r.length % 4 != 0; ) r.push(0);\n          return { array: new Float32Array(r), maxEdgePerVetex: u };\n        },\n        f = function (t, e, n, r) {\n          var i = [],\n            o = [],\n            a = {},\n            s = 0;\n          for (s = 0; s < t.length; s++) {\n            var c = t[s];\n            (a[c.id] = s),\n              i.push(c.x),\n              i.push(c.y),\n              i.push(0),\n              i.push(0),\n              o.push([]);\n          }\n          for (s = 0; s < e.length; s++) {\n            var u = e[s];\n            o[a[u.source]].push(a[u.target]),\n              o[a[u.source]].push(n(u)),\n              o[a[u.source]].push(r(u)),\n              o[a[u.source]].push(0),\n              o[a[u.target]].push(a[u.source]),\n              o[a[u.target]].push(n(u)),\n              o[a[u.target]].push(r(u)),\n              o[a[u.target]].push(0);\n          }\n          var h = 0;\n          for (s = 0; s < t.length; s++) {\n            var l = i.length,\n              f = o[s],\n              d = f.length;\n            (i[4 * s + 2] = l + (1048576 * d) / 4),\n              (i[4 * s + 3] = 0),\n              (h = Math.max(h, d / 4));\n            for (var p = 0; p < d; ++p) {\n              var g = f[p];\n              i.push(+g);\n            }\n          }\n          for (; i.length % 4 != 0; ) i.push(0);\n          return { array: new Float32Array(i), maxEdgePerVetex: h };\n        },\n        d = function (t, e) {\n          var n = [],\n            r = t.length,\n            i = {};\n          return (\n            e.forEach(function (e) {\n              t.forEach(function (t, o) {\n                if (\n                  (void 0 === i[e[t]] && (i[e[t]] = Object.keys(i).length),\n                  n.push(i[e[t]]),\n                  o === r - 1)\n                )\n                  for (; n.length % 4 != 0; ) n.push(0);\n              });\n            }),\n            { array: new Float32Array(n), count: Object.keys(i).length }\n          );\n        },\n        p = function (t) {\n          for (\n            var e = [],\n              n = t.length,\n              r = t[0].length,\n              i = function (r) {\n                t.forEach(function (t, i) {\n                  if ((e.push(t[r]), i === n - 1))\n                    for (; e.length % 4 != 0; ) e.push(0);\n                });\n              },\n              o = 0;\n            o < r;\n            o++\n          )\n            i(o);\n          return new Float32Array(e);\n        },\n        g = function (t, e) {\n          var n = { x: 1 / 0, y: 1 / 0 },\n            r = { x: -1 / 0, y: -1 / 0 },\n            i = \"x\",\n            o = \"y\";\n          e && [\"V\", \"TB\", \"BT\"].indexOf(e) >= 0 && ((o = \"x\"), (i = \"y\"));\n          var a = 0;\n          c(t, function (t) {\n            return (\n              a++,\n              t.x > r.x && (r.x = t.x),\n              t.x < n.x && (n.x = t.x),\n              t.y > r.y && (r.y = t.y),\n              t.y < n.y && (n.y = t.y),\n              !0\n            );\n          });\n          var s = (2 * Math.PI) / a,\n            u = r[o] - n[o];\n          return (\n            0 === u ||\n              c(t, function (e) {\n                var r = ((e[o] - n[o]) / u) * (2 * Math.PI - s) + s,\n                  a = Math.abs(\"x\" === i ? e.x - t.x : e.y - t.y);\n                return (e.x = a * Math.cos(r)), (e.y = a * Math.sin(r)), !0;\n              }),\n            t\n          );\n        },\n        v = Object(i.a)(Object(i.a)(Object(i.a)({}, a.h), o), r);\n      e.a = v;\n    },\n    395: function (t, e, n) {\n      \"use strict\";\n      var r = function () {\n        return (r =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function i(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      var o = n(2),\n        a = n(0);\n      Object(o.l)(\n        \"circle\",\n        {\n          options: {\n            size: o.e.defaultNode.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultNode.style.stroke,\n              fill: o.e.defaultNode.style.fill,\n              lineWidth: o.e.defaultNode.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.nodeLabel.style.fill,\n                fontSize: o.e.nodeLabel.style.fontSize,\n              },\n            },\n            linkPoints: {\n              top: !1,\n              right: !1,\n              bottom: !1,\n              left: !1,\n              size: o.e.defaultNode.linkPoints.size,\n              lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n              fill: o.e.defaultNode.linkPoints.fill,\n              stroke: o.e.defaultNode.linkPoints.stroke,\n            },\n            icon: {\n              show: !1,\n              img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n              width: 20,\n              height: 20,\n            },\n            stateStyles: r({}, o.e.nodeStateStyles),\n          },\n          shapeType: \"circle\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getOptions(t).icon,\n              i = void 0 === n ? {} : n,\n              o = this.getShapeStyle(t),\n              s = Object(a.deepMix)({}, i, t.icon),\n              c = e.addShape(\"circle\", {\n                attrs: o,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              }),\n              u = s.width,\n              h = s.height,\n              l = s.show,\n              f = s.text;\n            return (\n              l &&\n                (f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        s,\n                      ),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r({ x: -u / 2, y: -h / 2 }, s),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    })),\n              this.drawLinkPoints(t, e),\n              c\n            );\n          },\n          drawLinkPoints: function (t, e) {\n            var n = this.getOptions(t).linkPoints,\n              o = void 0 === n ? {} : n,\n              a = o.top,\n              s = o.left,\n              c = o.right,\n              u = o.bottom,\n              h = o.size,\n              l = o.r,\n              f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n              d = this.getSize(t)[0] / 2;\n            s &&\n              e.addShape(\"circle\", {\n                attrs: r(r({}, f), { x: -d, y: 0, r: h / 2 || l || 5 }),\n                className: \"link-point-left\",\n                name: \"link-point-left\",\n                isAnchorPoint: !0,\n              }),\n              c &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: d, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-right\",\n                  name: \"link-point-right\",\n                  isAnchorPoint: !0,\n                }),\n              a &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: 0, y: -d, r: h / 2 || l || 5 }),\n                  className: \"link-point-top\",\n                  name: \"link-point-top\",\n                  isAnchorPoint: !0,\n                }),\n              u &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: 0, y: d, r: h / 2 || l || 5 }),\n                  className: \"link-point-bottom\",\n                  name: \"link-point-bottom\",\n                  isAnchorPoint: !0,\n                });\n          },\n          getShapeStyle: function (t) {\n            var e = this.getOptions(t).style,\n              n = { stroke: t.color },\n              i = Object(a.deepMix)({}, e, n),\n              o = this.getSize(t)[0] / 2;\n            return r({ x: 0, y: 0, r: o }, i);\n          },\n          update: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getSize(t),\n              i = { stroke: t.color, r: r[0] / 2 },\n              o = e.get(\"keyShape\"),\n              s = Object(a.deepMix)({}, o.attr(), i, t.style);\n            this.updateShape(t, e, s, !0), this.updateLinkPoints(t, n);\n          },\n        },\n        \"single-node\",\n      ),\n        Object(o.l)(\n          \"rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t),\n                r = e.addShape(\"rect\", {\n                  attrs: n,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                });\n              return this.drawLinkPoints(t, e), r;\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = i.width || o[0],\n                c = i.height || o[1];\n              return r({ x: -s / 2, y: -c / 2, width: s, height: c }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getSize(t),\n                o = e.get(\"keyShape\");\n              t.size ||\n                ((i[0] = o.attr(\"width\") || r.width),\n                (i[1] = o.attr(\"height\") || r.height));\n              var s = {\n                  stroke: t.color,\n                  x: -i[0] / 2,\n                  y: -i[1] / 2,\n                  width: i[0],\n                  height: i[1],\n                },\n                c = Object(a.mix)({}, r, o.attr(), s);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !1),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"ellipse\",\n          {\n            options: {\n              size: [80, 40],\n              style: {\n                x: 0,\n                y: 0,\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"ellipse\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"ellipse\", {\n                  attrs: o,\n                  className: \"ellipse-keyShape\",\n                  name: \"ellipse-keyShape\",\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0] / 2,\n                g = d[1] / 2;\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = o[0] / 2,\n                c = o[1] / 2;\n              return r({ x: 0, y: 0, rx: s, ry: c }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getSize(t),\n                o = { stroke: t.color, rx: i[0] / 2, ry: i[1] / 2 },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"diamond\",\n          {\n            options: {\n              size: [80, 80],\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"diamond\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"path\", {\n                  attrs: o,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getPath: function (t) {\n              var e = this.getSize(t),\n                n = e[0],\n                r = e[1];\n              return [\n                [\"M\", 0, -r / 2],\n                [\"L\", n / 2, 0],\n                [\"L\", 0, r / 2],\n                [\"L\", -n / 2, 0],\n                [\"Z\"],\n              ];\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"triangle\",\n          {\n            options: {\n              size: 40,\n              direction: \"up\",\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n                offset: 15,\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n                offset: 6,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"triangle\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t),\n                i = n.icon,\n                o = void 0 === i ? {} : i,\n                a = n.direction,\n                s = this.getShapeStyle(t),\n                c = t.direction || a,\n                u = e.addShape(\"path\", {\n                  attrs: s,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                h = o.width,\n                l = o.height,\n                f = o.show,\n                d = o.offset,\n                p = o.text;\n              if (f)\n                if (p)\n                  e.addShape(\"text\", {\n                    attrs: r(\n                      {\n                        x: 0,\n                        y: 0,\n                        fontSize: 12,\n                        fill: \"#000\",\n                        stroke: \"#000\",\n                        textBaseline: \"middle\",\n                        textAlign: \"center\",\n                      },\n                      o,\n                    ),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  });\n                else {\n                  var g = -h / 2,\n                    v = -l / 2;\n                  (\"up\" !== c && \"down\" !== c) || (v += d),\n                    (\"left\" !== c && \"right\" !== c) || (g += d),\n                    e.addShape(\"image\", {\n                      attrs: r({ x: g, y: v }, o),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    });\n                }\n              return this.drawLinkPoints(t, e), u;\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t),\n                o = n.linkPoints,\n                a = void 0 === o ? {} : o,\n                s = n.direction,\n                c = t.direction || s,\n                u = a.top,\n                h = a.left,\n                l = a.right,\n                f = a.bottom,\n                d = a.size,\n                p = a.r,\n                g = i(a, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                v = this.getSize(t)[0];\n              if (h) {\n                var y = null,\n                  m = v * Math.sin((1 / 3) * Math.PI),\n                  b = v * Math.sin((1 / 3) * Math.PI);\n                \"up\" === c\n                  ? (y = [-b, m])\n                  : \"down\" === c\n                  ? (y = [-b, -m])\n                  : \"left\" === c && (y = [-b, b - m]),\n                  y &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: y[0],\n                        y: y[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-left\",\n                      name: \"link-point-left\",\n                    });\n              }\n              if (l) {\n                var x = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"up\" === c\n                  ? (x = [b, m])\n                  : \"down\" === c\n                  ? (x = [b, -m])\n                  : \"right\" === c && (x = [b, b - m]),\n                  x &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: x[0],\n                        y: x[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-right\",\n                      name: \"link-point-right\",\n                    });\n              }\n              if (u) {\n                var w = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"up\" === c\n                  ? (w = [b - m, -m])\n                  : \"left\" === c\n                  ? (w = [b, -m])\n                  : \"right\" === c && (w = [-b, -m]),\n                  w &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: w[0],\n                        y: w[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-top\",\n                      name: \"link-point-top\",\n                    });\n              }\n              if (f) {\n                var S = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"down\" === c\n                  ? (S = [-b + m, m])\n                  : \"left\" === c\n                  ? (S = [b, m])\n                  : \"right\" === c && (S = [-b, m]),\n                  S &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: S[0],\n                        y: S[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-bottom\",\n                      name: \"link-point-bottom\",\n                    });\n              }\n            },\n            getPath: function (t) {\n              var e = this.getOptions(t).direction,\n                n = t.direction || e,\n                r = this.getSize(t)[0],\n                i = r * Math.sin((1 / 3) * Math.PI),\n                o = r * Math.sin((1 / 3) * Math.PI),\n                a = [[\"M\", -o, i], [\"L\", 0, -i], [\"L\", o, i], [\"Z\"]];\n              return (\n                \"down\" === n\n                  ? (a = [[\"M\", -o, -i], [\"L\", o, -i], [\"L\", 0, i], [\"Z\"]])\n                  : \"left\" === n\n                  ? (a = [[\"M\", -o, o - i], [\"L\", o, -o], [\"L\", o, o], [\"Z\"]])\n                  : \"right\" === n &&\n                    (a = [[\"M\", o, o - i], [\"L\", -o, o], [\"L\", -o, -o], [\"Z\"]]),\n                a\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n            updateLinkPoints: function (t, e) {\n              var n = this.getOptions({}),\n                i = n.linkPoints,\n                o = n.direction,\n                s = t.direction || o,\n                c = e.find(function (t) {\n                  return \"link-point-left\" === t.get(\"className\");\n                }),\n                u = e.find(function (t) {\n                  return \"link-point-right\" === t.get(\"className\");\n                }),\n                h = e.find(function (t) {\n                  return \"link-point-top\" === t.get(\"className\");\n                }),\n                l = e.find(function (t) {\n                  return \"link-point-bottom\" === t.get(\"className\");\n                }),\n                f = i,\n                d = c || u || h || l;\n              d && (f = d.attr());\n              var p = Object(a.mix)({}, f, t.linkPoints),\n                g = p.fill,\n                v = p.stroke,\n                y = p.lineWidth,\n                m = p.size / 2;\n              m || (m = p.r);\n              var b = t.linkPoints\n                  ? t.linkPoints\n                  : {\n                      left: void 0,\n                      right: void 0,\n                      top: void 0,\n                      bottom: void 0,\n                    },\n                x = b.left,\n                w = b.right,\n                S = b.top,\n                O = b.bottom,\n                M = this.getSize(t)[0],\n                k = { r: m, fill: g, stroke: v, lineWidth: y },\n                C = null,\n                E = M * Math.sin((1 / 3) * Math.PI),\n                j = M * Math.sin((1 / 3) * Math.PI);\n              \"up\" === s\n                ? (C = [-j, E])\n                : \"down\" === s\n                ? (C = [-j, -E])\n                : \"left\" === s && (C = [-j, j - E]),\n                C &&\n                  (c\n                    ? x || void 0 === x\n                      ? c.attr(r(r({}, k), { x: C[0], y: C[1] }))\n                      : c.remove()\n                    : x &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: C[0], y: C[1] }),\n                        className: \"link-point-left\",\n                        name: \"link-point-left\",\n                        isAnchorPoint: !0,\n                      }));\n              var P = null;\n              \"up\" === s\n                ? (P = [j, E])\n                : \"down\" === s\n                ? (P = [j, -E])\n                : \"right\" === s && (P = [j, j - E]),\n                P &&\n                  (u\n                    ? w || void 0 === w\n                      ? u.attr(r(r({}, k), { x: P[0], y: P[1] }))\n                      : u.remove()\n                    : w &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: P[0], y: P[1] }),\n                        className: \"link-point-right\",\n                        name: \"link-point-right\",\n                        isAnchorPoint: !0,\n                      }));\n              var A = null;\n              \"up\" === s\n                ? (A = [j - E, -E])\n                : \"left\" === s\n                ? (A = [j, -E])\n                : \"right\" === s && (A = [-j, -E]),\n                A &&\n                  (h\n                    ? S || void 0 === S\n                      ? h.attr(r(r({}, k), { x: A[0], y: A[1] }))\n                      : h.remove()\n                    : S &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: A[0], y: A[1] }),\n                        className: \"link-point-top\",\n                        name: \"link-point-top\",\n                        isAnchorPoint: !0,\n                      }));\n              var I = null;\n              \"down\" === s\n                ? (I = [-j + E, E])\n                : \"left\" === s\n                ? (I = [j, E])\n                : \"right\" === s && (I = [-j, E]),\n                I &&\n                  (l\n                    ? O || void 0 === O\n                      ? l.attr(r(r({}, k), { x: I[0], y: I[1] }))\n                      : l.remove()\n                    : O &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: I[0], y: I[1] }),\n                        className: \"link-point-bottom\",\n                        name: \"link-point-bottom\",\n                        isAnchorPoint: !0,\n                      }));\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"modelRect\",\n          {\n            options: {\n              size: [185, 70],\n              style: {\n                radius: 5,\n                stroke: \"#69c0ff\",\n                fill: \"#ffffff\",\n                lineWidth: o.e.defaultNode.style.lineWidth,\n                fillOpacity: 1,\n              },\n              labelCfg: {\n                style: { fill: \"#595959\", fontSize: 14 },\n                offset: 30,\n              },\n              descriptionCfg: {\n                style: { fontSize: 12, fill: \"#bfbfbf\" },\n                paddingTop: 0,\n              },\n              preRect: { show: !0, width: 4, fill: \"#40a9ff\", radius: 2 },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: 10,\n                lineWidth: 1,\n                fill: \"#72CC4A\",\n                stroke: \"#72CC4A\",\n              },\n              logoIcon: {\n                show: !0,\n                x: 0,\n                y: 0,\n                img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n                width: 16,\n                height: 16,\n                offset: 0,\n              },\n              stateIcon: {\n                show: !0,\n                x: 0,\n                y: 0,\n                img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n                width: 16,\n                height: 16,\n                offset: -5,\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n            },\n            shapeType: \"modelRect\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).preRect,\n                o = void 0 === n ? {} : n,\n                a = this.getShapeStyle(t),\n                s = this.getSize(t),\n                c = s[0],\n                u = s[1],\n                h = e.addShape(\"rect\", {\n                  attrs: a,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                l = o.show,\n                f = i(o, [\"show\"]);\n              return (\n                l &&\n                  e.addShape(\"rect\", {\n                    attrs: r({ x: -c / 2, y: -u / 2, height: u }, f),\n                    className: \"pre-rect\",\n                    name: \"pre-rect\",\n                    draggable: !0,\n                  }),\n                this.drawLogoIcon(t, e),\n                this.drawStateIcon(t, e),\n                this.drawLinkPoints(t, e),\n                h\n              );\n            },\n            drawLogoIcon: function (t, e) {\n              var n = this.getOptions(t).logoIcon,\n                o = void 0 === n ? {} : n,\n                a = this.getSize(t)[0];\n              if (o.show) {\n                var s = o.width,\n                  c = o.height,\n                  u = o.x,\n                  h = o.y,\n                  l = o.offset,\n                  f = o.text,\n                  d = i(o, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n                f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        d,\n                      ),\n                      className: \"rect-logo-icon\",\n                      name: \"rect-logo-icon\",\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r(r({}, d), {\n                        x: u || -a / 2 + s + l,\n                        y: h || -c / 2,\n                        width: s,\n                        height: c,\n                      }),\n                      className: \"rect-logo-icon\",\n                      name: \"rect-logo-icon\",\n                      draggable: !0,\n                    });\n              }\n            },\n            drawStateIcon: function (t, e) {\n              var n = this.getOptions(t).stateIcon,\n                o = void 0 === n ? {} : n,\n                a = this.getSize(t)[0];\n              if (o.show) {\n                var s = o.width,\n                  c = o.height,\n                  u = o.x,\n                  h = o.y,\n                  l = o.offset,\n                  f = o.text,\n                  d = i(o, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n                f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        d,\n                      ),\n                      className: \"rect-state-icon\",\n                      name: \"rect-state-icon\",\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r(r({}, d), {\n                        x: u || a / 2 - s + l,\n                        y: h || -c / 2,\n                        width: s,\n                        height: c,\n                      }),\n                      className: \"rect-state-icon\",\n                      name: \"rect-state-icon\",\n                      draggable: !0,\n                    });\n              }\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            drawLabel: function (t, e) {\n              var n = this.getOptions(t),\n                i = n.labelCfg,\n                o = void 0 === i ? {} : i,\n                s = n.logoIcon,\n                c = void 0 === s ? {} : s,\n                u = n.descriptionCfg,\n                h = void 0 === u ? {} : u,\n                l = this.getSize(t)[0],\n                f = null,\n                d = c.show,\n                p = c.width,\n                g = -l / 2 + o.offset;\n              d && (g = -l / 2 + p + o.offset);\n              var v = o.style,\n                y = h.style,\n                m = h.paddingTop;\n              return (\n                Object(a.isString)(t.description)\n                  ? ((f = e.addShape(\"text\", {\n                      attrs: r(r({}, v), { x: g, y: -5, text: t.label }),\n                      className: \"text-shape\",\n                      name: \"text-shape\",\n                      draggable: !0,\n                    })),\n                    e.addShape(\"text\", {\n                      attrs: r(r({}, y), {\n                        x: g,\n                        y: 17 + (m || 0),\n                        text: t.description,\n                      }),\n                      className: \"rect-description\",\n                      name: \"rect-description\",\n                      draggable: !0,\n                    }))\n                  : (f = e.addShape(\"text\", {\n                      attrs: r(r({}, v), { x: g, y: 7, text: t.label }),\n                      className: \"text-shape\",\n                      name: \"text-shape\",\n                      draggable: !0,\n                    })),\n                f\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = i.width || o[0],\n                c = i.height || o[1];\n              return r({ x: -s / 2, y: -c / 2, width: s, height: c }, i);\n            },\n            update: function (t, e) {\n              var n = this.getOptions(t),\n                o = n.style,\n                s = void 0 === o ? {} : o,\n                c = n.labelCfg,\n                u = void 0 === c ? {} : c,\n                h = n.descriptionCfg,\n                l = void 0 === h ? {} : h,\n                f = this.getSize(t),\n                d = f[0],\n                p = f[1];\n              e.get(\"keyShape\").attr(\n                r(r({}, s), { x: -d / 2, y: -p / 2, width: d, height: p }),\n              );\n              var g = e.getContainer(),\n                v = g.find(function (t) {\n                  return \"rect-logo-icon\" === t.get(\"className\");\n                }),\n                y = v ? v.attr() : {},\n                m = Object(a.mix)({}, y, t.logoIcon),\n                b = m.width;\n              void 0 === b && (b = this.options.logoIcon.width);\n              var x = t.logoIcon ? t.logoIcon.show : void 0,\n                w = u.offset,\n                S = -d / 2 + b + w;\n              x || void 0 === x || (S = -d / 2 + w);\n              var O = g.find(function (t) {\n                  return \"node-label\" === t.get(\"className\");\n                }),\n                M = g.find(function (t) {\n                  return \"rect-description\" === t.get(\"className\");\n                });\n              if (t.label)\n                if (O) {\n                  var k = t.labelCfg ? t.labelCfg.style : {},\n                    C = Object(a.mix)({}, O.attr(), k);\n                  t.label && (C.text = t.label),\n                    (C.x = S),\n                    Object(a.isString)(t.description) && (C.y = -5),\n                    M && (M.resetMatrix(), M.attr({ x: S })),\n                    O.resetMatrix(),\n                    O.attr(C);\n                } else\n                  g.addShape(\"text\", {\n                    attrs: r(r({}, u.style), {\n                      x: S,\n                      y: t.description ? -5 : 7,\n                      text: t.label,\n                    }),\n                    className: \"node-label\",\n                    name: \"node-label\",\n                    draggable: !0,\n                  });\n              if (Object(a.isString)(t.description)) {\n                var E = l.paddingTop;\n                if (M) {\n                  k = t.descriptionCfg ? t.descriptionCfg.style : {};\n                  var j = Object(a.mix)({}, M.attr(), k);\n                  Object(a.isString)(t.description) && (j.text = t.description),\n                    (j.x = S),\n                    M.resetMatrix(),\n                    M.attr(r(r({}, j), { y: 17 + (E || 0) }));\n                } else\n                  g.addShape(\"text\", {\n                    attrs: r(r({}, l.style), {\n                      x: S,\n                      y: 17 + (E || 0),\n                      text: t.description,\n                    }),\n                    className: \"rect-description\",\n                    name: \"rect-description\",\n                    draggable: !0,\n                  });\n              }\n              var P = g.find(function (t) {\n                return \"pre-rect\" === t.get(\"className\");\n              });\n              if (P) {\n                var A = Object(a.mix)({}, P.attr(), t.preRect);\n                P.attr(r(r({}, A), { x: -d / 2, y: -p / 2, height: p }));\n              }\n              if (v)\n                if (x || void 0 === x) {\n                  var I = m.width,\n                    T = m.height,\n                    N = m.x,\n                    B = m.y,\n                    L = m.offset,\n                    D = i(m, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n                  v.attr(\n                    r(r({}, D), {\n                      x: N || -d / 2 + I + L,\n                      y: B || -T / 2,\n                      width: I,\n                      height: T,\n                    }),\n                  );\n                } else v.remove();\n              else x && this.drawLogoIcon(t, g);\n              var _ = g.find(function (t) {\n                  return \"rect-state-icon\" === t.get(\"className\");\n                }),\n                R = _ ? _.attr() : {},\n                F = Object(a.mix)({}, R, t.stateIcon);\n              if (_) {\n                F.show || void 0 === F.show || _.remove();\n                var Y = F.width,\n                  X = ((T = F.height), (N = F.x), (B = F.y), F.offset),\n                  z = i(F, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n                _.attr(\n                  r(r({}, z), {\n                    x: N || d / 2 - Y + X,\n                    y: B || -T / 2,\n                    width: Y,\n                    height: T,\n                  }),\n                );\n              } else F.show && this.drawStateIcon(t, g);\n              this.updateLinkPoints(t, g);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"star\",\n          {\n            options: {\n              size: 60,\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"star\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"path\", {\n                  attrs: o,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.leftBottom,\n                h = o.rightBottom,\n                l = o.size,\n                f = o.r,\n                d = i(o, [\n                  \"top\",\n                  \"left\",\n                  \"right\",\n                  \"leftBottom\",\n                  \"rightBottom\",\n                  \"size\",\n                  \"r\",\n                ]),\n                p = this.getSize(t)[0];\n              if (c) {\n                var g = Math.cos(0.1 * Math.PI) * p,\n                  v = Math.sin(0.1 * Math.PI) * p;\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-right\",\n                  name: \"link-point-right\",\n                });\n              }\n              if (a) {\n                (g = Math.cos(0.5 * Math.PI) * p),\n                  (v = Math.sin(0.5 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-top\",\n                  name: \"link-point-top\",\n                });\n              }\n              if (s) {\n                (g = Math.cos(0.9 * Math.PI) * p),\n                  (v = Math.sin(0.9 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                });\n              }\n              if (u) {\n                (g = Math.cos(1.3 * Math.PI) * p),\n                  (v = Math.sin(1.3 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-left-bottom\",\n                  name: \"link-point-left-bottom\",\n                });\n              }\n              if (h) {\n                (g = Math.cos(1.7 * Math.PI) * p),\n                  (v = Math.sin(1.7 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-right-bottom\",\n                  name: \"link-point-right-bottom\",\n                });\n              }\n            },\n            getPath: function (t) {\n              for (\n                var e = this.getSize(t)[0],\n                  n = (3 * e) / 8,\n                  r = t.innerR || n,\n                  i = [],\n                  o = 0;\n                o < 5;\n                o++\n              ) {\n                var a = Math.cos(((18 + 72 * o) / 180) * Math.PI) * e,\n                  s = Math.sin(((18 + 72 * o) / 180) * Math.PI) * e,\n                  c = Math.cos(((54 + 72 * o) / 180) * Math.PI) * r,\n                  u = Math.sin(((54 + 72 * o) / 180) * Math.PI) * r;\n                0 === o ? i.push([\"M\", a, -s]) : i.push([\"L\", a, -s]),\n                  i.push([\"L\", c, -u]);\n              }\n              return i.push([\"Z\"]), i;\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n            updateLinkPoints: function (t, e) {\n              var n = this.getOptions({}).linkPoints,\n                i = e.find(function (t) {\n                  return \"link-point-left\" === t.get(\"className\");\n                }),\n                o = e.find(function (t) {\n                  return \"link-point-right\" === t.get(\"className\");\n                }),\n                s = e.find(function (t) {\n                  return \"link-point-top\" === t.get(\"className\");\n                }),\n                c = e.find(function (t) {\n                  return \"link-point-left-bottom\" === t.get(\"className\");\n                }),\n                u = e.find(function (t) {\n                  return \"link-point-right-bottom\" === t.get(\"className\");\n                }),\n                h = n,\n                l = i || o || s || c || u;\n              l && (h = l.attr());\n              var f = Object(a.mix)({}, h, t.linkPoints),\n                d = f.fill,\n                p = f.stroke,\n                g = f.lineWidth,\n                v = f.size / 2;\n              v || (v = f.r);\n              var y = t.linkPoints\n                  ? t.linkPoints\n                  : {\n                      left: void 0,\n                      right: void 0,\n                      top: void 0,\n                      leftBottom: void 0,\n                      rightBottom: void 0,\n                    },\n                m = y.left,\n                b = y.right,\n                x = y.top,\n                w = y.leftBottom,\n                S = y.rightBottom,\n                O = this.getSize(t)[0],\n                M = { r: v, fill: d, stroke: p, lineWidth: g },\n                k = Math.cos(0.1 * Math.PI) * O,\n                C = Math.sin(0.1 * Math.PI) * O;\n              o\n                ? b || void 0 === b\n                  ? o.attr(r(r({}, M), { x: k, y: -C }))\n                  : o.remove()\n                : b &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, M), { x: k, y: -C }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                (k = Math.cos(0.5 * Math.PI) * O),\n                (C = Math.sin(0.5 * Math.PI) * O),\n                s\n                  ? x || void 0 === x\n                    ? s.attr(r(r({}, M), { x: k, y: -C }))\n                    : s.remove()\n                  : x &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -C }),\n                      className: \"link-point-top\",\n                      name: \"link-point-top\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(0.9 * Math.PI) * O),\n                (C = Math.sin(0.9 * Math.PI) * O),\n                i\n                  ? m || void 0 === m\n                    ? i.attr(r(r({}, M), { x: k, y: -C }))\n                    : i.remove()\n                  : m &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -C }),\n                      className: \"link-point-left\",\n                      name: \"link-point-left\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(1.3 * Math.PI) * O),\n                (C = Math.sin(1.3 * Math.PI) * O),\n                c\n                  ? w || void 0 === w\n                    ? c.attr(r(r({}, M), { x: k, y: -C }))\n                    : c.remove()\n                  : w &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -C }),\n                      className: \"link-point-left-bottom\",\n                      name: \"link-point-left-bottom\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(1.7 * Math.PI) * O),\n                (C = Math.sin(1.7 * Math.PI) * O),\n                u\n                  ? S || void 0 === S\n                    ? u.attr(r(r({}, M), { x: k, y: -C }))\n                    : c.remove()\n                  : S &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -C }),\n                      className: \"link-point-right-bottom\",\n                      name: \"link-point-right-bottom\",\n                      isAnchorPoint: !0,\n                    });\n            },\n          },\n          \"single-node\",\n        );\n      var s = o.h.defaultSubjectColors;\n      Object(o.l)(\n        \"donut\",\n        {\n          options: {\n            size: o.e.defaultNode.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultNode.style.stroke,\n              fill: o.e.defaultNode.style.fill,\n              lineWidth: o.e.defaultNode.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.nodeLabel.style.fill,\n                fontSize: o.e.nodeLabel.style.fontSize,\n              },\n            },\n            linkPoints: {\n              top: !1,\n              right: !1,\n              bottom: !1,\n              left: !1,\n              size: o.e.defaultNode.linkPoints.size,\n              lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n              fill: o.e.defaultNode.linkPoints.fill,\n              stroke: o.e.defaultNode.linkPoints.stroke,\n            },\n            icon: {\n              show: !1,\n              img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n              width: 20,\n              height: 20,\n            },\n            stateStyles: r({}, o.e.nodeStateStyles),\n          },\n          shapeType: \"circle\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getOptions(t).icon,\n              i = void 0 === n ? {} : n,\n              o = this.getShapeStyle(t),\n              c = Object(a.deepMix)({}, i, t.icon),\n              u = e.addShape(\"circle\", {\n                attrs: o,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n                name: \"\".concat(this.type, \"-keyShape\"),\n              }),\n              h = c.width,\n              l = c.height,\n              f = c.show,\n              d = c.text;\n            f &&\n              (d\n                ? e.addShape(\"text\", {\n                    attrs: r(\n                      {\n                        x: 0,\n                        y: 0,\n                        fontSize: 12,\n                        fill: \"#000\",\n                        stroke: \"#000\",\n                        textBaseline: \"middle\",\n                        textAlign: \"center\",\n                      },\n                      c,\n                    ),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  })\n                : e.addShape(\"image\", {\n                    attrs: r({ x: -h / 2, y: -l / 2 }, c),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  }));\n            var p = u.attr(\"r\"),\n              g = 0.6 * p,\n              v = (p + g) / 2,\n              y = t,\n              m = y.donutAttrs,\n              b = void 0 === m ? {} : m,\n              x = y.donutColorMap,\n              w = void 0 === x ? {} : x,\n              S = Object.keys(b).length;\n            if (b && S > 1) {\n              var O = [],\n                M = 0;\n              if (\n                (Object.keys(b).forEach(function (t) {\n                  var e = b[t] || 0;\n                  Object(a.isNumber)(e) &&\n                    (O.push({ key: t, value: e, color: w[t] }), (M += e));\n                }),\n                M)\n              ) {\n                var k = p - g;\n                if (1 === S)\n                  return void e.addShape(\"circle\", {\n                    attrs: {\n                      r: v,\n                      x: 0,\n                      y: 0,\n                      stroke: O[0].color || s[0],\n                      lineWidth: k,\n                    },\n                    name: \"fan-shape-0\",\n                  });\n                var C = [v, 0],\n                  E = 0;\n                O.forEach(function (t, n) {\n                  var r = t.value / M;\n                  if (!(r < 0.001))\n                    if ((r > 0.999 && (r = 1), 1 !== r)) {\n                      (t.percent = r),\n                        (t.angle = r * Math.PI * 2),\n                        (t.beginAgnle = E),\n                        (E += t.angle),\n                        (t.endAngle = E),\n                        (t.arcBegin = C),\n                        (t.arcEnd = [\n                          v * Math.cos(t.endAngle),\n                          -v * Math.sin(t.endAngle),\n                        ]);\n                      var i = t.angle > Math.PI ? 1 : 0,\n                        o = [\n                          [\"M\", t.arcBegin[0], t.arcBegin[1]],\n                          [\"A\", v, v, 0, i, 0, t.arcEnd[0], t.arcEnd[1]],\n                          [\"L\", t.arcEnd[0], t.arcEnd[1]],\n                        ];\n                      e.addShape(\"path\", {\n                        attrs: {\n                          path: o,\n                          lineWidth: k,\n                          stroke: t.color || s[n % s.length],\n                        },\n                        name: \"fan-shape-\".concat(n),\n                      }),\n                        (C = t.arcEnd);\n                    } else\n                      e.addShape(\"circle\", {\n                        attrs: {\n                          r: v,\n                          x: 0,\n                          y: 0,\n                          stroke: t.color || s[n % s.length],\n                          lineWidth: k,\n                        },\n                        name: \"fan-shape-\".concat(n),\n                      });\n                });\n              }\n            }\n            return this.drawLinkPoints(t, e), u;\n          },\n          update: void 0,\n        },\n        \"circle\",\n      );\n      var c = function (t) {\n          var e = t.x,\n            n = t.y;\n          return {\n            x: e,\n            y: n,\n            centerX: e,\n            centerY: n,\n            minX: e,\n            minY: n,\n            maxX: e,\n            maxY: n,\n            height: 0,\n            width: 0,\n          };\n        },\n        u = function (t) {\n          for (var e = [], n = {}, r = t.length - 1; r >= 0; r--) {\n            var i = t[r];\n            (i.id = \"\".concat(i.x, \"|||\").concat(i.y)),\n              (n[i.id] = i),\n              e.push(i);\n          }\n          return e;\n        },\n        h = function (t) {\n          return u(t);\n        },\n        l = function (t, e) {\n          return t.width || t.height\n            ? {\n                centerX: t.centerX,\n                centerY: t.centerY,\n                minX: t.minX - e,\n                minY: t.minY - e,\n                maxX: t.maxX + e,\n                maxY: t.maxY + e,\n                height: t.height + 2 * e,\n                width: t.width + 2 * e,\n              }\n            : t;\n        },\n        f = function (t, e, n) {\n          var r = (function (t, e) {\n            var n = Math.abs(t.x - e.centerX),\n              r = Math.abs(t.y - e.centerY);\n            return 0 === n && 0 === r ? 0 : n / e.width > r / e.height;\n          })(e, t);\n          if (0 === r) {\n            var i = t.centerX,\n              o = t.centerY;\n            return (\n              n.y < e.y\n                ? (o = t.minY)\n                : n.x > e.x\n                ? (i = t.maxX)\n                : n.x < e.x\n                ? (i = t.minX)\n                : n.x === e.x && (o = t.maxY),\n              { x: i, y: o }\n            );\n          }\n          return r\n            ? { x: e.x > t.centerX ? t.maxX : t.minX, y: e.y }\n            : { x: e.x, y: e.y > t.centerY ? t.maxY : t.minY };\n        },\n        d = function (t, e) {\n          var n = Math.min(t.minX, e.minX),\n            r = Math.min(t.minY, e.minY),\n            i = Math.max(t.maxX, e.maxX),\n            o = Math.max(t.maxY, e.maxY);\n          return {\n            centerX: (n + i) / 2,\n            centerY: (r + o) / 2,\n            minX: n,\n            minY: r,\n            maxX: i,\n            maxY: o,\n            height: o - r,\n            width: i - n,\n          };\n        },\n        p = function (t) {\n          return [\n            { x: t.minX, y: t.minY },\n            { x: t.maxX, y: t.minY },\n            { x: t.maxX, y: t.maxY },\n            { x: t.minX, y: t.maxY },\n          ];\n        },\n        g = function (t, e) {\n          var n = t.x,\n            r = t.y;\n          return n < e.minX || n > e.maxX || r < e.minY || r > e.maxY;\n        },\n        v = function (t, e) {\n          return Math.abs(t.x - e.x) + Math.abs(t.y - e.y);\n        },\n        y = function (t, e, n, r, i) {\n          return (\n            v(t, e) +\n            v(t, n) +\n            (function (t, e) {\n              var n = 0;\n              return (\n                e.forEach(function (e) {\n                  e && (t.x === e.x && (n += -2), t.y === e.y && (n += -2));\n                }),\n                n\n              );\n            })(t, [e, n, r, i])\n          );\n        },\n        m = function t(e, n, r, i, o) {\n          void 0 === o && (o = 0),\n            e.unshift(n[i]),\n            r[i] && r[i] !== i && o <= 100 && t(e, n, r, r[i], o + 1);\n        },\n        b = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = r.x - t.x,\n            s = r.y - t.y,\n            c = n.x - e.x,\n            u = n.y - e.y,\n            h = r.x - e.x,\n            l = r.y - e.y;\n          return (\n            (i * s - o * a) * (c * l - u * h) <= 0 &&\n            (i * u - o * c) * (a * l - s * h) <= 0\n          );\n        },\n        x = function (t, e, n) {\n          if (n.width || n.height) {\n            var r = p(n),\n              i = r[0],\n              o = r[1],\n              a = r[2],\n              s = r[3];\n            return (\n              b(t, e, i, o) || b(t, e, i, s) || b(t, e, o, a) || b(t, e, a, s)\n            );\n          }\n          return !1;\n        },\n        w = function (t, e, n, r) {\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              if (t !== e && (t.x === e.x || t.y === e.y)) {\n                if (x(t, e, n) || x(t, e, r)) return;\n                i.push(t);\n              }\n            }),\n            u(i)\n          );\n        },\n        S = function (t, e) {\n          var n = [],\n            r = t[0];\n          return (\n            n.push(\"M\".concat(r.x, \" \").concat(r.y)),\n            t.forEach(function (r, i) {\n              var o = t[i + 1],\n                a = t[i + 2];\n              if (o && a)\n                if (\n                  (function (t, e, n) {\n                    return !(\n                      (t.x === e.x && e.x === n.x) ||\n                      (t.y === e.y && e.y === n.y)\n                    );\n                  })(r, o, a)\n                ) {\n                  var s = (function (t, e, n, r) {\n                      var i = v(t, e),\n                        o = v(n, e);\n                      return (\n                        i < r && (r = i),\n                        o < r && (r = o),\n                        [\n                          {\n                            x: e.x - (r / i) * (e.x - t.x),\n                            y: e.y - (r / i) * (e.y - t.y),\n                          },\n                          {\n                            x: e.x - (r / o) * (e.x - n.x),\n                            y: e.y - (r / o) * (e.y - n.y),\n                          },\n                        ]\n                      );\n                    })(r, o, a, e),\n                    c = s[0],\n                    u = s[1];\n                  n.push(\"L\".concat(c.x, \" \").concat(c.y)),\n                    n.push(\n                      \"Q\"\n                        .concat(o.x, \" \")\n                        .concat(o.y, \" \")\n                        .concat(u.x, \" \")\n                        .concat(u.y),\n                    ),\n                    n.push(\"L\".concat(u.x, \" \").concat(u.y));\n                } else n.push(\"L\".concat(o.x, \" \").concat(o.y));\n              else o && n.push(\"L\".concat(o.x, \" \").concat(o.y));\n            }),\n            n.join(\"\")\n          );\n        },\n        O = function (t, e, n, r, i) {\n          var o, a;\n          if (n && n.getType())\n            if (\"combo\" === n.getType()) {\n              ((o = n.getKeyShape().getCanvasBBox() || c(t)).centerX =\n                (o.minX + o.maxX) / 2),\n                (o.centerY = (o.minY + o.maxY) / 2);\n            } else o = n.getBBox();\n          else o = c(t);\n          if (r && r.getType())\n            if (\"combo\" === r.getType()) {\n              var s = r.getKeyShape().getBBox();\n              if (s) {\n                var b = r.getModel(),\n                  x = b.x,\n                  S = b.y;\n                ((a = {\n                  x: x,\n                  y: S,\n                  width: s.width,\n                  height: s.height,\n                  minX: s.minX + x,\n                  maxX: s.maxX + x,\n                  minY: s.minY + S,\n                  maxY: s.maxY + S,\n                }).centerX = (a.minX + a.maxX) / 2),\n                  (a.centerY = (a.minY + a.maxY) / 2);\n              } else a = c(e);\n            } else a = r && r.getBBox();\n          else a = c(e);\n          var O = l(o, i),\n            M = l(a, i),\n            k = f(O, t, e),\n            C = f(M, e, t),\n            E = (function (t) {\n              void 0 === t && (t = []);\n              var e = [],\n                n = [];\n              t.forEach(function (t) {\n                e.push(t.x), n.push(t.y);\n              });\n              var r = Math.min.apply(Math, e),\n                i = Math.max.apply(Math, e),\n                o = Math.min.apply(Math, n),\n                a = Math.max.apply(Math, n);\n              return {\n                centerX: (r + i) / 2,\n                centerY: (o + a) / 2,\n                maxX: i,\n                maxY: a,\n                minX: r,\n                minY: o,\n                height: a - o,\n                width: i - r,\n              };\n            })([k, C]),\n            j = d(O, E),\n            P = d(M, E),\n            A = [];\n          A = A.concat(p(j)).concat(p(P));\n          var I = { x: (t.x + e.x) / 2, y: (t.y + e.y) / 2 };\n          [E, j, P].forEach(function (t) {\n            A = A.concat(\n              (function (t, e) {\n                return (function (t, e) {\n                  return e < t.minX || e > t.maxX\n                    ? []\n                    : [\n                        { x: e, y: t.minY },\n                        { x: e, y: t.maxY },\n                      ];\n                })(t, e.x).concat(\n                  (function (t, e) {\n                    return e < t.minY || e > t.maxY\n                      ? []\n                      : [\n                          { x: t.minX, y: e },\n                          { x: t.maxX, y: e },\n                        ];\n                  })(t, e.y),\n                );\n              })(t, I).filter(function (t) {\n                return g(t, O) && g(t, M);\n              }),\n            );\n          }),\n            [\n              { x: k.x, y: C.y },\n              { x: C.x, y: k.y },\n            ].forEach(function (t) {\n              g(t, O) && g(t, M) && A.push(t);\n            }),\n            A.unshift(k),\n            A.push(C);\n          var T = (function (t, e, n, r, i, o, a) {\n            var s = [],\n              c = [e],\n              u = {},\n              h = {},\n              l = {};\n            (h[e.id] = 0), (l[e.id] = y(e, n, e));\n            var f,\n              d,\n              p,\n              g,\n              b,\n              x = {};\n            for (\n              t.forEach(function (t) {\n                x[t.id] = t;\n              });\n              c.length;\n\n            ) {\n              if (\n                ((f = void 0),\n                (d = 1 / 0),\n                c.forEach(function (t) {\n                  l[t.id] <= d && ((d = l[t.id]), (f = t));\n                }),\n                f === n)\n              ) {\n                var S = [];\n                return m(S, x, u, n.id), S;\n              }\n              (g = f),\n                (b = void 0),\n                (b = (p = c).indexOf(g)) > -1 && p.splice(b, 1),\n                s.push(f),\n                w(t, f, r, i).forEach(function (t) {\n                  if (-1 === s.indexOf(t)) {\n                    -1 === c.indexOf(t) && c.push(t);\n                    var r = l[f.id] + v(f, t);\n                    (h[t.id] && r >= h[t.id]) ||\n                      ((u[t.id] = f.id),\n                      (h[t.id] = r),\n                      (l[t.id] = h[t.id] + y(t, n, e, o, a)));\n                  }\n                });\n            }\n            return [e, n];\n          })((A = u(A)), k, C, o, a, t, e);\n          return T.unshift(t), T.push(e), h(T);\n        },\n        M = {\n          offset: 20,\n          maxAllowedDirectionChange: Math.PI / 2,\n          maximumLoops: 2e3,\n          gridSize: 10,\n          directions: [\n            { stepX: 1, stepY: 0 },\n            { stepX: -1, stepY: 0 },\n            { stepX: 0, stepY: 1 },\n            { stepX: 0, stepY: -1 },\n          ],\n          get penalties() {\n            return { 0: 0, 45: this.gridSize / 2, 90: this.gridSize / 2 };\n          },\n          distFunc: function (t, e) {\n            return Math.abs(t.x - e.x) + Math.abs(t.y - e.y);\n          },\n          fallbackRoute: function (t, e, n, r, i) {\n            return h(O(t, e, n, r, i.offset));\n          },\n        },\n        k =\n          (Math.PI,\n          function (t, e) {\n            var n = Math.round(Math.abs(t / e));\n            return n < 0 ? 0 : (t < 0 ? -1 : 1) * n;\n          }),\n        C = function (t, e) {\n          var n = e.x - t.x,\n            r = e.y - t.y;\n          return n || r ? Math.atan2(r, n) : 0;\n        },\n        E = function (t, e) {\n          var n = Math.abs(t - e);\n          return n > Math.PI ? 2 * Math.PI - n : n;\n        },\n        j = function (t, e, n) {\n          for (var r = 1 / 0, i = 0, o = e.length; i < o; i++) {\n            var a = n(t, e[i]);\n            a < r && (r = a);\n          }\n          return r;\n        },\n        P = function (t, e, n, r, i) {\n          var a = [];\n          if (!n) return [t];\n          var s = i.directions,\n            c = i.offset,\n            u = n.getBBox(),\n            h = e.x > u.minX && e.x < u.maxX && e.y > u.minY && e.y < u.maxY,\n            d = l(u, c);\n          for (var p in d) d[p] = k(d[p], i.gridSize);\n          if (h) {\n            for (var g = 0, v = s; g < v.length; g++) {\n              var y = v[g],\n                m = [\n                  [\n                    { x: d.minX, y: d.minY },\n                    { x: d.maxX, y: d.minY },\n                  ],\n                  [\n                    { x: d.minX, y: d.minY },\n                    { x: d.minX, y: d.maxY },\n                  ],\n                  [\n                    { x: d.maxX, y: d.minY },\n                    { x: d.maxX, y: d.maxY },\n                  ],\n                  [\n                    { x: d.minX, y: d.maxY },\n                    { x: d.maxX, y: d.maxY },\n                  ],\n                ];\n              for (p = 0; p < 4; p++) {\n                var b = m[p],\n                  w = o.h.getLineIntersect(\n                    t,\n                    { x: t.x + y.stepX * d.width, y: t.y + y.stepY * d.height },\n                    b[0],\n                    b[1],\n                  );\n                w &&\n                  !x(t, w, u) &&\n                  ((w.id = \"\".concat(w.x, \"|||\").concat(w.y)), a.push(w));\n              }\n            }\n            return a;\n          }\n          var S = f(d, t, r);\n          return (S.id = \"\".concat(S.x, \"|||\").concat(S.y)), [S];\n        },\n        A = function (t, e, n, r) {\n          var i = C(t, e);\n          if (!n[t.id]) {\n            var o = C(r, t);\n            return E(o, i);\n          }\n          var a = C({ x: n[t.id].x, y: n[t.id].y }, t);\n          return E(a, i);\n        },\n        I = function (t, e, n, r, i, o, a) {\n          var s = [r],\n            c = t.id,\n            u = t.x,\n            h = t.y,\n            l = { x: u, y: h, id: c };\n          for (\n            A(l, o, e, n) &&\n            s.unshift({\n              x: o.x === r.x ? r.x : l.x * a,\n              y: o.y === r.y ? r.y : l.y * a,\n            });\n            e[c] && e[c].id !== c;\n\n          ) {\n            var f = { x: u, y: h, id: c },\n              d = e[c].id,\n              p = e[c].x,\n              g = e[c].y,\n              v = { x: p, y: g, id: d };\n            A(v, f, e, n) &&\n              s.unshift({\n                x: v.x === f.x ? s[0].x : v.x * a,\n                y: v.y === f.y ? s[0].y : v.y * a,\n              }),\n              (c = d),\n              (u = p),\n              (h = g);\n          }\n          var y = u,\n            m = h;\n          return (\n            (s[0].x = y === n.x ? i.x : s[0].x),\n            (s[0].y = m === n.y ? i.y : s[0].y),\n            s.unshift(i),\n            s\n          );\n        },\n        T = function (t, e, n, r, i) {\n          if (isNaN(t.x) || isNaN(e.x)) return [];\n          var o = Object(a.deepMix)(M, i);\n          o.obstacles = o.obstacles || [];\n          var s = o.gridSize,\n            c = (function (t, e, n) {\n              var r = {};\n              return (\n                t.forEach(function (t) {\n                  if (t)\n                    for (\n                      var i = l(t.getBBox(), n), o = k(i.minX, e);\n                      o <= k(i.maxX, e);\n                      o += 1\n                    )\n                      for (var a = k(i.minY, e); a <= k(i.maxY, e); a += 1)\n                        r[\"\".concat(o, \"|||\").concat(a)] = !0;\n                }),\n                r\n              );\n            })(o.obstacles.concat([n, r]), s, o.offset),\n            u = { x: k(t.x, s), y: k(t.y, s) },\n            h = { x: k(e.x, s), y: k(e.y, s) };\n          (t.id = \"\".concat(u.x, \"|||\").concat(u.y)),\n            (e.id = \"\".concat(h.x, \"|||\").concat(h.y));\n          var f = P(u, t, n, h, o),\n            d = P(h, e, r, u, o);\n          f.forEach(function (t) {\n            delete c[t.id];\n          }),\n            d.forEach(function (t) {\n              delete c[t.id];\n            });\n          for (\n            var p = {}, g = {}, v = {}, y = {}, m = {}, b = 0;\n            b < f.length;\n            b++\n          ) {\n            var x = f[b];\n            (p[x.id] = x), (y[x.id] = 0), (m[x.id] = j(x, d, o.distFunc));\n          }\n          for (\n            var w, S, O, C, E, T, N, B = o.maximumLoops, L = o.penalties;\n            Object.keys(p).length > 0 &&\n            B > 0 &&\n            ((w = void 0),\n            (S = 1 / 0),\n            Object.keys(p).forEach(function (t) {\n              var e = p[t].id;\n              m[e] <= S && ((S = m[e]), (w = p[e]));\n            }),\n            w);\n\n          ) {\n            if (\n              d.findIndex(function (t) {\n                return t.x === w.x && t.y === w.y;\n              }) > -1\n            )\n              return I(w, v, u, e, t, h, s);\n            delete p[w.id], (g[w.id] = !0);\n            for (b = 0; b < o.directions.length; b++)\n              (O = o.directions[b]),\n                g[\n                  (C = {\n                    x: w.x + O.stepX,\n                    y: w.y + O.stepY,\n                    id: \"\"\n                      .concat(Math.round(w.x) + O.stepX, \"|||\")\n                      .concat(Math.round(w.y) + O.stepY),\n                  }).id\n                ] ||\n                  (N = A(w, C, v, u)) > o.maxAllowedDirectionChange ||\n                  c[C.id] ||\n                  (p[C.id] || (p[C.id] = C),\n                  (E = o.distFunc(w, C) + (isNaN(L[N]) ? s : L[N])),\n                  (T = y[w.id] + E),\n                  (y[C.id] && T >= y[C.id]) ||\n                    ((v[C.id] = w),\n                    (y[C.id] = T),\n                    (m[C.id] = T + j(C, d, o.distFunc))));\n            B -= 1;\n          }\n          return o.fallbackRoute(t, e, n, r, o);\n        };\n      Object(o.k)(\n        \"polyline\",\n        {\n          options: {\n            color: o.e.defaultEdge.color,\n            size: o.e.defaultEdge.size,\n            style: {\n              radius: 0,\n              offset: 15,\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultEdge.style.stroke,\n              lineAppendWidth: o.e.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.edgeLabel.style.fill,\n                fontSize: o.e.edgeLabel.style.fontSize,\n              },\n            },\n            routeCfg: {\n              obstacles: [],\n              maxAllowedDirectionChange: Math.PI,\n              maximumLoops: 500,\n              gridSize: 10,\n            },\n            stateStyles: r({}, o.e.edgeStateStyles),\n          },\n          shapeType: \"polyline\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return (\n              0 === n.radius && delete n.radius,\n              e.addShape(\"path\", {\n                className: \"edge-shape\",\n                name: \"edge-shape\",\n                attrs: n,\n              })\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(a.mix)({}, e, n, t.style);\n            (t = this.getPathPoints(t)),\n              (this.radius = r.radius),\n              (this.offset = r.offset);\n            var i = t.startPoint,\n              s = t.endPoint,\n              c = this.getControlPoints(t),\n              u = [i];\n            c && (u = u.concat(c)), u.push(s);\n            var h = t.sourceNode,\n              l = t.targetNode,\n              f = r.radius,\n              d = this.options.routeCfg,\n              p = Object(a.mix)({}, d, t.routeCfg);\n            p.offset = r.offset;\n            var g = this.getPath(u, h, l, f, p);\n            return (\n              ((Object(a.isArray)(g) && g.length <= 1) ||\n                (Object(a.isString)(g) && -1 === g.indexOf(\"L\"))) &&\n                (g = \"M0 0, L0 0\"),\n              (isNaN(i.x) || isNaN(i.y) || isNaN(s.x) || isNaN(s.y)) &&\n                (g = \"M0 0, L0 0\"),\n              Object(a.mix)({}, o.e.defaultEdge.style, r, {\n                lineWidth: t.size,\n                path: g,\n              })\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer();\n            if (e.isVisible()) {\n              var r = { stroke: t.color },\n                i =\n                  n.find(function (t) {\n                    return \"edge-shape\" === t.get(\"className\");\n                  }) || e.getKeyShape(),\n                o = t.size,\n                s = (t = this.getPathPoints(t)).startPoint,\n                c = t.endPoint,\n                u = this.getControlPoints(t),\n                h = [s];\n              u && (h = h.concat(u)), h.push(c);\n              var l = i.attr(),\n                f = Object(a.mix)({}, r, l, t.style),\n                d = t.sourceNode,\n                p = t.targetNode,\n                g = f.radius,\n                v = this.options.routeCfg,\n                y = Object(a.mix)({}, v, t.routeCfg);\n              y.offset = f.offset;\n              var m = this.getPath(h, d, p, g, y);\n              ((Object(a.isArray)(m) && m.length <= 1) ||\n                (Object(a.isString)(m) && -1 === m.indexOf(\"L\"))) &&\n                (m = \"M0 0, L0 0\"),\n                (isNaN(s.x) || isNaN(s.y) || isNaN(c.x) || isNaN(c.y)) &&\n                  (m = \"M0 0, L0 0\"),\n                l.endArrow &&\n                  !1 === f.endArrow &&\n                  (t.style.endArrow = { path: \"\" }),\n                l.startArrow &&\n                  !1 === f.startArrow &&\n                  (t.style.startArrow = { path: \"\" });\n              var b = Object(a.mix)(\n                r,\n                i.attr(),\n                { lineWidth: o, path: m },\n                t.style,\n              );\n              i && i.attr(b);\n            }\n          },\n          getPath: function (t, e, n, r, i) {\n            var s = i.offset,\n              c = i.simple;\n            if (!s || t.length > 2) {\n              if (r) return S(t, r);\n              var u = [];\n              return (\n                Object(a.each)(t, function (t, e) {\n                  0 === e ? u.push([\"M\", t.x, t.y]) : u.push([\"L\", t.x, t.y]);\n                }),\n                u\n              );\n            }\n            var h = c\n              ? O(t[t.length - 1], t[0], n, e, s)\n              : T(t[0], t[t.length - 1], e, n, i);\n            return h && h.length\n              ? r\n                ? S(h, r)\n                : o.h.pointsToPolygon(h)\n              : \"M0 0, L0 0\";\n          },\n        },\n        \"single-edge\",\n      );\n    },\n    396: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(2),\n        a = n(32),\n        s = a.a.cloneEvent,\n        c = a.a.isNaN,\n        u = Math.abs,\n        h = {\n          getDefaultCfg: function () {\n            return {\n              direction: \"both\",\n              enableOptimize: !1,\n              scalableRange: 0,\n              allowDragOnItem: !1,\n            };\n          },\n          getEvents: function () {\n            return {\n              dragstart: \"onDragStart\",\n              drag: \"onDragMove\",\n              dragend: \"onDragEnd\",\n            };\n          },\n          updateViewport: function (t) {\n            var e = this.origin,\n              n = +t.clientX,\n              r = +t.clientY;\n            if (!c(n) && !c(r)) {\n              var i = n - e.x,\n                o = r - e.y;\n              \"x\" === this.get(\"direction\")\n                ? (o = 0)\n                : \"y\" === this.get(\"direction\") && (i = 0),\n                (this.origin = { x: n, y: r });\n              var a = this.graph.get(\"width\"),\n                s = this.graph.get(\"height\"),\n                u = this.graph.get(\"canvas\").getCanvasBBox();\n              ((u.minX <= a + this.scalableRange &&\n                u.minX + i > a + this.scalableRange) ||\n                (u.maxX + this.scalableRange >= 0 &&\n                  u.maxX + this.scalableRange + i < 0)) &&\n                (i = 0),\n                ((u.minY <= s + this.scalableRange &&\n                  u.minY + o > s + this.scalableRange) ||\n                  (u.maxY + this.scalableRange >= 0 &&\n                    u.maxY + this.scalableRange + o < 0)) &&\n                  (o = 0),\n                this.graph.translate(i, o);\n            }\n          },\n          onDragStart: function (t) {\n            t.originalEvent;\n            if (this.shouldBegin.call(this, t)) {\n              var e = t.target,\n                n = e && e.isCanvas && e.isCanvas();\n              if (\n                (this.allowDragOnItem || n) &&\n                ((this.origin = { x: t.clientX, y: t.clientY }),\n                (this.dragging = !1),\n                this.enableOptimize)\n              ) {\n                for (\n                  var r = this.graph, i = r.getEdges(), o = 0, a = i.length;\n                  o < a;\n                  o++\n                ) {\n                  var s = i[o].get(\"group\").get(\"children\");\n                  s &&\n                    s.forEach(function (t) {\n                      t.set(\n                        \"ori-visibility\",\n                        t.get(\"ori-visibility\") || t.get(\"visible\"),\n                      ),\n                        t.hide();\n                    });\n                }\n                for (var c = r.getNodes(), u = 0, h = c.length; u < h; u++)\n                  for (\n                    var l = 0, f = c[u].getContainer().get(\"children\");\n                    l < f.length;\n                    l++\n                  ) {\n                    var d = f[l];\n                    d.get(\"isKeyShape\") ||\n                      (d.set(\n                        \"ori-visibility\",\n                        d.get(\"ori-visibility\") || d.get(\"visible\"),\n                      ),\n                      d.hide());\n                  }\n              }\n            }\n          },\n          onDragMove: function (t) {\n            this.graph;\n            var e = t.target,\n              n = e && e.isCanvas && e.isCanvas();\n            if ((this.allowDragOnItem || n) && ((t = s(t)), this.origin)) {\n              if (!this.dragging) {\n                if (\n                  u(this.origin.x - t.clientX) + u(this.origin.y - t.clientY) <\n                  10\n                )\n                  return;\n                this.shouldBegin.call(this, t) &&\n                  ((t.type = \"dragstart\"), (this.dragging = !0));\n              }\n              this.shouldUpdate.call(this, t) && this.updateViewport(t);\n            }\n          },\n          onDragEnd: function (t) {\n            var e = this.graph;\n            if (this.enableOptimize) {\n              for (var n = e.getEdges(), r = 0, i = n.length; r < i; r++) {\n                var o = n[r].get(\"group\").get(\"children\");\n                o &&\n                  o.forEach(function (t) {\n                    t.get(\"ori-visibility\") && t.show();\n                  });\n              }\n              for (var a = e.getNodes(), c = 0, u = a.length; c < u; c++)\n                for (\n                  var h = 0, l = a[c].getContainer().get(\"children\");\n                  h < l.length;\n                  h++\n                ) {\n                  var f = l[h];\n                  if (!f.get(\"isKeyShape\")) f.get(\"ori-visibility\") && f.show();\n                }\n            }\n            this.dragging\n              ? ((t = s(t)),\n                this.shouldEnd.call(this, t) && this.updateViewport(t),\n                (t.type = \"dragend\"),\n                this.endDrag())\n              : (this.origin = null);\n          },\n          endDrag: function () {\n            (this.origin = null), (this.dragging = !1), (this.dragbegin = !1);\n          },\n        },\n        l = n(18),\n        f = {\n          getDefaultCfg: function () {\n            return {\n              updateEdge: !0,\n              delegateStyle: {},\n              enableDelegate: !1,\n              onlyChangeComboSize: !1,\n              comboActiveState: \"\",\n              selectedState: \"selected\",\n            };\n          },\n          getEvents: function () {\n            return {\n              \"node:dragstart\": \"onDragStart\",\n              \"node:drag\": \"onDrag\",\n              \"node:dragend\": \"onDragEnd\",\n              \"combo:dragenter\": \"onDragEnter\",\n              \"combo:dragleave\": \"onDragLeave\",\n              \"combo:drop\": \"onDropCombo\",\n              \"node:drop\": \"onDropNode\",\n              \"canvas:drop\": \"onDropCanvas\",\n            };\n          },\n          validationCombo: function (t) {\n            return (\n              !(!this.origin || !t || t.destroyed) && \"combo\" === t.getType()\n            );\n          },\n          onDragStart: function (t) {\n            var e = this;\n            if (this.shouldBegin.call(this, t)) {\n              var n = t.item;\n              if (n && !n.destroyed && !n.hasLocked()) {\n                var r = t.target;\n                if (r) if (r.get(\"isAnchorPoint\")) return;\n                var o = this.graph;\n                (this.targets = []), (this.targetCombo = null);\n                var a = o.findAllByState(\"node\", this.selectedState),\n                  s = n.get(\"id\");\n                0 ===\n                a.filter(function (t) {\n                  var e = t.get(\"id\");\n                  return s === e;\n                }).length\n                  ? this.targets.push(n)\n                  : a.length > 1\n                  ? a.forEach(function (t) {\n                      t.hasLocked() || e.targets.push(t);\n                    })\n                  : this.targets.push(n);\n                var c = [];\n                this.targets.forEach(function (t) {\n                  c.push(Object(i.clone)(t.getModel()));\n                }),\n                  this.set(\"beforeDragNodes\", c),\n                  (this.origin = { x: t.x, y: t.y }),\n                  (this.point = {}),\n                  (this.originPoint = {});\n              }\n            }\n          },\n          onDrag: function (t) {\n            var e = this;\n            this.origin &&\n              this.shouldUpdate(this, t) &&\n              (this.get(\"enableDelegate\")\n                ? this.updateDelegate(t)\n                : this.targets.map(function (n) {\n                    e.update(n, t);\n                  }));\n          },\n          onDragEnd: function (t) {\n            if (this.origin && this.shouldEnd.call(this, t)) {\n              var e = t.item;\n              if (e) e.getContainer().set(\"capture\", !0);\n              this.delegateRect &&\n                (this.delegateRect.remove(), (this.delegateRect = null)),\n                this.updatePositions(t);\n              var n = this.graph;\n              if (n.get(\"enabledStack\")) {\n                var r = {\n                  before: {\n                    nodes: this.get(\"beforeDragNodes\"),\n                    edges: [],\n                    combos: [],\n                  },\n                  after: { nodes: [], edges: [], combos: [] },\n                };\n                this.targets.forEach(function (t) {\n                  r.after.nodes.push(t.getModel());\n                }),\n                  n.pushStack(\"update\", Object(i.clone)(r));\n              }\n              n.emit(\"dragnodeend\", { items: this.targets, targetItem: null }),\n                (this.point = {}),\n                (this.origin = null),\n                (this.originPoint = {}),\n                (this.targets.length = 0),\n                (this.targetCombo = null);\n            }\n          },\n          onDropCombo: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              this.updatePositions(t);\n              var n = this.graph;\n              if (\n                (this.comboActiveState &&\n                  n.setItemState(e, this.comboActiveState, !1),\n                (this.targetCombo = e),\n                this.onlyChangeComboSize)\n              )\n                n.updateCombos();\n              else {\n                var r = e.getModel();\n                this.targets.map(function (t) {\n                  t.getModel().comboId !== r.id && n.updateComboTree(t, r.id);\n                }),\n                  n.updateCombo(e);\n              }\n              n.emit(\"dragnodeend\", {\n                items: this.targets,\n                targetItem: this.targetCombo,\n              });\n            }\n          },\n          onDropCanvas: function (t) {\n            var e = this.graph;\n            this.targets &&\n              0 !== this.targets.length &&\n              (this.updatePositions(t),\n              this.onlyChangeComboSize\n                ? e.updateCombos()\n                : this.targets.map(function (t) {\n                    t.getModel().comboId && e.updateComboTree(t);\n                  }));\n          },\n          onDropNode: function (t) {\n            if (this.targets && 0 !== this.targets.length) {\n              var e = t.item;\n              this.updatePositions(t);\n              var n = this.graph,\n                r = e.getModel().comboId;\n              if (r) {\n                var i = n.findById(r);\n                this.comboActiveState &&\n                  n.setItemState(i, this.comboActiveState, !1),\n                  this.targets.map(function (t) {\n                    var e = t.getModel();\n                    r !== e.comboId && n.updateComboTree(t, r);\n                  }),\n                  n.updateCombo(i);\n              } else\n                this.targets.map(function (t) {\n                  t.getModel().comboId && n.updateComboTree(t);\n                });\n              n.emit(\"dragnodeend\", { items: this.targets, targetItem: e });\n            }\n          },\n          onDragEnter: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              var n = this.graph;\n              this.comboActiveState &&\n                n.setItemState(e, this.comboActiveState, !0);\n            }\n          },\n          onDragLeave: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              var n = this.graph;\n              this.comboActiveState &&\n                n.setItemState(e, this.comboActiveState, !1);\n            }\n          },\n          updatePositions: function (t) {\n            var e = this;\n            this.targets &&\n              0 !== this.targets.length &&\n              this.get(\"enableDelegate\") &&\n              this.targets.map(function (n) {\n                return e.update(n, t);\n              });\n          },\n          update: function (t, e) {\n            var n = this.origin,\n              r = t.get(\"model\"),\n              i = t.get(\"id\");\n            this.point[i] || (this.point[i] = { x: r.x || 0, y: r.y || 0 });\n            var o = {\n              x: e.x - n.x + this.point[i].x,\n              y: e.y - n.y + this.point[i].y,\n            };\n            this.get(\"updateEdge\")\n              ? this.graph.updateItem(t, o, !1)\n              : t.updatePosition(o);\n          },\n          updateDelegate: function (t) {\n            this.graph;\n            if (this.delegateRect) {\n              var e = t.x - this.origin.x + this.originPoint.minX,\n                n = t.y - this.origin.y + this.originPoint.minY;\n              this.delegateRect.attr({ x: e, y: n });\n            } else {\n              var o = this.graph.get(\"group\"),\n                a = Object(i.deepMix)(\n                  {},\n                  l.a.delegateStyle,\n                  this.delegateStyle,\n                ),\n                s = this.calculationGroupPosition(t),\n                c = s.x,\n                u = s.y,\n                h = s.width,\n                f = s.height,\n                d = s.minX,\n                p = s.minY;\n              (this.originPoint = {\n                x: c,\n                y: u,\n                width: h,\n                height: f,\n                minX: d,\n                minY: p,\n              }),\n                (this.delegateRect = o.addShape(\"rect\", {\n                  attrs: Object(r.a)({ width: h, height: f, x: c, y: u }, a),\n                  name: \"rect-delegate-shape\",\n                }));\n            }\n          },\n          calculationGroupPosition: function (t) {\n            var e = this.graph.findAllByState(\"node\", this.selectedState);\n            0 === e.length && e.push(t.item);\n            for (\n              var n = 1 / 0, r = -1 / 0, i = 1 / 0, o = -1 / 0, a = 0;\n              a < e.length;\n              a++\n            ) {\n              var s = e[a].getBBox(),\n                c = s.minX,\n                u = s.minY,\n                h = s.maxX,\n                l = s.maxY;\n              c < n && (n = c),\n                u < i && (i = u),\n                h > r && (r = h),\n                l > o && (o = l);\n            }\n            return {\n              x: Math.floor(n),\n              y: Math.floor(i),\n              width: Math.ceil(r) - Math.floor(n),\n              height: Math.ceil(o) - Math.floor(i),\n              minX: n,\n              minY: i,\n            };\n          },\n        },\n        d = {\n          getDefaultCfg: function () {\n            return { multiple: !0, selectedState: \"selected\" };\n          },\n          getEvents: function () {\n            return {\n              \"node:tap\": \"onClick\",\n              \"combo:tap\": \"onClick\",\n              \"canvas:tap\": \"onCanvasClick\",\n            };\n          },\n          onClick: function (t) {\n            var e = this,\n              n = t.item;\n            if (n && !n.destroyed) {\n              var r = n.getType(),\n                o = e.graph,\n                a = e.multiple,\n                s = e.shouldUpdate;\n              if (e.shouldBegin.call(e, t)) {\n                if (!a) {\n                  var c = o.findAllByState(r, e.selectedState);\n                  Object(i.each)(c, function (t) {\n                    t !== n && o.setItemState(t, e.selectedState, !1);\n                  });\n                }\n                if (n.hasState(e.selectedState)) {\n                  s.call(e, t) && o.setItemState(n, e.selectedState, !1);\n                  var u = o.findAllByState(\"node\", e.selectedState),\n                    h = o.findAllByState(\"combo\", e.selectedState);\n                  o.emit(\"nodeselectchange\", {\n                    target: n,\n                    selectedItems: { nodes: u, combos: h },\n                    select: !1,\n                  });\n                } else {\n                  s.call(e, t) && o.setItemState(n, e.selectedState, !0);\n                  (u = o.findAllByState(\"node\", e.selectedState)),\n                    (h = o.findAllByState(\"combo\", e.selectedState));\n                  o.emit(\"nodeselectchange\", {\n                    target: n,\n                    selectedItems: { nodes: u, combos: h },\n                    select: !0,\n                  });\n                }\n              }\n            }\n          },\n          onCanvasClick: function () {\n            var t = this,\n              e = this.graph,\n              n = e.findAllByState(\"node\", this.selectedState);\n            Object(i.each)(n, function (n) {\n              e.setItemState(n, t.selectedState, !1);\n            });\n            var r = e.findAllByState(\"combo\", this.selectedState);\n            Object(i.each)(r, function (n) {\n              e.setItemState(n, t.selectedState, !1);\n            }),\n              e.emit(\"nodeselectchange\", {\n                selectedItems: { nodes: [], edges: [], combos: [] },\n                select: !1,\n              });\n          },\n        },\n        p = {\n          firstScale: null,\n          getDefaultCfg: function () {\n            return {\n              originScale: 1,\n              sensitivity: 2,\n              minZoom: void 0,\n              maxZoom: void 0,\n              enableOptimize: !1,\n              optimizeZoom: 0.1,\n              fixSelectedItems: {\n                fixAll: !1,\n                fixLineWidth: !1,\n                fixLabel: !1,\n                fixState: \"selected\",\n              },\n            };\n          },\n          getEvents: function () {\n            var t = this.fixSelectedItems;\n            return (\n              t.fixState || (t.fixState = \"selected\"),\n              t.fixAll && ((t.fixLineWidth = !0), (t.fixLabel = !0)),\n              { pinchstart: \"onPinch\", pinchmove: \"onPinch\" }\n            );\n          },\n          onPinch: function (t) {\n            t.preventDefault && t.preventDefault(),\n              t.originalEvent.preventDefault &&\n                t.originalEvent.preventDefault();\n            var e = t.originalEvent.pointers;\n            if (!(e.length < 2)) {\n              \"pinchstart\" === t.type &&\n                (this.firstScale = this.graph.getZoom());\n              var n =\n                  t.originalEvent.scale || t.originalEvent.srcEvent.extra.scale,\n                r = this.firstScale * n;\n              this.currentScale = r;\n              var i = this.get(\"minZoom\") || this.graph.get(\"minZoom\");\n              if (\n                !(\n                  r > (this.get(\"maxZoom\") || this.graph.get(\"maxZoom\")) ||\n                  r < i\n                )\n              ) {\n                var o = this.graph.get(\"canvas\"),\n                  a = e[0].clientX,\n                  s = e[0].clientY,\n                  c = e[1].clientX,\n                  u = e[1].clientY,\n                  h = o.getPointByClient((a + c) / 2, (s + u) / 2);\n                this.graph.zoomTo(r, { x: h.x, y: h.y });\n              }\n            }\n          },\n        },\n        g = [\"tap\", \"dbltap\"],\n        v = {\n          getDefaultCfg: function () {\n            return { trigger: \"tap\", onChange: function () {} };\n          },\n          getEvents: function () {\n            var t, e;\n            return (\n              g.includes(this.trigger)\n                ? (e = this.trigger)\n                : ((e = \"tap\"),\n                  console.warn(\n                    \"Behavior collapse-expand 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n                  )),\n              ((t = {})[\"node:\" + e] = \"onNodeTap\"),\n              (t.touchstart = \"onNodeTap\"),\n              t\n            );\n          },\n          onNodeTap: function (t) {\n            var e = t.item,\n              n = this.graph.findDataById(e.get(\"id\"));\n            if (n) {\n              var r = n.children;\n              if (r && 0 !== r.length) {\n                var i = !n.collapsed;\n                if (\n                  this.shouldBegin(t, i) &&\n                  ((n.collapsed = i),\n                  (e.getModel().collapsed = i),\n                  this.graph.emit(\"itemcollapsed\", {\n                    item: t.item,\n                    collapsed: i,\n                  }),\n                  this.shouldUpdate(t, i))\n                ) {\n                  try {\n                    this.onChange(e, i);\n                  } catch (t) {\n                    console.warn(t);\n                  }\n                  this.graph.layout();\n                }\n              }\n            }\n          },\n        },\n        y = a.a.calculationItemsBBox,\n        m = function (t, e) {\n          if (!1 !== e(t) && t) {\n            var n = t.get(\"combos\");\n            if (0 === n.length) return !1;\n            Object(i.each)(n, function (t) {\n              m(t, e);\n            });\n          }\n        },\n        b = [\"click\", \"dblclick\"],\n        x = [\"tap\", \"drag\"],\n        w = [\"shift\", \"ctrl\", \"control\", \"alt\", \"meta\", void 0],\n        S = {\n          bind: function (t) {\n            \"drag-canvas\" === this.type && t.get(\"canvas\").set(\"draggable\", !0);\n            var e = this.events;\n            (this.graph = t),\n              Object(i.each)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            \"drag-canvas\" === this.type && t.get(\"canvas\").set(\"draggable\", !1),\n              (this.graph = null),\n              Object(i.each)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n        },\n        O = {\n          \"drag-canvas\": h,\n          \"zoom-canvas\": p,\n          \"drag-node\": f,\n          \"activate-relations\": {\n            getDefaultCfg: function () {\n              return {\n                activeState: \"active\",\n                inactiveState: \"inactive\",\n                resetSelected: !1,\n                shouldUpdate: function () {\n                  return !0;\n                },\n              };\n            },\n            getEvents: function () {\n              return {\n                \"node:tap\": \"setAllItemStates\",\n                \"canvas:tap\": \"clearAllItemStates\",\n              };\n            },\n            setAllItemStates: function (t) {\n              var e = t.item,\n                n = this.graph;\n              if (\n                ((this.item = e),\n                this.shouldUpdate(t.item, { event: t, action: \"activate\" }))\n              ) {\n                for (\n                  var r = this.activeState,\n                    i = this.inactiveState,\n                    o = n.getNodes(),\n                    a = n.getEdges(),\n                    s = o.length,\n                    c = a.length,\n                    u = 0;\n                  u < s;\n                  u++\n                ) {\n                  var h = o[u],\n                    l = h.hasState(\"selected\");\n                  this.resetSelected && l && n.setItemState(h, \"selected\", !1),\n                    n.setItemState(h, r, !1),\n                    i && n.setItemState(h, i, !0);\n                }\n                for (u = 0; u < c; u++) {\n                  var f = a[u];\n                  n.setItemState(f, r, !1), i && n.setItemState(f, i, !0);\n                }\n                i && n.setItemState(e, i, !1), n.setItemState(e, r, !0);\n                var d = e.getEdges(),\n                  p = d.length;\n                for (u = 0; u < p; u++) {\n                  var g = void 0;\n                  (g =\n                    (f = d[u]).getSource() === e\n                      ? f.getTarget()\n                      : f.getSource()),\n                    i && n.setItemState(g, i, !1),\n                    n.setItemState(g, r, !0),\n                    n.setItemState(f, i, !1),\n                    n.setItemState(f, r, !0),\n                    f.toFront();\n                }\n                n.emit(\"afteractivaterelations\", {\n                  item: t.item,\n                  action: \"activate\",\n                });\n              }\n            },\n            clearActiveState: function (t) {\n              var e = this.get(\"graph\");\n              if (\n                this.shouldUpdate(t.item, { event: t, action: \"deactivate\" })\n              ) {\n                var n = this.activeState,\n                  r = this.inactiveState,\n                  i = e.get(\"autoPaint\");\n                e.setAutoPaint(!1);\n                for (\n                  var o = e.getNodes(),\n                    a = e.getEdges(),\n                    s = o.length,\n                    c = a.length,\n                    u = 0;\n                  u < s;\n                  u++\n                ) {\n                  var h = o[u];\n                  e.clearItemStates(h, [n, r]);\n                }\n                for (u = 0; u < c; u++) {\n                  var l = a[u];\n                  e.clearItemStates(l, [n, r, \"deactivate\"]);\n                }\n                e.paint(),\n                  e.setAutoPaint(i),\n                  e.emit(\"afteractivaterelations\", {\n                    item: t.item || this.get(\"item\"),\n                    action: \"deactivate\",\n                  });\n              }\n            },\n            clearAllItemStates: function (t) {\n              var e = this.graph;\n              if (\n                this.shouldUpdate(t.item, { event: t, action: \"deactivate\" })\n              ) {\n                for (\n                  var n = this.activeState,\n                    r = this.inactiveState,\n                    i = e.getNodes(),\n                    o = e.getEdges(),\n                    a = i.length,\n                    s = o.length,\n                    c = 0;\n                  c < a;\n                  c++\n                ) {\n                  var u = i[c];\n                  e.clearItemStates(u, [n, r]);\n                }\n                for (c = 0; c < s; c++) {\n                  var h = o[c];\n                  e.clearItemStates(h, [n, r, \"deactivate\"]);\n                }\n                e.emit(\"afteractivaterelations\", {\n                  item: t.item || this.get(\"item\"),\n                  action: \"deactivate\",\n                });\n              }\n            },\n          },\n          \"click-select\": d,\n          \"collapse-expand\": v,\n          \"drag-combo\": {\n            getDefaultCfg: function () {\n              return {\n                enableDelegate: !1,\n                delegateStyle: {},\n                onlyChangeComboSize: !1,\n                activeState: \"\",\n                selectedState: \"selected\",\n              };\n            },\n            getEvents: function () {\n              return {\n                \"combo:dragstart\": \"onDragStart\",\n                \"combo:drag\": \"onDrag\",\n                \"combo:dragend\": \"onDragEnd\",\n                \"combo:drop\": \"onDrop\",\n                \"node:drop\": \"onNodeDrop\",\n                \"combo:dragenter\": \"onDragEnter\",\n                \"combo:dragleave\": \"onDragLeave\",\n              };\n            },\n            validationCombo: function (t) {\n              var e = t.item;\n              return (\n                !(!e || e.destroyed) &&\n                !!this.shouldUpdate(this, t) &&\n                \"combo\" === e.getType()\n              );\n            },\n            onDragStart: function (t) {\n              var e = this,\n                n = this.graph,\n                r = t.item;\n              if (this.validationCombo(t)) {\n                this.targets = [];\n                var i = n.findAllByState(\"combo\", this.selectedState),\n                  o = r.get(\"id\");\n                0 ===\n                i.filter(function (t) {\n                  var e = t.get(\"id\");\n                  return o === e;\n                }).length\n                  ? this.targets.push(r)\n                  : (this.targets = i),\n                  this.activeState &&\n                    this.targets.map(function (t) {\n                      var r = t.getModel();\n                      if (r.parentId) {\n                        var i = n.findById(r.parentId);\n                        i && n.setItemState(i, e.activeState, !0);\n                      }\n                    }),\n                  (this.point = {}),\n                  (this.originPoint = {}),\n                  (this.origin = { x: t.x, y: t.y }),\n                  (this.currentItemChildCombos = []),\n                  m(r, function (t) {\n                    if (t.destroyed) return !1;\n                    var n = t.getModel();\n                    return e.currentItemChildCombos.push(n.id), !0;\n                  });\n              }\n            },\n            onDrag: function (t) {\n              var e = this;\n              if (this.origin && this.validationCombo(t))\n                if (this.enableDelegate) this.updateDelegate(t);\n                else {\n                  if (this.activeState) {\n                    var n = this.graph,\n                      r = t.item,\n                      o = r.getModel(),\n                      a = n.getCombos(),\n                      s = r.getBBox(),\n                      c = s.centerX,\n                      u = s.centerY,\n                      h = s.width;\n                    a.filter(function (t) {\n                      var n = t.getModel();\n                      return (\n                        o.parentId,\n                        n.id !== o.id &&\n                          !e.currentItemChildCombos.includes(n.id)\n                      );\n                    }).map(function (t) {\n                      var r = t.getBBox(),\n                        i = r.centerX,\n                        o = r.centerY,\n                        a = r.width,\n                        s = c - i,\n                        l = u - o,\n                        f = 2 * Math.sqrt(s * s + l * l);\n                      h + a - f > 0.8 * h\n                        ? n.setItemState(t, e.activeState, !0)\n                        : n.setItemState(t, e.activeState, !1);\n                    });\n                  }\n                  Object(i.each)(this.targets, function (n) {\n                    e.updateCombo(n, t);\n                  });\n                }\n            },\n            updatePositions: function (t) {\n              var e = this;\n              this.enableDelegate &&\n                Object(i.each)(this.targets, function (n) {\n                  e.updateCombo(n, t);\n                });\n            },\n            onDrop: function (t) {\n              var e = this,\n                n = t.item;\n              if (n && this.targets && !n.destroyed) {\n                this.updatePositions(t);\n                var r = this.graph,\n                  i = n.getModel();\n                this.targets.map(function (t) {\n                  t.getModel().parentId !== i.id\n                    ? (e.activeState && r.setItemState(n, e.activeState, !1),\n                      e.onlyChangeComboSize\n                        ? r.updateCombo(t)\n                        : r.updateComboTree(t, i.id))\n                    : r.updateCombo(n);\n                }),\n                  this.end(n, t),\n                  (this.endComparison = !0);\n              }\n            },\n            onNodeDrop: function (t) {\n              var e = this;\n              if (this.targets && 0 !== this.targets.length) {\n                this.updatePositions(t);\n                var n,\n                  r = this.graph,\n                  i = t.item.getModel().comboId;\n                if (i) {\n                  if (this.activeState) {\n                    var o = r.findById(i);\n                    r.setItemState(o, this.activeState, !1);\n                  }\n                  this.targets.map(function (t) {\n                    e.onlyChangeComboSize\n                      ? r.updateCombo(t)\n                      : i !== t.getID() &&\n                        ((n = r.findById(i)),\n                        i !== t.getModel().parentId && r.updateComboTree(t, i));\n                  });\n                } else\n                  this.targets.map(function (t) {\n                    e.onlyChangeComboSize\n                      ? r.updateCombo(t)\n                      : t.getModel().comboId && r.updateComboTree(t);\n                  });\n                (this.endComparison = !0), this.end(n, t);\n              }\n            },\n            onDragEnter: function (t) {\n              if (this.origin && this.validationCombo(t)) {\n                var e = t.item,\n                  n = this.graph;\n                this.activeState && n.setItemState(e, this.activeState, !0);\n              }\n            },\n            onDragLeave: function (t) {\n              if (this.origin && this.validationCombo(t)) {\n                var e = t.item,\n                  n = this.graph;\n                this.activeState && n.setItemState(e, this.activeState, !1);\n              }\n            },\n            onDragEnd: function (t) {\n              if (this.targets && 0 !== this.targets.length) {\n                var e = t.item;\n                this.updatePositions(t);\n                var n = this.getParentCombo(e.getModel().parentId),\n                  r = this.graph;\n                n &&\n                  this.activeState &&\n                  r.setItemState(n, this.activeState, !1),\n                  this.end(void 0, t);\n              }\n            },\n            end: function (t, e) {\n              var n = this;\n              if (this.origin) {\n                var r = this.graph;\n                if (this.delegateShape)\n                  r.get(\"delegateGroup\").clear(), (this.delegateShape = null);\n                t &&\n                  this.activeState &&\n                  r.setItemState(t, this.activeState, !1),\n                  t ||\n                    this.targets.map(function (t) {\n                      n.onlyChangeComboSize\n                        ? r.updateCombo(t)\n                        : r.updateComboTree(t);\n                    }),\n                  (this.point = []),\n                  (this.origin = null),\n                  (this.originPoint = null),\n                  (this.targets.length = 0);\n              }\n            },\n            traverse: function (t, e) {\n              var n = this;\n              if (!1 !== e(t) && t) {\n                var r = t.get(\"combos\");\n                Object(i.each)(r, function (t) {\n                  n.traverse(t, e);\n                });\n                var o = t.get(\"nodes\");\n                Object(i.each)(o, function (t) {\n                  n.traverse(t, e);\n                });\n              }\n            },\n            updateCombo: function (t, e) {\n              var n = this;\n              this.traverse(t, function (t) {\n                return !t.destroyed && (n.updateSignleItem(t, e), !0);\n              });\n            },\n            updateSignleItem: function (t, e) {\n              var n = this.origin,\n                r = this.graph,\n                i = t.getModel(),\n                o = t.get(\"id\");\n              this.point[o] || (this.point[o] = { x: i.x, y: i.y });\n              var a = e.x - n.x + this.point[o].x,\n                s = e.y - n.y + this.point[o].y;\n              r.updateItem(t, { x: a, y: s });\n            },\n            getParentCombo: function (t) {\n              var e = this.graph;\n              if (t) {\n                var n = e.findById(t);\n                if (n) return n;\n              }\n            },\n            updateDelegate: function (t) {\n              var e = this.graph;\n              if (this.delegateShape) {\n                var n = t.x - this.origin.x + this.originPoint.minX,\n                  i = t.y - this.origin.y + this.originPoint.minY;\n                this.delegateShape.attr({ x: n, y: i });\n              } else {\n                var o = e.get(\"delegateGroup\"),\n                  a = null,\n                  s = (a =\n                    this.targets.length > 1\n                      ? y(this.targets)\n                      : this.targets[0].getBBox()).x,\n                  c = a.y,\n                  u = a.width,\n                  h = a.height,\n                  f = a.minX,\n                  d = a.minY;\n                this.originPoint = {\n                  x: s,\n                  y: c,\n                  width: u,\n                  height: h,\n                  minX: f,\n                  minY: d,\n                };\n                var p = Object(r.a)(\n                  Object(r.a)({}, l.a.delegateStyle),\n                  this.delegateStyle,\n                );\n                this.delegateShape = o.addShape(\"rect\", {\n                  attrs: Object(r.a)(\n                    { width: a.width, height: a.height, x: a.x, y: a.y },\n                    p,\n                  ),\n                  name: \"combo-delegate-shape\",\n                });\n              }\n            },\n          },\n          \"collapse-expand-combo\": {\n            getDefaultCfg: function () {\n              return { trigger: \"dblclick\", relayout: !0 };\n            },\n            getEvents: function () {\n              var t, e;\n              return (\n                b.includes(this.trigger)\n                  ? (e = this.trigger)\n                  : ((e = \"dblclick\"),\n                    console.warn(\n                      \"Behavior collapse-expand-group 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n                    )),\n                ((t = {})[\"combo:\" + e] = \"onComboClick\"),\n                t\n              );\n            },\n            onComboClick: function (t) {\n              var e = t.item,\n                n = this.graph,\n                r = this.relayout;\n              if (e && !e.destroyed && \"combo\" === e.getType()) {\n                var i = e.getModel().id;\n                i &&\n                  (n.collapseExpandCombo(i),\n                  r && n.get(\"layout\") ? n.layout() : n.refreshPositions());\n              }\n            },\n          },\n          \"create-edge\": {\n            getDefaultCfg: function () {\n              return { trigger: \"tap\", key: void 0, edgeConfig: {} };\n            },\n            getEvents: function () {\n              var t;\n              return (\n                x.indexOf(this.trigger.toLowerCase()) > -1 ||\n                  ((this.trigger = \"tap\"),\n                  console.warn(\n                    \"Behavior create-edge 的 trigger 参数不合法，请输入 'click'，'drag'\",\n                  )),\n                this.key &&\n                  -1 === w.indexOf(this.key.toLowerCase()) &&\n                  ((this.trigger = void 0),\n                  console.warn(\n                    \"Behavior create-edge 的 key 参数不合法，请输入 'shift'，'ctrl'，'alt'，'control'，或 undefined\",\n                  )),\n                \"drag\" === this.trigger\n                  ? (t = {\n                      \"node:dragstart\": \"onClick\",\n                      \"combo:dragstart\": \"onClick\",\n                      drag: \"updateEndPoint\",\n                      \"node:drop\": \"onClick\",\n                      \"combo:drop\": \"onClick\",\n                      dragend: \"onDragEnd\",\n                    })\n                  : \"click\" === this.trigger &&\n                    (t = {\n                      \"node:tap\": \"onClick\",\n                      mousemove: \"updateEndPoint\",\n                      \"edge:tap\": \"cancelCreating\",\n                      \"canvas:tap\": \"cancelCreating\",\n                      \"combo:tap\": \"onClick\",\n                    }),\n                this.key && ((t.keydown = \"onKeyDown\"), (t.keyup = \"onKeyUp\")),\n                t\n              );\n            },\n            onDragEnd: function (t) {\n              if (!this.key || this.keydown) {\n                var e = t.item;\n                (e && e.getID() !== this.source && \"node\" === e.getType()) ||\n                  this.cancelCreating({ item: this.edge, x: t.x, y: t.y });\n              }\n            },\n            onClick: function (t) {\n              if (!this.key || this.keydown) {\n                var e = t.item,\n                  n = this.graph,\n                  i = e.getModel();\n                if (this.addingEdge && this.edge) {\n                  if (!this.shouldEnd.call(this, t)) return;\n                  var o = { target: i.id };\n                  this.source === i.id && (o.type = \"loop\"),\n                    n.emit(\"beforecreateedge\", {}),\n                    n.updateItem(this.edge, o),\n                    n.emit(\"aftercreateedge\", { edge: this.edge }),\n                    this.edge.getKeyShape().set(\"capture\", !0),\n                    (this.edge = null),\n                    (this.addingEdge = !1);\n                } else {\n                  if (!this.shouldBegin.call(this, t)) return;\n                  (this.edge = n.addItem(\n                    \"edge\",\n                    Object(r.a)(\n                      { source: i.id, target: i.id },\n                      this.edgeConfig,\n                    ),\n                    !1,\n                  )),\n                    (this.source = i.id),\n                    (this.addingEdge = !0),\n                    this.edge.getKeyShape().set(\"capture\", !1);\n                }\n              }\n            },\n            updateEndPoint: function (t) {\n              if (!this.key || this.keydown) {\n                var e = { x: t.x, y: t.y };\n                this.graph.findById(this.source)\n                  ? this.addingEdge &&\n                    this.edge &&\n                    this.graph.updateItem(this.edge, { target: e }, !1)\n                  : (this.addingEdge = !1);\n              }\n            },\n            cancelCreating: function (t) {\n              if (!this.key || this.keydown) {\n                var e = this.graph,\n                  n = t.item;\n                if (\n                  this.addingEdge &&\n                  t.target &&\n                  t.target.isCanvas &&\n                  t.target.isCanvas()\n                )\n                  return (\n                    e.removeItem(this.edge, !1),\n                    (this.edge = null),\n                    void (this.addingEdge = !1)\n                  );\n                if (this.addingEdge && this.edge === n) {\n                  var r = !0;\n                  if (!e.get(\"groupByTypes\"))\n                    for (\n                      var i = t.x,\n                        o = t.y,\n                        a = e.getNodes(),\n                        s = a.length,\n                        c = 0;\n                      c < s;\n                      c++\n                    ) {\n                      var u = a[c],\n                        h = u.getModel(),\n                        l = u.getBBox();\n                      if (\n                        i <= l.maxX &&\n                        i >= l.minX &&\n                        o <= l.maxY &&\n                        o >= l.minY\n                      ) {\n                        if (\n                          !this.shouldEnd.call(this, {\n                            x: t.x,\n                            y: t.y,\n                            canvasX: t.canvasX,\n                            canvasY: t.canvasY,\n                            clientX: t.clientX,\n                            clientY: t.clientY,\n                            item: u,\n                          })\n                        )\n                          return;\n                        e.emit(\"beforecreateedge\", {}),\n                          e.updateItem(this.edge, { target: h.id }),\n                          e.emit(\"aftercreateedge\", { edge: this.edge }),\n                          (r = !1);\n                        break;\n                      }\n                    }\n                  r && e.removeItem(this.edge, !1),\n                    (this.edge = null),\n                    (this.addingEdge = !1);\n                }\n              }\n            },\n            onKeyDown: function (t) {\n              var e = t.key;\n              e &&\n                (e.toLowerCase() === this.key.toLowerCase()\n                  ? (this.keydown = !0)\n                  : (this.keydown = !1));\n            },\n            onKeyUp: function () {\n              this.addingEdge &&\n                this.edge &&\n                (this.graph.removeItem(this.edge, !1),\n                (this.addingEdge = !1),\n                (this.edge = null)),\n                (this.keydown = !1);\n            },\n          },\n        };\n      Object(i.each)(O, function (t, e) {\n        Object(o.i)(e, Object(r.a)(Object(r.a)({}, t), S));\n      });\n    },\n    4: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return r;\n      }),\n        n.d(e, \"b\", function () {\n          return _;\n        }),\n        n.d(e, \"c\", function () {\n          return R;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"create\", function () {\n          return o;\n        }),\n        n.d(r, \"fromMat4\", function () {\n          return a;\n        }),\n        n.d(r, \"clone\", function () {\n          return s;\n        }),\n        n.d(r, \"copy\", function () {\n          return c;\n        }),\n        n.d(r, \"fromValues\", function () {\n          return u;\n        }),\n        n.d(r, \"set\", function () {\n          return h;\n        }),\n        n.d(r, \"identity\", function () {\n          return l;\n        }),\n        n.d(r, \"transpose\", function () {\n          return f;\n        }),\n        n.d(r, \"invert\", function () {\n          return d;\n        }),\n        n.d(r, \"adjoint\", function () {\n          return p;\n        }),\n        n.d(r, \"determinant\", function () {\n          return g;\n        }),\n        n.d(r, \"multiply\", function () {\n          return v;\n        }),\n        n.d(r, \"translate\", function () {\n          return y;\n        }),\n        n.d(r, \"rotate\", function () {\n          return m;\n        }),\n        n.d(r, \"scale\", function () {\n          return b;\n        }),\n        n.d(r, \"fromTranslation\", function () {\n          return x;\n        }),\n        n.d(r, \"fromRotation\", function () {\n          return w;\n        }),\n        n.d(r, \"fromScaling\", function () {\n          return S;\n        }),\n        n.d(r, \"fromMat2d\", function () {\n          return O;\n        }),\n        n.d(r, \"fromQuat\", function () {\n          return M;\n        }),\n        n.d(r, \"normalFromMat4\", function () {\n          return k;\n        }),\n        n.d(r, \"projection\", function () {\n          return C;\n        }),\n        n.d(r, \"str\", function () {\n          return E;\n        }),\n        n.d(r, \"frob\", function () {\n          return j;\n        }),\n        n.d(r, \"add\", function () {\n          return P;\n        }),\n        n.d(r, \"subtract\", function () {\n          return A;\n        }),\n        n.d(r, \"multiplyScalar\", function () {\n          return I;\n        }),\n        n.d(r, \"multiplyScalarAndAdd\", function () {\n          return T;\n        }),\n        n.d(r, \"exactEquals\", function () {\n          return N;\n        }),\n        n.d(r, \"equals\", function () {\n          return B;\n        }),\n        n.d(r, \"mul\", function () {\n          return L;\n        }),\n        n.d(r, \"sub\", function () {\n          return D;\n        });\n      var i = n(5);\n      function o() {\n        var t = new i.a(9);\n        return (\n          i.a != Float32Array &&\n            ((t[1] = 0),\n            (t[2] = 0),\n            (t[3] = 0),\n            (t[5] = 0),\n            (t[6] = 0),\n            (t[7] = 0)),\n          (t[0] = 1),\n          (t[4] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function a(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[4]),\n          (t[4] = e[5]),\n          (t[5] = e[6]),\n          (t[6] = e[8]),\n          (t[7] = e[9]),\n          (t[8] = e[10]),\n          t\n        );\n      }\n      function s(t) {\n        var e = new i.a(9);\n        return (\n          (e[0] = t[0]),\n          (e[1] = t[1]),\n          (e[2] = t[2]),\n          (e[3] = t[3]),\n          (e[4] = t[4]),\n          (e[5] = t[5]),\n          (e[6] = t[6]),\n          (e[7] = t[7]),\n          (e[8] = t[8]),\n          e\n        );\n      }\n      function c(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[3]),\n          (t[4] = e[4]),\n          (t[5] = e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function u(t, e, n, r, o, a, s, c, u) {\n        var h = new i.a(9);\n        return (\n          (h[0] = t),\n          (h[1] = e),\n          (h[2] = n),\n          (h[3] = r),\n          (h[4] = o),\n          (h[5] = a),\n          (h[6] = s),\n          (h[7] = c),\n          (h[8] = u),\n          h\n        );\n      }\n      function h(t, e, n, r, i, o, a, s, c, u) {\n        return (\n          (t[0] = e),\n          (t[1] = n),\n          (t[2] = r),\n          (t[3] = i),\n          (t[4] = o),\n          (t[5] = a),\n          (t[6] = s),\n          (t[7] = c),\n          (t[8] = u),\n          t\n        );\n      }\n      function l(t) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function f(t, e) {\n        if (t === e) {\n          var n = e[1],\n            r = e[2],\n            i = e[5];\n          (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = n),\n            (t[5] = e[7]),\n            (t[6] = r),\n            (t[7] = i);\n        } else\n          (t[0] = e[0]),\n            (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = e[1]),\n            (t[4] = e[4]),\n            (t[5] = e[7]),\n            (t[6] = e[2]),\n            (t[7] = e[5]),\n            (t[8] = e[8]);\n        return t;\n      }\n      function d(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8],\n          l = h * a - s * u,\n          f = -h * o + s * c,\n          d = u * o - a * c,\n          p = n * l + r * f + i * d;\n        return p\n          ? ((p = 1 / p),\n            (t[0] = l * p),\n            (t[1] = (-h * r + i * u) * p),\n            (t[2] = (s * r - i * a) * p),\n            (t[3] = f * p),\n            (t[4] = (h * n - i * c) * p),\n            (t[5] = (-s * n + i * o) * p),\n            (t[6] = d * p),\n            (t[7] = (-u * n + r * c) * p),\n            (t[8] = (a * n - r * o) * p),\n            t)\n          : null;\n      }\n      function p(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8];\n        return (\n          (t[0] = a * h - s * u),\n          (t[1] = i * u - r * h),\n          (t[2] = r * s - i * a),\n          (t[3] = s * c - o * h),\n          (t[4] = n * h - i * c),\n          (t[5] = i * o - n * s),\n          (t[6] = o * u - a * c),\n          (t[7] = r * c - n * u),\n          (t[8] = n * a - r * o),\n          t\n        );\n      }\n      function g(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2],\n          i = t[3],\n          o = t[4],\n          a = t[5],\n          s = t[6],\n          c = t[7],\n          u = t[8];\n        return e * (u * o - a * c) + n * (-u * i + a * s) + r * (c * i - o * s);\n      }\n      function v(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = n[0],\n          d = n[1],\n          p = n[2],\n          g = n[3],\n          v = n[4],\n          y = n[5],\n          m = n[6],\n          b = n[7],\n          x = n[8];\n        return (\n          (t[0] = f * r + d * a + p * u),\n          (t[1] = f * i + d * s + p * h),\n          (t[2] = f * o + d * c + p * l),\n          (t[3] = g * r + v * a + y * u),\n          (t[4] = g * i + v * s + y * h),\n          (t[5] = g * o + v * c + y * l),\n          (t[6] = m * r + b * a + x * u),\n          (t[7] = m * i + b * s + x * h),\n          (t[8] = m * o + b * c + x * l),\n          t\n        );\n      }\n      function y(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = n[0],\n          d = n[1];\n        return (\n          (t[0] = r),\n          (t[1] = i),\n          (t[2] = o),\n          (t[3] = a),\n          (t[4] = s),\n          (t[5] = c),\n          (t[6] = f * r + d * a + u),\n          (t[7] = f * i + d * s + h),\n          (t[8] = f * o + d * c + l),\n          t\n        );\n      }\n      function m(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = Math.sin(n),\n          d = Math.cos(n);\n        return (\n          (t[0] = d * r + f * a),\n          (t[1] = d * i + f * s),\n          (t[2] = d * o + f * c),\n          (t[3] = d * a - f * r),\n          (t[4] = d * s - f * i),\n          (t[5] = d * c - f * o),\n          (t[6] = u),\n          (t[7] = h),\n          (t[8] = l),\n          t\n        );\n      }\n      function b(t, e, n) {\n        var r = n[0],\n          i = n[1];\n        return (\n          (t[0] = r * e[0]),\n          (t[1] = r * e[1]),\n          (t[2] = r * e[2]),\n          (t[3] = i * e[3]),\n          (t[4] = i * e[4]),\n          (t[5] = i * e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function x(t, e) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = e[0]),\n          (t[7] = e[1]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function w(t, e) {\n        var n = Math.sin(e),\n          r = Math.cos(e);\n        return (\n          (t[0] = r),\n          (t[1] = n),\n          (t[2] = 0),\n          (t[3] = -n),\n          (t[4] = r),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function S(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = e[1]),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function O(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = 0),\n          (t[3] = e[2]),\n          (t[4] = e[3]),\n          (t[5] = 0),\n          (t[6] = e[4]),\n          (t[7] = e[5]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function M(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = n + n,\n          s = r + r,\n          c = i + i,\n          u = n * a,\n          h = r * a,\n          l = r * s,\n          f = i * a,\n          d = i * s,\n          p = i * c,\n          g = o * a,\n          v = o * s,\n          y = o * c;\n        return (\n          (t[0] = 1 - l - p),\n          (t[3] = h - y),\n          (t[6] = f + v),\n          (t[1] = h + y),\n          (t[4] = 1 - u - p),\n          (t[7] = d - g),\n          (t[2] = f - v),\n          (t[5] = d + g),\n          (t[8] = 1 - u - l),\n          t\n        );\n      }\n      function k(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8],\n          l = e[9],\n          f = e[10],\n          d = e[11],\n          p = e[12],\n          g = e[13],\n          v = e[14],\n          y = e[15],\n          m = n * s - r * a,\n          b = n * c - i * a,\n          x = n * u - o * a,\n          w = r * c - i * s,\n          S = r * u - o * s,\n          O = i * u - o * c,\n          M = h * g - l * p,\n          k = h * v - f * p,\n          C = h * y - d * p,\n          E = l * v - f * g,\n          j = l * y - d * g,\n          P = f * y - d * v,\n          A = m * P - b * j + x * E + w * C - S * k + O * M;\n        return A\n          ? ((A = 1 / A),\n            (t[0] = (s * P - c * j + u * E) * A),\n            (t[1] = (c * C - a * P - u * k) * A),\n            (t[2] = (a * j - s * C + u * M) * A),\n            (t[3] = (i * j - r * P - o * E) * A),\n            (t[4] = (n * P - i * C + o * k) * A),\n            (t[5] = (r * C - n * j - o * M) * A),\n            (t[6] = (g * O - v * S + y * w) * A),\n            (t[7] = (v * x - p * O - y * b) * A),\n            (t[8] = (p * S - g * x + y * m) * A),\n            t)\n          : null;\n      }\n      function C(t, e, n) {\n        return (\n          (t[0] = 2 / e),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = -2 / n),\n          (t[5] = 0),\n          (t[6] = -1),\n          (t[7] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function E(t) {\n        return (\n          \"mat3(\" +\n          t[0] +\n          \", \" +\n          t[1] +\n          \", \" +\n          t[2] +\n          \", \" +\n          t[3] +\n          \", \" +\n          t[4] +\n          \", \" +\n          t[5] +\n          \", \" +\n          t[6] +\n          \", \" +\n          t[7] +\n          \", \" +\n          t[8] +\n          \")\"\n        );\n      }\n      function j(t) {\n        return Math.hypot(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);\n      }\n      function P(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]),\n          (t[1] = e[1] + n[1]),\n          (t[2] = e[2] + n[2]),\n          (t[3] = e[3] + n[3]),\n          (t[4] = e[4] + n[4]),\n          (t[5] = e[5] + n[5]),\n          (t[6] = e[6] + n[6]),\n          (t[7] = e[7] + n[7]),\n          (t[8] = e[8] + n[8]),\n          t\n        );\n      }\n      function A(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]),\n          (t[1] = e[1] - n[1]),\n          (t[2] = e[2] - n[2]),\n          (t[3] = e[3] - n[3]),\n          (t[4] = e[4] - n[4]),\n          (t[5] = e[5] - n[5]),\n          (t[6] = e[6] - n[6]),\n          (t[7] = e[7] - n[7]),\n          (t[8] = e[8] - n[8]),\n          t\n        );\n      }\n      function I(t, e, n) {\n        return (\n          (t[0] = e[0] * n),\n          (t[1] = e[1] * n),\n          (t[2] = e[2] * n),\n          (t[3] = e[3] * n),\n          (t[4] = e[4] * n),\n          (t[5] = e[5] * n),\n          (t[6] = e[6] * n),\n          (t[7] = e[7] * n),\n          (t[8] = e[8] * n),\n          t\n        );\n      }\n      function T(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          (t[3] = e[3] + n[3] * r),\n          (t[4] = e[4] + n[4] * r),\n          (t[5] = e[5] + n[5] * r),\n          (t[6] = e[6] + n[6] * r),\n          (t[7] = e[7] + n[7] * r),\n          (t[8] = e[8] + n[8] * r),\n          t\n        );\n      }\n      function N(t, e) {\n        return (\n          t[0] === e[0] &&\n          t[1] === e[1] &&\n          t[2] === e[2] &&\n          t[3] === e[3] &&\n          t[4] === e[4] &&\n          t[5] === e[5] &&\n          t[6] === e[6] &&\n          t[7] === e[7] &&\n          t[8] === e[8]\n        );\n      }\n      function B(t, e) {\n        var n = t[0],\n          r = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          c = t[5],\n          u = t[6],\n          h = t[7],\n          l = t[8],\n          f = e[0],\n          d = e[1],\n          p = e[2],\n          g = e[3],\n          v = e[4],\n          y = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          Math.abs(n - f) <= i.b * Math.max(1, Math.abs(n), Math.abs(f)) &&\n          Math.abs(r - d) <= i.b * Math.max(1, Math.abs(r), Math.abs(d)) &&\n          Math.abs(o - p) <= i.b * Math.max(1, Math.abs(o), Math.abs(p)) &&\n          Math.abs(a - g) <= i.b * Math.max(1, Math.abs(a), Math.abs(g)) &&\n          Math.abs(s - v) <= i.b * Math.max(1, Math.abs(s), Math.abs(v)) &&\n          Math.abs(c - y) <= i.b * Math.max(1, Math.abs(c), Math.abs(y)) &&\n          Math.abs(u - m) <= i.b * Math.max(1, Math.abs(u), Math.abs(m)) &&\n          Math.abs(h - b) <= i.b * Math.max(1, Math.abs(h), Math.abs(b)) &&\n          Math.abs(l - x) <= i.b * Math.max(1, Math.abs(l), Math.abs(x))\n        );\n      }\n      var L = v,\n        D = A,\n        _ = n(42),\n        R = n(72);\n    },\n    42: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return a;\n        }),\n        n.d(e, \"copy\", function () {\n          return s;\n        }),\n        n.d(e, \"set\", function () {\n          return c;\n        }),\n        n.d(e, \"add\", function () {\n          return u;\n        }),\n        n.d(e, \"subtract\", function () {\n          return h;\n        }),\n        n.d(e, \"multiply\", function () {\n          return l;\n        }),\n        n.d(e, \"divide\", function () {\n          return f;\n        }),\n        n.d(e, \"ceil\", function () {\n          return d;\n        }),\n        n.d(e, \"floor\", function () {\n          return p;\n        }),\n        n.d(e, \"min\", function () {\n          return g;\n        }),\n        n.d(e, \"max\", function () {\n          return v;\n        }),\n        n.d(e, \"round\", function () {\n          return y;\n        }),\n        n.d(e, \"scale\", function () {\n          return m;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return b;\n        }),\n        n.d(e, \"distance\", function () {\n          return x;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return w;\n        }),\n        n.d(e, \"length\", function () {\n          return S;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return O;\n        }),\n        n.d(e, \"negate\", function () {\n          return M;\n        }),\n        n.d(e, \"inverse\", function () {\n          return k;\n        }),\n        n.d(e, \"normalize\", function () {\n          return C;\n        }),\n        n.d(e, \"dot\", function () {\n          return E;\n        }),\n        n.d(e, \"cross\", function () {\n          return j;\n        }),\n        n.d(e, \"lerp\", function () {\n          return P;\n        }),\n        n.d(e, \"random\", function () {\n          return A;\n        }),\n        n.d(e, \"transformMat2\", function () {\n          return I;\n        }),\n        n.d(e, \"transformMat2d\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return N;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return B;\n        }),\n        n.d(e, \"rotate\", function () {\n          return L;\n        }),\n        n.d(e, \"angle\", function () {\n          return D;\n        }),\n        n.d(e, \"zero\", function () {\n          return _;\n        }),\n        n.d(e, \"str\", function () {\n          return R;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return F;\n        }),\n        n.d(e, \"equals\", function () {\n          return Y;\n        }),\n        n.d(e, \"len\", function () {\n          return z;\n        }),\n        n.d(e, \"sub\", function () {\n          return W;\n        }),\n        n.d(e, \"mul\", function () {\n          return q;\n        }),\n        n.d(e, \"div\", function () {\n          return V;\n        }),\n        n.d(e, \"dist\", function () {\n          return G;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return H;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return U;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Z;\n        });\n      var r = n(5);\n      function i() {\n        var t = new r.a(2);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(2);\n        return (e[0] = t[0]), (e[1] = t[1]), e;\n      }\n      function a(t, e) {\n        var n = new r.a(2);\n        return (n[0] = t), (n[1] = e), n;\n      }\n      function s(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), t;\n      }\n      function c(t, e, n) {\n        return (t[0] = e), (t[1] = n), t;\n      }\n      function u(t, e, n) {\n        return (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), t;\n      }\n      function h(t, e, n) {\n        return (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), t;\n      }\n      function l(t, e, n) {\n        return (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), t;\n      }\n      function f(t, e, n) {\n        return (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), t;\n      }\n      function d(t, e) {\n        return (t[0] = Math.ceil(e[0])), (t[1] = Math.ceil(e[1])), t;\n      }\n      function p(t, e) {\n        return (t[0] = Math.floor(e[0])), (t[1] = Math.floor(e[1])), t;\n      }\n      function g(t, e, n) {\n        return (t[0] = Math.min(e[0], n[0])), (t[1] = Math.min(e[1], n[1])), t;\n      }\n      function v(t, e, n) {\n        return (t[0] = Math.max(e[0], n[0])), (t[1] = Math.max(e[1], n[1])), t;\n      }\n      function y(t, e) {\n        return (t[0] = Math.round(e[0])), (t[1] = Math.round(e[1])), t;\n      }\n      function m(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), t;\n      }\n      function b(t, e, n, r) {\n        return (t[0] = e[0] + n[0] * r), (t[1] = e[1] + n[1] * r), t;\n      }\n      function x(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return Math.hypot(n, r);\n      }\n      function w(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return n * n + r * r;\n      }\n      function S(t) {\n        var e = t[0],\n          n = t[1];\n        return Math.hypot(e, n);\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1];\n        return e * e + n * n;\n      }\n      function M(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), t;\n      }\n      function k(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), t;\n      }\n      function C(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = n * n + r * r;\n        return (\n          i > 0 && (i = 1 / Math.sqrt(i)),\n          (t[0] = e[0] * i),\n          (t[1] = e[1] * i),\n          t\n        );\n      }\n      function E(t, e) {\n        return t[0] * e[0] + t[1] * e[1];\n      }\n      function j(t, e, n) {\n        var r = e[0] * n[1] - e[1] * n[0];\n        return (t[0] = t[1] = 0), (t[2] = r), t;\n      }\n      function P(t, e, n, r) {\n        var i = e[0],\n          o = e[1];\n        return (t[0] = i + r * (n[0] - i)), (t[1] = o + r * (n[1] - o)), t;\n      }\n      function A(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI;\n        return (t[0] = Math.cos(n) * e), (t[1] = Math.sin(n) * e), t;\n      }\n      function I(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (t[0] = n[0] * r + n[2] * i), (t[1] = n[1] * r + n[3] * i), t;\n      }\n      function T(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[2] * i + n[4]),\n          (t[1] = n[1] * r + n[3] * i + n[5]),\n          t\n        );\n      }\n      function N(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[3] * i + n[6]),\n          (t[1] = n[1] * r + n[4] * i + n[7]),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[4] * i + n[12]),\n          (t[1] = n[1] * r + n[5] * i + n[13]),\n          t\n        );\n      }\n      function L(t, e, n, r) {\n        var i = e[0] - n[0],\n          o = e[1] - n[1],\n          a = Math.sin(r),\n          s = Math.cos(r);\n        return (t[0] = i * s - o * a + n[0]), (t[1] = i * a + o * s + n[1]), t;\n      }\n      function D(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = e[0],\n          o = e[1],\n          a = Math.sqrt(n * n + r * r) * Math.sqrt(i * i + o * o),\n          s = a && (n * i + r * o) / a;\n        return Math.acos(Math.min(Math.max(s, -1), 1));\n      }\n      function _(t) {\n        return (t[0] = 0), (t[1] = 0), t;\n      }\n      function R(t) {\n        return \"vec2(\" + t[0] + \", \" + t[1] + \")\";\n      }\n      function F(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function Y(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = e[0],\n          a = e[1];\n        return (\n          Math.abs(n - o) <= r.b * Math.max(1, Math.abs(n), Math.abs(o)) &&\n          Math.abs(i - a) <= r.b * Math.max(1, Math.abs(i), Math.abs(a))\n        );\n      }\n      var X,\n        z = S,\n        W = h,\n        q = l,\n        V = f,\n        G = x,\n        H = w,\n        U = O,\n        Z =\n          ((X = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 2),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (X[0] = t[a]),\n                (X[1] = t[a + 1]),\n                i(X, X, o),\n                (t[a] = X[0]),\n                (t[a + 1] = X[1]);\n            return t;\n          });\n    },\n    43: function (t, e, n) {\n      \"use strict\";\n      var r, i, o, a;\n      function s(t) {\n        r ||\n          ((r = document.createElement(\"table\")),\n          (i = document.createElement(\"tr\")),\n          (o = /^\\s*<(\\w+|!)[^>]*>/),\n          (a = {\n            tr: document.createElement(\"tbody\"),\n            tbody: r,\n            thead: r,\n            tfoot: r,\n            td: i,\n            th: i,\n            \"*\": document.createElement(\"div\"),\n          }));\n        var e = o.test(t) && RegExp.$1;\n        (e && e in a) || (e = \"*\");\n        var n = a[e];\n        (t = \"string\" == typeof t ? t.replace(/(^\\s*)|(\\s*$)/g, \"\") : t),\n          (n.innerHTML = \"\" + t);\n        var s = n.childNodes[0];\n        return s && n.contains(s) && n.removeChild(s), s;\n      }\n      function c(t, e) {\n        if (t) for (var n in e) e.hasOwnProperty(n) && (t.style[n] = e[n]);\n        return t;\n      }\n      n.d(e, \"a\", function () {\n        return s;\n      }),\n        n.d(e, \"b\", function () {\n          return c;\n        });\n    },\n    44: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = n(181),\n        a = n(185),\n        s = [].slice,\n        c = [\"keyword\", \"gray\", \"hex\"],\n        u = {};\n      Object.keys(a).forEach(function (t) {\n        u[s.call(a[t].labels).sort().join(\"\")] = t;\n      });\n      var h = {};\n      function l(t, e) {\n        if (!(this instanceof l)) return new l(t, e);\n        if ((e && e in c && (e = null), e && !(e in a)))\n          throw new Error(\"Unknown model: \" + e);\n        var n, r, i, f, d, p, g, y, m;\n        if (null == t)\n          (this.model = \"rgb\"), (this.color = [0, 0, 0]), (this.valpha = 1);\n        else if (t instanceof l)\n          (this.model = t.model),\n            (this.color = t.color.slice()),\n            (this.valpha = t.valpha);\n        else if (\"string\" == typeof t) {\n          if (null === (r = o.get(t)))\n            throw new Error(\"Unable to parse color from string: \" + t);\n          (this.model = r.model),\n            (m = a[this.model].channels),\n            (this.color = r.value.slice(0, m)),\n            (this.valpha = \"number\" == typeof r.value[m] ? r.value[m] : 1);\n        } else if (t.length)\n          (this.model = e || \"rgb\"),\n            (m = a[this.model].channels),\n            (i = s.call(t, 0, m)),\n            (this.color = v(i, m)),\n            (this.valpha = \"number\" == typeof t[m] ? t[m] : 1);\n        else if (\"number\" == typeof t)\n          (t &= 16777215),\n            (this.model = \"rgb\"),\n            (this.color = [(t >> 16) & 255, (t >> 8) & 255, 255 & t]),\n            (this.valpha = 1);\n        else {\n          if (\n            ((this.valpha = 1),\n            (f = Object.keys(t)),\n            \"alpha\" in t &&\n              (f.splice(f.indexOf(\"alpha\"), 1),\n              (this.valpha = \"number\" == typeof t.alpha ? t.alpha : 0)),\n            !((d = f.sort().join(\"\")) in u))\n          )\n            throw new Error(\n              \"Unable to parse color from object: \" + JSON.stringify(t),\n            );\n          for (\n            this.model = u[d], p = a[this.model].labels, g = [], n = 0;\n            n < p.length;\n            n++\n          )\n            g.push(t[p[n]]);\n          this.color = v(g);\n        }\n        if (h[this.model])\n          for (m = a[this.model].channels, n = 0; n < m; n++)\n            (y = h[this.model][n]) && (this.color[n] = y(this.color[n]));\n        (this.valpha = Math.max(0, Math.min(1, this.valpha))),\n          Object.freeze && Object.freeze(this);\n      }\n      function f(t) {\n        return function (e) {\n          return (function (t, e) {\n            return Number(t.toFixed(e));\n          })(e, t);\n        };\n      }\n      function d(t, e, n) {\n        return (\n          (t = Array.isArray(t) ? t : [t]).forEach(function (t) {\n            (h[t] || (h[t] = []))[e] = n;\n          }),\n          (t = t[0]),\n          function (r) {\n            var i;\n            return arguments.length\n              ? (n && (r = n(r)), ((i = this[t]()).color[e] = r), i)\n              : ((i = this[t]().color[e]), n && (i = n(i)), i);\n          }\n        );\n      }\n      function p(t) {\n        return function (e) {\n          return Math.max(0, Math.min(t, e));\n        };\n      }\n      function g(t) {\n        return Array.isArray(t) ? t : [t];\n      }\n      function v(t, e) {\n        var n;\n        for (n = 0; n < e; n++) \"number\" != typeof t[n] && (t[n] = 0);\n        return t;\n      }\n      (l.prototype = {\n        toString: function () {\n          return this.string();\n        },\n        toJSON: function () {\n          return this[this.model]();\n        },\n        string: function (t) {\n          var e = this.model in o.to ? this : this.rgb(),\n            n =\n              1 === (e = e.round(\"number\" == typeof t ? t : 1)).valpha\n                ? e.color\n                : e.color.concat(this.valpha);\n          return o.to[e.model](n);\n        },\n        percentString: function (t) {\n          var e = this.rgb().round(\"number\" == typeof t ? t : 1),\n            n = 1 === e.valpha ? e.color : e.color.concat(this.valpha);\n          return o.to.rgb.percent(n);\n        },\n        array: function () {\n          return 1 === this.valpha\n            ? this.color.slice()\n            : this.color.concat(this.valpha);\n        },\n        object: function () {\n          var t,\n            e = {},\n            n = a[this.model].channels,\n            r = a[this.model].labels;\n          for (t = 0; t < n; t++) e[r[t]] = this.color[t];\n          return 1 !== this.valpha && (e.alpha = this.valpha), e;\n        },\n        unitArray: function () {\n          var t = this.rgb().color;\n          return (\n            (t[0] /= 255),\n            (t[1] /= 255),\n            (t[2] /= 255),\n            1 !== this.valpha && t.push(this.valpha),\n            t\n          );\n        },\n        unitObject: function () {\n          var t = this.rgb().object();\n          return (\n            (t.r /= 255),\n            (t.g /= 255),\n            (t.b /= 255),\n            1 !== this.valpha && (t.alpha = this.valpha),\n            t\n          );\n        },\n        round: function (t) {\n          return (\n            (t = Math.max(t || 0, 0)),\n            new l(this.color.map(f(t)).concat(this.valpha), this.model)\n          );\n        },\n        alpha: function (t) {\n          return arguments.length\n            ? new l(this.color.concat(Math.max(0, Math.min(1, t))), this.model)\n            : this.valpha;\n        },\n        red: d(\"rgb\", 0, p(255)),\n        green: d(\"rgb\", 1, p(255)),\n        blue: d(\"rgb\", 2, p(255)),\n        hue: d([\"hsl\", \"hsv\", \"hsl\", \"hwb\", \"hcg\"], 0, function (t) {\n          return ((t % 360) + 360) % 360;\n        }),\n        saturationl: d(\"hsl\", 1, p(100)),\n        lightness: d(\"hsl\", 2, p(100)),\n        saturationv: d(\"hsv\", 1, p(100)),\n        value: d(\"hsv\", 2, p(100)),\n        chroma: d(\"hcg\", 1, p(100)),\n        gray: d(\"hcg\", 2, p(100)),\n        white: d(\"hwb\", 1, p(100)),\n        wblack: d(\"hwb\", 2, p(100)),\n        cyan: d(\"cmyk\", 0, p(100)),\n        magenta: d(\"cmyk\", 1, p(100)),\n        yellow: d(\"cmyk\", 2, p(100)),\n        black: d(\"cmyk\", 3, p(100)),\n        x: d(\"xyz\", 0, p(100)),\n        y: d(\"xyz\", 1, p(100)),\n        z: d(\"xyz\", 2, p(100)),\n        l: d(\"lab\", 0, p(100)),\n        a: d(\"lab\", 1),\n        b: d(\"lab\", 2),\n        keyword: function (t) {\n          return arguments.length\n            ? new l(t)\n            : a[this.model].keyword(this.color);\n        },\n        hex: function (t) {\n          return arguments.length\n            ? new l(t)\n            : o.to.hex(this.rgb().round().color);\n        },\n        rgbNumber: function () {\n          var t = this.rgb().color;\n          return ((255 & t[0]) << 16) | ((255 & t[1]) << 8) | (255 & t[2]);\n        },\n        luminosity: function () {\n          var t,\n            e,\n            n = this.rgb().color,\n            r = [];\n          for (t = 0; t < n.length; t++)\n            (e = n[t] / 255),\n              (r[t] =\n                e <= 0.03928 ? e / 12.92 : Math.pow((e + 0.055) / 1.055, 2.4));\n          return 0.2126 * r[0] + 0.7152 * r[1] + 0.0722 * r[2];\n        },\n        contrast: function (t) {\n          var e = this.luminosity(),\n            n = t.luminosity();\n          return e > n ? (e + 0.05) / (n + 0.05) : (n + 0.05) / (e + 0.05);\n        },\n        level: function (t) {\n          var e = this.contrast(t);\n          return e >= 7.1 ? \"AAA\" : e >= 4.5 ? \"AA\" : \"\";\n        },\n        isDark: function () {\n          var t = this.rgb().color;\n          return (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3 < 128;\n        },\n        isLight: function () {\n          return !this.isDark();\n        },\n        negate: function () {\n          var t,\n            e = this.rgb();\n          for (t = 0; t < 3; t++) e.color[t] = 255 - e.color[t];\n          return e;\n        },\n        lighten: function (t) {\n          var e = this.hsl();\n          return (e.color[2] += e.color[2] * t), e;\n        },\n        darken: function (t) {\n          var e = this.hsl();\n          return (e.color[2] -= e.color[2] * t), e;\n        },\n        saturate: function (t) {\n          var e = this.hsl();\n          return (e.color[1] += e.color[1] * t), e;\n        },\n        desaturate: function (t) {\n          var e = this.hsl();\n          return (e.color[1] -= e.color[1] * t), e;\n        },\n        whiten: function (t) {\n          var e = this.hwb();\n          return (e.color[1] += e.color[1] * t), e;\n        },\n        blacken: function (t) {\n          var e = this.hwb();\n          return (e.color[2] += e.color[2] * t), e;\n        },\n        grayscale: function () {\n          var t = this.rgb().color,\n            e = 0.3 * t[0] + 0.59 * t[1] + 0.11 * t[2];\n          return l.rgb(e, e, e);\n        },\n        fade: function (t) {\n          return this.alpha(this.valpha - this.valpha * t);\n        },\n        opaquer: function (t) {\n          return this.alpha(this.valpha + this.valpha * t);\n        },\n        rotate: function (t) {\n          var e = this.hsl(),\n            n = e.color[0];\n          return (\n            (n = (n = (n + t) % 360) < 0 ? 360 + n : n), (e.color[0] = n), e\n          );\n        },\n        mix: function (t, e) {\n          if (!t || !t.rgb)\n            throw new Error(\n              'Argument to \"mix\" was not a Color instance, but rather an instance of ' +\n                i(t),\n            );\n          var n = t.rgb(),\n            r = this.rgb(),\n            o = void 0 === e ? 0.5 : e,\n            a = 2 * o - 1,\n            s = n.alpha() - r.alpha(),\n            c = ((a * s == -1 ? a : (a + s) / (1 + a * s)) + 1) / 2,\n            u = 1 - c;\n          return l.rgb(\n            c * n.red() + u * r.red(),\n            c * n.green() + u * r.green(),\n            c * n.blue() + u * r.blue(),\n            n.alpha() * o + r.alpha() * (1 - o),\n          );\n        },\n      }),\n        Object.keys(a).forEach(function (t) {\n          if (-1 === c.indexOf(t)) {\n            var e = a[t].channels;\n            (l.prototype[t] = function () {\n              if (this.model === t) return new l(this);\n              if (arguments.length) return new l(arguments, t);\n              var n = \"number\" == typeof arguments[e] ? e : this.valpha;\n              return new l(g(a[this.model][t].raw(this.color)).concat(n), t);\n            }),\n              (l[t] = function (n) {\n                return (\n                  \"number\" == typeof n && (n = v(s.call(arguments), e)),\n                  new l(n, t)\n                );\n              });\n          }\n        }),\n        (t.exports = l);\n    },\n    5: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"a\", function () {\n          return i;\n        }),\n        n.d(e, \"c\", function () {\n          return o;\n        });\n      var r = 1e-6,\n        i = \"undefined\" != typeof Float32Array ? Float32Array : Array,\n        o = Math.random;\n      Math.PI;\n      Math.hypot ||\n        (Math.hypot = function () {\n          for (var t = 0, e = arguments.length; e--; )\n            t += arguments[e] * arguments[e];\n          return Math.sqrt(t);\n        });\n    },\n    51: function (t, e, n) {\n      \"use strict\";\n      var r,\n        i =\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.getLayoutByName = e.unRegisterLayout = e.registerLayout = void 0);\n      var o = n(53),\n        a = n(188),\n        s = new Map();\n      e.registerLayout = function (t, e) {\n        var n;\n        s.get(t) &&\n          console.warn(\n            \"The layout with the name \" +\n              t +\n              \" exists already, it will be overridden\",\n          ),\n          a.isObject(e)\n            ? ((n = (function (t) {\n                function n(n) {\n                  var r = t.call(this) || this,\n                    i = r,\n                    o = {},\n                    a = i.getDefaultCfg();\n                  return (\n                    Object.assign(o, a, e, n),\n                    Object.keys(o).forEach(function (t) {\n                      var e = o[t];\n                      i[t] = e;\n                    }),\n                    r\n                  );\n                }\n                return i(n, t), n;\n              })(o.Base)),\n              s.set(t, n))\n            : s.set(t, e);\n      };\n      e.unRegisterLayout = function (t) {\n        s.has(t) && s.delete(t);\n      };\n      e.getLayoutByName = function (t) {\n        return s.has(t) ? s.get(t) : null;\n      };\n    },\n    52: function (t, e, n) {\n      \"use strict\";\n      var r,\n        i =\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.RandomLayout = void 0);\n      var o = (function (t) {\n        function e(e) {\n          var n = t.call(this) || this;\n          return (\n            (n.center = [0, 0]),\n            (n.width = 300),\n            (n.height = 300),\n            (n.nodes = []),\n            (n.edges = []),\n            (n.onLayoutEnd = function () {}),\n            n.updateCfg(e),\n            n\n          );\n        }\n        return (\n          i(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { center: [0, 0], width: 300, height: 300 };\n          }),\n          (e.prototype.execute = function () {\n            var t = this,\n              e = t.nodes,\n              n = t.center;\n            return (\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n              t.height ||\n                \"undefined\" == typeof window ||\n                (t.height = window.innerHeight),\n              e &&\n                e.forEach(function (e) {\n                  (e.x = 0.9 * (Math.random() - 0.5) * t.width + n[0]),\n                    (e.y = 0.9 * (Math.random() - 0.5) * t.height + n[1]);\n                }),\n              t.onLayoutEnd && t.onLayoutEnd(),\n              { nodes: e, edges: this.edges }\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"random\";\n          }),\n          e\n        );\n      })(n(53).Base);\n      e.RandomLayout = o;\n    },\n    53: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function () {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n    6: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"d\", function () {\n        return F;\n      }),\n        n.d(e, \"a\", function () {\n          return cn;\n        }),\n        n.d(e, \"b\", function () {\n          return un;\n        }),\n        n.d(e, \"c\", function () {\n          return hn;\n        }),\n        n.d(e, \"e\", function () {\n          return r;\n        }),\n        n.d(e, \"g\", function () {\n          return dn;\n        }),\n        n.d(e, \"l\", function () {\n          return fn;\n        }),\n        n.d(e, \"h\", function () {\n          return xn;\n        }),\n        n.d(e, \"f\", function () {\n          return Sn;\n        }),\n        n.d(e, \"j\", function () {\n          return V;\n        }),\n        n.d(e, \"k\", function () {\n          return Z;\n        }),\n        n.d(e, \"i\", function () {\n          return K;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"catmullRomToBezier\", function () {\n          return h;\n        }),\n        n.d(r, \"fillPath\", function () {\n          return T;\n        }),\n        n.d(r, \"fillPathByDiff\", function () {\n          return L;\n        }),\n        n.d(r, \"formatPath\", function () {\n          return R;\n        }),\n        n.d(r, \"intersection\", function () {\n          return P;\n        }),\n        n.d(r, \"parsePathArray\", function () {\n          return m;\n        }),\n        n.d(r, \"parsePathString\", function () {\n          return u;\n        }),\n        n.d(r, \"pathToAbsolute\", function () {\n          return f;\n        }),\n        n.d(r, \"pathToCurve\", function () {\n          return v;\n        }),\n        n.d(r, \"rectPath\", function () {\n          return M;\n        });\n      var i = {};\n      n.r(i),\n        n.d(i, \"easeLinear\", function () {\n          return me;\n        }),\n        n.d(i, \"easeQuad\", function () {\n          return we;\n        }),\n        n.d(i, \"easeQuadIn\", function () {\n          return be;\n        }),\n        n.d(i, \"easeQuadOut\", function () {\n          return xe;\n        }),\n        n.d(i, \"easeQuadInOut\", function () {\n          return we;\n        }),\n        n.d(i, \"easeCubic\", function () {\n          return Me;\n        }),\n        n.d(i, \"easeCubicIn\", function () {\n          return Se;\n        }),\n        n.d(i, \"easeCubicOut\", function () {\n          return Oe;\n        }),\n        n.d(i, \"easeCubicInOut\", function () {\n          return Me;\n        }),\n        n.d(i, \"easePoly\", function () {\n          return Ee;\n        }),\n        n.d(i, \"easePolyIn\", function () {\n          return ke;\n        }),\n        n.d(i, \"easePolyOut\", function () {\n          return Ce;\n        }),\n        n.d(i, \"easePolyInOut\", function () {\n          return Ee;\n        }),\n        n.d(i, \"easeSin\", function () {\n          return Te;\n        }),\n        n.d(i, \"easeSinIn\", function () {\n          return Ae;\n        }),\n        n.d(i, \"easeSinOut\", function () {\n          return Ie;\n        }),\n        n.d(i, \"easeSinInOut\", function () {\n          return Te;\n        }),\n        n.d(i, \"easeExp\", function () {\n          return De;\n        }),\n        n.d(i, \"easeExpIn\", function () {\n          return Be;\n        }),\n        n.d(i, \"easeExpOut\", function () {\n          return Le;\n        }),\n        n.d(i, \"easeExpInOut\", function () {\n          return De;\n        }),\n        n.d(i, \"easeCircle\", function () {\n          return Fe;\n        }),\n        n.d(i, \"easeCircleIn\", function () {\n          return _e;\n        }),\n        n.d(i, \"easeCircleOut\", function () {\n          return Re;\n        }),\n        n.d(i, \"easeCircleInOut\", function () {\n          return Fe;\n        }),\n        n.d(i, \"easeBounce\", function () {\n          return ze;\n        }),\n        n.d(i, \"easeBounceIn\", function () {\n          return Xe;\n        }),\n        n.d(i, \"easeBounceOut\", function () {\n          return ze;\n        }),\n        n.d(i, \"easeBounceInOut\", function () {\n          return We;\n        }),\n        n.d(i, \"easeBack\", function () {\n          return Ge;\n        }),\n        n.d(i, \"easeBackIn\", function () {\n          return qe;\n        }),\n        n.d(i, \"easeBackOut\", function () {\n          return Ve;\n        }),\n        n.d(i, \"easeBackInOut\", function () {\n          return Ge;\n        }),\n        n.d(i, \"easeElastic\", function () {\n          return Ze;\n        }),\n        n.d(i, \"easeElasticIn\", function () {\n          return Ue;\n        }),\n        n.d(i, \"easeElasticOut\", function () {\n          return Ze;\n        }),\n        n.d(i, \"easeElasticInOut\", function () {\n          return Ke;\n        });\n      var o = n(0),\n        a = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        s = new RegExp(\n          \"([a-z])[\" +\n            a +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            a +\n            \"]*,?[\" +\n            a +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        c = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + a + \"]*,?[\" + a + \"]*\",\n          \"ig\",\n        ),\n        u = function (t) {\n          if (!t) return null;\n          if (Object(o.isArray)(t)) return t;\n          var e = {\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            n = [];\n          return (\n            String(t).replace(s, function (r, i, o) {\n              var a = [],\n                s = i.toLowerCase();\n              if (\n                (o.replace(c, function (t, e) {\n                  e && a.push(+e);\n                }),\n                \"m\" === s &&\n                  a.length > 2 &&\n                  (n.push([i].concat(a.splice(0, 2))),\n                  (s = \"l\"),\n                  (i = \"m\" === i ? \"l\" : \"L\")),\n                \"o\" === s && 1 === a.length && n.push([i, a[0]]),\n                \"r\" === s)\n              )\n                n.push([i].concat(a));\n              else\n                for (\n                  ;\n                  a.length >= e[s] &&\n                  (n.push([i].concat(a.splice(0, e[s]))), e[s]);\n\n                );\n              return t;\n            }),\n            n\n          );\n        },\n        h = function (t, e) {\n          for (var n = [], r = 0, i = t.length; i - 2 * !e > r; r += 2) {\n            var o = [\n              { x: +t[r - 2], y: +t[r - 1] },\n              { x: +t[r], y: +t[r + 1] },\n              { x: +t[r + 2], y: +t[r + 3] },\n              { x: +t[r + 4], y: +t[r + 5] },\n            ];\n            e\n              ? r\n                ? i - 4 === r\n                  ? (o[3] = { x: +t[0], y: +t[1] })\n                  : i - 2 === r &&\n                    ((o[2] = { x: +t[0], y: +t[1] }),\n                    (o[3] = { x: +t[2], y: +t[3] }))\n                : (o[0] = { x: +t[i - 2], y: +t[i - 1] })\n              : i - 4 === r\n              ? (o[3] = o[2])\n              : r || (o[0] = { x: +t[r], y: +t[r + 1] }),\n              n.push([\n                \"C\",\n                (-o[0].x + 6 * o[1].x + o[2].x) / 6,\n                (-o[0].y + 6 * o[1].y + o[2].y) / 6,\n                (o[1].x + 6 * o[2].x - o[3].x) / 6,\n                (o[1].y + 6 * o[2].y - o[3].y) / 6,\n                o[2].x,\n                o[2].y,\n              ]);\n          }\n          return n;\n        },\n        l = function (t, e, n, r, i) {\n          var o = [];\n          if (\n            (null === i && null === r && (r = n),\n            (t = +t),\n            (e = +e),\n            (n = +n),\n            (r = +r),\n            null !== i)\n          ) {\n            var a = Math.PI / 180,\n              s = t + n * Math.cos(-r * a),\n              c = t + n * Math.cos(-i * a);\n            o = [\n              [\"M\", s, e + n * Math.sin(-r * a)],\n              [\"A\", n, n, 0, +(i - r > 180), 0, c, e + n * Math.sin(-i * a)],\n            ];\n          } else\n            o = [\n              [\"M\", t, e],\n              [\"m\", 0, -r],\n              [\"a\", n, r, 0, 1, 1, 0, 2 * r],\n              [\"a\", n, r, 0, 1, 1, 0, -2 * r],\n              [\"z\"],\n            ];\n          return o;\n        },\n        f = function (t) {\n          if (!(t = u(t)) || !t.length) return [[\"M\", 0, 0]];\n          var e,\n            n,\n            r = [],\n            i = 0,\n            o = 0,\n            a = 0,\n            s = 0,\n            c = 0;\n          \"M\" === t[0][0] &&\n            ((a = i = +t[0][1]), (s = o = +t[0][2]), c++, (r[0] = [\"M\", i, o]));\n          for (\n            var f =\n                3 === t.length &&\n                \"M\" === t[0][0] &&\n                \"R\" === t[1][0].toUpperCase() &&\n                \"Z\" === t[2][0].toUpperCase(),\n              d = void 0,\n              p = void 0,\n              g = c,\n              v = t.length;\n            g < v;\n            g++\n          ) {\n            if ((r.push((d = [])), (e = (p = t[g])[0]) !== e.toUpperCase()))\n              switch (((d[0] = e.toUpperCase()), d[0])) {\n                case \"A\":\n                  (d[1] = p[1]),\n                    (d[2] = p[2]),\n                    (d[3] = p[3]),\n                    (d[4] = p[4]),\n                    (d[5] = p[5]),\n                    (d[6] = +p[6] + i),\n                    (d[7] = +p[7] + o);\n                  break;\n                case \"V\":\n                  d[1] = +p[1] + o;\n                  break;\n                case \"H\":\n                  d[1] = +p[1] + i;\n                  break;\n                case \"R\":\n                  for (\n                    var y = 2, m = (n = [i, o].concat(p.slice(1))).length;\n                    y < m;\n                    y++\n                  )\n                    (n[y] = +n[y] + i), (n[++y] = +n[y] + o);\n                  r.pop(), (r = r.concat(h(n, f)));\n                  break;\n                case \"O\":\n                  r.pop(),\n                    (n = l(i, o, p[1], p[2])).push(n[0]),\n                    (r = r.concat(n));\n                  break;\n                case \"U\":\n                  r.pop(),\n                    (r = r.concat(l(i, o, p[1], p[2], p[3]))),\n                    (d = [\"U\"].concat(r[r.length - 1].slice(-2)));\n                  break;\n                case \"M\":\n                  (a = +p[1] + i), (s = +p[2] + o);\n                  break;\n                default:\n                  for (y = 1, m = p.length; y < m; y++)\n                    d[y] = +p[y] + (y % 2 ? i : o);\n              }\n            else if (\"R\" === e)\n              (n = [i, o].concat(p.slice(1))),\n                r.pop(),\n                (r = r.concat(h(n, f))),\n                (d = [\"R\"].concat(p.slice(-2)));\n            else if (\"O\" === e)\n              r.pop(), (n = l(i, o, p[1], p[2])).push(n[0]), (r = r.concat(n));\n            else if (\"U\" === e)\n              r.pop(),\n                (r = r.concat(l(i, o, p[1], p[2], p[3]))),\n                (d = [\"U\"].concat(r[r.length - 1].slice(-2)));\n            else for (var b = 0, x = p.length; b < x; b++) d[b] = p[b];\n            if (\"O\" !== (e = e.toUpperCase()))\n              switch (d[0]) {\n                case \"Z\":\n                  (i = +a), (o = +s);\n                  break;\n                case \"H\":\n                  i = d[1];\n                  break;\n                case \"V\":\n                  o = d[1];\n                  break;\n                case \"M\":\n                  (a = d[d.length - 2]), (s = d[d.length - 1]);\n                  break;\n                default:\n                  (i = d[d.length - 2]), (o = d[d.length - 1]);\n              }\n          }\n          return r;\n        },\n        d = function (t, e, n, r) {\n          return [t, e, n, r, n, r];\n        },\n        p = function (t, e, n, r, i, o) {\n          return [\n            (1 / 3) * t + (2 / 3) * n,\n            (1 / 3) * e + (2 / 3) * r,\n            (1 / 3) * i + (2 / 3) * n,\n            (1 / 3) * o + (2 / 3) * r,\n            i,\n            o,\n          ];\n        },\n        g = function t(e, n, r, i, o, a, s, c, u, h) {\n          r === i && (r += 1);\n          var l,\n            f,\n            d,\n            p,\n            g,\n            v = (120 * Math.PI) / 180,\n            y = (Math.PI / 180) * (+o || 0),\n            m = [],\n            b = function (t, e, n) {\n              return {\n                x: t * Math.cos(n) - e * Math.sin(n),\n                y: t * Math.sin(n) + e * Math.cos(n),\n              };\n            };\n          if (h) (f = h[0]), (d = h[1]), (p = h[2]), (g = h[3]);\n          else {\n            (e = (l = b(e, n, -y)).x),\n              (n = l.y),\n              (c = (l = b(c, u, -y)).x),\n              (u = l.y),\n              e === c && n === u && ((c += 1), (u += 1));\n            var x = (e - c) / 2,\n              w = (n - u) / 2,\n              S = (x * x) / (r * r) + (w * w) / (i * i);\n            S > 1 && ((r *= S = Math.sqrt(S)), (i *= S));\n            var O = r * r,\n              M = i * i,\n              k =\n                (a === s ? -1 : 1) *\n                Math.sqrt(\n                  Math.abs(\n                    (O * M - O * w * w - M * x * x) / (O * w * w + M * x * x),\n                  ),\n                );\n            (p = (k * r * w) / i + (e + c) / 2),\n              (g = (k * -i * x) / r + (n + u) / 2),\n              (f = Math.asin(((n - g) / i).toFixed(9))),\n              (d = Math.asin(((u - g) / i).toFixed(9))),\n              (f = e < p ? Math.PI - f : f),\n              (d = c < p ? Math.PI - d : d),\n              f < 0 && (f = 2 * Math.PI + f),\n              d < 0 && (d = 2 * Math.PI + d),\n              s && f > d && (f -= 2 * Math.PI),\n              !s && d > f && (d -= 2 * Math.PI);\n          }\n          var C = d - f;\n          if (Math.abs(C) > v) {\n            var E = d,\n              j = c,\n              P = u;\n            (d = f + v * (s && d > f ? 1 : -1)),\n              (m = t(\n                (c = p + r * Math.cos(d)),\n                (u = g + i * Math.sin(d)),\n                r,\n                i,\n                o,\n                0,\n                s,\n                j,\n                P,\n                [d, E, p, g],\n              ));\n          }\n          C = d - f;\n          var A = Math.cos(f),\n            I = Math.sin(f),\n            T = Math.cos(d),\n            N = Math.sin(d),\n            B = Math.tan(C / 4),\n            L = (4 / 3) * r * B,\n            D = (4 / 3) * i * B,\n            _ = [e, n],\n            R = [e + L * I, n - D * A],\n            F = [c + L * N, u - D * T],\n            Y = [c, u];\n          if (((R[0] = 2 * _[0] - R[0]), (R[1] = 2 * _[1] - R[1]), h))\n            return [R, F, Y].concat(m);\n          for (\n            var X = [],\n              z = 0,\n              W = (m = [R, F, Y].concat(m).join().split(\",\")).length;\n            z < W;\n            z++\n          )\n            X[z] = z % 2 ? b(m[z - 1], m[z], y).y : b(m[z], m[z + 1], y).x;\n          return X;\n        },\n        v = function (t, e) {\n          var n,\n            r = f(t),\n            i = e && f(e),\n            o = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n            a = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n            s = [],\n            c = [],\n            u = \"\",\n            h = \"\",\n            l = function (t, e, n) {\n              var r, i;\n              if (!t) return [\"C\", e.x, e.y, e.x, e.y, e.x, e.y];\n              switch (\n                (!(t[0] in { T: 1, Q: 1 }) && (e.qx = e.qy = null), t[0])\n              ) {\n                case \"M\":\n                  (e.X = t[1]), (e.Y = t[2]);\n                  break;\n                case \"A\":\n                  t = [\"C\"].concat(g.apply(0, [e.x, e.y].concat(t.slice(1))));\n                  break;\n                case \"S\":\n                  \"C\" === n || \"S\" === n\n                    ? ((r = 2 * e.x - e.bx), (i = 2 * e.y - e.by))\n                    : ((r = e.x), (i = e.y)),\n                    (t = [\"C\", r, i].concat(t.slice(1)));\n                  break;\n                case \"T\":\n                  \"Q\" === n || \"T\" === n\n                    ? ((e.qx = 2 * e.x - e.qx), (e.qy = 2 * e.y - e.qy))\n                    : ((e.qx = e.x), (e.qy = e.y)),\n                    (t = [\"C\"].concat(p(e.x, e.y, e.qx, e.qy, t[1], t[2])));\n                  break;\n                case \"Q\":\n                  (e.qx = t[1]),\n                    (e.qy = t[2]),\n                    (t = [\"C\"].concat(p(e.x, e.y, t[1], t[2], t[3], t[4])));\n                  break;\n                case \"L\":\n                  t = [\"C\"].concat(d(e.x, e.y, t[1], t[2]));\n                  break;\n                case \"H\":\n                  t = [\"C\"].concat(d(e.x, e.y, t[1], e.y));\n                  break;\n                case \"V\":\n                  t = [\"C\"].concat(d(e.x, e.y, e.x, t[1]));\n                  break;\n                case \"Z\":\n                  t = [\"C\"].concat(d(e.x, e.y, e.X, e.Y));\n              }\n              return t;\n            },\n            v = function (t, e) {\n              if (t[e].length > 7) {\n                t[e].shift();\n                for (var o = t[e]; o.length; )\n                  (s[e] = \"A\"),\n                    i && (c[e] = \"A\"),\n                    t.splice(e++, 0, [\"C\"].concat(o.splice(0, 6)));\n                t.splice(e, 1), (n = Math.max(r.length, (i && i.length) || 0));\n              }\n            },\n            y = function (t, e, o, a, s) {\n              t &&\n                e &&\n                \"M\" === t[s][0] &&\n                \"M\" !== e[s][0] &&\n                (e.splice(s, 0, [\"M\", a.x, a.y]),\n                (o.bx = 0),\n                (o.by = 0),\n                (o.x = t[s][1]),\n                (o.y = t[s][2]),\n                (n = Math.max(r.length, (i && i.length) || 0)));\n            };\n          n = Math.max(r.length, (i && i.length) || 0);\n          for (var m = 0; m < n; m++) {\n            r[m] && (u = r[m][0]),\n              \"C\" !== u && ((s[m] = u), m && (h = s[m - 1])),\n              (r[m] = l(r[m], o, h)),\n              \"A\" !== s[m] && \"C\" === u && (s[m] = \"C\"),\n              v(r, m),\n              i &&\n                (i[m] && (u = i[m][0]),\n                \"C\" !== u && ((c[m] = u), m && (h = c[m - 1])),\n                (i[m] = l(i[m], a, h)),\n                \"A\" !== c[m] && \"C\" === u && (c[m] = \"C\"),\n                v(i, m)),\n              y(r, i, o, a, m),\n              y(i, r, a, o, m);\n            var b = r[m],\n              x = i && i[m],\n              w = b.length,\n              S = i && x.length;\n            (o.x = b[w - 2]),\n              (o.y = b[w - 1]),\n              (o.bx = parseFloat(b[w - 4]) || o.x),\n              (o.by = parseFloat(b[w - 3]) || o.y),\n              (a.bx = i && (parseFloat(x[S - 4]) || a.x)),\n              (a.by = i && (parseFloat(x[S - 3]) || a.y)),\n              (a.x = i && x[S - 2]),\n              (a.y = i && x[S - 1]);\n          }\n          return i ? [r, i] : r;\n        },\n        y = /,?([a-z]),?/gi,\n        m = function (t) {\n          return t.join(\",\").replace(y, \"$1\");\n        },\n        b = function (t, e, n, r, i) {\n          return (\n            t *\n              (t * (-3 * e + 9 * n - 9 * r + 3 * i) + 6 * e - 12 * n + 6 * r) -\n            3 * e +\n            3 * n\n          );\n        },\n        x = function (t, e, n, r, i, o, a, s, c) {\n          null === c && (c = 1);\n          for (\n            var u = (c = c > 1 ? 1 : c < 0 ? 0 : c) / 2,\n              h = [\n                -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699,\n                0.7699, -0.9041, 0.9041, -0.9816, 0.9816,\n              ],\n              l = [\n                0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601,\n                0.1069, 0.1069, 0.0472, 0.0472,\n              ],\n              f = 0,\n              d = 0;\n            d < 12;\n            d++\n          ) {\n            var p = u * h[d] + u,\n              g = b(p, t, n, i, a),\n              v = b(p, e, r, o, s),\n              y = g * g + v * v;\n            f += l[d] * Math.sqrt(y);\n          }\n          return u * f;\n        },\n        w = function (t, e, n, r, i, o, a, s) {\n          for (var c, u, h, l, f = [], d = [[], []], p = 0; p < 2; ++p)\n            if (\n              (0 === p\n                ? ((u = 6 * t - 12 * n + 6 * i),\n                  (c = -3 * t + 9 * n - 9 * i + 3 * a),\n                  (h = 3 * n - 3 * t))\n                : ((u = 6 * e - 12 * r + 6 * o),\n                  (c = -3 * e + 9 * r - 9 * o + 3 * s),\n                  (h = 3 * r - 3 * e)),\n              Math.abs(c) < 1e-12)\n            ) {\n              if (Math.abs(u) < 1e-12) continue;\n              (l = -h / u) > 0 && l < 1 && f.push(l);\n            } else {\n              var g = u * u - 4 * h * c,\n                v = Math.sqrt(g);\n              if (!(g < 0)) {\n                var y = (-u + v) / (2 * c);\n                y > 0 && y < 1 && f.push(y);\n                var m = (-u - v) / (2 * c);\n                m > 0 && m < 1 && f.push(m);\n              }\n            }\n          for (var b, x = f.length, w = x; x--; )\n            (b = 1 - (l = f[x])),\n              (d[0][x] =\n                b * b * b * t +\n                3 * b * b * l * n +\n                3 * b * l * l * i +\n                l * l * l * a),\n              (d[1][x] =\n                b * b * b * e +\n                3 * b * b * l * r +\n                3 * b * l * l * o +\n                l * l * l * s);\n          return (\n            (d[0][w] = t),\n            (d[1][w] = e),\n            (d[0][w + 1] = a),\n            (d[1][w + 1] = s),\n            (d[0].length = d[1].length = w + 2),\n            {\n              min: { x: Math.min.apply(0, d[0]), y: Math.min.apply(0, d[1]) },\n              max: { x: Math.max.apply(0, d[0]), y: Math.max.apply(0, d[1]) },\n            }\n          );\n        },\n        S = function (t, e, n, r, i, o, a, s) {\n          if (\n            !(\n              Math.max(t, n) < Math.min(i, a) ||\n              Math.min(t, n) > Math.max(i, a) ||\n              Math.max(e, r) < Math.min(o, s) ||\n              Math.min(e, r) > Math.max(o, s)\n            )\n          ) {\n            var c = (t - n) * (o - s) - (e - r) * (i - a);\n            if (c) {\n              var u =\n                  ((t * r - e * n) * (i - a) - (t - n) * (i * s - o * a)) / c,\n                h = ((t * r - e * n) * (o - s) - (e - r) * (i * s - o * a)) / c,\n                l = +u.toFixed(2),\n                f = +h.toFixed(2);\n              if (\n                !(\n                  l < +Math.min(t, n).toFixed(2) ||\n                  l > +Math.max(t, n).toFixed(2) ||\n                  l < +Math.min(i, a).toFixed(2) ||\n                  l > +Math.max(i, a).toFixed(2) ||\n                  f < +Math.min(e, r).toFixed(2) ||\n                  f > +Math.max(e, r).toFixed(2) ||\n                  f < +Math.min(o, s).toFixed(2) ||\n                  f > +Math.max(o, s).toFixed(2)\n                )\n              )\n                return { x: u, y: h };\n            }\n          }\n        },\n        O = function (t, e, n) {\n          return (\n            e >= t.x && e <= t.x + t.width && n >= t.y && n <= t.y + t.height\n          );\n        },\n        M = function (t, e, n, r, i) {\n          if (i)\n            return [\n              [\"M\", +t + +i, e],\n              [\"l\", n - 2 * i, 0],\n              [\"a\", i, i, 0, 0, 1, i, i],\n              [\"l\", 0, r - 2 * i],\n              [\"a\", i, i, 0, 0, 1, -i, i],\n              [\"l\", 2 * i - n, 0],\n              [\"a\", i, i, 0, 0, 1, -i, -i],\n              [\"l\", 0, 2 * i - r],\n              [\"a\", i, i, 0, 0, 1, i, -i],\n              [\"z\"],\n            ];\n          var o = [[\"M\", t, e], [\"l\", n, 0], [\"l\", 0, r], [\"l\", -n, 0], [\"z\"]];\n          return (o.parsePathArray = m), o;\n        },\n        k = function (t, e, n, r) {\n          return (\n            null === t && (t = e = n = r = 0),\n            null === e && ((e = t.y), (n = t.width), (r = t.height), (t = t.x)),\n            {\n              x: t,\n              y: e,\n              width: n,\n              w: n,\n              height: r,\n              h: r,\n              x2: t + n,\n              y2: e + r,\n              cx: t + n / 2,\n              cy: e + r / 2,\n              r1: Math.min(n, r) / 2,\n              r2: Math.max(n, r) / 2,\n              r0: Math.sqrt(n * n + r * r) / 2,\n              path: M(t, e, n, r),\n              vb: [t, e, n, r].join(\" \"),\n            }\n          );\n        },\n        C = function (t, e, n, r, i, a, s, c) {\n          Object(o.isArray)(t) || (t = [t, e, n, r, i, a, s, c]);\n          var u = w.apply(null, t);\n          return k(u.min.x, u.min.y, u.max.x - u.min.x, u.max.y - u.min.y);\n        },\n        E = function (t, e, n, r, i, o, a, s, c) {\n          var u = 1 - c,\n            h = Math.pow(u, 3),\n            l = Math.pow(u, 2),\n            f = c * c,\n            d = f * c,\n            p = t + 2 * c * (n - t) + f * (i - 2 * n + t),\n            g = e + 2 * c * (r - e) + f * (o - 2 * r + e),\n            v = n + 2 * c * (i - n) + f * (a - 2 * i + n),\n            y = r + 2 * c * (o - r) + f * (s - 2 * o + r);\n          return {\n            x: h * t + 3 * l * c * n + 3 * u * c * c * i + d * a,\n            y: h * e + 3 * l * c * r + 3 * u * c * c * o + d * s,\n            m: { x: p, y: g },\n            n: { x: v, y: y },\n            start: { x: u * t + c * n, y: u * e + c * r },\n            end: { x: u * i + c * a, y: u * o + c * s },\n            alpha: 90 - (180 * Math.atan2(p - v, g - y)) / Math.PI,\n          };\n        },\n        j = function (t, e, n) {\n          if (\n            !(function (t, e) {\n              return (\n                (t = k(t)),\n                (e = k(e)),\n                O(e, t.x, t.y) ||\n                  O(e, t.x2, t.y) ||\n                  O(e, t.x, t.y2) ||\n                  O(e, t.x2, t.y2) ||\n                  O(t, e.x, e.y) ||\n                  O(t, e.x2, e.y) ||\n                  O(t, e.x, e.y2) ||\n                  O(t, e.x2, e.y2) ||\n                  (((t.x < e.x2 && t.x > e.x) || (e.x < t.x2 && e.x > t.x)) &&\n                    ((t.y < e.y2 && t.y > e.y) || (e.y < t.y2 && e.y > t.y)))\n              );\n            })(C(t), C(e))\n          )\n            return n ? 0 : [];\n          for (\n            var r = ~~(x.apply(0, t) / 8),\n              i = ~~(x.apply(0, e) / 8),\n              o = [],\n              a = [],\n              s = {},\n              c = n ? 0 : [],\n              u = 0;\n            u < r + 1;\n            u++\n          ) {\n            var h = E.apply(0, t.concat(u / r));\n            o.push({ x: h.x, y: h.y, t: u / r });\n          }\n          for (u = 0; u < i + 1; u++) {\n            h = E.apply(0, e.concat(u / i));\n            a.push({ x: h.x, y: h.y, t: u / i });\n          }\n          for (u = 0; u < r; u++)\n            for (var l = 0; l < i; l++) {\n              var f = o[u],\n                d = o[u + 1],\n                p = a[l],\n                g = a[l + 1],\n                v = Math.abs(d.x - f.x) < 0.001 ? \"y\" : \"x\",\n                y = Math.abs(g.x - p.x) < 0.001 ? \"y\" : \"x\",\n                m = S(f.x, f.y, d.x, d.y, p.x, p.y, g.x, g.y);\n              if (m) {\n                if (s[m.x.toFixed(4)] === m.y.toFixed(4)) continue;\n                s[m.x.toFixed(4)] = m.y.toFixed(4);\n                var b =\n                    f.t + Math.abs((m[v] - f[v]) / (d[v] - f[v])) * (d.t - f.t),\n                  w =\n                    p.t + Math.abs((m[y] - p[y]) / (g[y] - p[y])) * (g.t - p.t);\n                b >= 0 &&\n                  b <= 1 &&\n                  w >= 0 &&\n                  w <= 1 &&\n                  (n ? (c += 1) : c.push({ x: m.x, y: m.y, t1: b, t2: w }));\n              }\n            }\n          return c;\n        },\n        P = function (t, e) {\n          return (function (t, e, n) {\n            var r, i, o, a, s, c, u, h, l, f;\n            (t = v(t)), (e = v(e));\n            for (var d = n ? 0 : [], p = 0, g = t.length; p < g; p++) {\n              var y = t[p];\n              if (\"M\" === y[0]) (r = s = y[1]), (i = c = y[2]);\n              else {\n                \"C\" === y[0]\n                  ? ((l = [r, i].concat(y.slice(1))), (r = l[6]), (i = l[7]))\n                  : ((l = [r, i, r, i, s, c, s, c]), (r = s), (i = c));\n                for (var m = 0, b = e.length; m < b; m++) {\n                  var x = e[m];\n                  if (\"M\" === x[0]) (o = u = x[1]), (a = h = x[2]);\n                  else {\n                    \"C\" === x[0]\n                      ? ((f = [o, a].concat(x.slice(1))),\n                        (o = f[6]),\n                        (a = f[7]))\n                      : ((f = [o, a, o, a, u, h, u, h]), (o = u), (a = h));\n                    var w = j(l, f, n);\n                    if (n) d += w;\n                    else {\n                      for (var S = 0, O = w.length; S < O; S++)\n                        (w[S].segment1 = p),\n                          (w[S].segment2 = m),\n                          (w[S].bez1 = l),\n                          (w[S].bez2 = f);\n                      d = d.concat(w);\n                    }\n                  }\n                }\n              }\n            }\n            return d;\n          })(t, e);\n        };\n      function A(t, e) {\n        var n = [],\n          r = [];\n        return (\n          t.length &&\n            (function t(e, i) {\n              if (1 === e.length) n.push(e[0]), r.push(e[0]);\n              else {\n                for (var o = [], a = 0; a < e.length - 1; a++)\n                  0 === a && n.push(e[0]),\n                    a === e.length - 2 && r.push(e[a + 1]),\n                    (o[a] = [\n                      (1 - i) * e[a][0] + i * e[a + 1][0],\n                      (1 - i) * e[a][1] + i * e[a + 1][1],\n                    ]);\n                t(o, i);\n              }\n            })(t, e),\n          { left: n, right: r.reverse() }\n        );\n      }\n      var I = function (t, e, n) {\n          if (1 === n) return [[].concat(t)];\n          var r = [];\n          if (\"L\" === e[0] || \"C\" === e[0] || \"Q\" === e[0])\n            r = r.concat(\n              (function (t, e, n) {\n                var r = [[t[1], t[2]]];\n                n = n || 2;\n                var i = [];\n                \"A\" === e[0]\n                  ? (r.push(e[6]), r.push(e[7]))\n                  : \"C\" === e[0]\n                  ? (r.push([e[1], e[2]]),\n                    r.push([e[3], e[4]]),\n                    r.push([e[5], e[6]]))\n                  : \"S\" === e[0] || \"Q\" === e[0]\n                  ? (r.push([e[1], e[2]]), r.push([e[3], e[4]]))\n                  : r.push([e[1], e[2]]);\n                for (var o = r, a = 1 / n, s = 0; s < n - 1; s++) {\n                  var c = A(o, a / (1 - a * s));\n                  i.push(c.left), (o = c.right);\n                }\n                return (\n                  i.push(o),\n                  i.map(function (t) {\n                    var e = [];\n                    return (\n                      4 === t.length && (e.push(\"C\"), (e = e.concat(t[2]))),\n                      t.length >= 3 &&\n                        (3 === t.length && e.push(\"Q\"), (e = e.concat(t[1]))),\n                      2 === t.length && e.push(\"L\"),\n                      (e = e.concat(t[t.length - 1]))\n                    );\n                  })\n                );\n              })(t, e, n),\n            );\n          else {\n            var i = [].concat(t);\n            \"M\" === i[0] && (i[0] = \"L\");\n            for (var o = 0; o <= n - 1; o++) r.push(i);\n          }\n          return r;\n        },\n        T = function (t, e) {\n          if (1 === t.length) return t;\n          var n = t.length - 1,\n            r = e.length - 1,\n            i = n / r,\n            o = [];\n          if (1 === t.length && \"M\" === t[0][0]) {\n            for (var a = 0; a < r - n; a++) t.push(t[0]);\n            return t;\n          }\n          for (a = 0; a < r; a++) {\n            var s = Math.floor(i * a);\n            o[s] = (o[s] || 0) + 1;\n          }\n          var c = o.reduce(function (e, r, i) {\n            return i === n ? e.concat(t[n]) : e.concat(I(t[i], t[i + 1], r));\n          }, []);\n          return (\n            c.unshift(t[0]), (\"Z\" !== e[r] && \"z\" !== e[r]) || c.push(\"Z\"), c\n          );\n        },\n        N = function (t, e) {\n          if (t.length !== e.length) return !1;\n          var n = !0;\n          return (\n            Object(o.each)(t, function (t, r) {\n              if (t !== e[r]) return (n = !1), !1;\n            }),\n            n\n          );\n        };\n      function B(t, e, n) {\n        var r = null,\n          i = n;\n        return (\n          e < i && ((i = e), (r = \"add\")),\n          t < i && ((i = t), (r = \"del\")),\n          { type: r, min: i }\n        );\n      }\n      var L = function (t, e) {\n        var n = (function (t, e) {\n            var n,\n              r,\n              i = t.length,\n              o = e.length,\n              a = 0;\n            if (0 === i || 0 === o) return null;\n            for (var s = [], c = 0; c <= i; c++)\n              (s[c] = []), (s[c][0] = { min: c });\n            for (var u = 0; u <= o; u++) s[0][u] = { min: u };\n            for (c = 1; c <= i; c++) {\n              n = t[c - 1];\n              for (u = 1; u <= o; u++) {\n                (r = e[u - 1]), (a = N(n, r) ? 0 : 1);\n                var h = s[c - 1][u].min + 1,\n                  l = s[c][u - 1].min + 1,\n                  f = s[c - 1][u - 1].min + a;\n                s[c][u] = B(h, l, f);\n              }\n            }\n            return s;\n          })(t, e),\n          r = t.length,\n          i = e.length,\n          o = [],\n          a = 1,\n          s = 1;\n        if (n[r][i].min !== r) {\n          for (var c = 1; c <= r; c++) {\n            var u = n[c][c].min;\n            s = c;\n            for (var h = a; h <= i; h++)\n              n[c][h].min < u && ((u = n[c][h].min), (s = h));\n            (a = s),\n              n[c][a].type && o.push({ index: c - 1, type: n[c][a].type });\n          }\n          for (c = o.length - 1; c >= 0; c--)\n            (a = o[c].index),\n              \"add\" === o[c].type\n                ? t.splice(a, 0, [].concat(t[a]))\n                : t.splice(a, 1);\n        }\n        var l = i - (r = t.length);\n        if (r < i)\n          for (c = 0; c < l; c++)\n            \"z\" === t[r - 1][0] || \"Z\" === t[r - 1][0]\n              ? t.splice(r - 2, 0, t[r - 2])\n              : t.push(t[r - 1]),\n              (r += 1);\n        return t;\n      };\n      function D(t, e, n) {\n        for (\n          var r, i = [].concat(t), o = 1 / (n + 1), a = _(e)[0], s = 1;\n          s <= n;\n          s++\n        )\n          (o *= s),\n            0 === (r = Math.floor(t.length * o))\n              ? i.unshift([\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ])\n              : i.splice(r, 0, [\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ]);\n        return i;\n      }\n      function _(t) {\n        var e = [];\n        switch (t[0]) {\n          case \"M\":\n          case \"L\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"A\":\n            e.push([t[6], t[7]]);\n            break;\n          case \"Q\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"T\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"C\":\n            e.push([t[5], t[6]]), e.push([t[1], t[2]]), e.push([t[3], t[4]]);\n            break;\n          case \"S\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"H\":\n          case \"V\":\n            e.push([t[1], t[1]]);\n        }\n        return e;\n      }\n      var R = function (t, e) {\n          if (t.length <= 1) return t;\n          for (var n, r = 0; r < e.length; r++)\n            if (t[r][0] !== e[r][0])\n              switch (((n = _(t[r])), e[r][0])) {\n                case \"M\":\n                  t[r] = [\"M\"].concat(n[0]);\n                  break;\n                case \"L\":\n                  t[r] = [\"L\"].concat(n[0]);\n                  break;\n                case \"A\":\n                  (t[r] = [].concat(e[r])),\n                    (t[r][6] = n[0][0]),\n                    (t[r][7] = n[0][1]);\n                  break;\n                case \"Q\":\n                  if (n.length < 2) {\n                    if (!(r > 0)) {\n                      t[r] = e[r];\n                      break;\n                    }\n                    n = D(n, t[r - 1], 1);\n                  }\n                  t[r] = [\"Q\"].concat(\n                    n.reduce(function (t, e) {\n                      return t.concat(e);\n                    }, []),\n                  );\n                  break;\n                case \"T\":\n                  t[r] = [\"T\"].concat(n[0]);\n                  break;\n                case \"C\":\n                  if (n.length < 3) {\n                    if (!(r > 0)) {\n                      t[r] = e[r];\n                      break;\n                    }\n                    n = D(n, t[r - 1], 2);\n                  }\n                  t[r] = [\"C\"].concat(\n                    n.reduce(function (t, e) {\n                      return t.concat(e);\n                    }, []),\n                  );\n                  break;\n                case \"S\":\n                  if (n.length < 2) {\n                    if (!(r > 0)) {\n                      t[r] = e[r];\n                      break;\n                    }\n                    n = D(n, t[r - 1], 1);\n                  }\n                  t[r] = [\"S\"].concat(\n                    n.reduce(function (t, e) {\n                      return t.concat(e);\n                    }, []),\n                  );\n                  break;\n                default:\n                  t[r] = e[r];\n              }\n          return t;\n        },\n        F = (function () {\n          function t(t, e) {\n            (this.bubbles = !0),\n              (this.target = null),\n              (this.currentTarget = null),\n              (this.delegateTarget = null),\n              (this.delegateObject = null),\n              (this.defaultPrevented = !1),\n              (this.propagationStopped = !1),\n              (this.shape = null),\n              (this.fromShape = null),\n              (this.toShape = null),\n              (this.propagationPath = []),\n              (this.type = t),\n              (this.name = t),\n              (this.originalEvent = e),\n              (this.timeStamp = e.timeStamp);\n          }\n          return (\n            (t.prototype.preventDefault = function () {\n              (this.defaultPrevented = !0),\n                this.originalEvent.preventDefault &&\n                  this.originalEvent.preventDefault();\n            }),\n            (t.prototype.stopPropagation = function () {\n              this.propagationStopped = !0;\n            }),\n            (t.prototype.toString = function () {\n              return \"[Event (type=\" + this.type + \")]\";\n            }),\n            (t.prototype.save = function () {}),\n            (t.prototype.restore = function () {}),\n            t\n          );\n        })(),\n        Y = n(1),\n        X = n(73);\n      function z(t, e) {\n        var n = t.indexOf(e);\n        -1 !== n && t.splice(n, 1);\n      }\n      var W = \"undefined\" != typeof window && void 0 !== window.document;\n      function q(t, e) {\n        if (t.isCanvas()) return !0;\n        for (var n = e.getParent(), r = !1; n; ) {\n          if (n === t) {\n            r = !0;\n            break;\n          }\n          n = n.getParent();\n        }\n        return r;\n      }\n      function V(t) {\n        return t.cfg.visible && t.cfg.capture;\n      }\n      var G = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            n.destroyed = !1;\n            var r = n.getDefaultCfg();\n            return (n.cfg = Object(o.mix)(r, e)), n;\n          }\n          return (\n            Object(Y.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.set = function (t, e) {\n              this.cfg[t] = e;\n            }),\n            (e.prototype.destroy = function () {\n              (this.cfg = { destroyed: !0 }), this.off(), (this.destroyed = !0);\n            }),\n            e\n          );\n        })(X.a),\n        H = n(157);\n      function U(t, e) {\n        var n = [],\n          r = t[0],\n          i = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          c = t[5],\n          u = t[6],\n          h = t[7],\n          l = t[8],\n          f = e[0],\n          d = e[1],\n          p = e[2],\n          g = e[3],\n          v = e[4],\n          y = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          (n[0] = f * r + d * a + p * u),\n          (n[1] = f * i + d * s + p * h),\n          (n[2] = f * o + d * c + p * l),\n          (n[3] = g * r + v * a + y * u),\n          (n[4] = g * i + v * s + y * h),\n          (n[5] = g * o + v * c + y * l),\n          (n[6] = m * r + b * a + x * u),\n          (n[7] = m * i + b * s + x * h),\n          (n[8] = m * o + b * c + x * l),\n          n\n        );\n      }\n      function Z(t, e) {\n        var n = [],\n          r = e[0],\n          i = e[1];\n        return (\n          (n[0] = t[0] * r + t[3] * i + t[6]),\n          (n[1] = t[1] * r + t[4] * i + t[7]),\n          n\n        );\n      }\n      function K(t) {\n        var e = [],\n          n = t[0],\n          r = t[1],\n          i = t[2],\n          o = t[3],\n          a = t[4],\n          s = t[5],\n          c = t[6],\n          u = t[7],\n          h = t[8],\n          l = h * a - s * u,\n          f = -h * o + s * c,\n          d = u * o - a * c,\n          p = n * l + r * f + i * d;\n        return p\n          ? ((p = 1 / p),\n            (e[0] = l * p),\n            (e[1] = (-h * r + i * u) * p),\n            (e[2] = (s * r - i * a) * p),\n            (e[3] = f * p),\n            (e[4] = (h * n - i * c) * p),\n            (e[5] = (-s * n + i * o) * p),\n            (e[6] = d * p),\n            (e[7] = (-u * n + r * c) * p),\n            (e[8] = (a * n - r * o) * p),\n            e)\n          : null;\n      }\n      var $ = n(3).a.transform,\n        Q = [\"zIndex\", \"capture\", \"visible\", \"type\"],\n        J = [\"repeat\"];\n      function tt(t, e) {\n        var n = {},\n          r = e.attrs;\n        for (var i in t) n[i] = r[i];\n        return n;\n      }\n      function et(t, e) {\n        var n = {},\n          r = e.attr();\n        return (\n          Object(o.each)(t, function (t, e) {\n            -1 !== J.indexOf(e) || Object(o.isEqual)(r[e], t) || (n[e] = t);\n          }),\n          n\n        );\n      }\n      function nt(t, e) {\n        if (e.onFrame) return t;\n        var n = e.startTime,\n          r = e.delay,\n          i = e.duration,\n          a = Object.prototype.hasOwnProperty;\n        return (\n          Object(o.each)(t, function (t) {\n            n + r < t.startTime + t.delay + t.duration &&\n              i > t.delay &&\n              Object(o.each)(e.toAttrs, function (e, n) {\n                a.call(t.toAttrs, n) &&\n                  (delete t.toAttrs[n], delete t.fromAttrs[n]);\n              });\n          }),\n          t\n        );\n      }\n      var rt = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            n.attrs = {};\n            var r = n.getDefaultAttrs();\n            return (\n              Object(o.mix)(r, e.attrs),\n              (n.attrs = r),\n              n.initAttrs(r),\n              n.initAnimate(),\n              n\n            );\n          }\n          return (\n            Object(Y.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { visible: !0, capture: !0, zIndex: 0 };\n            }),\n            (e.prototype.getDefaultAttrs = function () {\n              return { matrix: this.getDefaultMatrix(), opacity: 1 };\n            }),\n            (e.prototype.onCanvasChange = function (t) {}),\n            (e.prototype.initAttrs = function (t) {}),\n            (e.prototype.initAnimate = function () {\n              this.set(\"animable\", !0), this.set(\"animating\", !1);\n            }),\n            (e.prototype.isGroup = function () {\n              return !1;\n            }),\n            (e.prototype.getParent = function () {\n              return this.get(\"parent\");\n            }),\n            (e.prototype.getCanvas = function () {\n              return this.get(\"canvas\");\n            }),\n            (e.prototype.attr = function () {\n              for (var t, e = [], n = 0; n < arguments.length; n++)\n                e[n] = arguments[n];\n              var r = e[0],\n                i = e[1];\n              if (!r) return this.attrs;\n              if (Object(o.isObject)(r)) {\n                for (var a in r) this.setAttr(a, r[a]);\n                return this.afterAttrsChange(r), this;\n              }\n              return 2 === e.length\n                ? (this.setAttr(r, i),\n                  this.afterAttrsChange((((t = {})[r] = i), t)),\n                  this)\n                : this.attrs[r];\n            }),\n            (e.prototype.isClipped = function (t, e) {\n              var n = this.getClip();\n              return n && !n.isHit(t, e);\n            }),\n            (e.prototype.setAttr = function (t, e) {\n              var n = this.attrs[t];\n              n !== e && ((this.attrs[t] = e), this.onAttrChange(t, e, n));\n            }),\n            (e.prototype.onAttrChange = function (t, e, n) {\n              \"matrix\" === t && this.set(\"totalMatrix\", null);\n            }),\n            (e.prototype.afterAttrsChange = function (t) {\n              if (this.cfg.isClipShape) {\n                var e = this.cfg.applyTo;\n                e && e.onCanvasChange(\"clip\");\n              } else this.onCanvasChange(\"attr\");\n            }),\n            (e.prototype.show = function () {\n              return this.set(\"visible\", !0), this.onCanvasChange(\"show\"), this;\n            }),\n            (e.prototype.hide = function () {\n              return this.set(\"visible\", !1), this.onCanvasChange(\"hide\"), this;\n            }),\n            (e.prototype.setZIndex = function (t) {\n              this.set(\"zIndex\", t);\n              var e = this.getParent();\n              return e && e.sort(), this;\n            }),\n            (e.prototype.toFront = function () {\n              var t = this.getParent();\n              if (t) {\n                var e = t.getChildren(),\n                  n = (this.get(\"el\"), e.indexOf(this));\n                e.splice(n, 1), e.push(this), this.onCanvasChange(\"zIndex\");\n              }\n            }),\n            (e.prototype.toBack = function () {\n              var t = this.getParent();\n              if (t) {\n                var e = t.getChildren(),\n                  n = (this.get(\"el\"), e.indexOf(this));\n                e.splice(n, 1), e.unshift(this), this.onCanvasChange(\"zIndex\");\n              }\n            }),\n            (e.prototype.remove = function (t) {\n              void 0 === t && (t = !0);\n              var e = this.getParent();\n              e\n                ? (z(e.getChildren(), this),\n                  e.get(\"clearing\") || this.onCanvasChange(\"remove\"))\n                : this.onCanvasChange(\"remove\"),\n                t && this.destroy();\n            }),\n            (e.prototype.resetMatrix = function () {\n              this.attr(\"matrix\", this.getDefaultMatrix()),\n                this.onCanvasChange(\"matrix\");\n            }),\n            (e.prototype.getMatrix = function () {\n              return this.attr(\"matrix\");\n            }),\n            (e.prototype.setMatrix = function (t) {\n              this.attr(\"matrix\", t), this.onCanvasChange(\"matrix\");\n            }),\n            (e.prototype.getTotalMatrix = function () {\n              var t = this.cfg.totalMatrix;\n              if (!t) {\n                var e = this.attr(\"matrix\"),\n                  n = this.cfg.parentMatrix;\n                (t = n && e ? U(n, e) : e || n), this.set(\"totalMatrix\", t);\n              }\n              return t;\n            }),\n            (e.prototype.applyMatrix = function (t) {\n              var e = this.attr(\"matrix\"),\n                n = null;\n              (n = t && e ? U(t, e) : e || t),\n                this.set(\"totalMatrix\", n),\n                this.set(\"parentMatrix\", t);\n            }),\n            (e.prototype.getDefaultMatrix = function () {\n              return null;\n            }),\n            (e.prototype.applyToMatrix = function (t) {\n              var e = this.attr(\"matrix\");\n              return e ? Z(e, t) : t;\n            }),\n            (e.prototype.invertFromMatrix = function (t) {\n              var e = this.attr(\"matrix\");\n              if (e) {\n                var n = K(e);\n                if (n) return Z(n, t);\n              }\n              return t;\n            }),\n            (e.prototype.setClip = function (t) {\n              var e = this.getCanvas(),\n                n = null;\n              if (t) {\n                var r = this.getShapeBase()[Object(o.upperFirst)(t.type)];\n                r &&\n                  (n = new r({\n                    type: t.type,\n                    isClipShape: !0,\n                    applyTo: this,\n                    attrs: t.attrs,\n                    canvas: e,\n                  }));\n              }\n              return this.set(\"clipShape\", n), this.onCanvasChange(\"clip\"), n;\n            }),\n            (e.prototype.getClip = function () {\n              var t = this.cfg.clipShape;\n              return t || null;\n            }),\n            (e.prototype.clone = function () {\n              var t = this,\n                e = this.attrs,\n                n = {};\n              Object(o.each)(e, function (t, r) {\n                Object(o.isArray)(e[r])\n                  ? (n[r] = (function (t) {\n                      for (var e = [], n = 0; n < t.length; n++)\n                        Object(o.isArray)(t[n])\n                          ? e.push([].concat(t[n]))\n                          : e.push(t[n]);\n                      return e;\n                    })(e[r]))\n                  : (n[r] = e[r]);\n              });\n              var r = new (0, this.constructor)({ attrs: n });\n              return (\n                Object(o.each)(Q, function (e) {\n                  r.set(e, t.get(e));\n                }),\n                r\n              );\n            }),\n            (e.prototype.destroy = function () {\n              this.destroyed ||\n                ((this.attrs = {}), t.prototype.destroy.call(this));\n            }),\n            (e.prototype.isAnimatePaused = function () {\n              return this.get(\"_pause\").isPaused;\n            }),\n            (e.prototype.animate = function () {\n              for (var t = [], e = 0; e < arguments.length; e++)\n                t[e] = arguments[e];\n              if (this.get(\"timeline\") || this.get(\"canvas\")) {\n                this.set(\"animating\", !0);\n                var n = this.get(\"timeline\");\n                n ||\n                  ((n = this.get(\"canvas\").get(\"timeline\")),\n                  this.set(\"timeline\", n));\n                var r = this.get(\"animations\") || [];\n                n.timer || n.initTimer();\n                var i,\n                  a,\n                  s,\n                  c,\n                  u,\n                  h = t[0],\n                  l = t[1],\n                  f = t[2],\n                  d = void 0 === f ? \"easeLinear\" : f,\n                  p = t[3],\n                  g = void 0 === p ? o.noop : p,\n                  v = t[4],\n                  y = void 0 === v ? 0 : v;\n                Object(o.isFunction)(h)\n                  ? ((i = h), (h = {}))\n                  : Object(o.isObject)(h) &&\n                    h.onFrame &&\n                    ((i = h.onFrame), (a = h.repeat)),\n                  Object(o.isObject)(l)\n                    ? ((l = (u = l).duration),\n                      (d = u.easing || \"easeLinear\"),\n                      (y = u.delay || 0),\n                      (a = u.repeat || a || !1),\n                      (g = u.callback || o.noop),\n                      (s = u.pauseCallback || o.noop),\n                      (c = u.resumeCallback || o.noop))\n                    : (Object(o.isNumber)(g) && ((y = g), (g = null)),\n                      Object(o.isFunction)(d)\n                        ? ((g = d), (d = \"easeLinear\"))\n                        : (d = d || \"easeLinear\"));\n                var m = et(h, this),\n                  b = {\n                    fromAttrs: tt(m, this),\n                    toAttrs: m,\n                    duration: l,\n                    easing: d,\n                    repeat: a,\n                    callback: g,\n                    pauseCallback: s,\n                    resumeCallback: c,\n                    delay: y,\n                    startTime: n.getTime(),\n                    id: Object(o.uniqueId)(),\n                    onFrame: i,\n                    pathFormatted: !1,\n                  };\n                r.length > 0 ? (r = nt(r, b)) : n.addAnimator(this),\n                  r.push(b),\n                  this.set(\"animations\", r),\n                  this.set(\"_pause\", { isPaused: !1 });\n              }\n            }),\n            (e.prototype.stopAnimate = function (t) {\n              var e = this;\n              void 0 === t && (t = !0);\n              var n = this.get(\"animations\");\n              Object(o.each)(n, function (n) {\n                t && (n.onFrame ? e.attr(n.onFrame(1)) : e.attr(n.toAttrs)),\n                  n.callback && n.callback();\n              }),\n                this.set(\"animating\", !1),\n                this.set(\"animations\", []);\n            }),\n            (e.prototype.pauseAnimate = function () {\n              var t = this.get(\"timeline\"),\n                e = this.get(\"animations\"),\n                n = t.getTime();\n              return (\n                Object(o.each)(e, function (t) {\n                  (t._paused = !0),\n                    (t._pauseTime = n),\n                    t.pauseCallback && t.pauseCallback();\n                }),\n                this.set(\"_pause\", { isPaused: !0, pauseTime: n }),\n                this\n              );\n            }),\n            (e.prototype.resumeAnimate = function () {\n              var t = this.get(\"timeline\").getTime(),\n                e = this.get(\"animations\"),\n                n = this.get(\"_pause\").pauseTime;\n              return (\n                Object(o.each)(e, function (e) {\n                  (e.startTime = e.startTime + (t - n)),\n                    (e._paused = !1),\n                    (e._pauseTime = null),\n                    e.resumeCallback && e.resumeCallback();\n                }),\n                this.set(\"_pause\", { isPaused: !1 }),\n                this.set(\"animations\", e),\n                this\n              );\n            }),\n            (e.prototype.emitDelegation = function (t, e) {\n              var n,\n                r = this,\n                i = e.propagationPath;\n              this.getEvents();\n              \"mouseenter\" === t\n                ? (n = e.fromShape)\n                : \"mouseleave\" === t && (n = e.toShape);\n              for (\n                var a = function (t) {\n                    var a = i[t],\n                      c = a.get(\"name\");\n                    if (c) {\n                      if (\n                        (a.isGroup() || (a.isCanvas && a.isCanvas())) &&\n                        n &&\n                        q(a, n)\n                      )\n                        return \"break\";\n                      Object(o.isArray)(c)\n                        ? Object(o.each)(c, function (t) {\n                            r.emitDelegateEvent(a, t, e);\n                          })\n                        : s.emitDelegateEvent(a, c, e);\n                    }\n                  },\n                  s = this,\n                  c = 0;\n                c < i.length;\n                c++\n              ) {\n                if (\"break\" === a(c)) break;\n              }\n            }),\n            (e.prototype.emitDelegateEvent = function (t, e, n) {\n              var r = this.getEvents(),\n                i = e + \":\" + n.type;\n              (r[i] || r[\"*\"]) &&\n                ((n.name = i),\n                (n.currentTarget = t),\n                (n.delegateTarget = this),\n                (n.delegateObject = t.get(\"delegateObject\")),\n                this.emit(i, n));\n            }),\n            (e.prototype.translate = function (t, e) {\n              void 0 === t && (t = 0), void 0 === e && (e = 0);\n              var n = this.getMatrix(),\n                r = $(n, [[\"t\", t, e]]);\n              return this.setMatrix(r), this;\n            }),\n            (e.prototype.move = function (t, e) {\n              var n = this.attr(\"x\") || 0,\n                r = this.attr(\"y\") || 0;\n              return this.translate(t - n, e - r), this;\n            }),\n            (e.prototype.moveTo = function (t, e) {\n              return this.move(t, e);\n            }),\n            (e.prototype.scale = function (t, e) {\n              var n = this.getMatrix(),\n                r = $(n, [[\"s\", t, e || t]]);\n              return this.setMatrix(r), this;\n            }),\n            (e.prototype.rotate = function (t) {\n              var e = this.getMatrix(),\n                n = $(e, [[\"r\", t]]);\n              return this.setMatrix(n), this;\n            }),\n            (e.prototype.rotateAtStart = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = this.getMatrix(),\n                o = $(i, [\n                  [\"t\", -n, -r],\n                  [\"r\", t],\n                  [\"t\", n, r],\n                ]);\n              return this.setMatrix(o), this;\n            }),\n            (e.prototype.rotateAtPoint = function (t, e, n) {\n              var r = this.getMatrix(),\n                i = $(r, [\n                  [\"t\", -t, -e],\n                  [\"r\", n],\n                  [\"t\", t, e],\n                ]);\n              return this.setMatrix(i), this;\n            }),\n            e\n          );\n        })(G),\n        it = {};\n      var ot = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(Y.c)(e, t),\n          (e.prototype.isCanvas = function () {\n            return !1;\n          }),\n          (e.prototype.getBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              i = [],\n              a = [],\n              s = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              s.length > 0\n                ? (Object(o.each)(s, function (t) {\n                    var e = t.getBBox();\n                    i.push(e.minX, e.maxX), a.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(o.min)(i)),\n                  (e = Object(o.max)(i)),\n                  (n = Object(o.min)(a)),\n                  (r = Object(o.max)(a)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getCanvasBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              i = [],\n              a = [],\n              s = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              s.length > 0\n                ? (Object(o.each)(s, function (t) {\n                    var e = t.getCanvasBBox();\n                    i.push(e.minX, e.maxX), a.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(o.min)(i)),\n                  (e = Object(o.max)(i)),\n                  (n = Object(o.min)(a)),\n                  (r = Object(o.max)(a)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getDefaultCfg = function () {\n            var e = t.prototype.getDefaultCfg.call(this);\n            return (e.children = []), e;\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            if (\n              (t.prototype.onAttrChange.call(this, e, n, r), \"matrix\" === e)\n            ) {\n              var i = this.getTotalMatrix();\n              this._applyChildrenMarix(i);\n            }\n          }),\n          (e.prototype.applyMatrix = function (e) {\n            var n = this.getTotalMatrix();\n            t.prototype.applyMatrix.call(this, e);\n            var r = this.getTotalMatrix();\n            r !== n && this._applyChildrenMarix(r);\n          }),\n          (e.prototype._applyChildrenMarix = function (t) {\n            var e = this.getChildren();\n            Object(o.each)(e, function (e) {\n              e.applyMatrix(t);\n            });\n          }),\n          (e.prototype.addShape = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n = t[0],\n              r = t[1];\n            Object(o.isObject)(n) ? (r = n) : (r.type = n);\n            var i = it[r.type];\n            i || ((i = Object(o.upperFirst)(r.type)), (it[r.type] = i));\n            var a = this.getShapeBase(),\n              s = new a[i](r);\n            return this.add(s), s;\n          }),\n          (e.prototype.addGroup = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n,\n              r = t[0],\n              i = t[1];\n            if (Object(o.isFunction)(r)) n = new r(i || { parent: this });\n            else {\n              var a = r || {},\n                s = this.getGroupBase();\n              n = new s(a);\n            }\n            return this.add(n), n;\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.isCanvas() ? this : this.get(\"canvas\");\n          }),\n          (e.prototype.getShape = function (t, e, n) {\n            if (!V(this)) return null;\n            var r,\n              i = this.getChildren();\n            if (this.isCanvas()) r = this._findShape(i, t, e, n);\n            else {\n              var o = [t, e, 1];\n              (o = this.invertFromMatrix(o)),\n                this.isClipped(o[0], o[1]) ||\n                  (r = this._findShape(i, o[0], o[1], n));\n            }\n            return r;\n          }),\n          (e.prototype._findShape = function (t, e, n, r) {\n            for (var i = null, o = t.length - 1; o >= 0; o--) {\n              var a = t[o];\n              if (\n                (V(a) &&\n                  (a.isGroup()\n                    ? (i = a.getShape(e, n, r))\n                    : a.isHit(e, n) && (i = a)),\n                i)\n              )\n                break;\n            }\n            return i;\n          }),\n          (e.prototype.add = function (t) {\n            var e = this.getCanvas(),\n              n = this.getChildren(),\n              r = this.get(\"timeline\"),\n              i = t.getParent();\n            i &&\n              (function (t, e, n) {\n                void 0 === n && (n = !0),\n                  n\n                    ? e.destroy()\n                    : (e.set(\"parent\", null), e.set(\"canvas\", null)),\n                  z(t.getChildren(), e);\n              })(i, t, !1),\n              t.set(\"parent\", this),\n              e &&\n                (function t(e, n) {\n                  if ((e.set(\"canvas\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, e),\n              r &&\n                (function t(e, n) {\n                  if ((e.set(\"timeline\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, r),\n              n.push(t),\n              t.onCanvasChange(\"add\"),\n              this._applyElementMatrix(t);\n          }),\n          (e.prototype._applyElementMatrix = function (t) {\n            var e = this.getTotalMatrix();\n            e && t.applyMatrix(e);\n          }),\n          (e.prototype.getChildren = function () {\n            return this.get(\"children\");\n          }),\n          (e.prototype.sort = function () {\n            var t,\n              e = this.getChildren();\n            Object(o.each)(e, function (t, e) {\n              return (t._INDEX = e), t;\n            }),\n              e.sort(\n                ((t = function (t, e) {\n                  return t.get(\"zIndex\") - e.get(\"zIndex\");\n                }),\n                function (e, n) {\n                  var r = t(e, n);\n                  return 0 === r ? e._INDEX - n._INDEX : r;\n                }),\n              ),\n              this.onCanvasChange(\"sort\");\n          }),\n          (e.prototype.clear = function () {\n            if ((this.set(\"clearing\", !0), !this.destroyed)) {\n              for (var t = this.getChildren(), e = t.length - 1; e >= 0; e--)\n                t[e].destroy();\n              this.set(\"children\", []),\n                this.onCanvasChange(\"clear\"),\n                this.set(\"clearing\", !1);\n            }\n          }),\n          (e.prototype.destroy = function () {\n            this.get(\"destroyed\") ||\n              (this.clear(), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.getFirst = function () {\n            return this.getChildByIndex(0);\n          }),\n          (e.prototype.getLast = function () {\n            var t = this.getChildren();\n            return this.getChildByIndex(t.length - 1);\n          }),\n          (e.prototype.getChildByIndex = function (t) {\n            return this.getChildren()[t];\n          }),\n          (e.prototype.getCount = function () {\n            return this.getChildren().length;\n          }),\n          (e.prototype.contain = function (t) {\n            return this.getChildren().indexOf(t) > -1;\n          }),\n          (e.prototype.removeChild = function (t, e) {\n            void 0 === e && (e = !0), this.contain(t) && t.remove(e);\n          }),\n          (e.prototype.findAll = function (t) {\n            var e = [],\n              n = this.getChildren();\n            return (\n              Object(o.each)(n, function (n) {\n                t(n) && e.push(n), n.isGroup() && (e = e.concat(n.findAll(t)));\n              }),\n              e\n            );\n          }),\n          (e.prototype.find = function (t) {\n            var e = null,\n              n = this.getChildren();\n            return (\n              Object(o.each)(n, function (n) {\n                if ((t(n) ? (e = n) : n.isGroup() && (e = n.find(t)), e))\n                  return !1;\n              }),\n              e\n            );\n          }),\n          (e.prototype.findById = function (t) {\n            return this.find(function (e) {\n              return e.get(\"id\") === t;\n            });\n          }),\n          (e.prototype.findByClassName = function (t) {\n            return this.find(function (e) {\n              return e.get(\"className\") === t;\n            });\n          }),\n          (e.prototype.findAllByName = function (t) {\n            return this.findAll(function (e) {\n              return e.get(\"name\") === t;\n            });\n          }),\n          e\n        );\n      })(rt);\n      function at(t) {\n        return (at =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var st,\n        ct,\n        ut = 0,\n        ht = 0,\n        lt = 0,\n        ft = 0,\n        dt = 0,\n        pt = 0,\n        gt =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : at(performance)) && performance.now\n            ? performance\n            : Date,\n        vt =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : at(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function yt() {\n        return dt || (vt(mt), (dt = gt.now() + pt));\n      }\n      function mt() {\n        dt = 0;\n      }\n      function bt() {\n        this._call = this._time = this._next = null;\n      }\n      function xt(t, e, n) {\n        var r = new bt();\n        return r.restart(t, e, n), r;\n      }\n      function wt() {\n        (dt = (ft = gt.now()) + pt), (ut = ht = 0);\n        try {\n          !(function () {\n            yt(), ++ut;\n            for (var t, e = st; e; )\n              (t = dt - e._time) >= 0 && e._call.call(null, t), (e = e._next);\n            --ut;\n          })();\n        } finally {\n          (ut = 0),\n            (function () {\n              var t,\n                e,\n                n = st,\n                r = 1 / 0;\n              for (; n; )\n                n._call\n                  ? (r > n._time && (r = n._time), (t = n), (n = n._next))\n                  : ((e = n._next),\n                    (n._next = null),\n                    (n = t ? (t._next = e) : (st = e)));\n              (ct = t), Ot(r);\n            })(),\n            (dt = 0);\n        }\n      }\n      function St() {\n        var t = gt.now(),\n          e = t - ft;\n        e > 1e3 && ((pt -= e), (ft = t));\n      }\n      function Ot(t) {\n        ut ||\n          (ht && (ht = clearTimeout(ht)),\n          t - dt > 24\n            ? (t < 1 / 0 && (ht = setTimeout(wt, t - gt.now() - pt)),\n              lt && (lt = clearInterval(lt)))\n            : (lt || ((ft = gt.now()), (lt = setInterval(St, 1e3))),\n              (ut = 1),\n              vt(wt)));\n      }\n      bt.prototype = xt.prototype = {\n        constructor: bt,\n        restart: function (t, e, n) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (n = (null == n ? yt() : +n) + (null == e ? 0 : +e)),\n            this._next ||\n              ct === this ||\n              (ct ? (ct._next = this) : (st = this), (ct = this)),\n            (this._call = t),\n            (this._time = n),\n            Ot();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), Ot());\n        },\n      };\n      var Mt = function (t, e, n) {\n        (t.prototype = e.prototype = n), (n.constructor = t);\n      };\n      function kt(t, e) {\n        var n = Object.create(t.prototype);\n        for (var r in e) n[r] = e[r];\n        return n;\n      }\n      function Ct() {}\n      var Et = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n        jt = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n        Pt = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n        At = /^#([0-9a-f]{3,8})$/,\n        It = new RegExp(\"^rgb\\\\(\" + [Et, Et, Et] + \"\\\\)$\"),\n        Tt = new RegExp(\"^rgb\\\\(\" + [Pt, Pt, Pt] + \"\\\\)$\"),\n        Nt = new RegExp(\"^rgba\\\\(\" + [Et, Et, Et, jt] + \"\\\\)$\"),\n        Bt = new RegExp(\"^rgba\\\\(\" + [Pt, Pt, Pt, jt] + \"\\\\)$\"),\n        Lt = new RegExp(\"^hsl\\\\(\" + [jt, Pt, Pt] + \"\\\\)$\"),\n        Dt = new RegExp(\"^hsla\\\\(\" + [jt, Pt, Pt, jt] + \"\\\\)$\"),\n        _t = {\n          aliceblue: 15792383,\n          antiquewhite: 16444375,\n          aqua: 65535,\n          aquamarine: 8388564,\n          azure: 15794175,\n          beige: 16119260,\n          bisque: 16770244,\n          black: 0,\n          blanchedalmond: 16772045,\n          blue: 255,\n          blueviolet: 9055202,\n          brown: 10824234,\n          burlywood: 14596231,\n          cadetblue: 6266528,\n          chartreuse: 8388352,\n          chocolate: 13789470,\n          coral: 16744272,\n          cornflowerblue: 6591981,\n          cornsilk: 16775388,\n          crimson: 14423100,\n          cyan: 65535,\n          darkblue: 139,\n          darkcyan: 35723,\n          darkgoldenrod: 12092939,\n          darkgray: 11119017,\n          darkgreen: 25600,\n          darkgrey: 11119017,\n          darkkhaki: 12433259,\n          darkmagenta: 9109643,\n          darkolivegreen: 5597999,\n          darkorange: 16747520,\n          darkorchid: 10040012,\n          darkred: 9109504,\n          darksalmon: 15308410,\n          darkseagreen: 9419919,\n          darkslateblue: 4734347,\n          darkslategray: 3100495,\n          darkslategrey: 3100495,\n          darkturquoise: 52945,\n          darkviolet: 9699539,\n          deeppink: 16716947,\n          deepskyblue: 49151,\n          dimgray: 6908265,\n          dimgrey: 6908265,\n          dodgerblue: 2003199,\n          firebrick: 11674146,\n          floralwhite: 16775920,\n          forestgreen: 2263842,\n          fuchsia: 16711935,\n          gainsboro: 14474460,\n          ghostwhite: 16316671,\n          gold: 16766720,\n          goldenrod: 14329120,\n          gray: 8421504,\n          green: 32768,\n          greenyellow: 11403055,\n          grey: 8421504,\n          honeydew: 15794160,\n          hotpink: 16738740,\n          indianred: 13458524,\n          indigo: 4915330,\n          ivory: 16777200,\n          khaki: 15787660,\n          lavender: 15132410,\n          lavenderblush: 16773365,\n          lawngreen: 8190976,\n          lemonchiffon: 16775885,\n          lightblue: 11393254,\n          lightcoral: 15761536,\n          lightcyan: 14745599,\n          lightgoldenrodyellow: 16448210,\n          lightgray: 13882323,\n          lightgreen: 9498256,\n          lightgrey: 13882323,\n          lightpink: 16758465,\n          lightsalmon: 16752762,\n          lightseagreen: 2142890,\n          lightskyblue: 8900346,\n          lightslategray: 7833753,\n          lightslategrey: 7833753,\n          lightsteelblue: 11584734,\n          lightyellow: 16777184,\n          lime: 65280,\n          limegreen: 3329330,\n          linen: 16445670,\n          magenta: 16711935,\n          maroon: 8388608,\n          mediumaquamarine: 6737322,\n          mediumblue: 205,\n          mediumorchid: 12211667,\n          mediumpurple: 9662683,\n          mediumseagreen: 3978097,\n          mediumslateblue: 8087790,\n          mediumspringgreen: 64154,\n          mediumturquoise: 4772300,\n          mediumvioletred: 13047173,\n          midnightblue: 1644912,\n          mintcream: 16121850,\n          mistyrose: 16770273,\n          moccasin: 16770229,\n          navajowhite: 16768685,\n          navy: 128,\n          oldlace: 16643558,\n          olive: 8421376,\n          olivedrab: 7048739,\n          orange: 16753920,\n          orangered: 16729344,\n          orchid: 14315734,\n          palegoldenrod: 15657130,\n          palegreen: 10025880,\n          paleturquoise: 11529966,\n          palevioletred: 14381203,\n          papayawhip: 16773077,\n          peachpuff: 16767673,\n          peru: 13468991,\n          pink: 16761035,\n          plum: 14524637,\n          powderblue: 11591910,\n          purple: 8388736,\n          rebeccapurple: 6697881,\n          red: 16711680,\n          rosybrown: 12357519,\n          royalblue: 4286945,\n          saddlebrown: 9127187,\n          salmon: 16416882,\n          sandybrown: 16032864,\n          seagreen: 3050327,\n          seashell: 16774638,\n          sienna: 10506797,\n          silver: 12632256,\n          skyblue: 8900331,\n          slateblue: 6970061,\n          slategray: 7372944,\n          slategrey: 7372944,\n          snow: 16775930,\n          springgreen: 65407,\n          steelblue: 4620980,\n          tan: 13808780,\n          teal: 32896,\n          thistle: 14204888,\n          tomato: 16737095,\n          turquoise: 4251856,\n          violet: 15631086,\n          wheat: 16113331,\n          white: 16777215,\n          whitesmoke: 16119285,\n          yellow: 16776960,\n          yellowgreen: 10145074,\n        };\n      function Rt() {\n        return this.rgb().formatHex();\n      }\n      function Ft() {\n        return this.rgb().formatRgb();\n      }\n      function Yt(t) {\n        var e, n;\n        return (\n          (t = (t + \"\").trim().toLowerCase()),\n          (e = At.exec(t))\n            ? ((n = e[1].length),\n              (e = parseInt(e[1], 16)),\n              6 === n\n                ? Xt(e)\n                : 3 === n\n                ? new Vt(\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    ((15 & e) << 4) | (15 & e),\n                    1,\n                  )\n                : 8 === n\n                ? zt(\n                    (e >> 24) & 255,\n                    (e >> 16) & 255,\n                    (e >> 8) & 255,\n                    (255 & e) / 255,\n                  )\n                : 4 === n\n                ? zt(\n                    ((e >> 12) & 15) | ((e >> 8) & 240),\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    (((15 & e) << 4) | (15 & e)) / 255,\n                  )\n                : null)\n            : (e = It.exec(t))\n            ? new Vt(e[1], e[2], e[3], 1)\n            : (e = Tt.exec(t))\n            ? new Vt(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                1,\n              )\n            : (e = Nt.exec(t))\n            ? zt(e[1], e[2], e[3], e[4])\n            : (e = Bt.exec(t))\n            ? zt(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                e[4],\n              )\n            : (e = Lt.exec(t))\n            ? Zt(e[1], e[2] / 100, e[3] / 100, 1)\n            : (e = Dt.exec(t))\n            ? Zt(e[1], e[2] / 100, e[3] / 100, e[4])\n            : _t.hasOwnProperty(t)\n            ? Xt(_t[t])\n            : \"transparent\" === t\n            ? new Vt(NaN, NaN, NaN, 0)\n            : null\n        );\n      }\n      function Xt(t) {\n        return new Vt((t >> 16) & 255, (t >> 8) & 255, 255 & t, 1);\n      }\n      function zt(t, e, n, r) {\n        return r <= 0 && (t = e = n = NaN), new Vt(t, e, n, r);\n      }\n      function Wt(t) {\n        return (\n          t instanceof Ct || (t = Yt(t)),\n          t ? new Vt((t = t.rgb()).r, t.g, t.b, t.opacity) : new Vt()\n        );\n      }\n      function qt(t, e, n, r) {\n        return 1 === arguments.length\n          ? Wt(t)\n          : new Vt(t, e, n, null == r ? 1 : r);\n      }\n      function Vt(t, e, n, r) {\n        (this.r = +t), (this.g = +e), (this.b = +n), (this.opacity = +r);\n      }\n      function Gt() {\n        return \"#\" + Ut(this.r) + Ut(this.g) + Ut(this.b);\n      }\n      function Ht() {\n        var t = this.opacity;\n        return (\n          (1 === (t = isNaN(t) ? 1 : Math.max(0, Math.min(1, t)))\n            ? \"rgb(\"\n            : \"rgba(\") +\n          Math.max(0, Math.min(255, Math.round(this.r) || 0)) +\n          \", \" +\n          Math.max(0, Math.min(255, Math.round(this.g) || 0)) +\n          \", \" +\n          Math.max(0, Math.min(255, Math.round(this.b) || 0)) +\n          (1 === t ? \")\" : \", \" + t + \")\")\n        );\n      }\n      function Ut(t) {\n        return (\n          ((t = Math.max(0, Math.min(255, Math.round(t) || 0))) < 16\n            ? \"0\"\n            : \"\") + t.toString(16)\n        );\n      }\n      function Zt(t, e, n, r) {\n        return (\n          r <= 0\n            ? (t = e = n = NaN)\n            : n <= 0 || n >= 1\n            ? (t = e = NaN)\n            : e <= 0 && (t = NaN),\n          new $t(t, e, n, r)\n        );\n      }\n      function Kt(t) {\n        if (t instanceof $t) return new $t(t.h, t.s, t.l, t.opacity);\n        if ((t instanceof Ct || (t = Yt(t)), !t)) return new $t();\n        if (t instanceof $t) return t;\n        var e = (t = t.rgb()).r / 255,\n          n = t.g / 255,\n          r = t.b / 255,\n          i = Math.min(e, n, r),\n          o = Math.max(e, n, r),\n          a = NaN,\n          s = o - i,\n          c = (o + i) / 2;\n        return (\n          s\n            ? ((a =\n                e === o\n                  ? (n - r) / s + 6 * (n < r)\n                  : n === o\n                  ? (r - e) / s + 2\n                  : (e - n) / s + 4),\n              (s /= c < 0.5 ? o + i : 2 - o - i),\n              (a *= 60))\n            : (s = c > 0 && c < 1 ? 0 : a),\n          new $t(a, s, c, t.opacity)\n        );\n      }\n      function $t(t, e, n, r) {\n        (this.h = +t), (this.s = +e), (this.l = +n), (this.opacity = +r);\n      }\n      function Qt(t, e, n) {\n        return (\n          255 *\n          (t < 60\n            ? e + ((n - e) * t) / 60\n            : t < 180\n            ? n\n            : t < 240\n            ? e + ((n - e) * (240 - t)) / 60\n            : e)\n        );\n      }\n      function Jt(t, e, n, r, i) {\n        var o = t * t,\n          a = o * t;\n        return (\n          ((1 - 3 * t + 3 * o - a) * e +\n            (4 - 6 * o + 3 * a) * n +\n            (1 + 3 * t + 3 * o - 3 * a) * r +\n            a * i) /\n          6\n        );\n      }\n      Mt(Ct, Yt, {\n        copy: function (t) {\n          return Object.assign(new this.constructor(), this, t);\n        },\n        displayable: function () {\n          return this.rgb().displayable();\n        },\n        hex: Rt,\n        formatHex: Rt,\n        formatHsl: function () {\n          return Kt(this).formatHsl();\n        },\n        formatRgb: Ft,\n        toString: Ft,\n      }),\n        Mt(\n          Vt,\n          qt,\n          kt(Ct, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new Vt(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new Vt(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              return this;\n            },\n            displayable: function () {\n              return (\n                -0.5 <= this.r &&\n                this.r < 255.5 &&\n                -0.5 <= this.g &&\n                this.g < 255.5 &&\n                -0.5 <= this.b &&\n                this.b < 255.5 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            hex: Gt,\n            formatHex: Gt,\n            formatRgb: Ht,\n            toString: Ht,\n          }),\n        ),\n        Mt(\n          $t,\n          function (t, e, n, r) {\n            return 1 === arguments.length\n              ? Kt(t)\n              : new $t(t, e, n, null == r ? 1 : r);\n          },\n          kt(Ct, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new $t(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new $t(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              var t = (this.h % 360) + 360 * (this.h < 0),\n                e = isNaN(t) || isNaN(this.s) ? 0 : this.s,\n                n = this.l,\n                r = n + (n < 0.5 ? n : 1 - n) * e,\n                i = 2 * n - r;\n              return new Vt(\n                Qt(t >= 240 ? t - 240 : t + 120, i, r),\n                Qt(t, i, r),\n                Qt(t < 120 ? t + 240 : t - 120, i, r),\n                this.opacity,\n              );\n            },\n            displayable: function () {\n              return (\n                ((0 <= this.s && this.s <= 1) || isNaN(this.s)) &&\n                0 <= this.l &&\n                this.l <= 1 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            formatHsl: function () {\n              var t = this.opacity;\n              return (\n                (1 === (t = isNaN(t) ? 1 : Math.max(0, Math.min(1, t)))\n                  ? \"hsl(\"\n                  : \"hsla(\") +\n                (this.h || 0) +\n                \", \" +\n                100 * (this.s || 0) +\n                \"%, \" +\n                100 * (this.l || 0) +\n                \"%\" +\n                (1 === t ? \")\" : \", \" + t + \")\")\n              );\n            },\n          }),\n        );\n      var te = function (t) {\n        return function () {\n          return t;\n        };\n      };\n      function ee(t, e) {\n        return function (n) {\n          return t + n * e;\n        };\n      }\n      function ne(t) {\n        return 1 == (t = +t)\n          ? re\n          : function (e, n) {\n              return n - e\n                ? (function (t, e, n) {\n                    return (\n                      (t = Math.pow(t, n)),\n                      (e = Math.pow(e, n) - t),\n                      (n = 1 / n),\n                      function (r) {\n                        return Math.pow(t + r * e, n);\n                      }\n                    );\n                  })(e, n, t)\n                : te(isNaN(e) ? n : e);\n            };\n      }\n      function re(t, e) {\n        var n = e - t;\n        return n ? ee(t, n) : te(isNaN(t) ? e : t);\n      }\n      var ie = (function t(e) {\n        var n = ne(e);\n        function r(t, e) {\n          var r = n((t = qt(t)).r, (e = qt(e)).r),\n            i = n(t.g, e.g),\n            o = n(t.b, e.b),\n            a = re(t.opacity, e.opacity);\n          return function (e) {\n            return (\n              (t.r = r(e)),\n              (t.g = i(e)),\n              (t.b = o(e)),\n              (t.opacity = a(e)),\n              t + \"\"\n            );\n          };\n        }\n        return (r.gamma = t), r;\n      })(1);\n      function oe(t) {\n        return function (e) {\n          var n,\n            r,\n            i = e.length,\n            o = new Array(i),\n            a = new Array(i),\n            s = new Array(i);\n          for (n = 0; n < i; ++n)\n            (r = qt(e[n])),\n              (o[n] = r.r || 0),\n              (a[n] = r.g || 0),\n              (s[n] = r.b || 0);\n          return (\n            (o = t(o)),\n            (a = t(a)),\n            (s = t(s)),\n            (r.opacity = 1),\n            function (t) {\n              return (r.r = o(t)), (r.g = a(t)), (r.b = s(t)), r + \"\";\n            }\n          );\n        };\n      }\n      oe(function (t) {\n        var e = t.length - 1;\n        return function (n) {\n          var r =\n              n <= 0 ? (n = 0) : n >= 1 ? ((n = 1), e - 1) : Math.floor(n * e),\n            i = t[r],\n            o = t[r + 1],\n            a = r > 0 ? t[r - 1] : 2 * i - o,\n            s = r < e - 1 ? t[r + 2] : 2 * o - i;\n          return Jt((n - r / e) * e, a, i, o, s);\n        };\n      }),\n        oe(function (t) {\n          var e = t.length;\n          return function (n) {\n            var r = Math.floor(((n %= 1) < 0 ? ++n : n) * e),\n              i = t[(r + e - 1) % e],\n              o = t[r % e],\n              a = t[(r + 1) % e],\n              s = t[(r + 2) % e];\n            return Jt((n - r / e) * e, i, o, a, s);\n          };\n        });\n      var ae = function (t, e) {\n        e || (e = []);\n        var n,\n          r = t ? Math.min(e.length, t.length) : 0,\n          i = e.slice();\n        return function (o) {\n          for (n = 0; n < r; ++n) i[n] = t[n] * (1 - o) + e[n] * o;\n          return i;\n        };\n      };\n      function se(t) {\n        return ArrayBuffer.isView(t) && !(t instanceof DataView);\n      }\n      function ce(t, e) {\n        var n,\n          r = e ? e.length : 0,\n          i = t ? Math.min(r, t.length) : 0,\n          o = new Array(i),\n          a = new Array(r);\n        for (n = 0; n < i; ++n) o[n] = ye(t[n], e[n]);\n        for (; n < r; ++n) a[n] = e[n];\n        return function (t) {\n          for (n = 0; n < i; ++n) a[n] = o[n](t);\n          return a;\n        };\n      }\n      var ue = function (t, e) {\n          var n = new Date();\n          return (\n            (t = +t),\n            (e = +e),\n            function (r) {\n              return n.setTime(t * (1 - r) + e * r), n;\n            }\n          );\n        },\n        he = function (t, e) {\n          return (\n            (t = +t),\n            (e = +e),\n            function (n) {\n              return t * (1 - n) + e * n;\n            }\n          );\n        };\n      function le(t) {\n        return (le =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var fe = function (t, e) {\n          var n,\n            r = {},\n            i = {};\n          for (n in ((null !== t && \"object\" === le(t)) || (t = {}),\n          (null !== e && \"object\" === le(e)) || (e = {}),\n          e))\n            n in t ? (r[n] = ye(t[n], e[n])) : (i[n] = e[n]);\n          return function (t) {\n            for (n in r) i[n] = r[n](t);\n            return i;\n          };\n        },\n        de = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        pe = new RegExp(de.source, \"g\");\n      var ge = function (t, e) {\n        var n,\n          r,\n          i,\n          o = (de.lastIndex = pe.lastIndex = 0),\n          a = -1,\n          s = [],\n          c = [];\n        for (t += \"\", e += \"\"; (n = de.exec(t)) && (r = pe.exec(e)); )\n          (i = r.index) > o &&\n            ((i = e.slice(o, i)), s[a] ? (s[a] += i) : (s[++a] = i)),\n            (n = n[0]) === (r = r[0])\n              ? s[a]\n                ? (s[a] += r)\n                : (s[++a] = r)\n              : ((s[++a] = null), c.push({ i: a, x: he(n, r) })),\n            (o = pe.lastIndex);\n        return (\n          o < e.length && ((i = e.slice(o)), s[a] ? (s[a] += i) : (s[++a] = i)),\n          s.length < 2\n            ? c[0]\n              ? (function (t) {\n                  return function (e) {\n                    return t(e) + \"\";\n                  };\n                })(c[0].x)\n              : (function (t) {\n                  return function () {\n                    return t;\n                  };\n                })(e)\n            : ((e = c.length),\n              function (t) {\n                for (var n, r = 0; r < e; ++r) s[(n = c[r]).i] = n.x(t);\n                return s.join(\"\");\n              })\n        );\n      };\n      function ve(t) {\n        return (ve =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var ye = function (t, e) {\n        var n,\n          r = ve(e);\n        return null == e || \"boolean\" === r\n          ? te(e)\n          : (\"number\" === r\n              ? he\n              : \"string\" === r\n              ? (n = Yt(e))\n                ? ((e = n), ie)\n                : ge\n              : e instanceof Yt\n              ? ie\n              : e instanceof Date\n              ? ue\n              : se(e)\n              ? ae\n              : Array.isArray(e)\n              ? ce\n              : (\"function\" != typeof e.valueOf &&\n                  \"function\" != typeof e.toString) ||\n                isNaN(e)\n              ? fe\n              : he)(t, e);\n      };\n      function me(t) {\n        return +t;\n      }\n      function be(t) {\n        return t * t;\n      }\n      function xe(t) {\n        return t * (2 - t);\n      }\n      function we(t) {\n        return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n      }\n      function Se(t) {\n        return t * t * t;\n      }\n      function Oe(t) {\n        return --t * t * t + 1;\n      }\n      function Me(t) {\n        return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n      }\n      var ke = (function t(e) {\n          function n(t) {\n            return Math.pow(t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        Ce = (function t(e) {\n          function n(t) {\n            return 1 - Math.pow(1 - t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        Ee = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2\n            );\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        je = Math.PI,\n        Pe = je / 2;\n      function Ae(t) {\n        return 1 == +t ? 1 : 1 - Math.cos(t * Pe);\n      }\n      function Ie(t) {\n        return Math.sin(t * Pe);\n      }\n      function Te(t) {\n        return (1 - Math.cos(je * t)) / 2;\n      }\n      function Ne(t) {\n        return 1.0009775171065494 * (Math.pow(2, -10 * t) - 0.0009765625);\n      }\n      function Be(t) {\n        return Ne(1 - +t);\n      }\n      function Le(t) {\n        return 1 - Ne(t);\n      }\n      function De(t) {\n        return ((t *= 2) <= 1 ? Ne(1 - t) : 2 - Ne(t - 1)) / 2;\n      }\n      function _e(t) {\n        return 1 - Math.sqrt(1 - t * t);\n      }\n      function Re(t) {\n        return Math.sqrt(1 - --t * t);\n      }\n      function Fe(t) {\n        return (\n          ((t *= 2) <= 1\n            ? 1 - Math.sqrt(1 - t * t)\n            : Math.sqrt(1 - (t -= 2) * t) + 1) / 2\n        );\n      }\n      var Ye = 7.5625;\n      function Xe(t) {\n        return 1 - ze(1 - t);\n      }\n      function ze(t) {\n        return (t = +t) < 4 / 11\n          ? Ye * t * t\n          : t < 8 / 11\n          ? Ye * (t -= 6 / 11) * t + 3 / 4\n          : t < 10 / 11\n          ? Ye * (t -= 9 / 11) * t + 15 / 16\n          : Ye * (t -= 21 / 22) * t + 63 / 64;\n      }\n      function We(t) {\n        return ((t *= 2) <= 1 ? 1 - ze(1 - t) : ze(t - 1) + 1) / 2;\n      }\n      var qe = (function t(e) {\n          function n(t) {\n            return (t = +t) * t * (e * (t - 1) + t);\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        Ve = (function t(e) {\n          function n(t) {\n            return --t * t * ((t + 1) * e + t) + 1;\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        Ge = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) < 1\n                ? t * t * ((e + 1) * t - e)\n                : (t -= 2) * t * ((e + 1) * t + e) + 2) / 2\n            );\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        He = 2 * Math.PI,\n        Ue = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= He);\n          function i(t) {\n            return e * Ne(-(--t)) * Math.sin((r - t) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * He);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        Ze = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= He);\n          function i(t) {\n            return 1 - e * Ne((t = +t)) * Math.sin((t + r) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * He);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        Ke = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= He);\n          function i(t) {\n            return (\n              ((t = 2 * t - 1) < 0\n                ? e * Ne(-t) * Math.sin((r - t) / n)\n                : 2 - e * Ne(t) * Math.sin((r + t) / n)) / 2\n            );\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * He);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        $e = {};\n      var Qe = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n      function Je(t, e, n) {\n        var r,\n          a = e.startTime;\n        if (n < a + e.delay || e._paused) return !1;\n        var s,\n          c = e.duration,\n          h = e.easing,\n          l = $e[(s = h).toLowerCase()] || i[s];\n        if (((n = n - a - e.delay), e.repeat)) r = l((r = (n % c) / c));\n        else {\n          if (!((r = n / c) < 1))\n            return e.onFrame ? t.attr(e.onFrame(1)) : t.attr(e.toAttrs), !0;\n          r = l(r);\n        }\n        if (e.onFrame) {\n          var f = e.onFrame(r);\n          t.attr(f);\n        } else\n          !(function (t, e, n) {\n            var r = {},\n              i = e.fromAttrs,\n              a = e.toAttrs;\n            if (!t.destroyed) {\n              var s, c, h, l;\n              for (var f in a)\n                if (!Object(o.isEqual)(i[f], a[f]))\n                  if (\"path\" === f) {\n                    var d = a[f],\n                      p = i[f];\n                    d.length > p.length\n                      ? ((d = u(a[f])),\n                        (p = u(i[f])),\n                        (p = L(p, d)),\n                        (p = R(p, d)),\n                        (e.fromAttrs.path = p),\n                        (e.toAttrs.path = d))\n                      : e.pathFormatted ||\n                        ((d = u(a[f])),\n                        (p = u(i[f])),\n                        (p = R(p, d)),\n                        (e.fromAttrs.path = p),\n                        (e.toAttrs.path = d),\n                        (e.pathFormatted = !0)),\n                      (r[f] = []);\n                    for (var g = 0; g < d.length; g++) {\n                      for (\n                        var v = d[g], y = p[g], m = [], b = 0;\n                        b < v.length;\n                        b++\n                      )\n                        Object(o.isNumber)(v[b]) &&\n                        y &&\n                        Object(o.isNumber)(y[b])\n                          ? ((s = ye(y[b], v[b])), m.push(s(n)))\n                          : m.push(v[b]);\n                      r[f].push(m);\n                    }\n                  } else if (\"matrix\" === f) {\n                    var x = ((h = i[f] || Qe),\n                    (se((l = a[f] || Qe)) ? ae : ce)(h, l))(n);\n                    r[f] = x;\n                  } else\n                    [\"fill\", \"stroke\", \"fillStyle\", \"strokeStyle\"].includes(\n                      f,\n                    ) && ((c = a[f]), /^[r,R,L,l]{1}[\\s]*\\(/.test(c))\n                      ? (r[f] = a[f])\n                      : Object(o.isFunction)(a[f]) ||\n                        ((s = ye(i[f], a[f])), (r[f] = s(n)));\n              t.attr(r);\n            }\n          })(t, e, r);\n        return !1;\n      }\n      var tn = (function () {\n          function t(t) {\n            (this.animators = []),\n              (this.current = 0),\n              (this.timer = null),\n              (this.canvas = t);\n          }\n          return (\n            (t.prototype.initTimer = function () {\n              var t,\n                e,\n                n,\n                r = this;\n              this.timer = xt(function (i) {\n                if (((r.current = i), r.animators.length > 0)) {\n                  for (var o = r.animators.length - 1; o >= 0; o--)\n                    if ((t = r.animators[o]).destroyed) r.removeAnimator(o);\n                    else {\n                      if (!t.isAnimatePaused())\n                        for (\n                          var a = (e = t.get(\"animations\")).length - 1;\n                          a >= 0;\n                          a--\n                        )\n                          (n = e[a]),\n                            Je(t, n, i) &&\n                              (e.splice(a, 1), !1, n.callback && n.callback());\n                      0 === e.length && r.removeAnimator(o);\n                    }\n                  r.canvas.get(\"autoDraw\") || r.canvas.draw();\n                }\n              });\n            }),\n            (t.prototype.addAnimator = function (t) {\n              this.animators.push(t);\n            }),\n            (t.prototype.removeAnimator = function (t) {\n              this.animators.splice(t, 1);\n            }),\n            (t.prototype.isAnimating = function () {\n              return !!this.animators.length;\n            }),\n            (t.prototype.stop = function () {\n              this.timer && this.timer.stop();\n            }),\n            (t.prototype.stopAllAnimations = function (t) {\n              void 0 === t && (t = !0),\n                this.animators.forEach(function (e) {\n                  e.stopAnimate(t);\n                }),\n                (this.animators = []),\n                this.canvas.draw();\n            }),\n            (t.prototype.getTime = function () {\n              return this.current;\n            }),\n            t\n          );\n        })(),\n        en = [\n          \"mousedown\",\n          \"mouseup\",\n          \"dblclick\",\n          \"mouseout\",\n          \"mouseover\",\n          \"mousemove\",\n          \"mouseleave\",\n          \"mouseenter\",\n          \"touchstart\",\n          \"touchmove\",\n          \"touchend\",\n          \"dragenter\",\n          \"dragover\",\n          \"dragleave\",\n          \"drop\",\n          \"contextmenu\",\n          \"mousewheel\",\n        ];\n      function nn(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function rn(t, e, n) {\n        if (n.bubbles) {\n          var r = void 0,\n            i = !1;\n          if (\n            (\"mouseenter\" === e\n              ? ((r = n.fromShape), (i = !0))\n              : \"mouseleave\" === e && ((i = !0), (r = n.toShape)),\n            t.isCanvas() && i)\n          )\n            return;\n          if (r && q(t, r)) return void (n.bubbles = !1);\n          (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var on = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.mousedownShape = null),\n              (this.mousedownPoint = null),\n              (this._eventCallback = function (t) {\n                var n = t.type;\n                e._triggerEvent(n, t);\n              }),\n              (this._onDocumentMove = function (t) {\n                if (\n                  e.canvas.get(\"el\") !== t.target &&\n                  (e.dragging || e.currentShape)\n                ) {\n                  var n = e._getPointInfo(t);\n                  e.dragging && e._emitEvent(\"drag\", t, n, e.draggingShape);\n                }\n              }),\n              (this._onDocumentMouseUp = function (t) {\n                if (e.canvas.get(\"el\") !== t.target && e.dragging) {\n                  var n = e._getPointInfo(t);\n                  e.draggingShape && e._emitEvent(\"drop\", t, n, null),\n                    e._emitEvent(\"dragend\", t, n, e.draggingShape),\n                    e._afterDrag(e.draggingShape, n, t);\n                }\n              }),\n              (this.canvas = t.canvas);\n          }\n          return (\n            (t.prototype.init = function () {\n              this._bindEvents();\n            }),\n            (t.prototype._bindEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(o.each)(en, function (n) {\n                e.addEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.addEventListener(\"mousemove\", this._onDocumentMove),\n                  document.addEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._clearEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(o.each)(en, function (n) {\n                e.removeEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.removeEventListener(\n                    \"mousemove\",\n                    this._onDocumentMove,\n                  ),\n                  document.removeEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, i, o) {\n              var a = new F(t, e);\n              return (\n                (a.fromShape = i),\n                (a.toShape = o),\n                (a.x = n.x),\n                (a.y = n.y),\n                (a.clientX = n.clientX),\n                (a.clientY = n.clientY),\n                a.propagationPath.push(r),\n                a\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              return this.canvas.getShape(t.x, t.y, e);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t],\n                o = !1;\n              if (i) i.call(this, n, r, e);\n              else {\n                var a = this.currentShape;\n                \"mouseenter\" === t || \"dragenter\" === t || \"mouseover\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"mouseenter\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"mouseleave\" === t || \"dragleave\" === t || \"mouseout\" === t\n                  ? ((o = !0),\n                    a && this._emitEvent(t, e, n, a, a, null),\n                    this._emitEvent(t, e, n, null, a, null),\n                    \"mouseleave\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n              if ((o || (this.currentShape = r), r && !r.get(\"destroyed\"))) {\n                var s = this.canvas;\n                s.get(\"el\").style.cursor = r.attr(\"cursor\") || s.get(\"cursor\");\n              }\n            }),\n            (t.prototype._onmousedown = function (t, e, n) {\n              0 === n.button &&\n                ((this.mousedownShape = e),\n                (this.mousedownPoint = t),\n                (this.mousedownTimeStamp = n.timeStamp)),\n                this._emitEvent(\"mousedown\", n, t, e, null, null);\n            }),\n            (t.prototype._emitMouseoverEvents = function (t, e, n, r) {\n              var i = this.canvas.get(\"el\");\n              n !== r &&\n                (n &&\n                  (this._emitEvent(\"mouseout\", t, e, n, n, r),\n                  this._emitEvent(\"mouseleave\", t, e, n, n, r),\n                  (r && !r.get(\"destroyed\")) ||\n                    (i.style.cursor = this.canvas.get(\"cursor\"))),\n                r &&\n                  (this._emitEvent(\"mouseover\", t, e, r, n, r),\n                  this._emitEvent(\"mouseenter\", t, e, r, n, r)));\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              r !== t && this._emitMouseoverEvents(n, e, t, r),\n                (this.currentShape = r);\n            }),\n            (t.prototype._onmouseup = function (t, e, n) {\n              if (0 === n.button) {\n                var r = this.draggingShape;\n                this.dragging\n                  ? (r && this._emitEvent(\"drop\", n, t, e),\n                    this._emitEvent(\"dragend\", n, t, r),\n                    this._afterDrag(r, t, n))\n                  : (this._emitEvent(\"mouseup\", n, t, e),\n                    e === this.mousedownShape &&\n                      this._emitEvent(\"click\", n, t, e),\n                    (this.mousedownShape = null),\n                    (this.mousedownPoint = null));\n              }\n            }),\n            (t.prototype._ondragover = function (t, e, n) {\n              n.preventDefault();\n              var r = this.currentShape;\n              this._emitDragoverEvents(n, t, r, e, !0);\n            }),\n            (t.prototype._onmousemove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.mousedownPoint;\n                if (a) {\n                  var s = this.mousedownShape,\n                    c = n.timeStamp - this.mousedownTimeStamp,\n                    u = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  c > 120 || u * u + h * h > 40\n                    ? s && s.get(\"draggable\")\n                      ? ((o = this.mousedownShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : (this._emitMouseoverEvents(n, t, i, e),\n                        this._emitEvent(\"mousemove\", n, t, e))\n                    : (this._emitMouseoverEvents(n, t, i, e),\n                      this._emitEvent(\"mousemove\", n, t, e));\n                } else\n                  this._emitMouseoverEvents(n, t, i, e),\n                    this._emitEvent(\"mousemove\", n, t, e);\n              }\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), nn(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || rn(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                nn(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              this._clearEvents(),\n                (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.mousedownPoint = null),\n                (this.mousedownShape = null),\n                (this.mousedownTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        an = Object(H.a)(),\n        sn = an && \"firefox\" === an.name,\n        cn = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              n.initContainer(),\n              n.initDom(),\n              n.initEvents(),\n              n.initTimeline(),\n              n\n            );\n          }\n          return (\n            Object(Y.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              var e = t.prototype.getDefaultCfg.call(this);\n              return (e.cursor = \"default\"), (e.supportCSSTransform = !1), e;\n            }),\n            (e.prototype.initContainer = function () {\n              var t = this.get(\"container\");\n              Object(o.isString)(t) &&\n                ((t = document.getElementById(t)), this.set(\"container\", t));\n            }),\n            (e.prototype.initDom = function () {\n              var t = this.createDom();\n              this.set(\"el\", t),\n                this.get(\"container\").appendChild(t),\n                this.setDOMSize(this.get(\"width\"), this.get(\"height\"));\n            }),\n            (e.prototype.initEvents = function () {\n              var t = new on({ canvas: this });\n              t.init(), this.set(\"eventController\", t);\n            }),\n            (e.prototype.initTimeline = function () {\n              var t = new tn(this);\n              this.set(\"timeline\", t);\n            }),\n            (e.prototype.setDOMSize = function (t, e) {\n              var n = this.get(\"el\");\n              W && ((n.style.width = t + \"px\"), (n.style.height = e + \"px\"));\n            }),\n            (e.prototype.changeSize = function (t, e) {\n              this.setDOMSize(t, e),\n                this.set(\"width\", t),\n                this.set(\"height\", e),\n                this.onCanvasChange(\"changeSize\");\n            }),\n            (e.prototype.getRenderer = function () {\n              return this.get(\"renderer\");\n            }),\n            (e.prototype.getCursor = function () {\n              return this.get(\"cursor\");\n            }),\n            (e.prototype.setCursor = function (t) {\n              this.set(\"cursor\", t);\n              var e = this.get(\"el\");\n              W && e && (e.style.cursor = t);\n            }),\n            (e.prototype.getPointByEvent = function (t) {\n              if (this.get(\"supportCSSTransform\")) {\n                if (sn && !Object(o.isNil)(t.layerX) && t.layerX !== t.offsetX)\n                  return { x: t.layerX, y: t.layerY };\n                if (!Object(o.isNil)(t.offsetX))\n                  return { x: t.offsetX, y: t.offsetY };\n              }\n              var e = this.getClientByEvent(t),\n                n = e.x,\n                r = e.y;\n              return this.getPointByClient(n, r);\n            }),\n            (e.prototype.getClientByEvent = function (t) {\n              var e = t;\n              return (\n                t.touches &&\n                  (e =\n                    \"touchend\" === t.type ? t.changedTouches[0] : t.touches[0]),\n                { x: e.clientX, y: e.clientY }\n              );\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              var n = this.get(\"el\").getBoundingClientRect();\n              return { x: t - n.left, y: e - n.top };\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              var n = this.get(\"el\").getBoundingClientRect();\n              return { x: t + n.left, y: e + n.top };\n            }),\n            (e.prototype.draw = function () {}),\n            (e.prototype.removeDom = function () {\n              var t = this.get(\"el\");\n              t.parentNode.removeChild(t);\n            }),\n            (e.prototype.clearEvents = function () {\n              this.get(\"eventController\").destroy();\n            }),\n            (e.prototype.isCanvas = function () {\n              return !0;\n            }),\n            (e.prototype.getParent = function () {\n              return null;\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"timeline\");\n              this.get(\"destroyed\") ||\n                (this.clear(),\n                e && e.stop(),\n                this.clearEvents(),\n                this.removeDom(),\n                t.prototype.destroy.call(this));\n            }),\n            e\n          );\n        })(ot),\n        un = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(Y.c)(e, t),\n            (e.prototype.isGroup = function () {\n              return !0;\n            }),\n            (e.prototype.isEntityGroup = function () {\n              return !1;\n            }),\n            (e.prototype.clone = function () {\n              for (\n                var e = t.prototype.clone.call(this),\n                  n = this.getChildren(),\n                  r = 0;\n                r < n.length;\n                r++\n              ) {\n                var i = n[r];\n                e.add(i.clone());\n              }\n              return e;\n            }),\n            e\n          );\n        })(ot),\n        hn = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(Y.c)(e, t),\n            (e.prototype._isInBBox = function (t, e) {\n              var n = this.getBBox();\n              return n.minX <= t && n.maxX >= t && n.minY <= e && n.maxY >= e;\n            }),\n            (e.prototype.afterAttrsChange = function (e) {\n              t.prototype.afterAttrsChange.call(this, e), this.clearCacheBBox();\n            }),\n            (e.prototype.getBBox = function () {\n              var t = this.cfg.bbox;\n              return t || ((t = this.calculateBBox()), this.set(\"bbox\", t)), t;\n            }),\n            (e.prototype.getCanvasBBox = function () {\n              var t = this.cfg.canvasBBox;\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()), this.set(\"canvasBBox\", t)),\n                t\n              );\n            }),\n            (e.prototype.applyMatrix = function (e) {\n              t.prototype.applyMatrix.call(this, e),\n                this.set(\"canvasBBox\", null);\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              var t = this.getBBox(),\n                e = this.getTotalMatrix(),\n                n = t.minX,\n                r = t.minY,\n                i = t.maxX,\n                o = t.maxY;\n              if (e) {\n                var a = Z(e, [t.minX, t.minY]),\n                  s = Z(e, [t.maxX, t.minY]),\n                  c = Z(e, [t.minX, t.maxY]),\n                  u = Z(e, [t.maxX, t.maxY]);\n                (n = Math.min(a[0], s[0], c[0], u[0])),\n                  (i = Math.max(a[0], s[0], c[0], u[0])),\n                  (r = Math.min(a[1], s[1], c[1], u[1])),\n                  (o = Math.max(a[1], s[1], c[1], u[1]));\n              }\n              var h = this.attrs;\n              if (h.shadowColor) {\n                var l = h.shadowBlur,\n                  f = void 0 === l ? 0 : l,\n                  d = h.shadowOffsetX,\n                  p = void 0 === d ? 0 : d,\n                  g = h.shadowOffsetY,\n                  v = void 0 === g ? 0 : g,\n                  y = n - f + p,\n                  m = i + f + p,\n                  b = r - f + v,\n                  x = o + f + v;\n                (n = Math.min(n, y)),\n                  (i = Math.max(i, m)),\n                  (r = Math.min(r, b)),\n                  (o = Math.max(o, x));\n              }\n              return {\n                x: n,\n                y: r,\n                minX: n,\n                minY: r,\n                maxX: i,\n                maxY: o,\n                width: i - n,\n                height: o - r,\n              };\n            }),\n            (e.prototype.clearCacheBBox = function () {\n              this.set(\"bbox\", null), this.set(\"canvasBBox\", null);\n            }),\n            (e.prototype.isClipShape = function () {\n              return this.get(\"isClipShape\");\n            }),\n            (e.prototype.isInShape = function (t, e) {\n              return !1;\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !1;\n            }),\n            (e.prototype.isHit = function (t, e) {\n              var n = this.get(\"startArrowShape\"),\n                r = this.get(\"endArrowShape\"),\n                i = [t, e, 1],\n                o = (i = this.invertFromMatrix(i))[0],\n                a = i[1],\n                s = this._isInBBox(o, a);\n              if (this.isOnlyHitBox()) return s;\n              if (s && !this.isClipped(o, a)) {\n                if (this.isInShape(o, a)) return !0;\n                if (n && n.isHit(o, a)) return !0;\n                if (r && r.isHit(o, a)) return !0;\n              }\n              return !1;\n            }),\n            e\n          );\n        })(rt),\n        ln = new Map();\n      function fn(t, e) {\n        ln.set(t, e);\n      }\n      function dn(t) {\n        return ln.get(t);\n      }\n      var pn = function (t) {\n          var e = t.attr();\n          return { x: e.x, y: e.y, width: e.width, height: e.height };\n        },\n        gn = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.r;\n          return { x: n - i, y: r - i, width: 2 * i, height: 2 * i };\n        },\n        vn = n(7);\n      function yn(t, e) {\n        return t && e\n          ? {\n              minX: Math.min(t.minX, e.minX),\n              minY: Math.min(t.minY, e.minY),\n              maxX: Math.max(t.maxX, e.maxX),\n              maxY: Math.max(t.maxY, e.maxY),\n            }\n          : t || e;\n      }\n      function mn(t, e) {\n        var n = t.get(\"startArrowShape\"),\n          r = t.get(\"endArrowShape\");\n        return (\n          n && (e = yn(e, n.getCanvasBBox())),\n          r && (e = yn(e, r.getCanvasBBox())),\n          e\n        );\n      }\n      var bn = null;\n      function xn(t, e, n) {\n        var r = 1;\n        return (\n          Object(o.isString)(t) && (r = t.split(\"\\n\").length),\n          r > 1\n            ? e * r +\n              (function (t, e) {\n                return e ? e - t : 0.14 * t;\n              })(e, n) *\n                (r - 1)\n            : e\n        );\n      }\n      function wn(t, e) {\n        var n = (function () {\n            if (!bn) {\n              var t = document.createElement(\"canvas\");\n              (t.width = 1), (t.height = 1), (bn = t.getContext(\"2d\"));\n            }\n            return bn;\n          })(),\n          r = 0;\n        if (Object(o.isNil)(t) || \"\" === t) return r;\n        if (\n          (n.save(), (n.font = e), Object(o.isString)(t) && t.includes(\"\\n\"))\n        ) {\n          var i = t.split(\"\\n\");\n          Object(o.each)(i, function (t) {\n            var e = n.measureText(t).width;\n            r < e && (r = e);\n          });\n        } else r = n.measureText(t).width;\n        return n.restore(), r;\n      }\n      function Sn(t) {\n        var e = t.fontSize,\n          n = t.fontFamily,\n          r = t.fontWeight;\n        return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n      }\n      var On = n(22);\n      function Mn(t, e) {\n        var n = t.prePoint,\n          r = t.currentPoint,\n          i = t.nextPoint,\n          a = Math.pow(r[0] - n[0], 2) + Math.pow(r[1] - n[1], 2),\n          s = Math.pow(r[0] - i[0], 2) + Math.pow(r[1] - i[1], 2),\n          c = Math.pow(n[0] - i[0], 2) + Math.pow(n[1] - i[1], 2),\n          u = Math.acos((a + s - c) / (2 * Math.sqrt(a) * Math.sqrt(s)));\n        if (!u || 0 === Math.sin(u) || Object(o.isNumberEqual)(u, 0))\n          return { xExtra: 0, yExtra: 0 };\n        var h = Math.abs(Math.atan2(i[1] - r[1], i[0] - r[0])),\n          l = Math.abs(Math.atan2(i[0] - r[0], i[1] - r[1]));\n        return (\n          (h = h > Math.PI / 2 ? Math.PI - h : h),\n          (l = l > Math.PI / 2 ? Math.PI - l : l),\n          {\n            xExtra:\n              Math.cos(u / 2 - h) * ((e / 2) * (1 / Math.sin(u / 2))) - e / 2 ||\n              0,\n            yExtra:\n              Math.cos(l - u / 2) * ((e / 2) * (1 / Math.sin(u / 2))) - e / 2 ||\n              0,\n          }\n        );\n      }\n      fn(\"rect\", pn),\n        fn(\"image\", pn),\n        fn(\"circle\", gn),\n        fn(\"marker\", gn),\n        fn(\"polyline\", function (t) {\n          for (\n            var e = t.attr().points, n = [], r = [], i = 0;\n            i < e.length;\n            i++\n          ) {\n            var o = e[i];\n            n.push(o[0]), r.push(o[1]);\n          }\n          var a = vn.f.getBBoxByArray(n, r),\n            s = a.x,\n            c = a.y,\n            u = { minX: s, minY: c, maxX: s + a.width, maxY: c + a.height };\n          return {\n            x: (u = mn(t, u)).minX,\n            y: u.minY,\n            width: u.maxX - u.minX,\n            height: u.maxY - u.minY,\n          };\n        }),\n        fn(\"polygon\", function (t) {\n          for (\n            var e = t.attr().points, n = [], r = [], i = 0;\n            i < e.length;\n            i++\n          ) {\n            var o = e[i];\n            n.push(o[0]), r.push(o[1]);\n          }\n          return vn.f.getBBoxByArray(n, r);\n        }),\n        fn(\"text\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            a = e.lineHeight,\n            s = e.font;\n          s || (s = Sn(e));\n          var c,\n            u = wn(i, s);\n          if (u) {\n            var h = e.textAlign,\n              l = e.textBaseline,\n              f = xn(i, o, a),\n              d = { x: n, y: r - f };\n            h &&\n              (\"end\" === h || \"right\" === h\n                ? (d.x -= u)\n                : \"center\" === h && (d.x -= u / 2)),\n              l &&\n                (\"top\" === l ? (d.y += f) : \"middle\" === l && (d.y += f / 2)),\n              (c = { x: d.x, y: d.y, width: u, height: f });\n          } else c = { x: n, y: r, width: 0, height: 0 };\n          return c;\n        }),\n        fn(\"path\", function (t) {\n          var e = t.attr(),\n            n = e.path,\n            r = e.stroke ? e.lineWidth : 0,\n            i = (function (t, e) {\n              for (var n = [], r = [], i = [], a = 0; a < t.length; a++) {\n                var s = (v = t[a]).currentPoint,\n                  c = v.params,\n                  u = v.prePoint,\n                  h = void 0;\n                switch (v.command) {\n                  case \"Q\":\n                    h = vn.e.box(u[0], u[1], c[1], c[2], c[3], c[4]);\n                    break;\n                  case \"C\":\n                    h = vn.b.box(\n                      u[0],\n                      u[1],\n                      c[1],\n                      c[2],\n                      c[3],\n                      c[4],\n                      c[5],\n                      c[6],\n                    );\n                    break;\n                  case \"A\":\n                    var l = v.arcParams;\n                    h = vn.a.box(\n                      l.cx,\n                      l.cy,\n                      l.rx,\n                      l.ry,\n                      l.xRotation,\n                      l.startAngle,\n                      l.endAngle,\n                    );\n                    break;\n                  default:\n                    n.push(s[0]), r.push(s[1]);\n                }\n                h &&\n                  ((v.box = h),\n                  n.push(h.x, h.x + h.width),\n                  r.push(h.y, h.y + h.height)),\n                  e &&\n                    (\"L\" === v.command || \"M\" === v.command) &&\n                    v.prePoint &&\n                    v.nextPoint &&\n                    i.push(v);\n              }\n              (n = n.filter(function (t) {\n                return !Number.isNaN(t) && t !== 1 / 0 && t !== -1 / 0;\n              })),\n                (r = r.filter(function (t) {\n                  return !Number.isNaN(t) && t !== 1 / 0 && t !== -1 / 0;\n                }));\n              var f = Object(o.min)(n),\n                d = Object(o.min)(r),\n                p = Object(o.max)(n),\n                g = Object(o.max)(r);\n              if (0 === i.length)\n                return { x: f, y: d, width: p - f, height: g - d };\n              for (a = 0; a < i.length; a++) {\n                var v;\n                (s = (v = i[a]).currentPoint)[0] === f\n                  ? (f -= Mn(v, e).xExtra)\n                  : s[0] === p && (p += Mn(v, e).xExtra),\n                  s[1] === d\n                    ? (d -= Mn(v, e).yExtra)\n                    : s[1] === g && (g += Mn(v, e).yExtra);\n              }\n              return { x: f, y: d, width: p - f, height: g - d };\n            })(t.get(\"segments\") || Object(On.d)(n), r),\n            a = i.x,\n            s = i.y,\n            c = { minX: a, minY: s, maxX: a + i.width, maxY: s + i.height };\n          return {\n            x: (c = mn(t, c)).minX,\n            y: c.minY,\n            width: c.maxX - c.minX,\n            height: c.maxY - c.minY,\n          };\n        }),\n        fn(\"line\", function (t) {\n          var e = t.attr(),\n            n = e.x1,\n            r = e.y1,\n            i = e.x2,\n            o = e.y2,\n            a = {\n              minX: Math.min(n, i),\n              maxX: Math.max(n, i),\n              minY: Math.min(r, o),\n              maxY: Math.max(r, o),\n            };\n          return {\n            x: (a = mn(t, a)).minX,\n            y: a.minY,\n            width: a.maxX - a.minX,\n            height: a.maxY - a.minY,\n          };\n        }),\n        fn(\"ellipse\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.rx,\n            o = e.ry;\n          return { x: n - i, y: r - o, width: 2 * i, height: 2 * o };\n        });\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"e\", function () {\n        return m;\n      }),\n        n.d(e, \"b\", function () {\n          return M;\n        }),\n        n.d(e, \"a\", function () {\n          return I;\n        }),\n        n.d(e, \"c\", function () {\n          return f;\n        }),\n        n.d(e, \"d\", function () {\n          return _;\n        }),\n        n.d(e, \"f\", function () {\n          return r;\n        });\n      var r = {};\n      function i(t) {\n        return Math.min.apply(null, t);\n      }\n      function o(t) {\n        return Math.max.apply(null, t);\n      }\n      function a(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function s(t, e) {\n        return Math.abs(t - e) < 0.001;\n      }\n      function c(t, e) {\n        var n = i(t),\n          r = i(e);\n        return { x: n, y: r, width: o(t) - n, height: o(e) - r };\n      }\n      function u(t, e, n, r) {\n        return {\n          minX: i([t, n]),\n          maxX: o([t, n]),\n          minY: i([e, r]),\n          maxY: o([e, r]),\n        };\n      }\n      function h(t) {\n        return (t + 2 * Math.PI) % (2 * Math.PI);\n      }\n      n.r(r),\n        n.d(r, \"distance\", function () {\n          return a;\n        }),\n        n.d(r, \"isNumberEqual\", function () {\n          return s;\n        }),\n        n.d(r, \"getBBoxByArray\", function () {\n          return c;\n        }),\n        n.d(r, \"getBBoxRange\", function () {\n          return u;\n        }),\n        n.d(r, \"piMod\", function () {\n          return h;\n        });\n      var l = n(42),\n        f = {\n          box: function (t, e, n, r) {\n            return c([t, n], [e, r]);\n          },\n          length: function (t, e, n, r) {\n            return a(t, e, n, r);\n          },\n          pointAt: function (t, e, n, r, i) {\n            return { x: (1 - i) * t + i * n, y: (1 - i) * e + i * r };\n          },\n          pointDistance: function (t, e, n, r, i, o) {\n            var s = (n - t) * (i - t) + (r - e) * (o - e);\n            return s < 0\n              ? a(t, e, i, o)\n              : s > (n - t) * (n - t) + (r - e) * (r - e)\n              ? a(n, r, i, o)\n              : this.pointToLine(t, e, n, r, i, o);\n          },\n          pointToLine: function (t, e, n, r, i, o) {\n            var a = [n - t, r - e];\n            if (l.exactEquals(a, [0, 0]))\n              return Math.sqrt((i - t) * (i - t) + (o - e) * (o - e));\n            var s = [-a[1], a[0]];\n            l.normalize(s, s);\n            var c = [i - t, o - e];\n            return Math.abs(l.dot(c, s));\n          },\n          tangentAngle: function (t, e, n, r) {\n            return Math.atan2(r - e, n - t);\n          },\n        };\n      function d(t, e, n, r, i, o) {\n        var s,\n          c = 1 / 0,\n          u = [n, r],\n          h = 20;\n        o && o > 200 && (h = o / 10);\n        for (var l = 1 / h, f = l / 10, d = 0; d <= h; d++) {\n          var p = d * l,\n            g = [i.apply(null, t.concat([p])), i.apply(null, e.concat([p]))];\n          (b = a(u[0], u[1], g[0], g[1])) < c && ((s = p), (c = b));\n        }\n        if (0 === s) return { x: t[0], y: e[0] };\n        if (1 === s) {\n          var v = t.length;\n          return { x: t[v - 1], y: e[v - 1] };\n        }\n        c = 1 / 0;\n        for (d = 0; d < 32 && !(f < 1e-4); d++) {\n          var y = s - f,\n            m = s + f,\n            b =\n              ((g = [\n                i.apply(null, t.concat([y])),\n                i.apply(null, e.concat([y])),\n              ]),\n              a(u[0], u[1], g[0], g[1]));\n          if (y >= 0 && b < c) (s = y), (c = b);\n          else {\n            var x = [\n                i.apply(null, t.concat([m])),\n                i.apply(null, e.concat([m])),\n              ],\n              w = a(u[0], u[1], x[0], x[1]);\n            m <= 1 && w < c ? ((s = m), (c = w)) : (f *= 0.5);\n          }\n        }\n        return {\n          x: i.apply(null, t.concat([s])),\n          y: i.apply(null, e.concat([s])),\n        };\n      }\n      function p(t, e, n, r) {\n        var i = 1 - r;\n        return i * i * t + 2 * r * i * e + r * r * n;\n      }\n      function g(t, e, n) {\n        var r = t + n - 2 * e;\n        if (s(r, 0)) return [0.5];\n        var i = (t - e) / r;\n        return i <= 1 && i >= 0 ? [i] : [];\n      }\n      function v(t, e, n, r) {\n        return 2 * (1 - r) * (e - t) + 2 * r * (n - e);\n      }\n      function y(t, e, n, r, i, o, a) {\n        var s = p(t, n, i, a),\n          c = p(e, r, o, a),\n          u = f.pointAt(t, e, n, r, a),\n          h = f.pointAt(n, r, i, o, a);\n        return [\n          [t, e, u.x, u.y, s, c],\n          [s, c, h.x, h.y, i, o],\n        ];\n      }\n      var m = {\n        box: function (t, e, n, r, i, o) {\n          var a = g(t, n, i)[0],\n            s = g(e, r, o)[0],\n            u = [t, i],\n            h = [e, o];\n          return (\n            void 0 !== a && u.push(p(t, n, i, a)),\n            void 0 !== s && h.push(p(e, r, o, s)),\n            c(u, h)\n          );\n        },\n        length: function (t, e, n, r, i, o) {\n          return (function t(e, n, r, i, o, s, c) {\n            if (0 === c)\n              return (a(e, n, r, i) + a(r, i, o, s) + a(e, n, o, s)) / 2;\n            var u = y(e, n, r, i, o, s, 0.5),\n              h = u[0],\n              l = u[1];\n            return (\n              h.push(c - 1), l.push(c - 1), t.apply(null, h) + t.apply(null, l)\n            );\n          })(t, e, n, r, i, o, 3);\n        },\n        nearestPoint: function (t, e, n, r, i, o, a, s) {\n          return d([t, n, i], [e, r, o], a, s, p);\n        },\n        pointDistance: function (t, e, n, r, i, o, s, c) {\n          var u = this.nearestPoint(t, e, n, r, i, o, s, c);\n          return a(u.x, u.y, s, c);\n        },\n        interpolationAt: p,\n        pointAt: function (t, e, n, r, i, o, a) {\n          return { x: p(t, n, i, a), y: p(e, r, o, a) };\n        },\n        divide: function (t, e, n, r, i, o, a) {\n          return y(t, e, n, r, i, o, a);\n        },\n        tangentAngle: function (t, e, n, r, i, o, a) {\n          var s = v(t, n, i, a),\n            c = v(e, r, o, a);\n          return h(Math.atan2(c, s));\n        },\n      };\n      function b(t, e, n, r, i) {\n        var o = 1 - i;\n        return (\n          o * o * o * t + 3 * e * i * o * o + 3 * n * i * i * o + r * i * i * i\n        );\n      }\n      function x(t, e, n, r, i) {\n        var o = 1 - i;\n        return 3 * (o * o * (e - t) + 2 * o * i * (n - e) + i * i * (r - n));\n      }\n      function w(t, e, n, r) {\n        var i,\n          o,\n          a,\n          c = -3 * t + 9 * e - 9 * n + 3 * r,\n          u = 6 * t - 12 * e + 6 * n,\n          h = 3 * e - 3 * t,\n          l = [];\n        if (s(c, 0)) s(u, 0) || ((i = -h / u) >= 0 && i <= 1 && l.push(i));\n        else {\n          var f = u * u - 4 * c * h;\n          s(f, 0)\n            ? l.push(-u / (2 * c))\n            : f > 0 &&\n              ((o = (-u - (a = Math.sqrt(f))) / (2 * c)),\n              (i = (-u + a) / (2 * c)) >= 0 && i <= 1 && l.push(i),\n              o >= 0 && o <= 1 && l.push(o));\n        }\n        return l;\n      }\n      function S(t, e, n, r, i, o, a, s, c) {\n        var u = b(t, n, i, a, c),\n          h = b(e, r, o, s, c),\n          l = f.pointAt(t, e, n, r, c),\n          d = f.pointAt(n, r, i, o, c),\n          p = f.pointAt(i, o, a, s, c),\n          g = f.pointAt(l.x, l.y, d.x, d.y, c),\n          v = f.pointAt(d.x, d.y, p.x, p.y, c);\n        return [\n          [t, e, l.x, l.y, g.x, g.y, u, h],\n          [u, h, v.x, v.y, p.x, p.y, a, s],\n        ];\n      }\n      function O(t, e, n, r, i, o, s, c, u) {\n        if (0 === u)\n          return (function (t, e) {\n            for (var n = 0, r = t.length, i = 0; i < r; i++) {\n              n += a(t[i], e[i], t[(i + 1) % r], e[(i + 1) % r]);\n            }\n            return n / 2;\n          })([t, n, i, s], [e, r, o, c]);\n        var h = S(t, e, n, r, i, o, s, c, 0.5),\n          l = h[0],\n          f = h[1];\n        return (\n          l.push(u - 1), f.push(u - 1), O.apply(null, l) + O.apply(null, f)\n        );\n      }\n      var M = {\n        extrema: w,\n        box: function (t, e, n, r, i, o, a, s) {\n          for (\n            var u = [t, a],\n              h = [e, s],\n              l = w(t, n, i, a),\n              f = w(e, r, o, s),\n              d = 0;\n            d < l.length;\n            d++\n          )\n            u.push(b(t, n, i, a, l[d]));\n          for (d = 0; d < f.length; d++) h.push(b(e, r, o, s, f[d]));\n          return c(u, h);\n        },\n        length: function (t, e, n, r, i, o, a, s) {\n          return O(t, e, n, r, i, o, a, s, 3);\n        },\n        nearestPoint: function (t, e, n, r, i, o, a, s, c, u, h) {\n          return d([t, n, i, a], [e, r, o, s], c, u, b, h);\n        },\n        pointDistance: function (t, e, n, r, i, o, s, c, u, h, l) {\n          var f = this.nearestPoint(t, e, n, r, i, o, s, c, u, h, l);\n          return a(f.x, f.y, u, h);\n        },\n        interpolationAt: b,\n        pointAt: function (t, e, n, r, i, o, a, s, c) {\n          return { x: b(t, n, i, a, c), y: b(e, r, o, s, c) };\n        },\n        divide: function (t, e, n, r, i, o, a, s, c) {\n          return S(t, e, n, r, i, o, a, s, c);\n        },\n        tangentAngle: function (t, e, n, r, i, o, a, s, c) {\n          var u = x(t, n, i, a, c),\n            l = x(e, r, o, s, c);\n          return h(Math.atan2(l, u));\n        },\n      };\n      function k(t, e) {\n        var n = Math.abs(t);\n        return e > 0 ? n : -1 * n;\n      }\n      var C = function (t, e, n, r, i, o) {\n        var a = n,\n          s = r;\n        if (0 === a || 0 === s) return { x: t, y: e };\n        for (\n          var c,\n            u,\n            h = i - t,\n            l = o - e,\n            f = Math.abs(h),\n            d = Math.abs(l),\n            p = a * a,\n            g = s * s,\n            v = Math.PI / 4,\n            y = 0;\n          y < 4;\n          y++\n        ) {\n          (c = a * Math.cos(v)), (u = s * Math.sin(v));\n          var m = ((p - g) * Math.pow(Math.cos(v), 3)) / a,\n            b = ((g - p) * Math.pow(Math.sin(v), 3)) / s,\n            x = c - m,\n            w = u - b,\n            S = f - m,\n            O = d - b,\n            M = Math.hypot(w, x),\n            C = Math.hypot(O, S);\n          (v +=\n            (M * Math.asin((x * O - w * S) / (M * C))) /\n            Math.sqrt(p + g - c * c - u * u)),\n            (v = Math.min(Math.PI / 2, Math.max(0, v)));\n        }\n        return { x: t + k(c, h), y: e + k(u, l) };\n      };\n      function E(t, e, n, r, i, o) {\n        return (\n          n * Math.cos(i) * Math.cos(o) - r * Math.sin(i) * Math.sin(o) + t\n        );\n      }\n      function j(t, e, n, r, i, o) {\n        return (\n          n * Math.sin(i) * Math.cos(o) + r * Math.cos(i) * Math.sin(o) + e\n        );\n      }\n      function P(t, e, n) {\n        return { x: t * Math.cos(n), y: e * Math.sin(n) };\n      }\n      function A(t, e, n) {\n        var r = Math.cos(n),\n          i = Math.sin(n);\n        return [t * r - e * i, t * i + e * r];\n      }\n      var I = {\n        box: function (t, e, n, r, i, o, a) {\n          for (\n            var s = (function (t, e, n) {\n                return Math.atan((-e / t) * Math.tan(n));\n              })(n, r, i),\n              c = 1 / 0,\n              u = -1 / 0,\n              h = [o, a],\n              l = 2 * -Math.PI;\n            l <= 2 * Math.PI;\n            l += Math.PI\n          ) {\n            var f = s + l;\n            o < a ? o < f && f < a && h.push(f) : a < f && f < o && h.push(f);\n          }\n          for (l = 0; l < h.length; l++) {\n            var d = E(t, 0, n, r, i, h[l]);\n            d < c && (c = d), d > u && (u = d);\n          }\n          var p = (function (t, e, n) {\n              return Math.atan(e / (t * Math.tan(n)));\n            })(n, r, i),\n            g = 1 / 0,\n            v = -1 / 0,\n            y = [o, a];\n          for (l = 2 * -Math.PI; l <= 2 * Math.PI; l += Math.PI) {\n            var m = p + l;\n            o < a ? o < m && m < a && y.push(m) : a < m && m < o && y.push(m);\n          }\n          for (l = 0; l < y.length; l++) {\n            var b = j(0, e, n, r, i, y[l]);\n            b < g && (g = b), b > v && (v = b);\n          }\n          return { x: c, y: g, width: u - c, height: v - g };\n        },\n        length: function (t, e, n, r, i, o, a) {},\n        nearestPoint: function (t, e, n, r, i, o, a, s, c) {\n          var u = A(s - t, c - e, -i),\n            h = u[0],\n            l = u[1],\n            f = C(0, 0, n, r, h, l),\n            d = (function (t, e, n, r) {\n              return (Math.atan2(r * t, n * e) + 2 * Math.PI) % (2 * Math.PI);\n            })(n, r, f.x, f.y);\n          d < o ? (f = P(n, r, o)) : d > a && (f = P(n, r, a));\n          var p = A(f.x, f.y, i);\n          return { x: p[0] + t, y: p[1] + e };\n        },\n        pointDistance: function (t, e, n, r, i, o, s, c, u) {\n          var h = this.nearestPoint(t, e, n, r, c, u);\n          return a(h.x, h.y, c, u);\n        },\n        pointAt: function (t, e, n, r, i, o, a, s) {\n          var c = (a - o) * s + o;\n          return { x: E(t, 0, n, r, i, c), y: j(0, e, n, r, i, c) };\n        },\n        tangentAngle: function (t, e, n, r, i, o, a, s) {\n          var c = (a - o) * s + o,\n            u = (function (t, e, n, r, i, o, a, s) {\n              return (\n                -1 * n * Math.cos(i) * Math.sin(s) -\n                r * Math.sin(i) * Math.cos(s)\n              );\n            })(0, 0, n, r, i, 0, 0, c),\n            l = (function (t, e, n, r, i, o, a, s) {\n              return (\n                -1 * n * Math.sin(i) * Math.sin(s) +\n                r * Math.cos(i) * Math.cos(s)\n              );\n            })(0, 0, n, r, i, 0, 0, c);\n          return h(Math.atan2(l, u));\n        },\n      };\n      function T(t) {\n        for (var e = 0, n = [], r = 0; r < t.length - 1; r++) {\n          var i = t[r],\n            o = t[r + 1],\n            s = a(i[0], i[1], o[0], o[1]),\n            c = { from: i, to: o, length: s };\n          n.push(c), (e += s);\n        }\n        return { segments: n, totalLength: e };\n      }\n      function N(t) {\n        if (t.length < 2) return 0;\n        for (var e = 0, n = 0; n < t.length - 1; n++) {\n          var r = t[n],\n            i = t[n + 1];\n          e += a(r[0], r[1], i[0], i[1]);\n        }\n        return e;\n      }\n      function B(t, e) {\n        if (e > 1 || e < 0 || t.length < 2) return null;\n        var n = T(t),\n          r = n.segments,\n          i = n.totalLength;\n        if (0 === i) return { x: t[0][0], y: t[0][1] };\n        for (var o = 0, a = null, s = 0; s < r.length; s++) {\n          var c = r[s],\n            u = c.from,\n            h = c.to,\n            l = c.length / i;\n          if (e >= o && e <= o + l) {\n            var d = (e - o) / l;\n            a = f.pointAt(u[0], u[1], h[0], h[1], d);\n            break;\n          }\n          o += l;\n        }\n        return a;\n      }\n      function L(t, e) {\n        if (e > 1 || e < 0 || t.length < 2) return 0;\n        for (\n          var n = T(t), r = n.segments, i = n.totalLength, o = 0, a = 0, s = 0;\n          s < r.length;\n          s++\n        ) {\n          var c = r[s],\n            u = c.from,\n            h = c.to,\n            l = c.length / i;\n          if (e >= o && e <= o + l) {\n            a = Math.atan2(h[1] - u[1], h[0] - u[0]);\n            break;\n          }\n          o += l;\n        }\n        return a;\n      }\n      function D(t, e, n) {\n        for (var r = 1 / 0, i = 0; i < t.length - 1; i++) {\n          var o = t[i],\n            a = t[i + 1],\n            s = f.pointDistance(o[0], o[1], a[0], a[1], e, n);\n          s < r && (r = s);\n        }\n        return r;\n      }\n      var _ = {\n        box: function (t) {\n          for (var e = [], n = [], r = 0; r < t.length; r++) {\n            var i = t[r];\n            e.push(i[0]), n.push(i[1]);\n          }\n          return c(e, n);\n        },\n        length: function (t) {\n          return N(t);\n        },\n        pointAt: function (t, e) {\n          return B(t, e);\n        },\n        pointDistance: function (t, e, n) {\n          return D(t, e, n);\n        },\n        tangentAngle: function (t, e) {\n          return L(t, e);\n        },\n      };\n    },\n    72: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"length\", function () {\n          return a;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return s;\n        }),\n        n.d(e, \"copy\", function () {\n          return c;\n        }),\n        n.d(e, \"set\", function () {\n          return u;\n        }),\n        n.d(e, \"add\", function () {\n          return h;\n        }),\n        n.d(e, \"subtract\", function () {\n          return l;\n        }),\n        n.d(e, \"multiply\", function () {\n          return f;\n        }),\n        n.d(e, \"divide\", function () {\n          return d;\n        }),\n        n.d(e, \"ceil\", function () {\n          return p;\n        }),\n        n.d(e, \"floor\", function () {\n          return g;\n        }),\n        n.d(e, \"min\", function () {\n          return v;\n        }),\n        n.d(e, \"max\", function () {\n          return y;\n        }),\n        n.d(e, \"round\", function () {\n          return m;\n        }),\n        n.d(e, \"scale\", function () {\n          return b;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return x;\n        }),\n        n.d(e, \"distance\", function () {\n          return w;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return S;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return O;\n        }),\n        n.d(e, \"negate\", function () {\n          return M;\n        }),\n        n.d(e, \"inverse\", function () {\n          return k;\n        }),\n        n.d(e, \"normalize\", function () {\n          return C;\n        }),\n        n.d(e, \"dot\", function () {\n          return E;\n        }),\n        n.d(e, \"cross\", function () {\n          return j;\n        }),\n        n.d(e, \"lerp\", function () {\n          return P;\n        }),\n        n.d(e, \"hermite\", function () {\n          return A;\n        }),\n        n.d(e, \"bezier\", function () {\n          return I;\n        }),\n        n.d(e, \"random\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return N;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return B;\n        }),\n        n.d(e, \"transformQuat\", function () {\n          return L;\n        }),\n        n.d(e, \"rotateX\", function () {\n          return D;\n        }),\n        n.d(e, \"rotateY\", function () {\n          return _;\n        }),\n        n.d(e, \"rotateZ\", function () {\n          return R;\n        }),\n        n.d(e, \"angle\", function () {\n          return F;\n        }),\n        n.d(e, \"zero\", function () {\n          return Y;\n        }),\n        n.d(e, \"str\", function () {\n          return X;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return z;\n        }),\n        n.d(e, \"equals\", function () {\n          return W;\n        }),\n        n.d(e, \"sub\", function () {\n          return V;\n        }),\n        n.d(e, \"mul\", function () {\n          return G;\n        }),\n        n.d(e, \"div\", function () {\n          return H;\n        }),\n        n.d(e, \"dist\", function () {\n          return U;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return Z;\n        }),\n        n.d(e, \"len\", function () {\n          return K;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return $;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Q;\n        });\n      var r = n(5);\n      function i() {\n        var t = new r.a(3);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0), (t[2] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(3);\n        return (e[0] = t[0]), (e[1] = t[1]), (e[2] = t[2]), e;\n      }\n      function a(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return Math.hypot(e, n, r);\n      }\n      function s(t, e, n) {\n        var i = new r.a(3);\n        return (i[0] = t), (i[1] = e), (i[2] = n), i;\n      }\n      function c(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), (t[2] = e[2]), t;\n      }\n      function u(t, e, n, r) {\n        return (t[0] = e), (t[1] = n), (t[2] = r), t;\n      }\n      function h(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), (t[2] = e[2] + n[2]), t\n        );\n      }\n      function l(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), (t[2] = e[2] - n[2]), t\n        );\n      }\n      function f(t, e, n) {\n        return (\n          (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), (t[2] = e[2] * n[2]), t\n        );\n      }\n      function d(t, e, n) {\n        return (\n          (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), (t[2] = e[2] / n[2]), t\n        );\n      }\n      function p(t, e) {\n        return (\n          (t[0] = Math.ceil(e[0])),\n          (t[1] = Math.ceil(e[1])),\n          (t[2] = Math.ceil(e[2])),\n          t\n        );\n      }\n      function g(t, e) {\n        return (\n          (t[0] = Math.floor(e[0])),\n          (t[1] = Math.floor(e[1])),\n          (t[2] = Math.floor(e[2])),\n          t\n        );\n      }\n      function v(t, e, n) {\n        return (\n          (t[0] = Math.min(e[0], n[0])),\n          (t[1] = Math.min(e[1], n[1])),\n          (t[2] = Math.min(e[2], n[2])),\n          t\n        );\n      }\n      function y(t, e, n) {\n        return (\n          (t[0] = Math.max(e[0], n[0])),\n          (t[1] = Math.max(e[1], n[1])),\n          (t[2] = Math.max(e[2], n[2])),\n          t\n        );\n      }\n      function m(t, e) {\n        return (\n          (t[0] = Math.round(e[0])),\n          (t[1] = Math.round(e[1])),\n          (t[2] = Math.round(e[2])),\n          t\n        );\n      }\n      function b(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), (t[2] = e[2] * n), t;\n      }\n      function x(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          t\n        );\n      }\n      function w(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return Math.hypot(n, r, i);\n      }\n      function S(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return n * n + r * r + i * i;\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return e * e + n * n + r * r;\n      }\n      function M(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), (t[2] = -e[2]), t;\n      }\n      function k(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), (t[2] = 1 / e[2]), t;\n      }\n      function C(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = n * n + r * r + i * i;\n        return (\n          o > 0 && (o = 1 / Math.sqrt(o)),\n          (t[0] = e[0] * o),\n          (t[1] = e[1] * o),\n          (t[2] = e[2] * o),\n          t\n        );\n      }\n      function E(t, e) {\n        return t[0] * e[0] + t[1] * e[1] + t[2] * e[2];\n      }\n      function j(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[0],\n          s = n[1],\n          c = n[2];\n        return (\n          (t[0] = i * c - o * s),\n          (t[1] = o * a - r * c),\n          (t[2] = r * s - i * a),\n          t\n        );\n      }\n      function P(t, e, n, r) {\n        var i = e[0],\n          o = e[1],\n          a = e[2];\n        return (\n          (t[0] = i + r * (n[0] - i)),\n          (t[1] = o + r * (n[1] - o)),\n          (t[2] = a + r * (n[2] - a)),\n          t\n        );\n      }\n      function A(t, e, n, r, i, o) {\n        var a = o * o,\n          s = a * (2 * o - 3) + 1,\n          c = a * (o - 2) + o,\n          u = a * (o - 1),\n          h = a * (3 - 2 * o);\n        return (\n          (t[0] = e[0] * s + n[0] * c + r[0] * u + i[0] * h),\n          (t[1] = e[1] * s + n[1] * c + r[1] * u + i[1] * h),\n          (t[2] = e[2] * s + n[2] * c + r[2] * u + i[2] * h),\n          t\n        );\n      }\n      function I(t, e, n, r, i, o) {\n        var a = 1 - o,\n          s = a * a,\n          c = o * o,\n          u = s * a,\n          h = 3 * o * s,\n          l = 3 * c * a,\n          f = c * o;\n        return (\n          (t[0] = e[0] * u + n[0] * h + r[0] * l + i[0] * f),\n          (t[1] = e[1] * u + n[1] * h + r[1] * l + i[1] * f),\n          (t[2] = e[2] * u + n[2] * h + r[2] * l + i[2] * f),\n          t\n        );\n      }\n      function T(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI,\n          i = 2 * r.c() - 1,\n          o = Math.sqrt(1 - i * i) * e;\n        return (\n          (t[0] = Math.cos(n) * o), (t[1] = Math.sin(n) * o), (t[2] = i * e), t\n        );\n      }\n      function N(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[3] * r + n[7] * i + n[11] * o + n[15];\n        return (\n          (a = a || 1),\n          (t[0] = (n[0] * r + n[4] * i + n[8] * o + n[12]) / a),\n          (t[1] = (n[1] * r + n[5] * i + n[9] * o + n[13]) / a),\n          (t[2] = (n[2] * r + n[6] * i + n[10] * o + n[14]) / a),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2];\n        return (\n          (t[0] = r * n[0] + i * n[3] + o * n[6]),\n          (t[1] = r * n[1] + i * n[4] + o * n[7]),\n          (t[2] = r * n[2] + i * n[5] + o * n[8]),\n          t\n        );\n      }\n      function L(t, e, n) {\n        var r = n[0],\n          i = n[1],\n          o = n[2],\n          a = n[3],\n          s = e[0],\n          c = e[1],\n          u = e[2],\n          h = i * u - o * c,\n          l = o * s - r * u,\n          f = r * c - i * s,\n          d = i * f - o * l,\n          p = o * h - r * f,\n          g = r * l - i * h,\n          v = 2 * a;\n        return (\n          (h *= v),\n          (l *= v),\n          (f *= v),\n          (d *= 2),\n          (p *= 2),\n          (g *= 2),\n          (t[0] = s + h + d),\n          (t[1] = c + l + p),\n          (t[2] = u + f + g),\n          t\n        );\n      }\n      function D(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0]),\n          (o[1] = i[1] * Math.cos(r) - i[2] * Math.sin(r)),\n          (o[2] = i[1] * Math.sin(r) + i[2] * Math.cos(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function _(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[2] * Math.sin(r) + i[0] * Math.cos(r)),\n          (o[1] = i[1]),\n          (o[2] = i[2] * Math.cos(r) - i[0] * Math.sin(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function R(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0] * Math.cos(r) - i[1] * Math.sin(r)),\n          (o[1] = i[0] * Math.sin(r) + i[1] * Math.cos(r)),\n          (o[2] = i[2]),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function F(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = t[2],\n          o = e[0],\n          a = e[1],\n          s = e[2],\n          c =\n            Math.sqrt(n * n + r * r + i * i) * Math.sqrt(o * o + a * a + s * s),\n          u = c && E(t, e) / c;\n        return Math.acos(Math.min(Math.max(u, -1), 1));\n      }\n      function Y(t) {\n        return (t[0] = 0), (t[1] = 0), (t[2] = 0), t;\n      }\n      function X(t) {\n        return \"vec3(\" + t[0] + \", \" + t[1] + \", \" + t[2] + \")\";\n      }\n      function z(t, e) {\n        return t[0] === e[0] && t[1] === e[1] && t[2] === e[2];\n      }\n      function W(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = t[2],\n          a = e[0],\n          s = e[1],\n          c = e[2];\n        return (\n          Math.abs(n - a) <= r.b * Math.max(1, Math.abs(n), Math.abs(a)) &&\n          Math.abs(i - s) <= r.b * Math.max(1, Math.abs(i), Math.abs(s)) &&\n          Math.abs(o - c) <= r.b * Math.max(1, Math.abs(o), Math.abs(c))\n        );\n      }\n      var q,\n        V = l,\n        G = f,\n        H = d,\n        U = w,\n        Z = S,\n        K = a,\n        $ = O,\n        Q =\n          ((q = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 3),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (q[0] = t[a]),\n                (q[1] = t[a + 1]),\n                (q[2] = t[a + 2]),\n                i(q, q, o),\n                (t[a] = q[0]),\n                (t[a + 1] = q[1]),\n                (t[a + 2] = q[2]);\n            return t;\n          });\n    },\n    73: function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t() {\n          this._events = {};\n        }\n        return (\n          (t.prototype.on = function (t, e, n) {\n            return (\n              this._events[t] || (this._events[t] = []),\n              this._events[t].push({ callback: e, once: !!n }),\n              this\n            );\n          }),\n          (t.prototype.once = function (t, e) {\n            return this.on(t, e, !0);\n          }),\n          (t.prototype.emit = function (t) {\n            for (var e = this, n = [], r = 1; r < arguments.length; r++)\n              n[r - 1] = arguments[r];\n            var i = this._events[t] || [],\n              o = this._events[\"*\"] || [],\n              a = function (r) {\n                for (var i = r.length, o = 0; o < i; o++)\n                  if (r[o]) {\n                    var a = r[o],\n                      s = a.callback;\n                    a.once &&\n                      (r.splice(o, 1),\n                      0 === r.length && delete e._events[t],\n                      i--,\n                      o--),\n                      s.apply(e, n);\n                  }\n              };\n            a(i), a(o);\n          }),\n          (t.prototype.off = function (t, e) {\n            if (t)\n              if (e) {\n                for (\n                  var n = this._events[t] || [], r = n.length, i = 0;\n                  i < r;\n                  i++\n                )\n                  n[i].callback === e && (n.splice(i, 1), r--, i--);\n                0 === n.length && delete this._events[t];\n              } else delete this._events[t];\n            else this._events = {};\n            return this;\n          }),\n          (t.prototype.getEvents = function () {\n            return this._events;\n          }),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    74: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return Wt;\n      });\n      var r = {};\n      n.r(r),\n        n.d(r, \"Base\", function () {\n          return V;\n        }),\n        n.d(r, \"Circle\", function () {\n          return G;\n        }),\n        n.d(r, \"Ellipse\", function () {\n          return U;\n        }),\n        n.d(r, \"Image\", function () {\n          return $;\n        }),\n        n.d(r, \"Line\", function () {\n          return tt;\n        }),\n        n.d(r, \"Marker\", function () {\n          return rt;\n        }),\n        n.d(r, \"Path\", function () {\n          return dt;\n        }),\n        n.d(r, \"Polygon\", function () {\n          return gt;\n        }),\n        n.d(r, \"Polyline\", function () {\n          return vt;\n        }),\n        n.d(r, \"Rect\", function () {\n          return yt;\n        }),\n        n.d(r, \"Text\", function () {\n          return mt;\n        });\n      var i = n(1),\n        o = n(6),\n        a = n(0);\n      function s(t) {\n        return (s =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var c = {};\n      function u(t) {\n        return (null == c ? void 0 : c.clearAnimationFrame)\n          ? c.clearAnimationFrame(t)\n          : (\"object\" ===\n              (\"undefined\" == typeof window ? \"undefined\" : s(window)) &&\n              window.cancelAnimationFrame\n              ? window.cancelAnimationFrame\n              : clearTimeout)(t);\n      }\n      function h(t) {\n        return (h =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function l(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function f(t, e, n, r, i, o) {\n        return i >= t && i <= t + n && o >= e && o <= e + r;\n      }\n      function d(t, e) {\n        return !(\n          e.minX > t.maxX ||\n          e.maxX < t.minX ||\n          e.minY > t.maxY ||\n          e.maxY < t.minY\n        );\n      }\n      function p(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      var g = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i,\n        v = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i,\n        y = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i,\n        m = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\n      function b(t, e) {\n        var n = t.match(m);\n        Object(a.each)(n, function (t) {\n          var n = t.split(\":\");\n          e.addColorStop(n[0], n[1]);\n        });\n      }\n      function x(t, e, n) {\n        if (Object(a.isString)(n)) {\n          if (\"(\" === n[1] || \"(\" === n[2]) {\n            if (\"l\" === n[0])\n              return (function (t, e, n) {\n                var r,\n                  i,\n                  o = g.exec(n),\n                  a = (parseFloat(o[1]) % 360) * (Math.PI / 180),\n                  s = o[2],\n                  c = e.getBBox();\n                a >= 0 && a < 0.5 * Math.PI\n                  ? ((r = { x: c.minX, y: c.minY }),\n                    (i = { x: c.maxX, y: c.maxY }))\n                  : 0.5 * Math.PI <= a && a < Math.PI\n                  ? ((r = { x: c.maxX, y: c.minY }),\n                    (i = { x: c.minX, y: c.maxY }))\n                  : Math.PI <= a && a < 1.5 * Math.PI\n                  ? ((r = { x: c.maxX, y: c.maxY }),\n                    (i = { x: c.minX, y: c.minY }))\n                  : ((r = { x: c.minX, y: c.maxY }),\n                    (i = { x: c.maxX, y: c.minY }));\n                var u = Math.tan(a),\n                  h = u * u,\n                  l = (i.x - r.x + u * (i.y - r.y)) / (h + 1) + r.x,\n                  f = (u * (i.x - r.x + u * (i.y - r.y))) / (h + 1) + r.y,\n                  d = t.createLinearGradient(r.x, r.y, l, f);\n                return b(s, d), d;\n              })(t, e, n);\n            if (\"r\" === n[0])\n              return (function (t, e, n) {\n                var r = v.exec(n),\n                  i = parseFloat(r[1]),\n                  o = parseFloat(r[2]),\n                  a = parseFloat(r[3]),\n                  s = r[4];\n                if (0 === a) {\n                  var c = s.match(m);\n                  return c[c.length - 1].split(\":\")[1];\n                }\n                var u = e.getBBox(),\n                  h = u.maxX - u.minX,\n                  l = u.maxY - u.minY,\n                  f = Math.sqrt(h * h + l * l) / 2,\n                  d = t.createRadialGradient(\n                    u.minX + h * i,\n                    u.minY + l * o,\n                    0,\n                    u.minX + h / 2,\n                    u.minY + l / 2,\n                    a * f,\n                  );\n                return b(s, d), d;\n              })(t, e, n);\n            if (\"p\" === n[0])\n              return (function (t, e, n) {\n                if (e.get(\"patternSource\") && e.get(\"patternSource\") === n)\n                  return e.get(\"pattern\");\n                var r,\n                  i,\n                  o = y.exec(n),\n                  a = o[1],\n                  s = o[2];\n                function c() {\n                  (r = t.createPattern(i, a)),\n                    e.set(\"pattern\", r),\n                    e.set(\"patternSource\", n);\n                }\n                switch (a) {\n                  case \"a\":\n                    a = \"repeat\";\n                    break;\n                  case \"x\":\n                    a = \"repeat-x\";\n                    break;\n                  case \"y\":\n                    a = \"repeat-y\";\n                    break;\n                  case \"n\":\n                    a = \"no-repeat\";\n                    break;\n                  default:\n                    a = \"no-repeat\";\n                }\n                return (\n                  (i = new Image()),\n                  s.match(/^data:/i) || (i.crossOrigin = \"Anonymous\"),\n                  (i.src = s),\n                  i.complete ? c() : ((i.onload = c), (i.src = i.src)),\n                  r\n                );\n              })(t, e, n);\n          }\n          return n;\n        }\n      }\n      function w(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function S(t, e) {\n        return w(t) * w(e) ? (t[0] * e[0] + t[1] * e[1]) / (w(t) * w(e)) : 1;\n      }\n      function O(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(S(t, e));\n      }\n      function M(t, e) {\n        var n = e[1],\n          r = e[2],\n          i = Object(a.mod)(Object(a.toRadian)(e[3]), 2 * Math.PI),\n          o = e[4],\n          s = e[5],\n          c = t[0],\n          u = t[1],\n          h = e[6],\n          l = e[7],\n          f = (Math.cos(i) * (c - h)) / 2 + (Math.sin(i) * (u - l)) / 2,\n          d = (-1 * Math.sin(i) * (c - h)) / 2 + (Math.cos(i) * (u - l)) / 2,\n          g = (f * f) / (n * n) + (d * d) / (r * r);\n        g > 1 && ((n *= Math.sqrt(g)), (r *= Math.sqrt(g)));\n        var v = n * n * (d * d) + r * r * (f * f),\n          y = v ? Math.sqrt((n * n * (r * r) - v) / v) : 1;\n        o === s && (y *= -1), isNaN(y) && (y = 0);\n        var m = r ? (y * n * d) / r : 0,\n          b = n ? (y * -r * f) / n : 0,\n          x = (c + h) / 2 + Math.cos(i) * m - Math.sin(i) * b,\n          w = (u + l) / 2 + Math.sin(i) * m + Math.cos(i) * b,\n          M = [(f - m) / n, (d - b) / r],\n          k = [(-1 * f - m) / n, (-1 * d - b) / r],\n          C = O([1, 0], M),\n          E = O(M, k);\n        return (\n          S(M, k) <= -1 && (E = Math.PI),\n          S(M, k) >= 1 && (E = 0),\n          0 === s && E > 0 && (E -= 2 * Math.PI),\n          1 === s && E < 0 && (E += 2 * Math.PI),\n          {\n            cx: x,\n            cy: w,\n            rx: p(t, [h, l]) ? 0 : n,\n            ry: p(t, [h, l]) ? 0 : r,\n            startAngle: C,\n            endAngle: C + E,\n            xRotation: i,\n            arcFlag: o,\n            sweepFlag: s,\n          }\n        );\n      }\n      function k(t) {\n        return (k =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var C = Math.sin,\n        E = Math.cos,\n        j = Math.atan2,\n        P = Math.PI;\n      function A(t, e, n, r, i, o, a) {\n        var s = e.stroke,\n          c = e.lineWidth,\n          u = j(r - o, n - i),\n          h = new dt({\n            type: \"path\",\n            canvas: t.get(\"canvas\"),\n            isArrowShape: !0,\n            attrs: {\n              path:\n                \"M\" +\n                10 * E(P / 6) +\n                \",\" +\n                10 * C(P / 6) +\n                \" L0,0 L\" +\n                10 * E(P / 6) +\n                \",-\" +\n                10 * C(P / 6),\n              stroke: s,\n              lineWidth: c,\n            },\n          });\n        h.translate(i, o),\n          h.rotateAtPoint(i, o, u),\n          t.set(a ? \"startArrowShape\" : \"endArrowShape\", h);\n      }\n      function I(t, e, n, r, o, a, s) {\n        var c = e.startArrow,\n          u = e.endArrow,\n          h = e.stroke,\n          l = e.lineWidth,\n          f = s ? c : u,\n          d = f.d,\n          p = f.fill,\n          g = f.stroke,\n          v = f.lineWidth,\n          y = Object(i.e)(f, [\"d\", \"fill\", \"stroke\", \"lineWidth\"]),\n          m = j(r - a, n - o);\n        d && ((o -= E(m) * d), (a -= C(m) * d));\n        var b = new dt({\n          type: \"path\",\n          canvas: t.get(\"canvas\"),\n          isArrowShape: !0,\n          attrs: Object(i.a)(Object(i.a)({}, y), {\n            stroke: g || h,\n            lineWidth: v || l,\n            fill: p,\n          }),\n        });\n        b.translate(o, a),\n          b.rotateAtPoint(o, a, m),\n          t.set(s ? \"startArrowShape\" : \"endArrowShape\", b);\n      }\n      function T(t, e, n, r, i) {\n        var o = j(r - e, n - t);\n        return { dx: E(o) * i, dy: C(o) * i };\n      }\n      function N(t, e, n, r, i, o) {\n        \"object\" === k(e.startArrow)\n          ? I(t, e, n, r, i, o, !0)\n          : e.startArrow\n          ? A(t, e, n, r, i, o, !0)\n          : t.set(\"startArrowShape\", null);\n      }\n      function B(t, e, n, r, i, o) {\n        \"object\" === k(e.endArrow)\n          ? I(t, e, n, r, i, o, !1)\n          : e.endArrow\n          ? A(t, e, n, r, i, o, !1)\n          : t.set(\"startArrowShape\", null);\n      }\n      var L = {\n        fill: \"fillStyle\",\n        stroke: \"strokeStyle\",\n        opacity: \"globalAlpha\",\n      };\n      function D(t, e) {\n        var n = e.attr();\n        for (var r in n) {\n          var i = n[r],\n            o = L[r] ? L[r] : r;\n          \"matrix\" === o && i\n            ? t.transform(i[0], i[1], i[3], i[4], i[6], i[7])\n            : \"lineDash\" === o && t.setLineDash\n            ? Object(a.isArray)(i) && t.setLineDash(i)\n            : (\"strokeStyle\" === o || \"fillStyle\" === o\n                ? (i = x(t, e, i))\n                : \"globalAlpha\" === o && (i *= t.globalAlpha),\n              (t[o] = i));\n        }\n      }\n      function _(t, e, n) {\n        for (var r = 0; r < e.length; r++) {\n          var i = e[r];\n          i.cfg.visible ? i.draw(t, n) : i.skipDraw();\n        }\n      }\n      function R(t, e, n) {\n        var r = t.get(\"refreshElements\");\n        Object(a.each)(r, function (e) {\n          if (e !== t)\n            for (var n = e.cfg.parent; n && n !== t && !n.cfg.refresh; )\n              (n.cfg.refresh = !0), (n = n.cfg.parent);\n        }),\n          r[0] === t\n            ? F(e, n)\n            : (function t(e, n) {\n                for (var r = 0; r < e.length; r++) {\n                  var i = e[r];\n                  if (i.cfg.visible)\n                    if (i.cfg.hasChanged)\n                      (i.cfg.refresh = !0), i.isGroup() && F(i.cfg.children, n);\n                    else if (i.cfg.refresh) i.isGroup() && t(i.cfg.children, n);\n                    else {\n                      var o = Y(i, n);\n                      (i.cfg.refresh = o),\n                        o && i.isGroup() && t(i.cfg.children, n);\n                    }\n                }\n              })(e, n);\n      }\n      function F(t, e) {\n        for (var n = 0; n < t.length; n++) {\n          var r = t[n];\n          (r.cfg.refresh = !0), r.isGroup() && F(r.get(\"children\"), e);\n        }\n      }\n      function Y(t, e) {\n        var n = t.cfg.cacheCanvasBBox;\n        return t.cfg.isInView && n && d(n, e);\n      }\n      function X(t, e, n, r) {\n        var i = n.path,\n          o = n.startArrow,\n          a = n.endArrow;\n        if (i) {\n          var s = [0, 0],\n            c = [0, 0],\n            u = { dx: 0, dy: 0 };\n          e.beginPath();\n          for (var h = 0; h < i.length; h++) {\n            var l = i[h],\n              f = l[0];\n            if (0 === h && o && o.d)\n              u = T(\n                (d = t.getStartTangent())[0][0],\n                d[0][1],\n                d[1][0],\n                d[1][1],\n                o.d,\n              );\n            else if (h === i.length - 2 && \"Z\" === i[h + 1][0] && a && a.d) {\n              if (\"Z\" === i[h + 1][0])\n                u = T(\n                  (d = t.getEndTangent())[0][0],\n                  d[0][1],\n                  d[1][0],\n                  d[1][1],\n                  a.d,\n                );\n            } else if (h === i.length - 1 && a && a.d) {\n              var d;\n              if (\"Z\" !== i[0])\n                u = T(\n                  (d = t.getEndTangent())[0][0],\n                  d[0][1],\n                  d[1][0],\n                  d[1][1],\n                  a.d,\n                );\n            }\n            var p = u.dx,\n              g = u.dy;\n            switch (f) {\n              case \"M\":\n                e.moveTo(l[1] - p, l[2] - g), (c = [l[1], l[2]]);\n                break;\n              case \"L\":\n                e.lineTo(l[1] - p, l[2] - g);\n                break;\n              case \"Q\":\n                e.quadraticCurveTo(l[1], l[2], l[3] - p, l[4] - g);\n                break;\n              case \"C\":\n                e.bezierCurveTo(l[1], l[2], l[3], l[4], l[5] - p, l[6] - g);\n                break;\n              case \"A\":\n                var v = void 0;\n                r ? (v = r[h]) || ((v = M(s, l)), (r[h] = v)) : (v = M(s, l));\n                var y = v.cx,\n                  m = v.cy,\n                  b = v.rx,\n                  x = v.ry,\n                  w = v.startAngle,\n                  S = v.endAngle,\n                  O = v.xRotation,\n                  k = v.sweepFlag;\n                if (e.ellipse) e.ellipse(y, m, b, x, O, w, S, 1 - k);\n                else {\n                  var C = b > x ? b : x,\n                    E = b > x ? 1 : b / x,\n                    j = b > x ? x / b : 1;\n                  e.translate(y, m),\n                    e.rotate(O),\n                    e.scale(E, j),\n                    e.arc(0, 0, C, w, S, 1 - k),\n                    e.scale(1 / E, 1 / j),\n                    e.rotate(-O),\n                    e.translate(-y, -m);\n                }\n                break;\n              case \"Z\":\n                e.closePath();\n            }\n            if (\"Z\" === f) s = c;\n            else {\n              var P = l.length;\n              s = [l[P - 2], l[P - 1]];\n            }\n          }\n        }\n      }\n      function z(t, e) {\n        var n = t.get(\"canvas\");\n        n &&\n          (\"remove\" === e && (t._cacheCanvasBBox = t.get(\"cacheCanvasBBox\")),\n          t.get(\"hasChanged\") ||\n            (t.set(\"hasChanged\", !0),\n            (t.cfg.parent && t.cfg.parent.get(\"hasChanged\")) ||\n              (n.refreshElement(t, e, n), n.get(\"autoDraw\") && n.draw())));\n      }\n      function W(t) {\n        var e, n, r;\n        if (t.destroyed) e = t._cacheCanvasBBox;\n        else {\n          var i = t.get(\"cacheCanvasBBox\"),\n            o = i && !(!i.width || !i.height),\n            a = t.getCanvasBBox(),\n            s = a && !(!a.width || !a.height);\n          o && s\n            ? ((r = a),\n              (e =\n                (n = i) && r\n                  ? {\n                      minX: Math.min(n.minX, r.minX),\n                      minY: Math.min(n.minY, r.minY),\n                      maxX: Math.max(n.maxX, r.maxX),\n                      maxY: Math.max(n.maxY, r.maxY),\n                    }\n                  : n || r))\n            : o\n            ? (e = i)\n            : s && (e = a);\n        }\n        return e;\n      }\n      var q = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.onCanvasChange = function (t) {\n              z(this, t);\n            }),\n            (e.prototype.getShapeBase = function () {\n              return r;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return e;\n            }),\n            (e.prototype._applyClip = function (t, e) {\n              e &&\n                (t.save(),\n                D(t, e),\n                e.createPath(t),\n                t.restore(),\n                t.clip(),\n                e._afterDraw());\n            }),\n            (e.prototype.cacheCanvasBBox = function () {\n              var t = this.cfg.children,\n                e = [],\n                n = [];\n              Object(a.each)(t, function (t) {\n                var r = t.cfg.cacheCanvasBBox;\n                r &&\n                  t.cfg.isInView &&\n                  (e.push(r.minX, r.maxX), n.push(r.minY, r.maxY));\n              });\n              var r = null;\n              if (e.length) {\n                var i = Math.min.apply(null, e),\n                  o = Math.max.apply(null, e),\n                  s = Math.min.apply(null, n),\n                  c = Math.max.apply(null, n);\n                r = {\n                  minX: i,\n                  minY: s,\n                  x: i,\n                  y: s,\n                  maxX: o,\n                  maxY: c,\n                  width: o - i,\n                  height: c - s,\n                };\n                var u = this.cfg.canvas;\n                if (u) {\n                  var h = u.getViewRange();\n                  this.set(\"isInView\", d(r, h));\n                }\n              } else this.set(\"isInView\", !1);\n              this.set(\"cacheCanvasBBox\", r);\n            }),\n            (e.prototype.draw = function (t, e) {\n              var n = this.cfg.children,\n                r = !e || this.cfg.refresh;\n              n.length &&\n                r &&\n                (t.save(),\n                D(t, this),\n                this._applyClip(t, this.getClip()),\n                _(t, n, e),\n                t.restore(),\n                this.cacheCanvasBBox()),\n                (this.cfg.refresh = null),\n                this.set(\"hasChanged\", !1);\n            }),\n            (e.prototype.skipDraw = function () {\n              this.set(\"cacheCanvasBBox\", null), this.set(\"hasChanged\", !1);\n            }),\n            e\n          );\n        })(o.b),\n        V = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                lineWidth: 1,\n                lineAppendWidth: 0,\n                strokeOpacity: 1,\n                fillOpacity: 1,\n              });\n            }),\n            (e.prototype.getShapeBase = function () {\n              return r;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return q;\n            }),\n            (e.prototype.onCanvasChange = function (t) {\n              z(this, t);\n            }),\n            (e.prototype.calculateBBox = function () {\n              var t = this.get(\"type\"),\n                e = this.getHitLineWidth(),\n                n = Object(o.g)(t)(this),\n                r = e / 2,\n                i = n.x - r,\n                a = n.y - r,\n                s = n.x + n.width + r,\n                c = n.y + n.height + r;\n              return {\n                x: i,\n                minX: i,\n                y: a,\n                minY: a,\n                width: n.width + e,\n                height: n.height + e,\n                maxX: s,\n                maxY: c,\n              };\n            }),\n            (e.prototype.isFill = function () {\n              return !!this.attrs.fill || this.isClipShape();\n            }),\n            (e.prototype.isStroke = function () {\n              return !!this.attrs.stroke;\n            }),\n            (e.prototype._applyClip = function (t, e) {\n              e &&\n                (t.save(),\n                D(t, e),\n                e.createPath(t),\n                t.restore(),\n                t.clip(),\n                e._afterDraw());\n            }),\n            (e.prototype.draw = function (t, e) {\n              var n = this.cfg.clipShape;\n              if (e) {\n                if (!1 === this.cfg.refresh)\n                  return void this.set(\"hasChanged\", !1);\n                if (!d(e, this.getCanvasBBox()))\n                  return (\n                    this.set(\"hasChanged\", !1),\n                    void (this.cfg.isInView && this._afterDraw())\n                  );\n              }\n              t.save(),\n                D(t, this),\n                this._applyClip(t, n),\n                this.drawPath(t),\n                t.restore(),\n                this._afterDraw();\n            }),\n            (e.prototype.getCanvasViewBox = function () {\n              var t = this.cfg.canvas;\n              return t ? t.getViewRange() : null;\n            }),\n            (e.prototype.cacheCanvasBBox = function () {\n              var t = this.getCanvasViewBox();\n              if (t) {\n                var e = this.getCanvasBBox(),\n                  n = d(e, t);\n                this.set(\"isInView\", n),\n                  n\n                    ? this.set(\"cacheCanvasBBox\", e)\n                    : this.set(\"cacheCanvasBBox\", null);\n              }\n            }),\n            (e.prototype._afterDraw = function () {\n              this.cacheCanvasBBox(),\n                this.set(\"hasChanged\", !1),\n                this.set(\"refresh\", null);\n            }),\n            (e.prototype.skipDraw = function () {\n              this.set(\"cacheCanvasBBox\", null),\n                this.set(\"isInView\", null),\n                this.set(\"hasChanged\", !1);\n            }),\n            (e.prototype.drawPath = function (t) {\n              this.createPath(t), this.strokeAndFill(t), this.afterDrawPath(t);\n            }),\n            (e.prototype.fill = function (t) {\n              t.fill();\n            }),\n            (e.prototype.stroke = function (t) {\n              t.stroke();\n            }),\n            (e.prototype.strokeAndFill = function (t) {\n              var e = this.attrs,\n                n = e.lineWidth,\n                r = e.opacity,\n                i = e.strokeOpacity,\n                o = e.fillOpacity;\n              this.isFill() &&\n                (Object(a.isNil)(o) || 1 === o\n                  ? this.fill(t)\n                  : ((t.globalAlpha = o), this.fill(t), (t.globalAlpha = r))),\n                this.isStroke() &&\n                  n > 0 &&\n                  (Object(a.isNil)(i) || 1 === i || (t.globalAlpha = i),\n                  this.stroke(t)),\n                this.afterDrawPath(t);\n            }),\n            (e.prototype.createPath = function (t) {}),\n            (e.prototype.afterDrawPath = function (t) {}),\n            (e.prototype.isInShape = function (t, e) {\n              var n = this.isStroke(),\n                r = this.isFill(),\n                i = this.getHitLineWidth();\n              return this.isInStrokeOrPath(t, e, n, r, i);\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              return !1;\n            }),\n            (e.prototype.getHitLineWidth = function () {\n              if (!this.isStroke()) return 0;\n              var t = this.attrs;\n              return t.lineWidth + t.lineAppendWidth;\n            }),\n            e\n          );\n        })(o.c),\n        G = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), { x: 0, y: 0, r: 0 });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr(),\n                a = o.x,\n                s = o.y,\n                c = o.r,\n                u = i / 2,\n                h = l(a, s, t, e);\n              return r && n\n                ? h <= c + u\n                : r\n                ? h <= c\n                : !!n && h >= c - u && h <= c + u;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.r;\n              t.beginPath(), t.arc(n, r, i, 0, 2 * Math.PI, !1), t.closePath();\n            }),\n            e\n          );\n        })(V);\n      function H(t, e, n, r) {\n        return t / (n * n) + e / (r * r);\n      }\n      var U = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(i.c)(e, t),\n          (e.prototype.getDefaultAttrs = function () {\n            var e = t.prototype.getDefaultAttrs.call(this);\n            return Object(i.a)(Object(i.a)({}, e), {\n              x: 0,\n              y: 0,\n              rx: 0,\n              ry: 0,\n            });\n          }),\n          (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n            var o = this.attr(),\n              a = i / 2,\n              s = o.x,\n              c = o.y,\n              u = o.rx,\n              h = o.ry,\n              l = (t - s) * (t - s),\n              f = (e - c) * (e - c);\n            return r && n\n              ? H(l, f, u + a, h + a) <= 1\n              : r\n              ? H(l, f, u, h) <= 1\n              : !!n && H(l, f, u - a, h - a) >= 1 && H(l, f, u + a, h + a) <= 1;\n          }),\n          (e.prototype.createPath = function (t) {\n            var e = this.attr(),\n              n = e.x,\n              r = e.y,\n              i = e.rx,\n              o = e.ry;\n            if ((t.beginPath(), t.ellipse))\n              t.ellipse(n, r, i, o, 0, 0, 2 * Math.PI, !1);\n            else {\n              var a = i > o ? i : o,\n                s = i > o ? 1 : i / o,\n                c = i > o ? o / i : 1;\n              t.save(),\n                t.translate(n, r),\n                t.scale(s, c),\n                t.arc(0, 0, a, 0, 2 * Math.PI),\n                t.restore(),\n                t.closePath();\n            }\n          }),\n          e\n        );\n      })(V);\n      function Z(t) {\n        return (\n          t instanceof HTMLElement &&\n          Object(a.isString)(t.nodeName) &&\n          \"CANVAS\" === t.nodeName.toUpperCase()\n        );\n      }\n      var K = null;\n      var $ = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this._setImage(t.img);\n            }),\n            (e.prototype.isStroke = function () {\n              return !1;\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype._afterLoading = function () {\n              if (!0 === this.get(\"toDraw\")) {\n                var t = this.get(\"canvas\");\n                t ? t.draw() : this.createPath(this.get(\"context\"));\n              }\n            }),\n            (e.prototype._setImage = function (t) {\n              var e = this,\n                n = this.attrs;\n              if (\n                !(null == K ? void 0 : K.isMini()) ||\n                (null == K ? void 0 : K.isMiniNative())\n              )\n                if (Object(a.isString)(t)) {\n                  var r = null;\n                  ((r = (null == K ? void 0 : K.isMiniNative())\n                    ? null == K\n                      ? void 0\n                      : K.get(\"container\").createImage()\n                    : new Image()).onload = function () {\n                    if (e.destroyed) return !1;\n                    e.attr(\"img\", r), e.set(\"loading\", !1), e._afterLoading();\n                    var t = e.get(\"callback\");\n                    t && t.call(e);\n                  }),\n                    (r.crossOrigin = \"Anonymous\"),\n                    (r.src = t),\n                    this.set(\"loading\", !0);\n                } else\n                  (null == K ? void 0 : K.isMiniNative()) || t instanceof Image\n                    ? (n.width || (n.width = t.width),\n                      n.height || (n.height = t.height))\n                    : Z(t) &&\n                      (n.width || (n.width = Number(t.getAttribute(\"width\"))),\n                      n.height || (n.height, Number(t.getAttribute(\"height\"))));\n              else this.attr(\"img\", t);\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                \"img\" === e && this._setImage(n);\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.img,\n                r = e.x,\n                i = e.y,\n                o = e.width,\n                s = e.height,\n                c = e.sx,\n                u = e.sy,\n                h = e.swidth,\n                l = e.sheight;\n              if (this.get(\"loading\"))\n                return this.set(\"toDraw\", !0), void this.set(\"context\", t);\n              (null == K ? void 0 : K.isMini())\n                ? t.drawImage(n, r, i, o, s)\n                : (n instanceof Image || Z(n)) &&\n                  (Object(a.isNil)(c) ||\n                  Object(a.isNil)(u) ||\n                  Object(a.isNil)(h) ||\n                  Object(a.isNil)(l)\n                    ? t.drawImage(n, r, i, o, s)\n                    : t.drawImage(n, c, u, h, l, r, i, o, s));\n            }),\n            e\n          );\n        })(V),\n        Q = n(7);\n      function J(t, e, n, r, i, o, a) {\n        var s = Math.min(t, n),\n          c = Math.max(t, n),\n          u = Math.min(e, r),\n          h = Math.max(e, r),\n          l = i / 2;\n        return (\n          o >= s - l &&\n          o <= c + l &&\n          a >= u - l &&\n          a <= h + l &&\n          Q.c.pointToLine(t, e, n, r, o, a) <= i / 2\n        );\n      }\n      var tt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x1: 0,\n                y1: 0,\n                x2: 0,\n                y2: 0,\n                startArrow: !1,\n                endArrow: !1,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this.setArrow();\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r), this.setArrow();\n            }),\n            (e.prototype.setArrow = function () {\n              var t = this.attr(),\n                e = t.x1,\n                n = t.y1,\n                r = t.x2,\n                i = t.y2,\n                o = t.startArrow,\n                a = t.endArrow;\n              o && N(this, t, r, i, e, n), a && B(this, t, e, n, r, i);\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              if (!n || !i) return !1;\n              var o = this.attr();\n              return J(o.x1, o.y1, o.x2, o.y2, i, t, e);\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x1,\n                r = e.y1,\n                i = e.x2,\n                o = e.y2,\n                a = e.startArrow,\n                s = e.endArrow,\n                c = { dx: 0, dy: 0 },\n                u = { dx: 0, dy: 0 };\n              a && a.d && (c = T(n, r, i, o, e.startArrow.d)),\n                s && s.d && (u = T(n, r, i, o, e.endArrow.d)),\n                t.beginPath(),\n                t.moveTo(n + c.dx, r + c.dy),\n                t.lineTo(i - u.dx, o - u.dy);\n            }),\n            (e.prototype.afterDrawPath = function (t) {\n              var e = this.get(\"startArrowShape\"),\n                n = this.get(\"endArrowShape\");\n              e && e.draw(t), n && n.draw(t);\n            }),\n            (e.prototype.getTotalLength = function () {\n              var t = this.attr(),\n                e = t.x1,\n                n = t.y1,\n                r = t.x2,\n                i = t.y2;\n              return Q.c.length(e, n, r, i);\n            }),\n            (e.prototype.getPoint = function (t) {\n              var e = this.attr(),\n                n = e.x1,\n                r = e.y1,\n                i = e.x2,\n                o = e.y2;\n              return Q.c.pointAt(n, r, i, o, t);\n            }),\n            e\n          );\n        })(V),\n        et = n(22),\n        nt = {\n          circle: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"A\", n, n, 0, 1, 0, t + n, e],\n              [\"A\", n, n, 0, 1, 0, t - n, e],\n            ];\n          },\n          square: function (t, e, n) {\n            return [\n              [\"M\", t - n, e - n],\n              [\"L\", t + n, e - n],\n              [\"L\", t + n, e + n],\n              [\"L\", t - n, e + n],\n              [\"Z\"],\n            ];\n          },\n          diamond: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"L\", t, e - n],\n              [\"L\", t + n, e],\n              [\"L\", t, e + n],\n              [\"Z\"],\n            ];\n          },\n          triangle: function (t, e, n) {\n            var r = n * Math.sin((1 / 3) * Math.PI);\n            return [\n              [\"M\", t - n, e + r],\n              [\"L\", t, e - r],\n              [\"L\", t + n, e + r],\n              [\"Z\"],\n            ];\n          },\n          \"triangle-down\": function (t, e, n) {\n            var r = n * Math.sin((1 / 3) * Math.PI);\n            return [\n              [\"M\", t - n, e - r],\n              [\"L\", t + n, e - r],\n              [\"L\", t, e + r],\n              [\"Z\"],\n            ];\n          },\n        },\n        rt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.initAttrs = function (t) {\n              this._resetParamsCache();\n            }),\n            (e.prototype._resetParamsCache = function () {\n              this.set(\"paramsCache\", {});\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                -1 !== [\"symbol\", \"x\", \"y\", \"r\", \"radius\"].indexOf(e) &&\n                  this._resetParamsCache();\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype._getR = function (t) {\n              return Object(a.isNil)(t.r) ? t.radius : t.r;\n            }),\n            (e.prototype._getPath = function () {\n              var t,\n                n,\n                r = this.attr(),\n                i = r.x,\n                o = r.y,\n                s = r.symbol || \"circle\",\n                c = this._getR(r);\n              if (Object(a.isFunction)(s))\n                (n = (t = s)(i, o, c)), (n = Object(et.c)(n));\n              else {\n                if (!(t = e.Symbols[s]))\n                  return console.warn(s + \" marker is not supported.\"), null;\n                n = t(i, o, c);\n              }\n              return n;\n            }),\n            (e.prototype.createPath = function (t) {\n              X(this, t, { path: this._getPath() }, this.get(\"paramsCache\"));\n            }),\n            (e.Symbols = nt),\n            e\n          );\n        })(V);\n      function it(t) {\n        return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n      }\n      function ot(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      function at(t, e, n) {\n        var r = !1,\n          i = t.length;\n        if (i <= 2) return !1;\n        for (var o = 0; o < i; o++) {\n          var a = t[o],\n            s = t[(o + 1) % i];\n          if (ot(a, s, [e, n])) return !0;\n          it(a[1] - n) > 0 != it(s[1] - n) > 0 &&\n            it(e - ((n - a[1]) * (a[0] - s[0])) / (a[1] - s[1]) - a[0]) < 0 &&\n            (r = !r);\n        }\n        return r;\n      }\n      var st = n(3),\n        ct = n(72);\n      function ut(t, e, n, r, i, o, a, s) {\n        var c = (Math.atan2(s - e, a - t) + 2 * Math.PI) % (2 * Math.PI);\n        if (c < r || c > i) return !1;\n        var u = { x: t + n * Math.cos(c), y: e + n * Math.sin(c) };\n        return l(u.x, u.y, a, s) <= o / 2;\n      }\n      var ht = st.a.transform;\n      var lt = Object(i.a)(\n        {\n          hasArc: function (t) {\n            for (var e = !1, n = t.length, r = 0; r < n; r++) {\n              var i = t[r][0];\n              if (\"C\" === i || \"A\" === i || \"Q\" === i) {\n                e = !0;\n                break;\n              }\n            }\n            return e;\n          },\n          extractPolygons: function (t) {\n            for (var e = t.length, n = [], r = [], i = [], o = 0; o < e; o++) {\n              var a = t[o],\n                s = a[0];\n              \"M\" === s\n                ? (i.length && (r.push(i), (i = [])), i.push([a[1], a[2]]))\n                : \"Z\" === s\n                ? i.length && (n.push(i), (i = []))\n                : i.push([a[1], a[2]]);\n            }\n            return i.length > 0 && r.push(i), { polygons: n, polylines: r };\n          },\n          isPointInStroke: function (t, e, n, r, i) {\n            for (var o = !1, a = e / 2, s = 0; s < t.length; s++) {\n              var c = t[s],\n                u = c.currentPoint,\n                h = c.params,\n                l = c.prePoint,\n                d = c.box;\n              if (!d || f(d.x - a, d.y - a, d.width + e, d.height + e, n, r)) {\n                switch (c.command) {\n                  case \"L\":\n                  case \"Z\":\n                    o = J(l[0], l[1], u[0], u[1], e, n, r);\n                    break;\n                  case \"Q\":\n                    o =\n                      Q.e.pointDistance(\n                        l[0],\n                        l[1],\n                        h[1],\n                        h[2],\n                        h[3],\n                        h[4],\n                        n,\n                        r,\n                      ) <=\n                      e / 2;\n                    break;\n                  case \"C\":\n                    o =\n                      Q.b.pointDistance(\n                        l[0],\n                        l[1],\n                        h[1],\n                        h[2],\n                        h[3],\n                        h[4],\n                        h[5],\n                        h[6],\n                        n,\n                        r,\n                        i,\n                      ) <=\n                      e / 2;\n                    break;\n                  case \"A\":\n                    var p = c.arcParams,\n                      g = p.cx,\n                      v = p.cy,\n                      y = p.rx,\n                      m = p.ry,\n                      b = p.startAngle,\n                      x = p.endAngle,\n                      w = p.xRotation,\n                      S = [n, r, 1],\n                      O = y > m ? y : m,\n                      M = ht(null, [\n                        [\"t\", -g, -v],\n                        [\"r\", -w],\n                        [\"s\", 1 / (y > m ? 1 : y / m), 1 / (y > m ? m / y : 1)],\n                      ]);\n                    ct.transformMat3(S, S, M),\n                      (o = ut(0, 0, O, b, x, e, S[0], S[1]));\n                }\n                if (o) break;\n              }\n            }\n            return o;\n          },\n        },\n        o.e,\n      );\n      function ft(t, e, n) {\n        for (var r = !1, i = 0; i < t.length; i++) {\n          if ((r = at(t[i], e, n))) break;\n        }\n        return r;\n      }\n      var dt = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(i.c)(e, t),\n          (e.prototype.getDefaultAttrs = function () {\n            var e = t.prototype.getDefaultAttrs.call(this);\n            return Object(i.a)(Object(i.a)({}, e), {\n              startArrow: !1,\n              endArrow: !1,\n            });\n          }),\n          (e.prototype.initAttrs = function (t) {\n            this._setPathArr(t.path), this.setArrow();\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            t.prototype.onAttrChange.call(this, e, n, r),\n              \"path\" === e && this._setPathArr(n),\n              this.setArrow();\n          }),\n          (e.prototype._setPathArr = function (t) {\n            this.attrs.path = Object(et.c)(t);\n            var e = lt.hasArc(t);\n            this.set(\"hasArc\", e),\n              this.set(\"paramsCache\", {}),\n              this.set(\"segments\", null),\n              this.set(\"curve\", null),\n              this.set(\"tCache\", null),\n              this.set(\"totalLength\", null);\n          }),\n          (e.prototype.getSegments = function () {\n            var t = this.get(\"segements\");\n            return (\n              t ||\n                ((t = Object(et.d)(this.attr(\"path\"))),\n                this.set(\"segments\", t)),\n              t\n            );\n          }),\n          (e.prototype.setArrow = function () {\n            var t,\n              e = this.attr(),\n              n = e.startArrow,\n              r = e.endArrow;\n            n &&\n              N(\n                this,\n                e,\n                (t = this.getStartTangent())[0][0],\n                t[0][1],\n                t[1][0],\n                t[1][1],\n              );\n            r &&\n              B(\n                this,\n                e,\n                (t = this.getEndTangent())[0][0],\n                t[0][1],\n                t[1][0],\n                t[1][1],\n              );\n          }),\n          (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n            var o = this.getSegments(),\n              a = (this.get(\"hasArc\"), !1);\n            if (n) {\n              var s = this.getTotalLength();\n              a = lt.isPointInStroke(o, i, t, e, s);\n            }\n            if (!a && r) {\n              var c = this.attr(\"path\"),\n                u = lt.extractPolygons(c);\n              a = ft(u.polygons, t, e) || ft(u.polylines, t, e);\n            }\n            return a;\n          }),\n          (e.prototype.createPath = function (t) {\n            X(this, t, this.attr(), this.get(\"paramsCache\"));\n          }),\n          (e.prototype.afterDrawPath = function (t) {\n            var e = this.get(\"startArrowShape\"),\n              n = this.get(\"endArrowShape\");\n            e && e.draw(t), n && n.draw(t);\n          }),\n          (e.prototype.getTotalLength = function () {\n            var t = this.get(\"totalLength\");\n            return Object(a.isNil)(t)\n              ? (this._calculateCurve(),\n                this._setTcache(),\n                this.get(\"totalLength\"))\n              : t;\n          }),\n          (e.prototype.getPoint = function (t) {\n            var e,\n              n,\n              r = this.get(\"tCache\");\n            r ||\n              (this._calculateCurve(),\n              this._setTcache(),\n              (r = this.get(\"tCache\")));\n            var i = this.get(\"curve\");\n            if (!r || 0 === r.length)\n              return i ? { x: i[0][1], y: i[0][2] } : null;\n            Object(a.each)(r, function (r, i) {\n              t >= r[0] &&\n                t <= r[1] &&\n                ((e = (t - r[0]) / (r[1] - r[0])), (n = i));\n            });\n            var o = i[n];\n            if (Object(a.isNil)(o) || Object(a.isNil)(n)) return null;\n            var s = o.length,\n              c = i[n + 1];\n            return Q.b.pointAt(\n              o[s - 2],\n              o[s - 1],\n              c[1],\n              c[2],\n              c[3],\n              c[4],\n              c[5],\n              c[6],\n              e,\n            );\n          }),\n          (e.prototype._calculateCurve = function () {\n            var t = this.attr().path;\n            this.set(\"curve\", lt.pathToCurve(t));\n          }),\n          (e.prototype._setTcache = function () {\n            var t,\n              e,\n              n,\n              r,\n              i = 0,\n              o = 0,\n              s = [],\n              c = this.get(\"curve\");\n            c &&\n              (Object(a.each)(c, function (t, e) {\n                (n = c[e + 1]),\n                  (r = t.length),\n                  n &&\n                    (i +=\n                      Q.b.length(\n                        t[r - 2],\n                        t[r - 1],\n                        n[1],\n                        n[2],\n                        n[3],\n                        n[4],\n                        n[5],\n                        n[6],\n                      ) || 0);\n              }),\n              this.set(\"totalLength\", i),\n              0 !== i\n                ? (Object(a.each)(c, function (a, u) {\n                    (n = c[u + 1]),\n                      (r = a.length),\n                      n &&\n                        (((t = [])[0] = o / i),\n                        (e = Q.b.length(\n                          a[r - 2],\n                          a[r - 1],\n                          n[1],\n                          n[2],\n                          n[3],\n                          n[4],\n                          n[5],\n                          n[6],\n                        )),\n                        (o += e || 0),\n                        (t[1] = o / i),\n                        s.push(t));\n                  }),\n                  this.set(\"tCache\", s))\n                : this.set(\"tCache\", []));\n          }),\n          (e.prototype.getStartTangent = function () {\n            var t,\n              e = this.getSegments();\n            if (e.length > 1) {\n              var n = e[0].currentPoint,\n                r = e[1].currentPoint,\n                i = e[1].startTangent;\n              (t = []),\n                i\n                  ? (t.push([n[0] - i[0], n[1] - i[1]]), t.push([n[0], n[1]]))\n                  : (t.push([r[0], r[1]]), t.push([n[0], n[1]]));\n            }\n            return t;\n          }),\n          (e.prototype.getEndTangent = function () {\n            var t,\n              e = this.getSegments(),\n              n = e.length;\n            if (n > 1) {\n              var r = e[n - 2].currentPoint,\n                i = e[n - 1].currentPoint,\n                o = e[n - 1].endTangent;\n              (t = []),\n                o\n                  ? (t.push([i[0] - o[0], i[1] - o[1]]), t.push([i[0], i[1]]))\n                  : (t.push([r[0], r[1]]), t.push([i[0], i[1]]));\n            }\n            return t;\n          }),\n          e\n        );\n      })(V);\n      function pt(t, e, n, r, i) {\n        var o = t.length;\n        if (o < 2) return !1;\n        for (var a = 0; a < o - 1; a++) {\n          if (J(t[a][0], t[a][1], t[a + 1][0], t[a + 1][1], e, n, r)) return !0;\n        }\n        if (i) {\n          var s = t[0],\n            c = t[o - 1];\n          if (J(s[0], s[1], c[0], c[1], e, n, r)) return !0;\n        }\n        return !1;\n      }\n      var gt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr().points,\n                a = !1;\n              return (\n                n && (a = pt(o, i, t, e, !0)), !a && r && (a = at(o, t, e)), a\n              );\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr().points;\n              if (!(e.length < 2)) {\n                t.beginPath();\n                for (var n = 0; n < e.length; n++) {\n                  var r = e[n];\n                  0 === n ? t.moveTo(r[0], r[1]) : t.lineTo(r[0], r[1]);\n                }\n                t.closePath();\n              }\n            }),\n            e\n          );\n        })(V),\n        vt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                startArrow: !1,\n                endArrow: !1,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this.setArrow();\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                this.setArrow(),\n                -1 !== [\"points\"].indexOf(e) && this._resetCache();\n            }),\n            (e.prototype._resetCache = function () {\n              this.set(\"totalLength\", null), this.set(\"tCache\", null);\n            }),\n            (e.prototype.setArrow = function () {\n              var t = this.attr(),\n                e = this.attrs,\n                n = e.points,\n                r = e.startArrow,\n                i = e.endArrow,\n                o = n.length,\n                a = n[0][0],\n                s = n[0][1],\n                c = n[o - 1][0],\n                u = n[o - 1][1];\n              r && N(this, t, n[1][0], n[1][1], a, s),\n                i && B(this, t, n[o - 2][0], n[o - 2][1], c, u);\n            }),\n            (e.prototype.isFill = function () {\n              return !1;\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              return !(!n || !i) && pt(this.attr().points, i, t, e, !1);\n            }),\n            (e.prototype.isStroke = function () {\n              return !0;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.points,\n                r = e.startArrow,\n                i = e.endArrow,\n                o = n.length;\n              if (!(n.length < 2)) {\n                var a,\n                  s = n[0][0],\n                  c = n[0][1],\n                  u = n[o - 1][0],\n                  h = n[o - 1][1];\n                if (r && r.d)\n                  (s += (a = T(s, c, n[1][0], n[1][1], r.d)).dx), (c += a.dy);\n                if (i && i.d)\n                  (u -= (a = T(n[o - 2][0], n[o - 2][1], u, h, i.d)).dx),\n                    (h -= a.dy);\n                t.beginPath(), t.moveTo(s, c);\n                for (var l = 0; l < o - 1; l++) {\n                  var f = n[l];\n                  t.lineTo(f[0], f[1]);\n                }\n                t.lineTo(u, h);\n              }\n            }),\n            (e.prototype.afterDrawPath = function (t) {\n              var e = this.get(\"startArrowShape\"),\n                n = this.get(\"endArrowShape\");\n              e && e.draw(t), n && n.draw(t);\n            }),\n            (e.prototype.getTotalLength = function () {\n              var t = this.attr().points,\n                e = this.get(\"totalLength\");\n              return Object(a.isNil)(e)\n                ? (this.set(\"totalLength\", Q.d.length(t)),\n                  this.get(\"totalLength\"))\n                : e;\n            }),\n            (e.prototype.getPoint = function (t) {\n              var e,\n                n,\n                r = this.attr().points,\n                i = this.get(\"tCache\");\n              return (\n                i || (this._setTcache(), (i = this.get(\"tCache\"))),\n                Object(a.each)(i, function (r, i) {\n                  t >= r[0] &&\n                    t <= r[1] &&\n                    ((e = (t - r[0]) / (r[1] - r[0])), (n = i));\n                }),\n                Q.c.pointAt(r[n][0], r[n][1], r[n + 1][0], r[n + 1][1], e)\n              );\n            }),\n            (e.prototype._setTcache = function () {\n              var t = this.attr().points;\n              if (t && 0 !== t.length) {\n                var e = this.getTotalLength();\n                if (!(e <= 0)) {\n                  var n,\n                    r,\n                    i = 0,\n                    o = [];\n                  Object(a.each)(t, function (a, s) {\n                    t[s + 1] &&\n                      (((n = [])[0] = i / e),\n                      (r = Q.c.length(a[0], a[1], t[s + 1][0], t[s + 1][1])),\n                      (i += r),\n                      (n[1] = i / e),\n                      o.push(n));\n                  }),\n                    this.set(\"tCache\", o);\n                }\n              }\n            }),\n            (e.prototype.getStartTangent = function () {\n              var t = this.attr().points,\n                e = [];\n              return e.push([t[1][0], t[1][1]]), e.push([t[0][0], t[0][1]]), e;\n            }),\n            (e.prototype.getEndTangent = function () {\n              var t = this.attr().points,\n                e = t.length - 1,\n                n = [];\n              return (\n                n.push([t[e - 1][0], t[e - 1][1]]),\n                n.push([t[e][0], t[e][1]]),\n                n\n              );\n            }),\n            e\n          );\n        })(V);\n      var yt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0,\n                radius: 0,\n              });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr(),\n                a = o.x,\n                s = o.y,\n                c = o.width,\n                u = o.height,\n                h = o.radius;\n              if (h) {\n                var l = !1;\n                return (\n                  n &&\n                    (l = (function (t, e, n, r, i, o, a, s) {\n                      return (\n                        J(t + i, e, t + n - i, e, o, a, s) ||\n                        J(t + n, e + i, t + n, e + r - i, o, a, s) ||\n                        J(t + n - i, e + r, t + i, e + r, o, a, s) ||\n                        J(t, e + r - i, t, e + i, o, a, s) ||\n                        ut(\n                          t + n - i,\n                          e + i,\n                          i,\n                          1.5 * Math.PI,\n                          2 * Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        ut(\n                          t + n - i,\n                          e + r - i,\n                          i,\n                          0,\n                          0.5 * Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        ut(\n                          t + i,\n                          e + r - i,\n                          i,\n                          0.5 * Math.PI,\n                          Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        ut(t + i, e + i, i, Math.PI, 1.5 * Math.PI, o, a, s)\n                      );\n                    })(a, s, c, u, h, i, t, e)),\n                  !l && r && (l = f(a, s, c, u, t, e)),\n                  l\n                );\n              }\n              var d = i / 2;\n              return r && n\n                ? f(a - d, s - d, c + d, u + d, t, e)\n                : r\n                ? f(a, s, c, u, t, e)\n                : n\n                ? (function (t, e, n, r, i, o, a) {\n                    var s = i / 2;\n                    return (\n                      f(t - s, e - s, n, i, o, a) ||\n                      f(t + n - s, e - s, i, r, o, a) ||\n                      f(t + s, e + r - s, n, i, o, a) ||\n                      f(t - s, e + s, i, r, o, a)\n                    );\n                  })(a, s, c, u, i, t, e)\n                : void 0;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.width,\n                o = e.height,\n                s = e.radius;\n              if ((t.beginPath(), 0 === s)) t.rect(n, r, i, o);\n              else {\n                var c = (function (t) {\n                    var e = 0,\n                      n = 0,\n                      r = 0,\n                      i = 0;\n                    return (\n                      Object(a.isArray)(t)\n                        ? 1 === t.length\n                          ? (e = n = r = i = t[0])\n                          : 2 === t.length\n                          ? ((e = r = t[0]), (n = i = t[1]))\n                          : 3 === t.length\n                          ? ((e = t[0]), (n = i = t[1]), (r = t[2]))\n                          : ((e = t[0]), (n = t[1]), (r = t[2]), (i = t[3]))\n                        : (e = n = r = i = t),\n                      [e, n, r, i]\n                    );\n                  })(s),\n                  u = c[0],\n                  h = c[1],\n                  l = c[2],\n                  f = c[3];\n                t.moveTo(n + u, r),\n                  t.lineTo(n + i - h, r),\n                  0 !== h && t.arc(n + i - h, r + h, h, -Math.PI / 2, 0),\n                  t.lineTo(n + i, r + o - l),\n                  0 !== l && t.arc(n + i - l, r + o - l, l, 0, Math.PI / 2),\n                  t.lineTo(n + f, r + o),\n                  0 !== f && t.arc(n + f, r + o - f, f, Math.PI / 2, Math.PI),\n                  t.lineTo(n, r + u),\n                  0 !== u && t.arc(n + u, r + u, u, Math.PI, 1.5 * Math.PI),\n                  t.closePath();\n              }\n            }),\n            e\n          );\n        })(V),\n        mt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\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              });\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this._assembleFont(), t.text && this._setText(t.text);\n            }),\n            (e.prototype._assembleFont = function () {\n              var t = this.attrs;\n              t.font = Object(o.f)(t);\n            }),\n            (e.prototype._setText = function (t) {\n              var e = null;\n              Object(a.isString)(t) &&\n                -1 !== t.indexOf(\"\\n\") &&\n                (e = t.split(\"\\n\")),\n                this.set(\"textArr\", e);\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                e.startsWith(\"font\") && this._assembleFont(),\n                \"text\" === e && this._setText(n);\n            }),\n            (e.prototype._getSpaceingY = function () {\n              var t = this.attrs,\n                e = t.lineHeight,\n                n = 1 * t.fontSize;\n              return e ? e - n : 0.14 * n;\n            }),\n            (e.prototype._drawTextArr = function (t, e, n) {\n              var r,\n                i = this.attrs,\n                s = i.textBaseline,\n                c = i.x,\n                u = i.y,\n                h = 1 * i.fontSize,\n                l = this._getSpaceingY(),\n                f = Object(o.h)(i.text, i.fontSize, i.lineHeight);\n              Object(a.each)(e, function (e, i) {\n                (r = u + i * (l + h) - f + h),\n                  \"middle\" === s && (r += f - h - (f - h) / 2),\n                  \"top\" === s && (r += f - h),\n                  n ? t.fillText(e, c, r) : t.strokeText(e, c, r);\n              });\n            }),\n            (e.prototype._drawText = function (t, e) {\n              var n = this.attr(),\n                r = n.x,\n                i = n.y,\n                o = this.get(\"textArr\");\n              if (o) this._drawTextArr(t, o, e);\n              else {\n                var a = n.text;\n                e ? t.fillText(a, r, i) : t.strokeText(a, r, i);\n              }\n            }),\n            (e.prototype.strokeAndFill = function (t) {\n              var e = this.attrs,\n                n = e.lineWidth,\n                r = e.opacity,\n                i = e.strokeOpacity,\n                o = e.fillOpacity;\n              this.isStroke() &&\n                n > 0 &&\n                (Object(a.isNil)(i) || 1 === i || (t.globalAlpha = r),\n                this.stroke(t)),\n                this.isFill() &&\n                  (Object(a.isNil)(o) || 1 === o\n                    ? this.fill(t)\n                    : ((t.globalAlpha = o), this.fill(t), (t.globalAlpha = r))),\n                this.afterDrawPath(t);\n            }),\n            (e.prototype.fill = function (t) {\n              this._drawText(t, !0);\n            }),\n            (e.prototype.stroke = function (t) {\n              this._drawText(t, !1);\n            }),\n            e\n          );\n        })(V);\n      function bt(t, e, n) {\n        var r = t.getTotalMatrix();\n        if (r) {\n          var i = (function (t, e) {\n            if (e) {\n              var n = Object(o.i)(e);\n              return Object(o.k)(n, t);\n            }\n            return t;\n          })([e, n, 1], r);\n          return [i[0], i[1]];\n        }\n        return [e, n];\n      }\n      function xt(t, e, n) {\n        if (t.isCanvas && t.isCanvas()) return !0;\n        if (!Object(o.j)(t) || !1 === t.cfg.isInView) return !1;\n        if (t.cfg.clipShape) {\n          var r = bt(t, e, n),\n            i = r[0],\n            a = r[1];\n          if (t.isClipped(i, a)) return !1;\n        }\n        var s = t.cfg.cacheCanvasBBox || t.getCanvasBBox();\n        return e >= s.minX && e <= s.maxX && n >= s.minY && n <= s.maxY;\n      }\n      var wt = n(30),\n        St = n.n(wt);\n      function Ot(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function Mt(t, e, n) {\n        if (n.bubbles) {\n          t.isCanvas(),\n            0,\n            (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var kt = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.panstartShape = null),\n              (this.panstartPoint = null),\n              (this.handleEvent = function (t) {\n                e.hammerRuntime.emit(\"origin_input:\" + t.type, t);\n              }),\n              (this.canvas = t.canvas),\n              this._initEvent();\n          }\n          return (\n            (t.prototype._initEvent = function () {\n              var t = this;\n              (this.hammerRuntime = new St.a(\n                {},\n                { inputClass: wt.TouchInput },\n              )),\n                this.hammerRuntime.add(\n                  new St.a.Pan({ threshold: 0, pointers: 1 }),\n                ),\n                this.hammerRuntime\n                  .add(new St.a.Swipe())\n                  .recognizeWith(this.hammerRuntime.get(\"pan\")),\n                this.hammerRuntime.add(\n                  new St.a.Pinch({ threshold: 0, pointers: 2 }),\n                ),\n                this.hammerRuntime.add(\n                  new St.a.Tap({ event: \"dbltap\", taps: 2 }),\n                ),\n                this.hammerRuntime.add(new St.a.Tap()),\n                this.hammerRuntime.add(new St.a.Press({ time: 500 })),\n                this.hammerRuntime.on(\n                  \"panstart panmove panend pancancel\",\n                  function (e) {\n                    e.srcEvent.extra = e;\n                    var n = t._getPointInfo(e),\n                      r = t._getShape(n, e);\n                    (\"panend\" !== e.type && \"pancancel\" !== e.type) ||\n                      t._onpanend(n, r, e),\n                      \"panstart\" === e.type &&\n                        (t.dragging &&\n                          ((t.draggingShape = null),\n                          (t.dragging = !1),\n                          (t.panstartShape = null),\n                          (t.panstartPoint = null)),\n                        t._onpanstart(n, r, e)),\n                      \"panmove\" === e.type && t._onpanmove(n, r, e),\n                      (t.currentShape = r);\n                  },\n                ),\n                this.hammerRuntime.on(\n                  \"tap dbltap press swipe rotatestart rotatemove\",\n                  function (e) {\n                    t._emitMobileEvent(e.type, e);\n                  },\n                ),\n                this.hammerRuntime.on(\n                  \"pinchstart pinchmove pinchend pinchcancel\",\n                  function (e) {\n                    \"pinchend\" !== e.type && \"pinchcancel\" !== e.type\n                      ? ((e.srcEvent.extra = { scale: e.scale }),\n                        t._emitMobileEvent(e.type, e))\n                      : t._emitMobileEvent(e.type, e);\n                  },\n                );\n            }),\n            (t.prototype._emitMobileEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e);\n              this._emitEvent(t, e, n, r);\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, i, a) {\n              var s = new o.d(t, e);\n              return (\n                (s.fromShape = i),\n                (s.toShape = a),\n                (s.x = n.x),\n                (s.y = n.y),\n                (s.clientX = n.clientX),\n                (s.clientY = n.clientY),\n                s.propagationPath.push(r),\n                s\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              var n = e.srcEvent;\n              return this.canvas.getShape(t.x, t.y, n);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t];\n              if (i) i.call(this, n, r, e);\n              else {\n                var o = this.currentShape;\n                \"panstart\" === t || \"dragenter\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"panstart\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"panend\" === t || \"dragleave\" === t\n                  ? (o && this._emitEvent(t, e, n, o, o, null),\n                    this._emitEvent(t, e, n, null, o, null),\n                    \"panend\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n            }),\n            (t.prototype._onpanstart = function (t, e, n) {\n              (this.panstartShape = e),\n                (this.panstartPoint = t),\n                (this.panstartTimeStamp = n.timeStamp),\n                this._emitEvent(\"panstart\", n, t, e, null, null);\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              this.currentShape = r;\n            }),\n            (t.prototype._onpanend = function (t, e, n) {\n              var r = this.draggingShape;\n              this.dragging &&\n                (r && this._emitEvent(\"drop\", n, t, e),\n                this._emitEvent(\"dragend\", n, t, r),\n                this._afterDrag(r, t, n)),\n                this._emitEvent(\"panend\", n, t, e),\n                (this.panstartShape = null),\n                (this.panstartPoint = null);\n            }),\n            (t.prototype._onpanmove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.panstartPoint;\n                if (a) {\n                  var s = this.panstartShape,\n                    c = n.timeStamp - this.panstartTimeStamp,\n                    u = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  (c > 120 || u * u + h * h > 40) &&\n                    (s && s.get(\"draggable\")\n                      ? ((o = this.panstartShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.panstartShape = null),\n                        (this.panstartPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.panstartShape = null),\n                        (this.panstartPoint = null))\n                      : this._emitEvent(\"panmove\", n, t, e));\n                }\n              }\n              this._emitEvent(\"panmove\", n, t, e);\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), Ot(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || Mt(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                Ot(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.panstartPoint = null),\n                (this.panstartShape = null),\n                (this.panstartTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        Ct = (function () {\n          function t() {}\n          return (\n            (t.prototype.set = function (t, e, n) {\n              switch (e) {\n                case \"strokeStyle\":\n                  t.setStrokeStyle(n);\n                  break;\n                case \"fillStyle\":\n                  t.setFillStyle(n);\n                  break;\n                case \"lineWidth\":\n                  t.setLineWidth(n);\n                  break;\n                case \"lineDash\":\n                  t.setLineDash(n);\n                  break;\n                case \"globalAlpha\":\n                  (n || 0 === n) && ((t.globalAlpha = n), t.setGlobalAlpha(n));\n                  break;\n                case \"fontSize\":\n                  t.setFontSize(n);\n                  break;\n                case \"textAlign\":\n                  t.setTextAlign(n);\n                  break;\n                case \"fontStyle\":\n                case \"font\":\n                  t.setFont(n);\n                  break;\n                case \"textBaseline\":\n                  t.setTextBaseline(n);\n                  break;\n                default:\n                  t[e] = n;\n              }\n              return !0;\n            }),\n            (t.prototype.get = function (t, e) {\n              return \"globalAlpha\" === e && void 0 === t[e]\n                ? 1\n                : \"function\" == typeof t[e]\n                ? t[e].bind(t)\n                : t[e];\n            }),\n            t\n          );\n        })(),\n        Et = n(98),\n        jt = null;\n      var Pt = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            s = e.lineHeight,\n            c = e.font;\n          c || (c = Object(Et.assembleFont)(e));\n          var u,\n            h = (function (t, e) {\n              var n = 0;\n              if (Object(a.isNil)(t) || \"\" === t) return n;\n              if (\n                (jt.save(),\n                (jt.font = e),\n                Object(a.isString)(t) && t.includes(\"\\n\"))\n              ) {\n                var r = t.split(\"\\n\");\n                Object(a.each)(r, function (t) {\n                  var e = jt.measureText(t).width;\n                  n < e && (n = e);\n                });\n              } else n = jt.measureText(t).width;\n              return jt.restore(), n;\n            })(i, c);\n          if (h) {\n            var l = e.textAlign,\n              f = e.textBaseline,\n              d = Object(Et.getTextHeight)(i, o, s),\n              p = { x: n, y: r - d };\n            l &&\n              (\"end\" === l || \"right\" === l\n                ? (p.x -= h)\n                : \"center\" === l && (p.x -= h / 2)),\n              f &&\n                (\"top\" === f ? (p.y += d) : \"middle\" === f && (p.y += d / 2)),\n              (u = { x: p.x, y: p.y, width: h, height: d });\n          } else u = { x: n, y: r, width: 0, height: 0 };\n          return u;\n        },\n        At = function (t) {\n          (jt = t), Object(o.l)(\"text\", Pt);\n        },\n        It = function (t, e) {\n          !(function (t) {\n            K = t;\n          })(e),\n            At(t);\n        },\n        Tt = (function (t) {\n          function e(e) {\n            var n,\n              r = t.call(this, e) || this,\n              i = r.get(\"context\");\n            return (\n              r.isMini() &&\n                (r.isMiniNative()\n                  ? (void 0 === (n = r.get(\"container\")) && (n = {}), (n = n))\n                  : r.set(\"context\", new Proxy(i, new Ct())),\n                It(i, r)),\n              r\n            );\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.isMiniNative = function () {\n              return \"mini-native\" === this.get(\"renderer\");\n            }),\n            (e.prototype.isMini = function () {\n              return this.get(\"renderer\").startsWith(\"mini\");\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              var e = t.prototype.getDefaultCfg.call(this);\n              return (\n                (e.renderer = \"canvas\"),\n                (e.autoDraw = !0),\n                (e.localRefresh = !0),\n                (e.refreshElements = []),\n                (e.clipView = !0),\n                (e.quickHit = !1),\n                (e.boundingClientRect = {\n                  width: 0,\n                  height: 0,\n                  left: 0,\n                  top: 0,\n                  bottom: 0,\n                  right: 0,\n                }),\n                e\n              );\n            }),\n            (e.prototype.initEvents = function () {\n              var t = new kt({ canvas: this });\n              this.set(\"eventController\", t);\n            }),\n            (e.prototype.registerEventCallback = function (t) {\n              this.get(\"eventController\").handleEvent(t);\n            }),\n            (e.prototype.clearEvents = function () {\n              this.get(\"eventController\").destroy();\n            }),\n            (e.prototype.onCanvasChange = function (t) {\n              (\"attr\" !== t && \"sort\" !== t && \"changeSize\" !== t) ||\n                (this.set(\"refreshElements\", [this]), this.draw());\n            }),\n            (e.prototype.getShapeBase = function () {\n              return r;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return q;\n            }),\n            (e.prototype.getPixelRatio = function () {\n              var t =\n                this.get(\"pixelRatio\") ||\n                (\"object\" ===\n                  (\"undefined\" == typeof window ? \"undefined\" : h(window)) &&\n                window.devicePixelRatio\n                  ? window.devicePixelRatio\n                  : 1);\n              return t >= 1 ? Math.ceil(t) : 1;\n            }),\n            (e.prototype.getViewRange = function () {\n              return {\n                minX: 0,\n                minY: 0,\n                maxX: this.cfg.width,\n                maxY: this.cfg.height,\n              };\n            }),\n            (e.prototype.initDom = function () {\n              if (this.isMini()) {\n                var e = this.get(\"context\"),\n                  n = this.getPixelRatio();\n                n > 1 && e.scale(n, n);\n              } else t.prototype.initDom.call(this);\n            }),\n            (e.prototype.createDom = function () {\n              var t = document.createElement(\"canvas\"),\n                e = t.getContext(\"2d\");\n              return this.set(\"context\", e), t;\n            }),\n            (e.prototype.setDOMSize = function (e, n) {\n              t.prototype.setDOMSize.call(this, e, n);\n              var r = this.get(\"context\"),\n                i = this.get(\"el\"),\n                o = this.getPixelRatio();\n              (i.width = o * e), (i.height = o * n), o > 1 && r.scale(o, o);\n            }),\n            (e.prototype.clear = function () {\n              t.prototype.clear.call(this),\n                this._clearFrame(),\n                this.get(\"context\").clearRect(\n                  0,\n                  0,\n                  this.get(\"width\"),\n                  this.get(\"height\"),\n                );\n            }),\n            (e.prototype.getShape = function (e, n) {\n              return this.get(\"quickHit\")\n                ? (function t(e, n, r) {\n                    if (!xt(e, n, r)) return null;\n                    for (\n                      var i = null, o = e.getChildren(), a = o.length - 1;\n                      a >= 0;\n                      a--\n                    ) {\n                      var s = o[a];\n                      if (s.isGroup()) i = t(s, n, r);\n                      else if (xt(s, n, r)) {\n                        var c = s,\n                          u = bt(s, n, r),\n                          h = u[0],\n                          l = u[1];\n                        c.isInShape(h, l) && (i = s);\n                      }\n                      if (i) break;\n                    }\n                    return i;\n                  })(this, e, n)\n                : t.prototype.getShape.call(this, e, n, null);\n            }),\n            (e.prototype._getRefreshRegion = function () {\n              var t,\n                e = this.get(\"refreshElements\"),\n                n = this.getViewRange();\n              e.length && e[0] === this\n                ? (t = n)\n                : (t = (function (t) {\n                    if (!t.length) return null;\n                    var e = [],\n                      n = [],\n                      r = [],\n                      i = [];\n                    return (\n                      Object(a.each)(t, function (t) {\n                        var o = W(t);\n                        o &&\n                          (e.push(o.minX),\n                          n.push(o.minY),\n                          r.push(o.maxX),\n                          i.push(o.maxY));\n                      }),\n                      {\n                        minX: Math.min.apply(null, e),\n                        minY: Math.min.apply(null, n),\n                        maxX: Math.max.apply(null, r),\n                        maxY: Math.max.apply(null, i),\n                      }\n                    );\n                  })(e)) &&\n                  ((t.minX = Math.floor(t.minX)),\n                  (t.minY = Math.floor(t.minY)),\n                  (t.maxX = Math.ceil(t.maxX)),\n                  (t.maxY = Math.ceil(t.maxY)),\n                  (t.maxY += 1),\n                  this.get(\"clipView\") &&\n                    (t = (function (t, e) {\n                      return t && e && d(t, e)\n                        ? {\n                            minX: Math.max(t.minX, e.minX),\n                            minY: Math.max(t.minY, e.minY),\n                            maxX: Math.min(t.maxX, e.maxX),\n                            maxY: Math.min(t.maxY, e.maxY),\n                          }\n                        : null;\n                    })(t, n)));\n              return t;\n            }),\n            (e.prototype._clearFrame = function () {\n              var t = this.get(\"drawFrame\");\n              t &&\n                (u(t),\n                this.set(\"drawFrame\", null),\n                this.set(\"refreshElements\", []));\n            }),\n            (e.prototype.draw = function () {\n              var t = this.get(\"drawFrame\");\n              (this.get(\"autoDraw\") && t) || this._startDraw();\n            }),\n            (e.prototype._startDraw = function () {\n              var t,\n                e = this,\n                n = this.get(\"drawFrame\");\n              n ||\n                ((t = function () {\n                  e.get(\"localRefresh\") ? e._drawRegion() : e._drawAll(),\n                    u(n),\n                    e.set(\"drawFrame\", null);\n                }),\n                (n = (null == c ? void 0 : c.requestAnimationFrame)\n                  ? c.requestAnimationFrame(t)\n                  : (\"object\" ===\n                      (\"undefined\" == typeof window\n                        ? \"undefined\"\n                        : s(window)) && window.requestAnimationFrame\n                      ? window.requestAnimationFrame\n                      : function (t) {\n                          return setTimeout(t, 16);\n                        })(t)),\n                this.set(\"drawFrame\", n));\n            }),\n            (e.prototype._drawRegion = function () {\n              var t = this.get(\"context\"),\n                e = this.get(\"refreshElements\"),\n                n = this.getChildren(),\n                r = this._getRefreshRegion();\n              r\n                ? (t.clearRect(\n                    r.minX,\n                    r.minY,\n                    r.maxX - r.minX,\n                    r.maxY - r.minY,\n                  ),\n                  t.save(),\n                  t.beginPath(),\n                  t.rect(r.minX, r.minY, r.maxX - r.minX, r.maxY - r.minY),\n                  t.clip(),\n                  D(t, this),\n                  R(this, n, r),\n                  _(t, n, r),\n                  t.restore())\n                : e.length &&\n                  (function t(e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.cfg.hasChanged = !1),\n                        r.isGroup() && !r.destroyed && t(r.cfg.children);\n                    }\n                  })(e),\n                Object(a.each)(e, function (t) {\n                  t.get(\"hasChanged\") && t.set(\"hasChanged\", !1);\n                }),\n                this.isMini() && !this.isMiniNative() && t.draw(!0),\n                this.set(\"refreshElements\", []);\n            }),\n            (e.prototype._drawAll = function () {\n              var t = this.get(\"context\"),\n                e = this.getChildren();\n              t.clearRect(0, 0, this.get(\"width\"), this.get(\"height\")),\n                D(t, this),\n                _(t, e),\n                this.isMini() && !this.isMiniNative() && t.draw(!0),\n                this.set(\"refreshElements\", []);\n            }),\n            (e.prototype.skipDraw = function () {}),\n            (e.prototype.refreshElement = function (t) {\n              this.get(\"refreshElements\").push(t);\n            }),\n            (e.prototype.getPointByEvent = function (e) {\n              if (this.isMini()) {\n                var n = this.getClientByEvent(e),\n                  r = n.x,\n                  i = n.y;\n                return this.getPointByClient(r, i);\n              }\n              return t.prototype.getPointByEvent.call(this, e);\n            }),\n            (e.prototype.getClientByEvent = function (t) {\n              var e = t.srcEvent,\n                n = null;\n              return (\n                e.touches &&\n                  (n =\n                    \"touchend\" === e.type ? e.changedTouches[0] : e.touches[0]),\n                n ? { x: n.clientX, y: n.clientY } : {}\n              );\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              if (this.isMini()) {\n                var n = this.get(\"boundingClientRect\");\n                return { x: t + n.left, y: e + n.top };\n              }\n              var r = this.get(\"el\").getBoundingClientRect();\n              return { x: t - r.left, y: e - r.top };\n            }),\n            (e.prototype.removeDom = function () {\n              this.isMini() || t.prototype.removeDom.call(this);\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              if (this.isMini()) {\n                var n = this.get(\"boundingClientRect\");\n                return { x: t + n.left, y: e + n.top };\n              }\n              var r = this.get(\"el\").getBoundingClientRect();\n              return { x: t + r.left, y: e + r.top };\n            }),\n            e\n          );\n        })(o.a),\n        Nt = n(4);\n      var Bt = n(2),\n        Lt = n(18),\n        Dt = Bt.h.cloneEvent,\n        _t = Bt.h.isViewportChanged,\n        Rt = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.extendEvents = []),\n              (n.dragging = !1),\n              (n.preItem = null),\n              (n.graph = e),\n              (n.destroyed = !1),\n              n\n            );\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.initEvents = function () {\n              var t = this.graph,\n                e = (this.extendEvents, t.get(\"canvas\"));\n              (this.canvasHandler = Object(a.wrapBehavior)(\n                this,\n                \"onCanvasEvents\",\n              )),\n                e.off(\"*\").on(\"*\", this.canvasHandler);\n            }),\n            (e.getItemRoot = function (t) {\n              for (; t && !t.get(\"item\"); ) t = t.get(\"parent\");\n              return t;\n            }),\n            (e.prototype.onCanvasEvents = function (t) {\n              var n = this.graph,\n                r = n.get(\"canvas\"),\n                i = t.target,\n                o = t.type;\n              (t.canvasX = t.x), (t.canvasY = t.y);\n              var a = { x: t.canvasX, y: t.canvasY },\n                s = n.get(\"group\").getMatrix();\n              if (\n                (s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                _t(s) && (a = n.getPointByClient(t.clientX, t.clientY)),\n                (t.x = a.x),\n                (t.y = a.y),\n                (t.currentTarget = n),\n                i === r)\n              )\n                return (\n                  \"panmove\" === o && this.handleTouchMove(t, \"canvas\"),\n                  (t.target = r),\n                  (t.item = null),\n                  n.emit(o, t),\n                  void n.emit(\"canvas:\" + o, t)\n                );\n              var c = e.getItemRoot(i);\n              if (c) {\n                var u = c.get(\"item\");\n                if (!u.destroyed) {\n                  var h = u.getType();\n                  if (\n                    ((t.target = i),\n                    (t.item = u),\n                    t.canvasX === t.x && t.canvasY === t.y)\n                  ) {\n                    var l = n.getCanvasByPoint(t.x, t.y);\n                    (t.canvasX = l.x), (t.canvasY = l.y);\n                  }\n                  n.emit(o, t),\n                    t.name && !t.name.includes(\":\")\n                      ? n.emit(h + \":\" + o, t)\n                      : n.emit(t.name, t),\n                    \"dragstart\" === o && (this.dragging = !0),\n                    \"dragend\" === o && (this.dragging = !1),\n                    \"panmove\" === o && this.handleTouchMove(t, h);\n                }\n              } else n.emit(o, t);\n            }),\n            (e.prototype.onExtendEvents = function (t) {\n              this.graph.emit(t.type, t);\n            }),\n            (e.prototype.emitCustomEvent = function (t, e, n) {\n              (n.type = e), this.graph.emit(t + \":\" + e, n);\n            }),\n            (e.prototype.destroy = function () {\n              var t = this.graph,\n                e = this.canvasHandler,\n                n = this.extendEvents;\n              t.get(\"canvas\").off(\"*\", e),\n                Object(a.each)(n, function (t) {\n                  t.remove();\n                }),\n                (this.dragging = !1),\n                (this.preItem = null),\n                (this.extendEvents.length = 0),\n                (this.canvasHandler = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.handleTouchMove = function (t, e) {\n              var n = this.graph,\n                r = this.preItem,\n                i = n.get(\"canvas\"),\n                o = t.target === i ? null : t.item;\n              (t = Dt(t)),\n                r &&\n                  r !== o &&\n                  !r.destroyed &&\n                  ((t.item = r),\n                  this.emitCustomEvent(r.getType(), \"touchleave\", t),\n                  this.dragging &&\n                    this.emitCustomEvent(r.getType(), \"dragleave\", t)),\n                o &&\n                  r !== o &&\n                  ((t.item = o),\n                  this.emitCustomEvent(e, \"touchenter\", t),\n                  this.dragging && this.emitCustomEvent(e, \"dragenter\", t)),\n                (this.preItem = o);\n            }),\n            e\n          );\n        })(Bt.a),\n        Ft = n(26),\n        Yt = [\"force\", \"grid\", \"circular\"],\n        Xt = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.graph = e),\n              (n.layoutCfg = e.get(\"layout\") || {}),\n              (n.layoutType = n.getLayoutType()),\n              n\n            );\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.updateLayoutCfg = function (t) {\n              var e = this,\n                n = this.graph,\n                r = this.layoutMethods,\n                i = Object(a.mix)({}, this.layoutCfg, t);\n              if (((this.layoutCfg = i), null == r ? void 0 : r.length)) {\n                (this.data = this.setDataFromGraph()), n.emit(\"beforelayout\");\n                var o = Promise.resolve();\n                1 === r.length\n                  ? (o = o.then(function () {\n                      return e.updateLayoutMethod(r[0], i);\n                    }))\n                  : null == r ||\n                    r.forEach(function (t, n) {\n                      var r = i.pipes[n];\n                      o = o.then(function () {\n                        return e.updateLayoutMethod(t, r);\n                      });\n                    }),\n                  (this.data = this.setDataFromGraph()),\n                  o\n                    .then(function () {\n                      i.onAllLayoutEnd && i.onAllLayoutEnd();\n                    })\n                    .catch(function (t) {\n                      console.warn(\"layout failed\", t);\n                    });\n              } else this.layout();\n            }),\n            (e.prototype.layout = function (t) {\n              var e = this,\n                n = this.graph;\n              this.data = this.setDataFromGraph();\n              var r = this.data,\n                o = r.nodes,\n                a = r.hiddenNodes;\n              if (!o) return !1;\n              var s = n.get(\"width\"),\n                c = n.get(\"height\"),\n                u = {};\n              Object.assign(\n                u,\n                { width: s, height: c, center: [s / 2, c / 2] },\n                this.layoutCfg,\n              ),\n                (this.layoutCfg = u),\n                this.destoryLayoutMethods(),\n                n.emit(\"beforelayout\"),\n                this.initPositions(u.center, o),\n                this.initPositions(u.center, a);\n              var h = u.onLayoutEnd,\n                l = u.layoutEndFormatted,\n                f = u.adjust;\n              l ||\n                ((u.layoutEndFormatted = !0),\n                (u.onAllLayoutEnd = function () {\n                  return Object(i.b)(e, void 0, void 0, function () {\n                    return Object(i.d)(this, function (t) {\n                      switch (t.label) {\n                        case 0:\n                          return (\n                            h && h(),\n                            this.refreshLayout(),\n                            f && u.pipes\n                              ? [4, this.adjustPipesBox(this.data, f)]\n                              : [3, 2]\n                          );\n                        case 1:\n                          t.sent(), this.refreshLayout(), (t.label = 2);\n                        case 2:\n                          return n.emit(\"afterlayout\"), [2];\n                      }\n                    });\n                  });\n                }));\n              var d = Promise.resolve();\n              return (\n                u.type\n                  ? (d = d.then(function () {\n                      return e.execLayoutMethod(u, 0);\n                    }))\n                  : u.pipes &&\n                    u.pipes.forEach(function (t, n) {\n                      d = d.then(function () {\n                        return e.execLayoutMethod(t, n);\n                      });\n                    }),\n                d\n                  .then(function () {\n                    u.onAllLayoutEnd && u.onAllLayoutEnd(), t && t();\n                  })\n                  .catch(function (t) {\n                    console.warn(\"graph layout failed,\", t);\n                  }),\n                !1\n              );\n            }),\n            (e.prototype.execLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = t.type;\n                if (\n                  ((t.onLayoutEnd = function () {\n                    o.emit(\"aftersublayout\", { type: a }), r();\n                  }),\n                  \"force\" === a || \"g6force\" === a || \"gForce\" === a)\n                ) {\n                  var s = t.onTick,\n                    c = function () {\n                      s && s(), o.refreshPositions();\n                    };\n                  t.tick = c;\n                } else\n                  \"comboForce\" === t.type &&\n                    (t.comboTrees = o.get(\"comboTrees\"));\n                var u;\n                try {\n                  u = new Ft.a(t);\n                } catch (t) {\n                  console.warn(\n                    \"The layout method: '\" +\n                      a +\n                      \"' does not exist! Please specify it first.\",\n                  ),\n                    i();\n                }\n                if (u.enableTick) {\n                  var h = t.onTick;\n                  c = function () {\n                    h && h(), o.refreshPositions();\n                  };\n                  u.tick = c;\n                }\n                var l = n.filterLayoutData(n.data, t);\n                !(function (t, e) {\n                  var n;\n                  if (\n                    !(null === (n = null == t ? void 0 : t.nodes) ||\n                    void 0 === n\n                      ? void 0\n                      : n.length)\n                  )\n                    return;\n                  t.nodes.forEach(function (t) {\n                    t.layoutOrder = e;\n                  });\n                })(l, e),\n                  u.init(l),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  u.execute(),\n                  u.isCustomLayout && t.onLayoutEnd && t.onLayoutEnd(),\n                  n.layoutMethods.push(u);\n              });\n            }),\n            (e.prototype.updateLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = null == e ? void 0 : e.type;\n                e.onLayoutEnd = function () {\n                  o.emit(\"aftersublayout\", { type: a }), r();\n                };\n                var s = n.filterLayoutData(n.data, e);\n                t.init(s),\n                  t.updateCfg(e),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  t.execute(),\n                  t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n              });\n            }),\n            (e.prototype.adjustPipesBox = function (t, e) {\n              var n = this;\n              return new Promise(function (r) {\n                var i = t.nodes;\n                (null == i ? void 0 : i.length) || r(),\n                  Yt.includes(e) ||\n                    (console.warn(\n                      \"The adjust type \" +\n                        e +\n                        \" is not supported yet, please assign it with 'force', 'grid', or 'circular'.\",\n                    ),\n                    r());\n                var o = {\n                    center: n.layoutCfg.center,\n                    nodeSize: function (t) {\n                      return Math.max(t.height, t.width);\n                    },\n                    preventOverlap: !0,\n                    onLayoutEnd: function () {},\n                  },\n                  s = n.getLayoutBBox(i),\n                  c = s.groupNodes,\n                  u = s.layoutNodes,\n                  h = Object(a.clone)(u);\n                (o.onLayoutEnd = function () {\n                  null == u ||\n                    u.forEach(function (t, e) {\n                      var n,\n                        r,\n                        i,\n                        o =\n                          t.x -\n                          (null === (n = h[e]) || void 0 === n ? void 0 : n.x),\n                        a =\n                          t.y -\n                          (null === (r = h[e]) || void 0 === r ? void 0 : r.y);\n                      null === (i = c[e]) ||\n                        void 0 === i ||\n                        i.forEach(function (t) {\n                          (t.x += o), (t.y += a);\n                        });\n                    }),\n                    r();\n                }),\n                  new Ft.a(o).layout({ nodes: u });\n              });\n            }),\n            (e.prototype.destroy = function () {\n              this.destoryLayoutMethods(),\n                (this.destroyed = !0),\n                this.graph.set(\"layout\", void 0),\n                (this.layoutCfg = void 0),\n                (this.layoutType = void 0),\n                (this.layoutMethods = void 0),\n                (this.graph = null);\n            }),\n            e\n          );\n        })(Bt.c);\n      var zt = n(43),\n        Wt = function (t, e, n) {\n          return (\n            n[t] &&\n              console.warn(\n                \"The graph with the name \" +\n                  t +\n                  \" exists already, it will be overridden\",\n              ),\n            (n[t] = e(n)),\n            n\n          );\n        },\n        qt = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            n.get(\"renderer\").startsWith(\"mini\") && n.set(\"context\", e.context),\n              t.prototype.init.call(n);\n            var r = n.get(\"defaultNode\");\n            return (\n              r || n.set(\"defaultNode\", { type: \"circle\" }),\n              r.type || ((r.type = \"circle\"), n.set(\"defaultNode\", r)),\n              (n.destroyed = !1),\n              n\n            );\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.init = function () {}),\n            (e.prototype.emitEvent = function (t) {\n              var e = this.get(\"canvas\");\n              (t.type = t.type.toLowerCase()), e.registerEventCallback(t);\n            }),\n            (e.prototype.initLayoutController = function () {\n              var t = new Xt(this);\n              this.set({ layoutController: t });\n            }),\n            (e.prototype.initEventController = function () {\n              var t = new Rt(this);\n              if (\n                (this.set({ eventController: t }),\n                !this.get(\"renderer\").startsWith(\"mini\"))\n              ) {\n                var e = this.get(\"canvas\"),\n                  n = e.get(\"el\");\n                \"touchstart touchmove touchend touchcancel\"\n                  .split(\" \")\n                  .forEach(function (t) {\n                    n.addEventListener(t, e.registerEventCallback.bind(e), !1);\n                  });\n              }\n            }),\n            (e.prototype.initCanvas = function () {\n              var t = this.get(\"container\");\n              null !== t &&\n                \"string\" == typeof t &&\n                ((t = document.getElementById(t)), this.set(\"container\", t));\n              var e = this.get(\"renderer\");\n              if (!t && !e.startsWith(\"mini\"))\n                throw new Error(\"invalid container\");\n              var n = this.get(\"width\"),\n                r = this.get(\"height\"),\n                i = {\n                  container: t,\n                  context: this.get(\"context\"),\n                  width: n,\n                  height: r,\n                  renderer: e,\n                  fitView: this.get(\"fitView\"),\n                },\n                o = this.get(\"pixelRatio\");\n              o && (i.pixelRatio = o);\n              var a = new Tt(i);\n              this.set(\"canvas\", a);\n            }),\n            (e.prototype.initPlugins = function () {\n              var t = this;\n              Object(a.each)(t.get(\"plugins\"), function (e) {\n                !e.destroyed && e.initPlugin && e.initPlugin(t);\n              });\n            }),\n            (e.prototype.toDataURL = function (t, e) {\n              var n = this.get(\"canvas\"),\n                r = n.getRenderer(),\n                i = n.get(\"el\");\n              t || (t = \"image/png\");\n              var o = \"\";\n              if (\"svg\" === r) {\n                var a = i.cloneNode(!0),\n                  s = document.implementation.createDocumentType(\n                    \"svg\",\n                    \"-//W3C//DTD SVG 1.1//EN\",\n                    \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                  ),\n                  c = document.implementation.createDocument(\n                    \"http://www.w3.org/2000/svg\",\n                    \"svg\",\n                    s,\n                  );\n                c.replaceChild(a, c.documentElement);\n                var u = new XMLSerializer().serializeToString(c);\n                o = \"data:image/svg+xml;charset=utf8,\" + encodeURIComponent(u);\n              } else {\n                var h = void 0,\n                  l = i.getContext(\"2d\"),\n                  f = this.get(\"width\"),\n                  d = this.get(\"height\"),\n                  p = void 0;\n                if (e) {\n                  var g =\n                    \"undefined\" != typeof window ? window.devicePixelRatio : 1;\n                  (h = l.getImageData(0, 0, f * g, d * g)),\n                    (p = l.globalCompositeOperation),\n                    (l.globalCompositeOperation = \"destination-over\"),\n                    (l.fillStyle = e),\n                    l.fillRect(0, 0, f, d);\n                }\n                (o = i.toDataURL(t)),\n                  e &&\n                    (l.clearRect(0, 0, f, d),\n                    l.putImageData(h, 0, 0),\n                    (l.globalCompositeOperation = p));\n              }\n              return o;\n            }),\n            (e.prototype.toFullDataURL = function (t, e, n) {\n              var r = this.get(\"group\").getCanvasBBox(),\n                i = r.height,\n                o = r.width,\n                s = this.get(\"renderer\"),\n                c = Object(zt.a)('<id=\"virtual-image\"></div>'),\n                u = n ? n.backgroundColor : void 0,\n                h = n ? n.padding : void 0;\n              h\n                ? Object(a.isNumber)(h) && (h = [h, h, h, h])\n                : (h = [0, 0, 0, 0]);\n              var l = i + h[0] + h[2],\n                f = o + h[1] + h[3],\n                d = new Tt({ container: c, height: l, width: f, quickHit: !0 }),\n                p = this.get(\"group\").clone(),\n                g = Object(a.clone)(p.getMatrix());\n              g || (g = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n              var v = (r.maxX + r.minX) / 2,\n                y = (r.maxY + r.minY) / 2;\n              Nt.a.translate(g, g, [-v, -y]),\n                Nt.a.translate(g, g, [o / 2 + h[3], i / 2 + h[0]]),\n                p.resetMatrix(),\n                p.setMatrix(g),\n                d.add(p);\n              var m = d.get(\"el\"),\n                b = \"\";\n              e || (e = \"image/png\"),\n                setTimeout(function () {\n                  if (\"svg\" === s) {\n                    var n = m.cloneNode(!0),\n                      r = document.implementation.createDocumentType(\n                        \"svg\",\n                        \"-//W3C//DTD SVG 1.1//EN\",\n                        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                      ),\n                      i = document.implementation.createDocument(\n                        \"http://www.w3.org/2000/svg\",\n                        \"svg\",\n                        r,\n                      );\n                    i.replaceChild(n, i.documentElement);\n                    var o = new XMLSerializer().serializeToString(i);\n                    b =\n                      \"data:image/svg+xml;charset=utf8,\" +\n                      encodeURIComponent(o);\n                  } else {\n                    var a = void 0,\n                      c = m.getContext(\"2d\"),\n                      h = void 0;\n                    if (u) {\n                      var d =\n                        \"undefined\" != typeof window\n                          ? window.devicePixelRatio\n                          : 1;\n                      (a = c.getImageData(0, 0, f * d, l * d)),\n                        (h = c.globalCompositeOperation),\n                        (c.globalCompositeOperation = \"destination-over\"),\n                        (c.fillStyle = u),\n                        c.fillRect(0, 0, f, l);\n                    }\n                    (b = m.toDataURL(e)),\n                      u &&\n                        (c.clearRect(0, 0, f, l),\n                        c.putImageData(a, 0, 0),\n                        (c.globalCompositeOperation = h));\n                  }\n                  t && t(b);\n                }, 16);\n            }),\n            (e.prototype.downloadFullImage = function (t, e, n) {\n              var r = this,\n                i = this.get(\"group\").getCanvasBBox(),\n                o = i.height,\n                s = i.width,\n                c = this.get(\"renderer\"),\n                u = Object(zt.a)('<id=\"virtual-image\"></div>'),\n                h = n ? n.backgroundColor : void 0,\n                l = n ? n.padding : void 0;\n              l\n                ? Object(a.isNumber)(l) && (l = [l, l, l, l])\n                : (l = [0, 0, 0, 0]);\n              var f = o + l[0] + l[2],\n                d = s + l[1] + l[3],\n                p = new Tt({ container: u, height: f, width: d }),\n                g = this.get(\"group\").clone(),\n                v = Object(a.clone)(g.getMatrix());\n              v || (v = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n              var y = (i.maxX + i.minX) / 2,\n                m = (i.maxY + i.minY) / 2;\n              Nt.a.translate(v, v, [-y, -m]),\n                Nt.a.translate(v, v, [s / 2 + l[3], o / 2 + l[0]]),\n                g.resetMatrix(),\n                g.setMatrix(v),\n                p.add(g);\n              var b = p.get(\"el\");\n              e || (e = \"image/png\"),\n                setTimeout(function () {\n                  var n = \"\";\n                  if (\"svg\" === c) {\n                    var i = b.cloneNode(!0),\n                      o = document.implementation.createDocumentType(\n                        \"svg\",\n                        \"-//W3C//DTD SVG 1.1//EN\",\n                        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                      ),\n                      a = document.implementation.createDocument(\n                        \"http://www.w3.org/2000/svg\",\n                        \"svg\",\n                        o,\n                      );\n                    a.replaceChild(i, a.documentElement);\n                    var s = new XMLSerializer().serializeToString(a);\n                    n =\n                      \"data:image/svg+xml;charset=utf8,\" +\n                      encodeURIComponent(s);\n                  } else {\n                    var u = void 0,\n                      l = b.getContext(\"2d\"),\n                      p = void 0;\n                    if (h) {\n                      var g =\n                        \"undefined\" != typeof window\n                          ? window.devicePixelRatio\n                          : 1;\n                      (u = l.getImageData(0, 0, d * g, f * g)),\n                        (p = l.globalCompositeOperation),\n                        (l.globalCompositeOperation = \"destination-over\"),\n                        (l.fillStyle = h),\n                        l.fillRect(0, 0, d, f);\n                    }\n                    (n = b.toDataURL(e)),\n                      h &&\n                        (l.clearRect(0, 0, d, f),\n                        l.putImageData(u, 0, 0),\n                        (l.globalCompositeOperation = p));\n                  }\n                  var v = document.createElement(\"a\"),\n                    y =\n                      (t || \"graph\") +\n                      (\"svg\" === c ? \".svg\" : \".\" + e.split(\"/\")[1]);\n                  r.dataURLToImage(n, c, v, y);\n                  var m = document.createEvent(\"MouseEvents\");\n                  m.initEvent(\"click\", !1, !1), v.dispatchEvent(m);\n                }, 16);\n            }),\n            (e.prototype.downloadImage = function (t, e, n) {\n              var r = this,\n                i = this;\n              i.isAnimating() && i.stopAnimate();\n              var o = i.get(\"canvas\").getRenderer();\n              e || (e = \"image/png\");\n              var a = (t || \"graph\") + (\"svg\" === o ? \".svg\" : e.split(\"/\")[1]),\n                s = document.createElement(\"a\");\n              setTimeout(function () {\n                var t = i.toDataURL(e, n);\n                r.dataURLToImage(t, o, s, a);\n                var c = document.createEvent(\"MouseEvents\");\n                c.initEvent(\"click\", !1, !1), s.dispatchEvent(c);\n              }, 16);\n            }),\n            (e.prototype.dataURLToImage = function (t, e, n, r) {\n              if (\"undefined\" != typeof window)\n                if (window.Blob && window.URL && \"svg\" !== e) {\n                  var i = t.split(\",\"),\n                    o = \"\";\n                  if (i && i.length > 0) {\n                    var a = i[0].match(/:(.*?);/);\n                    a && a.length >= 2 && (o = a[1]);\n                  }\n                  for (\n                    var s = atob(i[1]), c = s.length, u = new Uint8Array(c);\n                    c--;\n\n                  )\n                    u[c] = s.charCodeAt(c);\n                  var h = new Blob([u], { type: o });\n                  window.navigator.msSaveBlob\n                    ? window.navigator.msSaveBlob(h, r)\n                    : n.addEventListener(\"click\", function () {\n                        (n.download = r),\n                          (n.href = window.URL.createObjectURL(h));\n                      });\n                } else\n                  n.addEventListener(\"click\", function () {\n                    (n.download = r), (n.href = t);\n                  });\n            }),\n            (e.prototype.addPlugin = function (t) {\n              t.destroyed || (this.get(\"plugins\").push(t), t.initPlugin(this));\n            }),\n            (e.prototype.removePlugin = function (t) {\n              var e = this.get(\"plugins\"),\n                n = e.indexOf(t);\n              n >= 0 && (t.destroyPlugin(), e.splice(n, 1));\n            }),\n            (e.prototype.isMiniNative = function () {\n              return \"mini-native\" === this.get(\"renderer\");\n            }),\n            (e.prototype.isMini = function () {\n              return this.get(\"renderer\").startsWith(\"mini\");\n            }),\n            (e.prototype.isBrowser = function () {\n              return \"canvas\" === this.get(\"renderer\");\n            }),\n            (e.prototype.setImageWaterMarker = function (t, e, n) {\n              var r = this,\n                i = Object(a.deepMix)({}, Lt.a.imageWaterMarkerConfig, e),\n                o = i.width,\n                s = i.height,\n                c = i.image,\n                u = c.rotate,\n                h = (c.x, c.y, c.width),\n                l = c.height;\n              if ((this.isMini() && this.isMiniNative(), this.isMiniNative())) {\n                (n.width = o || this.get(\"width\")),\n                  (n.height = s || this.get(\"height\"));\n                var f = n.getContext(\"2d\"),\n                  d = (0, this.get(\"extra\").createImage)();\n                (d.crossOrigin = \"anonymous\"),\n                  (d.src = t),\n                  (d.onload = function () {\n                    if (!r.destroyed) {\n                      var t = h / d.width,\n                        e = l / d.height;\n                      f.rotate((-u * Math.PI) / 180);\n                      var i = f.createPattern(d, \"repeat\");\n                      (f.fillStyle = i),\n                        f.scale(t, e),\n                        f.fillRect(\n                          2 * -r.get(\"width\"),\n                          -r.get(\"height\"),\n                          10 * r.get(\"width\"),\n                          10 * r.get(\"height\"),\n                        ),\n                        r\n                          .get(\"waterGroup\")\n                          .addShape(\"image\", { attrs: { img: n } });\n                    }\n                  });\n              }\n              if (this.isBrowser()) {\n                var p = document.createElement(\"canvas\");\n                (p.width = o || this.get(\"width\")),\n                  (p.height = s || this.get(\"height\"));\n                var g = p.getContext(\"2d\"),\n                  v = new Image();\n                (v.crossOrigin = \"anonymous\"),\n                  (v.src = t),\n                  (v.onload = function () {\n                    if (!r.destroyed) {\n                      var t = h / v.width,\n                        e = l / v.height;\n                      g.rotate((-u * Math.PI) / 180);\n                      var n = g.createPattern(v, \"repeat\");\n                      (g.fillStyle = n),\n                        g.scale(t, e),\n                        g.fillRect(\n                          2 * -r.get(\"width\"),\n                          -r.get(\"height\"),\n                          10 * r.get(\"width\"),\n                          10 * r.get(\"height\"),\n                        );\n                      var i = p.toDataURL();\n                      r.get(\"waterGroup\").addShape(\"image\", {\n                        attrs: { img: i },\n                      });\n                    }\n                  });\n              }\n            }),\n            (e.prototype.setTextWaterMarker = function (t, e) {\n              var n = this.get(\"container\");\n              Object(a.isString)(n) && (n = document.getElementById(n)),\n                n.style.position || (n.style.position = \"relative\");\n              var r = this.get(\"graphWaterMarker\"),\n                i = Object(a.deepMix)({}, Lt.a.textWaterMarkerConfig, e),\n                o = i.width,\n                s = i.height,\n                c = i.compatible,\n                u = i.text;\n              if (!r) {\n                var h = { container: n, width: o, height: s, capture: !1 },\n                  l = this.get(\"pixelRatio\");\n                l && (h.pixelRatio = l),\n                  (r = new Tt(h)),\n                  this.set(\"graphWaterMarker\", r);\n              }\n              r.get(\"el\").style.display = \"none\";\n              var f = r.get(\"context\"),\n                d = u.rotate,\n                p = u.fill,\n                g = u.fontFamily,\n                v = u.fontSize,\n                y = u.baseline,\n                m = u.x,\n                b = u.y,\n                x = u.lineHeight;\n              f.rotate((-d * Math.PI) / 180),\n                (f.font = v + \"px \" + g),\n                (f.fillStyle = p),\n                (f.textBaseline = y);\n              for (var w = t.length - 1; w >= 0; w--)\n                f.fillText(t[w], m, b + w * x);\n              if ((f.rotate((d * Math.PI) / 180), c))\n                n.style.cssText =\n                  \"background-image: url(\" +\n                  r.get(\"el\").toDataURL(\"image/png\") +\n                  \");background-repeat:repeat;\";\n              else {\n                var S = document.querySelector(\".g6-graph-watermarker\");\n                S ||\n                  ((S = document.createElement(\"div\")).className =\n                    \"g6-graph-watermarker\"),\n                  (S.style.cssText =\n                    \"background-image: url(\" +\n                    r.get(\"el\").toDataURL(\"image/png\") +\n                    \");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:99;\"),\n                  n.appendChild(S);\n              }\n            }),\n            (e.prototype.destroy = function () {\n              Object(a.each)(this.get(\"plugins\"), function (t) {\n                t.destroyPlugin();\n              });\n              var e = this.get(\"tooltips\");\n              if (e)\n                for (var n = 0; n < e.length; n++) {\n                  var r = e[n];\n                  if (r) {\n                    var i = r.parentElement;\n                    i && i.removeChild(r);\n                  }\n                }\n              this.get(\"eventController\").destroy(),\n                this.get(\"layoutController\").destroy(),\n                this.get(\"graphWaterMarker\") &&\n                  this.get(\"graphWaterMarker\").destroy(),\n                \"undefined\" != typeof document &&\n                  document.querySelector &&\n                  document.querySelector(\".g6-graph-watermarker\") &&\n                  document.querySelector(\".g6-graph-watermarker\").remove(),\n                t.prototype.destroy.call(this);\n            }),\n            (e.prototype.initGroups = function () {\n              var t = this.get(\"canvas\"),\n                e = t.addGroup({\n                  id: \"root\",\n                  className: Lt.a.rootContainerClassName,\n                }),\n                n = t.addGroup({\n                  id: \"water\",\n                  className: Lt.a.waterContainerClassName,\n                });\n              if (this.get(\"groupByTypes\")) {\n                var r = e.addGroup({\n                    id: \"edge\",\n                    className: Lt.a.edgeContainerClassName,\n                  }),\n                  i = e.addGroup({\n                    id: \"node\",\n                    className: Lt.a.nodeContainerClassName,\n                  }),\n                  o = e.addGroup({\n                    id: \"combo\",\n                    className: Lt.a.comboContainerClassName,\n                  });\n                o.toBack(),\n                  this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n              }\n              var a = t.addGroup({\n                  id: \"uiGroup\",\n                  className: Lt.a.uiContainerClassName,\n                }),\n                s = e.addGroup({\n                  id: \"delegate\",\n                  className: Lt.a.delegateContainerClassName,\n                });\n              this.set({ delegateGroup: s }),\n                this.set(\"group\", e),\n                this.set(\"uiGroup\", a),\n                this.set(\"waterGroup\", n);\n            }),\n            e\n          );\n        })(Bt.b);\n      e.a = qt;\n    },\n    75: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"mixColor\", function () {\n          return B;\n        }),\n        n.d(e, \"getColorsWithSubjectColor\", function () {\n          return L;\n        }),\n        n.d(e, \"getColorSetsBySubjectColors\", function () {\n          return D;\n        });\n      var r = n(44),\n        i = n.n(r);\n      function o(t, e) {\n        (function (t) {\n          return (\n            \"string\" == typeof t && -1 !== t.indexOf(\".\") && 1 === parseFloat(t)\n          );\n        })(t) && (t = \"100%\");\n        var n = (function (t) {\n          return \"string\" == typeof t && -1 !== t.indexOf(\"%\");\n        })(t);\n        return (\n          (t = 360 === e ? t : Math.min(e, Math.max(0, parseFloat(t)))),\n          n && (t = parseInt(String(t * e), 10) / 100),\n          Math.abs(t - e) < 1e-6\n            ? 1\n            : (t =\n                360 === e\n                  ? (t < 0 ? (t % e) + e : t % e) / parseFloat(String(e))\n                  : (t % e) / parseFloat(String(e)))\n        );\n      }\n      function a(t) {\n        return Math.min(1, Math.max(0, t));\n      }\n      function s(t) {\n        return (t = parseFloat(t)), (isNaN(t) || t < 0 || t > 1) && (t = 1), t;\n      }\n      function c(t) {\n        return t <= 1 ? \"\".concat(100 * Number(t), \"%\") : t;\n      }\n      function u(t) {\n        return 1 === t.length ? \"0\" + t : String(t);\n      }\n      function h(t, e, n) {\n        (t = o(t, 255)), (e = o(e, 255)), (n = o(n, 255));\n        var r = Math.max(t, e, n),\n          i = Math.min(t, e, n),\n          a = 0,\n          s = 0,\n          c = (r + i) / 2;\n        if (r === i) (s = 0), (a = 0);\n        else {\n          var u = r - i;\n          switch (((s = c > 0.5 ? u / (2 - r - i) : u / (r + i)), r)) {\n            case t:\n              a = (e - n) / u + (e < n ? 6 : 0);\n              break;\n            case e:\n              a = (n - t) / u + 2;\n              break;\n            case n:\n              a = (t - e) / u + 4;\n          }\n          a /= 6;\n        }\n        return { h: a, s: s, l: c };\n      }\n      function l(t, e, n) {\n        return (\n          n < 0 && (n += 1),\n          n > 1 && (n -= 1),\n          n < 1 / 6\n            ? t + 6 * n * (e - t)\n            : n < 0.5\n            ? e\n            : n < 2 / 3\n            ? t + (e - t) * (2 / 3 - n) * 6\n            : t\n        );\n      }\n      function f(t, e, n) {\n        (t = o(t, 255)), (e = o(e, 255)), (n = o(n, 255));\n        var r = Math.max(t, e, n),\n          i = Math.min(t, e, n),\n          a = 0,\n          s = r,\n          c = r - i,\n          u = 0 === r ? 0 : c / r;\n        if (r === i) a = 0;\n        else {\n          switch (r) {\n            case t:\n              a = (e - n) / c + (e < n ? 6 : 0);\n              break;\n            case e:\n              a = (n - t) / c + 2;\n              break;\n            case n:\n              a = (t - e) / c + 4;\n          }\n          a /= 6;\n        }\n        return { h: a, s: u, v: s };\n      }\n      function d(t, e, n, r) {\n        var i = [\n          u(Math.round(t).toString(16)),\n          u(Math.round(e).toString(16)),\n          u(Math.round(n).toString(16)),\n        ];\n        return r &&\n          i[0].startsWith(i[0].charAt(1)) &&\n          i[1].startsWith(i[1].charAt(1)) &&\n          i[2].startsWith(i[2].charAt(1))\n          ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0)\n          : i.join(\"\");\n      }\n      function p(t) {\n        return Math.round(255 * parseFloat(t)).toString(16);\n      }\n      function g(t) {\n        return v(t) / 255;\n      }\n      function v(t) {\n        return parseInt(t, 16);\n      }\n      var y = {\n        aliceblue: \"#f0f8ff\",\n        antiquewhite: \"#faebd7\",\n        aqua: \"#00ffff\",\n        aquamarine: \"#7fffd4\",\n        azure: \"#f0ffff\",\n        beige: \"#f5f5dc\",\n        bisque: \"#ffe4c4\",\n        black: \"#000000\",\n        blanchedalmond: \"#ffebcd\",\n        blue: \"#0000ff\",\n        blueviolet: \"#8a2be2\",\n        brown: \"#a52a2a\",\n        burlywood: \"#deb887\",\n        cadetblue: \"#5f9ea0\",\n        chartreuse: \"#7fff00\",\n        chocolate: \"#d2691e\",\n        coral: \"#ff7f50\",\n        cornflowerblue: \"#6495ed\",\n        cornsilk: \"#fff8dc\",\n        crimson: \"#dc143c\",\n        cyan: \"#00ffff\",\n        darkblue: \"#00008b\",\n        darkcyan: \"#008b8b\",\n        darkgoldenrod: \"#b8860b\",\n        darkgray: \"#a9a9a9\",\n        darkgreen: \"#006400\",\n        darkgrey: \"#a9a9a9\",\n        darkkhaki: \"#bdb76b\",\n        darkmagenta: \"#8b008b\",\n        darkolivegreen: \"#556b2f\",\n        darkorange: \"#ff8c00\",\n        darkorchid: \"#9932cc\",\n        darkred: \"#8b0000\",\n        darksalmon: \"#e9967a\",\n        darkseagreen: \"#8fbc8f\",\n        darkslateblue: \"#483d8b\",\n        darkslategray: \"#2f4f4f\",\n        darkslategrey: \"#2f4f4f\",\n        darkturquoise: \"#00ced1\",\n        darkviolet: \"#9400d3\",\n        deeppink: \"#ff1493\",\n        deepskyblue: \"#00bfff\",\n        dimgray: \"#696969\",\n        dimgrey: \"#696969\",\n        dodgerblue: \"#1e90ff\",\n        firebrick: \"#b22222\",\n        floralwhite: \"#fffaf0\",\n        forestgreen: \"#228b22\",\n        fuchsia: \"#ff00ff\",\n        gainsboro: \"#dcdcdc\",\n        ghostwhite: \"#f8f8ff\",\n        goldenrod: \"#daa520\",\n        gold: \"#ffd700\",\n        gray: \"#808080\",\n        green: \"#008000\",\n        greenyellow: \"#adff2f\",\n        grey: \"#808080\",\n        honeydew: \"#f0fff0\",\n        hotpink: \"#ff69b4\",\n        indianred: \"#cd5c5c\",\n        indigo: \"#4b0082\",\n        ivory: \"#fffff0\",\n        khaki: \"#f0e68c\",\n        lavenderblush: \"#fff0f5\",\n        lavender: \"#e6e6fa\",\n        lawngreen: \"#7cfc00\",\n        lemonchiffon: \"#fffacd\",\n        lightblue: \"#add8e6\",\n        lightcoral: \"#f08080\",\n        lightcyan: \"#e0ffff\",\n        lightgoldenrodyellow: \"#fafad2\",\n        lightgray: \"#d3d3d3\",\n        lightgreen: \"#90ee90\",\n        lightgrey: \"#d3d3d3\",\n        lightpink: \"#ffb6c1\",\n        lightsalmon: \"#ffa07a\",\n        lightseagreen: \"#20b2aa\",\n        lightskyblue: \"#87cefa\",\n        lightslategray: \"#778899\",\n        lightslategrey: \"#778899\",\n        lightsteelblue: \"#b0c4de\",\n        lightyellow: \"#ffffe0\",\n        lime: \"#00ff00\",\n        limegreen: \"#32cd32\",\n        linen: \"#faf0e6\",\n        magenta: \"#ff00ff\",\n        maroon: \"#800000\",\n        mediumaquamarine: \"#66cdaa\",\n        mediumblue: \"#0000cd\",\n        mediumorchid: \"#ba55d3\",\n        mediumpurple: \"#9370db\",\n        mediumseagreen: \"#3cb371\",\n        mediumslateblue: \"#7b68ee\",\n        mediumspringgreen: \"#00fa9a\",\n        mediumturquoise: \"#48d1cc\",\n        mediumvioletred: \"#c71585\",\n        midnightblue: \"#191970\",\n        mintcream: \"#f5fffa\",\n        mistyrose: \"#ffe4e1\",\n        moccasin: \"#ffe4b5\",\n        navajowhite: \"#ffdead\",\n        navy: \"#000080\",\n        oldlace: \"#fdf5e6\",\n        olive: \"#808000\",\n        olivedrab: \"#6b8e23\",\n        orange: \"#ffa500\",\n        orangered: \"#ff4500\",\n        orchid: \"#da70d6\",\n        palegoldenrod: \"#eee8aa\",\n        palegreen: \"#98fb98\",\n        paleturquoise: \"#afeeee\",\n        palevioletred: \"#db7093\",\n        papayawhip: \"#ffefd5\",\n        peachpuff: \"#ffdab9\",\n        peru: \"#cd853f\",\n        pink: \"#ffc0cb\",\n        plum: \"#dda0dd\",\n        powderblue: \"#b0e0e6\",\n        purple: \"#800080\",\n        rebeccapurple: \"#663399\",\n        red: \"#ff0000\",\n        rosybrown: \"#bc8f8f\",\n        royalblue: \"#4169e1\",\n        saddlebrown: \"#8b4513\",\n        salmon: \"#fa8072\",\n        sandybrown: \"#f4a460\",\n        seagreen: \"#2e8b57\",\n        seashell: \"#fff5ee\",\n        sienna: \"#a0522d\",\n        silver: \"#c0c0c0\",\n        skyblue: \"#87ceeb\",\n        slateblue: \"#6a5acd\",\n        slategray: \"#708090\",\n        slategrey: \"#708090\",\n        snow: \"#fffafa\",\n        springgreen: \"#00ff7f\",\n        steelblue: \"#4682b4\",\n        tan: \"#d2b48c\",\n        teal: \"#008080\",\n        thistle: \"#d8bfd8\",\n        tomato: \"#ff6347\",\n        turquoise: \"#40e0d0\",\n        violet: \"#ee82ee\",\n        wheat: \"#f5deb3\",\n        white: \"#ffffff\",\n        whitesmoke: \"#f5f5f5\",\n        yellow: \"#ffff00\",\n        yellowgreen: \"#9acd32\",\n      };\n      function m(t) {\n        return (m =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function b(t) {\n        var e,\n          n,\n          r,\n          i = { r: 0, g: 0, b: 0 },\n          a = 1,\n          u = null,\n          h = null,\n          f = null,\n          d = !1,\n          p = !1;\n        return (\n          \"string\" == typeof t &&\n            (t = (function (t) {\n              if (0 === (t = t.trim().toLowerCase()).length) return !1;\n              var e = !1;\n              if (y[t]) (t = y[t]), (e = !0);\n              else if (\"transparent\" === t)\n                return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n              var n = O.rgb.exec(t);\n              if (n) return { r: n[1], g: n[2], b: n[3] };\n              if ((n = O.rgba.exec(t)))\n                return { r: n[1], g: n[2], b: n[3], a: n[4] };\n              if ((n = O.hsl.exec(t))) return { h: n[1], s: n[2], l: n[3] };\n              if ((n = O.hsla.exec(t)))\n                return { h: n[1], s: n[2], l: n[3], a: n[4] };\n              if ((n = O.hsv.exec(t))) return { h: n[1], s: n[2], v: n[3] };\n              if ((n = O.hsva.exec(t)))\n                return { h: n[1], s: n[2], v: n[3], a: n[4] };\n              if ((n = O.hex8.exec(t)))\n                return {\n                  r: v(n[1]),\n                  g: v(n[2]),\n                  b: v(n[3]),\n                  a: g(n[4]),\n                  format: e ? \"name\" : \"hex8\",\n                };\n              if ((n = O.hex6.exec(t)))\n                return {\n                  r: v(n[1]),\n                  g: v(n[2]),\n                  b: v(n[3]),\n                  format: e ? \"name\" : \"hex\",\n                };\n              if ((n = O.hex4.exec(t)))\n                return {\n                  r: v(n[1] + n[1]),\n                  g: v(n[2] + n[2]),\n                  b: v(n[3] + n[3]),\n                  a: g(n[4] + n[4]),\n                  format: e ? \"name\" : \"hex8\",\n                };\n              if ((n = O.hex3.exec(t)))\n                return {\n                  r: v(n[1] + n[1]),\n                  g: v(n[2] + n[2]),\n                  b: v(n[3] + n[3]),\n                  format: e ? \"name\" : \"hex\",\n                };\n              return !1;\n            })(t)),\n          \"object\" === m(t) &&\n            (M(t.r) && M(t.g) && M(t.b)\n              ? ((e = t.r),\n                (n = t.g),\n                (r = t.b),\n                (i = {\n                  r: 255 * o(e, 255),\n                  g: 255 * o(n, 255),\n                  b: 255 * o(r, 255),\n                }),\n                (d = !0),\n                (p = \"%\" === String(t.r).substr(-1) ? \"prgb\" : \"rgb\"))\n              : M(t.h) && M(t.s) && M(t.v)\n              ? ((u = c(t.s)),\n                (h = c(t.v)),\n                (i = (function (t, e, n) {\n                  (t = 6 * o(t, 360)), (e = o(e, 100)), (n = o(n, 100));\n                  var r = Math.floor(t),\n                    i = t - r,\n                    a = n * (1 - e),\n                    s = n * (1 - i * e),\n                    c = n * (1 - (1 - i) * e),\n                    u = r % 6;\n                  return {\n                    r: 255 * [n, s, a, a, c, n][u],\n                    g: 255 * [c, n, n, s, a, a][u],\n                    b: 255 * [a, a, c, n, n, s][u],\n                  };\n                })(t.h, u, h)),\n                (d = !0),\n                (p = \"hsv\"))\n              : M(t.h) &&\n                M(t.s) &&\n                M(t.l) &&\n                ((u = c(t.s)),\n                (f = c(t.l)),\n                (i = (function (t, e, n) {\n                  var r, i, a;\n                  if (\n                    ((t = o(t, 360)), (e = o(e, 100)), (n = o(n, 100)), 0 === e)\n                  )\n                    (i = n), (a = n), (r = n);\n                  else {\n                    var s = n < 0.5 ? n * (1 + e) : n + e - n * e,\n                      c = 2 * n - s;\n                    (r = l(c, s, t + 1 / 3)),\n                      (i = l(c, s, t)),\n                      (a = l(c, s, t - 1 / 3));\n                  }\n                  return { r: 255 * r, g: 255 * i, b: 255 * a };\n                })(t.h, u, f)),\n                (d = !0),\n                (p = \"hsl\")),\n            Object.prototype.hasOwnProperty.call(t, \"a\") && (a = t.a)),\n          (a = s(a)),\n          {\n            ok: d,\n            format: t.format || p,\n            r: Math.min(255, Math.max(i.r, 0)),\n            g: Math.min(255, Math.max(i.g, 0)),\n            b: Math.min(255, Math.max(i.b, 0)),\n            a: a,\n          }\n        );\n      }\n      var x = \"(?:\"\n          .concat(\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\", \")|(?:\")\n          .concat(\"[-\\\\+]?\\\\d+%?\", \")\"),\n        w = \"[\\\\s|\\\\(]+(\"\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")\\\\s*\\\\)?\"),\n        S = \"[\\\\s|\\\\(]+(\"\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")\\\\s*\\\\)?\"),\n        O = {\n          CSS_UNIT: new RegExp(x),\n          rgb: new RegExp(\"rgb\" + w),\n          rgba: new RegExp(\"rgba\" + S),\n          hsl: new RegExp(\"hsl\" + w),\n          hsla: new RegExp(\"hsla\" + S),\n          hsv: new RegExp(\"hsv\" + w),\n          hsva: new RegExp(\"hsva\" + S),\n          hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n          hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n          hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n          hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n        };\n      function M(t) {\n        return Boolean(O.CSS_UNIT.exec(String(t)));\n      }\n      var k = (function () {\n        function t(e, n) {\n          var r;\n          if (\n            (void 0 === e && (e = \"\"), void 0 === n && (n = {}), e instanceof t)\n          )\n            return e;\n          \"number\" == typeof e &&\n            (e = (function (t) {\n              return { r: t >> 16, g: (65280 & t) >> 8, b: 255 & t };\n            })(e)),\n            (this.originalInput = e);\n          var i = b(e);\n          (this.originalInput = e),\n            (this.r = i.r),\n            (this.g = i.g),\n            (this.b = i.b),\n            (this.a = i.a),\n            (this.roundA = Math.round(100 * this.a) / 100),\n            (this.format =\n              null !== (r = n.format) && void 0 !== r ? r : i.format),\n            (this.gradientType = n.gradientType),\n            this.r < 1 && (this.r = Math.round(this.r)),\n            this.g < 1 && (this.g = Math.round(this.g)),\n            this.b < 1 && (this.b = Math.round(this.b)),\n            (this.isValid = i.ok);\n        }\n        return (\n          (t.prototype.isDark = function () {\n            return this.getBrightness() < 128;\n          }),\n          (t.prototype.isLight = function () {\n            return !this.isDark();\n          }),\n          (t.prototype.getBrightness = function () {\n            var t = this.toRgb();\n            return (299 * t.r + 587 * t.g + 114 * t.b) / 1e3;\n          }),\n          (t.prototype.getLuminance = function () {\n            var t = this.toRgb(),\n              e = t.r / 255,\n              n = t.g / 255,\n              r = t.b / 255;\n            return (\n              0.2126 *\n                (e <= 0.03928\n                  ? e / 12.92\n                  : Math.pow((e + 0.055) / 1.055, 2.4)) +\n              0.7152 *\n                (n <= 0.03928\n                  ? n / 12.92\n                  : Math.pow((n + 0.055) / 1.055, 2.4)) +\n              0.0722 *\n                (r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4))\n            );\n          }),\n          (t.prototype.getAlpha = function () {\n            return this.a;\n          }),\n          (t.prototype.setAlpha = function (t) {\n            return (\n              (this.a = s(t)),\n              (this.roundA = Math.round(100 * this.a) / 100),\n              this\n            );\n          }),\n          (t.prototype.toHsv = function () {\n            var t = f(this.r, this.g, this.b);\n            return { h: 360 * t.h, s: t.s, v: t.v, a: this.a };\n          }),\n          (t.prototype.toHsvString = function () {\n            var t = f(this.r, this.g, this.b),\n              e = Math.round(360 * t.h),\n              n = Math.round(100 * t.s),\n              r = Math.round(100 * t.v);\n            return 1 === this.a\n              ? \"hsv(\".concat(e, \", \").concat(n, \"%, \").concat(r, \"%)\")\n              : \"hsva(\"\n                  .concat(e, \", \")\n                  .concat(n, \"%, \")\n                  .concat(r, \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toHsl = function () {\n            var t = h(this.r, this.g, this.b);\n            return { h: 360 * t.h, s: t.s, l: t.l, a: this.a };\n          }),\n          (t.prototype.toHslString = function () {\n            var t = h(this.r, this.g, this.b),\n              e = Math.round(360 * t.h),\n              n = Math.round(100 * t.s),\n              r = Math.round(100 * t.l);\n            return 1 === this.a\n              ? \"hsl(\".concat(e, \", \").concat(n, \"%, \").concat(r, \"%)\")\n              : \"hsla(\"\n                  .concat(e, \", \")\n                  .concat(n, \"%, \")\n                  .concat(r, \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toHex = function (t) {\n            return void 0 === t && (t = !1), d(this.r, this.g, this.b, t);\n          }),\n          (t.prototype.toHexString = function (t) {\n            return void 0 === t && (t = !1), \"#\" + this.toHex(t);\n          }),\n          (t.prototype.toHex8 = function (t) {\n            return (\n              void 0 === t && (t = !1),\n              (function (t, e, n, r, i) {\n                var o = [\n                  u(Math.round(t).toString(16)),\n                  u(Math.round(e).toString(16)),\n                  u(Math.round(n).toString(16)),\n                  u(p(r)),\n                ];\n                return i &&\n                  o[0].startsWith(o[0].charAt(1)) &&\n                  o[1].startsWith(o[1].charAt(1)) &&\n                  o[2].startsWith(o[2].charAt(1)) &&\n                  o[3].startsWith(o[3].charAt(1))\n                  ? o[0].charAt(0) +\n                      o[1].charAt(0) +\n                      o[2].charAt(0) +\n                      o[3].charAt(0)\n                  : o.join(\"\");\n              })(this.r, this.g, this.b, this.a, t)\n            );\n          }),\n          (t.prototype.toHex8String = function (t) {\n            return void 0 === t && (t = !1), \"#\" + this.toHex8(t);\n          }),\n          (t.prototype.toRgb = function () {\n            return {\n              r: Math.round(this.r),\n              g: Math.round(this.g),\n              b: Math.round(this.b),\n              a: this.a,\n            };\n          }),\n          (t.prototype.toRgbString = function () {\n            var t = Math.round(this.r),\n              e = Math.round(this.g),\n              n = Math.round(this.b);\n            return 1 === this.a\n              ? \"rgb(\".concat(t, \", \").concat(e, \", \").concat(n, \")\")\n              : \"rgba(\"\n                  .concat(t, \", \")\n                  .concat(e, \", \")\n                  .concat(n, \", \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toPercentageRgb = function () {\n            var t = function (t) {\n              return \"\".concat(Math.round(100 * o(t, 255)), \"%\");\n            };\n            return { r: t(this.r), g: t(this.g), b: t(this.b), a: this.a };\n          }),\n          (t.prototype.toPercentageRgbString = function () {\n            var t = function (t) {\n              return Math.round(100 * o(t, 255));\n            };\n            return 1 === this.a\n              ? \"rgb(\"\n                  .concat(t(this.r), \"%, \")\n                  .concat(t(this.g), \"%, \")\n                  .concat(t(this.b), \"%)\")\n              : \"rgba(\"\n                  .concat(t(this.r), \"%, \")\n                  .concat(t(this.g), \"%, \")\n                  .concat(t(this.b), \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toName = function () {\n            if (0 === this.a) return \"transparent\";\n            if (this.a < 1) return !1;\n            for (\n              var t = \"#\" + d(this.r, this.g, this.b, !1),\n                e = 0,\n                n = Object.entries(y);\n              e < n.length;\n              e++\n            ) {\n              var r = n[e],\n                i = r[0];\n              if (t === r[1]) return i;\n            }\n            return !1;\n          }),\n          (t.prototype.toString = function (t) {\n            var e = Boolean(t);\n            t = null != t ? t : this.format;\n            var n = !1,\n              r = this.a < 1 && this.a >= 0;\n            return e || !r || (!t.startsWith(\"hex\") && \"name\" !== t)\n              ? (\"rgb\" === t && (n = this.toRgbString()),\n                \"prgb\" === t && (n = this.toPercentageRgbString()),\n                (\"hex\" !== t && \"hex6\" !== t) || (n = this.toHexString()),\n                \"hex3\" === t && (n = this.toHexString(!0)),\n                \"hex4\" === t && (n = this.toHex8String(!0)),\n                \"hex8\" === t && (n = this.toHex8String()),\n                \"name\" === t && (n = this.toName()),\n                \"hsl\" === t && (n = this.toHslString()),\n                \"hsv\" === t && (n = this.toHsvString()),\n                n || this.toHexString())\n              : \"name\" === t && 0 === this.a\n              ? this.toName()\n              : this.toRgbString();\n          }),\n          (t.prototype.toNumber = function () {\n            return (\n              (Math.round(this.r) << 16) +\n              (Math.round(this.g) << 8) +\n              Math.round(this.b)\n            );\n          }),\n          (t.prototype.clone = function () {\n            return new t(this.toString());\n          }),\n          (t.prototype.lighten = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.l += e / 100), (n.l = a(n.l)), new t(n);\n          }),\n          (t.prototype.brighten = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toRgb();\n            return (\n              (n.r = Math.max(\n                0,\n                Math.min(255, n.r - Math.round((-e / 100) * 255)),\n              )),\n              (n.g = Math.max(\n                0,\n                Math.min(255, n.g - Math.round((-e / 100) * 255)),\n              )),\n              (n.b = Math.max(\n                0,\n                Math.min(255, n.b - Math.round((-e / 100) * 255)),\n              )),\n              new t(n)\n            );\n          }),\n          (t.prototype.darken = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.l -= e / 100), (n.l = a(n.l)), new t(n);\n          }),\n          (t.prototype.tint = function (t) {\n            return void 0 === t && (t = 10), this.mix(\"white\", t);\n          }),\n          (t.prototype.shade = function (t) {\n            return void 0 === t && (t = 10), this.mix(\"black\", t);\n          }),\n          (t.prototype.desaturate = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.s -= e / 100), (n.s = a(n.s)), new t(n);\n          }),\n          (t.prototype.saturate = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.s += e / 100), (n.s = a(n.s)), new t(n);\n          }),\n          (t.prototype.greyscale = function () {\n            return this.desaturate(100);\n          }),\n          (t.prototype.spin = function (e) {\n            var n = this.toHsl(),\n              r = (n.h + e) % 360;\n            return (n.h = r < 0 ? 360 + r : r), new t(n);\n          }),\n          (t.prototype.mix = function (e, n) {\n            void 0 === n && (n = 50);\n            var r = this.toRgb(),\n              i = new t(e).toRgb(),\n              o = n / 100;\n            return new t({\n              r: (i.r - r.r) * o + r.r,\n              g: (i.g - r.g) * o + r.g,\n              b: (i.b - r.b) * o + r.b,\n              a: (i.a - r.a) * o + r.a,\n            });\n          }),\n          (t.prototype.analogous = function (e, n) {\n            void 0 === e && (e = 6), void 0 === n && (n = 30);\n            var r = this.toHsl(),\n              i = 360 / n,\n              o = [this];\n            for (r.h = (r.h - ((i * e) >> 1) + 720) % 360; --e; )\n              (r.h = (r.h + i) % 360), o.push(new t(r));\n            return o;\n          }),\n          (t.prototype.complement = function () {\n            var e = this.toHsl();\n            return (e.h = (e.h + 180) % 360), new t(e);\n          }),\n          (t.prototype.monochromatic = function (e) {\n            void 0 === e && (e = 6);\n            for (\n              var n = this.toHsv(),\n                r = n.h,\n                i = n.s,\n                o = n.v,\n                a = [],\n                s = 1 / e;\n              e--;\n\n            )\n              a.push(new t({ h: r, s: i, v: o })), (o = (o + s) % 1);\n            return a;\n          }),\n          (t.prototype.splitcomplement = function () {\n            var e = this.toHsl(),\n              n = e.h;\n            return [\n              this,\n              new t({ h: (n + 72) % 360, s: e.s, l: e.l }),\n              new t({ h: (n + 216) % 360, s: e.s, l: e.l }),\n            ];\n          }),\n          (t.prototype.onBackground = function (e) {\n            var n = this.toRgb(),\n              r = new t(e).toRgb();\n            return new t({\n              r: r.r + (n.r - r.r) * n.a,\n              g: r.g + (n.g - r.g) * n.a,\n              b: r.b + (n.b - r.b) * n.a,\n            });\n          }),\n          (t.prototype.triad = function () {\n            return this.polyad(3);\n          }),\n          (t.prototype.tetrad = function () {\n            return this.polyad(4);\n          }),\n          (t.prototype.polyad = function (e) {\n            for (\n              var n = this.toHsl(), r = n.h, i = [this], o = 360 / e, a = 1;\n              a < e;\n              a++\n            )\n              i.push(new t({ h: (r + a * o) % 360, s: n.s, l: n.l }));\n            return i;\n          }),\n          (t.prototype.equals = function (e) {\n            return this.toRgbString() === new t(e).toRgbString();\n          }),\n          t\n        );\n      })();\n      var C = [\n        { index: 7, opacity: 0.15 },\n        { index: 6, opacity: 0.25 },\n        { index: 5, opacity: 0.3 },\n        { index: 5, opacity: 0.45 },\n        { index: 5, opacity: 0.65 },\n        { index: 5, opacity: 0.85 },\n        { index: 4, opacity: 0.9 },\n        { index: 3, opacity: 0.95 },\n        { index: 2, opacity: 0.97 },\n        { index: 1, opacity: 0.98 },\n      ];\n      function E(t, e, n) {\n        var r;\n        return (\n          (r =\n            Math.round(t.h) >= 60 && Math.round(t.h) <= 240\n              ? n\n                ? Math.round(t.h) - 2 * e\n                : Math.round(t.h) + 2 * e\n              : n\n              ? Math.round(t.h) + 2 * e\n              : Math.round(t.h) - 2 * e) < 0\n            ? (r += 360)\n            : r >= 360 && (r -= 360),\n          r\n        );\n      }\n      function j(t, e, n) {\n        return 0 === t.h && 0 === t.s\n          ? t.s\n          : ((r = n ? t.s - 0.16 * e : 4 === e ? t.s + 0.16 : t.s + 0.05 * e) >\n              1 && (r = 1),\n            n && 5 === e && r > 0.1 && (r = 0.1),\n            r < 0.06 && (r = 0.06),\n            Number(r.toFixed(2)));\n        var r;\n      }\n      function P(t, e, n) {\n        var r;\n        return (\n          (r = n ? t.v + 0.05 * e : t.v - 0.15 * e) > 1 && (r = 1),\n          Number(r.toFixed(2))\n        );\n      }\n      function A(t) {\n        for (\n          var e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            n = [],\n            r = new k(t),\n            i = 5;\n          i > 0;\n          i -= 1\n        ) {\n          var o = r.toHsv(),\n            a = new k({\n              h: E(o, i, !0),\n              s: j(o, i, !0),\n              v: P(o, i, !0),\n            }).toHexString();\n          n.push(a);\n        }\n        n.push(r.toHexString());\n        for (var s = 1; s <= 4; s += 1) {\n          var c = r.toHsv(),\n            u = new k({ h: E(c, s), s: j(c, s), v: P(c, s) }).toHexString();\n          n.push(u);\n        }\n        return \"dark\" === e.theme\n          ? C.map(function (t) {\n              var r = t.index,\n                i = t.opacity;\n              return new k(e.backgroundColor || \"#141414\")\n                .mix(n[r], 100 * i)\n                .toHexString();\n            })\n          : n;\n      }\n      var I = {\n          red: \"#F5222D\",\n          volcano: \"#FA541C\",\n          orange: \"#FA8C16\",\n          gold: \"#FAAD14\",\n          yellow: \"#FADB14\",\n          lime: \"#A0D911\",\n          green: \"#52C41A\",\n          cyan: \"#13C2C2\",\n          blue: \"#1890FF\",\n          geekblue: \"#2F54EB\",\n          purple: \"#722ED1\",\n          magenta: \"#EB2F96\",\n          grey: \"#666666\",\n        },\n        T = {},\n        N = {};\n      Object.keys(I).forEach(function (t) {\n        (T[t] = A(I[t])),\n          (T[t].primary = T[t][5]),\n          (N[t] = A(I[t], { theme: \"dark\", backgroundColor: \"#141414\" })),\n          (N[t].primary = N[t][5]);\n      });\n      T.red,\n        T.volcano,\n        T.gold,\n        T.orange,\n        T.yellow,\n        T.lime,\n        T.green,\n        T.cyan,\n        T.blue,\n        T.geekblue,\n        T.purple,\n        T.magenta,\n        T.grey;\n      var B = function (t, e, n) {\n          var r = i()(t),\n            o = i()(e);\n          return i()([\n            (1 - n) * r.red() + n * o.red(),\n            (1 - n) * r.green() + n * o.green(),\n            (1 - n) * r.blue() + n * o.blue(),\n          ]).rgb();\n        },\n        L = function (t, e, n, r) {\n          return (\n            void 0 === e && (e = \"#fff\"),\n            void 0 === n && (n = \"default\"),\n            void 0 === r && (r = \"rgb(150, 150, 150)\"),\n            \"default\" === n\n              ? (function (t, e, n) {\n                  void 0 === e && (e = \"#fff\"),\n                    void 0 === n && (n = \"rgb(150, 150, 150)\");\n                  var r = B(e, t, 0.05).rgb().toString(),\n                    o = B(e, t, 0.1).rgb().toString(),\n                    a = B(e, t, 0.2).rgb().toString(),\n                    s = B(e, t, 0.4).rgb().toString(),\n                    c = B(e, n, 0.02).rgb().toString(),\n                    u = B(e, n, 0.05).rgb().toString(),\n                    h = B(e, n, 0.1).rgb().toString(),\n                    l = B(e, n, 0.2).rgb().toString(),\n                    f = B(e, n, 0.3).rgb().toString(),\n                    d = A(t, { theme: \"default\", backgroundColor: e }),\n                    p = i()(t).hex().toLowerCase(),\n                    g = d.indexOf(p),\n                    v = t;\n                  return (\n                    -1 !== g && (v = d[g + 1]),\n                    {\n                      mainStroke: t,\n                      mainFill: o,\n                      activeStroke: t,\n                      activeFill: r,\n                      inactiveStroke: s,\n                      inactiveFill: r,\n                      selectedStroke: t,\n                      selectedFill: e,\n                      highlightStroke: v,\n                      highlightFill: a,\n                      disableStroke: f,\n                      disableFill: u,\n                      edgeMainStroke: f,\n                      edgeActiveStroke: t,\n                      edgeInactiveStroke: l,\n                      edgeSelectedStroke: t,\n                      edgeHighlightStroke: t,\n                      edgeDisableStroke: h,\n                      comboMainStroke: f,\n                      comboMainFill: c,\n                      comboActiveStroke: t,\n                      comboActiveFill: r,\n                      comboInactiveStroke: f,\n                      comboInactiveFill: c,\n                      comboSelectedStroke: t,\n                      comboSelectedFill: c,\n                      comboHighlightStroke: v,\n                      comboHighlightFill: c,\n                      comboDisableStroke: l,\n                      comboDisableFill: u,\n                    }\n                  );\n                })(t, e, \"rgb(150, 150, 150)\")\n              : (function (t, e, n) {\n                  void 0 === e && (e = \"#fff\"), void 0 === n && (n = \"#777\");\n                  var r = B(e, t, 0.2).rgb().toString(),\n                    o = B(e, t, 0.3).rgb().toString(),\n                    a = B(e, t, 0.6).rgb().toString(),\n                    s = B(e, t, 0.8).rgb().toString(),\n                    c = B(e, n, 0.2).rgb().toString(),\n                    u = B(e, n, 0.25).rgb().toString(),\n                    h = B(e, n, 0.3).rgb().toString(),\n                    l = B(e, n, 0.4).rgb().toString(),\n                    f = B(e, n, 0.5).rgb().toString(),\n                    d = A(t, { theme: \"dark\", backgroundColor: e }),\n                    p = i()(t).hex().toLowerCase(),\n                    g = d.indexOf(p),\n                    v = t;\n                  return (\n                    -1 !== g && (v = d[g + 1]),\n                    {\n                      mainStroke: s,\n                      mainFill: r,\n                      activeStroke: t,\n                      activeFill: o,\n                      inactiveStroke: s,\n                      inactiveFill: r,\n                      selectedStroke: t,\n                      selectedFill: r,\n                      highlightStroke: t,\n                      highlightFill: a,\n                      disableStroke: f,\n                      disableFill: u,\n                      edgeMainStroke: n,\n                      edgeActiveStroke: t,\n                      edgeInactiveStroke: n,\n                      edgeSelectedStroke: t,\n                      edgeHighlightStroke: t,\n                      edgeDisableStroke: h,\n                      comboMainStroke: l,\n                      comboMainFill: u,\n                      comboActiveStroke: t,\n                      comboActiveFill: c,\n                      comboInactiveStroke: l,\n                      comboInactiveFill: u,\n                      comboSelectedStroke: t,\n                      comboSelectedFill: c,\n                      comboHighlightStroke: v,\n                      comboHighlightFill: u,\n                      comboDisableStroke: l,\n                      comboDisableFill: c,\n                    }\n                  );\n                })(t, e, \"#777\")\n          );\n        },\n        D = function (t, e, n, r) {\n          void 0 === e && (e = \"#fff\"),\n            void 0 === n && (n = \"default\"),\n            void 0 === r && (r = \"rgb(150, 150, 150)\");\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              i.push(L(t, e, n, r));\n            }),\n            i\n          );\n        };\n    },\n    76: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clearAnimationFrame = function (t) {\n          return o.clearAnimationFrame\n            ? o.clearAnimationFrame(t)\n            : (\"object\" ===\n                (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n                window.cancelAnimationFrame\n                ? window.cancelAnimationFrame\n                : clearTimeout)(t);\n        }),\n        (e.requestAnimationFrame = function (t) {\n          return o.requestAnimationFrame\n            ? o.requestAnimationFrame(t)\n            : (\"object\" ===\n                (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n                window.requestAnimationFrame\n                ? window.requestAnimationFrame\n                : function (t) {\n                    return setTimeout(t, 16);\n                  })(t);\n        }),\n        (e.setExtraFunction = function (t) {\n          void 0 === t && (t = {}), (t = t);\n        });\n      var o = {};\n    },\n    77: function (t, e) {\n      function n(t) {\n        return (n =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r;\n      r = (function () {\n        return this;\n      })();\n      try {\n        r = r || new Function(\"return this\")();\n      } catch (t) {\n        \"object\" === (\"undefined\" == typeof window ? \"undefined\" : n(window)) &&\n          (r = window);\n      }\n      t.exports = r;\n    },\n    78: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.Layouts = e.Layout = void 0);\n      var r = n(51),\n        i = (function () {\n          function t(t) {\n            var e = r.getLayoutByName(t.type);\n            this.layoutInstance = new e(t);\n          }\n          return (\n            (t.prototype.layout = function (t) {\n              return this.layoutInstance.layout(t);\n            }),\n            (t.prototype.updateCfg = function (t) {\n              this.layoutInstance.updateCfg(t);\n            }),\n            (t.prototype.init = function (t) {\n              this.layoutInstance.init(t);\n            }),\n            (t.prototype.execute = function () {\n              this.layoutInstance.execute();\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return this.layoutInstance.getDefaultCfg();\n            }),\n            (t.prototype.destroy = function () {\n              return this.layoutInstance.destroy();\n            }),\n            t\n          );\n        })();\n      (e.Layout = i),\n        (e.Layouts = new Proxy(\n          {},\n          {\n            get: function (t, e) {\n              return r.getLayoutByName(e);\n            },\n            set: function (t, e, n) {\n              return r.registerLayout(e, n), !0;\n            },\n          },\n        ));\n    },\n    97: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(2),\n        o = (n(6), n(27)),\n        a = n(74),\n        s = n(26),\n        c = n(18),\n        u = n(32),\n        h =\n          (n(395),\n          n(396),\n          n(101),\n          n(102),\n          {\n            version: c.a.version,\n            Graph: a.a,\n            Util: u.a,\n            Layout: s.a,\n            Layouts: s.b,\n            registerLayout: s.c,\n            unRegisterLayout: s.d,\n            Global: c.a,\n            registerBehavior: i.i,\n            registerCombo: i.j,\n            registerEdge: i.k,\n            registerNode: i.l,\n            Algorithm: o,\n            Arrow: i.d,\n            Marker: i.f,\n            Shape: i.g,\n          });\n      var l,\n        f =\n          ((l = a.b),\n          function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            return l.apply(null, Object(r.g)(t, [h]));\n          });\n      (h.registerGraph = f), (e.default = h);\n    },\n    98: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.assembleFont =\n          e.getTextWidth =\n          e.getLineSpaceing =\n          e.getTextHeight =\n            void 0);\n      var r = n(179),\n        i = n(180);\n      function o(t, e) {\n        return e ? e - t : 0.14 * t;\n      }\n      (e.getTextHeight = function (t, e, n) {\n        var i = 1;\n        return (\n          (0, r.isString)(t) && (i = t.split(\"\\n\").length),\n          i > 1 ? e * i + o(e, n) * (i - 1) : e\n        );\n      }),\n        (e.getLineSpaceing = o),\n        (e.getTextWidth = function (t, e) {\n          var n = (0, i.getOffScreenContext)(),\n            o = 0;\n          if ((0, r.isNil)(t) || \"\" === t) return o;\n          if (\n            (n.save(), (n.font = e), (0, r.isString)(t) && t.includes(\"\\n\"))\n          ) {\n            var a = t.split(\"\\n\");\n            (0, r.each)(a, function (t) {\n              var e = n.measureText(t).width;\n              o < e && (o = e);\n            });\n          } else o = n.measureText(t).width;\n          return n.restore(), o;\n        }),\n        (e.assembleFont = function (t) {\n          var e = t.fontSize,\n            n = t.fontFamily,\n            r = t.fontWeight;\n          return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n        });\n    },\n  }).default;\n});\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "packages/examples-uniapp/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta\n      name=\"viewport\"\n      content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\"\n    />\n    <title></title>\n    <!--preload-links-->\n    <!--app-context-->\n  </head>\n  <body>\n    <div id=\"app\"><!--app-html--></div>\n    <script type=\"module\" src=\"/main.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/examples-uniapp/main.js",
    "content": "import App from \"./App\";\n\n// #ifndef VUE3\nimport Vue from \"vue\";\nVue.config.productionTip = false;\nApp.mpType = \"app\";\nconst app = new Vue({\n  ...App,\n});\napp.$mount();\n// #endif\n\n// #ifdef VUE3\nimport { createSSRApp } from \"vue\";\nexport function createApp() {\n  const app = createSSRApp(App);\n  return {\n    app,\n  };\n}\n// #endif\n"
  },
  {
    "path": "packages/examples-uniapp/manifest.json",
    "content": "{\n  \"name\": \"test\",\n  \"appid\": \"\",\n  \"description\": \"\",\n  \"versionName\": \"1.0.0\",\n  \"versionCode\": \"100\",\n  \"transformPx\": false,\n  /* 5+App特有相关 */\n  \"app-plus\": {\n    \"usingComponents\": true,\n    \"nvueStyleCompiler\": \"uni-app\",\n    \"compilerVersion\": 3,\n    \"splashscreen\": {\n      \"alwaysShowBeforeRender\": true,\n      \"waiting\": true,\n      \"autoclose\": true,\n      \"delay\": 0\n    },\n    /* 模块配置 */\n    \"modules\": {},\n    /* 应用发布信息 */\n    \"distribute\": {\n      /* android打包配置 */\n      \"android\": {\n        \"permissions\": [\n          \"<uses-permission android:name=\\\"android.permission.CHANGE_NETWORK_STATE\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.VIBRATE\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.READ_LOGS\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.ACCESS_WIFI_STATE\\\"/>\",\n          \"<uses-feature android:name=\\\"android.hardware.camera.autofocus\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.ACCESS_NETWORK_STATE\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.CAMERA\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.GET_ACCOUNTS\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.CHANGE_WIFI_STATE\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.WAKE_LOCK\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.FLASHLIGHT\\\"/>\",\n          \"<uses-feature android:name=\\\"android.hardware.camera\\\"/>\",\n          \"<uses-permission android:name=\\\"android.permission.WRITE_SETTINGS\\\"/>\"\n        ]\n      },\n      /* ios打包配置 */\n      \"ios\": {},\n      /* SDK配置 */\n      \"sdkConfigs\": {}\n    }\n  },\n  /* 快应用特有相关 */\n  \"quickapp\": {},\n  /* 小程序特有相关 */\n  \"mp-weixin\": {\n    \"appid\": \"\",\n    \"setting\": {\n      \"urlCheck\": false\n    },\n    \"usingComponents\": true\n  },\n  \"mp-alipay\": {\n    \"usingComponents\": true\n  },\n  \"mp-baidu\": {\n    \"usingComponents\": true\n  },\n  \"mp-toutiao\": {\n    \"usingComponents\": true\n  },\n  \"uniStatistics\": {\n    \"enable\": false\n  },\n  \"vueVersion\": \"2\"\n}\n"
  },
  {
    "path": "packages/examples-uniapp/pages/index/index.vue",
    "content": "<template>\n  <view class=\"content\">\n    <f6-canvas\n      :width=\"width\"\n      :height=\"height\"\n      :pixelRatio=\"pixelRatio\"\n      @onInit=\"onCanvasInit\"\n      @onTouchEvent=\"onTouchEvent\"\n    ></f6-canvas>\n    <image class=\"logo\" src=\"/static/logo.png\"></image>\n    <view class=\"text-area\">\n      <text class=\"title\">{{ title }}</text>\n    </view>\n  </view>\n</template>\n\n<script>\nimport F6Canvas from \"../../components/canvas/canvas.vue\";\nimport F6 from \"f6\";\nexport default {\n  components: {\n    \"f6-canvas\": F6Canvas,\n  },\n  data() {\n    return {\n      width: 300,\n      height: 400,\n      pixelRatio: 2,\n    };\n  },\n  onLoad() {},\n  methods: {\n    onTouchEvent(e) {\n      this.graph && this.graph.emitEvent(e);\n    },\n    onCanvasInit({ ctx, rect, container, renderer }) {\n      console.log(\"canvas init ready\", ctx, rect, container, renderer);\n      const { width, height, pixelRatio } = this;\n      this.graph = new F6.Graph({\n        container: container,\n        context: ctx,\n        renderer,\n        width,\n        height,\n        pixelRatio,\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\"],\n        },\n      });\n      const data = {\n        // 点集\n        nodes: [\n          {\n            id: \"node1\", // String，该节点存在则必须，节点的唯一标识\n            x: 100, // Number，可选，节点位置的 x 值\n            y: 200, // Number，可选，节点位置的 y 值\n          },\n          {\n            id: \"node2\", // String，该节点存在则必须，节点的唯一标识\n            x: 300, // Number，可选，节点位置的 x 值\n            y: 200, // Number，可选，节点位置的 y 值\n          },\n        ],\n        // 边集\n        edges: [\n          {\n            source: \"node1\", // String，必须，起始点 id\n            target: \"node2\", // String，必须，目标点 id\n          },\n        ],\n      };\n      this.graph.data(data);\n      this.graph.render();\n      this.graph.fitView();\n    },\n  },\n};\n</script>\n\n<style>\n.content {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n.logo {\n  width: 200rpx;\n  height: 200rpx;\n  margin-top: 200rpx;\n  margin-right: auto;\n  margin-bottom: 50rpx;\n  margin-left: auto;\n}\n.text-area {\n  display: flex;\n  justify-content: center;\n}\n.title {\n  color: #8f8f94;\n  font-size: 36rpx;\n}\n</style>\n"
  },
  {
    "path": "packages/examples-uniapp/pages.json",
    "content": "{\n  \"pages\": [\n    //pages数组中第一项表示应用启动页，参考：https://uniapp.dcloud.io/collocation/pages\n    {\n      \"path\": \"pages/index/index\",\n      \"style\": {\n        \"navigationBarTitleText\": \"uni-app\"\n      }\n    }\n  ],\n  \"globalStyle\": {\n    \"navigationBarTextStyle\": \"black\",\n    \"navigationBarTitleText\": \"uni-app\",\n    \"navigationBarBackgroundColor\": \"#F8F8F8\",\n    \"backgroundColor\": \"#F8F8F8\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-uniapp/uni.scss",
    "content": "/**\n * 这里是uni-app内置的常用样式变量\n *\n * uni-app 官方扩展插件及插件市场（https://ext.dcloud.net.cn）上很多三方插件均使用了这些样式变量\n * 如果你是插件开发者，建议你使用scss预处理，并在插件代码中直接使用这些变量（无需 import 这个文件），方便用户通过搭积木的方式开发整体风格一致的App\n *\n */\n\n/**\n * 如果你是App开发者（插件使用者），你可以通过修改这些变量来定制自己的插件主题，实现自定义主题功能\n *\n * 如果你的项目同样使用了scss预处理，你也可以直接在你的 scss 代码中使用如下变量，同时无需 import 这个文件\n */\n\n/* 颜色变量 */\n\n/* 行为相关颜色 */\n$uni-color-primary: #007aff;\n$uni-color-success: #4cd964;\n$uni-color-warning: #f0ad4e;\n$uni-color-error: #dd524d;\n\n/* 文字基本颜色 */\n$uni-text-color: #333; //基本色\n$uni-text-color-inverse: #fff; //反色\n$uni-text-color-grey: #999; //辅助灰色，如加载更多的提示信息\n$uni-text-color-placeholder: #808080;\n$uni-text-color-disable: #c0c0c0;\n\n/* 背景颜色 */\n$uni-bg-color: #ffffff;\n$uni-bg-color-grey: #f8f8f8;\n$uni-bg-color-hover: #f1f1f1; //点击状态颜色\n$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色\n\n/* 边框颜色 */\n$uni-border-color: #c8c7cc;\n\n/* 尺寸变量 */\n\n/* 文字尺寸 */\n$uni-font-size-sm: 12px;\n$uni-font-size-base: 14px;\n$uni-font-size-lg: 16;\n\n/* 图片尺寸 */\n$uni-img-size-sm: 20px;\n$uni-img-size-base: 26px;\n$uni-img-size-lg: 40px;\n\n/* Border Radius */\n$uni-border-radius-sm: 2px;\n$uni-border-radius-base: 3px;\n$uni-border-radius-lg: 6px;\n$uni-border-radius-circle: 50%;\n\n/* 水平间距 */\n$uni-spacing-row-sm: 5px;\n$uni-spacing-row-base: 10px;\n$uni-spacing-row-lg: 15px;\n\n/* 垂直间距 */\n$uni-spacing-col-sm: 4px;\n$uni-spacing-col-base: 8px;\n$uni-spacing-col-lg: 12px;\n\n/* 透明度 */\n$uni-opacity-disabled: 0.3; // 组件禁用态的透明度\n\n/* 文章场景相关 */\n$uni-color-title: #2c405a; // 文章标题颜色\n$uni-font-size-title: 20px;\n$uni-color-subtitle: #555555; // 二级标题颜色\n$uni-font-size-subtitle: 26px;\n$uni-color-paragraph: #3f536e; // 文章段落颜色\n$uni-font-size-paragraph: 15px;\n"
  },
  {
    "path": "packages/examples-wx/app.js",
    "content": "App({});\n"
  },
  {
    "path": "packages/examples-wx/app.json",
    "content": "{\n  \"pages\": [\"pages/index/index\"],\n  \"subpackages\": [\n    {\n      \"root\": \"package-animation\",\n      \"pages\": [\n        \"pages/animation/change-position-default/index\",\n        \"pages/animation/custom-animate-position/index\",\n        \"pages/animation/edge-edge/index\",\n        \"pages/animation/edge-line-growth/index\",\n        \"pages/animation/node-node/index\",\n        \"pages/animation/point-in-line/index\",\n        \"pages/animation/state-change-hover/index\"\n      ]\n    },\n    {\n      \"root\": \"package-elements\",\n      \"name\": \"package-elements\",\n      \"pages\": [\n        \"pages/elements/diamond/index\",\n        \"pages/elements/cubic2/index\",\n        \"pages/elements/point-chart/index\",\n        \"pages/elements/card/index\",\n        \"pages/elements/bar-chart/index\",\n        \"pages/elements/rect/index\",\n        \"pages/elements/donut/index\",\n        \"pages/elements/edge-mul-label/index\",\n        \"pages/elements/mode-rect/index\",\n        \"pages/elements/polyline3/index\",\n        \"pages/elements/c-circle/index\",\n        \"pages/elements/triangle/index\",\n        \"pages/elements/polyline2/index\",\n        \"pages/elements/label-len/index\",\n        \"pages/elements/pie-chart/index\",\n        \"pages/elements/image/index\",\n        \"pages/elements/cubic1/index\",\n        \"pages/elements/star/index\",\n        \"pages/elements/card-node/index\",\n        \"pages/elements/multi-edges/index\",\n        \"pages/elements/extra-shape/index\",\n        \"pages/elements/label-len1/index\",\n        \"pages/elements/line-chart/index\",\n        \"pages/elements/edge-bg/index\",\n        \"pages/elements/stack-chart/index\",\n        \"pages/elements/rect-with-combo/index\",\n        \"pages/elements/custom-polyline/index\",\n        \"pages/elements/list/index\",\n        \"pages/elements/c-rect/index\",\n        \"pages/elements/circle-with-combo/index\",\n        \"pages/elements/circle/index\",\n        \"pages/elements/custom-arrows/index\",\n        \"pages/elements/ellipse/index\",\n        \"pages/elements/area-chart/index\",\n        \"pages/elements/custom-polyline2/index\",\n        \"pages/elements/arc/index\",\n        \"pages/elements/built-in-arrows/index\",\n        \"pages/elements/node-bg/index\",\n        \"pages/elements/loop/index\",\n        \"pages/elements/polyline1/index\"\n      ]\n    },\n    {\n      \"root\": \"package-general-graph\",\n      \"name\": \"package-general-graph\",\n      \"pages\": [\n        \"pages/general-graph/degree-circular/index\",\n        \"pages/general-graph/force-bubbles/index\",\n        \"pages/general-graph/layout-timing/index\",\n        \"pages/general-graph/subgraph-layout/index\",\n        \"pages/general-graph/circular-configuration-translate/index\",\n        \"pages/general-graph/basic-arc-diagram/index\",\n        \"pages/general-graph/division-circular/index\",\n        \"pages/general-graph/data-change/index\",\n        \"pages/general-graph/basic-grid/index\",\n        \"pages/general-graph/fruchterman/index\",\n        \"pages/general-graph/dagre-configuration-translate/index\",\n        \"pages/general-graph/basic-force-directed/index\",\n        \"pages/general-graph/sublayout-pipes/index\",\n        \"pages/general-graph/sort-radial/index\",\n        \"pages/general-graph/basic-concentric/index\",\n        \"pages/general-graph/prevent-overlap-unstrict-radial/index\",\n        \"pages/general-graph/dagre-UL/index\",\n        \"pages/general-graph/force-directed-force-clustering/index\",\n        \"pages/general-graph/basic-radial/index\",\n        \"pages/general-graph/basic-MDS/index\",\n        \"pages/general-graph/force-directed-functional-params/index\",\n        \"pages/general-graph/fruchterman-clustering/index\",\n        \"pages/general-graph/force-directed-configuration-translate/index\",\n        \"pages/general-graph/force-constrained-in-rect/index\",\n        \"pages/general-graph/fruchterman-configuration-translate/index\",\n        \"pages/general-graph/basic-FA2/index\",\n        \"pages/general-graph/interact-radial/index\",\n        \"pages/general-graph/cluster-grid/index\",\n        \"pages/general-graph/basic-circular/index\",\n        \"pages/general-graph/basic-dagre/index\",\n        \"pages/general-graph/spiral-circular/index\",\n        \"pages/general-graph/custom-bi-graph/index\",\n        \"pages/general-graph/dagre/index\",\n        \"pages/general-graph/dagre-combo/index\",\n        \"pages/general-graph/prevent-overlap-radial/index\",\n        \"pages/general-graph/radial-configuration-translate/index\",\n        \"pages/general-graph/layoutTranslate/index\",\n        \"pages/general-graph/basic-combo-force/index\",\n        \"pages/general-graph/force-directed-prevent-overlap/index\",\n        \"pages/general-graph/basic-force-directed-drag-fix/index\",\n        \"pages/general-graph/circular-arc-diagram/index\"\n      ]\n    },\n    {\n      \"root\": \"package-interactive\",\n      \"name\": \"package-interactive\",\n      \"pages\": [\n        \"pages/interactive/move/index\",\n        \"pages/interactive/hide-item/index\",\n        \"pages/interactive/activate-relations/index\",\n        \"pages/interactive/hull/index\",\n        \"pages/interactive/combo-rect/index\",\n        \"pages/interactive/fix-item/index\",\n        \"pages/interactive/canvas-two-fingers/index\",\n        \"pages/interactive/add-child/index\",\n        \"pages/interactive/combo-circle/index\",\n        \"pages/interactive/change-data/index\",\n        \"pages/interactive/move-animate/index\",\n        \"pages/interactive/drag-subtree/index\",\n        \"pages/interactive/collapse-slibing/index\",\n        \"pages/interactive/set-mode/index\",\n        \"pages/interactive/partial-node/index\",\n        \"pages/interactive/change-members/index\",\n        \"pages/interactive/highlight-dark/index\"\n      ]\n    },\n    {\n      \"root\": \"package-scene-case\",\n      \"name\": \"package-scene-case\",\n      \"pages\": [\n        \"pages/scene-case/sankey/index\",\n        \"pages/scene-case/knowledge-tree-graph/index\",\n        \"pages/scene-case/metro-lines/index\",\n        \"pages/scene-case/decision-tree/index\",\n        \"pages/scene-case/custom-flow/index\",\n        \"pages/scene-case/donut-transfer/index\",\n        \"pages/scene-case/mind-map/index\"\n      ]\n    },\n    {\n      \"root\": \"package-tree-graph\",\n      \"name\": \"package-tree-graph\",\n      \"pages\": [\n        \"pages/tree-graph/compact-box/index\",\n        \"pages/tree-graph/custom-side-mind-map/index\",\n        \"pages/tree-graph/compact-box-left-align/index\",\n        \"pages/tree-graph/basic-dendrogram/index\",\n        \"pages/tree-graph/left-mind-map/index\",\n        \"pages/tree-graph/file-system/index\",\n        \"pages/tree-graph/custom-tree/index\",\n        \"pages/tree-graph/radial-dendrogram/index\",\n        \"pages/tree-graph/custom-edge-tree/index\",\n        \"pages/tree-graph/tb-dendrogram/index\",\n        \"pages/tree-graph/intend-align-top/index\",\n        \"pages/tree-graph/tb-compact-box/index\",\n        \"pages/tree-graph/radial-compact-box/index\",\n        \"pages/tree-graph/mind-map/index\",\n        \"pages/tree-graph/tree-edge-label/index\",\n        \"pages/tree-graph/h-intended/index\",\n        \"pages/tree-graph/right-mind-map/index\"\n      ]\n    },\n    {\n      \"root\": \"package-plugin\",\n      \"name\": \"package-plugin\",\n      \"pages\": [\n        \"pages/plugin/edge-filter/index\",\n        \"pages/plugin/fish-eye/index\",\n        \"pages/plugin/legend/index\",\n        \"pages/plugin/time-bar/index\",\n        \"pages/plugin/tool-tip/index\",\n        \"pages/plugin/zoom-slider/index\",\n        \"pages/plugin/bundling/index\",\n        \"pages/plugin/menu/index\",\n        \"pages/plugin/snap-line/index\",\n        \"pages/plugin/mini-map/index\"\n      ]\n    }\n  ],\n  \"window\": {\n    \"backgroundTextStyle\": \"light\",\n    \"navigationBarBackgroundColor\": \"#fff\",\n    \"navigationBarTitleText\": \"Weixin\",\n    \"navigationBarTextStyle\": \"black\"\n  },\n  \"style\": \"v2\",\n  \"sitemapLocation\": \"sitemap.json\"\n}\n"
  },
  {
    "path": "packages/examples-wx/app.wxss",
    "content": "/**app.wxss**/\n.container {\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: space-between;\n  padding: 200rpx 0;\n  box-sizing: border-box;\n}\n"
  },
  {
    "path": "packages/examples-wx/components/wx.js",
    "content": "Component({\n  data: {},\n  properties: {\n    style: {\n      type: String,\n      value: \"\",\n    },\n    width: {\n      type: Number,\n      value: 100,\n    },\n    height: {\n      type: Number,\n      value: 100,\n    },\n    onInit: {\n      type: Function,\n      value: function value() {},\n    },\n    onTouchEvent: {\n      type: Function,\n      value: function value() {},\n    },\n    onError: {\n      type: Function,\n      value: function value() {},\n    },\n    pixelRatio: {\n      type: Number,\n      value: 1,\n    },\n  },\n  ready: function ready() {\n    const _this = this;\n\n    const query = wx.createSelectorQuery().in(this);\n    query\n      .select(\"#g6-canvas\")\n      .fields({\n        node: true,\n        size: true,\n      })\n      .exec((ret) => {\n        const canvas = ret[0].node;\n        canvas.width = _this.data.width * _this.data.pixelRatio;\n        canvas.height = _this.data.height * _this.data.pixelRatio;\n        _this.rect = {\n          width: _this.data.width * _this.data.pixelRatio,\n          height: _this.data.height * _this.data.pixelRatio,\n          left: canvas._left,\n          top: canvas._top,\n        };\n        _this.ctx = canvas.getContext(\"2d\");\n\n        _this.triggerEvent(\"onInit\", {\n          ctx: _this.ctx,\n          rect: _this.rect,\n          canvas,\n          renderer: \"mini-native\",\n        });\n        // _this.data.onInit(_this.ctx, _this.rect, canvas, 'mini-native');\n      });\n  },\n  methods: {\n    error: function error(e) {\n      this.data.onError(e);\n    },\n    ontouch: function ontouch(e) {\n      let i = 0;\n\n      for (i = 0; i < e.touches.length; i++) {\n        modifyEvent(e.touches[i], this.data.pixelRatio);\n      }\n\n      for (i = 0; i < e.changedTouches.length; i++) {\n        modifyEvent(e.changedTouches[i], this.data.pixelRatio);\n      }\n\n      this.triggerEvent(\"onTouchEvent\", e);\n    },\n  },\n});\n\nfunction modifyEvent(touchEvent = {}, pixelRatio) {\n  touchEvent.clientX = touchEvent.x * pixelRatio;\n  touchEvent.clientY = touchEvent.y * pixelRatio;\n  touchEvent.pageX = touchEvent.x * pixelRatio;\n  touchEvent.pageY = touchEvent.y * pixelRatio;\n}\n"
  },
  {
    "path": "packages/examples-wx/components/wx.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}\n"
  },
  {
    "path": "packages/examples-wx/components/wx.wxml",
    "content": "<canvas\n  id=\"g6-canvas\"\n  type=\"2d\"\n  width=\"{{width * pixelRatio}}\"\n  height=\"{{(height) * pixelRatio}}\"\n  style=\"width: {{width}}px; height: {{height}}px; {{style}}\"\n  disable-scroll=\"{{true}}\"\n  bindtouchstart=\"ontouch\"\n  bindtouchcancel=\"ontouch\"\n  bindtouchmove=\"ontouch\"\n  bindtouchend=\"ontouch\"\n  binderror=\"error\"\n></canvas>\n"
  },
  {
    "path": "packages/examples-wx/components/wx.wxss",
    "content": "/* components/wx.wxss */\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-plugin/f6Plugin.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6ui = e())\n    : (t.f6ui = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var i = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(i.exports, i, i.exports, n), (i.l = !0), i.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var i in t)\n            n.d(\n              r,\n              i,\n              function (e) {\n                return t[e];\n              }.bind(null, i),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 33))\n    );\n  })([\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"i\", function () {\n        return m;\n      }),\n        n.d(e, \"k\", function () {\n          return w;\n        }),\n        n.d(e, \"y\", function () {\n          return O;\n        }),\n        n.d(e, \"f\", function () {\n          return i;\n        }),\n        n.d(e, \"j\", function () {\n          return S;\n        }),\n        n.d(e, \"K\", function () {\n          return C;\n        }),\n        n.d(e, \"g\", function () {\n          return j;\n        }),\n        n.d(e, \"u\", function () {\n          return E;\n        }),\n        n.d(e, \"A\", function () {\n          return y;\n        }),\n        n.d(e, \"B\", function () {\n          return v;\n        }),\n        n.d(e, \"D\", function () {\n          return N;\n        }),\n        n.d(e, \"H\", function () {\n          return P;\n        }),\n        n.d(e, \"J\", function () {\n          return B;\n        }),\n        n.d(e, \"m\", function () {\n          return c;\n        }),\n        n.d(e, \"n\", function () {\n          return D;\n        }),\n        n.d(e, \"o\", function () {\n          return _;\n        }),\n        n.d(e, \"r\", function () {\n          return s;\n        }),\n        n.d(e, \"s\", function () {\n          return u;\n        }),\n        n.d(e, \"t\", function () {\n          return k;\n        }),\n        n.d(e, \"v\", function () {\n          return l;\n        }),\n        n.d(e, \"w\", function () {\n          return g;\n        }),\n        n.d(e, \"x\", function () {\n          return x;\n        }),\n        n.d(e, \"b\", function () {\n          return W;\n        }),\n        n.d(e, \"c\", function () {\n          return G;\n        }),\n        n.d(e, \"d\", function () {\n          return H;\n        }),\n        n.d(e, \"e\", function () {\n          return d;\n        }),\n        n.d(e, \"l\", function () {\n          return V;\n        }),\n        n.d(e, \"p\", function () {\n          return Z;\n        }),\n        n.d(e, \"q\", function () {\n          return K;\n        }),\n        n.d(e, \"z\", function () {\n          return Q;\n        }),\n        n.d(e, \"C\", function () {\n          return z;\n        }),\n        n.d(e, \"a\", function () {\n          return z;\n        }),\n        n.d(e, \"h\", function () {\n          return $;\n        }),\n        n.d(e, \"G\", function () {\n          return J;\n        }),\n        n.d(e, \"I\", function () {\n          return et;\n        }),\n        n.d(e, \"E\", function () {\n          return nt;\n        }),\n        n.d(e, \"F\", function () {\n          return rt;\n        });\n      var r = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            e(o, i) && n.push(o);\n          }\n          return n;\n        },\n        o = {}.toString,\n        a = function (t, e) {\n          return o.call(t) === \"[object \" + e + \"]\";\n        },\n        s = function (t) {\n          return a(t, \"Function\");\n        },\n        u = function (t) {\n          return null == t;\n        },\n        c = function (t) {\n          return Array.isArray ? Array.isArray(t) : a(t, \"Array\");\n        };\n      function h(t) {\n        return (h =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var l = function (t) {\n        var e = h(t);\n        return (null !== t && \"object\" === e) || \"function\" === e;\n      };\n      var d = function (t, e) {\n        if (t)\n          if (c(t))\n            for (var n = 0, r = t.length; n < r && !1 !== e(t[n], n); n++);\n          else if (l(t))\n            for (var i in t)\n              if (t.hasOwnProperty(i) && !1 === e(t[i], i)) break;\n      };\n      Object.keys;\n      function f(t) {\n        return (f =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var p = function (t) {\n          return \"object\" === f(t) && null !== t;\n        },\n        g = function (t) {\n          if (!p(t) || !a(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var e = t; null !== Object.getPrototypeOf(e); )\n            e = Object.getPrototypeOf(e);\n          return Object.getPrototypeOf(t) === e;\n        };\n      var y = function (t) {\n          if (c(t))\n            return t.reduce(function (t, e) {\n              return Math.max(t, e);\n            }, t[0]);\n        },\n        v = function (t) {\n          if (c(t))\n            return t.reduce(function (t, e) {\n              return Math.min(t, e);\n            }, t[0]);\n        },\n        m = function (t) {\n          var e = t.filter(function (t) {\n            return !isNaN(t);\n          });\n          if (!e.length) return { min: 0, max: 0 };\n          if (c(t[0])) {\n            for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n            e = n;\n          }\n          var i = y(e);\n          return { min: v(e), max: i };\n        },\n        b = Array.prototype,\n        x =\n          (b.splice,\n          b.indexOf,\n          Array.prototype.splice,\n          function (t) {\n            return a(t, \"String\");\n          });\n      function w(t) {\n        if (r(t)) return t[0];\n      }\n      function O(t) {\n        if (r(t)) {\n          return t[t.length - 1];\n        }\n      }\n      var M = Object.prototype.hasOwnProperty;\n      var S = function (t, e) {\n        if (!e || !c(t)) return {};\n        for (\n          var n,\n            r = {},\n            i = s(e)\n              ? e\n              : function (t) {\n                  return t[e];\n                },\n            o = 0;\n          o < t.length;\n          o++\n        ) {\n          var a = t[o];\n          (n = i(a)), M.call(r, n) ? r[n].push(a) : (r[n] = [a]);\n        }\n        return r;\n      };\n      var C = function (t, e) {\n        if (t[\"_wrap_\" + e]) return t[\"_wrap_\" + e];\n        var n = function (n) {\n          t[e](n);\n        };\n        return (t[\"_wrap_\" + e] = n), n;\n      };\n      var j = function (t, e) {\n          var n = e.toString(),\n            r = n.indexOf(\".\");\n          if (-1 === r) return Math.round(t);\n          var i = n.substr(r + 1).length;\n          return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n        },\n        k = function (t) {\n          return a(t, \"Number\");\n        };\n      Number.isInteger && Number.isInteger;\n      function E(t, e, n) {\n        return void 0 === n && (n = 1e-5), Math.abs(t - e) < n;\n      }\n      var N = function (t, e) {\n          return ((t % e) + e) % e;\n        },\n        T = (Math.PI, parseInt, Math.PI / 180),\n        P = function (t) {\n          return T * t;\n        },\n        I =\n          (Object.values,\n          function (t) {\n            return u(t) ? \"\" : t.toString();\n          });\n      var B = function (t) {\n          var e = I(t);\n          return e.charAt(0).toUpperCase() + e.substring(1);\n        },\n        A = {}.toString,\n        L = function (t) {\n          return A.call(t)\n            .replace(/^\\[object /, \"\")\n            .replace(/]$/, \"\");\n        },\n        D = function (t) {\n          return a(t, \"Boolean\");\n        },\n        _ = function (t) {\n          return a(t, \"Date\");\n        },\n        R = Object.prototype,\n        Y = function (t) {\n          var e = t && t.constructor;\n          return t === ((\"function\" == typeof e && e.prototype) || R);\n        };\n      function F(t, e) {\n        for (var n in e)\n          e.hasOwnProperty(n) &&\n            \"constructor\" !== n &&\n            void 0 !== e[n] &&\n            (t[n] = e[n]);\n      }\n      function z(t, e, n, r) {\n        return e && F(t, e), n && F(t, n), r && F(t, r), t;\n      }\n      function X(t) {\n        return (X =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var W = function t(e) {\n        if (\"object\" !== X(e) || null === e) return e;\n        var n;\n        if (c(e)) {\n          n = [];\n          for (var r = 0, i = e.length; r < i; r++)\n            \"object\" === X(e[r]) && null != e[r]\n              ? (n[r] = t(e[r]))\n              : (n[r] = e[r]);\n        } else\n          for (var o in ((n = {}), e))\n            \"object\" === X(e[o]) && null != e[o]\n              ? (n[o] = t(e[o]))\n              : (n[o] = e[o]);\n        return n;\n      };\n      var G = function (t, e, n) {\n        var r;\n        return function () {\n          var i = this,\n            o = arguments,\n            a = function () {\n              (r = null), n || t.apply(i, o);\n            },\n            s = n && !r;\n          clearTimeout(r), (r = setTimeout(a, e)), s && t.apply(i, o);\n        };\n      };\n      function q(t, e, n, r) {\n        for (var i in ((n = n || 0), (r = r || 5), e))\n          if (e.hasOwnProperty(i)) {\n            var o = e[i];\n            null !== o && g(o)\n              ? (g(t[i]) || (t[i] = {}),\n                n < r ? q(t[i], o, n + 1, r) : (t[i] = e[i]))\n              : c(o)\n              ? ((t[i] = []), (t[i] = t[i].concat(o)))\n              : void 0 !== o && (t[i] = o);\n          }\n      }\n      var H = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r += 1) q(t, e[r]);\n          return t;\n        },\n        V = function (t, e) {\n          if (!r(t)) return -1;\n          var n = Array.prototype.indexOf;\n          if (n) return n.call(t, e);\n          for (var i = -1, o = 0; o < t.length; o++)\n            if (t[o] === e) {\n              i = o;\n              break;\n            }\n          return i;\n        },\n        U = Object.prototype.hasOwnProperty;\n      var Z = function (t) {\n          if (u(t)) return !0;\n          if (r(t)) return !t.length;\n          var e = L(t);\n          if (\"Map\" === e || \"Set\" === e) return !t.size;\n          if (Y(t)) return !Object.keys(t).length;\n          for (var n in t) if (U.call(t, n)) return !1;\n          return !0;\n        },\n        K = function t(e, n) {\n          if (e === n) return !0;\n          if (!e || !n) return !1;\n          if (x(e) || x(n)) return !1;\n          if (r(e) || r(n)) {\n            if (e.length !== n.length) return !1;\n            for (var i = !0, o = 0; o < e.length && (i = t(e[o], n[o])); o++);\n            return i;\n          }\n          if (p(e) || p(n)) {\n            var a = Object.keys(e),\n              s = Object.keys(n);\n            if (a.length !== s.length) return !1;\n            for (i = !0, o = 0; o < a.length && (i = t(e[a[o]], n[a[o]])); o++);\n            return i;\n          }\n          return !1;\n        },\n        Q = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            n.push(e(o, i));\n          }\n          return n;\n        },\n        $ = function (t, e, n) {\n          for (var r = 0, i = x(e) ? e.split(\".\") : e; t && r < i.length; )\n            t = t[i[r++]];\n          return void 0 === t || r < i.length ? n : t;\n        },\n        J =\n          (Object.prototype.hasOwnProperty,\n          function (t, e, n) {\n            var r,\n              i,\n              o,\n              a,\n              s = 0;\n            n || (n = {});\n            var u = function () {\n                (s = !1 === n.leading ? 0 : Date.now()),\n                  (r = null),\n                  (a = t.apply(i, o)),\n                  r || (i = o = null);\n              },\n              c = function () {\n                var c = Date.now();\n                s || !1 !== n.leading || (s = c);\n                var h = e - (c - s);\n                return (\n                  (i = this),\n                  (o = arguments),\n                  h <= 0 || h > e\n                    ? (r && (clearTimeout(r), (r = null)),\n                      (s = c),\n                      (a = t.apply(i, o)),\n                      r || (i = o = null))\n                    : r || !1 === n.trailing || (r = setTimeout(u, h)),\n                  a\n                );\n              };\n            return (\n              (c.cancel = function () {\n                clearTimeout(r), (s = 0), (r = i = o = null);\n              }),\n              c\n            );\n          }),\n        tt = {},\n        et = function (t) {\n          return tt[(t = t || \"g\")] ? (tt[t] += 1) : (tt[t] = 1), t + tt[t];\n        },\n        nt = function () {};\n      function rt(t) {\n        return u(t) ? 0 : r(t) ? t.length : Object.keys(t).length;\n      }\n      !(function () {\n        function t() {\n          this.map = {};\n        }\n        (t.prototype.has = function (t) {\n          return void 0 !== this.map[t];\n        }),\n          (t.prototype.get = function (t, e) {\n            var n = this.map[t];\n            return void 0 === n ? e : n;\n          }),\n          (t.prototype.set = function (t, e) {\n            this.map[t] = e;\n          }),\n          (t.prototype.clear = function () {\n            this.map = {};\n          }),\n          (t.prototype.delete = function (t) {\n            delete this.map[t];\n          }),\n          (t.prototype.size = function () {\n            return Object.keys(this.map).length;\n          });\n      })();\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return i;\n      }),\n        n.d(e, \"a\", function () {\n          return o;\n        }),\n        n.d(e, \"e\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        }),\n        n.d(e, \"d\", function () {\n          return u;\n        }),\n        n.d(e, \"g\", function () {\n          return c;\n        }),\n        n.d(e, \"f\", function () {\n          return h;\n        });\n      /*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n      var r = function (t, e) {\n        return (r =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, e) {\n              t.__proto__ = e;\n            }) ||\n          function (t, e) {\n            for (var n in e)\n              Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n          })(t, e);\n      };\n      function i(t, e) {\n        if (\"function\" != typeof e && null !== e)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(e) +\n              \" is not a constructor or null\",\n          );\n        function n() {\n          this.constructor = t;\n        }\n        r(t, e),\n          (t.prototype =\n            null === e\n              ? Object.create(e)\n              : ((n.prototype = e.prototype), new n()));\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function a(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      function s(t, e, n, r) {\n        return new (n || (n = Promise))(function (i, o) {\n          function a(t) {\n            try {\n              u(r.next(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function s(t) {\n            try {\n              u(r.throw(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function u(t) {\n            var e;\n            t.done\n              ? i(t.value)\n              : ((e = t.value),\n                e instanceof n\n                  ? e\n                  : new n(function (t) {\n                      t(e);\n                    })).then(a, s);\n          }\n          u((r = r.apply(t, e || [])).next());\n        });\n      }\n      function u(t, e) {\n        var n,\n          r,\n          i,\n          o,\n          a = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (o = { next: s(0), throw: s(1), return: s(2) }),\n          \"function\" == typeof Symbol &&\n            (o[Symbol.iterator] = function () {\n              return this;\n            }),\n          o\n        );\n        function s(o) {\n          return function (s) {\n            return (function (o) {\n              if (n) throw new TypeError(\"Generator is already executing.\");\n              for (; a; )\n                try {\n                  if (\n                    ((n = 1),\n                    r &&\n                      (i =\n                        2 & o[0]\n                          ? r.return\n                          : o[0]\n                          ? r.throw || ((i = r.return) && i.call(r), 0)\n                          : r.next) &&\n                      !(i = i.call(r, o[1])).done)\n                  )\n                    return i;\n                  switch (((r = 0), i && (o = [2 & o[0], i.value]), o[0])) {\n                    case 0:\n                    case 1:\n                      i = o;\n                      break;\n                    case 4:\n                      return a.label++, { value: o[1], done: !1 };\n                    case 5:\n                      a.label++, (r = o[1]), (o = [0]);\n                      continue;\n                    case 7:\n                      (o = a.ops.pop()), a.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = a.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== o[0] && 2 !== o[0]))\n                      ) {\n                        a = 0;\n                        continue;\n                      }\n                      if (3 === o[0] && (!i || (o[1] > i[0] && o[1] < i[3]))) {\n                        a.label = o[1];\n                        break;\n                      }\n                      if (6 === o[0] && a.label < i[1]) {\n                        (a.label = i[1]), (i = o);\n                        break;\n                      }\n                      if (i && a.label < i[2]) {\n                        (a.label = i[2]), a.ops.push(o);\n                        break;\n                      }\n                      i[2] && a.ops.pop(), a.trys.pop();\n                      continue;\n                  }\n                  o = e.call(t, a);\n                } catch (t) {\n                  (o = [6, t]), (r = 0);\n                } finally {\n                  n = i = 0;\n                }\n              if (5 & o[0]) throw o[1];\n              return { value: o[0] ? o[1] : void 0, done: !0 };\n            })([o, s]);\n          };\n        }\n      }\n      Object.create;\n      function c() {\n        for (var t = 0, e = 0, n = arguments.length; e < n; e++)\n          t += arguments[e].length;\n        var r = Array(t),\n          i = 0;\n        for (e = 0; e < n; e++)\n          for (var o = arguments[e], a = 0, s = o.length; a < s; a++, i++)\n            r[i] = o[a];\n        return r;\n      }\n      function h(t, e, n) {\n        if (n || 2 === arguments.length)\n          for (var r, i = 0, o = e.length; i < o; i++)\n            (!r && i in e) ||\n              (r || (r = Array.prototype.slice.call(e, 0, i)), (r[i] = e[i]));\n        return t.concat(r || e);\n      }\n      Object.create;\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"c\", function () {\n          return Y;\n        }),\n        n.d(e, \"d\", function () {\n          return i;\n        }),\n        n.d(e, \"a\", function () {\n          return o;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"create\", function () {\n          return s;\n        }),\n        n.d(r, \"fromMat4\", function () {\n          return u;\n        }),\n        n.d(r, \"clone\", function () {\n          return c;\n        }),\n        n.d(r, \"copy\", function () {\n          return h;\n        }),\n        n.d(r, \"fromValues\", function () {\n          return l;\n        }),\n        n.d(r, \"set\", function () {\n          return d;\n        }),\n        n.d(r, \"identity\", function () {\n          return f;\n        }),\n        n.d(r, \"transpose\", function () {\n          return p;\n        }),\n        n.d(r, \"invert\", function () {\n          return g;\n        }),\n        n.d(r, \"adjoint\", function () {\n          return y;\n        }),\n        n.d(r, \"determinant\", function () {\n          return v;\n        }),\n        n.d(r, \"multiply\", function () {\n          return m;\n        }),\n        n.d(r, \"translate\", function () {\n          return b;\n        }),\n        n.d(r, \"rotate\", function () {\n          return x;\n        }),\n        n.d(r, \"scale\", function () {\n          return w;\n        }),\n        n.d(r, \"fromTranslation\", function () {\n          return O;\n        }),\n        n.d(r, \"fromRotation\", function () {\n          return M;\n        }),\n        n.d(r, \"fromScaling\", function () {\n          return S;\n        }),\n        n.d(r, \"fromMat2d\", function () {\n          return C;\n        }),\n        n.d(r, \"fromQuat\", function () {\n          return j;\n        }),\n        n.d(r, \"normalFromMat4\", function () {\n          return k;\n        }),\n        n.d(r, \"projection\", function () {\n          return E;\n        }),\n        n.d(r, \"str\", function () {\n          return N;\n        }),\n        n.d(r, \"frob\", function () {\n          return T;\n        }),\n        n.d(r, \"add\", function () {\n          return P;\n        }),\n        n.d(r, \"subtract\", function () {\n          return I;\n        }),\n        n.d(r, \"multiplyScalar\", function () {\n          return B;\n        }),\n        n.d(r, \"multiplyScalarAndAdd\", function () {\n          return A;\n        }),\n        n.d(r, \"exactEquals\", function () {\n          return L;\n        }),\n        n.d(r, \"equals\", function () {\n          return D;\n        }),\n        n.d(r, \"mul\", function () {\n          return _;\n        }),\n        n.d(r, \"sub\", function () {\n          return R;\n        });\n      var i = {};\n      n.r(i),\n        n.d(i, \"create\", function () {\n          return F;\n        }),\n        n.d(i, \"clone\", function () {\n          return z;\n        }),\n        n.d(i, \"length\", function () {\n          return X;\n        }),\n        n.d(i, \"fromValues\", function () {\n          return W;\n        }),\n        n.d(i, \"copy\", function () {\n          return G;\n        }),\n        n.d(i, \"set\", function () {\n          return q;\n        }),\n        n.d(i, \"add\", function () {\n          return H;\n        }),\n        n.d(i, \"subtract\", function () {\n          return V;\n        }),\n        n.d(i, \"multiply\", function () {\n          return U;\n        }),\n        n.d(i, \"divide\", function () {\n          return Z;\n        }),\n        n.d(i, \"ceil\", function () {\n          return K;\n        }),\n        n.d(i, \"floor\", function () {\n          return Q;\n        }),\n        n.d(i, \"min\", function () {\n          return $;\n        }),\n        n.d(i, \"max\", function () {\n          return J;\n        }),\n        n.d(i, \"round\", function () {\n          return tt;\n        }),\n        n.d(i, \"scale\", function () {\n          return et;\n        }),\n        n.d(i, \"scaleAndAdd\", function () {\n          return nt;\n        }),\n        n.d(i, \"distance\", function () {\n          return rt;\n        }),\n        n.d(i, \"squaredDistance\", function () {\n          return it;\n        }),\n        n.d(i, \"squaredLength\", function () {\n          return ot;\n        }),\n        n.d(i, \"negate\", function () {\n          return at;\n        }),\n        n.d(i, \"inverse\", function () {\n          return st;\n        }),\n        n.d(i, \"normalize\", function () {\n          return ut;\n        }),\n        n.d(i, \"dot\", function () {\n          return ct;\n        }),\n        n.d(i, \"cross\", function () {\n          return ht;\n        }),\n        n.d(i, \"lerp\", function () {\n          return lt;\n        }),\n        n.d(i, \"hermite\", function () {\n          return dt;\n        }),\n        n.d(i, \"bezier\", function () {\n          return ft;\n        }),\n        n.d(i, \"random\", function () {\n          return pt;\n        }),\n        n.d(i, \"transformMat4\", function () {\n          return gt;\n        }),\n        n.d(i, \"transformMat3\", function () {\n          return yt;\n        }),\n        n.d(i, \"transformQuat\", function () {\n          return vt;\n        }),\n        n.d(i, \"rotateX\", function () {\n          return mt;\n        }),\n        n.d(i, \"rotateY\", function () {\n          return bt;\n        }),\n        n.d(i, \"rotateZ\", function () {\n          return xt;\n        }),\n        n.d(i, \"angle\", function () {\n          return wt;\n        }),\n        n.d(i, \"zero\", function () {\n          return Ot;\n        }),\n        n.d(i, \"str\", function () {\n          return Mt;\n        }),\n        n.d(i, \"exactEquals\", function () {\n          return St;\n        }),\n        n.d(i, \"equals\", function () {\n          return Ct;\n        }),\n        n.d(i, \"sub\", function () {\n          return kt;\n        }),\n        n.d(i, \"mul\", function () {\n          return Et;\n        }),\n        n.d(i, \"div\", function () {\n          return Nt;\n        }),\n        n.d(i, \"dist\", function () {\n          return Tt;\n        }),\n        n.d(i, \"sqrDist\", function () {\n          return Pt;\n        }),\n        n.d(i, \"len\", function () {\n          return It;\n        }),\n        n.d(i, \"sqrLen\", function () {\n          return Bt;\n        }),\n        n.d(i, \"forEach\", function () {\n          return At;\n        });\n      var o = {};\n      n.r(o),\n        n.d(o, \"leftTranslate\", function () {\n          return Lt;\n        }),\n        n.d(o, \"leftRotate\", function () {\n          return Dt;\n        }),\n        n.d(o, \"leftScale\", function () {\n          return _t;\n        }),\n        n.d(o, \"transform\", function () {\n          return Rt;\n        }),\n        n.d(o, \"direction\", function () {\n          return Yt;\n        }),\n        n.d(o, \"angleTo\", function () {\n          return Ft;\n        }),\n        n.d(o, \"vertical\", function () {\n          return zt;\n        });\n      var a = n(4);\n      function s() {\n        var t = new a.a(9);\n        return (\n          a.a != Float32Array &&\n            ((t[1] = 0),\n            (t[2] = 0),\n            (t[3] = 0),\n            (t[5] = 0),\n            (t[6] = 0),\n            (t[7] = 0)),\n          (t[0] = 1),\n          (t[4] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function u(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[4]),\n          (t[4] = e[5]),\n          (t[5] = e[6]),\n          (t[6] = e[8]),\n          (t[7] = e[9]),\n          (t[8] = e[10]),\n          t\n        );\n      }\n      function c(t) {\n        var e = new a.a(9);\n        return (\n          (e[0] = t[0]),\n          (e[1] = t[1]),\n          (e[2] = t[2]),\n          (e[3] = t[3]),\n          (e[4] = t[4]),\n          (e[5] = t[5]),\n          (e[6] = t[6]),\n          (e[7] = t[7]),\n          (e[8] = t[8]),\n          e\n        );\n      }\n      function h(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[3]),\n          (t[4] = e[4]),\n          (t[5] = e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function l(t, e, n, r, i, o, s, u, c) {\n        var h = new a.a(9);\n        return (\n          (h[0] = t),\n          (h[1] = e),\n          (h[2] = n),\n          (h[3] = r),\n          (h[4] = i),\n          (h[5] = o),\n          (h[6] = s),\n          (h[7] = u),\n          (h[8] = c),\n          h\n        );\n      }\n      function d(t, e, n, r, i, o, a, s, u, c) {\n        return (\n          (t[0] = e),\n          (t[1] = n),\n          (t[2] = r),\n          (t[3] = i),\n          (t[4] = o),\n          (t[5] = a),\n          (t[6] = s),\n          (t[7] = u),\n          (t[8] = c),\n          t\n        );\n      }\n      function f(t) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function p(t, e) {\n        if (t === e) {\n          var n = e[1],\n            r = e[2],\n            i = e[5];\n          (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = n),\n            (t[5] = e[7]),\n            (t[6] = r),\n            (t[7] = i);\n        } else\n          (t[0] = e[0]),\n            (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = e[1]),\n            (t[4] = e[4]),\n            (t[5] = e[7]),\n            (t[6] = e[2]),\n            (t[7] = e[5]),\n            (t[8] = e[8]);\n        return t;\n      }\n      function g(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          u = e[6],\n          c = e[7],\n          h = e[8],\n          l = h * a - s * c,\n          d = -h * o + s * u,\n          f = c * o - a * u,\n          p = n * l + r * d + i * f;\n        return p\n          ? ((p = 1 / p),\n            (t[0] = l * p),\n            (t[1] = (-h * r + i * c) * p),\n            (t[2] = (s * r - i * a) * p),\n            (t[3] = d * p),\n            (t[4] = (h * n - i * u) * p),\n            (t[5] = (-s * n + i * o) * p),\n            (t[6] = f * p),\n            (t[7] = (-c * n + r * u) * p),\n            (t[8] = (a * n - r * o) * p),\n            t)\n          : null;\n      }\n      function y(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          u = e[6],\n          c = e[7],\n          h = e[8];\n        return (\n          (t[0] = a * h - s * c),\n          (t[1] = i * c - r * h),\n          (t[2] = r * s - i * a),\n          (t[3] = s * u - o * h),\n          (t[4] = n * h - i * u),\n          (t[5] = i * o - n * s),\n          (t[6] = o * c - a * u),\n          (t[7] = r * u - n * c),\n          (t[8] = n * a - r * o),\n          t\n        );\n      }\n      function v(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2],\n          i = t[3],\n          o = t[4],\n          a = t[5],\n          s = t[6],\n          u = t[7],\n          c = t[8];\n        return e * (c * o - a * u) + n * (-c * i + a * s) + r * (u * i - o * s);\n      }\n      function m(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          u = e[5],\n          c = e[6],\n          h = e[7],\n          l = e[8],\n          d = n[0],\n          f = n[1],\n          p = n[2],\n          g = n[3],\n          y = n[4],\n          v = n[5],\n          m = n[6],\n          b = n[7],\n          x = n[8];\n        return (\n          (t[0] = d * r + f * a + p * c),\n          (t[1] = d * i + f * s + p * h),\n          (t[2] = d * o + f * u + p * l),\n          (t[3] = g * r + y * a + v * c),\n          (t[4] = g * i + y * s + v * h),\n          (t[5] = g * o + y * u + v * l),\n          (t[6] = m * r + b * a + x * c),\n          (t[7] = m * i + b * s + x * h),\n          (t[8] = m * o + b * u + x * l),\n          t\n        );\n      }\n      function b(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          u = e[5],\n          c = e[6],\n          h = e[7],\n          l = e[8],\n          d = n[0],\n          f = n[1];\n        return (\n          (t[0] = r),\n          (t[1] = i),\n          (t[2] = o),\n          (t[3] = a),\n          (t[4] = s),\n          (t[5] = u),\n          (t[6] = d * r + f * a + c),\n          (t[7] = d * i + f * s + h),\n          (t[8] = d * o + f * u + l),\n          t\n        );\n      }\n      function x(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          u = e[5],\n          c = e[6],\n          h = e[7],\n          l = e[8],\n          d = Math.sin(n),\n          f = Math.cos(n);\n        return (\n          (t[0] = f * r + d * a),\n          (t[1] = f * i + d * s),\n          (t[2] = f * o + d * u),\n          (t[3] = f * a - d * r),\n          (t[4] = f * s - d * i),\n          (t[5] = f * u - d * o),\n          (t[6] = c),\n          (t[7] = h),\n          (t[8] = l),\n          t\n        );\n      }\n      function w(t, e, n) {\n        var r = n[0],\n          i = n[1];\n        return (\n          (t[0] = r * e[0]),\n          (t[1] = r * e[1]),\n          (t[2] = r * e[2]),\n          (t[3] = i * e[3]),\n          (t[4] = i * e[4]),\n          (t[5] = i * e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function O(t, e) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = e[0]),\n          (t[7] = e[1]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function M(t, e) {\n        var n = Math.sin(e),\n          r = Math.cos(e);\n        return (\n          (t[0] = r),\n          (t[1] = n),\n          (t[2] = 0),\n          (t[3] = -n),\n          (t[4] = r),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function S(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = e[1]),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function C(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = 0),\n          (t[3] = e[2]),\n          (t[4] = e[3]),\n          (t[5] = 0),\n          (t[6] = e[4]),\n          (t[7] = e[5]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function j(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = n + n,\n          s = r + r,\n          u = i + i,\n          c = n * a,\n          h = r * a,\n          l = r * s,\n          d = i * a,\n          f = i * s,\n          p = i * u,\n          g = o * a,\n          y = o * s,\n          v = o * u;\n        return (\n          (t[0] = 1 - l - p),\n          (t[3] = h - v),\n          (t[6] = d + y),\n          (t[1] = h + v),\n          (t[4] = 1 - c - p),\n          (t[7] = f - g),\n          (t[2] = d - y),\n          (t[5] = f + g),\n          (t[8] = 1 - c - l),\n          t\n        );\n      }\n      function k(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          u = e[6],\n          c = e[7],\n          h = e[8],\n          l = e[9],\n          d = e[10],\n          f = e[11],\n          p = e[12],\n          g = e[13],\n          y = e[14],\n          v = e[15],\n          m = n * s - r * a,\n          b = n * u - i * a,\n          x = n * c - o * a,\n          w = r * u - i * s,\n          O = r * c - o * s,\n          M = i * c - o * u,\n          S = h * g - l * p,\n          C = h * y - d * p,\n          j = h * v - f * p,\n          k = l * y - d * g,\n          E = l * v - f * g,\n          N = d * v - f * y,\n          T = m * N - b * E + x * k + w * j - O * C + M * S;\n        return T\n          ? ((T = 1 / T),\n            (t[0] = (s * N - u * E + c * k) * T),\n            (t[1] = (u * j - a * N - c * C) * T),\n            (t[2] = (a * E - s * j + c * S) * T),\n            (t[3] = (i * E - r * N - o * k) * T),\n            (t[4] = (n * N - i * j + o * C) * T),\n            (t[5] = (r * j - n * E - o * S) * T),\n            (t[6] = (g * M - y * O + v * w) * T),\n            (t[7] = (y * x - p * M - v * b) * T),\n            (t[8] = (p * O - g * x + v * m) * T),\n            t)\n          : null;\n      }\n      function E(t, e, n) {\n        return (\n          (t[0] = 2 / e),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = -2 / n),\n          (t[5] = 0),\n          (t[6] = -1),\n          (t[7] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function N(t) {\n        return (\n          \"mat3(\" +\n          t[0] +\n          \", \" +\n          t[1] +\n          \", \" +\n          t[2] +\n          \", \" +\n          t[3] +\n          \", \" +\n          t[4] +\n          \", \" +\n          t[5] +\n          \", \" +\n          t[6] +\n          \", \" +\n          t[7] +\n          \", \" +\n          t[8] +\n          \")\"\n        );\n      }\n      function T(t) {\n        return Math.hypot(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);\n      }\n      function P(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]),\n          (t[1] = e[1] + n[1]),\n          (t[2] = e[2] + n[2]),\n          (t[3] = e[3] + n[3]),\n          (t[4] = e[4] + n[4]),\n          (t[5] = e[5] + n[5]),\n          (t[6] = e[6] + n[6]),\n          (t[7] = e[7] + n[7]),\n          (t[8] = e[8] + n[8]),\n          t\n        );\n      }\n      function I(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]),\n          (t[1] = e[1] - n[1]),\n          (t[2] = e[2] - n[2]),\n          (t[3] = e[3] - n[3]),\n          (t[4] = e[4] - n[4]),\n          (t[5] = e[5] - n[5]),\n          (t[6] = e[6] - n[6]),\n          (t[7] = e[7] - n[7]),\n          (t[8] = e[8] - n[8]),\n          t\n        );\n      }\n      function B(t, e, n) {\n        return (\n          (t[0] = e[0] * n),\n          (t[1] = e[1] * n),\n          (t[2] = e[2] * n),\n          (t[3] = e[3] * n),\n          (t[4] = e[4] * n),\n          (t[5] = e[5] * n),\n          (t[6] = e[6] * n),\n          (t[7] = e[7] * n),\n          (t[8] = e[8] * n),\n          t\n        );\n      }\n      function A(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          (t[3] = e[3] + n[3] * r),\n          (t[4] = e[4] + n[4] * r),\n          (t[5] = e[5] + n[5] * r),\n          (t[6] = e[6] + n[6] * r),\n          (t[7] = e[7] + n[7] * r),\n          (t[8] = e[8] + n[8] * r),\n          t\n        );\n      }\n      function L(t, e) {\n        return (\n          t[0] === e[0] &&\n          t[1] === e[1] &&\n          t[2] === e[2] &&\n          t[3] === e[3] &&\n          t[4] === e[4] &&\n          t[5] === e[5] &&\n          t[6] === e[6] &&\n          t[7] === e[7] &&\n          t[8] === e[8]\n        );\n      }\n      function D(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = t[2],\n          o = t[3],\n          s = t[4],\n          u = t[5],\n          c = t[6],\n          h = t[7],\n          l = t[8],\n          d = e[0],\n          f = e[1],\n          p = e[2],\n          g = e[3],\n          y = e[4],\n          v = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          Math.abs(n - d) <= a.b * Math.max(1, Math.abs(n), Math.abs(d)) &&\n          Math.abs(r - f) <= a.b * Math.max(1, Math.abs(r), Math.abs(f)) &&\n          Math.abs(i - p) <= a.b * Math.max(1, Math.abs(i), Math.abs(p)) &&\n          Math.abs(o - g) <= a.b * Math.max(1, Math.abs(o), Math.abs(g)) &&\n          Math.abs(s - y) <= a.b * Math.max(1, Math.abs(s), Math.abs(y)) &&\n          Math.abs(u - v) <= a.b * Math.max(1, Math.abs(u), Math.abs(v)) &&\n          Math.abs(c - m) <= a.b * Math.max(1, Math.abs(c), Math.abs(m)) &&\n          Math.abs(h - b) <= a.b * Math.max(1, Math.abs(h), Math.abs(b)) &&\n          Math.abs(l - x) <= a.b * Math.max(1, Math.abs(l), Math.abs(x))\n        );\n      }\n      var _ = m,\n        R = I,\n        Y = n(9);\n      function F() {\n        var t = new a.a(3);\n        return a.a != Float32Array && ((t[0] = 0), (t[1] = 0), (t[2] = 0)), t;\n      }\n      function z(t) {\n        var e = new a.a(3);\n        return (e[0] = t[0]), (e[1] = t[1]), (e[2] = t[2]), e;\n      }\n      function X(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return Math.hypot(e, n, r);\n      }\n      function W(t, e, n) {\n        var r = new a.a(3);\n        return (r[0] = t), (r[1] = e), (r[2] = n), r;\n      }\n      function G(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), (t[2] = e[2]), t;\n      }\n      function q(t, e, n, r) {\n        return (t[0] = e), (t[1] = n), (t[2] = r), t;\n      }\n      function H(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), (t[2] = e[2] + n[2]), t\n        );\n      }\n      function V(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), (t[2] = e[2] - n[2]), t\n        );\n      }\n      function U(t, e, n) {\n        return (\n          (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), (t[2] = e[2] * n[2]), t\n        );\n      }\n      function Z(t, e, n) {\n        return (\n          (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), (t[2] = e[2] / n[2]), t\n        );\n      }\n      function K(t, e) {\n        return (\n          (t[0] = Math.ceil(e[0])),\n          (t[1] = Math.ceil(e[1])),\n          (t[2] = Math.ceil(e[2])),\n          t\n        );\n      }\n      function Q(t, e) {\n        return (\n          (t[0] = Math.floor(e[0])),\n          (t[1] = Math.floor(e[1])),\n          (t[2] = Math.floor(e[2])),\n          t\n        );\n      }\n      function $(t, e, n) {\n        return (\n          (t[0] = Math.min(e[0], n[0])),\n          (t[1] = Math.min(e[1], n[1])),\n          (t[2] = Math.min(e[2], n[2])),\n          t\n        );\n      }\n      function J(t, e, n) {\n        return (\n          (t[0] = Math.max(e[0], n[0])),\n          (t[1] = Math.max(e[1], n[1])),\n          (t[2] = Math.max(e[2], n[2])),\n          t\n        );\n      }\n      function tt(t, e) {\n        return (\n          (t[0] = Math.round(e[0])),\n          (t[1] = Math.round(e[1])),\n          (t[2] = Math.round(e[2])),\n          t\n        );\n      }\n      function et(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), (t[2] = e[2] * n), t;\n      }\n      function nt(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          t\n        );\n      }\n      function rt(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return Math.hypot(n, r, i);\n      }\n      function it(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return n * n + r * r + i * i;\n      }\n      function ot(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return e * e + n * n + r * r;\n      }\n      function at(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), (t[2] = -e[2]), t;\n      }\n      function st(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), (t[2] = 1 / e[2]), t;\n      }\n      function ut(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = n * n + r * r + i * i;\n        return (\n          o > 0 && (o = 1 / Math.sqrt(o)),\n          (t[0] = e[0] * o),\n          (t[1] = e[1] * o),\n          (t[2] = e[2] * o),\n          t\n        );\n      }\n      function ct(t, e) {\n        return t[0] * e[0] + t[1] * e[1] + t[2] * e[2];\n      }\n      function ht(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[0],\n          s = n[1],\n          u = n[2];\n        return (\n          (t[0] = i * u - o * s),\n          (t[1] = o * a - r * u),\n          (t[2] = r * s - i * a),\n          t\n        );\n      }\n      function lt(t, e, n, r) {\n        var i = e[0],\n          o = e[1],\n          a = e[2];\n        return (\n          (t[0] = i + r * (n[0] - i)),\n          (t[1] = o + r * (n[1] - o)),\n          (t[2] = a + r * (n[2] - a)),\n          t\n        );\n      }\n      function dt(t, e, n, r, i, o) {\n        var a = o * o,\n          s = a * (2 * o - 3) + 1,\n          u = a * (o - 2) + o,\n          c = a * (o - 1),\n          h = a * (3 - 2 * o);\n        return (\n          (t[0] = e[0] * s + n[0] * u + r[0] * c + i[0] * h),\n          (t[1] = e[1] * s + n[1] * u + r[1] * c + i[1] * h),\n          (t[2] = e[2] * s + n[2] * u + r[2] * c + i[2] * h),\n          t\n        );\n      }\n      function ft(t, e, n, r, i, o) {\n        var a = 1 - o,\n          s = a * a,\n          u = o * o,\n          c = s * a,\n          h = 3 * o * s,\n          l = 3 * u * a,\n          d = u * o;\n        return (\n          (t[0] = e[0] * c + n[0] * h + r[0] * l + i[0] * d),\n          (t[1] = e[1] * c + n[1] * h + r[1] * l + i[1] * d),\n          (t[2] = e[2] * c + n[2] * h + r[2] * l + i[2] * d),\n          t\n        );\n      }\n      function pt(t, e) {\n        e = e || 1;\n        var n = 2 * a.c() * Math.PI,\n          r = 2 * a.c() - 1,\n          i = Math.sqrt(1 - r * r) * e;\n        return (\n          (t[0] = Math.cos(n) * i), (t[1] = Math.sin(n) * i), (t[2] = r * e), t\n        );\n      }\n      function gt(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[3] * r + n[7] * i + n[11] * o + n[15];\n        return (\n          (a = a || 1),\n          (t[0] = (n[0] * r + n[4] * i + n[8] * o + n[12]) / a),\n          (t[1] = (n[1] * r + n[5] * i + n[9] * o + n[13]) / a),\n          (t[2] = (n[2] * r + n[6] * i + n[10] * o + n[14]) / a),\n          t\n        );\n      }\n      function yt(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2];\n        return (\n          (t[0] = r * n[0] + i * n[3] + o * n[6]),\n          (t[1] = r * n[1] + i * n[4] + o * n[7]),\n          (t[2] = r * n[2] + i * n[5] + o * n[8]),\n          t\n        );\n      }\n      function vt(t, e, n) {\n        var r = n[0],\n          i = n[1],\n          o = n[2],\n          a = n[3],\n          s = e[0],\n          u = e[1],\n          c = e[2],\n          h = i * c - o * u,\n          l = o * s - r * c,\n          d = r * u - i * s,\n          f = i * d - o * l,\n          p = o * h - r * d,\n          g = r * l - i * h,\n          y = 2 * a;\n        return (\n          (h *= y),\n          (l *= y),\n          (d *= y),\n          (f *= 2),\n          (p *= 2),\n          (g *= 2),\n          (t[0] = s + h + f),\n          (t[1] = u + l + p),\n          (t[2] = c + d + g),\n          t\n        );\n      }\n      function mt(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0]),\n          (o[1] = i[1] * Math.cos(r) - i[2] * Math.sin(r)),\n          (o[2] = i[1] * Math.sin(r) + i[2] * Math.cos(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function bt(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[2] * Math.sin(r) + i[0] * Math.cos(r)),\n          (o[1] = i[1]),\n          (o[2] = i[2] * Math.cos(r) - i[0] * Math.sin(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function xt(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0] * Math.cos(r) - i[1] * Math.sin(r)),\n          (o[1] = i[0] * Math.sin(r) + i[1] * Math.cos(r)),\n          (o[2] = i[2]),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function wt(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = t[2],\n          o = e[0],\n          a = e[1],\n          s = e[2],\n          u =\n            Math.sqrt(n * n + r * r + i * i) * Math.sqrt(o * o + a * a + s * s),\n          c = u && ct(t, e) / u;\n        return Math.acos(Math.min(Math.max(c, -1), 1));\n      }\n      function Ot(t) {\n        return (t[0] = 0), (t[1] = 0), (t[2] = 0), t;\n      }\n      function Mt(t) {\n        return \"vec3(\" + t[0] + \", \" + t[1] + \", \" + t[2] + \")\";\n      }\n      function St(t, e) {\n        return t[0] === e[0] && t[1] === e[1] && t[2] === e[2];\n      }\n      function Ct(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = t[2],\n          o = e[0],\n          s = e[1],\n          u = e[2];\n        return (\n          Math.abs(n - o) <= a.b * Math.max(1, Math.abs(n), Math.abs(o)) &&\n          Math.abs(r - s) <= a.b * Math.max(1, Math.abs(r), Math.abs(s)) &&\n          Math.abs(i - u) <= a.b * Math.max(1, Math.abs(i), Math.abs(u))\n        );\n      }\n      var jt,\n        kt = V,\n        Et = U,\n        Nt = Z,\n        Tt = rt,\n        Pt = it,\n        It = X,\n        Bt = ot,\n        At =\n          ((jt = F()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 3),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (jt[0] = t[a]),\n                (jt[1] = t[a + 1]),\n                (jt[2] = t[a + 2]),\n                i(jt, jt, o),\n                (t[a] = jt[0]),\n                (t[a + 1] = jt[1]),\n                (t[a + 2] = jt[2]);\n            return t;\n          });\n      function Lt(t, e, n) {\n        var i = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return r.fromTranslation(i, n), r.multiply(t, i, e);\n      }\n      function Dt(t, e, n) {\n        var i = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return r.fromRotation(i, n), r.multiply(t, i, e);\n      }\n      function _t(t, e, n) {\n        var i = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return r.fromScaling(i, n), r.multiply(t, i, e);\n      }\n      function Rt(t, e) {\n        for (\n          var n,\n            i,\n            o,\n            a = t ? [].concat(t) : [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            s = 0,\n            u = e.length;\n          s < u;\n          s++\n        ) {\n          var c = e[s];\n          switch (c[0]) {\n            case \"t\":\n              Lt(a, a, [c[1], c[2]]);\n              break;\n            case \"s\":\n              _t(a, a, [c[1], c[2]]);\n              break;\n            case \"r\":\n              Dt(a, a, c[1]);\n              break;\n            case \"m\":\n              (n = a), (i = a), (o = c[1]), r.multiply(n, o, i);\n          }\n        }\n        return a;\n      }\n      function Yt(t, e) {\n        return t[0] * e[1] - e[0] * t[1];\n      }\n      function Ft(t, e, n) {\n        var r = Y.angle(t, e),\n          i = Yt(t, e) >= 0;\n        return n ? (i ? 2 * Math.PI - r : r) : i ? r : 2 * Math.PI - r;\n      }\n      function zt(t, e, n) {\n        return (\n          n\n            ? ((t[0] = e[1]), (t[1] = -1 * e[0]))\n            : ((t[0] = -1 * e[1]), (t[1] = e[0])),\n          t\n        );\n      }\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"j\", function () {\n        return i;\n      }),\n        n.d(e, \"c\", function () {\n          return o;\n        }),\n        n.d(e, \"g\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        });\n      var r = n(0);\n      function i(t, e) {\n        var n = t.indexOf(e);\n        -1 !== n && t.splice(n, 1);\n      }\n      n.d(e, \"e\", function () {\n        return r.s;\n      }),\n        n.d(e, \"d\", function () {\n          return r.r;\n        }),\n        n.d(e, \"h\", function () {\n          return r.x;\n        }),\n        n.d(e, \"f\", function () {\n          return r.v;\n        }),\n        n.d(e, \"i\", function () {\n          return r.C;\n        }),\n        n.d(e, \"a\", function () {\n          return r.e;\n        }),\n        n.d(e, \"k\", function () {\n          return r.J;\n        });\n      var o = \"undefined\" != typeof window && void 0 !== window.document;\n      function a(t, e) {\n        if (t.isCanvas()) return !0;\n        for (var n = e.getParent(), r = !1; n; ) {\n          if (n === t) {\n            r = !0;\n            break;\n          }\n          n = n.getParent();\n        }\n        return r;\n      }\n      function s(t) {\n        return t.cfg.visible && t.cfg.capture;\n      }\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"a\", function () {\n          return i;\n        }),\n        n.d(e, \"c\", function () {\n          return o;\n        });\n      var r = 1e-6,\n        i = \"undefined\" != typeof Float32Array ? Float32Array : Array,\n        o = Math.random;\n      Math.PI;\n      Math.hypot ||\n        (Math.hypot = function () {\n          for (var t = 0, e = arguments.length; e--; )\n            t += arguments[e] * arguments[e];\n          return Math.sqrt(t);\n        });\n    },\n    function (t, e, n) {\n      \"use strict\";\n      function r(t, e) {\n        var n = [],\n          r = t[0],\n          i = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          u = t[5],\n          c = t[6],\n          h = t[7],\n          l = t[8],\n          d = e[0],\n          f = e[1],\n          p = e[2],\n          g = e[3],\n          y = e[4],\n          v = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          (n[0] = d * r + f * a + p * c),\n          (n[1] = d * i + f * s + p * h),\n          (n[2] = d * o + f * u + p * l),\n          (n[3] = g * r + y * a + v * c),\n          (n[4] = g * i + y * s + v * h),\n          (n[5] = g * o + y * u + v * l),\n          (n[6] = m * r + b * a + x * c),\n          (n[7] = m * i + b * s + x * h),\n          (n[8] = m * o + b * u + x * l),\n          n\n        );\n      }\n      function i(t, e) {\n        var n = [],\n          r = e[0],\n          i = e[1];\n        return (\n          (n[0] = t[0] * r + t[3] * i + t[6]),\n          (n[1] = t[1] * r + t[4] * i + t[7]),\n          n\n        );\n      }\n      function o(t) {\n        var e = [],\n          n = t[0],\n          r = t[1],\n          i = t[2],\n          o = t[3],\n          a = t[4],\n          s = t[5],\n          u = t[6],\n          c = t[7],\n          h = t[8],\n          l = h * a - s * c,\n          d = -h * o + s * u,\n          f = c * o - a * u,\n          p = n * l + r * d + i * f;\n        return p\n          ? ((p = 1 / p),\n            (e[0] = l * p),\n            (e[1] = (-h * r + i * c) * p),\n            (e[2] = (s * r - i * a) * p),\n            (e[3] = d * p),\n            (e[4] = (h * n - i * u) * p),\n            (e[5] = (-s * n + i * o) * p),\n            (e[6] = f * p),\n            (e[7] = (-c * n + r * u) * p),\n            (e[8] = (a * n - r * o) * p),\n            e)\n          : null;\n      }\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"c\", function () {\n          return i;\n        }),\n        n.d(e, \"a\", function () {\n          return o;\n        });\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return h;\n      }),\n        n.d(e, \"b\", function () {\n          return f;\n        }),\n        n.d(e, \"c\", function () {\n          return s;\n        });\n      var r = n(0),\n        i = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        o = new RegExp(\n          \"([a-z])[\" +\n            i +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            i +\n            \"]*,?[\" +\n            i +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        a = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + i + \"]*,?[\" + i + \"]*\",\n          \"ig\",\n        ),\n        s = function (t) {\n          if (!t) return null;\n          if (Object(r.m)(t)) return t;\n          var e = {\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            n = [];\n          return (\n            String(t).replace(o, function (r, i, o) {\n              var s = [],\n                u = i.toLowerCase();\n              if (\n                (o.replace(a, function (t, e) {\n                  e && s.push(+e);\n                }),\n                \"m\" === u &&\n                  s.length > 2 &&\n                  (n.push([i].concat(s.splice(0, 2))),\n                  (u = \"l\"),\n                  (i = \"m\" === i ? \"l\" : \"L\")),\n                \"o\" === u && 1 === s.length && n.push([i, s[0]]),\n                \"r\" === u)\n              )\n                n.push([i].concat(s));\n              else\n                for (\n                  ;\n                  s.length >= e[u] &&\n                  (n.push([i].concat(s.splice(0, e[u]))), e[u]);\n\n                );\n              return t;\n            }),\n            n\n          );\n        };\n      var u = function (t, e) {\n        if (t.length !== e.length) return !1;\n        var n = !0;\n        return (\n          Object(r.e)(t, function (t, r) {\n            if (t !== e[r]) return (n = !1), !1;\n          }),\n          n\n        );\n      };\n      function c(t, e, n) {\n        var r = null,\n          i = n;\n        return (\n          e < i && ((i = e), (r = \"add\")),\n          t < i && ((i = t), (r = \"del\")),\n          { type: r, min: i }\n        );\n      }\n      var h = function (t, e) {\n        var n = (function (t, e) {\n            var n,\n              r,\n              i = t.length,\n              o = e.length,\n              a = 0;\n            if (0 === i || 0 === o) return null;\n            for (var s = [], h = 0; h <= i; h++)\n              (s[h] = []), (s[h][0] = { min: h });\n            for (var l = 0; l <= o; l++) s[0][l] = { min: l };\n            for (h = 1; h <= i; h++) {\n              n = t[h - 1];\n              for (l = 1; l <= o; l++) {\n                (r = e[l - 1]), (a = u(n, r) ? 0 : 1);\n                var d = s[h - 1][l].min + 1,\n                  f = s[h][l - 1].min + 1,\n                  p = s[h - 1][l - 1].min + a;\n                s[h][l] = c(d, f, p);\n              }\n            }\n            return s;\n          })(t, e),\n          r = t.length,\n          i = e.length,\n          o = [],\n          a = 1,\n          s = 1;\n        if (n[r][i].min !== r) {\n          for (var h = 1; h <= r; h++) {\n            var l = n[h][h].min;\n            s = h;\n            for (var d = a; d <= i; d++)\n              n[h][d].min < l && ((l = n[h][d].min), (s = d));\n            (a = s),\n              n[h][a].type && o.push({ index: h - 1, type: n[h][a].type });\n          }\n          for (h = o.length - 1; h >= 0; h--)\n            (a = o[h].index),\n              \"add\" === o[h].type\n                ? t.splice(a, 0, [].concat(t[a]))\n                : t.splice(a, 1);\n        }\n        var f = i - (r = t.length);\n        if (r < i)\n          for (h = 0; h < f; h++)\n            \"z\" === t[r - 1][0] || \"Z\" === t[r - 1][0]\n              ? t.splice(r - 2, 0, t[r - 2])\n              : t.push(t[r - 1]),\n              (r += 1);\n        return t;\n      };\n      function l(t, e, n) {\n        for (\n          var r, i = [].concat(t), o = 1 / (n + 1), a = d(e)[0], s = 1;\n          s <= n;\n          s++\n        )\n          (o *= s),\n            0 === (r = Math.floor(t.length * o))\n              ? i.unshift([\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ])\n              : i.splice(r, 0, [\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ]);\n        return i;\n      }\n      function d(t) {\n        var e = [];\n        switch (t[0]) {\n          case \"M\":\n          case \"L\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"A\":\n            e.push([t[6], t[7]]);\n            break;\n          case \"Q\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"T\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"C\":\n            e.push([t[5], t[6]]), e.push([t[1], t[2]]), e.push([t[3], t[4]]);\n            break;\n          case \"S\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"H\":\n          case \"V\":\n            e.push([t[1], t[1]]);\n        }\n        return e;\n      }\n      var f = function (t, e) {\n        if (t.length <= 1) return t;\n        for (var n, r = 0; r < e.length; r++)\n          if (t[r][0] !== e[r][0])\n            switch (((n = d(t[r])), e[r][0])) {\n              case \"M\":\n                t[r] = [\"M\"].concat(n[0]);\n                break;\n              case \"L\":\n                t[r] = [\"L\"].concat(n[0]);\n                break;\n              case \"A\":\n                (t[r] = [].concat(e[r])),\n                  (t[r][6] = n[0][0]),\n                  (t[r][7] = n[0][1]);\n                break;\n              case \"Q\":\n                if (n.length < 2) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = l(n, t[r - 1], 1);\n                }\n                t[r] = [\"Q\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              case \"T\":\n                t[r] = [\"T\"].concat(n[0]);\n                break;\n              case \"C\":\n                if (n.length < 3) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = l(n, t[r - 1], 2);\n                }\n                t[r] = [\"C\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              case \"S\":\n                if (n.length < 2) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = l(n, t[r - 1], 1);\n                }\n                t[r] = [\"S\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              default:\n                t[r] = e[r];\n            }\n        return t;\n      };\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return s;\n      }),\n        n.d(e, \"b\", function () {\n          return l;\n        }),\n        n.d(e, \"c\", function () {\n          return m;\n        });\n      var r = n(0),\n        i = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi,\n        o = /[^\\s\\,]+/gi;\n      var a = function (t) {\n        var e = t || [];\n        return Object(r.m)(e)\n          ? e\n          : Object(r.x)(e)\n          ? ((e = e.match(i)),\n            Object(r.e)(e, function (t, n) {\n              if ((t = t.match(o))[0].length > 1) {\n                var i = t[0].charAt(0);\n                t.splice(1, 0, t[0].substr(1)), (t[0] = i);\n              }\n              Object(r.e)(t, function (e, n) {\n                isNaN(e) || (t[n] = +e);\n              }),\n                (e[n] = t);\n            }),\n            e)\n          : void 0;\n      };\n      function s(t, e) {\n        for (var n = [], r = 0, i = t.length; i - 2 * !e > r; r += 2) {\n          var o = [\n            { x: +t[r - 2], y: +t[r - 1] },\n            { x: +t[r], y: +t[r + 1] },\n            { x: +t[r + 2], y: +t[r + 3] },\n            { x: +t[r + 4], y: +t[r + 5] },\n          ];\n          e\n            ? r\n              ? i - 4 === r\n                ? (o[3] = { x: +t[0], y: +t[1] })\n                : i - 2 === r &&\n                  ((o[2] = { x: +t[0], y: +t[1] }),\n                  (o[3] = { x: +t[2], y: +t[3] }))\n              : (o[0] = { x: +t[i - 2], y: +t[i - 1] })\n            : i - 4 === r\n            ? (o[3] = o[2])\n            : r || (o[0] = { x: +t[r], y: +t[r + 1] }),\n            n.push([\n              \"C\",\n              (-o[0].x + 6 * o[1].x + o[2].x) / 6,\n              (-o[0].y + 6 * o[1].y + o[2].y) / 6,\n              (o[1].x + 6 * o[2].x - o[3].x) / 6,\n              (o[1].y + 6 * o[2].y - o[3].y) / 6,\n              o[2].x,\n              o[2].y,\n            ]);\n        }\n        return n;\n      }\n      var u = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        c = new RegExp(\n          \"([a-z])[\" +\n            u +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            u +\n            \"]*,?[\" +\n            u +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        h = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + u + \"]*,?[\" + u + \"]*\",\n          \"ig\",\n        );\n      function l(t) {\n        if (!t) return null;\n        if (Object(r.m)(t)) return t;\n        var e = {\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          n = [];\n        return (\n          String(t).replace(c, function (t, r, i) {\n            var o = [],\n              a = r.toLowerCase();\n            if (\n              (i.replace(h, function (t, e) {\n                e && o.push(+e);\n              }),\n              \"m\" === a &&\n                o.length > 2 &&\n                (n.push([r].concat(o.splice(0, 2))),\n                (a = \"l\"),\n                (r = \"m\" === r ? \"l\" : \"L\")),\n              \"o\" === a && 1 === o.length && n.push([r, o[0]]),\n              \"r\" === a)\n            )\n              n.push([r].concat(o));\n            else\n              for (\n                ;\n                o.length >= e[a] &&\n                (n.push([r].concat(o.splice(0, e[a]))), e[a]);\n\n              );\n            return \"\";\n          }),\n          n\n        );\n      }\n      function d(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function f(t, e) {\n        return d(t) * d(e) ? (t[0] * e[0] + t[1] * e[1]) / (d(t) * d(e)) : 1;\n      }\n      function p(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(f(t, e));\n      }\n      function g(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function y(t, e) {\n        var n = e[1],\n          i = e[2],\n          o = Object(r.D)(Object(r.H)(e[3]), 2 * Math.PI),\n          a = e[4],\n          s = e[5],\n          u = t[0],\n          c = t[1],\n          h = e[6],\n          l = e[7],\n          d = (Math.cos(o) * (u - h)) / 2 + (Math.sin(o) * (c - l)) / 2,\n          y = (-1 * Math.sin(o) * (u - h)) / 2 + (Math.cos(o) * (c - l)) / 2,\n          v = (d * d) / (n * n) + (y * y) / (i * i);\n        v > 1 && ((n *= Math.sqrt(v)), (i *= Math.sqrt(v)));\n        var m = n * n * (y * y) + i * i * (d * d),\n          b = m ? Math.sqrt((n * n * (i * i) - m) / m) : 1;\n        a === s && (b *= -1), isNaN(b) && (b = 0);\n        var x = i ? (b * n * y) / i : 0,\n          w = n ? (b * -i * d) / n : 0,\n          O = (u + h) / 2 + Math.cos(o) * x - Math.sin(o) * w,\n          M = (c + l) / 2 + Math.sin(o) * x + Math.cos(o) * w,\n          S = [(d - x) / n, (y - w) / i],\n          C = [(-1 * d - x) / n, (-1 * y - w) / i],\n          j = p([1, 0], S),\n          k = p(S, C);\n        return (\n          f(S, C) <= -1 && (k = Math.PI),\n          f(S, C) >= 1 && (k = 0),\n          0 === s && k > 0 && (k -= 2 * Math.PI),\n          1 === s && k < 0 && (k += 2 * Math.PI),\n          {\n            cx: O,\n            cy: M,\n            rx: g(t, [h, l]) ? 0 : n,\n            ry: g(t, [h, l]) ? 0 : i,\n            startAngle: j,\n            endAngle: j + k,\n            xRotation: o,\n            arcFlag: a,\n            sweepFlag: s,\n          }\n        );\n      }\n      function v(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function m(t) {\n        for (\n          var e = [],\n            n = null,\n            r = null,\n            i = null,\n            o = 0,\n            s = (t = a(t)).length,\n            u = 0;\n          u < s;\n          u++\n        ) {\n          var c = t[u];\n          r = t[u + 1];\n          var h = c[0],\n            l = {\n              command: h,\n              prePoint: n,\n              params: c,\n              startTangent: null,\n              endTangent: null,\n            };\n          switch (h) {\n            case \"M\":\n              (i = [c[1], c[2]]), (o = u);\n              break;\n            case \"A\":\n              var d = y(n, c);\n              l.arcParams = d;\n          }\n          if (\"Z\" === h) (n = i), (r = t[o + 1]);\n          else {\n            var f = c.length;\n            n = [c[f - 2], c[f - 1]];\n          }\n          r && \"Z\" === r[0] && ((r = t[o]), e[o] && (e[o].prePoint = n)),\n            (l.currentPoint = n),\n            e[o] && g(n, e[o].currentPoint) && (e[o].prePoint = l.prePoint);\n          var p = r ? [r[r.length - 2], r[r.length - 1]] : null;\n          l.nextPoint = p;\n          var m = l.prePoint;\n          if ([\"L\", \"H\", \"V\"].includes(h))\n            (l.startTangent = [m[0] - n[0], m[1] - n[1]]),\n              (l.endTangent = [n[0] - m[0], n[1] - m[1]]);\n          else if (\"Q\" === h) {\n            var b = [c[1], c[2]];\n            (l.startTangent = [m[0] - b[0], m[1] - b[1]]),\n              (l.endTangent = [n[0] - b[0], n[1] - b[1]]);\n          } else if (\"T\" === h) {\n            b = v((O = e[u - 1]).currentPoint, m);\n            \"Q\" === O.command\n              ? ((l.command = \"Q\"),\n                (l.startTangent = [m[0] - b[0], m[1] - b[1]]),\n                (l.endTangent = [n[0] - b[0], n[1] - b[1]]))\n              : ((l.command = \"TL\"),\n                (l.startTangent = [m[0] - n[0], m[1] - n[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]));\n          } else if (\"C\" === h) {\n            var x = [c[1], c[2]],\n              w = [c[3], c[4]];\n            (l.startTangent = [m[0] - x[0], m[1] - x[1]]),\n              (l.endTangent = [n[0] - w[0], n[1] - w[1]]);\n          } else if (\"S\" === h) {\n            var O;\n            (x = v((O = e[u - 1]).currentPoint, m)), (w = [c[1], c[2]]);\n            \"C\" === O.command\n              ? ((l.command = \"C\"),\n                (l.startTangent = [m[0] - x[0], m[1] - x[1]]),\n                (l.endTangent = [n[0] - w[0], n[1] - w[1]]))\n              : ((l.command = \"SQ\"),\n                (l.startTangent = [m[0] - w[0], m[1] - w[1]]),\n                (l.endTangent = [n[0] - w[0], n[1] - w[1]]));\n          } else if (\"A\" === h) {\n            var M = 0.001,\n              S = l.arcParams || {},\n              C = S.cx,\n              j = void 0 === C ? 0 : C,\n              k = S.cy,\n              E = void 0 === k ? 0 : k,\n              N = S.rx,\n              T = void 0 === N ? 0 : N,\n              P = S.ry,\n              I = void 0 === P ? 0 : P,\n              B = S.sweepFlag,\n              A = void 0 === B ? 0 : B,\n              L = S.startAngle,\n              D = void 0 === L ? 0 : L,\n              _ = S.endAngle,\n              R = void 0 === _ ? 0 : _;\n            0 === A && (M *= -1);\n            var Y = T * Math.cos(D - M) + j,\n              F = I * Math.sin(D - M) + E;\n            l.startTangent = [Y - i[0], F - i[1]];\n            var z = T * Math.cos(D + R + M) + j,\n              X = I * Math.sin(D + R - M) + E;\n            l.endTangent = [m[0] - z, m[1] - X];\n          }\n          e.push(l);\n        }\n        return e;\n      }\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return o;\n      }),\n        n.d(e, \"c\", function () {\n          return a;\n        }),\n        n.d(e, \"a\", function () {\n          return s;\n        });\n      var r = n(3),\n        i = n(12);\n      function o(t, e, n) {\n        var i = 1;\n        return (\n          Object(r.h)(t) && (i = t.split(\"\\n\").length),\n          i > 1\n            ? e * i +\n              (function (t, e) {\n                return e ? e - t : 0.14 * t;\n              })(e, n) *\n                (i - 1)\n            : e\n        );\n      }\n      function a(t, e) {\n        var n = Object(i.a)(),\n          o = 0;\n        if (Object(r.e)(t) || \"\" === t) return o;\n        if ((n.save(), (n.font = e), Object(r.h)(t) && t.includes(\"\\n\"))) {\n          var a = t.split(\"\\n\");\n          Object(r.a)(a, function (t) {\n            var e = n.measureText(t).width;\n            o < e && (o = e);\n          });\n        } else o = n.measureText(t).width;\n        return n.restore(), o;\n      }\n      function s(t) {\n        var e = t.fontSize,\n          n = t.fontFamily,\n          r = t.fontWeight;\n        return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n      }\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return a;\n        }),\n        n.d(e, \"copy\", function () {\n          return s;\n        }),\n        n.d(e, \"set\", function () {\n          return u;\n        }),\n        n.d(e, \"add\", function () {\n          return c;\n        }),\n        n.d(e, \"subtract\", function () {\n          return h;\n        }),\n        n.d(e, \"multiply\", function () {\n          return l;\n        }),\n        n.d(e, \"divide\", function () {\n          return d;\n        }),\n        n.d(e, \"ceil\", function () {\n          return f;\n        }),\n        n.d(e, \"floor\", function () {\n          return p;\n        }),\n        n.d(e, \"min\", function () {\n          return g;\n        }),\n        n.d(e, \"max\", function () {\n          return y;\n        }),\n        n.d(e, \"round\", function () {\n          return v;\n        }),\n        n.d(e, \"scale\", function () {\n          return m;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return b;\n        }),\n        n.d(e, \"distance\", function () {\n          return x;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return w;\n        }),\n        n.d(e, \"length\", function () {\n          return O;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return M;\n        }),\n        n.d(e, \"negate\", function () {\n          return S;\n        }),\n        n.d(e, \"inverse\", function () {\n          return C;\n        }),\n        n.d(e, \"normalize\", function () {\n          return j;\n        }),\n        n.d(e, \"dot\", function () {\n          return k;\n        }),\n        n.d(e, \"cross\", function () {\n          return E;\n        }),\n        n.d(e, \"lerp\", function () {\n          return N;\n        }),\n        n.d(e, \"random\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat2\", function () {\n          return P;\n        }),\n        n.d(e, \"transformMat2d\", function () {\n          return I;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return B;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return A;\n        }),\n        n.d(e, \"rotate\", function () {\n          return L;\n        }),\n        n.d(e, \"angle\", function () {\n          return D;\n        }),\n        n.d(e, \"zero\", function () {\n          return _;\n        }),\n        n.d(e, \"str\", function () {\n          return R;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return Y;\n        }),\n        n.d(e, \"equals\", function () {\n          return F;\n        }),\n        n.d(e, \"len\", function () {\n          return X;\n        }),\n        n.d(e, \"sub\", function () {\n          return W;\n        }),\n        n.d(e, \"mul\", function () {\n          return G;\n        }),\n        n.d(e, \"div\", function () {\n          return q;\n        }),\n        n.d(e, \"dist\", function () {\n          return H;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return V;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return U;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Z;\n        });\n      var r = n(4);\n      function i() {\n        var t = new r.a(2);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(2);\n        return (e[0] = t[0]), (e[1] = t[1]), e;\n      }\n      function a(t, e) {\n        var n = new r.a(2);\n        return (n[0] = t), (n[1] = e), n;\n      }\n      function s(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), t;\n      }\n      function u(t, e, n) {\n        return (t[0] = e), (t[1] = n), t;\n      }\n      function c(t, e, n) {\n        return (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), t;\n      }\n      function h(t, e, n) {\n        return (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), t;\n      }\n      function l(t, e, n) {\n        return (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), t;\n      }\n      function d(t, e, n) {\n        return (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), t;\n      }\n      function f(t, e) {\n        return (t[0] = Math.ceil(e[0])), (t[1] = Math.ceil(e[1])), t;\n      }\n      function p(t, e) {\n        return (t[0] = Math.floor(e[0])), (t[1] = Math.floor(e[1])), t;\n      }\n      function g(t, e, n) {\n        return (t[0] = Math.min(e[0], n[0])), (t[1] = Math.min(e[1], n[1])), t;\n      }\n      function y(t, e, n) {\n        return (t[0] = Math.max(e[0], n[0])), (t[1] = Math.max(e[1], n[1])), t;\n      }\n      function v(t, e) {\n        return (t[0] = Math.round(e[0])), (t[1] = Math.round(e[1])), t;\n      }\n      function m(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), t;\n      }\n      function b(t, e, n, r) {\n        return (t[0] = e[0] + n[0] * r), (t[1] = e[1] + n[1] * r), t;\n      }\n      function x(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return Math.hypot(n, r);\n      }\n      function w(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return n * n + r * r;\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1];\n        return Math.hypot(e, n);\n      }\n      function M(t) {\n        var e = t[0],\n          n = t[1];\n        return e * e + n * n;\n      }\n      function S(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), t;\n      }\n      function C(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), t;\n      }\n      function j(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = n * n + r * r;\n        return (\n          i > 0 && (i = 1 / Math.sqrt(i)),\n          (t[0] = e[0] * i),\n          (t[1] = e[1] * i),\n          t\n        );\n      }\n      function k(t, e) {\n        return t[0] * e[0] + t[1] * e[1];\n      }\n      function E(t, e, n) {\n        var r = e[0] * n[1] - e[1] * n[0];\n        return (t[0] = t[1] = 0), (t[2] = r), t;\n      }\n      function N(t, e, n, r) {\n        var i = e[0],\n          o = e[1];\n        return (t[0] = i + r * (n[0] - i)), (t[1] = o + r * (n[1] - o)), t;\n      }\n      function T(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI;\n        return (t[0] = Math.cos(n) * e), (t[1] = Math.sin(n) * e), t;\n      }\n      function P(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (t[0] = n[0] * r + n[2] * i), (t[1] = n[1] * r + n[3] * i), t;\n      }\n      function I(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[2] * i + n[4]),\n          (t[1] = n[1] * r + n[3] * i + n[5]),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[3] * i + n[6]),\n          (t[1] = n[1] * r + n[4] * i + n[7]),\n          t\n        );\n      }\n      function A(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[4] * i + n[12]),\n          (t[1] = n[1] * r + n[5] * i + n[13]),\n          t\n        );\n      }\n      function L(t, e, n, r) {\n        var i = e[0] - n[0],\n          o = e[1] - n[1],\n          a = Math.sin(r),\n          s = Math.cos(r);\n        return (t[0] = i * s - o * a + n[0]), (t[1] = i * a + o * s + n[1]), t;\n      }\n      function D(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = e[0],\n          o = e[1],\n          a = Math.sqrt(n * n + r * r) * Math.sqrt(i * i + o * o),\n          s = a && (n * i + r * o) / a;\n        return Math.acos(Math.min(Math.max(s, -1), 1));\n      }\n      function _(t) {\n        return (t[0] = 0), (t[1] = 0), t;\n      }\n      function R(t) {\n        return \"vec2(\" + t[0] + \", \" + t[1] + \")\";\n      }\n      function Y(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function F(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = e[0],\n          a = e[1];\n        return (\n          Math.abs(n - o) <= r.b * Math.max(1, Math.abs(n), Math.abs(o)) &&\n          Math.abs(i - a) <= r.b * Math.max(1, Math.abs(i), Math.abs(a))\n        );\n      }\n      var z,\n        X = O,\n        W = h,\n        G = l,\n        q = d,\n        H = x,\n        V = w,\n        U = M,\n        Z =\n          ((z = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 2),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (z[0] = t[a]),\n                (z[1] = t[a + 1]),\n                i(z, z, o),\n                (t[a] = z[0]),\n                (t[a + 1] = z[1]);\n            return t;\n          });\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t(t, e) {\n          (this.bubbles = !0),\n            (this.target = null),\n            (this.currentTarget = null),\n            (this.delegateTarget = null),\n            (this.delegateObject = null),\n            (this.defaultPrevented = !1),\n            (this.propagationStopped = !1),\n            (this.shape = null),\n            (this.fromShape = null),\n            (this.toShape = null),\n            (this.propagationPath = []),\n            (this.type = t),\n            (this.name = t),\n            (this.originalEvent = e),\n            (this.timeStamp = e.timeStamp);\n        }\n        return (\n          (t.prototype.preventDefault = function () {\n            (this.defaultPrevented = !0),\n              this.originalEvent.preventDefault &&\n                this.originalEvent.preventDefault();\n          }),\n          (t.prototype.stopPropagation = function () {\n            this.propagationStopped = !0;\n          }),\n          (t.prototype.toString = function () {\n            return \"[Event (type=\" + this.type + \")]\";\n          }),\n          (t.prototype.save = function () {}),\n          (t.prototype.restore = function () {}),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(14),\n        o = n(3),\n        a = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            n.destroyed = !1;\n            var r = n.getDefaultCfg();\n            return (n.cfg = Object(o.i)(r, e)), n;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.set = function (t, e) {\n              this.cfg[t] = e;\n            }),\n            (e.prototype.destroy = function () {\n              (this.cfg = { destroyed: !0 }), this.off(), (this.destroyed = !0);\n            }),\n            e\n          );\n        })(i.a);\n      e.a = a;\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return i;\n      });\n      var r = null;\n      function i() {\n        if (!r) {\n          var t = document.createElement(\"canvas\");\n          (t.width = 1), (t.height = 1), (r = t.getContext(\"2d\"));\n        }\n        return r;\n      }\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n(6), n(17), n(18);\n      var r = n(10);\n      n.d(e, \"Event\", function () {\n        return r.a;\n      });\n      n(11), n(21), n(19), n(20), n(22);\n      var i = n(8);\n      n.d(e, \"assembleFont\", function () {\n        return i.a;\n      });\n      n(3), n(5), n(12);\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t() {\n          this._events = {};\n        }\n        return (\n          (t.prototype.on = function (t, e, n) {\n            return (\n              this._events[t] || (this._events[t] = []),\n              this._events[t].push({ callback: e, once: !!n }),\n              this\n            );\n          }),\n          (t.prototype.once = function (t, e) {\n            return this.on(t, e, !0), this;\n          }),\n          (t.prototype.emit = function (t) {\n            for (var e = this, n = [], r = 1; r < arguments.length; r++)\n              n[r - 1] = arguments[r];\n            var i = this._events[t] || [],\n              o = this._events[\"*\"] || [],\n              a = function (r) {\n                for (var i = r.length, o = 0; o < i; o++)\n                  if (r[o]) {\n                    var a = r[o],\n                      s = a.callback;\n                    a.once &&\n                      (r.splice(o, 1),\n                      0 === r.length && delete e._events[t],\n                      i--,\n                      o--),\n                      s.apply(e, n);\n                  }\n              };\n            a(i), a(o);\n          }),\n          (t.prototype.off = function (t, e) {\n            if (t)\n              if (e) {\n                for (\n                  var n = this._events[t] || [], r = n.length, i = 0;\n                  i < r;\n                  i++\n                )\n                  n[i].callback === e && (n.splice(i, 1), r--, i--);\n                0 === n.length && delete this._events[t];\n              } else delete this._events[t];\n            else this._events = {};\n            return this;\n          }),\n          (t.prototype.getEvents = function () {\n            return this._events;\n          }),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(16),\n        a = n(3),\n        s = {};\n      var u = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.isCanvas = function () {\n            return !1;\n          }),\n          (e.prototype.getBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              o = [],\n              s = [],\n              u = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              u.length > 0\n                ? (Object(a.a)(u, function (t) {\n                    var e = t.getBBox();\n                    o.push(e.minX, e.maxX), s.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(i.B)(o)),\n                  (e = Object(i.A)(o)),\n                  (n = Object(i.B)(s)),\n                  (r = Object(i.A)(s)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getCanvasBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              o = [],\n              s = [],\n              u = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              u.length > 0\n                ? (Object(a.a)(u, function (t) {\n                    var e = t.getCanvasBBox();\n                    o.push(e.minX, e.maxX), s.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(i.B)(o)),\n                  (e = Object(i.A)(o)),\n                  (n = Object(i.B)(s)),\n                  (r = Object(i.A)(s)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getDefaultCfg = function () {\n            var e = t.prototype.getDefaultCfg.call(this);\n            return (e.children = []), e;\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            if (\n              (t.prototype.onAttrChange.call(this, e, n, r), \"matrix\" === e)\n            ) {\n              var i = this.getTotalMatrix();\n              this._applyChildrenMarix(i);\n            }\n          }),\n          (e.prototype.applyMatrix = function (e) {\n            var n = this.getTotalMatrix();\n            t.prototype.applyMatrix.call(this, e);\n            var r = this.getTotalMatrix();\n            r !== n && this._applyChildrenMarix(r);\n          }),\n          (e.prototype._applyChildrenMarix = function (t) {\n            var e = this.getChildren();\n            Object(a.a)(e, function (e) {\n              e.applyMatrix(t);\n            });\n          }),\n          (e.prototype.addShape = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n = t[0],\n              r = t[1];\n            Object(a.f)(n) ? (r = n) : (r.type = n);\n            var i = s[r.type];\n            i || ((i = Object(a.k)(r.type)), (s[r.type] = i));\n            var o = this.getShapeBase(),\n              u = new o[i](r);\n            return this.add(u), u;\n          }),\n          (e.prototype.addGroup = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n,\n              r = t[0],\n              i = t[1];\n            if (Object(a.d)(r)) n = new r(i || { parent: this });\n            else {\n              var o = r || {},\n                s = this.getGroupBase();\n              n = new s(o);\n            }\n            return this.add(n), n;\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.isCanvas() ? this : this.get(\"canvas\");\n          }),\n          (e.prototype.getShape = function (t, e, n) {\n            if (!Object(a.b)(this)) return null;\n            var r,\n              i = this.getChildren();\n            if (this.isCanvas()) r = this._findShape(i, t, e, n);\n            else {\n              var o = [t, e, 1];\n              (o = this.invertFromMatrix(o)),\n                this.isClipped(o[0], o[1]) ||\n                  (r = this._findShape(i, o[0], o[1], n));\n            }\n            return r;\n          }),\n          (e.prototype._findShape = function (t, e, n, r) {\n            for (var i = null, o = t.length - 1; o >= 0; o--) {\n              var s = t[o];\n              if (\n                (Object(a.b)(s) &&\n                  (s.isGroup()\n                    ? (i = s.getShape(e, n, r))\n                    : s.isHit(e, n) && (i = s)),\n                i)\n              )\n                break;\n            }\n            return i;\n          }),\n          (e.prototype.add = function (t) {\n            var e = this.getCanvas(),\n              n = this.getChildren(),\n              r = this.get(\"timeline\"),\n              i = t.getParent();\n            i &&\n              (function (t, e, n) {\n                void 0 === n && (n = !0),\n                  n\n                    ? e.destroy()\n                    : (e.set(\"parent\", null), e.set(\"canvas\", null)),\n                  Object(a.j)(t.getChildren(), e);\n              })(i, t, !1),\n              t.set(\"parent\", this),\n              e &&\n                (function t(e, n) {\n                  if ((e.set(\"canvas\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, e),\n              r &&\n                (function t(e, n) {\n                  if ((e.set(\"timeline\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, r),\n              n.push(t),\n              t.onCanvasChange(\"add\"),\n              this._applyElementMatrix(t);\n          }),\n          (e.prototype._applyElementMatrix = function (t) {\n            var e = this.getTotalMatrix();\n            e && t.applyMatrix(e);\n          }),\n          (e.prototype.getChildren = function () {\n            return this.get(\"children\");\n          }),\n          (e.prototype.sort = function () {\n            var t,\n              e = this.getChildren();\n            Object(a.a)(e, function (t, e) {\n              return (t._INDEX = e), t;\n            }),\n              e.sort(\n                ((t = function (t, e) {\n                  return t.get(\"zIndex\") - e.get(\"zIndex\");\n                }),\n                function (e, n) {\n                  var r = t(e, n);\n                  return 0 === r ? e._INDEX - n._INDEX : r;\n                }),\n              ),\n              this.onCanvasChange(\"sort\");\n          }),\n          (e.prototype.clear = function () {\n            if ((this.set(\"clearing\", !0), !this.destroyed)) {\n              for (var t = this.getChildren(), e = t.length - 1; e >= 0; e--)\n                t[e].destroy();\n              this.set(\"children\", []),\n                this.onCanvasChange(\"clear\"),\n                this.set(\"clearing\", !1);\n            }\n          }),\n          (e.prototype.destroy = function () {\n            this.get(\"destroyed\") ||\n              (this.clear(), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.getFirst = function () {\n            return this.getChildByIndex(0);\n          }),\n          (e.prototype.getLast = function () {\n            var t = this.getChildren();\n            return this.getChildByIndex(t.length - 1);\n          }),\n          (e.prototype.getChildByIndex = function (t) {\n            return this.getChildren()[t];\n          }),\n          (e.prototype.getCount = function () {\n            return this.getChildren().length;\n          }),\n          (e.prototype.contain = function (t) {\n            return this.getChildren().indexOf(t) > -1;\n          }),\n          (e.prototype.removeChild = function (t, e) {\n            void 0 === e && (e = !0), this.contain(t) && t.remove(e);\n          }),\n          (e.prototype.findAll = function (t) {\n            var e = [],\n              n = this.getChildren();\n            return (\n              Object(a.a)(n, function (n) {\n                t(n) && e.push(n), n.isGroup() && (e = e.concat(n.findAll(t)));\n              }),\n              e\n            );\n          }),\n          (e.prototype.find = function (t) {\n            var e = null,\n              n = this.getChildren();\n            return (\n              Object(a.a)(n, function (n) {\n                if ((t(n) ? (e = n) : n.isGroup() && (e = n.find(t)), e))\n                  return !1;\n              }),\n              e\n            );\n          }),\n          (e.prototype.findById = function (t) {\n            return this.find(function (e) {\n              return e.get(\"id\") === t;\n            });\n          }),\n          (e.prototype.findByClassName = function (t) {\n            return this.find(function (e) {\n              return e.get(\"className\") === t;\n            });\n          }),\n          (e.prototype.findAllByName = function (t) {\n            return this.findAll(function (e) {\n              return e.get(\"name\") === t;\n            });\n          }),\n          e\n        );\n      })(o.a);\n      e.a = u;\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(2),\n        a = n(3),\n        s = n(5),\n        u = n(11),\n        c = o.a.transform,\n        h = [\"zIndex\", \"capture\", \"visible\", \"type\"],\n        l = [\"repeat\"];\n      function d(t, e) {\n        var n = {},\n          r = e.attrs;\n        for (var i in t) n[i] = r[i];\n        return n;\n      }\n      function f(t, e) {\n        var n = {},\n          r = e.attr();\n        return (\n          Object(i.e)(t, function (t, e) {\n            -1 !== l.indexOf(e) || Object(i.q)(r[e], t) || (n[e] = t);\n          }),\n          n\n        );\n      }\n      function p(t, e) {\n        if (e.onFrame) return t;\n        var n = e.startTime,\n          r = e.delay,\n          o = e.duration,\n          a = Object.prototype.hasOwnProperty;\n        return (\n          Object(i.e)(t, function (t) {\n            n + r < t.startTime + t.delay + t.duration &&\n              o > t.delay &&\n              Object(i.e)(e.toAttrs, function (e, n) {\n                a.call(t.toAttrs, n) &&\n                  (delete t.toAttrs[n], delete t.fromAttrs[n]);\n              });\n          }),\n          t\n        );\n      }\n      var g = (function (t) {\n        function e(e) {\n          var n = t.call(this, e) || this;\n          n.attrs = {};\n          var r = n.getDefaultAttrs();\n          return (\n            Object(i.C)(r, e.attrs),\n            (n.attrs = r),\n            n.initAttrs(r),\n            n.initAnimate(),\n            n\n          );\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { visible: !0, capture: !0, zIndex: 0 };\n          }),\n          (e.prototype.getDefaultAttrs = function () {\n            return { matrix: this.getDefaultMatrix(), opacity: 1 };\n          }),\n          (e.prototype.onCanvasChange = function (t) {}),\n          (e.prototype.initAttrs = function (t) {}),\n          (e.prototype.initAnimate = function () {\n            this.set(\"animable\", !0), this.set(\"animating\", !1);\n          }),\n          (e.prototype.isGroup = function () {\n            return !1;\n          }),\n          (e.prototype.getParent = function () {\n            return this.get(\"parent\");\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.get(\"canvas\");\n          }),\n          (e.prototype.attr = function () {\n            for (var t, e = [], n = 0; n < arguments.length; n++)\n              e[n] = arguments[n];\n            var r = e[0],\n              o = e[1];\n            if (!r) return this.attrs;\n            if (Object(i.v)(r)) {\n              for (var a in r) this.setAttr(a, r[a]);\n              return this.afterAttrsChange(r), this;\n            }\n            return 2 === e.length\n              ? (this.setAttr(r, o),\n                this.afterAttrsChange((((t = {})[r] = o), t)),\n                this)\n              : this.attrs[r];\n          }),\n          (e.prototype.isClipped = function (t, e) {\n            var n = this.getClip();\n            return n && !n.isHit(t, e);\n          }),\n          (e.prototype.setAttr = function (t, e) {\n            var n = this.attrs[t];\n            n !== e && ((this.attrs[t] = e), this.onAttrChange(t, e, n));\n          }),\n          (e.prototype.onAttrChange = function (t, e, n) {\n            \"matrix\" === t && this.set(\"totalMatrix\", null);\n          }),\n          (e.prototype.afterAttrsChange = function (t) {\n            if (this.cfg.isClipShape) {\n              var e = this.cfg.applyTo;\n              e && e.onCanvasChange(\"clip\");\n            } else this.onCanvasChange(\"attr\");\n          }),\n          (e.prototype.show = function () {\n            return this.set(\"visible\", !0), this.onCanvasChange(\"show\"), this;\n          }),\n          (e.prototype.hide = function () {\n            return this.set(\"visible\", !1), this.onCanvasChange(\"hide\"), this;\n          }),\n          (e.prototype.setZIndex = function (t) {\n            this.set(\"zIndex\", t);\n            var e = this.getParent();\n            return e && e.sort(), this;\n          }),\n          (e.prototype.toFront = function () {\n            var t = this.getParent();\n            if (t) {\n              var e = t.getChildren(),\n                n = (this.get(\"el\"), e.indexOf(this));\n              e.splice(n, 1), e.push(this), this.onCanvasChange(\"zIndex\");\n            }\n          }),\n          (e.prototype.toBack = function () {\n            var t = this.getParent();\n            if (t) {\n              var e = t.getChildren(),\n                n = (this.get(\"el\"), e.indexOf(this));\n              e.splice(n, 1), e.unshift(this), this.onCanvasChange(\"zIndex\");\n            }\n          }),\n          (e.prototype.remove = function (t) {\n            void 0 === t && (t = !0);\n            var e = this.getParent();\n            e\n              ? (Object(a.j)(e.getChildren(), this),\n                e.get(\"clearing\") || this.onCanvasChange(\"remove\"))\n              : this.onCanvasChange(\"remove\"),\n              t && this.destroy();\n          }),\n          (e.prototype.resetMatrix = function () {\n            this.attr(\"matrix\", this.getDefaultMatrix()),\n              this.onCanvasChange(\"matrix\");\n          }),\n          (e.prototype.getMatrix = function () {\n            return this.attr(\"matrix\");\n          }),\n          (e.prototype.setMatrix = function (t) {\n            this.attr(\"matrix\", t), this.onCanvasChange(\"matrix\");\n          }),\n          (e.prototype.getTotalMatrix = function () {\n            var t = this.cfg.totalMatrix;\n            if (!t) {\n              var e = this.attr(\"matrix\"),\n                n = this.cfg.parentMatrix;\n              (t = n && e ? Object(s.b)(n, e) : e || n),\n                this.set(\"totalMatrix\", t);\n            }\n            return t;\n          }),\n          (e.prototype.applyMatrix = function (t) {\n            var e = this.attr(\"matrix\"),\n              n = null;\n            (n = t && e ? Object(s.b)(t, e) : e || t),\n              this.set(\"totalMatrix\", n),\n              this.set(\"parentMatrix\", t);\n          }),\n          (e.prototype.getDefaultMatrix = function () {\n            return null;\n          }),\n          (e.prototype.applyToMatrix = function (t) {\n            var e = this.attr(\"matrix\");\n            return e ? Object(s.c)(e, t) : t;\n          }),\n          (e.prototype.invertFromMatrix = function (t) {\n            var e = this.attr(\"matrix\");\n            if (e) {\n              var n = Object(s.a)(e);\n              if (n) return Object(s.c)(n, t);\n            }\n            return t;\n          }),\n          (e.prototype.setClip = function (t) {\n            var e = this.getCanvas(),\n              n = null;\n            if (t) {\n              var r = this.getShapeBase()[Object(i.J)(t.type)];\n              r &&\n                (n = new r({\n                  type: t.type,\n                  isClipShape: !0,\n                  applyTo: this,\n                  attrs: t.attrs,\n                  canvas: e,\n                }));\n            }\n            return this.set(\"clipShape\", n), this.onCanvasChange(\"clip\"), n;\n          }),\n          (e.prototype.getClip = function () {\n            var t = this.cfg.clipShape;\n            return t || null;\n          }),\n          (e.prototype.clone = function () {\n            var t = this,\n              e = this.attrs,\n              n = {};\n            Object(i.e)(e, function (t, r) {\n              Object(i.m)(e[r])\n                ? (n[r] = (function (t) {\n                    for (var e = [], n = 0; n < t.length; n++)\n                      Object(i.m)(t[n])\n                        ? e.push([].concat(t[n]))\n                        : e.push(t[n]);\n                    return e;\n                  })(e[r]))\n                : (n[r] = e[r]);\n            });\n            var r = new (0, this.constructor)({ attrs: n });\n            return (\n              Object(i.e)(h, function (e) {\n                r.set(e, t.get(e));\n              }),\n              r\n            );\n          }),\n          (e.prototype.destroy = function () {\n            this.destroyed ||\n              ((this.attrs = {}), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.isAnimatePaused = function () {\n            return this.get(\"_pause\").isPaused;\n          }),\n          (e.prototype.animate = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            if (this.get(\"timeline\") || this.get(\"canvas\")) {\n              this.set(\"animating\", !0);\n              var n = this.get(\"timeline\");\n              n ||\n                ((n = this.get(\"canvas\").get(\"timeline\")),\n                this.set(\"timeline\", n));\n              var r = this.get(\"animations\") || [];\n              n.timer || n.initTimer();\n              var o,\n                a,\n                s,\n                u,\n                c,\n                h = t[0],\n                l = t[1],\n                g = t[2],\n                y = void 0 === g ? \"easeLinear\" : g,\n                v = t[3],\n                m = void 0 === v ? i.E : v,\n                b = t[4],\n                x = void 0 === b ? 0 : b;\n              Object(i.r)(h)\n                ? ((o = h), (h = {}))\n                : Object(i.v)(h) &&\n                  h.onFrame &&\n                  ((o = h.onFrame), (a = h.repeat)),\n                Object(i.v)(l)\n                  ? ((l = (c = l).duration),\n                    (y = c.easing || \"easeLinear\"),\n                    (x = c.delay || 0),\n                    (a = c.repeat || a || !1),\n                    (m = c.callback || i.E),\n                    (s = c.pauseCallback || i.E),\n                    (u = c.resumeCallback || i.E))\n                  : (Object(i.t)(m) && ((x = m), (m = null)),\n                    Object(i.r)(y)\n                      ? ((m = y), (y = \"easeLinear\"))\n                      : (y = y || \"easeLinear\"));\n              var w = f(h, this),\n                O = {\n                  fromAttrs: d(w, this),\n                  toAttrs: w,\n                  duration: l,\n                  easing: y,\n                  repeat: a,\n                  callback: m,\n                  pauseCallback: s,\n                  resumeCallback: u,\n                  delay: x,\n                  startTime: n.getTime(),\n                  id: Object(i.I)(),\n                  onFrame: o,\n                  pathFormatted: !1,\n                };\n              r.length > 0 ? (r = p(r, O)) : n.addAnimator(this),\n                r.push(O),\n                this.set(\"animations\", r),\n                this.set(\"_pause\", { isPaused: !1 });\n            }\n          }),\n          (e.prototype.stopAnimate = function (t) {\n            var e = this;\n            void 0 === t && (t = !0);\n            var n = this.get(\"animations\");\n            Object(i.e)(n, function (n) {\n              t && (n.onFrame ? e.attr(n.onFrame(1)) : e.attr(n.toAttrs)),\n                n.callback && n.callback();\n            }),\n              this.set(\"animating\", !1),\n              this.set(\"animations\", []);\n          }),\n          (e.prototype.pauseAnimate = function () {\n            var t = this.get(\"timeline\"),\n              e = this.get(\"animations\"),\n              n = t.getTime();\n            return (\n              Object(i.e)(e, function (t) {\n                (t._paused = !0),\n                  (t._pauseTime = n),\n                  t.pauseCallback && t.pauseCallback();\n              }),\n              this.set(\"_pause\", { isPaused: !0, pauseTime: n }),\n              this\n            );\n          }),\n          (e.prototype.resumeAnimate = function () {\n            var t = this.get(\"timeline\").getTime(),\n              e = this.get(\"animations\"),\n              n = this.get(\"_pause\").pauseTime;\n            return (\n              Object(i.e)(e, function (e) {\n                (e.startTime = e.startTime + (t - n)),\n                  (e._paused = !1),\n                  (e._pauseTime = null),\n                  e.resumeCallback && e.resumeCallback();\n              }),\n              this.set(\"_pause\", { isPaused: !1 }),\n              this.set(\"animations\", e),\n              this\n            );\n          }),\n          (e.prototype.emitDelegation = function (t, e) {\n            var n,\n              r = this,\n              o = e.propagationPath;\n            this.getEvents();\n            \"mouseenter\" === t\n              ? (n = e.fromShape)\n              : \"mouseleave\" === t && (n = e.toShape);\n            for (\n              var s = function (t) {\n                  var s = o[t],\n                    c = s.get(\"name\");\n                  if (c) {\n                    if (\n                      (s.isGroup() || (s.isCanvas && s.isCanvas())) &&\n                      n &&\n                      Object(a.g)(s, n)\n                    )\n                      return \"break\";\n                    Object(i.m)(c)\n                      ? Object(i.e)(c, function (t) {\n                          r.emitDelegateEvent(s, t, e);\n                        })\n                      : u.emitDelegateEvent(s, c, e);\n                  }\n                },\n                u = this,\n                c = 0;\n              c < o.length;\n              c++\n            ) {\n              if (\"break\" === s(c)) break;\n            }\n          }),\n          (e.prototype.emitDelegateEvent = function (t, e, n) {\n            var r = this.getEvents(),\n              i = e + \":\" + n.type;\n            (r[i] || r[\"*\"]) &&\n              ((n.name = i),\n              (n.currentTarget = t),\n              (n.delegateTarget = this),\n              (n.delegateObject = t.get(\"delegateObject\")),\n              this.emit(i, n));\n          }),\n          (e.prototype.translate = function (t, e) {\n            void 0 === t && (t = 0), void 0 === e && (e = 0);\n            var n = this.getMatrix(),\n              r = c(n, [[\"t\", t, e]]);\n            return this.setMatrix(r), this;\n          }),\n          (e.prototype.move = function (t, e) {\n            var n = this.attr(\"x\") || 0,\n              r = this.attr(\"y\") || 0;\n            return this.translate(t - n, e - r), this;\n          }),\n          (e.prototype.moveTo = function (t, e) {\n            return this.move(t, e);\n          }),\n          (e.prototype.scale = function (t, e) {\n            var n = this.getMatrix(),\n              r = c(n, [[\"s\", t, e || t]]);\n            return this.setMatrix(r), this;\n          }),\n          (e.prototype.rotate = function (t) {\n            var e = this.getMatrix(),\n              n = c(e, [[\"r\", t]]);\n            return this.setMatrix(n), this;\n          }),\n          (e.prototype.rotateAtStart = function (t) {\n            var e = this.attr(),\n              n = e.x,\n              r = e.y,\n              i = this.getMatrix(),\n              o = c(i, [\n                [\"t\", -n, -r],\n                [\"r\", t],\n                [\"t\", n, r],\n              ]);\n            return this.setMatrix(o), this;\n          }),\n          (e.prototype.rotateAtPoint = function (t, e, n) {\n            var r = this.getMatrix(),\n              i = c(r, [\n                [\"t\", -t, -e],\n                [\"r\", n],\n                [\"t\", t, e],\n              ]);\n            return this.setMatrix(i), this;\n          }),\n          e\n        );\n      })(u.a);\n      e.a = g;\n    },\n    function (t, e) {},\n    function (t, e) {},\n    function (t, e, n) {\n      \"use strict\";\n      var r = n(1);\n      !(function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        Object(r.c)(e, t),\n          (e.prototype.isGroup = function () {\n            return !0;\n          }),\n          (e.prototype.isEntityGroup = function () {\n            return !1;\n          }),\n          (e.prototype.clone = function () {\n            for (\n              var e = t.prototype.clone.call(this),\n                n = this.getChildren(),\n                r = 0;\n              r < n.length;\n              r++\n            ) {\n              var i = n[r];\n              e.add(i.clone());\n            }\n            return e;\n          });\n      })(n(15).a);\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(16),\n        o = n(5);\n      !(function (t) {\n        function e(e) {\n          return t.call(this, e) || this;\n        }\n        Object(r.c)(e, t),\n          (e.prototype._isInBBox = function (t, e) {\n            var n = this.getBBox();\n            return n.minX <= t && n.maxX >= t && n.minY <= e && n.maxY >= e;\n          }),\n          (e.prototype.afterAttrsChange = function (e) {\n            t.prototype.afterAttrsChange.call(this, e), this.clearCacheBBox();\n          }),\n          (e.prototype.getBBox = function () {\n            var t = this.cfg.bbox;\n            return t || ((t = this.calculateBBox()), this.set(\"bbox\", t)), t;\n          }),\n          (e.prototype.getCanvasBBox = function () {\n            var t = this.cfg.canvasBBox;\n            return (\n              t ||\n                ((t = this.calculateCanvasBBox()), this.set(\"canvasBBox\", t)),\n              t\n            );\n          }),\n          (e.prototype.applyMatrix = function (e) {\n            t.prototype.applyMatrix.call(this, e), this.set(\"canvasBBox\", null);\n          }),\n          (e.prototype.calculateCanvasBBox = function () {\n            var t = this.getBBox(),\n              e = this.getTotalMatrix(),\n              n = t.minX,\n              r = t.minY,\n              i = t.maxX,\n              a = t.maxY;\n            if (e) {\n              var s = Object(o.c)(e, [t.minX, t.minY]),\n                u = Object(o.c)(e, [t.maxX, t.minY]),\n                c = Object(o.c)(e, [t.minX, t.maxY]),\n                h = Object(o.c)(e, [t.maxX, t.maxY]);\n              (n = Math.min(s[0], u[0], c[0], h[0])),\n                (i = Math.max(s[0], u[0], c[0], h[0])),\n                (r = Math.min(s[1], u[1], c[1], h[1])),\n                (a = Math.max(s[1], u[1], c[1], h[1]));\n            }\n            var l = this.attrs;\n            if (l.shadowColor) {\n              var d = l.shadowBlur,\n                f = void 0 === d ? 0 : d,\n                p = l.shadowOffsetX,\n                g = void 0 === p ? 0 : p,\n                y = l.shadowOffsetY,\n                v = void 0 === y ? 0 : y,\n                m = n - f + g,\n                b = i + f + g,\n                x = r - f + v,\n                w = a + f + v;\n              (n = Math.min(n, m)),\n                (i = Math.max(i, b)),\n                (r = Math.min(r, x)),\n                (a = Math.max(a, w));\n            }\n            return {\n              x: n,\n              y: r,\n              minX: n,\n              minY: r,\n              maxX: i,\n              maxY: a,\n              width: i - n,\n              height: a - r,\n            };\n          }),\n          (e.prototype.clearCacheBBox = function () {\n            this.set(\"bbox\", null), this.set(\"canvasBBox\", null);\n          }),\n          (e.prototype.isClipShape = function () {\n            return this.get(\"isClipShape\");\n          }),\n          (e.prototype.isInShape = function (t, e) {\n            return !1;\n          }),\n          (e.prototype.isOnlyHitBox = function () {\n            return !1;\n          }),\n          (e.prototype.isHit = function (t, e) {\n            var n = this.get(\"startArrowShape\"),\n              r = this.get(\"endArrowShape\"),\n              i = [t, e, 1],\n              o = (i = this.invertFromMatrix(i))[0],\n              a = i[1],\n              s = this._isInBBox(o, a);\n            if (this.isOnlyHitBox()) return s;\n            if (s && !this.isClipped(o, a)) {\n              if (this.isInShape(o, a)) return !0;\n              if (n && n.isHit(o, a)) return !0;\n              if (r && r.isHit(o, a)) return !0;\n            }\n            return !1;\n          });\n      })(i.a);\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = {};\n      n.r(r),\n        n.d(r, \"easeLinear\", function () {\n          return k;\n        }),\n        n.d(r, \"easeQuad\", function () {\n          return T;\n        }),\n        n.d(r, \"easeQuadIn\", function () {\n          return E;\n        }),\n        n.d(r, \"easeQuadOut\", function () {\n          return N;\n        }),\n        n.d(r, \"easeQuadInOut\", function () {\n          return T;\n        }),\n        n.d(r, \"easeCubic\", function () {\n          return B;\n        }),\n        n.d(r, \"easeCubicIn\", function () {\n          return P;\n        }),\n        n.d(r, \"easeCubicOut\", function () {\n          return I;\n        }),\n        n.d(r, \"easeCubicInOut\", function () {\n          return B;\n        }),\n        n.d(r, \"easePoly\", function () {\n          return D;\n        }),\n        n.d(r, \"easePolyIn\", function () {\n          return A;\n        }),\n        n.d(r, \"easePolyOut\", function () {\n          return L;\n        }),\n        n.d(r, \"easePolyInOut\", function () {\n          return D;\n        }),\n        n.d(r, \"easeSin\", function () {\n          return z;\n        }),\n        n.d(r, \"easeSinIn\", function () {\n          return Y;\n        }),\n        n.d(r, \"easeSinOut\", function () {\n          return F;\n        }),\n        n.d(r, \"easeSinInOut\", function () {\n          return z;\n        }),\n        n.d(r, \"easeExp\", function () {\n          return q;\n        }),\n        n.d(r, \"easeExpIn\", function () {\n          return W;\n        }),\n        n.d(r, \"easeExpOut\", function () {\n          return G;\n        }),\n        n.d(r, \"easeExpInOut\", function () {\n          return q;\n        }),\n        n.d(r, \"easeCircle\", function () {\n          return U;\n        }),\n        n.d(r, \"easeCircleIn\", function () {\n          return H;\n        }),\n        n.d(r, \"easeCircleOut\", function () {\n          return V;\n        }),\n        n.d(r, \"easeCircleInOut\", function () {\n          return U;\n        }),\n        n.d(r, \"easeBounce\", function () {\n          return Q;\n        }),\n        n.d(r, \"easeBounceIn\", function () {\n          return K;\n        }),\n        n.d(r, \"easeBounceOut\", function () {\n          return Q;\n        }),\n        n.d(r, \"easeBounceInOut\", function () {\n          return $;\n        }),\n        n.d(r, \"easeBack\", function () {\n          return et;\n        }),\n        n.d(r, \"easeBackIn\", function () {\n          return J;\n        }),\n        n.d(r, \"easeBackOut\", function () {\n          return tt;\n        }),\n        n.d(r, \"easeBackInOut\", function () {\n          return et;\n        }),\n        n.d(r, \"easeElastic\", function () {\n          return it;\n        }),\n        n.d(r, \"easeElasticIn\", function () {\n          return rt;\n        }),\n        n.d(r, \"easeElasticOut\", function () {\n          return it;\n        }),\n        n.d(r, \"easeElasticInOut\", function () {\n          return ot;\n        });\n      var i = n(1),\n        o = n(24),\n        a = n(15),\n        s = n(3),\n        u = n(0);\n      function c(t) {\n        return (c =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var h,\n        l,\n        d = 0,\n        f = 0,\n        p = 0,\n        g = 0,\n        y = 0,\n        v = 0,\n        m =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : c(performance)) && performance.now\n            ? performance\n            : Date,\n        b =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : c(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function x() {\n        return y || (b(w), (y = m.now() + v));\n      }\n      function w() {\n        y = 0;\n      }\n      function O() {\n        this._call = this._time = this._next = null;\n      }\n      function M(t, e, n) {\n        var r = new O();\n        return r.restart(t, e, n), r;\n      }\n      function S() {\n        (y = (g = m.now()) + v), (d = f = 0);\n        try {\n          !(function () {\n            x(), ++d;\n            for (var t, e = h; e; )\n              (t = y - e._time) >= 0 && e._call.call(null, t), (e = e._next);\n            --d;\n          })();\n        } finally {\n          (d = 0),\n            (function () {\n              var t,\n                e,\n                n = h,\n                r = 1 / 0;\n              for (; n; )\n                n._call\n                  ? (r > n._time && (r = n._time), (t = n), (n = n._next))\n                  : ((e = n._next),\n                    (n._next = null),\n                    (n = t ? (t._next = e) : (h = e)));\n              (l = t), j(r);\n            })(),\n            (y = 0);\n        }\n      }\n      function C() {\n        var t = m.now(),\n          e = t - g;\n        e > 1e3 && ((v -= e), (g = t));\n      }\n      function j(t) {\n        d ||\n          (f && (f = clearTimeout(f)),\n          t - y > 24\n            ? (t < 1 / 0 && (f = setTimeout(S, t - m.now() - v)),\n              p && (p = clearInterval(p)))\n            : (p || ((g = m.now()), (p = setInterval(C, 1e3))), (d = 1), b(S)));\n      }\n      function k(t) {\n        return +t;\n      }\n      function E(t) {\n        return t * t;\n      }\n      function N(t) {\n        return t * (2 - t);\n      }\n      function T(t) {\n        return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n      }\n      function P(t) {\n        return t * t * t;\n      }\n      function I(t) {\n        return --t * t * t + 1;\n      }\n      function B(t) {\n        return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n      }\n      O.prototype = M.prototype = {\n        constructor: O,\n        restart: function (t, e, n) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (n = (null == n ? x() : +n) + (null == e ? 0 : +e)),\n            this._next ||\n              l === this ||\n              (l ? (l._next = this) : (h = this), (l = this)),\n            (this._call = t),\n            (this._time = n),\n            j();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), j());\n        },\n      };\n      var A = (function t(e) {\n          function n(t) {\n            return Math.pow(t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        L = (function t(e) {\n          function n(t) {\n            return 1 - Math.pow(1 - t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        D = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2\n            );\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        _ = Math.PI,\n        R = _ / 2;\n      function Y(t) {\n        return 1 == +t ? 1 : 1 - Math.cos(t * R);\n      }\n      function F(t) {\n        return Math.sin(t * R);\n      }\n      function z(t) {\n        return (1 - Math.cos(_ * t)) / 2;\n      }\n      function X(t) {\n        return 1.0009775171065494 * (Math.pow(2, -10 * t) - 0.0009765625);\n      }\n      function W(t) {\n        return X(1 - +t);\n      }\n      function G(t) {\n        return 1 - X(t);\n      }\n      function q(t) {\n        return ((t *= 2) <= 1 ? X(1 - t) : 2 - X(t - 1)) / 2;\n      }\n      function H(t) {\n        return 1 - Math.sqrt(1 - t * t);\n      }\n      function V(t) {\n        return Math.sqrt(1 - --t * t);\n      }\n      function U(t) {\n        return (\n          ((t *= 2) <= 1\n            ? 1 - Math.sqrt(1 - t * t)\n            : Math.sqrt(1 - (t -= 2) * t) + 1) / 2\n        );\n      }\n      var Z = 7.5625;\n      function K(t) {\n        return 1 - Q(1 - t);\n      }\n      function Q(t) {\n        return (t = +t) < 4 / 11\n          ? Z * t * t\n          : t < 8 / 11\n          ? Z * (t -= 6 / 11) * t + 3 / 4\n          : t < 10 / 11\n          ? Z * (t -= 9 / 11) * t + 15 / 16\n          : Z * (t -= 21 / 22) * t + 63 / 64;\n      }\n      function $(t) {\n        return ((t *= 2) <= 1 ? 1 - Q(1 - t) : Q(t - 1) + 1) / 2;\n      }\n      var J = (function t(e) {\n          function n(t) {\n            return (t = +t) * t * (e * (t - 1) + t);\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        tt = (function t(e) {\n          function n(t) {\n            return --t * t * ((t + 1) * e + t) + 1;\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        et = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) < 1\n                ? t * t * ((e + 1) * t - e)\n                : (t -= 2) * t * ((e + 1) * t + e) + 2) / 2\n            );\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        nt = 2 * Math.PI,\n        rt = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= nt);\n          function i(t) {\n            return e * X(-(--t)) * Math.sin((r - t) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * nt);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        it = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= nt);\n          function i(t) {\n            return 1 - e * X((t = +t)) * Math.sin((t + r) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * nt);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        ot = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= nt);\n          function i(t) {\n            return (\n              ((t = 2 * t - 1) < 0\n                ? e * X(-t) * Math.sin((r - t) / n)\n                : 2 - e * X(t) * Math.sin((r + t) / n)) / 2\n            );\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * nt);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        at = function (t, e, n) {\n          (t.prototype = e.prototype = n), (n.constructor = t);\n        };\n      function st(t, e) {\n        var n = Object.create(t.prototype);\n        for (var r in e) n[r] = e[r];\n        return n;\n      }\n      function ut() {}\n      var ct = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n        ht = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n        lt = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n        dt = /^#([0-9a-f]{3,8})$/,\n        ft = new RegExp(\"^rgb\\\\(\" + [ct, ct, ct] + \"\\\\)$\"),\n        pt = new RegExp(\"^rgb\\\\(\" + [lt, lt, lt] + \"\\\\)$\"),\n        gt = new RegExp(\"^rgba\\\\(\" + [ct, ct, ct, ht] + \"\\\\)$\"),\n        yt = new RegExp(\"^rgba\\\\(\" + [lt, lt, lt, ht] + \"\\\\)$\"),\n        vt = new RegExp(\"^hsl\\\\(\" + [ht, lt, lt] + \"\\\\)$\"),\n        mt = new RegExp(\"^hsla\\\\(\" + [ht, lt, lt, ht] + \"\\\\)$\"),\n        bt = {\n          aliceblue: 15792383,\n          antiquewhite: 16444375,\n          aqua: 65535,\n          aquamarine: 8388564,\n          azure: 15794175,\n          beige: 16119260,\n          bisque: 16770244,\n          black: 0,\n          blanchedalmond: 16772045,\n          blue: 255,\n          blueviolet: 9055202,\n          brown: 10824234,\n          burlywood: 14596231,\n          cadetblue: 6266528,\n          chartreuse: 8388352,\n          chocolate: 13789470,\n          coral: 16744272,\n          cornflowerblue: 6591981,\n          cornsilk: 16775388,\n          crimson: 14423100,\n          cyan: 65535,\n          darkblue: 139,\n          darkcyan: 35723,\n          darkgoldenrod: 12092939,\n          darkgray: 11119017,\n          darkgreen: 25600,\n          darkgrey: 11119017,\n          darkkhaki: 12433259,\n          darkmagenta: 9109643,\n          darkolivegreen: 5597999,\n          darkorange: 16747520,\n          darkorchid: 10040012,\n          darkred: 9109504,\n          darksalmon: 15308410,\n          darkseagreen: 9419919,\n          darkslateblue: 4734347,\n          darkslategray: 3100495,\n          darkslategrey: 3100495,\n          darkturquoise: 52945,\n          darkviolet: 9699539,\n          deeppink: 16716947,\n          deepskyblue: 49151,\n          dimgray: 6908265,\n          dimgrey: 6908265,\n          dodgerblue: 2003199,\n          firebrick: 11674146,\n          floralwhite: 16775920,\n          forestgreen: 2263842,\n          fuchsia: 16711935,\n          gainsboro: 14474460,\n          ghostwhite: 16316671,\n          gold: 16766720,\n          goldenrod: 14329120,\n          gray: 8421504,\n          green: 32768,\n          greenyellow: 11403055,\n          grey: 8421504,\n          honeydew: 15794160,\n          hotpink: 16738740,\n          indianred: 13458524,\n          indigo: 4915330,\n          ivory: 16777200,\n          khaki: 15787660,\n          lavender: 15132410,\n          lavenderblush: 16773365,\n          lawngreen: 8190976,\n          lemonchiffon: 16775885,\n          lightblue: 11393254,\n          lightcoral: 15761536,\n          lightcyan: 14745599,\n          lightgoldenrodyellow: 16448210,\n          lightgray: 13882323,\n          lightgreen: 9498256,\n          lightgrey: 13882323,\n          lightpink: 16758465,\n          lightsalmon: 16752762,\n          lightseagreen: 2142890,\n          lightskyblue: 8900346,\n          lightslategray: 7833753,\n          lightslategrey: 7833753,\n          lightsteelblue: 11584734,\n          lightyellow: 16777184,\n          lime: 65280,\n          limegreen: 3329330,\n          linen: 16445670,\n          magenta: 16711935,\n          maroon: 8388608,\n          mediumaquamarine: 6737322,\n          mediumblue: 205,\n          mediumorchid: 12211667,\n          mediumpurple: 9662683,\n          mediumseagreen: 3978097,\n          mediumslateblue: 8087790,\n          mediumspringgreen: 64154,\n          mediumturquoise: 4772300,\n          mediumvioletred: 13047173,\n          midnightblue: 1644912,\n          mintcream: 16121850,\n          mistyrose: 16770273,\n          moccasin: 16770229,\n          navajowhite: 16768685,\n          navy: 128,\n          oldlace: 16643558,\n          olive: 8421376,\n          olivedrab: 7048739,\n          orange: 16753920,\n          orangered: 16729344,\n          orchid: 14315734,\n          palegoldenrod: 15657130,\n          palegreen: 10025880,\n          paleturquoise: 11529966,\n          palevioletred: 14381203,\n          papayawhip: 16773077,\n          peachpuff: 16767673,\n          peru: 13468991,\n          pink: 16761035,\n          plum: 14524637,\n          powderblue: 11591910,\n          purple: 8388736,\n          rebeccapurple: 6697881,\n          red: 16711680,\n          rosybrown: 12357519,\n          royalblue: 4286945,\n          saddlebrown: 9127187,\n          salmon: 16416882,\n          sandybrown: 16032864,\n          seagreen: 3050327,\n          seashell: 16774638,\n          sienna: 10506797,\n          silver: 12632256,\n          skyblue: 8900331,\n          slateblue: 6970061,\n          slategray: 7372944,\n          slategrey: 7372944,\n          snow: 16775930,\n          springgreen: 65407,\n          steelblue: 4620980,\n          tan: 13808780,\n          teal: 32896,\n          thistle: 14204888,\n          tomato: 16737095,\n          turquoise: 4251856,\n          violet: 15631086,\n          wheat: 16113331,\n          white: 16777215,\n          whitesmoke: 16119285,\n          yellow: 16776960,\n          yellowgreen: 10145074,\n        };\n      function xt() {\n        return this.rgb().formatHex();\n      }\n      function wt() {\n        return this.rgb().formatRgb();\n      }\n      function Ot(t) {\n        var e, n;\n        return (\n          (t = (t + \"\").trim().toLowerCase()),\n          (e = dt.exec(t))\n            ? ((n = e[1].length),\n              (e = parseInt(e[1], 16)),\n              6 === n\n                ? Mt(e)\n                : 3 === n\n                ? new kt(\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    ((15 & e) << 4) | (15 & e),\n                    1,\n                  )\n                : 8 === n\n                ? St(\n                    (e >> 24) & 255,\n                    (e >> 16) & 255,\n                    (e >> 8) & 255,\n                    (255 & e) / 255,\n                  )\n                : 4 === n\n                ? St(\n                    ((e >> 12) & 15) | ((e >> 8) & 240),\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    (((15 & e) << 4) | (15 & e)) / 255,\n                  )\n                : null)\n            : (e = ft.exec(t))\n            ? new kt(e[1], e[2], e[3], 1)\n            : (e = pt.exec(t))\n            ? new kt(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                1,\n              )\n            : (e = gt.exec(t))\n            ? St(e[1], e[2], e[3], e[4])\n            : (e = yt.exec(t))\n            ? St(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                e[4],\n              )\n            : (e = vt.exec(t))\n            ? Pt(e[1], e[2] / 100, e[3] / 100, 1)\n            : (e = mt.exec(t))\n            ? Pt(e[1], e[2] / 100, e[3] / 100, e[4])\n            : bt.hasOwnProperty(t)\n            ? Mt(bt[t])\n            : \"transparent\" === t\n            ? new kt(NaN, NaN, NaN, 0)\n            : null\n        );\n      }\n      function Mt(t) {\n        return new kt((t >> 16) & 255, (t >> 8) & 255, 255 & t, 1);\n      }\n      function St(t, e, n, r) {\n        return r <= 0 && (t = e = n = NaN), new kt(t, e, n, r);\n      }\n      function Ct(t) {\n        return (\n          t instanceof ut || (t = Ot(t)),\n          t ? new kt((t = t.rgb()).r, t.g, t.b, t.opacity) : new kt()\n        );\n      }\n      function jt(t, e, n, r) {\n        return 1 === arguments.length\n          ? Ct(t)\n          : new kt(t, e, n, null == r ? 1 : r);\n      }\n      function kt(t, e, n, r) {\n        (this.r = +t), (this.g = +e), (this.b = +n), (this.opacity = +r);\n      }\n      function Et() {\n        return \"#\" + Tt(this.r) + Tt(this.g) + Tt(this.b);\n      }\n      function Nt() {\n        var t = this.opacity;\n        return (\n          (1 === (t = isNaN(t) ? 1 : Math.max(0, Math.min(1, t)))\n            ? \"rgb(\"\n            : \"rgba(\") +\n          Math.max(0, Math.min(255, Math.round(this.r) || 0)) +\n          \", \" +\n          Math.max(0, Math.min(255, Math.round(this.g) || 0)) +\n          \", \" +\n          Math.max(0, Math.min(255, Math.round(this.b) || 0)) +\n          (1 === t ? \")\" : \", \" + t + \")\")\n        );\n      }\n      function Tt(t) {\n        return (\n          ((t = Math.max(0, Math.min(255, Math.round(t) || 0))) < 16\n            ? \"0\"\n            : \"\") + t.toString(16)\n        );\n      }\n      function Pt(t, e, n, r) {\n        return (\n          r <= 0\n            ? (t = e = n = NaN)\n            : n <= 0 || n >= 1\n            ? (t = e = NaN)\n            : e <= 0 && (t = NaN),\n          new Bt(t, e, n, r)\n        );\n      }\n      function It(t) {\n        if (t instanceof Bt) return new Bt(t.h, t.s, t.l, t.opacity);\n        if ((t instanceof ut || (t = Ot(t)), !t)) return new Bt();\n        if (t instanceof Bt) return t;\n        var e = (t = t.rgb()).r / 255,\n          n = t.g / 255,\n          r = t.b / 255,\n          i = Math.min(e, n, r),\n          o = Math.max(e, n, r),\n          a = NaN,\n          s = o - i,\n          u = (o + i) / 2;\n        return (\n          s\n            ? ((a =\n                e === o\n                  ? (n - r) / s + 6 * (n < r)\n                  : n === o\n                  ? (r - e) / s + 2\n                  : (e - n) / s + 4),\n              (s /= u < 0.5 ? o + i : 2 - o - i),\n              (a *= 60))\n            : (s = u > 0 && u < 1 ? 0 : a),\n          new Bt(a, s, u, t.opacity)\n        );\n      }\n      function Bt(t, e, n, r) {\n        (this.h = +t), (this.s = +e), (this.l = +n), (this.opacity = +r);\n      }\n      function At(t, e, n) {\n        return (\n          255 *\n          (t < 60\n            ? e + ((n - e) * t) / 60\n            : t < 180\n            ? n\n            : t < 240\n            ? e + ((n - e) * (240 - t)) / 60\n            : e)\n        );\n      }\n      function Lt(t, e, n, r, i) {\n        var o = t * t,\n          a = o * t;\n        return (\n          ((1 - 3 * t + 3 * o - a) * e +\n            (4 - 6 * o + 3 * a) * n +\n            (1 + 3 * t + 3 * o - 3 * a) * r +\n            a * i) /\n          6\n        );\n      }\n      at(ut, Ot, {\n        copy: function (t) {\n          return Object.assign(new this.constructor(), this, t);\n        },\n        displayable: function () {\n          return this.rgb().displayable();\n        },\n        hex: xt,\n        formatHex: xt,\n        formatHsl: function () {\n          return It(this).formatHsl();\n        },\n        formatRgb: wt,\n        toString: wt,\n      }),\n        at(\n          kt,\n          jt,\n          st(ut, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new kt(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new kt(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              return this;\n            },\n            displayable: function () {\n              return (\n                -0.5 <= this.r &&\n                this.r < 255.5 &&\n                -0.5 <= this.g &&\n                this.g < 255.5 &&\n                -0.5 <= this.b &&\n                this.b < 255.5 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            hex: Et,\n            formatHex: Et,\n            formatRgb: Nt,\n            toString: Nt,\n          }),\n        ),\n        at(\n          Bt,\n          function (t, e, n, r) {\n            return 1 === arguments.length\n              ? It(t)\n              : new Bt(t, e, n, null == r ? 1 : r);\n          },\n          st(ut, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new Bt(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new Bt(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              var t = (this.h % 360) + 360 * (this.h < 0),\n                e = isNaN(t) || isNaN(this.s) ? 0 : this.s,\n                n = this.l,\n                r = n + (n < 0.5 ? n : 1 - n) * e,\n                i = 2 * n - r;\n              return new kt(\n                At(t >= 240 ? t - 240 : t + 120, i, r),\n                At(t, i, r),\n                At(t < 120 ? t + 240 : t - 120, i, r),\n                this.opacity,\n              );\n            },\n            displayable: function () {\n              return (\n                ((0 <= this.s && this.s <= 1) || isNaN(this.s)) &&\n                0 <= this.l &&\n                this.l <= 1 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            formatHsl: function () {\n              var t = this.opacity;\n              return (\n                (1 === (t = isNaN(t) ? 1 : Math.max(0, Math.min(1, t)))\n                  ? \"hsl(\"\n                  : \"hsla(\") +\n                (this.h || 0) +\n                \", \" +\n                100 * (this.s || 0) +\n                \"%, \" +\n                100 * (this.l || 0) +\n                \"%\" +\n                (1 === t ? \")\" : \", \" + t + \")\")\n              );\n            },\n          }),\n        );\n      var Dt = function (t) {\n        return function () {\n          return t;\n        };\n      };\n      function _t(t, e) {\n        return function (n) {\n          return t + n * e;\n        };\n      }\n      function Rt(t) {\n        return 1 == (t = +t)\n          ? Yt\n          : function (e, n) {\n              return n - e\n                ? (function (t, e, n) {\n                    return (\n                      (t = Math.pow(t, n)),\n                      (e = Math.pow(e, n) - t),\n                      (n = 1 / n),\n                      function (r) {\n                        return Math.pow(t + r * e, n);\n                      }\n                    );\n                  })(e, n, t)\n                : Dt(isNaN(e) ? n : e);\n            };\n      }\n      function Yt(t, e) {\n        var n = e - t;\n        return n ? _t(t, n) : Dt(isNaN(t) ? e : t);\n      }\n      var Ft = (function t(e) {\n        var n = Rt(e);\n        function r(t, e) {\n          var r = n((t = jt(t)).r, (e = jt(e)).r),\n            i = n(t.g, e.g),\n            o = n(t.b, e.b),\n            a = Yt(t.opacity, e.opacity);\n          return function (e) {\n            return (\n              (t.r = r(e)),\n              (t.g = i(e)),\n              (t.b = o(e)),\n              (t.opacity = a(e)),\n              t + \"\"\n            );\n          };\n        }\n        return (r.gamma = t), r;\n      })(1);\n      function zt(t) {\n        return function (e) {\n          var n,\n            r,\n            i = e.length,\n            o = new Array(i),\n            a = new Array(i),\n            s = new Array(i);\n          for (n = 0; n < i; ++n)\n            (r = jt(e[n])),\n              (o[n] = r.r || 0),\n              (a[n] = r.g || 0),\n              (s[n] = r.b || 0);\n          return (\n            (o = t(o)),\n            (a = t(a)),\n            (s = t(s)),\n            (r.opacity = 1),\n            function (t) {\n              return (r.r = o(t)), (r.g = a(t)), (r.b = s(t)), r + \"\";\n            }\n          );\n        };\n      }\n      zt(function (t) {\n        var e = t.length - 1;\n        return function (n) {\n          var r =\n              n <= 0 ? (n = 0) : n >= 1 ? ((n = 1), e - 1) : Math.floor(n * e),\n            i = t[r],\n            o = t[r + 1],\n            a = r > 0 ? t[r - 1] : 2 * i - o,\n            s = r < e - 1 ? t[r + 2] : 2 * o - i;\n          return Lt((n - r / e) * e, a, i, o, s);\n        };\n      }),\n        zt(function (t) {\n          var e = t.length;\n          return function (n) {\n            var r = Math.floor(((n %= 1) < 0 ? ++n : n) * e),\n              i = t[(r + e - 1) % e],\n              o = t[r % e],\n              a = t[(r + 1) % e],\n              s = t[(r + 2) % e];\n            return Lt((n - r / e) * e, i, o, a, s);\n          };\n        });\n      var Xt = function (t, e) {\n        e || (e = []);\n        var n,\n          r = t ? Math.min(e.length, t.length) : 0,\n          i = e.slice();\n        return function (o) {\n          for (n = 0; n < r; ++n) i[n] = t[n] * (1 - o) + e[n] * o;\n          return i;\n        };\n      };\n      function Wt(t) {\n        return ArrayBuffer.isView(t) && !(t instanceof DataView);\n      }\n      function Gt(t, e) {\n        var n,\n          r = e ? e.length : 0,\n          i = t ? Math.min(r, t.length) : 0,\n          o = new Array(i),\n          a = new Array(r);\n        for (n = 0; n < i; ++n) o[n] = Jt(t[n], e[n]);\n        for (; n < r; ++n) a[n] = e[n];\n        return function (t) {\n          for (n = 0; n < i; ++n) a[n] = o[n](t);\n          return a;\n        };\n      }\n      var qt = function (t, e) {\n          var n = new Date();\n          return (\n            (t = +t),\n            (e = +e),\n            function (r) {\n              return n.setTime(t * (1 - r) + e * r), n;\n            }\n          );\n        },\n        Ht = function (t, e) {\n          return (\n            (t = +t),\n            (e = +e),\n            function (n) {\n              return t * (1 - n) + e * n;\n            }\n          );\n        };\n      function Vt(t) {\n        return (Vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Ut = function (t, e) {\n          var n,\n            r = {},\n            i = {};\n          for (n in ((null !== t && \"object\" === Vt(t)) || (t = {}),\n          (null !== e && \"object\" === Vt(e)) || (e = {}),\n          e))\n            n in t ? (r[n] = Jt(t[n], e[n])) : (i[n] = e[n]);\n          return function (t) {\n            for (n in r) i[n] = r[n](t);\n            return i;\n          };\n        },\n        Zt = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        Kt = new RegExp(Zt.source, \"g\");\n      var Qt = function (t, e) {\n        var n,\n          r,\n          i,\n          o = (Zt.lastIndex = Kt.lastIndex = 0),\n          a = -1,\n          s = [],\n          u = [];\n        for (t += \"\", e += \"\"; (n = Zt.exec(t)) && (r = Kt.exec(e)); )\n          (i = r.index) > o &&\n            ((i = e.slice(o, i)), s[a] ? (s[a] += i) : (s[++a] = i)),\n            (n = n[0]) === (r = r[0])\n              ? s[a]\n                ? (s[a] += r)\n                : (s[++a] = r)\n              : ((s[++a] = null), u.push({ i: a, x: Ht(n, r) })),\n            (o = Kt.lastIndex);\n        return (\n          o < e.length && ((i = e.slice(o)), s[a] ? (s[a] += i) : (s[++a] = i)),\n          s.length < 2\n            ? u[0]\n              ? (function (t) {\n                  return function (e) {\n                    return t(e) + \"\";\n                  };\n                })(u[0].x)\n              : (function (t) {\n                  return function () {\n                    return t;\n                  };\n                })(e)\n            : ((e = u.length),\n              function (t) {\n                for (var n, r = 0; r < e; ++r) s[(n = u[r]).i] = n.x(t);\n                return s.join(\"\");\n              })\n        );\n      };\n      function $t(t) {\n        return ($t =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Jt = function (t, e) {\n          var n,\n            r = $t(e);\n          return null == e || \"boolean\" === r\n            ? Dt(e)\n            : (\"number\" === r\n                ? Ht\n                : \"string\" === r\n                ? (n = Ot(e))\n                  ? ((e = n), Ft)\n                  : Qt\n                : e instanceof Ot\n                ? Ft\n                : e instanceof Date\n                ? qt\n                : Wt(e)\n                ? Xt\n                : Array.isArray(e)\n                ? Gt\n                : (\"function\" != typeof e.valueOf &&\n                    \"function\" != typeof e.toString) ||\n                  isNaN(e)\n                ? Ut\n                : Ht)(t, e);\n        },\n        te = n(6),\n        ee = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n      function ne(t, e, n) {\n        var i,\n          o = e.startTime;\n        if (n < o + e.delay || e._paused) return !1;\n        var a = e.duration,\n          s = e.easing;\n        if (((n = n - o - e.delay), e.repeat)) (i = (n % a) / a), (i = r[s](i));\n        else {\n          if (!((i = n / a) < 1))\n            return e.onFrame ? t.attr(e.onFrame(1)) : t.attr(e.toAttrs), !0;\n          i = r[s](i);\n        }\n        if (e.onFrame) {\n          var c = e.onFrame(i);\n          t.attr(c);\n        } else\n          !(function (t, e, n) {\n            var r = {},\n              i = e.fromAttrs,\n              o = e.toAttrs;\n            if (!t.destroyed) {\n              var a, s, c, h;\n              for (var l in o)\n                if (!Object(u.q)(i[l], o[l]))\n                  if (\"path\" === l) {\n                    var d = o[l],\n                      f = i[l];\n                    d.length > f.length\n                      ? ((d = te.c(o[l])),\n                        (f = te.c(i[l])),\n                        (f = te.a(f, d)),\n                        (f = te.b(f, d)),\n                        (e.fromAttrs.path = f),\n                        (e.toAttrs.path = d))\n                      : e.pathFormatted ||\n                        ((d = te.c(o[l])),\n                        (f = te.c(i[l])),\n                        (f = te.b(f, d)),\n                        (e.fromAttrs.path = f),\n                        (e.toAttrs.path = d),\n                        (e.pathFormatted = !0)),\n                      (r[l] = []);\n                    for (var p = 0; p < d.length; p++) {\n                      for (\n                        var g = d[p], y = f[p], v = [], m = 0;\n                        m < g.length;\n                        m++\n                      )\n                        Object(u.t)(g[m]) && y && Object(u.t)(y[m])\n                          ? ((a = Jt(y[m], g[m])), v.push(a(n)))\n                          : v.push(g[m]);\n                      r[l].push(v);\n                    }\n                  } else if (\"matrix\" === l) {\n                    var b = ((c = i[l] || ee),\n                    (Wt((h = o[l] || ee)) ? Xt : Gt)(c, h))(n);\n                    r[l] = b;\n                  } else\n                    [\"fill\", \"stroke\", \"fillStyle\", \"strokeStyle\"].includes(\n                      l,\n                    ) && ((s = o[l]), /^[r,R,L,l]{1}[\\s]*\\(/.test(s))\n                      ? (r[l] = o[l])\n                      : Object(u.r)(o[l]) ||\n                        ((a = Jt(i[l], o[l])), (r[l] = a(n)));\n              t.attr(r);\n            }\n          })(t, e, i);\n        return !1;\n      }\n      var re = (function () {\n          function t(t) {\n            (this.animators = []),\n              (this.current = 0),\n              (this.timer = null),\n              (this.canvas = t);\n          }\n          return (\n            (t.prototype.initTimer = function () {\n              var t,\n                e,\n                n,\n                r = this;\n              this.timer = M(function (i) {\n                if (((r.current = i), r.animators.length > 0)) {\n                  for (var o = r.animators.length - 1; o >= 0; o--)\n                    if ((t = r.animators[o]).destroyed) r.removeAnimator(o);\n                    else {\n                      if (!t.isAnimatePaused())\n                        for (\n                          var a = (e = t.get(\"animations\")).length - 1;\n                          a >= 0;\n                          a--\n                        )\n                          (n = e[a]),\n                            ne(t, n, i) &&\n                              (e.splice(a, 1), !1, n.callback && n.callback());\n                      0 === e.length && r.removeAnimator(o);\n                    }\n                  r.canvas.get(\"autoDraw\") || r.canvas.draw();\n                }\n              });\n            }),\n            (t.prototype.addAnimator = function (t) {\n              this.animators.push(t);\n            }),\n            (t.prototype.removeAnimator = function (t) {\n              this.animators.splice(t, 1);\n            }),\n            (t.prototype.isAnimating = function () {\n              return !!this.animators.length;\n            }),\n            (t.prototype.stop = function () {\n              this.timer && this.timer.stop();\n            }),\n            (t.prototype.stopAllAnimations = function (t) {\n              void 0 === t && (t = !0),\n                this.animators.forEach(function (e) {\n                  e.stopAnimate(t);\n                }),\n                (this.animators = []),\n                this.canvas.draw();\n            }),\n            (t.prototype.getTime = function () {\n              return this.current;\n            }),\n            t\n          );\n        })(),\n        ie = n(10),\n        oe = [\n          \"mousedown\",\n          \"mouseup\",\n          \"dblclick\",\n          \"mouseout\",\n          \"mouseover\",\n          \"mousemove\",\n          \"mouseleave\",\n          \"mouseenter\",\n          \"touchstart\",\n          \"touchmove\",\n          \"touchend\",\n          \"dragenter\",\n          \"dragover\",\n          \"dragleave\",\n          \"drop\",\n          \"contextmenu\",\n          \"mousewheel\",\n        ];\n      function ae(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function se(t, e, n) {\n        if (n.bubbles) {\n          var r = void 0,\n            i = !1;\n          if (\n            (\"mouseenter\" === e\n              ? ((r = n.fromShape), (i = !0))\n              : \"mouseleave\" === e && ((i = !0), (r = n.toShape)),\n            t.isCanvas() && i)\n          )\n            return;\n          if (r && Object(s.g)(t, r)) return void (n.bubbles = !1);\n          (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var ue = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.mousedownShape = null),\n              (this.mousedownPoint = null),\n              (this._eventCallback = function (t) {\n                var n = t.type;\n                e._triggerEvent(n, t);\n              }),\n              (this._onDocumentMove = function (t) {\n                if (\n                  e.canvas.get(\"el\") !== t.target &&\n                  (e.dragging || e.currentShape)\n                ) {\n                  var n = e._getPointInfo(t);\n                  e.dragging && e._emitEvent(\"drag\", t, n, e.draggingShape);\n                }\n              }),\n              (this._onDocumentMouseUp = function (t) {\n                if (e.canvas.get(\"el\") !== t.target && e.dragging) {\n                  var n = e._getPointInfo(t);\n                  e.draggingShape && e._emitEvent(\"drop\", t, n, null),\n                    e._emitEvent(\"dragend\", t, n, e.draggingShape),\n                    e._afterDrag(e.draggingShape, n, t);\n                }\n              }),\n              (this.canvas = t.canvas);\n          }\n          return (\n            (t.prototype.init = function () {\n              this._bindEvents();\n            }),\n            (t.prototype._bindEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(s.a)(oe, function (n) {\n                e.addEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.addEventListener(\"mousemove\", this._onDocumentMove),\n                  document.addEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._clearEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(s.a)(oe, function (n) {\n                e.removeEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.removeEventListener(\n                    \"mousemove\",\n                    this._onDocumentMove,\n                  ),\n                  document.removeEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, i, o) {\n              var a = new ie.a(t, e);\n              return (\n                (a.fromShape = i),\n                (a.toShape = o),\n                (a.x = n.x),\n                (a.y = n.y),\n                (a.clientX = n.clientX),\n                (a.clientY = n.clientY),\n                a.propagationPath.push(r),\n                a\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              return this.canvas.getShape(t.x, t.y, e);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t],\n                o = !1;\n              if (i) i.call(this, n, r, e);\n              else {\n                var a = this.currentShape;\n                \"mouseenter\" === t || \"dragenter\" === t || \"mouseover\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"mouseenter\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"mouseleave\" === t || \"dragleave\" === t || \"mouseout\" === t\n                  ? ((o = !0),\n                    a && this._emitEvent(t, e, n, a, a, null),\n                    this._emitEvent(t, e, n, null, a, null),\n                    \"mouseleave\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n              if ((o || (this.currentShape = r), r && !r.get(\"destroyed\"))) {\n                var s = this.canvas;\n                s.get(\"el\").style.cursor = r.attr(\"cursor\") || s.get(\"cursor\");\n              }\n            }),\n            (t.prototype._onmousedown = function (t, e, n) {\n              0 === n.button &&\n                ((this.mousedownShape = e),\n                (this.mousedownPoint = t),\n                (this.mousedownTimeStamp = n.timeStamp)),\n                this._emitEvent(\"mousedown\", n, t, e, null, null);\n            }),\n            (t.prototype._emitMouseoverEvents = function (t, e, n, r) {\n              var i = this.canvas.get(\"el\");\n              n !== r &&\n                (n &&\n                  (this._emitEvent(\"mouseout\", t, e, n, n, r),\n                  this._emitEvent(\"mouseleave\", t, e, n, n, r),\n                  (r && !r.get(\"destroyed\")) ||\n                    (i.style.cursor = this.canvas.get(\"cursor\"))),\n                r &&\n                  (this._emitEvent(\"mouseover\", t, e, r, n, r),\n                  this._emitEvent(\"mouseenter\", t, e, r, n, r)));\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              r !== t && this._emitMouseoverEvents(n, e, t, r),\n                (this.currentShape = r);\n            }),\n            (t.prototype._onmouseup = function (t, e, n) {\n              if (0 === n.button) {\n                var r = this.draggingShape;\n                this.dragging\n                  ? (r && this._emitEvent(\"drop\", n, t, e),\n                    this._emitEvent(\"dragend\", n, t, r),\n                    this._afterDrag(r, t, n))\n                  : (this._emitEvent(\"mouseup\", n, t, e),\n                    e === this.mousedownShape &&\n                      this._emitEvent(\"click\", n, t, e),\n                    (this.mousedownShape = null),\n                    (this.mousedownPoint = null));\n              }\n            }),\n            (t.prototype._ondragover = function (t, e, n) {\n              n.preventDefault();\n              var r = this.currentShape;\n              this._emitDragoverEvents(n, t, r, e, !0);\n            }),\n            (t.prototype._onmousemove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.mousedownPoint;\n                if (a) {\n                  var s = this.mousedownShape,\n                    u = n.timeStamp - this.mousedownTimeStamp,\n                    c = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  u > 120 || c * c + h * h > 40\n                    ? s && s.get(\"draggable\")\n                      ? ((o = this.mousedownShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : (this._emitMouseoverEvents(n, t, i, e),\n                        this._emitEvent(\"mousemove\", n, t, e))\n                    : (this._emitMouseoverEvents(n, t, i, e),\n                      this._emitEvent(\"mousemove\", n, t, e));\n                } else\n                  this._emitMouseoverEvents(n, t, i, e),\n                    this._emitEvent(\"mousemove\", n, t, e);\n              }\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), ae(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || se(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                ae(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              this._clearEvents(),\n                (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.mousedownPoint = null),\n                (this.mousedownShape = null),\n                (this.mousedownTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        ce = Object(o.a)(),\n        he = ce && \"firefox\" === ce.name;\n      !(function (t) {\n        function e(e) {\n          var n = t.call(this, e) || this;\n          return (\n            n.initContainer(), n.initDom(), n.initEvents(), n.initTimeline(), n\n          );\n        }\n        Object(i.c)(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            var e = t.prototype.getDefaultCfg.call(this);\n            return (e.cursor = \"default\"), (e.supportCSSTransform = !1), e;\n          }),\n          (e.prototype.initContainer = function () {\n            var t = this.get(\"container\");\n            Object(s.h)(t) &&\n              ((t = document.getElementById(t)), this.set(\"container\", t));\n          }),\n          (e.prototype.initDom = function () {\n            var t = this.createDom();\n            this.set(\"el\", t),\n              this.get(\"container\").appendChild(t),\n              this.setDOMSize(this.get(\"width\"), this.get(\"height\"));\n          }),\n          (e.prototype.initEvents = function () {\n            var t = new ue({ canvas: this });\n            t.init(), this.set(\"eventController\", t);\n          }),\n          (e.prototype.initTimeline = function () {\n            var t = new re(this);\n            this.set(\"timeline\", t);\n          }),\n          (e.prototype.setDOMSize = function (t, e) {\n            var n = this.get(\"el\");\n            s.c && ((n.style.width = t + \"px\"), (n.style.height = e + \"px\"));\n          }),\n          (e.prototype.changeSize = function (t, e) {\n            this.setDOMSize(t, e),\n              this.set(\"width\", t),\n              this.set(\"height\", e),\n              this.onCanvasChange(\"changeSize\");\n          }),\n          (e.prototype.getRenderer = function () {\n            return this.get(\"renderer\");\n          }),\n          (e.prototype.getCursor = function () {\n            return this.get(\"cursor\");\n          }),\n          (e.prototype.setCursor = function (t) {\n            this.set(\"cursor\", t);\n            var e = this.get(\"el\");\n            s.c && e && (e.style.cursor = t);\n          }),\n          (e.prototype.getPointByEvent = function (t) {\n            if (this.get(\"supportCSSTransform\")) {\n              if (he && !Object(s.e)(t.layerX) && t.layerX !== t.offsetX)\n                return { x: t.layerX, y: t.layerY };\n              if (!Object(s.e)(t.offsetX))\n                return { x: t.offsetX, y: t.offsetY };\n            }\n            var e = this.getClientByEvent(t),\n              n = e.x,\n              r = e.y;\n            return this.getPointByClient(n, r);\n          }),\n          (e.prototype.getClientByEvent = function (t) {\n            var e = t;\n            return (\n              t.touches &&\n                (e =\n                  \"touchend\" === t.type ? t.changedTouches[0] : t.touches[0]),\n              { x: e.clientX, y: e.clientY }\n            );\n          }),\n          (e.prototype.getPointByClient = function (t, e) {\n            var n = this.get(\"el\").getBoundingClientRect();\n            return { x: t - n.left, y: e - n.top };\n          }),\n          (e.prototype.getClientByPoint = function (t, e) {\n            var n = this.get(\"el\").getBoundingClientRect();\n            return { x: t + n.left, y: e + n.top };\n          }),\n          (e.prototype.draw = function () {}),\n          (e.prototype.removeDom = function () {\n            var t = this.get(\"el\");\n            t.parentNode.removeChild(t);\n          }),\n          (e.prototype.clearEvents = function () {\n            this.get(\"eventController\").destroy();\n          }),\n          (e.prototype.isCanvas = function () {\n            return !0;\n          }),\n          (e.prototype.getParent = function () {\n            return null;\n          }),\n          (e.prototype.destroy = function () {\n            var e = this.get(\"timeline\");\n            this.get(\"destroyed\") ||\n              (this.clear(),\n              e && e.stop(),\n              this.clearEvents(),\n              this.removeDom(),\n              t.prototype.destroy.call(this));\n          });\n      })(a.a);\n    },\n    function (t, e, n) {\n      \"use strict\";\n      var r = {};\n      n.r(r),\n        n.d(r, \"distance\", function () {\n          return h;\n        }),\n        n.d(r, \"isNumberEqual\", function () {\n          return l;\n        }),\n        n.d(r, \"getBBoxByArray\", function () {\n          return d;\n        }),\n        n.d(r, \"getBBoxRange\", function () {\n          return f;\n        }),\n        n.d(r, \"piMod\", function () {\n          return p;\n        });\n      var i = new Map();\n      function o(t, e) {\n        i.set(t, e);\n      }\n      var a = function (t) {\n          var e = t.attr();\n          return { x: e.x, y: e.y, width: e.width, height: e.height };\n        },\n        s = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.r;\n          return { x: n - i, y: r - i, width: 2 * i, height: 2 * i };\n        };\n      function u(t) {\n        return Math.min.apply(null, t);\n      }\n      function c(t) {\n        return Math.max.apply(null, t);\n      }\n      function h(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function l(t, e) {\n        return Math.abs(t - e) < 0.001;\n      }\n      function d(t, e) {\n        var n = u(t),\n          r = u(e);\n        return { x: n, y: r, width: c(t) - n, height: c(e) - r };\n      }\n      function f(t, e, n, r) {\n        return {\n          minX: u([t, n]),\n          maxX: c([t, n]),\n          minY: u([e, r]),\n          maxY: c([e, r]),\n        };\n      }\n      function p(t) {\n        return (t + 2 * Math.PI) % (2 * Math.PI);\n      }\n      n(9);\n      function g(t, e, n, r) {\n        var i = 1 - r;\n        return i * i * t + 2 * r * i * e + r * r * n;\n      }\n      function y(t, e, n) {\n        var r = t + n - 2 * e;\n        if (l(r, 0)) return [0.5];\n        var i = (t - e) / r;\n        return i <= 1 && i >= 0 ? [i] : [];\n      }\n      var v = function (t, e, n, r, i, o) {\n        var a = y(t, n, i)[0],\n          s = y(e, r, o)[0],\n          u = [t, i],\n          c = [e, o];\n        return (\n          void 0 !== a && u.push(g(t, n, i, a)),\n          void 0 !== s && c.push(g(e, r, o, s)),\n          d(u, c)\n        );\n      };\n      function m(t, e, n, r, i) {\n        var o = 1 - i;\n        return (\n          o * o * o * t + 3 * e * i * o * o + 3 * n * i * i * o + r * i * i * i\n        );\n      }\n      function b(t, e, n, r) {\n        var i,\n          o,\n          a,\n          s = -3 * t + 9 * e - 9 * n + 3 * r,\n          u = 6 * t - 12 * e + 6 * n,\n          c = 3 * e - 3 * t,\n          h = [];\n        if (l(s, 0)) l(u, 0) || ((i = -c / u) >= 0 && i <= 1 && h.push(i));\n        else {\n          var d = u * u - 4 * s * c;\n          l(d, 0)\n            ? h.push(-u / (2 * s))\n            : d > 0 &&\n              ((o = (-u - (a = Math.sqrt(d))) / (2 * s)),\n              (i = (-u + a) / (2 * s)) >= 0 && i <= 1 && h.push(i),\n              o >= 0 && o <= 1 && h.push(o));\n        }\n        return h;\n      }\n      var x = function (t, e, n, r, i, o, a, s) {\n        for (\n          var u = [t, a],\n            c = [e, s],\n            h = b(t, n, i, a),\n            l = b(e, r, o, s),\n            f = 0;\n          f < h.length;\n          f++\n        )\n          u.push(m(t, n, i, a, h[f]));\n        for (f = 0; f < l.length; f++) c.push(m(e, r, o, s, l[f]));\n        return d(u, c);\n      };\n      function w(t, e, n, r, i, o) {\n        return (\n          n * Math.cos(i) * Math.cos(o) - r * Math.sin(i) * Math.sin(o) + t\n        );\n      }\n      function O(t, e, n, r, i, o) {\n        return (\n          n * Math.sin(i) * Math.cos(o) + r * Math.cos(i) * Math.sin(o) + e\n        );\n      }\n      var M = function (t, e, n, r, i, o, a) {\n        for (\n          var s = (function (t, e, n) {\n              return Math.atan((-e / t) * Math.tan(n));\n            })(n, r, i),\n            u = 1 / 0,\n            c = -1 / 0,\n            h = [o, a],\n            l = 2 * -Math.PI;\n          l <= 2 * Math.PI;\n          l += Math.PI\n        ) {\n          var d = s + l;\n          o < a ? o < d && d < a && h.push(d) : a < d && d < o && h.push(d);\n        }\n        for (l = 0; l < h.length; l++) {\n          var f = w(t, 0, n, r, i, h[l]);\n          f < u && (u = f), f > c && (c = f);\n        }\n        var p = (function (t, e, n) {\n            return Math.atan(e / (t * Math.tan(n)));\n          })(n, r, i),\n          g = 1 / 0,\n          y = -1 / 0,\n          v = [o, a];\n        for (l = 2 * -Math.PI; l <= 2 * Math.PI; l += Math.PI) {\n          var m = p + l;\n          o < a ? o < m && m < a && v.push(m) : a < m && m < o && v.push(m);\n        }\n        for (l = 0; l < v.length; l++) {\n          var b = O(0, e, n, r, i, v[l]);\n          b < g && (g = b), b > y && (y = b);\n        }\n        return { x: u, y: g, width: c - u, height: y - g };\n      };\n      function S(t, e) {\n        return t && e\n          ? {\n              minX: Math.min(t.minX, e.minX),\n              minY: Math.min(t.minY, e.minY),\n              maxX: Math.max(t.maxX, e.maxX),\n              maxY: Math.max(t.maxY, e.maxY),\n            }\n          : t || e;\n      }\n      function C(t, e) {\n        var n = t.get(\"startArrowShape\"),\n          r = t.get(\"endArrowShape\");\n        return (\n          n && (e = S(e, n.getCanvasBBox())),\n          r && (e = S(e, r.getCanvasBBox())),\n          e\n        );\n      }\n      var j = n(8),\n        k = n(7),\n        E = n(0);\n      function N(t, e) {\n        var n = t.prePoint,\n          r = t.currentPoint,\n          i = t.nextPoint,\n          o = Math.pow(r[0] - n[0], 2) + Math.pow(r[1] - n[1], 2),\n          a = Math.pow(r[0] - i[0], 2) + Math.pow(r[1] - i[1], 2),\n          s = Math.pow(n[0] - i[0], 2) + Math.pow(n[1] - i[1], 2),\n          u = Math.acos((o + a - s) / (2 * Math.sqrt(o) * Math.sqrt(a)));\n        if (!u || 0 === Math.sin(u) || Object(E.u)(u, 0))\n          return { xExtra: 0, yExtra: 0 };\n        var c = Math.abs(Math.atan2(i[1] - r[1], i[0] - r[0])),\n          h = Math.abs(Math.atan2(i[0] - r[0], i[1] - r[1]));\n        return (\n          (c = c > Math.PI / 2 ? Math.PI - c : c),\n          (h = h > Math.PI / 2 ? Math.PI - h : h),\n          {\n            xExtra:\n              Math.cos(u / 2 - c) * ((e / 2) * (1 / Math.sin(u / 2))) - e / 2 ||\n              0,\n            yExtra:\n              Math.cos(h - u / 2) * ((e / 2) * (1 / Math.sin(u / 2))) - e / 2 ||\n              0,\n          }\n        );\n      }\n      o(\"rect\", a),\n        o(\"image\", a),\n        o(\"circle\", s),\n        o(\"marker\", s),\n        o(\"polyline\", function (t) {\n          for (\n            var e = t.attr().points, n = [], i = [], o = 0;\n            o < e.length;\n            o++\n          ) {\n            var a = e[o];\n            n.push(a[0]), i.push(a[1]);\n          }\n          var s = r.getBBoxByArray(n, i),\n            u = s.x,\n            c = s.y,\n            h = { minX: u, minY: c, maxX: u + s.width, maxY: c + s.height };\n          return {\n            x: (h = C(t, h)).minX,\n            y: h.minY,\n            width: h.maxX - h.minX,\n            height: h.maxY - h.minY,\n          };\n        }),\n        o(\"polygon\", function (t) {\n          for (\n            var e = t.attr().points, n = [], i = [], o = 0;\n            o < e.length;\n            o++\n          ) {\n            var a = e[o];\n            n.push(a[0]), i.push(a[1]);\n          }\n          return r.getBBoxByArray(n, i);\n        }),\n        o(\"text\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            a = e.lineHeight,\n            s = e.font;\n          s || (s = Object(j.a)(e));\n          var u,\n            c = Object(j.c)(i, s);\n          if (c) {\n            var h = e.textAlign,\n              l = e.textBaseline,\n              d = Object(j.b)(i, o, a),\n              f = { x: n, y: r - d };\n            h &&\n              (\"end\" === h || \"right\" === h\n                ? (f.x -= c)\n                : \"center\" === h && (f.x -= c / 2)),\n              l &&\n                (\"top\" === l ? (f.y += d) : \"middle\" === l && (f.y += d / 2)),\n              (u = { x: f.x, y: f.y, width: c, height: d });\n          } else u = { x: n, y: r, width: 0, height: 0 };\n          return u;\n        }),\n        o(\"path\", function (t) {\n          var e = t.attr(),\n            n = e.path,\n            r = e.stroke ? e.lineWidth : 0,\n            i = (function (t, e) {\n              for (var n = [], r = [], i = [], o = 0; o < t.length; o++) {\n                var a = (g = t[o]).currentPoint,\n                  s = g.params,\n                  u = g.prePoint,\n                  c = void 0;\n                switch (g.command) {\n                  case \"Q\":\n                    c = v(u[0], u[1], s[1], s[2], s[3], s[4]);\n                    break;\n                  case \"C\":\n                    c = x(u[0], u[1], s[1], s[2], s[3], s[4], s[5], s[6]);\n                    break;\n                  case \"A\":\n                    var h = g.arcParams;\n                    c = M(\n                      h.cx,\n                      h.cy,\n                      h.rx,\n                      h.ry,\n                      h.xRotation,\n                      h.startAngle,\n                      h.endAngle,\n                    );\n                    break;\n                  default:\n                    n.push(a[0]), r.push(a[1]);\n                }\n                c &&\n                  ((g.box = c),\n                  n.push(c.x, c.x + c.width),\n                  r.push(c.y, c.y + c.height)),\n                  e &&\n                    (\"L\" === g.command || \"M\" === g.command) &&\n                    g.prePoint &&\n                    g.nextPoint &&\n                    i.push(g);\n              }\n              (n = n.filter(function (t) {\n                return !Number.isNaN(t);\n              })),\n                (r = r.filter(function (t) {\n                  return !Number.isNaN(t);\n                }));\n              var l = Object(E.B)(n),\n                d = Object(E.B)(r),\n                f = Object(E.A)(n),\n                p = Object(E.A)(r);\n              if (0 === i.length)\n                return { x: l, y: d, width: f - l, height: p - d };\n              for (o = 0; o < i.length; o++) {\n                var g;\n                (a = (g = i[o]).currentPoint)[0] === l\n                  ? (l -= N(g, e).xExtra)\n                  : a[0] === f && (f += N(g, e).xExtra),\n                  a[1] === d\n                    ? (d -= N(g, e).yExtra)\n                    : a[1] === p && (p += N(g, e).yExtra);\n              }\n              return { x: l, y: d, width: f - l, height: p - d };\n            })(t.get(\"segments\") || Object(k.c)(n), r),\n            o = i.x,\n            a = i.y,\n            s = { minX: o, minY: a, maxX: o + i.width, maxY: a + i.height };\n          return {\n            x: (s = C(t, s)).minX,\n            y: s.minY,\n            width: s.maxX - s.minX,\n            height: s.maxY - s.minY,\n          };\n        }),\n        o(\"line\", function (t) {\n          var e = t.attr(),\n            n = e.x1,\n            r = e.y1,\n            i = e.x2,\n            o = e.y2,\n            a = {\n              minX: Math.min(n, i),\n              maxX: Math.max(n, i),\n              minY: Math.min(r, o),\n              maxY: Math.max(r, o),\n            };\n          return {\n            x: (a = C(t, a)).minX,\n            y: a.minY,\n            width: a.maxX - a.minX,\n            height: a.maxY - a.minY,\n          };\n        }),\n        o(\"ellipse\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.rx,\n            o = e.ry;\n          return { x: n - i, y: r - o, width: 2 * i, height: 2 * o };\n        });\n    },\n    function (t, e, n) {\n      var r, i, o;\n      function a(t) {\n        return (a =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      (i = []),\n        void 0 ===\n          (o =\n            \"function\" ==\n            typeof (r = function () {\n              var n = (function () {\n                var t = {\n                    row: \"left\",\n                    \"row-reverse\": \"right\",\n                    column: \"top\",\n                    \"column-reverse\": \"bottom\",\n                  },\n                  e = {\n                    row: \"right\",\n                    \"row-reverse\": \"left\",\n                    column: \"bottom\",\n                    \"column-reverse\": \"top\",\n                  },\n                  n = {\n                    row: \"left\",\n                    \"row-reverse\": \"right\",\n                    column: \"top\",\n                    \"column-reverse\": \"bottom\",\n                  },\n                  r = {\n                    row: \"width\",\n                    \"row-reverse\": \"width\",\n                    column: \"height\",\n                    \"column-reverse\": \"height\",\n                  };\n                function i(t) {\n                  return void 0 === t;\n                }\n                function o(t) {\n                  return \"row\" === t || \"row-reverse\" === t;\n                }\n                function a(t, e) {\n                  if (void 0 !== t.style.marginStart && o(e))\n                    return t.style.marginStart;\n                  var n = null;\n                  switch (e) {\n                    case \"row\":\n                      n = t.style.marginLeft;\n                      break;\n                    case \"row-reverse\":\n                      n = t.style.marginRight;\n                      break;\n                    case \"column\":\n                      n = t.style.marginTop;\n                      break;\n                    case \"column-reverse\":\n                      n = t.style.marginBottom;\n                  }\n                  return void 0 !== n\n                    ? n\n                    : void 0 !== t.style.margin\n                    ? t.style.margin\n                    : 0;\n                }\n                function s(t, e) {\n                  if (void 0 !== t.style.marginEnd && o(e))\n                    return t.style.marginEnd;\n                  var n = null;\n                  switch (e) {\n                    case \"row\":\n                      n = t.style.marginRight;\n                      break;\n                    case \"row-reverse\":\n                      n = t.style.marginLeft;\n                      break;\n                    case \"column\":\n                      n = t.style.marginBottom;\n                      break;\n                    case \"column-reverse\":\n                      n = t.style.marginTop;\n                  }\n                  return null != n\n                    ? n\n                    : void 0 !== t.style.margin\n                    ? t.style.margin\n                    : 0;\n                }\n                function u(t, e) {\n                  if (\n                    void 0 !== t.style.borderStartWidth &&\n                    t.style.borderStartWidth >= 0 &&\n                    o(e)\n                  )\n                    return t.style.borderStartWidth;\n                  var n = null;\n                  switch (e) {\n                    case \"row\":\n                      n = t.style.borderLeftWidth;\n                      break;\n                    case \"row-reverse\":\n                      n = t.style.borderRightWidth;\n                      break;\n                    case \"column\":\n                      n = t.style.borderTopWidth;\n                      break;\n                    case \"column-reverse\":\n                      n = t.style.borderBottomWidth;\n                  }\n                  return null != n && n >= 0\n                    ? n\n                    : void 0 !== t.style.borderWidth && t.style.borderWidth >= 0\n                    ? t.style.borderWidth\n                    : 0;\n                }\n                function c(t, e) {\n                  if (\n                    void 0 !== t.style.borderEndWidth &&\n                    t.style.borderEndWidth >= 0 &&\n                    o(e)\n                  )\n                    return t.style.borderEndWidth;\n                  var n = null;\n                  switch (e) {\n                    case \"row\":\n                      n = t.style.borderRightWidth;\n                      break;\n                    case \"row-reverse\":\n                      n = t.style.borderLeftWidth;\n                      break;\n                    case \"column\":\n                      n = t.style.borderBottomWidth;\n                      break;\n                    case \"column-reverse\":\n                      n = t.style.borderTopWidth;\n                  }\n                  return null != n && n >= 0\n                    ? n\n                    : void 0 !== t.style.borderWidth && t.style.borderWidth >= 0\n                    ? t.style.borderWidth\n                    : 0;\n                }\n                function h(t, e) {\n                  return (\n                    (function (t, e) {\n                      if (\n                        void 0 !== t.style.paddingStart &&\n                        t.style.paddingStart >= 0 &&\n                        o(e)\n                      )\n                        return t.style.paddingStart;\n                      var n = null;\n                      switch (e) {\n                        case \"row\":\n                          n = t.style.paddingLeft;\n                          break;\n                        case \"row-reverse\":\n                          n = t.style.paddingRight;\n                          break;\n                        case \"column\":\n                          n = t.style.paddingTop;\n                          break;\n                        case \"column-reverse\":\n                          n = t.style.paddingBottom;\n                      }\n                      return null != n && n >= 0\n                        ? n\n                        : void 0 !== t.style.padding && t.style.padding >= 0\n                        ? t.style.padding\n                        : 0;\n                    })(t, e) + u(t, e)\n                  );\n                }\n                function l(t, e) {\n                  return (\n                    (function (t, e) {\n                      if (\n                        void 0 !== t.style.paddingEnd &&\n                        t.style.paddingEnd >= 0 &&\n                        o(e)\n                      )\n                        return t.style.paddingEnd;\n                      var n = null;\n                      switch (e) {\n                        case \"row\":\n                          n = t.style.paddingRight;\n                          break;\n                        case \"row-reverse\":\n                          n = t.style.paddingLeft;\n                          break;\n                        case \"column\":\n                          n = t.style.paddingBottom;\n                          break;\n                        case \"column-reverse\":\n                          n = t.style.paddingTop;\n                      }\n                      return null != n && n >= 0\n                        ? n\n                        : void 0 !== t.style.padding && t.style.padding >= 0\n                        ? t.style.padding\n                        : 0;\n                    })(t, e) + c(t, e)\n                  );\n                }\n                function d(t, e) {\n                  return u(t, e) + c(t, e);\n                }\n                function f(t, e) {\n                  return a(t, e) + s(t, e);\n                }\n                function p(t, e) {\n                  return h(t, e) + l(t, e);\n                }\n                function g(t, e) {\n                  return e.style.alignSelf\n                    ? e.style.alignSelf\n                    : t.style.alignItems\n                    ? t.style.alignItems\n                    : \"stretch\";\n                }\n                function y(t, e) {\n                  if (\"rtl\" === e) {\n                    if (\"row\" === t) return \"row-reverse\";\n                    if (\"row-reverse\" === t) return \"row\";\n                  }\n                  return t;\n                }\n                function v(t) {\n                  return t.style.position ? t.style.position : \"relative\";\n                }\n                function m(t) {\n                  return \"relative\" === v(t) && t.style.flex > 0;\n                }\n                function b(t, e) {\n                  return t.layout[r[e]] + f(t, e);\n                }\n                function x(t, e) {\n                  return void 0 !== t.style[r[e]] && t.style[r[e]] >= 0;\n                }\n                function w(t, e) {\n                  return void 0 !== t.style[e];\n                }\n                function O(t, e) {\n                  return void 0 !== t.style[e] ? t.style[e] : 0;\n                }\n                function M(t, e, n) {\n                  var r = {\n                      row: t.style.minWidth,\n                      \"row-reverse\": t.style.minWidth,\n                      column: t.style.minHeight,\n                      \"column-reverse\": t.style.minHeight,\n                    }[e],\n                    i = {\n                      row: t.style.maxWidth,\n                      \"row-reverse\": t.style.maxWidth,\n                      column: t.style.maxHeight,\n                      \"column-reverse\": t.style.maxHeight,\n                    }[e],\n                    o = n;\n                  return (\n                    void 0 !== i && i >= 0 && o > i && (o = i),\n                    void 0 !== r && r >= 0 && o < r && (o = r),\n                    o\n                  );\n                }\n                function S(t, e) {\n                  return t > e ? t : e;\n                }\n                function C(t, e) {\n                  void 0 === t.layout[r[e]] &&\n                    x(t, e) &&\n                    (t.layout[r[e]] = S(M(t, e, t.style[r[e]]), p(t, e)));\n                }\n                function j(t, i, o) {\n                  i.layout[e[o]] =\n                    t.layout[r[o]] - i.layout[r[o]] - i.layout[n[o]];\n                }\n                function k(n, r) {\n                  return void 0 !== n.style[t[r]] ? O(n, t[r]) : -O(n, e[r]);\n                }\n                function E(c, E, T) {\n                  var P = (function (t, e) {\n                      var n;\n                      return (\n                        \"inherit\" ===\n                          (n = t.style.direction\n                            ? t.style.direction\n                            : \"inherit\") && (n = void 0 === e ? \"ltr\" : e),\n                        n\n                      );\n                    })(c, T),\n                    I = y(\n                      (function (t) {\n                        return t.style.flexDirection\n                          ? t.style.flexDirection\n                          : \"column\";\n                      })(c),\n                      P,\n                    ),\n                    B = (function (t, e) {\n                      return (function (t) {\n                        return \"column\" === t || \"column-reverse\" === t;\n                      })(t)\n                        ? y(\"row\", e)\n                        : \"column\";\n                    })(I, P),\n                    A = y(\"row\", P);\n                  C(c, I),\n                    C(c, B),\n                    (c.layout.direction = P),\n                    (c.layout[t[I]] += a(c, I) + k(c, I)),\n                    (c.layout[e[I]] += s(c, I) + k(c, I)),\n                    (c.layout[t[B]] += a(c, B) + k(c, B)),\n                    (c.layout[e[B]] += s(c, B) + k(c, B));\n                  var L = c.children.length,\n                    D = p(c, A);\n                  if (\n                    (function (t) {\n                      return void 0 !== t.style.measure;\n                    })(c)\n                  ) {\n                    var _ = !i(c.layout[r[A]]),\n                      R = void 0;\n                    (R = x(c, A)\n                      ? c.style.width\n                      : _\n                      ? c.layout[r[A]]\n                      : E - f(c, A)),\n                      (R -= D);\n                    var Y = !x(c, A) && !_,\n                      F = !x(c, \"column\") && i(c.layout[r.column]);\n                    if (Y || F) {\n                      var z = c.style.measure(R);\n                      Y && (c.layout.width = z.width + D),\n                        F && (c.layout.height = z.height + p(c, \"column\"));\n                    }\n                    if (0 === L) return;\n                  }\n                  var X,\n                    W,\n                    G,\n                    q,\n                    H = (function (t) {\n                      return \"wrap\" === t.style.flexWrap;\n                    })(c),\n                    V = (function (t) {\n                      return t.style.justifyContent\n                        ? t.style.justifyContent\n                        : \"flex-start\";\n                    })(c),\n                    U = h(c, I),\n                    Z = h(c, B),\n                    K = p(c, I),\n                    Q = p(c, B),\n                    $ = !i(c.layout[r[I]]),\n                    J = !i(c.layout[r[B]]),\n                    tt = o(I),\n                    et = null,\n                    nt = null,\n                    rt = void 0;\n                  $ && (rt = c.layout[r[I]] - K);\n                  for (\n                    var it = 0, ot = 0, at = 0, st = 0, ut = 0, ct = 0;\n                    ot < L;\n\n                  ) {\n                    var ht,\n                      lt = 0,\n                      dt = 0,\n                      ft = 0,\n                      pt = 0,\n                      gt = ($ && \"flex-start\" === V) || (!$ && \"center\" !== V),\n                      yt = gt ? L : it,\n                      vt = !0,\n                      mt = L,\n                      bt = null,\n                      xt = null,\n                      wt = U,\n                      Ot = 0;\n                    for (X = it; X < L; ++X) {\n                      if (\n                        (((G = c.children[X]).lineIndex = ct),\n                        (G.nextAbsoluteChild = null),\n                        (G.nextFlexChild = null),\n                        \"stretch\" === (Pt = g(c, G)) &&\n                          \"relative\" === v(G) &&\n                          J &&\n                          !x(G, B))\n                      )\n                        G.layout[r[B]] = S(\n                          M(G, B, c.layout[r[B]] - Q - f(G, B)),\n                          p(G, B),\n                        );\n                      else if (\"absolute\" === v(G))\n                        for (\n                          null === et && (et = G),\n                            null !== nt && (nt.nextAbsoluteChild = G),\n                            nt = G,\n                            W = 0;\n                          W < 2;\n                          W++\n                        )\n                          (q = 0 !== W ? \"row\" : \"column\"),\n                            !i(c.layout[r[q]]) &&\n                              !x(G, q) &&\n                              w(G, t[q]) &&\n                              w(G, e[q]) &&\n                              (G.layout[r[q]] = S(\n                                M(\n                                  G,\n                                  q,\n                                  c.layout[r[q]] -\n                                    p(c, q) -\n                                    f(G, q) -\n                                    O(G, t[q]) -\n                                    O(G, e[q]),\n                                ),\n                                p(G, q),\n                              ));\n                      var Mt = 0;\n                      if (\n                        ($ && m(G)\n                          ? (dt++,\n                            (ft += G.style.flex),\n                            null === bt && (bt = G),\n                            null !== xt && (xt.nextFlexChild = G),\n                            (xt = G),\n                            (Mt = p(G, I) + f(G, I)))\n                          : ((ht = void 0),\n                            tt ||\n                              (ht = x(c, A)\n                                ? c.layout[r[A]] - D\n                                : E - f(c, A) - D),\n                            0 === at && N(G, ht, P),\n                            \"relative\" === v(G) && (pt++, (Mt = b(G, I)))),\n                        H && $ && lt + Mt > rt && X !== it)\n                      ) {\n                        pt--, (at = 1);\n                        break;\n                      }\n                      gt &&\n                        (\"relative\" !== v(G) || m(G)) &&\n                        ((gt = !1), (yt = X)),\n                        vt &&\n                          (\"relative\" !== v(G) ||\n                            (\"stretch\" !== Pt && \"flex-start\" !== Pt) ||\n                            i(G.layout[r[B]])) &&\n                          ((vt = !1), (mt = X)),\n                        gt &&\n                          ((G.layout[n[I]] += wt),\n                          $ && j(c, G, I),\n                          (wt += b(G, I)),\n                          (Ot = S(Ot, M(G, B, b(G, B))))),\n                        vt && ((G.layout[n[B]] += st + Z), J && j(c, G, B)),\n                        (at = 0),\n                        (lt += Mt),\n                        (ot = X + 1);\n                    }\n                    var St = 0,\n                      Ct = 0,\n                      jt = 0;\n                    if (((jt = $ ? rt - lt : S(lt, 0) - lt), 0 !== dt)) {\n                      var kt,\n                        Et,\n                        Nt = jt / ft;\n                      for (xt = bt; null !== xt; )\n                        (kt = Nt * xt.style.flex + p(xt, I)) !==\n                          (Et = M(xt, I, kt)) &&\n                          ((jt -= Et), (ft -= xt.style.flex)),\n                          (xt = xt.nextFlexChild);\n                      for (\n                        (Nt = jt / ft) < 0 && (Nt = 0), xt = bt;\n                        null !== xt;\n\n                      )\n                        (xt.layout[r[I]] = M(\n                          xt,\n                          I,\n                          Nt * xt.style.flex + p(xt, I),\n                        )),\n                          (ht = void 0),\n                          x(c, A)\n                            ? (ht = c.layout[r[A]] - D)\n                            : tt || (ht = E - f(c, A) - D),\n                          N(xt, ht, P),\n                          (G = xt),\n                          (xt = xt.nextFlexChild),\n                          (G.nextFlexChild = null);\n                    } else\n                      \"flex-start\" !== V &&\n                        (\"center\" === V\n                          ? (St = jt / 2)\n                          : \"flex-end\" === V\n                          ? (St = jt)\n                          : \"space-between\" === V\n                          ? ((jt = S(jt, 0)),\n                            (Ct = dt + pt - 1 != 0 ? jt / (dt + pt - 1) : 0))\n                          : \"space-around\" === V &&\n                            (St = (Ct = jt / (dt + pt)) / 2));\n                    for (wt += St, X = yt; X < ot; ++X)\n                      \"absolute\" === v((G = c.children[X])) && w(G, t[I])\n                        ? (G.layout[n[I]] = O(G, t[I]) + u(c, I) + a(G, I))\n                        : ((G.layout[n[I]] += wt),\n                          $ && j(c, G, I),\n                          \"relative\" === v(G) &&\n                            ((wt += Ct + b(G, I)),\n                            (Ot = S(Ot, M(G, B, b(G, B))))));\n                    var Tt = c.layout[r[B]];\n                    for (J || (Tt = S(M(c, B, Ot + Q), Q)), X = mt; X < ot; ++X)\n                      if (\"absolute\" === v((G = c.children[X])) && w(G, t[B]))\n                        G.layout[n[B]] = O(G, t[B]) + u(c, B) + a(G, B);\n                      else {\n                        var Pt,\n                          It = Z;\n                        if (\"relative\" === v(G))\n                          if (\"stretch\" === (Pt = g(c, G)))\n                            i(G.layout[r[B]]) &&\n                              (G.layout[r[B]] = S(\n                                M(G, B, Tt - Q - f(G, B)),\n                                p(G, B),\n                              ));\n                          else if (\"flex-start\" !== Pt) {\n                            var Bt = Tt - Q - b(G, B);\n                            It += \"center\" === Pt ? Bt / 2 : Bt;\n                          }\n                        (G.layout[n[B]] += st + It), J && j(c, G, B);\n                      }\n                    (st += Ot), (ut = S(ut, wt)), (ct += 1), (it = ot);\n                  }\n                  if (ct > 1 && J) {\n                    var At = c.layout[r[B]] - Q,\n                      Lt = At - st,\n                      Dt = 0,\n                      _t = Z,\n                      Rt = (function (t) {\n                        return t.style.alignContent\n                          ? t.style.alignContent\n                          : \"flex-start\";\n                      })(c);\n                    \"flex-end\" === Rt\n                      ? (_t += Lt)\n                      : \"center\" === Rt\n                      ? (_t += Lt / 2)\n                      : \"stretch\" === Rt && At > st && (Dt = Lt / ct);\n                    var Yt = 0;\n                    for (X = 0; X < ct; ++X) {\n                      var Ft = Yt,\n                        zt = 0;\n                      for (W = Ft; W < L; ++W)\n                        if (\"relative\" === v((G = c.children[W]))) {\n                          if (G.lineIndex !== X) break;\n                          i(G.layout[r[B]]) ||\n                            (zt = S(zt, G.layout[r[B]] + f(G, B)));\n                        }\n                      for (Yt = W, zt += Dt, W = Ft; W < Yt; ++W)\n                        if (\"relative\" === v((G = c.children[W]))) {\n                          var Xt = g(c, G);\n                          if (\"flex-start\" === Xt)\n                            G.layout[n[B]] = _t + a(G, B);\n                          else if (\"flex-end\" === Xt)\n                            G.layout[n[B]] = _t + zt - s(G, B) - G.layout[r[B]];\n                          else if (\"center\" === Xt) {\n                            var Wt = G.layout[r[B]];\n                            G.layout[n[B]] = _t + (zt - Wt) / 2;\n                          } else\n                            \"stretch\" === Xt && (G.layout[n[B]] = _t + a(G, B));\n                        }\n                      _t += zt;\n                    }\n                  }\n                  var Gt = !1,\n                    qt = !1;\n                  if (\n                    ($ ||\n                      ((c.layout[r[I]] = S(M(c, I, ut + l(c, I)), K)),\n                      (\"row-reverse\" !== I && \"column-reverse\" !== I) ||\n                        (Gt = !0)),\n                    J ||\n                      ((c.layout[r[B]] = S(M(c, B, st + Q), Q)),\n                      (\"row-reverse\" !== B && \"column-reverse\" !== B) ||\n                        (qt = !0)),\n                    Gt || qt)\n                  )\n                    for (X = 0; X < L; ++X)\n                      (G = c.children[X]), Gt && j(c, G, I), qt && j(c, G, B);\n                  for (nt = et; null !== nt; ) {\n                    for (W = 0; W < 2; W++)\n                      (q = 0 !== W ? \"row\" : \"column\"),\n                        !i(c.layout[r[q]]) &&\n                          !x(nt, q) &&\n                          w(nt, t[q]) &&\n                          w(nt, e[q]) &&\n                          (nt.layout[r[q]] = S(\n                            M(\n                              nt,\n                              q,\n                              c.layout[r[q]] -\n                                d(c, q) -\n                                f(nt, q) -\n                                O(nt, t[q]) -\n                                O(nt, e[q]),\n                            ),\n                            p(nt, q),\n                          )),\n                        w(nt, e[q]) &&\n                          !w(nt, t[q]) &&\n                          (nt.layout[t[q]] =\n                            c.layout[r[q]] - nt.layout[r[q]] - O(nt, e[q]));\n                    (G = nt),\n                      (nt = nt.nextAbsoluteChild),\n                      (G.nextAbsoluteChild = null);\n                  }\n                }\n                function N(t, e, n) {\n                  t.shouldUpdate = !0;\n                  var r = t.style.direction || \"ltr\";\n                  !t.isDirty &&\n                  t.lastLayout &&\n                  t.lastLayout.requestedHeight === t.layout.height &&\n                  t.lastLayout.requestedWidth === t.layout.width &&\n                  t.lastLayout.parentMaxWidth === e &&\n                  t.lastLayout.direction === r\n                    ? ((t.layout.width = t.lastLayout.width),\n                      (t.layout.height = t.lastLayout.height),\n                      (t.layout.top = t.lastLayout.top),\n                      (t.layout.left = t.lastLayout.left))\n                    : (t.lastLayout || (t.lastLayout = {}),\n                      (t.lastLayout.requestedWidth = t.layout.width),\n                      (t.lastLayout.requestedHeight = t.layout.height),\n                      (t.lastLayout.parentMaxWidth = e),\n                      (t.lastLayout.direction = r),\n                      t.children.forEach(function (t) {\n                        (t.layout.width = void 0),\n                          (t.layout.height = void 0),\n                          (t.layout.top = 0),\n                          (t.layout.left = 0);\n                      }),\n                      E(t, e, n),\n                      (t.lastLayout.width = t.layout.width),\n                      (t.lastLayout.height = t.layout.height),\n                      (t.lastLayout.top = t.layout.top),\n                      (t.lastLayout.left = t.layout.left));\n                }\n                return {\n                  layoutNodeImpl: E,\n                  computeLayout: N,\n                  fillNodes: function t(e) {\n                    return (\n                      (e.layout && !e.isDirty) ||\n                        (e.layout = {\n                          width: void 0,\n                          height: void 0,\n                          top: 0,\n                          left: 0,\n                          right: 0,\n                          bottom: 0,\n                        }),\n                      e.style || (e.style = {}),\n                      e.children || (e.children = []),\n                      e.children.forEach(t),\n                      e\n                    );\n                  },\n                };\n              })();\n              return (\n                \"object\" === a(e) && (t.exports = n),\n                function (t) {\n                  n.fillNodes(t), n.computeLayout(t);\n                }\n              );\n            })\n              ? r.apply(e, i)\n              : r) || (t.exports = o);\n    },\n    function (t, e, n) {\n      \"use strict\";\n      (function (t) {\n        n.d(e, \"a\", function () {\n          return d;\n        });\n        var r = function () {\n            for (var t = 0, e = 0, n = arguments.length; e < n; e++)\n              t += arguments[e].length;\n            var r = Array(t),\n              i = 0;\n            for (e = 0; e < n; e++)\n              for (var o = arguments[e], a = 0, s = o.length; a < s; a++, i++)\n                r[i] = o[a];\n            return r;\n          },\n          i = function (t, e, n) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.type = \"browser\");\n          },\n          o = function (e) {\n            (this.version = e),\n              (this.type = \"node\"),\n              (this.name = \"node\"),\n              (this.os = t.platform);\n          },\n          a = function (t, e, n, r) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.bot = r),\n              (this.type = \"bot-device\");\n          },\n          s = function () {\n            (this.type = \"bot\"),\n              (this.bot = !0),\n              (this.name = \"bot\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          u = function () {\n            (this.type = \"react-native\"),\n              (this.name = \"react-native\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          c =\n            /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/,\n          h = [\n            [\"aol\", /AOLShield\\/([0-9\\._]+)/],\n            [\"edge\", /Edge\\/([0-9\\._]+)/],\n            [\"edge-ios\", /EdgiOS\\/([0-9\\._]+)/],\n            [\"yandexbrowser\", /YaBrowser\\/([0-9\\._]+)/],\n            [\"kakaotalk\", /KAKAOTALK\\s([0-9\\.]+)/],\n            [\"samsung\", /SamsungBrowser\\/([0-9\\.]+)/],\n            [\"silk\", /\\bSilk\\/([0-9._-]+)\\b/],\n            [\"miui\", /MiuiBrowser\\/([0-9\\.]+)$/],\n            [\"beaker\", /BeakerBrowser\\/([0-9\\.]+)/],\n            [\"edge-chromium\", /EdgA?\\/([0-9\\.]+)/],\n            [\n              \"chromium-webview\",\n              /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n            ],\n            [\"chrome\", /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"phantomjs\", /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"crios\", /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"firefox\", /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"fxios\", /FxiOS\\/([0-9\\.]+)/],\n            [\"opera-mini\", /Opera Mini.*Version\\/([0-9\\.]+)/],\n            [\"opera\", /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"opera\", /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"ie\", /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n            [\"ie\", /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n            [\"ie\", /MSIE\\s(7\\.0)/],\n            [\"bb10\", /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n            [\"android\", /Android\\s([0-9\\.]+)/],\n            [\"ios\", /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n            [\"safari\", /Version\\/([0-9\\._]+).*Safari/],\n            [\"facebook\", /FBAV\\/([0-9\\.]+)/],\n            [\"instagram\", /Instagram\\s([0-9\\.]+)/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n            [\n              \"searchbot\",\n              /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,\n            ],\n          ],\n          l = [\n            [\"iOS\", /iP(hone|od|ad)/],\n            [\"Android OS\", /Android/],\n            [\"BlackBerry OS\", /BlackBerry|BB10/],\n            [\"Windows Mobile\", /IEMobile/],\n            [\"Amazon OS\", /Kindle/],\n            [\"Windows 3.11\", /Win16/],\n            [\"Windows 95\", /(Windows 95)|(Win95)|(Windows_95)/],\n            [\"Windows 98\", /(Windows 98)|(Win98)/],\n            [\"Windows 2000\", /(Windows NT 5.0)|(Windows 2000)/],\n            [\"Windows XP\", /(Windows NT 5.1)|(Windows XP)/],\n            [\"Windows Server 2003\", /(Windows NT 5.2)/],\n            [\"Windows Vista\", /(Windows NT 6.0)/],\n            [\"Windows 7\", /(Windows NT 6.1)/],\n            [\"Windows 8\", /(Windows NT 6.2)/],\n            [\"Windows 8.1\", /(Windows NT 6.3)/],\n            [\"Windows 10\", /(Windows NT 10.0)/],\n            [\"Windows ME\", /Windows ME/],\n            [\"Open BSD\", /OpenBSD/],\n            [\"Sun OS\", /SunOS/],\n            [\"Chrome OS\", /CrOS/],\n            [\"Linux\", /(Linux)|(X11)/],\n            [\"Mac OS\", /(Mac_PowerPC)|(Macintosh)/],\n            [\"QNX\", /QNX/],\n            [\"BeOS\", /BeOS/],\n            [\"OS/2\", /OS\\/2/],\n          ];\n        function d(e) {\n          return e\n            ? p(e)\n            : \"undefined\" == typeof document &&\n              \"undefined\" != typeof navigator &&\n              \"ReactNative\" === navigator.product\n            ? new u()\n            : \"undefined\" != typeof navigator\n            ? p(navigator.userAgent)\n            : void 0 !== t && t.version\n            ? new o(t.version.slice(1))\n            : null;\n        }\n        function f(t) {\n          return (\n            \"\" !== t &&\n            h.reduce(function (e, n) {\n              var r = n[0],\n                i = n[1];\n              if (e) return e;\n              var o = i.exec(t);\n              return !!o && [r, o];\n            }, !1)\n          );\n        }\n        function p(t) {\n          var e = f(t);\n          if (!e) return null;\n          var n = e[0],\n            o = e[1];\n          if (\"searchbot\" === n) return new s();\n          var u = o[1] && o[1].split(/[._]/).slice(0, 3);\n          u\n            ? u.length < 3 &&\n              (u = r(\n                u,\n                (function (t) {\n                  for (var e = [], n = 0; n < t; n++) e.push(\"0\");\n                  return e;\n                })(3 - u.length),\n              ))\n            : (u = []);\n          var h = u.join(\".\"),\n            d = (function (t) {\n              for (var e = 0, n = l.length; e < n; e++) {\n                var r = l[e],\n                  i = r[0];\n                if (r[1].exec(t)) return i;\n              }\n              return null;\n            })(t),\n            p = c.exec(t);\n          return p && p[1] ? new a(n, h, d, p[1]) : new i(n, h, d);\n        }\n      }).call(this, n(32));\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, e) {\n      var n,\n        r,\n        i = (t.exports = {});\n      function o() {\n        throw new Error(\"setTimeout has not been defined\");\n      }\n      function a() {\n        throw new Error(\"clearTimeout has not been defined\");\n      }\n      function s(t) {\n        if (n === setTimeout) return setTimeout(t, 0);\n        if ((n === o || !n) && setTimeout)\n          return (n = setTimeout), setTimeout(t, 0);\n        try {\n          return n(t, 0);\n        } catch (e) {\n          try {\n            return n.call(null, t, 0);\n          } catch (e) {\n            return n.call(this, t, 0);\n          }\n        }\n      }\n      !(function () {\n        try {\n          n = \"function\" == typeof setTimeout ? setTimeout : o;\n        } catch (t) {\n          n = o;\n        }\n        try {\n          r = \"function\" == typeof clearTimeout ? clearTimeout : a;\n        } catch (t) {\n          r = a;\n        }\n      })();\n      var u,\n        c = [],\n        h = !1,\n        l = -1;\n      function d() {\n        h &&\n          u &&\n          ((h = !1), u.length ? (c = u.concat(c)) : (l = -1), c.length && f());\n      }\n      function f() {\n        if (!h) {\n          var t = s(d);\n          h = !0;\n          for (var e = c.length; e; ) {\n            for (u = c, c = []; ++l < e; ) u && u[l].run();\n            (l = -1), (e = c.length);\n          }\n          (u = null),\n            (h = !1),\n            (function (t) {\n              if (r === clearTimeout) return clearTimeout(t);\n              if ((r === a || !r) && clearTimeout)\n                return (r = clearTimeout), clearTimeout(t);\n              try {\n                r(t);\n              } catch (e) {\n                try {\n                  return r.call(null, t);\n                } catch (e) {\n                  return r.call(this, t);\n                }\n              }\n            })(t);\n        }\n      }\n      function p(t, e) {\n        (this.fun = t), (this.array = e);\n      }\n      function g() {}\n      (i.nextTick = function (t) {\n        var e = new Array(arguments.length - 1);\n        if (arguments.length > 1)\n          for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n        c.push(new p(t, e)), 1 !== c.length || h || s(f);\n      }),\n        (p.prototype.run = function () {\n          this.fun.apply(null, this.array);\n        }),\n        (i.title = \"browser\"),\n        (i.browser = !0),\n        (i.env = {}),\n        (i.argv = []),\n        (i.version = \"\"),\n        (i.versions = {}),\n        (i.on = g),\n        (i.addListener = g),\n        (i.once = g),\n        (i.off = g),\n        (i.removeListener = g),\n        (i.removeAllListeners = g),\n        (i.emit = g),\n        (i.prependListener = g),\n        (i.prependOnceListener = g),\n        (i.listeners = function (t) {\n          return [];\n        }),\n        (i.binding = function (t) {\n          throw new Error(\"process.binding is not supported\");\n        }),\n        (i.cwd = function () {\n          return \"/\";\n        }),\n        (i.chdir = function (t) {\n          throw new Error(\"process.chdir is not supported\");\n        }),\n        (i.umask = function () {\n          return 0;\n        });\n    },\n    function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"TimeBar\", function () {\n          return $e;\n        }),\n        n.d(e, \"SnapLine\", function () {\n          return qi;\n        }),\n        n.d(e, \"Tooltip\", function () {\n          return Hi;\n        }),\n        n.d(e, \"Legend\", function () {\n          return Zi;\n        }),\n        n.d(e, \"ZoomSlider\", function () {\n          return Ki;\n        }),\n        n.d(e, \"EdgeFilterLens\", function () {\n          return Ji;\n        }),\n        n.d(e, \"Fisheye\", function () {\n          return eo;\n        }),\n        n.d(e, \"MiniMap\", function () {\n          return io;\n        }),\n        n.d(e, \"Bundling\", function () {\n          return so;\n        }),\n        n.d(e, \"Menu\", function () {\n          return uo;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"default\", function () {\n          return Ut;\n        }),\n        n.d(r, \"assign\", function () {\n          return Et;\n        }),\n        n.d(r, \"format\", function () {\n          return Ht;\n        }),\n        n.d(r, \"parse\", function () {\n          return Vt;\n        }),\n        n.d(r, \"defaultI18n\", function () {\n          return It;\n        }),\n        n.d(r, \"setGlobalDateI18n\", function () {\n          return At;\n        }),\n        n.d(r, \"setGlobalDateMasks\", function () {\n          return qt;\n        });\n      var i = {};\n      n.r(i),\n        n.d(i, \"compare\", function () {\n          return Sn;\n        }),\n        n.d(i, \"getLineIntersect\", function () {\n          return jn;\n        }),\n        n.d(i, \"getRectIntersectByPoint\", function () {\n          return kn;\n        }),\n        n.d(i, \"getCircleIntersectByPoint\", function () {\n          return En;\n        }),\n        n.d(i, \"getEllipseIntersectByPoint\", function () {\n          return Nn;\n        }),\n        n.d(i, \"applyMatrix\", function () {\n          return Tn;\n        }),\n        n.d(i, \"invertMatrix\", function () {\n          return Pn;\n        }),\n        n.d(i, \"getCircleCenterByPoints\", function () {\n          return In;\n        }),\n        n.d(i, \"distance\", function () {\n          return Bn;\n        }),\n        n.d(i, \"scaleMatrix\", function () {\n          return An;\n        }),\n        n.d(i, \"floydWarshall\", function () {\n          return Ln;\n        }),\n        n.d(i, \"getAdjMatrix\", function () {\n          return Dn;\n        }),\n        n.d(i, \"translate\", function () {\n          return _n;\n        }),\n        n.d(i, \"move\", function () {\n          return Rn;\n        }),\n        n.d(i, \"scale\", function () {\n          return Yn;\n        }),\n        n.d(i, \"rotate\", function () {\n          return Fn;\n        }),\n        n.d(i, \"getDegree\", function () {\n          return zn;\n        }),\n        n.d(i, \"isPointInPolygon\", function () {\n          return Wn;\n        }),\n        n.d(i, \"intersectBBox\", function () {\n          return Gn;\n        }),\n        n.d(i, \"isPolygonsIntersect\", function () {\n          return qn;\n        }),\n        n.d(i, \"Line\", function () {\n          return Hn;\n        }),\n        n.d(i, \"getBBoxBoundLine\", function () {\n          return Vn;\n        }),\n        n.d(i, \"itemIntersectByLine\", function () {\n          return Zn;\n        }),\n        n.d(i, \"fractionToLine\", function () {\n          return Kn;\n        }),\n        n.d(i, \"getPointsCenter\", function () {\n          return Qn;\n        }),\n        n.d(i, \"squareDist\", function () {\n          return $n;\n        }),\n        n.d(i, \"pointLineSquareDist\", function () {\n          return Jn;\n        }),\n        n.d(i, \"isPointsOverlap\", function () {\n          return tr;\n        }),\n        n.d(i, \"pointRectSquareDist\", function () {\n          return er;\n        }),\n        n.d(i, \"pointLineDistance\", function () {\n          return nr;\n        });\n      var o = {};\n      n.r(o),\n        n.d(o, \"getBBox\", function () {\n          return gr;\n        }),\n        n.d(o, \"getLoopCfgs\", function () {\n          return yr;\n        }),\n        n.d(o, \"getLabelPosition\", function () {\n          return vr;\n        }),\n        n.d(o, \"traverseTree\", function () {\n          return br;\n        }),\n        n.d(o, \"traverseTreeUp\", function () {\n          return xr;\n        }),\n        n.d(o, \"getLetterWidth\", function () {\n          return wr;\n        }),\n        n.d(o, \"getTextSize\", function () {\n          return Or;\n        }),\n        n.d(o, \"plainCombosToTrees\", function () {\n          return Mr;\n        }),\n        n.d(o, \"reconstructTree\", function () {\n          return Sr;\n        }),\n        n.d(o, \"getComboBBox\", function () {\n          return Cr;\n        }),\n        n.d(o, \"shouldRefreshEdge\", function () {\n          return jr;\n        }),\n        n.d(o, \"cloneBesidesImg\", function () {\n          return kr;\n        });\n      var a = {};\n      n.r(a),\n        n.d(a, \"uniqueId\", function () {\n          return Ir;\n        }),\n        n.d(a, \"formatPadding\", function () {\n          return Br;\n        }),\n        n.d(a, \"cloneEvent\", function () {\n          return Ar;\n        }),\n        n.d(a, \"isViewportChanged\", function () {\n          return Lr;\n        }),\n        n.d(a, \"isNaN\", function () {\n          return Dr;\n        }),\n        n.d(a, \"calculationItemsBBox\", function () {\n          return _r;\n        }),\n        n.d(a, \"processParallelEdges\", function () {\n          return Rr;\n        });\n      var s = {};\n      n.r(s),\n        n.d(s, \"getSpline\", function () {\n          return oi;\n        }),\n        n.d(s, \"getControlPoint\", function () {\n          return ai;\n        }),\n        n.d(s, \"pointsToPolygon\", function () {\n          return si;\n        }),\n        n.d(s, \"pathToPoints\", function () {\n          return ui;\n        }),\n        n.d(s, \"getClosedSpline\", function () {\n          return ci;\n        }),\n        n.d(s, \"roundedHull\", function () {\n          return fi;\n        }),\n        n.d(s, \"paddedHull\", function () {\n          return pi;\n        });\n      var u = {};\n      n.r(u),\n        n.d(u, \"defaultSubjectColors\", function () {\n          return Fi;\n        });\n      var c,\n        h = n(1);\n      function l(t) {\n        if (/^[-\\+\\.\\d]+$/.test(t)) return Number(t);\n        if (/true|false/.test(t)) return Boolean(t);\n        if (/^\\s*\\[/.test(t))\n          try {\n            return JSON.parse(t);\n          } catch (e) {\n            throw new Error(\"解析数组\" + t + \"失败\");\n          }\n        if (/^\\s*\\{/.test(t))\n          try {\n            return JSON.parse(t);\n          } catch (e) {\n            throw new Error(\"解析对象\" + t + \"失败\");\n          }\n        return t;\n      }\n      function d(t) {\n        return (\n          c[t] ||\n          t.startsWith(\"rgb(\") ||\n          t.startsWith(\"rgba(\") ||\n          (t.startsWith(\"#\") && !isNaN(Number(\"0x\" + t.slice(1))))\n        );\n      }\n      function f(t, e) {\n        t &&\n          e &&\n          (t.attrs.id && e(\"id\", t.attrs.id),\n          t.attrs.class &&\n            p(t.attrs.class, /\\s+/g).forEach(function (t) {\n              return e(\"class\", t);\n            }),\n          e(\"tagName\", t.tagName));\n      }\n      function p(t, e) {\n        return e\n          ? t.split(e).filter(function (t) {\n              return \"\" != t;\n            })\n          : [t];\n      }\n      function g(t, e) {\n        if (!t || !e) return !1;\n        var n = e.match(/(^[^\\.#]+)/g),\n          r = e.match(/#[^\\.#]+/g),\n          i = e.match(/\\.[^\\.#]+/g),\n          o = Object(h.f)(\n            Object(h.f)(Object(h.f)([], n || []), r || []),\n            i || [],\n          ),\n          a = {};\n        f(t, function (t, e) {\n          switch (t) {\n            case \"id\":\n              a[\"#\" + e] = 1;\n              break;\n            case \"class\":\n              a[\".\" + e] = 1;\n              break;\n            case \"tagName\":\n              a[\"\" + e] = 1;\n          }\n        });\n        for (var s = 0, u = o; s < u.length; s++) {\n          var c = u[s];\n          if (!a[c]) return !1;\n        }\n        return !0;\n      }\n      !(function (t) {\n        (t[(t.aliceblue = 0)] = \"aliceblue\"),\n          (t[(t.antiquewhite = 1)] = \"antiquewhite\"),\n          (t[(t.aqua = 2)] = \"aqua\"),\n          (t[(t.aquamarine = 3)] = \"aquamarine\"),\n          (t[(t.azure = 4)] = \"azure\"),\n          (t[(t.beige = 5)] = \"beige\"),\n          (t[(t.bisque = 6)] = \"bisque\"),\n          (t[(t.black = 7)] = \"black\"),\n          (t[(t.blanchedalmond = 8)] = \"blanchedalmond\"),\n          (t[(t.blue = 9)] = \"blue\"),\n          (t[(t.blueviolet = 10)] = \"blueviolet\"),\n          (t[(t.brown = 11)] = \"brown\"),\n          (t[(t.burlywood = 12)] = \"burlywood\"),\n          (t[(t.cadetblue = 13)] = \"cadetblue\"),\n          (t[(t.chartreuse = 14)] = \"chartreuse\"),\n          (t[(t.chocolate = 15)] = \"chocolate\"),\n          (t[(t.coral = 16)] = \"coral\"),\n          (t[(t.cornflowerblue = 17)] = \"cornflowerblue\"),\n          (t[(t.cornsilk = 18)] = \"cornsilk\"),\n          (t[(t.crimson = 19)] = \"crimson\"),\n          (t[(t.cyan = 20)] = \"cyan\"),\n          (t[(t.darkblue = 21)] = \"darkblue\"),\n          (t[(t.darkcyan = 22)] = \"darkcyan\"),\n          (t[(t.darkgoldenrod = 23)] = \"darkgoldenrod\"),\n          (t[(t.darkgray = 24)] = \"darkgray\"),\n          (t[(t.darkgreen = 25)] = \"darkgreen\"),\n          (t[(t.darkgrey = 26)] = \"darkgrey\"),\n          (t[(t.darkkhaki = 27)] = \"darkkhaki\"),\n          (t[(t.darkmagenta = 28)] = \"darkmagenta\"),\n          (t[(t.darkolivegreen = 29)] = \"darkolivegreen\"),\n          (t[(t.darkorange = 30)] = \"darkorange\"),\n          (t[(t.darkorchid = 31)] = \"darkorchid\"),\n          (t[(t.darkred = 32)] = \"darkred\"),\n          (t[(t.darksalmon = 33)] = \"darksalmon\"),\n          (t[(t.darkseagreen = 34)] = \"darkseagreen\"),\n          (t[(t.darkslateblue = 35)] = \"darkslateblue\"),\n          (t[(t.darkslategray = 36)] = \"darkslategray\"),\n          (t[(t.darkslategrey = 37)] = \"darkslategrey\"),\n          (t[(t.darkturquoise = 38)] = \"darkturquoise\"),\n          (t[(t.darkviolet = 39)] = \"darkviolet\"),\n          (t[(t.deeppink = 40)] = \"deeppink\"),\n          (t[(t.deepskyblue = 41)] = \"deepskyblue\"),\n          (t[(t.dimgray = 42)] = \"dimgray\"),\n          (t[(t.dimgrey = 43)] = \"dimgrey\"),\n          (t[(t.dodgerblue = 44)] = \"dodgerblue\"),\n          (t[(t.firebrick = 45)] = \"firebrick\"),\n          (t[(t.floralwhite = 46)] = \"floralwhite\"),\n          (t[(t.forestgreen = 47)] = \"forestgreen\"),\n          (t[(t.fuchsia = 48)] = \"fuchsia\"),\n          (t[(t.gainsboro = 49)] = \"gainsboro\"),\n          (t[(t.ghostwhite = 50)] = \"ghostwhite\"),\n          (t[(t.gold = 51)] = \"gold\"),\n          (t[(t.goldenrod = 52)] = \"goldenrod\"),\n          (t[(t.gray = 53)] = \"gray\"),\n          (t[(t.green = 54)] = \"green\"),\n          (t[(t.greenyellow = 55)] = \"greenyellow\"),\n          (t[(t.grey = 56)] = \"grey\"),\n          (t[(t.honeydew = 57)] = \"honeydew\"),\n          (t[(t.hotpink = 58)] = \"hotpink\"),\n          (t[(t.indianred = 59)] = \"indianred\"),\n          (t[(t.indigo = 60)] = \"indigo\"),\n          (t[(t.ivory = 61)] = \"ivory\"),\n          (t[(t.khaki = 62)] = \"khaki\"),\n          (t[(t.lavender = 63)] = \"lavender\"),\n          (t[(t.lavenderblush = 64)] = \"lavenderblush\"),\n          (t[(t.lawngreen = 65)] = \"lawngreen\"),\n          (t[(t.lemonchiffon = 66)] = \"lemonchiffon\"),\n          (t[(t.lightblue = 67)] = \"lightblue\"),\n          (t[(t.lightcoral = 68)] = \"lightcoral\"),\n          (t[(t.lightcyan = 69)] = \"lightcyan\"),\n          (t[(t.lightgoldenrodyellow = 70)] = \"lightgoldenrodyellow\"),\n          (t[(t.lightgray = 71)] = \"lightgray\"),\n          (t[(t.lightgreen = 72)] = \"lightgreen\"),\n          (t[(t.lightgrey = 73)] = \"lightgrey\"),\n          (t[(t.lightpink = 74)] = \"lightpink\"),\n          (t[(t.lightsalmon = 75)] = \"lightsalmon\"),\n          (t[(t.lightseagreen = 76)] = \"lightseagreen\"),\n          (t[(t.lightskyblue = 77)] = \"lightskyblue\"),\n          (t[(t.lightslategray = 78)] = \"lightslategray\"),\n          (t[(t.lightslategrey = 79)] = \"lightslategrey\"),\n          (t[(t.lightsteelblue = 80)] = \"lightsteelblue\"),\n          (t[(t.lightyellow = 81)] = \"lightyellow\"),\n          (t[(t.lime = 82)] = \"lime\"),\n          (t[(t.limegreen = 83)] = \"limegreen\"),\n          (t[(t.linen = 84)] = \"linen\"),\n          (t[(t.magenta = 85)] = \"magenta\"),\n          (t[(t.maroon = 86)] = \"maroon\"),\n          (t[(t.mediumaquamarine = 87)] = \"mediumaquamarine\"),\n          (t[(t.mediumblue = 88)] = \"mediumblue\"),\n          (t[(t.mediumorchid = 89)] = \"mediumorchid\"),\n          (t[(t.mediumpurple = 90)] = \"mediumpurple\"),\n          (t[(t.mediumseagreen = 91)] = \"mediumseagreen\"),\n          (t[(t.mediumslateblue = 92)] = \"mediumslateblue\"),\n          (t[(t.mediumspringgreen = 93)] = \"mediumspringgreen\"),\n          (t[(t.mediumturquoise = 94)] = \"mediumturquoise\"),\n          (t[(t.mediumvioletred = 95)] = \"mediumvioletred\"),\n          (t[(t.midnightblue = 96)] = \"midnightblue\"),\n          (t[(t.mintcream = 97)] = \"mintcream\"),\n          (t[(t.mistyrose = 98)] = \"mistyrose\"),\n          (t[(t.moccasin = 99)] = \"moccasin\"),\n          (t[(t.navajowhite = 100)] = \"navajowhite\"),\n          (t[(t.navy = 101)] = \"navy\"),\n          (t[(t.oldlace = 102)] = \"oldlace\"),\n          (t[(t.olive = 103)] = \"olive\"),\n          (t[(t.olivedrab = 104)] = \"olivedrab\"),\n          (t[(t.orange = 105)] = \"orange\"),\n          (t[(t.orangered = 106)] = \"orangered\"),\n          (t[(t.orchid = 107)] = \"orchid\"),\n          (t[(t.palegoldenrod = 108)] = \"palegoldenrod\"),\n          (t[(t.palegreen = 109)] = \"palegreen\"),\n          (t[(t.paleturquoise = 110)] = \"paleturquoise\"),\n          (t[(t.palevioletred = 111)] = \"palevioletred\"),\n          (t[(t.papayawhip = 112)] = \"papayawhip\"),\n          (t[(t.peachpuff = 113)] = \"peachpuff\"),\n          (t[(t.peru = 114)] = \"peru\"),\n          (t[(t.pink = 115)] = \"pink\"),\n          (t[(t.plum = 116)] = \"plum\"),\n          (t[(t.powderblue = 117)] = \"powderblue\"),\n          (t[(t.purple = 118)] = \"purple\"),\n          (t[(t.red = 119)] = \"red\"),\n          (t[(t.rosybrown = 120)] = \"rosybrown\"),\n          (t[(t.royalblue = 121)] = \"royalblue\"),\n          (t[(t.saddlebrown = 122)] = \"saddlebrown\"),\n          (t[(t.salmon = 123)] = \"salmon\"),\n          (t[(t.sandybrown = 124)] = \"sandybrown\"),\n          (t[(t.seagreen = 125)] = \"seagreen\"),\n          (t[(t.seashell = 126)] = \"seashell\"),\n          (t[(t.sienna = 127)] = \"sienna\"),\n          (t[(t.silver = 128)] = \"silver\"),\n          (t[(t.skyblue = 129)] = \"skyblue\"),\n          (t[(t.slateblue = 130)] = \"slateblue\"),\n          (t[(t.slategray = 131)] = \"slategray\"),\n          (t[(t.slategrey = 132)] = \"slategrey\"),\n          (t[(t.snow = 133)] = \"snow\"),\n          (t[(t.springgreen = 134)] = \"springgreen\"),\n          (t[(t.steelblue = 135)] = \"steelblue\"),\n          (t[(t.tan = 136)] = \"tan\"),\n          (t[(t.teal = 137)] = \"teal\"),\n          (t[(t.thistle = 138)] = \"thistle\"),\n          (t[(t.tomato = 139)] = \"tomato\"),\n          (t[(t.turquoise = 140)] = \"turquoise\"),\n          (t[(t.violet = 141)] = \"violet\"),\n          (t[(t.wheat = 142)] = \"wheat\"),\n          (t[(t.white = 143)] = \"white\"),\n          (t[(t.whitesmoke = 144)] = \"whitesmoke\"),\n          (t[(t.yellow = 145)] = \"yellow\"),\n          (t[(t.yellowgreen = 146)] = \"yellowgreen\");\n      })(c || (c = {}));\n      var y = {\n          position: 1,\n          display: 1,\n          width: 1,\n          height: 1,\n          minWidth: 1,\n          minHeight: 1,\n          top: 1,\n          left: 1,\n          right: 1,\n          bottom: 1,\n          flex: 1,\n          margin: 1,\n          marginLeft: 1,\n          marginRight: 1,\n          marginTop: 1,\n          marginBottom: 1,\n          padding: 1,\n          paddingLeft: 1,\n          paddingRight: 1,\n          paddingTop: 1,\n          paddingBottom: 1,\n          borderWidth: 1,\n          borderLeftWidth: 1,\n          borderRightWidth: 1,\n          borderTopWidth: 1,\n          borderBottomWidth: 1,\n          flexDirection: 1,\n          justifyContent: 1,\n          alignItems: 1,\n          alignSelf: 1,\n          flexWrap: 1,\n        },\n        v = {};\n      function m(t, e) {\n        if (t) {\n          var n = t;\n          Array.isArray(n) || (n = [n]),\n            n.forEach(function (t) {\n              v[t] = \"function\" == typeof e ? e : l;\n            });\n        }\n      }\n      var b = function (t, e) {\n          var n = {},\n            r = e.split(/\\s/g).filter(function (t) {\n              return \"\" !== t;\n            });\n          return (\n            1 !== r.length || isNaN(r[0]) || (n[\"\" + t] = Number(r[0])),\n            2 === r.length &&\n              (!isNaN(Number(r[0])) &&\n                (n[t + \"Bottom\"] = n[t + \"Top\"] = Number(r[0])),\n              !isNaN(Number(r[1])) &&\n                (n[t + \"Left\"] = n[t + \"Right\"] = Number(r[1]))),\n            3 === r.length &&\n              (!isNaN(Number(r[0])) && (n[t + \"Top\"] = Number(r[0])),\n              !isNaN(Number(r[1])) &&\n                (n[t + \"Left\"] = n[t + \"Right\"] = Number(r[1])),\n              !isNaN(Number(r[2])) && (n[t + \"Bottom\"] = Number(r[2]))),\n            4 === r.length &&\n              (!isNaN(Number(r[0])) && (n[t + \"Top\"] = Number(r[0])),\n              !isNaN(Number(r[1])) && (n[t + \"Right\"] = Number(r[1])),\n              !isNaN(Number(r[2])) && (n[t + \"Bottom\"] = Number(r[2])),\n              !isNaN(Number(r[3])) && (n[t + \"Left\"] = Number(r[3]))),\n            n\n          );\n        },\n        x = [\"solid\", \"dashed\"];\n      function w(t, e) {\n        if (v[t]) return v[t](e);\n        try {\n          return l(e);\n        } catch (t) {\n          return console.error(t), e;\n        }\n      }\n      m(\"padding\", b.bind(null, \"padding\")),\n        m(\"margin\", b.bind(null, \"margin\")),\n        m(\"border-radius\", function (t) {\n          var e = {},\n            n = t.split(/\\s/g).filter(function (t) {\n              return \"\" !== t;\n            });\n          return (\n            1 !== n.length ||\n              isNaN(n[0]) ||\n              ((e.borderTopLeftRadius = Number(n[0])),\n              (e.borderTopRightRadius = Number(n[0])),\n              (e.borderBottomRightRadius = Number(n[0])),\n              (e.borderBottomLeftRadius = Number(n[0]))),\n            2 === n.length &&\n              (!isNaN(Number(n[0])) &&\n                (e.borderTopLeftRadius = e.borderBottomRightRadius =\n                  Number(n[0])),\n              !isNaN(Number(n[2])) &&\n                (e.borderBottomLeftRadius = e.borderTopRightRadius =\n                  Number(n[1]))),\n            3 === n.length &&\n              (!isNaN(Number(n[0])) && (e.borderTopLeftRadius = Number(n[0])),\n              !isNaN(Number(n[1])) &&\n                (e.borderBottomLeftRadius = e.borderTopRightRadius =\n                  Number(n[1])),\n              !isNaN(Number(n[2])) &&\n                (e.borderBottomRightRadius = Number(n[2]))),\n            4 === n.length &&\n              (!isNaN(Number(n[0])) && (e.borderTopLeftRadius = Number(n[0])),\n              !isNaN(Number(n[1])) && (e.borderTopRightRadius = Number(n[1])),\n              !isNaN(Number(n[2])) &&\n                (e.borderBottomRightRadius = Number(n[2])),\n              !isNaN(Number(n[3])) &&\n                (e.borderBottomLeftRadius = Number(n[3]))),\n            e\n          );\n        }),\n        m(\"border\", function (t) {\n          for (\n            var e = {},\n              n = 0,\n              r = t.split(/\\s/g).filter(function (t) {\n                return \"\" !== t;\n              });\n            n < r.length;\n            n++\n          ) {\n            var i = r[n];\n            isNaN(Number(i))\n              ? d(i)\n                ? (e.borderColor = i)\n                : x.includes(i) && (e.borderStyle = i)\n              : (e.borderWidth = Number(i));\n          }\n          return e;\n        }),\n        m(\"background\", function (t) {\n          for (\n            var e = {},\n              n = 0,\n              r = t.split(/\\s/g).filter(function (t) {\n                return \"\" !== t;\n              });\n            n < r.length;\n            n++\n          )\n            if (d((t = r[n]))) e.backgroundColor = t;\n            else if (null == t ? void 0 : t.startsWith(\"url\")) {\n              var i = t.match(/url\\((.+?)\\)/);\n              i && (e.backgroundImage = i[1]);\n            }\n          return e;\n        }),\n        m([\"box-shadow\", \"text-shadow\"], function (t) {\n          for (\n            var e = {},\n              n = t.split(/\\s/g).filter(function (t) {\n                return \"\" !== t;\n              }),\n              r = [\n                \"shadowOffsetX\",\n                \"shadowOffsetY\",\n                \"shadowBlur\",\n                \"shadowColor\",\n              ];\n            n.length;\n\n          ) {\n            var i = n.shift();\n            if (isNaN(Number(i))) d(i) && (e.shadowColor = i);\n            else e[r.shift()] = Number(i);\n          }\n          return e;\n        });\n      var O = function () {\n          (this.type = \"\"),\n            (this.tagName = \"\"),\n            (this.attrs = {}),\n            (this.children = []),\n            (this.text = \"\");\n        },\n        M = (function () {\n          function t(t) {\n            (this.input = \"\"), (this.index = 0), (this.input = t);\n          }\n          return (\n            (t.prototype.stepNext = function () {\n              this.index++;\n            }),\n            (t.prototype.cur = function () {\n              return this.input[this.index];\n            }),\n            (t.prototype.twoChar = function () {\n              return this.input[this.index] + this.input[this.index + 1];\n            }),\n            (t.prototype.stepWhile = function (t) {\n              for (\n                var e = \"\";\n                this.index < this.input.length &&\n                t &&\n                t(this.input[this.index]);\n\n              )\n                e += this.input[this.index++];\n              return e;\n            }),\n            (t.prototype.skipWhiteSpace = function () {\n              this.stepWhile(function (t) {\n                return /\\s/.test(t);\n              });\n            }),\n            (t.prototype.getText = function () {\n              return this.stepWhile(function (t) {\n                return /[a-zA-Z0-9_]/.test(t);\n              });\n            }),\n            (t.prototype.eof = function () {\n              return this.index >= this.input.length;\n            }),\n            t\n          );\n        })(),\n        S = (function () {\n          function t(t) {\n            this.helper = new M(t);\n          }\n          return (\n            (t.prototype.parse = function () {\n              return this.parseNodes();\n            }),\n            (t.prototype.parseNodes = function () {\n              for (\n                var t = [];\n                t.push(this.parseNode()),\n                  this.helper.skipWhiteSpace(),\n                  !this.helper.eof() && \"</\" !== this.helper.twoChar();\n\n              );\n              return t;\n            }),\n            (t.prototype.parseNode = function () {\n              return (\n                this.helper.skipWhiteSpace(),\n                \"<\" === this.helper.cur()\n                  ? this.parseElement()\n                  : this.parseTextNode()\n              );\n            }),\n            (t.prototype.parseElement = function () {\n              var t,\n                e = new O();\n              (e.type = \"element\"), this.helper.stepNext();\n              var n = this.helper.getText();\n              if (\n                ((e.tagName = n),\n                (e.attrs = this.parseAttributes()),\n                \"/>\" === this.helper.twoChar())\n              )\n                return this.helper.stepNext(), this.helper.stepNext(), e;\n              if (\">\" !== this.helper.cur())\n                throw new Error(\"解析标签开始失败\");\n              if (\n                (this.helper.stepNext(),\n                this.helper.skipWhiteSpace(),\n                \"</\" !== this.helper.twoChar() &&\n                  ((t = e.children).push.apply(t, this.parseNodes()),\n                  this.helper.skipWhiteSpace()),\n                \"</\" !== this.helper.twoChar())\n              )\n                throw new Error(\"解析标签结束失败\");\n              if (\n                (this.helper.stepNext(),\n                this.helper.stepNext(),\n                this.helper.getText() !== n)\n              )\n                throw new Error(\"解析标签结束失败\");\n              if (\">\" !== this.helper.cur())\n                throw new Error(\"解析标签结束失败\");\n              return this.helper.stepNext(), e;\n            }),\n            (t.prototype.parseTextNode = function () {\n              var t = new O(),\n                e = this.helper.stepWhile(function (t) {\n                  return /[^<]/.test(t);\n                });\n              return (t.type = \"text\"), (t.tagName = \"text\"), (t.text = e), t;\n            }),\n            (t.prototype.parseAttributes = function () {\n              var t = {};\n              for (\n                this.helper.skipWhiteSpace();\n                !this.helper.eof() &&\n                \">\" !== this.helper.cur() &&\n                \"/>\" !== this.helper.twoChar();\n\n              ) {\n                var e = this.helper.stepWhile(function (t) {\n                  return /[^\\s=]/.test(t);\n                });\n                this.helper.skipWhiteSpace(),\n                  this.helper.stepNext(),\n                  this.helper.skipWhiteSpace();\n                var n = \"\";\n                '\"' === this.helper.cur()\n                  ? (this.helper.stepNext(),\n                    (n = this.helper.stepWhile(function (t) {\n                      return /[^\"]/.test(t);\n                    })),\n                    this.helper.stepNext())\n                  : \"'\" === this.helper.cur()\n                  ? (this.helper.stepNext(),\n                    (n = this.helper.stepWhile(function (t) {\n                      return /[^']/.test(t);\n                    })),\n                    this.helper.stepNext())\n                  : (n = this.helper.stepWhile(function (t) {\n                      return /[^\\s</>/]/.test(t);\n                    })),\n                  (t[e] = w(e, n)),\n                  this.helper.skipWhiteSpace();\n              }\n              return t;\n            }),\n            (t.prototype.removeQuote = function (t) {\n              var e = t;\n              return (\n                /^[\"']/.test(e[0]) && (e = e.slice(1)),\n                /[\"']$/.test(e[e.length - 1]) && (e = e.slice(0, -1)),\n                e\n              );\n            }),\n            t\n          );\n        })();\n      function C(t) {\n        return (C =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var j = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n      function k(t) {\n        return t ? t.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n      }\n      var E = function (t, e) {\n          e = e || {};\n          var n = 1,\n            r = 1;\n          function i(t) {\n            var e = t.match(/\\n/g);\n            e && (n += e.length);\n            var i = t.lastIndexOf(\"\\n\");\n            r = ~i ? t.length - i : r + t.length;\n          }\n          function o() {\n            var t = { line: n, column: r };\n            return function (e) {\n              return (e.position = new a(t)), f(), e;\n            };\n          }\n          function a(t) {\n            (this.start = t),\n              (this.end = { line: n, column: r }),\n              (this.source = e.source);\n          }\n          a.prototype.content = t;\n          var s = [];\n          function u(i) {\n            var o = new Error(e.source + \":\" + n + \":\" + r + \": \" + i);\n            if (\n              ((o.reason = i),\n              (o.filename = e.source),\n              (o.line = n),\n              (o.column = r),\n              (o.source = t),\n              !e.silent)\n            )\n              throw o;\n            s.push(o);\n          }\n          function c() {\n            return d(/^{\\s*/);\n          }\n          function h() {\n            return d(/^}/);\n          }\n          function l() {\n            var e,\n              n = [];\n            for (\n              f(), p(n);\n              t.length && \"}\" != t.charAt(0) && (e = E() || N());\n\n            )\n              !1 !== e && (n.push(e), p(n));\n            return n;\n          }\n          function d(e) {\n            var n = e.exec(t);\n            if (n) {\n              var r = n[0];\n              return i(r), (t = t.slice(r.length)), n;\n            }\n          }\n          function f() {\n            d(/^\\s*/);\n          }\n          function p(t) {\n            var e;\n            for (t = t || []; (e = g()); ) !1 !== e && t.push(e);\n            return t;\n          }\n          function g() {\n            var e = o();\n            if (\"/\" == t.charAt(0) && \"*\" == t.charAt(1)) {\n              for (\n                var n = 2;\n                \"\" != t.charAt(n) &&\n                (\"*\" != t.charAt(n) || \"/\" != t.charAt(n + 1));\n\n              )\n                ++n;\n              if (((n += 2), \"\" === t.charAt(n - 1)))\n                return u(\"End of comment missing\");\n              var a = t.slice(2, n - 2);\n              return (\n                (r += 2),\n                i(a),\n                (t = t.slice(n)),\n                (r += 2),\n                e({ type: \"comment\", comment: a })\n              );\n            }\n          }\n          function y() {\n            var t = d(/^([^{]+)/);\n            if (t)\n              return k(t[0])\n                .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, \"\")\n                .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (t) {\n                  return t.replace(/,/g, \"‌\");\n                })\n                .split(/\\s*(?![^(]*\\)),\\s*/)\n                .map(function (t) {\n                  return t.replace(/\\u200C/g, \",\");\n                });\n          }\n          function v() {\n            var t = o(),\n              e = d(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n            if (e) {\n              if (((e = k(e[0])), !d(/^:\\s*/)))\n                return u(\"property missing ':'\");\n              var n = d(\n                  /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/,\n                ),\n                r = t({\n                  type: \"declaration\",\n                  property: e.replace(j, \"\"),\n                  value: n ? k(n[0]).replace(j, \"\") : \"\",\n                });\n              return d(/^[;\\s]*/), r;\n            }\n          }\n          function m() {\n            var t,\n              e = [];\n            if (!c()) return u(\"missing '{'\");\n            for (p(e); (t = v()); ) !1 !== t && (e.push(t), p(e));\n            return h() ? e : u(\"missing '}'\");\n          }\n          function b() {\n            for (\n              var t, e = [], n = o();\n              (t = d(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/));\n\n            )\n              e.push(t[1]), d(/^,\\s*/);\n            if (e.length)\n              return n({ type: \"keyframe\", values: e, declarations: m() });\n          }\n          var x,\n            w = S(\"import\"),\n            O = S(\"charset\"),\n            M = S(\"namespace\");\n          function S(t) {\n            var e = new RegExp(\"^@\" + t + \"\\\\s*([^;]+);\");\n            return function () {\n              var n = o(),\n                r = d(e);\n              if (r) {\n                var i = { type: t };\n                return (i[t] = r[1].trim()), n(i);\n              }\n            };\n          }\n          function E() {\n            if (\"@\" == t[0])\n              return (\n                (function () {\n                  var t = o();\n                  if ((e = d(/^@([-\\w]+)?keyframes\\s*/))) {\n                    var e,\n                      n = e[1];\n                    if (!(e = d(/^([-\\w]+)\\s*/)))\n                      return u(\"@keyframes missing name\");\n                    var r,\n                      i = e[1];\n                    if (!c()) return u(\"@keyframes missing '{'\");\n                    for (var a = p(); (r = b()); )\n                      a.push(r), (a = a.concat(p()));\n                    return h()\n                      ? t({\n                          type: \"keyframes\",\n                          name: i,\n                          vendor: n,\n                          keyframes: a,\n                        })\n                      : u(\"@keyframes missing '}'\");\n                  }\n                })() ||\n                (function () {\n                  var t = o(),\n                    e = d(/^@media *([^{]+)/);\n                  if (e) {\n                    var n = k(e[1]);\n                    if (!c()) return u(\"@media missing '{'\");\n                    var r = p().concat(l());\n                    return h()\n                      ? t({ type: \"media\", media: n, rules: r })\n                      : u(\"@media missing '}'\");\n                  }\n                })() ||\n                (function () {\n                  var t = o(),\n                    e = d(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n                  if (e)\n                    return t({\n                      type: \"custom-media\",\n                      name: k(e[1]),\n                      media: k(e[2]),\n                    });\n                })() ||\n                (function () {\n                  var t = o(),\n                    e = d(/^@supports *([^{]+)/);\n                  if (e) {\n                    var n = k(e[1]);\n                    if (!c()) return u(\"@supports missing '{'\");\n                    var r = p().concat(l());\n                    return h()\n                      ? t({ type: \"supports\", supports: n, rules: r })\n                      : u(\"@supports missing '}'\");\n                  }\n                })() ||\n                w() ||\n                O() ||\n                M() ||\n                (function () {\n                  var t = o(),\n                    e = d(/^@([-\\w]+)?document *([^{]+)/);\n                  if (e) {\n                    var n = k(e[1]),\n                      r = k(e[2]);\n                    if (!c()) return u(\"@document missing '{'\");\n                    var i = p().concat(l());\n                    return h()\n                      ? t({\n                          type: \"document\",\n                          document: r,\n                          vendor: n,\n                          rules: i,\n                        })\n                      : u(\"@document missing '}'\");\n                  }\n                })() ||\n                (function () {\n                  var t = o();\n                  if (d(/^@page */)) {\n                    var e = y() || [];\n                    if (!c()) return u(\"@page missing '{'\");\n                    for (var n, r = p(); (n = v()); )\n                      r.push(n), (r = r.concat(p()));\n                    return h()\n                      ? t({ type: \"page\", selectors: e, declarations: r })\n                      : u(\"@page missing '}'\");\n                  }\n                })() ||\n                (function () {\n                  var t = o();\n                  if (d(/^@host\\s*/)) {\n                    if (!c()) return u(\"@host missing '{'\");\n                    var e = p().concat(l());\n                    return h()\n                      ? t({ type: \"host\", rules: e })\n                      : u(\"@host missing '}'\");\n                  }\n                })() ||\n                (function () {\n                  var t = o();\n                  if (d(/^@font-face\\s*/)) {\n                    if (!c()) return u(\"@font-face missing '{'\");\n                    for (var e, n = p(); (e = v()); )\n                      n.push(e), (n = n.concat(p()));\n                    return h()\n                      ? t({ type: \"font-face\", declarations: n })\n                      : u(\"@font-face missing '}'\");\n                  }\n                })()\n              );\n          }\n          function N() {\n            var t = o(),\n              e = y();\n            return e\n              ? (p(), t({ type: \"rule\", selectors: e, declarations: m() }))\n              : u(\"selector missing\");\n          }\n          return (function t(e, n) {\n            var r = e && \"string\" == typeof e.type,\n              i = r ? e : n;\n            for (var o in e) {\n              var a = e[o];\n              Array.isArray(a)\n                ? a.forEach(function (e) {\n                    t(e, i);\n                  })\n                : a && \"object\" === C(a) && t(a, i);\n            }\n            r &&\n              Object.defineProperty(e, \"parent\", {\n                configurable: !0,\n                writable: !0,\n                enumerable: !1,\n                value: n || null,\n              });\n            return e;\n          })(\n            ((x = l()),\n            {\n              type: \"stylesheet\",\n              stylesheet: { source: e.source, rules: x, parsingErrors: s },\n            }),\n          );\n        },\n        N = n(23),\n        T = n.n(N);\n      function P(t) {\n        return (P =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var I = function () {\n          (this.dom = null),\n            (this.style = null),\n            (this.children = []),\n            (this.originChildren = []);\n        },\n        B = { \"font-family\": \"serif\" },\n        A = [\n          \"font\",\n          \"fontFamily\",\n          \"fontWeight\",\n          \"fontSize\",\n          \"fontVariant\",\n          \"fontStretch\",\n          \"textIndent\",\n          \"textAlign\",\n          \"textShadow\",\n          \"lineHeight\",\n          \"color\",\n          \"direction\",\n          \"wordSpacing\",\n          \"letterSpacing\",\n          \"textTransform\",\n          \"captionSide\",\n          \"borderCollapse\",\n          \"emptyCells\",\n          \"listStyleType\",\n          \"listStyleImage\",\n          \"listStylePosition\",\n          \"listStyle\",\n          \"visibility\",\n          \"cursor\",\n        ],\n        L = (function () {\n          function t(t, e) {\n            (this.domTree = null),\n              (this.cssTree = null),\n              (this.rulesHash = { ids: {}, classes: {}, tagNames: {} }),\n              (this.domTree = t),\n              (this.cssTree = e);\n          }\n          return (\n            (t.prototype.parse = function () {\n              return (\n                this.parseRulesHash(this.cssTree),\n                this.genStyleTree(this.domTree)\n              );\n            }),\n            (t.prototype.parseRulesHash = function (t) {\n              for (\n                var e = this.rulesHash, n = 0, r = t.stylesheet.rules;\n                n < r.length;\n                n++\n              ) {\n                var i = r[n];\n                if (\"rule\" === i.type)\n                  for (var o = 0, a = i.selectors; o < a.length; o++) {\n                    var s = a[o],\n                      u = this.genKeySelector(s);\n                    switch (u[0]) {\n                      case \"#\":\n                        var c = u.slice(1);\n                        e.ids[c] = Object(h.f)(\n                          Object(h.f)([], e.ids[c] || []),\n                          [\n                            {\n                              selector: s,\n                              specificity: this.genSpecificity(s),\n                              style: this.genStyleFromRule(i),\n                            },\n                          ],\n                        );\n                        break;\n                      case \".\":\n                        var l = u.slice(1);\n                        e.classes[l] = Object(h.f)(\n                          Object(h.f)([], e.classes[l] || []),\n                          [\n                            {\n                              selector: s,\n                              specificity: this.genSpecificity(s),\n                              style: this.genStyleFromRule(i),\n                            },\n                          ],\n                        );\n                        break;\n                      default:\n                        e.tagNames[u] = Object(h.f)(\n                          Object(h.f)([], e.tagNames[u] || []),\n                          [\n                            {\n                              selector: s,\n                              specificity: this.genSpecificity(s),\n                              style: this.genStyleFromRule(i),\n                            },\n                          ],\n                        );\n                    }\n                  }\n              }\n            }),\n            (t.prototype.genStyleTree = function (t) {\n              for (var e = new I(), n = [[t, [], e]]; n.length; ) {\n                var r = n.pop(),\n                  i = r[0],\n                  o = r[1],\n                  a = r[2],\n                  s = r[3];\n                (a.dom = i),\n                  (a.style = this.computeCSS(\n                    i,\n                    o,\n                    null == s ? void 0 : s.style,\n                  ));\n                for (var u = 0, c = i.children; u < c.length; u++) {\n                  var l = c[u],\n                    d = new I();\n                  a.originChildren.push(d),\n                    n.push([l, Object(h.f)(Object(h.f)([], o), [i]), d, a]);\n                }\n              }\n              return e;\n            }),\n            (t.prototype.genSpecificity = function (t) {\n              var e,\n                n,\n                r =\n                  (null === (e = t.match(/#\\w+/g)) || void 0 === e\n                    ? void 0\n                    : e.length) || 0,\n                i =\n                  (null === (n = t.match(/\\.\\w+/g)) || void 0 === n\n                    ? void 0\n                    : n.length) || 0;\n              return (\n                100 * r +\n                10 * i +\n                (t.split(/\\s+|#|\\./).filter(function (t) {\n                  return \"\" !== t;\n                }).length -\n                  r -\n                  i)\n              );\n            }),\n            (t.prototype.genKeySelector = function (t) {\n              var e = p(t, /\\s/).pop(),\n                n = e.match(/(#[^\\.#]+)/);\n              return (null == n ? void 0 : n.length) > 0 ||\n                (null == (n = e.match(/\\.[^\\.#]+/)) ? void 0 : n.length) > 0\n                ? n[0]\n                : e;\n            }),\n            (t.prototype.genStyleFromRule = function (t) {\n              return this.genStyleFromDeclaration(t.declarations);\n            }),\n            (t.prototype.genStyleFromDeclaration = function (t) {\n              var e = {};\n              return (\n                t.forEach(function (t) {\n                  var n = t.value;\n                  e[t.property] = n;\n                }),\n                e\n              );\n            }),\n            (t.prototype.computeCSS = function (t, e, n) {\n              var r = this,\n                i = [];\n              f(t, function (t, e) {\n                switch (t) {\n                  case \"id\":\n                    i.push.apply(i, r.rulesHash.ids[e] || []);\n                    break;\n                  case \"class\":\n                    i.push.apply(i, r.rulesHash.classes[e] || []);\n                    break;\n                  case \"tagName\":\n                    i.push.apply(i, r.rulesHash.tagNames[e] || []);\n                }\n              });\n              var o = i.filter(function (t) {\n                for (\n                  var n = p(t.selector, /\\s+/g),\n                    r = n.length - 2,\n                    i = e.length - 1,\n                    o = !0;\n                  r > -1;\n                  r--\n                ) {\n                  for (var a = !1; i > -1; i--) {\n                    if (g(e[i], n[r])) {\n                      a = !0;\n                      break;\n                    }\n                  }\n                  if (!a) {\n                    o = !1;\n                    break;\n                  }\n                }\n                return o;\n              });\n              o.sort(function (t, e) {\n                return t.specificity - e.specificity;\n              });\n              for (\n                var a = o.reduce(\n                    function (t, e) {\n                      return Object.assign(t, e.style);\n                    },\n                    Object(h.a)({}, B),\n                  ),\n                  s = {},\n                  u = 0,\n                  c = Object.entries(a);\n                u < c.length;\n                u++\n              ) {\n                var l = c[u],\n                  d = l[0],\n                  y = l[1],\n                  v = d\n                    .split(\"-\")\n                    .map(function (t, e) {\n                      return e > 0 ? \"\" + t[0].toUpperCase() + t.slice(1) : t;\n                    })\n                    .join(\"\"),\n                  m = w(d, y);\n                \"object\" === P(m)\n                  ? (s = Object(h.a)(Object(h.a)({}, s), m))\n                  : (s[v] = m);\n              }\n              if (n) {\n                for (var b = 0, x = Object.entries(s); b < x.length; b++) {\n                  var O = x[b];\n                  d = O[0];\n                  \"inherit\" === (y = O[1]) &&\n                    A.includes(d) &&\n                    (delete s[d], void 0 !== n[d] && (s[d] = n[d]));\n                }\n                for (var M = 0, S = Object.entries(n); M < S.length; M++) {\n                  var C = S[M];\n                  (d = C[0]), (y = C[1]);\n                  A.includes(d) && !s[d] && (s[d] = y);\n                }\n              }\n              return s;\n            }),\n            t\n          );\n        })(),\n        D = {};\n      function _(t, e) {\n        D[t] = e;\n      }\n      function R(t) {\n        for (var e = [], n = 1; n < arguments.length; n++)\n          e[n - 1] = arguments[n];\n        var r = D[t];\n        if (!r) throw new Error(\"找不到标签\" + t + \"的构造函数\");\n        var i = new (r.bind.apply(r, Object(h.f)([void 0], e)))();\n        return i;\n      }\n      var Y = (function () {\n          function t(t) {\n            var e = this;\n            (this.styleNode = null),\n              (this.gNode = null),\n              (this.parent = null),\n              (this.children = []),\n              (this.isMounted = !1),\n              (this.isDisplay = !0),\n              (this._parentGNode = null),\n              (this._prevAttrs = null),\n              (this._prevStyle = null),\n              (this._prevLayout = null),\n              (this.events = {}),\n              (this.trigger = function (t) {\n                for (var n, r, i = t.target; i && !i.get(\"uiNode\"); )\n                  i = i.get(\"parent\");\n                (t.targetGNode = i || null),\n                  (t.uiNode =\n                    null !== (n = null == i ? void 0 : i.get(\"uiNode\")) &&\n                    void 0 !== n\n                      ? n\n                      : null),\n                  null === (r = e.events[t.type]) ||\n                    void 0 === r ||\n                    r.forEach(function (n) {\n                      return n(t, e);\n                    });\n              }),\n              (this.styleNode = t);\n          }\n          return (\n            Object.defineProperty(t.prototype, \"top\", {\n              get: function () {\n                var t, e;\n                return null ===\n                  (e =\n                    null === (t = this.styleNode) || void 0 === t\n                      ? void 0\n                      : t.layout) || void 0 === e\n                  ? void 0\n                  : e.top;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"left\", {\n              get: function () {\n                var t, e;\n                return null ===\n                  (e =\n                    null === (t = this.styleNode) || void 0 === t\n                      ? void 0\n                      : t.layout) || void 0 === e\n                  ? void 0\n                  : e.left;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"width\", {\n              get: function () {\n                var t, e;\n                return null ===\n                  (e =\n                    null === (t = this.styleNode) || void 0 === t\n                      ? void 0\n                      : t.layout) || void 0 === e\n                  ? void 0\n                  : e.width;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"height\", {\n              get: function () {\n                var t, e;\n                return null ===\n                  (e =\n                    null === (t = this.styleNode) || void 0 === t\n                      ? void 0\n                      : t.layout) || void 0 === e\n                  ? void 0\n                  : e.height;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"tagName\", {\n              get: function () {\n                var t, e;\n                return null ===\n                  (e =\n                    null === (t = this.styleNode) || void 0 === t\n                      ? void 0\n                      : t.dom) || void 0 === e\n                  ? void 0\n                  : e.tagName;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"style\", {\n              get: function () {\n                var t;\n                return null === (t = this.styleNode) || void 0 === t\n                  ? void 0\n                  : t.style;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"attributes\", {\n              get: function () {\n                var t, e;\n                return null ===\n                  (e =\n                    null === (t = this.styleNode) || void 0 === t\n                      ? void 0\n                      : t.dom) || void 0 === e\n                  ? void 0\n                  : e.attrs;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"_layout\", {\n              get: function () {\n                var t;\n                return null === (t = this.styleNode) || void 0 === t\n                  ? void 0\n                  : t._layout;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            Object.defineProperty(t.prototype, \"parentGNode\", {\n              get: function () {\n                var t;\n                return (\n                  (null === (t = this.parent) || void 0 === t\n                    ? void 0\n                    : t.gNode) || this._parentGNode\n                );\n              },\n              set: function (t) {\n                this._parentGNode = t;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            (t.prototype.setParent = function (t) {\n              this.parent = t;\n            }),\n            (t.prototype.appendChild = function () {\n              for (var t = this, e = [], n = 0; n < arguments.length; n++)\n                e[n] = arguments[n];\n              e.forEach(function (e) {\n                e.setParent(t),\n                  t.children.push(e),\n                  e.styleNode &&\n                    t.styleNode &&\n                    !t.styleNode.originChildren.includes(e.styleNode) &&\n                    t.styleNode.originChildren.push(e.styleNode);\n              }),\n                this.reflow();\n            }),\n            (t.prototype.removeChild = function (t) {\n              t && t.remove();\n            }),\n            (t.prototype.remove = function () {\n              var t,\n                e,\n                n = this.parent;\n              null === (t = this.gNode) || void 0 === t || t.remove(),\n                n &&\n                  (n.children.splice(1, n.children.indexOf(this)),\n                  null === (e = n.styleNode) ||\n                    void 0 === e ||\n                    e.children.splice(1, n.children.indexOf(this.styleNode)),\n                  this.isMounted && n.reflow()),\n                this.isMounted && this.unmount();\n            }),\n            (t.prototype.query = function (t) {\n              if (\"string\" == typeof t)\n                for (\n                  var e = [\n                    [\n                      this,\n                      t.split(/\\s+/g).filter(function (t) {\n                        return \"\" !== t;\n                      }),\n                    ],\n                  ];\n                  e.length;\n\n                )\n                  for (\n                    var n = e.shift(),\n                      r = n[0],\n                      i = n[1],\n                      o = 0,\n                      a = r.children;\n                    o < a.length;\n                    o++\n                  ) {\n                    var s = a[o],\n                      u = [];\n                    if (s.styleNode && g(s.styleNode.dom, i[0])) {\n                      if (0 === i.slice(1).length) return s;\n                      u = i.slice(1);\n                    } else u = i;\n                    e.push([s, u]);\n                  }\n            }),\n            (t.prototype.queryAll = function (t) {\n              if (\"string\" == typeof t) {\n                for (\n                  var e = [],\n                    n = [\n                      [\n                        this,\n                        t.split(/\\s+/g).filter(function (t) {\n                          return \"\" !== t;\n                        }),\n                        e,\n                      ],\n                    ];\n                  n.length;\n\n                )\n                  for (\n                    var r = n.shift(),\n                      i = r[0],\n                      o = r[1],\n                      a = r[2],\n                      s = 0,\n                      u = i.children;\n                    s < u.length;\n                    s++\n                  ) {\n                    var c = u[s],\n                      h = [];\n                    c.styleNode && g(c.styleNode.dom, o[0])\n                      ? 0 === o.slice(1).length\n                        ? (a.push(c), (h = [o[0]]))\n                        : (h = o.slice(1))\n                      : (h = o),\n                      n.push([c, h, a]);\n                  }\n                return e;\n              }\n            }),\n            (t.prototype.manualMount = function (t) {\n              (this.parentGNode = t), this.layout(), this.mount();\n            }),\n            (t.prototype.reflow = function () {\n              var t;\n              this.parentGNode &&\n                (\"absolute\" !==\n                  (null === (t = this.style) || void 0 === t\n                    ? void 0\n                    : t.position) && this.parent\n                  ? this.parent.reflow()\n                  : (this.layout(), this.render()));\n            }),\n            (t.prototype.layout = function () {\n              (this._prevLayout = Object(h.a)({}, this._layout || {})),\n                this.clearLayout(),\n                (function (t) {\n                  for (var e = [t]; e.length; ) {\n                    var n = e.pop();\n                    n.children = n.originChildren.filter(function (t) {\n                      return \"none\" !== t.style.display && (e.push(t), !0);\n                    });\n                  }\n                  T()(t);\n                })(this.styleNode);\n            }),\n            (t.prototype.mount = function () {\n              var t;\n              this.isMounted ||\n                (\"none\" !==\n                (null === (t = this.style) || void 0 === t ? void 0 : t.display)\n                  ? ((this._prevAttrs = this.attributes),\n                    (this._prevStyle = this.style),\n                    this.draw(this.parentGNode),\n                    (this.isMounted = !0),\n                    this.gNode.set(\"uiNode\", this),\n                    this.gNode.on(\"*\", this.trigger),\n                    this.children.forEach(function (t) {\n                      return t.mount();\n                    }),\n                    this.didMount())\n                  : (this.isDisplay = !1));\n            }),\n            (t.prototype.didMount = function () {}),\n            (t.prototype.unmount = function () {\n              this.isMounted &&\n                ((this.isMounted = !1),\n                this.children.forEach(function (t) {\n                  return t.unmount();\n                }),\n                this.didUnmount());\n            }),\n            (t.prototype.didUnmount = function () {}),\n            (t.prototype.render = function () {\n              var t, e, n;\n              if (this.isMounted) {\n                if (\n                  \"none\" ===\n                  (null === (t = this.style) || void 0 === t\n                    ? void 0\n                    : t.display)\n                )\n                  return (\n                    (this.isDisplay = !1),\n                    null === (e = this.gNode) || void 0 === e || e.remove(!1),\n                    !1\n                  );\n                !1 === this.isDisplay &&\n                  ((this.isDisplay = !0),\n                  null === (n = this.parentGNode) ||\n                    void 0 === n ||\n                    n.add(this.gNode));\n                var r = this.shouldUpdate(\n                  this._prevAttrs,\n                  this._prevStyle,\n                  this._prevLayout,\n                );\n                r && this.draw(),\n                  this.children.forEach(function (t) {\n                    return t.render();\n                  }),\n                  r && this.didUpdate();\n              } else this.mount();\n            }),\n            (t.prototype.didUpdate = function () {}),\n            (t.prototype.shouldUpdate = function (t, e, n) {\n              return !0;\n            }),\n            (t.prototype.draw = function (t) {}),\n            (t.prototype.animate = function () {}),\n            (t.prototype.clearLayout = function () {\n              (this.styleNode.isDirty = !0),\n                this.children.forEach(function (t) {\n                  t.clearLayout();\n                });\n            }),\n            (t.prototype.setAttribute = function (t, e) {\n              var n;\n              if (this.styleNode && this.styleNode.dom) {\n                if (\n                  ((this._prevAttrs = Object(h.a)(\n                    {},\n                    this.styleNode.dom.attrs,\n                  )),\n                  (this.styleNode.dom.attrs[t] = e),\n                  !(null === (n = this.parent) || void 0 === n\n                    ? void 0\n                    : n.isMounted))\n                )\n                  return;\n                this.render();\n              }\n            }),\n            (t.prototype.setStyle = function (t, e) {\n              if (this.styleNode && this.styleNode.style) {\n                if (\n                  ((this._prevStyle = Object(h.a)(\n                    {},\n                    this.styleNode.dom.style,\n                  )),\n                  (this.styleNode.style[t] = e),\n                  this.parent && !this.parent.isMounted)\n                )\n                  return;\n                y[t] ? this.reflow() : this.render();\n              }\n            }),\n            (t.prototype.getAttribute = function (t) {\n              var e, n;\n              return null ===\n                (n =\n                  null === (e = this.styleNode) || void 0 === e\n                    ? void 0\n                    : e.dom) || void 0 === n\n                ? void 0\n                : n.attrs[t];\n            }),\n            (t.prototype.getStyle = function (t) {\n              var e, n, r;\n              return null !==\n                (n =\n                  null === (e = this.styleNode) || void 0 === e\n                    ? void 0\n                    : e.layout[t]) && void 0 !== n\n                ? n\n                : null === (r = this.styleNode) || void 0 === r\n                ? void 0\n                : r.style[t];\n            }),\n            (t.prototype.setText = function (t) {\n              var e = this.query(\"text\");\n              e &&\n                e.styleNode &&\n                e.styleNode.dom &&\n                ((e.styleNode.dom.text = t), e.render());\n            }),\n            (t.prototype.on = function (t, e) {\n              this.events[t] = Object(h.f)(\n                Object(h.f)([], this.events[t] || []),\n                [e],\n              );\n            }),\n            (t.prototype.off = function (t, e) {\n              if (e) {\n                var n = this.events[t],\n                  r = null == n ? void 0 : n.indexOf(e);\n                r && -1 !== r && (null == n || n.splice(r, 1));\n              } else delete this.events[t];\n            }),\n            t\n          );\n        })(),\n        F = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.backgroudNode = null), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.draw = function (t) {\n              var e, n;\n              this.gNode ||\n                (this.gNode = t.addGroup({\n                  id:\n                    null === (e = this.attributes) || void 0 === e\n                      ? void 0\n                      : e.id,\n                  className: this.styleNode.dom.attrs.class,\n                }));\n              var r = this.gNode,\n                i = this.styleNode;\n              r.resetMatrix(),\n                null === (n = this.backgroudNode) || void 0 === n || n.remove();\n              var o = (this.backgroudNode = r.addGroup());\n              r.translate(this.left, this.top);\n              var a = i.style;\n              \"number\" == typeof a.zIndex && r.setZIndex(a.zIndex),\n                o.addShape(\"rect\", {\n                  attrs: {\n                    x: 0,\n                    y: 0,\n                    fill: a.backgroundColor || \"#fff\",\n                    fillOpacity: a.backgroundOpacity,\n                    opacity: a.opacity,\n                    width: this.width,\n                    height: this.height,\n                    radius: [\n                      a.borderTopLeftRadius || 0,\n                      a.borderTopRightRadius || 0,\n                      a.borderBottomLeftRadius || 0,\n                      a.borderBottomLeftRadius || 0,\n                    ],\n                    shadowBlur: a.shadowBlur || 0,\n                    shadowColor: a.shadowColor || null,\n                    shadowOffsetX: a.shadowOffsetX || 0,\n                    shadowOffsetY: a.shadowOffsetY || 0,\n                  },\n                  capture: \"none\" !== a.pointerEvents,\n                }),\n                a.backgroundImage &&\n                  o.addShape(\"image\", {\n                    attrs: {\n                      x: 0,\n                      y: 0,\n                      img: a.url,\n                      width: this.width,\n                      height: this.height,\n                    },\n                    capture: !1,\n                  });\n              var s = {\n                attrs: {\n                  x: (a.borderWidth || 0) / 2,\n                  y: (a.borderWidth || 0) / 2,\n                  lineWidth: a.borderWidth,\n                  stroke: a.borderColor,\n                  width: this.width - (a.borderWidth || 0),\n                  height: this.height - (a.borderWidth || 0),\n                  radius: [\n                    (a.borderTopLeftRadius || 0) *\n                      ((this.width - (a.borderWidth || 0)) / this.width),\n                    (a.borderTopRightRadius || 0) *\n                      ((this.width - (a.borderWidth || 0)) / this.width),\n                    (a.borderBottomLeftRadius || 0) *\n                      ((this.width - (a.borderWidth || 0)) / this.width),\n                    (a.borderBottomLeftRadius || 0) *\n                      ((this.width - (a.borderWidth || 0)) / this.width),\n                  ],\n                },\n                capture: !1,\n              };\n              \"dashed\" === a.borderStyle &&\n                (s.attrs.lineDash = a.lineDash || [2, 2]),\n                o.addShape(\"rect\", s),\n                \"hidden\" === a.overflow &&\n                  r.setClip({\n                    type: \"rect\",\n                    attrs: {\n                      width: this.width,\n                      height: this.height,\n                      radius: [\n                        a.borderTopLeftRadius || 0,\n                        a.borderTopRightRadius || 0,\n                        a.borderBottomLeftRadius || 0,\n                        a.borderBottomLeftRadius || 0,\n                      ],\n                    },\n                  }),\n                o.toBack();\n            }),\n            e\n          );\n        })(Y),\n        z = n(13),\n        X = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getAttrs = function () {\n              var t = this.styleNode.style;\n              return {\n                x: this.styleNode.layout.left,\n                y: this.styleNode.layout.top,\n                textAlign: t.textAlign,\n                fill: t.color,\n                fontSize: t.fontSize || 12,\n                fontStyle: t.fontStyle,\n                fontFamily: t.fontFamily,\n                lineHeight: t.lineHeight || 0,\n                fontVariant: t.fontVariant,\n                fontWeight: t.fontWeight,\n                textBaseline: \"top\",\n                opacity: t.opacity,\n                fillOpacity: t.backgroundOpacity,\n              };\n            }),\n            (e.prototype.draw = function (t) {\n              var e = this.getAttrs();\n              this.gNode ||\n                (this.gNode = t.addShape(\"text\", {\n                  type: \"text\",\n                  attrs: e,\n                  capture: !1,\n                })),\n                this.update();\n            }),\n            (e.prototype.getMultiLineText = function (t, e, n) {\n              var r,\n                i =\n                  null === (r = this.parent.gNode.get(\"canvas\")) || void 0 === r\n                    ? void 0\n                    : r.get(\"context\");\n              if (!i) return t;\n              i.save();\n              var o = Object(z.assembleFont)(e);\n              if (((i.font = o), i.measureText(t).width < n)) return t;\n              for (var a = \"\", s = 0, u = 0, c = t; u < c.length; u++) {\n                var h = c[u],\n                  l = i.measureText(h).width;\n                (s += l) >= n ? ((s = l), (a += \"\\n\" + h)) : (a += h);\n              }\n              return i.restore(), a;\n            }),\n            (e.prototype.update = function () {\n              var t = this.styleNode.style,\n                e = this.getAttrs(),\n                n = this.gNode;\n              switch ((n.attr(e), n.resetMatrix(), t.textAlign)) {\n                case \"center\":\n                  n.translate(this.styleNode.layout.width / 2);\n                  break;\n                case \"right\":\n                  n.translate(this.styleNode.layout.width);\n              }\n              \"nowrap\" === t.whiteSpace\n                ? n.attr(\"text\", String(this.styleNode.dom.text))\n                : n.attr(\n                    \"text\",\n                    this.getMultiLineText(\n                      String(this.styleNode.dom.text),\n                      e,\n                      this.styleNode.layout.width,\n                    ),\n                  );\n            }),\n            e\n          );\n        })(Y),\n        W = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getAttrs = function () {\n              var t = this.styleNode,\n                e = t.style,\n                n = t.layout,\n                r = t.dom;\n              return Object(h.a)(\n                {\n                  fill: e.backgroundColor,\n                  lineWidth: e.borderWidth,\n                  fillOpacity: e.backgroundOpacity,\n                  stroke: e.borderColor,\n                  width: n.width - (e.borderWidth || 0),\n                  height: n.height - (e.borderWidth || 0),\n                },\n                r.attrs,\n              );\n            }),\n            (e.prototype.draw = function (t) {\n              var e = this.styleNode,\n                n = this.getAttrs(),\n                r = e.dom;\n              this.gNode ||\n                (this.gNode = t.addShape(r.attrs.type, { attrs: n })),\n                this.update();\n            }),\n            (e.prototype.update = function () {\n              var t,\n                e = this.getAttrs(),\n                n = this.gNode,\n                r = \"none\" !== this.styleNode.style.pointerEvents;\n              n.attr(e),\n                n.set(\"capture\", r),\n                n.resetMatrix(),\n                n.translate(this.left, this.top),\n                \"number\" ==\n                  typeof (null === (t = this.style) || void 0 === t\n                    ? void 0\n                    : t.zIndex) && n.setZIndex(this.style.zIndex);\n            }),\n            e\n          );\n        })(Y),\n        G = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.draw = function (t) {\n              var e = {\n                  x: this.styleNode.layout.left,\n                  y: this.styleNode.layout.top,\n                  img: this.styleNode.dom.attrs.src,\n                  width: this.styleNode.layout.width || 0,\n                  height: this.styleNode.layout.height || 0,\n                },\n                n = \"none\" !== this.styleNode.style.pointerEvents;\n              this.gNode ||\n                (this.gNode = t.addShape(\"image\", {\n                  type: \"image\",\n                  attrs: e,\n                  capture: n,\n                }));\n              var r = this.gNode;\n              switch (\n                (r.resetMatrix(),\n                r.set(\"capture\", n),\n                r.attr(e),\n                \"number\" == typeof this.styleNode.style.zIndex &&\n                  r.setZIndex(this.styleNode.style.zIndex),\n                this.styleNode.style.textAlign)\n              ) {\n                case \"center\":\n                  r.translate(this.styleNode.layout.width / 2);\n                  break;\n                case \"right\":\n                  r.translate(this.styleNode.layout.width);\n              }\n            }),\n            e\n          );\n        })(Y),\n        q = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return Object(h.c)(e, t), e;\n        })(F);\n      function H(t, e, n) {\n        var r = U(t, e, !0);\n        return r.manualMount(n), r;\n      }\n      function V(t, e, n) {\n        var r = U(t, e, !1);\n        return n && r.manualMount(n), r;\n      }\n      function U(t, e, n) {\n        void 0 === n && (n = !1);\n        for (\n          var r = (function (t, e) {\n              return new L(t, e).parse();\n            })(\n              (function (t, e) {\n                var n;\n                void 0 === e && (e = !0);\n                var r = new S(t).parse(),\n                  i = r[0];\n                return (\n                  \"root\" !==\n                    (null === (n = r[0]) || void 0 === n\n                      ? void 0\n                      : n.tagName) &&\n                    e &&\n                    (((i = new O()).tagName = \"root\"), (i.children = r)),\n                  i\n                );\n              })(t, n),\n              E(e),\n            ),\n            i = R(r.dom.tagName, r),\n            o = [[r, i]];\n          o.length;\n\n        )\n          for (\n            var a = o.pop(), s = a[0], u = a[1], c = 0, h = s.originChildren;\n            c < h.length;\n            c++\n          ) {\n            var l = h[c],\n              d = R(l.dom.tagName, l);\n            u.children.push(d), d.setParent(u), o.push([l, d]);\n          }\n        return i;\n      }\n      _(\"div\", F), _(\"text\", X), _(\"shape\", W), _(\"image\", G), _(\"root\", q);\n      var Z = {};\n      function K(t) {\n        for (var e = [], n = 1; n < arguments.length; n++)\n          e[n - 1] = arguments[n];\n        var r = Z[t];\n        null == r ||\n          r.forEach(function (t) {\n            t.apply(null, e);\n          });\n      }\n      function Q(t, e) {\n        Z[t] = Object(h.g)(Z[t] || [], [e]);\n      }\n      var $ = { fill: \"#416180\", opacity: 0.05 },\n        J = { fill: \"#416180\", opacity: 0.15, radius: 5 },\n        tt = { fill: \"#5B8FF9\", opacity: 0.3, cursor: \"grab\" },\n        et = {\n          width: 2,\n          height: 26,\n          fill: \"#1890ff\",\n          stroke: \"#1890ff\",\n          opacity: 1,\n          cursor: \"ew-resize\",\n          highLightFill: \"#0050b3\",\n        },\n        nt = {\n          fill: \"#fff\",\n          stroke: \"#1890ff\",\n          radius: 15,\n          opacity: 1,\n          lineWidth: 2,\n          cursor: \"ew-resize\",\n        },\n        rt = {\n          textBaseline: \"middle\",\n          fill: \"#000\",\n          opacity: 0.45,\n          fontSize: 12,\n        },\n        it = { fill: \"#607889\", opacity: 0.35, fontSize: 12, width: 50 },\n        ot = { width: 1, height: 4, fill: \"#ccc\" },\n        at = 2,\n        st = 18,\n        ut = { height: 4, width: 1, fill: \"#BFBFBF\" },\n        ct = { fill: \"#8c8c8c\", fontSize: 10, width: 50 },\n        ht = { fill: \"#5B8FF9\" },\n        lt = { fill: \"#e6e8e9\" },\n        dt = {\n          speed: 1,\n          contentWidth: 200,\n          height: 60,\n          fill: \"#fff\",\n          stroke: \"#fff\",\n          hideTimeTypeController: !1,\n          preBtnStyle: { fill: \"#aaa\" },\n          nextBtnStyle: { fill: \"#aaa\" },\n          playBtnStyle: { fill: \"#aaa\" },\n        };\n      var ft = function (t, e) {\n        var n = e.height,\n          r = (void 0 === n ? 16 : n) / 2,\n          i = \"\";\n        return (\n          \"next\" === t &&\n            (i =\n              \"\\n      <shape  type='path' path='[\\n        [\\\"M\\\", 0, \" +\n              (0 - r) +\n              '],\\n        [\"L\", ' +\n              r +\n              ', 0],\\n        [\"L\", 0, ' +\n              r +\n              '],\\n        [\"Z\", 0, ' +\n              (0 - r) +\n              '],\\n        [\"M\", 0, 0],\\n        [\"L\", ' +\n              (0 - r) +\n              \", \" +\n              (0 - r) +\n              '],\\n        [\"L\", ' +\n              (0 - r) +\n              \", \" +\n              r +\n              '],\\n        [\"Z\"]\\n      ]\\'/>  \\n    '),\n          \"prev\" === t &&\n            (i =\n              \"\\n      <shape  type='path' path='[\\n        [\\\"M\\\", 0, \" +\n              (0 - r) +\n              '],\\n        [\"L\", ' +\n              (0 - r) +\n              ', 0],\\n        [\"L\", 0, ' +\n              (0 + r) +\n              '],\\n        [\"L\", 0, ' +\n              (0 - r) +\n              '],\\n        [\"M\", 0, 0],\\n        [\"L\", ' +\n              (0 + r) +\n              \", \" +\n              (0 - r) +\n              '],\\n        [\"L\", ' +\n              (0 + r) +\n              \", \" +\n              (0 + r) +\n              '],\\n        [\"Z\"]\\n      ]\\'/>  \\n    '),\n          V(\n            i,\n            \"\\n    shape {\\n      margin-left: \" +\n              r +\n              \";\\n      width: \" +\n              r +\n              \";\\n      background: \" +\n              e.fill +\n              \";\\n    }\\n  \",\n          )\n        );\n      };\n      var pt = function (t) {\n          var e = t || {},\n            n = e.radius,\n            r = void 0 === n ? 15 : n,\n            i = e.fill,\n            o = (r * Math.sqrt(3)) / 2,\n            a = V(\n              '\\n  <div id=\\'play_Btn\\'>\\n    <shape class=\"start\" type=\\'path\\' path=\\'[\\n      [\"M\", 0 , 0],\\n      [\"L\", ' +\n                o +\n                \" , \" +\n                r / 2 +\n                '],\\n      [\"L\", 0 , ' +\n                r +\n                \"]\\n    ]'/>\\n    <div class=\\\"pause\\\">\\n      <shape class='pause_0' type='rect' />\\n      <shape class='pause_1' type='rect' />\\n    </div>\\n  </div>\",\n              \"\\n    #play_Btn {\\n      width: \" +\n                2 * r +\n                \";\\n      height: \" +\n                2 * r +\n                \";\\n      background: #fff;\\n      border: 1 solid \" +\n                i +\n                \";\\n      border-radius: \" +\n                r +\n                \";\\n    }\\n    .start{\\n      position: absolute;\\n      top: \" +\n                r / 2 +\n                \";\\n      left: \" +\n                (r - o / 2 + 1) +\n                \" ;\\n      background: \" +\n                i +\n                \";\\n      width: \" +\n                r +\n                \";\\n      height: \" +\n                r +\n                \";\\n    }\\n    .pause {\\n      display: none;\\n    }\\n    .pause shape {\\n      position: absolute;\\n      background: \" +\n                i +\n                \";\\n      width: \" +\n                r / 4 +\n                \";\\n      height: \" +\n                r +\n                \";\\n    }\\n    .pause_1 {\\n      left: \" +\n                (4 * r) / 8 +\n                \";\\n    }\\n    .pause {\\n      position: absolute;\\n      top: \" +\n                r / 2 +\n                \";\\n      left: \" +\n                (5 * r) / 8 +\n                \";\\n    }\\n  \",\n            ),\n            s = a.query(\".start\"),\n            u = a.query(\".pause\"),\n            c = !0;\n          function h() {\n            s.setStyle(\"display\", c ? \"flex\" : \"none\"),\n              u.setStyle(\"display\", c ? \"none\" : \"flex\");\n          }\n          return (\n            h(),\n            a.on(\"tap\", function () {\n              K(c ? \"SLIDER_PLAY\" : \"SLIDER_PAUSE\"), (c = !c), h();\n            }),\n            a\n          );\n        },\n        gt = n(0);\n      var yt = function (t) {\n        var e = Object(gt.d)({}, dt, t),\n          n = e.wrapperWidth,\n          r = e.contentWidth,\n          i = e.height,\n          o = e.fill,\n          a = e.stroke,\n          s = e.nextBtnStyle,\n          u = e.preBtnStyle,\n          c = e.playBtnStyle,\n          h = e.speed,\n          l = V(\n            \"\\n    <div class='wrapper'>\\n      <div class='content'> \\n\\n      </div>\\n    </div>\\n  \",\n            \"\\n    .wrapper {\\n      display: flex;\\n      width: \" +\n              n +\n              \";\\n      height: \" +\n              i +\n              \";\\n      flex-wrap: nowrap;\\n      flex-direction: row;\\n      justify-content: center;\\n      align-items: center;\\n      background: \" +\n              o +\n              \";\\n      \" +\n              (a ? \"border: 1 solid \" + a + \";\" : \"\") +\n              \"\\n    }\\n    .content{\\n      display: flex;\\n      width: \" +\n              r +\n              \";\\n      flex-wrap: nowrap;\\n      flex-direction: row;\\n      justify-content: space-between;\\n      align-items: center;\\n      background-opacity: 0;\\n    }\\n\",\n          ),\n          d = ft(\"next\", s),\n          f = ft(\"prev\", u),\n          p = pt(c);\n        return (\n          K(\"SPEED_CHANGE\", h),\n          d.on(\"tap\", function () {\n            K(\"CONTROL_NEXT\");\n          }),\n          f.on(\"tap\", function () {\n            K(\"CONTROL_PREV\");\n          }),\n          l.query(\".content\").appendChild(f, p, d),\n          l\n        );\n      };\n      function vt(t, e) {\n        void 0 === e && (e = 20);\n        var n = !0,\n          r = null,\n          i = function () {\n            n\n              ? clearTimeout(r)\n              : (null == t || t(),\n                (r = setTimeout(function () {\n                  i();\n                }, e)));\n          };\n        return {\n          play: function () {\n            (n = !1), i();\n          },\n          stop: function () {\n            n = !0;\n          },\n          setSpeed: function (t) {\n            t > 10 && (t = 10), t < 1 && (t = 1), (e = 800 - (500 * t) / 9);\n          },\n        };\n      }\n      var mt = n(7),\n        bt = {};\n      function xt(t, e) {\n        bt[t] = e;\n      }\n      var wt = (function () {\n          function t(t) {\n            (this.type = \"base\"),\n              (this.isCategory = !1),\n              (this.isLinear = !1),\n              (this.isContinuous = !1),\n              (this.isIdentity = !1),\n              (this.values = []),\n              (this.range = [0, 1]),\n              (this.ticks = []),\n              (this.__cfg__ = t),\n              this.initCfg(),\n              this.init();\n          }\n          return (\n            (t.prototype.translate = function (t) {\n              return t;\n            }),\n            (t.prototype.change = function (t) {\n              Object(gt.a)(this.__cfg__, t), this.init();\n            }),\n            (t.prototype.clone = function () {\n              return this.constructor(this.__cfg__);\n            }),\n            (t.prototype.getTicks = function () {\n              var t = this;\n              return Object(gt.z)(this.ticks, function (e, n) {\n                return Object(gt.v)(e)\n                  ? e\n                  : { text: t.getText(e, n), tickValue: e, value: t.scale(e) };\n              });\n            }),\n            (t.prototype.getText = function (t, e) {\n              var n = this.formatter,\n                r = n ? n(t, e) : t;\n              return Object(gt.s)(r) || !Object(gt.r)(r.toString)\n                ? \"\"\n                : r.toString();\n            }),\n            (t.prototype.getConfig = function (t) {\n              return this.__cfg__[t];\n            }),\n            (t.prototype.init = function () {\n              Object(gt.a)(this, this.__cfg__),\n                this.setDomain(),\n                Object(gt.p)(this.getConfig(\"ticks\")) &&\n                  (this.ticks = this.calculateTicks());\n            }),\n            (t.prototype.initCfg = function () {}),\n            (t.prototype.setDomain = function () {}),\n            (t.prototype.calculateTicks = function () {\n              var t = this.tickMethod,\n                e = [];\n              if (Object(gt.x)(t)) {\n                var n = bt[t];\n                if (!n)\n                  throw new Error(\"There is no method to to calculate ticks!\");\n                e = n(this);\n              } else Object(gt.r)(t) && (e = t(this));\n              return e;\n            }),\n            (t.prototype.rangeMin = function () {\n              return this.range[0];\n            }),\n            (t.prototype.rangeMax = function () {\n              return this.range[1];\n            }),\n            (t.prototype.calcPercent = function (t, e, n) {\n              return Object(gt.t)(t) ? (t - e) / (n - e) : NaN;\n            }),\n            (t.prototype.calcValue = function (t, e, n) {\n              return e + t * (n - e);\n            }),\n            t\n          );\n        })(),\n        Ot = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"cat\"), (e.isCategory = !0), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.buildIndexMap = function () {\n              if (!this.translateIndexMap) {\n                this.translateIndexMap = new Map();\n                for (var t = 0; t < this.values.length; t++)\n                  this.translateIndexMap.set(this.values[t], t);\n              }\n            }),\n            (e.prototype.translate = function (t) {\n              this.buildIndexMap();\n              var e = this.translateIndexMap.get(t);\n              return void 0 === e && (e = Object(gt.t)(t) ? t : NaN), e;\n            }),\n            (e.prototype.scale = function (t) {\n              var e = this.translate(t),\n                n = this.calcPercent(e, this.min, this.max);\n              return this.calcValue(n, this.rangeMin(), this.rangeMax());\n            }),\n            (e.prototype.invert = function (t) {\n              var e = this.max - this.min,\n                n = this.calcPercent(t, this.rangeMin(), this.rangeMax()),\n                r = Math.round(e * n) + this.min;\n              return r < this.min || r > this.max ? NaN : this.values[r];\n            }),\n            (e.prototype.getText = function (e) {\n              for (var n = [], r = 1; r < arguments.length; r++)\n                n[r - 1] = arguments[r];\n              var i = e;\n              return (\n                Object(gt.t)(e) &&\n                  !this.values.includes(e) &&\n                  (i = this.values[i]),\n                t.prototype.getText.apply(this, Object(h.g)([i], n))\n              );\n            }),\n            (e.prototype.initCfg = function () {\n              this.tickMethod = \"cat\";\n            }),\n            (e.prototype.setDomain = function () {\n              if (\n                (Object(gt.s)(this.getConfig(\"min\")) && (this.min = 0),\n                Object(gt.s)(this.getConfig(\"max\")))\n              ) {\n                var t = this.values.length;\n                this.max = t > 1 ? t - 1 : t;\n              }\n              this.translateIndexMap && (this.translateIndexMap = void 0);\n            }),\n            e\n          );\n        })(wt),\n        Mt =\n          /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g,\n        St = \"[^\\\\s]+\",\n        Ct = /\\[([^]*?)\\]/gm;\n      function jt(t, e) {\n        for (var n = [], r = 0, i = t.length; r < i; r++)\n          n.push(t[r].substr(0, e));\n        return n;\n      }\n      var kt = function (t) {\n        return function (e, n) {\n          var r = n[t]\n            .map(function (t) {\n              return t.toLowerCase();\n            })\n            .indexOf(e.toLowerCase());\n          return r > -1 ? r : null;\n        };\n      };\n      function Et(t) {\n        for (var e = [], n = 1; n < arguments.length; n++)\n          e[n - 1] = arguments[n];\n        for (var r = 0, i = e; r < i.length; r++) {\n          var o = i[r];\n          for (var a in o) t[a] = o[a];\n        }\n        return t;\n      }\n      var Nt = [\n          \"Sunday\",\n          \"Monday\",\n          \"Tuesday\",\n          \"Wednesday\",\n          \"Thursday\",\n          \"Friday\",\n          \"Saturday\",\n        ],\n        Tt = [\n          \"January\",\n          \"February\",\n          \"March\",\n          \"April\",\n          \"May\",\n          \"June\",\n          \"July\",\n          \"August\",\n          \"September\",\n          \"October\",\n          \"November\",\n          \"December\",\n        ],\n        Pt = jt(Tt, 3),\n        It = {\n          dayNamesShort: jt(Nt, 3),\n          dayNames: Nt,\n          monthNamesShort: Pt,\n          monthNames: Tt,\n          amPm: [\"am\", \"pm\"],\n          DoFn: function (t) {\n            return (\n              t +\n              [\"th\", \"st\", \"nd\", \"rd\"][\n                t % 10 > 3 ? 0 : ((t - (t % 10) != 10 ? 1 : 0) * t) % 10\n              ]\n            );\n          },\n        },\n        Bt = Et({}, It),\n        At = function (t) {\n          return (Bt = Et(Bt, t));\n        },\n        Lt = function (t) {\n          return t.replace(/[|\\\\{()[^$+*?.-]/g, \"\\\\$&\");\n        },\n        Dt = function (t, e) {\n          for (void 0 === e && (e = 2), t = String(t); t.length < e; )\n            t = \"0\" + t;\n          return t;\n        },\n        _t = {\n          D: function (t) {\n            return String(t.getDate());\n          },\n          DD: function (t) {\n            return Dt(t.getDate());\n          },\n          Do: function (t, e) {\n            return e.DoFn(t.getDate());\n          },\n          d: function (t) {\n            return String(t.getDay());\n          },\n          dd: function (t) {\n            return Dt(t.getDay());\n          },\n          ddd: function (t, e) {\n            return e.dayNamesShort[t.getDay()];\n          },\n          dddd: function (t, e) {\n            return e.dayNames[t.getDay()];\n          },\n          M: function (t) {\n            return String(t.getMonth() + 1);\n          },\n          MM: function (t) {\n            return Dt(t.getMonth() + 1);\n          },\n          MMM: function (t, e) {\n            return e.monthNamesShort[t.getMonth()];\n          },\n          MMMM: function (t, e) {\n            return e.monthNames[t.getMonth()];\n          },\n          YY: function (t) {\n            return Dt(String(t.getFullYear()), 4).substr(2);\n          },\n          YYYY: function (t) {\n            return Dt(t.getFullYear(), 4);\n          },\n          h: function (t) {\n            return String(t.getHours() % 12 || 12);\n          },\n          hh: function (t) {\n            return Dt(t.getHours() % 12 || 12);\n          },\n          H: function (t) {\n            return String(t.getHours());\n          },\n          HH: function (t) {\n            return Dt(t.getHours());\n          },\n          m: function (t) {\n            return String(t.getMinutes());\n          },\n          mm: function (t) {\n            return Dt(t.getMinutes());\n          },\n          s: function (t) {\n            return String(t.getSeconds());\n          },\n          ss: function (t) {\n            return Dt(t.getSeconds());\n          },\n          S: function (t) {\n            return String(Math.round(t.getMilliseconds() / 100));\n          },\n          SS: function (t) {\n            return Dt(Math.round(t.getMilliseconds() / 10), 2);\n          },\n          SSS: function (t) {\n            return Dt(t.getMilliseconds(), 3);\n          },\n          a: function (t, e) {\n            return t.getHours() < 12 ? e.amPm[0] : e.amPm[1];\n          },\n          A: function (t, e) {\n            return t.getHours() < 12\n              ? e.amPm[0].toUpperCase()\n              : e.amPm[1].toUpperCase();\n          },\n          ZZ: function (t) {\n            var e = t.getTimezoneOffset();\n            return (\n              (e > 0 ? \"-\" : \"+\") +\n              Dt(100 * Math.floor(Math.abs(e) / 60) + (Math.abs(e) % 60), 4)\n            );\n          },\n          Z: function (t) {\n            var e = t.getTimezoneOffset();\n            return (\n              (e > 0 ? \"-\" : \"+\") +\n              Dt(Math.floor(Math.abs(e) / 60), 2) +\n              \":\" +\n              Dt(Math.abs(e) % 60, 2)\n            );\n          },\n        },\n        Rt = function (t) {\n          return +t - 1;\n        },\n        Yt = [null, \"[1-9]\\\\d?\"],\n        Ft = [null, St],\n        zt = [\n          \"isPm\",\n          St,\n          function (t, e) {\n            var n = t.toLowerCase();\n            return n === e.amPm[0] ? 0 : n === e.amPm[1] ? 1 : null;\n          },\n        ],\n        Xt = [\n          \"timezoneOffset\",\n          \"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\",\n          function (t) {\n            var e = (t + \"\").match(/([+-]|\\d\\d)/gi);\n            if (e) {\n              var n = 60 * +e[1] + parseInt(e[2], 10);\n              return \"+\" === e[0] ? n : -n;\n            }\n            return 0;\n          },\n        ],\n        Wt = {\n          D: [\"day\", \"[1-9]\\\\d?\"],\n          DD: [\"day\", \"\\\\d\\\\d\"],\n          Do: [\n            \"day\",\n            \"[1-9]\\\\d?\" + St,\n            function (t) {\n              return parseInt(t, 10);\n            },\n          ],\n          M: [\"month\", \"[1-9]\\\\d?\", Rt],\n          MM: [\"month\", \"\\\\d\\\\d\", Rt],\n          YY: [\n            \"year\",\n            \"\\\\d\\\\d\",\n            function (t) {\n              var e = +(\"\" + new Date().getFullYear()).substr(0, 2);\n              return +(\"\" + (+t > 68 ? e - 1 : e) + t);\n            },\n          ],\n          h: [\"hour\", \"[1-9]\\\\d?\", void 0, \"isPm\"],\n          hh: [\"hour\", \"\\\\d\\\\d\", void 0, \"isPm\"],\n          H: [\"hour\", \"[1-9]\\\\d?\"],\n          HH: [\"hour\", \"\\\\d\\\\d\"],\n          m: [\"minute\", \"[1-9]\\\\d?\"],\n          mm: [\"minute\", \"\\\\d\\\\d\"],\n          s: [\"second\", \"[1-9]\\\\d?\"],\n          ss: [\"second\", \"\\\\d\\\\d\"],\n          YYYY: [\"year\", \"\\\\d{4}\"],\n          S: [\n            \"millisecond\",\n            \"\\\\d\",\n            function (t) {\n              return 100 * +t;\n            },\n          ],\n          SS: [\n            \"millisecond\",\n            \"\\\\d\\\\d\",\n            function (t) {\n              return 10 * +t;\n            },\n          ],\n          SSS: [\"millisecond\", \"\\\\d{3}\"],\n          d: Yt,\n          dd: Yt,\n          ddd: Ft,\n          dddd: Ft,\n          MMM: [\"month\", St, kt(\"monthNamesShort\")],\n          MMMM: [\"month\", St, kt(\"monthNames\")],\n          a: zt,\n          A: zt,\n          ZZ: Xt,\n          Z: Xt,\n        },\n        Gt = {\n          default: \"ddd MMM DD YYYY HH:mm:ss\",\n          shortDate: \"M/D/YY\",\n          mediumDate: \"MMM D, YYYY\",\n          longDate: \"MMMM D, YYYY\",\n          fullDate: \"dddd, MMMM D, YYYY\",\n          isoDate: \"YYYY-MM-DD\",\n          isoDateTime: \"YYYY-MM-DDTHH:mm:ssZ\",\n          shortTime: \"HH:mm\",\n          mediumTime: \"HH:mm:ss\",\n          longTime: \"HH:mm:ss.SSS\",\n        },\n        qt = function (t) {\n          return Et(Gt, t);\n        },\n        Ht = function (t, e, n) {\n          if (\n            (void 0 === e && (e = Gt.default),\n            void 0 === n && (n = {}),\n            \"number\" == typeof t && (t = new Date(t)),\n            \"[object Date]\" !== Object.prototype.toString.call(t) ||\n              isNaN(t.getTime()))\n          )\n            throw new Error(\"Invalid Date pass to format\");\n          var r = [];\n          e = (e = Gt[e] || e).replace(Ct, function (t, e) {\n            return r.push(e), \"@@@\";\n          });\n          var i = Et(Et({}, Bt), n);\n          return (e = e.replace(Mt, function (e) {\n            return _t[e](t, i);\n          })).replace(/@@@/g, function () {\n            return r.shift();\n          });\n        };\n      function Vt(t, e, n) {\n        if ((void 0 === n && (n = {}), \"string\" != typeof e))\n          throw new Error(\"Invalid format in fecha parse\");\n        if (((e = Gt[e] || e), t.length > 1e3)) return null;\n        var r = {\n            year: new Date().getFullYear(),\n            month: 0,\n            day: 1,\n            hour: 0,\n            minute: 0,\n            second: 0,\n            millisecond: 0,\n            isPm: null,\n            timezoneOffset: null,\n          },\n          i = [],\n          o = [],\n          a = e.replace(Ct, function (t, e) {\n            return o.push(Lt(e)), \"@@@\";\n          }),\n          s = {},\n          u = {};\n        (a = Lt(a).replace(Mt, function (t) {\n          var e = Wt[t],\n            n = e[0],\n            r = e[1],\n            o = e[3];\n          if (s[n])\n            throw new Error(\n              \"Invalid format. \" + n + \" specified twice in format\",\n            );\n          return (s[n] = !0), o && (u[o] = !0), i.push(e), \"(\" + r + \")\";\n        })),\n          Object.keys(u).forEach(function (t) {\n            if (!s[t])\n              throw new Error(\n                \"Invalid format. \" + t + \" is required in specified format\",\n              );\n          }),\n          (a = a.replace(/@@@/g, function () {\n            return o.shift();\n          }));\n        var c = t.match(new RegExp(a, \"i\"));\n        if (!c) return null;\n        for (var h = Et(Et({}, Bt), n), l = 1; l < c.length; l++) {\n          var d = i[l - 1],\n            f = d[0],\n            p = d[2],\n            g = p ? p(c[l], h) : +c[l];\n          if (null == g) return null;\n          r[f] = g;\n        }\n        1 === r.isPm && null != r.hour && 12 != +r.hour\n          ? (r.hour = +r.hour + 12)\n          : 0 === r.isPm && 12 == +r.hour && (r.hour = 0);\n        for (\n          var y = new Date(\n              r.year,\n              r.month,\n              r.day,\n              r.hour,\n              r.minute,\n              r.second,\n              r.millisecond,\n            ),\n            v = [\n              [\"month\", \"getMonth\"],\n              [\"day\", \"getDate\"],\n              [\"hour\", \"getHours\"],\n              [\"minute\", \"getMinutes\"],\n              [\"second\", \"getSeconds\"],\n            ],\n            m = ((l = 0), v.length);\n          l < m;\n          l++\n        )\n          if (s[v[l][0]] && r[v[l][0]] !== y[v[l][1]]()) return null;\n        return null == r.timezoneOffset\n          ? y\n          : new Date(\n              Date.UTC(\n                r.year,\n                r.month,\n                r.day,\n                r.hour,\n                r.minute - r.timezoneOffset,\n                r.second,\n                r.millisecond,\n              ),\n            );\n      }\n      var Ut = {\n        format: Ht,\n        parse: Vt,\n        defaultI18n: It,\n        setGlobalDateI18n: At,\n        setGlobalDateMasks: qt,\n      };\n      function Zt(t, e) {\n        return (r.format || Ut.format)(t, e);\n      }\n      function Kt(t) {\n        return (\n          Object(gt.x)(t) &&\n            (t =\n              t.indexOf(\"T\") > 0\n                ? new Date(t).getTime()\n                : new Date(t.replace(/-/gi, \"/\")).getTime()),\n          Object(gt.o)(t) && (t = t.getTime()),\n          t\n        );\n      }\n      var Qt = 36e5,\n        $t = 24 * Qt,\n        Jt = 31 * $t,\n        te = [\n          [\"HH:mm:ss\", 1e3],\n          [\"HH:mm:ss\", 1e4],\n          [\"HH:mm:ss\", 3e4],\n          [\"HH:mm\", 6e4],\n          [\"HH:mm\", 6e5],\n          [\"HH:mm\", 18e5],\n          [\"HH\", Qt],\n          [\"HH\", 6 * Qt],\n          [\"HH\", 12 * Qt],\n          [\"YYYY-MM-DD\", $t],\n          [\"YYYY-MM-DD\", 4 * $t],\n          [\"YYYY-WW\", 7 * $t],\n          [\"YYYY-MM\", Jt],\n          [\"YYYY-MM\", 4 * Jt],\n          [\"YYYY-MM\", 6 * Jt],\n          [\"YYYY\", 380 * $t],\n        ];\n      function ee(t, e, n) {\n        var r,\n          i =\n            ((r = function (t) {\n              return t[1];\n            }),\n            function (t, e, n, i) {\n              for (\n                var o = Object(gt.s)(n) ? 0 : n,\n                  a = Object(gt.s)(i) ? t.length : i;\n                o < a;\n\n              ) {\n                var s = (o + a) >>> 1;\n                r(t[s]) > e ? (a = s) : (o = s + 1);\n              }\n              return o;\n            })(te, (e - t) / n) - 1,\n          o = te[i];\n        return (\n          i < 0 ? (o = te[0]) : i >= te.length && (o = Object(gt.y)(te)), o\n        );\n      }\n      var ne = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"timeCat\"), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.translate = function (t) {\n              t = Kt(t);\n              var e = this.values.indexOf(t);\n              return (\n                -1 === e &&\n                  (e = Object(gt.t)(t) && t < this.values.length ? t : NaN),\n                e\n              );\n            }),\n            (e.prototype.getText = function (t, e) {\n              var n = this.translate(t);\n              if (n > -1) {\n                var r = this.values[n],\n                  i = this.formatter;\n                return (r = i ? i(r, e) : Zt(r, this.mask));\n              }\n              return t;\n            }),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"time-cat\"),\n                (this.mask = \"YYYY-MM-DD\"),\n                (this.tickCount = 7);\n            }),\n            (e.prototype.setDomain = function () {\n              var e = this.values;\n              Object(gt.e)(e, function (t, n) {\n                e[n] = Kt(t);\n              }),\n                e.sort(function (t, e) {\n                  return t - e;\n                }),\n                t.prototype.setDomain.call(this);\n            }),\n            e\n          );\n        })(Ot),\n        re = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.isContinuous = !0), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.scale = function (t) {\n              if (Object(gt.s)(t)) return NaN;\n              var e = this.rangeMin(),\n                n = this.rangeMax();\n              return this.max === this.min\n                ? e\n                : e + this.getScalePercent(t) * (n - e);\n            }),\n            (e.prototype.init = function () {\n              t.prototype.init.call(this);\n              var e = this.ticks,\n                n = Object(gt.k)(e),\n                r = Object(gt.y)(e);\n              n < this.min && (this.min = n),\n                r > this.max && (this.max = r),\n                Object(gt.s)(this.minLimit) || (this.min = n),\n                Object(gt.s)(this.maxLimit) || (this.max = r);\n            }),\n            (e.prototype.setDomain = function () {\n              var t = Object(gt.i)(this.values),\n                e = t.min,\n                n = t.max;\n              Object(gt.s)(this.min) && (this.min = e),\n                Object(gt.s)(this.max) && (this.max = n),\n                this.min > this.max && ((this.min = e), (this.max = n));\n            }),\n            (e.prototype.calculateTicks = function () {\n              var e = this,\n                n = t.prototype.calculateTicks.call(this);\n              return (\n                this.nice ||\n                  (n = Object(gt.f)(n, function (t) {\n                    return t >= e.min && t <= e.max;\n                  })),\n                n\n              );\n            }),\n            (e.prototype.getScalePercent = function (t) {\n              var e = this.max,\n                n = this.min;\n              return (t - n) / (e - n);\n            }),\n            (e.prototype.getInvertPercent = function (t) {\n              return (\n                (t - this.rangeMin()) / (this.rangeMax() - this.rangeMin())\n              );\n            }),\n            e\n          );\n        })(wt),\n        ie = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"linear\"), (e.isLinear = !0), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.invert = function (t) {\n              var e = this.getInvertPercent(t);\n              return this.min + e * (this.max - this.min);\n            }),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"wilkinson-extended\"), (this.nice = !1);\n            }),\n            e\n          );\n        })(re);\n      function oe(t, e) {\n        var n = Math.E;\n        return e >= 0\n          ? Math.pow(n, Math.log(e) / t)\n          : -1 * Math.pow(n, Math.log(-e) / t);\n      }\n      function ae(t, e) {\n        return 1 === t ? 1 : Math.log(e) / Math.log(t);\n      }\n      function se(t, e, n) {\n        Object(gt.s)(n) && (n = Math.max.apply(null, t));\n        var r = n;\n        return (\n          Object(gt.e)(t, function (t) {\n            t > 0 && t < r && (r = t);\n          }),\n          r === n && (r = n / e),\n          r > 1 && (r = 1),\n          r\n        );\n      }\n      var ue = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"log\"), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.invert = function (t) {\n              var e,\n                n = this.base,\n                r = ae(n, this.max),\n                i = this.rangeMin(),\n                o = this.rangeMax() - i,\n                a = this.positiveMin;\n              if (a) {\n                if (0 === t) return 0;\n                var s = (1 / (r - (e = ae(n, a / n)))) * o;\n                if (t < s) return (t / s) * a;\n              } else e = ae(n, this.min);\n              var u = ((t - i) / o) * (r - e) + e;\n              return Math.pow(n, u);\n            }),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"log\"),\n                (this.base = 10),\n                (this.tickCount = 6),\n                (this.nice = !0);\n            }),\n            (e.prototype.setDomain = function () {\n              t.prototype.setDomain.call(this);\n              var e = this.min;\n              if (e < 0)\n                throw new Error(\n                  \"When you use log scale, the minimum value must be greater than zero!\",\n                );\n              0 === e &&\n                (this.positiveMin = se(this.values, this.base, this.max));\n            }),\n            (e.prototype.getScalePercent = function (t) {\n              var e = this.max,\n                n = this.min;\n              if (e === n) return 0;\n              if (t <= 0) return 0;\n              var r = this.base,\n                i = this.positiveMin;\n              return (\n                i && (n = (1 * i) / r),\n                t < i\n                  ? t / i / (ae(r, e) - ae(r, n))\n                  : (ae(r, t) - ae(r, n)) / (ae(r, e) - ae(r, n))\n              );\n            }),\n            e\n          );\n        })(re),\n        ce = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"pow\"), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.invert = function (t) {\n              var e = this.getInvertPercent(t),\n                n = this.exponent,\n                r = oe(n, this.max),\n                i = oe(n, this.min),\n                o = e * (r - i) + i,\n                a = o >= 0 ? 1 : -1;\n              return Math.pow(o, n) * a;\n            }),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"pow\"),\n                (this.exponent = 2),\n                (this.tickCount = 5),\n                (this.nice = !0);\n            }),\n            (e.prototype.getScalePercent = function (t) {\n              var e = this.max,\n                n = this.min;\n              if (e === n) return 0;\n              var r = this.exponent;\n              return (oe(r, t) - oe(r, n)) / (oe(r, e) - oe(r, n));\n            }),\n            e\n          );\n        })(re),\n        he = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"time\"), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getText = function (t, e) {\n              var n = this.translate(t),\n                r = this.formatter;\n              return r ? r(n, e) : Zt(n, this.mask);\n            }),\n            (e.prototype.scale = function (e) {\n              var n = e;\n              return (\n                (Object(gt.x)(n) || Object(gt.o)(n)) && (n = this.translate(n)),\n                t.prototype.scale.call(this, n)\n              );\n            }),\n            (e.prototype.translate = function (t) {\n              return Kt(t);\n            }),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"time-pretty\"),\n                (this.mask = \"YYYY-MM-DD\"),\n                (this.tickCount = 7),\n                (this.nice = !1);\n            }),\n            (e.prototype.setDomain = function () {\n              var t = this.values,\n                e = this.getConfig(\"min\"),\n                n = this.getConfig(\"max\");\n              if (\n                ((Object(gt.s)(e) && Object(gt.t)(e)) ||\n                  (this.min = this.translate(this.min)),\n                (Object(gt.s)(n) && Object(gt.t)(n)) ||\n                  (this.max = this.translate(this.max)),\n                t && t.length)\n              ) {\n                var r = [],\n                  i = 1 / 0,\n                  o = i,\n                  a = 0;\n                Object(gt.e)(t, function (t) {\n                  var e = Kt(t);\n                  if (isNaN(e))\n                    throw new TypeError(\n                      \"Invalid Time: \" + t + \" in time scale!\",\n                    );\n                  i > e ? ((o = i), (i = e)) : o > e && (o = e),\n                    a < e && (a = e),\n                    r.push(e);\n                }),\n                  t.length > 1 && (this.minTickInterval = o - i),\n                  Object(gt.s)(e) && (this.min = i),\n                  Object(gt.s)(n) && (this.max = a);\n              }\n            }),\n            e\n          );\n        })(ie),\n        le = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"quantize\"), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.invert = function (t) {\n              var e = this.ticks,\n                n = e.length,\n                r = this.getInvertPercent(t),\n                i = Math.floor(r * (n - 1));\n              if (i >= n - 1) return Object(gt.y)(e);\n              if (i < 0) return Object(gt.k)(e);\n              var o = e[i],\n                a = i / (n - 1);\n              return o + ((r - a) / ((i + 1) / (n - 1) - a)) * (e[i + 1] - o);\n            }),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"r-pretty\"),\n                (this.tickCount = 5),\n                (this.nice = !0);\n            }),\n            (e.prototype.calculateTicks = function () {\n              var e = t.prototype.calculateTicks.call(this);\n              return (\n                this.nice ||\n                  (Object(gt.y)(e) !== this.max && e.push(this.max),\n                  Object(gt.k)(e) !== this.min && e.unshift(this.min)),\n                e\n              );\n            }),\n            (e.prototype.getScalePercent = function (t) {\n              var e = this.ticks;\n              if (t < Object(gt.k)(e)) return 0;\n              if (t > Object(gt.y)(e)) return 1;\n              var n = 0;\n              return (\n                Object(gt.e)(e, function (e, r) {\n                  if (!(t >= e)) return !1;\n                  n = r;\n                }),\n                n / (e.length - 1)\n              );\n            }),\n            e\n          );\n        })(re),\n        de = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"quantile\"), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.initCfg = function () {\n              (this.tickMethod = \"quantile\"),\n                (this.tickCount = 5),\n                (this.nice = !0);\n            }),\n            e\n          );\n        })(le),\n        fe = {};\n      function pe(t, e) {\n        if (\n          (function (t) {\n            return fe[t];\n          })(t)\n        )\n          throw new Error(\"type '\" + t + \"' existed.\");\n        fe[t] = e;\n      }\n      var ge = (function (t) {\n          function e() {\n            var e = (null !== t && t.apply(this, arguments)) || this;\n            return (e.type = \"identity\"), (e.isIdentity = !0), e;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.calculateTicks = function () {\n              return this.values;\n            }),\n            (e.prototype.scale = function (t) {\n              return this.values[0] !== t && Object(gt.t)(t)\n                ? t\n                : this.range[0];\n            }),\n            (e.prototype.invert = function (t) {\n              var e = this.range;\n              return t < e[0] || t > e[1] ? NaN : this.values[0];\n            }),\n            e\n          );\n        })(wt),\n        ye = [1, 5, 2, 2.5, 4, 3],\n        ve = 100 * Number.EPSILON;\n      function me(t, e, n, r, i, o) {\n        var a = Object(gt.F)(e),\n          s = Object(gt.l)(e, t),\n          u = 0,\n          c = (function (t, e) {\n            return ((t % e) + e) % e;\n          })(r, o);\n        return (\n          (c < ve || o - c < ve) && r <= 0 && i >= 0 && (u = 1),\n          1 - s / (a - 1) - n + u\n        );\n      }\n      function be(t, e, n) {\n        var r = Object(gt.F)(e);\n        return 1 - Object(gt.l)(e, t) / (r - 1) - n + 1;\n      }\n      function xe(t, e, n, r, i, o) {\n        var a = (t - 1) / (o - i),\n          s = (e - 1) / (Math.max(o, r) - Math.min(n, i));\n        return 2 - Math.max(a / s, s / a);\n      }\n      function we(t, e) {\n        return t >= e ? 2 - (t - 1) / (e - 1) : 1;\n      }\n      function Oe(t, e, n, r) {\n        var i = e - t;\n        return (\n          1 -\n          (0.5 * (Math.pow(e - r, 2) + Math.pow(t - n, 2))) /\n            Math.pow(0.1 * i, 2)\n        );\n      }\n      function Me(t, e, n) {\n        var r = e - t;\n        if (n > r) {\n          var i = (n - r) / 2;\n          return 1 - Math.pow(i, 2) / Math.pow(0.1 * r, 2);\n        }\n        return 1;\n      }\n      function Se(t, e, n, r, i, o) {\n        if (\n          (void 0 === n && (n = 5),\n          void 0 === r && (r = !0),\n          void 0 === i && (i = ye),\n          void 0 === o && (o = [0.25, 0.2, 0.5, 0.05]),\n          Number.isNaN(t) ||\n            Number.isNaN(e) ||\n            \"number\" != typeof t ||\n            \"number\" != typeof e ||\n            !n)\n        )\n          return { min: 0, max: 0, ticks: [] };\n        if (e - t < 1e-15 || 1 === n) return { min: t, max: e, ticks: [t] };\n        for (\n          var a = { score: -2, lmin: 0, lmax: 0, lstep: 0 }, s = 1;\n          s < 1 / 0;\n\n        ) {\n          for (var u = 0; u < i.length; u += 1) {\n            var c = i[u],\n              h = be(c, i, s);\n            if (o[0] * h + o[1] + o[2] + o[3] < a.score) {\n              s = 1 / 0;\n              break;\n            }\n            for (var l = 2; l < 1 / 0; ) {\n              var d = we(l, n);\n              if (o[0] * h + o[1] + o[2] * d + o[3] < a.score) break;\n              for (\n                var f = (e - t) / (l + 1) / s / c, p = Math.ceil(Math.log10(f));\n                p < 1 / 0;\n\n              ) {\n                var g = s * c * Math.pow(10, p),\n                  y = Me(t, e, g * (l - 1));\n                if (o[0] * h + o[1] * y + o[2] * d + o[3] < a.score) break;\n                var v = Math.floor(e / g) * s - (l - 1) * s,\n                  m = Math.ceil(t / g) * s;\n                if (v <= m)\n                  for (var b = m - v, x = 0; x <= b; x += 1) {\n                    var w = (v + x) * (g / s),\n                      O = w + g * (l - 1),\n                      M = g,\n                      S = me(c, i, s, w, O, M),\n                      C = Oe(t, e, w, O),\n                      j = xe(l, n, t, e, w, O),\n                      k = o[0] * S + o[1] * C + o[2] * j + 1 * o[3];\n                    k > a.score &&\n                      (!r || (w <= t && O >= e)) &&\n                      ((a.lmin = w),\n                      (a.lmax = O),\n                      (a.lstep = M),\n                      (a.score = k));\n                  }\n                p += 1;\n              }\n              l += 1;\n            }\n          }\n          s += 1;\n        }\n        var E,\n          N = a.lmax,\n          T = a.lmin,\n          P = a.lstep,\n          I = Math.floor((N - T) / P) + 1,\n          B = new Array(I);\n        for (u = 0; u < I; u++)\n          B[u] = (E = T + u * P) < 1e-15 ? E : parseFloat(E.toFixed(15));\n        return {\n          min: Math.min(t, Object(gt.k)(B)),\n          max: Math.max(e, Object(gt.y)(B)),\n          ticks: B,\n        };\n      }\n      function Ce(t) {\n        var e = t.values,\n          n = t.tickInterval,\n          r = t.tickCount,\n          i = e;\n        if (Object(gt.t)(n))\n          return Object(gt.f)(i, function (t, e) {\n            return e % n == 0;\n          });\n        var o = t.min,\n          a = t.max;\n        if (\n          (Object(gt.s)(o) && (o = 0),\n          Object(gt.s)(a) && (a = e.length - 1),\n          Object(gt.t)(r) && r < a - o)\n        ) {\n          var s = Se(o, a, r, !1, [1, 2, 5, 3, 4, 7, 6, 8, 9]).ticks;\n          return Object(gt.f)(s, function (t) {\n            return t >= o && t <= a;\n          }).map(function (t) {\n            return e[t];\n          });\n        }\n        return e.slice(o, a + 1);\n      }\n      var je = Math.sqrt(50),\n        ke = Math.sqrt(10),\n        Ee = Math.sqrt(2),\n        Ne = (function () {\n          function t() {\n            this._domain = [0, 1];\n          }\n          return (\n            (t.prototype.domain = function (t) {\n              return t\n                ? ((this._domain = Array.from(t, Number)), this)\n                : this._domain.slice();\n            }),\n            (t.prototype.nice = function (t) {\n              var e, n;\n              void 0 === t && (t = 5);\n              var r,\n                i = this._domain.slice(),\n                o = 0,\n                a = this._domain.length - 1,\n                s = this._domain[o],\n                u = this._domain[a];\n              return (\n                u < s &&\n                  ((s = (e = [u, s])[0]),\n                  (u = e[1]),\n                  (o = (n = [a, o])[0]),\n                  (a = n[1])),\n                (r = Te(s, u, t)) > 0\n                  ? (r = Te(\n                      (s = Math.floor(s / r) * r),\n                      (u = Math.ceil(u / r) * r),\n                      t,\n                    ))\n                  : r < 0 &&\n                    (r = Te(\n                      (s = Math.ceil(s * r) / r),\n                      (u = Math.floor(u * r) / r),\n                      t,\n                    )),\n                r > 0\n                  ? ((i[o] = Math.floor(s / r) * r),\n                    (i[a] = Math.ceil(u / r) * r),\n                    this.domain(i))\n                  : r < 0 &&\n                    ((i[o] = Math.ceil(s * r) / r),\n                    (i[a] = Math.floor(u * r) / r),\n                    this.domain(i)),\n                this\n              );\n            }),\n            (t.prototype.ticks = function (t) {\n              return (\n                void 0 === t && (t = 5),\n                (function (t, e, n) {\n                  var r,\n                    i,\n                    o,\n                    a,\n                    s = -1;\n                  if (((n = +n), (t = +t) === (e = +e) && n > 0)) return [t];\n                  (r = e < t) && ((i = t), (t = e), (e = i));\n                  if (0 === (a = Te(t, e, n)) || !isFinite(a)) return [];\n                  if (a > 0)\n                    for (\n                      t = Math.ceil(t / a),\n                        e = Math.floor(e / a),\n                        o = new Array((i = Math.ceil(e - t + 1)));\n                      ++s < i;\n\n                    )\n                      o[s] = (t + s) * a;\n                  else\n                    for (\n                      t = Math.floor(t * a),\n                        e = Math.ceil(e * a),\n                        o = new Array((i = Math.ceil(t - e + 1)));\n                      ++s < i;\n\n                    )\n                      o[s] = (t - s) / a;\n                  r && o.reverse();\n                  return o;\n                })(\n                  this._domain[0],\n                  this._domain[this._domain.length - 1],\n                  t || 5,\n                )\n              );\n            }),\n            t\n          );\n        })();\n      function Te(t, e, n) {\n        var r = (e - t) / Math.max(0, n),\n          i = Math.floor(Math.log(r) / Math.LN10),\n          o = r / Math.pow(10, i);\n        return i >= 0\n          ? (o >= je ? 10 : o >= ke ? 5 : o >= Ee ? 2 : 1) * Math.pow(10, i)\n          : -Math.pow(10, -i) / (o >= je ? 10 : o >= ke ? 5 : o >= Ee ? 2 : 1);\n      }\n      function Pe(t, e, n) {\n        return (\n          (\"ceil\" === n\n            ? Math.ceil(t / e)\n            : \"floor\" === n\n            ? Math.floor(t / e)\n            : Math.round(t / e)) * e\n        );\n      }\n      function Ie(t, e, n) {\n        var r = Pe(t, n, \"floor\"),\n          i = Pe(e, n, \"ceil\");\n        (r = Object(gt.g)(r, n)), (i = Object(gt.g)(i, n));\n        for (var o = [], a = r; a <= i; a += n) {\n          var s = Object(gt.g)(a, n);\n          o.push(s);\n        }\n        return { min: r, max: i, ticks: o };\n      }\n      function Be(t, e, n) {\n        var r,\n          i = t.minLimit,\n          o = t.maxLimit,\n          a = t.min,\n          s = t.max,\n          u = t.tickCount,\n          c = void 0 === u ? 5 : u,\n          h = Object(gt.s)(i) ? (Object(gt.s)(e) ? a : e) : i,\n          l = Object(gt.s)(o) ? (Object(gt.s)(n) ? s : n) : o;\n        if ((h > l && ((l = (r = [h, l])[0]), (h = r[1])), c <= 2))\n          return [h, l];\n        for (var d = (l - h) / (c - 1), f = [], p = 0; p < c; p++)\n          f.push(h + d * p);\n        return f;\n      }\n      function Ae(t) {\n        return t < 1e-15 ? t : parseFloat(t.toFixed(15));\n      }\n      function Le(t, e, n) {\n        if ((void 0 === n && (n = 5), t === e))\n          return { max: e, min: t, ticks: [t] };\n        var r = (e - t) / n,\n          i = Math.pow(10, Math.floor(Math.log10(r))),\n          o = i;\n        2 * i - r < 1.5 * (r - o) &&\n          5 * i - r < 2.75 * (r - (o = 2 * i)) &&\n          10 * i - r < 1.5 * (r - (o = 5 * i)) &&\n          (o = 10 * i);\n        for (\n          var a = Math.ceil(e / o),\n            s = Math.floor(t / o),\n            u = Math.max(a * o, e),\n            c = Math.min(s * o, t),\n            h = Math.floor((u - c) / o) + 1,\n            l = new Array(h),\n            d = 0;\n          d < h;\n          d++\n        )\n          l[d] = Ae(c + d * o);\n        return { min: c, max: u, ticks: l };\n      }\n      function De(t, e) {\n        var n = t.length * e;\n        return 1 === e\n          ? t[t.length - 1]\n          : 0 === e\n          ? t[0]\n          : n % 1 != 0\n          ? t[Math.ceil(n) - 1]\n          : t.length % 2 == 0\n          ? (t[n - 1] + t[n]) / 2\n          : t[n];\n      }\n      function _e(t) {\n        return new Date(t).getFullYear();\n      }\n      function Re(t) {\n        return new Date(t, 0, 1).getTime();\n      }\n      function Ye(t) {\n        return new Date(t).getMonth();\n      }\n      function Fe(t, e) {\n        return new Date(t, e, 1).getTime();\n      }\n      function ze(t) {\n        return (function (t) {\n          return Object(gt.z)(t, function (t, e) {\n            return [0 === e ? \"M\" : \"L\", t[0], t[1]];\n          });\n        })(t);\n      }\n      function Xe(t, e, n, r) {\n        void 0 === r && (r = !0);\n        var i = new ie({ values: t }),\n          o = new Ot({\n            values: Object(gt.z)(t, function (t, e) {\n              return e;\n            }),\n          }),\n          a = Object(gt.z)(t, function (t, r) {\n            return [o.scale(r) * e, n - i.scale(t) * n];\n          });\n        return r\n          ? (function (t) {\n              if (t.length <= 2) return ze(t);\n              var e = [];\n              Object(gt.e)(t, function (t) {\n                Object(gt.q)(t, e.slice(e.length - 2)) || e.push(t[0], t[1]);\n              });\n              var n = mt.a(e, !1),\n                r = Object(gt.k)(t),\n                i = r[0],\n                o = r[1];\n              return n.unshift([\"M\", i, o]), n;\n            })(a)\n          : ze(a);\n      }\n      xt(\"cat\", Ce),\n        xt(\"time-cat\", function (t) {\n          var e = Ce(t),\n            n = Object(gt.y)(t.values);\n          return n !== Object(gt.y)(e) && e.push(n), e;\n        }),\n        xt(\"wilkinson-extended\", function (t) {\n          var e = t.min,\n            n = t.max,\n            r = t.tickCount,\n            i = t.nice,\n            o = t.tickInterval,\n            a = t.minLimit,\n            s = t.maxLimit,\n            u = Se(e, n, r, i).ticks;\n          return Object(gt.s)(a) && Object(gt.s)(s)\n            ? o\n              ? Ie(e, n, o).ticks\n              : u\n            : Be(t, Object(gt.k)(u), Object(gt.y)(u));\n        }),\n        xt(\"r-pretty\", function (t) {\n          var e = t.min,\n            n = t.max,\n            r = t.tickCount,\n            i = t.tickInterval,\n            o = t.minLimit,\n            a = t.maxLimit,\n            s = Le(e, n, r).ticks;\n          return Object(gt.s)(o) && Object(gt.s)(a)\n            ? i\n              ? Ie(e, n, i).ticks\n              : s\n            : Be(t, Object(gt.k)(s), Object(gt.y)(s));\n        }),\n        xt(\"time\", function (t) {\n          var e = t.min,\n            n = t.max,\n            r = t.minTickInterval,\n            i = t.tickInterval,\n            o = t.tickCount;\n          if (i) o = Math.ceil((n - e) / i);\n          else {\n            var a = (n - e) / (i = ee(e, n, o)[1]) / o;\n            a > 1 && (i *= Math.ceil(a)), r && i < r && (i = r);\n          }\n          for (var s = [], u = e; u < n + i; u += i) s.push(u);\n          return s;\n        }),\n        xt(\"time-pretty\", function (t) {\n          var e = t.min,\n            n = t.max,\n            r = t.minTickInterval,\n            i = t.tickCount,\n            o = t.tickInterval,\n            a = [];\n          o || ((o = (n - e) / i), r && o < r && (o = r));\n          var s = _e(e);\n          if (o > 31536e6)\n            for (\n              var u = _e(n), c = Math.ceil(o / 31536e6), h = s;\n              h <= u + c;\n              h += c\n            )\n              a.push(Re(h));\n          else if (o > Jt) {\n            var l = Math.ceil(o / Jt),\n              d = Ye(e),\n              f = (function (t, e) {\n                var n = _e(t),\n                  r = _e(e),\n                  i = Ye(t);\n                return 12 * (r - n) + ((Ye(e) - i) % 12);\n              })(e, n);\n            for (h = 0; h <= f + l; h += l) a.push(Fe(s, h + d));\n          } else if (o > $t) {\n            var p = (b = new Date(e)).getFullYear(),\n              g = b.getMonth(),\n              y = b.getDate(),\n              v = Math.ceil(o / $t),\n              m = (function (t, e) {\n                return Math.ceil((e - t) / $t);\n              })(e, n);\n            for (h = 0; h < m + v; h += v)\n              a.push(new Date(p, g, y + h).getTime());\n          } else if (o > Qt) {\n            (p = (b = new Date(e)).getFullYear()),\n              (g = b.getMonth()),\n              (v = b.getDate());\n            var b,\n              x = b.getHours(),\n              w = Math.ceil(o / Qt),\n              O = (function (t, e) {\n                return Math.ceil((e - t) / Qt);\n              })(e, n);\n            for (h = 0; h <= O + w; h += w)\n              a.push(new Date(p, g, v, x + h).getTime());\n          } else if (o > 6e4) {\n            var M = (function (t, e) {\n                return Math.ceil((e - t) / 6e4);\n              })(e, n),\n              S = Math.ceil(o / 6e4);\n            for (h = 0; h <= M + S; h += S) a.push(e + 6e4 * h);\n          } else {\n            var C = o;\n            C < 1e3 && (C = 1e3);\n            var j = 1e3 * Math.floor(e / 1e3),\n              k = Math.ceil((n - e) / 1e3),\n              E = Math.ceil(C / 1e3);\n            for (h = 0; h < k + E; h += E) a.push(j + 1e3 * h);\n          }\n          return (\n            a.length >= 512 &&\n              console.warn(\n                \"Notice: current ticks length(\" +\n                  a.length +\n                  ') >= 512, may cause performance issues, even out of memory. Because of the configure \"tickInterval\"(in milliseconds, current is ' +\n                  o +\n                  \") is too small, increase the value to solve the problem!\",\n              ),\n            a\n          );\n        }),\n        xt(\"log\", function (t) {\n          var e,\n            n = t.base,\n            r = t.tickCount,\n            i = t.min,\n            o = t.max,\n            a = t.values,\n            s = ae(n, o);\n          if (i > 0) e = Math.floor(ae(n, i));\n          else {\n            var u = se(a, n, o);\n            e = Math.floor(ae(n, u));\n          }\n          for (\n            var c = s - e, h = Math.ceil(c / r), l = [], d = e;\n            d < s + h;\n            d += h\n          )\n            l.push(Math.pow(n, d));\n          return i <= 0 && l.unshift(0), l;\n        }),\n        xt(\"pow\", function (t) {\n          var e = t.exponent,\n            n = t.tickCount,\n            r = Math.ceil(oe(e, t.max));\n          return Le(Math.floor(oe(e, t.min)), r, n).ticks.map(function (t) {\n            var n = t >= 0 ? 1 : -1;\n            return Math.pow(t, e) * n;\n          });\n        }),\n        xt(\"quantile\", function (t) {\n          var e = t.tickCount,\n            n = t.values;\n          if (!n || !n.length) return [];\n          for (\n            var r = n.slice().sort(function (t, e) {\n                return t - e;\n              }),\n              i = [],\n              o = 0;\n            o < e;\n            o++\n          ) {\n            var a = o / (e - 1);\n            i.push(De(r, a));\n          }\n          return i;\n        }),\n        xt(\"d3-linear\", function (t) {\n          var e = t.min,\n            n = t.max,\n            r = t.tickInterval,\n            i = t.minLimit,\n            o = t.maxLimit,\n            a = (function (t) {\n              var e = t.min,\n                n = t.max,\n                r = t.nice,\n                i = t.tickCount,\n                o = new Ne();\n              return o.domain([e, n]), r && o.nice(i), o.ticks(i);\n            })(t);\n          return Object(gt.s)(i) && Object(gt.s)(o)\n            ? r\n              ? Ie(e, n, r).ticks\n              : a\n            : Be(t, Object(gt.k)(a), Object(gt.y)(a));\n        }),\n        pe(\"cat\", Ot),\n        pe(\"category\", Ot),\n        pe(\"identity\", ge),\n        pe(\"linear\", ie),\n        pe(\"log\", ue),\n        pe(\"pow\", ce),\n        pe(\"time\", he),\n        pe(\"timeCat\", ne),\n        pe(\"quantize\", le),\n        pe(\"quantile\", de);\n      var We = { stroke: \"#C5C5C5\", strokeOpacity: 0.85 };\n      function Ge(t) {\n        var e = t.data,\n          n = void 0 === e ? [] : e,\n          r = t.width,\n          i = t.slider,\n          o = t.sliderTick,\n          a = (function (t) {\n            var e = t.width,\n              n = t.height,\n              r = void 0 === n ? 4 : n,\n              i = Object.assign({}, nt, t.handlerStyle),\n              o = Object.assign({}, J, t.backgroundStyle),\n              a = Object.assign({}, tt, t.foregroundStyle),\n              s = Object.assign({}, rt, t.textStyle),\n              u = V(\n                \"\\n    <div class='slider-bg'>\\n      <div class=\\\"slider-inner\\\"></div>\\n      <div class='control left-control'>\\n        <div class='text'>0</div>\\n      </div>\\n      <div class='control right-control'>\\n        <div class='text'>0</div>\\n      </div>\\n    </div>\\n  \",\n                \"\\n    .slider-bg {\\n      width: \" +\n                  e +\n                  \";\\n      height: \" +\n                  r +\n                  \";\\n      background: \" +\n                  o.fill +\n                  \";\\n      opacity: \" +\n                  o.opacity +\n                  \";\\n      border-radius: \" +\n                  o.radius +\n                  \";\\n      z-index: 10;\\n      margin-top: 30;\\n    }\\n    \\n    .slider-inner{\\n      position: absolute;\\n      width: \" +\n                  e +\n                  \";\\n      height: \" +\n                  r +\n                  \";\\n      border-radius: \" +\n                  r / 2 +\n                  \";\\n      background: \" +\n                  a.fill +\n                  \";\\n      background-opacity: \" +\n                  a.opacity +\n                  \"\\n      z-index: 1;\\n    }\\n\\n    .control {\\n      position: absolute;\\n      top: \" +\n                  (-i.radius / 2 + r / 2) +\n                  \";\\n      width: \" +\n                  i.radius +\n                  \";\\n      height: \" +\n                  i.radius +\n                  \";\\n      border-radius: \" +\n                  i.radius / 2 +\n                  \";\\n      background: \" +\n                  i.fill +\n                  \";\\n      border: \" +\n                  i.lineWidth +\n                  \" solid \" +\n                  i.stroke +\n                  \";\\n      z-index: 2;\\n    }\\n\\n    .text{\\n      position: absolute;\\n      left: \" +\n                  i.radius / 2 +\n                  \";\\n      top: -\" +\n                  (i.radius / 2 + s.fontSize / 2) +\n                  \";\\n      width: 0;\\n      color: \" +\n                  s.fill +\n                  \";\\n      font-size: \" +\n                  s.fontSize +\n                  \";\\n      text-align: center;\\n    }\\n\\n    text{\\n      opacity: \" +\n                  s.opacity +\n                  \";\\n      white-space: nowrap;\\n    }\\n    \\n    .left-control {\\n      left: 0;\\n    }\\n\\n    .right-control{\\n      left: \" +\n                  (e - i.radius) +\n                  \";\\n    }\\n  \",\n              );\n            return {\n              slideContainer: u,\n              leftControl: u.query(\".left-control\"),\n              rightControl: u.query(\".right-control\"),\n              slideInner: u.query(\".slider-inner\"),\n            };\n          })(i);\n        return He(\n          { data: n, width: r, start: i.start, end: i.end, sliderTick: o },\n          a,\n        );\n      }\n      function qe(t) {\n        var e = t.data,\n          n = t.width,\n          r = t.slider,\n          i = t.sliderTick,\n          o = (function (t) {\n            var e = t.slider,\n              n = void 0 === e ? {} : e,\n              r = t.trend,\n              i = void 0 === r ? {} : r,\n              o = n.width,\n              a = n.height,\n              s = void 0 === a ? 24 : a,\n              u = i.data,\n              c = void 0 === u ? [] : u,\n              h = i.lineStyle,\n              l = i.smooth,\n              d = void 0 === l || l,\n              f = Object.assign({}, et, n.handlerStyle),\n              p = Object.assign({}, $, n.backgroundStyle),\n              g = Object.assign({}, tt, n.foregroundStyle),\n              y = Object.assign({}, rt, n.textStyle),\n              v = Object.assign({}, We, h),\n              m = f.width,\n              b = 2 * m,\n              x = 2 * b + 10,\n              w = V(\n                \"\\n    <div class='slider-bg'>\\n      <shape class='trend-bg' type='path' path='[]' />\\n      <div class= 'slider-inner' />\\n      <div class='control left-control'>\\n        <div class='handler'> \\n          <div class='text'>1</div>\\n          <shape class='rect' type='rect' width='\" +\n                  f.width +\n                  \"'/>\\n          <shape class='circle top-circle' type='circle' r='\" +\n                  b +\n                  \"' />\\n          <shape class='circle bottom-circle' type='circle' r='\" +\n                  b +\n                  \"' />\\n        </div>\\n      </div>\\n      <div class='control right-control'>\\n        <div class='handler'> \\n          <div class='text'>1</div>\\n          <shape class='rect' type='rect' width='\" +\n                  f.width +\n                  \"'/>\\n          <shape class='circle top-circle' type='circle' r='\" +\n                  b +\n                  \"' />\\n          <shape class='circle bottom-circle' type='circle' r='\" +\n                  b +\n                  \"' />\\n        </div>\\n      </div>\\n    </div>\\n  \",\n                \"\\n    .slider-bg {\\n      width: \" +\n                  o +\n                  \";\\n      height: \" +\n                  s +\n                  \";\\n      background: \" +\n                  p.fill +\n                  \";\\n      opacity: \" +\n                  p.opacity +\n                  \";\\n      z-index: 10;\\n    }\\n\\n    .trend-bg{\\n      position: absolute;\\n      width: \" +\n                  o +\n                  \";\\n      height: \" +\n                  s +\n                  \";\\n      border: 1 solid \" +\n                  v.stroke +\n                  \";\\n      opacity: \" +\n                  v.strokeOpacity +\n                  \";\\n    }\\n    \\n    .slider-inner{\\n      position: absolute;\\n      width: \" +\n                  o +\n                  \";\\n      height: \" +\n                  s +\n                  \";\\n      background: \" +\n                  g.fill +\n                  \";\\n      opacity: \" +\n                  g.opacity +\n                  \";\\n    }\\n\\n    .control {\\n      position: absolute;\\n      width: \" +\n                  x +\n                  \";\\n      height: \" +\n                  s +\n                  \";\\n      font-size: 10;\\n      background-opacity: 0;\\n    }\\n\\n    .handler{\\n      position: absolute;\\n      height: \" +\n                  f.height +\n                  \";\\n      width: \" +\n                  m +\n                  \";\\n    }\\n    \\n    .rect {\\n      position: absolute;\\n      width: \" +\n                  m +\n                  \";\\n      height: \" +\n                  f.height +\n                  \";\\n      background: \" +\n                  f.fill +\n                  \";\\n    }\\n\\n    .circle {\\n      background: \" +\n                  f.fill +\n                  \";\\n      position: absolute;\\n      left: \" +\n                  m / 2 +\n                  \"\\n    }\\n\\n    .top-circle{\\n      top: 0\\n    }\\n\\n    .bottom-circle{\\n      bottom: 0\\n    }\\n\\n    .right-control .handler{\\n      right: 0\\n    }\\n\\n    .control .text{\\n      position: absolute;\\n      top: \" +\n                  (s / 2 - 5) +\n                  \";\\n    }\\n    \\n    .text{\\n      color: \" +\n                  y.fill +\n                  \";\\n      width: 40;\\n      text-align: center;\\n    }\\n\\n    .text text{\\n      opacity:\" +\n                  y.opacity +\n                  \"\\n    }\\n\\n    .left-control .text{\\n      margin-left: 0;\\n    }\\n\\n    .right-control .text{\\n      \\n    }\\n    \\n    .left-control {\\n      left: 0;\\n    }\\n\\n    .right-control{\\n      left: \" +\n                  (o - x) +\n                  \";\\n    }\\n  \",\n              ),\n              O = Xe(c, o, s, d);\n            w.query(\".trend-bg\").setAttribute(\"path\", O);\n            var M = w.query(\".left-control\"),\n              S = w.query(\".right-control\"),\n              C = M.query(\".text\"),\n              j = S.query(\".text\");\n            return (\n              (M.onLeftChange = function (t) {\n                t < C.width\n                  ? C.setStyle(\"marginLeft\", 0)\n                  : C.setStyle(\"marginLeft\", -C.width);\n              }),\n              (S.onLeftChange = function (t) {\n                t > w.width - S.width - j.width\n                  ? j.setStyle(\"marginLeft\", -j.width)\n                  : j.setStyle(\"marginLeft\", 0);\n              }),\n              {\n                slideContainer: w,\n                leftControl: w.query(\".left-control\"),\n                rightControl: w.query(\".right-control\"),\n                slideInner: w.query(\".slider-inner\"),\n              }\n            );\n          })({ slider: r, trend: t.trend });\n        return He(\n          { data: e, width: n, start: r.start, end: r.end, sliderTick: i },\n          o,\n        );\n      }\n      function He(t, e) {\n        var n = t.data,\n          r = void 0 === n ? [] : n,\n          i = t.width,\n          o = t.start,\n          a = void 0 === o ? 0.1 : o,\n          s = t.end,\n          u = void 0 === s ? 0.9 : s,\n          c = t.sliderTick,\n          h = c.width,\n          l = (void 0 === h ? 0 : h) / r.length,\n          d = (function (t) {\n            return V(\n              \"\\n    <div id='slider'></div>\\n  \",\n              \"\\n    #slider {\\n      width: \" +\n                t +\n                \";\\n      display: flex;\\n      justify-content: center;\\n      align-items: center;\\n    }\\n  \",\n            );\n          })(i),\n          f = e.slideContainer,\n          p = e.leftControl,\n          g = e.rightControl,\n          y = e.slideInner,\n          v = (function (t, e, n) {\n            var r = n.width,\n              i = void 0 === r ? 0 : r,\n              o = Object.assign({}, it, n.textStyle),\n              a = Object.assign({}, ot, n.lineStyle),\n              s = Math.floor(o.width / e);\n            return V(\n              \"\\n  <div class='tiker'>\\n    \" +\n                t.reduce(function (t, e, n) {\n                  return (\n                    t +\n                    \"\\n        <div class='single-tick'> \\n          \" +\n                    (n % s == 0\n                      ? \"\\n          <shape class='line' type='rect' />\\n          <div class='text'>\" +\n                        e.date +\n                        \"</div>\"\n                      : \"\") +\n                    \"\\n        </div> \\n      \"\n                  );\n                }, \"\") +\n                \"\\n  </div>\",\n              \"\\n    .tiker {\\n      width: \" +\n                i +\n                \";\\n      background-opacity: 0;\\n      display: flex;\\n      flex-direction: row;\\n      z-index: 1;\\n      color: black;\\n    }\\n    .single-tick {\\n      width: \" +\n                e +\n                \";\\n      display: flex;\\n      flex-direction: column;\\n      justify-content: space-between;\\n      align-items: flex-start;\\n    }\\n    .single-tick shape{\\n      width: \" +\n                a.width +\n                \";\\n      height: \" +\n                a.height +\n                \";\\n      background: \" +\n                a.fill +\n                \";\\n    }\\n    .single-tick .text {\\n      height: \" +\n                o.fontSize +\n                \";\\n      text-align: center;\\n      font-size: \" +\n                o.fontSize +\n                \";\\n      width: 0; \\n      color: \" +\n                o.fill +\n                \";\\n    }\\n    text {\\n      opacity: \" +\n                o.opacity +\n                \";;\\n      white-space: nowrap;\\n    }\\n  \",\n            );\n          })(r, l, c);\n        d.appendChild(f, v);\n        var m = (function (t) {\n          var e = t.delegateNode,\n            n = t.leftControl,\n            r = t.rightControl,\n            i = t.slideInner,\n            o = t.data,\n            a = t.tickWidth,\n            s = t.slideContainer,\n            u = t.speed,\n            c = 0,\n            h = 1,\n            l = 0;\n          function d() {\n            var t = r.width,\n              e = s.width;\n            l > e - t || v((l += a));\n          }\n          var f = vt(d, void 0 === u ? 100 : u);\n          function p() {\n            return r.left - n.left + n.width;\n          }\n          function g(t) {\n            var e = (t / s.width) * o.length;\n            return o[Math.floor(e)];\n          }\n          function y(t, e) {\n            var r;\n            void 0 === e && (e = !0);\n            var o = n.width,\n              a = s.width;\n            t < 0 && (t = 0),\n              t > a - o && (t = a - o),\n              null === (r = n.onLeftChange) || void 0 === r || r.call(n, t),\n              n.setStyle(\"left\", t),\n              e && i.setStyle(\"width\", p()),\n              i.setStyle(\"left\", t < 0 ? 0 : t);\n            var u = g(t);\n            u &&\n              (n.setText(u.date),\n              K(\"RANGE_CHANGE\", { value: [(c = t / a), h] }));\n          }\n          function v(t, e) {\n            var n;\n            void 0 === e && (e = !0);\n            var o = r.width,\n              a = s.width;\n            t < 0 && (t = 0),\n              t >= a - o && (t = a - o),\n              null === (n = r.onLeftChange) || void 0 === n || n.call(r, t),\n              r.setStyle(\"left\", t),\n              e && i.setStyle(\"width\", p());\n            var u = g(t + o);\n            u &&\n              ((l = t),\n              r.setText(u.date),\n              K(\"RANGE_CHANGE\", { value: [c, (h = (t + o) / a)] }));\n          }\n          var m = new Map();\n          m.set(n, {\n            getStart: function () {\n              return n.left;\n            },\n            handler: y,\n          }),\n            m.set(r, {\n              getStart: function () {\n                return r.left;\n              },\n              handler: v,\n            }),\n            m.set(i, {\n              getStart: function () {\n                return i.left;\n              },\n              handler: function (t) {\n                var e = r.width,\n                  n = i.width,\n                  o = s.width;\n                t < 0 && (t = 0),\n                  t > o - n && (t = o - n),\n                  y(t, !1),\n                  v(t + n - e, !1);\n              },\n            });\n          var b,\n            x = 0,\n            w = 0;\n          return (\n            e.on(\"panstart\", function (t) {\n              if (t.uiNode) {\n                b = void 0;\n                var e = m.get(t.uiNode);\n                e && ((b = t.uiNode), (x = t.clientX), (w = e.getStart()));\n              }\n            }),\n            e.on(\"panmove\", function (t) {\n              if (b) {\n                var e = m.get(b),\n                  n = t.clientX - x;\n                e.handler(w + n);\n              }\n            }),\n            {\n              goLeftPercent: function (t) {\n                t < 0 || t > 1 || y(t * s.width);\n              },\n              goRightPercent: function (t) {\n                t < 0 || t > 1 || v(t * s.width);\n              },\n              goNext: d,\n              goPrev: function () {\n                l < 0 || v((l -= a));\n              },\n              player: f,\n            }\n          );\n        })({\n          data: r,\n          slideContainer: f,\n          leftControl: p,\n          rightControl: g,\n          slideInner: y,\n          tickWidth: l,\n          delegateNode: d,\n        });\n        return (\n          (f.didMount = function () {\n            m.goLeftPercent(a), m.goRightPercent(u);\n          }),\n          Q(\"SLIDER_PLAY\", m.player.play),\n          Q(\"SLIDER_PAUSE\", m.player.stop),\n          Q(\"SPEED_CHANGE\", m.player.setSpeed),\n          Q(\"CONTROL_NEXT\", m.goNext),\n          Q(\"CONTROL_PREV\", m.goPrev),\n          d\n        );\n      }\n      function Ve(t, e, n) {\n        var r = Math.max(t, e),\n          i = Math.min(t, e);\n        (n.start = i),\n          (n.end = r),\n          Ue(n),\n          n.tickBoxs.forEach(function (t) {\n            n.selects.includes(t) ||\n              (t.getAttribute(\"disFromStart\") >= i &&\n                t.getAttribute(\"disFromStart\") <= r &&\n                (t.setStyle(\"backgroundColor\", n.selectedFill),\n                n.selects.push(t)));\n          }),\n          n.selects.length > 0 &&\n            K(\"RANGE_CHANGE\", {\n              value: [\n                n.selects[0].getAttribute(\"disFromStart\") / n.width,\n                n.selects[n.selects.length - 1].getAttribute(\"disFromStart\") /\n                  n.width,\n              ],\n            });\n      }\n      function Ue(t) {\n        t.selects.forEach(function (e) {\n          e.setStyle(\"backgroundColor\", t.unSelectFill);\n        }),\n          (t.selects = []);\n      }\n      var Ze = function (t) {\n        var e,\n          n,\n          r,\n          i,\n          o,\n          a = t.data,\n          s = t.tick,\n          u = s.start,\n          c = void 0 === u ? 0.1 : u,\n          h = s.end,\n          l = void 0 === h ? 0.9 : h,\n          d = s.width,\n          f = s.padding;\n        console.log(t);\n        var p = Object.assign(\n            {},\n            ht,\n            null === (e = null == t ? void 0 : t.tick) || void 0 === e\n              ? void 0\n              : e.selectedTickStyle,\n          ),\n          g = Object.assign(\n            {},\n            lt,\n            null === (n = null == t ? void 0 : t.tick) || void 0 === n\n              ? void 0\n              : n.unSelectedTickStyle,\n          ),\n          y = {};\n        (y.data = a),\n          (y.width = d),\n          (y.padding = f || \"10 0\"),\n          (y.selectedFill = p.fill),\n          (y.unSelectFill = g.fill),\n          (y.gap = at),\n          (y.tickBoxHeight =\n            (null === (r = null == t ? void 0 : t.tick) || void 0 === r\n              ? void 0\n              : r.tickBoxHeight) || st),\n          (y.lineStyle = Object.assign(\n            {},\n            ut,\n            null === (i = null == t ? void 0 : t.tick) || void 0 === i\n              ? void 0\n              : i.tickLineStyle,\n          )),\n          (y.textStyle = Object.assign(\n            {},\n            ct,\n            null === (o = null == t ? void 0 : t.tick) || void 0 === o\n              ? void 0\n              : o.tickLabelStyle,\n          )),\n          (y.tickWidth = d / a.length),\n          (y.count = Math.floor(y.textStyle.width / y.tickWidth)),\n          (y.start = c),\n          (y.end = l),\n          (y.selects = []);\n        var v = (function (t) {\n          var e = t.data,\n            n = t.tickWidth,\n            r = t.count,\n            i = t.width,\n            o = t.gap,\n            a = t.tickBoxHeight,\n            s = t.textStyle,\n            u = t.lineStyle,\n            c = t.start,\n            h = t.end,\n            l = t.unSelectFill,\n            d =\n              \"\\n  <div id='slider'>\\n    \" +\n              e.reduce(function (t, e, i) {\n                return (\n                  t +\n                  \"\\n        <div class='ticker'> \\n          <div class='tick-box' disFromStart='\" +\n                  i * n +\n                  \"'></div>\\n          \" +\n                  (i % r == 0\n                    ? \"\\n              <div class='tick-desc' > \\n                <shape class='line' type='rect'/>\\n                <div class='text'>\" +\n                      e.date +\n                      \"</div>\\n              </div>\"\n                    : \"\") +\n                  \"\\n        </div>\"\n                );\n              }, \"\") +\n              \"\\n  </div>\\n\",\n            f =\n              \"\\n  #slider {\\n    width: \" +\n              i +\n              \";\\n    display: flex;\\n    flex-direction: row;\\n    justify-content: space-between;\\n    align-items: flex-start;\\n    padding: \" +\n              t.padding +\n              \";\\n  }\\n\\n  .ticker {\\n    width: \" +\n              (n - o) +\n              \";\\n    display: flex;\\n    background-opacity: 0;\\n    align-items: center;\\n  }\\n\\n  .tick-box {\\n    width: \" +\n              (n - o) +\n              \";\\n    height: \" +\n              a +\n              \";\\n    background:  \" +\n              l +\n              \";\\n  }\\n\\n  .tick-desc {\\n    display: flex;\\n    align-items: center;\\n  }\\n\\n  .text{\\n    width: 0;\\n    height: \" +\n              s.fontSize +\n              \";\\n    text-align:center;\\n    color: \" +\n              s.fill +\n              \";\\n    font-size: \" +\n              s.fontSize +\n              \";\\n  }\\n\\n  .text text{\\n    white-space: nowrap;\\n  }\\n\\n  .line {\\n    width: \" +\n              u.width +\n              \";\\n    height: \" +\n              u.height +\n              \";\\n    background: \" +\n              u.fill +\n              \";\\n    margin: 2 0;\\n  }\\n\",\n            p = V(d, f);\n          return (\n            (p.didMount = function () {\n              (t.start = c * i), (t.end = h * i), Ve(t.start, t.end, t);\n            }),\n            p\n          );\n        })(y);\n        return (\n          (y.tickBoxs = v.queryAll(\".tick-box\")),\n          (function (t) {\n            var e = function () {\n                (t.end += t.tickWidth), Ve(t.start, t.end, t);\n              },\n              n = vt(e, 1e3);\n            Q(\"CONTROL_NEXT\", e),\n              Q(\"CONTROL_PREV\", function () {\n                (t.end -= t.tickWidth), Ve(t.start, t.end, t);\n              }),\n              Q(\"SLIDER_PLAY\", n.play),\n              Q(\"SLIDER_PAUSE\", n.stop),\n              Q(\"SPEED_CHANGE\", n.setSpeed);\n          })(y),\n          (function (t, e) {\n            var n = 0,\n              r = !1,\n              i = 0,\n              o = Object(gt.G)(Ve, 30, { trailing: !0, leading: !0 });\n            t.on(\"panstart\", function (t) {\n              (r = !1),\n                t.uiNode &&\n                  \"tick-box\" === t.uiNode.getAttribute(\"class\") &&\n                  ((r = !0),\n                  (n = t.clientX),\n                  (i = t.uiNode.getAttribute(\"disFromStart\")),\n                  Ue(e));\n            }),\n              t.on(\"panmove\", function (t) {\n                if (r) {\n                  var a = t.clientX - n;\n                  o(i, i + a, e);\n                }\n              }),\n              t.on(\"tap\", function (t) {\n                t.uiNode &&\n                  \"tick-box\" === t.uiNode.getAttribute(\"class\") &&\n                  (function (t, e) {\n                    Ue(e),\n                      e.selects.push(t),\n                      (e.start = e.end = t.getAttribute(\"disFromStart\")),\n                      K(\"RANGE_CHANGE\", {\n                        value: [\n                          t.getAttribute(\"disFromStart\") / e.width,\n                          t.getAttribute(\"disFromStart\") / e.width,\n                        ],\n                      }),\n                      t.setStyle(\"backgroundColor\", e.selectedFill);\n                  })(t.uiNode, e);\n              });\n          })(v, y),\n          v\n        );\n      };\n      function Ke(t, e) {\n        var n = t.width,\n          r = t.group,\n          i = t.control,\n          o = H(\n            \"<root></root>\",\n            \"\\n  root {\\n    /** 盒模型 **/\\n    width: \" +\n              n +\n              \";\\n    /** flex **/\\n    display: flex;\\n    flex-direction: column;\\n    flex-wrap: nowrap;\\n    justify-content: center;\\n    align-items: center;\\n  }\\n\",\n            r,\n          ),\n          a = yt(i);\n        return o.appendChild(e, a), o;\n      }\n      var Qe = (function () {\n          function t(t) {\n            (this._cfgs = Object(gt.d)(this.getDefaultCfgs(), t)),\n              (this._events = {}),\n              (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.getDefaultCfgs = function () {\n              return {};\n            }),\n            (t.prototype.initPlugin = function (t) {\n              var e = this;\n              e.set(\"graph\", t);\n              var n = e.getEvents(),\n                r = {};\n              Object(gt.e)(n, function (n, i) {\n                var o = Object(gt.K)(e, n);\n                (r[i] = o), t.on(i, o);\n              }),\n                (this._events = r),\n                this.init();\n            }),\n            (t.prototype.init = function () {}),\n            (t.prototype.getEvents = function () {\n              return {};\n            }),\n            (t.prototype.get = function (t) {\n              return this._cfgs[t];\n            }),\n            (t.prototype.set = function (t, e) {\n              this._cfgs[t] = e;\n            }),\n            (t.prototype.destroy = function () {}),\n            (t.prototype.destroyPlugin = function () {\n              this.destroy();\n              var t = this.get(\"graph\"),\n                e = this._events;\n              Object(gt.e)(e, function (e, n) {\n                t.off(n, e);\n              }),\n                (this._events = null),\n                (this._cfgs = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        $e = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                className: \"f6-component-timebar\",\n                padding: 10,\n                type: \"trend\",\n                data: [],\n                trend: { smooth: !0 },\n                controllerCfg: { speed: 1 },\n                slider: { start: 0.1, end: 0.9 },\n                tick: { start: 0.1, end: 0.9 },\n                filterEdge: !1,\n              };\n            }),\n            (e.prototype.init = function () {\n              var t = this;\n              setTimeout(function () {\n                t.render(), t.initEvent();\n              });\n            }),\n            (e.prototype.filterData = function (t) {\n              var e,\n                n = t.value,\n                r = this.get(\"data\");\n              if (r && 0 !== r.length) {\n                var i = this.get(\"rangeChange\"),\n                  o = this.get(\"graph\"),\n                  a = Math.round(r.length * n[0]),\n                  s = Math.round(r.length * n[1]);\n                (s = s >= r.length ? r.length - 1 : s),\n                  (a = a >= r.length ? r.length - 1 : a);\n                var u =\n                    null === (e = this._cfgs.tick) || void 0 === e\n                      ? void 0\n                      : e.tickLabelFormatter,\n                  c = u ? u(r[a]) : r[a].date,\n                  h = u ? u(r[s]) : r[s].date;\n                if (i) i(o, c, h);\n                else {\n                  (!this.cacheGraphData ||\n                    (this.cacheGraphData.nodes &&\n                      0 === this.cacheGraphData.nodes.length)) &&\n                    (this.cacheGraphData = o.get(\"data\"));\n                  var l = this.cacheGraphData.nodes.filter(function (t) {\n                      return t.date >= r[a].date && t.date <= r[s].date;\n                    }),\n                    d = l.map(function (t) {\n                      return t.id;\n                    }),\n                    f = [];\n                  this.cacheGraphData.edges &&\n                    ((f = this.cacheGraphData.edges.filter(function (t) {\n                      return d.includes(t.source) && d.includes(t.target);\n                    })),\n                    this.get(\"filterEdge\") &&\n                      (f = f.filter(function (t) {\n                        return t.date >= r[a].date && t.date <= r[s].date;\n                      }))),\n                    o.changeData({ nodes: l, edges: f });\n                }\n              } else console.warn(\"请配置 TimeBar 组件的数据\");\n            }),\n            (e.prototype.render = function () {\n              var t = this._cfgs,\n                e = t.data,\n                n = t.width,\n                r = t.padding,\n                i = t.type,\n                o = t.trend,\n                a = t.slider,\n                s = t.controllerCfg,\n                u = t.tick,\n                c = t.sliderTick,\n                l = this.get(\"graph\"),\n                d = l.get(\"uiGroup\"),\n                f = null;\n              switch (i) {\n                case \"trend\":\n                  f = (function (t) {\n                    var e = t.width,\n                      n = void 0 === e ? 0 : e,\n                      r = t.padding,\n                      i = void 0 === r ? 0 : r,\n                      o = t.group,\n                      a = t.data,\n                      s = void 0 === a ? [] : a,\n                      u = t.slider,\n                      c = void 0 === u ? {} : u,\n                      l = t.controllerCfg,\n                      d = void 0 === l ? {} : l,\n                      f = t.trend,\n                      p = void 0 === f ? {} : f,\n                      g = t.sliderTick,\n                      y = void 0 === g ? {} : g,\n                      v = qe({\n                        data: s,\n                        width: n,\n                        slider: Object(h.a)(\n                          { width: c.width || n - 2 * i, paddingTop: 0 },\n                          c || {},\n                        ),\n                        sliderTick: Object(h.a)({ width: n - 2 * i }, y || {}),\n                        trend: Object(h.a)(\n                          {\n                            data:\n                              null == s\n                                ? void 0\n                                : s.map(function (t) {\n                                    return t.value;\n                                  }),\n                          },\n                          p || {},\n                        ),\n                      });\n                    return Ke(\n                      {\n                        width: n,\n                        group: o,\n                        control: Object(h.a)({ wrapperWidth: n }, d),\n                      },\n                      v,\n                    );\n                  })({\n                    group: d,\n                    width: n,\n                    padding: r,\n                    data: e,\n                    trend: o,\n                    slider: a,\n                    controllerCfg: s,\n                    sliderTick: c,\n                  });\n                  break;\n                case \"tick\":\n                  f = (function (t) {\n                    var e = t.group,\n                      n = t.data,\n                      r = void 0 === n ? [] : n,\n                      i = t.width,\n                      o = t.padding,\n                      a = t.controllerCfg,\n                      s = void 0 === a ? {} : a,\n                      u = t.tick,\n                      c = void 0 === u ? {} : u,\n                      l = Ze({\n                        data: r,\n                        tick: Object(h.a)({ width: i - o }, c),\n                      });\n                    return Ke(\n                      {\n                        width: i,\n                        group: e,\n                        control: Object(h.a)({ wrapperWidth: i }, s),\n                      },\n                      l,\n                    );\n                  })({\n                    group: d,\n                    width: n,\n                    padding: r,\n                    tick: u,\n                    data: e,\n                    controllerCfg: s,\n                  });\n                  break;\n                case \"simple\":\n                  f = (function (t) {\n                    var e = t.width,\n                      n = void 0 === e ? 0 : e,\n                      r = t.padding,\n                      i = void 0 === r ? 0 : r,\n                      o = t.group,\n                      a = t.data,\n                      s = void 0 === a ? [] : a,\n                      u = t.slider,\n                      c = void 0 === u ? {} : u,\n                      l = t.controllerCfg,\n                      d = void 0 === l ? {} : l,\n                      f = t.sliderTick,\n                      p = void 0 === f ? {} : f,\n                      g = Ge({\n                        data: s,\n                        width: n,\n                        slider: Object(h.a)(\n                          { width: c.width || n - 2 * i, paddingTop: 0 },\n                          c,\n                        ),\n                        sliderTick: Object(h.a)({ width: n - 2 * i }, p),\n                      });\n                    return Ke(\n                      {\n                        width: n,\n                        group: o,\n                        control: Object(h.a)({ wrapperWidth: n }, d),\n                      },\n                      g,\n                    );\n                  })({\n                    group: d,\n                    width: n,\n                    padding: r,\n                    slider: a,\n                    data: e,\n                    controllerCfg: s,\n                    sliderTick: c,\n                  });\n              }\n              var p = l.get(\"height\");\n              d.translate(0, p - f.height);\n            }),\n            (e.prototype.initEvent = function () {\n              Q(\n                \"RANGE_CHANGE\",\n                Object(gt.G)(this.filterData.bind(this), 200, {\n                  trailing: !0,\n                  leading: !0,\n                }),\n              );\n            }),\n            (e.prototype.destroy = function () {\n              Z = {};\n            }),\n            e\n          );\n        })(Qe),\n        Je = {\n          getDefaultCfg: function () {\n            return {};\n          },\n          getEvents: function () {\n            return {};\n          },\n          updateCfg: function (t) {\n            return Object.assign(this, t), !0;\n          },\n          shouldBegin: function () {\n            return !0;\n          },\n          shouldUpdate: function () {\n            return !0;\n          },\n          shouldEnd: function () {\n            return !0;\n          },\n          bind: function (t) {\n            var e = this.events;\n            (this.graph = t),\n              (\"drag-canvas\" !== this.type &&\n                \"brush-select\" !== this.type &&\n                \"lasso-select\" !== this.type) ||\n                t.get(\"canvas\").set(\"draggable\", !0),\n              Object(gt.e)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            (\"drag-canvas\" !== this.type &&\n              \"brush-select\" !== this.type &&\n              \"lasso-select\" !== this.type) ||\n              t.get(\"canvas\").set(\"draggable\", !1),\n              Object(gt.e)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n          get: function (t) {\n            return this[t];\n          },\n          set: function (t, e) {\n            return (this[t] = e), this;\n          },\n        },\n        tn = (function () {\n          function t() {}\n          return (\n            (t.registerBehavior = function (e, n) {\n              if (!n)\n                throw new Error(\n                  \"please specify handler for this behavior: \" + e,\n                );\n              var r = Object(gt.b)(Je);\n              Object.assign(r, n);\n              var i = function (t) {\n                var e = this;\n                Object.assign(this, this.getDefaultCfg(), t);\n                var n = this.getEvents();\n                this.events = null;\n                var r = {};\n                n &&\n                  (Object(gt.e)(n, function (t, n) {\n                    r[n] = Object(gt.K)(e, t);\n                  }),\n                  (this.events = r));\n              };\n              (i.prototype = r), (t.types[e] = i);\n            }),\n            (t.hasBehavior = function (e) {\n              return !!t.types[e];\n            }),\n            (t.getBehavior = function (e) {\n              return t.types[e];\n            }),\n            (t.types = {}),\n            t\n          );\n        })(),\n        en = tn,\n        nn = n(14);\n      function rn(t) {\n        return (rn =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var on = {};\n      function an(t) {\n        return on.requestAnimationFrame\n          ? on.requestAnimationFrame(t)\n          : (\"object\" ===\n              (\"undefined\" == typeof window ? \"undefined\" : rn(window)) &&\n              window.requestAnimationFrame\n              ? window.requestAnimationFrame\n              : function (t) {\n                  return setTimeout(t, 16);\n                })(t);\n      }\n      var sn = n(2),\n        un = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (!a && 0 !== a) ||\n                  (!s && 0 !== s) ||\n                  ((i[a][s] = 1), e || (i[s][a] = 1));\n              }),\n            i\n          );\n        },\n        cn = function (t, e) {\n          return t === e;\n        },\n        hn = (function () {\n          function t(t, e) {\n            void 0 === e && (e = null), (this.value = t), (this.next = e);\n          }\n          return (\n            (t.prototype.toString = function (t) {\n              return t ? t(this.value) : \"\" + this.value;\n            }),\n            t\n          );\n        })(),\n        ln = (function () {\n          function t(t) {\n            void 0 === t && (t = cn),\n              (this.head = null),\n              (this.tail = null),\n              (this.compare = t);\n          }\n          return (\n            (t.prototype.prepend = function (t) {\n              var e = new hn(t, this.head);\n              return (this.head = e), this.tail || (this.tail = e), this;\n            }),\n            (t.prototype.append = function (t) {\n              var e = new hn(t);\n              return this.head\n                ? ((this.tail.next = e), (this.tail = e), this)\n                : ((this.head = e), (this.tail = e), this);\n            }),\n            (t.prototype.delete = function (t) {\n              if (!this.head) return null;\n              for (\n                var e = null;\n                this.head && this.compare(this.head.value, t);\n\n              )\n                (e = this.head), (this.head = this.head.next);\n              var n = this.head;\n              if (null !== n)\n                for (; n.next; )\n                  this.compare(n.next.value, t)\n                    ? ((e = n.next), (n.next = n.next.next))\n                    : (n = n.next);\n              return this.compare(this.tail.value, t) && (this.tail = n), e;\n            }),\n            (t.prototype.find = function (t) {\n              var e = t.value,\n                n = void 0 === e ? void 0 : e,\n                r = t.callback,\n                i = void 0 === r ? void 0 : r;\n              if (!this.head) return null;\n              for (var o = this.head; o; ) {\n                if (i && i(o.value)) return o;\n                if (void 0 !== n && this.compare(o.value, n)) return o;\n                o = o.next;\n              }\n              return null;\n            }),\n            (t.prototype.deleteTail = function () {\n              var t = this.tail;\n              if (this.head === this.tail)\n                return (this.head = null), (this.tail = null), t;\n              for (var e = this.head; e.next; )\n                e.next.next ? (e = e.next) : (e.next = null);\n              return (this.tail = e), t;\n            }),\n            (t.prototype.deleteHead = function () {\n              if (!this.head) return null;\n              var t = this.head;\n              return (\n                this.head.next\n                  ? (this.head = this.head.next)\n                  : ((this.head = null), (this.tail = null)),\n                t\n              );\n            }),\n            (t.prototype.fromArray = function (t) {\n              var e = this;\n              return (\n                t.forEach(function (t) {\n                  return e.append(t);\n                }),\n                this\n              );\n            }),\n            (t.prototype.toArray = function () {\n              for (var t = [], e = this.head; e; ) t.push(e), (e = e.next);\n              return t;\n            }),\n            (t.prototype.reverse = function () {\n              for (var t = this.head, e = null, n = null; t; )\n                (n = t.next), (t.next = e), (e = t), (t = n);\n              (this.tail = this.head), (this.head = e);\n            }),\n            (t.prototype.toString = function (t) {\n              return (\n                void 0 === t && (t = void 0),\n                this.toArray()\n                  .map(function (e) {\n                    return e.toString(t);\n                  })\n                  .toString()\n              );\n            }),\n            t\n          );\n        })();\n      !(function () {\n        function t() {\n          this.linkedList = new ln();\n        }\n        (t.prototype.isEmpty = function () {\n          return !this.linkedList.head;\n        }),\n          (t.prototype.peek = function () {\n            return this.linkedList.head ? this.linkedList.head.value : null;\n          }),\n          (t.prototype.enqueue = function (t) {\n            this.linkedList.append(t);\n          }),\n          (t.prototype.dequeue = function () {\n            var t = this.linkedList.deleteHead();\n            return t ? t.value : null;\n          }),\n          (t.prototype.toString = function (t) {\n            return this.linkedList.toString(t);\n          });\n      })();\n      var dn = function (t) {\n          var e = {},\n            n = t.nodes,\n            r = void 0 === n ? [] : n,\n            i = t.edges,\n            o = void 0 === i ? [] : i;\n          return (\n            r.forEach(function (t) {\n              e[t.id] = { degree: 0, inDegree: 0, outDegree: 0 };\n            }),\n            o.forEach(function (t) {\n              e[t.source].degree++,\n                e[t.source].outDegree++,\n                e[t.target].degree++,\n                e[t.target].inDegree++;\n            }),\n            e\n          );\n        },\n        fn = dn;\n      var pn = function (t, e) {\n          for (var n = un(t, e), r = [], i = n.length, o = 0; o < i; o += 1) {\n            r[o] = [];\n            for (var a = 0; a < i; a += 1)\n              o === a\n                ? (r[o][a] = 0)\n                : 0 !== n[o][a] && n[o][a]\n                ? (r[o][a] = n[o][a])\n                : (r[o][a] = 1 / 0);\n          }\n          for (var s = 0; s < i; s += 1)\n            for (o = 0; o < i; o += 1)\n              for (a = 0; a < i; a += 1)\n                r[o][a] > r[o][s] + r[s][a] && (r[o][a] = r[o][s] + r[s][a]);\n          return r;\n        },\n        gn =\n          ((function () {\n            function t(t) {\n              (this.count = t.length), (this.parent = {});\n              for (var e = 0, n = t; e < n.length; e++) {\n                var r = n[e];\n                this.parent[r] = r;\n              }\n            }\n            (t.prototype.find = function (t) {\n              for (; this.parent[t] !== t; ) t = this.parent[t];\n              return t;\n            }),\n              (t.prototype.union = function (t, e) {\n                var n = this.find(t),\n                  r = this.find(e);\n                n !== r &&\n                  (n < r\n                    ? (this.parent[e] !== e && this.union(this.parent[e], t),\n                      (this.parent[e] = this.parent[t]))\n                    : (this.parent[t] !== t && this.union(this.parent[t], e),\n                      (this.parent[t] = this.parent[e])));\n              }),\n              (t.prototype.connected = function (t, e) {\n                return this.find(t) === this.find(e);\n              });\n          })(),\n          function (t, e) {\n            return t - e;\n          }),\n        yn =\n          ((function () {\n            function t(t) {\n              void 0 === t && (t = gn), (this.compareFn = t), (this.list = []);\n            }\n            (t.prototype.getLeft = function (t) {\n              return 2 * t + 1;\n            }),\n              (t.prototype.getRight = function (t) {\n                return 2 * t + 2;\n              }),\n              (t.prototype.getParent = function (t) {\n                return 0 === t ? null : Math.floor((t - 1) / 2);\n              }),\n              (t.prototype.isEmpty = function () {\n                return this.list.length <= 0;\n              }),\n              (t.prototype.top = function () {\n                return this.isEmpty() ? void 0 : this.list[0];\n              }),\n              (t.prototype.delMin = function () {\n                var t = this.top(),\n                  e = this.list.pop();\n                return (\n                  this.list.length > 0 &&\n                    ((this.list[0] = e), this.moveDown(0)),\n                  t\n                );\n              }),\n              (t.prototype.insert = function (t) {\n                if (null !== t) {\n                  this.list.push(t);\n                  var e = this.list.length - 1;\n                  return this.moveUp(e), !0;\n                }\n                return !1;\n              }),\n              (t.prototype.moveUp = function (t) {\n                for (\n                  var e = this.getParent(t);\n                  t && t > 0 && this.compareFn(this.list[e], this.list[t]) > 0;\n\n                ) {\n                  var n = this.list[e];\n                  (this.list[e] = this.list[t]),\n                    (this.list[t] = n),\n                    (t = e),\n                    (e = this.getParent(t));\n                }\n              }),\n              (t.prototype.moveDown = function (t) {\n                var e,\n                  n = t,\n                  r = this.getLeft(t),\n                  i = this.getRight(t),\n                  o = this.list.length;\n                null !== r &&\n                r < o &&\n                this.compareFn(this.list[n], this.list[r]) > 0\n                  ? (n = r)\n                  : null !== i &&\n                    i < o &&\n                    this.compareFn(this.list[n], this.list[i]) > 0 &&\n                    (n = i),\n                  t !== n &&\n                    ((e = [this.list[n], this.list[t]]),\n                    (this.list[t] = e[0]),\n                    (this.list[n] = e[1]),\n                    this.moveDown(n));\n              });\n          })(),\n          function (t, e, n, r) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = -1),\n              void 0 === n && (n = -1),\n              void 0 === r && (r = \"-1\"),\n              (this.id = t),\n              (this.from = e),\n              (this.to = n),\n              (this.label = r);\n          }),\n        vn = (function () {\n          function t(t, e) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = \"-1\"),\n              (this.id = t),\n              (this.label = e),\n              (this.edges = []),\n              (this.edgeMap = {});\n          }\n          return (\n            (t.prototype.addEdge = function (t) {\n              this.edges.push(t), (this.edgeMap[t.id] = t);\n            }),\n            t\n          );\n        })(),\n        mn = (function () {\n          function t(t, e, n) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = !0),\n              void 0 === n && (n = !1),\n              (this.id = t),\n              (this.edgeIdAutoIncrease = e),\n              (this.edges = []),\n              (this.nodes = []),\n              (this.nodeMap = {}),\n              (this.edgeMap = {}),\n              (this.nodeLabelMap = {}),\n              (this.edgeLabelMap = {}),\n              (this.counter = 0),\n              (this.directed = n);\n          }\n          return (\n            (t.prototype.getNodeNum = function () {\n              return this.nodes.length;\n            }),\n            (t.prototype.addNode = function (t, e) {\n              if (!this.nodeMap[t]) {\n                var n = new vn(t, e);\n                this.nodes.push(n),\n                  (this.nodeMap[t] = n),\n                  this.nodeLabelMap[e] || (this.nodeLabelMap[e] = []),\n                  this.nodeLabelMap[e].push(t);\n              }\n            }),\n            (t.prototype.addEdge = function (t, e, n, r) {\n              if (\n                ((this.edgeIdAutoIncrease || void 0 === t) &&\n                  (t = this.counter++),\n                !(\n                  this.nodeMap[e] &&\n                  this.nodeMap[n] &&\n                  this.nodeMap[n].edgeMap[t]\n                ))\n              ) {\n                var i = new yn(t, e, n, r);\n                if (\n                  (this.edges.push(i),\n                  (this.edgeMap[t] = i),\n                  this.nodeMap[e].addEdge(i),\n                  this.edgeLabelMap[r] || (this.edgeLabelMap[r] = []),\n                  this.edgeLabelMap[r].push(i),\n                  !this.directed)\n                ) {\n                  var o = new yn(t, n, e, r);\n                  this.nodeMap[n].addEdge(o), this.edgeLabelMap[r].push(o);\n                }\n              }\n            }),\n            t\n          );\n        })(),\n        bn = (function () {\n          function t(t, e, n, r, i) {\n            (this.fromNode = t),\n              (this.toNode = e),\n              (this.nodeEdgeNodeLabel = {\n                nodeLabel1: n || \"-1\",\n                edgeLabel: r || \"-1\",\n                nodeLabel2: i || \"-1\",\n              });\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              return (\n                this.fromNode === t.formNode &&\n                this.toNode === t.toNode &&\n                this.nodeEdgeNodeLabel === t.nodeEdgeNodeLabel\n              );\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            t\n          );\n        })(),\n        xn = (function () {\n          function t() {\n            (this.rmpath = []), (this.dfsEdgeList = []);\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              var e = this.dfsEdgeList.length;\n              if (e !== t.length) return !1;\n              for (var n = 0; n < e; n++)\n                if (this.dfsEdgeList[n] !== t[n]) return !1;\n              return !0;\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            (t.prototype.pushBack = function (t, e, n, r, i) {\n              return (\n                this.dfsEdgeList.push(new bn(t, e, n, r, i)), this.dfsEdgeList\n              );\n            }),\n            (t.prototype.toGraph = function (t, e) {\n              void 0 === t && (t = -1), void 0 === e && (e = !1);\n              var n = new mn(t, !0, e);\n              return (\n                this.dfsEdgeList.forEach(function (t) {\n                  var e = t.fromNode,\n                    r = t.toNode,\n                    i = t.nodeEdgeNodeLabel,\n                    o = i.nodeLabel1,\n                    a = i.edgeLabel,\n                    s = i.nodeLabel2;\n                  \"-1\" !== o && n.addNode(e, o),\n                    \"-1\" !== s && n.addNode(r, s),\n                    n.addEdge(void 0, e, r, a);\n                }),\n                n\n              );\n            }),\n            (t.prototype.buildRmpath = function () {\n              this.rmpath = [];\n              for (\n                var t = void 0, e = this.dfsEdgeList.length - 1;\n                e >= 0;\n                e--\n              ) {\n                var n = this.dfsEdgeList[e],\n                  r = n.fromNode,\n                  i = n.toNode;\n                r < i &&\n                  (void 0 === t || i === t) &&\n                  (this.rmpath.push(e), (t = r));\n              }\n              return this.rmpath;\n            }),\n            (t.prototype.getNodeNum = function () {\n              var t = {};\n              return (\n                this.dfsEdgeList.forEach(function (e) {\n                  t[e.fromNode] || (t[e.fromNode] = !0),\n                    t[e.toNode] || (t[e.toNode] = !0);\n                }),\n                Object.keys(t).length\n              );\n            }),\n            t\n          );\n        })(),\n        wn = (function () {\n          function t(t) {\n            if (\n              ((this.his = {}),\n              (this.nodesUsed = {}),\n              (this.edgesUsed = {}),\n              (this.edges = []),\n              t)\n            ) {\n              for (; t; ) {\n                var e = t.edge;\n                this.edges.push(e),\n                  (this.nodesUsed[e.from] = 1),\n                  (this.nodesUsed[e.to] = 1),\n                  (this.edgesUsed[e.id] = 1),\n                  (t = t.preNode);\n              }\n              this.edges = this.edges.reverse();\n            }\n          }\n          return (\n            (t.prototype.hasNode = function (t) {\n              return 1 === this.nodesUsed[t.id];\n            }),\n            (t.prototype.hasEdge = function (t) {\n              return 1 === this.edgesUsed[t.id];\n            }),\n            t\n          );\n        })();\n      !(function () {\n        function t(t) {\n          var e = t.graphs,\n            n = t.minSupport,\n            r = void 0 === n ? 2 : n,\n            i = t.minNodeNum,\n            o = void 0 === i ? 1 : i,\n            a = t.maxNodeNum,\n            s = void 0 === a ? 4 : a,\n            u = t.top,\n            c = void 0 === u ? 10 : u,\n            h = t.directed,\n            l = void 0 !== h && h,\n            d = t.verbose,\n            f = void 0 !== d && d;\n          (this.graphs = e),\n            (this.dfsCode = new xn()),\n            (this.support = 0),\n            (this.frequentSize1Subgraphs = []),\n            (this.frequentSubgraphs = []),\n            (this.minSupport = r),\n            (this.top = c),\n            (this.directed = l),\n            (this.counter = 0),\n            (this.maxNodeNum = s),\n            (this.minNodeNum = o),\n            (this.verbose = f),\n            this.maxNodeNum < this.minNodeNum &&\n              (this.maxNodeNum = this.minNodeNum),\n            (this.reportDF = []);\n        }\n        (t.prototype.findForwardRootEdges = function (t, e) {\n          var n = this,\n            r = [],\n            i = t.nodeMap;\n          return (\n            e.edges.forEach(function (t) {\n              (n.directed || e.label <= i[t.to].label) && r.push(t);\n            }),\n            r\n          );\n        }),\n          (t.prototype.findBackwardEdge = function (t, e, n, r) {\n            if (!this.directed && e === n) return null;\n            for (\n              var i = t.nodeMap, o = i[n.to].edges, a = o.length, s = 0;\n              s < a;\n              s++\n            ) {\n              var u = o[s];\n              if (!r.hasEdge(u) && u.to === e.from)\n                if (this.directed) {\n                  if (\n                    i[e.from].label < i[n.to].label ||\n                    (i[e.from].label === i[n.to].label && e.label <= u.label)\n                  )\n                    return u;\n                } else if (\n                  e.label < u.label ||\n                  (e.label === u.label && i[e.to].label <= i[n.to].label)\n                )\n                  return u;\n            }\n            return null;\n          }),\n          (t.prototype.findForwardPureEdges = function (t, e, n, r) {\n            for (\n              var i = [], o = e.to, a = t.nodeMap[o].edges, s = a.length, u = 0;\n              u < s;\n              u++\n            ) {\n              var c = a[u],\n                h = t.nodeMap[c.to];\n              n <= h.label && !r.hasNode(h) && i.push(c);\n            }\n            return i;\n          }),\n          (t.prototype.findForwardRmpathEdges = function (t, e, n, r) {\n            for (\n              var i = [],\n                o = t.nodeMap,\n                a = o[e.to].label,\n                s = o[e.from].edges,\n                u = s.length,\n                c = 0;\n              c < u;\n              c++\n            ) {\n              var h = s[c],\n                l = o[h.to].label;\n              e.to === h.to ||\n                n > l ||\n                r.hasNode(o[h.to]) ||\n                ((e.label < h.label || (e.label === h.label && a <= l)) &&\n                  i.push(h));\n            }\n            return i;\n          }),\n          (t.prototype.getSupport = function (t) {\n            var e = {};\n            return (\n              t.forEach(function (t) {\n                e[t.graphId] || (e[t.graphId] = !0);\n              }),\n              Object.keys(e).length\n            );\n          }),\n          (t.prototype.findMinLabel = function (t) {\n            var e = void 0;\n            return (\n              Object.keys(t).forEach(function (n) {\n                var r = t[n],\n                  i = r.nodeLabel1,\n                  o = r.edgeLabel,\n                  a = r.nodeLabel2;\n                e\n                  ? (i < e.nodeLabel1 ||\n                      (i === e.nodeLabel1 && o < e.edgeLabel) ||\n                      (i === e.nodeLabel1 &&\n                        o === e.edgeLabel &&\n                        a < e.nodeLabel2)) &&\n                    (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a })\n                  : (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a });\n              }),\n              e\n            );\n          }),\n          (t.prototype.isMin = function () {\n            var t = this,\n              e = this.dfsCode;\n            if (\n              (this.verbose && console.log(\"isMin checking\", e),\n              1 === e.dfsEdgeList.length)\n            )\n              return !0;\n            var n = this.directed,\n              r = e.toGraph(-1, n),\n              i = r.nodeMap,\n              o = new xn(),\n              a = {};\n            r.nodes.forEach(function (e) {\n              t.findForwardRootEdges(r, e).forEach(function (t) {\n                var n = i[t.to],\n                  o = e.label + \"-\" + t.label + \"-\" + n.label;\n                a[o] ||\n                  (a[o] = {\n                    projected: [],\n                    nodeLabel1: e.label,\n                    edgeLabel: t.label,\n                    nodeLabel2: n.label,\n                  });\n                var s = { graphId: r.id, edge: t, preNode: null };\n                a[o].projected.push(s);\n              });\n            });\n            var s = this.findMinLabel(a);\n            o.dfsEdgeList.push(\n              new bn(0, 1, s.nodeLabel1, s.edgeLabel, s.nodeLabel2),\n            );\n            var u = s.nodeLabel1 + \"-\" + s.edgeLabel + \"-\" + s.nodeLabel2;\n            return (function a(s) {\n              for (\n                var u = o.buildRmpath(),\n                  c = o.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                  h = o.dfsEdgeList[u[0]].toNode,\n                  l = {},\n                  d = !1,\n                  f = 0,\n                  p = n ? -1 : 0,\n                  g = function (e) {\n                    if (d) return \"break\";\n                    s.forEach(function (n) {\n                      var i = new wn(n),\n                        a = t.findBackwardEdge(\n                          r,\n                          i.edges[u[e]],\n                          i.edges[u[0]],\n                          i,\n                        );\n                      a &&\n                        (l[a.label] ||\n                          (l[a.label] = { projected: [], edgeLabel: a.label }),\n                        l[a.label].projected.push({\n                          graphId: r.id,\n                          edge: l,\n                          preNode: n,\n                        }),\n                        (f = o.dfsEdgeList[u[e]].fromNode),\n                        (d = !0));\n                    });\n                  },\n                  y = u.length - 1;\n                y > p;\n                y--\n              ) {\n                if (\"break\" === g(y)) break;\n              }\n              if (d) {\n                var v = t.findMinLabel(l);\n                o.dfsEdgeList.push(new bn(h, f, \"-1\", v.edgeLabel, \"-1\"));\n                var m = o.dfsEdgeList.length - 1;\n                return (\n                  t.dfsCode.dfsEdgeList[m] === o.dfsEdgeList[m] &&\n                  a(l[v.edgeLabel].projected)\n                );\n              }\n              var b = {};\n              d = !1;\n              var x = 0;\n              s.forEach(function (e) {\n                var n = new wn(e),\n                  o = t.findForwardPureEdges(r, n.edges[u[0]], c, n);\n                o.length > 0 &&\n                  ((d = !0),\n                  (x = h),\n                  o.forEach(function (t) {\n                    var n = t.label + \"-\" + i[t.to].label;\n                    b[n] ||\n                      (b[n] = {\n                        projected: [],\n                        edgeLabel: t.label,\n                        nodeLabel2: i[t.to].label,\n                      }),\n                      b[n].projected.push({\n                        graphId: r.id,\n                        edge: t,\n                        preNode: e,\n                      });\n                  }));\n              });\n              var w = u.length,\n                O = function (e) {\n                  if (d) return \"break\";\n                  var n = u[e];\n                  s.forEach(function (e) {\n                    var a = new wn(e),\n                      s = t.findForwardRmpathEdges(r, a.edges[n], c, a);\n                    s.length > 0 &&\n                      ((d = !0),\n                      (x = o.dfsEdgeList[n].fromNode),\n                      s.forEach(function (t) {\n                        var n = t.label + \"-\" + i[t.to].label;\n                        b[n] ||\n                          (b[n] = {\n                            projected: [],\n                            edgeLabel: t.label,\n                            nodeLabel2: i[t.to].label,\n                          }),\n                          b[n].projected.push({\n                            graphId: r.id,\n                            edge: t,\n                            preNode: e,\n                          });\n                      }));\n                  });\n                };\n              for (y = 0; y < w; y++) {\n                if (\"break\" === O(y)) break;\n              }\n              if (!d) return !0;\n              var M = t.findMinLabel(b);\n              o.dfsEdgeList.push(\n                new bn(x, h + 1, \"-1\", M.edgeLabel, M.nodeLabel2),\n              );\n              var S = o.dfsEdgeList.length - 1;\n              return (\n                e.dfsEdgeList[S] === o.dfsEdgeList[S] &&\n                a(b[M.edgeLabel + \"-\" + M.nodeLabel2].projected)\n              );\n            })(a[u].projected);\n          }),\n          (t.prototype.report = function () {\n            if (!(this.dfsCode.getNodeNum() < this.minNodeNum)) {\n              this.counter++;\n              var t = this.dfsCode.toGraph(this.counter, this.directed);\n              this.frequentSubgraphs.push(Object(gt.b)(t));\n            }\n          }),\n          (t.prototype.subGraphMining = function (t) {\n            var e = this;\n            if (!(this.getSupport(t) < this.minSupport) && this.isMin()) {\n              this.report();\n              var n = this.dfsCode.getNodeNum(),\n                r = this.dfsCode.buildRmpath(),\n                i = this.dfsCode.dfsEdgeList[r[0]].toNode,\n                o = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                a = {},\n                s = {};\n              t.forEach(function (t) {\n                for (\n                  var u = e.graphs[t.graphId],\n                    c = u.nodeMap,\n                    h = new wn(t),\n                    l = r.length - 1;\n                  l >= 0;\n                  l--\n                ) {\n                  var d = e.findBackwardEdge(\n                    u,\n                    h.edges[r[l]],\n                    h.edges[r[0]],\n                    h,\n                  );\n                  if (d) {\n                    var f =\n                      e.dfsCode.dfsEdgeList[r[l]].fromNode + \"-\" + d.label;\n                    s[f] ||\n                      (s[f] = {\n                        projected: [],\n                        toNodeId: e.dfsCode.dfsEdgeList[r[l]].fromNode,\n                        edgeLabel: d.label,\n                      }),\n                      s[f].projected.push({\n                        graphId: t.graphId,\n                        edge: d,\n                        preNode: t,\n                      });\n                  }\n                }\n                if (!(n >= e.maxNodeNum)) {\n                  e.findForwardPureEdges(u, h.edges[r[0]], o, h).forEach(\n                    function (e) {\n                      var n = i + \"-\" + e.label + \"-\" + c[e.to].label;\n                      a[n] ||\n                        (a[n] = {\n                          projected: [],\n                          fromNodeId: i,\n                          edgeLabel: e.label,\n                          nodeLabel2: c[e.to].label,\n                        }),\n                        a[n].projected.push({\n                          graphId: t.graphId,\n                          edge: e,\n                          preNode: t,\n                        });\n                    },\n                  );\n                  var p = function (n) {\n                    e.findForwardRmpathEdges(u, h.edges[r[n]], o, h).forEach(\n                      function (i) {\n                        var o =\n                          e.dfsCode.dfsEdgeList[r[n]].fromNode +\n                          \"-\" +\n                          i.label +\n                          \"-\" +\n                          c[i.to].label;\n                        a[o] ||\n                          (a[o] = {\n                            projected: [],\n                            fromNodeId: e.dfsCode.dfsEdgeList[r[n]].fromNode,\n                            edgeLabel: i.label,\n                            nodeLabel2: c[i.to].label,\n                          }),\n                          a[o].projected.push({\n                            graphId: t.graphId,\n                            edge: i,\n                            preNode: t,\n                          });\n                      },\n                    );\n                  };\n                  for (l = 0; l < r.length; l++) p(l);\n                }\n              }),\n                Object.keys(s).forEach(function (t) {\n                  var n = s[t],\n                    r = n.toNodeId,\n                    o = n.edgeLabel;\n                  e.dfsCode.dfsEdgeList.push(new bn(i, r, \"-1\", o, \"-1\")),\n                    e.subGraphMining(s[t].projected),\n                    e.dfsCode.dfsEdgeList.pop();\n                }),\n                Object.keys(a).forEach(function (t) {\n                  var n = a[t],\n                    r = n.fromNodeId,\n                    o = n.edgeLabel,\n                    s = n.nodeLabel2;\n                  e.dfsCode.dfsEdgeList.push(new bn(r, i + 1, \"-1\", o, s)),\n                    e.subGraphMining(a[t].projected),\n                    e.dfsCode.dfsEdgeList.pop();\n                });\n            }\n          }),\n          (t.prototype.generate1EdgeFrequentSubGraphs = function () {\n            var t = this.graphs,\n              e = this.directed,\n              n = this.minSupport,\n              r = this.frequentSize1Subgraphs,\n              i = {},\n              o = {},\n              a = {},\n              s = {};\n            return (\n              Object.keys(t).forEach(function (n) {\n                var r = t[n],\n                  u = r.nodeMap;\n                r.nodes.forEach(function (t, r) {\n                  var c = t.label,\n                    h = n + \"-\" + c;\n                  if (!a[h]) {\n                    var l = i[c] || 0;\n                    l++, (i[c] = l);\n                  }\n                  (a[h] = { graphKey: n, label: c }),\n                    t.edges.forEach(function (t) {\n                      var r = c,\n                        i = u[t.to].label;\n                      if (!e && r > i) {\n                        var a = i;\n                        (i = r), (r = a);\n                      }\n                      var h = t.label,\n                        l = n + \"-\" + r + \"-\" + h + \"-\" + i,\n                        d = r + \"-\" + h + \"-\" + i;\n                      if (!o[d]) {\n                        var f = o[d] || 0;\n                        f++, (o[d] = f);\n                      }\n                      s[l] = {\n                        graphId: n,\n                        nodeLabel1: r,\n                        edgeLabel: h,\n                        nodeLabel2: i,\n                      };\n                    });\n                });\n              }),\n              Object.keys(i).forEach(function (t) {\n                if (!(i[t] < n)) {\n                  var e = { nodes: [], edges: [] };\n                  e.nodes.push({ id: \"0\", label: t }), r.push(e);\n                }\n              }),\n              r\n            );\n          }),\n          (t.prototype.run = function () {\n            var t = this;\n            if (\n              ((this.frequentSize1Subgraphs =\n                this.generate1EdgeFrequentSubGraphs()),\n              !(this.maxNodeNum < 2))\n            ) {\n              var e = this.graphs,\n                n = (this.directed, {});\n              Object.keys(e).forEach(function (r) {\n                var i = e[r],\n                  o = i.nodeMap;\n                i.nodes.forEach(function (e) {\n                  t.findForwardRootEdges(i, e).forEach(function (t) {\n                    var i = o[t.to],\n                      a = e.label + \"-\" + t.label + \"-\" + i.label;\n                    n[a] ||\n                      (n[a] = {\n                        projected: [],\n                        nodeLabel1: e.label,\n                        edgeLabel: t.label,\n                        nodeLabel2: i.label,\n                      });\n                    var s = { graphId: r, edge: t, preNode: null };\n                    n[a].projected.push(s);\n                  });\n                });\n              }),\n                Object.keys(n).forEach(function (e) {\n                  var r = n[e],\n                    i = r.projected,\n                    o = r.nodeLabel1,\n                    a = r.edgeLabel,\n                    s = r.nodeLabel2;\n                  t.dfsCode.dfsEdgeList.push(new bn(0, 1, o, a, s)),\n                    t.subGraphMining(i),\n                    t.dfsCode.dfsEdgeList.pop();\n                });\n            }\n          });\n      })();\n      var On = (function () {\n          function t(t) {\n            void 0 === t && (t = 10),\n              (this.linkedList = new ln()),\n              (this.maxStep = t);\n          }\n          return (\n            Object.defineProperty(t.prototype, \"length\", {\n              get: function () {\n                return this.linkedList.toArray().length;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.isMaxStack = function () {\n              return this.toArray().length >= this.maxStep;\n            }),\n            (t.prototype.peek = function () {\n              return this.isEmpty() ? null : this.linkedList.head.value;\n            }),\n            (t.prototype.push = function (t) {\n              this.linkedList.prepend(t),\n                this.length > this.maxStep && this.linkedList.deleteTail();\n            }),\n            (t.prototype.pop = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toArray = function () {\n              return this.linkedList.toArray().map(function (t) {\n                return t.value;\n              });\n            }),\n            (t.prototype.clear = function () {\n              for (; !this.isEmpty(); ) this.pop();\n            }),\n            t\n          );\n        })(),\n        Mn = sn.a.transform,\n        Sn = function (t) {\n          return function (e, n) {\n            return e[t] - n[t];\n          };\n        },\n        Cn = function (t, e, n) {\n          return t >= e && t <= n;\n        },\n        jn = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = e.x - t.x,\n            s = e.y - t.y,\n            u = r.x - n.x,\n            c = r.y - n.y,\n            h = a * c - s * u,\n            l = 1 / h;\n          if (h * h > 1e-4 * (a * a + s * s) * (u * u + c * c)) {\n            var d = (i * c - o * u) * l,\n              f = (i * s - o * a) * l;\n            return Cn(d, 0, 1) && Cn(f, 0, 1)\n              ? { x: t.x + d * a, y: t.y + d * s }\n              : null;\n          }\n          return null;\n        },\n        kn = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.width,\n            o = t.height,\n            a = [],\n            s = { x: n + i / 2, y: r + o / 2 };\n          a.push({ x: n, y: r }),\n            a.push({ x: n + i, y: r }),\n            a.push({ x: n + i, y: r + o }),\n            a.push({ x: n, y: r + o }),\n            a.push({ x: n, y: r });\n          for (\n            var u = null, c = 1;\n            c < a.length && !(u = jn(a[c - 1], a[c], s, e));\n            c++\n          );\n          return u;\n        },\n        En = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.r,\n            o = e.x - n,\n            a = e.y - r;\n          if (Math.sqrt(o * o + a * a) < i) return null;\n          var s = Math.sign(o),\n            u = Math.sign(a),\n            c = Math.atan(a / o);\n          return {\n            x: n + Math.abs(i * Math.cos(c)) * s,\n            y: r + Math.abs(i * Math.sin(c)) * u,\n          };\n        },\n        Nn = function (t, e) {\n          var n = t.rx,\n            r = t.ry,\n            i = t.x,\n            o = t.y,\n            a = e.x - i,\n            s = e.y - o,\n            u = Math.atan2(s / r, a / n);\n          return (\n            u < 0 && (u += 2 * Math.PI),\n            { x: i + n * Math.cos(u), y: o + r * Math.sin(u) }\n          );\n        },\n        Tn = function (t, e, n) {\n          void 0 === n && (n = 1);\n          var r = [t.x, t.y, n];\n          return (\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            sn.d.transformMat3(r, r, e),\n            { x: r[0], y: r[1] }\n          );\n        },\n        Pn = function (t, e, n) {\n          void 0 === n && (n = 1),\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = sn.b.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], e);\n          r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var i = [t.x, t.y, n];\n          return sn.d.transformMat3(i, i, r), { x: i[0], y: i[1] };\n        },\n        In = function (t, e, n) {\n          var r = t.x - e.x,\n            i = t.y - e.y,\n            o = t.x - n.x,\n            a = t.y - n.y,\n            s = (t.x * t.x - e.x * e.x - e.y * e.y + t.y * t.y) / 2,\n            u = (t.x * t.x - n.x * n.x - n.y * n.y + t.y * t.y) / 2,\n            c = i * o - r * a;\n          return { x: -(a * s - i * u) / c, y: -(r * u - o * s) / c };\n        },\n        Bn = function (t, e) {\n          var n = t.x - e.x,\n            r = t.y - e.y;\n          return Math.sqrt(n * n + r * r);\n        },\n        An = function (t, e) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              var r = [];\n              t.forEach(function (t) {\n                r.push(t * e);\n              }),\n                n.push(r);\n            }),\n            n\n          );\n        },\n        Ln = function (t) {\n          for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n            e[r] = [];\n            for (var i = 0; i < n; i += 1)\n              r === i\n                ? (e[r][i] = 0)\n                : 0 !== t[r][i] && t[r][i]\n                ? (e[r][i] = t[r][i])\n                : (e[r][i] = 1 / 0);\n          }\n          for (var o = 0; o < n; o += 1)\n            for (r = 0; r < n; r += 1)\n              for (i = 0; i < n; i += 1)\n                e[r][i] > e[r][o] + e[o][i] && (e[r][i] = e[r][o] + e[o][i]);\n          return e;\n        },\n        Dn = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (i[a][s] = 1), e || (i[s][a] = 1);\n              }),\n            i\n          );\n        },\n        _n = function (t, e) {\n          t.translate(e.x, e.y);\n        },\n        Rn = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = t.getCanvasBBox(),\n            i = e.x - r.minX,\n            o = e.y - r.minY,\n            a = Mn(n, [[\"t\", i, o]]);\n          t.setMatrix(a);\n        },\n        Yn = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e;\n          Object(gt.m)(e) || (r = [e, e]),\n            Object(gt.m)(e) && 1 === e.length && (r = [e[0], e[0]]),\n            (n = Mn(n, [[\"s\", r[0], r[1]]])),\n            t.setMatrix(n);\n        },\n        Fn = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            (n = Mn(n, [[\"r\", e]])),\n            t.setMatrix(n);\n        },\n        zn = function (t, e, n) {\n          for (var r = [], i = 0; i < t; i++) r[i] = 0;\n          return (\n            n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r\n          );\n        };\n      function Xn(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      var Wn = function (t, e, n) {\n          var r = !1,\n            i = t.length;\n          function o(t) {\n            return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n          }\n          if (i <= 2) return !1;\n          for (var a = 0; a < i; a++) {\n            var s = t[a],\n              u = t[(a + 1) % i];\n            if (Xn(s, u, [e, n])) return !0;\n            o(s[1] - n) > 0 != o(u[1] - n) > 0 &&\n              o(e - ((n - s[1]) * (s[0] - u[0])) / (s[1] - u[1]) - s[0]) < 0 &&\n              (r = !r);\n          }\n          return r;\n        },\n        Gn = function (t, e) {\n          return !(\n            e.minX > t.maxX ||\n            e.maxX < t.minX ||\n            e.minY > t.maxY ||\n            e.maxY < t.minY\n          );\n        },\n        qn = function (t, e) {\n          var n = function (t) {\n              var e = t.map(function (t) {\n                  return t[0];\n                }),\n                n = t.map(function (t) {\n                  return t[1];\n                });\n              return {\n                minX: Math.min.apply(null, e),\n                maxX: Math.max.apply(null, e),\n                minY: Math.min.apply(null, n),\n                maxY: Math.max.apply(null, n),\n              };\n            },\n            r = function (t) {\n              for (var e = [], n = t.length, r = 0; r < n - 1; r++) {\n                var i = t[r],\n                  o = t[r + 1];\n                e.push({\n                  from: { x: i[0], y: i[1] },\n                  to: { x: o[0], y: o[1] },\n                });\n              }\n              if (e.length > 1) {\n                var a = t[0],\n                  s = t[n - 1];\n                e.push({\n                  from: { x: s[0], y: s[1] },\n                  to: { x: a[0], y: a[1] },\n                });\n              }\n              return e;\n            };\n          if (t.length < 2 || e.length < 2) return !1;\n          var i = n(t),\n            o = n(e);\n          if (!Gn(i, o)) return !1;\n          var a = !1;\n          if (\n            (Object(gt.e)(e, function (e) {\n              if (Wn(t, e[0], e[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          if (\n            (Object(gt.e)(t, function (t) {\n              if (Wn(e, t[0], t[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          var s = r(t),\n            u = r(e),\n            c = !1;\n          return (\n            Object(gt.e)(u, function (t) {\n              if (\n                (function (t, e) {\n                  var n = !1;\n                  return (\n                    Object(gt.e)(t, function (t) {\n                      if (jn(t.from, t.to, e.from, e.to)) return (n = !0), !1;\n                    }),\n                    n\n                  );\n                })(s, t)\n              )\n                return (c = !0), !1;\n            }),\n            c\n          );\n        },\n        Hn = (function () {\n          function t(t, e, n, r) {\n            (this.x1 = t), (this.y1 = e), (this.x2 = n), (this.y2 = r);\n          }\n          return (\n            (t.prototype.getBBox = function () {\n              var t = Math.min(this.x1, this.x2),\n                e = Math.min(this.y1, this.y2),\n                n = Math.max(this.x1, this.x2),\n                r = Math.max(this.y1, this.y2);\n              return {\n                x: t,\n                y: e,\n                minX: t,\n                minY: e,\n                maxX: n,\n                maxY: r,\n                width: n - t,\n                height: r - e,\n              };\n            }),\n            t\n          );\n        })(),\n        Vn = function (t, e) {\n          return {\n            top: [t.minX, t.minY, t.maxX, t.minY],\n            left: [t.minX, t.minY, t.minX, t.maxY],\n            bottom: [t.minX, t.maxY, t.maxX, t.maxY],\n            right: [t.maxX, t.minY, t.maxX, t.maxY],\n          }[e];\n        },\n        Un = function (t, e) {\n          var n = (e.x2 - e.x1) * (t.y1 - e.y1) - (e.y2 - e.y1) * (t.x1 - e.x1),\n            r = (t.x2 - t.x1) * (t.y1 - e.y1) - (t.y2 - t.y1) * (t.x1 - e.x1),\n            i = (e.y2 - e.y1) * (t.x2 - t.x1) - (e.x2 - e.x1) * (t.y2 - t.y1);\n          if (i) {\n            var o = n / i,\n              a = r / i;\n            if (o >= 0 && o <= 1 && a >= 0 && a <= 1) return o;\n          }\n          return Number.POSITIVE_INFINITY;\n        },\n        Zn = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = 0,\n              o = [],\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = Vn(r, n[a]),\n              u = s[0],\n              c = s[1],\n              h = s[2],\n              l = s[3];\n            (o[a] = jn(\n              { x: e.x1, y: e.y1 },\n              { x: e.x2, y: e.y2 },\n              { x: u, y: c },\n              { x: h, y: l },\n            )),\n              o[a] && (i += 1);\n          }\n          return [o, i];\n        },\n        Kn = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = Number.POSITIVE_INFINITY,\n              o = 0,\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = Vn(r, n[a]),\n              u = s[0],\n              c = s[1],\n              h = s[2],\n              l = s[3],\n              d = Un(e, new Hn(u, c, h, l));\n            (d = Math.abs(d - 0.5)) >= 0 &&\n              d <= 1 &&\n              ((o += 1), (i = d < i ? d : i));\n          }\n          return 0 === o ? -1 : i;\n        },\n        Qn = function (t) {\n          var e = 0,\n            n = 0;\n          if (t.length > 0) {\n            for (var r = 0, i = t; r < i.length; r++) {\n              var o = i[r];\n              (e += o.x), (n += o.y);\n            }\n            (e /= t.length), (n /= t.length);\n          }\n          return { x: e, y: n };\n        },\n        $n = function (t, e) {\n          return Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2);\n        },\n        Jn = function (t, e) {\n          var n,\n            r = e.x1,\n            i = e.y1,\n            o = e.x2 - r,\n            a = e.y2 - i,\n            s = t.x - r,\n            u = t.y - i,\n            c = s * o + u * a;\n          n =\n            c <= 0 || (c = (s = o - s) * o + (u = a - u) * a) <= 0\n              ? 0\n              : (c * c) / (o * o + a * a);\n          var h = s * s + u * u - n;\n          return h < 0 && (h = 0), h;\n        },\n        tr = function (t, e, n) {\n          return (\n            void 0 === n && (n = 0.001),\n            Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2) < Math.pow(n, 2)\n          );\n        },\n        er = function (t, e) {\n          var n = t.x < e.x,\n            r = t.x > e.x + e.width,\n            i = t.y > e.y + e.height,\n            o = t.y < e.y;\n          if (!(n || r || i || o)) return 0;\n          if (i && !n && !r) return Math.pow(e.y + e.height - t.y, 2);\n          if (o && !n && !r) return Math.pow(t.y - e.y, 2);\n          if (n && !i && !o) return Math.pow(e.x - t.x, 2);\n          if (r && !i && !o) return Math.pow(e.x + e.width - t.x, 2);\n          var a = Math.min(Math.abs(e.x - t.x), Math.abs(e.x + e.width - t.x)),\n            s = Math.min(Math.abs(e.y - t.y), Math.abs(e.y + e.height - t.y));\n          return a * a + s * s;\n        },\n        nr = function (t, e) {\n          var n = t[0],\n            r = t[1],\n            i = t[2],\n            o = t[3],\n            a = e.x,\n            s = e.y,\n            u = [i - n, o - r];\n          if (sn.c.exactEquals(u, [0, 0])) return NaN;\n          var c = [-u[1], u[0]];\n          sn.c.normalize(c, c);\n          var h = [a - n, s - r];\n          return Math.abs(sn.c.dot(h, c));\n        },\n        rr = \"rgb(95, 149, 255)\",\n        ir = \"rgb(253, 253, 253)\",\n        or = \"rgb(247, 250, 255)\",\n        ar = \"rgb(224, 224, 224)\",\n        sr = \"rgb(224, 224, 224)\",\n        ur = {\n          version: \"0.3.0\",\n          rootContainerClassName: \"root-container\",\n          nodeContainerClassName: \"node-container\",\n          edgeContainerClassName: \"edge-container\",\n          comboContainerClassName: \"combo-container\",\n          delegateContainerClassName: \"delegate-container\",\n          defaultLoopPosition: \"top\",\n          nodeLabel: {\n            style: {\n              fill: \"#000\",\n              fontSize: 12,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n            },\n            offset: 4,\n          },\n          defaultNode: {\n            type: \"circle\",\n            style: { lineWidth: 1, stroke: rr, fill: \"rgb(239, 244, 255)\" },\n            size: 20,\n            color: rr,\n            linkPoints: { size: 8, lineWidth: 1, fill: or, stroke: rr },\n          },\n          nodeStateStyles: {\n            active: {\n              fill: or,\n              stroke: rr,\n              lineWidth: 2,\n              shadowColor: rr,\n              shadowBlur: 10,\n            },\n            selected: {\n              fill: \"rgb(255, 255, 255)\",\n              stroke: rr,\n              lineWidth: 4,\n              shadowColor: rr,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              fill: \"rgb(223, 234, 255)\",\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: {\n              fill: \"rgb(247, 250, 255)\",\n              stroke: \"rgb(191, 213, 255)\",\n              lineWidth: 1,\n            },\n            disable: {\n              fill: \"rgb(250, 250, 250)\",\n              stroke: \"rgb(224, 224, 224)\",\n              lineWidth: 1,\n            },\n          },\n          edgeLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n          },\n          defaultEdge: {\n            type: \"line\",\n            size: 1,\n            style: { stroke: ar, lineAppendWidth: 2 },\n            color: ar,\n          },\n          edgeStateStyles: {\n            active: { stroke: rr, lineWidth: 1 },\n            selected: {\n              stroke: rr,\n              lineWidth: 2,\n              shadowColor: rr,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: rr,\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(234, 234, 234)\", lineWidth: 1 },\n            disable: { stroke: \"rgb(245, 245, 245)\", lineWidth: 1 },\n          },\n          comboLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n            refY: 10,\n            refX: 10,\n          },\n          defaultCombo: {\n            type: \"circle\",\n            style: {\n              fill: ir,\n              lineWidth: 1,\n              stroke: sr,\n              r: 5,\n              width: 20,\n              height: 10,\n            },\n            size: [20, 5],\n            color: sr,\n            padding: [25, 20, 15, 20],\n          },\n          comboStateStyles: {\n            active: { stroke: rr, lineWidth: 1, fill: \"rgb(247, 250, 255)\" },\n            selected: {\n              stroke: rr,\n              lineWidth: 2,\n              fill: ir,\n              shadowColor: rr,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              fill: ir,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(224, 224, 224)\", fill: ir, lineWidth: 1 },\n            disable: {\n              stroke: \"rgb(234, 234, 234)\",\n              fill: \"rgb(250, 250, 250)\",\n              lineWidth: 1,\n            },\n          },\n          delegateStyle: {\n            fill: \"#F3F9FF\",\n            fillOpacity: 0.5,\n            stroke: \"#1890FF\",\n            strokeOpacity: 0.9,\n            lineDash: [5, 5],\n          },\n        },\n        cr = {\n          \" \": 0.3329986572265625,\n          a: 0.5589996337890625,\n          A: 0.6569992065429687,\n          b: 0.58599853515625,\n          B: 0.6769989013671875,\n          c: 0.5469985961914062,\n          C: 0.7279998779296875,\n          d: 0.58599853515625,\n          D: 0.705999755859375,\n          e: 0.554998779296875,\n          E: 0.63699951171875,\n          f: 0.37299957275390627,\n          F: 0.5769989013671875,\n          g: 0.5909988403320312,\n          G: 0.7479995727539063,\n          h: 0.555999755859375,\n          H: 0.7199996948242188,\n          i: 0.255999755859375,\n          I: 0.23699951171875,\n          j: 0.26699981689453123,\n          J: 0.5169998168945312,\n          k: 0.5289993286132812,\n          K: 0.6899993896484375,\n          l: 0.23499908447265624,\n          L: 0.5879989624023437,\n          m: 0.854998779296875,\n          M: 0.8819992065429687,\n          n: 0.5589996337890625,\n          N: 0.7189987182617188,\n          o: 0.58599853515625,\n          O: 0.7669998168945312,\n          p: 0.58599853515625,\n          P: 0.6419998168945312,\n          q: 0.58599853515625,\n          Q: 0.7669998168945312,\n          r: 0.3649993896484375,\n          R: 0.6759994506835938,\n          s: 0.504998779296875,\n          S: 0.6319992065429687,\n          t: 0.354998779296875,\n          T: 0.6189987182617187,\n          u: 0.5599990844726562,\n          U: 0.7139999389648437,\n          v: 0.48199920654296874,\n          V: 0.6389999389648438,\n          w: 0.754998779296875,\n          W: 0.929998779296875,\n          x: 0.5089996337890625,\n          X: 0.63699951171875,\n          y: 0.4959991455078125,\n          Y: 0.66199951171875,\n          z: 0.48699951171875,\n          Z: 0.6239990234375,\n          0: 0.6,\n          1: 0.40099945068359377,\n          2: 0.6,\n          3: 0.6,\n          4: 0.6,\n          5: 0.6,\n          6: 0.6,\n          7: 0.5469985961914062,\n          8: 0.6,\n          9: 0.6,\n          \"[\": 0.3329986572265625,\n          \"]\": 0.3329986572265625,\n          \",\": 0.26399993896484375,\n          \".\": 0.26399993896484375,\n          \";\": 0.26399993896484375,\n          \":\": 0.26399993896484375,\n          \"{\": 0.3329986572265625,\n          \"}\": 0.3329986572265625,\n          \"\\\\\": 0.5,\n          \"|\": 0.19499969482421875,\n          \"=\": 0.604998779296875,\n          \"+\": 0.604998779296875,\n          \"-\": 0.604998779296875,\n          _: 0.5,\n          \"`\": 0.3329986572265625,\n          \" ~\": 0.8329986572265625,\n          \"!\": 0.3329986572265625,\n          \"@\": 0.8579986572265625,\n          \"#\": 0.6,\n          $: 0.6,\n          \"%\": 0.9699996948242188,\n          \"^\": 0.517999267578125,\n          \"&\": 0.7259994506835937,\n          \"*\": 0.505999755859375,\n          \"(\": 0.3329986572265625,\n          \")\": 0.3329986572265625,\n          \"<\": 0.604998779296875,\n          \">\": 0.604998779296875,\n          \"/\": 0.5,\n          \"?\": 0.53699951171875,\n        },\n        hr = Math.PI,\n        lr = Math.sin,\n        dr = Math.cos,\n        fr = lr(hr / 8),\n        pr = dr(hr / 8),\n        gr = function (t, e) {\n          var n = t.getBBox(),\n            r = { x: n.minX, y: n.minY },\n            i = { x: n.maxX, y: n.maxY };\n          if (e) {\n            var o = e.getMatrix();\n            o || (o = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n              (r = Tn(r, o)),\n              (i = Tn(i, o));\n          }\n          var a = r.x,\n            s = r.y,\n            u = i.x,\n            c = i.y;\n          return {\n            x: a,\n            y: s,\n            minX: a,\n            minY: s,\n            maxX: u,\n            maxY: c,\n            width: u - a,\n            height: c - s,\n          };\n        },\n        yr = function (t) {\n          var e = t.sourceNode || t.targetNode,\n            n = e.get(\"group\").getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e.getKeyShape().getBBox(),\n            i = t.loopCfg || {},\n            o = i.dist || 2 * Math.max(r.width, r.height),\n            a = i.position || ur.defaultLoopPosition,\n            s = [n[6], n[7]],\n            u = [t.startPoint.x, t.startPoint.y],\n            c = [t.endPoint.x, t.endPoint.y],\n            h = r.height / 2,\n            l = r.height / 2,\n            d = h * fr,\n            f = h * pr,\n            p = l * fr,\n            g = l * pr;\n          if (u[0] === c[0] && u[1] === c[1]) {\n            switch (a) {\n              case \"top\":\n                (u = [s[0] - d, s[1] - f]), (c = [s[0] + p, s[1] - g]);\n                break;\n              case \"top-right\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (u = [s[0] + (d = h * fr), s[1] - (f = h * pr)]),\n                  (c = [s[0] + (g = l * pr), s[1] - (p = l * fr)]);\n                break;\n              case \"right\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (u = [s[0] + (f = h * pr), s[1] - (d = h * fr)]),\n                  (c = [s[0] + (g = l * pr), s[1] + (p = l * fr)]);\n                break;\n              case \"bottom-right\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (u = [s[0] + (f = h * pr), s[1] + (d = h * fr)]),\n                  (c = [s[0] + (p = l * fr), s[1] + (g = l * pr)]);\n                break;\n              case \"bottom\":\n                (h = r.height / 2),\n                  (l = r.height / 2),\n                  (u = [s[0] + (d = h * fr), s[1] + (f = h * pr)]),\n                  (c = [s[0] - (p = l * fr), s[1] + (g = l * pr)]);\n                break;\n              case \"bottom-left\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (u = [s[0] - (d = h * fr), s[1] + (f = h * pr)]),\n                  (c = [s[0] - (g = l * pr), s[1] + (p = l * fr)]);\n                break;\n              case \"left\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (u = [s[0] - (f = h * pr), s[1] + (d = h * fr)]),\n                  (c = [s[0] - (g = l * pr), s[1] - (p = l * fr)]);\n                break;\n              case \"top-left\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (u = [s[0] - (f = h * pr), s[1] - (d = h * fr)]),\n                  (c = [s[0] - (p = l * fr), s[1] - (g = l * pr)]);\n                break;\n              default:\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (u = [s[0] - (d = h * fr), s[1] - (f = h * pr)]),\n                  (c = [s[0] + (p = l * fr), s[1] - (g = l * pr)]);\n            }\n            if (!1 === i.clockwise) {\n              var y = [u[0], u[1]];\n              (u = [c[0], c[1]]), (c = [y[0], y[1]]);\n            }\n          }\n          var v = [u[0] - s[0], u[1] - s[1]],\n            m = (h + o) / h,\n            b = (l + o) / l;\n          !1 === i.clockwise && ((m = (l + o) / l), (b = (h + o) / h));\n          var x = sn.c.scale([0, 0], v, m),\n            w = [s[0] + x[0], s[1] + x[1]],\n            O = [c[0] - s[0], c[1] - s[1]],\n            M = sn.c.scale([0, 0], O, b),\n            S = [s[0] + M[0], s[1] + M[1]];\n          return (\n            (t.startPoint = { x: u[0], y: u[1] }),\n            (t.endPoint = { x: c[0], y: c[1] }),\n            (t.controlPoints = [\n              { x: w[0], y: w[1] },\n              { x: S[0], y: S[1] },\n            ]),\n            t\n          );\n        },\n        vr = function (t, e, n, r, i) {\n          var o = [],\n            a = t.getPoint(e);\n          if (null === a) return { x: 0, y: 0, angle: 0 };\n          if (e < 1e-4) o = t.getStartTangent().reverse();\n          else if (e > 0.9999) o = t.getEndTangent();\n          else {\n            var s = t.getPoint(e + 1e-4);\n            o.push([a.x, a.y]), o.push([s.x, s.y]);\n          }\n          var u = Math.atan2(o[1][1] - o[0][1], o[1][0] - o[0][0]);\n          if (\n            (u < 0 && (u += 2 * hr),\n            n && ((a.x += dr(u) * n), (a.y += lr(u) * n)),\n            r)\n          ) {\n            var c = u - hr / 2;\n            u > 0.5 * hr && u < 1.5 * hr && (c -= hr),\n              (a.x += dr(c) * r),\n              (a.y += lr(c) * r);\n          }\n          var l = { x: a.x, y: a.y, angle: u };\n          return i\n            ? (u > 0.5 * hr && u < 1.5 * hr && (u -= hr),\n              Object(h.a)({ rotate: u }, l))\n            : l;\n        },\n        mr = function t(e, n) {\n          if (!1 === n(e)) return !1;\n          if (e && e.children)\n            for (var r = e.children.length - 1; r >= 0; r--)\n              if (!t(e.children[r], n)) return !1;\n          return !0;\n        },\n        br = function (t, e) {\n          \"function\" == typeof e && mr(t, e);\n        },\n        xr = function (t, e) {\n          \"function\" == typeof e &&\n            (function t(e, n) {\n              if (e && e.children)\n                for (var r = e.children.length - 1; r >= 0; r--)\n                  if (!t(e.children[r], n)) return;\n              return !1 !== n(e);\n            })(t, e);\n        },\n        wr = function (t, e) {\n          return e * (cr[t] || 1);\n        },\n        Or = function (t, e) {\n          var n = 0,\n            r = new RegExp(\"[一-龥]+\");\n          return (\n            t.split(\"\").forEach(function (t) {\n              r.test(t) ? (n += e) : (n += wr(t, e));\n            }),\n            [n, e]\n          );\n        },\n        Mr = function (t, e) {\n          var n = [],\n            r = {},\n            i = {};\n          t.forEach(function (t) {\n            i[t.id] = t;\n          }),\n            t.forEach(function (t, e) {\n              var o = Object(gt.b)(t);\n              (o.itemType = \"combo\"),\n                (o.children = void 0),\n                o.parentId === o.id\n                  ? (console.warn(\n                      \"The parentId for combo \" +\n                        o.id +\n                        \" can not be the same as the combo's id\",\n                    ),\n                    delete o.parentId)\n                  : o.parentId &&\n                    !i[o.parentId] &&\n                    (console.warn(\n                      \"The parent combo for combo \" + o.id + \" does not exist!\",\n                    ),\n                    delete o.parentId);\n              var a = r[o.id];\n              if (a) {\n                if (\n                  ((o.children = a.children), (r[o.id] = o), !(a = o).parentId)\n                )\n                  return void n.push(a);\n                var s = r[a.parentId];\n                if (s) s.children ? s.children.push(o) : (s.children = [o]);\n                else {\n                  var u = { id: a.parentId, children: [a] };\n                  (r[a.parentId] = u), (r[o.id] = o);\n                }\n              } else if (Object(gt.x)(t.parentId)) {\n                var c = r[t.parentId];\n                if (c)\n                  c.children ? c.children.push(o) : (c.children = [o]),\n                    (r[o.id] = o);\n                else {\n                  var h = { id: t.parentId, children: [o] };\n                  (r[h.id] = h), (r[o.id] = o);\n                }\n              } else n.push(o), (r[o.id] = o);\n            });\n          var o = {};\n          (e || []).forEach(function (t) {\n            o[t.id] = t;\n            var e = r[t.comboId];\n            if (e) {\n              var n = { id: t.id, comboId: t.comboId };\n              e.children ? e.children.push(n) : (e.children = [n]),\n                (n.itemType = \"node\"),\n                (r[t.id] = n);\n            }\n          });\n          var a = 0;\n          return (\n            n.forEach(function (t) {\n              (t.depth = a + 10),\n                mr(t, function (t) {\n                  var e,\n                    n = r[t.id].itemType;\n                  (e = \"node\" === n ? r[t.comboId] : r[t.parentId]),\n                    (t.depth = e && \"node\" === n ? a + 1 : a + 10),\n                    a < t.depth && (a = t.depth);\n                  var i = o[t.id];\n                  return i && (i.depth = t.depth), !0;\n                });\n            }),\n            n\n          );\n        },\n        Sr = function (t, e, n) {\n          var r,\n            i = t,\n            o = { root: { children: t } },\n            a = !1,\n            s = \"root\";\n          (t || []).forEach(function (t) {\n            if (!a)\n              return t.id === e\n                ? ((r = t),\n                  \"combo\" === t.itemType ? (r.parentId = n) : (r.comboId = n),\n                  void (a = !0))\n                : void br(t, function (t) {\n                    return (\n                      (o[t.id] = { children: t.children }),\n                      (i = o[t.parentId || t.comboId || \"root\"].children),\n                      !t ||\n                        (!t.removed && e !== t.id) ||\n                        !i ||\n                        ((s = t.parentId || t.comboId || \"root\"),\n                        (r = t),\n                        \"combo\" === t.itemType\n                          ? (r.parentId = n)\n                          : (r.comboId = n),\n                        (a = !0),\n                        !1)\n                    );\n                  });\n          });\n          var u = (i = o[s].children) ? i.indexOf(r) : -1;\n          if (\n            (u > -1 && i.splice(u, 1),\n            a ||\n              ((r = { id: e, itemType: \"node\", comboId: n }),\n              (o[e] = { children: void 0 })),\n            e)\n          ) {\n            var c = !1;\n            if (n) {\n              var h = 0;\n              (t || []).forEach(function (t) {\n                c ||\n                  br(t, function (t) {\n                    return (\n                      n !== t.id ||\n                      ((c = !0),\n                      t.children ? t.children.push(r) : (t.children = [r]),\n                      (h = t.depth),\n                      \"node\" === r.itemType\n                        ? (r.depth = h + 2)\n                        : (r.depth = h + 1),\n                      !1)\n                    );\n                  });\n              });\n            } else (n && c) || \"node\" === r.itemType || t.push(r);\n            var l = r.depth;\n            br(r, function (t) {\n              return (\n                \"node\" === t.itemType ? (l += 2) : (l += 1), (t.depth = l), !0\n              );\n            });\n          }\n          return t;\n        },\n        Cr = function (t, e) {\n          var n = {\n            minX: 1 / 0,\n            minY: 1 / 0,\n            maxX: -1 / 0,\n            maxY: -1 / 0,\n            x: void 0,\n            y: void 0,\n            width: void 0,\n            height: void 0,\n            centerX: void 0,\n            centerY: void 0,\n          };\n          return t && 0 !== t.length\n            ? (t.forEach(function (t) {\n                var r = e.findById(t.id);\n                if (r && r.isVisible()) {\n                  r.set(\"bboxCanvasCache\", void 0);\n                  var i = r.getCanvasBBox();\n                  i.x && n.minX > i.minX && (n.minX = i.minX),\n                    i.y && n.minY > i.minY && (n.minY = i.minY),\n                    i.x && n.maxX < i.maxX && (n.maxX = i.maxX),\n                    i.y && n.maxY < i.maxY && (n.maxY = i.maxY);\n                }\n              }),\n              (n.x = (n.minX + n.maxX) / 2),\n              (n.y = (n.minY + n.maxY) / 2),\n              (n.width = n.maxX - n.minX),\n              (n.height = n.maxY - n.minY),\n              (n.centerX = (n.minX + n.maxX) / 2),\n              (n.centerY = (n.minY + n.maxY) / 2),\n              Object.keys(n).forEach(function (t) {\n                (n[t] !== 1 / 0 && n[t] !== -1 / 0) || (n[t] = void 0);\n              }),\n              n)\n            : n;\n        },\n        jr = function (t) {\n          var e =\n            Object(gt.t)(t.x) ||\n            Object(gt.t)(t.y) ||\n            t.type ||\n            t.anchorPoints ||\n            t.size;\n          return (\n            t.style &&\n              (e =\n                e ||\n                Object(gt.t)(t.style.r) ||\n                Object(gt.t)(t.style.width) ||\n                Object(gt.t)(t.style.height) ||\n                Object(gt.t)(t.style.rx) ||\n                Object(gt.t)(t.style.ry)),\n            e\n          );\n        },\n        kr = function (t) {\n          var e = {};\n          return (\n            Object.keys(t).forEach(function (n) {\n              var r = t[n];\n              if (Object(gt.v)(r)) {\n                var i = {};\n                Object.keys(r).forEach(function (t) {\n                  var e = r[t];\n                  (\"img\" !== t || Object(gt.x)(e)) && (i[t] = Object(gt.b)(e));\n                }),\n                  (e[n] = i);\n              } else e[n] = Object(gt.b)(r);\n            }),\n            e\n          );\n        },\n        Er = function (t) {\n          if (!t)\n            return console.error(\"G6 Error Tips: the data must be defined\"), !1;\n          var e = t.nodes,\n            n = t.edges,\n            r = t.combos,\n            i = void 0 === r ? [] : r;\n          if (!e && !n) {\n            var o = !0;\n            return (\n              br(t, function (t) {\n                return !!Object(gt.x)(t.id) || ((o = !1), !1);\n              }),\n              o\n            );\n          }\n          var a = (e || []).find(function (t) {\n            return !Object(gt.x)(t.id);\n          });\n          if (a)\n            return (\n              console.warn(\n                \"G6 Warning Tips: missing 'id' property, or %c\" +\n                  a.id +\n                  \"%c is not a string.\",\n                \"font-size: 20px; color: red;\",\n                \"\",\n              ),\n              !1\n            );\n          var s = (e || []).map(function (t) {\n              return t.id;\n            }),\n            u = i.map(function (t) {\n              return t.id;\n            }),\n            c = Object(h.f)(Object(h.f)([], s), u),\n            l = (n || []).find(function (t) {\n              return !c.includes(t.source) || !c.includes(t.target);\n            });\n          return (\n            !l ||\n            (console.warn(\n              \"G6 Warning Tips: The source %c\" +\n                l.source +\n                \"%c or the target %c\" +\n                l.target +\n                \"%c of the edge do not exist in the nodes or combos.\",\n              \"font-size: 20px; color: red;\",\n              \"\",\n              \"font-size: 20px; color: red;\",\n              \"\",\n            ),\n            !1)\n          );\n        },\n        Nr = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.destroyed = !1),\n              (this.modes = t.get(\"modes\") || { default: [] }),\n              this.formatModes(),\n              (this.mode = t.get(\"defaultMode\") || \"default\"),\n              (this.currentBehaves = []),\n              this.setMode(this.mode);\n          }\n          return (\n            (t.prototype.formatModes = function () {\n              var t = this.modes;\n              Object(gt.e)(t, function (t) {\n                Object(gt.e)(t, function (e, n) {\n                  Object(gt.x)(e) && (t[n] = { type: e });\n                });\n              });\n            }),\n            (t.prototype.setBehaviors = function (t) {\n              var e,\n                n = this.graph,\n                r = this.modes[t],\n                i = [];\n              Object(gt.e)(r || [], function (t) {\n                var r = tn.getBehavior(t.type || t);\n                r && (e = new r(t)) && (e.bind(n), i.push(e));\n              }),\n                (this.currentBehaves = i);\n            }),\n            (t.mergeBehaviors = function (t, e) {\n              return (\n                Object(gt.e)(e, function (e) {\n                  t.indexOf(e) < 0 &&\n                    (Object(gt.x)(e) && (e = { type: e }), t.push(e));\n                }),\n                t\n              );\n            }),\n            (t.filterBehaviors = function (t, e) {\n              var n = [];\n              return (\n                t.forEach(function (t) {\n                  var r = \"\";\n                  (r = Object(gt.x)(t) ? t : t.type),\n                    e.indexOf(r) < 0 && n.push(t);\n                }),\n                n\n              );\n            }),\n            (t.prototype.setMode = function (t) {\n              var e = this.modes,\n                n = this.graph,\n                r = t;\n              e[r] &&\n                (n.emit(\"beforemodechange\", { mode: t }),\n                Object(gt.e)(this.currentBehaves, function (t) {\n                  t.delegate && t.delegate.remove(), t.unbind(n);\n                }),\n                this.setBehaviors(r),\n                n.emit(\"aftermodechange\", { mode: t }),\n                (this.mode = t));\n            }),\n            (t.prototype.getMode = function () {\n              return this.mode;\n            }),\n            (t.prototype.manipulateBehaviors = function (e, n, r) {\n              var i,\n                o = this;\n              if (((i = Object(gt.m)(e) ? e : [e]), Object(gt.m)(n)))\n                return (\n                  Object(gt.e)(n, function (e) {\n                    o.modes[e]\n                      ? (o.modes[e] = r\n                          ? t.mergeBehaviors(o.modes[e] || [], i)\n                          : t.filterBehaviors(o.modes[e] || [], i))\n                      : r && (o.modes[e] = i);\n                  }),\n                  this\n                );\n              var a = n;\n              return (\n                n || (a = this.mode),\n                this.modes[a] || (r && (this.modes[a] = i)),\n                (this.modes[a] = r\n                  ? t.mergeBehaviors(this.modes[a] || [], i)\n                  : t.filterBehaviors(this.modes[a] || [], i)),\n                this.setMode(this.mode),\n                this\n              );\n            }),\n            (t.prototype.updateBehavior = function (t, e, n) {\n              Object(gt.x)(t) && (t = { type: t });\n              var r = [];\n              if (n && n !== this.mode && \"default\" !== n) {\n                if (!(r = this.modes[n]) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                var i = r.length;\n                for (a = 0; a < i; a++) {\n                  if ((s = r[a]).type === t.type || s === t.type)\n                    return (\n                      s === t.type && (s = { type: s }),\n                      Object.assign(s, e),\n                      (r[a] = s),\n                      this\n                    );\n                  a === i - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              } else {\n                if (!(r = this.currentBehaves) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                for (var o = r.length, a = 0; a < o; a++) {\n                  var s;\n                  if ((s = r[a]).type === t.type) return s.updateCfg(e), this;\n                  a === o - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              }\n              return this;\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.modes = null),\n                (this.currentBehaves = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })();\n      function Tr(t, e) {\n        if (t) for (var n in e) e.hasOwnProperty(n) && (t.style[n] = e[n]);\n        return t;\n      }\n      var Pr = (function (t) {\n          function e(e, n) {\n            var r = t.call(this, e, n) || this;\n            return (\n              (r.item = n.item),\n              (r.canvasX = n.canvasX),\n              (r.canvasY = n.canvasY),\n              (r.detail = n.detail),\n              r\n            );\n          }\n          return Object(h.c)(e, t), e;\n        })(z.Event),\n        Ir = function (t) {\n          return t + \"-\" + Math.random() + Date.now();\n        },\n        Br = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          if (Object(gt.t)(t)) e = n = r = i = t;\n          else if (Object(gt.x)(t)) {\n            e = n = r = i = parseInt(t, 10);\n          } else\n            Object(gt.m)(t) &&\n              ((e = t[0]),\n              (r = Object(gt.s)(t[1]) ? t[0] : t[1]),\n              (i = Object(gt.s)(t[2]) ? t[0] : t[2]),\n              (n = Object(gt.s)(t[3]) ? r : t[3]));\n          return [e, r, i, n];\n        },\n        Ar = function (t) {\n          var e = new Pr(t.type, t);\n          return (\n            (e.clientX = t.clientX),\n            (e.clientY = t.clientY),\n            (e.x = t.x),\n            (e.y = t.y),\n            (e.target = t.target),\n            (e.currentTarget = t.currentTarget),\n            (e.bubbles = !0),\n            (e.item = t.item),\n            e\n          );\n        },\n        Lr = function (t) {\n          if (!t) return !1;\n          for (var e = [1, 0, 0, 0, 1, 0, 0, 0, 1], n = 0; n < 9; n++)\n            if (t[n] !== e[n]) return !0;\n          return !1;\n        },\n        Dr = function (t) {\n          return Number.isNaN(Number(t));\n        },\n        _r = function (t) {\n          for (\n            var e = 1 / 0, n = -1 / 0, r = 1 / 0, i = -1 / 0, o = 0;\n            o < t.length;\n            o++\n          ) {\n            var a = t[o].getBBox(),\n              s = a.minX,\n              u = a.minY,\n              c = a.maxX,\n              h = a.maxY;\n            s < e && (e = s),\n              u < r && (r = u),\n              c > n && (n = c),\n              h > i && (i = h);\n          }\n          return {\n            x: Math.floor(e),\n            y: Math.floor(r),\n            width: Math.ceil(n) - Math.floor(e),\n            height: Math.ceil(i) - Math.floor(r),\n            minX: e,\n            minY: r,\n            maxX: n,\n            maxY: i,\n          };\n        },\n        Rr = function (t, e, n, r, i) {\n          void 0 === e && (e = 15),\n            void 0 === n && (n = \"quadratic\"),\n            void 0 === r && (r = void 0),\n            void 0 === i && (i = void 0);\n          for (\n            var o = t.length,\n              a = 2 * e,\n              s = [\n                \"top\",\n                \"top-right\",\n                \"right\",\n                \"bottom-right\",\n                \"bottom\",\n                \"bottom-left\",\n                \"left\",\n                \"top-left\",\n              ],\n              u = {},\n              c = [],\n              h = {},\n              l = 0;\n            l < o;\n            l++\n          ) {\n            var d = t[l],\n              f = d.source,\n              p = d.target,\n              g = f + \"-\" + p;\n            if (!c[l]) {\n              u[g] || (u[g] = []), (c[l] = !0), u[g].push(d);\n              for (var y = 0; y < o; y++)\n                if (l !== y) {\n                  var v = t[y],\n                    m = v.source,\n                    b = v.target;\n                  c[y] ||\n                    (f === b && p === m\n                      ? (u[g].push(v),\n                        (c[y] = !0),\n                        (h[m + \"|\" + b + \"|\" + (u[g].length - 1)] = !0))\n                      : f === m && p === b && (u[g].push(v), (c[y] = !0)));\n                }\n            }\n          }\n          for (var x in u)\n            for (var w = u[x], O = w.length, M = 0; M < O; M++) {\n              var S = w[M];\n              if (S.source !== S.target)\n                if (1 === O && r && S.source !== S.target) S.type = r;\n                else {\n                  S.type = n;\n                  var C =\n                    (M % 2 == 0 ? 1 : -1) *\n                    (h[S.source + \"|\" + S.target + \"|\" + M] ? -1 : 1);\n                  S.curveOffset =\n                    O % 2 == 1\n                      ? C * Math.ceil(M / 2) * a\n                      : C * (Math.floor(M / 2) * a + e);\n                }\n              else\n                i && (S.type = i),\n                  (S.loopCfg = {\n                    position: s[M % 8],\n                    dist: 20 * Math.floor(M / 8) + 50,\n                  });\n            }\n          return t;\n        },\n        Yr = (function () {\n          function t(t) {\n            (this.destroyed = !1), (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.getViewCenter = function () {\n              var t = this.getFormatPadding(),\n                e = this.graph,\n                n = this.graph.get(\"width\"),\n                r = e.get(\"height\");\n              return {\n                x: (n - t[1] - t[3]) / 2 + t[3],\n                y: (r - t[0] - t[2]) / 2 + t[0],\n              };\n            }),\n            (t.prototype.fitCenter = function () {\n              var t = this.graph,\n                e = t.get(\"group\");\n              e.resetMatrix();\n              var n = e.getCanvasBBox();\n              if (0 !== n.width && 0 !== n.height) {\n                var r = this.getViewCenter(),\n                  i = n.x + n.width / 2,\n                  o = n.y + n.height / 2;\n                t.translate(r.x - i, r.y - o);\n              }\n            }),\n            (t.prototype.fitView = function () {\n              var t = this.graph,\n                e = this.getFormatPadding(),\n                n = t.get(\"width\"),\n                r = t.get(\"height\"),\n                i = t.get(\"group\");\n              i.resetMatrix();\n              var o = i.getCanvasBBox();\n              if (0 !== o.width && 0 !== o.height) {\n                var a = this.getViewCenter(),\n                  s = o.x + o.width / 2,\n                  u = o.y + o.height / 2;\n                t.translate(a.x - s, a.y - u);\n                var c = (n - e[1] - e[3]) / o.width,\n                  h = (r - e[0] - e[2]) / o.height,\n                  l = c;\n                c > h && (l = h), t.zoom(l, a);\n              }\n            }),\n            (t.prototype.getFormatPadding = function () {\n              var t = this.graph.get(\"fitViewPadding\");\n              return Br(t);\n            }),\n            (t.prototype.focusPoint = function (t, e, n) {\n              var r = this,\n                i = this.getViewCenter(),\n                o = this.getPointByCanvas(i.x, i.y),\n                a = this.graph.get(\"group\").getMatrix();\n              if ((a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]), e)) {\n                var s = (o.x - t.x) * a[0],\n                  u = (o.y - t.y) * a[4],\n                  c = 0,\n                  l = 0,\n                  d = 0,\n                  f = 0;\n                this.graph.get(\"canvas\").animate(\n                  function (t) {\n                    (d = s * t),\n                      (f = u * t),\n                      r.graph.translate(d - c, f - l),\n                      (c = d),\n                      (l = f);\n                  },\n                  Object(h.a)({}, n),\n                );\n              } else\n                this.graph.translate((o.x - t.x) * a[0], (o.y - t.y) * a[4]);\n            }),\n            (t.prototype.getPointByCanvas = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), Pn({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.getPointByClient = function (t, e) {\n              var n = this.graph.get(\"canvas\").getPointByClient(t, e);\n              return this.getPointByCanvas(n.x, n.y);\n            }),\n            (t.prototype.getClientByPoint = function (t, e) {\n              var n = this.graph.get(\"canvas\"),\n                r = this.getCanvasByPoint(t, e),\n                i = n.getClientByPoint(r.x, r.y);\n              return { x: i.x, y: i.y };\n            }),\n            (t.prototype.getCanvasByPoint = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), Tn({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.focus = function (t, e, n) {\n              if ((Object(gt.x)(t) && (t = this.graph.findById(t)), t)) {\n                var r = 0,\n                  i = 0;\n                if (t.getType && \"edge\" === t.getType()) {\n                  var o = t.getSource().get(\"group\").getMatrix(),\n                    a = t.getTarget().get(\"group\").getMatrix();\n                  o && a\n                    ? ((r = (o[6] + a[6]) / 2), (i = (o[7] + a[7]) / 2))\n                    : (o || a) &&\n                      ((r = o ? o[6] : a[6]), (i = o ? o[7] : a[7]));\n                } else {\n                  var s = t.get(\"group\").getMatrix();\n                  s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                    (r = s[6]),\n                    (i = s[7]);\n                }\n                this.focusPoint({ x: r, y: i }, e, n);\n              }\n            }),\n            (t.prototype.changeSize = function (t, e) {\n              var n = this.graph;\n              if (!Object(gt.t)(t) || !Object(gt.t)(e))\n                throw Error(\n                  \"invalid canvas width & height, please make sure width & height type is number\",\n                );\n              n.set({ width: t, height: e }),\n                n.get(\"canvas\").changeSize(t, e),\n                n.get(\"plugins\").forEach(function (r) {\n                  if (r.get(\"gridContainer\")) {\n                    var i = n.get(\"minZoom\");\n                    Tr(r.get(\"container\"), {\n                      width: t + \"px\",\n                      height: e + \"px\",\n                    }),\n                      Tr(r.get(\"gridContainer\"), {\n                        width: t / i + \"px\",\n                        height: e / i + \"px\",\n                        left: 0,\n                        top: 0,\n                      });\n                  }\n                });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !1);\n            }),\n            t\n          );\n        })();\n      function Fr(t) {\n        return (Fr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function zr(t) {\n        if (\"string\" != typeof t) return t;\n        var e = function (t) {\n            if (\"string\" != typeof t) return t;\n            try {\n              return JSON.parse(t.trim());\n            } catch (e) {\n              return t.trim();\n            }\n          },\n          n = e(t);\n        if (\"string\" != typeof n) return n;\n        for (\n          var r = function (t) {\n              return t[t.length - 1];\n            },\n            i = t.trim(),\n            o = [],\n            a = [],\n            s = function () {\n              for (var t = [], e = 0; e < arguments.length; e++)\n                t[e] = arguments[e];\n              return t.some(function (t) {\n                return r(a) === t;\n              });\n            },\n            u = null,\n            c = 0,\n            h = \"\";\n          c < i.length;\n\n        ) {\n          var l = i[c],\n            d = s('\"', \"'\");\n          if (d || l.trim()) {\n            var f = \"\\\\\" === i[c - 1],\n              p = s(\"}\"),\n              g = s(\"]\"),\n              y = s(\",\"),\n              v = r(o);\n            if (d)\n              if (r(a) !== l || f) h += l;\n              else {\n                a.pop();\n                var m = e(h);\n                v.push(m), (u = m), (h = \"\");\n              }\n            else if (g && \",\" === l) h && (v.push(e(h)), (h = \"\"));\n            else if (p && \":\" === l) a.push(\",\"), h && (v.push(h), (h = \"\"));\n            else if (y && \",\" === l) h && (v.push(e(h)), (h = \"\")), a.pop();\n            else if (\"}\" === l && (p || y)) {\n              h && (v.push(e(h)), (h = \"\")), y && a.pop();\n              for (var b = {}, x = 1; x < v.length; x += 2) b[v[x - 1]] = v[x];\n              o.pop(), o.length && r(o).push(b), a.pop(), (u = b);\n            } else\n              \"]\" === l && g\n                ? (h && (v.push(e(h)), (h = \"\")),\n                  o.pop(),\n                  o.length && r(o).push(v),\n                  a.pop(),\n                  (u = v))\n                : \"{\" === l\n                ? (o.push([]), a.push(\"}\"))\n                : \"[\" === l\n                ? (o.push([]), a.push(\"]\"))\n                : '\"' === l\n                ? a.push('\"')\n                : \"'\" === l\n                ? a.push(\"'\")\n                : (h += l);\n            c += 1;\n          } else c += 1;\n        }\n        return u || h;\n      }\n      function Xr(t, e) {\n        var n;\n        void 0 === e && (e = { x: 0, y: 0 });\n        var r = Object(h.a)({ x: 0, y: 0, width: 0, height: 0 }, e);\n        if (null === (n = t.children) || void 0 === n ? void 0 : n.length) {\n          var i = t.attrs,\n            o = void 0 === i ? {} : i,\n            a = o.marginTop,\n            s = Object(h.a)({}, e);\n          a && (s.y += a);\n          for (var u = 0; u < t.children.length; u++) {\n            t.children[u].attrs.key = (o.key || \"root\") + \" -\" + u + \" \";\n            var c = Xr(t.children[u], s);\n            if (c.bbox) {\n              var l = c.bbox;\n              \"inline\" === c.attrs.next\n                ? (s.x += c.bbox.width)\n                : (s.y += c.bbox.height),\n                l.width + l.x > r.width && (r.width = l.width + l.x),\n                l.height + l.y > r.height && (r.height = l.height + l.y);\n            }\n          }\n        }\n        return (\n          (t.bbox = (function (t, e, n) {\n            var r,\n              i,\n              o = t.attrs,\n              a = void 0 === o ? {} : o,\n              s = {\n                x: e.x || 0,\n                y: e.y || 0,\n                width: n.width || 0,\n                height: n.height || 0,\n              };\n            switch (t.type) {\n              case \"maker\":\n              case \"circle\":\n                a.r && ((i = 2 * a.r), (r = 2 * a.r));\n                break;\n              case \"text\":\n                a.text &&\n                  ((i = Or(a.text, a.fontSize || 12)[0]),\n                  (r = 16),\n                  (s.y += r),\n                  (s.height = r),\n                  (s.width = i),\n                  (t.attrs = Object(h.a)({ fontSize: 12, fill: \"#000\" }, a)));\n                break;\n              default:\n                a.width && (i = a.width), a.height && (r = a.height);\n            }\n            return (\n              r >= 0 && (s.height = r),\n              i >= 0 && (s.width = i),\n              a.marginTop && (s.y += a.marginTop),\n              a.marginLeft && (s.x += a.marginLeft),\n              s\n            );\n          })(t, e, r)),\n          (t.attrs = Object(h.a)(Object(h.a)({}, t.attrs), t.bbox)),\n          t\n        );\n      }\n      function Wr(t) {\n        var e = {},\n          n = function (e) {\n            var n = (function (t) {\n                return function (e) {\n                  for (var n = t.length, r = [], i = 0, o = \"\"; i < n; )\n                    if (\"{\" === t[i] && \"{\" === t[i + 1])\n                      r.push(o), (o = \"\"), (i += 2);\n                    else if (\"}\" === t[i] && \"}\" === t[i + 1]) {\n                      if (r.length) {\n                        var a = r.pop();\n                        (o = Object(gt.h)(\n                          e,\n                          o,\n                          a.endsWith(\"=\") ? '\"{' + o + '}\"' : o,\n                        )),\n                          r.push(a + o);\n                      }\n                      (i += 2), (o = \"\");\n                    } else (o += t[i]), (i += 1);\n                  return (\n                    r.push(o),\n                    r\n                      .map(function (t, e) {\n                        return r[e - 1] && r[e - 1].endsWith(\"=\")\n                          ? '\"{' + t + '}\"'\n                          : t;\n                      })\n                      .join(\"\")\n                  );\n                };\n              })(\"function\" == typeof t ? t(e) : t)(e),\n              r = document.createElement(\"div\");\n            r.innerHTML = n;\n            var i = Xr(\n              (function t(e, n) {\n                var r = {},\n                  i = (e.getAttributeNames && e.getAttributeNames()) || [],\n                  o =\n                    e.children &&\n                    Array.from(e.children).map(function (e) {\n                      return t(e, n);\n                    }),\n                  a = {},\n                  s = e.tagName ? e.tagName.toLowerCase() : \"group\";\n                return (\n                  \"text\" === s && (r.text = e.innerText),\n                  (a.type = s),\n                  \"img\" === s && (a.type = \"image\"),\n                  Array.from(i).forEach(function (t) {\n                    var n = t.split(\"-\").reduce(function (t, e) {\n                        return t + e.charAt(0).toUpperCase() + e.slice(1);\n                      }),\n                      i = e.getAttribute(t);\n                    try {\n                      if (\"style\" === n || \"attrs\" === n) {\n                        var o = zr(i);\n                        r = Object(h.a)(Object(h.a)({}, r), o);\n                      } else a[n] = zr(i);\n                    } catch (t) {\n                      if (\"style\" === n) throw t;\n                      a[n] = i;\n                    }\n                  }),\n                  (a.attrs = r),\n                  n &&\n                    n.style &&\n                    a.name &&\n                    \"object\" === Fr(n.style[a.name]) &&\n                    (a.attrs = Object(h.a)(\n                      Object(h.a)({}, a.attrs),\n                      n.style[a.name],\n                    )),\n                  n &&\n                    n.style &&\n                    a.keyshape &&\n                    (a.attrs = Object(h.a)(Object(h.a)({}, a.attrs), n.style)),\n                  o.length && (a.children = o),\n                  a\n                );\n              })(r.children[0], e),\n            );\n            return r.remove(), i;\n          };\n        return {\n          draw: function (t, r) {\n            var i = n(t),\n              o = r;\n            return (\n              (function t(e) {\n                var n = e.attrs,\n                  i = void 0 === n ? {} : n,\n                  a = e.bbox,\n                  s = e.type,\n                  u = e.children,\n                  c = Object(h.e)(e, [\"attrs\", \"bbox\", \"type\", \"children\"]);\n                if (\"group\" !== e.type) {\n                  var l = r.addShape(\n                    e.type,\n                    Object(h.a)(\n                      { attrs: i, origin: { bbox: a, type: s, children: u } },\n                      c,\n                    ),\n                  );\n                  e.keyshape && (o = l);\n                }\n                e.children &&\n                  e.children.forEach(function (e) {\n                    return t(e);\n                  });\n              })(i),\n              (e[t.id] = [i]),\n              o\n            );\n          },\n          update: function (t, r) {\n            e[t.id] || (e[t.id] = []);\n            var i = r.getContainer(),\n              o = i.get(\"children\"),\n              a = n(t),\n              s = (function t(e, n) {\n                var r,\n                  i,\n                  o,\n                  a,\n                  s = (e || {}).type,\n                  u = ((null == n ? void 0 : n.attrs) || {}).key;\n                if ((u && e && (e.attrs.key = u), !e && n))\n                  return { action: \"delete\", val: n, type: s, key: u };\n                if (e && !n) return { action: \"add\", val: e, type: s };\n                if (!e && !n) return { action: \"same\", type: s };\n                var c = [];\n                if (\n                  (null === (r = e.children) || void 0 === r\n                    ? void 0\n                    : r.length) > 0 ||\n                  (null === (i = n.children) || void 0 === i\n                    ? void 0\n                    : i.length) > 0\n                )\n                  for (\n                    var h = Math.max(\n                        null === (o = e.children) || void 0 === o\n                          ? void 0\n                          : o.length,\n                        null === (a = n.children) || void 0 === a\n                          ? void 0\n                          : a.length,\n                      ),\n                      l = n.children || [],\n                      d = e.children || [],\n                      f = 0;\n                    f < h;\n                    f += 1\n                  )\n                    c.push(t(d[f], l[f]));\n                var p = Object.keys(n.attrs),\n                  g = Object.keys(e.attrs);\n                return n.type !== e.type\n                  ? {\n                      action: \"restructure\",\n                      nowTarget: e,\n                      formerTarget: n,\n                      key: u,\n                      children: c,\n                    }\n                  : p\n                      .filter(function (t) {\n                        return \"children\" !== t;\n                      })\n                      .some(function (t) {\n                        return e.attrs[t] !== n.attrs[t] || !g.includes(t);\n                      })\n                  ? { action: \"change\", val: e, children: c, type: s, key: u }\n                  : { action: \"same\", children: c, type: s, key: u };\n              })(a, e[t.id].pop()),\n              u = function t(e) {\n                var n;\n                \"group\" !== e.type && i.addShape(e.type, { attrs: e.attrs }),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              },\n              c = function t(e) {\n                var n,\n                  r = o.find(function (t) {\n                    return t.attrs.key === e.attrs.key;\n                  });\n                r && i.removeChild(r),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              };\n            !(function t(e) {\n              var n = e.key;\n              if (\"group\" !== e.type) {\n                var i = o.find(function (t) {\n                  return t.attrs.key === n;\n                });\n                switch (e.action) {\n                  case \"change\":\n                    if (i) {\n                      var a = e.val.keyshape ? r.getOriginStyle() : {};\n                      i.attr(Object(h.a)(Object(h.a)({}, a), e.val.attrs));\n                    }\n                    break;\n                  case \"add\":\n                    u(e.val);\n                    break;\n                  case \"delete\":\n                    c(e.val);\n                    break;\n                  case \"restructure\":\n                    c(e.formerTarget), u(e.nowTarget);\n                }\n              }\n              e.children &&\n                e.children.forEach(function (e) {\n                  return t(e);\n                });\n            })(s),\n              e[t.id].push(a);\n          },\n          getAnchorPoints: function () {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n              [0.5, 1],\n              [0.5, 0],\n            ];\n          },\n        };\n      }\n      var Gr = {};\n      function qr(t) {\n        return Gr[t] || (Gr[t] = Object(gt.J)(t)), Gr[t];\n      }\n      var Hr = {\n          defaultShapeType: \"defaultType\",\n          className: null,\n          getShape: function (t) {\n            return (\n              this[t] || this[this.defaultShapeType] || this[\"simple-circle\"]\n            );\n          },\n          draw: function (t, e, n) {\n            var r = this.getShape(t),\n              i = r.draw(e, n);\n            return r.afterDraw && r.afterDraw(e, n, i), i;\n          },\n          baseUpdate: function (t, e, n) {\n            var r = this.getShape(t);\n            r.update && r.update(e, n), r.afterUpdate && r.afterUpdate(e, n);\n          },\n          setState: function (t, e, n, r) {\n            this.getShape(t).setState(e, n, r);\n          },\n          shouldUpdate: function (t) {\n            return !!this.getShape(t).update;\n          },\n          getControlPoints: function (t, e) {\n            return this.getShape(t).getControlPoints(e);\n          },\n          getAnchorPoints: function (t, e) {\n            return this.getShape(t).getAnchorPoints(e);\n          },\n        },\n        Vr = {\n          options: {},\n          draw: function (t, e) {\n            return this.drawShape(t, e);\n          },\n          drawShape: function () {},\n          afterDraw: function () {},\n          afterUpdate: function () {},\n          setState: function () {},\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            var e = this.options.anchorPoints;\n            return t.anchorPoints || e;\n          },\n        },\n        Ur = (function () {\n          function t() {}\n          return (\n            (t.registerFactory = function (e, n) {\n              var r = qr(e),\n                i = Hr,\n                o = Object(h.a)(Object(h.a)({}, i), n);\n              return (t[r] = o), (o.className = r), o;\n            }),\n            (t.getFactory = function (e) {\n              return t[qr(e)];\n            }),\n            (t.registerNode = function (e, n, r) {\n              var i,\n                o = t.Node;\n              if (\"string\" == typeof n || \"function\" == typeof n) {\n                var a = Wr(n);\n                i = Object(h.a)(Object(h.a)({}, o.getShape(\"single-node\")), a);\n              } else if (n.jsx) {\n                a = Wr(n.jsx);\n                i = Object(h.a)(\n                  Object(h.a)(Object(h.a)({}, o.getShape(\"single-node\")), a),\n                  n,\n                );\n              } else {\n                o.getShape(r);\n                var s = r ? o.getShape(r) : Vr;\n                i = Object(h.a)(Object(h.a)({}, s), n);\n              }\n              return (i.type = e), (i.itemType = \"node\"), (o[e] = i), i;\n            }),\n            (t.registerEdge = function (e, n, r) {\n              var i = t.Edge,\n                o = r ? i.getShape(r) : Vr,\n                a = Object(h.a)(Object(h.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"edge\"), (i[e] = a), a;\n            }),\n            (t.registerCombo = function (e, n, r) {\n              var i = t.Combo,\n                o = r ? i.getShape(r) : Vr,\n                a = Object(h.a)(Object(h.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"combo\"), (i[e] = a), a;\n            }),\n            t\n          );\n        })(),\n        Zr = Ur;\n      Ur.registerFactory(\"node\", { defaultShapeType: \"circle\" }),\n        Ur.registerFactory(\"edge\", { defaultShapeType: \"line\" }),\n        Ur.registerFactory(\"combo\", { defaultShapeType: \"circle\" });\n      var Kr = (function () {\n          function t(t) {\n            (this._cfg = {}), (this.destroyed = !1);\n            var e = {\n              id: void 0,\n              type: \"item\",\n              model: {},\n              group: void 0,\n              animate: !1,\n              visible: !0,\n              locked: !1,\n              event: !0,\n              keyShape: void 0,\n              states: [],\n            };\n            this._cfg = Object.assign(e, this.getDefaultCfg(), t);\n            var n = this.get(\"model\"),\n              r = n.id,\n              i = this.get(\"type\");\n            r || ((r = Ir(i)), (this.get(\"model\").id = r)), this.set(\"id\", r);\n            var o = t.group;\n            o && (o.set(\"item\", this), o.set(\"id\", r)),\n              this.init(),\n              this.draw();\n            var a = n.shape || n.type || (\"edge\" === i ? \"line\" : \"circle\"),\n              s = this.get(\"shapeFactory\");\n            if (s && s[a]) {\n              var u = s[a].options;\n              if (u && u.stateStyles) {\n                var c = this.get(\"styles\") || n.stateStyles;\n                (c = Object(gt.d)({}, u.stateStyles, c)), this.set(\"styles\", c);\n              }\n            }\n          }\n          return (\n            (t.prototype.calculateBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = gr(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.calculateCanvasBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = gr(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.drawInner = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"group\"),\n                n = this.get(\"model\");\n              e.clear();\n              var r = n.visible;\n              if ((void 0 === r || r || this.changeVisibility(r), t)) {\n                this.updatePosition(n);\n                var i = this.getShapeCfg(n),\n                  o = i.type,\n                  a = t.draw(o, i, e);\n                a &&\n                  (this.set(\"keyShape\", a),\n                  a.set(\"isKeyShape\", !0),\n                  a.set(\"draggable\", !0)),\n                  this.setOriginStyle(),\n                  this.set(\"currentShape\", o),\n                  this.restoreStates(t, o);\n              }\n            }),\n            (t.prototype.setOriginStyle = function () {\n              var t = this.get(\"group\").get(\"children\"),\n                e = this.getKeyShape(),\n                n = this,\n                r = e.get(\"name\");\n              if (this.get(\"originStyle\")) {\n                var i = this.getOriginStyle();\n                r && !i[r] && (i[r] = {});\n                var o = this.getCurrentStatesStyle();\n                Object(gt.e)(t, function (t) {\n                  var e = t.get(\"name\"),\n                    a = t.attr();\n                  if (e && e !== r) {\n                    var s = o[e];\n                    i[e] || (i[e] = {}),\n                      s\n                        ? Object.keys(a).forEach(function (t) {\n                            var n = a[t];\n                            n !== s[t] && (i[e][t] = n);\n                          })\n                        : (i[e] =\n                            \"image\" !== t.get(\"type\")\n                              ? Object(gt.b)(a)\n                              : n.getShapeStyleByName(e));\n                  } else {\n                    var u = t.attr(),\n                      c = Object(h.a)(Object(h.a)({}, o), o[r]);\n                    Object.keys(u).forEach(function (t) {\n                      var e = u[t];\n                      c[t] !== e && (r ? (i[r][t] = e) : (i[t] = e));\n                    });\n                  }\n                }),\n                  i.path && delete i.path,\n                  i.matrix && delete i.matrix,\n                  i.x && delete i.x,\n                  i.y && delete i.y,\n                  i[r] && i[r].x && delete i[r].x,\n                  i[r] && i[r].y && delete i[r].y,\n                  n.set(\"originStyle\", i);\n              } else {\n                var a = {};\n                Object(gt.e)(t, function (t) {\n                  var e = t.get(\"type\"),\n                    i = t.get(\"name\");\n                  if (i && i !== r)\n                    a[i] =\n                      \"image\" !== e\n                        ? Object(gt.b)(t.attr())\n                        : n.getShapeStyleByName(i);\n                  else {\n                    var o = n.getShapeStyleByName();\n                    if (\n                      (o.path && delete o.path, o.matrix && delete o.matrix, r)\n                    )\n                      if (i) a[r] = o;\n                      else {\n                        var s = Ir(\"shape\");\n                        t.set(\"name\", s),\n                          (a[s] =\n                            \"image\" !== e\n                              ? Object(gt.b)(t.attr())\n                              : n.getShapeStyleByName(i));\n                      }\n                    else Object.assign(a, o);\n                  }\n                }),\n                  n.set(\"originStyle\", a);\n              }\n            }),\n            (t.prototype.restoreStates = function (t, e) {\n              var n = this,\n                r = n.get(\"states\");\n              Object(gt.e)(r, function (r) {\n                t.setState(e, r, !0, n);\n              });\n            }),\n            (t.prototype.init = function () {\n              var t = Zr.getFactory(this.get(\"type\"));\n              this.set(\"shapeFactory\", t);\n            }),\n            (t.prototype.get = function (t) {\n              return this._cfg[t];\n            }),\n            (t.prototype.set = function (t, e) {\n              Object(gt.w)(t)\n                ? (this._cfg = Object(h.a)(Object(h.a)({}, this._cfg), t))\n                : (this._cfg[t] = e);\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (t.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"bboxCanvasCache\", null);\n            }),\n            (t.prototype.beforeDraw = function () {}),\n            (t.prototype.afterDraw = function () {}),\n            (t.prototype.afterUpdate = function () {}),\n            (t.prototype.draw = function () {\n              this.beforeDraw(), this.drawInner(), this.afterDraw();\n            }),\n            (t.prototype.getShapeStyleByName = function (t) {\n              var e,\n                n = this.get(\"group\");\n              if (\n                (e = t\n                  ? n.find(function (e) {\n                      return e.get(\"name\") === t;\n                    })\n                  : this.getKeyShape())\n              ) {\n                var r = {};\n                return (\n                  Object(gt.e)(e.attr(), function (t, e) {\n                    \"img\" !== e && (r[e] = t);\n                  }),\n                  r\n                );\n              }\n              return {};\n            }),\n            (t.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\");\n              if (e) {\n                var n = t;\n                return (n.style = Object(h.a)(Object(h.a)({}, e), t.style)), n;\n              }\n              return t;\n            }),\n            (t.prototype.getStateStyle = function (t) {\n              var e = this.get(\"styles\");\n              return e && e[t];\n            }),\n            (t.prototype.getOriginStyle = function () {\n              return this.get(\"originStyle\");\n            }),\n            (t.prototype.getCurrentStatesStyle = function () {\n              var t = this,\n                e = {},\n                n = t.getStates();\n              return n && n.length\n                ? (Object(gt.e)(t.getStates(), function (n) {\n                    e = Object.assign(e, t.getStateStyle(n));\n                  }),\n                  e)\n                : this.getOriginStyle();\n            }),\n            (t.prototype.setState = function (t, e) {\n              var n = this.get(\"states\"),\n                r = this.get(\"shapeFactory\"),\n                i = t,\n                o = t;\n              Object(gt.x)(e) && ((i = t + \":\" + e), (o = t + \":\"));\n              var a = n;\n              if (Object(gt.n)(e)) {\n                var s = n.indexOf(o);\n                if (e) {\n                  if (s > -1) return;\n                  n.push(i);\n                } else s > -1 && n.splice(s, 1);\n              } else if (Object(gt.x)(e)) {\n                var u = n.filter(function (t) {\n                  return t.includes(o);\n                });\n                u.length > 0 && this.clearStates(u),\n                  (a = a.filter(function (t) {\n                    return !t.includes(o);\n                  })).push(i),\n                  this.set(\"states\", a);\n              }\n              if (r) {\n                var c = this.get(\"model\").type;\n                r.setState(c, t, e, this);\n              }\n            }),\n            (t.prototype.clearStates = function (t) {\n              var e = this,\n                n = e.getStates(),\n                r = e.get(\"shapeFactory\"),\n                i = e.get(\"model\").type;\n              t || (t = n), Object(gt.x)(t) && (t = [t]);\n              var o = n.filter(function (e) {\n                return -1 === t.indexOf(e);\n              });\n              e.set(\"states\", o),\n                t.forEach(function (t) {\n                  r.setState(i, t, !1, e);\n                });\n            }),\n            (t.prototype.getContainer = function () {\n              return this.get(\"group\");\n            }),\n            (t.prototype.getKeyShape = function () {\n              return this.get(\"keyShape\");\n            }),\n            (t.prototype.getModel = function () {\n              return this.get(\"model\");\n            }),\n            (t.prototype.getType = function () {\n              return this.get(\"type\");\n            }),\n            (t.prototype.getID = function () {\n              return this.get(\"id\");\n            }),\n            (t.prototype.isItem = function () {\n              return !0;\n            }),\n            (t.prototype.getStates = function () {\n              return this.get(\"states\");\n            }),\n            (t.prototype.hasState = function (t) {\n              return this.getStates().indexOf(t) >= 0;\n            }),\n            (t.prototype.refresh = function () {\n              var t = this.get(\"model\");\n              this.updatePosition(t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (t.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = n.x,\n                a = n.y;\n              (t.x = isNaN(t.x) ? n.x : t.x), (t.y = isNaN(t.y) ? n.y : t.y);\n              var s = this.get(\"styles\");\n              if (t.stateStyles) {\n                var u = t.stateStyles;\n                Object(gt.C)(s, u), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                e\n                  ? this.updatePosition(t)\n                  : ((o === t.x && a === t.y) || this.updatePosition(t),\n                    this.updateShape()),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.updateShape = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"model\"),\n                n = e.type;\n              if (t.shouldUpdate(n) && n === this.get(\"currentShape\")) {\n                var r = this.getShapeCfg(e);\n                t.baseUpdate(n, r, this), this.setOriginStyle();\n              } else this.draw();\n              this.restoreStates(t, n);\n            }),\n            (t.prototype.updatePosition = function (t) {\n              var e = this.get(\"model\"),\n                n = Object(gt.s)(t.x) ? e.x : t.x,\n                r = Object(gt.s)(t.y) ? e.y : t.y,\n                i = this.get(\"group\");\n              if (Object(gt.s)(n) || Object(gt.s)(r)) return !1;\n              (e.x = n), (e.y = r);\n              var o = i.getMatrix();\n              return (\n                (!o || o[6] !== n || o[7] !== r) &&\n                (i.resetMatrix(), _n(i, { x: n, y: r }), this.clearCache(), !0)\n              );\n            }),\n            (t.prototype.getBBox = function () {\n              var t = this.get(\"bboxCache\");\n              return (\n                t || ((t = this.calculateBBox()), this.set(\"bboxCache\", t)), t\n              );\n            }),\n            (t.prototype.getCanvasBBox = function () {\n              var t = this.get(\"bboxCanvasCache\");\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()),\n                  this.set(\"bboxCanvasCache\", t)),\n                t\n              );\n            }),\n            (t.prototype.toFront = function () {\n              this.get(\"group\").toFront();\n            }),\n            (t.prototype.toBack = function () {\n              this.get(\"group\").toBack();\n            }),\n            (t.prototype.show = function () {\n              this.changeVisibility(!0);\n            }),\n            (t.prototype.hide = function () {\n              this.changeVisibility(!1);\n            }),\n            (t.prototype.changeVisibility = function (t) {\n              var e = this.get(\"group\");\n              t ? e.show() : e.hide(), this.set(\"visible\", t);\n            }),\n            (t.prototype.isVisible = function () {\n              return this.get(\"visible\");\n            }),\n            (t.prototype.enableCapture = function (t) {\n              var e = this.get(\"group\");\n              e && e.set(\"capture\", t);\n            }),\n            (t.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            t\n          );\n        })(),\n        Qr = { source: \"start\", target: \"end\" },\n        $r = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                type: \"edge\",\n                sourceNode: null,\n                targetNode: null,\n                startPoint: null,\n                endPoint: null,\n                linkCenter: !1,\n              };\n            }),\n            (e.prototype.setEnd = function (t, e) {\n              var n = Qr[t] + \"Point\",\n                r = t + \"Node\",\n                i = this.get(r);\n              i && !i.destroyed && i.removeEdge(this),\n                Object(gt.w)(e)\n                  ? (this.set(n, e), this.set(r, null))\n                  : (e.addEdge(this), this.set(r, e), this.set(n, null));\n            }),\n            (e.prototype.getLinkPoint = function (t, e, n) {\n              var r = Qr[t] + \"Point\",\n                i = t + \"Node\",\n                o = this.get(r);\n              if (!o) {\n                var a = this.get(i),\n                  s = t + \"Anchor\",\n                  u = this.getPrePoint(t, n),\n                  c = e[s];\n                Object(gt.s)(c) || (o = a.getLinkPointByAnchor(c)),\n                  (o = o || a.getLinkPoint(u)),\n                  Object(gt.s)(o.index) || this.set(t + \"AnchorIndex\", o.index);\n              }\n              return o;\n            }),\n            (e.prototype.getPrePoint = function (t, e) {\n              if (e && e.length) return e[\"source\" === t ? 0 : e.length - 1];\n              var n = \"source\" === t ? \"target\" : \"source\";\n              return this.getEndPoint(n);\n            }),\n            (e.prototype.getEndPoint = function (t) {\n              var e = t + \"Node\",\n                n = Qr[t] + \"Point\",\n                r = this.get(e);\n              return r ? r.get(\"model\") : this.get(n);\n            }),\n            (e.prototype.getControlPointsByCenter = function (t) {\n              var e = this.getEndPoint(\"source\"),\n                n = this.getEndPoint(\"target\"),\n                r = this.get(\"shapeFactory\"),\n                i = t.type;\n              return r.getControlPoints(i, { startPoint: e, endPoint: n });\n            }),\n            (e.prototype.getEndCenter = function (t) {\n              var e = t + \"Node\",\n                n = Qr[t] + \"Point\",\n                r = this.get(e);\n              if (r) {\n                var i = r.getBBox();\n                return { x: i.centerX, y: i.centerY };\n              }\n              return this.get(n);\n            }),\n            (e.prototype.init = function () {\n              t.prototype.init.call(this),\n                this.setSource(this.get(\"source\")),\n                this.setTarget(this.get(\"target\"));\n            }),\n            (e.prototype.getShapeCfg = function (e) {\n              var n = this.get(\"linkCenter\"),\n                r = t.prototype.getShapeCfg.call(this, e);\n              if (n)\n                (r.startPoint = this.getEndCenter(\"source\")),\n                  (r.endPoint = this.getEndCenter(\"target\"));\n              else {\n                var i = r.controlPoints || this.getControlPointsByCenter(r);\n                (r.startPoint = this.getLinkPoint(\"source\", e, i)),\n                  (r.endPoint = this.getLinkPoint(\"target\", e, i));\n              }\n              return (\n                (r.sourceNode = this.get(\"sourceNode\")),\n                (r.targetNode = this.get(\"targetNode\")),\n                r\n              );\n            }),\n            (e.prototype.getModel = function () {\n              var t = this.get(\"model\"),\n                e = this.get(\"sourceNode\"),\n                n = this.get(\"targetNode\");\n              return (\n                e ? delete t.sourceNode : (t.source = this.get(\"startPoint\")),\n                n ? delete t.targetNode : (t.target = this.get(\"endPoint\")),\n                Object(gt.x)(t.source) ||\n                  Object(gt.w)(t.source) ||\n                  (t.source = t.source.getID()),\n                Object(gt.x)(t.target) ||\n                  Object(gt.w)(t.target) ||\n                  (t.target = t.target.getID()),\n                t\n              );\n            }),\n            (e.prototype.setSource = function (t) {\n              this.setEnd(\"source\", t), this.set(\"source\", t);\n            }),\n            (e.prototype.setTarget = function (t) {\n              this.setEnd(\"target\", t), this.set(\"target\", t);\n            }),\n            (e.prototype.getSource = function () {\n              return this.get(\"source\");\n            }),\n            (e.prototype.getTarget = function () {\n              return this.get(\"target\");\n            }),\n            (e.prototype.updatePosition = function () {\n              return !1;\n            }),\n            (e.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = this.get(\"styles\");\n              if (t.stateStyles) {\n                var a = t.stateStyles;\n                Object(gt.C)(o, a), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"sourceNode\"),\n                n = this.get(\"targetNode\");\n              e && !e.destroyed && e.removeEdge(this),\n                n && !n.destroyed && n.removeEdge(this),\n                t.prototype.destroy.call(this);\n            }),\n            e\n          );\n        })(Kr),\n        Jr = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getNearestPoint = function (t, e) {\n              for (\n                var n = 0, r = t[0], i = Bn(t[0], e), o = 0;\n                o < t.length;\n                o++\n              ) {\n                var a = t[o],\n                  s = Bn(a, e);\n                s < i && ((r = a), (i = s), (n = o));\n              }\n              return (r.anchorIndex = n), r;\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"node\", edges: [] };\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getInEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"target\") === t;\n              });\n            }),\n            (e.prototype.getOutEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"source\") === t;\n              });\n            }),\n            (e.prototype.getNeighbors = function (t) {\n              var e = this,\n                n = this.get(\"edges\");\n              if (\"target\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getSource() === e;\n                  })\n                  .map(function (t) {\n                    return t.getTarget();\n                  });\n              }\n              if (\"source\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getTarget() === e;\n                  })\n                  .map(function (t) {\n                    return t.getSource();\n                  });\n              }\n              return n.map(function (t) {\n                return t.getSource() === e ? t.getTarget() : t.getSource();\n              });\n            }),\n            (e.prototype.getLinkPointByAnchor = function (t) {\n              return this.getAnchorPoints()[t];\n            }),\n            (e.prototype.getLinkPoint = function (t) {\n              var e,\n                n,\n                r = this.get(\"keyShape\").get(\"type\"),\n                i = this.get(\"type\"),\n                o = this.getBBox();\n              \"combo\" === i\n                ? ((e = o.centerX || (o.maxX + o.minX) / 2),\n                  (n = o.centerY || (o.maxY + o.minY) / 2))\n                : ((e = o.centerX), (n = o.centerY));\n              var a,\n                s = this.getAnchorPoints();\n              switch (r) {\n                case \"circle\":\n                  a = En({ x: e, y: n, r: o.width / 2 }, t);\n                  break;\n                case \"ellipse\":\n                  a = Nn({ x: e, y: n, rx: o.width / 2, ry: o.height / 2 }, t);\n                  break;\n                default:\n                  a = kn(o, t);\n              }\n              var u = a;\n              return (\n                s.length && (u || (u = t), (u = this.getNearestPoint(s, u))),\n                u || (u = { x: e, y: n }),\n                u\n              );\n            }),\n            (e.prototype.getAnchorPoints = function () {\n              var t = this.get(\"anchorPointsCache\");\n              if (!t) {\n                t = [];\n                var e = this.get(\"shapeFactory\"),\n                  n = this.getBBox(),\n                  r = this.get(\"model\"),\n                  i = this.getShapeCfg(r),\n                  o = r.type,\n                  a = e.getAnchorPoints(o, i) || [];\n                Object(gt.e)(a, function (e, r) {\n                  var i = {\n                    x: n.minX + e[0] * n.width,\n                    y: n.minY + e[1] * n.height,\n                    anchorIndex: r,\n                  };\n                  t.push(i);\n                }),\n                  this.set(\"anchorPointsCache\", t);\n              }\n              return t;\n            }),\n            (e.prototype.addEdge = function (t) {\n              this.get(\"edges\").push(t);\n            }),\n            (e.prototype.lock = function () {\n              this.set(\"locked\", !0);\n            }),\n            (e.prototype.unlock = function () {\n              this.set(\"locked\", !1);\n            }),\n            (e.prototype.hasLocked = function () {\n              return this.get(\"locked\");\n            }),\n            (e.prototype.removeEdge = function (t) {\n              var e = this.getEdges(),\n                n = e.indexOf(t);\n              n > -1 && e.splice(n, 1);\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              if (!t) return !1;\n              var e = !Object(gt.s)(t.x),\n                n = !Object(gt.s)(t.y),\n                r = Object.keys(t);\n              return (1 === r.length && (e || n)) || (2 === r.length && e && n);\n            }),\n            e\n          );\n        })(Kr),\n        ti = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"combo\", nodes: [], edges: [], combos: [] };\n            }),\n            (e.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\"),\n                n = this.get(\"bbox\");\n              if (e && n) {\n                var r = t,\n                  i = {\n                    r:\n                      Math.hypot(n.height, n.width) / 2 ||\n                      ur.defaultCombo.size[0] / 2,\n                    width: n.width || ur.defaultCombo.size[0],\n                    height: n.height || ur.defaultCombo.size[1],\n                  };\n                r.style = Object(h.a)(\n                  Object(h.a)(Object(h.a)({}, e), t.style),\n                  i,\n                );\n                var o = t.padding || ur.defaultCombo.padding;\n                return (\n                  Object(gt.t)(o)\n                    ? ((i.r += o), (i.width += 2 * o), (i.height += 2 * o))\n                    : ((i.r += o[0]),\n                      (i.width += o[1] + o[3] || 2 * o[1]),\n                      (i.height += o[0] + o[2] || 2 * o[0])),\n                  this.set(\"sizeCache\", i),\n                  r\n                );\n              }\n              return t;\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"keyShape\"),\n                  e = this.get(\"group\"),\n                  n = gr(t, e);\n                (n.centerX = (n.minX + n.maxX) / 2),\n                  (n.centerY = (n.minY + n.maxY) / 2);\n                var r = this.get(\"sizeCache\"),\n                  i = this.get(\"bboxCache\") || {},\n                  o = i.x,\n                  a = i.x;\n                if (r)\n                  (r.width = Math.max(r.width, n.width)),\n                    (r.height = Math.max(r.height, n.height)),\n                    \"circle\" === t.get(\"type\")\n                      ? ((n.width = 2 * r.r), (n.height = 2 * r.r))\n                      : ((n.width = r.width), (n.height = r.height)),\n                    (n.minX = n.centerX - n.width / 2),\n                    (n.minY = n.centerY - n.height / 2),\n                    (n.maxX = n.centerX + n.width / 2),\n                    (n.maxY = n.centerY + n.height / 2);\n                else\n                  (n.width = n.maxX - n.minX),\n                    (n.height = n.maxY - n.minY),\n                    (n.centerX = (n.minX + n.maxX) / 2),\n                    (n.centerY = (n.minY + n.maxY) / 2);\n                return (\n                  (n.x = n.minX),\n                  (n.y = n.minY),\n                  (n.x === o && n.y === a) ||\n                    this.set(\"anchorPointsCache\", null),\n                  n\n                );\n              }\n            }),\n            (e.prototype.getChildren = function () {\n              return { nodes: this.getNodes(), combos: this.getCombos() };\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.addChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.addNode(t);\n                  break;\n                case \"combo\":\n                  this.addCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.addCombo = function (t) {\n              return this.get(\"combos\").push(t), !0;\n            }),\n            (e.prototype.addNode = function (t) {\n              return this.get(\"nodes\").push(t), !0;\n            }),\n            (e.prototype.removeChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.removeNode(t);\n                  break;\n                case \"combo\":\n                  this.removeCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.removeCombo = function (t) {\n              if (t) {\n                var e = this.getCombos(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.removeNode = function (t) {\n              if (t) {\n                var e = this.getNodes(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (e.prototype.getBBox = function () {\n              return (\n                this.set(\"bboxCanvasCache\", null), this.calculateCanvasBBox()\n              );\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null),\n                this.set(\"bboxCanvasCache\", null),\n                this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  this.set(\"sizeCache\", null),\n                  this.set(\"bbox\", null),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            e\n          );\n        })(Jr),\n        ei = (function () {\n          function t(t) {\n            (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.addItem = function (t, e) {\n              var n = this.graph,\n                r = \"vedge\" === t ? \"edge\" : t,\n                i = n.get(r + \"Group\") || n.get(\"group\"),\n                o = Object(gt.J)(r),\n                a = null,\n                s = n.get(r + Object(gt.J)(\"stateStyles\")) || {},\n                u = n.get(\"default\" + o);\n              e.stateStyles && (s = e.stateStyles),\n                u &&\n                  Object(gt.e)(u, function (t, n) {\n                    Object(gt.v)(t) && !Object(gt.m)(t)\n                      ? (e[n] = Object(gt.d)({}, t, e[n]))\n                      : Object(gt.m)(t)\n                      ? (e[n] = e[n] || Object(gt.b)(u[n]))\n                      : (e[n] = e[n] || u[n]);\n                  });\n              var c = n.get(r + \"Mapper\");\n              if (c) {\n                var h = c(e);\n                h.stateStyles && ((s = h.stateStyles), delete h.stateStyles),\n                  Object(gt.e)(h, function (t, n) {\n                    Object(gt.v)(t) && !Object(gt.m)(t)\n                      ? (e[n] = Object(gt.d)({}, e[n], t))\n                      : (e[n] = h[n] || e[n]);\n                  });\n              }\n              if (\n                (n.emit(\"beforeadditem\", { type: t, model: e }),\n                \"edge\" === t || \"vedge\" === t)\n              ) {\n                var l = void 0,\n                  d = void 0;\n                if (\n                  ((l = e.source),\n                  (d = e.target),\n                  l && Object(gt.x)(l) && (l = n.findById(l)),\n                  d && Object(gt.x)(d) && (d = n.findById(d)),\n                  !l || !d)\n                )\n                  return void console.warn(\n                    \"The source or target node of edge \" +\n                      e.id +\n                      \" does not exist!\",\n                  );\n                l.getType && \"combo\" === l.getType() && (e.isComboEdge = !0),\n                  d.getType && \"combo\" === d.getType() && (e.isComboEdge = !0),\n                  (a = new $r({\n                    model: e,\n                    source: l,\n                    target: d,\n                    styles: s,\n                    linkCenter: n.get(\"linkCenter\"),\n                    group: i.addGroup(),\n                  }));\n              } else if (\"node\" === t)\n                a = new Jr({ model: e, styles: s, group: i.addGroup() });\n              else if (\"combo\" === t) {\n                var f = e.children,\n                  p = Cr(f, n);\n                isNaN(p.x)\n                  ? isNaN(e.x) && (e.x = 100 * Math.random())\n                  : (e.x = p.x),\n                  isNaN(p.y)\n                    ? isNaN(e.y) && (e.y = 100 * Math.random())\n                    : (e.y = p.y);\n                var g = i.addGroup();\n                g.setZIndex(e.depth);\n                var y = (a = new ti({\n                  model: e,\n                  styles: s,\n                  bbox: e.collapsed ? Cr([], n) : p,\n                  group: g,\n                })).getModel();\n                (f || []).forEach(function (t) {\n                  var e = n.findById(t.id);\n                  a.addChild(e), (t.depth = y.depth + 2);\n                }),\n                  e.collapsed &&\n                    setTimeout(function () {\n                      n.collapseCombo(a);\n                    }, 16);\n              }\n              if (a)\n                return (\n                  n.get(t + \"s\").push(a),\n                  (n.get(\"itemMap\")[a.get(\"id\")] = a),\n                  n.emit(\"afteradditem\", { item: a, model: e }),\n                  a\n                );\n            }),\n            (t.prototype.updateItem = function (t, e) {\n              var n,\n                r,\n                i = this.graph;\n              if ((Object(gt.x)(t) && (t = i.findById(t)), t && !t.destroyed)) {\n                var o = \"\";\n                t.getType && (o = t.getType());\n                var a = i.get(o + \"Mapper\"),\n                  s = t.getModel(),\n                  u = t.isOnlyMove(e);\n                if (a) {\n                  var c = a(Object(gt.d)({}, s, e)),\n                    l = Object(gt.d)({}, s, c, e);\n                  c.stateStyles &&\n                    (t.set(\"styles\", l.stateStyles), delete l.stateStyles),\n                    Object(gt.e)(l, function (t, n) {\n                      e[n] = t;\n                    });\n                } else\n                  Object(gt.e)(e, function (t, n) {\n                    s[n] &&\n                      Object(gt.v)(t) &&\n                      !Object(gt.m)(t) &&\n                      (e[n] = Object(h.a)(Object(h.a)({}, s[n]), e[n]));\n                  });\n                if (\n                  (i.emit(\"beforeupdateitem\", { item: t, cfg: e }),\n                  \"edge\" === o)\n                ) {\n                  if (e.source) {\n                    var d = e.source;\n                    Object(gt.x)(d) && (d = i.findById(d)), t.setSource(d);\n                  }\n                  if (e.target) {\n                    var f = e.target;\n                    Object(gt.x)(f) && (f = i.findById(f)), t.setTarget(f);\n                  }\n                  t.update(e);\n                }\n                if (\"node\" === o || \"combo\" === o) {\n                  t.update(e, u);\n                  var p = t.getEdges(),\n                    g = jr(e);\n                  if (g && \"node\" === o)\n                    Object(gt.e)(p, function (t) {\n                      t.refresh();\n                    });\n                  else if (g && \"combo\" === o) {\n                    var y = t.get(\"shapeFactory\"),\n                      v = s.type || \"circle\";\n                    (\n                      void 0 === s.animate || void 0 === e.animate\n                        ? null ===\n                            (r =\n                              null === (n = y[v]) || void 0 === n\n                                ? void 0\n                                : n.options) || void 0 === r\n                          ? void 0\n                          : r.animate\n                        : s.animate || e.animate\n                    )\n                      ? setTimeout(function () {\n                          if (t && !t.destroyed) {\n                            var e = t.getKeyShape();\n                            e &&\n                              !e.destroyed &&\n                              Object(gt.e)(p, function (t) {\n                                t && !t.destroyed && t.refresh();\n                              });\n                          }\n                        }, 201)\n                      : Object(gt.e)(p, function (t) {\n                          t.refresh();\n                        });\n                  }\n                }\n                i.emit(\"afterupdateitem\", { item: t, cfg: e });\n              }\n            }),\n            (t.prototype.updateCombo = function (t, e) {\n              var n,\n                r,\n                i = this,\n                o = this.graph;\n              if ((Object(gt.x)(t) && (t = o.findById(t)), t && !t.destroyed)) {\n                var a = t.getModel(),\n                  s = Cr(a.collapsed ? [] : e, o);\n                t.set(\"bbox\", s), t.update({ x: s.x, y: s.y });\n                var u = t.get(\"shapeFactory\"),\n                  c = a.type || \"circle\";\n                (\n                  void 0 === a.animate\n                    ? null ===\n                        (r =\n                          null === (n = u[c]) || void 0 === n\n                            ? void 0\n                            : n.options) || void 0 === r\n                      ? void 0\n                      : r.animate\n                    : a.animate\n                )\n                  ? setTimeout(function () {\n                      if (t && !t.destroyed) {\n                        var e = t.getKeyShape();\n                        e &&\n                          !e.destroyed &&\n                          (t.getShapeCfg(a), i.updateComboEdges(t));\n                      }\n                    }, 201)\n                  : this.updateComboEdges(t);\n              }\n            }),\n            (t.prototype.updateComboEdges = function (t) {\n              for (var e = t.getEdges() || [], n = 0; n < e.length; n++) {\n                var r = e[n];\n                if (r && !r.destroyed) {\n                  var i = r.get(\"shapeFactory\"),\n                    o = r.getShapeCfg(r.getModel()),\n                    a = r.getContainer();\n                  a.clear();\n                  var s = i.draw(o.type, o, a);\n                  r.set(\"keyShape\", s),\n                    s.set(\"isKeyShape\", !0),\n                    s.set(\"draggable\", !0),\n                    r.setOriginStyle();\n                }\n              }\n            }),\n            (t.prototype.collapseCombo = function (t) {\n              var e = this.graph;\n              Object(gt.x)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.hideItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  e.hideItem(t);\n                });\n            }),\n            (t.prototype.expandCombo = function (t) {\n              var e = this.graph;\n              Object(gt.x)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.showItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  t.getModel().collapsed ? t.show() : e.showItem(t);\n                });\n            }),\n            (t.prototype.removeItem = function (t) {\n              var e = this,\n                n = this.graph;\n              if ((Object(gt.x)(t) && (t = n.findById(t)), t && !t.destroyed)) {\n                var r = Object(gt.b)(t.getModel());\n                n.emit(\"beforeremoveitem\", { item: r });\n                var i = \"\";\n                t.getType && (i = t.getType());\n                var o = n.get(i + \"s\"),\n                  a = o.indexOf(t);\n                if ((a > -1 && o.splice(a, 1), \"edge\" === i)) {\n                  var s = n.get(\"v\" + i + \"s\"),\n                    u = s.indexOf(t);\n                  u > -1 && s.splice(u, 1);\n                }\n                var c = t.get(\"id\");\n                delete n.get(\"itemMap\")[c];\n                var h = n.get(\"comboTrees\"),\n                  l = t.get(\"id\");\n                if (\"node\" === i) {\n                  var d = t.getModel().comboId;\n                  if (h && d) {\n                    var f = h,\n                      p = !1;\n                    h.forEach(function (t) {\n                      p ||\n                        br(t, function (t) {\n                          if (t.id === l && f) {\n                            var e = f.indexOf(t);\n                            return f.splice(e, 1), (p = !0), !1;\n                          }\n                          return (f = t.children), !0;\n                        });\n                    });\n                  }\n                  for (var g = (b = t.getEdges()).length - 1; g >= 0; g--)\n                    n.removeItem(b[g], !1);\n                  d && n.updateCombo(d);\n                } else if (\"combo\" === i) {\n                  var y,\n                    v = t.getModel().parentId,\n                    m = !1;\n                  (h || []).forEach(function (t) {\n                    m ||\n                      br(t, function (t) {\n                        return t.id !== l || ((y = t), (m = !0), !1);\n                      });\n                  }),\n                    (y.removed = !0),\n                    y &&\n                      y.children &&\n                      y.children.forEach(function (t) {\n                        e.removeItem(t.id);\n                      });\n                  var b;\n                  for (g = (b = t.getEdges()).length; g >= 0; g--)\n                    n.removeItem(b[g], !1);\n                  v && n.updateCombo(v);\n                }\n                t.destroy(), n.emit(\"afterremoveitem\", { item: r });\n              }\n            }),\n            (t.prototype.setItemState = function (t, e, n) {\n              var r = this.graph,\n                i = e;\n              Object(gt.x)(n) && (i = e + \":\" + n),\n                (t.hasState(i) === n && n) ||\n                  (Object(gt.x)(n) && t.hasState(i)) ||\n                  (r.emit(\"beforeitemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }),\n                  t.setState(e, n),\n                  r.autoPaint(),\n                  r.emit(\"afteritemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }));\n            }),\n            (t.prototype.priorityState = function (t, e) {\n              var n = this.graph,\n                r = t;\n              Object(gt.x)(t) && (r = n.findById(t)),\n                this.setItemState(r, e, !1),\n                this.setItemState(r, e, !0);\n            }),\n            (t.prototype.clearItemStates = function (t, e) {\n              var n = this.graph;\n              Object(gt.x)(t) && (t = n.findById(t)),\n                n.emit(\"beforeitemstatesclear\", { item: t, states: e }),\n                t.clearStates(e),\n                n.emit(\"afteritemstatesclear\", { item: t, states: e });\n            }),\n            (t.prototype.refreshItem = function (t) {\n              var e = this.graph;\n              Object(gt.x)(t) && (t = e.findById(t)),\n                e.emit(\"beforeitemrefresh\", { item: t }),\n                t.refresh(),\n                e.emit(\"afteritemrefresh\", { item: t });\n            }),\n            (t.prototype.addCombos = function (t, e) {\n              var n = this,\n                r = this.graph;\n              (t || []).forEach(function (t) {\n                xr(t, function (t) {\n                  var r;\n                  return (\n                    e.forEach(function (e) {\n                      e.id === t.id &&\n                        ((e.children = t.children),\n                        (e.depth = t.depth),\n                        (r = e));\n                    }),\n                    r && n.addItem(\"combo\", r),\n                    !0\n                  );\n                });\n              });\n              var i = r.get(\"comboGroup\");\n              i && i.sort();\n            }),\n            (t.prototype.changeItemVisibility = function (t, e) {\n              var n = this,\n                r = this.graph;\n              if ((Object(gt.x)(t) && (t = r.findById(t)), t)) {\n                if (\n                  (r.emit(\"beforeitemvisibilitychange\", {\n                    item: t,\n                    visible: e,\n                  }),\n                  t.changeVisibility(e),\n                  t.getType && \"node\" === t.getType())\n                ) {\n                  var i = t.getEdges();\n                  Object(gt.e)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                } else if (t.getType && \"combo\" === t.getType()) {\n                  var o = r.get(\"comboTrees\"),\n                    a = t.get(\"id\"),\n                    s = [],\n                    u = !1;\n                  (o || []).forEach(function (t) {\n                    u ||\n                      (t.children &&\n                        0 !== t.children.length &&\n                        br(t, function (t) {\n                          return t.id !== a || ((s = t.children), (u = !0), !1);\n                        }));\n                  }),\n                    s &&\n                      (!e || (e && !t.getModel().collapsed)) &&\n                      s.forEach(function (t) {\n                        var i = r.findById(t.id);\n                        n.changeItemVisibility(i, e);\n                      });\n                  i = t.getEdges();\n                  Object(gt.e)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                }\n                return (\n                  r.emit(\"afteritemvisibilitychange\", { item: t, visible: e }),\n                  t\n                );\n              }\n              console.warn(\"The item to be shown or hidden does not exist!\");\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        ni = null,\n        ri = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.cachedStates = { enabled: {}, disabled: {} }),\n              (this.destroyed = !1);\n          }\n          return (\n            (t.checkCache = function (t, e, n) {\n              if (n[e]) {\n                var r = n[e].indexOf(t);\n                r >= 0 && n[e].splice(r, 1);\n              }\n            }),\n            (t.cacheState = function (t, e, n) {\n              n[e] || (n[e] = []), n[e].push(t);\n            }),\n            (t.prototype.updateState = function (e, n, r) {\n              var i = this,\n                o = t.checkCache,\n                a = t.cacheState;\n              if (!e.destroyed) {\n                var s = this.cachedStates,\n                  u = s.enabled,\n                  c = s.disabled;\n                r ? (o(e, n, c), a(e, n, u)) : (o(e, n, u), a(e, n, c)),\n                  ni && clearTimeout(ni),\n                  (ni = setTimeout(function () {\n                    (ni = null), i.updateGraphStates();\n                  }, 16));\n              }\n            }),\n            (t.prototype.updateStates = function (t, e, n) {\n              var r = this;\n              Object(gt.x)(e)\n                ? this.updateState(t, e, n)\n                : e.forEach(function (e) {\n                    r.updateState(t, e, n);\n                  });\n            }),\n            (t.prototype.updateGraphStates = function () {\n              var t = this.graph.get(\"states\"),\n                e = this.cachedStates;\n              Object(gt.e)(e.disabled, function (e, n) {\n                t[n] &&\n                  (t[n] = t[n].filter(function (t) {\n                    return e.indexOf(t) < 0 && !e.destroyed;\n                  }));\n              }),\n                Object(gt.e)(e.enabled, function (e, n) {\n                  if (t[n]) {\n                    var r = {};\n                    t[n].forEach(function (t) {\n                      t.destroyed || (r[t.get(\"id\")] = !0);\n                    }),\n                      e.forEach(function (e) {\n                        if (!e.destroyed) {\n                          var i = e.get(\"id\");\n                          r[i] || ((r[i] = !0), t[n].push(e));\n                        }\n                      });\n                  } else t[n] = e;\n                }),\n                this.graph.emit(\"graphstatechange\", { states: t }),\n                (this.cachedStates = { enabled: {}, disabled: {} });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.cachedStates = null),\n                ni && clearTimeout(ni),\n                (ni = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        ii = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                if (\"\\\\\" === t.charAt(0)) return t.slice(1);\n                var r = e[n];\n                return 0 === r && (r = \"0\"), r || \"\";\n              })\n            : t;\n        },\n        oi = function (t) {\n          var e = [];\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \" + t.length,\n            );\n          for (var n = 0, r = t; n < r.length; n++) {\n            var i = r[n],\n              o = i.x,\n              a = i.y;\n            e.push(o), e.push(a);\n          }\n          var s = Object(mt.a)(e);\n          return s.unshift([\"M\", t[0].x, t[0].y]), s;\n        },\n        ai = function (t, e, n, r) {\n          void 0 === n && (n = 0), void 0 === r && (r = 0);\n          var i = { x: (1 - n) * t.x + n * e.x, y: (1 - n) * t.y + n * e.y },\n            o = [0, 0];\n          sn.c.normalize(o, [e.x - t.x, e.y - t.y]),\n            (o && (o[0] || o[1])) || (o = [0, 0]);\n          var a = [-o[1] * r, o[0] * r];\n          return (i.x += a[0]), (i.y += a[1]), i;\n        },\n        si = function (t, e) {\n          var n = t.length;\n          if (!n) return \"\";\n          for (var r = \"\", i = 0; i < n; i++) {\n            var o = t[i];\n            r += ii(0 === i ? \"M{x} {y}\" : \"L{x} {y}\", o);\n          }\n          return e && (r += \"Z\"), r;\n        },\n        ui = function (t) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              if (\"A\" !== t[0])\n                for (var n = 1; n < t.length; n += 2) e.push([t[n], t[n + 1]]);\n              else {\n                var r = t.length;\n                e.push([t[r - 2], t[r - 1]]);\n              }\n            }),\n            e\n          );\n        },\n        ci = function (t) {\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \" + t.length,\n            );\n          var e = t[0],\n            n = t[1],\n            r = t[t.length - 1],\n            i = t[t.length - 2];\n          t.unshift(r), t.unshift(i), t.push(e), t.push(n);\n          for (var o = [], a = 1; a < t.length - 2; a += 1) {\n            var s = t[a - 1].x,\n              u = t[a - 1].y,\n              c = t[a].x,\n              h = t[a].y,\n              l = t[a + 1].x,\n              d = t[a + 1].y,\n              f = c + (l - s) / 6,\n              p = h + (d - u) / 6,\n              g = l - ((a !== t.length - 2 ? t[a + 2].x : l) - c) / 6,\n              y = d - ((a !== t.length - 2 ? t[a + 2].y : d) - h) / 6;\n            o.push([\"C\", f, p, g, y, l, d]);\n          }\n          return o.unshift([\"M\", r.x, r.y]), o;\n        },\n        hi = function (t, e) {\n          return sn.c.scale([0, 0], sn.c.normalize([0, 0], t), e);\n        },\n        li = function (t, e) {\n          var n = [t[1] - e[1], e[0] - t[0]],\n            r = Math.sqrt(n[0] * n[0] + n[1] * n[1]);\n          if (0 === r) throw new Error(\"p0 should not be equal to p1\");\n          return [n[0] / r, n[1] / r];\n        },\n        di = function (t, e) {\n          return [e[0] - t[0], e[1] - t[1]];\n        };\n      function fi(t, e) {\n        if (!t || t.length < 1) return \"\";\n        if (1 === t.length)\n          return (function (t) {\n            var n = [t[0][0], t[0][1] - e],\n              r = [t[0][0], t[0][1] + e];\n            return (\n              \"M \" +\n              n +\n              \" A \" +\n              e +\n              \",\" +\n              e +\n              \",0,0,0,\" +\n              r +\n              \" A \" +\n              e +\n              \",\" +\n              e +\n              \",0,0,0,\" +\n              n\n            );\n          })(t);\n        if (2 === t.length)\n          return (function (t) {\n            var n = sn.c.scale([0, 0], li(t[0], t[1]), e),\n              r = sn.c.scale([0, 0], n, -1),\n              i = sn.c.add([0, 0], t[0], n),\n              o = sn.c.add([0, 0], t[1], n),\n              a = sn.c.add([0, 0], t[1], r),\n              s = sn.c.add([0, 0], t[0], r);\n            return (\n              \"M \" +\n              i +\n              \" L \" +\n              o +\n              \" A \" +\n              [e, e, \"0,0,0\", a].join(\",\") +\n              \" L \" +\n              s +\n              \" A \" +\n              [e, e, \"0,0,0\", i].join(\",\")\n            );\n          })(t);\n        for (var n = new Array(t.length), r = 0; r < n.length; ++r) {\n          var i = 0 === r ? t[t.length - 1] : t[r - 1],\n            o = t[r],\n            a = sn.c.scale([0, 0], li(i, o), e);\n          n[r] = [sn.c.add([0, 0], i, a), sn.c.add([0, 0], o, a)];\n        }\n        var s = \"A \" + [e, e, \"0,0,0,\"].join(\",\");\n        return (n = n.map(function (t, e) {\n          var r = \"\";\n          return (\n            0 === e && (r = \"M \" + n[n.length - 1][1] + \" \"),\n            (r += s + t[0] + \" L \" + t[1])\n          );\n        })).join(\" \");\n      }\n      function pi(t, e) {\n        var n,\n          r,\n          i,\n          o = t.length;\n        if (!t || o < 1) return \"\";\n        if (1 === o)\n          return (\n            (r = [(n = t)[0][0], n[0][1] - e]),\n            (i = [n[0][0], n[0][1] + e]),\n            \"M \" +\n              r +\n              \" A \" +\n              [e, e, \"0,0,0\", i].join(\",\") +\n              \" A \" +\n              [e, e, \"0,0,0\", r].join(\",\")\n          );\n        if (2 === o)\n          return (function (t) {\n            var n = di(t[0], t[1]),\n              r = hi(n, e),\n              i = sn.c.add([0, 0], t[0], sn.c.scale([0, 0], r, -1)),\n              o = sn.c.add([0, 0], t[1], r),\n              a = 1.2 * e,\n              s = hi(sn.c.normalize([0, 0], n), a),\n              u = sn.c.scale([0, 0], s, -1),\n              c = sn.c.add([0, 0], i, u),\n              h = sn.c.add([0, 0], o, u),\n              l = sn.c.add([0, 0], i, s);\n            return (\n              \"M \" +\n              i +\n              \" C \" +\n              [c, h, o].join(\",\") +\n              \" S \" +\n              [l, i].join(\",\") +\n              \" Z\"\n            );\n          })(t);\n        for (\n          var a = t.map(function (e, n) {\n              var r = t[(n + 1) % o];\n              return { p: e, v: sn.c.normalize([0, 0], di(e, r)) };\n            }),\n            s = 0;\n          s < a.length;\n          ++s\n        ) {\n          var u = s > 0 ? s - 1 : o - 1,\n            c = sn.c.normalize(\n              [0, 0],\n              sn.c.add([0, 0], a[u].v, sn.c.scale([0, 0], a[s].v, -1)),\n            );\n          a[s].p = sn.c.add([0, 0], a[s].p, sn.c.scale([0, 0], c, e));\n        }\n        return a.map(function (t) {\n          var e = t.p;\n          return { x: e[0], y: e[1] };\n        });\n      }\n      var gi = function (t, e, n) {\n          return (t.y - n.y) * (e.x - n.x) - (t.x - n.x) * (e.y - n.y);\n        },\n        yi = function (t) {\n          var e = t.map(function (t) {\n            return { x: t.getModel().x, y: t.getModel().y };\n          });\n          if (\n            (e.sort(function (t, e) {\n              return t.x === e.x ? t.y - e.y : t.x - e.x;\n            }),\n            1 === e.length)\n          )\n            return e;\n          for (var n = [], r = 0; r < e.length; r++) {\n            for (\n              ;\n              n.length >= 2 && gi(n[n.length - 2], n[n.length - 1], e[r]) <= 0;\n\n            )\n              n.pop();\n            n.push(e[r]);\n          }\n          var i = [];\n          for (r = e.length - 1; r >= 0; r--) {\n            for (\n              ;\n              i.length >= 2 && gi(i[i.length - 2], i[i.length - 1], e[r]) <= 0;\n\n            )\n              i.pop();\n            i.push(e[r]);\n          }\n          return i.pop(), n.pop(), n.concat(i);\n        },\n        vi = {\n          maxRoutingIterations: 100,\n          maxMarchingIterations: 100,\n          pixelGroupSize: 2,\n          edgeR0: 10,\n          edgeR1: 10,\n          nodeR0: 5,\n          nodeR1: 10,\n          morphBuffer: 5,\n          threshold: 0.001,\n          skip: 16,\n          nodeInfluenceFactor: 1,\n          edgeInfluenceFactor: 1,\n          negativeNodeInfluenceFactor: -0.5,\n        };\n      function mi(t, e, n) {\n        var r = !1,\n          i = function (t, n) {\n            return e.cells[t + n * e.width];\n          },\n          o = function (t, e) {\n            var r = 0;\n            return (\n              i(t - 1, e - 1) >= n && (r += 1),\n              i(t, e - 1) > n && (r += 2),\n              i(t - 1, e) > n && (r += 4),\n              i(t, e) > n && (r += 8),\n              r\n            );\n          },\n          a = function (n, r) {\n            for (var i, a, s = n, u = r, c = 0; c < e.width * e.height; c++) {\n              if (\n                ((i = s),\n                (a = u),\n                t.findIndex(function (t) {\n                  return t.x === s && t.y === u;\n                }) > -1)\n              ) {\n                if (t[0].x === s && t[0].y === u) return !0;\n              } else t.push({ x: s, y: u });\n              var h = o(s, u);\n              switch (h) {\n                case -1:\n                  return console.warn(\"Marched out of bounds\"), !0;\n                case 0:\n                case 3:\n                case 2:\n                case 7:\n                  s++;\n                  break;\n                case 12:\n                case 14:\n                case 4:\n                  s--;\n                  break;\n                case 6:\n                  0 === i && (-1 === a ? (s -= 1) : (s += 1));\n                  break;\n                case 1:\n                case 13:\n                case 5:\n                  u--;\n                  break;\n                case 9:\n                  1 === i && (0 === a ? (u -= 1) : (u += 1));\n                  break;\n                case 10:\n                case 8:\n                case 11:\n                  u++;\n                  break;\n                default:\n                  return (\n                    console.warn(\"Marching squares invalid state: \" + h), !0\n                  );\n              }\n            }\n          };\n        this.march = function () {\n          for (var t = 0; t < e.width && !r; t += 1)\n            for (var s = 0; s < e.height && !r; s += 1)\n              i(t, s) > n && 15 !== o(t, s) && (r = a(t, s));\n          return r;\n        };\n      }\n      var bi = function (t, e) {\n        var n = Number.POSITIVE_INFINITY,\n          r = null;\n        return (\n          t.forEach(function (t) {\n            var i = Kn(t, e);\n            i >= 0 && i < n && ((r = t), (n = i));\n          }),\n          r\n        );\n      };\n      function xi(t, e, n, r, i) {\n        var o = (function (t, e, n) {\n          var r = null,\n            i = Number.POSITIVE_INFINITY;\n          return (\n            e.forEach(function (e) {\n              var o = { x: t.getModel().x, y: t.getModel().y },\n                a = { x: e.getModel().x, y: e.getModel().y },\n                s = $n(o, a),\n                u = new Hn(o.x, o.y, a.x, a.y),\n                c = n.reduce(function (t, e) {\n                  return Kn(e, u) > 0 ? t + 1 : t;\n                }, 0);\n              s * Math.pow(c + 1, 2) < i &&\n                ((r = e), (i = s * Math.pow(c + 1, 2)));\n            }),\n            r\n          );\n        })(t, n, e);\n        if (null === o) return [];\n        return (function (t) {\n          for (var n = []; t.length > 0; ) {\n            var r = t.pop();\n            if (0 === t.length) {\n              n.push(r);\n              break;\n            }\n            var i = t.pop(),\n              o = new Hn(r.x1, r.y1, i.x2, i.y2);\n            bi(e, o) ? (n.push(r), t.push(i)) : t.push(o);\n          }\n          return n;\n        })(\n          (function (t, e, n, r) {\n            var i = [],\n              o = [];\n            o.push(t);\n            for (\n              var a = !0,\n                s = 0,\n                u = function (t, e) {\n                  var n = !1;\n                  return (\n                    e.forEach(function (e) {\n                      n ||\n                        ((tr(t, { x: e.x1, y: e.y1 }) ||\n                          tr(t, { x: e.x2, y: e.y2 })) &&\n                          (n = !0));\n                    }),\n                    n\n                  );\n                },\n                c = function (t, e) {\n                  for (var n = 0, r = e; n < r.length; n++) {\n                    var i = r[n].getBBox(),\n                      o = [\n                        [i.x, i.y],\n                        [i.x + i.width, i.y],\n                        [i.x, i.y + i.height],\n                        [i.x + i.width, i.y + i.height],\n                      ];\n                    if (Wn(o, t.x, t.y)) return !0;\n                  }\n                  return !1;\n                };\n              a && s < n;\n\n            ) {\n              a = !1;\n              for (\n                var h = function () {\n                  var t = o.pop(),\n                    n = bi(e, t);\n                  if (n) {\n                    var h = Zn(n, t),\n                      l = h[0];\n                    if (2 === h[1]) {\n                      var d = function (s) {\n                        for (\n                          var h = r,\n                            d = Mi(n, h, l, s),\n                            f = u(d, o) || u(d, i),\n                            p = c(d, e);\n                          !f && p && h >= 1;\n\n                        )\n                          (d = Mi(n, (h /= 1.5), l, s)),\n                            (f = u(d, o) || u(d, i)),\n                            (p = c(d, e));\n                        !d ||\n                          f ||\n                          (s && p) ||\n                          (o.push(new Hn(t.x1, t.y1, d.x, d.y)),\n                          o.push(new Hn(d.x, d.y, t.x2, t.y2)),\n                          (a = !0));\n                      };\n                      d(!0), a || d(!1);\n                    }\n                  }\n                  a || i.push(t), (s += 1);\n                };\n                !a && o.length;\n\n              )\n                h();\n            }\n            for (; o.length; ) i.push(o.pop());\n            return i;\n          })(\n            new Hn(\n              t.getModel().x,\n              t.getModel().y,\n              o.getModel().x,\n              o.getModel().y,\n            ),\n            e,\n            r,\n            i,\n          ),\n        );\n      }\n      var wi = function (t, e, n) {\n        var r = Object.assign(vi, n),\n          i = Qn(\n            t.map(function (t) {\n              return { x: t.getModel().x, y: t.getModel().y };\n            }),\n          );\n        t = t.sort(function (t, e) {\n          return (\n            $n({ x: t.getModel().x, y: t.getModel().y }, i) -\n            $n({ x: e.getModel().x, y: e.getModel().y }, i)\n          );\n        });\n        var o = [],\n          a = [];\n        t.forEach(function (t) {\n          xi(t, e, o, r.maxRoutingIterations, r.morphBuffer).forEach(\n            function (t) {\n              a.push(t);\n            },\n          ),\n            o.push(t);\n        });\n        for (\n          var s,\n            u,\n            c,\n            h,\n            l,\n            d = (function (t, e, n) {\n              var r = {\n                  minX: Number.POSITIVE_INFINITY,\n                  minY: Number.POSITIVE_INFINITY,\n                  maxX: Number.NEGATIVE_INFINITY,\n                  maxY: Number.NEGATIVE_INFINITY,\n                  width: 0,\n                  height: 0,\n                  x: 0,\n                  y: 0,\n                },\n                i = [];\n              t.forEach(function (t) {\n                i.push(t.getBBox());\n              }),\n                e.forEach(function (t) {\n                  i.push(t.getBBox());\n                });\n              for (var o = 0, a = i; o < a.length; o++) {\n                var s = a[o];\n                (r.minX = (s.minX < r.minX ? s.minX : r.minX) - n),\n                  (r.minY = (s.minY < r.minY ? s.minY : r.minY) - n),\n                  (r.maxX = (s.maxX > r.maxX ? s.maxX : r.maxX) + n),\n                  (r.maxY = (s.maxY > r.maxY ? s.maxY : r.maxY) + n);\n              }\n              return (\n                (r.width = r.maxX - r.minX),\n                (r.height = r.maxY - r.minY),\n                (r.x = r.minX),\n                (r.y = r.minY),\n                r\n              );\n            })(t, a, r.nodeR0),\n            f =\n              ((s = d.width),\n              (u = d.height),\n              (c = r.pixelGroupSize),\n              (h = Math.ceil(s / c)),\n              (l = Math.ceil(u / c)),\n              {\n                cells: new Float32Array(Math.max(0, h * l)).fill(0),\n                width: h,\n                height: l,\n              }),\n            p = [],\n            g = [],\n            y = 0;\n          y < r.maxMarchingIterations;\n          y++\n        )\n          if (\n            (Oi(t, e, a, d, f, r),\n            (g = []),\n            new mi((p = []), f, r.threshold).march())\n          ) {\n            var v = p.map(function (t) {\n              return {\n                x: Math.round(t.x * r.pixelGroupSize + d.minX),\n                y: Math.round(t.y * r.pixelGroupSize + d.minY),\n              };\n            });\n            if (v) {\n              var m = v.length;\n              if (r.skip > 1)\n                for (m = Math.floor(v.length / r.skip); m < 3 && r.skip > 1; )\n                  (r.skip -= 1), (m = Math.floor(v.length / r.skip));\n              for (var b = 0, x = 0; x < m; x += 1, b += r.skip)\n                g.push({ x: v[b].x, y: v[b].y });\n            }\n            if (\n              g &&\n              (function () {\n                for (var e = 0, n = t; e < n.length; e++) {\n                  var r = n[e],\n                    i = g.map(function (t) {\n                      return [t.x, t.y];\n                    });\n                  if (!Wn(i, r.getBBox().centerX, r.getBBox().centerY))\n                    return !1;\n                }\n                return !0;\n              })()\n            )\n              return g;\n            if (((r.threshold *= 0.9), y <= 0.5 * r.maxMarchingIterations))\n              (r.memberInfluenceFactor *= 1.2), (r.edgeInfluenceFactor *= 1.2);\n            else {\n              if (!(0 !== r.nonMemberInfluenceFactor && e.length > 0)) break;\n              r.nonMemberInfluenceFactor *= 0.8;\n            }\n          }\n        return g;\n      };\n      function Oi(t, e, n, r, i, o) {\n        function a(t, e) {\n          var n = Math.floor((t - e) / o.pixelGroupSize);\n          return n < 0 ? 0 : n;\n        }\n        function s(t, e) {\n          return t * o.pixelGroupSize + e;\n        }\n        var u = (o.nodeR0 - o.nodeR1) * (o.nodeR0 - o.nodeR1),\n          c = (o.edgeR0 - o.edgeR1) * (o.edgeR0 - o.edgeR1),\n          h = function (t, e) {\n            return [\n              Math.min(a(t.minX, e + r.minX), i.width),\n              Math.min(a(t.minY, e + r.minY), i.height),\n              Math.min(a(t.maxX, -e + r.minX), i.width),\n              Math.min(a(t.maxY, -e + r.minY), i.height),\n            ];\n          },\n          l = function (t, e) {\n            for (\n              var n = t.getBBox(),\n                a = h(n, o.nodeR1),\n                u = a[0],\n                c = a[1],\n                l = a[2],\n                d = a[3],\n                f = c;\n              f < d;\n              f += 1\n            )\n              for (var p = u; p < l; p += 1)\n                if (!(e < 0 && i[p + f * i.width] <= 0)) {\n                  var g = s(p, r.minX),\n                    y = s(f, r.minY),\n                    v = er(\n                      { x: g, y: y },\n                      {\n                        x: n.minX,\n                        y: n.minY,\n                        width: n.width,\n                        height: n.height,\n                      },\n                    );\n                  if (v < Math.pow(o.nodeR1, 2)) {\n                    var m = Math.sqrt(v) - o.nodeR1;\n                    i.cells[p + f * i.width] += e * m * m;\n                  }\n                }\n          };\n        o.nodeInfluenceFactor &&\n          t.forEach(function (t) {\n            l(t, o.nodeInfluenceFactor / u);\n          }),\n          o.edgeInfluenceFactor &&\n            n.forEach(function (t) {\n              !(function (t, e) {\n                for (\n                  var n = t.getBBox(),\n                    a = h(n, o.edgeR1),\n                    u = a[0],\n                    c = a[1],\n                    l = a[2],\n                    d = a[3],\n                    f = c;\n                  f < d;\n                  f += 1\n                )\n                  for (var p = u; p < l; p += 1)\n                    if (!(e < 0 && i.cells[p + f * i.width] <= 0)) {\n                      var g = s(p, r.minX),\n                        y = s(f, r.minY),\n                        v = Jn({ x: g, y: y }, t);\n                      if (v < Math.pow(o.edgeR1, 2)) {\n                        var m = Math.sqrt(v) - o.edgeR1;\n                        i.cells[p + f * i.width] += e * m * m;\n                      }\n                    }\n              })(t, o.edgeInfluenceFactor / c);\n            }),\n          o.negativeNodeInfluenceFactor &&\n            e.forEach(function (t) {\n              l(t, o.negativeNodeInfluenceFactor / u);\n            });\n      }\n      function Mi(t, e, n, r) {\n        var i = t.getBBox(),\n          o = n[0],\n          a = n[1],\n          s = n[2],\n          u = n[3],\n          c = {\n            topLeft: { x: i.minX - e, y: i.minY - e },\n            topRight: { x: i.maxX + e, y: i.minY - e },\n            bottomLeft: { x: i.minX - e, y: i.maxY + e },\n            bottomRight: { x: i.maxX + e, y: i.maxY + e },\n          },\n          h = i.height * i.width;\n        function l(t, e) {\n          return i.width * (0.5 * (t.y - i.minY + (e.y - i.minY)));\n        }\n        if (a)\n          return o\n            ? r\n              ? c.topLeft\n              : c.bottomRight\n            : s\n            ? r\n              ? c.bottomLeft\n              : c.topRight\n            : l(a, u) < 0.5 * h\n            ? a.y > u.y\n              ? r\n                ? c.topLeft\n                : c.bottomRight\n              : r\n              ? c.topRight\n              : c.bottomLeft\n            : a.y < u.y\n            ? r\n              ? c.bottomLeft\n              : c.topRight\n            : r\n            ? c.bottomRight\n            : c.topLeft;\n        if (u) {\n          if (o) return r ? c.topRight : c.bottomLeft;\n          if (s) return r ? c.bottomRight : c.topLeft;\n        }\n        return l(o, s) < 0.5 * h\n          ? o.x > s.x\n            ? r\n              ? c.topLeft\n              : c.bottomRight\n            : r\n            ? c.bottomLeft\n            : c.topRight\n          : o.x < s.x\n          ? r\n            ? c.topRight\n            : c.bottomLeft\n          : r\n          ? c.bottomRight\n          : c.topLeft;\n      }\n      var Si = (function () {\n          function t(t, e) {\n            (this.cfg = Object(gt.d)(this.getDefaultCfg(), e)),\n              (this.graph = t),\n              (this.id = this.cfg.id),\n              (this.group = this.cfg.group),\n              (this.members = this.cfg.members.map(function (e) {\n                return Object(gt.x)(e) ? t.findById(e) : e;\n              })),\n              (this.nonMembers = this.cfg.nonMembers.map(function (e) {\n                return Object(gt.x)(e) ? t.findById(e) : e;\n              })),\n              this.setPadding(),\n              this.setType(),\n              (this.path = this.calcPath(this.members, this.nonMembers)),\n              this.render();\n          }\n          return (\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                id: \"g6-hull\",\n                type: \"round-convex\",\n                members: [],\n                nonMembers: [],\n                style: { fill: \"lightblue\", stroke: \"blue\", opacity: 0.2 },\n                padding: 10,\n              };\n            }),\n            (t.prototype.setPadding = function () {\n              var t =\n                this.members.length &&\n                this.members[0].getKeyShape().getCanvasBBox().width / 2;\n              (this.padding =\n                this.cfg.padding > 0 ? this.cfg.padding + t : 10 + t),\n                (this.cfg.bubbleCfg = {\n                  nodeR0: this.padding - t,\n                  nodeR1: this.padding - t,\n                  morphBuffer: this.padding - t,\n                });\n            }),\n            (t.prototype.setType = function () {\n              (this.type = this.cfg.type),\n                this.members.length < 3 && (this.type = \"round-convex\"),\n                \"round-convex\" !== this.type &&\n                  \"smooth-convex\" !== this.type &&\n                  \"bubble\" !== this.type &&\n                  (console.warn(\n                    \"The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default.\",\n                  ),\n                  (this.type = \"round-convex\"));\n            }),\n            (t.prototype.calcPath = function (t, e) {\n              var n, r, i;\n              switch (this.type) {\n                case \"round-convex\":\n                  (i = fi(\n                    (n = yi(t)).map(function (t) {\n                      return [t.x, t.y];\n                    }),\n                    this.padding,\n                  )),\n                    (r = Object(mt.b)(i));\n                  break;\n                case \"smooth-convex\":\n                  2 === (n = yi(t)).length\n                    ? ((i = fi(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = Object(mt.b)(i)))\n                    : n.length > 2 &&\n                      ((i = pi(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = ci(i)));\n                  break;\n                case \"bubble\":\n                  r = (n = wi(t, e, this.cfg.bubbleCfg)).length >= 2 && ci(n);\n              }\n              return r;\n            }),\n            (t.prototype.render = function () {\n              this.group.addShape(\"path\", {\n                attrs: Object(h.a)({ path: this.path }, this.cfg.style),\n                id: this.id,\n                name: this.cfg.id,\n              }),\n                this.group.toBack();\n            }),\n            (t.prototype.addMember = function (t) {\n              if (t) {\n                Object(gt.x)(t) && (t = this.graph.findById(t)),\n                  this.members.push(t);\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 && this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.addNonMember = function (t) {\n              if (t) {\n                Object(gt.x)(t) && (t = this.graph.findById(t)),\n                  this.nonMembers.push(t);\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 && this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.removeMember = function (t) {\n              if (t) {\n                Object(gt.x)(t) && (t = this.graph.findById(t));\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.removeNonMember = function (t) {\n              if (t) {\n                Object(gt.x)(t) && (t = this.graph.findById(t));\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.updateData = function (t, e) {\n              var n = this;\n              this.group.findById(this.id).remove(),\n                t &&\n                  (this.members = t.map(function (t) {\n                    return Object(gt.x)(t) ? n.graph.findById(t) : t;\n                  })),\n                e &&\n                  (this.nonMembers = e.map(function (t) {\n                    return Object(gt.x)(t) ? n.graph.findById(t) : t;\n                  })),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.updateStyle = function (t) {\n              this.group.findById(this.id).attr(Object(h.a)({}, t));\n            }),\n            (t.prototype.updateCfg = function (t) {\n              var e = this;\n              (this.cfg = Object(gt.d)(this.cfg, t)),\n                (this.id = this.cfg.id),\n                (this.group = this.cfg.group),\n                t.members &&\n                  (this.members = this.cfg.members.map(function (t) {\n                    return Object(gt.x)(t) ? e.graph.findById(t) : t;\n                  })),\n                t.nonMembers &&\n                  (this.nonMembers = this.cfg.nonMembers.map(function (t) {\n                    return Object(gt.x)(t) ? e.graph.findById(t) : t;\n                  })),\n                this.setPadding(),\n                this.setType(),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.contain = function (t) {\n              var e,\n                n,\n                r = this,\n                i = (e = Object(gt.x)(t)\n                  ? this.graph.findById(t)\n                  : t).getKeyShape();\n              if (\"path\" === e.get(\"type\")) n = ui(i.attr(\"path\"));\n              else {\n                var o = i.getCanvasBBox();\n                n = [\n                  [o.minX, o.minY],\n                  [o.maxX, o.minY],\n                  [o.maxX, o.maxY],\n                  [o.minX, o.maxY],\n                ];\n              }\n              return (\n                (n = n.map(function (t) {\n                  var e = r.graph.getPointByCanvas(t[0], t[1]);\n                  return [e.x, e.y];\n                })),\n                qn(n, ui(this.path))\n              );\n            }),\n            (t.prototype.destroy = function () {\n              this.group.remove(), (this.cfg = null);\n            }),\n            t\n          );\n        })(),\n        Ci = sn.a.transform;\n      !(function (t) {\n        function e(e) {\n          var n = t.call(this) || this;\n          return (\n            (n.cfg = Object(gt.d)(n.getDefaultCfg(), e)),\n            n.init(),\n            (n.animating = !1),\n            (n.destroyed = !1),\n            n.cfg.enabledStack &&\n              ((n.undoStack = new On(n.cfg.maxStep)),\n              (n.redoStack = new On(n.cfg.maxStep))),\n            n\n          );\n        }\n        Object(h.c)(e, t),\n          (e.prototype.init = function () {\n            this.initCanvas();\n            var t = new Yr(this),\n              e = new Nr(this),\n              n = new ei(this),\n              r = new ri(this);\n            this.set({\n              viewController: t,\n              modeController: e,\n              itemController: n,\n              stateController: r,\n            }),\n              this.initLayoutController(),\n              this.initEventController(),\n              this.initGroups(),\n              this.initPlugins(),\n              an(this.onTick.bind(this));\n          }),\n          (e.prototype.initGroups = function () {\n            var t = this.get(\"canvas\"),\n              e = this.get(\"canvas\").get(\"el\").id,\n              n = t.addGroup({\n                id: e + \"-root\",\n                className: ur.rootContainerClassName,\n              });\n            if (this.get(\"groupByTypes\")) {\n              var r = n.addGroup({\n                  id: e + \"-edge\",\n                  className: ur.edgeContainerClassName,\n                }),\n                i = n.addGroup({\n                  id: e + \"-node\",\n                  className: ur.nodeContainerClassName,\n                }),\n                o = n.addGroup({\n                  id: e + \"-combo\",\n                  className: ur.comboContainerClassName,\n                });\n              o.toBack(),\n                this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n            }\n            var a = n.addGroup({\n              id: e + \"-delegate\",\n              className: ur.delegateContainerClassName,\n            });\n            this.set({ delegateGroup: a }), this.set(\"group\", n);\n          }),\n          (e.prototype.getDefaultCfg = function () {\n            return {\n              container: void 0,\n              width: void 0,\n              height: void 0,\n              renderer: \"canvas\",\n              modes: {},\n              plugins: [],\n              data: {},\n              fitViewPadding: 10,\n              minZoom: 0.2,\n              maxZoom: 10,\n              event: !0,\n              groupByTypes: !0,\n              directed: !1,\n              autoPaint: !0,\n              nodes: [],\n              edges: [],\n              combos: [],\n              vedges: [],\n              itemMap: {},\n              linkCenter: !1,\n              defaultNode: {},\n              defaultEdge: {},\n              nodeStateStyles: {},\n              edgeStateStyles: {},\n              states: {},\n              animate: !1,\n              animateCfg: {\n                onFrame: void 0,\n                duration: 500,\n                easing: \"easeLinear\",\n              },\n              callback: void 0,\n              enabledStack: !1,\n              maxStep: 10,\n              tooltips: [],\n            };\n          }),\n          (e.prototype.set = function (t, e) {\n            return (\n              Object(gt.w)(t)\n                ? (this.cfg = Object(h.a)(Object(h.a)({}, this.cfg), t))\n                : (this.cfg[t] = e),\n              this\n            );\n          }),\n          (e.prototype.get = function (t) {\n            return this.cfg[t];\n          }),\n          (e.prototype.getGroup = function () {\n            return this.get(\"group\");\n          }),\n          (e.prototype.getContainer = function () {\n            return this.get(\"container\");\n          }),\n          (e.prototype.getMinZoom = function () {\n            return this.get(\"minZoom\");\n          }),\n          (e.prototype.setMinZoom = function (t) {\n            return this.set(\"minZoom\", t);\n          }),\n          (e.prototype.getMaxZoom = function () {\n            return this.get(\"maxZoom\");\n          }),\n          (e.prototype.setMaxZoom = function (t) {\n            return this.set(\"maxZoom\", t);\n          }),\n          (e.prototype.getWidth = function () {\n            return this.get(\"width\");\n          }),\n          (e.prototype.getHeight = function () {\n            return this.get(\"height\");\n          }),\n          (e.prototype.clearItemStates = function (t, e) {\n            Object(gt.x)(t) && (t = this.findById(t));\n            var n = this.get(\"itemController\");\n            e || (e = t.get(\"states\")),\n              n.clearItemStates(t, e),\n              this.get(\"stateController\").updateStates(t, e, !1);\n          }),\n          (e.prototype.node = function (t) {\n            \"function\" == typeof t && this.set(\"nodeMapper\", t);\n          }),\n          (e.prototype.edge = function (t) {\n            \"function\" == typeof t && this.set(\"edgeMapper\", t);\n          }),\n          (e.prototype.combo = function (t) {\n            \"function\" == typeof t && this.set(\"comboMapper\", t);\n          }),\n          (e.prototype.findById = function (t) {\n            return this.get(\"itemMap\")[t];\n          }),\n          (e.prototype.find = function (t, e) {\n            var n,\n              r = this.get(t + \"s\");\n            return (\n              Object(gt.e)(r, function (t, r) {\n                if (e(t, r)) return (n = t);\n              }),\n              n\n            );\n          }),\n          (e.prototype.findAll = function (t, e) {\n            var n = [];\n            return (\n              Object(gt.e)(this.get(t + \"s\"), function (t, r) {\n                e(t, r) && n.push(t);\n              }),\n              n\n            );\n          }),\n          (e.prototype.findAllByState = function (t, e) {\n            return this.findAll(t, function (t) {\n              return t.hasState(e);\n            });\n          }),\n          (e.prototype.translate = function (t, e) {\n            var n = this.get(\"group\"),\n              r = Object(gt.b)(n.getMatrix());\n            r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n              (r = Ci(r, [[\"t\", t, e]])),\n              n.setMatrix(r),\n              this.emit(\"viewportchange\", {\n                action: \"translate\",\n                matrix: n.getMatrix(),\n              }),\n              this.autoPaint();\n          }),\n          (e.prototype.moveTo = function (t, e) {\n            var n = this.get(\"group\");\n            Rn(n, { x: t, y: e }),\n              this.emit(\"viewportchange\", {\n                action: \"move\",\n                matrix: n.getMatrix(),\n              });\n          }),\n          (e.prototype.fitView = function (t) {\n            t && this.set(\"fitViewPadding\", t),\n              this.get(\"viewController\").fitView(),\n              this.autoPaint();\n          }),\n          (e.prototype.fitCenter = function () {\n            this.get(\"viewController\").fitCenter(), this.autoPaint();\n          }),\n          (e.prototype.addBehaviors = function (t, e) {\n            return (\n              this.get(\"modeController\").manipulateBehaviors(t, e, !0), this\n            );\n          }),\n          (e.prototype.removeBehaviors = function (t, e) {\n            return (\n              this.get(\"modeController\").manipulateBehaviors(t, e, !1), this\n            );\n          }),\n          (e.prototype.updateBehavior = function (t, e, n) {\n            return this.get(\"modeController\").updateBehavior(t, e, n), this;\n          }),\n          (e.prototype.zoom = function (t, e) {\n            var n = this.get(\"group\"),\n              r = Object(gt.b)(n.getMatrix()),\n              i = this.get(\"minZoom\"),\n              o = this.get(\"maxZoom\");\n            r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n              (r = Ci(\n                r,\n                e\n                  ? [\n                      [\"t\", -e.x, -e.y],\n                      [\"s\", t, t],\n                      [\"t\", e.x, e.y],\n                    ]\n                  : [[\"s\", t, t]],\n              )),\n              (i && r[0] < i) ||\n                (o && r[0] > o) ||\n                (n.setMatrix(r),\n                this.emit(\"viewportchange\", { action: \"zoom\", matrix: r }),\n                this.autoPaint());\n          }),\n          (e.prototype.zoomTo = function (t, e) {\n            var n = t / this.getZoom();\n            this.zoom(n, e);\n          }),\n          (e.prototype.focusItem = function (t, e, n) {\n            var r = this.get(\"viewController\"),\n              i = !1;\n            e ? (i = !0) : void 0 === e && (i = this.get(\"animate\"));\n            var o = {};\n            n ? (o = n) : void 0 === n && (o = this.get(\"animateCfg\")),\n              r.focus(t, i, o),\n              this.autoPaint();\n          }),\n          (e.prototype.autoPaint = function () {\n            this.get(\"autoPaint\") && this.paint();\n          }),\n          (e.prototype.paint = function () {\n            this.emit(\"beforepaint\"),\n              this.get(\"canvas\").draw(),\n              this.emit(\"afterpaint\");\n          }),\n          (e.prototype.getPointByClient = function (t, e) {\n            return this.get(\"viewController\").getPointByClient(t, e);\n          }),\n          (e.prototype.getClientByPoint = function (t, e) {\n            return this.get(\"viewController\").getClientByPoint(t, e);\n          }),\n          (e.prototype.getPointByCanvas = function (t, e) {\n            return this.get(\"viewController\").getPointByCanvas(t, e);\n          }),\n          (e.prototype.getCanvasByPoint = function (t, e) {\n            return this.get(\"viewController\").getCanvasByPoint(t, e);\n          }),\n          (e.prototype.getGraphCenterPoint = function () {\n            var t = this.get(\"group\").getCanvasBBox();\n            return { x: (t.minX + t.maxX) / 2, y: (t.minY + t.maxY) / 2 };\n          }),\n          (e.prototype.getViewPortCenterPoint = function () {\n            return this.getPointByCanvas(\n              this.get(\"width\") / 2,\n              this.get(\"height\") / 2,\n            );\n          }),\n          (e.prototype.showItem = function (t, e) {\n            void 0 === e && (e = !0);\n            var n = this.get(\"itemController\").changeItemVisibility(t, !0);\n            if (e && this.get(\"enabledStack\")) {\n              var r = n.getID(),\n                i = {},\n                o = {};\n              switch (n.getType()) {\n                case \"node\":\n                  (i.nodes = [{ id: r, visible: !1 }]),\n                    (o.nodes = [{ id: r, visible: !0 }]);\n                  break;\n                case \"edge\":\n                  (i.nodes = [{ id: r, visible: !1 }]),\n                    (o.edges = [{ id: r, visible: !0 }]);\n                  break;\n                case \"combo\":\n                  (i.nodes = [{ id: r, visible: !1 }]),\n                    (o.combos = [{ id: r, visible: !0 }]);\n              }\n              this.pushStack(\"visible\", { before: i, after: o });\n            }\n          }),\n          (e.prototype.hideItem = function (t, e) {\n            void 0 === e && (e = !0);\n            var n = this.get(\"itemController\").changeItemVisibility(t, !1);\n            if (e && this.get(\"enabledStack\")) {\n              var r = n.getID(),\n                i = {},\n                o = {};\n              switch (n.getType()) {\n                case \"node\":\n                  (i.nodes = [{ id: r, visible: !0 }]),\n                    (o.nodes = [{ id: r, visible: !1 }]);\n                  break;\n                case \"edge\":\n                  (i.nodes = [{ id: r, visible: !0 }]),\n                    (o.edges = [{ id: r, visible: !1 }]);\n                  break;\n                case \"combo\":\n                  (i.nodes = [{ id: r, visible: !0 }]),\n                    (o.combos = [{ id: r, visible: !1 }]);\n              }\n              this.pushStack(\"visible\", { before: i, after: o });\n            }\n          }),\n          (e.prototype.refreshItem = function (t) {\n            this.get(\"itemController\").refreshItem(t);\n          }),\n          (e.prototype.setAutoPaint = function (t) {\n            this.set(\"autoPaint\", t), this.get(\"canvas\").set(\"autoDraw\", t);\n          }),\n          (e.prototype.remove = function (t, e) {\n            void 0 === e && (e = !0), this.removeItem(t, e);\n          }),\n          (e.prototype.removeItem = function (t, e) {\n            void 0 === e && (e = !0);\n            var n = t;\n            if (\n              (Object(gt.x)(t) && (n = this.findById(t)), !n && Object(gt.x)(t))\n            )\n              console.warn(\"The item to be removed does not exist!\");\n            else if (n) {\n              var r = \"\";\n              if (\n                (n.getType && (r = n.getType()), e && this.get(\"enabledStack\"))\n              ) {\n                var i = Object(h.a)(Object(h.a)({}, n.getModel()), {\n                    itemType: r,\n                  }),\n                  o = {};\n                switch (r) {\n                  case \"node\":\n                    (o.nodes = [i]), (o.edges = []);\n                    for (var a = n.getEdges(), s = a.length - 1; s >= 0; s--)\n                      o.edges.push(\n                        Object(h.a)(Object(h.a)({}, a[s].getModel()), {\n                          itemType: \"edge\",\n                        }),\n                      );\n                    break;\n                  case \"edge\":\n                    o.edges = [i];\n                    break;\n                  case \"combo\":\n                    o.combos = [i];\n                }\n                this.pushStack(\"delete\", { before: o, after: {} });\n              }\n              if (\"node\" === r) n.getModel().comboId && this.updateComboTree(n);\n              if ((this.get(\"itemController\").removeItem(n), \"combo\" === r)) {\n                var u = Sr(this.get(\"comboTrees\"));\n                this.set(\"comboTrees\", u);\n              }\n            }\n          }),\n          (e.prototype.addItem = function (t, e, n, r) {\n            void 0 === n && (n = !0), void 0 === r && (r = !0);\n            var i = this.get(\"comboSorted\");\n            this.set(\"comboSorted\", i && !r);\n            var o = this.get(\"itemController\");\n            if (\n              !(function (t, e) {\n                if (\"node\" === t || \"combo\" === t) {\n                  if (e.id && !Object(gt.x)(e.id))\n                    return (\n                      console.warn(\n                        \"G6 Warning Tips: missing 'id' property, or the 'id' %c\" +\n                          e.id +\n                          \"%c is not a string.\",\n                        \"font-size: 20px; color: red;\",\n                        \"\",\n                      ),\n                      !1\n                    );\n                } else if (!(\"edge\" !== t || (e.source && e.target)))\n                  return (\n                    console.warn(\n                      \"G6 Warning Tips: missing 'source' or 'target' for the edge.\",\n                    ),\n                    !1\n                  );\n                return !0;\n              })(t, e)\n            )\n              return !1;\n            if (!e.id || !this.findById(e.id)) {\n              var a,\n                s = this.get(\"comboTrees\");\n              if ((s || (s = []), \"combo\" === t)) {\n                var u = this.get(\"itemMap\"),\n                  c = !1;\n                if (\n                  (s.forEach(function (n) {\n                    c ||\n                      xr(n, function (n) {\n                        if (e.parentId === n.id) {\n                          c = !0;\n                          var r = Object(h.a)(\n                            { id: e.id, depth: n.depth + 2 },\n                            e,\n                          );\n                          n.children ? n.children.push(r) : (n.children = [r]),\n                            (e.depth = r.depth),\n                            (a = o.addItem(t, e));\n                        }\n                        var i = u[n.id];\n                        return (\n                          c &&\n                            i &&\n                            i.getType &&\n                            \"combo\" === i.getType() &&\n                            o.updateCombo(i, n.children),\n                          !0\n                        );\n                      });\n                  }),\n                  !c)\n                ) {\n                  var l = Object(h.a)({ id: e.id, depth: 0 }, e);\n                  (e.depth = l.depth), s.push(l), (a = o.addItem(t, e));\n                }\n                this.set(\"comboTrees\", s);\n              } else if (\"node\" === t && Object(gt.x)(e.comboId) && s) {\n                var d;\n                (d = this.findById(e.comboId)) &&\n                  d.getType &&\n                  \"combo\" !== d.getType() &&\n                  console.warn(\n                    \"'\" +\n                      e.comboId +\n                      \"' is not a id of a combo in the graph, the node will be added without combo.\",\n                  ),\n                  (a = o.addItem(t, e));\n                var f = this.get(\"itemMap\"),\n                  p = !1,\n                  g = !1;\n                (s || []).forEach(function (t) {\n                  g ||\n                    p ||\n                    xr(t, function (t) {\n                      if (t.id === e.id) return (g = !0), !1;\n                      if (e.comboId === t.id && !g) {\n                        p = !0;\n                        var n = Object(gt.b)(e);\n                        (n.itemType = \"node\"),\n                          t.children ? t.children.push(n) : (t.children = [n]),\n                          (n.depth = t.depth + 1);\n                      }\n                      return (\n                        p &&\n                          f[t.id].getType &&\n                          \"combo\" === f[t.id].getType() &&\n                          o.updateCombo(f[t.id], t.children),\n                        !0\n                      );\n                    });\n                });\n              } else a = o.addItem(t, e);\n              if ((\"node\" === t && e.comboId) || (\"combo\" === t && e.parentId))\n                (d = this.findById(e.comboId || e.parentId)) &&\n                  d.getType &&\n                  \"combo\" === d.getType() &&\n                  d.addChild(a);\n              var y = this.get(\"combos\");\n              if (\n                (y && y.length > 0 && this.sortCombos(),\n                this.autoPaint(),\n                n && this.get(\"enabledStack\"))\n              ) {\n                var v = Object(h.a)(Object(h.a)({}, a.getModel()), {\n                    itemType: t,\n                  }),\n                  m = {};\n                switch (t) {\n                  case \"node\":\n                    m.nodes = [v];\n                    break;\n                  case \"edge\":\n                    m.edges = [v];\n                    break;\n                  case \"combo\":\n                    m.combos = [v];\n                }\n                this.pushStack(\"add\", { before: {}, after: m });\n              }\n              return a;\n            }\n            console.warn(\n              \"This item exists already. Be sure the id %c\" +\n                e.id +\n                \"%c is unique.\",\n              \"font-size: 20px; color: red;\",\n              \"\",\n            );\n          }),\n          (e.prototype.add = function (t, e, n, r) {\n            return (\n              void 0 === n && (n = !0),\n              void 0 === r && (r = !0),\n              this.addItem(t, e, n, r)\n            );\n          }),\n          (e.prototype.updateItem = function (t, e, n) {\n            var r = this;\n            void 0 === n && (n = !0);\n            var i,\n              o = this.get(\"itemController\");\n            i = Object(gt.x)(t) ? this.findById(t) : t;\n            var a = Object(gt.b)(i.getModel()),\n              s = \"\";\n            i.getType && (s = i.getType());\n            var u = Object(h.f)([], i.getStates());\n            if (\n              (\"combo\" === s &&\n                Object(gt.e)(u, function (t) {\n                  return r.setItemState(i, t, !1);\n                }),\n              o.updateItem(i, e),\n              \"combo\" === s &&\n                Object(gt.e)(u, function (t) {\n                  return r.setItemState(i, t, !0);\n                }),\n              n && this.get(\"enabledStack\"))\n            ) {\n              var c = { nodes: [], edges: [], combos: [] },\n                l = { nodes: [], edges: [], combos: [] },\n                d = Object(h.a)({ id: a.id }, e);\n              switch (s) {\n                case \"node\":\n                  c.nodes.push(a), l.nodes.push(d);\n                  break;\n                case \"edge\":\n                  c.edges.push(a), l.edges.push(d);\n                  break;\n                case \"combo\":\n                  c.combos.push(a), l.combos.push(d);\n              }\n              \"node\" === s && c.nodes.push(a),\n                this.pushStack(\"update\", { before: c, after: l });\n            }\n          }),\n          (e.prototype.update = function (t, e, n) {\n            void 0 === n && (n = !0), this.updateItem(t, e, n);\n          }),\n          (e.prototype.setItemState = function (t, e, n) {\n            Object(gt.x)(t) && (t = this.findById(t)),\n              this.get(\"itemController\").setItemState(t, e, n);\n            var r = this.get(\"stateController\");\n            Object(gt.x)(n)\n              ? r.updateState(t, e + \":\" + n, !0)\n              : r.updateState(t, e, n);\n          }),\n          (e.prototype.priorityState = function (t, e) {\n            this.get(\"itemController\").priorityState(t, e);\n          }),\n          (e.prototype.data = function (t) {\n            Er(t), this.set(\"data\", t);\n          }),\n          (e.prototype.render = function () {\n            var t = this;\n            this.set(\"comboSorted\", !1);\n            var e = this.get(\"data\");\n            if ((this.get(\"enabledStack\") && this.clearStack(), !e))\n              throw new Error(\"data must be defined first\");\n            var n = e.nodes,\n              r = void 0 === n ? [] : n,\n              i = e.edges,\n              o = void 0 === i ? [] : i,\n              a = e.combos,\n              s = void 0 === a ? [] : a;\n            if (\n              (this.clear(!0),\n              this.emit(\"beforerender\"),\n              Object(gt.e)(r, function (e) {\n                t.add(\"node\", e, !1, !1);\n              }),\n              s && 0 !== s.length)\n            ) {\n              var u = Mr(s, r);\n              this.set(\"comboTrees\", u), t.addCombos(s);\n            }\n            Object(gt.e)(o, function (e) {\n              t.add(\"edge\", e, !1, !1);\n            });\n            var c = t.get(\"animate\");\n            (t.get(\"fitView\") || t.get(\"fitCenter\")) && t.set(\"animate\", !1);\n            var h = t.get(\"layoutController\");\n            if (h) {\n              if (\n                (h.layout(function () {\n                  t.get(\"fitView\")\n                    ? t.fitView()\n                    : t.get(\"fitCenter\") && t.fitCenter();\n                  t.autoPaint(),\n                    t.emit(\"afterrender\"),\n                    (t.get(\"fitView\") || t.get(\"fitCenter\")) &&\n                      t.set(\"animate\", c);\n                }),\n                this.refreshPositions(),\n                this.destroyed)\n              )\n                return;\n            } else\n              t.get(\"fitView\") && t.fitView(),\n                t.get(\"fitCenter\") && t.fitCenter(),\n                t.emit(\"afterrender\"),\n                t.set(\"animate\", c);\n            this.get(\"groupByTypes\") ||\n              (s && 0 !== s.length\n                ? this.sortCombos()\n                : e.nodes && e.edges && e.nodes.length < e.edges.length\n                ? this.getNodes().forEach(function (t) {\n                    t.toFront();\n                  })\n                : this.getEdges().forEach(function (t) {\n                    t.toBack();\n                  }));\n            this.get(\"enabledStack\") && this.pushStack(\"render\");\n          }),\n          (e.prototype.read = function (t) {\n            this.data(t), this.render();\n          }),\n          (e.prototype.diffItems = function (t, e, n) {\n            var r,\n              i = this,\n              o = this.get(\"itemMap\");\n            Object(gt.e)(n, function (n) {\n              if ((r = o[n.id])) {\n                if (i.get(\"animate\") && \"node\" === t) {\n                  var a = r.getContainer().getMatrix();\n                  a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                    r.set(\"originAttrs\", { x: a[6], y: a[7] });\n                }\n                i.updateItem(r, n, !1);\n              } else r = i.addItem(t, n, !1);\n              r && e[t + \"s\"].push(r);\n            });\n          }),\n          (e.prototype.changeData = function (t, e) {\n            void 0 === e && (e = !0);\n            var n = this;\n            if (!Er(t)) return this;\n            e &&\n              this.get(\"enabledStack\") &&\n              this.pushStack(\"changedata\", { before: n.save(), after: t }),\n              this.set(\"comboSorted\", !1),\n              this.removeHulls(),\n              this.getNodes().map(function (t) {\n                return n.clearItemStates(t);\n              }),\n              this.getEdges().map(function (t) {\n                return n.clearItemStates(t);\n              });\n            var r = this.get(\"canvas\"),\n              i = r.get(\"localRefresh\");\n            r.set(\"localRefresh\", !1), n.get(\"data\") || (n.data(t), n.render());\n            var o = this.get(\"itemMap\"),\n              a = { nodes: [], edges: [] },\n              s = t.combos;\n            if (s) {\n              var u = Mr(s, t.nodes);\n              this.set(\"comboTrees\", u);\n            }\n            this.diffItems(\"node\", a, t.nodes),\n              Object(gt.e)(o, function (t, e) {\n                (o[e].getModel().depth = 0),\n                  (t.getType && \"edge\" === t.getType()) ||\n                    (t.getType && \"combo\" === t.getType()\n                      ? (delete o[e], t.destroy())\n                      : a.nodes.indexOf(t) < 0 &&\n                        (delete o[e], n.remove(t, !1)));\n              });\n            for (var c = this.getCombos(), h = c.length - 1; h >= 0; h--)\n              c[h].destroyed && c.splice(h, 1);\n            s &&\n              (n.addCombos(s), this.get(\"groupByTypes\") || this.sortCombos()),\n              this.diffItems(\"edge\", a, t.edges),\n              Object(gt.e)(o, function (t, e) {\n                (!t.getType ||\n                  (\"node\" !== t.getType() && \"combo\" !== t.getType())) &&\n                  a.edges.indexOf(t) < 0 &&\n                  (delete o[e], n.remove(t, !1));\n              }),\n              this.set({ nodes: a.nodes, edges: a.edges });\n            var l = this.get(\"layoutController\");\n            return (\n              l &&\n                (l.changeData(),\n                n.get(\"animate\") && !l.getLayoutType()\n                  ? n.positionsAnimate()\n                  : n.autoPaint()),\n              setTimeout(function () {\n                r.set(\"localRefresh\", i);\n              }, 16),\n              this\n            );\n          }),\n          (e.prototype.addCombos = function (t) {\n            var e = this.get(\"comboTrees\");\n            this.get(\"itemController\").addCombos(e, t);\n          }),\n          (e.prototype.createCombo = function (t, e) {\n            var n = this;\n            this.set(\"comboSorted\", !1);\n            var r,\n              i = \"\";\n            if (t) {\n              if (Object(gt.x)(t)) (i = t), (r = { id: t });\n              else {\n                if (!(i = t.id))\n                  return void console.warn(\n                    \"Create combo failed. Please assign a unique string id for the adding combo.\",\n                  );\n                r = t;\n              }\n              var o = e.map(function (t) {\n                var e = n.findById(t),\n                  r = e.getModel(),\n                  o = \"\";\n                e.getType && (o = e.getType());\n                var a = { id: e.getID(), itemType: o };\n                return (\n                  \"combo\" === o\n                    ? ((a.parentId = i), (r.parentId = i))\n                    : \"node\" === o && ((a.comboId = i), (r.comboId = i)),\n                  a\n                );\n              });\n              (r.children = o),\n                this.addItem(\"combo\", r, !1),\n                this.set(\"comboSorted\", !1);\n              var a = this.get(\"comboTrees\");\n              (a || []).forEach(function (t) {\n                xr(t, function (t) {\n                  return (\n                    t.id !== i || ((t.itemType = \"combo\"), (t.children = o), !1)\n                  );\n                });\n              }),\n                a && this.sortCombos();\n            }\n          }),\n          (e.prototype.uncombo = function (t) {\n            var e = this,\n              n = t;\n            if (\n              (Object(gt.x)(t) && (n = this.findById(t)),\n              !n || (n.getType && \"combo\" !== n.getType()))\n            )\n              console.warn(\"The item is not a combo!\");\n            else {\n              var r = n.getModel().parentId,\n                i = this.get(\"comboTrees\");\n              i || (i = []);\n              var o,\n                a = this.get(\"itemMap\"),\n                s = n.get(\"id\"),\n                u = [],\n                c = this.get(\"combos\"),\n                h = this.findById(r);\n              if (\n                (i.forEach(function (i) {\n                  o ||\n                    xr(i, function (i) {\n                      if (i.id === s) {\n                        (o = i),\n                          n.getEdges().forEach(function (t) {\n                            e.removeItem(t, !1);\n                          });\n                        var l = c.indexOf(t);\n                        c.splice(l, 1), delete a[s], n.destroy();\n                      }\n                      return (\n                        !r ||\n                        !o ||\n                        i.id !== r ||\n                        (h.removeCombo(n),\n                        -1 !== (l = (u = i.children).indexOf(o)) &&\n                          u.splice(l, 1),\n                        o.children.forEach(function (t) {\n                          var n = e.findById(t.id),\n                            i = n.getModel();\n                          n.getType && \"combo\" === n.getType()\n                            ? ((t.parentId = r),\n                              delete t.comboId,\n                              (i.parentId = r),\n                              delete i.comboId)\n                            : n.getType &&\n                              \"node\" === n.getType() &&\n                              ((t.comboId = r), (i.comboId = r)),\n                            h.addChild(n),\n                            u.push(t);\n                        }),\n                        !1)\n                      );\n                    });\n                }),\n                !r && o)\n              ) {\n                var l = i.indexOf(o);\n                i.splice(l, 1),\n                  o.children.forEach(function (t) {\n                    t.parentId = void 0;\n                    var n = e.findById(t.id).getModel();\n                    delete n.parentId,\n                      delete n.comboId,\n                      \"node\" !== t.itemType && i.push(t);\n                  });\n              }\n            }\n          }),\n          (e.prototype.updateCombos = function () {\n            var t = this,\n              e = this.get(\"comboTrees\"),\n              n = this.get(\"itemController\"),\n              r = this.get(\"itemMap\");\n            (e || []).forEach(function (e) {\n              xr(e, function (e) {\n                if (!e) return !0;\n                var i = r[e.id];\n                if (i && i.getType && \"combo\" === i.getType()) {\n                  var o = Object(h.f)([], i.getStates());\n                  Object(gt.e)(o, function (e) {\n                    return t.setItemState(i, e, !1);\n                  }),\n                    n.updateCombo(i, e.children),\n                    Object(gt.e)(o, function (e) {\n                      return t.setItemState(i, e, !0);\n                    });\n                }\n                return !0;\n              });\n            }),\n              this.sortCombos();\n          }),\n          (e.prototype.updateCombo = function (t) {\n            var e,\n              n = this,\n              r = t;\n            if (\n              (Object(gt.x)(t) && (r = this.findById(t)),\n              !r || (r.getType && \"combo\" !== r.getType()))\n            )\n              console.warn(\"The item to be updated is not a combo!\");\n            else {\n              e = r.get(\"id\");\n              var i = this.get(\"comboTrees\"),\n                o = this.get(\"itemController\"),\n                a = this.get(\"itemMap\");\n              (i || []).forEach(function (t) {\n                xr(t, function (t) {\n                  if (!t) return !0;\n                  var r = a[t.id];\n                  if (e === t.id && r && r.getType && \"combo\" === r.getType()) {\n                    var i = Object(h.f)([], r.getStates());\n                    Object(gt.e)(i, function (t) {\n                      r.getStateStyle(t) && n.setItemState(r, t, !1);\n                    }),\n                      o.updateCombo(r, t.children),\n                      Object(gt.e)(i, function (t) {\n                        r.getStateStyle(t) && n.setItemState(r, t, !0);\n                      }),\n                      e && (e = t.parentId);\n                  }\n                  return !0;\n                });\n              });\n            }\n          }),\n          (e.prototype.updateComboTree = function (t, e, n) {\n            void 0 === n && (n = !0);\n            var r;\n            this.set(\"comboSorted\", !1);\n            var i,\n              o = (r = Object(gt.x)(t) ? this.findById(t) : t).getModel(),\n              a = o.comboId || o.parentId,\n              s = \"\";\n            if ((r.getType && (s = r.getType()), e && \"combo\" === s)) {\n              var u,\n                c = this.get(\"comboTrees\"),\n                h = !0;\n              if (\n                ((c || []).forEach(function (t) {\n                  u ||\n                    br(t, function (t) {\n                      if (!u) return t.id === r.getID() && (u = t), !0;\n                    });\n                }),\n                br(u, function (t) {\n                  return t.id !== e || ((h = !1), !1);\n                }),\n                !h)\n              )\n                return void console.warn(\n                  \"Failed to update the combo tree! The parentId points to a descendant of the combo!\",\n                );\n            }\n            if (n && this.get(\"enabledStack\")) {\n              var l = {},\n                d = {};\n              \"combo\" === s\n                ? ((l.combos = [{ id: o.id, parentId: o.parentId }]),\n                  (d.combos = [{ id: o.id, parentId: e }]))\n                : \"node\" === s &&\n                  ((l.nodes = [{ id: o.id, parentId: o.comboId }]),\n                  (d.nodes = [{ id: o.id, parentId: e }])),\n                this.pushStack(\"updateComboTree\", { before: l, after: d });\n            }\n            if (o.parentId || o.comboId) {\n              var f = this.findById(o.parentId || o.comboId);\n              f && f.removeChild(r);\n            }\n            (\"combo\" === s ? (o.parentId = e) : \"node\" === s && (o.comboId = e),\n            e) &&\n              (i = this.findById(e)) &&\n              i.addChild(r);\n            a && (i = this.findById(a)) && i.removeChild(r);\n            var p = Sr(this.get(\"comboTrees\"), o.id, e);\n            this.set(\"comboTrees\", p), this.updateCombos();\n          }),\n          (e.prototype.save = function () {\n            var t = [],\n              e = [],\n              n = [];\n            return (\n              Object(gt.e)(this.get(\"nodes\"), function (e) {\n                t.push(e.getModel());\n              }),\n              Object(gt.e)(this.get(\"edges\"), function (t) {\n                e.push(t.getModel());\n              }),\n              Object(gt.e)(this.get(\"combos\"), function (t) {\n                n.push(t.getModel());\n              }),\n              { nodes: t, edges: e, combos: n }\n            );\n          }),\n          (e.prototype.changeSize = function (t, e) {\n            return this.get(\"viewController\").changeSize(t, e), this;\n          }),\n          (e.prototype.refresh = function () {\n            if ((this.emit(\"beforegraphrefresh\"), this.get(\"animate\")))\n              this.positionsAnimate();\n            else {\n              var t = this.get(\"nodes\"),\n                e = this.get(\"edges\"),\n                n = this.get(\"edges\");\n              Object(gt.e)(t, function (t) {\n                t.refresh();\n              }),\n                Object(gt.e)(e, function (t) {\n                  t.refresh();\n                }),\n                Object(gt.e)(n, function (t) {\n                  t.refresh();\n                });\n            }\n            this.emit(\"aftergraphrefresh\"), this.autoPaint();\n          }),\n          (e.prototype.getNodes = function () {\n            return this.get(\"nodes\");\n          }),\n          (e.prototype.getEdges = function () {\n            return this.get(\"edges\");\n          }),\n          (e.prototype.getCombos = function () {\n            return this.get(\"combos\");\n          }),\n          (e.prototype.getComboChildren = function (t) {\n            if (\n              (Object(gt.x)(t) && (t = this.findById(t)),\n              t && (!t.getType || \"combo\" === t.getType()))\n            )\n              return t.getChildren();\n            console.warn(\"The combo does not exist!\");\n          }),\n          (e.prototype.positionsAnimate = function () {\n            var t = this;\n            t.emit(\"beforeanimate\");\n            var e = t.get(\"animateCfg\"),\n              n = e.onFrame,\n              r = t.getNodes(),\n              i = r.map(function (t) {\n                var e = t.getModel();\n                return { id: e.id, x: e.x, y: e.y };\n              });\n            t.isAnimating() && t.stopAnimate(),\n              t.get(\"canvas\").animate(\n                function (e) {\n                  Object(gt.e)(i, function (r) {\n                    var i = t.findById(r.id);\n                    if (i && !i.destroyed) {\n                      var o = i.get(\"originAttrs\"),\n                        a = i.get(\"model\");\n                      if (!o) {\n                        var s = i.getContainer().getMatrix();\n                        s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                          (o = { x: s[6], y: s[7] }),\n                          i.set(\"originAttrs\", o);\n                      }\n                      if (n) {\n                        var u = n(i, e, r, o);\n                        i.set(\"model\", Object.assign(a, u));\n                      } else\n                        (a.x = o.x + (r.x - o.x) * e),\n                          (a.y = o.y + (r.y - o.y) * e);\n                    }\n                  }),\n                    t.refreshPositions();\n                },\n                {\n                  duration: e.duration,\n                  easing: e.easing,\n                  callback: function () {\n                    Object(gt.e)(r, function (t) {\n                      t.set(\"originAttrs\", null);\n                    }),\n                      e.callback && e.callback(),\n                      t.emit(\"afteranimate\"),\n                      (t.animating = !1);\n                  },\n                },\n              );\n          }),\n          (e.prototype.refreshPositions = function () {\n            this.emit(\"beforegraphrefreshposition\");\n            var t,\n              e = this.get(\"nodes\"),\n              n = this.get(\"edges\"),\n              r = this.get(\"vedges\"),\n              i = this.get(\"combos\"),\n              o = {};\n            Object(gt.e)(e, function (e) {\n              t = e.getModel();\n              var n = e.get(\"originAttrs\");\n              if (!n || t.x !== n.x || t.y !== n.y) {\n                var r = e.updatePosition({ x: t.x, y: t.y });\n                (o[t.id] = r), t.comboId && (o[t.comboId] = o[t.comboId] || r);\n              }\n            }),\n              i && 0 !== i.length && this.updateCombos(),\n              Object(gt.e)(n, function (t) {\n                var e = t.getSource().getModel(),\n                  n = t.getTarget();\n                if (!Object(gt.w)(n)) {\n                  var r = n.getModel();\n                  (o[e.id] || o[r.id] || t.getModel().isComboEdge) &&\n                    t.refresh();\n                }\n              }),\n              Object(gt.e)(r, function (t) {\n                t.refresh();\n              }),\n              this.emit(\"aftergraphrefreshposition\"),\n              this.autoPaint();\n          }),\n          (e.prototype.stopAnimate = function () {\n            this.get(\"canvas\").stopAnimate();\n          }),\n          (e.prototype.isAnimating = function () {\n            return this.animating;\n          }),\n          (e.prototype.getZoom = function () {\n            var t = this.get(\"group\").getMatrix();\n            return t ? t[0] : 1;\n          }),\n          (e.prototype.getCurrentMode = function () {\n            return this.get(\"modeController\").getMode();\n          }),\n          (e.prototype.setMode = function (t) {\n            return this.get(\"modeController\").setMode(t), this;\n          }),\n          (e.prototype.clear = function (t) {\n            return (\n              void 0 === t && (t = !1),\n              this.get(\"canvas\").clear(),\n              this.initGroups(),\n              this.set({\n                itemMap: {},\n                nodes: [],\n                edges: [],\n                groups: [],\n                combos: [],\n                comboTrees: [],\n              }),\n              t || this.emit(\"afterrender\"),\n              this\n            );\n          }),\n          (e.prototype.updateLayout = function (t) {\n            var e = this.get(\"layoutController\");\n            Object(gt.x)(t) && (t = { type: t });\n            var n = this.get(\"layout\"),\n              r = {};\n            Object.assign(r, n, t),\n              this.set(\"layout\", r),\n              e.isLayoutTypeSame(r) && r.gpuEnabled === n.gpuEnabled\n                ? e.updateLayoutCfg(r)\n                : e.changeLayout(r);\n          }),\n          (e.prototype.destroyLayout = function () {\n            this.get(\"layoutController\").destroyLayout();\n          }),\n          (e.prototype.layout = function () {\n            var t = this.get(\"layoutController\"),\n              e = this.get(\"layout\");\n            e &&\n              t &&\n              (e.workerEnabled\n                ? t.layout()\n                : t.layoutMethod\n                ? t.relayout(!0)\n                : t.layout());\n          }),\n          (e.prototype.collapseCombo = function (t) {\n            var e = this;\n            if ((Object(gt.x)(t) && (t = this.findById(t)), t)) {\n              this.emit(\"beforecollapseexpandcombo\", {\n                action: \"expand\",\n                item: t,\n              });\n              var n = t.getModel();\n              this.get(\"itemController\").collapseCombo(t), (n.collapsed = !0);\n              var r = this.getEdges().concat(this.get(\"vedges\")),\n                i = [],\n                o = [],\n                a = this.get(\"comboTrees\"),\n                s = !1;\n              (a || []).forEach(function (t) {\n                s ||\n                  br(t, function (t) {\n                    if (s && t.depth <= n.depth) return !1;\n                    if ((n.id === t.id && (s = !0), s)) {\n                      var r = e.findById(t.id);\n                      r &&\n                        r.getType &&\n                        \"combo\" === r.getType() &&\n                        ((i = i.concat(r.getNodes())),\n                        (o = o.concat(r.getCombos())));\n                    }\n                    return !0;\n                  });\n              });\n              var u = {},\n                c = [];\n              r.forEach(function (t) {\n                if (!t.isVisible() || t.getModel().isVEdge) {\n                  var r = t.getSource(),\n                    a = t.getTarget();\n                  if (\n                    ((i.includes(r) || o.includes(r)) &&\n                      !i.includes(a) &&\n                      !o.includes(a)) ||\n                    r.getModel().id === n.id\n                  ) {\n                    if ((d = t.getModel()).isVEdge)\n                      return void e.removeItem(t, !1);\n                    for (var s = a.getModel(); !a.isVisible(); ) {\n                      if (\n                        !(a = e.findById(s.parentId || s.comboId)) ||\n                        (!s.parentId && !s.comboId)\n                      )\n                        return;\n                      s = a.getModel();\n                    }\n                    var h = s.id;\n                    if (u[n.id + \"-\" + h])\n                      return void (u[n.id + \"-\" + h] += d.size || 1);\n                    var l = e.addItem(\n                      \"vedge\",\n                      { source: n.id, target: h, isVEdge: !0 },\n                      !1,\n                    );\n                    (u[n.id + \"-\" + h] = d.size || 1), c.push(l);\n                  } else if (\n                    (!i.includes(r) &&\n                      !o.includes(r) &&\n                      (i.includes(a) || o.includes(a))) ||\n                    a.getModel().id === n.id\n                  ) {\n                    var d;\n                    if ((d = t.getModel()).isVEdge)\n                      return void e.removeItem(t, !1);\n                    for (var f = r.getModel(); !r.isVisible(); ) {\n                      if (\n                        !(r = e.findById(f.parentId || f.comboId)) ||\n                        (!f.parentId && !f.comboId)\n                      )\n                        return;\n                      f = r.getModel();\n                    }\n                    var p = f.id;\n                    if (u[p + \"-\" + n.id])\n                      return void (u[p + \"-\" + n.id] += d.size || 1);\n                    l = e.addItem(\n                      \"vedge\",\n                      { target: n.id, source: p, isVEdge: !0 },\n                      !1,\n                    );\n                    (u[p + \"-\" + n.id] = d.size || 1), c.push(l);\n                  }\n                }\n              }),\n                c.forEach(function (t) {\n                  var n = t.getModel();\n                  e.updateItem(t, { size: u[n.source + \"-\" + n.target] }, !1);\n                }),\n                this.emit(\"aftercollapseexpandcombo\", {\n                  action: \"collapse\",\n                  item: t,\n                });\n            } else console.warn(\"The combo to be collapsed does not exist!\");\n          }),\n          (e.prototype.expandCombo = function (t) {\n            var e = this;\n            if (\n              (Object(gt.x)(t) && (t = this.findById(t)),\n              !t || (t.getType && \"combo\" !== t.getType()))\n            )\n              console.warn(\"The combo to be collapsed does not exist!\");\n            else {\n              this.emit(\"beforecollapseexpandcombo\", {\n                action: \"expand\",\n                item: t,\n              });\n              var n = t.getModel();\n              this.get(\"itemController\").expandCombo(t), (n.collapsed = !1);\n              var r = this.getEdges().concat(this.get(\"vedges\")),\n                i = [],\n                o = [],\n                a = this.get(\"comboTrees\"),\n                s = !1;\n              (a || []).forEach(function (t) {\n                s ||\n                  br(t, function (t) {\n                    if (s && t.depth <= n.depth) return !1;\n                    if ((n.id === t.id && (s = !0), s)) {\n                      var r = e.findById(t.id);\n                      r &&\n                        r.getType &&\n                        \"combo\" === r.getType() &&\n                        ((i = i.concat(r.getNodes())),\n                        (o = o.concat(r.getCombos())));\n                    }\n                    return !0;\n                  });\n              });\n              var u = {},\n                c = {};\n              r.forEach(function (t) {\n                if (!t.isVisible() || t.getModel().isVEdge) {\n                  var r = t.getSource(),\n                    a = t.getTarget(),\n                    s = r.get(\"id\"),\n                    h = a.get(\"id\");\n                  if (\n                    ((i.includes(r) || o.includes(r)) &&\n                      !i.includes(a) &&\n                      !o.includes(a)) ||\n                    s === n.id\n                  ) {\n                    if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                    for (var l = a.getModel(); !a.isVisible(); ) {\n                      if (\n                        !(a = e.findById(l.comboId || l.parentId)) ||\n                        (!l.parentId && !l.comboId)\n                      )\n                        return;\n                      l = a.getModel();\n                    }\n                    h = l.id;\n                    for (var d = r.getModel(); !r.isVisible(); ) {\n                      if (\n                        !(r = e.findById(d.comboId || d.parentId)) ||\n                        (!d.parentId && !d.comboId)\n                      )\n                        return;\n                      if (d.comboId === n.id || d.parentId === n.id) break;\n                      d = r.getModel();\n                    }\n                    if (((s = d.id), h)) {\n                      if (u[(p = s + \"-\" + h)])\n                        return (\n                          (u[p] += t.getModel().size || 1),\n                          void e.updateItem(c[p], { size: u[p] }, !1)\n                        );\n                      var f = e.addItem(\n                        \"vedge\",\n                        { source: s, target: h, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[p] = t.getModel().size || 1), (c[p] = f);\n                    }\n                  } else if (\n                    (!i.includes(r) &&\n                      !o.includes(r) &&\n                      (i.includes(a) || o.includes(a))) ||\n                    h === n.id\n                  ) {\n                    if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                    for (d = r.getModel(); !r.isVisible(); ) {\n                      if (\n                        !(r = e.findById(d.comboId || d.parentId)) ||\n                        (!d.parentId && !d.comboId)\n                      )\n                        return;\n                      d = r.getModel();\n                    }\n                    s = d.id;\n                    for (l = a.getModel(); !a.isVisible(); ) {\n                      if (\n                        !(a = e.findById(l.comboId || l.parentId)) ||\n                        (!l.parentId && !l.comboId)\n                      )\n                        return;\n                      if (l.comboId === n.id || l.parentId === n.id) break;\n                      l = a.getModel();\n                    }\n                    if (((h = l.id), s)) {\n                      var p;\n                      if (u[(p = s + \"-\" + h)])\n                        return (\n                          (u[p] += t.getModel().size || 1),\n                          void e.updateItem(c[p], { size: u[p] }, !1)\n                        );\n                      f = e.addItem(\n                        \"vedge\",\n                        { target: h, source: s, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[p] = t.getModel().size || 1), (c[p] = f);\n                    }\n                  } else\n                    (i.includes(r) || o.includes(r)) &&\n                      (i.includes(a) || o.includes(a)) &&\n                      r.isVisible() &&\n                      a.isVisible() &&\n                      t.show();\n                }\n              }),\n                this.emit(\"aftercollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n            }\n          }),\n          (e.prototype.collapseExpandCombo = function (t) {\n            if (\n              (Object(gt.x)(t) && (t = this.findById(t)),\n              t && (!t.getType || \"combo\" === t.getType()))\n            ) {\n              for (var e = t.getModel(), n = this.findById(e.parentId); n; ) {\n                var r = n.getModel();\n                if (r.collapsed)\n                  return (\n                    console.warn(\n                      \"Fail to expand the combo since it's ancestor combo is collapsed.\",\n                    ),\n                    void (n = void 0)\n                  );\n                n = this.findById(r.parentId);\n              }\n              e.collapsed ? this.expandCombo(t) : this.collapseCombo(t),\n                this.updateCombo(t);\n            }\n          }),\n          (e.prototype.sortCombos = function () {\n            var t = this;\n            if (!this.get(\"comboSorted\")) {\n              this.set(\"comboSorted\", !0);\n              var e = [],\n                n = {};\n              (this.get(\"comboTrees\") || []).forEach(function (t) {\n                br(t, function (t) {\n                  return (\n                    e[t.depth] ? e[t.depth].push(t.id) : (e[t.depth] = [t.id]),\n                    (n[t.id] = t.depth),\n                    !0\n                  );\n                });\n              }),\n                (this.getEdges().concat(this.get(\"vedges\")) || []).forEach(\n                  function (t) {\n                    var r = t.getModel(),\n                      i = n[r.source] || 0,\n                      o = n[r.target] || 0,\n                      a = Math.max(i, o);\n                    e[a] ? e[a].push(r.id) : (e[a] = [r.id]);\n                  },\n                ),\n                e.forEach(function (e) {\n                  if (e && e.length)\n                    for (var n = e.length - 1; n >= 0; n--) {\n                      var r = t.findById(e[n]);\n                      r && r.toFront();\n                    }\n                });\n            }\n          }),\n          (e.prototype.getNeighbors = function (t, e) {\n            var n = t;\n            return Object(gt.x)(t) && (n = this.findById(t)), n.getNeighbors(e);\n          }),\n          (e.prototype.getNodeDegree = function (t, e, n) {\n            void 0 === e && (e = void 0), void 0 === n && (n = !1);\n            var r = t;\n            Object(gt.x)(t) && (r = this.findById(t));\n            var i = this.get(\"degrees\");\n            (i && !n) || ((i = fn(this.save())), this.set(\"degrees\", i));\n            var o = i[r.getID()],\n              a = 0;\n            if (!o) return 0;\n            switch (e) {\n              case \"in\":\n                a = o.inDegree;\n                break;\n              case \"out\":\n                a = o.outDegree;\n                break;\n              case \"all\":\n                a = o;\n                break;\n              default:\n                a = o.degree;\n            }\n            return a;\n          }),\n          (e.prototype.getUndoStack = function () {\n            return this.undoStack;\n          }),\n          (e.prototype.getRedoStack = function () {\n            return this.redoStack;\n          }),\n          (e.prototype.getStackData = function () {\n            return this.get(\"enabledStack\")\n              ? {\n                  undoStack: this.undoStack.toArray(),\n                  redoStack: this.redoStack.toArray(),\n                }\n              : null;\n          }),\n          (e.prototype.clearStack = function () {\n            this.get(\"enabledStack\") &&\n              (this.undoStack.clear(), this.redoStack.clear());\n          }),\n          (e.prototype.pushStack = function (t, e, n) {\n            if (\n              (void 0 === t && (t = \"update\"),\n              void 0 === n && (n = \"undo\"),\n              this.get(\"enabledStack\"))\n            ) {\n              var r = e\n                ? Object(gt.b)(e)\n                : { before: {}, after: Object(gt.b)(this.save()) };\n              \"redo\" === n\n                ? this.redoStack.push({ action: t, data: r })\n                : this.undoStack.push({ action: t, data: r }),\n                this.emit(\"stackchange\", {\n                  undoStack: this.undoStack,\n                  redoStack: this.redoStack,\n                });\n            } else\n              console.warn(\n                \"请先启用 undo & redo 功能，在实例化 Graph 时候配置 enabledStack: true !\",\n              );\n          }),\n          (e.prototype.getAdjMatrix = function (t, e) {\n            void 0 === t && (t = !0),\n              void 0 === e && (e = this.get(\"directed\"));\n            var n = this.get(\"adjMatrix\");\n            return (\n              (n && t) || ((n = un(this.save(), e)), this.set(\"adjMatrix\", n)),\n              n\n            );\n          }),\n          (e.prototype.getShortestPathMatrix = function (t, e) {\n            void 0 === t && (t = !0),\n              void 0 === e && (e = this.get(\"directed\"));\n            var n = this.get(\"adjMatrix\"),\n              r = this.get(\"shortestPathMatrix\");\n            return (\n              (n && t) || ((n = un(this.save(), e)), this.set(\"adjMatrix\", n)),\n              (r && t) ||\n                ((r = pn(this.save(), e)), this.set(\"shortestPathMatrix\", r)),\n              r\n            );\n          }),\n          (e.prototype.on = function (e, n, r) {\n            return t.prototype.on.call(this, e, n, r);\n          }),\n          (e.prototype.destroy = function () {\n            this.clear(),\n              this.clearStack(),\n              this.get(\"itemController\").destroy(),\n              this.get(\"modeController\").destroy(),\n              this.get(\"viewController\").destroy(),\n              this.get(\"stateController\").destroy(),\n              this.get(\"canvas\").destroy(),\n              (this.cfg = null),\n              (this.destroyed = !0),\n              (this.redoStack = null),\n              (this.undoStack = null);\n          }),\n          (e.prototype.createHull = function (t) {\n            if (t.members && !(t.members.length < 1)) {\n              var e = this.get(\"hullGroup\"),\n                n = this.get(\"hullMap\");\n              if (\n                (n || ((n = {}), this.set(\"hullMap\", n)),\n                (e && !e.get(\"destroyed\")) ||\n                  ((e = this.get(\"group\").addGroup({\n                    id: \"hullGroup\",\n                  })).toBack(),\n                  this.set(\"hullGroup\", e)),\n                n[t.id])\n              )\n                return console.warn(\"Existed hull id.\"), n[t.id];\n              var r = e.addGroup({ id: t.id + \"-container\" }),\n                i = new Si(this, Object(h.a)(Object(h.a)({}, t), { group: r }));\n              return (n[i.id] = i), i;\n            }\n            console.warn(\"Create hull failed! The members is empty.\");\n          }),\n          (e.prototype.getHulls = function () {\n            return this.get(\"hullMap\");\n          }),\n          (e.prototype.getHullById = function (t) {\n            return this.get(\"hullMap\")[t];\n          }),\n          (e.prototype.removeHull = function (t) {\n            var e;\n            (e = Object(gt.x)(t) ? this.getHullById(t) : t),\n              delete this.get(\"hullMap\")[e.id],\n              e.destroy();\n          }),\n          (e.prototype.removeHulls = function () {\n            var t = this.getHulls();\n            t &&\n              Object.keys(t).length &&\n              (Object.keys(t).forEach(function (e) {\n                t[e].destroy();\n              }),\n              this.set(\"hullMap\", {}));\n          }),\n          (e.prototype.onTick = function (t) {\n            this.get(\"layoutController\").onTick(t), an(this.onTick.bind(this));\n          });\n      })(nn.a);\n      function ji(t) {\n        return (ji =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var ki = sn.a.transform,\n        Ei = [\"startArrow\", \"endArrow\"],\n        Ni = {\n          lineWidth: 1,\n          stroke: void 0,\n          fill: void 0,\n          lineAppendWidth: 1,\n          opacity: void 0,\n          strokeOpacity: void 0,\n          fillOpacity: void 0,\n          x: 0,\n          y: 0,\n          r: 10,\n          width: 20,\n          height: 20,\n          shadowColor: void 0,\n          shadowBlur: 0,\n          shadowOffsetX: 0,\n          shadowOffsetY: 0,\n        },\n        Ti = {\n          edge: {\n            lineWidth: 1,\n            stroke: \"#000\",\n            lineDash: void 0,\n            startArrow: !1,\n            endArrow: !1,\n            opacity: void 0,\n            strokeOpacity: void 0,\n            fillOpacity: void 0,\n            shadowColor: void 0,\n            shadowBlur: 0,\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n          },\n          node: Ni,\n          combo: Ni,\n        },\n        Pi = {\n          options: {},\n          itemType: \"\",\n          type: \"\",\n          getCustomConfig: function (t) {\n            return {};\n          },\n          getOptions: function (t) {\n            return Object(gt.d)(\n              {\n                labelCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n                descriptionCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n              },\n              this.options,\n              this.getCustomConfig(t) || {},\n              t,\n            );\n          },\n          draw: function (t, e) {\n            var n = this.drawShape(t, e);\n            (n.set(\"className\", this.itemType + \"-shape\"), t.label) &&\n              this.drawLabel(t, e).set(\"className\", this.itemType + \"-label\");\n            return n;\n          },\n          afterDraw: function (t, e, n) {},\n          drawShape: function (t, e) {\n            return null;\n          },\n          drawLabel: function (t, e) {\n            var n = this.getOptions(t).labelCfg || {},\n              r = this.getLabelStyle(t, n, e),\n              i = r.rotate;\n            delete r.rotate;\n            var o = e.addShape(\"text\", {\n              attrs: r,\n              draggable: !0,\n              className: \"text-shape\",\n              name: \"text-shape\",\n            });\n            if (i) {\n              var a = o.getBBox(),\n                s = o.getMatrix();\n              if ((s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]), r.rotateCenter))\n                switch (r.rotateCenter) {\n                  case \"center\":\n                    s = ki(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                    break;\n                  case \"lefttop\":\n                    s = ki(s, [\n                      [\"t\", -r.x, -r.y],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y],\n                    ]);\n                    break;\n                  case \"leftcenter\":\n                    s = ki(s, [\n                      [\"t\", -r.x, -r.y - a.height / 2],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y + a.height / 2],\n                    ]);\n                    break;\n                  default:\n                    s = ki(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                }\n              else\n                s = ki(s, [\n                  [\"t\", -r.x, -r.y - a.height / 2],\n                  [\"r\", i],\n                  [\"t\", r.x, r.y + a.height / 2],\n                ]);\n              o.setMatrix(s);\n            }\n            if (r.background) {\n              var u = this.drawLabelBg(t, e, o),\n                c = this.itemType + \"-label-bg\";\n              u.set(\"classname\", c), o.toFront();\n            }\n            return o;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(gt.C)({}, r, t.labelCfg),\n              o = this.getLabelBgStyleByPosition(n, t, i, e);\n            return e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: o });\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            return { text: t.label };\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            return {};\n          },\n          getLabelStyle: function (t, e, n) {\n            var r = this.getLabelStyleByPosition(t, e, n),\n              i = this.itemType + \"Label\",\n              o = ur[i] ? ur[i].style : null;\n            return Object(h.a)(Object(h.a)(Object(h.a)({}, o), r), e.style);\n          },\n          getShapeStyle: function (t) {\n            return t.style;\n          },\n          update: function (t, e) {\n            this.updateShapeStyle(t, e), this.updateLabel(t, e);\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = e.getKeyShape(),\n              i = Object(gt.C)({}, r.attr(), t.style),\n              o = function (t) {\n                var e,\n                  o = i[t];\n                if (Object(gt.w)(o)) {\n                  var a = n.find(function (e) {\n                    return e.get(\"name\") === t;\n                  });\n                  a && a.attr(o);\n                } else r.attr((((e = {})[t] = o), e));\n              };\n            for (var a in i) o(a);\n          },\n          updateLabel: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getOptions({}).labelCfg,\n              i = this.itemType + \"-label\",\n              o = n.find(function (t) {\n                return t.get(\"className\") === i;\n              }),\n              a = this.itemType + \"-label-bg\",\n              s = n.find(function (t) {\n                return t.get(\"classname\") === a;\n              });\n            if (t.label || \"\" === t.label)\n              if (o) {\n                var u = {};\n                e.getModel && (u = e.getModel().labelCfg);\n                var c = Object(gt.d)({}, r, u, t.labelCfg),\n                  l = this.getLabelStyleByPosition(t, c, n),\n                  d = t.labelCfg ? t.labelCfg.style : void 0,\n                  f = c.style && c.style.background,\n                  p = Object(h.a)(Object(h.a)(Object(h.a)({}, o.attr()), l), d),\n                  g = p.rotate;\n                if ((delete p.rotate, g)) {\n                  var y = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                  (y = ki(y, [\n                    [\"t\", -p.x, -p.y],\n                    [\"r\", g],\n                    [\"t\", p.x, p.y],\n                  ])),\n                    o.resetMatrix(),\n                    o.attr(Object(h.a)(Object(h.a)({}, p), { matrix: y }));\n                } else o.resetMatrix(), o.attr(p);\n                if (s)\n                  if (p.background) {\n                    var v = this.getLabelBgStyleByPosition(o, t, c, n),\n                      m = Object(h.a)(Object(h.a)({}, v), f);\n                    if ((s.resetMatrix(), g)) {\n                      var b = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                      (b = ki(b, [\n                        [\"t\", -m.x, -m.y],\n                        [\"r\", g],\n                        [\"t\", m.x, m.y],\n                      ])),\n                        (m.matrix = b);\n                    }\n                    s.attr(m);\n                  } else n.removeChild(s);\n                else\n                  p.background &&\n                    ((s = this.drawLabelBg(t, n, o)).set(\"classname\", a),\n                    o.toFront());\n              } else {\n                this.drawLabel(t, n).set(\"className\", i);\n              }\n          },\n          afterUpdate: function (t, e) {},\n          setState: function (t, e, n) {\n            var r,\n              i,\n              o = n.get(\"keyShape\");\n            if (o && !o.destroyed) {\n              var a = n.getType(),\n                s = Object(gt.n)(e) ? t : t + \":\" + e,\n                u = this.getStateStyle(s, n),\n                c = n.getStateStyle(s);\n              if (c || u) {\n                var h = Object(gt.C)({}, c || u),\n                  l = n.getContainer(),\n                  d = { x: 1, y: 1, cx: 1, cy: 1 };\n                if (\n                  (\"combo\" === a && ((d.r = 1), (d.width = 1), (d.height = 1)),\n                  e)\n                ) {\n                  var f = function (t) {\n                    var e,\n                      n = h[t];\n                    if (Object(gt.w)(n) && !Ei.includes(t)) {\n                      var r = l.find(function (e) {\n                        return e.get(\"name\") === t;\n                      });\n                      r && r.attr(n);\n                    } else o.attr((((e = {})[t] = n), e));\n                  };\n                  for (var p in h) f(p);\n                } else {\n                  var g = kr(n.getCurrentStatesStyle()),\n                    y = n.getModel(),\n                    v = Object(gt.C)({}, y.style, kr(n.getOriginStyle())),\n                    m = o.get(\"name\"),\n                    b = o.attr(),\n                    x = {};\n                  Object.keys(b).forEach(function (t) {\n                    if (\"img\" !== t) {\n                      var e = b[t];\n                      e && \"object\" === ji(e)\n                        ? (x[t] = Object(gt.b)(e))\n                        : (x[t] = e);\n                    }\n                  });\n                  var w = {},\n                    O = function (t) {\n                      var e = h[t];\n                      if (Object(gt.w)(e) && !Ei.includes(t)) {\n                        var n = l.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        if (n) {\n                          var r = Object(gt.b)(n.attr());\n                          Object(gt.e)(e, function (e, i) {\n                            if (t === m && x[i] && !d[i]) {\n                              delete x[i];\n                              var s = v[t][i] || Ti[a][i];\n                              o.attr(i, s);\n                            } else if (r[i] || 0 === r[i]) {\n                              delete r[i];\n                              var u = v[t][i] || Ti[a][i];\n                              n.attr(i, u);\n                            }\n                          }),\n                            (w[t] = r);\n                        }\n                      } else if (x[t] && !d[t]) {\n                        delete x[t];\n                        var i = v[t] || (v[m] ? v[m][t] : void 0) || Ti[a][t];\n                        o.attr(t, i);\n                      }\n                    };\n                  for (var M in h) O(M);\n                  for (var p in (m ? (w[m] = x) : Object(gt.C)(w, x), g))\n                    if (!d[p]) {\n                      var S = g[p];\n                      (Object(gt.w)(S) && !Ei.includes(p)) ||\n                        (m\n                          ? (Object(gt.C)(v[m], (((i = {})[p] = S), i)),\n                            delete v[p])\n                          : Object(gt.C)(v, (((r = {})[p] = S), r)),\n                        delete g[p]);\n                    }\n                  var C = {};\n                  Object(gt.d)(C, v, w, g);\n                  var j = !1,\n                    k = function (t) {\n                      var e,\n                        n,\n                        r = C[t];\n                      if (Object(gt.w)(r) && !Ei.includes(t)) {\n                        var i = l.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        i &&\n                          (t === m &&\n                            (\"combo\" === a &&\n                              (delete r.r, delete r.width, delete r.height),\n                            (j = !0)),\n                          i.attr(r));\n                      } else if (!j) {\n                        var s = r || Ti[a][t];\n                        \"combo\" === a\n                          ? m || o.attr((((e = {})[t] = s), e))\n                          : o.attr((((n = {})[t] = s), n));\n                      }\n                    };\n                  for (var E in C) k(E);\n                }\n              }\n            }\n          },\n          getStateStyle: function (t, e) {\n            var n = e.getModel(),\n              r = e.getType(),\n              i = this.getOptions(n),\n              o = i.stateStyles,\n              a = i.style,\n              s = void 0 === a ? {} : a,\n              u = n.stateStyles ? n.stateStyles[t] : o && o[t];\n            return \"combo\" === r ? Object(gt.b)(u) : Object(gt.C)({}, s, u);\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            return this.getOptions(t).anchorPoints;\n          },\n        },\n        Ii = {\n          itemType: \"node\",\n          shapeType: \"single-node\",\n          labelPosition: \"center\",\n          offset: ur.nodeLabel.offset,\n          getSize: function (t) {\n            var e = t.size || this.getOptions({}).size || ur.defaultNode.size;\n            return (\n              Object(gt.m)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(gt.m)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition;\n            if (\"center\" === n) return { x: 0, y: 0, text: t.label };\n            var r = e.offset;\n            Object(gt.s)(r) && (r = this.offset);\n            var i,\n              o = this.getSize(t),\n              a = o[0],\n              s = o[1];\n            switch (n) {\n              case \"top\":\n                i = { x: 0, y: 0 - s / 2 - r, textBaseline: \"bottom\" };\n                break;\n              case \"bottom\":\n                i = { x: 0, y: s / 2 + r, textBaseline: \"top\" };\n                break;\n              case \"left\":\n                i = { x: 0 - a / 2 - r, y: 0, textAlign: \"right\" };\n                break;\n              default:\n                i = { x: a / 2 + r, y: 0, textAlign: \"left\" };\n            }\n            return (i.text = t.label), i;\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = Br(o.padding),\n              u = i.width + s[1] + s[3],\n              c = i.height + s[0] + s[2],\n              l = n.offset;\n            return (\n              Object(gt.s)(l) && (l = this.offset),\n              (a = { x: i.minX - s[3], y: i.minY - s[0] }),\n              (a = Object(h.a)(Object(h.a)(Object(h.a)({}, a), o), {\n                width: u,\n                height: c,\n              }))\n            );\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"node-shape\",\n            });\n          },\n          updateLinkPoints: function (t, e) {\n            var n,\n              r = this.getOptions(t).linkPoints,\n              i = e.find(function (t) {\n                return \"link-point-left\" === t.get(\"className\");\n              }),\n              o = e.find(function (t) {\n                return \"link-point-right\" === t.get(\"className\");\n              }),\n              a = e.find(function (t) {\n                return \"link-point-top\" === t.get(\"className\");\n              }),\n              s = e.find(function (t) {\n                return \"link-point-bottom\" === t.get(\"className\");\n              });\n            i && (n = i.attr()),\n              o && !n && (n = o.attr()),\n              a && !n && (n = a.attr()),\n              s && !n && (n = s.attr()),\n              n || (n = r);\n            var u = Object(gt.C)({}, n, t.linkPoints),\n              c = u.fill,\n              l = u.stroke,\n              d = u.lineWidth,\n              f = u.size / 2;\n            f || (f = u.r);\n            var p = t.linkPoints\n                ? t.linkPoints\n                : { left: void 0, right: void 0, top: void 0, bottom: void 0 },\n              g = p.left,\n              y = p.right,\n              v = p.top,\n              m = p.bottom,\n              b = this.getSize(t),\n              x = b[0],\n              w = b[1],\n              O = { r: f, fill: c, stroke: l, lineWidth: d };\n            i\n              ? g || void 0 === g\n                ? i.attr(Object(h.a)(Object(h.a)({}, O), { x: -x / 2, y: 0 }))\n                : i.remove()\n              : g &&\n                e.addShape(\"circle\", {\n                  attrs: Object(h.a)(Object(h.a)({}, O), { x: -x / 2, y: 0 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n              o\n                ? (y || void 0 === y || o.remove(),\n                  o.attr(Object(h.a)(Object(h.a)({}, O), { x: x / 2, y: 0 })))\n                : y &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(h.a)(Object(h.a)({}, O), { x: x / 2, y: 0 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n              a\n                ? (v || void 0 === v || a.remove(),\n                  a.attr(Object(h.a)(Object(h.a)({}, O), { x: 0, y: -w / 2 })))\n                : v &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(h.a)(Object(h.a)({}, O), { x: 0, y: -w / 2 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n              s\n                ? m || void 0 === m\n                  ? s.attr(Object(h.a)(Object(h.a)({}, O), { x: 0, y: w / 2 }))\n                  : s.remove()\n                : m &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(h.a)(Object(h.a)({}, O), { x: 0, y: w / 2 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n          },\n          updateShape: function (t, e, n, r) {\n            e.get(\"keyShape\").attr(Object(h.a)({}, n)),\n              this.updateLabel(t, e),\n              r && this.updateIcon(t, e);\n          },\n          updateIcon: function (t, e) {\n            var n = this,\n              r = e.getContainer(),\n              i = this.getOptions(t).icon,\n              o = (t.icon ? t.icon : { show: void 0 }).show,\n              a = r.find(function (t) {\n                return t.get(\"className\") === n.type + \"-icon\";\n              });\n            if (a)\n              if (o || void 0 === o) {\n                var s = Object(gt.C)({}, a.attr(), i),\n                  u = s.width,\n                  c = s.height;\n                a.attr(\n                  Object(h.a)(Object(h.a)({}, s), { x: -u / 2, y: -c / 2 }),\n                );\n              } else a.remove();\n            else if (o) {\n              (u = i.width), (c = i.height);\n              r.addShape(\"image\", {\n                attrs: Object(h.a)(Object(h.a)({}, i), {\n                  x: -u / 2,\n                  y: -c / 2,\n                }),\n                className: this.type + \"-icon\",\n                name: this.type + \"-icon\",\n              });\n              var l = r.find(function (t) {\n                return \"node-label\" === t.get(\"className\");\n              });\n              l && l.toFront();\n            }\n          },\n        },\n        Bi = Object(h.a)(Object(h.a)({}, Pi), Ii);\n      Zr.registerNode(\"single-node\", Bi);\n      var Ai = {\n          itemType: \"edge\",\n          labelPosition: \"center\",\n          refX: 0,\n          refY: 0,\n          labelAutoRotate: !1,\n          options: {\n            size: ur.defaultEdge.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: ur.defaultEdge.style.stroke,\n              lineAppendWidth: ur.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: ur.edgeLabel.style.fill,\n                fontSize: ur.edgeLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(h.a)({}, ur.edgeStateStyles),\n          },\n          getPath: function (t) {\n            var e = [];\n            return (\n              Object(gt.e)(t, function (t, n) {\n                0 === n ? e.push([\"M\", t.x, t.y]) : e.push([\"L\", t.x, t.y]);\n              }),\n              e\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(gt.C)({}, e, n, t.style),\n              i = t.size || ur.defaultEdge.size,\n              o = (t = this.getPathPoints(t)).startPoint,\n              a = t.endPoint,\n              s = this.getControlPoints(t),\n              u = [o];\n            s && (u = u.concat(s)), u.push(a);\n            var c = this.getPath(u);\n            return Object(gt.C)(\n              {},\n              ur.defaultEdge.style,\n              { stroke: ur.defaultEdge.color, lineWidth: i, path: c },\n              r,\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = { stroke: t.color },\n              i =\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                }) || e.getKeyShape(),\n              o = t.size,\n              a = (t = this.getPathPoints(t)).startPoint,\n              s = t.endPoint,\n              u = this.getControlPoints(t),\n              c = [a];\n            u && (c = c.concat(u)), c.push(s);\n            var h = i.attr(),\n              l = Object(gt.C)({}, r, h, t.style),\n              d = t.sourceNode,\n              f = t.targetNode,\n              p = { radius: l.radius };\n            u ||\n              (p = {\n                source: d,\n                target: f,\n                offset: l.offset,\n                radius: l.radius,\n              }),\n              h.endArrow &&\n                !1 === l.endArrow &&\n                (t.style.endArrow = { path: \"\" }),\n              h.startArrow &&\n                !1 === l.startArrow &&\n                (t.style.startArrow = { path: \"\" });\n            var g = this.getPath(c, p),\n              y = Object(gt.C)(r, i.attr(), { lineWidth: o, path: g }, t.style);\n            i && i.attr(y);\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            var r,\n              i = e.position || this.labelPosition,\n              o = {},\n              a =\n                n &&\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            r = \"start\" === i ? 0 : \"end\" === i ? 1 : 0.5;\n            var s,\n              u = e.refX || this.refX,\n              c = e.refY || this.refY;\n            if (\n              t.startPoint.x === t.endPoint.x &&\n              t.startPoint.y === t.endPoint.y\n            )\n              return (\n                (o.x = t.startPoint.x + u),\n                (o.y = t.startPoint.y + c),\n                (o.text = t.label),\n                o\n              );\n            s = Object(gt.s)(e.autoRotate)\n              ? this.labelAutoRotate\n              : e.autoRotate;\n            var h = vr(a, r, u, c, s);\n            return (\n              (o.x = h.x),\n              (o.y = h.y),\n              (o.rotate = h.rotate),\n              (o.textAlign = this._getTextAlign(i, h.angle)),\n              (o.text = t.label),\n              o\n            );\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = o.padding,\n              u = i.width + s[1] + s[3],\n              c = i.height + s[0] + s[2],\n              l = n.position || this.labelPosition,\n              d = Object(h.a)(Object(h.a)({}, o), {\n                width: u,\n                height: c,\n                x: i.minX - s[2],\n                y: i.minY - s[0],\n                rotate: 0,\n              });\n            a = Object(gt.s)(n.autoRotate)\n              ? this.labelAutoRotate\n              : n.autoRotate;\n            var f,\n              p =\n                r &&\n                r.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            f = \"start\" === l ? 0 : \"end\" === l ? 1 : 0.5;\n            var g = n.refX || this.refX,\n              y = n.refY || this.refY;\n            if (\n              e.startPoint.x === e.endPoint.x &&\n              e.startPoint.y === e.endPoint.y\n            )\n              return (\n                (d.x = e.startPoint.x + g - u / 2),\n                (d.y = e.startPoint.y + y - c / 2),\n                d\n              );\n            var v = vr(p, f, g - u / 2, y + c / 2, a),\n              m = v.angle;\n            return (\n              m > 0.5 * Math.PI &&\n                m < 1.5 * Math.PI &&\n                (v = vr(p, f, g + u / 2, y + c / 2, a)),\n              a && ((d.x = v.x), (d.y = v.y)),\n              (d.rotate = v.rotate),\n              d\n            );\n          },\n          _getTextAlign: function (t, e) {\n            var n = \"center\";\n            return e\n              ? ((e %= 2 * Math.PI),\n                \"center\" !== t &&\n                  (n =\n                    (e >= 0 && e <= Math.PI / 2) ||\n                    (e >= 1.5 * Math.PI && e < 2 * Math.PI)\n                      ? t\n                      : (function (t) {\n                          var e = t;\n                          return (\n                            \"start\" === t\n                              ? (e = \"end\")\n                              : \"end\" === t && (e = \"start\"),\n                            e\n                          );\n                        })(t)),\n                n)\n              : t;\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getPathPoints: function (t) {\n            return t;\n          },\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return e.addShape(\"path\", {\n              className: \"edge-shape\",\n              name: \"edge-shape\",\n              attrs: n,\n            });\n          },\n          drawLabel: function (t, e) {\n            var n,\n              r = this.options.labelCfg;\n            n =\n              (\"undefined\" != typeof window &&\n                void 0 !== window.getComputedStyle &&\n                window\n                  .getComputedStyle(document.body, null)\n                  .getPropertyValue(\"font-family\")) ||\n              \"Arial, sans-serif\";\n            var i = Object(gt.d)({ fontFamily: n }, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e),\n              a = o.rotate;\n            delete o.rotate;\n            var s = e.addShape(\"text\", { attrs: o, name: \"text-shape\" });\n            if ((a && s.rotateAtStart(a), o.background)) {\n              var u = this.drawLabelBg(t, e, s),\n                c = this.itemType + \"-label-bg\";\n              u.set(\"classname\", c), s.toFront();\n            }\n            return s;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(gt.d)({}, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e).rotate,\n              a = this.getLabelBgStyleByPosition(n, t, i, e);\n            delete a.rotate;\n            var s = e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: a });\n            return o && s.rotateAtStart(o), s;\n          },\n        },\n        Li = Object(h.a)(Object(h.a)({}, Pi), Ai);\n      Zr.registerEdge(\"single-edge\", Li),\n        Zr.registerEdge(\n          \"line\",\n          { getControlPoints: function () {} },\n          \"single-edge\",\n        ),\n        Zr.registerEdge(\n          \"spline\",\n          {\n            getPath: function (t) {\n              return oi(t);\n            },\n          },\n          \"single-edge\",\n        ),\n        Zr.registerEdge(\n          \"arc\",\n          {\n            curveOffset: 20,\n            clockwise: 1,\n            getControlPoints: function (t) {\n              var e,\n                n,\n                r = t.startPoint,\n                i = t.endPoint,\n                o = (r.x + i.x) / 2,\n                a = (r.y + i.y) / 2;\n              if (void 0 !== t.controlPoints) {\n                if (\n                  ((n = t.controlPoints[0]),\n                  (e = In(r, n, i)),\n                  r.x <= i.x && r.y > i.y\n                    ? (this.clockwise = e.x > n.x ? 0 : 1)\n                    : r.x <= i.x && r.y < i.y\n                    ? (this.clockwise = e.x > n.x ? 1 : 0)\n                    : r.x > i.x && r.y <= i.y\n                    ? (this.clockwise = e.y < n.y ? 0 : 1)\n                    : (this.clockwise = e.y < n.y ? 1 : 0),\n                  (n.x - r.x) / (n.y - r.y) == (i.x - r.x) / (i.y - r.y))\n                )\n                  return [];\n              } else {\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  Object(gt.m)(t.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  t.curveOffset < 0\n                    ? (this.clockwise = 0)\n                    : (this.clockwise = 1);\n                var s = { x: i.x - r.x, y: i.y - r.y },\n                  u = Math.atan2(s.y, s.x);\n                (n = {\n                  x: t.curveOffset * Math.cos(-Math.PI / 2 + u) + o,\n                  y: t.curveOffset * Math.sin(-Math.PI / 2 + u) + a,\n                }),\n                  (e = In(r, n, i));\n              }\n              var c = Bn(r, e);\n              return [{ x: c, y: c }];\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                2 === t.length\n                  ? e.push([\"L\", t[1].x, t[1].y])\n                  : e.push([\n                      \"A\",\n                      t[1].x,\n                      t[1].y,\n                      0,\n                      0,\n                      this.clockwise,\n                      t[2].x,\n                      t[2].y,\n                    ]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Zr.registerEdge(\n          \"quadratic\",\n          {\n            curvePosition: 0.5,\n            curveOffset: -20,\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (!e || !e.length) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  void 0 === t.curvePosition &&\n                    (t.curvePosition = this.curvePosition),\n                  Object(gt.m)(this.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  Object(gt.m)(this.curvePosition) &&\n                    (t.curvePosition = t.curveOffset[0]),\n                  (e = [ai(n, r, t.curvePosition, t.curveOffset)]);\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"Q\", t[1].x, t[1].y, t[2].x, t[2].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Zr.registerEdge(\n          \"cubic\",\n          {\n            curvePosition: [0.5, 0.5],\n            curveOffset: [-20, 20],\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (\n                (void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.curvePosition &&\n                  (t.curvePosition = this.curvePosition),\n                Object(gt.t)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(gt.t)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]),\n                !e || !e.length || e.length < 2)\n              ) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                e = [\n                  ai(n, r, t.curvePosition[0], t.curveOffset[0]),\n                  ai(n, r, t.curvePosition[1], t.curveOffset[1]),\n                ];\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"C\", t[1].x, t[1].y, t[2].x, t[2].y, t[3].x, t[3].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Zr.registerEdge(\n          \"cubic-vertical\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(gt.t)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(gt.t)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(gt.t)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.y - e.y,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x, y: e.y + r * this.curvePosition[0] + i[0] },\n                  { x: n.x, y: n.y - r * this.curvePosition[1] + i[1] },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Zr.registerEdge(\n          \"cubic-horizontal\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(gt.t)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(gt.t)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(gt.t)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.x - e.x,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x + r * this.curvePosition[0] + i[0], y: e.y },\n                  { x: n.x - r * this.curvePosition[1] + i[1], y: n.y },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Zr.registerEdge(\n          \"loop\",\n          {\n            getPathPoints: function (t) {\n              return yr(t);\n            },\n            getControlPoints: function (t) {\n              return t.controlPoints;\n            },\n            afterDraw: function (t) {\n              t.controlPoints = void 0;\n            },\n            afterUpdate: function (t) {\n              t.controlPoints = void 0;\n            },\n          },\n          \"cubic\",\n        );\n      var Di = {\n          itemType: \"combo\",\n          shapeType: \"single-combo\",\n          labelPosition: \"top\",\n          refX: ur.comboLabel.refX,\n          refY: ur.comboLabel.refY,\n          options: {\n            style: {\n              stroke: ur.defaultCombo.style.stroke,\n              fill: ur.defaultCombo.style.fill,\n              lineWidth: ur.defaultCombo.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: ur.comboLabel.style.fill,\n                fontSize: ur.comboLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(h.a)({}, ur.comboStateStyles),\n          },\n          getSize: function (t) {\n            var e = Object(gt.b)(\n              t.size || this.options.size || ur.defaultCombo.size,\n            );\n            return (\n              Object(gt.m)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(gt.m)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition,\n              r = t.style,\n              i = t.padding || this.options.padding;\n            Object(gt.m)(i) && (i = i[0]);\n            var o = e.refX,\n              a = e.refY;\n            Object(gt.s)(o) && (o = this.refX),\n              Object(gt.s)(a) && (a = this.refY);\n            var s,\n              u = this.getSize(t),\n              c = (Math.max(r.r, u[0] / 2) || u[0] / 2) + i;\n            switch (n) {\n              case \"top\":\n                s = {\n                  x: 0,\n                  y: -c - a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"bottom\":\n                s = {\n                  x: 0,\n                  y: c + a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"left\":\n                s = { x: -c + o, y: 0, textAlign: \"left\" };\n                break;\n              case \"center\":\n                s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                break;\n              default:\n                s = { x: c + o, y: 0, textAlign: \"right\" };\n            }\n            return (s.text = t.label), s;\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"combo-shape\",\n            });\n          },\n          updateShape: function (t, e, n) {\n            var r = e.get(\"keyShape\");\n            (void 0 === t.animate ? this.options.animate : t.animate) &&\n            r.animate\n              ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n              : r.attr(Object(h.a)({}, n)),\n              this.updateLabel(t, e);\n          },\n        },\n        _i = Object(h.a)(Object(h.a)({}, Pi), Di);\n      Zr.registerCombo(\"single-combo\", _i),\n        Zr.registerCombo(\n          \"circle\",\n          {\n            options: {\n              size: [ur.defaultCombo.size[0], ur.defaultCombo.size[0]],\n              padding: ur.defaultCombo.padding[0],\n              animate: !0,\n              style: {\n                stroke: ur.defaultCombo.style.stroke,\n                fill: ur.defaultCombo.style.fill,\n                lineWidth: ur.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: ur.comboLabel.style.fill,\n                  fontSize: ur.comboLabel.style.fontSize,\n                },\n                refX: 0,\n                refY: 0,\n              },\n              stateStyles: Object(h.a)({}, ur.comboStateStyles),\n            },\n            shapeType: \"circle\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return (\n                delete n.height,\n                delete n.width,\n                e.addShape(\"circle\", {\n                  attrs: n,\n                  className: \"circle-combo\",\n                  name: \"circle-combo\",\n                  draggable: !0,\n                })\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(gt.m)(n) && (n = n[0]);\n              var r,\n                i = { stroke: t.color },\n                o = Object(gt.C)({}, e, i, t.style);\n              if (t.fixSize)\n                r = Object(gt.t)(t.fixSize) ? t.fixSize : t.fixSize[0];\n              else {\n                var a = this.getSize(t);\n                r =\n                  !Object(gt.t)(o.r) || isNaN(o.r)\n                    ? a[0] / 2 || ur.defaultCombo.style.r\n                    : Math.max(o.r, a[0] / 2) || a[0] / 2;\n              }\n              o.r = r + n;\n              var s = Object(h.a)({ x: 0, y: 0 }, o);\n              return t.style ? (t.style.r = r) : (t.style = { r: r }), s;\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(gt.m)(r) && (r = r[0]);\n              var i,\n                o = Object(gt.b)(t.style);\n              (i = t.fixSize\n                ? Object(gt.t)(t.fixSize)\n                  ? t.fixSize\n                  : t.fixSize[0]\n                : Math.max(o.r, n[0] / 2) || n[0] / 2),\n                (o.r = i + r);\n              var a = e.get(\"sizeCache\");\n              a && (a.r = o.r);\n              var s = { stroke: t.color },\n                u = e.get(\"keyShape\"),\n                c = Object(gt.C)({}, u.attr(), s, o);\n              t.style ? (t.style.r = i) : (t.style = { r: i }),\n                this.updateShape(t, e, c, !0);\n            },\n          },\n          \"single-combo\",\n        ),\n        Zr.registerCombo(\n          \"rect\",\n          {\n            options: {\n              size: [40, 5],\n              padding: [25, 20, 15, 20],\n              animate: !0,\n              style: {\n                radius: 0,\n                stroke: ur.defaultCombo.style.stroke,\n                fill: ur.defaultCombo.style.fill,\n                lineWidth: ur.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: ur.comboLabel.style.fill,\n                  fontSize: ur.comboLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(h.a)({}, ur.comboStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"rect-combo\",\n                name: \"rect-combo\",\n                draggable: !0,\n              });\n            },\n            getLabelStyleByPosition: function (t, e) {\n              var n = e.position || this.labelPosition,\n                r = t.style,\n                i = t.padding || this.options.padding;\n              Object(gt.t)(i) && (i = [i, i, i, i]);\n              var o = e.refX,\n                a = e.refY;\n              Object(gt.s)(o) && (o = this.refX),\n                Object(gt.s)(a) && (a = this.refY);\n              var s,\n                u = r.width / 2 + i[3],\n                c = r.height / 2 + i[0];\n              switch (n) {\n                case \"top\":\n                  s = {\n                    x: 0 - u + o,\n                    y: 0 - c + a,\n                    textBaseline: \"top\",\n                    textAlign: \"left\",\n                  };\n                  break;\n                case \"bottom\":\n                  s = {\n                    x: 0,\n                    y: c + a,\n                    textBaseline: \"bottom\",\n                    textAlign: \"center\",\n                  };\n                  break;\n                case \"left\":\n                  s = { x: 0 - u + a, y: 0, textAlign: \"left\" };\n                  break;\n                case \"center\":\n                  s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                  break;\n                default:\n                  s = { x: u + o, y: 0, textAlign: \"right\" };\n              }\n              return (s.text = t.label), s;\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(gt.t)(n) && (n = [n, n, n, n]);\n              var r,\n                i,\n                o = { stroke: t.color },\n                a = Object(gt.C)({}, e, o, t.style),\n                s = this.getSize(t),\n                u =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              u\n                ? Object(gt.t)(u)\n                  ? ((r = u), (i = u))\n                  : ((r = u[0]), (i = u[1]))\n                : ((r =\n                    !Object(gt.t)(a.width) || isNaN(a.width)\n                      ? s[0] || ur.defaultCombo.style.width\n                      : Math.max(a.width, s[0]) || s[0]),\n                  (i =\n                    !Object(gt.t)(a.height) || isNaN(a.height)\n                      ? s[1] || ur.defaultCombo.style.height\n                      : Math.max(a.height, s[1]) || s[1]));\n              var c = -r / 2 - n[3],\n                l = -i / 2 - n[0];\n              (a.width = r + n[1] + n[3]), (a.height = i + n[0] + n[2]);\n              var d = Object(h.a)({ x: c, y: l }, a);\n              return (\n                t.style\n                  ? ((t.style.width = r), (t.style.height = i))\n                  : (t.style = { width: r, height: i }),\n                d\n              );\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(gt.t)(r) && (r = [r, r, r, r]);\n              var i,\n                o,\n                a = Object(gt.b)(t.style),\n                s =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              s\n                ? Object(gt.t)(s)\n                  ? ((i = s), (o = s))\n                  : ((i = s[0]), (o = s[1]))\n                : ((i = Math.max(a.width, n[0]) || n[0]),\n                  (o = Math.max(a.height, n[1]) || n[1])),\n                (a.width = i + r[1] + r[3]),\n                (a.height = o + r[0] + r[2]);\n              var u = e.get(\"sizeCache\");\n              u && ((u.width = a.width), (u.height = a.height)),\n                (a.x = -i / 2 - r[3]),\n                (a.y = -o / 2 - r[0]);\n              var c = { stroke: t.color },\n                h = e.get(\"keyShape\"),\n                l = Object(gt.C)({}, h.attr(), c, a);\n              t.style\n                ? ((t.style.width = i), (t.style.height = o))\n                : (t.style = { width: i, height: o }),\n                this.updateShape(t, e, l, !1);\n            },\n            updateShape: function (t, e, n) {\n              var r = e.get(\"keyShape\");\n              (void 0 === t.animate ? this.options.animate : t.animate) &&\n              r.animate\n                ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n                : r.attr(Object(h.a)({}, n)),\n                this.updateLabel(t, e);\n            },\n          },\n          \"single-combo\",\n        ),\n        Zr.registerNode(\n          \"simple-circle\",\n          {\n            options: {\n              size: ur.defaultNode.size,\n              style: {\n                x: 0,\n                y: 0,\n                stroke: ur.defaultNode.style.stroke,\n                fill: ur.defaultNode.style.fill,\n                lineWidth: ur.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: ur.nodeLabel.style.fill,\n                  fontSize: ur.nodeLabel.style.fontSize,\n                },\n              },\n              stateStyles: Object(h.a)({}, ur.nodeStateStyles),\n            },\n            shapeType: \"simple-circle\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"circle\", {\n                attrs: n,\n                className: this.type + \"-keyShape\",\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(gt.d)({}, e, n),\n                i = this.getSize(t)[0] / 2;\n              return Object(h.a)({ x: 0, y: 0, r: i }, r);\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = { stroke: t.color, r: n[0] / 2 },\n                i = e.get(\"keyShape\"),\n                o = Object(gt.d)({}, i.attr(), r, t.style);\n              this.updateShape(t, e, o, !0);\n            },\n          },\n          \"single-node\",\n        ),\n        Zr.registerNode(\n          \"simple-rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: ur.defaultNode.style.stroke,\n                fill: ur.defaultNode.style.fill,\n                lineWidth: ur.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: ur.nodeLabel.style.fill,\n                  fontSize: ur.nodeLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(h.a)({}, ur.nodeStateStyles),\n            },\n            shapeType: \"simple-rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: this.type + \"-keyShape\",\n                name: this.type + \"-keyShape\",\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(gt.C)({}, e, n),\n                i = this.getSize(t),\n                o = r.width || i[0],\n                a = r.height || i[1];\n              return Object(h.a)(\n                { x: -o / 2, y: -a / 2, width: o, height: a },\n                r,\n              );\n            },\n            update: function (t, e) {\n              e.getContainer();\n              var n = this.getOptions({}).style,\n                r = this.getSize(t),\n                i = e.get(\"keyShape\");\n              t.size ||\n                ((r[0] = i.attr(\"width\") || n.width),\n                (r[1] = i.attr(\"height\") || n.height));\n              var o = {\n                  stroke: t.color,\n                  x: -r[0] / 2,\n                  y: -r[1] / 2,\n                  width: r[0],\n                  height: r[1],\n                },\n                a = Object(gt.C)({}, n, i.attr(), o);\n              (a = Object(gt.C)(a, t.style)), this.updateShape(t, e, a, !1);\n            },\n          },\n          \"single-node\",\n        ),\n        Zr.registerNode(\n          \"image\",\n          {\n            options: {\n              img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ\",\n              size: 200,\n              clipCfg: {\n                show: !1,\n                type: \"circle\",\n                r: 50,\n                rx: 50,\n                ry: 35,\n                width: 50,\n                height: 35,\n                points: [\n                  [30, 12],\n                  [12, 30],\n                  [30, 48],\n                  [48, 30],\n                ],\n                path: [\n                  [\"M\", 25, 25],\n                  [\"L\", 50, 25],\n                  [\"A\", 12.5, 12.5, 0, 1, 1, 50, 50],\n                  [\"A\", 12.5, 12.5, 0, 1, 0, 50, 50],\n                  [\"L\", 25, 75],\n                  [\"Z\"],\n                ],\n                x: 0,\n                y: 0,\n              },\n            },\n            shapeType: \"image\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.shapeType,\n                r = this.getShapeStyle(t);\n              delete r.fill;\n              var i = e.addShape(n, {\n                attrs: r,\n                className: this.type + \"-keyShape\",\n                name: this.type + \"-keyShape\",\n                draggable: !0,\n              });\n              return this.drawClip(t, i), i;\n            },\n            drawClip: function (t, e) {\n              var n = this.getOptions(t).clipCfg;\n              if (n.show) {\n                var r = n.type,\n                  i = n.x,\n                  o = n.y,\n                  a = n.style;\n                if (\"circle\" === r) {\n                  var s = n.r;\n                  e.setClip({\n                    type: \"circle\",\n                    attrs: Object(h.a)({ r: s, x: i, y: o }, a),\n                  });\n                } else if (\"rect\" === r) {\n                  var u = n.width,\n                    c = n.height,\n                    l = i - u / 2,\n                    d = o - c / 2;\n                  e.setClip({\n                    type: \"rect\",\n                    attrs: Object(h.a)({ x: l, y: d, width: u, height: c }, a),\n                  });\n                } else if (\"ellipse\" === r) {\n                  var f = n.rx,\n                    p = n.ry;\n                  e.setClip({\n                    type: \"ellipse\",\n                    attrs: Object(h.a)({ x: i, y: o, rx: f, ry: p }, a),\n                  });\n                } else if (\"polygon\" === r) {\n                  var g = n.points;\n                  e.setClip({\n                    type: \"polygon\",\n                    attrs: Object(h.a)({ points: g }, a),\n                  });\n                } else if (\"path\" === r) {\n                  var y = n.path;\n                  e.setClip({\n                    type: \"path\",\n                    attrs: Object(h.a)({ path: y }, a),\n                  });\n                }\n              }\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = this.getSize(t),\n                r = this.getOptions(t).img,\n                i = n[0],\n                o = n[1];\n              return (\n                e && ((i = e.width || n[0]), (o = e.height || n[1])),\n                Object(h.a)(\n                  { x: -i / 2, y: -o / 2, width: i, height: o, img: r },\n                  e,\n                )\n              );\n            },\n            updateShapeStyle: function (t, e) {\n              var n = e.getContainer(),\n                r = this.itemType + \"-shape\",\n                i =\n                  n.find(function (t) {\n                    return t.get(\"className\") === r;\n                  }) || e.getKeyShape(),\n                o = this.getShapeStyle(t);\n              i && i.attr(o);\n            },\n          },\n          \"single-node\",\n        );\n      var Ri,\n        Yi = Zr,\n        Fi = [\n          \"#5F95FF\",\n          \"#61DDAA\",\n          \"#65789B\",\n          \"#F6BD16\",\n          \"#7262FD\",\n          \"#78D3F8\",\n          \"#9661BC\",\n          \"#F6903D\",\n          \"#008685\",\n          \"#F08BB4\",\n        ],\n        zi = sn.a.transform,\n        Xi = Object(h.a)(\n          Object(h.a)(\n            Object(h.a)(Object(h.a)(Object(h.a)(Object(h.a)({}, a), o), s), i),\n            u,\n          ),\n          { transform: zi, mat3: sn.b },\n        );\n      !(function () {\n        function t(t) {\n          (this.graph = t),\n            (this.layoutCfg = t.get(\"layout\") || {}),\n            (this.layoutType = this.getLayoutType()),\n            (this.layoutMethods = []),\n            this.initLayout();\n        }\n        (t.prototype.initLayout = function () {}),\n          (t.prototype.getLayoutType = function () {\n            return this.getLayoutCfgType(this.layoutCfg);\n          }),\n          (t.prototype.getLayoutCfgType = function (t) {\n            var e = t.type;\n            if (e) return e;\n            var n = t.pipes;\n            return Array.isArray(n)\n              ? n.map(function (t) {\n                  return (null == t ? void 0 : t.type) || \"\";\n                })\n              : null;\n          }),\n          (t.prototype.isLayoutTypeSame = function (t) {\n            var e = this.getLayoutCfgType(t);\n            return Array.isArray(this.layoutType)\n              ? this.layoutType.every(function (t, n) {\n                  return t === e[n];\n                })\n              : (null == t ? void 0 : t.type) === this.layoutType;\n          }),\n          (t.prototype.refreshLayout = function () {\n            var t = this.graph;\n            t &&\n              (t.get(\"animate\") ? t.positionsAnimate() : t.refreshPositions());\n          }),\n          (t.prototype.changeLayout = function (t) {\n            (this.layoutCfg = t), this.destoryLayoutMethods(), this.layout();\n          }),\n          (t.prototype.changeData = function () {\n            this.destoryLayoutMethods(), this.layout();\n          }),\n          (t.prototype.destoryLayoutMethods = function () {\n            var t = this.layoutMethods;\n            null == t ||\n              t.forEach(function (t) {\n                t.destroy();\n              }),\n              (this.layoutMethods = []);\n          }),\n          (t.prototype.destroyLayout = function () {\n            var t = this.graph;\n            this.destoryLayoutMethods(),\n              t.set(\"layout\", void 0),\n              (this.layoutCfg = void 0),\n              (this.layoutType = void 0),\n              (this.layoutMethods = void 0);\n          }),\n          (t.prototype.setDataFromGraph = function () {\n            for (\n              var t = [],\n                e = [],\n                n = [],\n                r = [],\n                i = [],\n                o = [],\n                a = this.graph.getNodes(),\n                s = this.graph.getEdges(),\n                u = this.graph.getCombos(),\n                c = a.length,\n                h = 0;\n              h < c;\n              h++\n            ) {\n              var l = a[h];\n              if (l && !l.destroyed) {\n                var d = l.getModel();\n                l.isVisible() ? t.push(d) : e.push(d);\n              }\n            }\n            var f = s.length;\n            for (h = 0; h < f; h++) {\n              var p = s[h];\n              if (p && !p.destroyed) {\n                d = p.getModel();\n                p.isVisible()\n                  ? d.isComboEdge\n                    ? i.push(d)\n                    : n.push(d)\n                  : r.push(d);\n              }\n            }\n            var g = u.length;\n            for (h = 0; h < g; h++) {\n              var y = u[h];\n              if (!y.destroyed) {\n                d = y.getModel();\n                y.isVisible() ? o.push(d) : r.push(d);\n              }\n            }\n            return {\n              nodes: t,\n              hiddenNodes: e,\n              edges: n,\n              hiddenEdges: r,\n              combos: o,\n              hiddenCombos: [],\n              comboEdges: i,\n            };\n          }),\n          (t.prototype.reLayoutMethod = function (t, e) {\n            var n = this;\n            return new Promise(function (r, i) {\n              var o = n.graph,\n                a = null == e ? void 0 : e.type;\n              (e.onLayoutEnd = function () {\n                o.emit(\"aftersublayout\", { type: a }), r();\n              }),\n                t.init(n.data),\n                \"force\" === a && ((t.ticking = !1), t.forceSimulation.stop()),\n                o.emit(\"beforesublayout\", { type: a }),\n                t.execute(),\n                t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n            });\n          }),\n          (t.prototype.relayout = function (t) {\n            var e = this,\n              n = this.graph,\n              r = this.layoutMethods,\n              i = this.layoutCfg;\n            if (t) {\n              this.data = this.setDataFromGraph();\n              var o = this.data.nodes;\n              if (!o) return !1;\n              this.initPositions(i.center, o);\n            }\n            n.emit(\"beforelayout\");\n            var a = Promise.resolve();\n            null == r ||\n              r.forEach(function (t, n) {\n                var r = i[n];\n                a = a.then(function () {\n                  return e.reLayoutMethod(t, r);\n                });\n              }),\n              a\n                .then(function () {\n                  i.onAllLayoutEnd && i.onAllLayoutEnd();\n                })\n                .catch(function (t) {\n                  console.warn(\"relayout failed\", t);\n                });\n          }),\n          (t.prototype.filterLayoutData = function (t, e) {\n            var n,\n              r,\n              i = t.nodes,\n              o = t.edges,\n              a = Object(h.e)(t, [\"nodes\", \"edges\"]);\n            if (!i) return t;\n            if (\n              ((n = Object(gt.r)(null == e ? void 0 : e.nodesFilter)\n                ? e.nodesFilter\n                : function () {\n                    return !0;\n                  }),\n              Object(gt.r)(null == e ? void 0 : e.edgesFilter))\n            )\n              r = e.edgesFilter;\n            else {\n              var s = i.reduce(function (t, e) {\n                return (t[e.id] = !0), t;\n              }, {});\n              r = function (t) {\n                return s[t.source] && s[t.target];\n              };\n            }\n            return Object(h.a)({ nodes: i.filter(n), edges: o.filter(r) }, a);\n          }),\n          (t.prototype.getLayoutBBox = function (t) {\n            var e = this.graph,\n              n = Object(gt.j)(e.getNodes(), function (t) {\n                return t.getModel().layoutOrder;\n              }),\n              r = Object.values(n).map(function (t) {\n                var e = _r(t);\n                return (e.size = [e.width, e.height]), e;\n              });\n            return {\n              groupNodes: Object.values(Object(gt.j)(t, \"layoutOrder\")),\n              layoutNodes: r,\n            };\n          }),\n          (t.prototype.layoutAnimate = function () {}),\n          (t.prototype.moveToZero = function () {\n            var t = this.graph.get(\"data\").nodes;\n            if (void 0 !== t[0].x && null !== t[0].x && !Dr(t[0].x)) {\n              for (var e = [0, 0], n = t.length, r = 0; r < n; r++) {\n                var i = t[r];\n                (e[0] += i.x), (e[1] += i.y);\n              }\n              (e[0] /= t.length), (e[1] /= t.length);\n              for (r = 0; r < n; r++) {\n                ((i = t[r]).x -= e[0]), (i.y -= e[1]);\n              }\n            }\n          }),\n          (t.prototype.initPositions = function (t, e) {\n            var n = this.graph;\n            if (!e) return !1;\n            var r = e ? e.length : 0;\n            if (r) {\n              var i = 0.85 * n.get(\"width\"),\n                o = 0.85 * n.get(\"height\"),\n                a = Math.ceil(Math.sqrt(r) * (i / o)),\n                s = i / (a - 1),\n                u = o / (Math.ceil(r / a) - 1);\n              (isFinite(s) && s) || (s = 0), (isFinite(u) && s) || (u = 0);\n              for (\n                var c = t[0] - i / 2, h = t[1] - o / 2, l = !0, d = 0;\n                d < r;\n                d++\n              ) {\n                var f = e[d];\n                Dr(f.x) && ((l = !1), (f.x = (d % a) * s + c)),\n                  Dr(f.y) && ((l = !1), (f.y = Math.floor(d / a) * u + h));\n              }\n              return l;\n            }\n          }),\n          (t.prototype.destroy = function () {\n            (this.graph = null),\n              this.destoryLayoutMethods(),\n              (this.destroyed = !0);\n          }),\n          (t.prototype.onTick = function (t) {\n            var e;\n            null === (e = this.layoutMethods) ||\n              void 0 === e ||\n              e.forEach(function (e) {\n                null == e || e.onTick(t);\n              });\n          });\n      })();\n      !(function (t) {\n        (t.CLICK = \"click\"),\n          (t.DBLCLICK = \"dblclick\"),\n          (t.TAP = \"tap\"),\n          (t.DBLTAP = \"dbltap\"),\n          (t.DRAGSTART = \"dragstart\"),\n          (t.DRAGEND = \"dragend\"),\n          (t.DRAG = \"drag\"),\n          (t.DRAGENTER = \"dragenter\"),\n          (t.DRAGLEAVE = \"dragleave\"),\n          (t.DRAGOVER = \"dragover\"),\n          (t.DRAGOUT = \"dragout\"),\n          (t.DDROP = \"drop\"),\n          (t.PINCHSTART = \"pinchstart\"),\n          (t.PINCHMOVE = \"pinchmove\"),\n          (t.PANSTART = \"panstart\"),\n          (t.PANMOVE = \"panmove\"),\n          (t.PANEND = \"panend\"),\n          (t.PRESS = \"press\"),\n          (t.ACTION_END = \"actionend\"),\n          (t.TOUCHSTART = \"touchstart\"),\n          (t.TOUCHMOVE = \"touchmove\"),\n          (t.TOUCHEND = \"touchend\"),\n          (t.CANVAS_TOUCHSTART = \"canvas:touchstart\"),\n          (t.CANVAS_TOUCHMOVE = \"canvas:touchmove\"),\n          (t.CANVAS_TOUCHEND = \"canvas:touchend\"),\n          (t.NODE_TOUCHSTART = \"node:touchstart\"),\n          (t.NODE_TOUCHMOVE = \"node:touchmove\"),\n          (t.NODE_TOUCHEND = \"node:touchend\"),\n          (t.COMBO_TOUCHSTART = \"combo:touchstart\"),\n          (t.COMBO_TOUCHMOVE = \"combo:touchmove\"),\n          (t.COMBO_TOUCHEND = \"combo:touchend\"),\n          (t.EDGE_TOUCHSTART = \"edge:touchstart\"),\n          (t.EDGE_TOUCHMOVE = \"edge:touchmove\"),\n          (t.EDGE_TOUCHEND = \"edge:touchend\"),\n          (t.NODE_CLICK = \"node:click\"),\n          (t.NODE_DBLCLICK = \"node:dblclick\"),\n          (t.NODE_DROP = \"node:drop\"),\n          (t.NODE_DRAGOVER = \"node:dragover\"),\n          (t.NODE_DRAGENTER = \"node:dragenter\"),\n          (t.NODE_DRAGLEAVE = \"node:dragleave\"),\n          (t.NODE_DRAGSTART = \"node:dragstart\"),\n          (t.NODE_DRAG = \"node:drag\"),\n          (t.NODE_DRAGEND = \"node:dragend\"),\n          (t.NODE_TAP = \"node:tap\"),\n          (t.NODE_DBLTAP = \"node:dbltap\"),\n          (t.NODE_PANSTART = \"node:panstart\"),\n          (t.NODE_PANMOVE = \"node:panmove\"),\n          (t.NODE_PANEND = \"node:panend\"),\n          (t.NODE_PRESS = \"node:press\"),\n          (t.COMBO_CLICK = \"combo:click\"),\n          (t.COMBO_DBLCLICK = \"combo:dblclick\"),\n          (t.COMBO_DROP = \"combo:drop\"),\n          (t.COMBO_DRAGOVER = \"combo:dragover\"),\n          (t.COMBO_DRAGENTER = \"combo:dragenter\"),\n          (t.COMBO_DRAGLEAVE = \"combo:dragleave\"),\n          (t.COMBO_DRAGSTART = \"combo:dragstart\"),\n          (t.COMBO_DRAG = \"combo:drag\"),\n          (t.COMBO_DRAGEND = \"combo:dragend\"),\n          (t.COMBO_TAP = \"combo:tap\"),\n          (t.COMBO_DBLTAP = \"combo:dbltap\"),\n          (t.COMBO_PANSTART = \"combo:panstart\"),\n          (t.COMBO_PANMOVE = \"combo:panmove\"),\n          (t.COMBO_PANEND = \"combo:panend\"),\n          (t.COMBO_PRESS = \"combo:press\"),\n          (t.EDGE_CLICK = \"edge:click\"),\n          (t.EDGE_DBLCLICK = \"edge:dblclick\"),\n          (t.EDGE_DROP = \"edge:drop\"),\n          (t.EDGE_DRAGOVER = \"edge:dragover\"),\n          (t.EDGE_DRAGENTER = \"edge:dragenter\"),\n          (t.EDGE_DRAGLEAVE = \"edge:dragleave\"),\n          (t.EDGE_TAP = \"edge:tap\"),\n          (t.EDGE_DBLTAP = \"edge:dbltap\"),\n          (t.EDGE_PRESS = \"edge:press\"),\n          (t.CANVAS_CLICK = \"canvas:click\"),\n          (t.CANVAS_DBLCLICK = \"canvas:dblclick\"),\n          (t.CANVAS_DROP = \"canvas:drop\"),\n          (t.CANVAS_DRAGENTER = \"canvas:dragenter\"),\n          (t.CANVAS_DRAGLEAVE = \"canvas:dragleave\"),\n          (t.CANVAS_DRAGSTART = \"canvas:dragstart\"),\n          (t.CANVAS_DRAG = \"canvas:drag\"),\n          (t.CANVAS_DRAGEND = \"canvas:dragend\"),\n          (t.CANVAS_TAP = \"canvas:tap\"),\n          (t.CANVAS_DBLTAP = \"canvas:dbltap\"),\n          (t.CANVAS_PANSTART = \"canvas:panstart\"),\n          (t.CANVAS_PANMOVE = \"canvas:panmove\"),\n          (t.CANVAS_PANEND = \"canvas:panend\"),\n          (t.CANVAS_PRESS = \"canvas:press\"),\n          (t.BEFORERENDER = \"beforerender\"),\n          (t.AFTERRENDER = \"afterrender\"),\n          (t.BEFOREADDITEM = \"beforeadditem\"),\n          (t.AFTERADDITEM = \"afteradditem\"),\n          (t.BEFOREREMOVEITEM = \"beforeremoveitem\"),\n          (t.AFTERREMOVEITEM = \"afterremoveitem\"),\n          (t.BEFOREUPDATEITEM = \"beforeupdateitem\"),\n          (t.AFTERUPDATEITEM = \"afterupdateitem\"),\n          (t.BEFOREITEMVISIBILITYCHANGE = \"beforeitemvisibilitychange\"),\n          (t.AFTERITEMVISIBILITYCHANGE = \"afteritemvisibilitychange\"),\n          (t.BEFOREITEMSTATECHANGE = \"beforeitemstatechange\"),\n          (t.AFTERITEMSTATECHANGE = \"afteritemstatechange\"),\n          (t.BEFOREITEMREFRESH = \"beforeitemrefresh\"),\n          (t.AFTERITEMREFRESH = \"afteritemrefresh\"),\n          (t.BEFOREITEMSTATESCLEAR = \"beforeitemstatesclear\"),\n          (t.AFTERITEMSTATESCLEAR = \"afteritemstatesclear\"),\n          (t.BEFOREMODECHANGE = \"beforemodechange\"),\n          (t.AFTERMODECHANGE = \"aftermodechange\"),\n          (t.BEFORELAYOUT = \"beforelayout\"),\n          (t.AFTERLAYOUT = \"afterlayout\"),\n          (t.BEFORECREATEEDGE = \"beforecreateedge\"),\n          (t.AFTERCREATEEDGE = \"aftercreateedge\"),\n          (t.BEFOREGRAPHREFRESHPOSITION = \"beforegraphrefreshposition\"),\n          (t.AFTERGRAPHREFRESHPOSITION = \"aftergraphrefreshposition\"),\n          (t.BEFOREGRAPHREFRESH = \"beforegraphrefresh\"),\n          (t.AFTERGRAPHREFRESH = \"aftergraphrefresh\"),\n          (t.BEFOREANIMATE = \"beforeanimate\"),\n          (t.AFTERANIMATE = \"afteranimate\"),\n          (t.BEFOREPAINT = \"beforepaint\"),\n          (t.AFTERPAINT = \"afterpaint\"),\n          (t.BEFORECOLLAPSEEXPANDCOMBO = \"beforecollapseexpandcombo\"),\n          (t.AFTERCOLLAPSEEXPANDCOMBO = \"aftercollapseexpandcombo\"),\n          (t.GRAPHSTATECHANGE = \"graphstatechange\"),\n          (t.AFTERACTIVATERELATIONS = \"afteractivaterelations\"),\n          (t.NODESELECTCHANGE = \"nodeselectchange\"),\n          (t.TOOLTIPCHANGE = \"tooltipchange\"),\n          (t.WHEELZOOM = \"wheelzoom\"),\n          (t.VIEWPORTCHANGE = \"viewportchange\"),\n          (t.DRAGNODEEND = \"dragnodeend\"),\n          (t.STACKCHANGE = \"stackchange\");\n      })(Ri || (Ri = {}));\n      Yi.registerNode,\n        Yi.registerEdge,\n        Yi.registerCombo,\n        en.registerBehavior,\n        Yi.registerNode,\n        Yi.registerEdge,\n        Yi.registerCombo,\n        en.registerBehavior;\n      var Wi = Xi.pointLineDistance,\n        Gi = { stroke: \"#FA8C16\", lineWidth: 1 },\n        qi = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                line: Gi,\n                itemAlignType: \"center\",\n                tolerance: 5,\n                horizontalLines: {},\n                verticalLines: {},\n                alignLines: [],\n              };\n            }),\n            (e.prototype.init = function () {}),\n            (e.prototype.getEvents = function () {\n              return {\n                \"node:dragstart\": \"onDragStart\",\n                \"node:drag\": \"onDrag\",\n                \"node:dragend\": \"onDragEnd\",\n              };\n            }),\n            (e.prototype.onDragStart = function () {\n              this.initBoxLine();\n            }),\n            (e.prototype.onDrag = function (t) {\n              var e = t.item,\n                n = (e.get(\"delegateShape\") || e).getBBox(),\n                r = e.getModel(),\n                i = r.x - n.x,\n                o = r.y - n.y;\n              this.show(\n                { x: n.minX + i, y: n.minY + o },\n                { width: n.width, height: n.height },\n              );\n            }),\n            (e.prototype.onDragEnd = function () {\n              this.destory();\n            }),\n            (e.prototype.initBoxLine = function () {\n              var t = this._cfgs,\n                e = t.horizontalLines,\n                n = t.verticalLines,\n                r = t.itemAlignType;\n              this.get(\"graph\")\n                .getNodes()\n                .forEach(function (t) {\n                  var i = t.getBBox(),\n                    o = t.get(\"id\");\n                  !0 === r || \"horizontal\" === r\n                    ? ((e[o + \"tltr\"] = [i.minX, i.minY, i.maxX, i.minY, t]),\n                      (e[o + \"lcrc\"] = [\n                        i.minX,\n                        i.centerY,\n                        i.maxX,\n                        i.centerY,\n                        t,\n                      ]),\n                      (e[o + \"blbr\"] = [i.minX, i.maxY, i.maxX, i.maxY, t]))\n                    : \"center\" === r &&\n                      (e[o + \"lcrc\"] = [\n                        i.minX,\n                        i.centerY,\n                        i.maxX,\n                        i.centerY,\n                        t,\n                      ]),\n                    !0 === r || \"vertical\" === r\n                      ? ((n[o + \"tlbl\"] = [i.minX, i.minY, i.minX, i.maxY, t]),\n                        (n[o + \"tcbc\"] = [\n                          i.centerX,\n                          i.minY,\n                          i.centerX,\n                          i.maxY,\n                          t,\n                        ]),\n                        (n[o + \"trbr\"] = [i.maxX, i.minY, i.maxX, i.maxY, t]))\n                      : \"center\" === r &&\n                        (n[o + \"tcbc\"] = [\n                          i.centerX,\n                          i.minY,\n                          i.centerX,\n                          i.maxY,\n                          t,\n                        ]);\n                });\n            }),\n            (e.prototype.show = function (t, e) {\n              var n = Object(gt.C)({}, t);\n              return this.itemAlign(t, e, n), t;\n            }),\n            (e.prototype.itemAlign = function (t, e, n) {\n              var r = this,\n                i = this._cfgs,\n                o = i.horizontalLines,\n                a = i.verticalLines,\n                s = i.tolerance,\n                u = { x: n.x + e.width / 2, y: n.y },\n                c = { x: n.x + e.width / 2, y: n.y + e.height / 2 },\n                h = { x: n.x + e.width / 2, y: n.y + e.height },\n                l = { x: n.x, y: n.y + e.height / 2 },\n                d = { x: n.x + e.width, y: n.y + e.height / 2 },\n                f = [],\n                p = [],\n                g = null;\n              if (\n                (this.clearAlignLine(),\n                Object(gt.e)(o, function (t) {\n                  t[4].isVisible &&\n                    (f.push(r.getLineDisObject(t, u)),\n                    f.push(r.getLineDisObject(t, c)),\n                    f.push(r.getLineDisObject(t, h)));\n                }),\n                Object(gt.e)(a, function (t) {\n                  t[4].isVisible &&\n                    (p.push(r.getLineDisObject(t, l)),\n                    p.push(r.getLineDisObject(t, c)),\n                    p.push(r.getLineDisObject(t, d)));\n                }),\n                f.sort(function (t, e) {\n                  return t.dis - e.dis;\n                }),\n                p.sort(function (t, e) {\n                  return t.dis - e.dis;\n                }),\n                0 !== f.length && f[0].dis < s)\n              ) {\n                (t.y = f[0].line[1] - f[0].point.y + n.y),\n                  (g = { type: \"item\", horizontals: [f[0]] });\n                for (var y = 1; y < 3; y++)\n                  f[0].dis === f[y].dis && g.horizontals.push(f[y]);\n              }\n              if (0 !== p.length && p[0].dis < s) {\n                (t.x = p[0].line[0] - p[0].point.x + n.x),\n                  g\n                    ? (g.verticals = [p[0]])\n                    : (g = { type: \"item\", verticals: [p[0]] });\n                for (y = 1; y < 3; y++)\n                  p[0].dis === p[y].dis && g.verticals.push(p[y]);\n              }\n              g && ((g.bbox = e), this.addAlignLine(g));\n            }),\n            (e.prototype.addAlignLine = function (t) {\n              var e = t.bbox,\n                n = t.type,\n                r = t.horizontals,\n                i = t.verticals,\n                o = this._cfgs,\n                a = o.line,\n                s = o.alignLines,\n                u = this.get(\"graph\").get(\"group\");\n              \"item\" === n &&\n                (r &&\n                  Object(gt.e)(r, function (t) {\n                    var n,\n                      r,\n                      i = t.line,\n                      o = t.point,\n                      c = (i[0] + i[2]) / 2;\n                    o.x < c\n                      ? ((n = o.x - e.width / 2), (r = Math.max(i[0], i[2])))\n                      : ((n = o.x + e.width / 2), (r = Math.min(i[0], i[2])));\n                    var h = Object(gt.C)(\n                        { x1: n, y1: i[1], x2: r, y2: i[1] },\n                        a,\n                      ),\n                      l = u.addShape(\"line\", { attrs: h, capture: !1 });\n                    s.push(l);\n                  }),\n                i &&\n                  Object(gt.e)(i, function (t) {\n                    var n,\n                      r,\n                      i = t.line,\n                      o = t.point,\n                      c = (i[1] + i[3]) / 2;\n                    o.y < c\n                      ? ((n = o.y - e.height / 2), (r = Math.max(i[1], i[3])))\n                      : ((n = o.y + e.height / 2), (r = Math.min(i[1], i[3])));\n                    var h = Object(gt.C)(\n                        { x1: i[0], y1: n, x2: i[0], y2: r },\n                        a,\n                      ),\n                      l = u.addShape(\"line\", { attrs: h, capture: !1 });\n                    s.push(l);\n                  }));\n            }),\n            (e.prototype.getLineDisObject = function (t, e) {\n              return { line: t, point: e, dis: Wi(t, e) };\n            }),\n            (e.prototype.getContainer = function () {\n              return this.get(\"container\");\n            }),\n            (e.prototype.clearAlignLine = function () {\n              var t = this._cfgs.alignLines;\n              Object(gt.e)(t, function (t) {\n                t.remove();\n              }),\n                (t.length = 0);\n            }),\n            (e.prototype.destory = function () {\n              var t = this._cfgs,\n                e = t.horizontalLines,\n                n = t.verticalLines;\n              this.get(\"graph\")\n                .getNodes()\n                .forEach(function (t) {\n                  var r = t.get(\"id\");\n                  delete e[r + \"tltr\"],\n                    delete e[r + \"lcrc\"],\n                    delete e[r + \"blbr\"],\n                    delete n[r + \"tlbl\"],\n                    delete n[r + \"tcbc\"],\n                    delete n[r + \"trbr\"];\n                }),\n                this.clearAlignLine();\n            }),\n            e\n          );\n        })(Qe);\n      var Hi = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(h.c)(e, t),\n          (e.prototype.getDefaultCfgs = function () {\n            return {\n              offsetX: 6,\n              offsetY: 6,\n              getContent: function (t) {\n                var e, n;\n                return (\n                  \"\\n          <div class=\\\"f6-tooltip-container\\\">\\n            <div class='tooltip-type'>类型：\" +\n                  (null === (e = t.item) || void 0 === e\n                    ? void 0\n                    : e.getType()) +\n                  \"</div>\\n            <div class='tooltip-id'>ID：\" +\n                  (null === (n = t.item) || void 0 === n ? void 0 : n.getID()) +\n                  \"</div>\\n          </div>\\n        \"\n                );\n              },\n              getCss: function () {\n                return \"\\n        .f6-tooltip-container {\\n          position: absolute;\\n          width: 200;\\n          border: 1 solid #e2e2e2;\\n          border-radius: 4;\\n          font-size: 12;\\n          color: #545454;\\n          background-color: rgba(255, 255, 255, 0.9);\\n          padding: 10 8;\\n        }\\n    \\n        .f6-tooltip-container div{\\n          height: 20;\\n        }\\n        \\n        .tooltip-type {\\n          padding: 0;\\n          margin: 0;\\n        }\\n        .tooltip-id {\\n          color: #531dab;\\n        }\\n      \";\n              },\n              shouldBegin: function (t) {\n                return !0;\n              },\n              itemTypes: [\"node\", \"edge\", \"combo\"],\n              trigger: \"mouseenter\",\n              fixToNode: void 0,\n            };\n          }),\n          (e.prototype.getEvents = function () {\n            return \"click\" === this.get(\"trigger\")\n              ? {\n                  \"node:tap\": \"onClick\",\n                  \"edge:tap\": \"onClick\",\n                  \"combo:tap\": \"onClick\",\n                  \"canvas:tap\": \"onMouseLeave\",\n                  afterremoveitem: \"onMouseLeave\",\n                  contextmenu: \"onMouseLeave\",\n                  drag: \"onMouseLeave\",\n                }\n              : {\n                  \"node:press\": \"onClick\",\n                  \"edge:press\": \"onClick\",\n                  \"combo:press\": \"onClick\",\n                  \"canvas:press\": \"onMouseLeave\",\n                  \"node:tap\": \"onMouseLeave\",\n                  \"edge:tap\": \"onMouseLeave\",\n                  \"combo:tap\": \"onMouseLeave\",\n                  \"canvas:tap\": \"onMouseLeave\",\n                  afterremoveitem: \"onMouseLeave\",\n                  contextmenu: \"onMouseLeave\",\n                  drag: \"onMouseLeave\",\n                };\n          }),\n          (e.prototype.onClick = function (t) {\n            var e = this.get(\"itemTypes\");\n            if (\n              !t.item ||\n              !t.item.getType ||\n              -1 !== e.indexOf(t.item.getType())\n            ) {\n              var n = t.item,\n                r = this.get(\"graph\");\n              this.currentTarget === n\n                ? ((this.currentTarget = null),\n                  this.hideTooltip(),\n                  r.emit(\"tooltipchange\", { item: t.item, action: \"hide\" }))\n                : ((this.currentTarget = n),\n                  this.showTooltip(t),\n                  r.emit(\"tooltipchange\", { item: t.item, action: \"show\" }));\n            }\n          }),\n          (e.prototype.onMouseEnter = function (t) {\n            var e = this.get(\"itemTypes\");\n            if (\n              !t.item ||\n              !t.item.getType ||\n              -1 !== e.indexOf(t.item.getType())\n            ) {\n              var n = t.item,\n                r = this.get(\"graph\");\n              (this.currentTarget = n),\n                this.showTooltip(t),\n                r.emit(\"tooltipchange\", { item: t.item, action: \"show\" });\n            }\n          }),\n          (e.prototype.onMouseMove = function (t) {\n            var e = this.get(\"itemTypes\");\n            (t.item && t.item.getType && -1 === e.indexOf(t.item.getType())) ||\n              (this.currentTarget &&\n                t.item === this.currentTarget &&\n                this.showTooltip(t));\n          }),\n          (e.prototype.onMouseLeave = function () {\n            this.hideTooltip(),\n              this.get(\"graph\").emit(\"tooltipchange\", {\n                item: this.currentTarget,\n                action: \"hide\",\n              }),\n              (this.currentTarget = null);\n          }),\n          (e.prototype.showTooltip = function (t) {\n            var e, n, r;\n            if (t.item) {\n              var i = this.get(\"itemTypes\");\n              if (!t.item.getType || -1 !== i.indexOf(t.item.getType())) {\n                var o,\n                  a,\n                  s = this.get(\"graph\").get(\"uiGroup\"),\n                  u = H(\n                    (void 0 ===\n                      (o =\n                        null === (e = this.get(\"getContent\")) || void 0 === e\n                          ? void 0\n                          : e(t)) && (o = \"\"),\n                    \"\\n  <root> \\n    \" + o + \"\\n  </root>\"),\n                    (void 0 ===\n                      (a =\n                        null === (n = this.get(\"getCss\")) || void 0 === n\n                          ? void 0\n                          : n()) && (a = \"\"),\n                    \"\\n    text {\\n      opacity: 1\\n    }\\n    \" + a + \"\\n  \"),\n                    s,\n                  );\n                null === (r = this.get(\"tooltip\")) ||\n                  void 0 === r ||\n                  r.remove(),\n                  this.set(\"tooltip\", u),\n                  this.updatePosition(t);\n              }\n            }\n          }),\n          (e.prototype.hideTooltip = function () {\n            var t = this.get(\"tooltip\");\n            t && t.setStyle(\"display\", \"none\");\n          }),\n          (e.prototype.updatePosition = function (t) {\n            var e = this.get(\"shouldBegin\"),\n              n = this.get(\"tooltip\");\n            if (e(t)) {\n              var r = this.get(\"graph\"),\n                i = r.get(\"width\"),\n                o = r.get(\"height\"),\n                a = this.get(\"offsetX\") || 0,\n                s = this.get(\"offsetY\") || 0,\n                u = r.getPointByClient(t.clientX, t.clientY),\n                c = this.get(\"fixToNode\"),\n                h = t.item;\n              if (\n                h.getType &&\n                \"node\" === h.getType() &&\n                c &&\n                Object(gt.m)(c) &&\n                c.length >= 2\n              ) {\n                var l = h.getBBox();\n                u = { x: l.minX + l.width * c[0], y: l.minY + l.height * c[1] };\n              }\n              var d = r.getCanvasByPoint(u.x, u.y),\n                f = d.x,\n                p = d.y,\n                g = { x: f + a, y: p + s };\n              n.setStyle(\"display\", \"flex\"),\n                f + n.width + a > i && (g.x -= n.width + a),\n                p + n.height + s > o && (g.y -= n.height + s),\n                n.setStyle(\"left\", g.x),\n                n.setStyle(\"top\", g.y);\n            } else this.hideTooltip();\n          }),\n          (e.prototype.hide = function () {\n            this.onMouseLeave();\n          }),\n          (e.prototype.destroy = function () {\n            var t = this.get(\"tooltip\");\n            t && t.remove();\n          }),\n          e\n        );\n      })(Qe);\n      function Vi(t, e, n) {\n        var r,\n          i = t.type,\n          o = (function (t) {\n            var e, n, r;\n            t.size &&\n              (Array.isArray(t.size)\n                ? ((e = t.size[0]),\n                  (n = t.size[1] || t.size[0]),\n                  (r = t.size[0] / 2))\n                : \"number\" == typeof t.size &&\n                  ((e = t.size), (n = t.size), (r = t.size / 2)));\n            t.style &&\n              (t.style.width && (e = t.style.width),\n              t.style.height && (n = t.style.height),\n              t.style.r && (r = t.style.r));\n            r || (r = 5);\n            e || (e = r);\n            n || (n = r);\n            return { width: e, height: n, r: r };\n          })(t),\n          a = o.width,\n          s = o.height,\n          u = o.r;\n        switch (t.type) {\n          case \"circle\":\n            r = { r: u, x: 0, y: 0 };\n            break;\n          case \"rect\":\n            r = { width: a, height: s, x: -a / 2, y: -s / 2 };\n            break;\n          case \"ellipse\":\n            r = { r1: a, r2: s, x: 0, y: 0 };\n            break;\n          case \"line\":\n            (r = { x1: -a / 2, y1: 0, x2: a / 2, y2: 0 }), (i = \"line\");\n            break;\n          case \"quadratic\":\n            (r = {\n              path: [\n                [\"M\", -a / 2, 0],\n                [\"Q\", 0, a / 2, a / 2, 0],\n              ],\n            }),\n              (i = \"path\");\n            break;\n          case \"cubic\":\n            (r = {\n              path: [\n                [\"M\", -a / 2, 0],\n                [\"C\", -a / 6, a / 2, a / 6, -a / 2, a / 2, 0],\n              ],\n            }),\n              (i = \"path\");\n            break;\n          default:\n            r = { r: u, x: 0, y: 0 };\n        }\n        var c =\n            \"\\n  <div class='node-container' orignStyle=\" +\n            JSON.stringify(e) +\n            \" legendId=\" +\n            t.id +\n            \">\\n    <shape type='\" +\n            i +\n            \"' class='\" +\n            t.type +\n            \"-node-keyShape' \\n      \" +\n            Object.entries(r).reduce(function (t, e) {\n              return t + \" \" + e[0] + \"=\" + e[1] + \" \";\n            }, \"\") +\n            \"\\n    />\\n    \" +\n            (t.label && \" <div class='text'>\" + t.label + \"</div>\") +\n            \"\\n  </div>\\n\",\n          l = Object(h.a)(\n            {\n              textAlign: \"begin\",\n              fontSize: 12,\n              fill: \"#000\",\n              opacity: 1,\n              fontWeight: \"normal\",\n            },\n            t.labelStyle,\n          );\n        return V(\n          c,\n          \"\\n    .node-container {\\n      width: \" +\n            n.width +\n            \";\\n      height: \" +\n            (n.height || Math.max(s, n.fontSize)) +\n            \";\\n      display: flex;\\n      flex-direction: row;\\n      justify-content: center;\\n      align-items: center;\\n      background-opacity: 0;\\n      font-size: \" +\n            l.fontSize +\n            \";\\n      margin: \" +\n            n.margin +\n            \"\\n    }\\n    shape {\\n      top: \" +\n            s / 2 +\n            \";\\n      left: \" +\n            a / 2 +\n            \";\\n      width: \" +\n            a +\n            \";\\n      height: \" +\n            s +\n            \";\\n      background: \" +\n            e.fill +\n            \";\\n      border: \" +\n            (e.lineWidth || \"1\") +\n            \" solid \" +\n            e.stroke +\n            \";\\n      margin-right: 3;\\n    }\\n    .text {\\n      flex: 1;\\n      height: \" +\n            (l.fontSize + 2) +\n            \";\\n      color: \" +\n            l.fill +\n            \";\\n      background-opacity: 0;\\n      pointer-events: none;\\n      text-align: \" +\n            l.textAlign +\n            \";\\n      font-weight: \" +\n            l.fontWeight +\n            \"\\n    }\\n    text {\\n      opacity: \" +\n            l.opacity +\n            \";\\n      white-space: nowrap;\\n    }\\n\",\n        );\n      }\n      var Ui = [\"click\", \"mouseenter\"],\n        Zi = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (n.active = []), (n.inActive = []), n;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                data: {},\n                position: \"top\",\n                padding: 0,\n                margin: 0,\n                offsetX: -10,\n                offsetY: 0,\n                layout: \"horizontal\",\n                containerStyle: {},\n                align: void 0,\n                filter: { enable: !1, trigger: \"click\" },\n                itemConfig: { width: 100, height: 50, fontSize: 12 },\n              };\n            }),\n            (e.prototype.init = function () {\n              var t = this;\n              this.formatArray(\"padding\"),\n                this.formatArray(\"margin\"),\n                (this.get(\"filter\") || {}).multiple && this.set(\"multiple\", !1);\n              var e = this.get(\"align\");\n              if (!e) {\n                var n = this.get(\"position\").split(\"-\");\n                n.includes(\"left\") && (e = \"left\"),\n                  (e = n.includes(\"right\") ? \"right\" : \"center\"),\n                  this.set(\"align\", e);\n              }\n              setTimeout(function () {\n                var e = t.render(),\n                  n = t.getContainerPos(e);\n                t.get(\"graph\").get(\"uiGroup\").translate(n.left, n.top),\n                  t.bindEvents();\n              });\n            }),\n            (e.prototype.getContainerPos = function (t) {\n              void 0 === t && (t = [0, 0]);\n              var e = this.get(\"graph\"),\n                n = this.get(\"offsetX\"),\n                r = this.get(\"offsetY\"),\n                i = this.get(\"margin\"),\n                o = this.get(\"position\").split(\"-\"),\n                a = { top: 0, right: 1, bottom: 2, left: 3 },\n                s = {\n                  left: (e.getWidth() - t[0]) / 2 + 0,\n                  top: (e.getHeight() - t[1]) / 2 + 0,\n                };\n              return (\n                o.forEach(function (n) {\n                  var r = i[a[n]],\n                    o = n;\n                  switch (n) {\n                    case \"top\":\n                    case \"left\":\n                      r += 0;\n                      break;\n                    case \"bottom\":\n                      (r = e.getHeight() - t[1] - r + 0), (o = \"top\");\n                      break;\n                    default:\n                      (r = e.getWidth() - t[0] - r + 0), (o = \"left\");\n                  }\n                  s[o] = r;\n                }),\n                (s.top += r),\n                (s.left += n),\n                Object.keys(s).forEach(function (t) {\n                  s[t] = \"\" + s[t];\n                }),\n                s\n              );\n            }),\n            (e.prototype.bindEvents = function () {\n              var t = this,\n                e = t.get(\"filter\");\n              if (e && e.enable) {\n                var n = e.trigger || \"click\";\n                Ui.includes(n) ||\n                  (console.warn(\n                    \"Trigger for legend filterling must be 'click' or 'mouseenter', 'click' will take effect by default.\",\n                  ),\n                  (n = \"click\")),\n                  this.get(\"legendUI\").on(\"tap\", function (e) {\n                    var n;\n                    \"node-container\" ===\n                    (null === (n = null == e ? void 0 : e.uiNode) ||\n                    void 0 === n\n                      ? void 0\n                      : n.getAttribute(\"class\"))\n                      ? t.filterData(e.uiNode)\n                      : (t.clearFilter(), t.clearActiveLegend());\n                  });\n              }\n            }),\n            (e.prototype.changeData = function (t) {\n              this.set(\"data\", t);\n              var e = this.render(),\n                n = this.getContainerPos(e);\n              this.get(\"graph\").get(\"uiGroup\").translate(n.left, n.top);\n            }),\n            (e.prototype.goActive = function (t) {\n              this.goDefault(t);\n              var e = this.get(\"filter\"),\n                n = (null == e ? void 0 : e.lengedStateStyles) || {},\n                r = (null == n ? void 0 : n.active) || {\n                  stroke: \"#000\",\n                  lineWidth: 2,\n                  \"text-shape\": { fontWeight: \"bold\", opacity: 1 },\n                };\n              t.query(\"shape\").setStyle(\"borderColor\", r.stroke),\n                t.query(\"shape\").setStyle(\"borderWidth\", r.lineWidth),\n                t\n                  .query(\"text\")\n                  .setStyle(\"fontWeight\", r[\"text-shape\"].fontWeight),\n                t.query(\"text\").setStyle(\"opacity\", r[\"text-shape\"].opacity),\n                this.active.push(t),\n                this.inActive.includes(t) &&\n                  this.inActive.splice(this.inActive.indexOf(t), 1);\n            }),\n            (e.prototype.goDefault = function (t) {\n              var e = t.getAttribute(\"orignStyle\");\n              t.query(\"shape\").setStyle(\"borderColor\", e.stroke),\n                t.query(\"shape\").setStyle(\"opacity\", 1),\n                t.query(\"shape\").setStyle(\"borderWidth\", e.lineWidth || 1),\n                t.query(\"text\").setStyle(\"fontWeight\", \"normal\"),\n                t.query(\"text\").setStyle(\"opacity\", 1);\n            }),\n            (e.prototype.goInActive = function (t) {\n              this.goDefault(t);\n              var e = this.get(\"filter\"),\n                n = (null == e ? void 0 : e.lengedStateStyles) || {},\n                r = (null == n ? void 0 : n.inactive) || {\n                  opacity: 0.5,\n                  \"text-shape\": { opacity: 0.5 },\n                };\n              t.query(\"shape\").setStyle(\"opacity\", r.opacity),\n                t.query(\"text\").setStyle(\"opacity\", r[\"text-shape\"].opacity),\n                this.inActive.push(t),\n                this.active.includes(t) &&\n                  this.active.splice(this.active.indexOf(t), 1);\n            }),\n            (e.prototype.activateLegend = function (t) {\n              var e = this,\n                n = this.get(\"filter\");\n              if (\n                ((null == n ? void 0 : n.multiple) || this.clearActiveLegend(),\n                !this.active.includes(t))\n              ) {\n                var r = this.get(\"legendUI\").queryAll(\".node-container\");\n                this.goActive(t),\n                  r.forEach(function (t) {\n                    e.active.includes(t) || e.goInActive(t);\n                  });\n              }\n            }),\n            (e.prototype.clearActiveLegend = function () {\n              var t = this;\n              this.get(\"legendUI\")\n                .queryAll(\".node-container\")\n                .forEach(function (e) {\n                  t.goDefault(e);\n                }),\n                (this.active = []),\n                (this.inActive = []);\n            }),\n            (e.prototype.filterData = function (t) {\n              var e = this,\n                n = this.get(\"filter\"),\n                r = null == n ? void 0 : n.filterFunctions;\n              if (n && r) {\n                var i = this.get(\"graph\"),\n                  o = n.graphActiveState || \"active\",\n                  a = n.graphInactiveState || \"inactive\",\n                  s = n.multiple;\n                if (\n                  (this.clearFilter(),\n                  s || this.clearActiveLegend(),\n                  this.active.includes(t)\n                    ? this.goInActive(t)\n                    : this.activateLegend(t),\n                  0 === this.active.length)\n                )\n                  this.get(\"legendUI\")\n                    .queryAll(\".node-container\")\n                    .forEach(function (t) {\n                      return e.goDefault(t);\n                    });\n                var u = 0,\n                  c = [\"getNodes\", \"getEdges\"];\n                c.forEach(function (t) {\n                  i[t]().forEach(function (t) {\n                    var n = !1;\n                    e.active.forEach(function (e) {\n                      var i = r[e.getAttribute(\"legendId\")];\n                      n = n || i(t.getModel());\n                    }),\n                      n\n                        ? (i.setItemState(t, a, !1),\n                          i.setItemState(t, o, !0),\n                          u++)\n                        : (i.setItemState(t, o, !1), i.setItemState(t, a, !0));\n                  });\n                }),\n                  u ||\n                    c.forEach(function (t) {\n                      i[t]().forEach(function (t) {\n                        i.clearItemStates(t, [a]);\n                      });\n                    });\n              }\n            }),\n            (e.prototype.clearFilter = function () {\n              var t = this.get(\"graph\"),\n                e = this.get(\"filter\");\n              if (e) {\n                var n = e.graphActiveState || \"active\",\n                  r = e.graphInactiveState || \"inactive\";\n                t.getNodes().forEach(function (e) {\n                  t.clearItemStates(e, [n, r]);\n                }),\n                  t.getEdges().forEach(function (e) {\n                    t.clearItemStates(e, [n, r]);\n                  });\n              }\n            }),\n            (e.prototype.render = function () {\n              var t,\n                e,\n                n = this;\n              this.processData();\n              var r = this.get(\"itemsData\"),\n                i = [[], []];\n              [\"nodes\", \"edges\"].forEach(function (t, e) {\n                r[t].forEach(function (r) {\n                  var o = n.getStyle(t.substr(0, 4), r);\n                  i[e].push(Vi(r, o, n.get(\"itemConfig\")));\n                });\n              });\n              var o = this.get(\"title\"),\n                a =\n                  \" \\n    <div class='g6-legend-container'>\\n      \" +\n                  (o && \"<div class='text-container'>\" + o + \"</div>\") +\n                  \"\\n      <div class='node-wrap'>\\n        <div class='node-row'> </div>\\n        <div class='edge-row'> </div>\\n      </div>  \\n    </div>\",\n                s = this.get(\"titleConfig\") || {},\n                u = Object.assign(\n                  {\n                    fontSize: 20,\n                    fontFamily: \"Arial\",\n                    fontWeight: 300,\n                    textBaseline: \"top\",\n                    textAlign: \"center\",\n                    fill: \"#000\",\n                  },\n                  s.style || {},\n                ),\n                c = this.get(\"containerStyle\"),\n                h = this.get(\"padding\"),\n                l = this.get(\"margin\"),\n                d = H(\n                  a,\n                  \"\\n      .g6-legend-container{\\n        width: \" +\n                    this.get(\"width\") +\n                    \";\\n        height: \" +\n                    this.get(\"height\") +\n                    \";\\n        padding: \" +\n                    h.join(\" \") +\n                    \";\\n        margin: \" +\n                    l.join(\" \") +\n                    \";\\n        background: \" +\n                    (c.fill || \"#f00\") +\n                    \";\\n        border: \" +\n                    (c.lineWidth || \"1\") +\n                    \" solid \" +\n                    (c.stroke || \"#000\") +\n                    \";\\n        opacity: \" +\n                    (c.opacity || \"0.5\") +\n                    \"\\n      }\\n      .text-container {\\n        font-size: \" +\n                    u.fontSize +\n                    \";\\n        font-family: \" +\n                    u.fontFamily +\n                    \";\\n        font-weight: \" +\n                    u.fontWeight +\n                    \";\\n        text-align: \" +\n                    u.textAlign +\n                    \";\\n        color: \" +\n                    u.fill +\n                    \";\\n        height: \" +\n                    u.fontSize +\n                    \";\\n        background-opacity: 0;\\n        top:  \" +\n                    s.offsetY +\n                    \";\\n        left: \" +\n                    s.offsetX +\n                    \";\\n      }\\n      .edge-row, .node-row {\\n        display: flex;\\n        flex-direction: \" +\n                    (\"vertical\" === this.get(\"layout\") ? \"column\" : \"row\") +\n                    \";\\n        flex-wrap: nowrap;\\n        justify-content: space-between;\\n        background-opacity: 0;\\n      }\\n      .node-wrap {\\n        flex: 1;\\n        flex-direction: \" +\n                    (\"vertical\" === this.get(\"layout\") ? \"row\" : \"column\") +\n                    \";\\n        justify-content: space-between;\\n        background-opacity: 0;\\n      }\\n    \",\n                  this.get(\"graph\").get(\"uiGroup\"),\n                );\n              return (\n                (t = d.query(\".node-row\")).appendChild.apply(t, i[0]),\n                (e = d.query(\".edge-row\")).appendChild.apply(e, i[1]),\n                this.set(\"legendUI\", d),\n                [d.width, d.height]\n              );\n            }),\n            (e.prototype.processData = function () {\n              var t = this.get(\"data\"),\n                e = { nodes: [], edges: [] };\n              t.nodes &&\n                (t.nodes.sort(function (t, e) {\n                  return t.order - e.order;\n                }),\n                t.nodes.forEach(function (t) {\n                  var n,\n                    r,\n                    i,\n                    o,\n                    a,\n                    s = t.size || [\n                      (null === (n = t.style) || void 0 === n\n                        ? void 0\n                        : n.width) ||\n                        (null === (r = t.style) || void 0 === r\n                          ? void 0\n                          : r.r) ||\n                        8,\n                      (null === (i = t.style) || void 0 === i\n                        ? void 0\n                        : i.height) ||\n                        (null === (o = t.style) || void 0 === o\n                          ? void 0\n                          : o.r) ||\n                        8,\n                    ],\n                    u =\n                      (null === (a = t.labelCfg) || void 0 === a\n                        ? void 0\n                        : a.style) || {};\n                  e.nodes.push({\n                    id: t.id || Object(gt.I)(),\n                    type: t.type || \"circle\",\n                    style: Object(h.a)({}, t.style),\n                    order: t.order,\n                    label: t.label,\n                    itemType: \"node\",\n                    size: s,\n                    labelCfg: {\n                      position: \"right\",\n                      style: Object(h.a)({ fontFamily: \"Arial\" }, u),\n                    },\n                  });\n                })),\n                t.edges &&\n                  (t.edges.sort(function (t, e) {\n                    return t.order - e.order;\n                  }),\n                  t.edges.forEach(function (t) {\n                    var n,\n                      r,\n                      i = t.type || \"line\";\n                    \"cubic-horizontal\" === t.type && (i = \"cubic\");\n                    var o =\n                        (null === (n = t.labelCfg) || void 0 === n\n                          ? void 0\n                          : n.style) || {},\n                      a = t.size || [\n                        (null === (r = t.style) || void 0 === r\n                          ? void 0\n                          : r.width) || 8,\n                        1,\n                      ];\n                    e.edges.push({\n                      id: t.id || Object(gt.I)(),\n                      type: i,\n                      size: a,\n                      style: Object(h.a)(\n                        { lineWidth: Object(gt.m)(a) ? a[1] : 1 },\n                        t.style,\n                      ),\n                      order: t.order,\n                      label: t.label,\n                      itemType: \"edge\",\n                      labelCfg: {\n                        position: \"right\",\n                        style: Object(h.a)({ fontFamily: \"Arial\" }, o),\n                      },\n                    });\n                  })),\n                this.set(\"itemsData\", e);\n            }),\n            (e.prototype.formatArray = function (t) {\n              var e = this.get(t);\n              if (Object(gt.t)(e)) this.set(t, [e, e, e, e]);\n              else if (Object(gt.m)(e))\n                switch (e.length) {\n                  case 0:\n                    this.set(t, [0, 0, 0, 0]);\n                    break;\n                  case 1:\n                    this.set(t, [e[0], e[0], e[0], e[0]]);\n                    break;\n                  case 2:\n                    this.set(t, [e[0], e[1], e[0], e[1]]);\n                    break;\n                  case 3:\n                    this.set(t, [e[0], e[1], e[2], e[1]]);\n                }\n              return this.get(t);\n            }),\n            (e.prototype.getStyle = function (t, e) {\n              var n =\n                \"node\" === t\n                  ? { fill: \"#ccc\", lineWidth: 0 }\n                  : { stroke: \"#000\", lineWidth: 1 };\n              return Object(h.a)(Object(h.a)({}, n), e.style || {});\n            }),\n            (e.prototype.destroy = function () {\n              var t = this.get(\"graph\").get(\"container\"),\n                e = this.get(\"container\");\n              t.removeChild(e);\n            }),\n            e\n          );\n        })(Qe),\n        Ki = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              var t = this;\n              return {\n                minZoom: 0.5,\n                maxZoom: 3,\n                sliderWidthPercent: 0.3,\n                dragTimestamp: +new Date(),\n                getContent: function () {\n                  return '\\n          <root class=\"f6-zoom-slider\">\\n            <div class=\"rail\"></div>\\n            <div class=\"track\"></div>\\n            <div class=\"handle\">\\n              <div class=\"text\">1 times</div>\\n              <div class=\"circle\"></div>\\n            </div>\\n          </root>\\n        ';\n                },\n                getCss: function () {\n                  var e = t.get(\"graph\"),\n                    n = e.get(\"width\"),\n                    r = e.get(\"height\"),\n                    i = t.get(\"minZoom\"),\n                    o = t.get(\"maxZoom\"),\n                    a = t.get(\"sliderWidthPercent\"),\n                    s = Math.floor(n * a),\n                    u = s * ((1 - i) / (o - i));\n                  return (\n                    \"\\n          .f6-zoom-slider {\\n            width: \" +\n                    s +\n                    \";\\n            height: 30;\\n            margin-left: \" +\n                    Math.floor((n * (1 - a)) / 2) +\n                    \";\\n            padding: 13 0;\\n            top: \" +\n                    (r - 40) +\n                    \";\\n            position: relative;\\n            opacity: 0;\\n          }\\n\\n          .rail {\\n            width: \" +\n                    s +\n                    \";\\n            height: 4;\\n            background-color: #f5f5f5;\\n            border-radius: 2;\\n            opacity: 1;\\n          }\\n\\n          .track {\\n            width: \" +\n                    (u + 2) +\n                    \";\\n            height: 4;\\n            background-color: #91d5ff;\\n            position: absolute;\\n            top: 13;\\n            border-radius: 2;\\n            opacity: 1;\\n          }\\n\\n          .handle {\\n            height: 30;\\n            width: 40;\\n            position: absolute;\\n            top: 0;\\n            left: \" +\n                    (u - 9) +\n                    \";\\n            padding: 9;\\n            opacity: 0;\\n          }\\n\\n          .circle {\\n            height: 13;\\n            width: 13;\\n            border-radius: 6.5;\\n            border: 2px solid #1890ff;\\n            background-color: #fff;\\n            opacity: 1;\\n          }\\n\\n          .text  {\\n            position: absolute;\\n            top: -9;\\n            margin-left: -12;\\n            color: #666;\\n            width: 45;\\n          }\\n        \"\n                  );\n                },\n              };\n            }),\n            (e.prototype.getEvents = function () {\n              return { dragstart: \"onDragStart\", dragend: \"onDragEnd\" };\n            }),\n            (e.prototype.init = function () {\n              var t = this;\n              setTimeout(function () {\n                t.initSlider();\n              });\n            }),\n            (e.prototype.initSlider = function () {\n              var t = this;\n              console.log(\"initSlider\", this);\n              var e = this.get(\"graph\").get(\"uiGroup\"),\n                n = H(this.get(\"getContent\")(), this.get(\"getCss\")(), e),\n                r = n.query(\".handle\"),\n                i = 0;\n              r.on(\"panstart\", function (t) {\n                i = t.clientX;\n              }),\n                r.on(\"panmove\", function (e) {\n                  var n = e.clientX - i;\n                  (i = e.clientX),\n                    t.set(\"dragTimestamp\", +new Date()),\n                    t.updateHandlePosition(n);\n                }),\n                n.setStyle(\"display\", \"none\"),\n                this.set(\"zoomSlider\", n);\n            }),\n            (e.prototype.onDragStart = function () {\n              var t = this.get(\"graph\"),\n                e = t.getZoom(),\n                n = t.get(\"width\"),\n                r = this.get(\"zoomSlider\"),\n                i = this.get(\"minZoom\"),\n                o = this.get(\"maxZoom\"),\n                a = this.get(\"sliderWidthPercent\"),\n                s = r.query(\".track\"),\n                u =\n                  Math.floor(n * a) * ((e - i) / (o - i)) - s.getStyle(\"width\");\n              this.updateHandlePosition(u),\n                clearInterval(this.get(\"clearHandle\")),\n                r.setStyle(\"display\", \"block\");\n            }),\n            (e.prototype.onDragEnd = function () {\n              return Object(h.b)(this, void 0, void 0, function () {\n                var t,\n                  e,\n                  n = this;\n                return Object(h.d)(this, function (r) {\n                  return (\n                    (t = this.get(\"zoomSlider\")),\n                    clearInterval(this.get(\"clearHandle\")),\n                    (e = setInterval(function () {\n                      +new Date() - n.get(\"dragTimestamp\") > 3e3 &&\n                        (clearInterval(n.get(\"clearHandle\")),\n                        t.setStyle(\"display\", \"none\"));\n                    }, 3e3)),\n                    this.set(\"clearHandle\", e),\n                    [2]\n                  );\n                });\n              });\n            }),\n            (e.prototype.updateHandlePosition = function (t) {\n              var e = this.get(\"graph\"),\n                n = this.get(\"zoomSlider\"),\n                r = this.get(\"sliderWidthPercent\"),\n                i = this.get(\"minZoom\"),\n                o = this.get(\"maxZoom\"),\n                a = n.query(\".track\"),\n                s = n.query(\".handle\"),\n                u = a.getStyle(\"width\"),\n                c = e.get(\"width\") * r,\n                h = u + t;\n              h < 0 && (h = 0), h > c && (h = c);\n              var l = (h / c) * (o - i) + i;\n              a.setStyle(\"width\", h),\n                s.setStyle(\"left\", h - 9),\n                s.setText(Math.round(10 * l) / 10 + \" times\"),\n                this.updateScale(l);\n            }),\n            (e.prototype.updateScale = function (t) {\n              var e = this.get(\"graph\");\n              e.zoom(t / e.getZoom());\n            }),\n            e\n          );\n        })(Qe),\n        Qi = Xi.distance,\n        $i = {\n          stroke: \"#000\",\n          strokeOpacity: 0.8,\n          lineWidth: 2,\n          fillOpacity: 1,\n          fill: \"#fff\",\n        },\n        Ji = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (n.isUp = !0), (n.scaleTimer = null), n;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                type: \"both\",\n                trigger: \"drag\",\n                r: 60,\n                delegateStyle: Object(gt.b)($i),\n                showLabel: \"edge\",\n              };\n            }),\n            (e.prototype.getEvents = function () {\n              var t;\n              switch (this.get(\"trigger\")) {\n                case \"click\":\n                  t = { tap: \"filter\" };\n                  break;\n                case \"drag\":\n                  t = { press: \"createDelegate\" };\n                  break;\n                default:\n                  t = { mousemove: \"filter\" };\n              }\n              return t;\n            }),\n            (e.prototype.init = function () {\n              var t = this.get(\"showLabel\"),\n                e = \"node\" === t || \"both\" === t,\n                n = \"edge\" === t || \"both\" === t;\n              this.set(\"showNodeLabel\", e),\n                this.set(\"showEdgeLabel\", n),\n                this.get(\"shouldShow\") ||\n                  this.set(\"shouldShow\", function () {\n                    return !0;\n                  });\n            }),\n            (e.prototype.createDelegate = function (t) {\n              var e = this,\n                n = this,\n                r = n.get(\"delegate\");\n              if (!r || r.destroyed) {\n                var i = this.get(\"graph\"),\n                  o = i.getPointByClient(t.clientX, t.clientY);\n                n.filter(o),\n                  (r = n.get(\"delegate\")).on(\"dragstart\", function (t) {}),\n                  r.on(\"drag\", function (t) {\n                    var e = i.getPointByClient(t.clientX, t.clientY);\n                    n.filter(e);\n                  }),\n                  r.on(\"dragend\", function (t) {\n                    e.clear();\n                  });\n              }\n            }),\n            (e.prototype.scaleRByWheel = function (t, e) {\n              if (t) {\n                t.preventDefault && t.preventDefault();\n                var n,\n                  r = this.get(\"graph\"),\n                  i = this.get(\"delegate\");\n                (i ? { x: i.attr(\"x\"), y: i.attr(\"y\") } : void 0) ||\n                  r.getPointByClient(t.clientX, t.clientY);\n                n = e ? 1 / 0.95 : 0.95;\n                var o = this.get(\"maxR\"),\n                  a = this.get(\"minR\"),\n                  s = this.get(\"r\");\n                ((s > (o || r.get(\"height\")) && n > 1) ||\n                  (s < (a || 0.05 * r.get(\"height\")) && n < 1)) &&\n                  (n = 1),\n                  (s *= n),\n                  this.set(\"r\", s),\n                  this.filter(t);\n              }\n            }),\n            (e.prototype.filter = function (t) {\n              var e = t.x,\n                n = t.y,\n                r = this.get(\"graph\"),\n                i = r.getNodes(),\n                o = {},\n                a = this.get(\"r\"),\n                s = this.get(\"type\"),\n                u = { x: e, y: n };\n              this.updateDelegate(u, a);\n              var c = this.get(\"shouldShow\"),\n                h = this.get(\"vShapes\");\n              h &&\n                h.forEach(function (t) {\n                  t.remove(), t.destroy();\n                }),\n                (h = []),\n                i.forEach(function (t) {\n                  var e = t.getModel(),\n                    n = e.x,\n                    r = e.y;\n                  Qi({ x: n, y: r }, u) < a && (o[e.id] = t);\n                });\n              var l = r.getEdges(),\n                d = [];\n              l.forEach(function (t) {\n                var e = t.getModel(),\n                  n = e.source,\n                  r = e.target;\n                c(e) &&\n                  (\"only-source\" === s || \"one\" === s\n                    ? o[n] && !o[r] && d.push(t)\n                    : \"only-target\" === s || \"one\" === s\n                    ? o[r] && !o[n] && d.push(t)\n                    : \"both\" === s && o[n] && o[r] && d.push(t));\n              });\n              var f = this.get(\"showNodeLabel\"),\n                p = this.get(\"showEdgelabel\"),\n                g = r.get(\"group\");\n              d.forEach(function (t) {\n                t.get(\"group\")\n                  .get(\"children\")\n                  .forEach(function (t) {\n                    var e = t.get(\"type\"),\n                      n = g.addShape(e, { attrs: t.attr(), capture: !1 });\n                    h.push(n), f && \"text\" === e && n.set(\"visible\", !0);\n                  });\n              }),\n                Object.keys(o).forEach(function (t) {\n                  var e = o[t].get(\"group\").clone();\n                  if ((e.set(\"capture\", !1), g.add(e), h.push(e), p))\n                    for (var n = e.get(\"children\"), r = 0; r < n.length; r++) {\n                      var i = n[r];\n                      \"text\" === i.get(\"type\") && i.set(\"visible\", !0);\n                    }\n                }),\n                this.set(\"vShapes\", h);\n            }),\n            (e.prototype.updateParams = function (t) {\n              var e = t.r,\n                n = t.trigger,\n                r = t.minR,\n                i = t.maxR,\n                o = t.showLabel,\n                a = t.shouldShow;\n              isNaN(t.r) || this.set(\"r\", e),\n                isNaN(i) || this.set(\"maxR\", i),\n                isNaN(r) || this.set(\"minR\", r),\n                \"tab\" === n && this.set(\"trigger\", n),\n                (\"node\" !== o && \"both\" !== o) || this.set(\"showNodeLabel\", !0),\n                (\"edge\" !== o && \"both\" !== o) || this.set(\"showEdgeLabel\", !0),\n                a && this.set(\"shouldShow\", a);\n            }),\n            (e.prototype.updateDelegate = function (t, e) {\n              var n = this.get(\"graph\"),\n                r = this.get(\"delegate\");\n              if (!r || r.destroyed) {\n                var i = n.get(\"group\"),\n                  o = this.get(\"delegateStyle\") || $i;\n                r = i.addShape(\"circle\", {\n                  attrs: Object(h.a)({ r: e, x: t.x, y: t.y }, o),\n                  name: \"lens-shape\",\n                  draggable: !0,\n                  zIndex: 1e3,\n                });\n              } else r.attr({ x: t.x, y: t.y, r: e });\n              this.set(\"delegate\", r);\n            }),\n            (e.prototype.clear = function () {\n              var t = this.get(\"vShapes\");\n              t &&\n                t.forEach(function (t) {\n                  t.remove(), t.destroy();\n                }),\n                (t = []),\n                this.set(\"vShapes\", t);\n              var e = this.get(\"delegate\");\n              e && !e.destroyed && (e.remove(), e.destroy());\n            }),\n            (e.prototype.destroy = function () {\n              this.clear();\n            }),\n            e\n          );\n        })(Qe),\n        to = {\n          stroke: \"#000\",\n          strokeOpacity: 0.8,\n          lineWidth: 2,\n          fillOpacity: 0.1,\n          fill: \"#ccc\",\n        },\n        eo = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                trigger: \"tap\",\n                d: 1.5,\n                r: 300,\n                delegateStyle: Object(gt.b)(to),\n                showLabel: !1,\n                maxD: 5,\n                minD: 0,\n                scaleRBy: \"unset\",\n                scaleDBy: \"unset\",\n                showDPercent: !0,\n              };\n            }),\n            (e.prototype.getEvents = function () {\n              var t;\n              switch (this.get(\"trigger\")) {\n                case \"tap\":\n                  t = { tap: \"magnify\" };\n                  break;\n                case \"drag\":\n                  t = { press: \"createDelegate\" };\n                  break;\n                default:\n                  t = { tap: \"magnify\" };\n              }\n              return t;\n            }),\n            (e.prototype.init = function () {\n              var t = this.get(\"r\");\n              this.set(\"cachedMagnifiedModels\", []),\n                this.set(\"cachedOriginPositions\", {}),\n                this.set(\"r2\", t * t);\n              var e = this.get(\"d\");\n              this.set(\"molecularParam\", (e + 1) * t);\n            }),\n            (e.prototype.createDelegate = function (t) {\n              var e = this,\n                n = this,\n                r = n.get(\"delegate\");\n              (r && !r.destroyed) ||\n                (n.magnify(t),\n                (r = n.get(\"delegate\")).on(\"dragstart\", function (t) {\n                  n.set(\"delegateCenterDiff\", {\n                    x: r.attr(\"x\") - t.x,\n                    y: r.attr(\"y\") - t.y,\n                  });\n                }),\n                r.on(\"drag\", function (t) {\n                  n.magnify(t);\n                }),\n                r.on(\"dragend\", function (t) {\n                  e.clear();\n                }),\n                \"wheel\" === this.get(\"scaleDBy\") &&\n                  r.on(\"mousewheel\", function (t) {\n                    e.scaleDByWheel(t);\n                  }),\n                \"wheel\" === this.get(\"scaleRBy\") &&\n                  r.on(\"mousewheel\", function (t) {\n                    n.scaleRByWheel(t);\n                  }));\n            }),\n            (e.prototype.scaleRByWheel = function (t) {\n              if (t && t.originalEvent) {\n                t.preventDefault && t.preventDefault();\n                var e,\n                  n = this.get(\"graph\"),\n                  r = this.get(\"delegate\"),\n                  i =\n                    (r ? { x: r.attr(\"x\"), y: r.attr(\"y\") } : void 0) ||\n                    n.getPointByClient(t.clientX, t.clientY);\n                e = t.originalEvent.wheelDelta < 0 ? 0.95 : 1 / 0.95;\n                var o = this.get(\"maxR\"),\n                  a = this.get(\"minR\"),\n                  s = this.get(\"r\");\n                ((s > (o || n.get(\"height\")) && e > 1) ||\n                  (s < (a || 0.05 * n.get(\"height\")) && e < 1)) &&\n                  (e = 1),\n                  (s *= e),\n                  this.set(\"r\", s),\n                  this.set(\"r2\", s * s);\n                var u = this.get(\"d\");\n                this.set(\"molecularParam\", (u + 1) * s),\n                  this.set(\"delegateCenterDiff\", void 0),\n                  this.magnify(t, i);\n              }\n            }),\n            (e.prototype.scaleRByDrag = function (t) {\n              if (t) {\n                var e,\n                  n = this.get(\"dragPrePos\"),\n                  r = this.get(\"graph\"),\n                  i = r.getPointByClient(t.clientX, t.clientY);\n                e = t.x - n.x < 0 ? 0.95 : 1 / 0.95;\n                var o = this.get(\"maxR\"),\n                  a = this.get(\"minR\"),\n                  s = this.get(\"r\");\n                ((s > (o || r.get(\"height\")) && e > 1) ||\n                  (s < (a || 0.05 * r.get(\"height\")) && e < 1)) &&\n                  (e = 1),\n                  (s *= e),\n                  this.set(\"r\", s),\n                  this.set(\"r2\", s * s);\n                var u = this.get(\"d\");\n                this.set(\"molecularParam\", (u + 1) * s),\n                  this.magnify(t, i),\n                  this.set(\"dragPrePos\", { x: t.x, y: t.y });\n              }\n            }),\n            (e.prototype.scaleDByWheel = function (t) {\n              if (t || t.originalEvent) {\n                t.preventDefault && t.preventDefault();\n                var e = 0;\n                e = t.originalEvent.wheelDelta < 0 ? -0.1 : 0.1;\n                var n = this.get(\"d\") + e,\n                  r = this.get(\"maxD\"),\n                  i = this.get(\"minD\");\n                if (n < r && n > i) {\n                  this.set(\"d\", n);\n                  var o = this.get(\"r\");\n                  this.set(\"molecularParam\", (n + 1) * o);\n                  var a = this.get(\"delegate\"),\n                    s = a ? { x: a.attr(\"x\"), y: a.attr(\"y\") } : void 0;\n                  this.set(\"delegateCenterDiff\", void 0), this.magnify(t, s);\n                }\n              }\n            }),\n            (e.prototype.scaleDByDrag = function (t) {\n              var e = this.get(\"dragPrePos\"),\n                n = t.x - e.x > 0 ? 0.1 : -0.1,\n                r = this.get(\"d\") + n,\n                i = this.get(\"maxD\"),\n                o = this.get(\"minD\");\n              if (r < i && r > o) {\n                this.set(\"d\", r);\n                var a = this.get(\"r\");\n                this.set(\"molecularParam\", (r + 1) * a), this.magnify(t);\n              }\n              this.set(\"dragPrePos\", { x: t.x, y: t.y });\n            }),\n            (e.prototype.magnify = function (t, e) {\n              this.restoreCache();\n              var n = this.get(\"graph\"),\n                r = this.get(\"cachedMagnifiedModels\"),\n                i = this.get(\"cachedOriginPositions\"),\n                o = this.get(\"showLabel\"),\n                a = this.get(\"r\"),\n                s = this.get(\"r2\"),\n                u = this.get(\"d\"),\n                c = this.get(\"molecularParam\"),\n                h = n.getNodes(),\n                l = h.length,\n                d = e ? { x: e.x, y: e.y } : { x: t.x, y: t.y };\n              !this.get(\"dragging\") ||\n                (\"mousemove\" !== this.get(\"trigger\") &&\n                  \"tap\" !== this.get(\"trigger\")) ||\n                ((d = this.get(\"cacheCenter\")),\n                (d = n.getPointByClient(d.x, d.y)));\n              var f = this.get(\"delegateCenterDiff\");\n              f && ((d.x += f.x), (d.y += f.y)), this.updateDelegate(d, a);\n              for (var p = 0; p < l; p++) {\n                var g = h[p].getModel(),\n                  y = g.x,\n                  v = g.y;\n                if (!isNaN(y) && !isNaN(v)) {\n                  var m = (y - d.x) * (y - d.x) + (v - d.y) * (v - d.y);\n                  if (!isNaN(m) && m < s && 0 !== m) {\n                    var b = Math.sqrt(m),\n                      x = (c * b) / (u * b + a),\n                      w = (y - d.x) / b,\n                      O = (v - d.y) / b;\n                    if (\n                      ((g.x = w * x + d.x),\n                      (g.y = O * x + d.y),\n                      i[g.id] || (i[g.id] = { x: y, y: v, texts: [] }),\n                      r.push(g),\n                      o && 2 * b < a)\n                    )\n                      for (\n                        var M = h[p].getContainer().getChildren(),\n                          S = M.length,\n                          C = 0;\n                        C < S;\n                        C++\n                      ) {\n                        var j = M[C];\n                        \"text\" === j.get(\"type\") &&\n                          (i[g.id].texts.push({\n                            visible: j.get(\"visible\"),\n                            shape: j,\n                          }),\n                          j.set(\"visible\", !0));\n                      }\n                  }\n                }\n              }\n              n.refreshPositions();\n            }),\n            (e.prototype.restoreCache = function () {\n              for (\n                var t = this.get(\"cachedMagnifiedModels\"),\n                  e = this.get(\"cachedOriginPositions\"),\n                  n = t.length,\n                  r = 0;\n                r < n;\n                r++\n              ) {\n                var i = t[r],\n                  o = e[i.id];\n                (i.x = o.x), (i.y = o.y);\n                for (var a = o.texts.length, s = 0; s < a; s++) {\n                  var u = o.texts[s];\n                  u.shape.set(\"visible\", u.visible);\n                }\n              }\n              this.set(\"cachedMagnifiedModels\", []),\n                this.set(\"cachedOriginPositions\", {});\n            }),\n            (e.prototype.updateParams = function (t) {\n              var e = t.r,\n                n = t.d,\n                r = t.trigger,\n                i = t.minD,\n                o = t.maxD,\n                a = t.minR,\n                s = t.maxR,\n                u = t.scaleDBy,\n                c = t.scaleRBy;\n              isNaN(t.r) || (this.set(\"r\", e), this.set(\"r2\", e * e)),\n                isNaN(n) || this.set(\"d\", n),\n                isNaN(o) || this.set(\"maxD\", o),\n                isNaN(i) || this.set(\"minD\", i),\n                isNaN(s) || this.set(\"maxR\", s),\n                isNaN(a) || this.set(\"minR\", a);\n              var h,\n                l = this.get(\"d\"),\n                d = this.get(\"r\");\n              (this.set(\"molecularParam\", (l + 1) * d),\n              (\"mousemove\" !== r && \"tap\" !== r && \"drag\" !== r) ||\n                this.set(\"trigger\", r),\n              \"drag\" === u || \"unset\" === u) &&\n                (this.set(\"scaleDBy\", u),\n                this.get(\"delegate\").remove(),\n                this.get(\"delegate\").destroy(),\n                (h = this.get(\"dPercentText\")) && (h.remove(), h.destroy()));\n              (\"drag\" !== c && \"unset\" !== c) ||\n                (this.set(\"scaleRBy\", c),\n                this.get(\"delegate\").remove(),\n                this.get(\"delegate\").destroy(),\n                (h = this.get(\"dPercentText\")) && (h.remove(), h.destroy()));\n            }),\n            (e.prototype.updateDelegate = function (t, e) {\n              var n = this,\n                r = this,\n                i = r.get(\"graph\"),\n                o = r.get(\"delegate\");\n              if (!o || o.destroyed) {\n                var a = i.get(\"group\"),\n                  s = r.get(\"delegateStyle\") || to;\n                (o = a.addShape(\"circle\", {\n                  attrs: Object(h.a)({ r: e / 1.5, x: t.x, y: t.y }, s),\n                  name: \"lens-shape\",\n                  draggable: !0,\n                })),\n                  \"drag\" !== this.get(\"trigger\") &&\n                    (\"wheel\" === this.get(\"scaleRBy\")\n                      ? o.on(\"mousewheel\", function (t) {\n                          r.scaleRByWheel(t);\n                        })\n                      : \"drag\" === this.get(\"scaleRBy\") &&\n                        (o.on(\"dragstart\", function (t) {\n                          r.set(\"dragging\", !0),\n                            r.set(\"cacheCenter\", { x: t.x, y: t.y }),\n                            r.set(\"dragPrePos\", { x: t.x, y: t.y });\n                        }),\n                        o.on(\"drag\", function (t) {\n                          r.scaleRByDrag(t);\n                        }),\n                        o.on(\"dragend\", function (t) {\n                          r.set(\"dragging\", !1);\n                        })),\n                    \"wheel\" === this.get(\"scaleDBy\")\n                      ? o.on(\"mousewheel\", function (t) {\n                          n.scaleDByWheel(t);\n                        })\n                      : \"drag\" === this.get(\"scaleDBy\") &&\n                        (o.on(\"dragstart\", function (t) {\n                          r.set(\"dragging\", !0),\n                            r.set(\"cacheCenter\", { x: t.x, y: t.y }),\n                            r.set(\"dragPrePos\", { x: t.x, y: t.y });\n                        }),\n                        o.on(\"drag\", function (t) {\n                          n.scaleDByDrag(t);\n                        }),\n                        o.on(\"dragend\", function (t) {\n                          r.set(\"dragging\", !1);\n                        })));\n              } else o.attr({ x: t.x, y: t.y, r: e / 1.5 });\n              if (r.get(\"showDPercent\")) {\n                var u = Math.round(\n                    ((r.get(\"d\") - r.get(\"minD\")) /\n                      (r.get(\"maxD\") - r.get(\"minD\"))) *\n                      100,\n                  ),\n                  c = r.get(\"dPercentText\"),\n                  l = t.y + e / 1.5 + 16;\n                if (!c || c.destroyed)\n                  (c = (a = i.get(\"group\")).addShape(\"text\", {\n                    attrs: {\n                      text: u + \"%\",\n                      x: t.x,\n                      y: l,\n                      fill: \"#aaa\",\n                      stroke: \"#fff\",\n                      lineWidth: 1,\n                      fontSize: 12,\n                    },\n                  })),\n                    r.set(\"dPercentText\", c);\n                else c.attr({ text: u + \"%\", x: t.x, y: l });\n              }\n              r.set(\"delegate\", o);\n            }),\n            (e.prototype.clear = function () {\n              var t = this.get(\"graph\");\n              this.restoreCache(), t.refreshPositions();\n              var e = this.get(\"delegate\");\n              e && !e.destroyed && (e.remove(), e.destroy());\n              var n = this.get(\"dPercentText\");\n              n && !n.destroyed && (n.remove(), n.destroy()),\n                this.set(\"delegateCenterDiff\", void 0);\n            }),\n            (e.prototype.destroy = function () {\n              this.clear();\n            }),\n            e\n          );\n        })(Qe),\n        no = Math.max,\n        ro = sn.a.transform,\n        io = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.handleUpdateCanvas = Object(gt.c)(\n                function (t) {\n                  var e = n;\n                  e.destroyed || e.updateCanvas();\n                },\n                100,\n                !1,\n              )),\n              n\n            );\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                container: null,\n                className: \"\",\n                viewportClassName: \"\",\n                type: \"default\",\n                padding: 50,\n                size: [200, 120],\n                delegateStyle: { fill: \"#40a9ff\", stroke: \"#096dd9\" },\n                refresh: !0,\n              };\n            }),\n            (e.prototype.getEvents = function () {\n              return {\n                beforepaint: \"updateViewport\",\n                beforeanimate: \"disableRefresh\",\n                afteranimate: \"enableRefresh\",\n                viewportchange: \"disableOneRefresh\",\n              };\n            }),\n            (e.prototype.disableRefresh = function () {\n              this.set(\"refresh\", !1);\n            }),\n            (e.prototype.enableRefresh = function () {\n              this.set(\"refresh\", !0), this.updateCanvas();\n            }),\n            (e.prototype.disableOneRefresh = function () {\n              this.set(\"viewportChange\", !0);\n            }),\n            (e.prototype.initViewport = function () {\n              var t = this,\n                e = this._cfgs,\n                n = e.size,\n                r = e.graph;\n              if (!this.destroyed) {\n                var i = this.get(\"container\").query(\".viewport\"),\n                  o = 0,\n                  a = 0,\n                  s = !1,\n                  u = 0,\n                  c = 0,\n                  h = 0,\n                  l = 0,\n                  d = 0,\n                  f = 0;\n                i.on(\"panstart\", function (p) {\n                  (e.refresh = !1),\n                    (u = parseInt(i.getStyle(\"left\"), 10)),\n                    (c = parseInt(i.getStyle(\"top\"), 10)),\n                    (h = parseInt(i.getStyle(\"width\"), 10)),\n                    (l = parseInt(i.getStyle(\"height\"), 10)),\n                    h > n[0] ||\n                      l > n[1] ||\n                      ((f = r.getZoom()),\n                      (d = t.get(\"ratio\")),\n                      (s = !0),\n                      (o = p.x),\n                      (a = p.y));\n                }),\n                  i.on(\n                    \"panmove\",\n                    function (t) {\n                      if (s && !Object(gt.s)(t.x) && !Object(gt.s)(t.y)) {\n                        var e = o - t.x,\n                          i = a - t.y;\n                        (u - e < 0 || u - e + h >= n[0]) && (e = 0),\n                          (c - i < 0 || c - i + l >= n[1]) && (i = 0),\n                          (u -= e),\n                          (c -= i),\n                          r.translate((e * f) / d, (i * f) / d),\n                          (o = t.x),\n                          (a = t.y);\n                      }\n                    },\n                    !1,\n                  ),\n                  i.on(\n                    \"panend\",\n                    function () {\n                      (s = !1), (e.refresh = !0);\n                    },\n                    !1,\n                  ),\n                  this.set(\"viewport\", i);\n              }\n            }),\n            (e.prototype.updateViewport = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"ratio\"),\n                  e = this.get(\"totaldx\"),\n                  n = this.get(\"totaldy\"),\n                  r = this.get(\"graph\"),\n                  i = this.get(\"size\"),\n                  o = r.get(\"width\"),\n                  a = r.get(\"height\"),\n                  s = r.getPointByCanvas(0, 0),\n                  u = r.getPointByCanvas(o, a),\n                  c = this.get(\"viewport\"),\n                  h = (u.x - s.x) * t,\n                  l = (u.y - s.y) * t,\n                  d = s.x * t + e,\n                  f = s.y * t + n,\n                  p = d + h,\n                  g = f + l;\n                d < 0 && ((h += d), (d = 0)),\n                  p > i[0] && (h -= p - i[0]),\n                  f < 0 && ((l += f), (f = 0)),\n                  g > i[1] && (l -= g - i[1]),\n                  this.set(\"ratio\", t),\n                  c &&\n                    (c.setStyle(\"left\", d),\n                    c.setStyle(\"top\", f),\n                    c.setStyle(\"width\", h),\n                    c.setStyle(\"height\", l));\n              }\n            }),\n            (e.prototype.updateGraphShapes = function () {\n              var t = this._cfgs.graph.get(\"group\");\n              if (!t.destroyed) {\n                var e = t.clone(),\n                  n = this.get(\"groupCanvas\");\n                e.resetMatrix(), n.clear(), n.add(e);\n              }\n            }),\n            (e.prototype.updateKeyShapes = function () {\n              var t = this,\n                e = this._cfgs.graph,\n                n = this.get(\"groupCanvas\");\n              Object(gt.e)(e.getEdges(), function (e) {\n                t.updateOneEdgeKeyShape(e, n);\n              }),\n                Object(gt.e)(e.getNodes(), function (e) {\n                  t.updateOneNodeKeyShape(e, n);\n                });\n              var r = e.getCombos();\n              if (r && r.length) {\n                var i =\n                  n.find(function (t) {\n                    return \"comboGroup\" === t.get(\"name\");\n                  }) || n.addGroup({ name: \"comboGroup\" });\n                setTimeout(function () {\n                  t.destroyed ||\n                    (Object(gt.e)(r, function (e) {\n                      t.updateOneComboKeyShape(e, i);\n                    }),\n                    null == i || i.sort(),\n                    null == i || i.toBack(),\n                    t.updateCanvas());\n                }, 250);\n              }\n              this.clearDestroyedShapes();\n            }),\n            (e.prototype.updateOneComboKeyShape = function (t, e) {\n              if (!this.destroyed) {\n                var n = this.get(\"itemMap\") || {},\n                  r = n[t.get(\"id\")],\n                  i = t.getBBox(),\n                  o = t.get(\"keyShape\").clone(),\n                  a = o.attr(),\n                  s = { x: i.centerX, y: i.centerY };\n                r ? (s = Object.assign(a, s)) : ((r = o), e.add(r));\n                var u = r.get(\"type\");\n                (\"rect\" !== u && \"image\" !== u) ||\n                  ((s.x = i.minX), (s.y = i.minY)),\n                  r.attr(s),\n                  t.isVisible() ? r.show() : r.hide(),\n                  (r.exist = !0);\n                var c = t.getModel().depth;\n                isNaN(c) || r.set(\"zIndex\", c),\n                  (n[t.get(\"id\")] = r),\n                  this.set(\"itemMap\", n);\n              }\n            }),\n            (e.prototype.updateOneNodeKeyShape = function (t, e) {\n              var n = this.get(\"itemMap\") || {},\n                r = n[t.get(\"id\")],\n                i = t.getBBox(),\n                o = t.get(\"keyShape\").clone(),\n                a = o.attr(),\n                s = { x: i.centerX, y: i.centerY };\n              r ? (s = Object.assign(a, s)) : ((r = o), e.add(r));\n              var u = r.get(\"type\");\n              (\"rect\" !== u && \"image\" !== u) ||\n                ((s.x = i.minX), (s.y = i.minY)),\n                r.attr(s),\n                t.isVisible() ? r.show() : r.hide(),\n                (r.exist = !0);\n              var c = t.getModel().depth;\n              isNaN(c) || r.set(\"zIndex\", c),\n                (n[t.get(\"id\")] = r),\n                this.set(\"itemMap\", n);\n            }),\n            (e.prototype.updateDelegateShapes = function () {\n              var t = this,\n                e = this._cfgs.graph,\n                n = this.get(\"groupCanvas\");\n              Object(gt.e)(e.getEdges(), function (e) {\n                t.updateOneEdgeKeyShape(e, n);\n              }),\n                Object(gt.e)(e.getNodes(), function (e) {\n                  t.updateOneNodeDelegateShape(e, n);\n                });\n              var r = e.getCombos();\n              if (r && r.length) {\n                var i =\n                  n.find(function (t) {\n                    return \"comboGroup\" === t.get(\"name\");\n                  }) || n.addGroup({ name: \"comboGroup\" });\n                setTimeout(function () {\n                  t.destroyed ||\n                    (Object(gt.e)(r, function (e) {\n                      t.updateOneComboKeyShape(e, i);\n                    }),\n                    null == i || i.sort(),\n                    null == i || i.toBack(),\n                    t.updateCanvas());\n                }, 250);\n              }\n              this.clearDestroyedShapes();\n            }),\n            (e.prototype.clearDestroyedShapes = function () {\n              var t = this.get(\"itemMap\") || {},\n                e = Object.keys(t);\n              if (e && 0 !== e.length)\n                for (var n = e.length - 1; n >= 0; n--) {\n                  var r = t[e[n]],\n                    i = r.exist;\n                  (r.exist = !1), i || (r.remove(), delete t[e[n]]);\n                }\n            }),\n            (e.prototype.updateOneEdgeKeyShape = function (t, e) {\n              var n = this.get(\"itemMap\") || {},\n                r = n[t.get(\"id\")];\n              if (r) {\n                var i = t.get(\"keyShape\").attr(\"path\");\n                r.attr(\"path\", i);\n              } else (r = t.get(\"keyShape\").clone()), e.add(r);\n              t.isVisible() ? r.show() : r.hide(),\n                (r.exist = !0),\n                (n[t.get(\"id\")] = r),\n                this.set(\"itemMap\", n);\n            }),\n            (e.prototype.updateOneNodeDelegateShape = function (t, e) {\n              var n = this.get(\"delegateStyle\"),\n                r = this.get(\"itemMap\") || {},\n                i = r[t.get(\"id\")],\n                o = t.getBBox();\n              if (i) {\n                var a = {\n                  x: o.minX,\n                  y: o.minY,\n                  width: o.width,\n                  height: o.height,\n                };\n                i.attr(a);\n              } else\n                i = e.addShape(\"rect\", {\n                  attrs: Object(h.a)(\n                    { x: o.minX, y: o.minY, width: o.width, height: o.height },\n                    n,\n                  ),\n                  name: \"minimap-node-shape\",\n                });\n              t.isVisible() ? i.show() : i.hide(),\n                (i.exist = !0),\n                (r[t.get(\"id\")] = i),\n                this.set(\"itemMap\", r);\n            }),\n            (e.prototype.init = function () {\n              var t = this;\n              this.get(\"graph\").on(\"afterupdateitem\", this.handleUpdateCanvas),\n                this.get(\"graph\").on(\n                  \"afteritemstatechange\",\n                  this.handleUpdateCanvas,\n                ),\n                this.get(\"graph\").on(\"afteradditem\", this.handleUpdateCanvas),\n                this.get(\"graph\").on(\n                  \"afterremoveitem\",\n                  this.handleUpdateCanvas,\n                ),\n                this.get(\"graph\").on(\"afterrender\", this.handleUpdateCanvas),\n                this.get(\"graph\").on(\"afterlayout\", this.handleUpdateCanvas),\n                setTimeout(function () {\n                  t.initContainer();\n                });\n            }),\n            (e.prototype.initContainer = function () {\n              var t,\n                e = this.get(\"graph\"),\n                n = this.get(\"size\"),\n                r = this.get(\"className\"),\n                i = this.get(\"viewportClassName\"),\n                o = this.get(\"getCss\"),\n                a = H(\n                  \"\\n    <div class='f6-minimap \" +\n                    r +\n                    '\\'>\\n      <div class=\"f6-minimap-container\"></div>\\n      <div class=\"viewport ' +\n                    i +\n                    '\"></div>\\n    </div>',\n                  \"\\n      root {\\n        width: \" +\n                    e.getWidth() +\n                    \";\\n        height: \" +\n                    e.getHeight() +\n                    \";\\n        opacity: 0;\\n        pointer-events: none;\\n      }\\n      .f6-minimap{ \\n        position: absolute;\\n        left: 0;\\n        bottom: 0;\\n        width: \" +\n                    n[0] +\n                    \"; height: \" +\n                    n[1] +\n                    \";\\n      } \\n      .f6-minimap-container{\\n        position: relative;\\n        background: rgba(0,0,0,0);\\n        width: \" +\n                    n[0] +\n                    \"; height: \" +\n                    n[1] +\n                    \";\\n      }\\n      .viewport{\\n        position: absolute;\\n        border: 3 solid blue;\\n        width: 100;\\n        height: 100;\\n        background: rgba(0,0,0,0);\\n        z-index: 1000;\\n      }\\n      \" +\n                    (null !== (t = null == o ? void 0 : o()) && void 0 !== t\n                      ? t\n                      : \"\") +\n                    \"\\n    \",\n                  e.get(\"uiGroup\"),\n                ),\n                s = a.query(\".f6-minimap-container\").gNode.addGroup();\n              this.set(\"groupCanvas\", s),\n                this.set(\"container\", a),\n                this.updateCanvas(),\n                this.initViewport();\n            }),\n            (e.prototype.updateCanvas = function () {\n              if (!this.destroyed && this.get(\"refresh\")) {\n                var t = this.get(\"graph\");\n                if (!t.get(\"destroyed\")) {\n                  this.get(\"viewportChange\") &&\n                    (this.set(\"viewportChange\", !1), this.updateViewport());\n                  var e = this.get(\"size\"),\n                    n = this.get(\"type\"),\n                    r = this.get(\"padding\");\n                  switch (n) {\n                    case \"default\":\n                      this.updateGraphShapes();\n                      break;\n                    case \"keyShape\":\n                      this.updateKeyShapes();\n                      break;\n                    case \"delegate\":\n                      this.updateDelegateShapes();\n                  }\n                  var i = this.get(\"groupCanvas\");\n                  if (i) {\n                    i.resetMatrix();\n                    var o = i.getBBox(),\n                      a = t.get(\"group\").getCanvasBBox(),\n                      s = t.getZoom() || 1,\n                      u = a.width / s,\n                      c = a.height / s;\n                    Number.isFinite(o.width) &&\n                      ((u = no(o.width, u)), (c = no(o.height, c))),\n                      (u += 2 * r),\n                      (c += 2 * r);\n                    var h = Math.min(e[0] / u, e[1] / c),\n                      l = [1, 0, 0, 0, 1, 0, 0, 0, 1],\n                      d = 0,\n                      f = 0;\n                    Number.isFinite(o.minX) && (d = -o.minX),\n                      Number.isFinite(o.minY) && (f = -o.minY);\n                    var p = (e[0] - (u - 2 * r) * h) / 2,\n                      g = (e[1] - (c - 2 * r) * h) / 2;\n                    (l = ro(l, [\n                      [\"t\", d, f],\n                      [\"s\", h, h],\n                      [\"t\", p, g],\n                    ])),\n                      i.setMatrix(l),\n                      this.set(\"ratio\", h),\n                      this.set(\"totaldx\", p + d * h),\n                      this.set(\"totaldy\", g + f * h),\n                      this.set(\"dx\", p),\n                      this.set(\"dy\", g),\n                      this.updateViewport();\n                  }\n                }\n              }\n            }),\n            (e.prototype.getCanvas = function () {\n              return this.get(\"canvas\");\n            }),\n            (e.prototype.getViewport = function () {\n              return this.get(\"viewport\");\n            }),\n            (e.prototype.getContainer = function () {\n              return this.get(\"container\");\n            }),\n            (e.prototype.destroy = function () {\n              var t;\n              null === (t = this.get(\"container\")) ||\n                void 0 === t ||\n                t.remove();\n            }),\n            e\n          );\n        })(Qe);\n      function oo(t, e, n) {\n        var r = t.x - e.x,\n          i = t.y - e.y;\n        return !n || Math.abs(r) > n || Math.abs(i) > n\n          ? Math.sqrt(r * r + i * i)\n          : n;\n      }\n      function ao(t, e) {\n        var n = (e.source.y - e.target.y) / (e.source.x - e.target.x),\n          r = (n * n * e.source.x + n * (t.y - e.source.y) + t.x) / (n * n + 1);\n        return { x: r, y: n * (r - e.source.x) + e.source.y };\n      }\n      var so = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                edgeBundles: [],\n                edgePoints: [],\n                K: 0.1,\n                lambda: 0.1,\n                divisions: 1,\n                divRate: 2,\n                cycles: 6,\n                iterations: 90,\n                iterRate: 0.6666667,\n                bundleThreshold: 0.6,\n                eps: 1e-6,\n                onLayoutEnd: function () {},\n                onTick: function () {},\n              };\n            }),\n            (e.prototype.init = function () {\n              var t = this.get(\"graph\"),\n                e = this.get(\"onTick\");\n              this.set(\"tick\", function () {\n                e && e(), t.refreshPositions();\n              });\n            }),\n            (e.prototype.bundling = function (t) {\n              var e = this;\n              if ((e.set(\"data\", t), !e.isTicking())) {\n                var n = t.edges || [],\n                  r = t.nodes || [],\n                  i = {},\n                  o = !1;\n                if (\n                  (r.forEach(function (t) {\n                    (null !== t.x &&\n                      null !== !t.y &&\n                      void 0 !== t.x &&\n                      void 0 !== !t.y) ||\n                      (o = !0),\n                      (i[t.id] = t);\n                  }),\n                  o)\n                )\n                  throw new Error(\n                    \"please layout the graph or assign x and y for nodes first\",\n                  );\n                e.set(\"nodeIdMap\", i);\n                var a = e.get(\"divisions\"),\n                  s = e.get(\"divRate\"),\n                  u = e.divideEdges(a);\n                e.set(\"edgePoints\", u);\n                var c = e.getEdgeBundles();\n                e.set(\"edgeBundles\", c);\n                for (\n                  var h = e.get(\"cycles\"),\n                    l = e.get(\"iterations\"),\n                    d = e.get(\"iterRate\"),\n                    f = e.get(\"lambda\"),\n                    p = 0;\n                  p < h;\n                  p++\n                ) {\n                  for (\n                    var g = function (t) {\n                        var r = [];\n                        n.forEach(function (t, n) {\n                          if (t.source !== t.target) {\n                            var o = i[t.source],\n                              s = i[t.target];\n                            r[n] = e.getEdgeForces(\n                              { source: o, target: s },\n                              n,\n                              a,\n                              f,\n                            );\n                            for (var c = 0; c < a + 1; c++)\n                              (u[n][c].x += r[n][c].x),\n                                (u[n][c].y += r[n][c].y);\n                          }\n                        });\n                      },\n                      y = 0;\n                    y < l;\n                    y++\n                  )\n                    g();\n                  (f /= 2),\n                    (a *= s),\n                    (l *= d),\n                    (u = e.divideEdges(a)),\n                    e.set(\"edgePoints\", u);\n                }\n                n.forEach(function (t, e) {\n                  t.source !== t.target &&\n                    ((t.type = \"polyline\"),\n                    (t.controlPoints = u[e].slice(1, u[e].length - 1)));\n                }),\n                  e.get(\"graph\").refresh();\n              }\n            }),\n            (e.prototype.updateBundling = function (t) {\n              var e = this,\n                n = t.data;\n              if (\n                (n && e.set(\"data\", n),\n                e.get(\"ticking\") && e.set(\"ticking\", !1),\n                Object.keys(t).forEach(function (n) {\n                  e.set(n, t[n]);\n                }),\n                t.onTick)\n              ) {\n                var r = this.get(\"graph\");\n                e.set(\"tick\", function () {\n                  t.onTick(), r.refresh();\n                });\n              }\n              e.bundling(n);\n            }),\n            (e.prototype.divideEdges = function (t) {\n              var e = this,\n                n = e.get(\"data\").edges,\n                r = e.get(\"nodeIdMap\"),\n                i = e.get(\"edgePoints\");\n              return (\n                (i && void 0 !== i) || (i = []),\n                n.forEach(function (n, o) {\n                  (i[o] && void 0 !== i[o]) || (i[o] = []);\n                  var a = r[n.source],\n                    s = r[n.target];\n                  if (1 === t)\n                    i[o].push({ x: a.x, y: a.y }),\n                      i[o].push({ x: 0.5 * (a.x + s.x), y: 0.5 * (a.y + s.y) }),\n                      i[o].push({ x: s.x, y: s.y });\n                  else {\n                    var u =\n                        (i[o] && i[o] !== []\n                          ? e.getEdgeLength(i[o])\n                          : oo({ x: a.x, y: a.y }, { x: s.x, y: s.y })) /\n                        (t + 1),\n                      c = u,\n                      h = [{ x: a.x, y: a.y }];\n                    i[o].forEach(function (t, e) {\n                      if (0 !== e) {\n                        for (var n = oo(t, i[o][e - 1]); n > c; ) {\n                          var r = c / n,\n                            a = { x: i[o][e - 1].x, y: i[o][e - 1].y };\n                          (a.x += r * (t.x - i[o][e - 1].x)),\n                            (a.y += r * (t.y - i[o][e - 1].y)),\n                            h.push(a),\n                            (n -= c),\n                            (c = u);\n                        }\n                        c -= n;\n                      }\n                    }),\n                      h.push({ x: s.x, y: s.y }),\n                      (i[o] = h);\n                  }\n                }),\n                i\n              );\n            }),\n            (e.prototype.getEdgeLength = function (t) {\n              var e = 0;\n              return (\n                t.forEach(function (n, r) {\n                  0 !== r && (e += oo(n, t[r - 1]));\n                }),\n                e\n              );\n            }),\n            (e.prototype.getEdgeBundles = function () {\n              var t = this,\n                e = t.get(\"data\").edges || [],\n                n = t.get(\"bundleThreshold\"),\n                r = t.get(\"nodeIdMap\"),\n                i = t.get(\"edgeBundles\");\n              return (\n                i || (i = []),\n                e.forEach(function (t, e) {\n                  (i[e] && void 0 !== i[e]) || (i[e] = []);\n                }),\n                e.forEach(function (o, a) {\n                  var s = r[o.source],\n                    u = r[o.target];\n                  e.forEach(function (e, o) {\n                    if (!(o <= a)) {\n                      var c = r[e.source],\n                        h = r[e.target];\n                      t.getBundleScore(\n                        { source: s, target: u },\n                        { source: c, target: h },\n                      ) >= n && (i[a].push(o), i[o].push(a));\n                    }\n                  });\n                }),\n                i\n              );\n            }),\n            (e.prototype.getBundleScore = function (t, e) {\n              return (\n                (t.vx = t.target.x - t.source.x),\n                (t.vy = t.target.y - t.source.y),\n                (e.vx = e.target.x - e.source.x),\n                (e.vy = e.target.y - e.source.y),\n                (t.length = oo(\n                  { x: t.source.x, y: t.source.y },\n                  { x: t.target.x, y: t.target.y },\n                )),\n                (e.length = oo(\n                  { x: e.source.x, y: e.source.y },\n                  { x: e.target.x, y: e.target.y },\n                )),\n                this.getAngleScore(t, e) *\n                  this.getScaleScore(t, e) *\n                  this.getPositionScore(t, e) *\n                  this.getVisibilityScore(t, e)\n              );\n            }),\n            (e.prototype.getAngleScore = function (t, e) {\n              return (\n                (function (t, e) {\n                  return t.x * e.x + t.y * e.y;\n                })({ x: t.vx, y: t.vy }, { x: e.vx, y: e.vy }) /\n                (t.length * e.length)\n              );\n            }),\n            (e.prototype.getScaleScore = function (t, e) {\n              var n = (t.length + e.length) / 2;\n              return (\n                2 /\n                (n / Math.min(t.length, e.length) +\n                  Math.max(t.length, e.length) / n)\n              );\n            }),\n            (e.prototype.getPositionScore = function (t, e) {\n              var n = (t.length + e.length) / 2;\n              return (\n                n /\n                (n +\n                  oo(\n                    {\n                      x: (t.source.x + t.target.x) / 2,\n                      y: (t.source.y + t.target.y) / 2,\n                    },\n                    {\n                      x: (e.source.x + e.target.x) / 2,\n                      y: (e.source.y + e.target.y) / 2,\n                    },\n                  ))\n              );\n            }),\n            (e.prototype.getVisibilityScore = function (t, e) {\n              var n = this.getEdgeVisibility(t, e),\n                r = this.getEdgeVisibility(e, t);\n              return n < r ? n : r;\n            }),\n            (e.prototype.getEdgeVisibility = function (t, e) {\n              var n = ao(e.source, t),\n                r = ao(e.target, t),\n                i = { x: (n.x + r.x) / 2, y: (n.y + r.y) / 2 },\n                o = {\n                  x: (t.source.x + t.target.x) / 2,\n                  y: (t.source.y + t.target.y) / 2,\n                };\n              return Math.max(0, 1 - (2 * oo(i, o)) / oo(n, r));\n            }),\n            (e.prototype.getEdgeForces = function (t, e, n, r) {\n              for (\n                var i = this.get(\"edgePoints\"),\n                  o = this.get(\"K\") / (oo(t.source, t.target) * (n + 1)),\n                  a = [{ x: 0, y: 0 }],\n                  s = 1;\n                s < n;\n                s++\n              ) {\n                var u = { x: 0, y: 0 },\n                  c = this.getSpringForce(\n                    { pre: i[e][s - 1], cur: i[e][s], next: i[e][s + 1] },\n                    o,\n                  ),\n                  h = this.getElectrostaticForce(s, e);\n                (u.x = r * (c.x + h.x)), (u.y = r * (c.y + h.y)), a.push(u);\n              }\n              return a.push({ x: 0, y: 0 }), a;\n            }),\n            (e.prototype.getSpringForce = function (t, e) {\n              var n = t.pre.x + t.next.x - 2 * t.cur.x,\n                r = t.pre.y + t.next.y - 2 * t.cur.y;\n              return { x: (n *= e), y: (r *= e) };\n            }),\n            (e.prototype.getElectrostaticForce = function (t, e) {\n              var n = this.get(\"eps\"),\n                r = this.get(\"edgeBundles\"),\n                i = this.get(\"edgePoints\"),\n                o = r[e],\n                a = { x: 0, y: 0 };\n              return (\n                o.forEach(function (r) {\n                  var o = {\n                    x: i[r][t].x - i[e][t].x,\n                    y: i[r][t].y - i[e][t].y,\n                  };\n                  if (Math.abs(o.x) > n || Math.abs(o.y) > n) {\n                    var s = 1 / oo(i[r][t], i[e][t]);\n                    (a.x += o.x * s), (a.y += o.y * s);\n                  }\n                }),\n                a\n              );\n            }),\n            (e.prototype.isTicking = function () {\n              return this.get(\"ticking\");\n            }),\n            (e.prototype.getSimulation = function () {\n              return this.get(\"forceSimulation\");\n            }),\n            (e.prototype.destroy = function () {\n              this.get(\"ticking\") && this.getSimulation().stop(),\n                t.prototype.destroy.call(this);\n            }),\n            e\n          );\n        })(Qe),\n        uo = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(h.c)(e, t),\n            (e.prototype.getDefaultCfgs = function () {\n              return {\n                offsetX: 6,\n                offsetY: 6,\n                handleMenuClick: void 0,\n                getContent: function (t) {\n                  return \"\\n          <div class='f6-contextmenu-ul'>\\n            <div class='f6-contextmenu-li'>菜单项1</div>\\n            <div class='f6-contextmenu-li'>菜单项2</div>\\n          </div>\\n        \";\n                },\n                getCss: function () {\n                  return \"\\n        .f6-contextmenu-ul {\\n          display: flex;\\n          width: 100;\\n          border: 1 solid #e2e2e2;\\n          border-radius: 4;\\n          font-size: 12;\\n          color: #545454;\\n          padding: 10 8;\\n          background-color: rgba(255, 255, 255, 0.9);\\n        }\\n        .f6-contextmenu-li {\\n            opacity: 0;\\n            justify-content: center;\\n            text-align: center;\\n            height: 50;\\n          }\\n        \";\n                },\n                shouldBegin: function (t) {\n                  return !0;\n                },\n                onHide: function () {\n                  return !0;\n                },\n                itemTypes: [\"node\", \"edge\", \"combo\"],\n              };\n            }),\n            (e.prototype.getEvents = function () {\n              return { press: \"onMenuShow\" };\n            }),\n            (e.prototype.init = function () {\n              var t = this;\n              this.get(\"graph\").on(\"tap\", function () {\n                t.onMenuHide();\n              });\n            }),\n            (e.prototype.onMenuShow = function (t) {\n              var e, n;\n              t.preventDefault();\n              var r = this.get(\"itemTypes\");\n              if (t.item) {\n                if (\n                  t.item &&\n                  t.item.getType &&\n                  -1 === r.indexOf(t.item.getType())\n                )\n                  return void this.onMenuHide();\n              } else if (-1 === r.indexOf(\"canvas\"))\n                return void this.onMenuHide();\n              if (this.get(\"shouldBegin\")(t)) {\n                var i = this.get(\"className\"),\n                  o = this.get(\"graph\"),\n                  a = o.get(\"uiGroup\"),\n                  s = this.get(\"getContent\"),\n                  u = this.get(\"getCss\"),\n                  c =\n                    \"\\n    root {\\n      display: flex;\\n      font-size: 12;\\n      color: #545454;\\n    }\\n    text {\\n      height: 12;\\n      opacity: 1;\\n    }\\n    \" +\n                    (null !== (e = null == u ? void 0 : u()) && void 0 !== e\n                      ? e\n                      : \"\") +\n                    \"\\n  \",\n                  h = H(\n                    \"<root class=\" +\n                      (i || \"g6-component-contextmenu\") +\n                      \">\" +\n                      s(t, o) +\n                      \"</root>\",\n                    c,\n                    a,\n                  );\n                null === (n = this.get(\"menu\")) || void 0 === n || n.remove(),\n                  this.set(\"menu\", h);\n                var l = this.get(\"handleMenuClick\");\n                if (l) {\n                  var d = function (e) {\n                    var n;\n                    e.stopPropagation(),\n                      l(\n                        null === (n = e.uiNode) || void 0 === n\n                          ? void 0\n                          : n.attributes,\n                        t.item,\n                        o,\n                      );\n                  };\n                  this.set(\"handleMenuClickWrapper\", d), h.on(\"tap\", d);\n                }\n                var f = o.get(\"width\"),\n                  p = o.get(\"height\"),\n                  g = h.width,\n                  y = h.height,\n                  v = (h.left, h.right, this.get(\"offsetX\") || 0),\n                  m = this.get(\"offsetY\") || 0,\n                  b = t.canvasX + v,\n                  x = t.canvasY + m;\n                b + g > f && (b = t.canvasX - g - v),\n                  x + y > p && (x = t.canvasY - y - m),\n                  h.setStyle(\"left\", b),\n                  h.setStyle(\"top\", x);\n              }\n            }),\n            (e.prototype.onMenuHide = function () {\n              var t = this.get(\"menu\");\n              null == t || t.remove();\n            }),\n            (e.prototype.destroy = function () {\n              var t = this.get(\"menu\");\n              null == t || t.remove();\n            }),\n            e\n          );\n        })(Qe),\n        co = {\n          TimeBar: $e,\n          SnapLine: qi,\n          Tooltip: Hi,\n          Legend: Zi,\n          ZoomSlider: Ki,\n          EdgeFilterLens: Ji,\n          Fisheye: eo,\n          MiniMap: io,\n          Bundling: so,\n          Menu: uo,\n        };\n      e.default = co;\n    },\n  ]).default;\n});\n//# sourceMappingURL=f6Plugin.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/canvas/canvas.js",
    "content": "Component({\n  data: {\n    finalPixelRatio: 1,\n  },\n  properties: {\n    style: {\n      type: String,\n      value: \"\",\n    },\n    width: {\n      type: Number,\n      value: 100,\n    },\n    height: {\n      type: Number,\n      value: 100,\n    },\n    onInit: {\n      type: Function,\n      value: function value() {},\n    },\n    onTouchEvent: {\n      type: Function,\n      value: function value() {},\n    },\n    onError: {\n      type: Function,\n      value: function value() {},\n    },\n    pixelRatio: {\n      type: Number,\n      value: 1,\n    },\n  },\n  observers: {\n    pixelRatio: function (pixelRatio) {\n      this.setData({\n        finalPixelRatio: pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1,\n      });\n    },\n  },\n  ready: function ready() {\n    const query = wx.createSelectorQuery().in(this);\n    query\n      .select(\"#f6-canvas\")\n      .fields({\n        node: true,\n        size: true,\n      })\n      .exec((ret) => {\n        console.log(\"ret\", ret);\n        var canvas = ret[0].node;\n        const finalPixelRatio = this.data.finalPixelRatio;\n        canvas.width = this.data.width * finalPixelRatio;\n        canvas.height = this.data.height * finalPixelRatio;\n        this.rect = {\n          width: this.data.width * finalPixelRatio,\n          height: this.data.height * finalPixelRatio,\n          left: canvas._left,\n          top: canvas._top,\n        };\n        console.log(\"rect\", this.rect);\n        this.ctx = canvas.getContext(\"2d\");\n\n        this.triggerEvent(\"onInit\", {\n          ctx: this.ctx,\n          rect: this.rect,\n          canvas: canvas,\n          renderer: \"mini-native\",\n        });\n      });\n  },\n  methods: {\n    error: function error(e) {\n      this.data.onError(e);\n    },\n    ontouch: function ontouch(e) {\n      var i = 0;\n\n      for (i = 0; i < e.touches.length; i++) {\n        modifyEvent(e.touches[i]);\n      }\n\n      for (i = 0; i < e.changedTouches.length; i++) {\n        modifyEvent(e.changedTouches[i]);\n      }\n\n      this.triggerEvent(\"onTouchEvent\", e);\n    },\n  },\n});\n\nfunction modifyEvent(touchEvent) {\n  touchEvent.clientX = touchEvent.x;\n  touchEvent.clientY = touchEvent.y;\n  touchEvent.pageX = touchEvent.x;\n  touchEvent.pageY = touchEvent.y;\n}\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/canvas/canvas.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/canvas/canvas.wxml",
    "content": "<canvas\n  id=\"f6-canvas\"\n  type=\"2d\"\n  width=\"{{width * finalPixelRatio}}\"\n  height=\"{{(height) * finalPixelRatio}}\"\n  style=\"width: {{width}}px; height: {{height}}px; {{style}}\"\n  disable-scroll=\"{{true}}\"\n  bindtouchstart=\"ontouch\"\n  bindtouchcancel=\"ontouch\"\n  bindtouchmove=\"ontouch\"\n  bindtouchend=\"ontouch\"\n  binderror=\"error\"\n></canvas>\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/container/container.js",
    "content": "Component({\n  data: {},\n  properties: {\n    style: {\n      type: String,\n      value: \"\",\n    },\n    width: {\n      type: Number,\n      value: 100,\n    },\n    height: {\n      type: Number,\n      value: 100,\n    },\n    onInit: {\n      type: Function,\n      value: () => {},\n    },\n    onTouchEvent: {\n      type: Function,\n      value: () => {},\n    },\n    onError: {\n      type: Function,\n      value: () => {},\n    },\n    pixelRatio: {\n      type: Number,\n      value: 1,\n    },\n  },\n  observers: {\n    pixelRatio: function (pixelRatio) {\n      this.setData({\n        finalPixelRatio: pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1,\n      });\n    },\n  },\n  ready() {\n    const query = wx.createSelectorQuery().in(this);\n    query\n      .select(\"#g6-canvas\")\n      .fields({\n        node: true,\n        size: true,\n      })\n      .exec((ret) => {\n        console.log(\"ret\", ret);\n        const { node: canvas } = ret[0];\n        const finalPixelRatio = this.data.finalPixelRatio;\n        canvas.width = this.data.width * finalPixelRatio;\n        canvas.height = this.data.height * finalPixelRatio;\n        this.rect = {\n          width: this.data.width * finalPixelRatio,\n          height: this.data.height * finalPixelRatio,\n          left: canvas._left,\n          top: canvas._top,\n        };\n        console.log(\"rect\", this.rect);\n        this.ctx = canvas.getContext(\"2d\");\n        this.data.onInit(this.ctx, this.rect, canvas, \"mini-native\");\n      });\n  },\n  methods: {\n    error(e) {\n      this.data.onError(e);\n    },\n    ontouch(e) {\n      let i = 0;\n      for (i = 0; i < e.touches.length; i++) {\n        modifyEvent(e.touches[i]);\n      }\n      for (i = 0; i < e.changedTouches.length; i++) {\n        modifyEvent(e.changedTouches[i]);\n      }\n      this.data.onTouchEvent(e);\n    },\n  },\n});\n\nfunction modifyEvent(touchEvent) {\n  touchEvent.clientX = touchEvent.x;\n  touchEvent.clientY = touchEvent.y;\n  touchEvent.pageX = touchEvent.x;\n  touchEvent.pageY = touchEvent.y;\n}\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/container/container.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/container/container.wxml",
    "content": "<canvas\n  id=\"g6-canvas\"\n  type=\"2d\"\n  width=\"{{width * finalPixelRatio}}\"\n  height=\"{{(height) * finalPixelRatio}}\"\n  style=\"width: {{width}}px; height: {{height}}px; {{style}}\"\n  disable-scroll=\"{{true}}\"\n  bindtouchstart=\"ontouch\"\n  bindtouchcancel=\"ontouch\"\n  bindtouchmove=\"ontouch\"\n  bindtouchend=\"ontouch\"\n  binderror=\"error\"\n></canvas>\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/graph/treeGraph.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.f6 = n())\n    : (t.f6 = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function r(e) {\n      if (n[e]) return n[e].exports;\n      var i = (n[e] = { i: e, l: !1, exports: {} });\n      return t[e].call(i.exports, i, i.exports, r), (i.l = !0), i.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = n),\n      (r.d = function (t, n, e) {\n        r.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: e });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, n) {\n        if ((1 & n && (t = r(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var e = Object.create(null);\n        if (\n          (r.r(e),\n          Object.defineProperty(e, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var i in t)\n            r.d(\n              e,\n              i,\n              function (n) {\n                return t[n];\n              }.bind(null, i),\n            );\n        return e;\n      }),\n      (r.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(n, \"a\", n), n;\n      }),\n      (r.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (r.p = \"\"),\n      r((r.s = 214))\n    );\n  })({\n    0: function (t, n, r) {\n      \"use strict\";\n      r.d(n, \"e\", function () {\n        return O;\n      }),\n        r.d(n, \"x\", function () {\n          return j;\n        }),\n        r.d(n, \"l\", function () {\n          return w;\n        }),\n        r.d(n, \"p\", function () {\n          return v;\n        }),\n        r.d(n, \"q\", function () {\n          return y;\n        }),\n        r.d(n, \"s\", function () {\n          return A;\n        }),\n        r.d(n, \"u\", function () {\n          return P;\n        }),\n        r.d(n, \"w\", function () {\n          return M;\n        }),\n        r.d(n, \"f\", function () {\n          return c;\n        }),\n        r.d(n, \"g\", function () {\n          return C;\n        }),\n        r.d(n, \"i\", function () {\n          return u;\n        }),\n        r.d(n, \"j\", function () {\n          return a;\n        }),\n        r.d(n, \"k\", function () {\n          return x;\n        }),\n        r.d(n, \"m\", function () {\n          return s;\n        }),\n        r.d(n, \"n\", function () {\n          return p;\n        }),\n        r.d(n, \"o\", function () {\n          return b;\n        }),\n        r.d(n, \"a\", function () {\n          return N;\n        }),\n        r.d(n, \"b\", function () {\n          return k;\n        }),\n        r.d(n, \"c\", function () {\n          return l;\n        }),\n        r.d(n, \"h\", function () {\n          return T;\n        }),\n        r.d(n, \"r\", function () {\n          return I;\n        }),\n        r.d(n, \"d\", function () {\n          return D;\n        }),\n        r.d(n, \"v\", function () {\n          return F;\n        }),\n        r.d(n, \"t\", function () {\n          return R;\n        });\n      var e = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = {}.toString,\n        o = function (t, n) {\n          return i.call(t) === \"[object \" + n + \"]\";\n        },\n        u = function (t) {\n          return o(t, \"Function\");\n        },\n        a = function (t) {\n          return null == t;\n        },\n        c = function (t) {\n          return Array.isArray ? Array.isArray(t) : o(t, \"Array\");\n        };\n      function f(t) {\n        return (f =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var s = function (t) {\n        var n = f(t);\n        return (null !== t && \"object\" === n) || \"function\" === n;\n      };\n      var l = function (t, n) {\n        if (t)\n          if (c(t))\n            for (var r = 0, e = t.length; r < e && !1 !== n(t[r], r); r++);\n          else if (s(t))\n            for (var i in t)\n              if (t.hasOwnProperty(i) && !1 === n(t[i], i)) break;\n      };\n      Object.keys;\n      function d(t) {\n        return (d =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var h = function (t) {\n          return \"object\" === d(t) && null !== t;\n        },\n        p = function (t) {\n          if (!h(t) || !o(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var n = t; null !== Object.getPrototypeOf(n); )\n            n = Object.getPrototypeOf(n);\n          return Object.getPrototypeOf(t) === n;\n        };\n      var v = function (t) {\n          if (c(t))\n            return t.reduce(function (t, n) {\n              return Math.max(t, n);\n            }, t[0]);\n        },\n        y = function (t) {\n          if (c(t))\n            return t.reduce(function (t, n) {\n              return Math.min(t, n);\n            }, t[0]);\n        },\n        g = Array.prototype,\n        b =\n          (g.splice,\n          g.indexOf,\n          Array.prototype.splice,\n          function (t) {\n            return o(t, \"String\");\n          });\n      var m = Object.prototype.hasOwnProperty;\n      var O = function (t, n) {\n        if (!n || !c(t)) return {};\n        for (\n          var r,\n            e = {},\n            i = u(n)\n              ? n\n              : function (t) {\n                  return t[n];\n                },\n            o = 0;\n          o < t.length;\n          o++\n        ) {\n          var a = t[o];\n          (r = i(a)), m.call(e, r) ? e[r].push(a) : (e[r] = [a]);\n        }\n        return e;\n      };\n      var j = function (t, n) {\n        if (t[\"_wrap_\" + n]) return t[\"_wrap_\" + n];\n        var r = function (r) {\n          t[n](r);\n        };\n        return (t[\"_wrap_\" + n] = r), r;\n      };\n      var x = function (t) {\n        return o(t, \"Number\");\n      };\n      Number.isInteger && Number.isInteger;\n      function w(t, n, r) {\n        return void 0 === r && (r = 1e-5), Math.abs(t - n) < r;\n      }\n      var A = function (t, n) {\n          return ((t % n) + n) % n;\n        },\n        S = (Math.PI, parseInt, Math.PI / 180),\n        P = function (t) {\n          return S * t;\n        },\n        _ =\n          (Object.values,\n          function (t) {\n            return a(t) ? \"\" : t.toString();\n          });\n      var M = function (t) {\n          var n = _(t);\n          return n.charAt(0).toUpperCase() + n.substring(1);\n        },\n        C = function (t) {\n          return o(t, \"Boolean\");\n        };\n      Object.prototype;\n      function E(t, n) {\n        for (var r in n)\n          n.hasOwnProperty(r) &&\n            \"constructor\" !== r &&\n            void 0 !== n[r] &&\n            (t[r] = n[r]);\n      }\n      function I(t, n, r, e) {\n        return n && E(t, n), r && E(t, r), e && E(t, e), t;\n      }\n      function B(t) {\n        return (B =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var N = function t(n) {\n        if (\"object\" !== B(n) || null === n) return n;\n        var r;\n        if (c(n)) {\n          r = [];\n          for (var e = 0, i = n.length; e < i; e++)\n            \"object\" === B(n[e]) && null != n[e]\n              ? (r[e] = t(n[e]))\n              : (r[e] = n[e]);\n        } else\n          for (var o in ((r = {}), n))\n            \"object\" === B(n[o]) && null != n[o]\n              ? (r[o] = t(n[o]))\n              : (r[o] = n[o]);\n        return r;\n      };\n      function L(t, n, r, e) {\n        for (var i in ((r = r || 0), (e = e || 5), n))\n          if (n.hasOwnProperty(i)) {\n            var o = n[i];\n            null !== o && p(o)\n              ? (p(t[i]) || (t[i] = {}),\n                r < e ? L(t[i], o, r + 1, e) : (t[i] = n[i]))\n              : c(o)\n              ? ((t[i] = []), (t[i] = t[i].concat(o)))\n              : void 0 !== o && (t[i] = o);\n          }\n      }\n      var k = function (t) {\n        for (var n = [], r = 1; r < arguments.length; r++)\n          n[r - 1] = arguments[r];\n        for (var e = 0; e < n.length; e += 1) L(t, n[e]);\n        return t;\n      };\n      Object.prototype.hasOwnProperty;\n      var T = function t(n, r) {\n          if (n === r) return !0;\n          if (!n || !r) return !1;\n          if (b(n) || b(r)) return !1;\n          if (e(n) || e(r)) {\n            if (n.length !== r.length) return !1;\n            for (var i = !0, o = 0; o < n.length && (i = t(n[o], r[o])); o++);\n            return i;\n          }\n          if (h(n) || h(r)) {\n            var u = Object.keys(n),\n              a = Object.keys(r);\n            if (u.length !== a.length) return !1;\n            for (i = !0, o = 0; o < u.length && (i = t(n[u[o]], r[u[o]])); o++);\n            return i;\n          }\n          return !1;\n        },\n        D = function (t, n, r) {\n          for (var e = 0, i = b(n) ? n.split(\".\") : n; t && e < i.length; )\n            t = t[i[e++]];\n          return void 0 === t || e < i.length ? r : t;\n        },\n        H = (Object.prototype.hasOwnProperty, {}),\n        F = function (t) {\n          return H[(t = t || \"g\")] ? (H[t] += 1) : (H[t] = 1), t + H[t];\n        },\n        R = function () {};\n      !(function () {\n        function t() {\n          this.map = {};\n        }\n        (t.prototype.has = function (t) {\n          return void 0 !== this.map[t];\n        }),\n          (t.prototype.get = function (t, n) {\n            var r = this.map[t];\n            return void 0 === r ? n : r;\n          }),\n          (t.prototype.set = function (t, n) {\n            this.map[t] = n;\n          }),\n          (t.prototype.clear = function () {\n            this.map = {};\n          }),\n          (t.prototype.delete = function (t) {\n            delete this.map[t];\n          }),\n          (t.prototype.size = function () {\n            return Object.keys(this.map).length;\n          });\n      })();\n    },\n    1: function (t, n, r) {\n      \"use strict\";\n      r.d(n, \"c\", function () {\n        return i;\n      }),\n        r.d(n, \"a\", function () {\n          return o;\n        }),\n        r.d(n, \"e\", function () {\n          return u;\n        }),\n        r.d(n, \"b\", function () {\n          return a;\n        }),\n        r.d(n, \"d\", function () {\n          return c;\n        }),\n        r.d(n, \"g\", function () {\n          return f;\n        }),\n        r.d(n, \"f\", function () {\n          return s;\n        });\n      /*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n      var e = function (t, n) {\n        return (e =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, n) {\n              t.__proto__ = n;\n            }) ||\n          function (t, n) {\n            for (var r in n)\n              Object.prototype.hasOwnProperty.call(n, r) && (t[r] = n[r]);\n          })(t, n);\n      };\n      function i(t, n) {\n        if (\"function\" != typeof n && null !== n)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(n) +\n              \" is not a constructor or null\",\n          );\n        function r() {\n          this.constructor = t;\n        }\n        e(t, n),\n          (t.prototype =\n            null === n\n              ? Object.create(n)\n              : ((r.prototype = n.prototype), new r()));\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            for (var n, r = 1, e = arguments.length; r < e; r++)\n              for (var i in (n = arguments[r]))\n                Object.prototype.hasOwnProperty.call(n, i) && (t[i] = n[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function u(t, n) {\n        var r = {};\n        for (var e in t)\n          Object.prototype.hasOwnProperty.call(t, e) &&\n            n.indexOf(e) < 0 &&\n            (r[e] = t[e]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (e = Object.getOwnPropertySymbols(t); i < e.length; i++)\n            n.indexOf(e[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, e[i]) &&\n              (r[e[i]] = t[e[i]]);\n        }\n        return r;\n      }\n      function a(t, n, r, e) {\n        return new (r || (r = Promise))(function (i, o) {\n          function u(t) {\n            try {\n              c(e.next(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function a(t) {\n            try {\n              c(e.throw(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function c(t) {\n            var n;\n            t.done\n              ? i(t.value)\n              : ((n = t.value),\n                n instanceof r\n                  ? n\n                  : new r(function (t) {\n                      t(n);\n                    })).then(u, a);\n          }\n          c((e = e.apply(t, n || [])).next());\n        });\n      }\n      function c(t, n) {\n        var r,\n          e,\n          i,\n          o,\n          u = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (o = { next: a(0), throw: a(1), return: a(2) }),\n          \"function\" == typeof Symbol &&\n            (o[Symbol.iterator] = function () {\n              return this;\n            }),\n          o\n        );\n        function a(o) {\n          return function (a) {\n            return (function (o) {\n              if (r) throw new TypeError(\"Generator is already executing.\");\n              for (; u; )\n                try {\n                  if (\n                    ((r = 1),\n                    e &&\n                      (i =\n                        2 & o[0]\n                          ? e.return\n                          : o[0]\n                          ? e.throw || ((i = e.return) && i.call(e), 0)\n                          : e.next) &&\n                      !(i = i.call(e, o[1])).done)\n                  )\n                    return i;\n                  switch (((e = 0), i && (o = [2 & o[0], i.value]), o[0])) {\n                    case 0:\n                    case 1:\n                      i = o;\n                      break;\n                    case 4:\n                      return u.label++, { value: o[1], done: !1 };\n                    case 5:\n                      u.label++, (e = o[1]), (o = [0]);\n                      continue;\n                    case 7:\n                      (o = u.ops.pop()), u.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = u.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== o[0] && 2 !== o[0]))\n                      ) {\n                        u = 0;\n                        continue;\n                      }\n                      if (3 === o[0] && (!i || (o[1] > i[0] && o[1] < i[3]))) {\n                        u.label = o[1];\n                        break;\n                      }\n                      if (6 === o[0] && u.label < i[1]) {\n                        (u.label = i[1]), (i = o);\n                        break;\n                      }\n                      if (i && u.label < i[2]) {\n                        (u.label = i[2]), u.ops.push(o);\n                        break;\n                      }\n                      i[2] && u.ops.pop(), u.trys.pop();\n                      continue;\n                  }\n                  o = n.call(t, u);\n                } catch (t) {\n                  (o = [6, t]), (e = 0);\n                } finally {\n                  r = i = 0;\n                }\n              if (5 & o[0]) throw o[1];\n              return { value: o[0] ? o[1] : void 0, done: !0 };\n            })([o, a]);\n          };\n        }\n      }\n      Object.create;\n      function f() {\n        for (var t = 0, n = 0, r = arguments.length; n < r; n++)\n          t += arguments[n].length;\n        var e = Array(t),\n          i = 0;\n        for (n = 0; n < r; n++)\n          for (var o = arguments[n], u = 0, a = o.length; u < a; u++, i++)\n            e[i] = o[u];\n        return e;\n      }\n      function s(t, n, r) {\n        if (r || 2 === arguments.length)\n          for (var e, i = 0, o = n.length; i < o; i++)\n            (!e && i in n) ||\n              (e || (e = Array.prototype.slice.call(n, 0, i)), (e[i] = n[i]));\n        return t.concat(e || n);\n      }\n      Object.create;\n    },\n    104: function (t, n, r) {\n      (function (t) {\n        var r, e, i, o;\n        function u(t) {\n          return (u =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        \"undefined\" != typeof self && self,\n          (o = function () {\n            return (function (t) {\n              var n = {};\n              function r(e) {\n                if (n[e]) return n[e].exports;\n                var i = (n[e] = { i: e, l: !1, exports: {} });\n                return (\n                  t[e].call(i.exports, i, i.exports, r), (i.l = !0), i.exports\n                );\n              }\n              return (\n                (r.m = t),\n                (r.c = n),\n                (r.d = function (t, n, e) {\n                  r.o(t, n) ||\n                    Object.defineProperty(t, n, {\n                      configurable: !1,\n                      enumerable: !0,\n                      get: e,\n                    });\n                }),\n                (r.n = function (t) {\n                  var n =\n                    t && t.__esModule\n                      ? function () {\n                          return t.default;\n                        }\n                      : function () {\n                          return t;\n                        };\n                  return r.d(n, \"a\", n), n;\n                }),\n                (r.o = function (t, n) {\n                  return Object.prototype.hasOwnProperty.call(t, n);\n                }),\n                (r.p = \"\"),\n                r((r.s = 31))\n              );\n            })([\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Array.isArray\n                    ? Array.isArray(t)\n                    : Object(e.a)(t, \"Array\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return (\n                    null !== t && \"function\" != typeof t && isFinite(t.length)\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(13);\n                n.a = function (t, n) {\n                  if (t)\n                    if (Object(e.a)(t))\n                      for (\n                        var r = 0, o = t.length;\n                        r < o && !1 !== n(t[r], r);\n                        r++\n                      );\n                    else if (Object(i.a)(t))\n                      for (var u in t)\n                        if (t.hasOwnProperty(u) && !1 === n(t[u], u)) break;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Function\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {}.toString;\n                n.a = function (t, n) {\n                  return e.call(t) === \"[object \" + n + \"]\";\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Number\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return null == t;\n                };\n              },\n              function (t, n, r) {\n                var e = r(33).mix;\n                t.exports = { assign: e };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"String\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(15),\n                  i = r(4);\n                n.a = function (t) {\n                  if (!Object(e.a)(t) || !Object(i.a)(t, \"Object\")) return !1;\n                  if (null === Object.getPrototypeOf(t)) return !0;\n                  for (var n = t; null !== Object.getPrototypeOf(n); )\n                    n = Object.getPrototypeOf(n);\n                  return Object.getPrototypeOf(t) === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6);\n                n.a = function (t) {\n                  return Object(e.a)(t) ? \"\" : t.toString();\n                };\n              },\n              function (t, n, r) {\n                var e = r(18),\n                  i = (function () {\n                    function t(t, n) {\n                      void 0 === n && (n = {}),\n                        (this.options = n),\n                        (this.rootNode = e(t, n));\n                    }\n                    return (\n                      (t.prototype.execute = function () {\n                        throw new Error(\"please override this method\");\n                      }),\n                      t\n                    );\n                  })();\n                t.exports = i;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t, n) {\n                  return !!Object(e.a)(t) && t.indexOf(n) > -1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  var n = u(t);\n                  return (null !== t && \"object\" === n) || \"function\" === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(1);\n                n.a = function (t, n) {\n                  if (!Object(i.a)(t)) return t;\n                  var r = [];\n                  return (\n                    Object(e.a)(t, function (t, e) {\n                      n(t, e) && r.push(t);\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return \"object\" === u(t) && null !== t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                function e(t, n) {\n                  for (var r in n)\n                    n.hasOwnProperty(r) &&\n                      \"constructor\" !== r &&\n                      void 0 !== n[r] &&\n                      (t[r] = n[r]);\n                }\n                n.a = function (t, n, r, i) {\n                  return n && e(t, n), r && e(t, r), i && e(t, i), t;\n                };\n              },\n              function (t, n, r) {\n                var e = r(30),\n                  i = [\"LR\", \"RL\", \"TB\", \"BT\", \"H\", \"V\"],\n                  o = [\"LR\", \"RL\", \"H\"],\n                  u = i[0];\n                t.exports = function (t, n, r) {\n                  var a = n.direction || u;\n                  if (\n                    ((n.isHorizontal = (function (t) {\n                      return o.indexOf(t) > -1;\n                    })(a)),\n                    a && -1 === i.indexOf(a))\n                  )\n                    throw new TypeError(\"Invalid direction: \" + a);\n                  if (a === i[0]) r(t, n);\n                  else if (a === i[1]) r(t, n), t.right2left();\n                  else if (a === i[2]) r(t, n);\n                  else if (a === i[3]) r(t, n), t.bottom2top();\n                  else if (a === i[4] || a === i[5]) {\n                    var c = e(t, n),\n                      f = c.left,\n                      s = c.right;\n                    r(f, n),\n                      r(s, n),\n                      n.isHorizontal ? f.right2left() : f.bottom2top(),\n                      s.translate(f.x - s.x, f.y - s.y),\n                      (t.x = f.x),\n                      (t.y = s.y);\n                    var l = t.getBoundingBox();\n                    n.isHorizontal\n                      ? l.top < 0 && t.translate(0, -l.top)\n                      : l.left < 0 && t.translate(-l.left, 0);\n                  }\n                  var d = n.fixedRoot;\n                  return (\n                    void 0 === d && (d = !0),\n                    d &&\n                      t.translate(\n                        -(t.x + t.width / 2 + t.hgap),\n                        -(t.y + t.height / 2 + t.vgap),\n                      ),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = r(7),\n                  i = {\n                    getId: function (t) {\n                      return t.id || t.name;\n                    },\n                    getPreH: function (t) {\n                      return t.preH || 0;\n                    },\n                    getPreV: function (t) {\n                      return t.preV || 0;\n                    },\n                    getHGap: function (t) {\n                      return t.hgap || 18;\n                    },\n                    getVGap: function (t) {\n                      return t.vgap || 18;\n                    },\n                    getChildren: function (t) {\n                      return t.children;\n                    },\n                    getHeight: function (t) {\n                      return t.height || 36;\n                    },\n                    getWidth: function (t) {\n                      var n = t.label || \" \";\n                      return t.width || 18 * n.split(\"\").length;\n                    },\n                  };\n                function o(t, n) {\n                  var r = this;\n                  if (((r.vgap = r.hgap = 0), t instanceof o)) return t;\n                  r.data = t;\n                  var e = n.getHGap(t),\n                    i = n.getVGap(t);\n                  return (\n                    (r.preH = n.getPreH(t)),\n                    (r.preV = n.getPreV(t)),\n                    (r.width = n.getWidth(t)),\n                    (r.height = n.getHeight(t)),\n                    (r.width += r.preH),\n                    (r.height += r.preV),\n                    (r.id = n.getId(t)),\n                    (r.x = r.y = 0),\n                    (r.depth = 0),\n                    r.children || (r.children = []),\n                    r.addGap(e, i),\n                    r\n                  );\n                }\n                e.assign(o.prototype, {\n                  isRoot: function () {\n                    return 0 === this.depth;\n                  },\n                  isLeaf: function () {\n                    return 0 === this.children.length;\n                  },\n                  addGap: function (t, n) {\n                    (this.hgap += t),\n                      (this.vgap += n),\n                      (this.width += 2 * t),\n                      (this.height += 2 * n);\n                  },\n                  eachNode: function (t) {\n                    for (var n, r = [this]; (n = r.shift()); )\n                      t(n), (r = n.children.concat(r));\n                  },\n                  DFTraverse: function (t) {\n                    this.eachNode(t);\n                  },\n                  BFTraverse: function (t) {\n                    for (var n, r = [this]; (n = r.shift()); )\n                      t(n), (r = r.concat(n.children));\n                  },\n                  getBoundingBox: function () {\n                    var t = {\n                      left: Number.MAX_VALUE,\n                      top: Number.MAX_VALUE,\n                      width: 0,\n                      height: 0,\n                    };\n                    return (\n                      this.eachNode(function (n) {\n                        (t.left = Math.min(t.left, n.x)),\n                          (t.top = Math.min(t.top, n.y)),\n                          (t.width = Math.max(t.width, n.x + n.width)),\n                          (t.height = Math.max(t.height, n.y + n.height));\n                      }),\n                      t\n                    );\n                  },\n                  translate: function (t, n) {\n                    void 0 === t && (t = 0),\n                      void 0 === n && (n = 0),\n                      this.eachNode(function (r) {\n                        (r.x += t),\n                          (r.y += n),\n                          (r.x += r.preH),\n                          (r.y += r.preV);\n                      });\n                  },\n                  right2left: function () {\n                    var t = this.getBoundingBox();\n                    this.eachNode(function (n) {\n                      n.x = n.x - 2 * (n.x - t.left) - n.width;\n                    }),\n                      this.translate(t.width, 0);\n                  },\n                  bottom2top: function () {\n                    var t = this.getBoundingBox();\n                    this.eachNode(function (n) {\n                      n.y = n.y - 2 * (n.y - t.top) - n.height;\n                    }),\n                      this.translate(0, t.height);\n                  },\n                }),\n                  (t.exports = function (t, n, r) {\n                    void 0 === n && (n = {});\n                    var u,\n                      a = new o(t, (n = e.assign({}, i, n))),\n                      c = [a];\n                    if (!r && !t.collapsed)\n                      for (; (u = c.shift()); )\n                        if (!u.data.collapsed) {\n                          var f = n.getChildren(u.data),\n                            s = f ? f.length : 0;\n                          if (((u.children = new Array(s)), f && s))\n                            for (var l = 0; l < s; l++) {\n                              var d = new o(f[l], n);\n                              (u.children[l] = d),\n                                c.push(d),\n                                (d.parent = u),\n                                (d.depth = u.depth + 1);\n                            }\n                        }\n                    return a;\n                  });\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(20);\n                n.a = function (t, n) {\n                  var r = Object(i.a)(n),\n                    o = r.length;\n                  if (Object(e.a)(t)) return !o;\n                  for (var u = 0; u < o; u += 1) {\n                    var a = r[u];\n                    if (n[a] !== t[a] || !(a in t)) return !1;\n                  }\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(3),\n                  o = Object.keys\n                    ? function (t) {\n                        return Object.keys(t);\n                      }\n                    : function (t) {\n                        var n = [];\n                        return (\n                          Object(e.a)(t, function (r, e) {\n                            (Object(i.a)(t) && \"prototype\" === e) || n.push(e);\n                          }),\n                          n\n                        );\n                      };\n                n.a = o;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1),\n                  i = Array.prototype.splice;\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t)) return [];\n                  for (var r = t ? n.length : 0, o = r - 1; r--; ) {\n                    var u = void 0,\n                      a = n[r];\n                    (r !== o && a === u) || ((u = a), i.call(t, a, 1));\n                  }\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(12),\n                  i = r(2);\n                n.a = function (t) {\n                  var n = [];\n                  return (\n                    Object(i.a)(t, function (t) {\n                      Object(e.a)(n, t) || n.push(t);\n                    }),\n                    n\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(3),\n                  o = r(24);\n                n.a = function (t, n) {\n                  if (!n) return { 0: t };\n                  if (!Object(i.a)(n)) {\n                    var r = Object(e.a)(n)\n                      ? n\n                      : n.replace(/\\s+/g, \"\").split(\"*\");\n                    n = function (t) {\n                      for (var n = \"_\", e = 0, i = r.length; e < i; e++)\n                        n += t[r[e]] && t[r[e]].toString();\n                      return n;\n                    };\n                  }\n                  return Object(o.a)(t, n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(3),\n                  u = Object.prototype.hasOwnProperty;\n                n.a = function (t, n) {\n                  if (!n || !Object(i.a)(t)) return {};\n                  var r,\n                    a = {},\n                    c = Object(o.a)(n)\n                      ? n\n                      : function (t) {\n                          return t[n];\n                        };\n                  return (\n                    Object(e.a)(t, function (t) {\n                      (r = c(t)), u.call(a, r) ? a[r].push(t) : (a[r] = [t]);\n                    }),\n                    a\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t.hasOwnProperty(n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(3),\n                  o = Object.values\n                    ? function (t) {\n                        return Object.values(t);\n                      }\n                    : function (t) {\n                        var n = [];\n                        return (\n                          Object(e.a)(t, function (r, e) {\n                            (Object(i.a)(t) && \"prototype\" === e) || n.push(r);\n                          }),\n                          n\n                        );\n                      };\n                n.a = o;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {}.toString;\n                n.a = function (t) {\n                  return e\n                    .call(t)\n                    .replace(/^\\[object /, \"\")\n                    .replace(/]$/, \"\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Object.prototype;\n                n.a = function (t) {\n                  var n = t && t.constructor;\n                  return t === ((\"function\" == typeof n && n.prototype) || e);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(15),\n                  i = r(1),\n                  o = r(8);\n                n.a = function t(n, r) {\n                  if (n === r) return !0;\n                  if (!n || !r) return !1;\n                  if (Object(o.a)(n) || Object(o.a)(r)) return !1;\n                  if (Object(i.a)(n) || Object(i.a)(r)) {\n                    if (n.length !== r.length) return !1;\n                    for (\n                      var u = !0, a = 0;\n                      a < n.length && (u = t(n[a], r[a]));\n                      a++\n                    );\n                    return u;\n                  }\n                  if (Object(e.a)(n) || Object(e.a)(r)) {\n                    var c = Object.keys(n),\n                      f = Object.keys(r);\n                    if (c.length !== f.length) return !1;\n                    for (\n                      u = !0, a = 0;\n                      a < c.length && (u = t(n[c[a]], r[c[a]]));\n                      a++\n                    );\n                    return u;\n                  }\n                  return !1;\n                };\n              },\n              function (t, n, r) {\n                var e = r(18);\n                t.exports = function (t, n) {\n                  for (\n                    var r = e(t.data, n, !0),\n                      i = e(t.data, n, !0),\n                      o = t.children.length,\n                      u = Math.round(o / 2),\n                      a =\n                        n.getSide ||\n                        function (t, n) {\n                          return n < u ? \"right\" : \"left\";\n                        },\n                      c = 0;\n                    c < o;\n                    c++\n                  ) {\n                    var f = t.children[c];\n                    \"right\" === a(f, c)\n                      ? i.children.push(f)\n                      : r.children.push(f);\n                  }\n                  return (\n                    r.eachNode(function (t) {\n                      t.isRoot() || (t.side = \"left\");\n                    }),\n                    i.eachNode(function (t) {\n                      t.isRoot() || (t.side = \"right\");\n                    }),\n                    { left: r, right: i }\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = {\n                  compactBox: r(32),\n                  dendrogram: r(114),\n                  indented: r(116),\n                  mindmap: r(118),\n                };\n                t.exports = e;\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(113),\n                  o = r(17),\n                  u = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return o(this.rootNode, this.options, i);\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                Object.defineProperty(n, \"__esModule\", { value: !0 });\n                var e = r(12);\n                r.d(n, \"contains\", function () {\n                  return e.a;\n                }),\n                  r.d(n, \"includes\", function () {\n                    return e.a;\n                  });\n                var i = r(34);\n                r.d(n, \"difference\", function () {\n                  return i.a;\n                });\n                var o = r(35);\n                r.d(n, \"find\", function () {\n                  return o.a;\n                });\n                var u = r(36);\n                r.d(n, \"findIndex\", function () {\n                  return u.a;\n                });\n                var a = r(37);\n                r.d(n, \"firstValue\", function () {\n                  return a.a;\n                });\n                var c = r(38);\n                r.d(n, \"flatten\", function () {\n                  return c.a;\n                });\n                var f = r(39);\n                r.d(n, \"flattenDeep\", function () {\n                  return f.a;\n                });\n                var s = r(40);\n                r.d(n, \"getRange\", function () {\n                  return s.a;\n                });\n                var l = r(41);\n                r.d(n, \"pull\", function () {\n                  return l.a;\n                });\n                var d = r(21);\n                r.d(n, \"pullAt\", function () {\n                  return d.a;\n                });\n                var h = r(42);\n                r.d(n, \"reduce\", function () {\n                  return h.a;\n                });\n                var p = r(43);\n                r.d(n, \"remove\", function () {\n                  return p.a;\n                });\n                var v = r(44);\n                r.d(n, \"sortBy\", function () {\n                  return v.a;\n                });\n                var y = r(45);\n                r.d(n, \"union\", function () {\n                  return y.a;\n                });\n                var g = r(22);\n                r.d(n, \"uniq\", function () {\n                  return g.a;\n                });\n                var b = r(46);\n                r.d(n, \"valuesOfKey\", function () {\n                  return b.a;\n                });\n                var m = r(47);\n                r.d(n, \"head\", function () {\n                  return m.a;\n                });\n                var O = r(48);\n                r.d(n, \"last\", function () {\n                  return O.a;\n                });\n                var j = r(49);\n                r.d(n, \"startsWith\", function () {\n                  return j.a;\n                });\n                var x = r(50);\n                r.d(n, \"endsWith\", function () {\n                  return x.a;\n                });\n                var w = r(14);\n                r.d(n, \"filter\", function () {\n                  return w.a;\n                });\n                var A = r(51);\n                r.d(n, \"every\", function () {\n                  return A.a;\n                });\n                var S = r(52);\n                r.d(n, \"some\", function () {\n                  return S.a;\n                });\n                var P = r(53);\n                r.d(n, \"group\", function () {\n                  return P.a;\n                });\n                var _ = r(24);\n                r.d(n, \"groupBy\", function () {\n                  return _.a;\n                });\n                var M = r(23);\n                r.d(n, \"groupToMap\", function () {\n                  return M.a;\n                });\n                var C = r(54);\n                r.d(n, \"getWrapBehavior\", function () {\n                  return C.a;\n                });\n                var E = r(55);\n                r.d(n, \"wrapBehavior\", function () {\n                  return E.a;\n                });\n                var I = r(56);\n                r.d(n, \"number2color\", function () {\n                  return I.a;\n                });\n                var B = r(57);\n                r.d(n, \"parseRadius\", function () {\n                  return B.a;\n                });\n                var N = r(58);\n                r.d(n, \"clamp\", function () {\n                  return N.a;\n                });\n                var L = r(59);\n                r.d(n, \"fixedBase\", function () {\n                  return L.a;\n                });\n                var k = r(60);\n                r.d(n, \"isDecimal\", function () {\n                  return k.a;\n                });\n                var T = r(61);\n                r.d(n, \"isEven\", function () {\n                  return T.a;\n                });\n                var D = r(62);\n                r.d(n, \"isInteger\", function () {\n                  return D.a;\n                });\n                var H = r(63);\n                r.d(n, \"isNegative\", function () {\n                  return H.a;\n                });\n                var F = r(64);\n                r.d(n, \"isNumberEqual\", function () {\n                  return F.a;\n                });\n                var R = r(65);\n                r.d(n, \"isOdd\", function () {\n                  return R.a;\n                });\n                var V = r(66);\n                r.d(n, \"isPositive\", function () {\n                  return V.a;\n                });\n                var z = r(67);\n                r.d(n, \"maxBy\", function () {\n                  return z.a;\n                });\n                var q = r(68);\n                r.d(n, \"minBy\", function () {\n                  return q.a;\n                });\n                var U = r(69);\n                r.d(n, \"mod\", function () {\n                  return U.a;\n                });\n                var G = r(70);\n                r.d(n, \"toDegree\", function () {\n                  return G.a;\n                });\n                var Y = r(71);\n                r.d(n, \"toInteger\", function () {\n                  return Y.a;\n                });\n                var W = r(72);\n                r.d(n, \"toRadian\", function () {\n                  return W.a;\n                });\n                var K = r(73);\n                r.d(n, \"forIn\", function () {\n                  return K.a;\n                });\n                var X = r(25);\n                r.d(n, \"has\", function () {\n                  return X.a;\n                });\n                var $ = r(74);\n                r.d(n, \"hasKey\", function () {\n                  return $.a;\n                });\n                var J = r(75);\n                r.d(n, \"hasValue\", function () {\n                  return J.a;\n                });\n                var Q = r(20);\n                r.d(n, \"keys\", function () {\n                  return Q.a;\n                });\n                var Z = r(19);\n                r.d(n, \"isMatch\", function () {\n                  return Z.a;\n                });\n                var tt = r(26);\n                r.d(n, \"values\", function () {\n                  return tt.a;\n                });\n                var nt = r(76);\n                r.d(n, \"lowerCase\", function () {\n                  return nt.a;\n                });\n                var rt = r(77);\n                r.d(n, \"lowerFirst\", function () {\n                  return rt.a;\n                });\n                var et = r(78);\n                r.d(n, \"substitute\", function () {\n                  return et.a;\n                });\n                var it = r(79);\n                r.d(n, \"upperCase\", function () {\n                  return it.a;\n                });\n                var ot = r(80);\n                r.d(n, \"upperFirst\", function () {\n                  return ot.a;\n                });\n                var ut = r(27);\n                r.d(n, \"getType\", function () {\n                  return ut.a;\n                });\n                var at = r(81);\n                r.d(n, \"isArguments\", function () {\n                  return at.a;\n                });\n                var ct = r(0);\n                r.d(n, \"isArray\", function () {\n                  return ct.a;\n                });\n                var ft = r(1);\n                r.d(n, \"isArrayLike\", function () {\n                  return ft.a;\n                });\n                var st = r(82);\n                r.d(n, \"isBoolean\", function () {\n                  return st.a;\n                });\n                var lt = r(83);\n                r.d(n, \"isDate\", function () {\n                  return lt.a;\n                });\n                var dt = r(84);\n                r.d(n, \"isError\", function () {\n                  return dt.a;\n                });\n                var ht = r(3);\n                r.d(n, \"isFunction\", function () {\n                  return ht.a;\n                });\n                var pt = r(85);\n                r.d(n, \"isFinite\", function () {\n                  return pt.a;\n                });\n                var vt = r(6);\n                r.d(n, \"isNil\", function () {\n                  return vt.a;\n                });\n                var yt = r(86);\n                r.d(n, \"isNull\", function () {\n                  return yt.a;\n                });\n                var gt = r(5);\n                r.d(n, \"isNumber\", function () {\n                  return gt.a;\n                });\n                var bt = r(13);\n                r.d(n, \"isObject\", function () {\n                  return bt.a;\n                });\n                var mt = r(15);\n                r.d(n, \"isObjectLike\", function () {\n                  return mt.a;\n                });\n                var Ot = r(9);\n                r.d(n, \"isPlainObject\", function () {\n                  return Ot.a;\n                });\n                var jt = r(28);\n                r.d(n, \"isPrototype\", function () {\n                  return jt.a;\n                });\n                var xt = r(87);\n                r.d(n, \"isRegExp\", function () {\n                  return xt.a;\n                });\n                var wt = r(8);\n                r.d(n, \"isString\", function () {\n                  return wt.a;\n                });\n                var At = r(4);\n                r.d(n, \"isType\", function () {\n                  return At.a;\n                });\n                var St = r(88);\n                r.d(n, \"isUndefined\", function () {\n                  return St.a;\n                });\n                var Pt = r(89);\n                r.d(n, \"isElement\", function () {\n                  return Pt.a;\n                });\n                var _t = r(90);\n                r.d(n, \"requestAnimationFrame\", function () {\n                  return _t.a;\n                });\n                var Mt = r(91);\n                r.d(n, \"clearAnimationFrame\", function () {\n                  return Mt.a;\n                });\n                var Ct = r(92);\n                r.d(n, \"augment\", function () {\n                  return Ct.a;\n                });\n                var Et = r(93);\n                r.d(n, \"clone\", function () {\n                  return Et.a;\n                });\n                var It = r(94);\n                r.d(n, \"debounce\", function () {\n                  return It.a;\n                });\n                var Bt = r(95);\n                r.d(n, \"memoize\", function () {\n                  return Bt.a;\n                });\n                var Nt = r(96);\n                r.d(n, \"deepMix\", function () {\n                  return Nt.a;\n                });\n                var Lt = r(2);\n                r.d(n, \"each\", function () {\n                  return Lt.a;\n                });\n                var kt = r(97);\n                r.d(n, \"extend\", function () {\n                  return kt.a;\n                });\n                var Tt = r(98);\n                r.d(n, \"indexOf\", function () {\n                  return Tt.a;\n                });\n                var Dt = r(99);\n                r.d(n, \"isEmpty\", function () {\n                  return Dt.a;\n                });\n                var Ht = r(29);\n                r.d(n, \"isEqual\", function () {\n                  return Ht.a;\n                });\n                var Ft = r(100);\n                r.d(n, \"isEqualWith\", function () {\n                  return Ft.a;\n                });\n                var Rt = r(101);\n                r.d(n, \"map\", function () {\n                  return Rt.a;\n                });\n                var Vt = r(102);\n                r.d(n, \"mapValues\", function () {\n                  return Vt.a;\n                });\n                var zt = r(16);\n                r.d(n, \"mix\", function () {\n                  return zt.a;\n                }),\n                  r.d(n, \"assign\", function () {\n                    return zt.a;\n                  });\n                var qt = r(103);\n                r.d(n, \"get\", function () {\n                  return qt.a;\n                });\n                var Ut = r(104);\n                r.d(n, \"set\", function () {\n                  return Ut.a;\n                });\n                var Gt = r(105);\n                r.d(n, \"pick\", function () {\n                  return Gt.a;\n                });\n                var Yt = r(106);\n                r.d(n, \"throttle\", function () {\n                  return Yt.a;\n                });\n                var Wt = r(107);\n                r.d(n, \"toArray\", function () {\n                  return Wt.a;\n                });\n                var Kt = r(10);\n                r.d(n, \"toString\", function () {\n                  return Kt.a;\n                });\n                var Xt = r(108);\n                r.d(n, \"uniqueId\", function () {\n                  return Xt.a;\n                });\n                var $t = r(109);\n                r.d(n, \"noop\", function () {\n                  return $t.a;\n                });\n                var Jt = r(110);\n                r.d(n, \"identity\", function () {\n                  return Jt.a;\n                });\n                var Qt = r(111);\n                r.d(n, \"size\", function () {\n                  return Qt.a;\n                });\n                var Zt = r(112);\n                r.d(n, \"Cache\", function () {\n                  return Zt.a;\n                });\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(14),\n                  i = r(12);\n                n.a = function (t, n) {\n                  return (\n                    void 0 === n && (n = []),\n                    Object(e.a)(t, function (t) {\n                      return !Object(i.a)(n, t);\n                    })\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3),\n                  i = r(19),\n                  o = r(0),\n                  u = r(9);\n                n.a = function (t, n) {\n                  if (!Object(o.a)(t)) return null;\n                  var r;\n                  if (\n                    (Object(e.a)(n) && (r = n),\n                    Object(u.a)(n) &&\n                      (r = function (t) {\n                        return Object(i.a)(t, n);\n                      }),\n                    r)\n                  )\n                    for (var a = 0; a < t.length; a += 1)\n                      if (r(t[a])) return t[a];\n                  return null;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  void 0 === r && (r = 0);\n                  for (var e = r; e < t.length; e++) if (n(t[e], e)) return e;\n                  return -1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(0);\n                n.a = function (t, n) {\n                  for (var r = null, o = 0; o < t.length; o++) {\n                    var u = t[o][n];\n                    if (!Object(e.a)(u)) {\n                      r = Object(i.a)(u) ? u[0] : u;\n                      break;\n                    }\n                  }\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function (t) {\n                  if (!Object(e.a)(t)) return [];\n                  for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n                  return n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function t(n, r) {\n                  if ((void 0 === r && (r = []), Object(e.a)(n)))\n                    for (var i = 0; i < n.length; i += 1) t(n[i], r);\n                  else r.push(n);\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(14);\n                n.a = function (t) {\n                  if (\n                    !(t = Object(i.a)(t, function (t) {\n                      return !isNaN(t);\n                    })).length\n                  )\n                    return { min: 0, max: 0 };\n                  if (Object(e.a)(t[0])) {\n                    for (var n = [], r = 0; r < t.length; r++)\n                      n = n.concat(t[r]);\n                    t = n;\n                  }\n                  var o = Math.max.apply(null, t);\n                  return { min: Math.min.apply(null, t), max: o };\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Array.prototype,\n                  i = e.splice,\n                  o = e.indexOf;\n                n.a = function (t) {\n                  for (var n = [], r = 1; r < arguments.length; r++)\n                    n[r - 1] = arguments[r];\n                  for (var e = 0; e < n.length; e++)\n                    for (var u = n[e], a = -1; (a = o.call(t, u)) > -1; )\n                      i.call(t, a, 1);\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(9);\n                n.a = function (t, n, r) {\n                  if (!Object(i.a)(t) && !Object(o.a)(t)) return t;\n                  var u = r;\n                  return (\n                    Object(e.a)(t, function (t, r) {\n                      u = n(u, t, r);\n                    }),\n                    u\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1),\n                  i = r(21);\n                n.a = function (t, n) {\n                  var r = [];\n                  if (!Object(e.a)(t)) return r;\n                  for (var o = -1, u = [], a = t.length; ++o < a; ) {\n                    var c = t[o];\n                    n(c, o, t) && (r.push(c), u.push(o));\n                  }\n                  return Object(i.a)(t, u), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8),\n                  o = r(3);\n                n.a = function (t, n) {\n                  var r;\n                  if (Object(o.a)(n))\n                    r = function (t, r) {\n                      return n(t) - n(r);\n                    };\n                  else {\n                    var u = [];\n                    Object(i.a)(n) ? u.push(n) : Object(e.a)(n) && (u = n),\n                      (r = function (t, n) {\n                        for (var r = 0; r < u.length; r += 1) {\n                          var e = u[r];\n                          if (t[e] > n[e]) return 1;\n                          if (t[e] < n[e]) return -1;\n                        }\n                        return 0;\n                      });\n                  }\n                  return t.sort(r), t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(22);\n                n.a = function () {\n                  for (var t = [], n = 0; n < arguments.length; n++)\n                    t[n] = arguments[n];\n                  return Object(e.a)([].concat.apply([], t));\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(6);\n                n.a = function (t, n) {\n                  var r = [],\n                    u = {};\n                  return (\n                    t.forEach(function (t) {\n                      var a = t[n];\n                      Object(o.a)(a) ||\n                        (Object(i.a)(a) || (a = [a]),\n                        Object(e.a)(a, function (t) {\n                          u[t] || (r.push(t), (u[t] = !0));\n                        }));\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return t[0];\n                };\n                var e = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return t[t.length - 1];\n                };\n                var e = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8);\n                n.a = function (t, n) {\n                  return !(!Object(e.a)(t) && !Object(i.a)(t)) && t[0] === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8);\n                n.a = function (t, n) {\n                  return (\n                    !(!Object(e.a)(t) && !Object(i.a)(t)) &&\n                    t[t.length - 1] === n\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  for (var r = 0; r < t.length; r++) if (!n(t[r], r)) return !1;\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  for (var r = 0; r < t.length; r++) if (n(t[r], r)) return !0;\n                  return !1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(23);\n                n.a = function (t, n) {\n                  if (!n) return [t];\n                  var r = Object(e.a)(t, n),\n                    i = [];\n                  for (var o in r) i.push(r[o]);\n                  return i;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t[\"_wrap_\" + n];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  if (t[\"_wrap_\" + n]) return t[\"_wrap_\" + n];\n                  var r = function (r) {\n                    t[n](r);\n                  };\n                  return (t[\"_wrap_\" + n] = r), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {};\n                n.a = function (t) {\n                  var n = e[t];\n                  if (!n) {\n                    for (var r = t.toString(16), i = r.length; i < 6; i++)\n                      r = \"0\" + r;\n                    (n = \"#\" + r), (e[t] = n);\n                  }\n                  return n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function (t) {\n                  var n = 0,\n                    r = 0,\n                    i = 0,\n                    o = 0;\n                  return (\n                    Object(e.a)(t)\n                      ? 1 === t.length\n                        ? (n = r = i = o = t[0])\n                        : 2 === t.length\n                        ? ((n = i = t[0]), (r = o = t[1]))\n                        : 3 === t.length\n                        ? ((n = t[0]), (r = o = t[1]), (i = t[2]))\n                        : ((n = t[0]), (r = t[1]), (i = t[2]), (o = t[3]))\n                      : (n = r = i = o = t),\n                    { r1: n, r2: r, r3: i, r4: o }\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  return t < n ? n : t > r ? r : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  var r = n.toString(),\n                    e = r.indexOf(\".\");\n                  if (-1 === e) return Math.round(t);\n                  var i = r.substr(e + 1).length;\n                  return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 1 != 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 2 == 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5),\n                  i = Number.isInteger\n                    ? Number.isInteger\n                    : function (t) {\n                        return Object(e.a)(t) && t % 1 == 0;\n                      };\n                n.a = i;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t < 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  return void 0 === r && (r = 1e-5), Math.abs(t - n) < r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 2 != 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t > 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(3);\n                n.a = function (t, n) {\n                  if (Object(i.a)(t)) {\n                    var r,\n                      u,\n                      a = t[0];\n                    return (\n                      (r = Object(o.a)(n) ? n(t[0]) : t[0][n]),\n                      Object(e.a)(t, function (t) {\n                        (u = Object(o.a)(n) ? n(t) : t[n]) > r &&\n                          ((a = t), (r = u));\n                      }),\n                      a\n                    );\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(3);\n                n.a = function (t, n) {\n                  if (Object(i.a)(t)) {\n                    var r,\n                      u,\n                      a = t[0];\n                    return (\n                      (r = Object(o.a)(n) ? n(t[0]) : t[0][n]),\n                      Object(e.a)(t, function (t) {\n                        (u = Object(o.a)(n) ? n(t) : t[n]) < r &&\n                          ((a = t), (r = u));\n                      }),\n                      a\n                    );\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return ((t % n) + n) % n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = 180 / Math.PI;\n                n.a = function (t) {\n                  return e * t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = parseInt;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Math.PI / 180;\n                n.a = function (t) {\n                  return e * t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2);\n                n.a = e.a;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(25);\n                n.a = e.a;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(12),\n                  i = r(26);\n                n.a = function (t, n) {\n                  return Object(e.a)(Object(i.a)(t), n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  return Object(e.a)(t).toLowerCase();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  var n = Object(e.a)(t);\n                  return n.charAt(0).toLowerCase() + n.substring(1);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t && n\n                    ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, r) {\n                        return \"\\\\\" === t.charAt(0)\n                          ? t.slice(1)\n                          : void 0 === n[r]\n                          ? \"\"\n                          : n[r];\n                      })\n                    : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  return Object(e.a)(t).toUpperCase();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  var n = Object(e.a)(t);\n                  return n.charAt(0).toUpperCase() + n.substring(1);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Arguments\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Boolean\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Date\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Error\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && isFinite(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return null === t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"RegExp\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return void 0 === t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return t instanceof Element || t instanceof HTMLDocument;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return (\n                    window.requestAnimationFrame ||\n                    window.webkitRequestAnimationFrame ||\n                    window.mozRequestAnimationFrame ||\n                    window.msRequestAnimationFrame ||\n                    function (t) {\n                      return setTimeout(t, 16);\n                    }\n                  )(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  (\n                    window.cancelAnimationFrame ||\n                    window.webkitCancelAnimationFrame ||\n                    window.mozCancelAnimationFrame ||\n                    window.msCancelAnimationFrame ||\n                    clearTimeout\n                  )(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(16),\n                  i = r(3);\n                n.a = function () {\n                  for (var t = [], n = 0; n < arguments.length; n++)\n                    t[n] = arguments[n];\n                  for (var r = t[0], o = 1; o < t.length; o++) {\n                    var u = t[o];\n                    Object(i.a)(u) && (u = u.prototype),\n                      Object(e.a)(r.prototype, u);\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function t(n) {\n                  if (\"object\" !== u(n) || null === n) return n;\n                  var r;\n                  if (Object(e.a)(n)) {\n                    r = [];\n                    for (var i = 0, o = n.length; i < o; i++)\n                      \"object\" === u(n[i]) && null != n[i]\n                        ? (r[i] = t(n[i]))\n                        : (r[i] = n[i]);\n                  } else\n                    for (var a in ((r = {}), n))\n                      \"object\" === u(n[a]) && null != n[a]\n                        ? (r[a] = t(n[a]))\n                        : (r[a] = n[a]);\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  var e;\n                  return function () {\n                    var i = this,\n                      o = arguments,\n                      u = function () {\n                        (e = null), r || t.apply(i, o);\n                      },\n                      a = r && !e;\n                    clearTimeout(e), (e = setTimeout(u, n)), a && t.apply(i, o);\n                  };\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3);\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t))\n                    throw new TypeError(\"Expected a function\");\n                  var r = function r() {\n                    for (var e = [], i = 0; i < arguments.length; i++)\n                      e[i] = arguments[i];\n                    var o = n ? n.apply(this, e) : e[0],\n                      u = r.cache;\n                    if (u.has(o)) return u.get(o);\n                    var a = t.apply(this, e);\n                    return u.set(o, a), a;\n                  };\n                  return (r.cache = new Map()), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(9);\n                function o(t, n, r, u) {\n                  for (var a in ((r = r || 0), (u = u || 5), n))\n                    if (n.hasOwnProperty(a)) {\n                      var c = n[a];\n                      null !== c && Object(i.a)(c)\n                        ? (Object(i.a)(t[a]) || (t[a] = {}),\n                          r < u ? o(t[a], c, r + 1, u) : (t[a] = n[a]))\n                        : Object(e.a)(c)\n                        ? ((t[a] = []), (t[a] = t[a].concat(c)))\n                        : void 0 !== c && (t[a] = c);\n                    }\n                }\n                n.a = function (t) {\n                  for (var n = [], r = 1; r < arguments.length; r++)\n                    n[r - 1] = arguments[r];\n                  for (var e = 0; e < n.length; e += 1) o(t, n[e]);\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(16),\n                  i = r(3);\n                n.a = function (t, n, r, o) {\n                  Object(i.a)(n) || ((r = n), (n = t), (t = function () {}));\n                  var u = Object.create\n                      ? function (t, n) {\n                          return Object.create(t, {\n                            constructor: { value: n },\n                          });\n                        }\n                      : function (t, n) {\n                          function r() {}\n                          r.prototype = t;\n                          var e = new r();\n                          return (e.constructor = n), e;\n                        },\n                    a = u(n.prototype, t);\n                  return (\n                    (t.prototype = Object(e.a)(a, t.prototype)),\n                    (t.superclass = u(n.prototype, n)),\n                    Object(e.a)(a, r),\n                    Object(e.a)(t, o),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t)) return -1;\n                  var r = Array.prototype.indexOf;\n                  if (r) return r.call(t, n);\n                  for (var i = -1, o = 0; o < t.length; o++)\n                    if (t[o] === n) {\n                      i = o;\n                      break;\n                    }\n                  return i;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(1),\n                  o = r(27),\n                  u = r(28),\n                  a = Object.prototype.hasOwnProperty;\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return !0;\n                  if (Object(i.a)(t)) return !t.length;\n                  var n = Object(o.a)(t);\n                  if (\"Map\" === n || \"Set\" === n) return !t.size;\n                  if (Object(u.a)(t)) return !Object.keys(t).length;\n                  for (var r in t) if (a.call(t, r)) return !1;\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3),\n                  i = r(29);\n                n.a = function (t, n, r) {\n                  return Object(e.a)(r) ? !!r(t, n) : Object(i.a)(t, n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(1);\n                n.a = function (t, n) {\n                  if (!Object(i.a)(t)) return t;\n                  var r = [];\n                  return (\n                    Object(e.a)(t, function (t, e) {\n                      r.push(n(t, e));\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(13),\n                  o = function (t) {\n                    return t;\n                  };\n                n.a = function (t, n) {\n                  void 0 === n && (n = o);\n                  var r = {};\n                  return (\n                    Object(i.a)(t) &&\n                      !Object(e.a)(t) &&\n                      Object.keys(t).forEach(function (e) {\n                        r[e] = n(t[e], e);\n                      }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(8);\n                n.a = function (t, n, r) {\n                  for (\n                    var i = 0, o = Object(e.a)(n) ? n.split(\".\") : n;\n                    t && i < o.length;\n\n                  )\n                    t = t[o[i++]];\n                  return void 0 === t || i < o.length ? r : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(13),\n                  i = r(8),\n                  o = r(5);\n                n.a = function (t, n, r) {\n                  var u = t,\n                    a = Object(i.a)(n) ? n.split(\".\") : n;\n                  return (\n                    a.forEach(function (t, n) {\n                      n < a.length - 1\n                        ? (Object(e.a)(u[t]) ||\n                            (u[t] = Object(o.a)(a[n + 1]) ? [] : {}),\n                          (u = u[t]))\n                        : (u[t] = r);\n                    }),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(9),\n                  o = Object.prototype.hasOwnProperty;\n                n.a = function (t, n) {\n                  if (null === t || !Object(i.a)(t)) return {};\n                  var r = {};\n                  return (\n                    Object(e.a)(n, function (n) {\n                      o.call(t, n) && (r[n] = t[n]);\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  var e,\n                    i,\n                    o,\n                    u,\n                    a = 0;\n                  r || (r = {});\n                  var c = function () {\n                      (a = !1 === r.leading ? 0 : Date.now()),\n                        (e = null),\n                        (u = t.apply(i, o)),\n                        e || (i = o = null);\n                    },\n                    f = function () {\n                      var f = Date.now();\n                      a || !1 !== r.leading || (a = f);\n                      var s = n - (f - a);\n                      return (\n                        (i = this),\n                        (o = arguments),\n                        s <= 0 || s > n\n                          ? (e && (clearTimeout(e), (e = null)),\n                            (a = f),\n                            (u = t.apply(i, o)),\n                            e || (i = o = null))\n                          : e || !1 === r.trailing || (e = setTimeout(c, s)),\n                        u\n                      );\n                    };\n                  return (\n                    (f.cancel = function () {\n                      clearTimeout(e), (a = 0), (e = i = o = null);\n                    }),\n                    f\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t) {\n                  return Object(e.a)(t) ? Array.prototype.slice.call(t) : [];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {};\n                n.a = function (t) {\n                  return e[(t = t || \"g\")] ? (e[t] += 1) : (e[t] = 1), t + e[t];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function () {};\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return Object(e.a)(t)\n                    ? 0\n                    : Object(i.a)(t)\n                    ? t.length\n                    : Object.keys(t).length;\n                };\n                var e = r(6),\n                  i = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = (function () {\n                  function t() {\n                    this.map = {};\n                  }\n                  return (\n                    (t.prototype.has = function (t) {\n                      return void 0 !== this.map[t];\n                    }),\n                    (t.prototype.get = function (t, n) {\n                      var r = this.map[t];\n                      return void 0 === r ? n : r;\n                    }),\n                    (t.prototype.set = function (t, n) {\n                      this.map[t] = n;\n                    }),\n                    (t.prototype.clear = function () {\n                      this.map = {};\n                    }),\n                    (t.prototype.delete = function (t) {\n                      delete this.map[t];\n                    }),\n                    (t.prototype.size = function () {\n                      return Object.keys(this.map).length;\n                    }),\n                    t\n                  );\n                })();\n                n.a = e;\n              },\n              function (t, n) {\n                function r(t, n, r, e) {\n                  void 0 === e && (e = []);\n                  var i = this;\n                  (i.w = t || 0),\n                    (i.h = n || 0),\n                    (i.y = r || 0),\n                    (i.x = 0),\n                    (i.c = e || []),\n                    (i.cs = e.length),\n                    (i.prelim = 0),\n                    (i.mod = 0),\n                    (i.shift = 0),\n                    (i.change = 0),\n                    (i.tl = null),\n                    (i.tr = null),\n                    (i.el = null),\n                    (i.er = null),\n                    (i.msel = 0),\n                    (i.mser = 0);\n                }\n                function e(t, n) {\n                  var r = (function t(n, r) {\n                    var e = r ? n.y : n.x;\n                    return (\n                      n.children.forEach(function (n) {\n                        e = Math.min(t(n, r), e);\n                      }),\n                      e\n                    );\n                  })(t, n);\n                  !(function t(n, r, e) {\n                    e ? (n.y += r) : (n.x += r),\n                      n.children.forEach(function (n) {\n                        t(n, r, e);\n                      });\n                  })(t, -r, n);\n                }\n                (r.fromNode = function (t, n) {\n                  if (!t) return null;\n                  var e = [];\n                  return (\n                    t.children.forEach(function (t) {\n                      e.push(r.fromNode(t, n));\n                    }),\n                    n\n                      ? new r(t.height, t.width, t.x, e)\n                      : new r(t.width, t.height, t.y, e)\n                  );\n                }),\n                  (t.exports = function (t, n) {\n                    void 0 === n && (n = {});\n                    var i = n.isHorizontal;\n                    function o(t) {\n                      0 === t.cs\n                        ? ((t.el = t), (t.er = t), (t.msel = t.mser = 0))\n                        : ((t.el = t.c[0].el),\n                          (t.msel = t.c[0].msel),\n                          (t.er = t.c[t.cs - 1].er),\n                          (t.mser = t.c[t.cs - 1].mser));\n                    }\n                    function u(t, n, r) {\n                      for (\n                        var e = t.c[n - 1], i = e.mod, o = t.c[n], u = o.mod;\n                        null !== e && null !== o;\n\n                      ) {\n                        s(e) > r.low && (r = r.nxt);\n                        var l = i + e.prelim + e.w - (u + o.prelim);\n                        l > 0 && ((u += l), a(t, n, r.index, l));\n                        var d = s(e),\n                          h = s(o);\n                        d <= h && null !== (e = f(e)) && (i += e.mod),\n                          d >= h && null !== (o = c(o)) && (u += o.mod);\n                      }\n                      !e && o\n                        ? (function (t, n, r, e) {\n                            var i = t.c[0].el;\n                            i.tl = r;\n                            var o = e - r.mod - t.c[0].msel;\n                            (i.mod += o),\n                              (i.prelim -= o),\n                              (t.c[0].el = t.c[n].el),\n                              (t.c[0].msel = t.c[n].msel);\n                          })(t, n, o, u)\n                        : e &&\n                          !o &&\n                          (function (t, n, r, e) {\n                            var i = t.c[n].er;\n                            i.tr = r;\n                            var o = e - r.mod - t.c[n].mser;\n                            (i.mod += o),\n                              (i.prelim -= o),\n                              (t.c[n].er = t.c[n - 1].er),\n                              (t.c[n].mser = t.c[n - 1].mser);\n                          })(t, n, e, i);\n                    }\n                    function a(t, n, r, e) {\n                      (t.c[n].mod += e),\n                        (t.c[n].msel += e),\n                        (t.c[n].mser += e),\n                        (function (t, n, r, e) {\n                          if (r !== n - 1) {\n                            var i = n - r;\n                            (t.c[r + 1].shift += e / i),\n                              (t.c[n].shift -= e / i),\n                              (t.c[n].change -= e - e / i);\n                          }\n                        })(t, n, r, e);\n                    }\n                    function c(t) {\n                      return 0 === t.cs ? t.tl : t.c[0];\n                    }\n                    function f(t) {\n                      return 0 === t.cs ? t.tr : t.c[t.cs - 1];\n                    }\n                    function s(t) {\n                      return t.y + t.h;\n                    }\n                    function l(t, n, r) {\n                      for (; null !== r && t >= r.low; ) r = r.nxt;\n                      return { low: t, index: n, nxt: r };\n                    }\n                    !(function t(n, r, e) {\n                      void 0 === e && (e = 0),\n                        r\n                          ? ((n.x = e), (e += n.width))\n                          : ((n.y = e), (e += n.height)),\n                        n.children.forEach(function (n) {\n                          t(n, r, e);\n                        });\n                    })(t, i);\n                    var d = r.fromNode(t, i);\n                    return (\n                      (function t(n) {\n                        if (0 !== n.cs) {\n                          t(n.c[0]);\n                          for (\n                            var r = l(s(n.c[0].el), 0, null), e = 1;\n                            e < n.cs;\n                            ++e\n                          ) {\n                            t(n.c[e]);\n                            var i = s(n.c[e].er);\n                            u(n, e, r), (r = l(i, e, r));\n                          }\n                          !(function (t) {\n                            t.prelim =\n                              (t.c[0].prelim +\n                                t.c[0].mod +\n                                t.c[t.cs - 1].mod +\n                                t.c[t.cs - 1].prelim +\n                                t.c[t.cs - 1].w) /\n                                2 -\n                              t.w / 2;\n                          })(n),\n                            o(n);\n                        } else o(n);\n                      })(d),\n                      (function t(n, r) {\n                        (r += n.mod),\n                          (n.x = n.prelim + r),\n                          (function (t) {\n                            for (var n = 0, r = 0, e = 0; e < t.cs; e++)\n                              (n += t.c[e].shift),\n                                (r += n + t.c[e].change),\n                                (t.c[e].mod += r);\n                          })(n);\n                        for (var e = 0; e < n.cs; e++) t(n.c[e], r);\n                      })(d, 0),\n                      (function t(n, r, e) {\n                        e ? (r.y = n.x) : (r.x = n.x),\n                          n.c.forEach(function (n, i) {\n                            t(n, r.children[i], e);\n                          });\n                      })(d, t, i),\n                      e(t, i),\n                      t\n                    );\n                  });\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(115),\n                  o = r(17),\n                  u = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return (\n                          (this.rootNode.width = 0),\n                          o(this.rootNode, this.options, i)\n                        );\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                var e = r(7);\n                function i(t, n) {\n                  void 0 === t && (t = 0), void 0 === n && (n = []);\n                  var r = this;\n                  (r.x = r.y = 0),\n                    (r.leftChild = r.rightChild = null),\n                    (r.height = 0),\n                    (r.children = n);\n                }\n                var o = {\n                  isHorizontal: !0,\n                  nodeSep: 20,\n                  nodeSize: 20,\n                  rankSep: 200,\n                  subTreeSep: 10,\n                };\n                t.exports = function (t, n) {\n                  void 0 === n && (n = {}), (n = e.assign({}, o, n));\n                  var r,\n                    u = 0,\n                    a = (function t(n) {\n                      if (!n) return null;\n                      (n.width = 0), n.depth && n.depth > u && (u = n.depth);\n                      var r = n.children,\n                        e = r.length,\n                        o = new i(n.height, []);\n                      return (\n                        r.forEach(function (n, r) {\n                          var i = t(n);\n                          o.children.push(i),\n                            0 === r && (o.leftChild = i),\n                            r === e - 1 && (o.rightChild = i);\n                        }),\n                        (o.originNode = n),\n                        (o.isLeaf = n.isLeaf()),\n                        o\n                      );\n                    })(t);\n                  return (\n                    (function t(n) {\n                      if (n.isLeaf || 0 === n.children.length)\n                        n.drawingDepth = u;\n                      else {\n                        var r = n.children.map(function (n) {\n                            return t(n);\n                          }),\n                          e = Math.min.apply(null, r);\n                        n.drawingDepth = e - 1;\n                      }\n                      return n.drawingDepth;\n                    })(a),\n                    (function t(e) {\n                      (e.x = e.drawingDepth * n.rankSep),\n                        e.isLeaf\n                          ? ((e.y = 0),\n                            r &&\n                              ((e.y = r.y + r.height + n.nodeSep),\n                              e.originNode.parent !== r.originNode.parent &&\n                                (e.y += n.subTreeSep)),\n                            (r = e))\n                          : (e.children.forEach(function (n) {\n                              t(n);\n                            }),\n                            (e.y = (e.leftChild.y + e.rightChild.y) / 2));\n                    })(a),\n                    (function t(n, r, e) {\n                      e\n                        ? ((r.x = n.x), (r.y = n.y))\n                        : ((r.x = n.y), (r.y = n.x)),\n                        n.children.forEach(function (n, i) {\n                          t(n, r.children[i], e);\n                        });\n                    })(a, t, n.isHorizontal),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(117),\n                  o = r(30),\n                  u = r(7),\n                  a = [\"LR\", \"RL\", \"H\"],\n                  c = a[0],\n                  f = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        var t = this.options,\n                          n = this.rootNode;\n                        t.isHorizontal = !0;\n                        var r = t.indent,\n                          e = void 0 === r ? 20 : r,\n                          u = t.dropCap,\n                          f = void 0 === u || u,\n                          s = t.direction || c;\n                        if (s && -1 === a.indexOf(s))\n                          throw new TypeError(\"Invalid direction: \" + s);\n                        if (s === a[0]) i(n, e, f);\n                        else if (s === a[1]) i(n, e, f), n.right2left();\n                        else if (s === a[2]) {\n                          var l = o(n, t),\n                            d = l.left,\n                            h = l.right;\n                          i(d, e, f), d.right2left(), i(h, e, f);\n                          var p = d.getBoundingBox();\n                          h.translate(p.width, 0), (n.x = h.x - n.width / 2);\n                        }\n                        return n;\n                      }),\n                      e\n                    );\n                  })(e),\n                  s = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, s, n)), new f(t, n).execute();\n                };\n              },\n              function (t, n) {\n                t.exports = function (t, n, r) {\n                  var e = null;\n                  t.eachNode(function (t) {\n                    !(function (t, n, r, e) {\n                      if (!e)\n                        try {\n                          if (t.id === t.parent.children[0].id)\n                            return (\n                              (t.x += r * t.depth), void (t.y = n ? n.y : 0)\n                            );\n                        } catch (t) {}\n                      (t.x += r * t.depth), (t.y = n ? n.y + n.height : 0);\n                    })(t, e, n, r),\n                      (e = t);\n                  });\n                };\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(119),\n                  o = r(17),\n                  u = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return o(this.rootNode, this.options, i);\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                var e = r(7),\n                  i = {\n                    getSubTreeSep: function () {\n                      return 0;\n                    },\n                  };\n                t.exports = function (t, n) {\n                  void 0 === n && (n = {}),\n                    (n = e.assign({}, i, n)),\n                    (t.parent = { x: 0, width: 0, height: 0, y: 0 }),\n                    t.BFTraverse(function (t) {\n                      t.x = t.parent.x + t.parent.width;\n                    }),\n                    (t.parent = null),\n                    (function t(n, r) {\n                      var e = 0;\n                      return (\n                        n.children.length\n                          ? n.children.forEach(function (n) {\n                              e += t(n, r);\n                            })\n                          : (e = n.height),\n                        (n._subTreeSep = r.getSubTreeSep(n.data)),\n                        (n.totalHeight =\n                          Math.max(n.height, e) + 2 * n._subTreeSep),\n                        n.totalHeight\n                      );\n                    })(t, n),\n                    (t.startY = 0),\n                    (t.y = t.totalHeight / 2 - t.height / 2),\n                    t.eachNode(function (t) {\n                      var n = t.children,\n                        r = n.length;\n                      if (r) {\n                        var e = n[0];\n                        if (((e.startY = t.startY + t._subTreeSep), 1 === r))\n                          e.y = t.y + t.height / 2 - e.height / 2;\n                        else {\n                          e.y = e.startY + e.totalHeight / 2 - e.height / 2;\n                          for (var i = 1; i < r; i++) {\n                            var o = n[i];\n                            (o.startY = n[i - 1].startY + n[i - 1].totalHeight),\n                              (o.y =\n                                o.startY + o.totalHeight / 2 - o.height / 2);\n                          }\n                        }\n                      }\n                    }),\n                    (function t(n) {\n                      var r = n.children,\n                        e = r.length;\n                      if (e) {\n                        r.forEach(function (n) {\n                          t(n);\n                        });\n                        var i = r[0],\n                          o = r[e - 1],\n                          u = o.y - i.y + o.height,\n                          a = 0;\n                        if (\n                          (r.forEach(function (t) {\n                            a += t.totalHeight;\n                          }),\n                          u > n.height)\n                        )\n                          n.y = i.y + u / 2 - n.height / 2;\n                        else if (1 !== r.length || n.height > a) {\n                          var c = n.y + (n.height - u) / 2 - i.y;\n                          r.forEach(function (t) {\n                            t.translate(0, c);\n                          });\n                        } else\n                          n.y =\n                            (i.y + i.height / 2 + o.y + o.height / 2) / 2 -\n                            n.height / 2;\n                      }\n                    })(t);\n                };\n              },\n            ]);\n          }),\n          \"object\" === u(n) && \"object\" === u(t)\n            ? (t.exports = o())\n            : ((e = []),\n              void 0 ===\n                (i = \"function\" == typeof (r = o) ? r.apply(n, e) : r) ||\n                (t.exports = i));\n      }).call(this, r(50)(t));\n    },\n    214: function (t, n, r) {\n      \"use strict\";\n      r.r(n);\n      var e = r(1),\n        i = r(104),\n        o = r.n(i),\n        u = r(0);\n      n.default = function (t) {\n        var n = t.Graph,\n          r = t.Util,\n          i = r.radialLayout,\n          a = r.traverseTree;\n        return (function (t) {\n          function n(n) {\n            var r = t.call(this, n) || this;\n            return (\n              (r.layoutAnimating = !1),\n              r.set(\"removeList\", []),\n              r.set(\"layoutMethod\", r.getLayout()),\n              r\n            );\n          }\n          return (\n            Object(e.c)(n, t),\n            (n.prototype.getLayout = function () {\n              var t = this.get(\"layout\");\n              return t\n                ? \"function\" == typeof t\n                  ? t\n                  : (t.type || (t.type = \"dendrogram\"),\n                    t.direction || (t.direction = \"TB\"),\n                    t.radial\n                      ? function (n) {\n                          var r = o.a[t.type](n, t);\n                          return i(r), r;\n                        }\n                      : function (n) {\n                          return o.a[t.type](n, t);\n                        })\n                : null;\n            }),\n            (n.indexOfChild = function (t, n) {\n              var r = -1;\n              return (\n                Object(u.c)(t, function (t, e) {\n                  if (n === t.id) return (r = e), !1;\n                }),\n                r\n              );\n            }),\n            (n.prototype.getDefaultCfg = function () {\n              var n = t.prototype.getDefaultCfg.call(this);\n              return (n.animate = !0), n;\n            }),\n            (n.prototype.innerAddChild = function (t, n, r) {\n              var e = this,\n                i = t.data;\n              i && ((i.x = t.x), (i.y = t.y), (i.depth = t.depth));\n              var o = e.addItem(\"node\", i, !1);\n              if (n) {\n                if ((o.set(\"parent\", n), r)) {\n                  var a = n.get(\"originAttrs\");\n                  if (a) o.set(\"originAttrs\", a);\n                  else {\n                    var c = n.getModel();\n                    o.set(\"originAttrs\", { x: c.x, y: c.y });\n                  }\n                }\n                var f = n.get(\"children\");\n                f ? f.push(o) : n.set(\"children\", [o]),\n                  e.addItem(\n                    \"edge\",\n                    {\n                      source: n,\n                      target: o,\n                      id: n.get(\"id\") + \":\" + o.get(\"id\"),\n                    },\n                    !1,\n                  );\n              }\n              return (\n                Object(u.c)(t.children || [], function (t) {\n                  e.innerAddChild(t, o, r);\n                }),\n                e.emit(\"afteraddchild\", { item: o, parent: n }),\n                o\n              );\n            }),\n            (n.prototype.innerUpdateChild = function (t, r, e) {\n              var i = this,\n                o = i.findById(t.id);\n              if (o) {\n                Object(u.c)(t.children || [], function (t) {\n                  i.innerUpdateChild(t, o, e);\n                });\n                var a,\n                  c,\n                  f = o.get(\"children\");\n                if (f)\n                  if (f.length > 0)\n                    for (var s = f.length - 1; s >= 0; s--) {\n                      var l = f[s].getModel();\n                      -1 === n.indexOfChild(t.children || [], l.id) &&\n                        (i.innerRemoveChild(l.id, { x: t.x, y: t.y }, e),\n                        f.splice(s, 1));\n                    }\n                o.get(\"originAttrs\") &&\n                  ((a = o.get(\"originAttrs\").x), (c = o.get(\"originAttrs\").y));\n                var d = o.getModel();\n                e && o.set(\"originAttrs\", { x: d.x, y: d.y }),\n                  o.set(\"model\", t.data),\n                  (a === t.x && c === t.y) ||\n                    o.updatePosition({ x: t.x, y: t.y });\n              } else i.innerAddChild(t, r, e);\n            }),\n            (n.prototype.innerRemoveChild = function (t, n, r) {\n              var e = this,\n                i = e.findById(t);\n              if (i)\n                if (\n                  (Object(u.c)(i.get(\"children\"), function (t) {\n                    e.innerRemoveChild(t.getModel().id, n, r);\n                  }),\n                  r)\n                ) {\n                  var o = i.getModel();\n                  i.set(\"to\", n),\n                    i.set(\"originAttrs\", { x: o.x, y: o.y }),\n                    e.get(\"removeList\").push(i);\n                } else e.removeItem(i);\n            }),\n            (n.prototype.changeData = function (t) {\n              var n = this;\n              this.getNodes().map(function (t) {\n                return n.clearItemStates(t);\n              }),\n                this.getEdges().map(function (t) {\n                  return n.clearItemStates(t);\n                }),\n                t ? (n.data(t), n.render()) : n.layout(this.get(\"fitView\"));\n            }),\n            (n.prototype.changeLayout = function (t) {\n              console.warn(\n                \"Please call updateLayout instead of changeLayout. changeLayout will be discarded soon\",\n              );\n              this.updateLayout(t);\n            }),\n            (n.prototype.updateLayout = function (t) {\n              t\n                ? (this.set(\"layout\", t),\n                  this.set(\"layoutMethod\", this.getLayout()),\n                  this.layout())\n                : console.warn(\"layout cannot be null\");\n            }),\n            (n.prototype.refreshLayout = function (t) {\n              console.warn(\n                \"Please call layout instead of refreshLayout. refreshLayout will be discarded soon\",\n              );\n              this.layout(t);\n            }),\n            (n.prototype.layout = function (t) {\n              var n = this.get(\"data\"),\n                r = this.get(\"layoutMethod\")(n, this.get(\"layout\")),\n                e = this.get(\"animate\");\n              (this.emit(\"beforerefreshlayout\", { data: n, layoutData: r }),\n              this.emit(\"beforelayout\"),\n              this.innerUpdateChild(r, void 0, e),\n              t) && this.get(\"viewController\").fitView();\n              e ? this.layoutAnimate(r) : (this.refresh(), this.paint()),\n                this.emit(\"afterrefreshlayout\", { data: n, layoutData: r }),\n                this.emit(\"afterlayout\");\n            }),\n            (n.prototype.addChild = function (t, n) {\n              this.emit(\"beforeaddchild\", { model: t, parent: n }),\n                Object(u.o)(n) || (n = n.get(\"id\"));\n              var r = this.findDataById(n);\n              r &&\n                (r.children || (r.children = []),\n                r.children.push(t),\n                this.changeData());\n            }),\n            (n.prototype.updateChildren = function (t, n) {\n              n && this.findById(n)\n                ? ((this.findDataById(n).children = t), this.changeData())\n                : console.warn(\n                    \"Update children failed! There is no node with id '\" +\n                      n +\n                      \"'\",\n                  );\n            }),\n            (n.prototype.updateChild = function (t, r) {\n              if (r && this.findById(r)) {\n                var e = this.findDataById(r),\n                  i = this.findById(t.id);\n                if ((e.children || (e.children = []), i)) {\n                  var o = n.indexOfChild(e.children, t.id);\n                  e.children[o] = t;\n                } else e.children.push(t);\n                this.changeData();\n              } else this.changeData(t);\n            }),\n            (n.prototype.removeChild = function (t) {\n              var r = this.findById(t);\n              if (r) {\n                var e = r.get(\"parent\");\n                if (e && !e.destroyed) {\n                  var i = this.findDataById(e.get(\"id\")),\n                    o = (i && i.children) || [],\n                    u = r.getModel(),\n                    a = n.indexOfChild(o, u.id);\n                  o.splice(a, 1);\n                }\n                this.changeData();\n              }\n            }),\n            (n.prototype.findDataById = function (t, n) {\n              var r = this;\n              if ((n || (n = r.get(\"data\")), t === n.id)) return n;\n              var e = null;\n              return (\n                Object(u.c)(n.children || [], function (n) {\n                  return n.id === t\n                    ? ((e = n), !1)\n                    : !(e = r.findDataById(t, n)) && void 0;\n                }),\n                e\n              );\n            }),\n            (n.prototype.layoutAnimate = function (t, n) {\n              var r = this,\n                e = this.get(\"animateCfg\");\n              r.emit(\"beforeanimate\", { data: t }),\n                r.getEdges().forEach(function (t) {\n                  var n = t.get(\"model\");\n                  n.sourceAnchor ||\n                    (n.sourceAnchor = t.get(\"sourceAnchorIndex\"));\n                }),\n                this.get(\"canvas\").animate(\n                  function (e) {\n                    a(t, function (i) {\n                      var o = r.findById(i.id);\n                      if (o) {\n                        var u = o.get(\"originAttrs\"),\n                          a = o.get(\"model\");\n                        if (\n                          (u ||\n                            ((u = { x: a.x, y: a.y }), o.set(\"originAttrs\", u)),\n                          n)\n                        ) {\n                          var c = n(o, e, u, t);\n                          o.set(\"model\", Object.assign(a, c));\n                        } else\n                          (a.x = u.x + (i.x - u.x) * e),\n                            (a.y = u.y + (i.y - u.y) * e);\n                      }\n                      return !0;\n                    }),\n                      Object(u.c)(r.get(\"removeList\"), function (t) {\n                        var n = t.getModel(),\n                          r = t.get(\"originAttrs\"),\n                          i = t.get(\"to\");\n                        (n.x = r.x + (i.x - r.x) * e),\n                          (n.y = r.y + (i.y - r.y) * e);\n                      }),\n                      r.refreshPositions();\n                  },\n                  {\n                    duration: e.duration,\n                    easing: e.ease,\n                    callback: function () {\n                      Object(u.c)(r.getNodes(), function (t) {\n                        t.set(\"originAttrs\", null);\n                      }),\n                        Object(u.c)(r.get(\"removeList\"), function (t) {\n                          r.removeItem(t);\n                        }),\n                        r.set(\"removeList\", []),\n                        e.callback && e.callback(),\n                        r.emit(\"afteranimate\", { data: t });\n                    },\n                    delay: e.delay,\n                  },\n                );\n            }),\n            (n.prototype.stopLayoutAnimate = function () {\n              this.get(\"canvas\").stopAnimate(),\n                this.emit(\"layoutanimateend\", { data: this.get(\"data\") }),\n                (this.layoutAnimating = !1);\n            }),\n            (n.prototype.isLayoutAnimating = function () {\n              return this.layoutAnimating;\n            }),\n            (n.prototype.render = function () {\n              if (!this.get(\"data\"))\n                throw new Error(\"data must be defined first\");\n              this.clear(),\n                this.emit(\"beforerender\"),\n                this.layout(this.get(\"fitView\")),\n                this.emit(\"afterrender\");\n            }),\n            (n.prototype.save = function () {\n              return this.get(\"data\");\n            }),\n            n\n          );\n        })(n);\n      };\n    },\n    50: function (t, n) {\n      t.exports = function (t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function () {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function () {\n                return t.l;\n              },\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function () {\n                return t.i;\n              },\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n  }).default;\n});\n//# sourceMappingURL=treeGraph.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/circularLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function r(n) {\n      if (e[n]) return e[n].exports;\n      var o = (e[n] = { i: n, l: !1, exports: {} });\n      return t[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = e),\n      (r.d = function (t, e, n) {\n        r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, e) {\n        if ((1 & e && (t = r(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var n = Object.create(null);\n        if (\n          (r.r(n),\n          Object.defineProperty(n, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            r.d(\n              n,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return n;\n      }),\n      (r.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(e, \"a\", e), e;\n      }),\n      (r.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (r.p = \"\"),\n      r((r.s = 215))\n    );\n  })({\n    10: function (t, e, r) {\n      \"use strict\";\n      var n =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, r, n) {\n                void 0 === n && (n = r),\n                  Object.defineProperty(t, n, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[r];\n                    },\n                  });\n              }\n            : function (t, e, r, n) {\n                void 0 === n && (n = r), (t[n] = e[r]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var r in t)\n              \"default\" === r ||\n                Object.prototype.hasOwnProperty.call(e, r) ||\n                n(e, t, r);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(r(11), e),\n        o(r(12), e),\n        o(r(13), e),\n        o(r(14), e),\n        o(r(15), e),\n        o(r(16), e);\n    },\n    11: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var n,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((n = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = n(t));\n        });\n    },\n    12: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var r = parseFloat(t);\n        return e.isNaN(r) ? t : r;\n      };\n    },\n    14: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, r) {\n        for (var n = [], o = 0; o < t; o++) n[o] = 0;\n        return r\n          ? (r.forEach(function (t) {\n              t.source && (n[e[t.source]] += 1),\n                t.target && (n[e[t.target]] += 1);\n            }),\n            n)\n          : n;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], r = t.length, n = 0; n < r; n += 1) {\n          e[n] = [];\n          for (var o = 0; o < r; o += 1)\n            n === o\n              ? (e[n][o] = 0)\n              : 0 !== t[n][o] && t[n][o]\n              ? (e[n][o] = t[n][o])\n              : (e[n][o] = 1 / 0);\n        }\n        for (var i = 0; i < r; i += 1)\n          for (n = 0; n < r; n += 1)\n            for (o = 0; o < r; o += 1)\n              e[n][o] > e[n][i] + e[i][o] && (e[n][o] = e[n][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var r = t.nodes,\n          n = t.edges,\n          o = [],\n          i = {};\n        if (!r) throw new Error(\"invalid nodes data!\");\n        return (\n          r &&\n            r.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          n &&\n            n.forEach(function (t) {\n              var r = t.source,\n                n = t.target,\n                u = i[r],\n                s = i[n];\n              (o[u][s] = 1), e || (o[s][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var r = [];\n        return (\n          t.forEach(function (t) {\n            var n = [];\n            t.forEach(function (t) {\n              n.push(t * e);\n            }),\n              r.push(n);\n          }),\n          r\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, r) {\n            if (e && e.children)\n              for (var n = e.children.length - 1; n >= 0; n--)\n                if (!t(e.children[n], r)) return;\n            return !!r(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, r) {\n      \"use strict\";\n      function n(t) {\n        return (n =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, r = 1, n = arguments.length; r < n; r++)\n                for (var o in (e = arguments[r]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === n(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var r = [];\n          return (\n            t.forEach(function (t) {\n              r.push(t);\n            }),\n            r.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === n(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    171: function (t, e, r) {\n      \"use strict\";\n      var n,\n        o =\n          (this && this.__extends) ||\n          ((n = function (t, e) {\n            return (n =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var r in e)\n                  Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function r() {\n              this.constructor = t;\n            }\n            n(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((r.prototype = e.prototype), new r()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.CircularLayout = void 0);\n      var i = r(7),\n        u = r(10);\n      function s(t, e) {\n        var r = t.degree,\n          n = e.degree;\n        return r < n ? -1 : r > n ? 1 : 0;\n      }\n      var c = (function (t) {\n        function e(e) {\n          var r = t.call(this) || this;\n          return (\n            (r.radius = null),\n            (r.startRadius = null),\n            (r.endRadius = null),\n            (r.startAngle = 0),\n            (r.endAngle = 2 * Math.PI),\n            (r.clockwise = !0),\n            (r.divisions = 1),\n            (r.ordering = null),\n            (r.angleRatio = 1),\n            (r.nodes = []),\n            (r.edges = []),\n            (r.nodeMap = {}),\n            (r.degrees = []),\n            (r.width = 300),\n            (r.height = 300),\n            r.updateCfg(e),\n            r\n          );\n        }\n        return (\n          o(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return {\n              radius: null,\n              startRadius: null,\n              endRadius: null,\n              startAngle: 0,\n              endAngle: 2 * Math.PI,\n              clockwise: !0,\n              divisions: 1,\n              ordering: null,\n              angleRatio: 1,\n            };\n          }),\n          (e.prototype.execute = function () {\n            var t = this.nodes,\n              e = this.edges,\n              r = t.length;\n            if (0 !== r) {\n              this.width ||\n                \"undefined\" == typeof window ||\n                (this.width = window.innerWidth),\n                this.height ||\n                  \"undefined\" == typeof window ||\n                  (this.height = window.innerHeight),\n                this.center ||\n                  (this.center = [this.width / 2, this.height / 2]);\n              var n = this.center;\n              if (1 === r)\n                return (\n                  (t[0].x = n[0]),\n                  (t[0].y = n[1]),\n                  void (this.onLayoutEnd && this.onLayoutEnd())\n                );\n              var o = this.radius,\n                i = this.startRadius,\n                s = this.endRadius,\n                c = this.divisions,\n                a = this.startAngle,\n                f = this.endAngle,\n                d = (f - a) / r,\n                l = {};\n              t.forEach(function (t, e) {\n                l[t.id] = e;\n              }),\n                (this.nodeMap = l);\n              var h = u.getDegree(t.length, l, e);\n              (this.degrees = h),\n                o || i || s\n                  ? !i && s\n                    ? (i = s)\n                    : i && !s && (s = i)\n                  : (o =\n                      this.height > this.width\n                        ? this.width / 2\n                        : this.height / 2);\n              var p = d * this.angleRatio,\n                y = this.ordering,\n                g = [];\n              g =\n                \"topology\" === y\n                  ? this.topologyOrdering()\n                  : \"topology-directed\" === y\n                  ? this.topologyOrdering(!0)\n                  : \"degree\" === y\n                  ? this.degreeOrdering()\n                  : t;\n              for (\n                var v = this.clockwise, b = Math.ceil(r / c), _ = 0;\n                _ < r;\n                ++_\n              ) {\n                var O = o;\n                O ||\n                  null === i ||\n                  null === s ||\n                  (O = i + (_ * (s - i)) / (r - 1)),\n                  O || (O = 10 + (100 * _) / (r - 1));\n                var j =\n                  a + (_ % b) * p + ((2 * Math.PI) / c) * Math.floor(_ / b);\n                v ||\n                  (j =\n                    f - (_ % b) * p - ((2 * Math.PI) / c) * Math.floor(_ / b)),\n                  (g[_].x = n[0] + Math.cos(j) * O),\n                  (g[_].y = n[1] + Math.sin(j) * O),\n                  (g[_].weight = h[_]);\n              }\n              return (\n                this.onLayoutEnd && this.onLayoutEnd(),\n                { nodes: g, edges: this.edges }\n              );\n            }\n            this.onLayoutEnd && this.onLayoutEnd();\n          }),\n          (e.prototype.topologyOrdering = function (t) {\n            void 0 === t && (t = !1);\n            var e = this.degrees,\n              r = this.edges,\n              n = this.nodes,\n              o = u.clone(n),\n              i = this.nodeMap,\n              s = [o[0]],\n              c = [n[0]],\n              a = [],\n              f = n.length;\n            (a[0] = !0),\n              (function (t, e, r, n) {\n                t.forEach(function (e, r) {\n                  (t[r].children = []), (t[r].parent = []);\n                }),\n                  n\n                    ? e.forEach(function (e) {\n                        var n = 0;\n                        e.source && (n = r[e.source]);\n                        var o = 0;\n                        e.target && (o = r[e.target]);\n                        var i = t[n].children,\n                          u = t[o].parent;\n                        i.push(t[o].id), u.push(t[n].id);\n                      })\n                    : e.forEach(function (e) {\n                        var n = 0;\n                        e.source && (n = r[e.source]);\n                        var o = 0;\n                        e.target && (o = r[e.target]);\n                        var i = t[n].children,\n                          u = t[o].children;\n                        i.push(t[o].id), u.push(t[n].id);\n                      });\n              })(o, r, i, t);\n            var d = 0;\n            return (\n              o.forEach(function (t, u) {\n                if (0 !== u)\n                  if (\n                    (u !== f - 1 &&\n                      e[u] === e[u + 1] &&\n                      !(function (t, e, r) {\n                        for (var n = r.length, o = 0; o < n; o++)\n                          if (\n                            (t.id === r[o].source && e.id === r[o].target) ||\n                            (e.id === r[o].source && t.id === r[o].target)\n                          )\n                            return !0;\n                        return !1;\n                      })(s[d], t, r)) ||\n                    a[u]\n                  ) {\n                    for (\n                      var l = s[d].children, h = !1, p = 0;\n                      p < l.length;\n                      p++\n                    ) {\n                      var y = i[l[p]];\n                      if (e[y] === e[u] && !a[y]) {\n                        s.push(o[y]),\n                          c.push(n[i[o[y].id]]),\n                          (a[y] = !0),\n                          (h = !0);\n                        break;\n                      }\n                    }\n                    for (\n                      var g = 0;\n                      !h &&\n                      (a[g] ||\n                        (s.push(o[g]),\n                        c.push(n[i[o[g].id]]),\n                        (a[g] = !0),\n                        (h = !0)),\n                      ++g !== f);\n\n                    );\n                  } else s.push(t), c.push(n[i[t.id]]), (a[u] = !0), d++;\n              }),\n              c\n            );\n          }),\n          (e.prototype.degreeOrdering = function () {\n            var t = this.nodes,\n              e = [],\n              r = this.degrees;\n            return (\n              t.forEach(function (t, n) {\n                (t.degree = r[n]), e.push(t);\n              }),\n              e.sort(s),\n              e\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"circular\";\n          }),\n          e\n        );\n      })(i.Base);\n      e.CircularLayout = c;\n    },\n    215: function (t, e, r) {\n      \"use strict\";\n      r.r(e);\n      var n = r(171);\n      e.default = n.CircularLayout;\n    },\n    7: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var n = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = n;\n    },\n  }).default;\n});\n//# sourceMappingURL=circularLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/comboForceLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.f6 = t())\n    : (e.f6 = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function o(r) {\n      if (t[r]) return t[r].exports;\n      var n = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(n.exports, n, n.exports, o), (n.l = !0), n.exports;\n    }\n    return (\n      (o.m = e),\n      (o.c = t),\n      (o.d = function (e, t, r) {\n        o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (o.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (e, t) {\n        if ((1 & t && (e = o(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (o.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var n in e)\n            o.d(\n              r,\n              n,\n              function (t) {\n                return e[t];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (o.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return o.d(t, \"a\", t), t;\n      }),\n      (o.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (o.p = \"\"),\n      o((o.s = 216))\n    );\n  })({\n    10: function (e, t, o) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, o, r) {\n                void 0 === r && (r = o),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[o];\n                    },\n                  });\n              }\n            : function (e, t, o, r) {\n                void 0 === r && (r = o), (e[r] = t[o]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var o in e)\n              \"default\" === o ||\n                Object.prototype.hasOwnProperty.call(t, o) ||\n                r(t, e, o);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        n(o(11), t),\n        n(o(12), t),\n        n(o(13), t),\n        n(o(14), t),\n        n(o(15), t),\n        n(o(16), t);\n    },\n    11: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        n,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (e) {\n          return n[e] || (n[e] = r(e));\n        });\n    },\n    12: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var o = parseFloat(e);\n        return t.isNaN(o) ? e : o;\n      };\n    },\n    14: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, o) {\n        for (var r = [], n = 0; n < e; n++) r[n] = 0;\n        return o\n          ? (o.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], o = e.length, r = 0; r < o; r += 1) {\n          t[r] = [];\n          for (var n = 0; n < o; n += 1)\n            r === n\n              ? (t[r][n] = 0)\n              : 0 !== e[r][n] && e[r][n]\n              ? (t[r][n] = e[r][n])\n              : (t[r][n] = 1 / 0);\n        }\n        for (var i = 0; i < o; i += 1)\n          for (r = 0; r < o; r += 1)\n            for (n = 0; n < o; n += 1)\n              t[r][n] > t[r][i] + t[i][n] && (t[r][n] = t[r][i] + t[i][n]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var o = e.nodes,\n          r = e.edges,\n          n = [],\n          i = {};\n        if (!o) throw new Error(\"invalid nodes data!\");\n        return (\n          o &&\n            o.forEach(function (e, t) {\n              i[e.id] = t;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var o = e.source,\n                r = e.target,\n                c = i[o],\n                a = i[r];\n              (n[c][a] = 1), t || (n[a][c] = 1);\n            }),\n          n\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var o = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              o.push(r);\n          }),\n          o\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, o) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], o)) return;\n            return !!o(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, o) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (e) {\n              for (var t, o = 1, r = arguments.length; o < r; o++)\n                for (var n in (t = arguments[o]))\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var o = [];\n          return (\n            e.forEach(function (e) {\n              o.push(e);\n            }),\n            o.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = n({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    172: function (e, t, o) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var o in t)\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((o.prototype = t.prototype), new o()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.ComboForceLayout = void 0);\n      var i = o(7),\n        c = o(10),\n        a = (function (e) {\n          function t(t) {\n            var o = e.call(this) || this;\n            return (\n              (o.center = [0, 0]),\n              (o.maxIteration = 100),\n              (o.gravity = 10),\n              (o.comboGravity = 10),\n              (o.linkDistance = 10),\n              (o.alpha = 1),\n              (o.alphaMin = 0.001),\n              (o.alphaDecay = 1 - Math.pow(o.alphaMin, 1 / 300)),\n              (o.alphaTarget = 0),\n              (o.velocityDecay = 0.6),\n              (o.edgeStrength = 0.6),\n              (o.nodeStrength = 30),\n              (o.preventOverlap = !1),\n              (o.preventNodeOverlap = !1),\n              (o.preventComboOverlap = !1),\n              (o.collideStrength = void 0),\n              (o.nodeCollideStrength = 0.5),\n              (o.comboCollideStrength = 0.5),\n              (o.comboSpacing = 20),\n              (o.comboPadding = 10),\n              (o.optimizeRangeFactor = 1),\n              (o.onTick = function () {}),\n              (o.onLayoutEnd = function () {}),\n              (o.depthAttractiveForceScale = 1),\n              (o.depthRepulsiveForceScale = 2),\n              (o.nodes = []),\n              (o.edges = []),\n              (o.combos = []),\n              (o.comboTrees = []),\n              (o.width = 300),\n              (o.height = 300),\n              (o.bias = []),\n              (o.nodeMap = {}),\n              (o.oriComboMap = {}),\n              (o.indexMap = {}),\n              (o.comboMap = {}),\n              (o.previousLayouted = !1),\n              o.updateCfg(t),\n              o\n            );\n          }\n          return (\n            n(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                maxIteration: 100,\n                center: [0, 0],\n                gravity: 10,\n                speed: 1,\n                comboGravity: 30,\n                preventOverlap: !1,\n                preventComboOverlap: !0,\n                preventNodeOverlap: !0,\n                nodeSpacing: void 0,\n                collideStrength: void 0,\n                nodeCollideStrength: 0.5,\n                comboCollideStrength: 0.5,\n                comboSpacing: 20,\n                comboPadding: 10,\n                edgeStrength: 0.6,\n                nodeStrength: 30,\n                linkDistance: 10,\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this.nodes,\n                t = this.center;\n              if (\n                ((this.comboTree = {\n                  id: \"comboTreeRoot\",\n                  depth: -1,\n                  children: this.comboTrees,\n                }),\n                e && 0 !== e.length)\n              ) {\n                if (1 === e.length)\n                  return (\n                    (e[0].x = t[0]),\n                    (e[0].y = t[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                this.initVals(),\n                  this.run(),\n                  this.onLayoutEnd && this.onLayoutEnd();\n              } else this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (t.prototype.run = function () {\n              var e = this,\n                t = e.nodes,\n                o = e.previousLayouted ? e.maxIteration / 5 : e.maxIteration;\n              e.width ||\n                \"undefined\" == typeof window ||\n                (e.width = window.innerWidth),\n                e.height ||\n                  \"undefined\" == typeof window ||\n                  (e.height = window.innerHeight);\n              var r = e.center,\n                n = e.velocityDecay,\n                i = e.comboMap;\n              e.previousLayouted || e.initPos(i);\n              for (\n                var a = function (o) {\n                    var r = [];\n                    t.forEach(function (e, t) {\n                      r[t] = { x: 0, y: 0 };\n                    }),\n                      e.applyCalculate(r),\n                      e.applyComboCenterForce(r),\n                      t.forEach(function (e, t) {\n                        c.isNumber(e.x) &&\n                          c.isNumber(e.y) &&\n                          ((e.x += r[t].x * n), (e.y += r[t].y * n));\n                      }),\n                      (e.alpha += (e.alphaTarget - e.alpha) * e.alphaDecay),\n                      e.onTick();\n                  },\n                  u = 0;\n                u < o;\n                u++\n              )\n                a();\n              var s = [0, 0];\n              t.forEach(function (e) {\n                c.isNumber(e.x) &&\n                  c.isNumber(e.y) &&\n                  ((s[0] += e.x), (s[1] += e.y));\n              }),\n                (s[0] /= t.length),\n                (s[1] /= t.length);\n              var f = [r[0] - s[0], r[1] - s[1]];\n              t.forEach(function (e, t) {\n                c.isNumber(e.x) &&\n                  c.isNumber(e.y) &&\n                  ((e.x += f[0]), (e.y += f[1]));\n              }),\n                e.combos.forEach(function (e) {\n                  var t = i[e.id];\n                  t && t.empty && ((e.x = t.cx || e.x), (e.y = t.cy || e.y));\n                }),\n                (e.previousLayouted = !0);\n            }),\n            (t.prototype.initVals = function () {\n              var e = this.edges,\n                t = this.nodes,\n                o = this.combos,\n                r = {},\n                n = {},\n                i = {};\n              t.forEach(function (e, t) {\n                (n[e.id] = e), (i[e.id] = t);\n              }),\n                (this.nodeMap = n),\n                (this.indexMap = i);\n              var a = {};\n              o.forEach(function (e) {\n                a[e.id] = e;\n              }),\n                (this.oriComboMap = a),\n                (this.comboMap = this.getComboMap());\n              var u = this.preventOverlap;\n              (this.preventComboOverlap = this.preventComboOverlap || u),\n                (this.preventNodeOverlap = this.preventNodeOverlap || u);\n              var s = this.collideStrength;\n              s &&\n                ((this.comboCollideStrength = s),\n                (this.nodeCollideStrength = s)),\n                (this.comboCollideStrength = this.comboCollideStrength\n                  ? this.comboCollideStrength\n                  : 0),\n                (this.nodeCollideStrength = this.nodeCollideStrength\n                  ? this.nodeCollideStrength\n                  : 0);\n              for (var f = 0; f < e.length; ++f)\n                r[e[f].source] ? r[e[f].source]++ : (r[e[f].source] = 1),\n                  r[e[f].target] ? r[e[f].target]++ : (r[e[f].target] = 1);\n              var d = [];\n              for (f = 0; f < e.length; ++f)\n                d[f] = r[e[f].source] / (r[e[f].source] + r[e[f].target]);\n              this.bias = d;\n              var p,\n                h,\n                l = this.nodeSize,\n                y = this.nodeSpacing;\n              if (\n                ((h = c.isNumber(y)\n                  ? function () {\n                      return y;\n                    }\n                  : c.isFunction(y)\n                  ? y\n                  : function () {\n                      return 0;\n                    }),\n                (this.nodeSpacing = h),\n                l)\n              )\n                if (c.isFunction(l))\n                  p = function (e) {\n                    return l(e);\n                  };\n                else if (c.isArray(l)) {\n                  var v = (l[0] > l[1] ? l[0] : l[1]) / 2;\n                  p = function (e) {\n                    return v;\n                  };\n                } else {\n                  var m = l / 2;\n                  p = function (e) {\n                    return m;\n                  };\n                }\n              else\n                p = function (e) {\n                  return e.size\n                    ? c.isArray(e.size)\n                      ? (e.size[0] > e.size[1] ? e.size[0] : e.size[1]) / 2\n                      : e.size / 2\n                    : 10;\n                };\n              this.nodeSize = p;\n              var b,\n                g = this.comboSpacing;\n              (b = c.isNumber(g)\n                ? function () {\n                    return g;\n                  }\n                : c.isFunction(g)\n                ? g\n                : function () {\n                    return 0;\n                  }),\n                (this.comboSpacing = b);\n              var x,\n                S = this.comboPadding;\n              (x = c.isNumber(S)\n                ? function () {\n                    return S;\n                  }\n                : c.isArray(S)\n                ? function () {\n                    return Math.max.apply(null, S);\n                  }\n                : c.isFunction(S)\n                ? S\n                : function () {\n                    return 0;\n                  }),\n                (this.comboPadding = x);\n              var M,\n                O = this.linkDistance;\n              O || (O = 10),\n                (M = c.isNumber(O)\n                  ? function (e) {\n                      return O;\n                    }\n                  : O),\n                (this.linkDistance = M);\n              var N,\n                C = this.edgeStrength;\n              C || (C = 1),\n                (N = c.isNumber(C)\n                  ? function (e) {\n                      return C;\n                    }\n                  : C),\n                (this.edgeStrength = N);\n              var E,\n                _ = this.nodeStrength;\n              _ || (_ = 30),\n                (E = c.isNumber(_)\n                  ? function (e) {\n                      return _;\n                    }\n                  : _),\n                (this.nodeStrength = E);\n            }),\n            (t.prototype.initPos = function (e) {\n              this.nodes.forEach(function (t, o) {\n                var r = t.comboId,\n                  n = e[r];\n                r && n\n                  ? ((t.x = n.cx + 100 / (o + 1)), (t.y = n.cy + 100 / (o + 1)))\n                  : ((t.x = 100 / (o + 1)), (t.y = 100 / (o + 1)));\n              });\n            }),\n            (t.prototype.getComboMap = function () {\n              var e = this,\n                t = e.nodeMap,\n                o = e.indexMap,\n                r = e.comboTrees,\n                n = e.oriComboMap,\n                i = {};\n              return (\n                (r || []).forEach(function (r) {\n                  var a = [];\n                  c.traverseTreeUp(r, function (r) {\n                    if (\"node\" === r.itemType) return !0;\n                    if (!n[r.id]) return !0;\n                    if (void 0 === i[r.id]) {\n                      var u = {\n                        id: r.id,\n                        name: r.id,\n                        cx: 0,\n                        cy: 0,\n                        count: 0,\n                        depth: e.oriComboMap[r.id].depth,\n                        children: [],\n                      };\n                      i[r.id] = u;\n                    }\n                    var s = r.children;\n                    s &&\n                      s.forEach(function (e) {\n                        if (!i[e.id] && !t[e.id]) return !0;\n                        a.push(e);\n                      });\n                    var f = i[r.id];\n                    if (((f.cx = 0), (f.cy = 0), 0 === a.length)) {\n                      f.empty = !0;\n                      var d = n[r.id],\n                        p = Object.keys(t).length,\n                        h = r.id + \"-visual-child-\" + p,\n                        l = {\n                          id: h,\n                          x: d.x,\n                          y: d.y,\n                          depth: f.depth + 1,\n                          itemType: \"node\",\n                        };\n                      e.nodes.push(l),\n                        (t[h] = l),\n                        (o[h] = p),\n                        (f.cx = d.x),\n                        (f.cy = d.y),\n                        a.push(l);\n                    }\n                    return (\n                      a.forEach(function (e) {\n                        if ((f.count++, \"node\" !== e.itemType)) {\n                          var o = i[e.id];\n                          return (\n                            c.isNumber(o.cx) && (f.cx += o.cx),\n                            void (c.isNumber(o.cy) && (f.cy += o.cy))\n                          );\n                        }\n                        var r = t[e.id];\n                        r &&\n                          (c.isNumber(r.x) && (f.cx += r.x),\n                          c.isNumber(r.y) && (f.cy += r.y));\n                      }),\n                      (f.cx /= f.count),\n                      (f.cy /= f.count),\n                      (f.children = a),\n                      !0\n                    );\n                  });\n                }),\n                i\n              );\n            }),\n            (t.prototype.applyComboCenterForce = function (e) {\n              var t = this.gravity,\n                o = this.comboGravity || t,\n                r = this.alpha,\n                n = this.comboTrees,\n                i = this.indexMap,\n                a = this.nodeMap,\n                u = this.comboMap;\n              (n || []).forEach(function (t) {\n                c.traverseTreeUp(t, function (t) {\n                  if (\"node\" === t.itemType) return !0;\n                  if (!u[t.id]) return !0;\n                  var n = u[t.id],\n                    s = ((n.depth + 1) / 10) * 0.5,\n                    f = n.cx,\n                    d = n.cy;\n                  return (\n                    (n.cx = 0),\n                    (n.cy = 0),\n                    n.children.forEach(function (t) {\n                      if (\"node\" !== t.itemType) {\n                        var p = u[t.id];\n                        return (\n                          p && c.isNumber(p.cx) && (n.cx += p.cx),\n                          void (p && c.isNumber(p.cy) && (n.cy += p.cy))\n                        );\n                      }\n                      var h = a[t.id],\n                        l = h.x - f || 0.005,\n                        y = h.y - d || 0.005,\n                        v = Math.sqrt(l * l + y * y),\n                        m = i[h.id],\n                        b = ((o * r) / v) * s;\n                      (e[m].x -= l * b),\n                        (e[m].y -= y * b),\n                        c.isNumber(h.x) && (n.cx += h.x),\n                        c.isNumber(h.y) && (n.cy += h.y);\n                    }),\n                    (n.cx /= n.count),\n                    (n.cy /= n.count),\n                    !0\n                  );\n                });\n              });\n            }),\n            (t.prototype.applyCalculate = function (e) {\n              var t = this.comboMap,\n                o = this.nodes,\n                r = {};\n              o.forEach(function (e, t) {\n                o.forEach(function (o, n) {\n                  if (!(t < n)) {\n                    var i = e.x - o.x || 0.005,\n                      c = e.y - o.y || 0.005,\n                      a = i * i + c * c,\n                      u = Math.sqrt(a);\n                    a < 1 && (a = u),\n                      (r[e.id + \"-\" + o.id] = { vx: i, vy: c, vl2: a, vl: u }),\n                      (r[o.id + \"-\" + e.id] = {\n                        vl2: a,\n                        vl: u,\n                        vx: -i,\n                        vy: -c,\n                      });\n                  }\n                });\n              }),\n                this.updateComboSizes(t),\n                this.calRepulsive(e, r),\n                this.calAttractive(e, r),\n                this.preventComboOverlap && this.comboNonOverlapping(e, t);\n            }),\n            (t.prototype.updateComboSizes = function (e) {\n              var t = this,\n                o = t.comboTrees,\n                r = t.nodeMap,\n                n = t.nodeSize,\n                i = t.comboSpacing,\n                a = t.comboPadding;\n              (o || []).forEach(function (o) {\n                var u = [];\n                c.traverseTreeUp(o, function (o) {\n                  if (\"node\" === o.itemType) return !0;\n                  var s = e[o.id];\n                  if (!s) return !1;\n                  var f = o.children;\n                  f &&\n                    f.forEach(function (t) {\n                      (e[t.id] || r[t.id]) && u.push(t);\n                    }),\n                    (s.minX = 1 / 0),\n                    (s.minY = 1 / 0),\n                    (s.maxX = -1 / 0),\n                    (s.maxY = -1 / 0),\n                    u.forEach(function (e) {\n                      if (\"node\" !== e.itemType) return !0;\n                      var t = r[e.id];\n                      if (!t) return !0;\n                      var o = n(t),\n                        i = t.x - o,\n                        c = t.y - o,\n                        a = t.x + o,\n                        u = t.y + o;\n                      s.minX > i && (s.minX = i),\n                        s.minY > c && (s.minY = c),\n                        s.maxX < a && (s.maxX = a),\n                        s.maxY < u && (s.maxY = u);\n                    });\n                  var d = t.oriComboMap[o.id].size || 10;\n                  c.isArray(d) && (d = d[0]);\n                  var p = Math.max(s.maxX - s.minX, s.maxY - s.minY, d);\n                  return (s.r = p / 2 + i(s) / 2 + a(s)), !0;\n                });\n              });\n            }),\n            (t.prototype.comboNonOverlapping = function (e, t) {\n              var o = this.comboTree,\n                r = this.comboCollideStrength,\n                n = this.indexMap,\n                i = this.nodeMap;\n              c.traverseTreeUp(o, function (o) {\n                if (!t[o.id] && !i[o.id] && \"comboTreeRoot\" !== o.id) return !1;\n                var c = o.children;\n                return (\n                  c &&\n                    c.length > 1 &&\n                    c.forEach(function (o, a) {\n                      if (\"node\" === o.itemType) return !1;\n                      var u = t[o.id];\n                      u &&\n                        c.forEach(function (c, s) {\n                          if (a <= s) return !1;\n                          if (\"node\" === c.itemType) return !1;\n                          var f = t[c.id];\n                          if (!f) return !1;\n                          var d = u.cx - f.cx || 0.005,\n                            p = u.cy - f.cy || 0.005,\n                            h = d * d + p * p,\n                            l = u.r,\n                            y = f.r,\n                            v = l + y,\n                            m = y * y,\n                            b = l * l;\n                          if (h < v * v) {\n                            var g = o.children;\n                            if (!g || 0 === g.length) return !1;\n                            var x = c.children;\n                            if (!x || 0 === x.length) return !1;\n                            var S = Math.sqrt(h),\n                              M = ((v - S) / S) * r,\n                              O = d * M,\n                              N = p * M,\n                              C = m / (b + m),\n                              E = 1 - C;\n                            g.forEach(function (t) {\n                              if (\"node\" !== t.itemType) return !1;\n                              if (i[t.id]) {\n                                var o = n[t.id];\n                                x.forEach(function (t) {\n                                  if (\"node\" !== t.itemType) return !1;\n                                  if (!i[t.id]) return !1;\n                                  var r = n[t.id];\n                                  (e[o].x += O * C),\n                                    (e[o].y += N * C),\n                                    (e[r].x -= O * E),\n                                    (e[r].y -= N * E);\n                                });\n                              }\n                            });\n                          }\n                        });\n                    }),\n                  !0\n                );\n              });\n            }),\n            (t.prototype.calRepulsive = function (e, t) {\n              var o = this,\n                r = o.nodes,\n                n = o.width * o.optimizeRangeFactor,\n                i = o.nodeStrength,\n                c = o.alpha,\n                a = o.nodeCollideStrength,\n                u = o.preventNodeOverlap,\n                s = o.nodeSize,\n                f = o.nodeSpacing,\n                d = o.depthRepulsiveForceScale,\n                p = o.center;\n              r.forEach(function (h, l) {\n                if (h.x && h.y) {\n                  if (p) {\n                    var y = o.gravity,\n                      v = h.x - p[0] || 0.005,\n                      m = h.y - p[1] || 0.005,\n                      b = Math.sqrt(v * v + m * m);\n                    (e[l].x -= (v * y * c) / b), (e[l].y -= (m * y * c) / b);\n                  }\n                  r.forEach(function (o, r) {\n                    if (l !== r && o.x && o.y) {\n                      var p = t[h.id + \"-\" + o.id],\n                        y = p.vl2,\n                        v = p.vl;\n                      if (!(v > n)) {\n                        var m = t[h.id + \"-\" + o.id],\n                          b = m.vx,\n                          g = m.vy,\n                          x =\n                            Math.log(Math.abs(o.depth - h.depth) / 10) + 1 || 1;\n                        (x = x < 1 ? 1 : x),\n                          o.comboId !== h.comboId && (x += 1);\n                        var S = x ? Math.pow(d, x) : 1,\n                          M = ((i(o) * c) / y) * S;\n                        if (\n                          ((e[l].x += b * M), (e[l].y += g * M), l < r && u)\n                        ) {\n                          var O = s(h) + f(h),\n                            N = s(o) + f(o),\n                            C = O + N;\n                          if (y < C * C) {\n                            var E = ((C - v) / v) * a,\n                              _ = N * N,\n                              j = _ / (O * O + _),\n                              T = b * E,\n                              w = g * E;\n                            (e[l].x += T * j),\n                              (e[l].y += w * j),\n                              (j = 1 - j),\n                              (e[r].x -= T * j),\n                              (e[r].y -= w * j);\n                          }\n                        }\n                      }\n                    }\n                  });\n                }\n              });\n            }),\n            (t.prototype.calAttractive = function (e, t) {\n              var o = this,\n                r = o.edges,\n                n = o.linkDistance,\n                i = o.alpha,\n                a = o.edgeStrength,\n                u = o.bias,\n                s = o.depthAttractiveForceScale;\n              r.forEach(function (r, f) {\n                if (r.source && r.target && r.source !== r.target) {\n                  var d = o.indexMap[r.source],\n                    p = o.indexMap[r.target],\n                    h = o.nodeMap[r.source],\n                    l = o.nodeMap[r.target];\n                  if (h && l) {\n                    var y = Math.log(Math.abs(h.depth - l.depth) / 10);\n                    h.comboId === l.comboId && (y /= 2);\n                    var v = y ? Math.pow(s, y) : 1;\n                    if (\n                      (h.comboId !== l.comboId && 1 === v\n                        ? (v = s / 2)\n                        : h.comboId === l.comboId && (v = 2),\n                      c.isNumber(l.x) &&\n                        c.isNumber(h.x) &&\n                        c.isNumber(l.y) &&\n                        c.isNumber(h.y))\n                    ) {\n                      var m = t[r.target + \"-\" + r.source],\n                        b = m.vl,\n                        g = m.vx,\n                        x = m.vy,\n                        S = ((b - n(r)) / b) * i * a(r) * v,\n                        M = g * S,\n                        O = x * S,\n                        N = u[f];\n                      (e[p].x -= M * N),\n                        (e[p].y -= O * N),\n                        (e[d].x += M * (1 - N)),\n                        (e[d].y += O * (1 - N));\n                    }\n                  }\n                }\n              });\n            }),\n            (t.prototype.getType = function () {\n              return \"comboForce\";\n            }),\n            t\n          );\n        })(i.Base);\n      t.ComboForceLayout = a;\n    },\n    216: function (e, t, o) {\n      \"use strict\";\n      o.r(t);\n      var r = o(172);\n      t.default = r.ComboForceLayout;\n    },\n    7: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=comboForceLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/concentricLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.f6 = t())\n    : (e.f6 = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function n(r) {\n      if (t[r]) return t[r].exports;\n      var o = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = e),\n      (n.c = t),\n      (n.d = function (e, t, r) {\n        n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (n.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (e, t) {\n        if ((1 & t && (e = n(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var o in e)\n            n.d(\n              r,\n              o,\n              function (t) {\n                return e[t];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return n.d(t, \"a\", t), t;\n      }),\n      (n.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (n.p = \"\"),\n      n((n.s = 217))\n    );\n  })({\n    10: function (e, t, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[n];\n                    },\n                  });\n              }\n            : function (e, t, n, r) {\n                void 0 === r && (r = n), (e[r] = t[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var n in e)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(t, n) ||\n                r(t, e, n);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        o(n(11), t),\n        o(n(12), t),\n        o(n(13), t),\n        o(n(14), t),\n        o(n(15), t),\n        o(n(16), t);\n    },\n    11: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (e) {\n          return o[e] || (o[e] = r(e));\n        });\n    },\n    12: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var n = parseFloat(e);\n        return t.isNaN(n) ? e : n;\n      };\n    },\n    14: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, n) {\n        for (var r = [], o = 0; o < e; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], n = e.length, r = 0; r < n; r += 1) {\n          t[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (t[r][o] = 0)\n              : 0 !== e[r][o] && e[r][o]\n              ? (t[r][o] = e[r][o])\n              : (t[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              t[r][o] > t[r][i] + t[i][o] && (t[r][o] = t[r][i] + t[i][o]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var n = e.nodes,\n          r = e.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (e, t) {\n              i[e.id] = t;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var n = e.source,\n                r = e.target,\n                u = i[n],\n                c = i[r];\n              (o[u][c] = 1), t || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var n = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, n) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], n)) return;\n            return !!n(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, n) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (e) {\n              for (var t, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (t = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var n = [];\n          return (\n            e.forEach(function (e) {\n              n.push(e);\n            }),\n            n.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = o({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    173: function (e, t, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var n in t)\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((n.prototype = t.prototype), new n()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.ConcentricLayout = void 0);\n      var i = n(10),\n        u = (function (e) {\n          function t(t) {\n            var n = e.call(this) || this;\n            return (\n              (n.nodeSize = 30),\n              (n.minNodeSpacing = 10),\n              (n.preventOverlap = !1),\n              (n.equidistant = !1),\n              (n.startAngle = 1.5 * Math.PI),\n              (n.clockwise = !0),\n              (n.sortBy = \"degree\"),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.onLayoutEnd = function () {}),\n              n.updateCfg(t),\n              n\n            );\n          }\n          return (\n            o(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                nodeSize: 30,\n                minNodeSpacing: 10,\n                preventOverlap: !1,\n                sweep: void 0,\n                equidistant: !1,\n                startAngle: 1.5 * Math.PI,\n                clockwise: !0,\n                maxLevelDiff: void 0,\n                sortBy: \"degree\",\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this,\n                t = e.nodes,\n                n = e.edges,\n                r = t.length;\n              if (0 !== r) {\n                e.width ||\n                  \"undefined\" == typeof window ||\n                  (e.width = window.innerWidth),\n                  e.height ||\n                    \"undefined\" == typeof window ||\n                    (e.height = window.innerHeight),\n                  e.center || (e.center = [e.width / 2, e.height / 2]);\n                var o = e.center;\n                if (1 === r)\n                  return (\n                    (t[0].x = o[0]),\n                    (t[0].y = o[1]),\n                    void (e.onLayoutEnd && e.onLayoutEnd())\n                  );\n                var u,\n                  c = [];\n                (u = i.isArray(e.nodeSize)\n                  ? Math.max(e.nodeSize[0], e.nodeSize[1])\n                  : e.nodeSize),\n                  t.forEach(function (e) {\n                    c.push(e);\n                    var t = u;\n                    i.isArray(e.size)\n                      ? (t = Math.max(e.size[0], e.size[1]))\n                      : i.isNumber(e.size) && (t = e.size),\n                      (u = Math.max(u, t));\n                  }),\n                  (e.clockwise =\n                    void 0 !== e.counterclockwise\n                      ? !e.counterclockwise\n                      : e.clockwise);\n                var a = {},\n                  s = {};\n                if (\n                  (c.forEach(function (e, t) {\n                    (a[e.id] = e), (s[e.id] = t);\n                  }),\n                  !(\n                    (\"degree\" !== e.sortBy &&\n                      i.isString(e.sortBy) &&\n                      void 0 !== c[0][e.sortBy]) ||\n                    ((e.sortBy = \"degree\"), i.isNumber(t[0].degree))\n                  ))\n                ) {\n                  var f = i.getDegree(t.length, s, n);\n                  c.forEach(function (e, t) {\n                    e.degree = f[t];\n                  });\n                }\n                c.sort(function (t, n) {\n                  return n[e.sortBy] - t[e.sortBy];\n                }),\n                  (e.maxValueNode = c[0]),\n                  (e.maxLevelDiff =\n                    e.maxLevelDiff || e.maxValueNode[e.sortBy] / 4);\n                var d = [[]],\n                  l = d[0];\n                c.forEach(function (t) {\n                  if (l.length > 0) {\n                    var n = Math.abs(l[0][e.sortBy] - t[e.sortBy]);\n                    e.maxLevelDiff &&\n                      n >= e.maxLevelDiff &&\n                      ((l = []), d.push(l));\n                  }\n                  l.push(t);\n                });\n                var p = u + e.minNodeSpacing;\n                if (!e.preventOverlap) {\n                  var h = d.length > 0 && d[0].length > 1,\n                    y =\n                      (Math.min(e.width, e.height) / 2 - p) /\n                      (d.length + (h ? 1 : 0));\n                  p = Math.min(p, y);\n                }\n                var v = 0;\n                if (\n                  (d.forEach(function (t) {\n                    var n = e.sweep;\n                    void 0 === n &&\n                      (n = 2 * Math.PI - (2 * Math.PI) / t.length);\n                    var r = (t.dTheta = n / Math.max(1, t.length - 1));\n                    if (t.length > 1 && e.preventOverlap) {\n                      var o = Math.cos(r) - Math.cos(0),\n                        i = Math.sin(r) - Math.sin(0),\n                        u = Math.sqrt((p * p) / (o * o + i * i));\n                      v = Math.max(u, v);\n                    }\n                    (t.r = v), (v += p);\n                  }),\n                  e.equidistant)\n                ) {\n                  for (var g = 0, b = 0, m = 0; m < d.length; m++) {\n                    var _ = d[m].r - b;\n                    g = Math.max(g, _);\n                  }\n                  (b = 0),\n                    d.forEach(function (e, t) {\n                      0 === t && (b = e.r), (e.r = b), (b += g);\n                    });\n                }\n                return (\n                  d.forEach(function (t) {\n                    var n = t.dTheta,\n                      r = t.r;\n                    t.forEach(function (t, i) {\n                      var u = e.startAngle + (e.clockwise ? 1 : -1) * n * i;\n                      (t.x = o[0] + r * Math.cos(u)),\n                        (t.y = o[1] + r * Math.sin(u));\n                    });\n                  }),\n                  e.onLayoutEnd && e.onLayoutEnd(),\n                  { nodes: t, edges: n }\n                );\n              }\n              e.onLayoutEnd && e.onLayoutEnd();\n            }),\n            (t.prototype.getType = function () {\n              return \"concentric\";\n            }),\n            t\n          );\n        })(n(7).Base);\n      t.ConcentricLayout = u;\n    },\n    217: function (e, t, n) {\n      \"use strict\";\n      n.r(t);\n      var r = n(173);\n      t.default = r.ConcentricLayout;\n    },\n    7: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=concentricLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/dagreLayout.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.f6 = n())\n    : (t.f6 = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function e(r) {\n      if (n[r]) return n[r].exports;\n      var o = (n[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, e), (o.l = !0), o.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = n),\n      (e.d = function (t, n, r) {\n        e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: r });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, n) {\n        if ((1 & n && (t = e(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (e.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var o in t)\n            e.d(\n              r,\n              o,\n              function (n) {\n                return t[n];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (e.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(n, \"a\", n), n;\n      }),\n      (e.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (e.p = \"\"),\n      e((e.s = 218))\n    );\n  })([\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), (n.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      n.Base = r;\n    },\n    ,\n    function (t, n, e) {\n      var r;\n      try {\n        r = {\n          cloneDeep: e(335),\n          constant: e(95),\n          defaults: e(336),\n          each: e(131),\n          filter: e(134),\n          find: e(337),\n          flatten: e(161),\n          forEach: e(132),\n          forIn: e(344),\n          has: e(145),\n          isUndefined: e(146),\n          last: e(345),\n          map: e(147),\n          mapValues: e(346),\n          max: e(347),\n          merge: e(349),\n          min: e(355),\n          minBy: e(356),\n          now: e(357),\n          pick: e(358),\n          range: e(363),\n          reduce: e(149),\n          sortBy: e(366),\n          uniqueId: e(371),\n          values: e(154),\n          zipObject: e(372),\n        };\n      } catch (t) {}\n      r || (r = window._), (t.exports = r);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        o(e(11), n),\n        o(e(12), n),\n        o(e(13), n),\n        o(e(14), n),\n        o(e(15), n),\n        o(e(16), n);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.camelize = n.isString = void 0);\n      n.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      n.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, n) {\n            return n ? n.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isArray = void 0),\n        (n.isArray = Array.isArray);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.toNumber = n.isNaN = n.isNumber = void 0);\n      n.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      n.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      n.toNumber = function (t) {\n        var e = parseFloat(t);\n        return n.isNaN(e) ? t : e;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.traverseTreeUp =\n          n.scaleMatrix =\n          n.getAdjMatrix =\n          n.floydWarshall =\n          n.getDegree =\n            void 0);\n      n.getDegree = function (t, n, e) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (r[n[t.source]] += 1),\n                t.target && (r[n[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      n.floydWarshall = function (t) {\n        for (var n = [], e = t.length, r = 0; r < e; r += 1) {\n          n[r] = [];\n          for (var o = 0; o < e; o += 1)\n            r === o\n              ? (n[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (n[r][o] = t[r][o])\n              : (n[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (r = 0; r < e; r += 1)\n            for (o = 0; o < e; o += 1)\n              n[r][o] > n[r][i] + n[i][o] && (n[r][o] = n[r][i] + n[i][o]);\n        return n;\n      };\n      n.getAdjMatrix = function (t, n) {\n        var e = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, n) {\n              i[t.id] = n;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var e = t.source,\n                r = t.target,\n                u = i[e],\n                c = i[r];\n              (o[u][c] = 1), n || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      n.scaleMatrix = function (t, n) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * n);\n            }),\n              e.push(r);\n          }),\n          e\n        );\n      };\n      n.traverseTreeUp = function (t, n) {\n        \"function\" == typeof n &&\n          (function t(n, e) {\n            if (n && n.children)\n              for (var r = n.children.length - 1; r >= 0; r--)\n                if (!t(n.children[r], e)) return;\n            return !!e(n);\n          })(t, n);\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var n, e = 1, r = arguments.length; e < r; e++)\n                for (var o in (n = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.clone = n.isObject = void 0);\n      n.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      n.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return n.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = n.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isFunction = void 0);\n      n.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    function (t, n) {\n      var e = Array.isArray;\n      t.exports = e;\n    },\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(23).Graph;\n      function i(t, n, e, o) {\n        var i;\n        do {\n          i = r.uniqueId(o);\n        } while (t.hasNode(i));\n        return (e.dummy = n), t.setNode(i, e), i;\n      }\n      function u(t) {\n        return r.max(\n          r.map(t.nodes(), function (n) {\n            var e = t.node(n).rank;\n            if (!r.isUndefined(e)) return e;\n          }),\n        );\n      }\n      t.exports = {\n        addDummyNode: i,\n        simplify: function (t) {\n          var n = new o().setGraph(t.graph());\n          return (\n            r.forEach(t.nodes(), function (e) {\n              n.setNode(e, t.node(e));\n            }),\n            r.forEach(t.edges(), function (e) {\n              var r = n.edge(e.v, e.w) || { weight: 0, minlen: 1 },\n                o = t.edge(e);\n              n.setEdge(e.v, e.w, {\n                weight: r.weight + o.weight,\n                minlen: Math.max(r.minlen, o.minlen),\n              });\n            }),\n            n\n          );\n        },\n        asNonCompoundGraph: function (t) {\n          var n = new o({ multigraph: t.isMultigraph() }).setGraph(t.graph());\n          return (\n            r.forEach(t.nodes(), function (e) {\n              t.children(e).length || n.setNode(e, t.node(e));\n            }),\n            r.forEach(t.edges(), function (e) {\n              n.setEdge(e, t.edge(e));\n            }),\n            n\n          );\n        },\n        successorWeights: function (t) {\n          var n = r.map(t.nodes(), function (n) {\n            var e = {};\n            return (\n              r.forEach(t.outEdges(n), function (n) {\n                e[n.w] = (e[n.w] || 0) + t.edge(n).weight;\n              }),\n              e\n            );\n          });\n          return r.zipObject(t.nodes(), n);\n        },\n        predecessorWeights: function (t) {\n          var n = r.map(t.nodes(), function (n) {\n            var e = {};\n            return (\n              r.forEach(t.inEdges(n), function (n) {\n                e[n.v] = (e[n.v] || 0) + t.edge(n).weight;\n              }),\n              e\n            );\n          });\n          return r.zipObject(t.nodes(), n);\n        },\n        intersectRect: function (t, n) {\n          var e,\n            r,\n            o = t.x,\n            i = t.y,\n            u = n.x - o,\n            c = n.y - i,\n            a = t.width / 2,\n            f = t.height / 2;\n          if (!u && !c)\n            throw new Error(\n              \"Not possible to find intersection inside of the rectangle\",\n            );\n          Math.abs(c) * a > Math.abs(u) * f\n            ? (c < 0 && (f = -f), (e = (f * u) / c), (r = f))\n            : (u < 0 && (a = -a), (e = a), (r = (a * c) / u));\n          return { x: o + e, y: i + r };\n        },\n        buildLayerMatrix: function (t) {\n          var n = r.map(r.range(u(t) + 1), function () {\n            return [];\n          });\n          return (\n            r.forEach(t.nodes(), function (e) {\n              var o = t.node(e),\n                i = o.rank;\n              r.isUndefined(i) || (n[i][o.order] = e);\n            }),\n            n\n          );\n        },\n        normalizeRanks: function (t) {\n          var n = r.min(\n            r.map(t.nodes(), function (n) {\n              return t.node(n).rank;\n            }),\n          );\n          r.forEach(t.nodes(), function (e) {\n            var o = t.node(e);\n            r.has(o, \"rank\") && (o.rank -= n);\n          });\n        },\n        removeEmptyRanks: function (t) {\n          var n = r.min(\n              r.map(t.nodes(), function (n) {\n                return t.node(n).rank;\n              }),\n            ),\n            e = [];\n          r.forEach(t.nodes(), function (r) {\n            var o = t.node(r).rank - n;\n            e[o] || (e[o] = []), e[o].push(r);\n          });\n          var o = 0,\n            i = t.graph().nodeRankFactor;\n          r.forEach(e, function (n, e) {\n            r.isUndefined(n) && e % i != 0\n              ? --o\n              : o &&\n                r.forEach(n, function (n) {\n                  t.node(n).rank += o;\n                });\n          });\n        },\n        addBorderNode: function (t, n, e, r) {\n          var o = { width: 0, height: 0 };\n          arguments.length >= 4 && ((o.rank = e), (o.order = r));\n          return i(t, \"border\", o, n);\n        },\n        maxRank: u,\n        partition: function (t, n) {\n          var e = { lhs: [], rhs: [] };\n          return (\n            r.forEach(t, function (t) {\n              n(t) ? e.lhs.push(t) : e.rhs.push(t);\n            }),\n            e\n          );\n        },\n        time: function (t, n) {\n          var e = r.now();\n          try {\n            return n();\n          } finally {\n            console.log(t + \" time: \" + (r.now() - e) + \"ms\");\n          }\n        },\n        notime: function (t, n) {\n          return n();\n        },\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r;\n      try {\n        r = {\n          clone: e(222),\n          constant: e(95),\n          each: e(131),\n          filter: e(134),\n          has: e(145),\n          isArray: e(17),\n          isEmpty: e(299),\n          isFunction: e(51),\n          isUndefined: e(146),\n          keys: e(33),\n          map: e(147),\n          reduce: e(149),\n          size: e(302),\n          transform: e(308),\n          union: e(309),\n          values: e(154),\n        };\n      } catch (t) {}\n      r || (r = window._), (t.exports = r);\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        var n = e(t);\n        return null != t && (\"object\" == n || \"function\" == n);\n      };\n    },\n    function (t, n, e) {\n      var r;\n      try {\n        r = e(220);\n      } catch (t) {}\n      r || (r = window.graphlib), (t.exports = r);\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(114),\n        i =\n          \"object\" == (\"undefined\" == typeof self ? \"undefined\" : r(self)) &&\n          self &&\n          self.Object === Object &&\n          self,\n        u = o || i || Function(\"return this\")();\n      t.exports = u;\n    },\n    ,\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        return null != t && \"object\" == e(t);\n      };\n    },\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(51),\n        o = e(89);\n      t.exports = function (t) {\n        return null != t && o(t.length) && !r(t);\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(279),\n        i = e(289),\n        u = e(38),\n        c = e(17),\n        a = e(296);\n      t.exports = function (t) {\n        return \"function\" == typeof t\n          ? t\n          : null == t\n          ? u\n          : \"object\" == r(t)\n          ? c(t)\n            ? i(t[0], t[1])\n            : o(t)\n          : a(t);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r = e(117),\n        o = e(91),\n        i = e(30);\n      t.exports = function (t) {\n        return i(t) ? r(t) : o(t);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r = e(233),\n        o = e(239);\n      t.exports = function (t, n) {\n        var e = o(t, n);\n        return r(e) ? e : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(235),\n        i = e(236),\n        u = r ? r.toStringTag : void 0;\n      t.exports = function (t) {\n        return null == t\n          ? void 0 === t\n            ? \"[object Undefined]\"\n            : \"[object Null]\"\n          : u && u in Object(t)\n          ? o(t)\n          : i(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(117),\n        o = e(259),\n        i = e(30);\n      t.exports = function (t) {\n        return i(t) ? r(t, !0) : o(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return t;\n      };\n    },\n    ,\n    ,\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t === n || (t != t && n != n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(24).Symbol;\n      t.exports = r;\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(24),\n          i = e(255),\n          u = \"object\" == r(n) && n && !n.nodeType && n,\n          c = u && \"object\" == r(t) && t && !t.nodeType && t,\n          a = c && c.exports === u ? o.Buffer : void 0,\n          f = (a ? a.isBuffer : void 0) || i;\n        t.exports = f;\n      }).call(this, e(50)(t));\n    },\n    function (t, n, e) {\n      var r = e(264),\n        o = e(86),\n        i = e(265),\n        u = e(126),\n        c = e(266),\n        a = e(36),\n        f = e(115),\n        s = f(r),\n        p = f(o),\n        d = f(i),\n        h = f(u),\n        l = f(c),\n        v = a;\n      ((r && \"[object DataView]\" != v(new r(new ArrayBuffer(1)))) ||\n        (o && \"[object Map]\" != v(new o())) ||\n        (i && \"[object Promise]\" != v(i.resolve())) ||\n        (u && \"[object Set]\" != v(new u())) ||\n        (c && \"[object WeakMap]\" != v(new c()))) &&\n        (v = function (t) {\n          var n = a(t),\n            e = \"[object Object]\" == n ? t.constructor : void 0,\n            r = e ? f(e) : \"\";\n          if (r)\n            switch (r) {\n              case s:\n                return \"[object DataView]\";\n              case p:\n                return \"[object Map]\";\n              case d:\n                return \"[object Promise]\";\n              case h:\n                return \"[object Set]\";\n              case l:\n                return \"[object WeakMap]\";\n            }\n          return n;\n        }),\n        (t.exports = v);\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(36),\n        i = e(26);\n      t.exports = function (t) {\n        return \"symbol\" == r(t) || (i(t) && \"[object Symbol]\" == o(t));\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    function (t, n) {\n      t.exports = function (t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function () {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function () {\n                return t.l;\n              },\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function () {\n                return t.i;\n              },\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(22);\n      t.exports = function (t) {\n        if (!o(t)) return !1;\n        var n = r(t);\n        return (\n          \"[object Function]\" == n ||\n          \"[object GeneratorFunction]\" == n ||\n          \"[object AsyncFunction]\" == n ||\n          \"[object Proxy]\" == n\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(64);\n      t.exports = function (t, n, e, i) {\n        var u = !e;\n        e || (e = {});\n        for (var c = -1, a = n.length; ++c < a; ) {\n          var f = n[c],\n            s = i ? i(e[f], t[f], f, e, t) : void 0;\n          void 0 === s && (s = t[f]), u ? o(e, f, s) : r(e, f, s);\n        }\n        return e;\n      };\n    },\n    function (t, n, e) {\n      var r = e(254),\n        o = e(26),\n        i = Object.prototype,\n        u = i.hasOwnProperty,\n        c = i.propertyIsEnumerable,\n        a = r(\n          (function () {\n            return arguments;\n          })(),\n        )\n          ? r\n          : function (t) {\n              return o(t) && u.call(t, \"callee\") && !c.call(t, \"callee\");\n            };\n      t.exports = a;\n    },\n    function (t, n, e) {\n      var r = e(256),\n        o = e(66),\n        i = e(90),\n        u = i && i.isTypedArray,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(45);\n      t.exports = function (t) {\n        if (\"string\" == typeof t || r(t)) return t;\n        var n = t + \"\";\n        return \"0\" == n && 1 / t == -1 / 0 ? \"-0\" : n;\n      };\n    },\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(59),\n        o = e(228),\n        i = e(229),\n        u = e(230),\n        c = e(231),\n        a = e(232);\n      function f(t) {\n        var n = (this.__data__ = new r(t));\n        this.size = n.size;\n      }\n      (f.prototype.clear = o),\n        (f.prototype.delete = i),\n        (f.prototype.get = u),\n        (f.prototype.has = c),\n        (f.prototype.set = a),\n        (t.exports = f);\n    },\n    function (t, n, e) {\n      var r = e(223),\n        o = e(224),\n        i = e(225),\n        u = e(226),\n        c = e(227);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n, e) {\n      var r = e(41);\n      t.exports = function (t, n) {\n        for (var e = t.length; e--; ) if (r(t[e][0], n)) return e;\n        return -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(35)(Object, \"create\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(248);\n      t.exports = function (t, n) {\n        var e = t.__data__;\n        return r(n) ? e[\"string\" == typeof n ? \"string\" : \"hash\"] : e.map;\n      };\n    },\n    function (t, n, e) {\n      var r = e(64),\n        o = e(41),\n        i = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e) {\n        var u = t[n];\n        (i.call(t, n) && o(u, e) && (void 0 !== e || n in t)) || r(t, n, e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(116);\n      t.exports = function (t, n, e) {\n        \"__proto__\" == n && r\n          ? r(t, n, {\n              configurable: !0,\n              enumerable: !0,\n              value: e,\n              writable: !0,\n            })\n          : (t[n] = e);\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r = /^(?:0|[1-9]\\d*)$/;\n      t.exports = function (t, n) {\n        var o = e(t);\n        return (\n          !!(n = null == n ? 9007199254740991 : n) &&\n          (\"number\" == o || (\"symbol\" != o && r.test(t))) &&\n          t > -1 &&\n          t % 1 == 0 &&\n          t < n\n        );\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n) {\n          return t(n);\n        };\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype;\n      t.exports = function (t) {\n        var n = t && t.constructor;\n        return t === ((\"function\" == typeof n && n.prototype) || e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(118)(Object.getPrototypeOf, Object);\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(96),\n        o = e(277)(r);\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(71),\n        o = e(55);\n      t.exports = function (t, n) {\n        for (var e = 0, i = (n = r(n, t)).length; null != t && e < i; )\n          t = t[o(n[e++])];\n        return e && e == i ? t : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(17),\n        o = e(99),\n        i = e(291),\n        u = e(141);\n      t.exports = function (t, n) {\n        return r(t) ? t : o(t, n) ? [t] : i(u(t));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = null == t ? 0 : t.length, o = Array(r); ++e < r; )\n          o[e] = n(t[e], e, t);\n        return o;\n      };\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = e(150),\n        i = e(151);\n      t.exports = function (t, n) {\n        return i(o(t, n, r), t + \"\");\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(41),\n        i = e(30),\n        u = e(65),\n        c = e(22);\n      t.exports = function (t, n, e) {\n        if (!c(e)) return !1;\n        var a = r(n);\n        return (\n          !!(\"number\" == a\n            ? i(e) && u(n, e.length)\n            : \"string\" == a && n in e) && o(e[n], t)\n        );\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      t.exports = {\n        longestPath: function (t) {\n          var n = {};\n          r.forEach(t.sources(), function e(o) {\n            var i = t.node(o);\n            if (r.has(n, o)) return i.rank;\n            n[o] = !0;\n            var u = r.min(\n              r.map(t.outEdges(o), function (n) {\n                return e(n.w) - t.edge(n).minlen;\n              }),\n            );\n            return (\n              (u !== Number.POSITIVE_INFINITY && null != u) || (u = 0),\n              (i.rank = u)\n            );\n          });\n        },\n        slack: function (t, n) {\n          return t.node(n.w).rank - t.node(n.v).rank - t.edge(n).minlen;\n        },\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(21);\n      t.exports = i;\n      function i(t) {\n        (this._isDirected = !o.has(t, \"directed\") || t.directed),\n          (this._isMultigraph = !!o.has(t, \"multigraph\") && t.multigraph),\n          (this._isCompound = !!o.has(t, \"compound\") && t.compound),\n          (this._label = void 0),\n          (this._defaultNodeLabelFn = o.constant(void 0)),\n          (this._defaultEdgeLabelFn = o.constant(void 0)),\n          (this._nodes = {}),\n          this._isCompound &&\n            ((this._parent = {}),\n            (this._children = {}),\n            (this._children[\"\\0\"] = {})),\n          (this._in = {}),\n          (this._preds = {}),\n          (this._out = {}),\n          (this._sucs = {}),\n          (this._edgeObjs = {}),\n          (this._edgeLabels = {});\n      }\n      function u(t, n) {\n        t[n] ? t[n]++ : (t[n] = 1);\n      }\n      function c(t, n) {\n        --t[n] || delete t[n];\n      }\n      function a(t, n, e, r) {\n        var i = \"\" + n,\n          u = \"\" + e;\n        if (!t && i > u) {\n          var c = i;\n          (i = u), (u = c);\n        }\n        return i + \"\u0001\" + u + \"\u0001\" + (o.isUndefined(r) ? \"\\0\" : r);\n      }\n      function f(t, n, e, r) {\n        var o = \"\" + n,\n          i = \"\" + e;\n        if (!t && o > i) {\n          var u = o;\n          (o = i), (i = u);\n        }\n        var c = { v: o, w: i };\n        return r && (c.name = r), c;\n      }\n      function s(t, n) {\n        return a(t, n.v, n.w, n.name);\n      }\n      (i.prototype._nodeCount = 0),\n        (i.prototype._edgeCount = 0),\n        (i.prototype.isDirected = function () {\n          return this._isDirected;\n        }),\n        (i.prototype.isMultigraph = function () {\n          return this._isMultigraph;\n        }),\n        (i.prototype.isCompound = function () {\n          return this._isCompound;\n        }),\n        (i.prototype.setGraph = function (t) {\n          return (this._label = t), this;\n        }),\n        (i.prototype.graph = function () {\n          return this._label;\n        }),\n        (i.prototype.setDefaultNodeLabel = function (t) {\n          return (\n            o.isFunction(t) || (t = o.constant(t)),\n            (this._defaultNodeLabelFn = t),\n            this\n          );\n        }),\n        (i.prototype.nodeCount = function () {\n          return this._nodeCount;\n        }),\n        (i.prototype.nodes = function () {\n          return o.keys(this._nodes);\n        }),\n        (i.prototype.sources = function () {\n          var t = this;\n          return o.filter(this.nodes(), function (n) {\n            return o.isEmpty(t._in[n]);\n          });\n        }),\n        (i.prototype.sinks = function () {\n          var t = this;\n          return o.filter(this.nodes(), function (n) {\n            return o.isEmpty(t._out[n]);\n          });\n        }),\n        (i.prototype.setNodes = function (t, n) {\n          var e = arguments,\n            r = this;\n          return (\n            o.each(t, function (t) {\n              e.length > 1 ? r.setNode(t, n) : r.setNode(t);\n            }),\n            this\n          );\n        }),\n        (i.prototype.setNode = function (t, n) {\n          return o.has(this._nodes, t)\n            ? (arguments.length > 1 && (this._nodes[t] = n), this)\n            : ((this._nodes[t] =\n                arguments.length > 1 ? n : this._defaultNodeLabelFn(t)),\n              this._isCompound &&\n                ((this._parent[t] = \"\\0\"),\n                (this._children[t] = {}),\n                (this._children[\"\\0\"][t] = !0)),\n              (this._in[t] = {}),\n              (this._preds[t] = {}),\n              (this._out[t] = {}),\n              (this._sucs[t] = {}),\n              ++this._nodeCount,\n              this);\n        }),\n        (i.prototype.node = function (t) {\n          return this._nodes[t];\n        }),\n        (i.prototype.hasNode = function (t) {\n          return o.has(this._nodes, t);\n        }),\n        (i.prototype.removeNode = function (t) {\n          var n = this;\n          if (o.has(this._nodes, t)) {\n            var e = function (t) {\n              n.removeEdge(n._edgeObjs[t]);\n            };\n            delete this._nodes[t],\n              this._isCompound &&\n                (this._removeFromParentsChildList(t),\n                delete this._parent[t],\n                o.each(this.children(t), function (t) {\n                  n.setParent(t);\n                }),\n                delete this._children[t]),\n              o.each(o.keys(this._in[t]), e),\n              delete this._in[t],\n              delete this._preds[t],\n              o.each(o.keys(this._out[t]), e),\n              delete this._out[t],\n              delete this._sucs[t],\n              --this._nodeCount;\n          }\n          return this;\n        }),\n        (i.prototype.setParent = function (t, n) {\n          if (!this._isCompound)\n            throw new Error(\"Cannot set parent in a non-compound graph\");\n          if (o.isUndefined(n)) n = \"\\0\";\n          else {\n            for (var e = (n += \"\"); !o.isUndefined(e); e = this.parent(e))\n              if (e === t)\n                throw new Error(\n                  \"Setting \" +\n                    n +\n                    \" as parent of \" +\n                    t +\n                    \" would create a cycle\",\n                );\n            this.setNode(n);\n          }\n          return (\n            this.setNode(t),\n            this._removeFromParentsChildList(t),\n            (this._parent[t] = n),\n            (this._children[n][t] = !0),\n            this\n          );\n        }),\n        (i.prototype._removeFromParentsChildList = function (t) {\n          delete this._children[this._parent[t]][t];\n        }),\n        (i.prototype.parent = function (t) {\n          if (this._isCompound) {\n            var n = this._parent[t];\n            if (\"\\0\" !== n) return n;\n          }\n        }),\n        (i.prototype.children = function (t) {\n          if ((o.isUndefined(t) && (t = \"\\0\"), this._isCompound)) {\n            var n = this._children[t];\n            if (n) return o.keys(n);\n          } else {\n            if (\"\\0\" === t) return this.nodes();\n            if (this.hasNode(t)) return [];\n          }\n        }),\n        (i.prototype.predecessors = function (t) {\n          var n = this._preds[t];\n          if (n) return o.keys(n);\n        }),\n        (i.prototype.successors = function (t) {\n          var n = this._sucs[t];\n          if (n) return o.keys(n);\n        }),\n        (i.prototype.neighbors = function (t) {\n          var n = this.predecessors(t);\n          if (n) return o.union(n, this.successors(t));\n        }),\n        (i.prototype.isLeaf = function (t) {\n          return (\n            0 ===\n            (this.isDirected() ? this.successors(t) : this.neighbors(t)).length\n          );\n        }),\n        (i.prototype.filterNodes = function (t) {\n          var n = new this.constructor({\n            directed: this._isDirected,\n            multigraph: this._isMultigraph,\n            compound: this._isCompound,\n          });\n          n.setGraph(this.graph());\n          var e = this;\n          o.each(this._nodes, function (e, r) {\n            t(r) && n.setNode(r, e);\n          }),\n            o.each(this._edgeObjs, function (t) {\n              n.hasNode(t.v) && n.hasNode(t.w) && n.setEdge(t, e.edge(t));\n            });\n          var r = {};\n          return (\n            this._isCompound &&\n              o.each(n.nodes(), function (t) {\n                n.setParent(\n                  t,\n                  (function t(o) {\n                    var i = e.parent(o);\n                    return void 0 === i || n.hasNode(i)\n                      ? ((r[o] = i), i)\n                      : i in r\n                      ? r[i]\n                      : t(i);\n                  })(t),\n                );\n              }),\n            n\n          );\n        }),\n        (i.prototype.setDefaultEdgeLabel = function (t) {\n          return (\n            o.isFunction(t) || (t = o.constant(t)),\n            (this._defaultEdgeLabelFn = t),\n            this\n          );\n        }),\n        (i.prototype.edgeCount = function () {\n          return this._edgeCount;\n        }),\n        (i.prototype.edges = function () {\n          return o.values(this._edgeObjs);\n        }),\n        (i.prototype.setPath = function (t, n) {\n          var e = this,\n            r = arguments;\n          return (\n            o.reduce(t, function (t, o) {\n              return r.length > 1 ? e.setEdge(t, o, n) : e.setEdge(t, o), o;\n            }),\n            this\n          );\n        }),\n        (i.prototype.setEdge = function () {\n          var t,\n            n,\n            e,\n            i,\n            c = !1,\n            s = arguments[0];\n          \"object\" === r(s) && null !== s && \"v\" in s\n            ? ((t = s.v),\n              (n = s.w),\n              (e = s.name),\n              2 === arguments.length && ((i = arguments[1]), (c = !0)))\n            : ((t = s),\n              (n = arguments[1]),\n              (e = arguments[3]),\n              arguments.length > 2 && ((i = arguments[2]), (c = !0))),\n            (t = \"\" + t),\n            (n = \"\" + n),\n            o.isUndefined(e) || (e = \"\" + e);\n          var p = a(this._isDirected, t, n, e);\n          if (o.has(this._edgeLabels, p))\n            return c && (this._edgeLabels[p] = i), this;\n          if (!o.isUndefined(e) && !this._isMultigraph)\n            throw new Error(\n              \"Cannot set a named edge when isMultigraph = false\",\n            );\n          this.setNode(t),\n            this.setNode(n),\n            (this._edgeLabels[p] = c ? i : this._defaultEdgeLabelFn(t, n, e));\n          var d = f(this._isDirected, t, n, e);\n          return (\n            (t = d.v),\n            (n = d.w),\n            Object.freeze(d),\n            (this._edgeObjs[p] = d),\n            u(this._preds[n], t),\n            u(this._sucs[t], n),\n            (this._in[n][p] = d),\n            (this._out[t][p] = d),\n            this._edgeCount++,\n            this\n          );\n        }),\n        (i.prototype.edge = function (t, n, e) {\n          var r =\n            1 === arguments.length\n              ? s(this._isDirected, arguments[0])\n              : a(this._isDirected, t, n, e);\n          return this._edgeLabels[r];\n        }),\n        (i.prototype.hasEdge = function (t, n, e) {\n          var r =\n            1 === arguments.length\n              ? s(this._isDirected, arguments[0])\n              : a(this._isDirected, t, n, e);\n          return o.has(this._edgeLabels, r);\n        }),\n        (i.prototype.removeEdge = function (t, n, e) {\n          var r =\n              1 === arguments.length\n                ? s(this._isDirected, arguments[0])\n                : a(this._isDirected, t, n, e),\n            o = this._edgeObjs[r];\n          return (\n            o &&\n              ((t = o.v),\n              (n = o.w),\n              delete this._edgeLabels[r],\n              delete this._edgeObjs[r],\n              c(this._preds[n], t),\n              c(this._sucs[t], n),\n              delete this._in[n][r],\n              delete this._out[t][r],\n              this._edgeCount--),\n            this\n          );\n        }),\n        (i.prototype.inEdges = function (t, n) {\n          var e = this._in[t];\n          if (e) {\n            var r = o.values(e);\n            return n\n              ? o.filter(r, function (t) {\n                  return t.v === n;\n                })\n              : r;\n          }\n        }),\n        (i.prototype.outEdges = function (t, n) {\n          var e = this._out[t];\n          if (e) {\n            var r = o.values(e);\n            return n\n              ? o.filter(r, function (t) {\n                  return t.w === n;\n                })\n              : r;\n          }\n        }),\n        (i.prototype.nodeEdges = function (t, n) {\n          var e = this.inEdges(t, n);\n          if (e) return e.concat(this.outEdges(t, n));\n        });\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"Map\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(240),\n        o = e(247),\n        i = e(249),\n        u = e(250),\n        c = e(251);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (\n          var e = -1, r = null == t ? 0 : t.length;\n          ++e < r && !1 !== n(t[e], e, t);\n\n        );\n        return t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return (\n          \"number\" == typeof t && t > -1 && t % 1 == 0 && t <= 9007199254740991\n        );\n      };\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(114),\n          i = \"object\" == r(n) && n && !n.nodeType && n,\n          u = i && \"object\" == r(t) && t && !t.nodeType && t,\n          c = u && u.exports === i && o.process,\n          a = (function () {\n            try {\n              var t = u && u.require && u.require(\"util\").types;\n              return t || (c && c.binding && c.binding(\"util\"));\n            } catch (t) {}\n          })();\n        t.exports = a;\n      }).call(this, e(50)(t));\n    },\n    function (t, n, e) {\n      var r = e(67),\n        o = e(257),\n        i = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (!r(t)) return o(t);\n        var n = [];\n        for (var e in Object(t))\n          i.call(t, e) && \"constructor\" != e && n.push(e);\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(121),\n        o = e(122),\n        i = Object.prototype.propertyIsEnumerable,\n        u = Object.getOwnPropertySymbols,\n        c = u\n          ? function (t) {\n              return null == t\n                ? []\n                : ((t = Object(t)),\n                  r(u(t), function (n) {\n                    return i.call(t, n);\n                  }));\n            }\n          : o;\n      t.exports = c;\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = n.length, o = t.length; ++e < r; ) t[o + e] = n[e];\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(127);\n      t.exports = function (t) {\n        var n = new t.constructor(t.byteLength);\n        return new r(n).set(new r(t)), n;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function () {\n          return t;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(97),\n        o = e(33);\n      t.exports = function (t, n) {\n        return t && r(t, n, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(276)();\n      t.exports = r;\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = -1,\n          e = Array(t.size);\n        return (\n          t.forEach(function (t) {\n            e[++n] = t;\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(17),\n        i = e(45),\n        u = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n        c = /^\\w*$/;\n      t.exports = function (t, n) {\n        if (o(t)) return !1;\n        var e = r(t);\n        return (\n          !(\n            \"number\" != e &&\n            \"symbol\" != e &&\n            \"boolean\" != e &&\n            null != t &&\n            !i(t)\n          ) ||\n          c.test(t) ||\n          !u.test(t) ||\n          (null != n && t in Object(n))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(93),\n        o = e(310);\n      t.exports = function t(n, e, i, u, c) {\n        var a = -1,\n          f = n.length;\n        for (i || (i = o), c || (c = []); ++a < f; ) {\n          var s = n[a];\n          e > 0 && i(s)\n            ? e > 1\n              ? t(s, e - 1, i, u, c)\n              : r(c, s)\n            : u || (c[c.length] = s);\n        }\n        return c;\n      };\n    },\n    function (t, n, e) {\n      var r = e(45);\n      t.exports = function (t, n, e) {\n        for (var o = -1, i = t.length; ++o < i; ) {\n          var u = t[o],\n            c = n(u);\n          if (null != c && (void 0 === a ? c == c && !r(c) : e(c, a)))\n            var a = c,\n              f = u;\n        }\n        return f;\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(58),\n        o = e(88),\n        i = e(63),\n        u = e(252),\n        c = e(258),\n        a = e(119),\n        f = e(120),\n        s = e(261),\n        p = e(262),\n        d = e(124),\n        h = e(263),\n        l = e(44),\n        v = e(267),\n        y = e(268),\n        g = e(129),\n        b = e(17),\n        m = e(43),\n        x = e(272),\n        _ = e(22),\n        w = e(274),\n        E = e(33),\n        j = e(37),\n        k = {};\n      (k[\"[object Arguments]\"] =\n        k[\"[object Array]\"] =\n        k[\"[object ArrayBuffer]\"] =\n        k[\"[object DataView]\"] =\n        k[\"[object Boolean]\"] =\n        k[\"[object Date]\"] =\n        k[\"[object Float32Array]\"] =\n        k[\"[object Float64Array]\"] =\n        k[\"[object Int8Array]\"] =\n        k[\"[object Int16Array]\"] =\n        k[\"[object Int32Array]\"] =\n        k[\"[object Map]\"] =\n        k[\"[object Number]\"] =\n        k[\"[object Object]\"] =\n        k[\"[object RegExp]\"] =\n        k[\"[object Set]\"] =\n        k[\"[object String]\"] =\n        k[\"[object Symbol]\"] =\n        k[\"[object Uint8Array]\"] =\n        k[\"[object Uint8ClampedArray]\"] =\n        k[\"[object Uint16Array]\"] =\n        k[\"[object Uint32Array]\"] =\n          !0),\n        (k[\"[object Error]\"] =\n          k[\"[object Function]\"] =\n          k[\"[object WeakMap]\"] =\n            !1),\n        (t.exports = function t(n, e, S, O, N, I) {\n          var P,\n            M = 1 & e,\n            C = 2 & e,\n            A = 4 & e;\n          if ((S && (P = N ? S(n, O, N, I) : S(n)), void 0 !== P)) return P;\n          if (!_(n)) return n;\n          var L = b(n);\n          if (L) {\n            if (((P = v(n)), !M)) return f(n, P);\n          } else {\n            var T = l(n),\n              z = \"[object Function]\" == T || \"[object GeneratorFunction]\" == T;\n            if (m(n)) return a(n, M);\n            if (\n              \"[object Object]\" == T ||\n              \"[object Arguments]\" == T ||\n              (z && !N)\n            ) {\n              if (((P = C || z ? {} : g(n)), !M))\n                return C ? p(n, c(P, n)) : s(n, u(P, n));\n            } else {\n              if (!k[T]) return N ? n : {};\n              P = y(n, T, M);\n            }\n          }\n          I || (I = new r());\n          var F = I.get(n);\n          if (F) return F;\n          I.set(n, P),\n            w(n)\n              ? n.forEach(function (r) {\n                  P.add(t(r, e, S, r, n, I));\n                })\n              : x(n) &&\n                n.forEach(function (r, o) {\n                  P.set(o, t(r, e, S, o, n, I));\n                });\n          var D = L ? void 0 : (A ? (C ? h : d) : C ? j : E)(n);\n          return (\n            o(D || n, function (r, o) {\n              D && (r = n[(o = r)]), i(P, o, t(r, e, S, o, n, I));\n            }),\n            P\n          );\n        });\n    },\n    function (t, n, e) {\n      (function (n) {\n        function e(t) {\n          return (e =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var r =\n          \"object\" == (void 0 === n ? \"undefined\" : e(n)) &&\n          n &&\n          n.Object === Object &&\n          n;\n        t.exports = r;\n      }).call(this, e(234));\n    },\n    function (t, n) {\n      var e = Function.prototype.toString;\n      t.exports = function (t) {\n        if (null != t) {\n          try {\n            return e.call(t);\n          } catch (t) {}\n          try {\n            return t + \"\";\n          } catch (t) {}\n        }\n        return \"\";\n      };\n    },\n    function (t, n, e) {\n      var r = e(35),\n        o = (function () {\n          try {\n            var t = r(Object, \"defineProperty\");\n            return t({}, \"\", {}), t;\n          } catch (t) {}\n        })();\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(253),\n        o = e(53),\n        i = e(17),\n        u = e(43),\n        c = e(65),\n        a = e(54),\n        f = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n) {\n        var e = i(t),\n          s = !e && o(t),\n          p = !e && !s && u(t),\n          d = !e && !s && !p && a(t),\n          h = e || s || p || d,\n          l = h ? r(t.length, String) : [],\n          v = l.length;\n        for (var y in t)\n          (!n && !f.call(t, y)) ||\n            (h &&\n              (\"length\" == y ||\n                (p && (\"offset\" == y || \"parent\" == y)) ||\n                (d &&\n                  (\"buffer\" == y || \"byteLength\" == y || \"byteOffset\" == y)) ||\n                c(y, v))) ||\n            l.push(y);\n        return l;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return function (e) {\n          return t(n(e));\n        };\n      };\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(24),\n          i = \"object\" == r(n) && n && !n.nodeType && n,\n          u = i && \"object\" == r(t) && t && !t.nodeType && t,\n          c = u && u.exports === i ? o.Buffer : void 0,\n          a = c ? c.allocUnsafe : void 0;\n        t.exports = function (t, n) {\n          if (n) return t.slice();\n          var e = t.length,\n            r = a ? a(e) : new t.constructor(e);\n          return t.copy(r), r;\n        };\n      }).call(this, e(50)(t));\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        var e = -1,\n          r = t.length;\n        for (n || (n = Array(r)); ++e < r; ) n[e] = t[e];\n        return n;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (\n          var e = -1, r = null == t ? 0 : t.length, o = 0, i = [];\n          ++e < r;\n\n        ) {\n          var u = t[e];\n          n(u, e, t) && (i[o++] = u);\n        }\n        return i;\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        return [];\n      };\n    },\n    function (t, n, e) {\n      var r = e(93),\n        o = e(68),\n        i = e(92),\n        u = e(122),\n        c = Object.getOwnPropertySymbols\n          ? function (t) {\n              for (var n = []; t; ) r(n, i(t)), (t = o(t));\n              return n;\n            }\n          : u;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(125),\n        o = e(92),\n        i = e(33);\n      t.exports = function (t) {\n        return r(t, i, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(93),\n        o = e(17);\n      t.exports = function (t, n, e) {\n        var i = n(t);\n        return o(t) ? i : r(i, e(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"Set\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(24).Uint8Array;\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(94);\n      t.exports = function (t, n) {\n        var e = n ? r(t.buffer) : t.buffer;\n        return new t.constructor(e, t.byteOffset, t.length);\n      };\n    },\n    function (t, n, e) {\n      var r = e(130),\n        o = e(68),\n        i = e(67);\n      t.exports = function (t) {\n        return \"function\" != typeof t.constructor || i(t) ? {} : r(o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(22),\n        o = Object.create,\n        i = (function () {\n          function t() {}\n          return function (n) {\n            if (!r(n)) return {};\n            if (o) return o(n);\n            t.prototype = n;\n            var e = new t();\n            return (t.prototype = void 0), e;\n          };\n        })();\n      t.exports = i;\n    },\n    function (t, n, e) {\n      t.exports = e(132);\n    },\n    function (t, n, e) {\n      var r = e(88),\n        o = e(69),\n        i = e(133),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : o)(t, i(n));\n      };\n    },\n    function (t, n, e) {\n      var r = e(38);\n      t.exports = function (t) {\n        return \"function\" == typeof t ? t : r;\n      };\n    },\n    function (t, n, e) {\n      var r = e(121),\n        o = e(278),\n        i = e(31),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : o)(t, i(n, 3));\n      };\n    },\n    function (t, n, e) {\n      var r = e(281),\n        o = e(26);\n      t.exports = function t(n, e, i, u, c) {\n        return (\n          n === e ||\n          (null == n || null == e || (!o(n) && !o(e))\n            ? n != n && e != e\n            : r(n, e, i, u, t, c))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(137),\n        o = e(284),\n        i = e(138);\n      t.exports = function (t, n, e, u, c, a) {\n        var f = 1 & e,\n          s = t.length,\n          p = n.length;\n        if (s != p && !(f && p > s)) return !1;\n        var d = a.get(t),\n          h = a.get(n);\n        if (d && h) return d == n && h == t;\n        var l = -1,\n          v = !0,\n          y = 2 & e ? new r() : void 0;\n        for (a.set(t, n), a.set(n, t); ++l < s; ) {\n          var g = t[l],\n            b = n[l];\n          if (u) var m = f ? u(b, g, l, n, t, a) : u(g, b, l, t, n, a);\n          if (void 0 !== m) {\n            if (m) continue;\n            v = !1;\n            break;\n          }\n          if (y) {\n            if (\n              !o(n, function (t, n) {\n                if (!i(y, n) && (g === t || c(g, t, e, u, a))) return y.push(n);\n              })\n            ) {\n              v = !1;\n              break;\n            }\n          } else if (g !== b && !c(g, b, e, u, a)) {\n            v = !1;\n            break;\n          }\n        }\n        return a.delete(t), a.delete(n), v;\n      };\n    },\n    function (t, n, e) {\n      var r = e(87),\n        o = e(282),\n        i = e(283);\n      function u(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.__data__ = new r(); ++n < e; ) this.add(t[n]);\n      }\n      (u.prototype.add = u.prototype.push = o),\n        (u.prototype.has = i),\n        (t.exports = u);\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t.has(n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(22);\n      t.exports = function (t) {\n        return t == t && !r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return function (e) {\n          return null != e && e[t] === n && (void 0 !== n || t in Object(e));\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(294);\n      t.exports = function (t) {\n        return null == t ? \"\" : r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(295),\n        o = e(143);\n      t.exports = function (t, n) {\n        return null != t && o(t, n, r);\n      };\n    },\n    function (t, n, e) {\n      var r = e(71),\n        o = e(53),\n        i = e(17),\n        u = e(65),\n        c = e(89),\n        a = e(55);\n      t.exports = function (t, n, e) {\n        for (var f = -1, s = (n = r(n, t)).length, p = !1; ++f < s; ) {\n          var d = a(n[f]);\n          if (!(p = null != t && e(t, d))) break;\n          t = t[d];\n        }\n        return p || ++f != s\n          ? p\n          : !!(s = null == t ? 0 : t.length) &&\n              c(s) &&\n              u(d, s) &&\n              (i(t) || o(t));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n) {\n          return null == n ? void 0 : n[t];\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(298),\n        o = e(143);\n      t.exports = function (t, n) {\n        return null != t && o(t, n, r);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return void 0 === t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(72),\n        o = e(31),\n        i = e(148),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : i)(t, o(n, 3));\n      };\n    },\n    function (t, n, e) {\n      var r = e(69),\n        o = e(30);\n      t.exports = function (t, n) {\n        var e = -1,\n          i = o(t) ? Array(t.length) : [];\n        return (\n          r(t, function (t, r, o) {\n            i[++e] = n(t, r, o);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(300),\n        o = e(69),\n        i = e(31),\n        u = e(301),\n        c = e(17);\n      t.exports = function (t, n, e) {\n        var a = c(t) ? r : u,\n          f = arguments.length < 3;\n        return a(t, i(n, 4), e, f, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(311),\n        o = Math.max;\n      t.exports = function (t, n, e) {\n        return (\n          (n = o(void 0 === n ? t.length - 1 : n, 0)),\n          function () {\n            for (\n              var i = arguments, u = -1, c = o(i.length - n, 0), a = Array(c);\n              ++u < c;\n\n            )\n              a[u] = i[n + u];\n            u = -1;\n            for (var f = Array(n + 1); ++u < n; ) f[u] = i[u];\n            return (f[n] = e(a)), r(t, this, f);\n          }\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(312),\n        o = e(313)(r);\n      t.exports = o;\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r) {\n        for (var o = t.length, i = e + (r ? 1 : -1); r ? i-- : ++i < o; )\n          if (n(t[i], i, t)) return i;\n        return -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(30),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(322),\n        o = e(33);\n      t.exports = function (t) {\n        return null == t ? [] : r(t, o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(156);\n      t.exports = function (t, n, e, r) {\n        return (function (t, n, e, r) {\n          var i,\n            u,\n            c = {},\n            a = new o(),\n            f = function (t) {\n              var n = t.v !== i ? t.v : t.w,\n                r = c[n],\n                o = e(t),\n                f = u.distance + o;\n              if (o < 0)\n                throw new Error(\n                  \"dijkstra does not allow negative edge weights. Bad edge: \" +\n                    t +\n                    \" Weight: \" +\n                    o,\n                );\n              f < r.distance &&\n                ((r.distance = f), (r.predecessor = i), a.decrease(n, f));\n            };\n          t.nodes().forEach(function (t) {\n            var e = t === n ? 0 : Number.POSITIVE_INFINITY;\n            (c[t] = { distance: e }), a.add(t, e);\n          });\n          for (\n            ;\n            a.size() > 0 &&\n            ((i = a.removeMin()),\n            (u = c[i]).distance !== Number.POSITIVE_INFINITY);\n\n          )\n            r(i).forEach(f);\n          return c;\n        })(\n          t,\n          String(n),\n          e || i,\n          r ||\n            function (n) {\n              return t.outEdges(n);\n            },\n        );\n      };\n      var i = r.constant(1);\n    },\n    function (t, n, e) {\n      var r = e(21);\n      function o() {\n        (this._arr = []), (this._keyIndices = {});\n      }\n      (t.exports = o),\n        (o.prototype.size = function () {\n          return this._arr.length;\n        }),\n        (o.prototype.keys = function () {\n          return this._arr.map(function (t) {\n            return t.key;\n          });\n        }),\n        (o.prototype.has = function (t) {\n          return r.has(this._keyIndices, t);\n        }),\n        (o.prototype.priority = function (t) {\n          var n = this._keyIndices[t];\n          if (void 0 !== n) return this._arr[n].priority;\n        }),\n        (o.prototype.min = function () {\n          if (0 === this.size()) throw new Error(\"Queue underflow\");\n          return this._arr[0].key;\n        }),\n        (o.prototype.add = function (t, n) {\n          var e = this._keyIndices;\n          if (((t = String(t)), !r.has(e, t))) {\n            var o = this._arr,\n              i = o.length;\n            return (\n              (e[t] = i), o.push({ key: t, priority: n }), this._decrease(i), !0\n            );\n          }\n          return !1;\n        }),\n        (o.prototype.removeMin = function () {\n          this._swap(0, this._arr.length - 1);\n          var t = this._arr.pop();\n          return delete this._keyIndices[t.key], this._heapify(0), t.key;\n        }),\n        (o.prototype.decrease = function (t, n) {\n          var e = this._keyIndices[t];\n          if (n > this._arr[e].priority)\n            throw new Error(\n              \"New priority is greater than current priority. Key: \" +\n                t +\n                \" Old: \" +\n                this._arr[e].priority +\n                \" New: \" +\n                n,\n            );\n          (this._arr[e].priority = n), this._decrease(e);\n        }),\n        (o.prototype._heapify = function (t) {\n          var n = this._arr,\n            e = 2 * t,\n            r = e + 1,\n            o = t;\n          e < n.length &&\n            ((o = n[e].priority < n[o].priority ? e : o),\n            r < n.length && (o = n[r].priority < n[o].priority ? r : o),\n            o !== t && (this._swap(t, o), this._heapify(o)));\n        }),\n        (o.prototype._decrease = function (t) {\n          for (\n            var n, e = this._arr, r = e[t].priority;\n            0 !== t && !(e[(n = t >> 1)].priority < r);\n\n          )\n            this._swap(t, n), (t = n);\n        }),\n        (o.prototype._swap = function (t, n) {\n          var e = this._arr,\n            r = this._keyIndices,\n            o = e[t],\n            i = e[n];\n          (e[t] = i), (e[n] = o), (r[i.key] = t), (r[o.key] = n);\n        });\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t) {\n        var n = 0,\n          e = [],\n          o = {},\n          i = [];\n        return (\n          t.nodes().forEach(function (u) {\n            r.has(o, u) ||\n              (function u(c) {\n                var a = (o[c] = { onStack: !0, lowlink: n, index: n++ });\n                if (\n                  (e.push(c),\n                  t.successors(c).forEach(function (t) {\n                    r.has(o, t)\n                      ? o[t].onStack &&\n                        (a.lowlink = Math.min(a.lowlink, o[t].index))\n                      : (u(t), (a.lowlink = Math.min(a.lowlink, o[t].lowlink)));\n                  }),\n                  a.lowlink === a.index)\n                ) {\n                  var f,\n                    s = [];\n                  do {\n                    (f = e.pop()), (o[f].onStack = !1), s.push(f);\n                  } while (c !== f);\n                  i.push(s);\n                }\n              })(u);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      function o(t) {\n        var n = {},\n          e = {},\n          o = [];\n        if (\n          (r.each(t.sinks(), function u(c) {\n            if (r.has(e, c)) throw new i();\n            r.has(n, c) ||\n              ((e[c] = !0),\n              (n[c] = !0),\n              r.each(t.predecessors(c), u),\n              delete e[c],\n              o.push(c));\n          }),\n          r.size(n) !== t.nodeCount())\n        )\n          throw new i();\n        return o;\n      }\n      function i() {}\n      (t.exports = o), (o.CycleException = i), (i.prototype = new Error());\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t, n, e) {\n        r.isArray(n) || (n = [n]);\n        var o = (t.isDirected() ? t.successors : t.neighbors).bind(t),\n          i = [],\n          u = {};\n        return (\n          r.each(n, function (n) {\n            if (!t.hasNode(n))\n              throw new Error(\"Graph does not have node: \" + n);\n            !(function t(n, e, o, i, u, c) {\n              r.has(i, e) ||\n                ((i[e] = !0),\n                o || c.push(e),\n                r.each(u(e), function (e) {\n                  t(n, e, o, i, u, c);\n                }),\n                o && c.push(e));\n            })(t, n, \"post\" === e, u, o, i);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(341);\n      t.exports = function (t) {\n        return t\n          ? (t = r(t)) === 1 / 0 || t === -1 / 0\n            ? 17976931348623157e292 * (t < 0 ? -1 : 1)\n            : t == t\n            ? t\n            : 0\n          : 0 === t\n          ? t\n          : 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(100);\n      t.exports = function (t) {\n        return (null == t ? 0 : t.length) ? r(t, 1) : [];\n      };\n    },\n    function (t, n, e) {\n      var r = e(64),\n        o = e(41);\n      t.exports = function (t, n, e) {\n        ((void 0 !== e && !o(t[n], e)) || (void 0 === e && !(n in t))) &&\n          r(t, n, e);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        if (\n          (\"constructor\" !== n || \"function\" != typeof t[n]) &&\n          \"__proto__\" != n\n        )\n          return t[n];\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t < n;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(23).Graph,\n        i = e(75).slack;\n      function u(t, n) {\n        return (\n          r.forEach(t.nodes(), function e(o) {\n            r.forEach(n.nodeEdges(o), function (r) {\n              var u = r.v,\n                c = o === u ? r.w : u;\n              t.hasNode(c) ||\n                i(n, r) ||\n                (t.setNode(c, {}), t.setEdge(o, c, {}), e(c));\n            });\n          }),\n          t.nodeCount()\n        );\n      }\n      function c(t, n) {\n        return r.minBy(n.edges(), function (e) {\n          if (t.hasNode(e.v) !== t.hasNode(e.w)) return i(n, e);\n        });\n      }\n      function a(t, n, e) {\n        r.forEach(t.nodes(), function (t) {\n          n.node(t).rank += e;\n        });\n      }\n      t.exports = function (t) {\n        var n,\n          e,\n          r = new o({ directed: !1 }),\n          f = t.nodes()[0],\n          s = t.nodeCount();\n        r.setNode(f, {});\n        for (; u(r, t) < s; )\n          (n = c(r, t)), (e = r.hasNode(n.v) ? i(t, n) : -i(t, n)), a(r, t, e);\n        return r;\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, n) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, n) {\n                  t.__proto__ = n;\n                }) ||\n              function (t, n) {\n                for (var e in n)\n                  Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);\n              })(t, n);\n          }),\n          function (t, n) {\n            if (\"function\" != typeof n && null !== n)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(n) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            r(t, n),\n              (t.prototype =\n                null === n\n                  ? Object.create(n)\n                  : ((e.prototype = n.prototype), new e()));\n          }),\n        i =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.DagreLayout = void 0);\n      var u = i(e(219)),\n        c = e(10),\n        a = (function (t) {\n          function n(n) {\n            var e = t.call(this) || this;\n            return (\n              (e.rankdir = \"TB\"),\n              (e.nodesep = 50),\n              (e.ranksep = 50),\n              (e.controlPoints = !1),\n              (e.sortByCombo = !1),\n              (e.nodes = []),\n              (e.edges = []),\n              (e.onLayoutEnd = function () {}),\n              e.updateCfg(n),\n              e\n            );\n          }\n          return (\n            o(n, t),\n            (n.prototype.getDefaultCfg = function () {\n              return {\n                rankdir: \"TB\",\n                align: void 0,\n                nodeSize: void 0,\n                nodesepFunc: void 0,\n                ranksepFunc: void 0,\n                nodesep: 50,\n                ranksep: 50,\n                controlPoints: !1,\n              };\n            }),\n            (n.prototype.execute = function () {\n              var t = this,\n                n = this,\n                e = n.nodes,\n                r = n.nodeSize,\n                o = n.rankdir,\n                i = n.combos;\n              if (e) {\n                var a,\n                  s = n.edges || [],\n                  p = new u.default.graphlib.Graph({\n                    multigraph: !0,\n                    compound: !0,\n                  });\n                a = r\n                  ? c.isArray(r)\n                    ? function () {\n                        return r;\n                      }\n                    : function () {\n                        return [r, r];\n                      }\n                  : function (t) {\n                      return t.size\n                        ? c.isArray(t.size)\n                          ? t.size\n                          : [t.size, t.size]\n                        : [40, 40];\n                    };\n                var d = f(n.nodesepFunc, n.nodesep, 50),\n                  h = f(n.ranksepFunc, n.ranksep, 50);\n                (\"LR\" !== o && \"RL\" !== o) ||\n                  ((d = f(n.ranksepFunc, n.ranksep, 50)),\n                  (h = f(n.nodesepFunc, n.nodesep, 50))),\n                  p.setDefaultEdgeLabel(function () {\n                    return {};\n                  }),\n                  p.setGraph(n);\n                var l,\n                  v = {};\n                return (\n                  e.forEach(function (n) {\n                    var e = a(n),\n                      r = h(n),\n                      o = d(n),\n                      i = e[0] + 2 * o,\n                      u = e[1] + 2 * r;\n                    p.setNode(n.id, { width: i, height: u }),\n                      t.sortByCombo &&\n                        n.comboId &&\n                        (v[n.comboId] ||\n                          ((v[n.comboId] = !0), p.setNode(n.comboId, {})),\n                        p.setParent(n.id, n.comboId));\n                  }),\n                  this.sortByCombo &&\n                    i &&\n                    i.forEach(function (t) {\n                      t.parentId &&\n                        (v[t.parentId] ||\n                          ((v[t.parentId] = !0), p.setNode(t.parentId, {})),\n                        p.setParent(t.id, t.parentId));\n                    }),\n                  s.forEach(function (t) {\n                    p.setEdge(t.source, t.target, { weight: t.weight || 1 });\n                  }),\n                  u.default.layout(p),\n                  p.nodes().forEach(function (t) {\n                    l = p.node(t);\n                    var n = e.findIndex(function (n) {\n                      return n.id === t;\n                    });\n                    e[n] && ((e[n].x = l.x), (e[n].y = l.y));\n                  }),\n                  p.edges().forEach(function (t) {\n                    l = p.edge(t);\n                    var e = s.findIndex(function (n) {\n                      return n.source === t.v && n.target === t.w;\n                    });\n                    n.controlPoints &&\n                      \"loop\" !== s[e].type &&\n                      (s[e].controlPoints = l.points.slice(\n                        1,\n                        l.points.length - 1,\n                      ));\n                  }),\n                  n.onLayoutEnd && n.onLayoutEnd(),\n                  { nodes: e, edges: s }\n                );\n              }\n            }),\n            (n.prototype.getType = function () {\n              return \"dagre\";\n            }),\n            n\n          );\n        })(e(7).Base);\n      function f(t, n, e) {\n        return (\n          t ||\n          (c.isNumber(n)\n            ? function () {\n                return n;\n              }\n            : function () {\n                return e;\n              })\n        );\n      }\n      n.DagreLayout = a;\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      e.r(n);\n      var r = e(174);\n      n.default = r.DagreLayout;\n    },\n    function (t, n, e) {\n      t.exports = {\n        graphlib: e(23),\n        layout: e(334),\n        debug: e(395),\n        util: { time: e(19).time, notime: e(19).notime },\n        version: e(396),\n      };\n    },\n    function (t, n, e) {\n      var r = e(221);\n      t.exports = {\n        Graph: r.Graph,\n        json: e(324),\n        alg: e(325),\n        version: r.version,\n      };\n    },\n    function (t, n, e) {\n      t.exports = { Graph: e(85), version: e(323) };\n    },\n    function (t, n, e) {\n      var r = e(113);\n      t.exports = function (t) {\n        return r(t, 4);\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        (this.__data__ = []), (this.size = 0);\n      };\n    },\n    function (t, n, e) {\n      var r = e(60),\n        o = Array.prototype.splice;\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = r(n, t);\n        return (\n          !(e < 0) &&\n          (e == n.length - 1 ? n.pop() : o.call(n, e, 1), --this.size, !0)\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(60);\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = r(n, t);\n        return e < 0 ? void 0 : n[e][1];\n      };\n    },\n    function (t, n, e) {\n      var r = e(60);\n      t.exports = function (t) {\n        return r(this.__data__, t) > -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(60);\n      t.exports = function (t, n) {\n        var e = this.__data__,\n          o = r(e, t);\n        return o < 0 ? (++this.size, e.push([t, n])) : (e[o][1] = n), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(59);\n      t.exports = function () {\n        (this.__data__ = new r()), (this.size = 0);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = n.delete(t);\n        return (this.size = n.size), e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.get(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.has(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(59),\n        o = e(86),\n        i = e(87);\n      t.exports = function (t, n) {\n        var e = this.__data__;\n        if (e instanceof r) {\n          var u = e.__data__;\n          if (!o || u.length < 199)\n            return u.push([t, n]), (this.size = ++e.size), this;\n          e = this.__data__ = new i(u);\n        }\n        return e.set(t, n), (this.size = e.size), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(51),\n        o = e(237),\n        i = e(22),\n        u = e(115),\n        c = /^\\[object .+?Constructor\\]$/,\n        a = Function.prototype,\n        f = Object.prototype,\n        s = a.toString,\n        p = f.hasOwnProperty,\n        d = RegExp(\n          \"^\" +\n            s\n              .call(p)\n              .replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\")\n              .replace(\n                /hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\n                \"$1.*?\",\n              ) +\n            \"$\",\n        );\n      t.exports = function (t) {\n        return !(!i(t) || o(t)) && (r(t) ? d : c).test(u(t));\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r;\n      r = (function () {\n        return this;\n      })();\n      try {\n        r = r || new Function(\"return this\")();\n      } catch (t) {\n        \"object\" === (\"undefined\" == typeof window ? \"undefined\" : e(window)) &&\n          (r = window);\n      }\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = Object.prototype,\n        i = o.hasOwnProperty,\n        u = o.toString,\n        c = r ? r.toStringTag : void 0;\n      t.exports = function (t) {\n        var n = i.call(t, c),\n          e = t[c];\n        try {\n          t[c] = void 0;\n          var r = !0;\n        } catch (t) {}\n        var o = u.call(t);\n        return r && (n ? (t[c] = e) : delete t[c]), o;\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype.toString;\n      t.exports = function (t) {\n        return e.call(t);\n      };\n    },\n    function (t, n, e) {\n      var r,\n        o = e(238),\n        i = (r = /[^.]+$/.exec((o && o.keys && o.keys.IE_PROTO) || \"\"))\n          ? \"Symbol(src)_1.\" + r\n          : \"\";\n      t.exports = function (t) {\n        return !!i && i in t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(24)[\"__core-js_shared__\"];\n      t.exports = r;\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return null == t ? void 0 : t[n];\n      };\n    },\n    function (t, n, e) {\n      var r = e(241),\n        o = e(59),\n        i = e(86);\n      t.exports = function () {\n        (this.size = 0),\n          (this.__data__ = {\n            hash: new r(),\n            map: new (i || o)(),\n            string: new r(),\n          });\n      };\n    },\n    function (t, n, e) {\n      var r = e(242),\n        o = e(243),\n        i = e(244),\n        u = e(245),\n        c = e(246);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n, e) {\n      var r = e(61);\n      t.exports = function () {\n        (this.__data__ = r ? r(null) : {}), (this.size = 0);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = this.has(t) && delete this.__data__[t];\n        return (this.size -= n ? 1 : 0), n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(61),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = this.__data__;\n        if (r) {\n          var e = n[t];\n          return \"__lodash_hash_undefined__\" === e ? void 0 : e;\n        }\n        return o.call(n, t) ? n[t] : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(61),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = this.__data__;\n        return r ? void 0 !== n[t] : o.call(n, t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(61);\n      t.exports = function (t, n) {\n        var e = this.__data__;\n        return (\n          (this.size += this.has(t) ? 0 : 1),\n          (e[t] = r && void 0 === n ? \"__lodash_hash_undefined__\" : n),\n          this\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t) {\n        var n = r(this, t).delete(t);\n        return (this.size -= n ? 1 : 0), n;\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        var n = e(t);\n        return \"string\" == n || \"number\" == n || \"symbol\" == n || \"boolean\" == n\n          ? \"__proto__\" !== t\n          : null === t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t) {\n        return r(this, t).get(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t) {\n        return r(this, t).has(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t, n) {\n        var e = r(this, t),\n          o = e.size;\n        return e.set(t, n), (this.size += e.size == o ? 0 : 1), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(33);\n      t.exports = function (t, n) {\n        return t && r(n, o(n), t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = Array(t); ++e < t; ) r[e] = n(e);\n        return r;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && \"[object Arguments]\" == r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(89),\n        i = e(26),\n        u = {};\n      (u[\"[object Float32Array]\"] =\n        u[\"[object Float64Array]\"] =\n        u[\"[object Int8Array]\"] =\n        u[\"[object Int16Array]\"] =\n        u[\"[object Int32Array]\"] =\n        u[\"[object Uint8Array]\"] =\n        u[\"[object Uint8ClampedArray]\"] =\n        u[\"[object Uint16Array]\"] =\n        u[\"[object Uint32Array]\"] =\n          !0),\n        (u[\"[object Arguments]\"] =\n          u[\"[object Array]\"] =\n          u[\"[object ArrayBuffer]\"] =\n          u[\"[object Boolean]\"] =\n          u[\"[object DataView]\"] =\n          u[\"[object Date]\"] =\n          u[\"[object Error]\"] =\n          u[\"[object Function]\"] =\n          u[\"[object Map]\"] =\n          u[\"[object Number]\"] =\n          u[\"[object Object]\"] =\n          u[\"[object RegExp]\"] =\n          u[\"[object Set]\"] =\n          u[\"[object String]\"] =\n          u[\"[object WeakMap]\"] =\n            !1),\n        (t.exports = function (t) {\n          return i(t) && o(t.length) && !!u[r(t)];\n        });\n    },\n    function (t, n, e) {\n      var r = e(118)(Object.keys, Object);\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(37);\n      t.exports = function (t, n) {\n        return t && r(n, o(n), t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(22),\n        o = e(67),\n        i = e(260),\n        u = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (!r(t)) return i(t);\n        var n = o(t),\n          e = [];\n        for (var c in t)\n          (\"constructor\" != c || (!n && u.call(t, c))) && e.push(c);\n        return e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = [];\n        if (null != t) for (var e in Object(t)) n.push(e);\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(92);\n      t.exports = function (t, n) {\n        return r(t, o(t), n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(123);\n      t.exports = function (t, n) {\n        return r(t, o(t), n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(125),\n        o = e(123),\n        i = e(37);\n      t.exports = function (t) {\n        return r(t, i, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"DataView\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"Promise\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"WeakMap\");\n      t.exports = r;\n    },\n    function (t, n) {\n      var e = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = t.length,\n          r = new t.constructor(n);\n        return (\n          n &&\n            \"string\" == typeof t[0] &&\n            e.call(t, \"index\") &&\n            ((r.index = t.index), (r.input = t.input)),\n          r\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(94),\n        o = e(269),\n        i = e(270),\n        u = e(271),\n        c = e(128);\n      t.exports = function (t, n, e) {\n        var a = t.constructor;\n        switch (n) {\n          case \"[object ArrayBuffer]\":\n            return r(t);\n          case \"[object Boolean]\":\n          case \"[object Date]\":\n            return new a(+t);\n          case \"[object DataView]\":\n            return o(t, e);\n          case \"[object Float32Array]\":\n          case \"[object Float64Array]\":\n          case \"[object Int8Array]\":\n          case \"[object Int16Array]\":\n          case \"[object Int32Array]\":\n          case \"[object Uint8Array]\":\n          case \"[object Uint8ClampedArray]\":\n          case \"[object Uint16Array]\":\n          case \"[object Uint32Array]\":\n            return c(t, e);\n          case \"[object Map]\":\n            return new a();\n          case \"[object Number]\":\n          case \"[object String]\":\n            return new a(t);\n          case \"[object RegExp]\":\n            return i(t);\n          case \"[object Set]\":\n            return new a();\n          case \"[object Symbol]\":\n            return u(t);\n        }\n      };\n    },\n    function (t, n, e) {\n      var r = e(94);\n      t.exports = function (t, n) {\n        var e = n ? r(t.buffer) : t.buffer;\n        return new t.constructor(e, t.byteOffset, t.byteLength);\n      };\n    },\n    function (t, n) {\n      var e = /\\w*$/;\n      t.exports = function (t) {\n        var n = new t.constructor(t.source, e.exec(t));\n        return (n.lastIndex = t.lastIndex), n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = r ? r.prototype : void 0,\n        i = o ? o.valueOf : void 0;\n      t.exports = function (t) {\n        return i ? Object(i.call(t)) : {};\n      };\n    },\n    function (t, n, e) {\n      var r = e(273),\n        o = e(66),\n        i = e(90),\n        u = i && i.isMap,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(44),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && \"[object Map]\" == r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(275),\n        o = e(66),\n        i = e(90),\n        u = i && i.isSet,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(44),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && \"[object Set]\" == r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n, e, r) {\n          for (var o = -1, i = Object(n), u = r(n), c = u.length; c--; ) {\n            var a = u[t ? c : ++o];\n            if (!1 === e(i[a], a, i)) break;\n          }\n          return n;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(30);\n      t.exports = function (t, n) {\n        return function (e, o) {\n          if (null == e) return e;\n          if (!r(e)) return t(e, o);\n          for (\n            var i = e.length, u = n ? i : -1, c = Object(e);\n            (n ? u-- : ++u < i) && !1 !== o(c[u], u, c);\n\n          );\n          return e;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(69);\n      t.exports = function (t, n) {\n        var e = [];\n        return (\n          r(t, function (t, r, o) {\n            n(t, r, o) && e.push(t);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(280),\n        o = e(288),\n        i = e(140);\n      t.exports = function (t) {\n        var n = o(t);\n        return 1 == n.length && n[0][2]\n          ? i(n[0][0], n[0][1])\n          : function (e) {\n              return e === t || r(e, t, n);\n            };\n      };\n    },\n    function (t, n, e) {\n      var r = e(58),\n        o = e(135);\n      t.exports = function (t, n, e, i) {\n        var u = e.length,\n          c = u,\n          a = !i;\n        if (null == t) return !c;\n        for (t = Object(t); u--; ) {\n          var f = e[u];\n          if (a && f[2] ? f[1] !== t[f[0]] : !(f[0] in t)) return !1;\n        }\n        for (; ++u < c; ) {\n          var s = (f = e[u])[0],\n            p = t[s],\n            d = f[1];\n          if (a && f[2]) {\n            if (void 0 === p && !(s in t)) return !1;\n          } else {\n            var h = new r();\n            if (i) var l = i(p, d, s, t, n, h);\n            if (!(void 0 === l ? o(d, p, 3, i, h) : l)) return !1;\n          }\n        }\n        return !0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(58),\n        o = e(136),\n        i = e(285),\n        u = e(287),\n        c = e(44),\n        a = e(17),\n        f = e(43),\n        s = e(54),\n        p = \"[object Object]\",\n        d = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e, h, l, v) {\n        var y = a(t),\n          g = a(n),\n          b = y ? \"[object Array]\" : c(t),\n          m = g ? \"[object Array]\" : c(n),\n          x = (b = \"[object Arguments]\" == b ? p : b) == p,\n          _ = (m = \"[object Arguments]\" == m ? p : m) == p,\n          w = b == m;\n        if (w && f(t)) {\n          if (!f(n)) return !1;\n          (y = !0), (x = !1);\n        }\n        if (w && !x)\n          return (\n            v || (v = new r()),\n            y || s(t) ? o(t, n, e, h, l, v) : i(t, n, b, e, h, l, v)\n          );\n        if (!(1 & e)) {\n          var E = x && d.call(t, \"__wrapped__\"),\n            j = _ && d.call(n, \"__wrapped__\");\n          if (E || j) {\n            var k = E ? t.value() : t,\n              S = j ? n.value() : n;\n            return v || (v = new r()), l(k, S, e, h, v);\n          }\n        }\n        return !!w && (v || (v = new r()), u(t, n, e, h, l, v));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.set(t, \"__lodash_hash_undefined__\"), this;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.has(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = null == t ? 0 : t.length; ++e < r; )\n          if (n(t[e], e, t)) return !0;\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(127),\n        i = e(41),\n        u = e(136),\n        c = e(286),\n        a = e(98),\n        f = r ? r.prototype : void 0,\n        s = f ? f.valueOf : void 0;\n      t.exports = function (t, n, e, r, f, p, d) {\n        switch (e) {\n          case \"[object DataView]\":\n            if (t.byteLength != n.byteLength || t.byteOffset != n.byteOffset)\n              return !1;\n            (t = t.buffer), (n = n.buffer);\n          case \"[object ArrayBuffer]\":\n            return !(t.byteLength != n.byteLength || !p(new o(t), new o(n)));\n          case \"[object Boolean]\":\n          case \"[object Date]\":\n          case \"[object Number]\":\n            return i(+t, +n);\n          case \"[object Error]\":\n            return t.name == n.name && t.message == n.message;\n          case \"[object RegExp]\":\n          case \"[object String]\":\n            return t == n + \"\";\n          case \"[object Map]\":\n            var h = c;\n          case \"[object Set]\":\n            var l = 1 & r;\n            if ((h || (h = a), t.size != n.size && !l)) return !1;\n            var v = d.get(t);\n            if (v) return v == n;\n            (r |= 2), d.set(t, n);\n            var y = u(h(t), h(n), r, f, p, d);\n            return d.delete(t), y;\n          case \"[object Symbol]\":\n            if (s) return s.call(t) == s.call(n);\n        }\n        return !1;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = -1,\n          e = Array(t.size);\n        return (\n          t.forEach(function (t, r) {\n            e[++n] = [r, t];\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(124),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e, i, u, c) {\n        var a = 1 & e,\n          f = r(t),\n          s = f.length;\n        if (s != r(n).length && !a) return !1;\n        for (var p = s; p--; ) {\n          var d = f[p];\n          if (!(a ? d in n : o.call(n, d))) return !1;\n        }\n        var h = c.get(t),\n          l = c.get(n);\n        if (h && l) return h == n && l == t;\n        var v = !0;\n        c.set(t, n), c.set(n, t);\n        for (var y = a; ++p < s; ) {\n          var g = t[(d = f[p])],\n            b = n[d];\n          if (i) var m = a ? i(b, g, d, n, t, c) : i(g, b, d, t, n, c);\n          if (!(void 0 === m ? g === b || u(g, b, e, i, c) : m)) {\n            v = !1;\n            break;\n          }\n          y || (y = \"constructor\" == d);\n        }\n        if (v && !y) {\n          var x = t.constructor,\n            _ = n.constructor;\n          x == _ ||\n            !(\"constructor\" in t) ||\n            !(\"constructor\" in n) ||\n            (\"function\" == typeof x &&\n              x instanceof x &&\n              \"function\" == typeof _ &&\n              _ instanceof _) ||\n            (v = !1);\n        }\n        return c.delete(t), c.delete(n), v;\n      };\n    },\n    function (t, n, e) {\n      var r = e(139),\n        o = e(33);\n      t.exports = function (t) {\n        for (var n = o(t), e = n.length; e--; ) {\n          var i = n[e],\n            u = t[i];\n          n[e] = [i, u, r(u)];\n        }\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(135),\n        o = e(290),\n        i = e(142),\n        u = e(99),\n        c = e(139),\n        a = e(140),\n        f = e(55);\n      t.exports = function (t, n) {\n        return u(t) && c(n)\n          ? a(f(t), n)\n          : function (e) {\n              var u = o(e, t);\n              return void 0 === u && u === n ? i(e, t) : r(n, u, 3);\n            };\n      };\n    },\n    function (t, n, e) {\n      var r = e(70);\n      t.exports = function (t, n, e) {\n        var o = null == t ? void 0 : r(t, n);\n        return void 0 === o ? e : o;\n      };\n    },\n    function (t, n, e) {\n      var r = e(292),\n        o =\n          /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,\n        i = /\\\\(\\\\)?/g,\n        u = r(function (t) {\n          var n = [];\n          return (\n            46 === t.charCodeAt(0) && n.push(\"\"),\n            t.replace(o, function (t, e, r, o) {\n              n.push(r ? o.replace(i, \"$1\") : e || t);\n            }),\n            n\n          );\n        });\n      t.exports = u;\n    },\n    function (t, n, e) {\n      var r = e(293);\n      t.exports = function (t) {\n        var n = r(t, function (t) {\n            return 500 === e.size && e.clear(), t;\n          }),\n          e = n.cache;\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(87);\n      function o(t, n) {\n        if (\"function\" != typeof t || (null != n && \"function\" != typeof n))\n          throw new TypeError(\"Expected a function\");\n        var e = function e() {\n          var r = arguments,\n            o = n ? n.apply(this, r) : r[0],\n            i = e.cache;\n          if (i.has(o)) return i.get(o);\n          var u = t.apply(this, r);\n          return (e.cache = i.set(o, u) || i), u;\n        };\n        return (e.cache = new (o.Cache || r)()), e;\n      }\n      (o.Cache = r), (t.exports = o);\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(72),\n        i = e(17),\n        u = e(45),\n        c = r ? r.prototype : void 0,\n        a = c ? c.toString : void 0;\n      t.exports = function t(n) {\n        if (\"string\" == typeof n) return n;\n        if (i(n)) return o(n, t) + \"\";\n        if (u(n)) return a ? a.call(n) : \"\";\n        var e = n + \"\";\n        return \"0\" == e && 1 / n == -1 / 0 ? \"-0\" : e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return null != t && n in Object(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(144),\n        o = e(297),\n        i = e(99),\n        u = e(55);\n      t.exports = function (t) {\n        return i(t) ? r(u(t)) : o(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(70);\n      t.exports = function (t) {\n        return function (n) {\n          return r(n, t);\n        };\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n) {\n        return null != t && e.call(t, n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(91),\n        o = e(44),\n        i = e(53),\n        u = e(17),\n        c = e(30),\n        a = e(43),\n        f = e(67),\n        s = e(54),\n        p = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (null == t) return !0;\n        if (\n          c(t) &&\n          (u(t) ||\n            \"string\" == typeof t ||\n            \"function\" == typeof t.splice ||\n            a(t) ||\n            s(t) ||\n            i(t))\n        )\n          return !t.length;\n        var n = o(t);\n        if (\"[object Map]\" == n || \"[object Set]\" == n) return !t.size;\n        if (f(t)) return !r(t).length;\n        for (var e in t) if (p.call(t, e)) return !1;\n        return !0;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r) {\n        var o = -1,\n          i = null == t ? 0 : t.length;\n        for (r && i && (e = t[++o]); ++o < i; ) e = n(e, t[o], o, t);\n        return e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r, o) {\n        return (\n          o(t, function (t, o, i) {\n            e = r ? ((r = !1), t) : n(e, t, o, i);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(91),\n        o = e(44),\n        i = e(30),\n        u = e(303),\n        c = e(304);\n      t.exports = function (t) {\n        if (null == t) return 0;\n        if (i(t)) return u(t) ? c(t) : t.length;\n        var n = o(t);\n        return \"[object Map]\" == n || \"[object Set]\" == n\n          ? t.size\n          : r(t).length;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(17),\n        i = e(26);\n      t.exports = function (t) {\n        return (\n          \"string\" == typeof t || (!o(t) && i(t) && \"[object String]\" == r(t))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(305),\n        o = e(306),\n        i = e(307);\n      t.exports = function (t) {\n        return o(t) ? i(t) : r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(144)(\"length\");\n      t.exports = r;\n    },\n    function (t, n) {\n      var e = RegExp(\n        \"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\",\n      );\n      t.exports = function (t) {\n        return e.test(t);\n      };\n    },\n    function (t, n) {\n      var e = \"[\\\\ud800-\\\\udfff]\",\n        r = \"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\n        o = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n        i = \"[^\\\\ud800-\\\\udfff]\",\n        u = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n        c = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n        a = \"(?:\" + r + \"|\" + o + \")\" + \"?\",\n        f =\n          \"[\\\\ufe0e\\\\ufe0f]?\" +\n          a +\n          (\"(?:\\\\u200d(?:\" +\n            [i, u, c].join(\"|\") +\n            \")[\\\\ufe0e\\\\ufe0f]?\" +\n            a +\n            \")*\"),\n        s = \"(?:\" + [i + r + \"?\", r, u, c, e].join(\"|\") + \")\",\n        p = RegExp(o + \"(?=\" + o + \")|\" + s + f, \"g\");\n      t.exports = function (t) {\n        for (var n = (p.lastIndex = 0); p.test(t); ) ++n;\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(88),\n        o = e(130),\n        i = e(96),\n        u = e(31),\n        c = e(68),\n        a = e(17),\n        f = e(43),\n        s = e(51),\n        p = e(22),\n        d = e(54);\n      t.exports = function (t, n, e) {\n        var h = a(t),\n          l = h || f(t) || d(t);\n        if (((n = u(n, 4)), null == e)) {\n          var v = t && t.constructor;\n          e = l ? (h ? new v() : []) : p(t) && s(v) ? o(c(t)) : {};\n        }\n        return (\n          (l ? r : i)(t, function (t, r, o) {\n            return n(e, t, r, o);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(100),\n        o = e(73),\n        i = e(314),\n        u = e(153),\n        c = o(function (t) {\n          return i(r(t, 1, u, !0));\n        });\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(53),\n        i = e(17),\n        u = r ? r.isConcatSpreadable : void 0;\n      t.exports = function (t) {\n        return i(t) || o(t) || !!(u && t && t[u]);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        switch (e.length) {\n          case 0:\n            return t.call(n);\n          case 1:\n            return t.call(n, e[0]);\n          case 2:\n            return t.call(n, e[0], e[1]);\n          case 3:\n            return t.call(n, e[0], e[1], e[2]);\n        }\n        return t.apply(n, e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(95),\n        o = e(116),\n        i = e(38),\n        u = o\n          ? function (t, n) {\n              return o(t, \"toString\", {\n                configurable: !0,\n                enumerable: !1,\n                value: r(n),\n                writable: !0,\n              });\n            }\n          : i;\n      t.exports = u;\n    },\n    function (t, n) {\n      var e = Date.now;\n      t.exports = function (t) {\n        var n = 0,\n          r = 0;\n        return function () {\n          var o = e(),\n            i = 16 - (o - r);\n          if (((r = o), i > 0)) {\n            if (++n >= 800) return arguments[0];\n          } else n = 0;\n          return t.apply(void 0, arguments);\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(137),\n        o = e(315),\n        i = e(319),\n        u = e(138),\n        c = e(320),\n        a = e(98);\n      t.exports = function (t, n, e) {\n        var f = -1,\n          s = o,\n          p = t.length,\n          d = !0,\n          h = [],\n          l = h;\n        if (e) (d = !1), (s = i);\n        else if (p >= 200) {\n          var v = n ? null : c(t);\n          if (v) return a(v);\n          (d = !1), (s = u), (l = new r());\n        } else l = n ? [] : h;\n        t: for (; ++f < p; ) {\n          var y = t[f],\n            g = n ? n(y) : y;\n          if (((y = e || 0 !== y ? y : 0), d && g == g)) {\n            for (var b = l.length; b--; ) if (l[b] === g) continue t;\n            n && l.push(g), h.push(y);\n          } else s(l, g, e) || (l !== h && l.push(g), h.push(y));\n        }\n        return h;\n      };\n    },\n    function (t, n, e) {\n      var r = e(316);\n      t.exports = function (t, n) {\n        return !!(null == t ? 0 : t.length) && r(t, n, 0) > -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(152),\n        o = e(317),\n        i = e(318);\n      t.exports = function (t, n, e) {\n        return n == n ? i(t, n, e) : r(t, o, e);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return t != t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = e - 1, o = t.length; ++r < o; ) if (t[r] === n) return r;\n        return -1;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = -1, o = null == t ? 0 : t.length; ++r < o; )\n          if (e(n, t[r])) return !0;\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(126),\n        o = e(321),\n        i = e(98),\n        u =\n          r && 1 / i(new r([, -0]))[1] == 1 / 0\n            ? function (t) {\n                return new r(t);\n              }\n            : o;\n      t.exports = u;\n    },\n    function (t, n) {\n      t.exports = function () {};\n    },\n    function (t, n, e) {\n      var r = e(72);\n      t.exports = function (t, n) {\n        return r(n, function (n) {\n          return t[n];\n        });\n      };\n    },\n    function (t, n) {\n      t.exports = \"2.1.8\";\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(85);\n      function i(t) {\n        return r.map(t.nodes(), function (n) {\n          var e = t.node(n),\n            o = t.parent(n),\n            i = { v: n };\n          return (\n            r.isUndefined(e) || (i.value = e),\n            r.isUndefined(o) || (i.parent = o),\n            i\n          );\n        });\n      }\n      function u(t) {\n        return r.map(t.edges(), function (n) {\n          var e = t.edge(n),\n            o = { v: n.v, w: n.w };\n          return (\n            r.isUndefined(n.name) || (o.name = n.name),\n            r.isUndefined(e) || (o.value = e),\n            o\n          );\n        });\n      }\n      t.exports = {\n        write: function (t) {\n          var n = {\n            options: {\n              directed: t.isDirected(),\n              multigraph: t.isMultigraph(),\n              compound: t.isCompound(),\n            },\n            nodes: i(t),\n            edges: u(t),\n          };\n          r.isUndefined(t.graph()) || (n.value = r.clone(t.graph()));\n          return n;\n        },\n        read: function (t) {\n          var n = new o(t.options).setGraph(t.value);\n          return (\n            r.each(t.nodes, function (t) {\n              n.setNode(t.v, t.value), t.parent && n.setParent(t.v, t.parent);\n            }),\n            r.each(t.edges, function (t) {\n              n.setEdge({ v: t.v, w: t.w, name: t.name }, t.value);\n            }),\n            n\n          );\n        },\n      };\n    },\n    function (t, n, e) {\n      t.exports = {\n        components: e(326),\n        dijkstra: e(155),\n        dijkstraAll: e(327),\n        findCycles: e(328),\n        floydWarshall: e(329),\n        isAcyclic: e(330),\n        postorder: e(331),\n        preorder: e(332),\n        prim: e(333),\n        tarjan: e(157),\n        topsort: e(158),\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t) {\n        var n,\n          e = {},\n          o = [];\n        function i(o) {\n          r.has(e, o) ||\n            ((e[o] = !0),\n            n.push(o),\n            r.each(t.successors(o), i),\n            r.each(t.predecessors(o), i));\n        }\n        return (\n          r.each(t.nodes(), function (t) {\n            (n = []), i(t), n.length && o.push(n);\n          }),\n          o\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(155),\n        o = e(21);\n      t.exports = function (t, n, e) {\n        return o.transform(\n          t.nodes(),\n          function (o, i) {\n            o[i] = r(t, i, n, e);\n          },\n          {},\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(157);\n      t.exports = function (t) {\n        return r.filter(o(t), function (n) {\n          return n.length > 1 || (1 === n.length && t.hasEdge(n[0], n[0]));\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t, n, e) {\n        return (function (t, n, e) {\n          var r = {},\n            o = t.nodes();\n          return (\n            o.forEach(function (t) {\n              (r[t] = {}),\n                (r[t][t] = { distance: 0 }),\n                o.forEach(function (n) {\n                  t !== n && (r[t][n] = { distance: Number.POSITIVE_INFINITY });\n                }),\n                e(t).forEach(function (e) {\n                  var o = e.v === t ? e.w : e.v,\n                    i = n(e);\n                  r[t][o] = { distance: i, predecessor: t };\n                });\n            }),\n            o.forEach(function (t) {\n              var n = r[t];\n              o.forEach(function (e) {\n                var i = r[e];\n                o.forEach(function (e) {\n                  var r = i[t],\n                    o = n[e],\n                    u = i[e],\n                    c = r.distance + o.distance;\n                  c < u.distance &&\n                    ((u.distance = c), (u.predecessor = o.predecessor));\n                });\n              });\n            }),\n            r\n          );\n        })(\n          t,\n          n || o,\n          e ||\n            function (n) {\n              return t.outEdges(n);\n            },\n        );\n      };\n      var o = r.constant(1);\n    },\n    function (t, n, e) {\n      var r = e(158);\n      t.exports = function (t) {\n        try {\n          r(t);\n        } catch (t) {\n          if (t instanceof r.CycleException) return !1;\n          throw t;\n        }\n        return !0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(159);\n      t.exports = function (t, n) {\n        return r(t, n, \"post\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(159);\n      t.exports = function (t, n) {\n        return r(t, n, \"pre\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(85),\n        i = e(156);\n      t.exports = function (t, n) {\n        var e,\n          u = new o(),\n          c = {},\n          a = new i();\n        function f(t) {\n          var r = t.v === e ? t.w : t.v,\n            o = a.priority(r);\n          if (void 0 !== o) {\n            var i = n(t);\n            i < o && ((c[r] = e), a.decrease(r, i));\n          }\n        }\n        if (0 === t.nodeCount()) return u;\n        r.each(t.nodes(), function (t) {\n          a.add(t, Number.POSITIVE_INFINITY), u.setNode(t);\n        }),\n          a.decrease(t.nodes()[0], 0);\n        var s = !1;\n        for (; a.size() > 0; ) {\n          if (((e = a.removeMin()), r.has(c, e))) u.setEdge(e, c[e]);\n          else {\n            if (s) throw new Error(\"Input graph is not connected: \" + t);\n            s = !0;\n          }\n          t.nodeEdges(e).forEach(f);\n        }\n        return u;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(374),\n        i = e(377),\n        u = e(378),\n        c = e(19).normalizeRanks,\n        a = e(380),\n        f = e(19).removeEmptyRanks,\n        s = e(381),\n        p = e(382),\n        d = e(383),\n        h = e(384),\n        l = e(393),\n        v = e(19),\n        y = e(23).Graph;\n      t.exports = function (t, n) {\n        var e = n && n.debugTiming ? v.time : v.notime;\n        e(\"layout\", function () {\n          var n = e(\"  buildLayoutGraph\", function () {\n            return (function (t) {\n              var n = new y({ multigraph: !0, compound: !0 }),\n                e = S(t.graph());\n              return (\n                n.setGraph(r.merge({}, b, k(e, g), r.pick(e, m))),\n                r.forEach(t.nodes(), function (e) {\n                  var o = S(t.node(e));\n                  n.setNode(e, r.defaults(k(o, x), _)),\n                    n.setParent(e, t.parent(e));\n                }),\n                r.forEach(t.edges(), function (e) {\n                  var o = S(t.edge(e));\n                  n.setEdge(e, r.merge({}, E, k(o, w), r.pick(o, j)));\n                }),\n                n\n              );\n            })(t);\n          });\n          e(\"  runLayout\", function () {\n            !(function (t, n) {\n              n(\"    makeSpaceForEdgeLabels\", function () {\n                !(function (t) {\n                  var n = t.graph();\n                  (n.ranksep /= 2),\n                    r.forEach(t.edges(), function (e) {\n                      var r = t.edge(e);\n                      (r.minlen *= 2),\n                        \"c\" !== r.labelpos.toLowerCase() &&\n                          (\"TB\" === n.rankdir || \"BT\" === n.rankdir\n                            ? (r.width += r.labeloffset)\n                            : (r.height += r.labeloffset));\n                    });\n                })(t);\n              }),\n                n(\"    removeSelfEdges\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      if (n.v === n.w) {\n                        var e = t.node(n.v);\n                        e.selfEdges || (e.selfEdges = []),\n                          e.selfEdges.push({ e: n, label: t.edge(n) }),\n                          t.removeEdge(n);\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    acyclic\", function () {\n                  o.run(t);\n                }),\n                n(\"    nestingGraph.run\", function () {\n                  s.run(t);\n                }),\n                n(\"    rank\", function () {\n                  u(v.asNonCompoundGraph(t));\n                }),\n                n(\"    injectEdgeLabelProxies\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      if (e.width && e.height) {\n                        var r = t.node(n.v),\n                          o = {\n                            rank: (t.node(n.w).rank - r.rank) / 2 + r.rank,\n                            e: n,\n                          };\n                        v.addDummyNode(t, \"edge-proxy\", o, \"_ep\");\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    removeEmptyRanks\", function () {\n                  f(t);\n                }),\n                n(\"    nestingGraph.cleanup\", function () {\n                  s.cleanup(t);\n                }),\n                n(\"    normalizeRanks\", function () {\n                  c(t);\n                }),\n                n(\"    assignRankMinMax\", function () {\n                  !(function (t) {\n                    var n = 0;\n                    r.forEach(t.nodes(), function (e) {\n                      var o = t.node(e);\n                      o.borderTop &&\n                        ((o.minRank = t.node(o.borderTop).rank),\n                        (o.maxRank = t.node(o.borderBottom).rank),\n                        (n = r.max(n, o.maxRank)));\n                    }),\n                      (t.graph().maxRank = n);\n                  })(t);\n                }),\n                n(\"    removeEdgeLabelProxies\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      var e = t.node(n);\n                      \"edge-proxy\" === e.dummy &&\n                        ((t.edge(e.e).labelRank = e.rank), t.removeNode(n));\n                    });\n                  })(t);\n                }),\n                n(\"    normalize.run\", function () {\n                  i.run(t);\n                }),\n                n(\"    parentDummyChains\", function () {\n                  a(t);\n                }),\n                n(\"    addBorderSegments\", function () {\n                  p(t);\n                }),\n                n(\"    order\", function () {\n                  h(t);\n                }),\n                n(\"    insertSelfEdges\", function () {\n                  !(function (t) {\n                    var n = v.buildLayerMatrix(t);\n                    r.forEach(n, function (n) {\n                      var e = 0;\n                      r.forEach(n, function (n, o) {\n                        var i = t.node(n);\n                        (i.order = o + e),\n                          r.forEach(i.selfEdges, function (n) {\n                            v.addDummyNode(\n                              t,\n                              \"selfedge\",\n                              {\n                                width: n.label.width,\n                                height: n.label.height,\n                                rank: i.rank,\n                                order: o + ++e,\n                                e: n.e,\n                                label: n.label,\n                              },\n                              \"_se\",\n                            );\n                          }),\n                          delete i.selfEdges;\n                      });\n                    });\n                  })(t);\n                }),\n                n(\"    adjustCoordinateSystem\", function () {\n                  d.adjust(t);\n                }),\n                n(\"    position\", function () {\n                  l(t);\n                }),\n                n(\"    positionSelfEdges\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      var e = t.node(n);\n                      if (\"selfedge\" === e.dummy) {\n                        var r = t.node(e.e.v),\n                          o = r.x + r.width / 2,\n                          i = r.y,\n                          u = e.x - o,\n                          c = r.height / 2;\n                        t.setEdge(e.e, e.label),\n                          t.removeNode(n),\n                          (e.label.points = [\n                            { x: o + (2 * u) / 3, y: i - c },\n                            { x: o + (5 * u) / 6, y: i - c },\n                            { x: o + u, y: i },\n                            { x: o + (5 * u) / 6, y: i + c },\n                            { x: o + (2 * u) / 3, y: i + c },\n                          ]),\n                          (e.label.x = e.x),\n                          (e.label.y = e.y);\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    removeBorderNodes\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      if (t.children(n).length) {\n                        var e = t.node(n),\n                          o = t.node(e.borderTop),\n                          i = t.node(e.borderBottom),\n                          u = t.node(r.last(e.borderLeft)),\n                          c = t.node(r.last(e.borderRight));\n                        (e.width = Math.abs(c.x - u.x)),\n                          (e.height = Math.abs(i.y - o.y)),\n                          (e.x = u.x + e.width / 2),\n                          (e.y = o.y + e.height / 2);\n                      }\n                    }),\n                      r.forEach(t.nodes(), function (n) {\n                        \"border\" === t.node(n).dummy && t.removeNode(n);\n                      });\n                  })(t);\n                }),\n                n(\"    normalize.undo\", function () {\n                  i.undo(t);\n                }),\n                n(\"    fixupEdgeLabelCoords\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      if (r.has(e, \"x\"))\n                        switch (\n                          ((\"l\" !== e.labelpos && \"r\" !== e.labelpos) ||\n                            (e.width -= e.labeloffset),\n                          e.labelpos)\n                        ) {\n                          case \"l\":\n                            e.x -= e.width / 2 + e.labeloffset;\n                            break;\n                          case \"r\":\n                            e.x += e.width / 2 + e.labeloffset;\n                        }\n                    });\n                  })(t);\n                }),\n                n(\"    undoCoordinateSystem\", function () {\n                  d.undo(t);\n                }),\n                n(\"    translateGraph\", function () {\n                  !(function (t) {\n                    var n = Number.POSITIVE_INFINITY,\n                      e = 0,\n                      o = Number.POSITIVE_INFINITY,\n                      i = 0,\n                      u = t.graph(),\n                      c = u.marginx || 0,\n                      a = u.marginy || 0;\n                    function f(t) {\n                      var r = t.x,\n                        u = t.y,\n                        c = t.width,\n                        a = t.height;\n                      (n = Math.min(n, r - c / 2)),\n                        (e = Math.max(e, r + c / 2)),\n                        (o = Math.min(o, u - a / 2)),\n                        (i = Math.max(i, u + a / 2));\n                    }\n                    r.forEach(t.nodes(), function (n) {\n                      f(t.node(n));\n                    }),\n                      r.forEach(t.edges(), function (n) {\n                        var e = t.edge(n);\n                        r.has(e, \"x\") && f(e);\n                      }),\n                      (n -= c),\n                      (o -= a),\n                      r.forEach(t.nodes(), function (e) {\n                        var r = t.node(e);\n                        (r.x -= n), (r.y -= o);\n                      }),\n                      r.forEach(t.edges(), function (e) {\n                        var i = t.edge(e);\n                        r.forEach(i.points, function (t) {\n                          (t.x -= n), (t.y -= o);\n                        }),\n                          r.has(i, \"x\") && (i.x -= n),\n                          r.has(i, \"y\") && (i.y -= o);\n                      }),\n                      (u.width = e - n + c),\n                      (u.height = i - o + a);\n                  })(t);\n                }),\n                n(\"    assignNodeIntersects\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e,\n                        r,\n                        o = t.edge(n),\n                        i = t.node(n.v),\n                        u = t.node(n.w);\n                      o.points\n                        ? ((e = o.points[0]),\n                          (r = o.points[o.points.length - 1]))\n                        : ((o.points = []), (e = u), (r = i)),\n                        o.points.unshift(v.intersectRect(i, e)),\n                        o.points.push(v.intersectRect(u, r));\n                    });\n                  })(t);\n                }),\n                n(\"    reversePoints\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      e.reversed && e.points.reverse();\n                    });\n                  })(t);\n                }),\n                n(\"    acyclic.undo\", function () {\n                  o.undo(t);\n                });\n            })(n, e);\n          }),\n            e(\"  updateInputGraph\", function () {\n              !(function (t, n) {\n                r.forEach(t.nodes(), function (e) {\n                  var r = t.node(e),\n                    o = n.node(e);\n                  r &&\n                    ((r.x = o.x),\n                    (r.y = o.y),\n                    n.children(e).length &&\n                      ((r.width = o.width), (r.height = o.height)));\n                }),\n                  r.forEach(t.edges(), function (e) {\n                    var o = t.edge(e),\n                      i = n.edge(e);\n                    (o.points = i.points),\n                      r.has(i, \"x\") && ((o.x = i.x), (o.y = i.y));\n                  }),\n                  (t.graph().width = n.graph().width),\n                  (t.graph().height = n.graph().height);\n              })(t, n);\n            });\n        });\n      };\n      var g = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"],\n        b = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" },\n        m = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"],\n        x = [\"width\", \"height\"],\n        _ = { width: 0, height: 0 },\n        w = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"],\n        E = {\n          minlen: 1,\n          weight: 1,\n          width: 0,\n          height: 0,\n          labeloffset: 10,\n          labelpos: \"r\",\n        },\n        j = [\"labelpos\"];\n      function k(t, n) {\n        return r.mapValues(r.pick(t, n), Number);\n      }\n      function S(t) {\n        var n = {};\n        return (\n          r.forEach(t, function (t, e) {\n            n[e.toLowerCase()] = t;\n          }),\n          n\n        );\n      }\n    },\n    function (t, n, e) {\n      var r = e(113);\n      t.exports = function (t) {\n        return r(t, 5);\n      };\n    },\n    function (t, n, e) {\n      var r = e(73),\n        o = e(41),\n        i = e(74),\n        u = e(37),\n        c = Object.prototype,\n        a = c.hasOwnProperty,\n        f = r(function (t, n) {\n          t = Object(t);\n          var e = -1,\n            r = n.length,\n            f = r > 2 ? n[2] : void 0;\n          for (f && i(n[0], n[1], f) && (r = 1); ++e < r; )\n            for (var s = n[e], p = u(s), d = -1, h = p.length; ++d < h; ) {\n              var l = p[d],\n                v = t[l];\n              (void 0 === v || (o(v, c[l]) && !a.call(t, l))) && (t[l] = s[l]);\n            }\n          return t;\n        });\n      t.exports = f;\n    },\n    function (t, n, e) {\n      var r = e(338)(e(339));\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(31),\n        o = e(30),\n        i = e(33);\n      t.exports = function (t) {\n        return function (n, e, u) {\n          var c = Object(n);\n          if (!o(n)) {\n            var a = r(e, 3);\n            (n = i(n)),\n              (e = function (t) {\n                return a(c[t], t, c);\n              });\n          }\n          var f = t(n, e, u);\n          return f > -1 ? c[a ? n[f] : f] : void 0;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(152),\n        o = e(31),\n        i = e(340),\n        u = Math.max;\n      t.exports = function (t, n, e) {\n        var c = null == t ? 0 : t.length;\n        if (!c) return -1;\n        var a = null == e ? 0 : i(e);\n        return a < 0 && (a = u(c + a, 0)), r(t, o(n, 3), a);\n      };\n    },\n    function (t, n, e) {\n      var r = e(160);\n      t.exports = function (t) {\n        var n = r(t),\n          e = n % 1;\n        return n == n ? (e ? n - e : n) : 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(342),\n        o = e(22),\n        i = e(45),\n        u = /^[-+]0x[0-9a-f]+$/i,\n        c = /^0b[01]+$/i,\n        a = /^0o[0-7]+$/i,\n        f = parseInt;\n      t.exports = function (t) {\n        if (\"number\" == typeof t) return t;\n        if (i(t)) return NaN;\n        if (o(t)) {\n          var n = \"function\" == typeof t.valueOf ? t.valueOf() : t;\n          t = o(n) ? n + \"\" : n;\n        }\n        if (\"string\" != typeof t) return 0 === t ? t : +t;\n        t = r(t);\n        var e = c.test(t);\n        return e || a.test(t) ? f(t.slice(2), e ? 2 : 8) : u.test(t) ? NaN : +t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(343),\n        o = /^\\s+/;\n      t.exports = function (t) {\n        return t ? t.slice(0, r(t) + 1).replace(o, \"\") : t;\n      };\n    },\n    function (t, n) {\n      var e = /\\s/;\n      t.exports = function (t) {\n        for (var n = t.length; n-- && e.test(t.charAt(n)); );\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(97),\n        o = e(133),\n        i = e(37);\n      t.exports = function (t, n) {\n        return null == t ? t : r(t, o(n), i);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = null == t ? 0 : t.length;\n        return n ? t[n - 1] : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(64),\n        o = e(96),\n        i = e(31);\n      t.exports = function (t, n) {\n        var e = {};\n        return (\n          (n = i(n, 3)),\n          o(t, function (t, o, i) {\n            r(e, o, n(t, o, i));\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(101),\n        o = e(348),\n        i = e(38);\n      t.exports = function (t) {\n        return t && t.length ? r(t, i, o) : void 0;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t > n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(350),\n        o = e(354)(function (t, n, e) {\n          r(t, n, e);\n        });\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(58),\n        o = e(162),\n        i = e(97),\n        u = e(351),\n        c = e(22),\n        a = e(37),\n        f = e(163);\n      t.exports = function t(n, e, s, p, d) {\n        n !== e &&\n          i(\n            e,\n            function (i, a) {\n              if ((d || (d = new r()), c(i))) u(n, e, a, s, t, p, d);\n              else {\n                var h = p ? p(f(n, a), i, a + \"\", n, e, d) : void 0;\n                void 0 === h && (h = i), o(n, a, h);\n              }\n            },\n            a,\n          );\n      };\n    },\n    function (t, n, e) {\n      var r = e(162),\n        o = e(119),\n        i = e(128),\n        u = e(120),\n        c = e(129),\n        a = e(53),\n        f = e(17),\n        s = e(153),\n        p = e(43),\n        d = e(51),\n        h = e(22),\n        l = e(352),\n        v = e(54),\n        y = e(163),\n        g = e(353);\n      t.exports = function (t, n, e, b, m, x, _) {\n        var w = y(t, e),\n          E = y(n, e),\n          j = _.get(E);\n        if (j) r(t, e, j);\n        else {\n          var k = x ? x(w, E, e + \"\", t, n, _) : void 0,\n            S = void 0 === k;\n          if (S) {\n            var O = f(E),\n              N = !O && p(E),\n              I = !O && !N && v(E);\n            (k = E),\n              O || N || I\n                ? f(w)\n                  ? (k = w)\n                  : s(w)\n                  ? (k = u(w))\n                  : N\n                  ? ((S = !1), (k = o(E, !0)))\n                  : I\n                  ? ((S = !1), (k = i(E, !0)))\n                  : (k = [])\n                : l(E) || a(E)\n                ? ((k = w), a(w) ? (k = g(w)) : (h(w) && !d(w)) || (k = c(E)))\n                : (S = !1);\n          }\n          S && (_.set(E, k), m(k, E, b, x, _), _.delete(E)), r(t, e, k);\n        }\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(68),\n        i = e(26),\n        u = Function.prototype,\n        c = Object.prototype,\n        a = u.toString,\n        f = c.hasOwnProperty,\n        s = a.call(Object);\n      t.exports = function (t) {\n        if (!i(t) || \"[object Object]\" != r(t)) return !1;\n        var n = o(t);\n        if (null === n) return !0;\n        var e = f.call(n, \"constructor\") && n.constructor;\n        return \"function\" == typeof e && e instanceof e && a.call(e) == s;\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(37);\n      t.exports = function (t) {\n        return r(t, o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(73),\n        o = e(74);\n      t.exports = function (t) {\n        return r(function (n, e) {\n          var r = -1,\n            i = e.length,\n            u = i > 1 ? e[i - 1] : void 0,\n            c = i > 2 ? e[2] : void 0;\n          for (\n            u = t.length > 3 && \"function\" == typeof u ? (i--, u) : void 0,\n              c && o(e[0], e[1], c) && ((u = i < 3 ? void 0 : u), (i = 1)),\n              n = Object(n);\n            ++r < i;\n\n          ) {\n            var a = e[r];\n            a && t(n, a, r, u);\n          }\n          return n;\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(101),\n        o = e(164),\n        i = e(38);\n      t.exports = function (t) {\n        return t && t.length ? r(t, i, o) : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(101),\n        o = e(31),\n        i = e(164);\n      t.exports = function (t, n) {\n        return t && t.length ? r(t, o(n, 2), i) : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(24);\n      t.exports = function () {\n        return r.Date.now();\n      };\n    },\n    function (t, n, e) {\n      var r = e(359),\n        o = e(362)(function (t, n) {\n          return null == t ? {} : r(t, n);\n        });\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(360),\n        o = e(142);\n      t.exports = function (t, n) {\n        return r(t, n, function (n, e) {\n          return o(t, e);\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(70),\n        o = e(361),\n        i = e(71);\n      t.exports = function (t, n, e) {\n        for (var u = -1, c = n.length, a = {}; ++u < c; ) {\n          var f = n[u],\n            s = r(t, f);\n          e(s, f) && o(a, i(f, t), s);\n        }\n        return a;\n      };\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(71),\n        i = e(65),\n        u = e(22),\n        c = e(55);\n      t.exports = function (t, n, e, a) {\n        if (!u(t)) return t;\n        for (\n          var f = -1, s = (n = o(n, t)).length, p = s - 1, d = t;\n          null != d && ++f < s;\n\n        ) {\n          var h = c(n[f]),\n            l = e;\n          if (\"__proto__\" === h || \"constructor\" === h || \"prototype\" === h)\n            return t;\n          if (f != p) {\n            var v = d[h];\n            void 0 === (l = a ? a(v, h, d) : void 0) &&\n              (l = u(v) ? v : i(n[f + 1]) ? [] : {});\n          }\n          r(d, h, l), (d = d[h]);\n        }\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(161),\n        o = e(150),\n        i = e(151);\n      t.exports = function (t) {\n        return i(o(t, void 0, r), t + \"\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(364)();\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(365),\n        o = e(74),\n        i = e(160);\n      t.exports = function (t) {\n        return function (n, e, u) {\n          return (\n            u && \"number\" != typeof u && o(n, e, u) && (e = u = void 0),\n            (n = i(n)),\n            void 0 === e ? ((e = n), (n = 0)) : (e = i(e)),\n            (u = void 0 === u ? (n < e ? 1 : -1) : i(u)),\n            r(n, e, u, t)\n          );\n        };\n      };\n    },\n    function (t, n) {\n      var e = Math.ceil,\n        r = Math.max;\n      t.exports = function (t, n, o, i) {\n        for (var u = -1, c = r(e((n - t) / (o || 1)), 0), a = Array(c); c--; )\n          (a[i ? c : ++u] = t), (t += o);\n        return a;\n      };\n    },\n    function (t, n, e) {\n      var r = e(100),\n        o = e(367),\n        i = e(73),\n        u = e(74),\n        c = i(function (t, n) {\n          if (null == t) return [];\n          var e = n.length;\n          return (\n            e > 1 && u(t, n[0], n[1])\n              ? (n = [])\n              : e > 2 && u(n[0], n[1], n[2]) && (n = [n[0]]),\n            o(t, r(n, 1), [])\n          );\n        });\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(72),\n        o = e(70),\n        i = e(31),\n        u = e(148),\n        c = e(368),\n        a = e(66),\n        f = e(369),\n        s = e(38),\n        p = e(17);\n      t.exports = function (t, n, e) {\n        n = n.length\n          ? r(n, function (t) {\n              return p(t)\n                ? function (n) {\n                    return o(n, 1 === t.length ? t[0] : t);\n                  }\n                : t;\n            })\n          : [s];\n        var d = -1;\n        n = r(n, a(i));\n        var h = u(t, function (t, e, o) {\n          return {\n            criteria: r(n, function (n) {\n              return n(t);\n            }),\n            index: ++d,\n            value: t,\n          };\n        });\n        return c(h, function (t, n) {\n          return f(t, n, e);\n        });\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        var e = t.length;\n        for (t.sort(n); e--; ) t[e] = t[e].value;\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(370);\n      t.exports = function (t, n, e) {\n        for (\n          var o = -1,\n            i = t.criteria,\n            u = n.criteria,\n            c = i.length,\n            a = e.length;\n          ++o < c;\n\n        ) {\n          var f = r(i[o], u[o]);\n          if (f) return o >= a ? f : f * (\"desc\" == e[o] ? -1 : 1);\n        }\n        return t.index - n.index;\n      };\n    },\n    function (t, n, e) {\n      var r = e(45);\n      t.exports = function (t, n) {\n        if (t !== n) {\n          var e = void 0 !== t,\n            o = null === t,\n            i = t == t,\n            u = r(t),\n            c = void 0 !== n,\n            a = null === n,\n            f = n == n,\n            s = r(n);\n          if (\n            (!a && !s && !u && t > n) ||\n            (u && c && f && !a && !s) ||\n            (o && c && f) ||\n            (!e && f) ||\n            !i\n          )\n            return 1;\n          if (\n            (!o && !u && !s && t < n) ||\n            (s && e && i && !o && !u) ||\n            (a && e && i) ||\n            (!c && i) ||\n            !f\n          )\n            return -1;\n        }\n        return 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(141),\n        o = 0;\n      t.exports = function (t) {\n        var n = ++o;\n        return r(t) + n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(373);\n      t.exports = function (t, n) {\n        return o(t || [], n || [], r);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = -1, o = t.length, i = n.length, u = {}; ++r < o; ) {\n          var c = r < i ? n[r] : void 0;\n          e(u, t[r], c);\n        }\n        return u;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(375);\n      t.exports = {\n        run: function (t) {\n          var n =\n            \"greedy\" === t.graph().acyclicer\n              ? o(\n                  t,\n                  (function (t) {\n                    return function (n) {\n                      return t.edge(n).weight;\n                    };\n                  })(t),\n                )\n              : (function (t) {\n                  var n = [],\n                    e = {},\n                    o = {};\n                  function i(u) {\n                    r.has(o, u) ||\n                      ((o[u] = !0),\n                      (e[u] = !0),\n                      r.forEach(t.outEdges(u), function (t) {\n                        r.has(e, t.w) ? n.push(t) : i(t.w);\n                      }),\n                      delete e[u]);\n                  }\n                  return r.forEach(t.nodes(), i), n;\n                })(t);\n          r.forEach(n, function (n) {\n            var e = t.edge(n);\n            t.removeEdge(n),\n              (e.forwardName = n.name),\n              (e.reversed = !0),\n              t.setEdge(n.w, n.v, e, r.uniqueId(\"rev\"));\n          });\n        },\n        undo: function (t) {\n          r.forEach(t.edges(), function (n) {\n            var e = t.edge(n);\n            if (e.reversed) {\n              t.removeEdge(n);\n              var r = e.forwardName;\n              delete e.reversed,\n                delete e.forwardName,\n                t.setEdge(n.w, n.v, e, r);\n            }\n          });\n        },\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(23).Graph,\n        i = e(376);\n      t.exports = function (t, n) {\n        if (t.nodeCount() <= 1) return [];\n        var e = (function (t, n) {\n            var e = new o(),\n              u = 0,\n              c = 0;\n            r.forEach(t.nodes(), function (t) {\n              e.setNode(t, { v: t, in: 0, out: 0 });\n            }),\n              r.forEach(t.edges(), function (t) {\n                var r = e.edge(t.v, t.w) || 0,\n                  o = n(t),\n                  i = r + o;\n                e.setEdge(t.v, t.w, i),\n                  (c = Math.max(c, (e.node(t.v).out += o))),\n                  (u = Math.max(u, (e.node(t.w).in += o)));\n              });\n            var f = r.range(c + u + 3).map(function () {\n                return new i();\n              }),\n              s = u + 1;\n            return (\n              r.forEach(e.nodes(), function (t) {\n                a(f, s, e.node(t));\n              }),\n              { graph: e, buckets: f, zeroIdx: s }\n            );\n          })(t, n || u),\n          f = (function (t, n, e) {\n            var r,\n              o = [],\n              i = n[n.length - 1],\n              u = n[0];\n            for (; t.nodeCount(); ) {\n              for (; (r = u.dequeue()); ) c(t, n, e, r);\n              for (; (r = i.dequeue()); ) c(t, n, e, r);\n              if (t.nodeCount())\n                for (var a = n.length - 2; a > 0; --a)\n                  if ((r = n[a].dequeue())) {\n                    o = o.concat(c(t, n, e, r, !0));\n                    break;\n                  }\n            }\n            return o;\n          })(e.graph, e.buckets, e.zeroIdx);\n        return r.flatten(\n          r.map(f, function (n) {\n            return t.outEdges(n.v, n.w);\n          }),\n          !0,\n        );\n      };\n      var u = r.constant(1);\n      function c(t, n, e, o, i) {\n        var u = i ? [] : void 0;\n        return (\n          r.forEach(t.inEdges(o.v), function (r) {\n            var o = t.edge(r),\n              c = t.node(r.v);\n            i && u.push({ v: r.v, w: r.w }), (c.out -= o), a(n, e, c);\n          }),\n          r.forEach(t.outEdges(o.v), function (r) {\n            var o = t.edge(r),\n              i = r.w,\n              u = t.node(i);\n            (u.in -= o), a(n, e, u);\n          }),\n          t.removeNode(o.v),\n          u\n        );\n      }\n      function a(t, n, e) {\n        e.out\n          ? e.in\n            ? t[e.out - e.in + n].enqueue(e)\n            : t[t.length - 1].enqueue(e)\n          : t[0].enqueue(e);\n      }\n    },\n    function (t, n) {\n      function e() {\n        var t = {};\n        (t._next = t._prev = t), (this._sentinel = t);\n      }\n      function r(t) {\n        (t._prev._next = t._next),\n          (t._next._prev = t._prev),\n          delete t._next,\n          delete t._prev;\n      }\n      function o(t, n) {\n        if (\"_next\" !== t && \"_prev\" !== t) return n;\n      }\n      (t.exports = e),\n        (e.prototype.dequeue = function () {\n          var t = this._sentinel,\n            n = t._prev;\n          if (n !== t) return r(n), n;\n        }),\n        (e.prototype.enqueue = function (t) {\n          var n = this._sentinel;\n          t._prev && t._next && r(t),\n            (t._next = n._next),\n            (n._next._prev = t),\n            (n._next = t),\n            (t._prev = n);\n        }),\n        (e.prototype.toString = function () {\n          for (var t = [], n = this._sentinel, e = n._prev; e !== n; )\n            t.push(JSON.stringify(e, o)), (e = e._prev);\n          return \"[\" + t.join(\", \") + \"]\";\n        });\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(19);\n      t.exports = {\n        run: function (t) {\n          (t.graph().dummyChains = []),\n            r.forEach(t.edges(), function (n) {\n              !(function (t, n) {\n                var e,\n                  r,\n                  i,\n                  u = n.v,\n                  c = t.node(u).rank,\n                  a = n.w,\n                  f = t.node(a).rank,\n                  s = n.name,\n                  p = t.edge(n),\n                  d = p.labelRank;\n                if (f === c + 1) return;\n                for (t.removeEdge(n), i = 0, ++c; c < f; ++i, ++c)\n                  (p.points = []),\n                    (r = {\n                      width: 0,\n                      height: 0,\n                      edgeLabel: p,\n                      edgeObj: n,\n                      rank: c,\n                    }),\n                    (e = o.addDummyNode(t, \"edge\", r, \"_d\")),\n                    c === d &&\n                      ((r.width = p.width),\n                      (r.height = p.height),\n                      (r.dummy = \"edge-label\"),\n                      (r.labelpos = p.labelpos)),\n                    t.setEdge(u, e, { weight: p.weight }, s),\n                    0 === i && t.graph().dummyChains.push(e),\n                    (u = e);\n                t.setEdge(u, a, { weight: p.weight }, s);\n              })(t, n);\n            });\n        },\n        undo: function (t) {\n          r.forEach(t.graph().dummyChains, function (n) {\n            var e,\n              r = t.node(n),\n              o = r.edgeLabel;\n            for (t.setEdge(r.edgeObj, o); r.dummy; )\n              (e = t.successors(n)[0]),\n                t.removeNode(n),\n                o.points.push({ x: r.x, y: r.y }),\n                \"edge-label\" === r.dummy &&\n                  ((o.x = r.x),\n                  (o.y = r.y),\n                  (o.width = r.width),\n                  (o.height = r.height)),\n                (n = e),\n                (r = t.node(n));\n          });\n        },\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(75).longestPath,\n        o = e(165),\n        i = e(379);\n      t.exports = function (t) {\n        switch (t.graph().ranker) {\n          case \"network-simplex\":\n            c(t);\n            break;\n          case \"tight-tree\":\n            !(function (t) {\n              r(t), o(t);\n            })(t);\n            break;\n          case \"longest-path\":\n            u(t);\n            break;\n          default:\n            c(t);\n        }\n      };\n      var u = r;\n      function c(t) {\n        i(t);\n      }\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(165),\n        i = e(75).slack,\n        u = e(75).longestPath,\n        c = e(23).alg.preorder,\n        a = e(23).alg.postorder,\n        f = e(19).simplify;\n      function s(t) {\n        (t = f(t)), u(t);\n        var n,\n          e = o(t);\n        for (h(e), p(e, t); (n = v(e)); ) g(e, t, n, y(e, t, n));\n      }\n      function p(t, n) {\n        var e = a(t, t.nodes());\n        (e = e.slice(0, e.length - 1)),\n          r.forEach(e, function (e) {\n            !(function (t, n, e) {\n              var r = t.node(e).parent;\n              t.edge(e, r).cutvalue = d(t, n, e);\n            })(t, n, e);\n          });\n      }\n      function d(t, n, e) {\n        var o = t.node(e).parent,\n          i = !0,\n          u = n.edge(e, o),\n          c = 0;\n        return (\n          u || ((i = !1), (u = n.edge(o, e))),\n          (c = u.weight),\n          r.forEach(n.nodeEdges(e), function (r) {\n            var u,\n              a,\n              f = r.v === e,\n              s = f ? r.w : r.v;\n            if (s !== o) {\n              var p = f === i,\n                d = n.edge(r).weight;\n              if (((c += p ? d : -d), (u = e), (a = s), t.hasEdge(u, a))) {\n                var h = t.edge(e, s).cutvalue;\n                c += p ? -h : h;\n              }\n            }\n          }),\n          c\n        );\n      }\n      function h(t, n) {\n        arguments.length < 2 && (n = t.nodes()[0]), l(t, {}, 1, n);\n      }\n      function l(t, n, e, o, i) {\n        var u = e,\n          c = t.node(o);\n        return (\n          (n[o] = !0),\n          r.forEach(t.neighbors(o), function (i) {\n            r.has(n, i) || (e = l(t, n, e, i, o));\n          }),\n          (c.low = u),\n          (c.lim = e++),\n          i ? (c.parent = i) : delete c.parent,\n          e\n        );\n      }\n      function v(t) {\n        return r.find(t.edges(), function (n) {\n          return t.edge(n).cutvalue < 0;\n        });\n      }\n      function y(t, n, e) {\n        var o = e.v,\n          u = e.w;\n        n.hasEdge(o, u) || ((o = e.w), (u = e.v));\n        var c = t.node(o),\n          a = t.node(u),\n          f = c,\n          s = !1;\n        c.lim > a.lim && ((f = a), (s = !0));\n        var p = r.filter(n.edges(), function (n) {\n          return s === b(t, t.node(n.v), f) && s !== b(t, t.node(n.w), f);\n        });\n        return r.minBy(p, function (t) {\n          return i(n, t);\n        });\n      }\n      function g(t, n, e, o) {\n        var i = e.v,\n          u = e.w;\n        t.removeEdge(i, u),\n          t.setEdge(o.v, o.w, {}),\n          h(t),\n          p(t, n),\n          (function (t, n) {\n            var e = r.find(t.nodes(), function (t) {\n                return !n.node(t).parent;\n              }),\n              o = c(t, e);\n            (o = o.slice(1)),\n              r.forEach(o, function (e) {\n                var r = t.node(e).parent,\n                  o = n.edge(e, r),\n                  i = !1;\n                o || ((o = n.edge(r, e)), (i = !0)),\n                  (n.node(e).rank =\n                    n.node(r).rank + (i ? o.minlen : -o.minlen));\n              });\n          })(t, n);\n      }\n      function b(t, n, e) {\n        return e.low <= n.lim && n.lim <= e.lim;\n      }\n      (t.exports = s),\n        (s.initLowLimValues = h),\n        (s.initCutValues = p),\n        (s.calcCutValue = d),\n        (s.leaveEdge = v),\n        (s.enterEdge = y),\n        (s.exchangeEdges = g);\n    },\n    function (t, n, e) {\n      var r = e(9);\n      t.exports = function (t) {\n        var n = (function (t) {\n          var n = {},\n            e = 0;\n          function o(i) {\n            var u = e;\n            r.forEach(t.children(i), o), (n[i] = { low: u, lim: e++ });\n          }\n          return r.forEach(t.children(), o), n;\n        })(t);\n        r.forEach(t.graph().dummyChains, function (e) {\n          for (\n            var r = t.node(e),\n              o = r.edgeObj,\n              i = (function (t, n, e, r) {\n                var o,\n                  i,\n                  u = [],\n                  c = [],\n                  a = Math.min(n[e].low, n[r].low),\n                  f = Math.max(n[e].lim, n[r].lim);\n                o = e;\n                do {\n                  (o = t.parent(o)), u.push(o);\n                } while (o && (n[o].low > a || f > n[o].lim));\n                (i = o), (o = r);\n                for (; (o = t.parent(o)) !== i; ) c.push(o);\n                return { path: u.concat(c.reverse()), lca: i };\n              })(t, n, o.v, o.w),\n              u = i.path,\n              c = i.lca,\n              a = 0,\n              f = u[a],\n              s = !0;\n            e !== o.w;\n\n          ) {\n            if (((r = t.node(e)), s)) {\n              for (; (f = u[a]) !== c && t.node(f).maxRank < r.rank; ) a++;\n              f === c && (s = !1);\n            }\n            if (!s) {\n              for (\n                ;\n                a < u.length - 1 && t.node((f = u[a + 1])).minRank <= r.rank;\n\n              )\n                a++;\n              f = u[a];\n            }\n            t.setParent(e, f), (e = t.successors(e)[0]);\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19);\n      t.exports = {\n        run: function (t) {\n          var n = o.addDummyNode(t, \"root\", {}, \"_root\"),\n            e = (function (t) {\n              var n = {};\n              return (\n                r.forEach(t.children(), function (e) {\n                  !(function e(o, i) {\n                    var u = t.children(o);\n                    u &&\n                      u.length &&\n                      r.forEach(u, function (t) {\n                        e(t, i + 1);\n                      });\n                    n[o] = i;\n                  })(e, 1);\n                }),\n                n\n              );\n            })(t),\n            i = r.max(r.values(e)) - 1,\n            u = 2 * i + 1;\n          (t.graph().nestingRoot = n),\n            r.forEach(t.edges(), function (n) {\n              t.edge(n).minlen *= u;\n            });\n          var c =\n            (function (t) {\n              return r.reduce(\n                t.edges(),\n                function (n, e) {\n                  return n + t.edge(e).weight;\n                },\n                0,\n              );\n            })(t) + 1;\n          r.forEach(t.children(), function (a) {\n            !(function t(n, e, i, u, c, a, f) {\n              var s = n.children(f);\n              if (!s.length)\n                return void (\n                  f !== e && n.setEdge(e, f, { weight: 0, minlen: i })\n                );\n              var p = o.addBorderNode(n, \"_bt\"),\n                d = o.addBorderNode(n, \"_bb\"),\n                h = n.node(f);\n              n.setParent(p, f),\n                (h.borderTop = p),\n                n.setParent(d, f),\n                (h.borderBottom = d),\n                r.forEach(s, function (r) {\n                  t(n, e, i, u, c, a, r);\n                  var o = n.node(r),\n                    s = o.borderTop ? o.borderTop : r,\n                    h = o.borderBottom ? o.borderBottom : r,\n                    l = o.borderTop ? u : 2 * u,\n                    v = s !== h ? 1 : c - a[f] + 1;\n                  n.setEdge(p, s, { weight: l, minlen: v, nestingEdge: !0 }),\n                    n.setEdge(h, d, { weight: l, minlen: v, nestingEdge: !0 });\n                }),\n                n.parent(f) || n.setEdge(e, p, { weight: 0, minlen: c + a[f] });\n            })(t, n, u, c, i, e, a);\n          }),\n            (t.graph().nodeRankFactor = u);\n        },\n        cleanup: function (t) {\n          var n = t.graph();\n          t.removeNode(n.nestingRoot),\n            delete n.nestingRoot,\n            r.forEach(t.edges(), function (n) {\n              t.edge(n).nestingEdge && t.removeEdge(n);\n            });\n        },\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19);\n      function i(t, n, e, r, i, u) {\n        var c = { width: 0, height: 0, rank: u, borderType: n },\n          a = i[n][u - 1],\n          f = o.addDummyNode(t, \"border\", c, e);\n        (i[n][u] = f), t.setParent(f, r), a && t.setEdge(a, f, { weight: 1 });\n      }\n      t.exports = function (t) {\n        r.forEach(t.children(), function n(e) {\n          var o = t.children(e),\n            u = t.node(e);\n          if ((o.length && r.forEach(o, n), r.has(u, \"minRank\"))) {\n            (u.borderLeft = []), (u.borderRight = []);\n            for (var c = u.minRank, a = u.maxRank + 1; c < a; ++c)\n              i(t, \"borderLeft\", \"_bl\", e, u, c),\n                i(t, \"borderRight\", \"_br\", e, u, c);\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      function o(t) {\n        r.forEach(t.nodes(), function (n) {\n          i(t.node(n));\n        }),\n          r.forEach(t.edges(), function (n) {\n            i(t.edge(n));\n          });\n      }\n      function i(t) {\n        var n = t.width;\n        (t.width = t.height), (t.height = n);\n      }\n      function u(t) {\n        t.y = -t.y;\n      }\n      function c(t) {\n        var n = t.x;\n        (t.x = t.y), (t.y = n);\n      }\n      t.exports = {\n        adjust: function (t) {\n          var n = t.graph().rankdir.toLowerCase();\n          (\"lr\" !== n && \"rl\" !== n) || o(t);\n        },\n        undo: function (t) {\n          var n = t.graph().rankdir.toLowerCase();\n          (\"bt\" !== n && \"rl\" !== n) ||\n            (function (t) {\n              r.forEach(t.nodes(), function (n) {\n                u(t.node(n));\n              }),\n                r.forEach(t.edges(), function (n) {\n                  var e = t.edge(n);\n                  r.forEach(e.points, u), r.has(e, \"y\") && u(e);\n                });\n            })(t);\n          (\"lr\" !== n && \"rl\" !== n) ||\n            (!(function (t) {\n              r.forEach(t.nodes(), function (n) {\n                c(t.node(n));\n              }),\n                r.forEach(t.edges(), function (n) {\n                  var e = t.edge(n);\n                  r.forEach(e.points, c), r.has(e, \"x\") && c(e);\n                });\n            })(t),\n            o(t));\n        },\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(385),\n        i = e(386),\n        u = e(387),\n        c = e(391),\n        a = e(392),\n        f = e(23).Graph,\n        s = e(19);\n      function p(t, n, e) {\n        return r.map(n, function (n) {\n          return c(t, n, e);\n        });\n      }\n      function d(t, n) {\n        var e = new f();\n        r.forEach(t, function (t) {\n          var o = t.graph().root,\n            i = u(t, o, e, n);\n          r.forEach(i.vs, function (n, e) {\n            t.node(n).order = e;\n          }),\n            a(t, e, i.vs);\n        });\n      }\n      function h(t, n) {\n        r.forEach(n, function (n) {\n          r.forEach(n, function (n, e) {\n            t.node(n).order = e;\n          });\n        });\n      }\n      t.exports = function (t) {\n        var n = s.maxRank(t),\n          e = p(t, r.range(1, n + 1), \"inEdges\"),\n          u = p(t, r.range(n - 1, -1, -1), \"outEdges\"),\n          c = o(t);\n        h(t, c);\n        for (\n          var a, f = Number.POSITIVE_INFINITY, l = 0, v = 0;\n          v < 4;\n          ++l, ++v\n        ) {\n          d(l % 2 ? e : u, l % 4 >= 2), (c = s.buildLayerMatrix(t));\n          var y = i(t, c);\n          y < f && ((v = 0), (a = r.cloneDeep(c)), (f = y));\n        }\n        h(t, a);\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      t.exports = function (t) {\n        var n = {},\n          e = r.filter(t.nodes(), function (n) {\n            return !t.children(n).length;\n          }),\n          o = r.max(\n            r.map(e, function (n) {\n              return t.node(n).rank;\n            }),\n          ),\n          i = r.map(r.range(o + 1), function () {\n            return [];\n          });\n        var u = r.sortBy(e, function (n) {\n          return t.node(n).rank;\n        });\n        return (\n          r.forEach(u, function e(o) {\n            if (r.has(n, o)) return;\n            n[o] = !0;\n            var u = t.node(o);\n            i[u.rank].push(o), r.forEach(t.successors(o), e);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      function o(t, n, e) {\n        for (\n          var o = r.zipObject(\n              e,\n              r.map(e, function (t, n) {\n                return n;\n              }),\n            ),\n            i = r.flatten(\n              r.map(n, function (n) {\n                return r.sortBy(\n                  r.map(t.outEdges(n), function (n) {\n                    return { pos: o[n.w], weight: t.edge(n).weight };\n                  }),\n                  \"pos\",\n                );\n              }),\n              !0,\n            ),\n            u = 1;\n          u < e.length;\n\n        )\n          u <<= 1;\n        var c = 2 * u - 1;\n        u -= 1;\n        var a = r.map(new Array(c), function () {\n            return 0;\n          }),\n          f = 0;\n        return (\n          r.forEach(\n            i.forEach(function (t) {\n              var n = t.pos + u;\n              a[n] += t.weight;\n              for (var e = 0; n > 0; )\n                n % 2 && (e += a[n + 1]), (a[(n = (n - 1) >> 1)] += t.weight);\n              f += t.weight * e;\n            }),\n          ),\n          f\n        );\n      }\n      t.exports = function (t, n) {\n        for (var e = 0, r = 1; r < n.length; ++r) e += o(t, n[r - 1], n[r]);\n        return e;\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(388),\n        i = e(389),\n        u = e(390);\n      t.exports = function t(n, e, c, a) {\n        var f = n.children(e),\n          s = n.node(e),\n          p = s ? s.borderLeft : void 0,\n          d = s ? s.borderRight : void 0,\n          h = {};\n        p &&\n          (f = r.filter(f, function (t) {\n            return t !== p && t !== d;\n          }));\n        var l = o(n, f);\n        r.forEach(l, function (e) {\n          if (n.children(e.v).length) {\n            var o = t(n, e.v, c, a);\n            (h[e.v] = o),\n              r.has(o, \"barycenter\") &&\n                ((i = e),\n                (u = o),\n                r.isUndefined(i.barycenter)\n                  ? ((i.barycenter = u.barycenter), (i.weight = u.weight))\n                  : ((i.barycenter =\n                      (i.barycenter * i.weight + u.barycenter * u.weight) /\n                      (i.weight + u.weight)),\n                    (i.weight += u.weight)));\n          }\n          var i, u;\n        });\n        var v = i(l, c);\n        !(function (t, n) {\n          r.forEach(t, function (t) {\n            t.vs = r.flatten(\n              t.vs.map(function (t) {\n                return n[t] ? n[t].vs : t;\n              }),\n              !0,\n            );\n          });\n        })(v, h);\n        var y = u(v, a);\n        if (\n          p &&\n          ((y.vs = r.flatten([p, y.vs, d], !0)), n.predecessors(p).length)\n        ) {\n          var g = n.node(n.predecessors(p)[0]),\n            b = n.node(n.predecessors(d)[0]);\n          r.has(y, \"barycenter\") || ((y.barycenter = 0), (y.weight = 0)),\n            (y.barycenter =\n              (y.barycenter * y.weight + g.order + b.order) / (y.weight + 2)),\n            (y.weight += 2);\n        }\n        return y;\n      };\n    },\n    function (t, n, e) {\n      var r = e(9);\n      t.exports = function (t, n) {\n        return r.map(n, function (n) {\n          var e = t.inEdges(n);\n          if (e.length) {\n            var o = r.reduce(\n              e,\n              function (n, e) {\n                var r = t.edge(e),\n                  o = t.node(e.v);\n                return {\n                  sum: n.sum + r.weight * o.order,\n                  weight: n.weight + r.weight,\n                };\n              },\n              { sum: 0, weight: 0 },\n            );\n            return { v: n, barycenter: o.sum / o.weight, weight: o.weight };\n          }\n          return { v: n };\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      t.exports = function (t, n) {\n        var e = {};\n        return (\n          r.forEach(t, function (t, n) {\n            var o = (e[t.v] = {\n              indegree: 0,\n              in: [],\n              out: [],\n              vs: [t.v],\n              i: n,\n            });\n            r.isUndefined(t.barycenter) ||\n              ((o.barycenter = t.barycenter), (o.weight = t.weight));\n          }),\n          r.forEach(n.edges(), function (t) {\n            var n = e[t.v],\n              o = e[t.w];\n            r.isUndefined(n) ||\n              r.isUndefined(o) ||\n              (o.indegree++, n.out.push(e[t.w]));\n          }),\n          (function (t) {\n            var n = [];\n            function e(t) {\n              return function (n) {\n                n.merged ||\n                  ((r.isUndefined(n.barycenter) ||\n                    r.isUndefined(t.barycenter) ||\n                    n.barycenter >= t.barycenter) &&\n                    (function (t, n) {\n                      var e = 0,\n                        r = 0;\n                      t.weight &&\n                        ((e += t.barycenter * t.weight), (r += t.weight));\n                      n.weight &&\n                        ((e += n.barycenter * n.weight), (r += n.weight));\n                      (t.vs = n.vs.concat(t.vs)),\n                        (t.barycenter = e / r),\n                        (t.weight = r),\n                        (t.i = Math.min(n.i, t.i)),\n                        (n.merged = !0);\n                    })(t, n));\n              };\n            }\n            function o(n) {\n              return function (e) {\n                e.in.push(n), 0 == --e.indegree && t.push(e);\n              };\n            }\n            for (; t.length; ) {\n              var i = t.pop();\n              n.push(i),\n                r.forEach(i.in.reverse(), e(i)),\n                r.forEach(i.out, o(i));\n            }\n            return r.map(\n              r.filter(n, function (t) {\n                return !t.merged;\n              }),\n              function (t) {\n                return r.pick(t, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n              },\n            );\n          })(\n            r.filter(e, function (t) {\n              return !t.indegree;\n            }),\n          )\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19);\n      function i(t, n, e) {\n        for (var o; n.length && (o = r.last(n)).i <= e; )\n          n.pop(), t.push(o.vs), e++;\n        return e;\n      }\n      t.exports = function (t, n) {\n        var e = o.partition(t, function (t) {\n            return r.has(t, \"barycenter\");\n          }),\n          u = e.lhs,\n          c = r.sortBy(e.rhs, function (t) {\n            return -t.i;\n          }),\n          a = [],\n          f = 0,\n          s = 0,\n          p = 0;\n        u.sort(\n          ((d = !!n),\n          function (t, n) {\n            return t.barycenter < n.barycenter\n              ? -1\n              : t.barycenter > n.barycenter\n              ? 1\n              : d\n              ? n.i - t.i\n              : t.i - n.i;\n          }),\n        ),\n          (p = i(a, c, p)),\n          r.forEach(u, function (t) {\n            (p += t.vs.length),\n              a.push(t.vs),\n              (f += t.barycenter * t.weight),\n              (s += t.weight),\n              (p = i(a, c, p));\n          });\n        var d;\n        var h = { vs: r.flatten(a, !0) };\n        s && ((h.barycenter = f / s), (h.weight = s));\n        return h;\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(23).Graph;\n      t.exports = function (t, n, e) {\n        var i = (function (t) {\n            var n;\n            for (; t.hasNode((n = r.uniqueId(\"_root\"))); );\n            return n;\n          })(t),\n          u = new o({ compound: !0 })\n            .setGraph({ root: i })\n            .setDefaultNodeLabel(function (n) {\n              return t.node(n);\n            });\n        return (\n          r.forEach(t.nodes(), function (o) {\n            var c = t.node(o),\n              a = t.parent(o);\n            (c.rank === n || (c.minRank <= n && n <= c.maxRank)) &&\n              (u.setNode(o),\n              u.setParent(o, a || i),\n              r.forEach(t[e](o), function (n) {\n                var e = n.v === o ? n.w : n.v,\n                  i = u.edge(e, o),\n                  c = r.isUndefined(i) ? 0 : i.weight;\n                u.setEdge(e, o, { weight: t.edge(n).weight + c });\n              }),\n              r.has(c, \"minRank\") &&\n                u.setNode(o, {\n                  borderLeft: c.borderLeft[n],\n                  borderRight: c.borderRight[n],\n                }));\n          }),\n          u\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(9);\n      t.exports = function (t, n, e) {\n        var o,\n          i = {};\n        r.forEach(e, function (e) {\n          for (var r, u, c = t.parent(e); c; ) {\n            if (\n              ((r = t.parent(c))\n                ? ((u = i[r]), (i[r] = c))\n                : ((u = o), (o = c)),\n              u && u !== c)\n            )\n              return void n.setEdge(u, c);\n            c = r;\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(19),\n        i = e(394).positionX;\n      t.exports = function (t) {\n        (function (t) {\n          var n = o.buildLayerMatrix(t),\n            e = t.graph().ranksep,\n            i = 0;\n          r.forEach(n, function (n) {\n            var o = r.max(\n              r.map(n, function (n) {\n                return t.node(n).height;\n              }),\n            );\n            r.forEach(n, function (n) {\n              t.node(n).y = i + o / 2;\n            }),\n              (i += o + e);\n          });\n        })((t = o.asNonCompoundGraph(t))),\n          r.forEach(i(t), function (n, e) {\n            t.node(e).x = n;\n          });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(23).Graph,\n        i = e(19);\n      function u(t, n) {\n        var e = {};\n        return (\n          r.reduce(n, function (n, o) {\n            var i = 0,\n              u = 0,\n              c = n.length,\n              f = r.last(o);\n            return (\n              r.forEach(o, function (n, s) {\n                var p = (function (t, n) {\n                    if (t.node(n).dummy)\n                      return r.find(t.predecessors(n), function (n) {\n                        return t.node(n).dummy;\n                      });\n                  })(t, n),\n                  d = p ? t.node(p).order : c;\n                (p || n === f) &&\n                  (r.forEach(o.slice(u, s + 1), function (n) {\n                    r.forEach(t.predecessors(n), function (r) {\n                      var o = t.node(r),\n                        u = o.order;\n                      !(u < i || d < u) ||\n                        (o.dummy && t.node(n).dummy) ||\n                        a(e, r, n);\n                    });\n                  }),\n                  (u = s + 1),\n                  (i = d));\n              }),\n              o\n            );\n          }),\n          e\n        );\n      }\n      function c(t, n) {\n        var e = {};\n        function o(n, o, i, u, c) {\n          var f;\n          r.forEach(r.range(o, i), function (o) {\n            (f = n[o]),\n              t.node(f).dummy &&\n                r.forEach(t.predecessors(f), function (n) {\n                  var r = t.node(n);\n                  r.dummy && (r.order < u || r.order > c) && a(e, n, f);\n                });\n          });\n        }\n        return (\n          r.reduce(n, function (n, e) {\n            var i,\n              u = -1,\n              c = 0;\n            return (\n              r.forEach(e, function (r, a) {\n                if (\"border\" === t.node(r).dummy) {\n                  var f = t.predecessors(r);\n                  f.length &&\n                    ((i = t.node(f[0]).order),\n                    o(e, c, a, u, i),\n                    (c = a),\n                    (u = i));\n                }\n                o(e, c, e.length, i, n.length);\n              }),\n              e\n            );\n          }),\n          e\n        );\n      }\n      function a(t, n, e) {\n        if (n > e) {\n          var r = n;\n          (n = e), (e = r);\n        }\n        var o = t[n];\n        o || (t[n] = o = {}), (o[e] = !0);\n      }\n      function f(t, n, e) {\n        if (n > e) {\n          var o = n;\n          (n = e), (e = o);\n        }\n        return r.has(t[n], e);\n      }\n      function s(t, n, e, o) {\n        var i = {},\n          u = {},\n          c = {};\n        return (\n          r.forEach(n, function (t) {\n            r.forEach(t, function (t, n) {\n              (i[t] = t), (u[t] = t), (c[t] = n);\n            });\n          }),\n          r.forEach(n, function (t) {\n            var n = -1;\n            r.forEach(t, function (t) {\n              var a = o(t);\n              if (a.length)\n                for (\n                  var s =\n                      ((a = r.sortBy(a, function (t) {\n                        return c[t];\n                      })).length -\n                        1) /\n                      2,\n                    p = Math.floor(s),\n                    d = Math.ceil(s);\n                  p <= d;\n                  ++p\n                ) {\n                  var h = a[p];\n                  u[t] === t &&\n                    n < c[h] &&\n                    !f(e, t, h) &&\n                    ((u[h] = t), (u[t] = i[t] = i[h]), (n = c[h]));\n                }\n            });\n          }),\n          { root: i, align: u }\n        );\n      }\n      function p(t, n, e, i, u) {\n        var c = {},\n          a = (function (t, n, e, i) {\n            var u = new o(),\n              c = t.graph(),\n              a = (function (t, n, e) {\n                return function (o, i, u) {\n                  var c,\n                    a = o.node(i),\n                    f = o.node(u),\n                    s = 0;\n                  if (((s += a.width / 2), r.has(a, \"labelpos\")))\n                    switch (a.labelpos.toLowerCase()) {\n                      case \"l\":\n                        c = -a.width / 2;\n                        break;\n                      case \"r\":\n                        c = a.width / 2;\n                    }\n                  if (\n                    (c && (s += e ? c : -c),\n                    (c = 0),\n                    (s += (a.dummy ? n : t) / 2),\n                    (s += (f.dummy ? n : t) / 2),\n                    (s += f.width / 2),\n                    r.has(f, \"labelpos\"))\n                  )\n                    switch (f.labelpos.toLowerCase()) {\n                      case \"l\":\n                        c = f.width / 2;\n                        break;\n                      case \"r\":\n                        c = -f.width / 2;\n                    }\n                  return c && (s += e ? c : -c), (c = 0), s;\n                };\n              })(c.nodesep, c.edgesep, i);\n            return (\n              r.forEach(n, function (n) {\n                var o;\n                r.forEach(n, function (n) {\n                  var r = e[n];\n                  if ((u.setNode(r), o)) {\n                    var i = e[o],\n                      c = u.edge(i, r);\n                    u.setEdge(i, r, Math.max(a(t, n, o), c || 0));\n                  }\n                  o = n;\n                });\n              }),\n              u\n            );\n          })(t, n, e, u),\n          f = u ? \"borderLeft\" : \"borderRight\";\n        function s(t, n) {\n          for (var e = a.nodes(), r = e.pop(), o = {}; r; )\n            o[r] ? t(r) : ((o[r] = !0), e.push(r), (e = e.concat(n(r)))),\n              (r = e.pop());\n        }\n        return (\n          s(function (t) {\n            c[t] = a.inEdges(t).reduce(function (t, n) {\n              return Math.max(t, c[n.v] + a.edge(n));\n            }, 0);\n          }, a.predecessors.bind(a)),\n          s(function (n) {\n            var e = a.outEdges(n).reduce(function (t, n) {\n                return Math.min(t, c[n.w] - a.edge(n));\n              }, Number.POSITIVE_INFINITY),\n              r = t.node(n);\n            e !== Number.POSITIVE_INFINITY &&\n              r.borderType !== f &&\n              (c[n] = Math.max(c[n], e));\n          }, a.successors.bind(a)),\n          r.forEach(i, function (t) {\n            c[t] = c[e[t]];\n          }),\n          c\n        );\n      }\n      function d(t, n) {\n        return r.minBy(r.values(n), function (n) {\n          var e = Number.NEGATIVE_INFINITY,\n            o = Number.POSITIVE_INFINITY;\n          return (\n            r.forIn(n, function (n, r) {\n              var i =\n                (function (t, n) {\n                  return t.node(n).width;\n                })(t, r) / 2;\n              (e = Math.max(n + i, e)), (o = Math.min(n - i, o));\n            }),\n            e - o\n          );\n        });\n      }\n      function h(t, n) {\n        var e = r.values(n),\n          o = r.min(e),\n          i = r.max(e);\n        r.forEach([\"u\", \"d\"], function (e) {\n          r.forEach([\"l\", \"r\"], function (u) {\n            var c,\n              a = e + u,\n              f = t[a];\n            if (f !== n) {\n              var s = r.values(f);\n              (c = \"l\" === u ? o - r.min(s) : i - r.max(s)) &&\n                (t[a] = r.mapValues(f, function (t) {\n                  return t + c;\n                }));\n            }\n          });\n        });\n      }\n      function l(t, n) {\n        return r.mapValues(t.ul, function (e, o) {\n          if (n) return t[n.toLowerCase()][o];\n          var i = r.sortBy(r.map(t, o));\n          return (i[1] + i[2]) / 2;\n        });\n      }\n      t.exports = {\n        positionX: function (t) {\n          var n,\n            e = i.buildLayerMatrix(t),\n            o = r.merge(u(t, e), c(t, e)),\n            a = {};\n          r.forEach([\"u\", \"d\"], function (i) {\n            (n = \"u\" === i ? e : r.values(e).reverse()),\n              r.forEach([\"l\", \"r\"], function (e) {\n                \"r\" === e &&\n                  (n = r.map(n, function (t) {\n                    return r.values(t).reverse();\n                  }));\n                var u = (\"u\" === i ? t.predecessors : t.successors).bind(t),\n                  c = s(t, n, o, u),\n                  f = p(t, n, c.root, c.align, \"r\" === e);\n                \"r\" === e &&\n                  (f = r.mapValues(f, function (t) {\n                    return -t;\n                  })),\n                  (a[i + e] = f);\n              });\n          });\n          var f = d(t, a);\n          return h(a, f), l(a, t.graph().align);\n        },\n        findType1Conflicts: u,\n        findType2Conflicts: c,\n        addConflict: a,\n        hasConflict: f,\n        verticalAlignment: s,\n        horizontalCompaction: p,\n        alignCoordinates: h,\n        findSmallestWidthAlignment: d,\n        balance: l,\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19),\n        i = e(23).Graph;\n      t.exports = {\n        debugOrdering: function (t) {\n          var n = o.buildLayerMatrix(t),\n            e = new i({ compound: !0, multigraph: !0 }).setGraph({});\n          return (\n            r.forEach(t.nodes(), function (n) {\n              e.setNode(n, { label: n }),\n                e.setParent(n, \"layer\" + t.node(n).rank);\n            }),\n            r.forEach(t.edges(), function (t) {\n              e.setEdge(t.v, t.w, {}, t.name);\n            }),\n            r.forEach(n, function (t, n) {\n              var o = \"layer\" + n;\n              e.setNode(o, { rank: \"same\" }),\n                r.reduce(t, function (t, n) {\n                  return e.setEdge(t, n, { style: \"invis\" }), n;\n                });\n            }),\n            e\n          );\n        },\n      };\n    },\n    function (t, n) {\n      t.exports = \"0.8.5\";\n    },\n  ]).default;\n});\n//# sourceMappingURL=dagreLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/forceAtlas2Layout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function i(r) {\n      if (e[r]) return e[r].exports;\n      var n = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(n.exports, n, n.exports, i), (n.l = !0), n.exports;\n    }\n    return (\n      (i.m = t),\n      (i.c = e),\n      (i.d = function (t, e, r) {\n        i.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (i.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (i.t = function (t, e) {\n        if ((1 & e && (t = i(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (i.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var n in t)\n            i.d(\n              r,\n              n,\n              function (e) {\n                return t[e];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (i.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return i.d(e, \"a\", e), e;\n      }),\n      (i.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (i.p = \"\"),\n      i((i.s = 397))\n    );\n  })({\n    10: function (t, e, i) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, i, r) {\n                void 0 === r && (r = i),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[i];\n                    },\n                  });\n              }\n            : function (t, e, i, r) {\n                void 0 === r && (r = i), (t[r] = e[i]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var i in t)\n              \"default\" === i ||\n                Object.prototype.hasOwnProperty.call(e, i) ||\n                r(e, t, i);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        n(i(11), e),\n        n(i(12), e),\n        n(i(13), e),\n        n(i(14), e),\n        n(i(15), e),\n        n(i(16), e);\n    },\n    11: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        n,\n        o = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(o, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = r(t));\n        });\n    },\n    12: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var i = parseFloat(t);\n        return e.isNaN(i) ? t : i;\n      };\n    },\n    14: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, i) {\n        for (var r = [], n = 0; n < t; n++) r[n] = 0;\n        return i\n          ? (i.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], i = t.length, r = 0; r < i; r += 1) {\n          e[r] = [];\n          for (var n = 0; n < i; n += 1)\n            r === n\n              ? (e[r][n] = 0)\n              : 0 !== t[r][n] && t[r][n]\n              ? (e[r][n] = t[r][n])\n              : (e[r][n] = 1 / 0);\n        }\n        for (var o = 0; o < i; o += 1)\n          for (r = 0; r < i; r += 1)\n            for (n = 0; n < i; n += 1)\n              e[r][n] > e[r][o] + e[o][n] && (e[r][n] = e[r][o] + e[o][n]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var i = t.nodes,\n          r = t.edges,\n          n = [],\n          o = {};\n        if (!i) throw new Error(\"invalid nodes data!\");\n        return (\n          i &&\n            i.forEach(function (t, e) {\n              o[t.id] = e;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var i = t.source,\n                r = t.target,\n                s = o[i],\n                u = o[r];\n              (n[s][u] = 1), e || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var i = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              i.push(r);\n          }),\n          i\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, i) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], i)) return;\n            return !!i(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, i) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var e, i = 1, r = arguments.length; i < r; i++)\n                for (var n in (e = arguments[i]))\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              i.push(t);\n            }),\n            i.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var o = n({}, t);\n          return (\n            Object.keys(o).forEach(function (t) {\n              o[t] = e.clone(o[t]);\n            }),\n            o\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    175: function (t, e, i) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var i in e)\n                  Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function i() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((i.prototype = e.prototype), new i()));\n          }),\n        o =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.ForceAtlas2Layout = void 0);\n      var s = i(7),\n        u = i(10),\n        h = o(i(398)),\n        a = o(i(399)),\n        c = o(i(400)),\n        d = (function (t) {\n          function e(e) {\n            var i = t.call(this) || this;\n            return (\n              (i.center = [0, 0]),\n              (i.width = 300),\n              (i.height = 300),\n              (i.nodes = []),\n              (i.edges = []),\n              (i.kr = 5),\n              (i.kg = 1),\n              (i.mode = \"normal\"),\n              (i.preventOverlap = !1),\n              (i.dissuadeHubs = !1),\n              (i.barnesHut = !1),\n              (i.maxIteration = 0),\n              (i.ks = 0.1),\n              (i.ksmax = 10),\n              (i.tao = 0.1),\n              (i.onLayoutEnd = function () {}),\n              (i.prune = !1),\n              i.updateCfg(e),\n              i\n            );\n          }\n          return (\n            n(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.execute = function () {\n              var t = this.nodes,\n                e = this.maxIteration,\n                i = this.onLayoutEnd,\n                r = this.prune;\n              this.width ||\n                \"undefined\" == typeof window ||\n                (this.width = window.innerWidth),\n                this.height ||\n                  \"undefined\" == typeof window ||\n                  (this.height = window.innerHeight);\n              for (var n = [], o = t.length, s = 0; s < o; s += 1) {\n                var h = t[s],\n                  a = 10,\n                  c = 10;\n                u.isNumber(h.size) && ((a = h.size), (c = h.size)),\n                  u.isArray(h.size) &&\n                    (isNaN(h.size[0]) || (a = h.size[0]),\n                    isNaN(h.size[1]) || (c = h.size[1])),\n                  this.getWidth &&\n                    !isNaN(this.getWidth(h)) &&\n                    (c = this.getWidth(h)),\n                  this.getHeight &&\n                    !isNaN(this.getHeight(h)) &&\n                    (a = this.getHeight(h));\n                var d = Math.max(a, c);\n                n.push(d);\n              }\n              !this.barnesHut && o > 250 && (this.barnesHut = !0),\n                !this.prune && o > 100 && (this.prune = !0),\n                0 !== this.maxIteration || this.prune\n                  ? 0 === this.maxIteration &&\n                    r &&\n                    ((e = 100),\n                    o <= 200 && o > 100 ? (e = 500) : o > 200 && (e = 950),\n                    (this.maxIteration = e))\n                  : ((e = 250),\n                    o <= 200 && o > 100 ? (e = 1e3) : o > 200 && (e = 1200),\n                    (this.maxIteration = e)),\n                this.kr ||\n                  ((this.kr = 50),\n                  o > 100 && o <= 500\n                    ? (this.kr = 20)\n                    : o > 500 && (this.kr = 1)),\n                this.kg ||\n                  ((this.kg = 20),\n                  o > 100 && o <= 500\n                    ? (this.kg = 10)\n                    : o > 500 && (this.kg = 1)),\n                (this.nodes = this.updateNodesByForces(n)),\n                i();\n            }),\n            (e.prototype.updateNodesByForces = function (t) {\n              for (\n                var e = this.nodes,\n                  i = this.edges,\n                  r = this.maxIteration,\n                  n = i.filter(function (t) {\n                    return t.source !== t.target;\n                  }),\n                  o = e.length,\n                  s = n.length,\n                  u = [],\n                  h = {},\n                  a = {},\n                  c = [],\n                  d = 0;\n                d < o;\n                d += 1\n              )\n                (h[e[d].id] = d),\n                  (u[d] = 0),\n                  (void 0 === e[d].x || isNaN(e[d].x)) &&\n                    (e[d].x = 1e3 * Math.random()),\n                  (void 0 === e[d].y || isNaN(e[d].y)) &&\n                    (e[d].y = 1e3 * Math.random()),\n                  c.push({ x: e[d].x, y: e[d].y });\n              for (d = 0; d < s; d += 1) {\n                for (\n                  var f = void 0, p = void 0, l = 0, y = 0, g = 0;\n                  g < o;\n                  g += 1\n                )\n                  e[g].id === n[d].source\n                    ? ((f = e[g]), (l = g))\n                    : e[g].id === n[d].target && ((p = e[g]), (y = g)),\n                    (a[d] = { sourceIdx: l, targetIdx: y });\n                f && (u[h[f.id]] += 1), p && (u[h[p.id]] += 1);\n              }\n              var v = r;\n              if (((e = this.iterate(v, h, a, s, u, t)), this.prune)) {\n                for (g = 0; g < s; g += 1)\n                  u[a[g].sourceIdx] <= 1\n                    ? ((e[a[g].sourceIdx].x = e[a[g].targetIdx].x),\n                      (e[a[g].sourceIdx].y = e[a[g].targetIdx].y))\n                    : u[a[g].targetIdx] <= 1 &&\n                      ((e[a[g].targetIdx].x = e[a[g].sourceIdx].x),\n                      (e[a[g].targetIdx].y = e[a[g].sourceIdx].y));\n                (this.prune = !1),\n                  (this.barnesHut = !1),\n                  (v = 100),\n                  (e = this.iterate(v, h, a, s, u, t));\n              }\n              return e;\n            }),\n            (e.prototype.iterate = function (t, e, i, r, n, o) {\n              for (\n                var s = this.nodes,\n                  u = this.kr,\n                  a = this.preventOverlap,\n                  c = this.barnesHut,\n                  d = s.length,\n                  f = 0,\n                  p = t,\n                  l = [],\n                  y = [],\n                  g = [],\n                  v = 0;\n                v < d;\n                v += 1\n              )\n                if (((l[2 * v] = 0), (l[2 * v + 1] = 0), c)) {\n                  var x = {\n                    id: v,\n                    rx: s[v].x,\n                    ry: s[v].y,\n                    mass: 1,\n                    g: u,\n                    degree: n[v],\n                  };\n                  g[v] = new h.default(x);\n                }\n              for (; p > 0; ) {\n                for (v = 0; v < d; v += 1)\n                  (y[2 * v] = l[2 * v]),\n                    (y[2 * v + 1] = l[2 * v + 1]),\n                    (l[2 * v] = 0),\n                    (l[2 * v + 1] = 0);\n                (l = this.getAttrForces(p, 50, r, e, i, n, o, l)),\n                  (l =\n                    c && ((a && p > 50) || !a)\n                      ? this.getOptRepGraForces(l, g, n)\n                      : this.getRepGraForces(p, 50, l, 100, o, n));\n                var m = this.updatePos(l, y, f, n);\n                (s = m.nodes), (f = m.sg), p--, this.tick && this.tick();\n              }\n              return s;\n            }),\n            (e.prototype.getAttrForces = function (t, e, i, r, n, o, s, u) {\n              for (\n                var h = this.nodes,\n                  a = this.preventOverlap,\n                  c = this.dissuadeHubs,\n                  d = this.mode,\n                  f = this.prune,\n                  p = 0;\n                p < i;\n                p += 1\n              ) {\n                var l = h[n[p].sourceIdx],\n                  y = n[p].sourceIdx,\n                  g = h[n[p].targetIdx],\n                  v = n[p].targetIdx;\n                if (!f || !(o[y] <= 1 || o[v] <= 1)) {\n                  var x = [g.x - l.x, g.y - l.y],\n                    m = Math.hypot(x[0], x[1]);\n                  (m = m < 1e-4 ? 1e-4 : m),\n                    (x[0] = x[0] / m),\n                    (x[1] = x[1] / m),\n                    a && t < e && (m = m - s[y] - s[v]);\n                  var b = m,\n                    _ = b;\n                  \"linlog\" === d && (_ = b = Math.log(1 + m)),\n                    c && ((b = m / o[y]), (_ = m / o[v])),\n                    a && t < e && m <= 0\n                      ? ((b = 0), (_ = 0))\n                      : a && t < e && m > 0 && ((b = m), (_ = m)),\n                    (u[2 * r[l.id]] += b * x[0]),\n                    (u[2 * r[g.id]] -= _ * x[0]),\n                    (u[2 * r[l.id] + 1] += b * x[1]),\n                    (u[2 * r[g.id] + 1] -= _ * x[1]);\n                }\n              }\n              return u;\n            }),\n            (e.prototype.getRepGraForces = function (t, e, i, r, n, o) {\n              for (\n                var s = this.nodes,\n                  u = this.preventOverlap,\n                  h = this.kr,\n                  a = this.kg,\n                  c = this.center,\n                  d = this.prune,\n                  f = s.length,\n                  p = 0;\n                p < f;\n                p += 1\n              ) {\n                for (var l = p + 1; l < f; l += 1)\n                  if (!d || !(o[p] <= 1 || o[l] <= 1)) {\n                    var y = [s[l].x - s[p].x, s[l].y - s[p].y],\n                      g = Math.hypot(y[0], y[1]);\n                    (g = g < 1e-4 ? 1e-4 : g),\n                      (y[0] = y[0] / g),\n                      (y[1] = y[1] / g),\n                      u && t < e && (g = g - n[p] - n[l]);\n                    var v = (h * (o[p] + 1) * (o[l] + 1)) / g;\n                    u && t < e && g < 0\n                      ? (v = r * (o[p] + 1) * (o[l] + 1))\n                      : u && t < e && 0 === g\n                      ? (v = 0)\n                      : u &&\n                        t < e &&\n                        g > 0 &&\n                        (v = (h * (o[p] + 1) * (o[l] + 1)) / g),\n                      (i[2 * p] -= v * y[0]),\n                      (i[2 * l] += v * y[0]),\n                      (i[2 * p + 1] -= v * y[1]),\n                      (i[2 * l + 1] += v * y[1]);\n                  }\n                var x = [s[p].x - c[0], s[p].y - c[1]],\n                  m = Math.hypot(x[0], x[1]);\n                (x[0] = x[0] / m), (x[1] = x[1] / m);\n                var b = a * (o[p] + 1);\n                (i[2 * p] -= b * x[0]), (i[2 * p + 1] -= b * x[1]);\n              }\n              return i;\n            }),\n            (e.prototype.getOptRepGraForces = function (t, e, i) {\n              for (\n                var r = this.nodes,\n                  n = this.kg,\n                  o = this.center,\n                  s = this.prune,\n                  u = r.length,\n                  h = 9e10,\n                  d = -9e10,\n                  f = 9e10,\n                  p = -9e10,\n                  l = 0;\n                l < u;\n                l += 1\n              )\n                (s && i[l] <= 1) ||\n                  (e[l].setPos(r[l].x, r[l].y),\n                  r[l].x >= d && (d = r[l].x),\n                  r[l].x <= h && (h = r[l].x),\n                  r[l].y >= p && (p = r[l].y),\n                  r[l].y <= f && (f = r[l].y));\n              var y = {\n                  xmid: (d + h) / 2,\n                  ymid: (p + f) / 2,\n                  length: Math.max(d - h, p - f),\n                  massCenter: o,\n                  mass: u,\n                },\n                g = new a.default(y),\n                v = new c.default(g);\n              for (l = 0; l < u; l += 1)\n                (s && i[l] <= 1) || (e[l].in(g) && v.insert(e[l]));\n              for (l = 0; l < u; l += 1)\n                if (!(s && i[l] <= 1)) {\n                  e[l].resetForce(),\n                    v.updateForce(e[l]),\n                    (t[2 * l] -= e[l].fx),\n                    (t[2 * l + 1] -= e[l].fy);\n                  var x = [r[l].x - o[0], r[l].y - o[1]],\n                    m = Math.hypot(x[0], x[1]);\n                  (m = m < 1e-4 ? 1e-4 : m),\n                    (x[0] = x[0] / m),\n                    (x[1] = x[1] / m);\n                  var b = n * (i[l] + 1);\n                  (t[2 * l] -= b * x[0]), (t[2 * l + 1] -= b * x[1]);\n                }\n              return t;\n            }),\n            (e.prototype.updatePos = function (t, e, i, r) {\n              for (\n                var n = this.nodes,\n                  o = this.ks,\n                  s = this.tao,\n                  u = this.prune,\n                  h = this.ksmax,\n                  a = n.length,\n                  c = [],\n                  d = [],\n                  f = 0,\n                  p = 0,\n                  l = 0;\n                l < a;\n                l += 1\n              )\n                if (!(u && r[l] <= 1)) {\n                  var y = [t[2 * l] - e[2 * l], t[2 * l + 1] - e[2 * l + 1]],\n                    g = Math.hypot(y[0], y[1]),\n                    v = [t[2 * l] + e[2 * l], t[2 * l + 1] + e[2 * l + 1]],\n                    x = Math.hypot(v[0], v[1]);\n                  (c[l] = g),\n                    (d[l] = x / 2),\n                    (f += (r[l] + 1) * c[l]),\n                    (p += (r[l] + 1) * d[l]);\n                }\n              var m = i;\n              (i = (s * p) / f), 0 !== m && (i = i > 1.5 * m ? 1.5 * m : i);\n              for (l = 0; l < a; l += 1)\n                if (!(u && r[l] <= 1)) {\n                  var b = (o * i) / (1 + i * Math.sqrt(c[l])),\n                    _ = Math.hypot(t[2 * l], t[2 * l + 1]),\n                    N = h / (_ = _ < 1e-4 ? 1e-4 : _),\n                    O = (b = b > N ? N : b) * t[2 * l],\n                    j = b * t[2 * l + 1];\n                  (n[l].x += O), (n[l].y += j);\n                }\n              return { nodes: n, sg: i };\n            }),\n            e\n          );\n        })(s.Base);\n      e.ForceAtlas2Layout = d;\n    },\n    397: function (t, e, i) {\n      \"use strict\";\n      i.r(e);\n      var r = i(175);\n      e.default = r.ForceAtlas2Layout;\n    },\n    398: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var r = (function () {\n        function t(t) {\n          (this.id = t.id || 0),\n            (this.rx = t.rx),\n            (this.ry = t.ry),\n            (this.fx = 0),\n            (this.fy = 0),\n            (this.mass = t.mass),\n            (this.degree = t.degree),\n            (this.g = t.g || 0);\n        }\n        return (\n          (t.prototype.distanceTo = function (t) {\n            var e = this.rx - t.rx,\n              i = this.ry - t.ry;\n            return Math.hypot(e, i);\n          }),\n          (t.prototype.setPos = function (t, e) {\n            (this.rx = t), (this.ry = e);\n          }),\n          (t.prototype.resetForce = function () {\n            (this.fx = 0), (this.fy = 0);\n          }),\n          (t.prototype.addForce = function (t) {\n            var e = t.rx - this.rx,\n              i = t.ry - this.ry,\n              r = Math.hypot(e, i);\n            r = r < 1e-4 ? 1e-4 : r;\n            var n = (this.g * (this.degree + 1) * (t.degree + 1)) / r;\n            (this.fx += (n * e) / r), (this.fy += (n * i) / r);\n          }),\n          (t.prototype.in = function (t) {\n            return t.contains(this.rx, this.ry);\n          }),\n          (t.prototype.add = function (e) {\n            var i = this.mass + e.mass;\n            return new t({\n              rx: (this.rx * this.mass + e.rx * e.mass) / i,\n              ry: (this.ry * this.mass + e.ry * e.mass) / i,\n              mass: i,\n              degree: this.degree + e.degree,\n            });\n          }),\n          t\n        );\n      })();\n      e.default = r;\n    },\n    399: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var r = (function () {\n        function t(t) {\n          (this.xmid = t.xmid),\n            (this.ymid = t.ymid),\n            (this.length = t.length),\n            (this.massCenter = t.massCenter || [0, 0]),\n            (this.mass = t.mass || 1);\n        }\n        return (\n          (t.prototype.getLength = function () {\n            return this.length;\n          }),\n          (t.prototype.contains = function (t, e) {\n            var i = this.length / 2;\n            return (\n              t <= this.xmid + i &&\n              t >= this.xmid - i &&\n              e <= this.ymid + i &&\n              e >= this.ymid - i\n            );\n          }),\n          (t.prototype.NW = function () {\n            return new t({\n              xmid: this.xmid - this.length / 4,\n              ymid: this.ymid + this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.NE = function () {\n            return new t({\n              xmid: this.xmid + this.length / 4,\n              ymid: this.ymid + this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.SW = function () {\n            return new t({\n              xmid: this.xmid - this.length / 4,\n              ymid: this.ymid - this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.SE = function () {\n            return new t({\n              xmid: this.xmid + this.length / 4,\n              ymid: this.ymid - this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          t\n        );\n      })();\n      e.default = r;\n    },\n    400: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var r = (function () {\n        function t(t) {\n          (this.body = null),\n            (this.quad = null),\n            (this.NW = null),\n            (this.NE = null),\n            (this.SW = null),\n            (this.SE = null),\n            (this.theta = 0.5),\n            null != t && (this.quad = t);\n        }\n        return (\n          (t.prototype.insert = function (e) {\n            null != this.body\n              ? this._isExternal()\n                ? (this.quad &&\n                    ((this.NW = new t(this.quad.NW())),\n                    (this.NE = new t(this.quad.NE())),\n                    (this.SW = new t(this.quad.SW())),\n                    (this.SE = new t(this.quad.SE()))),\n                  this._putBody(this.body),\n                  this._putBody(e),\n                  (this.body = this.body.add(e)))\n                : ((this.body = this.body.add(e)), this._putBody(e))\n              : (this.body = e);\n          }),\n          (t.prototype._putBody = function (t) {\n            this.quad &&\n              (t.in(this.quad.NW()) && this.NW\n                ? this.NW.insert(t)\n                : t.in(this.quad.NE()) && this.NE\n                ? this.NE.insert(t)\n                : t.in(this.quad.SW()) && this.SW\n                ? this.SW.insert(t)\n                : t.in(this.quad.SE()) && this.SE && this.SE.insert(t));\n          }),\n          (t.prototype._isExternal = function () {\n            return (\n              null == this.NW &&\n              null == this.NE &&\n              null == this.SW &&\n              null == this.SE\n            );\n          }),\n          (t.prototype.updateForce = function (t) {\n            null != this.body &&\n              t !== this.body &&\n              (this._isExternal() ||\n              (this.quad ? this.quad.getLength() : 0) /\n                this.body.distanceTo(t) <\n                this.theta\n                ? t.addForce(this.body)\n                : (this.NW && this.NW.updateForce(t),\n                  this.NE && this.NE.updateForce(t),\n                  this.SW && this.SW.updateForce(t),\n                  this.SE && this.SE.updateForce(t)));\n          }),\n          t\n        );\n      })();\n      e.default = r;\n    },\n    7: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=forceAtlas2Layout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/forceLayout.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.f6 = n())\n    : (t.f6 = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function e(r) {\n      if (n[r]) return n[r].exports;\n      var o = (n[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, e), (o.l = !0), o.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = n),\n      (e.d = function (t, n, r) {\n        e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: r });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, n) {\n        if ((1 & n && (t = e(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (e.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var o in t)\n            e.d(\n              r,\n              o,\n              function (n) {\n                return t[n];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (e.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(n, \"a\", n), n;\n      }),\n      (e.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (e.p = \"\"),\n      e((e.s = 401))\n    );\n  })({\n    10: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        o(e(11), n),\n        o(e(12), n),\n        o(e(13), n),\n        o(e(14), n),\n        o(e(15), n),\n        o(e(16), n);\n    },\n    11: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.camelize = n.isString = void 0);\n      n.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      n.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, n) {\n            return n ? n.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isArray = void 0),\n        (n.isArray = Array.isArray);\n    },\n    13: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.toNumber = n.isNaN = n.isNumber = void 0);\n      n.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      n.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      n.toNumber = function (t) {\n        var e = parseFloat(t);\n        return n.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.traverseTreeUp =\n          n.scaleMatrix =\n          n.getAdjMatrix =\n          n.floydWarshall =\n          n.getDegree =\n            void 0);\n      n.getDegree = function (t, n, e) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (r[n[t.source]] += 1),\n                t.target && (r[n[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      n.floydWarshall = function (t) {\n        for (var n = [], e = t.length, r = 0; r < e; r += 1) {\n          n[r] = [];\n          for (var o = 0; o < e; o += 1)\n            r === o\n              ? (n[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (n[r][o] = t[r][o])\n              : (n[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (r = 0; r < e; r += 1)\n            for (o = 0; o < e; o += 1)\n              n[r][o] > n[r][i] + n[i][o] && (n[r][o] = n[r][i] + n[i][o]);\n        return n;\n      };\n      n.getAdjMatrix = function (t, n) {\n        var e = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, n) {\n              i[t.id] = n;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var e = t.source,\n                r = t.target,\n                u = i[e],\n                c = i[r];\n              (o[u][c] = 1), n || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      n.scaleMatrix = function (t, n) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * n);\n            }),\n              e.push(r);\n          }),\n          e\n        );\n      };\n      n.traverseTreeUp = function (t, n) {\n        \"function\" == typeof n &&\n          (function t(n, e) {\n            if (n && n.children)\n              for (var r = n.children.length - 1; r >= 0; r--)\n                if (!t(n.children[r], e)) return;\n            return !!e(n);\n          })(t, n);\n      };\n    },\n    15: function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var n, e = 1, r = arguments.length; e < r; e++)\n                for (var o in (n = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.clone = n.isObject = void 0);\n      n.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      n.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return n.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = n.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isFunction = void 0);\n      n.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    167: function (t, n, e) {\n      \"use strict\";\n      e.r(n),\n        e.d(n, \"forceCenter\", function () {\n          return r;\n        }),\n        e.d(n, \"forceCollide\", function () {\n          return v;\n        }),\n        e.d(n, \"forceLink\", function () {\n          return b;\n        }),\n        e.d(n, \"forceManyBody\", function () {\n          return V;\n        }),\n        e.d(n, \"forceRadial\", function () {\n          return Z;\n        }),\n        e.d(n, \"forceSimulation\", function () {\n          return Q;\n        }),\n        e.d(n, \"forceX\", function () {\n          return $;\n        }),\n        e.d(n, \"forceY\", function () {\n          return tt;\n        });\n      var r = function (t, n) {\n        var e,\n          r = 1;\n        function o() {\n          var o,\n            i,\n            u = e.length,\n            c = 0,\n            f = 0;\n          for (o = 0; o < u; ++o) (c += (i = e[o]).x), (f += i.y);\n          for (c = (c / u - t) * r, f = (f / u - n) * r, o = 0; o < u; ++o)\n            ((i = e[o]).x -= c), (i.y -= f);\n        }\n        return (\n          null == t && (t = 0),\n          null == n && (n = 0),\n          (o.initialize = function (t) {\n            e = t;\n          }),\n          (o.x = function (n) {\n            return arguments.length ? ((t = +n), o) : t;\n          }),\n          (o.y = function (t) {\n            return arguments.length ? ((n = +t), o) : n;\n          }),\n          (o.strength = function (t) {\n            return arguments.length ? ((r = +t), o) : r;\n          }),\n          o\n        );\n      };\n      function o(t, n, e, r) {\n        if (isNaN(n) || isNaN(e)) return t;\n        var o,\n          i,\n          u,\n          c,\n          f,\n          a,\n          l,\n          s,\n          h,\n          d = t._root,\n          y = { data: r },\n          p = t._x0,\n          v = t._y0,\n          g = t._x1,\n          _ = t._y1;\n        if (!d) return (t._root = y), t;\n        for (; d.length; )\n          if (\n            ((a = n >= (i = (p + g) / 2)) ? (p = i) : (g = i),\n            (l = e >= (u = (v + _) / 2)) ? (v = u) : (_ = u),\n            (o = d),\n            !(d = d[(s = (l << 1) | a)]))\n          )\n            return (o[s] = y), t;\n        if (\n          ((c = +t._x.call(null, d.data)),\n          (f = +t._y.call(null, d.data)),\n          n === c && e === f)\n        )\n          return (y.next = d), o ? (o[s] = y) : (t._root = y), t;\n        do {\n          (o = o ? (o[s] = new Array(4)) : (t._root = new Array(4))),\n            (a = n >= (i = (p + g) / 2)) ? (p = i) : (g = i),\n            (l = e >= (u = (v + _) / 2)) ? (v = u) : (_ = u);\n        } while ((s = (l << 1) | a) == (h = ((f >= u) << 1) | (c >= i)));\n        return (o[h] = d), (o[s] = y), t;\n      }\n      var i = function (t, n, e, r, o) {\n        (this.node = t),\n          (this.x0 = n),\n          (this.y0 = e),\n          (this.x1 = r),\n          (this.y1 = o);\n      };\n      function u(t) {\n        return t[0];\n      }\n      function c(t) {\n        return t[1];\n      }\n      function f(t, n, e) {\n        var r = new a(null == n ? u : n, null == e ? c : e, NaN, NaN, NaN, NaN);\n        return null == t ? r : r.addAll(t);\n      }\n      function a(t, n, e, r, o, i) {\n        (this._x = t),\n          (this._y = n),\n          (this._x0 = e),\n          (this._y0 = r),\n          (this._x1 = o),\n          (this._y1 = i),\n          (this._root = void 0);\n      }\n      function l(t) {\n        for (var n = { data: t.data }, e = n; (t = t.next); )\n          e = e.next = { data: t.data };\n        return n;\n      }\n      var s = (f.prototype = a.prototype);\n      (s.copy = function () {\n        var t,\n          n,\n          e = new a(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n          r = this._root;\n        if (!r) return e;\n        if (!r.length) return (e._root = l(r)), e;\n        for (\n          t = [{ source: r, target: (e._root = new Array(4)) }];\n          (r = t.pop());\n\n        )\n          for (var o = 0; o < 4; ++o)\n            (n = r.source[o]) &&\n              (n.length\n                ? t.push({ source: n, target: (r.target[o] = new Array(4)) })\n                : (r.target[o] = l(n)));\n        return e;\n      }),\n        (s.add = function (t) {\n          var n = +this._x.call(null, t),\n            e = +this._y.call(null, t);\n          return o(this.cover(n, e), n, e, t);\n        }),\n        (s.addAll = function (t) {\n          var n,\n            e,\n            r,\n            i,\n            u = t.length,\n            c = new Array(u),\n            f = new Array(u),\n            a = 1 / 0,\n            l = 1 / 0,\n            s = -1 / 0,\n            h = -1 / 0;\n          for (e = 0; e < u; ++e)\n            isNaN((r = +this._x.call(null, (n = t[e])))) ||\n              isNaN((i = +this._y.call(null, n))) ||\n              ((c[e] = r),\n              (f[e] = i),\n              r < a && (a = r),\n              r > s && (s = r),\n              i < l && (l = i),\n              i > h && (h = i));\n          if (a > s || l > h) return this;\n          for (this.cover(a, l).cover(s, h), e = 0; e < u; ++e)\n            o(this, c[e], f[e], t[e]);\n          return this;\n        }),\n        (s.cover = function (t, n) {\n          if (isNaN((t = +t)) || isNaN((n = +n))) return this;\n          var e = this._x0,\n            r = this._y0,\n            o = this._x1,\n            i = this._y1;\n          if (isNaN(e))\n            (o = (e = Math.floor(t)) + 1), (i = (r = Math.floor(n)) + 1);\n          else {\n            for (\n              var u, c, f = o - e || 1, a = this._root;\n              e > t || t >= o || r > n || n >= i;\n\n            )\n              switch (\n                ((c = ((n < r) << 1) | (t < e)),\n                ((u = new Array(4))[c] = a),\n                (a = u),\n                (f *= 2),\n                c)\n              ) {\n                case 0:\n                  (o = e + f), (i = r + f);\n                  break;\n                case 1:\n                  (e = o - f), (i = r + f);\n                  break;\n                case 2:\n                  (o = e + f), (r = i - f);\n                  break;\n                case 3:\n                  (e = o - f), (r = i - f);\n              }\n            this._root && this._root.length && (this._root = a);\n          }\n          return (\n            (this._x0 = e), (this._y0 = r), (this._x1 = o), (this._y1 = i), this\n          );\n        }),\n        (s.data = function () {\n          var t = [];\n          return (\n            this.visit(function (n) {\n              if (!n.length)\n                do {\n                  t.push(n.data);\n                } while ((n = n.next));\n            }),\n            t\n          );\n        }),\n        (s.extent = function (t) {\n          return arguments.length\n            ? this.cover(+t[0][0], +t[0][1]).cover(+t[1][0], +t[1][1])\n            : isNaN(this._x0)\n            ? void 0\n            : [\n                [this._x0, this._y0],\n                [this._x1, this._y1],\n              ];\n        }),\n        (s.find = function (t, n, e) {\n          var r,\n            o,\n            u,\n            c,\n            f,\n            a,\n            l,\n            s = this._x0,\n            h = this._y0,\n            d = this._x1,\n            y = this._y1,\n            p = [],\n            v = this._root;\n          for (\n            v && p.push(new i(v, s, h, d, y)),\n              null == e\n                ? (e = 1 / 0)\n                : ((s = t - e),\n                  (h = n - e),\n                  (d = t + e),\n                  (y = n + e),\n                  (e *= e));\n            (a = p.pop());\n\n          )\n            if (\n              !(\n                !(v = a.node) ||\n                (o = a.x0) > d ||\n                (u = a.y0) > y ||\n                (c = a.x1) < s ||\n                (f = a.y1) < h\n              )\n            )\n              if (v.length) {\n                var g = (o + c) / 2,\n                  _ = (u + f) / 2;\n                p.push(\n                  new i(v[3], g, _, c, f),\n                  new i(v[2], o, _, g, f),\n                  new i(v[1], g, u, c, _),\n                  new i(v[0], o, u, g, _),\n                ),\n                  (l = ((n >= _) << 1) | (t >= g)) &&\n                    ((a = p[p.length - 1]),\n                    (p[p.length - 1] = p[p.length - 1 - l]),\n                    (p[p.length - 1 - l] = a));\n              } else {\n                var x = t - +this._x.call(null, v.data),\n                  b = n - +this._y.call(null, v.data),\n                  w = x * x + b * b;\n                if (w < e) {\n                  var m = Math.sqrt((e = w));\n                  (s = t - m),\n                    (h = n - m),\n                    (d = t + m),\n                    (y = n + m),\n                    (r = v.data);\n                }\n              }\n          return r;\n        }),\n        (s.remove = function (t) {\n          if (\n            isNaN((i = +this._x.call(null, t))) ||\n            isNaN((u = +this._y.call(null, t)))\n          )\n            return this;\n          var n,\n            e,\n            r,\n            o,\n            i,\n            u,\n            c,\n            f,\n            a,\n            l,\n            s,\n            h,\n            d = this._root,\n            y = this._x0,\n            p = this._y0,\n            v = this._x1,\n            g = this._y1;\n          if (!d) return this;\n          if (d.length)\n            for (;;) {\n              if (\n                ((a = i >= (c = (y + v) / 2)) ? (y = c) : (v = c),\n                (l = u >= (f = (p + g) / 2)) ? (p = f) : (g = f),\n                (n = d),\n                !(d = d[(s = (l << 1) | a)]))\n              )\n                return this;\n              if (!d.length) break;\n              (n[(s + 1) & 3] || n[(s + 2) & 3] || n[(s + 3) & 3]) &&\n                ((e = n), (h = s));\n            }\n          for (; d.data !== t; ) if (((r = d), !(d = d.next))) return this;\n          return (\n            (o = d.next) && delete d.next,\n            r\n              ? (o ? (r.next = o) : delete r.next, this)\n              : n\n              ? (o ? (n[s] = o) : delete n[s],\n                (d = n[0] || n[1] || n[2] || n[3]) &&\n                  d === (n[3] || n[2] || n[1] || n[0]) &&\n                  !d.length &&\n                  (e ? (e[h] = d) : (this._root = d)),\n                this)\n              : ((this._root = o), this)\n          );\n        }),\n        (s.removeAll = function (t) {\n          for (var n = 0, e = t.length; n < e; ++n) this.remove(t[n]);\n          return this;\n        }),\n        (s.root = function () {\n          return this._root;\n        }),\n        (s.size = function () {\n          var t = 0;\n          return (\n            this.visit(function (n) {\n              if (!n.length)\n                do {\n                  ++t;\n                } while ((n = n.next));\n            }),\n            t\n          );\n        }),\n        (s.visit = function (t) {\n          var n,\n            e,\n            r,\n            o,\n            u,\n            c,\n            f = [],\n            a = this._root;\n          for (\n            a && f.push(new i(a, this._x0, this._y0, this._x1, this._y1));\n            (n = f.pop());\n\n          )\n            if (\n              !t(\n                (a = n.node),\n                (r = n.x0),\n                (o = n.y0),\n                (u = n.x1),\n                (c = n.y1),\n              ) &&\n              a.length\n            ) {\n              var l = (r + u) / 2,\n                s = (o + c) / 2;\n              (e = a[3]) && f.push(new i(e, l, s, u, c)),\n                (e = a[2]) && f.push(new i(e, r, s, l, c)),\n                (e = a[1]) && f.push(new i(e, l, o, u, s)),\n                (e = a[0]) && f.push(new i(e, r, o, l, s));\n            }\n          return this;\n        }),\n        (s.visitAfter = function (t) {\n          var n,\n            e = [],\n            r = [];\n          for (\n            this._root &&\n            e.push(new i(this._root, this._x0, this._y0, this._x1, this._y1));\n            (n = e.pop());\n\n          ) {\n            var o = n.node;\n            if (o.length) {\n              var u,\n                c = n.x0,\n                f = n.y0,\n                a = n.x1,\n                l = n.y1,\n                s = (c + a) / 2,\n                h = (f + l) / 2;\n              (u = o[0]) && e.push(new i(u, c, f, s, h)),\n                (u = o[1]) && e.push(new i(u, s, f, a, h)),\n                (u = o[2]) && e.push(new i(u, c, h, s, l)),\n                (u = o[3]) && e.push(new i(u, s, h, a, l));\n            }\n            r.push(n);\n          }\n          for (; (n = r.pop()); ) t(n.node, n.x0, n.y0, n.x1, n.y1);\n          return this;\n        }),\n        (s.x = function (t) {\n          return arguments.length ? ((this._x = t), this) : this._x;\n        }),\n        (s.y = function (t) {\n          return arguments.length ? ((this._y = t), this) : this._y;\n        });\n      var h = function (t) {\n          return function () {\n            return t;\n          };\n        },\n        d = function (t) {\n          return 1e-6 * (t() - 0.5);\n        };\n      function y(t) {\n        return t.x + t.vx;\n      }\n      function p(t) {\n        return t.y + t.vy;\n      }\n      var v = function (t) {\n        var n,\n          e,\n          r,\n          o = 1,\n          i = 1;\n        function u() {\n          for (var t, u, a, l, s, h, v, g = n.length, _ = 0; _ < i; ++_)\n            for (u = f(n, y, p).visitAfter(c), t = 0; t < g; ++t)\n              (a = n[t]),\n                (h = e[a.index]),\n                (v = h * h),\n                (l = a.x + a.vx),\n                (s = a.y + a.vy),\n                u.visit(x);\n          function x(t, n, e, i, u) {\n            var c = t.data,\n              f = t.r,\n              y = h + f;\n            if (!c) return n > l + y || i < l - y || e > s + y || u < s - y;\n            if (c.index > a.index) {\n              var p = l - c.x - c.vx,\n                g = s - c.y - c.vy,\n                _ = p * p + g * g;\n              _ < y * y &&\n                (0 === p && (_ += (p = d(r)) * p),\n                0 === g && (_ += (g = d(r)) * g),\n                (_ = ((y - (_ = Math.sqrt(_))) / _) * o),\n                (a.vx += (p *= _) * (y = (f *= f) / (v + f))),\n                (a.vy += (g *= _) * y),\n                (c.vx -= p * (y = 1 - y)),\n                (c.vy -= g * y));\n            }\n          }\n        }\n        function c(t) {\n          if (t.data) return (t.r = e[t.data.index]);\n          for (var n = (t.r = 0); n < 4; ++n)\n            t[n] && t[n].r > t.r && (t.r = t[n].r);\n        }\n        function a() {\n          if (n) {\n            var r,\n              o,\n              i = n.length;\n            for (e = new Array(i), r = 0; r < i; ++r)\n              (o = n[r]), (e[o.index] = +t(o, r, n));\n          }\n        }\n        return (\n          \"function\" != typeof t && (t = h(null == t ? 1 : +t)),\n          (u.initialize = function (t, e) {\n            (n = t), (r = e), a();\n          }),\n          (u.iterations = function (t) {\n            return arguments.length ? ((i = +t), u) : i;\n          }),\n          (u.strength = function (t) {\n            return arguments.length ? ((o = +t), u) : o;\n          }),\n          (u.radius = function (n) {\n            return arguments.length\n              ? ((t = \"function\" == typeof n ? n : h(+n)), a(), u)\n              : t;\n          }),\n          u\n        );\n      };\n      function g(t) {\n        return (g =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function _(t) {\n        return t.index;\n      }\n      function x(t, n) {\n        var e = t.get(n);\n        if (!e) throw new Error(\"node not found: \" + n);\n        return e;\n      }\n      var b = function (t) {\n          var n,\n            e,\n            r,\n            o,\n            i,\n            u,\n            c = _,\n            f = function (t) {\n              return 1 / Math.min(o[t.source.index], o[t.target.index]);\n            },\n            a = h(30),\n            l = 1;\n          function s(r) {\n            for (var o = 0, c = t.length; o < l; ++o)\n              for (var f, a, s, h, y, p, v, g = 0; g < c; ++g)\n                (a = (f = t[g]).source),\n                  (h = (s = f.target).x + s.vx - a.x - a.vx || d(u)),\n                  (y = s.y + s.vy - a.y - a.vy || d(u)),\n                  (h *= p =\n                    (((p = Math.sqrt(h * h + y * y)) - e[g]) / p) * r * n[g]),\n                  (y *= p),\n                  (s.vx -= h * (v = i[g])),\n                  (s.vy -= y * v),\n                  (a.vx += h * (v = 1 - v)),\n                  (a.vy += y * v);\n          }\n          function y() {\n            if (r) {\n              var u,\n                f,\n                a = r.length,\n                l = t.length,\n                s = new Map(\n                  r.map(function (t, n) {\n                    return [c(t, n, r), t];\n                  }),\n                );\n              for (u = 0, o = new Array(a); u < l; ++u)\n                ((f = t[u]).index = u),\n                  \"object\" !== g(f.source) && (f.source = x(s, f.source)),\n                  \"object\" !== g(f.target) && (f.target = x(s, f.target)),\n                  (o[f.source.index] = (o[f.source.index] || 0) + 1),\n                  (o[f.target.index] = (o[f.target.index] || 0) + 1);\n              for (u = 0, i = new Array(l); u < l; ++u)\n                (f = t[u]),\n                  (i[u] =\n                    o[f.source.index] /\n                    (o[f.source.index] + o[f.target.index]));\n              (n = new Array(l)), p(), (e = new Array(l)), v();\n            }\n          }\n          function p() {\n            if (r)\n              for (var e = 0, o = t.length; e < o; ++e) n[e] = +f(t[e], e, t);\n          }\n          function v() {\n            if (r)\n              for (var n = 0, o = t.length; n < o; ++n) e[n] = +a(t[n], n, t);\n          }\n          return (\n            null == t && (t = []),\n            (s.initialize = function (t, n) {\n              (r = t), (u = n), y();\n            }),\n            (s.links = function (n) {\n              return arguments.length ? ((t = n), y(), s) : t;\n            }),\n            (s.id = function (t) {\n              return arguments.length ? ((c = t), s) : c;\n            }),\n            (s.iterations = function (t) {\n              return arguments.length ? ((l = +t), s) : l;\n            }),\n            (s.strength = function (t) {\n              return arguments.length\n                ? ((f = \"function\" == typeof t ? t : h(+t)), p(), s)\n                : f;\n            }),\n            (s.distance = function (t) {\n              return arguments.length\n                ? ((a = \"function\" == typeof t ? t : h(+t)), v(), s)\n                : a;\n            }),\n            s\n          );\n        },\n        w = { value: function () {} };\n      function m() {\n        for (var t, n = 0, e = arguments.length, r = {}; n < e; ++n) {\n          if (!(t = arguments[n] + \"\") || t in r || /[\\s.]/.test(t))\n            throw new Error(\"illegal type: \" + t);\n          r[t] = [];\n        }\n        return new S(r);\n      }\n      function S(t) {\n        this._ = t;\n      }\n      function N(t, n) {\n        return t\n          .trim()\n          .split(/^|\\s+/)\n          .map(function (t) {\n            var e = \"\",\n              r = t.indexOf(\".\");\n            if (\n              (r >= 0 && ((e = t.slice(r + 1)), (t = t.slice(0, r))),\n              t && !n.hasOwnProperty(t))\n            )\n              throw new Error(\"unknown type: \" + t);\n            return { type: t, name: e };\n          });\n      }\n      function O(t, n) {\n        for (var e, r = 0, o = t.length; r < o; ++r)\n          if ((e = t[r]).name === n) return e.value;\n      }\n      function k(t, n, e) {\n        for (var r = 0, o = t.length; r < o; ++r)\n          if (t[r].name === n) {\n            (t[r] = w), (t = t.slice(0, r).concat(t.slice(r + 1)));\n            break;\n          }\n        return null != e && t.push({ name: n, value: e }), t;\n      }\n      S.prototype = m.prototype = {\n        constructor: S,\n        on: function (t, n) {\n          var e,\n            r = this._,\n            o = N(t + \"\", r),\n            i = -1,\n            u = o.length;\n          if (!(arguments.length < 2)) {\n            if (null != n && \"function\" != typeof n)\n              throw new Error(\"invalid callback: \" + n);\n            for (; ++i < u; )\n              if ((e = (t = o[i]).type)) r[e] = k(r[e], t.name, n);\n              else if (null == n) for (e in r) r[e] = k(r[e], t.name, null);\n            return this;\n          }\n          for (; ++i < u; )\n            if ((e = (t = o[i]).type) && (e = O(r[e], t.name))) return e;\n        },\n        copy: function () {\n          var t = {},\n            n = this._;\n          for (var e in n) t[e] = n[e].slice();\n          return new S(t);\n        },\n        call: function (t, n) {\n          if ((e = arguments.length - 2) > 0)\n            for (var e, r, o = new Array(e), i = 0; i < e; ++i)\n              o[i] = arguments[i + 2];\n          if (!this._.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n          for (i = 0, e = (r = this._[t]).length; i < e; ++i)\n            r[i].value.apply(n, o);\n        },\n        apply: function (t, n, e) {\n          if (!this._.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n          for (var r = this._[t], o = 0, i = r.length; o < i; ++o)\n            r[o].value.apply(n, e);\n        },\n      };\n      var M = m;\n      function j(t) {\n        return (j =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var E,\n        A,\n        P = 0,\n        z = 0,\n        D = 0,\n        T = 0,\n        L = 0,\n        F = 0,\n        U =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : j(performance)) && performance.now\n            ? performance\n            : Date,\n        C =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : j(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function q() {\n        return L || (C(B), (L = U.now() + F));\n      }\n      function B() {\n        L = 0;\n      }\n      function Y() {\n        this._call = this._time = this._next = null;\n      }\n      function R(t, n, e) {\n        var r = new Y();\n        return r.restart(t, n, e), r;\n      }\n      function G() {\n        (L = (T = U.now()) + F), (P = z = 0);\n        try {\n          !(function () {\n            q(), ++P;\n            for (var t, n = E; n; )\n              (t = L - n._time) >= 0 && n._call.call(null, t), (n = n._next);\n            --P;\n          })();\n        } finally {\n          (P = 0),\n            (function () {\n              var t,\n                n,\n                e = E,\n                r = 1 / 0;\n              for (; e; )\n                e._call\n                  ? (r > e._time && (r = e._time), (t = e), (e = e._next))\n                  : ((n = e._next),\n                    (e._next = null),\n                    (e = t ? (t._next = n) : (E = n)));\n              (A = t), W(r);\n            })(),\n            (L = 0);\n        }\n      }\n      function I() {\n        var t = U.now(),\n          n = t - T;\n        n > 1e3 && ((F -= n), (T = t));\n      }\n      function W(t) {\n        P ||\n          (z && (z = clearTimeout(z)),\n          t - L > 24\n            ? (t < 1 / 0 && (z = setTimeout(G, t - U.now() - F)),\n              D && (D = clearInterval(D)))\n            : (D || ((T = U.now()), (D = setInterval(I, 1e3))), (P = 1), C(G)));\n      }\n      Y.prototype = R.prototype = {\n        constructor: Y,\n        restart: function (t, n, e) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (e = (null == e ? q() : +e) + (null == n ? 0 : +n)),\n            this._next ||\n              A === this ||\n              (A ? (A._next = this) : (E = this), (A = this)),\n            (this._call = t),\n            (this._time = e),\n            W();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), W());\n        },\n      };\n      var X = 4294967296;\n      function K(t) {\n        return t.x;\n      }\n      function H(t) {\n        return t.y;\n      }\n      var J = Math.PI * (3 - Math.sqrt(5)),\n        Q = function (t) {\n          var n,\n            e,\n            r = 1,\n            o = 0.001,\n            i = 1 - Math.pow(o, 1 / 300),\n            u = 0,\n            c = 0.6,\n            f = new Map(),\n            a = R(h),\n            l = M(\"tick\", \"end\"),\n            s =\n              ((e = 1),\n              function () {\n                return (e = (1664525 * e + 1013904223) % X) / X;\n              });\n          function h() {\n            d(), l.call(\"tick\", n), r < o && (a.stop(), l.call(\"end\", n));\n          }\n          function d(e) {\n            var o,\n              a,\n              l = t.length;\n            void 0 === e && (e = 1);\n            for (var s = 0; s < e; ++s)\n              for (\n                r += (u - r) * i,\n                  f.forEach(function (t) {\n                    t(r);\n                  }),\n                  o = 0;\n                o < l;\n                ++o\n              )\n                null == (a = t[o]).fx\n                  ? (a.x += a.vx *= c)\n                  : ((a.x = a.fx), (a.vx = 0)),\n                  null == a.fy\n                    ? (a.y += a.vy *= c)\n                    : ((a.y = a.fy), (a.vy = 0));\n            return n;\n          }\n          function y() {\n            for (var n, e = 0, r = t.length; e < r; ++e) {\n              if (\n                (((n = t[e]).index = e),\n                null != n.fx && (n.x = n.fx),\n                null != n.fy && (n.y = n.fy),\n                isNaN(n.x) || isNaN(n.y))\n              ) {\n                var o = 10 * Math.sqrt(0.5 + e),\n                  i = e * J;\n                (n.x = o * Math.cos(i)), (n.y = o * Math.sin(i));\n              }\n              (isNaN(n.vx) || isNaN(n.vy)) && (n.vx = n.vy = 0);\n            }\n          }\n          function p(n) {\n            return n.initialize && n.initialize(t, s), n;\n          }\n          return (\n            null == t && (t = []),\n            y(),\n            (n = {\n              tick: d,\n              restart: function () {\n                return a.restart(h), n;\n              },\n              stop: function () {\n                return a.stop(), n;\n              },\n              nodes: function (e) {\n                return arguments.length ? ((t = e), y(), f.forEach(p), n) : t;\n              },\n              alpha: function (t) {\n                return arguments.length ? ((r = +t), n) : r;\n              },\n              alphaMin: function (t) {\n                return arguments.length ? ((o = +t), n) : o;\n              },\n              alphaDecay: function (t) {\n                return arguments.length ? ((i = +t), n) : +i;\n              },\n              alphaTarget: function (t) {\n                return arguments.length ? ((u = +t), n) : u;\n              },\n              velocityDecay: function (t) {\n                return arguments.length ? ((c = 1 - t), n) : 1 - c;\n              },\n              randomSource: function (t) {\n                return arguments.length ? ((s = t), f.forEach(p), n) : s;\n              },\n              force: function (t, e) {\n                return arguments.length > 1\n                  ? (null == e ? f.delete(t) : f.set(t, p(e)), n)\n                  : f.get(t);\n              },\n              find: function (n, e, r) {\n                var o,\n                  i,\n                  u,\n                  c,\n                  f,\n                  a = 0,\n                  l = t.length;\n                for (null == r ? (r = 1 / 0) : (r *= r), a = 0; a < l; ++a)\n                  (u = (o = n - (c = t[a]).x) * o + (i = e - c.y) * i) < r &&\n                    ((f = c), (r = u));\n                return f;\n              },\n              on: function (t, e) {\n                return arguments.length > 1 ? (l.on(t, e), n) : l.on(t);\n              },\n            })\n          );\n        },\n        V = function () {\n          var t,\n            n,\n            e,\n            r,\n            o,\n            i = h(-30),\n            u = 1,\n            c = 1 / 0,\n            a = 0.81;\n          function l(e) {\n            var o,\n              i = t.length,\n              u = f(t, K, H).visitAfter(y);\n            for (r = e, o = 0; o < i; ++o) (n = t[o]), u.visit(p);\n          }\n          function s() {\n            if (t) {\n              var n,\n                e,\n                r = t.length;\n              for (o = new Array(r), n = 0; n < r; ++n)\n                (e = t[n]), (o[e.index] = +i(e, n, t));\n            }\n          }\n          function y(t) {\n            var n,\n              e,\n              r,\n              i,\n              u,\n              c = 0,\n              f = 0;\n            if (t.length) {\n              for (r = i = u = 0; u < 4; ++u)\n                (n = t[u]) &&\n                  (e = Math.abs(n.value)) &&\n                  ((c += n.value), (f += e), (r += e * n.x), (i += e * n.y));\n              (t.x = r / f), (t.y = i / f);\n            } else {\n              ((n = t).x = n.data.x), (n.y = n.data.y);\n              do {\n                c += o[n.data.index];\n              } while ((n = n.next));\n            }\n            t.value = c;\n          }\n          function p(t, i, f, l) {\n            if (!t.value) return !0;\n            var s = t.x - n.x,\n              h = t.y - n.y,\n              y = l - i,\n              p = s * s + h * h;\n            if ((y * y) / a < p)\n              return (\n                p < c &&\n                  (0 === s && (p += (s = d(e)) * s),\n                  0 === h && (p += (h = d(e)) * h),\n                  p < u && (p = Math.sqrt(u * p)),\n                  (n.vx += (s * t.value * r) / p),\n                  (n.vy += (h * t.value * r) / p)),\n                !0\n              );\n            if (!(t.length || p >= c)) {\n              (t.data !== n || t.next) &&\n                (0 === s && (p += (s = d(e)) * s),\n                0 === h && (p += (h = d(e)) * h),\n                p < u && (p = Math.sqrt(u * p)));\n              do {\n                t.data !== n &&\n                  ((y = (o[t.data.index] * r) / p),\n                  (n.vx += s * y),\n                  (n.vy += h * y));\n              } while ((t = t.next));\n            }\n          }\n          return (\n            (l.initialize = function (n, r) {\n              (t = n), (e = r), s();\n            }),\n            (l.strength = function (t) {\n              return arguments.length\n                ? ((i = \"function\" == typeof t ? t : h(+t)), s(), l)\n                : i;\n            }),\n            (l.distanceMin = function (t) {\n              return arguments.length ? ((u = t * t), l) : Math.sqrt(u);\n            }),\n            (l.distanceMax = function (t) {\n              return arguments.length ? ((c = t * t), l) : Math.sqrt(c);\n            }),\n            (l.theta = function (t) {\n              return arguments.length ? ((a = t * t), l) : Math.sqrt(a);\n            }),\n            l\n          );\n        },\n        Z = function (t, n, e) {\n          var r,\n            o,\n            i,\n            u = h(0.1);\n          function c(t) {\n            for (var u = 0, c = r.length; u < c; ++u) {\n              var f = r[u],\n                a = f.x - n || 1e-6,\n                l = f.y - e || 1e-6,\n                s = Math.sqrt(a * a + l * l),\n                h = ((i[u] - s) * o[u] * t) / s;\n              (f.vx += a * h), (f.vy += l * h);\n            }\n          }\n          function f() {\n            if (r) {\n              var n,\n                e = r.length;\n              for (o = new Array(e), i = new Array(e), n = 0; n < e; ++n)\n                (i[n] = +t(r[n], n, r)),\n                  (o[n] = isNaN(i[n]) ? 0 : +u(r[n], n, r));\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(+t)),\n            null == n && (n = 0),\n            null == e && (e = 0),\n            (c.initialize = function (t) {\n              (r = t), f();\n            }),\n            (c.strength = function (t) {\n              return arguments.length\n                ? ((u = \"function\" == typeof t ? t : h(+t)), f(), c)\n                : u;\n            }),\n            (c.radius = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), f(), c)\n                : t;\n            }),\n            (c.x = function (t) {\n              return arguments.length ? ((n = +t), c) : n;\n            }),\n            (c.y = function (t) {\n              return arguments.length ? ((e = +t), c) : e;\n            }),\n            c\n          );\n        },\n        $ = function (t) {\n          var n,\n            e,\n            r,\n            o = h(0.1);\n          function i(t) {\n            for (var o, i = 0, u = n.length; i < u; ++i)\n              (o = n[i]).vx += (r[i] - o.x) * e[i] * t;\n          }\n          function u() {\n            if (n) {\n              var i,\n                u = n.length;\n              for (e = new Array(u), r = new Array(u), i = 0; i < u; ++i)\n                e[i] = isNaN((r[i] = +t(n[i], i, n))) ? 0 : +o(n[i], i, n);\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(null == t ? 0 : +t)),\n            (i.initialize = function (t) {\n              (n = t), u();\n            }),\n            (i.strength = function (t) {\n              return arguments.length\n                ? ((o = \"function\" == typeof t ? t : h(+t)), u(), i)\n                : o;\n            }),\n            (i.x = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), u(), i)\n                : t;\n            }),\n            i\n          );\n        },\n        tt = function (t) {\n          var n,\n            e,\n            r,\n            o = h(0.1);\n          function i(t) {\n            for (var o, i = 0, u = n.length; i < u; ++i)\n              (o = n[i]).vy += (r[i] - o.y) * e[i] * t;\n          }\n          function u() {\n            if (n) {\n              var i,\n                u = n.length;\n              for (e = new Array(u), r = new Array(u), i = 0; i < u; ++i)\n                e[i] = isNaN((r[i] = +t(n[i], i, n))) ? 0 : +o(n[i], i, n);\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(null == t ? 0 : +t)),\n            (i.initialize = function (t) {\n              (n = t), u();\n            }),\n            (i.strength = function (t) {\n              return arguments.length\n                ? ((o = \"function\" == typeof t ? t : h(+t)), u(), i)\n                : o;\n            }),\n            (i.y = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), u(), i)\n                : t;\n            }),\n            i\n          );\n        };\n    },\n    176: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), o(e(402), n);\n    },\n    401: function (t, n, e) {\n      \"use strict\";\n      e.r(n);\n      var r = e(176);\n      n.default = r.ForceLayout;\n    },\n    402: function (t, n, e) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, n) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, n) {\n                  t.__proto__ = n;\n                }) ||\n              function (t, n) {\n                for (var e in n)\n                  Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);\n              })(t, n);\n          }),\n          function (t, n) {\n            if (\"function\" != typeof n && null !== n)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(n) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            r(t, n),\n              (t.prototype =\n                null === n\n                  ? Object.create(n)\n                  : ((e.prototype = n.prototype), new e()));\n          }),\n        i =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        u =\n          (this && this.__setModuleDefault) ||\n          (Object.create\n            ? function (t, n) {\n                Object.defineProperty(t, \"default\", {\n                  enumerable: !0,\n                  value: n,\n                });\n              }\n            : function (t, n) {\n                t.default = n;\n              }),\n        c =\n          (this && this.__importStar) ||\n          function (t) {\n            if (t && t.__esModule) return t;\n            var n = {};\n            if (null != t)\n              for (var e in t)\n                \"default\" !== e &&\n                  Object.prototype.hasOwnProperty.call(t, e) &&\n                  i(n, t, e);\n            return u(n, t), n;\n          },\n        f =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.ForceLayout = void 0);\n      var a = c(e(167)),\n        l = f(e(403)),\n        s = e(10),\n        h = e(7),\n        d = e(404),\n        y = (function (t) {\n          function n(n) {\n            var e = t.call(this) || this;\n            return (\n              (e.center = [0, 0]),\n              (e.nodeStrength = null),\n              (e.edgeStrength = null),\n              (e.preventOverlap = !1),\n              (e.clusterNodeStrength = null),\n              (e.clusterEdgeStrength = null),\n              (e.clusterEdgeDistance = null),\n              (e.clusterNodeSize = null),\n              (e.clusterFociStrength = null),\n              (e.linkDistance = 50),\n              (e.alphaDecay = 0.028),\n              (e.alphaMin = 0.001),\n              (e.alpha = 0.3),\n              (e.collideStrength = 1),\n              (e.workerEnabled = !1),\n              (e.tick = function () {}),\n              (e.onLayoutEnd = function () {}),\n              (e.ticking = void 0),\n              n && e.updateCfg(n),\n              e\n            );\n          }\n          return (\n            o(n, t),\n            (n.prototype.getDefaultCfg = function () {\n              return {\n                center: [0, 0],\n                nodeStrength: null,\n                edgeStrength: null,\n                preventOverlap: !1,\n                nodeSize: void 0,\n                nodeSpacing: void 0,\n                linkDistance: 50,\n                forceSimulation: null,\n                alphaDecay: 0.028,\n                alphaMin: 0.001,\n                alpha: 0.3,\n                collideStrength: 1,\n                clustering: !1,\n                clusterNodeStrength: -1,\n                clusterEdgeStrength: 0.1,\n                clusterEdgeDistance: 100,\n                clusterFociStrength: 0.8,\n                clusterNodeSize: 10,\n                tick: function () {},\n                onLayoutEnd: function () {},\n                workerEnabled: !1,\n              };\n            }),\n            (n.prototype.init = function (t) {\n              this.nodes = t.nodes || [];\n              var n = t.edges || [];\n              (this.edges = n.map(function (t) {\n                var n = {},\n                  e = [\"targetNode\", \"sourceNode\", \"startPoint\", \"endPoint\"];\n                return (\n                  Object.keys(t).forEach(function (r) {\n                    e.indexOf(r) > -1 || (n[r] = t[r]);\n                  }),\n                  n\n                );\n              })),\n                (this.ticking = !1);\n            }),\n            (n.prototype.execute = function (t) {\n              var n = this,\n                e = n.nodes,\n                r = n.edges;\n              if (!n.ticking) {\n                var o = n.forceSimulation,\n                  i = n.alphaMin,\n                  u = n.alphaDecay,\n                  c = n.alpha;\n                if (o) {\n                  if (t)\n                    if (\n                      (n.clustering &&\n                        n.clusterForce &&\n                        (n.clusterForce.nodes(e), n.clusterForce.links(r)),\n                      o.nodes(e),\n                      r && n.edgeForce)\n                    )\n                      n.edgeForce.links(r);\n                    else if (r && !n.edgeForce) {\n                      h = a\n                        .forceLink()\n                        .id(function (t) {\n                          return t.id;\n                        })\n                        .links(r);\n                      n.edgeStrength && h.strength(n.edgeStrength),\n                        n.linkDistance && h.distance(n.linkDistance),\n                        (n.edgeForce = h),\n                        o.force(\"link\", h);\n                    }\n                  n.preventOverlap && n.overlapProcess(o),\n                    o.alpha(c).restart(),\n                    (this.ticking = !0);\n                } else\n                  try {\n                    var f = a.forceManyBody();\n                    if (\n                      (n.nodeStrength && f.strength(n.nodeStrength),\n                      (o = a.forceSimulation().nodes(e)),\n                      n.clustering)\n                    ) {\n                      var s = l.default();\n                      s\n                        .centerX(n.center[0])\n                        .centerY(n.center[1])\n                        .template(\"force\")\n                        .strength(n.clusterFociStrength),\n                        r && s.links(r),\n                        e && s.nodes(e),\n                        s\n                          .forceLinkDistance(n.clusterEdgeDistance)\n                          .forceLinkStrength(n.clusterEdgeStrength)\n                          .forceCharge(n.clusterNodeStrength)\n                          .forceNodeSize(n.clusterNodeSize),\n                        (n.clusterForce = s),\n                        o.force(\"group\", s);\n                    }\n                    if (\n                      (o\n                        .force(\n                          \"center\",\n                          a.forceCenter(n.center[0], n.center[1]),\n                        )\n                        .force(\"charge\", f)\n                        .alpha(c)\n                        .alphaDecay(u)\n                        .alphaMin(i),\n                      n.preventOverlap && n.overlapProcess(o),\n                      r)\n                    ) {\n                      var h = a\n                        .forceLink()\n                        .id(function (t) {\n                          return t.id;\n                        })\n                        .links(r);\n                      n.edgeStrength && h.strength(n.edgeStrength),\n                        n.linkDistance && h.distance(n.linkDistance),\n                        (n.edgeForce = h),\n                        o.force(\"link\", h);\n                    }\n                    if (\n                      (n.workerEnabled &&\n                        !p() &&\n                        ((n.workerEnabled = !1),\n                        console.warn(\n                          \"workerEnabled option is only supported when running in web worker.\",\n                        )),\n                      n.workerEnabled)\n                    ) {\n                      o.stop();\n                      for (\n                        var y = (function (t) {\n                            var n = t.alphaMin(),\n                              e = t.alphaTarget(),\n                              r = t.alpha(),\n                              o =\n                                Math.log((n - e) / (r - e)) /\n                                Math.log(1 - t.alphaDecay());\n                            return Math.ceil(o);\n                          })(o),\n                          v = 1;\n                        v <= y;\n                        v++\n                      )\n                        o.tick(),\n                          postMessage(\n                            {\n                              nodes: e,\n                              currentTick: v,\n                              totalTicks: y,\n                              type: d.LAYOUT_MESSAGE.TICK,\n                            },\n                            void 0,\n                          );\n                      n.ticking = !1;\n                    } else\n                      o\n                        .on(\"tick\", function () {\n                          n.tick();\n                        })\n                        .on(\"end\", function () {\n                          (n.ticking = !1), n.onLayoutEnd && n.onLayoutEnd();\n                        }),\n                        (n.ticking = !0);\n                    (n.forceSimulation = o), (n.ticking = !0);\n                  } catch (t) {\n                    (n.ticking = !1), console.warn(t);\n                  }\n              }\n            }),\n            (n.prototype.overlapProcess = function (t) {\n              var n,\n                e,\n                r = this.nodeSize,\n                o = this.nodeSpacing,\n                i = this.collideStrength;\n              if (\n                ((e = s.isNumber(o)\n                  ? function () {\n                      return o;\n                    }\n                  : s.isFunction(o)\n                  ? o\n                  : function () {\n                      return 0;\n                    }),\n                r)\n              )\n                if (s.isFunction(r))\n                  n = function (t) {\n                    return r(t) + e(t);\n                  };\n                else if (s.isArray(r)) {\n                  var u = (r[0] > r[1] ? r[0] : r[1]) / 2;\n                  n = function (t) {\n                    return u + e(t);\n                  };\n                } else if (s.isNumber(r)) {\n                  var c = r / 2;\n                  n = function (t) {\n                    return c + e(t);\n                  };\n                } else\n                  n = function () {\n                    return 10;\n                  };\n              else\n                n = function (t) {\n                  return t.size\n                    ? s.isArray(t.size)\n                      ? (t.size[0] > t.size[1] ? t.size[0] : t.size[1]) / 2 +\n                        e(t)\n                      : t.size / 2 + e(t)\n                    : 10 + e(t);\n                };\n              t.force(\"collisionForce\", a.forceCollide(n).strength(i));\n            }),\n            (n.prototype.updateCfg = function (t) {\n              this.ticking &&\n                (this.forceSimulation.stop(), (this.ticking = !1)),\n                (this.forceSimulation = null),\n                Object.assign(this, t);\n            }),\n            (n.prototype.destroy = function () {\n              this.ticking &&\n                (this.forceSimulation.stop(), (this.ticking = !1)),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            n\n          );\n        })(h.Base);\n      function p() {\n        return (\n          \"undefined\" != typeof WorkerGlobalScope &&\n          self instanceof WorkerGlobalScope\n        );\n      }\n      n.ForceLayout = y;\n    },\n    403: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__setModuleDefault) ||\n          (Object.create\n            ? function (t, n) {\n                Object.defineProperty(t, \"default\", {\n                  enumerable: !0,\n                  value: n,\n                });\n              }\n            : function (t, n) {\n                t.default = n;\n              }),\n        i =\n          (this && this.__importStar) ||\n          function (t) {\n            if (t && t.__esModule) return t;\n            var n = {};\n            if (null != t)\n              for (var e in t)\n                \"default\" !== e &&\n                  Object.prototype.hasOwnProperty.call(t, e) &&\n                  r(n, t, e);\n            return o(n, t), n;\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 });\n      var u = i(e(167));\n      n.default = function () {\n        function t(t) {\n          return function () {\n            return t;\n          };\n        }\n        var n,\n          e = function (t) {\n            return t.cluster;\n          },\n          r = t(1),\n          o = t(-1),\n          i = t(100),\n          c = t(0.1),\n          f = [0, 0],\n          a = [],\n          l = {},\n          s = [],\n          h = 100,\n          d = 100,\n          y = { none: { x: 0, y: 0 } },\n          p = [],\n          v = \"force\",\n          g = !0,\n          _ = 0.1;\n        function x(t) {\n          if (!g) return x;\n          n.tick(), w();\n          for (var r = 0, o = a.length, i = void 0, u = t * _; r < o; ++r)\n            ((i = a[r]).vx += (y[e(i)].x - i.x) * u),\n              (i.vy += (y[e(i)].y - i.y) * u);\n        }\n        function b() {\n          a &&\n            (function () {\n              if (!a || !a.length) return;\n              if (void 0 === e(a[0]))\n                throw Error(\n                  \"Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInABox.groupBy('clusterAttr') before calling .links()\",\n                );\n              var t =\n                ((y = []),\n                (v = []),\n                (g = {}),\n                (_ = []),\n                (f = (function (t) {\n                  var n = {};\n                  return (\n                    t.forEach(function (t) {\n                      var r = e(t);\n                      n[r] || (n[r] = { count: 0, sumforceNodeSize: 0 });\n                    }),\n                    t.forEach(function (t) {\n                      var o = e(t),\n                        i = r(t),\n                        u = n[o];\n                      (u.count = u.count + 1),\n                        (u.sumforceNodeSize =\n                          u.sumforceNodeSize + Math.PI * (i * i) * 1.3),\n                        (n[o] = u);\n                    }),\n                    n\n                  );\n                })(a)),\n                (_ = (function (t) {\n                  var n = {},\n                    r = [];\n                  return (\n                    t.forEach(function (t) {\n                      var r = (function (t) {\n                          var n = e(l[t.source]),\n                            r = e(l[t.target]);\n                          return n <= r ? n + \"~\" + r : r + \"~\" + n;\n                        })(t),\n                        o = 0;\n                      void 0 !== n[r] && (o = n[r]), (o += 1), (n[r] = o);\n                    }),\n                    Object.entries(n).forEach(function (t) {\n                      var n = t[0],\n                        e = t[1],\n                        o = n.split(\"~\")[0],\n                        i = n.split(\"~\")[1];\n                      void 0 !== o &&\n                        void 0 !== i &&\n                        r.push({ source: o, target: i, count: e });\n                    }),\n                    r\n                  );\n                })(s)),\n                Object.keys(f).forEach(function (t, n) {\n                  var e = f[t];\n                  y.push({\n                    id: t,\n                    size: e.count,\n                    r: Math.sqrt(e.sumforceNodeSize / Math.PI),\n                  }),\n                    (g[t] = n);\n                }),\n                _.forEach(function (t) {\n                  var n = g[t.source],\n                    e = g[t.target];\n                  void 0 !== n &&\n                    void 0 !== e &&\n                    v.push({ source: n, target: e, count: t.count });\n                }),\n                { nodes: y, links: v });\n              var f, y, v, g, _;\n              (n = u\n                .forceSimulation(t.nodes)\n                .force(\"x\", u.forceX(h).strength(0.1))\n                .force(\"y\", u.forceY(d).strength(0.1))\n                .force(\n                  \"collide\",\n                  u\n                    .forceCollide(function (t) {\n                      return t.r;\n                    })\n                    .iterations(4),\n                )\n                .force(\"charge\", u.forceManyBody().strength(o))\n                .force(\n                  \"links\",\n                  u\n                    .forceLink(t.nodes.length ? t.links : [])\n                    .distance(i)\n                    .strength(c),\n                )),\n                (p = n.nodes()),\n                w();\n            })();\n        }\n        function w() {\n          return (\n            (y = { none: { x: 0, y: 0 } }),\n            p.forEach(function (t) {\n              y[t.id] = { x: t.x - f[0], y: t.y - f[1] };\n            }),\n            y\n          );\n        }\n        function m(t) {\n          (l = {}),\n            t.forEach(function (t) {\n              l[t.id] = t;\n            });\n        }\n        return (\n          (x.initialize = function (t) {\n            (a = t), b();\n          }),\n          (x.template = function (t) {\n            return arguments.length ? ((v = t), b(), x) : v;\n          }),\n          (x.groupBy = function (t) {\n            return arguments.length\n              ? \"string\" == typeof t\n                ? ((e = function (n) {\n                    return n[t];\n                  }),\n                  x)\n                : ((e = t), x)\n              : e;\n          }),\n          (x.enableGrouping = function (t) {\n            return arguments.length ? ((g = t), x) : g;\n          }),\n          (x.strength = function (t) {\n            return arguments.length ? ((_ = t), x) : _;\n          }),\n          (x.centerX = function (t) {\n            return arguments.length ? ((h = t), x) : h;\n          }),\n          (x.centerY = function (t) {\n            return arguments.length ? ((d = t), x) : d;\n          }),\n          (x.nodes = function (t) {\n            return arguments.length ? (m(t || []), (a = t || []), x) : a;\n          }),\n          (x.links = function (t) {\n            return arguments.length ? ((s = t || []), b(), x) : s;\n          }),\n          (x.forceNodeSize = function (n) {\n            return arguments.length\n              ? ((r = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : r;\n          }),\n          (x.nodeSize = x.forceNodeSize),\n          (x.forceCharge = function (n) {\n            return arguments.length\n              ? ((o = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : o;\n          }),\n          (x.forceLinkDistance = function (n) {\n            return arguments.length\n              ? ((i = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : i;\n          }),\n          (x.forceLinkStrength = function (n) {\n            return arguments.length\n              ? ((c = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : c;\n          }),\n          (x.offset = function (t) {\n            return arguments.length ? ((f = t), x) : f;\n          }),\n          (x.getFocis = w),\n          x\n        );\n      };\n    },\n    404: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.LAYOUT_MESSAGE = void 0),\n        (n.LAYOUT_MESSAGE = {\n          RUN: \"LAYOUT_RUN\",\n          END: \"LAYOUT_END\",\n          ERROR: \"LAYOUT_ERROR\",\n          TICK: \"LAYOUT_TICK\",\n          GPURUN: \"GPU_LAYOUT_RUN\",\n          GPUEND: \"GPU_LAYOUT_END\",\n        });\n    },\n    7: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), (n.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      n.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=forceLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/fruchtermanLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var o = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            n.d(\n              r,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 405))\n    );\n  })({\n    10: function (t, e, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[n];\n                    },\n                  });\n              }\n            : function (t, e, n, r) {\n                void 0 === r && (r = n), (t[r] = e[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var n in t)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(e, n) ||\n                r(e, t, n);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(n(11), e),\n        o(n(12), e),\n        o(n(13), e),\n        o(n(14), e),\n        o(n(15), e),\n        o(n(16), e);\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    14: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n          e[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (e[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (e[r][o] = t[r][o])\n              : (e[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              e[r][o] > e[r][i] + e[i][o] && (e[r][o] = e[r][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                u = i[n],\n                c = i[r];\n              (o[u][c] = 1), e || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (e = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    177: function (t, e, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.FruchtermanLayout = void 0);\n      var i = n(7),\n        u = n(10),\n        c = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.maxIteration = 1e3),\n              (n.gravity = 10),\n              (n.speed = 5),\n              (n.clustering = !1),\n              (n.clusterGravity = 10),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.nodeMap = {}),\n              (n.nodeIdxMap = {}),\n              (n.onLayoutEnd = function () {}),\n              (n.tick = function () {}),\n              n.updateCfg(e),\n              n\n            );\n          }\n          return (\n            o(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                maxIteration: 1e3,\n                gravity: 10,\n                speed: 1,\n                clustering: !1,\n                clusterGravity: 10,\n              };\n            }),\n            (e.prototype.execute = function () {\n              var t = this,\n                e = this.nodes;\n              if (\n                (void 0 !== this.timeInterval &&\n                  \"undefined\" != typeof window &&\n                  window.clearInterval(this.timeInterval),\n                e && 0 !== e.length)\n              ) {\n                this.width ||\n                  \"undefined\" == typeof window ||\n                  (this.width = window.innerWidth),\n                  this.height ||\n                    \"undefined\" == typeof window ||\n                    (this.height = window.innerHeight),\n                  this.center ||\n                    (this.center = [this.width / 2, this.height / 2]);\n                var n = this.center;\n                if (1 === e.length)\n                  return (\n                    (e[0].x = n[0]),\n                    (e[0].y = n[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                var r = {},\n                  o = {};\n                return (\n                  e.forEach(function (e, n) {\n                    u.isNumber(e.x) || (e.x = Math.random() * t.width),\n                      u.isNumber(e.y) || (e.y = Math.random() * t.height),\n                      (r[e.id] = e),\n                      (o[e.id] = n);\n                  }),\n                  (this.nodeMap = r),\n                  (this.nodeIdxMap = o),\n                  this.run()\n                );\n              }\n              this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (e.prototype.run = function () {\n              var t = this,\n                e = t.nodes;\n              if (e) {\n                var n = t.edges,\n                  r = t.maxIteration,\n                  o = t.center,\n                  i = t.height * t.width,\n                  c = Math.sqrt(i) / 10,\n                  s = i / (e.length + 1),\n                  a = Math.sqrt(s),\n                  f = t.gravity,\n                  y = t.speed,\n                  l = t.clustering,\n                  d = {};\n                if (l)\n                  for (var p in (e.forEach(function (t) {\n                    if (void 0 === d[t.cluster]) {\n                      var e = { name: t.cluster, cx: 0, cy: 0, count: 0 };\n                      d[t.cluster] = e;\n                    }\n                    var n = d[t.cluster];\n                    u.isNumber(t.x) && (n.cx += t.x),\n                      u.isNumber(t.y) && (n.cy += t.y),\n                      n.count++;\n                  }),\n                  d))\n                    (d[p].cx /= d[p].count), (d[p].cy /= d[p].count);\n                if (\"undefined\" != typeof window) {\n                  var h = 0;\n                  return (\n                    (this.timeInterval = window.setInterval(function () {\n                      if (e) {\n                        var i = [];\n                        if (\n                          (e.forEach(function (t, e) {\n                            i[e] = { x: 0, y: 0 };\n                          }),\n                          t.applyCalculate(e, n, i, a, s),\n                          l)\n                        ) {\n                          var p = t.clusterGravity || f;\n                          for (var v in (e.forEach(function (t, e) {\n                            if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                              var n = d[t.cluster],\n                                r = Math.sqrt(\n                                  (t.x - n.cx) * (t.x - n.cx) +\n                                    (t.y - n.cy) * (t.y - n.cy),\n                                ),\n                                o = a * p;\n                              (i[e].x -= (o * (t.x - n.cx)) / r),\n                                (i[e].y -= (o * (t.y - n.cy)) / r);\n                            }\n                          }),\n                          d))\n                            (d[v].cx = 0), (d[v].cy = 0), (d[v].count = 0);\n                          for (var v in (e.forEach(function (t) {\n                            var e = d[t.cluster];\n                            u.isNumber(t.x) && (e.cx += t.x),\n                              u.isNumber(t.y) && (e.cy += t.y),\n                              e.count++;\n                          }),\n                          d))\n                            (d[v].cx /= d[v].count), (d[v].cy /= d[v].count);\n                        }\n                        e.forEach(function (t, e) {\n                          if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                            var n = 0.01 * a * f;\n                            (i[e].x -= n * (t.x - o[0])),\n                              (i[e].y -= n * (t.y - o[1]));\n                          }\n                        }),\n                          e.forEach(function (t, e) {\n                            if (u.isNumber(t.fx) && u.isNumber(t.fy))\n                              return (t.x = t.fx), void (t.y = t.fy);\n                            if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                              var n = Math.sqrt(\n                                i[e].x * i[e].x + i[e].y * i[e].y,\n                              );\n                              if (n > 0) {\n                                var r = Math.min(c * (y / 800), n);\n                                (t.x += (i[e].x / n) * r),\n                                  (t.y += (i[e].y / n) * r);\n                              }\n                            }\n                          }),\n                          t.tick && t.tick(),\n                          ++h >= r &&\n                            (t.onLayoutEnd && t.onLayoutEnd(),\n                            window.clearInterval(t.timeInterval));\n                      }\n                    }, 0)),\n                    { nodes: e, edges: n }\n                  );\n                }\n              }\n            }),\n            (e.prototype.applyCalculate = function (t, e, n, r, o) {\n              this.calRepulsive(t, n, o), e && this.calAttractive(e, n, r);\n            }),\n            (e.prototype.calRepulsive = function (t, e, n) {\n              t.forEach(function (r, o) {\n                (e[o] = { x: 0, y: 0 }),\n                  t.forEach(function (t, i) {\n                    if (\n                      o !== i &&\n                      u.isNumber(r.x) &&\n                      u.isNumber(t.x) &&\n                      u.isNumber(r.y) &&\n                      u.isNumber(t.y)\n                    ) {\n                      var c = r.x - t.x,\n                        s = r.y - t.y,\n                        a = c * c + s * s;\n                      if (0 === a) {\n                        a = 1;\n                        var f = o > i ? 1 : -1;\n                        (c = 0.01 * f), (s = 0.01 * f);\n                      }\n                      var y = n / a;\n                      (e[o].x += c * y), (e[o].y += s * y);\n                    }\n                  });\n              });\n            }),\n            (e.prototype.calAttractive = function (t, e, n) {\n              var r = this;\n              t.forEach(function (t) {\n                if (t.source && t.target) {\n                  var o = r.nodeIdxMap[t.source],\n                    i = r.nodeIdxMap[t.target];\n                  if (o !== i) {\n                    var c = r.nodeMap[t.source],\n                      s = r.nodeMap[t.target];\n                    if (\n                      u.isNumber(s.x) &&\n                      u.isNumber(c.x) &&\n                      u.isNumber(s.y) &&\n                      u.isNumber(c.y)\n                    ) {\n                      var a = s.x - c.x,\n                        f = s.y - c.y,\n                        y = Math.sqrt(a * a + f * f),\n                        l = (y * y) / n;\n                      (e[i].x -= (a / y) * l),\n                        (e[i].y -= (f / y) * l),\n                        (e[o].x += (a / y) * l),\n                        (e[o].y += (f / y) * l);\n                    }\n                  }\n                }\n              });\n            }),\n            (e.prototype.stop = function () {\n              this.timeInterval &&\n                \"undefined\" != typeof window &&\n                window.clearInterval(this.timeInterval);\n            }),\n            (e.prototype.destroy = function () {\n              this.stop(),\n                (this.tick = null),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.getType = function () {\n              return \"fruchterman\";\n            }),\n            e\n          );\n        })(i.Base);\n      e.FruchtermanLayout = c;\n    },\n    405: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var r = n(177);\n      e.default = r.FruchtermanLayout;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=fruchtermanLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/gForceLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var o = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            n.d(\n              r,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 406))\n    );\n  })({\n    10: function (t, e, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[n];\n                    },\n                  });\n              }\n            : function (t, e, n, r) {\n                void 0 === r && (r = n), (t[r] = e[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var n in t)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(e, n) ||\n                r(e, t, n);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(n(11), e),\n        o(n(12), e),\n        o(n(13), e),\n        o(n(14), e),\n        o(n(15), e),\n        o(n(16), e);\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    14: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n          e[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (e[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (e[r][o] = t[r][o])\n              : (e[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              e[r][o] > e[r][i] + e[i][o] && (e[r][o] = e[r][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                u = i[n],\n                a = i[r];\n              (o[u][a] = 1), e || (o[a][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (e = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    178: function (t, e, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.GForceLayout = void 0);\n      var i = n(7),\n        u = n(10),\n        a = function (t, e) {\n          return t\n            ? u.isNumber(t)\n              ? function (e) {\n                  return t;\n                }\n              : t\n            : function (t) {\n                return e || 1;\n              };\n        },\n        c = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.maxIteration = 1e3),\n              (n.edgeStrength = 200),\n              (n.nodeStrength = 1e3),\n              (n.coulombDisScale = 0.005),\n              (n.damping = 0.9),\n              (n.maxSpeed = 1e3),\n              (n.minMovement = 0.5),\n              (n.interval = 0.02),\n              (n.factor = 1),\n              (n.linkDistance = 1),\n              (n.gravity = 10),\n              (n.preventOverlap = !0),\n              (n.tick = function () {}),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.nodeMap = {}),\n              (n.nodeIdxMap = {}),\n              n.updateCfg(e),\n              n\n            );\n          }\n          return (\n            o(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { maxIteration: 500, gravity: 10, enableTick: !0 };\n            }),\n            (e.prototype.execute = function () {\n              var t = this,\n                e = t.nodes;\n              if (\n                (void 0 !== t.timeInterval &&\n                  \"undefined\" != typeof window &&\n                  window.clearInterval(t.timeInterval),\n                e && 0 !== e.length)\n              ) {\n                t.width ||\n                  \"undefined\" == typeof window ||\n                  (t.width = window.innerWidth),\n                  t.height ||\n                    \"undefined\" == typeof window ||\n                    (t.height = window.innerHeight),\n                  t.center || (t.center = [t.width / 2, t.height / 2]);\n                var n = t.center;\n                if (1 === e.length)\n                  return (\n                    (e[0].x = n[0]),\n                    (e[0].y = n[1]),\n                    void (t.onLayoutEnd && t.onLayoutEnd())\n                  );\n                var r = {},\n                  o = {};\n                e.forEach(function (e, n) {\n                  u.isNumber(e.x) || (e.x = Math.random() * t.width),\n                    u.isNumber(e.y) || (e.y = Math.random() * t.height),\n                    (r[e.id] = e),\n                    (o[e.id] = n);\n                }),\n                  (t.nodeMap = r),\n                  (t.nodeIdxMap = o),\n                  (t.linkDistance = a(t.linkDistance, 1)),\n                  (t.nodeStrength = a(t.nodeStrength, 1)),\n                  (t.edgeStrength = a(t.edgeStrength, 1));\n                var i,\n                  c = t.nodeSize;\n                if (t.preventOverlap) {\n                  var s,\n                    f = t.nodeSpacing;\n                  (s = u.isNumber(f)\n                    ? function () {\n                        return f;\n                      }\n                    : u.isFunction(f)\n                    ? f\n                    : function () {\n                        return 0;\n                      }),\n                    (i = c\n                      ? u.isArray(c)\n                        ? function (t) {\n                            return (c[0] > c[1] ? c[0] : c[1]) + s(t);\n                          }\n                        : function (t) {\n                            return c + s(t);\n                          }\n                      : function (t) {\n                          return t.size\n                            ? u.isArray(t.size)\n                              ? (t.size[0] > t.size[1]\n                                  ? t.size[0]\n                                  : t.size[1]) + s(t)\n                              : t.size + s(t)\n                            : 10 + s(t);\n                        });\n                }\n                t.nodeSize = i;\n                var d = t.edges;\n                (t.degrees = u.getDegree(e.length, t.nodeIdxMap, d)),\n                  t.getMass ||\n                    (t.getMass = function (e) {\n                      return t.degrees[t.nodeIdxMap[e.id]] || 1;\n                    }),\n                  t.run();\n              } else t.onLayoutEnd && t.onLayoutEnd();\n            }),\n            (e.prototype.run = function () {\n              var t = this,\n                e = t.nodes,\n                n = t.edges,\n                r = t.maxIteration;\n              if (\"undefined\" != typeof window) {\n                var o = 0;\n                this.timeInterval = window.setInterval(function () {\n                  var i = [],\n                    u = [];\n                  if (e) {\n                    e.forEach(function (t, e) {\n                      (i[2 * e] = 0),\n                        (i[2 * e + 1] = 0),\n                        (u[2 * e] = 0),\n                        (u[2 * e + 1] = 0);\n                    }),\n                      t.calRepulsive(i, e),\n                      n && t.calAttractive(i, n),\n                      t.calGravity(i, e);\n                    var a = Math.max(0.02, t.interval - 0.002 * o);\n                    t.updateVelocity(i, u, a, e);\n                    var c = [];\n                    e.forEach(function (t) {\n                      c.push({ x: t.x, y: t.y });\n                    }),\n                      t.updatePosition(u, a, e),\n                      t.tick && t.tick();\n                    var s = 0;\n                    e.forEach(function (t, e) {\n                      var n = t.x - c[e].x,\n                        r = t.y - c[e].y;\n                      s += Math.sqrt(n * n + r * r);\n                    }),\n                      (s /= e.length) < t.minMovement &&\n                        (window.clearInterval(t.timeInterval),\n                        t.onLayoutEnd && t.onLayoutEnd()),\n                      ++o >= r &&\n                        (t.onLayoutEnd && t.onLayoutEnd(),\n                        window.clearInterval(t.timeInterval));\n                  }\n                }, 0);\n              }\n            }),\n            (e.prototype.calRepulsive = function (t, e) {\n              var n = this.getMass,\n                r = this.nodeStrength,\n                o = this.factor,\n                i = this.coulombDisScale,\n                u = this.preventOverlap,\n                a = this.nodeSize;\n              e.forEach(function (c, s) {\n                var f = n ? n(c) : 1;\n                e.forEach(function (e, d) {\n                  if (!(s >= d)) {\n                    var l = c.x - e.x,\n                      p = c.y - e.y,\n                      y = Math.sqrt(l * l + p * p) + 0.01,\n                      h = (y + 0.1) * i,\n                      v = l / y,\n                      g = p / y,\n                      b = (((r(c) + r(e)) / 2) * o) / (h * h),\n                      m = n ? n(e) : 1;\n                    if (\n                      ((t[2 * s] += v * b),\n                      (t[2 * s + 1] += g * b),\n                      (t[2 * d] -= v * b),\n                      (t[2 * d + 1] -= g * b),\n                      u && y < (a(c) + a(e)) / 2)\n                    ) {\n                      var x = (r(c) + r(e)) / 2 / (y * y);\n                      (t[2 * s] += (v * x) / f),\n                        (t[2 * s + 1] += (g * x) / f),\n                        (t[2 * d] -= (v * x) / m),\n                        (t[2 * d + 1] -= (g * x) / m);\n                    }\n                  }\n                });\n              });\n            }),\n            (e.prototype.calAttractive = function (t, e) {\n              var n = this.nodeMap,\n                r = this.nodeIdxMap,\n                o = this.linkDistance,\n                i = this.edgeStrength,\n                u = this.getMass;\n              e.forEach(function (e, a) {\n                var c = n[e.source],\n                  s = n[e.target],\n                  f = s.x - c.x,\n                  d = s.y - c.y,\n                  l = Math.sqrt(f * f + d * d) + 0.01,\n                  p = f / l,\n                  y = d / l,\n                  h = ((o(e) || 1) - l) * i(e),\n                  v = r[e.source],\n                  g = r[e.target],\n                  b = u ? u(c) : 1,\n                  m = u ? u(s) : 1;\n                (t[2 * v] -= (p * h) / b),\n                  (t[2 * v + 1] -= (y * h) / b),\n                  (t[2 * g] += (p * h) / m),\n                  (t[2 * g + 1] += (y * h) / m);\n              });\n            }),\n            (e.prototype.calGravity = function (t, e) {\n              for (\n                var n = this.center,\n                  r = this.gravity,\n                  o = this.degrees,\n                  i = e.length,\n                  a = 0;\n                a < i;\n                a++\n              ) {\n                var c = e[a],\n                  s = c.x - n[0],\n                  f = c.y - n[1],\n                  d = r;\n                if (this.getCenter) {\n                  var l = this.getCenter(c, o[a]);\n                  l &&\n                    u.isNumber(l[0]) &&\n                    u.isNumber(l[1]) &&\n                    u.isNumber(l[2]) &&\n                    ((s = c.x - l[0]), (f = c.y - l[1]), (d = l[2]));\n                }\n                d && ((t[2 * a] -= d * s), (t[2 * a + 1] -= d * f));\n              }\n            }),\n            (e.prototype.updateVelocity = function (t, e, n, r) {\n              var o = this,\n                i = n * o.damping;\n              r.forEach(function (n, r) {\n                var u = t[2 * r] * i || 0.01,\n                  a = t[2 * r + 1] * i || 0.01,\n                  c = Math.sqrt(u * u + a * a);\n                if (c > o.maxSpeed) {\n                  var s = o.maxSpeed / c;\n                  (u *= s), (a *= s);\n                }\n                (e[2 * r] = u), (e[2 * r + 1] = a);\n              });\n            }),\n            (e.prototype.updatePosition = function (t, e, n) {\n              n.forEach(function (n, r) {\n                if (u.isNumber(n.fx) && u.isNumber(n.fy))\n                  return (n.x = n.fx), void (n.y = n.fy);\n                var o = t[2 * r] * e,\n                  i = t[2 * r + 1] * e;\n                (n.x += o), (n.y += i);\n              });\n            }),\n            (e.prototype.stop = function () {\n              this.timeInterval &&\n                \"undefined\" != typeof window &&\n                window.clearInterval(this.timeInterval);\n            }),\n            (e.prototype.destroy = function () {\n              this.stop(),\n                (this.tick = null),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.getType = function () {\n              return \"gForce\";\n            }),\n            e\n          );\n        })(i.Base);\n      e.GForceLayout = c;\n    },\n    406: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var r = n(178);\n      e.default = r.GForceLayout;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=gForceLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/gridLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.f6 = t())\n    : (e.f6 = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function o(r) {\n      if (t[r]) return t[r].exports;\n      var n = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(n.exports, n, n.exports, o), (n.l = !0), n.exports;\n    }\n    return (\n      (o.m = e),\n      (o.c = t),\n      (o.d = function (e, t, r) {\n        o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (o.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (e, t) {\n        if ((1 & t && (e = o(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (o.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var n in e)\n            o.d(\n              r,\n              n,\n              function (t) {\n                return e[t];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (o.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return o.d(t, \"a\", t), t;\n      }),\n      (o.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (o.p = \"\"),\n      o((o.s = 407))\n    );\n  })({\n    10: function (e, t, o) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, o, r) {\n                void 0 === r && (r = o),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[o];\n                    },\n                  });\n              }\n            : function (e, t, o, r) {\n                void 0 === r && (r = o), (e[r] = t[o]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var o in e)\n              \"default\" === o ||\n                Object.prototype.hasOwnProperty.call(t, o) ||\n                r(t, e, o);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        n(o(11), t),\n        n(o(12), t),\n        n(o(13), t),\n        n(o(14), t),\n        n(o(15), t),\n        n(o(16), t);\n    },\n    11: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        n,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (e) {\n          return n[e] || (n[e] = r(e));\n        });\n    },\n    12: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var o = parseFloat(e);\n        return t.isNaN(o) ? e : o;\n      };\n    },\n    14: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, o) {\n        for (var r = [], n = 0; n < e; n++) r[n] = 0;\n        return o\n          ? (o.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], o = e.length, r = 0; r < o; r += 1) {\n          t[r] = [];\n          for (var n = 0; n < o; n += 1)\n            r === n\n              ? (t[r][n] = 0)\n              : 0 !== e[r][n] && e[r][n]\n              ? (t[r][n] = e[r][n])\n              : (t[r][n] = 1 / 0);\n        }\n        for (var i = 0; i < o; i += 1)\n          for (r = 0; r < o; r += 1)\n            for (n = 0; n < o; n += 1)\n              t[r][n] > t[r][i] + t[i][n] && (t[r][n] = t[r][i] + t[i][n]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var o = e.nodes,\n          r = e.edges,\n          n = [],\n          i = {};\n        if (!o) throw new Error(\"invalid nodes data!\");\n        return (\n          o &&\n            o.forEach(function (e, t) {\n              i[e.id] = t;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var o = e.source,\n                r = e.target,\n                s = i[o],\n                u = i[r];\n              (n[s][u] = 1), t || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var o = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              o.push(r);\n          }),\n          o\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, o) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], o)) return;\n            return !!o(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, o) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (e) {\n              for (var t, o = 1, r = arguments.length; o < r; o++)\n                for (var n in (t = arguments[o]))\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var o = [];\n          return (\n            e.forEach(function (e) {\n              o.push(e);\n            }),\n            o.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = n({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    179: function (e, t, o) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var o in t)\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((o.prototype = t.prototype), new o()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.GridLayout = void 0);\n      var i = o(10),\n        s = (function (e) {\n          function t(t) {\n            var o = e.call(this) || this;\n            return (\n              (o.begin = [0, 0]),\n              (o.preventOverlap = !0),\n              (o.preventOverlapPadding = 10),\n              (o.condense = !1),\n              (o.sortBy = \"degree\"),\n              (o.nodeSize = 30),\n              (o.nodes = []),\n              (o.edges = []),\n              (o.width = 300),\n              (o.height = 300),\n              (o.row = 0),\n              (o.col = 0),\n              (o.cellWidth = 0),\n              (o.cellHeight = 0),\n              (o.cellUsed = {}),\n              (o.id2manPos = {}),\n              (o.onLayoutEnd = function () {}),\n              o.updateCfg(t),\n              o\n            );\n          }\n          return (\n            n(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                begin: [0, 0],\n                preventOverlap: !0,\n                preventOverlapPadding: 10,\n                condense: !1,\n                rows: void 0,\n                cols: void 0,\n                position: void 0,\n                sortBy: \"degree\",\n                nodeSize: 30,\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this,\n                t = e.nodes,\n                o = t.length,\n                r = e.begin;\n              if (0 !== o) {\n                if (1 === o)\n                  return (\n                    (t[0].x = r[0]),\n                    (t[0].y = r[1]),\n                    void (e.onLayoutEnd && e.onLayoutEnd())\n                  );\n                var n = e.edges,\n                  s = [];\n                t.forEach(function (e) {\n                  s.push(e);\n                });\n                var u = {};\n                if (\n                  (s.forEach(function (e, t) {\n                    u[e.id] = t;\n                  }),\n                  (\"degree\" === e.sortBy ||\n                    !i.isString(e.sortBy) ||\n                    void 0 === s[0][e.sortBy]) &&\n                    ((e.sortBy = \"degree\"), i.isNaN(t[0].degree)))\n                ) {\n                  var c = i.getDegree(s.length, u, n);\n                  s.forEach(function (e, t) {\n                    e.degree = c[t];\n                  });\n                }\n                s.sort(function (t, o) {\n                  return o[e.sortBy] - t[e.sortBy];\n                }),\n                  e.width ||\n                    \"undefined\" == typeof window ||\n                    (e.width = window.innerWidth),\n                  e.height ||\n                    \"undefined\" == typeof window ||\n                    (e.height = window.innerHeight);\n                var l = e.rows,\n                  a = null != e.cols ? e.cols : e.columns;\n                if (\n                  ((e.cells = o),\n                  null != l && null != a\n                    ? ((e.rows = l), (e.cols = a))\n                    : null != l && null == a\n                    ? ((e.rows = l), (e.cols = Math.ceil(e.cells / e.rows)))\n                    : null == l && null != a\n                    ? ((e.cols = a), (e.rows = Math.ceil(e.cells / e.cols)))\n                    : ((e.splits = Math.sqrt((e.cells * e.height) / e.width)),\n                      (e.rows = Math.round(e.splits)),\n                      (e.cols = Math.round((e.width / e.height) * e.splits))),\n                  e.cols * e.rows > e.cells)\n                )\n                  ((d = e.small()) - 1) * (f = e.large()) >= e.cells\n                    ? e.small(d - 1)\n                    : (f - 1) * d >= e.cells && e.large(f - 1);\n                else\n                  for (; e.cols * e.rows < e.cells; ) {\n                    var f,\n                      d = e.small();\n                    ((f = e.large()) + 1) * d >= e.cells\n                      ? e.large(f + 1)\n                      : e.small(d + 1);\n                  }\n                (e.cellWidth = e.width / e.cols),\n                  (e.cellHeight = e.height / e.rows),\n                  e.condense && ((e.cellWidth = 0), (e.cellHeight = 0)),\n                  e.preventOverlap &&\n                    s.forEach(function (t) {\n                      var o, r;\n                      (t.x && t.y) || ((t.x = 0), (t.y = 0)),\n                        i.isArray(t.size)\n                          ? ((o = t.size[0]), (r = t.size[1]))\n                          : i.isNumber(t.size) && ((o = t.size), (r = t.size)),\n                        (void 0 !== o && void 0 !== r) ||\n                          (i.isArray(e.nodeSize)\n                            ? ((o = e.nodeSize[0]), (r = e.nodeSize[1]))\n                            : i.isNumber(e.nodeSize)\n                            ? ((o = e.nodeSize), (r = e.nodeSize))\n                            : ((o = 30), (r = 30)));\n                      var n = e.preventOverlapPadding,\n                        s = o + n,\n                        u = r + n;\n                      (e.cellWidth = Math.max(e.cellWidth, s)),\n                        (e.cellHeight = Math.max(e.cellHeight, u));\n                    }),\n                  (e.cellUsed = {}),\n                  (e.row = 0),\n                  (e.col = 0),\n                  (e.id2manPos = {});\n                for (var p = 0; p < s.length; p++) {\n                  var h = s[p],\n                    y = void 0;\n                  if (\n                    (e.position && (y = e.position(h)),\n                    y && (void 0 !== y.row || void 0 !== y.col))\n                  ) {\n                    var v = { row: y.row, col: y.col };\n                    if (void 0 === v.col)\n                      for (v.col = 0; e.used(v.row, v.col); ) v.col++;\n                    else if (void 0 === v.row)\n                      for (v.row = 0; e.used(v.row, v.col); ) v.row++;\n                    (e.id2manPos[h.id] = v), e.use(v.row, v.col);\n                  }\n                  e.getPos(h);\n                }\n                return e.onLayoutEnd && e.onLayoutEnd(), { edges: n, nodes: s };\n              }\n              e.onLayoutEnd && e.onLayoutEnd();\n            }),\n            (t.prototype.small = function (e) {\n              var t,\n                o = this.rows || 5,\n                r = this.cols || 5;\n              null == e\n                ? (t = Math.min(o, r))\n                : Math.min(o, r) === this.rows\n                ? (this.rows = e)\n                : (this.cols = e);\n              return t;\n            }),\n            (t.prototype.large = function (e) {\n              var t,\n                o = this.rows || 5,\n                r = this.cols || 5;\n              null == e\n                ? (t = Math.max(o, r))\n                : Math.max(o, r) === this.rows\n                ? (this.rows = e)\n                : (this.cols = e);\n              return t;\n            }),\n            (t.prototype.used = function (e, t) {\n              return this.cellUsed[\"c-\" + e + \"-\" + t] || !1;\n            }),\n            (t.prototype.use = function (e, t) {\n              this.cellUsed[\"c-\" + e + \"-\" + t] = !0;\n            }),\n            (t.prototype.moveToNextCell = function () {\n              var e = this.cols || 5;\n              this.col++, this.col >= e && ((this.col = 0), this.row++);\n            }),\n            (t.prototype.getPos = function (e) {\n              var t,\n                o,\n                r = this.begin,\n                n = this.cellWidth,\n                i = this.cellHeight,\n                s = this.id2manPos[e.id];\n              if (s)\n                (t = s.col * n + n / 2 + r[0]), (o = s.row * i + i / 2 + r[1]);\n              else {\n                for (; this.used(this.row, this.col); ) this.moveToNextCell();\n                (t = this.col * n + n / 2 + r[0]),\n                  (o = this.row * i + i / 2 + r[1]),\n                  this.use(this.row, this.col),\n                  this.moveToNextCell();\n              }\n              (e.x = t), (e.y = o);\n            }),\n            (t.prototype.getType = function () {\n              return \"grid\";\n            }),\n            t\n          );\n        })(o(7).Base);\n      t.GridLayout = s;\n    },\n    407: function (e, t, o) {\n      \"use strict\";\n      o.r(t);\n      var r = o(179);\n      t.default = r.GridLayout;\n    },\n    7: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=gridLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/mdsLayout.js",
    "content": "!(function (t, r) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = r())\n    : \"function\" == typeof define && define.amd\n    ? define([], r)\n    : \"object\" == typeof exports\n    ? (exports.f6 = r())\n    : (t.f6 = r());\n})(this, function () {\n  return (function (t) {\n    var r = {};\n    function e(o) {\n      if (r[o]) return r[o].exports;\n      var n = (r[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(n.exports, n, n.exports, e), (n.l = !0), n.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = r),\n      (e.d = function (t, r, o) {\n        e.o(t, r) || Object.defineProperty(t, r, { enumerable: !0, get: o });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, r) {\n        if ((1 & r && (t = e(t)), 8 & r)) return t;\n        if (4 & r && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (e.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & r && \"string\" != typeof t)\n        )\n          for (var n in t)\n            e.d(\n              o,\n              n,\n              function (r) {\n                return t[r];\n              }.bind(null, n),\n            );\n        return o;\n      }),\n      (e.n = function (t) {\n        var r =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(r, \"a\", r), r;\n      }),\n      (e.o = function (t, r) {\n        return Object.prototype.hasOwnProperty.call(t, r);\n      }),\n      (e.p = \"\"),\n      e((e.s = 408))\n    );\n  })({\n    10: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        n(e(11), r),\n        n(e(12), r),\n        n(e(13), r),\n        n(e(14), r),\n        n(e(15), r),\n        n(e(16), r);\n    },\n    102: function (t, r, e) {\n      \"use strict\";\n      e.r(r),\n        e.d(r, \"AbstractMatrix\", function () {\n          return Q;\n        }),\n        e.d(r, \"default\", function () {\n          return K;\n        }),\n        e.d(r, \"Matrix\", function () {\n          return K;\n        }),\n        e.d(r, \"MatrixColumnView\", function () {\n          return at;\n        }),\n        e.d(r, \"MatrixColumnSelectionView\", function () {\n          return yt;\n        }),\n        e.d(r, \"MatrixFlipColumnView\", function () {\n          return xt;\n        }),\n        e.d(r, \"MatrixFlipRowView\", function () {\n          return _t;\n        }),\n        e.d(r, \"MatrixRowView\", function () {\n          return Vt;\n        }),\n        e.d(r, \"MatrixRowSelectionView\", function () {\n          return Ut;\n        }),\n        e.d(r, \"MatrixSelectionView\", function () {\n          return Xt;\n        }),\n        e.d(r, \"MatrixSubView\", function () {\n          return or;\n        }),\n        e.d(r, \"MatrixTransposeView\", function () {\n          return cr;\n        }),\n        e.d(r, \"wrap\", function () {\n          return Or;\n        }),\n        e.d(r, \"WrapperMatrix1D\", function () {\n          return wr;\n        }),\n        e.d(r, \"WrapperMatrix2D\", function () {\n          return Er;\n        }),\n        e.d(r, \"solve\", function () {\n          return Vr;\n        }),\n        e.d(r, \"inverse\", function () {\n          return Ir;\n        }),\n        e.d(r, \"determinant\", function () {\n          return qr;\n        }),\n        e.d(r, \"linearDependencies\", function () {\n          return Br;\n        }),\n        e.d(r, \"pseudoInverse\", function () {\n          return Lr;\n        }),\n        e.d(r, \"covariance\", function () {\n          return Ur;\n        }),\n        e.d(r, \"correlation\", function () {\n          return Qr;\n        }),\n        e.d(r, \"SingularValueDecomposition\", function () {\n          return Nr;\n        }),\n        e.d(r, \"SVD\", function () {\n          return Nr;\n        }),\n        e.d(r, \"EigenvalueDecomposition\", function () {\n          return Hr;\n        }),\n        e.d(r, \"EVD\", function () {\n          return Hr;\n        }),\n        e.d(r, \"CholeskyDecomposition\", function () {\n          return re;\n        }),\n        e.d(r, \"CHO\", function () {\n          return re;\n        }),\n        e.d(r, \"LuDecomposition\", function () {\n          return jr;\n        }),\n        e.d(r, \"LU\", function () {\n          return jr;\n        }),\n        e.d(r, \"QrDecomposition\", function () {\n          return Tr;\n        }),\n        e.d(r, \"QR\", function () {\n          return Tr;\n        }),\n        e.d(r, \"Nipals\", function () {\n          return oe;\n        }),\n        e.d(r, \"NIPALS\", function () {\n          return oe;\n        });\n      var o = Object.prototype.toString;\n      function n(t) {\n        return o.call(t).endsWith(\"Array]\");\n      }\n      var i = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] > u && (u = t[a]);\n        return u;\n      };\n      var s = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] < u && (u = t[a]);\n        return u;\n      };\n      var u = function (t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          if (!n(t)) throw new TypeError(\"input must be an array\");\n          if (0 === t.length) throw new TypeError(\"input must not be empty\");\n          if (void 0 !== e.output) {\n            if (!n(e.output))\n              throw new TypeError(\n                \"output option must be an array if specified\",\n              );\n            r = e.output;\n          } else r = new Array(t.length);\n          var o = s(t),\n            u = i(t);\n          if (o === u)\n            throw new RangeError(\n              \"minimum and maximum input values are equal. Cannot rescale a constant array\",\n            );\n          var a = e.min,\n            f = void 0 === a ? (e.autoMinMax ? o : 0) : a,\n            c = e.max,\n            h = void 0 === c ? (e.autoMinMax ? u : 1) : c;\n          if (f >= h)\n            throw new RangeError(\"min option must be smaller than max option\");\n          for (var l = (h - f) / (u - o), p = 0; p < t.length; p++)\n            r[p] = (t[p] - o) * l + f;\n          return r;\n        },\n        a = \" \".repeat(2),\n        f = \" \".repeat(4);\n      function c(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = r.maxRows,\n          o = void 0 === e ? 15 : e,\n          n = r.maxColumns,\n          i = void 0 === n ? 10 : n,\n          s = r.maxNumSize,\n          u = void 0 === s ? 8 : s;\n        return \"\"\n          .concat(t.constructor.name, \" {\\n\")\n          .concat(a, \"[\\n\")\n          .concat(f)\n          .concat(h(t, o, i, u), \"\\n\")\n          .concat(a, \"]\\n\")\n          .concat(a, \"rows: \")\n          .concat(t.rows, \"\\n\")\n          .concat(a, \"columns: \")\n          .concat(t.columns, \"\\n}\");\n      }\n      function h(t, r, e, o) {\n        for (\n          var n = t.rows,\n            i = t.columns,\n            s = Math.min(n, r),\n            u = Math.min(i, e),\n            a = [],\n            c = 0;\n          c < s;\n          c++\n        ) {\n          for (var h = [], p = 0; p < u; p++) h.push(l(t.get(c, p), o));\n          a.push(\"\".concat(h.join(\" \")));\n        }\n        return (\n          u !== i &&\n            (a[a.length - 1] += \" ... \".concat(i - e, \" more columns\")),\n          s !== n && a.push(\"... \".concat(n - r, \" more rows\")),\n          a.join(\"\\n\".concat(f))\n        );\n      }\n      function l(t, r) {\n        var e = String(t);\n        if (e.length <= r) return e.padEnd(r, \" \");\n        var o = t.toPrecision(r - 2);\n        if (o.length <= r) return o;\n        var n = t.toExponential(r - 2),\n          i = n.indexOf(\"e\"),\n          s = n.slice(i);\n        return n.slice(0, r - s.length) + s;\n      }\n      function p(t) {\n        return (p =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function v(t, r, e) {\n        var o = e ? t.rows : t.rows - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Row index out of range\");\n      }\n      function y(t, r, e) {\n        var o = e ? t.columns : t.columns - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Column index out of range\");\n      }\n      function m(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.columns))\n          throw new RangeError(\n            \"vector size must be the same as the number of columns\",\n          );\n        return r;\n      }\n      function g(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.rows))\n          throw new RangeError(\n            \"vector size must be the same as the number of rows\",\n          );\n        return r;\n      }\n      function w(t, r, e) {\n        return { row: b(t, r), column: d(t, e) };\n      }\n      function b(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for row indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.rows;\n          })\n        )\n          throw new RangeError(\"row indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function d(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for column indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.columns;\n          })\n        )\n          throw new RangeError(\"column indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function M(t, r, e, o, n) {\n        if (5 !== arguments.length)\n          throw new RangeError(\"expected 4 arguments\");\n        if (\n          (k(\"startRow\", r),\n          k(\"endRow\", e),\n          k(\"startColumn\", o),\n          k(\"endColumn\", n),\n          r > e ||\n            o > n ||\n            r < 0 ||\n            r >= t.rows ||\n            e < 0 ||\n            e >= t.rows ||\n            o < 0 ||\n            o >= t.columns ||\n            n < 0 ||\n            n >= t.columns)\n        )\n          throw new RangeError(\"Submatrix indices are out of range\");\n      }\n      function x(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : 0,\n            e = [],\n            o = 0;\n          o < t;\n          o++\n        )\n          e.push(r);\n        return e;\n      }\n      function k(t, r) {\n        if (\"number\" != typeof r)\n          throw new TypeError(\"\".concat(t, \" must be a number\"));\n      }\n      function S(t) {\n        if (t.isEmpty())\n          throw new Error(\"Empty matrix has no elements to index\");\n      }\n      function E(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < o; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < n; c++)\n            (u += f = t.get(s, c) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / n) / (n - 1))\n            : i.push((a - (u * u) / n) / n);\n        }\n        return i;\n      }\n      function O(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < n; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < o; c++)\n            (u += f = t.get(c, s) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / o) / (o - 1))\n            : i.push((a - (u * u) / o) / o);\n        }\n        return i;\n      }\n      function R(t, r, e) {\n        for (\n          var o = t.rows, n = t.columns, i = o * n, s = 0, u = 0, a = 0, f = 0;\n          f < o;\n          f++\n        )\n          for (var c = 0; c < n; c++) (s += a = t.get(f, c) - e), (u += a * a);\n        return r ? (u - (s * s) / i) / (i - 1) : (u - (s * s) / i) / i;\n      }\n      function j(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[e]);\n      }\n      function _(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[o]);\n      }\n      function P(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r);\n      }\n      function T(t) {\n        for (var r = [], e = 0; e < t.rows; e++) {\n          for (var o = 0, n = 0; n < t.columns; n++)\n            o += Math.pow(t.get(e, n), 2) / (t.columns - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function A(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[e]);\n      }\n      function C(t) {\n        for (var r = [], e = 0; e < t.columns; e++) {\n          for (var o = 0, n = 0; n < t.rows; n++)\n            o += Math.pow(t.get(n, e), 2) / (t.rows - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function N(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[o]);\n      }\n      function I(t) {\n        for (var r = t.size - 1, e = 0, o = 0; o < t.columns; o++)\n          for (var n = 0; n < t.rows; n++) e += Math.pow(t.get(n, o), 2) / r;\n        return Math.sqrt(e);\n      }\n      function V(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r);\n      }\n      function q(t, r) {\n        return (q =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function D(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = B(t);\n          if (r) {\n            var n = B(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return F(this, e);\n        };\n      }\n      function F(t, r) {\n        return !r || (\"object\" !== L(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function B(t) {\n        return (B = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      function L(t) {\n        return (L =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function z(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function U(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function W(t, r, e) {\n        return r && U(t.prototype, r), e && U(t, e), t;\n      }\n      var Q = (function () {\n        function t() {\n          z(this, t);\n        }\n        return (\n          W(\n            t,\n            [\n              {\n                key: \"size\",\n                get: function () {\n                  return this.rows * this.columns;\n                },\n              },\n              {\n                key: \"apply\",\n                value: function (t) {\n                  if (\"function\" != typeof t)\n                    throw new TypeError(\"callback must be a function\");\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) t.call(this, r, e);\n                  return this;\n                },\n              },\n              {\n                key: \"to1DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      t.push(this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"to2DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++) {\n                    t.push([]);\n                    for (var e = 0; e < this.columns; e++)\n                      t[r].push(this.get(r, e));\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"toJSON\",\n                value: function () {\n                  return this.to2DArray();\n                },\n              },\n              {\n                key: \"isRowVector\",\n                value: function () {\n                  return 1 === this.rows;\n                },\n              },\n              {\n                key: \"isColumnVector\",\n                value: function () {\n                  return 1 === this.columns;\n                },\n              },\n              {\n                key: \"isVector\",\n                value: function () {\n                  return 1 === this.rows || 1 === this.columns;\n                },\n              },\n              {\n                key: \"isSquare\",\n                value: function () {\n                  return this.rows === this.columns;\n                },\n              },\n              {\n                key: \"isEmpty\",\n                value: function () {\n                  return 0 === this.rows || 0 === this.columns;\n                },\n              },\n              {\n                key: \"isSymmetric\",\n                value: function () {\n                  if (this.isSquare()) {\n                    for (var t = 0; t < this.rows; t++)\n                      for (var r = 0; r <= t; r++)\n                        if (this.get(t, r) !== this.get(r, t)) return !1;\n                    return !0;\n                  }\n                  return !1;\n                },\n              },\n              {\n                key: \"isEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"isReducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    for (var i = r + 1; i < this.rows; i++)\n                      0 !== this.get(t, i) && (o = !1);\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"echelonForm\",\n                value: function () {\n                  for (\n                    var t = this.clone(), r = 0, e = 0;\n                    r < t.rows && e < t.columns;\n\n                  ) {\n                    for (var o = r, n = r; n < t.rows; n++)\n                      t.get(n, e) > t.get(o, e) && (o = n);\n                    if (0 === t.get(o, e)) e++;\n                    else {\n                      t.swapRows(r, o);\n                      for (var i = t.get(r, e), s = e; s < t.columns; s++)\n                        t.set(r, s, t.get(r, s) / i);\n                      for (var u = r + 1; u < t.rows; u++) {\n                        var a = t.get(u, e) / t.get(r, e);\n                        t.set(u, e, 0);\n                        for (var f = e + 1; f < t.columns; f++)\n                          t.set(u, f, t.get(u, f) - t.get(r, f) * a);\n                      }\n                      r++, e++;\n                    }\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"reducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = this.echelonForm(),\n                      r = t.columns,\n                      e = t.rows,\n                      o = e - 1;\n                    o >= 0;\n\n                  )\n                    if (0 === t.maxRow(o)) o--;\n                    else {\n                      for (var n = 0, i = !1; n < e && !1 === i; )\n                        1 === t.get(o, n) ? (i = !0) : n++;\n                      for (var s = 0; s < o; s++)\n                        for (var u = t.get(s, n), a = n; a < r; a++) {\n                          var f = t.get(s, a) - u * t.get(o, a);\n                          t.set(s, a, f);\n                        }\n                      o--;\n                    }\n                  return t;\n                },\n              },\n              {\n                key: \"set\",\n                value: function () {\n                  throw new Error(\"set method is unimplemented\");\n                },\n              },\n              {\n                key: \"get\",\n                value: function () {\n                  throw new Error(\"get method is unimplemented\");\n                },\n              },\n              {\n                key: \"repeat\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== L(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.rows,\n                    e = void 0 === r ? 1 : r,\n                    o = t.columns,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isInteger(e) || e <= 0)\n                    throw new TypeError(\"rows must be a positive integer\");\n                  if (!Number.isInteger(n) || n <= 0)\n                    throw new TypeError(\"columns must be a positive integer\");\n                  for (\n                    var i = new K(this.rows * e, this.columns * n), s = 0;\n                    s < e;\n                    s++\n                  )\n                    for (var u = 0; u < n; u++)\n                      i.setSubMatrix(this, this.rows * s, this.columns * u);\n                  return i;\n                },\n              },\n              {\n                key: \"fill\",\n                value: function (t) {\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"neg\",\n                value: function () {\n                  return this.mulS(-1);\n                },\n              },\n              {\n                key: \"getRow\",\n                value: function (t) {\n                  v(this, t);\n                  for (var r = [], e = 0; e < this.columns; e++)\n                    r.push(this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"getRowVector\",\n                value: function (t) {\n                  return K.rowVector(this.getRow(t));\n                },\n              },\n              {\n                key: \"setRow\",\n                value: function (t, r) {\n                  v(this, t), (r = m(this, r));\n                  for (var e = 0; e < this.columns; e++) this.set(t, e, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapRows\",\n                value: function (t, r) {\n                  v(this, t), v(this, r);\n                  for (var e = 0; e < this.columns; e++) {\n                    var o = this.get(t, e);\n                    this.set(t, e, this.get(r, e)), this.set(r, e, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"getColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = [], e = 0; e < this.rows; e++)\n                    r.push(this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"getColumnVector\",\n                value: function (t) {\n                  return K.columnVector(this.getColumn(t));\n                },\n              },\n              {\n                key: \"setColumn\",\n                value: function (t, r) {\n                  y(this, t), (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) this.set(e, t, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapColumns\",\n                value: function (t, r) {\n                  y(this, t), y(this, r);\n                  for (var e = 0; e < this.rows; e++) {\n                    var o = this.get(e, t);\n                    this.set(e, t, this.get(e, r)), this.set(e, r, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"addRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"subRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"divRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"addColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"subColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"divColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRow\",\n                value: function (t, r) {\n                  v(this, t);\n                  for (var e = 0; e < this.columns; e++)\n                    this.set(t, e, this.get(t, e) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumn\",\n                value: function (t, r) {\n                  y(this, t);\n                  for (var e = 0; e < this.rows; e++)\n                    this.set(e, t, this.get(e, t) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"max\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) > t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"maxIndex\",\n                value: function () {\n                  S(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) > t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"min\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) < t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"minIndex\",\n                value: function () {\n                  S(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) < t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) > r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRowIndex\",\n                value: function (t) {\n                  v(this, t), S(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) > r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) < r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"minRowIndex\",\n                value: function (t) {\n                  v(this, t), S(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) < r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"maxColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) > r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"maxColumnIndex\",\n                value: function (t) {\n                  y(this, t), S(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) > r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) < r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"minColumnIndex\",\n                value: function (t) {\n                  y(this, t), S(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) < r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = [], e = 0;\n                    e < t;\n                    e++\n                  )\n                    r.push(this.get(e, e));\n                  return r;\n                },\n              },\n              {\n                key: \"norm\",\n                value: function () {\n                  var t =\n                      arguments.length > 0 && void 0 !== arguments[0]\n                        ? arguments[0]\n                        : \"frobenius\",\n                    r = 0;\n                  if (\"max\" === t) return this.max();\n                  if (\"frobenius\" === t) {\n                    for (var e = 0; e < this.rows; e++)\n                      for (var o = 0; o < this.columns; o++)\n                        r += this.get(e, o) * this.get(e, o);\n                    return Math.sqrt(r);\n                  }\n                  throw new RangeError(\"unknown norm type: \".concat(t));\n                },\n              },\n              {\n                key: \"cumulativeSum\",\n                value: function () {\n                  for (var t = 0, r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      (t += this.get(r, e)), this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"dot\",\n                value: function (r) {\n                  t.isMatrix(r) && (r = r.to1DArray());\n                  var e = this.to1DArray();\n                  if (e.length !== r.length)\n                    throw new RangeError(\"vectors do not have the same size\");\n                  for (var o = 0, n = 0; n < e.length; n++) o += e[n] * r[n];\n                  return o;\n                },\n              },\n              {\n                key: \"mmul\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.columns,\n                      n = new K(r, o),\n                      i = new Float64Array(e),\n                      s = 0;\n                    s < o;\n                    s++\n                  ) {\n                    for (var u = 0; u < e; u++) i[u] = t.get(u, s);\n                    for (var a = 0; a < r; a++) {\n                      for (var f = 0, c = 0; c < e; c++)\n                        f += this.get(a, c) * i[c];\n                      n.set(a, s, f);\n                    }\n                  }\n                  return n;\n                },\n              },\n              {\n                key: \"strassen2x2\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(2, 2),\n                    e = this.get(0, 0),\n                    o = t.get(0, 0),\n                    n = this.get(0, 1),\n                    i = t.get(0, 1),\n                    s = this.get(1, 0),\n                    u = t.get(1, 0),\n                    a = this.get(1, 1),\n                    f = t.get(1, 1),\n                    c = (e + a) * (o + f),\n                    h = (s + a) * o,\n                    l = e * (i - f),\n                    p = a * (u - o),\n                    v = (e + n) * f,\n                    y = c + p - v + (n - a) * (u + f),\n                    m = l + v,\n                    g = h + p,\n                    w = c - h + l + (s - e) * (o + i);\n                  return (\n                    r.set(0, 0, y),\n                    r.set(0, 1, m),\n                    r.set(1, 0, g),\n                    r.set(1, 1, w),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"strassen3x3\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(3, 3),\n                    e = this.get(0, 0),\n                    o = this.get(0, 1),\n                    n = this.get(0, 2),\n                    i = this.get(1, 0),\n                    s = this.get(1, 1),\n                    u = this.get(1, 2),\n                    a = this.get(2, 0),\n                    f = this.get(2, 1),\n                    c = this.get(2, 2),\n                    h = t.get(0, 0),\n                    l = t.get(0, 1),\n                    p = t.get(0, 2),\n                    v = t.get(1, 0),\n                    y = t.get(1, 1),\n                    m = t.get(1, 2),\n                    g = t.get(2, 0),\n                    w = t.get(2, 1),\n                    b = t.get(2, 2),\n                    d = (e - i) * (-l + y),\n                    M = (-e + i + s) * (h - l + y),\n                    x = (i + s) * (-h + l),\n                    k = e * h,\n                    S = (-e + a + f) * (h - p + m),\n                    E = (-e + a) * (p - m),\n                    O = (a + f) * (-h + p),\n                    R = (-n + f + c) * (y + g - w),\n                    j = (n - c) * (y - w),\n                    _ = n * g,\n                    P = (f + c) * (-g + w),\n                    T = (-n + s + u) * (m + g - b),\n                    A = (n - u) * (m - b),\n                    C = (s + u) * (-g + b),\n                    N = k + _ + o * v,\n                    I = (e + o + n - i - s - f - c) * y + M + x + k + R + _ + P,\n                    V = k + S + O + (e + o + n - s - u - a - f) * m + _ + T + C,\n                    q =\n                      d + s * (-h + l + v - y - m - g + b) + M + k + _ + T + A,\n                    D = d + M + x + k + u * w,\n                    F = _ + T + A + C + i * p,\n                    B =\n                      k + S + E + f * (-h + p + v - y - m - g + w) + R + j + _,\n                    L = R + j + _ + P + a * l,\n                    z = k + S + E + O + c * b;\n                  return (\n                    r.set(0, 0, N),\n                    r.set(0, 1, I),\n                    r.set(0, 2, V),\n                    r.set(1, 0, q),\n                    r.set(1, 1, D),\n                    r.set(1, 2, F),\n                    r.set(2, 0, B),\n                    r.set(2, 1, L),\n                    r.set(2, 2, z),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"mmulStrassen\",\n                value: function (r) {\n                  r = K.checkMatrix(r);\n                  var e = this.clone(),\n                    o = e.rows,\n                    n = e.columns,\n                    i = r.rows,\n                    s = r.columns;\n                  function u(r, e, o) {\n                    var n = r.rows,\n                      i = r.columns;\n                    if (n === e && i === o) return r;\n                    var s = t.zeros(e, o);\n                    return (s = s.setSubMatrix(r, 0, 0));\n                  }\n                  n !== i &&\n                    console.warn(\n                      \"Multiplying \"\n                        .concat(o, \" x \")\n                        .concat(n, \" and \")\n                        .concat(i, \" x \")\n                        .concat(s, \" matrix: dimensions do not match.\"),\n                    );\n                  var a = Math.max(o, i),\n                    f = Math.max(n, s);\n                  return (function r(e, o, n, i) {\n                    if (n <= 512 || i <= 512) return e.mmul(o);\n                    n % 2 == 1 && i % 2 == 1\n                      ? ((e = u(e, n + 1, i + 1)), (o = u(o, n + 1, i + 1)))\n                      : n % 2 == 1\n                      ? ((e = u(e, n + 1, i)), (o = u(o, n + 1, i)))\n                      : i % 2 == 1 &&\n                        ((e = u(e, n, i + 1)), (o = u(o, n, i + 1)));\n                    var s = parseInt(e.rows / 2, 10),\n                      a = parseInt(e.columns / 2, 10),\n                      f = e.subMatrix(0, s - 1, 0, a - 1),\n                      c = o.subMatrix(0, s - 1, 0, a - 1),\n                      h = e.subMatrix(0, s - 1, a, e.columns - 1),\n                      l = o.subMatrix(0, s - 1, a, o.columns - 1),\n                      p = e.subMatrix(s, e.rows - 1, 0, a - 1),\n                      v = o.subMatrix(s, o.rows - 1, 0, a - 1),\n                      y = e.subMatrix(s, e.rows - 1, a, e.columns - 1),\n                      m = o.subMatrix(s, o.rows - 1, a, o.columns - 1),\n                      g = r(t.add(f, y), t.add(c, m), s, a),\n                      w = r(t.add(p, y), c, s, a),\n                      b = r(f, t.sub(l, m), s, a),\n                      d = r(y, t.sub(v, c), s, a),\n                      M = r(t.add(f, h), m, s, a),\n                      x = r(t.sub(p, f), t.add(c, l), s, a),\n                      k = r(t.sub(h, y), t.add(v, m), s, a),\n                      S = t.add(g, d);\n                    S.sub(M), S.add(k);\n                    var E = t.add(b, M),\n                      O = t.add(w, d),\n                      R = t.sub(g, w);\n                    R.add(b), R.add(x);\n                    var j = t.zeros(2 * S.rows, 2 * S.columns);\n                    return (j = (j = (j = (j = j.setSubMatrix(\n                      S,\n                      0,\n                      0,\n                    )).setSubMatrix(E, S.rows, 0)).setSubMatrix(\n                      O,\n                      0,\n                      S.columns,\n                    )).setSubMatrix(R, S.rows, S.columns)).subMatrix(\n                      0,\n                      n - 1,\n                      0,\n                      i - 1,\n                    );\n                  })((e = u(e, a, f)), (r = u(r, a, f)), a, f);\n                },\n              },\n              {\n                key: \"scaleRows\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== L(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.rows;\n                    s++\n                  ) {\n                    var a = this.getRow(s);\n                    a.length > 0 && u(a, { min: e, max: n, output: a }),\n                      i.setRow(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"scaleColumns\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== L(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.columns;\n                    s++\n                  ) {\n                    var a = this.getColumn(s);\n                    a.length && u(a, { min: e, max: n, output: a }),\n                      i.setColumn(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"flipRows\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.columns / 2), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(r, e),\n                        n = this.get(r, this.columns - 1 - e);\n                      this.set(r, e, n), this.set(r, this.columns - 1 - e, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"flipColumns\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.rows / 2), r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(e, r),\n                        n = this.get(this.rows - 1 - e, r);\n                      this.set(e, r, n), this.set(this.rows - 1 - e, r, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"kroneckerProduct\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.rows,\n                      n = t.columns,\n                      i = new K(r * o, e * n),\n                      s = 0;\n                    s < r;\n                    s++\n                  )\n                    for (var u = 0; u < e; u++)\n                      for (var a = 0; a < o; a++)\n                        for (var f = 0; f < n; f++)\n                          i.set(\n                            o * s + a,\n                            n * u + f,\n                            this.get(s, u) * t.get(a, f),\n                          );\n                  return i;\n                },\n              },\n              {\n                key: \"kroneckerSum\",\n                value: function (t) {\n                  if (\n                    ((t = K.checkMatrix(t)), !this.isSquare() || !t.isSquare())\n                  )\n                    throw new Error(\"Kronecker Sum needs two Square Matrices\");\n                  var r = this.rows,\n                    e = t.rows,\n                    o = this.kroneckerProduct(K.eye(e, e)),\n                    n = K.eye(r, r).kroneckerProduct(t);\n                  return o.add(n);\n                },\n              },\n              {\n                key: \"transpose\",\n                value: function () {\n                  for (\n                    var t = new K(this.columns, this.rows), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(e, r, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sortRows\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    this.setRow(r, this.getRow(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"sortColumns\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    this.setColumn(r, this.getColumn(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"subMatrix\",\n                value: function (t, r, e, o) {\n                  M(this, t, r, e, o);\n                  for (var n = new K(r - t + 1, o - e + 1), i = t; i <= r; i++)\n                    for (var s = e; s <= o; s++)\n                      n.set(i - t, s - e, this.get(i, s));\n                  return n;\n                },\n              },\n              {\n                key: \"subMatrixRow\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.columns - 1),\n                    r > e ||\n                      r < 0 ||\n                      r >= this.columns ||\n                      e < 0 ||\n                      e >= this.columns)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(t.length, e - r + 1), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.rows)\n                        throw new RangeError(\n                          \"Row index out of range: \".concat(t[n]),\n                        );\n                      o.set(n, i - r, this.get(t[n], i));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"subMatrixColumn\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.rows - 1),\n                    r > e || r < 0 || r >= this.rows || e < 0 || e >= this.rows)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(e - r + 1, t.length), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.columns)\n                        throw new RangeError(\n                          \"Column index out of range: \".concat(t[n]),\n                        );\n                      o.set(i - r, n, this.get(i, t[n]));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"setSubMatrix\",\n                value: function (t, r, e) {\n                  if ((t = K.checkMatrix(t)).isEmpty()) return this;\n                  M(this, r, r + t.rows - 1, e, e + t.columns - 1);\n                  for (var o = 0; o < t.rows; o++)\n                    for (var n = 0; n < t.columns; n++)\n                      this.set(r + o, e + n, t.get(o, n));\n                  return this;\n                },\n              },\n              {\n                key: \"selection\",\n                value: function (t, r) {\n                  for (\n                    var e = w(this, t, r), o = new K(t.length, r.length), n = 0;\n                    n < e.row.length;\n                    n++\n                  )\n                    for (var i = e.row[n], s = 0; s < e.column.length; s++) {\n                      var u = e.column[s];\n                      o.set(n, s, this.get(i, u));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"trace\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = 0, e = 0;\n                    e < t;\n                    e++\n                  )\n                    r += this.get(e, e);\n                  return r;\n                },\n              },\n              {\n                key: \"clone\",\n                value: function () {\n                  for (\n                    var t = new K(this.rows, this.columns), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(r, e, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sum\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 0, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r += t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"product\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 1, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r *= t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"mean\",\n                value: function (t) {\n                  var r = this.sum(t);\n                  switch (t) {\n                    case \"row\":\n                      for (var e = 0; e < this.rows; e++) r[e] /= this.columns;\n                      return r;\n                    case \"column\":\n                      for (var o = 0; o < this.columns; o++) r[o] /= this.rows;\n                      return r;\n                    case void 0:\n                      return r / this.size;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"variance\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === L(t) && ((r = t), (t = void 0)),\n                    \"object\" !== L(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.unbiased,\n                    n = void 0 === o || o,\n                    i = e.mean,\n                    s = void 0 === i ? this.mean(t) : i;\n                  if (\"boolean\" != typeof n)\n                    throw new TypeError(\"unbiased must be a boolean\");\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return E(this, n, s);\n                    case \"column\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return O(this, n, s);\n                    case void 0:\n                      if (\"number\" != typeof s)\n                        throw new TypeError(\"mean must be a number\");\n                      return R(this, n, s);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"standardDeviation\",\n                value: function (t, r) {\n                  \"object\" === L(t) && ((r = t), (t = void 0));\n                  var e = this.variance(t, r);\n                  if (void 0 === t) return Math.sqrt(e);\n                  for (var o = 0; o < e.length; o++) e[o] = Math.sqrt(e[o]);\n                  return e;\n                },\n              },\n              {\n                key: \"center\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === L(t) && ((r = t), (t = void 0)),\n                    \"object\" !== L(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.center,\n                    n = void 0 === o ? this.mean(t) : o;\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return j(this, n), this;\n                    case \"column\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return _(this, n), this;\n                    case void 0:\n                      if (\"number\" != typeof n)\n                        throw new TypeError(\"center must be a number\");\n                      return P(this, n), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"scale\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === L(t) && ((r = t), (t = void 0)),\n                    \"object\" !== L(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r.scale;\n                  switch (t) {\n                    case \"row\":\n                      if (void 0 === e) e = T(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return A(this, e), this;\n                    case \"column\":\n                      if (void 0 === e) e = C(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return N(this, e), this;\n                    case void 0:\n                      if (void 0 === e) e = I(this);\n                      else if (\"number\" != typeof e)\n                        throw new TypeError(\"scale must be a number\");\n                      return V(this, e), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"toString\",\n                value: function (t) {\n                  return c(this, t);\n                },\n              },\n            ],\n            [\n              {\n                key: \"from1DArray\",\n                value: function (t, r, e) {\n                  if (t * r !== e.length)\n                    throw new RangeError(\n                      \"data length does not match given dimensions\",\n                    );\n                  for (var o = new K(t, r), n = 0; n < t; n++)\n                    for (var i = 0; i < r; i++) o.set(n, i, e[n * r + i]);\n                  return o;\n                },\n              },\n              {\n                key: \"rowVector\",\n                value: function (t) {\n                  for (var r = new K(1, t.length), e = 0; e < t.length; e++)\n                    r.set(0, e, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"columnVector\",\n                value: function (t) {\n                  for (var r = new K(t.length, 1), e = 0; e < t.length; e++)\n                    r.set(e, 0, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"zeros\",\n                value: function (t, r) {\n                  return new K(t, r);\n                },\n              },\n              {\n                key: \"ones\",\n                value: function (t, r) {\n                  return new K(t, r).fill(1);\n                },\n              },\n              {\n                key: \"rand\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== L(e))\n                    throw new TypeError(\"options must be an object\");\n                  for (\n                    var o = e.random,\n                      n = void 0 === o ? Math.random : o,\n                      i = new K(t, r),\n                      s = 0;\n                    s < t;\n                    s++\n                  )\n                    for (var u = 0; u < r; u++) i.set(s, u, n());\n                  return i;\n                },\n              },\n              {\n                key: \"randInt\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== L(e))\n                    throw new TypeError(\"options must be an object\");\n                  var o = e.min,\n                    n = void 0 === o ? 0 : o,\n                    i = e.max,\n                    s = void 0 === i ? 1e3 : i,\n                    u = e.random,\n                    a = void 0 === u ? Math.random : u;\n                  if (!Number.isInteger(n))\n                    throw new TypeError(\"min must be an integer\");\n                  if (!Number.isInteger(s))\n                    throw new TypeError(\"max must be an integer\");\n                  if (n >= s)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (var f = s - n, c = new K(t, r), h = 0; h < t; h++)\n                    for (var l = 0; l < r; l++) {\n                      var p = n + Math.round(a() * f);\n                      c.set(h, l, p);\n                    }\n                  return c;\n                },\n              },\n              {\n                key: \"eye\",\n                value: function (t, r, e) {\n                  void 0 === r && (r = t), void 0 === e && (e = 1);\n                  for (\n                    var o = Math.min(t, r), n = this.zeros(t, r), i = 0;\n                    i < o;\n                    i++\n                  )\n                    n.set(i, i, e);\n                  return n;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function (t, r, e) {\n                  var o = t.length;\n                  void 0 === r && (r = o), void 0 === e && (e = r);\n                  for (\n                    var n = Math.min(o, r, e), i = this.zeros(r, e), s = 0;\n                    s < n;\n                    s++\n                  )\n                    i.set(s, s, t[s]);\n                  return i;\n                },\n              },\n              {\n                key: \"min\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new K(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.min(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"max\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new this(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.max(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"checkMatrix\",\n                value: function (r) {\n                  return t.isMatrix(r) ? r : new K(r);\n                },\n              },\n              {\n                key: \"isMatrix\",\n                value: function (t) {\n                  return null != t && \"Matrix\" === t.klass;\n                },\n              },\n            ],\n          ),\n          t\n        );\n      })();\n      function J(t, r) {\n        return t - r;\n      }\n      (Q.prototype.klass = \"Matrix\"),\n        \"undefined\" != typeof Symbol &&\n          (Q.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = function () {\n            return c(this);\n          }),\n        (Q.random = Q.rand),\n        (Q.randomInt = Q.randInt),\n        (Q.diagonal = Q.diag),\n        (Q.prototype.diagonal = Q.prototype.diag),\n        (Q.identity = Q.eye),\n        (Q.prototype.negate = Q.prototype.neg),\n        (Q.prototype.tensorProduct = Q.prototype.kroneckerProduct);\n      var Y,\n        H,\n        K = (function (t) {\n          !(function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Super expression must either be null or a function\",\n              );\n            (t.prototype = Object.create(r && r.prototype, {\n              constructor: { value: t, writable: !0, configurable: !0 },\n            })),\n              r && q(t, r);\n          })(e, t);\n          var r = D(e);\n          function e(t, o) {\n            var n;\n            if ((z(this, e), (n = r.call(this)), e.isMatrix(t)))\n              return F(n, t.clone());\n            if (Number.isInteger(t) && t >= 0) {\n              if (((n.data = []), !(Number.isInteger(o) && o >= 0)))\n                throw new TypeError(\"nColumns must be a positive integer\");\n              for (var i = 0; i < t; i++) n.data.push(new Float64Array(o));\n            } else {\n              if (!Array.isArray(t))\n                throw new TypeError(\n                  \"First argument must be a positive number or an array\",\n                );\n              var s = t;\n              if (\"number\" != typeof (o = (t = s.length) ? s[0].length : 0))\n                throw new TypeError(\n                  \"Data must be a 2D array with at least one element\",\n                );\n              n.data = [];\n              for (var u = 0; u < t; u++) {\n                if (s[u].length !== o)\n                  throw new RangeError(\"Inconsistent array dimensions\");\n                n.data.push(Float64Array.from(s[u]));\n              }\n            }\n            return (n.rows = t), (n.columns = o), n;\n          }\n          return (\n            W(e, [\n              {\n                key: \"set\",\n                value: function (t, r, e) {\n                  return (this.data[t][r] = e), this;\n                },\n              },\n              {\n                key: \"get\",\n                value: function (t, r) {\n                  return this.data[t][r];\n                },\n              },\n              {\n                key: \"removeRow\",\n                value: function (t) {\n                  return (\n                    v(this, t), this.data.splice(t, 1), (this.rows -= 1), this\n                  );\n                },\n              },\n              {\n                key: \"addRow\",\n                value: function (t, r) {\n                  return (\n                    void 0 === r && ((r = t), (t = this.rows)),\n                    v(this, t, !0),\n                    (r = Float64Array.from(m(this, r))),\n                    this.data.splice(t, 0, r),\n                    (this.rows += 1),\n                    this\n                  );\n                },\n              },\n              {\n                key: \"removeColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = 0; r < this.rows; r++) {\n                    for (\n                      var e = new Float64Array(this.columns - 1), o = 0;\n                      o < t;\n                      o++\n                    )\n                      e[o] = this.data[r][o];\n                    for (var n = t + 1; n < this.columns; n++)\n                      e[n - 1] = this.data[r][n];\n                    this.data[r] = e;\n                  }\n                  return (this.columns -= 1), this;\n                },\n              },\n              {\n                key: \"addColumn\",\n                value: function (t, r) {\n                  void 0 === r && ((r = t), (t = this.columns)),\n                    y(this, t, !0),\n                    (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) {\n                    for (\n                      var o = new Float64Array(this.columns + 1), n = 0;\n                      n < t;\n                      n++\n                    )\n                      o[n] = this.data[e][n];\n                    for (o[n++] = r[e]; n < this.columns + 1; n++)\n                      o[n] = this.data[e][n - 1];\n                    this.data[e] = o;\n                  }\n                  return (this.columns += 1), this;\n                },\n              },\n            ]),\n            e\n          );\n        })(Q);\n      function X(t) {\n        return (X =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function G(t, r) {\n        return (G =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Z(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = tt(t);\n          if (r) {\n            var n = tt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return $(this, e);\n        };\n      }\n      function $(t, r) {\n        return !r || (\"object\" !== X(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function tt(t) {\n        return (tt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      (H = K),\n        ((Y = Q).prototype.add = function (t) {\n          return \"number\" == typeof t ? this.addS(t) : this.addM(t);\n        }),\n        (Y.prototype.addS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t);\n          return this;\n        }),\n        (Y.prototype.addM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t.get(r, e));\n          return this;\n        }),\n        (Y.add = function (t, r) {\n          return new H(t).add(r);\n        }),\n        (Y.prototype.sub = function (t) {\n          return \"number\" == typeof t ? this.subS(t) : this.subM(t);\n        }),\n        (Y.prototype.subS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t);\n          return this;\n        }),\n        (Y.prototype.subM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t.get(r, e));\n          return this;\n        }),\n        (Y.sub = function (t, r) {\n          return new H(t).sub(r);\n        }),\n        (Y.prototype.subtract = Y.prototype.sub),\n        (Y.prototype.subtractS = Y.prototype.subS),\n        (Y.prototype.subtractM = Y.prototype.subM),\n        (Y.subtract = Y.sub),\n        (Y.prototype.mul = function (t) {\n          return \"number\" == typeof t ? this.mulS(t) : this.mulM(t);\n        }),\n        (Y.prototype.mulS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t);\n          return this;\n        }),\n        (Y.prototype.mulM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t.get(r, e));\n          return this;\n        }),\n        (Y.mul = function (t, r) {\n          return new H(t).mul(r);\n        }),\n        (Y.prototype.multiply = Y.prototype.mul),\n        (Y.prototype.multiplyS = Y.prototype.mulS),\n        (Y.prototype.multiplyM = Y.prototype.mulM),\n        (Y.multiply = Y.mul),\n        (Y.prototype.div = function (t) {\n          return \"number\" == typeof t ? this.divS(t) : this.divM(t);\n        }),\n        (Y.prototype.divS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t);\n          return this;\n        }),\n        (Y.prototype.divM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t.get(r, e));\n          return this;\n        }),\n        (Y.div = function (t, r) {\n          return new H(t).div(r);\n        }),\n        (Y.prototype.divide = Y.prototype.div),\n        (Y.prototype.divideS = Y.prototype.divS),\n        (Y.prototype.divideM = Y.prototype.divM),\n        (Y.divide = Y.div),\n        (Y.prototype.mod = function (t) {\n          return \"number\" == typeof t ? this.modS(t) : this.modM(t);\n        }),\n        (Y.prototype.modS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t);\n          return this;\n        }),\n        (Y.prototype.modM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t.get(r, e));\n          return this;\n        }),\n        (Y.mod = function (t, r) {\n          return new H(t).mod(r);\n        }),\n        (Y.prototype.modulus = Y.prototype.mod),\n        (Y.prototype.modulusS = Y.prototype.modS),\n        (Y.prototype.modulusM = Y.prototype.modM),\n        (Y.modulus = Y.mod),\n        (Y.prototype.and = function (t) {\n          return \"number\" == typeof t ? this.andS(t) : this.andM(t);\n        }),\n        (Y.prototype.andS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t);\n          return this;\n        }),\n        (Y.prototype.andM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t.get(r, e));\n          return this;\n        }),\n        (Y.and = function (t, r) {\n          return new H(t).and(r);\n        }),\n        (Y.prototype.or = function (t) {\n          return \"number\" == typeof t ? this.orS(t) : this.orM(t);\n        }),\n        (Y.prototype.orS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t);\n          return this;\n        }),\n        (Y.prototype.orM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t.get(r, e));\n          return this;\n        }),\n        (Y.or = function (t, r) {\n          return new H(t).or(r);\n        }),\n        (Y.prototype.xor = function (t) {\n          return \"number\" == typeof t ? this.xorS(t) : this.xorM(t);\n        }),\n        (Y.prototype.xorS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t);\n          return this;\n        }),\n        (Y.prototype.xorM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t.get(r, e));\n          return this;\n        }),\n        (Y.xor = function (t, r) {\n          return new H(t).xor(r);\n        }),\n        (Y.prototype.leftShift = function (t) {\n          return \"number\" == typeof t ? this.leftShiftS(t) : this.leftShiftM(t);\n        }),\n        (Y.prototype.leftShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t);\n          return this;\n        }),\n        (Y.prototype.leftShiftM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t.get(r, e));\n          return this;\n        }),\n        (Y.leftShift = function (t, r) {\n          return new H(t).leftShift(r);\n        }),\n        (Y.prototype.signPropagatingRightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.signPropagatingRightShiftS(t)\n            : this.signPropagatingRightShiftM(t);\n        }),\n        (Y.prototype.signPropagatingRightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t);\n          return this;\n        }),\n        (Y.prototype.signPropagatingRightShiftM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t.get(r, e));\n          return this;\n        }),\n        (Y.signPropagatingRightShift = function (t, r) {\n          return new H(t).signPropagatingRightShift(r);\n        }),\n        (Y.prototype.rightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.rightShiftS(t)\n            : this.rightShiftM(t);\n        }),\n        (Y.prototype.rightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t);\n          return this;\n        }),\n        (Y.prototype.rightShiftM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t.get(r, e));\n          return this;\n        }),\n        (Y.rightShift = function (t, r) {\n          return new H(t).rightShift(r);\n        }),\n        (Y.prototype.zeroFillRightShift = Y.prototype.rightShift),\n        (Y.prototype.zeroFillRightShiftS = Y.prototype.rightShiftS),\n        (Y.prototype.zeroFillRightShiftM = Y.prototype.rightShiftM),\n        (Y.zeroFillRightShift = Y.rightShift),\n        (Y.prototype.not = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, ~this.get(t, r));\n          return this;\n        }),\n        (Y.not = function (t) {\n          return new H(t).not();\n        }),\n        (Y.prototype.abs = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.abs(this.get(t, r)));\n          return this;\n        }),\n        (Y.abs = function (t) {\n          return new H(t).abs();\n        }),\n        (Y.prototype.acos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acos(this.get(t, r)));\n          return this;\n        }),\n        (Y.acos = function (t) {\n          return new H(t).acos();\n        }),\n        (Y.prototype.acosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acosh(this.get(t, r)));\n          return this;\n        }),\n        (Y.acosh = function (t) {\n          return new H(t).acosh();\n        }),\n        (Y.prototype.asin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asin(this.get(t, r)));\n          return this;\n        }),\n        (Y.asin = function (t) {\n          return new H(t).asin();\n        }),\n        (Y.prototype.asinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asinh(this.get(t, r)));\n          return this;\n        }),\n        (Y.asinh = function (t) {\n          return new H(t).asinh();\n        }),\n        (Y.prototype.atan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atan(this.get(t, r)));\n          return this;\n        }),\n        (Y.atan = function (t) {\n          return new H(t).atan();\n        }),\n        (Y.prototype.atanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atanh(this.get(t, r)));\n          return this;\n        }),\n        (Y.atanh = function (t) {\n          return new H(t).atanh();\n        }),\n        (Y.prototype.cbrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cbrt(this.get(t, r)));\n          return this;\n        }),\n        (Y.cbrt = function (t) {\n          return new H(t).cbrt();\n        }),\n        (Y.prototype.ceil = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.ceil(this.get(t, r)));\n          return this;\n        }),\n        (Y.ceil = function (t) {\n          return new H(t).ceil();\n        }),\n        (Y.prototype.clz32 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.clz32(this.get(t, r)));\n          return this;\n        }),\n        (Y.clz32 = function (t) {\n          return new H(t).clz32();\n        }),\n        (Y.prototype.cos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cos(this.get(t, r)));\n          return this;\n        }),\n        (Y.cos = function (t) {\n          return new H(t).cos();\n        }),\n        (Y.prototype.cosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cosh(this.get(t, r)));\n          return this;\n        }),\n        (Y.cosh = function (t) {\n          return new H(t).cosh();\n        }),\n        (Y.prototype.exp = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.exp(this.get(t, r)));\n          return this;\n        }),\n        (Y.exp = function (t) {\n          return new H(t).exp();\n        }),\n        (Y.prototype.expm1 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.expm1(this.get(t, r)));\n          return this;\n        }),\n        (Y.expm1 = function (t) {\n          return new H(t).expm1();\n        }),\n        (Y.prototype.floor = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.floor(this.get(t, r)));\n          return this;\n        }),\n        (Y.floor = function (t) {\n          return new H(t).floor();\n        }),\n        (Y.prototype.fround = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.fround(this.get(t, r)));\n          return this;\n        }),\n        (Y.fround = function (t) {\n          return new H(t).fround();\n        }),\n        (Y.prototype.log = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log(this.get(t, r)));\n          return this;\n        }),\n        (Y.log = function (t) {\n          return new H(t).log();\n        }),\n        (Y.prototype.log1p = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log1p(this.get(t, r)));\n          return this;\n        }),\n        (Y.log1p = function (t) {\n          return new H(t).log1p();\n        }),\n        (Y.prototype.log10 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log10(this.get(t, r)));\n          return this;\n        }),\n        (Y.log10 = function (t) {\n          return new H(t).log10();\n        }),\n        (Y.prototype.log2 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log2(this.get(t, r)));\n          return this;\n        }),\n        (Y.log2 = function (t) {\n          return new H(t).log2();\n        }),\n        (Y.prototype.round = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.round(this.get(t, r)));\n          return this;\n        }),\n        (Y.round = function (t) {\n          return new H(t).round();\n        }),\n        (Y.prototype.sign = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sign(this.get(t, r)));\n          return this;\n        }),\n        (Y.sign = function (t) {\n          return new H(t).sign();\n        }),\n        (Y.prototype.sin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sin(this.get(t, r)));\n          return this;\n        }),\n        (Y.sin = function (t) {\n          return new H(t).sin();\n        }),\n        (Y.prototype.sinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sinh(this.get(t, r)));\n          return this;\n        }),\n        (Y.sinh = function (t) {\n          return new H(t).sinh();\n        }),\n        (Y.prototype.sqrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sqrt(this.get(t, r)));\n          return this;\n        }),\n        (Y.sqrt = function (t) {\n          return new H(t).sqrt();\n        }),\n        (Y.prototype.tan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tan(this.get(t, r)));\n          return this;\n        }),\n        (Y.tan = function (t) {\n          return new H(t).tan();\n        }),\n        (Y.prototype.tanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tanh(this.get(t, r)));\n          return this;\n        }),\n        (Y.tanh = function (t) {\n          return new H(t).tanh();\n        }),\n        (Y.prototype.trunc = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.trunc(this.get(t, r)));\n          return this;\n        }),\n        (Y.trunc = function (t) {\n          return new H(t).trunc();\n        }),\n        (Y.pow = function (t, r) {\n          return new H(t).pow(r);\n        }),\n        (Y.prototype.pow = function (t) {\n          return \"number\" == typeof t ? this.powS(t) : this.powM(t);\n        }),\n        (Y.prototype.powS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t));\n          return this;\n        }),\n        (Y.prototype.powM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t.get(r, e)));\n          return this;\n        });\n      var rt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && G(t, r);\n        })(e, t);\n        var r = Z(e);\n        function e(t, o, n) {\n          var i;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, e),\n            ((i = r.call(this)).matrix = t),\n            (i.rows = o),\n            (i.columns = n),\n            i\n          );\n        }\n        return e;\n      })(Q);\n      function et(t) {\n        return (et =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ot(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function nt(t, r) {\n        return (nt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function it(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = ut(t);\n          if (r) {\n            var n = ut(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return st(this, e);\n        };\n      }\n      function st(t, r) {\n        return !r || (\"object\" !== et(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function ut(t) {\n        return (ut = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var at = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && nt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = it(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            y(t, r),\n            ((e = n.call(this, t, t.rows, 1)).column = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.column, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t) {\n                return this.matrix.get(t, this.column);\n              },\n            },\n          ]) && ot(r.prototype, e),\n          o && ot(r, o),\n          i\n        );\n      })(rt);\n      function ft(t) {\n        return (ft =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ct(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ht(t, r) {\n        return (ht =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function lt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = vt(t);\n          if (r) {\n            var n = vt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return pt(this, e);\n        };\n      }\n      function pt(t, r) {\n        return !r || (\"object\" !== ft(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function vt(t) {\n        return (vt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var yt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && ht(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = lt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = d(t, r)),\n            ((e = n.call(this, t, t.rows, r.length)).columnIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columnIndices[r], e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columnIndices[r]);\n              },\n            },\n          ]) && ct(r.prototype, e),\n          o && ct(r, o),\n          i\n        );\n      })(rt);\n      function mt(t) {\n        return (mt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function gt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function wt(t, r) {\n        return (wt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function bt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Mt(t);\n          if (r) {\n            var n = Mt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return dt(this, e);\n        };\n      }\n      function dt(t, r) {\n        return !r || (\"object\" !== mt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Mt(t) {\n        return (Mt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && wt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = bt(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columns - r - 1, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columns - r - 1);\n              },\n            },\n          ]) && gt(r.prototype, e),\n          o && gt(r, o),\n          i\n        );\n      })(rt);\n      function kt(t) {\n        return (kt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function St(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Et(t, r) {\n        return (Et =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ot(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = jt(t);\n          if (r) {\n            var n = jt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Rt(this, e);\n        };\n      }\n      function Rt(t, r) {\n        return !r || (\"object\" !== kt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function jt(t) {\n        return (jt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var _t = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Et(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ot(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rows - t - 1, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rows - t - 1, r);\n              },\n            },\n          ]) && St(r.prototype, e),\n          o && St(r, o),\n          i\n        );\n      })(rt);\n      function Pt(t) {\n        return (Pt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Tt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function At(t, r) {\n        return (At =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ct(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = It(t);\n          if (r) {\n            var n = It(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Nt(this, e);\n        };\n      }\n      function Nt(t, r) {\n        return !r || (\"object\" !== Pt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function It(t) {\n        return (It = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Vt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && At(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ct(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            v(t, r),\n            ((e = n.call(this, t, 1, t.columns)).row = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.row, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.row, r);\n              },\n            },\n          ]) && Tt(r.prototype, e),\n          o && Tt(r, o),\n          i\n        );\n      })(rt);\n      function qt(t) {\n        return (qt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Dt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Ft(t, r) {\n        return (Ft =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Bt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = zt(t);\n          if (r) {\n            var n = zt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Lt(this, e);\n        };\n      }\n      function Lt(t, r) {\n        return !r || (\"object\" !== qt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function zt(t) {\n        return (zt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Ut = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Ft(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Bt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = b(t, r)),\n            ((e = n.call(this, t, r.length, t.columns)).rowIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rowIndices[t], r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rowIndices[t], r);\n              },\n            },\n          ]) && Dt(r.prototype, e),\n          o && Dt(r, o),\n          i\n        );\n      })(rt);\n      function Wt(t) {\n        return (Wt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Jt(t, r) {\n        return (Jt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Yt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Kt(t);\n          if (r) {\n            var n = Kt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Ht(this, e);\n        };\n      }\n      function Ht(t, r) {\n        return !r || (\"object\" !== Wt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Kt(t) {\n        return (Kt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Jt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Yt(i);\n        function i(t, r, e) {\n          var o;\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, i);\n          var s = w(t, r, e);\n          return (\n            ((o = n.call(this, t, s.row.length, s.column.length)).rowIndices =\n              s.row),\n            (o.columnIndices = s.column),\n            o\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.rowIndices[t], this.columnIndices[r], e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(\n                  this.rowIndices[t],\n                  this.columnIndices[r],\n                );\n              },\n            },\n          ]) && Qt(r.prototype, e),\n          o && Qt(r, o),\n          i\n        );\n      })(rt);\n      function Gt(t) {\n        return (Gt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Zt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function $t(t, r) {\n        return ($t =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function tr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = er(t);\n          if (r) {\n            var n = er(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return rr(this, e);\n        };\n      }\n      function rr(t, r) {\n        return !r || (\"object\" !== Gt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function er(t) {\n        return (er = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var or = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && $t(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = tr(i);\n        function i(t, r, e, o, s) {\n          var u;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            M(t, r, e, o, s),\n            ((u = n.call(this, t, e - r + 1, s - o + 1)).startRow = r),\n            (u.startColumn = o),\n            u\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.startRow + t, this.startColumn + r, e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.startRow + t, this.startColumn + r);\n              },\n            },\n          ]) && Zt(r.prototype, e),\n          o && Zt(r, o),\n          i\n        );\n      })(rt);\n      function nr(t) {\n        return (nr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function sr(t, r) {\n        return (sr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function ur(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = fr(t);\n          if (r) {\n            var n = fr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return ar(this, e);\n        };\n      }\n      function ar(t, r) {\n        return !r || (\"object\" !== nr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function fr(t) {\n        return (fr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var cr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && sr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = ur(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.columns, t.rows)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(r, t, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(r, t);\n              },\n            },\n          ]) && ir(r.prototype, e),\n          o && ir(r, o),\n          i\n        );\n      })(rt);\n      function hr(t) {\n        return (hr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function lr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function vr(t, r) {\n        return (vr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function yr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = gr(t);\n          if (r) {\n            var n = gr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return mr(this, e);\n        };\n      }\n      function mr(t, r) {\n        return !r || (\"object\" !== hr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function gr(t) {\n        return (gr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var wr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && vr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = yr(i);\n        function i(t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          lr(this, i);\n          var o = e.rows,\n            s = void 0 === o ? 1 : o;\n          if (t.length % s != 0)\n            throw new Error(\n              \"the data length is not divisible by the number of rows\",\n            );\n          return (\n            ((r = n.call(this)).rows = s),\n            (r.columns = t.length / s),\n            (r.data = t),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                var o = this._calculateIndex(t, r);\n                return (this.data[o] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                var e = this._calculateIndex(t, r);\n                return this.data[e];\n              },\n            },\n            {\n              key: \"_calculateIndex\",\n              value: function (t, r) {\n                return t * this.columns + r;\n              },\n            },\n          ]) && pr(r.prototype, e),\n          o && pr(r, o),\n          i\n        );\n      })(Q);\n      function br(t) {\n        return (br =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function dr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Mr(t, r) {\n        return (Mr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function xr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Sr(t);\n          if (r) {\n            var n = Sr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return kr(this, e);\n        };\n      }\n      function kr(t, r) {\n        return !r || (\"object\" !== br(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Sr(t) {\n        return (Sr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Er = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Mr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = xr(i);\n        function i(t) {\n          var r;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((r = n.call(this)).data = t),\n            (r.rows = t.length),\n            (r.columns = t[0].length),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (this.data[t][r] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.data[t][r];\n              },\n            },\n          ]) && dr(r.prototype, e),\n          o && dr(r, o),\n          i\n        );\n      })(Q);\n      function Or(t, r) {\n        if (Array.isArray(t))\n          return t[0] && Array.isArray(t[0]) ? new Er(t) : new wr(t, r);\n        throw new Error(\"the argument is not an array\");\n      }\n      function Rr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var jr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s,\n            u,\n            a,\n            f,\n            c,\n            h = (r = Er.checkMatrix(r)).clone(),\n            l = h.rows,\n            p = h.columns,\n            v = new Float64Array(l),\n            y = 1;\n          for (e = 0; e < l; e++) v[e] = e;\n          for (f = new Float64Array(l), o = 0; o < p; o++) {\n            for (e = 0; e < l; e++) f[e] = h.get(e, o);\n            for (e = 0; e < l; e++) {\n              for (c = Math.min(e, o), s = 0, n = 0; n < c; n++)\n                s += h.get(e, n) * f[n];\n              (f[e] -= s), h.set(e, o, f[e]);\n            }\n            for (i = o, e = o + 1; e < l; e++)\n              Math.abs(f[e]) > Math.abs(f[i]) && (i = e);\n            if (i !== o) {\n              for (n = 0; n < p; n++)\n                (u = h.get(i, n)), h.set(i, n, h.get(o, n)), h.set(o, n, u);\n              (a = v[i]), (v[i] = v[o]), (v[o] = a), (y = -y);\n            }\n            if (o < l && 0 !== h.get(o, o))\n              for (e = o + 1; e < l; e++)\n                h.set(e, o, h.get(e, o) / h.get(o, o));\n          }\n          (this.LU = h), (this.pivotVector = v), (this.pivotSign = y);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isSingular\",\n              value: function () {\n                for (var t = this.LU, r = t.columns, e = 0; e < r; e++)\n                  if (0 === t.get(e, e)) return !0;\n                return !1;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.LU;\n                if (r.rows !== t.rows)\n                  throw new Error(\"Invalid matrix dimensions\");\n                if (this.isSingular()) throw new Error(\"LU matrix is singular\");\n                var e,\n                  o,\n                  n,\n                  i = t.columns,\n                  s = t.subMatrixRow(this.pivotVector, 0, i - 1),\n                  u = r.columns;\n                for (n = 0; n < u; n++)\n                  for (e = n + 1; e < u; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                for (n = u - 1; n >= 0; n--) {\n                  for (o = 0; o < i; o++)\n                    s.set(n, o, s.get(n, o) / r.get(n, n));\n                  for (e = 0; e < n; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                }\n                return s;\n              },\n            },\n            {\n              key: \"determinant\",\n              get: function () {\n                var t = this.LU;\n                if (!t.isSquare()) throw new Error(\"Matrix must be square\");\n                for (var r = this.pivotSign, e = t.columns, o = 0; o < e; o++)\n                  r *= t.get(o, o);\n                return r;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n > i\n                      ? o.set(n, i, t.get(n, i))\n                      : n === i\n                      ? o.set(n, i, 1)\n                      : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n <= i ? o.set(n, i, t.get(n, i)) : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"pivotPermutationVector\",\n              get: function () {\n                return Array.from(this.pivotVector);\n              },\n            },\n          ]) && Rr(r.prototype, e),\n          o && Rr(r, o),\n          t\n        );\n      })();\n      function _r(t, r) {\n        var e = 0;\n        return Math.abs(t) > Math.abs(r)\n          ? ((e = r / t), Math.abs(t) * Math.sqrt(1 + e * e))\n          : 0 !== r\n          ? ((e = t / r), Math.abs(r) * Math.sqrt(1 + e * e))\n          : 0;\n      }\n      function Pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Tr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s = (r = Er.checkMatrix(r)).clone(),\n            u = r.rows,\n            a = r.columns,\n            f = new Float64Array(a);\n          for (n = 0; n < a; n++) {\n            var c = 0;\n            for (e = n; e < u; e++) c = _r(c, s.get(e, n));\n            if (0 !== c) {\n              for (s.get(n, n) < 0 && (c = -c), e = n; e < u; e++)\n                s.set(e, n, s.get(e, n) / c);\n              for (s.set(n, n, s.get(n, n) + 1), o = n + 1; o < a; o++) {\n                for (i = 0, e = n; e < u; e++) i += s.get(e, n) * s.get(e, o);\n                for (i = -i / s.get(n, n), e = n; e < u; e++)\n                  s.set(e, o, s.get(e, o) + i * s.get(e, n));\n              }\n            }\n            f[n] = -c;\n          }\n          (this.QR = s), (this.Rdiag = f);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.QR,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix row dimensions must agree\");\n                if (!this.isFullRank())\n                  throw new Error(\"Matrix is rank deficient\");\n                var o,\n                  n,\n                  i,\n                  s,\n                  u = t.columns,\n                  a = t.clone(),\n                  f = r.columns;\n                for (i = 0; i < f; i++)\n                  for (n = 0; n < u; n++) {\n                    for (s = 0, o = i; o < e; o++)\n                      s += r.get(o, i) * a.get(o, n);\n                    for (s = -s / r.get(i, i), o = i; o < e; o++)\n                      a.set(o, n, a.get(o, n) + s * r.get(o, i));\n                  }\n                for (i = f - 1; i >= 0; i--) {\n                  for (n = 0; n < u; n++)\n                    a.set(i, n, a.get(i, n) / this.Rdiag[i]);\n                  for (o = 0; o < i; o++)\n                    for (n = 0; n < u; n++)\n                      a.set(o, n, a.get(o, n) - a.get(i, n) * r.get(o, i));\n                }\n                return a.subMatrix(0, f - 1, 0, u - 1);\n              },\n            },\n            {\n              key: \"isFullRank\",\n              value: function () {\n                for (var t = this.QR.columns, r = 0; r < t; r++)\n                  if (0 === this.Rdiag[r]) return !1;\n                return !0;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.QR,\n                  o = e.columns,\n                  n = new K(o, o);\n                for (t = 0; t < o; t++)\n                  for (r = 0; r < o; r++)\n                    t < r\n                      ? n.set(t, r, e.get(t, r))\n                      : t === r\n                      ? n.set(t, r, this.Rdiag[t])\n                      : n.set(t, r, 0);\n                return n;\n              },\n            },\n            {\n              key: \"orthogonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e,\n                  o,\n                  n = this.QR,\n                  i = n.rows,\n                  s = n.columns,\n                  u = new K(i, s);\n                for (e = s - 1; e >= 0; e--) {\n                  for (t = 0; t < i; t++) u.set(t, e, 0);\n                  for (u.set(e, e, 1), r = e; r < s; r++)\n                    if (0 !== n.get(e, e)) {\n                      for (o = 0, t = e; t < i; t++)\n                        o += n.get(t, e) * u.get(t, r);\n                      for (o = -o / n.get(e, e), t = e; t < i; t++)\n                        u.set(t, r, u.get(t, r) + o * n.get(t, e));\n                    }\n                }\n                return u;\n              },\n            },\n          ]) && Pr(r.prototype, e),\n          o && Pr(r, o),\n          t\n        );\n      })();\n      function Ar(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Cr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Nr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          if ((Ar(this, t), (r = Er.checkMatrix(r)).isEmpty()))\n            throw new Error(\"Matrix must be non-empty\");\n          var o,\n            n = r.rows,\n            i = r.columns,\n            s = e.computeLeftSingularVectors,\n            u = void 0 === s || s,\n            a = e.computeRightSingularVectors,\n            f = void 0 === a || a,\n            c = e.autoTranspose,\n            h = void 0 !== c && c,\n            l = Boolean(u),\n            p = Boolean(f),\n            v = !1;\n          if (n < i)\n            if (h) {\n              (n = (o = r.transpose()).rows), (i = o.columns), (v = !0);\n              var y = l;\n              (l = p), (p = y);\n            } else\n              (o = r.clone()),\n                console.warn(\n                  \"Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose\",\n                );\n          else o = r.clone();\n          for (\n            var m = Math.min(n, i),\n              g = Math.min(n + 1, i),\n              w = new Float64Array(g),\n              b = new K(n, m),\n              d = new K(i, i),\n              M = new Float64Array(i),\n              x = new Float64Array(n),\n              k = new Float64Array(g),\n              S = 0;\n            S < g;\n            S++\n          )\n            k[S] = S;\n          for (\n            var E = Math.min(n - 1, i),\n              O = Math.max(0, Math.min(i - 2, n)),\n              R = Math.max(E, O),\n              j = 0;\n            j < R;\n            j++\n          ) {\n            if (j < E) {\n              w[j] = 0;\n              for (var _ = j; _ < n; _++) w[j] = _r(w[j], o.get(_, j));\n              if (0 !== w[j]) {\n                o.get(j, j) < 0 && (w[j] = -w[j]);\n                for (var P = j; P < n; P++) o.set(P, j, o.get(P, j) / w[j]);\n                o.set(j, j, o.get(j, j) + 1);\n              }\n              w[j] = -w[j];\n            }\n            for (var T = j + 1; T < i; T++) {\n              if (j < E && 0 !== w[j]) {\n                for (var A = 0, C = j; C < n; C++)\n                  A += o.get(C, j) * o.get(C, T);\n                A = -A / o.get(j, j);\n                for (var N = j; N < n; N++)\n                  o.set(N, T, o.get(N, T) + A * o.get(N, j));\n              }\n              M[T] = o.get(j, T);\n            }\n            if (l && j < E)\n              for (var I = j; I < n; I++) b.set(I, j, o.get(I, j));\n            if (j < O) {\n              M[j] = 0;\n              for (var V = j + 1; V < i; V++) M[j] = _r(M[j], M[V]);\n              if (0 !== M[j]) {\n                M[j + 1] < 0 && (M[j] = 0 - M[j]);\n                for (var q = j + 1; q < i; q++) M[q] /= M[j];\n                M[j + 1] += 1;\n              }\n              if (((M[j] = -M[j]), j + 1 < n && 0 !== M[j])) {\n                for (var D = j + 1; D < n; D++) x[D] = 0;\n                for (var F = j + 1; F < n; F++)\n                  for (var B = j + 1; B < i; B++) x[F] += M[B] * o.get(F, B);\n                for (var L = j + 1; L < i; L++)\n                  for (var z = -M[L] / M[j + 1], U = j + 1; U < n; U++)\n                    o.set(U, L, o.get(U, L) + z * x[U]);\n              }\n              if (p) for (var W = j + 1; W < i; W++) d.set(W, j, M[W]);\n            }\n          }\n          var Q = Math.min(i, n + 1);\n          if (\n            (E < i && (w[E] = o.get(E, E)),\n            n < Q && (w[Q - 1] = 0),\n            O + 1 < Q && (M[O] = o.get(O, Q - 1)),\n            (M[Q - 1] = 0),\n            l)\n          ) {\n            for (var J = E; J < m; J++) {\n              for (var Y = 0; Y < n; Y++) b.set(Y, J, 0);\n              b.set(J, J, 1);\n            }\n            for (var H = E - 1; H >= 0; H--)\n              if (0 !== w[H]) {\n                for (var X = H + 1; X < m; X++) {\n                  for (var G = 0, Z = H; Z < n; Z++)\n                    G += b.get(Z, H) * b.get(Z, X);\n                  G = -G / b.get(H, H);\n                  for (var $ = H; $ < n; $++)\n                    b.set($, X, b.get($, X) + G * b.get($, H));\n                }\n                for (var tt = H; tt < n; tt++) b.set(tt, H, -b.get(tt, H));\n                b.set(H, H, 1 + b.get(H, H));\n                for (var rt = 0; rt < H - 1; rt++) b.set(rt, H, 0);\n              } else {\n                for (var et = 0; et < n; et++) b.set(et, H, 0);\n                b.set(H, H, 1);\n              }\n          }\n          if (p)\n            for (var ot = i - 1; ot >= 0; ot--) {\n              if (ot < O && 0 !== M[ot])\n                for (var nt = ot + 1; nt < i; nt++) {\n                  for (var it = 0, st = ot + 1; st < i; st++)\n                    it += d.get(st, ot) * d.get(st, nt);\n                  it = -it / d.get(ot + 1, ot);\n                  for (var ut = ot + 1; ut < i; ut++)\n                    d.set(ut, nt, d.get(ut, nt) + it * d.get(ut, ot));\n                }\n              for (var at = 0; at < i; at++) d.set(at, ot, 0);\n              d.set(ot, ot, 1);\n            }\n          for (var ft = Q - 1, ct = Number.EPSILON; Q > 0; ) {\n            var ht = void 0,\n              lt = void 0;\n            for (ht = Q - 2; ht >= -1 && -1 !== ht; ht--) {\n              var pt =\n                Number.MIN_VALUE + ct * Math.abs(w[ht] + Math.abs(w[ht + 1]));\n              if (Math.abs(M[ht]) <= pt || Number.isNaN(M[ht])) {\n                M[ht] = 0;\n                break;\n              }\n            }\n            if (ht === Q - 2) lt = 4;\n            else {\n              var vt = void 0;\n              for (vt = Q - 1; vt >= ht && vt !== ht; vt--) {\n                var yt =\n                  (vt !== Q ? Math.abs(M[vt]) : 0) +\n                  (vt !== ht + 1 ? Math.abs(M[vt - 1]) : 0);\n                if (Math.abs(w[vt]) <= ct * yt) {\n                  w[vt] = 0;\n                  break;\n                }\n              }\n              vt === ht\n                ? (lt = 3)\n                : vt === Q - 1\n                ? (lt = 1)\n                : ((lt = 2), (ht = vt));\n            }\n            switch ((ht++, lt)) {\n              case 1:\n                var mt = M[Q - 2];\n                M[Q - 2] = 0;\n                for (var gt = Q - 2; gt >= ht; gt--) {\n                  var wt = _r(w[gt], mt),\n                    bt = w[gt] / wt,\n                    dt = mt / wt;\n                  if (\n                    ((w[gt] = wt),\n                    gt !== ht &&\n                      ((mt = -dt * M[gt - 1]), (M[gt - 1] = bt * M[gt - 1])),\n                    p)\n                  )\n                    for (var Mt = 0; Mt < i; Mt++)\n                      (wt = bt * d.get(Mt, gt) + dt * d.get(Mt, Q - 1)),\n                        d.set(\n                          Mt,\n                          Q - 1,\n                          -dt * d.get(Mt, gt) + bt * d.get(Mt, Q - 1),\n                        ),\n                        d.set(Mt, gt, wt);\n                }\n                break;\n              case 2:\n                var xt = M[ht - 1];\n                M[ht - 1] = 0;\n                for (var kt = ht; kt < Q; kt++) {\n                  var St = _r(w[kt], xt),\n                    Et = w[kt] / St,\n                    Ot = xt / St;\n                  if (\n                    ((w[kt] = St), (xt = -Ot * M[kt]), (M[kt] = Et * M[kt]), l)\n                  )\n                    for (var Rt = 0; Rt < n; Rt++)\n                      (St = Et * b.get(Rt, kt) + Ot * b.get(Rt, ht - 1)),\n                        b.set(\n                          Rt,\n                          ht - 1,\n                          -Ot * b.get(Rt, kt) + Et * b.get(Rt, ht - 1),\n                        ),\n                        b.set(Rt, kt, St);\n                }\n                break;\n              case 3:\n                var jt = Math.max(\n                    Math.abs(w[Q - 1]),\n                    Math.abs(w[Q - 2]),\n                    Math.abs(M[Q - 2]),\n                    Math.abs(w[ht]),\n                    Math.abs(M[ht]),\n                  ),\n                  _t = w[Q - 1] / jt,\n                  Pt = w[Q - 2] / jt,\n                  Tt = M[Q - 2] / jt,\n                  At = w[ht] / jt,\n                  Ct = M[ht] / jt,\n                  Nt = ((Pt + _t) * (Pt - _t) + Tt * Tt) / 2,\n                  It = _t * Tt * (_t * Tt),\n                  Vt = 0;\n                (0 === Nt && 0 === It) ||\n                  (Vt =\n                    It /\n                    (Nt +\n                      (Vt =\n                        Nt < 0\n                          ? 0 - Math.sqrt(Nt * Nt + It)\n                          : Math.sqrt(Nt * Nt + It))));\n                for (\n                  var qt = (At + _t) * (At - _t) + Vt, Dt = At * Ct, Ft = ht;\n                  Ft < Q - 1;\n                  Ft++\n                ) {\n                  var Bt = _r(qt, Dt);\n                  0 === Bt && (Bt = Number.MIN_VALUE);\n                  var Lt = qt / Bt,\n                    zt = Dt / Bt;\n                  if (\n                    (Ft !== ht && (M[Ft - 1] = Bt),\n                    (qt = Lt * w[Ft] + zt * M[Ft]),\n                    (M[Ft] = Lt * M[Ft] - zt * w[Ft]),\n                    (Dt = zt * w[Ft + 1]),\n                    (w[Ft + 1] = Lt * w[Ft + 1]),\n                    p)\n                  )\n                    for (var Ut = 0; Ut < i; Ut++)\n                      (Bt = Lt * d.get(Ut, Ft) + zt * d.get(Ut, Ft + 1)),\n                        d.set(\n                          Ut,\n                          Ft + 1,\n                          -zt * d.get(Ut, Ft) + Lt * d.get(Ut, Ft + 1),\n                        ),\n                        d.set(Ut, Ft, Bt);\n                  if (\n                    (0 === (Bt = _r(qt, Dt)) && (Bt = Number.MIN_VALUE),\n                    (Lt = qt / Bt),\n                    (zt = Dt / Bt),\n                    (w[Ft] = Bt),\n                    (qt = Lt * M[Ft] + zt * w[Ft + 1]),\n                    (w[Ft + 1] = -zt * M[Ft] + Lt * w[Ft + 1]),\n                    (Dt = zt * M[Ft + 1]),\n                    (M[Ft + 1] = Lt * M[Ft + 1]),\n                    l && Ft < n - 1)\n                  )\n                    for (var Wt = 0; Wt < n; Wt++)\n                      (Bt = Lt * b.get(Wt, Ft) + zt * b.get(Wt, Ft + 1)),\n                        b.set(\n                          Wt,\n                          Ft + 1,\n                          -zt * b.get(Wt, Ft) + Lt * b.get(Wt, Ft + 1),\n                        ),\n                        b.set(Wt, Ft, Bt);\n                }\n                (M[Q - 2] = qt), 1;\n                break;\n              case 4:\n                if (w[ht] <= 0 && ((w[ht] = w[ht] < 0 ? -w[ht] : 0), p))\n                  for (var Qt = 0; Qt <= ft; Qt++)\n                    d.set(Qt, ht, -d.get(Qt, ht));\n                for (; ht < ft && !(w[ht] >= w[ht + 1]); ) {\n                  var Jt = w[ht];\n                  if (((w[ht] = w[ht + 1]), (w[ht + 1] = Jt), p && ht < i - 1))\n                    for (var Yt = 0; Yt < i; Yt++)\n                      (Jt = d.get(Yt, ht + 1)),\n                        d.set(Yt, ht + 1, d.get(Yt, ht)),\n                        d.set(Yt, ht, Jt);\n                  if (l && ht < n - 1)\n                    for (var Ht = 0; Ht < n; Ht++)\n                      (Jt = b.get(Ht, ht + 1)),\n                        b.set(Ht, ht + 1, b.get(Ht, ht)),\n                        b.set(Ht, ht, Jt);\n                  ht++;\n                }\n                0, Q--;\n            }\n          }\n          if (v) {\n            var Kt = d;\n            (d = b), (b = Kt);\n          }\n          (this.m = n), (this.n = i), (this.s = w), (this.U = b), (this.V = d);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                for (\n                  var r = t,\n                    e = this.threshold,\n                    o = this.s.length,\n                    n = K.zeros(o, o),\n                    i = 0;\n                  i < o;\n                  i++\n                )\n                  Math.abs(this.s[i]) <= e\n                    ? n.set(i, i, 0)\n                    : n.set(i, i, 1 / this.s[i]);\n                for (\n                  var s = this.U,\n                    u = this.rightSingularVectors,\n                    a = u.mmul(n),\n                    f = u.rows,\n                    c = s.rows,\n                    h = K.zeros(f, c),\n                    l = 0;\n                  l < f;\n                  l++\n                )\n                  for (var p = 0; p < c; p++) {\n                    for (var v = 0, y = 0; y < o; y++)\n                      v += a.get(l, y) * s.get(p, y);\n                    h.set(l, p, v);\n                  }\n                return h.mmul(r);\n              },\n            },\n            {\n              key: \"solveForDiagonal\",\n              value: function (t) {\n                return this.solve(K.diag(t));\n              },\n            },\n            {\n              key: \"inverse\",\n              value: function () {\n                for (\n                  var t = this.V,\n                    r = this.threshold,\n                    e = t.rows,\n                    o = t.columns,\n                    n = new K(e, this.s.length),\n                    i = 0;\n                  i < e;\n                  i++\n                )\n                  for (var s = 0; s < o; s++)\n                    Math.abs(this.s[s]) > r &&\n                      n.set(i, s, t.get(i, s) / this.s[s]);\n                for (\n                  var u = this.U,\n                    a = u.rows,\n                    f = u.columns,\n                    c = new K(e, a),\n                    h = 0;\n                  h < e;\n                  h++\n                )\n                  for (var l = 0; l < a; l++) {\n                    for (var p = 0, v = 0; v < f; v++)\n                      p += n.get(h, v) * u.get(l, v);\n                    c.set(h, l, p);\n                  }\n                return c;\n              },\n            },\n            {\n              key: \"condition\",\n              get: function () {\n                return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n              },\n            },\n            {\n              key: \"norm2\",\n              get: function () {\n                return this.s[0];\n              },\n            },\n            {\n              key: \"rank\",\n              get: function () {\n                for (\n                  var t = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON,\n                    r = 0,\n                    e = this.s,\n                    o = 0,\n                    n = e.length;\n                  o < n;\n                  o++\n                )\n                  e[o] > t && r++;\n                return r;\n              },\n            },\n            {\n              key: \"diagonal\",\n              get: function () {\n                return Array.from(this.s);\n              },\n            },\n            {\n              key: \"threshold\",\n              get: function () {\n                return (\n                  (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0]\n                );\n              },\n            },\n            {\n              key: \"leftSingularVectors\",\n              get: function () {\n                return this.U;\n              },\n            },\n            {\n              key: \"rightSingularVectors\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                return K.diag(this.s);\n              },\n            },\n          ]) && Cr(r.prototype, e),\n          o && Cr(r, o),\n          t\n        );\n      })();\n      function Ir(t) {\n        var r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n        return (\n          (t = Er.checkMatrix(t)),\n          r ? new Nr(t).inverse() : Vr(t, K.eye(t.rows))\n        );\n      }\n      function Vr(t, r) {\n        var e = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\n        return (\n          (t = Er.checkMatrix(t)),\n          (r = Er.checkMatrix(r)),\n          e\n            ? new Nr(t).solve(r)\n            : t.isSquare()\n            ? new jr(t).solve(r)\n            : new Tr(t).solve(r)\n        );\n      }\n      function qr(t) {\n        var r, e, o, n, i, s;\n        if ((t = K.checkMatrix(t)).isSquare())\n          return 0 === t.columns\n            ? 1\n            : 2 === t.columns\n            ? ((r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(1, 0)),\n              r * t.get(1, 1) - e * o)\n            : 3 === t.columns\n            ? ((n = new Xt(t, [1, 2], [1, 2])),\n              (i = new Xt(t, [1, 2], [0, 2])),\n              (s = new Xt(t, [1, 2], [0, 1])),\n              (r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(0, 2)),\n              r * qr(n) - e * qr(i) + o * qr(s))\n            : new jr(t).determinant;\n        throw Error(\"determinant can only be calculated for a square matrix\");\n      }\n      function Dr(t, r) {\n        for (var e = [], o = 0; o < t; o++) o !== r && e.push(o);\n        return e;\n      }\n      function Fr(t, r, e) {\n        var o =\n            arguments.length > 3 && void 0 !== arguments[3]\n              ? arguments[3]\n              : 1e-9,\n          n =\n            arguments.length > 4 && void 0 !== arguments[4]\n              ? arguments[4]\n              : 1e-9;\n        if (t > n) return new Array(r.rows + 1).fill(0);\n        for (var i = r.addRow(e, [0]), s = 0; s < i.rows; s++)\n          Math.abs(i.get(s, 0)) < o && i.set(s, 0, 0);\n        return i.to1DArray();\n      }\n      function Br(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            e = r.thresholdValue,\n            o = void 0 === e ? 1e-9 : e,\n            n = r.thresholdError,\n            i = void 0 === n ? 1e-9 : n,\n            s = (t = K.checkMatrix(t)).rows,\n            u = new K(s, s),\n            a = 0;\n          a < s;\n          a++\n        ) {\n          var f = K.columnVector(t.getRow(a)),\n            c = t.subMatrixRow(Dr(s, a)).transpose(),\n            h = new Nr(c),\n            l = h.solve(f),\n            p = K.sub(f, c.mmul(l)).abs().max();\n          u.setRow(a, Fr(p, l, a, o, i));\n        }\n        return u;\n      }\n      function Lr(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1]\n            ? arguments[1]\n            : Number.EPSILON;\n        if ((t = K.checkMatrix(t)).isEmpty()) return t.transpose();\n        for (\n          var e = new Nr(t, { autoTranspose: !0 }),\n            o = e.leftSingularVectors,\n            n = e.rightSingularVectors,\n            i = e.diagonal,\n            s = 0;\n          s < i.length;\n          s++\n        )\n          Math.abs(i[s]) > r ? (i[s] = 1 / i[s]) : (i[s] = 0);\n        return n.mmul(K.diag(i).mmul(o.transpose()));\n      }\n      function zr(t) {\n        return (zr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Ur(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== zr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i;\n        s && ((t = t.center(\"column\")), o || (r = r.center(\"column\")));\n        for (var u = t.transpose().mmul(r), a = 0; a < u.rows; a++)\n          for (var f = 0; f < u.columns; f++)\n            u.set(a, f, u.get(a, f) * (1 / (t.rows - 1)));\n        return u;\n      }\n      function Wr(t) {\n        return (Wr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== Wr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i,\n          u = n.scale,\n          a = void 0 === u || u;\n        s && (t.center(\"column\"), o || r.center(\"column\")),\n          a && (t.scale(\"column\"), o || r.scale(\"column\"));\n        for (\n          var f = t.standardDeviation(\"column\", { unbiased: !0 }),\n            c = o ? f : r.standardDeviation(\"column\", { unbiased: !0 }),\n            h = t.transpose().mmul(r),\n            l = 0;\n          l < h.rows;\n          l++\n        )\n          for (var p = 0; p < h.columns; p++)\n            h.set(l, p, h.get(l, p) * (1 / (f[l] * c[p])) * (1 / (t.rows - 1)));\n        return h;\n      }\n      function Jr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Yr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Hr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          Jr(this, t);\n          var o = e.assumeSymmetric,\n            n = void 0 !== o && o;\n          if (!(r = Er.checkMatrix(r)).isSquare())\n            throw new Error(\"Matrix is not a square matrix\");\n          if (r.isEmpty()) throw new Error(\"Matrix must be non-empty\");\n          var i,\n            s,\n            u = r.columns,\n            a = new K(u, u),\n            f = new Float64Array(u),\n            c = new Float64Array(u),\n            h = r;\n          if (!!n || r.isSymmetric()) {\n            for (i = 0; i < u; i++)\n              for (s = 0; s < u; s++) a.set(i, s, h.get(i, s));\n            Kr(u, c, f, a), Xr(u, c, f, a);\n          } else {\n            var l = new K(u, u),\n              p = new Float64Array(u);\n            for (s = 0; s < u; s++)\n              for (i = 0; i < u; i++) l.set(i, s, h.get(i, s));\n            Gr(u, l, p, a), Zr(u, c, f, a, l);\n          }\n          (this.n = u), (this.e = c), (this.d = f), (this.V = a);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"realEigenvalues\",\n              get: function () {\n                return Array.from(this.d);\n              },\n            },\n            {\n              key: \"imaginaryEigenvalues\",\n              get: function () {\n                return Array.from(this.e);\n              },\n            },\n            {\n              key: \"eigenvectorMatrix\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.n,\n                  o = this.e,\n                  n = this.d,\n                  i = new K(e, e);\n                for (t = 0; t < e; t++) {\n                  for (r = 0; r < e; r++) i.set(t, r, 0);\n                  i.set(t, t, n[t]),\n                    o[t] > 0\n                      ? i.set(t, t + 1, o[t])\n                      : o[t] < 0 && i.set(t, t - 1, o[t]);\n                }\n                return i;\n              },\n            },\n          ]) && Yr(r.prototype, e),\n          o && Yr(r, o),\n          t\n        );\n      })();\n      function Kr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h;\n        for (a = 0; a < t; a++) e[a] = o.get(t - 1, a);\n        for (u = t - 1; u > 0; u--) {\n          for (h = 0, s = 0, f = 0; f < u; f++) h += Math.abs(e[f]);\n          if (0 === h)\n            for (r[u] = e[u - 1], a = 0; a < u; a++)\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0), o.set(a, u, 0);\n          else {\n            for (f = 0; f < u; f++) (e[f] /= h), (s += e[f] * e[f]);\n            for (\n              n = e[u - 1],\n                i = Math.sqrt(s),\n                n > 0 && (i = -i),\n                r[u] = h * i,\n                s -= n * i,\n                e[u - 1] = n - i,\n                a = 0;\n              a < u;\n              a++\n            )\n              r[a] = 0;\n            for (a = 0; a < u; a++) {\n              for (\n                n = e[a], o.set(a, u, n), i = r[a] + o.get(a, a) * n, f = a + 1;\n                f <= u - 1;\n                f++\n              )\n                (i += o.get(f, a) * e[f]), (r[f] += o.get(f, a) * n);\n              r[a] = i;\n            }\n            for (n = 0, a = 0; a < u; a++) (r[a] /= s), (n += r[a] * e[a]);\n            for (c = n / (s + s), a = 0; a < u; a++) r[a] -= c * e[a];\n            for (a = 0; a < u; a++) {\n              for (n = e[a], i = r[a], f = a; f <= u - 1; f++)\n                o.set(f, a, o.get(f, a) - (n * r[f] + i * e[f]));\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0);\n            }\n          }\n          e[u] = s;\n        }\n        for (u = 0; u < t - 1; u++) {\n          if (\n            (o.set(t - 1, u, o.get(u, u)), o.set(u, u, 1), 0 !== (s = e[u + 1]))\n          ) {\n            for (f = 0; f <= u; f++) e[f] = o.get(f, u + 1) / s;\n            for (a = 0; a <= u; a++) {\n              for (i = 0, f = 0; f <= u; f++)\n                i += o.get(f, u + 1) * o.get(f, a);\n              for (f = 0; f <= u; f++) o.set(f, a, o.get(f, a) - i * e[f]);\n            }\n          }\n          for (f = 0; f <= u; f++) o.set(f, u + 1, 0);\n        }\n        for (a = 0; a < t; a++) (e[a] = o.get(t - 1, a)), o.set(t - 1, a, 0);\n        o.set(t - 1, t - 1, 1), (r[0] = 0);\n      }\n      function Xr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h, l, p, v, y, m, g, w, b;\n        for (s = 1; s < t; s++) r[s - 1] = r[s];\n        r[t - 1] = 0;\n        var d = 0,\n          M = 0,\n          x = Number.EPSILON;\n        for (f = 0; f < t; f++) {\n          for (\n            M = Math.max(M, Math.abs(e[f]) + Math.abs(r[f])), c = f;\n            c < t && !(Math.abs(r[c]) <= x * M);\n\n          )\n            c++;\n          if (c > f) {\n            0;\n            do {\n              for (\n                1,\n                  n = e[f],\n                  l = _r((h = (e[f + 1] - n) / (2 * r[f])), 1),\n                  h < 0 && (l = -l),\n                  e[f] = r[f] / (h + l),\n                  e[f + 1] = r[f] * (h + l),\n                  p = e[f + 1],\n                  i = n - e[f],\n                  s = f + 2;\n                s < t;\n                s++\n              )\n                e[s] -= i;\n              for (\n                d += i,\n                  h = e[c],\n                  y = v = 1,\n                  m = v,\n                  g = r[f + 1],\n                  w = 0,\n                  b = 0,\n                  s = c - 1;\n                s >= f;\n                s--\n              )\n                for (\n                  m = y,\n                    y = v,\n                    b = w,\n                    n = v * r[s],\n                    i = v * h,\n                    l = _r(h, r[s]),\n                    r[s + 1] = w * l,\n                    w = r[s] / l,\n                    h = (v = h / l) * e[s] - w * n,\n                    e[s + 1] = i + w * (v * n + w * e[s]),\n                    a = 0;\n                  a < t;\n                  a++\n                )\n                  (i = o.get(a, s + 1)),\n                    o.set(a, s + 1, w * o.get(a, s) + v * i),\n                    o.set(a, s, v * o.get(a, s) - w * i);\n              (h = (-w * b * m * g * r[f]) / p), (r[f] = w * h), (e[f] = v * h);\n            } while (Math.abs(r[f]) > x * M);\n          }\n          (e[f] = e[f] + d), (r[f] = 0);\n        }\n        for (s = 0; s < t - 1; s++) {\n          for (a = s, h = e[s], u = s + 1; u < t; u++)\n            e[u] < h && ((a = u), (h = e[u]));\n          if (a !== s)\n            for (e[a] = e[s], e[s] = h, u = 0; u < t; u++)\n              (h = o.get(u, s)), o.set(u, s, o.get(u, a)), o.set(u, a, h);\n        }\n      }\n      function Gr(t, r, e, o) {\n        var n,\n          i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h = t - 1;\n        for (f = 1; f <= h - 1; f++) {\n          for (c = 0, u = f; u <= h; u++) c += Math.abs(r.get(u, f - 1));\n          if (0 !== c) {\n            for (s = 0, u = h; u >= f; u--)\n              (e[u] = r.get(u, f - 1) / c), (s += e[u] * e[u]);\n            for (\n              i = Math.sqrt(s),\n                e[f] > 0 && (i = -i),\n                s -= e[f] * i,\n                e[f] = e[f] - i,\n                a = f;\n              a < t;\n              a++\n            ) {\n              for (n = 0, u = h; u >= f; u--) n += e[u] * r.get(u, a);\n              for (n /= s, u = f; u <= h; u++)\n                r.set(u, a, r.get(u, a) - n * e[u]);\n            }\n            for (u = 0; u <= h; u++) {\n              for (n = 0, a = h; a >= f; a--) n += e[a] * r.get(u, a);\n              for (n /= s, a = f; a <= h; a++)\n                r.set(u, a, r.get(u, a) - n * e[a]);\n            }\n            (e[f] = c * e[f]), r.set(f, f - 1, c * i);\n          }\n        }\n        for (u = 0; u < t; u++)\n          for (a = 0; a < t; a++) o.set(u, a, u === a ? 1 : 0);\n        for (f = h - 1; f >= 1; f--)\n          if (0 !== r.get(f, f - 1)) {\n            for (u = f + 1; u <= h; u++) e[u] = r.get(u, f - 1);\n            for (a = f; a <= h; a++) {\n              for (i = 0, u = f; u <= h; u++) i += e[u] * o.get(u, a);\n              for (i = i / e[f] / r.get(f, f - 1), u = f; u <= h; u++)\n                o.set(u, a, o.get(u, a) + i * e[u]);\n            }\n          }\n      }\n      function Zr(t, r, e, o, n) {\n        var i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h,\n          l,\n          p,\n          v,\n          y,\n          m,\n          g,\n          w,\n          b,\n          d = t - 1,\n          M = t - 1,\n          x = Number.EPSILON,\n          k = 0,\n          S = 0,\n          E = 0,\n          O = 0,\n          R = 0,\n          j = 0,\n          _ = 0,\n          P = 0;\n        for (i = 0; i < t; i++)\n          for (\n            (i < 0 || i > M) && ((e[i] = n.get(i, i)), (r[i] = 0)),\n              s = Math.max(i - 1, 0);\n            s < t;\n            s++\n          )\n            S += Math.abs(n.get(i, s));\n        for (; d >= 0; ) {\n          for (\n            a = d;\n            a > 0 &&\n            (0 ===\n              (j = Math.abs(n.get(a - 1, a - 1)) + Math.abs(n.get(a, a))) &&\n              (j = S),\n            !(Math.abs(n.get(a, a - 1)) < x * j));\n\n          )\n            a--;\n          if (a === d)\n            n.set(d, d, n.get(d, d) + k),\n              (e[d] = n.get(d, d)),\n              (r[d] = 0),\n              d--,\n              (P = 0);\n          else if (a === d - 1) {\n            if (\n              ((h = n.get(d, d - 1) * n.get(d - 1, d)),\n              (O = (E = (n.get(d - 1, d - 1) - n.get(d, d)) / 2) * E + h),\n              (_ = Math.sqrt(Math.abs(O))),\n              n.set(d, d, n.get(d, d) + k),\n              n.set(d - 1, d - 1, n.get(d - 1, d - 1) + k),\n              (l = n.get(d, d)),\n              O >= 0)\n            ) {\n              for (\n                _ = E >= 0 ? E + _ : E - _,\n                  e[d - 1] = l + _,\n                  e[d] = e[d - 1],\n                  0 !== _ && (e[d] = l - h / _),\n                  r[d - 1] = 0,\n                  r[d] = 0,\n                  E = (l = n.get(d, d - 1)) / (j = Math.abs(l) + Math.abs(_)),\n                  O = _ / j,\n                  E /= R = Math.sqrt(E * E + O * O),\n                  O /= R,\n                  s = d - 1;\n                s < t;\n                s++\n              )\n                (_ = n.get(d - 1, s)),\n                  n.set(d - 1, s, O * _ + E * n.get(d, s)),\n                  n.set(d, s, O * n.get(d, s) - E * _);\n              for (i = 0; i <= d; i++)\n                (_ = n.get(i, d - 1)),\n                  n.set(i, d - 1, O * _ + E * n.get(i, d)),\n                  n.set(i, d, O * n.get(i, d) - E * _);\n              for (i = 0; i <= M; i++)\n                (_ = o.get(i, d - 1)),\n                  o.set(i, d - 1, O * _ + E * o.get(i, d)),\n                  o.set(i, d, O * o.get(i, d) - E * _);\n            } else\n              (e[d - 1] = l + E), (e[d] = l + E), (r[d - 1] = _), (r[d] = -_);\n            (d -= 2), (P = 0);\n          } else {\n            if (\n              ((l = n.get(d, d)),\n              (p = 0),\n              (h = 0),\n              a < d &&\n                ((p = n.get(d - 1, d - 1)),\n                (h = n.get(d, d - 1) * n.get(d - 1, d))),\n              10 === P)\n            ) {\n              for (k += l, i = 0; i <= d; i++) n.set(i, i, n.get(i, i) - l);\n              (l = p =\n                0.75 *\n                (j =\n                  Math.abs(n.get(d, d - 1)) + Math.abs(n.get(d - 1, d - 2)))),\n                (h = -0.4375 * j * j);\n            }\n            if (30 === P && (j = (j = (p - l) / 2) * j + h) > 0) {\n              for (\n                j = Math.sqrt(j),\n                  p < l && (j = -j),\n                  j = l - h / ((p - l) / 2 + j),\n                  i = 0;\n                i <= d;\n                i++\n              )\n                n.set(i, i, n.get(i, i) - j);\n              (k += j), (l = p = h = 0.964);\n            }\n            for (\n              P += 1, f = d - 2;\n              f >= a &&\n              ((E =\n                ((R = l - (_ = n.get(f, f))) * (j = p - _) - h) /\n                  n.get(f + 1, f) +\n                n.get(f, f + 1)),\n              (O = n.get(f + 1, f + 1) - _ - R - j),\n              (R = n.get(f + 2, f + 1)),\n              (E /= j = Math.abs(E) + Math.abs(O) + Math.abs(R)),\n              (O /= j),\n              (R /= j),\n              f !== a) &&\n              !(\n                Math.abs(n.get(f, f - 1)) * (Math.abs(O) + Math.abs(R)) <\n                x *\n                  (Math.abs(E) *\n                    (Math.abs(n.get(f - 1, f - 1)) +\n                      Math.abs(_) +\n                      Math.abs(n.get(f + 1, f + 1))))\n              );\n\n            )\n              f--;\n            for (i = f + 2; i <= d; i++)\n              n.set(i, i - 2, 0), i > f + 2 && n.set(i, i - 3, 0);\n            for (\n              u = f;\n              u <= d - 1 &&\n              ((w = u !== d - 1),\n              u !== f &&\n                ((E = n.get(u, u - 1)),\n                (O = n.get(u + 1, u - 1)),\n                (R = w ? n.get(u + 2, u - 1) : 0),\n                0 !== (l = Math.abs(E) + Math.abs(O) + Math.abs(R)) &&\n                  ((E /= l), (O /= l), (R /= l))),\n              0 !== l);\n              u++\n            )\n              if (\n                ((j = Math.sqrt(E * E + O * O + R * R)),\n                E < 0 && (j = -j),\n                0 !== j)\n              ) {\n                for (\n                  u !== f\n                    ? n.set(u, u - 1, -j * l)\n                    : a !== f && n.set(u, u - 1, -n.get(u, u - 1)),\n                    l = (E += j) / j,\n                    p = O / j,\n                    _ = R / j,\n                    O /= E,\n                    R /= E,\n                    s = u;\n                  s < t;\n                  s++\n                )\n                  (E = n.get(u, s) + O * n.get(u + 1, s)),\n                    w &&\n                      ((E += R * n.get(u + 2, s)),\n                      n.set(u + 2, s, n.get(u + 2, s) - E * _)),\n                    n.set(u, s, n.get(u, s) - E * l),\n                    n.set(u + 1, s, n.get(u + 1, s) - E * p);\n                for (i = 0; i <= Math.min(d, u + 3); i++)\n                  (E = l * n.get(i, u) + p * n.get(i, u + 1)),\n                    w &&\n                      ((E += _ * n.get(i, u + 2)),\n                      n.set(i, u + 2, n.get(i, u + 2) - E * R)),\n                    n.set(i, u, n.get(i, u) - E),\n                    n.set(i, u + 1, n.get(i, u + 1) - E * O);\n                for (i = 0; i <= M; i++)\n                  (E = l * o.get(i, u) + p * o.get(i, u + 1)),\n                    w &&\n                      ((E += _ * o.get(i, u + 2)),\n                      o.set(i, u + 2, o.get(i, u + 2) - E * R)),\n                    o.set(i, u, o.get(i, u) - E),\n                    o.set(i, u + 1, o.get(i, u + 1) - E * O);\n              }\n          }\n        }\n        if (0 !== S) {\n          for (d = t - 1; d >= 0; d--)\n            if (((E = e[d]), 0 === (O = r[d])))\n              for (a = d, n.set(d, d, 1), i = d - 1; i >= 0; i--) {\n                for (h = n.get(i, i) - E, R = 0, s = a; s <= d; s++)\n                  R += n.get(i, s) * n.get(s, d);\n                if (r[i] < 0) (_ = h), (j = R);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? n.set(i, d, 0 !== h ? -R / h : -R / (x * S))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (c =\n                        (l * j - _ * R) /\n                        (O = (e[i] - E) * (e[i] - E) + r[i] * r[i])),\n                      n.set(i, d, c),\n                      n.set(\n                        i + 1,\n                        d,\n                        Math.abs(l) > Math.abs(_)\n                          ? (-R - h * c) / l\n                          : (-j - p * c) / _,\n                      )),\n                  x * (c = Math.abs(n.get(i, d))) * c > 1)\n                )\n                  for (s = i; s <= d; s++) n.set(s, d, n.get(s, d) / c);\n              }\n            else if (O < 0)\n              for (\n                a = d - 1,\n                  Math.abs(n.get(d, d - 1)) > Math.abs(n.get(d - 1, d))\n                    ? (n.set(d - 1, d - 1, O / n.get(d, d - 1)),\n                      n.set(d - 1, d, -(n.get(d, d) - E) / n.get(d, d - 1)))\n                    : ((b = $r(\n                        0,\n                        -n.get(d - 1, d),\n                        n.get(d - 1, d - 1) - E,\n                        O,\n                      )),\n                      n.set(d - 1, d - 1, b[0]),\n                      n.set(d - 1, d, b[1])),\n                  n.set(d, d - 1, 0),\n                  n.set(d, d, 1),\n                  i = d - 2;\n                i >= 0;\n                i--\n              ) {\n                for (v = 0, y = 0, s = a; s <= d; s++)\n                  (v += n.get(i, s) * n.get(s, d - 1)),\n                    (y += n.get(i, s) * n.get(s, d));\n                if (((h = n.get(i, i) - E), r[i] < 0))\n                  (_ = h), (R = v), (j = y);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? ((b = $r(-v, -y, h, O)),\n                      n.set(i, d - 1, b[0]),\n                      n.set(i, d, b[1]))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (m = (e[i] - E) * (e[i] - E) + r[i] * r[i] - O * O),\n                      (g = 2 * (e[i] - E) * O),\n                      0 === m &&\n                        0 === g &&\n                        (m =\n                          x *\n                          S *\n                          (Math.abs(h) +\n                            Math.abs(O) +\n                            Math.abs(l) +\n                            Math.abs(p) +\n                            Math.abs(_))),\n                      (b = $r(\n                        l * R - _ * v + O * y,\n                        l * j - _ * y - O * v,\n                        m,\n                        g,\n                      )),\n                      n.set(i, d - 1, b[0]),\n                      n.set(i, d, b[1]),\n                      Math.abs(l) > Math.abs(_) + Math.abs(O)\n                        ? (n.set(\n                            i + 1,\n                            d - 1,\n                            (-v - h * n.get(i, d - 1) + O * n.get(i, d)) / l,\n                          ),\n                          n.set(\n                            i + 1,\n                            d,\n                            (-y - h * n.get(i, d) - O * n.get(i, d - 1)) / l,\n                          ))\n                        : ((b = $r(\n                            -R - p * n.get(i, d - 1),\n                            -j - p * n.get(i, d),\n                            _,\n                            O,\n                          )),\n                          n.set(i + 1, d - 1, b[0]),\n                          n.set(i + 1, d, b[1]))),\n                  x *\n                    (c = Math.max(\n                      Math.abs(n.get(i, d - 1)),\n                      Math.abs(n.get(i, d)),\n                    )) *\n                    c >\n                    1)\n                )\n                  for (s = i; s <= d; s++)\n                    n.set(s, d - 1, n.get(s, d - 1) / c),\n                      n.set(s, d, n.get(s, d) / c);\n              }\n          for (i = 0; i < t; i++)\n            if (i < 0 || i > M)\n              for (s = i; s < t; s++) o.set(i, s, n.get(i, s));\n          for (s = t - 1; s >= 0; s--)\n            for (i = 0; i <= M; i++) {\n              for (_ = 0, u = 0; u <= Math.min(s, M); u++)\n                _ += o.get(i, u) * n.get(u, s);\n              o.set(i, s, _);\n            }\n        }\n      }\n      function $r(t, r, e, o) {\n        var n, i;\n        return Math.abs(e) > Math.abs(o)\n          ? [(t + (n = o / e) * r) / (i = e + n * o), (r - n * t) / i]\n          : [((n = e / o) * t + r) / (i = o + n * e), (n * r - t) / i];\n      }\n      function te(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var re = (function () {\n        function t(r) {\n          if (\n            ((function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, t),\n            !(r = Er.checkMatrix(r)).isSymmetric())\n          )\n            throw new Error(\"Matrix is not symmetric\");\n          var e,\n            o,\n            n,\n            i = r,\n            s = i.rows,\n            u = new K(s, s),\n            a = !0;\n          for (o = 0; o < s; o++) {\n            var f = 0;\n            for (n = 0; n < o; n++) {\n              var c = 0;\n              for (e = 0; e < n; e++) c += u.get(n, e) * u.get(o, e);\n              (c = (i.get(o, n) - c) / u.get(n, n)),\n                u.set(o, n, c),\n                (f += c * c);\n            }\n            for (\n              a &= (f = i.get(o, o) - f) > 0,\n                u.set(o, o, Math.sqrt(Math.max(f, 0))),\n                n = o + 1;\n              n < s;\n              n++\n            )\n              u.set(o, n, 0);\n          }\n          (this.L = u), (this.positiveDefinite = Boolean(a));\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isPositiveDefinite\",\n              value: function () {\n                return this.positiveDefinite;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Er.checkMatrix(t);\n                var r = this.L,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix dimensions do not match\");\n                if (!1 === this.isPositiveDefinite())\n                  throw new Error(\"Matrix is not positive definite\");\n                var o,\n                  n,\n                  i,\n                  s = t.columns,\n                  u = t.clone();\n                for (i = 0; i < e; i++)\n                  for (n = 0; n < s; n++) {\n                    for (o = 0; o < i; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(i, o));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                for (i = e - 1; i >= 0; i--)\n                  for (n = 0; n < s; n++) {\n                    for (o = i + 1; o < e; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(o, i));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                return u;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                return this.L;\n              },\n            },\n          ]) && te(r.prototype, e),\n          o && te(r, o),\n          t\n        );\n      })();\n      function ee(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      var oe = function t(r) {\n        var e =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        ee(this, t), (r = Er.checkMatrix(r));\n        var o,\n          n = e.Y,\n          i = e.scaleScores,\n          s = void 0 !== i && i,\n          u = e.maxIterations,\n          a = void 0 === u ? 1e3 : u,\n          f = e.terminationCriteria,\n          c = void 0 === f ? 1e-10 : f;\n        if (n) {\n          if (\n            (n =\n              Array.isArray(n) && \"number\" == typeof n[0]\n                ? K.columnVector(n)\n                : Er.checkMatrix(n)).rows !== r.rows\n          )\n            throw new Error(\"Y should have the same number of rows as X\");\n          o = n.getColumnVector(0);\n        } else o = r.getColumnVector(0);\n        for (var h, l, p, v, y = 1, m = 0; m < a && y > c; m++)\n          (p = (p = r\n            .transpose()\n            .mmul(o)\n            .div(o.transpose().mmul(o).get(0, 0))).div(p.norm())),\n            (h = r.mmul(p).div(p.transpose().mmul(p).get(0, 0))),\n            m > 0 && (y = h.clone().sub(v).pow(2).sum()),\n            (v = h.clone()),\n            n\n              ? ((l = (l = n\n                  .transpose()\n                  .mmul(h)\n                  .div(h.transpose().mmul(h).get(0, 0))).div(l.norm())),\n                (o = n.mmul(l).div(l.transpose().mmul(l).get(0, 0))))\n              : (o = h);\n        if (n) {\n          var g = r.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0));\n          g = g.div(g.norm());\n          var w = r.clone().sub(h.clone().mmul(g.transpose())),\n            b = o.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0)),\n            d = n.clone().sub(h.clone().mulS(b.get(0, 0)).mmul(l.transpose()));\n          (this.t = h),\n            (this.p = g.transpose()),\n            (this.w = p.transpose()),\n            (this.q = l),\n            (this.u = o),\n            (this.s = h.transpose().mmul(h)),\n            (this.xResidual = w),\n            (this.yResidual = d),\n            (this.betas = b);\n        } else\n          (this.w = p.transpose()),\n            (this.s = h.transpose().mmul(h).sqrt()),\n            (this.t = s ? h.clone().div(this.s.get(0, 0)) : h),\n            (this.xResidual = r.sub(h.mmul(p.transpose())));\n      };\n    },\n    11: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.camelize = r.isString = void 0);\n      r.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var o,\n        n,\n        i = /-(\\w)/g;\n      r.camelize =\n        ((o = function (t) {\n          return t.replace(i, function (t, r) {\n            return r ? r.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = o(t));\n        });\n    },\n    12: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isArray = void 0),\n        (r.isArray = Array.isArray);\n    },\n    13: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.toNumber = r.isNaN = r.isNumber = void 0);\n      r.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      r.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      r.toNumber = function (t) {\n        var e = parseFloat(t);\n        return r.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.traverseTreeUp =\n          r.scaleMatrix =\n          r.getAdjMatrix =\n          r.floydWarshall =\n          r.getDegree =\n            void 0);\n      r.getDegree = function (t, r, e) {\n        for (var o = [], n = 0; n < t; n++) o[n] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (o[r[t.source]] += 1),\n                t.target && (o[r[t.target]] += 1);\n            }),\n            o)\n          : o;\n      };\n      r.floydWarshall = function (t) {\n        for (var r = [], e = t.length, o = 0; o < e; o += 1) {\n          r[o] = [];\n          for (var n = 0; n < e; n += 1)\n            o === n\n              ? (r[o][n] = 0)\n              : 0 !== t[o][n] && t[o][n]\n              ? (r[o][n] = t[o][n])\n              : (r[o][n] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (o = 0; o < e; o += 1)\n            for (n = 0; n < e; n += 1)\n              r[o][n] > r[o][i] + r[i][n] && (r[o][n] = r[o][i] + r[i][n]);\n        return r;\n      };\n      r.getAdjMatrix = function (t, r) {\n        var e = t.nodes,\n          o = t.edges,\n          n = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, r) {\n              i[t.id] = r;\n              n.push([]);\n            }),\n          o &&\n            o.forEach(function (t) {\n              var e = t.source,\n                o = t.target,\n                s = i[e],\n                u = i[o];\n              (n[s][u] = 1), r || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      r.scaleMatrix = function (t, r) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var o = [];\n            t.forEach(function (t) {\n              o.push(t * r);\n            }),\n              e.push(o);\n          }),\n          e\n        );\n      };\n      r.traverseTreeUp = function (t, r) {\n        \"function\" == typeof r &&\n          (function t(r, e) {\n            if (r && r.children)\n              for (var o = r.children.length - 1; o >= 0; o--)\n                if (!t(r.children[o], e)) return;\n            return !!e(r);\n          })(t, r);\n      };\n    },\n    15: function (t, r, e) {\n      \"use strict\";\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var r, e = 1, o = arguments.length; e < o; e++)\n                for (var n in (r = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.clone = r.isObject = void 0);\n      r.isObject = function (t) {\n        return null !== t && \"object\" === o(t);\n      };\n      r.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return r.clone(t);\n            })\n          );\n        }\n        if (\"object\" === o(t) && t !== {}) {\n          var i = n({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = r.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isFunction = void 0);\n      r.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    180: function (t, r, e) {\n      \"use strict\";\n      var o,\n        n =\n          (this && this.__extends) ||\n          ((o = function (t, r) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, r) {\n                  t.__proto__ = r;\n                }) ||\n              function (t, r) {\n                for (var e in r)\n                  Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]);\n              })(t, r);\n          }),\n          function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(r) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            o(t, r),\n              (t.prototype =\n                null === r\n                  ? Object.create(r)\n                  : ((e.prototype = r.prototype), new e()));\n          });\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.MDSLayout = void 0);\n      var i = e(102),\n        s = e(10),\n        u = (function (t) {\n          function r(r) {\n            var e = t.call(this) || this;\n            return (\n              (e.center = [0, 0]),\n              (e.linkDistance = 50),\n              (e.nodes = []),\n              (e.edges = []),\n              (e.onLayoutEnd = function () {}),\n              e.updateCfg(r),\n              e\n            );\n          }\n          return (\n            n(r, t),\n            (r.prototype.getDefaultCfg = function () {\n              return { center: [0, 0], linkDistance: 50 };\n            }),\n            (r.prototype.execute = function () {\n              var t = this.nodes,\n                r = this.edges,\n                e = void 0 === r ? [] : r,\n                o = this.center;\n              if (t && 0 !== t.length) {\n                if (1 === t.length)\n                  return (\n                    (t[0].x = o[0]),\n                    (t[0].y = o[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                var n = this.linkDistance,\n                  i = s.getAdjMatrix({ nodes: t, edges: e }, !1),\n                  u = s.floydWarshall(i);\n                this.handleInfinity(u);\n                var a = s.scaleMatrix(u, n);\n                this.scaledDistances = a;\n                var f = this.runMDS();\n                return (\n                  (this.positions = f),\n                  f.forEach(function (r, e) {\n                    (t[e].x = r[0] + o[0]), (t[e].y = r[1] + o[1]);\n                  }),\n                  this.onLayoutEnd && this.onLayoutEnd(),\n                  { nodes: t, edges: e }\n                );\n              }\n              this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (r.prototype.runMDS = function () {\n              var t = this.scaledDistances,\n                r = i.Matrix.mul(i.Matrix.pow(t, 2), -0.5),\n                e = r.mean(\"row\"),\n                o = r.mean(\"column\"),\n                n = r.mean();\n              r.add(n).subRowVector(e).subColumnVector(o);\n              var s = new i.SingularValueDecomposition(r),\n                u = i.Matrix.sqrt(s.diagonalMatrix).diagonal();\n              return s.leftSingularVectors.toJSON().map(function (t) {\n                return i.Matrix.mul([t], [u]).toJSON()[0].splice(0, 2);\n              });\n            }),\n            (r.prototype.handleInfinity = function (t) {\n              var r = -999999;\n              t.forEach(function (t) {\n                t.forEach(function (t) {\n                  t !== 1 / 0 && r < t && (r = t);\n                });\n              }),\n                t.forEach(function (e, o) {\n                  e.forEach(function (e, n) {\n                    e === 1 / 0 && (t[o][n] = r);\n                  });\n                });\n            }),\n            (r.prototype.getType = function () {\n              return \"mds\";\n            }),\n            r\n          );\n        })(e(7).Base);\n      r.MDSLayout = u;\n    },\n    408: function (t, r, e) {\n      \"use strict\";\n      e.r(r);\n      var o = e(180);\n      r.default = o.MDSLayout;\n    },\n    7: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), (r.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      r.Base = o;\n    },\n  }).default;\n});\n//# sourceMappingURL=mdsLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/radialLayout.js",
    "content": "!(function (t, r) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = r())\n    : \"function\" == typeof define && define.amd\n    ? define([], r)\n    : \"object\" == typeof exports\n    ? (exports.f6 = r())\n    : (t.f6 = r());\n})(this, function () {\n  return (function (t) {\n    var r = {};\n    function e(o) {\n      if (r[o]) return r[o].exports;\n      var n = (r[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(n.exports, n, n.exports, e), (n.l = !0), n.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = r),\n      (e.d = function (t, r, o) {\n        e.o(t, r) || Object.defineProperty(t, r, { enumerable: !0, get: o });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, r) {\n        if ((1 & r && (t = e(t)), 8 & r)) return t;\n        if (4 & r && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (e.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & r && \"string\" != typeof t)\n        )\n          for (var n in t)\n            e.d(\n              o,\n              n,\n              function (r) {\n                return t[r];\n              }.bind(null, n),\n            );\n        return o;\n      }),\n      (e.n = function (t) {\n        var r =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(r, \"a\", r), r;\n      }),\n      (e.o = function (t, r) {\n        return Object.prototype.hasOwnProperty.call(t, r);\n      }),\n      (e.p = \"\"),\n      e((e.s = 409))\n    );\n  })({\n    10: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        n(e(11), r),\n        n(e(12), r),\n        n(e(13), r),\n        n(e(14), r),\n        n(e(15), r),\n        n(e(16), r);\n    },\n    102: function (t, r, e) {\n      \"use strict\";\n      e.r(r),\n        e.d(r, \"AbstractMatrix\", function () {\n          return Q;\n        }),\n        e.d(r, \"default\", function () {\n          return K;\n        }),\n        e.d(r, \"Matrix\", function () {\n          return K;\n        }),\n        e.d(r, \"MatrixColumnView\", function () {\n          return at;\n        }),\n        e.d(r, \"MatrixColumnSelectionView\", function () {\n          return yt;\n        }),\n        e.d(r, \"MatrixFlipColumnView\", function () {\n          return xt;\n        }),\n        e.d(r, \"MatrixFlipRowView\", function () {\n          return _t;\n        }),\n        e.d(r, \"MatrixRowView\", function () {\n          return Dt;\n        }),\n        e.d(r, \"MatrixRowSelectionView\", function () {\n          return Ut;\n        }),\n        e.d(r, \"MatrixSelectionView\", function () {\n          return Xt;\n        }),\n        e.d(r, \"MatrixSubView\", function () {\n          return or;\n        }),\n        e.d(r, \"MatrixTransposeView\", function () {\n          return cr;\n        }),\n        e.d(r, \"wrap\", function () {\n          return Or;\n        }),\n        e.d(r, \"WrapperMatrix1D\", function () {\n          return wr;\n        }),\n        e.d(r, \"WrapperMatrix2D\", function () {\n          return Er;\n        }),\n        e.d(r, \"solve\", function () {\n          return Dr;\n        }),\n        e.d(r, \"inverse\", function () {\n          return Cr;\n        }),\n        e.d(r, \"determinant\", function () {\n          return Vr;\n        }),\n        e.d(r, \"linearDependencies\", function () {\n          return Br;\n        }),\n        e.d(r, \"pseudoInverse\", function () {\n          return zr;\n        }),\n        e.d(r, \"covariance\", function () {\n          return Ur;\n        }),\n        e.d(r, \"correlation\", function () {\n          return Qr;\n        }),\n        e.d(r, \"SingularValueDecomposition\", function () {\n          return Nr;\n        }),\n        e.d(r, \"SVD\", function () {\n          return Nr;\n        }),\n        e.d(r, \"EigenvalueDecomposition\", function () {\n          return Yr;\n        }),\n        e.d(r, \"EVD\", function () {\n          return Yr;\n        }),\n        e.d(r, \"CholeskyDecomposition\", function () {\n          return re;\n        }),\n        e.d(r, \"CHO\", function () {\n          return re;\n        }),\n        e.d(r, \"LuDecomposition\", function () {\n          return jr;\n        }),\n        e.d(r, \"LU\", function () {\n          return jr;\n        }),\n        e.d(r, \"QrDecomposition\", function () {\n          return Tr;\n        }),\n        e.d(r, \"QR\", function () {\n          return Tr;\n        }),\n        e.d(r, \"Nipals\", function () {\n          return oe;\n        }),\n        e.d(r, \"NIPALS\", function () {\n          return oe;\n        });\n      var o = Object.prototype.toString;\n      function n(t) {\n        return o.call(t).endsWith(\"Array]\");\n      }\n      var i = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] > u && (u = t[a]);\n        return u;\n      };\n      var s = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] < u && (u = t[a]);\n        return u;\n      };\n      var u = function (t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          if (!n(t)) throw new TypeError(\"input must be an array\");\n          if (0 === t.length) throw new TypeError(\"input must not be empty\");\n          if (void 0 !== e.output) {\n            if (!n(e.output))\n              throw new TypeError(\n                \"output option must be an array if specified\",\n              );\n            r = e.output;\n          } else r = new Array(t.length);\n          var o = s(t),\n            u = i(t);\n          if (o === u)\n            throw new RangeError(\n              \"minimum and maximum input values are equal. Cannot rescale a constant array\",\n            );\n          var a = e.min,\n            f = void 0 === a ? (e.autoMinMax ? o : 0) : a,\n            c = e.max,\n            h = void 0 === c ? (e.autoMinMax ? u : 1) : c;\n          if (f >= h)\n            throw new RangeError(\"min option must be smaller than max option\");\n          for (var l = (h - f) / (u - o), p = 0; p < t.length; p++)\n            r[p] = (t[p] - o) * l + f;\n          return r;\n        },\n        a = \" \".repeat(2),\n        f = \" \".repeat(4);\n      function c(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = r.maxRows,\n          o = void 0 === e ? 15 : e,\n          n = r.maxColumns,\n          i = void 0 === n ? 10 : n,\n          s = r.maxNumSize,\n          u = void 0 === s ? 8 : s;\n        return \"\"\n          .concat(t.constructor.name, \" {\\n\")\n          .concat(a, \"[\\n\")\n          .concat(f)\n          .concat(h(t, o, i, u), \"\\n\")\n          .concat(a, \"]\\n\")\n          .concat(a, \"rows: \")\n          .concat(t.rows, \"\\n\")\n          .concat(a, \"columns: \")\n          .concat(t.columns, \"\\n}\");\n      }\n      function h(t, r, e, o) {\n        for (\n          var n = t.rows,\n            i = t.columns,\n            s = Math.min(n, r),\n            u = Math.min(i, e),\n            a = [],\n            c = 0;\n          c < s;\n          c++\n        ) {\n          for (var h = [], p = 0; p < u; p++) h.push(l(t.get(c, p), o));\n          a.push(\"\".concat(h.join(\" \")));\n        }\n        return (\n          u !== i &&\n            (a[a.length - 1] += \" ... \".concat(i - e, \" more columns\")),\n          s !== n && a.push(\"... \".concat(n - r, \" more rows\")),\n          a.join(\"\\n\".concat(f))\n        );\n      }\n      function l(t, r) {\n        var e = String(t);\n        if (e.length <= r) return e.padEnd(r, \" \");\n        var o = t.toPrecision(r - 2);\n        if (o.length <= r) return o;\n        var n = t.toExponential(r - 2),\n          i = n.indexOf(\"e\"),\n          s = n.slice(i);\n        return n.slice(0, r - s.length) + s;\n      }\n      function p(t) {\n        return (p =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function v(t, r, e) {\n        var o = e ? t.rows : t.rows - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Row index out of range\");\n      }\n      function y(t, r, e) {\n        var o = e ? t.columns : t.columns - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Column index out of range\");\n      }\n      function m(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.columns))\n          throw new RangeError(\n            \"vector size must be the same as the number of columns\",\n          );\n        return r;\n      }\n      function g(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.rows))\n          throw new RangeError(\n            \"vector size must be the same as the number of rows\",\n          );\n        return r;\n      }\n      function w(t, r, e) {\n        return { row: d(t, r), column: b(t, e) };\n      }\n      function d(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for row indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.rows;\n          })\n        )\n          throw new RangeError(\"row indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function b(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for column indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.columns;\n          })\n        )\n          throw new RangeError(\"column indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function M(t, r, e, o, n) {\n        if (5 !== arguments.length)\n          throw new RangeError(\"expected 4 arguments\");\n        if (\n          (S(\"startRow\", r),\n          S(\"endRow\", e),\n          S(\"startColumn\", o),\n          S(\"endColumn\", n),\n          r > e ||\n            o > n ||\n            r < 0 ||\n            r >= t.rows ||\n            e < 0 ||\n            e >= t.rows ||\n            o < 0 ||\n            o >= t.columns ||\n            n < 0 ||\n            n >= t.columns)\n        )\n          throw new RangeError(\"Submatrix indices are out of range\");\n      }\n      function x(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : 0,\n            e = [],\n            o = 0;\n          o < t;\n          o++\n        )\n          e.push(r);\n        return e;\n      }\n      function S(t, r) {\n        if (\"number\" != typeof r)\n          throw new TypeError(\"\".concat(t, \" must be a number\"));\n      }\n      function k(t) {\n        if (t.isEmpty())\n          throw new Error(\"Empty matrix has no elements to index\");\n      }\n      function E(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < o; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < n; c++)\n            (u += f = t.get(s, c) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / n) / (n - 1))\n            : i.push((a - (u * u) / n) / n);\n        }\n        return i;\n      }\n      function O(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < n; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < o; c++)\n            (u += f = t.get(c, s) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / o) / (o - 1))\n            : i.push((a - (u * u) / o) / o);\n        }\n        return i;\n      }\n      function R(t, r, e) {\n        for (\n          var o = t.rows, n = t.columns, i = o * n, s = 0, u = 0, a = 0, f = 0;\n          f < o;\n          f++\n        )\n          for (var c = 0; c < n; c++) (s += a = t.get(f, c) - e), (u += a * a);\n        return r ? (u - (s * s) / i) / (i - 1) : (u - (s * s) / i) / i;\n      }\n      function j(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[e]);\n      }\n      function _(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[o]);\n      }\n      function P(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r);\n      }\n      function T(t) {\n        for (var r = [], e = 0; e < t.rows; e++) {\n          for (var o = 0, n = 0; n < t.columns; n++)\n            o += Math.pow(t.get(e, n), 2) / (t.columns - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function A(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[e]);\n      }\n      function I(t) {\n        for (var r = [], e = 0; e < t.columns; e++) {\n          for (var o = 0, n = 0; n < t.rows; n++)\n            o += Math.pow(t.get(n, e), 2) / (t.rows - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function N(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[o]);\n      }\n      function C(t) {\n        for (var r = t.size - 1, e = 0, o = 0; o < t.columns; o++)\n          for (var n = 0; n < t.rows; n++) e += Math.pow(t.get(n, o), 2) / r;\n        return Math.sqrt(e);\n      }\n      function D(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r);\n      }\n      function V(t, r) {\n        return (V =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function q(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = B(t);\n          if (r) {\n            var n = B(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return F(this, e);\n        };\n      }\n      function F(t, r) {\n        return !r || (\"object\" !== z(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function B(t) {\n        return (B = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      function z(t) {\n        return (z =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function L(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function U(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function W(t, r, e) {\n        return r && U(t.prototype, r), e && U(t, e), t;\n      }\n      var Q = (function () {\n        function t() {\n          L(this, t);\n        }\n        return (\n          W(\n            t,\n            [\n              {\n                key: \"size\",\n                get: function () {\n                  return this.rows * this.columns;\n                },\n              },\n              {\n                key: \"apply\",\n                value: function (t) {\n                  if (\"function\" != typeof t)\n                    throw new TypeError(\"callback must be a function\");\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) t.call(this, r, e);\n                  return this;\n                },\n              },\n              {\n                key: \"to1DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      t.push(this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"to2DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++) {\n                    t.push([]);\n                    for (var e = 0; e < this.columns; e++)\n                      t[r].push(this.get(r, e));\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"toJSON\",\n                value: function () {\n                  return this.to2DArray();\n                },\n              },\n              {\n                key: \"isRowVector\",\n                value: function () {\n                  return 1 === this.rows;\n                },\n              },\n              {\n                key: \"isColumnVector\",\n                value: function () {\n                  return 1 === this.columns;\n                },\n              },\n              {\n                key: \"isVector\",\n                value: function () {\n                  return 1 === this.rows || 1 === this.columns;\n                },\n              },\n              {\n                key: \"isSquare\",\n                value: function () {\n                  return this.rows === this.columns;\n                },\n              },\n              {\n                key: \"isEmpty\",\n                value: function () {\n                  return 0 === this.rows || 0 === this.columns;\n                },\n              },\n              {\n                key: \"isSymmetric\",\n                value: function () {\n                  if (this.isSquare()) {\n                    for (var t = 0; t < this.rows; t++)\n                      for (var r = 0; r <= t; r++)\n                        if (this.get(t, r) !== this.get(r, t)) return !1;\n                    return !0;\n                  }\n                  return !1;\n                },\n              },\n              {\n                key: \"isEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"isReducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    for (var i = r + 1; i < this.rows; i++)\n                      0 !== this.get(t, i) && (o = !1);\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"echelonForm\",\n                value: function () {\n                  for (\n                    var t = this.clone(), r = 0, e = 0;\n                    r < t.rows && e < t.columns;\n\n                  ) {\n                    for (var o = r, n = r; n < t.rows; n++)\n                      t.get(n, e) > t.get(o, e) && (o = n);\n                    if (0 === t.get(o, e)) e++;\n                    else {\n                      t.swapRows(r, o);\n                      for (var i = t.get(r, e), s = e; s < t.columns; s++)\n                        t.set(r, s, t.get(r, s) / i);\n                      for (var u = r + 1; u < t.rows; u++) {\n                        var a = t.get(u, e) / t.get(r, e);\n                        t.set(u, e, 0);\n                        for (var f = e + 1; f < t.columns; f++)\n                          t.set(u, f, t.get(u, f) - t.get(r, f) * a);\n                      }\n                      r++, e++;\n                    }\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"reducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = this.echelonForm(),\n                      r = t.columns,\n                      e = t.rows,\n                      o = e - 1;\n                    o >= 0;\n\n                  )\n                    if (0 === t.maxRow(o)) o--;\n                    else {\n                      for (var n = 0, i = !1; n < e && !1 === i; )\n                        1 === t.get(o, n) ? (i = !0) : n++;\n                      for (var s = 0; s < o; s++)\n                        for (var u = t.get(s, n), a = n; a < r; a++) {\n                          var f = t.get(s, a) - u * t.get(o, a);\n                          t.set(s, a, f);\n                        }\n                      o--;\n                    }\n                  return t;\n                },\n              },\n              {\n                key: \"set\",\n                value: function () {\n                  throw new Error(\"set method is unimplemented\");\n                },\n              },\n              {\n                key: \"get\",\n                value: function () {\n                  throw new Error(\"get method is unimplemented\");\n                },\n              },\n              {\n                key: \"repeat\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== z(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.rows,\n                    e = void 0 === r ? 1 : r,\n                    o = t.columns,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isInteger(e) || e <= 0)\n                    throw new TypeError(\"rows must be a positive integer\");\n                  if (!Number.isInteger(n) || n <= 0)\n                    throw new TypeError(\"columns must be a positive integer\");\n                  for (\n                    var i = new K(this.rows * e, this.columns * n), s = 0;\n                    s < e;\n                    s++\n                  )\n                    for (var u = 0; u < n; u++)\n                      i.setSubMatrix(this, this.rows * s, this.columns * u);\n                  return i;\n                },\n              },\n              {\n                key: \"fill\",\n                value: function (t) {\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"neg\",\n                value: function () {\n                  return this.mulS(-1);\n                },\n              },\n              {\n                key: \"getRow\",\n                value: function (t) {\n                  v(this, t);\n                  for (var r = [], e = 0; e < this.columns; e++)\n                    r.push(this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"getRowVector\",\n                value: function (t) {\n                  return K.rowVector(this.getRow(t));\n                },\n              },\n              {\n                key: \"setRow\",\n                value: function (t, r) {\n                  v(this, t), (r = m(this, r));\n                  for (var e = 0; e < this.columns; e++) this.set(t, e, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapRows\",\n                value: function (t, r) {\n                  v(this, t), v(this, r);\n                  for (var e = 0; e < this.columns; e++) {\n                    var o = this.get(t, e);\n                    this.set(t, e, this.get(r, e)), this.set(r, e, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"getColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = [], e = 0; e < this.rows; e++)\n                    r.push(this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"getColumnVector\",\n                value: function (t) {\n                  return K.columnVector(this.getColumn(t));\n                },\n              },\n              {\n                key: \"setColumn\",\n                value: function (t, r) {\n                  y(this, t), (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) this.set(e, t, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapColumns\",\n                value: function (t, r) {\n                  y(this, t), y(this, r);\n                  for (var e = 0; e < this.rows; e++) {\n                    var o = this.get(e, t);\n                    this.set(e, t, this.get(e, r)), this.set(e, r, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"addRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"subRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"divRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"addColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"subColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"divColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRow\",\n                value: function (t, r) {\n                  v(this, t);\n                  for (var e = 0; e < this.columns; e++)\n                    this.set(t, e, this.get(t, e) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumn\",\n                value: function (t, r) {\n                  y(this, t);\n                  for (var e = 0; e < this.rows; e++)\n                    this.set(e, t, this.get(e, t) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"max\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) > t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"maxIndex\",\n                value: function () {\n                  k(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) > t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"min\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) < t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"minIndex\",\n                value: function () {\n                  k(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) < t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) > r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRowIndex\",\n                value: function (t) {\n                  v(this, t), k(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) > r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) < r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"minRowIndex\",\n                value: function (t) {\n                  v(this, t), k(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) < r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"maxColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) > r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"maxColumnIndex\",\n                value: function (t) {\n                  y(this, t), k(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) > r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) < r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"minColumnIndex\",\n                value: function (t) {\n                  y(this, t), k(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) < r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = [], e = 0;\n                    e < t;\n                    e++\n                  )\n                    r.push(this.get(e, e));\n                  return r;\n                },\n              },\n              {\n                key: \"norm\",\n                value: function () {\n                  var t =\n                      arguments.length > 0 && void 0 !== arguments[0]\n                        ? arguments[0]\n                        : \"frobenius\",\n                    r = 0;\n                  if (\"max\" === t) return this.max();\n                  if (\"frobenius\" === t) {\n                    for (var e = 0; e < this.rows; e++)\n                      for (var o = 0; o < this.columns; o++)\n                        r += this.get(e, o) * this.get(e, o);\n                    return Math.sqrt(r);\n                  }\n                  throw new RangeError(\"unknown norm type: \".concat(t));\n                },\n              },\n              {\n                key: \"cumulativeSum\",\n                value: function () {\n                  for (var t = 0, r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      (t += this.get(r, e)), this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"dot\",\n                value: function (r) {\n                  t.isMatrix(r) && (r = r.to1DArray());\n                  var e = this.to1DArray();\n                  if (e.length !== r.length)\n                    throw new RangeError(\"vectors do not have the same size\");\n                  for (var o = 0, n = 0; n < e.length; n++) o += e[n] * r[n];\n                  return o;\n                },\n              },\n              {\n                key: \"mmul\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.columns,\n                      n = new K(r, o),\n                      i = new Float64Array(e),\n                      s = 0;\n                    s < o;\n                    s++\n                  ) {\n                    for (var u = 0; u < e; u++) i[u] = t.get(u, s);\n                    for (var a = 0; a < r; a++) {\n                      for (var f = 0, c = 0; c < e; c++)\n                        f += this.get(a, c) * i[c];\n                      n.set(a, s, f);\n                    }\n                  }\n                  return n;\n                },\n              },\n              {\n                key: \"strassen2x2\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(2, 2),\n                    e = this.get(0, 0),\n                    o = t.get(0, 0),\n                    n = this.get(0, 1),\n                    i = t.get(0, 1),\n                    s = this.get(1, 0),\n                    u = t.get(1, 0),\n                    a = this.get(1, 1),\n                    f = t.get(1, 1),\n                    c = (e + a) * (o + f),\n                    h = (s + a) * o,\n                    l = e * (i - f),\n                    p = a * (u - o),\n                    v = (e + n) * f,\n                    y = c + p - v + (n - a) * (u + f),\n                    m = l + v,\n                    g = h + p,\n                    w = c - h + l + (s - e) * (o + i);\n                  return (\n                    r.set(0, 0, y),\n                    r.set(0, 1, m),\n                    r.set(1, 0, g),\n                    r.set(1, 1, w),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"strassen3x3\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(3, 3),\n                    e = this.get(0, 0),\n                    o = this.get(0, 1),\n                    n = this.get(0, 2),\n                    i = this.get(1, 0),\n                    s = this.get(1, 1),\n                    u = this.get(1, 2),\n                    a = this.get(2, 0),\n                    f = this.get(2, 1),\n                    c = this.get(2, 2),\n                    h = t.get(0, 0),\n                    l = t.get(0, 1),\n                    p = t.get(0, 2),\n                    v = t.get(1, 0),\n                    y = t.get(1, 1),\n                    m = t.get(1, 2),\n                    g = t.get(2, 0),\n                    w = t.get(2, 1),\n                    d = t.get(2, 2),\n                    b = (e - i) * (-l + y),\n                    M = (-e + i + s) * (h - l + y),\n                    x = (i + s) * (-h + l),\n                    S = e * h,\n                    k = (-e + a + f) * (h - p + m),\n                    E = (-e + a) * (p - m),\n                    O = (a + f) * (-h + p),\n                    R = (-n + f + c) * (y + g - w),\n                    j = (n - c) * (y - w),\n                    _ = n * g,\n                    P = (f + c) * (-g + w),\n                    T = (-n + s + u) * (m + g - d),\n                    A = (n - u) * (m - d),\n                    I = (s + u) * (-g + d),\n                    N = S + _ + o * v,\n                    C = (e + o + n - i - s - f - c) * y + M + x + S + R + _ + P,\n                    D = S + k + O + (e + o + n - s - u - a - f) * m + _ + T + I,\n                    V =\n                      b + s * (-h + l + v - y - m - g + d) + M + S + _ + T + A,\n                    q = b + M + x + S + u * w,\n                    F = _ + T + A + I + i * p,\n                    B =\n                      S + k + E + f * (-h + p + v - y - m - g + w) + R + j + _,\n                    z = R + j + _ + P + a * l,\n                    L = S + k + E + O + c * d;\n                  return (\n                    r.set(0, 0, N),\n                    r.set(0, 1, C),\n                    r.set(0, 2, D),\n                    r.set(1, 0, V),\n                    r.set(1, 1, q),\n                    r.set(1, 2, F),\n                    r.set(2, 0, B),\n                    r.set(2, 1, z),\n                    r.set(2, 2, L),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"mmulStrassen\",\n                value: function (r) {\n                  r = K.checkMatrix(r);\n                  var e = this.clone(),\n                    o = e.rows,\n                    n = e.columns,\n                    i = r.rows,\n                    s = r.columns;\n                  function u(r, e, o) {\n                    var n = r.rows,\n                      i = r.columns;\n                    if (n === e && i === o) return r;\n                    var s = t.zeros(e, o);\n                    return (s = s.setSubMatrix(r, 0, 0));\n                  }\n                  n !== i &&\n                    console.warn(\n                      \"Multiplying \"\n                        .concat(o, \" x \")\n                        .concat(n, \" and \")\n                        .concat(i, \" x \")\n                        .concat(s, \" matrix: dimensions do not match.\"),\n                    );\n                  var a = Math.max(o, i),\n                    f = Math.max(n, s);\n                  return (function r(e, o, n, i) {\n                    if (n <= 512 || i <= 512) return e.mmul(o);\n                    n % 2 == 1 && i % 2 == 1\n                      ? ((e = u(e, n + 1, i + 1)), (o = u(o, n + 1, i + 1)))\n                      : n % 2 == 1\n                      ? ((e = u(e, n + 1, i)), (o = u(o, n + 1, i)))\n                      : i % 2 == 1 &&\n                        ((e = u(e, n, i + 1)), (o = u(o, n, i + 1)));\n                    var s = parseInt(e.rows / 2, 10),\n                      a = parseInt(e.columns / 2, 10),\n                      f = e.subMatrix(0, s - 1, 0, a - 1),\n                      c = o.subMatrix(0, s - 1, 0, a - 1),\n                      h = e.subMatrix(0, s - 1, a, e.columns - 1),\n                      l = o.subMatrix(0, s - 1, a, o.columns - 1),\n                      p = e.subMatrix(s, e.rows - 1, 0, a - 1),\n                      v = o.subMatrix(s, o.rows - 1, 0, a - 1),\n                      y = e.subMatrix(s, e.rows - 1, a, e.columns - 1),\n                      m = o.subMatrix(s, o.rows - 1, a, o.columns - 1),\n                      g = r(t.add(f, y), t.add(c, m), s, a),\n                      w = r(t.add(p, y), c, s, a),\n                      d = r(f, t.sub(l, m), s, a),\n                      b = r(y, t.sub(v, c), s, a),\n                      M = r(t.add(f, h), m, s, a),\n                      x = r(t.sub(p, f), t.add(c, l), s, a),\n                      S = r(t.sub(h, y), t.add(v, m), s, a),\n                      k = t.add(g, b);\n                    k.sub(M), k.add(S);\n                    var E = t.add(d, M),\n                      O = t.add(w, b),\n                      R = t.sub(g, w);\n                    R.add(d), R.add(x);\n                    var j = t.zeros(2 * k.rows, 2 * k.columns);\n                    return (j = (j = (j = (j = j.setSubMatrix(\n                      k,\n                      0,\n                      0,\n                    )).setSubMatrix(E, k.rows, 0)).setSubMatrix(\n                      O,\n                      0,\n                      k.columns,\n                    )).setSubMatrix(R, k.rows, k.columns)).subMatrix(\n                      0,\n                      n - 1,\n                      0,\n                      i - 1,\n                    );\n                  })((e = u(e, a, f)), (r = u(r, a, f)), a, f);\n                },\n              },\n              {\n                key: \"scaleRows\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== z(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.rows;\n                    s++\n                  ) {\n                    var a = this.getRow(s);\n                    a.length > 0 && u(a, { min: e, max: n, output: a }),\n                      i.setRow(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"scaleColumns\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== z(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.columns;\n                    s++\n                  ) {\n                    var a = this.getColumn(s);\n                    a.length && u(a, { min: e, max: n, output: a }),\n                      i.setColumn(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"flipRows\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.columns / 2), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(r, e),\n                        n = this.get(r, this.columns - 1 - e);\n                      this.set(r, e, n), this.set(r, this.columns - 1 - e, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"flipColumns\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.rows / 2), r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(e, r),\n                        n = this.get(this.rows - 1 - e, r);\n                      this.set(e, r, n), this.set(this.rows - 1 - e, r, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"kroneckerProduct\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.rows,\n                      n = t.columns,\n                      i = new K(r * o, e * n),\n                      s = 0;\n                    s < r;\n                    s++\n                  )\n                    for (var u = 0; u < e; u++)\n                      for (var a = 0; a < o; a++)\n                        for (var f = 0; f < n; f++)\n                          i.set(\n                            o * s + a,\n                            n * u + f,\n                            this.get(s, u) * t.get(a, f),\n                          );\n                  return i;\n                },\n              },\n              {\n                key: \"kroneckerSum\",\n                value: function (t) {\n                  if (\n                    ((t = K.checkMatrix(t)), !this.isSquare() || !t.isSquare())\n                  )\n                    throw new Error(\"Kronecker Sum needs two Square Matrices\");\n                  var r = this.rows,\n                    e = t.rows,\n                    o = this.kroneckerProduct(K.eye(e, e)),\n                    n = K.eye(r, r).kroneckerProduct(t);\n                  return o.add(n);\n                },\n              },\n              {\n                key: \"transpose\",\n                value: function () {\n                  for (\n                    var t = new K(this.columns, this.rows), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(e, r, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sortRows\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    this.setRow(r, this.getRow(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"sortColumns\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    this.setColumn(r, this.getColumn(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"subMatrix\",\n                value: function (t, r, e, o) {\n                  M(this, t, r, e, o);\n                  for (var n = new K(r - t + 1, o - e + 1), i = t; i <= r; i++)\n                    for (var s = e; s <= o; s++)\n                      n.set(i - t, s - e, this.get(i, s));\n                  return n;\n                },\n              },\n              {\n                key: \"subMatrixRow\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.columns - 1),\n                    r > e ||\n                      r < 0 ||\n                      r >= this.columns ||\n                      e < 0 ||\n                      e >= this.columns)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(t.length, e - r + 1), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.rows)\n                        throw new RangeError(\n                          \"Row index out of range: \".concat(t[n]),\n                        );\n                      o.set(n, i - r, this.get(t[n], i));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"subMatrixColumn\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.rows - 1),\n                    r > e || r < 0 || r >= this.rows || e < 0 || e >= this.rows)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(e - r + 1, t.length), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.columns)\n                        throw new RangeError(\n                          \"Column index out of range: \".concat(t[n]),\n                        );\n                      o.set(i - r, n, this.get(i, t[n]));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"setSubMatrix\",\n                value: function (t, r, e) {\n                  if ((t = K.checkMatrix(t)).isEmpty()) return this;\n                  M(this, r, r + t.rows - 1, e, e + t.columns - 1);\n                  for (var o = 0; o < t.rows; o++)\n                    for (var n = 0; n < t.columns; n++)\n                      this.set(r + o, e + n, t.get(o, n));\n                  return this;\n                },\n              },\n              {\n                key: \"selection\",\n                value: function (t, r) {\n                  for (\n                    var e = w(this, t, r), o = new K(t.length, r.length), n = 0;\n                    n < e.row.length;\n                    n++\n                  )\n                    for (var i = e.row[n], s = 0; s < e.column.length; s++) {\n                      var u = e.column[s];\n                      o.set(n, s, this.get(i, u));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"trace\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = 0, e = 0;\n                    e < t;\n                    e++\n                  )\n                    r += this.get(e, e);\n                  return r;\n                },\n              },\n              {\n                key: \"clone\",\n                value: function () {\n                  for (\n                    var t = new K(this.rows, this.columns), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(r, e, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sum\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 0, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r += t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"product\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 1, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r *= t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"mean\",\n                value: function (t) {\n                  var r = this.sum(t);\n                  switch (t) {\n                    case \"row\":\n                      for (var e = 0; e < this.rows; e++) r[e] /= this.columns;\n                      return r;\n                    case \"column\":\n                      for (var o = 0; o < this.columns; o++) r[o] /= this.rows;\n                      return r;\n                    case void 0:\n                      return r / this.size;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"variance\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === z(t) && ((r = t), (t = void 0)),\n                    \"object\" !== z(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.unbiased,\n                    n = void 0 === o || o,\n                    i = e.mean,\n                    s = void 0 === i ? this.mean(t) : i;\n                  if (\"boolean\" != typeof n)\n                    throw new TypeError(\"unbiased must be a boolean\");\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return E(this, n, s);\n                    case \"column\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return O(this, n, s);\n                    case void 0:\n                      if (\"number\" != typeof s)\n                        throw new TypeError(\"mean must be a number\");\n                      return R(this, n, s);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"standardDeviation\",\n                value: function (t, r) {\n                  \"object\" === z(t) && ((r = t), (t = void 0));\n                  var e = this.variance(t, r);\n                  if (void 0 === t) return Math.sqrt(e);\n                  for (var o = 0; o < e.length; o++) e[o] = Math.sqrt(e[o]);\n                  return e;\n                },\n              },\n              {\n                key: \"center\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === z(t) && ((r = t), (t = void 0)),\n                    \"object\" !== z(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.center,\n                    n = void 0 === o ? this.mean(t) : o;\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return j(this, n), this;\n                    case \"column\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return _(this, n), this;\n                    case void 0:\n                      if (\"number\" != typeof n)\n                        throw new TypeError(\"center must be a number\");\n                      return P(this, n), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"scale\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === z(t) && ((r = t), (t = void 0)),\n                    \"object\" !== z(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r.scale;\n                  switch (t) {\n                    case \"row\":\n                      if (void 0 === e) e = T(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return A(this, e), this;\n                    case \"column\":\n                      if (void 0 === e) e = I(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return N(this, e), this;\n                    case void 0:\n                      if (void 0 === e) e = C(this);\n                      else if (\"number\" != typeof e)\n                        throw new TypeError(\"scale must be a number\");\n                      return D(this, e), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"toString\",\n                value: function (t) {\n                  return c(this, t);\n                },\n              },\n            ],\n            [\n              {\n                key: \"from1DArray\",\n                value: function (t, r, e) {\n                  if (t * r !== e.length)\n                    throw new RangeError(\n                      \"data length does not match given dimensions\",\n                    );\n                  for (var o = new K(t, r), n = 0; n < t; n++)\n                    for (var i = 0; i < r; i++) o.set(n, i, e[n * r + i]);\n                  return o;\n                },\n              },\n              {\n                key: \"rowVector\",\n                value: function (t) {\n                  for (var r = new K(1, t.length), e = 0; e < t.length; e++)\n                    r.set(0, e, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"columnVector\",\n                value: function (t) {\n                  for (var r = new K(t.length, 1), e = 0; e < t.length; e++)\n                    r.set(e, 0, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"zeros\",\n                value: function (t, r) {\n                  return new K(t, r);\n                },\n              },\n              {\n                key: \"ones\",\n                value: function (t, r) {\n                  return new K(t, r).fill(1);\n                },\n              },\n              {\n                key: \"rand\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== z(e))\n                    throw new TypeError(\"options must be an object\");\n                  for (\n                    var o = e.random,\n                      n = void 0 === o ? Math.random : o,\n                      i = new K(t, r),\n                      s = 0;\n                    s < t;\n                    s++\n                  )\n                    for (var u = 0; u < r; u++) i.set(s, u, n());\n                  return i;\n                },\n              },\n              {\n                key: \"randInt\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== z(e))\n                    throw new TypeError(\"options must be an object\");\n                  var o = e.min,\n                    n = void 0 === o ? 0 : o,\n                    i = e.max,\n                    s = void 0 === i ? 1e3 : i,\n                    u = e.random,\n                    a = void 0 === u ? Math.random : u;\n                  if (!Number.isInteger(n))\n                    throw new TypeError(\"min must be an integer\");\n                  if (!Number.isInteger(s))\n                    throw new TypeError(\"max must be an integer\");\n                  if (n >= s)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (var f = s - n, c = new K(t, r), h = 0; h < t; h++)\n                    for (var l = 0; l < r; l++) {\n                      var p = n + Math.round(a() * f);\n                      c.set(h, l, p);\n                    }\n                  return c;\n                },\n              },\n              {\n                key: \"eye\",\n                value: function (t, r, e) {\n                  void 0 === r && (r = t), void 0 === e && (e = 1);\n                  for (\n                    var o = Math.min(t, r), n = this.zeros(t, r), i = 0;\n                    i < o;\n                    i++\n                  )\n                    n.set(i, i, e);\n                  return n;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function (t, r, e) {\n                  var o = t.length;\n                  void 0 === r && (r = o), void 0 === e && (e = r);\n                  for (\n                    var n = Math.min(o, r, e), i = this.zeros(r, e), s = 0;\n                    s < n;\n                    s++\n                  )\n                    i.set(s, s, t[s]);\n                  return i;\n                },\n              },\n              {\n                key: \"min\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new K(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.min(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"max\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new this(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.max(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"checkMatrix\",\n                value: function (r) {\n                  return t.isMatrix(r) ? r : new K(r);\n                },\n              },\n              {\n                key: \"isMatrix\",\n                value: function (t) {\n                  return null != t && \"Matrix\" === t.klass;\n                },\n              },\n            ],\n          ),\n          t\n        );\n      })();\n      function J(t, r) {\n        return t - r;\n      }\n      (Q.prototype.klass = \"Matrix\"),\n        \"undefined\" != typeof Symbol &&\n          (Q.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = function () {\n            return c(this);\n          }),\n        (Q.random = Q.rand),\n        (Q.randomInt = Q.randInt),\n        (Q.diagonal = Q.diag),\n        (Q.prototype.diagonal = Q.prototype.diag),\n        (Q.identity = Q.eye),\n        (Q.prototype.negate = Q.prototype.neg),\n        (Q.prototype.tensorProduct = Q.prototype.kroneckerProduct);\n      var H,\n        Y,\n        K = (function (t) {\n          !(function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Super expression must either be null or a function\",\n              );\n            (t.prototype = Object.create(r && r.prototype, {\n              constructor: { value: t, writable: !0, configurable: !0 },\n            })),\n              r && V(t, r);\n          })(e, t);\n          var r = q(e);\n          function e(t, o) {\n            var n;\n            if ((L(this, e), (n = r.call(this)), e.isMatrix(t)))\n              return F(n, t.clone());\n            if (Number.isInteger(t) && t >= 0) {\n              if (((n.data = []), !(Number.isInteger(o) && o >= 0)))\n                throw new TypeError(\"nColumns must be a positive integer\");\n              for (var i = 0; i < t; i++) n.data.push(new Float64Array(o));\n            } else {\n              if (!Array.isArray(t))\n                throw new TypeError(\n                  \"First argument must be a positive number or an array\",\n                );\n              var s = t;\n              if (\"number\" != typeof (o = (t = s.length) ? s[0].length : 0))\n                throw new TypeError(\n                  \"Data must be a 2D array with at least one element\",\n                );\n              n.data = [];\n              for (var u = 0; u < t; u++) {\n                if (s[u].length !== o)\n                  throw new RangeError(\"Inconsistent array dimensions\");\n                n.data.push(Float64Array.from(s[u]));\n              }\n            }\n            return (n.rows = t), (n.columns = o), n;\n          }\n          return (\n            W(e, [\n              {\n                key: \"set\",\n                value: function (t, r, e) {\n                  return (this.data[t][r] = e), this;\n                },\n              },\n              {\n                key: \"get\",\n                value: function (t, r) {\n                  return this.data[t][r];\n                },\n              },\n              {\n                key: \"removeRow\",\n                value: function (t) {\n                  return (\n                    v(this, t), this.data.splice(t, 1), (this.rows -= 1), this\n                  );\n                },\n              },\n              {\n                key: \"addRow\",\n                value: function (t, r) {\n                  return (\n                    void 0 === r && ((r = t), (t = this.rows)),\n                    v(this, t, !0),\n                    (r = Float64Array.from(m(this, r))),\n                    this.data.splice(t, 0, r),\n                    (this.rows += 1),\n                    this\n                  );\n                },\n              },\n              {\n                key: \"removeColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = 0; r < this.rows; r++) {\n                    for (\n                      var e = new Float64Array(this.columns - 1), o = 0;\n                      o < t;\n                      o++\n                    )\n                      e[o] = this.data[r][o];\n                    for (var n = t + 1; n < this.columns; n++)\n                      e[n - 1] = this.data[r][n];\n                    this.data[r] = e;\n                  }\n                  return (this.columns -= 1), this;\n                },\n              },\n              {\n                key: \"addColumn\",\n                value: function (t, r) {\n                  void 0 === r && ((r = t), (t = this.columns)),\n                    y(this, t, !0),\n                    (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) {\n                    for (\n                      var o = new Float64Array(this.columns + 1), n = 0;\n                      n < t;\n                      n++\n                    )\n                      o[n] = this.data[e][n];\n                    for (o[n++] = r[e]; n < this.columns + 1; n++)\n                      o[n] = this.data[e][n - 1];\n                    this.data[e] = o;\n                  }\n                  return (this.columns += 1), this;\n                },\n              },\n            ]),\n            e\n          );\n        })(Q);\n      function X(t) {\n        return (X =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function G(t, r) {\n        return (G =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Z(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = tt(t);\n          if (r) {\n            var n = tt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return $(this, e);\n        };\n      }\n      function $(t, r) {\n        return !r || (\"object\" !== X(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function tt(t) {\n        return (tt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      (Y = K),\n        ((H = Q).prototype.add = function (t) {\n          return \"number\" == typeof t ? this.addS(t) : this.addM(t);\n        }),\n        (H.prototype.addS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t);\n          return this;\n        }),\n        (H.prototype.addM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t.get(r, e));\n          return this;\n        }),\n        (H.add = function (t, r) {\n          return new Y(t).add(r);\n        }),\n        (H.prototype.sub = function (t) {\n          return \"number\" == typeof t ? this.subS(t) : this.subM(t);\n        }),\n        (H.prototype.subS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t);\n          return this;\n        }),\n        (H.prototype.subM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t.get(r, e));\n          return this;\n        }),\n        (H.sub = function (t, r) {\n          return new Y(t).sub(r);\n        }),\n        (H.prototype.subtract = H.prototype.sub),\n        (H.prototype.subtractS = H.prototype.subS),\n        (H.prototype.subtractM = H.prototype.subM),\n        (H.subtract = H.sub),\n        (H.prototype.mul = function (t) {\n          return \"number\" == typeof t ? this.mulS(t) : this.mulM(t);\n        }),\n        (H.prototype.mulS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t);\n          return this;\n        }),\n        (H.prototype.mulM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t.get(r, e));\n          return this;\n        }),\n        (H.mul = function (t, r) {\n          return new Y(t).mul(r);\n        }),\n        (H.prototype.multiply = H.prototype.mul),\n        (H.prototype.multiplyS = H.prototype.mulS),\n        (H.prototype.multiplyM = H.prototype.mulM),\n        (H.multiply = H.mul),\n        (H.prototype.div = function (t) {\n          return \"number\" == typeof t ? this.divS(t) : this.divM(t);\n        }),\n        (H.prototype.divS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t);\n          return this;\n        }),\n        (H.prototype.divM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t.get(r, e));\n          return this;\n        }),\n        (H.div = function (t, r) {\n          return new Y(t).div(r);\n        }),\n        (H.prototype.divide = H.prototype.div),\n        (H.prototype.divideS = H.prototype.divS),\n        (H.prototype.divideM = H.prototype.divM),\n        (H.divide = H.div),\n        (H.prototype.mod = function (t) {\n          return \"number\" == typeof t ? this.modS(t) : this.modM(t);\n        }),\n        (H.prototype.modS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t);\n          return this;\n        }),\n        (H.prototype.modM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t.get(r, e));\n          return this;\n        }),\n        (H.mod = function (t, r) {\n          return new Y(t).mod(r);\n        }),\n        (H.prototype.modulus = H.prototype.mod),\n        (H.prototype.modulusS = H.prototype.modS),\n        (H.prototype.modulusM = H.prototype.modM),\n        (H.modulus = H.mod),\n        (H.prototype.and = function (t) {\n          return \"number\" == typeof t ? this.andS(t) : this.andM(t);\n        }),\n        (H.prototype.andS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t);\n          return this;\n        }),\n        (H.prototype.andM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t.get(r, e));\n          return this;\n        }),\n        (H.and = function (t, r) {\n          return new Y(t).and(r);\n        }),\n        (H.prototype.or = function (t) {\n          return \"number\" == typeof t ? this.orS(t) : this.orM(t);\n        }),\n        (H.prototype.orS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t);\n          return this;\n        }),\n        (H.prototype.orM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t.get(r, e));\n          return this;\n        }),\n        (H.or = function (t, r) {\n          return new Y(t).or(r);\n        }),\n        (H.prototype.xor = function (t) {\n          return \"number\" == typeof t ? this.xorS(t) : this.xorM(t);\n        }),\n        (H.prototype.xorS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t);\n          return this;\n        }),\n        (H.prototype.xorM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t.get(r, e));\n          return this;\n        }),\n        (H.xor = function (t, r) {\n          return new Y(t).xor(r);\n        }),\n        (H.prototype.leftShift = function (t) {\n          return \"number\" == typeof t ? this.leftShiftS(t) : this.leftShiftM(t);\n        }),\n        (H.prototype.leftShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t);\n          return this;\n        }),\n        (H.prototype.leftShiftM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t.get(r, e));\n          return this;\n        }),\n        (H.leftShift = function (t, r) {\n          return new Y(t).leftShift(r);\n        }),\n        (H.prototype.signPropagatingRightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.signPropagatingRightShiftS(t)\n            : this.signPropagatingRightShiftM(t);\n        }),\n        (H.prototype.signPropagatingRightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t);\n          return this;\n        }),\n        (H.prototype.signPropagatingRightShiftM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t.get(r, e));\n          return this;\n        }),\n        (H.signPropagatingRightShift = function (t, r) {\n          return new Y(t).signPropagatingRightShift(r);\n        }),\n        (H.prototype.rightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.rightShiftS(t)\n            : this.rightShiftM(t);\n        }),\n        (H.prototype.rightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t);\n          return this;\n        }),\n        (H.prototype.rightShiftM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t.get(r, e));\n          return this;\n        }),\n        (H.rightShift = function (t, r) {\n          return new Y(t).rightShift(r);\n        }),\n        (H.prototype.zeroFillRightShift = H.prototype.rightShift),\n        (H.prototype.zeroFillRightShiftS = H.prototype.rightShiftS),\n        (H.prototype.zeroFillRightShiftM = H.prototype.rightShiftM),\n        (H.zeroFillRightShift = H.rightShift),\n        (H.prototype.not = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, ~this.get(t, r));\n          return this;\n        }),\n        (H.not = function (t) {\n          return new Y(t).not();\n        }),\n        (H.prototype.abs = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.abs(this.get(t, r)));\n          return this;\n        }),\n        (H.abs = function (t) {\n          return new Y(t).abs();\n        }),\n        (H.prototype.acos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acos(this.get(t, r)));\n          return this;\n        }),\n        (H.acos = function (t) {\n          return new Y(t).acos();\n        }),\n        (H.prototype.acosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acosh(this.get(t, r)));\n          return this;\n        }),\n        (H.acosh = function (t) {\n          return new Y(t).acosh();\n        }),\n        (H.prototype.asin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asin(this.get(t, r)));\n          return this;\n        }),\n        (H.asin = function (t) {\n          return new Y(t).asin();\n        }),\n        (H.prototype.asinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asinh(this.get(t, r)));\n          return this;\n        }),\n        (H.asinh = function (t) {\n          return new Y(t).asinh();\n        }),\n        (H.prototype.atan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atan(this.get(t, r)));\n          return this;\n        }),\n        (H.atan = function (t) {\n          return new Y(t).atan();\n        }),\n        (H.prototype.atanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atanh(this.get(t, r)));\n          return this;\n        }),\n        (H.atanh = function (t) {\n          return new Y(t).atanh();\n        }),\n        (H.prototype.cbrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cbrt(this.get(t, r)));\n          return this;\n        }),\n        (H.cbrt = function (t) {\n          return new Y(t).cbrt();\n        }),\n        (H.prototype.ceil = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.ceil(this.get(t, r)));\n          return this;\n        }),\n        (H.ceil = function (t) {\n          return new Y(t).ceil();\n        }),\n        (H.prototype.clz32 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.clz32(this.get(t, r)));\n          return this;\n        }),\n        (H.clz32 = function (t) {\n          return new Y(t).clz32();\n        }),\n        (H.prototype.cos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cos(this.get(t, r)));\n          return this;\n        }),\n        (H.cos = function (t) {\n          return new Y(t).cos();\n        }),\n        (H.prototype.cosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cosh(this.get(t, r)));\n          return this;\n        }),\n        (H.cosh = function (t) {\n          return new Y(t).cosh();\n        }),\n        (H.prototype.exp = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.exp(this.get(t, r)));\n          return this;\n        }),\n        (H.exp = function (t) {\n          return new Y(t).exp();\n        }),\n        (H.prototype.expm1 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.expm1(this.get(t, r)));\n          return this;\n        }),\n        (H.expm1 = function (t) {\n          return new Y(t).expm1();\n        }),\n        (H.prototype.floor = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.floor(this.get(t, r)));\n          return this;\n        }),\n        (H.floor = function (t) {\n          return new Y(t).floor();\n        }),\n        (H.prototype.fround = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.fround(this.get(t, r)));\n          return this;\n        }),\n        (H.fround = function (t) {\n          return new Y(t).fround();\n        }),\n        (H.prototype.log = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log(this.get(t, r)));\n          return this;\n        }),\n        (H.log = function (t) {\n          return new Y(t).log();\n        }),\n        (H.prototype.log1p = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log1p(this.get(t, r)));\n          return this;\n        }),\n        (H.log1p = function (t) {\n          return new Y(t).log1p();\n        }),\n        (H.prototype.log10 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log10(this.get(t, r)));\n          return this;\n        }),\n        (H.log10 = function (t) {\n          return new Y(t).log10();\n        }),\n        (H.prototype.log2 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log2(this.get(t, r)));\n          return this;\n        }),\n        (H.log2 = function (t) {\n          return new Y(t).log2();\n        }),\n        (H.prototype.round = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.round(this.get(t, r)));\n          return this;\n        }),\n        (H.round = function (t) {\n          return new Y(t).round();\n        }),\n        (H.prototype.sign = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sign(this.get(t, r)));\n          return this;\n        }),\n        (H.sign = function (t) {\n          return new Y(t).sign();\n        }),\n        (H.prototype.sin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sin(this.get(t, r)));\n          return this;\n        }),\n        (H.sin = function (t) {\n          return new Y(t).sin();\n        }),\n        (H.prototype.sinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sinh(this.get(t, r)));\n          return this;\n        }),\n        (H.sinh = function (t) {\n          return new Y(t).sinh();\n        }),\n        (H.prototype.sqrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sqrt(this.get(t, r)));\n          return this;\n        }),\n        (H.sqrt = function (t) {\n          return new Y(t).sqrt();\n        }),\n        (H.prototype.tan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tan(this.get(t, r)));\n          return this;\n        }),\n        (H.tan = function (t) {\n          return new Y(t).tan();\n        }),\n        (H.prototype.tanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tanh(this.get(t, r)));\n          return this;\n        }),\n        (H.tanh = function (t) {\n          return new Y(t).tanh();\n        }),\n        (H.prototype.trunc = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.trunc(this.get(t, r)));\n          return this;\n        }),\n        (H.trunc = function (t) {\n          return new Y(t).trunc();\n        }),\n        (H.pow = function (t, r) {\n          return new Y(t).pow(r);\n        }),\n        (H.prototype.pow = function (t) {\n          return \"number\" == typeof t ? this.powS(t) : this.powM(t);\n        }),\n        (H.prototype.powS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t));\n          return this;\n        }),\n        (H.prototype.powM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t.get(r, e)));\n          return this;\n        });\n      var rt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && G(t, r);\n        })(e, t);\n        var r = Z(e);\n        function e(t, o, n) {\n          var i;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, e),\n            ((i = r.call(this)).matrix = t),\n            (i.rows = o),\n            (i.columns = n),\n            i\n          );\n        }\n        return e;\n      })(Q);\n      function et(t) {\n        return (et =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ot(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function nt(t, r) {\n        return (nt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function it(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = ut(t);\n          if (r) {\n            var n = ut(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return st(this, e);\n        };\n      }\n      function st(t, r) {\n        return !r || (\"object\" !== et(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function ut(t) {\n        return (ut = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var at = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && nt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = it(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            y(t, r),\n            ((e = n.call(this, t, t.rows, 1)).column = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.column, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t) {\n                return this.matrix.get(t, this.column);\n              },\n            },\n          ]) && ot(r.prototype, e),\n          o && ot(r, o),\n          i\n        );\n      })(rt);\n      function ft(t) {\n        return (ft =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ct(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ht(t, r) {\n        return (ht =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function lt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = vt(t);\n          if (r) {\n            var n = vt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return pt(this, e);\n        };\n      }\n      function pt(t, r) {\n        return !r || (\"object\" !== ft(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function vt(t) {\n        return (vt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var yt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && ht(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = lt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = b(t, r)),\n            ((e = n.call(this, t, t.rows, r.length)).columnIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columnIndices[r], e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columnIndices[r]);\n              },\n            },\n          ]) && ct(r.prototype, e),\n          o && ct(r, o),\n          i\n        );\n      })(rt);\n      function mt(t) {\n        return (mt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function gt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function wt(t, r) {\n        return (wt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function dt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Mt(t);\n          if (r) {\n            var n = Mt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return bt(this, e);\n        };\n      }\n      function bt(t, r) {\n        return !r || (\"object\" !== mt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Mt(t) {\n        return (Mt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && wt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = dt(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columns - r - 1, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columns - r - 1);\n              },\n            },\n          ]) && gt(r.prototype, e),\n          o && gt(r, o),\n          i\n        );\n      })(rt);\n      function St(t) {\n        return (St =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function kt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Et(t, r) {\n        return (Et =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ot(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = jt(t);\n          if (r) {\n            var n = jt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Rt(this, e);\n        };\n      }\n      function Rt(t, r) {\n        return !r || (\"object\" !== St(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function jt(t) {\n        return (jt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var _t = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Et(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ot(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rows - t - 1, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rows - t - 1, r);\n              },\n            },\n          ]) && kt(r.prototype, e),\n          o && kt(r, o),\n          i\n        );\n      })(rt);\n      function Pt(t) {\n        return (Pt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Tt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function At(t, r) {\n        return (At =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function It(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Ct(t);\n          if (r) {\n            var n = Ct(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Nt(this, e);\n        };\n      }\n      function Nt(t, r) {\n        return !r || (\"object\" !== Pt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Ct(t) {\n        return (Ct = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Dt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && At(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = It(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            v(t, r),\n            ((e = n.call(this, t, 1, t.columns)).row = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.row, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.row, r);\n              },\n            },\n          ]) && Tt(r.prototype, e),\n          o && Tt(r, o),\n          i\n        );\n      })(rt);\n      function Vt(t) {\n        return (Vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Ft(t, r) {\n        return (Ft =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Bt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Lt(t);\n          if (r) {\n            var n = Lt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return zt(this, e);\n        };\n      }\n      function zt(t, r) {\n        return !r || (\"object\" !== Vt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Lt(t) {\n        return (Lt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Ut = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Ft(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Bt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = d(t, r)),\n            ((e = n.call(this, t, r.length, t.columns)).rowIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rowIndices[t], r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rowIndices[t], r);\n              },\n            },\n          ]) && qt(r.prototype, e),\n          o && qt(r, o),\n          i\n        );\n      })(rt);\n      function Wt(t) {\n        return (Wt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Jt(t, r) {\n        return (Jt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ht(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Kt(t);\n          if (r) {\n            var n = Kt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Yt(this, e);\n        };\n      }\n      function Yt(t, r) {\n        return !r || (\"object\" !== Wt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Kt(t) {\n        return (Kt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Jt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ht(i);\n        function i(t, r, e) {\n          var o;\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, i);\n          var s = w(t, r, e);\n          return (\n            ((o = n.call(this, t, s.row.length, s.column.length)).rowIndices =\n              s.row),\n            (o.columnIndices = s.column),\n            o\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.rowIndices[t], this.columnIndices[r], e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(\n                  this.rowIndices[t],\n                  this.columnIndices[r],\n                );\n              },\n            },\n          ]) && Qt(r.prototype, e),\n          o && Qt(r, o),\n          i\n        );\n      })(rt);\n      function Gt(t) {\n        return (Gt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Zt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function $t(t, r) {\n        return ($t =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function tr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = er(t);\n          if (r) {\n            var n = er(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return rr(this, e);\n        };\n      }\n      function rr(t, r) {\n        return !r || (\"object\" !== Gt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function er(t) {\n        return (er = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var or = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && $t(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = tr(i);\n        function i(t, r, e, o, s) {\n          var u;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            M(t, r, e, o, s),\n            ((u = n.call(this, t, e - r + 1, s - o + 1)).startRow = r),\n            (u.startColumn = o),\n            u\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.startRow + t, this.startColumn + r, e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.startRow + t, this.startColumn + r);\n              },\n            },\n          ]) && Zt(r.prototype, e),\n          o && Zt(r, o),\n          i\n        );\n      })(rt);\n      function nr(t) {\n        return (nr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function sr(t, r) {\n        return (sr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function ur(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = fr(t);\n          if (r) {\n            var n = fr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return ar(this, e);\n        };\n      }\n      function ar(t, r) {\n        return !r || (\"object\" !== nr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function fr(t) {\n        return (fr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var cr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && sr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = ur(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.columns, t.rows)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(r, t, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(r, t);\n              },\n            },\n          ]) && ir(r.prototype, e),\n          o && ir(r, o),\n          i\n        );\n      })(rt);\n      function hr(t) {\n        return (hr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function lr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function vr(t, r) {\n        return (vr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function yr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = gr(t);\n          if (r) {\n            var n = gr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return mr(this, e);\n        };\n      }\n      function mr(t, r) {\n        return !r || (\"object\" !== hr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function gr(t) {\n        return (gr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var wr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && vr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = yr(i);\n        function i(t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          lr(this, i);\n          var o = e.rows,\n            s = void 0 === o ? 1 : o;\n          if (t.length % s != 0)\n            throw new Error(\n              \"the data length is not divisible by the number of rows\",\n            );\n          return (\n            ((r = n.call(this)).rows = s),\n            (r.columns = t.length / s),\n            (r.data = t),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                var o = this._calculateIndex(t, r);\n                return (this.data[o] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                var e = this._calculateIndex(t, r);\n                return this.data[e];\n              },\n            },\n            {\n              key: \"_calculateIndex\",\n              value: function (t, r) {\n                return t * this.columns + r;\n              },\n            },\n          ]) && pr(r.prototype, e),\n          o && pr(r, o),\n          i\n        );\n      })(Q);\n      function dr(t) {\n        return (dr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function br(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Mr(t, r) {\n        return (Mr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function xr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = kr(t);\n          if (r) {\n            var n = kr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Sr(this, e);\n        };\n      }\n      function Sr(t, r) {\n        return !r || (\"object\" !== dr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function kr(t) {\n        return (kr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Er = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Mr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = xr(i);\n        function i(t) {\n          var r;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((r = n.call(this)).data = t),\n            (r.rows = t.length),\n            (r.columns = t[0].length),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (this.data[t][r] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.data[t][r];\n              },\n            },\n          ]) && br(r.prototype, e),\n          o && br(r, o),\n          i\n        );\n      })(Q);\n      function Or(t, r) {\n        if (Array.isArray(t))\n          return t[0] && Array.isArray(t[0]) ? new Er(t) : new wr(t, r);\n        throw new Error(\"the argument is not an array\");\n      }\n      function Rr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var jr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s,\n            u,\n            a,\n            f,\n            c,\n            h = (r = Er.checkMatrix(r)).clone(),\n            l = h.rows,\n            p = h.columns,\n            v = new Float64Array(l),\n            y = 1;\n          for (e = 0; e < l; e++) v[e] = e;\n          for (f = new Float64Array(l), o = 0; o < p; o++) {\n            for (e = 0; e < l; e++) f[e] = h.get(e, o);\n            for (e = 0; e < l; e++) {\n              for (c = Math.min(e, o), s = 0, n = 0; n < c; n++)\n                s += h.get(e, n) * f[n];\n              (f[e] -= s), h.set(e, o, f[e]);\n            }\n            for (i = o, e = o + 1; e < l; e++)\n              Math.abs(f[e]) > Math.abs(f[i]) && (i = e);\n            if (i !== o) {\n              for (n = 0; n < p; n++)\n                (u = h.get(i, n)), h.set(i, n, h.get(o, n)), h.set(o, n, u);\n              (a = v[i]), (v[i] = v[o]), (v[o] = a), (y = -y);\n            }\n            if (o < l && 0 !== h.get(o, o))\n              for (e = o + 1; e < l; e++)\n                h.set(e, o, h.get(e, o) / h.get(o, o));\n          }\n          (this.LU = h), (this.pivotVector = v), (this.pivotSign = y);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isSingular\",\n              value: function () {\n                for (var t = this.LU, r = t.columns, e = 0; e < r; e++)\n                  if (0 === t.get(e, e)) return !0;\n                return !1;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.LU;\n                if (r.rows !== t.rows)\n                  throw new Error(\"Invalid matrix dimensions\");\n                if (this.isSingular()) throw new Error(\"LU matrix is singular\");\n                var e,\n                  o,\n                  n,\n                  i = t.columns,\n                  s = t.subMatrixRow(this.pivotVector, 0, i - 1),\n                  u = r.columns;\n                for (n = 0; n < u; n++)\n                  for (e = n + 1; e < u; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                for (n = u - 1; n >= 0; n--) {\n                  for (o = 0; o < i; o++)\n                    s.set(n, o, s.get(n, o) / r.get(n, n));\n                  for (e = 0; e < n; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                }\n                return s;\n              },\n            },\n            {\n              key: \"determinant\",\n              get: function () {\n                var t = this.LU;\n                if (!t.isSquare()) throw new Error(\"Matrix must be square\");\n                for (var r = this.pivotSign, e = t.columns, o = 0; o < e; o++)\n                  r *= t.get(o, o);\n                return r;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n > i\n                      ? o.set(n, i, t.get(n, i))\n                      : n === i\n                      ? o.set(n, i, 1)\n                      : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n <= i ? o.set(n, i, t.get(n, i)) : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"pivotPermutationVector\",\n              get: function () {\n                return Array.from(this.pivotVector);\n              },\n            },\n          ]) && Rr(r.prototype, e),\n          o && Rr(r, o),\n          t\n        );\n      })();\n      function _r(t, r) {\n        var e = 0;\n        return Math.abs(t) > Math.abs(r)\n          ? ((e = r / t), Math.abs(t) * Math.sqrt(1 + e * e))\n          : 0 !== r\n          ? ((e = t / r), Math.abs(r) * Math.sqrt(1 + e * e))\n          : 0;\n      }\n      function Pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Tr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s = (r = Er.checkMatrix(r)).clone(),\n            u = r.rows,\n            a = r.columns,\n            f = new Float64Array(a);\n          for (n = 0; n < a; n++) {\n            var c = 0;\n            for (e = n; e < u; e++) c = _r(c, s.get(e, n));\n            if (0 !== c) {\n              for (s.get(n, n) < 0 && (c = -c), e = n; e < u; e++)\n                s.set(e, n, s.get(e, n) / c);\n              for (s.set(n, n, s.get(n, n) + 1), o = n + 1; o < a; o++) {\n                for (i = 0, e = n; e < u; e++) i += s.get(e, n) * s.get(e, o);\n                for (i = -i / s.get(n, n), e = n; e < u; e++)\n                  s.set(e, o, s.get(e, o) + i * s.get(e, n));\n              }\n            }\n            f[n] = -c;\n          }\n          (this.QR = s), (this.Rdiag = f);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.QR,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix row dimensions must agree\");\n                if (!this.isFullRank())\n                  throw new Error(\"Matrix is rank deficient\");\n                var o,\n                  n,\n                  i,\n                  s,\n                  u = t.columns,\n                  a = t.clone(),\n                  f = r.columns;\n                for (i = 0; i < f; i++)\n                  for (n = 0; n < u; n++) {\n                    for (s = 0, o = i; o < e; o++)\n                      s += r.get(o, i) * a.get(o, n);\n                    for (s = -s / r.get(i, i), o = i; o < e; o++)\n                      a.set(o, n, a.get(o, n) + s * r.get(o, i));\n                  }\n                for (i = f - 1; i >= 0; i--) {\n                  for (n = 0; n < u; n++)\n                    a.set(i, n, a.get(i, n) / this.Rdiag[i]);\n                  for (o = 0; o < i; o++)\n                    for (n = 0; n < u; n++)\n                      a.set(o, n, a.get(o, n) - a.get(i, n) * r.get(o, i));\n                }\n                return a.subMatrix(0, f - 1, 0, u - 1);\n              },\n            },\n            {\n              key: \"isFullRank\",\n              value: function () {\n                for (var t = this.QR.columns, r = 0; r < t; r++)\n                  if (0 === this.Rdiag[r]) return !1;\n                return !0;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.QR,\n                  o = e.columns,\n                  n = new K(o, o);\n                for (t = 0; t < o; t++)\n                  for (r = 0; r < o; r++)\n                    t < r\n                      ? n.set(t, r, e.get(t, r))\n                      : t === r\n                      ? n.set(t, r, this.Rdiag[t])\n                      : n.set(t, r, 0);\n                return n;\n              },\n            },\n            {\n              key: \"orthogonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e,\n                  o,\n                  n = this.QR,\n                  i = n.rows,\n                  s = n.columns,\n                  u = new K(i, s);\n                for (e = s - 1; e >= 0; e--) {\n                  for (t = 0; t < i; t++) u.set(t, e, 0);\n                  for (u.set(e, e, 1), r = e; r < s; r++)\n                    if (0 !== n.get(e, e)) {\n                      for (o = 0, t = e; t < i; t++)\n                        o += n.get(t, e) * u.get(t, r);\n                      for (o = -o / n.get(e, e), t = e; t < i; t++)\n                        u.set(t, r, u.get(t, r) + o * n.get(t, e));\n                    }\n                }\n                return u;\n              },\n            },\n          ]) && Pr(r.prototype, e),\n          o && Pr(r, o),\n          t\n        );\n      })();\n      function Ar(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Nr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          if ((Ar(this, t), (r = Er.checkMatrix(r)).isEmpty()))\n            throw new Error(\"Matrix must be non-empty\");\n          var o,\n            n = r.rows,\n            i = r.columns,\n            s = e.computeLeftSingularVectors,\n            u = void 0 === s || s,\n            a = e.computeRightSingularVectors,\n            f = void 0 === a || a,\n            c = e.autoTranspose,\n            h = void 0 !== c && c,\n            l = Boolean(u),\n            p = Boolean(f),\n            v = !1;\n          if (n < i)\n            if (h) {\n              (n = (o = r.transpose()).rows), (i = o.columns), (v = !0);\n              var y = l;\n              (l = p), (p = y);\n            } else\n              (o = r.clone()),\n                console.warn(\n                  \"Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose\",\n                );\n          else o = r.clone();\n          for (\n            var m = Math.min(n, i),\n              g = Math.min(n + 1, i),\n              w = new Float64Array(g),\n              d = new K(n, m),\n              b = new K(i, i),\n              M = new Float64Array(i),\n              x = new Float64Array(n),\n              S = new Float64Array(g),\n              k = 0;\n            k < g;\n            k++\n          )\n            S[k] = k;\n          for (\n            var E = Math.min(n - 1, i),\n              O = Math.max(0, Math.min(i - 2, n)),\n              R = Math.max(E, O),\n              j = 0;\n            j < R;\n            j++\n          ) {\n            if (j < E) {\n              w[j] = 0;\n              for (var _ = j; _ < n; _++) w[j] = _r(w[j], o.get(_, j));\n              if (0 !== w[j]) {\n                o.get(j, j) < 0 && (w[j] = -w[j]);\n                for (var P = j; P < n; P++) o.set(P, j, o.get(P, j) / w[j]);\n                o.set(j, j, o.get(j, j) + 1);\n              }\n              w[j] = -w[j];\n            }\n            for (var T = j + 1; T < i; T++) {\n              if (j < E && 0 !== w[j]) {\n                for (var A = 0, I = j; I < n; I++)\n                  A += o.get(I, j) * o.get(I, T);\n                A = -A / o.get(j, j);\n                for (var N = j; N < n; N++)\n                  o.set(N, T, o.get(N, T) + A * o.get(N, j));\n              }\n              M[T] = o.get(j, T);\n            }\n            if (l && j < E)\n              for (var C = j; C < n; C++) d.set(C, j, o.get(C, j));\n            if (j < O) {\n              M[j] = 0;\n              for (var D = j + 1; D < i; D++) M[j] = _r(M[j], M[D]);\n              if (0 !== M[j]) {\n                M[j + 1] < 0 && (M[j] = 0 - M[j]);\n                for (var V = j + 1; V < i; V++) M[V] /= M[j];\n                M[j + 1] += 1;\n              }\n              if (((M[j] = -M[j]), j + 1 < n && 0 !== M[j])) {\n                for (var q = j + 1; q < n; q++) x[q] = 0;\n                for (var F = j + 1; F < n; F++)\n                  for (var B = j + 1; B < i; B++) x[F] += M[B] * o.get(F, B);\n                for (var z = j + 1; z < i; z++)\n                  for (var L = -M[z] / M[j + 1], U = j + 1; U < n; U++)\n                    o.set(U, z, o.get(U, z) + L * x[U]);\n              }\n              if (p) for (var W = j + 1; W < i; W++) b.set(W, j, M[W]);\n            }\n          }\n          var Q = Math.min(i, n + 1);\n          if (\n            (E < i && (w[E] = o.get(E, E)),\n            n < Q && (w[Q - 1] = 0),\n            O + 1 < Q && (M[O] = o.get(O, Q - 1)),\n            (M[Q - 1] = 0),\n            l)\n          ) {\n            for (var J = E; J < m; J++) {\n              for (var H = 0; H < n; H++) d.set(H, J, 0);\n              d.set(J, J, 1);\n            }\n            for (var Y = E - 1; Y >= 0; Y--)\n              if (0 !== w[Y]) {\n                for (var X = Y + 1; X < m; X++) {\n                  for (var G = 0, Z = Y; Z < n; Z++)\n                    G += d.get(Z, Y) * d.get(Z, X);\n                  G = -G / d.get(Y, Y);\n                  for (var $ = Y; $ < n; $++)\n                    d.set($, X, d.get($, X) + G * d.get($, Y));\n                }\n                for (var tt = Y; tt < n; tt++) d.set(tt, Y, -d.get(tt, Y));\n                d.set(Y, Y, 1 + d.get(Y, Y));\n                for (var rt = 0; rt < Y - 1; rt++) d.set(rt, Y, 0);\n              } else {\n                for (var et = 0; et < n; et++) d.set(et, Y, 0);\n                d.set(Y, Y, 1);\n              }\n          }\n          if (p)\n            for (var ot = i - 1; ot >= 0; ot--) {\n              if (ot < O && 0 !== M[ot])\n                for (var nt = ot + 1; nt < i; nt++) {\n                  for (var it = 0, st = ot + 1; st < i; st++)\n                    it += b.get(st, ot) * b.get(st, nt);\n                  it = -it / b.get(ot + 1, ot);\n                  for (var ut = ot + 1; ut < i; ut++)\n                    b.set(ut, nt, b.get(ut, nt) + it * b.get(ut, ot));\n                }\n              for (var at = 0; at < i; at++) b.set(at, ot, 0);\n              b.set(ot, ot, 1);\n            }\n          for (var ft = Q - 1, ct = Number.EPSILON; Q > 0; ) {\n            var ht = void 0,\n              lt = void 0;\n            for (ht = Q - 2; ht >= -1 && -1 !== ht; ht--) {\n              var pt =\n                Number.MIN_VALUE + ct * Math.abs(w[ht] + Math.abs(w[ht + 1]));\n              if (Math.abs(M[ht]) <= pt || Number.isNaN(M[ht])) {\n                M[ht] = 0;\n                break;\n              }\n            }\n            if (ht === Q - 2) lt = 4;\n            else {\n              var vt = void 0;\n              for (vt = Q - 1; vt >= ht && vt !== ht; vt--) {\n                var yt =\n                  (vt !== Q ? Math.abs(M[vt]) : 0) +\n                  (vt !== ht + 1 ? Math.abs(M[vt - 1]) : 0);\n                if (Math.abs(w[vt]) <= ct * yt) {\n                  w[vt] = 0;\n                  break;\n                }\n              }\n              vt === ht\n                ? (lt = 3)\n                : vt === Q - 1\n                ? (lt = 1)\n                : ((lt = 2), (ht = vt));\n            }\n            switch ((ht++, lt)) {\n              case 1:\n                var mt = M[Q - 2];\n                M[Q - 2] = 0;\n                for (var gt = Q - 2; gt >= ht; gt--) {\n                  var wt = _r(w[gt], mt),\n                    dt = w[gt] / wt,\n                    bt = mt / wt;\n                  if (\n                    ((w[gt] = wt),\n                    gt !== ht &&\n                      ((mt = -bt * M[gt - 1]), (M[gt - 1] = dt * M[gt - 1])),\n                    p)\n                  )\n                    for (var Mt = 0; Mt < i; Mt++)\n                      (wt = dt * b.get(Mt, gt) + bt * b.get(Mt, Q - 1)),\n                        b.set(\n                          Mt,\n                          Q - 1,\n                          -bt * b.get(Mt, gt) + dt * b.get(Mt, Q - 1),\n                        ),\n                        b.set(Mt, gt, wt);\n                }\n                break;\n              case 2:\n                var xt = M[ht - 1];\n                M[ht - 1] = 0;\n                for (var St = ht; St < Q; St++) {\n                  var kt = _r(w[St], xt),\n                    Et = w[St] / kt,\n                    Ot = xt / kt;\n                  if (\n                    ((w[St] = kt), (xt = -Ot * M[St]), (M[St] = Et * M[St]), l)\n                  )\n                    for (var Rt = 0; Rt < n; Rt++)\n                      (kt = Et * d.get(Rt, St) + Ot * d.get(Rt, ht - 1)),\n                        d.set(\n                          Rt,\n                          ht - 1,\n                          -Ot * d.get(Rt, St) + Et * d.get(Rt, ht - 1),\n                        ),\n                        d.set(Rt, St, kt);\n                }\n                break;\n              case 3:\n                var jt = Math.max(\n                    Math.abs(w[Q - 1]),\n                    Math.abs(w[Q - 2]),\n                    Math.abs(M[Q - 2]),\n                    Math.abs(w[ht]),\n                    Math.abs(M[ht]),\n                  ),\n                  _t = w[Q - 1] / jt,\n                  Pt = w[Q - 2] / jt,\n                  Tt = M[Q - 2] / jt,\n                  At = w[ht] / jt,\n                  It = M[ht] / jt,\n                  Nt = ((Pt + _t) * (Pt - _t) + Tt * Tt) / 2,\n                  Ct = _t * Tt * (_t * Tt),\n                  Dt = 0;\n                (0 === Nt && 0 === Ct) ||\n                  (Dt =\n                    Ct /\n                    (Nt +\n                      (Dt =\n                        Nt < 0\n                          ? 0 - Math.sqrt(Nt * Nt + Ct)\n                          : Math.sqrt(Nt * Nt + Ct))));\n                for (\n                  var Vt = (At + _t) * (At - _t) + Dt, qt = At * It, Ft = ht;\n                  Ft < Q - 1;\n                  Ft++\n                ) {\n                  var Bt = _r(Vt, qt);\n                  0 === Bt && (Bt = Number.MIN_VALUE);\n                  var zt = Vt / Bt,\n                    Lt = qt / Bt;\n                  if (\n                    (Ft !== ht && (M[Ft - 1] = Bt),\n                    (Vt = zt * w[Ft] + Lt * M[Ft]),\n                    (M[Ft] = zt * M[Ft] - Lt * w[Ft]),\n                    (qt = Lt * w[Ft + 1]),\n                    (w[Ft + 1] = zt * w[Ft + 1]),\n                    p)\n                  )\n                    for (var Ut = 0; Ut < i; Ut++)\n                      (Bt = zt * b.get(Ut, Ft) + Lt * b.get(Ut, Ft + 1)),\n                        b.set(\n                          Ut,\n                          Ft + 1,\n                          -Lt * b.get(Ut, Ft) + zt * b.get(Ut, Ft + 1),\n                        ),\n                        b.set(Ut, Ft, Bt);\n                  if (\n                    (0 === (Bt = _r(Vt, qt)) && (Bt = Number.MIN_VALUE),\n                    (zt = Vt / Bt),\n                    (Lt = qt / Bt),\n                    (w[Ft] = Bt),\n                    (Vt = zt * M[Ft] + Lt * w[Ft + 1]),\n                    (w[Ft + 1] = -Lt * M[Ft] + zt * w[Ft + 1]),\n                    (qt = Lt * M[Ft + 1]),\n                    (M[Ft + 1] = zt * M[Ft + 1]),\n                    l && Ft < n - 1)\n                  )\n                    for (var Wt = 0; Wt < n; Wt++)\n                      (Bt = zt * d.get(Wt, Ft) + Lt * d.get(Wt, Ft + 1)),\n                        d.set(\n                          Wt,\n                          Ft + 1,\n                          -Lt * d.get(Wt, Ft) + zt * d.get(Wt, Ft + 1),\n                        ),\n                        d.set(Wt, Ft, Bt);\n                }\n                (M[Q - 2] = Vt), 1;\n                break;\n              case 4:\n                if (w[ht] <= 0 && ((w[ht] = w[ht] < 0 ? -w[ht] : 0), p))\n                  for (var Qt = 0; Qt <= ft; Qt++)\n                    b.set(Qt, ht, -b.get(Qt, ht));\n                for (; ht < ft && !(w[ht] >= w[ht + 1]); ) {\n                  var Jt = w[ht];\n                  if (((w[ht] = w[ht + 1]), (w[ht + 1] = Jt), p && ht < i - 1))\n                    for (var Ht = 0; Ht < i; Ht++)\n                      (Jt = b.get(Ht, ht + 1)),\n                        b.set(Ht, ht + 1, b.get(Ht, ht)),\n                        b.set(Ht, ht, Jt);\n                  if (l && ht < n - 1)\n                    for (var Yt = 0; Yt < n; Yt++)\n                      (Jt = d.get(Yt, ht + 1)),\n                        d.set(Yt, ht + 1, d.get(Yt, ht)),\n                        d.set(Yt, ht, Jt);\n                  ht++;\n                }\n                0, Q--;\n            }\n          }\n          if (v) {\n            var Kt = b;\n            (b = d), (d = Kt);\n          }\n          (this.m = n), (this.n = i), (this.s = w), (this.U = d), (this.V = b);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                for (\n                  var r = t,\n                    e = this.threshold,\n                    o = this.s.length,\n                    n = K.zeros(o, o),\n                    i = 0;\n                  i < o;\n                  i++\n                )\n                  Math.abs(this.s[i]) <= e\n                    ? n.set(i, i, 0)\n                    : n.set(i, i, 1 / this.s[i]);\n                for (\n                  var s = this.U,\n                    u = this.rightSingularVectors,\n                    a = u.mmul(n),\n                    f = u.rows,\n                    c = s.rows,\n                    h = K.zeros(f, c),\n                    l = 0;\n                  l < f;\n                  l++\n                )\n                  for (var p = 0; p < c; p++) {\n                    for (var v = 0, y = 0; y < o; y++)\n                      v += a.get(l, y) * s.get(p, y);\n                    h.set(l, p, v);\n                  }\n                return h.mmul(r);\n              },\n            },\n            {\n              key: \"solveForDiagonal\",\n              value: function (t) {\n                return this.solve(K.diag(t));\n              },\n            },\n            {\n              key: \"inverse\",\n              value: function () {\n                for (\n                  var t = this.V,\n                    r = this.threshold,\n                    e = t.rows,\n                    o = t.columns,\n                    n = new K(e, this.s.length),\n                    i = 0;\n                  i < e;\n                  i++\n                )\n                  for (var s = 0; s < o; s++)\n                    Math.abs(this.s[s]) > r &&\n                      n.set(i, s, t.get(i, s) / this.s[s]);\n                for (\n                  var u = this.U,\n                    a = u.rows,\n                    f = u.columns,\n                    c = new K(e, a),\n                    h = 0;\n                  h < e;\n                  h++\n                )\n                  for (var l = 0; l < a; l++) {\n                    for (var p = 0, v = 0; v < f; v++)\n                      p += n.get(h, v) * u.get(l, v);\n                    c.set(h, l, p);\n                  }\n                return c;\n              },\n            },\n            {\n              key: \"condition\",\n              get: function () {\n                return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n              },\n            },\n            {\n              key: \"norm2\",\n              get: function () {\n                return this.s[0];\n              },\n            },\n            {\n              key: \"rank\",\n              get: function () {\n                for (\n                  var t = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON,\n                    r = 0,\n                    e = this.s,\n                    o = 0,\n                    n = e.length;\n                  o < n;\n                  o++\n                )\n                  e[o] > t && r++;\n                return r;\n              },\n            },\n            {\n              key: \"diagonal\",\n              get: function () {\n                return Array.from(this.s);\n              },\n            },\n            {\n              key: \"threshold\",\n              get: function () {\n                return (\n                  (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0]\n                );\n              },\n            },\n            {\n              key: \"leftSingularVectors\",\n              get: function () {\n                return this.U;\n              },\n            },\n            {\n              key: \"rightSingularVectors\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                return K.diag(this.s);\n              },\n            },\n          ]) && Ir(r.prototype, e),\n          o && Ir(r, o),\n          t\n        );\n      })();\n      function Cr(t) {\n        var r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n        return (\n          (t = Er.checkMatrix(t)),\n          r ? new Nr(t).inverse() : Dr(t, K.eye(t.rows))\n        );\n      }\n      function Dr(t, r) {\n        var e = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\n        return (\n          (t = Er.checkMatrix(t)),\n          (r = Er.checkMatrix(r)),\n          e\n            ? new Nr(t).solve(r)\n            : t.isSquare()\n            ? new jr(t).solve(r)\n            : new Tr(t).solve(r)\n        );\n      }\n      function Vr(t) {\n        var r, e, o, n, i, s;\n        if ((t = K.checkMatrix(t)).isSquare())\n          return 0 === t.columns\n            ? 1\n            : 2 === t.columns\n            ? ((r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(1, 0)),\n              r * t.get(1, 1) - e * o)\n            : 3 === t.columns\n            ? ((n = new Xt(t, [1, 2], [1, 2])),\n              (i = new Xt(t, [1, 2], [0, 2])),\n              (s = new Xt(t, [1, 2], [0, 1])),\n              (r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(0, 2)),\n              r * Vr(n) - e * Vr(i) + o * Vr(s))\n            : new jr(t).determinant;\n        throw Error(\"determinant can only be calculated for a square matrix\");\n      }\n      function qr(t, r) {\n        for (var e = [], o = 0; o < t; o++) o !== r && e.push(o);\n        return e;\n      }\n      function Fr(t, r, e) {\n        var o =\n            arguments.length > 3 && void 0 !== arguments[3]\n              ? arguments[3]\n              : 1e-9,\n          n =\n            arguments.length > 4 && void 0 !== arguments[4]\n              ? arguments[4]\n              : 1e-9;\n        if (t > n) return new Array(r.rows + 1).fill(0);\n        for (var i = r.addRow(e, [0]), s = 0; s < i.rows; s++)\n          Math.abs(i.get(s, 0)) < o && i.set(s, 0, 0);\n        return i.to1DArray();\n      }\n      function Br(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            e = r.thresholdValue,\n            o = void 0 === e ? 1e-9 : e,\n            n = r.thresholdError,\n            i = void 0 === n ? 1e-9 : n,\n            s = (t = K.checkMatrix(t)).rows,\n            u = new K(s, s),\n            a = 0;\n          a < s;\n          a++\n        ) {\n          var f = K.columnVector(t.getRow(a)),\n            c = t.subMatrixRow(qr(s, a)).transpose(),\n            h = new Nr(c),\n            l = h.solve(f),\n            p = K.sub(f, c.mmul(l)).abs().max();\n          u.setRow(a, Fr(p, l, a, o, i));\n        }\n        return u;\n      }\n      function zr(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1]\n            ? arguments[1]\n            : Number.EPSILON;\n        if ((t = K.checkMatrix(t)).isEmpty()) return t.transpose();\n        for (\n          var e = new Nr(t, { autoTranspose: !0 }),\n            o = e.leftSingularVectors,\n            n = e.rightSingularVectors,\n            i = e.diagonal,\n            s = 0;\n          s < i.length;\n          s++\n        )\n          Math.abs(i[s]) > r ? (i[s] = 1 / i[s]) : (i[s] = 0);\n        return n.mmul(K.diag(i).mmul(o.transpose()));\n      }\n      function Lr(t) {\n        return (Lr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Ur(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== Lr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i;\n        s && ((t = t.center(\"column\")), o || (r = r.center(\"column\")));\n        for (var u = t.transpose().mmul(r), a = 0; a < u.rows; a++)\n          for (var f = 0; f < u.columns; f++)\n            u.set(a, f, u.get(a, f) * (1 / (t.rows - 1)));\n        return u;\n      }\n      function Wr(t) {\n        return (Wr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== Wr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i,\n          u = n.scale,\n          a = void 0 === u || u;\n        s && (t.center(\"column\"), o || r.center(\"column\")),\n          a && (t.scale(\"column\"), o || r.scale(\"column\"));\n        for (\n          var f = t.standardDeviation(\"column\", { unbiased: !0 }),\n            c = o ? f : r.standardDeviation(\"column\", { unbiased: !0 }),\n            h = t.transpose().mmul(r),\n            l = 0;\n          l < h.rows;\n          l++\n        )\n          for (var p = 0; p < h.columns; p++)\n            h.set(l, p, h.get(l, p) * (1 / (f[l] * c[p])) * (1 / (t.rows - 1)));\n        return h;\n      }\n      function Jr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Hr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Yr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          Jr(this, t);\n          var o = e.assumeSymmetric,\n            n = void 0 !== o && o;\n          if (!(r = Er.checkMatrix(r)).isSquare())\n            throw new Error(\"Matrix is not a square matrix\");\n          if (r.isEmpty()) throw new Error(\"Matrix must be non-empty\");\n          var i,\n            s,\n            u = r.columns,\n            a = new K(u, u),\n            f = new Float64Array(u),\n            c = new Float64Array(u),\n            h = r;\n          if (!!n || r.isSymmetric()) {\n            for (i = 0; i < u; i++)\n              for (s = 0; s < u; s++) a.set(i, s, h.get(i, s));\n            Kr(u, c, f, a), Xr(u, c, f, a);\n          } else {\n            var l = new K(u, u),\n              p = new Float64Array(u);\n            for (s = 0; s < u; s++)\n              for (i = 0; i < u; i++) l.set(i, s, h.get(i, s));\n            Gr(u, l, p, a), Zr(u, c, f, a, l);\n          }\n          (this.n = u), (this.e = c), (this.d = f), (this.V = a);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"realEigenvalues\",\n              get: function () {\n                return Array.from(this.d);\n              },\n            },\n            {\n              key: \"imaginaryEigenvalues\",\n              get: function () {\n                return Array.from(this.e);\n              },\n            },\n            {\n              key: \"eigenvectorMatrix\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.n,\n                  o = this.e,\n                  n = this.d,\n                  i = new K(e, e);\n                for (t = 0; t < e; t++) {\n                  for (r = 0; r < e; r++) i.set(t, r, 0);\n                  i.set(t, t, n[t]),\n                    o[t] > 0\n                      ? i.set(t, t + 1, o[t])\n                      : o[t] < 0 && i.set(t, t - 1, o[t]);\n                }\n                return i;\n              },\n            },\n          ]) && Hr(r.prototype, e),\n          o && Hr(r, o),\n          t\n        );\n      })();\n      function Kr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h;\n        for (a = 0; a < t; a++) e[a] = o.get(t - 1, a);\n        for (u = t - 1; u > 0; u--) {\n          for (h = 0, s = 0, f = 0; f < u; f++) h += Math.abs(e[f]);\n          if (0 === h)\n            for (r[u] = e[u - 1], a = 0; a < u; a++)\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0), o.set(a, u, 0);\n          else {\n            for (f = 0; f < u; f++) (e[f] /= h), (s += e[f] * e[f]);\n            for (\n              n = e[u - 1],\n                i = Math.sqrt(s),\n                n > 0 && (i = -i),\n                r[u] = h * i,\n                s -= n * i,\n                e[u - 1] = n - i,\n                a = 0;\n              a < u;\n              a++\n            )\n              r[a] = 0;\n            for (a = 0; a < u; a++) {\n              for (\n                n = e[a], o.set(a, u, n), i = r[a] + o.get(a, a) * n, f = a + 1;\n                f <= u - 1;\n                f++\n              )\n                (i += o.get(f, a) * e[f]), (r[f] += o.get(f, a) * n);\n              r[a] = i;\n            }\n            for (n = 0, a = 0; a < u; a++) (r[a] /= s), (n += r[a] * e[a]);\n            for (c = n / (s + s), a = 0; a < u; a++) r[a] -= c * e[a];\n            for (a = 0; a < u; a++) {\n              for (n = e[a], i = r[a], f = a; f <= u - 1; f++)\n                o.set(f, a, o.get(f, a) - (n * r[f] + i * e[f]));\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0);\n            }\n          }\n          e[u] = s;\n        }\n        for (u = 0; u < t - 1; u++) {\n          if (\n            (o.set(t - 1, u, o.get(u, u)), o.set(u, u, 1), 0 !== (s = e[u + 1]))\n          ) {\n            for (f = 0; f <= u; f++) e[f] = o.get(f, u + 1) / s;\n            for (a = 0; a <= u; a++) {\n              for (i = 0, f = 0; f <= u; f++)\n                i += o.get(f, u + 1) * o.get(f, a);\n              for (f = 0; f <= u; f++) o.set(f, a, o.get(f, a) - i * e[f]);\n            }\n          }\n          for (f = 0; f <= u; f++) o.set(f, u + 1, 0);\n        }\n        for (a = 0; a < t; a++) (e[a] = o.get(t - 1, a)), o.set(t - 1, a, 0);\n        o.set(t - 1, t - 1, 1), (r[0] = 0);\n      }\n      function Xr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h, l, p, v, y, m, g, w, d;\n        for (s = 1; s < t; s++) r[s - 1] = r[s];\n        r[t - 1] = 0;\n        var b = 0,\n          M = 0,\n          x = Number.EPSILON;\n        for (f = 0; f < t; f++) {\n          for (\n            M = Math.max(M, Math.abs(e[f]) + Math.abs(r[f])), c = f;\n            c < t && !(Math.abs(r[c]) <= x * M);\n\n          )\n            c++;\n          if (c > f) {\n            0;\n            do {\n              for (\n                1,\n                  n = e[f],\n                  l = _r((h = (e[f + 1] - n) / (2 * r[f])), 1),\n                  h < 0 && (l = -l),\n                  e[f] = r[f] / (h + l),\n                  e[f + 1] = r[f] * (h + l),\n                  p = e[f + 1],\n                  i = n - e[f],\n                  s = f + 2;\n                s < t;\n                s++\n              )\n                e[s] -= i;\n              for (\n                b += i,\n                  h = e[c],\n                  y = v = 1,\n                  m = v,\n                  g = r[f + 1],\n                  w = 0,\n                  d = 0,\n                  s = c - 1;\n                s >= f;\n                s--\n              )\n                for (\n                  m = y,\n                    y = v,\n                    d = w,\n                    n = v * r[s],\n                    i = v * h,\n                    l = _r(h, r[s]),\n                    r[s + 1] = w * l,\n                    w = r[s] / l,\n                    h = (v = h / l) * e[s] - w * n,\n                    e[s + 1] = i + w * (v * n + w * e[s]),\n                    a = 0;\n                  a < t;\n                  a++\n                )\n                  (i = o.get(a, s + 1)),\n                    o.set(a, s + 1, w * o.get(a, s) + v * i),\n                    o.set(a, s, v * o.get(a, s) - w * i);\n              (h = (-w * d * m * g * r[f]) / p), (r[f] = w * h), (e[f] = v * h);\n            } while (Math.abs(r[f]) > x * M);\n          }\n          (e[f] = e[f] + b), (r[f] = 0);\n        }\n        for (s = 0; s < t - 1; s++) {\n          for (a = s, h = e[s], u = s + 1; u < t; u++)\n            e[u] < h && ((a = u), (h = e[u]));\n          if (a !== s)\n            for (e[a] = e[s], e[s] = h, u = 0; u < t; u++)\n              (h = o.get(u, s)), o.set(u, s, o.get(u, a)), o.set(u, a, h);\n        }\n      }\n      function Gr(t, r, e, o) {\n        var n,\n          i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h = t - 1;\n        for (f = 1; f <= h - 1; f++) {\n          for (c = 0, u = f; u <= h; u++) c += Math.abs(r.get(u, f - 1));\n          if (0 !== c) {\n            for (s = 0, u = h; u >= f; u--)\n              (e[u] = r.get(u, f - 1) / c), (s += e[u] * e[u]);\n            for (\n              i = Math.sqrt(s),\n                e[f] > 0 && (i = -i),\n                s -= e[f] * i,\n                e[f] = e[f] - i,\n                a = f;\n              a < t;\n              a++\n            ) {\n              for (n = 0, u = h; u >= f; u--) n += e[u] * r.get(u, a);\n              for (n /= s, u = f; u <= h; u++)\n                r.set(u, a, r.get(u, a) - n * e[u]);\n            }\n            for (u = 0; u <= h; u++) {\n              for (n = 0, a = h; a >= f; a--) n += e[a] * r.get(u, a);\n              for (n /= s, a = f; a <= h; a++)\n                r.set(u, a, r.get(u, a) - n * e[a]);\n            }\n            (e[f] = c * e[f]), r.set(f, f - 1, c * i);\n          }\n        }\n        for (u = 0; u < t; u++)\n          for (a = 0; a < t; a++) o.set(u, a, u === a ? 1 : 0);\n        for (f = h - 1; f >= 1; f--)\n          if (0 !== r.get(f, f - 1)) {\n            for (u = f + 1; u <= h; u++) e[u] = r.get(u, f - 1);\n            for (a = f; a <= h; a++) {\n              for (i = 0, u = f; u <= h; u++) i += e[u] * o.get(u, a);\n              for (i = i / e[f] / r.get(f, f - 1), u = f; u <= h; u++)\n                o.set(u, a, o.get(u, a) + i * e[u]);\n            }\n          }\n      }\n      function Zr(t, r, e, o, n) {\n        var i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h,\n          l,\n          p,\n          v,\n          y,\n          m,\n          g,\n          w,\n          d,\n          b = t - 1,\n          M = t - 1,\n          x = Number.EPSILON,\n          S = 0,\n          k = 0,\n          E = 0,\n          O = 0,\n          R = 0,\n          j = 0,\n          _ = 0,\n          P = 0;\n        for (i = 0; i < t; i++)\n          for (\n            (i < 0 || i > M) && ((e[i] = n.get(i, i)), (r[i] = 0)),\n              s = Math.max(i - 1, 0);\n            s < t;\n            s++\n          )\n            k += Math.abs(n.get(i, s));\n        for (; b >= 0; ) {\n          for (\n            a = b;\n            a > 0 &&\n            (0 ===\n              (j = Math.abs(n.get(a - 1, a - 1)) + Math.abs(n.get(a, a))) &&\n              (j = k),\n            !(Math.abs(n.get(a, a - 1)) < x * j));\n\n          )\n            a--;\n          if (a === b)\n            n.set(b, b, n.get(b, b) + S),\n              (e[b] = n.get(b, b)),\n              (r[b] = 0),\n              b--,\n              (P = 0);\n          else if (a === b - 1) {\n            if (\n              ((h = n.get(b, b - 1) * n.get(b - 1, b)),\n              (O = (E = (n.get(b - 1, b - 1) - n.get(b, b)) / 2) * E + h),\n              (_ = Math.sqrt(Math.abs(O))),\n              n.set(b, b, n.get(b, b) + S),\n              n.set(b - 1, b - 1, n.get(b - 1, b - 1) + S),\n              (l = n.get(b, b)),\n              O >= 0)\n            ) {\n              for (\n                _ = E >= 0 ? E + _ : E - _,\n                  e[b - 1] = l + _,\n                  e[b] = e[b - 1],\n                  0 !== _ && (e[b] = l - h / _),\n                  r[b - 1] = 0,\n                  r[b] = 0,\n                  E = (l = n.get(b, b - 1)) / (j = Math.abs(l) + Math.abs(_)),\n                  O = _ / j,\n                  E /= R = Math.sqrt(E * E + O * O),\n                  O /= R,\n                  s = b - 1;\n                s < t;\n                s++\n              )\n                (_ = n.get(b - 1, s)),\n                  n.set(b - 1, s, O * _ + E * n.get(b, s)),\n                  n.set(b, s, O * n.get(b, s) - E * _);\n              for (i = 0; i <= b; i++)\n                (_ = n.get(i, b - 1)),\n                  n.set(i, b - 1, O * _ + E * n.get(i, b)),\n                  n.set(i, b, O * n.get(i, b) - E * _);\n              for (i = 0; i <= M; i++)\n                (_ = o.get(i, b - 1)),\n                  o.set(i, b - 1, O * _ + E * o.get(i, b)),\n                  o.set(i, b, O * o.get(i, b) - E * _);\n            } else\n              (e[b - 1] = l + E), (e[b] = l + E), (r[b - 1] = _), (r[b] = -_);\n            (b -= 2), (P = 0);\n          } else {\n            if (\n              ((l = n.get(b, b)),\n              (p = 0),\n              (h = 0),\n              a < b &&\n                ((p = n.get(b - 1, b - 1)),\n                (h = n.get(b, b - 1) * n.get(b - 1, b))),\n              10 === P)\n            ) {\n              for (S += l, i = 0; i <= b; i++) n.set(i, i, n.get(i, i) - l);\n              (l = p =\n                0.75 *\n                (j =\n                  Math.abs(n.get(b, b - 1)) + Math.abs(n.get(b - 1, b - 2)))),\n                (h = -0.4375 * j * j);\n            }\n            if (30 === P && (j = (j = (p - l) / 2) * j + h) > 0) {\n              for (\n                j = Math.sqrt(j),\n                  p < l && (j = -j),\n                  j = l - h / ((p - l) / 2 + j),\n                  i = 0;\n                i <= b;\n                i++\n              )\n                n.set(i, i, n.get(i, i) - j);\n              (S += j), (l = p = h = 0.964);\n            }\n            for (\n              P += 1, f = b - 2;\n              f >= a &&\n              ((E =\n                ((R = l - (_ = n.get(f, f))) * (j = p - _) - h) /\n                  n.get(f + 1, f) +\n                n.get(f, f + 1)),\n              (O = n.get(f + 1, f + 1) - _ - R - j),\n              (R = n.get(f + 2, f + 1)),\n              (E /= j = Math.abs(E) + Math.abs(O) + Math.abs(R)),\n              (O /= j),\n              (R /= j),\n              f !== a) &&\n              !(\n                Math.abs(n.get(f, f - 1)) * (Math.abs(O) + Math.abs(R)) <\n                x *\n                  (Math.abs(E) *\n                    (Math.abs(n.get(f - 1, f - 1)) +\n                      Math.abs(_) +\n                      Math.abs(n.get(f + 1, f + 1))))\n              );\n\n            )\n              f--;\n            for (i = f + 2; i <= b; i++)\n              n.set(i, i - 2, 0), i > f + 2 && n.set(i, i - 3, 0);\n            for (\n              u = f;\n              u <= b - 1 &&\n              ((w = u !== b - 1),\n              u !== f &&\n                ((E = n.get(u, u - 1)),\n                (O = n.get(u + 1, u - 1)),\n                (R = w ? n.get(u + 2, u - 1) : 0),\n                0 !== (l = Math.abs(E) + Math.abs(O) + Math.abs(R)) &&\n                  ((E /= l), (O /= l), (R /= l))),\n              0 !== l);\n              u++\n            )\n              if (\n                ((j = Math.sqrt(E * E + O * O + R * R)),\n                E < 0 && (j = -j),\n                0 !== j)\n              ) {\n                for (\n                  u !== f\n                    ? n.set(u, u - 1, -j * l)\n                    : a !== f && n.set(u, u - 1, -n.get(u, u - 1)),\n                    l = (E += j) / j,\n                    p = O / j,\n                    _ = R / j,\n                    O /= E,\n                    R /= E,\n                    s = u;\n                  s < t;\n                  s++\n                )\n                  (E = n.get(u, s) + O * n.get(u + 1, s)),\n                    w &&\n                      ((E += R * n.get(u + 2, s)),\n                      n.set(u + 2, s, n.get(u + 2, s) - E * _)),\n                    n.set(u, s, n.get(u, s) - E * l),\n                    n.set(u + 1, s, n.get(u + 1, s) - E * p);\n                for (i = 0; i <= Math.min(b, u + 3); i++)\n                  (E = l * n.get(i, u) + p * n.get(i, u + 1)),\n                    w &&\n                      ((E += _ * n.get(i, u + 2)),\n                      n.set(i, u + 2, n.get(i, u + 2) - E * R)),\n                    n.set(i, u, n.get(i, u) - E),\n                    n.set(i, u + 1, n.get(i, u + 1) - E * O);\n                for (i = 0; i <= M; i++)\n                  (E = l * o.get(i, u) + p * o.get(i, u + 1)),\n                    w &&\n                      ((E += _ * o.get(i, u + 2)),\n                      o.set(i, u + 2, o.get(i, u + 2) - E * R)),\n                    o.set(i, u, o.get(i, u) - E),\n                    o.set(i, u + 1, o.get(i, u + 1) - E * O);\n              }\n          }\n        }\n        if (0 !== k) {\n          for (b = t - 1; b >= 0; b--)\n            if (((E = e[b]), 0 === (O = r[b])))\n              for (a = b, n.set(b, b, 1), i = b - 1; i >= 0; i--) {\n                for (h = n.get(i, i) - E, R = 0, s = a; s <= b; s++)\n                  R += n.get(i, s) * n.get(s, b);\n                if (r[i] < 0) (_ = h), (j = R);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? n.set(i, b, 0 !== h ? -R / h : -R / (x * k))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (c =\n                        (l * j - _ * R) /\n                        (O = (e[i] - E) * (e[i] - E) + r[i] * r[i])),\n                      n.set(i, b, c),\n                      n.set(\n                        i + 1,\n                        b,\n                        Math.abs(l) > Math.abs(_)\n                          ? (-R - h * c) / l\n                          : (-j - p * c) / _,\n                      )),\n                  x * (c = Math.abs(n.get(i, b))) * c > 1)\n                )\n                  for (s = i; s <= b; s++) n.set(s, b, n.get(s, b) / c);\n              }\n            else if (O < 0)\n              for (\n                a = b - 1,\n                  Math.abs(n.get(b, b - 1)) > Math.abs(n.get(b - 1, b))\n                    ? (n.set(b - 1, b - 1, O / n.get(b, b - 1)),\n                      n.set(b - 1, b, -(n.get(b, b) - E) / n.get(b, b - 1)))\n                    : ((d = $r(\n                        0,\n                        -n.get(b - 1, b),\n                        n.get(b - 1, b - 1) - E,\n                        O,\n                      )),\n                      n.set(b - 1, b - 1, d[0]),\n                      n.set(b - 1, b, d[1])),\n                  n.set(b, b - 1, 0),\n                  n.set(b, b, 1),\n                  i = b - 2;\n                i >= 0;\n                i--\n              ) {\n                for (v = 0, y = 0, s = a; s <= b; s++)\n                  (v += n.get(i, s) * n.get(s, b - 1)),\n                    (y += n.get(i, s) * n.get(s, b));\n                if (((h = n.get(i, i) - E), r[i] < 0))\n                  (_ = h), (R = v), (j = y);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? ((d = $r(-v, -y, h, O)),\n                      n.set(i, b - 1, d[0]),\n                      n.set(i, b, d[1]))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (m = (e[i] - E) * (e[i] - E) + r[i] * r[i] - O * O),\n                      (g = 2 * (e[i] - E) * O),\n                      0 === m &&\n                        0 === g &&\n                        (m =\n                          x *\n                          k *\n                          (Math.abs(h) +\n                            Math.abs(O) +\n                            Math.abs(l) +\n                            Math.abs(p) +\n                            Math.abs(_))),\n                      (d = $r(\n                        l * R - _ * v + O * y,\n                        l * j - _ * y - O * v,\n                        m,\n                        g,\n                      )),\n                      n.set(i, b - 1, d[0]),\n                      n.set(i, b, d[1]),\n                      Math.abs(l) > Math.abs(_) + Math.abs(O)\n                        ? (n.set(\n                            i + 1,\n                            b - 1,\n                            (-v - h * n.get(i, b - 1) + O * n.get(i, b)) / l,\n                          ),\n                          n.set(\n                            i + 1,\n                            b,\n                            (-y - h * n.get(i, b) - O * n.get(i, b - 1)) / l,\n                          ))\n                        : ((d = $r(\n                            -R - p * n.get(i, b - 1),\n                            -j - p * n.get(i, b),\n                            _,\n                            O,\n                          )),\n                          n.set(i + 1, b - 1, d[0]),\n                          n.set(i + 1, b, d[1]))),\n                  x *\n                    (c = Math.max(\n                      Math.abs(n.get(i, b - 1)),\n                      Math.abs(n.get(i, b)),\n                    )) *\n                    c >\n                    1)\n                )\n                  for (s = i; s <= b; s++)\n                    n.set(s, b - 1, n.get(s, b - 1) / c),\n                      n.set(s, b, n.get(s, b) / c);\n              }\n          for (i = 0; i < t; i++)\n            if (i < 0 || i > M)\n              for (s = i; s < t; s++) o.set(i, s, n.get(i, s));\n          for (s = t - 1; s >= 0; s--)\n            for (i = 0; i <= M; i++) {\n              for (_ = 0, u = 0; u <= Math.min(s, M); u++)\n                _ += o.get(i, u) * n.get(u, s);\n              o.set(i, s, _);\n            }\n        }\n      }\n      function $r(t, r, e, o) {\n        var n, i;\n        return Math.abs(e) > Math.abs(o)\n          ? [(t + (n = o / e) * r) / (i = e + n * o), (r - n * t) / i]\n          : [((n = e / o) * t + r) / (i = o + n * e), (n * r - t) / i];\n      }\n      function te(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var re = (function () {\n        function t(r) {\n          if (\n            ((function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, t),\n            !(r = Er.checkMatrix(r)).isSymmetric())\n          )\n            throw new Error(\"Matrix is not symmetric\");\n          var e,\n            o,\n            n,\n            i = r,\n            s = i.rows,\n            u = new K(s, s),\n            a = !0;\n          for (o = 0; o < s; o++) {\n            var f = 0;\n            for (n = 0; n < o; n++) {\n              var c = 0;\n              for (e = 0; e < n; e++) c += u.get(n, e) * u.get(o, e);\n              (c = (i.get(o, n) - c) / u.get(n, n)),\n                u.set(o, n, c),\n                (f += c * c);\n            }\n            for (\n              a &= (f = i.get(o, o) - f) > 0,\n                u.set(o, o, Math.sqrt(Math.max(f, 0))),\n                n = o + 1;\n              n < s;\n              n++\n            )\n              u.set(o, n, 0);\n          }\n          (this.L = u), (this.positiveDefinite = Boolean(a));\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isPositiveDefinite\",\n              value: function () {\n                return this.positiveDefinite;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Er.checkMatrix(t);\n                var r = this.L,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix dimensions do not match\");\n                if (!1 === this.isPositiveDefinite())\n                  throw new Error(\"Matrix is not positive definite\");\n                var o,\n                  n,\n                  i,\n                  s = t.columns,\n                  u = t.clone();\n                for (i = 0; i < e; i++)\n                  for (n = 0; n < s; n++) {\n                    for (o = 0; o < i; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(i, o));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                for (i = e - 1; i >= 0; i--)\n                  for (n = 0; n < s; n++) {\n                    for (o = i + 1; o < e; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(o, i));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                return u;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                return this.L;\n              },\n            },\n          ]) && te(r.prototype, e),\n          o && te(r, o),\n          t\n        );\n      })();\n      function ee(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      var oe = function t(r) {\n        var e =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        ee(this, t), (r = Er.checkMatrix(r));\n        var o,\n          n = e.Y,\n          i = e.scaleScores,\n          s = void 0 !== i && i,\n          u = e.maxIterations,\n          a = void 0 === u ? 1e3 : u,\n          f = e.terminationCriteria,\n          c = void 0 === f ? 1e-10 : f;\n        if (n) {\n          if (\n            (n =\n              Array.isArray(n) && \"number\" == typeof n[0]\n                ? K.columnVector(n)\n                : Er.checkMatrix(n)).rows !== r.rows\n          )\n            throw new Error(\"Y should have the same number of rows as X\");\n          o = n.getColumnVector(0);\n        } else o = r.getColumnVector(0);\n        for (var h, l, p, v, y = 1, m = 0; m < a && y > c; m++)\n          (p = (p = r\n            .transpose()\n            .mmul(o)\n            .div(o.transpose().mmul(o).get(0, 0))).div(p.norm())),\n            (h = r.mmul(p).div(p.transpose().mmul(p).get(0, 0))),\n            m > 0 && (y = h.clone().sub(v).pow(2).sum()),\n            (v = h.clone()),\n            n\n              ? ((l = (l = n\n                  .transpose()\n                  .mmul(h)\n                  .div(h.transpose().mmul(h).get(0, 0))).div(l.norm())),\n                (o = n.mmul(l).div(l.transpose().mmul(l).get(0, 0))))\n              : (o = h);\n        if (n) {\n          var g = r.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0));\n          g = g.div(g.norm());\n          var w = r.clone().sub(h.clone().mmul(g.transpose())),\n            d = o.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0)),\n            b = n.clone().sub(h.clone().mulS(d.get(0, 0)).mmul(l.transpose()));\n          (this.t = h),\n            (this.p = g.transpose()),\n            (this.w = p.transpose()),\n            (this.q = l),\n            (this.u = o),\n            (this.s = h.transpose().mmul(h)),\n            (this.xResidual = w),\n            (this.yResidual = b),\n            (this.betas = d);\n        } else\n          (this.w = p.transpose()),\n            (this.s = h.transpose().mmul(h).sqrt()),\n            (this.t = s ? h.clone().div(this.s.get(0, 0)) : h),\n            (this.xResidual = r.sub(h.mmul(p.transpose())));\n      };\n    },\n    11: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.camelize = r.isString = void 0);\n      r.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var o,\n        n,\n        i = /-(\\w)/g;\n      r.camelize =\n        ((o = function (t) {\n          return t.replace(i, function (t, r) {\n            return r ? r.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = o(t));\n        });\n    },\n    12: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isArray = void 0),\n        (r.isArray = Array.isArray);\n    },\n    13: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.toNumber = r.isNaN = r.isNumber = void 0);\n      r.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      r.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      r.toNumber = function (t) {\n        var e = parseFloat(t);\n        return r.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.traverseTreeUp =\n          r.scaleMatrix =\n          r.getAdjMatrix =\n          r.floydWarshall =\n          r.getDegree =\n            void 0);\n      r.getDegree = function (t, r, e) {\n        for (var o = [], n = 0; n < t; n++) o[n] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (o[r[t.source]] += 1),\n                t.target && (o[r[t.target]] += 1);\n            }),\n            o)\n          : o;\n      };\n      r.floydWarshall = function (t) {\n        for (var r = [], e = t.length, o = 0; o < e; o += 1) {\n          r[o] = [];\n          for (var n = 0; n < e; n += 1)\n            o === n\n              ? (r[o][n] = 0)\n              : 0 !== t[o][n] && t[o][n]\n              ? (r[o][n] = t[o][n])\n              : (r[o][n] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (o = 0; o < e; o += 1)\n            for (n = 0; n < e; n += 1)\n              r[o][n] > r[o][i] + r[i][n] && (r[o][n] = r[o][i] + r[i][n]);\n        return r;\n      };\n      r.getAdjMatrix = function (t, r) {\n        var e = t.nodes,\n          o = t.edges,\n          n = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, r) {\n              i[t.id] = r;\n              n.push([]);\n            }),\n          o &&\n            o.forEach(function (t) {\n              var e = t.source,\n                o = t.target,\n                s = i[e],\n                u = i[o];\n              (n[s][u] = 1), r || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      r.scaleMatrix = function (t, r) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var o = [];\n            t.forEach(function (t) {\n              o.push(t * r);\n            }),\n              e.push(o);\n          }),\n          e\n        );\n      };\n      r.traverseTreeUp = function (t, r) {\n        \"function\" == typeof r &&\n          (function t(r, e) {\n            if (r && r.children)\n              for (var o = r.children.length - 1; o >= 0; o--)\n                if (!t(r.children[o], e)) return;\n            return !!e(r);\n          })(t, r);\n      };\n    },\n    15: function (t, r, e) {\n      \"use strict\";\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var r, e = 1, o = arguments.length; e < o; e++)\n                for (var n in (r = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.clone = r.isObject = void 0);\n      r.isObject = function (t) {\n        return null !== t && \"object\" === o(t);\n      };\n      r.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return r.clone(t);\n            })\n          );\n        }\n        if (\"object\" === o(t) && t !== {}) {\n          var i = n({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = r.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isFunction = void 0);\n      r.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    181: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), n(e(410), r);\n    },\n    409: function (t, r, e) {\n      \"use strict\";\n      e.r(r);\n      var o = e(181);\n      r.default = o.RadialLayout;\n    },\n    410: function (t, r, e) {\n      \"use strict\";\n      var o,\n        n =\n          (this && this.__extends) ||\n          ((o = function (t, r) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, r) {\n                  t.__proto__ = r;\n                }) ||\n              function (t, r) {\n                for (var e in r)\n                  Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]);\n              })(t, r);\n          }),\n          function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(r) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            o(t, r),\n              (t.prototype =\n                null === r\n                  ? Object.create(r)\n                  : ((e.prototype = r.prototype), new e()));\n          }),\n        i =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.RadialLayout = void 0);\n      var s = e(10),\n        u = e(7),\n        a = i(e(411)),\n        f = i(e(412));\n      function c(t, r) {\n        return Math.sqrt(\n          (t[0] - r[0]) * (t[0] - r[0]) + (t[1] - r[1]) * (t[1] - r[1]),\n        );\n      }\n      var h = (function (t) {\n        function r(r) {\n          var e = t.call(this) || this;\n          return (\n            (e.maxIteration = 1e3),\n            (e.focusNode = null),\n            (e.unitRadius = null),\n            (e.linkDistance = 50),\n            (e.preventOverlap = !1),\n            (e.strictRadial = !0),\n            (e.maxPreventOverlapIteration = 200),\n            (e.sortStrength = 10),\n            (e.nodes = []),\n            (e.edges = []),\n            e.updateCfg(r),\n            e\n          );\n        }\n        return (\n          n(r, t),\n          (r.prototype.getDefaultCfg = function () {\n            return {\n              maxIteration: 1e3,\n              focusNode: null,\n              unitRadius: null,\n              linkDistance: 50,\n              preventOverlap: !1,\n              nodeSize: void 0,\n              nodeSpacing: void 0,\n              strictRadial: !0,\n              maxPreventOverlapIteration: 200,\n              sortBy: void 0,\n              sortStrength: 10,\n            };\n          }),\n          (r.prototype.execute = function () {\n            var t = this,\n              r = t.nodes,\n              e = t.edges || [];\n            if (r && 0 !== r.length) {\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n                t.height ||\n                  \"undefined\" == typeof window ||\n                  (t.height = window.innerHeight),\n                t.center || (t.center = [t.width / 2, t.height / 2]);\n              var o = t.center;\n              if (1 === r.length)\n                return (\n                  (r[0].x = o[0]),\n                  (r[0].y = o[1]),\n                  void (t.onLayoutEnd && t.onLayoutEnd())\n                );\n              var n = t.linkDistance,\n                i = null;\n              if (s.isString(t.focusNode)) {\n                for (var u = !1, c = 0; c < r.length; c++)\n                  r[c].id === t.focusNode &&\n                    ((i = r[c]), (t.focusNode = i), (u = !0), (c = r.length));\n                u || (i = null);\n              } else i = t.focusNode;\n              i || ((i = r[0]), (t.focusNode = i));\n              var h,\n                l,\n                p,\n                v =\n                  ((h = r),\n                  (l = i.id),\n                  (p = -1),\n                  h.forEach(function (t, r) {\n                    t.id === l && (p = r);\n                  }),\n                  p);\n              t.focusIndex = v;\n              var y = s.getAdjMatrix({ nodes: r, edges: e }, !1),\n                m = s.floydWarshall(y),\n                g = t.maxToFocus(m, v);\n              t.handleInfinity(m, v, g + 1), (t.distances = m);\n              var w = m[v],\n                d = t.width || 500,\n                b = t.height || 500,\n                M = d - o[0] > o[0] ? o[0] : d - o[0],\n                x = b - o[1] > o[1] ? o[1] : b - o[1];\n              0 === M && (M = d / 2), 0 === x && (x = b / 2);\n              var S = x > M ? M : x,\n                k = Math.max.apply(Math, w),\n                E = [];\n              w.forEach(function (r, e) {\n                t.unitRadius || (t.unitRadius = S / k),\n                  (E[e] = r * t.unitRadius);\n              }),\n                (t.radii = E);\n              var O = t.eIdealDisMatrix();\n              t.eIdealDistances = O;\n              var R = (function (t) {\n                for (\n                  var r = t.length, e = t[0].length, o = [], n = 0;\n                  n < r;\n                  n++\n                ) {\n                  for (var i = [], s = 0; s < e; s++)\n                    0 !== t[n][s] ? i.push(1 / (t[n][s] * t[n][s])) : i.push(0);\n                  o.push(i);\n                }\n                return o;\n              })(O);\n              t.weights = R;\n              var j = new a.default({ linkDistance: n, distances: O }).layout();\n              j.forEach(function (t) {\n                s.isNaN(t[0]) && (t[0] = Math.random() * n),\n                  s.isNaN(t[1]) && (t[1] = Math.random() * n);\n              }),\n                (t.positions = j),\n                j.forEach(function (t, e) {\n                  (r[e].x = t[0] + o[0]), (r[e].y = t[1] + o[1]);\n                }),\n                j.forEach(function (t) {\n                  (t[0] -= j[v][0]), (t[1] -= j[v][1]);\n                }),\n                t.run();\n              var _,\n                P = t.preventOverlap,\n                T = t.nodeSize,\n                A = t.strictRadial;\n              if (P) {\n                var I,\n                  N = t.nodeSpacing;\n                (I = s.isNumber(N)\n                  ? function () {\n                      return N;\n                    }\n                  : s.isFunction(N)\n                  ? N\n                  : function () {\n                      return 0;\n                    }),\n                  (_ = T\n                    ? s.isArray(T)\n                      ? function (t) {\n                          return (T[0] > T[1] ? T[0] : T[1]) + I(t);\n                        }\n                      : function (t) {\n                          return T + I(t);\n                        }\n                    : function (t) {\n                        return t.size\n                          ? s.isArray(t.size)\n                            ? (t.size[0] > t.size[1] ? t.size[0] : t.size[1]) +\n                              I(t)\n                            : t.size + I(t)\n                          : 10 + I(t);\n                      });\n                var C = {\n                    nodes: r,\n                    nodeSizeFunc: _,\n                    adjMatrix: y,\n                    positions: j,\n                    radii: E,\n                    height: b,\n                    width: d,\n                    strictRadial: A,\n                    focusID: v,\n                    iterations: t.maxPreventOverlapIteration || 200,\n                    k: j.length / 4.5,\n                  },\n                  D = new f.default(C);\n                j = D.layout();\n              }\n              return (\n                j.forEach(function (t, e) {\n                  (r[e].x = t[0] + o[0]), (r[e].y = t[1] + o[1]);\n                }),\n                t.onLayoutEnd && t.onLayoutEnd(),\n                { nodes: r, edges: e }\n              );\n            }\n            t.onLayoutEnd && t.onLayoutEnd();\n          }),\n          (r.prototype.run = function () {\n            for (\n              var t = this.maxIteration,\n                r = this.positions || [],\n                e = this.weights || [],\n                o = this.eIdealDistances || [],\n                n = this.radii || [],\n                i = 0;\n              i <= t;\n              i++\n            ) {\n              var s = i / t;\n              this.oneIteration(s, r, n, o, e);\n            }\n          }),\n          (r.prototype.oneIteration = function (t, r, e, o, n) {\n            var i = 1 - t,\n              s = this.focusIndex;\n            r.forEach(function (u, a) {\n              var f = c(u, [0, 0]),\n                h = 0 === f ? 0 : 1 / f;\n              if (a !== s) {\n                var l = 0,\n                  p = 0,\n                  v = 0;\n                r.forEach(function (t, r) {\n                  if (a !== r) {\n                    var e = c(u, t),\n                      i = 0 === e ? 0 : 1 / e,\n                      s = o[r][a];\n                    (v += n[a][r]),\n                      (l += n[a][r] * (t[0] + s * (u[0] - t[0]) * i)),\n                      (p += n[a][r] * (t[1] + s * (u[1] - t[1]) * i));\n                  }\n                });\n                var y = 0 === e[a] ? 0 : 1 / e[a];\n                (v *= i),\n                  (v += t * y * y),\n                  (l *= i),\n                  (l += t * y * u[0] * h),\n                  (u[0] = l / v),\n                  (p *= i),\n                  (p += t * y * u[1] * h),\n                  (u[1] = p / v);\n              }\n            });\n          }),\n          (r.prototype.eIdealDisMatrix = function () {\n            var t = this,\n              r = t.nodes;\n            if (!r) return [];\n            var e = t.distances,\n              o = t.linkDistance,\n              n = t.radii || [],\n              i = t.unitRadius || 50,\n              u = [];\n            return (\n              e &&\n                e.forEach(function (e, a) {\n                  var f = [];\n                  e.forEach(function (e, u) {\n                    if (a === u) f.push(0);\n                    else if (n[a] === n[u])\n                      if (\"data\" === t.sortBy)\n                        f.push(\n                          (e * (Math.abs(a - u) * t.sortStrength)) / (n[a] / i),\n                        );\n                      else if (t.sortBy) {\n                        var c = r[a][t.sortBy] || 0,\n                          h = r[u][t.sortBy] || 0;\n                        s.isString(c) && (c = c.charCodeAt(0)),\n                          s.isString(h) && (h = h.charCodeAt(0)),\n                          f.push(\n                            (e * (Math.abs(c - h) * t.sortStrength)) /\n                              (n[a] / i),\n                          );\n                      } else f.push((e * o) / (n[a] / i));\n                    else {\n                      var l = (o + i) / 2;\n                      f.push(e * l);\n                    }\n                  }),\n                    u.push(f);\n                }),\n              u\n            );\n          }),\n          (r.prototype.handleInfinity = function (t, r, e) {\n            for (var o = t.length, n = 0; n < o; n++)\n              if (t[r][n] === 1 / 0) {\n                (t[r][n] = e), (t[n][r] = e);\n                for (var i = 0; i < o; i++)\n                  t[n][i] !== 1 / 0 &&\n                    t[r][i] === 1 / 0 &&\n                    ((t[r][i] = e + t[n][i]), (t[i][r] = e + t[n][i]));\n              }\n            for (n = 0; n < o; n++)\n              if (n !== r)\n                for (i = 0; i < o; i++)\n                  if (t[n][i] === 1 / 0) {\n                    var s = Math.abs(t[r][n] - t[r][i]);\n                    (s = 0 === s ? 1 : s), (t[n][i] = s);\n                  }\n          }),\n          (r.prototype.maxToFocus = function (t, r) {\n            for (var e = 0, o = 0; o < t[r].length; o++)\n              t[r][o] !== 1 / 0 && (e = t[r][o] > e ? t[r][o] : e);\n            return e;\n          }),\n          (r.prototype.getType = function () {\n            return \"radial\";\n          }),\n          r\n        );\n      })(u.Base);\n      r.RadialLayout = h;\n    },\n    411: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 });\n      var o = e(102),\n        n = (function () {\n          function t(t) {\n            (this.distances = t.distances),\n              (this.dimension = t.dimension || 2),\n              (this.linkDistance = t.linkDistance);\n          }\n          return (\n            (t.prototype.layout = function () {\n              var t = this.dimension,\n                r = this.distances,\n                e = this.linkDistance;\n              try {\n                var n = o.Matrix.mul(o.Matrix.pow(r, 2), -0.5),\n                  i = n.mean(\"row\"),\n                  s = n.mean(\"column\"),\n                  u = n.mean();\n                n.add(u).subRowVector(i).subColumnVector(s);\n                var a = new o.SingularValueDecomposition(n),\n                  f = o.Matrix.sqrt(a.diagonalMatrix).diagonal();\n                return a.leftSingularVectors.toJSON().map(function (r) {\n                  return o.Matrix.mul([r], [f]).toJSON()[0].splice(0, t);\n                });\n              } catch (t) {\n                for (var c = [], h = 0; h < r.length; h++) {\n                  var l = Math.random() * e,\n                    p = Math.random() * e;\n                  c.push([l, p]);\n                }\n                return c;\n              }\n            }),\n            t\n          );\n        })();\n      r.default = n;\n    },\n    412: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 });\n      var o = (function () {\n        function t(t) {\n          (this.disp = []),\n            (this.positions = t.positions),\n            (this.adjMatrix = t.adjMatrix),\n            (this.focusID = t.focusID),\n            (this.radii = t.radii),\n            (this.iterations = t.iterations || 10),\n            (this.height = t.height || 10),\n            (this.width = t.width || 10),\n            (this.speed = t.speed || 100),\n            (this.gravity = t.gravity || 10),\n            (this.nodeSizeFunc = t.nodeSizeFunc),\n            (this.k = t.k || 5),\n            (this.strictRadial = t.strictRadial),\n            (this.nodes = t.nodes);\n        }\n        return (\n          (t.prototype.layout = function () {\n            var t = this.positions,\n              r = [],\n              e = this.iterations,\n              o = this.width / 10;\n            (this.maxDisplace = o), (this.disp = r);\n            for (var n = 0; n < e; n++)\n              t.forEach(function (t, e) {\n                r[e] = { x: 0, y: 0 };\n              }),\n                this.getRepulsion(),\n                this.updatePositions();\n            return t;\n          }),\n          (t.prototype.getRepulsion = function () {\n            var t = this,\n              r = t.positions,\n              e = t.nodes,\n              o = t.disp,\n              n = t.k,\n              i = t.radii || [];\n            r.forEach(function (s, u) {\n              (o[u] = { x: 0, y: 0 }),\n                r.forEach(function (r, a) {\n                  if (u !== a && i[u] === i[a]) {\n                    var f = s[0] - r[0],\n                      c = s[1] - r[1],\n                      h = Math.sqrt(f * f + c * c);\n                    if (0 === h) {\n                      h = 1;\n                      var l = u > a ? 1 : -1;\n                      (f = 0.01 * l), (c = 0.01 * l);\n                    }\n                    if (\n                      h <\n                      t.nodeSizeFunc(e[u]) / 2 + t.nodeSizeFunc(e[a]) / 2\n                    ) {\n                      var p = (n * n) / h;\n                      (o[u].x += (f / h) * p), (o[u].y += (c / h) * p);\n                    }\n                  }\n                });\n            });\n          }),\n          (t.prototype.updatePositions = function () {\n            var t = this.positions,\n              r = this.disp,\n              e = this.speed,\n              o = this.strictRadial,\n              n = this.focusID,\n              i = this.maxDisplace || this.width / 10;\n            o &&\n              r.forEach(function (r, e) {\n                var o = t[e][0] - t[n][0],\n                  i = t[e][1] - t[n][1],\n                  s = Math.sqrt(o * o + i * i),\n                  u = i / s,\n                  a = -o / s,\n                  f = Math.sqrt(r.x * r.x + r.y * r.y),\n                  c = Math.acos((u * r.x + a * r.y) / f);\n                c > Math.PI / 2 && ((c -= Math.PI / 2), (u *= -1), (a *= -1));\n                var h = Math.cos(c) * f;\n                (r.x = u * h), (r.y = a * h);\n              });\n            var s = this.radii;\n            t.forEach(function (u, a) {\n              if (a !== n) {\n                var f = Math.sqrt(r[a].x * r[a].x + r[a].y * r[a].y);\n                if (f > 0 && a !== n) {\n                  var c = Math.min(i * (e / 800), f);\n                  if (\n                    ((u[0] += (r[a].x / f) * c), (u[1] += (r[a].y / f) * c), o)\n                  ) {\n                    var h = u[0] - t[n][0],\n                      l = u[1] - t[n][1],\n                      p = Math.sqrt(h * h + l * l);\n                    (h = (h / p) * s[a]),\n                      (l = (l / p) * s[a]),\n                      (u[0] = t[n][0] + h),\n                      (u[1] = t[n][1] + l);\n                  }\n                }\n              }\n            });\n          }),\n          t\n        );\n      })();\n      r.default = o;\n    },\n    7: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), (r.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      r.Base = o;\n    },\n  }).default;\n});\n//# sourceMappingURL=radialLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/extends/layout/randomLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(o) {\n      if (e[o]) return e[o].exports;\n      var r = (e[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(r.exports, r, r.exports, n), (r.l = !0), r.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, o) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: o });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (n.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var r in t)\n            n.d(\n              o,\n              r,\n              function (e) {\n                return t[e];\n              }.bind(null, r),\n            );\n        return o;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 413))\n    );\n  })({\n    413: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var o = n(57);\n      e.default = o.RandomLayout;\n    },\n    57: function (t, e, n) {\n      \"use strict\";\n      var o,\n        r =\n          (this && this.__extends) ||\n          ((o = function (t, e) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            o(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.RandomLayout = void 0);\n      var i = (function (t) {\n        function e(e) {\n          var n = t.call(this) || this;\n          return (\n            (n.center = [0, 0]),\n            (n.width = 300),\n            (n.height = 300),\n            (n.nodes = []),\n            (n.edges = []),\n            (n.onLayoutEnd = function () {}),\n            n.updateCfg(e),\n            n\n          );\n        }\n        return (\n          r(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { center: [0, 0], width: 300, height: 300 };\n          }),\n          (e.prototype.execute = function () {\n            var t = this,\n              e = t.nodes,\n              n = t.center;\n            return (\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n              t.height ||\n                \"undefined\" == typeof window ||\n                (t.height = window.innerHeight),\n              e &&\n                e.forEach(function (e) {\n                  (e.x = 0.9 * (Math.random() - 0.5) * t.width + n[0]),\n                    (e.y = 0.9 * (Math.random() - 0.5) * t.height + n[1]);\n                }),\n              t.onLayoutEnd && t.onLayoutEnd(),\n              { nodes: e, edges: this.edges }\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"random\";\n          }),\n          e\n        );\n      })(n(7).Base);\n      e.RandomLayout = i;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = o;\n    },\n  }).default;\n});\n//# sourceMappingURL=randomLayout.js.map\n"
  },
  {
    "path": "packages/examples-wx/miniprogram_npm/@antv/f6-wx/index.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.F6 = e())\n    : (t.F6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var i = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(i.exports, i, i.exports, n), (i.l = !0), i.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var i in t)\n            n.d(\n              r,\n              i,\n              function (e) {\n                return t[e];\n              }.bind(null, i),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 205))\n    );\n  })({\n    0: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"contains\", function () {\n          return i;\n        }),\n        n.d(e, \"includes\", function () {\n          return i;\n        }),\n        n.d(e, \"difference\", function () {\n          return a;\n        }),\n        n.d(e, \"find\", function () {\n          return x;\n        }),\n        n.d(e, \"findIndex\", function () {\n          return S;\n        }),\n        n.d(e, \"firstValue\", function () {\n          return w;\n        }),\n        n.d(e, \"flatten\", function () {\n          return O;\n        }),\n        n.d(e, \"flattenDeep\", function () {\n          return M;\n        }),\n        n.d(e, \"getRange\", function () {\n          return C;\n        }),\n        n.d(e, \"pull\", function () {\n          return I;\n        }),\n        n.d(e, \"pullAt\", function () {\n          return N;\n        }),\n        n.d(e, \"reduce\", function () {\n          return B;\n        }),\n        n.d(e, \"remove\", function () {\n          return L;\n        }),\n        n.d(e, \"sortBy\", function () {\n          return _;\n        }),\n        n.d(e, \"union\", function () {\n          return F;\n        }),\n        n.d(e, \"uniq\", function () {\n          return R;\n        }),\n        n.d(e, \"valuesOfKey\", function () {\n          return Y;\n        }),\n        n.d(e, \"head\", function () {\n          return X;\n        }),\n        n.d(e, \"last\", function () {\n          return z;\n        }),\n        n.d(e, \"startsWith\", function () {\n          return W;\n        }),\n        n.d(e, \"endsWith\", function () {\n          return q;\n        }),\n        n.d(e, \"filter\", function () {\n          return o;\n        }),\n        n.d(e, \"every\", function () {\n          return V;\n        }),\n        n.d(e, \"some\", function () {\n          return G;\n        }),\n        n.d(e, \"group\", function () {\n          return K;\n        }),\n        n.d(e, \"groupBy\", function () {\n          return U;\n        }),\n        n.d(e, \"groupToMap\", function () {\n          return Z;\n        }),\n        n.d(e, \"getWrapBehavior\", function () {\n          return $;\n        }),\n        n.d(e, \"wrapBehavior\", function () {\n          return Q;\n        }),\n        n.d(e, \"number2color\", function () {\n          return tt;\n        }),\n        n.d(e, \"parseRadius\", function () {\n          return et;\n        }),\n        n.d(e, \"clamp\", function () {\n          return nt;\n        }),\n        n.d(e, \"fixedBase\", function () {\n          return rt;\n        }),\n        n.d(e, \"isDecimal\", function () {\n          return ot;\n        }),\n        n.d(e, \"isEven\", function () {\n          return at;\n        }),\n        n.d(e, \"isInteger\", function () {\n          return st;\n        }),\n        n.d(e, \"isNegative\", function () {\n          return ct;\n        }),\n        n.d(e, \"isNumberEqual\", function () {\n          return ut;\n        }),\n        n.d(e, \"isOdd\", function () {\n          return ht;\n        }),\n        n.d(e, \"isPositive\", function () {\n          return lt;\n        }),\n        n.d(e, \"max\", function () {\n          return k;\n        }),\n        n.d(e, \"maxBy\", function () {\n          return ft;\n        }),\n        n.d(e, \"min\", function () {\n          return j;\n        }),\n        n.d(e, \"minBy\", function () {\n          return dt;\n        }),\n        n.d(e, \"mod\", function () {\n          return pt;\n        }),\n        n.d(e, \"toDegree\", function () {\n          return vt;\n        }),\n        n.d(e, \"toInteger\", function () {\n          return yt;\n        }),\n        n.d(e, \"toRadian\", function () {\n          return bt;\n        }),\n        n.d(e, \"forIn\", function () {\n          return xt;\n        }),\n        n.d(e, \"has\", function () {\n          return St;\n        }),\n        n.d(e, \"hasKey\", function () {\n          return wt;\n        }),\n        n.d(e, \"hasValue\", function () {\n          return Mt;\n        }),\n        n.d(e, \"keys\", function () {\n          return g;\n        }),\n        n.d(e, \"isMatch\", function () {\n          return v;\n        }),\n        n.d(e, \"values\", function () {\n          return Ot;\n        }),\n        n.d(e, \"lowerCase\", function () {\n          return jt;\n        }),\n        n.d(e, \"lowerFirst\", function () {\n          return Ct;\n        }),\n        n.d(e, \"substitute\", function () {\n          return Et;\n        }),\n        n.d(e, \"upperCase\", function () {\n          return Pt;\n        }),\n        n.d(e, \"upperFirst\", function () {\n          return At;\n        }),\n        n.d(e, \"getType\", function () {\n          return Tt;\n        }),\n        n.d(e, \"isArguments\", function () {\n          return Nt;\n        }),\n        n.d(e, \"isArray\", function () {\n          return l;\n        }),\n        n.d(e, \"isArrayLike\", function () {\n          return r;\n        }),\n        n.d(e, \"isBoolean\", function () {\n          return Bt;\n        }),\n        n.d(e, \"isDate\", function () {\n          return Lt;\n        }),\n        n.d(e, \"isError\", function () {\n          return Dt;\n        }),\n        n.d(e, \"isFunction\", function () {\n          return u;\n        }),\n        n.d(e, \"isFinite\", function () {\n          return _t;\n        }),\n        n.d(e, \"isNil\", function () {\n          return h;\n        }),\n        n.d(e, \"isNull\", function () {\n          return Rt;\n        }),\n        n.d(e, \"isNumber\", function () {\n          return it;\n        }),\n        n.d(e, \"isObject\", function () {\n          return d;\n        }),\n        n.d(e, \"isObjectLike\", function () {\n          return m;\n        }),\n        n.d(e, \"isPlainObject\", function () {\n          return b;\n        }),\n        n.d(e, \"isPrototype\", function () {\n          return Yt;\n        }),\n        n.d(e, \"isRegExp\", function () {\n          return Xt;\n        }),\n        n.d(e, \"isString\", function () {\n          return D;\n        }),\n        n.d(e, \"isType\", function () {\n          return c;\n        }),\n        n.d(e, \"isUndefined\", function () {\n          return zt;\n        }),\n        n.d(e, \"isElement\", function () {\n          return Wt;\n        }),\n        n.d(e, \"requestAnimationFrame\", function () {\n          return qt;\n        }),\n        n.d(e, \"clearAnimationFrame\", function () {\n          return Vt;\n        }),\n        n.d(e, \"augment\", function () {\n          return Ut;\n        }),\n        n.d(e, \"clone\", function () {\n          return Kt;\n        }),\n        n.d(e, \"debounce\", function () {\n          return $t;\n        }),\n        n.d(e, \"memoize\", function () {\n          return Qt;\n        }),\n        n.d(e, \"deepMix\", function () {\n          return te;\n        }),\n        n.d(e, \"each\", function () {\n          return p;\n        }),\n        n.d(e, \"extend\", function () {\n          return ee;\n        }),\n        n.d(e, \"indexOf\", function () {\n          return ne;\n        }),\n        n.d(e, \"isEmpty\", function () {\n          return ie;\n        }),\n        n.d(e, \"isEqual\", function () {\n          return oe;\n        }),\n        n.d(e, \"isEqualWith\", function () {\n          return ae;\n        }),\n        n.d(e, \"map\", function () {\n          return se;\n        }),\n        n.d(e, \"mapValues\", function () {\n          return ue;\n        }),\n        n.d(e, \"mix\", function () {\n          return Ht;\n        }),\n        n.d(e, \"assign\", function () {\n          return Ht;\n        }),\n        n.d(e, \"get\", function () {\n          return he;\n        }),\n        n.d(e, \"set\", function () {\n          return le;\n        }),\n        n.d(e, \"pick\", function () {\n          return de;\n        }),\n        n.d(e, \"omit\", function () {\n          return pe;\n        }),\n        n.d(e, \"throttle\", function () {\n          return ge;\n        }),\n        n.d(e, \"toArray\", function () {\n          return ve;\n        }),\n        n.d(e, \"toString\", function () {\n          return kt;\n        }),\n        n.d(e, \"uniqueId\", function () {\n          return me;\n        }),\n        n.d(e, \"noop\", function () {\n          return be;\n        }),\n        n.d(e, \"identity\", function () {\n          return xe;\n        }),\n        n.d(e, \"size\", function () {\n          return Se;\n        }),\n        n.d(e, \"measureTextWidth\", function () {\n          return Me;\n        }),\n        n.d(e, \"getEllipsisText\", function () {\n          return ke;\n        }),\n        n.d(e, \"Cache\", function () {\n          return je;\n        });\n      var r = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = function (t, e) {\n          return !!r(t) && t.indexOf(e) > -1;\n        },\n        o = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            e(o, i) && n.push(o);\n          }\n          return n;\n        },\n        a = function (t, e) {\n          return (\n            void 0 === e && (e = []),\n            o(t, function (t) {\n              return !i(e, t);\n            })\n          );\n        },\n        s = {}.toString,\n        c = function (t, e) {\n          return s.call(t) === \"[object \" + e + \"]\";\n        },\n        u = function (t) {\n          return c(t, \"Function\");\n        },\n        h = function (t) {\n          return null == t;\n        },\n        l = function (t) {\n          return Array.isArray ? Array.isArray(t) : c(t, \"Array\");\n        };\n      function f(t) {\n        return (f =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var d = function (t) {\n        var e = f(t);\n        return (null !== t && \"object\" === e) || \"function\" === e;\n      };\n      var p = function (t, e) {\n          if (t)\n            if (l(t))\n              for (var n = 0, r = t.length; n < r && !1 !== e(t[n], n); n++);\n            else if (d(t))\n              for (var i in t)\n                if (t.hasOwnProperty(i) && !1 === e(t[i], i)) break;\n        },\n        g = Object.keys\n          ? function (t) {\n              return Object.keys(t);\n            }\n          : function (t) {\n              var e = [];\n              return (\n                p(t, function (n, r) {\n                  (u(t) && \"prototype\" === r) || e.push(r);\n                }),\n                e\n              );\n            };\n      var v = function (t, e) {\n        var n = g(e),\n          r = n.length;\n        if (h(t)) return !r;\n        for (var i = 0; i < r; i += 1) {\n          var o = n[i];\n          if (e[o] !== t[o] || !(o in t)) return !1;\n        }\n        return !0;\n      };\n      function y(t) {\n        return (y =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var m = function (t) {\n          return \"object\" === y(t) && null !== t;\n        },\n        b = function (t) {\n          if (!m(t) || !c(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var e = t; null !== Object.getPrototypeOf(e); )\n            e = Object.getPrototypeOf(e);\n          return Object.getPrototypeOf(t) === e;\n        };\n      var x = function (t, e) {\n        if (!l(t)) return null;\n        var n;\n        if (\n          (u(e) && (n = e),\n          b(e) &&\n            (n = function (t) {\n              return v(t, e);\n            }),\n          n)\n        )\n          for (var r = 0; r < t.length; r += 1) if (n(t[r])) return t[r];\n        return null;\n      };\n      var S = function (t, e, n) {\n          void 0 === n && (n = 0);\n          for (var r = n; r < t.length; r++) if (e(t[r], r)) return r;\n          return -1;\n        },\n        w = function (t, e) {\n          for (var n = null, r = 0; r < t.length; r++) {\n            var i = t[r][e];\n            if (!h(i)) {\n              n = l(i) ? i[0] : i;\n              break;\n            }\n          }\n          return n;\n        },\n        O = function (t) {\n          if (!l(t)) return [];\n          for (var e = [], n = 0; n < t.length; n++) e = e.concat(t[n]);\n          return e;\n        },\n        M = function t(e, n) {\n          if ((void 0 === n && (n = []), l(e)))\n            for (var r = 0; r < e.length; r += 1) t(e[r], n);\n          else n.push(e);\n          return n;\n        },\n        k = function (t) {\n          if (l(t))\n            return t.reduce(function (t, e) {\n              return Math.max(t, e);\n            }, t[0]);\n        },\n        j = function (t) {\n          if (l(t))\n            return t.reduce(function (t, e) {\n              return Math.min(t, e);\n            }, t[0]);\n        },\n        C = function (t) {\n          var e = t.filter(function (t) {\n            return !isNaN(t);\n          });\n          if (!e.length) return { min: 0, max: 0 };\n          if (l(t[0])) {\n            for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n            e = n;\n          }\n          var i = k(e);\n          return { min: j(e), max: i };\n        },\n        E = Array.prototype,\n        P = E.splice,\n        A = E.indexOf,\n        I = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r++)\n            for (var i = e[r], o = -1; (o = A.call(t, i)) > -1; )\n              P.call(t, o, 1);\n          return t;\n        },\n        T = Array.prototype.splice,\n        N = function (t, e) {\n          if (!r(t)) return [];\n          for (var n = t ? e.length : 0, i = n - 1; n--; ) {\n            var o = void 0,\n              a = e[n];\n            (n !== i && a === o) || ((o = a), T.call(t, a, 1));\n          }\n          return t;\n        },\n        B = function (t, e, n) {\n          if (!l(t) && !b(t)) return t;\n          var r = n;\n          return (\n            p(t, function (t, n) {\n              r = e(r, t, n);\n            }),\n            r\n          );\n        },\n        L = function (t, e) {\n          var n = [];\n          if (!r(t)) return n;\n          for (var i = -1, o = [], a = t.length; ++i < a; ) {\n            var s = t[i];\n            e(s, i, t) && (n.push(s), o.push(i));\n          }\n          return N(t, o), n;\n        },\n        D = function (t) {\n          return c(t, \"String\");\n        };\n      var _ = function (t, e) {\n        var n;\n        if (u(e))\n          n = function (t, n) {\n            return e(t) - e(n);\n          };\n        else {\n          var r = [];\n          D(e) ? r.push(e) : l(e) && (r = e),\n            (n = function (t, e) {\n              for (var n = 0; n < r.length; n += 1) {\n                var i = r[n];\n                if (t[i] > e[i]) return 1;\n                if (t[i] < e[i]) return -1;\n              }\n              return 0;\n            });\n        }\n        return t.sort(n), t;\n      };\n      function R(t, e) {\n        void 0 === e && (e = new Map());\n        var n = [];\n        if (Array.isArray(t))\n          for (var r = 0, i = t.length; r < i; r++) {\n            var o = t[r];\n            e.has(o) || (n.push(o), e.set(o, !0));\n          }\n        return n;\n      }\n      var F = function () {\n          for (var t = [], e = 0; e < arguments.length; e++)\n            t[e] = arguments[e];\n          return R([].concat.apply([], t));\n        },\n        Y = function (t, e) {\n          for (var n = [], r = {}, i = 0; i < t.length; i++) {\n            var o = t[i][e];\n            if (!h(o)) {\n              l(o) || (o = [o]);\n              for (var a = 0; a < o.length; a++) {\n                var s = o[a];\n                r[s] || (n.push(s), (r[s] = !0));\n              }\n            }\n          }\n          return n;\n        };\n      function X(t) {\n        if (r(t)) return t[0];\n      }\n      function z(t) {\n        if (r(t)) {\n          return t[t.length - 1];\n        }\n      }\n      var W = function (t, e) {\n        return !(!l(t) && !D(t)) && t[0] === e;\n      };\n      var q = function (t, e) {\n          return !(!l(t) && !D(t)) && t[t.length - 1] === e;\n        },\n        V = function (t, e) {\n          for (var n = 0; n < t.length; n++) if (!e(t[n], n)) return !1;\n          return !0;\n        },\n        G = function (t, e) {\n          for (var n = 0; n < t.length; n++) if (e(t[n], n)) return !0;\n          return !1;\n        },\n        H = Object.prototype.hasOwnProperty;\n      var U = function (t, e) {\n        if (!e || !l(t)) return {};\n        for (\n          var n,\n            r = {},\n            i = u(e)\n              ? e\n              : function (t) {\n                  return t[e];\n                },\n            o = 0;\n          o < t.length;\n          o++\n        ) {\n          var a = t[o];\n          (n = i(a)), H.call(r, n) ? r[n].push(a) : (r[n] = [a]);\n        }\n        return r;\n      };\n      function Z(t, e) {\n        if (!e) return { 0: t };\n        if (!u(e)) {\n          var n = l(e) ? e : e.replace(/\\s+/g, \"\").split(\"*\");\n          e = function (t) {\n            for (var e = \"_\", r = 0, i = n.length; r < i; r++)\n              e += t[n[r]] && t[n[r]].toString();\n            return e;\n          };\n        }\n        return U(t, e);\n      }\n      var K = function (t, e) {\n        if (!e) return [t];\n        var n = Z(t, e),\n          r = [];\n        for (var i in n) r.push(n[i]);\n        return r;\n      };\n      var $ = function (t, e) {\n        return t[\"_wrap_\" + e];\n      };\n      var Q = function (t, e) {\n          if (t[\"_wrap_\" + e]) return t[\"_wrap_\" + e];\n          var n = function (n) {\n            t[e](n);\n          };\n          return (t[\"_wrap_\" + e] = n), n;\n        },\n        J = {};\n      var tt = function (t) {\n        var e = J[t];\n        if (!e) {\n          for (var n = t.toString(16), r = n.length; r < 6; r++) n = \"0\" + n;\n          (e = \"#\" + n), (J[t] = e);\n        }\n        return e;\n      };\n      var et = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          return (\n            l(t)\n              ? 1 === t.length\n                ? (e = n = r = i = t[0])\n                : 2 === t.length\n                ? ((e = r = t[0]), (n = i = t[1]))\n                : 3 === t.length\n                ? ((e = t[0]), (n = i = t[1]), (r = t[2]))\n                : ((e = t[0]), (n = t[1]), (r = t[2]), (i = t[3]))\n              : (e = n = r = i = t),\n            { r1: e, r2: n, r3: r, r4: i }\n          );\n        },\n        nt = function (t, e, n) {\n          return t < e ? e : t > n ? n : t;\n        },\n        rt = function (t, e) {\n          var n = e.toString(),\n            r = n.indexOf(\".\");\n          if (-1 === r) return Math.round(t);\n          var i = n.substr(r + 1).length;\n          return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n        },\n        it = function (t) {\n          return c(t, \"Number\");\n        },\n        ot = function (t) {\n          return it(t) && t % 1 != 0;\n        },\n        at = function (t) {\n          return it(t) && t % 2 == 0;\n        },\n        st = Number.isInteger\n          ? Number.isInteger\n          : function (t) {\n              return it(t) && t % 1 == 0;\n            },\n        ct = function (t) {\n          return it(t) && t < 0;\n        };\n      function ut(t, e, n) {\n        return void 0 === n && (n = 1e-5), Math.abs(t - e) < n;\n      }\n      var ht = function (t) {\n          return it(t) && t % 2 != 0;\n        },\n        lt = function (t) {\n          return it(t) && t > 0;\n        },\n        ft = function (t, e) {\n          if (l(t)) {\n            for (var n, r = -1 / 0, i = 0; i < t.length; i++) {\n              var o = t[i],\n                a = u(e) ? e(o) : o[e];\n              a > r && ((n = o), (r = a));\n            }\n            return n;\n          }\n        },\n        dt = function (t, e) {\n          if (l(t)) {\n            for (var n, r = 1 / 0, i = 0; i < t.length; i++) {\n              var o = t[i],\n                a = u(e) ? e(o) : o[e];\n              a < r && ((n = o), (r = a));\n            }\n            return n;\n          }\n        },\n        pt = function (t, e) {\n          return ((t % e) + e) % e;\n        },\n        gt = 180 / Math.PI,\n        vt = function (t) {\n          return gt * t;\n        },\n        yt = parseInt,\n        mt = Math.PI / 180,\n        bt = function (t) {\n          return mt * t;\n        },\n        xt = p,\n        St = function (t, e) {\n          return t.hasOwnProperty(e);\n        },\n        wt = St,\n        Ot = Object.values\n          ? function (t) {\n              return Object.values(t);\n            }\n          : function (t) {\n              var e = [];\n              return (\n                p(t, function (n, r) {\n                  (u(t) && \"prototype\" === r) || e.push(n);\n                }),\n                e\n              );\n            },\n        Mt = function (t, e) {\n          return i(Ot(t), e);\n        },\n        kt = function (t) {\n          return h(t) ? \"\" : t.toString();\n        },\n        jt = function (t) {\n          return kt(t).toLowerCase();\n        },\n        Ct = function (t) {\n          var e = kt(t);\n          return e.charAt(0).toLowerCase() + e.substring(1);\n        };\n      var Et = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                return \"\\\\\" === t.charAt(0)\n                  ? t.slice(1)\n                  : void 0 === e[n]\n                  ? \"\"\n                  : e[n];\n              })\n            : t;\n        },\n        Pt = function (t) {\n          return kt(t).toUpperCase();\n        },\n        At = function (t) {\n          var e = kt(t);\n          return e.charAt(0).toUpperCase() + e.substring(1);\n        },\n        It = {}.toString,\n        Tt = function (t) {\n          return It.call(t)\n            .replace(/^\\[object /, \"\")\n            .replace(/]$/, \"\");\n        },\n        Nt = function (t) {\n          return c(t, \"Arguments\");\n        },\n        Bt = function (t) {\n          return c(t, \"Boolean\");\n        },\n        Lt = function (t) {\n          return c(t, \"Date\");\n        },\n        Dt = function (t) {\n          return c(t, \"Error\");\n        },\n        _t = function (t) {\n          return it(t) && isFinite(t);\n        },\n        Rt = function (t) {\n          return null === t;\n        },\n        Ft = Object.prototype,\n        Yt = function (t) {\n          var e = t && t.constructor;\n          return t === ((\"function\" == typeof e && e.prototype) || Ft);\n        },\n        Xt = function (t) {\n          return c(t, \"RegExp\");\n        },\n        zt = function (t) {\n          return void 0 === t;\n        },\n        Wt = function (t) {\n          return t instanceof Element || t instanceof HTMLDocument;\n        };\n      function qt(t) {\n        return (\n          window.requestAnimationFrame ||\n          window.webkitRequestAnimationFrame ||\n          window.mozRequestAnimationFrame ||\n          window.msRequestAnimationFrame ||\n          function (t) {\n            return setTimeout(t, 16);\n          }\n        )(t);\n      }\n      function Vt(t) {\n        (\n          window.cancelAnimationFrame ||\n          window.webkitCancelAnimationFrame ||\n          window.mozCancelAnimationFrame ||\n          window.msCancelAnimationFrame ||\n          clearTimeout\n        )(t);\n      }\n      function Gt(t, e) {\n        for (var n in e)\n          e.hasOwnProperty(n) &&\n            \"constructor\" !== n &&\n            void 0 !== e[n] &&\n            (t[n] = e[n]);\n      }\n      function Ht(t, e, n, r) {\n        return e && Gt(t, e), n && Gt(t, n), r && Gt(t, r), t;\n      }\n      var Ut = function () {\n        for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n        for (var n = t[0], r = 1; r < t.length; r++) {\n          var i = t[r];\n          u(i) && (i = i.prototype), Ht(n.prototype, i);\n        }\n      };\n      function Zt(t) {\n        return (Zt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Kt = function t(e) {\n        if (\"object\" !== Zt(e) || null === e) return e;\n        var n;\n        if (l(e)) {\n          n = [];\n          for (var r = 0, i = e.length; r < i; r++)\n            \"object\" === Zt(e[r]) && null != e[r]\n              ? (n[r] = t(e[r]))\n              : (n[r] = e[r]);\n        } else\n          for (var o in ((n = {}), e))\n            \"object\" === Zt(e[o]) && null != e[o]\n              ? (n[o] = t(e[o]))\n              : (n[o] = e[o]);\n        return n;\n      };\n      var $t = function (t, e, n) {\n          var r;\n          return function () {\n            var i = this,\n              o = arguments,\n              a = function () {\n                (r = null), n || t.apply(i, o);\n              },\n              s = n && !r;\n            clearTimeout(r), (r = setTimeout(a, e)), s && t.apply(i, o);\n          };\n        },\n        Qt = function (t, e) {\n          if (!u(t)) throw new TypeError(\"Expected a function\");\n          var n = function n() {\n            for (var r = [], i = 0; i < arguments.length; i++)\n              r[i] = arguments[i];\n            var o = e ? e.apply(this, r) : r[0],\n              a = n.cache;\n            if (a.has(o)) return a.get(o);\n            var s = t.apply(this, r);\n            return a.set(o, s), s;\n          };\n          return (n.cache = new Map()), n;\n        };\n      function Jt(t, e, n, r) {\n        for (var i in ((n = n || 0), (r = r || 5), e))\n          if (e.hasOwnProperty(i)) {\n            var o = e[i];\n            null !== o && b(o)\n              ? (b(t[i]) || (t[i] = {}),\n                n < r ? Jt(t[i], o, n + 1, r) : (t[i] = e[i]))\n              : l(o)\n              ? ((t[i] = []), (t[i] = t[i].concat(o)))\n              : void 0 !== o && (t[i] = o);\n          }\n      }\n      var te = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r += 1) Jt(t, e[r]);\n          return t;\n        },\n        ee = function (t, e, n, r) {\n          u(e) || ((n = e), (e = t), (t = function () {}));\n          var i = Object.create\n              ? function (t, e) {\n                  return Object.create(t, { constructor: { value: e } });\n                }\n              : function (t, e) {\n                  function n() {}\n                  n.prototype = t;\n                  var r = new n();\n                  return (r.constructor = e), r;\n                },\n            o = i(e.prototype, t);\n          return (\n            (t.prototype = Ht(o, t.prototype)),\n            (t.superclass = i(e.prototype, e)),\n            Ht(o, n),\n            Ht(t, r),\n            t\n          );\n        },\n        ne = function (t, e) {\n          if (!r(t)) return -1;\n          var n = Array.prototype.indexOf;\n          if (n) return n.call(t, e);\n          for (var i = -1, o = 0; o < t.length; o++)\n            if (t[o] === e) {\n              i = o;\n              break;\n            }\n          return i;\n        },\n        re = Object.prototype.hasOwnProperty;\n      var ie = function (t) {\n          if (h(t)) return !0;\n          if (r(t)) return !t.length;\n          var e = Tt(t);\n          if (\"Map\" === e || \"Set\" === e) return !t.size;\n          if (Yt(t)) return !Object.keys(t).length;\n          for (var n in t) if (re.call(t, n)) return !1;\n          return !0;\n        },\n        oe = function t(e, n) {\n          if (e === n) return !0;\n          if (!e || !n) return !1;\n          if (D(e) || D(n)) return !1;\n          if (r(e) || r(n)) {\n            if (e.length !== n.length) return !1;\n            for (var i = !0, o = 0; o < e.length && (i = t(e[o], n[o])); o++);\n            return i;\n          }\n          if (m(e) || m(n)) {\n            var a = Object.keys(e),\n              s = Object.keys(n);\n            if (a.length !== s.length) return !1;\n            for (i = !0, o = 0; o < a.length && (i = t(e[a[o]], n[a[o]])); o++);\n            return i;\n          }\n          return !1;\n        },\n        ae = function (t, e, n) {\n          return u(n) ? !!n(t, e) : oe(t, e);\n        },\n        se = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            n.push(e(o, i));\n          }\n          return n;\n        },\n        ce = function (t) {\n          return t;\n        },\n        ue = function (t, e) {\n          void 0 === e && (e = ce);\n          var n = {};\n          return (\n            d(t) &&\n              !h(t) &&\n              Object.keys(t).forEach(function (r) {\n                n[r] = e(t[r], r);\n              }),\n            n\n          );\n        },\n        he = function (t, e, n) {\n          for (var r = 0, i = D(e) ? e.split(\".\") : e; t && r < i.length; )\n            t = t[i[r++]];\n          return void 0 === t || r < i.length ? n : t;\n        },\n        le = function (t, e, n) {\n          var r = t,\n            i = D(e) ? e.split(\".\") : e;\n          return (\n            i.forEach(function (t, e) {\n              e < i.length - 1\n                ? (d(r[t]) || (r[t] = it(i[e + 1]) ? [] : {}), (r = r[t]))\n                : (r[t] = n);\n            }),\n            t\n          );\n        },\n        fe = Object.prototype.hasOwnProperty,\n        de = function (t, e) {\n          if (null === t || !b(t)) return {};\n          var n = {};\n          return (\n            p(e, function (e) {\n              fe.call(t, e) && (n[e] = t[e]);\n            }),\n            n\n          );\n        },\n        pe = function (t, e) {\n          return B(\n            t,\n            function (t, n, r) {\n              return e.includes(r) || (t[r] = n), t;\n            },\n            {},\n          );\n        },\n        ge = function (t, e, n) {\n          var r,\n            i,\n            o,\n            a,\n            s = 0;\n          n || (n = {});\n          var c = function () {\n              (s = !1 === n.leading ? 0 : Date.now()),\n                (r = null),\n                (a = t.apply(i, o)),\n                r || (i = o = null);\n            },\n            u = function () {\n              var u = Date.now();\n              s || !1 !== n.leading || (s = u);\n              var h = e - (u - s);\n              return (\n                (i = this),\n                (o = arguments),\n                h <= 0 || h > e\n                  ? (r && (clearTimeout(r), (r = null)),\n                    (s = u),\n                    (a = t.apply(i, o)),\n                    r || (i = o = null))\n                  : r || !1 === n.trailing || (r = setTimeout(c, h)),\n                a\n              );\n            };\n          return (\n            (u.cancel = function () {\n              clearTimeout(r), (s = 0), (r = i = o = null);\n            }),\n            u\n          );\n        },\n        ve = function (t) {\n          return r(t) ? Array.prototype.slice.call(t) : [];\n        },\n        ye = {},\n        me = function (t) {\n          return ye[(t = t || \"g\")] ? (ye[t] += 1) : (ye[t] = 1), t + ye[t];\n        },\n        be = function () {},\n        xe = function (t) {\n          return t;\n        };\n      function Se(t) {\n        return h(t) ? 0 : r(t) ? t.length : Object.keys(t).length;\n      }\n      var we,\n        Oe = n(1),\n        Me = Qt(\n          function (t, e) {\n            void 0 === e && (e = {});\n            var n = e.fontSize,\n              r = e.fontFamily,\n              i = e.fontWeight,\n              o = e.fontStyle,\n              a = e.fontVariant;\n            return (\n              we || (we = document.createElement(\"canvas\").getContext(\"2d\")),\n              (we.font = [o, a, i, n + \"px\", r].join(\" \")),\n              we.measureText(D(t) ? t : \"\").width\n            );\n          },\n          function (t, e) {\n            return void 0 === e && (e = {}), Object(Oe.g)([t], Ot(e)).join(\"\");\n          },\n        ),\n        ke = function (t, e, n, r) {\n          void 0 === r && (r = \"...\");\n          var i,\n            o,\n            a = Me(r, n),\n            s = D(t) ? t : kt(t),\n            c = e,\n            u = [];\n          if (Me(t, n) <= e) return t;\n          for (; (i = s.substr(0, 16)), !((o = Me(i, n)) + a > c && o > c); )\n            if ((u.push(i), (c -= o), !(s = s.substr(16)))) return u.join(\"\");\n          for (; (i = s.substr(0, 1)), !((o = Me(i, n)) + a > c); )\n            if ((u.push(i), (c -= o), !(s = s.substr(1)))) return u.join(\"\");\n          return \"\" + u.join(\"\") + r;\n        },\n        je = (function () {\n          function t() {\n            this.map = {};\n          }\n          return (\n            (t.prototype.has = function (t) {\n              return void 0 !== this.map[t];\n            }),\n            (t.prototype.get = function (t, e) {\n              var n = this.map[t];\n              return void 0 === n ? e : n;\n            }),\n            (t.prototype.set = function (t, e) {\n              this.map[t] = e;\n            }),\n            (t.prototype.clear = function () {\n              this.map = {};\n            }),\n            (t.prototype.delete = function (t) {\n              delete this.map[t];\n            }),\n            (t.prototype.size = function () {\n              return Object.keys(this.map).length;\n            }),\n            t\n          );\n        })();\n    },\n    1: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return i;\n      }),\n        n.d(e, \"a\", function () {\n          return o;\n        }),\n        n.d(e, \"e\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        }),\n        n.d(e, \"d\", function () {\n          return c;\n        }),\n        n.d(e, \"g\", function () {\n          return u;\n        }),\n        n.d(e, \"f\", function () {\n          return h;\n        });\n      var r = function (t, e) {\n        return (r =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, e) {\n              t.__proto__ = e;\n            }) ||\n          function (t, e) {\n            for (var n in e)\n              Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n          })(t, e);\n      };\n      function i(t, e) {\n        if (\"function\" != typeof e && null !== e)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(e) +\n              \" is not a constructor or null\",\n          );\n        function n() {\n          this.constructor = t;\n        }\n        r(t, e),\n          (t.prototype =\n            null === e\n              ? Object.create(e)\n              : ((n.prototype = e.prototype), new n()));\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function a(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      function s(t, e, n, r) {\n        return new (n || (n = Promise))(function (i, o) {\n          function a(t) {\n            try {\n              c(r.next(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function s(t) {\n            try {\n              c(r.throw(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function c(t) {\n            var e;\n            t.done\n              ? i(t.value)\n              : ((e = t.value),\n                e instanceof n\n                  ? e\n                  : new n(function (t) {\n                      t(e);\n                    })).then(a, s);\n          }\n          c((r = r.apply(t, e || [])).next());\n        });\n      }\n      function c(t, e) {\n        var n,\n          r,\n          i,\n          o,\n          a = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (o = { next: s(0), throw: s(1), return: s(2) }),\n          \"function\" == typeof Symbol &&\n            (o[Symbol.iterator] = function () {\n              return this;\n            }),\n          o\n        );\n        function s(s) {\n          return function (c) {\n            return (function (s) {\n              if (n) throw new TypeError(\"Generator is already executing.\");\n              for (; o && ((o = 0), s[0] && (a = 0)), a; )\n                try {\n                  if (\n                    ((n = 1),\n                    r &&\n                      (i =\n                        2 & s[0]\n                          ? r.return\n                          : s[0]\n                          ? r.throw || ((i = r.return) && i.call(r), 0)\n                          : r.next) &&\n                      !(i = i.call(r, s[1])).done)\n                  )\n                    return i;\n                  switch (((r = 0), i && (s = [2 & s[0], i.value]), s[0])) {\n                    case 0:\n                    case 1:\n                      i = s;\n                      break;\n                    case 4:\n                      return a.label++, { value: s[1], done: !1 };\n                    case 5:\n                      a.label++, (r = s[1]), (s = [0]);\n                      continue;\n                    case 7:\n                      (s = a.ops.pop()), a.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = a.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== s[0] && 2 !== s[0]))\n                      ) {\n                        a = 0;\n                        continue;\n                      }\n                      if (3 === s[0] && (!i || (s[1] > i[0] && s[1] < i[3]))) {\n                        a.label = s[1];\n                        break;\n                      }\n                      if (6 === s[0] && a.label < i[1]) {\n                        (a.label = i[1]), (i = s);\n                        break;\n                      }\n                      if (i && a.label < i[2]) {\n                        (a.label = i[2]), a.ops.push(s);\n                        break;\n                      }\n                      i[2] && a.ops.pop(), a.trys.pop();\n                      continue;\n                  }\n                  s = e.call(t, a);\n                } catch (t) {\n                  (s = [6, t]), (r = 0);\n                } finally {\n                  n = i = 0;\n                }\n              if (5 & s[0]) throw s[1];\n              return { value: s[0] ? s[1] : void 0, done: !0 };\n            })([s, c]);\n          };\n        }\n      }\n      Object.create;\n      function u() {\n        for (var t = 0, e = 0, n = arguments.length; e < n; e++)\n          t += arguments[e].length;\n        var r = Array(t),\n          i = 0;\n        for (e = 0; e < n; e++)\n          for (var o = arguments[e], a = 0, s = o.length; a < s; a++, i++)\n            r[i] = o[a];\n        return r;\n      }\n      function h(t, e, n) {\n        if (n || 2 === arguments.length)\n          for (var r, i = 0, o = e.length; i < o; i++)\n            (!r && i in e) ||\n              (r || (r = Array.prototype.slice.call(e, 0, i)), (r[i] = e[i]));\n        return t.concat(r || Array.prototype.slice.call(e));\n      }\n      Object.create;\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(8),\n        o = n(3),\n        a = n(12),\n        s = n(31),\n        c = n(52),\n        u = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(r.a)(Object(r.a)({}, e), {\n                lineWidth: 1,\n                lineAppendWidth: 0,\n                strokeOpacity: 1,\n                fillOpacity: 1,\n              });\n            }),\n            (e.prototype.getShapeBase = function () {\n              return s;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return c.a;\n            }),\n            (e.prototype.onCanvasChange = function (t) {\n              Object(a.h)(this, t);\n            }),\n            (e.prototype.calculateBBox = function () {\n              var t = this.get(\"type\"),\n                e = this.getHitLineWidth(),\n                n = Object(i.getBBoxMethod)(t)(this),\n                r = e / 2,\n                o = n.x - r,\n                a = n.y - r,\n                s = n.x + n.width + r,\n                c = n.y + n.height + r;\n              return {\n                x: o,\n                minX: o,\n                y: a,\n                minY: a,\n                width: n.width + e,\n                height: n.height + e,\n                maxX: s,\n                maxY: c,\n              };\n            }),\n            (e.prototype.isFill = function () {\n              return !!this.attrs.fill || this.isClipShape();\n            }),\n            (e.prototype.isStroke = function () {\n              return !!this.attrs.stroke;\n            }),\n            (e.prototype._applyClip = function (t, e) {\n              e &&\n                (t.save(),\n                Object(a.a)(t, e),\n                e.createPath(t),\n                t.restore(),\n                t.clip(),\n                e._afterDraw());\n            }),\n            (e.prototype.draw = function (t, e) {\n              var n = this.cfg.clipShape;\n              if (e) {\n                if (!1 === this.cfg.refresh)\n                  return void this.set(\"hasChanged\", !1);\n                var r = this.getCanvasBBox();\n                if (!Object(o.e)(e, r))\n                  return (\n                    this.set(\"hasChanged\", !1),\n                    void (this.cfg.isInView && this._afterDraw())\n                  );\n              }\n              t.save(),\n                Object(a.a)(t, this),\n                this._applyClip(t, n),\n                this.drawPath(t),\n                t.restore(),\n                this._afterDraw();\n            }),\n            (e.prototype.getCanvasViewBox = function () {\n              var t = this.cfg.canvas;\n              return t ? t.getViewRange() : null;\n            }),\n            (e.prototype.cacheCanvasBBox = function () {\n              var t = this.getCanvasViewBox();\n              if (t) {\n                var e = this.getCanvasBBox(),\n                  n = Object(o.e)(e, t);\n                this.set(\"isInView\", n),\n                  n\n                    ? this.set(\"cacheCanvasBBox\", e)\n                    : this.set(\"cacheCanvasBBox\", null);\n              }\n            }),\n            (e.prototype._afterDraw = function () {\n              this.cacheCanvasBBox(),\n                this.set(\"hasChanged\", !1),\n                this.set(\"refresh\", null);\n            }),\n            (e.prototype.skipDraw = function () {\n              this.set(\"cacheCanvasBBox\", null),\n                this.set(\"isInView\", null),\n                this.set(\"hasChanged\", !1);\n            }),\n            (e.prototype.drawPath = function (t) {\n              this.createPath(t), this.strokeAndFill(t), this.afterDrawPath(t);\n            }),\n            (e.prototype.fill = function (t) {\n              t.fill();\n            }),\n            (e.prototype.stroke = function (t) {\n              t.stroke();\n            }),\n            (e.prototype.strokeAndFill = function (t) {\n              var e = this.attrs,\n                n = e.lineWidth,\n                r = e.opacity,\n                i = e.strokeOpacity,\n                a = e.fillOpacity;\n              this.isFill() &&\n                (Object(o.h)(a) || 1 === a\n                  ? this.fill(t)\n                  : ((t.globalAlpha = a), this.fill(t), (t.globalAlpha = r))),\n                this.isStroke() &&\n                  n > 0 &&\n                  (Object(o.h)(i) || 1 === i || (t.globalAlpha = i),\n                  this.stroke(t)),\n                this.afterDrawPath(t);\n            }),\n            (e.prototype.createPath = function (t) {}),\n            (e.prototype.afterDrawPath = function (t) {}),\n            (e.prototype.isInShape = function (t, e) {\n              var n = this.isStroke(),\n                r = this.isFill(),\n                i = this.getHitLineWidth();\n              return this.isInStrokeOrPath(t, e, n, r, i);\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              return !1;\n            }),\n            (e.prototype.getHitLineWidth = function () {\n              if (!this.isStroke()) return 0;\n              var t = this.attrs;\n              return t.lineWidth + t.lineAppendWidth;\n            }),\n            e\n          );\n        })(i.AbstractShape);\n      e.a = u;\n    },\n    118: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return o;\n      }),\n        n.d(e, \"b\", function () {\n          return i;\n        });\n      var r = new Map();\n      function i(t, e) {\n        r.set(t, e);\n      }\n      function o(t) {\n        return r.get(t);\n      }\n      var a = function (t) {\n          var e = t.attr();\n          return { x: e.x, y: e.y, width: e.width, height: e.height };\n        },\n        s = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.r;\n          return { x: n - i, y: r - i, width: 2 * i, height: 2 * i };\n        },\n        c = n(9);\n      function u(t, e) {\n        return t && e\n          ? {\n              minX: Math.min(t.minX, e.minX),\n              minY: Math.min(t.minY, e.minY),\n              maxX: Math.max(t.maxX, e.maxX),\n              maxY: Math.max(t.maxY, e.maxY),\n            }\n          : t || e;\n      }\n      function h(t, e) {\n        var n = t.get(\"startArrowShape\"),\n          r = t.get(\"endArrowShape\");\n        return (\n          n && (e = u(e, n.getCanvasBBox())),\n          r && (e = u(e, r.getCanvasBBox())),\n          e\n        );\n      }\n      var l = n(46),\n        f = n(28),\n        d = n(0);\n      function p(t, e) {\n        var n = t.prePoint,\n          r = t.currentPoint,\n          i = t.nextPoint,\n          o = Math.pow(r[0] - n[0], 2) + Math.pow(r[1] - n[1], 2),\n          a = Math.pow(r[0] - i[0], 2) + Math.pow(r[1] - i[1], 2),\n          s = Math.pow(n[0] - i[0], 2) + Math.pow(n[1] - i[1], 2),\n          c = Math.acos((o + a - s) / (2 * Math.sqrt(o) * Math.sqrt(a)));\n        if (!c || 0 === Math.sin(c) || Object(d.isNumberEqual)(c, 0))\n          return { xExtra: 0, yExtra: 0 };\n        var u = Math.abs(Math.atan2(i[1] - r[1], i[0] - r[0])),\n          h = Math.abs(Math.atan2(i[0] - r[0], i[1] - r[1]));\n        return (\n          (u = u > Math.PI / 2 ? Math.PI - u : u),\n          (h = h > Math.PI / 2 ? Math.PI - h : h),\n          {\n            xExtra:\n              Math.cos(c / 2 - u) * ((e / 2) * (1 / Math.sin(c / 2))) - e / 2 ||\n              0,\n            yExtra:\n              Math.cos(h - c / 2) * ((e / 2) * (1 / Math.sin(c / 2))) - e / 2 ||\n              0,\n          }\n        );\n      }\n      i(\"rect\", a),\n        i(\"image\", a),\n        i(\"circle\", s),\n        i(\"marker\", s),\n        i(\"polyline\", function (t) {\n          for (\n            var e = t.attr().points, n = [], r = [], i = 0;\n            i < e.length;\n            i++\n          ) {\n            var o = e[i];\n            n.push(o[0]), r.push(o[1]);\n          }\n          var a = c.f.getBBoxByArray(n, r),\n            s = a.x,\n            u = a.y,\n            l = { minX: s, minY: u, maxX: s + a.width, maxY: u + a.height };\n          return {\n            x: (l = h(t, l)).minX,\n            y: l.minY,\n            width: l.maxX - l.minX,\n            height: l.maxY - l.minY,\n          };\n        }),\n        i(\"polygon\", function (t) {\n          for (\n            var e = t.attr().points, n = [], r = [], i = 0;\n            i < e.length;\n            i++\n          ) {\n            var o = e[i];\n            n.push(o[0]), r.push(o[1]);\n          }\n          return c.f.getBBoxByArray(n, r);\n        }),\n        i(\"text\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            a = e.lineHeight,\n            s = e.font;\n          s || (s = Object(l.a)(e));\n          var c,\n            u = Object(l.c)(i, s);\n          if (u) {\n            var h = e.textAlign,\n              f = e.textBaseline,\n              d = Object(l.b)(i, o, a),\n              p = { x: n, y: r - d };\n            h &&\n              (\"end\" === h || \"right\" === h\n                ? (p.x -= u)\n                : \"center\" === h && (p.x -= u / 2)),\n              f &&\n                (\"top\" === f ? (p.y += d) : \"middle\" === f && (p.y += d / 2)),\n              (c = { x: p.x, y: p.y, width: u, height: d });\n          } else c = { x: n, y: r, width: 0, height: 0 };\n          return c;\n        }),\n        i(\"path\", function (t) {\n          var e = t.attr(),\n            n = e.path,\n            r = e.stroke ? e.lineWidth : 0,\n            i = (function (t, e) {\n              for (var n = [], r = [], i = [], o = 0; o < t.length; o++) {\n                var a = (m = t[o]).currentPoint,\n                  s = m.params,\n                  u = m.prePoint,\n                  h = void 0;\n                switch (m.command) {\n                  case \"Q\":\n                    h = c.e.box(u[0], u[1], s[1], s[2], s[3], s[4]);\n                    break;\n                  case \"C\":\n                    h = c.b.box(u[0], u[1], s[1], s[2], s[3], s[4], s[5], s[6]);\n                    break;\n                  case \"A\":\n                    var l = m.arcParams;\n                    h = c.a.box(\n                      l.cx,\n                      l.cy,\n                      l.rx,\n                      l.ry,\n                      l.xRotation,\n                      l.startAngle,\n                      l.endAngle,\n                    );\n                    break;\n                  default:\n                    n.push(a[0]), r.push(a[1]);\n                }\n                h &&\n                  ((m.box = h),\n                  n.push(h.x, h.x + h.width),\n                  r.push(h.y, h.y + h.height)),\n                  e &&\n                    (\"L\" === m.command || \"M\" === m.command) &&\n                    m.prePoint &&\n                    m.nextPoint &&\n                    i.push(m);\n              }\n              (n = n.filter(function (t) {\n                return !Number.isNaN(t) && t !== 1 / 0 && t !== -1 / 0;\n              })),\n                (r = r.filter(function (t) {\n                  return !Number.isNaN(t) && t !== 1 / 0 && t !== -1 / 0;\n                }));\n              var f = Object(d.min)(n),\n                g = Object(d.min)(r),\n                v = Object(d.max)(n),\n                y = Object(d.max)(r);\n              if (0 === i.length)\n                return { x: f, y: g, width: v - f, height: y - g };\n              for (o = 0; o < i.length; o++) {\n                var m;\n                (a = (m = i[o]).currentPoint)[0] === f\n                  ? (f -= p(m, e).xExtra)\n                  : a[0] === v && (v += p(m, e).xExtra),\n                  a[1] === g\n                    ? (g -= p(m, e).yExtra)\n                    : a[1] === y && (y += p(m, e).yExtra);\n              }\n              return { x: f, y: g, width: v - f, height: y - g };\n            })(t.get(\"segments\") || Object(f.d)(n), r),\n            o = i.x,\n            a = i.y,\n            s = { minX: o, minY: a, maxX: o + i.width, maxY: a + i.height };\n          return {\n            x: (s = h(t, s)).minX,\n            y: s.minY,\n            width: s.maxX - s.minX,\n            height: s.maxY - s.minY,\n          };\n        }),\n        i(\"line\", function (t) {\n          var e = t.attr(),\n            n = e.x1,\n            r = e.y1,\n            i = e.x2,\n            o = e.y2,\n            a = {\n              minX: Math.min(n, i),\n              maxX: Math.max(n, i),\n              minY: Math.min(r, o),\n              maxY: Math.max(r, o),\n            };\n          return {\n            x: (a = h(t, a)).minX,\n            y: a.minY,\n            width: a.maxX - a.minX,\n            height: a.maxY - a.minY,\n          };\n        }),\n        i(\"ellipse\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.rx,\n            o = e.ry;\n          return { x: n - i, y: r - o, width: 2 * i, height: 2 * o };\n        });\n    },\n    119: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(2),\n        o = (n(8), n(35)),\n        a = n(96),\n        s = n(33),\n        c = n(22),\n        u = n(41),\n        h =\n          (n(423),\n          n(424),\n          n(127),\n          n(128),\n          {\n            version: c.a.version,\n            Graph: a.a,\n            Util: u.a,\n            Layout: s.a,\n            Layouts: s.b,\n            registerLayout: s.c,\n            unRegisterLayout: s.d,\n            Global: c.a,\n            registerBehavior: i.i,\n            registerCombo: i.j,\n            registerEdge: i.k,\n            registerNode: i.l,\n            Algorithm: o,\n            Arrow: i.d,\n            Marker: i.f,\n            Shape: i.g,\n          });\n      var l,\n        f =\n          ((l = a.b),\n          function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            return l.apply(null, Object(r.g)(t, [h]));\n          });\n      (h.registerGraph = f), (e.default = h);\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return u;\n      }),\n        n.d(e, \"d\", function () {\n          return h;\n        }),\n        n.d(e, \"b\", function () {\n          return l;\n        }),\n        n.d(e, \"c\", function () {\n          return f;\n        }),\n        n.d(e, \"e\", function () {\n          return g;\n        }),\n        n.d(e, \"h\", function () {\n          return v;\n        }),\n        n.d(e, \"f\", function () {\n          return y;\n        }),\n        n.d(e, \"g\", function () {\n          return m;\n        });\n      var r = n(0),\n        i = n(94),\n        o = n(63),\n        a = n(3),\n        s = n(23),\n        c = {\n          fill: \"fillStyle\",\n          stroke: \"strokeStyle\",\n          opacity: \"globalAlpha\",\n        };\n      function u(t, e) {\n        var n = e.attr();\n        for (var o in n) {\n          var a = n[o],\n            s = c[o] ? c[o] : o;\n          \"matrix\" === s && a\n            ? t.transform(a[0], a[1], a[3], a[4], a[6], a[7])\n            : \"lineDash\" === s && t.setLineDash\n            ? Object(r.isArray)(a) && t.setLineDash(a)\n            : (\"strokeStyle\" === s || \"fillStyle\" === s\n                ? (a = Object(i.b)(t, e, a))\n                : \"globalAlpha\" === s && (a *= t.globalAlpha),\n              (t[s] = a));\n        }\n      }\n      function h(t, e, n) {\n        for (var r = 0; r < e.length; r++) {\n          var i = e[r];\n          i.cfg.visible ? i.draw(t, n) : i.skipDraw();\n        }\n      }\n      function l(t, e, n) {\n        var i = t.get(\"refreshElements\");\n        Object(r.each)(i, function (e) {\n          if (e !== t)\n            for (var n = e.cfg.parent; n && n !== t && !n.cfg.refresh; )\n              (n.cfg.refresh = !0), (n = n.cfg.parent);\n        }),\n          i[0] === t\n            ? d(e, n)\n            : (function t(e, n) {\n                for (var r = 0; r < e.length; r++) {\n                  var i = e[r];\n                  if (i.cfg.visible)\n                    if (i.cfg.hasChanged)\n                      (i.cfg.refresh = !0), i.isGroup() && d(i.cfg.children, n);\n                    else if (i.cfg.refresh) i.isGroup() && t(i.cfg.children, n);\n                    else {\n                      var o = p(i, n);\n                      (i.cfg.refresh = o),\n                        o && i.isGroup() && t(i.cfg.children, n);\n                    }\n                }\n              })(e, n);\n      }\n      function f(t) {\n        for (var e = 0; e < t.length; e++) {\n          var n = t[e];\n          (n.cfg.hasChanged = !1),\n            n.isGroup() && !n.destroyed && f(n.cfg.children);\n        }\n      }\n      function d(t, e) {\n        for (var n = 0; n < t.length; n++) {\n          var r = t[n];\n          (r.cfg.refresh = !0), r.isGroup() && d(r.get(\"children\"), e);\n        }\n      }\n      function p(t, e) {\n        var n = t.cfg.cacheCanvasBBox;\n        return t.cfg.isInView && n && Object(a.e)(n, e);\n      }\n      function g(t, e, n, r) {\n        var i = n.path,\n          a = n.startArrow,\n          c = n.endArrow;\n        if (i) {\n          var u = [0, 0],\n            h = [0, 0],\n            l = { dx: 0, dy: 0 };\n          e.beginPath();\n          for (var f = 0; f < i.length; f++) {\n            var d = i[f],\n              p = d[0];\n            if (0 === f && a && a.d) {\n              var g = t.getStartTangent();\n              l = s.c(g[0][0], g[0][1], g[1][0], g[1][1], a.d);\n            } else if (f === i.length - 2 && \"Z\" === i[f + 1][0] && c && c.d) {\n              if (\"Z\" === i[f + 1][0]) {\n                g = t.getEndTangent();\n                l = s.c(g[0][0], g[0][1], g[1][0], g[1][1], c.d);\n              }\n            } else if (f === i.length - 1 && c && c.d && \"Z\" !== i[0]) {\n              g = t.getEndTangent();\n              l = s.c(g[0][0], g[0][1], g[1][0], g[1][1], c.d);\n            }\n            var v = l.dx,\n              y = l.dy;\n            switch (p) {\n              case \"M\":\n                e.moveTo(d[1] - v, d[2] - y), (h = [d[1], d[2]]);\n                break;\n              case \"L\":\n                e.lineTo(d[1] - v, d[2] - y);\n                break;\n              case \"Q\":\n                e.quadraticCurveTo(d[1], d[2], d[3] - v, d[4] - y);\n                break;\n              case \"C\":\n                e.bezierCurveTo(d[1], d[2], d[3], d[4], d[5] - v, d[6] - y);\n                break;\n              case \"A\":\n                var m = void 0;\n                r\n                  ? (m = r[f]) || ((m = Object(o.a)(u, d)), (r[f] = m))\n                  : (m = Object(o.a)(u, d));\n                var b = m.cx,\n                  x = m.cy,\n                  S = m.rx,\n                  w = m.ry,\n                  O = m.startAngle,\n                  M = m.endAngle,\n                  k = m.xRotation,\n                  j = m.sweepFlag;\n                if (e.ellipse) e.ellipse(b, x, S, w, k, O, M, 1 - j);\n                else {\n                  var C = S > w ? S : w,\n                    E = S > w ? 1 : S / w,\n                    P = S > w ? w / S : 1;\n                  e.translate(b, x),\n                    e.rotate(k),\n                    e.scale(E, P),\n                    e.arc(0, 0, C, O, M, 1 - j),\n                    e.scale(1 / E, 1 / P),\n                    e.rotate(-k),\n                    e.translate(-b, -x);\n                }\n                break;\n              case \"Z\":\n                e.closePath();\n            }\n            if (\"Z\" === p) u = h;\n            else {\n              var A = d.length;\n              u = [d[A - 2], d[A - 1]];\n            }\n          }\n        }\n      }\n      function v(t, e) {\n        var n = t.get(\"canvas\");\n        n &&\n          (\"remove\" === e && (t._cacheCanvasBBox = t.get(\"cacheCanvasBBox\")),\n          t.get(\"hasChanged\") ||\n            (t.set(\"hasChanged\", !0),\n            (t.cfg.parent && t.cfg.parent.get(\"hasChanged\")) ||\n              (n.refreshElement(t, e, n), n.get(\"autoDraw\") && n.draw())));\n      }\n      function y(t) {\n        if (!t.length) return null;\n        var e = [],\n          n = [],\n          i = [],\n          o = [];\n        return (\n          Object(r.each)(t, function (t) {\n            var r = (function (t) {\n              var e;\n              if (t.destroyed) e = t._cacheCanvasBBox;\n              else {\n                var n = t.get(\"cacheCanvasBBox\"),\n                  r = n && !(!n.width || !n.height),\n                  i = t.getCanvasBBox(),\n                  o = i && !(!i.width || !i.height);\n                r && o ? (e = Object(a.l)(n, i)) : r ? (e = n) : o && (e = i);\n              }\n              return e;\n            })(t);\n            r &&\n              (e.push(r.minX), n.push(r.minY), i.push(r.maxX), o.push(r.maxY));\n          }),\n          {\n            minX: Math.min.apply(null, e),\n            minY: Math.min.apply(null, n),\n            maxX: Math.max.apply(null, i),\n            maxY: Math.max.apply(null, o),\n          }\n        );\n      }\n      function m(t, e) {\n        return t && e && Object(a.e)(t, e)\n          ? {\n              minX: Math.max(t.minX, e.minX),\n              minY: Math.max(t.minY, e.minY),\n              maxX: Math.min(t.maxX, e.maxX),\n              maxY: Math.min(t.maxY, e.maxY),\n            }\n          : null;\n      }\n    },\n    120: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.assembleFont =\n          e.getTextWidth =\n          e.getLineSpaceing =\n          e.getTextHeight =\n            void 0);\n      var r = n(207),\n        i = n(208);\n      function o(t, e) {\n        return e ? e - t : 0.14 * t;\n      }\n      (e.getTextHeight = function (t, e, n) {\n        var i = 1;\n        return (\n          r.isString(t) && (i = t.split(\"\\n\").length),\n          i > 1 ? e * i + o(e, n) * (i - 1) : e\n        );\n      }),\n        (e.getLineSpaceing = o),\n        (e.getTextWidth = function (t, e) {\n          var n = i.getOffScreenContext(),\n            o = 0;\n          if (r.isNil(t) || \"\" === t) return o;\n          if ((n.save(), (n.font = e), r.isString(t) && t.includes(\"\\n\"))) {\n            var a = t.split(\"\\n\");\n            r.each(a, function (t) {\n              var e = n.measureText(t).width;\n              o < e && (o = e);\n            });\n          } else o = n.measureText(t).width;\n          return n.restore(), o;\n        }),\n        (e.assembleFont = function (t) {\n          var e = t.fontSize,\n            n = t.fontFamily,\n            r = t.fontWeight;\n          return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n        });\n    },\n    122: function (t, e) {},\n    123: function (t, e) {},\n    124: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.isGroup = function () {\n              return !0;\n            }),\n            (e.prototype.isEntityGroup = function () {\n              return !1;\n            }),\n            (e.prototype.clone = function () {\n              for (\n                var e = t.prototype.clone.call(this),\n                  n = this.getChildren(),\n                  r = 0;\n                r < n.length;\n                r++\n              ) {\n                var i = n[r];\n                e.add(i.clone());\n              }\n              return e;\n            }),\n            e\n          );\n        })(n(92).a);\n      e.a = i;\n    },\n    125: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(93),\n        o = n(25),\n        a = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype._isInBBox = function (t, e) {\n              var n = this.getBBox();\n              return n.minX <= t && n.maxX >= t && n.minY <= e && n.maxY >= e;\n            }),\n            (e.prototype.afterAttrsChange = function (e) {\n              t.prototype.afterAttrsChange.call(this, e), this.clearCacheBBox();\n            }),\n            (e.prototype.getBBox = function () {\n              var t = this.cfg.bbox;\n              return t || ((t = this.calculateBBox()), this.set(\"bbox\", t)), t;\n            }),\n            (e.prototype.getCanvasBBox = function () {\n              var t = this.cfg.canvasBBox;\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()), this.set(\"canvasBBox\", t)),\n                t\n              );\n            }),\n            (e.prototype.applyMatrix = function (e) {\n              t.prototype.applyMatrix.call(this, e),\n                this.set(\"canvasBBox\", null);\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              var t = this.getBBox(),\n                e = this.getTotalMatrix(),\n                n = t.minX,\n                r = t.minY,\n                i = t.maxX,\n                a = t.maxY;\n              if (e) {\n                var s = Object(o.c)(e, [t.minX, t.minY]),\n                  c = Object(o.c)(e, [t.maxX, t.minY]),\n                  u = Object(o.c)(e, [t.minX, t.maxY]),\n                  h = Object(o.c)(e, [t.maxX, t.maxY]);\n                (n = Math.min(s[0], c[0], u[0], h[0])),\n                  (i = Math.max(s[0], c[0], u[0], h[0])),\n                  (r = Math.min(s[1], c[1], u[1], h[1])),\n                  (a = Math.max(s[1], c[1], u[1], h[1]));\n              }\n              var l = this.attrs;\n              if (l.shadowColor) {\n                var f = l.shadowBlur,\n                  d = void 0 === f ? 0 : f,\n                  p = l.shadowOffsetX,\n                  g = void 0 === p ? 0 : p,\n                  v = l.shadowOffsetY,\n                  y = void 0 === v ? 0 : v,\n                  m = n - d + g,\n                  b = i + d + g,\n                  x = r - d + y,\n                  S = a + d + y;\n                (n = Math.min(n, m)),\n                  (i = Math.max(i, b)),\n                  (r = Math.min(r, x)),\n                  (a = Math.max(a, S));\n              }\n              return {\n                x: n,\n                y: r,\n                minX: n,\n                minY: r,\n                maxX: i,\n                maxY: a,\n                width: i - n,\n                height: a - r,\n              };\n            }),\n            (e.prototype.clearCacheBBox = function () {\n              this.set(\"bbox\", null), this.set(\"canvasBBox\", null);\n            }),\n            (e.prototype.isClipShape = function () {\n              return this.get(\"isClipShape\");\n            }),\n            (e.prototype.isInShape = function (t, e) {\n              return !1;\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !1;\n            }),\n            (e.prototype.isHit = function (t, e) {\n              var n = this.get(\"startArrowShape\"),\n                r = this.get(\"endArrowShape\"),\n                i = [t, e, 1],\n                o = (i = this.invertFromMatrix(i))[0],\n                a = i[1],\n                s = this._isInBBox(o, a);\n              if (this.isOnlyHitBox()) return s;\n              if (s && !this.isClipped(o, a)) {\n                if (this.isInShape(o, a)) return !0;\n                if (n && n.isHit(o, a)) return !0;\n                if (r && r.isHit(o, a)) return !0;\n              }\n              return !1;\n            }),\n            e\n          );\n        })(i.a);\n      e.a = a;\n    },\n    126: function (t, e, n) {\n      \"use strict\";\n      var r = n(214),\n        i = {};\n      for (var o in r) r.hasOwnProperty(o) && (i[r[o]] = o);\n      var a = (t.exports = {\n        rgb: { channels: 3, labels: \"rgb\" },\n        hsl: { channels: 3, labels: \"hsl\" },\n        hsv: { channels: 3, labels: \"hsv\" },\n        hwb: { channels: 3, labels: \"hwb\" },\n        cmyk: { channels: 4, labels: \"cmyk\" },\n        xyz: { channels: 3, labels: \"xyz\" },\n        lab: { channels: 3, labels: \"lab\" },\n        lch: { channels: 3, labels: \"lch\" },\n        hex: { channels: 1, labels: [\"hex\"] },\n        keyword: { channels: 1, labels: [\"keyword\"] },\n        ansi16: { channels: 1, labels: [\"ansi16\"] },\n        ansi256: { channels: 1, labels: [\"ansi256\"] },\n        hcg: { channels: 3, labels: [\"h\", \"c\", \"g\"] },\n        apple: { channels: 3, labels: [\"r16\", \"g16\", \"b16\"] },\n        gray: { channels: 1, labels: [\"gray\"] },\n      });\n      for (var s in a)\n        if (a.hasOwnProperty(s)) {\n          if (!(\"channels\" in a[s]))\n            throw new Error(\"missing channels property: \" + s);\n          if (!(\"labels\" in a[s]))\n            throw new Error(\"missing channel labels property: \" + s);\n          if (a[s].labels.length !== a[s].channels)\n            throw new Error(\"channel and label counts mismatch: \" + s);\n          var c = a[s].channels,\n            u = a[s].labels;\n          delete a[s].channels,\n            delete a[s].labels,\n            Object.defineProperty(a[s], \"channels\", { value: c }),\n            Object.defineProperty(a[s], \"labels\", { value: u });\n        }\n      function h(t, e) {\n        return (\n          Math.pow(t[0] - e[0], 2) +\n          Math.pow(t[1] - e[1], 2) +\n          Math.pow(t[2] - e[2], 2)\n        );\n      }\n      (a.rgb.hsl = function (t) {\n        var e,\n          n,\n          r = t[0] / 255,\n          i = t[1] / 255,\n          o = t[2] / 255,\n          a = Math.min(r, i, o),\n          s = Math.max(r, i, o),\n          c = s - a;\n        return (\n          s === a\n            ? (e = 0)\n            : r === s\n            ? (e = (i - o) / c)\n            : i === s\n            ? (e = 2 + (o - r) / c)\n            : o === s && (e = 4 + (r - i) / c),\n          (e = Math.min(60 * e, 360)) < 0 && (e += 360),\n          (n = (a + s) / 2),\n          [\n            e,\n            100 * (s === a ? 0 : n <= 0.5 ? c / (s + a) : c / (2 - s - a)),\n            100 * n,\n          ]\n        );\n      }),\n        (a.rgb.hsv = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a = t[0] / 255,\n            s = t[1] / 255,\n            c = t[2] / 255,\n            u = Math.max(a, s, c),\n            h = u - Math.min(a, s, c),\n            l = function (t) {\n              return (u - t) / 6 / h + 0.5;\n            };\n          return (\n            0 === h\n              ? (i = o = 0)\n              : ((o = h / u),\n                (e = l(a)),\n                (n = l(s)),\n                (r = l(c)),\n                a === u\n                  ? (i = r - n)\n                  : s === u\n                  ? (i = 1 / 3 + e - r)\n                  : c === u && (i = 2 / 3 + n - e),\n                i < 0 ? (i += 1) : i > 1 && (i -= 1)),\n            [360 * i, 100 * o, 100 * u]\n          );\n        }),\n        (a.rgb.hwb = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return [\n            a.rgb.hsl(t)[0],\n            (1 / 255) * Math.min(e, Math.min(n, r)) * 100,\n            100 * (r = 1 - (1 / 255) * Math.max(e, Math.max(n, r))),\n          ];\n        }),\n        (a.rgb.cmyk = function (t) {\n          var e = t[0] / 255,\n            n = t[1] / 255,\n            r = t[2] / 255,\n            i = Math.min(1 - e, 1 - n, 1 - r);\n          return [\n            100 * ((1 - e - i) / (1 - i) || 0),\n            100 * ((1 - n - i) / (1 - i) || 0),\n            100 * ((1 - r - i) / (1 - i) || 0),\n            100 * i,\n          ];\n        }),\n        (a.rgb.keyword = function (t) {\n          var e,\n            n = i[t];\n          if (n) return n;\n          var o,\n            a = 1 / 0;\n          for (var s in r)\n            r.hasOwnProperty(s) && (e = h(t, r[s])) < a && ((a = e), (o = s));\n          return o;\n        }),\n        (a.keyword.rgb = function (t) {\n          return r[t];\n        }),\n        (a.rgb.xyz = function (t) {\n          var e = t[0] / 255,\n            n = t[1] / 255,\n            r = t[2] / 255;\n          return [\n            100 *\n              (0.4124 *\n                (e =\n                  e > 0.04045\n                    ? Math.pow((e + 0.055) / 1.055, 2.4)\n                    : e / 12.92) +\n                0.3576 *\n                  (n =\n                    n > 0.04045\n                      ? Math.pow((n + 0.055) / 1.055, 2.4)\n                      : n / 12.92) +\n                0.1805 *\n                  (r =\n                    r > 0.04045\n                      ? Math.pow((r + 0.055) / 1.055, 2.4)\n                      : r / 12.92)),\n            100 * (0.2126 * e + 0.7152 * n + 0.0722 * r),\n            100 * (0.0193 * e + 0.1192 * n + 0.9505 * r),\n          ];\n        }),\n        (a.rgb.lab = function (t) {\n          var e = a.rgb.xyz(t),\n            n = e[0],\n            r = e[1],\n            i = e[2];\n          return (\n            (r /= 100),\n            (i /= 108.883),\n            (n =\n              (n /= 95.047) > 0.008856\n                ? Math.pow(n, 1 / 3)\n                : 7.787 * n + 16 / 116),\n            [\n              116 *\n                (r = r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116) -\n                16,\n              500 * (n - r),\n              200 *\n                (r -\n                  (i =\n                    i > 0.008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116)),\n            ]\n          );\n        }),\n        (a.hsl.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a,\n            s = t[0] / 360,\n            c = t[1] / 100,\n            u = t[2] / 100;\n          if (0 === c) return [(a = 255 * u), a, a];\n          for (\n            n = 2 * u - (r = u < 0.5 ? u * (1 + c) : u + c - u * c),\n              o = [0, 0, 0],\n              e = 0;\n            e < 3;\n            e++\n          )\n            (i = s + (1 / 3) * -(e - 1)) < 0 && i++,\n              i > 1 && i--,\n              (a =\n                6 * i < 1\n                  ? n + 6 * (r - n) * i\n                  : 2 * i < 1\n                  ? r\n                  : 3 * i < 2\n                  ? n + (r - n) * (2 / 3 - i) * 6\n                  : n),\n              (o[e] = 255 * a);\n          return o;\n        }),\n        (a.hsl.hsv = function (t) {\n          var e = t[0],\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = n,\n            o = Math.max(r, 0.01);\n          return (\n            (n *= (r *= 2) <= 1 ? r : 2 - r),\n            (i *= o <= 1 ? o : 2 - o),\n            [\n              e,\n              100 * (0 === r ? (2 * i) / (o + i) : (2 * n) / (r + n)),\n              ((r + n) / 2) * 100,\n            ]\n          );\n        }),\n        (a.hsv.rgb = function (t) {\n          var e = t[0] / 60,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = Math.floor(e) % 6,\n            o = e - Math.floor(e),\n            a = 255 * r * (1 - n),\n            s = 255 * r * (1 - n * o),\n            c = 255 * r * (1 - n * (1 - o));\n          switch (((r *= 255), i)) {\n            case 0:\n              return [r, c, a];\n            case 1:\n              return [s, r, a];\n            case 2:\n              return [a, r, c];\n            case 3:\n              return [a, s, r];\n            case 4:\n              return [c, a, r];\n            case 5:\n              return [r, a, s];\n          }\n        }),\n        (a.hsv.hsl = function (t) {\n          var e,\n            n,\n            r = t[0],\n            i = t[1] / 100,\n            o = t[2] / 100,\n            a = Math.max(o, 0.01),\n            s = (2 - i) * o;\n          return (\n            (n = i * a),\n            [\n              r,\n              100 * (n = (n /= (e = (2 - i) * a) <= 1 ? e : 2 - e) || 0),\n              100 * (s /= 2),\n            ]\n          );\n        }),\n        (a.hwb.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a,\n            s,\n            c = t[0] / 360,\n            u = t[1] / 100,\n            h = t[2] / 100,\n            l = u + h;\n          switch (\n            (l > 1 && ((u /= l), (h /= l)),\n            (r = 6 * c - (e = Math.floor(6 * c))),\n            0 != (1 & e) && (r = 1 - r),\n            (i = u + r * ((n = 1 - h) - u)),\n            e)\n          ) {\n            default:\n            case 6:\n            case 0:\n              (o = n), (a = i), (s = u);\n              break;\n            case 1:\n              (o = i), (a = n), (s = u);\n              break;\n            case 2:\n              (o = u), (a = n), (s = i);\n              break;\n            case 3:\n              (o = u), (a = i), (s = n);\n              break;\n            case 4:\n              (o = i), (a = u), (s = n);\n              break;\n            case 5:\n              (o = n), (a = u), (s = i);\n          }\n          return [255 * o, 255 * a, 255 * s];\n        }),\n        (a.cmyk.rgb = function (t) {\n          var e = t[0] / 100,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = t[3] / 100;\n          return [\n            255 * (1 - Math.min(1, e * (1 - i) + i)),\n            255 * (1 - Math.min(1, n * (1 - i) + i)),\n            255 * (1 - Math.min(1, r * (1 - i) + i)),\n          ];\n        }),\n        (a.xyz.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i = t[0] / 100,\n            o = t[1] / 100,\n            a = t[2] / 100;\n          return (\n            (n = -0.9689 * i + 1.8758 * o + 0.0415 * a),\n            (r = 0.0557 * i + -0.204 * o + 1.057 * a),\n            (e =\n              (e = 3.2406 * i + -1.5372 * o + -0.4986 * a) > 0.0031308\n                ? 1.055 * Math.pow(e, 1 / 2.4) - 0.055\n                : 12.92 * e),\n            (n =\n              n > 0.0031308 ? 1.055 * Math.pow(n, 1 / 2.4) - 0.055 : 12.92 * n),\n            (r =\n              r > 0.0031308 ? 1.055 * Math.pow(r, 1 / 2.4) - 0.055 : 12.92 * r),\n            [\n              255 * (e = Math.min(Math.max(0, e), 1)),\n              255 * (n = Math.min(Math.max(0, n), 1)),\n              255 * (r = Math.min(Math.max(0, r), 1)),\n            ]\n          );\n        }),\n        (a.xyz.lab = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return (\n            (n /= 100),\n            (r /= 108.883),\n            (e =\n              (e /= 95.047) > 0.008856\n                ? Math.pow(e, 1 / 3)\n                : 7.787 * e + 16 / 116),\n            [\n              116 *\n                (n = n > 0.008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116) -\n                16,\n              500 * (e - n),\n              200 *\n                (n -\n                  (r =\n                    r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116)),\n            ]\n          );\n        }),\n        (a.lab.xyz = function (t) {\n          var e,\n            n,\n            r,\n            i = t[0];\n          (e = t[1] / 500 + (n = (i + 16) / 116)), (r = n - t[2] / 200);\n          var o = Math.pow(n, 3),\n            a = Math.pow(e, 3),\n            s = Math.pow(r, 3);\n          return (\n            (n = o > 0.008856 ? o : (n - 16 / 116) / 7.787),\n            (e = a > 0.008856 ? a : (e - 16 / 116) / 7.787),\n            (r = s > 0.008856 ? s : (r - 16 / 116) / 7.787),\n            [(e *= 95.047), (n *= 100), (r *= 108.883)]\n          );\n        }),\n        (a.lab.lch = function (t) {\n          var e,\n            n = t[0],\n            r = t[1],\n            i = t[2];\n          return (\n            (e = (360 * Math.atan2(i, r)) / 2 / Math.PI) < 0 && (e += 360),\n            [n, Math.sqrt(r * r + i * i), e]\n          );\n        }),\n        (a.lch.lab = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = (t[2] / 360) * 2 * Math.PI;\n          return [e, n * Math.cos(r), n * Math.sin(r)];\n        }),\n        (a.rgb.ansi16 = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2],\n            i = 1 in arguments ? arguments[1] : a.rgb.hsv(t)[2];\n          if (0 === (i = Math.round(i / 50))) return 30;\n          var o =\n            30 +\n            ((Math.round(r / 255) << 2) |\n              (Math.round(n / 255) << 1) |\n              Math.round(e / 255));\n          return 2 === i && (o += 60), o;\n        }),\n        (a.hsv.ansi16 = function (t) {\n          return a.rgb.ansi16(a.hsv.rgb(t), t[2]);\n        }),\n        (a.rgb.ansi256 = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return e === n && n === r\n            ? e < 8\n              ? 16\n              : e > 248\n              ? 231\n              : Math.round(((e - 8) / 247) * 24) + 232\n            : 16 +\n                36 * Math.round((e / 255) * 5) +\n                6 * Math.round((n / 255) * 5) +\n                Math.round((r / 255) * 5);\n        }),\n        (a.ansi16.rgb = function (t) {\n          var e = t % 10;\n          if (0 === e || 7 === e)\n            return t > 50 && (e += 3.5), [(e = (e / 10.5) * 255), e, e];\n          var n = 0.5 * (1 + ~~(t > 50));\n          return [\n            (1 & e) * n * 255,\n            ((e >> 1) & 1) * n * 255,\n            ((e >> 2) & 1) * n * 255,\n          ];\n        }),\n        (a.ansi256.rgb = function (t) {\n          return t >= 232\n            ? [(n = 10 * (t - 232) + 8), n, n]\n            : ((t -= 16),\n              [\n                (Math.floor(t / 36) / 5) * 255,\n                (Math.floor((e = t % 36) / 6) / 5) * 255,\n                ((e % 6) / 5) * 255,\n              ]);\n          var e, n;\n        }),\n        (a.rgb.hex = function (t) {\n          var e = (\n            ((255 & Math.round(t[0])) << 16) +\n            ((255 & Math.round(t[1])) << 8) +\n            (255 & Math.round(t[2]))\n          )\n            .toString(16)\n            .toUpperCase();\n          return \"000000\".substring(e.length) + e;\n        }),\n        (a.hex.rgb = function (t) {\n          var e = t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n          if (!e) return [0, 0, 0];\n          var n = e[0];\n          3 === e[0].length &&\n            (n = n\n              .split(\"\")\n              .map(function (t) {\n                return t + t;\n              })\n              .join(\"\"));\n          var r = parseInt(n, 16);\n          return [(r >> 16) & 255, (r >> 8) & 255, 255 & r];\n        }),\n        (a.rgb.hcg = function (t) {\n          var e,\n            n = t[0] / 255,\n            r = t[1] / 255,\n            i = t[2] / 255,\n            o = Math.max(Math.max(n, r), i),\n            a = Math.min(Math.min(n, r), i),\n            s = o - a;\n          return (\n            (e =\n              s <= 0\n                ? 0\n                : o === n\n                ? ((r - i) / s) % 6\n                : o === r\n                ? 2 + (i - n) / s\n                : 4 + (n - r) / s + 4),\n            (e /= 6),\n            [360 * (e %= 1), 100 * s, 100 * (s < 1 ? a / (1 - s) : 0)]\n          );\n        }),\n        (a.hsl.hcg = function (t) {\n          var e,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = 0;\n          return (\n            (e = r < 0.5 ? 2 * n * r : 2 * n * (1 - r)) < 1 &&\n              (i = (r - 0.5 * e) / (1 - e)),\n            [t[0], 100 * e, 100 * i]\n          );\n        }),\n        (a.hsv.hcg = function (t) {\n          var e = t[1] / 100,\n            n = t[2] / 100,\n            r = e * n,\n            i = 0;\n          return r < 1 && (i = (n - r) / (1 - r)), [t[0], 100 * r, 100 * i];\n        }),\n        (a.hcg.rgb = function (t) {\n          var e = t[0] / 360,\n            n = t[1] / 100,\n            r = t[2] / 100;\n          if (0 === n) return [255 * r, 255 * r, 255 * r];\n          var i,\n            o = [0, 0, 0],\n            a = (e % 1) * 6,\n            s = a % 1,\n            c = 1 - s;\n          switch (Math.floor(a)) {\n            case 0:\n              (o[0] = 1), (o[1] = s), (o[2] = 0);\n              break;\n            case 1:\n              (o[0] = c), (o[1] = 1), (o[2] = 0);\n              break;\n            case 2:\n              (o[0] = 0), (o[1] = 1), (o[2] = s);\n              break;\n            case 3:\n              (o[0] = 0), (o[1] = c), (o[2] = 1);\n              break;\n            case 4:\n              (o[0] = s), (o[1] = 0), (o[2] = 1);\n              break;\n            default:\n              (o[0] = 1), (o[1] = 0), (o[2] = c);\n          }\n          return (\n            (i = (1 - n) * r),\n            [255 * (n * o[0] + i), 255 * (n * o[1] + i), 255 * (n * o[2] + i)]\n          );\n        }),\n        (a.hcg.hsv = function (t) {\n          var e = t[1] / 100,\n            n = e + (t[2] / 100) * (1 - e),\n            r = 0;\n          return n > 0 && (r = e / n), [t[0], 100 * r, 100 * n];\n        }),\n        (a.hcg.hsl = function (t) {\n          var e = t[1] / 100,\n            n = (t[2] / 100) * (1 - e) + 0.5 * e,\n            r = 0;\n          return (\n            n > 0 && n < 0.5\n              ? (r = e / (2 * n))\n              : n >= 0.5 && n < 1 && (r = e / (2 * (1 - n))),\n            [t[0], 100 * r, 100 * n]\n          );\n        }),\n        (a.hcg.hwb = function (t) {\n          var e = t[1] / 100,\n            n = e + (t[2] / 100) * (1 - e);\n          return [t[0], 100 * (n - e), 100 * (1 - n)];\n        }),\n        (a.hwb.hcg = function (t) {\n          var e = t[1] / 100,\n            n = 1 - t[2] / 100,\n            r = n - e,\n            i = 0;\n          return r < 1 && (i = (n - r) / (1 - r)), [t[0], 100 * r, 100 * i];\n        }),\n        (a.apple.rgb = function (t) {\n          return [\n            (t[0] / 65535) * 255,\n            (t[1] / 65535) * 255,\n            (t[2] / 65535) * 255,\n          ];\n        }),\n        (a.rgb.apple = function (t) {\n          return [\n            (t[0] / 255) * 65535,\n            (t[1] / 255) * 65535,\n            (t[2] / 255) * 65535,\n          ];\n        }),\n        (a.gray.rgb = function (t) {\n          return [(t[0] / 100) * 255, (t[0] / 100) * 255, (t[0] / 100) * 255];\n        }),\n        (a.gray.hsl = a.gray.hsv =\n          function (t) {\n            return [0, 0, t[0]];\n          }),\n        (a.gray.hwb = function (t) {\n          return [0, 100, t[0]];\n        }),\n        (a.gray.cmyk = function (t) {\n          return [0, 0, 0, t[0]];\n        }),\n        (a.gray.lab = function (t) {\n          return [t[0], 0, 0];\n        }),\n        (a.gray.hex = function (t) {\n          var e = 255 & Math.round((t[0] / 100) * 255),\n            n = ((e << 16) + (e << 8) + e).toString(16).toUpperCase();\n          return \"000000\".substring(n.length) + n;\n        }),\n        (a.rgb.gray = function (t) {\n          return [((t[0] + t[1] + t[2]) / 3 / 255) * 100];\n        });\n    },\n    127: function (t, e) {},\n    128: function (t, e) {},\n    183: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(185),\n        o = n(92),\n        a = n(6),\n        s = n(0);\n      function c(t) {\n        return (c =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var u,\n        h,\n        l = 0,\n        f = 0,\n        d = 0,\n        p = 0,\n        g = 0,\n        v = 0,\n        y =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : c(performance)) && performance.now\n            ? performance\n            : Date,\n        m =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : c(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function b() {\n        return g || (m(x), (g = y.now() + v));\n      }\n      function x() {\n        g = 0;\n      }\n      function S() {\n        this._call = this._time = this._next = null;\n      }\n      function w(t, e, n) {\n        var r = new S();\n        return r.restart(t, e, n), r;\n      }\n      function O() {\n        (g = (p = y.now()) + v), (l = f = 0);\n        try {\n          !(function () {\n            b(), ++l;\n            for (var t, e = u; e; )\n              (t = g - e._time) >= 0 && e._call.call(null, t), (e = e._next);\n            --l;\n          })();\n        } finally {\n          (l = 0),\n            (function () {\n              var t,\n                e,\n                n = u,\n                r = 1 / 0;\n              for (; n; )\n                n._call\n                  ? (r > n._time && (r = n._time), (t = n), (n = n._next))\n                  : ((e = n._next),\n                    (n._next = null),\n                    (n = t ? (t._next = e) : (u = e)));\n              (h = t), k(r);\n            })(),\n            (g = 0);\n        }\n      }\n      function M() {\n        var t = y.now(),\n          e = t - p;\n        e > 1e3 && ((v -= e), (p = t));\n      }\n      function k(t) {\n        l ||\n          (f && (f = clearTimeout(f)),\n          t - g > 24\n            ? (t < 1 / 0 && (f = setTimeout(O, t - y.now() - v)),\n              d && (d = clearInterval(d)))\n            : (d || ((p = y.now()), (d = setInterval(M, 1e3))), (l = 1), m(O)));\n      }\n      S.prototype = w.prototype = {\n        constructor: S,\n        restart: function (t, e, n) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (n = (null == n ? b() : +n) + (null == e ? 0 : +e)),\n            this._next ||\n              h === this ||\n              (h ? (h._next = this) : (u = this), (h = this)),\n            (this._call = t),\n            (this._time = n),\n            k();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), k());\n        },\n      };\n      var j = function (t, e, n) {\n        (t.prototype = e.prototype = n), (n.constructor = t);\n      };\n      function C(t, e) {\n        var n = Object.create(t.prototype);\n        for (var r in e) n[r] = e[r];\n        return n;\n      }\n      function E() {}\n      var P = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n        A = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n        I = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n        T = /^#([0-9a-f]{3,8})$/,\n        N = new RegExp(\n          \"^rgb\\\\(\".concat(P, \",\").concat(P, \",\").concat(P, \"\\\\)$\"),\n        ),\n        B = new RegExp(\n          \"^rgb\\\\(\".concat(I, \",\").concat(I, \",\").concat(I, \"\\\\)$\"),\n        ),\n        L = new RegExp(\n          \"^rgba\\\\(\"\n            .concat(P, \",\")\n            .concat(P, \",\")\n            .concat(P, \",\")\n            .concat(A, \"\\\\)$\"),\n        ),\n        D = new RegExp(\n          \"^rgba\\\\(\"\n            .concat(I, \",\")\n            .concat(I, \",\")\n            .concat(I, \",\")\n            .concat(A, \"\\\\)$\"),\n        ),\n        _ = new RegExp(\n          \"^hsl\\\\(\".concat(A, \",\").concat(I, \",\").concat(I, \"\\\\)$\"),\n        ),\n        R = new RegExp(\n          \"^hsla\\\\(\"\n            .concat(A, \",\")\n            .concat(I, \",\")\n            .concat(I, \",\")\n            .concat(A, \"\\\\)$\"),\n        ),\n        F = {\n          aliceblue: 15792383,\n          antiquewhite: 16444375,\n          aqua: 65535,\n          aquamarine: 8388564,\n          azure: 15794175,\n          beige: 16119260,\n          bisque: 16770244,\n          black: 0,\n          blanchedalmond: 16772045,\n          blue: 255,\n          blueviolet: 9055202,\n          brown: 10824234,\n          burlywood: 14596231,\n          cadetblue: 6266528,\n          chartreuse: 8388352,\n          chocolate: 13789470,\n          coral: 16744272,\n          cornflowerblue: 6591981,\n          cornsilk: 16775388,\n          crimson: 14423100,\n          cyan: 65535,\n          darkblue: 139,\n          darkcyan: 35723,\n          darkgoldenrod: 12092939,\n          darkgray: 11119017,\n          darkgreen: 25600,\n          darkgrey: 11119017,\n          darkkhaki: 12433259,\n          darkmagenta: 9109643,\n          darkolivegreen: 5597999,\n          darkorange: 16747520,\n          darkorchid: 10040012,\n          darkred: 9109504,\n          darksalmon: 15308410,\n          darkseagreen: 9419919,\n          darkslateblue: 4734347,\n          darkslategray: 3100495,\n          darkslategrey: 3100495,\n          darkturquoise: 52945,\n          darkviolet: 9699539,\n          deeppink: 16716947,\n          deepskyblue: 49151,\n          dimgray: 6908265,\n          dimgrey: 6908265,\n          dodgerblue: 2003199,\n          firebrick: 11674146,\n          floralwhite: 16775920,\n          forestgreen: 2263842,\n          fuchsia: 16711935,\n          gainsboro: 14474460,\n          ghostwhite: 16316671,\n          gold: 16766720,\n          goldenrod: 14329120,\n          gray: 8421504,\n          green: 32768,\n          greenyellow: 11403055,\n          grey: 8421504,\n          honeydew: 15794160,\n          hotpink: 16738740,\n          indianred: 13458524,\n          indigo: 4915330,\n          ivory: 16777200,\n          khaki: 15787660,\n          lavender: 15132410,\n          lavenderblush: 16773365,\n          lawngreen: 8190976,\n          lemonchiffon: 16775885,\n          lightblue: 11393254,\n          lightcoral: 15761536,\n          lightcyan: 14745599,\n          lightgoldenrodyellow: 16448210,\n          lightgray: 13882323,\n          lightgreen: 9498256,\n          lightgrey: 13882323,\n          lightpink: 16758465,\n          lightsalmon: 16752762,\n          lightseagreen: 2142890,\n          lightskyblue: 8900346,\n          lightslategray: 7833753,\n          lightslategrey: 7833753,\n          lightsteelblue: 11584734,\n          lightyellow: 16777184,\n          lime: 65280,\n          limegreen: 3329330,\n          linen: 16445670,\n          magenta: 16711935,\n          maroon: 8388608,\n          mediumaquamarine: 6737322,\n          mediumblue: 205,\n          mediumorchid: 12211667,\n          mediumpurple: 9662683,\n          mediumseagreen: 3978097,\n          mediumslateblue: 8087790,\n          mediumspringgreen: 64154,\n          mediumturquoise: 4772300,\n          mediumvioletred: 13047173,\n          midnightblue: 1644912,\n          mintcream: 16121850,\n          mistyrose: 16770273,\n          moccasin: 16770229,\n          navajowhite: 16768685,\n          navy: 128,\n          oldlace: 16643558,\n          olive: 8421376,\n          olivedrab: 7048739,\n          orange: 16753920,\n          orangered: 16729344,\n          orchid: 14315734,\n          palegoldenrod: 15657130,\n          palegreen: 10025880,\n          paleturquoise: 11529966,\n          palevioletred: 14381203,\n          papayawhip: 16773077,\n          peachpuff: 16767673,\n          peru: 13468991,\n          pink: 16761035,\n          plum: 14524637,\n          powderblue: 11591910,\n          purple: 8388736,\n          rebeccapurple: 6697881,\n          red: 16711680,\n          rosybrown: 12357519,\n          royalblue: 4286945,\n          saddlebrown: 9127187,\n          salmon: 16416882,\n          sandybrown: 16032864,\n          seagreen: 3050327,\n          seashell: 16774638,\n          sienna: 10506797,\n          silver: 12632256,\n          skyblue: 8900331,\n          slateblue: 6970061,\n          slategray: 7372944,\n          slategrey: 7372944,\n          snow: 16775930,\n          springgreen: 65407,\n          steelblue: 4620980,\n          tan: 13808780,\n          teal: 32896,\n          thistle: 14204888,\n          tomato: 16737095,\n          turquoise: 4251856,\n          violet: 15631086,\n          wheat: 16113331,\n          white: 16777215,\n          whitesmoke: 16119285,\n          yellow: 16776960,\n          yellowgreen: 10145074,\n        };\n      function Y() {\n        return this.rgb().formatHex();\n      }\n      function X() {\n        return this.rgb().formatRgb();\n      }\n      function z(t) {\n        var e, n;\n        return (\n          (t = (t + \"\").trim().toLowerCase()),\n          (e = T.exec(t))\n            ? ((n = e[1].length),\n              (e = parseInt(e[1], 16)),\n              6 === n\n                ? W(e)\n                : 3 === n\n                ? new H(\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    ((15 & e) << 4) | (15 & e),\n                    1,\n                  )\n                : 8 === n\n                ? q(\n                    (e >> 24) & 255,\n                    (e >> 16) & 255,\n                    (e >> 8) & 255,\n                    (255 & e) / 255,\n                  )\n                : 4 === n\n                ? q(\n                    ((e >> 12) & 15) | ((e >> 8) & 240),\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    (((15 & e) << 4) | (15 & e)) / 255,\n                  )\n                : null)\n            : (e = N.exec(t))\n            ? new H(e[1], e[2], e[3], 1)\n            : (e = B.exec(t))\n            ? new H(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                1,\n              )\n            : (e = L.exec(t))\n            ? q(e[1], e[2], e[3], e[4])\n            : (e = D.exec(t))\n            ? q(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                e[4],\n              )\n            : (e = _.exec(t))\n            ? J(e[1], e[2] / 100, e[3] / 100, 1)\n            : (e = R.exec(t))\n            ? J(e[1], e[2] / 100, e[3] / 100, e[4])\n            : F.hasOwnProperty(t)\n            ? W(F[t])\n            : \"transparent\" === t\n            ? new H(NaN, NaN, NaN, 0)\n            : null\n        );\n      }\n      function W(t) {\n        return new H((t >> 16) & 255, (t >> 8) & 255, 255 & t, 1);\n      }\n      function q(t, e, n, r) {\n        return r <= 0 && (t = e = n = NaN), new H(t, e, n, r);\n      }\n      function V(t) {\n        return (\n          t instanceof E || (t = z(t)),\n          t ? new H((t = t.rgb()).r, t.g, t.b, t.opacity) : new H()\n        );\n      }\n      function G(t, e, n, r) {\n        return 1 === arguments.length\n          ? V(t)\n          : new H(t, e, n, null == r ? 1 : r);\n      }\n      function H(t, e, n, r) {\n        (this.r = +t), (this.g = +e), (this.b = +n), (this.opacity = +r);\n      }\n      function U() {\n        return \"#\".concat(Q(this.r)).concat(Q(this.g)).concat(Q(this.b));\n      }\n      function Z() {\n        var t = K(this.opacity);\n        return \"\"\n          .concat(1 === t ? \"rgb(\" : \"rgba(\")\n          .concat($(this.r), \", \")\n          .concat($(this.g), \", \")\n          .concat($(this.b))\n          .concat(1 === t ? \")\" : \", \".concat(t, \")\"));\n      }\n      function K(t) {\n        return isNaN(t) ? 1 : Math.max(0, Math.min(1, t));\n      }\n      function $(t) {\n        return Math.max(0, Math.min(255, Math.round(t) || 0));\n      }\n      function Q(t) {\n        return ((t = $(t)) < 16 ? \"0\" : \"\") + t.toString(16);\n      }\n      function J(t, e, n, r) {\n        return (\n          r <= 0\n            ? (t = e = n = NaN)\n            : n <= 0 || n >= 1\n            ? (t = e = NaN)\n            : e <= 0 && (t = NaN),\n          new et(t, e, n, r)\n        );\n      }\n      function tt(t) {\n        if (t instanceof et) return new et(t.h, t.s, t.l, t.opacity);\n        if ((t instanceof E || (t = z(t)), !t)) return new et();\n        if (t instanceof et) return t;\n        var e = (t = t.rgb()).r / 255,\n          n = t.g / 255,\n          r = t.b / 255,\n          i = Math.min(e, n, r),\n          o = Math.max(e, n, r),\n          a = NaN,\n          s = o - i,\n          c = (o + i) / 2;\n        return (\n          s\n            ? ((a =\n                e === o\n                  ? (n - r) / s + 6 * (n < r)\n                  : n === o\n                  ? (r - e) / s + 2\n                  : (e - n) / s + 4),\n              (s /= c < 0.5 ? o + i : 2 - o - i),\n              (a *= 60))\n            : (s = c > 0 && c < 1 ? 0 : a),\n          new et(a, s, c, t.opacity)\n        );\n      }\n      function et(t, e, n, r) {\n        (this.h = +t), (this.s = +e), (this.l = +n), (this.opacity = +r);\n      }\n      function nt(t) {\n        return (t = (t || 0) % 360) < 0 ? t + 360 : t;\n      }\n      function rt(t) {\n        return Math.max(0, Math.min(1, t || 0));\n      }\n      function it(t, e, n) {\n        return (\n          255 *\n          (t < 60\n            ? e + ((n - e) * t) / 60\n            : t < 180\n            ? n\n            : t < 240\n            ? e + ((n - e) * (240 - t)) / 60\n            : e)\n        );\n      }\n      function ot(t, e, n, r, i) {\n        var o = t * t,\n          a = o * t;\n        return (\n          ((1 - 3 * t + 3 * o - a) * e +\n            (4 - 6 * o + 3 * a) * n +\n            (1 + 3 * t + 3 * o - 3 * a) * r +\n            a * i) /\n          6\n        );\n      }\n      j(E, z, {\n        copy: function (t) {\n          return Object.assign(new this.constructor(), this, t);\n        },\n        displayable: function () {\n          return this.rgb().displayable();\n        },\n        hex: Y,\n        formatHex: Y,\n        formatHex8: function () {\n          return this.rgb().formatHex8();\n        },\n        formatHsl: function () {\n          return tt(this).formatHsl();\n        },\n        formatRgb: X,\n        toString: X,\n      }),\n        j(\n          H,\n          G,\n          C(E, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new H(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new H(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              return this;\n            },\n            clamp: function () {\n              return new H($(this.r), $(this.g), $(this.b), K(this.opacity));\n            },\n            displayable: function () {\n              return (\n                -0.5 <= this.r &&\n                this.r < 255.5 &&\n                -0.5 <= this.g &&\n                this.g < 255.5 &&\n                -0.5 <= this.b &&\n                this.b < 255.5 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            hex: U,\n            formatHex: U,\n            formatHex8: function () {\n              return \"#\"\n                .concat(Q(this.r))\n                .concat(Q(this.g))\n                .concat(Q(this.b))\n                .concat(Q(255 * (isNaN(this.opacity) ? 1 : this.opacity)));\n            },\n            formatRgb: Z,\n            toString: Z,\n          }),\n        ),\n        j(\n          et,\n          function (t, e, n, r) {\n            return 1 === arguments.length\n              ? tt(t)\n              : new et(t, e, n, null == r ? 1 : r);\n          },\n          C(E, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new et(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new et(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              var t = (this.h % 360) + 360 * (this.h < 0),\n                e = isNaN(t) || isNaN(this.s) ? 0 : this.s,\n                n = this.l,\n                r = n + (n < 0.5 ? n : 1 - n) * e,\n                i = 2 * n - r;\n              return new H(\n                it(t >= 240 ? t - 240 : t + 120, i, r),\n                it(t, i, r),\n                it(t < 120 ? t + 240 : t - 120, i, r),\n                this.opacity,\n              );\n            },\n            clamp: function () {\n              return new et(\n                nt(this.h),\n                rt(this.s),\n                rt(this.l),\n                K(this.opacity),\n              );\n            },\n            displayable: function () {\n              return (\n                ((0 <= this.s && this.s <= 1) || isNaN(this.s)) &&\n                0 <= this.l &&\n                this.l <= 1 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            formatHsl: function () {\n              var t = K(this.opacity);\n              return \"\"\n                .concat(1 === t ? \"hsl(\" : \"hsla(\")\n                .concat(nt(this.h), \", \")\n                .concat(100 * rt(this.s), \"%, \")\n                .concat(100 * rt(this.l), \"%\")\n                .concat(1 === t ? \")\" : \", \".concat(t, \")\"));\n            },\n          }),\n        );\n      var at = function (t) {\n        return function () {\n          return t;\n        };\n      };\n      function st(t, e) {\n        return function (n) {\n          return t + n * e;\n        };\n      }\n      function ct(t) {\n        return 1 == (t = +t)\n          ? ut\n          : function (e, n) {\n              return n - e\n                ? (function (t, e, n) {\n                    return (\n                      (t = Math.pow(t, n)),\n                      (e = Math.pow(e, n) - t),\n                      (n = 1 / n),\n                      function (r) {\n                        return Math.pow(t + r * e, n);\n                      }\n                    );\n                  })(e, n, t)\n                : at(isNaN(e) ? n : e);\n            };\n      }\n      function ut(t, e) {\n        var n = e - t;\n        return n ? st(t, n) : at(isNaN(t) ? e : t);\n      }\n      var ht = (function t(e) {\n        var n = ct(e);\n        function r(t, e) {\n          var r = n((t = G(t)).r, (e = G(e)).r),\n            i = n(t.g, e.g),\n            o = n(t.b, e.b),\n            a = ut(t.opacity, e.opacity);\n          return function (e) {\n            return (\n              (t.r = r(e)),\n              (t.g = i(e)),\n              (t.b = o(e)),\n              (t.opacity = a(e)),\n              t + \"\"\n            );\n          };\n        }\n        return (r.gamma = t), r;\n      })(1);\n      function lt(t) {\n        return function (e) {\n          var n,\n            r,\n            i = e.length,\n            o = new Array(i),\n            a = new Array(i),\n            s = new Array(i);\n          for (n = 0; n < i; ++n)\n            (r = G(e[n])),\n              (o[n] = r.r || 0),\n              (a[n] = r.g || 0),\n              (s[n] = r.b || 0);\n          return (\n            (o = t(o)),\n            (a = t(a)),\n            (s = t(s)),\n            (r.opacity = 1),\n            function (t) {\n              return (r.r = o(t)), (r.g = a(t)), (r.b = s(t)), r + \"\";\n            }\n          );\n        };\n      }\n      lt(function (t) {\n        var e = t.length - 1;\n        return function (n) {\n          var r =\n              n <= 0 ? (n = 0) : n >= 1 ? ((n = 1), e - 1) : Math.floor(n * e),\n            i = t[r],\n            o = t[r + 1],\n            a = r > 0 ? t[r - 1] : 2 * i - o,\n            s = r < e - 1 ? t[r + 2] : 2 * o - i;\n          return ot((n - r / e) * e, a, i, o, s);\n        };\n      }),\n        lt(function (t) {\n          var e = t.length;\n          return function (n) {\n            var r = Math.floor(((n %= 1) < 0 ? ++n : n) * e),\n              i = t[(r + e - 1) % e],\n              o = t[r % e],\n              a = t[(r + 1) % e],\n              s = t[(r + 2) % e];\n            return ot((n - r / e) * e, i, o, a, s);\n          };\n        });\n      var ft = function (t, e) {\n        e || (e = []);\n        var n,\n          r = t ? Math.min(e.length, t.length) : 0,\n          i = e.slice();\n        return function (o) {\n          for (n = 0; n < r; ++n) i[n] = t[n] * (1 - o) + e[n] * o;\n          return i;\n        };\n      };\n      function dt(t) {\n        return ArrayBuffer.isView(t) && !(t instanceof DataView);\n      }\n      function pt(t, e) {\n        var n,\n          r = e ? e.length : 0,\n          i = t ? Math.min(r, t.length) : 0,\n          o = new Array(i),\n          a = new Array(r);\n        for (n = 0; n < i; ++n) o[n] = Ot(t[n], e[n]);\n        for (; n < r; ++n) a[n] = e[n];\n        return function (t) {\n          for (n = 0; n < i; ++n) a[n] = o[n](t);\n          return a;\n        };\n      }\n      var gt = function (t, e) {\n          var n = new Date();\n          return (\n            (t = +t),\n            (e = +e),\n            function (r) {\n              return n.setTime(t * (1 - r) + e * r), n;\n            }\n          );\n        },\n        vt = function (t, e) {\n          return (\n            (t = +t),\n            (e = +e),\n            function (n) {\n              return t * (1 - n) + e * n;\n            }\n          );\n        };\n      function yt(t) {\n        return (yt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var mt = function (t, e) {\n          var n,\n            r = {},\n            i = {};\n          for (n in ((null !== t && \"object\" === yt(t)) || (t = {}),\n          (null !== e && \"object\" === yt(e)) || (e = {}),\n          e))\n            n in t ? (r[n] = Ot(t[n], e[n])) : (i[n] = e[n]);\n          return function (t) {\n            for (n in r) i[n] = r[n](t);\n            return i;\n          };\n        },\n        bt = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        xt = new RegExp(bt.source, \"g\");\n      var St = function (t, e) {\n        var n,\n          r,\n          i,\n          o = (bt.lastIndex = xt.lastIndex = 0),\n          a = -1,\n          s = [],\n          c = [];\n        for (t += \"\", e += \"\"; (n = bt.exec(t)) && (r = xt.exec(e)); )\n          (i = r.index) > o &&\n            ((i = e.slice(o, i)), s[a] ? (s[a] += i) : (s[++a] = i)),\n            (n = n[0]) === (r = r[0])\n              ? s[a]\n                ? (s[a] += r)\n                : (s[++a] = r)\n              : ((s[++a] = null), c.push({ i: a, x: vt(n, r) })),\n            (o = xt.lastIndex);\n        return (\n          o < e.length && ((i = e.slice(o)), s[a] ? (s[a] += i) : (s[++a] = i)),\n          s.length < 2\n            ? c[0]\n              ? (function (t) {\n                  return function (e) {\n                    return t(e) + \"\";\n                  };\n                })(c[0].x)\n              : (function (t) {\n                  return function () {\n                    return t;\n                  };\n                })(e)\n            : ((e = c.length),\n              function (t) {\n                for (var n, r = 0; r < e; ++r) s[(n = c[r]).i] = n.x(t);\n                return s.join(\"\");\n              })\n        );\n      };\n      function wt(t) {\n        return (wt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Ot = function (t, e) {\n          var n,\n            r = wt(e);\n          return null == e || \"boolean\" === r\n            ? at(e)\n            : (\"number\" === r\n                ? vt\n                : \"string\" === r\n                ? (n = z(e))\n                  ? ((e = n), ht)\n                  : St\n                : e instanceof z\n                ? ht\n                : e instanceof Date\n                ? gt\n                : dt(e)\n                ? ft\n                : Array.isArray(e)\n                ? pt\n                : (\"function\" != typeof e.valueOf &&\n                    \"function\" != typeof e.toString) ||\n                  isNaN(e)\n                ? mt\n                : vt)(t, e);\n        },\n        Mt = n(90),\n        kt = n(34),\n        jt = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n      function Ct(t, e, n) {\n        var r,\n          i = e.startTime;\n        if (n < i + e.delay || e._paused) return !1;\n        var o = e.duration,\n          a = e.easing,\n          c = Object(Mt.a)(a);\n        if (((n = n - i - e.delay), e.repeat)) r = c((r = (n % o) / o));\n        else {\n          if (!((r = n / o) < 1))\n            return e.onFrame ? t.attr(e.onFrame(1)) : t.attr(e.toAttrs), !0;\n          r = c(r);\n        }\n        if (e.onFrame) {\n          var u = e.onFrame(r);\n          t.attr(u);\n        } else\n          !(function (t, e, n) {\n            var r = {},\n              i = e.fromAttrs,\n              o = e.toAttrs;\n            if (!t.destroyed) {\n              var a, c, u, h;\n              for (var l in o)\n                if (!Object(s.isEqual)(i[l], o[l]))\n                  if (\"path\" === l) {\n                    var f = o[l],\n                      d = i[l];\n                    f.length > d.length\n                      ? ((f = kt.parsePathString(o[l])),\n                        (d = kt.parsePathString(i[l])),\n                        (d = kt.fillPathByDiff(d, f)),\n                        (d = kt.formatPath(d, f)),\n                        (e.fromAttrs.path = d),\n                        (e.toAttrs.path = f))\n                      : e.pathFormatted ||\n                        ((f = kt.parsePathString(o[l])),\n                        (d = kt.parsePathString(i[l])),\n                        (d = kt.formatPath(d, f)),\n                        (e.fromAttrs.path = d),\n                        (e.toAttrs.path = f),\n                        (e.pathFormatted = !0)),\n                      (r[l] = []);\n                    for (var p = 0; p < f.length; p++) {\n                      for (\n                        var g = f[p], v = d[p], y = [], m = 0;\n                        m < g.length;\n                        m++\n                      )\n                        Object(s.isNumber)(g[m]) &&\n                        v &&\n                        Object(s.isNumber)(v[m])\n                          ? ((a = Ot(v[m], g[m])), y.push(a(n)))\n                          : y.push(g[m]);\n                      r[l].push(y);\n                    }\n                  } else if (\"matrix\" === l) {\n                    var b = ((u = i[l] || jt),\n                    (dt((h = o[l] || jt)) ? ft : pt)(u, h))(n);\n                    r[l] = b;\n                  } else\n                    [\"fill\", \"stroke\", \"fillStyle\", \"strokeStyle\"].includes(\n                      l,\n                    ) && ((c = o[l]), /^[r,R,L,l]{1}[\\s]*\\(/.test(c))\n                      ? (r[l] = o[l])\n                      : Object(s.isFunction)(o[l]) ||\n                        ((a = Ot(i[l], o[l])), (r[l] = a(n)));\n              t.attr(r);\n            }\n          })(t, e, r);\n        return !1;\n      }\n      var Et = (function () {\n          function t(t) {\n            (this.animators = []),\n              (this.current = 0),\n              (this.timer = null),\n              (this.canvas = t);\n          }\n          return (\n            (t.prototype.initTimer = function () {\n              var t,\n                e,\n                n,\n                r = this;\n              this.timer = w(function (i) {\n                if (((r.current = i), r.animators.length > 0)) {\n                  for (var o = r.animators.length - 1; o >= 0; o--)\n                    if ((t = r.animators[o]).destroyed) r.removeAnimator(o);\n                    else {\n                      if (!t.isAnimatePaused())\n                        for (\n                          var a = (e = t.get(\"animations\")).length - 1;\n                          a >= 0;\n                          a--\n                        )\n                          (n = e[a]),\n                            Ct(t, n, i) &&\n                              (e.splice(a, 1), !1, n.callback && n.callback());\n                      0 === e.length && r.removeAnimator(o);\n                    }\n                  r.canvas.get(\"autoDraw\") || r.canvas.draw();\n                }\n              });\n            }),\n            (t.prototype.addAnimator = function (t) {\n              this.animators.push(t);\n            }),\n            (t.prototype.removeAnimator = function (t) {\n              this.animators.splice(t, 1);\n            }),\n            (t.prototype.isAnimating = function () {\n              return !!this.animators.length;\n            }),\n            (t.prototype.stop = function () {\n              this.timer && this.timer.stop();\n            }),\n            (t.prototype.stopAllAnimations = function (t) {\n              void 0 === t && (t = !0),\n                this.animators.forEach(function (e) {\n                  e.stopAnimate(t);\n                }),\n                (this.animators = []),\n                this.canvas.draw();\n            }),\n            (t.prototype.getTime = function () {\n              return this.current;\n            }),\n            t\n          );\n        })(),\n        Pt = n(86),\n        At = [\n          \"mousedown\",\n          \"mouseup\",\n          \"dblclick\",\n          \"mouseout\",\n          \"mouseover\",\n          \"mousemove\",\n          \"mouseleave\",\n          \"mouseenter\",\n          \"touchstart\",\n          \"touchmove\",\n          \"touchend\",\n          \"dragenter\",\n          \"dragover\",\n          \"dragleave\",\n          \"drop\",\n          \"contextmenu\",\n          \"mousewheel\",\n        ];\n      function It(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function Tt(t, e, n) {\n        if (n.bubbles) {\n          var r = void 0,\n            i = !1;\n          if (\n            (\"mouseenter\" === e\n              ? ((r = n.fromShape), (i = !0))\n              : \"mouseleave\" === e && ((i = !0), (r = n.toShape)),\n            t.isCanvas() && i)\n          )\n            return;\n          if (r && Object(a.g)(t, r)) return void (n.bubbles = !1);\n          (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var Nt = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.mousedownShape = null),\n              (this.mousedownPoint = null),\n              (this._eventCallback = function (t) {\n                var n = t.type;\n                e._triggerEvent(n, t);\n              }),\n              (this._onDocumentMove = function (t) {\n                if (\n                  e.canvas.get(\"el\") !== t.target &&\n                  (e.dragging || e.currentShape)\n                ) {\n                  var n = e._getPointInfo(t);\n                  e.dragging && e._emitEvent(\"drag\", t, n, e.draggingShape);\n                }\n              }),\n              (this._onDocumentMouseUp = function (t) {\n                if (e.canvas.get(\"el\") !== t.target && e.dragging) {\n                  var n = e._getPointInfo(t);\n                  e.draggingShape && e._emitEvent(\"drop\", t, n, null),\n                    e._emitEvent(\"dragend\", t, n, e.draggingShape),\n                    e._afterDrag(e.draggingShape, n, t);\n                }\n              }),\n              (this.canvas = t.canvas);\n          }\n          return (\n            (t.prototype.init = function () {\n              this._bindEvents();\n            }),\n            (t.prototype._bindEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(a.a)(At, function (n) {\n                e.addEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.addEventListener(\"mousemove\", this._onDocumentMove),\n                  document.addEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._clearEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(a.a)(At, function (n) {\n                e.removeEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.removeEventListener(\n                    \"mousemove\",\n                    this._onDocumentMove,\n                  ),\n                  document.removeEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, i, o) {\n              var a = new Pt.a(t, e);\n              return (\n                (a.fromShape = i),\n                (a.toShape = o),\n                (a.x = n.x),\n                (a.y = n.y),\n                (a.clientX = n.clientX),\n                (a.clientY = n.clientY),\n                a.propagationPath.push(r),\n                a\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              return this.canvas.getShape(t.x, t.y, e);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t],\n                o = !1;\n              if (i) i.call(this, n, r, e);\n              else {\n                var a = this.currentShape;\n                \"mouseenter\" === t || \"dragenter\" === t || \"mouseover\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"mouseenter\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"mouseleave\" === t || \"dragleave\" === t || \"mouseout\" === t\n                  ? ((o = !0),\n                    a && this._emitEvent(t, e, n, a, a, null),\n                    this._emitEvent(t, e, n, null, a, null),\n                    \"mouseleave\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n              if ((o || (this.currentShape = r), r && !r.get(\"destroyed\"))) {\n                var s = this.canvas;\n                s.get(\"el\").style.cursor = r.attr(\"cursor\") || s.get(\"cursor\");\n              }\n            }),\n            (t.prototype._onmousedown = function (t, e, n) {\n              0 === n.button &&\n                ((this.mousedownShape = e),\n                (this.mousedownPoint = t),\n                (this.mousedownTimeStamp = n.timeStamp)),\n                this._emitEvent(\"mousedown\", n, t, e, null, null);\n            }),\n            (t.prototype._emitMouseoverEvents = function (t, e, n, r) {\n              var i = this.canvas.get(\"el\");\n              n !== r &&\n                (n &&\n                  (this._emitEvent(\"mouseout\", t, e, n, n, r),\n                  this._emitEvent(\"mouseleave\", t, e, n, n, r),\n                  (r && !r.get(\"destroyed\")) ||\n                    (i.style.cursor = this.canvas.get(\"cursor\"))),\n                r &&\n                  (this._emitEvent(\"mouseover\", t, e, r, n, r),\n                  this._emitEvent(\"mouseenter\", t, e, r, n, r)));\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              r !== t && this._emitMouseoverEvents(n, e, t, r),\n                (this.currentShape = r);\n            }),\n            (t.prototype._onmouseup = function (t, e, n) {\n              if (0 === n.button) {\n                var r = this.draggingShape;\n                this.dragging\n                  ? (r && this._emitEvent(\"drop\", n, t, e),\n                    this._emitEvent(\"dragend\", n, t, r),\n                    this._afterDrag(r, t, n))\n                  : (this._emitEvent(\"mouseup\", n, t, e),\n                    e === this.mousedownShape &&\n                      this._emitEvent(\"click\", n, t, e),\n                    (this.mousedownShape = null),\n                    (this.mousedownPoint = null));\n              }\n            }),\n            (t.prototype._ondragover = function (t, e, n) {\n              n.preventDefault();\n              var r = this.currentShape;\n              this._emitDragoverEvents(n, t, r, e, !0);\n            }),\n            (t.prototype._onmousemove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.mousedownPoint;\n                if (a) {\n                  var s = this.mousedownShape,\n                    c = n.timeStamp - this.mousedownTimeStamp,\n                    u = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  c > 120 || u * u + h * h > 40\n                    ? s && s.get(\"draggable\")\n                      ? ((o = this.mousedownShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : (this._emitMouseoverEvents(n, t, i, e),\n                        this._emitEvent(\"mousemove\", n, t, e))\n                    : (this._emitMouseoverEvents(n, t, i, e),\n                      this._emitEvent(\"mousemove\", n, t, e));\n                } else\n                  this._emitMouseoverEvents(n, t, i, e),\n                    this._emitEvent(\"mousemove\", n, t, e);\n              }\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), It(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || Tt(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                It(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              this._clearEvents(),\n                (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.mousedownPoint = null),\n                (this.mousedownShape = null),\n                (this.mousedownTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        Bt = Object(i.a)(),\n        Lt = Bt && \"firefox\" === Bt.name,\n        Dt = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              n.initContainer(),\n              n.initDom(),\n              n.initEvents(),\n              n.initTimeline(),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              var e = t.prototype.getDefaultCfg.call(this);\n              return (e.cursor = \"default\"), (e.supportCSSTransform = !1), e;\n            }),\n            (e.prototype.initContainer = function () {\n              var t = this.get(\"container\");\n              Object(a.h)(t) &&\n                ((t = document.getElementById(t)), this.set(\"container\", t));\n            }),\n            (e.prototype.initDom = function () {\n              var t = this.createDom();\n              this.set(\"el\", t),\n                this.get(\"container\").appendChild(t),\n                this.setDOMSize(this.get(\"width\"), this.get(\"height\"));\n            }),\n            (e.prototype.initEvents = function () {\n              var t = new Nt({ canvas: this });\n              t.init(), this.set(\"eventController\", t);\n            }),\n            (e.prototype.initTimeline = function () {\n              var t = new Et(this);\n              this.set(\"timeline\", t);\n            }),\n            (e.prototype.setDOMSize = function (t, e) {\n              var n = this.get(\"el\");\n              a.c && ((n.style.width = t + \"px\"), (n.style.height = e + \"px\"));\n            }),\n            (e.prototype.changeSize = function (t, e) {\n              this.setDOMSize(t, e),\n                this.set(\"width\", t),\n                this.set(\"height\", e),\n                this.onCanvasChange(\"changeSize\");\n            }),\n            (e.prototype.getRenderer = function () {\n              return this.get(\"renderer\");\n            }),\n            (e.prototype.getCursor = function () {\n              return this.get(\"cursor\");\n            }),\n            (e.prototype.setCursor = function (t) {\n              this.set(\"cursor\", t);\n              var e = this.get(\"el\");\n              a.c && e && (e.style.cursor = t);\n            }),\n            (e.prototype.getPointByEvent = function (t) {\n              if (this.get(\"supportCSSTransform\")) {\n                if (Lt && !Object(a.e)(t.layerX) && t.layerX !== t.offsetX)\n                  return { x: t.layerX, y: t.layerY };\n                if (!Object(a.e)(t.offsetX))\n                  return { x: t.offsetX, y: t.offsetY };\n              }\n              var e = this.getClientByEvent(t),\n                n = e.x,\n                r = e.y;\n              return this.getPointByClient(n, r);\n            }),\n            (e.prototype.getClientByEvent = function (t) {\n              var e = t;\n              return (\n                t.touches &&\n                  (e =\n                    \"touchend\" === t.type ? t.changedTouches[0] : t.touches[0]),\n                { x: e.clientX, y: e.clientY }\n              );\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              var n = this.get(\"el\").getBoundingClientRect();\n              return { x: t - n.left, y: e - n.top };\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              var n = this.get(\"el\").getBoundingClientRect();\n              return { x: t + n.left, y: e + n.top };\n            }),\n            (e.prototype.draw = function () {}),\n            (e.prototype.removeDom = function () {\n              var t = this.get(\"el\");\n              t.parentNode.removeChild(t);\n            }),\n            (e.prototype.clearEvents = function () {\n              this.get(\"eventController\").destroy();\n            }),\n            (e.prototype.isCanvas = function () {\n              return !0;\n            }),\n            (e.prototype.getParent = function () {\n              return null;\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"timeline\");\n              this.get(\"destroyed\") ||\n                (this.clear(),\n                e && e.stop(),\n                this.clearEvents(),\n                this.removeDom(),\n                t.prototype.destroy.call(this));\n            }),\n            e\n          );\n        })(o.a);\n      e.a = Dt;\n    },\n    184: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(8);\n      function o(t, e, n) {\n        var r = t.getTotalMatrix();\n        if (r) {\n          var o = (function (t, e) {\n            if (e) {\n              var n = Object(i.invert)(e);\n              return Object(i.multiplyVec2)(n, t);\n            }\n            return t;\n          })([e, n, 1], r);\n          return [o[0], o[1]];\n        }\n        return [e, n];\n      }\n      function a(t, e, n) {\n        if (t.isCanvas && t.isCanvas()) return !0;\n        if (!Object(i.isAllowCapture)(t) || !1 === t.cfg.isInView) return !1;\n        if (t.cfg.clipShape) {\n          var r = o(t, e, n),\n            a = r[0],\n            s = r[1];\n          if (t.isClipped(a, s)) return !1;\n        }\n        var c = t.cfg.cacheCanvasBBox || t.getCanvasBBox();\n        return e >= c.minX && e <= c.maxX && n >= c.minY && n <= c.maxY;\n      }\n      var s = n(31),\n        c = n(52),\n        u = n(3),\n        h = n(40),\n        l = n(12),\n        f = n(38),\n        d = n.n(f);\n      function p(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function g(t, e, n) {\n        if (n.bubbles) {\n          t.isCanvas(),\n            0,\n            (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var v = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.panstartShape = null),\n              (this.panstartPoint = null),\n              (this.handleEvent = function (t) {\n                e.hammerRuntime.emit(\"origin_input:\" + t.type, t);\n              }),\n              (this.canvas = t.canvas),\n              this._initEvent();\n          }\n          return (\n            (t.prototype._initEvent = function () {\n              var t = this;\n              (this.hammerRuntime = new d.a({}, { inputClass: f.TouchInput })),\n                this.hammerRuntime.add(\n                  new d.a.Pan({ threshold: 0, pointers: 1 }),\n                ),\n                this.hammerRuntime\n                  .add(new d.a.Swipe())\n                  .recognizeWith(this.hammerRuntime.get(\"pan\")),\n                this.hammerRuntime.add(\n                  new d.a.Pinch({ threshold: 0, pointers: 2 }),\n                ),\n                this.hammerRuntime.add(\n                  new d.a.Tap({ event: \"dbltap\", taps: 2 }),\n                ),\n                this.hammerRuntime.add(new d.a.Tap()),\n                this.hammerRuntime.add(new d.a.Press({ time: 500 })),\n                this.hammerRuntime.on(\n                  \"panstart panmove panend pancancel\",\n                  function (e) {\n                    e.srcEvent.extra = e;\n                    var n = t._getPointInfo(e),\n                      r = t._getShape(n, e);\n                    (\"panend\" !== e.type && \"pancancel\" !== e.type) ||\n                      t._onpanend(n, r, e),\n                      \"panstart\" === e.type &&\n                        (t.dragging &&\n                          ((t.draggingShape = null),\n                          (t.dragging = !1),\n                          (t.panstartShape = null),\n                          (t.panstartPoint = null)),\n                        t._onpanstart(n, r, e)),\n                      \"panmove\" === e.type && t._onpanmove(n, r, e),\n                      (t.currentShape = r);\n                  },\n                ),\n                this.hammerRuntime.on(\n                  \"tap dbltap press swipe rotatestart rotatemove\",\n                  function (e) {\n                    t._emitMobileEvent(e.type, e);\n                  },\n                ),\n                this.hammerRuntime.on(\n                  \"pinchstart pinchmove pinchend pinchcancel\",\n                  function (e) {\n                    \"pinchend\" !== e.type && \"pinchcancel\" !== e.type\n                      ? ((e.srcEvent.extra = { scale: e.scale }),\n                        t._emitMobileEvent(e.type, e))\n                      : t._emitMobileEvent(e.type, e);\n                  },\n                );\n            }),\n            (t.prototype._emitMobileEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e);\n              this._emitEvent(t, e, n, r);\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, o, a) {\n              var s = new i.Event(t, e);\n              return (\n                (s.fromShape = o),\n                (s.toShape = a),\n                (s.x = n.x),\n                (s.y = n.y),\n                (s.clientX = n.clientX),\n                (s.clientY = n.clientY),\n                s.propagationPath.push(r),\n                s\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              var n = e.srcEvent;\n              return this.canvas.getShape(t.x, t.y, n);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t];\n              if (i) i.call(this, n, r, e);\n              else {\n                var o = this.currentShape;\n                \"panstart\" === t || \"dragenter\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"panstart\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"panend\" === t || \"dragleave\" === t\n                  ? (o && this._emitEvent(t, e, n, o, o, null),\n                    this._emitEvent(t, e, n, null, o, null),\n                    \"panend\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n            }),\n            (t.prototype._onpanstart = function (t, e, n) {\n              (this.panstartShape = e),\n                (this.panstartPoint = t),\n                (this.panstartTimeStamp = n.timeStamp),\n                this._emitEvent(\"panstart\", n, t, e, null, null);\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              this.currentShape = r;\n            }),\n            (t.prototype._onpanend = function (t, e, n) {\n              var r = this.draggingShape;\n              this.dragging &&\n                (r && this._emitEvent(\"drop\", n, t, e),\n                this._emitEvent(\"dragend\", n, t, r),\n                this._afterDrag(r, t, n)),\n                this._emitEvent(\"panend\", n, t, e),\n                (this.panstartShape = null),\n                (this.panstartPoint = null);\n            }),\n            (t.prototype._onpanmove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.panstartPoint;\n                if (a) {\n                  var s = this.panstartShape,\n                    c = n.timeStamp - this.panstartTimeStamp,\n                    u = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  (c > 120 || u * u + h * h > 40) &&\n                    (s && s.get(\"draggable\")\n                      ? ((o = this.panstartShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.panstartShape = null),\n                        (this.panstartPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.panstartShape = null),\n                        (this.panstartPoint = null))\n                      : this._emitEvent(\"panmove\", n, t, e));\n                }\n              }\n              this._emitEvent(\"panmove\", n, t, e);\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), p(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || g(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                p(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.panstartPoint = null),\n                (this.panstartShape = null),\n                (this.panstartTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        y = (function () {\n          function t() {}\n          return (\n            (t.prototype.set = function (t, e, n) {\n              switch (e) {\n                case \"strokeStyle\":\n                  t.setStrokeStyle(n);\n                  break;\n                case \"fillStyle\":\n                  t.setFillStyle(n);\n                  break;\n                case \"lineWidth\":\n                  t.setLineWidth(n);\n                  break;\n                case \"lineDash\":\n                  t.setLineDash(n);\n                  break;\n                case \"globalAlpha\":\n                  (n || 0 === n) && ((t.globalAlpha = n), t.setGlobalAlpha(n));\n                  break;\n                case \"fontSize\":\n                  t.setFontSize(n);\n                  break;\n                case \"textAlign\":\n                  t.setTextAlign(n);\n                  break;\n                case \"fontStyle\":\n                case \"font\":\n                  t.setFont(n);\n                  break;\n                case \"textBaseline\":\n                  t.setTextBaseline(n);\n                  break;\n                default:\n                  t[e] = n;\n              }\n              return !0;\n            }),\n            (t.prototype.get = function (t, e) {\n              return \"globalAlpha\" === e && void 0 === t[e]\n                ? 1\n                : \"function\" == typeof t[e]\n                ? t[e].bind(t)\n                : t[e];\n            }),\n            t\n          );\n        })(),\n        m = n(0),\n        b = n(120),\n        x = null;\n      var S = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            a = e.lineHeight,\n            s = e.font;\n          s || (s = Object(b.assembleFont)(e));\n          var c,\n            u = (function (t, e) {\n              var n = 0;\n              if (Object(m.isNil)(t) || \"\" === t) return n;\n              if (\n                (x.save(),\n                (x.font = e),\n                Object(m.isString)(t) && t.includes(\"\\n\"))\n              ) {\n                var r = t.split(\"\\n\");\n                Object(m.each)(r, function (t) {\n                  var e = x.measureText(t).width;\n                  n < e && (n = e);\n                });\n              } else n = x.measureText(t).width;\n              return x.restore(), n;\n            })(i, s);\n          if (u) {\n            var h = e.textAlign,\n              l = e.textBaseline,\n              f = Object(b.getTextHeight)(i, o, a),\n              d = { x: n, y: r - f };\n            h &&\n              (\"end\" === h || \"right\" === h\n                ? (d.x -= u)\n                : \"center\" === h && (d.x -= u / 2)),\n              l &&\n                (\"top\" === l ? (d.y += f) : \"middle\" === l && (d.y += f / 2)),\n              (c = { x: d.x, y: d.y, width: u, height: f });\n          } else c = { x: n, y: r, width: 0, height: 0 };\n          return c;\n        },\n        w = function (t) {\n          (x = t), Object(i.registerBBox)(\"text\", S);\n        },\n        O = n(89),\n        M = (function (t) {\n          function e(e) {\n            var n,\n              r,\n              i = t.call(this, e) || this,\n              o = i.get(\"context\");\n            return (\n              i.isMini() &&\n                (i.isMiniNative()\n                  ? Object(h.c)(i.get(\"container\"))\n                  : i.set(\"context\", new Proxy(o, new y())),\n                (n = o),\n                (r = i),\n                Object(O.b)(r),\n                w(n)),\n              i\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.isMiniNative = function () {\n              return \"mini-native\" === this.get(\"renderer\");\n            }),\n            (e.prototype.isMini = function () {\n              return this.get(\"renderer\").startsWith(\"mini\");\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              var e = t.prototype.getDefaultCfg.call(this);\n              return (\n                (e.renderer = \"canvas\"),\n                (e.autoDraw = !0),\n                (e.localRefresh = !0),\n                (e.refreshElements = []),\n                (e.clipView = !0),\n                (e.quickHit = !1),\n                (e.boundingClientRect = {\n                  width: 0,\n                  height: 0,\n                  left: 0,\n                  top: 0,\n                  bottom: 0,\n                  right: 0,\n                }),\n                e\n              );\n            }),\n            (e.prototype.initEvents = function () {\n              var t = new v({ canvas: this });\n              this.set(\"eventController\", t);\n            }),\n            (e.prototype.registerEventCallback = function (t) {\n              this.get(\"eventController\").handleEvent(t);\n            }),\n            (e.prototype.clearEvents = function () {\n              this.get(\"eventController\").destroy();\n            }),\n            (e.prototype.onCanvasChange = function (t) {\n              (\"attr\" !== t && \"sort\" !== t && \"changeSize\" !== t) ||\n                (this.set(\"refreshElements\", [this]), this.draw());\n            }),\n            (e.prototype.getShapeBase = function () {\n              return s;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return c.a;\n            }),\n            (e.prototype.getPixelRatio = function () {\n              var t = this.get(\"pixelRatio\") || Object(u.c)();\n              return t >= 1 ? Math.ceil(t) : 1;\n            }),\n            (e.prototype.getViewRange = function () {\n              return {\n                minX: 0,\n                minY: 0,\n                maxX: this.cfg.width,\n                maxY: this.cfg.height,\n              };\n            }),\n            (e.prototype.initDom = function () {\n              if (this.isMini()) {\n                var e = this.get(\"context\"),\n                  n = this.getPixelRatio();\n                n > 1 && e.scale(n, n);\n              } else t.prototype.initDom.call(this);\n            }),\n            (e.prototype.createDom = function () {\n              var t = document.createElement(\"canvas\"),\n                e = t.getContext(\"2d\");\n              return this.set(\"context\", e), t;\n            }),\n            (e.prototype.setDOMSize = function (e, n) {\n              t.prototype.setDOMSize.call(this, e, n);\n              var r = this.get(\"context\"),\n                i = this.get(\"el\"),\n                o = this.getPixelRatio();\n              (i.width = o * e), (i.height = o * n), o > 1 && r.scale(o, o);\n            }),\n            (e.prototype.clear = function () {\n              t.prototype.clear.call(this),\n                this._clearFrame(),\n                this.get(\"context\").clearRect(\n                  0,\n                  0,\n                  this.get(\"width\"),\n                  this.get(\"height\"),\n                );\n            }),\n            (e.prototype.getShape = function (e, n) {\n              return this.get(\"quickHit\")\n                ? (function t(e, n, r) {\n                    if (!a(e, n, r)) return null;\n                    for (\n                      var i = null, s = e.getChildren(), c = s.length - 1;\n                      c >= 0;\n                      c--\n                    ) {\n                      var u = s[c];\n                      if (u.isGroup()) i = t(u, n, r);\n                      else if (a(u, n, r)) {\n                        var h = u,\n                          l = o(u, n, r),\n                          f = l[0],\n                          d = l[1];\n                        h.isInShape(f, d) && (i = u);\n                      }\n                      if (i) break;\n                    }\n                    return i;\n                  })(this, e, n)\n                : t.prototype.getShape.call(this, e, n, null);\n            }),\n            (e.prototype._getRefreshRegion = function () {\n              var t,\n                e = this.get(\"refreshElements\"),\n                n = this.getViewRange();\n              e.length && e[0] === this\n                ? (t = n)\n                : (t = Object(l.f)(e)) &&\n                  ((t.minX = Math.floor(t.minX)),\n                  (t.minY = Math.floor(t.minY)),\n                  (t.maxX = Math.ceil(t.maxX)),\n                  (t.maxY = Math.ceil(t.maxY)),\n                  (t.maxY += 1),\n                  this.get(\"clipView\") && (t = Object(l.g)(t, n)));\n              return t;\n            }),\n            (e.prototype._clearFrame = function () {\n              var t = this.get(\"drawFrame\");\n              t &&\n                (Object(h.a)(t),\n                this.set(\"drawFrame\", null),\n                this.set(\"refreshElements\", []));\n            }),\n            (e.prototype.draw = function () {\n              var t = this.get(\"drawFrame\");\n              (this.get(\"autoDraw\") && t) || this._startDraw();\n            }),\n            (e.prototype._startDraw = function () {\n              var t = this,\n                e = this.get(\"drawFrame\");\n              e ||\n                ((e = Object(h.b)(function () {\n                  t.get(\"localRefresh\") ? t._drawRegion() : t._drawAll(),\n                    Object(h.a)(e),\n                    t.set(\"drawFrame\", null);\n                })),\n                this.set(\"drawFrame\", e));\n            }),\n            (e.prototype._drawRegion = function () {\n              var t = this.get(\"context\"),\n                e = this.get(\"refreshElements\"),\n                n = this.getChildren(),\n                r = this._getRefreshRegion();\n              r\n                ? (t.clearRect(\n                    r.minX,\n                    r.minY,\n                    r.maxX - r.minX,\n                    r.maxY - r.minY,\n                  ),\n                  t.save(),\n                  t.beginPath(),\n                  t.rect(r.minX, r.minY, r.maxX - r.minX, r.maxY - r.minY),\n                  t.clip(),\n                  Object(l.a)(t, this),\n                  Object(l.b)(this, n, r),\n                  Object(l.d)(t, n, r),\n                  t.restore())\n                : e.length && Object(l.c)(e),\n                Object(u.b)(e, function (t) {\n                  t.get(\"hasChanged\") && t.set(\"hasChanged\", !1);\n                }),\n                this.isMini() && !this.isMiniNative() && t.draw(!0),\n                this.set(\"refreshElements\", []);\n            }),\n            (e.prototype._drawAll = function () {\n              var t = this.get(\"context\"),\n                e = this.getChildren();\n              t.clearRect(0, 0, this.get(\"width\"), this.get(\"height\")),\n                Object(l.a)(t, this),\n                Object(l.d)(t, e),\n                this.isMini() && !this.isMiniNative() && t.draw(!0),\n                this.set(\"refreshElements\", []);\n            }),\n            (e.prototype.skipDraw = function () {}),\n            (e.prototype.refreshElement = function (t) {\n              this.get(\"refreshElements\").push(t);\n            }),\n            (e.prototype.getPointByEvent = function (e) {\n              if (this.isMini()) {\n                var n = this.getClientByEvent(e),\n                  r = n.x,\n                  i = n.y;\n                return this.getPointByClient(r, i);\n              }\n              return t.prototype.getPointByEvent.call(this, e);\n            }),\n            (e.prototype.getClientByEvent = function (t) {\n              var e = t.srcEvent,\n                n = null;\n              return (\n                e.touches &&\n                  (n =\n                    \"touchend\" === e.type ? e.changedTouches[0] : e.touches[0]),\n                n ? { x: n.clientX, y: n.clientY } : {}\n              );\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              if (this.isMini()) {\n                var n = this.get(\"boundingClientRect\");\n                return { x: t + n.left, y: e + n.top };\n              }\n              var r = this.get(\"el\").getBoundingClientRect();\n              return { x: t - r.left, y: e - r.top };\n            }),\n            (e.prototype.removeDom = function () {\n              this.isMini() || t.prototype.removeDom.call(this);\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              if (this.isMini()) {\n                var n = this.get(\"boundingClientRect\");\n                return { x: t + n.left, y: e + n.top };\n              }\n              var r = this.get(\"el\").getBoundingClientRect();\n              return { x: t + r.left, y: e + r.top };\n            }),\n            e\n          );\n        })(i.AbstractCanvas);\n      e.a = M;\n    },\n    185: function (t, e, n) {\n      \"use strict\";\n      (function (t) {\n        n.d(e, \"a\", function () {\n          return f;\n        });\n        var r = function (t, e, n) {\n            if (n || 2 === arguments.length)\n              for (var r, i = 0, o = e.length; i < o; i++)\n                (!r && i in e) ||\n                  (r || (r = Array.prototype.slice.call(e, 0, i)),\n                  (r[i] = e[i]));\n            return t.concat(r || Array.prototype.slice.call(e));\n          },\n          i = function (t, e, n) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.type = \"browser\");\n          },\n          o = function (e) {\n            (this.version = e),\n              (this.type = \"node\"),\n              (this.name = \"node\"),\n              (this.os = t.platform);\n          },\n          a = function (t, e, n, r) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.bot = r),\n              (this.type = \"bot-device\");\n          },\n          s = function () {\n            (this.type = \"bot\"),\n              (this.bot = !0),\n              (this.name = \"bot\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          c = function () {\n            (this.type = \"react-native\"),\n              (this.name = \"react-native\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          u =\n            /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/,\n          h = [\n            [\"aol\", /AOLShield\\/([0-9\\._]+)/],\n            [\"edge\", /Edge\\/([0-9\\._]+)/],\n            [\"edge-ios\", /EdgiOS\\/([0-9\\._]+)/],\n            [\"yandexbrowser\", /YaBrowser\\/([0-9\\._]+)/],\n            [\"kakaotalk\", /KAKAOTALK\\s([0-9\\.]+)/],\n            [\"samsung\", /SamsungBrowser\\/([0-9\\.]+)/],\n            [\"silk\", /\\bSilk\\/([0-9._-]+)\\b/],\n            [\"miui\", /MiuiBrowser\\/([0-9\\.]+)$/],\n            [\"beaker\", /BeakerBrowser\\/([0-9\\.]+)/],\n            [\"edge-chromium\", /EdgA?\\/([0-9\\.]+)/],\n            [\n              \"chromium-webview\",\n              /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n            ],\n            [\"chrome\", /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"phantomjs\", /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"crios\", /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"firefox\", /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"fxios\", /FxiOS\\/([0-9\\.]+)/],\n            [\"opera-mini\", /Opera Mini.*Version\\/([0-9\\.]+)/],\n            [\"opera\", /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"opera\", /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"pie\", /^Microsoft Pocket Internet Explorer\\/(\\d+\\.\\d+)$/],\n            [\n              \"pie\",\n              /^Mozilla\\/\\d\\.\\d+\\s\\(compatible;\\s(?:MSP?IE|MSInternet Explorer) (\\d+\\.\\d+);.*Windows CE.*\\)$/,\n            ],\n            [\"netfront\", /^Mozilla\\/\\d\\.\\d+.*NetFront\\/(\\d.\\d)/],\n            [\"ie\", /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n            [\"ie\", /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n            [\"ie\", /MSIE\\s(7\\.0)/],\n            [\"bb10\", /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n            [\"android\", /Android\\s([0-9\\.]+)/],\n            [\"ios\", /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n            [\"safari\", /Version\\/([0-9\\._]+).*Safari/],\n            [\"facebook\", /FB[AS]V\\/([0-9\\.]+)/],\n            [\"instagram\", /Instagram\\s([0-9\\.]+)/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n            [\"curl\", /^curl\\/([0-9\\.]+)$/],\n            [\n              \"searchbot\",\n              /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,\n            ],\n          ],\n          l = [\n            [\"iOS\", /iP(hone|od|ad)/],\n            [\"Android OS\", /Android/],\n            [\"BlackBerry OS\", /BlackBerry|BB10/],\n            [\"Windows Mobile\", /IEMobile/],\n            [\"Amazon OS\", /Kindle/],\n            [\"Windows 3.11\", /Win16/],\n            [\"Windows 95\", /(Windows 95)|(Win95)|(Windows_95)/],\n            [\"Windows 98\", /(Windows 98)|(Win98)/],\n            [\"Windows 2000\", /(Windows NT 5.0)|(Windows 2000)/],\n            [\"Windows XP\", /(Windows NT 5.1)|(Windows XP)/],\n            [\"Windows Server 2003\", /(Windows NT 5.2)/],\n            [\"Windows Vista\", /(Windows NT 6.0)/],\n            [\"Windows 7\", /(Windows NT 6.1)/],\n            [\"Windows 8\", /(Windows NT 6.2)/],\n            [\"Windows 8.1\", /(Windows NT 6.3)/],\n            [\"Windows 10\", /(Windows NT 10.0)/],\n            [\"Windows ME\", /Windows ME/],\n            [\n              \"Windows CE\",\n              /Windows CE|WinCE|Microsoft Pocket Internet Explorer/,\n            ],\n            [\"Open BSD\", /OpenBSD/],\n            [\"Sun OS\", /SunOS/],\n            [\"Chrome OS\", /CrOS/],\n            [\"Linux\", /(Linux)|(X11)/],\n            [\"Mac OS\", /(Mac_PowerPC)|(Macintosh)/],\n            [\"QNX\", /QNX/],\n            [\"BeOS\", /BeOS/],\n            [\"OS/2\", /OS\\/2/],\n          ];\n        function f(e) {\n          return e\n            ? p(e)\n            : \"undefined\" == typeof document &&\n              \"undefined\" != typeof navigator &&\n              \"ReactNative\" === navigator.product\n            ? new c()\n            : \"undefined\" != typeof navigator\n            ? p(navigator.userAgent)\n            : void 0 !== t && t.version\n            ? new o(t.version.slice(1))\n            : null;\n        }\n        function d(t) {\n          return (\n            \"\" !== t &&\n            h.reduce(function (e, n) {\n              var r = n[0],\n                i = n[1];\n              if (e) return e;\n              var o = i.exec(t);\n              return !!o && [r, o];\n            }, !1)\n          );\n        }\n        function p(t) {\n          var e = d(t);\n          if (!e) return null;\n          var n = e[0],\n            o = e[1];\n          if (\"searchbot\" === n) return new s();\n          var c = o[1] && o[1].split(\".\").join(\"_\").split(\"_\").slice(0, 3);\n          c\n            ? c.length < 3 &&\n              (c = r(\n                r([], c, !0),\n                (function (t) {\n                  for (var e = [], n = 0; n < t; n++) e.push(\"0\");\n                  return e;\n                })(3 - c.length),\n                !0,\n              ))\n            : (c = []);\n          var h = c.join(\".\"),\n            f = (function (t) {\n              for (var e = 0, n = l.length; e < n; e++) {\n                var r = l[e],\n                  i = r[0];\n                if (r[1].exec(t)) return i;\n              }\n              return null;\n            })(t),\n            p = u.exec(t);\n          return p && p[1] ? new a(n, h, f, p[1]) : new i(n, h, f);\n        }\n      }).call(this, n(206));\n    },\n    2: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"d\", function () {\n        return Le;\n      }),\n        n.d(e, \"g\", function () {\n          return _e;\n        }),\n        n.d(e, \"f\", function () {\n          return De;\n        }),\n        n.d(e, \"l\", function () {\n          return We;\n        }),\n        n.d(e, \"j\", function () {\n          return Ve;\n        }),\n        n.d(e, \"b\", function () {\n          return Se;\n        }),\n        n.d(e, \"h\", function () {\n          return Ye;\n        }),\n        n.d(e, \"k\", function () {\n          return qe;\n        }),\n        n.d(e, \"i\", function () {\n          return Ge;\n        }),\n        n.d(e, \"c\", function () {\n          return Xe;\n        }),\n        n.d(e, \"a\", function () {\n          return ze;\n        }),\n        n.d(e, \"e\", function () {\n          return He;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"compare\", function () {\n          return m;\n        }),\n        n.d(r, \"getLineIntersect\", function () {\n          return x;\n        }),\n        n.d(r, \"getRectIntersectByPoint\", function () {\n          return S;\n        }),\n        n.d(r, \"getCircleIntersectByPoint\", function () {\n          return w;\n        }),\n        n.d(r, \"getEllipseIntersectByPoint\", function () {\n          return O;\n        }),\n        n.d(r, \"applyMatrix\", function () {\n          return M;\n        }),\n        n.d(r, \"invertMatrix\", function () {\n          return k;\n        }),\n        n.d(r, \"getCircleCenterByPoints\", function () {\n          return j;\n        }),\n        n.d(r, \"distance\", function () {\n          return C;\n        }),\n        n.d(r, \"scaleMatrix\", function () {\n          return E;\n        }),\n        n.d(r, \"floydWarshall\", function () {\n          return P;\n        }),\n        n.d(r, \"getAdjMatrix\", function () {\n          return A;\n        }),\n        n.d(r, \"translate\", function () {\n          return I;\n        }),\n        n.d(r, \"move\", function () {\n          return T;\n        }),\n        n.d(r, \"scale\", function () {\n          return N;\n        }),\n        n.d(r, \"rotate\", function () {\n          return B;\n        }),\n        n.d(r, \"getDegree\", function () {\n          return L;\n        }),\n        n.d(r, \"isPointInPolygon\", function () {\n          return _;\n        }),\n        n.d(r, \"intersectBBox\", function () {\n          return R;\n        }),\n        n.d(r, \"isPolygonsIntersect\", function () {\n          return F;\n        }),\n        n.d(r, \"Line\", function () {\n          return Y;\n        }),\n        n.d(r, \"getBBoxBoundLine\", function () {\n          return X;\n        }),\n        n.d(r, \"itemIntersectByLine\", function () {\n          return W;\n        }),\n        n.d(r, \"fractionToLine\", function () {\n          return q;\n        }),\n        n.d(r, \"getPointsCenter\", function () {\n          return V;\n        }),\n        n.d(r, \"squareDist\", function () {\n          return G;\n        }),\n        n.d(r, \"pointLineSquareDist\", function () {\n          return H;\n        }),\n        n.d(r, \"isPointsOverlap\", function () {\n          return U;\n        }),\n        n.d(r, \"pointRectSquareDist\", function () {\n          return Z;\n        }),\n        n.d(r, \"pointLineDistance\", function () {\n          return K;\n        });\n      var i = {};\n      n.r(i),\n        n.d(i, \"getBBox\", function () {\n          return ut;\n        }),\n        n.d(i, \"getLoopCfgs\", function () {\n          return ht;\n        }),\n        n.d(i, \"getLabelPosition\", function () {\n          return lt;\n        }),\n        n.d(i, \"traverseTree\", function () {\n          return dt;\n        }),\n        n.d(i, \"traverseTreeUp\", function () {\n          return pt;\n        }),\n        n.d(i, \"getLetterWidth\", function () {\n          return gt;\n        }),\n        n.d(i, \"getTextSize\", function () {\n          return vt;\n        }),\n        n.d(i, \"plainCombosToTrees\", function () {\n          return yt;\n        }),\n        n.d(i, \"reconstructTree\", function () {\n          return mt;\n        }),\n        n.d(i, \"getComboBBox\", function () {\n          return bt;\n        }),\n        n.d(i, \"shouldRefreshEdge\", function () {\n          return xt;\n        }),\n        n.d(i, \"cloneBesidesImg\", function () {\n          return St;\n        });\n      var o = {};\n      n.r(o),\n        n.d(o, \"uniqueId\", function () {\n          return jt;\n        }),\n        n.d(o, \"formatPadding\", function () {\n          return Ct;\n        }),\n        n.d(o, \"cloneEvent\", function () {\n          return Et;\n        }),\n        n.d(o, \"isViewportChanged\", function () {\n          return Pt;\n        }),\n        n.d(o, \"isNaN\", function () {\n          return At;\n        }),\n        n.d(o, \"calculationItemsBBox\", function () {\n          return It;\n        }),\n        n.d(o, \"processParallelEdges\", function () {\n          return Tt;\n        });\n      var a = {};\n      n.r(a),\n        n.d(a, \"getSpline\", function () {\n          return te;\n        }),\n        n.d(a, \"getControlPoint\", function () {\n          return ee;\n        }),\n        n.d(a, \"pointsToPolygon\", function () {\n          return ne;\n        }),\n        n.d(a, \"pathToPoints\", function () {\n          return re;\n        }),\n        n.d(a, \"getClosedSpline\", function () {\n          return ie;\n        }),\n        n.d(a, \"roundedHull\", function () {\n          return ce;\n        }),\n        n.d(a, \"paddedHull\", function () {\n          return ue;\n        });\n      var s = {};\n      n.r(s),\n        n.d(s, \"defaultSubjectColors\", function () {\n          return Re;\n        });\n      var c = n(0),\n        u = {\n          getDefaultCfg: function () {\n            return {};\n          },\n          getEvents: function () {\n            return {};\n          },\n          updateCfg: function (t) {\n            return Object.assign(this, t), !0;\n          },\n          shouldBegin: function () {\n            return !0;\n          },\n          shouldUpdate: function () {\n            return !0;\n          },\n          shouldEnd: function () {\n            return !0;\n          },\n          bind: function (t) {\n            var e = this.events;\n            (this.graph = t),\n              (\"drag-canvas\" !== this.type &&\n                \"brush-select\" !== this.type &&\n                \"lasso-select\" !== this.type) ||\n                t.get(\"canvas\").set(\"draggable\", !0),\n              Object(c.each)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            (\"drag-canvas\" !== this.type &&\n              \"brush-select\" !== this.type &&\n              \"lasso-select\" !== this.type) ||\n              t.get(\"canvas\").set(\"draggable\", !1),\n              Object(c.each)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n          get: function (t) {\n            return this[t];\n          },\n          set: function (t, e) {\n            return (this[t] = e), this;\n          },\n        },\n        h = (function () {\n          function t() {}\n          return (\n            (t.registerBehavior = function (e, n) {\n              if (!n)\n                throw new Error(\n                  \"please specify handler for this behavior: \".concat(e),\n                );\n              var r = Object(c.clone)(u);\n              Object.assign(r, n);\n              var i = function (t) {\n                var e = this;\n                Object.assign(this, this.getDefaultCfg(), t);\n                var n = this.getEvents();\n                this.events = null;\n                var r = {};\n                n &&\n                  (Object(c.each)(n, function (t, n) {\n                    r[n] = Object(c.wrapBehavior)(e, t);\n                  }),\n                  (this.events = r));\n              };\n              (i.prototype = r), (t.types[e] = i);\n            }),\n            (t.hasBehavior = function (e) {\n              return !!t.types[e];\n            }),\n            (t.getBehavior = function (e) {\n              return t.types[e];\n            }),\n            (t.types = {}),\n            t\n          );\n        })(),\n        l = h,\n        f = n(1),\n        d = n(91),\n        p = n(97),\n        g = n(4),\n        v = n(35),\n        y = g.a.transform,\n        m = function (t) {\n          return function (e, n) {\n            return e[t] - n[t];\n          };\n        },\n        b = function (t, e, n) {\n          return t >= e && t <= n;\n        },\n        x = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = e.x - t.x,\n            s = e.y - t.y,\n            c = r.x - n.x,\n            u = r.y - n.y,\n            h = a * u - s * c,\n            l = 1 / h;\n          if (h * h > 1e-4 * (a * a + s * s) * (c * c + u * u)) {\n            var f = (i * u - o * c) * l,\n              d = (i * s - o * a) * l;\n            return b(f, 0, 1) && b(d, 0, 1)\n              ? { x: t.x + f * a, y: t.y + f * s }\n              : null;\n          }\n          return null;\n        },\n        S = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.width,\n            o = t.height,\n            a = [],\n            s = { x: n + i / 2, y: r + o / 2 };\n          a.push({ x: n, y: r }),\n            a.push({ x: n + i, y: r }),\n            a.push({ x: n + i, y: r + o }),\n            a.push({ x: n, y: r + o }),\n            a.push({ x: n, y: r });\n          for (\n            var c = null, u = 1;\n            u < a.length && !(c = x(a[u - 1], a[u], s, e));\n            u++\n          );\n          return c;\n        },\n        w = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.r,\n            o = e.x - n,\n            a = e.y - r;\n          if (Math.sqrt(o * o + a * a) < i) return null;\n          var s = Math.sign(o),\n            c = Math.sign(a),\n            u = Math.atan(a / o);\n          return {\n            x: n + Math.abs(i * Math.cos(u)) * s,\n            y: r + Math.abs(i * Math.sin(u)) * c,\n          };\n        },\n        O = function (t, e) {\n          var n = t.rx,\n            r = t.ry,\n            i = t.x,\n            o = t.y,\n            a = e.x - i,\n            s = e.y - o,\n            c = Math.atan2(s / r, a / n);\n          return (\n            c < 0 && (c += 2 * Math.PI),\n            { x: i + n * Math.cos(c), y: o + r * Math.sin(c) }\n          );\n        },\n        M = function (t, e, n) {\n          void 0 === n && (n = 1);\n          var r = [t.x, t.y, n];\n          return (\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            g.d.transformMat3(r, r, e),\n            { x: r[0], y: r[1] }\n          );\n        },\n        k = function (t, e, n) {\n          void 0 === n && (n = 1),\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = g.b.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], e);\n          r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var i = [t.x, t.y, n];\n          return g.d.transformMat3(i, i, r), { x: i[0], y: i[1] };\n        },\n        j = function (t, e, n) {\n          var r = t.x - e.x,\n            i = t.y - e.y,\n            o = t.x - n.x,\n            a = t.y - n.y,\n            s = (t.x * t.x - e.x * e.x - e.y * e.y + t.y * t.y) / 2,\n            c = (t.x * t.x - n.x * n.x - n.y * n.y + t.y * t.y) / 2,\n            u = i * o - r * a;\n          return { x: -(a * s - i * c) / u, y: -(r * c - o * s) / u };\n        },\n        C = function (t, e) {\n          var n = t.x - e.x,\n            r = t.y - e.y;\n          return Math.sqrt(n * n + r * r);\n        },\n        E = function (t, e) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              var r = [];\n              t.forEach(function (t) {\n                r.push(t * e);\n              }),\n                n.push(r);\n            }),\n            n\n          );\n        },\n        P = function (t) {\n          for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n            e[r] = [];\n            for (var i = 0; i < n; i += 1)\n              r === i\n                ? (e[r][i] = 0)\n                : 0 !== t[r][i] && t[r][i]\n                ? (e[r][i] = t[r][i])\n                : (e[r][i] = 1 / 0);\n          }\n          for (var o = 0; o < n; o += 1)\n            for (r = 0; r < n; r += 1)\n              for (i = 0; i < n; i += 1)\n                e[r][i] > e[r][o] + e[o][i] && (e[r][i] = e[r][o] + e[o][i]);\n          return e;\n        },\n        A = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (i[a][s] = 1), e || (i[s][a] = 1);\n              }),\n            i\n          );\n        },\n        I = function (t, e) {\n          t.translate(e.x, e.y);\n        },\n        T = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = t.getCanvasBBox(),\n            i = e.x - r.minX,\n            o = e.y - r.minY,\n            a = y(n, [[\"t\", i, o]]);\n          t.setMatrix(a);\n        },\n        N = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e;\n          Object(c.isArray)(e) || (r = [e, e]),\n            Object(c.isArray)(e) && 1 === e.length && (r = [e[0], e[0]]),\n            (n = y(n, [[\"s\", r[0], r[1]]])),\n            t.setMatrix(n);\n        },\n        B = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            (n = y(n, [[\"r\", e]])),\n            t.setMatrix(n);\n        },\n        L = function (t, e, n) {\n          for (var r = [], i = 0; i < t; i++) r[i] = 0;\n          return (\n            n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r\n          );\n        };\n      function D(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      var _ = function (t, e, n) {\n          var r = !1,\n            i = t.length;\n          function o(t) {\n            return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n          }\n          if (i <= 2) return !1;\n          for (var a = 0; a < i; a++) {\n            var s = t[a],\n              c = t[(a + 1) % i];\n            if (D(s, c, [e, n])) return !0;\n            o(s[1] - n) > 0 != o(c[1] - n) > 0 &&\n              o(e - ((n - s[1]) * (s[0] - c[0])) / (s[1] - c[1]) - s[0]) < 0 &&\n              (r = !r);\n          }\n          return r;\n        },\n        R = function (t, e) {\n          return !(\n            e.minX > t.maxX ||\n            e.maxX < t.minX ||\n            e.minY > t.maxY ||\n            e.maxY < t.minY\n          );\n        },\n        F = function (t, e) {\n          var n = function (t) {\n              var e = t.map(function (t) {\n                  return t[0];\n                }),\n                n = t.map(function (t) {\n                  return t[1];\n                });\n              return {\n                minX: Math.min.apply(null, e),\n                maxX: Math.max.apply(null, e),\n                minY: Math.min.apply(null, n),\n                maxY: Math.max.apply(null, n),\n              };\n            },\n            r = function (t) {\n              for (var e = [], n = t.length, r = 0; r < n - 1; r++) {\n                var i = t[r],\n                  o = t[r + 1];\n                e.push({\n                  from: { x: i[0], y: i[1] },\n                  to: { x: o[0], y: o[1] },\n                });\n              }\n              if (e.length > 1) {\n                var a = t[0],\n                  s = t[n - 1];\n                e.push({\n                  from: { x: s[0], y: s[1] },\n                  to: { x: a[0], y: a[1] },\n                });\n              }\n              return e;\n            };\n          if (t.length < 2 || e.length < 2) return !1;\n          var i = n(t),\n            o = n(e);\n          if (!R(i, o)) return !1;\n          var a = !1;\n          if (\n            (Object(c.each)(e, function (e) {\n              if (_(t, e[0], e[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          if (\n            (Object(c.each)(t, function (t) {\n              if (_(e, t[0], t[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          var s = r(t),\n            u = r(e),\n            h = !1;\n          return (\n            Object(c.each)(u, function (t) {\n              if (\n                (function (t, e) {\n                  var n = !1;\n                  return (\n                    Object(c.each)(t, function (t) {\n                      if (x(t.from, t.to, e.from, e.to)) return (n = !0), !1;\n                    }),\n                    n\n                  );\n                })(s, t)\n              )\n                return (h = !0), !1;\n            }),\n            h\n          );\n        },\n        Y = (function () {\n          function t(t, e, n, r) {\n            (this.x1 = t), (this.y1 = e), (this.x2 = n), (this.y2 = r);\n          }\n          return (\n            (t.prototype.getBBox = function () {\n              var t = Math.min(this.x1, this.x2),\n                e = Math.min(this.y1, this.y2),\n                n = Math.max(this.x1, this.x2),\n                r = Math.max(this.y1, this.y2);\n              return {\n                x: t,\n                y: e,\n                minX: t,\n                minY: e,\n                maxX: n,\n                maxY: r,\n                width: n - t,\n                height: r - e,\n              };\n            }),\n            t\n          );\n        })(),\n        X = function (t, e) {\n          return {\n            top: [t.minX, t.minY, t.maxX, t.minY],\n            left: [t.minX, t.minY, t.minX, t.maxY],\n            bottom: [t.minX, t.maxY, t.maxX, t.maxY],\n            right: [t.maxX, t.minY, t.maxX, t.maxY],\n          }[e];\n        },\n        z = function (t, e) {\n          var n = (e.x2 - e.x1) * (t.y1 - e.y1) - (e.y2 - e.y1) * (t.x1 - e.x1),\n            r = (t.x2 - t.x1) * (t.y1 - e.y1) - (t.y2 - t.y1) * (t.x1 - e.x1),\n            i = (e.y2 - e.y1) * (t.x2 - t.x1) - (e.x2 - e.x1) * (t.y2 - t.y1);\n          if (i) {\n            var o = n / i,\n              a = r / i;\n            if (o >= 0 && o <= 1 && a >= 0 && a <= 1) return o;\n          }\n          return Number.POSITIVE_INFINITY;\n        },\n        W = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = 0,\n              o = [],\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = X(r, n[a]),\n              c = s[0],\n              u = s[1],\n              h = s[2],\n              l = s[3];\n            (o[a] = x(\n              { x: e.x1, y: e.y1 },\n              { x: e.x2, y: e.y2 },\n              { x: c, y: u },\n              { x: h, y: l },\n            )),\n              o[a] && (i += 1);\n          }\n          return [o, i];\n        },\n        q = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = Number.POSITIVE_INFINITY,\n              o = 0,\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = X(r, n[a]),\n              c = s[0],\n              u = s[1],\n              h = s[2],\n              l = s[3],\n              f = z(e, new Y(c, u, h, l));\n            (f = Math.abs(f - 0.5)) >= 0 &&\n              f <= 1 &&\n              ((o += 1), (i = f < i ? f : i));\n          }\n          return 0 === o ? -1 : i;\n        },\n        V = function (t) {\n          var e = 0,\n            n = 0;\n          if (t.length > 0) {\n            for (var r = 0, i = t; r < i.length; r++) {\n              var o = i[r];\n              (e += o.x), (n += o.y);\n            }\n            (e /= t.length), (n /= t.length);\n          }\n          return { x: e, y: n };\n        },\n        G = function (t, e) {\n          return Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2);\n        },\n        H = function (t, e) {\n          var n,\n            r = e.x1,\n            i = e.y1,\n            o = e.x2 - r,\n            a = e.y2 - i,\n            s = t.x - r,\n            c = t.y - i,\n            u = s * o + c * a;\n          n =\n            u <= 0 || (u = (s = o - s) * o + (c = a - c) * a) <= 0\n              ? 0\n              : (u * u) / (o * o + a * a);\n          var h = s * s + c * c - n;\n          return h < 0 && (h = 0), h;\n        },\n        U = function (t, e, n) {\n          return (\n            void 0 === n && (n = 0.001),\n            Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2) < Math.pow(n, 2)\n          );\n        },\n        Z = function (t, e) {\n          var n = t.x < e.x,\n            r = t.x > e.x + e.width,\n            i = t.y > e.y + e.height,\n            o = t.y < e.y;\n          if (!(n || r || i || o)) return 0;\n          if (i && !n && !r) return Math.pow(e.y + e.height - t.y, 2);\n          if (o && !n && !r) return Math.pow(t.y - e.y, 2);\n          if (n && !i && !o) return Math.pow(e.x - t.x, 2);\n          if (r && !i && !o) return Math.pow(e.x + e.width - t.x, 2);\n          var a = Math.min(Math.abs(e.x - t.x), Math.abs(e.x + e.width - t.x)),\n            s = Math.min(Math.abs(e.y - t.y), Math.abs(e.y + e.height - t.y));\n          return a * a + s * s;\n        },\n        K = function (t, e) {\n          var n = t[0],\n            r = t[1],\n            i = t[2],\n            o = t[3],\n            a = e.x,\n            s = e.y,\n            c = [i - n, o - r];\n          if (g.c.exactEquals(c, [0, 0])) return NaN;\n          var u = [-c[1], c[0]];\n          g.c.normalize(u, u);\n          var h = [a - n, s - r];\n          return Math.abs(g.c.dot(h, u));\n        },\n        $ = \"rgb(95, 149, 255)\",\n        Q = \"rgb(253, 253, 253)\",\n        J = \"rgb(247, 250, 255)\",\n        tt = \"rgb(224, 224, 224)\",\n        et = \"rgb(224, 224, 224)\",\n        nt = {\n          version: \"0.0.2\",\n          rootContainerClassName: \"root-container\",\n          nodeContainerClassName: \"node-container\",\n          edgeContainerClassName: \"edge-container\",\n          comboContainerClassName: \"combo-container\",\n          delegateContainerClassName: \"delegate-container\",\n          defaultLoopPosition: \"top\",\n          nodeLabel: {\n            style: {\n              fill: \"#000\",\n              fontSize: 12,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n            },\n            offset: 4,\n          },\n          defaultNode: {\n            type: \"circle\",\n            style: { lineWidth: 1, stroke: $, fill: \"rgb(239, 244, 255)\" },\n            size: 20,\n            color: $,\n            linkPoints: { size: 8, lineWidth: 1, fill: J, stroke: $ },\n          },\n          nodeStateStyles: {\n            active: {\n              fill: J,\n              stroke: $,\n              lineWidth: 2,\n              shadowColor: $,\n              shadowBlur: 10,\n            },\n            selected: {\n              fill: \"rgb(255, 255, 255)\",\n              stroke: $,\n              lineWidth: 4,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              fill: \"rgb(223, 234, 255)\",\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: {\n              fill: \"rgb(247, 250, 255)\",\n              stroke: \"rgb(191, 213, 255)\",\n              lineWidth: 1,\n            },\n            disable: {\n              fill: \"rgb(250, 250, 250)\",\n              stroke: \"rgb(224, 224, 224)\",\n              lineWidth: 1,\n            },\n          },\n          edgeLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n          },\n          defaultEdge: {\n            type: \"line\",\n            size: 1,\n            style: { stroke: tt, lineAppendWidth: 2 },\n            color: tt,\n          },\n          edgeStateStyles: {\n            active: { stroke: $, lineWidth: 1 },\n            selected: {\n              stroke: $,\n              lineWidth: 2,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: $,\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(234, 234, 234)\", lineWidth: 1 },\n            disable: { stroke: \"rgb(245, 245, 245)\", lineWidth: 1 },\n          },\n          comboLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n            refY: 10,\n            refX: 10,\n          },\n          defaultCombo: {\n            type: \"circle\",\n            style: {\n              fill: Q,\n              lineWidth: 1,\n              stroke: et,\n              r: 5,\n              width: 20,\n              height: 10,\n            },\n            size: [20, 5],\n            color: et,\n            padding: [25, 20, 15, 20],\n          },\n          comboStateStyles: {\n            active: { stroke: $, lineWidth: 1, fill: \"rgb(247, 250, 255)\" },\n            selected: {\n              stroke: $,\n              lineWidth: 2,\n              fill: Q,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              fill: Q,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(224, 224, 224)\", fill: Q, lineWidth: 1 },\n            disable: {\n              stroke: \"rgb(234, 234, 234)\",\n              fill: \"rgb(250, 250, 250)\",\n              lineWidth: 1,\n            },\n          },\n          delegateStyle: {\n            fill: \"#F3F9FF\",\n            fillOpacity: 0.5,\n            stroke: \"#1890FF\",\n            strokeOpacity: 0.9,\n            lineDash: [5, 5],\n          },\n        },\n        rt = {\n          \" \": 0.3329986572265625,\n          a: 0.5589996337890625,\n          A: 0.6569992065429687,\n          b: 0.58599853515625,\n          B: 0.6769989013671875,\n          c: 0.5469985961914062,\n          C: 0.7279998779296875,\n          d: 0.58599853515625,\n          D: 0.705999755859375,\n          e: 0.554998779296875,\n          E: 0.63699951171875,\n          f: 0.37299957275390627,\n          F: 0.5769989013671875,\n          g: 0.5909988403320312,\n          G: 0.7479995727539063,\n          h: 0.555999755859375,\n          H: 0.7199996948242188,\n          i: 0.255999755859375,\n          I: 0.23699951171875,\n          j: 0.26699981689453123,\n          J: 0.5169998168945312,\n          k: 0.5289993286132812,\n          K: 0.6899993896484375,\n          l: 0.23499908447265624,\n          L: 0.5879989624023437,\n          m: 0.854998779296875,\n          M: 0.8819992065429687,\n          n: 0.5589996337890625,\n          N: 0.7189987182617188,\n          o: 0.58599853515625,\n          O: 0.7669998168945312,\n          p: 0.58599853515625,\n          P: 0.6419998168945312,\n          q: 0.58599853515625,\n          Q: 0.7669998168945312,\n          r: 0.3649993896484375,\n          R: 0.6759994506835938,\n          s: 0.504998779296875,\n          S: 0.6319992065429687,\n          t: 0.354998779296875,\n          T: 0.6189987182617187,\n          u: 0.5599990844726562,\n          U: 0.7139999389648437,\n          v: 0.48199920654296874,\n          V: 0.6389999389648438,\n          w: 0.754998779296875,\n          W: 0.929998779296875,\n          x: 0.5089996337890625,\n          X: 0.63699951171875,\n          y: 0.4959991455078125,\n          Y: 0.66199951171875,\n          z: 0.48699951171875,\n          Z: 0.6239990234375,\n          0: 0.6,\n          1: 0.40099945068359377,\n          2: 0.6,\n          3: 0.6,\n          4: 0.6,\n          5: 0.6,\n          6: 0.6,\n          7: 0.5469985961914062,\n          8: 0.6,\n          9: 0.6,\n          \"[\": 0.3329986572265625,\n          \"]\": 0.3329986572265625,\n          \",\": 0.26399993896484375,\n          \".\": 0.26399993896484375,\n          \";\": 0.26399993896484375,\n          \":\": 0.26399993896484375,\n          \"{\": 0.3329986572265625,\n          \"}\": 0.3329986572265625,\n          \"\\\\\": 0.5,\n          \"|\": 0.19499969482421875,\n          \"=\": 0.604998779296875,\n          \"+\": 0.604998779296875,\n          \"-\": 0.604998779296875,\n          _: 0.5,\n          \"`\": 0.3329986572265625,\n          \" ~\": 0.8329986572265625,\n          \"!\": 0.3329986572265625,\n          \"@\": 0.8579986572265625,\n          \"#\": 0.6,\n          $: 0.6,\n          \"%\": 0.9699996948242188,\n          \"^\": 0.517999267578125,\n          \"&\": 0.7259994506835937,\n          \"*\": 0.505999755859375,\n          \"(\": 0.3329986572265625,\n          \")\": 0.3329986572265625,\n          \"<\": 0.604998779296875,\n          \">\": 0.604998779296875,\n          \"/\": 0.5,\n          \"?\": 0.53699951171875,\n        },\n        it = Math.PI,\n        ot = Math.sin,\n        at = Math.cos,\n        st = ot(it / 8),\n        ct = at(it / 8),\n        ut = function (t, e) {\n          var n = t.getBBox(),\n            r = { x: n.minX, y: n.minY },\n            i = { x: n.maxX, y: n.maxY };\n          if (e) {\n            var o = e.getMatrix();\n            o || (o = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n              (r = M(r, o)),\n              (i = M(i, o));\n          }\n          var a = r.x,\n            s = r.y,\n            c = i.x,\n            u = i.y;\n          return {\n            x: a,\n            y: s,\n            minX: a,\n            minY: s,\n            maxX: c,\n            maxY: u,\n            width: c - a,\n            height: u - s,\n          };\n        },\n        ht = function (t) {\n          var e = t.sourceNode || t.targetNode,\n            n = e.get(\"group\").getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e.getKeyShape().getBBox(),\n            i = t.loopCfg || {},\n            o = i.dist || 2 * Math.max(r.width, r.height),\n            a = i.position || nt.defaultLoopPosition,\n            s = [n[6], n[7]],\n            c = [t.startPoint.x, t.startPoint.y],\n            u = [t.endPoint.x, t.endPoint.y],\n            h = r.height / 2,\n            l = r.height / 2,\n            f = h * st,\n            d = h * ct,\n            p = l * st,\n            v = l * ct;\n          if (c[0] === u[0] && c[1] === u[1]) {\n            switch (a) {\n              case \"top\":\n                (c = [s[0] - f, s[1] - d]), (u = [s[0] + p, s[1] - v]);\n                break;\n              case \"top-right\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] + (f = h * st), s[1] - (d = h * ct)]),\n                  (u = [s[0] + (v = l * ct), s[1] - (p = l * st)]);\n                break;\n              case \"right\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] + (d = h * ct), s[1] - (f = h * st)]),\n                  (u = [s[0] + (v = l * ct), s[1] + (p = l * st)]);\n                break;\n              case \"bottom-right\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] + (d = h * ct), s[1] + (f = h * st)]),\n                  (u = [s[0] + (p = l * st), s[1] + (v = l * ct)]);\n                break;\n              case \"bottom\":\n                (h = r.height / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] + (f = h * st), s[1] + (d = h * ct)]),\n                  (u = [s[0] - (p = l * st), s[1] + (v = l * ct)]);\n                break;\n              case \"bottom-left\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (f = h * st), s[1] + (d = h * ct)]),\n                  (u = [s[0] - (v = l * ct), s[1] + (p = l * st)]);\n                break;\n              case \"left\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (d = h * ct), s[1] + (f = h * st)]),\n                  (u = [s[0] - (v = l * ct), s[1] - (p = l * st)]);\n                break;\n              case \"top-left\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] - (d = h * ct), s[1] - (f = h * st)]),\n                  (u = [s[0] - (p = l * st), s[1] - (v = l * ct)]);\n                break;\n              default:\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (f = h * st), s[1] - (d = h * ct)]),\n                  (u = [s[0] + (p = l * st), s[1] - (v = l * ct)]);\n            }\n            if (!1 === i.clockwise) {\n              var y = [c[0], c[1]];\n              (c = [u[0], u[1]]), (u = [y[0], y[1]]);\n            }\n          }\n          var m = [c[0] - s[0], c[1] - s[1]],\n            b = (h + o) / h,\n            x = (l + o) / l;\n          !1 === i.clockwise && ((b = (l + o) / l), (x = (h + o) / h));\n          var S = g.c.scale([0, 0], m, b),\n            w = [s[0] + S[0], s[1] + S[1]],\n            O = [u[0] - s[0], u[1] - s[1]],\n            M = g.c.scale([0, 0], O, x),\n            k = [s[0] + M[0], s[1] + M[1]];\n          return (\n            (t.startPoint = { x: c[0], y: c[1] }),\n            (t.endPoint = { x: u[0], y: u[1] }),\n            (t.controlPoints = [\n              { x: w[0], y: w[1] },\n              { x: k[0], y: k[1] },\n            ]),\n            t\n          );\n        },\n        lt = function (t, e, n, r, i) {\n          var o = [],\n            a = t.getPoint(e);\n          if (null === a) return { x: 0, y: 0, angle: 0 };\n          if (e < 1e-4) o = t.getStartTangent().reverse();\n          else if (e > 0.9999) o = t.getEndTangent();\n          else {\n            var s = t.getPoint(e + 1e-4);\n            o.push([a.x, a.y]), o.push([s.x, s.y]);\n          }\n          var c = Math.atan2(o[1][1] - o[0][1], o[1][0] - o[0][0]);\n          if (\n            (c < 0 && (c += 2 * it),\n            n && ((a.x += at(c) * n), (a.y += ot(c) * n)),\n            r)\n          ) {\n            var u = c - it / 2;\n            c > 0.5 * it && c < 1.5 * it && (u -= it),\n              (a.x += at(u) * r),\n              (a.y += ot(u) * r);\n          }\n          var h = { x: a.x, y: a.y, angle: c };\n          return i\n            ? (c > 0.5 * it && c < 1.5 * it && (c -= it),\n              Object(f.a)({ rotate: c }, h))\n            : h;\n        },\n        ft = function t(e, n) {\n          if (!1 === n(e)) return !1;\n          if (e && e.children)\n            for (var r = e.children.length - 1; r >= 0; r--)\n              if (!t(e.children[r], n)) return !1;\n          return !0;\n        },\n        dt = function (t, e) {\n          \"function\" == typeof e && ft(t, e);\n        },\n        pt = function (t, e) {\n          \"function\" == typeof e &&\n            (function t(e, n) {\n              if (e && e.children)\n                for (var r = e.children.length - 1; r >= 0; r--)\n                  if (!t(e.children[r], n)) return;\n              return !1 !== n(e);\n            })(t, e);\n        },\n        gt = function (t, e) {\n          return e * (rt[t] || 1);\n        },\n        vt = function (t, e) {\n          var n = 0,\n            r = new RegExp(\"[一-龥]+\");\n          return (\n            t.split(\"\").forEach(function (t) {\n              r.test(t) ? (n += e) : (n += gt(t, e));\n            }),\n            [n, e]\n          );\n        },\n        yt = function (t, e) {\n          var n = [],\n            r = {},\n            i = {};\n          t.forEach(function (t) {\n            i[t.id] = t;\n          }),\n            t.forEach(function (t, e) {\n              var o = Object(c.clone)(t);\n              (o.itemType = \"combo\"),\n                (o.children = void 0),\n                o.parentId === o.id\n                  ? (console.warn(\n                      \"The parentId for combo \".concat(\n                        o.id,\n                        \" can not be the same as the combo's id\",\n                      ),\n                    ),\n                    delete o.parentId)\n                  : o.parentId &&\n                    !i[o.parentId] &&\n                    (console.warn(\n                      \"The parent combo for combo \".concat(\n                        o.id,\n                        \" does not exist!\",\n                      ),\n                    ),\n                    delete o.parentId);\n              var a = r[o.id];\n              if (a) {\n                if (\n                  ((o.children = a.children), (r[o.id] = o), !(a = o).parentId)\n                )\n                  return void n.push(a);\n                var s = r[a.parentId];\n                if (s) s.children ? s.children.push(o) : (s.children = [o]);\n                else {\n                  var u = { id: a.parentId, children: [a] };\n                  (r[a.parentId] = u), (r[o.id] = o);\n                }\n              } else if (Object(c.isString)(t.parentId)) {\n                var h = r[t.parentId];\n                if (h)\n                  h.children ? h.children.push(o) : (h.children = [o]),\n                    (r[o.id] = o);\n                else {\n                  var l = { id: t.parentId, children: [o] };\n                  (r[l.id] = l), (r[o.id] = o);\n                }\n              } else n.push(o), (r[o.id] = o);\n            });\n          var o = {};\n          (e || []).forEach(function (t) {\n            o[t.id] = t;\n            var e = r[t.comboId];\n            if (e) {\n              var n = { id: t.id, comboId: t.comboId };\n              e.children ? e.children.push(n) : (e.children = [n]),\n                (n.itemType = \"node\"),\n                (r[t.id] = n);\n            }\n          });\n          var a = 0;\n          return (\n            n.forEach(function (t) {\n              (t.depth = a + 10),\n                ft(t, function (t) {\n                  var e,\n                    n = r[t.id].itemType;\n                  (e = \"node\" === n ? r[t.comboId] : r[t.parentId]),\n                    (t.depth = e && \"node\" === n ? a + 1 : a + 10),\n                    a < t.depth && (a = t.depth);\n                  var i = o[t.id];\n                  return i && (i.depth = t.depth), !0;\n                });\n            }),\n            n\n          );\n        },\n        mt = function (t, e, n) {\n          var r,\n            i = t,\n            o = { root: { children: t } },\n            a = !1,\n            s = \"root\";\n          (t || []).forEach(function (t) {\n            if (!a)\n              return t.id === e\n                ? ((r = t),\n                  \"combo\" === t.itemType ? (r.parentId = n) : (r.comboId = n),\n                  void (a = !0))\n                : void dt(t, function (t) {\n                    return (\n                      (o[t.id] = { children: t.children }),\n                      (i = o[t.parentId || t.comboId || \"root\"].children),\n                      !t ||\n                        (!t.removed && e !== t.id) ||\n                        !i ||\n                        ((s = t.parentId || t.comboId || \"root\"),\n                        (r = t),\n                        \"combo\" === t.itemType\n                          ? (r.parentId = n)\n                          : (r.comboId = n),\n                        (a = !0),\n                        !1)\n                    );\n                  });\n          });\n          var c = (i = o[s].children) ? i.indexOf(r) : -1;\n          if (\n            (c > -1 && i.splice(c, 1),\n            a ||\n              ((r = { id: e, itemType: \"node\", comboId: n }),\n              (o[e] = { children: void 0 })),\n            e)\n          ) {\n            var u = !1;\n            if (n) {\n              var h = 0;\n              (t || []).forEach(function (t) {\n                u ||\n                  dt(t, function (t) {\n                    return (\n                      n !== t.id ||\n                      ((u = !0),\n                      t.children ? t.children.push(r) : (t.children = [r]),\n                      (h = t.depth),\n                      \"node\" === r.itemType\n                        ? (r.depth = h + 2)\n                        : (r.depth = h + 1),\n                      !1)\n                    );\n                  });\n              });\n            } else (n && u) || \"node\" === r.itemType || t.push(r);\n            var l = r.depth;\n            dt(r, function (t) {\n              return (\n                \"node\" === t.itemType ? (l += 2) : (l += 1), (t.depth = l), !0\n              );\n            });\n          }\n          return t;\n        },\n        bt = function (t, e) {\n          var n = {\n            minX: 1 / 0,\n            minY: 1 / 0,\n            maxX: -1 / 0,\n            maxY: -1 / 0,\n            x: void 0,\n            y: void 0,\n            width: void 0,\n            height: void 0,\n            centerX: void 0,\n            centerY: void 0,\n          };\n          return t && 0 !== t.length\n            ? (t.forEach(function (t) {\n                var r = e.findById(t.id);\n                if (r && r.isVisible()) {\n                  r.set(\"bboxCanvasCache\", void 0);\n                  var i = r.getCanvasBBox();\n                  i.x && n.minX > i.minX && (n.minX = i.minX),\n                    i.y && n.minY > i.minY && (n.minY = i.minY),\n                    i.x && n.maxX < i.maxX && (n.maxX = i.maxX),\n                    i.y && n.maxY < i.maxY && (n.maxY = i.maxY);\n                }\n              }),\n              (n.x = (n.minX + n.maxX) / 2),\n              (n.y = (n.minY + n.maxY) / 2),\n              (n.width = n.maxX - n.minX),\n              (n.height = n.maxY - n.minY),\n              (n.centerX = (n.minX + n.maxX) / 2),\n              (n.centerY = (n.minY + n.maxY) / 2),\n              Object.keys(n).forEach(function (t) {\n                (n[t] !== 1 / 0 && n[t] !== -1 / 0) || (n[t] = void 0);\n              }),\n              n)\n            : n;\n        },\n        xt = function (t) {\n          var e =\n            Object(c.isNumber)(t.x) ||\n            Object(c.isNumber)(t.y) ||\n            t.type ||\n            t.anchorPoints ||\n            t.size;\n          return (\n            t.style &&\n              (e =\n                e ||\n                Object(c.isNumber)(t.style.r) ||\n                Object(c.isNumber)(t.style.width) ||\n                Object(c.isNumber)(t.style.height) ||\n                Object(c.isNumber)(t.style.rx) ||\n                Object(c.isNumber)(t.style.ry)),\n            e\n          );\n        },\n        St = function (t) {\n          var e = {};\n          return (\n            Object.keys(t).forEach(function (n) {\n              var r = t[n];\n              if (Object(c.isObject)(r)) {\n                var i = {};\n                Object.keys(r).forEach(function (t) {\n                  var e = r[t];\n                  (\"img\" !== t || Object(c.isString)(e)) &&\n                    (i[t] = Object(c.clone)(e));\n                }),\n                  (e[n] = i);\n              } else e[n] = Object(c.clone)(r);\n            }),\n            e\n          );\n        },\n        wt = function (t) {\n          if (!t)\n            return console.error(\"G6 Error Tips: the data must be defined\"), !1;\n          var e = t.nodes,\n            n = t.edges,\n            r = t.combos,\n            i = void 0 === r ? [] : r;\n          if (!e && !n) {\n            var o = !0;\n            return (\n              dt(t, function (t) {\n                return !!Object(c.isString)(t.id) || ((o = !1), !1);\n              }),\n              o\n            );\n          }\n          var a = (e || []).find(function (t) {\n            return !Object(c.isString)(t.id);\n          });\n          if (a)\n            return (\n              console.warn(\n                \"G6 Warning Tips: missing 'id' property, or %c\".concat(\n                  a.id,\n                  \"%c is not a string.\",\n                ),\n                \"font-size: 20px; color: red;\",\n                \"\",\n              ),\n              !1\n            );\n          var s = (e || []).map(function (t) {\n              return t.id;\n            }),\n            u = i.map(function (t) {\n              return t.id;\n            }),\n            h = Object(f.f)(Object(f.f)([], s, !0), u, !0),\n            l = (n || []).find(function (t) {\n              return !h.includes(t.source) || !h.includes(t.target);\n            });\n          return (\n            !l ||\n            (console.warn(\n              \"G6 Warning Tips: The source %c\"\n                .concat(l.source, \"%c or the target %c\")\n                .concat(\n                  l.target,\n                  \"%c of the edge do not exist in the nodes or combos.\",\n                ),\n              \"font-size: 20px; color: red;\",\n              \"\",\n              \"font-size: 20px; color: red;\",\n              \"\",\n            ),\n            !1)\n          );\n        },\n        Ot = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.destroyed = !1),\n              (this.modes = t.get(\"modes\") || { default: [] }),\n              this.formatModes(),\n              (this.mode = t.get(\"defaultMode\") || \"default\"),\n              (this.currentBehaves = []),\n              this.setMode(this.mode);\n          }\n          return (\n            (t.prototype.formatModes = function () {\n              var t = this.modes;\n              Object(c.each)(t, function (t) {\n                Object(c.each)(t, function (e, n) {\n                  Object(c.isString)(e) && (t[n] = { type: e });\n                });\n              });\n            }),\n            (t.prototype.setBehaviors = function (t) {\n              var e,\n                n = this.graph,\n                r = this.modes[t],\n                i = [];\n              Object(c.each)(r || [], function (t) {\n                var r = h.getBehavior(t.type || t);\n                r && (e = new r(t)) && (e.bind(n), i.push(e));\n              }),\n                (this.currentBehaves = i);\n            }),\n            (t.mergeBehaviors = function (t, e) {\n              return (\n                Object(c.each)(e, function (e) {\n                  t.indexOf(e) < 0 &&\n                    (Object(c.isString)(e) && (e = { type: e }), t.push(e));\n                }),\n                t\n              );\n            }),\n            (t.filterBehaviors = function (t, e) {\n              var n = [];\n              return (\n                t.forEach(function (t) {\n                  var r = \"\";\n                  (r = Object(c.isString)(t) ? t : t.type),\n                    e.indexOf(r) < 0 && n.push(t);\n                }),\n                n\n              );\n            }),\n            (t.prototype.setMode = function (t) {\n              var e = this.modes,\n                n = this.graph,\n                r = t;\n              e[r] &&\n                (n.emit(\"beforemodechange\", { mode: t }),\n                Object(c.each)(this.currentBehaves, function (t) {\n                  t.delegate && t.delegate.remove(), t.unbind(n);\n                }),\n                this.setBehaviors(r),\n                n.emit(\"aftermodechange\", { mode: t }),\n                (this.mode = t));\n            }),\n            (t.prototype.getMode = function () {\n              return this.mode;\n            }),\n            (t.prototype.manipulateBehaviors = function (e, n, r) {\n              var i,\n                o = this;\n              if (((i = Object(c.isArray)(e) ? e : [e]), Object(c.isArray)(n)))\n                return (\n                  Object(c.each)(n, function (e) {\n                    o.modes[e]\n                      ? (o.modes[e] = r\n                          ? t.mergeBehaviors(o.modes[e] || [], i)\n                          : t.filterBehaviors(o.modes[e] || [], i))\n                      : r && (o.modes[e] = i);\n                  }),\n                  this\n                );\n              var a = n;\n              return (\n                n || (a = this.mode),\n                this.modes[a] || (r && (this.modes[a] = i)),\n                (this.modes[a] = r\n                  ? t.mergeBehaviors(this.modes[a] || [], i)\n                  : t.filterBehaviors(this.modes[a] || [], i)),\n                this.setMode(this.mode),\n                this\n              );\n            }),\n            (t.prototype.updateBehavior = function (t, e, n) {\n              Object(c.isString)(t) && (t = { type: t });\n              var r = [];\n              if (n && n !== this.mode && \"default\" !== n) {\n                if (!(r = this.modes[n]) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                var i = r.length;\n                for (a = 0; a < i; a++) {\n                  if ((s = r[a]).type === t.type || s === t.type)\n                    return (\n                      s === t.type && (s = { type: s }),\n                      Object.assign(s, e),\n                      (r[a] = s),\n                      this\n                    );\n                  a === i - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              } else {\n                if (!(r = this.currentBehaves) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                for (var o = r.length, a = 0; a < o; a++) {\n                  var s;\n                  if ((s = r[a]).type === t.type) return s.updateCfg(e), this;\n                  a === o - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              }\n              return this;\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.modes = null),\n                (this.currentBehaves = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Mt = n(54),\n        kt = (function (t) {\n          function e(e, n) {\n            var r = t.call(this, e, n) || this;\n            return (\n              (r.item = n.item),\n              (r.canvasX = n.canvasX),\n              (r.canvasY = n.canvasY),\n              (r.detail = n.detail),\n              r\n            );\n          }\n          return Object(f.c)(e, t), e;\n        })(n(8).Event),\n        jt = function (t) {\n          return \"\".concat(t, \"-\").concat(Math.random()).concat(Date.now());\n        },\n        Ct = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          if (Object(c.isNumber)(t)) e = n = r = i = t;\n          else if (Object(c.isString)(t)) {\n            e = n = r = i = parseInt(t, 10);\n          } else\n            Object(c.isArray)(t) &&\n              ((e = t[0]),\n              (r = Object(c.isNil)(t[1]) ? t[0] : t[1]),\n              (i = Object(c.isNil)(t[2]) ? t[0] : t[2]),\n              (n = Object(c.isNil)(t[3]) ? r : t[3]));\n          return [e, r, i, n];\n        },\n        Et = function (t) {\n          var e = new kt(t.type, t);\n          return (\n            (e.clientX = t.clientX),\n            (e.clientY = t.clientY),\n            (e.x = t.x),\n            (e.y = t.y),\n            (e.target = t.target),\n            (e.currentTarget = t.currentTarget),\n            (e.bubbles = !0),\n            (e.item = t.item),\n            e\n          );\n        },\n        Pt = function (t) {\n          if (!t) return !1;\n          for (var e = [1, 0, 0, 0, 1, 0, 0, 0, 1], n = 0; n < 9; n++)\n            if (t[n] !== e[n]) return !0;\n          return !1;\n        },\n        At = function (t) {\n          return Number.isNaN(Number(t));\n        },\n        It = function (t) {\n          for (\n            var e = 1 / 0, n = -1 / 0, r = 1 / 0, i = -1 / 0, o = 0;\n            o < t.length;\n            o++\n          ) {\n            var a = t[o].getBBox(),\n              s = a.minX,\n              c = a.minY,\n              u = a.maxX,\n              h = a.maxY;\n            s < e && (e = s),\n              c < r && (r = c),\n              u > n && (n = u),\n              h > i && (i = h);\n          }\n          return {\n            x: Math.floor(e),\n            y: Math.floor(r),\n            width: Math.ceil(n) - Math.floor(e),\n            height: Math.ceil(i) - Math.floor(r),\n            minX: e,\n            minY: r,\n            maxX: n,\n            maxY: i,\n          };\n        },\n        Tt = function (t, e, n, r, i) {\n          void 0 === e && (e = 15),\n            void 0 === n && (n = \"quadratic\"),\n            void 0 === r && (r = void 0),\n            void 0 === i && (i = void 0);\n          for (\n            var o = t.length,\n              a = 2 * e,\n              s = [\n                \"top\",\n                \"top-right\",\n                \"right\",\n                \"bottom-right\",\n                \"bottom\",\n                \"bottom-left\",\n                \"left\",\n                \"top-left\",\n              ],\n              c = {},\n              u = [],\n              h = {},\n              l = 0;\n            l < o;\n            l++\n          ) {\n            var f = t[l],\n              d = f.source,\n              p = f.target,\n              g = \"\".concat(d, \"-\").concat(p);\n            if (!u[l]) {\n              c[g] || (c[g] = []), (u[l] = !0), c[g].push(f);\n              for (var v = 0; v < o; v++)\n                if (l !== v) {\n                  var y = t[v],\n                    m = y.source,\n                    b = y.target;\n                  u[v] ||\n                    (d === b && p === m\n                      ? (c[g].push(y),\n                        (u[v] = !0),\n                        (h[\n                          \"\"\n                            .concat(m, \"|\")\n                            .concat(b, \"|\")\n                            .concat(c[g].length - 1)\n                        ] = !0))\n                      : d === m && p === b && (c[g].push(y), (u[v] = !0)));\n                }\n            }\n          }\n          for (var x in c)\n            for (var S = c[x], w = S.length, O = 0; O < w; O++) {\n              var M = S[O];\n              if (M.source !== M.target)\n                if (1 === w && r && M.source !== M.target) M.type = r;\n                else {\n                  M.type = n;\n                  var k =\n                    (O % 2 == 0 ? 1 : -1) *\n                    (h[\"\".concat(M.source, \"|\").concat(M.target, \"|\").concat(O)]\n                      ? -1\n                      : 1);\n                  M.curveOffset =\n                    w % 2 == 1\n                      ? k * Math.ceil(O / 2) * a\n                      : k * (Math.floor(O / 2) * a + e);\n                }\n              else\n                i && (M.type = i),\n                  (M.loopCfg = {\n                    position: s[O % 8],\n                    dist: 20 * Math.floor(O / 8) + 50,\n                  });\n            }\n          return t;\n        },\n        Nt = (function () {\n          function t(t) {\n            (this.destroyed = !1), (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.getViewCenter = function () {\n              var t = this.getFormatPadding(),\n                e = this.graph,\n                n = this.graph.get(\"width\"),\n                r = e.get(\"height\");\n              return {\n                x: (n - t[1] - t[3]) / 2 + t[3],\n                y: (r - t[0] - t[2]) / 2 + t[0],\n              };\n            }),\n            (t.prototype.fitCenter = function () {\n              var t = this.graph,\n                e = t.get(\"group\");\n              e.resetMatrix();\n              var n = e.getCanvasBBox();\n              if (0 !== n.width && 0 !== n.height) {\n                var r = this.getViewCenter(),\n                  i = n.x + n.width / 2,\n                  o = n.y + n.height / 2;\n                t.translate(r.x - i, r.y - o);\n              }\n            }),\n            (t.prototype.fitView = function () {\n              var t = this.graph,\n                e = this.getFormatPadding(),\n                n = t.get(\"width\"),\n                r = t.get(\"height\"),\n                i = t.get(\"group\");\n              i.resetMatrix();\n              var o = i.getCanvasBBox();\n              if (0 !== o.width && 0 !== o.height) {\n                var a = this.getViewCenter(),\n                  s = o.x + o.width / 2,\n                  c = o.y + o.height / 2;\n                t.translate(a.x - s, a.y - c);\n                var u = (n - e[1] - e[3]) / o.width,\n                  h = (r - e[0] - e[2]) / o.height,\n                  l = u;\n                u > h && (l = h), t.zoom(l, a);\n              }\n            }),\n            (t.prototype.getFormatPadding = function () {\n              var t = this.graph.get(\"fitViewPadding\");\n              return Ct(t);\n            }),\n            (t.prototype.focusPoint = function (t, e, n) {\n              var r = this,\n                i = this.getViewCenter(),\n                o = this.getPointByCanvas(i.x, i.y),\n                a = this.graph.get(\"group\").getMatrix();\n              if ((a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]), e)) {\n                var s = (o.x - t.x) * a[0],\n                  c = (o.y - t.y) * a[4],\n                  u = 0,\n                  h = 0,\n                  l = 0,\n                  d = 0;\n                this.graph.get(\"canvas\").animate(\n                  function (t) {\n                    (l = s * t),\n                      (d = c * t),\n                      r.graph.translate(l - u, d - h),\n                      (u = l),\n                      (h = d);\n                  },\n                  Object(f.a)({}, n),\n                );\n              } else\n                this.graph.translate((o.x - t.x) * a[0], (o.y - t.y) * a[4]);\n            }),\n            (t.prototype.getPointByCanvas = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), k({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.getPointByClient = function (t, e) {\n              var n = this.graph.get(\"canvas\").getPointByClient(t, e);\n              return this.getPointByCanvas(n.x, n.y);\n            }),\n            (t.prototype.getClientByPoint = function (t, e) {\n              var n = this.graph.get(\"canvas\"),\n                r = this.getCanvasByPoint(t, e),\n                i = n.getClientByPoint(r.x, r.y);\n              return { x: i.x, y: i.y };\n            }),\n            (t.prototype.getCanvasByPoint = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), M({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.focus = function (t, e, n) {\n              if ((Object(c.isString)(t) && (t = this.graph.findById(t)), t)) {\n                var r = 0,\n                  i = 0;\n                if (t.getType && \"edge\" === t.getType()) {\n                  var o = t.getSource().get(\"group\").getMatrix(),\n                    a = t.getTarget().get(\"group\").getMatrix();\n                  o && a\n                    ? ((r = (o[6] + a[6]) / 2), (i = (o[7] + a[7]) / 2))\n                    : (o || a) &&\n                      ((r = o ? o[6] : a[6]), (i = o ? o[7] : a[7]));\n                } else {\n                  var s = t.get(\"group\").getMatrix();\n                  s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                    (r = s[6]),\n                    (i = s[7]);\n                }\n                this.focusPoint({ x: r, y: i }, e, n);\n              }\n            }),\n            (t.prototype.changeSize = function (t, e) {\n              var n = this.graph;\n              if (!Object(c.isNumber)(t) || !Object(c.isNumber)(e))\n                throw Error(\n                  \"invalid canvas width & height, please make sure width & height type is number\",\n                );\n              n.set({ width: t, height: e }),\n                n.get(\"canvas\").changeSize(t, e),\n                n.get(\"plugins\").forEach(function (r) {\n                  if (r.get(\"gridContainer\")) {\n                    var i = n.get(\"minZoom\");\n                    Object(Mt.b)(r.get(\"container\"), {\n                      width: \"\".concat(t, \"px\"),\n                      height: \"\".concat(e, \"px\"),\n                    }),\n                      Object(Mt.b)(r.get(\"gridContainer\"), {\n                        width: \"\".concat(t / i, \"px\"),\n                        height: \"\".concat(e / i, \"px\"),\n                        left: 0,\n                        top: 0,\n                      });\n                  }\n                });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !1);\n            }),\n            t\n          );\n        })();\n      function Bt(t) {\n        return (Bt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Lt(t) {\n        if (\"string\" != typeof t) return t;\n        var e = function (t) {\n            if (\"string\" != typeof t) return t;\n            try {\n              return JSON.parse(t.trim());\n            } catch (e) {\n              return t.trim();\n            }\n          },\n          n = e(t);\n        if (\"string\" != typeof n) return n;\n        for (\n          var r = function (t) {\n              return t[t.length - 1];\n            },\n            i = t.trim(),\n            o = [],\n            a = [],\n            s = function () {\n              for (var t = [], e = 0; e < arguments.length; e++)\n                t[e] = arguments[e];\n              return t.some(function (t) {\n                return r(a) === t;\n              });\n            },\n            c = null,\n            u = 0,\n            h = \"\";\n          u < i.length;\n\n        ) {\n          var l = i[u],\n            f = s('\"', \"'\");\n          if (f || l.trim()) {\n            var d = \"\\\\\" === i[u - 1],\n              p = s(\"}\"),\n              g = s(\"]\"),\n              v = s(\",\"),\n              y = r(o);\n            if (f)\n              if (r(a) !== l || d) h += l;\n              else {\n                a.pop();\n                var m = e(h);\n                y.push(m), (c = m), (h = \"\");\n              }\n            else if (g && \",\" === l) h && (y.push(e(h)), (h = \"\"));\n            else if (p && \":\" === l) a.push(\",\"), h && (y.push(h), (h = \"\"));\n            else if (v && \",\" === l) h && (y.push(e(h)), (h = \"\")), a.pop();\n            else if (\"}\" === l && (p || v)) {\n              h && (y.push(e(h)), (h = \"\")), v && a.pop();\n              for (var b = {}, x = 1; x < y.length; x += 2) b[y[x - 1]] = y[x];\n              o.pop(), o.length && r(o).push(b), a.pop(), (c = b);\n            } else\n              \"]\" === l && g\n                ? (h && (y.push(e(h)), (h = \"\")),\n                  o.pop(),\n                  o.length && r(o).push(y),\n                  a.pop(),\n                  (c = y))\n                : \"{\" === l\n                ? (o.push([]), a.push(\"}\"))\n                : \"[\" === l\n                ? (o.push([]), a.push(\"]\"))\n                : '\"' === l\n                ? a.push('\"')\n                : \"'\" === l\n                ? a.push(\"'\")\n                : (h += l);\n            u += 1;\n          } else u += 1;\n        }\n        return c || h;\n      }\n      function Dt(t, e) {\n        var n;\n        void 0 === e && (e = { x: 0, y: 0 });\n        var r = Object(f.a)({ x: 0, y: 0, width: 0, height: 0 }, e);\n        if (null === (n = t.children) || void 0 === n ? void 0 : n.length) {\n          var i = t.attrs,\n            o = void 0 === i ? {} : i,\n            a = o.marginTop,\n            s = Object(f.a)({}, e);\n          a && (s.y += a);\n          for (var c = 0; c < t.children.length; c++) {\n            t.children[c].attrs.key = \"\"\n              .concat(o.key || \"root\", \" -\")\n              .concat(c, \" \");\n            var u = Dt(t.children[c], s);\n            if (u.bbox) {\n              var h = u.bbox;\n              \"inline\" === u.attrs.next\n                ? (s.x += u.bbox.width)\n                : (s.y += u.bbox.height),\n                h.width + h.x > r.width && (r.width = h.width + h.x),\n                h.height + h.y > r.height && (r.height = h.height + h.y);\n            }\n          }\n        }\n        return (\n          (t.bbox = (function (t, e, n) {\n            var r,\n              i,\n              o = t.attrs,\n              a = void 0 === o ? {} : o,\n              s = {\n                x: e.x || 0,\n                y: e.y || 0,\n                width: n.width || 0,\n                height: n.height || 0,\n              };\n            switch (t.type) {\n              case \"maker\":\n              case \"circle\":\n                a.r && ((i = 2 * a.r), (r = 2 * a.r));\n                break;\n              case \"text\":\n                a.text &&\n                  ((i = vt(a.text, a.fontSize || 12)[0]),\n                  (r = 16),\n                  (s.y += r),\n                  (s.height = r),\n                  (s.width = i),\n                  (t.attrs = Object(f.a)({ fontSize: 12, fill: \"#000\" }, a)));\n                break;\n              default:\n                a.width && (i = a.width), a.height && (r = a.height);\n            }\n            return (\n              r >= 0 && (s.height = r),\n              i >= 0 && (s.width = i),\n              a.marginTop && (s.y += a.marginTop),\n              a.marginLeft && (s.x += a.marginLeft),\n              s\n            );\n          })(t, e, r)),\n          (t.attrs = Object(f.a)(Object(f.a)({}, t.attrs), t.bbox)),\n          t\n        );\n      }\n      function _t(t) {\n        var e = {},\n          n = function (e) {\n            var n = (function (t) {\n                return function (e) {\n                  for (var n = t.length, r = [], i = 0, o = \"\"; i < n; )\n                    if (\"{\" === t[i] && \"{\" === t[i + 1])\n                      r.push(o), (o = \"\"), (i += 2);\n                    else if (\"}\" === t[i] && \"}\" === t[i + 1]) {\n                      if (r.length) {\n                        var a = r.pop();\n                        (o = Object(c.get)(\n                          e,\n                          o,\n                          a.endsWith(\"=\") ? '\"{'.concat(o, '}\"') : o,\n                        )),\n                          r.push(a + o);\n                      }\n                      (i += 2), (o = \"\");\n                    } else (o += t[i]), (i += 1);\n                  return (\n                    r.push(o),\n                    r\n                      .map(function (t, e) {\n                        return r[e - 1] && r[e - 1].endsWith(\"=\")\n                          ? '\"{'.concat(t, '}\"')\n                          : t;\n                      })\n                      .join(\"\")\n                  );\n                };\n              })(\"function\" == typeof t ? t(e) : t)(e),\n              r = document.createElement(\"div\");\n            r.innerHTML = n;\n            var i = Dt(\n              (function t(e, n) {\n                var r = {},\n                  i = (e.getAttributeNames && e.getAttributeNames()) || [],\n                  o =\n                    e.children &&\n                    Array.from(e.children).map(function (e) {\n                      return t(e, n);\n                    }),\n                  a = {},\n                  s = e.tagName ? e.tagName.toLowerCase() : \"group\";\n                return (\n                  \"text\" === s && (r.text = e.innerText),\n                  (a.type = s),\n                  \"img\" === s && (a.type = \"image\"),\n                  Array.from(i).forEach(function (t) {\n                    var n = t.split(\"-\").reduce(function (t, e) {\n                        return t + e.charAt(0).toUpperCase() + e.slice(1);\n                      }),\n                      i = e.getAttribute(t);\n                    try {\n                      if (\"style\" === n || \"attrs\" === n) {\n                        var o = Lt(i);\n                        r = Object(f.a)(Object(f.a)({}, r), o);\n                      } else a[n] = Lt(i);\n                    } catch (t) {\n                      if (\"style\" === n) throw t;\n                      a[n] = i;\n                    }\n                  }),\n                  (a.attrs = r),\n                  n &&\n                    n.style &&\n                    a.name &&\n                    \"object\" === Bt(n.style[a.name]) &&\n                    (a.attrs = Object(f.a)(\n                      Object(f.a)({}, a.attrs),\n                      n.style[a.name],\n                    )),\n                  n &&\n                    n.style &&\n                    a.keyshape &&\n                    (a.attrs = Object(f.a)(Object(f.a)({}, a.attrs), n.style)),\n                  o.length && (a.children = o),\n                  a\n                );\n              })(r.children[0], e),\n            );\n            return r.remove(), i;\n          };\n        return {\n          draw: function (t, r) {\n            var i = n(t),\n              o = r;\n            return (\n              (function t(e) {\n                var n = e.attrs,\n                  i = void 0 === n ? {} : n,\n                  a = e.bbox,\n                  s = e.type,\n                  c = e.children,\n                  u = Object(f.e)(e, [\"attrs\", \"bbox\", \"type\", \"children\"]);\n                if (\"group\" !== e.type) {\n                  var h = r.addShape(\n                    e.type,\n                    Object(f.a)(\n                      { attrs: i, origin: { bbox: a, type: s, children: c } },\n                      u,\n                    ),\n                  );\n                  e.keyshape && (o = h);\n                }\n                e.children &&\n                  e.children.forEach(function (e) {\n                    return t(e);\n                  });\n              })(i),\n              (e[t.id] = [i]),\n              o\n            );\n          },\n          update: function (t, r) {\n            e[t.id] || (e[t.id] = []);\n            var i = r.getContainer(),\n              o = i.get(\"children\"),\n              a = n(t),\n              s = (function t(e, n) {\n                var r,\n                  i,\n                  o,\n                  a,\n                  s = (e || {}).type,\n                  c = ((null == n ? void 0 : n.attrs) || {}).key;\n                if ((c && e && (e.attrs.key = c), !e && n))\n                  return { action: \"delete\", val: n, type: s, key: c };\n                if (e && !n) return { action: \"add\", val: e, type: s };\n                if (!e && !n) return { action: \"same\", type: s };\n                var u = [];\n                if (\n                  (null === (r = e.children) || void 0 === r\n                    ? void 0\n                    : r.length) > 0 ||\n                  (null === (i = n.children) || void 0 === i\n                    ? void 0\n                    : i.length) > 0\n                )\n                  for (\n                    var h = Math.max(\n                        null === (o = e.children) || void 0 === o\n                          ? void 0\n                          : o.length,\n                        null === (a = n.children) || void 0 === a\n                          ? void 0\n                          : a.length,\n                      ),\n                      l = n.children || [],\n                      f = e.children || [],\n                      d = 0;\n                    d < h;\n                    d += 1\n                  )\n                    u.push(t(f[d], l[d]));\n                var p = Object.keys(n.attrs),\n                  g = Object.keys(e.attrs);\n                return n.type !== e.type\n                  ? {\n                      action: \"restructure\",\n                      nowTarget: e,\n                      formerTarget: n,\n                      key: c,\n                      children: u,\n                    }\n                  : p\n                      .filter(function (t) {\n                        return \"children\" !== t;\n                      })\n                      .some(function (t) {\n                        return e.attrs[t] !== n.attrs[t] || !g.includes(t);\n                      })\n                  ? { action: \"change\", val: e, children: u, type: s, key: c }\n                  : { action: \"same\", children: u, type: s, key: c };\n              })(a, e[t.id].pop()),\n              c = function t(e) {\n                var n;\n                \"group\" !== e.type && i.addShape(e.type, { attrs: e.attrs }),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              },\n              u = function t(e) {\n                var n,\n                  r = o.find(function (t) {\n                    return t.attrs.key === e.attrs.key;\n                  });\n                r && i.removeChild(r),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              };\n            !(function t(e) {\n              var n = e.key;\n              if (\"group\" !== e.type) {\n                var i = o.find(function (t) {\n                  return t.attrs.key === n;\n                });\n                switch (e.action) {\n                  case \"change\":\n                    if (i) {\n                      var a = e.val.keyshape ? r.getOriginStyle() : {};\n                      i.attr(Object(f.a)(Object(f.a)({}, a), e.val.attrs));\n                    }\n                    break;\n                  case \"add\":\n                    c(e.val);\n                    break;\n                  case \"delete\":\n                    u(e.val);\n                    break;\n                  case \"restructure\":\n                    u(e.formerTarget), c(e.nowTarget);\n                }\n              }\n              e.children &&\n                e.children.forEach(function (e) {\n                  return t(e);\n                });\n            })(s),\n              e[t.id].push(a);\n          },\n          getAnchorPoints: function () {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n              [0.5, 1],\n              [0.5, 0],\n            ];\n          },\n        };\n      }\n      var Rt = {};\n      function Ft(t) {\n        return Rt[t] || (Rt[t] = Object(c.upperFirst)(t)), Rt[t];\n      }\n      var Yt = {\n          defaultShapeType: \"defaultType\",\n          className: null,\n          getShape: function (t) {\n            return (\n              this[t] || this[this.defaultShapeType] || this[\"simple-circle\"]\n            );\n          },\n          draw: function (t, e, n) {\n            var r = this.getShape(t),\n              i = r.draw(e, n);\n            return r.afterDraw && r.afterDraw(e, n, i), i;\n          },\n          baseUpdate: function (t, e, n) {\n            var r = this.getShape(t);\n            r.update && r.update(e, n), r.afterUpdate && r.afterUpdate(e, n);\n          },\n          setState: function (t, e, n, r) {\n            this.getShape(t).setState(e, n, r);\n          },\n          shouldUpdate: function (t) {\n            return !!this.getShape(t).update;\n          },\n          getControlPoints: function (t, e) {\n            return this.getShape(t).getControlPoints(e);\n          },\n          getAnchorPoints: function (t, e) {\n            return this.getShape(t).getAnchorPoints(e);\n          },\n        },\n        Xt = {\n          options: {},\n          draw: function (t, e) {\n            return this.drawShape(t, e);\n          },\n          drawShape: function () {},\n          afterDraw: function () {},\n          afterUpdate: function () {},\n          setState: function () {},\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            var e = this.options.anchorPoints;\n            return t.anchorPoints || e;\n          },\n        },\n        zt = (function () {\n          function t() {}\n          return (\n            (t.registerFactory = function (e, n) {\n              var r = Ft(e),\n                i = Yt,\n                o = Object(f.a)(Object(f.a)({}, i), n);\n              return (t[r] = o), (o.className = r), o;\n            }),\n            (t.getFactory = function (e) {\n              return t[Ft(e)];\n            }),\n            (t.registerNode = function (e, n, r) {\n              var i,\n                o = t.Node;\n              if (\"string\" == typeof n || \"function\" == typeof n) {\n                var a = _t(n);\n                i = Object(f.a)(Object(f.a)({}, o.getShape(\"single-node\")), a);\n              } else if (n.jsx) {\n                a = _t(n.jsx);\n                i = Object(f.a)(\n                  Object(f.a)(Object(f.a)({}, o.getShape(\"single-node\")), a),\n                  n,\n                );\n              } else {\n                o.getShape(r);\n                var s = r ? o.getShape(r) : Xt;\n                i = Object(f.a)(Object(f.a)({}, s), n);\n              }\n              return (i.type = e), (i.itemType = \"node\"), (o[e] = i), i;\n            }),\n            (t.registerEdge = function (e, n, r) {\n              var i = t.Edge,\n                o = r ? i.getShape(r) : Xt,\n                a = Object(f.a)(Object(f.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"edge\"), (i[e] = a), a;\n            }),\n            (t.registerCombo = function (e, n, r) {\n              var i = t.Combo,\n                o = r ? i.getShape(r) : Xt,\n                a = Object(f.a)(Object(f.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"combo\"), (i[e] = a), a;\n            }),\n            t\n          );\n        })(),\n        Wt = zt;\n      zt.registerFactory(\"node\", { defaultShapeType: \"circle\" }),\n        zt.registerFactory(\"edge\", { defaultShapeType: \"line\" }),\n        zt.registerFactory(\"combo\", { defaultShapeType: \"circle\" });\n      var qt = (function () {\n          function t(t) {\n            (this._cfg = {}), (this.destroyed = !1);\n            var e = {\n              id: void 0,\n              type: \"item\",\n              model: {},\n              group: void 0,\n              animate: !1,\n              visible: !0,\n              locked: !1,\n              event: !0,\n              keyShape: void 0,\n              states: [],\n            };\n            this._cfg = Object.assign(e, this.getDefaultCfg(), t);\n            var n = this.get(\"model\"),\n              r = n.id,\n              i = this.get(\"type\");\n            r || ((r = jt(i)), (this.get(\"model\").id = r)), this.set(\"id\", r);\n            var o = t.group;\n            o && (o.set(\"item\", this), o.set(\"id\", r)),\n              this.init(),\n              this.draw();\n            var a = n.shape || n.type || (\"edge\" === i ? \"line\" : \"circle\"),\n              s = this.get(\"shapeFactory\");\n            if (s && s[a]) {\n              var u = s[a].options;\n              if (u && u.stateStyles) {\n                var h = this.get(\"styles\") || n.stateStyles;\n                (h = Object(c.deepMix)({}, u.stateStyles, h)),\n                  this.set(\"styles\", h);\n              }\n            }\n          }\n          return (\n            (t.prototype.calculateBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = ut(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.calculateCanvasBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = ut(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.drawInner = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"group\"),\n                n = this.get(\"model\");\n              e.clear();\n              var r = n.visible;\n              if ((void 0 === r || r || this.changeVisibility(r), t)) {\n                this.updatePosition(n);\n                var i = this.getShapeCfg(n),\n                  o = i.type,\n                  a = t.draw(o, i, e);\n                a &&\n                  (this.set(\"keyShape\", a),\n                  a.set(\"isKeyShape\", !0),\n                  a.set(\"draggable\", !0)),\n                  this.setOriginStyle(),\n                  this.set(\"currentShape\", o),\n                  this.restoreStates(t, o);\n              }\n            }),\n            (t.prototype.setOriginStyle = function () {\n              var t = this.get(\"group\").get(\"children\"),\n                e = this.getKeyShape(),\n                n = this,\n                r = e.get(\"name\");\n              if (this.get(\"originStyle\")) {\n                var i = this.getOriginStyle();\n                r && !i[r] && (i[r] = {});\n                var o = this.getCurrentStatesStyle();\n                Object(c.each)(t, function (t) {\n                  var e = t.get(\"name\"),\n                    a = t.attr();\n                  if (e && e !== r) {\n                    var s = o[e];\n                    i[e] || (i[e] = {}),\n                      s\n                        ? Object.keys(a).forEach(function (t) {\n                            var n = a[t];\n                            n !== s[t] && (i[e][t] = n);\n                          })\n                        : (i[e] =\n                            \"image\" !== t.get(\"type\")\n                              ? Object(c.clone)(a)\n                              : n.getShapeStyleByName(e));\n                  } else {\n                    var u = t.attr(),\n                      h = Object(f.a)(Object(f.a)({}, o), o[r]);\n                    Object.keys(u).forEach(function (t) {\n                      var e = u[t];\n                      h[t] !== e && (r ? (i[r][t] = e) : (i[t] = e));\n                    });\n                  }\n                }),\n                  i.path && delete i.path,\n                  i.matrix && delete i.matrix,\n                  i.x && delete i.x,\n                  i.y && delete i.y,\n                  i[r] && i[r].x && delete i[r].x,\n                  i[r] && i[r].y && delete i[r].y,\n                  n.set(\"originStyle\", i);\n              } else {\n                var a = {};\n                Object(c.each)(t, function (t) {\n                  var e = t.get(\"type\"),\n                    i = t.get(\"name\");\n                  if (i && i !== r)\n                    a[i] =\n                      \"image\" !== e\n                        ? Object(c.clone)(t.attr())\n                        : n.getShapeStyleByName(i);\n                  else {\n                    var o = n.getShapeStyleByName();\n                    if (\n                      (o.path && delete o.path, o.matrix && delete o.matrix, r)\n                    )\n                      if (i) a[r] = o;\n                      else {\n                        var s = jt(\"shape\");\n                        t.set(\"name\", s),\n                          (a[s] =\n                            \"image\" !== e\n                              ? Object(c.clone)(t.attr())\n                              : n.getShapeStyleByName(i));\n                      }\n                    else Object.assign(a, o);\n                  }\n                }),\n                  n.set(\"originStyle\", a);\n              }\n            }),\n            (t.prototype.restoreStates = function (t, e) {\n              var n = this,\n                r = n.get(\"states\");\n              Object(c.each)(r, function (r) {\n                t.setState(e, r, !0, n);\n              });\n            }),\n            (t.prototype.init = function () {\n              var t = Wt.getFactory(this.get(\"type\"));\n              this.set(\"shapeFactory\", t);\n            }),\n            (t.prototype.get = function (t) {\n              return this._cfg[t];\n            }),\n            (t.prototype.set = function (t, e) {\n              Object(c.isPlainObject)(t)\n                ? (this._cfg = Object(f.a)(Object(f.a)({}, this._cfg), t))\n                : (this._cfg[t] = e);\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (t.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"bboxCanvasCache\", null);\n            }),\n            (t.prototype.beforeDraw = function () {}),\n            (t.prototype.afterDraw = function () {}),\n            (t.prototype.afterUpdate = function () {}),\n            (t.prototype.draw = function () {\n              this.beforeDraw(), this.drawInner(), this.afterDraw();\n            }),\n            (t.prototype.getShapeStyleByName = function (t) {\n              var e,\n                n = this.get(\"group\");\n              if (\n                (e = t\n                  ? n.find(function (e) {\n                      return e.get(\"name\") === t;\n                    })\n                  : this.getKeyShape())\n              ) {\n                var r = {};\n                return (\n                  Object(c.each)(e.attr(), function (t, e) {\n                    \"img\" !== e && (r[e] = t);\n                  }),\n                  r\n                );\n              }\n              return {};\n            }),\n            (t.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\");\n              if (e) {\n                var n = t;\n                return (n.style = Object(f.a)(Object(f.a)({}, e), t.style)), n;\n              }\n              return t;\n            }),\n            (t.prototype.getStateStyle = function (t) {\n              var e = this.get(\"styles\");\n              return e && e[t];\n            }),\n            (t.prototype.getOriginStyle = function () {\n              return this.get(\"originStyle\");\n            }),\n            (t.prototype.getCurrentStatesStyle = function () {\n              var t = this,\n                e = {},\n                n = t.getStates();\n              return n && n.length\n                ? (Object(c.each)(t.getStates(), function (n) {\n                    e = Object.assign(e, t.getStateStyle(n));\n                  }),\n                  e)\n                : this.getOriginStyle();\n            }),\n            (t.prototype.setState = function (t, e) {\n              var n = this.get(\"states\"),\n                r = this.get(\"shapeFactory\"),\n                i = t,\n                o = t;\n              Object(c.isString)(e) &&\n                ((i = \"\".concat(t, \":\").concat(e)), (o = \"\".concat(t, \":\")));\n              var a = n;\n              if (Object(c.isBoolean)(e)) {\n                var s = n.indexOf(o);\n                if (e) {\n                  if (s > -1) return;\n                  n.push(i);\n                } else s > -1 && n.splice(s, 1);\n              } else if (Object(c.isString)(e)) {\n                var u = n.filter(function (t) {\n                  return t.includes(o);\n                });\n                u.length > 0 && this.clearStates(u),\n                  (a = a.filter(function (t) {\n                    return !t.includes(o);\n                  })).push(i),\n                  this.set(\"states\", a);\n              }\n              if (r) {\n                var h = this.get(\"model\").type;\n                r.setState(h, t, e, this);\n              }\n            }),\n            (t.prototype.clearStates = function (t) {\n              var e = this,\n                n = e.getStates(),\n                r = e.get(\"shapeFactory\"),\n                i = e.get(\"model\").type;\n              t || (t = n), Object(c.isString)(t) && (t = [t]);\n              var o = n.filter(function (e) {\n                return -1 === t.indexOf(e);\n              });\n              e.set(\"states\", o),\n                t.forEach(function (t) {\n                  r.setState(i, t, !1, e);\n                });\n            }),\n            (t.prototype.getContainer = function () {\n              return this.get(\"group\");\n            }),\n            (t.prototype.getKeyShape = function () {\n              return this.get(\"keyShape\");\n            }),\n            (t.prototype.getModel = function () {\n              return this.get(\"model\");\n            }),\n            (t.prototype.getType = function () {\n              return this.get(\"type\");\n            }),\n            (t.prototype.getID = function () {\n              return this.get(\"id\");\n            }),\n            (t.prototype.isItem = function () {\n              return !0;\n            }),\n            (t.prototype.getStates = function () {\n              return this.get(\"states\");\n            }),\n            (t.prototype.hasState = function (t) {\n              return this.getStates().indexOf(t) >= 0;\n            }),\n            (t.prototype.refresh = function () {\n              var t = this.get(\"model\");\n              this.updatePosition(t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (t.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = n.x,\n                a = n.y;\n              (t.x = isNaN(t.x) ? n.x : t.x), (t.y = isNaN(t.y) ? n.y : t.y);\n              var s = this.get(\"styles\");\n              if (t.stateStyles) {\n                var u = t.stateStyles;\n                Object(c.mix)(s, u), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                e\n                  ? this.updatePosition(t)\n                  : ((o === t.x && a === t.y) || this.updatePosition(t),\n                    this.updateShape()),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.updateShape = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"model\"),\n                n = e.type;\n              if (t.shouldUpdate(n) && n === this.get(\"currentShape\")) {\n                var r = this.getShapeCfg(e);\n                t.baseUpdate(n, r, this), this.setOriginStyle();\n              } else this.draw();\n              this.restoreStates(t, n);\n            }),\n            (t.prototype.updatePosition = function (t) {\n              var e = this.get(\"model\"),\n                n = Object(c.isNil)(t.x) ? e.x : t.x,\n                r = Object(c.isNil)(t.y) ? e.y : t.y,\n                i = this.get(\"group\");\n              if (Object(c.isNil)(n) || Object(c.isNil)(r)) return !1;\n              (e.x = n), (e.y = r);\n              var o = i.getMatrix();\n              return (\n                (!o || o[6] !== n || o[7] !== r) &&\n                (i.resetMatrix(), I(i, { x: n, y: r }), this.clearCache(), !0)\n              );\n            }),\n            (t.prototype.getBBox = function () {\n              var t = this.get(\"bboxCache\");\n              return (\n                t || ((t = this.calculateBBox()), this.set(\"bboxCache\", t)), t\n              );\n            }),\n            (t.prototype.getCanvasBBox = function () {\n              var t = this.get(\"bboxCanvasCache\");\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()),\n                  this.set(\"bboxCanvasCache\", t)),\n                t\n              );\n            }),\n            (t.prototype.toFront = function () {\n              this.get(\"group\").toFront();\n            }),\n            (t.prototype.toBack = function () {\n              this.get(\"group\").toBack();\n            }),\n            (t.prototype.show = function () {\n              this.changeVisibility(!0);\n            }),\n            (t.prototype.hide = function () {\n              this.changeVisibility(!1);\n            }),\n            (t.prototype.changeVisibility = function (t) {\n              var e = this.get(\"group\");\n              t ? e.show() : e.hide(), this.set(\"visible\", t);\n            }),\n            (t.prototype.isVisible = function () {\n              return this.get(\"visible\");\n            }),\n            (t.prototype.enableCapture = function (t) {\n              var e = this.get(\"group\");\n              e && e.set(\"capture\", t);\n            }),\n            (t.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            t\n          );\n        })(),\n        Vt = { source: \"start\", target: \"end\" },\n        Gt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                type: \"edge\",\n                sourceNode: null,\n                targetNode: null,\n                startPoint: null,\n                endPoint: null,\n                linkCenter: !1,\n              };\n            }),\n            (e.prototype.setEnd = function (t, e) {\n              var n = Vt[t] + \"Point\",\n                r = t + \"Node\",\n                i = this.get(r);\n              i && !i.destroyed && i.removeEdge(this),\n                Object(c.isPlainObject)(e)\n                  ? (this.set(n, e), this.set(r, null))\n                  : (e.addEdge(this), this.set(r, e), this.set(n, null));\n            }),\n            (e.prototype.getLinkPoint = function (t, e, n) {\n              var r = Vt[t] + \"Point\",\n                i = t + \"Node\",\n                o = this.get(r);\n              if (!o) {\n                var a = this.get(i),\n                  s = t + \"Anchor\",\n                  u = this.getPrePoint(t, n),\n                  h = e[s];\n                Object(c.isNil)(h) || (o = a.getLinkPointByAnchor(h)),\n                  (o = o || a.getLinkPoint(u)),\n                  Object(c.isNil)(o.index) ||\n                    this.set(\"\".concat(t, \"AnchorIndex\"), o.index);\n              }\n              return o;\n            }),\n            (e.prototype.getPrePoint = function (t, e) {\n              if (e && e.length) return e[\"source\" === t ? 0 : e.length - 1];\n              var n = \"source\" === t ? \"target\" : \"source\";\n              return this.getEndPoint(n);\n            }),\n            (e.prototype.getEndPoint = function (t) {\n              var e = t + \"Node\",\n                n = Vt[t] + \"Point\",\n                r = this.get(e);\n              return r ? r.get(\"model\") : this.get(n);\n            }),\n            (e.prototype.getControlPointsByCenter = function (t) {\n              var e = this.getEndPoint(\"source\"),\n                n = this.getEndPoint(\"target\"),\n                r = this.get(\"shapeFactory\"),\n                i = t.type;\n              return r.getControlPoints(i, { startPoint: e, endPoint: n });\n            }),\n            (e.prototype.getEndCenter = function (t) {\n              var e = t + \"Node\",\n                n = Vt[t] + \"Point\",\n                r = this.get(e);\n              if (r) {\n                var i = r.getBBox();\n                return { x: i.centerX, y: i.centerY };\n              }\n              return this.get(n);\n            }),\n            (e.prototype.init = function () {\n              t.prototype.init.call(this),\n                this.setSource(this.get(\"source\")),\n                this.setTarget(this.get(\"target\"));\n            }),\n            (e.prototype.getShapeCfg = function (e) {\n              var n = this.get(\"linkCenter\"),\n                r = t.prototype.getShapeCfg.call(this, e);\n              if (n)\n                (r.startPoint = this.getEndCenter(\"source\")),\n                  (r.endPoint = this.getEndCenter(\"target\"));\n              else {\n                var i = r.controlPoints || this.getControlPointsByCenter(r);\n                (r.startPoint = this.getLinkPoint(\"source\", e, i)),\n                  (r.endPoint = this.getLinkPoint(\"target\", e, i));\n              }\n              return (\n                (r.sourceNode = this.get(\"sourceNode\")),\n                (r.targetNode = this.get(\"targetNode\")),\n                r\n              );\n            }),\n            (e.prototype.getModel = function () {\n              var t = this.get(\"model\"),\n                e = this.get(\"source\".concat(\"Node\")),\n                n = this.get(\"target\".concat(\"Node\"));\n              return (\n                e\n                  ? delete t[\"source\".concat(\"Node\")]\n                  : (t.source = this.get(\"start\".concat(\"Point\"))),\n                n\n                  ? delete t[\"target\".concat(\"Node\")]\n                  : (t.target = this.get(\"end\".concat(\"Point\"))),\n                Object(c.isString)(t.source) ||\n                  Object(c.isPlainObject)(t.source) ||\n                  (t.source = t.source.getID()),\n                Object(c.isString)(t.target) ||\n                  Object(c.isPlainObject)(t.target) ||\n                  (t.target = t.target.getID()),\n                t\n              );\n            }),\n            (e.prototype.setSource = function (t) {\n              this.setEnd(\"source\", t), this.set(\"source\", t);\n            }),\n            (e.prototype.setTarget = function (t) {\n              this.setEnd(\"target\", t), this.set(\"target\", t);\n            }),\n            (e.prototype.getSource = function () {\n              return this.get(\"source\");\n            }),\n            (e.prototype.getTarget = function () {\n              return this.get(\"target\");\n            }),\n            (e.prototype.updatePosition = function () {\n              return !1;\n            }),\n            (e.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = this.get(\"styles\");\n              if (t.stateStyles) {\n                var a = t.stateStyles;\n                Object(c.mix)(o, a), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"source\".concat(\"Node\")),\n                n = this.get(\"target\".concat(\"Node\"));\n              e && !e.destroyed && e.removeEdge(this),\n                n && !n.destroyed && n.removeEdge(this),\n                t.prototype.destroy.call(this);\n            }),\n            e\n          );\n        })(qt),\n        Ht = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getNearestPoint = function (t, e) {\n              for (\n                var n = 0, r = t[0], i = C(t[0], e), o = 0;\n                o < t.length;\n                o++\n              ) {\n                var a = t[o],\n                  s = C(a, e);\n                s < i && ((r = a), (i = s), (n = o));\n              }\n              return (r.anchorIndex = n), r;\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"node\", edges: [] };\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getInEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"target\") === t;\n              });\n            }),\n            (e.prototype.getOutEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"source\") === t;\n              });\n            }),\n            (e.prototype.getNeighbors = function (t) {\n              var e = this,\n                n = this.get(\"edges\");\n              if (\"target\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getSource() === e;\n                  })\n                  .map(function (t) {\n                    return t.getTarget();\n                  });\n              }\n              if (\"source\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getTarget() === e;\n                  })\n                  .map(function (t) {\n                    return t.getSource();\n                  });\n              }\n              return n.map(function (t) {\n                return t.getSource() === e ? t.getTarget() : t.getSource();\n              });\n            }),\n            (e.prototype.getLinkPointByAnchor = function (t) {\n              return this.getAnchorPoints()[t];\n            }),\n            (e.prototype.getLinkPoint = function (t) {\n              var e,\n                n,\n                r = this.get(\"keyShape\").get(\"type\"),\n                i = this.get(\"type\"),\n                o = this.getBBox();\n              \"combo\" === i\n                ? ((e = o.centerX || (o.maxX + o.minX) / 2),\n                  (n = o.centerY || (o.maxY + o.minY) / 2))\n                : ((e = o.centerX), (n = o.centerY));\n              var a,\n                s = this.getAnchorPoints();\n              switch (r) {\n                case \"circle\":\n                  a = w({ x: e, y: n, r: o.width / 2 }, t);\n                  break;\n                case \"ellipse\":\n                  a = O({ x: e, y: n, rx: o.width / 2, ry: o.height / 2 }, t);\n                  break;\n                default:\n                  a = S(o, t);\n              }\n              var c = a;\n              return (\n                s.length && (c || (c = t), (c = this.getNearestPoint(s, c))),\n                c || (c = { x: e, y: n }),\n                c\n              );\n            }),\n            (e.prototype.getAnchorPoints = function () {\n              var t = this.get(\"anchorPointsCache\");\n              if (!t) {\n                t = [];\n                var e = this.get(\"shapeFactory\"),\n                  n = this.getBBox(),\n                  r = this.get(\"model\"),\n                  i = this.getShapeCfg(r),\n                  o = r.type,\n                  a = e.getAnchorPoints(o, i) || [];\n                Object(c.each)(a, function (e, r) {\n                  var i = {\n                    x: n.minX + e[0] * n.width,\n                    y: n.minY + e[1] * n.height,\n                    anchorIndex: r,\n                  };\n                  t.push(i);\n                }),\n                  this.set(\"anchorPointsCache\", t);\n              }\n              return t;\n            }),\n            (e.prototype.addEdge = function (t) {\n              this.get(\"edges\").push(t);\n            }),\n            (e.prototype.lock = function () {\n              this.set(\"locked\", !0);\n            }),\n            (e.prototype.unlock = function () {\n              this.set(\"locked\", !1);\n            }),\n            (e.prototype.hasLocked = function () {\n              return this.get(\"locked\");\n            }),\n            (e.prototype.removeEdge = function (t) {\n              var e = this.getEdges(),\n                n = e.indexOf(t);\n              n > -1 && e.splice(n, 1);\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              if (!t) return !1;\n              var e = !Object(c.isNil)(t.x),\n                n = !Object(c.isNil)(t.y),\n                r = Object.keys(t);\n              return (1 === r.length && (e || n)) || (2 === r.length && e && n);\n            }),\n            e\n          );\n        })(qt),\n        Ut = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"combo\", nodes: [], edges: [], combos: [] };\n            }),\n            (e.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\"),\n                n = this.get(\"bbox\");\n              if (e && n) {\n                var r = t,\n                  i = {\n                    r:\n                      Math.hypot(n.height, n.width) / 2 ||\n                      nt.defaultCombo.size[0] / 2,\n                    width: n.width || nt.defaultCombo.size[0],\n                    height: n.height || nt.defaultCombo.size[1],\n                  };\n                r.style = Object(f.a)(\n                  Object(f.a)(Object(f.a)({}, e), t.style),\n                  i,\n                );\n                var o = t.padding || nt.defaultCombo.padding;\n                return (\n                  Object(c.isNumber)(o)\n                    ? ((i.r += o), (i.width += 2 * o), (i.height += 2 * o))\n                    : ((i.r += o[0]),\n                      (i.width += o[1] + o[3] || 2 * o[1]),\n                      (i.height += o[0] + o[2] || 2 * o[0])),\n                  this.set(\"sizeCache\", i),\n                  r\n                );\n              }\n              return t;\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"keyShape\"),\n                  e = this.get(\"group\"),\n                  n = ut(t, e);\n                (n.centerX = (n.minX + n.maxX) / 2),\n                  (n.centerY = (n.minY + n.maxY) / 2);\n                var r = this.get(\"sizeCache\"),\n                  i = this.get(\"bboxCache\") || {},\n                  o = i.x,\n                  a = i.x;\n                if (r)\n                  (r.width = Math.max(r.width, n.width)),\n                    (r.height = Math.max(r.height, n.height)),\n                    \"circle\" === t.get(\"type\")\n                      ? ((n.width = 2 * r.r), (n.height = 2 * r.r))\n                      : ((n.width = r.width), (n.height = r.height)),\n                    (n.minX = n.centerX - n.width / 2),\n                    (n.minY = n.centerY - n.height / 2),\n                    (n.maxX = n.centerX + n.width / 2),\n                    (n.maxY = n.centerY + n.height / 2);\n                else\n                  (n.width = n.maxX - n.minX),\n                    (n.height = n.maxY - n.minY),\n                    (n.centerX = (n.minX + n.maxX) / 2),\n                    (n.centerY = (n.minY + n.maxY) / 2);\n                return (\n                  (n.x = n.minX),\n                  (n.y = n.minY),\n                  (n.x === o && n.y === a) ||\n                    this.set(\"anchorPointsCache\", null),\n                  n\n                );\n              }\n            }),\n            (e.prototype.getChildren = function () {\n              return { nodes: this.getNodes(), combos: this.getCombos() };\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.addChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.addNode(t);\n                  break;\n                case \"combo\":\n                  this.addCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.addCombo = function (t) {\n              return this.get(\"combos\").push(t), !0;\n            }),\n            (e.prototype.addNode = function (t) {\n              return this.get(\"nodes\").push(t), !0;\n            }),\n            (e.prototype.removeChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.removeNode(t);\n                  break;\n                case \"combo\":\n                  this.removeCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.removeCombo = function (t) {\n              if (t) {\n                var e = this.getCombos(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.removeNode = function (t) {\n              if (t) {\n                var e = this.getNodes(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (e.prototype.getBBox = function () {\n              return (\n                this.set(\"bboxCanvasCache\", null), this.calculateCanvasBBox()\n              );\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null),\n                this.set(\"bboxCanvasCache\", null),\n                this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  this.set(\"sizeCache\", null),\n                  this.set(\"bbox\", null),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            e\n          );\n        })(Ht),\n        Zt = (function () {\n          function t(t) {\n            (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.addItem = function (t, e) {\n              var n = this.graph,\n                r = \"vedge\" === t ? \"edge\" : t,\n                i = n.get(\"\".concat(r, \"Group\")) || n.get(\"group\"),\n                o = Object(c.upperFirst)(r),\n                a = null,\n                s = n.get(r + Object(c.upperFirst)(\"stateStyles\")) || {},\n                u = n.get(\"default\" + o);\n              e.stateStyles && (s = e.stateStyles),\n                u &&\n                  Object(c.each)(u, function (t, n) {\n                    Object(c.isObject)(t) && !Object(c.isArray)(t)\n                      ? (e[n] = Object(c.deepMix)({}, t, e[n]))\n                      : Object(c.isArray)(t)\n                      ? (e[n] = e[n] || Object(c.clone)(u[n]))\n                      : (e[n] = e[n] || u[n]);\n                  });\n              var h = n.get(r + \"Mapper\");\n              if (h) {\n                var l = h(e);\n                l.stateStyles && ((s = l.stateStyles), delete l.stateStyles),\n                  Object(c.each)(l, function (t, n) {\n                    Object(c.isObject)(t) && !Object(c.isArray)(t)\n                      ? (e[n] = Object(c.deepMix)({}, e[n], t))\n                      : (e[n] = l[n] || e[n]);\n                  });\n              }\n              if (\n                (n.emit(\"beforeadditem\", { type: t, model: e }),\n                \"edge\" === t || \"vedge\" === t)\n              ) {\n                var f = void 0,\n                  d = void 0;\n                if (\n                  ((f = e.source),\n                  (d = e.target),\n                  f && Object(c.isString)(f) && (f = n.findById(f)),\n                  d && Object(c.isString)(d) && (d = n.findById(d)),\n                  !f || !d)\n                )\n                  return void console.warn(\n                    \"The source or target node of edge \".concat(\n                      e.id,\n                      \" does not exist!\",\n                    ),\n                  );\n                f.getType && \"combo\" === f.getType() && (e.isComboEdge = !0),\n                  d.getType && \"combo\" === d.getType() && (e.isComboEdge = !0),\n                  (a = new Gt({\n                    model: e,\n                    source: f,\n                    target: d,\n                    styles: s,\n                    linkCenter: n.get(\"linkCenter\"),\n                    group: i.addGroup(),\n                  }));\n              } else if (\"node\" === t)\n                a = new Ht({ model: e, styles: s, group: i.addGroup() });\n              else if (\"combo\" === t) {\n                var p = e.children,\n                  g = bt(p, n);\n                isNaN(g.x)\n                  ? isNaN(e.x) && (e.x = 100 * Math.random())\n                  : (e.x = g.x),\n                  isNaN(g.y)\n                    ? isNaN(e.y) && (e.y = 100 * Math.random())\n                    : (e.y = g.y);\n                var v = i.addGroup();\n                v.setZIndex(e.depth);\n                var y = (a = new Ut({\n                  model: e,\n                  styles: s,\n                  bbox: e.collapsed ? bt([], n) : g,\n                  group: v,\n                })).getModel();\n                (p || []).forEach(function (t) {\n                  var e = n.findById(t.id);\n                  a.addChild(e), (t.depth = y.depth + 2);\n                }),\n                  e.collapsed &&\n                    setTimeout(function () {\n                      n.collapseCombo(a);\n                    }, 16);\n              }\n              if (a)\n                return (\n                  n.get(\"\".concat(t, \"s\")).push(a),\n                  (n.get(\"itemMap\")[a.get(\"id\")] = a),\n                  n.emit(\"afteradditem\", { item: a, model: e }),\n                  a\n                );\n            }),\n            (t.prototype.updateItem = function (t, e) {\n              var n,\n                r,\n                i = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = i.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var o = \"\";\n                t.getType && (o = t.getType());\n                var a = i.get(o + \"Mapper\"),\n                  s = t.getModel(),\n                  u = t.isOnlyMove(e);\n                if (a) {\n                  var h = a(Object(c.deepMix)({}, s, e)),\n                    l = Object(c.deepMix)({}, s, h, e);\n                  h.stateStyles &&\n                    (t.set(\"styles\", l.stateStyles), delete l.stateStyles),\n                    Object(c.each)(l, function (t, n) {\n                      e[n] = t;\n                    });\n                } else\n                  Object(c.each)(e, function (t, n) {\n                    s[n] &&\n                      Object(c.isObject)(t) &&\n                      !Object(c.isArray)(t) &&\n                      (e[n] = Object(f.a)(Object(f.a)({}, s[n]), e[n]));\n                  });\n                if (\n                  (i.emit(\"beforeupdateitem\", { item: t, cfg: e }),\n                  \"edge\" === o)\n                ) {\n                  if (e.source) {\n                    var d = e.source;\n                    Object(c.isString)(d) && (d = i.findById(d)),\n                      t.setSource(d);\n                  }\n                  if (e.target) {\n                    var p = e.target;\n                    Object(c.isString)(p) && (p = i.findById(p)),\n                      t.setTarget(p);\n                  }\n                  t.update(e);\n                }\n                if (\"node\" === o || \"combo\" === o) {\n                  t.update(e, u);\n                  var g = t.getEdges(),\n                    v = xt(e);\n                  if (v && \"node\" === o)\n                    Object(c.each)(g, function (t) {\n                      t.refresh();\n                    });\n                  else if (v && \"combo\" === o) {\n                    var y = t.get(\"shapeFactory\"),\n                      m = s.type || \"circle\";\n                    (\n                      void 0 === s.animate || void 0 === e.animate\n                        ? null ===\n                            (r =\n                              null === (n = y[m]) || void 0 === n\n                                ? void 0\n                                : n.options) || void 0 === r\n                          ? void 0\n                          : r.animate\n                        : s.animate || e.animate\n                    )\n                      ? setTimeout(function () {\n                          if (t && !t.destroyed) {\n                            var e = t.getKeyShape();\n                            e &&\n                              !e.destroyed &&\n                              Object(c.each)(g, function (t) {\n                                t && !t.destroyed && t.refresh();\n                              });\n                          }\n                        }, 201)\n                      : Object(c.each)(g, function (t) {\n                          t.refresh();\n                        });\n                  }\n                }\n                i.emit(\"afterupdateitem\", { item: t, cfg: e });\n              }\n            }),\n            (t.prototype.updateCombo = function (t, e) {\n              var n,\n                r,\n                i = this,\n                o = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = o.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var a = t.getModel(),\n                  s = bt(a.collapsed ? [] : e, o);\n                t.set(\"bbox\", s), t.update({ x: s.x, y: s.y });\n                var u = t.get(\"shapeFactory\"),\n                  h = a.type || \"circle\";\n                (\n                  void 0 === a.animate\n                    ? null ===\n                        (r =\n                          null === (n = u[h]) || void 0 === n\n                            ? void 0\n                            : n.options) || void 0 === r\n                      ? void 0\n                      : r.animate\n                    : a.animate\n                )\n                  ? setTimeout(function () {\n                      if (t && !t.destroyed) {\n                        var e = t.getKeyShape();\n                        e &&\n                          !e.destroyed &&\n                          (t.getShapeCfg(a), i.updateComboEdges(t));\n                      }\n                    }, 201)\n                  : this.updateComboEdges(t);\n              }\n            }),\n            (t.prototype.updateComboEdges = function (t) {\n              for (var e = t.getEdges() || [], n = 0; n < e.length; n++) {\n                var r = e[n];\n                if (r && !r.destroyed) {\n                  var i = r.get(\"shapeFactory\"),\n                    o = r.getShapeCfg(r.getModel()),\n                    a = r.getContainer();\n                  a.clear();\n                  var s = i.draw(o.type, o, a);\n                  r.set(\"keyShape\", s),\n                    s.set(\"isKeyShape\", !0),\n                    s.set(\"draggable\", !0),\n                    r.setOriginStyle();\n                }\n              }\n            }),\n            (t.prototype.collapseCombo = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.hideItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  e.hideItem(t);\n                });\n            }),\n            (t.prototype.expandCombo = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.showItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  t.getModel().collapsed ? t.show() : e.showItem(t);\n                });\n            }),\n            (t.prototype.removeItem = function (t) {\n              var e = this,\n                n = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = n.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var r = Object(c.clone)(t.getModel());\n                n.emit(\"beforeremoveitem\", { item: r });\n                var i = \"\";\n                t.getType && (i = t.getType());\n                var o = n.get(\"\".concat(i, \"s\")),\n                  a = o.indexOf(t);\n                if ((a > -1 && o.splice(a, 1), \"edge\" === i)) {\n                  var s = n.get(\"v\".concat(i, \"s\")),\n                    u = s.indexOf(t);\n                  u > -1 && s.splice(u, 1);\n                }\n                var h = t.get(\"id\");\n                delete n.get(\"itemMap\")[h];\n                var l = n.get(\"comboTrees\"),\n                  f = t.get(\"id\");\n                if (\"node\" === i) {\n                  var d = t.getModel().comboId;\n                  if (l && d) {\n                    var p = l,\n                      g = !1;\n                    l.forEach(function (t) {\n                      g ||\n                        dt(t, function (t) {\n                          if (t.id === f && p) {\n                            var e = p.indexOf(t);\n                            return p.splice(e, 1), (g = !0), !1;\n                          }\n                          return (p = t.children), !0;\n                        });\n                    });\n                  }\n                  for (var v = (x = t.getEdges()).length - 1; v >= 0; v--)\n                    n.removeItem(x[v], !1);\n                  d && n.updateCombo(d);\n                } else if (\"combo\" === i) {\n                  var y,\n                    m = t.getModel().parentId,\n                    b = !1;\n                  (l || []).forEach(function (t) {\n                    b ||\n                      dt(t, function (t) {\n                        return t.id !== f || ((y = t), (b = !0), !1);\n                      });\n                  }),\n                    (y.removed = !0),\n                    y &&\n                      y.children &&\n                      y.children.forEach(function (t) {\n                        e.removeItem(t.id);\n                      });\n                  var x;\n                  for (v = (x = t.getEdges()).length; v >= 0; v--)\n                    n.removeItem(x[v], !1);\n                  m && n.updateCombo(m);\n                }\n                t.destroy(), n.emit(\"afterremoveitem\", { item: r });\n              }\n            }),\n            (t.prototype.setItemState = function (t, e, n) {\n              var r = this.graph,\n                i = e;\n              Object(c.isString)(n) && (i = \"\".concat(e, \":\").concat(n)),\n                (t.hasState(i) === n && n) ||\n                  (Object(c.isString)(n) && t.hasState(i)) ||\n                  (r.emit(\"beforeitemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }),\n                  t.setState(e, n),\n                  r.autoPaint(),\n                  r.emit(\"afteritemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }));\n            }),\n            (t.prototype.priorityState = function (t, e) {\n              var n = this.graph,\n                r = t;\n              Object(c.isString)(t) && (r = n.findById(t)),\n                this.setItemState(r, e, !1),\n                this.setItemState(r, e, !0);\n            }),\n            (t.prototype.clearItemStates = function (t, e) {\n              var n = this.graph;\n              Object(c.isString)(t) && (t = n.findById(t)),\n                n.emit(\"beforeitemstatesclear\", { item: t, states: e }),\n                t.clearStates(e),\n                n.emit(\"afteritemstatesclear\", { item: t, states: e });\n            }),\n            (t.prototype.refreshItem = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t)),\n                e.emit(\"beforeitemrefresh\", { item: t }),\n                t.refresh(),\n                e.emit(\"afteritemrefresh\", { item: t });\n            }),\n            (t.prototype.addCombos = function (t, e) {\n              var n = this,\n                r = this.graph;\n              (t || []).forEach(function (t) {\n                pt(t, function (t) {\n                  var r;\n                  return (\n                    e.forEach(function (e) {\n                      e.id === t.id &&\n                        ((e.children = t.children),\n                        (e.depth = t.depth),\n                        (r = e));\n                    }),\n                    r && n.addItem(\"combo\", r),\n                    !0\n                  );\n                });\n              });\n              var i = r.get(\"comboGroup\");\n              i && i.sort();\n            }),\n            (t.prototype.changeItemVisibility = function (t, e) {\n              var n = this,\n                r = this.graph;\n              if ((Object(c.isString)(t) && (t = r.findById(t)), t)) {\n                if (\n                  (r.emit(\"beforeitemvisibilitychange\", {\n                    item: t,\n                    visible: e,\n                  }),\n                  t.changeVisibility(e),\n                  t.getType && \"node\" === t.getType())\n                ) {\n                  var i = t.getEdges();\n                  Object(c.each)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                } else if (t.getType && \"combo\" === t.getType()) {\n                  var o = r.get(\"comboTrees\"),\n                    a = t.get(\"id\"),\n                    s = [],\n                    u = !1;\n                  (o || []).forEach(function (t) {\n                    u ||\n                      (t.children &&\n                        0 !== t.children.length &&\n                        dt(t, function (t) {\n                          return t.id !== a || ((s = t.children), (u = !0), !1);\n                        }));\n                  }),\n                    s &&\n                      (!e || (e && !t.getModel().collapsed)) &&\n                      s.forEach(function (t) {\n                        var i = r.findById(t.id);\n                        n.changeItemVisibility(i, e);\n                      });\n                  i = t.getEdges();\n                  Object(c.each)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                }\n                return (\n                  r.emit(\"afteritemvisibilitychange\", { item: t, visible: e }),\n                  t\n                );\n              }\n              console.warn(\"The item to be shown or hidden does not exist!\");\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Kt = null,\n        $t = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.cachedStates = { enabled: {}, disabled: {} }),\n              (this.destroyed = !1);\n          }\n          return (\n            (t.checkCache = function (t, e, n) {\n              if (n[e]) {\n                var r = n[e].indexOf(t);\n                r >= 0 && n[e].splice(r, 1);\n              }\n            }),\n            (t.cacheState = function (t, e, n) {\n              n[e] || (n[e] = []), n[e].push(t);\n            }),\n            (t.prototype.updateState = function (e, n, r) {\n              var i = this,\n                o = t.checkCache,\n                a = t.cacheState;\n              if (!e.destroyed) {\n                var s = this.cachedStates,\n                  c = s.enabled,\n                  u = s.disabled;\n                r ? (o(e, n, u), a(e, n, c)) : (o(e, n, c), a(e, n, u)),\n                  Kt && clearTimeout(Kt),\n                  (Kt = setTimeout(function () {\n                    (Kt = null), i.updateGraphStates();\n                  }, 16));\n              }\n            }),\n            (t.prototype.updateStates = function (t, e, n) {\n              var r = this;\n              Object(c.isString)(e)\n                ? this.updateState(t, e, n)\n                : e.forEach(function (e) {\n                    r.updateState(t, e, n);\n                  });\n            }),\n            (t.prototype.updateGraphStates = function () {\n              var t = this.graph.get(\"states\"),\n                e = this.cachedStates;\n              Object(c.each)(e.disabled, function (e, n) {\n                t[n] &&\n                  (t[n] = t[n].filter(function (t) {\n                    return e.indexOf(t) < 0 && !e.destroyed;\n                  }));\n              }),\n                Object(c.each)(e.enabled, function (e, n) {\n                  if (t[n]) {\n                    var r = {};\n                    t[n].forEach(function (t) {\n                      t.destroyed || (r[t.get(\"id\")] = !0);\n                    }),\n                      e.forEach(function (e) {\n                        if (!e.destroyed) {\n                          var i = e.get(\"id\");\n                          r[i] || ((r[i] = !0), t[n].push(e));\n                        }\n                      });\n                  } else t[n] = e;\n                }),\n                this.graph.emit(\"graphstatechange\", { states: t }),\n                (this.cachedStates = { enabled: {}, disabled: {} });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.cachedStates = null),\n                Kt && clearTimeout(Kt),\n                (Kt = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Qt = n(28),\n        Jt = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                if (\"\\\\\" === t.charAt(0)) return t.slice(1);\n                var r = e[n];\n                return 0 === r && (r = \"0\"), r || \"\";\n              })\n            : t;\n        },\n        te = function (t) {\n          var e = [];\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \".concat(t.length),\n            );\n          for (var n = 0, r = t; n < r.length; n++) {\n            var i = r[n],\n              o = i.x,\n              a = i.y;\n            e.push(o), e.push(a);\n          }\n          var s = Object(Qt.a)(e);\n          return s.unshift([\"M\", t[0].x, t[0].y]), s;\n        },\n        ee = function (t, e, n, r) {\n          void 0 === n && (n = 0), void 0 === r && (r = 0);\n          var i = { x: (1 - n) * t.x + n * e.x, y: (1 - n) * t.y + n * e.y },\n            o = [0, 0];\n          g.c.normalize(o, [e.x - t.x, e.y - t.y]),\n            (o && (o[0] || o[1])) || (o = [0, 0]);\n          var a = [-o[1] * r, o[0] * r];\n          return (i.x += a[0]), (i.y += a[1]), i;\n        },\n        ne = function (t, e) {\n          var n = t.length;\n          if (!n) return \"\";\n          for (var r = \"\", i = 0; i < n; i++) {\n            var o = t[i];\n            r += Jt(0 === i ? \"M{x} {y}\" : \"L{x} {y}\", o);\n          }\n          return e && (r += \"Z\"), r;\n        },\n        re = function (t) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              if (\"A\" !== t[0])\n                for (var n = 1; n < t.length; n += 2) e.push([t[n], t[n + 1]]);\n              else {\n                var r = t.length;\n                e.push([t[r - 2], t[r - 1]]);\n              }\n            }),\n            e\n          );\n        },\n        ie = function (t) {\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \".concat(t.length),\n            );\n          var e = t[0],\n            n = t[1],\n            r = t[t.length - 1],\n            i = t[t.length - 2];\n          t.unshift(r), t.unshift(i), t.push(e), t.push(n);\n          for (var o = [], a = 1; a < t.length - 2; a += 1) {\n            var s = t[a - 1].x,\n              c = t[a - 1].y,\n              u = t[a].x,\n              h = t[a].y,\n              l = t[a + 1].x,\n              f = t[a + 1].y,\n              d = u + (l - s) / 6,\n              p = h + (f - c) / 6,\n              g = l - ((a !== t.length - 2 ? t[a + 2].x : l) - u) / 6,\n              v = f - ((a !== t.length - 2 ? t[a + 2].y : f) - h) / 6;\n            o.push([\"C\", d, p, g, v, l, f]);\n          }\n          return o.unshift([\"M\", r.x, r.y]), o;\n        },\n        oe = function (t, e) {\n          return g.c.scale([0, 0], g.c.normalize([0, 0], t), e);\n        },\n        ae = function (t, e) {\n          var n = [t[1] - e[1], e[0] - t[0]],\n            r = Math.sqrt(n[0] * n[0] + n[1] * n[1]);\n          if (0 === r) throw new Error(\"p0 should not be equal to p1\");\n          return [n[0] / r, n[1] / r];\n        },\n        se = function (t, e) {\n          return [e[0] - t[0], e[1] - t[1]];\n        };\n      function ce(t, e) {\n        if (!t || t.length < 1) return \"\";\n        if (1 === t.length)\n          return (function (t) {\n            var n = [t[0][0], t[0][1] - e],\n              r = [t[0][0], t[0][1] + e];\n            return \"M \"\n              .concat(n, \" A \")\n              .concat(e, \",\")\n              .concat(e, \",0,0,0,\")\n              .concat(r, \" A \")\n              .concat(e, \",\")\n              .concat(e, \",0,0,0,\")\n              .concat(n);\n          })(t);\n        if (2 === t.length)\n          return (function (t) {\n            var n = g.c.scale([0, 0], ae(t[0], t[1]), e),\n              r = g.c.scale([0, 0], n, -1),\n              i = g.c.add([0, 0], t[0], n),\n              o = g.c.add([0, 0], t[1], n),\n              a = g.c.add([0, 0], t[1], r),\n              s = g.c.add([0, 0], t[0], r);\n            return \"M \"\n              .concat(i, \" L \")\n              .concat(o, \" A \")\n              .concat([e, e, \"0,0,0\", a].join(\",\"), \" L \")\n              .concat(s, \" A \")\n              .concat([e, e, \"0,0,0\", i].join(\",\"));\n          })(t);\n        for (var n = new Array(t.length), r = 0; r < n.length; ++r) {\n          var i = 0 === r ? t[t.length - 1] : t[r - 1],\n            o = t[r],\n            a = g.c.scale([0, 0], ae(i, o), e);\n          n[r] = [g.c.add([0, 0], i, a), g.c.add([0, 0], o, a)];\n        }\n        var s = \"A \".concat([e, e, \"0,0,0,\"].join(\",\"));\n        return (n = n.map(function (t, e) {\n          var r = \"\";\n          return (\n            0 === e && (r = \"M \".concat(n[n.length - 1][1], \" \")),\n            (r += \"\".concat(s + t[0], \" L \").concat(t[1]))\n          );\n        })).join(\" \");\n      }\n      function ue(t, e) {\n        var n,\n          r,\n          i,\n          o = t.length;\n        if (!t || o < 1) return \"\";\n        if (1 === o)\n          return (\n            (r = [(n = t)[0][0], n[0][1] - e]),\n            (i = [n[0][0], n[0][1] + e]),\n            \"M \"\n              .concat(r, \" A \")\n              .concat([e, e, \"0,0,0\", i].join(\",\"), \" A \")\n              .concat([e, e, \"0,0,0\", r].join(\",\"))\n          );\n        if (2 === o)\n          return (function (t) {\n            var n = se(t[0], t[1]),\n              r = oe(n, e),\n              i = g.c.add([0, 0], t[0], g.c.scale([0, 0], r, -1)),\n              o = g.c.add([0, 0], t[1], r),\n              a = 1.2 * e,\n              s = oe(g.c.normalize([0, 0], n), a),\n              c = g.c.scale([0, 0], s, -1),\n              u = g.c.add([0, 0], i, c),\n              h = g.c.add([0, 0], o, c),\n              l = g.c.add([0, 0], i, s);\n            return \"M \"\n              .concat(i, \" C \")\n              .concat([u, h, o].join(\",\"), \" S \")\n              .concat([l, i].join(\",\"), \" Z\");\n          })(t);\n        for (\n          var a = t.map(function (e, n) {\n              var r = t[(n + 1) % o];\n              return { p: e, v: g.c.normalize([0, 0], se(e, r)) };\n            }),\n            s = 0;\n          s < a.length;\n          ++s\n        ) {\n          var c = s > 0 ? s - 1 : o - 1,\n            u = g.c.normalize(\n              [0, 0],\n              g.c.add([0, 0], a[c].v, g.c.scale([0, 0], a[s].v, -1)),\n            );\n          a[s].p = g.c.add([0, 0], a[s].p, g.c.scale([0, 0], u, e));\n        }\n        return a.map(function (t) {\n          var e = t.p;\n          return { x: e[0], y: e[1] };\n        });\n      }\n      var he = function (t, e, n) {\n          return (t.y - n.y) * (e.x - n.x) - (t.x - n.x) * (e.y - n.y);\n        },\n        le = function (t) {\n          var e = t.map(function (t) {\n            return { x: t.getModel().x, y: t.getModel().y };\n          });\n          if (\n            (e.sort(function (t, e) {\n              return t.x === e.x ? t.y - e.y : t.x - e.x;\n            }),\n            1 === e.length)\n          )\n            return e;\n          for (var n = [], r = 0; r < e.length; r++) {\n            for (\n              ;\n              n.length >= 2 && he(n[n.length - 2], n[n.length - 1], e[r]) <= 0;\n\n            )\n              n.pop();\n            n.push(e[r]);\n          }\n          var i = [];\n          for (r = e.length - 1; r >= 0; r--) {\n            for (\n              ;\n              i.length >= 2 && he(i[i.length - 2], i[i.length - 1], e[r]) <= 0;\n\n            )\n              i.pop();\n            i.push(e[r]);\n          }\n          return i.pop(), n.pop(), n.concat(i);\n        },\n        fe = {\n          maxRoutingIterations: 100,\n          maxMarchingIterations: 100,\n          pixelGroupSize: 2,\n          edgeR0: 10,\n          edgeR1: 10,\n          nodeR0: 5,\n          nodeR1: 10,\n          morphBuffer: 5,\n          threshold: 0.001,\n          skip: 16,\n          nodeInfluenceFactor: 1,\n          edgeInfluenceFactor: 1,\n          negativeNodeInfluenceFactor: -0.5,\n        };\n      function de(t, e, n) {\n        var r = !1,\n          i = function (t, n) {\n            return e.cells[t + n * e.width];\n          },\n          o = function (t, e) {\n            var r = 0;\n            return (\n              i(t - 1, e - 1) >= n && (r += 1),\n              i(t, e - 1) > n && (r += 2),\n              i(t - 1, e) > n && (r += 4),\n              i(t, e) > n && (r += 8),\n              r\n            );\n          },\n          a = function (n, r) {\n            for (var i, a, s = n, c = r, u = 0; u < e.width * e.height; u++) {\n              if (\n                ((i = s),\n                (a = c),\n                t.findIndex(function (t) {\n                  return t.x === s && t.y === c;\n                }) > -1)\n              ) {\n                if (t[0].x === s && t[0].y === c) return !0;\n              } else t.push({ x: s, y: c });\n              var h = o(s, c);\n              switch (h) {\n                case -1:\n                  return console.warn(\"Marched out of bounds\"), !0;\n                case 0:\n                case 3:\n                case 2:\n                case 7:\n                  s++;\n                  break;\n                case 12:\n                case 14:\n                case 4:\n                  s--;\n                  break;\n                case 6:\n                  0 === i && (-1 === a ? (s -= 1) : (s += 1));\n                  break;\n                case 1:\n                case 13:\n                case 5:\n                  c--;\n                  break;\n                case 9:\n                  1 === i && (0 === a ? (c -= 1) : (c += 1));\n                  break;\n                case 10:\n                case 8:\n                case 11:\n                  c++;\n                  break;\n                default:\n                  return (\n                    console.warn(\"Marching squares invalid state: \".concat(h)),\n                    !0\n                  );\n              }\n            }\n          };\n        this.march = function () {\n          for (var t = 0; t < e.width && !r; t += 1)\n            for (var s = 0; s < e.height && !r; s += 1)\n              i(t, s) > n && 15 !== o(t, s) && (r = a(t, s));\n          return r;\n        };\n      }\n      var pe = function (t, e) {\n        var n = Number.POSITIVE_INFINITY,\n          r = null;\n        return (\n          t.forEach(function (t) {\n            var i = q(t, e);\n            i >= 0 && i < n && ((r = t), (n = i));\n          }),\n          r\n        );\n      };\n      function ge(t, e, n, r, i) {\n        var o = (function (t, e, n) {\n          var r = null,\n            i = Number.POSITIVE_INFINITY;\n          return (\n            e.forEach(function (e) {\n              var o = { x: t.getModel().x, y: t.getModel().y },\n                a = { x: e.getModel().x, y: e.getModel().y },\n                s = G(o, a),\n                c = new Y(o.x, o.y, a.x, a.y),\n                u = n.reduce(function (t, e) {\n                  return q(e, c) > 0 ? t + 1 : t;\n                }, 0);\n              s * Math.pow(u + 1, 2) < i &&\n                ((r = e), (i = s * Math.pow(u + 1, 2)));\n            }),\n            r\n          );\n        })(t, n, e);\n        if (null === o) return [];\n        return (function (t) {\n          for (var n = []; t.length > 0; ) {\n            var r = t.pop();\n            if (0 === t.length) {\n              n.push(r);\n              break;\n            }\n            var i = t.pop(),\n              o = new Y(r.x1, r.y1, i.x2, i.y2);\n            pe(e, o) ? (n.push(r), t.push(i)) : t.push(o);\n          }\n          return n;\n        })(\n          (function (t, e, n, r) {\n            var i = [],\n              o = [];\n            o.push(t);\n            for (\n              var a = !0,\n                s = 0,\n                c = function (t, e) {\n                  var n = !1;\n                  return (\n                    e.forEach(function (e) {\n                      n ||\n                        ((U(t, { x: e.x1, y: e.y1 }) ||\n                          U(t, { x: e.x2, y: e.y2 })) &&\n                          (n = !0));\n                    }),\n                    n\n                  );\n                },\n                u = function (t, e) {\n                  for (var n = 0, r = e; n < r.length; n++) {\n                    var i = r[n].getBBox(),\n                      o = [\n                        [i.x, i.y],\n                        [i.x + i.width, i.y],\n                        [i.x, i.y + i.height],\n                        [i.x + i.width, i.y + i.height],\n                      ];\n                    if (_(o, t.x, t.y)) return !0;\n                  }\n                  return !1;\n                };\n              a && s < n;\n\n            ) {\n              a = !1;\n              for (\n                var h = function () {\n                  var t = o.pop(),\n                    n = pe(e, t);\n                  if (n) {\n                    var h = W(n, t),\n                      l = h[0];\n                    if (2 === h[1]) {\n                      var f = function (s) {\n                        for (\n                          var h = r,\n                            f = me(n, h, l, s),\n                            d = c(f, o) || c(f, i),\n                            p = u(f, e);\n                          !d && p && h >= 1;\n\n                        )\n                          (f = me(n, (h /= 1.5), l, s)),\n                            (d = c(f, o) || c(f, i)),\n                            (p = u(f, e));\n                        !f ||\n                          d ||\n                          (s && p) ||\n                          (o.push(new Y(t.x1, t.y1, f.x, f.y)),\n                          o.push(new Y(f.x, f.y, t.x2, t.y2)),\n                          (a = !0));\n                      };\n                      f(!0), a || f(!1);\n                    }\n                  }\n                  a || i.push(t), (s += 1);\n                };\n                !a && o.length;\n\n              )\n                h();\n            }\n            for (; o.length; ) i.push(o.pop());\n            return i;\n          })(\n            new Y(\n              t.getModel().x,\n              t.getModel().y,\n              o.getModel().x,\n              o.getModel().y,\n            ),\n            e,\n            r,\n            i,\n          ),\n        );\n      }\n      var ve = function (t, e, n) {\n        var r = Object.assign(fe, n),\n          i = V(\n            t.map(function (t) {\n              return { x: t.getModel().x, y: t.getModel().y };\n            }),\n          );\n        t = t.sort(function (t, e) {\n          return (\n            G({ x: t.getModel().x, y: t.getModel().y }, i) -\n            G({ x: e.getModel().x, y: e.getModel().y }, i)\n          );\n        });\n        var o = [],\n          a = [];\n        t.forEach(function (t) {\n          ge(t, e, o, r.maxRoutingIterations, r.morphBuffer).forEach(\n            function (t) {\n              a.push(t);\n            },\n          ),\n            o.push(t);\n        });\n        for (\n          var s,\n            c,\n            u,\n            h,\n            l,\n            f = (function (t, e, n) {\n              var r = {\n                  minX: Number.POSITIVE_INFINITY,\n                  minY: Number.POSITIVE_INFINITY,\n                  maxX: Number.NEGATIVE_INFINITY,\n                  maxY: Number.NEGATIVE_INFINITY,\n                  width: 0,\n                  height: 0,\n                  x: 0,\n                  y: 0,\n                },\n                i = [];\n              t.forEach(function (t) {\n                i.push(t.getBBox());\n              }),\n                e.forEach(function (t) {\n                  i.push(t.getBBox());\n                });\n              for (var o = 0, a = i; o < a.length; o++) {\n                var s = a[o];\n                (r.minX = (s.minX < r.minX ? s.minX : r.minX) - n),\n                  (r.minY = (s.minY < r.minY ? s.minY : r.minY) - n),\n                  (r.maxX = (s.maxX > r.maxX ? s.maxX : r.maxX) + n),\n                  (r.maxY = (s.maxY > r.maxY ? s.maxY : r.maxY) + n);\n              }\n              return (\n                (r.width = r.maxX - r.minX),\n                (r.height = r.maxY - r.minY),\n                (r.x = r.minX),\n                (r.y = r.minY),\n                r\n              );\n            })(t, a, r.nodeR0),\n            d =\n              ((s = f.width),\n              (c = f.height),\n              (u = r.pixelGroupSize),\n              (h = Math.ceil(s / u)),\n              (l = Math.ceil(c / u)),\n              {\n                cells: new Float32Array(Math.max(0, h * l)).fill(0),\n                width: h,\n                height: l,\n              }),\n            p = [],\n            g = [],\n            v = 0;\n          v < r.maxMarchingIterations;\n          v++\n        )\n          if (\n            (ye(t, e, a, f, d, r),\n            (g = []),\n            new de((p = []), d, r.threshold).march())\n          ) {\n            var y = p.map(function (t) {\n              return {\n                x: Math.round(t.x * r.pixelGroupSize + f.minX),\n                y: Math.round(t.y * r.pixelGroupSize + f.minY),\n              };\n            });\n            if (y) {\n              var m = y.length;\n              if (r.skip > 1)\n                for (m = Math.floor(y.length / r.skip); m < 3 && r.skip > 1; )\n                  (r.skip -= 1), (m = Math.floor(y.length / r.skip));\n              for (var b = 0, x = 0; x < m; x += 1, b += r.skip)\n                g.push({ x: y[b].x, y: y[b].y });\n            }\n            if (\n              g &&\n              (function () {\n                for (var e = 0, n = t; e < n.length; e++) {\n                  var r = n[e],\n                    i = g.map(function (t) {\n                      return [t.x, t.y];\n                    });\n                  if (!_(i, r.getBBox().centerX, r.getBBox().centerY))\n                    return !1;\n                }\n                return !0;\n              })()\n            )\n              return g;\n            if (((r.threshold *= 0.9), v <= 0.5 * r.maxMarchingIterations))\n              (r.memberInfluenceFactor *= 1.2), (r.edgeInfluenceFactor *= 1.2);\n            else {\n              if (!(0 !== r.nonMemberInfluenceFactor && e.length > 0)) break;\n              r.nonMemberInfluenceFactor *= 0.8;\n            }\n          }\n        return g;\n      };\n      function ye(t, e, n, r, i, o) {\n        function a(t, e) {\n          var n = Math.floor((t - e) / o.pixelGroupSize);\n          return n < 0 ? 0 : n;\n        }\n        function s(t, e) {\n          return t * o.pixelGroupSize + e;\n        }\n        var c = (o.nodeR0 - o.nodeR1) * (o.nodeR0 - o.nodeR1),\n          u = (o.edgeR0 - o.edgeR1) * (o.edgeR0 - o.edgeR1),\n          h = function (t, e) {\n            return [\n              Math.min(a(t.minX, e + r.minX), i.width),\n              Math.min(a(t.minY, e + r.minY), i.height),\n              Math.min(a(t.maxX, -e + r.minX), i.width),\n              Math.min(a(t.maxY, -e + r.minY), i.height),\n            ];\n          },\n          l = function (t, e) {\n            for (\n              var n = t.getBBox(),\n                a = h(n, o.nodeR1),\n                c = a[0],\n                u = a[1],\n                l = a[2],\n                f = a[3],\n                d = u;\n              d < f;\n              d += 1\n            )\n              for (var p = c; p < l; p += 1)\n                if (!(e < 0 && i[p + d * i.width] <= 0)) {\n                  var g = s(p, r.minX),\n                    v = s(d, r.minY),\n                    y = Z(\n                      { x: g, y: v },\n                      {\n                        x: n.minX,\n                        y: n.minY,\n                        width: n.width,\n                        height: n.height,\n                      },\n                    );\n                  if (y < Math.pow(o.nodeR1, 2)) {\n                    var m = Math.sqrt(y) - o.nodeR1;\n                    i.cells[p + d * i.width] += e * m * m;\n                  }\n                }\n          };\n        o.nodeInfluenceFactor &&\n          t.forEach(function (t) {\n            l(t, o.nodeInfluenceFactor / c);\n          }),\n          o.edgeInfluenceFactor &&\n            n.forEach(function (t) {\n              !(function (t, e) {\n                for (\n                  var n = t.getBBox(),\n                    a = h(n, o.edgeR1),\n                    c = a[0],\n                    u = a[1],\n                    l = a[2],\n                    f = a[3],\n                    d = u;\n                  d < f;\n                  d += 1\n                )\n                  for (var p = c; p < l; p += 1)\n                    if (!(e < 0 && i.cells[p + d * i.width] <= 0)) {\n                      var g = s(p, r.minX),\n                        v = s(d, r.minY),\n                        y = H({ x: g, y: v }, t);\n                      if (y < Math.pow(o.edgeR1, 2)) {\n                        var m = Math.sqrt(y) - o.edgeR1;\n                        i.cells[p + d * i.width] += e * m * m;\n                      }\n                    }\n              })(t, o.edgeInfluenceFactor / u);\n            }),\n          o.negativeNodeInfluenceFactor &&\n            e.forEach(function (t) {\n              l(t, o.negativeNodeInfluenceFactor / c);\n            });\n      }\n      function me(t, e, n, r) {\n        var i = t.getBBox(),\n          o = n[0],\n          a = n[1],\n          s = n[2],\n          c = n[3],\n          u = {\n            topLeft: { x: i.minX - e, y: i.minY - e },\n            topRight: { x: i.maxX + e, y: i.minY - e },\n            bottomLeft: { x: i.minX - e, y: i.maxY + e },\n            bottomRight: { x: i.maxX + e, y: i.maxY + e },\n          },\n          h = i.height * i.width;\n        function l(t, e) {\n          return i.width * (0.5 * (t.y - i.minY + (e.y - i.minY)));\n        }\n        if (a)\n          return o\n            ? r\n              ? u.topLeft\n              : u.bottomRight\n            : s\n            ? r\n              ? u.bottomLeft\n              : u.topRight\n            : l(a, c) < 0.5 * h\n            ? a.y > c.y\n              ? r\n                ? u.topLeft\n                : u.bottomRight\n              : r\n              ? u.topRight\n              : u.bottomLeft\n            : a.y < c.y\n            ? r\n              ? u.bottomLeft\n              : u.topRight\n            : r\n            ? u.bottomRight\n            : u.topLeft;\n        if (c) {\n          if (o) return r ? u.topRight : u.bottomLeft;\n          if (s) return r ? u.bottomRight : u.topLeft;\n        }\n        return l(o, s) < 0.5 * h\n          ? o.x > s.x\n            ? r\n              ? u.topLeft\n              : u.bottomRight\n            : r\n            ? u.bottomLeft\n            : u.topRight\n          : o.x < s.x\n          ? r\n            ? u.topRight\n            : u.bottomLeft\n          : r\n          ? u.bottomRight\n          : u.topLeft;\n      }\n      var be = (function () {\n          function t(t, e) {\n            (this.cfg = Object(c.deepMix)(this.getDefaultCfg(), e)),\n              (this.graph = t),\n              (this.id = this.cfg.id),\n              (this.group = this.cfg.group),\n              (this.members = this.cfg.members.map(function (e) {\n                return Object(c.isString)(e) ? t.findById(e) : e;\n              })),\n              (this.nonMembers = this.cfg.nonMembers.map(function (e) {\n                return Object(c.isString)(e) ? t.findById(e) : e;\n              })),\n              this.setPadding(),\n              this.setType(),\n              (this.path = this.calcPath(this.members, this.nonMembers)),\n              this.render();\n          }\n          return (\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                id: \"g6-hull\",\n                type: \"round-convex\",\n                members: [],\n                nonMembers: [],\n                style: { fill: \"lightblue\", stroke: \"blue\", opacity: 0.2 },\n                padding: 10,\n              };\n            }),\n            (t.prototype.setPadding = function () {\n              var t =\n                this.members.length &&\n                this.members[0].getKeyShape().getCanvasBBox().width / 2;\n              (this.padding =\n                this.cfg.padding > 0 ? this.cfg.padding + t : 10 + t),\n                (this.cfg.bubbleCfg = {\n                  nodeR0: this.padding - t,\n                  nodeR1: this.padding - t,\n                  morphBuffer: this.padding - t,\n                });\n            }),\n            (t.prototype.setType = function () {\n              (this.type = this.cfg.type),\n                this.members.length < 3 && (this.type = \"round-convex\"),\n                \"round-convex\" !== this.type &&\n                  \"smooth-convex\" !== this.type &&\n                  \"bubble\" !== this.type &&\n                  (console.warn(\n                    \"The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default.\",\n                  ),\n                  (this.type = \"round-convex\"));\n            }),\n            (t.prototype.calcPath = function (t, e) {\n              var n, r, i;\n              switch (this.type) {\n                case \"round-convex\":\n                  (i = ce(\n                    (n = le(t)).map(function (t) {\n                      return [t.x, t.y];\n                    }),\n                    this.padding,\n                  )),\n                    (r = Object(Qt.b)(i));\n                  break;\n                case \"smooth-convex\":\n                  2 === (n = le(t)).length\n                    ? ((i = ce(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = Object(Qt.b)(i)))\n                    : n.length > 2 &&\n                      ((i = ue(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = ie(i)));\n                  break;\n                case \"bubble\":\n                  r = (n = ve(t, e, this.cfg.bubbleCfg)).length >= 2 && ie(n);\n              }\n              return r;\n            }),\n            (t.prototype.render = function () {\n              this.group.addShape(\"path\", {\n                attrs: Object(f.a)({ path: this.path }, this.cfg.style),\n                id: this.id,\n                name: this.cfg.id,\n              }),\n                this.group.toBack();\n            }),\n            (t.prototype.addMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t)),\n                  this.members.push(t);\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 && this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.addNonMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t)),\n                  this.nonMembers.push(t);\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 && this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.removeMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t));\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.removeNonMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t));\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.updateData = function (t, e) {\n              var n = this;\n              this.group.findById(this.id).remove(),\n                t &&\n                  (this.members = t.map(function (t) {\n                    return Object(c.isString)(t) ? n.graph.findById(t) : t;\n                  })),\n                e &&\n                  (this.nonMembers = e.map(function (t) {\n                    return Object(c.isString)(t) ? n.graph.findById(t) : t;\n                  })),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.updateStyle = function (t) {\n              this.group.findById(this.id).attr(Object(f.a)({}, t));\n            }),\n            (t.prototype.updateCfg = function (t) {\n              var e = this;\n              (this.cfg = Object(c.deepMix)(this.cfg, t)),\n                (this.id = this.cfg.id),\n                (this.group = this.cfg.group),\n                t.members &&\n                  (this.members = this.cfg.members.map(function (t) {\n                    return Object(c.isString)(t) ? e.graph.findById(t) : t;\n                  })),\n                t.nonMembers &&\n                  (this.nonMembers = this.cfg.nonMembers.map(function (t) {\n                    return Object(c.isString)(t) ? e.graph.findById(t) : t;\n                  })),\n                this.setPadding(),\n                this.setType(),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.contain = function (t) {\n              var e,\n                n,\n                r = this,\n                i = (e = Object(c.isString)(t)\n                  ? this.graph.findById(t)\n                  : t).getKeyShape();\n              if (\"path\" === e.get(\"type\")) n = re(i.attr(\"path\"));\n              else {\n                var o = i.getCanvasBBox();\n                n = [\n                  [o.minX, o.minY],\n                  [o.maxX, o.minY],\n                  [o.maxX, o.maxY],\n                  [o.minX, o.maxY],\n                ];\n              }\n              return (\n                (n = n.map(function (t) {\n                  var e = r.graph.getPointByCanvas(t[0], t[1]);\n                  return [e.x, e.y];\n                })),\n                F(n, re(this.path))\n              );\n            }),\n            (t.prototype.destroy = function () {\n              this.group.remove(), (this.cfg = null);\n            }),\n            t\n          );\n        })(),\n        xe = g.a.transform,\n        Se = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.cfg = Object(c.deepMix)(n.getDefaultCfg(), e)),\n              n.init(),\n              (n.animating = !1),\n              (n.destroyed = !1),\n              n.cfg.enabledStack &&\n                ((n.undoStack = new v.Stack(n.cfg.maxStep)),\n                (n.redoStack = new v.Stack(n.cfg.maxStep))),\n              n\n            );\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.init = function () {\n              this.initCanvas();\n              var t = new Nt(this),\n                e = new Ot(this),\n                n = new Zt(this),\n                r = new $t(this);\n              this.set({\n                viewController: t,\n                modeController: e,\n                itemController: n,\n                stateController: r,\n              }),\n                this.initLayoutController(),\n                this.initEventController(),\n                this.initGroups(),\n                this.initPlugins(),\n                (this.timeIndex = Object(p.requestAnimationFrame)(\n                  this.onTick.bind(this),\n                ));\n            }),\n            (e.prototype.initGroups = function () {\n              var t = this.get(\"canvas\"),\n                e = this.get(\"canvas\").get(\"el\").id,\n                n = t.addGroup({\n                  id: \"\".concat(e, \"-root\"),\n                  className: nt.rootContainerClassName,\n                });\n              if (this.get(\"groupByTypes\")) {\n                var r = n.addGroup({\n                    id: \"\".concat(e, \"-edge\"),\n                    className: nt.edgeContainerClassName,\n                  }),\n                  i = n.addGroup({\n                    id: \"\".concat(e, \"-node\"),\n                    className: nt.nodeContainerClassName,\n                  }),\n                  o = n.addGroup({\n                    id: \"\".concat(e, \"-combo\"),\n                    className: nt.comboContainerClassName,\n                  });\n                o.toBack(),\n                  this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n              }\n              var a = n.addGroup({\n                id: \"\".concat(e, \"-delegate\"),\n                className: nt.delegateContainerClassName,\n              });\n              this.set({ delegateGroup: a }), this.set(\"group\", n);\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                container: void 0,\n                width: void 0,\n                height: void 0,\n                renderer: \"canvas\",\n                modes: {},\n                plugins: [],\n                data: {},\n                fitViewPadding: 10,\n                minZoom: 0.2,\n                maxZoom: 10,\n                event: !0,\n                groupByTypes: !0,\n                directed: !1,\n                autoPaint: !0,\n                nodes: [],\n                edges: [],\n                combos: [],\n                vedges: [],\n                itemMap: {},\n                linkCenter: !1,\n                defaultNode: {},\n                defaultEdge: {},\n                nodeStateStyles: {},\n                edgeStateStyles: {},\n                states: {},\n                animate: !1,\n                animateCfg: {\n                  onFrame: void 0,\n                  duration: 500,\n                  easing: \"easeLinear\",\n                },\n                callback: void 0,\n                enabledStack: !1,\n                maxStep: 10,\n                tooltips: [],\n              };\n            }),\n            (e.prototype.set = function (t, e) {\n              return (\n                Object(c.isPlainObject)(t)\n                  ? (this.cfg = Object(f.a)(Object(f.a)({}, this.cfg), t))\n                  : (this.cfg[t] = e),\n                this\n              );\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.getGroup = function () {\n              return this.get(\"group\");\n            }),\n            (e.prototype.getContainer = function () {\n              return this.get(\"container\");\n            }),\n            (e.prototype.getMinZoom = function () {\n              return this.get(\"minZoom\");\n            }),\n            (e.prototype.setMinZoom = function (t) {\n              return this.set(\"minZoom\", t);\n            }),\n            (e.prototype.getMaxZoom = function () {\n              return this.get(\"maxZoom\");\n            }),\n            (e.prototype.setMaxZoom = function (t) {\n              return this.set(\"maxZoom\", t);\n            }),\n            (e.prototype.getWidth = function () {\n              return this.get(\"width\");\n            }),\n            (e.prototype.getHeight = function () {\n              return this.get(\"height\");\n            }),\n            (e.prototype.clearItemStates = function (t, e) {\n              Object(c.isString)(t) && (t = this.findById(t));\n              var n = this.get(\"itemController\");\n              e || (e = t.get(\"states\")),\n                n.clearItemStates(t, e),\n                this.get(\"stateController\").updateStates(t, e, !1);\n            }),\n            (e.prototype.node = function (t) {\n              \"function\" == typeof t && this.set(\"nodeMapper\", t);\n            }),\n            (e.prototype.edge = function (t) {\n              \"function\" == typeof t && this.set(\"edgeMapper\", t);\n            }),\n            (e.prototype.combo = function (t) {\n              \"function\" == typeof t && this.set(\"comboMapper\", t);\n            }),\n            (e.prototype.findById = function (t) {\n              return this.get(\"itemMap\")[t];\n            }),\n            (e.prototype.find = function (t, e) {\n              var n,\n                r = this.get(\"\".concat(t, \"s\"));\n              return (\n                Object(c.each)(r, function (t, r) {\n                  if (e(t, r)) return (n = t);\n                }),\n                n\n              );\n            }),\n            (e.prototype.findAll = function (t, e) {\n              var n = [];\n              return (\n                Object(c.each)(this.get(\"\".concat(t, \"s\")), function (t, r) {\n                  e(t, r) && n.push(t);\n                }),\n                n\n              );\n            }),\n            (e.prototype.findAllByState = function (t, e) {\n              return this.findAll(t, function (t) {\n                return t.hasState(e);\n              });\n            }),\n            (e.prototype.translate = function (t, e) {\n              var n = this.get(\"group\"),\n                r = Object(c.clone)(n.getMatrix());\n              r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                (r = xe(r, [[\"t\", t, e]])),\n                n.setMatrix(r),\n                this.emit(\"viewportchange\", {\n                  action: \"translate\",\n                  matrix: n.getMatrix(),\n                }),\n                this.autoPaint();\n            }),\n            (e.prototype.moveTo = function (t, e) {\n              var n = this.get(\"group\");\n              T(n, { x: t, y: e }),\n                this.emit(\"viewportchange\", {\n                  action: \"move\",\n                  matrix: n.getMatrix(),\n                });\n            }),\n            (e.prototype.fitView = function (t) {\n              t && this.set(\"fitViewPadding\", t),\n                this.get(\"viewController\").fitView(),\n                this.autoPaint();\n            }),\n            (e.prototype.fitCenter = function () {\n              this.get(\"viewController\").fitCenter(), this.autoPaint();\n            }),\n            (e.prototype.addBehaviors = function (t, e) {\n              return (\n                this.get(\"modeController\").manipulateBehaviors(t, e, !0), this\n              );\n            }),\n            (e.prototype.removeBehaviors = function (t, e) {\n              return (\n                this.get(\"modeController\").manipulateBehaviors(t, e, !1), this\n              );\n            }),\n            (e.prototype.updateBehavior = function (t, e, n) {\n              return this.get(\"modeController\").updateBehavior(t, e, n), this;\n            }),\n            (e.prototype.zoom = function (t, e) {\n              var n = this.get(\"group\"),\n                r = Object(c.clone)(n.getMatrix()),\n                i = this.get(\"minZoom\"),\n                o = this.get(\"maxZoom\");\n              r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                (r = xe(\n                  r,\n                  e\n                    ? [\n                        [\"t\", -e.x, -e.y],\n                        [\"s\", t, t],\n                        [\"t\", e.x, e.y],\n                      ]\n                    : [[\"s\", t, t]],\n                )),\n                (i && r[0] < i) ||\n                  (o && r[0] > o) ||\n                  (n.setMatrix(r),\n                  this.emit(\"viewportchange\", { action: \"zoom\", matrix: r }),\n                  this.autoPaint());\n            }),\n            (e.prototype.zoomTo = function (t, e) {\n              var n = t / this.getZoom();\n              this.zoom(n, e);\n            }),\n            (e.prototype.focusItem = function (t, e, n) {\n              var r = this.get(\"viewController\"),\n                i = !1;\n              e ? (i = !0) : void 0 === e && (i = this.get(\"animate\"));\n              var o = {};\n              n ? (o = n) : void 0 === n && (o = this.get(\"animateCfg\")),\n                r.focus(t, i, o),\n                this.autoPaint();\n            }),\n            (e.prototype.autoPaint = function () {\n              this.get(\"autoPaint\") && this.paint();\n            }),\n            (e.prototype.paint = function () {\n              this.emit(\"beforepaint\"),\n                this.get(\"canvas\").draw(),\n                this.emit(\"afterpaint\");\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              return this.get(\"viewController\").getPointByClient(t, e);\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              return this.get(\"viewController\").getClientByPoint(t, e);\n            }),\n            (e.prototype.getPointByCanvas = function (t, e) {\n              return this.get(\"viewController\").getPointByCanvas(t, e);\n            }),\n            (e.prototype.getCanvasByPoint = function (t, e) {\n              return this.get(\"viewController\").getCanvasByPoint(t, e);\n            }),\n            (e.prototype.getGraphCenterPoint = function () {\n              var t = this.get(\"group\").getCanvasBBox();\n              return { x: (t.minX + t.maxX) / 2, y: (t.minY + t.maxY) / 2 };\n            }),\n            (e.prototype.getViewPortCenterPoint = function () {\n              return this.getPointByCanvas(\n                this.get(\"width\") / 2,\n                this.get(\"height\") / 2,\n              );\n            }),\n            (e.prototype.showItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this.get(\"itemController\").changeItemVisibility(t, !0);\n              if (e && this.get(\"enabledStack\")) {\n                var r = n.getID(),\n                  i = {},\n                  o = {};\n                switch (n.getType()) {\n                  case \"node\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.nodes = [{ id: r, visible: !0 }]);\n                    break;\n                  case \"edge\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.edges = [{ id: r, visible: !0 }]);\n                    break;\n                  case \"combo\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.combos = [{ id: r, visible: !0 }]);\n                }\n                this.pushStack(\"visible\", { before: i, after: o });\n              }\n            }),\n            (e.prototype.hideItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this.get(\"itemController\").changeItemVisibility(t, !1);\n              if (e && this.get(\"enabledStack\")) {\n                var r = n.getID(),\n                  i = {},\n                  o = {};\n                switch (n.getType()) {\n                  case \"node\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.nodes = [{ id: r, visible: !1 }]);\n                    break;\n                  case \"edge\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.edges = [{ id: r, visible: !1 }]);\n                    break;\n                  case \"combo\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.combos = [{ id: r, visible: !1 }]);\n                }\n                this.pushStack(\"visible\", { before: i, after: o });\n              }\n            }),\n            (e.prototype.refreshItem = function (t) {\n              this.get(\"itemController\").refreshItem(t);\n            }),\n            (e.prototype.setAutoPaint = function (t) {\n              this.set(\"autoPaint\", t), this.get(\"canvas\").set(\"autoDraw\", t);\n            }),\n            (e.prototype.remove = function (t, e) {\n              void 0 === e && (e = !0), this.removeItem(t, e);\n            }),\n            (e.prototype.removeItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = t;\n              if (\n                (Object(c.isString)(t) && (n = this.findById(t)),\n                !n && Object(c.isString)(t))\n              )\n                console.warn(\"The item to be removed does not exist!\");\n              else if (n) {\n                var r = \"\";\n                if (\n                  (n.getType && (r = n.getType()),\n                  e && this.get(\"enabledStack\"))\n                ) {\n                  var i = Object(f.a)(Object(f.a)({}, n.getModel()), {\n                      itemType: r,\n                    }),\n                    o = {};\n                  switch (r) {\n                    case \"node\":\n                      (o.nodes = [i]), (o.edges = []);\n                      for (var a = n.getEdges(), s = a.length - 1; s >= 0; s--)\n                        o.edges.push(\n                          Object(f.a)(Object(f.a)({}, a[s].getModel()), {\n                            itemType: \"edge\",\n                          }),\n                        );\n                      break;\n                    case \"edge\":\n                      o.edges = [i];\n                      break;\n                    case \"combo\":\n                      o.combos = [i];\n                  }\n                  this.pushStack(\"delete\", { before: o, after: {} });\n                }\n                if (\"node\" === r)\n                  n.getModel().comboId && this.updateComboTree(n);\n                if ((this.get(\"itemController\").removeItem(n), \"combo\" === r)) {\n                  var u = mt(this.get(\"comboTrees\"));\n                  this.set(\"comboTrees\", u);\n                }\n              }\n            }),\n            (e.prototype.addItem = function (t, e, n, r) {\n              void 0 === n && (n = !0), void 0 === r && (r = !0);\n              var i = this.get(\"comboSorted\");\n              this.set(\"comboSorted\", i && !r);\n              var o = this.get(\"itemController\");\n              if (\n                !(function (t, e) {\n                  if (\"node\" === t || \"combo\" === t) {\n                    if (e.id && !Object(c.isString)(e.id))\n                      return (\n                        console.warn(\n                          \"G6 Warning Tips: missing 'id' property, or the 'id' %c\".concat(\n                            e.id,\n                            \"%c is not a string.\",\n                          ),\n                          \"font-size: 20px; color: red;\",\n                          \"\",\n                        ),\n                        !1\n                      );\n                  } else if (!(\"edge\" !== t || (e.source && e.target)))\n                    return (\n                      console.warn(\n                        \"G6 Warning Tips: missing 'source' or 'target' for the edge.\",\n                      ),\n                      !1\n                    );\n                  return !0;\n                })(t, e)\n              )\n                return !1;\n              if (!e.id || !this.findById(e.id)) {\n                var a,\n                  s = this.get(\"comboTrees\");\n                if ((s || (s = []), \"combo\" === t)) {\n                  var u = this.get(\"itemMap\"),\n                    h = !1;\n                  if (\n                    (s.forEach(function (n) {\n                      h ||\n                        pt(n, function (n) {\n                          if (e.parentId === n.id) {\n                            h = !0;\n                            var r = Object(f.a)(\n                              { id: e.id, depth: n.depth + 2 },\n                              e,\n                            );\n                            n.children\n                              ? n.children.push(r)\n                              : (n.children = [r]),\n                              (e.depth = r.depth),\n                              (a = o.addItem(t, e));\n                          }\n                          var i = u[n.id];\n                          return (\n                            h &&\n                              i &&\n                              i.getType &&\n                              \"combo\" === i.getType() &&\n                              o.updateCombo(i, n.children),\n                            !0\n                          );\n                        });\n                    }),\n                    !h)\n                  ) {\n                    var l = Object(f.a)({ id: e.id, depth: 0 }, e);\n                    (e.depth = l.depth), s.push(l), (a = o.addItem(t, e));\n                  }\n                  this.set(\"comboTrees\", s);\n                } else if (\"node\" === t && Object(c.isString)(e.comboId) && s) {\n                  var d;\n                  (d = this.findById(e.comboId)) &&\n                    d.getType &&\n                    \"combo\" !== d.getType() &&\n                    console.warn(\n                      \"'\".concat(\n                        e.comboId,\n                        \"' is not a id of a combo in the graph, the node will be added without combo.\",\n                      ),\n                    ),\n                    (a = o.addItem(t, e));\n                  var p = this.get(\"itemMap\"),\n                    g = !1,\n                    v = !1;\n                  (s || []).forEach(function (t) {\n                    v ||\n                      g ||\n                      pt(t, function (t) {\n                        if (t.id === e.id) return (v = !0), !1;\n                        if (e.comboId === t.id && !v) {\n                          g = !0;\n                          var n = Object(c.clone)(e);\n                          (n.itemType = \"node\"),\n                            t.children\n                              ? t.children.push(n)\n                              : (t.children = [n]),\n                            (n.depth = t.depth + 1);\n                        }\n                        return (\n                          g &&\n                            p[t.id].getType &&\n                            \"combo\" === p[t.id].getType() &&\n                            o.updateCombo(p[t.id], t.children),\n                          !0\n                        );\n                      });\n                  });\n                } else a = o.addItem(t, e);\n                if (\n                  (\"node\" === t && e.comboId) ||\n                  (\"combo\" === t && e.parentId)\n                )\n                  (d = this.findById(e.comboId || e.parentId)) &&\n                    d.getType &&\n                    \"combo\" === d.getType() &&\n                    d.addChild(a);\n                var y = this.get(\"combos\");\n                if (\n                  (y && y.length > 0 && this.sortCombos(),\n                  this.autoPaint(),\n                  n && this.get(\"enabledStack\"))\n                ) {\n                  var m = Object(f.a)(Object(f.a)({}, a.getModel()), {\n                      itemType: t,\n                    }),\n                    b = {};\n                  switch (t) {\n                    case \"node\":\n                      b.nodes = [m];\n                      break;\n                    case \"edge\":\n                      b.edges = [m];\n                      break;\n                    case \"combo\":\n                      b.combos = [m];\n                  }\n                  this.pushStack(\"add\", { before: {}, after: b });\n                }\n                return a;\n              }\n              console.warn(\n                \"This item exists already. Be sure the id %c\".concat(\n                  e.id,\n                  \"%c is unique.\",\n                ),\n                \"font-size: 20px; color: red;\",\n                \"\",\n              );\n            }),\n            (e.prototype.add = function (t, e, n, r) {\n              return (\n                void 0 === n && (n = !0),\n                void 0 === r && (r = !0),\n                this.addItem(t, e, n, r)\n              );\n            }),\n            (e.prototype.updateItem = function (t, e, n) {\n              var r = this;\n              void 0 === n && (n = !0);\n              var i,\n                o = this.get(\"itemController\");\n              i = Object(c.isString)(t) ? this.findById(t) : t;\n              var a = Object(c.clone)(i.getModel()),\n                s = \"\";\n              i.getType && (s = i.getType());\n              var u = Object(f.f)([], i.getStates(), !0);\n              if (\n                (\"combo\" === s &&\n                  Object(c.each)(u, function (t) {\n                    return r.setItemState(i, t, !1);\n                  }),\n                o.updateItem(i, e),\n                \"combo\" === s &&\n                  Object(c.each)(u, function (t) {\n                    return r.setItemState(i, t, !0);\n                  }),\n                n && this.get(\"enabledStack\"))\n              ) {\n                var h = { nodes: [], edges: [], combos: [] },\n                  l = { nodes: [], edges: [], combos: [] },\n                  d = Object(f.a)({ id: a.id }, e);\n                switch (s) {\n                  case \"node\":\n                    h.nodes.push(a), l.nodes.push(d);\n                    break;\n                  case \"edge\":\n                    h.edges.push(a), l.edges.push(d);\n                    break;\n                  case \"combo\":\n                    h.combos.push(a), l.combos.push(d);\n                }\n                \"node\" === s && h.nodes.push(a),\n                  this.pushStack(\"update\", { before: h, after: l });\n              }\n            }),\n            (e.prototype.update = function (t, e, n) {\n              void 0 === n && (n = !0), this.updateItem(t, e, n);\n            }),\n            (e.prototype.setItemState = function (t, e, n) {\n              Object(c.isString)(t) && (t = this.findById(t)),\n                this.get(\"itemController\").setItemState(t, e, n);\n              var r = this.get(\"stateController\");\n              Object(c.isString)(n)\n                ? r.updateState(t, \"\".concat(e, \":\").concat(n), !0)\n                : r.updateState(t, e, n);\n            }),\n            (e.prototype.priorityState = function (t, e) {\n              this.get(\"itemController\").priorityState(t, e);\n            }),\n            (e.prototype.data = function (t) {\n              wt(t), this.set(\"data\", t);\n            }),\n            (e.prototype.render = function () {\n              var t = this;\n              this.set(\"comboSorted\", !1);\n              var e = this.get(\"data\");\n              if ((this.get(\"enabledStack\") && this.clearStack(), !e))\n                throw new Error(\"data must be defined first\");\n              var n = e.nodes,\n                r = void 0 === n ? [] : n,\n                i = e.edges,\n                o = void 0 === i ? [] : i,\n                a = e.combos,\n                s = void 0 === a ? [] : a;\n              if (\n                (this.clear(!0),\n                this.emit(\"beforerender\"),\n                Object(c.each)(r, function (e) {\n                  t.add(\"node\", e, !1, !1);\n                }),\n                s && 0 !== s.length)\n              ) {\n                var u = yt(s, r);\n                this.set(\"comboTrees\", u), t.addCombos(s);\n              }\n              Object(c.each)(o, function (e) {\n                t.add(\"edge\", e, !1, !1);\n              });\n              var h = t.get(\"animate\");\n              (t.get(\"fitView\") || t.get(\"fitCenter\")) && t.set(\"animate\", !1);\n              var l = t.get(\"layoutController\");\n              if (l) {\n                if (\n                  (l.layout(function () {\n                    t.get(\"fitView\")\n                      ? t.fitView()\n                      : t.get(\"fitCenter\") && t.fitCenter();\n                    t.autoPaint(),\n                      t.emit(\"afterrender\"),\n                      (t.get(\"fitView\") || t.get(\"fitCenter\")) &&\n                        t.set(\"animate\", h);\n                  }),\n                  this.refreshPositions(),\n                  this.destroyed)\n                )\n                  return;\n              } else\n                t.get(\"fitView\") && t.fitView(),\n                  t.get(\"fitCenter\") && t.fitCenter(),\n                  t.emit(\"afterrender\"),\n                  t.set(\"animate\", h);\n              this.get(\"groupByTypes\") ||\n                (s && 0 !== s.length\n                  ? this.sortCombos()\n                  : e.nodes && e.edges && e.nodes.length < e.edges.length\n                  ? this.getNodes().forEach(function (t) {\n                      t.toFront();\n                    })\n                  : this.getEdges().forEach(function (t) {\n                      t.toBack();\n                    }));\n              this.get(\"enabledStack\") && this.pushStack(\"render\");\n            }),\n            (e.prototype.read = function (t) {\n              this.data(t), this.render();\n            }),\n            (e.prototype.diffItems = function (t, e, n) {\n              var r,\n                i = this,\n                o = this.get(\"itemMap\");\n              Object(c.each)(n, function (n) {\n                if ((r = o[n.id])) {\n                  if (i.get(\"animate\") && \"node\" === t) {\n                    var a = r.getContainer().getMatrix();\n                    a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                      r.set(\"originAttrs\", { x: a[6], y: a[7] });\n                  }\n                  i.updateItem(r, n, !1);\n                } else r = i.addItem(t, n, !1);\n                r && e[\"\".concat(t, \"s\")].push(r);\n              });\n            }),\n            (e.prototype.changeData = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this;\n              if (!wt(t)) return this;\n              e &&\n                this.get(\"enabledStack\") &&\n                this.pushStack(\"changedata\", { before: n.save(), after: t }),\n                this.set(\"comboSorted\", !1),\n                this.removeHulls(),\n                this.getNodes().map(function (t) {\n                  return n.clearItemStates(t);\n                }),\n                this.getEdges().map(function (t) {\n                  return n.clearItemStates(t);\n                });\n              var r = this.get(\"canvas\"),\n                i = r.get(\"localRefresh\");\n              r.set(\"localRefresh\", !1),\n                n.get(\"data\") || (n.data(t), n.render());\n              var o = this.get(\"itemMap\"),\n                a = { nodes: [], edges: [] },\n                s = t.combos;\n              if (s) {\n                var u = yt(s, t.nodes);\n                this.set(\"comboTrees\", u);\n              }\n              this.diffItems(\"node\", a, t.nodes),\n                Object(c.each)(o, function (t, e) {\n                  (o[e].getModel().depth = 0),\n                    (t.getType && \"edge\" === t.getType()) ||\n                      (t.getType && \"combo\" === t.getType()\n                        ? (delete o[e], t.destroy())\n                        : a.nodes.indexOf(t) < 0 &&\n                          (delete o[e], n.remove(t, !1)));\n                });\n              for (var h = this.getCombos(), l = h.length - 1; l >= 0; l--)\n                h[l].destroyed && h.splice(l, 1);\n              s &&\n                (n.addCombos(s), this.get(\"groupByTypes\") || this.sortCombos()),\n                this.diffItems(\"edge\", a, t.edges),\n                Object(c.each)(o, function (t, e) {\n                  (!t.getType ||\n                    (\"node\" !== t.getType() && \"combo\" !== t.getType())) &&\n                    a.edges.indexOf(t) < 0 &&\n                    (delete o[e], n.remove(t, !1));\n                }),\n                this.set({ nodes: a.nodes, edges: a.edges });\n              var f = this.get(\"layoutController\");\n              return (\n                f &&\n                  (f.changeData(),\n                  n.get(\"animate\") && !f.getLayoutType()\n                    ? n.positionsAnimate()\n                    : n.autoPaint()),\n                setTimeout(function () {\n                  r.set(\"localRefresh\", i);\n                }, 16),\n                this\n              );\n            }),\n            (e.prototype.addCombos = function (t) {\n              var e = this.get(\"comboTrees\");\n              this.get(\"itemController\").addCombos(e, t);\n            }),\n            (e.prototype.createCombo = function (t, e) {\n              var n = this;\n              this.set(\"comboSorted\", !1);\n              var r,\n                i = \"\";\n              if (t) {\n                if (Object(c.isString)(t)) (i = t), (r = { id: t });\n                else {\n                  if (!(i = t.id))\n                    return void console.warn(\n                      \"Create combo failed. Please assign a unique string id for the adding combo.\",\n                    );\n                  r = t;\n                }\n                var o = e.map(function (t) {\n                  var e = n.findById(t),\n                    r = e.getModel(),\n                    o = \"\";\n                  e.getType && (o = e.getType());\n                  var a = { id: e.getID(), itemType: o };\n                  return (\n                    \"combo\" === o\n                      ? ((a.parentId = i), (r.parentId = i))\n                      : \"node\" === o && ((a.comboId = i), (r.comboId = i)),\n                    a\n                  );\n                });\n                (r.children = o),\n                  this.addItem(\"combo\", r, !1),\n                  this.set(\"comboSorted\", !1);\n                var a = this.get(\"comboTrees\");\n                (a || []).forEach(function (t) {\n                  pt(t, function (t) {\n                    return (\n                      t.id !== i ||\n                      ((t.itemType = \"combo\"), (t.children = o), !1)\n                    );\n                  });\n                }),\n                  a && this.sortCombos();\n              }\n            }),\n            (e.prototype.uncombo = function (t) {\n              var e = this,\n                n = t;\n              if (\n                (Object(c.isString)(t) && (n = this.findById(t)),\n                !n || (n.getType && \"combo\" !== n.getType()))\n              )\n                console.warn(\"The item is not a combo!\");\n              else {\n                var r = n.getModel().parentId,\n                  i = this.get(\"comboTrees\");\n                i || (i = []);\n                var o,\n                  a = this.get(\"itemMap\"),\n                  s = n.get(\"id\"),\n                  u = [],\n                  h = this.get(\"combos\"),\n                  l = this.findById(r);\n                if (\n                  (i.forEach(function (i) {\n                    o ||\n                      pt(i, function (i) {\n                        if (i.id === s) {\n                          (o = i),\n                            n.getEdges().forEach(function (t) {\n                              e.removeItem(t, !1);\n                            });\n                          var c = h.indexOf(t);\n                          h.splice(c, 1), delete a[s], n.destroy();\n                        }\n                        return (\n                          !r ||\n                          !o ||\n                          i.id !== r ||\n                          (l.removeCombo(n),\n                          -1 !== (c = (u = i.children).indexOf(o)) &&\n                            u.splice(c, 1),\n                          o.children.forEach(function (t) {\n                            var n = e.findById(t.id),\n                              i = n.getModel();\n                            n.getType && \"combo\" === n.getType()\n                              ? ((t.parentId = r),\n                                delete t.comboId,\n                                (i.parentId = r),\n                                delete i.comboId)\n                              : n.getType &&\n                                \"node\" === n.getType() &&\n                                ((t.comboId = r), (i.comboId = r)),\n                              l.addChild(n),\n                              u.push(t);\n                          }),\n                          !1)\n                        );\n                      });\n                  }),\n                  !r && o)\n                ) {\n                  var f = i.indexOf(o);\n                  i.splice(f, 1),\n                    o.children.forEach(function (t) {\n                      t.parentId = void 0;\n                      var n = e.findById(t.id).getModel();\n                      delete n.parentId,\n                        delete n.comboId,\n                        \"node\" !== t.itemType && i.push(t);\n                    });\n                }\n              }\n            }),\n            (e.prototype.updateCombos = function () {\n              var t = this,\n                e = this.get(\"comboTrees\"),\n                n = this.get(\"itemController\"),\n                r = this.get(\"itemMap\");\n              (e || []).forEach(function (e) {\n                pt(e, function (e) {\n                  if (!e) return !0;\n                  var i = r[e.id];\n                  if (i && i.getType && \"combo\" === i.getType()) {\n                    var o = Object(f.f)([], i.getStates(), !0);\n                    Object(c.each)(o, function (e) {\n                      return t.setItemState(i, e, !1);\n                    }),\n                      n.updateCombo(i, e.children),\n                      Object(c.each)(o, function (e) {\n                        return t.setItemState(i, e, !0);\n                      });\n                  }\n                  return !0;\n                });\n              }),\n                this.sortCombos();\n            }),\n            (e.prototype.updateCombo = function (t) {\n              var e,\n                n = this,\n                r = t;\n              if (\n                (Object(c.isString)(t) && (r = this.findById(t)),\n                !r || (r.getType && \"combo\" !== r.getType()))\n              )\n                console.warn(\"The item to be updated is not a combo!\");\n              else {\n                e = r.get(\"id\");\n                var i = this.get(\"comboTrees\"),\n                  o = this.get(\"itemController\"),\n                  a = this.get(\"itemMap\");\n                (i || []).forEach(function (t) {\n                  pt(t, function (t) {\n                    if (!t) return !0;\n                    var r = a[t.id];\n                    if (\n                      e === t.id &&\n                      r &&\n                      r.getType &&\n                      \"combo\" === r.getType()\n                    ) {\n                      var i = Object(f.f)([], r.getStates(), !0);\n                      Object(c.each)(i, function (t) {\n                        r.getStateStyle(t) && n.setItemState(r, t, !1);\n                      }),\n                        o.updateCombo(r, t.children),\n                        Object(c.each)(i, function (t) {\n                          r.getStateStyle(t) && n.setItemState(r, t, !0);\n                        }),\n                        e && (e = t.parentId);\n                    }\n                    return !0;\n                  });\n                });\n              }\n            }),\n            (e.prototype.updateComboTree = function (t, e, n) {\n              void 0 === n && (n = !0);\n              var r;\n              this.set(\"comboSorted\", !1);\n              var i,\n                o = (r = Object(c.isString)(t)\n                  ? this.findById(t)\n                  : t).getModel(),\n                a = o.comboId || o.parentId,\n                s = \"\";\n              if ((r.getType && (s = r.getType()), e && \"combo\" === s)) {\n                var u,\n                  h = this.get(\"comboTrees\"),\n                  l = !0;\n                if (\n                  ((h || []).forEach(function (t) {\n                    u ||\n                      dt(t, function (t) {\n                        if (!u) return t.id === r.getID() && (u = t), !0;\n                      });\n                  }),\n                  dt(u, function (t) {\n                    return t.id !== e || ((l = !1), !1);\n                  }),\n                  !l)\n                )\n                  return void console.warn(\n                    \"Failed to update the combo tree! The parentId points to a descendant of the combo!\",\n                  );\n              }\n              if (n && this.get(\"enabledStack\")) {\n                var f = {},\n                  d = {};\n                \"combo\" === s\n                  ? ((f.combos = [{ id: o.id, parentId: o.parentId }]),\n                    (d.combos = [{ id: o.id, parentId: e }]))\n                  : \"node\" === s &&\n                    ((f.nodes = [{ id: o.id, parentId: o.comboId }]),\n                    (d.nodes = [{ id: o.id, parentId: e }])),\n                  this.pushStack(\"updateComboTree\", { before: f, after: d });\n              }\n              if (o.parentId || o.comboId) {\n                var p = this.findById(o.parentId || o.comboId);\n                p && p.removeChild(r);\n              }\n              (\"combo\" === s\n                ? (o.parentId = e)\n                : \"node\" === s && (o.comboId = e),\n              e) &&\n                (i = this.findById(e)) &&\n                i.addChild(r);\n              a && (i = this.findById(a)) && i.removeChild(r);\n              var g = mt(this.get(\"comboTrees\"), o.id, e);\n              this.set(\"comboTrees\", g), this.updateCombos();\n            }),\n            (e.prototype.save = function () {\n              var t = [],\n                e = [],\n                n = [];\n              return (\n                Object(c.each)(this.get(\"nodes\"), function (e) {\n                  t.push(e.getModel());\n                }),\n                Object(c.each)(this.get(\"edges\"), function (t) {\n                  e.push(t.getModel());\n                }),\n                Object(c.each)(this.get(\"combos\"), function (t) {\n                  n.push(t.getModel());\n                }),\n                { nodes: t, edges: e, combos: n }\n              );\n            }),\n            (e.prototype.changeSize = function (t, e) {\n              return this.get(\"viewController\").changeSize(t, e), this;\n            }),\n            (e.prototype.refresh = function () {\n              if ((this.emit(\"beforegraphrefresh\"), this.get(\"animate\")))\n                this.positionsAnimate();\n              else {\n                var t = this.get(\"nodes\"),\n                  e = this.get(\"edges\"),\n                  n = this.get(\"edges\");\n                Object(c.each)(t, function (t) {\n                  t.refresh();\n                }),\n                  Object(c.each)(e, function (t) {\n                    t.refresh();\n                  }),\n                  Object(c.each)(n, function (t) {\n                    t.refresh();\n                  });\n              }\n              this.emit(\"aftergraphrefresh\"), this.autoPaint();\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.getComboChildren = function (t) {\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                t && (!t.getType || \"combo\" === t.getType()))\n              )\n                return t.getChildren();\n              console.warn(\"The combo does not exist!\");\n            }),\n            (e.prototype.positionsAnimate = function () {\n              var t = this;\n              t.emit(\"beforeanimate\");\n              var e = t.get(\"animateCfg\"),\n                n = e.onFrame,\n                r = t.getNodes(),\n                i = r.map(function (t) {\n                  var e = t.getModel();\n                  return { id: e.id, x: e.x, y: e.y };\n                });\n              t.isAnimating() && t.stopAnimate(),\n                t.get(\"canvas\").animate(\n                  function (e) {\n                    Object(c.each)(i, function (r) {\n                      var i = t.findById(r.id);\n                      if (i && !i.destroyed) {\n                        var o = i.get(\"originAttrs\"),\n                          a = i.get(\"model\");\n                        if (!o) {\n                          var s = i.getContainer().getMatrix();\n                          s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                            (o = { x: s[6], y: s[7] }),\n                            i.set(\"originAttrs\", o);\n                        }\n                        if (n) {\n                          var c = n(i, e, r, o);\n                          i.set(\"model\", Object.assign(a, c));\n                        } else\n                          (a.x = o.x + (r.x - o.x) * e),\n                            (a.y = o.y + (r.y - o.y) * e);\n                      }\n                    }),\n                      t.refreshPositions();\n                  },\n                  {\n                    duration: e.duration,\n                    easing: e.easing,\n                    callback: function () {\n                      Object(c.each)(r, function (t) {\n                        t.set(\"originAttrs\", null);\n                      }),\n                        e.callback && e.callback(),\n                        t.emit(\"afteranimate\"),\n                        (t.animating = !1);\n                    },\n                  },\n                );\n            }),\n            (e.prototype.refreshPositions = function () {\n              this.emit(\"beforegraphrefreshposition\");\n              var t,\n                e = this.get(\"nodes\"),\n                n = this.get(\"edges\"),\n                r = this.get(\"vedges\"),\n                i = this.get(\"combos\"),\n                o = {};\n              Object(c.each)(e, function (e) {\n                t = e.getModel();\n                var n = e.get(\"originAttrs\");\n                if (!n || t.x !== n.x || t.y !== n.y) {\n                  var r = e.updatePosition({ x: t.x, y: t.y });\n                  (o[t.id] = r),\n                    t.comboId && (o[t.comboId] = o[t.comboId] || r);\n                }\n              }),\n                i && 0 !== i.length && this.updateCombos(),\n                Object(c.each)(n, function (t) {\n                  var e = t.getSource().getModel(),\n                    n = t.getTarget();\n                  if (!Object(c.isPlainObject)(n)) {\n                    var r = n.getModel();\n                    (o[e.id] || o[r.id] || t.getModel().isComboEdge) &&\n                      t.refresh();\n                  }\n                }),\n                Object(c.each)(r, function (t) {\n                  t.refresh();\n                }),\n                this.emit(\"aftergraphrefreshposition\"),\n                this.autoPaint();\n            }),\n            (e.prototype.stopAnimate = function () {\n              this.get(\"canvas\").stopAnimate();\n            }),\n            (e.prototype.isAnimating = function () {\n              return this.animating;\n            }),\n            (e.prototype.getZoom = function () {\n              var t = this.get(\"group\").getMatrix();\n              return t ? t[0] : 1;\n            }),\n            (e.prototype.getCurrentMode = function () {\n              return this.get(\"modeController\").getMode();\n            }),\n            (e.prototype.setMode = function (t) {\n              return this.get(\"modeController\").setMode(t), this;\n            }),\n            (e.prototype.clear = function (t) {\n              return (\n                void 0 === t && (t = !1),\n                this.get(\"canvas\").clear(),\n                this.initGroups(),\n                this.set({\n                  itemMap: {},\n                  nodes: [],\n                  edges: [],\n                  groups: [],\n                  combos: [],\n                  comboTrees: [],\n                }),\n                t || this.emit(\"afterrender\"),\n                this\n              );\n            }),\n            (e.prototype.updateLayout = function (t) {\n              var e = this.get(\"layoutController\");\n              Object(c.isString)(t) && (t = { type: t });\n              var n = this.get(\"layout\"),\n                r = {};\n              Object.assign(r, n, t),\n                this.set(\"layout\", r),\n                e.isLayoutTypeSame(r) && r.gpuEnabled === n.gpuEnabled\n                  ? e.updateLayoutCfg(r)\n                  : e.changeLayout(r);\n            }),\n            (e.prototype.destroyLayout = function () {\n              this.get(\"layoutController\").destroyLayout();\n            }),\n            (e.prototype.layout = function () {\n              var t = this.get(\"layoutController\"),\n                e = this.get(\"layout\");\n              e &&\n                t &&\n                (e.workerEnabled\n                  ? t.layout()\n                  : t.layoutMethod\n                  ? t.relayout(!0)\n                  : t.layout());\n            }),\n            (e.prototype.collapseCombo = function (t) {\n              var e = this;\n              if ((Object(c.isString)(t) && (t = this.findById(t)), t)) {\n                this.emit(\"beforecollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n                var n = t.getModel();\n                this.get(\"itemController\").collapseCombo(t), (n.collapsed = !0);\n                var r = this.getEdges().concat(this.get(\"vedges\")),\n                  i = [],\n                  o = [],\n                  a = this.get(\"comboTrees\"),\n                  s = !1;\n                (a || []).forEach(function (t) {\n                  s ||\n                    dt(t, function (t) {\n                      if (s && t.depth <= n.depth) return !1;\n                      if ((n.id === t.id && (s = !0), s)) {\n                        var r = e.findById(t.id);\n                        r &&\n                          r.getType &&\n                          \"combo\" === r.getType() &&\n                          ((i = i.concat(r.getNodes())),\n                          (o = o.concat(r.getCombos())));\n                      }\n                      return !0;\n                    });\n                });\n                var u = {},\n                  h = [];\n                r.forEach(function (t) {\n                  if (!t.isVisible() || t.getModel().isVEdge) {\n                    var r = t.getSource(),\n                      a = t.getTarget();\n                    if (\n                      ((i.includes(r) || o.includes(r)) &&\n                        !i.includes(a) &&\n                        !o.includes(a)) ||\n                      r.getModel().id === n.id\n                    ) {\n                      if ((f = t.getModel()).isVEdge)\n                        return void e.removeItem(t, !1);\n                      for (var s = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(s.parentId || s.comboId)) ||\n                          (!s.parentId && !s.comboId)\n                        )\n                          return;\n                        s = a.getModel();\n                      }\n                      var c = s.id;\n                      if (u[\"\".concat(n.id, \"-\").concat(c)])\n                        return void (u[\"\".concat(n.id, \"-\").concat(c)] +=\n                          f.size || 1);\n                      var l = e.addItem(\n                        \"vedge\",\n                        { source: n.id, target: c, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[\"\".concat(n.id, \"-\").concat(c)] = f.size || 1),\n                        h.push(l);\n                    } else if (\n                      (!i.includes(r) &&\n                        !o.includes(r) &&\n                        (i.includes(a) || o.includes(a))) ||\n                      a.getModel().id === n.id\n                    ) {\n                      var f;\n                      if ((f = t.getModel()).isVEdge)\n                        return void e.removeItem(t, !1);\n                      for (var d = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(d.parentId || d.comboId)) ||\n                          (!d.parentId && !d.comboId)\n                        )\n                          return;\n                        d = r.getModel();\n                      }\n                      var p = d.id;\n                      if (u[\"\".concat(p, \"-\").concat(n.id)])\n                        return void (u[\"\".concat(p, \"-\").concat(n.id)] +=\n                          f.size || 1);\n                      l = e.addItem(\n                        \"vedge\",\n                        { target: n.id, source: p, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[\"\".concat(p, \"-\").concat(n.id)] = f.size || 1),\n                        h.push(l);\n                    }\n                  }\n                }),\n                  h.forEach(function (t) {\n                    var n = t.getModel();\n                    e.updateItem(\n                      t,\n                      { size: u[\"\".concat(n.source, \"-\").concat(n.target)] },\n                      !1,\n                    );\n                  }),\n                  this.emit(\"aftercollapseexpandcombo\", {\n                    action: \"collapse\",\n                    item: t,\n                  });\n              } else console.warn(\"The combo to be collapsed does not exist!\");\n            }),\n            (e.prototype.expandCombo = function (t) {\n              var e = this;\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                !t || (t.getType && \"combo\" !== t.getType()))\n              )\n                console.warn(\"The combo to be collapsed does not exist!\");\n              else {\n                this.emit(\"beforecollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n                var n = t.getModel();\n                this.get(\"itemController\").expandCombo(t), (n.collapsed = !1);\n                var r = this.getEdges().concat(this.get(\"vedges\")),\n                  i = [],\n                  o = [],\n                  a = this.get(\"comboTrees\"),\n                  s = !1;\n                (a || []).forEach(function (t) {\n                  s ||\n                    dt(t, function (t) {\n                      if (s && t.depth <= n.depth) return !1;\n                      if ((n.id === t.id && (s = !0), s)) {\n                        var r = e.findById(t.id);\n                        r &&\n                          r.getType &&\n                          \"combo\" === r.getType() &&\n                          ((i = i.concat(r.getNodes())),\n                          (o = o.concat(r.getCombos())));\n                      }\n                      return !0;\n                    });\n                });\n                var u = {},\n                  h = {};\n                r.forEach(function (t) {\n                  if (!t.isVisible() || t.getModel().isVEdge) {\n                    var r = t.getSource(),\n                      a = t.getTarget(),\n                      s = r.get(\"id\"),\n                      c = a.get(\"id\");\n                    if (\n                      ((i.includes(r) || o.includes(r)) &&\n                        !i.includes(a) &&\n                        !o.includes(a)) ||\n                      s === n.id\n                    ) {\n                      if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                      for (var l = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(l.comboId || l.parentId)) ||\n                          (!l.parentId && !l.comboId)\n                        )\n                          return;\n                        l = a.getModel();\n                      }\n                      c = l.id;\n                      for (var f = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(f.comboId || f.parentId)) ||\n                          (!f.parentId && !f.comboId)\n                        )\n                          return;\n                        if (f.comboId === n.id || f.parentId === n.id) break;\n                        f = r.getModel();\n                      }\n                      if (((s = f.id), c)) {\n                        var d = \"\".concat(s, \"-\").concat(c);\n                        if (u[d])\n                          return (\n                            (u[d] += t.getModel().size || 1),\n                            void e.updateItem(h[d], { size: u[d] }, !1)\n                          );\n                        var p = e.addItem(\n                          \"vedge\",\n                          { source: s, target: c, isVEdge: !0 },\n                          !1,\n                        );\n                        (u[d] = t.getModel().size || 1), (h[d] = p);\n                      }\n                    } else if (\n                      (!i.includes(r) &&\n                        !o.includes(r) &&\n                        (i.includes(a) || o.includes(a))) ||\n                      c === n.id\n                    ) {\n                      if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                      for (f = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(f.comboId || f.parentId)) ||\n                          (!f.parentId && !f.comboId)\n                        )\n                          return;\n                        f = r.getModel();\n                      }\n                      s = f.id;\n                      for (l = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(l.comboId || l.parentId)) ||\n                          (!l.parentId && !l.comboId)\n                        )\n                          return;\n                        if (l.comboId === n.id || l.parentId === n.id) break;\n                        l = a.getModel();\n                      }\n                      if (((c = l.id), s)) {\n                        d = \"\".concat(s, \"-\").concat(c);\n                        if (u[d])\n                          return (\n                            (u[d] += t.getModel().size || 1),\n                            void e.updateItem(h[d], { size: u[d] }, !1)\n                          );\n                        p = e.addItem(\n                          \"vedge\",\n                          { target: c, source: s, isVEdge: !0 },\n                          !1,\n                        );\n                        (u[d] = t.getModel().size || 1), (h[d] = p);\n                      }\n                    } else\n                      (i.includes(r) || o.includes(r)) &&\n                        (i.includes(a) || o.includes(a)) &&\n                        r.isVisible() &&\n                        a.isVisible() &&\n                        t.show();\n                  }\n                }),\n                  this.emit(\"aftercollapseexpandcombo\", {\n                    action: \"expand\",\n                    item: t,\n                  });\n              }\n            }),\n            (e.prototype.collapseExpandCombo = function (t) {\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                t && (!t.getType || \"combo\" === t.getType()))\n              ) {\n                for (var e = t.getModel(), n = this.findById(e.parentId); n; ) {\n                  var r = n.getModel();\n                  if (r.collapsed)\n                    return (\n                      console.warn(\n                        \"Fail to expand the combo since it's ancestor combo is collapsed.\",\n                      ),\n                      void (n = void 0)\n                    );\n                  n = this.findById(r.parentId);\n                }\n                e.collapsed ? this.expandCombo(t) : this.collapseCombo(t),\n                  this.updateCombo(t);\n              }\n            }),\n            (e.prototype.sortCombos = function () {\n              var t = this;\n              if (!this.get(\"comboSorted\")) {\n                this.set(\"comboSorted\", !0);\n                var e = [],\n                  n = {};\n                (this.get(\"comboTrees\") || []).forEach(function (t) {\n                  dt(t, function (t) {\n                    return (\n                      e[t.depth]\n                        ? e[t.depth].push(t.id)\n                        : (e[t.depth] = [t.id]),\n                      (n[t.id] = t.depth),\n                      !0\n                    );\n                  });\n                }),\n                  (this.getEdges().concat(this.get(\"vedges\")) || []).forEach(\n                    function (t) {\n                      var r = t.getModel(),\n                        i = n[r.source] || 0,\n                        o = n[r.target] || 0,\n                        a = Math.max(i, o);\n                      e[a] ? e[a].push(r.id) : (e[a] = [r.id]);\n                    },\n                  ),\n                  e.forEach(function (e) {\n                    if (e && e.length)\n                      for (var n = e.length - 1; n >= 0; n--) {\n                        var r = t.findById(e[n]);\n                        r && r.toFront();\n                      }\n                  });\n              }\n            }),\n            (e.prototype.getNeighbors = function (t, e) {\n              var n = t;\n              return (\n                Object(c.isString)(t) && (n = this.findById(t)),\n                n.getNeighbors(e)\n              );\n            }),\n            (e.prototype.getNodeDegree = function (t, e, n) {\n              void 0 === e && (e = void 0), void 0 === n && (n = !1);\n              var r = t;\n              Object(c.isString)(t) && (r = this.findById(t));\n              var i = this.get(\"degrees\");\n              (i && !n) ||\n                ((i = Object(v.getDegree)(this.save())),\n                this.set(\"degrees\", i));\n              var o = i[r.getID()],\n                a = 0;\n              if (!o) return 0;\n              switch (e) {\n                case \"in\":\n                  a = o.inDegree;\n                  break;\n                case \"out\":\n                  a = o.outDegree;\n                  break;\n                case \"all\":\n                  a = o;\n                  break;\n                default:\n                  a = o.degree;\n              }\n              return a;\n            }),\n            (e.prototype.getUndoStack = function () {\n              return this.undoStack;\n            }),\n            (e.prototype.getRedoStack = function () {\n              return this.redoStack;\n            }),\n            (e.prototype.getStackData = function () {\n              return this.get(\"enabledStack\")\n                ? {\n                    undoStack: this.undoStack.toArray(),\n                    redoStack: this.redoStack.toArray(),\n                  }\n                : null;\n            }),\n            (e.prototype.clearStack = function () {\n              this.get(\"enabledStack\") &&\n                (this.undoStack.clear(), this.redoStack.clear());\n            }),\n            (e.prototype.pushStack = function (t, e, n) {\n              if (\n                (void 0 === t && (t = \"update\"),\n                void 0 === n && (n = \"undo\"),\n                this.get(\"enabledStack\"))\n              ) {\n                var r = e\n                  ? Object(c.clone)(e)\n                  : { before: {}, after: Object(c.clone)(this.save()) };\n                \"redo\" === n\n                  ? this.redoStack.push({ action: t, data: r })\n                  : this.undoStack.push({ action: t, data: r }),\n                  this.emit(\"stackchange\", {\n                    undoStack: this.undoStack,\n                    redoStack: this.redoStack,\n                  });\n              } else\n                console.warn(\n                  \"请先启用 undo & redo 功能，在实例化 Graph 时候配置 enabledStack: true !\",\n                );\n            }),\n            (e.prototype.getAdjMatrix = function (t, e) {\n              void 0 === t && (t = !0),\n                void 0 === e && (e = this.get(\"directed\"));\n              var n = this.get(\"adjMatrix\");\n              return (\n                (n && t) ||\n                  ((n = Object(v.getAdjMatrix)(this.save(), e)),\n                  this.set(\"adjMatrix\", n)),\n                n\n              );\n            }),\n            (e.prototype.getShortestPathMatrix = function (t, e) {\n              void 0 === t && (t = !0),\n                void 0 === e && (e = this.get(\"directed\"));\n              var n = this.get(\"adjMatrix\"),\n                r = this.get(\"shortestPathMatrix\");\n              return (\n                (n && t) ||\n                  ((n = Object(v.getAdjMatrix)(this.save(), e)),\n                  this.set(\"adjMatrix\", n)),\n                (r && t) ||\n                  ((r = Object(v.floydWarshall)(this.save(), e)),\n                  this.set(\"shortestPathMatrix\", r)),\n                r\n              );\n            }),\n            (e.prototype.on = function (e, n, r) {\n              return t.prototype.on.call(this, e, n, r);\n            }),\n            (e.prototype.destroy = function () {\n              this.clear(),\n                Object(p.clearAnimationFrame)(this.timeIndex),\n                this.clearStack(),\n                this.get(\"itemController\").destroy(),\n                this.get(\"modeController\").destroy(),\n                this.get(\"viewController\").destroy(),\n                this.get(\"stateController\").destroy(),\n                this.get(\"canvas\").destroy(),\n                (this.cfg = null),\n                (this.destroyed = !0),\n                (this.redoStack = null),\n                (this.undoStack = null);\n            }),\n            (e.prototype.createHull = function (t) {\n              if (t.members && !(t.members.length < 1)) {\n                var e = this.get(\"hullGroup\"),\n                  n = this.get(\"hullMap\");\n                if (\n                  (n || ((n = {}), this.set(\"hullMap\", n)),\n                  (e && !e.get(\"destroyed\")) ||\n                    ((e = this.get(\"group\").addGroup({\n                      id: \"hullGroup\",\n                    })).toBack(),\n                    this.set(\"hullGroup\", e)),\n                  n[t.id])\n                )\n                  return console.warn(\"Existed hull id.\"), n[t.id];\n                var r = e.addGroup({ id: \"\".concat(t.id, \"-container\") }),\n                  i = new be(\n                    this,\n                    Object(f.a)(Object(f.a)({}, t), { group: r }),\n                  );\n                return (n[i.id] = i), i;\n              }\n              console.warn(\"Create hull failed! The members is empty.\");\n            }),\n            (e.prototype.getHulls = function () {\n              return this.get(\"hullMap\");\n            }),\n            (e.prototype.getHullById = function (t) {\n              return this.get(\"hullMap\")[t];\n            }),\n            (e.prototype.removeHull = function (t) {\n              var e;\n              (e = Object(c.isString)(t) ? this.getHullById(t) : t),\n                delete this.get(\"hullMap\")[e.id],\n                e.destroy();\n            }),\n            (e.prototype.removeHulls = function () {\n              var t = this.getHulls();\n              t &&\n                Object.keys(t).length &&\n                (Object.keys(t).forEach(function (e) {\n                  t[e].destroy();\n                }),\n                this.set(\"hullMap\", {}));\n            }),\n            (e.prototype.onTick = function (t) {\n              var e = this.get(\"layoutController\");\n              e &&\n                (e.onTick(t),\n                (this.timeIndex = Object(p.requestAnimationFrame)(\n                  this.onTick.bind(this),\n                )));\n            }),\n            e\n          );\n        })(d.a);\n      function we(t) {\n        return (we =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Oe = g.a.transform,\n        Me = [\"startArrow\", \"endArrow\"],\n        ke = {\n          lineWidth: 1,\n          stroke: void 0,\n          fill: void 0,\n          lineAppendWidth: 1,\n          opacity: void 0,\n          strokeOpacity: void 0,\n          fillOpacity: void 0,\n          x: 0,\n          y: 0,\n          r: 10,\n          width: 20,\n          height: 20,\n          shadowColor: void 0,\n          shadowBlur: 0,\n          shadowOffsetX: 0,\n          shadowOffsetY: 0,\n        },\n        je = {\n          edge: {\n            lineWidth: 1,\n            stroke: \"#000\",\n            lineDash: void 0,\n            startArrow: !1,\n            endArrow: !1,\n            opacity: void 0,\n            strokeOpacity: void 0,\n            fillOpacity: void 0,\n            shadowColor: void 0,\n            shadowBlur: 0,\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n          },\n          node: ke,\n          combo: ke,\n        },\n        Ce = {\n          options: {},\n          itemType: \"\",\n          type: \"\",\n          getCustomConfig: function (t) {\n            return {};\n          },\n          getOptions: function (t) {\n            return Object(c.deepMix)(\n              {\n                labelCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n                descriptionCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n              },\n              this.options,\n              this.getCustomConfig(t) || {},\n              t,\n            );\n          },\n          draw: function (t, e) {\n            var n = this.drawShape(t, e);\n            (n.set(\"className\", this.itemType + \"-shape\"), t.label) &&\n              this.drawLabel(t, e).set(\"className\", this.itemType + \"-label\");\n            return n;\n          },\n          afterDraw: function (t, e, n) {},\n          drawShape: function (t, e) {\n            return null;\n          },\n          drawLabel: function (t, e) {\n            var n = this.getOptions(t).labelCfg || {},\n              r = this.getLabelStyle(t, n, e),\n              i = r.rotate;\n            delete r.rotate;\n            var o = e.addShape(\"text\", {\n              attrs: r,\n              draggable: !0,\n              className: \"text-shape\",\n              name: \"text-shape\",\n            });\n            if (i) {\n              var a = o.getBBox(),\n                s = o.getMatrix();\n              if ((s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]), r.rotateCenter))\n                switch (r.rotateCenter) {\n                  case \"center\":\n                    s = Oe(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                    break;\n                  case \"lefttop\":\n                    s = Oe(s, [\n                      [\"t\", -r.x, -r.y],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y],\n                    ]);\n                    break;\n                  case \"leftcenter\":\n                    s = Oe(s, [\n                      [\"t\", -r.x, -r.y - a.height / 2],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y + a.height / 2],\n                    ]);\n                    break;\n                  default:\n                    s = Oe(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                }\n              else\n                s = Oe(s, [\n                  [\"t\", -r.x, -r.y - a.height / 2],\n                  [\"r\", i],\n                  [\"t\", r.x, r.y + a.height / 2],\n                ]);\n              o.setMatrix(s);\n            }\n            if (r.background) {\n              var c = this.drawLabelBg(t, e, o),\n                u = this.itemType + \"-label-bg\";\n              c.set(\"classname\", u), o.toFront();\n            }\n            return o;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(c.mix)({}, r, t.labelCfg),\n              o = this.getLabelBgStyleByPosition(n, t, i, e);\n            return e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: o });\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            return { text: t.label };\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            return {};\n          },\n          getLabelStyle: function (t, e, n) {\n            var r = this.getLabelStyleByPosition(t, e, n),\n              i = \"\".concat(this.itemType, \"Label\"),\n              o = nt[i] ? nt[i].style : null;\n            return Object(f.a)(Object(f.a)(Object(f.a)({}, o), r), e.style);\n          },\n          getShapeStyle: function (t) {\n            return t.style;\n          },\n          update: function (t, e) {\n            this.updateShapeStyle(t, e), this.updateLabel(t, e);\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = e.getKeyShape(),\n              i = Object(c.mix)({}, r.attr(), t.style),\n              o = function (t) {\n                var e,\n                  o = i[t];\n                if (Object(c.isPlainObject)(o)) {\n                  var a = n.find(function (e) {\n                    return e.get(\"name\") === t;\n                  });\n                  a && a.attr(o);\n                } else r.attr((((e = {})[t] = o), e));\n              };\n            for (var a in i) o(a);\n          },\n          updateLabel: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getOptions({}).labelCfg,\n              i = this.itemType + \"-label\",\n              o = n.find(function (t) {\n                return t.get(\"className\") === i;\n              }),\n              a = this.itemType + \"-label-bg\",\n              s = n.find(function (t) {\n                return t.get(\"classname\") === a;\n              });\n            if (t.label || \"\" === t.label)\n              if (o) {\n                var u = {};\n                e.getModel && (u = e.getModel().labelCfg);\n                var h = Object(c.deepMix)({}, r, u, t.labelCfg),\n                  l = this.getLabelStyleByPosition(t, h, n),\n                  d = t.labelCfg ? t.labelCfg.style : void 0,\n                  p = h.style && h.style.background,\n                  g = Object(f.a)(Object(f.a)(Object(f.a)({}, o.attr()), l), d),\n                  v = g.rotate;\n                if ((delete g.rotate, v)) {\n                  var y = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                  (y = Oe(y, [\n                    [\"t\", -g.x, -g.y],\n                    [\"r\", v],\n                    [\"t\", g.x, g.y],\n                  ])),\n                    o.resetMatrix(),\n                    o.attr(Object(f.a)(Object(f.a)({}, g), { matrix: y }));\n                } else o.resetMatrix(), o.attr(g);\n                if (s)\n                  if (g.background) {\n                    var m = this.getLabelBgStyleByPosition(o, t, h, n),\n                      b = Object(f.a)(Object(f.a)({}, m), p);\n                    if ((s.resetMatrix(), v)) {\n                      var x = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                      (x = Oe(x, [\n                        [\"t\", -b.x, -b.y],\n                        [\"r\", v],\n                        [\"t\", b.x, b.y],\n                      ])),\n                        (b.matrix = x);\n                    }\n                    s.attr(b);\n                  } else n.removeChild(s);\n                else\n                  g.background &&\n                    ((s = this.drawLabelBg(t, n, o)).set(\"classname\", a),\n                    o.toFront());\n              } else {\n                this.drawLabel(t, n).set(\"className\", i);\n              }\n          },\n          afterUpdate: function (t, e) {},\n          setState: function (t, e, n) {\n            var r,\n              i,\n              o = n.get(\"keyShape\");\n            if (o && !o.destroyed) {\n              var a = n.getType(),\n                s = Object(c.isBoolean)(e) ? t : \"\".concat(t, \":\").concat(e),\n                u = this.getStateStyle(s, n),\n                h = n.getStateStyle(s);\n              if (h || u) {\n                var l = Object(c.mix)({}, h || u),\n                  f = n.getContainer(),\n                  d = { x: 1, y: 1, cx: 1, cy: 1 };\n                if (\n                  (\"combo\" === a && ((d.r = 1), (d.width = 1), (d.height = 1)),\n                  e)\n                ) {\n                  var p = function (t) {\n                    var e,\n                      n = l[t];\n                    if (Object(c.isPlainObject)(n) && !Me.includes(t)) {\n                      var r = f.find(function (e) {\n                        return e.get(\"name\") === t;\n                      });\n                      r && r.attr(n);\n                    } else o.attr((((e = {})[t] = n), e));\n                  };\n                  for (var g in l) p(g);\n                } else {\n                  var v = St(n.getCurrentStatesStyle()),\n                    y = n.getModel(),\n                    m = Object(c.mix)({}, y.style, St(n.getOriginStyle())),\n                    b = o.get(\"name\"),\n                    x = o.attr(),\n                    S = {};\n                  Object.keys(x).forEach(function (t) {\n                    if (\"img\" !== t) {\n                      var e = x[t];\n                      e && \"object\" === we(e)\n                        ? (S[t] = Object(c.clone)(e))\n                        : (S[t] = e);\n                    }\n                  });\n                  var w = {},\n                    O = function (t) {\n                      var e = l[t];\n                      if (Object(c.isPlainObject)(e) && !Me.includes(t)) {\n                        var n = f.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        if (n) {\n                          var r = Object(c.clone)(n.attr());\n                          Object(c.each)(e, function (e, i) {\n                            if (t === b && S[i] && !d[i]) {\n                              delete S[i];\n                              var s = m[t][i] || je[a][i];\n                              o.attr(i, s);\n                            } else if (r[i] || 0 === r[i]) {\n                              delete r[i];\n                              var c = m[t][i] || je[a][i];\n                              n.attr(i, c);\n                            }\n                          }),\n                            (w[t] = r);\n                        }\n                      } else if (S[t] && !d[t]) {\n                        delete S[t];\n                        var i = m[t] || (m[b] ? m[b][t] : void 0) || je[a][t];\n                        o.attr(t, i);\n                      }\n                    };\n                  for (var M in l) O(M);\n                  for (var g in (b ? (w[b] = S) : Object(c.mix)(w, S), v))\n                    if (!d[g]) {\n                      var k = v[g];\n                      (Object(c.isPlainObject)(k) && !Me.includes(g)) ||\n                        (b\n                          ? (Object(c.mix)(m[b], (((i = {})[g] = k), i)),\n                            delete m[g])\n                          : Object(c.mix)(m, (((r = {})[g] = k), r)),\n                        delete v[g]);\n                    }\n                  var j = {};\n                  Object(c.deepMix)(j, m, w, v);\n                  var C = !1,\n                    E = function (t) {\n                      var e,\n                        n,\n                        r = j[t];\n                      if (Object(c.isPlainObject)(r) && !Me.includes(t)) {\n                        var i = f.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        i &&\n                          (t === b &&\n                            (\"combo\" === a &&\n                              (delete r.r, delete r.width, delete r.height),\n                            (C = !0)),\n                          i.attr(r));\n                      } else if (!C) {\n                        var s = r || je[a][t];\n                        \"combo\" === a\n                          ? b || o.attr((((e = {})[t] = s), e))\n                          : o.attr((((n = {})[t] = s), n));\n                      }\n                    };\n                  for (var P in j) E(P);\n                }\n              }\n            }\n          },\n          getStateStyle: function (t, e) {\n            var n = e.getModel(),\n              r = e.getType(),\n              i = this.getOptions(n),\n              o = i.stateStyles,\n              a = i.style,\n              s = void 0 === a ? {} : a,\n              u = n.stateStyles ? n.stateStyles[t] : o && o[t];\n            return \"combo\" === r ? Object(c.clone)(u) : Object(c.mix)({}, s, u);\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            return this.getOptions(t).anchorPoints;\n          },\n        },\n        Ee = {\n          itemType: \"node\",\n          shapeType: \"single-node\",\n          labelPosition: \"center\",\n          offset: nt.nodeLabel.offset,\n          getSize: function (t) {\n            var e = t.size || this.getOptions({}).size || nt.defaultNode.size;\n            return (\n              Object(c.isArray)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(c.isArray)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition;\n            if (\"center\" === n) return { x: 0, y: 0, text: t.label };\n            var r = e.offset;\n            Object(c.isNil)(r) && (r = this.offset);\n            var i,\n              o = this.getSize(t),\n              a = o[0],\n              s = o[1];\n            switch (n) {\n              case \"top\":\n                i = { x: 0, y: 0 - s / 2 - r, textBaseline: \"bottom\" };\n                break;\n              case \"bottom\":\n                i = { x: 0, y: s / 2 + r, textBaseline: \"top\" };\n                break;\n              case \"left\":\n                i = { x: 0 - a / 2 - r, y: 0, textAlign: \"right\" };\n                break;\n              default:\n                i = { x: a / 2 + r, y: 0, textAlign: \"left\" };\n            }\n            return (i.text = t.label), i;\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = Ct(o.padding),\n              u = i.width + s[1] + s[3],\n              h = i.height + s[0] + s[2],\n              l = n.offset;\n            return (\n              Object(c.isNil)(l) && (l = this.offset),\n              (a = { x: i.minX - s[3], y: i.minY - s[0] }),\n              (a = Object(f.a)(Object(f.a)(Object(f.a)({}, a), o), {\n                width: u,\n                height: h,\n              }))\n            );\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"node-shape\",\n            });\n          },\n          updateLinkPoints: function (t, e) {\n            var n,\n              r = this.getOptions(t).linkPoints,\n              i = e.find(function (t) {\n                return \"link-point-left\" === t.get(\"className\");\n              }),\n              o = e.find(function (t) {\n                return \"link-point-right\" === t.get(\"className\");\n              }),\n              a = e.find(function (t) {\n                return \"link-point-top\" === t.get(\"className\");\n              }),\n              s = e.find(function (t) {\n                return \"link-point-bottom\" === t.get(\"className\");\n              });\n            i && (n = i.attr()),\n              o && !n && (n = o.attr()),\n              a && !n && (n = a.attr()),\n              s && !n && (n = s.attr()),\n              n || (n = r);\n            var u = Object(c.mix)({}, n, t.linkPoints),\n              h = u.fill,\n              l = u.stroke,\n              d = u.lineWidth,\n              p = u.size / 2;\n            p || (p = u.r);\n            var g = t.linkPoints\n                ? t.linkPoints\n                : { left: void 0, right: void 0, top: void 0, bottom: void 0 },\n              v = g.left,\n              y = g.right,\n              m = g.top,\n              b = g.bottom,\n              x = this.getSize(t),\n              S = x[0],\n              w = x[1],\n              O = { r: p, fill: h, stroke: l, lineWidth: d };\n            i\n              ? v || void 0 === v\n                ? i.attr(Object(f.a)(Object(f.a)({}, O), { x: -S / 2, y: 0 }))\n                : i.remove()\n              : v &&\n                e.addShape(\"circle\", {\n                  attrs: Object(f.a)(Object(f.a)({}, O), { x: -S / 2, y: 0 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n              o\n                ? (y || void 0 === y || o.remove(),\n                  o.attr(Object(f.a)(Object(f.a)({}, O), { x: S / 2, y: 0 })))\n                : y &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: S / 2, y: 0 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n              a\n                ? (m || void 0 === m || a.remove(),\n                  a.attr(Object(f.a)(Object(f.a)({}, O), { x: 0, y: -w / 2 })))\n                : m &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: 0, y: -w / 2 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n              s\n                ? b || void 0 === b\n                  ? s.attr(Object(f.a)(Object(f.a)({}, O), { x: 0, y: w / 2 }))\n                  : s.remove()\n                : b &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: 0, y: w / 2 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n          },\n          updateShape: function (t, e, n, r) {\n            e.get(\"keyShape\").attr(Object(f.a)({}, n)),\n              this.updateLabel(t, e),\n              r && this.updateIcon(t, e);\n          },\n          updateIcon: function (t, e) {\n            var n = this,\n              r = e.getContainer(),\n              i = this.getOptions(t).icon,\n              o = (t.icon ? t.icon : { show: void 0 }).show,\n              a = r.find(function (t) {\n                return t.get(\"className\") === \"\".concat(n.type, \"-icon\");\n              });\n            if (a)\n              if (o || void 0 === o) {\n                var s = Object(c.mix)({}, a.attr(), i),\n                  u = s.width,\n                  h = s.height;\n                a.attr(\n                  Object(f.a)(Object(f.a)({}, s), { x: -u / 2, y: -h / 2 }),\n                );\n              } else a.remove();\n            else if (o) {\n              (u = i.width), (h = i.height);\n              r.addShape(\"image\", {\n                attrs: Object(f.a)(Object(f.a)({}, i), {\n                  x: -u / 2,\n                  y: -h / 2,\n                }),\n                className: \"\".concat(this.type, \"-icon\"),\n                name: \"\".concat(this.type, \"-icon\"),\n              });\n              var l = r.find(function (t) {\n                return \"node-label\" === t.get(\"className\");\n              });\n              l && l.toFront();\n            }\n          },\n        },\n        Pe = Object(f.a)(Object(f.a)({}, Ce), Ee);\n      Wt.registerNode(\"single-node\", Pe);\n      var Ae = {\n          itemType: \"edge\",\n          labelPosition: \"center\",\n          refX: 0,\n          refY: 0,\n          labelAutoRotate: !1,\n          options: {\n            size: nt.defaultEdge.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: nt.defaultEdge.style.stroke,\n              lineAppendWidth: nt.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: nt.edgeLabel.style.fill,\n                fontSize: nt.edgeLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(f.a)({}, nt.edgeStateStyles),\n          },\n          getPath: function (t) {\n            var e = [];\n            return (\n              Object(c.each)(t, function (t, n) {\n                0 === n ? e.push([\"M\", t.x, t.y]) : e.push([\"L\", t.x, t.y]);\n              }),\n              e\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(c.mix)({}, e, n, t.style),\n              i = t.size || nt.defaultEdge.size,\n              o = (t = this.getPathPoints(t)).startPoint,\n              a = t.endPoint,\n              s = this.getControlPoints(t),\n              u = [o];\n            s && (u = u.concat(s)), u.push(a);\n            var h = this.getPath(u);\n            return Object(c.mix)(\n              {},\n              nt.defaultEdge.style,\n              { stroke: nt.defaultEdge.color, lineWidth: i, path: h },\n              r,\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = { stroke: t.color },\n              i =\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                }) || e.getKeyShape(),\n              o = t.size,\n              a = (t = this.getPathPoints(t)).startPoint,\n              s = t.endPoint,\n              u = this.getControlPoints(t),\n              h = [a];\n            u && (h = h.concat(u)), h.push(s);\n            var l = i.attr(),\n              f = Object(c.mix)({}, r, l, t.style),\n              d = t.sourceNode,\n              p = t.targetNode,\n              g = { radius: f.radius };\n            u ||\n              (g = {\n                source: d,\n                target: p,\n                offset: f.offset,\n                radius: f.radius,\n              }),\n              l.endArrow &&\n                !1 === f.endArrow &&\n                (t.style.endArrow = { path: \"\" }),\n              l.startArrow &&\n                !1 === f.startArrow &&\n                (t.style.startArrow = { path: \"\" });\n            var v = this.getPath(h, g),\n              y = Object(c.mix)(\n                r,\n                i.attr(),\n                { lineWidth: o, path: v },\n                t.style,\n              );\n            i && i.attr(y);\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            var r,\n              i = e.position || this.labelPosition,\n              o = {},\n              a =\n                n &&\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            r = \"start\" === i ? 0 : \"end\" === i ? 1 : 0.5;\n            var s,\n              u = e.refX || this.refX,\n              h = e.refY || this.refY;\n            if (\n              t.startPoint.x === t.endPoint.x &&\n              t.startPoint.y === t.endPoint.y\n            )\n              return (\n                (o.x = t.startPoint.x + u),\n                (o.y = t.startPoint.y + h),\n                (o.text = t.label),\n                o\n              );\n            s = Object(c.isNil)(e.autoRotate)\n              ? this.labelAutoRotate\n              : e.autoRotate;\n            var l = lt(a, r, u, h, s);\n            return (\n              (o.x = l.x),\n              (o.y = l.y),\n              (o.rotate = l.rotate),\n              (o.textAlign = this._getTextAlign(i, l.angle)),\n              (o.text = t.label),\n              o\n            );\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = o.padding,\n              u = i.width + s[1] + s[3],\n              h = i.height + s[0] + s[2],\n              l = n.position || this.labelPosition,\n              d = Object(f.a)(Object(f.a)({}, o), {\n                width: u,\n                height: h,\n                x: i.minX - s[2],\n                y: i.minY - s[0],\n                rotate: 0,\n              });\n            a = Object(c.isNil)(n.autoRotate)\n              ? this.labelAutoRotate\n              : n.autoRotate;\n            var p,\n              g =\n                r &&\n                r.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            p = \"start\" === l ? 0 : \"end\" === l ? 1 : 0.5;\n            var v = n.refX || this.refX,\n              y = n.refY || this.refY;\n            if (\n              e.startPoint.x === e.endPoint.x &&\n              e.startPoint.y === e.endPoint.y\n            )\n              return (\n                (d.x = e.startPoint.x + v - u / 2),\n                (d.y = e.startPoint.y + y - h / 2),\n                d\n              );\n            var m = lt(g, p, v - u / 2, y + h / 2, a),\n              b = m.angle;\n            return (\n              b > 0.5 * Math.PI &&\n                b < 1.5 * Math.PI &&\n                (m = lt(g, p, v + u / 2, y + h / 2, a)),\n              a && ((d.x = m.x), (d.y = m.y)),\n              (d.rotate = m.rotate),\n              d\n            );\n          },\n          _getTextAlign: function (t, e) {\n            var n = \"center\";\n            return e\n              ? ((e %= 2 * Math.PI),\n                \"center\" !== t &&\n                  (n =\n                    (e >= 0 && e <= Math.PI / 2) ||\n                    (e >= 1.5 * Math.PI && e < 2 * Math.PI)\n                      ? t\n                      : (function (t) {\n                          var e = t;\n                          return (\n                            \"start\" === t\n                              ? (e = \"end\")\n                              : \"end\" === t && (e = \"start\"),\n                            e\n                          );\n                        })(t)),\n                n)\n              : t;\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getPathPoints: function (t) {\n            return t;\n          },\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return e.addShape(\"path\", {\n              className: \"edge-shape\",\n              name: \"edge-shape\",\n              attrs: n,\n            });\n          },\n          drawLabel: function (t, e) {\n            var n,\n              r = this.options.labelCfg;\n            n =\n              (\"undefined\" != typeof window &&\n                void 0 !== window.getComputedStyle &&\n                window\n                  .getComputedStyle(document.body, null)\n                  .getPropertyValue(\"font-family\")) ||\n              \"Arial, sans-serif\";\n            var i = Object(c.deepMix)({ fontFamily: n }, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e),\n              a = o.rotate;\n            delete o.rotate;\n            var s = e.addShape(\"text\", { attrs: o, name: \"text-shape\" });\n            if ((a && s.rotateAtStart(a), o.background)) {\n              var u = this.drawLabelBg(t, e, s),\n                h = this.itemType + \"-label-bg\";\n              u.set(\"classname\", h), s.toFront();\n            }\n            return s;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(c.deepMix)({}, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e).rotate,\n              a = this.getLabelBgStyleByPosition(n, t, i, e);\n            delete a.rotate;\n            var s = e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: a });\n            return o && s.rotateAtStart(o), s;\n          },\n        },\n        Ie = Object(f.a)(Object(f.a)({}, Ce), Ae);\n      Wt.registerEdge(\"single-edge\", Ie),\n        Wt.registerEdge(\n          \"line\",\n          { getControlPoints: function () {} },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"spline\",\n          {\n            getPath: function (t) {\n              return te(t);\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"arc\",\n          {\n            curveOffset: 20,\n            clockwise: 1,\n            getControlPoints: function (t) {\n              var e,\n                n,\n                r = t.startPoint,\n                i = t.endPoint,\n                o = (r.x + i.x) / 2,\n                a = (r.y + i.y) / 2;\n              if (void 0 !== t.controlPoints) {\n                if (\n                  ((n = t.controlPoints[0]),\n                  (e = j(r, n, i)),\n                  r.x <= i.x && r.y > i.y\n                    ? (this.clockwise = e.x > n.x ? 0 : 1)\n                    : r.x <= i.x && r.y < i.y\n                    ? (this.clockwise = e.x > n.x ? 1 : 0)\n                    : r.x > i.x && r.y <= i.y\n                    ? (this.clockwise = e.y < n.y ? 0 : 1)\n                    : (this.clockwise = e.y < n.y ? 1 : 0),\n                  (n.x - r.x) / (n.y - r.y) == (i.x - r.x) / (i.y - r.y))\n                )\n                  return [];\n              } else {\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  Object(c.isArray)(t.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  t.curveOffset < 0\n                    ? (this.clockwise = 0)\n                    : (this.clockwise = 1);\n                var s = { x: i.x - r.x, y: i.y - r.y },\n                  u = Math.atan2(s.y, s.x);\n                (n = {\n                  x: t.curveOffset * Math.cos(-Math.PI / 2 + u) + o,\n                  y: t.curveOffset * Math.sin(-Math.PI / 2 + u) + a,\n                }),\n                  (e = j(r, n, i));\n              }\n              var h = C(r, e);\n              return [{ x: h, y: h }];\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                2 === t.length\n                  ? e.push([\"L\", t[1].x, t[1].y])\n                  : e.push([\n                      \"A\",\n                      t[1].x,\n                      t[1].y,\n                      0,\n                      0,\n                      this.clockwise,\n                      t[2].x,\n                      t[2].y,\n                    ]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"quadratic\",\n          {\n            curvePosition: 0.5,\n            curveOffset: -20,\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (!e || !e.length) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  void 0 === t.curvePosition &&\n                    (t.curvePosition = this.curvePosition),\n                  Object(c.isArray)(this.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  Object(c.isArray)(this.curvePosition) &&\n                    (t.curvePosition = t.curveOffset[0]),\n                  (e = [ee(n, r, t.curvePosition, t.curveOffset)]);\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"Q\", t[1].x, t[1].y, t[2].x, t[2].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"cubic\",\n          {\n            curvePosition: [0.5, 0.5],\n            curveOffset: [-20, 20],\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (\n                (void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.curvePosition &&\n                  (t.curvePosition = this.curvePosition),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]),\n                !e || !e.length || e.length < 2)\n              ) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                e = [\n                  ee(n, r, t.curvePosition[0], t.curveOffset[0]),\n                  ee(n, r, t.curvePosition[1], t.curveOffset[1]),\n                ];\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"C\", t[1].x, t[1].y, t[2].x, t[2].y, t[3].x, t[3].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"cubic-vertical\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.y - e.y,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x, y: e.y + r * this.curvePosition[0] + i[0] },\n                  { x: n.x, y: n.y - r * this.curvePosition[1] + i[1] },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Wt.registerEdge(\n          \"cubic-horizontal\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.x - e.x,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x + r * this.curvePosition[0] + i[0], y: e.y },\n                  { x: n.x - r * this.curvePosition[1] + i[1], y: n.y },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Wt.registerEdge(\n          \"loop\",\n          {\n            getPathPoints: function (t) {\n              return ht(t);\n            },\n            getControlPoints: function (t) {\n              return t.controlPoints;\n            },\n            afterDraw: function (t) {\n              t.controlPoints = void 0;\n            },\n            afterUpdate: function (t) {\n              t.controlPoints = void 0;\n            },\n          },\n          \"cubic\",\n        );\n      var Te = {\n          itemType: \"combo\",\n          shapeType: \"single-combo\",\n          labelPosition: \"top\",\n          refX: nt.comboLabel.refX,\n          refY: nt.comboLabel.refY,\n          options: {\n            style: {\n              stroke: nt.defaultCombo.style.stroke,\n              fill: nt.defaultCombo.style.fill,\n              lineWidth: nt.defaultCombo.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: nt.comboLabel.style.fill,\n                fontSize: nt.comboLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(f.a)({}, nt.comboStateStyles),\n          },\n          getSize: function (t) {\n            var e = Object(c.clone)(\n              t.size || this.options.size || nt.defaultCombo.size,\n            );\n            return (\n              Object(c.isArray)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(c.isArray)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition,\n              r = t.style,\n              i = t.padding || this.options.padding;\n            Object(c.isArray)(i) && (i = i[0]);\n            var o = e.refX,\n              a = e.refY;\n            Object(c.isNil)(o) && (o = this.refX),\n              Object(c.isNil)(a) && (a = this.refY);\n            var s,\n              u = this.getSize(t),\n              h = (Math.max(r.r, u[0] / 2) || u[0] / 2) + i;\n            switch (n) {\n              case \"top\":\n                s = {\n                  x: 0,\n                  y: -h - a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"bottom\":\n                s = {\n                  x: 0,\n                  y: h + a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"left\":\n                s = { x: -h + o, y: 0, textAlign: \"left\" };\n                break;\n              case \"center\":\n                s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                break;\n              default:\n                s = { x: h + o, y: 0, textAlign: \"right\" };\n            }\n            return (s.text = t.label), s;\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"combo-shape\",\n            });\n          },\n          updateShape: function (t, e, n) {\n            var r = e.get(\"keyShape\");\n            (void 0 === t.animate ? this.options.animate : t.animate) &&\n            r.animate\n              ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n              : r.attr(Object(f.a)({}, n)),\n              this.updateLabel(t, e);\n          },\n        },\n        Ne = Object(f.a)(Object(f.a)({}, Ce), Te);\n      Wt.registerCombo(\"single-combo\", Ne),\n        Wt.registerCombo(\n          \"circle\",\n          {\n            options: {\n              size: [nt.defaultCombo.size[0], nt.defaultCombo.size[0]],\n              padding: nt.defaultCombo.padding[0],\n              animate: !0,\n              style: {\n                stroke: nt.defaultCombo.style.stroke,\n                fill: nt.defaultCombo.style.fill,\n                lineWidth: nt.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.comboLabel.style.fill,\n                  fontSize: nt.comboLabel.style.fontSize,\n                },\n                refX: 0,\n                refY: 0,\n              },\n              stateStyles: Object(f.a)({}, nt.comboStateStyles),\n            },\n            shapeType: \"circle\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return (\n                delete n.height,\n                delete n.width,\n                e.addShape(\"circle\", {\n                  attrs: n,\n                  className: \"circle-combo\",\n                  name: \"circle-combo\",\n                  draggable: !0,\n                })\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(c.isArray)(n) && (n = n[0]);\n              var r,\n                i = { stroke: t.color },\n                o = Object(c.mix)({}, e, i, t.style);\n              if (t.fixSize)\n                r = Object(c.isNumber)(t.fixSize) ? t.fixSize : t.fixSize[0];\n              else {\n                var a = this.getSize(t);\n                r =\n                  !Object(c.isNumber)(o.r) || isNaN(o.r)\n                    ? a[0] / 2 || nt.defaultCombo.style.r\n                    : Math.max(o.r, a[0] / 2) || a[0] / 2;\n              }\n              o.r = r + n;\n              var s = Object(f.a)({ x: 0, y: 0 }, o);\n              return t.style ? (t.style.r = r) : (t.style = { r: r }), s;\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(c.isArray)(r) && (r = r[0]);\n              var i,\n                o = Object(c.clone)(t.style);\n              (i = t.fixSize\n                ? Object(c.isNumber)(t.fixSize)\n                  ? t.fixSize\n                  : t.fixSize[0]\n                : Math.max(o.r, n[0] / 2) || n[0] / 2),\n                (o.r = i + r);\n              var a = e.get(\"sizeCache\");\n              a && (a.r = o.r);\n              var s = { stroke: t.color },\n                u = e.get(\"keyShape\"),\n                h = Object(c.mix)({}, u.attr(), s, o);\n              t.style ? (t.style.r = i) : (t.style = { r: i }),\n                this.updateShape(t, e, h, !0);\n            },\n          },\n          \"single-combo\",\n        ),\n        Wt.registerCombo(\n          \"rect\",\n          {\n            options: {\n              size: [40, 5],\n              padding: [25, 20, 15, 20],\n              animate: !0,\n              style: {\n                radius: 0,\n                stroke: nt.defaultCombo.style.stroke,\n                fill: nt.defaultCombo.style.fill,\n                lineWidth: nt.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.comboLabel.style.fill,\n                  fontSize: nt.comboLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(f.a)({}, nt.comboStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"rect-combo\",\n                name: \"rect-combo\",\n                draggable: !0,\n              });\n            },\n            getLabelStyleByPosition: function (t, e) {\n              var n = e.position || this.labelPosition,\n                r = t.style,\n                i = t.padding || this.options.padding;\n              Object(c.isNumber)(i) && (i = [i, i, i, i]);\n              var o = e.refX,\n                a = e.refY;\n              Object(c.isNil)(o) && (o = this.refX),\n                Object(c.isNil)(a) && (a = this.refY);\n              var s,\n                u = r.width / 2 + i[3],\n                h = r.height / 2 + i[0];\n              switch (n) {\n                case \"top\":\n                  s = {\n                    x: 0 - u + o,\n                    y: 0 - h + a,\n                    textBaseline: \"top\",\n                    textAlign: \"left\",\n                  };\n                  break;\n                case \"bottom\":\n                  s = {\n                    x: 0,\n                    y: h + a,\n                    textBaseline: \"bottom\",\n                    textAlign: \"center\",\n                  };\n                  break;\n                case \"left\":\n                  s = { x: 0 - u + a, y: 0, textAlign: \"left\" };\n                  break;\n                case \"center\":\n                  s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                  break;\n                default:\n                  s = { x: u + o, y: 0, textAlign: \"right\" };\n              }\n              return (s.text = t.label), s;\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(c.isNumber)(n) && (n = [n, n, n, n]);\n              var r,\n                i,\n                o = { stroke: t.color },\n                a = Object(c.mix)({}, e, o, t.style),\n                s = this.getSize(t),\n                u =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              u\n                ? Object(c.isNumber)(u)\n                  ? ((r = u), (i = u))\n                  : ((r = u[0]), (i = u[1]))\n                : ((r =\n                    !Object(c.isNumber)(a.width) || isNaN(a.width)\n                      ? s[0] || nt.defaultCombo.style.width\n                      : Math.max(a.width, s[0]) || s[0]),\n                  (i =\n                    !Object(c.isNumber)(a.height) || isNaN(a.height)\n                      ? s[1] || nt.defaultCombo.style.height\n                      : Math.max(a.height, s[1]) || s[1]));\n              var h = -r / 2 - n[3],\n                l = -i / 2 - n[0];\n              (a.width = r + n[1] + n[3]), (a.height = i + n[0] + n[2]);\n              var d = Object(f.a)({ x: h, y: l }, a);\n              return (\n                t.style\n                  ? ((t.style.width = r), (t.style.height = i))\n                  : (t.style = { width: r, height: i }),\n                d\n              );\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(c.isNumber)(r) && (r = [r, r, r, r]);\n              var i,\n                o,\n                a = Object(c.clone)(t.style),\n                s =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              s\n                ? Object(c.isNumber)(s)\n                  ? ((i = s), (o = s))\n                  : ((i = s[0]), (o = s[1]))\n                : ((i = Math.max(a.width, n[0]) || n[0]),\n                  (o = Math.max(a.height, n[1]) || n[1])),\n                (a.width = i + r[1] + r[3]),\n                (a.height = o + r[0] + r[2]);\n              var u = e.get(\"sizeCache\");\n              u && ((u.width = a.width), (u.height = a.height)),\n                (a.x = -i / 2 - r[3]),\n                (a.y = -o / 2 - r[0]);\n              var h = { stroke: t.color },\n                l = e.get(\"keyShape\"),\n                f = Object(c.mix)({}, l.attr(), h, a);\n              t.style\n                ? ((t.style.width = i), (t.style.height = o))\n                : (t.style = { width: i, height: o }),\n                this.updateShape(t, e, f, !1);\n            },\n            updateShape: function (t, e, n) {\n              var r = e.get(\"keyShape\");\n              (void 0 === t.animate ? this.options.animate : t.animate) &&\n              r.animate\n                ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n                : r.attr(Object(f.a)({}, n)),\n                this.updateLabel(t, e);\n            },\n          },\n          \"single-combo\",\n        ),\n        Wt.registerNode(\n          \"simple-circle\",\n          {\n            options: {\n              size: nt.defaultNode.size,\n              style: {\n                x: 0,\n                y: 0,\n                stroke: nt.defaultNode.style.stroke,\n                fill: nt.defaultNode.style.fill,\n                lineWidth: nt.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.nodeLabel.style.fill,\n                  fontSize: nt.nodeLabel.style.fontSize,\n                },\n              },\n              stateStyles: Object(f.a)({}, nt.nodeStateStyles),\n            },\n            shapeType: \"simple-circle\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"circle\", {\n                attrs: n,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(c.deepMix)({}, e, n),\n                i = this.getSize(t)[0] / 2;\n              return Object(f.a)({ x: 0, y: 0, r: i }, r);\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = { stroke: t.color, r: n[0] / 2 },\n                i = e.get(\"keyShape\"),\n                o = Object(c.deepMix)({}, i.attr(), r, t.style);\n              this.updateShape(t, e, o, !0);\n            },\n          },\n          \"single-node\",\n        ),\n        Wt.registerNode(\n          \"simple-rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: nt.defaultNode.style.stroke,\n                fill: nt.defaultNode.style.fill,\n                lineWidth: nt.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.nodeLabel.style.fill,\n                  fontSize: nt.nodeLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(f.a)({}, nt.nodeStateStyles),\n            },\n            shapeType: \"simple-rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                name: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(c.mix)({}, e, n),\n                i = this.getSize(t),\n                o = r.width || i[0],\n                a = r.height || i[1];\n              return Object(f.a)(\n                { x: -o / 2, y: -a / 2, width: o, height: a },\n                r,\n              );\n            },\n            update: function (t, e) {\n              e.getContainer();\n              var n = this.getOptions({}).style,\n                r = this.getSize(t),\n                i = e.get(\"keyShape\");\n              t.size ||\n                ((r[0] = i.attr(\"width\") || n.width),\n                (r[1] = i.attr(\"height\") || n.height));\n              var o = {\n                  stroke: t.color,\n                  x: -r[0] / 2,\n                  y: -r[1] / 2,\n                  width: r[0],\n                  height: r[1],\n                },\n                a = Object(c.mix)({}, n, i.attr(), o);\n              (a = Object(c.mix)(a, t.style)), this.updateShape(t, e, a, !1);\n            },\n          },\n          \"single-node\",\n        ),\n        Wt.registerNode(\n          \"image\",\n          {\n            options: {\n              img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ\",\n              size: 200,\n              clipCfg: {\n                show: !1,\n                type: \"circle\",\n                r: 50,\n                rx: 50,\n                ry: 35,\n                width: 50,\n                height: 35,\n                points: [\n                  [30, 12],\n                  [12, 30],\n                  [30, 48],\n                  [48, 30],\n                ],\n                path: [\n                  [\"M\", 25, 25],\n                  [\"L\", 50, 25],\n                  [\"A\", 12.5, 12.5, 0, 1, 1, 50, 50],\n                  [\"A\", 12.5, 12.5, 0, 1, 0, 50, 50],\n                  [\"L\", 25, 75],\n                  [\"Z\"],\n                ],\n                x: 0,\n                y: 0,\n              },\n            },\n            shapeType: \"image\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.shapeType,\n                r = this.getShapeStyle(t);\n              delete r.fill;\n              var i = e.addShape(n, {\n                attrs: r,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                name: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n              return this.drawClip(t, i), i;\n            },\n            drawClip: function (t, e) {\n              var n = this.getOptions(t).clipCfg;\n              if (n.show) {\n                var r = n.type,\n                  i = n.x,\n                  o = n.y,\n                  a = n.style;\n                if (\"circle\" === r) {\n                  var s = n.r;\n                  e.setClip({\n                    type: \"circle\",\n                    attrs: Object(f.a)({ r: s, x: i, y: o }, a),\n                  });\n                } else if (\"rect\" === r) {\n                  var c = n.width,\n                    u = n.height,\n                    h = i - c / 2,\n                    l = o - u / 2;\n                  e.setClip({\n                    type: \"rect\",\n                    attrs: Object(f.a)({ x: h, y: l, width: c, height: u }, a),\n                  });\n                } else if (\"ellipse\" === r) {\n                  var d = n.rx,\n                    p = n.ry;\n                  e.setClip({\n                    type: \"ellipse\",\n                    attrs: Object(f.a)({ x: i, y: o, rx: d, ry: p }, a),\n                  });\n                } else if (\"polygon\" === r) {\n                  var g = n.points;\n                  e.setClip({\n                    type: \"polygon\",\n                    attrs: Object(f.a)({ points: g }, a),\n                  });\n                } else if (\"path\" === r) {\n                  var v = n.path;\n                  e.setClip({\n                    type: \"path\",\n                    attrs: Object(f.a)({ path: v }, a),\n                  });\n                }\n              }\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = this.getSize(t),\n                r = this.getOptions(t).img,\n                i = n[0],\n                o = n[1];\n              return (\n                e && ((i = e.width || n[0]), (o = e.height || n[1])),\n                Object(f.a)(\n                  { x: -i / 2, y: -o / 2, width: i, height: o, img: r },\n                  e,\n                )\n              );\n            },\n            updateShapeStyle: function (t, e) {\n              var n = e.getContainer(),\n                r = \"\".concat(this.itemType, \"-shape\"),\n                i =\n                  n.find(function (t) {\n                    return t.get(\"className\") === r;\n                  }) || e.getKeyShape(),\n                o = this.getShapeStyle(t);\n              i && i.attr(o);\n            },\n          },\n          \"single-node\",\n        );\n      var Be,\n        Le = {\n          triangle: function (t, e, n) {\n            void 0 === t && (t = 10),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 L \")\n              .concat(r + e, \",-\")\n              .concat(t / 2, \" L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          vee: function (t, e, n) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 20),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 L \")\n              .concat(r + e, \",-\")\n              .concat(t / 2, \"\\n        L \")\n              .concat(r + (2 * e) / 3, \",0 L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          circle: function (t, e) {\n            return (\n              void 0 === t && (t = 5),\n              void 0 === e && (e = 0),\n              \"M \"\n                .concat(2 * e, \", 0\\n            a \")\n                .concat(t, \",\")\n                .concat(t, \" 0 1,0 \")\n                .concat(2 * t, \",0\\n            a \")\n                .concat(t, \",\")\n                .concat(t, \" 0 1,0 \")\n                .concat(2 * -t, \",0\")\n            );\n          },\n          rect: function (t, e, n) {\n            void 0 === t && (t = 10),\n              void 0 === e && (e = 10),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" \\n        L \")\n              .concat(r, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          diamond: function (t, e, n) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 \\n        L \")\n              .concat(r + e / 2, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",0 \\n        L \")\n              .concat(r + e / 2, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          triangleRect: function (t, e, n, r, i, o) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 15),\n              void 0 === r && (r = 3),\n              void 0 === i && (i = 5),\n              void 0 === o && (o = 0);\n            var a = 2 * o,\n              s = a + e + i;\n            return \"M \"\n              .concat(a, \",0 L \")\n              .concat(a + e, \",-\")\n              .concat(t / 2, \" L \")\n              .concat(a + e, \",\")\n              .concat(t / 2, \" Z\\n            M \")\n              .concat(s, \", -\")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s + r, \" -\")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s + r, \" \")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s, \" \")\n              .concat(n / 2, \"\\n            Z\");\n          },\n        },\n        De = {\n          collapse: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"a\", n, n, 0, 1, 0, 2 * n, 0],\n              [\"a\", n, n, 0, 1, 0, 2 * -n, 0],\n              [\"M\", t - n + 4, e],\n              [\"L\", t + n - 4, e],\n            ];\n          },\n          expand: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"a\", n, n, 0, 1, 0, 2 * n, 0],\n              [\"a\", n, n, 0, 1, 0, 2 * -n, 0],\n              [\"M\", t - n + 4, e],\n              [\"L\", t - n + 2 * n - 4, e],\n              [\"M\", t - n + n, e - n + 4],\n              [\"L\", t, e + n - 4],\n            ];\n          },\n          upTriangle: function (t, e, n) {\n            var r = n * Math.cos(Math.PI / 6),\n              i = n * Math.sin(Math.PI / 6);\n            return [\n              [\"M\", t - r, e + i],\n              [\"L\", t + r, e + i],\n              [\"L\", t, e - n],\n              [\"Z\"],\n            ];\n          },\n          downTriangle: function (t, e, n) {\n            var r = n * Math.cos(Math.PI / 6),\n              i = n * Math.sin(Math.PI / 6);\n            return [\n              [\"M\", t - r, e - i],\n              [\"L\", t + r, e - i],\n              [\"L\", t, e + n],\n              [\"Z\"],\n            ];\n          },\n        },\n        _e = Wt,\n        Re = [\n          \"#5F95FF\",\n          \"#61DDAA\",\n          \"#65789B\",\n          \"#F6BD16\",\n          \"#7262FD\",\n          \"#78D3F8\",\n          \"#9661BC\",\n          \"#F6903D\",\n          \"#008685\",\n          \"#F08BB4\",\n        ],\n        Fe = g.a.transform,\n        Ye = Object(f.a)(\n          Object(f.a)(\n            Object(f.a)(Object(f.a)(Object(f.a)(Object(f.a)({}, o), i), a), r),\n            s,\n          ),\n          { transform: Fe, mat3: g.b },\n        ),\n        Xe = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.layoutCfg = t.get(\"layout\") || {}),\n              (this.layoutType = this.getLayoutType()),\n              (this.layoutMethods = []),\n              this.initLayout();\n          }\n          return (\n            (t.prototype.initLayout = function () {}),\n            (t.prototype.getLayoutType = function () {\n              return this.getLayoutCfgType(this.layoutCfg);\n            }),\n            (t.prototype.getLayoutCfgType = function (t) {\n              var e = t.type;\n              if (e) return e;\n              var n = t.pipes;\n              return Array.isArray(n)\n                ? n.map(function (t) {\n                    return (null == t ? void 0 : t.type) || \"\";\n                  })\n                : null;\n            }),\n            (t.prototype.isLayoutTypeSame = function (t) {\n              var e = this.getLayoutCfgType(t);\n              return Array.isArray(this.layoutType)\n                ? this.layoutType.every(function (t, n) {\n                    return t === e[n];\n                  })\n                : (null == t ? void 0 : t.type) === this.layoutType;\n            }),\n            (t.prototype.refreshLayout = function () {\n              var t = this.graph;\n              t &&\n                (t.get(\"animate\")\n                  ? t.positionsAnimate()\n                  : t.refreshPositions());\n            }),\n            (t.prototype.changeLayout = function (t) {\n              (this.layoutCfg = t), this.destoryLayoutMethods(), this.layout();\n            }),\n            (t.prototype.changeData = function () {\n              this.destoryLayoutMethods(), this.layout();\n            }),\n            (t.prototype.destoryLayoutMethods = function () {\n              var t = this.layoutMethods;\n              null == t ||\n                t.forEach(function (t) {\n                  t.destroy();\n                }),\n                (this.layoutMethods = []);\n            }),\n            (t.prototype.destroyLayout = function () {\n              var t = this.graph;\n              this.destoryLayoutMethods(),\n                t.set(\"layout\", void 0),\n                (this.layoutCfg = void 0),\n                (this.layoutType = void 0),\n                (this.layoutMethods = void 0);\n            }),\n            (t.prototype.setDataFromGraph = function () {\n              for (\n                var t = [],\n                  e = [],\n                  n = [],\n                  r = [],\n                  i = [],\n                  o = [],\n                  a = this.graph.getNodes(),\n                  s = this.graph.getEdges(),\n                  c = this.graph.getCombos(),\n                  u = a.length,\n                  h = 0;\n                h < u;\n                h++\n              ) {\n                var l = a[h];\n                if (l && !l.destroyed) {\n                  var f = l.getModel();\n                  l.isVisible() ? t.push(f) : e.push(f);\n                }\n              }\n              var d = s.length;\n              for (h = 0; h < d; h++) {\n                var p = s[h];\n                if (p && !p.destroyed) {\n                  f = p.getModel();\n                  p.isVisible()\n                    ? f.isComboEdge\n                      ? i.push(f)\n                      : n.push(f)\n                    : r.push(f);\n                }\n              }\n              var g = c.length;\n              for (h = 0; h < g; h++) {\n                var v = c[h];\n                if (!v.destroyed) {\n                  f = v.getModel();\n                  v.isVisible() ? o.push(f) : r.push(f);\n                }\n              }\n              return {\n                nodes: t,\n                hiddenNodes: e,\n                edges: n,\n                hiddenEdges: r,\n                combos: o,\n                hiddenCombos: [],\n                comboEdges: i,\n              };\n            }),\n            (t.prototype.reLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = null == e ? void 0 : e.type;\n                (e.onLayoutEnd = function () {\n                  o.emit(\"aftersublayout\", { type: a }), r();\n                }),\n                  t.init(n.data),\n                  \"force\" === a && ((t.ticking = !1), t.forceSimulation.stop()),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  t.execute(),\n                  t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n              });\n            }),\n            (t.prototype.relayout = function (t) {\n              var e = this,\n                n = this.graph,\n                r = this.layoutMethods,\n                i = this.layoutCfg;\n              if (t) {\n                this.data = this.setDataFromGraph();\n                var o = this.data.nodes;\n                if (!o) return !1;\n                this.initPositions(i.center, o);\n              }\n              n.emit(\"beforelayout\");\n              var a = Promise.resolve();\n              null == r ||\n                r.forEach(function (t, n) {\n                  var r = i[n];\n                  a = a.then(function () {\n                    return e.reLayoutMethod(t, r);\n                  });\n                }),\n                a\n                  .then(function () {\n                    i.onAllLayoutEnd && i.onAllLayoutEnd();\n                  })\n                  .catch(function (t) {\n                    console.warn(\"relayout failed\", t);\n                  });\n            }),\n            (t.prototype.filterLayoutData = function (t, e) {\n              var n,\n                r,\n                i = t.nodes,\n                o = t.edges,\n                a = Object(f.e)(t, [\"nodes\", \"edges\"]);\n              if (!i) return t;\n              if (\n                ((n = Object(c.isFunction)(null == e ? void 0 : e.nodesFilter)\n                  ? e.nodesFilter\n                  : function () {\n                      return !0;\n                    }),\n                Object(c.isFunction)(null == e ? void 0 : e.edgesFilter))\n              )\n                r = e.edgesFilter;\n              else {\n                var s = i.reduce(function (t, e) {\n                  return (t[e.id] = !0), t;\n                }, {});\n                r = function (t) {\n                  return s[t.source] && s[t.target];\n                };\n              }\n              return Object(f.a)({ nodes: i.filter(n), edges: o.filter(r) }, a);\n            }),\n            (t.prototype.getLayoutBBox = function (t) {\n              var e = this.graph,\n                n = Object(c.groupBy)(e.getNodes(), function (t) {\n                  return t.getModel().layoutOrder;\n                }),\n                r = Object.values(n).map(function (t) {\n                  var e = It(t);\n                  return (e.size = [e.width, e.height]), e;\n                });\n              return {\n                groupNodes: Object.values(Object(c.groupBy)(t, \"layoutOrder\")),\n                layoutNodes: r,\n              };\n            }),\n            (t.prototype.layoutAnimate = function () {}),\n            (t.prototype.moveToZero = function () {\n              var t = this.graph.get(\"data\").nodes;\n              if (void 0 !== t[0].x && null !== t[0].x && !At(t[0].x)) {\n                for (var e = [0, 0], n = t.length, r = 0; r < n; r++) {\n                  var i = t[r];\n                  (e[0] += i.x), (e[1] += i.y);\n                }\n                (e[0] /= t.length), (e[1] /= t.length);\n                for (r = 0; r < n; r++) {\n                  ((i = t[r]).x -= e[0]), (i.y -= e[1]);\n                }\n              }\n            }),\n            (t.prototype.initPositions = function (t, e) {\n              var n = this.graph;\n              if (!e) return !1;\n              var r = e ? e.length : 0;\n              if (r) {\n                var i = 0.85 * n.get(\"width\"),\n                  o = 0.85 * n.get(\"height\"),\n                  a = Math.ceil(Math.sqrt(r) * (i / o)),\n                  s = i / (a - 1),\n                  c = o / (Math.ceil(r / a) - 1);\n                (isFinite(s) && s) || (s = 0), (isFinite(c) && s) || (c = 0);\n                for (\n                  var u = t[0] - i / 2, h = t[1] - o / 2, l = !0, f = 0;\n                  f < r;\n                  f++\n                ) {\n                  var d = e[f];\n                  At(d.x) && ((l = !1), (d.x = (f % a) * s + u)),\n                    At(d.y) && ((l = !1), (d.y = Math.floor(f / a) * c + h));\n                }\n                return l;\n              }\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                this.destoryLayoutMethods(),\n                (this.destroyed = !0);\n            }),\n            (t.prototype.onTick = function (t) {\n              var e;\n              null === (e = this.layoutMethods) ||\n                void 0 === e ||\n                e.forEach(function (e) {\n                  var n;\n                  null === (n = null == e ? void 0 : e.onTick) ||\n                    void 0 === n ||\n                    n.call(e, t);\n                });\n            }),\n            t\n          );\n        })(),\n        ze = function (t) {\n          (this.graph = t), (this.destroyed = !1), this.initEvents();\n        };\n      !(function (t) {\n        (t.CLICK = \"click\"),\n          (t.DBLCLICK = \"dblclick\"),\n          (t.TAP = \"tap\"),\n          (t.DBLTAP = \"dbltap\"),\n          (t.DRAGSTART = \"dragstart\"),\n          (t.DRAGEND = \"dragend\"),\n          (t.DRAG = \"drag\"),\n          (t.DRAGENTER = \"dragenter\"),\n          (t.DRAGLEAVE = \"dragleave\"),\n          (t.DRAGOVER = \"dragover\"),\n          (t.DRAGOUT = \"dragout\"),\n          (t.DDROP = \"drop\"),\n          (t.PINCHSTART = \"pinchstart\"),\n          (t.PINCHMOVE = \"pinchmove\"),\n          (t.PANSTART = \"panstart\"),\n          (t.PANMOVE = \"panmove\"),\n          (t.PANEND = \"panend\"),\n          (t.PRESS = \"press\"),\n          (t.ACTION_END = \"actionend\"),\n          (t.TOUCHSTART = \"touchstart\"),\n          (t.TOUCHMOVE = \"touchmove\"),\n          (t.TOUCHEND = \"touchend\"),\n          (t.CANVAS_TOUCHSTART = \"canvas:touchstart\"),\n          (t.CANVAS_TOUCHMOVE = \"canvas:touchmove\"),\n          (t.CANVAS_TOUCHEND = \"canvas:touchend\"),\n          (t.NODE_TOUCHSTART = \"node:touchstart\"),\n          (t.NODE_TOUCHMOVE = \"node:touchmove\"),\n          (t.NODE_TOUCHEND = \"node:touchend\"),\n          (t.COMBO_TOUCHSTART = \"combo:touchstart\"),\n          (t.COMBO_TOUCHMOVE = \"combo:touchmove\"),\n          (t.COMBO_TOUCHEND = \"combo:touchend\"),\n          (t.EDGE_TOUCHSTART = \"edge:touchstart\"),\n          (t.EDGE_TOUCHMOVE = \"edge:touchmove\"),\n          (t.EDGE_TOUCHEND = \"edge:touchend\"),\n          (t.NODE_CLICK = \"node:click\"),\n          (t.NODE_DBLCLICK = \"node:dblclick\"),\n          (t.NODE_DROP = \"node:drop\"),\n          (t.NODE_DRAGOVER = \"node:dragover\"),\n          (t.NODE_DRAGENTER = \"node:dragenter\"),\n          (t.NODE_DRAGLEAVE = \"node:dragleave\"),\n          (t.NODE_DRAGSTART = \"node:dragstart\"),\n          (t.NODE_DRAG = \"node:drag\"),\n          (t.NODE_DRAGEND = \"node:dragend\"),\n          (t.NODE_TAP = \"node:tap\"),\n          (t.NODE_DBLTAP = \"node:dbltap\"),\n          (t.NODE_PANSTART = \"node:panstart\"),\n          (t.NODE_PANMOVE = \"node:panmove\"),\n          (t.NODE_PANEND = \"node:panend\"),\n          (t.NODE_PRESS = \"node:press\"),\n          (t.COMBO_CLICK = \"combo:click\"),\n          (t.COMBO_DBLCLICK = \"combo:dblclick\"),\n          (t.COMBO_DROP = \"combo:drop\"),\n          (t.COMBO_DRAGOVER = \"combo:dragover\"),\n          (t.COMBO_DRAGENTER = \"combo:dragenter\"),\n          (t.COMBO_DRAGLEAVE = \"combo:dragleave\"),\n          (t.COMBO_DRAGSTART = \"combo:dragstart\"),\n          (t.COMBO_DRAG = \"combo:drag\"),\n          (t.COMBO_DRAGEND = \"combo:dragend\"),\n          (t.COMBO_TAP = \"combo:tap\"),\n          (t.COMBO_DBLTAP = \"combo:dbltap\"),\n          (t.COMBO_PANSTART = \"combo:panstart\"),\n          (t.COMBO_PANMOVE = \"combo:panmove\"),\n          (t.COMBO_PANEND = \"combo:panend\"),\n          (t.COMBO_PRESS = \"combo:press\"),\n          (t.EDGE_CLICK = \"edge:click\"),\n          (t.EDGE_DBLCLICK = \"edge:dblclick\"),\n          (t.EDGE_DROP = \"edge:drop\"),\n          (t.EDGE_DRAGOVER = \"edge:dragover\"),\n          (t.EDGE_DRAGENTER = \"edge:dragenter\"),\n          (t.EDGE_DRAGLEAVE = \"edge:dragleave\"),\n          (t.EDGE_TAP = \"edge:tap\"),\n          (t.EDGE_DBLTAP = \"edge:dbltap\"),\n          (t.EDGE_PRESS = \"edge:press\"),\n          (t.CANVAS_CLICK = \"canvas:click\"),\n          (t.CANVAS_DBLCLICK = \"canvas:dblclick\"),\n          (t.CANVAS_DROP = \"canvas:drop\"),\n          (t.CANVAS_DRAGENTER = \"canvas:dragenter\"),\n          (t.CANVAS_DRAGLEAVE = \"canvas:dragleave\"),\n          (t.CANVAS_DRAGSTART = \"canvas:dragstart\"),\n          (t.CANVAS_DRAG = \"canvas:drag\"),\n          (t.CANVAS_DRAGEND = \"canvas:dragend\"),\n          (t.CANVAS_TAP = \"canvas:tap\"),\n          (t.CANVAS_DBLTAP = \"canvas:dbltap\"),\n          (t.CANVAS_PANSTART = \"canvas:panstart\"),\n          (t.CANVAS_PANMOVE = \"canvas:panmove\"),\n          (t.CANVAS_PANEND = \"canvas:panend\"),\n          (t.CANVAS_PRESS = \"canvas:press\"),\n          (t.BEFORERENDER = \"beforerender\"),\n          (t.AFTERRENDER = \"afterrender\"),\n          (t.BEFOREADDITEM = \"beforeadditem\"),\n          (t.AFTERADDITEM = \"afteradditem\"),\n          (t.BEFOREREMOVEITEM = \"beforeremoveitem\"),\n          (t.AFTERREMOVEITEM = \"afterremoveitem\"),\n          (t.BEFOREUPDATEITEM = \"beforeupdateitem\"),\n          (t.AFTERUPDATEITEM = \"afterupdateitem\"),\n          (t.BEFOREITEMVISIBILITYCHANGE = \"beforeitemvisibilitychange\"),\n          (t.AFTERITEMVISIBILITYCHANGE = \"afteritemvisibilitychange\"),\n          (t.BEFOREITEMSTATECHANGE = \"beforeitemstatechange\"),\n          (t.AFTERITEMSTATECHANGE = \"afteritemstatechange\"),\n          (t.BEFOREITEMREFRESH = \"beforeitemrefresh\"),\n          (t.AFTERITEMREFRESH = \"afteritemrefresh\"),\n          (t.BEFOREITEMSTATESCLEAR = \"beforeitemstatesclear\"),\n          (t.AFTERITEMSTATESCLEAR = \"afteritemstatesclear\"),\n          (t.BEFOREMODECHANGE = \"beforemodechange\"),\n          (t.AFTERMODECHANGE = \"aftermodechange\"),\n          (t.BEFORELAYOUT = \"beforelayout\"),\n          (t.AFTERLAYOUT = \"afterlayout\"),\n          (t.BEFORECREATEEDGE = \"beforecreateedge\"),\n          (t.AFTERCREATEEDGE = \"aftercreateedge\"),\n          (t.BEFOREGRAPHREFRESHPOSITION = \"beforegraphrefreshposition\"),\n          (t.AFTERGRAPHREFRESHPOSITION = \"aftergraphrefreshposition\"),\n          (t.BEFOREGRAPHREFRESH = \"beforegraphrefresh\"),\n          (t.AFTERGRAPHREFRESH = \"aftergraphrefresh\"),\n          (t.BEFOREANIMATE = \"beforeanimate\"),\n          (t.AFTERANIMATE = \"afteranimate\"),\n          (t.BEFOREPAINT = \"beforepaint\"),\n          (t.AFTERPAINT = \"afterpaint\"),\n          (t.BEFORECOLLAPSEEXPANDCOMBO = \"beforecollapseexpandcombo\"),\n          (t.AFTERCOLLAPSEEXPANDCOMBO = \"aftercollapseexpandcombo\"),\n          (t.GRAPHSTATECHANGE = \"graphstatechange\"),\n          (t.AFTERACTIVATERELATIONS = \"afteractivaterelations\"),\n          (t.NODESELECTCHANGE = \"nodeselectchange\"),\n          (t.TOOLTIPCHANGE = \"tooltipchange\"),\n          (t.WHEELZOOM = \"wheelzoom\"),\n          (t.VIEWPORTCHANGE = \"viewportchange\"),\n          (t.DRAGNODEEND = \"dragnodeend\"),\n          (t.STACKCHANGE = \"stackchange\");\n      })(Be || (Be = {}));\n      var We = _e.registerNode,\n        qe = _e.registerEdge,\n        Ve = _e.registerCombo,\n        Ge = l.registerBehavior,\n        He = nt;\n      _e.registerNode, _e.registerEdge, _e.registerCombo, l.registerBehavior;\n    },\n    205: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        function (r) {\n          var i = n(119),\n            o =\n              \"undefined\" != typeof globalThis\n                ? globalThis\n                : \"undefined\" != typeof self\n                ? self\n                : \"undefined\" != typeof window\n                ? window\n                : void 0 !== r\n                ? r\n                : void 0;\n          (\"object\" == typeof exports && \"object\" == typeof t) ||\n            (\"function\" == typeof define && n(223)) ||\n            \"object\" == typeof exports ||\n            Object.defineProperties(o, {\n              f6: {\n                get: function () {\n                  return (\n                    console.warn(\"废弃的特性: f6, 请使用 F6 代替 f6\"), i.default\n                  );\n                },\n              },\n            }),\n            (e.default = i.default);\n        }.call(this, n(98));\n    },\n    206: function (t, e) {\n      var n,\n        r,\n        i = (t.exports = {});\n      function o() {\n        throw new Error(\"setTimeout has not been defined\");\n      }\n      function a() {\n        throw new Error(\"clearTimeout has not been defined\");\n      }\n      function s(t) {\n        if (n === setTimeout) return setTimeout(t, 0);\n        if ((n === o || !n) && setTimeout)\n          return (n = setTimeout), setTimeout(t, 0);\n        try {\n          return n(t, 0);\n        } catch (e) {\n          try {\n            return n.call(null, t, 0);\n          } catch (e) {\n            return n.call(this, t, 0);\n          }\n        }\n      }\n      !(function () {\n        try {\n          n = \"function\" == typeof setTimeout ? setTimeout : o;\n        } catch (t) {\n          n = o;\n        }\n        try {\n          r = \"function\" == typeof clearTimeout ? clearTimeout : a;\n        } catch (t) {\n          r = a;\n        }\n      })();\n      var c,\n        u = [],\n        h = !1,\n        l = -1;\n      function f() {\n        h &&\n          c &&\n          ((h = !1), c.length ? (u = c.concat(u)) : (l = -1), u.length && d());\n      }\n      function d() {\n        if (!h) {\n          var t = s(f);\n          h = !0;\n          for (var e = u.length; e; ) {\n            for (c = u, u = []; ++l < e; ) c && c[l].run();\n            (l = -1), (e = u.length);\n          }\n          (c = null),\n            (h = !1),\n            (function (t) {\n              if (r === clearTimeout) return clearTimeout(t);\n              if ((r === a || !r) && clearTimeout)\n                return (r = clearTimeout), clearTimeout(t);\n              try {\n                r(t);\n              } catch (e) {\n                try {\n                  return r.call(null, t);\n                } catch (e) {\n                  return r.call(this, t);\n                }\n              }\n            })(t);\n        }\n      }\n      function p(t, e) {\n        (this.fun = t), (this.array = e);\n      }\n      function g() {}\n      (i.nextTick = function (t) {\n        var e = new Array(arguments.length - 1);\n        if (arguments.length > 1)\n          for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n        u.push(new p(t, e)), 1 !== u.length || h || s(d);\n      }),\n        (p.prototype.run = function () {\n          this.fun.apply(null, this.array);\n        }),\n        (i.title = \"browser\"),\n        (i.browser = !0),\n        (i.env = {}),\n        (i.argv = []),\n        (i.version = \"\"),\n        (i.versions = {}),\n        (i.on = g),\n        (i.addListener = g),\n        (i.once = g),\n        (i.off = g),\n        (i.removeListener = g),\n        (i.removeAllListeners = g),\n        (i.emit = g),\n        (i.prependListener = g),\n        (i.prependOnceListener = g),\n        (i.listeners = function (t) {\n          return [];\n        }),\n        (i.binding = function (t) {\n          throw new Error(\"process.binding is not supported\");\n        }),\n        (i.cwd = function () {\n          return \"/\";\n        }),\n        (i.chdir = function (t) {\n          throw new Error(\"process.chdir is not supported\");\n        }),\n        (i.umask = function () {\n          return 0;\n        });\n    },\n    207: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isAllowCapture =\n          e.isParent =\n          e.isBrowser =\n          e.removeFromArray =\n            void 0),\n        (e.removeFromArray = function (t, e) {\n          var n = t.indexOf(e);\n          -1 !== n && t.splice(n, 1);\n        }),\n        (e.isBrowser =\n          \"undefined\" != typeof window && void 0 !== window.document);\n      var r = n(0);\n      Object.defineProperty(e, \"isNil\", {\n        enumerable: !0,\n        get: function () {\n          return r.isNil;\n        },\n      }),\n        Object.defineProperty(e, \"isFunction\", {\n          enumerable: !0,\n          get: function () {\n            return r.isFunction;\n          },\n        }),\n        Object.defineProperty(e, \"isString\", {\n          enumerable: !0,\n          get: function () {\n            return r.isString;\n          },\n        }),\n        Object.defineProperty(e, \"isObject\", {\n          enumerable: !0,\n          get: function () {\n            return r.isObject;\n          },\n        }),\n        Object.defineProperty(e, \"isArray\", {\n          enumerable: !0,\n          get: function () {\n            return r.isArray;\n          },\n        }),\n        Object.defineProperty(e, \"mix\", {\n          enumerable: !0,\n          get: function () {\n            return r.mix;\n          },\n        }),\n        Object.defineProperty(e, \"each\", {\n          enumerable: !0,\n          get: function () {\n            return r.each;\n          },\n        }),\n        Object.defineProperty(e, \"upperFirst\", {\n          enumerable: !0,\n          get: function () {\n            return r.upperFirst;\n          },\n        }),\n        (e.isParent = function (t, e) {\n          if (t.isCanvas()) return !0;\n          for (var n = e.getParent(), r = !1; n; ) {\n            if (n === t) {\n              r = !0;\n              break;\n            }\n            n = n.getParent();\n          }\n          return r;\n        }),\n        (e.isAllowCapture = function (t) {\n          return t.cfg.visible && t.cfg.capture;\n        });\n    },\n    208: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.getOffScreenContext = void 0);\n      var r = null;\n      e.getOffScreenContext = function () {\n        if (!r) {\n          var t = document.createElement(\"canvas\");\n          (t.width = 1), (t.height = 1), (r = t.getContext(\"2d\"));\n        }\n        return r;\n      };\n    },\n    209: function (t, e, n) {\n      \"use strict\";\n      var r = n(210),\n        i = n(211),\n        o = Object.hasOwnProperty,\n        a = Object.create(null);\n      for (var s in r) o.call(r, s) && (a[r[s]] = s);\n      var c = (t.exports = { to: {}, get: {} });\n      function u(t, e, n) {\n        return Math.min(Math.max(e, t), n);\n      }\n      function h(t) {\n        var e = Math.round(t).toString(16).toUpperCase();\n        return e.length < 2 ? \"0\" + e : e;\n      }\n      (c.get = function (t) {\n        var e, n;\n        switch (t.substring(0, 3).toLowerCase()) {\n          case \"hsl\":\n            (e = c.get.hsl(t)), (n = \"hsl\");\n            break;\n          case \"hwb\":\n            (e = c.get.hwb(t)), (n = \"hwb\");\n            break;\n          default:\n            (e = c.get.rgb(t)), (n = \"rgb\");\n        }\n        return e ? { model: n, value: e } : null;\n      }),\n        (c.get.rgb = function (t) {\n          if (!t) return null;\n          var e,\n            n,\n            i,\n            a,\n            s = [0, 0, 0, 1];\n          if ((n = t.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i))) {\n            for (a = n[2], n = n[1], i = 0; i < 3; i++)\n              (e = 2 * i), (s[i] = parseInt(n.slice(e, e + 2), 16));\n            a && (s[3] = parseInt(a, 16) / 255);\n          } else if ((n = t.match(/^#([a-f0-9]{3,4})$/i))) {\n            for (a = (n = n[1])[3], i = 0; i < 3; i++)\n              s[i] = parseInt(n[i] + n[i], 16);\n            a && (s[3] = parseInt(a + a, 16) / 255);\n          } else if (\n            (n = t.match(\n              /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/,\n            ))\n          ) {\n            for (i = 0; i < 3; i++) s[i] = parseInt(n[i + 1], 0);\n            n[4] &&\n              (n[5]\n                ? (s[3] = 0.01 * parseFloat(n[4]))\n                : (s[3] = parseFloat(n[4])));\n          } else {\n            if (\n              !(n = t.match(\n                /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/,\n              ))\n            )\n              return (n = t.match(/^(\\w+)$/))\n                ? \"transparent\" === n[1]\n                  ? [0, 0, 0, 0]\n                  : o.call(r, n[1])\n                  ? (((s = r[n[1]])[3] = 1), s)\n                  : null\n                : null;\n            for (i = 0; i < 3; i++)\n              s[i] = Math.round(2.55 * parseFloat(n[i + 1]));\n            n[4] &&\n              (n[5]\n                ? (s[3] = 0.01 * parseFloat(n[4]))\n                : (s[3] = parseFloat(n[4])));\n          }\n          for (i = 0; i < 3; i++) s[i] = u(s[i], 0, 255);\n          return (s[3] = u(s[3], 0, 1)), s;\n        }),\n        (c.get.hsl = function (t) {\n          if (!t) return null;\n          var e,\n            n = t.match(\n              /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/,\n            );\n          return n\n            ? ((e = parseFloat(n[4])),\n              [\n                ((parseFloat(n[1]) % 360) + 360) % 360,\n                u(parseFloat(n[2]), 0, 100),\n                u(parseFloat(n[3]), 0, 100),\n                u(isNaN(e) ? 1 : e, 0, 1),\n              ])\n            : null;\n        }),\n        (c.get.hwb = function (t) {\n          if (!t) return null;\n          var e,\n            n = t.match(\n              /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/,\n            );\n          return n\n            ? ((e = parseFloat(n[4])),\n              [\n                ((parseFloat(n[1]) % 360) + 360) % 360,\n                u(parseFloat(n[2]), 0, 100),\n                u(parseFloat(n[3]), 0, 100),\n                u(isNaN(e) ? 1 : e, 0, 1),\n              ])\n            : null;\n        }),\n        (c.to.hex = function () {\n          var t = i(arguments);\n          return (\n            \"#\" +\n            h(t[0]) +\n            h(t[1]) +\n            h(t[2]) +\n            (t[3] < 1 ? h(Math.round(255 * t[3])) : \"\")\n          );\n        }),\n        (c.to.rgb = function () {\n          var t = i(arguments);\n          return t.length < 4 || 1 === t[3]\n            ? \"rgb(\" +\n                Math.round(t[0]) +\n                \", \" +\n                Math.round(t[1]) +\n                \", \" +\n                Math.round(t[2]) +\n                \")\"\n            : \"rgba(\" +\n                Math.round(t[0]) +\n                \", \" +\n                Math.round(t[1]) +\n                \", \" +\n                Math.round(t[2]) +\n                \", \" +\n                t[3] +\n                \")\";\n        }),\n        (c.to.rgb.percent = function () {\n          var t = i(arguments),\n            e = Math.round((t[0] / 255) * 100),\n            n = Math.round((t[1] / 255) * 100),\n            r = Math.round((t[2] / 255) * 100);\n          return t.length < 4 || 1 === t[3]\n            ? \"rgb(\" + e + \"%, \" + n + \"%, \" + r + \"%)\"\n            : \"rgba(\" + e + \"%, \" + n + \"%, \" + r + \"%, \" + t[3] + \")\";\n        }),\n        (c.to.hsl = function () {\n          var t = i(arguments);\n          return t.length < 4 || 1 === t[3]\n            ? \"hsl(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%)\"\n            : \"hsla(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%, \" + t[3] + \")\";\n        }),\n        (c.to.hwb = function () {\n          var t = i(arguments),\n            e = \"\";\n          return (\n            t.length >= 4 && 1 !== t[3] && (e = \", \" + t[3]),\n            \"hwb(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%\" + e + \")\"\n          );\n        }),\n        (c.to.keyword = function (t) {\n          return a[t.slice(0, 3)];\n        });\n    },\n    210: function (t, e, n) {\n      \"use strict\";\n      t.exports = {\n        aliceblue: [240, 248, 255],\n        antiquewhite: [250, 235, 215],\n        aqua: [0, 255, 255],\n        aquamarine: [127, 255, 212],\n        azure: [240, 255, 255],\n        beige: [245, 245, 220],\n        bisque: [255, 228, 196],\n        black: [0, 0, 0],\n        blanchedalmond: [255, 235, 205],\n        blue: [0, 0, 255],\n        blueviolet: [138, 43, 226],\n        brown: [165, 42, 42],\n        burlywood: [222, 184, 135],\n        cadetblue: [95, 158, 160],\n        chartreuse: [127, 255, 0],\n        chocolate: [210, 105, 30],\n        coral: [255, 127, 80],\n        cornflowerblue: [100, 149, 237],\n        cornsilk: [255, 248, 220],\n        crimson: [220, 20, 60],\n        cyan: [0, 255, 255],\n        darkblue: [0, 0, 139],\n        darkcyan: [0, 139, 139],\n        darkgoldenrod: [184, 134, 11],\n        darkgray: [169, 169, 169],\n        darkgreen: [0, 100, 0],\n        darkgrey: [169, 169, 169],\n        darkkhaki: [189, 183, 107],\n        darkmagenta: [139, 0, 139],\n        darkolivegreen: [85, 107, 47],\n        darkorange: [255, 140, 0],\n        darkorchid: [153, 50, 204],\n        darkred: [139, 0, 0],\n        darksalmon: [233, 150, 122],\n        darkseagreen: [143, 188, 143],\n        darkslateblue: [72, 61, 139],\n        darkslategray: [47, 79, 79],\n        darkslategrey: [47, 79, 79],\n        darkturquoise: [0, 206, 209],\n        darkviolet: [148, 0, 211],\n        deeppink: [255, 20, 147],\n        deepskyblue: [0, 191, 255],\n        dimgray: [105, 105, 105],\n        dimgrey: [105, 105, 105],\n        dodgerblue: [30, 144, 255],\n        firebrick: [178, 34, 34],\n        floralwhite: [255, 250, 240],\n        forestgreen: [34, 139, 34],\n        fuchsia: [255, 0, 255],\n        gainsboro: [220, 220, 220],\n        ghostwhite: [248, 248, 255],\n        gold: [255, 215, 0],\n        goldenrod: [218, 165, 32],\n        gray: [128, 128, 128],\n        green: [0, 128, 0],\n        greenyellow: [173, 255, 47],\n        grey: [128, 128, 128],\n        honeydew: [240, 255, 240],\n        hotpink: [255, 105, 180],\n        indianred: [205, 92, 92],\n        indigo: [75, 0, 130],\n        ivory: [255, 255, 240],\n        khaki: [240, 230, 140],\n        lavender: [230, 230, 250],\n        lavenderblush: [255, 240, 245],\n        lawngreen: [124, 252, 0],\n        lemonchiffon: [255, 250, 205],\n        lightblue: [173, 216, 230],\n        lightcoral: [240, 128, 128],\n        lightcyan: [224, 255, 255],\n        lightgoldenrodyellow: [250, 250, 210],\n        lightgray: [211, 211, 211],\n        lightgreen: [144, 238, 144],\n        lightgrey: [211, 211, 211],\n        lightpink: [255, 182, 193],\n        lightsalmon: [255, 160, 122],\n        lightseagreen: [32, 178, 170],\n        lightskyblue: [135, 206, 250],\n        lightslategray: [119, 136, 153],\n        lightslategrey: [119, 136, 153],\n        lightsteelblue: [176, 196, 222],\n        lightyellow: [255, 255, 224],\n        lime: [0, 255, 0],\n        limegreen: [50, 205, 50],\n        linen: [250, 240, 230],\n        magenta: [255, 0, 255],\n        maroon: [128, 0, 0],\n        mediumaquamarine: [102, 205, 170],\n        mediumblue: [0, 0, 205],\n        mediumorchid: [186, 85, 211],\n        mediumpurple: [147, 112, 219],\n        mediumseagreen: [60, 179, 113],\n        mediumslateblue: [123, 104, 238],\n        mediumspringgreen: [0, 250, 154],\n        mediumturquoise: [72, 209, 204],\n        mediumvioletred: [199, 21, 133],\n        midnightblue: [25, 25, 112],\n        mintcream: [245, 255, 250],\n        mistyrose: [255, 228, 225],\n        moccasin: [255, 228, 181],\n        navajowhite: [255, 222, 173],\n        navy: [0, 0, 128],\n        oldlace: [253, 245, 230],\n        olive: [128, 128, 0],\n        olivedrab: [107, 142, 35],\n        orange: [255, 165, 0],\n        orangered: [255, 69, 0],\n        orchid: [218, 112, 214],\n        palegoldenrod: [238, 232, 170],\n        palegreen: [152, 251, 152],\n        paleturquoise: [175, 238, 238],\n        palevioletred: [219, 112, 147],\n        papayawhip: [255, 239, 213],\n        peachpuff: [255, 218, 185],\n        peru: [205, 133, 63],\n        pink: [255, 192, 203],\n        plum: [221, 160, 221],\n        powderblue: [176, 224, 230],\n        purple: [128, 0, 128],\n        rebeccapurple: [102, 51, 153],\n        red: [255, 0, 0],\n        rosybrown: [188, 143, 143],\n        royalblue: [65, 105, 225],\n        saddlebrown: [139, 69, 19],\n        salmon: [250, 128, 114],\n        sandybrown: [244, 164, 96],\n        seagreen: [46, 139, 87],\n        seashell: [255, 245, 238],\n        sienna: [160, 82, 45],\n        silver: [192, 192, 192],\n        skyblue: [135, 206, 235],\n        slateblue: [106, 90, 205],\n        slategray: [112, 128, 144],\n        slategrey: [112, 128, 144],\n        snow: [255, 250, 250],\n        springgreen: [0, 255, 127],\n        steelblue: [70, 130, 180],\n        tan: [210, 180, 140],\n        teal: [0, 128, 128],\n        thistle: [216, 191, 216],\n        tomato: [255, 99, 71],\n        turquoise: [64, 224, 208],\n        violet: [238, 130, 238],\n        wheat: [245, 222, 179],\n        white: [255, 255, 255],\n        whitesmoke: [245, 245, 245],\n        yellow: [255, 255, 0],\n        yellowgreen: [154, 205, 50],\n      };\n    },\n    211: function (t, e, n) {\n      \"use strict\";\n      var r = n(212),\n        i = Array.prototype.concat,\n        o = Array.prototype.slice,\n        a = (t.exports = function (t) {\n          var e,\n            n,\n            a,\n            s = [];\n          for (e = 0, n = t.length; e < n; e++)\n            (a = t[e]), r(a) ? (s = i.call(s, o.call(a))) : s.push(a);\n          return s;\n        });\n      a.wrap = function (t) {\n        return function () {\n          return t(a(arguments));\n        };\n      };\n    },\n    212: function (t, e, n) {\n      \"use strict\";\n      t.exports = function (t) {\n        return (\n          !(!t || \"string\" == typeof t) &&\n          (t instanceof Array ||\n            Array.isArray(t) ||\n            (t.length >= 0 &&\n              (t.splice instanceof Function ||\n                (Object.getOwnPropertyDescriptor(t, t.length - 1) &&\n                  \"String\" !== t.constructor.name))))\n        );\n      };\n    },\n    213: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = n(126),\n        a = n(215),\n        s = {};\n      Object.keys(o).forEach(function (t) {\n        (s[t] = {}),\n          Object.defineProperty(s[t], \"channels\", { value: o[t].channels }),\n          Object.defineProperty(s[t], \"labels\", { value: o[t].labels });\n        var e = a(t);\n        Object.keys(e).forEach(function (n) {\n          var r = e[n];\n          (s[t][n] = (function (t) {\n            var e = function (e) {\n              if (null == e) return e;\n              arguments.length > 1 &&\n                (e = Array.prototype.slice.call(arguments));\n              var n,\n                r,\n                o = t(e);\n              if (\"object\" === i(o))\n                for (n = o.length, r = 0; r < n; r++) o[r] = Math.round(o[r]);\n              return o;\n            };\n            return \"conversion\" in t && (e.conversion = t.conversion), e;\n          })(r)),\n            (s[t][n].raw = (function (t) {\n              var e = function (e) {\n                return null == e\n                  ? e\n                  : (arguments.length > 1 &&\n                      (e = Array.prototype.slice.call(arguments)),\n                    t(e));\n              };\n              return \"conversion\" in t && (e.conversion = t.conversion), e;\n            })(r));\n        });\n      }),\n        (t.exports = s);\n    },\n    214: function (t, e, n) {\n      \"use strict\";\n      t.exports = {\n        aliceblue: [240, 248, 255],\n        antiquewhite: [250, 235, 215],\n        aqua: [0, 255, 255],\n        aquamarine: [127, 255, 212],\n        azure: [240, 255, 255],\n        beige: [245, 245, 220],\n        bisque: [255, 228, 196],\n        black: [0, 0, 0],\n        blanchedalmond: [255, 235, 205],\n        blue: [0, 0, 255],\n        blueviolet: [138, 43, 226],\n        brown: [165, 42, 42],\n        burlywood: [222, 184, 135],\n        cadetblue: [95, 158, 160],\n        chartreuse: [127, 255, 0],\n        chocolate: [210, 105, 30],\n        coral: [255, 127, 80],\n        cornflowerblue: [100, 149, 237],\n        cornsilk: [255, 248, 220],\n        crimson: [220, 20, 60],\n        cyan: [0, 255, 255],\n        darkblue: [0, 0, 139],\n        darkcyan: [0, 139, 139],\n        darkgoldenrod: [184, 134, 11],\n        darkgray: [169, 169, 169],\n        darkgreen: [0, 100, 0],\n        darkgrey: [169, 169, 169],\n        darkkhaki: [189, 183, 107],\n        darkmagenta: [139, 0, 139],\n        darkolivegreen: [85, 107, 47],\n        darkorange: [255, 140, 0],\n        darkorchid: [153, 50, 204],\n        darkred: [139, 0, 0],\n        darksalmon: [233, 150, 122],\n        darkseagreen: [143, 188, 143],\n        darkslateblue: [72, 61, 139],\n        darkslategray: [47, 79, 79],\n        darkslategrey: [47, 79, 79],\n        darkturquoise: [0, 206, 209],\n        darkviolet: [148, 0, 211],\n        deeppink: [255, 20, 147],\n        deepskyblue: [0, 191, 255],\n        dimgray: [105, 105, 105],\n        dimgrey: [105, 105, 105],\n        dodgerblue: [30, 144, 255],\n        firebrick: [178, 34, 34],\n        floralwhite: [255, 250, 240],\n        forestgreen: [34, 139, 34],\n        fuchsia: [255, 0, 255],\n        gainsboro: [220, 220, 220],\n        ghostwhite: [248, 248, 255],\n        gold: [255, 215, 0],\n        goldenrod: [218, 165, 32],\n        gray: [128, 128, 128],\n        green: [0, 128, 0],\n        greenyellow: [173, 255, 47],\n        grey: [128, 128, 128],\n        honeydew: [240, 255, 240],\n        hotpink: [255, 105, 180],\n        indianred: [205, 92, 92],\n        indigo: [75, 0, 130],\n        ivory: [255, 255, 240],\n        khaki: [240, 230, 140],\n        lavender: [230, 230, 250],\n        lavenderblush: [255, 240, 245],\n        lawngreen: [124, 252, 0],\n        lemonchiffon: [255, 250, 205],\n        lightblue: [173, 216, 230],\n        lightcoral: [240, 128, 128],\n        lightcyan: [224, 255, 255],\n        lightgoldenrodyellow: [250, 250, 210],\n        lightgray: [211, 211, 211],\n        lightgreen: [144, 238, 144],\n        lightgrey: [211, 211, 211],\n        lightpink: [255, 182, 193],\n        lightsalmon: [255, 160, 122],\n        lightseagreen: [32, 178, 170],\n        lightskyblue: [135, 206, 250],\n        lightslategray: [119, 136, 153],\n        lightslategrey: [119, 136, 153],\n        lightsteelblue: [176, 196, 222],\n        lightyellow: [255, 255, 224],\n        lime: [0, 255, 0],\n        limegreen: [50, 205, 50],\n        linen: [250, 240, 230],\n        magenta: [255, 0, 255],\n        maroon: [128, 0, 0],\n        mediumaquamarine: [102, 205, 170],\n        mediumblue: [0, 0, 205],\n        mediumorchid: [186, 85, 211],\n        mediumpurple: [147, 112, 219],\n        mediumseagreen: [60, 179, 113],\n        mediumslateblue: [123, 104, 238],\n        mediumspringgreen: [0, 250, 154],\n        mediumturquoise: [72, 209, 204],\n        mediumvioletred: [199, 21, 133],\n        midnightblue: [25, 25, 112],\n        mintcream: [245, 255, 250],\n        mistyrose: [255, 228, 225],\n        moccasin: [255, 228, 181],\n        navajowhite: [255, 222, 173],\n        navy: [0, 0, 128],\n        oldlace: [253, 245, 230],\n        olive: [128, 128, 0],\n        olivedrab: [107, 142, 35],\n        orange: [255, 165, 0],\n        orangered: [255, 69, 0],\n        orchid: [218, 112, 214],\n        palegoldenrod: [238, 232, 170],\n        palegreen: [152, 251, 152],\n        paleturquoise: [175, 238, 238],\n        palevioletred: [219, 112, 147],\n        papayawhip: [255, 239, 213],\n        peachpuff: [255, 218, 185],\n        peru: [205, 133, 63],\n        pink: [255, 192, 203],\n        plum: [221, 160, 221],\n        powderblue: [176, 224, 230],\n        purple: [128, 0, 128],\n        rebeccapurple: [102, 51, 153],\n        red: [255, 0, 0],\n        rosybrown: [188, 143, 143],\n        royalblue: [65, 105, 225],\n        saddlebrown: [139, 69, 19],\n        salmon: [250, 128, 114],\n        sandybrown: [244, 164, 96],\n        seagreen: [46, 139, 87],\n        seashell: [255, 245, 238],\n        sienna: [160, 82, 45],\n        silver: [192, 192, 192],\n        skyblue: [135, 206, 235],\n        slateblue: [106, 90, 205],\n        slategray: [112, 128, 144],\n        slategrey: [112, 128, 144],\n        snow: [255, 250, 250],\n        springgreen: [0, 255, 127],\n        steelblue: [70, 130, 180],\n        tan: [210, 180, 140],\n        teal: [0, 128, 128],\n        thistle: [216, 191, 216],\n        tomato: [255, 99, 71],\n        turquoise: [64, 224, 208],\n        violet: [238, 130, 238],\n        wheat: [245, 222, 179],\n        white: [255, 255, 255],\n        whitesmoke: [245, 245, 245],\n        yellow: [255, 255, 0],\n        yellowgreen: [154, 205, 50],\n      };\n    },\n    215: function (t, e, n) {\n      \"use strict\";\n      var r = n(126);\n      function i(t) {\n        var e,\n          n,\n          i,\n          o,\n          a,\n          s,\n          c = (function () {\n            var t,\n              e,\n              n = {},\n              i = Object.keys(r);\n            for (t = i.length, e = 0; e < t; e++)\n              n[i[e]] = { distance: -1, parent: null };\n            return n;\n          })(),\n          u = [t];\n        for (c[t].distance = 0; u.length; )\n          for (\n            e = u.pop(), i = (n = Object.keys(r[e])).length, o = 0;\n            o < i;\n            o++\n          )\n            -1 === (s = c[(a = n[o])]).distance &&\n              ((s.distance = c[e].distance + 1), (s.parent = e), u.unshift(a));\n        return c;\n      }\n      function o(t, e) {\n        return function (n) {\n          return e(t(n));\n        };\n      }\n      function a(t, e) {\n        for (\n          var n = [e[t].parent, t], i = r[e[t].parent][t], a = e[t].parent;\n          e[a].parent;\n\n        )\n          n.unshift(e[a].parent),\n            (i = o(r[e[a].parent][a], i)),\n            (a = e[a].parent);\n        return (i.conversion = n), i;\n      }\n      t.exports = function (t) {\n        var e,\n          n,\n          r,\n          o = i(t),\n          s = {},\n          c = Object.keys(o);\n        for (e = c.length, n = 0; n < e; n++)\n          null !== o[(r = c[n])].parent && (s[r] = a(r, o));\n        return s;\n      };\n    },\n    216: function (t, e, n) {\n      \"use strict\";\n      var r = Object.create\n          ? function (t, e, n, r) {\n              void 0 === r && (r = n),\n                Object.defineProperty(t, r, {\n                  enumerable: !0,\n                  get: function () {\n                    return e[n];\n                  },\n                });\n            }\n          : function (t, e, n, r) {\n              void 0 === r && (r = n), (t[r] = e[n]);\n            },\n        i = function (t, e) {\n          for (var n in t)\n            \"default\" === n ||\n              Object.prototype.hasOwnProperty.call(e, n) ||\n              r(e, t, n);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        i(n(217), e),\n        i(n(218), e),\n        i(n(219), e),\n        i(n(220), e),\n        i(n(221), e),\n        i(n(222), e);\n    },\n    217: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r = /-(\\w)/g;\n      e.camelize = (function (t) {\n        var e = Object.create(null);\n        return function (n) {\n          return e[n] || (e[n] = t(n));\n        };\n      })(function (t) {\n        return t.replace(r, function (t, e) {\n          return e ? e.toUpperCase() : \"\";\n        });\n      });\n    },\n    218: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    219: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    22: function (t, e, n) {\n      \"use strict\";\n      var r = n(95),\n        i = Object(r.getColorsWithSubjectColor)(\n          \"rgb(95, 149, 255)\",\n          \"rgb(255, 255, 255)\",\n        );\n      e.a = {\n        version: \"0.0.16\",\n        rootContainerClassName: \"root-container\",\n        uiContainerClassName: \"ui-container\",\n        waterContainerClassName: \"water-container\",\n        nodeContainerClassName: \"node-container\",\n        edgeContainerClassName: \"edge-container\",\n        comboContainerClassName: \"combo-container\",\n        delegateContainerClassName: \"delegate-container\",\n        defaultLoopPosition: \"top\",\n        nodeLabel: {\n          style: {\n            fill: \"#000\",\n            fontSize: 12,\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n          },\n          offset: 4,\n        },\n        defaultNode: {\n          type: \"circle\",\n          style: { lineWidth: 1, stroke: i.mainStroke, fill: i.mainFill },\n          size: 20,\n          color: i.mainStroke,\n          linkPoints: {\n            size: 8,\n            lineWidth: 1,\n            fill: i.activeFill,\n            stroke: i.activeStroke,\n          },\n        },\n        nodeStateStyles: {\n          active: {\n            fill: i.activeFill,\n            stroke: i.activeStroke,\n            lineWidth: 2,\n            shadowColor: i.mainStroke,\n            shadowBlur: 10,\n          },\n          selected: {\n            fill: i.selectedFill,\n            stroke: i.selectedStroke,\n            lineWidth: 4,\n            shadowColor: i.selectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            fill: i.highlightFill,\n            stroke: i.highlightStroke,\n            lineWidth: 2,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: {\n            fill: i.inactiveFill,\n            stroke: i.inactiveStroke,\n            lineWidth: 1,\n          },\n          disable: {\n            fill: i.disableFill,\n            stroke: i.disableStroke,\n            lineWidth: 1,\n          },\n        },\n        edgeLabel: {\n          style: {\n            fill: \"rgb(0, 0, 0)\",\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n            fontSize: 12,\n          },\n        },\n        defaultEdge: {\n          type: \"line\",\n          size: 1,\n          style: { stroke: i.edgeMainStroke, lineAppendWidth: 2 },\n          color: i.edgeMainStroke,\n        },\n        edgeStateStyles: {\n          active: { stroke: i.edgeActiveStroke, lineWidth: 1 },\n          selected: {\n            stroke: i.edgeSelectedStroke,\n            lineWidth: 2,\n            shadowColor: i.edgeSelectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            stroke: i.edgeHighlightStroke,\n            lineWidth: 2,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: { stroke: i.edgeInactiveStroke, lineWidth: 1 },\n          disable: { stroke: i.edgeDisableStroke, lineWidth: 1 },\n        },\n        comboLabel: {\n          style: { fill: \"rgb(0, 0, 0)\", textBaseline: \"middle\", fontSize: 12 },\n          refY: 10,\n          refX: 10,\n        },\n        defaultCombo: {\n          type: \"circle\",\n          style: {\n            fill: i.comboMainFill,\n            lineWidth: 1,\n            stroke: i.comboMainStroke,\n            r: 5,\n            width: 20,\n            height: 10,\n          },\n          size: [20, 5],\n          color: i.comboMainStroke,\n          padding: [25, 20, 15, 20],\n        },\n        comboStateStyles: {\n          active: {\n            stroke: i.comboActiveStroke,\n            lineWidth: 1,\n            fill: i.comboActiveFill,\n          },\n          selected: {\n            stroke: i.comboSelectedStroke,\n            lineWidth: 2,\n            fill: i.comboSelectedFill,\n            shadowColor: i.comboSelectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            stroke: i.comboHighlightStroke,\n            lineWidth: 2,\n            fill: i.comboHighlightFill,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: {\n            stroke: i.comboInactiveStroke,\n            fill: i.comboInactiveFill,\n            lineWidth: 1,\n          },\n          disable: {\n            stroke: i.comboDisableStroke,\n            fill: i.comboDisableFill,\n            lineWidth: 1,\n          },\n        },\n        delegateStyle: {\n          fill: \"#F3F9FF\",\n          fillOpacity: 0.5,\n          stroke: \"#1890FF\",\n          strokeOpacity: 0.9,\n          lineDash: [5, 5],\n        },\n        textWaterMarkerConfig: {\n          width: 150,\n          height: 100,\n          compatible: !1,\n          text: {\n            x: 0,\n            y: 60,\n            lineHeight: 20,\n            rotate: 20,\n            fontSize: 14,\n            fontFamily: \"Microsoft YaHei\",\n            fill: \"rgba(0, 0, 0, 0.1)\",\n            baseline: \"Middle\",\n          },\n        },\n        imageWaterMarkerConfig: {\n          image: { x: 0, y: 0, width: 30, height: 20, rotate: 0 },\n        },\n        waterMarkerImage:\n          \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n      };\n    },\n    220: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        var r,\n          i = [];\n        for (r = 0; r < t; r++) i[r] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (i[e[t.source]] += 1),\n                t.target && (i[e[t.target]] += 1);\n            }),\n            i)\n          : i;\n      };\n      e.floydWarshall = function (t) {\n        var e,\n          n = [],\n          r = t.length;\n        for (i = 0; i < r; i += 1)\n          for (n[i] = [], o = 0; o < r; o += 1)\n            i === o\n              ? (n[i][o] = 0)\n              : 0 !== t[i][o] && t[i][o]\n              ? (n[i][o] = t[i][o])\n              : (n[i][o] = 1 / 0);\n        for (e = 0; e < r; e += 1)\n          for (var i = 0; i < r; i += 1)\n            for (var o = 0; o < r; o += 1)\n              n[i][o] > n[i][e] + n[e][o] && (n[i][o] = n[i][e] + n[e][o]);\n        return n;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          i = [],\n          o = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              (o[t.id] = e), i.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                a = o[n],\n                s = o[r];\n              (i[a][s] = 1), e || (i[s][a] = 1);\n            }),\n          i\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            var r;\n            if (e && e.children)\n              for (r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    221: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            var e, n, r;\n            for (n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === i(t);\n      };\n      e.clone = function (t) {\n        var n, r;\n        return null === t\n          ? t\n          : t instanceof Date\n          ? new Date(t.getTime())\n          : t instanceof Array\n          ? ((n = []),\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            }))\n          : \"object\" === i(t) && t !== {}\n          ? ((r = o({}, t)),\n            Object.keys(r).forEach(function (t) {\n              r[t] = e.clone(r[t]);\n            }),\n            r)\n          : t;\n      };\n    },\n    222: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    223: function (t, e) {\n      (function (e) {\n        t.exports = e;\n      }).call(this, {});\n    },\n    23: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return f;\n      }),\n        n.d(e, \"b\", function () {\n          return d;\n        }),\n        n.d(e, \"a\", function () {\n          return p;\n        });\n      var r = n(1),\n        i = n(31);\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var a = Math.sin,\n        s = Math.cos,\n        c = Math.atan2,\n        u = Math.PI;\n      function h(t, e, n, r, o, h, l) {\n        var f = e.stroke,\n          d = e.lineWidth,\n          p = c(r - h, n - o),\n          g = new i.Path({\n            type: \"path\",\n            canvas: t.get(\"canvas\"),\n            isArrowShape: !0,\n            attrs: {\n              path:\n                \"M\" +\n                10 * s(u / 6) +\n                \",\" +\n                10 * a(u / 6) +\n                \" L0,0 L\" +\n                10 * s(u / 6) +\n                \",-\" +\n                10 * a(u / 6),\n              stroke: f,\n              lineWidth: d,\n            },\n          });\n        g.translate(o, h),\n          g.rotateAtPoint(o, h, p),\n          t.set(l ? \"startArrowShape\" : \"endArrowShape\", g);\n      }\n      function l(t, e, n, o, u, h, l) {\n        var f = e.startArrow,\n          d = e.endArrow,\n          p = e.stroke,\n          g = e.lineWidth,\n          v = l ? f : d,\n          y = v.d,\n          m = v.fill,\n          b = v.stroke,\n          x = v.lineWidth,\n          S = Object(r.e)(v, [\"d\", \"fill\", \"stroke\", \"lineWidth\"]),\n          w = c(o - h, n - u);\n        y && ((u -= s(w) * y), (h -= a(w) * y));\n        var O = new i.Path({\n          type: \"path\",\n          canvas: t.get(\"canvas\"),\n          isArrowShape: !0,\n          attrs: Object(r.a)(Object(r.a)({}, S), {\n            stroke: b || p,\n            lineWidth: x || g,\n            fill: m,\n          }),\n        });\n        O.translate(u, h),\n          O.rotateAtPoint(u, h, w),\n          t.set(l ? \"startArrowShape\" : \"endArrowShape\", O);\n      }\n      function f(t, e, n, r, i) {\n        var o = c(r - e, n - t);\n        return { dx: s(o) * i, dy: a(o) * i };\n      }\n      function d(t, e, n, r, i, a) {\n        \"object\" === o(e.startArrow)\n          ? l(t, e, n, r, i, a, !0)\n          : e.startArrow\n          ? h(t, e, n, r, i, a, !0)\n          : t.set(\"startArrowShape\", null);\n      }\n      function p(t, e, n, r, i, a) {\n        \"object\" === o(e.endArrow)\n          ? l(t, e, n, r, i, a, !1)\n          : e.endArrow\n          ? h(t, e, n, r, i, a, !1)\n          : t.set(\"startArrowShape\", null);\n      }\n    },\n    25: function (t, e, n) {\n      \"use strict\";\n      function r(t, e) {\n        var n = [],\n          r = t[0],\n          i = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          c = t[5],\n          u = t[6],\n          h = t[7],\n          l = t[8],\n          f = e[0],\n          d = e[1],\n          p = e[2],\n          g = e[3],\n          v = e[4],\n          y = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          (n[0] = f * r + d * a + p * u),\n          (n[1] = f * i + d * s + p * h),\n          (n[2] = f * o + d * c + p * l),\n          (n[3] = g * r + v * a + y * u),\n          (n[4] = g * i + v * s + y * h),\n          (n[5] = g * o + v * c + y * l),\n          (n[6] = m * r + b * a + x * u),\n          (n[7] = m * i + b * s + x * h),\n          (n[8] = m * o + b * c + x * l),\n          n\n        );\n      }\n      function i(t, e) {\n        var n = [],\n          r = e[0],\n          i = e[1];\n        return (\n          (n[0] = t[0] * r + t[3] * i + t[6]),\n          (n[1] = t[1] * r + t[4] * i + t[7]),\n          n\n        );\n      }\n      function o(t) {\n        var e = [],\n          n = t[0],\n          r = t[1],\n          i = t[2],\n          o = t[3],\n          a = t[4],\n          s = t[5],\n          c = t[6],\n          u = t[7],\n          h = t[8],\n          l = h * a - s * u,\n          f = -h * o + s * c,\n          d = u * o - a * c,\n          p = n * l + r * f + i * d;\n        return p\n          ? ((p = 1 / p),\n            (e[0] = l * p),\n            (e[1] = (-h * r + i * u) * p),\n            (e[2] = (s * r - i * a) * p),\n            (e[3] = f * p),\n            (e[4] = (h * n - i * c) * p),\n            (e[5] = (-s * n + i * o) * p),\n            (e[6] = d * p),\n            (e[7] = (-u * n + r * c) * p),\n            (e[8] = (a * n - r * o) * p),\n            e)\n          : null;\n      }\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"c\", function () {\n          return i;\n        }),\n        n.d(e, \"a\", function () {\n          return o;\n        });\n    },\n    28: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return c;\n      }),\n        n.d(e, \"b\", function () {\n          return f;\n        }),\n        n.d(e, \"c\", function () {\n          return g;\n        }),\n        n.d(e, \"d\", function () {\n          return w;\n        });\n      var r = n(0),\n        i = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi,\n        o = /[^\\s\\,]+/gi;\n      var a = function (t) {\n          var e = t || [];\n          return Object(r.isArray)(e)\n            ? e\n            : Object(r.isString)(e)\n            ? ((e = e.match(i)),\n              Object(r.each)(e, function (t, n) {\n                if ((t = t.match(o))[0].length > 1) {\n                  var i = t[0].charAt(0);\n                  t.splice(1, 0, t[0].substr(1)), (t[0] = i);\n                }\n                Object(r.each)(t, function (e, n) {\n                  isNaN(e) || (t[n] = +e);\n                }),\n                  (e[n] = t);\n              }),\n              e)\n            : void 0;\n        },\n        s = n(5);\n      var c = function (t, e, n) {\n        void 0 === e && (e = !1),\n          void 0 === n &&\n            (n = [\n              [0, 0],\n              [1, 1],\n            ]);\n        for (var r = !!e, i = [], o = 0, a = t.length; o < a; o += 2)\n          i.push([t[o], t[o + 1]]);\n        var c,\n          u,\n          h,\n          l = (function (t, e, n, r) {\n            var i,\n              o,\n              a,\n              c,\n              u,\n              h,\n              l,\n              f = [],\n              d = !!r;\n            if (d) {\n              (a = r[0]), (c = r[1]);\n              for (var p = 0, g = t.length; p < g; p += 1) {\n                var v = t[p];\n                (a = s.b.min([0, 0], a, v)), (c = s.b.max([0, 0], c, v));\n              }\n            }\n            p = 0;\n            for (var y = t.length; p < y; p += 1) {\n              v = t[p];\n              if (0 !== p || n)\n                if (p !== y - 1 || n) {\n                  (i = t[[p ? p - 1 : y - 1, p - 1][n ? 0 : 1]]),\n                    (o = t[n ? (p + 1) % y : p + 1]);\n                  var m = [0, 0];\n                  (m = s.b.sub(m, o, i)), (m = s.b.scale(m, m, e));\n                  var b = s.b.distance(v, i),\n                    x = s.b.distance(v, o),\n                    S = b + x;\n                  0 !== S && ((b /= S), (x /= S));\n                  var w = s.b.scale([0, 0], m, -b),\n                    O = s.b.scale([0, 0], m, x);\n                  (h = s.b.add([0, 0], v, w)),\n                    (u = s.b.add([0, 0], v, O)),\n                    (u = s.b.min([0, 0], u, s.b.max([0, 0], o, v))),\n                    (u = s.b.max([0, 0], u, s.b.min([0, 0], o, v))),\n                    (w = s.b.sub([0, 0], u, v)),\n                    (w = s.b.scale([0, 0], w, -b / x)),\n                    (h = s.b.add([0, 0], v, w)),\n                    (h = s.b.min([0, 0], h, s.b.max([0, 0], i, v))),\n                    (h = s.b.max([0, 0], h, s.b.min([0, 0], i, v))),\n                    (O = s.b.sub([0, 0], v, h)),\n                    (O = s.b.scale([0, 0], O, x / b)),\n                    (u = s.b.add([0, 0], v, O)),\n                    d &&\n                      ((h = s.b.max([0, 0], h, a)),\n                      (h = s.b.min([0, 0], h, c)),\n                      (u = s.b.max([0, 0], u, a)),\n                      (u = s.b.min([0, 0], u, c))),\n                    f.push(l),\n                    f.push(h),\n                    (l = u);\n                } else (h = v), f.push(l), f.push(h);\n              else l = v;\n            }\n            return n && f.push(f.shift()), f;\n          })(i, 0.4, r, n),\n          f = i.length,\n          d = [];\n        for (o = 0; o < f - 1; o += 1)\n          (c = l[2 * o]),\n            (u = l[2 * o + 1]),\n            (h = i[o + 1]),\n            d.push([\"C\", c[0], c[1], u[0], u[1], h[0], h[1]]);\n        return (\n          r &&\n            ((c = l[f]),\n            (u = l[f + 1]),\n            (h = i[0]),\n            d.push([\"C\", c[0], c[1], u[0], u[1], h[0], h[1]])),\n          d\n        );\n      };\n      var u = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        h = new RegExp(\n          \"([a-z])[\" +\n            u +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            u +\n            \"]*,?[\" +\n            u +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        l = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + u + \"]*,?[\" + u + \"]*\",\n          \"ig\",\n        );\n      function f(t) {\n        if (!t) return null;\n        if (Object(r.isArray)(t)) return t;\n        var e = {\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          n = [];\n        return (\n          String(t).replace(h, function (t, r, i) {\n            var o = [],\n              a = r.toLowerCase();\n            if (\n              (i.replace(l, function (t, e) {\n                e && o.push(+e);\n              }),\n              \"m\" === a &&\n                o.length > 2 &&\n                (n.push([r].concat(o.splice(0, 2))),\n                (a = \"l\"),\n                (r = \"m\" === r ? \"l\" : \"L\")),\n              \"o\" === a && 1 === o.length && n.push([r, o[0]]),\n              \"r\" === a)\n            )\n              n.push([r].concat(o));\n            else\n              for (\n                ;\n                o.length >= e[a] &&\n                (n.push([r].concat(o.splice(0, e[a]))), e[a]);\n\n              );\n            return \"\";\n          }),\n          n\n        );\n      }\n      var d = /[a-z]/;\n      function p(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function g(t) {\n        var e = f(t);\n        if (!e || !e.length) return [[\"M\", 0, 0]];\n        for (var n = !1, r = 0; r < e.length; r++) {\n          var i = e[r][0];\n          if (d.test(i) || [\"V\", \"H\", \"T\", \"S\"].indexOf(i) >= 0) {\n            n = !0;\n            break;\n          }\n        }\n        if (!n) return e;\n        var o = [],\n          a = 0,\n          s = 0,\n          c = 0,\n          u = 0,\n          h = 0,\n          l = e[0];\n        (\"M\" !== l[0] && \"m\" !== l[0]) ||\n          ((c = a = +l[1]), (u = s = +l[2]), h++, (o[0] = [\"M\", a, s]));\n        r = h;\n        for (var g = e.length; r < g; r++) {\n          var v = e[r],\n            y = o[r - 1],\n            m = [],\n            b = (i = v[0]).toUpperCase();\n          if (i !== b)\n            switch (((m[0] = b), b)) {\n              case \"A\":\n                (m[1] = v[1]),\n                  (m[2] = v[2]),\n                  (m[3] = v[3]),\n                  (m[4] = v[4]),\n                  (m[5] = v[5]),\n                  (m[6] = +v[6] + a),\n                  (m[7] = +v[7] + s);\n                break;\n              case \"V\":\n                m[1] = +v[1] + s;\n                break;\n              case \"H\":\n                m[1] = +v[1] + a;\n                break;\n              case \"M\":\n                (c = +v[1] + a), (u = +v[2] + s), (m[1] = c), (m[2] = u);\n                break;\n              default:\n                for (var x = 1, S = v.length; x < S; x++)\n                  m[x] = +v[x] + (x % 2 ? a : s);\n            }\n          else m = e[r];\n          switch (b) {\n            case \"Z\":\n              (a = +c), (s = +u);\n              break;\n            case \"H\":\n              m = [\"L\", (a = m[1]), s];\n              break;\n            case \"V\":\n              m = [\"L\", a, (s = m[1])];\n              break;\n            case \"T\":\n              (a = m[1]), (s = m[2]);\n              var w = p([y[1], y[2]], [y[3], y[4]]);\n              m = [\"Q\", w[0], w[1], a, s];\n              break;\n            case \"S\":\n              (a = m[m.length - 2]), (s = m[m.length - 1]);\n              var O = y.length,\n                M = p([y[O - 4], y[O - 3]], [y[O - 2], y[O - 1]]);\n              m = [\"C\", M[0], M[1], m[1], m[2], a, s];\n              break;\n            case \"M\":\n              (c = m[m.length - 2]), (u = m[m.length - 1]);\n              break;\n            default:\n              (a = m[m.length - 2]), (s = m[m.length - 1]);\n          }\n          o.push(m);\n        }\n        return o;\n      }\n      Math.PI;\n      function v(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function y(t, e) {\n        return v(t) * v(e) ? (t[0] * e[0] + t[1] * e[1]) / (v(t) * v(e)) : 1;\n      }\n      function m(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(y(t, e));\n      }\n      function b(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function x(t, e) {\n        var n = e[1],\n          i = e[2],\n          o = Object(r.mod)(Object(r.toRadian)(e[3]), 2 * Math.PI),\n          a = e[4],\n          s = e[5],\n          c = t[0],\n          u = t[1],\n          h = e[6],\n          l = e[7],\n          f = (Math.cos(o) * (c - h)) / 2 + (Math.sin(o) * (u - l)) / 2,\n          d = (-1 * Math.sin(o) * (c - h)) / 2 + (Math.cos(o) * (u - l)) / 2,\n          p = (f * f) / (n * n) + (d * d) / (i * i);\n        p > 1 && ((n *= Math.sqrt(p)), (i *= Math.sqrt(p)));\n        var g = n * n * (d * d) + i * i * (f * f),\n          v = g ? Math.sqrt((n * n * (i * i) - g) / g) : 1;\n        a === s && (v *= -1), isNaN(v) && (v = 0);\n        var x = i ? (v * n * d) / i : 0,\n          S = n ? (v * -i * f) / n : 0,\n          w = (c + h) / 2 + Math.cos(o) * x - Math.sin(o) * S,\n          O = (u + l) / 2 + Math.sin(o) * x + Math.cos(o) * S,\n          M = [(f - x) / n, (d - S) / i],\n          k = [(-1 * f - x) / n, (-1 * d - S) / i],\n          j = m([1, 0], M),\n          C = m(M, k);\n        return (\n          y(M, k) <= -1 && (C = Math.PI),\n          y(M, k) >= 1 && (C = 0),\n          0 === s && C > 0 && (C -= 2 * Math.PI),\n          1 === s && C < 0 && (C += 2 * Math.PI),\n          {\n            cx: w,\n            cy: O,\n            rx: b(t, [h, l]) ? 0 : n,\n            ry: b(t, [h, l]) ? 0 : i,\n            startAngle: j,\n            endAngle: j + C,\n            xRotation: o,\n            arcFlag: a,\n            sweepFlag: s,\n          }\n        );\n      }\n      function S(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function w(t) {\n        for (\n          var e = [],\n            n = null,\n            r = null,\n            i = null,\n            o = 0,\n            s = (t = a(t)).length,\n            c = 0;\n          c < s;\n          c++\n        ) {\n          var u = t[c];\n          r = t[c + 1];\n          var h = u[0],\n            l = {\n              command: h,\n              prePoint: n,\n              params: u,\n              startTangent: null,\n              endTangent: null,\n            };\n          switch (h) {\n            case \"M\":\n              (i = [u[1], u[2]]), (o = c);\n              break;\n            case \"A\":\n              var f = x(n, u);\n              l.arcParams = f;\n          }\n          if (\"Z\" === h) (n = i), (r = t[o + 1]);\n          else {\n            var d = u.length;\n            n = [u[d - 2], u[d - 1]];\n          }\n          r && \"Z\" === r[0] && ((r = t[o]), e[o] && (e[o].prePoint = n)),\n            (l.currentPoint = n),\n            e[o] && b(n, e[o].currentPoint) && (e[o].prePoint = l.prePoint);\n          var p = r ? [r[r.length - 2], r[r.length - 1]] : null;\n          l.nextPoint = p;\n          var g = l.prePoint;\n          if ([\"L\", \"H\", \"V\"].includes(h))\n            (l.startTangent = [g[0] - n[0], g[1] - n[1]]),\n              (l.endTangent = [n[0] - g[0], n[1] - g[1]]);\n          else if (\"Q\" === h) {\n            var v = [u[1], u[2]];\n            (l.startTangent = [g[0] - v[0], g[1] - v[1]]),\n              (l.endTangent = [n[0] - v[0], n[1] - v[1]]);\n          } else if (\"T\" === h) {\n            v = S((w = e[c - 1]).currentPoint, g);\n            \"Q\" === w.command\n              ? ((l.command = \"Q\"),\n                (l.startTangent = [g[0] - v[0], g[1] - v[1]]),\n                (l.endTangent = [n[0] - v[0], n[1] - v[1]]))\n              : ((l.command = \"TL\"),\n                (l.startTangent = [g[0] - n[0], g[1] - n[1]]),\n                (l.endTangent = [n[0] - g[0], n[1] - g[1]]));\n          } else if (\"C\" === h) {\n            var y = [u[1], u[2]],\n              m = [u[3], u[4]];\n            (l.startTangent = [g[0] - y[0], g[1] - y[1]]),\n              (l.endTangent = [n[0] - m[0], n[1] - m[1]]),\n              0 === l.startTangent[0] &&\n                0 === l.startTangent[1] &&\n                (l.startTangent = [y[0] - m[0], y[1] - m[1]]),\n              0 === l.endTangent[0] &&\n                0 === l.endTangent[1] &&\n                (l.endTangent = [m[0] - y[0], m[1] - y[1]]);\n          } else if (\"S\" === h) {\n            var w;\n            (y = S((w = e[c - 1]).currentPoint, g)), (m = [u[1], u[2]]);\n            \"C\" === w.command\n              ? ((l.command = \"C\"),\n                (l.startTangent = [g[0] - y[0], g[1] - y[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]))\n              : ((l.command = \"SQ\"),\n                (l.startTangent = [g[0] - m[0], g[1] - m[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]));\n          } else if (\"A\" === h) {\n            var O = 0.001,\n              M = l.arcParams || {},\n              k = M.cx,\n              j = void 0 === k ? 0 : k,\n              C = M.cy,\n              E = void 0 === C ? 0 : C,\n              P = M.rx,\n              A = void 0 === P ? 0 : P,\n              I = M.ry,\n              T = void 0 === I ? 0 : I,\n              N = M.sweepFlag,\n              B = void 0 === N ? 0 : N,\n              L = M.startAngle,\n              D = void 0 === L ? 0 : L,\n              _ = M.endAngle,\n              R = void 0 === _ ? 0 : _;\n            0 === B && (O *= -1);\n            var F = A * Math.cos(D - O) + j,\n              Y = T * Math.sin(D - O) + E;\n            l.startTangent = [F - i[0], Y - i[1]];\n            var X = A * Math.cos(D + R + O) + j,\n              z = T * Math.sin(D + R - O) + E;\n            l.endTangent = [g[0] - X, g[1] - z];\n          }\n          e.push(l);\n        }\n        return e;\n      }\n    },\n    3: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return o;\n      }),\n        n.d(e, \"a\", function () {\n          return a;\n        }),\n        n.d(e, \"d\", function () {\n          return s;\n        }),\n        n.d(e, \"e\", function () {\n          return c;\n        }),\n        n.d(e, \"l\", function () {\n          return u;\n        }),\n        n.d(e, \"j\", function () {\n          return h;\n        }),\n        n.d(e, \"i\", function () {\n          return l;\n        });\n      var r = n(0);\n      n.d(e, \"h\", function () {\n        return r.isNil;\n      }),\n        n.d(e, \"k\", function () {\n          return r.isString;\n        }),\n        n.d(e, \"g\", function () {\n          return r.isFunction;\n        }),\n        n.d(e, \"f\", function () {\n          return r.isArray;\n        }),\n        n.d(e, \"b\", function () {\n          return r.each;\n        }),\n        n.d(e, \"n\", function () {\n          return r.toRadian;\n        }),\n        n.d(e, \"m\", function () {\n          return r.mod;\n        });\n      n(40);\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function o() {\n        return \"object\" ===\n          (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n          window.devicePixelRatio\n          ? window.devicePixelRatio\n          : 1;\n      }\n      function a(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function s(t, e, n, r, i, o) {\n        return i >= t && i <= t + n && o >= e && o <= e + r;\n      }\n      function c(t, e) {\n        return !(\n          e.minX > t.maxX ||\n          e.maxX < t.minX ||\n          e.minY > t.maxY ||\n          e.maxY < t.minY\n        );\n      }\n      function u(t, e) {\n        return t && e\n          ? {\n              minX: Math.min(t.minX, e.minX),\n              minY: Math.min(t.minY, e.minY),\n              maxX: Math.max(t.maxX, e.maxX),\n              maxY: Math.max(t.maxY, e.maxY),\n            }\n          : t || e;\n      }\n      function h(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function l(t, e) {\n        if (t.isCanvas()) return !0;\n        for (var n = e.getParent(), r = !1; n; ) {\n          if (n === t) {\n            r = !0;\n            break;\n          }\n          n = n.getParent();\n        }\n        return r;\n      }\n    },\n    31: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"Base\", function () {\n          return r.a;\n        }),\n        n.d(e, \"Circle\", function () {\n          return a;\n        }),\n        n.d(e, \"Ellipse\", function () {\n          return c;\n        }),\n        n.d(e, \"Image\", function () {\n          return u.a;\n        }),\n        n.d(e, \"Line\", function () {\n          return d;\n        }),\n        n.d(e, \"Marker\", function () {\n          return m;\n        }),\n        n.d(e, \"Path\", function () {\n          return P;\n        }),\n        n.d(e, \"Polygon\", function () {\n          return I;\n        }),\n        n.d(e, \"Polyline\", function () {\n          return T;\n        }),\n        n.d(e, \"Rect\", function () {\n          return B;\n        }),\n        n.d(e, \"Text\", function () {\n          return L;\n        });\n      var r = n(11),\n        i = n(1),\n        o = n(3),\n        a = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), { x: 0, y: 0, r: 0 });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var a = this.attr(),\n                s = a.x,\n                c = a.y,\n                u = a.r,\n                h = i / 2,\n                l = Object(o.a)(s, c, t, e);\n              return r && n\n                ? l <= u + h\n                : r\n                ? l <= u\n                : !!n && l >= u - h && l <= u + h;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.r;\n              t.beginPath(), t.arc(n, r, i, 0, 2 * Math.PI, !1), t.closePath();\n            }),\n            e\n          );\n        })(r.a);\n      function s(t, e, n, r) {\n        return t / (n * n) + e / (r * r);\n      }\n      var c = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x: 0,\n                y: 0,\n                rx: 0,\n                ry: 0,\n              });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr(),\n                a = i / 2,\n                c = o.x,\n                u = o.y,\n                h = o.rx,\n                l = o.ry,\n                f = (t - c) * (t - c),\n                d = (e - u) * (e - u);\n              return r && n\n                ? s(f, d, h + a, l + a) <= 1\n                : r\n                ? s(f, d, h, l) <= 1\n                : !!n &&\n                  s(f, d, h - a, l - a) >= 1 &&\n                  s(f, d, h + a, l + a) <= 1;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.rx,\n                o = e.ry;\n              if ((t.beginPath(), t.ellipse))\n                t.ellipse(n, r, i, o, 0, 0, 2 * Math.PI, !1);\n              else {\n                var a = i > o ? i : o,\n                  s = i > o ? 1 : i / o,\n                  c = i > o ? o / i : 1;\n                t.save(),\n                  t.translate(n, r),\n                  t.scale(s, c),\n                  t.arc(0, 0, a, 0, 2 * Math.PI),\n                  t.restore(),\n                  t.closePath();\n              }\n            }),\n            e\n          );\n        })(r.a),\n        u = n(89),\n        h = n(9);\n      function l(t, e, n, r, i, o, a) {\n        var s = Math.min(t, n),\n          c = Math.max(t, n),\n          u = Math.min(e, r),\n          l = Math.max(e, r),\n          f = i / 2;\n        return (\n          o >= s - f &&\n          o <= c + f &&\n          a >= u - f &&\n          a <= l + f &&\n          h.c.pointToLine(t, e, n, r, o, a) <= i / 2\n        );\n      }\n      var f = n(23),\n        d = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x1: 0,\n                y1: 0,\n                x2: 0,\n                y2: 0,\n                startArrow: !1,\n                endArrow: !1,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this.setArrow();\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r), this.setArrow();\n            }),\n            (e.prototype.setArrow = function () {\n              var t = this.attr(),\n                e = t.x1,\n                n = t.y1,\n                r = t.x2,\n                i = t.y2,\n                o = t.startArrow,\n                a = t.endArrow;\n              o && f.b(this, t, r, i, e, n), a && f.a(this, t, e, n, r, i);\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              if (!n || !i) return !1;\n              var o = this.attr();\n              return l(o.x1, o.y1, o.x2, o.y2, i, t, e);\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x1,\n                r = e.y1,\n                i = e.x2,\n                o = e.y2,\n                a = e.startArrow,\n                s = e.endArrow,\n                c = { dx: 0, dy: 0 },\n                u = { dx: 0, dy: 0 };\n              a && a.d && (c = f.c(n, r, i, o, e.startArrow.d)),\n                s && s.d && (u = f.c(n, r, i, o, e.endArrow.d)),\n                t.beginPath(),\n                t.moveTo(n + c.dx, r + c.dy),\n                t.lineTo(i - u.dx, o - u.dy);\n            }),\n            (e.prototype.afterDrawPath = function (t) {\n              var e = this.get(\"startArrowShape\"),\n                n = this.get(\"endArrowShape\");\n              e && e.draw(t), n && n.draw(t);\n            }),\n            (e.prototype.getTotalLength = function () {\n              var t = this.attr(),\n                e = t.x1,\n                n = t.y1,\n                r = t.x2,\n                i = t.y2;\n              return h.c.length(e, n, r, i);\n            }),\n            (e.prototype.getPoint = function (t) {\n              var e = this.attr(),\n                n = e.x1,\n                r = e.y1,\n                i = e.x2,\n                o = e.y2;\n              return h.c.pointAt(n, r, i, o, t);\n            }),\n            e\n          );\n        })(r.a),\n        p = n(0),\n        g = n(28),\n        v = n(12),\n        y = {\n          circle: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"A\", n, n, 0, 1, 0, t + n, e],\n              [\"A\", n, n, 0, 1, 0, t - n, e],\n            ];\n          },\n          square: function (t, e, n) {\n            return [\n              [\"M\", t - n, e - n],\n              [\"L\", t + n, e - n],\n              [\"L\", t + n, e + n],\n              [\"L\", t - n, e + n],\n              [\"Z\"],\n            ];\n          },\n          diamond: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"L\", t, e - n],\n              [\"L\", t + n, e],\n              [\"L\", t, e + n],\n              [\"Z\"],\n            ];\n          },\n          triangle: function (t, e, n) {\n            var r = n * Math.sin((1 / 3) * Math.PI);\n            return [\n              [\"M\", t - n, e + r],\n              [\"L\", t, e - r],\n              [\"L\", t + n, e + r],\n              [\"Z\"],\n            ];\n          },\n          \"triangle-down\": function (t, e, n) {\n            var r = n * Math.sin((1 / 3) * Math.PI);\n            return [\n              [\"M\", t - n, e - r],\n              [\"L\", t + n, e - r],\n              [\"L\", t, e + r],\n              [\"Z\"],\n            ];\n          },\n        },\n        m = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.initAttrs = function (t) {\n              this._resetParamsCache();\n            }),\n            (e.prototype._resetParamsCache = function () {\n              this.set(\"paramsCache\", {});\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                -1 !== [\"symbol\", \"x\", \"y\", \"r\", \"radius\"].indexOf(e) &&\n                  this._resetParamsCache();\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype._getR = function (t) {\n              return Object(p.isNil)(t.r) ? t.radius : t.r;\n            }),\n            (e.prototype._getPath = function () {\n              var t,\n                n,\n                r = this.attr(),\n                i = r.x,\n                a = r.y,\n                s = r.symbol || \"circle\",\n                c = this._getR(r);\n              if (Object(o.g)(s)) (n = (t = s)(i, a, c)), (n = Object(g.c)(n));\n              else {\n                if (!(t = e.Symbols[s]))\n                  return console.warn(s + \" marker is not supported.\"), null;\n                n = t(i, a, c);\n              }\n              return n;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this._getPath(),\n                n = this.get(\"paramsCache\");\n              Object(v.e)(this, t, { path: e }, n);\n            }),\n            (e.Symbols = y),\n            e\n          );\n        })(r.a);\n      function b(t) {\n        return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n      }\n      function x(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      function S(t, e, n) {\n        var r = !1,\n          i = t.length;\n        if (i <= 2) return !1;\n        for (var o = 0; o < i; o++) {\n          var a = t[o],\n            s = t[(o + 1) % i];\n          if (x(a, s, [e, n])) return !0;\n          b(a[1] - n) > 0 != b(s[1] - n) > 0 &&\n            b(e - ((n - a[1]) * (a[0] - s[0])) / (a[1] - s[1]) - a[0]) < 0 &&\n            (r = !r);\n        }\n        return r;\n      }\n      var w = n(8),\n        O = n(4),\n        M = n(85);\n      function k(t, e, n, r, i, a, s, c) {\n        var u = (Math.atan2(c - e, s - t) + 2 * Math.PI) % (2 * Math.PI);\n        if (u < r || u > i) return !1;\n        var h = { x: t + n * Math.cos(u), y: e + n * Math.sin(u) };\n        return Object(o.a)(h.x, h.y, s, c) <= a / 2;\n      }\n      var j = O.a.transform;\n      var C = Object(i.a)(\n        {\n          hasArc: function (t) {\n            for (var e = !1, n = t.length, r = 0; r < n; r++) {\n              var i = t[r][0];\n              if (\"C\" === i || \"A\" === i || \"Q\" === i) {\n                e = !0;\n                break;\n              }\n            }\n            return e;\n          },\n          extractPolygons: function (t) {\n            for (var e = t.length, n = [], r = [], i = [], o = 0; o < e; o++) {\n              var a = t[o],\n                s = a[0];\n              \"M\" === s\n                ? (i.length && (r.push(i), (i = [])), i.push([a[1], a[2]]))\n                : \"Z\" === s\n                ? i.length && (n.push(i), (i = []))\n                : i.push([a[1], a[2]]);\n            }\n            return i.length > 0 && r.push(i), { polygons: n, polylines: r };\n          },\n          isPointInStroke: function (t, e, n, r, i) {\n            for (var a = !1, s = e / 2, c = 0; c < t.length; c++) {\n              var u = t[c],\n                f = u.currentPoint,\n                d = u.params,\n                p = u.prePoint,\n                g = u.box;\n              if (\n                !g ||\n                Object(o.d)(g.x - s, g.y - s, g.width + e, g.height + e, n, r)\n              ) {\n                switch (u.command) {\n                  case \"L\":\n                  case \"Z\":\n                    a = l(p[0], p[1], f[0], f[1], e, n, r);\n                    break;\n                  case \"Q\":\n                    a =\n                      h.e.pointDistance(\n                        p[0],\n                        p[1],\n                        d[1],\n                        d[2],\n                        d[3],\n                        d[4],\n                        n,\n                        r,\n                      ) <=\n                      e / 2;\n                    break;\n                  case \"C\":\n                    a =\n                      h.b.pointDistance(\n                        p[0],\n                        p[1],\n                        d[1],\n                        d[2],\n                        d[3],\n                        d[4],\n                        d[5],\n                        d[6],\n                        n,\n                        r,\n                        i,\n                      ) <=\n                      e / 2;\n                    break;\n                  case \"A\":\n                    var v = u.arcParams,\n                      y = v.cx,\n                      m = v.cy,\n                      b = v.rx,\n                      x = v.ry,\n                      S = v.startAngle,\n                      w = v.endAngle,\n                      O = v.xRotation,\n                      C = [n, r, 1],\n                      E = b > x ? b : x,\n                      P = j(null, [\n                        [\"t\", -y, -m],\n                        [\"r\", -O],\n                        [\"s\", 1 / (b > x ? 1 : b / x), 1 / (b > x ? x / b : 1)],\n                      ]);\n                    M.transformMat3(C, C, P),\n                      (a = k(0, 0, E, S, w, e, C[0], C[1]));\n                }\n                if (a) break;\n              }\n            }\n            return a;\n          },\n        },\n        w.PathUtil,\n      );\n      function E(t, e, n) {\n        for (var r = !1, i = 0; i < t.length; i++) {\n          if ((r = S(t[i], e, n))) break;\n        }\n        return r;\n      }\n      var P = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(i.c)(e, t),\n          (e.prototype.getDefaultAttrs = function () {\n            var e = t.prototype.getDefaultAttrs.call(this);\n            return Object(i.a)(Object(i.a)({}, e), {\n              startArrow: !1,\n              endArrow: !1,\n            });\n          }),\n          (e.prototype.initAttrs = function (t) {\n            this._setPathArr(t.path), this.setArrow();\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            t.prototype.onAttrChange.call(this, e, n, r),\n              \"path\" === e && this._setPathArr(n),\n              this.setArrow();\n          }),\n          (e.prototype._setPathArr = function (t) {\n            this.attrs.path = Object(g.c)(t);\n            var e = C.hasArc(t);\n            this.set(\"hasArc\", e),\n              this.set(\"paramsCache\", {}),\n              this.set(\"segments\", null),\n              this.set(\"curve\", null),\n              this.set(\"tCache\", null),\n              this.set(\"totalLength\", null);\n          }),\n          (e.prototype.getSegments = function () {\n            var t = this.get(\"segements\");\n            return (\n              t ||\n                ((t = Object(g.d)(this.attr(\"path\"))), this.set(\"segments\", t)),\n              t\n            );\n          }),\n          (e.prototype.setArrow = function () {\n            var t = this.attr(),\n              e = t.startArrow,\n              n = t.endArrow;\n            if (e) {\n              var r = this.getStartTangent();\n              f.b(this, t, r[0][0], r[0][1], r[1][0], r[1][1]);\n            }\n            if (n) {\n              r = this.getEndTangent();\n              f.a(this, t, r[0][0], r[0][1], r[1][0], r[1][1]);\n            }\n          }),\n          (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n            var o = this.getSegments(),\n              a = (this.get(\"hasArc\"), !1);\n            if (n) {\n              var s = this.getTotalLength();\n              a = C.isPointInStroke(o, i, t, e, s);\n            }\n            if (!a && r) {\n              var c = this.attr(\"path\"),\n                u = C.extractPolygons(c);\n              a = E(u.polygons, t, e) || E(u.polylines, t, e);\n            }\n            return a;\n          }),\n          (e.prototype.createPath = function (t) {\n            var e = this.attr(),\n              n = this.get(\"paramsCache\");\n            Object(v.e)(this, t, e, n);\n          }),\n          (e.prototype.afterDrawPath = function (t) {\n            var e = this.get(\"startArrowShape\"),\n              n = this.get(\"endArrowShape\");\n            e && e.draw(t), n && n.draw(t);\n          }),\n          (e.prototype.getTotalLength = function () {\n            var t = this.get(\"totalLength\");\n            return Object(p.isNil)(t)\n              ? (this._calculateCurve(),\n                this._setTcache(),\n                this.get(\"totalLength\"))\n              : t;\n          }),\n          (e.prototype.getPoint = function (t) {\n            var e,\n              n,\n              r = this.get(\"tCache\");\n            r ||\n              (this._calculateCurve(),\n              this._setTcache(),\n              (r = this.get(\"tCache\")));\n            var i = this.get(\"curve\");\n            if (!r || 0 === r.length)\n              return i ? { x: i[0][1], y: i[0][2] } : null;\n            Object(p.each)(r, function (r, i) {\n              t >= r[0] &&\n                t <= r[1] &&\n                ((e = (t - r[0]) / (r[1] - r[0])), (n = i));\n            });\n            var o = i[n];\n            if (Object(p.isNil)(o) || Object(p.isNil)(n)) return null;\n            var a = o.length,\n              s = i[n + 1];\n            return h.b.pointAt(\n              o[a - 2],\n              o[a - 1],\n              s[1],\n              s[2],\n              s[3],\n              s[4],\n              s[5],\n              s[6],\n              e,\n            );\n          }),\n          (e.prototype._calculateCurve = function () {\n            var t = this.attr().path;\n            this.set(\"curve\", C.pathToCurve(t));\n          }),\n          (e.prototype._setTcache = function () {\n            var t,\n              e,\n              n,\n              r,\n              i = 0,\n              o = 0,\n              a = [],\n              s = this.get(\"curve\");\n            s &&\n              (Object(p.each)(s, function (t, e) {\n                (n = s[e + 1]),\n                  (r = t.length),\n                  n &&\n                    (i +=\n                      h.b.length(\n                        t[r - 2],\n                        t[r - 1],\n                        n[1],\n                        n[2],\n                        n[3],\n                        n[4],\n                        n[5],\n                        n[6],\n                      ) || 0);\n              }),\n              this.set(\"totalLength\", i),\n              0 !== i\n                ? (Object(p.each)(s, function (c, u) {\n                    (n = s[u + 1]),\n                      (r = c.length),\n                      n &&\n                        (((t = [])[0] = o / i),\n                        (e = h.b.length(\n                          c[r - 2],\n                          c[r - 1],\n                          n[1],\n                          n[2],\n                          n[3],\n                          n[4],\n                          n[5],\n                          n[6],\n                        )),\n                        (o += e || 0),\n                        (t[1] = o / i),\n                        a.push(t));\n                  }),\n                  this.set(\"tCache\", a))\n                : this.set(\"tCache\", []));\n          }),\n          (e.prototype.getStartTangent = function () {\n            var t,\n              e = this.getSegments();\n            if (e.length > 1) {\n              var n = e[0].currentPoint,\n                r = e[1].currentPoint,\n                i = e[1].startTangent;\n              (t = []),\n                i\n                  ? (t.push([n[0] - i[0], n[1] - i[1]]), t.push([n[0], n[1]]))\n                  : (t.push([r[0], r[1]]), t.push([n[0], n[1]]));\n            }\n            return t;\n          }),\n          (e.prototype.getEndTangent = function () {\n            var t,\n              e = this.getSegments(),\n              n = e.length;\n            if (n > 1) {\n              var r = e[n - 2].currentPoint,\n                i = e[n - 1].currentPoint,\n                o = e[n - 1].endTangent;\n              (t = []),\n                o\n                  ? (t.push([i[0] - o[0], i[1] - o[1]]), t.push([i[0], i[1]]))\n                  : (t.push([r[0], r[1]]), t.push([i[0], i[1]]));\n            }\n            return t;\n          }),\n          e\n        );\n      })(r.a);\n      function A(t, e, n, r, i) {\n        var o = t.length;\n        if (o < 2) return !1;\n        for (var a = 0; a < o - 1; a++) {\n          if (l(t[a][0], t[a][1], t[a + 1][0], t[a + 1][1], e, n, r)) return !0;\n        }\n        if (i) {\n          var s = t[0],\n            c = t[o - 1];\n          if (l(s[0], s[1], c[0], c[1], e, n, r)) return !0;\n        }\n        return !1;\n      }\n      var I = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr().points,\n                a = !1;\n              return (\n                n && (a = A(o, i, t, e, !0)), !a && r && (a = S(o, t, e)), a\n              );\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr().points;\n              if (!(e.length < 2)) {\n                t.beginPath();\n                for (var n = 0; n < e.length; n++) {\n                  var r = e[n];\n                  0 === n ? t.moveTo(r[0], r[1]) : t.lineTo(r[0], r[1]);\n                }\n                t.closePath();\n              }\n            }),\n            e\n          );\n        })(r.a),\n        T = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                startArrow: !1,\n                endArrow: !1,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this.setArrow();\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                this.setArrow(),\n                -1 !== [\"points\"].indexOf(e) && this._resetCache();\n            }),\n            (e.prototype._resetCache = function () {\n              this.set(\"totalLength\", null), this.set(\"tCache\", null);\n            }),\n            (e.prototype.setArrow = function () {\n              var t = this.attr(),\n                e = this.attrs,\n                n = e.points,\n                r = e.startArrow,\n                i = e.endArrow,\n                o = n.length,\n                a = n[0][0],\n                s = n[0][1],\n                c = n[o - 1][0],\n                u = n[o - 1][1];\n              r && f.b(this, t, n[1][0], n[1][1], a, s),\n                i && f.a(this, t, n[o - 2][0], n[o - 2][1], c, u);\n            }),\n            (e.prototype.isFill = function () {\n              return !1;\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              return !(!n || !i) && A(this.attr().points, i, t, e, !1);\n            }),\n            (e.prototype.isStroke = function () {\n              return !0;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.points,\n                r = e.startArrow,\n                i = e.endArrow,\n                o = n.length;\n              if (!(n.length < 2)) {\n                var a,\n                  s = n[0][0],\n                  c = n[0][1],\n                  u = n[o - 1][0],\n                  h = n[o - 1][1];\n                if (r && r.d)\n                  (s += (a = f.c(s, c, n[1][0], n[1][1], r.d)).dx), (c += a.dy);\n                if (i && i.d)\n                  (u -= (a = f.c(n[o - 2][0], n[o - 2][1], u, h, i.d)).dx),\n                    (h -= a.dy);\n                t.beginPath(), t.moveTo(s, c);\n                for (var l = 0; l < o - 1; l++) {\n                  var d = n[l];\n                  t.lineTo(d[0], d[1]);\n                }\n                t.lineTo(u, h);\n              }\n            }),\n            (e.prototype.afterDrawPath = function (t) {\n              var e = this.get(\"startArrowShape\"),\n                n = this.get(\"endArrowShape\");\n              e && e.draw(t), n && n.draw(t);\n            }),\n            (e.prototype.getTotalLength = function () {\n              var t = this.attr().points,\n                e = this.get(\"totalLength\");\n              return Object(p.isNil)(e)\n                ? (this.set(\"totalLength\", h.d.length(t)),\n                  this.get(\"totalLength\"))\n                : e;\n            }),\n            (e.prototype.getPoint = function (t) {\n              var e,\n                n,\n                r = this.attr().points,\n                i = this.get(\"tCache\");\n              return (\n                i || (this._setTcache(), (i = this.get(\"tCache\"))),\n                Object(p.each)(i, function (r, i) {\n                  t >= r[0] &&\n                    t <= r[1] &&\n                    ((e = (t - r[0]) / (r[1] - r[0])), (n = i));\n                }),\n                h.c.pointAt(r[n][0], r[n][1], r[n + 1][0], r[n + 1][1], e)\n              );\n            }),\n            (e.prototype._setTcache = function () {\n              var t = this.attr().points;\n              if (t && 0 !== t.length) {\n                var e = this.getTotalLength();\n                if (!(e <= 0)) {\n                  var n,\n                    r,\n                    i = 0,\n                    o = [];\n                  Object(p.each)(t, function (a, s) {\n                    t[s + 1] &&\n                      (((n = [])[0] = i / e),\n                      (r = h.c.length(a[0], a[1], t[s + 1][0], t[s + 1][1])),\n                      (i += r),\n                      (n[1] = i / e),\n                      o.push(n));\n                  }),\n                    this.set(\"tCache\", o);\n                }\n              }\n            }),\n            (e.prototype.getStartTangent = function () {\n              var t = this.attr().points,\n                e = [];\n              return e.push([t[1][0], t[1][1]]), e.push([t[0][0], t[0][1]]), e;\n            }),\n            (e.prototype.getEndTangent = function () {\n              var t = this.attr().points,\n                e = t.length - 1,\n                n = [];\n              return (\n                n.push([t[e - 1][0], t[e - 1][1]]),\n                n.push([t[e][0], t[e][1]]),\n                n\n              );\n            }),\n            e\n          );\n        })(r.a),\n        N = n(94);\n      var B = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0,\n                radius: 0,\n              });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var a = this.attr(),\n                s = a.x,\n                c = a.y,\n                u = a.width,\n                h = a.height,\n                f = a.radius;\n              if (f) {\n                var d = !1;\n                return (\n                  n &&\n                    (d = (function (t, e, n, r, i, o, a, s) {\n                      return (\n                        l(t + i, e, t + n - i, e, o, a, s) ||\n                        l(t + n, e + i, t + n, e + r - i, o, a, s) ||\n                        l(t + n - i, e + r, t + i, e + r, o, a, s) ||\n                        l(t, e + r - i, t, e + i, o, a, s) ||\n                        k(\n                          t + n - i,\n                          e + i,\n                          i,\n                          1.5 * Math.PI,\n                          2 * Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        k(t + n - i, e + r - i, i, 0, 0.5 * Math.PI, o, a, s) ||\n                        k(\n                          t + i,\n                          e + r - i,\n                          i,\n                          0.5 * Math.PI,\n                          Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        k(t + i, e + i, i, Math.PI, 1.5 * Math.PI, o, a, s)\n                      );\n                    })(s, c, u, h, f, i, t, e)),\n                  !d && r && (d = Object(o.d)(s, c, u, h, t, e)),\n                  d\n                );\n              }\n              var p = i / 2;\n              return r && n\n                ? Object(o.d)(s - p, c - p, u + p, h + p, t, e)\n                : r\n                ? Object(o.d)(s, c, u, h, t, e)\n                : n\n                ? (function (t, e, n, r, i, a, s) {\n                    var c = i / 2;\n                    return (\n                      Object(o.d)(t - c, e - c, n, i, a, s) ||\n                      Object(o.d)(t + n - c, e - c, i, r, a, s) ||\n                      Object(o.d)(t + c, e + r - c, n, i, a, s) ||\n                      Object(o.d)(t - c, e + c, i, r, a, s)\n                    );\n                  })(s, c, u, h, i, t, e)\n                : void 0;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.width,\n                o = e.height,\n                a = e.radius;\n              if ((t.beginPath(), 0 === a)) t.rect(n, r, i, o);\n              else {\n                var s = Object(N.a)(a),\n                  c = s[0],\n                  u = s[1],\n                  h = s[2],\n                  l = s[3];\n                t.moveTo(n + c, r),\n                  t.lineTo(n + i - u, r),\n                  0 !== u && t.arc(n + i - u, r + u, u, -Math.PI / 2, 0),\n                  t.lineTo(n + i, r + o - h),\n                  0 !== h && t.arc(n + i - h, r + o - h, h, 0, Math.PI / 2),\n                  t.lineTo(n + l, r + o),\n                  0 !== l && t.arc(n + l, r + o - l, l, Math.PI / 2, Math.PI),\n                  t.lineTo(n, r + c),\n                  0 !== c && t.arc(n + c, r + c, c, Math.PI, 1.5 * Math.PI),\n                  t.closePath();\n              }\n            }),\n            e\n          );\n        })(r.a),\n        L = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\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              });\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this._assembleFont(), t.text && this._setText(t.text);\n            }),\n            (e.prototype._assembleFont = function () {\n              var t = this.attrs;\n              t.font = Object(w.assembleFont)(t);\n            }),\n            (e.prototype._setText = function (t) {\n              var e = null;\n              Object(o.k)(t) && -1 !== t.indexOf(\"\\n\") && (e = t.split(\"\\n\")),\n                this.set(\"textArr\", e);\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                e.startsWith(\"font\") && this._assembleFont(),\n                \"text\" === e && this._setText(n);\n            }),\n            (e.prototype._getSpaceingY = function () {\n              var t = this.attrs,\n                e = t.lineHeight,\n                n = 1 * t.fontSize;\n              return e ? e - n : 0.14 * n;\n            }),\n            (e.prototype._drawTextArr = function (t, e, n) {\n              var r,\n                i = this.attrs,\n                a = i.textBaseline,\n                s = i.x,\n                c = i.y,\n                u = 1 * i.fontSize,\n                h = this._getSpaceingY(),\n                l = Object(w.getTextHeight)(i.text, i.fontSize, i.lineHeight);\n              Object(o.b)(e, function (e, i) {\n                (r = c + i * (h + u) - l + u),\n                  \"middle\" === a && (r += l - u - (l - u) / 2),\n                  \"top\" === a && (r += l - u),\n                  n ? t.fillText(e, s, r) : t.strokeText(e, s, r);\n              });\n            }),\n            (e.prototype._drawText = function (t, e) {\n              var n = this.attr(),\n                r = n.x,\n                i = n.y,\n                o = this.get(\"textArr\");\n              if (o) this._drawTextArr(t, o, e);\n              else {\n                var a = n.text;\n                e ? t.fillText(a, r, i) : t.strokeText(a, r, i);\n              }\n            }),\n            (e.prototype.strokeAndFill = function (t) {\n              var e = this.attrs,\n                n = e.lineWidth,\n                r = e.opacity,\n                i = e.strokeOpacity,\n                a = e.fillOpacity;\n              this.isStroke() &&\n                n > 0 &&\n                (Object(o.h)(i) || 1 === i || (t.globalAlpha = r),\n                this.stroke(t)),\n                this.isFill() &&\n                  (Object(o.h)(a) || 1 === a\n                    ? this.fill(t)\n                    : ((t.globalAlpha = a), this.fill(t), (t.globalAlpha = r))),\n                this.afterDrawPath(t);\n            }),\n            (e.prototype.fill = function (t) {\n              this._drawText(t, !0);\n            }),\n            (e.prototype.stroke = function (t) {\n              this._drawText(t, !1);\n            }),\n            e\n          );\n        })(r.a);\n    },\n    33: function (t, e, n) {\n      \"use strict\";\n      var r = n(99);\n      n.d(e, \"a\", function () {\n        return r.Layout;\n      }),\n        n.d(e, \"b\", function () {\n          return r.Layouts;\n        });\n      var i = n(62);\n      n.d(e, \"c\", function () {\n        return i.registerLayout;\n      }),\n        n.d(e, \"d\", function () {\n          return i.unRegisterLayout;\n        });\n      var o = n(64);\n      Object(i.registerLayout)(\"random\", o.RandomLayout);\n    },\n    34: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"catmullRomToBezier\", function () {\n          return c;\n        }),\n        n.d(e, \"fillPath\", function () {\n          return A;\n        }),\n        n.d(e, \"fillPathByDiff\", function () {\n          return N;\n        }),\n        n.d(e, \"formatPath\", function () {\n          return D;\n        }),\n        n.d(e, \"intersection\", function () {\n          return C;\n        }),\n        n.d(e, \"parsePathArray\", function () {\n          return v;\n        }),\n        n.d(e, \"parsePathString\", function () {\n          return s;\n        }),\n        n.d(e, \"pathToAbsolute\", function () {\n          return h;\n        }),\n        n.d(e, \"pathToCurve\", function () {\n          return p;\n        }),\n        n.d(e, \"rectPath\", function () {\n          return w;\n        });\n      var r = n(0),\n        i = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        o = new RegExp(\n          \"([a-z])[\" +\n            i +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            i +\n            \"]*,?[\" +\n            i +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        a = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + i + \"]*,?[\" + i + \"]*\",\n          \"ig\",\n        ),\n        s = function (t) {\n          if (!t) return null;\n          if (Object(r.isArray)(t)) return t;\n          var e = {\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            n = [];\n          return (\n            String(t).replace(o, function (r, i, o) {\n              var s = [],\n                c = i.toLowerCase();\n              if (\n                (o.replace(a, function (t, e) {\n                  e && s.push(+e);\n                }),\n                \"m\" === c &&\n                  s.length > 2 &&\n                  (n.push([i].concat(s.splice(0, 2))),\n                  (c = \"l\"),\n                  (i = \"m\" === i ? \"l\" : \"L\")),\n                \"o\" === c && 1 === s.length && n.push([i, s[0]]),\n                \"r\" === c)\n              )\n                n.push([i].concat(s));\n              else\n                for (\n                  ;\n                  s.length >= e[c] &&\n                  (n.push([i].concat(s.splice(0, e[c]))), e[c]);\n\n                );\n              return t;\n            }),\n            n\n          );\n        },\n        c = function (t, e) {\n          for (var n = [], r = 0, i = t.length; i - 2 * !e > r; r += 2) {\n            var o = [\n              { x: +t[r - 2], y: +t[r - 1] },\n              { x: +t[r], y: +t[r + 1] },\n              { x: +t[r + 2], y: +t[r + 3] },\n              { x: +t[r + 4], y: +t[r + 5] },\n            ];\n            e\n              ? r\n                ? i - 4 === r\n                  ? (o[3] = { x: +t[0], y: +t[1] })\n                  : i - 2 === r &&\n                    ((o[2] = { x: +t[0], y: +t[1] }),\n                    (o[3] = { x: +t[2], y: +t[3] }))\n                : (o[0] = { x: +t[i - 2], y: +t[i - 1] })\n              : i - 4 === r\n              ? (o[3] = o[2])\n              : r || (o[0] = { x: +t[r], y: +t[r + 1] }),\n              n.push([\n                \"C\",\n                (-o[0].x + 6 * o[1].x + o[2].x) / 6,\n                (-o[0].y + 6 * o[1].y + o[2].y) / 6,\n                (o[1].x + 6 * o[2].x - o[3].x) / 6,\n                (o[1].y + 6 * o[2].y - o[3].y) / 6,\n                o[2].x,\n                o[2].y,\n              ]);\n          }\n          return n;\n        },\n        u = function (t, e, n, r, i) {\n          var o = [];\n          if (\n            (null === i && null === r && (r = n),\n            (t = +t),\n            (e = +e),\n            (n = +n),\n            (r = +r),\n            null !== i)\n          ) {\n            var a = Math.PI / 180,\n              s = t + n * Math.cos(-r * a),\n              c = t + n * Math.cos(-i * a);\n            o = [\n              [\"M\", s, e + n * Math.sin(-r * a)],\n              [\"A\", n, n, 0, +(i - r > 180), 0, c, e + n * Math.sin(-i * a)],\n            ];\n          } else\n            o = [\n              [\"M\", t, e],\n              [\"m\", 0, -r],\n              [\"a\", n, r, 0, 1, 1, 0, 2 * r],\n              [\"a\", n, r, 0, 1, 1, 0, -2 * r],\n              [\"z\"],\n            ];\n          return o;\n        },\n        h = function (t) {\n          if (!(t = s(t)) || !t.length) return [[\"M\", 0, 0]];\n          var e,\n            n,\n            r = [],\n            i = 0,\n            o = 0,\n            a = 0,\n            h = 0,\n            l = 0;\n          \"M\" === t[0][0] &&\n            ((a = i = +t[0][1]), (h = o = +t[0][2]), l++, (r[0] = [\"M\", i, o]));\n          for (\n            var f =\n                3 === t.length &&\n                \"M\" === t[0][0] &&\n                \"R\" === t[1][0].toUpperCase() &&\n                \"Z\" === t[2][0].toUpperCase(),\n              d = void 0,\n              p = void 0,\n              g = l,\n              v = t.length;\n            g < v;\n            g++\n          ) {\n            if ((r.push((d = [])), (e = (p = t[g])[0]) !== e.toUpperCase()))\n              switch (((d[0] = e.toUpperCase()), d[0])) {\n                case \"A\":\n                  (d[1] = p[1]),\n                    (d[2] = p[2]),\n                    (d[3] = p[3]),\n                    (d[4] = p[4]),\n                    (d[5] = p[5]),\n                    (d[6] = +p[6] + i),\n                    (d[7] = +p[7] + o);\n                  break;\n                case \"V\":\n                  d[1] = +p[1] + o;\n                  break;\n                case \"H\":\n                  d[1] = +p[1] + i;\n                  break;\n                case \"R\":\n                  for (\n                    var y = 2, m = (n = [i, o].concat(p.slice(1))).length;\n                    y < m;\n                    y++\n                  )\n                    (n[y] = +n[y] + i), (n[++y] = +n[y] + o);\n                  r.pop(), (r = r.concat(c(n, f)));\n                  break;\n                case \"O\":\n                  r.pop(),\n                    (n = u(i, o, p[1], p[2])).push(n[0]),\n                    (r = r.concat(n));\n                  break;\n                case \"U\":\n                  r.pop(),\n                    (r = r.concat(u(i, o, p[1], p[2], p[3]))),\n                    (d = [\"U\"].concat(r[r.length - 1].slice(-2)));\n                  break;\n                case \"M\":\n                  (a = +p[1] + i), (h = +p[2] + o);\n                  break;\n                default:\n                  for (y = 1, m = p.length; y < m; y++)\n                    d[y] = +p[y] + (y % 2 ? i : o);\n              }\n            else if (\"R\" === e)\n              (n = [i, o].concat(p.slice(1))),\n                r.pop(),\n                (r = r.concat(c(n, f))),\n                (d = [\"R\"].concat(p.slice(-2)));\n            else if (\"O\" === e)\n              r.pop(), (n = u(i, o, p[1], p[2])).push(n[0]), (r = r.concat(n));\n            else if (\"U\" === e)\n              r.pop(),\n                (r = r.concat(u(i, o, p[1], p[2], p[3]))),\n                (d = [\"U\"].concat(r[r.length - 1].slice(-2)));\n            else for (var b = 0, x = p.length; b < x; b++) d[b] = p[b];\n            if (\"O\" !== (e = e.toUpperCase()))\n              switch (d[0]) {\n                case \"Z\":\n                  (i = +a), (o = +h);\n                  break;\n                case \"H\":\n                  i = d[1];\n                  break;\n                case \"V\":\n                  o = d[1];\n                  break;\n                case \"M\":\n                  (a = d[d.length - 2]), (h = d[d.length - 1]);\n                  break;\n                default:\n                  (i = d[d.length - 2]), (o = d[d.length - 1]);\n              }\n          }\n          return r;\n        },\n        l = function (t, e, n, r) {\n          return [t, e, n, r, n, r];\n        },\n        f = function (t, e, n, r, i, o) {\n          return [\n            (1 / 3) * t + (2 / 3) * n,\n            (1 / 3) * e + (2 / 3) * r,\n            (1 / 3) * i + (2 / 3) * n,\n            (1 / 3) * o + (2 / 3) * r,\n            i,\n            o,\n          ];\n        },\n        d = function t(e, n, r, i, o, a, s, c, u, h) {\n          r === i && (r += 1);\n          var l,\n            f,\n            d,\n            p,\n            g,\n            v = (120 * Math.PI) / 180,\n            y = (Math.PI / 180) * (+o || 0),\n            m = [],\n            b = function (t, e, n) {\n              return {\n                x: t * Math.cos(n) - e * Math.sin(n),\n                y: t * Math.sin(n) + e * Math.cos(n),\n              };\n            };\n          if (h) (f = h[0]), (d = h[1]), (p = h[2]), (g = h[3]);\n          else {\n            (e = (l = b(e, n, -y)).x),\n              (n = l.y),\n              (c = (l = b(c, u, -y)).x),\n              (u = l.y),\n              e === c && n === u && ((c += 1), (u += 1));\n            var x = (e - c) / 2,\n              S = (n - u) / 2,\n              w = (x * x) / (r * r) + (S * S) / (i * i);\n            w > 1 && ((r *= w = Math.sqrt(w)), (i *= w));\n            var O = r * r,\n              M = i * i,\n              k =\n                (a === s ? -1 : 1) *\n                Math.sqrt(\n                  Math.abs(\n                    (O * M - O * S * S - M * x * x) / (O * S * S + M * x * x),\n                  ),\n                );\n            (p = (k * r * S) / i + (e + c) / 2),\n              (g = (k * -i * x) / r + (n + u) / 2),\n              (f = Math.asin(((n - g) / i).toFixed(9))),\n              (d = Math.asin(((u - g) / i).toFixed(9))),\n              (f = e < p ? Math.PI - f : f),\n              (d = c < p ? Math.PI - d : d),\n              f < 0 && (f = 2 * Math.PI + f),\n              d < 0 && (d = 2 * Math.PI + d),\n              s && f > d && (f -= 2 * Math.PI),\n              !s && d > f && (d -= 2 * Math.PI);\n          }\n          var j = d - f;\n          if (Math.abs(j) > v) {\n            var C = d,\n              E = c,\n              P = u;\n            (d = f + v * (s && d > f ? 1 : -1)),\n              (m = t(\n                (c = p + r * Math.cos(d)),\n                (u = g + i * Math.sin(d)),\n                r,\n                i,\n                o,\n                0,\n                s,\n                E,\n                P,\n                [d, C, p, g],\n              ));\n          }\n          j = d - f;\n          var A = Math.cos(f),\n            I = Math.sin(f),\n            T = Math.cos(d),\n            N = Math.sin(d),\n            B = Math.tan(j / 4),\n            L = (4 / 3) * r * B,\n            D = (4 / 3) * i * B,\n            _ = [e, n],\n            R = [e + L * I, n - D * A],\n            F = [c + L * N, u - D * T],\n            Y = [c, u];\n          if (((R[0] = 2 * _[0] - R[0]), (R[1] = 2 * _[1] - R[1]), h))\n            return [R, F, Y].concat(m);\n          for (\n            var X = [],\n              z = 0,\n              W = (m = [R, F, Y].concat(m).join().split(\",\")).length;\n            z < W;\n            z++\n          )\n            X[z] = z % 2 ? b(m[z - 1], m[z], y).y : b(m[z], m[z + 1], y).x;\n          return X;\n        },\n        p = function (t, e) {\n          var n,\n            r = h(t),\n            i = e && h(e),\n            o = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n            a = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n            s = [],\n            c = [],\n            u = \"\",\n            p = \"\",\n            g = function (t, e, n) {\n              var r, i;\n              if (!t) return [\"C\", e.x, e.y, e.x, e.y, e.x, e.y];\n              switch (\n                (!(t[0] in { T: 1, Q: 1 }) && (e.qx = e.qy = null), t[0])\n              ) {\n                case \"M\":\n                  (e.X = t[1]), (e.Y = t[2]);\n                  break;\n                case \"A\":\n                  t = [\"C\"].concat(d.apply(0, [e.x, e.y].concat(t.slice(1))));\n                  break;\n                case \"S\":\n                  \"C\" === n || \"S\" === n\n                    ? ((r = 2 * e.x - e.bx), (i = 2 * e.y - e.by))\n                    : ((r = e.x), (i = e.y)),\n                    (t = [\"C\", r, i].concat(t.slice(1)));\n                  break;\n                case \"T\":\n                  \"Q\" === n || \"T\" === n\n                    ? ((e.qx = 2 * e.x - e.qx), (e.qy = 2 * e.y - e.qy))\n                    : ((e.qx = e.x), (e.qy = e.y)),\n                    (t = [\"C\"].concat(f(e.x, e.y, e.qx, e.qy, t[1], t[2])));\n                  break;\n                case \"Q\":\n                  (e.qx = t[1]),\n                    (e.qy = t[2]),\n                    (t = [\"C\"].concat(f(e.x, e.y, t[1], t[2], t[3], t[4])));\n                  break;\n                case \"L\":\n                  t = [\"C\"].concat(l(e.x, e.y, t[1], t[2]));\n                  break;\n                case \"H\":\n                  t = [\"C\"].concat(l(e.x, e.y, t[1], e.y));\n                  break;\n                case \"V\":\n                  t = [\"C\"].concat(l(e.x, e.y, e.x, t[1]));\n                  break;\n                case \"Z\":\n                  t = [\"C\"].concat(l(e.x, e.y, e.X, e.Y));\n              }\n              return t;\n            },\n            v = function (t, e) {\n              if (t[e].length > 7) {\n                t[e].shift();\n                for (var o = t[e]; o.length; )\n                  (s[e] = \"A\"),\n                    i && (c[e] = \"A\"),\n                    t.splice(e++, 0, [\"C\"].concat(o.splice(0, 6)));\n                t.splice(e, 1), (n = Math.max(r.length, (i && i.length) || 0));\n              }\n            },\n            y = function (t, e, o, a, s) {\n              t &&\n                e &&\n                \"M\" === t[s][0] &&\n                \"M\" !== e[s][0] &&\n                (e.splice(s, 0, [\"M\", a.x, a.y]),\n                (o.bx = 0),\n                (o.by = 0),\n                (o.x = t[s][1]),\n                (o.y = t[s][2]),\n                (n = Math.max(r.length, (i && i.length) || 0)));\n            };\n          n = Math.max(r.length, (i && i.length) || 0);\n          for (var m = 0; m < n; m++) {\n            r[m] && (u = r[m][0]),\n              \"C\" !== u && ((s[m] = u), m && (p = s[m - 1])),\n              (r[m] = g(r[m], o, p)),\n              \"A\" !== s[m] && \"C\" === u && (s[m] = \"C\"),\n              v(r, m),\n              i &&\n                (i[m] && (u = i[m][0]),\n                \"C\" !== u && ((c[m] = u), m && (p = c[m - 1])),\n                (i[m] = g(i[m], a, p)),\n                \"A\" !== c[m] && \"C\" === u && (c[m] = \"C\"),\n                v(i, m)),\n              y(r, i, o, a, m),\n              y(i, r, a, o, m);\n            var b = r[m],\n              x = i && i[m],\n              S = b.length,\n              w = i && x.length;\n            (o.x = b[S - 2]),\n              (o.y = b[S - 1]),\n              (o.bx = parseFloat(b[S - 4]) || o.x),\n              (o.by = parseFloat(b[S - 3]) || o.y),\n              (a.bx = i && (parseFloat(x[w - 4]) || a.x)),\n              (a.by = i && (parseFloat(x[w - 3]) || a.y)),\n              (a.x = i && x[w - 2]),\n              (a.y = i && x[w - 1]);\n          }\n          return i ? [r, i] : r;\n        },\n        g = /,?([a-z]),?/gi,\n        v = function (t) {\n          return t.join(\",\").replace(g, \"$1\");\n        },\n        y = function (t, e, n, r, i) {\n          return (\n            t *\n              (t * (-3 * e + 9 * n - 9 * r + 3 * i) + 6 * e - 12 * n + 6 * r) -\n            3 * e +\n            3 * n\n          );\n        },\n        m = function (t, e, n, r, i, o, a, s, c) {\n          null === c && (c = 1);\n          for (\n            var u = (c = c > 1 ? 1 : c < 0 ? 0 : c) / 2,\n              h = [\n                -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699,\n                0.7699, -0.9041, 0.9041, -0.9816, 0.9816,\n              ],\n              l = [\n                0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601,\n                0.1069, 0.1069, 0.0472, 0.0472,\n              ],\n              f = 0,\n              d = 0;\n            d < 12;\n            d++\n          ) {\n            var p = u * h[d] + u,\n              g = y(p, t, n, i, a),\n              v = y(p, e, r, o, s),\n              m = g * g + v * v;\n            f += l[d] * Math.sqrt(m);\n          }\n          return u * f;\n        },\n        b = function (t, e, n, r, i, o, a, s) {\n          for (var c, u, h, l, f = [], d = [[], []], p = 0; p < 2; ++p)\n            if (\n              (0 === p\n                ? ((u = 6 * t - 12 * n + 6 * i),\n                  (c = -3 * t + 9 * n - 9 * i + 3 * a),\n                  (h = 3 * n - 3 * t))\n                : ((u = 6 * e - 12 * r + 6 * o),\n                  (c = -3 * e + 9 * r - 9 * o + 3 * s),\n                  (h = 3 * r - 3 * e)),\n              Math.abs(c) < 1e-12)\n            ) {\n              if (Math.abs(u) < 1e-12) continue;\n              (l = -h / u) > 0 && l < 1 && f.push(l);\n            } else {\n              var g = u * u - 4 * h * c,\n                v = Math.sqrt(g);\n              if (!(g < 0)) {\n                var y = (-u + v) / (2 * c);\n                y > 0 && y < 1 && f.push(y);\n                var m = (-u - v) / (2 * c);\n                m > 0 && m < 1 && f.push(m);\n              }\n            }\n          for (var b, x = f.length, S = x; x--; )\n            (b = 1 - (l = f[x])),\n              (d[0][x] =\n                b * b * b * t +\n                3 * b * b * l * n +\n                3 * b * l * l * i +\n                l * l * l * a),\n              (d[1][x] =\n                b * b * b * e +\n                3 * b * b * l * r +\n                3 * b * l * l * o +\n                l * l * l * s);\n          return (\n            (d[0][S] = t),\n            (d[1][S] = e),\n            (d[0][S + 1] = a),\n            (d[1][S + 1] = s),\n            (d[0].length = d[1].length = S + 2),\n            {\n              min: { x: Math.min.apply(0, d[0]), y: Math.min.apply(0, d[1]) },\n              max: { x: Math.max.apply(0, d[0]), y: Math.max.apply(0, d[1]) },\n            }\n          );\n        },\n        x = function (t, e, n, r, i, o, a, s) {\n          if (\n            !(\n              Math.max(t, n) < Math.min(i, a) ||\n              Math.min(t, n) > Math.max(i, a) ||\n              Math.max(e, r) < Math.min(o, s) ||\n              Math.min(e, r) > Math.max(o, s)\n            )\n          ) {\n            var c = (t - n) * (o - s) - (e - r) * (i - a);\n            if (c) {\n              var u =\n                  ((t * r - e * n) * (i - a) - (t - n) * (i * s - o * a)) / c,\n                h = ((t * r - e * n) * (o - s) - (e - r) * (i * s - o * a)) / c,\n                l = +u.toFixed(2),\n                f = +h.toFixed(2);\n              if (\n                !(\n                  l < +Math.min(t, n).toFixed(2) ||\n                  l > +Math.max(t, n).toFixed(2) ||\n                  l < +Math.min(i, a).toFixed(2) ||\n                  l > +Math.max(i, a).toFixed(2) ||\n                  f < +Math.min(e, r).toFixed(2) ||\n                  f > +Math.max(e, r).toFixed(2) ||\n                  f < +Math.min(o, s).toFixed(2) ||\n                  f > +Math.max(o, s).toFixed(2)\n                )\n              )\n                return { x: u, y: h };\n            }\n          }\n        },\n        S = function (t, e, n) {\n          return (\n            e >= t.x && e <= t.x + t.width && n >= t.y && n <= t.y + t.height\n          );\n        },\n        w = function (t, e, n, r, i) {\n          if (i)\n            return [\n              [\"M\", +t + +i, e],\n              [\"l\", n - 2 * i, 0],\n              [\"a\", i, i, 0, 0, 1, i, i],\n              [\"l\", 0, r - 2 * i],\n              [\"a\", i, i, 0, 0, 1, -i, i],\n              [\"l\", 2 * i - n, 0],\n              [\"a\", i, i, 0, 0, 1, -i, -i],\n              [\"l\", 0, 2 * i - r],\n              [\"a\", i, i, 0, 0, 1, i, -i],\n              [\"z\"],\n            ];\n          var o = [[\"M\", t, e], [\"l\", n, 0], [\"l\", 0, r], [\"l\", -n, 0], [\"z\"]];\n          return (o.parsePathArray = v), o;\n        },\n        O = function (t, e, n, r) {\n          return (\n            null === t && (t = e = n = r = 0),\n            null === e && ((e = t.y), (n = t.width), (r = t.height), (t = t.x)),\n            {\n              x: t,\n              y: e,\n              width: n,\n              w: n,\n              height: r,\n              h: r,\n              x2: t + n,\n              y2: e + r,\n              cx: t + n / 2,\n              cy: e + r / 2,\n              r1: Math.min(n, r) / 2,\n              r2: Math.max(n, r) / 2,\n              r0: Math.sqrt(n * n + r * r) / 2,\n              path: w(t, e, n, r),\n              vb: [t, e, n, r].join(\" \"),\n            }\n          );\n        },\n        M = function (t, e, n, i, o, a, s, c) {\n          Object(r.isArray)(t) || (t = [t, e, n, i, o, a, s, c]);\n          var u = b.apply(null, t);\n          return O(u.min.x, u.min.y, u.max.x - u.min.x, u.max.y - u.min.y);\n        },\n        k = function (t, e, n, r, i, o, a, s, c) {\n          var u = 1 - c,\n            h = Math.pow(u, 3),\n            l = Math.pow(u, 2),\n            f = c * c,\n            d = f * c,\n            p = t + 2 * c * (n - t) + f * (i - 2 * n + t),\n            g = e + 2 * c * (r - e) + f * (o - 2 * r + e),\n            v = n + 2 * c * (i - n) + f * (a - 2 * i + n),\n            y = r + 2 * c * (o - r) + f * (s - 2 * o + r);\n          return {\n            x: h * t + 3 * l * c * n + 3 * u * c * c * i + d * a,\n            y: h * e + 3 * l * c * r + 3 * u * c * c * o + d * s,\n            m: { x: p, y: g },\n            n: { x: v, y: y },\n            start: { x: u * t + c * n, y: u * e + c * r },\n            end: { x: u * i + c * a, y: u * o + c * s },\n            alpha: 90 - (180 * Math.atan2(p - v, g - y)) / Math.PI,\n          };\n        },\n        j = function (t, e, n) {\n          if (\n            !(function (t, e) {\n              return (\n                (t = O(t)),\n                (e = O(e)),\n                S(e, t.x, t.y) ||\n                  S(e, t.x2, t.y) ||\n                  S(e, t.x, t.y2) ||\n                  S(e, t.x2, t.y2) ||\n                  S(t, e.x, e.y) ||\n                  S(t, e.x2, e.y) ||\n                  S(t, e.x, e.y2) ||\n                  S(t, e.x2, e.y2) ||\n                  (((t.x < e.x2 && t.x > e.x) || (e.x < t.x2 && e.x > t.x)) &&\n                    ((t.y < e.y2 && t.y > e.y) || (e.y < t.y2 && e.y > t.y)))\n              );\n            })(M(t), M(e))\n          )\n            return n ? 0 : [];\n          for (\n            var r = ~~(m.apply(0, t) / 8),\n              i = ~~(m.apply(0, e) / 8),\n              o = [],\n              a = [],\n              s = {},\n              c = n ? 0 : [],\n              u = 0;\n            u < r + 1;\n            u++\n          ) {\n            var h = k.apply(0, t.concat(u / r));\n            o.push({ x: h.x, y: h.y, t: u / r });\n          }\n          for (u = 0; u < i + 1; u++) {\n            h = k.apply(0, e.concat(u / i));\n            a.push({ x: h.x, y: h.y, t: u / i });\n          }\n          for (u = 0; u < r; u++)\n            for (var l = 0; l < i; l++) {\n              var f = o[u],\n                d = o[u + 1],\n                p = a[l],\n                g = a[l + 1],\n                v = Math.abs(d.x - f.x) < 0.001 ? \"y\" : \"x\",\n                y = Math.abs(g.x - p.x) < 0.001 ? \"y\" : \"x\",\n                b = x(f.x, f.y, d.x, d.y, p.x, p.y, g.x, g.y);\n              if (b) {\n                if (s[b.x.toFixed(4)] === b.y.toFixed(4)) continue;\n                s[b.x.toFixed(4)] = b.y.toFixed(4);\n                var w =\n                    f.t + Math.abs((b[v] - f[v]) / (d[v] - f[v])) * (d.t - f.t),\n                  j =\n                    p.t + Math.abs((b[y] - p[y]) / (g[y] - p[y])) * (g.t - p.t);\n                w >= 0 &&\n                  w <= 1 &&\n                  j >= 0 &&\n                  j <= 1 &&\n                  (n ? (c += 1) : c.push({ x: b.x, y: b.y, t1: w, t2: j }));\n              }\n            }\n          return c;\n        },\n        C = function (t, e) {\n          return (function (t, e, n) {\n            var r, i, o, a, s, c, u, h, l, f;\n            (t = p(t)), (e = p(e));\n            for (var d = n ? 0 : [], g = 0, v = t.length; g < v; g++) {\n              var y = t[g];\n              if (\"M\" === y[0]) (r = s = y[1]), (i = c = y[2]);\n              else {\n                \"C\" === y[0]\n                  ? ((l = [r, i].concat(y.slice(1))), (r = l[6]), (i = l[7]))\n                  : ((l = [r, i, r, i, s, c, s, c]), (r = s), (i = c));\n                for (var m = 0, b = e.length; m < b; m++) {\n                  var x = e[m];\n                  if (\"M\" === x[0]) (o = u = x[1]), (a = h = x[2]);\n                  else {\n                    \"C\" === x[0]\n                      ? ((f = [o, a].concat(x.slice(1))),\n                        (o = f[6]),\n                        (a = f[7]))\n                      : ((f = [o, a, o, a, u, h, u, h]), (o = u), (a = h));\n                    var S = j(l, f, n);\n                    if (n) d += S;\n                    else {\n                      for (var w = 0, O = S.length; w < O; w++)\n                        (S[w].segment1 = g),\n                          (S[w].segment2 = m),\n                          (S[w].bez1 = l),\n                          (S[w].bez2 = f);\n                      d = d.concat(S);\n                    }\n                  }\n                }\n              }\n            }\n            return d;\n          })(t, e);\n        };\n      function E(t, e) {\n        var n = [],\n          r = [];\n        return (\n          t.length &&\n            (function t(e, i) {\n              if (1 === e.length) n.push(e[0]), r.push(e[0]);\n              else {\n                for (var o = [], a = 0; a < e.length - 1; a++)\n                  0 === a && n.push(e[0]),\n                    a === e.length - 2 && r.push(e[a + 1]),\n                    (o[a] = [\n                      (1 - i) * e[a][0] + i * e[a + 1][0],\n                      (1 - i) * e[a][1] + i * e[a + 1][1],\n                    ]);\n                t(o, i);\n              }\n            })(t, e),\n          { left: n, right: r.reverse() }\n        );\n      }\n      var P = function (t, e, n) {\n          if (1 === n) return [[].concat(t)];\n          var r = [];\n          if (\"L\" === e[0] || \"C\" === e[0] || \"Q\" === e[0])\n            r = r.concat(\n              (function (t, e, n) {\n                var r = [[t[1], t[2]]];\n                n = n || 2;\n                var i = [];\n                \"A\" === e[0]\n                  ? (r.push(e[6]), r.push(e[7]))\n                  : \"C\" === e[0]\n                  ? (r.push([e[1], e[2]]),\n                    r.push([e[3], e[4]]),\n                    r.push([e[5], e[6]]))\n                  : \"S\" === e[0] || \"Q\" === e[0]\n                  ? (r.push([e[1], e[2]]), r.push([e[3], e[4]]))\n                  : r.push([e[1], e[2]]);\n                for (var o = r, a = 1 / n, s = 0; s < n - 1; s++) {\n                  var c = E(o, a / (1 - a * s));\n                  i.push(c.left), (o = c.right);\n                }\n                return (\n                  i.push(o),\n                  i.map(function (t) {\n                    var e = [];\n                    return (\n                      4 === t.length && (e.push(\"C\"), (e = e.concat(t[2]))),\n                      t.length >= 3 &&\n                        (3 === t.length && e.push(\"Q\"), (e = e.concat(t[1]))),\n                      2 === t.length && e.push(\"L\"),\n                      (e = e.concat(t[t.length - 1]))\n                    );\n                  })\n                );\n              })(t, e, n),\n            );\n          else {\n            var i = [].concat(t);\n            \"M\" === i[0] && (i[0] = \"L\");\n            for (var o = 0; o <= n - 1; o++) r.push(i);\n          }\n          return r;\n        },\n        A = function (t, e) {\n          if (1 === t.length) return t;\n          var n = t.length - 1,\n            r = e.length - 1,\n            i = n / r,\n            o = [];\n          if (1 === t.length && \"M\" === t[0][0]) {\n            for (var a = 0; a < r - n; a++) t.push(t[0]);\n            return t;\n          }\n          for (a = 0; a < r; a++) {\n            var s = Math.floor(i * a);\n            o[s] = (o[s] || 0) + 1;\n          }\n          var c = o.reduce(function (e, r, i) {\n            return i === n ? e.concat(t[n]) : e.concat(P(t[i], t[i + 1], r));\n          }, []);\n          return (\n            c.unshift(t[0]), (\"Z\" !== e[r] && \"z\" !== e[r]) || c.push(\"Z\"), c\n          );\n        },\n        I = function (t, e) {\n          if (t.length !== e.length) return !1;\n          var n = !0;\n          return (\n            Object(r.each)(t, function (t, r) {\n              if (t !== e[r]) return (n = !1), !1;\n            }),\n            n\n          );\n        };\n      function T(t, e, n) {\n        var r = null,\n          i = n;\n        return (\n          e < i && ((i = e), (r = \"add\")),\n          t < i && ((i = t), (r = \"del\")),\n          { type: r, min: i }\n        );\n      }\n      var N = function (t, e) {\n        var n = (function (t, e) {\n            var n,\n              r,\n              i = t.length,\n              o = e.length,\n              a = 0;\n            if (0 === i || 0 === o) return null;\n            for (var s = [], c = 0; c <= i; c++)\n              (s[c] = []), (s[c][0] = { min: c });\n            for (var u = 0; u <= o; u++) s[0][u] = { min: u };\n            for (c = 1; c <= i; c++) {\n              n = t[c - 1];\n              for (u = 1; u <= o; u++) {\n                (r = e[u - 1]), (a = I(n, r) ? 0 : 1);\n                var h = s[c - 1][u].min + 1,\n                  l = s[c][u - 1].min + 1,\n                  f = s[c - 1][u - 1].min + a;\n                s[c][u] = T(h, l, f);\n              }\n            }\n            return s;\n          })(t, e),\n          r = t.length,\n          i = e.length,\n          o = [],\n          a = 1,\n          s = 1;\n        if (n[r][i].min !== r) {\n          for (var c = 1; c <= r; c++) {\n            var u = n[c][c].min;\n            s = c;\n            for (var h = a; h <= i; h++)\n              n[c][h].min < u && ((u = n[c][h].min), (s = h));\n            (a = s),\n              n[c][a].type && o.push({ index: c - 1, type: n[c][a].type });\n          }\n          for (c = o.length - 1; c >= 0; c--)\n            (a = o[c].index),\n              \"add\" === o[c].type\n                ? t.splice(a, 0, [].concat(t[a]))\n                : t.splice(a, 1);\n        }\n        var l = i - (r = t.length);\n        if (r < i)\n          for (c = 0; c < l; c++)\n            \"z\" === t[r - 1][0] || \"Z\" === t[r - 1][0]\n              ? t.splice(r - 2, 0, t[r - 2])\n              : t.push(t[r - 1]),\n              (r += 1);\n        return t;\n      };\n      function B(t, e, n) {\n        for (\n          var r, i = [].concat(t), o = 1 / (n + 1), a = L(e)[0], s = 1;\n          s <= n;\n          s++\n        )\n          (o *= s),\n            0 === (r = Math.floor(t.length * o))\n              ? i.unshift([\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ])\n              : i.splice(r, 0, [\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ]);\n        return i;\n      }\n      function L(t) {\n        var e = [];\n        switch (t[0]) {\n          case \"M\":\n          case \"L\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"A\":\n            e.push([t[6], t[7]]);\n            break;\n          case \"Q\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"T\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"C\":\n            e.push([t[5], t[6]]), e.push([t[1], t[2]]), e.push([t[3], t[4]]);\n            break;\n          case \"S\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"H\":\n          case \"V\":\n            e.push([t[1], t[1]]);\n        }\n        return e;\n      }\n      var D = function (t, e) {\n        if (t.length <= 1) return t;\n        for (var n, r = 0; r < e.length; r++)\n          if (t[r][0] !== e[r][0])\n            switch (((n = L(t[r])), e[r][0])) {\n              case \"M\":\n                t[r] = [\"M\"].concat(n[0]);\n                break;\n              case \"L\":\n                t[r] = [\"L\"].concat(n[0]);\n                break;\n              case \"A\":\n                (t[r] = [].concat(e[r])),\n                  (t[r][6] = n[0][0]),\n                  (t[r][7] = n[0][1]);\n                break;\n              case \"Q\":\n                if (n.length < 2) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = B(n, t[r - 1], 1);\n                }\n                t[r] = [\"Q\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              case \"T\":\n                t[r] = [\"T\"].concat(n[0]);\n                break;\n              case \"C\":\n                if (n.length < 3) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = B(n, t[r - 1], 2);\n                }\n                t[r] = [\"C\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              case \"S\":\n                if (n.length < 2) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = B(n, t[r - 1], 1);\n                }\n                t[r] = [\"S\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              default:\n                t[r] = e[r];\n            }\n        return t;\n      };\n    },\n    35: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"getAdjMatrix\", function () {\n          return r;\n        }),\n        n.d(e, \"breadthFirstSearch\", function () {\n          return l;\n        }),\n        n.d(e, \"connectedComponent\", function () {\n          return d;\n        }),\n        n.d(e, \"getDegree\", function () {\n          return g;\n        }),\n        n.d(e, \"getInDegree\", function () {\n          return v;\n        }),\n        n.d(e, \"getOutDegree\", function () {\n          return y;\n        }),\n        n.d(e, \"detectCycle\", function () {\n          return w;\n        }),\n        n.d(e, \"detectDirectedCycle\", function () {\n          return mt;\n        }),\n        n.d(e, \"detectAllCycles\", function () {\n          return S;\n        }),\n        n.d(e, \"detectAllDirectedCycle\", function () {\n          return x;\n        }),\n        n.d(e, \"detectAllUndirectedCycle\", function () {\n          return b;\n        }),\n        n.d(e, \"depthFirstSearch\", function () {\n          return m;\n        }),\n        n.d(e, \"dijkstra\", function () {\n          return k;\n        }),\n        n.d(e, \"findAllPath\", function () {\n          return P;\n        }),\n        n.d(e, \"findShortestPath\", function () {\n          return E;\n        }),\n        n.d(e, \"floydWarshall\", function () {\n          return A;\n        }),\n        n.d(e, \"labelPropagation\", function () {\n          return I;\n        }),\n        n.d(e, \"louvain\", function () {\n          return F;\n        }),\n        n.d(e, \"iLouvain\", function () {\n          return Y;\n        }),\n        n.d(e, \"kCore\", function () {\n          return X;\n        }),\n        n.d(e, \"kMeans\", function () {\n          return W;\n        }),\n        n.d(e, \"cosineSimilarity\", function () {\n          return q;\n        }),\n        n.d(e, \"nodesCosineSimilarity\", function () {\n          return V;\n        }),\n        n.d(e, \"minimumSpanningTree\", function () {\n          return $;\n        }),\n        n.d(e, \"pageRank\", function () {\n          return Q;\n        }),\n        n.d(e, \"getNeighbors\", function () {\n          return c;\n        }),\n        n.d(e, \"Stack\", function () {\n          return yt;\n        }),\n        n.d(e, \"GADDI\", function () {\n          return vt;\n        });\n      var r = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (!a && 0 !== a) ||\n                  (!s && 0 !== s) ||\n                  ((i[a][s] = 1), e || (i[s][a] = 1));\n              }),\n            i\n          );\n        },\n        i = function (t, e) {\n          return t === e;\n        },\n        o = (function () {\n          function t(t, e) {\n            void 0 === e && (e = null), (this.value = t), (this.next = e);\n          }\n          return (\n            (t.prototype.toString = function (t) {\n              return t ? t(this.value) : \"\".concat(this.value);\n            }),\n            t\n          );\n        })(),\n        a = (function () {\n          function t(t) {\n            void 0 === t && (t = i),\n              (this.head = null),\n              (this.tail = null),\n              (this.compare = t);\n          }\n          return (\n            (t.prototype.prepend = function (t) {\n              var e = new o(t, this.head);\n              return (this.head = e), this.tail || (this.tail = e), this;\n            }),\n            (t.prototype.append = function (t) {\n              var e = new o(t);\n              return this.head\n                ? ((this.tail.next = e), (this.tail = e), this)\n                : ((this.head = e), (this.tail = e), this);\n            }),\n            (t.prototype.delete = function (t) {\n              if (!this.head) return null;\n              for (\n                var e = null;\n                this.head && this.compare(this.head.value, t);\n\n              )\n                (e = this.head), (this.head = this.head.next);\n              var n = this.head;\n              if (null !== n)\n                for (; n.next; )\n                  this.compare(n.next.value, t)\n                    ? ((e = n.next), (n.next = n.next.next))\n                    : (n = n.next);\n              return this.compare(this.tail.value, t) && (this.tail = n), e;\n            }),\n            (t.prototype.find = function (t) {\n              var e = t.value,\n                n = void 0 === e ? void 0 : e,\n                r = t.callback,\n                i = void 0 === r ? void 0 : r;\n              if (!this.head) return null;\n              for (var o = this.head; o; ) {\n                if (i && i(o.value)) return o;\n                if (void 0 !== n && this.compare(o.value, n)) return o;\n                o = o.next;\n              }\n              return null;\n            }),\n            (t.prototype.deleteTail = function () {\n              var t = this.tail;\n              if (this.head === this.tail)\n                return (this.head = null), (this.tail = null), t;\n              for (var e = this.head; e.next; )\n                e.next.next ? (e = e.next) : (e.next = null);\n              return (this.tail = e), t;\n            }),\n            (t.prototype.deleteHead = function () {\n              if (!this.head) return null;\n              var t = this.head;\n              return (\n                this.head.next\n                  ? (this.head = this.head.next)\n                  : ((this.head = null), (this.tail = null)),\n                t\n              );\n            }),\n            (t.prototype.fromArray = function (t) {\n              var e = this;\n              return (\n                t.forEach(function (t) {\n                  return e.append(t);\n                }),\n                this\n              );\n            }),\n            (t.prototype.toArray = function () {\n              for (var t = [], e = this.head; e; ) t.push(e), (e = e.next);\n              return t;\n            }),\n            (t.prototype.reverse = function () {\n              for (var t = this.head, e = null, n = null; t; )\n                (n = t.next), (t.next = e), (e = t), (t = n);\n              (this.tail = this.head), (this.head = e);\n            }),\n            (t.prototype.toString = function (t) {\n              return (\n                void 0 === t && (t = void 0),\n                this.toArray()\n                  .map(function (e) {\n                    return e.toString(t);\n                  })\n                  .toString()\n              );\n            }),\n            t\n          );\n        })(),\n        s = (function () {\n          function t() {\n            this.linkedList = new a();\n          }\n          return (\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.peek = function () {\n              return this.linkedList.head ? this.linkedList.head.value : null;\n            }),\n            (t.prototype.enqueue = function (t) {\n              this.linkedList.append(t);\n            }),\n            (t.prototype.dequeue = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toString = function (t) {\n              return this.linkedList.toString(t);\n            }),\n            t\n          );\n        })(),\n        c = function (t, e, n) {\n          void 0 === e && (e = []);\n          var r = e.filter(function (e) {\n            return e.source === t || e.target === t;\n          });\n          if (\"target\" === n) {\n            return r\n              .filter(function (e) {\n                return e.source === t;\n              })\n              .map(function (t) {\n                return t.target;\n              });\n          }\n          if (\"source\" === n) {\n            return r\n              .filter(function (e) {\n                return e.target === t;\n              })\n              .map(function (t) {\n                return t.source;\n              });\n          }\n          return r.map(function (e) {\n            return e.source === t ? e.target : e.source;\n          });\n        },\n        u = function (t, e) {\n          return e.filter(function (e) {\n            return e.source === t || e.target === t;\n          });\n        },\n        h = function (t) {\n          void 0 === t && (t = 0);\n          var e = \"\".concat(Math.random()).split(\".\")[1].substr(0, 5),\n            n = \"\".concat(Math.random()).split(\".\")[1].substr(0, 5);\n          return \"\".concat(t, \"-\").concat(e).concat(n);\n        };\n      var l = function (t, e, n, r) {\n          void 0 === r && (r = !0);\n          var i = (function (t) {\n              void 0 === t && (t = {});\n              var e,\n                n = t,\n                r = function () {},\n                i =\n                  ((e = {}),\n                  function (t) {\n                    var n = t.next;\n                    return !e[n] && ((e[n] = !0), !0);\n                  });\n              return (\n                (n.allowTraversal = t.allowTraversal || i),\n                (n.enter = t.enter || r),\n                (n.leave = t.leave || r),\n                n\n              );\n            })(n),\n            o = new s(),\n            a = t.edges,\n            u = void 0 === a ? [] : a;\n          o.enqueue(e);\n          for (\n            var h = \"\",\n              l = function () {\n                var t = o.dequeue();\n                i.enter({ current: t, previous: h }),\n                  c(t, u, r ? \"target\" : void 0).forEach(function (e) {\n                    i.allowTraversal({ previous: h, current: t, next: e }) &&\n                      o.enqueue(e);\n                  }),\n                  i.leave({ current: t, previous: h }),\n                  (h = t);\n              };\n            !o.isEmpty();\n\n          )\n            l();\n        },\n        f = function (t) {\n          for (\n            var e = t.nodes,\n              n = void 0 === e ? [] : e,\n              r = t.edges,\n              i = void 0 === r ? [] : r,\n              o = [],\n              a = {},\n              s = {},\n              u = {},\n              h = [],\n              l = 0,\n              f = function t(e) {\n                (s[e.id] = l),\n                  (u[e.id] = l),\n                  (l += 1),\n                  o.push(e),\n                  (a[e.id] = !0);\n                for (\n                  var r = c(e.id, i, \"target\").filter(function (t) {\n                      return (\n                        n\n                          .map(function (t) {\n                            return t.id;\n                          })\n                          .indexOf(t) > -1\n                      );\n                    }),\n                    f = function (i) {\n                      var o = r[i];\n                      if (s[o] || 0 === s[o])\n                        a[o] && (u[e.id] = Math.min(u[e.id], s[o]));\n                      else {\n                        var c = n.filter(function (t) {\n                          return t.id === o;\n                        });\n                        c.length > 0 && t(c[0]),\n                          (u[e.id] = Math.min(u[e.id], u[o]));\n                      }\n                    },\n                    d = 0;\n                  d < r.length;\n                  d++\n                )\n                  f(d);\n                if (u[e.id] === s[e.id]) {\n                  for (var p = []; o.length > 0; ) {\n                    var g = o.pop();\n                    if (((a[g.id] = !1), p.push(g), g === e)) break;\n                  }\n                  p.length > 0 && h.push(p);\n                }\n              },\n              d = 0,\n              p = n;\n            d < p.length;\n            d++\n          ) {\n            var g = p[d];\n            s[g.id] || 0 === s[g.id] || f(g);\n          }\n          return h;\n        };\n      function d(t, e) {\n        return e\n          ? f(t)\n          : (function (t) {\n              for (\n                var e = t.nodes,\n                  n = void 0 === e ? [] : e,\n                  r = t.edges,\n                  i = void 0 === r ? [] : r,\n                  o = [],\n                  a = {},\n                  s = [],\n                  u = function t(e) {\n                    s.push(e), (a[e.id] = !0);\n                    for (\n                      var r = c(e.id, i),\n                        o = function (e) {\n                          var i = r[e];\n                          if (!a[i]) {\n                            var o = n.filter(function (t) {\n                              return t.id === i;\n                            });\n                            o.length > 0 && t(o[0]);\n                          }\n                        },\n                        u = 0;\n                      u < r.length;\n                      ++u\n                    )\n                      o(u);\n                  },\n                  h = 0;\n                h < n.length;\n                h++\n              ) {\n                var l = n[h];\n                if (!a[l.id]) {\n                  u(l);\n                  for (var f = []; s.length > 0; ) f.push(s.pop());\n                  o.push(f);\n                }\n              }\n              return o;\n            })(t);\n      }\n      var p = function (t) {\n          var e = {},\n            n = t.nodes,\n            r = void 0 === n ? [] : n,\n            i = t.edges,\n            o = void 0 === i ? [] : i;\n          return (\n            r.forEach(function (t) {\n              e[t.id] = { degree: 0, inDegree: 0, outDegree: 0 };\n            }),\n            o.forEach(function (t) {\n              e[t.source].degree++,\n                e[t.source].outDegree++,\n                e[t.target].degree++,\n                e[t.target].inDegree++;\n            }),\n            e\n          );\n        },\n        g = p,\n        v = function (t, e) {\n          return p(t)[e] ? p(t)[e].inDegree : 0;\n        },\n        y = function (t, e) {\n          return p(t)[e] ? p(t)[e].outDegree : 0;\n        };\n      function m(t, e, n) {\n        !(function t(e, n, r, i) {\n          i.enter({ current: n, previous: r });\n          var o = e.edges;\n          c(n, void 0 === o ? [] : o, \"target\").forEach(function (o) {\n            i.allowTraversal({ previous: r, current: n, next: o }) &&\n              t(e, o, n, i);\n          }),\n            i.leave({ current: n, previous: r });\n        })(\n          t,\n          e,\n          \"\",\n          (function (t) {\n            void 0 === t && (t = {});\n            var e,\n              n = t,\n              r = function () {},\n              i =\n                ((e = {}),\n                function (t) {\n                  var n = t.next;\n                  return !e[n] && ((e[n] = !0), !0);\n                });\n            return (\n              (n.allowTraversal = t.allowTraversal || i),\n              (n.enter = t.enter || r),\n              (n.leave = t.leave || r),\n              n\n            );\n          })(n),\n        );\n      }\n      var b = function (t, e, n) {\n          var r, i;\n          void 0 === n && (n = !0);\n          for (var o = [], a = 0, s = d(t, !1); a < s.length; a++) {\n            var u = s[a];\n            if (u.length)\n              for (\n                var h = u[0],\n                  l = h.id,\n                  f = [h],\n                  p = (((r = {})[l] = h), r),\n                  g = (((i = {})[l] = new Set()), i);\n                f.length > 0;\n\n              )\n                for (\n                  var v = f.pop(),\n                    y = v.id,\n                    m = c(y, t.edges),\n                    b = function (r) {\n                      var i,\n                        a = m[r],\n                        s = t.nodes.find(function (t) {\n                          return t.id === a;\n                        });\n                      if (a === y) o.push((((i = {})[a] = v), i));\n                      else if ((a in g)) {\n                        if (!g[y].has(s)) {\n                          for (\n                            var c = !0, u = [s, v], h = p[y];\n                            g[a].size &&\n                            !g[a].has(h) &&\n                            (u.push(h), h !== p[h.id]);\n\n                          )\n                            h = p[h.id];\n                          if (\n                            (u.push(h),\n                            e && n\n                              ? ((c = !1),\n                                u.findIndex(function (t) {\n                                  return e.indexOf(t.id) > -1;\n                                }) > -1 && (c = !0))\n                              : e &&\n                                !n &&\n                                u.findIndex(function (t) {\n                                  return e.indexOf(t.id) > -1;\n                                }) > -1 &&\n                                (c = !1),\n                            c)\n                          ) {\n                            for (var l = {}, d = 1; d < u.length; d += 1)\n                              l[u[d - 1].id] = u[d];\n                            u.length && (l[u[u.length - 1].id] = u[0]),\n                              o.push(l);\n                          }\n                          g[a].add(v);\n                        }\n                      } else (p[a] = v), f.push(s), (g[a] = new Set([v]));\n                    },\n                    x = 0;\n                  x < m.length;\n                  x += 1\n                )\n                  b(x);\n          }\n          return o;\n        },\n        x = function (t, e, n) {\n          void 0 === n && (n = !0);\n          for (\n            var r = [],\n              i = new Set(),\n              o = [],\n              a = [],\n              s = {},\n              u = {},\n              h = function t(c, u, h) {\n                var l = !1;\n                if (e && !1 === n && e.indexOf(c.id) > -1) return l;\n                r.push(c), i.add(c);\n                for (var f = h[c.id], d = 0; d < f.length; d += 1) {\n                  if ((v = s[f[d]]) === u) {\n                    for (var p = {}, g = 1; g < r.length; g += 1)\n                      p[r[g - 1].id] = r[g];\n                    r.length && (p[r[r.length - 1].id] = r[0]),\n                      a.push(p),\n                      (l = !0);\n                  } else i.has(v) || (t(v, u, h) && (l = !0));\n                }\n                if (l)\n                  !(function (t) {\n                    for (var e = [t]; e.length > 0; ) {\n                      var n = e.pop();\n                      i.has(n) &&\n                        (i.delete(n),\n                        o[n.id].forEach(function (t) {\n                          e.push(t);\n                        }),\n                        o[n.id].clear());\n                    }\n                  })(c);\n                else\n                  for (d = 0; d < f.length; d += 1) {\n                    var v = s[f[d]];\n                    o[v.id].has(c) || o[v.id].add(c);\n                  }\n                return r.pop(), l;\n              },\n              l = t.nodes,\n              d = void 0 === l ? [] : l,\n              p = 0;\n            p < d.length;\n            p += 1\n          ) {\n            var g = d[p],\n              v = g.id;\n            (u[v] = p), (s[p] = g);\n          }\n          if (e && n) {\n            var y = function (t) {\n              var n = e[t];\n              (u[d[t].id] = u[n]),\n                (u[n] = 0),\n                (s[0] = d.find(function (t) {\n                  return t.id === n;\n                })),\n                (s[u[d[t].id]] = d[t]);\n            };\n            for (p = 0; p < e.length; p++) y(p);\n          }\n          for (\n            var m = function (r) {\n                for (var i, o, s = 1 / 0, h = 0; h < r.length; h += 1)\n                  for (var l = r[h], f = 0; f < l.length; f++) {\n                    var d = u[l[f].id];\n                    d < s && ((s = d), (o = h));\n                  }\n                var p = r[o],\n                  g = [];\n                for (h = 0; h < p.length; h += 1) {\n                  var v = p[h];\n                  g[v.id] = [];\n                  for (\n                    var y = 0,\n                      m = c(v.id, t.edges, \"target\").filter(function (t) {\n                        return (\n                          p\n                            .map(function (t) {\n                              return t.id;\n                            })\n                            .indexOf(t) > -1\n                        );\n                      });\n                    y < m.length;\n                    y++\n                  ) {\n                    var b = m[y];\n                    b !== v.id || (!1 === n && e.indexOf(v.id) > -1)\n                      ? g[v.id].push(u[b])\n                      : a.push((((i = {})[v.id] = v), i));\n                  }\n                }\n                return { component: p, adjList: g, minIdx: s };\n              },\n              b = 0;\n            b < d.length;\n\n          ) {\n            var x = d.filter(function (t) {\n                return u[t.id] >= b;\n              }),\n              S = f({ nodes: x, edges: t.edges }).filter(function (t) {\n                return t.length > 1;\n              });\n            if (0 === S.length) break;\n            var w = m(S),\n              O = w.minIdx,\n              M = w.adjList,\n              k = w.component;\n            if (!(k.length > 1)) break;\n            k.forEach(function (t) {\n              o[t.id] = new Set();\n            });\n            var j = s[O];\n            if (e && n && -1 === e.indexOf(j.id)) return a;\n            h(j, j, M), (b = O + 1);\n          }\n          return a;\n        },\n        S = function (t, e, n, r) {\n          return void 0 === r && (r = !0), e ? x(t, n, r) : b(t, n, r);\n        },\n        w = function (t) {\n          var e = null,\n            n = t.nodes,\n            r = {},\n            i = {},\n            o = {},\n            a = {};\n          (void 0 === n ? [] : n).forEach(function (t) {\n            i[t.id] = t;\n          });\n          for (\n            var s = {\n              enter: function (t) {\n                var n = t.current,\n                  a = t.previous;\n                if (o[n]) {\n                  e = {};\n                  for (var s = n, c = a; c !== n; )\n                    (e[s] = c), (s = c), (c = r[c]);\n                  e[s] = c;\n                } else (o[n] = n), delete i[n], (r[n] = a);\n              },\n              leave: function (t) {\n                var e = t.current;\n                (a[e] = e), delete o[e];\n              },\n              allowTraversal: function (t) {\n                var n = t.next;\n                return !e && !a[n];\n              },\n            };\n            Object.keys(i).length;\n\n          ) {\n            m(t, Object.keys(i)[0], s);\n          }\n          return e;\n        },\n        O = n(1),\n        M = n(0),\n        k = function (t, e, n, r) {\n          var i = t.nodes,\n            o = void 0 === i ? [] : i,\n            a = t.edges,\n            s = void 0 === a ? [] : a,\n            c = [],\n            h = {},\n            l = {},\n            f = {};\n          o.forEach(function (t, n) {\n            var r = t.id;\n            c.push(r), (l[r] = 1 / 0), r === e && (l[r] = 0);\n          });\n          for (\n            var d = o.length,\n              p = function (t) {\n                var e = (function (t, e, n) {\n                    for (var r, i = 1 / 0, o = 0; o < e.length; o++) {\n                      var a = e[o].id;\n                      !n[a] && t[a] <= i && ((i = t[a]), (r = e[o]));\n                    }\n                    return r;\n                  })(l, o, h),\n                  i = e.id;\n                if (((h[i] = !0), l[i] === 1 / 0)) return \"continue\";\n                (n\n                  ? (function (t, e) {\n                      return e.filter(function (e) {\n                        return e.source === t;\n                      });\n                    })(i, s)\n                  : u(i, s)\n                ).forEach(function (t) {\n                  var n = t.target,\n                    o = t.source,\n                    a = n === i ? o : n,\n                    s = r && t[r] ? t[r] : 1;\n                  l[a] > l[e.id] + s\n                    ? ((l[a] = l[e.id] + s), (f[a] = [e.id]))\n                    : l[a] === l[e.id] + s && f[a].push(e.id);\n                });\n              },\n              g = 0;\n            g < d;\n            g++\n          )\n            p();\n          f[e] = [e];\n          var v = {};\n          for (var y in l) l[y] !== 1 / 0 && j(e, y, f, v);\n          var m = {};\n          for (var y in v) m[y] = v[y][0];\n          return { length: l, path: m, allPath: v };\n        };\n      function j(t, e, n, r) {\n        if (t === e) return [t];\n        if (r[e]) return r[e];\n        for (var i = [], o = 0, a = n[e]; o < a.length; o++) {\n          var s = j(t, a[o], n, r);\n          if (!s) return;\n          for (var c = 0, u = s; c < u.length; c++) {\n            var h = u[c];\n            Object(M.isArray)(h)\n              ? i.push(Object(O.f)(Object(O.f)([], h, !0), [e], !1))\n              : i.push([h, e]);\n          }\n        }\n        return (r[e] = i), r[e];\n      }\n      var C,\n        E = function (t, e, n, r, i) {\n          var o = k(t, e, r, i),\n            a = o.length,\n            s = o.path,\n            c = o.allPath;\n          return { length: a[n], path: s[n], allPath: c[n] };\n        },\n        P = function (t, e, n, r) {\n          var i;\n          if (e === n) return [[e]];\n          var o = t.edges,\n            a = void 0 === o ? [] : o,\n            s = [e],\n            u = (((i = {})[e] = !0), i),\n            h = [],\n            l = [],\n            f = r ? c(e, a, \"target\") : c(e, a);\n          for (h.push(f); s.length > 0 && h.length > 0; ) {\n            var d = h[h.length - 1];\n            if (d.length) {\n              var p = d.shift();\n              if (\n                (p &&\n                  (s.push(p),\n                  (u[p] = !0),\n                  (f = r ? c(p, a, \"target\") : c(p, a)),\n                  h.push(\n                    f.filter(function (t) {\n                      return !u[t];\n                    }),\n                  )),\n                s[s.length - 1] === n)\n              ) {\n                var g = s.map(function (t) {\n                  return t;\n                });\n                l.push(g);\n                v = s.pop();\n                (u[v] = !1), h.pop();\n              }\n            } else {\n              var v = s.pop();\n              (u[v] = !1), h.pop();\n            }\n          }\n          return l;\n        },\n        A = function (t, e) {\n          for (var n = r(t, e), i = [], o = n.length, a = 0; a < o; a += 1) {\n            i[a] = [];\n            for (var s = 0; s < o; s += 1)\n              a === s\n                ? (i[a][s] = 0)\n                : 0 !== n[a][s] && n[a][s]\n                ? (i[a][s] = n[a][s])\n                : (i[a][s] = 1 / 0);\n          }\n          for (var c = 0; c < o; c += 1)\n            for (a = 0; a < o; a += 1)\n              for (s = 0; s < o; s += 1)\n                i[a][s] > i[a][c] + i[c][s] && (i[a][s] = i[a][c] + i[c][s]);\n          return i;\n        },\n        I = function (t, e, n, i) {\n          void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === i && (i = 1e3);\n          var o = t.nodes,\n            a = void 0 === o ? [] : o,\n            s = t.edges,\n            c = void 0 === s ? [] : s,\n            u = {},\n            l = {};\n          a.forEach(function (t, e) {\n            var n = h();\n            (t.clusterId = n),\n              (u[n] = { id: n, nodes: [t] }),\n              (l[t.id] = { node: t, idx: e });\n          });\n          var f = r(t, e),\n            d = [],\n            p = {};\n          f.forEach(function (t, e) {\n            var n = 0,\n              r = a[e].id;\n            (p[r] = {}),\n              t.forEach(function (t, e) {\n                if (t) {\n                  n += t;\n                  var i = a[e].id;\n                  p[r][i] = t;\n                }\n              }),\n              d.push(n);\n          });\n          for (\n            var g = 0,\n              v = function () {\n                var t = !1;\n                if (\n                  (a.forEach(function (e) {\n                    var n = {};\n                    Object.keys(p[e.id]).forEach(function (t) {\n                      var r = p[e.id][t],\n                        i = l[t].node.clusterId;\n                      n[i] || (n[i] = 0), (n[i] += r);\n                    });\n                    var r = -1 / 0,\n                      i = [];\n                    if (\n                      (Object.keys(n).forEach(function (t) {\n                        r < n[t]\n                          ? ((r = n[t]), (i = [t]))\n                          : r === n[t] && i.push(t);\n                      }),\n                      1 !== i.length || i[0] !== e.clusterId)\n                    ) {\n                      var o = i.indexOf(e.clusterId);\n                      if ((o >= 0 && i.splice(o, 1), i && i.length)) {\n                        t = !0;\n                        var a = u[e.clusterId],\n                          s = a.nodes.indexOf(e);\n                        a.nodes.splice(s, 1);\n                        var c = Math.floor(Math.random() * i.length),\n                          h = u[i[c]];\n                        h.nodes.push(e), (e.clusterId = h.id);\n                      }\n                    }\n                  }),\n                  !t)\n                )\n                  return \"break\";\n                g++;\n              };\n            g < i;\n\n          ) {\n            if (\"break\" === v()) break;\n          }\n          Object.keys(u).forEach(function (t) {\n            var e = u[t];\n            (e.nodes && e.nodes.length) || delete u[t];\n          });\n          var y = [],\n            m = {};\n          c.forEach(function (t) {\n            var e = t.source,\n              r = t.target,\n              i = t[n] || 1,\n              o = l[e].node.clusterId,\n              a = l[r].node.clusterId,\n              s = \"\".concat(o, \"---\").concat(a);\n            if (m[s]) (m[s].weight += i), m[s].count++;\n            else {\n              var c = { source: o, target: a, weight: i, count: 1 };\n              (m[s] = c), y.push(c);\n            }\n          });\n          var b = [];\n          return (\n            Object.keys(u).forEach(function (t) {\n              b.push(u[t]);\n            }),\n            { clusters: b, clusterEdges: y }\n          );\n        },\n        T = (function () {\n          function t(t) {\n            this.arr = t;\n          }\n          return (\n            (t.prototype.getArr = function () {\n              return this.arr || [];\n            }),\n            (t.prototype.add = function (e) {\n              var n,\n                r = e.arr;\n              if (\n                !(null === (n = this.arr) || void 0 === n ? void 0 : n.length)\n              )\n                return new t(r);\n              if (!(null == r ? void 0 : r.length)) return new t(this.arr);\n              if (this.arr.length === r.length) {\n                var i = [];\n                for (var o in this.arr) i[o] = this.arr[o] + r[o];\n                return new t(i);\n              }\n            }),\n            (t.prototype.subtract = function (e) {\n              var n,\n                r = e.arr;\n              if (\n                !(null === (n = this.arr) || void 0 === n ? void 0 : n.length)\n              )\n                return new t(r);\n              if (!(null == r ? void 0 : r.length)) return new t(this.arr);\n              if (this.arr.length === r.length) {\n                var i = [];\n                for (var o in this.arr) i[o] = this.arr[o] - r[o];\n                return new t(i);\n              }\n            }),\n            (t.prototype.avg = function (e) {\n              var n = [];\n              if (0 !== e) for (var r in this.arr) n[r] = this.arr[r] / e;\n              return new t(n);\n            }),\n            (t.prototype.negate = function () {\n              var e = [];\n              for (var n in this.arr) e[n] = -this.arr[n];\n              return new t(e);\n            }),\n            (t.prototype.squareEuclideanDistance = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr)\n                  r += Math.pow(this.arr[i] - t.arr[i], 2);\n                return r;\n              }\n            }),\n            (t.prototype.euclideanDistance = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr)\n                  r += Math.pow(this.arr[i] - t.arr[i], 2);\n                return Math.sqrt(r);\n              }\n              console.error(\"The two vectors are unequal in length.\");\n            }),\n            (t.prototype.normalize = function () {\n              var e = [],\n                n = Object(M.clone)(this.arr);\n              n.sort(function (t, e) {\n                return t - e;\n              });\n              var r = n[n.length - 1],\n                i = n[0];\n              for (var o in this.arr) e[o] = (this.arr[o] - i) / (r - i);\n              return new t(e);\n            }),\n            (t.prototype.norm2 = function () {\n              var t;\n              if (\n                !(null === (t = this.arr) || void 0 === t ? void 0 : t.length)\n              )\n                return 0;\n              var e = 0;\n              for (var n in this.arr) e += Math.pow(this.arr[n], 2);\n              return Math.sqrt(e);\n            }),\n            (t.prototype.dot = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr) r += this.arr[i] * t.arr[i];\n                return r;\n              }\n              console.error(\"The two vectors are unequal in length.\");\n            }),\n            (t.prototype.equal = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                (null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) !== (null == n ? void 0 : n.length)\n              )\n                return !1;\n              for (var r in this.arr) if (this.arr[r] !== n[r]) return !1;\n              return !0;\n            }),\n            t\n          );\n        })(),\n        N = function (t, e) {\n          void 0 === e && (e = void 0);\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              void 0 === e && n.push(t), void 0 !== t[e] && n.push(t[e]);\n            }),\n            n\n          );\n        };\n      !(function (t) {\n        t.EuclideanDistance = \"euclideanDistance\";\n      })(C || (C = {}));\n      var B = function (t, e, n) {\n          var r = [];\n          (null == e ? void 0 : e.length)\n            ? (r = e)\n            : (t.forEach(function (t) {\n                r = r.concat(Object.keys(t));\n              }),\n              (r = Object(M.uniq)(r)));\n          var i = {};\n          return (\n            r.forEach(function (e) {\n              var r = [];\n              t.forEach(function (t) {\n                void 0 !== t[e] && \"\" !== t[e] && r.push(t[e]);\n              }),\n                r.length &&\n                  !(null == n ? void 0 : n.includes(e)) &&\n                  (i[e] = Object(M.uniq)(r));\n            }),\n            i\n          );\n        },\n        L = function (t, e, n) {\n          var r = B(t, e, n),\n            i = [];\n          if (!Object.keys(r).length) return i;\n          var o = Object.values(r).every(function (t) {\n            return t.every(function (t) {\n              return \"number\" == typeof t;\n            });\n          });\n          return (\n            t.forEach(function (t, e) {\n              var n = [];\n              Object.keys(r).forEach(function (e) {\n                var i = t[e],\n                  a = r[e],\n                  s = a.findIndex(function (t) {\n                    return i === t;\n                  }),\n                  c = [];\n                if (o) c.push(i);\n                else\n                  for (var u = 0; u < a.length; u++)\n                    u === s ? c.push(1) : c.push(0);\n                n = n.concat(c);\n              }),\n                (i[e] = n);\n            }),\n            i\n          );\n        },\n        D = function (t, e, n, r) {\n          void 0 === n && (n = C.EuclideanDistance);\n          var i = 0;\n          switch (n) {\n            case C.EuclideanDistance:\n              i = new T(t).euclideanDistance(new T(e));\n          }\n          return i;\n        },\n        _ = function (t, e, n, r) {\n          for (var i = e.length, o = 2 * r, a = 0, s = 0; s < i; s++)\n            for (var c = t[s].clusterId, u = 0; u < i; u++) {\n              if (c === t[u].clusterId)\n                a += (e[s][u] || 0) - ((n[s] || 0) * (n[u] || 0)) / o;\n            }\n          return (a *= 1 / o);\n        },\n        R = function (t, e) {\n          void 0 === t && (t = []);\n          for (var n = t.length, r = new T([]), i = 0; i < n; i++)\n            r = r.add(new T(e[i]));\n          var o = r.avg(n);\n          o.normalize();\n          var a = 0;\n          for (i = 0; i < n; i++) {\n            a += (c = new T(e[i])).squareEuclideanDistance(o);\n          }\n          var s = [];\n          t.forEach(function () {\n            s.push([]);\n          });\n          for (i = 0; i < n; i++) {\n            var c = new T(e[i]);\n            t[i].clusterInertial = 0;\n            for (var u = 0; u < n; u++)\n              if (i !== u) {\n                var h = new T(e[u]);\n                (s[i][u] = c.squareEuclideanDistance(h)),\n                  (t[i].clusterInertial += s[i][u]);\n              } else s[i][u] = 0;\n          }\n          var l = 0,\n            f = 2 * n * a;\n          for (i = 0; i < n; i++) {\n            var d = t[i].clusterId;\n            for (u = 0; u < n; u++) {\n              var p = t[u].clusterId;\n              if (i !== u && d === p)\n                l +=\n                  (t[i].clusterInertial * t[u].clusterInertial) /\n                    Math.pow(f, 2) -\n                  s[i][u] / f;\n            }\n          }\n          return Number(l.toFixed(4));\n        },\n        F = function (t, e, n, i, o, a, s, c, u) {\n          void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === i && (i = 1e-4),\n            void 0 === o && (o = !1),\n            void 0 === a && (a = void 0),\n            void 0 === s && (s = []),\n            void 0 === c && (c = [\"id\"]),\n            void 0 === u && (u = 1);\n          var h = t.nodes,\n            l = void 0 === h ? [] : h,\n            f = t.edges,\n            d = void 0 === f ? [] : f,\n            p = [];\n          if (o) {\n            l.forEach(function (t, e) {\n              (t.properties = t.properties || {}), (t.originIndex = e);\n            });\n            var g = [];\n            l.every(function (t) {\n              return t.hasOwnProperty(\"nodeType\");\n            }) &&\n              ((g = Array.from(\n                new Set(\n                  l.map(function (t) {\n                    return t.nodeType;\n                  }),\n                ),\n              )),\n              l.forEach(function (t) {\n                t.properties.nodeType = g.findIndex(function (e) {\n                  return e === t.nodeType;\n                });\n              }));\n            var v = N(l, a);\n            p = L(v, s, c);\n          }\n          var y = 1,\n            m = {},\n            b = {};\n          l.forEach(function (t, e) {\n            var n = String(y++);\n            (t.clusterId = n),\n              (m[n] = { id: n, nodes: [t] }),\n              (b[t.id] = { node: t, idx: e });\n          });\n          var x = r(t, e),\n            S = [],\n            w = {},\n            O = 0;\n          x.forEach(function (t, e) {\n            var n = 0,\n              r = l[e].id;\n            (w[r] = {}),\n              t.forEach(function (t, e) {\n                if (t) {\n                  n += t;\n                  var i = l[e].id;\n                  (w[r][i] = t), (O += t);\n                }\n              }),\n              S.push(n);\n          }),\n            (O /= 2);\n          for (var k = 1 / 0, j = 1 / 0, C = 0, E = [], P = {}; ; ) {\n            (k =\n              o &&\n              l.every(function (t) {\n                return t.hasOwnProperty(\"properties\");\n              })\n                ? _(l, x, S, O) + R(l, p) * u\n                : _(l, x, S, O)),\n              0 === C && ((j = k), (E = l), (P = m));\n            var A = k > 0 && k > j && k - j < i;\n            if (\n              (k > j &&\n                ((E = l.map(function (t) {\n                  return { node: t, clusterId: t.clusterId };\n                })),\n                (P = Object(M.clone)(m)),\n                (j = k)),\n              A || C > 100)\n            )\n              break;\n            C++,\n              Object.keys(m).forEach(function (t) {\n                var e = 0;\n                d.forEach(function (r) {\n                  var i = r.source,\n                    o = r.target,\n                    a = b[i].node.clusterId,\n                    s = b[o].node.clusterId;\n                  ((a === t && s !== t) || (s === t && a !== t)) &&\n                    (e += r[n] || 1);\n                }),\n                  (m[t].sumTot = e);\n              }),\n              l.forEach(function (t, e) {\n                var r,\n                  i = m[t.clusterId],\n                  a = 0,\n                  s = S[e] / (2 * O),\n                  c = 0,\n                  h = i.nodes;\n                h.forEach(function (t) {\n                  var n = b[t.id].idx;\n                  c += x[e][n] || 0;\n                });\n                var l = c - i.sumTot * s,\n                  f = h.filter(function (e) {\n                    return e.id !== t.id;\n                  }),\n                  g = [];\n                f.forEach(function (t, e) {\n                  g[e] = p[t.originIndex];\n                });\n                var v = R(f, p) * u,\n                  y = w[t.id];\n                if (\n                  (Object.keys(y).forEach(function (n) {\n                    var i = b[n].node.clusterId;\n                    if (i !== t.clusterId) {\n                      var c = m[i],\n                        h = c.nodes;\n                      if (h && h.length) {\n                        var f = 0;\n                        h.forEach(function (t) {\n                          var n = b[t.id].idx;\n                          f += x[e][n] || 0;\n                        });\n                        var d = f - c.sumTot * s,\n                          g = h.concat([t]),\n                          y = [];\n                        g.forEach(function (t, e) {\n                          y[e] = p[t.originIndex];\n                        });\n                        var S = R(g, p) * u,\n                          w = d - l;\n                        o && (w = d + S - (l + v)), w > a && ((a = w), (r = c));\n                      }\n                    }\n                  }),\n                  a > 0)\n                ) {\n                  r.nodes.push(t);\n                  var M = t.clusterId;\n                  t.clusterId = r.id;\n                  var k = i.nodes.indexOf(t);\n                  i.nodes.splice(k, 1);\n                  var j = 0,\n                    C = 0;\n                  d.forEach(function (t) {\n                    var e = t.source,\n                      i = t.target,\n                      o = b[e].node.clusterId,\n                      a = b[i].node.clusterId;\n                    ((o === r.id && a !== r.id) ||\n                      (a === r.id && o !== r.id)) &&\n                      (j += t[n] || 1),\n                      ((o === M && a !== M) || (a === M && o !== M)) &&\n                        (C += t[n] || 1);\n                  }),\n                    (r.sumTot = j),\n                    (i.sumTot = C);\n                }\n              });\n          }\n          var I = {},\n            T = 0;\n          Object.keys(P).forEach(function (t) {\n            var e = P[t];\n            if (e.nodes && e.nodes.length) {\n              var n = String(T + 1);\n              n !== t &&\n                ((e.id = n),\n                (e.nodes = e.nodes.map(function (t) {\n                  return { id: t.id, clusterId: n };\n                })),\n                (P[n] = e),\n                (I[t] = n),\n                delete P[t],\n                T++);\n            } else delete P[t];\n          }),\n            E.forEach(function (t) {\n              var e = t.node,\n                n = t.clusterId;\n              e &&\n                ((e.clusterId = n),\n                e.clusterId &&\n                  I[e.clusterId] &&\n                  (e.clusterId = I[e.clusterId]));\n            });\n          var B = [],\n            D = {};\n          d.forEach(function (t) {\n            var e = t.source,\n              r = t.target,\n              i = t[n] || 1,\n              o = b[e].node.clusterId,\n              a = b[r].node.clusterId;\n            if (o && a) {\n              var s = \"\".concat(o, \"---\").concat(a);\n              if (D[s]) (D[s].weight += i), D[s].count++;\n              else {\n                var c = { source: o, target: a, weight: i, count: 1 };\n                (D[s] = c), B.push(c);\n              }\n            }\n          });\n          var F = [];\n          return (\n            Object.keys(P).forEach(function (t) {\n              F.push(P[t]);\n            }),\n            { clusters: F, clusterEdges: B }\n          );\n        },\n        Y = function (t, e, n, r, i, o, a, s) {\n          return (\n            void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === r && (r = 1e-4),\n            void 0 === i && (i = void 0),\n            void 0 === o && (o = []),\n            void 0 === a && (a = [\"id\"]),\n            void 0 === s && (s = 1),\n            F(t, e, n, r, !0, i, o, a, s)\n          );\n        },\n        X = function (t, e) {\n          var n;\n          void 0 === e && (e = 1);\n          for (\n            var r = Object(M.clone)(t),\n              i = r.nodes,\n              o = void 0 === i ? [] : i,\n              a = r.edges,\n              s = void 0 === a ? [] : a,\n              c = function () {\n                var t = g({ nodes: o, edges: s }),\n                  r = Object.keys(t);\n                r.sort(function (e, n) {\n                  var r, i;\n                  return (\n                    (null === (r = t[e]) || void 0 === r ? void 0 : r.degree) -\n                    (null === (i = t[n]) || void 0 === i ? void 0 : i.degree)\n                  );\n                });\n                var i = r[0];\n                if (\n                  !o.length ||\n                  (null === (n = t[i]) || void 0 === n ? void 0 : n.degree) >= e\n                )\n                  return \"break\";\n                var a = o.findIndex(function (t) {\n                  return t.id === i;\n                });\n                o.splice(a, 1),\n                  (s = s.filter(function (t) {\n                    return !(t.source === i || t.target === i);\n                  }));\n              };\n            ;\n\n          ) {\n            if (\"break\" === c()) break;\n          }\n          return { nodes: o, edges: s };\n        },\n        z = function (t, e, n) {\n          var r = [];\n          switch (t) {\n            case C.EuclideanDistance:\n              r = e[n];\n              break;\n            default:\n              r = [];\n          }\n          return r;\n        },\n        W = function (t, e, n, r, i, o) {\n          void 0 === e && (e = 3),\n            void 0 === n && (n = void 0),\n            void 0 === r && (r = []),\n            void 0 === i && (i = [\"id\"]),\n            void 0 === o && (o = C.EuclideanDistance);\n          var a = t.nodes,\n            s = void 0 === a ? [] : a,\n            c = t.edges,\n            u = void 0 === c ? [] : c,\n            h = { clusters: [{ id: \"0\", nodes: s }], clusterEdges: [] };\n          if (\n            o === C.EuclideanDistance &&\n            !s.every(function (t) {\n              return t.hasOwnProperty(n);\n            })\n          )\n            return h;\n          var l = [],\n            f = [];\n          if (\n            (o === C.EuclideanDistance && ((l = N(s, n)), (f = L(l, r, i))),\n            !f.length)\n          )\n            return h;\n          for (\n            var d = Object(M.uniq)(\n                f.map(function (t) {\n                  return t.join(\"\");\n                }),\n              ),\n              p = Math.min(e, s.length, d.length),\n              g = 0;\n            g < s.length;\n            g++\n          )\n            s[g].originIndex = g;\n          var v = [],\n            y = [],\n            m = [];\n          for (g = 0; g < p; g++)\n            if (0 === g) {\n              var b = Math.floor(Math.random() * s.length);\n              switch (o) {\n                case C.EuclideanDistance:\n                  v[g] = f[b];\n                  break;\n                default:\n                  v[g] = [];\n              }\n              y.push(b), (m[g] = [s[b]]), (s[b].clusterId = String(g));\n            } else {\n              for (\n                var x = -1 / 0,\n                  S = 0,\n                  w = function (t) {\n                    if (!y.includes(t)) {\n                      for (var e = 0, n = 0; n < v.length; n++) {\n                        var r = 0;\n                        switch (o) {\n                          case C.EuclideanDistance:\n                            r = D(f[s[t].originIndex], v[n], o);\n                        }\n                        e += r;\n                      }\n                      var i = e / v.length;\n                      i > x &&\n                        !v.find(function (e) {\n                          return Object(M.isEqual)(\n                            e,\n                            z(o, f, s[t].originIndex),\n                          );\n                        }) &&\n                        ((x = i), (S = t));\n                    }\n                  },\n                  O = 0;\n                O < s.length;\n                O++\n              )\n                w(O);\n              (v[g] = z(o, f, S)),\n                y.push(S),\n                (m[g] = [s[S]]),\n                (s[S].clusterId = String(g));\n            }\n          for (var k = 0; ; ) {\n            for (g = 0; g < s.length; g++) {\n              var j = 0,\n                E = 1 / 0;\n              if (0 !== k || !y.includes(g)) {\n                for (var P = 0; P < v.length; P++) {\n                  var A = 0;\n                  switch (o) {\n                    case C.EuclideanDistance:\n                      A = D(f[g], v[P], o);\n                  }\n                  A < E && ((E = A), (j = P));\n                }\n                if (void 0 !== s[g].clusterId)\n                  for (\n                    var I = m[Number(s[g].clusterId)].length - 1;\n                    I >= 0;\n                    I--\n                  )\n                    m[Number(s[g].clusterId)][I].id === s[g].id &&\n                      m[Number(s[g].clusterId)].splice(I, 1);\n                (s[g].clusterId = String(j)), m[j].push(s[g]);\n              }\n            }\n            var B = !1;\n            for (g = 0; g < m.length; g++) {\n              var _ = m[g],\n                R = new T([]);\n              for (P = 0; P < _.length; P++)\n                R = R.add(new T(f[_[P].originIndex]));\n              var F = R.avg(_.length);\n              F.equal(new T(v[g])) || ((B = !0), (v[g] = F.getArr()));\n            }\n            if (\n              (k++,\n              (s.every(function (t) {\n                return void 0 !== t.clusterId;\n              }) &&\n                B) ||\n                k >= 1e3)\n            )\n              break;\n          }\n          var Y = [],\n            X = {};\n          return (\n            u.forEach(function (t) {\n              var e,\n                n,\n                r = t.source,\n                i = t.target,\n                o =\n                  null ===\n                    (e = s.find(function (t) {\n                      return t.id === r;\n                    })) || void 0 === e\n                    ? void 0\n                    : e.clusterId,\n                a =\n                  null ===\n                    (n = s.find(function (t) {\n                      return t.id === i;\n                    })) || void 0 === n\n                    ? void 0\n                    : n.clusterId,\n                c = \"\".concat(o, \"---\").concat(a);\n              if (X[c]) X[c].count++;\n              else {\n                var u = { source: o, target: a, count: 1 };\n                (X[c] = u), Y.push(u);\n              }\n            }),\n            { clusters: m, clusterEdges: Y }\n          );\n        },\n        q = function (t, e) {\n          var n = new T(e),\n            r = n.norm2(),\n            i = new T(t),\n            o = i.norm2(),\n            a = n.dot(i),\n            s = r * o,\n            c = s ? a / s : 0;\n          return c;\n        },\n        V = function (t, e, n, r, i) {\n          void 0 === t && (t = []),\n            void 0 === n && (n = void 0),\n            void 0 === r && (r = []),\n            void 0 === i && (i = []);\n          var o = Object(M.clone)(\n              t.filter(function (t) {\n                return t.id !== e.id;\n              }),\n            ),\n            a = t.findIndex(function (t) {\n              return t.id === e.id;\n            }),\n            s = N(t, n),\n            c = L(s, r, i),\n            u = c[a],\n            h = [];\n          return (\n            o.forEach(function (t, n) {\n              if (t.id !== e.id) {\n                var r = c[n],\n                  i = q(r, u);\n                h.push(i), (t.cosineSimilarity = i);\n              }\n            }),\n            o.sort(function (t, e) {\n              return e.cosineSimilarity - t.cosineSimilarity;\n            }),\n            { allCosineSimilarity: h, similarNodes: o }\n          );\n        },\n        G = (function () {\n          function t(t) {\n            (this.count = t.length), (this.parent = {});\n            for (var e = 0, n = t; e < n.length; e++) {\n              var r = n[e];\n              this.parent[r] = r;\n            }\n          }\n          return (\n            (t.prototype.find = function (t) {\n              for (; this.parent[t] !== t; ) t = this.parent[t];\n              return t;\n            }),\n            (t.prototype.union = function (t, e) {\n              var n = this.find(t),\n                r = this.find(e);\n              n !== r &&\n                (n < r\n                  ? (this.parent[e] !== e && this.union(this.parent[e], t),\n                    (this.parent[e] = this.parent[t]))\n                  : (this.parent[t] !== t && this.union(this.parent[t], e),\n                    (this.parent[t] = this.parent[e])));\n            }),\n            (t.prototype.connected = function (t, e) {\n              return this.find(t) === this.find(e);\n            }),\n            t\n          );\n        })(),\n        H = function (t, e) {\n          return t - e;\n        },\n        U = (function () {\n          function t(t) {\n            void 0 === t && (t = H), (this.compareFn = t), (this.list = []);\n          }\n          return (\n            (t.prototype.getLeft = function (t) {\n              return 2 * t + 1;\n            }),\n            (t.prototype.getRight = function (t) {\n              return 2 * t + 2;\n            }),\n            (t.prototype.getParent = function (t) {\n              return 0 === t ? null : Math.floor((t - 1) / 2);\n            }),\n            (t.prototype.isEmpty = function () {\n              return this.list.length <= 0;\n            }),\n            (t.prototype.top = function () {\n              return this.isEmpty() ? void 0 : this.list[0];\n            }),\n            (t.prototype.delMin = function () {\n              var t = this.top(),\n                e = this.list.pop();\n              return (\n                this.list.length > 0 && ((this.list[0] = e), this.moveDown(0)),\n                t\n              );\n            }),\n            (t.prototype.insert = function (t) {\n              if (null !== t) {\n                this.list.push(t);\n                var e = this.list.length - 1;\n                return this.moveUp(e), !0;\n              }\n              return !1;\n            }),\n            (t.prototype.moveUp = function (t) {\n              for (\n                var e = this.getParent(t);\n                t && t > 0 && this.compareFn(this.list[e], this.list[t]) > 0;\n\n              ) {\n                var n = this.list[e];\n                (this.list[e] = this.list[t]),\n                  (this.list[t] = n),\n                  (t = e),\n                  (e = this.getParent(t));\n              }\n            }),\n            (t.prototype.moveDown = function (t) {\n              var e,\n                n = t,\n                r = this.getLeft(t),\n                i = this.getRight(t),\n                o = this.list.length;\n              null !== r &&\n              r < o &&\n              this.compareFn(this.list[n], this.list[r]) > 0\n                ? (n = r)\n                : null !== i &&\n                  i < o &&\n                  this.compareFn(this.list[n], this.list[i]) > 0 &&\n                  (n = i),\n                t !== n &&\n                  ((e = [this.list[n], this.list[t]]),\n                  (this.list[t] = e[0]),\n                  (this.list[n] = e[1]),\n                  this.moveDown(n));\n            }),\n            t\n          );\n        })(),\n        Z = function (t, e) {\n          var n = [],\n            r = t.nodes,\n            i = void 0 === r ? [] : r,\n            o = t.edges,\n            a = void 0 === o ? [] : o;\n          if (0 === i.length) return n;\n          var s = i[0],\n            c = new Set();\n          c.add(s);\n          var h = new U(function (t, n) {\n            return e ? t.weight - n.weight : 0;\n          });\n          for (\n            u(s.id, a).forEach(function (t) {\n              h.insert(t);\n            });\n            !h.isEmpty();\n\n          ) {\n            var l = h.delMin(),\n              f = l.source,\n              d = l.target;\n            (c.has(f) && c.has(d)) ||\n              (n.push(l),\n              c.has(f) ||\n                (c.add(f),\n                u(f, a).forEach(function (t) {\n                  h.insert(t);\n                })),\n              c.has(d) ||\n                (c.add(d),\n                u(d, a).forEach(function (t) {\n                  h.insert(t);\n                })));\n          }\n          return n;\n        },\n        K = function (t, e) {\n          var n = [],\n            r = t.nodes,\n            i = void 0 === r ? [] : r,\n            o = t.edges,\n            a = void 0 === o ? [] : o;\n          if (0 === i.length) return n;\n          var s = a.map(function (t) {\n            return t;\n          });\n          e &&\n            s.sort(function (t, e) {\n              return t.weight - e.weight;\n            });\n          for (\n            var c = new G(\n              i.map(function (t) {\n                return t.id;\n              }),\n            );\n            s.length > 0;\n\n          ) {\n            var u = s.shift(),\n              h = u.source,\n              l = u.target;\n            c.connected(h, l) || (n.push(u), c.union(h, l));\n          }\n          return n;\n        },\n        $ = function (t, e, n) {\n          return n ? { prim: Z, kruskal: K }[n](t, e) : K(t, e);\n        },\n        Q = function (t, e, n) {\n          \"number\" != typeof e && (e = 1e-6),\n            \"number\" != typeof n && (n = 0.85);\n          for (\n            var r,\n              i = 1,\n              o = 0,\n              a = 1e3,\n              s = t.nodes,\n              u = void 0 === s ? [] : s,\n              h = t.edges,\n              l = void 0 === h ? [] : h,\n              f = u.length,\n              d = {},\n              p = {},\n              v = 0;\n            v < f;\n            ++v\n          ) {\n            (d[(m = (O = u[v]).id)] = 1 / f), (p[m] = 1 / f);\n          }\n          for (var y = g(t); a > 0 && i > e; ) {\n            o = 0;\n            for (v = 0; v < f; ++v) {\n              var m = (O = u[v]).id;\n              if (((r = 0), 0 === y[O.id].inDegree)) d[m] = 0;\n              else {\n                for (var b = c(m, l, \"source\"), x = 0; x < b.length; ++x) {\n                  var S = b[x],\n                    w = y[S].outDegree;\n                  w > 0 && (r += p[S] / w);\n                }\n                (d[m] = n * r), (o += d[m]);\n              }\n            }\n            (o = (1 - o) / f), (i = 0);\n            for (v = 0; v < f; ++v) {\n              var O;\n              (r = d[(m = (O = u[v]).id)] + o),\n                (i += Math.abs(r - p[m])),\n                (p[m] = r);\n            }\n            a -= 1;\n          }\n          return p;\n        },\n        J = function (t, e, n, r) {\n          void 0 === t && (t = -1),\n            void 0 === e && (e = -1),\n            void 0 === n && (n = -1),\n            void 0 === r && (r = \"-1\"),\n            (this.id = t),\n            (this.from = e),\n            (this.to = n),\n            (this.label = r);\n        },\n        tt = (function () {\n          function t(t, e) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = \"-1\"),\n              (this.id = t),\n              (this.label = e),\n              (this.edges = []),\n              (this.edgeMap = {});\n          }\n          return (\n            (t.prototype.addEdge = function (t) {\n              this.edges.push(t), (this.edgeMap[t.id] = t);\n            }),\n            t\n          );\n        })(),\n        et = (function () {\n          function t(t, e, n) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = !0),\n              void 0 === n && (n = !1),\n              (this.id = t),\n              (this.edgeIdAutoIncrease = e),\n              (this.edges = []),\n              (this.nodes = []),\n              (this.nodeMap = {}),\n              (this.edgeMap = {}),\n              (this.nodeLabelMap = {}),\n              (this.edgeLabelMap = {}),\n              (this.counter = 0),\n              (this.directed = n);\n          }\n          return (\n            (t.prototype.getNodeNum = function () {\n              return this.nodes.length;\n            }),\n            (t.prototype.addNode = function (t, e) {\n              if (!this.nodeMap[t]) {\n                var n = new tt(t, e);\n                this.nodes.push(n),\n                  (this.nodeMap[t] = n),\n                  this.nodeLabelMap[e] || (this.nodeLabelMap[e] = []),\n                  this.nodeLabelMap[e].push(t);\n              }\n            }),\n            (t.prototype.addEdge = function (t, e, n, r) {\n              if (\n                ((this.edgeIdAutoIncrease || void 0 === t) &&\n                  (t = this.counter++),\n                !(\n                  this.nodeMap[e] &&\n                  this.nodeMap[n] &&\n                  this.nodeMap[n].edgeMap[t]\n                ))\n              ) {\n                var i = new J(t, e, n, r);\n                if (\n                  (this.edges.push(i),\n                  (this.edgeMap[t] = i),\n                  this.nodeMap[e].addEdge(i),\n                  this.edgeLabelMap[r] || (this.edgeLabelMap[r] = []),\n                  this.edgeLabelMap[r].push(i),\n                  !this.directed)\n                ) {\n                  var o = new J(t, n, e, r);\n                  this.nodeMap[n].addEdge(o), this.edgeLabelMap[r].push(o);\n                }\n              }\n            }),\n            t\n          );\n        })(),\n        nt = (function () {\n          function t(t, e, n, r, i) {\n            (this.fromNode = t),\n              (this.toNode = e),\n              (this.nodeEdgeNodeLabel = {\n                nodeLabel1: n || \"-1\",\n                edgeLabel: r || \"-1\",\n                nodeLabel2: i || \"-1\",\n              });\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              return (\n                this.fromNode === t.formNode &&\n                this.toNode === t.toNode &&\n                this.nodeEdgeNodeLabel === t.nodeEdgeNodeLabel\n              );\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            t\n          );\n        })(),\n        rt = (function () {\n          function t() {\n            (this.rmpath = []), (this.dfsEdgeList = []);\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              var e = this.dfsEdgeList.length;\n              if (e !== t.length) return !1;\n              for (var n = 0; n < e; n++)\n                if (this.dfsEdgeList[n] !== t[n]) return !1;\n              return !0;\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            (t.prototype.pushBack = function (t, e, n, r, i) {\n              return (\n                this.dfsEdgeList.push(new nt(t, e, n, r, i)), this.dfsEdgeList\n              );\n            }),\n            (t.prototype.toGraph = function (t, e) {\n              void 0 === t && (t = -1), void 0 === e && (e = !1);\n              var n = new et(t, !0, e);\n              return (\n                this.dfsEdgeList.forEach(function (t) {\n                  var e = t.fromNode,\n                    r = t.toNode,\n                    i = t.nodeEdgeNodeLabel,\n                    o = i.nodeLabel1,\n                    a = i.edgeLabel,\n                    s = i.nodeLabel2;\n                  \"-1\" !== o && n.addNode(e, o),\n                    \"-1\" !== s && n.addNode(r, s),\n                    \"-1\" !== o && s !== o && n.addEdge(void 0, e, r, a);\n                }),\n                n\n              );\n            }),\n            (t.prototype.buildRmpath = function () {\n              this.rmpath = [];\n              for (\n                var t = void 0, e = this.dfsEdgeList.length - 1;\n                e >= 0;\n                e--\n              ) {\n                var n = this.dfsEdgeList[e],\n                  r = n.fromNode,\n                  i = n.toNode;\n                r < i &&\n                  (void 0 === t || i === t) &&\n                  (this.rmpath.push(e), (t = r));\n              }\n              return this.rmpath;\n            }),\n            (t.prototype.getNodeNum = function () {\n              var t = {};\n              return (\n                this.dfsEdgeList.forEach(function (e) {\n                  t[e.fromNode] || (t[e.fromNode] = !0),\n                    t[e.toNode] || (t[e.toNode] = !0);\n                }),\n                Object.keys(t).length\n              );\n            }),\n            t\n          );\n        })(),\n        it = (function () {\n          function t(t) {\n            if (\n              ((this.his = {}),\n              (this.nodesUsed = {}),\n              (this.edgesUsed = {}),\n              (this.edges = []),\n              t)\n            ) {\n              for (; t; ) {\n                var e = t.edge;\n                this.edges.push(e),\n                  (this.nodesUsed[e.from] = 1),\n                  (this.nodesUsed[e.to] = 1),\n                  (this.edgesUsed[e.id] = 1),\n                  (t = t.preNode);\n              }\n              this.edges = this.edges.reverse();\n            }\n          }\n          return (\n            (t.prototype.hasNode = function (t) {\n              return 1 === this.nodesUsed[t.id];\n            }),\n            (t.prototype.hasEdge = function (t) {\n              return 1 === this.edgesUsed[t.id];\n            }),\n            t\n          );\n        })(),\n        ot = (function () {\n          function t(t) {\n            var e = t.graphs,\n              n = t.minSupport,\n              r = void 0 === n ? 2 : n,\n              i = t.minNodeNum,\n              o = void 0 === i ? 1 : i,\n              a = t.maxNodeNum,\n              s = void 0 === a ? 4 : a,\n              c = t.top,\n              u = void 0 === c ? 10 : c,\n              h = t.directed,\n              l = void 0 !== h && h,\n              f = t.verbose,\n              d = void 0 !== f && f;\n            (this.graphs = e),\n              (this.dfsCode = new rt()),\n              (this.support = 0),\n              (this.frequentSize1Subgraphs = []),\n              (this.frequentSubgraphs = []),\n              (this.minSupport = r),\n              (this.top = u),\n              (this.directed = l),\n              (this.counter = 0),\n              (this.maxNodeNum = s),\n              (this.minNodeNum = o),\n              (this.verbose = d),\n              this.maxNodeNum < this.minNodeNum &&\n                (this.maxNodeNum = this.minNodeNum),\n              (this.reportDF = []);\n          }\n          return (\n            (t.prototype.findForwardRootEdges = function (t, e) {\n              var n = this,\n                r = [],\n                i = t.nodeMap;\n              return (\n                e.edges.forEach(function (t) {\n                  (n.directed || e.label <= i[t.to].label) && r.push(t);\n                }),\n                r\n              );\n            }),\n            (t.prototype.findBackwardEdge = function (t, e, n, r) {\n              if (!this.directed && e === n) return null;\n              for (\n                var i = t.nodeMap, o = i[n.to].edges, a = o.length, s = 0;\n                s < a;\n                s++\n              ) {\n                var c = o[s];\n                if (!r.hasEdge(c) && c.to === e.from)\n                  if (this.directed) {\n                    if (\n                      i[e.from].label < i[n.to].label ||\n                      (i[e.from].label === i[n.to].label && e.label <= c.label)\n                    )\n                      return c;\n                  } else if (\n                    e.label < c.label ||\n                    (e.label === c.label && i[e.to].label <= i[n.to].label)\n                  )\n                    return c;\n              }\n              return null;\n            }),\n            (t.prototype.findForwardPureEdges = function (t, e, n, r) {\n              for (\n                var i = [],\n                  o = e.to,\n                  a = t.nodeMap[o].edges,\n                  s = a.length,\n                  c = 0;\n                c < s;\n                c++\n              ) {\n                var u = a[c],\n                  h = t.nodeMap[u.to];\n                n <= h.label && !r.hasNode(h) && i.push(u);\n              }\n              return i;\n            }),\n            (t.prototype.findForwardRmpathEdges = function (t, e, n, r) {\n              for (\n                var i = [],\n                  o = t.nodeMap,\n                  a = o[e.to].label,\n                  s = o[e.from].edges,\n                  c = s.length,\n                  u = 0;\n                u < c;\n                u++\n              ) {\n                var h = s[u],\n                  l = o[h.to].label;\n                e.to === h.to ||\n                  n > l ||\n                  r.hasNode(o[h.to]) ||\n                  ((e.label < h.label || (e.label === h.label && a <= l)) &&\n                    i.push(h));\n              }\n              return i;\n            }),\n            (t.prototype.getSupport = function (t) {\n              var e = {};\n              return (\n                t.forEach(function (t) {\n                  e[t.graphId] || (e[t.graphId] = !0);\n                }),\n                Object.keys(e).length\n              );\n            }),\n            (t.prototype.findMinLabel = function (t) {\n              var e = void 0;\n              return (\n                Object.keys(t).forEach(function (n) {\n                  var r = t[n],\n                    i = r.nodeLabel1,\n                    o = r.edgeLabel,\n                    a = r.nodeLabel2;\n                  e\n                    ? (i < e.nodeLabel1 ||\n                        (i === e.nodeLabel1 && o < e.edgeLabel) ||\n                        (i === e.nodeLabel1 &&\n                          o === e.edgeLabel &&\n                          a < e.nodeLabel2)) &&\n                      (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a })\n                    : (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a });\n                }),\n                e\n              );\n            }),\n            (t.prototype.isMin = function () {\n              var t = this,\n                e = this.dfsCode;\n              if (\n                (this.verbose && console.log(\"isMin checking\", e),\n                1 === e.dfsEdgeList.length)\n              )\n                return !0;\n              var n = this.directed,\n                r = e.toGraph(-1, n),\n                i = r.nodeMap,\n                o = new rt(),\n                a = {};\n              r.nodes.forEach(function (e) {\n                t.findForwardRootEdges(r, e).forEach(function (t) {\n                  var n = i[t.to],\n                    o = \"\"\n                      .concat(e.label, \"-\")\n                      .concat(t.label, \"-\")\n                      .concat(n.label);\n                  a[o] ||\n                    (a[o] = {\n                      projected: [],\n                      nodeLabel1: e.label,\n                      edgeLabel: t.label,\n                      nodeLabel2: n.label,\n                    });\n                  var s = { graphId: r.id, edge: t, preNode: null };\n                  a[o].projected.push(s);\n                });\n              });\n              var s = this.findMinLabel(a);\n              if (s) {\n                o.dfsEdgeList.push(\n                  new nt(0, 1, s.nodeLabel1, s.edgeLabel, s.nodeLabel2),\n                );\n                var c = \"\"\n                  .concat(s.nodeLabel1, \"-\")\n                  .concat(s.edgeLabel, \"-\")\n                  .concat(s.nodeLabel2);\n                return (function a(s) {\n                  for (\n                    var c = o.buildRmpath(),\n                      u = o.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                      h = o.dfsEdgeList[c[0]].toNode,\n                      l = {},\n                      f = !1,\n                      d = 0,\n                      p = n ? -1 : 0,\n                      g = function (e) {\n                        if (f) return \"break\";\n                        s.forEach(function (n) {\n                          var i = new it(n),\n                            a = t.findBackwardEdge(\n                              r,\n                              i.edges[c[e]],\n                              i.edges[c[0]],\n                              i,\n                            );\n                          a &&\n                            (l[a.label] ||\n                              (l[a.label] = {\n                                projected: [],\n                                edgeLabel: a.label,\n                              }),\n                            l[a.label].projected.push({\n                              graphId: r.id,\n                              edge: l,\n                              preNode: n,\n                            }),\n                            (d = o.dfsEdgeList[c[e]].fromNode),\n                            (f = !0));\n                        });\n                      },\n                      v = c.length - 1;\n                    v > p;\n                    v--\n                  ) {\n                    if (\"break\" === g(v)) break;\n                  }\n                  if (f) {\n                    var y = t.findMinLabel(l);\n                    o.dfsEdgeList.push(new nt(h, d, \"-1\", y.edgeLabel, \"-1\"));\n                    var m = o.dfsEdgeList.length - 1;\n                    return (\n                      t.dfsCode.dfsEdgeList[m] === o.dfsEdgeList[m] &&\n                      a(l[y.edgeLabel].projected)\n                    );\n                  }\n                  var b = {};\n                  f = !1;\n                  var x = 0;\n                  s.forEach(function (e) {\n                    var n = new it(e),\n                      o = t.findForwardPureEdges(r, n.edges[c[0]], u, n);\n                    o.length > 0 &&\n                      ((f = !0),\n                      (x = h),\n                      o.forEach(function (t) {\n                        var n = \"\".concat(t.label, \"-\").concat(i[t.to].label);\n                        b[n] ||\n                          (b[n] = {\n                            projected: [],\n                            edgeLabel: t.label,\n                            nodeLabel2: i[t.to].label,\n                          }),\n                          b[n].projected.push({\n                            graphId: r.id,\n                            edge: t,\n                            preNode: e,\n                          });\n                      }));\n                  });\n                  var S = c.length,\n                    w = function (e) {\n                      if (f) return \"break\";\n                      var n = c[e];\n                      s.forEach(function (e) {\n                        var a = new it(e),\n                          s = t.findForwardRmpathEdges(r, a.edges[n], u, a);\n                        s.length > 0 &&\n                          ((f = !0),\n                          (x = o.dfsEdgeList[n].fromNode),\n                          s.forEach(function (t) {\n                            var n = \"\"\n                              .concat(t.label, \"-\")\n                              .concat(i[t.to].label);\n                            b[n] ||\n                              (b[n] = {\n                                projected: [],\n                                edgeLabel: t.label,\n                                nodeLabel2: i[t.to].label,\n                              }),\n                              b[n].projected.push({\n                                graphId: r.id,\n                                edge: t,\n                                preNode: e,\n                              });\n                          }));\n                      });\n                    };\n                  for (v = 0; v < S; v++) {\n                    if (\"break\" === w(v)) break;\n                  }\n                  if (!f) return !0;\n                  var O = t.findMinLabel(b);\n                  o.dfsEdgeList.push(\n                    new nt(x, h + 1, \"-1\", O.edgeLabel, O.nodeLabel2),\n                  );\n                  var M = o.dfsEdgeList.length - 1;\n                  return (\n                    e.dfsEdgeList[M] === o.dfsEdgeList[M] &&\n                    a(\n                      b[\"\".concat(O.edgeLabel, \"-\").concat(O.nodeLabel2)]\n                        .projected,\n                    )\n                  );\n                })(a[c].projected);\n              }\n            }),\n            (t.prototype.report = function () {\n              if (!(this.dfsCode.getNodeNum() < this.minNodeNum)) {\n                this.counter++;\n                var t = this.dfsCode.toGraph(this.counter, this.directed);\n                this.frequentSubgraphs.push(Object(M.clone)(t));\n              }\n            }),\n            (t.prototype.subGraphMining = function (t) {\n              var e = this;\n              if (!(this.getSupport(t) < this.minSupport) && this.isMin()) {\n                this.report();\n                var n = this.dfsCode.getNodeNum(),\n                  r = this.dfsCode.buildRmpath(),\n                  i = this.dfsCode.dfsEdgeList[r[0]].toNode,\n                  o = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                  a = {},\n                  s = {};\n                t.forEach(function (t) {\n                  for (\n                    var c = e.graphs[t.graphId],\n                      u = c.nodeMap,\n                      h = new it(t),\n                      l = r.length - 1;\n                    l >= 0;\n                    l--\n                  ) {\n                    var f = e.findBackwardEdge(\n                      c,\n                      h.edges[r[l]],\n                      h.edges[r[0]],\n                      h,\n                    );\n                    if (f) {\n                      var d = \"\"\n                        .concat(e.dfsCode.dfsEdgeList[r[l]].fromNode, \"-\")\n                        .concat(f.label);\n                      s[d] ||\n                        (s[d] = {\n                          projected: [],\n                          toNodeId: e.dfsCode.dfsEdgeList[r[l]].fromNode,\n                          edgeLabel: f.label,\n                        }),\n                        s[d].projected.push({\n                          graphId: t.graphId,\n                          edge: f,\n                          preNode: t,\n                        });\n                    }\n                  }\n                  if (!(n >= e.maxNodeNum)) {\n                    e.findForwardPureEdges(c, h.edges[r[0]], o, h).forEach(\n                      function (e) {\n                        var n = \"\"\n                          .concat(i, \"-\")\n                          .concat(e.label, \"-\")\n                          .concat(u[e.to].label);\n                        a[n] ||\n                          (a[n] = {\n                            projected: [],\n                            fromNodeId: i,\n                            edgeLabel: e.label,\n                            nodeLabel2: u[e.to].label,\n                          }),\n                          a[n].projected.push({\n                            graphId: t.graphId,\n                            edge: e,\n                            preNode: t,\n                          });\n                      },\n                    );\n                    var p = function (n) {\n                      e.findForwardRmpathEdges(c, h.edges[r[n]], o, h).forEach(\n                        function (i) {\n                          var o = \"\"\n                            .concat(e.dfsCode.dfsEdgeList[r[n]].fromNode, \"-\")\n                            .concat(i.label, \"-\")\n                            .concat(u[i.to].label);\n                          a[o] ||\n                            (a[o] = {\n                              projected: [],\n                              fromNodeId: e.dfsCode.dfsEdgeList[r[n]].fromNode,\n                              edgeLabel: i.label,\n                              nodeLabel2: u[i.to].label,\n                            }),\n                            a[o].projected.push({\n                              graphId: t.graphId,\n                              edge: i,\n                              preNode: t,\n                            });\n                        },\n                      );\n                    };\n                    for (l = 0; l < r.length; l++) p(l);\n                  }\n                }),\n                  Object.keys(s).forEach(function (t) {\n                    var n = s[t],\n                      r = n.toNodeId,\n                      o = n.edgeLabel;\n                    e.dfsCode.dfsEdgeList.push(new nt(i, r, \"-1\", o, \"-1\")),\n                      e.subGraphMining(s[t].projected),\n                      e.dfsCode.dfsEdgeList.pop();\n                  }),\n                  Object.keys(a).forEach(function (t) {\n                    var n = a[t],\n                      r = n.fromNodeId,\n                      o = n.edgeLabel,\n                      s = n.nodeLabel2;\n                    e.dfsCode.dfsEdgeList.push(new nt(r, i + 1, \"-1\", o, s)),\n                      e.subGraphMining(a[t].projected),\n                      e.dfsCode.dfsEdgeList.pop();\n                  });\n              }\n            }),\n            (t.prototype.generate1EdgeFrequentSubGraphs = function () {\n              var t = this.graphs,\n                e = this.directed,\n                n = this.minSupport,\n                r = this.frequentSize1Subgraphs,\n                i = {},\n                o = {},\n                a = {},\n                s = {};\n              return (\n                Object.keys(t).forEach(function (n) {\n                  var r = t[n],\n                    c = r.nodeMap;\n                  r.nodes.forEach(function (t, r) {\n                    var u = t.label,\n                      h = \"\".concat(n, \"-\").concat(u);\n                    if (!a[h]) {\n                      var l = i[u] || 0;\n                      l++, (i[u] = l);\n                    }\n                    (a[h] = { graphKey: n, label: u }),\n                      t.edges.forEach(function (t) {\n                        var r = u,\n                          i = c[t.to].label;\n                        if (!e && r > i) {\n                          var a = i;\n                          (i = r), (r = a);\n                        }\n                        var h = t.label,\n                          l = \"\"\n                            .concat(n, \"-\")\n                            .concat(r, \"-\")\n                            .concat(h, \"-\")\n                            .concat(i),\n                          f = \"\".concat(r, \"-\").concat(h, \"-\").concat(i);\n                        if (!o[f]) {\n                          var d = o[f] || 0;\n                          d++, (o[f] = d);\n                        }\n                        s[l] = {\n                          graphId: n,\n                          nodeLabel1: r,\n                          edgeLabel: h,\n                          nodeLabel2: i,\n                        };\n                      });\n                  });\n                }),\n                Object.keys(i).forEach(function (t) {\n                  if (!(i[t] < n)) {\n                    var e = { nodes: [], edges: [] };\n                    e.nodes.push({ id: \"0\", label: t }), r.push(e);\n                  }\n                }),\n                r\n              );\n            }),\n            (t.prototype.run = function () {\n              var t = this;\n              if (\n                ((this.frequentSize1Subgraphs =\n                  this.generate1EdgeFrequentSubGraphs()),\n                !(this.maxNodeNum < 2))\n              ) {\n                var e = this.graphs,\n                  n = (this.directed, {});\n                Object.keys(e).forEach(function (r) {\n                  var i = e[r],\n                    o = i.nodeMap;\n                  i.nodes.forEach(function (e) {\n                    t.findForwardRootEdges(i, e).forEach(function (t) {\n                      var i = o[t.to],\n                        a = \"\"\n                          .concat(e.label, \"-\")\n                          .concat(t.label, \"-\")\n                          .concat(i.label);\n                      n[a] ||\n                        (n[a] = {\n                          projected: [],\n                          nodeLabel1: e.label,\n                          edgeLabel: t.label,\n                          nodeLabel2: i.label,\n                        });\n                      var s = { graphId: r, edge: t, preNode: null };\n                      n[a].projected.push(s);\n                    });\n                  });\n                }),\n                  Object.keys(n).forEach(function (e) {\n                    var r = n[e],\n                      i = r.projected,\n                      o = r.nodeLabel1,\n                      a = r.edgeLabel,\n                      s = r.nodeLabel2;\n                    t.dfsCode.dfsEdgeList.push(new nt(0, 1, o, a, s)),\n                      t.subGraphMining(i),\n                      t.dfsCode.dfsEdgeList.pop();\n                  });\n              }\n            }),\n            t\n          );\n        })(),\n        at = function (t) {\n          var e = t.graphs,\n            n = t.directed,\n            r = void 0 !== n && n,\n            i = t.nodeLabelProp,\n            o = void 0 === i ? \"cluster\" : i,\n            a = t.edgeLabelProp,\n            s = void 0 === a ? \"cluster\" : a,\n            c = (function (t, e, n, r) {\n              var i = {};\n              return (\n                Object.keys(t).forEach(function (o, a) {\n                  var s = t[o],\n                    c = new et(a, !0, e),\n                    u = {};\n                  s.nodes.forEach(function (t, e) {\n                    c.addNode(e, t[n]), (u[t.id] = e);\n                  }),\n                    s.edges.forEach(function (t, e) {\n                      var n = u[t.source],\n                        i = u[t.target];\n                      c.addEdge(-1, n, i, t[r]);\n                    }),\n                    c && c.getNodeNum() && (i[c.id] = c);\n                }),\n                i\n              );\n            })(e, r, o, s),\n            u = t.minSupport,\n            h = t.maxNodeNum,\n            l = t.minNodeNum,\n            f = t.verbose,\n            d = t.top,\n            p = new ot({\n              graphs: c,\n              minSupport: u,\n              maxNodeNum: h,\n              minNodeNum: l,\n              top: d,\n              verbose: f,\n              directed: r,\n            });\n          return (\n            p.run(),\n            (function (t, e, n) {\n              var r = [];\n              return (\n                t.forEach(function (t) {\n                  var i = { nodes: [], edges: [] };\n                  t.nodes.forEach(function (t) {\n                    var n;\n                    i.nodes.push(\n                      (((n = { id: \"\".concat(t.id) })[e] = t.label), n),\n                    );\n                  }),\n                    t.edges.forEach(function (t) {\n                      var e;\n                      i.edges.push(\n                        (((e = {\n                          source: \"\".concat(t.from),\n                          target: \"\".concat(t.to),\n                        })[n] = t.label),\n                        e),\n                      );\n                    }),\n                    r.push(i);\n                }),\n                r\n              );\n            })(p.frequentSubgraphs, o, s)\n          );\n        },\n        st = function (t, e, n, r) {\n          void 0 === n && (n = \"cluster\"), void 0 === r && (r = 2);\n          var i = [],\n            o = t.nodes;\n          return (\n            e.forEach(function (t, e) {\n              i.push(ct(o, t, e, n, r));\n            }),\n            i\n          );\n        },\n        ct = function (t, e, n, r, i) {\n          var o = [n],\n            a = [],\n            s = {};\n          return (\n            e.forEach(function (e, c) {\n              if (e <= i && n !== c) {\n                o.push(c), a.push(t[c]);\n                var u = t[c][r];\n                s[u]\n                  ? (s[u].count++, s[u].dists.push(e))\n                  : (s[u] = { count: 1, dists: [e] });\n              }\n            }),\n            Object.keys(s).forEach(function (t) {\n              s[t].dists = s[t].dists.sort(function (t, e) {\n                return t - e;\n              });\n            }),\n            {\n              nodeIdx: n,\n              nodeId: t[n].id,\n              nodeIdxs: o,\n              neighbors: a,\n              neighborNum: o.length - 1,\n              nodeLabelCountMap: s,\n            }\n          );\n        },\n        ut = function (t, e, n, r) {\n          var i = n.nodes;\n          return (\n            r || (r = {}),\n            Object.keys(t).forEach(function (o) {\n              var a, s;\n              if (!r || !r[o]) {\n                r[o] = { nodes: [], edges: [] };\n                var c = t[o],\n                  u =\n                    null === (a = e[c.start]) || void 0 === a\n                      ? void 0\n                      : a.nodeIdxs,\n                  h =\n                    null === (s = e[c.end]) || void 0 === s\n                      ? void 0\n                      : s.nodeIdxs;\n                if (u && h) {\n                  var l = new Set(h),\n                    f = u.filter(function (t) {\n                      return l.has(t);\n                    });\n                  if (f && f.length) {\n                    for (var d = {}, p = f.length, g = 0; g < p; g++) {\n                      var v = i[f[g]];\n                      r[o].nodes.push(v), (d[v.id] = !0);\n                    }\n                    n.edges.forEach(function (t) {\n                      d[t.source] && d[t.target] && r[o].edges.push(t);\n                    });\n                  }\n                }\n              }\n            }),\n            r\n          );\n        },\n        ht = function (t, e, n, r) {\n          var i,\n            o,\n            a = {};\n          t.nodes.forEach(function (t) {\n            a[t.id] = t;\n          });\n          var s = 0;\n          return !(null === (i = null == e ? void 0 : e.edges) || void 0 === i\n            ? void 0\n            : i.length) ||\n            (null === (o = null == e ? void 0 : e.nodes) || void 0 === o\n              ? void 0\n              : o.length) < 2\n            ? 0\n            : (t.edges.forEach(function (t) {\n                var i = a[t.source][n],\n                  o = a[t.target][n],\n                  c = null == e ? void 0 : e.nodes[0][n],\n                  u = null == e ? void 0 : e.nodes[1][n],\n                  h = null == e ? void 0 : e.edges[0][r];\n                t[r] === h &&\n                  ((i === c && o === u) || (i === u && o === c)) &&\n                  s++;\n              }),\n              s);\n        },\n        lt = function (t, e) {\n          var n = {},\n            r = {};\n          return (\n            t.forEach(function (t, i) {\n              n[t.id] = {\n                idx: i,\n                node: t,\n                degree: 0,\n                inDegree: 0,\n                outDegree: 0,\n              };\n              var o = t[e];\n              r[o] || (r[o] = []), r[o].push(t);\n            }),\n            { nodeMap: n, nodeLabelMap: r }\n          );\n        },\n        ft = function (t, e, n) {\n          var r = {},\n            i = {};\n          return (\n            t.forEach(function (t, o) {\n              r[\"\".concat(h)] = { idx: o, edge: t };\n              var a = t[e];\n              i[a] || (i[a] = []), i[a].push(t);\n              var s = n[t.source];\n              s && (s.degree++, s.outDegree++);\n              var c = n[t.target];\n              c && (c.degree++, c.inDegree++);\n            }),\n            { edgeMap: r, edgeLabelMap: i }\n          );\n        },\n        dt = function (t, e, n) {\n          var r = e.length,\n            i = {};\n          return (\n            e.forEach(function (e, o) {\n              for (var a = n ? 0 : o + 1, s = t[o].id, c = a; c < r; c++)\n                if (o !== c) {\n                  var u = t[c].id,\n                    h = e[c];\n                  (i[\"\".concat(s, \"-\").concat(u)] = h),\n                    n || (i[\"\".concat(u, \"-\").concat(s)] = h);\n                }\n            }),\n            i\n          );\n        },\n        pt = function (t, e, n, r, i, o, a, s, c, u, h) {\n          var l,\n            f = \"\".concat(e.id, \"-\").concat(n.id);\n          if (u && u[f]) return u[f];\n          var d = h ? h[f] : void 0;\n          if (!d) {\n            var p =\n              (((l = {})[f] = {\n                start: r[e.id].idx,\n                end: r[n.id].idx,\n                distance: i,\n              }),\n              l);\n            d = (h = ut(p, o, t, h))[f];\n          }\n          return ht(d, a, s, c);\n        },\n        gt = function (t, e, n, r) {\n          var i,\n            o,\n            a,\n            s = null === (i = t[e]) || void 0 === i ? void 0 : i.degree,\n            c = null === (o = t[e]) || void 0 === o ? void 0 : o.inDegree,\n            u = null === (a = t[e]) || void 0 === a ? void 0 : a.outDegree;\n          return (\n            void 0 === t[e] &&\n              ((s = 1 / 0),\n              (c = 1 / 0),\n              (u = 1 / 0),\n              r[e].forEach(function (t) {\n                var e = n[t.id].degree;\n                s > e && (s = e);\n                var r = n[t.id].inDegree;\n                c > r && (c = r);\n                var i = n[t.id].outDegree;\n                u > i && (u = i);\n              }),\n              (t[e] = { degree: s, inDegree: c, outDegree: u })),\n            {\n              minPatternNodeLabelDegree: s,\n              minPatternNodeLabelInDegree: c,\n              minPatternNodeLabelOutDegree: u,\n            }\n          );\n        },\n        vt = function (t, e, n, r, i, o, a) {\n          var s;\n          if (\n            (void 0 === n && (n = !1),\n            void 0 === o && (o = \"cluster\"),\n            void 0 === a && (a = \"cluster\"),\n            t && t.nodes)\n          ) {\n            var c = t.nodes.length;\n            if (c) {\n              var u = A(t, n),\n                h = A(e, n),\n                l = dt(t.nodes, u, n),\n                f = dt(e.nodes, h, n),\n                d = lt(t.nodes, o),\n                p = d.nodeMap,\n                g = d.nodeLabelMap,\n                v = lt(e.nodes, o),\n                y = v.nodeMap,\n                m = v.nodeLabelMap;\n              ft(t.edges, a, p);\n              var b = ft(e.edges, a, y).edgeLabelMap,\n                x = [];\n              null == h ||\n                h.forEach(function (t) {\n                  x = x.concat(t);\n                }),\n                i ||\n                  (i = Math.max.apply(\n                    Math,\n                    Object(O.f)(Object(O.f)([], x, !1), [2], !1),\n                  )),\n                r || (r = i);\n              var S = st(t, u, o, r),\n                w = st(e, h, o, r),\n                M = (function (t, e, n, r, i) {\n                  var o = Math.ceil(n / e),\n                    a = {},\n                    s = 0;\n                  return (\n                    r.forEach(function (t, r) {\n                      for (\n                        var c = 0, u = 0, h = t.nodeIdxs, l = t.neighborNum - 1;\n                        c < o;\n\n                      ) {\n                        for (\n                          var f = h[1 + Math.floor(Math.random() * l)], d = 0;\n                          (a[\"\".concat(r, \"-\").concat(f)] ||\n                            a[\"\".concat(f, \"-\").concat(r)]) &&\n                          ((f = Math.floor(Math.random() * e)), !(++d > 2 * e));\n\n                        );\n                        if (\n                          d < 2 * e &&\n                          ((a[\"\".concat(r, \"-\").concat(f)] = {\n                            start: r,\n                            end: f,\n                            distance: i[r][f],\n                          }),\n                          c++,\n                          ++s >= n)\n                        )\n                          return a;\n                        if (++u > 2 * e) break;\n                      }\n                      c < o && (o = (o + (o - c)) / (e - r - 1));\n                    }),\n                    a\n                  );\n                })(0, c, Math.min(100, (c * (c - 1)) / 2), S, u),\n                j = ut(M, S, t),\n                C = at({\n                  graphs: j,\n                  nodeLabelProp: o,\n                  edgeLabelProp: a,\n                  minSupport: 1,\n                  minNodeNum: 1,\n                  maxNodeNum: 4,\n                  directed: n,\n                }).slice(0, 10),\n                E = C.length,\n                P = [];\n              C.forEach(function (t, e) {\n                (P[e] = {}),\n                  Object.keys(j).forEach(function (n) {\n                    var r = j[n],\n                      i = ht(r, t, o, a);\n                    P[e][n] = i;\n                  });\n              });\n              var I = (function (t, e, n) {\n                  for (\n                    var r = 1 / 0,\n                      i = 0,\n                      o = function (e) {\n                        var n = t[e],\n                          o = Object.keys(n).sort(function (t, e) {\n                            return n[t] - n[e];\n                          }),\n                          a = [];\n                        o.forEach(function (t, e) {\n                          a[e % 10] ||\n                            (a[e % 10] = {\n                              graphs: [],\n                              totalCount: 0,\n                              aveCount: 0,\n                            }),\n                            a[e % 10].graphs.push(t),\n                            (a[e % 10].totalCount += n[t]);\n                        });\n                        var s = 0,\n                          c = [];\n                        a.forEach(function (t) {\n                          var e = t.totalCount / t.graphs.length;\n                          (t.aveCount = e), c.push(e);\n                          var r = 0,\n                            i = t.length;\n                          t.graphs.forEach(function (e, i) {\n                            var o = n[e];\n                            t.graphs.forEach(function (t, e) {\n                              i !== e && (r += Math.abs(o - n[t]));\n                            });\n                          }),\n                            (s += r /= (i * (i - 1)) / 2);\n                        }),\n                          (s /= a.length);\n                        var u = 0;\n                        c.forEach(function (t, e) {\n                          c.forEach(function (n, r) {\n                            e !== r && (u += Math.abs(t - n));\n                          }),\n                            (u /= (c.length * (c.length - 1)) / 2);\n                        });\n                        var h = u - s;\n                        r < h && ((r = h), (i = e));\n                      },\n                      a = 0;\n                    a < e;\n                    a++\n                  )\n                    o(a);\n                  return { structure: n[i], structureCountMap: t[i] };\n                })(P, E, C),\n                T = I.structure,\n                N = I.structureCountMap,\n                B = e.nodes[0],\n                L = [],\n                D = null === (s = e.nodes[0]) || void 0 === s ? void 0 : s[o],\n                _ = -1 / 0;\n              e.nodes.forEach(function (t) {\n                var e = t[o],\n                  n = g[e];\n                (null == n ? void 0 : n.length) > _ &&\n                  ((_ = n.length), (L = n), (D = e), (B = t));\n              });\n              var R = {},\n                F = {},\n                Y = {},\n                X = {},\n                z = {},\n                W = {};\n              Object.keys(m).forEach(function (r, i) {\n                (z[r] = []), n && (W[r] = []);\n                var s = -1 / 0,\n                  c = m[r],\n                  u = {};\n                c.forEach(function (t) {\n                  var e = f[\"\".concat(B.id, \"-\").concat(t.id)];\n                  if (\n                    (e && z[r].push(e),\n                    s < e && (s = e),\n                    (u[\"\".concat(B.id, \"-\").concat(t.id)] = {\n                      start: 0,\n                      end: y[t.id].idx,\n                      distance: e,\n                    }),\n                    n)\n                  ) {\n                    var i = f[\"\".concat(t.id, \"-\").concat(B.id)];\n                    i && W[r].push(i);\n                  }\n                }),\n                  (z[r] = z[r].sort(function (t, e) {\n                    return t - e;\n                  })),\n                  n &&\n                    (W[r] = W[r].sort(function (t, e) {\n                      return t - e;\n                    })),\n                  (F = ut(u, w, e, F));\n                var h = [];\n                if (\n                  (Object.keys(u).forEach(function (t) {\n                    if (Y[t]) h.push(Y[t]);\n                    else {\n                      var e = F[t];\n                      (Y[t] = ht(e, T, o, a)), h.push(Y[t]);\n                    }\n                  }),\n                  (h = h.sort(function (t, e) {\n                    return e - t;\n                  })),\n                  (X[\"\".concat(B.id, \"-\").concat(r)] = h),\n                  r !== D)\n                )\n                  for (\n                    var d = function (e) {\n                        var n = L[e],\n                          i = S[p[n.id].idx],\n                          s = i.nodeLabelCountMap[r],\n                          c = m[r].length;\n                        if (!s || s.count < c)\n                          return L.splice(e, 1), \"continue\";\n                        for (var u = !1, f = 0; f < c; f++)\n                          if (s.dists[f] > z[r][f]) {\n                            u = !0;\n                            break;\n                          }\n                        if (u) return L.splice(e, 1), \"continue\";\n                        var d = {};\n                        i.neighbors.forEach(function (t) {\n                          var e = l[\"\".concat(n.id, \"-\").concat(t.id)];\n                          d[\"\".concat(n.id, \"-\").concat(t.id)] = {\n                            start: p[n.id].idx,\n                            end: p[t.id].idx,\n                            distance: e,\n                          };\n                        }),\n                          (j = ut(d, S, t, j));\n                        var g = [];\n                        Object.keys(d).forEach(function (t) {\n                          if (N[t]) g.push(N[t]);\n                          else {\n                            var e = j[t];\n                            (N[t] = ht(e, T, o, a)), g.push(N[t]);\n                          }\n                        }),\n                          (g = g.sort(function (t, e) {\n                            return e - t;\n                          }));\n                        var v = !1;\n                        for (f = 0; f < c; f++)\n                          if (g[f] < h[f]) {\n                            v = !0;\n                            break;\n                          }\n                        return v ? (L.splice(e, 1), \"continue\") : void 0;\n                      },\n                      g = ((null == L ? void 0 : L.length) || 0) - 1;\n                    g >= 0;\n                    g--\n                  )\n                    d(g);\n              });\n              var q = [];\n              null == L ||\n                L.forEach(function (r) {\n                  for (\n                    var s = p[r.id].idx,\n                      c = ct(t.nodes, u[s], s, o, i).neighbors,\n                      h = !1,\n                      f = c.length - 1;\n                    f >= 0;\n                    f--\n                  ) {\n                    if (c.length + 1 < e.nodes.length) return void (h = !0);\n                    var d = c[f],\n                      g = d[o];\n                    if (m[g] && m[g].length)\n                      if (z[g] && z[g].length) {\n                        var v = \"\".concat(r.id, \"-\").concat(d.id),\n                          b = l[v],\n                          x = z[g].length - 1;\n                        if (b > z[g][x]) c.splice(f, 1);\n                        else {\n                          if (n) {\n                            var w = \"\".concat(d.id, \"-\").concat(r.id),\n                              O = l[w];\n                            if (((x = W[g].length - 1), O > W[g][x])) {\n                              c.splice(f, 1);\n                              continue;\n                            }\n                          }\n                          var M = N[v]\n                              ? N[v]\n                              : pt(t, r, d, p, b, S, T, o, a, N, j),\n                            k = \"\".concat(B.id, \"-\").concat(g);\n                          if (M < X[k][X[k].length - 1]) c.splice(f, 1);\n                          else {\n                            var C = gt(R, g, y, m),\n                              E = C.minPatternNodeLabelDegree;\n                            C.minPatternNodeLabelInDegree,\n                              C.minPatternNodeLabelOutDegree;\n                            p[d.id].degree < E && c.splice(f, 1);\n                          }\n                        }\n                      } else c.splice(f, 1);\n                    else c.splice(f, 1);\n                  }\n                  h || q.push({ nodes: [r].concat(c) });\n                });\n              var V = k(e, B.id, !1).length,\n                G = {};\n              n\n                ? (Object.keys(V).forEach(function (t) {\n                    var e = y[t].node[o];\n                    G[e] ? G[e].push(V[t]) : (G[e] = [V[t]]);\n                  }),\n                  Object.keys(G).forEach(function (t) {\n                    G[t].sort(function (t, e) {\n                      return t - e;\n                    });\n                  }))\n                : (G = z);\n              for (\n                var H = function (r) {\n                    var i = q[r],\n                      s = i.nodes[0],\n                      c = {},\n                      u = {};\n                    i.nodes.forEach(function (t, e) {\n                      u[t.id] = {\n                        idx: e,\n                        node: t,\n                        degree: 0,\n                        inDegree: 0,\n                        outDegree: 0,\n                      };\n                      var n = t[o];\n                      c[n] ? c[n]++ : (c[n] = 1);\n                    });\n                    var h = [],\n                      l = {};\n                    t.edges.forEach(function (t) {\n                      u[t.source] &&\n                        u[t.target] &&\n                        (h.push(t),\n                        l[t[a]] ? l[t[a]]++ : (l[t[a]] = 1),\n                        u[t.source].degree++,\n                        u[t.target].degree++,\n                        u[t.source].outDegree++,\n                        u[t.target].inDegree++);\n                    });\n                    for (\n                      var f = Object.keys(b).length, d = !1, g = 0;\n                      g < f;\n                      g++\n                    ) {\n                      var v = Object.keys(b)[g];\n                      if (!l[v] || l[v] < b[v].length) {\n                        d = !0;\n                        break;\n                      }\n                    }\n                    if (d) return q.splice(r, 1), \"continue\";\n                    var x = h.length;\n                    if (x < e.edges.length) return q.splice(r, 1), \"break\";\n                    var S = !1,\n                      w = function (t) {\n                        var e = h[t],\n                          r = e[a],\n                          i = b[r];\n                        if (!i || !i.length)\n                          return (\n                            l[r]--,\n                            i && l[r] < i.length\n                              ? ((S = !0), \"break\")\n                              : (h.splice(t, 1),\n                                u[e.source].degree--,\n                                u[e.target].degree--,\n                                u[e.source].outDegree--,\n                                u[e.target].inDegree--,\n                                \"continue\")\n                          );\n                        var s = u[e.source].node[o],\n                          c = u[e.target].node[o],\n                          f = !1;\n                        return (\n                          i.forEach(function (t) {\n                            var e = y[t.source].node,\n                              r = y[t.target].node;\n                            e[o] === s && r[o] === c && (f = !0),\n                              n || e[o] !== c || r[o] !== s || (f = !0);\n                          }),\n                          f\n                            ? void 0\n                            : (l[r]--,\n                              i && l[r] < i.length\n                                ? ((S = !0), \"break\")\n                                : (h.splice(t, 1),\n                                  u[e.source].degree--,\n                                  u[e.target].degree--,\n                                  u[e.source].outDegree--,\n                                  u[e.target].inDegree--,\n                                  \"continue\"))\n                        );\n                      };\n                    for (g = x - 1; g >= 0; g--) {\n                      if (\"break\" === w(g)) break;\n                    }\n                    if (S) return q.splice(r, 1), \"continue\";\n                    i.edges = h;\n                    var O = k(i, i.nodes[0].id, !1).length;\n                    if (\n                      (Object.keys(O)\n                        .reverse()\n                        .forEach(function (t) {\n                          if (t !== i.nodes[0].id && !S) {\n                            if (O[t] === 1 / 0) {\n                              var e = u[t].node[o];\n                              if ((c[e]--, c[e] < m[e].length))\n                                return void (S = !0);\n                              var n = i.nodes.indexOf(u[t].node);\n                              return i.nodes.splice(n, 1), void (u[t] = void 0);\n                            }\n                            var r = p[t].node[o];\n                            if (\n                              !G[r] ||\n                              !G[r].length ||\n                              O[t] > G[r][G[r].length - 1]\n                            ) {\n                              e = u[t].node[o];\n                              if ((c[e]--, c[e] < m[e].length))\n                                return void (S = !0);\n                              n = i.nodes.indexOf(u[t].node);\n                              i.nodes.splice(n, 1), (u[t] = void 0);\n                            }\n                          }\n                        }),\n                      S)\n                    )\n                      return q.splice(r, 1), \"continue\";\n                    for (var M = !0, j = 0; M && !S; ) {\n                      if (\n                        ((M = !1),\n                        n\n                          ? u[s.id].degree < y[B.id].degree ||\n                            u[s.id].inDegree < y[B.id].inDegree ||\n                            u[s.id].outDegree < y[B.id].outDegree\n                          : u[s.id].degree < y[B.id].degree)\n                      ) {\n                        S = !0;\n                        break;\n                      }\n                      if (c[s[o]] < m[s[o]].length) {\n                        S = !0;\n                        break;\n                      }\n                      for (var C = i.nodes.length - 1; C >= 0; C--) {\n                        var E = i.nodes[C],\n                          P = u[E.id].degree,\n                          A = u[E.id].inDegree,\n                          I = u[E.id].outDegree,\n                          T = E[o],\n                          N = gt(R, T, y, m),\n                          L = N.minPatternNodeLabelDegree,\n                          D = N.minPatternNodeLabelInDegree,\n                          _ = N.minPatternNodeLabelOutDegree;\n                        if (n ? P < L || A < D || I < _ : P < L) {\n                          if ((c[E[o]]--, c[E[o]] < m[E[o]].length)) {\n                            S = !0;\n                            break;\n                          }\n                          i.nodes.splice(C, 1), (u[E.id] = void 0), (M = !0);\n                        }\n                      }\n                      if (S || (!M && 0 !== j)) break;\n                      for (var F = (x = h.length) - 1; F >= 0; F--) {\n                        var Y = h[F];\n                        if (!u[Y.source] || !u[Y.target]) {\n                          h.splice(F, 1);\n                          var X = Y[a];\n                          if (\n                            (l[X]--,\n                            u[Y.source] &&\n                              (u[Y.source].degree--, u[Y.source].outDegree--),\n                            u[Y.target] &&\n                              (u[Y.target].degree--, u[Y.target].inDegree--),\n                            b[X] && l[X] < b[X].length)\n                          ) {\n                            S = !0;\n                            break;\n                          }\n                          M = !0;\n                        }\n                      }\n                      j++;\n                    }\n                    return S ||\n                      S ||\n                      i.nodes.length < e.nodes.length ||\n                      h.length < e.edges.length\n                      ? (q.splice(r, 1), \"continue\")\n                      : void 0;\n                  },\n                  U = q.length - 1;\n                U >= 0;\n                U--\n              ) {\n                if (\"break\" === H(U)) break;\n              }\n              var Z = q.length,\n                K = function (t) {\n                  var e = q[t],\n                    n = {};\n                  e.edges.forEach(function (t) {\n                    var e = \"\"\n                      .concat(t.source, \"-\")\n                      .concat(t.target, \"-\")\n                      .concat(t.label);\n                    n[e] ? n[e]++ : (n[e] = 1);\n                  });\n                  for (\n                    var r = function (t) {\n                        var e = q[t],\n                          r = {};\n                        e.edges.forEach(function (t) {\n                          var e = \"\"\n                            .concat(t.source, \"-\")\n                            .concat(t.target, \"-\")\n                            .concat(t.label);\n                          r[e] ? r[e]++ : (r[e] = 1);\n                        });\n                        var i = !0;\n                        Object.keys(r).length !== Object.keys(n).length\n                          ? (i = !1)\n                          : Object.keys(n).forEach(function (t) {\n                              r[t] !== n[t] && (i = !1);\n                            }),\n                          i && q.splice(t, 1);\n                      },\n                      i = Z - 1;\n                    i > t;\n                    i--\n                  )\n                    r(i);\n                  Z = q.length;\n                };\n              for (U = 0; U <= Z - 1; U++) K(U);\n              return q;\n            }\n          }\n        },\n        yt = (function () {\n          function t(t) {\n            void 0 === t && (t = 10),\n              (this.linkedList = new a()),\n              (this.maxStep = t);\n          }\n          return (\n            Object.defineProperty(t.prototype, \"length\", {\n              get: function () {\n                return this.linkedList.toArray().length;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.isMaxStack = function () {\n              return this.toArray().length >= this.maxStep;\n            }),\n            (t.prototype.peek = function () {\n              return this.isEmpty() ? null : this.linkedList.head.value;\n            }),\n            (t.prototype.push = function (t) {\n              this.linkedList.prepend(t),\n                this.length > this.maxStep && this.linkedList.deleteTail();\n            }),\n            (t.prototype.pop = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toArray = function () {\n              return this.linkedList.toArray().map(function (t) {\n                return t.value;\n              });\n            }),\n            (t.prototype.clear = function () {\n              for (; !this.isEmpty(); ) this.pop();\n            }),\n            t\n          );\n        })(),\n        mt = w;\n      e.default = {\n        getAdjMatrix: r,\n        breadthFirstSearch: l,\n        connectedComponent: d,\n        getDegree: g,\n        getInDegree: v,\n        getOutDegree: y,\n        detectCycle: w,\n        detectDirectedCycle: mt,\n        detectAllCycles: S,\n        detectAllDirectedCycle: x,\n        detectAllUndirectedCycle: b,\n        depthFirstSearch: m,\n        dijkstra: k,\n        findAllPath: P,\n        findShortestPath: E,\n        floydWarshall: A,\n        labelPropagation: I,\n        louvain: F,\n        iLouvain: Y,\n        kCore: X,\n        kMeans: W,\n        cosineSimilarity: q,\n        nodesCosineSimilarity: V,\n        minimumSpanningTree: $,\n        pageRank: Q,\n        getNeighbors: c,\n        Stack: yt,\n        GADDI: vt,\n      };\n    },\n    38: function (t, e, n) {\n      self,\n        (t.exports = (function () {\n          \"use strict\";\n          var t = {\n              d: function (e, n) {\n                for (var r in n)\n                  t.o(n, r) &&\n                    !t.o(e, r) &&\n                    Object.defineProperty(e, r, { enumerable: !0, get: n[r] });\n              },\n              o: function (t, e) {\n                return Object.prototype.hasOwnProperty.call(t, e);\n              },\n              r: function (t) {\n                \"undefined\" != typeof Symbol &&\n                  Symbol.toStringTag &&\n                  Object.defineProperty(t, Symbol.toStringTag, {\n                    value: \"Module\",\n                  }),\n                  Object.defineProperty(t, \"__esModule\", { value: !0 });\n              },\n            },\n            e = {};\n          function n(t, e) {\n            return void 0 === t ? e : t;\n          }\n          t.r(e),\n            t.d(e, {\n              default: function () {\n                return me;\n              },\n            });\n          var r,\n            i = Math.round,\n            o = Math.abs,\n            a = Date.now,\n            s = \"compute\",\n            c = \"auto\",\n            u = \"manipulation\",\n            h = \"none\",\n            l = \"pan-x\",\n            f = \"pan-y\",\n            d =\n              ((r = {}),\n              [\n                \"auto\",\n                \"manipulation\",\n                \"pan-y\",\n                \"pan-x\",\n                \"pan-x pan-y\",\n                \"none\",\n              ].forEach(function (t) {\n                return (r[t] = !0);\n              }),\n              r),\n            p = \"touch\",\n            g = [\"x\", \"y\"],\n            v = [\"clientX\", \"clientY\"],\n            y = 32,\n            m =\n              \"function\" != typeof Object.assign\n                ? function (t) {\n                    if (null == t)\n                      throw new TypeError(\n                        \"Cannot convert undefined or null to object\",\n                      );\n                    for (var e = Object(t), n = 1; n < arguments.length; n++) {\n                      var r = arguments[n];\n                      if (null != r)\n                        for (var i in r) r.hasOwnProperty(i) && (e[i] = r[i]);\n                    }\n                    return e;\n                  }\n                : Object.assign,\n            b = 1;\n          function x(t, e, n) {\n            var r;\n            if (t)\n              if (t.forEach) t.forEach(e, n);\n              else if (void 0 !== t.length)\n                for (r = 0; r < t.length; ) e.call(n, t[r], r, t), r++;\n              else for (r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);\n          }\n          function S(t, e, n) {\n            return !!Array.isArray(t) && (x(t, n[e], n), !0);\n          }\n          function w(t, e, n) {\n            if (t.indexOf && !n) return t.indexOf(e);\n            for (var r = 0; r < t.length; ) {\n              if ((n && t[r][n] == e) || (!n && t[r] === e)) return r;\n              r++;\n            }\n            return -1;\n          }\n          function O(t) {\n            return (O =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function M(t, e) {\n            return \"function\" === O(t) ? t.apply((e && e[0]) || void 0, e) : t;\n          }\n          function k(t, e) {\n            var n = e.manager;\n            return n ? n.get(t) : t;\n          }\n          function j(t) {\n            return 16 & t\n              ? \"cancel\"\n              : 8 & t\n              ? \"end\"\n              : 4 & t\n              ? \"move\"\n              : 2 & t\n              ? \"start\"\n              : \"\";\n          }\n          function C(t) {\n            return (C =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          var E = (function () {\n            function t(e) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.options = m({}, this.defaults, e || {})),\n                (this.id = b++),\n                (this.manager = null),\n                (this.options.enable = n(this.options.enable, !0)),\n                (this.state = 1),\n                (this.simultaneous = {}),\n                (this.requireFail = []);\n            }\n            var e, r;\n            return (\n              (e = t),\n              (r = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    return (\n                      m(this.options, t),\n                      this.manager && this.manager.touchAction.update(),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"recognizeWith\",\n                  value: function (t) {\n                    if (S(t, \"recognizeWith\", this)) return this;\n                    var e = this.simultaneous;\n                    return (\n                      e[(t = k(t, this)).id] ||\n                        ((e[t.id] = t), t.recognizeWith(this)),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"dropRecognizeWith\",\n                  value: function (t) {\n                    return (\n                      S(t, \"dropRecognizeWith\", this) ||\n                        ((t = k(t, this)), delete this.simultaneous[t.id]),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"requireFailure\",\n                  value: function (t) {\n                    if (S(t, \"requireFailure\", this)) return this;\n                    var e = this.requireFail;\n                    return (\n                      -1 === w(e, (t = k(t, this))) &&\n                        (e.push(t), t.requireFailure(this)),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"dropRequireFailure\",\n                  value: function (t) {\n                    if (S(t, \"dropRequireFailure\", this)) return this;\n                    t = k(t, this);\n                    var e = w(this.requireFail, t);\n                    return e > -1 && this.requireFail.splice(e, 1), this;\n                  },\n                },\n                {\n                  key: \"hasRequireFailures\",\n                  value: function () {\n                    return this.requireFail.length > 0;\n                  },\n                },\n                {\n                  key: \"canRecognizeWith\",\n                  value: function (t) {\n                    return !!this.simultaneous[t.id];\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.state;\n                    function r(n) {\n                      e.manager.emit(n, t);\n                    }\n                    n < 8 && r(e.options.event + j(n)),\n                      r(e.options.event),\n                      t.additionalEvent && r(t.additionalEvent),\n                      n >= 8 && r(e.options.event + j(n));\n                  },\n                },\n                {\n                  key: \"tryEmit\",\n                  value: function (t) {\n                    if (this.canEmit()) return this.emit(t);\n                    this.state = y;\n                  },\n                },\n                {\n                  key: \"canEmit\",\n                  value: function () {\n                    for (var t = 0; t < this.requireFail.length; ) {\n                      if (!(33 & this.requireFail[t].state)) return !1;\n                      t++;\n                    }\n                    return !0;\n                  },\n                },\n                {\n                  key: \"recognize\",\n                  value: function (t) {\n                    var e = m({}, t);\n                    if (!M(this.options.enable, [this, e]))\n                      return this.reset(), void (this.state = y);\n                    56 & this.state && (this.state = 1),\n                      (this.state = this.process(e)),\n                      30 & this.state && this.tryEmit(e);\n                  },\n                },\n                { key: \"process\", value: function (t) {} },\n                { key: \"getTouchAction\", value: function () {} },\n                { key: \"reset\", value: function () {} },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== C(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== C(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === C(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, r),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function P(t) {\n            return (P =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function A(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function I(t, e) {\n            return (I = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function T(t, e) {\n            if (e && (\"object\" === P(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function N(t) {\n            return (N = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          E.prototype.defaults = {};\n          var B = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && I(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = N(r);\n                  if (i) {\n                    var n = N(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return T(this, t);\n                });\n            function a() {\n              return A(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    var e = this.options.pointers;\n                    return 0 === e || t.pointers.length === e;\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this.state,\n                      n = t.eventType,\n                      r = 6 & e,\n                      i = this.attrTest(t);\n                    return r && (8 & n || !i)\n                      ? 16 | e\n                      : r || i\n                      ? 4 & n\n                        ? 8 | e\n                        : 2 & e\n                        ? 4 | e\n                        : 2\n                      : y;\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== P(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== P(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === P(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(E);\n          function L(t) {\n            return (L =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function D(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function _() {\n            return (_ =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = R(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function R(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = X(t));\n\n            );\n            return t;\n          }\n          function F(t, e) {\n            return (F = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function Y(t, e) {\n            if (e && (\"object\" === L(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function X(t) {\n            return (X = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          B.prototype.defaults = { pointers: 1 };\n          var z = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && F(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = X(r);\n                  if (i) {\n                    var n = X(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return Y(this, t);\n                });\n            function a() {\n              return D(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [h];\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      _(X(a.prototype), \"attrTest\", this).call(this, t) &&\n                      (Math.abs(t.rotation) > this.options.threshold ||\n                        2 & this.state)\n                    );\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== L(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== L(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === L(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(B);\n          function W(t) {\n            return (W =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function q(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function V() {\n            return (V =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = G(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function G(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = Z(t));\n\n            );\n            return t;\n          }\n          function H(t, e) {\n            return (H = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function U(t, e) {\n            if (e && (\"object\" === W(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Z(t) {\n            return (Z = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          z.prototype.defaults = { event: \"rotate\", threshold: 0, pointers: 2 };\n          var K = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && H(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = Z(r);\n                  if (i) {\n                    var n = Z(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return U(this, t);\n                });\n            function a() {\n              return q(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [h];\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      V(Z(a.prototype), \"attrTest\", this).call(this, t) &&\n                      (Math.abs(t.scale - 1) > this.options.threshold ||\n                        2 & this.state)\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    if (1 !== t.scale) {\n                      var e = t.scale < 1 ? \"in\" : \"out\";\n                      t.additionalEvent = this.options.event + e;\n                    }\n                    V(Z(a.prototype), \"emit\", this).call(this, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== W(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== W(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === W(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(B);\n          function $(t) {\n            return 16 === t\n              ? \"down\"\n              : 8 === t\n              ? \"up\"\n              : 2 === t\n              ? \"left\"\n              : 4 === t\n              ? \"right\"\n              : \"\";\n          }\n          function Q(t) {\n            return (Q =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function J(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function tt() {\n            return (tt =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = et(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function et(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = it(t));\n\n            );\n            return t;\n          }\n          function nt(t, e) {\n            return (nt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function rt(t, e) {\n            if (e && (\"object\" === Q(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function it(t) {\n            return (it = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          K.prototype.defaults = { event: \"pinch\", threshold: 0, pointers: 2 };\n          var ot = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && nt(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = it(r);\n                  if (i) {\n                    var n = it(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return rt(this, t);\n                });\n            function a() {\n              var t;\n              return (\n                J(this, a),\n                ((t = o.apply(this, arguments)).pX = null),\n                (t.pY = null),\n                t\n              );\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    var t = this.options.direction,\n                      e = [];\n                    return 6 & t && e.push(f), 24 & t && e.push(l), e;\n                  },\n                },\n                {\n                  key: \"directionTest\",\n                  value: function (t) {\n                    var e = this.options,\n                      n = !0,\n                      r = t.distance,\n                      i = t.direction,\n                      o = t.deltaX,\n                      a = t.deltaY;\n                    return (\n                      i & e.direction ||\n                        (6 & e.direction\n                          ? ((i = 0 === o ? 1 : o < 0 ? 2 : 4),\n                            (n = o !== this.pX),\n                            (r = Math.abs(t.deltaX)))\n                          : ((i = 0 === a ? 1 : a < 0 ? 8 : 16),\n                            (n = a !== this.pY),\n                            (r = Math.abs(t.deltaY)))),\n                      (t.direction = i),\n                      n && r > e.threshold && i & e.direction\n                    );\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      B.prototype.attrTest.call(this, t) &&\n                      (2 & this.state ||\n                        (!(2 & this.state) && this.directionTest(t)))\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    (this.pX = t.deltaX), (this.pY = t.deltaY);\n                    var e = $(t.direction);\n                    e && (t.additionalEvent = this.options.event + e),\n                      tt(it(a.prototype), \"emit\", this).call(this, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Q(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Q(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Q(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(B);\n          function at(t) {\n            return (at =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function st(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function ct() {\n            return (ct =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = ut(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function ut(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = ft(t));\n\n            );\n            return t;\n          }\n          function ht(t, e) {\n            return (ht = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function lt(t, e) {\n            if (e && (\"object\" === at(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function ft(t) {\n            return (ft = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          ot.prototype.defaults = {\n            event: \"pan\",\n            threshold: 10,\n            pointers: 1,\n            direction: 30,\n          };\n          var dt = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && ht(t, e);\n            })(s, t);\n            var e,\n              n,\n              r,\n              i,\n              a =\n                ((r = s),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = ft(r);\n                  if (i) {\n                    var n = ft(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return lt(this, t);\n                });\n            function s() {\n              return st(this, s), a.apply(this, arguments);\n            }\n            return (\n              (e = s),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return ot.prototype.getTouchAction.call(this);\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    var e,\n                      n = this.options.direction;\n                    return (\n                      30 & n\n                        ? (e = t.overallVelocity)\n                        : 6 & n\n                        ? (e = t.overallVelocityX)\n                        : 24 & n && (e = t.overallVelocityY),\n                      ct(ft(s.prototype), \"attrTest\", this).call(this, t) &&\n                        n & t.offsetDirection &&\n                        t.distance > this.options.threshold &&\n                        t.maxPointers === this.options.pointers &&\n                        o(e) > this.options.velocity &&\n                        4 & t.eventType\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    var e = $(t.offsetDirection);\n                    e && this.manager.emit(this.options.event + e, t),\n                      this.manager.emit(this.options.event, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== at(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== at(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === at(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              s\n            );\n          })(B);\n          function pt(t, e) {\n            return function () {\n              return t.apply(e, arguments);\n            };\n          }\n          function gt(t, e, n) {\n            return setTimeout(pt(t, n), e);\n          }\n          function vt(t, e, n) {\n            n || (n = g);\n            var r = e[n[0]] - t[n[0]],\n              i = e[n[1]] - t[n[1]];\n            return Math.sqrt(r * r + i * i);\n          }\n          function yt(t) {\n            return (yt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function mt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function bt(t, e) {\n            return (bt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function xt(t, e) {\n            if (e && (\"object\" === yt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function St(t) {\n            return (St = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          dt.prototype.defaults = {\n            event: \"swipe\",\n            threshold: 10,\n            velocity: 0.3,\n            direction: 30,\n            pointers: 1,\n          };\n          var wt = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && bt(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = St(r);\n                  if (i) {\n                    var n = St(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return xt(this, t);\n                });\n            function a() {\n              var t;\n              return (\n                mt(this, a),\n                ((t = o.apply(this, arguments)).pTime = !1),\n                (t.pCenter = !1),\n                (t._timer = null),\n                (t._input = null),\n                (t.count = 0),\n                t\n              );\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [u];\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.options,\n                      r = t.pointers.length === n.pointers,\n                      i = t.distance < n.threshold,\n                      o = t.deltaTime < n.time;\n                    if ((this.reset(), 1 & t.eventType && 0 === this.count))\n                      return this.failTimeout();\n                    if (i && o && r) {\n                      if (4 !== t.eventType) return this.failTimeout();\n                      var a =\n                          !this.pTime || t.timeStamp - this.pTime < n.interval,\n                        s =\n                          !this.pCenter ||\n                          vt(this.pCenter, t.center) < n.posThreshold;\n                      if (\n                        ((this.pTime = t.timeStamp),\n                        (this.pCenter = t.center),\n                        s && a ? (this.count += 1) : (this.count = 1),\n                        (this._input = t),\n                        0 == this.count % n.taps)\n                      )\n                        return this.hasRequireFailures()\n                          ? ((this._timer = gt(\n                              function () {\n                                (e.state = 8), e.tryEmit();\n                              },\n                              n.interval,\n                              this,\n                            )),\n                            2)\n                          : 8;\n                    }\n                    return y;\n                  },\n                },\n                {\n                  key: \"failTimeout\",\n                  value: function () {\n                    var t = this;\n                    return (\n                      (this._timer = gt(\n                        function () {\n                          t.state = y;\n                        },\n                        this.options.interval,\n                        this,\n                      )),\n                      y\n                    );\n                  },\n                },\n                {\n                  key: \"reset\",\n                  value: function () {\n                    clearTimeout(this._timer), (this._timer = null);\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function () {\n                    8 === this.state &&\n                      ((this._input.tapCount = this.count),\n                      this.manager.emit(this.options.event, this._input));\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== yt(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== yt(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === yt(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(E);\n          function Ot(t) {\n            return (Ot =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function Mt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function kt(t, e) {\n            return (kt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function jt(t, e) {\n            if (e && (\"object\" === Ot(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Ct(t) {\n            return (Ct = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          wt.prototype.defaults = {\n            event: \"tap\",\n            pointers: 1,\n            taps: 1,\n            interval: 300,\n            time: 250,\n            threshold: 9,\n            posThreshold: 10,\n          };\n          var Et = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && kt(t, e);\n            })(s, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = s),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = Ct(r);\n                  if (i) {\n                    var n = Ct(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return jt(this, t);\n                });\n            function s() {\n              var t;\n              return (\n                Mt(this, s),\n                ((t = o.apply(this, arguments))._timer = null),\n                (t._input = null),\n                t\n              );\n            }\n            return (\n              (e = s),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [c];\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.options,\n                      r = t.pointers.length === n.pointers,\n                      i = t.distance < n.threshold,\n                      o = t.deltaTime > n.time;\n                    if (\n                      ((this._input = t), !i || !r || (12 & t.eventType && !o))\n                    )\n                      this.reset();\n                    else if (1 & t.eventType)\n                      this.reset(),\n                        (this._timer = gt(\n                          function () {\n                            (e.state = 8), e.tryEmit();\n                          },\n                          n.time,\n                          this,\n                        ));\n                    else if (4 & t.eventType) return 8;\n                    return y;\n                  },\n                },\n                {\n                  key: \"reset\",\n                  value: function () {\n                    clearTimeout(this._timer), (this._timer = null);\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    8 === this.state &&\n                      (t && 4 & t.eventType\n                        ? this.manager.emit(\n                            \"\".concat(this.options.event, \"up\"),\n                            t,\n                          )\n                        : ((this._input.timeStamp = a()),\n                          this.manager.emit(this.options.event, this._input)));\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Ot(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Ot(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Ot(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              s\n            );\n          })(E);\n          function Pt(t, e) {\n            return t.indexOf(e) > -1;\n          }\n          function At(t) {\n            return (At =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          Et.prototype.defaults = {\n            event: \"press\",\n            pointers: 1,\n            time: 251,\n            threshold: 9,\n          };\n          var It = (function () {\n            function t(e, n) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.manager = e),\n                this.set(n);\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    t === s && (t = this.compute()),\n                      (this.actions = t.toLowerCase().trim());\n                  },\n                },\n                {\n                  key: \"update\",\n                  value: function () {\n                    this.set(this.manager.options.touchAction);\n                  },\n                },\n                {\n                  key: \"compute\",\n                  value: function () {\n                    var t = [];\n                    return (\n                      x(this.manager.recognizers, function (e) {\n                        M(e.options.enable, [e]) &&\n                          (t = t.concat(e.getTouchAction()));\n                      }),\n                      (function (t) {\n                        if (Pt(t, h)) return h;\n                        var e = Pt(t, l),\n                          n = Pt(t, f);\n                        return e && n\n                          ? h\n                          : e || n\n                          ? e\n                            ? l\n                            : f\n                          : Pt(t, u)\n                          ? u\n                          : c;\n                      })(t.join(\" \"))\n                    );\n                  },\n                },\n                {\n                  key: \"preventDefaults\",\n                  value: function (t) {\n                    var e = t.srcEvent,\n                      n = t.offsetDirection;\n                    if (this.manager.session.prevented) e.preventDefault();\n                    else {\n                      var r = this.actions,\n                        i = Pt(r, h) && !d[h],\n                        o = Pt(r, f) && !d[f],\n                        a = Pt(r, l) && !d[l];\n                      if (i) {\n                        var s = 1 === t.pointers.length,\n                          c = t.distance < 2,\n                          u = t.deltaTime < 250;\n                        if (s && c && u) return;\n                      }\n                      if (!a || !o)\n                        return i || (o && 6 & n) || (a && 24 & n)\n                          ? this.preventSrc(e)\n                          : void 0;\n                    }\n                  },\n                },\n                {\n                  key: \"preventSrc\",\n                  value: function (t) {\n                    (this.manager.session.prevented = !0), t.preventDefault();\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== At(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== At(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === At(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function Tt(t) {\n            var e = t.length;\n            if (1 === e) return { x: i(t[0].clientX), y: i(t[0].clientY) };\n            for (var n = 0, r = 0, o = 0; o < e; )\n              (n += t[o].clientX), (r += t[o].clientY), o++;\n            return { x: i(n / e), y: i(r / e) };\n          }\n          function Nt(t) {\n            for (var e = [], n = 0; n < t.pointers.length; )\n              (e[n] = {\n                clientX: i(t.pointers[n].clientX),\n                clientY: i(t.pointers[n].clientY),\n              }),\n                n++;\n            return {\n              timeStamp: a(),\n              pointers: e,\n              center: Tt(e),\n              deltaX: t.deltaX,\n              deltaY: t.deltaY,\n            };\n          }\n          function Bt(t, e, n) {\n            n || (n = g);\n            var r = e[n[0]] - t[n[0]],\n              i = e[n[1]] - t[n[1]];\n            return (180 * Math.atan2(i, r)) / Math.PI;\n          }\n          function Lt(t, e) {\n            return t === e\n              ? 1\n              : o(t) >= o(e)\n              ? t < 0\n                ? 2\n                : 4\n              : e < 0\n              ? 8\n              : 16;\n          }\n          function Dt(t, e, n) {\n            return { x: e / t || 0, y: n / t || 0 };\n          }\n          function _t(t, e, n) {\n            var r = n.pointers.length,\n              i = n.changedPointers.length,\n              s = 1 & e && r - i == 0,\n              c = 12 & e && r - i == 0;\n            (n.isFirst = !!s),\n              (n.isFinal = !!c),\n              s && (t.session = {}),\n              (n.eventType = e),\n              (function (t, e) {\n                var n = t.session,\n                  r = e.pointers,\n                  i = r.length;\n                n.firstInput || (n.firstInput = Nt(e)),\n                  i > 1 && !n.firstMultiple\n                    ? (n.firstMultiple = Nt(e))\n                    : 1 === i && (n.firstMultiple = !1);\n                var s = n.firstInput,\n                  c = n.firstMultiple,\n                  u = c ? c.center : s.center,\n                  h = (e.center = Tt(r));\n                (e.timeStamp = a()),\n                  (e.deltaTime = e.timeStamp - s.timeStamp),\n                  (e.angle = Bt(u, h)),\n                  (e.distance = vt(u, h)),\n                  (function (t, e) {\n                    var n = e.center,\n                      r = t.offsetDelta || {},\n                      i = t.prevDelta || {},\n                      o = t.prevInput || {};\n                    (1 !== e.eventType && 4 !== o.eventType) ||\n                      ((i = t.prevDelta =\n                        { x: o.deltaX || 0, y: o.deltaY || 0 }),\n                      (r = t.offsetDelta = { x: n.x, y: n.y })),\n                      (e.deltaX = i.x + (n.x - r.x)),\n                      (e.deltaY = i.y + (n.y - r.y));\n                  })(n, e),\n                  (e.offsetDirection = Lt(e.deltaX, e.deltaY));\n                var l,\n                  f,\n                  d = Dt(e.deltaTime, e.deltaX, e.deltaY);\n                (e.overallVelocityX = d.x),\n                  (e.overallVelocityY = d.y),\n                  (e.overallVelocity = o(d.x) > o(d.y) ? d.x : d.y),\n                  (e.scale = c\n                    ? ((l = c.pointers),\n                      vt((f = r)[0], f[1], v) / vt(l[0], l[1], v))\n                    : 1),\n                  (e.rotation = c\n                    ? (function (t, e) {\n                        return Bt(e[1], e[0], v) + Bt(t[1], t[0], v);\n                      })(c.pointers, r)\n                    : 0),\n                  (e.maxPointers = n.prevInput\n                    ? e.pointers.length > n.prevInput.maxPointers\n                      ? e.pointers.length\n                      : n.prevInput.maxPointers\n                    : e.pointers.length),\n                  (function (t, e) {\n                    var n,\n                      r,\n                      i,\n                      a,\n                      s = t.lastInterval || e,\n                      c = e.timeStamp - s.timeStamp;\n                    if (\n                      8 !== e.eventType &&\n                      (c > 25 || void 0 === s.velocity)\n                    ) {\n                      var u = e.deltaX - s.deltaX,\n                        h = e.deltaY - s.deltaY,\n                        l = Dt(c, u, h);\n                      (r = l.x),\n                        (i = l.y),\n                        (n = o(l.x) > o(l.y) ? l.x : l.y),\n                        (a = Lt(u, h)),\n                        (t.lastInterval = e);\n                    } else\n                      (n = s.velocity),\n                        (r = s.velocityX),\n                        (i = s.velocityY),\n                        (a = s.direction);\n                    (e.velocity = n),\n                      (e.velocityX = r),\n                      (e.velocityY = i),\n                      (e.direction = a);\n                  })(n, e);\n              })(t, n),\n              t.emit(\"hammer.input\", n),\n              t.recognize(n),\n              (t.session.prevInput = n);\n          }\n          function Rt(t) {\n            return t.trim().split(/\\s+/g);\n          }\n          function Ft(t, e, n) {\n            x(Rt(e), function (e) {\n              t.addEventListener(e, n, !1);\n            });\n          }\n          function Yt(t) {\n            return (Yt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          var Xt = (function () {\n            function t(e, n) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t);\n              var r = this;\n              (this.manager = e),\n                (this.callback = n),\n                (this.eventHandler = function (t) {\n                  M(e.options.enable, [e]) && r.handler(t);\n                }),\n                this.init();\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                { key: \"handler\", value: function () {} },\n                {\n                  key: \"init\",\n                  value: function () {\n                    var t, e, n;\n                    (t = this.manager),\n                      (e = this.events || \"\"),\n                      (n = this.eventHandler),\n                      x(Rt(e), function (e) {\n                        t.on(\"origin_input:\".concat(e), n);\n                      });\n                  },\n                },\n                {\n                  key: \"destroy\",\n                  value: function () {\n                    removeManagerListeners(\n                      this.manager,\n                      this.events || \"\",\n                      this.eventHandler,\n                    );\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Yt(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Yt(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Yt(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function zt(t) {\n            return Array.prototype.slice.call(t, 0);\n          }\n          function Wt(t, e, n) {\n            for (var r = [], i = [], o = 0; o < t.length; ) {\n              var a = e ? t[o][e] : t[o];\n              w(i, a) < 0 && r.push(t[o]), (i[o] = a), o++;\n            }\n            return (\n              n &&\n                (r = e\n                  ? r.sort(function (t, n) {\n                      return t[e] > n[e];\n                    })\n                  : r.sort()),\n              r\n            );\n          }\n          function qt(t) {\n            return (qt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function Vt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function Gt(t, e) {\n            return (Gt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function Ht(t, e) {\n            if (e && (\"object\" === qt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Ut(t) {\n            return (Ut = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          var Zt = { touchstart: 1, touchmove: 2, touchend: 4, touchcancel: 8 },\n            Kt = \"touchstart touchmove touchend touchcancel\",\n            $t = (function (t) {\n              !(function (t, e) {\n                if (\"function\" != typeof e && null !== e)\n                  throw new TypeError(\n                    \"Super expression must either be null or a function\",\n                  );\n                (t.prototype = Object.create(e && e.prototype, {\n                  constructor: { value: t, writable: !0, configurable: !0 },\n                })),\n                  Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                  e && Gt(t, e);\n              })(a, t);\n              var e,\n                n,\n                r,\n                i,\n                o =\n                  ((r = a),\n                  (i = (function () {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                      return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                      return (\n                        Boolean.prototype.valueOf.call(\n                          Reflect.construct(Boolean, [], function () {}),\n                        ),\n                        !0\n                      );\n                    } catch (t) {\n                      return !1;\n                    }\n                  })()),\n                  function () {\n                    var t,\n                      e = Ut(r);\n                    if (i) {\n                      var n = Ut(this).constructor;\n                      t = Reflect.construct(e, arguments, n);\n                    } else t = e.apply(this, arguments);\n                    return Ht(this, t);\n                  });\n              function a() {\n                var t;\n                return (\n                  Vt(this, a),\n                  (a.prototype.evTarget = Kt),\n                  (a.prototype.targetIds = {}),\n                  (a.prototype.events = Kt),\n                  ((t = o.apply(this, arguments)).evTarget = Kt),\n                  (t.targetIds = {}),\n                  t\n                );\n              }\n              return (\n                (e = a),\n                (n = [\n                  {\n                    key: \"handler\",\n                    value: function (t) {\n                      var e = Zt[t.type],\n                        n = Qt.call(this, t, e);\n                      n &&\n                        this.callback(this.manager, e, {\n                          pointers: n[0],\n                          changedPointers: n[1],\n                          pointerType: p,\n                          srcEvent: t,\n                        });\n                    },\n                  },\n                ]) &&\n                  (function (t, e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.enumerable = r.enumerable || !1),\n                        (r.configurable = !0),\n                        \"value\" in r && (r.writable = !0),\n                        Object.defineProperty(\n                          t,\n                          ((i = (function (t, e) {\n                            if (\"object\" !== qt(t) || null === t) return t;\n                            var n = t[Symbol.toPrimitive];\n                            if (void 0 !== n) {\n                              var r = n.call(t, \"string\");\n                              if (\"object\" !== qt(r)) return r;\n                              throw new TypeError(\n                                \"@@toPrimitive must return a primitive value.\",\n                              );\n                            }\n                            return String(t);\n                          })(r.key)),\n                          \"symbol\" === qt(i) ? i : String(i)),\n                          r,\n                        );\n                    }\n                    var i;\n                  })(e.prototype, n),\n                Object.defineProperty(e, \"prototype\", { writable: !1 }),\n                a\n              );\n            })(Xt);\n          function Qt(t, e) {\n            var n,\n              r,\n              i = zt(t.touches),\n              o = this.targetIds;\n            if (3 & e && 1 === i.length)\n              return (o[i[0].identifier] = !0), [i, i];\n            var a = zt(t.changedTouches),\n              s = [];\n            if ((this.target, (r = i), 1 === e))\n              for (n = 0; n < r.length; ) (o[r[n].identifier] = !0), n++;\n            for (n = 0; n < a.length; )\n              o[a[n].identifier] && s.push(a[n]),\n                12 & e && delete o[a[n].identifier],\n                n++;\n            return s.length ? [Wt(r.concat(s), \"identifier\", !0), s] : void 0;\n          }\n          function Jt(t) {\n            return (Jt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          var te = (function () {\n            function t(e) {\n              var n,\n                r = this;\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.options = m({}, re.defaults, e || {})),\n                (this.handlers = {}),\n                (this.filters = []),\n                (this.session = {}),\n                (this.recognizers = []),\n                (this.input =\n                  ((n = $t),\n                  this.options.inputClass && (n = inputClass),\n                  new n(this, _t))),\n                (this.touchAction = new It(this, this.options.touchAction)),\n                x(\n                  this.options.recognizers,\n                  function (t) {\n                    var e = r.add(new t[0](t[1]));\n                    t[2] && e.recognizeWith(t[2]),\n                      t[3] && e.requireFailure(t[3]);\n                  },\n                  this,\n                );\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    return (\n                      m(this.options, t),\n                      t.touchAction && this.touchAction.update(),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"stop\",\n                  value: function (t) {\n                    this.session.stopped = t ? 2 : 1;\n                  },\n                },\n                {\n                  key: \"addFilter\",\n                  value: function (t) {\n                    if (\"function\" != typeof t)\n                      throw new Error(\"filter must be a function\");\n                    this.filters.push(t);\n                  },\n                },\n                {\n                  key: \"recognize\",\n                  value: function (t) {\n                    var e = this.session;\n                    if (!e.stopped) {\n                      var n;\n                      this.touchAction.preventDefaults(t);\n                      var r = this.recognizers,\n                        i = e.curRecognizer;\n                      (!i || (i && 8 & i.state)) &&\n                        (i = e.curRecognizer = null);\n                      for (var o = 0; o < r.length; )\n                        (n = r[o]),\n                          2 === e.stopped ||\n                          (i && n !== i && !n.canRecognizeWith(i))\n                            ? n.reset()\n                            : n.recognize(t),\n                          !i && 14 & n.state && (i = e.curRecognizer = n),\n                          o++;\n                    }\n                  },\n                },\n                {\n                  key: \"get\",\n                  value: function (t) {\n                    if (t instanceof E) return t;\n                    for (var e = this.recognizers, n = 0; n < e.length; n++)\n                      if (e[n].options.event === t) return e[n];\n                    return null;\n                  },\n                },\n                {\n                  key: \"add\",\n                  value: function (t) {\n                    if (S(t, \"add\", this)) return this;\n                    var e = this.get(t.options.event);\n                    return (\n                      e && this.remove(e),\n                      this.recognizers.push(t),\n                      (t.manager = this),\n                      this.touchAction.update(),\n                      t\n                    );\n                  },\n                },\n                {\n                  key: \"remove\",\n                  value: function (t) {\n                    if (S(t, \"remove\", this)) return this;\n                    if ((t = this.get(t))) {\n                      var e = this.recognizers,\n                        n = w(e, t);\n                      -1 !== n && (e.splice(n, 1), this.touchAction.update());\n                    }\n                    return this;\n                  },\n                },\n                {\n                  key: \"on\",\n                  value: function (t, e) {\n                    if (void 0 !== t && void 0 !== e) {\n                      var n = this.handlers;\n                      return (\n                        x(Rt(t), function (t) {\n                          (n[t] = n[t] || []), n[t].push(e);\n                        }),\n                        this\n                      );\n                    }\n                  },\n                },\n                {\n                  key: \"off\",\n                  value: function (t, e) {\n                    if (void 0 !== t) {\n                      var n = this.handlers;\n                      return (\n                        x(Rt(t), function (t) {\n                          e ? n[t] && n[t].splice(w(n[t], e), 1) : delete n[t];\n                        }),\n                        this\n                      );\n                    }\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t, e) {\n                    var n = this.handlers[t] && this.handlers[t].slice();\n                    if ((this.filters, n && n.length)) {\n                      t.startsWith(\"origin_input\") ||\n                        ((e.type = t),\n                        (e.preventDefault = function () {\n                          e.srcEvent.preventDefault &&\n                            e.srcEvent.preventDefault();\n                        }));\n                      for (var r = 0; r < n.length; ) n[r](e), r++;\n                    }\n                  },\n                },\n                {\n                  key: \"destroy\",\n                  value: function () {\n                    (this.handlers = {}),\n                      (this.filters = []),\n                      (this.session = {}),\n                      this.input.destroy();\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Jt(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Jt(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Jt(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function ee(t) {\n            return (ee =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function ne(t, e) {\n            for (var n = 0; n < e.length; n++) {\n              var r = e[n];\n              (r.enumerable = r.enumerable || !1),\n                (r.configurable = !0),\n                \"value\" in r && (r.writable = !0),\n                Object.defineProperty(\n                  t,\n                  ((i = (function (t, e) {\n                    if (\"object\" !== ee(t) || null === t) return t;\n                    var n = t[Symbol.toPrimitive];\n                    if (void 0 !== n) {\n                      var r = n.call(t, \"string\");\n                      if (\"object\" !== ee(r)) return r;\n                      throw new TypeError(\n                        \"@@toPrimitive must return a primitive value.\",\n                      );\n                    }\n                    return String(t);\n                  })(r.key)),\n                  \"symbol\" === ee(i) ? i : String(i)),\n                  r,\n                );\n            }\n            var i;\n          }\n          var re = (function (t, e, n) {\n            return (\n              e && ne(t.prototype, e),\n              n && ne(t, n),\n              Object.defineProperty(t, \"prototype\", { writable: !1 }),\n              t\n            );\n          })(function t(e) {\n            return (\n              (function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n              ((e = e || {}).recognizers = n(e.recognizers, t.defaults.preset)),\n              new te(e)\n            );\n          });\n          function ie(t) {\n            return (ie =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function oe(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function ae(t, e) {\n            return (ae = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function se(t, e) {\n            if (e && (\"object\" === ie(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function ce(t) {\n            return (ce = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          re.defaults = {\n            domEvents: !1,\n            touchAction: s,\n            enable: !0,\n            inputClass: null,\n            preset: [\n              [z, { enable: !1 }],\n              [K, { enable: !1 }, [\"rotate\"]],\n              [dt, { direction: 6 }],\n              [ot, { direction: 6 }, [\"swipe\"]],\n              [wt],\n              [wt, { event: \"doubletap\", taps: 2 }, [\"tap\"]],\n              [Et],\n            ],\n          };\n          var ue = {\n              pointerdown: 1,\n              pointermove: 2,\n              pointerup: 4,\n              pointercancel: 8,\n              pointerout: 8,\n            },\n            he = { 2: p, 3: \"pen\", 4: \"mouse\", 5: \"kinect\" },\n            le = \"pointerdown\",\n            fe = \"pointermove pointerup pointercancel\",\n            de = (function (t) {\n              !(function (t, e) {\n                if (\"function\" != typeof e && null !== e)\n                  throw new TypeError(\n                    \"Super expression must either be null or a function\",\n                  );\n                (t.prototype = Object.create(e && e.prototype, {\n                  constructor: { value: t, writable: !0, configurable: !0 },\n                })),\n                  Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                  e && ae(t, e);\n              })(a, t);\n              var e,\n                n,\n                r,\n                i,\n                o =\n                  ((r = a),\n                  (i = (function () {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                      return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                      return (\n                        Boolean.prototype.valueOf.call(\n                          Reflect.construct(Boolean, [], function () {}),\n                        ),\n                        !0\n                      );\n                    } catch (t) {\n                      return !1;\n                    }\n                  })()),\n                  function () {\n                    var t,\n                      e = ce(r);\n                    if (i) {\n                      var n = ce(this).constructor;\n                      t = Reflect.construct(e, arguments, n);\n                    } else t = e.apply(this, arguments);\n                    return se(this, t);\n                  });\n              function a() {\n                var t;\n                return (\n                  oe(this, a),\n                  (a.prototype.events = \"\".concat(le, \" \").concat(fe)),\n                  ((t = o.apply(this, arguments)).evEl = le),\n                  (t.evWin = fe),\n                  (t.store = t.manager.session.pointerEvents = []),\n                  t\n                );\n              }\n              return (\n                (e = a),\n                (n = [\n                  {\n                    key: \"handler\",\n                    value: function (t) {\n                      var e = this.store,\n                        n = !1,\n                        r = t.type.toLowerCase().replace(\"ms\", \"\"),\n                        i = ue[r],\n                        o = he[t.pointerType] || t.pointerType,\n                        a = o === p,\n                        s = w(e, t.pointerId, \"pointerId\");\n                      1 & i && (0 === t.button || a)\n                        ? s < 0 && (e.push(t), (s = e.length - 1))\n                        : 12 & i && (n = !0),\n                        s < 0 ||\n                          ((e[s] = t),\n                          this.callback(this.manager, i, {\n                            pointers: e,\n                            changedPointers: [t],\n                            pointerType: o,\n                            srcEvent: t,\n                          }),\n                          n && e.splice(s, 1));\n                    },\n                  },\n                ]) &&\n                  (function (t, e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.enumerable = r.enumerable || !1),\n                        (r.configurable = !0),\n                        \"value\" in r && (r.writable = !0),\n                        Object.defineProperty(\n                          t,\n                          ((i = (function (t, e) {\n                            if (\"object\" !== ie(t) || null === t) return t;\n                            var n = t[Symbol.toPrimitive];\n                            if (void 0 !== n) {\n                              var r = n.call(t, \"string\");\n                              if (\"object\" !== ie(r)) return r;\n                              throw new TypeError(\n                                \"@@toPrimitive must return a primitive value.\",\n                              );\n                            }\n                            return String(t);\n                          })(r.key)),\n                          \"symbol\" === ie(i) ? i : String(i)),\n                          r,\n                        );\n                    }\n                    var i;\n                  })(e.prototype, n),\n                Object.defineProperty(e, \"prototype\", { writable: !1 }),\n                a\n              );\n            })(Xt);\n          function pe(t, e, n) {\n            x(Rt(e), function (e) {\n              t.removeEventListener(e, n, !1);\n            });\n          }\n          function ge(t, e, n) {\n            var r = \"DEPRECATED METHOD: \".concat(e, \"\\n\").concat(n, \" AT \\n\");\n            return function () {\n              var e = new Error(\"get-stack-trace\"),\n                n =\n                  e && e.stack\n                    ? e.stack\n                        .replace(/^[^\\(]+?[\\n$]/gm, \"\")\n                        .replace(/^\\s+at\\s+/gm, \"\")\n                        .replace(/^Object.<anonymous>\\s*\\(/gm, \"{anonymous}()@\")\n                    : \"Unknown Stack Trace\",\n                i = console.warn;\n              return i && i(r, n), t.apply(this, arguments);\n            };\n          }\n          var ve = ge(\n              function (t, e, n) {\n                for (var r = Object.keys(e), i = 0; i < r.length; )\n                  (!n || (n && void 0 === t[r[i]])) && (t[r[i]] = e[r[i]]), i++;\n                return t;\n              },\n              \"extend\",\n              \"Use `assign`.\",\n            ),\n            ye = ge(\n              function (t, e) {\n                return ve(t, e, !0);\n              },\n              \"merge\",\n              \"Use `assign`.\",\n            ),\n            me = m(re, {\n              INPUT_START: 1,\n              INPUT_MOVE: 2,\n              INPUT_END: 4,\n              INPUT_CANCEL: 8,\n              STATE_POSSIBLE: 1,\n              STATE_BEGAN: 2,\n              STATE_CHANGED: 4,\n              STATE_ENDED: 8,\n              STATE_RECOGNIZED: 8,\n              STATE_CANCELLED: 16,\n              STATE_FAILED: y,\n              DIRECTION_NONE: 1,\n              DIRECTION_LEFT: 2,\n              DIRECTION_RIGHT: 4,\n              DIRECTION_UP: 8,\n              DIRECTION_DOWN: 16,\n              DIRECTION_HORIZONTAL: 6,\n              DIRECTION_VERTICAL: 24,\n              DIRECTION_ALL: 30,\n              Manager: te,\n              Input: Xt,\n              TouchAction: It,\n              TouchInput: $t,\n              PointerEventInput: de,\n              Recognizer: E,\n              AttrRecognizer: B,\n              Tap: wt,\n              Pan: ot,\n              Swipe: dt,\n              Pinch: K,\n              Rotate: z,\n              Press: Et,\n              on: Ft,\n              off: pe,\n              each: x,\n              merge: ye,\n              extend: ve,\n              assign: m,\n              inherit: function (t, e, n) {\n                var r,\n                  i = e.prototype;\n                ((r = t.prototype = Object.create(i)).constructor = t),\n                  (r._super = i),\n                  n && m(r, n);\n              },\n              bindFn: pt,\n              toArray: zt,\n              inArray: w,\n              uniqueArray: Wt,\n              splitStr: Rt,\n              boolOrFn: M,\n              hasParent: function (t, e) {\n                for (; t; ) {\n                  if (t === e) return !0;\n                  t = t.parentNode;\n                }\n                return !1;\n              },\n              addEventListeners: Ft,\n              removeEventListeners: pe,\n            });\n          return e;\n        })());\n    },\n    4: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return i.a;\n      }),\n        n.d(e, \"c\", function () {\n          return i.b;\n        }),\n        n.d(e, \"d\", function () {\n          return i.c;\n        }),\n        n.d(e, \"a\", function () {\n          return r;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"leftTranslate\", function () {\n          return o;\n        }),\n        n.d(r, \"leftRotate\", function () {\n          return a;\n        }),\n        n.d(r, \"leftScale\", function () {\n          return s;\n        }),\n        n.d(r, \"transform\", function () {\n          return c;\n        }),\n        n.d(r, \"direction\", function () {\n          return u;\n        }),\n        n.d(r, \"angleTo\", function () {\n          return h;\n        }),\n        n.d(r, \"vertical\", function () {\n          return l;\n        });\n      var i = n(5);\n      function o(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromTranslation(r, n), i.a.multiply(t, r, e);\n      }\n      function a(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromRotation(r, n), i.a.multiply(t, r, e);\n      }\n      function s(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromScaling(r, n), i.a.multiply(t, r, e);\n      }\n      function c(t, e) {\n        for (\n          var n,\n            r,\n            c,\n            u = t ? [].concat(t) : [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            h = 0,\n            l = e.length;\n          h < l;\n          h++\n        ) {\n          var f = e[h];\n          switch (f[0]) {\n            case \"t\":\n              o(u, u, [f[1], f[2]]);\n              break;\n            case \"s\":\n              s(u, u, [f[1], f[2]]);\n              break;\n            case \"r\":\n              a(u, u, f[1]);\n              break;\n            case \"m\":\n              (n = u), (r = u), (c = f[1]), i.a.multiply(n, c, r);\n          }\n        }\n        return u;\n      }\n      function u(t, e) {\n        return t[0] * e[1] - e[0] * t[1];\n      }\n      function h(t, e, n) {\n        var r = i.b.angle(t, e),\n          o = u(t, e) >= 0;\n        return n ? (o ? 2 * Math.PI - r : r) : o ? r : 2 * Math.PI - r;\n      }\n      function l(t, e, n) {\n        return (\n          n\n            ? ((t[0] = e[1]), (t[1] = -1 * e[0]))\n            : ((t[0] = -1 * e[1]), (t[1] = e[0])),\n          t\n        );\n      }\n    },\n    40: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      n.d(e, \"c\", function () {\n        return o;\n      }),\n        n.d(e, \"b\", function () {\n          return a;\n        }),\n        n.d(e, \"a\", function () {\n          return s;\n        });\n      var i = {};\n      function o(t) {\n        void 0 === t && (t = {}), (t = t);\n      }\n      function a(t) {\n        return (null == i ? void 0 : i.requestAnimationFrame)\n          ? i.requestAnimationFrame(t)\n          : (\"object\" ===\n              (\"undefined\" == typeof window ? \"undefined\" : r(window)) &&\n              window.requestAnimationFrame\n              ? window.requestAnimationFrame\n              : function (t) {\n                  return setTimeout(t, 16);\n                })(t);\n      }\n      function s(t) {\n        return (null == i ? void 0 : i.clearAnimationFrame)\n          ? i.clearAnimationFrame(t)\n          : (\"object\" ===\n              (\"undefined\" == typeof window ? \"undefined\" : r(window)) &&\n              window.cancelAnimationFrame\n              ? window.cancelAnimationFrame\n              : clearTimeout)(t);\n      }\n    },\n    41: function (t, e, n) {\n      \"use strict\";\n      var r = {};\n      n.r(r),\n        n.d(r, \"proccessToFunc\", function () {\n          return u;\n        }),\n        n.d(r, \"buildTextureData\", function () {\n          return h;\n        }),\n        n.d(r, \"buildTextureDataWithOneEdgeAttr\", function () {\n          return l;\n        }),\n        n.d(r, \"buildTextureDataWithTwoEdgeAttr\", function () {\n          return f;\n        }),\n        n.d(r, \"attributesToTextureData\", function () {\n          return d;\n        }),\n        n.d(r, \"arrayToTextureData\", function () {\n          return p;\n        }),\n        n.d(r, \"radialLayout\", function () {\n          return g;\n        });\n      var i = n(1),\n        o = n(95),\n        a = n(2),\n        s = n(0),\n        c = a.h.traverseTree,\n        u = function (t, e) {\n          return t\n            ? Object(s.isNumber)(t)\n              ? function (e) {\n                  return t;\n                }\n              : t\n            : function (t) {\n                return e || 1;\n              };\n        },\n        h = function (t, e) {\n          var n = [],\n            r = [],\n            i = {},\n            o = 0;\n          for (o = 0; o < t.length; o++) {\n            var a = t[o];\n            (i[a.id] = o),\n              n.push(a.x),\n              n.push(a.y),\n              n.push(0),\n              n.push(0),\n              r.push([]);\n          }\n          for (o = 0; o < e.length; o++) {\n            var s = e[o];\n            r[i[s.source]].push(i[s.target]), r[i[s.target]].push(i[s.source]);\n          }\n          var c = 0;\n          for (o = 0; o < t.length; o++) {\n            var u = n.length,\n              h = r[o],\n              l = h.length;\n            (n[4 * o + 2] = u),\n              (n[4 * o + 3] = h.length),\n              (c = Math.max(c, h.length));\n            for (var f = 0; f < l; ++f) {\n              var d = h[f];\n              n.push(+d);\n            }\n          }\n          for (; n.length % 4 != 0; ) n.push(0);\n          return { array: new Float32Array(n), maxEdgePerVetex: c };\n        },\n        l = function (t, e, n) {\n          var r = [],\n            i = [],\n            o = {},\n            a = 0;\n          for (a = 0; a < t.length; a++) {\n            var s = t[a];\n            (o[s.id] = a),\n              r.push(s.x),\n              r.push(s.y),\n              r.push(0),\n              r.push(0),\n              i.push([]);\n          }\n          for (a = 0; a < e.length; a++) {\n            var c = e[a];\n            i[o[c.source]].push(o[c.target]),\n              i[o[c.source]].push(n(c)),\n              i[o[c.target]].push(o[c.source]),\n              i[o[c.target]].push(n(c));\n          }\n          var u = 0;\n          for (a = 0; a < t.length; a++) {\n            var h = r.length,\n              l = i[a],\n              f = l.length;\n            (r[4 * a + 2] = h),\n              (r[4 * a + 3] = f / 2),\n              (u = Math.max(u, f / 2));\n            for (var d = 0; d < f; ++d) {\n              var p = l[d];\n              r.push(+p);\n            }\n          }\n          for (; r.length % 4 != 0; ) r.push(0);\n          return { array: new Float32Array(r), maxEdgePerVetex: u };\n        },\n        f = function (t, e, n, r) {\n          var i = [],\n            o = [],\n            a = {},\n            s = 0;\n          for (s = 0; s < t.length; s++) {\n            var c = t[s];\n            (a[c.id] = s),\n              i.push(c.x),\n              i.push(c.y),\n              i.push(0),\n              i.push(0),\n              o.push([]);\n          }\n          for (s = 0; s < e.length; s++) {\n            var u = e[s];\n            o[a[u.source]].push(a[u.target]),\n              o[a[u.source]].push(n(u)),\n              o[a[u.source]].push(r(u)),\n              o[a[u.source]].push(0),\n              o[a[u.target]].push(a[u.source]),\n              o[a[u.target]].push(n(u)),\n              o[a[u.target]].push(r(u)),\n              o[a[u.target]].push(0);\n          }\n          var h = 0;\n          for (s = 0; s < t.length; s++) {\n            var l = i.length,\n              f = o[s],\n              d = f.length;\n            (i[4 * s + 2] = l + (1048576 * d) / 4),\n              (i[4 * s + 3] = 0),\n              (h = Math.max(h, d / 4));\n            for (var p = 0; p < d; ++p) {\n              var g = f[p];\n              i.push(+g);\n            }\n          }\n          for (; i.length % 4 != 0; ) i.push(0);\n          return { array: new Float32Array(i), maxEdgePerVetex: h };\n        },\n        d = function (t, e) {\n          var n = [],\n            r = t.length,\n            i = {};\n          return (\n            e.forEach(function (e) {\n              t.forEach(function (t, o) {\n                if (\n                  (void 0 === i[e[t]] && (i[e[t]] = Object.keys(i).length),\n                  n.push(i[e[t]]),\n                  o === r - 1)\n                )\n                  for (; n.length % 4 != 0; ) n.push(0);\n              });\n            }),\n            { array: new Float32Array(n), count: Object.keys(i).length }\n          );\n        },\n        p = function (t) {\n          for (\n            var e = [],\n              n = t.length,\n              r = t[0].length,\n              i = function (r) {\n                t.forEach(function (t, i) {\n                  if ((e.push(t[r]), i === n - 1))\n                    for (; e.length % 4 != 0; ) e.push(0);\n                });\n              },\n              o = 0;\n            o < r;\n            o++\n          )\n            i(o);\n          return new Float32Array(e);\n        },\n        g = function (t, e) {\n          var n = { x: 1 / 0, y: 1 / 0 },\n            r = { x: -1 / 0, y: -1 / 0 },\n            i = \"x\",\n            o = \"y\";\n          e && [\"V\", \"TB\", \"BT\"].indexOf(e) >= 0 && ((o = \"x\"), (i = \"y\"));\n          var a = 0;\n          c(t, function (t) {\n            return (\n              a++,\n              t.x > r.x && (r.x = t.x),\n              t.x < n.x && (n.x = t.x),\n              t.y > r.y && (r.y = t.y),\n              t.y < n.y && (n.y = t.y),\n              !0\n            );\n          });\n          var s = (2 * Math.PI) / a,\n            u = r[o] - n[o];\n          return (\n            0 === u ||\n              c(t, function (e) {\n                var r = ((e[o] - n[o]) / u) * (2 * Math.PI - s) + s,\n                  a = Math.abs(\"x\" === i ? e.x - t.x : e.y - t.y);\n                return (e.x = a * Math.cos(r)), (e.y = a * Math.sin(r)), !0;\n              }),\n            t\n          );\n        },\n        v = Object(i.a)(Object(i.a)(Object(i.a)({}, a.h), o), r);\n      e.a = v;\n    },\n    423: function (t, e, n) {\n      \"use strict\";\n      var r = function () {\n        return (r =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function i(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      var o = n(2),\n        a = n(0);\n      Object(o.l)(\n        \"circle\",\n        {\n          options: {\n            size: o.e.defaultNode.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultNode.style.stroke,\n              fill: o.e.defaultNode.style.fill,\n              lineWidth: o.e.defaultNode.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.nodeLabel.style.fill,\n                fontSize: o.e.nodeLabel.style.fontSize,\n              },\n            },\n            linkPoints: {\n              top: !1,\n              right: !1,\n              bottom: !1,\n              left: !1,\n              size: o.e.defaultNode.linkPoints.size,\n              lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n              fill: o.e.defaultNode.linkPoints.fill,\n              stroke: o.e.defaultNode.linkPoints.stroke,\n            },\n            icon: {\n              show: !1,\n              img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n              width: 20,\n              height: 20,\n            },\n            stateStyles: r({}, o.e.nodeStateStyles),\n          },\n          shapeType: \"circle\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getOptions(t).icon,\n              i = void 0 === n ? {} : n,\n              o = this.getShapeStyle(t),\n              s = Object(a.deepMix)({}, i, t.icon),\n              c = e.addShape(\"circle\", {\n                attrs: o,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              }),\n              u = s.width,\n              h = s.height,\n              l = s.show,\n              f = s.text;\n            return (\n              l &&\n                (f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        s,\n                      ),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r({ x: -u / 2, y: -h / 2 }, s),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    })),\n              this.drawLinkPoints(t, e),\n              c\n            );\n          },\n          drawLinkPoints: function (t, e) {\n            var n = this.getOptions(t).linkPoints,\n              o = void 0 === n ? {} : n,\n              a = o.top,\n              s = o.left,\n              c = o.right,\n              u = o.bottom,\n              h = o.size,\n              l = o.r,\n              f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n              d = this.getSize(t)[0] / 2;\n            s &&\n              e.addShape(\"circle\", {\n                attrs: r(r({}, f), { x: -d, y: 0, r: h / 2 || l || 5 }),\n                className: \"link-point-left\",\n                name: \"link-point-left\",\n                isAnchorPoint: !0,\n              }),\n              c &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: d, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-right\",\n                  name: \"link-point-right\",\n                  isAnchorPoint: !0,\n                }),\n              a &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: 0, y: -d, r: h / 2 || l || 5 }),\n                  className: \"link-point-top\",\n                  name: \"link-point-top\",\n                  isAnchorPoint: !0,\n                }),\n              u &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: 0, y: d, r: h / 2 || l || 5 }),\n                  className: \"link-point-bottom\",\n                  name: \"link-point-bottom\",\n                  isAnchorPoint: !0,\n                });\n          },\n          getShapeStyle: function (t) {\n            var e = this.getOptions(t).style,\n              n = { stroke: t.color },\n              i = Object(a.deepMix)({}, e, n),\n              o = this.getSize(t)[0] / 2;\n            return r({ x: 0, y: 0, r: o }, i);\n          },\n          update: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getSize(t),\n              i = { stroke: t.color, r: r[0] / 2 },\n              o = e.get(\"keyShape\"),\n              s = Object(a.deepMix)({}, o.attr(), i, t.style);\n            this.updateShape(t, e, s, !0), this.updateLinkPoints(t, n);\n          },\n        },\n        \"single-node\",\n      ),\n        Object(o.l)(\n          \"rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t),\n                r = e.addShape(\"rect\", {\n                  attrs: n,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                });\n              return this.drawLinkPoints(t, e), r;\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = i.width || o[0],\n                c = i.height || o[1];\n              return r({ x: -s / 2, y: -c / 2, width: s, height: c }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getSize(t),\n                o = e.get(\"keyShape\");\n              t.size ||\n                ((i[0] = o.attr(\"width\") || r.width),\n                (i[1] = o.attr(\"height\") || r.height));\n              var s = {\n                  stroke: t.color,\n                  x: -i[0] / 2,\n                  y: -i[1] / 2,\n                  width: i[0],\n                  height: i[1],\n                },\n                c = Object(a.mix)({}, r, o.attr(), s);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !1),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"ellipse\",\n          {\n            options: {\n              size: [80, 40],\n              style: {\n                x: 0,\n                y: 0,\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"ellipse\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"ellipse\", {\n                  attrs: o,\n                  className: \"ellipse-keyShape\",\n                  name: \"ellipse-keyShape\",\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0] / 2,\n                g = d[1] / 2;\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = o[0] / 2,\n                c = o[1] / 2;\n              return r({ x: 0, y: 0, rx: s, ry: c }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getSize(t),\n                o = { stroke: t.color, rx: i[0] / 2, ry: i[1] / 2 },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"diamond\",\n          {\n            options: {\n              size: [80, 80],\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"diamond\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"path\", {\n                  attrs: o,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getPath: function (t) {\n              var e = this.getSize(t),\n                n = e[0],\n                r = e[1];\n              return [\n                [\"M\", 0, -r / 2],\n                [\"L\", n / 2, 0],\n                [\"L\", 0, r / 2],\n                [\"L\", -n / 2, 0],\n                [\"Z\"],\n              ];\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"triangle\",\n          {\n            options: {\n              size: 40,\n              direction: \"up\",\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n                offset: 15,\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n                offset: 6,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"triangle\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t),\n                i = n.icon,\n                o = void 0 === i ? {} : i,\n                a = n.direction,\n                s = this.getShapeStyle(t),\n                c = t.direction || a,\n                u = e.addShape(\"path\", {\n                  attrs: s,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                h = o.width,\n                l = o.height,\n                f = o.show,\n                d = o.offset,\n                p = o.text;\n              if (f)\n                if (p)\n                  e.addShape(\"text\", {\n                    attrs: r(\n                      {\n                        x: 0,\n                        y: 0,\n                        fontSize: 12,\n                        fill: \"#000\",\n                        stroke: \"#000\",\n                        textBaseline: \"middle\",\n                        textAlign: \"center\",\n                      },\n                      o,\n                    ),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  });\n                else {\n                  var g = -h / 2,\n                    v = -l / 2;\n                  (\"up\" !== c && \"down\" !== c) || (v += d),\n                    (\"left\" !== c && \"right\" !== c) || (g += d),\n                    e.addShape(\"image\", {\n                      attrs: r({ x: g, y: v }, o),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    });\n                }\n              return this.drawLinkPoints(t, e), u;\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t),\n                o = n.linkPoints,\n                a = void 0 === o ? {} : o,\n                s = n.direction,\n                c = t.direction || s,\n                u = a.top,\n                h = a.left,\n                l = a.right,\n                f = a.bottom,\n                d = a.size,\n                p = a.r,\n                g = i(a, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                v = this.getSize(t)[0];\n              if (h) {\n                var y = null,\n                  m = v * Math.sin((1 / 3) * Math.PI),\n                  b = v * Math.sin((1 / 3) * Math.PI);\n                \"up\" === c\n                  ? (y = [-b, m])\n                  : \"down\" === c\n                  ? (y = [-b, -m])\n                  : \"left\" === c && (y = [-b, b - m]),\n                  y &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: y[0],\n                        y: y[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-left\",\n                      name: \"link-point-left\",\n                    });\n              }\n              if (l) {\n                var x = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"up\" === c\n                  ? (x = [b, m])\n                  : \"down\" === c\n                  ? (x = [b, -m])\n                  : \"right\" === c && (x = [b, b - m]),\n                  x &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: x[0],\n                        y: x[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-right\",\n                      name: \"link-point-right\",\n                    });\n              }\n              if (u) {\n                var S = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"up\" === c\n                  ? (S = [b - m, -m])\n                  : \"left\" === c\n                  ? (S = [b, -m])\n                  : \"right\" === c && (S = [-b, -m]),\n                  S &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: S[0],\n                        y: S[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-top\",\n                      name: \"link-point-top\",\n                    });\n              }\n              if (f) {\n                var w = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"down\" === c\n                  ? (w = [-b + m, m])\n                  : \"left\" === c\n                  ? (w = [b, m])\n                  : \"right\" === c && (w = [-b, m]),\n                  w &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: w[0],\n                        y: w[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-bottom\",\n                      name: \"link-point-bottom\",\n                    });\n              }\n            },\n            getPath: function (t) {\n              var e = this.getOptions(t).direction,\n                n = t.direction || e,\n                r = this.getSize(t)[0],\n                i = r * Math.sin((1 / 3) * Math.PI),\n                o = r * Math.sin((1 / 3) * Math.PI),\n                a = [[\"M\", -o, i], [\"L\", 0, -i], [\"L\", o, i], [\"Z\"]];\n              return (\n                \"down\" === n\n                  ? (a = [[\"M\", -o, -i], [\"L\", o, -i], [\"L\", 0, i], [\"Z\"]])\n                  : \"left\" === n\n                  ? (a = [[\"M\", -o, o - i], [\"L\", o, -o], [\"L\", o, o], [\"Z\"]])\n                  : \"right\" === n &&\n                    (a = [[\"M\", o, o - i], [\"L\", -o, o], [\"L\", -o, -o], [\"Z\"]]),\n                a\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n            updateLinkPoints: function (t, e) {\n              var n = this.getOptions({}),\n                i = n.linkPoints,\n                o = n.direction,\n                s = t.direction || o,\n                c = e.find(function (t) {\n                  return \"link-point-left\" === t.get(\"className\");\n                }),\n                u = e.find(function (t) {\n                  return \"link-point-right\" === t.get(\"className\");\n                }),\n                h = e.find(function (t) {\n                  return \"link-point-top\" === t.get(\"className\");\n                }),\n                l = e.find(function (t) {\n                  return \"link-point-bottom\" === t.get(\"className\");\n                }),\n                f = i,\n                d = c || u || h || l;\n              d && (f = d.attr());\n              var p = Object(a.mix)({}, f, t.linkPoints),\n                g = p.fill,\n                v = p.stroke,\n                y = p.lineWidth,\n                m = p.size / 2;\n              m || (m = p.r);\n              var b = t.linkPoints\n                  ? t.linkPoints\n                  : {\n                      left: void 0,\n                      right: void 0,\n                      top: void 0,\n                      bottom: void 0,\n                    },\n                x = b.left,\n                S = b.right,\n                w = b.top,\n                O = b.bottom,\n                M = this.getSize(t)[0],\n                k = { r: m, fill: g, stroke: v, lineWidth: y },\n                j = null,\n                C = M * Math.sin((1 / 3) * Math.PI),\n                E = M * Math.sin((1 / 3) * Math.PI);\n              \"up\" === s\n                ? (j = [-E, C])\n                : \"down\" === s\n                ? (j = [-E, -C])\n                : \"left\" === s && (j = [-E, E - C]),\n                j &&\n                  (c\n                    ? x || void 0 === x\n                      ? c.attr(r(r({}, k), { x: j[0], y: j[1] }))\n                      : c.remove()\n                    : x &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: j[0], y: j[1] }),\n                        className: \"link-point-left\",\n                        name: \"link-point-left\",\n                        isAnchorPoint: !0,\n                      }));\n              var P = null;\n              \"up\" === s\n                ? (P = [E, C])\n                : \"down\" === s\n                ? (P = [E, -C])\n                : \"right\" === s && (P = [E, E - C]),\n                P &&\n                  (u\n                    ? S || void 0 === S\n                      ? u.attr(r(r({}, k), { x: P[0], y: P[1] }))\n                      : u.remove()\n                    : S &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: P[0], y: P[1] }),\n                        className: \"link-point-right\",\n                        name: \"link-point-right\",\n                        isAnchorPoint: !0,\n                      }));\n              var A = null;\n              \"up\" === s\n                ? (A = [E - C, -C])\n                : \"left\" === s\n                ? (A = [E, -C])\n                : \"right\" === s && (A = [-E, -C]),\n                A &&\n                  (h\n                    ? w || void 0 === w\n                      ? h.attr(r(r({}, k), { x: A[0], y: A[1] }))\n                      : h.remove()\n                    : w &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: A[0], y: A[1] }),\n                        className: \"link-point-top\",\n                        name: \"link-point-top\",\n                        isAnchorPoint: !0,\n                      }));\n              var I = null;\n              \"down\" === s\n                ? (I = [-E + C, C])\n                : \"left\" === s\n                ? (I = [E, C])\n                : \"right\" === s && (I = [-E, C]),\n                I &&\n                  (l\n                    ? O || void 0 === O\n                      ? l.attr(r(r({}, k), { x: I[0], y: I[1] }))\n                      : l.remove()\n                    : O &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: I[0], y: I[1] }),\n                        className: \"link-point-bottom\",\n                        name: \"link-point-bottom\",\n                        isAnchorPoint: !0,\n                      }));\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"modelRect\",\n          {\n            options: {\n              size: [185, 70],\n              style: {\n                radius: 5,\n                stroke: \"#69c0ff\",\n                fill: \"#ffffff\",\n                lineWidth: o.e.defaultNode.style.lineWidth,\n                fillOpacity: 1,\n              },\n              labelCfg: {\n                style: { fill: \"#595959\", fontSize: 14 },\n                offset: 30,\n              },\n              descriptionCfg: {\n                style: { fontSize: 12, fill: \"#bfbfbf\" },\n                paddingTop: 0,\n              },\n              preRect: { show: !0, width: 4, fill: \"#40a9ff\", radius: 2 },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: 10,\n                lineWidth: 1,\n                fill: \"#72CC4A\",\n                stroke: \"#72CC4A\",\n              },\n              logoIcon: {\n                show: !0,\n                x: 0,\n                y: 0,\n                img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n                width: 16,\n                height: 16,\n                offset: 0,\n              },\n              stateIcon: {\n                show: !0,\n                x: 0,\n                y: 0,\n                img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n                width: 16,\n                height: 16,\n                offset: -5,\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n            },\n            shapeType: \"modelRect\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).preRect,\n                o = void 0 === n ? {} : n,\n                a = this.getShapeStyle(t),\n                s = this.getSize(t),\n                c = s[0],\n                u = s[1],\n                h = e.addShape(\"rect\", {\n                  attrs: a,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                l = o.show,\n                f = i(o, [\"show\"]);\n              return (\n                l &&\n                  e.addShape(\"rect\", {\n                    attrs: r({ x: -c / 2, y: -u / 2, height: u }, f),\n                    className: \"pre-rect\",\n                    name: \"pre-rect\",\n                    draggable: !0,\n                  }),\n                this.drawLogoIcon(t, e),\n                this.drawStateIcon(t, e),\n                this.drawLinkPoints(t, e),\n                h\n              );\n            },\n            drawLogoIcon: function (t, e) {\n              var n = this.getOptions(t).logoIcon,\n                o = void 0 === n ? {} : n,\n                a = this.getSize(t)[0];\n              if (o.show) {\n                var s = o.width,\n                  c = o.height,\n                  u = o.x,\n                  h = o.y,\n                  l = o.offset,\n                  f = o.text,\n                  d = i(o, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n                f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        d,\n                      ),\n                      className: \"rect-logo-icon\",\n                      name: \"rect-logo-icon\",\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r(r({}, d), {\n                        x: u || -a / 2 + s + l,\n                        y: h || -c / 2,\n                        width: s,\n                        height: c,\n                      }),\n                      className: \"rect-logo-icon\",\n                      name: \"rect-logo-icon\",\n                      draggable: !0,\n                    });\n              }\n            },\n            drawStateIcon: function (t, e) {\n              var n = this.getOptions(t).stateIcon,\n                o = void 0 === n ? {} : n,\n                a = this.getSize(t)[0];\n              if (o.show) {\n                var s = o.width,\n                  c = o.height,\n                  u = o.x,\n                  h = o.y,\n                  l = o.offset,\n                  f = o.text,\n                  d = i(o, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n                f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        d,\n                      ),\n                      className: \"rect-state-icon\",\n                      name: \"rect-state-icon\",\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r(r({}, d), {\n                        x: u || a / 2 - s + l,\n                        y: h || -c / 2,\n                        width: s,\n                        height: c,\n                      }),\n                      className: \"rect-state-icon\",\n                      name: \"rect-state-icon\",\n                      draggable: !0,\n                    });\n              }\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            drawLabel: function (t, e) {\n              var n = this.getOptions(t),\n                i = n.labelCfg,\n                o = void 0 === i ? {} : i,\n                s = n.logoIcon,\n                c = void 0 === s ? {} : s,\n                u = n.descriptionCfg,\n                h = void 0 === u ? {} : u,\n                l = this.getSize(t)[0],\n                f = null,\n                d = c.show,\n                p = c.width,\n                g = -l / 2 + o.offset;\n              d && (g = -l / 2 + p + o.offset);\n              var v = o.style,\n                y = h.style,\n                m = h.paddingTop;\n              return (\n                Object(a.isString)(t.description)\n                  ? ((f = e.addShape(\"text\", {\n                      attrs: r(r({}, v), { x: g, y: -5, text: t.label }),\n                      className: \"text-shape\",\n                      name: \"text-shape\",\n                      draggable: !0,\n                    })),\n                    e.addShape(\"text\", {\n                      attrs: r(r({}, y), {\n                        x: g,\n                        y: 17 + (m || 0),\n                        text: t.description,\n                      }),\n                      className: \"rect-description\",\n                      name: \"rect-description\",\n                      draggable: !0,\n                    }))\n                  : (f = e.addShape(\"text\", {\n                      attrs: r(r({}, v), { x: g, y: 7, text: t.label }),\n                      className: \"text-shape\",\n                      name: \"text-shape\",\n                      draggable: !0,\n                    })),\n                f\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = i.width || o[0],\n                c = i.height || o[1];\n              return r({ x: -s / 2, y: -c / 2, width: s, height: c }, i);\n            },\n            update: function (t, e) {\n              var n = this.getOptions(t),\n                o = n.style,\n                s = void 0 === o ? {} : o,\n                c = n.labelCfg,\n                u = void 0 === c ? {} : c,\n                h = n.descriptionCfg,\n                l = void 0 === h ? {} : h,\n                f = this.getSize(t),\n                d = f[0],\n                p = f[1];\n              e.get(\"keyShape\").attr(\n                r(r({}, s), { x: -d / 2, y: -p / 2, width: d, height: p }),\n              );\n              var g = e.getContainer(),\n                v = g.find(function (t) {\n                  return \"rect-logo-icon\" === t.get(\"className\");\n                }),\n                y = v ? v.attr() : {},\n                m = Object(a.mix)({}, y, t.logoIcon),\n                b = m.width;\n              void 0 === b && (b = this.options.logoIcon.width);\n              var x = t.logoIcon ? t.logoIcon.show : void 0,\n                S = u.offset,\n                w = -d / 2 + b + S;\n              x || void 0 === x || (w = -d / 2 + S);\n              var O = g.find(function (t) {\n                  return \"node-label\" === t.get(\"className\");\n                }),\n                M = g.find(function (t) {\n                  return \"rect-description\" === t.get(\"className\");\n                });\n              if (t.label)\n                if (O) {\n                  var k = t.labelCfg ? t.labelCfg.style : {},\n                    j = Object(a.mix)({}, O.attr(), k);\n                  t.label && (j.text = t.label),\n                    (j.x = w),\n                    Object(a.isString)(t.description) && (j.y = -5),\n                    M && (M.resetMatrix(), M.attr({ x: w })),\n                    O.resetMatrix(),\n                    O.attr(j);\n                } else\n                  g.addShape(\"text\", {\n                    attrs: r(r({}, u.style), {\n                      x: w,\n                      y: t.description ? -5 : 7,\n                      text: t.label,\n                    }),\n                    className: \"node-label\",\n                    name: \"node-label\",\n                    draggable: !0,\n                  });\n              if (Object(a.isString)(t.description)) {\n                var C = l.paddingTop;\n                if (M) {\n                  k = t.descriptionCfg ? t.descriptionCfg.style : {};\n                  var E = Object(a.mix)({}, M.attr(), k);\n                  Object(a.isString)(t.description) && (E.text = t.description),\n                    (E.x = w),\n                    M.resetMatrix(),\n                    M.attr(r(r({}, E), { y: 17 + (C || 0) }));\n                } else\n                  g.addShape(\"text\", {\n                    attrs: r(r({}, l.style), {\n                      x: w,\n                      y: 17 + (C || 0),\n                      text: t.description,\n                    }),\n                    className: \"rect-description\",\n                    name: \"rect-description\",\n                    draggable: !0,\n                  });\n              }\n              var P = g.find(function (t) {\n                return \"pre-rect\" === t.get(\"className\");\n              });\n              if (P) {\n                var A = Object(a.mix)({}, P.attr(), t.preRect);\n                P.attr(r(r({}, A), { x: -d / 2, y: -p / 2, height: p }));\n              }\n              if (v)\n                if (x || void 0 === x) {\n                  var I = m.width,\n                    T = m.height,\n                    N = m.x,\n                    B = m.y,\n                    L = m.offset,\n                    D = i(m, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n                  v.attr(\n                    r(r({}, D), {\n                      x: N || -d / 2 + I + L,\n                      y: B || -T / 2,\n                      width: I,\n                      height: T,\n                    }),\n                  );\n                } else v.remove();\n              else x && this.drawLogoIcon(t, g);\n              var _ = g.find(function (t) {\n                  return \"rect-state-icon\" === t.get(\"className\");\n                }),\n                R = _ ? _.attr() : {},\n                F = Object(a.mix)({}, R, t.stateIcon);\n              if (_) {\n                F.show || void 0 === F.show || _.remove();\n                var Y = F.width,\n                  X = ((T = F.height), (N = F.x), (B = F.y), F.offset),\n                  z = i(F, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n                _.attr(\n                  r(r({}, z), {\n                    x: N || d / 2 - Y + X,\n                    y: B || -T / 2,\n                    width: Y,\n                    height: T,\n                  }),\n                );\n              } else F.show && this.drawStateIcon(t, g);\n              this.updateLinkPoints(t, g);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"star\",\n          {\n            options: {\n              size: 60,\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"star\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"path\", {\n                  attrs: o,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.leftBottom,\n                h = o.rightBottom,\n                l = o.size,\n                f = o.r,\n                d = i(o, [\n                  \"top\",\n                  \"left\",\n                  \"right\",\n                  \"leftBottom\",\n                  \"rightBottom\",\n                  \"size\",\n                  \"r\",\n                ]),\n                p = this.getSize(t)[0];\n              if (c) {\n                var g = Math.cos(0.1 * Math.PI) * p,\n                  v = Math.sin(0.1 * Math.PI) * p;\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-right\",\n                  name: \"link-point-right\",\n                });\n              }\n              if (a) {\n                (g = Math.cos(0.5 * Math.PI) * p),\n                  (v = Math.sin(0.5 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-top\",\n                  name: \"link-point-top\",\n                });\n              }\n              if (s) {\n                (g = Math.cos(0.9 * Math.PI) * p),\n                  (v = Math.sin(0.9 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                });\n              }\n              if (u) {\n                (g = Math.cos(1.3 * Math.PI) * p),\n                  (v = Math.sin(1.3 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-left-bottom\",\n                  name: \"link-point-left-bottom\",\n                });\n              }\n              if (h) {\n                (g = Math.cos(1.7 * Math.PI) * p),\n                  (v = Math.sin(1.7 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-right-bottom\",\n                  name: \"link-point-right-bottom\",\n                });\n              }\n            },\n            getPath: function (t) {\n              for (\n                var e = this.getSize(t)[0],\n                  n = (3 * e) / 8,\n                  r = t.innerR || n,\n                  i = [],\n                  o = 0;\n                o < 5;\n                o++\n              ) {\n                var a = Math.cos(((18 + 72 * o) / 180) * Math.PI) * e,\n                  s = Math.sin(((18 + 72 * o) / 180) * Math.PI) * e,\n                  c = Math.cos(((54 + 72 * o) / 180) * Math.PI) * r,\n                  u = Math.sin(((54 + 72 * o) / 180) * Math.PI) * r;\n                0 === o ? i.push([\"M\", a, -s]) : i.push([\"L\", a, -s]),\n                  i.push([\"L\", c, -u]);\n              }\n              return i.push([\"Z\"]), i;\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n            updateLinkPoints: function (t, e) {\n              var n = this.getOptions({}).linkPoints,\n                i = e.find(function (t) {\n                  return \"link-point-left\" === t.get(\"className\");\n                }),\n                o = e.find(function (t) {\n                  return \"link-point-right\" === t.get(\"className\");\n                }),\n                s = e.find(function (t) {\n                  return \"link-point-top\" === t.get(\"className\");\n                }),\n                c = e.find(function (t) {\n                  return \"link-point-left-bottom\" === t.get(\"className\");\n                }),\n                u = e.find(function (t) {\n                  return \"link-point-right-bottom\" === t.get(\"className\");\n                }),\n                h = n,\n                l = i || o || s || c || u;\n              l && (h = l.attr());\n              var f = Object(a.mix)({}, h, t.linkPoints),\n                d = f.fill,\n                p = f.stroke,\n                g = f.lineWidth,\n                v = f.size / 2;\n              v || (v = f.r);\n              var y = t.linkPoints\n                  ? t.linkPoints\n                  : {\n                      left: void 0,\n                      right: void 0,\n                      top: void 0,\n                      leftBottom: void 0,\n                      rightBottom: void 0,\n                    },\n                m = y.left,\n                b = y.right,\n                x = y.top,\n                S = y.leftBottom,\n                w = y.rightBottom,\n                O = this.getSize(t)[0],\n                M = { r: v, fill: d, stroke: p, lineWidth: g },\n                k = Math.cos(0.1 * Math.PI) * O,\n                j = Math.sin(0.1 * Math.PI) * O;\n              o\n                ? b || void 0 === b\n                  ? o.attr(r(r({}, M), { x: k, y: -j }))\n                  : o.remove()\n                : b &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, M), { x: k, y: -j }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                (k = Math.cos(0.5 * Math.PI) * O),\n                (j = Math.sin(0.5 * Math.PI) * O),\n                s\n                  ? x || void 0 === x\n                    ? s.attr(r(r({}, M), { x: k, y: -j }))\n                    : s.remove()\n                  : x &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-top\",\n                      name: \"link-point-top\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(0.9 * Math.PI) * O),\n                (j = Math.sin(0.9 * Math.PI) * O),\n                i\n                  ? m || void 0 === m\n                    ? i.attr(r(r({}, M), { x: k, y: -j }))\n                    : i.remove()\n                  : m &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-left\",\n                      name: \"link-point-left\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(1.3 * Math.PI) * O),\n                (j = Math.sin(1.3 * Math.PI) * O),\n                c\n                  ? S || void 0 === S\n                    ? c.attr(r(r({}, M), { x: k, y: -j }))\n                    : c.remove()\n                  : S &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-left-bottom\",\n                      name: \"link-point-left-bottom\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(1.7 * Math.PI) * O),\n                (j = Math.sin(1.7 * Math.PI) * O),\n                u\n                  ? w || void 0 === w\n                    ? u.attr(r(r({}, M), { x: k, y: -j }))\n                    : c.remove()\n                  : w &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-right-bottom\",\n                      name: \"link-point-right-bottom\",\n                      isAnchorPoint: !0,\n                    });\n            },\n          },\n          \"single-node\",\n        );\n      var s = o.h.defaultSubjectColors;\n      Object(o.l)(\n        \"donut\",\n        {\n          options: {\n            size: o.e.defaultNode.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultNode.style.stroke,\n              fill: o.e.defaultNode.style.fill,\n              lineWidth: o.e.defaultNode.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.nodeLabel.style.fill,\n                fontSize: o.e.nodeLabel.style.fontSize,\n              },\n            },\n            linkPoints: {\n              top: !1,\n              right: !1,\n              bottom: !1,\n              left: !1,\n              size: o.e.defaultNode.linkPoints.size,\n              lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n              fill: o.e.defaultNode.linkPoints.fill,\n              stroke: o.e.defaultNode.linkPoints.stroke,\n            },\n            icon: {\n              show: !1,\n              img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n              width: 20,\n              height: 20,\n            },\n            stateStyles: r({}, o.e.nodeStateStyles),\n          },\n          shapeType: \"circle\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getOptions(t).icon,\n              i = void 0 === n ? {} : n,\n              o = this.getShapeStyle(t),\n              c = Object(a.deepMix)({}, i, t.icon),\n              u = e.addShape(\"circle\", {\n                attrs: o,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n                name: \"\".concat(this.type, \"-keyShape\"),\n              }),\n              h = c.width,\n              l = c.height,\n              f = c.show,\n              d = c.text;\n            f &&\n              (d\n                ? e.addShape(\"text\", {\n                    attrs: r(\n                      {\n                        x: 0,\n                        y: 0,\n                        fontSize: 12,\n                        fill: \"#000\",\n                        stroke: \"#000\",\n                        textBaseline: \"middle\",\n                        textAlign: \"center\",\n                      },\n                      c,\n                    ),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  })\n                : e.addShape(\"image\", {\n                    attrs: r({ x: -h / 2, y: -l / 2 }, c),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  }));\n            var p = u.attr(\"r\"),\n              g = 0.6 * p,\n              v = (p + g) / 2,\n              y = t,\n              m = y.donutAttrs,\n              b = void 0 === m ? {} : m,\n              x = y.donutColorMap,\n              S = void 0 === x ? {} : x,\n              w = Object.keys(b).length;\n            if (b && w > 1) {\n              var O = [],\n                M = 0;\n              if (\n                (Object.keys(b).forEach(function (t) {\n                  var e = b[t] || 0;\n                  Object(a.isNumber)(e) &&\n                    (O.push({ key: t, value: e, color: S[t] }), (M += e));\n                }),\n                M)\n              ) {\n                var k = p - g;\n                if (1 === w)\n                  return void e.addShape(\"circle\", {\n                    attrs: {\n                      r: v,\n                      x: 0,\n                      y: 0,\n                      stroke: O[0].color || s[0],\n                      lineWidth: k,\n                    },\n                    name: \"fan-shape-0\",\n                  });\n                var j = [v, 0],\n                  C = 0;\n                O.forEach(function (t, n) {\n                  var r = t.value / M;\n                  if (!(r < 0.001))\n                    if ((r > 0.999 && (r = 1), 1 !== r)) {\n                      (t.percent = r),\n                        (t.angle = r * Math.PI * 2),\n                        (t.beginAgnle = C),\n                        (C += t.angle),\n                        (t.endAngle = C),\n                        (t.arcBegin = j),\n                        (t.arcEnd = [\n                          v * Math.cos(t.endAngle),\n                          -v * Math.sin(t.endAngle),\n                        ]);\n                      var i = t.angle > Math.PI ? 1 : 0,\n                        o = [\n                          [\"M\", t.arcBegin[0], t.arcBegin[1]],\n                          [\"A\", v, v, 0, i, 0, t.arcEnd[0], t.arcEnd[1]],\n                          [\"L\", t.arcEnd[0], t.arcEnd[1]],\n                        ];\n                      e.addShape(\"path\", {\n                        attrs: {\n                          path: o,\n                          lineWidth: k,\n                          stroke: t.color || s[n % s.length],\n                        },\n                        name: \"fan-shape-\".concat(n),\n                      }),\n                        (j = t.arcEnd);\n                    } else\n                      e.addShape(\"circle\", {\n                        attrs: {\n                          r: v,\n                          x: 0,\n                          y: 0,\n                          stroke: t.color || s[n % s.length],\n                          lineWidth: k,\n                        },\n                        name: \"fan-shape-\".concat(n),\n                      });\n                });\n              }\n            }\n            return this.drawLinkPoints(t, e), u;\n          },\n          update: void 0,\n        },\n        \"circle\",\n      );\n      var c = function (t) {\n          var e = t.x,\n            n = t.y;\n          return {\n            x: e,\n            y: n,\n            centerX: e,\n            centerY: n,\n            minX: e,\n            minY: n,\n            maxX: e,\n            maxY: n,\n            height: 0,\n            width: 0,\n          };\n        },\n        u = function (t) {\n          for (var e = [], n = {}, r = t.length - 1; r >= 0; r--) {\n            var i = t[r];\n            (i.id = \"\".concat(i.x, \"|||\").concat(i.y)),\n              (n[i.id] = i),\n              e.push(i);\n          }\n          return e;\n        },\n        h = function (t) {\n          return u(t);\n        },\n        l = function (t, e) {\n          return t.width || t.height\n            ? {\n                centerX: t.centerX,\n                centerY: t.centerY,\n                minX: t.minX - e,\n                minY: t.minY - e,\n                maxX: t.maxX + e,\n                maxY: t.maxY + e,\n                height: t.height + 2 * e,\n                width: t.width + 2 * e,\n              }\n            : t;\n        },\n        f = function (t, e, n) {\n          var r = (function (t, e) {\n            var n = Math.abs(t.x - e.centerX),\n              r = Math.abs(t.y - e.centerY);\n            return 0 === n && 0 === r ? 0 : n / e.width > r / e.height;\n          })(e, t);\n          if (0 === r) {\n            var i = t.centerX,\n              o = t.centerY;\n            return (\n              n.y < e.y\n                ? (o = t.minY)\n                : n.x > e.x\n                ? (i = t.maxX)\n                : n.x < e.x\n                ? (i = t.minX)\n                : n.x === e.x && (o = t.maxY),\n              { x: i, y: o }\n            );\n          }\n          return r\n            ? { x: e.x > t.centerX ? t.maxX : t.minX, y: e.y }\n            : { x: e.x, y: e.y > t.centerY ? t.maxY : t.minY };\n        },\n        d = function (t, e) {\n          var n = Math.min(t.minX, e.minX),\n            r = Math.min(t.minY, e.minY),\n            i = Math.max(t.maxX, e.maxX),\n            o = Math.max(t.maxY, e.maxY);\n          return {\n            centerX: (n + i) / 2,\n            centerY: (r + o) / 2,\n            minX: n,\n            minY: r,\n            maxX: i,\n            maxY: o,\n            height: o - r,\n            width: i - n,\n          };\n        },\n        p = function (t) {\n          return [\n            { x: t.minX, y: t.minY },\n            { x: t.maxX, y: t.minY },\n            { x: t.maxX, y: t.maxY },\n            { x: t.minX, y: t.maxY },\n          ];\n        },\n        g = function (t, e) {\n          var n = t.x,\n            r = t.y;\n          return n < e.minX || n > e.maxX || r < e.minY || r > e.maxY;\n        },\n        v = function (t, e) {\n          return Math.abs(t.x - e.x) + Math.abs(t.y - e.y);\n        },\n        y = function (t, e, n, r, i) {\n          return (\n            v(t, e) +\n            v(t, n) +\n            (function (t, e) {\n              var n = 0;\n              return (\n                e.forEach(function (e) {\n                  e && (t.x === e.x && (n += -2), t.y === e.y && (n += -2));\n                }),\n                n\n              );\n            })(t, [e, n, r, i])\n          );\n        },\n        m = function t(e, n, r, i, o) {\n          void 0 === o && (o = 0),\n            e.unshift(n[i]),\n            r[i] && r[i] !== i && o <= 100 && t(e, n, r, r[i], o + 1);\n        },\n        b = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = r.x - t.x,\n            s = r.y - t.y,\n            c = n.x - e.x,\n            u = n.y - e.y,\n            h = r.x - e.x,\n            l = r.y - e.y;\n          return (\n            (i * s - o * a) * (c * l - u * h) <= 0 &&\n            (i * u - o * c) * (a * l - s * h) <= 0\n          );\n        },\n        x = function (t, e, n) {\n          if (n.width || n.height) {\n            var r = p(n),\n              i = r[0],\n              o = r[1],\n              a = r[2],\n              s = r[3];\n            return (\n              b(t, e, i, o) || b(t, e, i, s) || b(t, e, o, a) || b(t, e, a, s)\n            );\n          }\n          return !1;\n        },\n        S = function (t, e, n, r) {\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              if (t !== e && (t.x === e.x || t.y === e.y)) {\n                if (x(t, e, n) || x(t, e, r)) return;\n                i.push(t);\n              }\n            }),\n            u(i)\n          );\n        },\n        w = function (t, e) {\n          var n = [],\n            r = t[0];\n          return (\n            n.push(\"M\".concat(r.x, \" \").concat(r.y)),\n            t.forEach(function (r, i) {\n              var o = t[i + 1],\n                a = t[i + 2];\n              if (o && a)\n                if (\n                  (function (t, e, n) {\n                    return !(\n                      (t.x === e.x && e.x === n.x) ||\n                      (t.y === e.y && e.y === n.y)\n                    );\n                  })(r, o, a)\n                ) {\n                  var s = (function (t, e, n, r) {\n                      var i = v(t, e),\n                        o = v(n, e);\n                      return (\n                        i < r && (r = i),\n                        o < r && (r = o),\n                        [\n                          {\n                            x: e.x - (r / i) * (e.x - t.x),\n                            y: e.y - (r / i) * (e.y - t.y),\n                          },\n                          {\n                            x: e.x - (r / o) * (e.x - n.x),\n                            y: e.y - (r / o) * (e.y - n.y),\n                          },\n                        ]\n                      );\n                    })(r, o, a, e),\n                    c = s[0],\n                    u = s[1];\n                  n.push(\"L\".concat(c.x, \" \").concat(c.y)),\n                    n.push(\n                      \"Q\"\n                        .concat(o.x, \" \")\n                        .concat(o.y, \" \")\n                        .concat(u.x, \" \")\n                        .concat(u.y),\n                    ),\n                    n.push(\"L\".concat(u.x, \" \").concat(u.y));\n                } else n.push(\"L\".concat(o.x, \" \").concat(o.y));\n              else o && n.push(\"L\".concat(o.x, \" \").concat(o.y));\n            }),\n            n.join(\"\")\n          );\n        },\n        O = function (t, e, n, r, i) {\n          var o, a;\n          if (n && n.getType())\n            if (\"combo\" === n.getType()) {\n              ((o = n.getKeyShape().getCanvasBBox() || c(t)).centerX =\n                (o.minX + o.maxX) / 2),\n                (o.centerY = (o.minY + o.maxY) / 2);\n            } else o = n.getBBox();\n          else o = c(t);\n          if (r && r.getType())\n            if (\"combo\" === r.getType()) {\n              var s = r.getKeyShape().getBBox();\n              if (s) {\n                var b = r.getModel(),\n                  x = b.x,\n                  w = b.y;\n                ((a = {\n                  x: x,\n                  y: w,\n                  width: s.width,\n                  height: s.height,\n                  minX: s.minX + x,\n                  maxX: s.maxX + x,\n                  minY: s.minY + w,\n                  maxY: s.maxY + w,\n                }).centerX = (a.minX + a.maxX) / 2),\n                  (a.centerY = (a.minY + a.maxY) / 2);\n              } else a = c(e);\n            } else a = r && r.getBBox();\n          else a = c(e);\n          var O = l(o, i),\n            M = l(a, i),\n            k = f(O, t, e),\n            j = f(M, e, t),\n            C = (function (t) {\n              void 0 === t && (t = []);\n              var e = [],\n                n = [];\n              t.forEach(function (t) {\n                e.push(t.x), n.push(t.y);\n              });\n              var r = Math.min.apply(Math, e),\n                i = Math.max.apply(Math, e),\n                o = Math.min.apply(Math, n),\n                a = Math.max.apply(Math, n);\n              return {\n                centerX: (r + i) / 2,\n                centerY: (o + a) / 2,\n                maxX: i,\n                maxY: a,\n                minX: r,\n                minY: o,\n                height: a - o,\n                width: i - r,\n              };\n            })([k, j]),\n            E = d(O, C),\n            P = d(M, C),\n            A = [];\n          A = A.concat(p(E)).concat(p(P));\n          var I = { x: (t.x + e.x) / 2, y: (t.y + e.y) / 2 };\n          [C, E, P].forEach(function (t) {\n            A = A.concat(\n              (function (t, e) {\n                return (function (t, e) {\n                  return e < t.minX || e > t.maxX\n                    ? []\n                    : [\n                        { x: e, y: t.minY },\n                        { x: e, y: t.maxY },\n                      ];\n                })(t, e.x).concat(\n                  (function (t, e) {\n                    return e < t.minY || e > t.maxY\n                      ? []\n                      : [\n                          { x: t.minX, y: e },\n                          { x: t.maxX, y: e },\n                        ];\n                  })(t, e.y),\n                );\n              })(t, I).filter(function (t) {\n                return g(t, O) && g(t, M);\n              }),\n            );\n          }),\n            [\n              { x: k.x, y: j.y },\n              { x: j.x, y: k.y },\n            ].forEach(function (t) {\n              g(t, O) && g(t, M) && A.push(t);\n            }),\n            A.unshift(k),\n            A.push(j);\n          var T = (function (t, e, n, r, i, o, a) {\n            var s = [],\n              c = [e],\n              u = {},\n              h = {},\n              l = {};\n            (h[e.id] = 0), (l[e.id] = y(e, n, e));\n            var f,\n              d,\n              p,\n              g,\n              b,\n              x = {};\n            for (\n              t.forEach(function (t) {\n                x[t.id] = t;\n              });\n              c.length;\n\n            ) {\n              if (\n                ((f = void 0),\n                (d = 1 / 0),\n                c.forEach(function (t) {\n                  l[t.id] <= d && ((d = l[t.id]), (f = t));\n                }),\n                f === n)\n              ) {\n                var w = [];\n                return m(w, x, u, n.id), w;\n              }\n              (g = f),\n                (b = void 0),\n                (b = (p = c).indexOf(g)) > -1 && p.splice(b, 1),\n                s.push(f),\n                S(t, f, r, i).forEach(function (t) {\n                  if (-1 === s.indexOf(t)) {\n                    -1 === c.indexOf(t) && c.push(t);\n                    var r = l[f.id] + v(f, t);\n                    (h[t.id] && r >= h[t.id]) ||\n                      ((u[t.id] = f.id),\n                      (h[t.id] = r),\n                      (l[t.id] = h[t.id] + y(t, n, e, o, a)));\n                  }\n                });\n            }\n            return [e, n];\n          })((A = u(A)), k, j, o, a, t, e);\n          return T.unshift(t), T.push(e), h(T);\n        },\n        M = {\n          offset: 20,\n          maxAllowedDirectionChange: Math.PI / 2,\n          maximumLoops: 2e3,\n          gridSize: 10,\n          directions: [\n            { stepX: 1, stepY: 0 },\n            { stepX: -1, stepY: 0 },\n            { stepX: 0, stepY: 1 },\n            { stepX: 0, stepY: -1 },\n          ],\n          get penalties() {\n            return { 0: 0, 45: this.gridSize / 2, 90: this.gridSize / 2 };\n          },\n          distFunc: function (t, e) {\n            return Math.abs(t.x - e.x) + Math.abs(t.y - e.y);\n          },\n          fallbackRoute: function (t, e, n, r, i) {\n            return h(O(t, e, n, r, i.offset));\n          },\n        },\n        k =\n          (Math.PI,\n          function (t, e) {\n            var n = Math.round(Math.abs(t / e));\n            return n < 0 ? 0 : (t < 0 ? -1 : 1) * n;\n          }),\n        j = function (t, e) {\n          var n = e.x - t.x,\n            r = e.y - t.y;\n          return n || r ? Math.atan2(r, n) : 0;\n        },\n        C = function (t, e) {\n          var n = Math.abs(t - e);\n          return n > Math.PI ? 2 * Math.PI - n : n;\n        },\n        E = function (t, e, n) {\n          for (var r = 1 / 0, i = 0, o = e.length; i < o; i++) {\n            var a = n(t, e[i]);\n            a < r && (r = a);\n          }\n          return r;\n        },\n        P = function (t, e, n, r, i) {\n          var a = [];\n          if (!n) return [t];\n          var s = i.directions,\n            c = i.offset,\n            u = n.getBBox(),\n            h = e.x > u.minX && e.x < u.maxX && e.y > u.minY && e.y < u.maxY,\n            d = l(u, c);\n          for (var p in d) d[p] = k(d[p], i.gridSize);\n          if (h) {\n            for (var g = 0, v = s; g < v.length; g++) {\n              var y = v[g],\n                m = [\n                  [\n                    { x: d.minX, y: d.minY },\n                    { x: d.maxX, y: d.minY },\n                  ],\n                  [\n                    { x: d.minX, y: d.minY },\n                    { x: d.minX, y: d.maxY },\n                  ],\n                  [\n                    { x: d.maxX, y: d.minY },\n                    { x: d.maxX, y: d.maxY },\n                  ],\n                  [\n                    { x: d.minX, y: d.maxY },\n                    { x: d.maxX, y: d.maxY },\n                  ],\n                ];\n              for (p = 0; p < 4; p++) {\n                var b = m[p],\n                  S = o.h.getLineIntersect(\n                    t,\n                    { x: t.x + y.stepX * d.width, y: t.y + y.stepY * d.height },\n                    b[0],\n                    b[1],\n                  );\n                S &&\n                  !x(t, S, u) &&\n                  ((S.id = \"\".concat(S.x, \"|||\").concat(S.y)), a.push(S));\n              }\n            }\n            return a;\n          }\n          var w = f(d, t, r);\n          return (w.id = \"\".concat(w.x, \"|||\").concat(w.y)), [w];\n        },\n        A = function (t, e, n, r) {\n          var i = j(t, e);\n          if (!n[t.id]) {\n            var o = j(r, t);\n            return C(o, i);\n          }\n          var a = j({ x: n[t.id].x, y: n[t.id].y }, t);\n          return C(a, i);\n        },\n        I = function (t, e, n, r, i, o, a) {\n          var s = [r],\n            c = t.id,\n            u = t.x,\n            h = t.y,\n            l = { x: u, y: h, id: c };\n          for (\n            A(l, o, e, n) &&\n            s.unshift({\n              x: o.x === r.x ? r.x : l.x * a,\n              y: o.y === r.y ? r.y : l.y * a,\n            });\n            e[c] && e[c].id !== c;\n\n          ) {\n            var f = { x: u, y: h, id: c },\n              d = e[c].id,\n              p = e[c].x,\n              g = e[c].y,\n              v = { x: p, y: g, id: d };\n            A(v, f, e, n) &&\n              s.unshift({\n                x: v.x === f.x ? s[0].x : v.x * a,\n                y: v.y === f.y ? s[0].y : v.y * a,\n              }),\n              (c = d),\n              (u = p),\n              (h = g);\n          }\n          var y = u,\n            m = h;\n          return (\n            (s[0].x = y === n.x ? i.x : s[0].x),\n            (s[0].y = m === n.y ? i.y : s[0].y),\n            s.unshift(i),\n            s\n          );\n        },\n        T = function (t, e, n, r, i) {\n          if (isNaN(t.x) || isNaN(e.x)) return [];\n          var o = Object(a.deepMix)(M, i);\n          o.obstacles = o.obstacles || [];\n          var s = o.gridSize,\n            c = (function (t, e, n) {\n              var r = {};\n              return (\n                t.forEach(function (t) {\n                  if (t)\n                    for (\n                      var i = l(t.getBBox(), n), o = k(i.minX, e);\n                      o <= k(i.maxX, e);\n                      o += 1\n                    )\n                      for (var a = k(i.minY, e); a <= k(i.maxY, e); a += 1)\n                        r[\"\".concat(o, \"|||\").concat(a)] = !0;\n                }),\n                r\n              );\n            })(o.obstacles.concat([n, r]), s, o.offset),\n            u = { x: k(t.x, s), y: k(t.y, s) },\n            h = { x: k(e.x, s), y: k(e.y, s) };\n          (t.id = \"\".concat(u.x, \"|||\").concat(u.y)),\n            (e.id = \"\".concat(h.x, \"|||\").concat(h.y));\n          var f = P(u, t, n, h, o),\n            d = P(h, e, r, u, o);\n          f.forEach(function (t) {\n            delete c[t.id];\n          }),\n            d.forEach(function (t) {\n              delete c[t.id];\n            });\n          for (\n            var p = {}, g = {}, v = {}, y = {}, m = {}, b = 0;\n            b < f.length;\n            b++\n          ) {\n            var x = f[b];\n            (p[x.id] = x), (y[x.id] = 0), (m[x.id] = E(x, d, o.distFunc));\n          }\n          for (\n            var S, w, O, j, C, T, N, B = o.maximumLoops, L = o.penalties;\n            Object.keys(p).length > 0 &&\n            B > 0 &&\n            ((S = void 0),\n            (w = 1 / 0),\n            Object.keys(p).forEach(function (t) {\n              var e = p[t].id;\n              m[e] <= w && ((w = m[e]), (S = p[e]));\n            }),\n            S);\n\n          ) {\n            if (\n              d.findIndex(function (t) {\n                return t.x === S.x && t.y === S.y;\n              }) > -1\n            )\n              return I(S, v, u, e, t, h, s);\n            delete p[S.id], (g[S.id] = !0);\n            for (b = 0; b < o.directions.length; b++)\n              (O = o.directions[b]),\n                g[\n                  (j = {\n                    x: S.x + O.stepX,\n                    y: S.y + O.stepY,\n                    id: \"\"\n                      .concat(Math.round(S.x) + O.stepX, \"|||\")\n                      .concat(Math.round(S.y) + O.stepY),\n                  }).id\n                ] ||\n                  (N = A(S, j, v, u)) > o.maxAllowedDirectionChange ||\n                  c[j.id] ||\n                  (p[j.id] || (p[j.id] = j),\n                  (C = o.distFunc(S, j) + (isNaN(L[N]) ? s : L[N])),\n                  (T = y[S.id] + C),\n                  (y[j.id] && T >= y[j.id]) ||\n                    ((v[j.id] = S),\n                    (y[j.id] = T),\n                    (m[j.id] = T + E(j, d, o.distFunc))));\n            B -= 1;\n          }\n          return o.fallbackRoute(t, e, n, r, o);\n        };\n      Object(o.k)(\n        \"polyline\",\n        {\n          options: {\n            color: o.e.defaultEdge.color,\n            size: o.e.defaultEdge.size,\n            style: {\n              radius: 0,\n              offset: 15,\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultEdge.style.stroke,\n              lineAppendWidth: o.e.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.edgeLabel.style.fill,\n                fontSize: o.e.edgeLabel.style.fontSize,\n              },\n            },\n            routeCfg: {\n              obstacles: [],\n              maxAllowedDirectionChange: Math.PI,\n              maximumLoops: 500,\n              gridSize: 10,\n            },\n            stateStyles: r({}, o.e.edgeStateStyles),\n          },\n          shapeType: \"polyline\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return (\n              0 === n.radius && delete n.radius,\n              e.addShape(\"path\", {\n                className: \"edge-shape\",\n                name: \"edge-shape\",\n                attrs: n,\n              })\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(a.mix)({}, e, n, t.style);\n            (t = this.getPathPoints(t)),\n              (this.radius = r.radius),\n              (this.offset = r.offset);\n            var i = t.startPoint,\n              s = t.endPoint,\n              c = this.getControlPoints(t),\n              u = [i];\n            c && (u = u.concat(c)), u.push(s);\n            var h = t.sourceNode,\n              l = t.targetNode,\n              f = r.radius,\n              d = this.options.routeCfg,\n              p = Object(a.mix)({}, d, t.routeCfg);\n            p.offset = r.offset;\n            var g = this.getPath(u, h, l, f, p);\n            return (\n              ((Object(a.isArray)(g) && g.length <= 1) ||\n                (Object(a.isString)(g) && -1 === g.indexOf(\"L\"))) &&\n                (g = \"M0 0, L0 0\"),\n              (isNaN(i.x) || isNaN(i.y) || isNaN(s.x) || isNaN(s.y)) &&\n                (g = \"M0 0, L0 0\"),\n              Object(a.mix)({}, o.e.defaultEdge.style, r, {\n                lineWidth: t.size,\n                path: g,\n              })\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer();\n            if (e.isVisible()) {\n              var r = { stroke: t.color },\n                i =\n                  n.find(function (t) {\n                    return \"edge-shape\" === t.get(\"className\");\n                  }) || e.getKeyShape(),\n                o = t.size,\n                s = (t = this.getPathPoints(t)).startPoint,\n                c = t.endPoint,\n                u = this.getControlPoints(t),\n                h = [s];\n              u && (h = h.concat(u)), h.push(c);\n              var l = i.attr(),\n                f = Object(a.mix)({}, r, l, t.style),\n                d = t.sourceNode,\n                p = t.targetNode,\n                g = f.radius,\n                v = this.options.routeCfg,\n                y = Object(a.mix)({}, v, t.routeCfg);\n              y.offset = f.offset;\n              var m = this.getPath(h, d, p, g, y);\n              ((Object(a.isArray)(m) && m.length <= 1) ||\n                (Object(a.isString)(m) && -1 === m.indexOf(\"L\"))) &&\n                (m = \"M0 0, L0 0\"),\n                (isNaN(s.x) || isNaN(s.y) || isNaN(c.x) || isNaN(c.y)) &&\n                  (m = \"M0 0, L0 0\"),\n                l.endArrow &&\n                  !1 === f.endArrow &&\n                  (t.style.endArrow = { path: \"\" }),\n                l.startArrow &&\n                  !1 === f.startArrow &&\n                  (t.style.startArrow = { path: \"\" });\n              var b = Object(a.mix)(\n                r,\n                i.attr(),\n                { lineWidth: o, path: m },\n                t.style,\n              );\n              i && i.attr(b);\n            }\n          },\n          getPath: function (t, e, n, r, i) {\n            var s = i.offset,\n              c = i.simple;\n            if (!s || t.length > 2) {\n              if (r) return w(t, r);\n              var u = [];\n              return (\n                Object(a.each)(t, function (t, e) {\n                  0 === e ? u.push([\"M\", t.x, t.y]) : u.push([\"L\", t.x, t.y]);\n                }),\n                u\n              );\n            }\n            var h = c\n              ? O(t[t.length - 1], t[0], n, e, s)\n              : T(t[0], t[t.length - 1], e, n, i);\n            return h && h.length\n              ? r\n                ? w(h, r)\n                : o.h.pointsToPolygon(h)\n              : \"M0 0, L0 0\";\n          },\n        },\n        \"single-edge\",\n      );\n    },\n    424: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(2),\n        a = n(41),\n        s = a.a.cloneEvent,\n        c = a.a.isNaN,\n        u = Math.abs,\n        h = {\n          getDefaultCfg: function () {\n            return {\n              direction: \"both\",\n              enableOptimize: !1,\n              scalableRange: 0,\n              allowDragOnItem: !1,\n            };\n          },\n          getEvents: function () {\n            return {\n              dragstart: \"onDragStart\",\n              drag: \"onDragMove\",\n              dragend: \"onDragEnd\",\n            };\n          },\n          updateViewport: function (t) {\n            var e = this.origin,\n              n = +t.clientX,\n              r = +t.clientY;\n            if (!c(n) && !c(r)) {\n              var i = n - e.x,\n                o = r - e.y;\n              \"x\" === this.get(\"direction\")\n                ? (o = 0)\n                : \"y\" === this.get(\"direction\") && (i = 0),\n                (this.origin = { x: n, y: r });\n              var a = this.graph.get(\"width\"),\n                s = this.graph.get(\"height\"),\n                u = this.graph.get(\"canvas\").getCanvasBBox();\n              ((u.minX <= a + this.scalableRange &&\n                u.minX + i > a + this.scalableRange) ||\n                (u.maxX + this.scalableRange >= 0 &&\n                  u.maxX + this.scalableRange + i < 0)) &&\n                (i = 0),\n                ((u.minY <= s + this.scalableRange &&\n                  u.minY + o > s + this.scalableRange) ||\n                  (u.maxY + this.scalableRange >= 0 &&\n                    u.maxY + this.scalableRange + o < 0)) &&\n                  (o = 0),\n                this.graph.translate(i, o);\n            }\n          },\n          onDragStart: function (t) {\n            t.originalEvent;\n            if (this.shouldBegin.call(this, t)) {\n              var e = t.target,\n                n = e && e.isCanvas && e.isCanvas();\n              if (\n                (this.allowDragOnItem || n) &&\n                ((this.origin = { x: t.clientX, y: t.clientY }),\n                (this.dragging = !1),\n                this.enableOptimize)\n              ) {\n                for (\n                  var r = this.graph, i = r.getEdges(), o = 0, a = i.length;\n                  o < a;\n                  o++\n                ) {\n                  var s = i[o].get(\"group\").get(\"children\");\n                  s &&\n                    s.forEach(function (t) {\n                      t.set(\n                        \"ori-visibility\",\n                        t.get(\"ori-visibility\") || t.get(\"visible\"),\n                      ),\n                        t.hide();\n                    });\n                }\n                for (var c = r.getNodes(), u = 0, h = c.length; u < h; u++)\n                  for (\n                    var l = 0, f = c[u].getContainer().get(\"children\");\n                    l < f.length;\n                    l++\n                  ) {\n                    var d = f[l];\n                    d.get(\"isKeyShape\") ||\n                      (d.set(\n                        \"ori-visibility\",\n                        d.get(\"ori-visibility\") || d.get(\"visible\"),\n                      ),\n                      d.hide());\n                  }\n              }\n            }\n          },\n          onDragMove: function (t) {\n            this.graph;\n            var e = t.target,\n              n = e && e.isCanvas && e.isCanvas();\n            if ((this.allowDragOnItem || n) && ((t = s(t)), this.origin)) {\n              if (!this.dragging) {\n                if (\n                  u(this.origin.x - t.clientX) + u(this.origin.y - t.clientY) <\n                  10\n                )\n                  return;\n                this.shouldBegin.call(this, t) &&\n                  ((t.type = \"dragstart\"), (this.dragging = !0));\n              }\n              this.shouldUpdate.call(this, t) && this.updateViewport(t);\n            }\n          },\n          onDragEnd: function (t) {\n            var e = this.graph;\n            if (this.enableOptimize) {\n              for (var n = e.getEdges(), r = 0, i = n.length; r < i; r++) {\n                var o = n[r].get(\"group\").get(\"children\");\n                o &&\n                  o.forEach(function (t) {\n                    t.get(\"ori-visibility\") && t.show();\n                  });\n              }\n              for (var a = e.getNodes(), c = 0, u = a.length; c < u; c++)\n                for (\n                  var h = 0, l = a[c].getContainer().get(\"children\");\n                  h < l.length;\n                  h++\n                ) {\n                  var f = l[h];\n                  if (!f.get(\"isKeyShape\")) f.get(\"ori-visibility\") && f.show();\n                }\n            }\n            this.dragging\n              ? ((t = s(t)),\n                this.shouldEnd.call(this, t) && this.updateViewport(t),\n                (t.type = \"dragend\"),\n                this.endDrag())\n              : (this.origin = null);\n          },\n          endDrag: function () {\n            (this.origin = null), (this.dragging = !1), (this.dragbegin = !1);\n          },\n        },\n        l = n(22),\n        f = {\n          getDefaultCfg: function () {\n            return {\n              updateEdge: !0,\n              delegateStyle: {},\n              enableDelegate: !1,\n              onlyChangeComboSize: !1,\n              comboActiveState: \"\",\n              selectedState: \"selected\",\n            };\n          },\n          getEvents: function () {\n            return {\n              \"node:dragstart\": \"onDragStart\",\n              \"node:drag\": \"onDrag\",\n              \"node:dragend\": \"onDragEnd\",\n              \"combo:dragenter\": \"onDragEnter\",\n              \"combo:dragleave\": \"onDragLeave\",\n              \"combo:drop\": \"onDropCombo\",\n              \"node:drop\": \"onDropNode\",\n              \"canvas:drop\": \"onDropCanvas\",\n            };\n          },\n          validationCombo: function (t) {\n            return (\n              !(!this.origin || !t || t.destroyed) && \"combo\" === t.getType()\n            );\n          },\n          onDragStart: function (t) {\n            var e = this;\n            if (this.shouldBegin.call(this, t)) {\n              var n = t.item;\n              if (n && !n.destroyed && !n.hasLocked()) {\n                var r = t.target;\n                if (r) if (r.get(\"isAnchorPoint\")) return;\n                var o = this.graph;\n                (this.targets = []), (this.targetCombo = null);\n                var a = o.findAllByState(\"node\", this.selectedState),\n                  s = n.get(\"id\");\n                0 ===\n                a.filter(function (t) {\n                  var e = t.get(\"id\");\n                  return s === e;\n                }).length\n                  ? this.targets.push(n)\n                  : a.length > 1\n                  ? a.forEach(function (t) {\n                      t.hasLocked() || e.targets.push(t);\n                    })\n                  : this.targets.push(n);\n                var c = [];\n                this.targets.forEach(function (t) {\n                  c.push(Object(i.clone)(t.getModel()));\n                }),\n                  this.set(\"beforeDragNodes\", c),\n                  (this.origin = { x: t.x, y: t.y }),\n                  (this.point = {}),\n                  (this.originPoint = {});\n              }\n            }\n          },\n          onDrag: function (t) {\n            var e = this;\n            this.origin &&\n              this.shouldUpdate(this, t) &&\n              (this.get(\"enableDelegate\")\n                ? this.updateDelegate(t)\n                : this.targets.map(function (n) {\n                    e.update(n, t);\n                  }));\n          },\n          onDragEnd: function (t) {\n            if (this.origin && this.shouldEnd.call(this, t)) {\n              var e = t.item;\n              if (e) e.getContainer().set(\"capture\", !0);\n              this.delegateRect &&\n                (this.delegateRect.remove(), (this.delegateRect = null)),\n                this.updatePositions(t);\n              var n = this.graph;\n              if (n.get(\"enabledStack\")) {\n                var r = {\n                  before: {\n                    nodes: this.get(\"beforeDragNodes\"),\n                    edges: [],\n                    combos: [],\n                  },\n                  after: { nodes: [], edges: [], combos: [] },\n                };\n                this.targets.forEach(function (t) {\n                  r.after.nodes.push(t.getModel());\n                }),\n                  n.pushStack(\"update\", Object(i.clone)(r));\n              }\n              n.emit(\"dragnodeend\", { items: this.targets, targetItem: null }),\n                (this.point = {}),\n                (this.origin = null),\n                (this.originPoint = {}),\n                (this.targets.length = 0),\n                (this.targetCombo = null);\n            }\n          },\n          onDropCombo: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              this.updatePositions(t);\n              var n = this.graph;\n              if (\n                (this.comboActiveState &&\n                  n.setItemState(e, this.comboActiveState, !1),\n                (this.targetCombo = e),\n                this.onlyChangeComboSize)\n              )\n                n.updateCombos();\n              else {\n                var r = e.getModel();\n                this.targets.map(function (t) {\n                  t.getModel().comboId !== r.id && n.updateComboTree(t, r.id);\n                }),\n                  n.updateCombo(e);\n              }\n              n.emit(\"dragnodeend\", {\n                items: this.targets,\n                targetItem: this.targetCombo,\n              });\n            }\n          },\n          onDropCanvas: function (t) {\n            var e = this.graph;\n            this.targets &&\n              0 !== this.targets.length &&\n              (this.updatePositions(t),\n              this.onlyChangeComboSize\n                ? e.updateCombos()\n                : this.targets.map(function (t) {\n                    t.getModel().comboId && e.updateComboTree(t);\n                  }));\n          },\n          onDropNode: function (t) {\n            if (this.targets && 0 !== this.targets.length) {\n              var e = t.item;\n              this.updatePositions(t);\n              var n = this.graph,\n                r = e.getModel().comboId;\n              if (r) {\n                var i = n.findById(r);\n                this.comboActiveState &&\n                  n.setItemState(i, this.comboActiveState, !1),\n                  this.targets.map(function (t) {\n                    var e = t.getModel();\n                    r !== e.comboId && n.updateComboTree(t, r);\n                  }),\n                  n.updateCombo(i);\n              } else\n                this.targets.map(function (t) {\n                  t.getModel().comboId && n.updateComboTree(t);\n                });\n              n.emit(\"dragnodeend\", { items: this.targets, targetItem: e });\n            }\n          },\n          onDragEnter: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              var n = this.graph;\n              this.comboActiveState &&\n                n.setItemState(e, this.comboActiveState, !0);\n            }\n          },\n          onDragLeave: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              var n = this.graph;\n              this.comboActiveState &&\n                n.setItemState(e, this.comboActiveState, !1);\n            }\n          },\n          updatePositions: function (t) {\n            var e = this;\n            this.targets &&\n              0 !== this.targets.length &&\n              this.get(\"enableDelegate\") &&\n              this.targets.map(function (n) {\n                return e.update(n, t);\n              });\n          },\n          update: function (t, e) {\n            var n = this.origin,\n              r = t.get(\"model\"),\n              i = t.get(\"id\");\n            this.point[i] || (this.point[i] = { x: r.x || 0, y: r.y || 0 });\n            var o = {\n              x: e.x - n.x + this.point[i].x,\n              y: e.y - n.y + this.point[i].y,\n            };\n            this.get(\"updateEdge\")\n              ? this.graph.updateItem(t, o, !1)\n              : t.updatePosition(o);\n          },\n          updateDelegate: function (t) {\n            this.graph;\n            if (this.delegateRect) {\n              var e = t.x - this.origin.x + this.originPoint.minX,\n                n = t.y - this.origin.y + this.originPoint.minY;\n              this.delegateRect.attr({ x: e, y: n });\n            } else {\n              var o = this.graph.get(\"group\"),\n                a = Object(i.deepMix)(\n                  {},\n                  l.a.delegateStyle,\n                  this.delegateStyle,\n                ),\n                s = this.calculationGroupPosition(t),\n                c = s.x,\n                u = s.y,\n                h = s.width,\n                f = s.height,\n                d = s.minX,\n                p = s.minY;\n              (this.originPoint = {\n                x: c,\n                y: u,\n                width: h,\n                height: f,\n                minX: d,\n                minY: p,\n              }),\n                (this.delegateRect = o.addShape(\"rect\", {\n                  attrs: Object(r.a)({ width: h, height: f, x: c, y: u }, a),\n                  name: \"rect-delegate-shape\",\n                }));\n            }\n          },\n          calculationGroupPosition: function (t) {\n            var e = this.graph.findAllByState(\"node\", this.selectedState);\n            0 === e.length && e.push(t.item);\n            for (\n              var n = 1 / 0, r = -1 / 0, i = 1 / 0, o = -1 / 0, a = 0;\n              a < e.length;\n              a++\n            ) {\n              var s = e[a].getBBox(),\n                c = s.minX,\n                u = s.minY,\n                h = s.maxX,\n                l = s.maxY;\n              c < n && (n = c),\n                u < i && (i = u),\n                h > r && (r = h),\n                l > o && (o = l);\n            }\n            return {\n              x: Math.floor(n),\n              y: Math.floor(i),\n              width: Math.ceil(r) - Math.floor(n),\n              height: Math.ceil(o) - Math.floor(i),\n              minX: n,\n              minY: i,\n            };\n          },\n        },\n        d = {\n          getDefaultCfg: function () {\n            return { multiple: !0, selectedState: \"selected\" };\n          },\n          getEvents: function () {\n            return {\n              \"node:tap\": \"onClick\",\n              \"combo:tap\": \"onClick\",\n              \"canvas:tap\": \"onCanvasClick\",\n            };\n          },\n          onClick: function (t) {\n            var e = this,\n              n = t.item;\n            if (n && !n.destroyed) {\n              var r = n.getType(),\n                o = e.graph,\n                a = e.multiple,\n                s = e.shouldUpdate;\n              if (e.shouldBegin.call(e, t)) {\n                if (!a) {\n                  var c = o.findAllByState(r, e.selectedState);\n                  Object(i.each)(c, function (t) {\n                    t !== n && o.setItemState(t, e.selectedState, !1);\n                  });\n                }\n                if (n.hasState(e.selectedState)) {\n                  s.call(e, t) && o.setItemState(n, e.selectedState, !1);\n                  var u = o.findAllByState(\"node\", e.selectedState),\n                    h = o.findAllByState(\"combo\", e.selectedState);\n                  o.emit(\"nodeselectchange\", {\n                    target: n,\n                    selectedItems: { nodes: u, combos: h },\n                    select: !1,\n                  });\n                } else {\n                  s.call(e, t) && o.setItemState(n, e.selectedState, !0);\n                  (u = o.findAllByState(\"node\", e.selectedState)),\n                    (h = o.findAllByState(\"combo\", e.selectedState));\n                  o.emit(\"nodeselectchange\", {\n                    target: n,\n                    selectedItems: { nodes: u, combos: h },\n                    select: !0,\n                  });\n                }\n              }\n            }\n          },\n          onCanvasClick: function () {\n            var t = this,\n              e = this.graph,\n              n = e.findAllByState(\"node\", this.selectedState);\n            Object(i.each)(n, function (n) {\n              e.setItemState(n, t.selectedState, !1);\n            });\n            var r = e.findAllByState(\"combo\", this.selectedState);\n            Object(i.each)(r, function (n) {\n              e.setItemState(n, t.selectedState, !1);\n            }),\n              e.emit(\"nodeselectchange\", {\n                selectedItems: { nodes: [], edges: [], combos: [] },\n                select: !1,\n              });\n          },\n        },\n        p = {\n          firstScale: null,\n          getDefaultCfg: function () {\n            return {\n              originScale: 1,\n              sensitivity: 2,\n              minZoom: void 0,\n              maxZoom: void 0,\n              enableOptimize: !1,\n              optimizeZoom: 0.1,\n              fixSelectedItems: {\n                fixAll: !1,\n                fixLineWidth: !1,\n                fixLabel: !1,\n                fixState: \"selected\",\n              },\n            };\n          },\n          getEvents: function () {\n            var t = this.fixSelectedItems;\n            return (\n              t.fixState || (t.fixState = \"selected\"),\n              t.fixAll && ((t.fixLineWidth = !0), (t.fixLabel = !0)),\n              { pinchstart: \"onPinch\", pinchmove: \"onPinch\" }\n            );\n          },\n          onPinch: function (t) {\n            t.preventDefault && t.preventDefault(),\n              t.originalEvent.preventDefault &&\n                t.originalEvent.preventDefault();\n            var e = t.originalEvent.pointers;\n            if (!(e.length < 2)) {\n              \"pinchstart\" === t.type &&\n                (this.firstScale = this.graph.getZoom());\n              var n =\n                  t.originalEvent.scale || t.originalEvent.srcEvent.extra.scale,\n                r = this.firstScale * n;\n              this.currentScale = r;\n              var i = this.get(\"minZoom\") || this.graph.get(\"minZoom\");\n              if (\n                !(\n                  r > (this.get(\"maxZoom\") || this.graph.get(\"maxZoom\")) ||\n                  r < i\n                )\n              ) {\n                var o = this.graph.get(\"canvas\"),\n                  a = e[0].clientX,\n                  s = e[0].clientY,\n                  c = e[1].clientX,\n                  u = e[1].clientY,\n                  h = o.getPointByClient((a + c) / 2, (s + u) / 2);\n                this.graph.zoomTo(r, { x: h.x, y: h.y });\n              }\n            }\n          },\n        },\n        g = [\"tap\", \"dbltap\"],\n        v = {\n          getDefaultCfg: function () {\n            return { trigger: \"tap\", onChange: function () {} };\n          },\n          getEvents: function () {\n            var t, e;\n            return (\n              g.includes(this.trigger)\n                ? (e = this.trigger)\n                : ((e = \"tap\"),\n                  console.warn(\n                    \"Behavior collapse-expand 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n                  )),\n              ((t = {})[\"node:\" + e] = \"onNodeTap\"),\n              (t.touchstart = \"onNodeTap\"),\n              t\n            );\n          },\n          onNodeTap: function (t) {\n            var e = t.item,\n              n = this.graph.findDataById(e.get(\"id\"));\n            if (n) {\n              var r = n.children;\n              if (r && 0 !== r.length) {\n                var i = !n.collapsed;\n                if (\n                  this.shouldBegin(t, i) &&\n                  ((n.collapsed = i),\n                  (e.getModel().collapsed = i),\n                  this.graph.emit(\"itemcollapsed\", {\n                    item: t.item,\n                    collapsed: i,\n                  }),\n                  this.shouldUpdate(t, i))\n                ) {\n                  try {\n                    this.onChange(e, i);\n                  } catch (t) {\n                    console.warn(t);\n                  }\n                  this.graph.layout();\n                }\n              }\n            }\n          },\n        },\n        y = a.a.calculationItemsBBox,\n        m = function (t, e) {\n          if (!1 !== e(t) && t) {\n            var n = t.get(\"combos\");\n            if (0 === n.length) return !1;\n            Object(i.each)(n, function (t) {\n              m(t, e);\n            });\n          }\n        },\n        b = [\"click\", \"dblclick\"],\n        x = [\"tap\", \"drag\"],\n        S = [\"shift\", \"ctrl\", \"control\", \"alt\", \"meta\", void 0],\n        w = {\n          bind: function (t) {\n            \"drag-canvas\" === this.type && t.get(\"canvas\").set(\"draggable\", !0);\n            var e = this.events;\n            (this.graph = t),\n              Object(i.each)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            \"drag-canvas\" === this.type && t.get(\"canvas\").set(\"draggable\", !1),\n              (this.graph = null),\n              Object(i.each)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n        },\n        O = {\n          \"drag-canvas\": h,\n          \"zoom-canvas\": p,\n          \"drag-node\": f,\n          \"activate-relations\": {\n            getDefaultCfg: function () {\n              return {\n                activeState: \"active\",\n                inactiveState: \"inactive\",\n                resetSelected: !1,\n                shouldUpdate: function () {\n                  return !0;\n                },\n              };\n            },\n            getEvents: function () {\n              return {\n                \"node:tap\": \"setAllItemStates\",\n                \"canvas:tap\": \"clearAllItemStates\",\n              };\n            },\n            setAllItemStates: function (t) {\n              var e = t.item,\n                n = this.graph;\n              if (\n                ((this.item = e),\n                this.shouldUpdate(t.item, { event: t, action: \"activate\" }))\n              ) {\n                for (\n                  var r = this.activeState,\n                    i = this.inactiveState,\n                    o = n.getNodes(),\n                    a = n.getEdges(),\n                    s = o.length,\n                    c = a.length,\n                    u = 0;\n                  u < s;\n                  u++\n                ) {\n                  var h = o[u],\n                    l = h.hasState(\"selected\");\n                  this.resetSelected && l && n.setItemState(h, \"selected\", !1),\n                    n.setItemState(h, r, !1),\n                    i && n.setItemState(h, i, !0);\n                }\n                for (u = 0; u < c; u++) {\n                  var f = a[u];\n                  n.setItemState(f, r, !1), i && n.setItemState(f, i, !0);\n                }\n                i && n.setItemState(e, i, !1), n.setItemState(e, r, !0);\n                var d = e.getEdges(),\n                  p = d.length;\n                for (u = 0; u < p; u++) {\n                  var g = void 0;\n                  (g =\n                    (f = d[u]).getSource() === e\n                      ? f.getTarget()\n                      : f.getSource()),\n                    i && n.setItemState(g, i, !1),\n                    n.setItemState(g, r, !0),\n                    n.setItemState(f, i, !1),\n                    n.setItemState(f, r, !0),\n                    f.toFront();\n                }\n                n.emit(\"afteractivaterelations\", {\n                  item: t.item,\n                  action: \"activate\",\n                });\n              }\n            },\n            clearActiveState: function (t) {\n              var e = this.get(\"graph\");\n              if (\n                this.shouldUpdate(t.item, { event: t, action: \"deactivate\" })\n              ) {\n                var n = this.activeState,\n                  r = this.inactiveState,\n                  i = e.get(\"autoPaint\");\n                e.setAutoPaint(!1);\n                for (\n                  var o = e.getNodes(),\n                    a = e.getEdges(),\n                    s = o.length,\n                    c = a.length,\n                    u = 0;\n                  u < s;\n                  u++\n                ) {\n                  var h = o[u];\n                  e.clearItemStates(h, [n, r]);\n                }\n                for (u = 0; u < c; u++) {\n                  var l = a[u];\n                  e.clearItemStates(l, [n, r, \"deactivate\"]);\n                }\n                e.paint(),\n                  e.setAutoPaint(i),\n                  e.emit(\"afteractivaterelations\", {\n                    item: t.item || this.get(\"item\"),\n                    action: \"deactivate\",\n                  });\n              }\n            },\n            clearAllItemStates: function (t) {\n              var e = this.graph;\n              if (\n                this.shouldUpdate(t.item, { event: t, action: \"deactivate\" })\n              ) {\n                for (\n                  var n = this.activeState,\n                    r = this.inactiveState,\n                    i = e.getNodes(),\n                    o = e.getEdges(),\n                    a = i.length,\n                    s = o.length,\n                    c = 0;\n                  c < a;\n                  c++\n                ) {\n                  var u = i[c];\n                  e.clearItemStates(u, [n, r]);\n                }\n                for (c = 0; c < s; c++) {\n                  var h = o[c];\n                  e.clearItemStates(h, [n, r, \"deactivate\"]);\n                }\n                e.emit(\"afteractivaterelations\", {\n                  item: t.item || this.get(\"item\"),\n                  action: \"deactivate\",\n                });\n              }\n            },\n          },\n          \"click-select\": d,\n          \"collapse-expand\": v,\n          \"drag-combo\": {\n            getDefaultCfg: function () {\n              return {\n                enableDelegate: !1,\n                delegateStyle: {},\n                onlyChangeComboSize: !1,\n                activeState: \"\",\n                selectedState: \"selected\",\n              };\n            },\n            getEvents: function () {\n              return {\n                \"combo:dragstart\": \"onDragStart\",\n                \"combo:drag\": \"onDrag\",\n                \"combo:dragend\": \"onDragEnd\",\n                \"combo:drop\": \"onDrop\",\n                \"node:drop\": \"onNodeDrop\",\n                \"combo:dragenter\": \"onDragEnter\",\n                \"combo:dragleave\": \"onDragLeave\",\n              };\n            },\n            validationCombo: function (t) {\n              var e = t.item;\n              return (\n                !(!e || e.destroyed) &&\n                !!this.shouldUpdate(this, t) &&\n                \"combo\" === e.getType()\n              );\n            },\n            onDragStart: function (t) {\n              var e = this,\n                n = this.graph,\n                r = t.item;\n              if (this.validationCombo(t)) {\n                this.targets = [];\n                var i = n.findAllByState(\"combo\", this.selectedState),\n                  o = r.get(\"id\");\n                0 ===\n                i.filter(function (t) {\n                  var e = t.get(\"id\");\n                  return o === e;\n                }).length\n                  ? this.targets.push(r)\n                  : (this.targets = i),\n                  this.activeState &&\n                    this.targets.map(function (t) {\n                      var r = t.getModel();\n                      if (r.parentId) {\n                        var i = n.findById(r.parentId);\n                        i && n.setItemState(i, e.activeState, !0);\n                      }\n                    }),\n                  (this.point = {}),\n                  (this.originPoint = {}),\n                  (this.origin = { x: t.x, y: t.y }),\n                  (this.currentItemChildCombos = []),\n                  m(r, function (t) {\n                    if (t.destroyed) return !1;\n                    var n = t.getModel();\n                    return e.currentItemChildCombos.push(n.id), !0;\n                  });\n              }\n            },\n            onDrag: function (t) {\n              var e = this;\n              if (this.origin && this.validationCombo(t))\n                if (this.enableDelegate) this.updateDelegate(t);\n                else {\n                  if (this.activeState) {\n                    var n = this.graph,\n                      r = t.item,\n                      o = r.getModel(),\n                      a = n.getCombos(),\n                      s = r.getBBox(),\n                      c = s.centerX,\n                      u = s.centerY,\n                      h = s.width;\n                    a.filter(function (t) {\n                      var n = t.getModel();\n                      return (\n                        o.parentId,\n                        n.id !== o.id &&\n                          !e.currentItemChildCombos.includes(n.id)\n                      );\n                    }).map(function (t) {\n                      var r = t.getBBox(),\n                        i = r.centerX,\n                        o = r.centerY,\n                        a = r.width,\n                        s = c - i,\n                        l = u - o,\n                        f = 2 * Math.sqrt(s * s + l * l);\n                      h + a - f > 0.8 * h\n                        ? n.setItemState(t, e.activeState, !0)\n                        : n.setItemState(t, e.activeState, !1);\n                    });\n                  }\n                  Object(i.each)(this.targets, function (n) {\n                    e.updateCombo(n, t);\n                  });\n                }\n            },\n            updatePositions: function (t) {\n              var e = this;\n              this.enableDelegate &&\n                Object(i.each)(this.targets, function (n) {\n                  e.updateCombo(n, t);\n                });\n            },\n            onDrop: function (t) {\n              var e = this,\n                n = t.item;\n              if (n && this.targets && !n.destroyed) {\n                this.updatePositions(t);\n                var r = this.graph,\n                  i = n.getModel();\n                this.targets.map(function (t) {\n                  t.getModel().parentId !== i.id\n                    ? (e.activeState && r.setItemState(n, e.activeState, !1),\n                      e.onlyChangeComboSize\n                        ? r.updateCombo(t)\n                        : r.updateComboTree(t, i.id))\n                    : r.updateCombo(n);\n                }),\n                  this.end(n, t),\n                  (this.endComparison = !0);\n              }\n            },\n            onNodeDrop: function (t) {\n              var e = this;\n              if (this.targets && 0 !== this.targets.length) {\n                this.updatePositions(t);\n                var n,\n                  r = this.graph,\n                  i = t.item.getModel().comboId;\n                if (i) {\n                  if (this.activeState) {\n                    var o = r.findById(i);\n                    r.setItemState(o, this.activeState, !1);\n                  }\n                  this.targets.map(function (t) {\n                    e.onlyChangeComboSize\n                      ? r.updateCombo(t)\n                      : i !== t.getID() &&\n                        ((n = r.findById(i)),\n                        i !== t.getModel().parentId && r.updateComboTree(t, i));\n                  });\n                } else\n                  this.targets.map(function (t) {\n                    e.onlyChangeComboSize\n                      ? r.updateCombo(t)\n                      : t.getModel().comboId && r.updateComboTree(t);\n                  });\n                (this.endComparison = !0), this.end(n, t);\n              }\n            },\n            onDragEnter: function (t) {\n              if (this.origin && this.validationCombo(t)) {\n                var e = t.item,\n                  n = this.graph;\n                this.activeState && n.setItemState(e, this.activeState, !0);\n              }\n            },\n            onDragLeave: function (t) {\n              if (this.origin && this.validationCombo(t)) {\n                var e = t.item,\n                  n = this.graph;\n                this.activeState && n.setItemState(e, this.activeState, !1);\n              }\n            },\n            onDragEnd: function (t) {\n              if (this.targets && 0 !== this.targets.length) {\n                var e = t.item;\n                this.updatePositions(t);\n                var n = this.getParentCombo(e.getModel().parentId),\n                  r = this.graph;\n                n &&\n                  this.activeState &&\n                  r.setItemState(n, this.activeState, !1),\n                  this.end(void 0, t);\n              }\n            },\n            end: function (t, e) {\n              var n = this;\n              if (this.origin) {\n                var r = this.graph;\n                if (this.delegateShape)\n                  r.get(\"delegateGroup\").clear(), (this.delegateShape = null);\n                t &&\n                  this.activeState &&\n                  r.setItemState(t, this.activeState, !1),\n                  t ||\n                    this.targets.map(function (t) {\n                      n.onlyChangeComboSize\n                        ? r.updateCombo(t)\n                        : r.updateComboTree(t);\n                    }),\n                  (this.point = []),\n                  (this.origin = null),\n                  (this.originPoint = null),\n                  (this.targets.length = 0);\n              }\n            },\n            traverse: function (t, e) {\n              var n = this;\n              if (!1 !== e(t) && t) {\n                var r = t.get(\"combos\");\n                Object(i.each)(r, function (t) {\n                  n.traverse(t, e);\n                });\n                var o = t.get(\"nodes\");\n                Object(i.each)(o, function (t) {\n                  n.traverse(t, e);\n                });\n              }\n            },\n            updateCombo: function (t, e) {\n              var n = this;\n              this.traverse(t, function (t) {\n                return !t.destroyed && (n.updateSignleItem(t, e), !0);\n              });\n            },\n            updateSignleItem: function (t, e) {\n              var n = this.origin,\n                r = this.graph,\n                i = t.getModel(),\n                o = t.get(\"id\");\n              this.point[o] || (this.point[o] = { x: i.x, y: i.y });\n              var a = e.x - n.x + this.point[o].x,\n                s = e.y - n.y + this.point[o].y;\n              r.updateItem(t, { x: a, y: s });\n            },\n            getParentCombo: function (t) {\n              var e = this.graph;\n              if (t) {\n                var n = e.findById(t);\n                if (n) return n;\n              }\n            },\n            updateDelegate: function (t) {\n              var e = this.graph;\n              if (this.delegateShape) {\n                var n = t.x - this.origin.x + this.originPoint.minX,\n                  i = t.y - this.origin.y + this.originPoint.minY;\n                this.delegateShape.attr({ x: n, y: i });\n              } else {\n                var o = e.get(\"delegateGroup\"),\n                  a = null,\n                  s = (a =\n                    this.targets.length > 1\n                      ? y(this.targets)\n                      : this.targets[0].getBBox()).x,\n                  c = a.y,\n                  u = a.width,\n                  h = a.height,\n                  f = a.minX,\n                  d = a.minY;\n                this.originPoint = {\n                  x: s,\n                  y: c,\n                  width: u,\n                  height: h,\n                  minX: f,\n                  minY: d,\n                };\n                var p = Object(r.a)(\n                  Object(r.a)({}, l.a.delegateStyle),\n                  this.delegateStyle,\n                );\n                this.delegateShape = o.addShape(\"rect\", {\n                  attrs: Object(r.a)(\n                    { width: a.width, height: a.height, x: a.x, y: a.y },\n                    p,\n                  ),\n                  name: \"combo-delegate-shape\",\n                });\n              }\n            },\n          },\n          \"collapse-expand-combo\": {\n            getDefaultCfg: function () {\n              return { trigger: \"dblclick\", relayout: !0 };\n            },\n            getEvents: function () {\n              var t, e;\n              return (\n                b.includes(this.trigger)\n                  ? (e = this.trigger)\n                  : ((e = \"dblclick\"),\n                    console.warn(\n                      \"Behavior collapse-expand-group 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n                    )),\n                ((t = {})[\"combo:\" + e] = \"onComboClick\"),\n                t\n              );\n            },\n            onComboClick: function (t) {\n              var e = t.item,\n                n = this.graph,\n                r = this.relayout;\n              if (e && !e.destroyed && \"combo\" === e.getType()) {\n                var i = e.getModel().id;\n                i &&\n                  (n.collapseExpandCombo(i),\n                  r && n.get(\"layout\") ? n.layout() : n.refreshPositions());\n              }\n            },\n          },\n          \"create-edge\": {\n            getDefaultCfg: function () {\n              return { trigger: \"tap\", key: void 0, edgeConfig: {} };\n            },\n            getEvents: function () {\n              var t;\n              return (\n                x.indexOf(this.trigger.toLowerCase()) > -1 ||\n                  ((this.trigger = \"tap\"),\n                  console.warn(\n                    \"Behavior create-edge 的 trigger 参数不合法，请输入 'click'，'drag'\",\n                  )),\n                this.key &&\n                  -1 === S.indexOf(this.key.toLowerCase()) &&\n                  ((this.trigger = void 0),\n                  console.warn(\n                    \"Behavior create-edge 的 key 参数不合法，请输入 'shift'，'ctrl'，'alt'，'control'，或 undefined\",\n                  )),\n                \"drag\" === this.trigger\n                  ? (t = {\n                      \"node:dragstart\": \"onClick\",\n                      \"combo:dragstart\": \"onClick\",\n                      drag: \"updateEndPoint\",\n                      \"node:drop\": \"onClick\",\n                      \"combo:drop\": \"onClick\",\n                      dragend: \"onDragEnd\",\n                    })\n                  : \"click\" === this.trigger &&\n                    (t = {\n                      \"node:tap\": \"onClick\",\n                      mousemove: \"updateEndPoint\",\n                      \"edge:tap\": \"cancelCreating\",\n                      \"canvas:tap\": \"cancelCreating\",\n                      \"combo:tap\": \"onClick\",\n                    }),\n                this.key && ((t.keydown = \"onKeyDown\"), (t.keyup = \"onKeyUp\")),\n                t\n              );\n            },\n            onDragEnd: function (t) {\n              if (!this.key || this.keydown) {\n                var e = t.item;\n                (e && e.getID() !== this.source && \"node\" === e.getType()) ||\n                  this.cancelCreating({ item: this.edge, x: t.x, y: t.y });\n              }\n            },\n            onClick: function (t) {\n              if (!this.key || this.keydown) {\n                var e = t.item,\n                  n = this.graph,\n                  i = e.getModel();\n                if (this.addingEdge && this.edge) {\n                  if (!this.shouldEnd.call(this, t)) return;\n                  var o = { target: i.id };\n                  this.source === i.id && (o.type = \"loop\"),\n                    n.emit(\"beforecreateedge\", {}),\n                    n.updateItem(this.edge, o),\n                    n.emit(\"aftercreateedge\", { edge: this.edge }),\n                    this.edge.getKeyShape().set(\"capture\", !0),\n                    (this.edge = null),\n                    (this.addingEdge = !1);\n                } else {\n                  if (!this.shouldBegin.call(this, t)) return;\n                  (this.edge = n.addItem(\n                    \"edge\",\n                    Object(r.a)(\n                      { source: i.id, target: i.id },\n                      this.edgeConfig,\n                    ),\n                    !1,\n                  )),\n                    (this.source = i.id),\n                    (this.addingEdge = !0),\n                    this.edge.getKeyShape().set(\"capture\", !1);\n                }\n              }\n            },\n            updateEndPoint: function (t) {\n              if (!this.key || this.keydown) {\n                var e = { x: t.x, y: t.y };\n                this.graph.findById(this.source)\n                  ? this.addingEdge &&\n                    this.edge &&\n                    this.graph.updateItem(this.edge, { target: e }, !1)\n                  : (this.addingEdge = !1);\n              }\n            },\n            cancelCreating: function (t) {\n              if (!this.key || this.keydown) {\n                var e = this.graph,\n                  n = t.item;\n                if (\n                  this.addingEdge &&\n                  t.target &&\n                  t.target.isCanvas &&\n                  t.target.isCanvas()\n                )\n                  return (\n                    e.removeItem(this.edge, !1),\n                    (this.edge = null),\n                    void (this.addingEdge = !1)\n                  );\n                if (this.addingEdge && this.edge === n) {\n                  var r = !0;\n                  if (!e.get(\"groupByTypes\"))\n                    for (\n                      var i = t.x,\n                        o = t.y,\n                        a = e.getNodes(),\n                        s = a.length,\n                        c = 0;\n                      c < s;\n                      c++\n                    ) {\n                      var u = a[c],\n                        h = u.getModel(),\n                        l = u.getBBox();\n                      if (\n                        i <= l.maxX &&\n                        i >= l.minX &&\n                        o <= l.maxY &&\n                        o >= l.minY\n                      ) {\n                        if (\n                          !this.shouldEnd.call(this, {\n                            x: t.x,\n                            y: t.y,\n                            canvasX: t.canvasX,\n                            canvasY: t.canvasY,\n                            clientX: t.clientX,\n                            clientY: t.clientY,\n                            item: u,\n                          })\n                        )\n                          return;\n                        e.emit(\"beforecreateedge\", {}),\n                          e.updateItem(this.edge, { target: h.id }),\n                          e.emit(\"aftercreateedge\", { edge: this.edge }),\n                          (r = !1);\n                        break;\n                      }\n                    }\n                  r && e.removeItem(this.edge, !1),\n                    (this.edge = null),\n                    (this.addingEdge = !1);\n                }\n              }\n            },\n            onKeyDown: function (t) {\n              var e = t.key;\n              e &&\n                (e.toLowerCase() === this.key.toLowerCase()\n                  ? (this.keydown = !0)\n                  : (this.keydown = !1));\n            },\n            onKeyUp: function () {\n              this.addingEdge &&\n                this.edge &&\n                (this.graph.removeItem(this.edge, !1),\n                (this.addingEdge = !1),\n                (this.edge = null)),\n                (this.keydown = !1);\n            },\n          },\n        };\n      Object(i.each)(O, function (t, e) {\n        Object(o.i)(e, Object(r.a)(Object(r.a)({}, t), w));\n      });\n    },\n    46: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return o;\n      }),\n        n.d(e, \"c\", function () {\n          return a;\n        }),\n        n.d(e, \"a\", function () {\n          return s;\n        });\n      var r = n(6),\n        i = n(88);\n      function o(t, e, n) {\n        var i = 1;\n        return (\n          Object(r.h)(t) && (i = t.split(\"\\n\").length),\n          i > 1\n            ? e * i +\n              (function (t, e) {\n                return e ? e - t : 0.14 * t;\n              })(e, n) *\n                (i - 1)\n            : e\n        );\n      }\n      function a(t, e) {\n        var n = Object(i.a)(),\n          o = 0;\n        if (Object(r.e)(t) || \"\" === t) return o;\n        if ((n.save(), (n.font = e), Object(r.h)(t) && t.includes(\"\\n\"))) {\n          var a = t.split(\"\\n\");\n          Object(r.a)(a, function (t) {\n            var e = n.measureText(t).width;\n            o < e && (o = e);\n          });\n        } else o = n.measureText(t).width;\n        return n.restore(), o;\n      }\n      function s(t) {\n        var e = t.fontSize,\n          n = t.fontFamily,\n          r = t.fontWeight;\n        return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n      }\n    },\n    5: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return r;\n      }),\n        n.d(e, \"b\", function () {\n          return _;\n        }),\n        n.d(e, \"c\", function () {\n          return R;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"create\", function () {\n          return o;\n        }),\n        n.d(r, \"fromMat4\", function () {\n          return a;\n        }),\n        n.d(r, \"clone\", function () {\n          return s;\n        }),\n        n.d(r, \"copy\", function () {\n          return c;\n        }),\n        n.d(r, \"fromValues\", function () {\n          return u;\n        }),\n        n.d(r, \"set\", function () {\n          return h;\n        }),\n        n.d(r, \"identity\", function () {\n          return l;\n        }),\n        n.d(r, \"transpose\", function () {\n          return f;\n        }),\n        n.d(r, \"invert\", function () {\n          return d;\n        }),\n        n.d(r, \"adjoint\", function () {\n          return p;\n        }),\n        n.d(r, \"determinant\", function () {\n          return g;\n        }),\n        n.d(r, \"multiply\", function () {\n          return v;\n        }),\n        n.d(r, \"translate\", function () {\n          return y;\n        }),\n        n.d(r, \"rotate\", function () {\n          return m;\n        }),\n        n.d(r, \"scale\", function () {\n          return b;\n        }),\n        n.d(r, \"fromTranslation\", function () {\n          return x;\n        }),\n        n.d(r, \"fromRotation\", function () {\n          return S;\n        }),\n        n.d(r, \"fromScaling\", function () {\n          return w;\n        }),\n        n.d(r, \"fromMat2d\", function () {\n          return O;\n        }),\n        n.d(r, \"fromQuat\", function () {\n          return M;\n        }),\n        n.d(r, \"normalFromMat4\", function () {\n          return k;\n        }),\n        n.d(r, \"projection\", function () {\n          return j;\n        }),\n        n.d(r, \"str\", function () {\n          return C;\n        }),\n        n.d(r, \"frob\", function () {\n          return E;\n        }),\n        n.d(r, \"add\", function () {\n          return P;\n        }),\n        n.d(r, \"subtract\", function () {\n          return A;\n        }),\n        n.d(r, \"multiplyScalar\", function () {\n          return I;\n        }),\n        n.d(r, \"multiplyScalarAndAdd\", function () {\n          return T;\n        }),\n        n.d(r, \"exactEquals\", function () {\n          return N;\n        }),\n        n.d(r, \"equals\", function () {\n          return B;\n        }),\n        n.d(r, \"mul\", function () {\n          return L;\n        }),\n        n.d(r, \"sub\", function () {\n          return D;\n        });\n      var i = n(7);\n      function o() {\n        var t = new i.a(9);\n        return (\n          i.a != Float32Array &&\n            ((t[1] = 0),\n            (t[2] = 0),\n            (t[3] = 0),\n            (t[5] = 0),\n            (t[6] = 0),\n            (t[7] = 0)),\n          (t[0] = 1),\n          (t[4] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function a(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[4]),\n          (t[4] = e[5]),\n          (t[5] = e[6]),\n          (t[6] = e[8]),\n          (t[7] = e[9]),\n          (t[8] = e[10]),\n          t\n        );\n      }\n      function s(t) {\n        var e = new i.a(9);\n        return (\n          (e[0] = t[0]),\n          (e[1] = t[1]),\n          (e[2] = t[2]),\n          (e[3] = t[3]),\n          (e[4] = t[4]),\n          (e[5] = t[5]),\n          (e[6] = t[6]),\n          (e[7] = t[7]),\n          (e[8] = t[8]),\n          e\n        );\n      }\n      function c(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[3]),\n          (t[4] = e[4]),\n          (t[5] = e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function u(t, e, n, r, o, a, s, c, u) {\n        var h = new i.a(9);\n        return (\n          (h[0] = t),\n          (h[1] = e),\n          (h[2] = n),\n          (h[3] = r),\n          (h[4] = o),\n          (h[5] = a),\n          (h[6] = s),\n          (h[7] = c),\n          (h[8] = u),\n          h\n        );\n      }\n      function h(t, e, n, r, i, o, a, s, c, u) {\n        return (\n          (t[0] = e),\n          (t[1] = n),\n          (t[2] = r),\n          (t[3] = i),\n          (t[4] = o),\n          (t[5] = a),\n          (t[6] = s),\n          (t[7] = c),\n          (t[8] = u),\n          t\n        );\n      }\n      function l(t) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function f(t, e) {\n        if (t === e) {\n          var n = e[1],\n            r = e[2],\n            i = e[5];\n          (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = n),\n            (t[5] = e[7]),\n            (t[6] = r),\n            (t[7] = i);\n        } else\n          (t[0] = e[0]),\n            (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = e[1]),\n            (t[4] = e[4]),\n            (t[5] = e[7]),\n            (t[6] = e[2]),\n            (t[7] = e[5]),\n            (t[8] = e[8]);\n        return t;\n      }\n      function d(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8],\n          l = h * a - s * u,\n          f = -h * o + s * c,\n          d = u * o - a * c,\n          p = n * l + r * f + i * d;\n        return p\n          ? ((p = 1 / p),\n            (t[0] = l * p),\n            (t[1] = (-h * r + i * u) * p),\n            (t[2] = (s * r - i * a) * p),\n            (t[3] = f * p),\n            (t[4] = (h * n - i * c) * p),\n            (t[5] = (-s * n + i * o) * p),\n            (t[6] = d * p),\n            (t[7] = (-u * n + r * c) * p),\n            (t[8] = (a * n - r * o) * p),\n            t)\n          : null;\n      }\n      function p(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8];\n        return (\n          (t[0] = a * h - s * u),\n          (t[1] = i * u - r * h),\n          (t[2] = r * s - i * a),\n          (t[3] = s * c - o * h),\n          (t[4] = n * h - i * c),\n          (t[5] = i * o - n * s),\n          (t[6] = o * u - a * c),\n          (t[7] = r * c - n * u),\n          (t[8] = n * a - r * o),\n          t\n        );\n      }\n      function g(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2],\n          i = t[3],\n          o = t[4],\n          a = t[5],\n          s = t[6],\n          c = t[7],\n          u = t[8];\n        return e * (u * o - a * c) + n * (-u * i + a * s) + r * (c * i - o * s);\n      }\n      function v(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = n[0],\n          d = n[1],\n          p = n[2],\n          g = n[3],\n          v = n[4],\n          y = n[5],\n          m = n[6],\n          b = n[7],\n          x = n[8];\n        return (\n          (t[0] = f * r + d * a + p * u),\n          (t[1] = f * i + d * s + p * h),\n          (t[2] = f * o + d * c + p * l),\n          (t[3] = g * r + v * a + y * u),\n          (t[4] = g * i + v * s + y * h),\n          (t[5] = g * o + v * c + y * l),\n          (t[6] = m * r + b * a + x * u),\n          (t[7] = m * i + b * s + x * h),\n          (t[8] = m * o + b * c + x * l),\n          t\n        );\n      }\n      function y(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = n[0],\n          d = n[1];\n        return (\n          (t[0] = r),\n          (t[1] = i),\n          (t[2] = o),\n          (t[3] = a),\n          (t[4] = s),\n          (t[5] = c),\n          (t[6] = f * r + d * a + u),\n          (t[7] = f * i + d * s + h),\n          (t[8] = f * o + d * c + l),\n          t\n        );\n      }\n      function m(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = Math.sin(n),\n          d = Math.cos(n);\n        return (\n          (t[0] = d * r + f * a),\n          (t[1] = d * i + f * s),\n          (t[2] = d * o + f * c),\n          (t[3] = d * a - f * r),\n          (t[4] = d * s - f * i),\n          (t[5] = d * c - f * o),\n          (t[6] = u),\n          (t[7] = h),\n          (t[8] = l),\n          t\n        );\n      }\n      function b(t, e, n) {\n        var r = n[0],\n          i = n[1];\n        return (\n          (t[0] = r * e[0]),\n          (t[1] = r * e[1]),\n          (t[2] = r * e[2]),\n          (t[3] = i * e[3]),\n          (t[4] = i * e[4]),\n          (t[5] = i * e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function x(t, e) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = e[0]),\n          (t[7] = e[1]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function S(t, e) {\n        var n = Math.sin(e),\n          r = Math.cos(e);\n        return (\n          (t[0] = r),\n          (t[1] = n),\n          (t[2] = 0),\n          (t[3] = -n),\n          (t[4] = r),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function w(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = e[1]),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function O(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = 0),\n          (t[3] = e[2]),\n          (t[4] = e[3]),\n          (t[5] = 0),\n          (t[6] = e[4]),\n          (t[7] = e[5]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function M(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = n + n,\n          s = r + r,\n          c = i + i,\n          u = n * a,\n          h = r * a,\n          l = r * s,\n          f = i * a,\n          d = i * s,\n          p = i * c,\n          g = o * a,\n          v = o * s,\n          y = o * c;\n        return (\n          (t[0] = 1 - l - p),\n          (t[3] = h - y),\n          (t[6] = f + v),\n          (t[1] = h + y),\n          (t[4] = 1 - u - p),\n          (t[7] = d - g),\n          (t[2] = f - v),\n          (t[5] = d + g),\n          (t[8] = 1 - u - l),\n          t\n        );\n      }\n      function k(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8],\n          l = e[9],\n          f = e[10],\n          d = e[11],\n          p = e[12],\n          g = e[13],\n          v = e[14],\n          y = e[15],\n          m = n * s - r * a,\n          b = n * c - i * a,\n          x = n * u - o * a,\n          S = r * c - i * s,\n          w = r * u - o * s,\n          O = i * u - o * c,\n          M = h * g - l * p,\n          k = h * v - f * p,\n          j = h * y - d * p,\n          C = l * v - f * g,\n          E = l * y - d * g,\n          P = f * y - d * v,\n          A = m * P - b * E + x * C + S * j - w * k + O * M;\n        return A\n          ? ((A = 1 / A),\n            (t[0] = (s * P - c * E + u * C) * A),\n            (t[1] = (c * j - a * P - u * k) * A),\n            (t[2] = (a * E - s * j + u * M) * A),\n            (t[3] = (i * E - r * P - o * C) * A),\n            (t[4] = (n * P - i * j + o * k) * A),\n            (t[5] = (r * j - n * E - o * M) * A),\n            (t[6] = (g * O - v * w + y * S) * A),\n            (t[7] = (v * x - p * O - y * b) * A),\n            (t[8] = (p * w - g * x + y * m) * A),\n            t)\n          : null;\n      }\n      function j(t, e, n) {\n        return (\n          (t[0] = 2 / e),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = -2 / n),\n          (t[5] = 0),\n          (t[6] = -1),\n          (t[7] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function C(t) {\n        return (\n          \"mat3(\" +\n          t[0] +\n          \", \" +\n          t[1] +\n          \", \" +\n          t[2] +\n          \", \" +\n          t[3] +\n          \", \" +\n          t[4] +\n          \", \" +\n          t[5] +\n          \", \" +\n          t[6] +\n          \", \" +\n          t[7] +\n          \", \" +\n          t[8] +\n          \")\"\n        );\n      }\n      function E(t) {\n        return Math.hypot(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);\n      }\n      function P(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]),\n          (t[1] = e[1] + n[1]),\n          (t[2] = e[2] + n[2]),\n          (t[3] = e[3] + n[3]),\n          (t[4] = e[4] + n[4]),\n          (t[5] = e[5] + n[5]),\n          (t[6] = e[6] + n[6]),\n          (t[7] = e[7] + n[7]),\n          (t[8] = e[8] + n[8]),\n          t\n        );\n      }\n      function A(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]),\n          (t[1] = e[1] - n[1]),\n          (t[2] = e[2] - n[2]),\n          (t[3] = e[3] - n[3]),\n          (t[4] = e[4] - n[4]),\n          (t[5] = e[5] - n[5]),\n          (t[6] = e[6] - n[6]),\n          (t[7] = e[7] - n[7]),\n          (t[8] = e[8] - n[8]),\n          t\n        );\n      }\n      function I(t, e, n) {\n        return (\n          (t[0] = e[0] * n),\n          (t[1] = e[1] * n),\n          (t[2] = e[2] * n),\n          (t[3] = e[3] * n),\n          (t[4] = e[4] * n),\n          (t[5] = e[5] * n),\n          (t[6] = e[6] * n),\n          (t[7] = e[7] * n),\n          (t[8] = e[8] * n),\n          t\n        );\n      }\n      function T(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          (t[3] = e[3] + n[3] * r),\n          (t[4] = e[4] + n[4] * r),\n          (t[5] = e[5] + n[5] * r),\n          (t[6] = e[6] + n[6] * r),\n          (t[7] = e[7] + n[7] * r),\n          (t[8] = e[8] + n[8] * r),\n          t\n        );\n      }\n      function N(t, e) {\n        return (\n          t[0] === e[0] &&\n          t[1] === e[1] &&\n          t[2] === e[2] &&\n          t[3] === e[3] &&\n          t[4] === e[4] &&\n          t[5] === e[5] &&\n          t[6] === e[6] &&\n          t[7] === e[7] &&\n          t[8] === e[8]\n        );\n      }\n      function B(t, e) {\n        var n = t[0],\n          r = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          c = t[5],\n          u = t[6],\n          h = t[7],\n          l = t[8],\n          f = e[0],\n          d = e[1],\n          p = e[2],\n          g = e[3],\n          v = e[4],\n          y = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          Math.abs(n - f) <= i.b * Math.max(1, Math.abs(n), Math.abs(f)) &&\n          Math.abs(r - d) <= i.b * Math.max(1, Math.abs(r), Math.abs(d)) &&\n          Math.abs(o - p) <= i.b * Math.max(1, Math.abs(o), Math.abs(p)) &&\n          Math.abs(a - g) <= i.b * Math.max(1, Math.abs(a), Math.abs(g)) &&\n          Math.abs(s - v) <= i.b * Math.max(1, Math.abs(s), Math.abs(v)) &&\n          Math.abs(c - y) <= i.b * Math.max(1, Math.abs(c), Math.abs(y)) &&\n          Math.abs(u - m) <= i.b * Math.max(1, Math.abs(u), Math.abs(m)) &&\n          Math.abs(h - b) <= i.b * Math.max(1, Math.abs(h), Math.abs(b)) &&\n          Math.abs(l - x) <= i.b * Math.max(1, Math.abs(l), Math.abs(x))\n        );\n      }\n      var L = v,\n        D = A,\n        _ = n(53),\n        R = n(85);\n    },\n    52: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(8),\n        o = n(31),\n        a = n(12),\n        s = n(0),\n        c = n(3),\n        u = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.onCanvasChange = function (t) {\n              Object(a.h)(this, t);\n            }),\n            (e.prototype.getShapeBase = function () {\n              return o;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return e;\n            }),\n            (e.prototype._applyClip = function (t, e) {\n              e &&\n                (t.save(),\n                Object(a.a)(t, e),\n                e.createPath(t),\n                t.restore(),\n                t.clip(),\n                e._afterDraw());\n            }),\n            (e.prototype.cacheCanvasBBox = function () {\n              var t = this.cfg.children,\n                e = [],\n                n = [];\n              Object(s.each)(t, function (t) {\n                var r = t.cfg.cacheCanvasBBox;\n                r &&\n                  t.cfg.isInView &&\n                  (e.push(r.minX, r.maxX), n.push(r.minY, r.maxY));\n              });\n              var r = null;\n              if (e.length) {\n                var i = Math.min.apply(null, e),\n                  o = Math.max.apply(null, e),\n                  a = Math.min.apply(null, n),\n                  u = Math.max.apply(null, n);\n                r = {\n                  minX: i,\n                  minY: a,\n                  x: i,\n                  y: a,\n                  maxX: o,\n                  maxY: u,\n                  width: o - i,\n                  height: u - a,\n                };\n                var h = this.cfg.canvas;\n                if (h) {\n                  var l = h.getViewRange();\n                  this.set(\"isInView\", Object(c.e)(r, l));\n                }\n              } else this.set(\"isInView\", !1);\n              this.set(\"cacheCanvasBBox\", r);\n            }),\n            (e.prototype.draw = function (t, e) {\n              var n = this.cfg.children,\n                r = !e || this.cfg.refresh;\n              n.length &&\n                r &&\n                (t.save(),\n                Object(a.a)(t, this),\n                this._applyClip(t, this.getClip()),\n                Object(a.d)(t, n, e),\n                t.restore(),\n                this.cacheCanvasBBox()),\n                (this.cfg.refresh = null),\n                this.set(\"hasChanged\", !1);\n            }),\n            (e.prototype.skipDraw = function () {\n              this.set(\"cacheCanvasBBox\", null), this.set(\"hasChanged\", !1);\n            }),\n            e\n          );\n        })(i.AbstractGroup);\n      e.a = u;\n    },\n    53: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return a;\n        }),\n        n.d(e, \"copy\", function () {\n          return s;\n        }),\n        n.d(e, \"set\", function () {\n          return c;\n        }),\n        n.d(e, \"add\", function () {\n          return u;\n        }),\n        n.d(e, \"subtract\", function () {\n          return h;\n        }),\n        n.d(e, \"multiply\", function () {\n          return l;\n        }),\n        n.d(e, \"divide\", function () {\n          return f;\n        }),\n        n.d(e, \"ceil\", function () {\n          return d;\n        }),\n        n.d(e, \"floor\", function () {\n          return p;\n        }),\n        n.d(e, \"min\", function () {\n          return g;\n        }),\n        n.d(e, \"max\", function () {\n          return v;\n        }),\n        n.d(e, \"round\", function () {\n          return y;\n        }),\n        n.d(e, \"scale\", function () {\n          return m;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return b;\n        }),\n        n.d(e, \"distance\", function () {\n          return x;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return S;\n        }),\n        n.d(e, \"length\", function () {\n          return w;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return O;\n        }),\n        n.d(e, \"negate\", function () {\n          return M;\n        }),\n        n.d(e, \"inverse\", function () {\n          return k;\n        }),\n        n.d(e, \"normalize\", function () {\n          return j;\n        }),\n        n.d(e, \"dot\", function () {\n          return C;\n        }),\n        n.d(e, \"cross\", function () {\n          return E;\n        }),\n        n.d(e, \"lerp\", function () {\n          return P;\n        }),\n        n.d(e, \"random\", function () {\n          return A;\n        }),\n        n.d(e, \"transformMat2\", function () {\n          return I;\n        }),\n        n.d(e, \"transformMat2d\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return N;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return B;\n        }),\n        n.d(e, \"rotate\", function () {\n          return L;\n        }),\n        n.d(e, \"angle\", function () {\n          return D;\n        }),\n        n.d(e, \"zero\", function () {\n          return _;\n        }),\n        n.d(e, \"str\", function () {\n          return R;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return F;\n        }),\n        n.d(e, \"equals\", function () {\n          return Y;\n        }),\n        n.d(e, \"len\", function () {\n          return z;\n        }),\n        n.d(e, \"sub\", function () {\n          return W;\n        }),\n        n.d(e, \"mul\", function () {\n          return q;\n        }),\n        n.d(e, \"div\", function () {\n          return V;\n        }),\n        n.d(e, \"dist\", function () {\n          return G;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return H;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return U;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Z;\n        });\n      var r = n(7);\n      function i() {\n        var t = new r.a(2);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(2);\n        return (e[0] = t[0]), (e[1] = t[1]), e;\n      }\n      function a(t, e) {\n        var n = new r.a(2);\n        return (n[0] = t), (n[1] = e), n;\n      }\n      function s(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), t;\n      }\n      function c(t, e, n) {\n        return (t[0] = e), (t[1] = n), t;\n      }\n      function u(t, e, n) {\n        return (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), t;\n      }\n      function h(t, e, n) {\n        return (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), t;\n      }\n      function l(t, e, n) {\n        return (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), t;\n      }\n      function f(t, e, n) {\n        return (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), t;\n      }\n      function d(t, e) {\n        return (t[0] = Math.ceil(e[0])), (t[1] = Math.ceil(e[1])), t;\n      }\n      function p(t, e) {\n        return (t[0] = Math.floor(e[0])), (t[1] = Math.floor(e[1])), t;\n      }\n      function g(t, e, n) {\n        return (t[0] = Math.min(e[0], n[0])), (t[1] = Math.min(e[1], n[1])), t;\n      }\n      function v(t, e, n) {\n        return (t[0] = Math.max(e[0], n[0])), (t[1] = Math.max(e[1], n[1])), t;\n      }\n      function y(t, e) {\n        return (t[0] = Math.round(e[0])), (t[1] = Math.round(e[1])), t;\n      }\n      function m(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), t;\n      }\n      function b(t, e, n, r) {\n        return (t[0] = e[0] + n[0] * r), (t[1] = e[1] + n[1] * r), t;\n      }\n      function x(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return Math.hypot(n, r);\n      }\n      function S(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return n * n + r * r;\n      }\n      function w(t) {\n        var e = t[0],\n          n = t[1];\n        return Math.hypot(e, n);\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1];\n        return e * e + n * n;\n      }\n      function M(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), t;\n      }\n      function k(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), t;\n      }\n      function j(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = n * n + r * r;\n        return (\n          i > 0 && (i = 1 / Math.sqrt(i)),\n          (t[0] = e[0] * i),\n          (t[1] = e[1] * i),\n          t\n        );\n      }\n      function C(t, e) {\n        return t[0] * e[0] + t[1] * e[1];\n      }\n      function E(t, e, n) {\n        var r = e[0] * n[1] - e[1] * n[0];\n        return (t[0] = t[1] = 0), (t[2] = r), t;\n      }\n      function P(t, e, n, r) {\n        var i = e[0],\n          o = e[1];\n        return (t[0] = i + r * (n[0] - i)), (t[1] = o + r * (n[1] - o)), t;\n      }\n      function A(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI;\n        return (t[0] = Math.cos(n) * e), (t[1] = Math.sin(n) * e), t;\n      }\n      function I(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (t[0] = n[0] * r + n[2] * i), (t[1] = n[1] * r + n[3] * i), t;\n      }\n      function T(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[2] * i + n[4]),\n          (t[1] = n[1] * r + n[3] * i + n[5]),\n          t\n        );\n      }\n      function N(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[3] * i + n[6]),\n          (t[1] = n[1] * r + n[4] * i + n[7]),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[4] * i + n[12]),\n          (t[1] = n[1] * r + n[5] * i + n[13]),\n          t\n        );\n      }\n      function L(t, e, n, r) {\n        var i = e[0] - n[0],\n          o = e[1] - n[1],\n          a = Math.sin(r),\n          s = Math.cos(r);\n        return (t[0] = i * s - o * a + n[0]), (t[1] = i * a + o * s + n[1]), t;\n      }\n      function D(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = e[0],\n          o = e[1],\n          a = Math.sqrt(n * n + r * r) * Math.sqrt(i * i + o * o),\n          s = a && (n * i + r * o) / a;\n        return Math.acos(Math.min(Math.max(s, -1), 1));\n      }\n      function _(t) {\n        return (t[0] = 0), (t[1] = 0), t;\n      }\n      function R(t) {\n        return \"vec2(\" + t[0] + \", \" + t[1] + \")\";\n      }\n      function F(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function Y(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = e[0],\n          a = e[1];\n        return (\n          Math.abs(n - o) <= r.b * Math.max(1, Math.abs(n), Math.abs(o)) &&\n          Math.abs(i - a) <= r.b * Math.max(1, Math.abs(i), Math.abs(a))\n        );\n      }\n      var X,\n        z = w,\n        W = h,\n        q = l,\n        V = f,\n        G = x,\n        H = S,\n        U = O,\n        Z =\n          ((X = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 2),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (X[0] = t[a]),\n                (X[1] = t[a + 1]),\n                i(X, X, o),\n                (t[a] = X[0]),\n                (t[a + 1] = X[1]);\n            return t;\n          });\n    },\n    54: function (t, e, n) {\n      \"use strict\";\n      var r, i, o, a;\n      function s(t) {\n        r ||\n          ((r = document.createElement(\"table\")),\n          (i = document.createElement(\"tr\")),\n          (o = /^\\s*<(\\w+|!)[^>]*>/),\n          (a = {\n            tr: document.createElement(\"tbody\"),\n            tbody: r,\n            thead: r,\n            tfoot: r,\n            td: i,\n            th: i,\n            \"*\": document.createElement(\"div\"),\n          }));\n        var e = o.test(t) && RegExp.$1;\n        (e && e in a) || (e = \"*\");\n        var n = a[e];\n        (t = \"string\" == typeof t ? t.replace(/(^\\s*)|(\\s*$)/g, \"\") : t),\n          (n.innerHTML = \"\" + t);\n        var s = n.childNodes[0];\n        return s && n.contains(s) && n.removeChild(s), s;\n      }\n      function c(t, e) {\n        if (t) for (var n in e) e.hasOwnProperty(n) && (t.style[n] = e[n]);\n        return t;\n      }\n      n.d(e, \"a\", function () {\n        return s;\n      }),\n        n.d(e, \"b\", function () {\n          return c;\n        });\n    },\n    55: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = n(209),\n        a = n(213),\n        s = [].slice,\n        c = [\"keyword\", \"gray\", \"hex\"],\n        u = {};\n      Object.keys(a).forEach(function (t) {\n        u[s.call(a[t].labels).sort().join(\"\")] = t;\n      });\n      var h = {};\n      function l(t, e) {\n        if (!(this instanceof l)) return new l(t, e);\n        if ((e && e in c && (e = null), e && !(e in a)))\n          throw new Error(\"Unknown model: \" + e);\n        var n, r, i, f, d, p, g, y, m;\n        if (null == t)\n          (this.model = \"rgb\"), (this.color = [0, 0, 0]), (this.valpha = 1);\n        else if (t instanceof l)\n          (this.model = t.model),\n            (this.color = t.color.slice()),\n            (this.valpha = t.valpha);\n        else if (\"string\" == typeof t) {\n          if (null === (r = o.get(t)))\n            throw new Error(\"Unable to parse color from string: \" + t);\n          (this.model = r.model),\n            (m = a[this.model].channels),\n            (this.color = r.value.slice(0, m)),\n            (this.valpha = \"number\" == typeof r.value[m] ? r.value[m] : 1);\n        } else if (t.length)\n          (this.model = e || \"rgb\"),\n            (m = a[this.model].channels),\n            (i = s.call(t, 0, m)),\n            (this.color = v(i, m)),\n            (this.valpha = \"number\" == typeof t[m] ? t[m] : 1);\n        else if (\"number\" == typeof t)\n          (t &= 16777215),\n            (this.model = \"rgb\"),\n            (this.color = [(t >> 16) & 255, (t >> 8) & 255, 255 & t]),\n            (this.valpha = 1);\n        else {\n          if (\n            ((this.valpha = 1),\n            (f = Object.keys(t)),\n            \"alpha\" in t &&\n              (f.splice(f.indexOf(\"alpha\"), 1),\n              (this.valpha = \"number\" == typeof t.alpha ? t.alpha : 0)),\n            !((d = f.sort().join(\"\")) in u))\n          )\n            throw new Error(\n              \"Unable to parse color from object: \" + JSON.stringify(t),\n            );\n          for (\n            this.model = u[d], p = a[this.model].labels, g = [], n = 0;\n            n < p.length;\n            n++\n          )\n            g.push(t[p[n]]);\n          this.color = v(g);\n        }\n        if (h[this.model])\n          for (m = a[this.model].channels, n = 0; n < m; n++)\n            (y = h[this.model][n]) && (this.color[n] = y(this.color[n]));\n        (this.valpha = Math.max(0, Math.min(1, this.valpha))),\n          Object.freeze && Object.freeze(this);\n      }\n      function f(t) {\n        return function (e) {\n          return (function (t, e) {\n            return Number(t.toFixed(e));\n          })(e, t);\n        };\n      }\n      function d(t, e, n) {\n        return (\n          (t = Array.isArray(t) ? t : [t]).forEach(function (t) {\n            (h[t] || (h[t] = []))[e] = n;\n          }),\n          (t = t[0]),\n          function (r) {\n            var i;\n            return arguments.length\n              ? (n && (r = n(r)), ((i = this[t]()).color[e] = r), i)\n              : ((i = this[t]().color[e]), n && (i = n(i)), i);\n          }\n        );\n      }\n      function p(t) {\n        return function (e) {\n          return Math.max(0, Math.min(t, e));\n        };\n      }\n      function g(t) {\n        return Array.isArray(t) ? t : [t];\n      }\n      function v(t, e) {\n        var n;\n        for (n = 0; n < e; n++) \"number\" != typeof t[n] && (t[n] = 0);\n        return t;\n      }\n      (l.prototype = {\n        toString: function () {\n          return this.string();\n        },\n        toJSON: function () {\n          return this[this.model]();\n        },\n        string: function (t) {\n          var e = this.model in o.to ? this : this.rgb(),\n            n =\n              1 === (e = e.round(\"number\" == typeof t ? t : 1)).valpha\n                ? e.color\n                : e.color.concat(this.valpha);\n          return o.to[e.model](n);\n        },\n        percentString: function (t) {\n          var e = this.rgb().round(\"number\" == typeof t ? t : 1),\n            n = 1 === e.valpha ? e.color : e.color.concat(this.valpha);\n          return o.to.rgb.percent(n);\n        },\n        array: function () {\n          return 1 === this.valpha\n            ? this.color.slice()\n            : this.color.concat(this.valpha);\n        },\n        object: function () {\n          var t,\n            e = {},\n            n = a[this.model].channels,\n            r = a[this.model].labels;\n          for (t = 0; t < n; t++) e[r[t]] = this.color[t];\n          return 1 !== this.valpha && (e.alpha = this.valpha), e;\n        },\n        unitArray: function () {\n          var t = this.rgb().color;\n          return (\n            (t[0] /= 255),\n            (t[1] /= 255),\n            (t[2] /= 255),\n            1 !== this.valpha && t.push(this.valpha),\n            t\n          );\n        },\n        unitObject: function () {\n          var t = this.rgb().object();\n          return (\n            (t.r /= 255),\n            (t.g /= 255),\n            (t.b /= 255),\n            1 !== this.valpha && (t.alpha = this.valpha),\n            t\n          );\n        },\n        round: function (t) {\n          return (\n            (t = Math.max(t || 0, 0)),\n            new l(this.color.map(f(t)).concat(this.valpha), this.model)\n          );\n        },\n        alpha: function (t) {\n          return arguments.length\n            ? new l(this.color.concat(Math.max(0, Math.min(1, t))), this.model)\n            : this.valpha;\n        },\n        red: d(\"rgb\", 0, p(255)),\n        green: d(\"rgb\", 1, p(255)),\n        blue: d(\"rgb\", 2, p(255)),\n        hue: d([\"hsl\", \"hsv\", \"hsl\", \"hwb\", \"hcg\"], 0, function (t) {\n          return ((t % 360) + 360) % 360;\n        }),\n        saturationl: d(\"hsl\", 1, p(100)),\n        lightness: d(\"hsl\", 2, p(100)),\n        saturationv: d(\"hsv\", 1, p(100)),\n        value: d(\"hsv\", 2, p(100)),\n        chroma: d(\"hcg\", 1, p(100)),\n        gray: d(\"hcg\", 2, p(100)),\n        white: d(\"hwb\", 1, p(100)),\n        wblack: d(\"hwb\", 2, p(100)),\n        cyan: d(\"cmyk\", 0, p(100)),\n        magenta: d(\"cmyk\", 1, p(100)),\n        yellow: d(\"cmyk\", 2, p(100)),\n        black: d(\"cmyk\", 3, p(100)),\n        x: d(\"xyz\", 0, p(100)),\n        y: d(\"xyz\", 1, p(100)),\n        z: d(\"xyz\", 2, p(100)),\n        l: d(\"lab\", 0, p(100)),\n        a: d(\"lab\", 1),\n        b: d(\"lab\", 2),\n        keyword: function (t) {\n          return arguments.length\n            ? new l(t)\n            : a[this.model].keyword(this.color);\n        },\n        hex: function (t) {\n          return arguments.length\n            ? new l(t)\n            : o.to.hex(this.rgb().round().color);\n        },\n        rgbNumber: function () {\n          var t = this.rgb().color;\n          return ((255 & t[0]) << 16) | ((255 & t[1]) << 8) | (255 & t[2]);\n        },\n        luminosity: function () {\n          var t,\n            e,\n            n = this.rgb().color,\n            r = [];\n          for (t = 0; t < n.length; t++)\n            (e = n[t] / 255),\n              (r[t] =\n                e <= 0.03928 ? e / 12.92 : Math.pow((e + 0.055) / 1.055, 2.4));\n          return 0.2126 * r[0] + 0.7152 * r[1] + 0.0722 * r[2];\n        },\n        contrast: function (t) {\n          var e = this.luminosity(),\n            n = t.luminosity();\n          return e > n ? (e + 0.05) / (n + 0.05) : (n + 0.05) / (e + 0.05);\n        },\n        level: function (t) {\n          var e = this.contrast(t);\n          return e >= 7.1 ? \"AAA\" : e >= 4.5 ? \"AA\" : \"\";\n        },\n        isDark: function () {\n          var t = this.rgb().color;\n          return (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3 < 128;\n        },\n        isLight: function () {\n          return !this.isDark();\n        },\n        negate: function () {\n          var t,\n            e = this.rgb();\n          for (t = 0; t < 3; t++) e.color[t] = 255 - e.color[t];\n          return e;\n        },\n        lighten: function (t) {\n          var e = this.hsl();\n          return (e.color[2] += e.color[2] * t), e;\n        },\n        darken: function (t) {\n          var e = this.hsl();\n          return (e.color[2] -= e.color[2] * t), e;\n        },\n        saturate: function (t) {\n          var e = this.hsl();\n          return (e.color[1] += e.color[1] * t), e;\n        },\n        desaturate: function (t) {\n          var e = this.hsl();\n          return (e.color[1] -= e.color[1] * t), e;\n        },\n        whiten: function (t) {\n          var e = this.hwb();\n          return (e.color[1] += e.color[1] * t), e;\n        },\n        blacken: function (t) {\n          var e = this.hwb();\n          return (e.color[2] += e.color[2] * t), e;\n        },\n        grayscale: function () {\n          var t = this.rgb().color,\n            e = 0.3 * t[0] + 0.59 * t[1] + 0.11 * t[2];\n          return l.rgb(e, e, e);\n        },\n        fade: function (t) {\n          return this.alpha(this.valpha - this.valpha * t);\n        },\n        opaquer: function (t) {\n          return this.alpha(this.valpha + this.valpha * t);\n        },\n        rotate: function (t) {\n          var e = this.hsl(),\n            n = e.color[0];\n          return (\n            (n = (n = (n + t) % 360) < 0 ? 360 + n : n), (e.color[0] = n), e\n          );\n        },\n        mix: function (t, e) {\n          if (!t || !t.rgb)\n            throw new Error(\n              'Argument to \"mix\" was not a Color instance, but rather an instance of ' +\n                i(t),\n            );\n          var n = t.rgb(),\n            r = this.rgb(),\n            o = void 0 === e ? 0.5 : e,\n            a = 2 * o - 1,\n            s = n.alpha() - r.alpha(),\n            c = ((a * s == -1 ? a : (a + s) / (1 + a * s)) + 1) / 2,\n            u = 1 - c;\n          return l.rgb(\n            c * n.red() + u * r.red(),\n            c * n.green() + u * r.green(),\n            c * n.blue() + u * r.blue(),\n            n.alpha() * o + r.alpha() * (1 - o),\n          );\n        },\n      }),\n        Object.keys(a).forEach(function (t) {\n          if (-1 === c.indexOf(t)) {\n            var e = a[t].channels;\n            (l.prototype[t] = function () {\n              if (this.model === t) return new l(this);\n              if (arguments.length) return new l(arguments, t);\n              var n = \"number\" == typeof arguments[e] ? e : this.valpha;\n              return new l(g(a[this.model][t].raw(this.color)).concat(n), t);\n            }),\n              (l[t] = function (n) {\n                return (\n                  \"number\" == typeof n && (n = v(s.call(arguments), e)),\n                  new l(n, t)\n                );\n              });\n          }\n        }),\n        (t.exports = l);\n    },\n    6: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"j\", function () {\n        return i;\n      }),\n        n.d(e, \"c\", function () {\n          return o;\n        }),\n        n.d(e, \"g\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        });\n      var r = n(0);\n      function i(t, e) {\n        var n = t.indexOf(e);\n        -1 !== n && t.splice(n, 1);\n      }\n      n.d(e, \"e\", function () {\n        return r.isNil;\n      }),\n        n.d(e, \"d\", function () {\n          return r.isFunction;\n        }),\n        n.d(e, \"h\", function () {\n          return r.isString;\n        }),\n        n.d(e, \"f\", function () {\n          return r.isObject;\n        }),\n        n.d(e, \"i\", function () {\n          return r.mix;\n        }),\n        n.d(e, \"a\", function () {\n          return r.each;\n        }),\n        n.d(e, \"k\", function () {\n          return r.upperFirst;\n        });\n      var o = \"undefined\" != typeof window && void 0 !== window.document;\n      function a(t, e) {\n        if (t.isCanvas()) return !0;\n        for (var n = e.getParent(), r = !1; n; ) {\n          if (n === t) {\n            r = !0;\n            break;\n          }\n          n = n.getParent();\n        }\n        return r;\n      }\n      function s(t) {\n        return t.cfg.visible && t.cfg.capture;\n      }\n    },\n    62: function (t, e, n) {\n      \"use strict\";\n      var r,\n        i =\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.getLayoutByName = e.unRegisterLayout = e.registerLayout = void 0);\n      var o = n(66),\n        a = n(216),\n        s = new Map();\n      e.registerLayout = function (t, e) {\n        var n;\n        s.get(t) &&\n          console.warn(\n            \"The layout with the name \" +\n              t +\n              \" exists already, it will be overridden\",\n          ),\n          a.isObject(e)\n            ? ((n = (function (t) {\n                function n(n) {\n                  var r = t.call(this) || this,\n                    i = r,\n                    o = {},\n                    a = i.getDefaultCfg();\n                  return (\n                    Object.assign(o, a, e, n),\n                    Object.keys(o).forEach(function (t) {\n                      var e = o[t];\n                      i[t] = e;\n                    }),\n                    r\n                  );\n                }\n                return i(n, t), n;\n              })(o.Base)),\n              s.set(t, n))\n            : s.set(t, e);\n      };\n      e.unRegisterLayout = function (t) {\n        s.has(t) && s.delete(t);\n      };\n      e.getLayoutByName = function (t) {\n        return s.has(t) ? s.get(t) : null;\n      };\n    },\n    63: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return s;\n      });\n      var r = n(3);\n      function i(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function o(t, e) {\n        return i(t) * i(e) ? (t[0] * e[0] + t[1] * e[1]) / (i(t) * i(e)) : 1;\n      }\n      function a(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(o(t, e));\n      }\n      function s(t, e) {\n        var n = e[1],\n          i = e[2],\n          s = Object(r.m)(Object(r.n)(e[3]), 2 * Math.PI),\n          c = e[4],\n          u = e[5],\n          h = t[0],\n          l = t[1],\n          f = e[6],\n          d = e[7],\n          p = (Math.cos(s) * (h - f)) / 2 + (Math.sin(s) * (l - d)) / 2,\n          g = (-1 * Math.sin(s) * (h - f)) / 2 + (Math.cos(s) * (l - d)) / 2,\n          v = (p * p) / (n * n) + (g * g) / (i * i);\n        v > 1 && ((n *= Math.sqrt(v)), (i *= Math.sqrt(v)));\n        var y = n * n * (g * g) + i * i * (p * p),\n          m = y ? Math.sqrt((n * n * (i * i) - y) / y) : 1;\n        c === u && (m *= -1), isNaN(m) && (m = 0);\n        var b = i ? (m * n * g) / i : 0,\n          x = n ? (m * -i * p) / n : 0,\n          S = (h + f) / 2 + Math.cos(s) * b - Math.sin(s) * x,\n          w = (l + d) / 2 + Math.sin(s) * b + Math.cos(s) * x,\n          O = [(p - b) / n, (g - x) / i],\n          M = [(-1 * p - b) / n, (-1 * g - x) / i],\n          k = a([1, 0], O),\n          j = a(O, M);\n        return (\n          o(O, M) <= -1 && (j = Math.PI),\n          o(O, M) >= 1 && (j = 0),\n          0 === u && j > 0 && (j -= 2 * Math.PI),\n          1 === u && j < 0 && (j += 2 * Math.PI),\n          {\n            cx: S,\n            cy: w,\n            rx: Object(r.j)(t, [f, d]) ? 0 : n,\n            ry: Object(r.j)(t, [f, d]) ? 0 : i,\n            startAngle: k,\n            endAngle: k + j,\n            xRotation: s,\n            arcFlag: c,\n            sweepFlag: u,\n          }\n        );\n      }\n    },\n    64: function (t, e, n) {\n      \"use strict\";\n      var r,\n        i =\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.RandomLayout = void 0);\n      var o = (function (t) {\n        function e(e) {\n          var n = t.call(this) || this;\n          return (\n            (n.center = [0, 0]),\n            (n.width = 300),\n            (n.height = 300),\n            (n.nodes = []),\n            (n.edges = []),\n            (n.onLayoutEnd = function () {}),\n            n.updateCfg(e),\n            n\n          );\n        }\n        return (\n          i(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { center: [0, 0], width: 300, height: 300 };\n          }),\n          (e.prototype.execute = function () {\n            var t = this,\n              e = t.nodes,\n              n = t.center;\n            return (\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n              t.height ||\n                \"undefined\" == typeof window ||\n                (t.height = window.innerHeight),\n              e &&\n                e.forEach(function (e) {\n                  (e.x = 0.9 * (Math.random() - 0.5) * t.width + n[0]),\n                    (e.y = 0.9 * (Math.random() - 0.5) * t.height + n[1]);\n                }),\n              t.onLayoutEnd && t.onLayoutEnd(),\n              { nodes: e, edges: this.edges }\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"random\";\n          }),\n          e\n        );\n      })(n(66).Base);\n      e.RandomLayout = o;\n    },\n    65: function (t, e, n) {\n      \"use strict\";\n      n(31), n(8);\n      var r = n(184);\n      n.d(e, \"Canvas\", function () {\n        return r.a;\n      });\n      n(52), n(63);\n    },\n    66: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function () {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"a\", function () {\n          return i;\n        }),\n        n.d(e, \"c\", function () {\n          return o;\n        });\n      var r = 1e-6,\n        i = \"undefined\" != typeof Float32Array ? Float32Array : Array,\n        o = Math.random;\n      Math.PI;\n      Math.hypot ||\n        (Math.hypot = function () {\n          for (var t = 0, e = arguments.length; e--; )\n            t += arguments[e] * arguments[e];\n          return Math.sqrt(t);\n        });\n    },\n    8: function (t, e, n) {\n      \"use strict\";\n      var r = n(34);\n      n.d(e, \"PathUtil\", function () {\n        return r;\n      });\n      n(122), n(123);\n      var i = n(86);\n      n.d(e, \"Event\", function () {\n        return i.a;\n      });\n      n(87);\n      var o = n(183);\n      n.d(e, \"AbstractCanvas\", function () {\n        return o.a;\n      });\n      var a = n(124);\n      n.d(e, \"AbstractGroup\", function () {\n        return a.a;\n      });\n      var s = n(125);\n      n.d(e, \"AbstractShape\", function () {\n        return s.a;\n      });\n      var c = n(118);\n      n.d(e, \"getBBoxMethod\", function () {\n        return c.a;\n      }),\n        n.d(e, \"registerBBox\", function () {\n          return c.b;\n        });\n      var u = n(46);\n      n.d(e, \"getTextHeight\", function () {\n        return u.b;\n      }),\n        n.d(e, \"assembleFont\", function () {\n          return u.a;\n        });\n      var h = n(6);\n      n.d(e, \"isAllowCapture\", function () {\n        return h.b;\n      });\n      var l = n(25);\n      n.d(e, \"multiplyVec2\", function () {\n        return l.c;\n      }),\n        n.d(e, \"invert\", function () {\n          return l.a;\n        });\n      n(88), n(90);\n    },\n    85: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"length\", function () {\n          return a;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return s;\n        }),\n        n.d(e, \"copy\", function () {\n          return c;\n        }),\n        n.d(e, \"set\", function () {\n          return u;\n        }),\n        n.d(e, \"add\", function () {\n          return h;\n        }),\n        n.d(e, \"subtract\", function () {\n          return l;\n        }),\n        n.d(e, \"multiply\", function () {\n          return f;\n        }),\n        n.d(e, \"divide\", function () {\n          return d;\n        }),\n        n.d(e, \"ceil\", function () {\n          return p;\n        }),\n        n.d(e, \"floor\", function () {\n          return g;\n        }),\n        n.d(e, \"min\", function () {\n          return v;\n        }),\n        n.d(e, \"max\", function () {\n          return y;\n        }),\n        n.d(e, \"round\", function () {\n          return m;\n        }),\n        n.d(e, \"scale\", function () {\n          return b;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return x;\n        }),\n        n.d(e, \"distance\", function () {\n          return S;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return w;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return O;\n        }),\n        n.d(e, \"negate\", function () {\n          return M;\n        }),\n        n.d(e, \"inverse\", function () {\n          return k;\n        }),\n        n.d(e, \"normalize\", function () {\n          return j;\n        }),\n        n.d(e, \"dot\", function () {\n          return C;\n        }),\n        n.d(e, \"cross\", function () {\n          return E;\n        }),\n        n.d(e, \"lerp\", function () {\n          return P;\n        }),\n        n.d(e, \"hermite\", function () {\n          return A;\n        }),\n        n.d(e, \"bezier\", function () {\n          return I;\n        }),\n        n.d(e, \"random\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return N;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return B;\n        }),\n        n.d(e, \"transformQuat\", function () {\n          return L;\n        }),\n        n.d(e, \"rotateX\", function () {\n          return D;\n        }),\n        n.d(e, \"rotateY\", function () {\n          return _;\n        }),\n        n.d(e, \"rotateZ\", function () {\n          return R;\n        }),\n        n.d(e, \"angle\", function () {\n          return F;\n        }),\n        n.d(e, \"zero\", function () {\n          return Y;\n        }),\n        n.d(e, \"str\", function () {\n          return X;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return z;\n        }),\n        n.d(e, \"equals\", function () {\n          return W;\n        }),\n        n.d(e, \"sub\", function () {\n          return V;\n        }),\n        n.d(e, \"mul\", function () {\n          return G;\n        }),\n        n.d(e, \"div\", function () {\n          return H;\n        }),\n        n.d(e, \"dist\", function () {\n          return U;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return Z;\n        }),\n        n.d(e, \"len\", function () {\n          return K;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return $;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Q;\n        });\n      var r = n(7);\n      function i() {\n        var t = new r.a(3);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0), (t[2] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(3);\n        return (e[0] = t[0]), (e[1] = t[1]), (e[2] = t[2]), e;\n      }\n      function a(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return Math.hypot(e, n, r);\n      }\n      function s(t, e, n) {\n        var i = new r.a(3);\n        return (i[0] = t), (i[1] = e), (i[2] = n), i;\n      }\n      function c(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), (t[2] = e[2]), t;\n      }\n      function u(t, e, n, r) {\n        return (t[0] = e), (t[1] = n), (t[2] = r), t;\n      }\n      function h(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), (t[2] = e[2] + n[2]), t\n        );\n      }\n      function l(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), (t[2] = e[2] - n[2]), t\n        );\n      }\n      function f(t, e, n) {\n        return (\n          (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), (t[2] = e[2] * n[2]), t\n        );\n      }\n      function d(t, e, n) {\n        return (\n          (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), (t[2] = e[2] / n[2]), t\n        );\n      }\n      function p(t, e) {\n        return (\n          (t[0] = Math.ceil(e[0])),\n          (t[1] = Math.ceil(e[1])),\n          (t[2] = Math.ceil(e[2])),\n          t\n        );\n      }\n      function g(t, e) {\n        return (\n          (t[0] = Math.floor(e[0])),\n          (t[1] = Math.floor(e[1])),\n          (t[2] = Math.floor(e[2])),\n          t\n        );\n      }\n      function v(t, e, n) {\n        return (\n          (t[0] = Math.min(e[0], n[0])),\n          (t[1] = Math.min(e[1], n[1])),\n          (t[2] = Math.min(e[2], n[2])),\n          t\n        );\n      }\n      function y(t, e, n) {\n        return (\n          (t[0] = Math.max(e[0], n[0])),\n          (t[1] = Math.max(e[1], n[1])),\n          (t[2] = Math.max(e[2], n[2])),\n          t\n        );\n      }\n      function m(t, e) {\n        return (\n          (t[0] = Math.round(e[0])),\n          (t[1] = Math.round(e[1])),\n          (t[2] = Math.round(e[2])),\n          t\n        );\n      }\n      function b(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), (t[2] = e[2] * n), t;\n      }\n      function x(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          t\n        );\n      }\n      function S(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return Math.hypot(n, r, i);\n      }\n      function w(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return n * n + r * r + i * i;\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return e * e + n * n + r * r;\n      }\n      function M(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), (t[2] = -e[2]), t;\n      }\n      function k(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), (t[2] = 1 / e[2]), t;\n      }\n      function j(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = n * n + r * r + i * i;\n        return (\n          o > 0 && (o = 1 / Math.sqrt(o)),\n          (t[0] = e[0] * o),\n          (t[1] = e[1] * o),\n          (t[2] = e[2] * o),\n          t\n        );\n      }\n      function C(t, e) {\n        return t[0] * e[0] + t[1] * e[1] + t[2] * e[2];\n      }\n      function E(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[0],\n          s = n[1],\n          c = n[2];\n        return (\n          (t[0] = i * c - o * s),\n          (t[1] = o * a - r * c),\n          (t[2] = r * s - i * a),\n          t\n        );\n      }\n      function P(t, e, n, r) {\n        var i = e[0],\n          o = e[1],\n          a = e[2];\n        return (\n          (t[0] = i + r * (n[0] - i)),\n          (t[1] = o + r * (n[1] - o)),\n          (t[2] = a + r * (n[2] - a)),\n          t\n        );\n      }\n      function A(t, e, n, r, i, o) {\n        var a = o * o,\n          s = a * (2 * o - 3) + 1,\n          c = a * (o - 2) + o,\n          u = a * (o - 1),\n          h = a * (3 - 2 * o);\n        return (\n          (t[0] = e[0] * s + n[0] * c + r[0] * u + i[0] * h),\n          (t[1] = e[1] * s + n[1] * c + r[1] * u + i[1] * h),\n          (t[2] = e[2] * s + n[2] * c + r[2] * u + i[2] * h),\n          t\n        );\n      }\n      function I(t, e, n, r, i, o) {\n        var a = 1 - o,\n          s = a * a,\n          c = o * o,\n          u = s * a,\n          h = 3 * o * s,\n          l = 3 * c * a,\n          f = c * o;\n        return (\n          (t[0] = e[0] * u + n[0] * h + r[0] * l + i[0] * f),\n          (t[1] = e[1] * u + n[1] * h + r[1] * l + i[1] * f),\n          (t[2] = e[2] * u + n[2] * h + r[2] * l + i[2] * f),\n          t\n        );\n      }\n      function T(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI,\n          i = 2 * r.c() - 1,\n          o = Math.sqrt(1 - i * i) * e;\n        return (\n          (t[0] = Math.cos(n) * o), (t[1] = Math.sin(n) * o), (t[2] = i * e), t\n        );\n      }\n      function N(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[3] * r + n[7] * i + n[11] * o + n[15];\n        return (\n          (a = a || 1),\n          (t[0] = (n[0] * r + n[4] * i + n[8] * o + n[12]) / a),\n          (t[1] = (n[1] * r + n[5] * i + n[9] * o + n[13]) / a),\n          (t[2] = (n[2] * r + n[6] * i + n[10] * o + n[14]) / a),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2];\n        return (\n          (t[0] = r * n[0] + i * n[3] + o * n[6]),\n          (t[1] = r * n[1] + i * n[4] + o * n[7]),\n          (t[2] = r * n[2] + i * n[5] + o * n[8]),\n          t\n        );\n      }\n      function L(t, e, n) {\n        var r = n[0],\n          i = n[1],\n          o = n[2],\n          a = n[3],\n          s = e[0],\n          c = e[1],\n          u = e[2],\n          h = i * u - o * c,\n          l = o * s - r * u,\n          f = r * c - i * s,\n          d = i * f - o * l,\n          p = o * h - r * f,\n          g = r * l - i * h,\n          v = 2 * a;\n        return (\n          (h *= v),\n          (l *= v),\n          (f *= v),\n          (d *= 2),\n          (p *= 2),\n          (g *= 2),\n          (t[0] = s + h + d),\n          (t[1] = c + l + p),\n          (t[2] = u + f + g),\n          t\n        );\n      }\n      function D(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0]),\n          (o[1] = i[1] * Math.cos(r) - i[2] * Math.sin(r)),\n          (o[2] = i[1] * Math.sin(r) + i[2] * Math.cos(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function _(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[2] * Math.sin(r) + i[0] * Math.cos(r)),\n          (o[1] = i[1]),\n          (o[2] = i[2] * Math.cos(r) - i[0] * Math.sin(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function R(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0] * Math.cos(r) - i[1] * Math.sin(r)),\n          (o[1] = i[0] * Math.sin(r) + i[1] * Math.cos(r)),\n          (o[2] = i[2]),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function F(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = t[2],\n          o = e[0],\n          a = e[1],\n          s = e[2],\n          c =\n            Math.sqrt(n * n + r * r + i * i) * Math.sqrt(o * o + a * a + s * s),\n          u = c && C(t, e) / c;\n        return Math.acos(Math.min(Math.max(u, -1), 1));\n      }\n      function Y(t) {\n        return (t[0] = 0), (t[1] = 0), (t[2] = 0), t;\n      }\n      function X(t) {\n        return \"vec3(\" + t[0] + \", \" + t[1] + \", \" + t[2] + \")\";\n      }\n      function z(t, e) {\n        return t[0] === e[0] && t[1] === e[1] && t[2] === e[2];\n      }\n      function W(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = t[2],\n          a = e[0],\n          s = e[1],\n          c = e[2];\n        return (\n          Math.abs(n - a) <= r.b * Math.max(1, Math.abs(n), Math.abs(a)) &&\n          Math.abs(i - s) <= r.b * Math.max(1, Math.abs(i), Math.abs(s)) &&\n          Math.abs(o - c) <= r.b * Math.max(1, Math.abs(o), Math.abs(c))\n        );\n      }\n      var q,\n        V = l,\n        G = f,\n        H = d,\n        U = S,\n        Z = w,\n        K = a,\n        $ = O,\n        Q =\n          ((q = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 3),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (q[0] = t[a]),\n                (q[1] = t[a + 1]),\n                (q[2] = t[a + 2]),\n                i(q, q, o),\n                (t[a] = q[0]),\n                (t[a + 1] = q[1]),\n                (t[a + 2] = q[2]);\n            return t;\n          });\n    },\n    86: function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t(t, e) {\n          (this.bubbles = !0),\n            (this.target = null),\n            (this.currentTarget = null),\n            (this.delegateTarget = null),\n            (this.delegateObject = null),\n            (this.defaultPrevented = !1),\n            (this.propagationStopped = !1),\n            (this.shape = null),\n            (this.fromShape = null),\n            (this.toShape = null),\n            (this.propagationPath = []),\n            (this.type = t),\n            (this.name = t),\n            (this.originalEvent = e),\n            (this.timeStamp = e.timeStamp);\n        }\n        return (\n          (t.prototype.preventDefault = function () {\n            (this.defaultPrevented = !0),\n              this.originalEvent.preventDefault &&\n                this.originalEvent.preventDefault();\n          }),\n          (t.prototype.stopPropagation = function () {\n            this.propagationStopped = !0;\n          }),\n          (t.prototype.toString = function () {\n            return \"[Event (type=\" + this.type + \")]\";\n          }),\n          (t.prototype.save = function () {}),\n          (t.prototype.restore = function () {}),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    87: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(91),\n        o = n(6),\n        a = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            n.destroyed = !1;\n            var r = n.getDefaultCfg();\n            return (n.cfg = Object(o.i)(r, e)), n;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.set = function (t, e) {\n              this.cfg[t] = e;\n            }),\n            (e.prototype.destroy = function () {\n              (this.cfg = { destroyed: !0 }), this.off(), (this.destroyed = !0);\n            }),\n            e\n          );\n        })(i.a);\n      e.a = a;\n    },\n    88: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return i;\n      });\n      var r = null;\n      function i() {\n        if (!r) {\n          var t = document.createElement(\"canvas\");\n          (t.width = 1), (t.height = 1), (r = t.getContext(\"2d\"));\n        }\n        return r;\n      }\n    },\n    89: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return c;\n      });\n      var r = n(1),\n        i = n(11),\n        o = n(3);\n      function a(t) {\n        return (\n          t instanceof HTMLElement &&\n          Object(o.k)(t.nodeName) &&\n          \"CANVAS\" === t.nodeName.toUpperCase()\n        );\n      }\n      var s = null;\n      function c(t) {\n        s = t;\n      }\n      var u = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.getDefaultAttrs = function () {\n            var e = t.prototype.getDefaultAttrs.call(this);\n            return Object(r.a)(Object(r.a)({}, e), {\n              x: 0,\n              y: 0,\n              width: 0,\n              height: 0,\n            });\n          }),\n          (e.prototype.initAttrs = function (t) {\n            this._setImage(t.img);\n          }),\n          (e.prototype.isStroke = function () {\n            return !1;\n          }),\n          (e.prototype.isOnlyHitBox = function () {\n            return !0;\n          }),\n          (e.prototype._afterLoading = function () {\n            if (!0 === this.get(\"toDraw\")) {\n              var t = this.get(\"canvas\");\n              t ? t.draw() : this.createPath(this.get(\"context\"));\n            }\n          }),\n          (e.prototype._setImage = function (t) {\n            var e = this,\n              n = this.attrs;\n            if (\n              !(null == s ? void 0 : s.isMini()) ||\n              (null == s ? void 0 : s.isMiniNative())\n            )\n              if (Object(o.k)(t)) {\n                var r = null;\n                ((r = (null == s ? void 0 : s.isMiniNative())\n                  ? null == s\n                    ? void 0\n                    : s.get(\"container\").createImage()\n                  : new Image()).onload = function () {\n                  if (e.destroyed) return !1;\n                  e.attr(\"img\", r), e.set(\"loading\", !1), e._afterLoading();\n                  var t = e.get(\"callback\");\n                  t && t.call(e);\n                }),\n                  (r.crossOrigin = \"Anonymous\"),\n                  (r.src = t),\n                  this.set(\"loading\", !0);\n              } else\n                (null == s ? void 0 : s.isMiniNative()) || t instanceof Image\n                  ? (n.width || (n.width = t.width),\n                    n.height || (n.height = t.height))\n                  : a(t) &&\n                    (n.width || (n.width = Number(t.getAttribute(\"width\"))),\n                    n.height || (n.height, Number(t.getAttribute(\"height\"))));\n            else this.attr(\"img\", t);\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            t.prototype.onAttrChange.call(this, e, n, r),\n              \"img\" === e && this._setImage(n);\n          }),\n          (e.prototype.createPath = function (t) {\n            var e = this.attr(),\n              n = e.img,\n              r = e.x,\n              i = e.y,\n              c = e.width,\n              u = e.height,\n              h = e.sx,\n              l = e.sy,\n              f = e.swidth,\n              d = e.sheight;\n            if (this.get(\"loading\"))\n              return this.set(\"toDraw\", !0), void this.set(\"context\", t);\n            (null == s ? void 0 : s.isMini())\n              ? t.drawImage(n, r, i, c, u)\n              : (n instanceof Image || a(n)) &&\n                (Object(o.h)(h) ||\n                Object(o.h)(l) ||\n                Object(o.h)(f) ||\n                Object(o.h)(d)\n                  ? t.drawImage(n, r, i, c, u)\n                  : t.drawImage(n, h, l, f, d, r, i, c, u));\n          }),\n          e\n        );\n      })(i.a);\n      e.a = u;\n    },\n    9: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"e\", function () {\n        return y;\n      }),\n        n.d(e, \"b\", function () {\n          return O;\n        }),\n        n.d(e, \"a\", function () {\n          return A;\n        }),\n        n.d(e, \"c\", function () {\n          return l;\n        }),\n        n.d(e, \"d\", function () {\n          return D;\n        }),\n        n.d(e, \"f\", function () {\n          return r;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"distance\", function () {\n          return o;\n        }),\n        n.d(r, \"isNumberEqual\", function () {\n          return a;\n        }),\n        n.d(r, \"getBBoxByArray\", function () {\n          return s;\n        }),\n        n.d(r, \"getBBoxRange\", function () {\n          return c;\n        }),\n        n.d(r, \"piMod\", function () {\n          return u;\n        });\n      var i = n(0);\n      function o(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function a(t, e) {\n        return Math.abs(t - e) < 0.001;\n      }\n      function s(t, e) {\n        var n = Object(i.min)(t),\n          r = Object(i.min)(e);\n        return {\n          x: n,\n          y: r,\n          width: Object(i.max)(t) - n,\n          height: Object(i.max)(e) - r,\n        };\n      }\n      function c(t, e, n, r) {\n        return {\n          minX: Object(i.min)([t, n]),\n          maxX: Object(i.max)([t, n]),\n          minY: Object(i.min)([e, r]),\n          maxY: Object(i.max)([e, r]),\n        };\n      }\n      function u(t) {\n        return (t + 2 * Math.PI) % (2 * Math.PI);\n      }\n      var h = n(53),\n        l = {\n          box: function (t, e, n, r) {\n            return s([t, n], [e, r]);\n          },\n          length: function (t, e, n, r) {\n            return o(t, e, n, r);\n          },\n          pointAt: function (t, e, n, r, i) {\n            return { x: (1 - i) * t + i * n, y: (1 - i) * e + i * r };\n          },\n          pointDistance: function (t, e, n, r, i, a) {\n            var s = (n - t) * (i - t) + (r - e) * (a - e);\n            return s < 0\n              ? o(t, e, i, a)\n              : s > (n - t) * (n - t) + (r - e) * (r - e)\n              ? o(n, r, i, a)\n              : this.pointToLine(t, e, n, r, i, a);\n          },\n          pointToLine: function (t, e, n, r, i, o) {\n            var a = [n - t, r - e];\n            if (h.exactEquals(a, [0, 0]))\n              return Math.sqrt((i - t) * (i - t) + (o - e) * (o - e));\n            var s = [-a[1], a[0]];\n            h.normalize(s, s);\n            var c = [i - t, o - e];\n            return Math.abs(h.dot(c, s));\n          },\n          tangentAngle: function (t, e, n, r) {\n            return Math.atan2(r - e, n - t);\n          },\n        };\n      function f(t, e, n, r, i, a) {\n        var s,\n          c = 1 / 0,\n          u = [n, r],\n          h = 20;\n        a && a > 200 && (h = a / 10);\n        for (var l = 1 / h, f = l / 10, d = 0; d <= h; d++) {\n          var p = d * l,\n            g = [i.apply(null, t.concat([p])), i.apply(null, e.concat([p]))];\n          (b = o(u[0], u[1], g[0], g[1])) < c && ((s = p), (c = b));\n        }\n        if (0 === s) return { x: t[0], y: e[0] };\n        if (1 === s) {\n          var v = t.length;\n          return { x: t[v - 1], y: e[v - 1] };\n        }\n        c = 1 / 0;\n        for (d = 0; d < 32 && !(f < 1e-4); d++) {\n          var y = s - f,\n            m = s + f,\n            b =\n              ((g = [\n                i.apply(null, t.concat([y])),\n                i.apply(null, e.concat([y])),\n              ]),\n              o(u[0], u[1], g[0], g[1]));\n          if (y >= 0 && b < c) (s = y), (c = b);\n          else {\n            var x = [\n                i.apply(null, t.concat([m])),\n                i.apply(null, e.concat([m])),\n              ],\n              S = o(u[0], u[1], x[0], x[1]);\n            m <= 1 && S < c ? ((s = m), (c = S)) : (f *= 0.5);\n          }\n        }\n        return {\n          x: i.apply(null, t.concat([s])),\n          y: i.apply(null, e.concat([s])),\n        };\n      }\n      function d(t, e, n, r) {\n        var i = 1 - r;\n        return i * i * t + 2 * r * i * e + r * r * n;\n      }\n      function p(t, e, n) {\n        var r = t + n - 2 * e;\n        if (a(r, 0)) return [0.5];\n        var i = (t - e) / r;\n        return i <= 1 && i >= 0 ? [i] : [];\n      }\n      function g(t, e, n, r) {\n        return 2 * (1 - r) * (e - t) + 2 * r * (n - e);\n      }\n      function v(t, e, n, r, i, o, a) {\n        var s = d(t, n, i, a),\n          c = d(e, r, o, a),\n          u = l.pointAt(t, e, n, r, a),\n          h = l.pointAt(n, r, i, o, a);\n        return [\n          [t, e, u.x, u.y, s, c],\n          [s, c, h.x, h.y, i, o],\n        ];\n      }\n      var y = {\n        box: function (t, e, n, r, i, o) {\n          var a = p(t, n, i)[0],\n            c = p(e, r, o)[0],\n            u = [t, i],\n            h = [e, o];\n          return (\n            void 0 !== a && u.push(d(t, n, i, a)),\n            void 0 !== c && h.push(d(e, r, o, c)),\n            s(u, h)\n          );\n        },\n        length: function (t, e, n, r, i, a) {\n          return (function t(e, n, r, i, a, s, c) {\n            if (0 === c)\n              return (o(e, n, r, i) + o(r, i, a, s) + o(e, n, a, s)) / 2;\n            var u = v(e, n, r, i, a, s, 0.5),\n              h = u[0],\n              l = u[1];\n            return (\n              h.push(c - 1), l.push(c - 1), t.apply(null, h) + t.apply(null, l)\n            );\n          })(t, e, n, r, i, a, 3);\n        },\n        nearestPoint: function (t, e, n, r, i, o, a, s) {\n          return f([t, n, i], [e, r, o], a, s, d);\n        },\n        pointDistance: function (t, e, n, r, i, a, s, c) {\n          var u = this.nearestPoint(t, e, n, r, i, a, s, c);\n          return o(u.x, u.y, s, c);\n        },\n        interpolationAt: d,\n        pointAt: function (t, e, n, r, i, o, a) {\n          return { x: d(t, n, i, a), y: d(e, r, o, a) };\n        },\n        divide: function (t, e, n, r, i, o, a) {\n          return v(t, e, n, r, i, o, a);\n        },\n        tangentAngle: function (t, e, n, r, i, o, a) {\n          var s = g(t, n, i, a),\n            c = g(e, r, o, a);\n          return u(Math.atan2(c, s));\n        },\n      };\n      function m(t, e, n, r, i) {\n        var o = 1 - i;\n        return (\n          o * o * o * t + 3 * e * i * o * o + 3 * n * i * i * o + r * i * i * i\n        );\n      }\n      function b(t, e, n, r, i) {\n        var o = 1 - i;\n        return 3 * (o * o * (e - t) + 2 * o * i * (n - e) + i * i * (r - n));\n      }\n      function x(t, e, n, r) {\n        var i,\n          o,\n          s,\n          c = -3 * t + 9 * e - 9 * n + 3 * r,\n          u = 6 * t - 12 * e + 6 * n,\n          h = 3 * e - 3 * t,\n          l = [];\n        if (a(c, 0)) a(u, 0) || ((i = -h / u) >= 0 && i <= 1 && l.push(i));\n        else {\n          var f = u * u - 4 * c * h;\n          a(f, 0)\n            ? l.push(-u / (2 * c))\n            : f > 0 &&\n              ((o = (-u - (s = Math.sqrt(f))) / (2 * c)),\n              (i = (-u + s) / (2 * c)) >= 0 && i <= 1 && l.push(i),\n              o >= 0 && o <= 1 && l.push(o));\n        }\n        return l;\n      }\n      function S(t, e, n, r, i, o, a, s, c) {\n        var u = m(t, n, i, a, c),\n          h = m(e, r, o, s, c),\n          f = l.pointAt(t, e, n, r, c),\n          d = l.pointAt(n, r, i, o, c),\n          p = l.pointAt(i, o, a, s, c),\n          g = l.pointAt(f.x, f.y, d.x, d.y, c),\n          v = l.pointAt(d.x, d.y, p.x, p.y, c);\n        return [\n          [t, e, f.x, f.y, g.x, g.y, u, h],\n          [u, h, v.x, v.y, p.x, p.y, a, s],\n        ];\n      }\n      function w(t, e, n, r, i, a, s, c, u) {\n        if (0 === u)\n          return (function (t, e) {\n            for (var n = 0, r = t.length, i = 0; i < r; i++) {\n              n += o(t[i], e[i], t[(i + 1) % r], e[(i + 1) % r]);\n            }\n            return n / 2;\n          })([t, n, i, s], [e, r, a, c]);\n        var h = S(t, e, n, r, i, a, s, c, 0.5),\n          l = h[0],\n          f = h[1];\n        return (\n          l.push(u - 1), f.push(u - 1), w.apply(null, l) + w.apply(null, f)\n        );\n      }\n      var O = {\n        extrema: x,\n        box: function (t, e, n, r, i, o, a, c) {\n          for (\n            var u = [t, a],\n              h = [e, c],\n              l = x(t, n, i, a),\n              f = x(e, r, o, c),\n              d = 0;\n            d < l.length;\n            d++\n          )\n            u.push(m(t, n, i, a, l[d]));\n          for (d = 0; d < f.length; d++) h.push(m(e, r, o, c, f[d]));\n          return s(u, h);\n        },\n        length: function (t, e, n, r, i, o, a, s) {\n          return w(t, e, n, r, i, o, a, s, 3);\n        },\n        nearestPoint: function (t, e, n, r, i, o, a, s, c, u, h) {\n          return f([t, n, i, a], [e, r, o, s], c, u, m, h);\n        },\n        pointDistance: function (t, e, n, r, i, a, s, c, u, h, l) {\n          var f = this.nearestPoint(t, e, n, r, i, a, s, c, u, h, l);\n          return o(f.x, f.y, u, h);\n        },\n        interpolationAt: m,\n        pointAt: function (t, e, n, r, i, o, a, s, c) {\n          return { x: m(t, n, i, a, c), y: m(e, r, o, s, c) };\n        },\n        divide: function (t, e, n, r, i, o, a, s, c) {\n          return S(t, e, n, r, i, o, a, s, c);\n        },\n        tangentAngle: function (t, e, n, r, i, o, a, s, c) {\n          var h = b(t, n, i, a, c),\n            l = b(e, r, o, s, c);\n          return u(Math.atan2(l, h));\n        },\n      };\n      function M(t, e) {\n        var n = Math.abs(t);\n        return e > 0 ? n : -1 * n;\n      }\n      var k = function (t, e, n, r, i, o) {\n        var a = n,\n          s = r;\n        if (0 === a || 0 === s) return { x: t, y: e };\n        for (\n          var c,\n            u,\n            h = i - t,\n            l = o - e,\n            f = Math.abs(h),\n            d = Math.abs(l),\n            p = a * a,\n            g = s * s,\n            v = Math.PI / 4,\n            y = 0;\n          y < 4;\n          y++\n        ) {\n          (c = a * Math.cos(v)), (u = s * Math.sin(v));\n          var m = ((p - g) * Math.pow(Math.cos(v), 3)) / a,\n            b = ((g - p) * Math.pow(Math.sin(v), 3)) / s,\n            x = c - m,\n            S = u - b,\n            w = f - m,\n            O = d - b,\n            k = Math.hypot(S, x),\n            j = Math.hypot(O, w);\n          (v +=\n            (k * Math.asin((x * O - S * w) / (k * j))) /\n            Math.sqrt(p + g - c * c - u * u)),\n            (v = Math.min(Math.PI / 2, Math.max(0, v)));\n        }\n        return { x: t + M(c, h), y: e + M(u, l) };\n      };\n      function j(t, e, n, r, i, o) {\n        return (\n          n * Math.cos(i) * Math.cos(o) - r * Math.sin(i) * Math.sin(o) + t\n        );\n      }\n      function C(t, e, n, r, i, o) {\n        return (\n          n * Math.sin(i) * Math.cos(o) + r * Math.cos(i) * Math.sin(o) + e\n        );\n      }\n      function E(t, e, n) {\n        return { x: t * Math.cos(n), y: e * Math.sin(n) };\n      }\n      function P(t, e, n) {\n        var r = Math.cos(n),\n          i = Math.sin(n);\n        return [t * r - e * i, t * i + e * r];\n      }\n      var A = {\n        box: function (t, e, n, r, i, o, a) {\n          for (\n            var s = (function (t, e, n) {\n                return Math.atan((-e / t) * Math.tan(n));\n              })(n, r, i),\n              c = 1 / 0,\n              u = -1 / 0,\n              h = [o, a],\n              l = 2 * -Math.PI;\n            l <= 2 * Math.PI;\n            l += Math.PI\n          ) {\n            var f = s + l;\n            o < a ? o < f && f < a && h.push(f) : a < f && f < o && h.push(f);\n          }\n          for (l = 0; l < h.length; l++) {\n            var d = j(t, 0, n, r, i, h[l]);\n            d < c && (c = d), d > u && (u = d);\n          }\n          var p = (function (t, e, n) {\n              return Math.atan(e / (t * Math.tan(n)));\n            })(n, r, i),\n            g = 1 / 0,\n            v = -1 / 0,\n            y = [o, a];\n          for (l = 2 * -Math.PI; l <= 2 * Math.PI; l += Math.PI) {\n            var m = p + l;\n            o < a ? o < m && m < a && y.push(m) : a < m && m < o && y.push(m);\n          }\n          for (l = 0; l < y.length; l++) {\n            var b = C(0, e, n, r, i, y[l]);\n            b < g && (g = b), b > v && (v = b);\n          }\n          return { x: c, y: g, width: u - c, height: v - g };\n        },\n        length: function (t, e, n, r, i, o, a) {},\n        nearestPoint: function (t, e, n, r, i, o, a, s, c) {\n          var u = P(s - t, c - e, -i),\n            h = u[0],\n            l = u[1],\n            f = k(0, 0, n, r, h, l),\n            d = (function (t, e, n, r) {\n              return (Math.atan2(r * t, n * e) + 2 * Math.PI) % (2 * Math.PI);\n            })(n, r, f.x, f.y);\n          d < o ? (f = E(n, r, o)) : d > a && (f = E(n, r, a));\n          var p = P(f.x, f.y, i);\n          return { x: p[0] + t, y: p[1] + e };\n        },\n        pointDistance: function (t, e, n, r, i, a, s, c, u) {\n          var h = this.nearestPoint(t, e, n, r, c, u);\n          return o(h.x, h.y, c, u);\n        },\n        pointAt: function (t, e, n, r, i, o, a, s) {\n          var c = (a - o) * s + o;\n          return { x: j(t, 0, n, r, i, c), y: C(0, e, n, r, i, c) };\n        },\n        tangentAngle: function (t, e, n, r, i, o, a, s) {\n          var c = (a - o) * s + o,\n            h = (function (t, e, n, r, i, o, a, s) {\n              return (\n                -1 * n * Math.cos(i) * Math.sin(s) -\n                r * Math.sin(i) * Math.cos(s)\n              );\n            })(0, 0, n, r, i, 0, 0, c),\n            l = (function (t, e, n, r, i, o, a, s) {\n              return (\n                -1 * n * Math.sin(i) * Math.sin(s) +\n                r * Math.cos(i) * Math.cos(s)\n              );\n            })(0, 0, n, r, i, 0, 0, c);\n          return u(Math.atan2(l, h));\n        },\n      };\n      function I(t) {\n        for (var e = 0, n = [], r = 0; r < t.length - 1; r++) {\n          var i = t[r],\n            a = t[r + 1],\n            s = o(i[0], i[1], a[0], a[1]),\n            c = { from: i, to: a, length: s };\n          n.push(c), (e += s);\n        }\n        return { segments: n, totalLength: e };\n      }\n      function T(t) {\n        if (t.length < 2) return 0;\n        for (var e = 0, n = 0; n < t.length - 1; n++) {\n          var r = t[n],\n            i = t[n + 1];\n          e += o(r[0], r[1], i[0], i[1]);\n        }\n        return e;\n      }\n      function N(t, e) {\n        if (e > 1 || e < 0 || t.length < 2) return null;\n        var n = I(t),\n          r = n.segments,\n          i = n.totalLength;\n        if (0 === i) return { x: t[0][0], y: t[0][1] };\n        for (var o = 0, a = null, s = 0; s < r.length; s++) {\n          var c = r[s],\n            u = c.from,\n            h = c.to,\n            f = c.length / i;\n          if (e >= o && e <= o + f) {\n            var d = (e - o) / f;\n            a = l.pointAt(u[0], u[1], h[0], h[1], d);\n            break;\n          }\n          o += f;\n        }\n        return a;\n      }\n      function B(t, e) {\n        if (e > 1 || e < 0 || t.length < 2) return 0;\n        for (\n          var n = I(t), r = n.segments, i = n.totalLength, o = 0, a = 0, s = 0;\n          s < r.length;\n          s++\n        ) {\n          var c = r[s],\n            u = c.from,\n            h = c.to,\n            l = c.length / i;\n          if (e >= o && e <= o + l) {\n            a = Math.atan2(h[1] - u[1], h[0] - u[0]);\n            break;\n          }\n          o += l;\n        }\n        return a;\n      }\n      function L(t, e, n) {\n        for (var r = 1 / 0, i = 0; i < t.length - 1; i++) {\n          var o = t[i],\n            a = t[i + 1],\n            s = l.pointDistance(o[0], o[1], a[0], a[1], e, n);\n          s < r && (r = s);\n        }\n        return r;\n      }\n      var D = {\n        box: function (t) {\n          for (var e = [], n = [], r = 0; r < t.length; r++) {\n            var i = t[r];\n            e.push(i[0]), n.push(i[1]);\n          }\n          return s(e, n);\n        },\n        length: function (t) {\n          return T(t);\n        },\n        pointAt: function (t, e) {\n          return N(t, e);\n        },\n        pointDistance: function (t, e, n) {\n          return L(t, e, n);\n        },\n        tangentAngle: function (t, e) {\n          return B(t, e);\n        },\n      };\n    },\n    90: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return R;\n      });\n      var r = {};\n      function i(t) {\n        return +t;\n      }\n      function o(t) {\n        return t * t;\n      }\n      function a(t) {\n        return t * (2 - t);\n      }\n      function s(t) {\n        return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n      }\n      function c(t) {\n        return t * t * t;\n      }\n      function u(t) {\n        return --t * t * t + 1;\n      }\n      function h(t) {\n        return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n      }\n      n.r(r),\n        n.d(r, \"easeLinear\", function () {\n          return i;\n        }),\n        n.d(r, \"easeQuad\", function () {\n          return s;\n        }),\n        n.d(r, \"easeQuadIn\", function () {\n          return o;\n        }),\n        n.d(r, \"easeQuadOut\", function () {\n          return a;\n        }),\n        n.d(r, \"easeQuadInOut\", function () {\n          return s;\n        }),\n        n.d(r, \"easeCubic\", function () {\n          return h;\n        }),\n        n.d(r, \"easeCubicIn\", function () {\n          return c;\n        }),\n        n.d(r, \"easeCubicOut\", function () {\n          return u;\n        }),\n        n.d(r, \"easeCubicInOut\", function () {\n          return h;\n        }),\n        n.d(r, \"easePoly\", function () {\n          return d;\n        }),\n        n.d(r, \"easePolyIn\", function () {\n          return l;\n        }),\n        n.d(r, \"easePolyOut\", function () {\n          return f;\n        }),\n        n.d(r, \"easePolyInOut\", function () {\n          return d;\n        }),\n        n.d(r, \"easeSin\", function () {\n          return m;\n        }),\n        n.d(r, \"easeSinIn\", function () {\n          return v;\n        }),\n        n.d(r, \"easeSinOut\", function () {\n          return y;\n        }),\n        n.d(r, \"easeSinInOut\", function () {\n          return m;\n        }),\n        n.d(r, \"easeExp\", function () {\n          return w;\n        }),\n        n.d(r, \"easeExpIn\", function () {\n          return x;\n        }),\n        n.d(r, \"easeExpOut\", function () {\n          return S;\n        }),\n        n.d(r, \"easeExpInOut\", function () {\n          return w;\n        }),\n        n.d(r, \"easeCircle\", function () {\n          return k;\n        }),\n        n.d(r, \"easeCircleIn\", function () {\n          return O;\n        }),\n        n.d(r, \"easeCircleOut\", function () {\n          return M;\n        }),\n        n.d(r, \"easeCircleInOut\", function () {\n          return k;\n        }),\n        n.d(r, \"easeBounce\", function () {\n          return E;\n        }),\n        n.d(r, \"easeBounceIn\", function () {\n          return C;\n        }),\n        n.d(r, \"easeBounceOut\", function () {\n          return E;\n        }),\n        n.d(r, \"easeBounceInOut\", function () {\n          return P;\n        }),\n        n.d(r, \"easeBack\", function () {\n          return T;\n        }),\n        n.d(r, \"easeBackIn\", function () {\n          return A;\n        }),\n        n.d(r, \"easeBackOut\", function () {\n          return I;\n        }),\n        n.d(r, \"easeBackInOut\", function () {\n          return T;\n        }),\n        n.d(r, \"easeElastic\", function () {\n          return L;\n        }),\n        n.d(r, \"easeElasticIn\", function () {\n          return B;\n        }),\n        n.d(r, \"easeElasticOut\", function () {\n          return L;\n        }),\n        n.d(r, \"easeElasticInOut\", function () {\n          return D;\n        });\n      var l = (function t(e) {\n          function n(t) {\n            return Math.pow(t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        f = (function t(e) {\n          function n(t) {\n            return 1 - Math.pow(1 - t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        d = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2\n            );\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        p = Math.PI,\n        g = p / 2;\n      function v(t) {\n        return 1 == +t ? 1 : 1 - Math.cos(t * g);\n      }\n      function y(t) {\n        return Math.sin(t * g);\n      }\n      function m(t) {\n        return (1 - Math.cos(p * t)) / 2;\n      }\n      function b(t) {\n        return 1.0009775171065494 * (Math.pow(2, -10 * t) - 0.0009765625);\n      }\n      function x(t) {\n        return b(1 - +t);\n      }\n      function S(t) {\n        return 1 - b(t);\n      }\n      function w(t) {\n        return ((t *= 2) <= 1 ? b(1 - t) : 2 - b(t - 1)) / 2;\n      }\n      function O(t) {\n        return 1 - Math.sqrt(1 - t * t);\n      }\n      function M(t) {\n        return Math.sqrt(1 - --t * t);\n      }\n      function k(t) {\n        return (\n          ((t *= 2) <= 1\n            ? 1 - Math.sqrt(1 - t * t)\n            : Math.sqrt(1 - (t -= 2) * t) + 1) / 2\n        );\n      }\n      var j = 7.5625;\n      function C(t) {\n        return 1 - E(1 - t);\n      }\n      function E(t) {\n        return (t = +t) < 4 / 11\n          ? j * t * t\n          : t < 8 / 11\n          ? j * (t -= 6 / 11) * t + 3 / 4\n          : t < 10 / 11\n          ? j * (t -= 9 / 11) * t + 15 / 16\n          : j * (t -= 21 / 22) * t + 63 / 64;\n      }\n      function P(t) {\n        return ((t *= 2) <= 1 ? 1 - E(1 - t) : E(t - 1) + 1) / 2;\n      }\n      var A = (function t(e) {\n          function n(t) {\n            return (t = +t) * t * (e * (t - 1) + t);\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        I = (function t(e) {\n          function n(t) {\n            return --t * t * ((t + 1) * e + t) + 1;\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        T = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) < 1\n                ? t * t * ((e + 1) * t - e)\n                : (t -= 2) * t * ((e + 1) * t + e) + 2) / 2\n            );\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        N = 2 * Math.PI,\n        B = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= N);\n          function i(t) {\n            return e * b(-(--t)) * Math.sin((r - t) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * N);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        L = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= N);\n          function i(t) {\n            return 1 - e * b((t = +t)) * Math.sin((t + r) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * N);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        D = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= N);\n          function i(t) {\n            return (\n              ((t = 2 * t - 1) < 0\n                ? e * b(-t) * Math.sin((r - t) / n)\n                : 2 - e * b(t) * Math.sin((r + t) / n)) / 2\n            );\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * N);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        _ = {};\n      function R(t) {\n        return _[t.toLowerCase()] || r[t];\n      }\n    },\n    91: function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t() {\n          this._events = {};\n        }\n        return (\n          (t.prototype.on = function (t, e, n) {\n            return (\n              this._events[t] || (this._events[t] = []),\n              this._events[t].push({ callback: e, once: !!n }),\n              this\n            );\n          }),\n          (t.prototype.once = function (t, e) {\n            return this.on(t, e, !0);\n          }),\n          (t.prototype.emit = function (t) {\n            for (var e = this, n = [], r = 1; r < arguments.length; r++)\n              n[r - 1] = arguments[r];\n            var i = this._events[t] || [],\n              o = this._events[\"*\"] || [],\n              a = function (r) {\n                for (var i = r.length, o = 0; o < i; o++)\n                  if (r[o]) {\n                    var a = r[o],\n                      s = a.callback;\n                    a.once &&\n                      (r.splice(o, 1),\n                      0 === r.length && delete e._events[t],\n                      i--,\n                      o--),\n                      s.apply(e, n);\n                  }\n              };\n            a(i), a(o);\n          }),\n          (t.prototype.off = function (t, e) {\n            if (t)\n              if (e) {\n                for (\n                  var n = this._events[t] || [], r = n.length, i = 0;\n                  i < r;\n                  i++\n                )\n                  n[i].callback === e && (n.splice(i, 1), r--, i--);\n                0 === n.length && delete this._events[t];\n              } else delete this._events[t];\n            else this._events = {};\n            return this;\n          }),\n          (t.prototype.getEvents = function () {\n            return this._events;\n          }),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    92: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(93),\n        a = n(6),\n        s = {};\n      var c = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.isCanvas = function () {\n            return !1;\n          }),\n          (e.prototype.getBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              o = [],\n              s = [],\n              c = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              c.length > 0\n                ? (Object(a.a)(c, function (t) {\n                    var e = t.getBBox();\n                    o.push(e.minX, e.maxX), s.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(i.min)(o)),\n                  (e = Object(i.max)(o)),\n                  (n = Object(i.min)(s)),\n                  (r = Object(i.max)(s)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getCanvasBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              o = [],\n              s = [],\n              c = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              c.length > 0\n                ? (Object(a.a)(c, function (t) {\n                    var e = t.getCanvasBBox();\n                    o.push(e.minX, e.maxX), s.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(i.min)(o)),\n                  (e = Object(i.max)(o)),\n                  (n = Object(i.min)(s)),\n                  (r = Object(i.max)(s)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getDefaultCfg = function () {\n            var e = t.prototype.getDefaultCfg.call(this);\n            return (e.children = []), e;\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            if (\n              (t.prototype.onAttrChange.call(this, e, n, r), \"matrix\" === e)\n            ) {\n              var i = this.getTotalMatrix();\n              this._applyChildrenMarix(i);\n            }\n          }),\n          (e.prototype.applyMatrix = function (e) {\n            var n = this.getTotalMatrix();\n            t.prototype.applyMatrix.call(this, e);\n            var r = this.getTotalMatrix();\n            r !== n && this._applyChildrenMarix(r);\n          }),\n          (e.prototype._applyChildrenMarix = function (t) {\n            var e = this.getChildren();\n            Object(a.a)(e, function (e) {\n              e.applyMatrix(t);\n            });\n          }),\n          (e.prototype.addShape = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n = t[0],\n              r = t[1];\n            Object(a.f)(n) ? (r = n) : (r.type = n);\n            var i = s[r.type];\n            i || ((i = Object(a.k)(r.type)), (s[r.type] = i));\n            var o = this.getShapeBase(),\n              c = new o[i](r);\n            return this.add(c), c;\n          }),\n          (e.prototype.addGroup = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n,\n              r = t[0],\n              i = t[1];\n            if (Object(a.d)(r)) n = new r(i || { parent: this });\n            else {\n              var o = r || {},\n                s = this.getGroupBase();\n              n = new s(o);\n            }\n            return this.add(n), n;\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.isCanvas() ? this : this.get(\"canvas\");\n          }),\n          (e.prototype.getShape = function (t, e, n) {\n            if (!Object(a.b)(this)) return null;\n            var r,\n              i = this.getChildren();\n            if (this.isCanvas()) r = this._findShape(i, t, e, n);\n            else {\n              var o = [t, e, 1];\n              (o = this.invertFromMatrix(o)),\n                this.isClipped(o[0], o[1]) ||\n                  (r = this._findShape(i, o[0], o[1], n));\n            }\n            return r;\n          }),\n          (e.prototype._findShape = function (t, e, n, r) {\n            for (var i = null, o = t.length - 1; o >= 0; o--) {\n              var s = t[o];\n              if (\n                (Object(a.b)(s) &&\n                  (s.isGroup()\n                    ? (i = s.getShape(e, n, r))\n                    : s.isHit(e, n) && (i = s)),\n                i)\n              )\n                break;\n            }\n            return i;\n          }),\n          (e.prototype.add = function (t) {\n            var e = this.getCanvas(),\n              n = this.getChildren(),\n              r = this.get(\"timeline\"),\n              i = t.getParent();\n            i &&\n              (function (t, e, n) {\n                void 0 === n && (n = !0),\n                  n\n                    ? e.destroy()\n                    : (e.set(\"parent\", null), e.set(\"canvas\", null)),\n                  Object(a.j)(t.getChildren(), e);\n              })(i, t, !1),\n              t.set(\"parent\", this),\n              e &&\n                (function t(e, n) {\n                  if ((e.set(\"canvas\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, e),\n              r &&\n                (function t(e, n) {\n                  if ((e.set(\"timeline\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, r),\n              n.push(t),\n              t.onCanvasChange(\"add\"),\n              this._applyElementMatrix(t);\n          }),\n          (e.prototype._applyElementMatrix = function (t) {\n            var e = this.getTotalMatrix();\n            e && t.applyMatrix(e);\n          }),\n          (e.prototype.getChildren = function () {\n            return this.get(\"children\");\n          }),\n          (e.prototype.sort = function () {\n            var t,\n              e = this.getChildren();\n            Object(a.a)(e, function (t, e) {\n              return (t._INDEX = e), t;\n            }),\n              e.sort(\n                ((t = function (t, e) {\n                  return t.get(\"zIndex\") - e.get(\"zIndex\");\n                }),\n                function (e, n) {\n                  var r = t(e, n);\n                  return 0 === r ? e._INDEX - n._INDEX : r;\n                }),\n              ),\n              this.onCanvasChange(\"sort\");\n          }),\n          (e.prototype.clear = function () {\n            if ((this.set(\"clearing\", !0), !this.destroyed)) {\n              for (var t = this.getChildren(), e = t.length - 1; e >= 0; e--)\n                t[e].destroy();\n              this.set(\"children\", []),\n                this.onCanvasChange(\"clear\"),\n                this.set(\"clearing\", !1);\n            }\n          }),\n          (e.prototype.destroy = function () {\n            this.get(\"destroyed\") ||\n              (this.clear(), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.getFirst = function () {\n            return this.getChildByIndex(0);\n          }),\n          (e.prototype.getLast = function () {\n            var t = this.getChildren();\n            return this.getChildByIndex(t.length - 1);\n          }),\n          (e.prototype.getChildByIndex = function (t) {\n            return this.getChildren()[t];\n          }),\n          (e.prototype.getCount = function () {\n            return this.getChildren().length;\n          }),\n          (e.prototype.contain = function (t) {\n            return this.getChildren().indexOf(t) > -1;\n          }),\n          (e.prototype.removeChild = function (t, e) {\n            void 0 === e && (e = !0), this.contain(t) && t.remove(e);\n          }),\n          (e.prototype.findAll = function (t) {\n            var e = [],\n              n = this.getChildren();\n            return (\n              Object(a.a)(n, function (n) {\n                t(n) && e.push(n), n.isGroup() && (e = e.concat(n.findAll(t)));\n              }),\n              e\n            );\n          }),\n          (e.prototype.find = function (t) {\n            var e = null,\n              n = this.getChildren();\n            return (\n              Object(a.a)(n, function (n) {\n                if ((t(n) ? (e = n) : n.isGroup() && (e = n.find(t)), e))\n                  return !1;\n              }),\n              e\n            );\n          }),\n          (e.prototype.findById = function (t) {\n            return this.find(function (e) {\n              return e.get(\"id\") === t;\n            });\n          }),\n          (e.prototype.findByClassName = function (t) {\n            return this.find(function (e) {\n              return e.get(\"className\") === t;\n            });\n          }),\n          (e.prototype.findAllByName = function (t) {\n            return this.findAll(function (e) {\n              return e.get(\"name\") === t;\n            });\n          }),\n          e\n        );\n      })(o.a);\n      e.a = c;\n    },\n    93: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(4),\n        a = n(6),\n        s = n(25),\n        c = n(87),\n        u = o.a.transform,\n        h = [\"zIndex\", \"capture\", \"visible\", \"type\"],\n        l = [\"repeat\"];\n      function f(t, e) {\n        var n = {},\n          r = e.attrs;\n        for (var i in t) n[i] = r[i];\n        return n;\n      }\n      function d(t, e) {\n        var n = {},\n          r = e.attr();\n        return (\n          Object(i.each)(t, function (t, e) {\n            -1 !== l.indexOf(e) || Object(i.isEqual)(r[e], t) || (n[e] = t);\n          }),\n          n\n        );\n      }\n      function p(t, e) {\n        if (e.onFrame) return t;\n        var n = e.startTime,\n          r = e.delay,\n          o = e.duration,\n          a = Object.prototype.hasOwnProperty;\n        return (\n          Object(i.each)(t, function (t) {\n            n + r < t.startTime + t.delay + t.duration &&\n              o > t.delay &&\n              Object(i.each)(e.toAttrs, function (e, n) {\n                a.call(t.toAttrs, n) &&\n                  (delete t.toAttrs[n], delete t.fromAttrs[n]);\n              });\n          }),\n          t\n        );\n      }\n      var g = (function (t) {\n        function e(e) {\n          var n = t.call(this, e) || this;\n          n.attrs = {};\n          var r = n.getDefaultAttrs();\n          return (\n            Object(i.mix)(r, e.attrs),\n            (n.attrs = r),\n            n.initAttrs(r),\n            n.initAnimate(),\n            n\n          );\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { visible: !0, capture: !0, zIndex: 0 };\n          }),\n          (e.prototype.getDefaultAttrs = function () {\n            return { matrix: this.getDefaultMatrix(), opacity: 1 };\n          }),\n          (e.prototype.onCanvasChange = function (t) {}),\n          (e.prototype.initAttrs = function (t) {}),\n          (e.prototype.initAnimate = function () {\n            this.set(\"animable\", !0), this.set(\"animating\", !1);\n          }),\n          (e.prototype.isGroup = function () {\n            return !1;\n          }),\n          (e.prototype.getParent = function () {\n            return this.get(\"parent\");\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.get(\"canvas\");\n          }),\n          (e.prototype.attr = function () {\n            for (var t, e = [], n = 0; n < arguments.length; n++)\n              e[n] = arguments[n];\n            var r = e[0],\n              o = e[1];\n            if (!r) return this.attrs;\n            if (Object(i.isObject)(r)) {\n              for (var a in r) this.setAttr(a, r[a]);\n              return this.afterAttrsChange(r), this;\n            }\n            return 2 === e.length\n              ? (this.setAttr(r, o),\n                this.afterAttrsChange((((t = {})[r] = o), t)),\n                this)\n              : this.attrs[r];\n          }),\n          (e.prototype.isClipped = function (t, e) {\n            var n = this.getClip();\n            return n && !n.isHit(t, e);\n          }),\n          (e.prototype.setAttr = function (t, e) {\n            var n = this.attrs[t];\n            n !== e && ((this.attrs[t] = e), this.onAttrChange(t, e, n));\n          }),\n          (e.prototype.onAttrChange = function (t, e, n) {\n            \"matrix\" === t && this.set(\"totalMatrix\", null);\n          }),\n          (e.prototype.afterAttrsChange = function (t) {\n            if (this.cfg.isClipShape) {\n              var e = this.cfg.applyTo;\n              e && e.onCanvasChange(\"clip\");\n            } else this.onCanvasChange(\"attr\");\n          }),\n          (e.prototype.show = function () {\n            return this.set(\"visible\", !0), this.onCanvasChange(\"show\"), this;\n          }),\n          (e.prototype.hide = function () {\n            return this.set(\"visible\", !1), this.onCanvasChange(\"hide\"), this;\n          }),\n          (e.prototype.setZIndex = function (t) {\n            this.set(\"zIndex\", t);\n            var e = this.getParent();\n            return e && e.sort(), this;\n          }),\n          (e.prototype.toFront = function () {\n            var t = this.getParent();\n            if (t) {\n              var e = t.getChildren(),\n                n = (this.get(\"el\"), e.indexOf(this));\n              e.splice(n, 1), e.push(this), this.onCanvasChange(\"zIndex\");\n            }\n          }),\n          (e.prototype.toBack = function () {\n            var t = this.getParent();\n            if (t) {\n              var e = t.getChildren(),\n                n = (this.get(\"el\"), e.indexOf(this));\n              e.splice(n, 1), e.unshift(this), this.onCanvasChange(\"zIndex\");\n            }\n          }),\n          (e.prototype.remove = function (t) {\n            void 0 === t && (t = !0);\n            var e = this.getParent();\n            e\n              ? (Object(a.j)(e.getChildren(), this),\n                e.get(\"clearing\") || this.onCanvasChange(\"remove\"))\n              : this.onCanvasChange(\"remove\"),\n              t && this.destroy();\n          }),\n          (e.prototype.resetMatrix = function () {\n            this.attr(\"matrix\", this.getDefaultMatrix()),\n              this.onCanvasChange(\"matrix\");\n          }),\n          (e.prototype.getMatrix = function () {\n            return this.attr(\"matrix\");\n          }),\n          (e.prototype.setMatrix = function (t) {\n            this.attr(\"matrix\", t), this.onCanvasChange(\"matrix\");\n          }),\n          (e.prototype.getTotalMatrix = function () {\n            var t = this.cfg.totalMatrix;\n            if (!t) {\n              var e = this.attr(\"matrix\"),\n                n = this.cfg.parentMatrix;\n              (t = n && e ? Object(s.b)(n, e) : e || n),\n                this.set(\"totalMatrix\", t);\n            }\n            return t;\n          }),\n          (e.prototype.applyMatrix = function (t) {\n            var e = this.attr(\"matrix\"),\n              n = null;\n            (n = t && e ? Object(s.b)(t, e) : e || t),\n              this.set(\"totalMatrix\", n),\n              this.set(\"parentMatrix\", t);\n          }),\n          (e.prototype.getDefaultMatrix = function () {\n            return null;\n          }),\n          (e.prototype.applyToMatrix = function (t) {\n            var e = this.attr(\"matrix\");\n            return e ? Object(s.c)(e, t) : t;\n          }),\n          (e.prototype.invertFromMatrix = function (t) {\n            var e = this.attr(\"matrix\");\n            if (e) {\n              var n = Object(s.a)(e);\n              if (n) return Object(s.c)(n, t);\n            }\n            return t;\n          }),\n          (e.prototype.setClip = function (t) {\n            var e = this.getCanvas(),\n              n = null;\n            if (t) {\n              var r = this.getShapeBase()[Object(i.upperFirst)(t.type)];\n              r &&\n                (n = new r({\n                  type: t.type,\n                  isClipShape: !0,\n                  applyTo: this,\n                  attrs: t.attrs,\n                  canvas: e,\n                }));\n            }\n            return this.set(\"clipShape\", n), this.onCanvasChange(\"clip\"), n;\n          }),\n          (e.prototype.getClip = function () {\n            var t = this.cfg.clipShape;\n            return t || null;\n          }),\n          (e.prototype.clone = function () {\n            var t = this,\n              e = this.attrs,\n              n = {};\n            Object(i.each)(e, function (t, r) {\n              Object(i.isArray)(e[r])\n                ? (n[r] = (function (t) {\n                    for (var e = [], n = 0; n < t.length; n++)\n                      Object(i.isArray)(t[n])\n                        ? e.push([].concat(t[n]))\n                        : e.push(t[n]);\n                    return e;\n                  })(e[r]))\n                : (n[r] = e[r]);\n            });\n            var r = new (0, this.constructor)({ attrs: n });\n            return (\n              Object(i.each)(h, function (e) {\n                r.set(e, t.get(e));\n              }),\n              r\n            );\n          }),\n          (e.prototype.destroy = function () {\n            this.destroyed ||\n              ((this.attrs = {}), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.isAnimatePaused = function () {\n            return this.get(\"_pause\").isPaused;\n          }),\n          (e.prototype.animate = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            if (this.get(\"timeline\") || this.get(\"canvas\")) {\n              this.set(\"animating\", !0);\n              var n = this.get(\"timeline\");\n              n ||\n                ((n = this.get(\"canvas\").get(\"timeline\")),\n                this.set(\"timeline\", n));\n              var r = this.get(\"animations\") || [];\n              n.timer || n.initTimer();\n              var o,\n                a,\n                s,\n                c,\n                u,\n                h = t[0],\n                l = t[1],\n                g = t[2],\n                v = void 0 === g ? \"easeLinear\" : g,\n                y = t[3],\n                m = void 0 === y ? i.noop : y,\n                b = t[4],\n                x = void 0 === b ? 0 : b;\n              Object(i.isFunction)(h)\n                ? ((o = h), (h = {}))\n                : Object(i.isObject)(h) &&\n                  h.onFrame &&\n                  ((o = h.onFrame), (a = h.repeat)),\n                Object(i.isObject)(l)\n                  ? ((l = (u = l).duration),\n                    (v = u.easing || \"easeLinear\"),\n                    (x = u.delay || 0),\n                    (a = u.repeat || a || !1),\n                    (m = u.callback || i.noop),\n                    (s = u.pauseCallback || i.noop),\n                    (c = u.resumeCallback || i.noop))\n                  : (Object(i.isNumber)(m) && ((x = m), (m = null)),\n                    Object(i.isFunction)(v)\n                      ? ((m = v), (v = \"easeLinear\"))\n                      : (v = v || \"easeLinear\"));\n              var S = d(h, this),\n                w = {\n                  fromAttrs: f(S, this),\n                  toAttrs: S,\n                  duration: l,\n                  easing: v,\n                  repeat: a,\n                  callback: m,\n                  pauseCallback: s,\n                  resumeCallback: c,\n                  delay: x,\n                  startTime: n.getTime(),\n                  id: Object(i.uniqueId)(),\n                  onFrame: o,\n                  pathFormatted: !1,\n                };\n              r.length > 0 ? (r = p(r, w)) : n.addAnimator(this),\n                r.push(w),\n                this.set(\"animations\", r),\n                this.set(\"_pause\", { isPaused: !1 });\n            }\n          }),\n          (e.prototype.stopAnimate = function (t) {\n            var e = this;\n            void 0 === t && (t = !0);\n            var n = this.get(\"animations\");\n            Object(i.each)(n, function (n) {\n              t && (n.onFrame ? e.attr(n.onFrame(1)) : e.attr(n.toAttrs)),\n                n.callback && n.callback();\n            }),\n              this.set(\"animating\", !1),\n              this.set(\"animations\", []);\n          }),\n          (e.prototype.pauseAnimate = function () {\n            var t = this.get(\"timeline\"),\n              e = this.get(\"animations\"),\n              n = t.getTime();\n            return (\n              Object(i.each)(e, function (t) {\n                (t._paused = !0),\n                  (t._pauseTime = n),\n                  t.pauseCallback && t.pauseCallback();\n              }),\n              this.set(\"_pause\", { isPaused: !0, pauseTime: n }),\n              this\n            );\n          }),\n          (e.prototype.resumeAnimate = function () {\n            var t = this.get(\"timeline\").getTime(),\n              e = this.get(\"animations\"),\n              n = this.get(\"_pause\").pauseTime;\n            return (\n              Object(i.each)(e, function (e) {\n                (e.startTime = e.startTime + (t - n)),\n                  (e._paused = !1),\n                  (e._pauseTime = null),\n                  e.resumeCallback && e.resumeCallback();\n              }),\n              this.set(\"_pause\", { isPaused: !1 }),\n              this.set(\"animations\", e),\n              this\n            );\n          }),\n          (e.prototype.emitDelegation = function (t, e) {\n            var n,\n              r = this,\n              o = e.propagationPath;\n            this.getEvents();\n            \"mouseenter\" === t\n              ? (n = e.fromShape)\n              : \"mouseleave\" === t && (n = e.toShape);\n            for (\n              var s = function (t) {\n                  var s = o[t],\n                    u = s.get(\"name\");\n                  if (u) {\n                    if (\n                      (s.isGroup() || (s.isCanvas && s.isCanvas())) &&\n                      n &&\n                      Object(a.g)(s, n)\n                    )\n                      return \"break\";\n                    Object(i.isArray)(u)\n                      ? Object(i.each)(u, function (t) {\n                          r.emitDelegateEvent(s, t, e);\n                        })\n                      : c.emitDelegateEvent(s, u, e);\n                  }\n                },\n                c = this,\n                u = 0;\n              u < o.length;\n              u++\n            ) {\n              if (\"break\" === s(u)) break;\n            }\n          }),\n          (e.prototype.emitDelegateEvent = function (t, e, n) {\n            var r = this.getEvents(),\n              i = e + \":\" + n.type;\n            (r[i] || r[\"*\"]) &&\n              ((n.name = i),\n              (n.currentTarget = t),\n              (n.delegateTarget = this),\n              (n.delegateObject = t.get(\"delegateObject\")),\n              this.emit(i, n));\n          }),\n          (e.prototype.translate = function (t, e) {\n            void 0 === t && (t = 0), void 0 === e && (e = 0);\n            var n = this.getMatrix(),\n              r = u(n, [[\"t\", t, e]]);\n            return this.setMatrix(r), this;\n          }),\n          (e.prototype.move = function (t, e) {\n            var n = this.attr(\"x\") || 0,\n              r = this.attr(\"y\") || 0;\n            return this.translate(t - n, e - r), this;\n          }),\n          (e.prototype.moveTo = function (t, e) {\n            return this.move(t, e);\n          }),\n          (e.prototype.scale = function (t, e) {\n            var n = this.getMatrix(),\n              r = u(n, [[\"s\", t, e || t]]);\n            return this.setMatrix(r), this;\n          }),\n          (e.prototype.rotate = function (t) {\n            var e = this.getMatrix(),\n              n = u(e, [[\"r\", t]]);\n            return this.setMatrix(n), this;\n          }),\n          (e.prototype.rotateAtStart = function (t) {\n            var e = this.attr(),\n              n = e.x,\n              r = e.y,\n              i = this.getMatrix(),\n              o = u(i, [\n                [\"t\", -n, -r],\n                [\"r\", t],\n                [\"t\", n, r],\n              ]);\n            return this.setMatrix(o), this;\n          }),\n          (e.prototype.rotateAtPoint = function (t, e, n) {\n            var r = this.getMatrix(),\n              i = u(r, [\n                [\"t\", -t, -e],\n                [\"r\", n],\n                [\"t\", t, e],\n              ]);\n            return this.setMatrix(i), this;\n          }),\n          e\n        );\n      })(c.a);\n      e.a = g;\n    },\n    94: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return u;\n      }),\n        n.d(e, \"a\", function () {\n          return h;\n        });\n      var r = n(3),\n        i = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i,\n        o = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i,\n        a = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i,\n        s = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\n      function c(t, e) {\n        var n = t.match(s);\n        Object(r.b)(n, function (t) {\n          var n = t.split(\":\");\n          e.addColorStop(n[0], n[1]);\n        });\n      }\n      function u(t, e, n) {\n        if (Object(r.k)(n)) {\n          if (\"(\" === n[1] || \"(\" === n[2]) {\n            if (\"l\" === n[0])\n              return (function (t, e, n) {\n                var r,\n                  o,\n                  a = i.exec(n),\n                  s = (parseFloat(a[1]) % 360) * (Math.PI / 180),\n                  u = a[2],\n                  h = e.getBBox();\n                s >= 0 && s < 0.5 * Math.PI\n                  ? ((r = { x: h.minX, y: h.minY }),\n                    (o = { x: h.maxX, y: h.maxY }))\n                  : 0.5 * Math.PI <= s && s < Math.PI\n                  ? ((r = { x: h.maxX, y: h.minY }),\n                    (o = { x: h.minX, y: h.maxY }))\n                  : Math.PI <= s && s < 1.5 * Math.PI\n                  ? ((r = { x: h.maxX, y: h.maxY }),\n                    (o = { x: h.minX, y: h.minY }))\n                  : ((r = { x: h.minX, y: h.maxY }),\n                    (o = { x: h.maxX, y: h.minY }));\n                var l = Math.tan(s),\n                  f = l * l,\n                  d = (o.x - r.x + l * (o.y - r.y)) / (f + 1) + r.x,\n                  p = (l * (o.x - r.x + l * (o.y - r.y))) / (f + 1) + r.y,\n                  g = t.createLinearGradient(r.x, r.y, d, p);\n                return c(u, g), g;\n              })(t, e, n);\n            if (\"r\" === n[0])\n              return (function (t, e, n) {\n                var r = o.exec(n),\n                  i = parseFloat(r[1]),\n                  a = parseFloat(r[2]),\n                  u = parseFloat(r[3]),\n                  h = r[4];\n                if (0 === u) {\n                  var l = h.match(s);\n                  return l[l.length - 1].split(\":\")[1];\n                }\n                var f = e.getBBox(),\n                  d = f.maxX - f.minX,\n                  p = f.maxY - f.minY,\n                  g = Math.sqrt(d * d + p * p) / 2,\n                  v = t.createRadialGradient(\n                    f.minX + d * i,\n                    f.minY + p * a,\n                    0,\n                    f.minX + d / 2,\n                    f.minY + p / 2,\n                    u * g,\n                  );\n                return c(h, v), v;\n              })(t, e, n);\n            if (\"p\" === n[0])\n              return (function (t, e, n) {\n                if (e.get(\"patternSource\") && e.get(\"patternSource\") === n)\n                  return e.get(\"pattern\");\n                var r,\n                  i,\n                  o = a.exec(n),\n                  s = o[1],\n                  c = o[2];\n                function u() {\n                  (r = t.createPattern(i, s)),\n                    e.set(\"pattern\", r),\n                    e.set(\"patternSource\", n);\n                }\n                switch (s) {\n                  case \"a\":\n                    s = \"repeat\";\n                    break;\n                  case \"x\":\n                    s = \"repeat-x\";\n                    break;\n                  case \"y\":\n                    s = \"repeat-y\";\n                    break;\n                  case \"n\":\n                    s = \"no-repeat\";\n                    break;\n                  default:\n                    s = \"no-repeat\";\n                }\n                return (\n                  (i = new Image()),\n                  c.match(/^data:/i) || (i.crossOrigin = \"Anonymous\"),\n                  (i.src = c),\n                  i.complete ? u() : ((i.onload = u), (i.src = i.src)),\n                  r\n                );\n              })(t, e, n);\n          }\n          return n;\n        }\n      }\n      function h(t) {\n        var e = 0,\n          n = 0,\n          i = 0,\n          o = 0;\n        return (\n          Object(r.f)(t)\n            ? 1 === t.length\n              ? (e = n = i = o = t[0])\n              : 2 === t.length\n              ? ((e = i = t[0]), (n = o = t[1]))\n              : 3 === t.length\n              ? ((e = t[0]), (n = o = t[1]), (i = t[2]))\n              : ((e = t[0]), (n = t[1]), (i = t[2]), (o = t[3]))\n            : (e = n = i = o = t),\n          [e, n, i, o]\n        );\n      }\n    },\n    95: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"mixColor\", function () {\n          return B;\n        }),\n        n.d(e, \"getColorsWithSubjectColor\", function () {\n          return L;\n        }),\n        n.d(e, \"getColorSetsBySubjectColors\", function () {\n          return D;\n        });\n      var r = n(55),\n        i = n.n(r);\n      function o(t, e) {\n        (function (t) {\n          return (\n            \"string\" == typeof t && -1 !== t.indexOf(\".\") && 1 === parseFloat(t)\n          );\n        })(t) && (t = \"100%\");\n        var n = (function (t) {\n          return \"string\" == typeof t && -1 !== t.indexOf(\"%\");\n        })(t);\n        return (\n          (t = 360 === e ? t : Math.min(e, Math.max(0, parseFloat(t)))),\n          n && (t = parseInt(String(t * e), 10) / 100),\n          Math.abs(t - e) < 1e-6\n            ? 1\n            : (t =\n                360 === e\n                  ? (t < 0 ? (t % e) + e : t % e) / parseFloat(String(e))\n                  : (t % e) / parseFloat(String(e)))\n        );\n      }\n      function a(t) {\n        return Math.min(1, Math.max(0, t));\n      }\n      function s(t) {\n        return (t = parseFloat(t)), (isNaN(t) || t < 0 || t > 1) && (t = 1), t;\n      }\n      function c(t) {\n        return t <= 1 ? \"\".concat(100 * Number(t), \"%\") : t;\n      }\n      function u(t) {\n        return 1 === t.length ? \"0\" + t : String(t);\n      }\n      function h(t, e, n) {\n        (t = o(t, 255)), (e = o(e, 255)), (n = o(n, 255));\n        var r = Math.max(t, e, n),\n          i = Math.min(t, e, n),\n          a = 0,\n          s = 0,\n          c = (r + i) / 2;\n        if (r === i) (s = 0), (a = 0);\n        else {\n          var u = r - i;\n          switch (((s = c > 0.5 ? u / (2 - r - i) : u / (r + i)), r)) {\n            case t:\n              a = (e - n) / u + (e < n ? 6 : 0);\n              break;\n            case e:\n              a = (n - t) / u + 2;\n              break;\n            case n:\n              a = (t - e) / u + 4;\n          }\n          a /= 6;\n        }\n        return { h: a, s: s, l: c };\n      }\n      function l(t, e, n) {\n        return (\n          n < 0 && (n += 1),\n          n > 1 && (n -= 1),\n          n < 1 / 6\n            ? t + 6 * n * (e - t)\n            : n < 0.5\n            ? e\n            : n < 2 / 3\n            ? t + (e - t) * (2 / 3 - n) * 6\n            : t\n        );\n      }\n      function f(t, e, n) {\n        (t = o(t, 255)), (e = o(e, 255)), (n = o(n, 255));\n        var r = Math.max(t, e, n),\n          i = Math.min(t, e, n),\n          a = 0,\n          s = r,\n          c = r - i,\n          u = 0 === r ? 0 : c / r;\n        if (r === i) a = 0;\n        else {\n          switch (r) {\n            case t:\n              a = (e - n) / c + (e < n ? 6 : 0);\n              break;\n            case e:\n              a = (n - t) / c + 2;\n              break;\n            case n:\n              a = (t - e) / c + 4;\n          }\n          a /= 6;\n        }\n        return { h: a, s: u, v: s };\n      }\n      function d(t, e, n, r) {\n        var i = [\n          u(Math.round(t).toString(16)),\n          u(Math.round(e).toString(16)),\n          u(Math.round(n).toString(16)),\n        ];\n        return r &&\n          i[0].startsWith(i[0].charAt(1)) &&\n          i[1].startsWith(i[1].charAt(1)) &&\n          i[2].startsWith(i[2].charAt(1))\n          ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0)\n          : i.join(\"\");\n      }\n      function p(t) {\n        return Math.round(255 * parseFloat(t)).toString(16);\n      }\n      function g(t) {\n        return v(t) / 255;\n      }\n      function v(t) {\n        return parseInt(t, 16);\n      }\n      var y = {\n        aliceblue: \"#f0f8ff\",\n        antiquewhite: \"#faebd7\",\n        aqua: \"#00ffff\",\n        aquamarine: \"#7fffd4\",\n        azure: \"#f0ffff\",\n        beige: \"#f5f5dc\",\n        bisque: \"#ffe4c4\",\n        black: \"#000000\",\n        blanchedalmond: \"#ffebcd\",\n        blue: \"#0000ff\",\n        blueviolet: \"#8a2be2\",\n        brown: \"#a52a2a\",\n        burlywood: \"#deb887\",\n        cadetblue: \"#5f9ea0\",\n        chartreuse: \"#7fff00\",\n        chocolate: \"#d2691e\",\n        coral: \"#ff7f50\",\n        cornflowerblue: \"#6495ed\",\n        cornsilk: \"#fff8dc\",\n        crimson: \"#dc143c\",\n        cyan: \"#00ffff\",\n        darkblue: \"#00008b\",\n        darkcyan: \"#008b8b\",\n        darkgoldenrod: \"#b8860b\",\n        darkgray: \"#a9a9a9\",\n        darkgreen: \"#006400\",\n        darkgrey: \"#a9a9a9\",\n        darkkhaki: \"#bdb76b\",\n        darkmagenta: \"#8b008b\",\n        darkolivegreen: \"#556b2f\",\n        darkorange: \"#ff8c00\",\n        darkorchid: \"#9932cc\",\n        darkred: \"#8b0000\",\n        darksalmon: \"#e9967a\",\n        darkseagreen: \"#8fbc8f\",\n        darkslateblue: \"#483d8b\",\n        darkslategray: \"#2f4f4f\",\n        darkslategrey: \"#2f4f4f\",\n        darkturquoise: \"#00ced1\",\n        darkviolet: \"#9400d3\",\n        deeppink: \"#ff1493\",\n        deepskyblue: \"#00bfff\",\n        dimgray: \"#696969\",\n        dimgrey: \"#696969\",\n        dodgerblue: \"#1e90ff\",\n        firebrick: \"#b22222\",\n        floralwhite: \"#fffaf0\",\n        forestgreen: \"#228b22\",\n        fuchsia: \"#ff00ff\",\n        gainsboro: \"#dcdcdc\",\n        ghostwhite: \"#f8f8ff\",\n        goldenrod: \"#daa520\",\n        gold: \"#ffd700\",\n        gray: \"#808080\",\n        green: \"#008000\",\n        greenyellow: \"#adff2f\",\n        grey: \"#808080\",\n        honeydew: \"#f0fff0\",\n        hotpink: \"#ff69b4\",\n        indianred: \"#cd5c5c\",\n        indigo: \"#4b0082\",\n        ivory: \"#fffff0\",\n        khaki: \"#f0e68c\",\n        lavenderblush: \"#fff0f5\",\n        lavender: \"#e6e6fa\",\n        lawngreen: \"#7cfc00\",\n        lemonchiffon: \"#fffacd\",\n        lightblue: \"#add8e6\",\n        lightcoral: \"#f08080\",\n        lightcyan: \"#e0ffff\",\n        lightgoldenrodyellow: \"#fafad2\",\n        lightgray: \"#d3d3d3\",\n        lightgreen: \"#90ee90\",\n        lightgrey: \"#d3d3d3\",\n        lightpink: \"#ffb6c1\",\n        lightsalmon: \"#ffa07a\",\n        lightseagreen: \"#20b2aa\",\n        lightskyblue: \"#87cefa\",\n        lightslategray: \"#778899\",\n        lightslategrey: \"#778899\",\n        lightsteelblue: \"#b0c4de\",\n        lightyellow: \"#ffffe0\",\n        lime: \"#00ff00\",\n        limegreen: \"#32cd32\",\n        linen: \"#faf0e6\",\n        magenta: \"#ff00ff\",\n        maroon: \"#800000\",\n        mediumaquamarine: \"#66cdaa\",\n        mediumblue: \"#0000cd\",\n        mediumorchid: \"#ba55d3\",\n        mediumpurple: \"#9370db\",\n        mediumseagreen: \"#3cb371\",\n        mediumslateblue: \"#7b68ee\",\n        mediumspringgreen: \"#00fa9a\",\n        mediumturquoise: \"#48d1cc\",\n        mediumvioletred: \"#c71585\",\n        midnightblue: \"#191970\",\n        mintcream: \"#f5fffa\",\n        mistyrose: \"#ffe4e1\",\n        moccasin: \"#ffe4b5\",\n        navajowhite: \"#ffdead\",\n        navy: \"#000080\",\n        oldlace: \"#fdf5e6\",\n        olive: \"#808000\",\n        olivedrab: \"#6b8e23\",\n        orange: \"#ffa500\",\n        orangered: \"#ff4500\",\n        orchid: \"#da70d6\",\n        palegoldenrod: \"#eee8aa\",\n        palegreen: \"#98fb98\",\n        paleturquoise: \"#afeeee\",\n        palevioletred: \"#db7093\",\n        papayawhip: \"#ffefd5\",\n        peachpuff: \"#ffdab9\",\n        peru: \"#cd853f\",\n        pink: \"#ffc0cb\",\n        plum: \"#dda0dd\",\n        powderblue: \"#b0e0e6\",\n        purple: \"#800080\",\n        rebeccapurple: \"#663399\",\n        red: \"#ff0000\",\n        rosybrown: \"#bc8f8f\",\n        royalblue: \"#4169e1\",\n        saddlebrown: \"#8b4513\",\n        salmon: \"#fa8072\",\n        sandybrown: \"#f4a460\",\n        seagreen: \"#2e8b57\",\n        seashell: \"#fff5ee\",\n        sienna: \"#a0522d\",\n        silver: \"#c0c0c0\",\n        skyblue: \"#87ceeb\",\n        slateblue: \"#6a5acd\",\n        slategray: \"#708090\",\n        slategrey: \"#708090\",\n        snow: \"#fffafa\",\n        springgreen: \"#00ff7f\",\n        steelblue: \"#4682b4\",\n        tan: \"#d2b48c\",\n        teal: \"#008080\",\n        thistle: \"#d8bfd8\",\n        tomato: \"#ff6347\",\n        turquoise: \"#40e0d0\",\n        violet: \"#ee82ee\",\n        wheat: \"#f5deb3\",\n        white: \"#ffffff\",\n        whitesmoke: \"#f5f5f5\",\n        yellow: \"#ffff00\",\n        yellowgreen: \"#9acd32\",\n      };\n      function m(t) {\n        return (m =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function b(t) {\n        var e,\n          n,\n          r,\n          i = { r: 0, g: 0, b: 0 },\n          a = 1,\n          u = null,\n          h = null,\n          f = null,\n          d = !1,\n          p = !1;\n        return (\n          \"string\" == typeof t &&\n            (t = (function (t) {\n              if (0 === (t = t.trim().toLowerCase()).length) return !1;\n              var e = !1;\n              if (y[t]) (t = y[t]), (e = !0);\n              else if (\"transparent\" === t)\n                return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n              var n = O.rgb.exec(t);\n              if (n) return { r: n[1], g: n[2], b: n[3] };\n              if ((n = O.rgba.exec(t)))\n                return { r: n[1], g: n[2], b: n[3], a: n[4] };\n              if ((n = O.hsl.exec(t))) return { h: n[1], s: n[2], l: n[3] };\n              if ((n = O.hsla.exec(t)))\n                return { h: n[1], s: n[2], l: n[3], a: n[4] };\n              if ((n = O.hsv.exec(t))) return { h: n[1], s: n[2], v: n[3] };\n              if ((n = O.hsva.exec(t)))\n                return { h: n[1], s: n[2], v: n[3], a: n[4] };\n              if ((n = O.hex8.exec(t)))\n                return {\n                  r: v(n[1]),\n                  g: v(n[2]),\n                  b: v(n[3]),\n                  a: g(n[4]),\n                  format: e ? \"name\" : \"hex8\",\n                };\n              if ((n = O.hex6.exec(t)))\n                return {\n                  r: v(n[1]),\n                  g: v(n[2]),\n                  b: v(n[3]),\n                  format: e ? \"name\" : \"hex\",\n                };\n              if ((n = O.hex4.exec(t)))\n                return {\n                  r: v(n[1] + n[1]),\n                  g: v(n[2] + n[2]),\n                  b: v(n[3] + n[3]),\n                  a: g(n[4] + n[4]),\n                  format: e ? \"name\" : \"hex8\",\n                };\n              if ((n = O.hex3.exec(t)))\n                return {\n                  r: v(n[1] + n[1]),\n                  g: v(n[2] + n[2]),\n                  b: v(n[3] + n[3]),\n                  format: e ? \"name\" : \"hex\",\n                };\n              return !1;\n            })(t)),\n          \"object\" === m(t) &&\n            (M(t.r) && M(t.g) && M(t.b)\n              ? ((e = t.r),\n                (n = t.g),\n                (r = t.b),\n                (i = {\n                  r: 255 * o(e, 255),\n                  g: 255 * o(n, 255),\n                  b: 255 * o(r, 255),\n                }),\n                (d = !0),\n                (p = \"%\" === String(t.r).substr(-1) ? \"prgb\" : \"rgb\"))\n              : M(t.h) && M(t.s) && M(t.v)\n              ? ((u = c(t.s)),\n                (h = c(t.v)),\n                (i = (function (t, e, n) {\n                  (t = 6 * o(t, 360)), (e = o(e, 100)), (n = o(n, 100));\n                  var r = Math.floor(t),\n                    i = t - r,\n                    a = n * (1 - e),\n                    s = n * (1 - i * e),\n                    c = n * (1 - (1 - i) * e),\n                    u = r % 6;\n                  return {\n                    r: 255 * [n, s, a, a, c, n][u],\n                    g: 255 * [c, n, n, s, a, a][u],\n                    b: 255 * [a, a, c, n, n, s][u],\n                  };\n                })(t.h, u, h)),\n                (d = !0),\n                (p = \"hsv\"))\n              : M(t.h) &&\n                M(t.s) &&\n                M(t.l) &&\n                ((u = c(t.s)),\n                (f = c(t.l)),\n                (i = (function (t, e, n) {\n                  var r, i, a;\n                  if (\n                    ((t = o(t, 360)), (e = o(e, 100)), (n = o(n, 100)), 0 === e)\n                  )\n                    (i = n), (a = n), (r = n);\n                  else {\n                    var s = n < 0.5 ? n * (1 + e) : n + e - n * e,\n                      c = 2 * n - s;\n                    (r = l(c, s, t + 1 / 3)),\n                      (i = l(c, s, t)),\n                      (a = l(c, s, t - 1 / 3));\n                  }\n                  return { r: 255 * r, g: 255 * i, b: 255 * a };\n                })(t.h, u, f)),\n                (d = !0),\n                (p = \"hsl\")),\n            Object.prototype.hasOwnProperty.call(t, \"a\") && (a = t.a)),\n          (a = s(a)),\n          {\n            ok: d,\n            format: t.format || p,\n            r: Math.min(255, Math.max(i.r, 0)),\n            g: Math.min(255, Math.max(i.g, 0)),\n            b: Math.min(255, Math.max(i.b, 0)),\n            a: a,\n          }\n        );\n      }\n      var x = \"(?:\"\n          .concat(\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\", \")|(?:\")\n          .concat(\"[-\\\\+]?\\\\d+%?\", \")\"),\n        S = \"[\\\\s|\\\\(]+(\"\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")\\\\s*\\\\)?\"),\n        w = \"[\\\\s|\\\\(]+(\"\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")\\\\s*\\\\)?\"),\n        O = {\n          CSS_UNIT: new RegExp(x),\n          rgb: new RegExp(\"rgb\" + S),\n          rgba: new RegExp(\"rgba\" + w),\n          hsl: new RegExp(\"hsl\" + S),\n          hsla: new RegExp(\"hsla\" + w),\n          hsv: new RegExp(\"hsv\" + S),\n          hsva: new RegExp(\"hsva\" + w),\n          hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n          hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n          hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n          hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n        };\n      function M(t) {\n        return Boolean(O.CSS_UNIT.exec(String(t)));\n      }\n      var k = (function () {\n        function t(e, n) {\n          var r;\n          if (\n            (void 0 === e && (e = \"\"), void 0 === n && (n = {}), e instanceof t)\n          )\n            return e;\n          \"number\" == typeof e &&\n            (e = (function (t) {\n              return { r: t >> 16, g: (65280 & t) >> 8, b: 255 & t };\n            })(e)),\n            (this.originalInput = e);\n          var i = b(e);\n          (this.originalInput = e),\n            (this.r = i.r),\n            (this.g = i.g),\n            (this.b = i.b),\n            (this.a = i.a),\n            (this.roundA = Math.round(100 * this.a) / 100),\n            (this.format =\n              null !== (r = n.format) && void 0 !== r ? r : i.format),\n            (this.gradientType = n.gradientType),\n            this.r < 1 && (this.r = Math.round(this.r)),\n            this.g < 1 && (this.g = Math.round(this.g)),\n            this.b < 1 && (this.b = Math.round(this.b)),\n            (this.isValid = i.ok);\n        }\n        return (\n          (t.prototype.isDark = function () {\n            return this.getBrightness() < 128;\n          }),\n          (t.prototype.isLight = function () {\n            return !this.isDark();\n          }),\n          (t.prototype.getBrightness = function () {\n            var t = this.toRgb();\n            return (299 * t.r + 587 * t.g + 114 * t.b) / 1e3;\n          }),\n          (t.prototype.getLuminance = function () {\n            var t = this.toRgb(),\n              e = t.r / 255,\n              n = t.g / 255,\n              r = t.b / 255;\n            return (\n              0.2126 *\n                (e <= 0.03928\n                  ? e / 12.92\n                  : Math.pow((e + 0.055) / 1.055, 2.4)) +\n              0.7152 *\n                (n <= 0.03928\n                  ? n / 12.92\n                  : Math.pow((n + 0.055) / 1.055, 2.4)) +\n              0.0722 *\n                (r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4))\n            );\n          }),\n          (t.prototype.getAlpha = function () {\n            return this.a;\n          }),\n          (t.prototype.setAlpha = function (t) {\n            return (\n              (this.a = s(t)),\n              (this.roundA = Math.round(100 * this.a) / 100),\n              this\n            );\n          }),\n          (t.prototype.isMonochrome = function () {\n            return 0 === this.toHsl().s;\n          }),\n          (t.prototype.toHsv = function () {\n            var t = f(this.r, this.g, this.b);\n            return { h: 360 * t.h, s: t.s, v: t.v, a: this.a };\n          }),\n          (t.prototype.toHsvString = function () {\n            var t = f(this.r, this.g, this.b),\n              e = Math.round(360 * t.h),\n              n = Math.round(100 * t.s),\n              r = Math.round(100 * t.v);\n            return 1 === this.a\n              ? \"hsv(\".concat(e, \", \").concat(n, \"%, \").concat(r, \"%)\")\n              : \"hsva(\"\n                  .concat(e, \", \")\n                  .concat(n, \"%, \")\n                  .concat(r, \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toHsl = function () {\n            var t = h(this.r, this.g, this.b);\n            return { h: 360 * t.h, s: t.s, l: t.l, a: this.a };\n          }),\n          (t.prototype.toHslString = function () {\n            var t = h(this.r, this.g, this.b),\n              e = Math.round(360 * t.h),\n              n = Math.round(100 * t.s),\n              r = Math.round(100 * t.l);\n            return 1 === this.a\n              ? \"hsl(\".concat(e, \", \").concat(n, \"%, \").concat(r, \"%)\")\n              : \"hsla(\"\n                  .concat(e, \", \")\n                  .concat(n, \"%, \")\n                  .concat(r, \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toHex = function (t) {\n            return void 0 === t && (t = !1), d(this.r, this.g, this.b, t);\n          }),\n          (t.prototype.toHexString = function (t) {\n            return void 0 === t && (t = !1), \"#\" + this.toHex(t);\n          }),\n          (t.prototype.toHex8 = function (t) {\n            return (\n              void 0 === t && (t = !1),\n              (function (t, e, n, r, i) {\n                var o = [\n                  u(Math.round(t).toString(16)),\n                  u(Math.round(e).toString(16)),\n                  u(Math.round(n).toString(16)),\n                  u(p(r)),\n                ];\n                return i &&\n                  o[0].startsWith(o[0].charAt(1)) &&\n                  o[1].startsWith(o[1].charAt(1)) &&\n                  o[2].startsWith(o[2].charAt(1)) &&\n                  o[3].startsWith(o[3].charAt(1))\n                  ? o[0].charAt(0) +\n                      o[1].charAt(0) +\n                      o[2].charAt(0) +\n                      o[3].charAt(0)\n                  : o.join(\"\");\n              })(this.r, this.g, this.b, this.a, t)\n            );\n          }),\n          (t.prototype.toHex8String = function (t) {\n            return void 0 === t && (t = !1), \"#\" + this.toHex8(t);\n          }),\n          (t.prototype.toRgb = function () {\n            return {\n              r: Math.round(this.r),\n              g: Math.round(this.g),\n              b: Math.round(this.b),\n              a: this.a,\n            };\n          }),\n          (t.prototype.toRgbString = function () {\n            var t = Math.round(this.r),\n              e = Math.round(this.g),\n              n = Math.round(this.b);\n            return 1 === this.a\n              ? \"rgb(\".concat(t, \", \").concat(e, \", \").concat(n, \")\")\n              : \"rgba(\"\n                  .concat(t, \", \")\n                  .concat(e, \", \")\n                  .concat(n, \", \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toPercentageRgb = function () {\n            var t = function (t) {\n              return \"\".concat(Math.round(100 * o(t, 255)), \"%\");\n            };\n            return { r: t(this.r), g: t(this.g), b: t(this.b), a: this.a };\n          }),\n          (t.prototype.toPercentageRgbString = function () {\n            var t = function (t) {\n              return Math.round(100 * o(t, 255));\n            };\n            return 1 === this.a\n              ? \"rgb(\"\n                  .concat(t(this.r), \"%, \")\n                  .concat(t(this.g), \"%, \")\n                  .concat(t(this.b), \"%)\")\n              : \"rgba(\"\n                  .concat(t(this.r), \"%, \")\n                  .concat(t(this.g), \"%, \")\n                  .concat(t(this.b), \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toName = function () {\n            if (0 === this.a) return \"transparent\";\n            if (this.a < 1) return !1;\n            for (\n              var t = \"#\" + d(this.r, this.g, this.b, !1),\n                e = 0,\n                n = Object.entries(y);\n              e < n.length;\n              e++\n            ) {\n              var r = n[e],\n                i = r[0];\n              if (t === r[1]) return i;\n            }\n            return !1;\n          }),\n          (t.prototype.toString = function (t) {\n            var e = Boolean(t);\n            t = null != t ? t : this.format;\n            var n = !1,\n              r = this.a < 1 && this.a >= 0;\n            return e || !r || (!t.startsWith(\"hex\") && \"name\" !== t)\n              ? (\"rgb\" === t && (n = this.toRgbString()),\n                \"prgb\" === t && (n = this.toPercentageRgbString()),\n                (\"hex\" !== t && \"hex6\" !== t) || (n = this.toHexString()),\n                \"hex3\" === t && (n = this.toHexString(!0)),\n                \"hex4\" === t && (n = this.toHex8String(!0)),\n                \"hex8\" === t && (n = this.toHex8String()),\n                \"name\" === t && (n = this.toName()),\n                \"hsl\" === t && (n = this.toHslString()),\n                \"hsv\" === t && (n = this.toHsvString()),\n                n || this.toHexString())\n              : \"name\" === t && 0 === this.a\n              ? this.toName()\n              : this.toRgbString();\n          }),\n          (t.prototype.toNumber = function () {\n            return (\n              (Math.round(this.r) << 16) +\n              (Math.round(this.g) << 8) +\n              Math.round(this.b)\n            );\n          }),\n          (t.prototype.clone = function () {\n            return new t(this.toString());\n          }),\n          (t.prototype.lighten = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.l += e / 100), (n.l = a(n.l)), new t(n);\n          }),\n          (t.prototype.brighten = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toRgb();\n            return (\n              (n.r = Math.max(\n                0,\n                Math.min(255, n.r - Math.round((-e / 100) * 255)),\n              )),\n              (n.g = Math.max(\n                0,\n                Math.min(255, n.g - Math.round((-e / 100) * 255)),\n              )),\n              (n.b = Math.max(\n                0,\n                Math.min(255, n.b - Math.round((-e / 100) * 255)),\n              )),\n              new t(n)\n            );\n          }),\n          (t.prototype.darken = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.l -= e / 100), (n.l = a(n.l)), new t(n);\n          }),\n          (t.prototype.tint = function (t) {\n            return void 0 === t && (t = 10), this.mix(\"white\", t);\n          }),\n          (t.prototype.shade = function (t) {\n            return void 0 === t && (t = 10), this.mix(\"black\", t);\n          }),\n          (t.prototype.desaturate = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.s -= e / 100), (n.s = a(n.s)), new t(n);\n          }),\n          (t.prototype.saturate = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.s += e / 100), (n.s = a(n.s)), new t(n);\n          }),\n          (t.prototype.greyscale = function () {\n            return this.desaturate(100);\n          }),\n          (t.prototype.spin = function (e) {\n            var n = this.toHsl(),\n              r = (n.h + e) % 360;\n            return (n.h = r < 0 ? 360 + r : r), new t(n);\n          }),\n          (t.prototype.mix = function (e, n) {\n            void 0 === n && (n = 50);\n            var r = this.toRgb(),\n              i = new t(e).toRgb(),\n              o = n / 100;\n            return new t({\n              r: (i.r - r.r) * o + r.r,\n              g: (i.g - r.g) * o + r.g,\n              b: (i.b - r.b) * o + r.b,\n              a: (i.a - r.a) * o + r.a,\n            });\n          }),\n          (t.prototype.analogous = function (e, n) {\n            void 0 === e && (e = 6), void 0 === n && (n = 30);\n            var r = this.toHsl(),\n              i = 360 / n,\n              o = [this];\n            for (r.h = (r.h - ((i * e) >> 1) + 720) % 360; --e; )\n              (r.h = (r.h + i) % 360), o.push(new t(r));\n            return o;\n          }),\n          (t.prototype.complement = function () {\n            var e = this.toHsl();\n            return (e.h = (e.h + 180) % 360), new t(e);\n          }),\n          (t.prototype.monochromatic = function (e) {\n            void 0 === e && (e = 6);\n            for (\n              var n = this.toHsv(),\n                r = n.h,\n                i = n.s,\n                o = n.v,\n                a = [],\n                s = 1 / e;\n              e--;\n\n            )\n              a.push(new t({ h: r, s: i, v: o })), (o = (o + s) % 1);\n            return a;\n          }),\n          (t.prototype.splitcomplement = function () {\n            var e = this.toHsl(),\n              n = e.h;\n            return [\n              this,\n              new t({ h: (n + 72) % 360, s: e.s, l: e.l }),\n              new t({ h: (n + 216) % 360, s: e.s, l: e.l }),\n            ];\n          }),\n          (t.prototype.onBackground = function (e) {\n            var n = this.toRgb(),\n              r = new t(e).toRgb();\n            return new t({\n              r: r.r + (n.r - r.r) * n.a,\n              g: r.g + (n.g - r.g) * n.a,\n              b: r.b + (n.b - r.b) * n.a,\n            });\n          }),\n          (t.prototype.triad = function () {\n            return this.polyad(3);\n          }),\n          (t.prototype.tetrad = function () {\n            return this.polyad(4);\n          }),\n          (t.prototype.polyad = function (e) {\n            for (\n              var n = this.toHsl(), r = n.h, i = [this], o = 360 / e, a = 1;\n              a < e;\n              a++\n            )\n              i.push(new t({ h: (r + a * o) % 360, s: n.s, l: n.l }));\n            return i;\n          }),\n          (t.prototype.equals = function (e) {\n            return this.toRgbString() === new t(e).toRgbString();\n          }),\n          t\n        );\n      })();\n      var j = [\n        { index: 7, opacity: 0.15 },\n        { index: 6, opacity: 0.25 },\n        { index: 5, opacity: 0.3 },\n        { index: 5, opacity: 0.45 },\n        { index: 5, opacity: 0.65 },\n        { index: 5, opacity: 0.85 },\n        { index: 4, opacity: 0.9 },\n        { index: 3, opacity: 0.95 },\n        { index: 2, opacity: 0.97 },\n        { index: 1, opacity: 0.98 },\n      ];\n      function C(t, e, n) {\n        var r;\n        return (\n          (r =\n            Math.round(t.h) >= 60 && Math.round(t.h) <= 240\n              ? n\n                ? Math.round(t.h) - 2 * e\n                : Math.round(t.h) + 2 * e\n              : n\n              ? Math.round(t.h) + 2 * e\n              : Math.round(t.h) - 2 * e) < 0\n            ? (r += 360)\n            : r >= 360 && (r -= 360),\n          r\n        );\n      }\n      function E(t, e, n) {\n        return 0 === t.h && 0 === t.s\n          ? t.s\n          : ((r = n ? t.s - 0.16 * e : 4 === e ? t.s + 0.16 : t.s + 0.05 * e) >\n              1 && (r = 1),\n            n && 5 === e && r > 0.1 && (r = 0.1),\n            r < 0.06 && (r = 0.06),\n            Number(r.toFixed(2)));\n        var r;\n      }\n      function P(t, e, n) {\n        var r;\n        return (\n          (r = n ? t.v + 0.05 * e : t.v - 0.15 * e) > 1 && (r = 1),\n          Number(r.toFixed(2))\n        );\n      }\n      function A(t) {\n        for (\n          var e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            n = [],\n            r = new k(t),\n            i = 5;\n          i > 0;\n          i -= 1\n        ) {\n          var o = r.toHsv(),\n            a = new k({\n              h: C(o, i, !0),\n              s: E(o, i, !0),\n              v: P(o, i, !0),\n            }).toHexString();\n          n.push(a);\n        }\n        n.push(r.toHexString());\n        for (var s = 1; s <= 4; s += 1) {\n          var c = r.toHsv(),\n            u = new k({ h: C(c, s), s: E(c, s), v: P(c, s) }).toHexString();\n          n.push(u);\n        }\n        return \"dark\" === e.theme\n          ? j.map(function (t) {\n              var r = t.index,\n                i = t.opacity;\n              return new k(e.backgroundColor || \"#141414\")\n                .mix(n[r], 100 * i)\n                .toHexString();\n            })\n          : n;\n      }\n      var I = {\n          red: \"#F5222D\",\n          volcano: \"#FA541C\",\n          orange: \"#FA8C16\",\n          gold: \"#FAAD14\",\n          yellow: \"#FADB14\",\n          lime: \"#A0D911\",\n          green: \"#52C41A\",\n          cyan: \"#13C2C2\",\n          blue: \"#1890FF\",\n          geekblue: \"#2F54EB\",\n          purple: \"#722ED1\",\n          magenta: \"#EB2F96\",\n          grey: \"#666666\",\n        },\n        T = {},\n        N = {};\n      Object.keys(I).forEach(function (t) {\n        (T[t] = A(I[t])),\n          (T[t].primary = T[t][5]),\n          (N[t] = A(I[t], { theme: \"dark\", backgroundColor: \"#141414\" })),\n          (N[t].primary = N[t][5]);\n      });\n      T.red,\n        T.volcano,\n        T.gold,\n        T.orange,\n        T.yellow,\n        T.lime,\n        T.green,\n        T.cyan,\n        T.blue,\n        T.geekblue,\n        T.purple,\n        T.magenta,\n        T.grey;\n      var B = function (t, e, n) {\n          var r = i()(t),\n            o = i()(e);\n          return i()([\n            (1 - n) * r.red() + n * o.red(),\n            (1 - n) * r.green() + n * o.green(),\n            (1 - n) * r.blue() + n * o.blue(),\n          ]).rgb();\n        },\n        L = function (t, e, n, r) {\n          return (\n            void 0 === e && (e = \"#fff\"),\n            void 0 === n && (n = \"default\"),\n            void 0 === r && (r = \"rgb(150, 150, 150)\"),\n            \"default\" === n\n              ? (function (t, e, n) {\n                  void 0 === e && (e = \"#fff\"),\n                    void 0 === n && (n = \"rgb(150, 150, 150)\");\n                  var r = B(e, t, 0.05).rgb().toString(),\n                    o = B(e, t, 0.1).rgb().toString(),\n                    a = B(e, t, 0.2).rgb().toString(),\n                    s = B(e, t, 0.4).rgb().toString(),\n                    c = B(e, n, 0.02).rgb().toString(),\n                    u = B(e, n, 0.05).rgb().toString(),\n                    h = B(e, n, 0.1).rgb().toString(),\n                    l = B(e, n, 0.2).rgb().toString(),\n                    f = B(e, n, 0.3).rgb().toString(),\n                    d = A(t, { theme: \"default\", backgroundColor: e }),\n                    p = i()(t).hex().toLowerCase(),\n                    g = d.indexOf(p),\n                    v = t;\n                  return (\n                    -1 !== g && (v = d[g + 1]),\n                    {\n                      mainStroke: t,\n                      mainFill: o,\n                      activeStroke: t,\n                      activeFill: r,\n                      inactiveStroke: s,\n                      inactiveFill: r,\n                      selectedStroke: t,\n                      selectedFill: e,\n                      highlightStroke: v,\n                      highlightFill: a,\n                      disableStroke: f,\n                      disableFill: u,\n                      edgeMainStroke: f,\n                      edgeActiveStroke: t,\n                      edgeInactiveStroke: l,\n                      edgeSelectedStroke: t,\n                      edgeHighlightStroke: t,\n                      edgeDisableStroke: h,\n                      comboMainStroke: f,\n                      comboMainFill: c,\n                      comboActiveStroke: t,\n                      comboActiveFill: r,\n                      comboInactiveStroke: f,\n                      comboInactiveFill: c,\n                      comboSelectedStroke: t,\n                      comboSelectedFill: c,\n                      comboHighlightStroke: v,\n                      comboHighlightFill: c,\n                      comboDisableStroke: l,\n                      comboDisableFill: u,\n                    }\n                  );\n                })(t, e, \"rgb(150, 150, 150)\")\n              : (function (t, e, n) {\n                  void 0 === e && (e = \"#fff\"), void 0 === n && (n = \"#777\");\n                  var r = B(e, t, 0.2).rgb().toString(),\n                    o = B(e, t, 0.3).rgb().toString(),\n                    a = B(e, t, 0.6).rgb().toString(),\n                    s = B(e, t, 0.8).rgb().toString(),\n                    c = B(e, n, 0.2).rgb().toString(),\n                    u = B(e, n, 0.25).rgb().toString(),\n                    h = B(e, n, 0.3).rgb().toString(),\n                    l = B(e, n, 0.4).rgb().toString(),\n                    f = B(e, n, 0.5).rgb().toString(),\n                    d = A(t, { theme: \"dark\", backgroundColor: e }),\n                    p = i()(t).hex().toLowerCase(),\n                    g = d.indexOf(p),\n                    v = t;\n                  return (\n                    -1 !== g && (v = d[g + 1]),\n                    {\n                      mainStroke: s,\n                      mainFill: r,\n                      activeStroke: t,\n                      activeFill: o,\n                      inactiveStroke: s,\n                      inactiveFill: r,\n                      selectedStroke: t,\n                      selectedFill: r,\n                      highlightStroke: t,\n                      highlightFill: a,\n                      disableStroke: f,\n                      disableFill: u,\n                      edgeMainStroke: n,\n                      edgeActiveStroke: t,\n                      edgeInactiveStroke: n,\n                      edgeSelectedStroke: t,\n                      edgeHighlightStroke: t,\n                      edgeDisableStroke: h,\n                      comboMainStroke: l,\n                      comboMainFill: u,\n                      comboActiveStroke: t,\n                      comboActiveFill: c,\n                      comboInactiveStroke: l,\n                      comboInactiveFill: u,\n                      comboSelectedStroke: t,\n                      comboSelectedFill: c,\n                      comboHighlightStroke: v,\n                      comboHighlightFill: u,\n                      comboDisableStroke: l,\n                      comboDisableFill: c,\n                    }\n                  );\n                })(t, e, \"#777\")\n          );\n        },\n        D = function (t, e, n, r) {\n          void 0 === e && (e = \"#fff\"),\n            void 0 === n && (n = \"default\"),\n            void 0 === r && (r = \"rgb(150, 150, 150)\");\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              i.push(L(t, e, n, r));\n            }),\n            i\n          );\n        };\n    },\n    96: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return v;\n      });\n      var r = n(1),\n        i = n(65),\n        o = n(5);\n      var a = n(0),\n        s = n(2),\n        c = n(22),\n        u = s.h.cloneEvent,\n        h = s.h.isViewportChanged,\n        l = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.extendEvents = []),\n              (n.dragging = !1),\n              (n.preItem = null),\n              (n.graph = e),\n              (n.destroyed = !1),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.initEvents = function () {\n              var t = this.graph,\n                e = (this.extendEvents, t.get(\"canvas\"));\n              (this.canvasHandler = Object(a.wrapBehavior)(\n                this,\n                \"onCanvasEvents\",\n              )),\n                e.off(\"*\").on(\"*\", this.canvasHandler);\n            }),\n            (e.getItemRoot = function (t) {\n              for (; t && !t.get(\"item\"); ) t = t.get(\"parent\");\n              return t;\n            }),\n            (e.prototype.onCanvasEvents = function (t) {\n              var n = this.graph,\n                r = n.get(\"canvas\"),\n                i = t.target,\n                o = t.type;\n              (t.canvasX = t.x), (t.canvasY = t.y);\n              var a = { x: t.canvasX, y: t.canvasY },\n                s = n.get(\"group\").getMatrix();\n              if (\n                (s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                h(s) && (a = n.getPointByClient(t.clientX, t.clientY)),\n                (t.x = a.x),\n                (t.y = a.y),\n                (t.currentTarget = n),\n                i === r)\n              )\n                return (\n                  \"panmove\" === o && this.handleTouchMove(t, \"canvas\"),\n                  (t.target = r),\n                  (t.item = null),\n                  n.emit(o, t),\n                  void n.emit(\"canvas:\" + o, t)\n                );\n              var c = e.getItemRoot(i);\n              if (c) {\n                var u = c.get(\"item\");\n                if (!u.destroyed) {\n                  var l = u.getType();\n                  if (\n                    ((t.target = i),\n                    (t.item = u),\n                    t.canvasX === t.x && t.canvasY === t.y)\n                  ) {\n                    var f = n.getCanvasByPoint(t.x, t.y);\n                    (t.canvasX = f.x), (t.canvasY = f.y);\n                  }\n                  n.emit(o, t),\n                    t.name && !t.name.includes(\":\")\n                      ? n.emit(l + \":\" + o, t)\n                      : n.emit(t.name, t),\n                    \"dragstart\" === o && (this.dragging = !0),\n                    \"dragend\" === o && (this.dragging = !1),\n                    \"panmove\" === o && this.handleTouchMove(t, l);\n                }\n              } else n.emit(o, t);\n            }),\n            (e.prototype.onExtendEvents = function (t) {\n              this.graph.emit(t.type, t);\n            }),\n            (e.prototype.emitCustomEvent = function (t, e, n) {\n              (n.type = e), this.graph.emit(t + \":\" + e, n);\n            }),\n            (e.prototype.destroy = function () {\n              var t = this.graph,\n                e = this.canvasHandler,\n                n = this.extendEvents;\n              t.get(\"canvas\").off(\"*\", e),\n                Object(a.each)(n, function (t) {\n                  t.remove();\n                }),\n                (this.dragging = !1),\n                (this.preItem = null),\n                (this.extendEvents.length = 0),\n                (this.canvasHandler = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.handleTouchMove = function (t, e) {\n              var n = this.graph,\n                r = this.preItem,\n                i = n.get(\"canvas\"),\n                o = t.target === i ? null : t.item;\n              (t = u(t)),\n                r &&\n                  r !== o &&\n                  !r.destroyed &&\n                  ((t.item = r),\n                  this.emitCustomEvent(r.getType(), \"touchleave\", t),\n                  this.dragging &&\n                    this.emitCustomEvent(r.getType(), \"dragleave\", t)),\n                o &&\n                  r !== o &&\n                  ((t.item = o),\n                  this.emitCustomEvent(e, \"touchenter\", t),\n                  this.dragging && this.emitCustomEvent(e, \"dragenter\", t)),\n                (this.preItem = o);\n            }),\n            e\n          );\n        })(s.a),\n        f = n(33),\n        d = [\"force\", \"grid\", \"circular\"],\n        p = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.graph = e),\n              (n.layoutCfg = e.get(\"layout\") || {}),\n              (n.layoutType = n.getLayoutType()),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.updateLayoutCfg = function (t) {\n              var e = this,\n                n = this.graph,\n                r = this.layoutMethods,\n                i = Object(a.mix)({}, this.layoutCfg, t);\n              if (((this.layoutCfg = i), null == r ? void 0 : r.length)) {\n                (this.data = this.setDataFromGraph()), n.emit(\"beforelayout\");\n                var o = Promise.resolve();\n                1 === r.length\n                  ? (o = o.then(function () {\n                      return e.updateLayoutMethod(r[0], i);\n                    }))\n                  : null == r ||\n                    r.forEach(function (t, n) {\n                      var r = i.pipes[n];\n                      o = o.then(function () {\n                        return e.updateLayoutMethod(t, r);\n                      });\n                    }),\n                  (this.data = this.setDataFromGraph()),\n                  o\n                    .then(function () {\n                      i.onAllLayoutEnd && i.onAllLayoutEnd();\n                    })\n                    .catch(function (t) {\n                      console.warn(\"layout failed\", t);\n                    });\n              } else this.layout();\n            }),\n            (e.prototype.layout = function (t) {\n              var e = this,\n                n = this.graph;\n              this.data = this.setDataFromGraph();\n              var i = this.data,\n                o = i.nodes,\n                a = i.hiddenNodes;\n              if (!o) return !1;\n              var s = n.get(\"width\"),\n                c = n.get(\"height\"),\n                u = {};\n              Object.assign(\n                u,\n                { width: s, height: c, center: [s / 2, c / 2] },\n                this.layoutCfg,\n              ),\n                (this.layoutCfg = u),\n                this.destoryLayoutMethods(),\n                n.emit(\"beforelayout\"),\n                this.initPositions(u.center, o),\n                this.initPositions(u.center, a);\n              var h = u.onLayoutEnd,\n                l = u.layoutEndFormatted,\n                f = u.adjust;\n              l ||\n                ((u.layoutEndFormatted = !0),\n                (u.onAllLayoutEnd = function () {\n                  return Object(r.b)(e, void 0, void 0, function () {\n                    return Object(r.d)(this, function (t) {\n                      switch (t.label) {\n                        case 0:\n                          return (\n                            h && h(),\n                            this.refreshLayout(),\n                            f && u.pipes\n                              ? [4, this.adjustPipesBox(this.data, f)]\n                              : [3, 2]\n                          );\n                        case 1:\n                          t.sent(), this.refreshLayout(), (t.label = 2);\n                        case 2:\n                          return n.emit(\"afterlayout\"), [2];\n                      }\n                    });\n                  });\n                }));\n              var d = Promise.resolve();\n              return (\n                u.type\n                  ? (d = d.then(function () {\n                      return e.execLayoutMethod(u, 0);\n                    }))\n                  : u.pipes &&\n                    u.pipes.forEach(function (t, n) {\n                      d = d.then(function () {\n                        return e.execLayoutMethod(t, n);\n                      });\n                    }),\n                d\n                  .then(function () {\n                    u.onAllLayoutEnd && u.onAllLayoutEnd(), t && t();\n                  })\n                  .catch(function (t) {\n                    console.warn(\"graph layout failed,\", t);\n                  }),\n                !1\n              );\n            }),\n            (e.prototype.execLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = t.type;\n                if (\n                  ((t.onLayoutEnd = function () {\n                    o.emit(\"aftersublayout\", { type: a }), r();\n                  }),\n                  \"force\" === a || \"g6force\" === a || \"gForce\" === a)\n                ) {\n                  var s = t.onTick,\n                    c = function () {\n                      s && s(), o.refreshPositions();\n                    };\n                  t.tick = c;\n                } else\n                  \"comboForce\" === t.type &&\n                    (t.comboTrees = o.get(\"comboTrees\"));\n                var u;\n                try {\n                  u = new f.a(t);\n                } catch (t) {\n                  console.warn(\n                    \"The layout method: '\" +\n                      a +\n                      \"' does not exist! Please specify it first.\",\n                  ),\n                    i();\n                }\n                if (u.enableTick) {\n                  var h = t.onTick;\n                  c = function () {\n                    h && h(), o.refreshPositions();\n                  };\n                  u.tick = c;\n                }\n                var l = n.filterLayoutData(n.data, t);\n                !(function (t, e) {\n                  var n;\n                  if (\n                    !(null === (n = null == t ? void 0 : t.nodes) ||\n                    void 0 === n\n                      ? void 0\n                      : n.length)\n                  )\n                    return;\n                  t.nodes.forEach(function (t) {\n                    t.layoutOrder = e;\n                  });\n                })(l, e),\n                  u.init(l),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  u.execute(),\n                  u.isCustomLayout && t.onLayoutEnd && t.onLayoutEnd(),\n                  n.layoutMethods.push(u);\n              });\n            }),\n            (e.prototype.updateLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = null == e ? void 0 : e.type;\n                e.onLayoutEnd = function () {\n                  o.emit(\"aftersublayout\", { type: a }), r();\n                };\n                var s = n.filterLayoutData(n.data, e);\n                t.init(s),\n                  t.updateCfg(e),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  t.execute(),\n                  t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n              });\n            }),\n            (e.prototype.adjustPipesBox = function (t, e) {\n              var n = this;\n              return new Promise(function (r) {\n                var i = t.nodes;\n                (null == i ? void 0 : i.length) || r(),\n                  d.includes(e) ||\n                    (console.warn(\n                      \"The adjust type \" +\n                        e +\n                        \" is not supported yet, please assign it with 'force', 'grid', or 'circular'.\",\n                    ),\n                    r());\n                var o = {\n                    center: n.layoutCfg.center,\n                    nodeSize: function (t) {\n                      return Math.max(t.height, t.width);\n                    },\n                    preventOverlap: !0,\n                    onLayoutEnd: function () {},\n                  },\n                  s = n.getLayoutBBox(i),\n                  c = s.groupNodes,\n                  u = s.layoutNodes,\n                  h = Object(a.clone)(u);\n                (o.onLayoutEnd = function () {\n                  null == u ||\n                    u.forEach(function (t, e) {\n                      var n,\n                        r,\n                        i,\n                        o =\n                          t.x -\n                          (null === (n = h[e]) || void 0 === n ? void 0 : n.x),\n                        a =\n                          t.y -\n                          (null === (r = h[e]) || void 0 === r ? void 0 : r.y);\n                      null === (i = c[e]) ||\n                        void 0 === i ||\n                        i.forEach(function (t) {\n                          (t.x += o), (t.y += a);\n                        });\n                    }),\n                    r();\n                }),\n                  new f.a(o).layout({ nodes: u });\n              });\n            }),\n            (e.prototype.destroy = function () {\n              this.destoryLayoutMethods(),\n                (this.destroyed = !0),\n                this.graph.set(\"layout\", void 0),\n                (this.layoutCfg = void 0),\n                (this.layoutType = void 0),\n                (this.layoutMethods = void 0),\n                (this.graph = null);\n            }),\n            e\n          );\n        })(s.c);\n      var g = n(54),\n        v = function (t, e, n) {\n          return (\n            n[t] &&\n              console.warn(\n                \"The graph with the name \" +\n                  t +\n                  \" exists already, it will be overridden\",\n              ),\n            (n[t] = e(n)),\n            n\n          );\n        },\n        y = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            n.get(\"renderer\").startsWith(\"mini\") && n.set(\"context\", e.context),\n              t.prototype.init.call(n);\n            var r = n.get(\"defaultNode\");\n            return (\n              r || n.set(\"defaultNode\", { type: \"circle\" }),\n              r.type || ((r.type = \"circle\"), n.set(\"defaultNode\", r)),\n              (n.destroyed = !1),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.init = function () {}),\n            (e.prototype.emitEvent = function (t) {\n              var e = this.get(\"canvas\");\n              (t.type = t.type.toLowerCase()), e.registerEventCallback(t);\n            }),\n            (e.prototype.initLayoutController = function () {\n              var t = new p(this);\n              this.set({ layoutController: t });\n            }),\n            (e.prototype.initEventController = function () {\n              var t = new l(this);\n              if (\n                (this.set({ eventController: t }),\n                !this.get(\"renderer\").startsWith(\"mini\"))\n              ) {\n                var e = this.get(\"canvas\"),\n                  n = e.get(\"el\");\n                \"touchstart touchmove touchend touchcancel\"\n                  .split(\" \")\n                  .forEach(function (t) {\n                    n.addEventListener(t, e.registerEventCallback.bind(e), !1);\n                  });\n              }\n            }),\n            (e.prototype.initCanvas = function () {\n              var t = this.get(\"container\");\n              null !== t &&\n                \"string\" == typeof t &&\n                ((t = document.getElementById(t)), this.set(\"container\", t));\n              var e = this.get(\"renderer\");\n              if (!t && !e.startsWith(\"mini\"))\n                throw new Error(\"invalid container\");\n              var n = this.get(\"width\"),\n                r = this.get(\"height\"),\n                o = {\n                  container: t,\n                  context: this.get(\"context\"),\n                  width: n,\n                  height: r,\n                  renderer: e,\n                  fitView: this.get(\"fitView\"),\n                },\n                a = this.get(\"pixelRatio\");\n              a && (o.pixelRatio = a);\n              var s = new i.Canvas(o);\n              this.set(\"canvas\", s);\n            }),\n            (e.prototype.initPlugins = function () {\n              var t = this;\n              Object(a.each)(t.get(\"plugins\"), function (e) {\n                !e.destroyed && e.initPlugin && e.initPlugin(t);\n              });\n            }),\n            (e.prototype.toDataURL = function (t, e) {\n              var n = this.get(\"canvas\"),\n                r = n.getRenderer(),\n                i = n.get(\"el\");\n              t || (t = \"image/png\");\n              var o = \"\";\n              if (\"svg\" === r) {\n                var a = i.cloneNode(!0),\n                  s = document.implementation.createDocumentType(\n                    \"svg\",\n                    \"-//W3C//DTD SVG 1.1//EN\",\n                    \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                  ),\n                  c = document.implementation.createDocument(\n                    \"http://www.w3.org/2000/svg\",\n                    \"svg\",\n                    s,\n                  );\n                c.replaceChild(a, c.documentElement);\n                var u = new XMLSerializer().serializeToString(c);\n                o = \"data:image/svg+xml;charset=utf8,\" + encodeURIComponent(u);\n              } else {\n                var h = void 0,\n                  l = i.getContext(\"2d\"),\n                  f = this.get(\"width\"),\n                  d = this.get(\"height\"),\n                  p = void 0;\n                if (e) {\n                  var g =\n                    \"undefined\" != typeof window ? window.devicePixelRatio : 1;\n                  (h = l.getImageData(0, 0, f * g, d * g)),\n                    (p = l.globalCompositeOperation),\n                    (l.globalCompositeOperation = \"destination-over\"),\n                    (l.fillStyle = e),\n                    l.fillRect(0, 0, f, d);\n                }\n                (o = i.toDataURL(t)),\n                  e &&\n                    (l.clearRect(0, 0, f, d),\n                    l.putImageData(h, 0, 0),\n                    (l.globalCompositeOperation = p));\n              }\n              return o;\n            }),\n            (e.prototype.toFullDataURL = function (t, e, n) {\n              var r = this.get(\"group\").getCanvasBBox(),\n                s = r.height,\n                c = r.width,\n                u = this.get(\"renderer\"),\n                h = Object(g.a)('<id=\"virtual-image\"></div>'),\n                l = n ? n.backgroundColor : void 0,\n                f = n ? n.padding : void 0;\n              f\n                ? Object(a.isNumber)(f) && (f = [f, f, f, f])\n                : (f = [0, 0, 0, 0]);\n              var d = s + f[0] + f[2],\n                p = c + f[1] + f[3],\n                v = { container: h, height: d, width: p, quickHit: !0 },\n                y = new i.Canvas(v),\n                m = this.get(\"group\").clone(),\n                b = Object(a.clone)(m.getMatrix());\n              b || (b = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n              var x = (r.maxX + r.minX) / 2,\n                S = (r.maxY + r.minY) / 2;\n              o.a.translate(b, b, [-x, -S]),\n                o.a.translate(b, b, [c / 2 + f[3], s / 2 + f[0]]),\n                m.resetMatrix(),\n                m.setMatrix(b),\n                y.add(m);\n              var w = y.get(\"el\"),\n                O = \"\";\n              e || (e = \"image/png\"),\n                setTimeout(function () {\n                  if (\"svg\" === u) {\n                    var n = w.cloneNode(!0),\n                      r = document.implementation.createDocumentType(\n                        \"svg\",\n                        \"-//W3C//DTD SVG 1.1//EN\",\n                        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                      ),\n                      i = document.implementation.createDocument(\n                        \"http://www.w3.org/2000/svg\",\n                        \"svg\",\n                        r,\n                      );\n                    i.replaceChild(n, i.documentElement);\n                    var o = new XMLSerializer().serializeToString(i);\n                    O =\n                      \"data:image/svg+xml;charset=utf8,\" +\n                      encodeURIComponent(o);\n                  } else {\n                    var a = void 0,\n                      s = w.getContext(\"2d\"),\n                      c = void 0;\n                    if (l) {\n                      var h =\n                        \"undefined\" != typeof window\n                          ? window.devicePixelRatio\n                          : 1;\n                      (a = s.getImageData(0, 0, p * h, d * h)),\n                        (c = s.globalCompositeOperation),\n                        (s.globalCompositeOperation = \"destination-over\"),\n                        (s.fillStyle = l),\n                        s.fillRect(0, 0, p, d);\n                    }\n                    (O = w.toDataURL(e)),\n                      l &&\n                        (s.clearRect(0, 0, p, d),\n                        s.putImageData(a, 0, 0),\n                        (s.globalCompositeOperation = c));\n                  }\n                  t && t(O);\n                }, 16);\n            }),\n            (e.prototype.downloadFullImage = function (t, e, n) {\n              var r = this,\n                s = this.get(\"group\").getCanvasBBox(),\n                c = s.height,\n                u = s.width,\n                h = this.get(\"renderer\"),\n                l = Object(g.a)('<id=\"virtual-image\"></div>'),\n                f = n ? n.backgroundColor : void 0,\n                d = n ? n.padding : void 0;\n              d\n                ? Object(a.isNumber)(d) && (d = [d, d, d, d])\n                : (d = [0, 0, 0, 0]);\n              var p = c + d[0] + d[2],\n                v = u + d[1] + d[3],\n                y = { container: l, height: p, width: v },\n                m = new i.Canvas(y),\n                b = this.get(\"group\").clone(),\n                x = Object(a.clone)(b.getMatrix());\n              x || (x = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n              var S = (s.maxX + s.minX) / 2,\n                w = (s.maxY + s.minY) / 2;\n              o.a.translate(x, x, [-S, -w]),\n                o.a.translate(x, x, [u / 2 + d[3], c / 2 + d[0]]),\n                b.resetMatrix(),\n                b.setMatrix(x),\n                m.add(b);\n              var O = m.get(\"el\");\n              e || (e = \"image/png\"),\n                setTimeout(function () {\n                  var n = \"\";\n                  if (\"svg\" === h) {\n                    var i = O.cloneNode(!0),\n                      o = document.implementation.createDocumentType(\n                        \"svg\",\n                        \"-//W3C//DTD SVG 1.1//EN\",\n                        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                      ),\n                      a = document.implementation.createDocument(\n                        \"http://www.w3.org/2000/svg\",\n                        \"svg\",\n                        o,\n                      );\n                    a.replaceChild(i, a.documentElement);\n                    var s = new XMLSerializer().serializeToString(a);\n                    n =\n                      \"data:image/svg+xml;charset=utf8,\" +\n                      encodeURIComponent(s);\n                  } else {\n                    var c = void 0,\n                      u = O.getContext(\"2d\"),\n                      l = void 0;\n                    if (f) {\n                      var d =\n                        \"undefined\" != typeof window\n                          ? window.devicePixelRatio\n                          : 1;\n                      (c = u.getImageData(0, 0, v * d, p * d)),\n                        (l = u.globalCompositeOperation),\n                        (u.globalCompositeOperation = \"destination-over\"),\n                        (u.fillStyle = f),\n                        u.fillRect(0, 0, v, p);\n                    }\n                    (n = O.toDataURL(e)),\n                      f &&\n                        (u.clearRect(0, 0, v, p),\n                        u.putImageData(c, 0, 0),\n                        (u.globalCompositeOperation = l));\n                  }\n                  var g = document.createElement(\"a\"),\n                    y =\n                      (t || \"graph\") +\n                      (\"svg\" === h ? \".svg\" : \".\" + e.split(\"/\")[1]);\n                  r.dataURLToImage(n, h, g, y);\n                  var m = document.createEvent(\"MouseEvents\");\n                  m.initEvent(\"click\", !1, !1), g.dispatchEvent(m);\n                }, 16);\n            }),\n            (e.prototype.downloadImage = function (t, e, n) {\n              var r = this,\n                i = this;\n              i.isAnimating() && i.stopAnimate();\n              var o = i.get(\"canvas\").getRenderer();\n              e || (e = \"image/png\");\n              var a = (t || \"graph\") + (\"svg\" === o ? \".svg\" : e.split(\"/\")[1]),\n                s = document.createElement(\"a\");\n              setTimeout(function () {\n                var t = i.toDataURL(e, n);\n                r.dataURLToImage(t, o, s, a);\n                var c = document.createEvent(\"MouseEvents\");\n                c.initEvent(\"click\", !1, !1), s.dispatchEvent(c);\n              }, 16);\n            }),\n            (e.prototype.dataURLToImage = function (t, e, n, r) {\n              if (\"undefined\" != typeof window)\n                if (window.Blob && window.URL && \"svg\" !== e) {\n                  var i = t.split(\",\"),\n                    o = \"\";\n                  if (i && i.length > 0) {\n                    var a = i[0].match(/:(.*?);/);\n                    a && a.length >= 2 && (o = a[1]);\n                  }\n                  for (\n                    var s = atob(i[1]), c = s.length, u = new Uint8Array(c);\n                    c--;\n\n                  )\n                    u[c] = s.charCodeAt(c);\n                  var h = new Blob([u], { type: o });\n                  window.navigator.msSaveBlob\n                    ? window.navigator.msSaveBlob(h, r)\n                    : n.addEventListener(\"click\", function () {\n                        (n.download = r),\n                          (n.href = window.URL.createObjectURL(h));\n                      });\n                } else\n                  n.addEventListener(\"click\", function () {\n                    (n.download = r), (n.href = t);\n                  });\n            }),\n            (e.prototype.addPlugin = function (t) {\n              t.destroyed || (this.get(\"plugins\").push(t), t.initPlugin(this));\n            }),\n            (e.prototype.removePlugin = function (t) {\n              var e = this.get(\"plugins\"),\n                n = e.indexOf(t);\n              n >= 0 && (t.destroyPlugin(), e.splice(n, 1));\n            }),\n            (e.prototype.isMiniNative = function () {\n              return \"mini-native\" === this.get(\"renderer\");\n            }),\n            (e.prototype.isMini = function () {\n              return this.get(\"renderer\").startsWith(\"mini\");\n            }),\n            (e.prototype.isBrowser = function () {\n              return \"canvas\" === this.get(\"renderer\");\n            }),\n            (e.prototype.setImageWaterMarker = function (t, e, n) {\n              var r = this,\n                i = Object(a.deepMix)({}, c.a.imageWaterMarkerConfig, e),\n                o = i.width,\n                s = i.height,\n                u = i.image,\n                h = u.rotate,\n                l = (u.x, u.y, u.width),\n                f = u.height;\n              if ((this.isMini() && this.isMiniNative(), this.isMiniNative())) {\n                (n.width = o || this.get(\"width\")),\n                  (n.height = s || this.get(\"height\"));\n                var d = n.getContext(\"2d\"),\n                  p = (0, this.get(\"extra\").createImage)();\n                (p.crossOrigin = \"anonymous\"),\n                  (p.src = t),\n                  (p.onload = function () {\n                    if (!r.destroyed) {\n                      var t = l / p.width,\n                        e = f / p.height;\n                      d.rotate((-h * Math.PI) / 180);\n                      var i = d.createPattern(p, \"repeat\");\n                      (d.fillStyle = i),\n                        d.scale(t, e),\n                        d.fillRect(\n                          2 * -r.get(\"width\"),\n                          -r.get(\"height\"),\n                          10 * r.get(\"width\"),\n                          10 * r.get(\"height\"),\n                        ),\n                        r\n                          .get(\"waterGroup\")\n                          .addShape(\"image\", { attrs: { img: n } });\n                    }\n                  });\n              }\n              if (this.isBrowser()) {\n                var g = document.createElement(\"canvas\");\n                (g.width = o || this.get(\"width\")),\n                  (g.height = s || this.get(\"height\"));\n                var v = g.getContext(\"2d\"),\n                  y = new Image();\n                (y.crossOrigin = \"anonymous\"),\n                  (y.src = t),\n                  (y.onload = function () {\n                    if (!r.destroyed) {\n                      var t = l / y.width,\n                        e = f / y.height;\n                      v.rotate((-h * Math.PI) / 180);\n                      var n = v.createPattern(y, \"repeat\");\n                      (v.fillStyle = n),\n                        v.scale(t, e),\n                        v.fillRect(\n                          2 * -r.get(\"width\"),\n                          -r.get(\"height\"),\n                          10 * r.get(\"width\"),\n                          10 * r.get(\"height\"),\n                        );\n                      var i = g.toDataURL();\n                      r.get(\"waterGroup\").addShape(\"image\", {\n                        attrs: { img: i },\n                      });\n                    }\n                  });\n              }\n            }),\n            (e.prototype.setTextWaterMarker = function (t, e) {\n              var n = this.get(\"container\");\n              Object(a.isString)(n) && (n = document.getElementById(n)),\n                n.style.position || (n.style.position = \"relative\");\n              var r = this.get(\"graphWaterMarker\"),\n                o = Object(a.deepMix)({}, c.a.textWaterMarkerConfig, e),\n                s = o.width,\n                u = o.height,\n                h = o.compatible,\n                l = o.text;\n              if (!r) {\n                var f = { container: n, width: s, height: u, capture: !1 },\n                  d = this.get(\"pixelRatio\");\n                d && (f.pixelRatio = d),\n                  (r = new i.Canvas(f)),\n                  this.set(\"graphWaterMarker\", r);\n              }\n              r.get(\"el\").style.display = \"none\";\n              var p = r.get(\"context\"),\n                g = l.rotate,\n                v = l.fill,\n                y = l.fontFamily,\n                m = l.fontSize,\n                b = l.baseline,\n                x = l.x,\n                S = l.y,\n                w = l.lineHeight;\n              p.rotate((-g * Math.PI) / 180),\n                (p.font = m + \"px \" + y),\n                (p.fillStyle = v),\n                (p.textBaseline = b);\n              for (var O = t.length - 1; O >= 0; O--)\n                p.fillText(t[O], x, S + O * w);\n              if ((p.rotate((g * Math.PI) / 180), h))\n                n.style.cssText =\n                  \"background-image: url(\" +\n                  r.get(\"el\").toDataURL(\"image/png\") +\n                  \");background-repeat:repeat;\";\n              else {\n                var M = document.querySelector(\".g6-graph-watermarker\");\n                M ||\n                  ((M = document.createElement(\"div\")).className =\n                    \"g6-graph-watermarker\"),\n                  (M.style.cssText =\n                    \"background-image: url(\" +\n                    r.get(\"el\").toDataURL(\"image/png\") +\n                    \");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:99;\"),\n                  n.appendChild(M);\n              }\n            }),\n            (e.prototype.destroy = function () {\n              var e;\n              Object(a.each)(this.get(\"plugins\"), function (t) {\n                t.destroyPlugin();\n              });\n              var n = this.get(\"tooltips\");\n              if (n)\n                for (var r = 0; r < n.length; r++) {\n                  var i = n[r];\n                  if (i) {\n                    var o = i.parentElement;\n                    o && o.removeChild(i);\n                  }\n                }\n              this.get(\"eventController\").destroy(),\n                null === (e = this.get(\"layoutController\")) ||\n                  void 0 === e ||\n                  e.destroy(),\n                this.get(\"graphWaterMarker\") &&\n                  this.get(\"graphWaterMarker\").destroy(),\n                \"undefined\" != typeof document &&\n                  document.querySelector &&\n                  document.querySelector(\".g6-graph-watermarker\") &&\n                  document.querySelector(\".g6-graph-watermarker\").remove(),\n                t.prototype.destroy.call(this);\n            }),\n            (e.prototype.initGroups = function () {\n              var t = this.get(\"canvas\"),\n                e = t.addGroup({\n                  id: \"root\",\n                  className: c.a.rootContainerClassName,\n                }),\n                n = t.addGroup({\n                  id: \"water\",\n                  className: c.a.waterContainerClassName,\n                });\n              if (this.get(\"groupByTypes\")) {\n                var r = e.addGroup({\n                    id: \"edge\",\n                    className: c.a.edgeContainerClassName,\n                  }),\n                  i = e.addGroup({\n                    id: \"node\",\n                    className: c.a.nodeContainerClassName,\n                  }),\n                  o = e.addGroup({\n                    id: \"combo\",\n                    className: c.a.comboContainerClassName,\n                  });\n                o.toBack(),\n                  this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n              }\n              var a = t.addGroup({\n                  id: \"uiGroup\",\n                  className: c.a.uiContainerClassName,\n                }),\n                s = e.addGroup({\n                  id: \"delegate\",\n                  className: c.a.delegateContainerClassName,\n                });\n              this.set({ delegateGroup: s }),\n                this.set(\"group\", e),\n                this.set(\"uiGroup\", a),\n                this.set(\"waterGroup\", n);\n            }),\n            e\n          );\n        })(s.b);\n      e.a = y;\n    },\n    97: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clearAnimationFrame = function (t) {\n          return o.clearAnimationFrame\n            ? o.clearAnimationFrame(t)\n            : (\"object\" ===\n                (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n                window.cancelAnimationFrame\n                ? window.cancelAnimationFrame\n                : clearTimeout)(t);\n        }),\n        (e.requestAnimationFrame = function (t) {\n          return o.requestAnimationFrame\n            ? o.requestAnimationFrame(t)\n            : (\"object\" ===\n                (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n                window.requestAnimationFrame\n                ? window.requestAnimationFrame\n                : function (t) {\n                    return setTimeout(t, 16);\n                  })(t);\n        }),\n        (e.setExtraFunction = function (t) {\n          void 0 === t && (t = {}), (t = t);\n        });\n      var o = {};\n    },\n    98: function (t, e) {\n      function n(t) {\n        return (n =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r;\n      r = (function () {\n        return this;\n      })();\n      try {\n        r = r || new Function(\"return this\")();\n      } catch (t) {\n        \"object\" === (\"undefined\" == typeof window ? \"undefined\" : n(window)) &&\n          (r = window);\n      }\n      t.exports = r;\n    },\n    99: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.Layouts = e.Layout = void 0);\n      var r = n(62),\n        i = (function () {\n          function t(t) {\n            var e = r.getLayoutByName(t.type);\n            this.layoutInstance = new e(t);\n          }\n          return (\n            (t.prototype.layout = function (t) {\n              return this.layoutInstance.layout(t);\n            }),\n            (t.prototype.updateCfg = function (t) {\n              this.layoutInstance.updateCfg(t);\n            }),\n            (t.prototype.init = function (t) {\n              this.layoutInstance.init(t);\n            }),\n            (t.prototype.execute = function () {\n              this.layoutInstance.execute();\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return this.layoutInstance.getDefaultCfg();\n            }),\n            (t.prototype.destroy = function () {\n              return this.layoutInstance.destroy();\n            }),\n            t\n          );\n        })();\n      (e.Layout = i),\n        (e.Layouts = new Proxy(\n          {},\n          {\n            get: function (t, e) {\n              return r.getLayoutByName(e);\n            },\n            set: function (t, e, n) {\n              return r.registerLayout(e, n), !0;\n            },\n          },\n        ));\n    },\n  }).default;\n});\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/change-position-default/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"a\",\n      x: 200,\n      y: 100,\n      style: { fill: \"#5B8FF9\", stroke: null },\n    },\n    {\n      id: \"b\",\n      x: 100,\n      y: 200,\n      style: { fill: \"#5AD8A6\", stroke: null },\n    },\n    {\n      id: \"c\",\n      x: 300,\n      y: 200,\n      style: { fill: \"#5D7092\", stroke: null },\n    },\n  ],\n  edges: [\n    {\n      id: \"a2b\",\n      source: \"a\",\n      target: \"b\",\n    },\n    {\n      id: \"a2c\",\n      source: \"a\",\n      target: \"c\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/change-position-default/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/change-position-default/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * changePosition#default\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      animate: true,\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    setInterval(() => {\n      data.nodes.forEach((node) => {\n        node.x += Math.random() * 50 - 25;\n        node.y += Math.random() * 50 - 25;\n      });\n      this.graph.changeData(data);\n    }, 600);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/change-position-default/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"节点移动动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/change-position-default/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/change-position-default/index.wxss",
    "content": "/* packageAnimationAnimation/change-position-default/index.wxss */\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/custom-animate-position/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\n/**\n * customAnimate#position\n */\n\nconst r = 50;\nconst radius = Math.PI;\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      animate: true,\n      animateCfg: {\n        duration: 1000,\n        onFrame(node, ratio, toAttrs, fromAttrs) {\n          const current = radius * ratio;\n          let { x } = fromAttrs;\n          let { y } = fromAttrs;\n          if (fromAttrs.x > toAttrs.x) {\n            x = x - r + r * Math.cos(current);\n            y += r * Math.sin(current);\n          } else {\n            x = x + r - r * Math.cos(current);\n            y -= r * Math.sin(current);\n          }\n          return { x, y };\n        },\n      },\n    });\n\n    // 加入两个节点\n    const node1 = this.graph.addItem(\"node\", {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      type: \"circle\",\n      style: { fill: \"#5B8FF9\", lineWidth: 0 },\n    });\n    const node2 = this.graph.addItem(\"node\", {\n      id: \"node2\",\n      x: 200,\n      y: 100,\n      type: \"circle\",\n      style: { fill: \"#5AD8A6\", lineWidth: 0 },\n    });\n\n    // 循环动画\n    let count = 0;\n    setInterval(() => {\n      if (count % 2 === 0) {\n        node1.get(\"model\").x = 200;\n        node2.get(\"model\").x = 100;\n      } else {\n        node1.get(\"model\").x = 100;\n        node2.get(\"model\").x = 200;\n      }\n      count++;\n      this.graph.refresh();\n    }, 1000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/custom-animate-position/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/custom-animate-position/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/custom-animate-position/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-edge/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-edge/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * edge#edge\n */\nconst lineDash = [4, 2, 1, 2];\nF6.registerEdge(\n  \"line-dash\",\n  {\n    afterDraw(cfg, group) {\n      // get the first shape in the group, it is the edge's path here=\n      const shape = group.get(\"children\")[0];\n      let index = 0;\n      // Define the animation\n      shape.animate(\n        () => {\n          index++;\n          if (index > 9) {\n            index = 0;\n          }\n          const res = {\n            lineDash,\n            lineDashOffset: -index,\n          };\n          // returns the modified configurations here, lineDash and lineDashOffset here\n          return res;\n        },\n        {\n          repeat: true, // whether executes the animation repeatly\n          duration: 3000, // the duration for executing once\n        },\n      );\n    },\n  },\n  \"cubic\", // extend the built-in edge 'cubic'\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultEdge: {\n        type: \"line-dash\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#bae7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-edge/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"虚线运动\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-edge/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-edge/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-line-growth/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-line-growth/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * edge#lineGrowth\n */\n\nF6.registerEdge(\n  \"line-growth\",\n  {\n    afterDraw(_, group) {\n      const shape = group.get(\"children\")[0];\n      const length = shape.getTotalLength();\n      console.log(_);\n      shape.animate(\n        (ratio) => {\n          // the operations in each frame. Ratio ranges from 0 to 1 indicating the prograss of the animation. Returns the modified configurations\n          const startLen = ratio * length;\n          // Calculate the lineDash\n          const cfg = {\n            lineDash: [startLen, length - startLen],\n          };\n          return cfg;\n        },\n        {\n          repeat: true, // Whether executes the animation repeatly\n          duration: 2000, // the duration for executing once\n        },\n      );\n    },\n  },\n  \"cubic\", // extend the built-in edge 'cubic'\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultEdge: {\n        type: \"line-growth\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#bae7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-line-growth/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"无到有的边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-line-growth/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/edge-line-growth/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/node-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      type: \"circle-animate\",\n      size: 20,\n      label: \"Scale Animation\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      type: \"background-animate\",\n      color: \"#40a9ff\",\n      size: 20,\n      label: \"Background Animation\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n    {\n      id: \"node3\",\n      x: 400,\n      y: 100,\n      size: [40, 40],\n      type: \"inner-animate\",\n      img: \"data:image/webp;base64,UklGRq4FAABXRUJQVlA4IKIFAABwHwCdASo8ADwAPiEMhEGhhv6rQAYAgS2NHsdCq/4D8AOoA64OEUAj/XPxVwyvRGvyO/gGxN/t3oK/1X6zesX3L/p/RP/2HCgKAB9AGeAbCB+AGwAbQBtA/8c/m/4PYHTonm+SzRH6B9sv2i/rOZC+G/ln9l/ML/GdoD7APcA/TD+09QDzAfrX+vHYM9AD+Uf0zrAPQA/bH0vv2t+CH9qf2R+A39e6X098/I7IAcLcs8Gjmc/9T7gPbX9H+wJ+rPVV9En9ZmBI5oUiYhkYHIVjRr9hzCTPcV5Rs/wjjIHkxPgtr/3ALZSuUm146HHwqQVA23hnnqH/4aJ/k4v4hU6RBZ0AAAD+//8ARPyL9yWIlAbWBAD0oKSqlYWreuRa3Oj02u+TvSQS8iwMYewUYTWLDNp9wOlFJaWnqE+za35UwUXuDAT6T0I4fwY+u+qrRVhl+S1ir4X7BQiNswug5AX+MjQcXEeUwfSIEUT+DFPCr+BUiwTbFxLni7fv61vRbmXoauLz4tiqOFTzEGP8tNXP5+H7mZVGfNjIxapT3FGUtqBdp/SD5cTOYOkn2fawkpqpCSqf2+CfiGWtIF673fEzlk/hIbWDhQ81C/ddxLn609d/5efckbdZ8HZbhhVmM82/Uat7CFmw1SH5xCxRxEEhjpf1EP1Xn5q9VZfm1+OFTab/MN67Xha8K//5oVBlMgZALE653X0fas/+2xMqiyCu5Wa7PHsCwbBwqROfNmzi4LPOTjkFPHVKDD1Nfj4/sul6cANdF68rf2jszlyZsUUoLTP7H3swSroc3ssNXSRVAcYd7+iBZpfoAYWvKgnr+Hv62fHZX5ZbjYbYzVjq6fsXkubto858NuUx4+ILb5y7dP6W3/IYVeUSF0yZseKIZhOMs9BBf5uB2Y3Ott//+1OG7hYINzcqigrzWAOJbSmVw3G0ULywkobx+rvfk8VmZFzQGgP/+4T74mp/vsZyM1NLguiTO2gNO05tcpXwveq5mrcweXrJ/bRZDmU2KBrnXhkXq+735c+UHTFq4h4jMOPm5shKioB6XaqhUf3DJlMg8937g/SKjrgD0H5sNm0/k4FfilBbcrsjc3dd6cwEYJo3CNhe3SpNJ2geNXyV4/hq/BZXZ1kiVknjmf5cUx7Tv/9Sb+fQ/DgAsRNSz1wiVodiLjP7aVrkxbWx5gJ8U/j0o1Ipm/nyDZRPrQXmbPAcy1eDDejxTDBKe42ElHpC2QlFdhOedsp4i9QVjt8EqWGy1YzPaGqZhCVg/LWt8/+4BmiCzNGtpR21MGJf4kI/n/1sbe36e1QBCBAx4EVfTM82ZM2lh0P189e7eY0A3NzXWVrUek8SEn+DYYCQeEaC5hDHGreFHT1baY6KyrFx3G9oMm3fLrCqmNjFRnZa3LB/5m8FgCpq9B/1OCLRE5GzVTZnVzj/4V38PgCIpX16Kznijf01+MkDeS9oCF2hEXQ9tr+mPLrjGy4Cg5fyLgyCj1fUq33nMf79Svli2h83m3gqkoxJcXvBetFQP8V/gRjBNGmFXK5TfwLhbolWEjDqUGK3n+hxzQLif9zreYO88EIRTUNbzE1/Sn7rBEtjB0uawNje5OubWsB62SOlMZoZpxrDbMb4UvQrODPhSafmhcYe9zm/dHxssMfUthhDKjyMhoRhngPjbzfGXmIV2Omgrn/zbefK/PawUGSH6x4Qk4HCN4/X8S+XCf51JJtOQeHST/yfwg69uMkE07SONnhGUrL6j5oQn6JI+zkaH/H/P/Ti/pfOTfAWxQNiMvWX08mqbuUweFSQ/G5YUP/uCvZAXutf1+Nhl2jj/n4/fPOihPjwvfFnnjOaQvs9PSpF33d+396LASZ3IID/4UP4pf9eOMXw82ccoUUUHX6MfBWyBDvARCrdPmerUwKwW+lBIAe1dsAAAA==\",\n      label: \"Image Rotate\",\n      labelCfg: {\n        position: \"right\",\n      },\n    },\n    {\n      id: \"node4\",\n      x: 300,\n      y: 300,\n      type: \"rect\",\n      label: \"No Animation\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node4\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/node-node/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * node#node\n */\n\nconst { Util } = F6;\n\n// // Scale Animation\nF6.registerNode(\n  \"circle-animate\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      shape.animate(\n        (ratio) => {\n          const diff = ratio <= 0.5 ? ratio * 10 : (1 - ratio) * 10;\n          return {\n            r: cfg.size / 2 + diff,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"circle\",\n);\n\n// Background Animation\nF6.registerNode(\n  \"background-animate\",\n  {\n    afterDraw(cfg, group) {\n      const r = cfg.size / 2;\n      const back1 = group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back1-shape\",\n      });\n      const back2 = group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back2-shape\",\n      });\n      const back3 = group.addShape(\"circle\", {\n        zIndex: -1,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back3-shape\",\n      });\n      group.sort(); // Sort according to the zIndex\n      back1.animate(\n        {\n          // Magnifying and disappearing\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 0,\n          repeat: true, // repeat\n        },\n      ); // no delay\n      back2.animate(\n        {\n          // Magnifying and disappearing\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 1000,\n          repeat: true, // repeat\n        },\n      ); // 1s delay\n      back3.animate(\n        {\n          // Magnifying and disappearing\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 2000,\n          repeat: true, // repeat\n        },\n      ); // 3s delay\n    },\n  },\n  \"circle\",\n);\n\n// // Image animation\nF6.registerNode(\n  \"inner-animate\",\n  {\n    afterDraw(cfg, group) {\n      const { size } = cfg;\n      const width = size[0] - 12;\n      const height = size[1] - 12;\n      const image = group.addShape(\"image\", {\n        attrs: {\n          x: -width / 2,\n          y: -height / 2,\n          width,\n          height,\n          img: cfg.img,\n        },\n        name: \"image-shape\",\n      });\n      image.animate(\n        (ratio) => {\n          const toMatrix = Util.transform(\n            [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            [[\"r\", ratio * Math.PI * 2]],\n          );\n          return {\n            matrix: toMatrix,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"rect\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          lineWidth: 1,\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/node-node/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"节点动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/node-node/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/node-node/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/point-in-line/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/point-in-line/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * point-in-line\n */\n\nF6.registerEdge(\n  \"circle-running\",\n  {\n    afterDraw(cfg, group) {\n      // get the first shape in the group, it is the edge's path here=\n      const shape = group.get(\"children\")[0];\n      // the start position of the edge's path\n      const startPoint = shape.getPoint(0);\n\n      // add red circle shape\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          x: startPoint.x,\n          y: startPoint.y,\n          fill: \"#1890ff\",\n          r: 3,\n        },\n        name: \"circle-shape\",\n      });\n\n      // animation for the red circle\n      circle.animate(\n        (ratio) => {\n          // the operations in each frame. Ratio ranges from 0 to 1 indicating the prograss of the animation. Returns the modified configurations\n          // get the position on the edge according to the ratio\n          const tmpPoint = shape.getPoint(ratio);\n          // returns the modified configurations here, x and y here\n          return {\n            x: tmpPoint.x,\n            y: tmpPoint.y,\n          };\n        },\n        {\n          repeat: true, // Whether executes the animation repeatly\n          duration: 3000, // the duration for executing once\n        },\n      );\n    },\n  },\n  \"cubic\", // extend the built-in edge 'cubic'\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultEdge: {\n        type: \"circle-running\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#bae7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/point-in-line/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"圆点沿边运动\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/point-in-line/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/point-in-line/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/state-change-hover/data.js",
    "content": "const nodes = [];\nconst edges = [];\n\n// Center node\nconst centerNode = {\n  id: \"center\",\n  x: 500,\n  y: 300,\n  type: \"center-node\",\n  size: 20,\n};\nnodes.push(centerNode);\n// Add 4 nodes on the left\nfor (let i = 0; i < 4; i++) {\n  const id = `left${i}`;\n  nodes.push({\n    id,\n    x: 250,\n    y: (i + 1) * 100 + 50,\n    type: \"leaf-node\",\n  });\n  edges.push({ source: id, target: \"center\", type: \"can-running\" });\n}\n// Add 6 nodes on the right\nfor (let i = 0; i < 6; i++) {\n  const id = `right${i}`;\n  nodes.push({\n    id,\n    x: 750,\n    y: i * 100 + 50,\n    type: \"leaf-node\",\n  });\n  edges.push({ source: \"center\", target: id, type: \"can-running\" });\n}\n\nexport { nodes, edges };\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/state-change-hover/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport { nodes, edges } from \"./data\";\n\n/**\n * state-change-hover\n */\n\nF6.registerNode(\n  \"leaf-node\",\n  {\n    afterDraw(cfg, group) {\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          r: 5,\n          fill: cfg.color || \"#5B8FF9\",\n        },\n        name: \"circle-shape\",\n      });\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n  },\n  \"circle\",\n);\n\nF6.registerNode(\n  \"center-node\",\n  {\n    afterDraw(cfg, group) {\n      const r = cfg.size / 2;\n      group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r: r + 10,\n          fill: \"gray\",\n          opacity: 0.4,\n        },\n        name: \"circle-shape1\",\n      });\n      group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r: r + 20,\n          fill: \"gray\",\n          opacity: 0.2,\n        },\n        name: \"circle-shape2\",\n      });\n      group.sort();\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n  },\n  \"circle\",\n);\n\n// lineDash array\nconst lineDash = [4, 2, 1, 2];\n\nF6.registerEdge(\n  \"can-running\",\n  {\n    setState(name, value, item) {\n      const shape = item.get(\"keyShape\");\n      if (name === \"running\") {\n        if (value) {\n          let index = 0;\n          shape.animate(\n            () => {\n              index += 1;\n              if (index > 9) {\n                index = 0;\n              }\n              const res = {\n                lineDash,\n                lineDashOffset: -index,\n              };\n              // return the params for this frame\n              return res;\n            },\n            {\n              repeat: true,\n              duration: 3000,\n            },\n          );\n        } else {\n          shape.stopAnimate();\n          shape.attr(\"lineDash\", null);\n        }\n      }\n    },\n  },\n  \"cubic-horizontal\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n\n    this.graph.data({ nodes, edges });\n    this.graph.render();\n    this.graph.fitView();\n\n    let toggle = true;\n    // set hover state\n    this.graph.on(\"node:tap\", (ev) => {\n      const node = ev.item;\n      const edges_ = node.getEdges();\n      edges_.forEach((edge) => {\n        this.graph.setItemState(edge, \"running\", toggle);\n      });\n      toggle = !toggle;\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/state-change-hover/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"状态与动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/state-change-hover/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-animation/pages/animation/state-change-hover/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/arc/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    // Built-in arc edges\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"curveOffset = 20\",\n      curveOffset: 20,\n    },\n    {\n      id: \"edge1\",\n      source: \"0\",\n      target: \"1\",\n      label: \"curveOffset = 50\", // the bending degree\n      curveOffset: 50,\n    },\n    {\n      id: \"edge2\",\n      source: \"0\",\n      target: \"1\",\n      label: \"curveOffset = -50\", // the bending degree\n      curveOffset: -50,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/arc/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * arc\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        // 支持的 behavior\n        default: [\"drag-node\"],\n      },\n      defaultEdge: {\n        type: \"arc\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n        labelCfg: {\n          autoRotate: true,\n          refY: -10,\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/arc/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"弧线\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/arc/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/arc/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/area-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeD\",\n      x: 150,\n      y: 150,\n      label: \"Area1\",\n      type: \"area\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeD2\",\n      x: 500,\n      y: 150,\n      label: \"Area2\",\n      type: \"area\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeD\",\n      target: \"nodeD2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/area-chart/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * area-chart\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    F6.registerNode(\"area\", {\n      draw(cfg, group) {\n        const baseR = 30;\n\n        // Ref line\n        let refR = baseR;\n        const refInc = 10;\n        for (let i = 0; i < 6; i++) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              r: (refR += refInc),\n              stroke: \"#bae7ff\",\n              lineDash: [4, 4],\n            },\n            name: \"circle-shape\",\n          });\n        }\n        const everyIncAngle = (2 * Math.PI * (360 / 5)) / 360;\n        const tempIncValues = [baseR, baseR, baseR, baseR, baseR];\n        const allRs = [];\n        cfg.details.forEach((cat) => {\n          const oneRs = [];\n          cat.values.forEach((v, i) => {\n            const R = tempIncValues[i] + v * 0.4;\n            oneRs.push(R);\n            tempIncValues[i] = R;\n          });\n          allRs.push(oneRs);\n        });\n        const strokeColors = [\n          \"rgba(91, 143, 249,1)\",\n          \"rgba(90, 216, 166,1)\",\n          \"rgba(246, 189, 22,1)\",\n          \"rgba(232, 104, 74,1)\",\n          \"rgba(255, 157, 77,1)\",\n        ];\n        const fillColors = [\n          \"rgba(91, 143, 249,0.5)\",\n          \"rgba(90, 216, 166,0.5)\",\n          \"rgba(246, 189, 22,0.5)\",\n          \"rgba(232, 104, 74,0.5)\",\n          \"rgba(255, 157, 77,0.5)\",\n        ];\n\n        allRs.reverse().forEach((Rs, index) => {\n          let curAngle = 0;\n          const poss = [];\n          Rs.forEach((r) => {\n            const xPos = r * Math.cos(curAngle);\n            const yPos = r * Math.sin(curAngle);\n            curAngle += everyIncAngle;\n            poss.push([xPos, yPos]);\n          });\n          const Ls = poss.map((p, i) => {\n            if (i === 0) {\n              return [\"M\", ...p];\n            }\n            return [\"L\", ...p];\n          });\n\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                ...Ls,\n                [\"Z\"], // close the path\n              ],\n              stroke: strokeColors[index],\n              fill: fillColors[index],\n            },\n            name: \"path-shape1\",\n          });\n        });\n        let nowAngle2 = 0;\n        const everyIncAngleCat = (2 * Math.PI * (360 / 5)) / 360;\n        for (let i = 0; i < 5; i++) {\n          const r = 30 + 60;\n          const xPos = r * Math.cos(nowAngle2);\n          const yPos = r * Math.sin(nowAngle2);\n\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", 0, 0],\n                [\"L\", xPos, yPos],\n              ],\n              lineDash: [4, 4],\n              stroke: \"darkgray\",\n            },\n            name: \"path-shape2\",\n          });\n          nowAngle2 += everyIncAngleCat;\n        }\n\n        // add a circle with the same filling color with background\n        group.addShape(\"circle\", {\n          // attrs: style\n          attrs: {\n            x: 0, // 居中\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            // attrs: style\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/area-chart/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"面积图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/area-chart/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/area-chart/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/bar-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeA\",\n      x: 150,\n      y: 150,\n      label: \"Bar1\",\n      type: \"circleBar\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeA2\",\n      x: 500,\n      y: 150,\n      label: \"Bar2\",\n      type: \"circleBar\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeA\",\n      target: \"nodeA2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/bar-chart/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * bar-chart：使用G自定义的南丁格尔图节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    const getPath = (cx, cy, rs, re, startAngle, endAngle, clockwise) => {\n      const flag1 = clockwise ? 1 : 0;\n      const flag2 = clockwise ? 0 : 1;\n      return [\n        [\"M\", Math.cos(startAngle) * rs + cx, Math.sin(startAngle) * rs + cy],\n        [\"L\", Math.cos(startAngle) * re + cx, Math.sin(startAngle) * re + cy],\n        [\n          \"A\",\n          re,\n          re,\n          0,\n          0,\n          flag1,\n          Math.cos(endAngle) * re + cx,\n          Math.sin(endAngle) * re + cy,\n        ],\n        [\"L\", Math.cos(endAngle) * rs + cx, Math.sin(endAngle) * rs + cy],\n        [\n          \"A\",\n          rs,\n          rs,\n          0,\n          0,\n          flag2,\n          Math.cos(startAngle) * rs + cx,\n          Math.sin(startAngle) * rs + cy,\n        ],\n        [\"Z\"],\n      ];\n    };\n    F6.registerNode(\"circleBar\", {\n      draw(cfg, group) {\n        /*\n          G:\n          Fan\n          x: the circle center of the fan\n          y: the circle center of the fan\n          rs: inner radius\n          re: outer radius\n          startAngle: start angle\n          endAngle: end angle\n          clockwise: render clockwisely if it is true\n        */\n        const baseR = 30;\n        let nowAngle = 0;\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        cfg.details.forEach((cat) => {\n          cat.values.forEach((item) => {\n            const re = item + baseR;\n            const path0 = getPath(\n              0,\n              0,\n              baseR,\n              item + baseR,\n              nowAngle,\n              (nowAngle += everyIncAngle),\n              false,\n            );\n            const fan = group.addShape(\"path\", {\n              attrs: {\n                path: path0,\n                stroke: \"darkgray\",\n                fill: cat.color,\n              },\n              name: \"path-shape\",\n            });\n            // behavior animation\n            fan.on(\"mouseenter\", () => {\n              fan.animate(\n                {\n                  re: re + 8,\n                },\n                {\n                  repeat: false,\n                  duration: 300,\n                },\n              );\n            });\n            fan.on(\"mouseleave\", () => {\n              fan.animate(\n                {\n                  re,\n                },\n                {\n                  repeat: false,\n                  duration: 300,\n                },\n              );\n            });\n            // set the name\n            fan.set(\"name\", \"littleCircle\");\n          });\n        });\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/bar-chart/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"南丁格尔图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/bar-chart/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/bar-chart/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/built-in-arrows/data.js",
    "content": "import F6 from \"@antv/f6-wx\";\n// 需要用到箭头\nconst data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 50,\n    },\n    {\n      id: \"2\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 100,\n    },\n    {\n      id: \"4\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"5\",\n      x: 350,\n      y: 150,\n    },\n    {\n      id: \"6\",\n      x: 150,\n      y: 200,\n    },\n    {\n      id: \"7\",\n      x: 350,\n      y: 200,\n    },\n    {\n      id: \"8\",\n      x: 150,\n      y: 250,\n    },\n    {\n      id: \"9\",\n      x: 350,\n      y: 250,\n    },\n    {\n      id: \"10\",\n      x: 150,\n      y: 300,\n    },\n    {\n      id: \"11\",\n      x: 350,\n      y: 300,\n    },\n    {\n      id: \"12\",\n      x: 150,\n      y: 350,\n    },\n    {\n      id: \"13\",\n      x: 350,\n      y: 350,\n    },\n    {\n      id: \"14\",\n      x: 150,\n      y: 400,\n    },\n    {\n      id: \"15\",\n      x: 350,\n      y: 400,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"default arrow\",\n      style: {\n        endArrow: true,\n      },\n    },\n    {\n      id: \"edge1\",\n      source: \"2\",\n      target: \"3\",\n      label: \"triangle arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.triangle(),\n        },\n      },\n    },\n    {\n      id: \"edge2\",\n      source: \"4\",\n      target: \"5\",\n      label: \"vee arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.vee(),\n        },\n      },\n    },\n    {\n      id: \"edge3\",\n      source: \"6\",\n      target: \"7\",\n      label: \"circle arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.circle(5, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge4\",\n      source: \"8\",\n      target: \"9\",\n      label: \"diamond arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.diamond(10, 10, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge5\",\n      source: \"10\",\n      target: \"11\",\n      label: \"rect arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.rect(10, 10, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge6\",\n      source: \"12\",\n      target: \"13\",\n      label: \"rect arrow 2\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.rect(10, 2, 5),\n          d: 5,\n        },\n      },\n    },\n    {\n      id: \"edge7\",\n      source: \"14\",\n      target: \"15\",\n      label: \"triangleRect arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.triangleRect(10, 10, 10, 2, 4),\n        },\n      },\n    },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.style.stroke = \"#F6BD16\";\n  console.log(edge.style.endArrow);\n  if (edge.id !== \"edge0\") edge.style.endArrow.fill = \"#F6BD16\";\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/built-in-arrows/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * built in arrows\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        size: 15,\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      modes: {\n        // behaviors\n        default: [\"drag-node\"],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/built-in-arrows/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"默认内置箭头\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/built-in-arrows/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/built-in-arrows/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-circle/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 250, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 300, y: 200, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-circle/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * c-circle\n */\n\n// The symbols for the marker inside the combo\nconst collapseIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n  ];\n};\nconst expandIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n    [\"M\", x - r + r, y - r + 4],\n    [\"L\", x, y + r - 4],\n  ];\n};\n\nF6.registerCombo(\n  \"c-circle\",\n  {\n    drawShape: function draw(cfg, group) {\n      const self = this;\n      // Get the shape style, where the style.r corresponds to the R in the Illustration of Built-in Rect Combo\n      const style = self.getShapeStyle(cfg);\n      // Add a circle shape as keyShape which is the same as the extended 'circle' type Combo\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          ...style,\n          x: 0,\n          y: 0,\n          r: style.r,\n        },\n        draggable: true,\n        name: \"combo-keyShape\",\n      });\n      // Add the marker on the bottom\n      group.addShape(\"marker\", {\n        attrs: {\n          ...style,\n          fill: \"#fff\",\n          opacity: 1,\n          x: 0,\n          y: style.r,\n          r: 10,\n          symbol: collapseIcon,\n        },\n        draggable: true,\n        name: \"combo-marker-shape\",\n      });\n\n      return circle;\n    },\n    // Define the updating logic for the marker\n    afterUpdate: function afterUpdate(cfg, combo) {\n      const self = this;\n      // Get the shape style, where the style.r corresponds to the R in the Illustration of Built-in Rect Combo\n      const style = self.getShapeStyle(cfg);\n      const group = combo.get(\"group\");\n      // Find the marker shape in the graphics group of the Combo\n      const marker = group.find(\n        (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n      );\n      // Update the marker shape\n      marker.attr({\n        x: 0,\n        y: style.r,\n        // The property 'collapsed' in the combo data represents the collapsing state of the Combo\n        // Update the symbol according to 'collapsed'\n        symbol: cfg.collapsed ? expandIcon : collapseIcon,\n      });\n    },\n  },\n  \"circle\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      // Configure the combos globally\n      defaultCombo: {\n        // The type of the combos. You can also assign type in the data of combos\n        type: \"c-circle\",\n        labelCfg: {\n          refY: 2,\n        },\n        // ... Other global configurations for combos\n      },\n      modes: {\n        default: [\"drag-combo\", \"drag-node\", \"drag-canvas\"],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // collapse/expand when click the marker\n    this.graph.on(\"combo:tap\", (e) => {\n      if (e.target.get(\"name\") === \"combo-marker-shape\") {\n        // graph.collapseExpandCombo(e.item.getModel().id);\n        this.graph.collapseExpandCombo(e.item);\n        if (this.graph.get(\"layout\")) this.graph.layout();\n        else this.graph.refreshPositions();\n      }\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-circle/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"带有Marker的圆\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-circle/index.wxml",
    "content": "<text>Click the bottom marker to collapse/expand the combo.</text>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-circle/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-rect/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 250, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 300, y: 200, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-rect/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * c-rect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    // The symbols for the marker inside the combo\n    const collapseIcon = (x, y, r) => {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n      ];\n    };\n    const expandIcon = (x, y, r) => {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n        [\"M\", x - r + r, y - r + 4],\n        [\"L\", x, y + r - 4],\n      ];\n    };\n\n    F6.registerCombo(\n      \"c-rect\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const self = this;\n          // Get the padding from the configuration\n          cfg.padding = cfg.padding || [50, 20, 20, 20];\n          // Get the shape's style, where the style.width and style.height correspond to the width and height in the figure of Illustration of Built-in Rect Combo\n          const style = self.getShapeStyle(cfg);\n          // Add a rect shape as the keyShape which is the same as the extended rect Combo\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              ...style,\n              x: -style.width / 2 - (cfg.padding[3] - cfg.padding[1]) / 2,\n              y: -style.height / 2 - (cfg.padding[0] - cfg.padding[2]) / 2,\n              width: style.width,\n              height: style.height,\n            },\n            draggable: true,\n            name: \"combo-keyShape\",\n          });\n          // Add the circle on the right\n          group.addShape(\"marker\", {\n            attrs: {\n              ...style,\n              fill: \"#fff\",\n              opacity: 1,\n              // cfg.style.width and cfg.style.heigth correspond to the innerWidth and innerHeight in the figure of Illustration of Built-in Rect Combo\n              x: cfg.style.width / 2 + cfg.padding[1],\n              y: (cfg.padding[2] - cfg.padding[0]) / 2,\n              r: 10,\n              symbol: collapseIcon,\n            },\n            draggable: true,\n            name: \"combo-marker-shape\",\n          });\n          return rect;\n        },\n        // Define the updating logic of the right circle\n        afterUpdate: function afterUpdate(cfg, combo) {\n          const group = combo.get(\"group\");\n          // Find the circle shape in the graphics group of the Combo by name\n          const marker = group.find(\n            (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n          );\n          // Update the position of the right circle\n          marker.attr({\n            // cfg.style.width and cfg.style.heigth correspond to the innerWidth and innerHeight in the figure of Illustration of Built-in Rect Combo\n            x: cfg.style.width / 2 + cfg.padding[1],\n            y: (cfg.padding[2] - cfg.padding[0]) / 2,\n            // The property 'collapsed' in the combo data represents the collapsing state of the Combo\n            // Update the symbol according to 'collapsed'\n            symbol: cfg.collapsed ? expandIcon : collapseIcon,\n          });\n        },\n      },\n      \"rect\",\n    );\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      // Configure the combos globally\n      defaultCombo: {\n        // The type of the combos. You can also assign type in the data of combos\n        type: \"c-rect\",\n        // ... Other global configurations for combos\n      },\n      modes: {\n        default: [\"drag-combo\", \"drag-node\", \"drag-canvas\"],\n      },\n    });\n\n    // collapse/expand when click the marker\n    this.graph.on(\"combo:tap\", (e) => {\n      if (e.target.get(\"name\") === \"combo-marker-shape\") {\n        // graph.collapseExpandCombo(e.item.getModel().id);\n        this.graph.collapseExpandCombo(e.item);\n        if (this.graph.get(\"layout\")) this.graph.layout();\n        else this.graph.refreshPositions();\n      }\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-rect/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"带有Marker的矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-rect/index.wxml",
    "content": "<text>Click the bottom marker to collapse/expand the combo.</text>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/c-rect/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card/data.js",
    "content": "export default {\n  nodes: [\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: true,\n      dataType: \"root\",\n      keyInfo: \"this is a card node info\",\n      x: 100,\n      y: 50,\n    },\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: false,\n      dataType: \"subRoot\",\n      keyInfo: \"this is sub root\",\n      x: 100,\n      y: 150,\n    },\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: false,\n      dataType: \"subRoot\",\n      keyInfo: \"this is sub root\",\n      x: 100,\n      y: 250,\n      children: [\n        {\n          name: \"sub\",\n        },\n      ],\n    },\n  ],\n  edges: [],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * card\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const ERROR_COLOR = \"#F5222D\";\n    const getNodeConfig = (node) => {\n      if (node.nodeError) {\n        return {\n          basicColor: ERROR_COLOR,\n          fontColor: \"#FFF\",\n          borderColor: ERROR_COLOR,\n          bgColor: \"#E66A6C\",\n        };\n      }\n      let config = {\n        basicColor: \"#5B8FF9\",\n        fontColor: \"#5B8FF9\",\n        borderColor: \"#5B8FF9\",\n        bgColor: \"#C6E5FF\",\n      };\n      switch (node.type) {\n        case \"root\": {\n          config = {\n            basicColor: \"#E3E6E8\",\n            fontColor: \"rgba(0,0,0,0.85)\",\n            borderColor: \"#E3E6E8\",\n            bgColor: \"#5b8ff9\",\n          };\n          break;\n        }\n        default:\n          break;\n      }\n      return config;\n    };\n\n    const COLLAPSE_ICON = function COLLAPSE_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n      ];\n    };\n    const EXPAND_ICON = function EXPAND_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x - r + 4, y],\n        [\"L\", x - r + 2 * r - 4, y],\n        [\"M\", x - r + r, y - r + 4],\n        [\"L\", x, y + r - 4],\n      ];\n    };\n    const nodeBasicMethod = {\n      createNodeBox: (group, config, w, h, isRoot) => {\n        /* 最外面的大矩形 */\n        const container = group.addShape(\"rect\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            width: w,\n            heigh: h,\n          },\n          name: \"big-rect-shape\",\n        });\n        if (!isRoot) {\n          /* 左边的小圆点 */\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 3,\n              y: h / 2,\n              r: 6,\n              fill: config.basicColor,\n            },\n            name: \"left-dot-shape\",\n          });\n        }\n        /* 矩形 */\n        group.addShape(\"rect\", {\n          attrs: {\n            x: 3,\n            y: 0,\n            width: w - 19,\n            height: h,\n            fill: config.bgColor,\n            stroke: config.borderColor,\n            radius: 2,\n            cursor: \"pointer\",\n          },\n          name: \"rect-shape\",\n        });\n\n        /* 左边的粗线 */\n        group.addShape(\"rect\", {\n          attrs: {\n            x: 3,\n            y: 0,\n            width: 3,\n            height: h,\n            fill: config.basicColor,\n            radius: 1.5,\n          },\n          name: \"left-border-shape\",\n        });\n        return container;\n      },\n      /* 生成树上的 marker */\n      createNodeMarker: (group, collapsed, x, y) => {\n        group.addShape(\"circle\", {\n          attrs: {\n            x,\n            y,\n            r: 13,\n            fill: \"rgba(47, 84, 235, 0.05)\",\n            opacity: 0,\n            zIndex: -2,\n          },\n          name: \"collapse-icon-bg\",\n        });\n        group.addShape(\"marker\", {\n          attrs: {\n            x,\n            y,\n            r: 7,\n            symbol: collapsed ? EXPAND_ICON : COLLAPSE_ICON,\n            stroke: \"rgba(0,0,0,0.25)\",\n            fill: \"rgba(0,0,0,0)\",\n            lineWidth: 1,\n            cursor: \"pointer\",\n          },\n          name: \"collapse-icon\",\n        });\n      },\n      afterDraw: (cfg, group) => {\n        /* 操作 marker 的背景色显示隐藏 */\n        const icon = group.find(\n          (element) => element.get(\"name\") === \"collapse-icon\",\n        );\n        if (icon) {\n          const bg = group.find(\n            (element) => element.get(\"name\") === \"collapse-icon-bg\",\n          );\n          icon.on(\"mouseenter\", () => {\n            bg.attr(\"opacity\", 1);\n            this.graph.get(\"canvas\").draw();\n          });\n          icon.on(\"mouseleave\", () => {\n            bg.attr(\"opacity\", 0);\n            this.graph.get(\"canvas\").draw();\n          });\n        }\n        /* ip 显示 */\n        const ipBox = group.find((element) => element.get(\"name\") === \"ip-box\");\n        if (ipBox) {\n          /* ip 复制的几个元素 */\n          const ipLine = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-line\",\n          );\n          const ipBG = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-bg\",\n          );\n          const ipIcon = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-icon\",\n          );\n          const ipCPBox = group.find(\n            (element) => element.get(\"name\") === \"ip-cp-box\",\n          );\n\n          const onMouseEnter = () => {\n            ipLine.attr(\"opacity\", 1);\n            ipBG.attr(\"opacity\", 1);\n            ipIcon.attr(\"opacity\", 1);\n            this.graph.get(\"canvas\").draw();\n          };\n          const onMouseLeave = () => {\n            ipLine.attr(\"opacity\", 0);\n            ipBG.attr(\"opacity\", 0);\n            ipIcon.attr(\"opacity\", 0);\n            this.graph.get(\"canvas\").draw();\n          };\n          ipBox.on(\"mouseenter\", () => {\n            onMouseEnter();\n          });\n          ipBox.on(\"mouseleave\", () => {\n            onMouseLeave();\n          });\n          ipCPBox.on(\"mouseenter\", () => {\n            onMouseEnter();\n          });\n          ipCPBox.on(\"mouseleave\", () => {\n            onMouseLeave();\n          });\n          ipCPBox.on(\"click\", () => {});\n        }\n      },\n      setState: (name, value, item) => {\n        const hasOpacityClass = [\n          \"ip-cp-line\",\n          \"ip-cp-bg\",\n          \"ip-cp-icon\",\n          \"ip-cp-box\",\n          \"ip-box\",\n          \"collapse-icon-bg\",\n        ];\n        const group = item.getContainer();\n        const childrens = group.get(\"children\");\n        this.graph.setAutoPaint(false);\n        if (name === \"emptiness\") {\n          if (value) {\n            childrens.forEach((shape) => {\n              if (hasOpacityClass.indexOf(shape.get(\"name\")) > -1) {\n                return;\n              }\n              shape.attr(\"opacity\", 0.4);\n            });\n          } else {\n            childrens.forEach((shape) => {\n              if (hasOpacityClass.indexOf(shape.get(\"name\")) > -1) {\n                return;\n              }\n              shape.attr(\"opacity\", 1);\n            });\n          }\n        }\n        this.graph.setAutoPaint(true);\n      },\n    };\n\n    F6.registerNode(\"card-node\", {\n      draw: (cfg, group) => {\n        const config = getNodeConfig(cfg);\n        const isRoot = cfg.dataType === \"root\";\n        const { nodeError } = cfg;\n        /* the biggest rect */\n        const container = nodeBasicMethod.createNodeBox(\n          group,\n          config,\n          243,\n          64,\n          isRoot,\n        );\n\n        if (cfg.dataType !== \"root\") {\n          /* the type text */\n          group.addShape(\"text\", {\n            attrs: {\n              text: cfg.dataType,\n              x: 3,\n              y: -10,\n              fontSize: 12,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: \"rgba(0,0,0,0.65)\",\n            },\n            name: \"type-text-shape\",\n          });\n        }\n\n        if (cfg.ip) {\n          /* ip start */\n          /* ipBox */\n          const ipRect = group.addShape(\"rect\", {\n            attrs: {\n              fill: nodeError ? null : \"#FFF\",\n              stroke: nodeError ? \"rgba(255,255,255,0.65)\" : null,\n              radius: 2,\n              cursor: \"pointer\",\n            },\n            name: \"ip-container-shape\",\n          });\n\n          /* ip */\n          const ipText = group.addShape(\"text\", {\n            attrs: {\n              text: cfg.ip,\n              x: 0,\n              y: 19,\n              fontSize: 12,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: nodeError ? \"rgba(255,255,255,0.85)\" : \"rgba(0,0,0,0.65)\",\n              cursor: \"pointer\",\n            },\n            name: \"ip-text-shape\",\n          });\n\n          const ipBBox = ipText.getBBox();\n          /* the distance from the IP to the right is 12px */\n          ipText.attr({\n            x: 224 - 12 - ipBBox.width,\n          });\n          /* ipBox */\n          ipRect.attr({\n            x: 224 - 12 - ipBBox.width - 4,\n            y: ipBBox.minY - 5,\n            width: ipBBox.width + 8,\n            height: ipBBox.height + 10,\n          });\n\n          /* a transparent shape on the IP for click listener */\n          group.addShape(\"rect\", {\n            attrs: {\n              stroke: \"\",\n              cursor: \"pointer\",\n              x: 224 - 12 - ipBBox.width - 4,\n              y: ipBBox.minY - 5,\n              width: ipBBox.width + 8,\n              height: ipBBox.height + 10,\n              fill: \"#fff\",\n              opacity: 0,\n            },\n            name: \"ip-box\",\n          });\n\n          /* copyIpLine */\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 194,\n              y: 7,\n              width: 1,\n              height: 24,\n              fill: \"#E3E6E8\",\n              opacity: 0,\n            },\n            name: \"ip-cp-line\",\n          });\n          /* copyIpBG */\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 195,\n              y: 8,\n              width: 22,\n              height: 22,\n              fill: \"#FFF\",\n              cursor: \"pointer\",\n              opacity: 0,\n            },\n            name: \"ip-cp-bg\",\n          });\n          /* copyIpIcon */\n          group.addShape(\"image\", {\n            attrs: {\n              x: 200,\n              y: 13,\n              height: 12,\n              width: 10,\n              img: \"https://os.alipayobjects.com/rmsportal/DFhnQEhHyPjSGYW.png\",\n              cursor: \"pointer\",\n              opacity: 0,\n            },\n            name: \"ip-cp-icon\",\n          });\n          /* a transparent rect on the icon area for click listener */\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 195,\n              y: 8,\n              width: 22,\n              height: 22,\n              fill: \"#FFF\",\n              cursor: \"pointer\",\n              opacity: 0,\n            },\n            name: \"ip-cp-box\",\n            tooltip: \"Copy the IP\",\n          });\n\n          /* ip end */\n        }\n\n        /* name */\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.name,\n            x: 19,\n            y: 19,\n            fontSize: 14,\n            fontWeight: 700,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: config.fontColor,\n            cursor: \"pointer\",\n          },\n          name: \"name-text-shape\",\n        });\n\n        /* the description text */\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.keyInfo,\n            x: 19,\n            y: 45,\n            fontSize: 14,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: config.fontColor,\n            cursor: \"pointer\",\n          },\n          name: \"bottom-text-shape\",\n        });\n\n        if (nodeError) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 191,\n              y: 62,\n              text: \"⚠️\",\n              fill: \"#000\",\n              fontSize: 18,\n            },\n            name: \"error-text-shape\",\n          });\n        }\n\n        const hasChildren = cfg.children && cfg.children.length > 0;\n        if (hasChildren) {\n          nodeBasicMethod.createNodeMarker(group, cfg.collapsed, 236, 32);\n        }\n        return container;\n      },\n      afterDraw: nodeBasicMethod.afterDraw,\n      setState: nodeBasicMethod.setState,\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        type: \"card-node\",\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"卡片\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      title: \"node1\",\n      error: true,\n      nodeType: \"a\",\n      id: \"node1\",\n      nodeLevel: 2,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      x: 100,\n      y: 100,\n    },\n    {\n      title: \"node2\",\n      error: false,\n      nodeType: \"b\",\n      id: \"node2\",\n      nodeLevel: 0,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      x: 100,\n      y: 200,\n    },\n    {\n      title: \"node3\",\n      error: false,\n      nodeType: \"a\",\n      id: \"node3\",\n      nodeLevel: 3,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      collapse: true,\n      x: 100,\n      y: 300,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card-node/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * card-node\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const ICON_MAP = {\n      a: \"https://gw.alipayobjects.com/mdn/rms_8fd2eb/afts/img/A*0HC-SawWYUoAAAAAAAAAAABkARQnAQ\",\n      b: \"https://gw.alipayobjects.com/mdn/rms_8fd2eb/afts/img/A*sxK0RJ1UhNkAAAAAAAAAAABkARQnAQ\",\n    };\n\n    F6.registerNode(\n      \"card-node\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const color = cfg.error ? \"#F4664A\" : \"#30BF78\";\n          const r = 2;\n          const shape = group.addShape(\"rect\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              width: 200,\n              height: 60,\n              stroke: color,\n              radius: r,\n            },\n            name: \"main-box\",\n            draggable: true,\n          });\n\n          group.addShape(\"rect\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              width: 200,\n              height: 20,\n              fill: color,\n              radius: [r, r, 0, 0],\n            },\n            name: \"title-box\",\n            draggable: true,\n          });\n\n          // left icon\n          group.addShape(\"image\", {\n            attrs: {\n              x: 4,\n              y: 2,\n              height: 16,\n              width: 16,\n              cursor: \"pointer\",\n              img: ICON_MAP[cfg.nodeType || \"app\"],\n            },\n            name: \"node-icon\",\n          });\n\n          // title text\n          group.addShape(\"text\", {\n            attrs: {\n              textBaseline: \"top\",\n              y: 2,\n              x: 24,\n              lineHeight: 20,\n              text: cfg.title,\n              fill: \"#fff\",\n            },\n            name: \"title\",\n          });\n\n          if (cfg.nodeLevel > 0) {\n            group.addShape(\"marker\", {\n              attrs: {\n                x: 184,\n                y: 30,\n                r: 6,\n                cursor: \"pointer\",\n                symbol: cfg.collapse ? F6.Marker.expand : F6.Marker.collapse,\n                stroke: \"#666\",\n                lineWidth: 1,\n              },\n              name: \"collapse-icon\",\n            });\n          }\n\n          // The content list\n          cfg.panels.forEach((item, index) => {\n            // name text\n            group.addShape(\"text\", {\n              attrs: {\n                textBaseline: \"top\",\n                y: 25,\n                x: 24 + index * 60,\n                lineHeight: 20,\n                text: item.title,\n                fill: \"rgba(0,0,0, 0.4)\",\n              },\n              name: `index-title-${index}`,\n            });\n\n            // value text\n            group.addShape(\"text\", {\n              attrs: {\n                textBaseline: \"top\",\n                y: 42,\n                x: 24 + index * 60,\n                lineHeight: 20,\n                text: item.value,\n                fill: \"#595959\",\n              },\n              name: `index-title-${index}`,\n            });\n          });\n          return shape;\n        },\n      },\n      \"single-node\",\n    );\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        type: \"card-node\",\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card-node/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"卡片2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card-node/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/card-node/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"circle\",\n      label: \"Circle\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * circle\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      defaultNode: {\n        /* node type */\n        type: \"circle\",\n        /* node size */\n        size: [60],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"圆形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle-with-combo/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 250,\n      y: 150,\n      comboId: \"combo\",\n    },\n    {\n      id: \"node2\",\n      x: 350,\n      y: 150,\n      comboId: \"combo\",\n    },\n  ],\n  combos: [\n    {\n      id: \"combo\",\n      label: \"Combo\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle-with-combo/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * circle-with-combo\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n        ],\n      },\n      defaultCombo: {\n        type: \"circle\",\n        /* style for the keyShape */\n        // style: {\n        //   lineWidth: 1,\n        // },\n        labelCfg: {\n          /* label's offset to the keyShape */\n          // refY: 10,\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"top\",\n          /* label's style */\n          // style: {\n          //   fontSize: 18,\n          // },\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      /* you can extend it or override it as you want */\n      // comboStateStyles: {\n      //   active: {\n      //     fill: '#f00',\n      //     opacity: 0.5\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle-with-combo/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"圆形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle-with-combo/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/circle-with-combo/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic1/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node0\",\n      x: 200,\n      y: 10,\n      size: 20,\n    },\n    {\n      id: \"node1\",\n      x: 200,\n      y: 50,\n      label: \"1222\",\n      type: \"my-rect\",\n    },\n    {\n      id: \"node2\",\n      x: 150,\n      y: 150,\n      type: \"my-rect\",\n    },\n    {\n      id: \"node3\",\n      x: 250,\n      y: 150,\n      type: \"my-rect\",\n    },\n    {\n      id: \"node4\",\n      x: 200,\n      y: 250,\n      type: \"my-rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node0\",\n      target: \"node1\",\n    },\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n    },\n    {\n      source: \"node2\",\n      target: \"node4\",\n    },\n    {\n      source: \"node3\",\n      target: \"node4\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic1/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * cubic1\n */\n\nF6.registerNode(\n  \"my-rect\",\n  {\n    getAnchorPoints: function getAnchorPoints() {\n      return [\n        [0.5, 0],\n        [0.5, 1],\n      ];\n    },\n  },\n  \"rect\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultEdge: {\n        type: \"cubic-vertical\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic1/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"三次贝塞尔曲线-垂直\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic1/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic1/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node5\",\n      x: 150,\n      y: 200,\n      label: \"5\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node6\",\n      x: 300,\n      y: 150,\n      label: \"6\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node7\",\n      x: 300,\n      y: 250,\n      label: \"7\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node5\",\n      target: \"node6\",\n      type: \"cubic-horizontal\",\n    },\n    {\n      source: \"node5\",\n      target: \"node7\",\n      type: \"cubic-horizontal\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic2/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * cubic2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic2/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"三次贝塞尔曲线-水平\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic2/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/cubic2/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-arrows/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 50,\n    },\n    {\n      id: \"2\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 100,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"custom arrow 1\",\n      style: {\n        endArrow: {\n          path: \"M 3,-5 L 3,5 L 15,10 L 15,-10 Z\",\n        },\n      },\n    },\n    {\n      id: \"edge1\",\n      source: \"2\",\n      target: \"3\",\n      label: \"custom arrow 2\",\n      style: {\n        endArrow: {\n          path: \"M0,0 L10,4 L14,14 L18,4 L28,0 L18,-4 L14,-14 L10,-4 Z\",\n        },\n      },\n    },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.style.stroke = \"#F6BD16\";\n  console.log(edge.style.endArrow);\n  edge.style.endArrow.fill = \"#F6BD16\";\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-arrows/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * custom Arrows\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        size: 15,\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      modes: {\n        // behaviors\n        default: [\"drag-node\"],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-arrows/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义箭头\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-arrows/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-arrows/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"7\",\n      x: 150,\n      y: 100,\n      size: 40,\n      anchorPoints: [\n        [1, 0.5],\n        [1, 0],\n      ],\n    },\n    {\n      id: \"8\",\n      x: 300,\n      y: 200,\n      size: 40,\n      anchorPoints: [\n        [0, 0.5],\n        [0, 1],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"7\",\n      target: \"8\",\n      sourceAnchor: 0,\n      targetAnchor: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * custom-polyline\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    // 注册边\n    F6.registerEdge(\n      \"line-arrow\",\n      {\n        getPath(points) {\n          const startPoint = points[0];\n          const endPoint = points[1];\n          return [\n            [\"M\", startPoint.x, startPoint.y],\n            [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y],\n            [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y],\n            [\"L\", endPoint.x, endPoint.y],\n          ];\n        },\n        getShapeStyle(cfg) {\n          const { startPoint } = cfg;\n          const { endPoint } = cfg;\n          const controlPoints = this.getControlPoints(cfg);\n          let points = [startPoint]; // the start point\n          // the control points\n          if (controlPoints) {\n            points = points.concat(controlPoints);\n          }\n          // the end point\n          points.push(endPoint);\n          const path = this.getPath(points);\n          const style = Object.assign(\n            {},\n            F6.Global.defaultEdge.style,\n            {\n              stroke: \"#BBB\",\n              lineWidth: 1,\n              path,\n            },\n            cfg.style,\n          );\n          return style;\n        },\n      },\n      \"line\",\n    );\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\", \"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"circle\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        linkPoints: {\n          left: true,\n          right: true,\n          fill: \"#fff\",\n          stroke: \"#1890FF\",\n          size: 3,\n        },\n      },\n      defaultEdge: {\n        type: \"line-arrow\",\n        style: {\n          stroke: \"#F6BD16\",\n          startArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n          endArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义折线\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"7\",\n      x: 150,\n      y: 100,\n      size: 40,\n      anchorPoints: [\n        [1, 0.5],\n        [1, 0],\n      ],\n    },\n    {\n      id: \"8\",\n      x: 300,\n      y: 200,\n      size: 40,\n      anchorPoints: [\n        [0, 0.5],\n        [0, 1],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"7\",\n      target: \"8\",\n      sourceAnchor: 0,\n      targetAnchor: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline2/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * custom-polyline2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerEdge(\"line-arrow\", {\n      options: {\n        style: {\n          stroke: \"#ccc\",\n        },\n      },\n      draw: function draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n\n        const stroke =\n          (cfg.style && cfg.style.stroke) || this.options.style.stroke;\n        const startArrow = (cfg.style && cfg.style.startArrow) || undefined;\n        const endArrow = (cfg.style && cfg.style.endArrow) || undefined;\n\n        const keyShape = group.addShape(\"path\", {\n          attrs: {\n            path: [\n              [\"M\", startPoint.x, startPoint.y],\n              [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y],\n              [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y],\n              [\"L\", endPoint.x, endPoint.y],\n            ],\n            stroke,\n            lineWidth: 1,\n            startArrow,\n            endArrow,\n          },\n          className: \"edge-shape\",\n          name: \"edge-shape\",\n        });\n        return keyShape;\n      },\n    });\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\", \"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"circle\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        linkPoints: {\n          left: true,\n          right: true,\n          fill: \"#fff\",\n          stroke: \"#1890FF\",\n          size: 3,\n        },\n      },\n      defaultEdge: {\n        type: \"line-arrow\",\n        style: {\n          stroke: \"#F6BD16\",\n          startArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n          endArrow: {\n            path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n            fill: \"#F6BD16\",\n          },\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline2/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义折线2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline2/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/custom-polyline2/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/diamond/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"diamond\",\n      label: \"Diamond\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/diamond/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * diamond\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      defaultNode: {\n        /* node type */\n        type: \"diamond\",\n        /* node size */\n        size: [80, 60],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/diamond/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"模态菱形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/diamond/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/diamond/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/donut/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"donut\",\n      label: \"Donut\",\n      x: 250,\n      y: 150,\n      // the attributes for drawing donut\n      donutAttrs: {\n        prop1: 10,\n        prop2: 20,\n        prop3: 25,\n      },\n      // the color map for drawing donut\n      donutColorMap: {\n        prop1: \"#8eaade\",\n        prop2: \"#5c7cb8\",\n        prop3: \"#1e3f7d\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/donut/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * donut\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      fitViewPadding: 60,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        /* node type, the priority is lower than the type in the node data */\n        type: \"donut\",\n        /* node size */\n        size: 60,\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        // linkPoints: {\n        //   top: true,\n        //   right: true,\n        //   bottom: true,\n        //   left: true,\n        //   /* linkPoints' size, 8 by default */\n        //   //   size: 5,\n        //   /* linkPoints' style */\n        //   //   fill: '#ccc',\n        //   //   stroke: '#333',\n        //   //   lineWidth: 2,\n        // },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/donut/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"甜甜圈\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/donut/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/donut/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-bg/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 200,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 350,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"edge 1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n      label: \"edge 2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n      label: \"edge 3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-bg/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * edge-bg\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        type: \"circle\",\n        labelCfg: {\n          position: \"bottom\",\n        },\n      },\n      defaultEdge: {\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            fill: \"#1890ff\",\n            fontSize: 14,\n            background: {\n              fill: \"#ffffff\",\n              stroke: \"#9EC9FF\",\n              padding: [2, 2, 2, 2],\n              radius: 2,\n            },\n          },\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        // style configurations for hover state\n        hover: {\n          fillOpacity: 0.8,\n        },\n        // style configurations for selected state\n        selected: {\n          lineWidth: 5,\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-bg/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"边上文本背景\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-bg/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-bg/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-mul-label/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 100,\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      // The left and right labels\n      label: [\"hello\", \"world\"],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-mul-label/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * 多标签边\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerEdge(\"multipleLabelsEdge\", {\n      options: {\n        style: {\n          stroke: \"#000\",\n        },\n      },\n      labelAutoRotate: true,\n      draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n        const stroke =\n          (cfg.style && cfg.style.stroke) || this.options.style.stroke;\n\n        const shape = group.addShape(\"path\", {\n          attrs: {\n            stroke,\n            path: [\n              [\"M\", startPoint.x, startPoint.y],\n              [\"L\", endPoint.x, endPoint.y],\n            ],\n          },\n          name: \"path-shape\",\n        });\n        if (cfg.label && cfg.label.length) {\n          // the left label\n          group.addShape(\"text\", {\n            attrs: {\n              text: cfg.label[0],\n              fill: \"#595959\",\n              textAlign: \"start\",\n              textBaseline: \"middle\",\n              x: startPoint.x,\n              y: startPoint.y - 10,\n            },\n            name: \"left-text-shape\",\n          });\n          if (cfg.label.length > 1) {\n            // the right label\n            group.addShape(\"text\", {\n              attrs: {\n                text: cfg.label[1],\n                fill: \"#595959\",\n                textAlign: \"end\",\n                textBaseline: \"middle\",\n                x: endPoint.x,\n                y: endPoint.y - 10,\n              },\n              name: \"right-text-shape\",\n            });\n          }\n        }\n        // return the keyShape\n        return shape;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\n          {\n            type: \"drag-node\",\n            delegate: false,\n          },\n          \"drag-canvas\",\n          {\n            type: \"zoom-canvas\",\n            sensitivity: 0.5,\n          },\n        ],\n      },\n      defaultNode: {\n        type: \"circle\",\n        size: [50],\n        linkPoints: {\n          left: true,\n          right: true,\n        },\n      },\n      defaultEdge: {\n        type: \"multipleLabelsEdge\",\n        style: {\n          stroke: \"#F6BD16\",\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-mul-label/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"多标签边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-mul-label/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/edge-mul-label/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/ellipse/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"ellipse\",\n      label: \"Ellipse\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/ellipse/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * ellipse\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        type: \"ellipse\",\n        size: [80, 50],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/ellipse/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"椭圆\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/ellipse/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/ellipse/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/extra-shape/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 100,\n    },\n    {\n      id: \"node3\",\n      x: 300,\n      y: 200,\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      midPointColor: \"#f00\",\n      quatileColor: \"#f00\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      midPointColor: \"#0f0\",\n      quatileColor: \"#0f0\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/extra-shape/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * extraShapes\n */\n// 注册边\nF6.registerEdge(\n  \"extra-shape-edge\",\n  {\n    afterDraw(cfg, group) {\n      // get the first shape in the graphics group of this edge, it is the path of the edge here\n      // 获取图形组中的第一个图形，在这里就是边的路径图形\n      const shape = group.get(\"children\")[0];\n      // get the coordinate of the mid point on the path\n      // 获取路径图形的中点坐标\n      const midPoint = shape.getPoint(0.5);\n      const rectColor = cfg.midPointColor || \"#333\";\n      // add a rect on the mid point of the path. note that the origin of a rect shape is on its lefttop\n      // 在中点增加一个矩形，注意矩形的原点在其左上角\n      group.addShape(\"rect\", {\n        attrs: {\n          width: 10,\n          height: 10,\n          fill: rectColor || \"#333\",\n          // x and y should be minus width / 2 and height / 2 respectively to translate the center of the rect to the midPoint\n          // x 和 y 分别减去 width / 2 与 height / 2，使矩形中心在 midPoint 上\n          x: midPoint.x - 5,\n          y: midPoint.y - 5,\n        },\n      });\n\n      // get the coordinate of the quatile on the path\n      // 获取路径上的四分位点坐标\n      const quatile = shape.getPoint(0.25);\n      const quatileColor = cfg.quatileColor || \"#333\";\n      // add a circle on the quatile of the path\n      // 在四分位点上放置一个圆形\n      group.addShape(\"circle\", {\n        attrs: {\n          r: 5,\n          fill: quatileColor || \"#333\",\n          x: quatile.x,\n          y: quatile.y,\n        },\n      });\n    },\n    update: undefined,\n  },\n  \"cubic\",\n);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\", \"drag-canvas\"],\n      },\n      defaultEdge: {\n        type: \"extra-shape-edge\",\n        style: {\n          stroke: \"#F6BD16\",\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/extra-shape/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"添加额外图形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/extra-shape/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/extra-shape/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/image/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"image\",\n      img: \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/image/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * image\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      defaultNode: {\n        type: \"image\",\n        size: [260, 80],\n        clipCfg: {\n          show: false,\n          // Clip type options: circle, ellipse, rect, path\n          type: \"circle\",\n          // circle\n          r: 30,\n          // clip style\n          style: {\n            lineWidth: 1,\n          },\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/image/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"图片\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/image/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/image/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len/data.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nconst globalFontSize = 12;\n\nconst fittingString = (str, maxWidth, fontSize) => {\n  const ellipsis = \"...\";\n  const ellipsisLength = F6.Util.getTextSize(ellipsis, fontSize)[0];\n  let currentWidth = 0;\n  let res = str;\n  const pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\"); // distinguish the Chinese charactors and letters\n  str.split(\"\").forEach((letter, i) => {\n    if (currentWidth > maxWidth - ellipsisLength) return;\n    if (pattern.test(letter)) {\n      // Chinese charactors\n      currentWidth += fontSize;\n    } else {\n      // get the width of single letter according to the fontSize\n      currentWidth += F6.Util.getLetterWidth(letter, fontSize);\n    }\n    if (currentWidth > maxWidth - ellipsisLength) {\n      res = `${str.substr(0, i)}${ellipsis}`;\n    }\n  });\n  return res;\n};\n\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      size: 40,\n      label: \"This label is too long to be displayed\",\n      id: \"node1\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      x: 300,\n      y: 100,\n      size: 80,\n      label: \"This label is also too long to be displayed\",\n      id: \"node2\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"This label is too long to be displayed\",\n      labelCfg: {\n        refY: 20,\n        style: {\n          fontSize: globalFontSize,\n        },\n      },\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n\n// Modify the label in the data\ndata.nodes.forEach((node) => {\n  node.label = fittingString(node.label, node.size, globalFontSize);\n});\ndata.edges.forEach((edge) => {\n  edge.label = fittingString(edge.label, 120, globalFontSize);\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * label-len\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        labelCfg: {\n          style: {\n            fontSize: 12,\n          },\n        },\n      },\n      defaultEdge: {\n        color: \"#F6BD16\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"文本超长\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len1/data.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nconst fittingString = (str, maxWidth, fontSize) => {\n  let currentWidth = 0;\n  let res = str;\n  const pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\"); // distinguish the Chinese charactors and letters\n  str.split(\"\").forEach((letter, i) => {\n    if (currentWidth > maxWidth) return;\n    if (pattern.test(letter)) {\n      // Chinese charactors\n      currentWidth += fontSize;\n    } else {\n      // get the width of single letter according to the fontSize\n      currentWidth += F6.Util.getLetterWidth(letter, fontSize);\n    }\n    if (currentWidth > maxWidth) {\n      res = `${str.substr(0, i)}\\n${str.substr(i)}`;\n    }\n  });\n  return res;\n};\n\nconst globalFontSize = 12;\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      label: fittingString(\n        \"Break the line if it is too long\",\n        80,\n        globalFontSize,\n      ),\n      id: \"node1\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      x: 300,\n      y: 100,\n      label: fittingString(\n        \"Break the line if it is too long\",\n        80,\n        globalFontSize,\n      ),\n      id: \"node2\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: fittingString(\n        \"Break the line if it is too long\",\n        100,\n        globalFontSize,\n      ),\n      labelCfg: {\n        refY: 20,\n      },\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len1/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * label-len1\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        type: \"rect\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        color: \"#F6BD16\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len1/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"使用换行符处理\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len1/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/label-len1/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/line-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeB\",\n      x: 150,\n      y: 150,\n      label: \"Line1\",\n      type: \"circleLine\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeB2\",\n      x: 500,\n      y: 150,\n      label: \"Line2\",\n      type: \"circleLine\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 50, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [50, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 50, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeB\",\n      target: \"nodeB2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/line-chart/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * line-chart\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    F6.registerNode(\"circleLine\", {\n      draw(cfg, group) {\n        const baseR = 30;\n        let nowAngle = 0;\n\n        // Ref line\n        let refR = baseR;\n        const refInc = 10;\n        for (let i = 0; i < 5; i++) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              r: (refR += refInc),\n              stroke: \"#bae7ff\",\n              lineDash: [4, 4],\n            },\n            name: \"circle-shape\",\n          });\n        }\n\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        cfg.details.forEach((cat) => {\n          // 计算一系列点的位置\n          const postions = [];\n          cat.values.forEach((item, index) => {\n            const r = baseR + item;\n            const xPos = r * Math.cos(nowAngle);\n            const yPos = r * Math.sin(nowAngle);\n            nowAngle += everyIncAngle;\n            postions.push([xPos, yPos]);\n            if (index === 4) {\n              const r_ = baseR + item;\n              const xPos_ = r_ * Math.cos(nowAngle);\n              const yPos_ = r_ * Math.sin(nowAngle);\n              postions.push([xPos_, yPos_]);\n            }\n          });\n          const pathArrayL = postions.map((item) => [\"L\", ...item]);\n          // add the connecting line\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", 0, 0], // the top vertex\n                ...pathArrayL,\n                [\"Z\"], // close the path\n              ],\n              stroke: cat.color,\n            },\n            name: \"path-shape\",\n          });\n\n          postions.forEach((pos, index) => {\n            if (index !== 5) {\n              const littleCircle = group.addShape(\"circle\", {\n                // attrs: style\n                attrs: {\n                  x: pos[0],\n                  y: pos[1],\n                  r: 2,\n                  fill: \"black\",\n                  stroke: cat.color,\n                  cursor: \"pointer\",\n                },\n                name: \"circle-shape\",\n              });\n              // 加上交互动画\n              littleCircle.on(\"mouseenter\", () => {\n                littleCircle.animate(\n                  {\n                    r: 5,\n                  },\n                  {\n                    repeat: false,\n                    duration: 200,\n                  },\n                );\n              });\n              littleCircle.on(\"mouseleave\", () => {\n                littleCircle.animate(\n                  {\n                    r: 2,\n                  },\n                  {\n                    repeat: false,\n                    duration: 200,\n                  },\n                );\n              });\n              // set the name\n              littleCircle.set(\"name\", \"littleCircle\");\n            }\n          });\n        });\n\n        // add a circle with the same color with the background color\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0, // 居中\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/line-chart/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"折线图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/line-chart/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/line-chart/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/list/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"shape2\",\n      x: 0,\n      y: 0,\n      type: \"expandNode\",\n      name: \"网站引流\",\n      values: [\n        {\n          key: \"曝光率\",\n          value: \"19.09\",\n        },\n        {\n          key: \"流入UV\",\n          value: \"910\",\n        },\n        {\n          key: \"点击率\",\n          value: \"90\",\n        },\n        {\n          key: \"占比\",\n          value: \"90\",\n        },\n      ],\n      properties: [\n        {\n          name: \"搜索\",\n          value1: \"102\",\n          value2: \"102\",\n          value3: \"102\",\n          value4: \"102\",\n        },\n        {\n          name: \"扫一扫\",\n          value1: \"102\",\n          value2: \"102\",\n          value3: \"102\",\n          value4: \"102\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/list/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data_ from \"./data\";\n/**\n * list:列表\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerNode(\"expandNode\", {\n      draw: function draw(cfg, group) {\n        const mainGroup = group.addGroup({\n          id: \"main-group\",\n        });\n        const keyShape = mainGroup.addShape(\"rect\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            width: 100 + 60 * cfg.values.length,\n            height: 50,\n            fill: \"#C6E5FF\",\n          },\n          name: \"key-rect-shape\",\n        });\n\n        // name text\n        mainGroup.addShape(\"text\", {\n          attrs: {\n            text: cfg.name,\n            fill: \"#000\",\n            width: 130,\n            x: 10,\n            y: 32,\n          },\n          name: \"name-text-shape\",\n        });\n\n        const subGroup = group.addGroup({\n          id: \"sub-group\",\n        });\n        cfg.values.forEach((data, index) => {\n          subGroup.addShape(\"rect\", {\n            attrs: {\n              x: 110 + index * 60,\n              y: 0,\n              width: 50,\n              height: 50,\n            },\n            name: \"rect-shape\",\n          });\n\n          subGroup.addShape(\"text\", {\n            attrs: {\n              text: data.key,\n              fill: \"#000\",\n              x: 130 + index * 60,\n              y: 20,\n              fontSize: 10,\n              textBaseline: \"middle\",\n              className: \"sub-group-text\",\n            },\n            name: \"sub-text-shape1\",\n          });\n\n          subGroup.addShape(\"text\", {\n            attrs: {\n              text: data.value,\n              fill: \"#000\",\n              x: 130 + index * 60,\n              y: 30,\n              fontSize: 10,\n              textBaseline: \"middle\",\n              textAlign: \"left\",\n              className: \"sub-group-text\",\n            },\n            name: \"name-text-shape2\",\n          });\n        });\n\n        const listGroup = group.addGroup({\n          id: \"detail-list-group\",\n        });\n\n        listGroup.addShape(\"rect\", {\n          attrs: {\n            width: 100 + 60 * cfg.values.length - 70,\n            height: 30 * cfg.properties.length + 20,\n            fill: \"#fff\",\n            x: 70,\n            y: 30,\n          },\n          name: \"list-rect-shape1\",\n        });\n\n        const rectWidth = 100 + 60 * cfg.values.length - 80;\n        cfg.properties.forEach((property, index) => {\n          listGroup.addShape(\"rect\", {\n            attrs: {\n              width: rectWidth,\n              height: 30,\n              fill: \"#9EC9FF\",\n              x: 80,\n              y: 40 * index + 40,\n            },\n            name: \"list-rect-shape2\",\n          });\n          let count = 0;\n          for (const p in property) {\n            // 每个rect中添加5个文本\n            listGroup.addShape(\"text\", {\n              attrs: {\n                text: property[p],\n                fill: \"#000\",\n                x: 85 + count * (rectWidth / cfg.values.length) - count * 10,\n                y: 40 * index + 40 + 15,\n                fontSize: 10,\n                textBaseline: \"middle\",\n                textAlign: \"left\",\n              },\n              name: \"text-shape\",\n            });\n            count++;\n          }\n        });\n        listGroup.hide();\n        return keyShape;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    this.graph.on(\"node:tap\", function (evt) {\n      const { target } = evt;\n\n      const parentGroup = target.get(\"parent\").get(\"parent\");\n      const detailGroup = parentGroup.findById(\"detail-list-group\");\n      // 将sub-group中的内容网上移动一段距离\n      const subGroup = parentGroup.findById(\"sub-group\");\n      const keyTexts = subGroup.findAll((item) => {\n        return item.attr(\"className\") === \"sub-group-text\";\n      });\n      const isVisible = detailGroup.get(\"visible\");\n      if (isVisible) {\n        detailGroup.hide();\n        keyTexts.forEach((text) => {\n          const top = text.attr(\"y\");\n          text.attr(\"y\", top + 10);\n        });\n      } else {\n        keyTexts.forEach((text) => {\n          const top = text.attr(\"y\");\n          text.attr(\"y\", top - 10);\n        });\n        detailGroup.show();\n      }\n      this.graph.paint();\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/list/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"列表\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/list/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/list/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/loop/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 150,\n    },\n  ],\n  edges: [\n    // 内置 loop\n    {\n      source: \"0\",\n      target: \"0\",\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/loop/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * loop\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        // 支持的 behavior\n        default: [\"drag-node\"],\n      },\n      defaultEdge: {\n        type: \"loop\",\n        /* you can configure the global edge style as following lines */\n        style: {\n          // stroke: '#F6BD16',\n          endArrow: {\n            path: \"M 0,0 L 20,10 L 20,-10 Z\",\n            fill: \"#eee\",\n          },\n        },\n        // 更多关于 loop 的配置请参考http://antv.alipay.com/zh/docs/manual/middle/elements/edges/loop/#%E8%87%AA%E7%8E%AF%E7%89%B9%E6%AE%8A%E9%85%8D%E7%BD%AE-loopcfg\n        loopCfg: {\n          position: \"top\",\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/loop/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自环边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/loop/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/loop/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/mode-rect/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"rect1\",\n      label: \"rect1\",\n      description: \"description, hidden when undefined\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/mode-rect/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * mode-rect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      fitCenter: true,\n      defaultNode: {\n        type: \"modelRect\",\n        size: [270, 80],\n        style: {\n          radius: 5,\n          stroke: \"#69c0ff\",\n          fill: \"#ffffff\",\n          lineWidth: 1,\n          fillOpacity: 1,\n        },\n        // label configurations\n        labelCfg: {\n          style: {\n            fill: \"#595959\",\n            fontSize: 14,\n          },\n          offset: 30,\n        },\n        // left rect\n        preRect: {\n          show: true,\n          width: 4,\n          fill: \"#40a9ff\",\n          radius: 2,\n        },\n        // configurations for the four linkpoints\n        linkPoints: {\n          top: false,\n          right: false,\n          bottom: false,\n          left: false,\n          // the size of the linkpoints' circle\n          size: 10,\n          lineWidth: 1,\n          fill: \"#72CC4A\",\n          stroke: \"#72CC4A\",\n        },\n        // configurations for the icon\n        logoIcon: {\n          // whether to show the icon\n          show: false,\n          x: 0,\n          y: 0,\n          // the image url for the icon, string type\n          img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n          width: 16,\n          height: 16,\n          // adjust the offset along x-axis for the icon\n          offset: 0,\n        },\n        // configurations for state icon\n        stateIcon: {\n          // whether to show the icon\n          show: false,\n          x: 0,\n          y: 0,\n          // the image url for the icon, string type\n          img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n          width: 16,\n          height: 16,\n          // adjust hte offset along x-axis for the icon\n          offset: -5,\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        hover: {\n          lineWidth: 2,\n          stroke: \"#1890ff\",\n          fill: \"#e6f7ff\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"hover\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"hover\", false);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/mode-rect/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"模态矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/mode-rect/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/mode-rect/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/multi-edges/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 50,\n      y: 350,\n      label: \"A\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 150,\n      label: \"B\",\n    },\n    {\n      id: \"node3\",\n      x: 450,\n      y: 350,\n      label: \"C\",\n    },\n  ],\n  edges: [],\n};\n\nfor (let i = 0; i < 10; i++) {\n  data.edges.push({\n    source: \"node1\",\n    target: \"node2\",\n    label: `${i}th edge of A-B`,\n  });\n}\nfor (let i = 0; i < 5; i++) {\n  data.edges.push({\n    source: \"node2\",\n    target: \"node3\",\n    label: `${i}th edge of B-C`,\n  });\n}\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/multi-edges/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * multi-edges\n */\n\nF6.Util.processParallelEdges(data.edges);\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      // the edges are linked to the center of source and target ndoes\n      linkCenter: true,\n      defaultNode: {\n        type: \"circle\",\n        size: [40],\n        color: \"#5B8FF9\",\n        style: {\n          fill: \"#9EC9FF\",\n          lineWidth: 3,\n        },\n        labelCfg: {\n          style: {\n            fill: \"#000\",\n            fontSize: 14,\n          },\n        },\n      },\n      defaultEdge: {\n        type: \"quadratic\",\n        labelCfg: {\n          autoRotate: true,\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        // style configurations for hover state\n        hover: {\n          fillOpacity: 0.8,\n        },\n        // style configurations for selected state\n        selected: {\n          lineWidth: 5,\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/multi-edges/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"两节点间存在多条边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/multi-edges/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/multi-edges/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/node-bg/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 200,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 350,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"edge 1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n      label: \"edge 2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n      label: \"edge 3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/node-bg/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * node-bg\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      defaultNode: {\n        type: \"circle\",\n        labelCfg: {\n          style: {\n            fill: \"#1890ff\",\n            fontSize: 14,\n            background: {\n              fill: \"#ffffff\",\n              stroke: \"#9EC9FF\",\n              padding: [2, 2, 2, 2],\n              radius: 2,\n            },\n          },\n          position: \"bottom\",\n        },\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      nodeStateStyles: {\n        // style configurations for hover state\n        hover: {\n          fillOpacity: 0.8,\n        },\n        // style configurations for selected state\n        selected: {\n          lineWidth: 5,\n        },\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/node-bg/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"节点文本背景\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/node-bg/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/node-bg/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/pie-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"pie1\",\n      size: 80,\n      inDegree: 80,\n      degree: 360,\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"pie2\",\n      size: 80,\n      inDegree: 280,\n      degree: 360,\n      x: 350,\n      y: 150,\n    },\n  ],\n  edges: [\n    {\n      source: \"pie1\",\n      target: \"pie2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/pie-chart/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * pie-chart：使用G自定义的饼图节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    const lightBlue = \"#5b8ff9\";\n    const lightOrange = \"#5ad8a6\";\n\n    // register a pie chart node\n    F6.registerNode(\"pie-node\", {\n      draw: (cfg, group) => {\n        const radius = cfg.size / 2; // node radius\n        const inPercentage = cfg.inDegree / cfg.degree; // the ratio of indegree to outdegree\n        const inAngle = inPercentage * Math.PI * 2; // the anble for the indegree fan\n        const inArcEnd = [\n          radius * Math.cos(inAngle),\n          -radius * Math.sin(inAngle),\n        ]; // the end position for the in-degree fan\n        let isInBigArc = 0;\n        let isOutBigArc = 1;\n        if (inAngle > Math.PI) {\n          isInBigArc = 1;\n          isOutBigArc = 0;\n        }\n        // fan shape for the in degree\n        const fanIn = group.addShape(\"path\", {\n          attrs: {\n            path: [\n              [\"M\", radius, 0],\n              [\"A\", radius, radius, 0, isInBigArc, 0, inArcEnd[0], inArcEnd[1]],\n              [\"L\", 0, 0],\n              [\"Z\"],\n            ],\n            lineWidth: 0,\n            fill: lightOrange,\n          },\n          name: \"in-fan-shape\",\n        });\n        // draw the fan shape\n        group.addShape(\"path\", {\n          attrs: {\n            path: [\n              [\"M\", inArcEnd[0], inArcEnd[1]],\n              [\"A\", radius, radius, 0, isOutBigArc, 0, radius, 0],\n              [\"L\", 0, 0],\n              [\"Z\"],\n            ],\n            lineWidth: 0,\n            fill: lightBlue,\n          },\n          name: \"out-fan-shape\",\n        });\n        // 返回 keyshape\n        return fanIn;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      defaultNode: {\n        type: \"pie-node\",\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/pie-chart/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"饼图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/pie-chart/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/pie-chart/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/point-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeC\",\n      x: 150,\n      y: 150,\n      label: \"Point2\",\n      type: \"justPoints\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeC2\",\n      x: 500,\n      y: 150,\n      label: \"Point2\",\n      type: \"justPoints\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 50, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [50, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 50, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeC\",\n      target: \"nodeC2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/point-chart/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * point-chart：使用G自定义的点线图节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerNode(\"justPoints\", {\n      draw(cfg, group) {\n        const baseR = 30;\n        let nowAngle = 0;\n\n        // Ref line\n        let refR = baseR;\n        const refInc = 10;\n        for (let i = 0; i < 5; i++) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              r: (refR += refInc),\n              stroke: \"#5ad8a6\",\n              lineDash: [4, 4],\n            },\n            name: \"circle-shape\",\n          });\n        }\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        nowAngle += everyIncAngle / 2;\n        cfg.details.forEach((cat) => {\n          // Calculate the positions for vertexes\n          const postions = [];\n          cat.values.forEach((item, index) => {\n            const r = baseR + item;\n            const xPos = r * Math.cos(nowAngle);\n            const yPos = r * Math.sin(nowAngle);\n            nowAngle += everyIncAngle;\n            postions.push([xPos, yPos]);\n            if (index === 4) {\n              const r_ = baseR + item;\n              const xPos_ = r_ * Math.cos(nowAngle);\n              const yPos_ = r_ * Math.sin(nowAngle);\n              postions.push([xPos_, yPos_]);\n            }\n          });\n\n          // add marks\n          postions.forEach((pos, index) => {\n            if (index !== 5) {\n              group.addShape(\"circle\", {\n                attrs: {\n                  x: pos[0],\n                  y: pos[1],\n                  r: 3,\n                  lineWidth: 2,\n                  stroke: cat.color,\n                },\n                name: \"circle-marker-shape\",\n              });\n            }\n          });\n        });\n\n        let nowAngle2 = 0;\n        const everyIncAngleCat = (2 * Math.PI * (360 / 5)) / 360;\n        for (let i = 0; i < 5; i++) {\n          const r = 30 + 50;\n          const xPos = r * Math.cos(nowAngle2);\n          const yPos = r * Math.sin(nowAngle2);\n\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", 0, 0],\n                [\"L\", xPos, yPos],\n              ],\n              lineDash: [4, 4],\n              stroke: \"#5ad8a6\",\n            },\n            name: \"path-shape\",\n          });\n          nowAngle2 += everyIncAngleCat;\n        }\n        // add a circle with the same color with the background color\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"#fff\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/point-chart/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"点线图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/point-chart/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/point-chart/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline1/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 300,\n    },\n  ],\n  edges: [\n    // Built-in polyline\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline1/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * polyline1\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n\n      defaultEdge: {\n        type: \"polyline\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline1/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"折线1\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline1/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline1/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"2\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline2/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * polyline2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n\n      defaultEdge: {\n        type: \"polyline\",\n        /* configure the bending radius and min distance to the end nodes */\n        style: {\n          radius: 10,\n          offset: 30,\n          endArrow: true,\n          /* and other styles */\n          // stroke: '#F6BD16',\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline2/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"折线2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline2/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline2/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline3/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"4\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"5\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    {\n      source: \"4\",\n      target: \"5\",\n      // assign the control points to control the bending positions\n      controlPoints: [\n        {\n          x: 260,\n          y: 80,\n        },\n        {\n          x: 320,\n          y: 50,\n        },\n        {\n          x: 390,\n          y: 110,\n        },\n        {\n          x: 420,\n          y: 110,\n        },\n        {\n          x: 420,\n          y: 140,\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline3/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * polyline3\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      linkCenter: true,\n      modes: {\n        // behavior\n        default: [\"drag-node\"],\n      },\n      defaultEdge: {\n        type: \"polyline\",\n        /* you can configure the global edge style as following lines */\n        // style: {\n        //   stroke: '#F6BD16',\n        // },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // edgeStateStyles: {\n      //   // edge style of active state\n      //   active: {\n      //     opacity: 0.5,\n      //     stroke: '#f00'\n      //   },\n      //   // edge style of selected state\n      //   selected: {\n      //     stroke: '#ff0'\n      //     lineWidth: 3,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline3/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"折线3\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline3/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/polyline3/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"rect\",\n      label: \"rect\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * rect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      defaultNode: {\n        type: \"rect\",\n        size: [80, 50],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"center\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect-with-combo/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 250,\n      y: 150,\n      comboId: \"combo\",\n    },\n    {\n      id: \"node2\",\n      x: 350,\n      y: 150,\n      comboId: \"combo\",\n    },\n  ],\n  combos: [\n    {\n      id: \"combo\",\n      label: \"Combo\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect-with-combo/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * rect-with-combo\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n\n      // translate the graph to align the canvas's center, support by v3.5.1\n      fitCenter: true,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n        ],\n      },\n      defaultCombo: {\n        type: \"rect\",\n        size: [50, 50],\n        /* style for the keyShape */\n        // style: {\n        //   lineWidth: 1,\n        // },\n        labelCfg: {\n          /* label's offset to the keyShape */\n          // refY: 10,\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"top\",\n          /* label's style */\n          // style: {\n          //   fontSize: 18,\n          // },\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      /* you can extend it or override it as you want */\n      // comboStateStyles: {\n      //   active: {\n      //     fill: '#f00',\n      //     opacity: 0.5\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"edge:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"edge:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"edge:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getEdges().forEach((edge) => {\n        this.graph.clearItemStates(edge);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect-with-combo/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"矩形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect-with-combo/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/rect-with-combo/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/stack-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeF\",\n      x: 150,\n      y: 150,\n      label: \"StackedBar1\",\n      type: \"stacked-bar-node\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeF2\",\n      x: 500,\n      y: 150,\n      label: \"StackedBar2\",\n      type: \"stacked-bar-node\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeF\",\n      target: \"nodeF2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/stack-chart/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * stack-chart\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    const getPath = (cx, cy, rs, re, startAngle, endAngle, clockwise) => {\n      const flag1 = clockwise ? 1 : 0;\n      const flag2 = clockwise ? 0 : 1;\n      return [\n        [\"M\", Math.cos(startAngle) * rs + cx, Math.sin(startAngle) * rs + cy],\n        [\"L\", Math.cos(startAngle) * re + cx, Math.sin(startAngle) * re + cy],\n        [\n          \"A\",\n          re,\n          re,\n          0,\n          0,\n          flag1,\n          Math.cos(endAngle) * re + cx,\n          Math.sin(endAngle) * re + cy,\n        ],\n        [\"L\", Math.cos(endAngle) * rs + cx, Math.sin(endAngle) * rs + cy],\n        [\n          \"A\",\n          rs,\n          rs,\n          0,\n          0,\n          flag2,\n          Math.cos(startAngle) * rs + cx,\n          Math.sin(startAngle) * rs + cy,\n        ],\n        [\"Z\"],\n      ];\n    };\n\n    // Custom stacked bar chart node\n    F6.registerNode(\"stacked-bar-node\", {\n      draw(cfg, group) {\n        /*\n          G:\n          Fan\n          x: the circle center of the fan\n          y: the circle center of the fan\n          rs: inner radius\n          re: outer radius\n          startAngle: start angle\n          endAngle: end angle\n          clockwise: render clockwisely if it is true\n        */\n        const baseR = 30;\n        let nowAngle = 0;\n        const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n        cfg.details.forEach((cat) => {\n          cat.values.forEach((item) => {\n            const baseNbr = Math.ceil(item / 10);\n            const baseIncR = 7;\n            let nowStartR = baseR;\n            const last = item % 10;\n            const endAngle = nowAngle + everyIncAngle;\n            for (let i = 0; i < baseNbr; i++) {\n              const path0 = getPath(\n                0,\n                0,\n                nowStartR,\n                nowStartR + baseIncR,\n                nowAngle,\n                endAngle,\n                false,\n              );\n              group.addShape(\"path\", {\n                attrs: {\n                  path: path0,\n                  stroke: \"darkgray\",\n                  fill: cat.color,\n                },\n                name: \"path-shape1\",\n              });\n              nowStartR = nowStartR + baseIncR + 2;\n              if (i === baseNbr - 1 && last !== 0) {\n                const path1 = getPath(\n                  0,\n                  0,\n                  nowStartR,\n                  nowStartR + (baseIncR * last) / 10,\n                  nowAngle,\n                  endAngle,\n                  false,\n                );\n                group.addShape(\"path\", {\n                  attrs: {\n                    path: path1,\n                    stroke: \"darkgray\",\n                    fill: cat.color,\n                  },\n                  name: \"path-shape2\",\n                });\n              }\n            }\n            nowAngle = endAngle;\n          });\n        });\n\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: baseR,\n            fill: cfg.centerColor,\n            stroke: \"darkgray\",\n          },\n          name: \"circle-shape\",\n        });\n        if (cfg.label) {\n          group.addShape(\"text\", {\n            attrs: {\n              x: 0,\n              y: 0,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: cfg.label,\n              fill: \"white\",\n              fontStyle: \"bold\",\n            },\n            name: \"text-shape\",\n          });\n        }\n        return group;\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/stack-chart/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"堆叠图节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/stack-chart/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/stack-chart/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/star/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"star\",\n      label: \"Star\",\n      x: 250,\n      y: 200,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/star/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * star\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      defaultNode: {\n        /* node type */\n        type: \"star\",\n        /* node size */\n        size: [60, 60],\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/star/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"五角星\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/star/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/star/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/triangle/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"circle\",\n      label: \"Triangle\",\n      x: 250,\n      y: 200,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/triangle/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * triangle\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      fitCenter: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      defaultNode: {\n        /* node type */\n        type: \"triangle\",\n        /* node size */\n        size: [40],\n        direction: \"up\",\n        /* style for the keyShape */\n        // style: {\n        //   fill: '#9EC9FF',\n        //   stroke: '#5B8FF9',\n        //   lineWidth: 3,\n        // },\n        labelCfg: {\n          /* label's position, options: center, top, bottom, left, right */\n          position: \"bottom\",\n          /* label's offset to the keyShape, 4 by default */\n          //   offset: 12,\n          /* label's style */\n          //   style: {\n          //     fontSize: 20,\n          //     fill: '#ccc',\n          //     fontWeight: 500\n          //   }\n        },\n        /* configurations for four linkpoints */\n        linkPoints: {\n          top: true,\n          right: true,\n          bottom: true,\n          left: true,\n          /* linkPoints' size, 8 by default */\n          //   size: 5,\n          /* linkPoints' style */\n          //   fill: '#ccc',\n          //   stroke: '#333',\n          //   lineWidth: 2,\n        },\n        /* icon configuration */\n        icon: {\n          /* whether show the icon, false by default */\n          show: false,\n          /* icon's img address, string type */\n          // img: 'https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg',\n          /* icon's size, 20 * 20 by default: */\n          //   width: 40,\n          //   height: 40\n        },\n      },\n      /* styles for different states, there are built-in styles for states: active, inactive, selected, highlight, disable */\n      // nodeStateStyles: {\n      //   // node style of active state\n      //   active: {\n      //     fillOpacity: 0.8,\n      //   },\n      //   // node style of selected state\n      //   selected: {\n      //     lineWidth: 5,\n      //   },\n      // },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/triangle/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"三角形\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/triangle/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-elements/pages/elements/triangle/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-FA2/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-FA2/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport forceAtlas2 from \"@antv/f6-wx/extends/layout/forceAtlas2Layout\";\n\n/**\n * 基本 Force Atlas 2\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"forceAtlas2\", forceAtlas2);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"forceAtlas2\",\n        preventOverlap: true,\n        kr: 10,\n        center: [250, 250],\n      },\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    data.nodes.forEach((node) => {\n      node.x = Math.random() * 1;\n    });\n    this.graph.on(\"afterlayout\", () => {\n      this.graph.fitView();\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-FA2/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"力导向布局2\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-FA2/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-FA2/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-MDS/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-MDS/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport mds from \"@antv/f6-wx/extends/layout/mdsLayout\";\n/**\n * basic-MDS\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"mds\", mds);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-node\"],\n      },\n      layout: {\n        type: \"mds\",\n        linkDistance: 100,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-MDS/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本降维布局图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-MDS/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-MDS/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-arc-diagram/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      name: \"analytics.cluster\",\n      cluster: \"analytics\",\n      value: 21,\n    },\n    {\n      id: \"1\",\n      name: \"analytics.graph\",\n      cluster: \"analytics\",\n      value: 34,\n    },\n    {\n      id: \"2\",\n      name: \"analytics.optimization\",\n      cluster: \"analytics\",\n      value: 8,\n    },\n    {\n      id: \"3\",\n      name: \"animate\",\n      cluster: \"animate\",\n      value: 40,\n    },\n    {\n      id: \"4\",\n      name: \"animate.interpolate\",\n      cluster: \"animate\",\n      value: 18,\n    },\n    {\n      id: \"5\",\n      name: \"data.converters\",\n      cluster: \"data\",\n      value: 25,\n    },\n    {\n      id: \"6\",\n      name: \"data\",\n      cluster: \"data\",\n      value: 10,\n    },\n    {\n      id: \"7\",\n      name: \"display\",\n      cluster: \"display\",\n      value: 4,\n    },\n    {\n      id: \"8\",\n      name: \"flex\",\n      cluster: \"flex\",\n      value: 6,\n    },\n    {\n      id: \"9\",\n      name: \"physics\",\n      cluster: \"physics\",\n      value: 22,\n    },\n    {\n      id: \"10\",\n      name: \"query\",\n      cluster: \"query\",\n      value: 67,\n    },\n    {\n      id: \"11\",\n      name: \"query.methods\",\n      cluster: \"query\",\n      value: 71,\n    },\n    {\n      id: \"12\",\n      name: \"scale\",\n      cluster: \"scale\",\n      value: 33,\n    },\n    {\n      id: \"13\",\n      name: \"util\",\n      cluster: \"util\",\n      value: 23,\n    },\n    {\n      id: \"14\",\n      name: \"util.heap\",\n      cluster: \"util\",\n      value: 2,\n    },\n    {\n      id: \"15\",\n      cluster: \"util\",\n      name: \"util.math\",\n      value: 2,\n    },\n    {\n      id: \"16\",\n      name: \"util.palette\",\n      cluster: \"util\",\n      value: 5,\n    },\n    {\n      id: \"17\",\n      name: \"vis.axis\",\n      cluster: \"vis\",\n      value: 24,\n    },\n    {\n      id: \"18\",\n      name: \"vis.controls\",\n      cluster: \"vis\",\n      value: 28,\n    },\n    {\n      id: \"19\",\n      name: \"vis.data\",\n      cluster: \"vis\",\n      value: 70,\n    },\n    {\n      id: \"20\",\n      name: \"vis.data.render\",\n      cluster: \"vis\",\n      value: 11,\n    },\n    {\n      id: \"21\",\n      name: \"vis.events\",\n      cluster: \"vis\",\n      value: 8,\n    },\n    {\n      id: \"22\",\n      name: \"vis.legend\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"23\",\n      name: \"vis.operator.distortion\",\n      cluster: \"vis\",\n      value: 9,\n    },\n    {\n      id: \"24\",\n      name: \"vis.operator.encoder\",\n      cluster: \"vis\",\n      value: 30,\n    },\n    {\n      id: \"25\",\n      name: \"vis.operator.filter\",\n      cluster: \"vis\",\n      value: 17,\n    },\n    {\n      id: \"26\",\n      name: \"vis.operator\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"27\",\n      name: \"vis.operator.label\",\n      cluster: \"vis\",\n      value: 18,\n    },\n    {\n      id: \"28\",\n      name: \"vis.operator.layout\",\n      cluster: \"vis\",\n      value: 91,\n    },\n    {\n      id: \"29\",\n      name: \"vis\",\n      cluster: \"vis\",\n      value: 13,\n    },\n  ],\n  edges: [\n    {\n      source: \"10\",\n      target: \"10\",\n      sourceWeight: 61,\n      targetWeight: 61,\n    },\n    {\n      source: \"11\",\n      target: \"11\",\n      sourceWeight: 39,\n      targetWeight: 39,\n    },\n    {\n      source: \"3\",\n      target: \"3\",\n      sourceWeight: 30,\n      targetWeight: 30,\n    },\n    {\n      source: \"19\",\n      target: \"19\",\n      sourceWeight: 26,\n      targetWeight: 26,\n    },\n    {\n      source: \"13\",\n      target: \"13\",\n      sourceWeight: 23,\n      targetWeight: 23,\n    },\n    {\n      source: \"9\",\n      target: \"9\",\n      sourceWeight: 22,\n      targetWeight: 22,\n    },\n    {\n      source: \"12\",\n      target: \"12\",\n      sourceWeight: 19,\n      targetWeight: 19,\n    },\n    {\n      source: \"28\",\n      target: \"19\",\n      sourceWeight: 34,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"4\",\n      sourceWeight: 16,\n      targetWeight: 16,\n    },\n    {\n      source: \"11\",\n      target: \"10\",\n      sourceWeight: 32,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"28\",\n      sourceWeight: 14,\n      targetWeight: 14,\n    },\n    {\n      source: \"18\",\n      target: \"18\",\n      sourceWeight: 12,\n      targetWeight: 12,\n    },\n    {\n      source: \"26\",\n      target: \"26\",\n      sourceWeight: 11,\n      targetWeight: 11,\n    },\n    {\n      source: \"28\",\n      target: \"13\",\n      sourceWeight: 20,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      sourceWeight: 17,\n      targetWeight: 2,\n    },\n    {\n      source: \"19\",\n      target: \"13\",\n      sourceWeight: 17,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"17\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"6\",\n      target: \"6\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"19\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"5\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"21\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 4,\n    },\n    {\n      source: \"25\",\n      target: \"19\",\n      sourceWeight: 10,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"0\",\n      sourceWeight: 5,\n      targetWeight: 5,\n    },\n    {\n      source: \"3\",\n      target: \"13\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"19\",\n      sourceWeight: 5,\n      targetWeight: 4,\n    },\n    {\n      source: \"19\",\n      target: \"12\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"22\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"24\",\n      target: \"24\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"26\",\n      target: \"3\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"16\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"16\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"10\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"22\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"20\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"1\",\n      target: \"26\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"12\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"7\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"3\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"7\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 2,\n    },\n    {\n      source: \"22\",\n      target: \"16\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"21\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"23\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"29\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"28\",\n      target: \"17\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"15\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"27\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"14\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"18\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 1,\n    },\n    {\n      source: \"25\",\n      target: \"26\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"9\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"12\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"6\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"21\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"29\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"23\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"17\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"12\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"20\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"6\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"6\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-arc-diagram/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport mds from \"@antv/f6-wx/extends/layout/mdsLayout\";\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"mds\", mds);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 定义颜色\n    const colors = [\n      \"rgb(91, 143, 249)\",\n      \"rgb(90, 216, 166)\",\n      \"rgb(93, 112, 146)\",\n      \"rgb(246, 189, 22)\",\n      \"rgb(232, 104, 74)\",\n      \"rgb(109, 200, 236)\",\n      \"rgb(146, 112, 202)\",\n      \"rgb(255, 157, 77)\",\n      \"rgb(38, 154, 153)\",\n      \"rgb(227, 137, 163)\",\n    ];\n\n    // 后面会用到的函数\n    function scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n      const outLength = outRange[1] - outRange[0];\n      const dataLength = dataRange[1] - dataRange[0];\n      nodes.forEach((n) => {\n        n[propName] =\n          ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n          outRange[0];\n      });\n    }\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"edge-tooltip\",\n            formatText: function formatText(model) {\n              const text = `source: ${model.sourceName}<br/> target: ${model.targetName}`;\n              return text;\n            },\n          },\n        ],\n      },\n      defaultNode: {\n        style: {\n          opacity: 0.8,\n          lineWidth: 1,\n          stroke: \"#999\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          opacity: 0.6,\n          lineAppendWidth: 3,\n        },\n      },\n    });\n\n    // 订阅事件\n    this.graph.on(\"edge:mouseenter\", function (e) {\n      const edge = e.item;\n      this.graph.setItemState(edge, \"hover\", true);\n    });\n    this.graph.on(\"edge:mouseleave\", function (e) {\n      const edge = e.item;\n      this.graph.setItemState(edge, \"hover\", false);\n    });\n\n    // 处理数据\n    const { edges } = data;\n    const { nodes } = data;\n    const nodeMap = new Map();\n    const clusterMap = new Map();\n    let clusterId = 0;\n    const n = nodes.length;\n    const horiPadding = 10;\n    const begin = [horiPadding, height * 0.7];\n    const end = [width - horiPadding, height * 0.7];\n    const xLength = end[0] - begin[0];\n    const yLength = end[1] - begin[1];\n    const xSep = xLength / n;\n    const ySep = yLength / n;\n    nodes.forEach((node, i) => {\n      node.x = begin[0] + i * xSep;\n      node.y = begin[1] + i * ySep;\n      nodeMap.set(node.id, node);\n      // cluster\n      if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n        clusterMap.set(node.cluster, clusterId);\n        clusterId++;\n      }\n      const id = clusterMap.get(node.cluster);\n      if (node.style) {\n        node.style.fill = colors[id % colors.length];\n      } else {\n        node.style = {\n          fill: colors[id % colors.length],\n        };\n      }\n      // label\n      node.label = node.name;\n      node.labelCfg = {\n        position: \"bottom\",\n        offset: 5,\n        style: {\n          rotate: Math.PI / 2,\n          textAlign: \"start\",\n        },\n      };\n    });\n    edges.forEach((edge) => {\n      edge.type = \"arc\";\n      const source = nodeMap.get(edge.source);\n      const target = nodeMap.get(edge.target);\n      const endsSepStep = (target.x - source.x) / xSep;\n      const sign = endsSepStep < 0 ? -1 : 1;\n      const curveOffset = sign * 10 * Math.ceil(Math.abs(endsSepStep));\n      edge.curveOffset = curveOffset;\n      edge.color = source.style.fill;\n      edge.sourceName = source.name;\n      edge.targetName = target.name;\n    });\n\n    // map the value to node size\n    let maxValue = -9999;\n    let minValue = 9999;\n    nodes.forEach((k) => {\n      if (maxValue < k.value) maxValue = k.value;\n      if (minValue > k.value) minValue = k.value;\n    });\n    const sizeRange = [3, 25];\n    const sizeDataRange = [minValue, maxValue];\n    scaleNodeProp(nodes, \"size\", \"value\", sizeDataRange, sizeRange);\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-arc-diagram/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本弧线图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-arc-diagram/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-arc-diagram/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-circular/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport circular from \"@antv/f6-wx/extends/layout/circularLayout\";\n/**\n * basicCircular布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-circular/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本环形布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-circular/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-circular/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-combo-force/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-combo-force/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport comboforce from \"@antv/f6-wx/extends/layout/comboForceLayout\";\n/**\n * basic-combo-force\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"comboforce\", comboforce);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      minZoom: 0.00000001,\n      layout: {\n        type: \"comboforce\",\n        nodeSpacing: (d) => {\n          if (d.id == \"0\") return 100;\n          return 10;\n        },\n      },\n      defaultNode: {\n        size: 15,\n        color: \"#5B8FF9\",\n        style: {\n          lineWidth: 2,\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        size: 2,\n        color: \"#e2e2e2\",\n      },\n      modes: {\n        default: [\"drag-combo\", \"drag-node\", \"drag-canvas\", \"zoom-canvas\"],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-combo-force/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"Combo力导向布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-combo-force/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-combo-force/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-concentric/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"HIRA\",\n      altered: 0,\n      rank: 148,\n      cited: 53,\n      uniprotdesc:\n        \"Cooperates with ASF1A to promote replication-independentchromatin assembly. Required for the periodic repression ofhistone gene transcription during the cell cycle. Required for theformation of senescence-associated heterochromatin foci (SAHF) andefficient senescence-associated cell cycle exit.\",\n      isseed: false,\n      uniprot: \"P54198\",\n      isvalid: true,\n      importance: 3,\n      ox: 539.5,\n      oy: 641.7372431003224,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SERPINE1\",\n      altered: 0,\n      rank: 5,\n      cited: 7063,\n      uniprotdesc:\n        \"Serine protease inhibitor. This inhibitor acts as 'bait'for tissue plasminogen activator, urokinase, protein C andmatriptase-3/TMPRSS7. Its rapid interaction with PLAT may functionas a major control point in the regulation of fibrinolysis.\",\n      isseed: false,\n      uniprot: \"P05121\",\n      isvalid: true,\n      importance: 3,\n      ox: 670.4301869950953,\n      oy: 229.70989985711336,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FAS\",\n      altered: 0,\n      rank: 38,\n      cited: 1011,\n      uniprotdesc:\n        \"Receptor for TNFSF6/FASLG. The adapter molecule FADDrecruits caspase-8 to the activated receptor. The resulting death-inducing signaling complex (DISC) performs caspase-8 proteolyticactivation which initiates the subsequent cascade of caspases(aspartate-specific cysteine proteases) mediating apoptosis. FAS-mediated apoptosis may have a role in the induction of peripheraltolerance, in the antigen-stimulated suicide of mature T-cells, orboth. The secreted isoforms 2 to 6 block apoptosis (in vitro).\",\n      isseed: false,\n      uniprot: \"P25445\",\n      isvalid: true,\n      importance: 3,\n      ox: 771.3915110914829,\n      oy: 613.8066148172879,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"H1F0\",\n      altered: 0,\n      rank: 179,\n      cited: 8,\n      uniprotdesc:\n        \"Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structures. The H1F0 histonesare found in cells that are in terminal stages of differentiationor that have low rates of cell division.\",\n      isseed: false,\n      uniprot: \"P07305\",\n      isvalid: true,\n      importance: 3,\n      ox: 396.564243092928,\n      oy: 545.1295331255458,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2\",\n      altered: 0,\n      rank: 42,\n      cited: 859,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase which is required forcheckpoint-mediated cell cycle arrest, activation of DNA repairand apoptosis in response to the presence of DNA double-strandbreaks. May also negatively regulate cell cycle progression duringunperturbed cell cycles. Following activation, phosphorylatesnumerous effectors preferentially at the consensus sequence [L-X-R-X-X-S/T]. Regulates cell cycle checkpoint arrest throughphosphorylation of CDC25A, CDC25B and CDC25C, inhibiting theiractivity. Inhibition of CDC25 phosphatase activity leads toincreased inhibitory tyrosine phosphorylation of CDK-cyclincomplexes and blocks cell cycle progression. May alsophosphorylate NEK6 which is involved in G2/M cell cycle arrest.Regulates DNA repair through phosphorylation of BRCA2, enhancingthe association of RAD51 with chromatin which promotes DNA repairby homologous recombination. Also stimulates the transcription ofgenes involved in DNA repair (including BRCA2) through thephosphorylation and activation of the transcription factor FOXM1.Regulates apoptosis through the phosphorylation of p53/TP53, MDM4and PML. Phosphorylation of p53/TP53 at 'Ser-20' by CHEK2 mayalleviate inhibition by MDM2, leading to accumulation of activep53/TP53. Phosphorylation of MDM4 may also reduce degradation ofp53/TP53. Also controls the transcription of pro-apoptotic genesthrough phosphorylation of the transcription factor E2F1. Tumorsuppressor, it may also have a DNA damage-independent function inmitotic spindle assembly by phosphorylating BRCA1. Its absence maybe a cause of the chromosomal instability observed in some cancercells. \",\n      isseed: false,\n      uniprot: \"O96017\",\n      isvalid: true,\n      importance: 3,\n      ox: 665.61605725324,\n      oy: 327.88536532731405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"COL18A1\",\n      altered: 0,\n      rank: 157,\n      cited: 30,\n      uniprotdesc:\n        \"COLA18A probably plays a major role in determining theretinal structure as well as in the closure of the neural tube.Endostatin potently inhibits endothelial cellproliferation and angiogenesis. May inhibit angiogenesis bybinding to the heparan sulfate proteoglycans involved in growthfactor signaling.\",\n      isseed: false,\n      uniprot: \"P39060\",\n      isvalid: true,\n      importance: 3,\n      ox: 315.495548442639,\n      oy: 356.3503242429216,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP\",\n      altered: 0,\n      rank: 24,\n      cited: 2442,\n      uniprotdesc:\n        \"Acetylates histones, giving a specific tag fortranscriptional activation. Also acetylates non-histone proteins,like NCOA3 and FOXO1. Binds specifically to phosphorylated CREBand enhances its transcriptional activity toward cAMP-responsivegenes. Acts as a coactivator of ALX1 in the presence of EP300.Acts as a circadian transcriptional coactivator which enhances theactivity of the circadian transcriptional activators: NPAS2-ARNTL/BMAL1 and CLOCK-ARNTL/BMAL1 heterodimers.\",\n      isseed: false,\n      uniprot: \"Q92793\",\n      isvalid: true,\n      importance: 3,\n      ox: 468.2392322240752,\n      oy: 311.08612174318614,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FDXR\",\n      altered: 0,\n      rank: 147,\n      cited: 54,\n      uniprotdesc:\n        \"Serves as the first electron transfer protein in all themitochondrial P450 systems. Including cholesterol side chaincleavage in all steroidogenic tissues, steroid 11-betahydroxylation in the adrenal cortex, 25-OH-vitamin D3-24hydroxylation in the kidney, and sterol C-27 hydroxylation in theliver.\",\n      isseed: false,\n      uniprot: \"P22570\",\n      isvalid: true,\n      importance: 3,\n      ox: 614.0116881932149,\n      oy: 209.57981996234878,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SMYD2\",\n      altered: 0,\n      rank: 175,\n      cited: 12,\n      uniprotdesc:\n        \"Protein-lysine N-methyltransferase that methylates bothhistones and non-histone proteins, including p53/TP53 and RB1.Specifically methylates histone H3 'Lys-4' (H3K4me) anddimethylates histone H3 'Lys-36' (H3K36me2). Shows even highermethyltransferase activity on p53/TP53. Monomethylates 'Lys-370'of p53/TP53, leading to decreased DNA-binding activity andsubsequent transcriptional regulation activity of p53/TP53.Monomethylates RB1 at 'Lys-860'. \",\n      isseed: false,\n      uniprot: \"Q9NRG4\",\n      isvalid: true,\n      importance: 3,\n      ox: 799.3458853307084,\n      oy: 560.8271840491047,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR\",\n      altered: 0,\n      rank: 52,\n      cited: 628,\n      uniprotdesc:\n        \"Serine/threonine protein kinase which activatescheckpoint signaling upon genotoxic stresses such as ionizingradiation (IR), ultraviolet light (UV), or DNA replicationstalling, thereby acting as a DNA damage sensor. Recognizes thesubstrate consensus sequence [ST]-Q. Phosphorylates BRCA1, CHEK1,MCM2, RAD17, RPA2, SMC1 and p53/TP53, which collectively inhibitDNA replication and mitosis and promote DNA repair, recombinationand apoptosis. Phosphorylates 'Ser-139' of histone variantH2AX/H2AFX at sites of DNA damage, thereby regulating DNA damageresponse mechanism. Required for FANCD2 ubiquitination. Criticalfor maintenance of fragile site stability and efficient regulationof centrosome duplication. \",\n      isseed: false,\n      uniprot: \"Q13535\",\n      isvalid: true,\n      importance: 3,\n      ox: 696.7065384003552,\n      oy: 570.6754072575451,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HGF\",\n      altered: 0,\n      rank: 4,\n      cited: 7554,\n      uniprotdesc:\n        \"Potent mitogen for mature parenchymal hepatocyte cells,seems to be a hepatotrophic factor, and acts as a growth factorfor a broad spectrum of tissues and cell types. Activating ligandfor the receptor tyrosine kinase MET by binding to it andpromoting its dimerization. \",\n      isseed: false,\n      uniprot: \"P14210\",\n      isvalid: true,\n      importance: 3,\n      ox: 732.163947642761,\n      oy: 659.0776363377252,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM\",\n      altered: 0,\n      rank: 25,\n      cited: 2298,\n      uniprotdesc:\n        \"Serine/threonine protein kinase which activatescheckpoint signaling upon double strand breaks (DSBs), apoptosisand genotoxic stresses such as ionizing ultraviolet A light (UVA),thereby acting as a DNA damage sensor. Recognizes the substrateconsensus sequence [ST]-Q. Phosphorylates 'Ser-139' of histonevariant H2AX/H2AFX at double strand breaks (DSBs), therebyregulating DNA damage response mechanism. Also plays a role inpre-B cell allelic exclusion, a process leading to expression of asingle immunoglobulin heavy chain allele to enforce clonality andmonospecific recognition by the B-cell antigen receptor (BCR)expressed on individual B-lymphocytes. After the introduction ofDNA breaks by the RAG complex on one immunoglobulin allele, actsby mediating a repositioning of the second allele topericentromeric heterochromatin, preventing accessibility to theRAG complex and recombination of the second allele. Also involvedin signal transduction and cell cycle control. May function as atumor suppressor. Necessary for activation of ABL1 and SAPK.Phosphorylates DYRK2, CHEK2, p53/TP53, FANCD2, NFKBIA, BRCA1,CTIP, nibrin (NBN), TERF1, RAD9 and DCLRE1C. May play a role invesicle and/or protein transport. Could play a role in T-celldevelopment, gonad and neurological function. Plays a role inreplication-dependent histone mRNA degradation. Binds DNA ends.Phosphorylation of DYRK2 in nucleus in response to genotoxicstress prevents its MDM2-mediated ubiquitination and subsequentproteasome degradation. Phosphorylates ATF2 which stimulates itsfunction in DNA damage response. \",\n      isseed: false,\n      uniprot: \"Q13315\",\n      isvalid: true,\n      importance: 3,\n      ox: 723.6214512404813,\n      oy: 517.2928623066505,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP63\",\n      altered: 0,\n      rank: 37,\n      cited: 1171,\n      uniprotdesc:\n        \"Acts as a sequence specific DNA binding transcriptionalactivator or repressor. The isoforms contain a varying set oftransactivation and auto-regulating transactivation inhibitingdomains thus showing an isoform specific activity. Isoform 2activates RIPK4 transcription. May be required in conjunction withTP73/p73 for initiation of p53/TP53 dependent apoptosis inresponse to genotoxic insults and the presence of activatedoncogenes. Involved in Notch signaling by probably inducing JAG1and JAG2. Plays a role in the regulation of epithelialmorphogenesis. The ratio of DeltaN-type and TA*-type isoforms maygovern the maintenance of epithelial stem cell compartments andregulate the initiation of epithelial stratification from theundifferentiated embryonal ectoderm. Required for limb formationfrom the apical ectodermal ridge. Activates transcription of thep21 promoter. \",\n      isseed: false,\n      uniprot: \"Q9H3D4\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 495.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GPX1\",\n      altered: 0,\n      rank: 13,\n      cited: 3644,\n      uniprotdesc:\n        \"Protects the hemoglobin in erythrocytes from oxidativebreakdown.\",\n      isseed: false,\n      uniprot: \"P07203\",\n      isvalid: true,\n      importance: 3,\n      ox: 412.4474306913114,\n      oy: 244.4618875964815,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TRIAP1\",\n      altered: 0,\n      rank: 183,\n      cited: 7,\n      uniprotdesc:\n        \"Involved in the modulation of the mitochondrialapoptotic pathway by ensuring the accumulation of cardiolipin (CL)in mitochondrial membranes. In vitro, the TRIAP1:PRELID1 complexmediates the transfer of phosphatidic acid (PA) between liposomesand probably functions as a PA transporter across themitochondrion intermembrane space to provide PA for CL synthesisin the inner membrane. Mediates cell survival by inhibitingactivation of caspase-9 which prevents induction of apoptosis.\",\n      isseed: false,\n      uniprot: \"O43715\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 202.751489857487,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1E\",\n      altered: 0,\n      rank: 167,\n      cited: 19,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P10412\",\n      isvalid: true,\n      importance: 3,\n      ox: 509.931522689569,\n      oy: 636.667218490667,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1D\",\n      altered: 0,\n      rank: 184,\n      cited: 6,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16402\",\n      isvalid: true,\n      importance: 3,\n      ox: 385.3785487595187,\n      oy: 517.2928623066505,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1C\",\n      altered: 0,\n      rank: 174,\n      cited: 13,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16403\",\n      isvalid: true,\n      importance: 3,\n      ox: 379.058170659647,\n      oy: 487.9662051382201,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1B\",\n      altered: 0,\n      rank: 96,\n      cited: 209,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16401\",\n      isvalid: true,\n      importance: 3,\n      ox: 381.59546915616875,\n      oy: 428.2362230943135,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1A\",\n      altered: 0,\n      rank: 173,\n      cited: 13,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"Q02539\",\n      isvalid: true,\n      importance: 3,\n      ox: 443.3839427467599,\n      oy: 327.88536532731405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53\",\n      altered: 0,\n      rank: 0,\n      cited: 24824,\n      uniprotdesc:\n        \"Acts as a tumor suppressor in many tumor types; inducesgrowth arrest or apoptosis depending on the physiologicalcircumstances and cell type. Involved in cell cycle regulation asa trans-activator that acts to negatively regulate cell divisionby controlling a set of genes required for this process. One ofthe activated genes is an inhibitor of cyclin-dependent kinases.Apoptosis induction seems to be mediated either by stimulation ofBAX and FAS antigen expression, or by repression of Bcl-2expression. In cooperation with mitochondrial PPIF is involved inactivating oxidative stress-induced necrosis; the function islargely independent of transcription. Induces the transcription oflong intergenic non-coding RNA p21 (lincRNA-p21) and lincRNA-Mkln1. LincRNA-p21 participates in TP53-dependent transcriptionalrepression leading to apoptosis and seem to have to effect oncell-cycle regulation. Implicated in Notch signaling cross-over.Prevents CDK7 kinase activity when associated to CAK complex inresponse to DNA damage, thus stopping cell cycle progression.Isoform 2 enhances the transactivation activity of isoform 1 fromsome but not all TP53-inducible promoters. Isoform 4 suppressestransactivation activity and impairs growth suppression mediatedby isoform 1. Isoform 7 inhibits isoform 1-mediated apoptosis.\",\n      isseed: true,\n      uniprot: \"P04637\",\n      isvalid: true,\n      importance: 4,\n      ox: 554.5,\n      oy: 465.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GADD45A\",\n      altered: 0,\n      rank: 98,\n      cited: 198,\n      uniprotdesc:\n        \"In T-cells, functions as a regulator of p38 MAPKs byinhibiting p88 phosphorylation and activity (By similarity). Mightaffect PCNA interaction with some CDK (cell division proteinkinase) complexes; stimulates DNA excision repair in vitro andinhibits entry of cells into S phase. \",\n      isseed: false,\n      uniprot: \"P24522\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 375.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML\",\n      altered: 0,\n      rank: 35,\n      cited: 1300,\n      uniprotdesc:\n        \"Functions via its association with PML-nuclear bodies(PML-NBs) in a wide range of important cellular processes,including tumor suppression, transcriptional regulation,apoptosis, senescence, DNA damage response, and viral defensemechanisms. Acts as the scaffold of PML-NBs allowing otherproteins to shuttle in and out, a process which is regulated bySUMO-mediated modifications and interactions. Isoform PML-4 has amultifaceted role in the regulation of apoptosis and growthsuppression: activates RB1 and inhibits AKT1 via interactions withPP1 and PP2A phosphatases respectively, negatively affects thePI3K pathway by inhibiting MTOR and activating PTEN, andpositively regulates p53/TP53 by acting at different levels (bypromoting its acetylation and phosphorylation and by inhibitingits MDM2-dependent degradation). Isoform PML-4 also: acts as atranscriptional repressor of TBX2 during cellular senescence andthe repression is dependent on a functional RBL2/E2F4 repressorcomplex, regulates double-strand break repair in gamma-irradiation-induced DNA damage responses via its interaction withWRN, acts as a negative regulator of telomerase by interactingwith TERT, and regulates PER2 nuclear localization and circadianfunction. Isoform PML-6 inhibits specifically the activity of thetetrameric form of PKM. The nuclear isoforms (isoform PML-1,isoform PML-2, isoform PML-3, isoform PML-4 and isoform PML-5) inconcert with SATB1 are involved in local chromatin-loop remodelingand gene expression regulation at the MHC-I locus. Isoform PML-2is required for efficient IFN-gamma induced MHC II genetranscription via regulation of CIITA. Cytoplasmic PML is involvedin the regulation of the TGF-beta signaling pathway. PML alsoregulates transcription activity of ELF4 and can act as animportant mediator for TNF-alpha- and IFN-alpha-mediatedinhibition of endothelial cell network formation and migration.Exhibits antiviral activity against both DNA and RNAviruses. The antiviral activity can involve one or severalisoform(s) and can be enhanced by the permanent PML-NB-associatedprotein DAXX or by the recruitment of p53/TP53 within thesestructures. Isoform PML-4 restricts varicella zoster virus (VZV)via sequestration of virion capsids in PML-NBs thereby preventingtheir nuclear egress and inhibiting formation of infectious virusparticles. The sumoylated isoform PML-4 restricts rabies virus byinhibiting viral mRNA and protein synthesis. The cytoplasmicisoform PML-14 can restrict herpes simplex virus-1 (HHV-1)replication by sequestering the viral E3 ubiquitin-protein ligaseICP0 in the cytoplasm. Isoform PML-6 shows restriction activitytowards human cytomegalovirus (HCMV) and influenza A virus strainsPR8(H1N1) and ST364(H3N2). Sumoylated isoform PML-4 and isoformPML-12 show antiviral activity against encephalomyocarditis virus(EMCV) by promoting nuclear sequestration of viral polymerase(P3D-POL) within PML NBs. Isoform PML-3 exhibits antiviralactivity against poliovirus by inducing apoptosis in infectedcells through the recruitment and the activation of p53/TP53 inthe PML-NBs. Isoform PML-3 represses human foamy virus (HFV)transcription by complexing the HFV transactivator, bel1/tas,preventing its binding to viral DNA. PML may positively regulateinfectious hepatitis C viral (HCV) production and isoform PML-2may enhance adenovirus transcription.\",\n      isseed: false,\n      uniprot: \"P29590\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 555.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1\",\n      altered: 0,\n      rank: 36,\n      cited: 1235,\n      uniprotdesc:\n        \"Ubiquitin-like protein that can be covalently attachedto proteins as a monomer or a lysine-linked polymer. Covalentattachment via an isopeptide bond to its substrates requires prioractivation by the E1 complex SAE1-SAE2 and linkage to the E2enzyme UBE2I, and can be promoted by E3 ligases such as PIAS1-4,RANBP2 or CBX4. This post-translational modification on lysineresidues of proteins plays a crucial role in a number of cellularprocesses such as nuclear transport, DNA replication and repair,mitosis and signal transduction. Involved for instance intargeting RANGAP1 to the nuclear pore complex protein RANBP2.Polymeric SUMO1 chains are also susceptible to polyubiquitinationwhich functions as a signal for proteasomal degradation ofmodified proteins. May also regulate a network of genes involvedin palate development. \",\n      isseed: false,\n      uniprot: \"P63165\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 288.62556472004735,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA\",\n      altered: 0,\n      rank: 146,\n      cited: 55,\n      uniprotdesc:\n        \"PP2A is the major phosphatase for microtubule-associatedproteins (MAPs). PP2A can modulate the activity of phosphorylase Bkinase casein kinase 2, mitogen-stimulated S6 kinase, and MAP-2kinase. Cooperates with SGOL2 to protect centromeric cohesin fromseparase-mediated cleavage in oocytes specifically during meiosisI (By similarity). Can dephosphorylate SV40 large T antigen andp53/TP53. Activates RAF1 by dephosphorylating it at 'Ser-259'.\",\n      isseed: false,\n      uniprot: \"P67775\",\n      isvalid: true,\n      importance: 3,\n      ox: 727.4045308438311,\n      oy: 428.2362230943131,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB\",\n      altered: 0,\n      rank: 185,\n      cited: 6,\n      uniprotdesc:\n        \"PP2A can modulate the activity of phosphorylase B kinasecasein kinase 2, mitogen-stimulated S6 kinase, and MAP-2 kinase.\",\n      isseed: false,\n      uniprot: \"P62714\",\n      isvalid: true,\n      importance: 3,\n      ox: 584.3919246562758,\n      oy: 291.16974245431265,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1\",\n      altered: 0,\n      rank: 78,\n      cited: 330,\n      uniprotdesc:\n        \"Catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Regulates lipid synthesis byphosphorylating and inactivating lipid metabolic enzymes such asACACA, ACACB, GYS1, HMGCR and LIPE; regulates fatty acid andcholesterol synthesis by phosphorylating acetyl-CoA carboxylase(ACACA and ACACB) and hormone-sensitive lipase (LIPE) enzymes,respectively. Regulates insulin-signaling and glycolysis byphosphorylating IRS1, PFKFB2 and PFKFB3. AMPK stimulates glucoseuptake in muscle by increasing the translocation of the glucosetransporter SLC2A4/GLUT4 to the plasma membrane, possibly bymediating phosphorylation of TBC1D4/AS160. Regulates transcriptionand chromatin structure by phosphorylating transcriptionregulators involved in energy metabolism such as CRTC2/TORC2,FOXO3, histone H2B, HDAC5, MEF2C, MLXIPL/ChREBP, EP300, HNF4A,p53/TP53, SREBF1, SREBF2 and PPARGC1A. Acts as a key regulator ofglucose homeostasis in liver by phosphorylating CRTC2/TORC2,leading to CRTC2/TORC2 sequestration in the cytoplasm. In responseto stress, phosphorylates 'Ser-36' of histone H2B (H2BS36ph),leading to promote transcription. Acts as a key regulator of cellgrowth and proliferation by phosphorylating TSC2, RPTOR andATG1/ULK1: in response to nutrient limitation, negativelyregulates the mTORC1 complex by phosphorylating RPTOR component ofthe mTORC1 complex and by phosphorylating and activating TSC2. Inresponse to nutrient limitation, promotes autophagy byphosphorylating and activating ATG1/ULK1. AMPK also acts as aregulator of circadian rhythm by mediating phosphorylation ofCRY1, leading to destabilize it. May regulate the Wnt signalingpathway by phosphorylating CTNNB1, leading to stabilize it. Alsohas tau-protein kinase activity: in response to amyloid beta A4protein (APP) exposure, activated by CAMKK2, leading tophosphorylation of MAPT/TAU; however the relevance of such dataremains unclear in vivo. Also phosphorylates CFTR, EEF2K, KLC1,NOS3 and SLC12A1. \",\n      isseed: false,\n      uniprot: \"Q13131\",\n      isvalid: true,\n      importance: 3,\n      ox: 731.2150654362375,\n      oy: 457.9932361520795,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2\",\n      altered: 0,\n      rank: 29,\n      cited: 2074,\n      uniprotdesc:\n        \"Catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Regulates lipid synthesis byphosphorylating and inactivating lipid metabolic enzymes such asACACA, ACACB, GYS1, HMGCR and LIPE; regulates fatty acid andcholesterol synthesis by phosphorylating acetyl-CoA carboxylase(ACACA and ACACB) and hormone-sensitive lipase (LIPE) enzymes,respectively. Regulates insulin-signaling and glycolysis byphosphorylating IRS1, PFKFB2 and PFKFB3. AMPK stimulates glucoseuptake in muscle by increasing the translocation of the glucosetransporter SLC2A4/GLUT4 to the plasma membrane, possibly bymediating phosphorylation of TBC1D4/AS160. Regulates transcriptionand chromatin structure by phosphorylating transcriptionregulators involved in energy metabolism such as CRTC2/TORC2,FOXO3, histone H2B, HDAC5, MEF2C, MLXIPL/ChREBP, EP300, HNF4A,p53/TP53, SREBF1, SREBF2 and PPARGC1A. Acts as a key regulator ofglucose homeostasis in liver by phosphorylating CRTC2/TORC2,leading to CRTC2/TORC2 sequestration in the cytoplasm. In responseto stress, phosphorylates 'Ser-36' of histone H2B (H2BS36ph),leading to promote transcription. Acts as a key regulator of cellgrowth and proliferation by phosphorylating TSC2, RPTOR andATG1/ULK1: in response to nutrient limitation, negativelyregulates the mTORC1 complex by phosphorylating RPTOR component ofthe mTORC1 complex and by phosphorylating and activating TSC2. Inresponse to nutrient limitation, promotes autophagy byphosphorylating and activating ATG1/ULK1. AMPK also acts as aregulator of circadian rhythm by mediating phosphorylation ofCRY1, leading to destabilize it. May regulate the Wnt signalingpathway by phosphorylating CTNNB1, leading to stabilize it. Alsophosphorylates CFTR, EEF2K, KLC1, NOS3 and SLC12A1.\",\n      isseed: false,\n      uniprot: \"P54646\",\n      isvalid: true,\n      importance: 3,\n      ox: 613.4239130642807,\n      oy: 298.7290842958664,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11\",\n      altered: 0,\n      rank: 127,\n      cited: 81,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK11 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors. Accordingly, p38 MAPKsphosphorylate a broad range of proteins and it has been estimatedthat they may have approximately 200 to 300 substrates each.MAPK11 functions are mostly redundant with those of MAPK14. Someof the targets are downstream kinases which are activated throughphosphorylation and further phosphorylate additional targets.RPS6KA5/MSK1 and RPS6KA4/MSK2 can directly phosphorylate andactivate transcription factors such as CREB1, ATF1, the NF-kappa-Bisoform RELA/NFKB3, STAT1 and STAT3, but can also phosphorylatehistone H3 and the nucleosomal protein HMGN1. RPS6KA5/MSK1 andRPS6KA4/MSK2 play important roles in the rapid induction ofimmediate-early genes in response to stress or mitogenic stimuli,either by inducing chromatin remodeling or by recruiting thetranscription machinery. On the other hand, two other kinasetargets, MAPKAPK2/MK2 and MAPKAPK3/MK3, participate in the controlof gene expression mostly at the post-transcriptional level, byphosphorylating ZFP36 (tristetraprolin) and ELAVL1, and byregulating EEF2K, which is important for the elongation of mRNAduring translation. MKNK1/MNK1 and MKNK2/MNK2, two other kinasesactivated by p38 MAPKs, regulate protein synthesis byphosphorylating the initiation factor EIF4E2. In the cytoplasm,the p38 MAPK pathway is an important regulator of proteinturnover. For example, CFLAR is an inhibitor of TNF-inducedapoptosis whose proteasome-mediated degradation is regulated byp38 MAPK phosphorylation. Ectodomain shedding of transmembraneproteins is regulated by p38 MAPKs as well. In response toinflammatory stimuli, p38 MAPKs phosphorylate the membrane-associated metalloprotease ADAM17. Such phosphorylation isrequired for ADAM17-mediated ectodomain shedding of TGF-alphafamily ligands, which results in the activation of EGFR signalingand cell proliferation. Additional examples of p38 MAPK substratesare the FGFR1. FGFR1 can be translocated from the extracellularspace into the cytosol and nucleus of target cells, and regulatesprocesses such as rRNA synthesis and cell growth. FGFR1translocation requires p38 MAPK activation. In the nucleus, manytranscription factors are phosphorylated and activated by p38MAPKs in response to different stimuli. Classical examples includeATF1, ATF2, ATF6, ELK1, PTPRH, DDIT3, TP53/p53 and MEF2C andMEF2A. The p38 MAPKs are emerging as important modulators of geneexpression by regulating chromatin modifiers and remodelers. Thepromoters of several genes involved in the inflammatory response,such as IL6, IL8 and IL12B, display a p38 MAPK-dependentenrichment of histone H3 phosphorylation on 'Ser-10' (H3S10ph) inLPS-stimulated myeloid cells. This phosphorylation enhances theaccessibility of the cryptic NF-kappa-B-binding sites markingpromoters for increased NF-kappa-B recruitment.\",\n      isseed: false,\n      uniprot: \"Q15759\",\n      isvalid: true,\n      importance: 3,\n      ox: 640.7607677759248,\n      oy: 311.0861217431862,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP73\",\n      altered: 0,\n      rank: 116,\n      cited: 124,\n      uniprotdesc:\n        \"Participates in the apoptotic response to DNA damage.Isoforms containing the transactivation domain are pro-apoptotic,isoforms lacking the domain are anti-apoptotic and block thefunction of p53 and transactivating p73 isoforms. May be a tumorsuppressor protein. \",\n      isseed: false,\n      uniprot: \"O15350\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 435.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CCNB1\",\n      altered: 0,\n      rank: 62,\n      cited: 491,\n      uniprotdesc:\n        \"Essential for the control of the cell cycle at the G2/M(mitosis) transition. \",\n      isseed: false,\n      uniprot: \"P14635\",\n      isvalid: true,\n      importance: 3,\n      ox: 455.45477593090067,\n      oy: 612.0421763339963,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12\",\n      altered: 0,\n      rank: 131,\n      cited: 79,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK12 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors such as ELK1 and ATF2.Accordingly, p38 MAPKs phosphorylate a broad range of proteins andit has been estimated that they may have approximately 200 to 300substrates each. Some of the targets are downstream kinases suchas MAPKAPK2, which are activated through phosphorylation andfurther phosphorylate additional targets. Plays a role in myoblastdifferentiation and also in the down-regulation of cyclin D1 inresponse to hypoxia in adrenal cells suggesting MAPK12 may inhibitcell proliferation while promoting differentiation. PhosphorylatesDLG1. Following osmotic shock, MAPK12 in the cell nucleusincreases its association with nuclear DLG1, thereby causingdissociation of DLG1-SFPQ complexes. This function is independentof its catalytic activity and could affect mRNA processing and/orgene transcription to aid cell adaptation to osmolarity changes inthe environment. Regulates UV-induced checkpoint signaling andrepair of UV-induced DNA damage and G2 arrest after gamma-radiation exposure. MAPK12 is involved in the regulation of SLC2A1expression and basal glucose uptake in L6 myotubes; and negativelyregulates SLC2A4 expression and contraction-mediated glucoseuptake in adult skeletal muscle. C-Jun (JUN) phosphorylation isstimulated by MAPK14 and inhibited by MAPK12, leading to adistinct AP-1 regulation. MAPK12 is required for the normalkinetochore localization of PLK1, prevents chromosomal instabilityand supports mitotic cell viability. MAPK12-signaling is alsopositively regulating the expansion of transient amplifyingmyogenic precursor cells during muscle growth and regeneration.\",\n      isseed: false,\n      uniprot: \"P53778\",\n      isvalid: true,\n      importance: 3,\n      ox: 569.5000000000001,\n      oy: 641.7372431003224,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13\",\n      altered: 0,\n      rank: 126,\n      cited: 88,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK13 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors such as ELK1 and ATF2.Accordingly, p38 MAPKs phosphorylate a broad range of proteins andit has been estimated that they may have approximately 200 to 300substrates each. MAPK13 is one of the less studied p38 MAPKisoforms. Some of the targets are downstream kinases such asMAPKAPK2, which are activated through phosphorylation and furtherphosphorylate additional targets. Plays a role in the regulationof protein translation by phosphorylating and inactivating EEF2K.Involved in cytoskeletal remodeling through phosphorylation ofMAPT and STMN1. Mediates UV irradiation induced up-regulation ofthe gene expression of CXCL14. Plays an important role in theregulation of epidermal keratinocyte differentiation, apoptosisand skin tumor development. Phosphorylates the transcriptionalactivator MYB in response to stress which leads to rapid MYBdegradation via a proteasome-dependent pathway. MAPK13 alsophosphorylates and down-regulates PRKD1 during regulation ofinsulin secretion in pancreatic beta cells.\",\n      isseed: false,\n      uniprot: \"O15264\",\n      isvalid: true,\n      importance: 3,\n      ox: 687.2747400718758,\n      oy: 348.6435313966404,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14\",\n      altered: 0,\n      rank: 23,\n      cited: 2528,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK14 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors. Accordingly, p38 MAPKsphosphorylate a broad range of proteins and it has been estimatedthat they may have approximately 200 to 300 substrates each. Someof the targets are downstream kinases which are activated throughphosphorylation and further phosphorylate additional targets.RPS6KA5/MSK1 and RPS6KA4/MSK2 can directly phosphorylate andactivate transcription factors such as CREB1, ATF1, the NF-kappa-Bisoform RELA/NFKB3, STAT1 and STAT3, but can also phosphorylatehistone H3 and the nucleosomal protein HMGN1. RPS6KA5/MSK1 andRPS6KA4/MSK2 play important roles in the rapid induction ofimmediate-early genes in response to stress or mitogenic stimuli,either by inducing chromatin remodeling or by recruiting thetranscription machinery. On the other hand, two other kinasetargets, MAPKAPK2/MK2 and MAPKAPK3/MK3, participate in the controlof gene expression mostly at the post-transcriptional level, byphosphorylating ZFP36 (tristetraprolin) and ELAVL1, and byregulating EEF2K, which is important for the elongation of mRNAduring translation. MKNK1/MNK1 and MKNK2/MNK2, two other kinasesactivated by p38 MAPKs, regulate protein synthesis byphosphorylating the initiation factor EIF4E2. MAPK14 interactsalso with casein kinase II, leading to its activation throughautophosphorylation and further phosphorylation of TP53/p53. Inthe cytoplasm, the p38 MAPK pathway is an important regulator ofprotein turnover. For example, CFLAR is an inhibitor of TNF-induced apoptosis whose proteasome-mediated degradation isregulated by p38 MAPK phosphorylation. In a similar way, MAPK14phosphorylates the ubiquitin ligase SIAH2, regulating its activitytowards EGLN3. MAPK14 may also inhibit the lysosomal degradationpathway of autophagy by interfering with the intracellulartrafficking of the transmembrane protein ATG9. Another function ofMAPK14 is to regulate the endocytosis of membrane receptors bydifferent mechanisms that impinge on the small GTPase RAB5A. Inaddition, clathrin-mediated EGFR internalization induced byinflammatory cytokines and UV irradiation depends on MAPK14-mediated phosphorylation of EGFR itself as well as of RAB5Aeffectors. Ectodomain shedding of transmembrane proteins isregulated by p38 MAPKs as well. In response to inflammatorystimuli, p38 MAPKs phosphorylate the membrane-associatedmetalloprotease ADAM17. Such phosphorylation is required forADAM17-mediated ectodomain shedding of TGF-alpha family ligands,which results in the activation of EGFR signaling and cellproliferation. Another p38 MAPK substrate is FGFR1. FGFR1 can betranslocated from the extracellular space into the cytosol andnucleus of target cells, and regulates processes such as rRNAsynthesis and cell growth. FGFR1 translocation requires p38 MAPKactivation. In the nucleus, many transcription factors arephosphorylated and activated by p38 MAPKs in response to differentstimuli. Classical examples include ATF1, ATF2, ATF6, ELK1, PTPRH,DDIT3, TP53/p53 and MEF2C and MEF2A. The p38 MAPKs are emerging asimportant modulators of gene expression by regulating chromatinmodifiers and remodelers. The promoters of several genes involvedin the inflammatory response, such as IL6, IL8 and IL12B, displaya p38 MAPK-dependent enrichment of histone H3 phosphorylation on'Ser-10' (H3S10ph) in LPS-stimulated myeloid cells. Thisphosphorylation enhances the accessibility of the cryptic NF-kappa-B-binding sites marking promoters for increased NF-kappa-Brecruitment. Phosphorylates CDC25B and CDC25C which is requiredfor binding to 14-3-3 proteins and leads to initiation of a G2delay after ultraviolet radiation. Phosphorylates TIAR followingDNA damage, releasing TIAR from GADD45A mRNA and preventing mRNAdegradation. The p38 MAPKs may also have kinase-independent roles,which are thought to be due to the binding to targets in theabsence of phosphorylation. Protein O-Glc-N-acylation catalyzed bythe OGT is regulated by MAPK14, and, although OGT does not seem tobe phosphorylated by MAPK14, their interaction increases uponMAPK14 activation induced by glucose deprivation. This interactionmay regulate OGT activity by recruiting it to specific targetssuch as neurofilament H, stimulating its O-Glc-N-acylation.Required in mid-fetal development for the growth of embryo-derivedblood vessels in the labyrinth layer of the placenta. Also playsan essential role in developmental and stress-inducederythropoiesis, through regulation of EPO gene expression. IsoformMXI2 activation is stimulated by mitogens and oxidative stress andonly poorly phosphorylates ELK1 and ATF2. Isoform EXIP may play arole in the early onset of apoptosis. Phosphorylates S100A9 at'Thr-113'. \",\n      isseed: false,\n      uniprot: \"Q16539\",\n      isvalid: true,\n      importance: 3,\n      ox: 705.1137353610045,\n      oy: 372.7634453076487,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2\",\n      altered: 0,\n      rank: 189,\n      cited: 4,\n      uniprotdesc:\n        \"Non-catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Beta non-catalytic subunit acts as ascaffold on which the AMPK complex assembles, via its C-terminusthat bridges alpha (PRKAA1 or PRKAA2) and gamma subunits (PRKAG1,PRKAG2 or PRKAG3).\",\n      isseed: false,\n      uniprot: \"O43741\",\n      isvalid: true,\n      importance: 3,\n      ox: 718.6198477055347,\n      oy: 399.5512210521357,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1\",\n      altered: 0,\n      rank: 73,\n      cited: 368,\n      uniprotdesc:\n        \"Non-catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Beta non-catalytic subunit acts as ascaffold on which the AMPK complex assembles, via its C-terminusthat bridges alpha (PRKAA1 or PRKAA2) and gamma subunits (PRKAG1,PRKAG2 or PRKAG3).\",\n      isseed: false,\n      uniprot: \"Q9Y478\",\n      isvalid: true,\n      importance: 3,\n      ox: 476.5577136594006,\n      oy: 420.49999999999994,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300\",\n      altered: 0,\n      rank: 19,\n      cited: 2835,\n      uniprotdesc:\n        \"Functions as histone acetyltransferase and regulatestranscription via chromatin remodeling. Acetylates all four corehistones in nucleosomes. Histone acetylation gives an epigenetictag for transcriptional activation. Mediates cAMP-gene regulationby binding specifically to phosphorylated CREB protein. Mediatesacetylation of histone H3 at 'Lys-122' (H3K122ac), a modificationthat localizes at the surface of the histone octamer andstimulates transcription, possibly by promoting nucleosomeinstability. Mediates acetylation of histone H3 at 'Lys-27'(H3K27ac). Also functions as acetyltransferase for nonhistonetargets. Acetylates 'Lys-131' of ALX1 and acts as its coactivatorin the presence of CREBBP. Acetylates SIRT2 and is proposed toindirectly increase the transcriptional activity of TP53 throughacetylation and subsequent attenuation of SIRT2 deacetylasefunction. Acetylates HDAC1 leading to its inactivation andmodulation of transcription. Acts as a TFAP2A-mediatedtranscriptional coactivator in presence of CITED2. Plays a role asa coactivator of NEUROD1-dependent transcription of the secretinand p21 genes and controls terminal differentiation of cells inthe intestinal epithelium. Promotes cardiac myocyte enlargement.Can also mediate transcriptional repression. Binds to and may beinvolved in the transforming capacity of the adenovirus E1Aprotein. In case of HIV-1 infection, it is recruited by the viralprotein Tat. Regulates Tat's transactivating activity and may helpinducing chromatin remodeling of proviral genes. Acetylates FOXO1and enhances its transcriptional activity. Acetylates BCL6 wichdisrupts its ability to recruit histone deacetylases and hindersits transcriptional repressor activity. Participates in CLOCK orNPAS2-regulated rhythmic gene transcription; exhibits a circadianassociation with CLOCK or NPAS2, correlating with increase inPER1/2 mRNA and histone H3 acetylation on the PER1/2 promoter.Acetylates MTA1 at 'Lys-626' which is essential for itstranscriptional coactivator activity (PubMed:10733570,PubMed:11430825, PubMed:11701890, PubMed:12402037,PubMed:12586840, PubMed:12929931, PubMed:14645221,PubMed:15186775, PubMed:15890677, PubMed:16617102,PubMed:16762839, PubMed:18722353, PubMed:18995842,PubMed:23415232, PubMed:23911289, PubMed:23934153,PubMed:8945521). Acetylates XBP1 isoform 2; acetylation increasesprotein stability of XBP1 isoform 2 and enhances itstranscriptional activity (By similarity).\",\n      isseed: false,\n      uniprot: \"Q09472\",\n      isvalid: true,\n      importance: 3,\n      ox: 476.5577136594005,\n      oy: 510.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1\",\n      altered: 0,\n      rank: 125,\n      cited: 89,\n      uniprotdesc:\n        \"Associated to surface IgM-receptor; may be involved insignal transduction. Involved in regulation of the catalyticactivity of the phosphatases PP2A, PP4 and PP6 by protecting theirpartially folded catalytic subunits from degradativepolyubiquitination until they associate with regulatory subunits.\",\n      isseed: false,\n      uniprot: \"P78318\",\n      isvalid: true,\n      importance: 3,\n      ox: 729.941829340353,\n      oy: 487.96620513822,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11\",\n      altered: 0,\n      rank: 188,\n      cited: 5,\n      uniprotdesc:\n        \"Substrate recognition component of a SCF (SKP1-CUL1-F-box protein) E3 ubiquitin-protein ligase complex which mediatesthe ubiquitination and subsequent proteasomal degradation oftarget proteins, such as DTL/CDT2, BCL6 and PRDM1/BLIMP1. TheSCF(FBXO11) complex mediates ubiquitination and degradation ofBCL6, thereby playing a role in the germinal center B-cellsterminal differentiation toward memory B-cells and plasma cells.The SCF(FBXO11) complex also mediates ubiquitination anddegradation of DTL, an important step for the regulation of TGF-beta signaling, cell migration and the timing of the cell-cycleprogression and exit. Binds to and neddylates phosphorylatedp53/TP53, inhibiting its transcriptional activity. SCF(FBXO11)does not seem to direct ubiquitination of p53/TP53.\",\n      isseed: false,\n      uniprot: \"Q86XK2\",\n      isvalid: true,\n      importance: 3,\n      ox: 481.64519932573637,\n      oy: 626.6730246484053,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1\",\n      altered: 0,\n      rank: 54,\n      cited: 617,\n      uniprotdesc:\n        \"DNA binding proteins that associates with chromatin andhas the ability to bend DNA. Binds preferentially single-strandedDNA. Involved in V(D)J recombination by acting as a cofactor ofthe RAG complex. Acts by stimulating cleavage and RAG proteinbinding at the 23 bp spacer of conserved recombination signalsequences (RSS). Heparin-binding protein that has a role in theextension of neurite-type cytoplasmic processes in developingcells (By similarity). \",\n      isseed: false,\n      uniprot: \"P09429\",\n      isvalid: true,\n      importance: 3,\n      ox: 712.435756907072,\n      oy: 545.1295331255459,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NEDD8\",\n      altered: 0,\n      rank: 205,\n      cited: 236,\n      uniprotdesc:\n        \"Ubiquitin-like protein which plays an important role incell cycle control and embryogenesis. Covalent attachment to itssubstrates requires prior activation by the E1 complex UBE1C-APPBP1 and linkage to the E2 enzyme UBE2M. Attachment of NEDD8 tocullins activates their associated E3 ubiquitin ligase activity,and thus promotes polyubiquitination and proteasomal degradationof cyclins and other regulatory proteins.\",\n      isseed: false,\n      uniprot: \"Q15843\",\n      isvalid: true,\n      importance: 2,\n      ox: 432.1137033013474,\n      oy: 593.195576415127,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ASF1A\",\n      altered: 0,\n      rank: 161,\n      cited: 27,\n      uniprotdesc:\n        \"Histone chaperone that facilitates histone depositionand histone exchange and removal during nucleosome assembly anddisassembly. Cooperates with chromatin assembly factor 1 (CAF-1)to promote replication-dependent chromatin assembly and with HIRAto promote replication-independent chromatin assembly. Requiredfor the formation of senescence-associated heterochromatin foci(SAHF) and efficient senescence-associated cell cycle exit.\",\n      isseed: false,\n      uniprot: \"Q9Y294\",\n      isvalid: true,\n      importance: 3,\n      ox: 412.29346159964496,\n      oy: 570.6754072575452,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT8\",\n      altered: 0,\n      rank: 199,\n      cited: 0,\n      uniprotdesc:\n        \"Histone acetyltransferase which may be involved intranscriptional activation. May influence the function of ATM. Aspart of the MSL complex it is involved in acetylation ofnucleosomal histone H4 producing specifically H4K16ac. As part ofthe NSL complex it may be involved in acetylation of nucleosomalhistone H4 on several lysine residues. That activity is lessspecific than the one of the MSL complex. Can also acetylateTP53/p53 at 'Lys-120'. \",\n      isseed: false,\n      uniprot: \"Q9H7Z6\",\n      isvalid: true,\n      importance: 3,\n      ox: 452.21985952208775,\n      oy: 707.5238675129558,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT\",\n      altered: 0,\n      rank: 43,\n      cited: 858,\n      uniprotdesc:\n        \"May play a role in microtubule-mediated transport orvesicle function.\",\n      isseed: false,\n      uniprot: \"P42858\",\n      isvalid: true,\n      importance: 3,\n      ox: 632.4422863405995,\n      oy: 510.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN\",\n      altered: 0,\n      rank: 53,\n      cited: 621,\n      uniprotdesc:\n        \"Multifunctional enzyme that has both magnesium and ATP-dependent DNA-helicase activity and 3'->5' exonuclease activitytowards double-stranded DNA with a 5'-overhang. Has no nucleaseactivity towards single-stranded DNA or blunt-ended double-stranded DNA. Binds preferentially to DNA substrates containingalternate secondary structures, such as replication forks andHolliday junctions. May play an important role in the dissociationof joint DNA molecules that can arise as products of homologousrecombination, at stalled replication forks or during DNA repair.Alleviates stalling of DNA polymerases at the site of DNA lesions.Important for genomic integrity. Plays a role in the formation ofDNA replication focal centers; stably associates with focielements generating binding sites for RP-A (By similarity). Playsa role in double-strand break repair after gamma-irradiation.\",\n      isseed: false,\n      uniprot: \"Q14191\",\n      isvalid: true,\n      importance: 3,\n      ox: 676.8862966986526,\n      oy: 593.1955764151269,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDKN1A\",\n      altered: 0,\n      rank: 9,\n      cited: 4784,\n      uniprotdesc:\n        \"May be the important intermediate by which p53/TP53mediates its role as an inhibitor of cellular proliferation inresponse to DNA damage. Binds to and inhibits cyclin-dependentkinase activity, preventing phosphorylation of critical cyclin-dependent kinase substrates and blocking cell cycle progression.Functions in the nuclear localization and assembly of cyclin D-CDK4 complex and promotes its kinase activity towards RB1. Athigher stoichiometric ratios, inhibits the kinase activity of thecyclin D-CDK4 complex. \",\n      isseed: false,\n      uniprot: \"P38936\",\n      isvalid: true,\n      importance: 3,\n      ox: 653.5452240690994,\n      oy: 612.0421763339962,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PLK3\",\n      altered: 0,\n      rank: 115,\n      cited: 130,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved in cell cycleregulation, response to stress and Golgi disassembly. Polo-likekinases act by binding and phosphorylating proteins are thatalready phosphorylated on a specific motif recognized by the POLObox domains. Phosphorylates ATF2, BCL2L1, CDC25A, CDC25C, CHEK2,HIF1A, JUN, p53/TP53, p73/TP73, PTEN, TOP2A and VRK1. Involved incell cycle regulation: required for entry into S phase andcytokinesis. Phosphorylates BCL2L1, leading to regulate the G2checkpoint and progression to cytokinesis during mitosis. Plays akey role in response to stress: rapidly activated upon stressstimulation, such as ionizing radiation, reactive oxygen species(ROS), hyperosmotic stress, UV irradiation and hypoxia. Involvedin DNA damage response and G1/S transition checkpoint byphosphorylating CDC25A, p53/TP53 and p73/TP73. Phosphorylatesp53/TP53 in response to reactive oxygen species (ROS), therebypromoting p53/TP53-mediated apoptosis. Phosphorylates CHEK2 inresponse to DNA damage, promoting the G2/M transition checkpoint.Phosphorylates the transcription factor p73/TP73 in response toDNA damage, leading to inhibit p73/TP73-mediated transcriptionalactivation and pro-apoptotic functions. Phosphorylates HIF1A andJUN is response to hypoxia. Phosphorylates ATF2 followinghyperosmotic stress in corneal epithelium. Also involved in Golgidisassembly during the cell cycle: part of a MEK1/MAP2K1-dependentpathway that induces Golgi fragmentation during mitosis bymediating phosphorylation of VRK1. May participate in endomitoticcell cycle, a form of mitosis in which both karyokinesis andcytokinesis are interrupted and is a hallmark of megakaryocytedifferentiation, via its interaction with CIB1.\",\n      isseed: false,\n      uniprot: \"Q9H4B4\",\n      isvalid: true,\n      importance: 3,\n      ox: 377.7849345637625,\n      oy: 457.9932361520796,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DYRK1A\",\n      altered: 0,\n      rank: 128,\n      cited: 81,\n      uniprotdesc:\n        \"May play a role in a signaling pathway regulatingnuclear functions of cell proliferation. Modulates alternativesplicing by phosphorylating the splice factor SRSF6 (Bysimilarity). Phosphorylates serine, threonine and tyrosineresidues in its sequence and in exogenous substrates such as CRY2,FOXO1, SRSF6 and SIRT1. Exhibits a sugstrate preference forproline at position P+1 and arginine at position P-3.\",\n      isseed: false,\n      uniprot: \"Q13627\",\n      isvalid: true,\n      importance: 3,\n      ox: 584.451073117784,\n      oy: 204.46415418337006,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1\",\n      altered: 0,\n      rank: 177,\n      cited: 11,\n      uniprotdesc:\n        \"AMP/ATP-binding subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Gamma non-catalytic subunit mediatesbinding to AMP, ADP and ATP, leading to activate or inhibit AMPK:AMP-binding results in allosteric activation of alpha catalyticsubunit (PRKAA1 or PRKAA2) both by inducing phosphorylation andpreventing dephosphorylation of catalytic subunits. ADP alsostimulates phosphorylation, without stimulating alreadyphosphorylated catalytic subunit. ATP promotes dephosphorylationof catalytic subunit, rendering the AMPK enzyme inactive.\",\n      isseed: false,\n      uniprot: \"P54619\",\n      isvalid: true,\n      importance: 3,\n      ox: 627.3548006742639,\n      oy: 626.6730246484052,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP6\",\n      altered: 0,\n      rank: 104,\n      cited: 161,\n      uniprotdesc:\n        \"Involved in the activation cascade of caspasesresponsible for apoptosis execution. Cleaves poly(ADP-ribose)polymerase in vitro, as well as lamins. Overexpression promotesprogrammed cell death.\",\n      isseed: false,\n      uniprot: \"P55212\",\n      isvalid: true,\n      importance: 3,\n      ox: 642.7964774016498,\n      oy: 218.03179666759164,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAX\",\n      altered: 0,\n      rank: 158,\n      cited: 28,\n      uniprotdesc:\n        \"Transcription regulator. Forms a sequence-specific DNA-binding protein complex with MYC or MAD which recognizes the coresequence 5'-CAC[GA]TG-3'. The MYC:MAX complex is a transcriptionalactivator, whereas the MAD:MAX complex is a repressor. May represstranscription via the recruitment of a chromatin remodelingcomplex containing H3 'Lys-9' histone methyltransferase activity.\",\n      isseed: false,\n      uniprot: \"P61244\",\n      isvalid: true,\n      importance: 3,\n      ox: 524.5489268822162,\n      oy: 204.46415418337,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FOS\",\n      altered: 0,\n      rank: 61,\n      cited: 496,\n      uniprotdesc:\n        \"Nuclear phosphoprotein which forms a tight but non-covalently linked complex with the JUN/AP-1 transcription factor.In the heterodimer, FOS and JUN/AP-1 basic regions each seems tointeract with symmetrical DNA half sites. On TGF-beta activation,forms a multimeric SMAD3/SMAD4/JUN/FOS complex at the AP1/SMAD-binding site to regulate TGF-beta-mediated signaling. Has acritical function in regulating the development of cells destinedto form and maintain the skeleton. It is thought to have animportant role in signal transduction, cell proliferation anddifferentiation. In growing cells, activates phospholipidsynthesis, possibly by activating CDS1 and PI4K2A. This activityrequires Tyr-dephosphorylation and association with theendoplasmic reticulum. \",\n      isseed: false,\n      uniprot: \"P01100\",\n      isvalid: true,\n      importance: 3,\n      ox: 696.5525693086885,\n      oy: 244.46188759648143,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53I3\",\n      altered: 0,\n      rank: 152,\n      cited: 39,\n      uniprotdesc:\n        \"May be involved in the generation of reactive oxygenspecies (ROS). Has low NADPH-dependent beta-naphthoquinonereductase activity, with a preference for 1,2-beta-naphthoquinoneover 1,4-beta-naphthoquinone. Has low NADPH-dependent diaminereductase activity (in vitro). \",\n      isseed: false,\n      uniprot: \"Q53FA7\",\n      isvalid: true,\n      importance: 3,\n      ox: 720.823079139937,\n      oy: 262.0954451652557,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT1\",\n      altered: 0,\n      rank: 206,\n      cited: 189,\n      uniprotdesc:\n        \"Arginine methyltransferase that methylates (mono andasymmetric dimethylation) the guanidino nitrogens of arginylresidues present in proteins such as ESR1, histone H2, H3 and H4,PIAS1, HNRNPA1, HNRNPD, NFATC2IP, SUPT5H, TAF15 and EWS.Constitutes the main enzyme that mediates monomethylation andasymmetric dimethylation of histone H4 'Arg-4' (H4R3me1 andH4R3me2a, respectively), a specific tag for epigenetictranscriptional activation. Together with dimethylated PIAS1,represses STAT1 transcriptional activity, in the late phase ofinterferon gamma (IFN-gamma) signaling. May be involved in theregulation of TAF15 transcriptional activity, act as an activatorof estrogen receptor (ER)-mediated transactivation, play a keyrole in neurite outgrowth and act as a negative regulator ofmegakaryocytic differentiation, by modulating p38 MAPK pathway.Methylates FOXO1 and retains it in the nucleus increasing itstranscriptional activity. \",\n      isseed: false,\n      uniprot: \"Q99873\",\n      isvalid: true,\n      importance: 2,\n      ox: 742.9253132762292,\n      oy: 282.3806921734763,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PCBP4\",\n      altered: 0,\n      rank: 165,\n      cited: 20,\n      uniprotdesc:\n        \"Single-stranded nucleic acid binding protein that bindspreferentially to oligo dC. \",\n      isseed: false,\n      uniprot: \"P57723\",\n      isvalid: true,\n      importance: 3,\n      ox: 762.5711352945876,\n      oy: 305.05317940410396,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT5\",\n      altered: 0,\n      rank: 118,\n      cited: 111,\n      uniprotdesc:\n        \"Arginine methyltransferase that can both catalyze theformation of omega-N monomethylarginine (MMA) and symmetricaldimethylarginine (sDMA), with a preference for the formation ofMMA. Specifically mediates the symmetrical dimethylation ofarginine residues in the small nuclear ribonucleoproteins Sm D1(SNRPD1) and Sm D3 (SNRPD3); such methylation being required forthe assembly and biogenesis of snRNP core particles. MethylatesSUPT5H. Mono- and dimethylates arginine residues of myelin basicprotein (MBP) in vitro. Plays a role in the assembly of snRNP coreparticles. May play a role in cytokine-activated transductionpathways. Negatively regulates cyclin E1 promoter activity andcellular proliferation. May regulate the SUPT5H transcriptionalelongation properties. May be part of a pathway that is connectedto a chloride current, possibly through cytoskeletalrearrangement. Methylates histone H2A and H4 'Arg-3' during germcell development. Methylates histone H3 'Arg-8', which may represstranscription. Methylates the Piwi proteins (PIWIL1, PIWIL2 andPIWIL4), methylation of Piwi proteins being required for theinteraction with Tudor domain-containing proteins and subsequentlocalization to the meiotic nuage. Methylates RPS10. AttenuatesEGF signaling through the MAPK1/MAPK3 pathway acting at 2 levels.First, monomethylates EGFR; this enhances EGFR 'Tyr-1197'phosphorylation and PTPN6 recruitment, eventually leading toreduced SOS1 phosphorylation. Second, methylates RAF1 and probablyBRAF, hence destabilizing these 2 signaling proteins and reducingtheir catalytic activity. Required for induction of E-selectin andVCAM-1, on the endothelial cells surface at sites of inflammation.Methylates HOXA9. Methylates and regulates SRGAP2 which isinvolved in cell migration and differentiation. Acts as atranscriptional corepressor in CRY1-mediated repression of thecore circadian component PER1 by regulating the H4R3 dimethylationat the PER1 promoter. \",\n      isseed: false,\n      uniprot: \"O14744\",\n      isvalid: true,\n      importance: 3,\n      ox: 779.5044318605908,\n      oy: 329.8173363129873,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"E4F1\",\n      altered: 0,\n      rank: 150,\n      cited: 47,\n      uniprotdesc:\n        \"May function as a transcriptional repressor. May alsofunction as a ubiquitin ligase mediating ubiquitination ofchromatin-associated TP53. Functions in cell survival andproliferation through control of the cell cycle. Functions in thep53 and pRB tumor suppressor pathways and regulates the cyclinCCNA2 transcription.Identified as a cellular target of the adenoviraloncoprotein E1A, it is required for both transcriptionalactivation and repression of viral genes.\",\n      isseed: false,\n      uniprot: \"Q66K89\",\n      isvalid: true,\n      importance: 3,\n      ox: 793.504451557361,\n      oy: 356.35032424292166,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP1\",\n      altered: 0,\n      rank: 64,\n      cited: 473,\n      uniprotdesc:\n        \"Thiol protease that cleaves IL-1 beta between an Asp andan Ala, releasing the mature cytokine which is involved in avariety of inflammatory processes. Important for defense againstpathogens. Cleaves and activates sterol regulatory element bindingproteins (SREBPs). Can also promote apoptosis.\",\n      isseed: false,\n      uniprot: \"P29466\",\n      isvalid: true,\n      importance: 3,\n      ox: 804.3886827178802,\n      oy: 384.3062451192652,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCA\",\n      altered: 0,\n      rank: 84,\n      cited: 275,\n      uniprotdesc:\n        \"Calcium-activated, phospholipid- and diacylglycerol(DAG)-dependent serine/threonine-protein kinase that is involvedin positive and negative regulation of cell proliferation,apoptosis, differentiation, migration and adhesion, tumorigenesis,cardiac hypertrophy, angiogenesis, platelet function andinflammation, by directly phosphorylating targets such as RAF1,BCL2, CSPG4, TNNT2/CTNT, or activating signaling cascade involvingMAPK1/3 (ERK1/2) and RAP1GAP. Involved in cell proliferation andcell growth arrest by positive and negative regulation of the cellcycle. Can promote cell growth by phosphorylating and activatingRAF1, which mediates the activation of the MAPK/ERK signalingcascade, and/or by up-regulating CDKN1A, which facilitates activecyclin-dependent kinase (CDK) complex formation in glioma cells.In intestinal cells stimulated by the phorbol ester PMA, cantrigger a cell cycle arrest program which is associated with theaccumulation of the hyper-phosphorylated growth-suppressive formof RB1 and induction of the CDK inhibitors CDKN1A and CDKN1B.Exhibits anti-apoptotic function in glioma cells and protects themfrom apoptosis by suppressing the p53/TP53-mediated activation ofIGFBP3, and in leukemia cells mediates anti-apoptotic action byphosphorylating BCL2. During macrophage differentiation induced bymacrophage colony-stimulating factor (CSF1), is translocated tothe nucleus and is associated with macrophage development. Afterwounding, translocates from focal contacts to lamellipodia andparticipates in the modulation of desmosomal adhesion. Plays arole in cell motility by phosphorylating CSPG4, which inducesassociation of CSPG4 with extensive lamellipodia at the cellperiphery and polarization of the cell accompanied by increases incell motility. Is highly expressed in a number of cancer cellswhere it can act as a tumor promoter and is implicated inmalignant phenotypes of several tumors such as gliomas and breastcancers. Negatively regulates myocardial contractility andpositively regulates angiogenesis, platelet aggregation andthrombus formation in arteries. Mediates hypertrophic growth ofneonatal cardiomyocytes, in part through a MAPK1/3 (ERK1/2)-dependent signaling pathway, and upon PMA treatment, is requiredto induce cardiomyocyte hypertrophy up to heart failure and death,by increasing protein synthesis, protein-DNA ratio and cellsurface area. Regulates cardiomyocyte function by phosphorylatingcardiac troponin T (TNNT2/CTNT), which induces significantreduction in actomyosin ATPase activity, myofilament calciumsensitivity and myocardial contractility. In angiogenesis, isrequired for full endothelial cell migration, adhesion tovitronectin (VTN), and vascular endothelial growth factor A(VEGFA)-dependent regulation of kinase activation and vasculartube formation. Involved in the stabilization of VEGFA mRNA atpost-transcriptional level and mediates VEGFA-induced cellproliferation. In the regulation of calcium-induced plateletaggregation, mediates signals from the CD36/GP4 receptor forgranule release, and activates the integrin heterodimer ITGA2B-ITGB3 through the RAP1GAP pathway for adhesion. During response tolipopolysaccharides (LPS), may regulate selective LPS-inducedmacrophage functions involved in host defense and inflammation.But in some inflammatory responses, may negatively regulate NF-kappa-B-induced genes, through IL1A-dependent induction of NF-kappa-B inhibitor alpha (NFKBIA/IKBA). Upon stimulation with 12-O-tetradecanoylphorbol-13-acetate (TPA), phosphorylates EIF4G1,which modulates EIF4G1 binding to MKNK1 and may be involved in theregulation of EIF4E phosphorylation. Phosphorylates KIT, leadingto inhibition of KIT activity. Phosphorylates ATF2 which promotescooperation between ATF2 and JUN, activating transcription.\",\n      isseed: false,\n      uniprot: \"P17252\",\n      isvalid: true,\n      importance: 3,\n      ox: 812.0152327436849,\n      oy: 413.32065076032404,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK1\",\n      altered: 0,\n      rank: 27,\n      cited: 2149,\n      uniprotdesc:\n        \"Plays a key role in the control of the eukaryotic cellcycle by modulating the centrosome cycle as well as mitotic onset;promotes G2-M transition, and regulates G1 progress and G1-Stransition via association with multiple interphase cyclins.Required in higher cells for entry into S-phase and mitosis.Phosphorylates PARVA/actopaxin, APC, AMPH, APC, BARD1, Bcl-xL/BCL2L1, BRCA2, CALD1, CASP8, CDC7, CDC20, CDC25A, CDC25C,CC2D1A, CSNK2 proteins/CKII, FZR1/CDH1, CDK7, CEBPB, CHAMP1,DMD/dystrophin, EEF1 proteins/EF-1, EZH2, KIF11/EG5, EGFR, FANCG,FOS, GFAP, GOLGA2/GM130, GRASP1, UBE2A/hHR6A, HIST1H1proteins/histone H1, HMGA1, HIVEP3/KRC, LMNA, LMNB, LMNC, LBR,LATS1, MAP1B, MAP4, MARCKS, MCM2, MCM4, MKLP1, MYB, NEFH, NFIC,NPC/nuclear pore complex, PITPNM1/NIR2, NPM1, NCL, NUCKS1,NPM1/numatrin, ORC1, PRKAR2A, EEF1E1/p18, EIF3F/p47, p53/TP53,NONO/p54NRB, PAPOLA, PLEC/plectin, RB1, UL40/R2, RAB4A, RAP1GAP,RCC1, RPS6KB1/S6K1, KHDRBS1/SAM68, ESPL1, SKI, BIRC5/survivin,STIP1, TEX14, beta-tubulins, MAPT/TAU, NEDD1, VIM/vimentin, TK1,FOXO1, RUNX1/AML1, SIRT2 and RUNX2. CDK1/CDC2-cyclin-B controlspronuclear union in interphase fertilized eggs. Essential forearly stages of embryonic development. During G2 and earlymitosis, CDC25A/B/C-mediated dephosphorylation activatesCDK1/cyclin complexes which phosphorylate several substrates thattrigger at least centrosome separation, Golgi dynamics, nuclearenvelope breakdown and chromosome condensation. Once chromosomesare condensed and aligned at the metaphase plate, CDK1 activity isswitched off by WEE1- and PKMYT1-mediated phosphorylation to allowsister chromatid separation, chromosome decondensation,reformation of the nuclear envelope and cytokinesis. Inactivatedby PKR/EIF2AK2- and WEE1-mediated phosphorylation upon DNA damageto stop cell cycle and genome replication at the G2 checkpointthus facilitating DNA repair. Reactivated after successful DNArepair through WIP1-dependent signaling leading to CDC25A/B/C-mediated dephosphorylation and restoring cell cycle progression.In proliferating cells, CDK1-mediated FOXO1 phosphorylation at theG2-M phase represses FOXO1 interaction with 14-3-3 proteins andthereby promotes FOXO1 nuclear accumulation and transcriptionfactor activity, leading to cell death of postmitotic neurons. Thephosphorylation of beta-tubulins regulates microtubule dynamicsduring mitosis. NEDD1 phosphorylation promotes PLK1-mediated NEDD1phosphorylation and subsequent targeting of the gamma-tubulin ringcomplex (gTuRC) to the centrosome, an important step for spindleformation. In addition, CC2D1A phosphorylation regulates CC2D1Aspindle pole localization and association with SCC1/RAD21 andcentriole cohesion during mitosis. The phosphorylation of Bcl-xL/BCL2L1 after prolongated G2 arrest upon DNA damage triggersapoptosis. In contrast, CASP8 phosphorylation during mitosisprevents its activation by proteolysis and subsequent apoptosis.This phosphorylation occurs in cancer cell lines, as well as inprimary breast tissues and lymphocytes. EZH2 phosphorylationpromotes H3K27me3 maintenance and epigenetic gene silencing. CALD1phosphorylation promotes Schwann cell migration during peripheralnerve regeneration. \",\n      isseed: false,\n      uniprot: \"P06493\",\n      isvalid: true,\n      importance: 3,\n      ox: 816.2846778918833,\n      oy: 443.01529401675197,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK9\",\n      altered: 0,\n      rank: 66,\n      cited: 448,\n      uniprotdesc:\n        \"Protein kinase involved in the regulation oftranscription. Member of the cyclin-dependent kinase pair(CDK9/cyclin-T) complex, also called positive transcriptionelongation factor b (P-TEFb), which facilitates the transitionfrom abortive to productive elongation by phosphorylating the CTD(C-terminal domain) of the large subunit of RNA polymerase II(RNAP II) POLR2A, SUPT5H and RDBP. This complex is inactive whenin the 7SK snRNP complex form. Phosphorylates EP300, MYOD1,RPB1/POLR2A and AR, and the negative elongation factors DSIF andNELF. Regulates cytokine inducible transcription networks byfacilitating promoter recognition of target transcription factors(e.g. TNF-inducible RELA/p65 activation and IL-6-inducible STAT3signaling). Promotes RNA synthesis in genetic programs for cellgrowth, differentiation and viral pathogenesis. P-TEFb is alsoinvolved in cotranscriptional histone modification, mRNAprocessing and mRNA export. Modulates a complex network ofchromatin modifications including histone H2B monoubiquitination(H2Bub1), H3 lysine 4 trimethylation (H3K4me3) and H3K36me3;integrates phosphorylation during transcription with chromatinmodifications to control co-transcriptional histone mRNAprocessing. The CDK9/cyclin-K complex has also a kinase activitytowards CTD of RNAP II and can substitute for CDK9/cyclin-T P-TEFbin vitro. Replication stress response protein; the CDK9/cyclin-Kcomplex is required for genome integrity maintenance, by promotingcell cycle recovery from replication arrest and limiting single-stranded DNA amount in response to replication stress, thusreducing the breakdown of stalled replication forks and avoidingDNA damage. In addition, probable function in DNA repair ofisoform 2 via interaction with KU70/XRCC6. Promotes cardiacmyocyte enlargement. RPB1/POLR2A phosphorylation on 'Ser-2' in CTDactivates transcription. AR phosphorylation modulates ARtranscription factor promoter selectivity and cell growth. DSIFand NELF phosphorylation promotes transcription by inhibitingtheir negative effect. The phosphorylation of MYOD1 enhances itstranscriptional activity and thus promotes muscle differentiation.\",\n      isseed: false,\n      uniprot: \"P50750\",\n      isvalid: true,\n      importance: 3,\n      ox: 817.1413594156943,\n      oy: 473.0030598015976,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RB1\",\n      altered: 0,\n      rank: 15,\n      cited: 3201,\n      uniprotdesc:\n        \"Key regulator of entry into cell division that acts as atumor suppressor. Promotes G0-G1 transition when phosphorylated byCDK3/cyclin-C. Acts as a transcription repressor of E2F1 targetgenes. The underphosphorylated, active form of RB1 interacts withE2F1 and represses its transcription activity, leading to cellcycle arrest. Directly involved in heterochromatin formation bymaintaining overall chromatin structure and, in particular, thatof constitutive heterochromatin by stabilizing histonemethylation. Recruits and targets histone methyltransferasesSUV39H1, SUV420H1 and SUV420H2, leading to epigenetictranscriptional repression. Controls histone H4 'Lys-20'trimethylation. Inhibits the intrinsic kinase activity of TAF1.Mediates transcriptional repression by SMARCA4/BRG1 by recruitinga histone deacetylase (HDAC) complex to the c-FOS promoter. Inresting neurons, transcription of the c-FOS promoter is inhibitedby BRG1-dependent recruitment of a phospho-RB1-HDAC1 repressorcomplex. Upon calcium influx, RB1 is dephosphorylated bycalcineurin, which leads to release of the repressor complex (Bysimilarity). In case of viral infections, interactions with SV40large T antigen, HPV E7 protein or adenovirus E1A protein inducethe disassembly of RB1-E2F1 complex thereby disrupting RB1'sactivity. \",\n      isseed: false,\n      uniprot: \"P06400\",\n      isvalid: true,\n      importance: 3,\n      ox: 814.574109161329,\n      oy: 502.89301172747827,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK7\",\n      altered: 0,\n      rank: 72,\n      cited: 372,\n      uniprotdesc:\n        \"Serine/threonine kinase involved in cell cycle controland in RNA polymerase II-mediated RNA transcription. Cyclin-dependent kinases (CDKs) are activated by the binding to a cyclinand mediate the progression through the cell cycle. Each differentcomplex controls a specific transition between 2 subsequent phasesin the cell cycle. Required for both activation and complexformation of CDK1/cyclin-B during G2-M transition, and foractivation of CDK2/cyclins during G1-S transition (but not complexformation). CDK7 is the catalytic subunit of the CDK-activatingkinase (CAK) complex. Phosphorylates SPT5/SUPT5H, SF1/NR5A1,POLR2A, p53/TP53, CDK1, CDK2, CDK4, CDK6 and CDK11B/CDK11. CAKactivates the cyclin-associated kinases CDK1, CDK2, CDK4 and CDK6by threonine phosphorylation, thus regulating cell cycleprogression. CAK complexed to the core-TFIIH basal transcriptionfactor activates RNA polymerase II by serine phosphorylation ofthe repetitive C-terminal domain (CTD) of its large subunit(POLR2A), allowing its escape from the promoter and elongation ofthe transcripts. Phosphorylation of POLR2A in complex with DNApromotes transcription initiation by triggering dissociation fromDNA. Its expression and activity are constant throughout the cellcycle. Upon DNA damage, triggers p53/TP53 activation byphosphorylation, but is inactivated in turn by p53/TP53; thisfeedback loop may lead to an arrest of the cell cycle and of thetranscription, helping in cell recovery, or to apoptosis. Requiredfor DNA-bound peptides-mediated transcription and cellular growthinhibition. \",\n      isseed: false,\n      uniprot: \"P50613\",\n      isvalid: true,\n      importance: 3,\n      ox: 808.6163951619568,\n      oy: 532.2954885602501,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGA2\",\n      altered: 0,\n      rank: 82,\n      cited: 280,\n      uniprotdesc:\n        \"Functions as a transcriptional regulator. Functions incell cycle regulation through CCNA2. Plays an important role inchromosome condensation during the meiotic G2/M transition ofspermatocytes. \",\n      isseed: false,\n      uniprot: \"P52926\",\n      isvalid: true,\n      importance: 3,\n      ox: 390.3801522944653,\n      oy: 399.55122105213593,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK3\",\n      altered: 0,\n      rank: 112,\n      cited: 146,\n      uniprotdesc:\n        \"Serine/threonine kinase which is involved in theregulation of apoptosis, autophagy, transcription, translation andactin cytoskeleton reorganization. Involved in the regulation ofsmooth muscle contraction. Regulates both type I (caspase-dependent) apoptotic and type II (caspase-independent) autophagiccell deaths signal, depending on the cellular setting. Involved inregulation of starvation-induced autophagy. Regulates myosinphosphorylation in both smooth muscle and non-muscle cells. Insmooth muscle, regulates myosin either directly by phosphorylatingMYL12B and MYL9 or through inhibition of smooth muscle myosinphosphatase (SMPP1M) via phosphorylation of PPP1R12A; theinhibition of SMPP1M functions to enhance muscle responsiveness toCa(2+) and promote a contractile state. Phosphorylates MYL12B innon-muscle cells leading to reorganization of actin cytoskeleton.Isoform 2 can phosphorylate myosin, PPP1R12A and MYL12B.Overexpression leads to condensation of actin stress fibers intothick bundles. Involved in actin filament focal adhesion dynamics.The function in both reorganization of actin cytoskeleton andfocal adhesion dissolution is modulated by RhoD. Positivelyregulates canonical Wnt/beta-catenin signaling through interactionwith NLK and TCF7L2. Phosphorylates RPL13A on 'Ser-77' uponinterferon-gamma activation which is causing RPL13A release fromthe ribosome, RPL13A association with the GAIT complex and itssubsequent involvement in transcript-selective translationinhibition. Enhances transcription from AR-responsive promoters ina hormone- and kinase-dependent manner. Involved in regulation ofcell cycle progression and cell proliferation. May be a tumorsuppressor. \",\n      isseed: false,\n      uniprot: \"O43293\",\n      isvalid: true,\n      importance: 3,\n      ox: 786.8834349406518,\n      oy: 588.1161439097402,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGA1\",\n      altered: 0,\n      rank: 111,\n      cited: 147,\n      uniprotdesc:\n        \"HMG-I/Y bind preferentially to the minor groove of A+Trich regions in double-stranded DNA. It is suggested that theseproteins could function in nucleosome phasing and in the 3'-endprocessing of mRNA transcripts. They are also involved in thetranscription regulation of genes containing, or in closeproximity to A+T-rich regions.\",\n      isseed: false,\n      uniprot: \"P17096\",\n      isvalid: true,\n      importance: 3,\n      ox: 403.8862646389955,\n      oy: 372.7634453076488,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCD\",\n      altered: 0,\n      rank: 122,\n      cited: 90,\n      uniprotdesc:\n        \"Calcium-independent, phospholipid- and diacylglycerol(DAG)-dependent serine/threonine-protein kinase that playscontrasting roles in cell death and cell survival by functioningas a pro-apoptotic protein during DNA damage-induced apoptosis,but acting as an anti-apoptotic protein during cytokine receptor-initiated cell death, is involved in tumor suppression as well assurvival of several cancers, is required for oxygen radicalproduction by NADPH oxidase and acts as positive or negativeregulator in platelet functional responses. Negatively regulates Bcell proliferation and also has an important function in self-antigen induced B cell tolerance induction. Upon DNA damage,activates the promoter of the death-promoting transcription factorBCLAF1/Btf to trigger BCLAF1-mediated p53/TP53 gene transcriptionand apoptosis. In response to oxidative stress, interact with andactivate CHUK/IKKA in the nucleus, causing the phosphorylation ofp53/TP53. In the case of ER stress or DNA damage-inducedapoptosis, can form a complex with the tyrosine-protein kinaseABL1 which trigger apoptosis independently of p53/TP53. In cytosolcan trigger apoptosis by activating MAPK11 or MAPK14, inhibitingAKT1 and decreasing the level of X-linked inhibitor of apoptosisprotein (XIAP), whereas in nucleus induces apoptosis via theactivation of MAPK8 or MAPK9. Upon ionizing radiation treatment,is required for the activation of the apoptosis regulators BAX andBAK, which trigger the mitochondrial cell death pathway. Canphosphorylate MCL1 and target it for degradation which issufficient to trigger for BAX activation and apoptosis. Isrequired for the control of cell cycle progression both at G1/Sand G2/M phases. Mediates phorbol 12-myristate 13-acetate (PMA)-induced inhibition of cell cycle progression at G1/S phase by up-regulating the CDK inhibitor CDKN1A/p21 and inhibiting the cyclinCCNA2 promoter activity. In response to UV irradiation canphosphorylate CDK1, which is important for the G2/M DNA damagecheckpoint activation. Can protect glioma cells from the apoptosisinduced by TNFSF10/TRAIL, probably by inducing increasedphosphorylation and subsequent activation of AKT1. Is highlyexpressed in a number of cancer cells and promotes cell survivaland resistance against chemotherapeutic drugs by inducing cyclinD1 (CCND1) and hyperphosphorylation of RB1, and via several pro-survival pathways, including NF-kappa-B, AKT1 and MAPK1/3(ERK1/2). Can also act as tumor suppressor upon mitogenicstimulation with PMA or TPA. In N-formyl-methionyl-leucyl-phenylalanine (fMLP)-treated cells, is required for NCF1 (p47-phox) phosphorylation and activation of NADPH oxidase activity,and regulates TNF-elicited superoxide anion production inneutrophils, by direct phosphorylation and activation of NCF1 orindirectly through MAPK1/3 (ERK1/2) signaling pathways. May alsoplay a role in the regulation of NADPH oxidase activity ineosinophil after stimulation with IL5, leukotriene B4 or PMA. Incollagen-induced platelet aggregation, acts a negative regulatorof filopodia formation and actin polymerization by interactingwith and negatively regulating VASP phosphorylation. Downstream ofPAR1, PAR4 and CD36/GP4 receptors, regulates differentiallyplatelet dense granule secretion; acts as a positive regulator inPAR-mediated granule secretion, whereas it negatively regulatesCD36/GP4-mediated granule release. Phosphorylates MUC1 in the C-terminal and regulates the interaction between MUC1 and beta-catenin. The catalytic subunit phosphorylates 14-3-3 proteins(YWHAB, YWHAZ and YWHAH) in a sphingosine-dependent fashion (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"Q05655\",\n      isvalid: true,\n      importance: 3,\n      ox: 753.0720747024197,\n      oy: 637.5636821949563,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"UBN1\",\n      altered: 0,\n      rank: 180,\n      cited: 8,\n      uniprotdesc:\n        \"Acts as a novel regulator of senescence. Involved in theformation of senescence-associated heterochromatin foci (SAHF),which represses expression of proliferation-promoting genes. Bindsto proliferation-promoting genes. May be required for replication-independent chromatin assembly. \",\n      isseed: false,\n      uniprot: \"Q9NPG3\",\n      isvalid: true,\n      importance: 3,\n      ox: 421.7252599281241,\n      oy: 348.6435313966405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK5\",\n      altered: 0,\n      rank: 44,\n      cited: 837,\n      uniprotdesc:\n        \"Proline-directed serine/threonine-protein kinaseessential for neuronal cell cycle arrest and differentiation andmay be involved in apoptotic cell death in neuronal diseases bytriggering abortive cell cycle re-entry. Interacts with D1 and D3-type G1 cyclins. Phosphorylates SRC, NOS3, VIM/vimentin,p35/CDK5R1, MEF2A, SIPA1L1, SH3GLB1, PXN, PAK1, MCAM/MUC18, SEPT5,SYN1, DNM1, AMPH, SYNJ1, CDK16, RAC1, RHOA, CDC42, TONEBP/NFAT5,MAPT/TAU, MAP1B, histone H1, p53/TP53, HDAC1, APEX1, PTK2/FAK1,huntingtin/HTT, ATM, MAP2, NEFH and NEFM. Regulates severalneuronal development and physiological processes includingneuronal survival, migration and differentiation, axonal andneurite growth, synaptogenesis, oligodendrocyte differentiation,synaptic plasticity and neurotransmission, by phosphorylating keyproteins. Activated by interaction with CDK5R1 (p35) and CDK5R2(p39), especially in post-mitotic neurons, and promotes CDK5R1(p35) expression in an autostimulation loop. Phosphorylates manydownstream substrates such as Rho and Ras family small GTPases(e.g. PAK1, RAC1, RHOA, CDC42) or microtubule-binding proteins(e.g. MAPT/TAU, MAP2, MAP1B), and modulates actin dynamics toregulate neurite growth and/or spine morphogenesis. Phosphorylatesalso exocytosis associated proteins such as MCAM/MUC18, SEPT5,SYN1, and CDK16/PCTAIRE1 as well as endocytosis associatedproteins such as DNM1, AMPH and SYNJ1 at synaptic terminals. Inthe mature central nervous system (CNS), regulatesneurotransmitter movements by phosphorylating substratesassociated with neurotransmitter release and synapse plasticity;synaptic vesicle exocytosis, vesicles fusion with the presynapticmembrane, and endocytosis. Promotes cell survival by activatinganti-apoptotic proteins BCL2 and STAT3, and negatively regulatingof JNK3/MAPK10 activity. Phosphorylation of p53/TP53 in responseto genotoxic and oxidative stresses enhances its stabilization bypreventing ubiquitin ligase-mediated proteasomal degradation, andinduces transactivation of p53/TP53 target genes, thus regulatingapoptosis. Phosphorylation of p35/CDK5R1 enhances itsstabilization by preventing calpain-mediated proteolysis producingp25/CDK5R1 and avoiding ubiquitin ligase-mediated proteasomaldegradation. During aberrant cell-cycle activity and DNA damage,p25/CDK5 activity elicits cell-cycle activity and double-strandDNA breaks that precedes neuronal death by deregulating HDAC1. DNAdamage triggered phosphorylation of huntingtin/HTT in nuclei ofneurons protects neurons against polyglutamine expansion as wellas DNA damage mediated toxicity. Phosphorylation of PXN reducesits interaction with PTK2/FAK1 in matrix-cell focal adhesions(MCFA) during oligodendrocytes (OLs) differentiation. Negativeregulator of Wnt/beta-catenin signaling pathway. Activator of theGAIT (IFN-gamma-activated inhibitor of translation) pathway, whichsuppresses expression of a post-transcriptional regulon ofproinflammatory genes in myeloid cells; phosphorylates the linkerdomain of glutamyl-prolyl tRNA synthetase (EPRS) in a IFN-gamma-dependent manner, the initial event in assembly of the GAITcomplex. Phosphorylation of SH3GLB1 is required for autophagyinduction in starved neurons. Phosphorylation of TONEBP/NFAT5 inresponse to osmotic stress mediates its rapid nuclearlocalization. MEF2 is inactivated by phosphorylation in nucleus inresponse to neurotoxin, thus leading to neuronal apoptosis. APEX1AP-endodeoxyribonuclease is repressed by phosphorylation,resulting in accumulation of DNA damage and contributing toneuronal death. NOS3 phosphorylation down regulates NOS3-derivednitrite (NO) levels. SRC phosphorylation mediates its ubiquitin-dependent degradation and thus leads to cytoskeletalreorganization. May regulate endothelial cell migration andangiogenesis via the modulation of lamellipodia formation.Involved in dendritic spine morphogenesis by mediating the EFNA1-EPHA4 signaling. The complex p35/CDK5 participates in theregulation of the circadian clock by modulating the function ofCLOCK protein: phosphorylates CLOCK at 'Thr-451' and 'Thr-461' andregulates the transcriptional activity of the CLOCK-ARNTL/BMAL1heterodimer in association with altered stability and subcellulardistribution. \",\n      isseed: false,\n      uniprot: \"Q00535\",\n      isvalid: true,\n      importance: 3,\n      ox: 708.9396993235885,\n      oy: 678.0680099519911,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK2\",\n      altered: 0,\n      rank: 34,\n      cited: 1469,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved in the controlof the cell cycle; essential for meiosis, but dispensable formitosis. Phosphorylates CTNNB1, USP37, p53/TP53, NPM1, CDK7, RB1,BRCA2, MYC, NPAT, EZH2. Interacts with cyclins A, B1, B3, D, or E.Triggers duplication of centrosomes and DNA. Acts at the G1-Stransition to promote the E2F transcriptional program and theinitiation of DNA synthesis, and modulates G2 progression;controls the timing of entry into mitosis/meiosis by controllingthe subsequent activation of cyclin B/CDK1 by phosphorylation, andcoordinates the activation of cyclin B/CDK1 at the centrosome andin the nucleus. Crucial role in orchestrating a fine balancebetween cellular proliferation, cell death, and DNA repair inhuman embryonic stem cells (hESCs). Activity of CDK2 is maximalduring S phase and G2; activated by interaction with cyclin Eduring the early stages of DNA synthesis to permit G1-Stransition, and subsequently activated by cyclin A2 (cyclin A1 ingerm cells) during the late stages of DNA replication to drive thetransition from S phase to mitosis, the G2 phase. EZH2phosphorylation promotes H3K27me3 maintenance and epigenetic genesilencing. Phosphorylates CABLES1 (By similarity). Cyclin E/CDK2prevents oxidative stress-mediated Ras-induced senescence byphosphorylating MYC. Involved in G1-S phase DNA damage checkpointthat prevents cells with damaged DNA from initiating mitosis;regulates homologous recombination-dependent repair byphosphorylating BRCA2, this phosphorylation is low in S phase whenrecombination is active, but increases as cells progress towardsmitosis. In response to DNA damage, double-strand break repair byhomologous recombination a reduction of CDK2-mediated BRCA2phosphorylation. Phosphorylation of RB1 disturbs its interactionwith E2F1. NPM1 phosphorylation by cyclin E/CDK2 promotes itsdissociates from unduplicated centrosomes, thus initiatingcentrosome duplication. Cyclin E/CDK2-mediated phosphorylation ofNPAT at G1-S transition and until prophase stimulates the NPAT-mediated activation of histone gene transcription during S phase.Required for vitamin D-mediated growth inhibition by being itselfinactivated. Involved in the nitric oxide- (NO) mediated signalingin a nitrosylation/activation-dependent manner. USP37 is activatedby phosphorylation and thus triggers G1-S transition. CTNNB1phosphorylation regulates insulin internalization. \",\n      isseed: false,\n      uniprot: \"P24941\",\n      isvalid: true,\n      importance: 3,\n      ox: 683.702093338653,\n      oy: 694.2872344756593,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK1\",\n      altered: 0,\n      rank: 49,\n      cited: 691,\n      uniprotdesc:\n        \"Calcium/calmodulin-dependent serine/threonine kinaseinvolved in multiple cellular signaling pathways that trigger cellsurvival, apoptosis, and autophagy. Regulates both type Iapoptotic and type II autophagic cell deaths signal, depending onthe cellular setting. The former is caspase-dependent, while thelatter is caspase-independent and is characterized by theaccumulation of autophagic vesicles. Phosphorylates PIN1 resultingin inhibition of its catalytic activity, nuclear localization, andcellular function. Phosphorylates TPM1, enhancing stress fiberformation in endothelial cells. Phosphorylates STX1A andsignificantly decreases its binding to STXBP1. PhosphorylatesPRKD1 and regulates JNK signaling by binding and activating PRKD1under oxidative stress. Phosphorylates BECN1, reducing itsinteraction with BCL2 and BCL2L1 and promoting the induction ofautophagy. Phosphorylates TSC2, disrupting the TSC1-TSC2 complexand stimulating mTORC1 activity in a growth factor-dependentpathway. Phosphorylates RPS6, MYL9 and DAPK3. Acts as a signalingamplifier of NMDA receptors at extrasynaptic sites for mediatingbrain damage in stroke. Cerebral ischemia recruits DAPK1 into theNMDA receptor complex and it phosphorylates GRINB at Ser-1303inducing injurious Ca(2+) influx through NMDA receptor channels,resulting in an irreversible neuronal death. Required togetherwith DAPK3 for phosphorylation of RPL13A upon interferon-gammaactivation which is causing RPL13A involvement in transcript-selective translation inhibition.Isoform 2 cannot induce apoptosis but can inducemembrane blebbing.\",\n      isseed: false,\n      uniprot: \"P53355\",\n      isvalid: true,\n      importance: 3,\n      ox: 656.7801404779123,\n      oy: 707.5238675129558,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RFWD2\",\n      altered: 0,\n      rank: 143,\n      cited: 60,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase that mediates ubiquitinationand subsequent proteasomal degradation of target proteins. E3ubiquitin ligases accept ubiquitin from an E2 ubiquitin-conjugating enzyme in the form of a thioester and then directlytransfers the ubiquitin to targeted substrates. Involved in JUNubiquitination and degradation. Directly involved in p53 (TP53)ubiquitination and degradation, thereby abolishing p53-dependenttranscription and apoptosis. Ubiquitinates p53 independently ofMDM2 or RCHY1. Probably mediates E3 ubiquitin ligase activity byfunctioning as the essential RING domain subunit of larger E3complexes. In contrast, it does not constitute the catalytic RINGsubunit in the DCX DET1-COP1 complex that negatively regulatesJUN, the ubiquitin ligase activity being mediated by RBX1.Involved in 14-3-3 protein sigma/SFN ubiquitination andproteasomal degradation, leading to AKT activation and promotionof cell survival. Ubiquitinates MTA1 leading to its proteasomaldegradation. \",\n      isseed: false,\n      uniprot: \"Q8NHY2\",\n      isvalid: true,\n      importance: 3,\n      ox: 628.5248095687266,\n      oy: 717.6053493094187,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPM1J\",\n      altered: 0,\n      rank: 191,\n      cited: 3,\n      uniprotdesc: \"\",\n      isseed: false,\n      uniprot: \"Q5JR12\",\n      isvalid: true,\n      importance: 3,\n      ox: 599.3044520604564,\n      oy: 724.4002523321917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"BTG2\",\n      altered: 0,\n      rank: 97,\n      cited: 205,\n      uniprotdesc:\n        \"Anti-proliferative protein; the function is mediated byassociation with deadenylase subunits of the CCR4-NOT complex.Activates mRNA deadenylation in a CNOT6 and CNOT7-dependentmanner. In vitro can inhibit deadenylase activity of CNOT7 andCNOT8. Involved in cell cycle regulation. Could be involved in thegrowth arrest and differentiation of the neuronal precursors (Bysimilarity). Modulates transcription regulation mediated by ESR1.Involved in mitochondrial depolarization and neurite outgrowth.\",\n      isseed: false,\n      uniprot: \"P78543\",\n      isvalid: true,\n      importance: 3,\n      ox: 569.5000000000001,\n      oy: 727.8199946289078,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CD82\",\n      altered: 0,\n      rank: 69,\n      cited: 417,\n      uniprotdesc:\n        \"Associates with CD4 or CD8 and delivers costimulatorysignals for the TCR/CD3 pathway.\",\n      isseed: false,\n      uniprot: \"P27701\",\n      isvalid: true,\n      importance: 3,\n      ox: 539.5,\n      oy: 727.8199946289078,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIPK2\",\n      altered: 0,\n      rank: 70,\n      cited: 405,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved intranscription regulation, p53/TP53-mediated cellular apoptosis andregulation of the cell cycle. Acts as a corepressor of severaltranscription factors, including SMAD1 and POU4F1/Brn3a andprobably NK homeodomain transcription factors. PhosphorylatesPDX1, ATF1, PML, p53/TP53, CREB1, CTBP1, CBX4, RUNX1, EP300,CTNNB1, HMGA1 and ZBTB4. Inhibits cell growth and promotesapoptosis through the activation of p53/TP53 both at thetranscription level and at the protein level (by phosphorylationand indirect acetylation). The phosphorylation of p53/TP53 may bemediated by a p53/TP53-HIPK2-AXIN1 complex. Involved in theresponse to hypoxia by acting as a transcriptional co-suppressorof HIF1A. Mediates transcriptional activation of TP73. In responseto TGFB, cooperates with DAXX to activate JNK. Negative regulatorthrough phosphorylation and subsequent proteasomal degradation ofCTNNB1 and the antiapoptotic factor CTBP1. In the Wnt/beta-cateninsignaling pathway acts as an intermediate kinase betweenMAP3K7/TAK1 and NLK to promote the proteasomal degradation of MYB.Phosphorylates CBX4 upon DNA damage and promotes its E3 SUMO-protein ligase activity. Activates CREB1 and ATF1 transcriptionfactors by phosphorylation in response to genotoxic stress. Inresponse to DNA damage, stabilizes PML by phosphorylation. PML,HIPK2 and FBXO3 may act synergically to activate p53/TP53-dependent transactivation. Promotes angiogenesis, and is involvedin erythroid differentiation, especially during fetal livererythropoiesis. Phosphorylation of RUNX1 and EP300 stimulatesEP300 transcription regulation activity. Triggers ZBTB4 proteindegradation in response to DNA damage. Modulates HMGA1 DNA-bindingaffinity. In response to high glucose, triggers phosphorylation-mediated subnuclear localization shifting of PDX1. Involved in theregulation of eye size, lens formation and retinal laminationduring late embryogenesis. \",\n      isseed: false,\n      uniprot: \"Q9H2X6\",\n      isvalid: true,\n      importance: 3,\n      ox: 509.69554793954376,\n      oy: 724.4002523321917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DDB2\",\n      altered: 0,\n      rank: 102,\n      cited: 168,\n      uniprotdesc:\n        \"Required for DNA repair. Binds to DDB1 to form the UV-damaged DNA-binding protein complex (the UV-DDB complex). The UV-DDB complex may recognize UV-induced DNA damage and recruitproteins of the nucleotide excision repair pathway (the NERpathway) to initiate DNA repair. The UV-DDB complex preferentiallybinds to cyclobutane pyrimidine dimers (CPD), 6-4 photoproducts(6-4 PP), apurinic sites and short mismatches. Also appears tofunction as the substrate recognition module for the DCX (DDB1-CUL4-X-box) E3 ubiquitin-protein ligase complex DDB1-CUL4-ROC1(also known as CUL4-DDB-ROC1 and CUL4-DDB-RBX1). The DDB1-CUL4-ROC1 complex may ubiquitinate histone H2A, histone H3 and histoneH4 at sites of UV-induced DNA damage. The ubiquitination ofhistones may facilitate their removal from the nucleosome andpromote subsequent DNA repair. The DDB1-CUL4-ROC1 complex alsoubiquitinates XPC, which may enhance DNA-binding by XPC andpromote NER. Isoform D1 and isoform D2 inhibit UV-damaged DNArepair. \",\n      isseed: false,\n      uniprot: \"Q92466\",\n      isvalid: true,\n      importance: 3,\n      ox: 480.47519043127363,\n      oy: 717.6053493094188,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2\",\n      altered: 0,\n      rank: 7,\n      cited: 5024,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase that mediates ubiquitinationof p53/TP53, leading to its degradation by the proteasome.Inhibits p53/TP53- and p73/TP73-mediated cell cycle arrest andapoptosis by binding its transcriptional activation domain. Alsoacts as a ubiquitin ligase E3 toward itself and ARRB1. Permits thenuclear export of p53/TP53. Promotes proteasome-dependentubiquitin-independent degradation of retinoblastoma RB1 protein.Inhibits DAXX-mediated apoptosis by inducing its ubiquitinationand degradation. Component of the TRIM28/KAP1-MDM2-p53/TP53complex involved in stabilizing p53/TP53. Also component of theTRIM28/KAP1-ERBB4-MDM2 complex which links growth factor and DNAdamage response pathways. Mediates ubiquitination and subsequentproteasome degradation of DYRK2 in nucleus. Ubiquitinates IGF1Rand SNAI1 and promotes them to proteasomal degradation.\",\n      isseed: false,\n      uniprot: \"Q00987\",\n      isvalid: true,\n      importance: 3,\n      ox: 599.0684773104314,\n      oy: 636.667218490667,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CTSD\",\n      altered: 0,\n      rank: 85,\n      cited: 273,\n      uniprotdesc:\n        \"Acid protease active in intracellular protein breakdown.Involved in the pathogenesis of several diseases such as breastcancer and possibly Alzheimer disease.\",\n      isseed: false,\n      uniprot: \"P07339\",\n      isvalid: true,\n      importance: 3,\n      ox: 425.2979066613468,\n      oy: 694.287234475659,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NGFR\",\n      altered: 0,\n      rank: 80,\n      cited: 313,\n      uniprotdesc:\n        \"Plays a role in the regulation of the translocation ofGLUT4 to the cell surface in adipocytes and skeletal muscle cellsin response to insulin, probably by regulating RAB31 activity, andthereby contributes to the regulation of insulin-dependent glucoseuptake (By similarity). Low affinity receptor which can bind toNGF, BDNF, NT-3, and NT-4. Can mediate cell survival as well ascell death of neural cells. Necessary for the circadianoscillation of the clock genes ARNTL/BMAL1, PER1, PER2 and NR1D1in the suprachiasmatic nucleus (SCN) of the brain and in liver andof the genes involved in glucose and lipid metabolism in theliver. \",\n      isseed: false,\n      uniprot: \"P08138\",\n      isvalid: true,\n      importance: 3,\n      ox: 400.06030067641166,\n      oy: 678.0680099519913,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CARM1\",\n      altered: 0,\n      rank: 207,\n      cited: 152,\n      uniprotdesc:\n        \"Methylates (mono- and asymmetric dimethylation) theguanidino nitrogens of arginyl residues in several proteinsinvolved in DNA packaging, transcription regulation, pre-mRNAsplicing, and mRNA stability. Recruited to promoters upon geneactivation together with histone acetyltransferases fromEP300/P300 and p160 families, methylates histone H3 at 'Arg-17'(H3R17me), forming mainly asymmetric dimethylarginine (H3R17me2a),leading to activate transcription via chromatin remodeling. Duringnuclear hormone receptor activation and TCF7L2/TCF4 activation,acts synergically with EP300/P300 and either one of the p160histone acetyltransferases NCOA1/SRC1, NCOA2/GRIP1 and NCOA3/ACTRor CTNNB1/beta-catenin to activate transcription. During myogenictranscriptional activation, acts together with NCOA3/ACTR as acoactivator for MEF2C. During monocyte inflammatory stimulation,acts together with EP300/P300 as a coactivator for NF-kappa-B.Acts as coactivator for PPARG, promotes adipocyte differentiationand the accumulation of brown fat tissue. Plays a role in theregulation of pre-mRNA alternative splicing by methylation ofsplicing factors. Also seems to be involved in p53/TP53transcriptional activation. Methylates EP300/P300, both at 'Arg-2142', which may loosen its interaction with NCOA2/GRIP1, and at'Arg-580' and 'Arg-604' in the KIX domain, which impairs itsinteraction with CREB and inhibits CREB-dependent transcriptionalactivation. Also methylates arginine residues in RNA-bindingproteins PABPC1, ELAVL1 and ELAV4, which may affect their mRNA-stabilizing properties and the half-life of their target mRNAs.\",\n      isseed: false,\n      uniprot: \"Q86X55\",\n      isvalid: true,\n      importance: 2,\n      ox: 376.83605235723905,\n      oy: 659.0776363377252,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TYRP1\",\n      altered: 0,\n      rank: 87,\n      cited: 265,\n      uniprotdesc:\n        \"Oxidation of 5,6-dihydroxyindole-2-carboxylic acid(DHICA) into indole-5,6-quinone-2-carboxylic acid. May regulate orinfluence the type of melanin synthesized.\",\n      isseed: false,\n      uniprot: \"P17643\",\n      isvalid: true,\n      importance: 3,\n      ox: 355.92792529758043,\n      oy: 637.5636821949564,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKDC\",\n      altered: 0,\n      rank: 74,\n      cited: 363,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase that acts as a molecularsensor for DNA damage. Involved in DNA non-homologous end joining(NHEJ) required for double-strand break (DSB) repair and V(D)Jrecombination. Must be bound to DNA to express its catalyticproperties. Promotes processing of hairpin DNA structures in V(D)Jrecombination by activation of the hairpin endonuclease artemis(DCLRE1C). The assembly of the DNA-PK complex at DNA ends is alsorequired for the NHEJ ligation step. Required to protect and alignbroken ends of DNA. May also act as a scaffold protein to aid thelocalization of DNA repair proteins to the site of damage. Foundat the ends of chromosomes, suggesting a further role in themaintenance of telomeric stability and the prevention ofchromosomal end fusion. Also involved in modulation oftranscription. Recognizes the substrate consensus sequence [ST]-Q.Phosphorylates 'Ser-139' of histone variant H2AX/H2AFX, therebyregulating DNA damage response mechanism. Phosphorylates DCLRE1C,c-Abl/ABL1, histone H1, HSPCA, c-jun/JUN, p53/TP53, PARP1, POU2F1,DHX9, SRF, XRCC1, XRCC1, XRCC4, XRCC5, XRCC6, WRN, MYC and RFA2.Can phosphorylate C1D not only in the presence of linear DNA butalso in the presence of supercoiled DNA. Ability to phosphorylatep53/TP53 in the presence of supercoiled DNA is dependent on C1D.Contributes to the determination of the circadian period length byantagonizing phosphorylation of CRY1 'Ser-588' and increasing CRY1protein stability, most likely through an indirect machanism.Interacts with CRY1 and CRY2; negatively regulates CRY1phosphorylation. \",\n      isseed: false,\n      uniprot: \"P78527\",\n      isvalid: true,\n      importance: 3,\n      ox: 337.6084889085172,\n      oy: 613.806614817288,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIC1\",\n      altered: 0,\n      rank: 99,\n      cited: 185,\n      uniprotdesc:\n        \"Transcriptional repressor. Recognizes and binds to theconsensus sequence '5-[CG]NG[CG]GGGCA[CA]CC-3'. May act as a tumorsuppressor. May be involved in development of head, face, limbsand ventral body wall. Involved in down-regulation of SIRT1 andthereby is involved in regulation of p53/TP53-dependent apoptoticDNA-damage responses. The specific target gene promoterassociation seems to be depend on corepressors, such as CTBP1 orCTBP2 and MTA1. The regulation of SIRT1 transcription in responseto nutrient deprivation seems to involve CTBP1. In cooperationwith MTA1 (indicative for an association with the NuRD complex)represses transcription from CCND1/cyclin-D1 and CDKN1C/p57Kip2specifically in quiescent cells. Involved in regulation of the Wntsignaling pathway probably by association with TCF7L2 andpreventing TCF7L2 and CTNNB1 association with promoters of TCF-responsive genes. Seems to repress transcription from E2F1 andATOH1 which involves ARID1A, indicative for the participation of adistinct SWI/SNF-type chromatin-remodeling complex. Probablyrepresses transcription from ACKR3, FGFBP1 and EFNA1.\",\n      isseed: false,\n      uniprot: \"Q14526\",\n      isvalid: true,\n      importance: 3,\n      ox: 322.1165650593482,\n      oy: 588.1161439097402,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TAP1\",\n      altered: 0,\n      rank: 63,\n      cited: 474,\n      uniprotdesc:\n        \"Involved in the transport of antigens from the cytoplasmto the endoplasmic reticulum for association with MHC class Imolecules. Also acts as a molecular scaffold for the final stageof MHC class I folding, namely the binding of peptide. Nascent MHCclass I molecules associate with TAP via tapasin. Inhibited by thecovalent attachment of herpes simplex virus ICP47 protein, whichblocks the peptide-binding site of TAP. Inhibited by humancytomegalovirus US6 glycoprotein, which binds to the lumenal sideof the TAP complex and inhibits peptide translocation byspecifically blocking ATP-binding to TAP1 and prevents theconformational rearrangement of TAP induced by peptide binding.Inhibited by human adenovirus E3-19K glycoprotein, which binds theTAP complex and acts as a tapasin inhibitor, preventing MHC classI/TAP association. Expression of TAP1 is down-regulated by humanEpstein-Barr virus vIL-10 protein, thereby affecting the transportof peptides into the endoplasmic reticulum and subsequent peptideloading by MHC class I molecules.\",\n      isseed: false,\n      uniprot: \"Q03518\",\n      isvalid: true,\n      importance: 3,\n      ox: 309.6541146692916,\n      oy: 560.8271840491045,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PYCARD\",\n      altered: 0,\n      rank: 89,\n      cited: 244,\n      uniprotdesc:\n        \"Functions as key mediator in apoptosis and inflammation.Promotes caspase-mediated apoptosis involving predominantlycaspase-8 and also caspase-9 in a probable cell type-specificmanner. Involved in activation of the mitochondrial apoptoticpathway, promotes caspase-8-dependent proteolytic maturation ofBID independently of FADD in certain cell types and also mediatesmitochondrial translocation of BAX and activates BAX-dependentapoptosis coupled to activation of caspase-9, -2 and -3. Involvedin macrophage pyroptosis, a caspase-1-dependent inflammatory formof cell death and is the major constituent of the ASC pyroptosomewhich forms upon potassium depletion and rapidly recruits andactivates caspase-1. In innate immune response believed to act asan integral adapter in the assembly of the inflammasome whichactivates caspase-1 leading to processing and secretion ofproinflammatory cytokines. The function as activating adapter indifferent types of inflammasomes is mediated by the DAPIN and CARDdomains and their homotypic interactions. Required for recruitmentof caspase-1 to inflammasomes containing certain patternrecognition receptors, such as NLRP2, NLRP3, AIM2 and probablyIFI16. In the NLRP1 and NLRC4 inflammasomes seems not be requiredbut facilitates the processing of procaspase-1. In cooperationwith NOD2 involved in an inflammasome activated by bacterialmuramyl dipeptide leading to caspase-1 activation. May be involvedin DDX58-triggered proinflammatory responses and inflammasomeactivation. Isoform 2 may have a regulating effect on the functionas inflammasome adapter. Isoform 3 seems to inhibit inflammasome-mediated maturation of interleukin-1 beta. In collaboration withAIM2 which detects cytosolic double-stranded DNA may also beinvolved in a caspase-1-independent cell death that involvescaspase-8. In adaptive immunity may be involved in maturation ofdendritic cells to stimulate T-cell immunity and in cytoskeletalrearrangements coupled to chemotaxis and antigen uptake may beinvolved in post-transcriptional regulation of the guaninenucleotide exchange factor DOCK2; the latter function is proposedto involve the nuclear form. Also involved in transcriptionalactivation of cytokines and chemokines independent of theinflammasome; this function may involve AP-1, NF-kappa-B, MAPK andcaspase-8 signaling pathways. For regulation of NF-kappa-Bactivating and inhibiting functions have been reported. ModulatesNF-kappa-B induction at the level of the IKK complex by inhibitingkinase activity of CHUK and IKBK. Proposed to compete with RIPK2for association with CASP1 thereby down-regulating CASP1-mediatedRIPK2-dependent NF-kappa-B activation and activating interleukin-1beta processing. \",\n      isseed: false,\n      uniprot: \"Q9ULZ3\",\n      isvalid: true,\n      importance: 3,\n      ox: 300.38360483804325,\n      oy: 532.2954885602502,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"APC\",\n      altered: 0,\n      rank: 22,\n      cited: 2683,\n      uniprotdesc:\n        \"Tumor suppressor. Promotes rapid degradation of CTNNB1and participates in Wnt signaling as a negative regulator. APCactivity is correlated with its phosphorylation state. Activatesthe GEF activity of SPATA13 and ARHGEF4. Plays a role inhepatocyte growth factor (HGF)-induced cell migration. Requiredfor MMP9 up-regulation via the JNK signaling pathway in colorectaltumor cells. Acts as a mediator of ERBB2-dependent stabilizationof microtubules at the cell cortex. It is required for thelocalization of MACF1 to the cell membrane and this localizationof MACF1 is critical for its function in microtubulestabilization. \",\n      isseed: false,\n      uniprot: \"P25054\",\n      isvalid: true,\n      importance: 3,\n      ox: 294.42589083867097,\n      oy: 502.89301172747867,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RNF144B\",\n      altered: 0,\n      rank: 190,\n      cited: 4,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase which accepts ubiquitin fromE2 ubiquitin-conjugating enzymes UBE2L3 and UBE2L6 in the form ofa thioester and then directly transfers the ubiquitin to targetedsubstrates such as LCMT2, thereby promoting their degradation.Induces apoptosis via a p53/TP53-dependent but caspase-independentmechanism. However, its overexpression also produces a decrease ofthe ubiquitin-dependent stability of BAX, a pro-apoptotic protein,ultimately leading to protection of cell death; But, it is not ananti-apoptotic protein per se. \",\n      isseed: false,\n      uniprot: \"Q7Z419\",\n      isvalid: true,\n      importance: 3,\n      ox: 291.8586405843057,\n      oy: 473.0030598015978,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT2B\",\n      altered: 0,\n      rank: 55,\n      cited: 609,\n      uniprotdesc: null,\n      isseed: false,\n      uniprot: null,\n      isvalid: true,\n      importance: 3,\n      ox: 292.7153221081166,\n      oy: 443.0152940167519,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MSH2\",\n      altered: 0,\n      rank: 21,\n      cited: 2696,\n      uniprotdesc:\n        \"Component of the post-replicative DNA mismatch repairsystem (MMR). Forms two different heterodimers: MutS alpha (MSH2-MSH6 heterodimer) and MutS beta (MSH2-MSH3 heterodimer) whichbinds to DNA mismatches thereby initiating DNA repair. When bound,heterodimers bend the DNA helix and shields approximately 20 basepairs. MutS alpha recognizes single base mismatches anddinucleotide insertion-deletion loops (IDL) in the DNA. MutS betarecognizes larger insertion-deletion loops up to 13 nucleotideslong. After mismatch binding, MutS alpha or beta forms a ternarycomplex with the MutL alpha heterodimer, which is thought to beresponsible for directing the downstream MMR events, includingstrand discrimination, excision, and resynthesis. ATP binding andhydrolysis play a pivotal role in mismatch repair functions. TheATPase activity associated with MutS alpha regulates bindingsimilar to a molecular switch: mismatched DNA provokes ADP-->ATPexchange, resulting in a discernible conformational transitionthat converts MutS alpha into a sliding clamp capable ofhydrolysis-independent diffusion along the DNA backbone. Thistransition is crucial for mismatch repair. MutS alpha may alsoplay a role in DNA homologous recombination repair. In melanocytesmay modulate both UV-B-induced cell cycle regulation andapoptosis. \",\n      isseed: false,\n      uniprot: \"P43246\",\n      isvalid: true,\n      importance: 3,\n      ox: 296.9847672563152,\n      oy: 413.32065076032376,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP1R13L\",\n      altered: 0,\n      rank: 140,\n      cited: 63,\n      uniprotdesc:\n        \"Regulator that plays a central role in regulation ofapoptosis and transcription via its interaction with NF-kappa-Band p53/TP53 proteins. Blocks transcription of HIV-1 virus byinhibiting the action of both NF-kappa-B and SP1. Also inhibitsp53/TP53 function, possibly by preventing the association betweenp53/TP53 and ASPP1 or ASPP2, and therefore suppressing thesubsequent activation of apoptosis. \",\n      isseed: false,\n      uniprot: \"Q8WUF5\",\n      isvalid: true,\n      importance: 3,\n      ox: 304.6113172821198,\n      oy: 384.3062451192653,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1\",\n      altered: 0,\n      rank: 46,\n      cited: 799,\n      uniprotdesc:\n        \"NAD-dependent protein deacetylase that linkstranscriptional regulation directly to intracellular energeticsand participates in the coordination of several separated cellularfunctions such as cell cycle, response to DNA damage, metobolism,apoptosis and autophagy. Can modulate chromatin function throughdeacetylation of histones and can promote alterations in themethylation of histones and DNA, leading to transcriptionalrepression. Deacetylates a broad range of transcription factorsand coregulators, thereby regulating target gene expressionpositively and negatively. Serves as a sensor of the cytosolicratio of NAD(+)/NADH which is altered by glucose deprivation andmetabolic changes associated with caloric restriction. Isessential in skeletal muscle cell differentiation and in responseto low nutrients mediates the inhibitory effect on skeletalmyoblast differentiation which also involves 5'-AMP-activatedprotein kinase (AMPK) and nicotinamide phosphoribosyltransferase(NAMPT). Component of the eNoSC (energy-dependent nucleolarsilencing) complex, a complex that mediates silencing of rDNA inresponse to intracellular energy status and acts by recruitinghistone-modifying enzymes. The eNoSC complex is able to sense theenergy status of cell: upon glucose starvation, elevation ofNAD(+)/NADP(+) ratio activates SIRT1, leading to histone H3deacetylation followed by dimethylation of H3 at 'Lys-9' (H3K9me2)by SUV39H1 and the formation of silent chromatin in the rDNAlocus. Deacetylates 'Lys-266' of SUV39H1, leading to itsactivation. Inhibits skeletal muscle differentiation bydeacetylating PCAF and MYOD1. Deacetylates H2A and 'Lys-26' ofHIST1H1E. Deacetylates 'Lys-16' of histone H4 (in vitro). Involvedin NR0B2/SHP corepression function through chromatin remodeling:Recruited to LRH1 target gene promoters by NR0B2/SHP therebystimulating histone H3 and H4 deacetylation leading totranscriptional repression. Proposed to contribute to genomicintegrity via positive regulation of telomere length; however,reports on localization to pericentromeric heterochromatin areconflicting. Proposed to play a role in constitutiveheterochromatin (CH) formation and/or maintenance throughregulation of the available pool of nuclear SUV39H1. Uponoxidative/metabolic stress decreases SUV39H1 degradation byinhibiting SUV39H1 polyubiquitination by MDM2. This increase inSUV39H1 levels enhances SUV39H1 turnover in CH, which in turnseems to accelerate renewal of the heterochromatin whichcorrelates with greater genomic integrity during stress response.Deacetylates 'Lys-382' of p53/TP53 and impairs its ability toinduce transcription-dependent proapoptotic program and modulatecell senescence. Deacetylates TAF1B and thereby represses rDNAtranscription by the RNA polymerase I. Deacetylates MYC, promotesthe association of MYC with MAX and decreases MYC stabilityleading to compromised transformational capability. DeacetylatesFOXO3 in response to oxidative stress thereby increasing itsability to induce cell cycle arrest and resistance to oxidativestress but inhibiting FOXO3-mediated induction of apoptosistranscriptional activity; also leading to FOXO3 ubiquitination andprotesomal degradation. Appears to have a similar effect onMLLT7/FOXO4 in regulation of transcriptional activity andapoptosis. Deacetylates DNMT1; thereby impairs DNMT1methyltransferase-independent transcription repressor activity,modulates DNMT1 cell cycle regulatory function and DNMT1-mediatedgene silencing. Deacetylates RELA/NF-kappa-B p65 therebyinhibiting its transactivating potential and augments apoptosis inresponse to TNF-alpha. Deacetylates HIF1A, KAT5/TIP60, RB1 andHIC1. Deacetylates FOXO1 resulting in its nuclear retention andenhancement of its transcriptional activity leading to increasedgluconeogenesis in liver. Inhibits E2F1 transcriptional activityand apoptotic function, possibly by deacetylation. Involved inHES1- and HEY2-mediated transcriptional repression. In cooperationwith MYCN seems to be involved in transcriptional repression ofDUSP6/MAPK3 leading to MYCN stabilization by phosphorylation at'Ser-62'. Deacetylates MEF2D. Required for antagonist-mediatedtranscription suppression of AR-dependent genes which may belinked to local deacetylation of histone H3. Represses HNF1A-mediated transcription. Required for the repression of ESRRG byCREBZF. Modulates AP-1 transcription factor activity. DeacetylatesNR1H3 AND NR1H2 and deacetylation of NR1H3 at 'Lys-434' positivelyregulates transcription of NR1H3:RXR target genes, promotes NR1H3proteosomal degradation and results in cholesterol efflux; apromoter clearing mechanism after reach round of transcription isproposed. Involved in lipid metabolism. Implicated in regulationof adipogenesis and fat mobilization in white adipocytes byrepression of PPARG which probably involves association with NCOR1and SMRT/NCOR2. Deacetylates ACSS2 leading to its activation, andHMGCS1. Involved in liver and muscle metabolism. Throughdeacteylation and activation of PPARGC1A is required to activatefatty acid oxidation in skeletel muscle under low-glucoseconditions and is involved in glucose homeostasis. Involved inregulation of PPARA and fatty acid beta-oxidation in liver.Involved in positive regulation of insulin secretion in pancreaticbeta cells in response to glucose; the function seems to implytranscriptional repression of UCP2. Proposed to deacetylate IRS2thereby facilitating its insulin-induced tyrosine phosphorylation.Deacetylates SREBF1 isoform SREBP-1C thereby decreasing itsstability and transactivation in lipogenic gene expression.Involved in DNA damage response by repressing genes which areinvolved in DNA repair, such as XPC and TP73, deacetylatingXRCC6/Ku70, and faciliting recruitment of additional factors tosites of damaged DNA, such as SIRT1-deacetylated NBN can recruitATM to initiate DNA repair and SIRT1-deacetylated XPA interactswith RPA2. Also involved in DNA repair of DNA double-strand breaksby homologous recombination and specifically single-strandannealing independently of XRCC6/Ku70 and NBN. Transcriptionalsuppression of XPC probably involves an E2F4:RBL2 suppressorcomplex and protein kinase B (AKT) signaling. Transcriptionalsuppression of TP73 probably involves E2F4 and PCAF. DeacetylatesWRN thereby regulating its helicase and exonuclease activities andregulates WRN nuclear translocation in response to DNA damage.Deacetylates APEX1 at 'Lys-6' and 'Lys-7' and stimulates cellularAP endonuclease activity by promoting the association of APEX1 toXRCC1. Increases p53/TP53-mediated transcription-independentapoptosis by blocking nuclear translocation of cytoplasmicp53/TP53 and probably redirecting it to mitochondria. DeacetylatesXRCC6/Ku70 at 'Lys-539' and 'Lys-542' causing it to sequester BAXaway from mitochondria thereby inhibiting stress-inducedapoptosis. Is involved in autophagy, presumably by deacetylatingATG5, ATG7 and MAP1LC3B/ATG8. Deacetylates AKT1 which leads toenhanced binding of AKT1 and PDK1 to PIP3 and promotes theiractivation. Proposed to play role in regulation of STK11/LBK1-dependent AMPK signaling pathways implicated in cellularsenescence which seems to involve the regulation of theacetylation status of STK11/LBK1. Can deacetylate STK11/LBK1 andthereby increase its activity, cytoplasmic localization andassociation with STRAD; however, the relevance of such activity innormal cells is unclear. In endothelial cells is shown to inhibitSTK11/LBK1 activity and to promote its degradation. DeacetylatesSMAD7 at 'Lys-64' and 'Lys-70' thereby promoting its degradation.Deacetylates CIITA and augments its MHC class II transactivationand contributes to its stability. Deacteylates MECOM/EVI1. Isoform2 is shown to deacetylate 'Lys-382' of p53/TP53, however withlower activity than isoform 1. In combination, the two isoformsexert an additive effect. Isoform 2 regulates p53/TP53 expressionand cellular stress response and is in turn repressed by p53/TP53presenting a SIRT1 isoform-dependent auto-regulatory loop. In caseof HIV-1 infection, interacts with and deacetylates the viral Tatprotein. The viral Tat protein inhibits SIRT1 deacetylationactivity toward RELA/NF-kappa-B p65, thereby potentiates itstranscriptional activity and SIRT1 is proposed to contribute to T-cell hyperactivation during infection. Deacetylates PML at 'Lys-487' and this deacetylation promotes PML control of PER2 nuclearlocalization. During the neurogenic transition, repress selectiveNOTCH1-target genes through histone deacetylation in a BCL6-dependent manner and leading to neuronal differentiation.Regulates the circadian expression of several core clock genes,including ARNTL/BMAL1, RORC, PER2 and CRY1 and plays a criticalrole in maintaining a controlled rhythmicity in histoneacetylation, thereby contributing to circadian chromatinremodeling. Deacetylates ARNTL/BMAL1 and histones at the circadiangene promoters in order to facilitate repression by inhibitorycomponents of the circadian oscillator. Deacetylates PER2,facilitating its ubiquitination and degradation by the proteosome.Protects cardiomyocytes against palmitate-induced apoptosis(PubMed:11672523, PubMed:12006491, PubMed:14976264,PubMed:14980222, PubMed:15126506, PubMed:15152190,PubMed:15205477, PubMed:15469825, PubMed:15692560,PubMed:16079181, PubMed:16166628, PubMed:16892051,PubMed:16998810, PubMed:17283066, PubMed:17334224,PubMed:17505061, PubMed:17612497, PubMed:17620057,PubMed:17936707, PubMed:18203716, PubMed:18296641,PubMed:18662546, PubMed:18687677, PubMed:19188449,PubMed:19220062, PubMed:19364925, PubMed:19690166,PubMed:19934257, PubMed:20097625, PubMed:20100829,PubMed:20203304, PubMed:20375098, PubMed:20620956,PubMed:20670893, PubMed:20817729, PubMed:20975832,PubMed:21149730, PubMed:21245319, PubMed:21471201,PubMed:21504832, PubMed:21555002, PubMed:21698133,PubMed:21701047, PubMed:21775285, PubMed:21807113,PubMed:21841822, PubMed:21890893, PubMed:21909281,PubMed:21947282, PubMed:22274616). Deacetylates XBP1 isoform 2;deacetylation decreases protein stability of XBP1 isoform 2 andinhibits its transcriptional activity (By similarity).\",\n      isseed: false,\n      uniprot: \"Q96EB6\",\n      isvalid: true,\n      importance: 3,\n      ox: 632.4422863405995,\n      oy: 420.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP10\",\n      altered: 0,\n      rank: 100,\n      cited: 181,\n      uniprotdesc:\n        \"Involved in the activation cascade of caspasesresponsible for apoptosis execution. Recruited to both Fas- andTNFR-1 receptors in a FADD dependent manner. May participate inthe granzyme B apoptotic pathways. Cleaves and activates caspase-3, -4, -6, -7, -8, and -9. Hydrolyzes the small- moleculesubstrates, Tyr-Val-Ala-Asp-|-AMC and Asp-Glu-Val-Asp-|-AMC.\",\n      isseed: false,\n      uniprot: \"Q92851\",\n      isvalid: true,\n      importance: 3,\n      ox: 329.4955681394091,\n      oy: 329.81733631298744,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SP1\",\n      altered: 0,\n      rank: 204,\n      cited: 351,\n      uniprotdesc:\n        \"Transcription factor that can activate or represstranscription in response to physiological and pathologicalstimuli. Binds with high affinity to GC-rich motifs and regulatesthe expression of a large number of genes involved in a variety ofprocesses such as cell growth, apoptosis, differentiation andimmune responses. Highly regulated by post-translationalmodifications (phosphorylations, sumoylation, proteolyticcleavage, glycosylation and acetylation). Binds also the PDGFR-alpha G-box promoter. May have a role in modulating the cellularresponse to DNA damage. Implicated in chromatin remodeling. Playsa role in the recruitment of SMARCA4/BRG1 on the c-FOS promoter.Plays an essential role in the regulation of FE65 gene expression.In complex with ATF7IP, maintains telomerase activity in cancercells by inducing TERT and TERC gene expression. Isoform 3 is astronger activator of transcription than isoform 1. Positivelyregulates the transcription of the core clock componentARNTL/BMAL1. \",\n      isseed: false,\n      uniprot: \"P08047\",\n      isvalid: true,\n      importance: 2,\n      ox: 346.42886470541225,\n      oy: 305.05317940410407,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IRF5\",\n      altered: 0,\n      rank: 101,\n      cited: 180,\n      uniprotdesc:\n        \"Transcription factor involved in the induction ofinterferons IFNA and INFB and inflammatory cytokines upon virusinfection. Activated by TLR7 or TLR8 signaling.\",\n      isseed: false,\n      uniprot: \"Q13568\",\n      isvalid: true,\n      importance: 3,\n      ox: 366.0746867237709,\n      oy: 282.3806921734762,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"BAX\",\n      altered: 0,\n      rank: 51,\n      cited: 635,\n      uniprotdesc:\n        \"Accelerates programmed cell death by binding to, andantagonizing the apoptosis repressor BCL2 or its adenovirushomolog E1B 19k protein. Under stress conditions, undergoes aconformation change that causes translocation to the mitochondrionmembrane, leading to the release of cytochrome c that thentriggers apoptosis. Promotes activation of CASP3, and therebyapoptosis. \",\n      isseed: false,\n      uniprot: \"Q07812\",\n      isvalid: true,\n      importance: 3,\n      ox: 495.57608693571933,\n      oy: 298.7290842958664,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CABIN1\",\n      altered: 0,\n      rank: 132,\n      cited: 77,\n      uniprotdesc:\n        \"May be required for replication-independent chromatinassembly. May serve as a negative regulator of T-cell receptor(TCR) signaling via inhibition of calcineurin. Inhibition ofactivated calcineurin is dependent on both PKC and calciumsignals. Acts as a negative regulator of p53/TP53 by keeping p53in an inactive state on chromatin at promoters of a subset of it'starget genes. \",\n      isseed: false,\n      uniprot: \"Q9Y6J0\",\n      isvalid: true,\n      importance: 3,\n      ox: 524.6080753437241,\n      oy: 291.16974245431265,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD7\",\n      altered: 0,\n      rank: 156,\n      cited: 32,\n      uniprotdesc:\n        \"Histone methyltransferase that specificallymonomethylates 'Lys-4' of histone H3. H3 'Lys-4' methylationrepresents a specific tag for epigenetic transcriptionalactivation. Plays a central role in the transcriptional activationof genes such as collagenase or insulin. Recruited by IPF1/PDX-1to the insulin promoter, leading to activate transcription. Hasalso methyltransferase activity toward non-histone proteins suchas p53/TP53, TAF10, and possibly TAF7 by recognizing and bindingthe [KR]-[STA]-K in substrate proteins. Monomethylates 'Lys-189'of TAF10, leading to increase the affinity of TAF10 for RNApolymerase II. Monomethylates 'Lys-372' of p53/TP53, stabilizingp53/TP53 and increasing p53/TP53-mediated transcriptionalactivation. \",\n      isseed: false,\n      uniprot: \"Q8WTS6\",\n      isvalid: true,\n      importance: 3,\n      ox: 438.5698130049044,\n      oy: 229.70989985711353,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD8\",\n      altered: 0,\n      rank: 164,\n      cited: 22,\n      uniprotdesc:\n        \"Protein-lysine N-methyltransferase that monomethylatesboth histones and non-histone proteins. Specificallymonomethylates 'Lys-20' of histone H4 (H4K20me1). H4K20me1 isenriched during mitosis and represents a specific tag forepigenetic transcriptional repression. Mainly functions ineuchromatin regions, thereby playing a central role in thesilencing of euchromatic genes. Required for cell proliferation,probably by contributing to the maintenance of proper higher-orderstructure of DNA during mitosis. Involved in chromosomecondensation and proper cytokinesis. Nucleosomes are preferred assubstrate compared to free histones. Mediates monomethylation ofp53/TP53 at 'Lys-382', leading to repress p53/TP53-target genes.Plays a negative role in TGF-beta response regulation and apositive role in cell migration. \",\n      isseed: false,\n      uniprot: \"Q9NQR1\",\n      isvalid: true,\n      importance: 3,\n      ox: 466.2035225983501,\n      oy: 218.0317966675917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"APAF1\",\n      altered: 0,\n      rank: 83,\n      cited: 278,\n      uniprotdesc:\n        \"Oligomeric Apaf-1 mediates the cytochrome c-dependentautocatalytic activation of pro-caspase-9 (Apaf-3), leading to theactivation of caspase-3 and apoptosis. This activation requiresATP. Isoform 6 is less effective in inducing apoptosis.\",\n      isseed: false,\n      uniprot: \"O14727\",\n      isvalid: true,\n      importance: 3,\n      ox: 494.98831180678513,\n      oy: 209.57981996234875,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GDF15\",\n      altered: 0,\n      rank: 91,\n      cited: 232,\n      uniprotdesc: \"\",\n      isseed: false,\n      uniprot: \"Q99988\",\n      isvalid: true,\n      importance: 3,\n      ox: 388.1769208600632,\n      oy: 262.09544516525557,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n  ],\n  edges: [\n    {\n      id: \"TP53-controls-state-change-of-H1F0\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"H1F0\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-IRF5\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"IRF5\",\n      pubmed: [\"11973653\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT8-controls-state-change-of-TP53\",\n      source: \"KAT8\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"17189187\", \"17534149\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11-controls-state-change-of-TP53\",\n      source: \"FBXO11\",\n      cited: 4,\n      target: \"TP53\",\n      pubmed: [\"17098746\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP53\",\n      source: \"ATR\",\n      cited: 24,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15665826\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11-controls-state-change-of-NEDD8\",\n      source: \"FBXO11\",\n      cited: 1,\n      target: \"NEDD8\",\n      pubmed: [\"17098746\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP53\",\n      source: \"ATM\",\n      cited: 237,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733514\",\n        \"9733515\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SMYD2-controls-state-change-of-TP53\",\n      source: \"SMYD2\",\n      cited: 6,\n      target: \"TP53\",\n      pubmed: [\"17108971\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NGFR-controls-state-change-of-TP53\",\n      source: \"NGFR\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"15668238\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAX-controls-expression-of-TP53\",\n      source: \"MAX\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"8494784\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PRKAB1\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"PRKAB1\",\n      pubmed: [\"16140933\", \"17409411\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2-controls-state-change-of-TP53\",\n      source: \"MDM2\",\n      cited: 2748,\n      target: \"TP53\",\n      pubmed: [\n        \"10734067\",\n        \"11127820\",\n        \"11340074\",\n        \"11713287\",\n        \"14654783\",\n        \"14671306\",\n        \"14702041\",\n        \"15210108\",\n        \"15242646\",\n        \"16107876\",\n        \"9153395\",\n        \"9153396\",\n        \"9450543\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD8-controls-state-change-of-TP53\",\n      source: \"SETD8\",\n      cited: 8,\n      target: \"TP53\",\n      pubmed: [\"17707234\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD7-controls-state-change-of-TP53\",\n      source: \"SETD7\",\n      cited: 8,\n      target: \"TP53\",\n      pubmed: [\"15525938\", \"17646389\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TYRP1\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"TYRP1\",\n      pubmed: [\"10640990\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP63\",\n      source: \"ATR\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCA-controls-state-change-of-TP53\",\n      source: \"PRKCA\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\n        \"10706102\",\n        \"10733583\",\n        \"11007451\",\n        \"11423984\",\n        \"11585729\",\n        \"12080066\",\n        \"14640983\",\n        \"14744935\",\n        \"15659650\",\n        \"16227590\",\n        \"17898864\",\n        \"18812399\",\n        \"19819244\",\n        \"19933256\",\n        \"9254608\",\n        \"9315650\",\n        \"9571186\",\n        \"9620776\",\n        \"9739174\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP63\",\n      source: \"ATM\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP73\",\n      source: \"CHEK2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-DDB2\",\n      source: \"TP53\",\n      cited: 23,\n      target: \"DDB2\",\n      pubmed: [\"11971958\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCD-controls-state-change-of-TP53\",\n      source: \"PRKCD\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11030628\",\n        \"11101524\",\n        \"11300786\",\n        \"11495913\",\n        \"11740489\",\n        \"11780126\",\n        \"11875057\",\n        \"12021785\",\n        \"12093737\",\n        \"12397361\",\n        \"12427754\",\n        \"12676607\",\n        \"12860987\",\n        \"12902982\",\n        \"12907596\",\n        \"14749479\",\n        \"15322239\",\n        \"15381073\",\n        \"15471885\",\n        \"15489221\",\n        \"15526030\",\n        \"15619621\",\n        \"15657359\",\n        \"15706352\",\n        \"15750624\",\n        \"15843377\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16247456\",\n        \"16377624\",\n        \"16601678\",\n        \"16717128\",\n        \"16738336\",\n        \"16793543\",\n        \"17105820\",\n        \"17107963\",\n        \"17210684\",\n        \"17332358\",\n        \"17349958\",\n        \"17349959\",\n        \"17380123\",\n        \"17567906\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"18056705\",\n        \"18160537\",\n        \"18216278\",\n        \"18536714\",\n        \"18560558\",\n        \"18769132\",\n        \"19465479\",\n        \"19819244\",\n        \"19828042\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19965871\",\n        \"20018442\",\n        \"20024960\",\n        \"20123963\",\n        \"20171273\",\n        \"20363803\",\n        \"20514025\",\n        \"20610713\",\n        \"20673369\",\n        \"20696760\",\n        \"20811699\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21383696\",\n        \"21394211\",\n        \"21642861\",\n        \"21660965\",\n        \"21765463\",\n        \"21765464\",\n        \"22011578\",\n        \"22797063\",\n        \"22878263\",\n        \"23149944\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24899407\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP63\",\n      source: \"TP53\",\n      cited: 257,\n      target: \"TP63\",\n      pubmed: [\"14576823\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PML\",\n      source: \"TP53\",\n      cited: 102,\n      target: \"PML\",\n      pubmed: [\"14992722\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP73\",\n      source: \"ATM\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP63\",\n      source: \"WRN\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP73\",\n      source: \"ATR\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PCBP4\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"PCBP4\",\n      pubmed: [\"10891498\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GADD45A\",\n      source: \"TP53\",\n      cited: 45,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKDC-controls-state-change-of-TP53\",\n      source: \"PRKDC\",\n      cited: 10,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10930428\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19345189\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21386980\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22496350\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GDF15\",\n      source: \"TP53\",\n      cited: 18,\n      target: \"GDF15\",\n      pubmed: [\"10618379\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP73\",\n      source: \"WRN\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-SERPINE1\",\n      source: \"TP53\",\n      cited: 35,\n      target: \"SERPINE1\",\n      pubmed: [\"7479001\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PPM1J\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"PPM1J\",\n      pubmed: [\"16260627\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP63\",\n      source: \"HTT\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"CASP1\",\n      pubmed: [\"11278253\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP63\",\n      source: \"MAPK14\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP73\",\n      source: \"HMGB1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP6\",\n      source: \"TP53\",\n      cited: 13,\n      target: \"CASP6\",\n      pubmed: [\"12089322\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP63\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP53\",\n      source: \"HTT\",\n      cited: 9,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP63\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP63\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-expression-of-CDKN1A\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"CDKN1A\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP53\",\n      source: \"PML\",\n      cited: 101,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP-controls-state-change-of-TP53\",\n      source: \"CREBBP\",\n      cited: 72,\n      target: \"TP53\",\n      pubmed: [\"18485870\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TAP1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"TAP1\",\n      pubmed: [\"10618714\", \"12857899\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP53\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP53\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP53\",\n      source: \"MAPK14\",\n      cited: 65,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10212189\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10747897\",\n        \"10958792\",\n        \"11030628\",\n        \"11078726\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11283254\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15657359\",\n        \"15665826\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16552184\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17942552\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9372954\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP53\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"10212189\", \"10747897\", \"17254968\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-BAX\",\n      source: \"TP53\",\n      cited: 95,\n      target: \"BAX\",\n      pubmed: [\"14963330\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP63\",\n      source: \"HMGB1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP73\",\n      source: \"TP53\",\n      cited: 42,\n      target: \"TP73\",\n      pubmed: [\"11314010\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP63\",\n      source: \"PML\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP73\",\n      source: \"PPP2CA\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP73\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FOS-controls-expression-of-TP53\",\n      source: \"FOS\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\"10072388\", \"11136975\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP-controls-expression-of-GADD45A\",\n      source: \"CREBBP\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CDKN1A\",\n      source: \"TP53\",\n      cited: 1480,\n      target: \"CDKN1A\",\n      pubmed: [\n        \"11080152\",\n        \"15655109\",\n        \"17110336\",\n        \"17409421\",\n        \"17707234\",\n        \"17719541\",\n        \"17938176\",\n        \"18250150\",\n        \"18485870\",\n        \"19011621\",\n        \"7796420\",\n        \"8242752\",\n      ],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"Reactome\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP73\",\n      source: \"PML\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP53\",\n      source: \"HMGB1\",\n      cited: 21,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP73\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIPK2-controls-state-change-of-TP53\",\n      source: \"HIPK2\",\n      cited: 98,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11030628\",\n        \"11101524\",\n        \"11300786\",\n        \"11495913\",\n        \"11740489\",\n        \"11780126\",\n        \"11875057\",\n        \"12021785\",\n        \"12093737\",\n        \"12397361\",\n        \"12427754\",\n        \"12676607\",\n        \"12860987\",\n        \"12902982\",\n        \"12907596\",\n        \"14749479\",\n        \"15322239\",\n        \"15381073\",\n        \"15471885\",\n        \"15489221\",\n        \"15526030\",\n        \"15619621\",\n        \"15657359\",\n        \"15706352\",\n        \"15750624\",\n        \"15843377\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16247456\",\n        \"16377624\",\n        \"16601678\",\n        \"16717128\",\n        \"16738336\",\n        \"16793543\",\n        \"17105820\",\n        \"17107963\",\n        \"17210684\",\n        \"17332358\",\n        \"17349958\",\n        \"17349959\",\n        \"17380123\",\n        \"17567906\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"18056705\",\n        \"18160537\",\n        \"18216278\",\n        \"18536714\",\n        \"18560558\",\n        \"18769132\",\n        \"19465479\",\n        \"19819244\",\n        \"19828042\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19965871\",\n        \"20018442\",\n        \"20024960\",\n        \"20123963\",\n        \"20171273\",\n        \"20363803\",\n        \"20514025\",\n        \"20610713\",\n        \"20673369\",\n        \"20696760\",\n        \"20811699\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21383696\",\n        \"21394211\",\n        \"21642861\",\n        \"21660965\",\n        \"21765463\",\n        \"21765464\",\n        \"22011578\",\n        \"22797063\",\n        \"22878263\",\n        \"23149944\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24899407\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RNF144B\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"RNF144B\",\n      pubmed: [\"12853982\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HIC1\",\n      source: \"TP53\",\n      cited: 22,\n      target: \"HIC1\",\n      pubmed: [\"16301995\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIRA\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"HIRA\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP73\",\n      source: \"MAPK14\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-UBN1\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"UBN1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RB1\",\n      source: \"TP53\",\n      cited: 262,\n      target: \"RB1\",\n      pubmed: [\"8119988\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP73\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HMGA2\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"HMGA2\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HMGA1\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"HMGA1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP73\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP73\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP63\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP53I3\",\n      source: \"TP53\",\n      cited: 28,\n      target: \"TP53I3\",\n      pubmed: [\"11684014\", \"11919562\", \"17719542\", \"18485870\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DYRK1A-controls-state-change-of-TP53\",\n      source: \"DYRK1A\",\n      cited: 1,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15665826\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP73\",\n      source: \"SUMO1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP63\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP73\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP63\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP53\",\n      source: \"CHEK2\",\n      cited: 73,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11585729\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14640983\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15659650\",\n        \"15665826\",\n        \"15671037\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17898864\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18812399\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19933256\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20009884\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21386980\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9363941\",\n        \"9571186\",\n        \"9620776\",\n        \"9733515\",\n        \"9739174\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP63\",\n      source: \"PPP2CA\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK7-controls-state-change-of-TP53\",\n      source: \"CDK7\",\n      cited: 7,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10348343\",\n        \"10581258\",\n        \"10656682\",\n        \"10656795\",\n        \"10706102\",\n        \"10733583\",\n        \"10747897\",\n        \"11007451\",\n        \"11101524\",\n        \"11239457\",\n        \"11300786\",\n        \"11423984\",\n        \"11495913\",\n        \"11526498\",\n        \"11583595\",\n        \"11585729\",\n        \"11707453\",\n        \"11709713\",\n        \"11850826\",\n        \"11875057\",\n        \"12021785\",\n        \"12080066\",\n        \"12091386\",\n        \"12393879\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12519780\",\n        \"12676607\",\n        \"12776195\",\n        \"12860987\",\n        \"12959929\",\n        \"1406679\",\n        \"14640983\",\n        \"14665630\",\n        \"14744935\",\n        \"14968111\",\n        \"15064747\",\n        \"15155458\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15619621\",\n        \"15659650\",\n        \"15792956\",\n        \"15843377\",\n        \"16083285\",\n        \"16227590\",\n        \"16319070\",\n        \"16436515\",\n        \"16552184\",\n        \"16632641\",\n        \"16651424\",\n        \"16717128\",\n        \"16818520\",\n        \"17105820\",\n        \"17108107\",\n        \"17237827\",\n        \"17591690\",\n        \"17891183\",\n        \"17898864\",\n        \"17906639\",\n        \"17942552\",\n        \"17975552\",\n        \"18490454\",\n        \"18523266\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18812399\",\n        \"19251701\",\n        \"19369195\",\n        \"19413330\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"19933256\",\n        \"20009884\",\n        \"20024960\",\n        \"20123963\",\n        \"20562916\",\n        \"20663147\",\n        \"20686112\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21423215\",\n        \"21455220\",\n        \"21460857\",\n        \"21832239\",\n        \"22011578\",\n        \"22112863\",\n        \"22975381\",\n        \"23312004\",\n        \"23603988\",\n        \"23871434\",\n        \"24194938\",\n        \"24657168\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9372954\",\n        \"9467949\",\n        \"9571186\",\n        \"9620776\",\n        \"9739174\",\n        \"9744860\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK9-controls-state-change-of-TP53\",\n      source: \"CDK9\",\n      cited: 19,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10348343\",\n        \"10581258\",\n        \"10644693\",\n        \"10656682\",\n        \"10656795\",\n        \"10706102\",\n        \"10733583\",\n        \"10747897\",\n        \"11078726\",\n        \"11101524\",\n        \"11239457\",\n        \"11300786\",\n        \"11423984\",\n        \"11495913\",\n        \"11526498\",\n        \"11583595\",\n        \"11687964\",\n        \"11707453\",\n        \"11709713\",\n        \"11850826\",\n        \"11875057\",\n        \"12021785\",\n        \"12091386\",\n        \"12393879\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12519780\",\n        \"12676607\",\n        \"12776195\",\n        \"12860987\",\n        \"12959929\",\n        \"1406679\",\n        \"14640983\",\n        \"14665630\",\n        \"14702041\",\n        \"14744935\",\n        \"14968111\",\n        \"15064747\",\n        \"15155458\",\n        \"15302935\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15619621\",\n        \"15792956\",\n        \"15843377\",\n        \"16037820\",\n        \"16083285\",\n        \"16227590\",\n        \"16319070\",\n        \"16436515\",\n        \"16552184\",\n        \"16632641\",\n        \"16651424\",\n        \"16674116\",\n        \"16717128\",\n        \"16784539\",\n        \"16818520\",\n        \"17105820\",\n        \"17108107\",\n        \"17237827\",\n        \"17287340\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"17942552\",\n        \"17975552\",\n        \"18490454\",\n        \"18521083\",\n        \"18523266\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18847512\",\n        \"19251701\",\n        \"19369195\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20123963\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20663147\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21423215\",\n        \"21455220\",\n        \"21460857\",\n        \"21659604\",\n        \"21832239\",\n        \"21983960\",\n        \"22011578\",\n        \"22112863\",\n        \"22496350\",\n        \"22547687\",\n        \"22975381\",\n        \"23201157\",\n        \"23312004\",\n        \"23603988\",\n        \"23871434\",\n        \"24194938\",\n        \"24657168\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9372954\",\n        \"9467949\",\n        \"9739174\",\n        \"9744860\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK2-controls-state-change-of-TP53\",\n      source: \"CDK2\",\n      cited: 26,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"10644693\",\n        \"10656795\",\n        \"11078726\",\n        \"11283254\",\n        \"11300786\",\n        \"11687964\",\n        \"11875057\",\n        \"12021785\",\n        \"12397361\",\n        \"12397362\",\n        \"12860987\",\n        \"1406679\",\n        \"14640983\",\n        \"14702041\",\n        \"14744935\",\n        \"15302935\",\n        \"15619621\",\n        \"16037820\",\n        \"16227590\",\n        \"16552184\",\n        \"16674116\",\n        \"16784539\",\n        \"17287340\",\n        \"17906639\",\n        \"17942552\",\n        \"18521083\",\n        \"18769132\",\n        \"18847512\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"21659604\",\n        \"21983960\",\n        \"22011578\",\n        \"22496350\",\n        \"22547687\",\n        \"23201157\",\n        \"23312004\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK5-controls-state-change-of-TP53\",\n      source: \"CDK5\",\n      cited: 23,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16552184\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17942552\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9372954\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP53\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-BAX\",\n      source: \"TP53\",\n      cited: 95,\n      target: \"BAX\",\n      pubmed: [\n        \"10518217\",\n        \"11080152\",\n        \"11278953\",\n        \"11684014\",\n        \"11850816\",\n        \"15598651\",\n        \"17145718\",\n        \"17189187\",\n      ],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CCNB1\",\n      source: \"TP53\",\n      cited: 23,\n      target: \"CCNB1\",\n      pubmed: [\"15710382\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP63\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP73\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-MDM2\",\n      source: \"TP53\",\n      cited: 2784,\n      target: \"MDM2\",\n      pubmed: [\"12138177\", \"17409421\", \"7651818\", \"8319905\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP53\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP53\",\n      source: \"PPP2CA\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP63\",\n      source: \"CHEK2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CD82\",\n      source: \"TP53\",\n      cited: 44,\n      target: \"CD82\",\n      pubmed: [\"9736732\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-FDXR\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"FDXR\",\n      pubmed: [\"12370809\", \"17409421\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HTT\",\n      source: \"TP53\",\n      cited: 9,\n      target: \"HTT\",\n      pubmed: [\"16278683\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CTSD\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"CTSD\",\n      pubmed: [\"9619826\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP53\",\n      source: \"SIRT1\",\n      cited: 50,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP10\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"CASP10\",\n      pubmed: [\"14688482\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-APAF1\",\n      source: \"TP53\",\n      cited: 26,\n      target: \"APAF1\",\n      pubmed: [\"11559530\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HGF\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"HGF\",\n      pubmed: [\"9023107\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT5-controls-state-change-of-TP53\",\n      source: \"PRMT5\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"19011621\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-APC\",\n      source: \"TP53\",\n      cited: 166,\n      target: \"APC\",\n      pubmed: [\"11279192\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-BTG2\",\n      source: \"TP53\",\n      cited: 14,\n      target: \"BTG2\",\n      pubmed: [\"11814693\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT1-controls-expression-of-GADD45A\",\n      source: \"PRMT1\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-ASF1A\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"ASF1A\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-FAS\",\n      source: \"TP53\",\n      cited: 114,\n      target: \"FAS\",\n      pubmed: [\"9841917\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP73\",\n      source: \"HTT\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP53\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TRIAP1\",\n      source: \"TP53\",\n      cited: 2,\n      target: \"TRIAP1\",\n      pubmed: [\"15735003\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RFWD2\",\n      source: \"TP53\",\n      cited: 11,\n      target: \"RFWD2\",\n      pubmed: [\"15103385\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP63\",\n      source: \"EP300\",\n      cited: 2,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-COL18A1\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"COL18A1\",\n      pubmed: [\"15958553\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-expression-of-GADD45A\",\n      source: \"EP300\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP73\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP53\",\n      source: \"EP300\",\n      cited: 117,\n      target: \"TP53\",\n      pubmed: [\"18485870\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP73\",\n      source: \"PRKAB1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1B\",\n      source: \"TP53\",\n      cited: 2,\n      target: \"HIST1H1B\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP73\",\n      source: \"EP300\",\n      cited: 1,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1C\",\n      source: \"TP53\",\n      cited: 4,\n      target: \"HIST1H1C\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1A\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1A\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CARM1-controls-expression-of-GADD45A\",\n      source: \"CARM1\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1D\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1D\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1E\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1E\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP53\",\n      source: \"WRN\",\n      cited: 46,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-MSH2\",\n      source: \"TP53\",\n      cited: 109,\n      target: \"MSH2\",\n      pubmed: [\"10984493\", \"11350971\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT2B-controls-state-change-of-TP53\",\n      source: \"KAT2B\",\n      cited: 34,\n      target: \"TP53\",\n      pubmed: [\"17110336\", \"9744860\", \"9891054\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PYCARD\",\n      source: \"TP53\",\n      cited: 13,\n      target: \"PYCARD\",\n      pubmed: [\"14730312\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP53\",\n      source: \"PRKAA2\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SP1-controls-expression-of-CCNB1\",\n      source: \"SP1\",\n      cited: 1,\n      target: \"CCNB1\",\n      pubmed: [\"15710382\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP53\",\n      source: \"PRKAA1\",\n      cited: 1,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10606744\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10733583\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15355354\",\n        \"15471885\",\n        \"15489221\",\n        \"15542844\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18246126\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"18794113\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21386980\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GPX1\",\n      source: \"TP53\",\n      cited: 10,\n      target: \"GPX1\",\n      pubmed: [\"16140933\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-CABIN1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"CABIN1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2-controls-state-change-of-NEDD8\",\n      source: \"MDM2\",\n      cited: 10,\n      target: \"NEDD8\",\n      pubmed: [\"15242646\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PLK3-controls-state-change-of-TP53\",\n      source: \"PLK3\",\n      cited: 16,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP53\",\n      source: \"PRKAB1\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP53\",\n      source: \"SUMO1\",\n      cited: 39,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP63\",\n      source: \"PRKAA1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP1R13L-controls-state-change-of-TP53\",\n      source: \"PPP1R13L\",\n      cited: 13,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11740489\",\n        \"11780126\",\n        \"16377624\",\n        \"17349958\",\n        \"17906639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PLK3\",\n      source: \"TP53\",\n      cited: 16,\n      target: \"PLK3\",\n      pubmed: [\"16140933\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP63\",\n      source: \"PRKAA2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP53\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK1-controls-state-change-of-TP53\",\n      source: \"DAPK1\",\n      cited: 6,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10606744\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10733583\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15355354\",\n        \"15471885\",\n        \"15489221\",\n        \"15542844\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18246126\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"18794113\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20847049\",\n        \"20851891\",\n        \"20959462\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21386980\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK1-controls-state-change-of-TP53\",\n      source: \"CDK1\",\n      cited: 47,\n      target: \"TP53\",\n      pubmed: [\n        \"10644693\",\n        \"10656795\",\n        \"11078726\",\n        \"11300786\",\n        \"11687964\",\n        \"11875057\",\n        \"12021785\",\n        \"12397361\",\n        \"12397362\",\n        \"12860987\",\n        \"1406679\",\n        \"14640983\",\n        \"14702041\",\n        \"14744935\",\n        \"15302935\",\n        \"15619621\",\n        \"16037820\",\n        \"16227590\",\n        \"16552184\",\n        \"16674116\",\n        \"16784539\",\n        \"17287340\",\n        \"17906639\",\n        \"17942552\",\n        \"18521083\",\n        \"18769132\",\n        \"18847512\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"21659604\",\n        \"21983960\",\n        \"22011578\",\n        \"22496350\",\n        \"22547687\",\n        \"23201157\",\n        \"23312004\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK3-controls-state-change-of-TP53\",\n      source: \"DAPK3\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP63\",\n      source: \"PRKAB1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP63\",\n      source: \"SUMO1\",\n      cited: 1,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP73\",\n      source: \"PRKAA1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"E4F1-controls-state-change-of-TP53\",\n      source: \"E4F1\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\"17110336\", \"9288740\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP73\",\n      source: \"PRKAA2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP63\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-concentric/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport concentric from \"@antv/f6-wx/extends/layout/concentricLayout\";\n/**\n * basic-concentric\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"concentric\", concentric);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"concentric\",\n        maxLevelDiff: 0.5,\n        sortBy: \"degree\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 5,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-concentric/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本同心圆布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-concentric/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-concentric/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-dagre/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      dataType: \"alps\",\n      name: \"alps_file1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"2\",\n      dataType: \"alps\",\n      name: \"alps_file2\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"3\",\n      dataType: \"alps\",\n      name: \"alps_file3\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"4\",\n      dataType: \"sql\",\n      name: \"sql_file1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"5\",\n      dataType: \"sql\",\n      name: \"sql_file2\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"6\",\n      dataType: \"feature_etl\",\n      name: \"feature_etl_1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"7\",\n      dataType: \"feature_etl\",\n      name: \"feature_etl_1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"8\",\n      dataType: \"feature_extractor\",\n      name: \"feature_extractor\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n    },\n    {\n      source: \"2\",\n      target: \"4\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"6\",\n      target: \"7\",\n    },\n    {\n      source: \"6\",\n      target: \"8\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-dagre/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n\n/**\n * Dagre流程图\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n    F6.registerNode(\n      \"sql\",\n      {\n        drawShape(cfg, group) {\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              x: -75,\n              y: -25,\n              width: 150,\n              height: 50,\n              radius: 10,\n              stroke: \"#5B8FF9\",\n              fill: \"#C6E5FF\",\n              lineWidth: 3,\n            },\n            name: \"rect-shape\",\n          });\n          if (cfg.name) {\n            group.addShape(\"text\", {\n              attrs: {\n                text: cfg.name,\n                x: 0,\n                y: 0,\n                fill: \"#00287E\",\n                fontSize: 14,\n                textAlign: \"center\",\n                textBaseline: \"middle\",\n                fontWeight: \"bold\",\n              },\n              name: \"text-shape\",\n            });\n          }\n          return rect;\n        },\n      },\n      \"single-node\",\n    );\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      layout: {\n        type: \"dagre\",\n        nodesepFunc: (d) => {\n          if (d.id === \"3\") {\n            return 500;\n          }\n          return 50;\n        },\n        ranksep: 70,\n        controlPoints: true,\n      },\n      defaultNode: {\n        type: \"sql\",\n      },\n      defaultEdge: {\n        type: \"polyline\",\n        style: {\n          radius: 20,\n          offset: 45,\n          endArrow: true,\n          lineWidth: 2,\n          stroke: \"#C2C8D5\",\n        },\n      },\n      nodeStateStyles: {\n        selected: {\n          stroke: \"#d9d9d9\",\n          fill: \"#5394ef\",\n        },\n      },\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"zoom-canvas\",\n          \"click-select\",\n          {\n            type: \"tooltip\",\n            formatText(model) {\n              const cfg = model.conf;\n              const text = [];\n              cfg.forEach((row) => {\n                text.push(`${row.label}:${row.value}<br>`);\n              });\n              return text.join(\"\\n\");\n            },\n            offset: 30,\n          },\n        ],\n      },\n      fitView: true,\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-dagre/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"流程图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-dagre/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-dagre/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 基本力导向布局及节点拖拽\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n      },\n      defaultNode: {\n        size: 15,\n      },\n    });\n\n    // 注册数据\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    // 更新位置用的函数\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n\n    // 监听事件\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", function (e) {\n      const forceLayout = this.graph.get(\"layoutController\").layoutMethods[0];\n      forceLayout.execute();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", (e) => {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本力导向布局及节点拖拽\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed-drag-fix/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed-drag-fix/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 固定被拖拽节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        nodeSize: 20,\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n    this.graph.on(\"node:dragstart\", (e) => {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      refreshDragedNodePosition(e);\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed-drag-fix/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"固定被拖拽节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed-drag-fix/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed-drag-fix/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-grid/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-grid/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport grid from \"@antv/f6-wx/extends/layout/gridLayout\";\n/**\n * basicGrid布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"grid\", grid);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"grid\",\n        begin: [20, 20],\n        width: width - 20,\n        height: height - 20,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-grid/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本网格布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-grid/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-grid/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-radial/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-radial/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\n/**\n * basic-radial\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 50,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-radial/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-radial/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/basic-radial/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-arc-diagram/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      name: \"analytics.cluster\",\n      cluster: \"analytics\",\n      value: 21,\n    },\n    {\n      id: \"1\",\n      name: \"analytics.graph\",\n      cluster: \"analytics\",\n      value: 34,\n    },\n    {\n      id: \"2\",\n      name: \"analytics.optimization\",\n      cluster: \"analytics\",\n      value: 8,\n    },\n    {\n      id: \"3\",\n      name: \"animate\",\n      cluster: \"animate\",\n      value: 40,\n    },\n    {\n      id: \"4\",\n      name: \"animate.interpolate\",\n      cluster: \"animate\",\n      value: 18,\n    },\n    {\n      id: \"5\",\n      name: \"data.converters\",\n      cluster: \"data\",\n      value: 25,\n    },\n    {\n      id: \"6\",\n      name: \"data\",\n      cluster: \"data\",\n      value: 10,\n    },\n    {\n      id: \"7\",\n      name: \"display\",\n      cluster: \"display\",\n      value: 4,\n    },\n    {\n      id: \"8\",\n      name: \"flex\",\n      cluster: \"flex\",\n      value: 6,\n    },\n    {\n      id: \"9\",\n      name: \"physics\",\n      cluster: \"physics\",\n      value: 22,\n    },\n    {\n      id: \"10\",\n      name: \"query\",\n      cluster: \"query\",\n      value: 67,\n    },\n    {\n      id: \"11\",\n      name: \"query.methods\",\n      cluster: \"query\",\n      value: 71,\n    },\n    {\n      id: \"12\",\n      name: \"scale\",\n      cluster: \"scale\",\n      value: 33,\n    },\n    {\n      id: \"13\",\n      name: \"util\",\n      cluster: \"util\",\n      value: 23,\n    },\n    {\n      id: \"14\",\n      name: \"util.heap\",\n      cluster: \"util\",\n      value: 2,\n    },\n    {\n      id: \"15\",\n      cluster: \"util\",\n      name: \"util.math\",\n      value: 2,\n    },\n    {\n      id: \"16\",\n      name: \"util.palette\",\n      cluster: \"util\",\n      value: 5,\n    },\n    {\n      id: \"17\",\n      name: \"vis.axis\",\n      cluster: \"vis\",\n      value: 24,\n    },\n    {\n      id: \"18\",\n      name: \"vis.controls\",\n      cluster: \"vis\",\n      value: 28,\n    },\n    {\n      id: \"19\",\n      name: \"vis.data\",\n      cluster: \"vis\",\n      value: 70,\n    },\n    {\n      id: \"20\",\n      name: \"vis.data.render\",\n      cluster: \"vis\",\n      value: 11,\n    },\n    {\n      id: \"21\",\n      name: \"vis.events\",\n      cluster: \"vis\",\n      value: 8,\n    },\n    {\n      id: \"22\",\n      name: \"vis.legend\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"23\",\n      name: \"vis.operator.distortion\",\n      cluster: \"vis\",\n      value: 9,\n    },\n    {\n      id: \"24\",\n      name: \"vis.operator.encoder\",\n      cluster: \"vis\",\n      value: 30,\n    },\n    {\n      id: \"25\",\n      name: \"vis.operator.filter\",\n      cluster: \"vis\",\n      value: 17,\n    },\n    {\n      id: \"26\",\n      name: \"vis.operator\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"27\",\n      name: \"vis.operator.label\",\n      cluster: \"vis\",\n      value: 18,\n    },\n    {\n      id: \"28\",\n      name: \"vis.operator.layout\",\n      cluster: \"vis\",\n      value: 91,\n    },\n    {\n      id: \"29\",\n      name: \"vis\",\n      cluster: \"vis\",\n      value: 13,\n    },\n  ],\n  edges: [\n    {\n      source: \"10\",\n      target: \"10\",\n      sourceWeight: 61,\n      targetWeight: 61,\n    },\n    {\n      source: \"11\",\n      target: \"11\",\n      sourceWeight: 39,\n      targetWeight: 39,\n    },\n    {\n      source: \"3\",\n      target: \"3\",\n      sourceWeight: 30,\n      targetWeight: 30,\n    },\n    {\n      source: \"19\",\n      target: \"19\",\n      sourceWeight: 26,\n      targetWeight: 26,\n    },\n    {\n      source: \"13\",\n      target: \"13\",\n      sourceWeight: 23,\n      targetWeight: 23,\n    },\n    {\n      source: \"9\",\n      target: \"9\",\n      sourceWeight: 22,\n      targetWeight: 22,\n    },\n    {\n      source: \"12\",\n      target: \"12\",\n      sourceWeight: 19,\n      targetWeight: 19,\n    },\n    {\n      source: \"28\",\n      target: \"19\",\n      sourceWeight: 34,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"4\",\n      sourceWeight: 16,\n      targetWeight: 16,\n    },\n    {\n      source: \"11\",\n      target: \"10\",\n      sourceWeight: 32,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"28\",\n      sourceWeight: 14,\n      targetWeight: 14,\n    },\n    {\n      source: \"18\",\n      target: \"18\",\n      sourceWeight: 12,\n      targetWeight: 12,\n    },\n    {\n      source: \"26\",\n      target: \"26\",\n      sourceWeight: 11,\n      targetWeight: 11,\n    },\n    {\n      source: \"28\",\n      target: \"13\",\n      sourceWeight: 20,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      sourceWeight: 17,\n      targetWeight: 2,\n    },\n    {\n      source: \"19\",\n      target: \"13\",\n      sourceWeight: 17,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"17\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"6\",\n      target: \"6\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"19\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"5\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"21\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 4,\n    },\n    {\n      source: \"25\",\n      target: \"19\",\n      sourceWeight: 10,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"0\",\n      sourceWeight: 5,\n      targetWeight: 5,\n    },\n    {\n      source: \"3\",\n      target: \"13\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"19\",\n      sourceWeight: 5,\n      targetWeight: 4,\n    },\n    {\n      source: \"19\",\n      target: \"12\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"22\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"24\",\n      target: \"24\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"26\",\n      target: \"3\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"16\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"16\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"10\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"22\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"20\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"1\",\n      target: \"26\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"12\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"7\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"3\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"7\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 2,\n    },\n    {\n      source: \"22\",\n      target: \"16\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"21\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"23\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"29\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"28\",\n      target: \"17\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"15\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"27\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"14\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"18\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 1,\n    },\n    {\n      source: \"25\",\n      target: \"26\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"9\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"12\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"6\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"21\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"29\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"23\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"17\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"12\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"20\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"6\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"6\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-arc-diagram/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport mds from \"@antv/f6-wx/extends/layout/mdsLayout\";\n/**\n * 环形弧线图\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"mds\", mds);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const colors = [\n      \"rgb(91, 143, 249)\",\n      \"rgb(90, 216, 166)\",\n      \"rgb(93, 112, 146)\",\n      \"rgb(246, 189, 22)\",\n      \"rgb(232, 104, 74)\",\n      \"rgb(109, 200, 236)\",\n      \"rgb(146, 112, 202)\",\n      \"rgb(255, 157, 77)\",\n      \"rgb(38, 154, 153)\",\n      \"rgb(227, 137, 163)\",\n    ];\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"edge-tooltip\",\n            formatText: function formatText(model) {\n              const text = `source: ${model.sourceName}<br/> target: ${model.targetName}`;\n              return text;\n            },\n          },\n        ],\n      },\n      defaultNode: {\n        style: {\n          opacity: 0.8,\n          lineWidth: 1,\n          stroke: \"#999\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          opacity: 0.6,\n          lineAppendWidth: 3,\n        },\n      },\n    });\n\n    // 订阅\n    this.graph.on(\"edge:mouseenter\", function (e) {\n      const edge = e.item;\n      this.graph.setItemState(edge, \"hover\", true);\n    });\n    this.graph.on(\"edge:mouseleave\", function (e) {\n      const edge = e.item;\n      this.graph.setItemState(edge, \"hover\", false);\n    });\n\n    // 处理数据\n    function scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n      const outLength = outRange[1] - outRange[0];\n      const dataLength = dataRange[1] - dataRange[0];\n      nodes.forEach((n) => {\n        n[propName] =\n          ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n          outRange[0];\n      });\n    }\n\n    const origin = [width / 2, height / 2];\n    const radius = width < height ? width / 3 : height / 3;\n    const { edges } = data;\n    const { nodes } = data;\n    const nodeMap = new Map();\n    const clusterMap = new Map();\n    let clusterId = 0;\n    const n = nodes.length;\n    const angleSep = (Math.PI * 2) / n;\n    nodes.forEach((node, i) => {\n      const angle = i * angleSep;\n      node.x = radius * Math.cos(angle) + origin[0];\n      node.y = radius * Math.sin(angle) + origin[1];\n      node.angle = angle;\n      nodeMap.set(node.id, node);\n      // cluster\n      if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n        clusterMap.set(node.cluster, clusterId);\n        clusterId++;\n      }\n      const id = clusterMap.get(node.cluster);\n      if (node.style) {\n        node.style.fill = colors[id % colors.length];\n      } else {\n        node.style = {\n          fill: colors[id % colors.length],\n        };\n      }\n      // label\n      node.label = node.name;\n      node.labelCfg = {\n        position: \"center\",\n        style: {\n          rotate: angle,\n          rotateCenter: \"lefttop\",\n          textAlign: \"start\",\n        },\n      };\n    });\n    edges.forEach((edge) => {\n      edge.type = \"quadratic\";\n      const source = nodeMap.get(edge.source);\n      const target = nodeMap.get(edge.target);\n      edge.controlPoints = [\n        {\n          x: origin[0],\n          y: origin[1],\n        },\n      ];\n      edge.color = source.style.fill;\n      edge.sourceName = source.name;\n      edge.targetName = target.name;\n    });\n\n    // map the value to node size\n    let maxValue = -9999;\n    let minValue = 9999;\n    nodes.forEach((k) => {\n      if (maxValue < k.value) maxValue = k.value;\n      if (minValue > k.value) minValue = k.value;\n    });\n    const sizeRange = [3, 30];\n    const sizeDataRange = [minValue, maxValue];\n    scaleNodeProp(nodes, \"size\", \"value\", sizeDataRange, sizeRange);\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-arc-diagram/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"环形弧线图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-arc-diagram/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-arc-diagram/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport circular from \"@antv/f6-wx/extends/layout/circularLayout\";\n/**\n * Circular布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    discription:\n      \"Circular layout with radius: take full use of the canvas, ordering: topology\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    setInterval(() => {\n      layoutConfigTranslation();\n    }, 11500);\n\n    function layoutConfigTranslation() {\n      setTimeout(() => {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 200, divisions = 5, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n          startAngle: Math.PI / 4,\n          endAngle: Math.PI,\n          divisions: 5,\n          ordering: \"degree\",\n        });\n      }, 1000);\n\n      setTimeout(() => {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 200, divisions = 3, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          startAngle: Math.PI / 4,\n          endAngle: Math.PI,\n          divisions: 3,\n        });\n      }, 2500);\n\n      setTimeout(() => {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 200, divisions = 8, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n          startAngle: 0,\n          endAngle: Math.PI / 2,\n          divisions: 8,\n        });\n      }, 4000);\n\n      setTimeout(() => {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 10～300(spiral), endAngle: PI, divisions = 1, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: null,\n          startRadius: 10,\n          endRadius: 300,\n          divisions: 1,\n          startAngle: 0,\n          endAngle: Math.PI,\n        });\n      }, 5500);\n\n      setTimeout(() => {\n        me.setData({\n          discription:\n            \"Circular layout, radius = 10～300(spiral),endAngle: 2 * PI, divisions= 1, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          endAngle: 2 * Math.PI,\n        });\n      }, 7000);\n\n      setTimeout(() => {\n        me.setData({\n          discription: \"Circular layout, radius = 200, ordering: degree\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n        });\n      }, 8500);\n\n      setTimeout(() => {\n        me.setData({\n          discription: \"Circular layout, radius = 200, ordering: topology\",\n        });\n        me.graph.updateLayout({\n          radius: 200,\n          ordering: \"topology\",\n        });\n      }, 10000);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-configuration-translate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-configuration-translate/index.wxml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/circular-configuration-translate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/cluster-grid/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"0\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"0\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"0\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"0\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"3\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"0\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"0\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"0\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"3\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"3\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"2\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"2\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"4\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"2\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"2\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"2\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"1\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"4\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"4\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"4\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"0\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"2\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"2\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"2\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"3\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"4\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"4\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"1\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"1\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"4\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"4\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"1\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst colors = [\n  \"#BDD2FD\",\n  \"#BDEFDB\",\n  \"#C2C8D5\",\n  \"#FBE5A2\",\n  \"#F6C3B7\",\n  \"#B6E3F5\",\n  \"#D3C6EA\",\n  \"#FFD8B8\",\n  \"#AAD8D8\",\n  \"#FFD6E7\",\n];\nconst strokes = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#E8684A\",\n  \"#6DC8EC\",\n  \"#9270CA\",\n  \"#FF9D4D\",\n  \"#269A99\",\n  \"#FF99C3\",\n];\n\nconst { nodes } = data;\nconst clusterMap = new Map();\nlet clusterId = 0;\nnodes.forEach((node) => {\n  // cluster\n  if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n    clusterMap.set(node.cluster, clusterId);\n    clusterId++;\n  }\n  const cid = clusterMap.get(node.cluster);\n  if (!node.style) node.style = {};\n  node.style.fill = colors[cid % colors.length];\n  node.style.stroke = strokes[cid % strokes.length];\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/cluster-grid/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport grid from \"@antv/f6-wx/extends/layout/gridLayout\";\n/**\n * 指定排序方式的网格布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"grid\", grid);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"grid\",\n        begin: [20, 20],\n        width: width - 20,\n        height: height - 20,\n        sortBy: \"cluster\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/cluster-grid/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"指定排序方式的网格布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/cluster-grid/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/cluster-grid/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/custom-bi-graph/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"A\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"1\",\n      label: \"B\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"2\",\n      label: \"C\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"3\",\n      label: \"D\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"4\",\n      label: \"E\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"5\",\n      label: \"F\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"6\",\n      label: \"a\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"7\",\n      label: \"b\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"8\",\n      label: \"c\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"9\",\n      label: \"d\",\n      cluster: \"part2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"6\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"1\",\n      target: \"6\",\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n    },\n    {\n      source: \"1\",\n      target: \"7\",\n    },\n    {\n      source: \"2\",\n      target: \"8\",\n    },\n    {\n      source: \"2\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"6\",\n    },\n    {\n      source: \"3\",\n      target: \"8\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n    },\n    {\n      source: \"5\",\n      target: \"9\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/custom-bi-graph/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * custom-bi-graph\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"bigraphLayout\", {\n      execute() {\n        const self = this;\n        const center = self.center || [0, 0];\n        const biSep = self.biSep || 100;\n        const nodeSep = self.nodeSep || 20;\n        const nodeSize = self.nodeSize || 20;\n        const direction = self.direction || \"horizontal\";\n        let part1Pos = 0;\n        let part2Pos = 0;\n        if (direction === \"horizontal\") {\n          part1Pos = center[0] - biSep / 2;\n          part2Pos = center[0] + biSep / 2;\n        }\n        const { nodes, edges } = self;\n        const part1Nodes = [];\n        const part2Nodes = [];\n        const part1NodeMap = new Map();\n        const part2NodeMap = new Map();\n        // separate the nodes and init the positions\n        nodes.forEach((node, i) => {\n          if (node.cluster === \"part1\") {\n            part1Nodes.push(node);\n            part1NodeMap.set(node.id, i);\n          } else {\n            part2Nodes.push(node);\n            part2NodeMap.set(node.id, i);\n          }\n        });\n\n        // order the part1 node\n        part1Nodes.forEach((p1n) => {\n          let index = 0;\n          let adjCount = 0;\n          edges.forEach((edge) => {\n            const sourceId = edge.source;\n            const targetId = edge.target;\n            if (sourceId === p1n.id) {\n              index += part2NodeMap.get(targetId);\n              adjCount += 1;\n            } else if (targetId === p1n.id) {\n              index += part2NodeMap.get(sourceId);\n              adjCount += 1;\n            }\n          });\n          index /= adjCount;\n          p1n.index = index;\n        });\n        part1Nodes.sort((a, b) => {\n          return a.index - b.index;\n        });\n        part2Nodes.forEach((p2n) => {\n          let index = 0;\n          let adjCount = 0;\n          edges.forEach((edge) => {\n            const sourceId = edge.source;\n            const targetId = edge.target;\n            if (sourceId === p2n.id) {\n              index += part1NodeMap.get(targetId);\n              adjCount += 1;\n            } else if (targetId === p2n.id) {\n              index += part1NodeMap.get(sourceId);\n              adjCount += 1;\n            }\n          });\n          index /= adjCount;\n          p2n.index = index;\n        });\n        part2Nodes.sort((a, b) => {\n          return a.index - b.index;\n        });\n\n        // place the nodes\n        const hLength =\n          part1Nodes.length > part2Nodes.length\n            ? part1Nodes.length\n            : part2Nodes.length;\n        const height = hLength * (nodeSep + nodeSize);\n        let begin = center[1] - height / 2;\n        if (direction === \"vertical\") {\n          begin = center[0] - height / 2;\n        }\n        part1Nodes.forEach((p1n, i) => {\n          if (direction === \"horizontal\") {\n            p1n.x = part1Pos;\n            p1n.y = begin + i * (nodeSep + nodeSize);\n          } else {\n            p1n.x = begin + i * (nodeSep + nodeSize);\n            p1n.y = part1Pos;\n          }\n        });\n        part2Nodes.forEach((p2n, i) => {\n          if (direction === \"horizontal\") {\n            p2n.x = part2Pos;\n            p2n.y = begin + i * (nodeSep + nodeSize);\n          } else {\n            p2n.x = begin + i * (nodeSep + nodeSize);\n            p2n.y = part2Pos;\n          }\n        });\n      },\n    });\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"bigraphLayout\",\n        biSep: 300,\n        nodeSep: 20,\n        nodeSize: 20,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/custom-bi-graph/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义二分图布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/custom-bi-graph/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/custom-bi-graph/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n\n/**\n * 自左向右的Dagre\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        align: \"DL\",\n        nodesepFunc: () => 1,\n        ranksepFunc: () => 1,\n      },\n      defaultNode: {\n        size: [30, 20],\n        type: \"rect\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自左向右的流程图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-UL/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"7\",\n    },\n    {\n      source: \"5\",\n      target: \"8\",\n    },\n    {\n      source: \"8\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"9\",\n    },\n    {\n      source: \"3\",\n      target: \"9\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-UL/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n\n/**\n * 自左向右的Dagre上对齐\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        align: \"UL\",\n        controlPoints: true,\n        nodesepFunc: () => 1,\n        ranksepFunc: () => 1,\n      },\n      defaultNode: {\n        size: [30, 20],\n        type: \"rect\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        type: \"polyline\",\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n          radius: 20,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-UL/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自左向右的流程图对齐\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-UL/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-UL/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-combo/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      comboId: \"A\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      comboId: \"B\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      comboId: \"A\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      comboId: \"C\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      comboId: \"C\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      comboId: \"A\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      comboId: \"B\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      comboId: \"B\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n    },\n    {\n      source: \"1\",\n      target: \"6\",\n    },\n    {\n      source: \"1\",\n      target: \"7\",\n    },\n    {\n      source: \"3\",\n      target: \"8\",\n    },\n    {\n      source: \"3\",\n      target: \"9\",\n    },\n    {\n      source: \"5\",\n      target: \"10\",\n    },\n    {\n      source: \"5\",\n      target: \"11\",\n    },\n  ],\n  combos: [\n    {\n      id: \"A\",\n      label: \"combo A\",\n      style: {\n        fill: \"#C4E3B2\",\n        stroke: \"#C4E3B2\",\n      },\n    },\n    {\n      id: \"B\",\n      label: \"combo B\",\n      style: {\n        stroke: \"#99C0ED\",\n        fill: \"#99C0ED\",\n      },\n    },\n    {\n      id: \"C\",\n      label: \"combo C\",\n      style: {\n        stroke: \"#eee\",\n        fill: \"#eee\",\n      },\n    },\n  ],\n};\n\ndata.nodes.forEach((node) => {\n  switch (node.ComboId) {\n    case \"A\":\n      node.style = {\n        fill: \"#C4E3B2\",\n        stroke: \"#aaa\",\n      };\n      break;\n    case \"B\":\n      node.style = {\n        fill: \"#99C0ED\",\n        stroke: \"#aaa\",\n      };\n      break;\n    case \"C\":\n      node.style = {\n        fill: \"#eee\",\n        stroke: \"#aaa\",\n      };\n      break;\n    default:\n      node.style = {\n        fill: \"#FDE1CE\",\n        stroke: \"#aaa\",\n      };\n      break;\n  }\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-combo/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n\n/**\n * dagre-combo\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n  sortByCombo: false,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    description: \"Enable sortByCombo\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  handleClickButton() {\n    console.log(\"click\", this.sortByCombo);\n    this.sortByCombo = !this.sortByCombo;\n    this.setData({\n      description: this.sortByCombo\n        ? \"Disable sortByCombo\"\n        : \"Enable sortByCombo\",\n    });\n    const { sortByCombo } = this;\n    this.graph.updateLayout({\n      sortByCombo,\n    });\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 30,\n      animate: true,\n      groupByTypes: false,\n      modes: {\n        default: [\n          \"drag-combo\",\n          \"drag-node\",\n          \"drag-canvas\",\n          {\n            type: \"collapse-expand-combo\",\n            relayout: false,\n          },\n        ],\n      },\n      layout: {\n        type: \"dagre\",\n        sortByCombo: false,\n        ranksep: 10,\n        nodesep: 10,\n      },\n      defaultNode: {\n        size: [60, 30],\n        type: \"rect\",\n        anchorPoints: [\n          [0.5, 0],\n          [0.5, 1],\n        ],\n      },\n      defaultEdge: {\n        type: \"line\",\n      },\n      defaultCombo: {\n        type: \"rect\",\n        style: {\n          fillOpacity: 0.1,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-combo/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"带有Combo的流程图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-combo/index.wxml",
    "content": "<button\n  onTap=\"handleClickButton\"\n>{{description}}</button>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-combo/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n\n/**\n * Dagre布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    description: \"\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 30,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"dagre\",\n        nodeSize: [40, 20],\n        nodesep: 1,\n        ranksep: 1,\n      },\n      animate: true,\n      defaultNode: {\n        size: [40, 20],\n        type: \"rect\",\n        style: {\n          lineWidth: 2,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    function layoutConfigTranslation() {\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 1, layout direction: Top->Bottom, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          ranksep: 10,\n        });\n      }, 1000);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          nodesep: 5,\n        });\n      }, 2500);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UL\",\n        });\n        me.graph.updateLayout({\n          align: \"UL\",\n        });\n      }, 4000);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UR\",\n        });\n        me.graph.updateLayout({\n          align: \"UR\",\n        });\n      }, 5500);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          rankdir: \"LR\",\n          align: \"DL\",\n        });\n      }, 7000);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Dagre layout, rank seperation: 30, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n        });\n        me.graph.updateLayout({\n          ranksep: 30,\n        });\n      }, 8500);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-configuration-translate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"布局参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-configuration-translate/index.wxml",
    "content": "<view>{{description}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/dagre-configuration-translate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/data-change/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst data2 = {\n  nodes: [\n    {\n      id: \"b0\",\n      label: \"0\",\n    },\n    {\n      id: \"b1\",\n      label: \"1\",\n    },\n    {\n      id: \"b2\",\n      label: \"2\",\n    },\n    {\n      id: \"b3\",\n      label: \"3\",\n    },\n    {\n      id: \"b4\",\n      label: \"4\",\n    },\n    {\n      id: \"b5\",\n      label: \"5\",\n    },\n  ],\n  edges: [\n    {\n      id: \"be1\",\n      source: \"b0\",\n      target: \"b1\",\n    },\n    {\n      id: \"be2\",\n      source: \"b0\",\n      target: \"b2\",\n    },\n    {\n      id: \"be3\",\n      source: \"b0\",\n      target: \"b3\",\n    },\n    {\n      id: \"be4\",\n      source: \"b0\",\n      target: \"b4\",\n    },\n    {\n      id: \"be5\",\n      source: \"b0\",\n      target: \"b5\",\n    },\n  ],\n};\n\nexport { data, data2 };\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/data-change/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport { data, data2 } from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n/**\n * layoutTranslate\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"force\",\n      },\n      // animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 切换数据\n    setTimeout(() => {\n      this.graph.changeData(data2);\n    }, 2500);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/data-change/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"数据动态切换\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/data-change/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/data-change/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/degree-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/degree-circular/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport circular from \"@antv/f6-wx/extends/layout/circularLayout\";\n/**\n * 按照节点度数排序的Circular\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n        ordering: \"degree\",\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/degree-circular/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"按节点度数排序\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/degree-circular/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/degree-circular/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/division-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/division-circular/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport circular from \"@antv/f6-wx/extends/layout/circularLayout\";\n/**\n * 分割环形布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n        divisions: 5,\n        radius: 200,\n        startAngle: Math.PI / 4,\n        endAngle: Math.PI,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/division-circular/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"分割环形布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/division-circular/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/division-circular/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-bubbles/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      value: 10,\n      cluster: \"a\",\n      description: \"this is node 0, \\nand the value of it is 10\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      value: 20,\n      cluster: \"b\",\n      description: \"this is node 1, \\nand the value of it is 20\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      value: 5,\n      cluster: \"a\",\n      description: \"this is node 2, \\nand the value of it is 5\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      value: 10,\n      cluster: \"a\",\n      description: \"this is node 3, \\nand the value of it is 10\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      value: 12,\n      cluster: \"c\",\n      subCluster: \"sb\",\n      description: \"this is node 4, \\nand the value of it is 12\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      value: 18,\n      cluster: \"c\",\n      subCluster: \"sa\",\n      description: \"this is node 5, \\nand the value of it is 18\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      value: 3,\n      cluster: \"c\",\n      subCluster: \"sa\",\n      description: \"this is node 6, \\nand the value of it is 3\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      value: 7,\n      cluster: \"b\",\n      subCluster: \"sa\",\n      description: \"this is node 7, \\nand the value of it is 7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      value: 21,\n      cluster: \"d\",\n      subCluster: \"sb\",\n      description: \"this is node 8, \\nand the value of it is 21\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      value: 9,\n      cluster: \"d\",\n      subCluster: \"sb\",\n      description: \"this is node 9, \\nand the value of it is 9\",\n    },\n  ],\n  edges: [],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-bubbles/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 力导向气泡图\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        nodeStrength: 30,\n        collideStrength: 0.7,\n        alphaDecay: 0.01,\n        preventOverlap: true,\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        size: [10, 10],\n      },\n    });\n\n    function _defineProperty(obj, key, value) {\n      if (key in obj) {\n        Object.defineProperty(obj, key, {\n          value,\n          enumerable: true,\n          configurable: true,\n          writable: true,\n        });\n      } else {\n        obj[key] = value;\n      }\n      return obj;\n    }\n\n    const colors = [\n      \"#BDD2FD\",\n      \"#BDEFDB\",\n      \"#C2C8D5\",\n      \"#FBE5A2\",\n      \"#F6C3B7\",\n      \"#B6E3F5\",\n      \"#D3C6EA\",\n      \"#FFD8B8\",\n      \"#AAD8D8\",\n      \"#FFD6E7\",\n    ];\n    const strokes = [\n      \"#5B8FF9\",\n      \"#5AD8A6\",\n      \"#5D7092\",\n      \"#F6BD16\",\n      \"#E8684A\",\n      \"#6DC8EC\",\n      \"#9270CA\",\n      \"#FF9D4D\",\n      \"#269A99\",\n      \"#FF99C3\",\n    ];\n\n    const { nodes } = data;\n    const nodeMap = new Map();\n    const clusterMap = new Map();\n    let clusterId = 0;\n    nodes.forEach((node) => {\n      nodeMap.set(node.id, node);\n      // cluster\n      if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n        clusterMap.set(node.cluster, clusterId);\n        clusterId++;\n      }\n      const cid = clusterMap.get(node.cluster);\n      if (!node.style) node.style = {};\n      node.style.fill = colors[cid % colors.length];\n      node.style.stroke = strokes[cid % strokes.length];\n      node.x = width / 2 + 200 * (Math.random() - 0.5);\n      node.y = height / 2 + 200 * (Math.random() - 0.5);\n    });\n\n    // map the value to node size\n    let maxNodeValue = -9999;\n    let minNodeValue = 9999;\n    nodes.forEach((n) => {\n      if (maxNodeValue < n.value) maxNodeValue = n.value;\n      if (minNodeValue > n.value) minNodeValue = n.value;\n    });\n    const nodeSizeRange = [10, 30];\n    const nodeSizeDataRange = [minNodeValue, maxNodeValue];\n    scaleNodeProp(nodes, \"size\", \"value\", nodeSizeDataRange, nodeSizeRange);\n\n    nodes.forEach((node) => {\n      node.oriSize = node.size;\n      node.oriLabel = node.label;\n    });\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n\n    // 监听\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", (e) => {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n    this.graph.on(\"node:click\", function (e) {\n      const node = e.item;\n      const states = node.getStates();\n      let clicked = false;\n      const model = node.getModel();\n      let size = 200;\n      let labelText = `NODE: ${model.id}\\n${model.description}`;\n      states.forEach((state) => {\n        if (state === \"click\") {\n          clicked = true;\n          size = model.oriSize;\n          labelText = model.oriLabel;\n        }\n      });\n      this.graph.setItemState(node, \"click\", !clicked);\n      this.graph.updateItem(node, {\n        size,\n        label: labelText,\n      });\n      this.graph.layout();\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    function scaleNodeProp(\n      elements,\n      propName,\n      refPropName,\n      dataRange,\n      outRange,\n    ) {\n      const outLength = outRange[1] - outRange[0];\n      const dataLength = dataRange[1] - dataRange[0];\n      elements.forEach((n) => {\n        if (propName.split(\".\")[0] === \"style\") {\n          if (n.style) {\n            n.style[propName.split(\".\")[1]] =\n              ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n              outRange[0];\n          } else {\n            n.style = _defineProperty(\n              {},\n              propName.split(\".\")[1],\n              ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n                outRange[0],\n            );\n          }\n        } else {\n          n[propName] =\n            ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n            outRange[0];\n        }\n      });\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-bubbles/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"力导向气泡图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-bubbles/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-bubbles/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-constrained-in-rect/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-constrained-in-rect/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 约束在范围内布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n    const { nodes } = data;\n\n    // 包裹范围的参数\n    const constrainBox = { x: 60, y: 50, width: 500, height: 150 };\n    const onTick = () => {\n      let minx = 99999999;\n      let maxx = -99999999;\n      let miny = 99999999;\n      let maxy = -99999999;\n      let maxsize = -9999999;\n      nodes.forEach((node) => {\n        if (minx > node.x) {\n          minx = node.x;\n        }\n        if (maxx < node.x) {\n          maxx = node.x;\n        }\n        if (miny > node.y) {\n          miny = node.y;\n        }\n        if (maxy < node.y) {\n          maxy = node.y;\n        }\n        if (maxsize < node.size) {\n          maxsize = node.size;\n        }\n      });\n      const scalex = (constrainBox.width - maxsize) / (maxx - minx);\n      const scaley = (constrainBox.height - maxsize) / (maxy - miny);\n      nodes.forEach((node) => {\n        node.x = (node.x - minx) * scalex + constrainBox.x;\n        node.y = (node.y - miny) * scaley + constrainBox.y;\n      });\n    };\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        onTick,\n      },\n      defaultNode: {\n        size: 15,\n      },\n    });\n\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-constrained-in-rect/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"约束在范围内布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-constrained-in-rect/index.wxml",
    "content": "<!-- TODO：这个背景怎么实现？ -->\n<view\n  width:=\"{{constrainBox.width}}\"\n  height=\"{{constrainBox.height}}\"\n></view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-constrained-in-rect/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-configuration-translate/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 力导向布局参数动态变化\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    desc: \"\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"force\",\n        linkDistance: 50,\n        center: [width / 2, height / 2],\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n    const my = this;\n    setInterval(() => {\n      layoutConfigTranslation();\n    }, 5000);\n\n    function layoutConfigTranslation() {\n      setTimeout(() => {\n        my.setData({\n          desc: \"Force layout, linkDistance = 100, preventOverlap: true\",\n        });\n        my.graph.updateLayout({\n          linkDistance: 100,\n          preventOverlap: true,\n          nodeSize: 20,\n        });\n      }, 2500);\n      setTimeout(() => {\n        my.setData({\n          desc: \"Force layout, linkDistance = 50, preventOverlap: false\",\n        });\n        my.graph.updateLayout({\n          linkDistance: 50,\n          preventOverlap: false,\n        });\n      }, 5000);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-configuration-translate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"力导向布局参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-configuration-translate/index.wxml",
    "content": "<view>{{desc}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-configuration-translate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-force-clustering/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"4\",\n      sim_name: \"AFG\",\n      name: \"Afghanistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 57.847,\n      weight: 73.355,\n    },\n    {\n      id: \"8\",\n      sim_name: \"ALB\",\n      name: \"Albania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 556.3332546,\n      weight: 1214.363,\n    },\n    {\n      id: \"10\",\n      sim_name: \"ATA\",\n      name: \"Antarctica\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2829.367,\n      weight: 11113.564,\n    },\n    {\n      id: \"12\",\n      sim_name: \"DZA\",\n      name: \"Algeria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105217.8151,\n      weight: 146857.7593,\n    },\n    {\n      id: \"16\",\n      sim_name: \"ASM\",\n      name: \"American Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 97.623,\n      weight: 982.085,\n    },\n    {\n      id: \"20\",\n      sim_name: \"AND\",\n      name: \"Andorra\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 787.166,\n      weight: 1240.056,\n    },\n    {\n      id: \"24\",\n      sim_name: \"AGO\",\n      name: \"Angola\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.366,\n      weight: 0.211,\n    },\n    {\n      id: \"28\",\n      sim_name: \"ATG\",\n      name: \"Antigua and Barbuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30831.87949,\n      weight: 72065.168,\n    },\n    {\n      id: \"31\",\n      sim_name: \"AZE\",\n      name: \"Azerbaijan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46917.41553,\n      weight: 45114.87169,\n    },\n    {\n      id: \"32\",\n      sim_name: \"ARG\",\n      name: \"Argentina\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11347322.78,\n      weight: 38200326.47,\n    },\n    {\n      id: \"36\",\n      sim_name: \"AUS\",\n      name: \"Australia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10983308.38,\n      weight: 32933532.17,\n    },\n    {\n      id: \"40\",\n      sim_name: \"AUT\",\n      name: \"Austria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 714932.2545,\n      weight: 1683224.24,\n    },\n    {\n      id: \"44\",\n      sim_name: \"BHS\",\n      name: \"Bahamas\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 427.395,\n      weight: 969.33,\n    },\n    {\n      id: \"48\",\n      sim_name: \"BHR\",\n      name: \"Bahrain\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22229.96717,\n      weight: 53856.78001,\n    },\n    {\n      id: \"50\",\n      sim_name: \"BGD\",\n      name: \"Bangladesh\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22330.75971,\n      weight: 86944.1853,\n    },\n    {\n      id: \"51\",\n      sim_name: \"ARM\",\n      name: \"Armenia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 206.6709842,\n      weight: 223.5014745,\n    },\n    {\n      id: \"52\",\n      sim_name: \"BRB\",\n      name: \"Barbados\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4790.290139,\n      weight: 7428.399008,\n    },\n    {\n      id: \"56\",\n      sim_name: \"BEL\",\n      name: \"Belgium\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1896499.584,\n      weight: 3625004.302,\n    },\n    {\n      id: \"60\",\n      sim_name: \"BMU\",\n      name: \"Bermuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 100.264,\n      weight: 250,\n    },\n    {\n      id: \"64\",\n      sim_name: \"BTN\",\n      name: \"Bhutan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1100.663269,\n      weight: 3990.493739,\n    },\n    {\n      id: \"68\",\n      sim_name: \"BOL\",\n      name: \"Bolivia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 107152.4673,\n      weight: 117438.7654,\n    },\n    {\n      id: \"70\",\n      sim_name: \"BIH\",\n      name: \"Bosnia Herzegovina\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10652.90002,\n      weight: 25582.17925,\n    },\n    {\n      id: \"72\",\n      sim_name: \"BWA\",\n      name: \"Botswana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7635.744989,\n      weight: 24790.60442,\n    },\n    {\n      id: \"76\",\n      sim_name: \"BRA\",\n      name: \"Brazil\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7114534.381,\n      weight: 22441162.41,\n    },\n    {\n      id: \"84\",\n      sim_name: \"BLZ\",\n      name: \"Belize\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28037.35873,\n      weight: 77441.91463,\n    },\n    {\n      id: \"90\",\n      sim_name: \"SLB\",\n      name: \"Solomon Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"92\",\n      sim_name: \"VGB\",\n      name: \"British Virgin Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15328.77,\n      weight: 51127.16,\n    },\n    {\n      id: \"96\",\n      sim_name: \"BRN\",\n      name: \"Brunei Darussalam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46.438,\n      weight: 35.416,\n    },\n    {\n      id: \"100\",\n      sim_name: \"BGR\",\n      name: \"Bulgaria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1258892.481,\n      weight: 4147538.49,\n    },\n    {\n      id: \"104\",\n      sim_name: \"MMR\",\n      name: \"Myanmar\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 599204.3703,\n      weight: 1218435.323,\n    },\n    {\n      id: \"108\",\n      sim_name: \"BDI\",\n      name: \"Burundi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 523.644,\n      weight: 2841.873,\n    },\n    {\n      id: \"112\",\n      sim_name: \"BLR\",\n      name: \"Belarus\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 52538.61827,\n      weight: 137692.36,\n    },\n    {\n      id: \"116\",\n      sim_name: \"KHM\",\n      name: \"Cambodia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 167651.1526,\n      weight: 265914.0128,\n    },\n    {\n      id: \"120\",\n      sim_name: \"CMR\",\n      name: \"Cameroon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1263.861619,\n      weight: 2235.140891,\n    },\n    {\n      id: \"124\",\n      sim_name: \"CAN\",\n      name: \"Canada\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8982050.268,\n      weight: 24667183.74,\n    },\n    {\n      id: \"132\",\n      sim_name: \"CPV\",\n      name: \"Cabo Verde\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2344.96,\n      weight: 4095.993,\n    },\n    {\n      id: \"140\",\n      sim_name: \"CAF\",\n      name: \"Central African Rep.\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"144\",\n      sim_name: \"LKA\",\n      name: \"Sri Lanka\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 181369.2559,\n      weight: 489552.3718,\n    },\n    {\n      id: \"152\",\n      sim_name: \"CHL\",\n      name: \"Chile\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 412283.3672,\n      weight: 270900.3596,\n    },\n    {\n      id: \"156\",\n      sim_name: \"CHN\",\n      name: \"China\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1490564.833,\n      weight: 2304819.508,\n    },\n    {\n      id: \"170\",\n      sim_name: \"COL\",\n      name: \"Colombia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46615.80539,\n      weight: 52684.28073,\n    },\n    {\n      id: \"188\",\n      sim_name: \"CRI\",\n      name: \"Costa Rica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17710.68444,\n      weight: 28937.25094,\n    },\n    {\n      id: \"191\",\n      sim_name: \"HRV\",\n      name: \"Croatia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 192245.2115,\n      weight: 580710.257,\n    },\n    {\n      id: \"192\",\n      sim_name: \"CUB\",\n      name: \"Cuba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 793.321,\n      weight: 1620.825,\n    },\n    {\n      id: \"196\",\n      sim_name: \"CYP\",\n      name: \"Cyprus\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 47981.18874,\n      weight: 126474.07,\n    },\n    {\n      id: \"203\",\n      sim_name: \"CZE\",\n      name: \"Czech Rep.\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 922618.0722,\n      weight: 3054247.331,\n    },\n    {\n      id: \"204\",\n      sim_name: \"BEN\",\n      name: \"Benin\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12987.78421,\n      weight: 55672.72433,\n    },\n    {\n      id: \"208\",\n      sim_name: \"DNK\",\n      name: \"Denmark\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 701199.8922,\n      weight: 1992757.212,\n    },\n    {\n      id: \"212\",\n      sim_name: \"DMA\",\n      name: \"Dominica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.351,\n      weight: 0.692,\n    },\n    {\n      id: \"214\",\n      sim_name: \"DOM\",\n      name: \"Dominican Rep.\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105510.1813,\n      weight: 210275.29,\n    },\n    {\n      id: \"218\",\n      sim_name: \"ECU\",\n      name: \"Ecuador\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30957.4275,\n      weight: 49399.64362,\n    },\n    {\n      id: \"222\",\n      sim_name: \"SLV\",\n      name: \"El Salvador\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77105.01061,\n      weight: 129245.0661,\n    },\n    {\n      id: \"231\",\n      sim_name: \"ETH\",\n      name: \"Ethiopia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44330.31405,\n      weight: 29794.00055,\n    },\n    {\n      id: \"233\",\n      sim_name: \"EST\",\n      name: \"Estonia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 150772.6292,\n      weight: 458854.905,\n    },\n    {\n      id: \"234\",\n      sim_name: \"FRO\",\n      name: \"Faeroe Isds\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.298,\n      weight: 44.726,\n    },\n    {\n      id: \"242\",\n      sim_name: \"FJI\",\n      name: \"Fiji\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15966.92145,\n      weight: 24119.72685,\n    },\n    {\n      id: \"246\",\n      sim_name: \"FIN\",\n      name: \"Finland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 266364.4975,\n      weight: 753973.3063,\n    },\n    {\n      id: \"251\",\n      sim_name: \"FRA\",\n      name: \"France\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11027310.62,\n      weight: 31368277.85,\n    },\n    {\n      id: \"262\",\n      sim_name: \"DJI\",\n      name: \"Djibouti\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1936.537,\n      weight: 2932.238,\n    },\n    {\n      id: \"266\",\n      sim_name: \"GAB\",\n      name: \"Gabon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2624.516,\n      weight: 10407.907,\n    },\n    {\n      id: \"268\",\n      sim_name: \"GEO\",\n      name: \"Georgia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48754.57507,\n      weight: 158741.3575,\n    },\n    {\n      id: \"270\",\n      sim_name: \"GMB\",\n      name: \"Gambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 38.193,\n      weight: 24.45,\n    },\n    {\n      id: \"275\",\n      sim_name: \"PSE\",\n      name: \"State of Palestine\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16057.14949,\n      weight: 13745.84557,\n    },\n    {\n      id: \"276\",\n      sim_name: \"DEU\",\n      name: \"Germany\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4635549.458,\n      weight: 12647922.94,\n    },\n    {\n      id: \"288\",\n      sim_name: \"GHA\",\n      name: \"Ghana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8210.66114,\n      weight: 28560.44817,\n    },\n    {\n      id: \"292\",\n      sim_name: \"GIB\",\n      name: \"Gibraltar\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 728.465,\n      weight: 809.623,\n    },\n    {\n      id: \"296\",\n      sim_name: \"KIR\",\n      name: \"Kiribati\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.052,\n      weight: 18.562,\n    },\n    {\n      id: \"300\",\n      sim_name: \"GRC\",\n      name: \"Greece\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 263693.016,\n      weight: 644312.8604,\n    },\n    {\n      id: \"304\",\n      sim_name: \"GRL\",\n      name: \"Greenland\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"308\",\n      sim_name: \"GRD\",\n      name: \"Grenada\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4657.914,\n      weight: 9335.526,\n    },\n    {\n      id: \"316\",\n      sim_name: \"GUM\",\n      name: \"Guam\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 527.033,\n      weight: 982.642,\n    },\n    {\n      id: \"320\",\n      sim_name: \"GTM\",\n      name: \"Guatemala\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 20968.96314,\n      weight: 22893.23335,\n    },\n    {\n      id: \"324\",\n      sim_name: \"GIN\",\n      name: \"Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2636.849,\n      weight: 7422.12,\n    },\n    {\n      id: \"328\",\n      sim_name: \"GUY\",\n      name: \"Guyana\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 334196.3131,\n      weight: 520437.64,\n    },\n    {\n      id: \"332\",\n      sim_name: \"HTI\",\n      name: \"Haiti\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5.134,\n      weight: 16.128,\n    },\n    {\n      id: \"340\",\n      sim_name: \"HND\",\n      name: \"Honduras\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22936.79385,\n      weight: 43129.60369,\n    },\n    {\n      id: \"348\",\n      sim_name: \"HUN\",\n      name: \"Hungary\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2015665.793,\n      weight: 6379394.988,\n    },\n    {\n      id: \"352\",\n      sim_name: \"ISL\",\n      name: \"Iceland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 891.513,\n      weight: 2118.828,\n    },\n    {\n      id: \"360\",\n      sim_name: \"IDN\",\n      name: \"Indonesia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 175738.8156,\n      weight: 544860.3789,\n    },\n    {\n      id: \"364\",\n      sim_name: \"IRN\",\n      name: \"Iran\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7978.124,\n      weight: 20473.686,\n    },\n    {\n      id: \"368\",\n      sim_name: \"IRQ\",\n      name: \"Iraq\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 253.845,\n      weight: 246.151,\n    },\n    {\n      id: \"372\",\n      sim_name: \"IRL\",\n      name: \"Ireland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 166058.1767,\n      weight: 476236.2048,\n    },\n    {\n      id: \"376\",\n      sim_name: \"ISR\",\n      name: \"Israel\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 197912.4336,\n      weight: 431193.8203,\n    },\n    {\n      id: \"381\",\n      sim_name: \"ITA\",\n      name: \"Italy\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1288077.184,\n      weight: 1887032.489,\n    },\n    {\n      id: \"384\",\n      sim_name: \"CIV\",\n      name: \"Cote d'Ivoire\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77750.0467,\n      weight: 254222.8878,\n    },\n    {\n      id: \"388\",\n      sim_name: \"JAM\",\n      name: \"Jamaica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6751.46461,\n      weight: 12484.22296,\n    },\n    {\n      id: \"392\",\n      sim_name: \"JPN\",\n      name: \"Japan\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 189561.3237,\n      weight: 359553.4615,\n    },\n    {\n      id: \"398\",\n      sim_name: \"KAZ\",\n      name: \"Kazakhstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2535465.094,\n      weight: 10562777.14,\n    },\n    {\n      id: \"400\",\n      sim_name: \"JOR\",\n      name: \"Jordan\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2022.699859,\n      weight: 1810.995193,\n    },\n    {\n      id: \"404\",\n      sim_name: \"KEN\",\n      name: \"Kenya\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31813.863,\n      weight: 84144.582,\n    },\n    {\n      id: \"414\",\n      sim_name: \"KWT\",\n      name: \"Kuwait\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28509.72,\n      weight: 41425.612,\n    },\n    {\n      id: \"417\",\n      sim_name: \"KGZ\",\n      name: \"Kyrgyzstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 344.2343218,\n      weight: 452.0188439,\n    },\n    {\n      id: \"418\",\n      sim_name: \"LAO\",\n      name: \"Lao PDR\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 58500.6357,\n      weight: 212304.4463,\n    },\n    {\n      id: \"422\",\n      sim_name: \"LBN\",\n      name: \"Lebanon\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16263.18003,\n      weight: 38974.77174,\n    },\n    {\n      id: \"426\",\n      sim_name: \"LSO\",\n      name: \"Lesotho\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 19865.12276,\n      weight: 54350.43934,\n    },\n    {\n      id: \"428\",\n      sim_name: \"LVA\",\n      name: \"Latvia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 516410.4254,\n      weight: 1643243.015,\n    },\n    {\n      id: \"430\",\n      sim_name: \"LBR\",\n      name: \"Liberia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.35,\n      weight: 53.471,\n    },\n    {\n      id: \"434\",\n      sim_name: \"LBY\",\n      name: \"Libya\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 634.239,\n      weight: 2102.142,\n    },\n    {\n      id: \"440\",\n      sim_name: \"LTU\",\n      name: \"Lithuania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 871039.5602,\n      weight: 2446114.811,\n    },\n    {\n      id: \"442\",\n      sim_name: \"LUX\",\n      name: \"Luxembourg\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68969.99793,\n      weight: 178380.981,\n    },\n    {\n      id: \"450\",\n      sim_name: \"MDG\",\n      name: \"Madagascar\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 950.8530206,\n      weight: 3780.89311,\n    },\n    {\n      id: \"454\",\n      sim_name: \"MWI\",\n      name: \"Malawi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11553.98159,\n      weight: 41269.33681,\n    },\n    {\n      id: \"458\",\n      sim_name: \"MYS\",\n      name: \"Malaysia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 99255.71471,\n      weight: 142965.3262,\n    },\n    {\n      id: \"462\",\n      sim_name: \"MDV\",\n      name: \"Maldives\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.448,\n      weight: 14.6,\n    },\n    {\n      id: \"466\",\n      sim_name: \"MLI\",\n      name: \"Mali\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3143.270747,\n      weight: 11121.96188,\n    },\n    {\n      id: \"470\",\n      sim_name: \"MLT\",\n      name: \"Malta\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 35991.55686,\n      weight: 94799.54871,\n    },\n    {\n      id: \"478\",\n      sim_name: \"MRT\",\n      name: \"Mauritania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 292.538,\n      weight: 627.637,\n    },\n    {\n      id: \"480\",\n      sim_name: \"MUS\",\n      name: \"Mauritius\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17602.67917,\n      weight: 36755.35938,\n    },\n    {\n      id: \"484\",\n      sim_name: \"MEX\",\n      name: \"Mexico\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 571803.2432,\n      weight: 1234860.795,\n    },\n    {\n      id: \"496\",\n      sim_name: \"MNG\",\n      name: \"Mongolia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1328.368,\n      weight: 10672.694,\n    },\n    {\n      id: \"498\",\n      sim_name: \"MDA\",\n      name: \"Moldova\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 59072.0085,\n      weight: 188178.1824,\n    },\n    {\n      id: \"499\",\n      sim_name: \"MNE\",\n      name: \"Montenegro\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2444.455322,\n      weight: 6125.451,\n    },\n    {\n      id: \"504\",\n      sim_name: \"MAR\",\n      name: \"Morocco\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 86884.06321,\n      weight: 161631.8094,\n    },\n    {\n      id: \"508\",\n      sim_name: \"MOZ\",\n      name: \"Mozambique\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68388.81722,\n      weight: 146520.864,\n    },\n    {\n      id: \"512\",\n      sim_name: \"OMN\",\n      name: \"Oman\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 55530.66234,\n      weight: 88434.23327,\n    },\n    {\n      id: \"516\",\n      sim_name: \"NAM\",\n      name: \"Namibia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5168.27047,\n      weight: 7877.053106,\n    },\n    {\n      id: \"524\",\n      sim_name: \"NPL\",\n      name: \"Nepal\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4032.41279,\n      weight: 17770.75769,\n    },\n    {\n      id: \"528\",\n      sim_name: \"NLD\",\n      name: \"Netherlands\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1424347.018,\n      weight: 3125730.04,\n    },\n    {\n      id: \"531\",\n      sim_name: \"CUW\",\n      name: \"Curacao\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 535.691,\n      weight: 2358.613,\n    },\n    {\n      id: \"533\",\n      sim_name: \"ABW\",\n      name: \"Aruba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178879.593,\n      weight: 560431.967,\n    },\n    {\n      id: \"540\",\n      sim_name: \"NCL\",\n      name: \"New Caledonia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 205.777282,\n      weight: 363.439991,\n    },\n    {\n      id: \"548\",\n      sim_name: \"VUT\",\n      name: \"Vanuatu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 160.463,\n      weight: 440.332,\n    },\n    {\n      id: \"554\",\n      sim_name: \"NZL\",\n      name: \"New Zealand\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 33994.85867,\n      weight: 35177.57975,\n    },\n    {\n      id: \"558\",\n      sim_name: \"NIC\",\n      name: \"Nicaragua\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 41294.65615,\n      weight: 85186.87824,\n    },\n    {\n      id: \"562\",\n      sim_name: \"NER\",\n      name: \"Niger\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31152.35763,\n      weight: 44518.07202,\n    },\n    {\n      id: \"566\",\n      sim_name: \"NGA\",\n      name: \"Nigeria\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 323839.5301,\n      weight: 192057.843,\n    },\n    {\n      id: \"579\",\n      sim_name: \"NOR\",\n      name: \"Norway\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2382.344541,\n      weight: 2488.51136,\n    },\n    {\n      id: \"580\",\n      sim_name: \"MNP\",\n      name: \"N. Mariana Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.144,\n      weight: 1.864,\n    },\n    {\n      id: \"581\",\n      sim_name: \"UMI\",\n      name: \"United States Minor Outlying Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.008,\n      weight: 21,\n    },\n    {\n      id: \"585\",\n      sim_name: \"PLW\",\n      name: \"Palau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2.151,\n      weight: 0.22,\n    },\n    {\n      id: \"586\",\n      sim_name: \"PAK\",\n      name: \"Pakistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2412673.261,\n      weight: 4864111.072,\n    },\n    {\n      id: \"591\",\n      sim_name: \"PAN\",\n      name: \"Panama\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10056.54107,\n      weight: 26993.1125,\n    },\n    {\n      id: \"598\",\n      sim_name: \"PNG\",\n      name: \"Papua New Guinea\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 319.374,\n      weight: 2210.48,\n    },\n    {\n      id: \"600\",\n      sim_name: \"PRY\",\n      name: \"Paraguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1009228.641,\n      weight: 3862696.891,\n    },\n    {\n      id: \"604\",\n      sim_name: \"PER\",\n      name: \"Peru\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 91326.10676,\n      weight: 128637.0767,\n    },\n    {\n      id: \"608\",\n      sim_name: \"PHL\",\n      name: \"Philippines\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12041.64316,\n      weight: 16205.94695,\n    },\n    {\n      id: \"616\",\n      sim_name: \"POL\",\n      name: \"Poland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1028089.751,\n      weight: 3186360.963,\n    },\n    {\n      id: \"620\",\n      sim_name: \"PRT\",\n      name: \"Portugal\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92543.15766,\n      weight: 192795.3179,\n    },\n    {\n      id: \"624\",\n      sim_name: \"GNB\",\n      name: \"Guinea-Bissau\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37.268,\n      weight: 135,\n    },\n    {\n      id: \"626\",\n      sim_name: \"TLS\",\n      name: \"Timor-Leste\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.551,\n      weight: 10.883,\n    },\n    {\n      id: \"634\",\n      sim_name: \"QAT\",\n      name: \"Qatar\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6936.324,\n      weight: 11122.252,\n    },\n    {\n      id: \"642\",\n      sim_name: \"ROU\",\n      name: \"Romania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1778677.092,\n      weight: 5301402.18,\n    },\n    {\n      id: \"643\",\n      sim_name: \"RUS\",\n      name: \"Russian Federation\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7440900.086,\n      weight: 23852343.49,\n    },\n    {\n      id: \"646\",\n      sim_name: \"RWA\",\n      name: \"Rwanda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37520.31393,\n      weight: 73367.60768,\n    },\n    {\n      id: \"659\",\n      sim_name: \"KNA\",\n      name: \"Saint Kitts and Nevis\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.062,\n      weight: 0.009,\n    },\n    {\n      id: \"662\",\n      sim_name: \"LCA\",\n      name: \"Saint Lucia\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"670\",\n      sim_name: \"VCT\",\n      name: \"Saint Vincent and the Grenadines\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16002.19104,\n      weight: 17977.52343,\n    },\n    {\n      id: \"674\",\n      sim_name: \"SMR\",\n      name: \"San Marino\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"682\",\n      sim_name: \"SAU\",\n      name: \"Saudi Arabia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92568.76043,\n      weight: 56036.2484,\n    },\n    {\n      id: \"686\",\n      sim_name: \"SEN\",\n      name: \"Senegal\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44740.28095,\n      weight: 98109.85876,\n    },\n    {\n      id: \"688\",\n      sim_name: \"SRB\",\n      name: \"Serbia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 907006.831,\n      weight: 3003936.426,\n    },\n    {\n      id: \"690\",\n      sim_name: \"SYC\",\n      name: \"Seychelles\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 387.548,\n      weight: 246.84,\n    },\n    {\n      id: \"694\",\n      sim_name: \"SLE\",\n      name: \"Sierra Leone\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 147.544,\n      weight: 705.466,\n    },\n    {\n      id: \"699\",\n      sim_name: \"IND\",\n      name: \"India\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 9062980.928,\n      weight: 19031680.14,\n    },\n    {\n      id: \"702\",\n      sim_name: \"SGP\",\n      name: \"Singapore\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 193120.3466,\n      weight: 470488.3668,\n    },\n    {\n      id: \"703\",\n      sim_name: \"SVK\",\n      name: \"Slovakia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 580789.4685,\n      weight: 1589777.797,\n    },\n    {\n      id: \"704\",\n      sim_name: \"VNM\",\n      name: \"Vietnam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3558044.517,\n      weight: 7381230.275,\n    },\n    {\n      id: \"705\",\n      sim_name: \"SVN\",\n      name: \"Slovenia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 75282.28683,\n      weight: 227283.1873,\n    },\n    {\n      id: \"706\",\n      sim_name: \"SOM\",\n      name: \"Somalia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 240.399,\n      weight: 1055,\n    },\n    {\n      id: \"710\",\n      sim_name: \"ZAF\",\n      name: \"South Africa\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 938907.5758,\n      weight: 2190384.881,\n    },\n    {\n      id: \"716\",\n      sim_name: \"ZWE\",\n      name: \"Zimbabwe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6067.581387,\n      weight: 21394.92603,\n    },\n    {\n      id: \"724\",\n      sim_name: \"ESP\",\n      name: \"Spain\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 906018.1944,\n      weight: 1602797.031,\n    },\n    {\n      id: \"729\",\n      sim_name: \"SDN\",\n      name: \"Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18327.14063,\n      weight: 66310.50556,\n    },\n    {\n      id: \"740\",\n      sim_name: \"SUR\",\n      name: \"Suriname\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73211.6794,\n      weight: 83933.84802,\n    },\n    {\n      id: \"748\",\n      sim_name: \"SWZ\",\n      name: \"Swaziland\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6674.46,\n      weight: 16386.136,\n    },\n    {\n      id: \"752\",\n      sim_name: \"SWE\",\n      name: \"Sweden\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 439154.313,\n      weight: 1207272.863,\n    },\n    {\n      id: \"757\",\n      sim_name: \"CHE\",\n      name: \"Switzerland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 492516.8323,\n      weight: 1581172.074,\n    },\n    {\n      id: \"760\",\n      sim_name: \"SYR\",\n      name: \"Syria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4169.742,\n      weight: 7890.447,\n    },\n    {\n      id: \"762\",\n      sim_name: \"TJK\",\n      name: \"Tajikistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 300.162,\n      weight: 712.396,\n    },\n    {\n      id: \"764\",\n      sim_name: \"THA\",\n      name: \"Thailand\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5003324.321,\n      weight: 6926962.31,\n    },\n    {\n      id: \"768\",\n      sim_name: \"TGO\",\n      name: \"Togo\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16809.12488,\n      weight: 43975.34784,\n    },\n    {\n      id: \"772\",\n      sim_name: \"TKL\",\n      name: \"Tokelau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1012.213,\n      weight: 1926.401,\n    },\n    {\n      id: \"776\",\n      sim_name: \"TON\",\n      name: \"Tonga\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.18,\n      weight: 0.011,\n    },\n    {\n      id: \"780\",\n      sim_name: \"TTO\",\n      name: \"Trinidad and Tobago\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5731.199288,\n      weight: 9463.821332,\n    },\n    {\n      id: \"784\",\n      sim_name: \"ARE\",\n      name: \"United Arab Emirates\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 442646.1236,\n      weight: 684603.6345,\n    },\n    {\n      id: \"788\",\n      sim_name: \"TUN\",\n      name: \"Tunisia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 202627.2087,\n      weight: 121296.0689,\n    },\n    {\n      id: \"792\",\n      sim_name: \"TUR\",\n      name: \"Turkey\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1205009.52,\n      weight: 2692733.392,\n    },\n    {\n      id: \"795\",\n      sim_name: \"TKM\",\n      name: \"Turkmenistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1020.566,\n      weight: 3442.938,\n    },\n    {\n      id: \"796\",\n      sim_name: \"TCA\",\n      name: \"Turks and Caicos Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1029.474,\n      weight: 2224.885,\n    },\n    {\n      id: \"800\",\n      sim_name: \"UGA\",\n      name: \"Uganda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 153220.9856,\n      weight: 467968.0664,\n    },\n    {\n      id: \"804\",\n      sim_name: \"UKR\",\n      name: \"Ukraine\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8444175.988,\n      weight: 29508635.03,\n    },\n    {\n      id: \"818\",\n      sim_name: \"EGY\",\n      name: \"Egypt\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178849.3005,\n      weight: 310332.3386,\n    },\n    {\n      id: \"826\",\n      sim_name: \"GBR\",\n      name: \"United Kingdom\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1224264.681,\n      weight: 3079070.328,\n    },\n    {\n      id: \"834\",\n      sim_name: \"TZA\",\n      name: \"Tanzania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 152688.2977,\n      weight: 493774.3125,\n    },\n    {\n      id: \"838\",\n      sim_name: \"\",\n      name: \"Free Zones\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1488.719,\n      weight: 4904.648,\n    },\n    {\n      id: \"842\",\n      sim_name: \"USA\",\n      name: \"United States\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23694720.38,\n      weight: 66623810.06,\n    },\n    {\n      id: \"854\",\n      sim_name: \"BFA\",\n      name: \"Burkina Faso\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3861.072093,\n      weight: 17132.42303,\n    },\n    {\n      id: \"858\",\n      sim_name: \"URY\",\n      name: \"Uruguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1550881.026,\n      weight: 4155101.445,\n    },\n    {\n      id: \"860\",\n      sim_name: \"UZB\",\n      name: \"Uzbekistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2094.579,\n      weight: 7229.088,\n    },\n    {\n      id: \"862\",\n      sim_name: \"VEN\",\n      name: \"Venezuela\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73.53,\n      weight: 91.675,\n    },\n    {\n      id: \"882\",\n      sim_name: \"WSM\",\n      name: \"Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.603,\n      weight: 6.415,\n    },\n    {\n      id: \"887\",\n      sim_name: \"YEM\",\n      name: \"Yemen\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48184.79726,\n      weight: 245917.1867,\n    },\n    {\n      id: \"894\",\n      sim_name: \"ZMB\",\n      name: \"Zambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 470664.7641,\n      weight: 863829.2506,\n    },\n    {\n      id: \"86\",\n      sim_name: \"IOT\",\n      name: \"British Indian Ocean Territory\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 36.802,\n      weight: 21.33,\n    },\n    {\n      id: \"136\",\n      sim_name: \"CYM\",\n      name: \"Cayman Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"148\",\n      sim_name: \"TCD\",\n      name: \"Chad\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 24.335,\n      weight: 103.232,\n    },\n    {\n      id: \"166\",\n      sim_name: \"CCK\",\n      name: \"Cocos Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 2.417,\n      weight: 2,\n    },\n    {\n      id: \"174\",\n      sim_name: \"COM\",\n      name: \"Comoros\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 19,\n      weight: 21,\n    },\n    {\n      id: \"226\",\n      sim_name: \"GNQ\",\n      name: \"Equatorial Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"232\",\n      sim_name: \"ERI\",\n      name: \"Eritrea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"238\",\n      sim_name: \"FLK\",\n      name: \"Falkland Isds (Malvinas)\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 177.295,\n      weight: 47.1,\n    },\n    {\n      id: \"258\",\n      sim_name: \"PYF\",\n      name: \"French Polynesia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 1.65,\n      weight: 0.6,\n    },\n    {\n      id: \"534\",\n      sim_name: \"SXM\",\n      name: \"Sint Maarten (Dutch part)\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"584\",\n      sim_name: \"MHL\",\n      name: \"Marshall Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 47.581,\n      weight: 26.942,\n    },\n    {\n      id: \"612\",\n      sim_name: \"PCN\",\n      name: \"Pitcairn\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 95.892,\n      weight: 265,\n    },\n    {\n      id: \"728\",\n      sim_name: \"SSD\",\n      name: \"South Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"798\",\n      sim_name: \"TUV\",\n      name: \"Tuvalu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"184\",\n      sim_name: \"COK\",\n      name: \"Cook Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"654\",\n      sim_name: \"SHN\",\n      name: \"Saint Helena\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"660\",\n      sim_name: \"AIA\",\n      name: \"Anguilla\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"678\",\n      sim_name: \"STP\",\n      name: \"Sao Tome and Principe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 198.633,\n      weight: 350,\n    },\n    {\n      id: \"837\",\n      sim_name: \"\",\n      name: \"Bunkers\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"732\",\n      sim_name: \"ESH\",\n      name: \"Western Sahara\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2015,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"666\",\n      sim_name: \"SPM\",\n      name: \"Saint Pierre and Miquelon\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2016,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"162\",\n      sim_name: \"CXR\",\n      name: \"Christmas Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 131.818,\n      weight: 99.95,\n    },\n    {\n      id: \"336\",\n      sim_name: \"VAT\",\n      name: \"Holy See\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 24.492,\n      weight: 42.805,\n    },\n    {\n      id: \"520\",\n      sim_name: \"NRU\",\n      name: \"Nauru\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 496.386,\n      weight: 457.721,\n    },\n    {\n      id: \"535\",\n      sim_name: \"BES\",\n      name: \"Bonaire\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 326.45,\n      weight: 551.554,\n    },\n  ],\n  edges: [\n    {\n      eid: \"e9639\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"7.992\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9640\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"291.645\",\n      weight: \"223.789\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9641\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"406.568\",\n      weight: \"326.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9642\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9670\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"249.898\",\n      weight: \"235.45\",\n      embodiedLand: \"59.656\",\n      embodiedWater: \"250.99\",\n    },\n    {\n      eid: \"e9671\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9672\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"49.652\",\n      weight: \"10\",\n      embodiedLand: \"15.749\",\n      embodiedWater: \"1.39\",\n    },\n    {\n      eid: \"e9673\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e9674\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"262.679\",\n      weight: \"424.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9675\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9676\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e9677\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.583\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9678\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.8\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9679\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9680\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"108.245803\",\n      weight: \"74.0433696\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9681\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.073\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9682\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.04989606\",\n      weight: \"0.08321444\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9683\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9847\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.162\",\n      weight: \"49.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9848\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.104\",\n      weight: \"0.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9849\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"71.418\",\n      weight: \"180\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9850\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.3543178\",\n      weight: \"71.6911179\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9851\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9852\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9853\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.199\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9856\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9857\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9889\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.333\",\n      weight: \"0.31\",\n      embodiedLand: \"0.02\",\n      embodiedWater: \"11.447\",\n    },\n    {\n      eid: \"e9890\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.181\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9891\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"20.076\",\n      weight: \"40\",\n      embodiedLand: \"69.334\",\n      embodiedWater: \"202.56\",\n    },\n    {\n      eid: \"e9892\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.5\",\n      weight: \"5\",\n      embodiedLand: \"5.013\",\n      embodiedWater: \"44.535\",\n    },\n    {\n      eid: \"e9893\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9894\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9895\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.333\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9896\",\n      source: \"732\",\n      sourceSimName: \"ESH\",\n      sourceRegion: \"Western Sahara\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9934\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"48.174\",\n      weight: \"340.23\",\n      embodiedLand: \"96.561\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9935\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9936\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.141\",\n      weight: \"0.09\",\n      embodiedLand: \"0.034\",\n      embodiedWater: \"0.65\",\n    },\n    {\n      eid: \"e9937\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.15\",\n      embodiedLand: \"0.054\",\n      embodiedWater: \"1.152\",\n    },\n    {\n      eid: \"e9938\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.08\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9939\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"59.563\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9940\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"486\",\n      weight: \"1800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9941\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9942\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2459.276\",\n      weight: \"7800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9943\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.296\",\n      weight: \"45.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9944\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"86.553\",\n      weight: \"168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9945\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"126\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9946\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.625\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9947\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.8\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9960\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.105\",\n      weight: \"26\",\n      embodiedLand: \"14.55\",\n      embodiedWater: \"11.804\",\n    },\n    {\n      eid: \"e9961\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.963\",\n      weight: \"1.128\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9962\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.042\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9963\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.022\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9964\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"136.368\",\n      weight: \"352.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10072\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"321.247599\",\n      weight: \"594.892627\",\n      embodiedLand: \"157.689777\",\n      embodiedWater: \"218.325999\",\n    },\n    {\n      eid: \"e10073\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.166\",\n      weight: \"0.461\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10074\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.097\",\n      weight: \"6.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10075\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.949\",\n      weight: \"1\",\n      embodiedLand: \"1.187\",\n      embodiedWater: \"5.89\",\n    },\n    {\n      eid: \"e10076\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"293.17\",\n      weight: \"713\",\n      embodiedLand: \"176.112\",\n      embodiedWater: \"7.843\",\n    },\n    {\n      eid: \"e10077\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.593\",\n      weight: \"0.373\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10078\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.542\",\n      weight: \"7.661\",\n      embodiedLand: \"2.193\",\n      embodiedWater: \"28.537\",\n    },\n    {\n      eid: \"e10079\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"7903.00956\",\n      weight: \"26948.6797\",\n      embodiedLand: \"6860.2467\",\n      embodiedWater: \"1077.94733\",\n    },\n    {\n      eid: \"e10080\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.537\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10081\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10082\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2650.321\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10083\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10084\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.659\",\n      weight: \"2.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10085\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"525.239248\",\n      weight: \"1150.87085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10086\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"776.713\",\n      weight: \"2078\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10198\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10199\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10200\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10201\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.103\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10202\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"897.592\",\n      weight: \"1303.4\",\n      embodiedLand: \"445.321\",\n      embodiedWater: \"21745.926\",\n    },\n    {\n      eid: \"e10203\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.004\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10204\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e10205\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4511.886\",\n      weight: \"18900\",\n      embodiedLand: \"3534.409\",\n      embodiedWater: \"62181\",\n    },\n    {\n      eid: \"e10206\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10207\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"70.534\",\n      weight: \"150.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10208\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"6.519\",\n      weight: \"6.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10209\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.173\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10210\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10211\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10212\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.429\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10213\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"389.737\",\n      weight: \"477.087\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10214\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.041\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10215\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.1431594\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10245\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.064\",\n      weight: \"0.107\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10246\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.032\",\n      weight: \"0.21\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.014\",\n    },\n    {\n      eid: \"e10247\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10248\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8862.493\",\n      weight: \"24861.286\",\n      embodiedLand: \"1247.997\",\n      embodiedWater: \"1864.596\",\n    },\n    {\n      eid: \"e10250\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.791\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10251\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10252\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.045\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10253\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.034\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10254\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10255\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.895\",\n      weight: \"1.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10264\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"89.465\",\n      weight: \"296.215\",\n      embodiedLand: \"159.202\",\n      embodiedWater: \"74.646\",\n    },\n    {\n      eid: \"e10265\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10461\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"212\",\n      targetSimName: \"DMA\",\n      targetName: \"Dominica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"9.736\",\n      weight: \"25.006\",\n      embodiedLand: \"10.644\",\n      embodiedWater: \"105.225\",\n    },\n    {\n      eid: \"e10462\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"234\",\n      targetSimName: \"FRO\",\n      targetName: \"Faeroe Isds\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.136\",\n      weight: \"0.315\",\n      embodiedLand: \"0.178\",\n      embodiedWater: \"2.462\",\n    },\n    {\n      eid: \"e10464\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.01\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.091\",\n    },\n    {\n      eid: \"e10465\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.484\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10495\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.112\",\n      weight: \"7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10496\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.283\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10497\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5\",\n      weight: \"18.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10498\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.60547527\",\n      weight: \"2.45939658\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10499\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"17.2519049\",\n      weight: \"115.598246\",\n      embodiedLand: \"99.7718139\",\n      embodiedWater: \"58.6084014\",\n    },\n    {\n      eid: \"e10500\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.00827273\",\n    },\n    {\n      eid: \"e10501\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10502\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.981\",\n      weight: \"1.027\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10509\",\n      source: \"772\",\n      sourceSimName: \"TKL\",\n      sourceRegion: \"Tokelau\",\n      sourceName: \"Oceania\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10517\",\n      source: \"776\",\n      sourceSimName: \"TON\",\n      sourceRegion: \"Tonga\",\n      sourceName: \"Oceania\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.113\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10554\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10555\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10556\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10557\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10558\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10559\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10560\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10561\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10562\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10563\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10564\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10565\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10566\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10703\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10704\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10705\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10706\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10707\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.831\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10708\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10709\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.154\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10778\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.737\",\n      weight: \"1.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10779\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.415\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10780\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10781\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"8.223\",\n      weight: \"9.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10782\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4.469\",\n      weight: \"2.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10783\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.389\",\n      weight: \"16.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10784\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.163\",\n      weight: \"19.327\",\n      embodiedLand: \"4.211\",\n      embodiedWater: \"62.813\",\n    },\n    {\n      eid: \"e10785\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"17.492\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10786\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6.28513636\",\n      weight: \"4.23263329\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10787\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10788\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.276\",\n      weight: \"0.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10789\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"46.053\",\n      weight: \"107.5\",\n      embodiedLand: \"2.563\",\n      embodiedWater: \"48.805\",\n    },\n    {\n      eid: \"e10790\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.516\",\n      weight: \"20.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10791\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.274\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10792\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"401.922618\",\n      weight: \"985.504812\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10793\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.042\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10794\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"33.233\",\n      weight: \"41.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10795\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"388.489\",\n      weight: \"300\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10976\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10977\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14.0119386\",\n      weight: \"26.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10978\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.708\",\n      weight: \"233.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10979\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.198\",\n      weight: \"0.714\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10990\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"372.658\",\n      weight: \"1562.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10991\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.407\",\n      weight: \"2.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11003\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.403\",\n      weight: \"24.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11004\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"8.714\",\n      weight: \"21.576\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11049\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11050\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.754\",\n      weight: \"16\",\n      embodiedLand: \"4.518\",\n      embodiedWater: \"69.808\",\n    },\n    {\n      eid: \"e11051\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"8.335\",\n      weight: \"22.5\",\n      embodiedLand: \"10.227\",\n      embodiedWater: \"9.923\",\n    },\n    {\n      eid: \"e11052\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.018\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11053\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.263\",\n      weight: \"0.139\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11054\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.216\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11209\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"24.476\",\n      weight: \"20.587\",\n      embodiedLand: \"11.055\",\n      embodiedWater: \"57.644\",\n    },\n    {\n      eid: \"e11210\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"184\",\n      targetSimName: \"COK\",\n      targetName: \"Cook Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11211\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2451.982731\",\n      weight: \"16689\",\n      embodiedLand: \"2800.015\",\n      embodiedWater: \"84513.096\",\n    },\n    {\n      eid: \"e11212\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11213\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4890.88387\",\n      weight: \"20013.8008\",\n      embodiedLand: \"5001.53453\",\n      embodiedWater: \"32702.5506\",\n    },\n    {\n      eid: \"e11214\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7378.521\",\n      weight: \"27210.945\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11215\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11216\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1486.932\",\n      weight: \"4224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11217\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"6.555\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11218\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25906197\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11219\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1683.6727\",\n      weight: \"6988.48925\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11220\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11221\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11222\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.801\",\n      weight: \"190.825\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11223\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1725.40859\",\n      weight: \"3353.20792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11224\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"29.675\",\n      weight: \"111.862\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11225\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11336\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11337\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11338\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.243\",\n      weight: \"46.01\",\n      embodiedLand: \"10.002\",\n      embodiedWater: \"579.542\",\n    },\n    {\n      eid: \"e11339\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"97.433\",\n      weight: \"247.995\",\n      embodiedLand: \"119.179\",\n      embodiedWater: \"1537.817\",\n    },\n    {\n      eid: \"e11340\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"41.094\",\n      weight: \"88.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11341\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11342\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.135\",\n      weight: \"4.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11343\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.369\",\n      weight: \"0.63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11344\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"140.284\",\n      weight: \"337.113\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11345\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.159\",\n      weight: \"0.854\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11346\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"114.727\",\n      weight: \"85.648\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11347\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"23.162\",\n      weight: \"30.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11348\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.07\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11522\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"125.184\",\n      weight: \"45.6\",\n      embodiedLand: \"9.628\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11523\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11524\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11525\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.981\",\n      weight: \"0.98\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11526\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"3.556\",\n      weight: \"3.554\",\n      embodiedLand: \"0.914\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11527\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.147\",\n      weight: \"0.138\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11528\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.13\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11529\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11580\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.405\",\n      weight: \"23.6\",\n      embodiedLand: \"54.414\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11581\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"113.617\",\n      weight: \"655.96\",\n      embodiedLand: \"650.261\",\n      embodiedWater: \"1034.449\",\n    },\n    {\n      eid: \"e11582\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.097\",\n      weight: \"40\",\n      embodiedLand: \"27.575\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11583\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.054\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.463\",\n    },\n    {\n      eid: \"e11584\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.152\",\n      weight: \"40.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11585\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11586\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.563\",\n      weight: \"14.38\",\n      embodiedLand: \"9.575\",\n      embodiedWater: \"9.707\",\n    },\n    {\n      eid: \"e11587\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.496\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11588\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.863\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11589\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.13198458\",\n      weight: \"5.40716181\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11591\",\n      source: \"837\",\n      sourceSimName: \"\",\n      sourceRegion: \"Bunkers\",\n      sourceName: \"Other\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11597\",\n      source: \"838\",\n      sourceSimName: \"\",\n      sourceRegion: \"Free Zones\",\n      sourceName: \"Other\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.009\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11798\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"6.137\",\n      weight: \"1.878\",\n      embodiedLand: \"0.36\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11799\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"9.639\",\n      weight: \"19.875\",\n      embodiedLand: \"11.311\",\n      embodiedWater: \"1.848\",\n    },\n    {\n      eid: \"e11800\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.64\",\n      weight: \"20.752\",\n      embodiedLand: \"2.723\",\n      embodiedWater: \"10.999\",\n    },\n    {\n      eid: \"e11801\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"72.797\",\n      weight: \"82.805\",\n      embodiedLand: \"8.475\",\n      embodiedWater: \"106.818\",\n    },\n    {\n      eid: \"e11802\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"752.606\",\n      weight: \"2216.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11824\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.785\",\n      weight: \"69\",\n      embodiedLand: \"0.615\",\n      embodiedWater: \"8.901\",\n    },\n    {\n      eid: \"e11825\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"43.6395248\",\n      weight: \"25.096\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11826\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"429.663\",\n      weight: \"250\",\n      embodiedLand: \"111.522\",\n      embodiedWater: \"2267.75\",\n    },\n    {\n      eid: \"e11827\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11828\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"109.987\",\n      weight: \"30\",\n      embodiedLand: \"16.331\",\n      embodiedWater: \"27.69\",\n    },\n    {\n      eid: \"e11829\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.487\",\n      weight: \"2.5\",\n      embodiedLand: \"1.554\",\n      embodiedWater: \"30.817\",\n    },\n    {\n      eid: \"e11830\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11951\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18298.88\",\n      weight: \"67086.608\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11952\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.537\",\n      weight: \"27.011\",\n      embodiedLand: \"11.171\",\n      embodiedWater: \"16.396\",\n    },\n    {\n      eid: \"e11953\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24935.4179\",\n      weight: \"104332.188\",\n      embodiedLand: \"47360.4095\",\n      embodiedWater: \"68441.9161\",\n    },\n    {\n      eid: \"e11954\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"96.16\",\n      weight: \"524.11\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11955\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"13.297\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11967\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24401.666\",\n      weight: \"75279.56\",\n      embodiedLand: \"28122.882\",\n      embodiedWater: \"36209.468\",\n    },\n    {\n      eid: \"e11968\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11996\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"174.23\",\n      weight: \"454.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11997\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11998\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.294\",\n      weight: \"4.58\",\n      embodiedLand: \"1.249\",\n      embodiedWater: \"1.53\",\n    },\n    {\n      eid: \"e11999\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.025\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12000\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.889\",\n      weight: \"21.609\",\n      embodiedLand: \"5.737\",\n      embodiedWater: \"157.097\",\n    },\n    {\n      eid: \"e12001\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.367\",\n      weight: \"1.583\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12002\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.467\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12003\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12004\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"22.327\",\n      weight: \"24.749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12012\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.455\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12013\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12043\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.578\",\n      weight: \"66\",\n      embodiedLand: \"38.092\",\n      embodiedWater: \"4450.248\",\n    },\n    {\n      eid: \"e12044\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12093\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.102\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12094\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"82.825\",\n      weight: \"18.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-force-clustering/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 力导向布局聚类\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        clustering: true,\n        clusterNodeStrength: -5,\n        clusterEdgeDistance: 200,\n        clusterNodeSize: 20,\n        clusterFociStrength: 1.2,\n        nodeSpacing: 5,\n        preventOverlap: true,\n      },\n      defaultNode: {\n        size: 15,\n      },\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n      },\n    });\n    const colorMap = {\n      2012: \"#BDD2FD\",\n      2013: \"#BDEFDB\",\n      2014: \"#F6C3B7\",\n      2015: \"#FFD8B8\",\n      2016: \"#D3C6EA\",\n    };\n\n    this.graph.data(data);\n    data.nodes.forEach((i) => {\n      i.cluster = i.year;\n      i.style = Object.assign(i.style || {}, {\n        fill: colorMap[i.year],\n      });\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-force-clustering/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"力导向布局聚类\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-force-clustering/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-force-clustering/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-functional-params/data.js",
    "content": "export default () => ({\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-functional-params/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 定制不同节点的参数\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        linkDistance: (d) => {\n          if (d.source.id === \"node0\") {\n            return 100;\n          }\n          return 30;\n        },\n        nodeStrength: (d) => {\n          if (d.isLeaf) {\n            return -50;\n          }\n          return -10;\n        },\n        edgeStrength: (d) => {\n          if (\n            d.source.id === \"node1\" ||\n            d.source.id === \"node2\" ||\n            d.source.id === \"node3\"\n          ) {\n            return 0.7;\n          }\n          return 0.1;\n        },\n      },\n      defaultNode: {\n        color: \"#5B8FF9\",\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    const { nodes } = data;\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", (e) => {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-functional-params/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"定制不同节点的参数\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-functional-params/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-functional-params/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-prevent-overlap/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-prevent-overlap/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 力导向布局防止节点重叠\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n    });\n\n    function refreshDragedNodePosition(e) {\n      const model = e.item.get(\"model\");\n      model.fx = e.x;\n      model.fy = e.y;\n    }\n\n    const { nodes } = data;\n    // randomize the node size\n    nodes.forEach((node) => {\n      node.size = Math.random() * 30 + 5;\n    });\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n\n    this.graph.on(\"node:dragstart\", function (e) {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", function (e) {\n      const forceLayout = this.graph.get(\"layoutController\").layoutMethods[0];\n      forceLayout.execute();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", (e) => {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-prevent-overlap/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"力导向布局防止节点重叠\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-prevent-overlap/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/force-directed-prevent-overlap/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"a\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"a\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"a\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"a\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"a\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"a\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"a\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"a\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"a\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"a\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"a\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"a\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"a\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"b\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"b\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"b\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"b\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"b\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"c\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"c\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"c\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"c\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"c\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"c\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"c\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"c\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"c\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"c\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"c\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"c\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"c\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"d\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"d\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6-wx/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        gravity: 5,\n        speed: 5,\n        // for rendering after each iteration\n        tick: () => {\n          this.graph.refreshPositions();\n        },\n      },\n      animate: true,\n      defaultNode: {\n        size: 30,\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"基本Fruchterman\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-clustering/data.js",
    "content": "function getData() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n        cluster: \"a\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n        cluster: \"a\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n        cluster: \"a\",\n      },\n      {\n        id: \"3\",\n        label: \"3\",\n        cluster: \"a\",\n      },\n      {\n        id: \"4\",\n        label: \"4\",\n        cluster: \"a\",\n      },\n      {\n        id: \"5\",\n        label: \"5\",\n        cluster: \"a\",\n      },\n      {\n        id: \"6\",\n        label: \"6\",\n        cluster: \"a\",\n      },\n      {\n        id: \"7\",\n        label: \"7\",\n        cluster: \"a\",\n      },\n      {\n        id: \"8\",\n        label: \"8\",\n        cluster: \"a\",\n      },\n      {\n        id: \"9\",\n        label: \"9\",\n        cluster: \"a\",\n      },\n      {\n        id: \"10\",\n        label: \"10\",\n        cluster: \"a\",\n      },\n      {\n        id: \"11\",\n        label: \"11\",\n        cluster: \"a\",\n      },\n      {\n        id: \"12\",\n        label: \"12\",\n        cluster: \"a\",\n      },\n      {\n        id: \"13\",\n        label: \"13\",\n        cluster: \"b\",\n      },\n      {\n        id: \"14\",\n        label: \"14\",\n        cluster: \"b\",\n      },\n      {\n        id: \"15\",\n        label: \"15\",\n        cluster: \"b\",\n      },\n      {\n        id: \"16\",\n        label: \"16\",\n        cluster: \"b\",\n      },\n      {\n        id: \"17\",\n        label: \"17\",\n        cluster: \"b\",\n      },\n      {\n        id: \"18\",\n        label: \"18\",\n        cluster: \"c\",\n      },\n      {\n        id: \"19\",\n        label: \"19\",\n        cluster: \"c\",\n      },\n      {\n        id: \"20\",\n        label: \"20\",\n        cluster: \"c\",\n      },\n      {\n        id: \"21\",\n        label: \"21\",\n        cluster: \"c\",\n      },\n      {\n        id: \"22\",\n        label: \"22\",\n        cluster: \"c\",\n      },\n      {\n        id: \"23\",\n        label: \"23\",\n        cluster: \"c\",\n      },\n      {\n        id: \"24\",\n        label: \"24\",\n        cluster: \"c\",\n      },\n      {\n        id: \"25\",\n        label: \"25\",\n        cluster: \"c\",\n      },\n      {\n        id: \"26\",\n        label: \"26\",\n        cluster: \"c\",\n      },\n      {\n        id: \"27\",\n        label: \"27\",\n        cluster: \"c\",\n      },\n      {\n        id: \"28\",\n        label: \"28\",\n        cluster: \"c\",\n      },\n      {\n        id: \"29\",\n        label: \"29\",\n        cluster: \"c\",\n      },\n      {\n        id: \"30\",\n        label: \"30\",\n        cluster: \"c\",\n      },\n      {\n        id: \"31\",\n        label: \"31\",\n        cluster: \"d\",\n      },\n      {\n        id: \"32\",\n        label: \"32\",\n        cluster: \"d\",\n      },\n      {\n        id: \"33\",\n        label: \"33\",\n        cluster: \"d\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n      {\n        source: \"0\",\n        target: \"3\",\n      },\n      {\n        source: \"0\",\n        target: \"4\",\n      },\n      {\n        source: \"0\",\n        target: \"5\",\n      },\n      {\n        source: \"0\",\n        target: \"7\",\n      },\n      {\n        source: \"0\",\n        target: \"8\",\n      },\n      {\n        source: \"0\",\n        target: \"9\",\n      },\n      {\n        source: \"0\",\n        target: \"10\",\n      },\n      {\n        source: \"0\",\n        target: \"11\",\n      },\n      {\n        source: \"0\",\n        target: \"13\",\n      },\n      {\n        source: \"0\",\n        target: \"14\",\n      },\n      {\n        source: \"0\",\n        target: \"15\",\n      },\n      {\n        source: \"0\",\n        target: \"16\",\n      },\n      {\n        source: \"2\",\n        target: \"3\",\n      },\n      {\n        source: \"4\",\n        target: \"5\",\n      },\n      {\n        source: \"4\",\n        target: \"6\",\n      },\n      {\n        source: \"5\",\n        target: \"6\",\n      },\n      {\n        source: \"7\",\n        target: \"13\",\n      },\n      {\n        source: \"8\",\n        target: \"14\",\n      },\n      {\n        source: \"9\",\n        target: \"10\",\n      },\n      {\n        source: \"10\",\n        target: \"22\",\n      },\n      {\n        source: \"10\",\n        target: \"14\",\n      },\n      {\n        source: \"10\",\n        target: \"12\",\n      },\n      {\n        source: \"10\",\n        target: \"24\",\n      },\n      {\n        source: \"10\",\n        target: \"21\",\n      },\n      {\n        source: \"10\",\n        target: \"20\",\n      },\n      {\n        source: \"11\",\n        target: \"24\",\n      },\n      {\n        source: \"11\",\n        target: \"22\",\n      },\n      {\n        source: \"11\",\n        target: \"14\",\n      },\n      {\n        source: \"12\",\n        target: \"13\",\n      },\n      {\n        source: \"16\",\n        target: \"17\",\n      },\n      {\n        source: \"16\",\n        target: \"18\",\n      },\n      {\n        source: \"16\",\n        target: \"21\",\n      },\n      {\n        source: \"16\",\n        target: \"22\",\n      },\n      {\n        source: \"17\",\n        target: \"18\",\n      },\n      {\n        source: \"17\",\n        target: \"20\",\n      },\n      {\n        source: \"18\",\n        target: \"19\",\n      },\n      {\n        source: \"19\",\n        target: \"20\",\n      },\n      {\n        source: \"19\",\n        target: \"33\",\n      },\n      {\n        source: \"19\",\n        target: \"22\",\n      },\n      {\n        source: \"19\",\n        target: \"23\",\n      },\n      {\n        source: \"20\",\n        target: \"21\",\n      },\n      {\n        source: \"21\",\n        target: \"22\",\n      },\n      {\n        source: \"22\",\n        target: \"24\",\n      },\n      {\n        source: \"22\",\n        target: \"25\",\n      },\n      {\n        source: \"22\",\n        target: \"26\",\n      },\n      {\n        source: \"22\",\n        target: \"23\",\n      },\n      {\n        source: \"22\",\n        target: \"28\",\n      },\n      {\n        source: \"22\",\n        target: \"30\",\n      },\n      {\n        source: \"22\",\n        target: \"31\",\n      },\n      {\n        source: \"22\",\n        target: \"32\",\n      },\n      {\n        source: \"22\",\n        target: \"33\",\n      },\n      {\n        source: \"23\",\n        target: \"28\",\n      },\n      {\n        source: \"23\",\n        target: \"27\",\n      },\n      {\n        source: \"23\",\n        target: \"29\",\n      },\n      {\n        source: \"23\",\n        target: \"30\",\n      },\n      {\n        source: \"23\",\n        target: \"31\",\n      },\n      {\n        source: \"23\",\n        target: \"33\",\n      },\n      {\n        source: \"32\",\n        target: \"33\",\n      },\n    ],\n  };\n\n  const colors = [\n    \"#BDD2FD\",\n    \"#BDEFDB\",\n    \"#C2C8D5\",\n    \"#FBE5A2\",\n    \"#F6C3B7\",\n    \"#B6E3F5\",\n    \"#D3C6EA\",\n    \"#FFD8B8\",\n    \"#AAD8D8\",\n    \"#FFD6E7\",\n  ];\n  const strokes = [\n    \"#5B8FF9\",\n    \"#5AD8A6\",\n    \"#5D7092\",\n    \"#F6BD16\",\n    \"#E8684A\",\n    \"#6DC8EC\",\n    \"#9270CA\",\n    \"#FF9D4D\",\n    \"#269A99\",\n    \"#FF99C3\",\n  ];\n\n  const { nodes } = data;\n  const clusterMap = new Map();\n  let clusterId = 0;\n  nodes.forEach((node) => {\n    // cluster\n    if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n      clusterMap.set(node.cluster, clusterId);\n      clusterId++;\n    }\n    const cid = clusterMap.get(node.cluster);\n    if (!node.style) {\n      node.style = {};\n    }\n    node.style.fill = colors[cid % colors.length];\n    node.style.stroke = strokes[cid % strokes.length];\n  });\n  return data;\n}\n\nexport default getData;\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-clustering/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6-wx/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman 聚类布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        gravity: 10,\n        speed: 5,\n        clustering: true,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-clustering/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"Fruchterman聚类\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-clustering/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-clustering/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-configuration-translate/data.js",
    "content": "function getData() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n        cluster: \"a\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n        cluster: \"a\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n        cluster: \"a\",\n      },\n      {\n        id: \"3\",\n        label: \"3\",\n        cluster: \"a\",\n      },\n      {\n        id: \"4\",\n        label: \"4\",\n        cluster: \"a\",\n      },\n      {\n        id: \"5\",\n        label: \"5\",\n        cluster: \"a\",\n      },\n      {\n        id: \"6\",\n        label: \"6\",\n        cluster: \"a\",\n      },\n      {\n        id: \"7\",\n        label: \"7\",\n        cluster: \"a\",\n      },\n      {\n        id: \"8\",\n        label: \"8\",\n        cluster: \"a\",\n      },\n      {\n        id: \"9\",\n        label: \"9\",\n        cluster: \"a\",\n      },\n      {\n        id: \"10\",\n        label: \"10\",\n        cluster: \"a\",\n      },\n      {\n        id: \"11\",\n        label: \"11\",\n        cluster: \"a\",\n      },\n      {\n        id: \"12\",\n        label: \"12\",\n        cluster: \"a\",\n      },\n      {\n        id: \"13\",\n        label: \"13\",\n        cluster: \"b\",\n      },\n      {\n        id: \"14\",\n        label: \"14\",\n        cluster: \"b\",\n      },\n      {\n        id: \"15\",\n        label: \"15\",\n        cluster: \"b\",\n      },\n      {\n        id: \"16\",\n        label: \"16\",\n        cluster: \"b\",\n      },\n      {\n        id: \"17\",\n        label: \"17\",\n        cluster: \"b\",\n      },\n      {\n        id: \"18\",\n        label: \"18\",\n        cluster: \"c\",\n      },\n      {\n        id: \"19\",\n        label: \"19\",\n        cluster: \"c\",\n      },\n      {\n        id: \"20\",\n        label: \"20\",\n        cluster: \"c\",\n      },\n      {\n        id: \"21\",\n        label: \"21\",\n        cluster: \"c\",\n      },\n      {\n        id: \"22\",\n        label: \"22\",\n        cluster: \"c\",\n      },\n      {\n        id: \"23\",\n        label: \"23\",\n        cluster: \"c\",\n      },\n      {\n        id: \"24\",\n        label: \"24\",\n        cluster: \"c\",\n      },\n      {\n        id: \"25\",\n        label: \"25\",\n        cluster: \"c\",\n      },\n      {\n        id: \"26\",\n        label: \"26\",\n        cluster: \"c\",\n      },\n      {\n        id: \"27\",\n        label: \"27\",\n        cluster: \"c\",\n      },\n      {\n        id: \"28\",\n        label: \"28\",\n        cluster: \"c\",\n      },\n      {\n        id: \"29\",\n        label: \"29\",\n        cluster: \"c\",\n      },\n      {\n        id: \"30\",\n        label: \"30\",\n        cluster: \"c\",\n      },\n      {\n        id: \"31\",\n        label: \"31\",\n        cluster: \"d\",\n      },\n      {\n        id: \"32\",\n        label: \"32\",\n        cluster: \"d\",\n      },\n      {\n        id: \"33\",\n        label: \"33\",\n        cluster: \"d\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n      {\n        source: \"0\",\n        target: \"3\",\n      },\n      {\n        source: \"0\",\n        target: \"4\",\n      },\n      {\n        source: \"0\",\n        target: \"5\",\n      },\n      {\n        source: \"0\",\n        target: \"7\",\n      },\n      {\n        source: \"0\",\n        target: \"8\",\n      },\n      {\n        source: \"0\",\n        target: \"9\",\n      },\n      {\n        source: \"0\",\n        target: \"10\",\n      },\n      {\n        source: \"0\",\n        target: \"11\",\n      },\n      {\n        source: \"0\",\n        target: \"13\",\n      },\n      {\n        source: \"0\",\n        target: \"14\",\n      },\n      {\n        source: \"0\",\n        target: \"15\",\n      },\n      {\n        source: \"0\",\n        target: \"16\",\n      },\n      {\n        source: \"2\",\n        target: \"3\",\n      },\n      {\n        source: \"4\",\n        target: \"5\",\n      },\n      {\n        source: \"4\",\n        target: \"6\",\n      },\n      {\n        source: \"5\",\n        target: \"6\",\n      },\n      {\n        source: \"7\",\n        target: \"13\",\n      },\n      {\n        source: \"8\",\n        target: \"14\",\n      },\n      {\n        source: \"9\",\n        target: \"10\",\n      },\n      {\n        source: \"10\",\n        target: \"22\",\n      },\n      {\n        source: \"10\",\n        target: \"14\",\n      },\n      {\n        source: \"10\",\n        target: \"12\",\n      },\n      {\n        source: \"10\",\n        target: \"24\",\n      },\n      {\n        source: \"10\",\n        target: \"21\",\n      },\n      {\n        source: \"10\",\n        target: \"20\",\n      },\n      {\n        source: \"11\",\n        target: \"24\",\n      },\n      {\n        source: \"11\",\n        target: \"22\",\n      },\n      {\n        source: \"11\",\n        target: \"14\",\n      },\n      {\n        source: \"12\",\n        target: \"13\",\n      },\n      {\n        source: \"16\",\n        target: \"17\",\n      },\n      {\n        source: \"16\",\n        target: \"18\",\n      },\n      {\n        source: \"16\",\n        target: \"21\",\n      },\n      {\n        source: \"16\",\n        target: \"22\",\n      },\n      {\n        source: \"17\",\n        target: \"18\",\n      },\n      {\n        source: \"17\",\n        target: \"20\",\n      },\n      {\n        source: \"18\",\n        target: \"19\",\n      },\n      {\n        source: \"19\",\n        target: \"20\",\n      },\n      {\n        source: \"19\",\n        target: \"33\",\n      },\n      {\n        source: \"19\",\n        target: \"22\",\n      },\n      {\n        source: \"19\",\n        target: \"23\",\n      },\n      {\n        source: \"20\",\n        target: \"21\",\n      },\n      {\n        source: \"21\",\n        target: \"22\",\n      },\n      {\n        source: \"22\",\n        target: \"24\",\n      },\n      {\n        source: \"22\",\n        target: \"25\",\n      },\n      {\n        source: \"22\",\n        target: \"26\",\n      },\n      {\n        source: \"22\",\n        target: \"23\",\n      },\n      {\n        source: \"22\",\n        target: \"28\",\n      },\n      {\n        source: \"22\",\n        target: \"30\",\n      },\n      {\n        source: \"22\",\n        target: \"31\",\n      },\n      {\n        source: \"22\",\n        target: \"32\",\n      },\n      {\n        source: \"22\",\n        target: \"33\",\n      },\n      {\n        source: \"23\",\n        target: \"28\",\n      },\n      {\n        source: \"23\",\n        target: \"27\",\n      },\n      {\n        source: \"23\",\n        target: \"29\",\n      },\n      {\n        source: \"23\",\n        target: \"30\",\n      },\n      {\n        source: \"23\",\n        target: \"31\",\n      },\n      {\n        source: \"23\",\n        target: \"33\",\n      },\n      {\n        source: \"32\",\n        target: \"33\",\n      },\n    ],\n  };\n\n  const colors = [\n    \"#BDD2FD\",\n    \"#BDEFDB\",\n    \"#C2C8D5\",\n    \"#FBE5A2\",\n    \"#F6C3B7\",\n    \"#B6E3F5\",\n    \"#D3C6EA\",\n    \"#FFD8B8\",\n    \"#AAD8D8\",\n    \"#FFD6E7\",\n  ];\n  const strokes = [\n    \"#5B8FF9\",\n    \"#5AD8A6\",\n    \"#5D7092\",\n    \"#F6BD16\",\n    \"#E8684A\",\n    \"#6DC8EC\",\n    \"#9270CA\",\n    \"#FF9D4D\",\n    \"#269A99\",\n    \"#FF99C3\",\n  ];\n\n  const { nodes } = data;\n  const clusterMap = new Map();\n  let clusterId = 0;\n  nodes.forEach((node) => {\n    // cluster\n    if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n      clusterMap.set(node.cluster, clusterId);\n      clusterId++;\n    }\n    const cid = clusterMap.get(node.cluster);\n    if (!node.style) {\n      node.style = {};\n    }\n    node.style.fill = colors[cid % colors.length];\n    node.style.stroke = strokes[cid % strokes.length];\n  });\n  return data;\n}\n\nexport default getData;\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6-wx/extends/layout/fruchtermanLayout\";\n/**\n * fruchterman 布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    description: \"Fructherman layout, gravity = 1\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"fruchterman\", fruchtermanLayout);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = getData();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"fruchterman\",\n        gravity: 1,\n        speed: 5,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    function layoutConfigTranslation() {\n      setTimeout(() => {\n        me.setData({\n          description: \"Fructherman layout, gravity = 5\",\n        });\n        me.graph.updateLayout({\n          gravity: 5,\n        });\n      }, 1000);\n\n      setTimeout(() => {\n        me.setData({\n          description: \"Fructherman layout, gravity = 10, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 10,\n          clustering: true,\n        });\n      }, 2500);\n\n      setTimeout(() => {\n        me.setData({\n          description: \"Fructherman layout, gravity = 20, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 20,\n        });\n      }, 4000);\n\n      setTimeout(() => {\n        me.setData({\n          description: \"Fructherman layout, gravity = 50, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 50,\n        });\n      }, 5500);\n\n      setTimeout(() => {\n        me.setData({\n          description: \"Fructherman layout, gravity = 80, layout by cluster\",\n        });\n        me.graph.updateLayout({\n          gravity: 80,\n        });\n      }, 7000);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-configuration-translate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-configuration-translate/index.wxml",
    "content": "<view>{{description}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/fruchterman-configuration-translate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/interact-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst data2_m = {\n  nodes: [\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"1001\",\n      label: \"1001\",\n    },\n    {\n      id: \"1002\",\n      label: \"1002\",\n    },\n    {\n      id: \"1003\",\n      label: \"1003\",\n    },\n    {\n      id: \"1004\",\n      label: \"1004\",\n    },\n    {\n      id: \"1005\",\n      label: \"1005\",\n    },\n    {\n      id: \"1006\",\n      label: \"1006\",\n    },\n    {\n      id: \"1007\",\n      label: \"1007\",\n    },\n    {\n      id: \"1008\",\n      label: \"1008\",\n    },\n    {\n      id: \"1009\",\n      label: \"1009\",\n    },\n    {\n      id: \"1010\",\n      label: \"1010\",\n    },\n    {\n      id: \"1011\",\n      label: \"1011\",\n    },\n    {\n      id: \"1012\",\n      label: \"1012\",\n    },\n    {\n      id: \"1013\",\n      label: \"1013\",\n    },\n    {\n      id: \"1014\",\n      label: \"1014\",\n    },\n    {\n      id: \"1015\",\n      label: \"1015\",\n    },\n    {\n      id: \"1016\",\n      label: \"1016\",\n    },\n    {\n      id: \"1017\",\n      label: \"1017\",\n    },\n    {\n      id: \"1018\",\n      label: \"1018\",\n    },\n    {\n      id: \"1019\",\n      label: \"1019\",\n    },\n    {\n      id: \"1020\",\n      label: \"1020\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"41\",\n      label: \"41\",\n    },\n  ],\n  edges: [\n    {\n      source: \"2\",\n      target: \"1001\",\n    },\n    {\n      source: \"2\",\n      target: \"1002\",\n    },\n    {\n      source: \"2\",\n      target: \"1003\",\n    },\n    {\n      source: \"2\",\n      target: \"1004\",\n    },\n    {\n      source: \"2\",\n      target: \"1005\",\n    },\n    {\n      source: \"1001\",\n      target: \"1006\",\n    },\n    {\n      source: \"1001\",\n      target: \"1007\",\n    },\n    {\n      source: \"1001\",\n      target: \"1008\",\n    },\n    {\n      source: \"1001\",\n      target: \"1009\",\n    },\n    {\n      source: \"1001\",\n      target: \"1010\",\n    },\n    {\n      source: \"1002\",\n      target: \"1006\",\n    },\n    {\n      source: \"1002\",\n      target: \"1007\",\n    },\n    {\n      source: \"1002\",\n      target: \"1008\",\n    },\n    {\n      source: \"1002\",\n      target: \"1009\",\n    },\n    {\n      source: \"1002\",\n      target: \"1010\",\n    },\n    {\n      source: \"1003\",\n      target: \"1006\",\n    },\n    {\n      source: \"1003\",\n      target: \"1007\",\n    },\n    {\n      source: \"1003\",\n      target: \"1008\",\n    },\n    {\n      source: \"1003\",\n      target: \"1009\",\n    },\n    {\n      source: \"1003\",\n      target: \"1010\",\n    },\n    {\n      source: \"1010\",\n      target: \"1011\",\n    },\n    {\n      source: \"1010\",\n      target: \"1012\",\n    },\n    {\n      source: \"1010\",\n      target: \"1013\",\n    },\n    {\n      source: \"1010\",\n      target: \"1014\",\n    },\n    {\n      source: \"1010\",\n      target: \"1015\",\n    },\n    {\n      source: \"1010\",\n      target: \"1016\",\n    },\n    {\n      source: \"1010\",\n      target: \"1017\",\n    },\n    {\n      source: \"1008\",\n      target: \"1014\",\n    },\n    {\n      source: \"1008\",\n      target: \"1015\",\n    },\n    {\n      source: \"1008\",\n      target: \"1016\",\n    },\n    {\n      source: \"1008\",\n      target: \"1017\",\n    },\n    {\n      source: \"1017\",\n      target: \"1018\",\n    },\n    {\n      source: \"1017\",\n      target: \"1019\",\n    },\n    {\n      source: \"1016\",\n      target: \"1020\",\n    },\n    {\n      source: \"1016\",\n      target: \"1020\",\n    },\n    {\n      source: \"5\",\n      target: \"1020\",\n    },\n    {\n      source: \"41\",\n      target: \"1020\",\n    },\n    {\n      source: \"5\",\n      target: \"1009\",\n    },\n    {\n      source: \"41\",\n      target: \"1009\",\n    },\n  ],\n};\n\nexport { data, data2_m };\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/interact-radial/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport { data, data2_m } from \"./data\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\n/**\n * 交互扩展节点的辐射布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n  mainUnitRadius: 80,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const focusNode = data.nodes[22];\n    focusNode.style = {\n      stroke: \"#00419F\",\n      fill: \"#729FFC\",\n      lineWidth: 2,\n    };\n\n    data.nodes[2].style = {\n      stroke: \"#00419F\",\n      fill: \"#729FFC\",\n      lineWidth: 2,\n    };\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"radial\",\n        maxIteration: 200,\n        focusNode,\n        unitRadius: this.mainUnitRadius,\n        linkDistance: 100,\n        preventOverlap: true,\n        nodeSize: 20,\n      },\n      animate: true,\n      modes: {\n        default: [\"drag-node\", \"click-select\", \"click-add-node\", \"drag-canvas\"],\n      },\n      defaultNode: {\n        size: 20,\n      },\n    });\n\n    this.graph.on(\"node:tap\", (ev) => {\n      const itemModel = ev.item.getModel();\n      const nodes = this.graph.getNodes();\n      const edges = this.graph.getEdges();\n      let newData;\n      if (itemModel.id === \"2\") newData = data2_m;\n      else return;\n      const newNodeModels = newData.nodes;\n      const newEdgeModels = [];\n      // deduplication the items in newEdgeModels\n      newData.edges.forEach((e) => {\n        let exist = false;\n        newEdgeModels.forEach((ne) => {\n          if (ne.source === e.source && ne.target === e.target) exist = true;\n        });\n        if (!exist) {\n          newEdgeModels.push(e);\n        }\n      });\n\n      // for graph.changeData()\n      const allNodeModels = [];\n      const allEdgeModels = [];\n\n      // add new nodes to graph\n      const nodeMap = new Map();\n      nodes.forEach((n) => {\n        const nModel = n.getModel();\n        nodeMap.set(nModel.id, n);\n      });\n      newNodeModels.forEach((nodeModel) => {\n        if (nodeMap.get(nodeModel.id) === undefined) {\n          // set the initial positions of the new nodes to the focus(clicked) node\n          nodeModel.x = itemModel.x;\n          nodeModel.y = itemModel.y;\n          this.graph.addItem(\"node\", nodeModel);\n        }\n      });\n\n      // add new edges to graph\n      const edgeMap = new Map();\n      edges.forEach((e, i) => {\n        const eModel = e.getModel();\n        edgeMap.set(`${eModel.source},${eModel.target}`, i);\n      });\n      const oldEdgeNum = edges.length;\n      newEdgeModels.forEach(function (em, i) {\n        const exist = edgeMap.get(`${em.source},${em.target}`);\n        if (exist === undefined) {\n          this.graph.addItem(\"edge\", em);\n          edgeMap.set(`${em.source},${em.target}`, oldEdgeNum + i);\n        }\n      });\n\n      edges.forEach((e) => {\n        allEdgeModels.push(e.getModel());\n      });\n      nodes.forEach((n) => {\n        allNodeModels.push(n.getModel());\n      });\n      // the max degree about foces(clicked) node in the newly added data\n      const maxDegree = 4;\n      // the max degree about foces(clicked) node in the original data\n      const oMaxDegree = 3;\n      const unitRadius = 40;\n      // re-place the clicked node far away the exisiting items\n      // along the radius from center node to it\n      const vx = itemModel.x - focusNode.x;\n      const vy = itemModel.y - focusNode.y;\n      const vlength = Math.sqrt(vx * vx + vy * vy);\n      const ideallength =\n        unitRadius * maxDegree + this.mainUnitRadius * oMaxDegree;\n      itemModel.x = (ideallength * vx) / vlength + focusNode.x;\n      itemModel.y = (ideallength * vy) / vlength + focusNode.y;\n\n      const Radial = F6.layout.radial;\n      const subRadialLayout = new Radial({\n        center: [itemModel.x, itemModel.y],\n        maxIteration: 200,\n        focusNode: \"2\",\n        unitRadius,\n        linkDistance: 180,\n        preventOverlap: true,\n      });\n      subRadialLayout.init({\n        nodes: newNodeModels,\n        edges: newEdgeModels,\n      });\n      subRadialLayout.execute();\n      this.graph.positionsAnimate();\n      this.graph.data({\n        nodes: allNodeModels,\n        edges: allEdgeModels,\n      });\n    });\n\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/interact-radial/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"交互扩展节点的辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/interact-radial/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/interact-radial/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layout-timing/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layout-timing/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * layout-timing\n */\n\nlet currentPage = null;\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    message: \"\",\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    // 获取文本框\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n    currentPage = this;\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 40,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        nodeSize: 20,\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n    });\n\n    // 监听\n    this.graph.on(\"beforelayout\", () => {\n      currentPage.setData({\n        message:\n          \"Doing force-directed layout... the text will be changed after the layout being done.\",\n      });\n    });\n\n    this.graph.on(\"afterlayout\", () => {\n      currentPage.setData({\n        message: \"Done!\",\n      });\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layout-timing/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"布局时机监听\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layout-timing/index.wxml",
    "content": "<view> {{message}} </view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layout-timing/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layoutTranslate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layoutTranslate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport circular from \"@antv/f6-wx/extends/layout/circularLayout\";\nimport grid from \"@antv/f6-wx/extends/layout/gridLayout\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\nimport concentric from \"@antv/f6-wx/extends/layout/concentricLayout\";\nimport mds from \"@antv/f6-wx/extends/layout/mdsLayout\";\n\n/**\n * layoutTranslate\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n    F6.registerLayout(\"grid\", grid);\n    F6.registerLayout(\"force\", force);\n    F6.registerLayout(\"radial\", radial);\n    F6.registerLayout(\"concentric\", concentric);\n    F6.registerLayout(\"mds\", mds);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"circular\", // TODO:random\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n      animate: true,\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"circular\",\n        radius: 200,\n      });\n    }, 3000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"grid\",\n      });\n    }, 6000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"force\",\n        preventOverlap: true,\n        nodeSize: 20,\n      });\n    }, 9000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"radial\",\n        preventOverlap: true,\n        nodeSize: 15,\n      });\n    }, 12000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"concentric\",\n        minNodeSpacing: 30,\n      });\n    }, 15000);\n    setTimeout(() => {\n      this.graph.updateLayout({\n        type: \"mds\",\n        linkDistance: 100,\n      });\n    }, 18000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layoutTranslate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"布局切换\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layoutTranslate/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/layoutTranslate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst { nodes } = data;\nnodes.forEach((node) => {\n  node.size = Math.random() * 20 + 10;\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-radial/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\n/**\n * 防止节点重叠的严格辐射布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 50,\n        preventOverlap: true,\n        maxPreventOverlapIteration: 100,\n      },\n      animate: true,\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-radial/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"防止节点重叠的严格辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-radial/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-radial/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-unstrict-radial/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-unstrict-radial/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\n/**\n * 防止节点重叠的非严格辐射布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 70,\n        preventOverlap: true,\n        strictRadial: false,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-unstrict-radial/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"防止节点重叠的非严格辐射布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-unstrict-radial/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/prevent-overlap-unstrict-radial/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/radial-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/radial-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\n/**\n * Radial布局参数动态变化\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    description:\n      \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: false\",\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 50,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n    const me = this;\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    layoutConfigTranslation();\n\n    setInterval(() => {\n      layoutConfigTranslation();\n    }, 7000);\n\n    function layoutConfigTranslation() {\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          preventOverlap: true,\n          nodeSize: 20,\n        });\n      }, 1000);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 0, unitRadius = 80, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          unitRadius: 80,\n        });\n      }, 2500);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 10, unitRadius = 80, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          focusNode: \"10\",\n        });\n      }, 4000);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 20, unitRadius = 80, preventOverlap: true\",\n        });\n        me.graph.updateLayout({\n          focusNode: \"20\",\n        });\n      }, 5500);\n\n      setTimeout(() => {\n        me.setData({\n          description:\n            \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: false\",\n        });\n        me.graph.updateLayout({\n          focusNode: \"0\",\n          preventOverlap: false,\n          unitRadius: 50,\n        });\n      }, 5500);\n    }\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/radial-configuration-translate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"布局参数动态变化\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/radial-configuration-translate/index.wxml",
    "content": "<view>{{description}}</view><f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/radial-configuration-translate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sort-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"1\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"2\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"3\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"4\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"5\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"6\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"7\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"8\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"9\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"10\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"11\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"12\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"13\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"14\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"15\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"16\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"17\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"18\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"19\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"20\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"21\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"22\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"23\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"24\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"25\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"26\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"27\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"28\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"29\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"30\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"31\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"32\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"33\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst colors = [\"steelblue\", \"green\", \"pink\", \"grey\"];\nconst colorsObj = { a: \"steelblue\", b: \"green\", c: \"pink\", d: \"grey\" };\ndata.nodes.forEach((node) => {\n  node.size = 20;\n  node.style = {\n    lineWidth: 4,\n    fill: \"#fff\",\n    stroke: colors[node.sortAttr2] || colorsObj[node.sortAttr2],\n  };\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sort-radial/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport radial from \"@antv/f6-wx/extends/layout/radialLayout\";\n/**\n * 同层节点按照指定字段聚类\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"radial\", radial);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 30,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        unitRadius: 70,\n        maxIteration: 1000,\n        linkDistance: 10,\n        preventOverlap: true,\n        nodeSize: 30,\n        sortBy: \"sortAttr2\",\n        sortStrength: 50,\n      },\n      animate: true,\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sort-radial/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"同层节点按照指定字段聚类\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sort-radial/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sort-radial/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/spiral-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/spiral-circular/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport circular from \"@antv/f6-wx/extends/layout/circularLayout\";\n/**\n * 螺旋线布局\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册布局\n    F6.registerLayout(\"circular\", circular);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"circular\",\n        startRadius: 10,\n        endRadius: 300,\n      },\n      animate: true,\n      defaultNode: {\n        size: 20,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: {\n            path: \"M 0,0 L 8,4 L 8,-4 Z\",\n            fill: \"#e2e2e2\",\n          },\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/spiral-circular/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"螺旋线布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/spiral-circular/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/spiral-circular/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/subgraph-layout/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/subgraph-layout/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport Force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * subgraph-layout\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const { nodes } = data;\n\n    nodes.forEach((node, i) => {\n      if (i <= 16 && i !== 12) {\n        if (!node.style) {\n          node.style = {\n            fill: \"#F6C3B7\",\n            stroke: \"#E8684A\",\n          };\n        } else {\n          node.style.fill = \"lightsteelblue\";\n        }\n      }\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 40,\n      modes: {\n        default: [\"drag-node\"],\n      },\n      defaultNode: {\n        size: 20,\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#e2e2e2\",\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    setTimeout(() => {\n      // const { nodes } = data;\n      const { edges } = data;\n      const newNodes = [];\n      const newEdges = [];\n      const newNodeMap = new Map();\n      // fix the nodes[0]\n      nodes[0].fx = nodes[0].x;\n      nodes[0].fy = nodes[0].y;\n      // add the nodes which should be re-layout\n      nodes.forEach((node, i) => {\n        if (i <= 16 && i !== 12) {\n          newNodes.push(node);\n          newNodeMap.set(node.id, i);\n        }\n      });\n      // add related edges\n      edges.forEach((edge) => {\n        const sourceId = edge.source;\n        const targetId = edge.target;\n        if (\n          newNodeMap.get(sourceId) !== undefined &&\n          newNodeMap.get(targetId) !== undefined\n        ) {\n          newEdges.push(edge);\n        }\n      });\n\n      // TODO:1、这里不知道怎么改，2、force的开头F要大写\n      const subForceLayout = new Force({\n        center: [nodes[0].x, nodes[0].y],\n        linkDistance: 70,\n        preventOverlap: true,\n        nodeSize: 20,\n        tick: () => {\n          // the tick function to show the animation of layout process\n          this.graph.refreshPositions();\n        },\n      });\n      subForceLayout.init({\n        nodes: newNodes,\n        edges: newEdges,\n      });\n      subForceLayout.execute();\n    }, 1000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/subgraph-layout/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"子图布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/subgraph-layout/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/subgraph-layout/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sublayout-pipes/data.js",
    "content": "const data = { nodes: [], edges: [] };\nfor (let i = 0; i < 32; i++) {\n  data.nodes.push({\n    id: `${i}`,\n    label: i < 17 ? `employee-${i}` : `company-${i - 17}`,\n    dataType: i < 17 ? \"employee\" : \"company\",\n    style:\n      i < 17\n        ? { stroke: \"#5D7092\", fill: \"#5D7092\", fillOpacity: 0.5 }\n        : { stroke: \"#5B8FF9\", fill: \"#5B8FF9\", fillOpacity: 0.5 },\n  });\n}\ndata.edges = [\n  { source: \"0\", target: \"1\" },\n  { source: \"0\", target: \"2\" },\n  { source: \"0\", target: \"3\" },\n  { source: \"0\", target: \"4\" },\n  { source: \"0\", target: \"5\" },\n  { source: \"0\", target: \"6\" },\n  { source: \"1\", target: \"2\" },\n  { source: \"1\", target: \"3\" },\n  { source: \"1\", target: \"4\" },\n  { source: \"1\", target: \"5\" },\n  { source: \"1\", target: \"6\" },\n  { source: \"2\", target: \"3\" },\n  { source: \"2\", target: \"4\" },\n  { source: \"2\", target: \"5\" },\n  { source: \"2\", target: \"6\" },\n\n  { source: \"7\", target: \"8\" },\n  { source: \"8\", target: \"9\" },\n  { source: \"9\", target: \"10\" },\n\n  { source: \"11\", target: \"12\" },\n  { source: \"12\", target: \"13\" },\n  { source: \"13\", target: \"14\" },\n  { source: \"14\", target: \"15\" },\n  { source: \"15\", target: \"16\" },\n  { source: \"11\", target: \"14\" },\n\n  { source: \"31\", target: \"11\" },\n  { source: \"24\", target: \"4\" },\n  { source: \"23\", target: \"7\" },\n];\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"employee\",\n      label: \"employee\",\n      style: { stroke: \"#5D7092\", fill: \"#5D7092\" },\n    },\n    {\n      id: \"company\",\n      label: \"company\",\n      style: { stroke: \"#5B8FF9\", fill: \"#5B8FF9\" },\n    },\n  ],\n  edges: [],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sublayout-pipes/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport { Legend } from \"@antv/f6-plugin/f6Plugin\";\n\nimport { data, legendData } from \"./data\";\n/**\n * sublayout-pipes\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 新建F6.legend实例\n    const legend = new Legend({\n      data: legendData,\n      align: \"center\",\n      layout: \"horizontal\", // vertical\n      position: \"bottom-left\",\n      vertiSep: 12,\n      horiSep: 24,\n      offsetY: -24,\n      padding: [4, 16, 8, 16],\n      containerStyle: {\n        fill: \"#ccc\",\n        lineWidth: 1,\n      },\n      title: \"Legend\",\n      titleConfig: {\n        position: \"left\",\n        offsetX: 0,\n        offsetY: 12,\n      },\n      filter: {\n        enable: true,\n        multiple: true,\n        trigger: \"click\",\n        graphActiveState: \"activeByLegend\",\n        graphInactiveState: \"inactiveByLegend\",\n        filterFunctions: {\n          a: (d) => {\n            if (d.cluster === \"a\") return true;\n            return false;\n          },\n          b: (d) => {\n            if (d.cluster === \"b\") return true;\n            return false;\n          },\n          c: (d) => {\n            if (d.cluster === \"c\") return true;\n            return false;\n          },\n          d: (d) => {\n            if (d.cluster === \"d\") return true;\n            return false;\n          },\n        },\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 40,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      plugins: [legend],\n      animate: true,\n      nodeStateStyles: {\n        activeByLegend: {\n          lineWidth: 5,\n          strokeOpacity: 0.5,\n          stroke: \"#f00\",\n        },\n        inactiveByLegend: {\n          opacity: 0.5,\n        },\n      },\n      layout: {\n        pipes: [\n          {\n            type: \"circular\",\n            nodesFilter: (node) => +node.id <= 6,\n            center: [(width / 5) * 4 - 30, height / 2],\n            radius: width / 10,\n          },\n          {\n            type: \"circular\",\n            nodesFilter: (node) => +node.id >= 7 && +node.id <= 10,\n            center: [width / 20 + 30, (height / 3) * 2],\n            radius: width / 20,\n          },\n          {\n            type: \"circular\",\n            nodesFilter: (node) => +node.id >= 11 && +node.id <= 16,\n            center: [width / 20 + 30, height / 3],\n            radius: width / 20,\n          },\n          {\n            type: \"grid\",\n            nodesFilter: (node) => +node.id > 16,\n            begin: [width / 10 + 50, 20],\n            width: (width / 5) * 3 - 100,\n            height: height - 40,\n          },\n        ],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sublayout-pipes/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"流水线子图布局\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sublayout-pipes/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-general-graph/pages/general-graph/sublayout-pipes/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/activate-relations/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/activate-relations/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * activate-relations:内置的高亮节点\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerLayout(\"force\", force);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // const tooltip = new F6.Tooltip({\n    //   offsetX: 10,\n    //   offsetY: 10,\n    //   fixToNode: [1, 0.5],\n    //   // the types of items that allow the tooltip show up\n    //   // 允许出现 tooltip 的 item 类型\n    //   itemTypes: ['node', 'edge'],\n    //   // custom the tooltip's content\n    //   // 自定义 tooltip 内容\n    //   getContent: (e) => {\n    //     const outDiv = document.createElement('div');\n    //     outDiv.style.width = 'fit-content';\n    //     outDiv.style.height = 'fit-content';\n    //     const model = e.item.getModel();\n    //     if (e.item.getType() === 'node') {\n    //       outDiv.innerHTML = `${model.name}`;\n    //     } else {\n    //       const source = e.item.getSource();\n    //       const target = e.item.getTarget();\n    //       outDiv.innerHTML = `来源：${source.getModel().name}<br/>去向：${target.getModel().name}`;\n    //     }\n    //     return outDiv;\n    //   },\n    // });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      layout: {\n        type: \"force\",\n        edgeStrength: 0.7,\n      },\n      // plugins: [tooltip],\n      modes: {\n        default: [\"drag-canvas\", \"activate-relations\"],\n      },\n      defaultNode: {\n        size: [10, 10],\n        /* style for the keyShape */\n        // style: {\n        //   lineWidth: 2,\n        //   fill: '#DEE9FF',\n        //   stroke: '#5B8FF9',\n        // },\n      },\n      defaultEdge: {\n        /* style for the keyShape */\n        style: {\n          stroke: \"#aaa\",\n          lineAppendWidth: 2,\n          opacity: 0.3,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/activate-relations/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"内置的高亮节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/activate-relations/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/activate-relations/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/add-child/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/add-child/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * addChild\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      modes: {\n        default: [\"collapse-expand\", \"drag-canvas\"],\n      },\n      fitView: true,\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        defalutPosition: [],\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 50;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n    this.graph.node((node) => {\n      return {\n        size: 16,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        label: node.id,\n        labelCfg: {\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    this.graph.edge(() => {\n      return {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    let count = 0;\n\n    this.graph.on(\"node:tap\", function (evt) {\n      const { item } = evt;\n\n      const nodeId = item.get(\"id\");\n      const model = item.getModel();\n      const { children } = model;\n      if (!children || children.length === 0) {\n        const childData = {\n          id: `child-data-${count}`,\n          type: \"rect\",\n          children: [\n            {\n              id: `x-${count}`,\n            },\n            {\n              id: `y-${count}`,\n            },\n          ],\n        };\n        this.graph.addChild(childData, nodeId);\n        count++;\n      }\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/add-child/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"使用addChild\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/add-child/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/add-child/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/canvas-two-fingers/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/canvas-two-fingers/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * canvas-two-fingers\n */\n\n// 注册行为\n// F6.registerBehavior('double-finger-drag-canvas', {\n//   getEvents: function getEvents() {\n//     return {\n//       wheel: 'onWheel',\n//     };\n//   },\n\n//   onWheel: function onWheel(ev) {\n//     if (ev.ctrlKey) {\n//       const canvas = graph.get('canvas');\n//       const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n//       let ratio = this.graph.getZoom();\n//       if (ev.wheelDelta > 0) {\n//         ratio = ratio + ratio * 0.05;\n//       } else {\n//         ratio = ratio - ratio * 0.05;\n//       }\n//       this.graph.zoomTo(ratio, {\n//         x: point.x,\n//         y: point.y,\n//       });\n//     } else {\n//       const x = ev.deltaX || ev.movementX;\n//       let y = ev.deltaY || ev.movementY;\n//       this.graph.translate(-x, -y);\n//     }\n//     ev.preventDefault();\n//   },\n// });\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    currentMode: \"请选择模式\",\n  },\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio, currentMode } = this.data;\n    console.log(currentMode, \"111\");\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\"double-finger-drag-canvas\"],\n      },\n      layout: {\n        type: \"force\",\n      },\n    });\n\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/canvas-two-fingers/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"两指平移画布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/canvas-two-fingers/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/canvas-two-fingers/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-data/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-data/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * changeData\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      modes: {\n        default: [\"collapse-expand\", \"drag-canvas\"],\n      },\n      fitView: true,\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        defalutPosition: [],\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 50;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node((node) => {\n      return {\n        size: 16,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        label: node.id,\n        labelCfg: {\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    let i = 0;\n    this.graph.edge(() => {\n      i++;\n      return {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n        label: i,\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    let count = 0;\n\n    this.graph.on(\"node:tap\", function (evt) {\n      const { item } = evt;\n\n      const nodeId = item.get(\"id\");\n      const model = item.getModel();\n      const { children } = model;\n      if (!children || children.length === 0) {\n        const childData = [\n          {\n            id: `child-data-${count}`,\n            type: \"rect\",\n            children: [\n              {\n                id: `x-${count}`,\n              },\n              {\n                id: `y-${count}`,\n              },\n            ],\n          },\n          {\n            id: `child-data1-${count}`,\n            children: [\n              {\n                id: `x1-${count}`,\n              },\n              {\n                id: `y1-${count}`,\n              },\n            ],\n          },\n        ];\n\n        const parentData = this.graph.findDataById(nodeId);\n        if (!parentData.children) {\n          parentData.children = [];\n        }\n        // 如果childData是一个数组，则直接赋值给parentData.children\n        // 如果是一个对象，则使用parentData.children.push(obj)\n        parentData.children = childData;\n        this.graph.changeData();\n        count++;\n      }\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-data/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"使用changeData\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-data/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-data/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-members/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"公司1\",\n      group: 1,\n    },\n    {\n      id: \"2\",\n      label: \"公司2\",\n      group: 1,\n    },\n    {\n      id: \"3\",\n      label: \"公司3\",\n      group: 1,\n    },\n    {\n      id: \"4\",\n      label: \"公司4\",\n      group: 1,\n    },\n    {\n      id: \"5\",\n      label: \"公司5\",\n      group: 2,\n    },\n    {\n      id: \"6\",\n      label: \"公司6\",\n      group: 2,\n    },\n    {\n      id: \"7\",\n      label: \"公司7\",\n      group: 2,\n    },\n    {\n      id: \"8\",\n      label: \"公司8\",\n      group: 2,\n    },\n    {\n      id: \"9\",\n      label: \"公司9\",\n      group: 2,\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"1\",\n      type: \"loop\",\n    },\n    {\n      source: \"2\",\n      target: \"2\",\n      type: \"loop\",\n    },\n    {\n      source: \"1\",\n      target: \"2\",\n      data: {\n        type: \"A\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"8\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-members/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport grid from \"@antv/f6-wx/extends/layout/gridLayout\";\n\n/**\n * change-members：修改包裹内部成员\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    discription: \"Wait for the layout to complete...\",\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerLayout(\"grid\", grid);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"grid\",\n      },\n    });\n\n    const hull1 = this.graph.createHull({\n      id: \"hull1\",\n      type: \"smooth-convex\",\n      padding: 15,\n      members: this.graph\n        .getNodes()\n        .filter((node) => node.getModel().group === 1),\n    });\n    const hull2 = this.graph.createHull({\n      id: \"hull2\",\n      members: this.graph\n        .getNodes()\n        .filter((node) => node.getModel().group === 2),\n      padding: 15,\n      type: \"bubble\",\n      style: {\n        fill: \"pink\",\n        stroke: \"red\",\n      },\n      update: \"drag\",\n    });\n\n    this.graph.on(\"canvas:contextmenu\", (ev) => {\n      ev.preventDefault();\n      ev.stopPropagation();\n      const item = this.graph.addItem(\"node\", {\n        x: ev.x,\n        y: ev.y,\n        id: Math.random(),\n        group: 2,\n      });\n      hull2.addMember(item);\n    });\n\n    this.graph.on(\"afterupdateitem\", (e) => {\n      if (\n        hull1.members.indexOf(e.item) > -1 ||\n        hull1.nonMembers.indexOf(e.item) > -1\n      ) {\n        hull1.updateData(hull1.members);\n      }\n    });\n\n    this.graph.on(\"node:dragend\", (e) => {\n      const { item } = e;\n      const memberIdx = hull2.members.indexOf(item);\n      if (memberIdx > -1) {\n        // 如果移出原hull范围，则去掉\n        if (!hull2.contain(item)) {\n          hull2.removeMember(item);\n        } else {\n          hull2.updateData(hull2.members);\n        }\n      } else if (hull2.contain(item)) hull2.addMember(item);\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-members/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"修改包裹内部成员\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-members/index.wxml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/change-members/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/collapse-slibing/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  cluster: \"c0\",\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      cluster: \"c0\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n          cluster: \"c1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          cluster: \"c1\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n              cluster: \"c1\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode5\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode6\",\n      cluster: \"c1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/collapse-slibing/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data.js\";\n\n/**\n * drag-subtree:拖拽子树改变结构\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    discription:\n      \"Click a node to collapse the siblings with same cluster, and click again to expand\",\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // custom the collapse-sibling behavior\n    F6.registerBehavior(\"collapse-slibing\", {\n      getEvents() {\n        return {\n          \"node:click\": \"onClick\",\n        };\n      },\n      onClick(evt) {\n        const { item } = evt;\n        const model = item.getModel();\n        const { cluster } = model;\n        const parentData = item.get(\"parent\").getModel();\n        const me = this;\n\n        if (model.collapsedSiblings) {\n          this.graph.removeChild(model.id);\n          setTimeout(() => {\n            const { children } = parentData;\n            for (let i = model.collapsedSiblings.length - 1; i >= 0; i--) {\n              const add = model.collapsedSiblings[i];\n              children.splice(add.idx, 0, add);\n            }\n            delete model.collapsedSiblings;\n            me.graph.updateChildren(children, parentData.id);\n          }, 550);\n          return;\n        }\n        const siblingData = parentData.children;\n        if (siblingData.length <= 1) return;\n        let count = 0;\n        const aggregateNode = {\n          id: `aggregate-node-${model.id}`,\n          children: [],\n          cluster,\n          collapsedSiblings: [],\n        };\n        let modelIdx = siblingData.length - 1;\n        for (let i = siblingData.length - 1; i >= 0; i--) {\n          const sibling = siblingData[i];\n          if (sibling.id === model.id) {\n            const remove = siblingData[i];\n            remove.idx = i;\n            aggregateNode.collapsedSiblings.push(remove);\n            modelIdx = Math.min(i, modelIdx);\n\n            aggregateNode.children = (siblingData[i].children || []).concat(\n              aggregateNode.children,\n            );\n          } else if (sibling.cluster === cluster && sibling.id !== model.id) {\n            count++;\n            aggregateNode.children = (siblingData[i].children || []).concat(\n              aggregateNode.children,\n            );\n            const remove = siblingData.splice(i, 1)[0];\n            remove.idx = i;\n            aggregateNode.collapsedSiblings.push(remove);\n            modelIdx = Math.min(i, modelIdx);\n          }\n        }\n        if (!count) return;\n        aggregateNode.label = count + 1;\n        aggregateNode.size = 16 + (count + 1) * 4;\n\n        this.graph.removeChild(model.id);\n        siblingData.splice(modelIdx, 0, aggregateNode);\n        setTimeout(() => {\n          me.graph.updateChildren(siblingData, parentData.id);\n        }, 550);\n      },\n    });\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const colors = [\"#5F95FF\", \"#61DDAA\", \"#65789B\"];\n    const colorSets = F6.Util.getColorSetsBySubjectColors(\n      colors,\n      \"#fff\",\n      \"default\",\n      \"#777\",\n    );\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"collapse-slibing\", \"drag-canvas\"],\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        defalutPosition: [],\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 50;\n        },\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n      },\n    });\n\n    this.graph.node((node) => {\n      const colorSet = colorSets[+node.cluster.replace(\"c\", \"\")];\n      return {\n        size: node.size || 16,\n        style: {\n          fill: colorSet.mainFill || \"#DEE9FF\",\n          stroke: colorSet.mainStroke || \"#5B8FF9\",\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/collapse-slibing/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"合并同类兄弟节点\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/collapse-slibing/index.wxml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/collapse-slibing/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-circle/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 350, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 350, y: 250, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  edges: [\n    { source: \"node1\", target: \"node2\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"combo1\", target: \"node3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-circle/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n/**\n * combo-circle\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      defaultCombo: {\n        type: \"circle\",\n        style: {\n          lineWidth: 1,\n        },\n        labelCfg: {\n          refY: 15,\n          position: \"bottom\",\n        },\n      },\n      comboStateStyles: {\n        dragenter: {\n          lineWidth: 4,\n          stroke: \"#FE9797\",\n        },\n      },\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n          \"click-select\",\n        ],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"combo:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n    this.graph.on(\"node:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n    this.graph.on(\"combo:dragenter\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", true);\n    });\n    this.graph.on(\"combo:dragleave\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", false);\n    });\n\n    this.graph.on(\"combo:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"combo:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-circle/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"圆形组合\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-circle/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-circle/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-rect/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 350, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 350, y: 250, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  edges: [\n    { source: \"node1\", target: \"node2\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"combo1\", target: \"node3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-rect/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * combo-rect\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // Set groupByTypes to false to get rendering result with reasonable visual zIndex for combos\n      groupByTypes: false,\n      defaultCombo: {\n        type: \"rect\",\n        size: [40, 10], // The minimum size of the Combo\n        padding: [30, 20, 10, 20],\n        style: {\n          lineWidth: 1,\n        },\n        labelCfg: {\n          refY: 10,\n          refX: 20,\n          position: \"bottom\",\n        },\n      },\n      comboStateStyles: {\n        dragenter: {\n          lineWidth: 4,\n          stroke: \"#FE9797\",\n        },\n      },\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          \"drag-combo\",\n          \"collapse-expand-combo\",\n          \"click-select\",\n        ],\n      },\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 监听\n    this.graph.on(\"combo:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n    this.graph.on(\"node:dragend\", () => {\n      this.graph.getCombos().forEach((combo) => {\n        this.graph.setItemState(combo, \"dragenter\", false);\n      });\n    });\n\n    this.graph.on(\"combo:dragenter\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", true);\n    });\n    this.graph.on(\"combo:dragleave\", (e) => {\n      this.graph.setItemState(e.item, \"dragenter\", false);\n    });\n\n    this.graph.on(\"combo:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"combo:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-rect/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"矩形组合\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-rect/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/combo-rect/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/drag-subtree/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/drag-subtree/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data.js\";\n\n/**\n * drag-subtree:拖拽子树改变结构\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    discription:\n      \"Move a subtree to a new parent by dragging the root node of the subtree.\",\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"zoom-canvas\",\n          {\n            type: \"drag-node\",\n            enableDelegate: true,\n          },\n        ],\n      },\n      defaultNode: {\n        size: [26, 26],\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      nodeStateStyles: {\n        closest: {\n          fill: \"#f00\",\n        },\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node((node) => {\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 10,\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    let minDisNode;\n    this.graph.on(\"node:dragstart\", () => {\n      minDisNode = undefined;\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      minDisNode = undefined;\n      const { item } = e;\n      const model = item.getModel();\n      const nodes = this.graph.getNodes();\n      let minDis = Infinity;\n      nodes.forEach((inode) => {\n        this.graph.setItemState(inode, \"closest\", false);\n        const node = inode.getModel();\n        if (node.id === model.id) return;\n        const dis =\n          (node.x - e.x) * (node.x - e.x) + (node.y - e.y) * (node.y - e.y);\n        if (dis < minDis) {\n          minDis = dis;\n          minDisNode = inode;\n        }\n      });\n      console.log(\"minDis\", minDis, minDisNode);\n      if (minDis < 2000) this.graph.setItemState(minDisNode, \"closest\", true);\n      else minDisNode = undefined;\n    });\n\n    this.graph.on(\"node:dragend\", (e) => {\n      if (!minDisNode) {\n        this.setData({\n          discription: \"Failed. No node close to the dragged node.\",\n        });\n        return;\n      }\n      const { item } = e;\n      const id = item.getID();\n      const data = this.graph.findDataById(id);\n      // if the minDisNode is a descent of the dragged node, return\n      let isDescent = false;\n      const minDisNodeId = minDisNode.getID();\n      console.log(\"dragend\", minDisNodeId, isDescent, data, id);\n\n      F6.Util.traverseTree(data, (d) => {\n        if (d.id === minDisNodeId) isDescent = true;\n      });\n      if (isDescent) {\n        this.setData({\n          discription:\n            \"Failed. The target node is a descendant of the dragged node.\",\n        });\n        return;\n      }\n      this.graph.removeChild(id);\n\n      const me = this;\n\n      setTimeout(() => {\n        const newParentData = this.graph.findDataById(minDisNodeId);\n        let newChildren = newParentData.children;\n        if (newChildren) newChildren.push(data);\n        else newChildren = [data];\n        me.graph.updateChildren(newChildren, minDisNodeId);\n        me.setData({\n          discription: \"Success.\",\n        });\n      }, 600);\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/drag-subtree/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"拖拽子树改变结构\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/drag-subtree/index.wxml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/drag-subtree/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/fix-item/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50, label: \"0\", x: 326, y: 268 },\n    { id: \"node1\", size: 30, label: \"1\", x: 280, y: 384 },\n    { id: \"node2\", size: 30, label: \"2\", x: 234, y: 167 },\n    { id: \"node3\", size: 30, label: \"3\", x: 391, y: 368 },\n    { id: \"node4\", size: 30, label: \"4\", x: 444, y: 209 },\n    { id: \"node5\", size: 30, label: \"5\", x: 378, y: 157 },\n    { id: \"node6\", size: 15, label: \"6\", x: 229, y: 400 },\n    { id: \"node7\", size: 15, label: \"7\", x: 281, y: 440 },\n    { id: \"node8\", size: 15, label: \"8\", x: 188, y: 119 },\n    { id: \"node9\", size: 15, label: \"9\", x: 287, y: 157 },\n    { id: \"node10\", size: 15, label: \"10\", x: 185, y: 200 },\n    { id: \"node11\", size: 15, label: \"11\", x: 238, y: 110 },\n    { id: \"node12\", size: 15, label: \"12\", x: 239, y: 221 },\n    { id: \"node13\", size: 15, label: \"13\", x: 176, y: 160 },\n    { id: \"node14\", size: 15, label: \"14\", x: 389, y: 423 },\n    { id: \"node15\", size: 15, label: \"15\", x: 441, y: 341 },\n    { id: \"node16\", size: 15, label: \"16\", x: 442, y: 398 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\", label: \"0-1\" },\n    { source: \"node0\", target: \"node2\", label: \"0-2\" },\n    { source: \"node0\", target: \"node3\", label: \"0-3\" },\n    { source: \"node0\", target: \"node4\", label: \"0-4\" },\n    { source: \"node0\", target: \"node5\", label: \"0-5\" },\n    { source: \"node1\", target: \"node6\", label: \"1-6\" },\n    { source: \"node1\", target: \"node7\", label: \"1-7\" },\n    { source: \"node2\", target: \"node8\", label: \"2-8\" },\n    { source: \"node2\", target: \"node9\", label: \"2-9\" },\n    { source: \"node2\", target: \"node10\", label: \"2-10\" },\n    { source: \"node2\", target: \"node11\", label: \"2-11\" },\n    { source: \"node2\", target: \"node12\", label: \"2-12\" },\n    { source: \"node2\", target: \"node13\", label: \"2-13\" },\n    { source: \"node3\", target: \"node14\", label: \"3-14\" },\n    { source: \"node3\", target: \"node15\", label: \"3-15\" },\n    { source: \"node3\", target: \"node16\", label: \"3-16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/fix-item/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * fix-item:缩放画布时固定元素\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    fixSelectedItems: {\n      fixAll: true,\n      fixLabel: false,\n      fixLineWidth: false,\n      fixState: \"yourStateName\", // 'selected' by default\n    },\n  },\n\n  tapButton(event) {\n    console.log(event);\n    const { mode } = event.target.dataset;\n    console.log(mode);\n    this.graph.setMode(mode);\n    // 添加模式\n    switch (mode) {\n      case \"all\":\n        this.setData({\n          fixSelectedItems: {\n            fixAll: true,\n            fixLabel: false,\n            fixLineWidth: false,\n            fixState: \"yourStateName\",\n          },\n        });\n        break;\n      case \"font\":\n        this.setData({\n          fixSelectedItems: {\n            fixAll: false,\n            fixLabel: true,\n            fixLineWidth: false,\n            fixState: \"yourStateName\",\n          },\n        });\n        break;\n      case \"lineWidth\":\n        this.setData({\n          fixSelectedItems: {\n            fixAll: false,\n            fixLabel: false,\n            fixLineWidth: true,\n            fixState: \"yourStateName\",\n          },\n        });\n        break;\n    }\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio, fixSelectedItems } = this.data;\n    console.log(\"update\", fixSelectedItems);\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          \"drag-canvas\",\n          \"drag-node\",\n          {\n            type: \"zoom-canvas\",\n            fixSelectedItems,\n          },\n        ],\n      },\n      defaultNode: {\n        size: [10, 10],\n        style: {\n          lineWidth: 2,\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          stroke: \"#e2e2e2\",\n          lineAppendWidth: 2,\n        },\n      },\n      nodeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n      edgeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n    });\n\n    // 监听\n    this.graph.on(\"node:tap\", (e) => {\n      this.graph.setItemState(e.item, \"yourStateName\", true);\n    });\n    this.graph.on(\"edge:tap\", (e) => {\n      this.graph.setItemState(e.item, \"yourStateName\", true);\n    });\n\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.findAllByState(\"node\", \"yourStateName\").forEach((node) => {\n        this.graph.setItemState(node, \"yourStateName\", false);\n      });\n      this.graph.findAllByState(\"edge\", \"yourStateName\").forEach((edge) => {\n        this.graph.setItemState(edge, \"yourStateName\", false);\n      });\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/fix-item/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"缩放画布时固定元素\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/fix-item/index.wxml",
    "content": "<view bindtap='tapButton'> \n  <button class=\"choice-button\" data-mode=\"all\">固定所有</button>\n  <button class=\"choice-button\" data-mode=\"font\">固定字体</button>\n  <button class=\"choice-button\" data-mode=\"lineWidth\">固定线宽</button>\n</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/fix-item/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.choice-button {\n  color: #06ae56;\n  margin-bottom: 5px;\n  background-color: #f2f2f2;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hide-item/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50, label: \"0\", x: 326, y: 268 },\n    { id: \"node1\", size: 30, label: \"1\", x: 280, y: 384 },\n    { id: \"node2\", size: 30, label: \"2\", x: 234, y: 167 },\n    { id: \"node3\", size: 30, label: \"3\", x: 391, y: 368 },\n    { id: \"node4\", size: 30, label: \"4\", x: 444, y: 209 },\n    { id: \"node5\", size: 30, label: \"5\", x: 378, y: 157 },\n    { id: \"node6\", size: 15, label: \"6\", x: 229, y: 400 },\n    { id: \"node7\", size: 15, label: \"7\", x: 281, y: 440 },\n    { id: \"node8\", size: 15, label: \"8\", x: 188, y: 119 },\n    { id: \"node9\", size: 15, label: \"9\", x: 287, y: 157 },\n    { id: \"node10\", size: 15, label: \"10\", x: 185, y: 200 },\n    { id: \"node11\", size: 15, label: \"11\", x: 238, y: 110 },\n    { id: \"node12\", size: 15, label: \"12\", x: 239, y: 221 },\n    { id: \"node13\", size: 15, label: \"13\", x: 176, y: 160 },\n    { id: \"node14\", size: 15, label: \"14\", x: 389, y: 423 },\n    { id: \"node15\", size: 15, label: \"15\", x: 441, y: 341 },\n    { id: \"node16\", size: 15, label: \"16\", x: 442, y: 398 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\", label: \"0-1\" },\n    { source: \"node0\", target: \"node2\", label: \"0-2\" },\n    { source: \"node0\", target: \"node3\", label: \"0-3\" },\n    { source: \"node0\", target: \"node4\", label: \"0-4\" },\n    { source: \"node0\", target: \"node5\", label: \"0-5\" },\n    { source: \"node1\", target: \"node6\", label: \"1-6\" },\n    { source: \"node1\", target: \"node7\", label: \"1-7\" },\n    { source: \"node2\", target: \"node8\", label: \"2-8\" },\n    { source: \"node2\", target: \"node9\", label: \"2-9\" },\n    { source: \"node2\", target: \"node10\", label: \"2-10\" },\n    { source: \"node2\", target: \"node11\", label: \"2-11\" },\n    { source: \"node2\", target: \"node12\", label: \"2-12\" },\n    { source: \"node2\", target: \"node13\", label: \"2-13\" },\n    { source: \"node3\", target: \"node14\", label: \"3-14\" },\n    { source: \"node3\", target: \"node15\", label: \"3-15\" },\n    { source: \"node3\", target: \"node16\", label: \"3-16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hide-item/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * hide-item\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          \"drag-node\",\n          {\n            type: \"drag-canvas\",\n            enableOptimize: true, // enable the optimize to hide the shapes beside nodes' keyShape\n          },\n          {\n            type: \"zoom-canvas\",\n            enableOptimize: true, // enable the optimize to hide the shapes beside nodes' keyShape\n          },\n        ],\n      },\n      defaultNode: {\n        size: [10, 10],\n        style: {\n          lineWidth: 2,\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          stroke: \"#e2e2e2\",\n          lineAppendWidth: 2,\n        },\n      },\n      nodeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n      edgeStateStyles: {\n        yourStateName: {\n          stroke: \"#f00\",\n          lineWidth: 3,\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hide-item/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"拖拽画布时候隐藏\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hide-item/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hide-item/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/highlight-dark/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/highlight-dark/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * highlight-dark:自定义高亮\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerLayout(\"force\", force);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // const tooltip = new F6.Tooltip({\n    //   offsetX: 10,\n    //   offsetY: 10,\n    //   fixToNode: [1, 0.5],\n    //   // the types of items that allow the tooltip show up\n    //   // 允许出现 tooltip 的 item 类型\n    //   itemTypes: ['node', 'edge'],\n    //   // custom the tooltip's content\n    //   // 自定义 tooltip 内容\n    //   getContent: (e) => {\n    //     const outDiv = document.createElement('div');\n    //     outDiv.style.width = 'fit-content';\n    //     outDiv.style.height = 'fit-content';\n    //     const model = e.item.getModel();\n    //     if (e.item.getType() === 'node') {\n    //       outDiv.innerHTML = `${model.name}`;\n    //     } else {\n    //       const source = e.item.getSource();\n    //       const target = e.item.getTarget();\n    //       outDiv.innerHTML = `来源：${source.getModel().name}<br/>去向：${target.getModel().name}`;\n    //     }\n    //     return outDiv;\n    //   },\n    // });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      // plugins: [tooltip],\n      layout: {\n        type: \"force\",\n        edgeStrength: 0.7,\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        size: [10, 10],\n        style: {\n          lineWidth: 2,\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        size: 1,\n        style: {\n          stroke: \"#e2e2e2\",\n          lineAppendWidth: 2,\n        },\n      },\n      nodeStateStyles: {\n        highlight: {\n          opacity: 1,\n        },\n        dark: {\n          opacity: 0.2,\n        },\n      },\n      edgeStateStyles: {\n        highlight: {\n          stroke: \"#999\",\n        },\n      },\n    });\n\n    // 监听\n    function clearAllStats() {\n      this.graph.setAutoPaint(false);\n      this.graph.getNodes().forEach(function (node) {\n        this.graph.clearItemStates(node);\n      });\n      this.graph.getEdges().forEach(function (edge) {\n        this.graph.clearItemStates(edge);\n      });\n      this.graph.paint();\n      this.graph.setAutoPaint(true);\n    }\n\n    this.graph.on(\"node:mouseenter\", function (e) {\n      const { item } = e;\n      this.graph.setAutoPaint(false);\n      this.graph.getNodes().forEach(function (node) {\n        this.graph.clearItemStates(node);\n        this.graph.setItemState(node, \"dark\", true);\n      });\n      this.graph.setItemState(item, \"dark\", false);\n      this.graph.setItemState(item, \"highlight\", true);\n      this.graph.getEdges().forEach(function (edge) {\n        if (edge.getSource() === item) {\n          this.graph.setItemState(edge.getTarget(), \"dark\", false);\n          this.graph.setItemState(edge.getTarget(), \"highlight\", true);\n          this.graph.setItemState(edge, \"highlight\", true);\n          edge.toFront();\n        } else if (edge.getTarget() === item) {\n          this.graph.setItemState(edge.getSource(), \"dark\", false);\n          this.graph.setItemState(edge.getSource(), \"highlight\", true);\n          this.graph.setItemState(edge, \"highlight\", true);\n          edge.toFront();\n        } else {\n          this.graph.setItemState(edge, \"highlight\", false);\n        }\n      });\n      this.graph.paint();\n      this.graph.setAutoPaint(true);\n    });\n    this.graph.on(\"node:mouseleave\", clearAllStats);\n    this.graph.on(\"canvas:tap\", clearAllStats);\n\n    this.graph.data({\n      nodes: data.nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/highlight-dark/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义高亮\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/highlight-dark/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/highlight-dark/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hull/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hull/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * hull:用轮廓包裹节点集合\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    discription: \"Wait for the layout to complete...\",\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerLayout(\"force\", force);\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const { nodes } = data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 50,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\", \"lasso-select\"],\n      },\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        linkDistance: (d) => {\n          if (d.source.id === \"node0\") {\n            return 300;\n          }\n          return 60;\n        },\n        nodeStrength: (d) => {\n          if (d.isLeaf) {\n            return -50;\n          }\n          return -10;\n        },\n        edgeStrength: (d) => {\n          if (\n            d.source.id === \"node1\" ||\n            d.source.id === \"node2\" ||\n            d.source.id === \"node3\"\n          ) {\n            return 0.7;\n          }\n          return 0.1;\n        },\n      },\n    });\n\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    const centerNodes = this.graph\n      .getNodes()\n      .filter((node) => !node.getModel().isLeaf);\n\n    this.graph.on(\"afterlayout\", () => {\n      this.setData({\n        discription: \"\",\n      });\n      const hull1 = this.graph.createHull({\n        id: \"centerNode-hull\",\n        type: \"bubble\",\n        members: centerNodes,\n        padding: 10,\n      });\n\n      const hull2 = this.graph.createHull({\n        id: \"leafNode-hull1\",\n        members: [\"node6\", \"node7\"],\n        padding: 10,\n        style: {\n          fill: \"lightgreen\",\n          stroke: \"green\",\n        },\n      });\n\n      const hull3 = this.graph.createHull({\n        id: \"leafNode-hull2\",\n        members: [\"node8\", \"node9\", \"node10\", \"node11\", \"node12\", \"node13\"],\n        padding: 10,\n        style: {\n          fill: \"lightgreen\",\n          stroke: \"green\",\n        },\n      });\n\n      this.graph.on(\"afterupdateitem\", () => {\n        hull1.updateData(hull1.members);\n        hull2.updateData(hull2.members);\n        hull3.updateData(hull3.members);\n      });\n    });\n\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hull/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"用轮廓包裹节点集合\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hull/index.wxml",
    "content": "<view>{{discription}}</view>\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/hull/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 150,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 150,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * move\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    function handleNodeClick(event) {\n      const { item } = event;\n      // animately move the graph to focus on the item.\n      // the second parameter controlls whether move with animation, the third parameter is the animate configuration\n      this.graph.focusItem(item);\n    }\n\n    // listen to the node click event\n    this.graph.on(\"node:tap\", handleNodeClick);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"点击节点移动\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move-animate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 150,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 150,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move-animate/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * move-animate\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n        },\n      },\n      // The global configuration for graph animation also takes effect on the focusItem\n      // animate: true,\n      // animateCfg: {\n      //   easing: 'easeCubic',\n      //   duration: 500\n      // }\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    function handleNodeClick(event) {\n      const { item } = event;\n      // animately move the graph to focus on the item.\n      // the second parameter controlls whether move with animation, the third parameter is the animate configuration\n      this.graph.focusItem(item, true, {\n        easing: \"easeCubic\",\n        duration: 500,\n      });\n    }\n\n    // listen to the node click event\n    this.graph.on(\"node:tap\", handleNodeClick);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move-animate/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"点击节点动画\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move-animate/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/move-animate/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/partial-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 150,\n      label: \"node1\",\n      size: 100,\n      type: \"customNode\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 150,\n      label: \"node2\",\n      size: 100,\n      type: \"customNode\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/partial-node/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * partial-node\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义节点\n    F6.registerNode(\n      \"customNode\",\n      {\n        // 绘制节点\n        drawShape: function drawShape(cfg, group) {\n          const { shapeType } = this;\n          const style = Object.assign({}, this.getShapeStyle(cfg), {\n            x: 0,\n            y: 0,\n            r: 50,\n          });\n          const shape = group.addShape(shapeType, {\n            attrs: style,\n            name: \"key-shape\",\n          });\n          // 绘制节点里面的小圆。点击这个小圆会显示tooltip\n          group.addShape(\"circle\", {\n            attrs: {\n              x: 0,\n              y: -30,\n              r: 10,\n              fill: \"#096dd9\",\n              cursor: \"pointer\",\n            },\n            name: \"circle-shape\",\n          });\n          return shape;\n        },\n      },\n      \"circle\",\n    );\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          {\n            type: \"drag-node\",\n            delegate: false,\n          },\n        ],\n      },\n      defaultNode: {\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n        labelCfg: {\n          style: {\n            fontSize: 12,\n          },\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#e2e2e2\",\n        },\n      },\n      nodeStateStyles: {\n        selected: {\n          stroke: \"red\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n\n    // 节点上的点击事件\n    this.graph.on(\"node:tap\", (event) => {\n      const { item } = event;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n\n    this.graph.on(\"circle-shape:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.updateItem(item, {\n        label: \"点击了局部\",\n        labelCfg: {\n          style: {\n            fill: \"#003a8c\",\n            fontSize: 16,\n          },\n        },\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/partial-node/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"响应节点中部分区域\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/partial-node/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/partial-node/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/set-mode/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 200,\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n    },\n    {\n      id: \"node3\",\n      x: 300,\n      y: 300,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge1\",\n      target: \"node2\",\n      source: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/set-mode/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\n\n/**\n * setMode\n */\n// const modeNum = 0; // 用来标记选择的模式\n// const modeList = ['默认模式', '添加节点模式', '添加边模式'];\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n    currentMode: \"请选择模式\",\n    showDialog: false,\n    groups: [\n      { text: \"示例菜单\", value: 1 },\n      { text: \"示例菜单\", value: 2 },\n      { text: \"负向菜单\", type: \"warn\", value: 3 },\n    ],\n  },\n\n  tapButton(event) {\n    console.log(event);\n    const { mode } = event.target.dataset;\n    console.log(mode);\n    this.graph.setMode(mode);\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    // 注册自定义节点\n    let addedCount = 0;\n    // Register a custom behavior: add a node when user click the blank part of canvas\n    F6.registerBehavior(\"click-add-node\", {\n      // Set the events and the corresponding responsing function for this behavior\n      getEvents() {\n        // The event is canvas:click, the responsing function is onClick\n        return {\n          \"canvas:click\": \"onClick\",\n        };\n      },\n      // Click event\n      onClick(ev) {\n        const self = this;\n        const { graph } = self;\n        // Add a new node\n        graph.addItem(\"node\", {\n          x: ev.canvasX,\n          y: ev.canvasY,\n          id: `node-${addedCount}`, // Generate the unique id\n        });\n        addedCount++;\n      },\n    });\n    // Register a custom behavior: click two end nodes to add an edge\n    F6.registerBehavior(\"click-add-edge\", {\n      // Set the events and the corresponding responsing function for this behavior\n      getEvents() {\n        return {\n          \"node:click\": \"onClick\", // The event is canvas:click, the responsing function is onClick\n          mousemove: \"onMousemove\", // The event is mousemove, the responsing function is onMousemove\n          \"edge:click\": \"onEdgeClick\", // The event is edge:click, the responsing function is onEdgeClick\n        };\n      },\n      // The responsing function for node:click defined in getEvents\n      onClick(ev) {\n        const self = this;\n        const node = ev.item;\n        const { graph } = self;\n        // The position where the mouse clicks\n        // const point = { x: ev.x, y: ev.y };\n        const model = node.getModel();\n        if (self.addingEdge && self.edge) {\n          graph.updateItem(self.edge, {\n            target: model.id,\n          });\n\n          self.edge = null;\n          self.addingEdge = false;\n        } else {\n          // Add anew edge, the end node is the current node user clicks\n          self.edge = graph.addItem(\"edge\", {\n            source: model.id,\n            target: model.id,\n          });\n          self.addingEdge = true;\n        }\n      },\n      // The responsing function for mousemove defined in getEvents\n      onMousemove(ev) {\n        const self = this;\n        // The current position the mouse clicks\n        const point = { x: ev.x, y: ev.y };\n        if (self.addingEdge && self.edge) {\n          // Update the end node to the current node the mouse clicks\n          self.graph.updateItem(self.edge, {\n            target: point,\n          });\n        }\n      },\n      // The responsing function for edge:click defined in getEvents\n      onEdgeClick(ev) {\n        const self = this;\n        const currentEdge = ev.item;\n        if (self.addingEdge && self.edge === currentEdge) {\n          self.graph.removeItem(self.edge);\n          self.edge = null;\n          self.addingEdge = false;\n        }\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      // The sets of behavior modes\n      modes: {\n        // Defualt mode\n        default: [\"drag-node\", \"click-select\"],\n        // Adding node mode\n        addNode: [\"click-add-node\", \"click-select\"],\n        // Adding edge mode\n        addEdge: [\"click-add-edge\", \"click-select\"],\n      },\n      // The node styles in different states\n      nodeStateStyles: {\n        // The node styles in selected state\n        selected: {\n          stroke: \"#666\",\n          lineWidth: 2,\n          fill: \"steelblue\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/set-mode/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"设置交互模式\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/set-mode/index.wxml",
    "content": "<!-- 按钮 -->\n<view bindtap='tapButton'> \n  <button class=\"choice-button\" data-mode=\"default\">默认模式</button>\n  <button class=\"choice-button\" data-mode=\"addNode\">添加节点模式</button>\n  <button class=\"choice-button\" data-mode=\"addEdge\">添加边模式</button>\n</view>\n\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-interactive/pages/interactive/set-mode/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.choice-button {\n  color: #06ae56;\n  margin-bottom: 5px;\n  background-color: #f2f2f2;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/bundling/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/bundling/index.js",
    "content": "import data from \"./data\";\nimport F6 from \"@antv/f6-wx\";\nimport CircularLayout from \"@antv/f6-wx/extends/layout/circularLayout\";\nimport { Bundling } from \"@antv/f6-plugin/f6Plugin\";\n\nF6.registerLayout(\"circular\", CircularLayout);\n\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const edgeBundling = new Bundling({\n      bundleThreshold: 0.1,\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      width,\n      height,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\"],\n      },\n      layout: {\n        type: \"circular\",\n        center: [width / 2, height / 2],\n        radius: height / 2.5,\n        ordering: null,\n      },\n      plugins: [edgeBundling],\n      defaultNode: {\n        size: [20, 20],\n        color: \"steelblue\",\n      },\n      defaultEdge: {\n        size: 1,\n        color: \"#999\",\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n    setTimeout(() => {\n      edgeBundling.bundling(data);\n    }, 1000);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/bundling/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"边绑定\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/bundling/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/bundling/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/edge-filter/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/edge-filter/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport data from \"./data\";\nimport { EdgeFilterLens } from \"@antv/f6-plugin/f6Plugin\";\n\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    data.edges.forEach((edge) => {\n      edge.color = \"#aaa\";\n      edge.size = 2;\n      edge.style = {\n        opacity: 0.7,\n      };\n      edge.label = \"a\";\n    });\n    const filterConfigs = {\n      trigger: \"drag\",\n      showLabel: \"edge\",\n      r: 60,\n    };\n    const filterLens = new EdgeFilterLens(filterConfigs);\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      pixelRatio,\n      width,\n      height,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [filterLens],\n      defaultEdge: {\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            stroke: \"#fff\",\n            lineWidth: 2,\n          },\n        },\n      },\n      defaultNode: {\n        size: 15,\n        color: \"#5B8FF9\",\n        style: {\n          lineWidth: 2,\n          fill: \"#C6E5FF\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.getEdges().forEach((edge) => {\n      edge\n        .getContainer()\n        .getChildren()\n        .forEach((shape) => {\n          if (shape.get(\"type\") === \"text\") shape.set(\"visible\", false);\n        });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/edge-filter/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"边过滤\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/edge-filter/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/edge-filter/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/fish-eye/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/fish-eye/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport data from \"./data\";\nimport { Fisheye } from \"@antv/f6-plugin/f6Plugin\";\n\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const fisheye = new Fisheye({\n      r: 200,\n      trigger: \"drag\",\n    });\n    const colors = [\n      \"#8FE9FF\",\n      \"#87EAEF\",\n      \"#FFC9E3\",\n      \"#A7C2FF\",\n      \"#FFA1E3\",\n      \"#FFE269\",\n      \"#BFCFEE\",\n      \"#FFA0C5\",\n      \"#D5FF86\",\n    ];\n\n    data.nodes.forEach((node) => {\n      node.label = node.id;\n      node.size = Math.random() * 30 + 10;\n      node.style = {\n        fill: colors[Math.floor(Math.random() * 9)],\n        lineWidth: 0,\n      };\n    });\n\n    this.graph = new F6.Graph({\n      renderer: this.renderer,\n      container: this.canvas,\n      context: this.ctx,\n      pixelRatio,\n      width,\n      height,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [fisheye],\n    });\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/fish-eye/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"鱼眼组件\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/fish-eye/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/fish-eye/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/legend/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"person A\",\n      label: \"person A\",\n      // the attributes for drawing donut\n      donutAttrs: {\n        income: 10,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person B\",\n      label: \"person B\",\n      donutAttrs: {\n        income: 20,\n        outcome: 10,\n        unknown: 5,\n      },\n    },\n    {\n      id: \"person C\",\n      label: \"person C\",\n      donutAttrs: {\n        income: 200,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person D\",\n      label: \"person D\",\n      donutAttrs: {\n        income: 50,\n        outcome: 10,\n        unknown: 15,\n      },\n    },\n    {\n      id: \"person E\",\n      label: \"person E\",\n      donutAttrs: {\n        income: 80,\n        outcome: 40,\n        unknown: 45,\n      },\n    },\n    {\n      id: \"person F\",\n      label: \"person F\",\n      donutAttrs: {\n        income: 90,\n        outcome: 110,\n        unknown: 15,\n      },\n    },\n  ],\n  edges: [\n    { source: \"person C\", target: \"person F\", size: 10 },\n    { source: \"person B\", target: \"person A\", size: 5 },\n    { source: \"person D\", target: \"person E\", size: 20 },\n    { source: \"person D\", target: \"person C\", size: 5 },\n    { source: \"person B\", target: \"person C\", size: 10 },\n    { source: \"person A\", target: \"person C\", size: 5 },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.label = `Transfer $${edge.size}`;\n});\n\nconst colors = {\n  income: \"#61DDAA\",\n  outcome: \"#F08BB4\",\n  unknown: \"#65789B\",\n};\n\ndata.nodes.forEach((node) => {\n  node.donutColorMap = colors;\n  node.size = 0;\n  Object.keys(node.donutAttrs).forEach((key) => {\n    node.size += node.donutAttrs[key];\n  });\n  node.size = Math.sqrt(node.size) * 5;\n});\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"income\",\n      label: \"Income\",\n      order: 0,\n      style: {\n        fill: \"#61DDAA\",\n      },\n    },\n    {\n      id: \"outcome\",\n      label: \"Outcome\",\n      order: 2,\n      style: {\n        fill: \"#F08BB4\",\n      },\n    },\n    {\n      id: \"unknown\",\n      label: \"Unknown\",\n      order: 2,\n      style: {\n        fill: \"#65789B\",\n      },\n    },\n  ],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/legend/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport { data, legendData } from \"./data\";\nimport { Legend } from \"@antv/f6-plugin/f6Plugin\";\n\nimport radialLayout from \"@antv/f6-wx/extends/layout/radialLayout\";\n\nF6.registerLayout(\"radial\", radialLayout);\n/**\n * donut-transfer\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const legend = new Legend({\n      width: 300,\n      height: 80,\n      offsetY: 0,\n      offsetX: 0,\n      data: legendData,\n      align: \"center\",\n      layout: \"horizontal\", // vertical\n      position: \"top-left\",\n      padding: 10,\n      margin: 0,\n      containerStyle: {\n        fill: \"#ccc\",\n        lineWidth: 1,\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: false,\n      plugins: [legend], // 这里的plugin不知道能不能用\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        focusNode: \"li\",\n        linkDistance: 200,\n        unitRadius: 200,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: true,\n        },\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            stroke: \"#fff\",\n            lineWidth: 5,\n          },\n        },\n      },\n      defaultNode: {\n        type: \"donut\",\n        style: {\n          lineWidth: 0,\n        },\n        labelCfg: {\n          position: \"bottom\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/legend/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"图例\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/legend/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/legend/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/menu/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      x: 200,\n      y: 100,\n      type: \"rect\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n      x: 250,\n      y: 250,\n      type: \"rect\",\n    },\n    {\n      id: \"node3\",\n      label: \"node3\",\n      x: 350,\n      y: 100,\n      type: \"rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"Test Label\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      label: \"Test Label 2\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/menu/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport data from \"./data\";\nimport { Menu } from \"@antv/f6-plugin/f6Plugin\";\n\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const contextMenu = new Menu({\n      getContent(evt) {\n        let header;\n        if (evt.target && evt.target.isCanvas && evt.target.isCanvas()) {\n          header = \"Canvas ContextMenu\";\n        } else if (evt.item) {\n          const itemType = evt.item.getType();\n          header = `${itemType.toUpperCase()} ContextMenu`;\n        }\n        return `\n        <div class=\"container\">\n          <div class=\"header\" title=\"header\">${header}</div>\n          <div>\n            <div class=\"li\" title=\"1\">div 1</div>\n            <div class=\"li\" title=\"2\">div 2</div>\n          </div>\n        </div>\n        `;\n      },\n      getCss: () => {\n        return `\n          .container {\n            opacity: 0.9;\n            width: 150;\n            padding: 10 8;\n            border: 1 solid #e2e2e2;\n          }\n          .header {\n            padding-bottom: 10;\n            font-weight: bold;\n          }\n          .li {\n            padding-bottom: 10;\n          }\n        `;\n      },\n      handleMenuClick: (target) => {\n        wx.showToast({\n          title: `点击了: ${target.title}`,\n        });\n      },\n      // offsetX and offsetY include the padding of the parent container\n      // 需要加上父级容器的 padding-left 16 与自身偏移量 10\n      offsetX: 0,\n      // 需要加上父级容器的 padding-top 24 、画布兄弟元素高度、与自身偏移量 10\n      offsetY: 0,\n      // the types of items that allow the menu show up\n      // 在哪些类型的元素上响应\n      itemTypes: [\"node\", \"edge\", \"canvas\"],\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      width,\n      height,\n      linkCenter: true,\n      fitView: true,\n      plugins: [contextMenu],\n      defaultNode: {\n        size: [80, 40],\n        type: \"rect\",\n        style: {\n          fill: \"#DEE9FF\",\n          stroke: \"#5B8FF9\",\n        },\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#b5b5b5\",\n          lineAppendWidth: 3, // Enlarge the range the edge to be hitted\n        },\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            // A white stroke with width 5 helps show the label more clearly avoiding the interference of the overlapped edge\n            stroke: \"white\",\n            lineWidth: 5,\n          },\n        },\n      },\n      modes: {\n        default: [\"drag-node\"],\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/menu/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"上下文菜单\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/menu/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/menu/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/mini-map/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/mini-map/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport data from \"./data\";\nimport { MiniMap } from \"@antv/f6-plugin/f6Plugin\";\n\nPage({\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const sys = wx.getSystemInfoSync();\n    const { windowWidth, windowHeight, pixelRatio } = sys;\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    console.log(ctx, canvas, renderer);\n    const miniMap = new MiniMap({\n      className: \"custom-container\",\n      viewportClassName: \"custom-viewport\",\n      getCss: () => {\n        return `\n          .custom-container {\n            top: 0;\n            background: #eee;\n            border: 1 solid #333;\n          }\n          .custom-viewport {\n            border:1 solid blue;\n          }\n        `;\n      },\n    });\n    const { width, height, pixelRatio } = this.data;\n    console.log(\"------->\", ctx, canvas, renderer);\n    this.graph = new F6.Graph({\n      container: canvas,\n      context: ctx,\n      renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      defaultNode: {\n        size: 30,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [miniMap],\n    });\n    this.graph.data(data);\n    this.graph.render();\n\n    // 目前在使用plugin时,需要关闭局部刷新\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/mini-map/index.json",
    "content": "{\n  \"defaultTitle\": \"navigationBarTitleText\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/mini-map/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/mini-map/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/snap-line/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/snap-line/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport data from \"./data\";\nimport { SnapLine } from \"@antv/f6-plugin/f6Plugin\";\n\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const snapLine = new SnapLine();\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      container: this.canvas,\n      pixelRatio,\n      width,\n      height,\n      linkCenter: true,\n      defaultNode: {\n        size: 30,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [snapLine],\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/snap-line/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"对齐线\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/snap-line/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/snap-line/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/time-bar/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport { TimeBar } from \"@antv/f6-plugin/f6Plugin\";\n\n/**\n * basic-arc-diagram\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const data = {\n      nodes: [],\n      edges: [],\n    };\n\n    for (let i = 0; i < 50; i++) {\n      const id = `node-${i}`;\n      data.nodes.push({\n        id,\n        date: Number(`2020${i}`),\n        value: Math.round(Math.random() * 300),\n      });\n\n      data.edges.push({\n        source: `node-${Math.round(Math.random() * 90)}`,\n        target: `node-${Math.round(Math.random() * 90)}`,\n      });\n    }\n\n    const timeBarData = [];\n\n    for (let i = 0; i < 50; i++) {\n      timeBarData.push({\n        date: Number(`2020${i}`),\n        value: Math.round(Math.random() * 300),\n      });\n    }\n    const timebar = new TimeBar({\n      x: 0,\n      y: 0,\n      width,\n      padding: 0,\n      type: \"simple\",\n      data: timeBarData,\n    });\n\n    this.graph = new F6.Graph({\n      renderer: this.renderer,\n      context: this.ctx,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      localRefresh: false,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      animate: false,\n      defaultNode: {\n        size: 30,\n      },\n      plugins: [timebar],\n    });\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n    this.graph.data(data);\n    this.graph.render();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/time-bar/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"时间轴\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/time-bar/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/time-bar/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/tool-tip/data.js",
    "content": "export default {\n  id: \"g1\",\n  name: \"Name1\",\n  count: 123456,\n  label: \"538.90\",\n  currency: \"Yuan\",\n  rate: 1.0,\n  status: \"B\",\n  variableName: \"V1\",\n  variableValue: 0.341,\n  variableUp: false,\n  children: [\n    {\n      id: \"g12\",\n      name: \"Deal with LONG label LONG label LONG label LONG label\",\n      count: 123456,\n      label: \"338.00\",\n      rate: 0.627,\n      status: \"R\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.179,\n      variableUp: true,\n      children: [\n        {\n          id: \"g121\",\n          name: \"Name3\",\n          collapsed: true,\n          count: 123456,\n          label: \"138.00\",\n          rate: 0.123,\n          status: \"B\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.27,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1211\",\n              name: \"Name4\",\n              count: 123456,\n              label: \"138.00\",\n              rate: 1.0,\n              status: \"B\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.164,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g122\",\n          name: \"Name5\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.259,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1221\",\n              name: \"Name6\",\n              count: 123456,\n              label: \"40.00\",\n              rate: 0.4,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.135,\n              variableUp: true,\n              children: [\n                {\n                  id: \"g12211\",\n                  name: \"Name6-1\",\n                  count: 123456,\n                  label: \"40.00\",\n                  rate: 1.0,\n                  status: \"R\",\n                  currency: \"Yuan\",\n                  variableName: \"V1\",\n                  variableValue: 0.181,\n                  variableUp: true,\n                  children: [],\n                },\n              ],\n            },\n            {\n              id: \"g1222\",\n              name: \"Name7\",\n              count: 123456,\n              label: \"60.00\",\n              rate: 0.6,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.239,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g123\",\n          name: \"Name8\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"DI\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.131,\n          variableUp: false,\n          children: [\n            {\n              id: \"g1231\",\n              name: \"Name8-1\",\n              count: 123456,\n              label: \"100.00\",\n              rate: 1.0,\n              status: \"DI\",\n              currency: \"Yuan\",\n              variableName: \"V2\",\n              variableValue: 0.131,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"g13\",\n      name: \"Name9\",\n      count: 123456,\n      label: \"100.90\",\n      rate: 0.187,\n      status: \"B\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.221,\n      variableUp: true,\n      children: [\n        {\n          id: \"g131\",\n          name: \"Name10\",\n          count: 123456,\n          label: \"33.90\",\n          rate: 0.336,\n          status: \"R\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.12,\n          variableUp: true,\n          children: [],\n        },\n        {\n          id: \"g132\",\n          name: \"Name11\",\n          count: 123456,\n          label: \"67.00\",\n          rate: 0.664,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.241,\n          variableUp: false,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"g14\",\n      name: \"Name12\",\n      count: 123456,\n      label: \"100.00\",\n      rate: 0.186,\n      status: \"G\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.531,\n      variableUp: true,\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/tool-tip/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\nimport mockData from \"./data\";\nimport { Tooltip } from \"@antv/f6-plugin/f6Plugin\";\n\n/**\n * decision-tree\n */\n\nconst colors = {\n  B: \"#5B8FF9\",\n  R: \"#F46649\",\n  Y: \"#EEBC20\",\n  G: \"#5BD8A6\",\n  DI: \"#A7A7A7\",\n};\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 默认配置\n    const defaultConfig = {\n      width,\n      height,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\"],\n      },\n      fitView: true,\n      animate: true,\n      defaultNode: {\n        type: \"flow-rect\",\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#CED4D9\",\n        },\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"LR\",\n        dropCap: false,\n        indent: 300,\n        getHeight: () => {\n          return 60;\n        },\n      },\n    };\n\n    //  组件props\n    const props = {\n      data: mockData,\n      config: {\n        padding: [20, 50],\n        defaultLevel: 3,\n        defaultZoom: 0.8,\n        modes: { default: [\"zoom-canvas\", \"drag-canvas\"] },\n      },\n    };\n\n    // 自定义节点、边\n    const registerFn = () => {\n      /**\n       * 自定义节点\n       */\n      F6.registerNode(\n        \"flow-rect\",\n        {\n          shapeType: \"flow-rect\",\n          draw(cfg, group) {\n            const {\n              name = \"\",\n              variableName,\n              variableValue,\n              variableUp,\n              label,\n              collapsed,\n              currency,\n              status,\n              // rate,\n            } = cfg;\n            const grey = \"#CED4D9\";\n            // 逻辑不应该在这里判断\n            const rectConfig = {\n              width: 202,\n              height: 60,\n              lineWidth: 1,\n              fontSize: 12,\n              fill: \"#fff\",\n              radius: 4,\n              stroke: grey,\n              opacity: 1,\n            };\n\n            const nodeOrigin = {\n              x: -rectConfig.width / 2,\n              y: -rectConfig.height / 2,\n            };\n\n            const textConfig = {\n              textAlign: \"left\",\n              textBaseline: \"bottom\",\n            };\n\n            const rect = group.addShape(\"rect\", {\n              attrs: {\n                x: nodeOrigin.x,\n                y: nodeOrigin.y,\n                ...rectConfig,\n              },\n            });\n\n            const rectBBox = rect.getBBox();\n\n            // label title\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: 20 + nodeOrigin.y,\n                text: name.length > 28 ? `${name.substr(0, 28)}...` : name,\n                fontSize: 12,\n                opacity: 0.85,\n                fill: \"#000\",\n                cursor: \"pointer\",\n              },\n              name: \"name-shape\",\n            });\n\n            // price\n            const price = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: rectBBox.maxY - 12,\n                text: label,\n                fontSize: 16,\n                fill: \"#000\",\n                opacity: 0.85,\n              },\n            });\n\n            // label currency\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: price.getBBox().maxX + 5,\n                y: rectBBox.maxY - 12,\n                text: currency,\n                fontSize: 12,\n                fill: \"#000\",\n                opacity: 0.75,\n              },\n            });\n\n            // percentage\n            const percentText = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: rectBBox.maxX - 8,\n                y: rectBBox.maxY - 12,\n                text: `${((variableValue || 0) * 100).toFixed(2)}%`,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: colors[status],\n              },\n            });\n\n            // percentage triangle\n            const symbol = variableUp ? \"triangle\" : \"triangle-down\";\n            const triangle = group.addShape(\"marker\", {\n              attrs: {\n                ...textConfig,\n                x: percentText.getBBox().minX - 10,\n                y: rectBBox.maxY - 12 - 6,\n                symbol,\n                r: 6,\n                fill: colors[status],\n              },\n            });\n\n            // variable name\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: triangle.getBBox().minX - 4,\n                y: rectBBox.maxY - 12,\n                text: variableName,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: \"#000\",\n                opacity: 0.45,\n              },\n            });\n\n            // bottom line background\n            // const bottomBackRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rectConfig.width,\n            //     height: 4,\n            //     radius: [0, 0, rectConfig.radius, rectConfig.radius],\n            //     fill: '#E0DFE3',\n            //   },\n            // });\n\n            // bottom percent\n            // const bottomRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rate * rectBBox.width,\n            //     height: 4,\n            //     radius: [0, 0, 0, rectConfig.radius],\n            //     fill: colors[status],\n            //   },\n            // });\n\n            // collapse rect\n            if (cfg.children && cfg.children.length) {\n              group.addShape(\"rect\", {\n                attrs: {\n                  x: rectConfig.width / 2 - 8,\n                  y: -8,\n                  width: 16,\n                  height: 16,\n                  stroke: \"rgba(0, 0, 0, 0.25)\",\n                  cursor: \"pointer\",\n                  fill: \"#fff\",\n                },\n                name: \"collapse-back\",\n                modelId: cfg.id,\n              });\n\n              // collpase text\n              group.addShape(\"text\", {\n                attrs: {\n                  x: rectConfig.width / 2,\n                  y: -1,\n                  textAlign: \"center\",\n                  textBaseline: \"middle\",\n                  text: collapsed ? \"+\" : \"-\",\n                  fontSize: 16,\n                  cursor: \"pointer\",\n                  fill: \"rgba(0, 0, 0, 0.25)\",\n                },\n                name: \"collapse-text\",\n                modelId: cfg.id,\n              });\n            }\n\n            this.drawLinkPoints(cfg, group);\n            return rect;\n          },\n          update(cfg, item) {\n            const group = item.getContainer();\n            this.updateLinkPoints(cfg, group);\n          },\n          setState(name, value, item) {\n            if (name === \"collapse\") {\n              const group = item.getContainer();\n              const collapseText = group.find(\n                (e) => e.get(\"name\") === \"collapse-text\",\n              );\n              if (collapseText) {\n                if (!value) {\n                  collapseText.attr({\n                    text: \"-\",\n                  });\n                } else {\n                  collapseText.attr({\n                    text: \"+\",\n                  });\n                }\n              }\n            }\n          },\n          getAnchorPoints() {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n            ];\n          },\n        },\n        \"rect\",\n      );\n\n      F6.registerEdge(\n        \"flow-cubic\",\n        {\n          getControlPoints(cfg) {\n            let { controlPoints } = cfg; // 指定controlPoints\n            if (!controlPoints || !controlPoints.length) {\n              const { startPoint, endPoint, sourceNode, targetNode } = cfg;\n              const {\n                x: startX,\n                y: startY,\n                coefficientX,\n                coefficientY,\n              } = sourceNode ? sourceNode.getModel() : startPoint;\n              const { x: endX, y: endY } = targetNode\n                ? targetNode.getModel()\n                : endPoint;\n              let curveStart = (endX - startX) * coefficientX;\n              let curveEnd = (endY - startY) * coefficientY;\n              curveStart = curveStart > 40 ? 40 : curveStart;\n              curveEnd = curveEnd < -30 ? curveEnd : -30;\n              controlPoints = [\n                { x: startPoint.x + curveStart, y: startPoint.y },\n                { x: endPoint.x + curveEnd, y: endPoint.y },\n              ];\n            }\n            return controlPoints;\n          },\n          getPath(points) {\n            const path = [];\n            path.push([\"M\", points[0].x, points[0].y]);\n            path.push([\n              \"C\",\n              points[1].x,\n              points[1].y,\n              points[2].x,\n              points[2].y,\n              points[3].x,\n              points[3].y,\n            ]);\n            return path;\n          },\n        },\n        \"single-line\",\n      );\n    };\n    registerFn();\n\n    const { config } = props;\n    const tooltip = new Tooltip({\n      trigger: \"press\",\n      // TODO: _f2.default.Tooltip is not a constructor\n      // offsetX and offsetY include the padding of the parent container\n      // the types of items that allow the tooltip show up\n      // 允许出现 tooltip 的 item 类型\n      itemTypes: [\"node\"],\n      // custom the tooltip's content\n      // 自定义 tooltip 内容\n      getContent: (e) => {\n        // outDiv.style.padding = '0px 0px 20px 0px';\n        return `\n          <div class=\"f6-tooltip-container\">\n            <div>Custom Content</div>\n            <div class='tooltip-type'>Type: ${e.item.getType()}</div>\n            <div class='tooltip-id'>Label: ${\n              e.item.getModel().label || e.item.getModel().id\n            }</div>\n          </div>\n      `;\n      },\n      getCss: () => `\n        .f6-tooltip-container {\n          position: absolute;\n          width: 150;\n          border: 1 solid #e2e2e2;\n          border-radius: 4;\n          font-size: 12;\n          color: #545454;\n          background-color: rgba(255, 255, 255, 0.9);\n          padding: 10 8;\n        }\n    \n        .f6-tooltip-container div{\n          height: 20;\n        }\n        \n        .tooltip-type {\n          padding: 0;\n          margin: 0;\n        }\n        .tooltip-id {\n          color: #531dab;\n        }\n      `,\n      shouldBegin: (e) => {\n        if (e.target.get(\"name\") === \"name-shape\") return true;\n        return true;\n      },\n    });\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n\n      ...defaultConfig,\n      ...config,\n      plugins: [tooltip],\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n        requestAnimationFrame: this.canvas.requestAnimationFrame,\n        cancelAnimationFrame: this.canvas.cancelAnimationFrame,\n      },\n    });\n\n    this.graph.data(mockData);\n    this.graph.render();\n    this.graph.fitView();\n    this.graph.zoom(config.defaultZoom || 1);\n\n    const handleCollapse = (e) => {\n      const { target } = e;\n      const id = target.get(\"modelId\");\n      const item = this.graph.findById(id);\n      const nodeModel = item.getModel();\n      nodeModel.collapsed = !nodeModel.collapsed;\n      this.graph.layout();\n      this.graph.setItemState(item, \"collapse\", nodeModel.collapsed);\n    };\n    this.graph.on(\"collapse-text:tap\", (e) => {\n      handleCollapse(e);\n    });\n    this.graph.on(\"collapse-back:tap\", (e) => {\n      handleCollapse(e);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/tool-tip/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"提示框\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/tool-tip/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/tool-tip/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/zoom-slider/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/zoom-slider/index.js",
    "content": "import { ZoomSlider } from \"@antv/f6-plugin/f6Plugin\";\nimport data from \"./data\";\nimport F6 from \"@antv/f6-wx\";\n\nPage({\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    const zoomSlider = new ZoomSlider();\n    const { width, height, pixelRatio } = this.data;\n    this.graph = new F6.Graph({\n      container: canvas,\n      context: ctx,\n      width,\n      height,\n      pixelRatio,\n      fitView: \"center\",\n      linkCenter: true,\n      renderer,\n      defaultNode: {\n        size: 30,\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      plugins: [zoomSlider],\n    });\n    this.graph.data(data);\n    this.graph.render();\n\n    // 目前在使用plugin时,需要关闭局部刷新\n    this.graph.get(\"canvas\").set(\"localRefresh\", false);\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/zoom-slider/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"ZoomSlider\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/zoom-slider/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-plugin/pages/plugin/zoom-slider/index.wxss",
    "content": ""
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/custom-flow/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"Company1\",\n    },\n    {\n      id: \"2\",\n      label: \"Company2\",\n    },\n    {\n      id: \"3\",\n      label: \"Company3\",\n    },\n    {\n      id: \"4\",\n      label: \"Company4\",\n    },\n    {\n      id: \"5\",\n      label: \"Company5\",\n    },\n    {\n      id: \"6\",\n      label: \"Company6\",\n    },\n    {\n      id: \"7\",\n      label: \"Company7\",\n    },\n    {\n      id: \"8\",\n      label: \"Company8\",\n    },\n    {\n      id: \"9\",\n      label: \"Company9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n      data: {\n        type: \"A\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"8\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/custom-flow/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n/**\n * custom-flow\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n\n    const colorMap = {\n      A: \"#72CC4A\",\n      B: \"#1A91FF\",\n      C: \"#FFAA15\",\n    };\n    F6.registerNode(\n      \"round-rect\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const { width } = cfg.style;\n          const { stroke } = cfg.style;\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              x: -width / 2,\n              y: -15,\n              width,\n              height: 30,\n              radius: 15,\n              stroke,\n              lineWidth: 1.2,\n              fillOpacity: 1,\n            },\n            name: \"rect-shape\",\n          });\n          group.addShape(\"circle\", {\n            attrs: {\n              x: -width / 2,\n              y: 0,\n              r: 3,\n              fill: stroke,\n            },\n            name: \"circle-shape\",\n          });\n          group.addShape(\"circle\", {\n            attrs: {\n              x: width / 2,\n              y: 0,\n              r: 3,\n              fill: stroke,\n            },\n            name: \"circle-shape2\",\n          });\n          return rect;\n        },\n        getAnchorPoints: function getAnchorPoints() {\n          return [\n            [0, 0.5],\n            [1, 0.5],\n          ];\n        },\n        update: function update(cfg, item) {\n          const group = item.getContainer();\n          const children = group.get(\"children\");\n          const node = children[0];\n          const circleLeft = children[1];\n          const circleRight = children[2];\n\n          const { stroke } = cfg.style;\n\n          if (stroke) {\n            node.attr(\"stroke\", stroke);\n            circleLeft.attr(\"fill\", stroke);\n            circleRight.attr(\"fill\", stroke);\n          }\n        },\n      },\n      \"single-node\",\n    );\n\n    F6.registerEdge(\"fund-polyline\", {\n      itemType: \"edge\",\n      draw: function draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n        const { stroke } = cfg.style;\n\n        const Ydiff = endPoint.y - startPoint.y;\n\n        const slope = Ydiff !== 0 ? Math.min(500 / Math.abs(Ydiff), 20) : 0;\n\n        const cpOffset = slope > 15 ? 0 : 16;\n        const offset = Ydiff < 0 ? cpOffset : -cpOffset;\n\n        const line1EndPoint = {\n          x: startPoint.x + slope,\n          y: endPoint.y + offset,\n        };\n        const line2StartPoint = {\n          x: line1EndPoint.x + cpOffset,\n          y: endPoint.y,\n        };\n\n        // 控制点坐标\n        const controlPoint = {\n          x:\n            ((line1EndPoint.x - startPoint.x) * (endPoint.y - startPoint.y)) /\n              (line1EndPoint.y - startPoint.y) +\n            startPoint.x,\n          y: endPoint.y,\n        };\n\n        let path = [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", line1EndPoint.x, line1EndPoint.y],\n          [\n            \"Q\",\n            controlPoint.x,\n            controlPoint.y,\n            line2StartPoint.x,\n            line2StartPoint.y,\n          ],\n          [\"L\", endPoint.x, endPoint.y],\n        ];\n\n        if (Math.abs(Ydiff) <= 5) {\n          path = [\n            [\"M\", startPoint.x, startPoint.y],\n            [\"L\", endPoint.x, endPoint.y],\n          ];\n        }\n\n        const endArrow =\n          cfg.style && cfg.style.endArrow ? cfg.style.endArrow : false;\n        endArrow && (endArrow.fill = stroke);\n        const line = group.addShape(\"path\", {\n          attrs: {\n            path,\n            stroke: colorMap[cfg.data && cfg.data.type],\n            lineWidth: 1.2,\n            endArrow,\n          },\n          name: \"path-shape\",\n        });\n\n        const labelLeftOffset = 0;\n        const labelTopOffset = 8;\n        // amount\n        const amount = group.addShape(\"text\", {\n          attrs: {\n            text: cfg.data && cfg.data.amount,\n            x: line2StartPoint.x + labelLeftOffset,\n            y: endPoint.y - labelTopOffset - 2,\n            fontSize: 14,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: \"#000000D9\",\n          },\n          name: \"text-shape-amount\",\n        });\n        // type\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.data && cfg.data.type,\n            x: line2StartPoint.x + labelLeftOffset,\n            y: endPoint.y - labelTopOffset - amount.getBBox().height - 2,\n            fontSize: 10,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: \"#000000D9\",\n          },\n          name: \"text-shape-type\",\n        });\n        // date\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.data && cfg.data.date,\n            x: line2StartPoint.x + labelLeftOffset,\n            y: endPoint.y + labelTopOffset + 4,\n            fontSize: 12,\n            fontWeight: 300,\n            textAlign: \"left\",\n            textBaseline: \"middle\",\n            fill: \"#000000D9\",\n          },\n          name: \"text-shape-date\",\n        });\n        return line;\n      },\n    });\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        nodesep: 30,\n        ranksep: 100,\n      },\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"round-rect\",\n        labelCfg: {\n          style: {\n            fill: \"#000000A6\",\n            fontSize: 10,\n          },\n        },\n        style: {\n          stroke: \"#72CC4A\",\n          width: 150,\n        },\n      },\n      defaultEdge: {\n        type: \"fund-polyline\",\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n\n    const edges = this.graph.getEdges();\n    edges.forEach((edge) => {\n      const line = edge.getKeyShape();\n      const stroke = line.attr(\"stroke\");\n      const targetNode = edge.getTarget();\n      targetNode.update({\n        style: {\n          stroke,\n        },\n      });\n    });\n    this.graph.paint();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/custom-flow/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义流向图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/custom-flow/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/custom-flow/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/decision-tree/data.js",
    "content": "export default {\n  id: \"g1\",\n  name: \"Name1\",\n  count: 123456,\n  label: \"538.90\",\n  currency: \"Yuan\",\n  rate: 1.0,\n  status: \"B\",\n  variableName: \"V1\",\n  variableValue: 0.341,\n  variableUp: false,\n  children: [\n    {\n      id: \"g12\",\n      name: \"Deal with LONG label LONG label LONG label LONG label\",\n      count: 123456,\n      label: \"338.00\",\n      rate: 0.627,\n      status: \"R\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.179,\n      variableUp: true,\n      children: [\n        {\n          id: \"g121\",\n          name: \"Name3\",\n          collapsed: true,\n          count: 123456,\n          label: \"138.00\",\n          rate: 0.123,\n          status: \"B\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.27,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1211\",\n              name: \"Name4\",\n              count: 123456,\n              label: \"138.00\",\n              rate: 1.0,\n              status: \"B\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.164,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g122\",\n          name: \"Name5\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.259,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1221\",\n              name: \"Name6\",\n              count: 123456,\n              label: \"40.00\",\n              rate: 0.4,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.135,\n              variableUp: true,\n              children: [\n                {\n                  id: \"g12211\",\n                  name: \"Name6-1\",\n                  count: 123456,\n                  label: \"40.00\",\n                  rate: 1.0,\n                  status: \"R\",\n                  currency: \"Yuan\",\n                  variableName: \"V1\",\n                  variableValue: 0.181,\n                  variableUp: true,\n                  children: [],\n                },\n              ],\n            },\n            {\n              id: \"g1222\",\n              name: \"Name7\",\n              count: 123456,\n              label: \"60.00\",\n              rate: 0.6,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.239,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g123\",\n          name: \"Name8\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"DI\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.131,\n          variableUp: false,\n          children: [\n            {\n              id: \"g1231\",\n              name: \"Name8-1\",\n              count: 123456,\n              label: \"100.00\",\n              rate: 1.0,\n              status: \"DI\",\n              currency: \"Yuan\",\n              variableName: \"V2\",\n              variableValue: 0.131,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"g13\",\n      name: \"Name9\",\n      count: 123456,\n      label: \"100.90\",\n      rate: 0.187,\n      status: \"B\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.221,\n      variableUp: true,\n      children: [\n        {\n          id: \"g131\",\n          name: \"Name10\",\n          count: 123456,\n          label: \"33.90\",\n          rate: 0.336,\n          status: \"R\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.12,\n          variableUp: true,\n          children: [],\n        },\n        {\n          id: \"g132\",\n          name: \"Name11\",\n          count: 123456,\n          label: \"67.00\",\n          rate: 0.664,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.241,\n          variableUp: false,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"g14\",\n      name: \"Name12\",\n      count: 123456,\n      label: \"100.00\",\n      rate: 0.186,\n      status: \"G\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.531,\n      variableUp: true,\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/decision-tree/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\nimport { Tooltip } from \"@antv/f6-plugin/f6Plugin\";\n\nimport mockData from \"./data\";\n\n/**\n * decision-tree\n */\n\nconst colors = {\n  B: \"#5B8FF9\",\n  R: \"#F46649\",\n  Y: \"#EEBC20\",\n  G: \"#5BD8A6\",\n  DI: \"#A7A7A7\",\n};\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 默认配置\n    const defaultConfig = {\n      width,\n      height,\n      modes: {\n        default: [\"zoom-canvas\", \"drag-canvas\"],\n      },\n      fitView: true,\n      animate: true,\n      defaultNode: {\n        type: \"flow-rect\",\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#CED4D9\",\n        },\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"LR\",\n        dropCap: false,\n        indent: 300,\n        getHeight: () => {\n          return 60;\n        },\n      },\n    };\n\n    //  组件props\n    const props = {\n      data: mockData,\n      config: {\n        padding: [20, 50],\n        defaultLevel: 3,\n        defaultZoom: 0.8,\n        modes: { default: [\"zoom-canvas\", \"drag-canvas\"] },\n      },\n    };\n\n    // 自定义节点、边\n    const registerFn = () => {\n      /**\n       * 自定义节点\n       */\n      F6.registerNode(\n        \"flow-rect\",\n        {\n          shapeType: \"flow-rect\",\n          draw(cfg, group) {\n            const {\n              name = \"\",\n              variableName,\n              variableValue,\n              variableUp,\n              label,\n              collapsed,\n              currency,\n              status,\n              // rate,\n            } = cfg;\n            const grey = \"#CED4D9\";\n            // 逻辑不应该在这里判断\n            const rectConfig = {\n              width: 202,\n              height: 60,\n              lineWidth: 1,\n              fontSize: 12,\n              fill: \"#fff\",\n              radius: 4,\n              stroke: grey,\n              opacity: 1,\n            };\n\n            const nodeOrigin = {\n              x: -rectConfig.width / 2,\n              y: -rectConfig.height / 2,\n            };\n\n            const textConfig = {\n              textAlign: \"left\",\n              textBaseline: \"bottom\",\n            };\n\n            const rect = group.addShape(\"rect\", {\n              attrs: {\n                x: nodeOrigin.x,\n                y: nodeOrigin.y,\n                ...rectConfig,\n              },\n            });\n\n            const rectBBox = rect.getBBox();\n\n            // label title\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: 20 + nodeOrigin.y,\n                text: name.length > 28 ? `${name.substr(0, 28)}...` : name,\n                fontSize: 12,\n                opacity: 0.85,\n                fill: \"#000\",\n                cursor: \"pointer\",\n              },\n              name: \"name-shape\",\n            });\n\n            // price\n            const price = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: 12 + nodeOrigin.x,\n                y: rectBBox.maxY - 12,\n                text: label,\n                fontSize: 16,\n                fill: \"#000\",\n                opacity: 0.85,\n              },\n            });\n\n            // label currency\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: price.getBBox().maxX + 5,\n                y: rectBBox.maxY - 12,\n                text: currency,\n                fontSize: 12,\n                fill: \"#000\",\n                opacity: 0.75,\n              },\n            });\n\n            // percentage\n            const percentText = group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: rectBBox.maxX - 8,\n                y: rectBBox.maxY - 12,\n                text: `${((variableValue || 0) * 100).toFixed(2)}%`,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: colors[status],\n              },\n            });\n\n            // percentage triangle\n            const symbol = variableUp ? \"triangle\" : \"triangle-down\";\n            const triangle = group.addShape(\"marker\", {\n              attrs: {\n                ...textConfig,\n                x: percentText.getBBox().minX - 10,\n                y: rectBBox.maxY - 12 - 6,\n                symbol,\n                r: 6,\n                fill: colors[status],\n              },\n            });\n\n            // variable name\n            group.addShape(\"text\", {\n              attrs: {\n                ...textConfig,\n                x: triangle.getBBox().minX - 4,\n                y: rectBBox.maxY - 12,\n                text: variableName,\n                fontSize: 12,\n                textAlign: \"right\",\n                fill: \"#000\",\n                opacity: 0.45,\n              },\n            });\n\n            // bottom line background\n            // const bottomBackRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rectConfig.width,\n            //     height: 4,\n            //     radius: [0, 0, rectConfig.radius, rectConfig.radius],\n            //     fill: '#E0DFE3',\n            //   },\n            // });\n\n            // bottom percent\n            // const bottomRect = group.addShape('rect', {\n            //   attrs: {\n            //     x: nodeOrigin.x,\n            //     y: rectBBox.maxY - 4,\n            //     width: rate * rectBBox.width,\n            //     height: 4,\n            //     radius: [0, 0, 0, rectConfig.radius],\n            //     fill: colors[status],\n            //   },\n            // });\n\n            // collapse rect\n            if (cfg.children && cfg.children.length) {\n              group.addShape(\"rect\", {\n                attrs: {\n                  x: rectConfig.width / 2 - 8,\n                  y: -8,\n                  width: 16,\n                  height: 16,\n                  stroke: \"rgba(0, 0, 0, 0.25)\",\n                  cursor: \"pointer\",\n                  fill: \"#fff\",\n                },\n                name: \"collapse-back\",\n                modelId: cfg.id,\n              });\n\n              // collpase text\n              group.addShape(\"text\", {\n                attrs: {\n                  x: rectConfig.width / 2,\n                  y: -1,\n                  textAlign: \"center\",\n                  textBaseline: \"middle\",\n                  text: collapsed ? \"+\" : \"-\",\n                  fontSize: 16,\n                  cursor: \"pointer\",\n                  fill: \"rgba(0, 0, 0, 0.25)\",\n                },\n                name: \"collapse-text\",\n                modelId: cfg.id,\n              });\n            }\n\n            this.drawLinkPoints(cfg, group);\n            return rect;\n          },\n          update(cfg, item) {\n            const group = item.getContainer();\n            this.updateLinkPoints(cfg, group);\n          },\n          setState(name, value, item) {\n            if (name === \"collapse\") {\n              const group = item.getContainer();\n              const collapseText = group.find(\n                (e) => e.get(\"name\") === \"collapse-text\",\n              );\n              if (collapseText) {\n                if (!value) {\n                  collapseText.attr({\n                    text: \"-\",\n                  });\n                } else {\n                  collapseText.attr({\n                    text: \"+\",\n                  });\n                }\n              }\n            }\n          },\n          getAnchorPoints() {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n            ];\n          },\n        },\n        \"rect\",\n      );\n\n      F6.registerEdge(\n        \"flow-cubic\",\n        {\n          getControlPoints(cfg) {\n            let { controlPoints } = cfg; // 指定controlPoints\n            if (!controlPoints || !controlPoints.length) {\n              const { startPoint, endPoint, sourceNode, targetNode } = cfg;\n              const {\n                x: startX,\n                y: startY,\n                coefficientX,\n                coefficientY,\n              } = sourceNode ? sourceNode.getModel() : startPoint;\n              const { x: endX, y: endY } = targetNode\n                ? targetNode.getModel()\n                : endPoint;\n              let curveStart = (endX - startX) * coefficientX;\n              let curveEnd = (endY - startY) * coefficientY;\n              curveStart = curveStart > 40 ? 40 : curveStart;\n              curveEnd = curveEnd < -30 ? curveEnd : -30;\n              controlPoints = [\n                { x: startPoint.x + curveStart, y: startPoint.y },\n                { x: endPoint.x + curveEnd, y: endPoint.y },\n              ];\n            }\n            return controlPoints;\n          },\n          getPath(points) {\n            const path = [];\n            path.push([\"M\", points[0].x, points[0].y]);\n            path.push([\n              \"C\",\n              points[1].x,\n              points[1].y,\n              points[2].x,\n              points[2].y,\n              points[3].x,\n              points[3].y,\n            ]);\n            return path;\n          },\n        },\n        \"single-line\",\n      );\n    };\n    registerFn();\n\n    const { onInit, config } = props;\n    console.log(onInit);\n    const tooltip = new Tooltip({\n      trigger: \"press\",\n      // TODO: _f2.default.Tooltip is not a constructor\n      // offsetX and offsetY include the padding of the parent container\n      // the types of items that allow the tooltip show up\n      // 允许出现 tooltip 的 item 类型\n      itemTypes: [\"node\"],\n      // custom the tooltip's content\n      // 自定义 tooltip 内容\n      getContent: (e) => {\n        // outDiv.style.padding = '0px 0px 20px 0px';\n        return `\n        <div>Custom Content</div>\n        <div>Type: ${e.item.getType()}</div>\n        <div>Label: ${e.item.getModel().label || e.item.getModel().id}</div>\n      `;\n      },\n      getCss: () => {\n        return `\n        #tootip-content{\n          width: 150;\n          padding: 10;\n        }\n         #tootip-content div{\n           height: 20;\n         }\n        `;\n      },\n      shouldBegin: (e) => {\n        if (e.target.get(\"name\") === \"name-shape\") return true;\n        return true;\n      },\n    });\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n      ...defaultConfig,\n      ...config,\n      plugins: [tooltip],\n    });\n\n    this.graph.data(mockData);\n    this.graph.render();\n    this.graph.fitView();\n    this.graph.zoom(config.defaultZoom || 1);\n\n    const handleCollapse = (e) => {\n      const { target } = e;\n      const id = target.get(\"modelId\");\n      const item = this.graph.findById(id);\n      const nodeModel = item.getModel();\n      nodeModel.collapsed = !nodeModel.collapsed;\n      this.graph.layout();\n      this.graph.setItemState(item, \"collapse\", nodeModel.collapsed);\n    };\n    this.graph.on(\"collapse-text:tap\", (e) => {\n      handleCollapse(e);\n    });\n    this.graph.on(\"collapse-back:tap\", (e) => {\n      handleCollapse(e);\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/decision-tree/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"决策树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/decision-tree/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/decision-tree/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/donut-transfer/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"person A\",\n      label: \"person A\",\n      // the attributes for drawing donut\n      donutAttrs: {\n        income: 10,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person B\",\n      label: \"person B\",\n      donutAttrs: {\n        income: 20,\n        outcome: 10,\n        unknown: 5,\n      },\n    },\n    {\n      id: \"person C\",\n      label: \"person C\",\n      donutAttrs: {\n        income: 200,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person D\",\n      label: \"person D\",\n      donutAttrs: {\n        income: 50,\n        outcome: 10,\n        unknown: 15,\n      },\n    },\n    {\n      id: \"person E\",\n      label: \"person E\",\n      donutAttrs: {\n        income: 80,\n        outcome: 40,\n        unknown: 45,\n      },\n    },\n    {\n      id: \"person F\",\n      label: \"person F\",\n      donutAttrs: {\n        income: 90,\n        outcome: 110,\n        unknown: 15,\n      },\n    },\n  ],\n  edges: [\n    { source: \"person C\", target: \"person F\", size: 10 },\n    { source: \"person B\", target: \"person A\", size: 5 },\n    { source: \"person D\", target: \"person E\", size: 20 },\n    { source: \"person D\", target: \"person C\", size: 5 },\n    { source: \"person B\", target: \"person C\", size: 10 },\n    { source: \"person A\", target: \"person C\", size: 5 },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.label = `Transfer $${edge.size}`;\n});\n\nconst colors = {\n  income: \"#61DDAA\",\n  outcome: \"#F08BB4\",\n  unknown: \"#65789B\",\n};\n\ndata.nodes.forEach((node) => {\n  node.donutColorMap = colors;\n  node.size = 0;\n  Object.keys(node.donutAttrs).forEach((key) => {\n    node.size += node.donutAttrs[key];\n  });\n  node.size = Math.sqrt(node.size) * 5;\n});\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"income\",\n      label: \"Income\",\n      order: 0,\n      style: {\n        fill: \"#61DDAA\",\n      },\n    },\n    {\n      id: \"outcome\",\n      label: \"Outcome\",\n      order: 2,\n      style: {\n        fill: \"#F08BB4\",\n      },\n    },\n    {\n      id: \"unknown\",\n      label: \"Unknown\",\n      order: 2,\n      style: {\n        fill: \"#65789B\",\n      },\n    },\n  ],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/donut-transfer/index.acss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0,0,0,0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/donut-transfer/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport { Legend } from \"@antv/f6-plugin/f6Plugin\";\n\nimport { data, legendData } from \"./data\";\n/**\n * donut-transfer\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const legend = new Legend({\n      data: legendData,\n      align: \"center\",\n      layout: \"horizontal\", // vertical\n      position: \"bottom-left\",\n      vertiSep: 12,\n      horiSep: 24,\n      offsetY: -24,\n      padding: [4, 16, 8, 16],\n      containerStyle: {\n        fill: \"#ccc\",\n        lineWidth: 1,\n      },\n      title: \" \",\n      titleConfig: {\n        offsetY: -8,\n      },\n    });\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitCenter: true,\n      plugins: [legend], // 这里的plugin不知道能不能用\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\"],\n      },\n      layout: {\n        type: \"radial\",\n        focusNode: \"li\",\n        linkDistance: 200,\n        unitRadius: 200,\n      },\n      defaultEdge: {\n        style: {\n          endArrow: true,\n        },\n        labelCfg: {\n          autoRotate: true,\n          style: {\n            stroke: \"#fff\",\n            lineWidth: 5,\n          },\n        },\n      },\n      defaultNode: {\n        type: \"donut\",\n        style: {\n          lineWidth: 0,\n        },\n        labelCfg: {\n          position: \"bottom\",\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    // this.graph.fitView();\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"active\", false);\n    });\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"selected\", true);\n    });\n    this.graph.on(\"canvas:tap\", () => {\n      this.graph.getNodes().forEach((node) => {\n        this.graph.clearItemStates(node);\n      });\n    });\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/donut-transfer/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"甜甜圈转账图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/donut-transfer/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/donut-transfer/index.wxss",
    "content": "/* packageSceneCaseSceneCase/donut-transfer/index.wxss */\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/knowledge-tree-graph/data.js",
    "content": "export default {\n  id: \"200000004\",\n  tooltip: \"Thing\",\n  label: \"事物\",\n  description: null,\n  descriptionZh: null,\n  depth: 3,\n  subTypeCount: 9,\n  status: 0,\n  children: [\n    {\n      id: \"500000061\",\n      tooltip: \"Person\",\n      label: \"自然人\",\n      description: null,\n      descriptionZh: null,\n      depth: 1,\n      subTypeCount: 1,\n      status: 0,\n      children: [\n        {\n          id: \"707000085\",\n          tooltip: \"FilmPerson\",\n          label: \"电影人\",\n          description: null,\n          descriptionZh: null,\n          depth: 5,\n          subTypeCount: 3,\n          status: 1,\n          children: [\n            {\n              id: \"707000090\",\n              tooltip: \"FilmDirector\",\n              label: \"电影导演\",\n              description: null,\n              descriptionZh: null,\n              depth: 0,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000091\",\n              tooltip: \"FilmWriter\",\n              label: \"电影编剧\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000092\",\n              tooltip: \"FilmStar\",\n              label: \"电影主演\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"707000086\",\n          tooltip: \"MusicPerson\",\n          label: \"音乐人\",\n          description: null,\n          descriptionZh: null,\n          depth: 17,\n          subTypeCount: 2,\n          status: 1,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"200000005\",\n      tooltip: \"Music\",\n      label: \"音乐\",\n      description: null,\n      descriptionZh: null,\n      depth: 3,\n      subTypeCount: 2,\n      status: 1,\n      children: [],\n    },\n    {\n      id: \"707000128\",\n      tooltip: \"Film\",\n      label: \"电影\",\n      description: null,\n      descriptionZh: null,\n      depth: 4,\n      subTypeCount: 0,\n      status: 1,\n      children: [\n        {\n          id: \"7070032328\",\n          tooltip: \"Comedy\",\n          label: \"喜剧\",\n          description: null,\n          descriptionZh: null,\n          depth: 4,\n          operation: \"C\",\n          subTypeCount: 0,\n          status: 1,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"707000095\",\n      tooltip: \"FilmGenre\",\n      label: \"电影类别\",\n      description: null,\n      descriptionZh: null,\n      depth: 4,\n      subTypeCount: 0,\n      status: 1,\n      children: [],\n    },\n    {\n      id: \"702000021\",\n      tooltip: \"Organization\",\n      label: \"机构\",\n      description: null,\n      descriptionZh: null,\n      depth: 47,\n      subTypeCount: 1,\n      status: 0,\n      children: [\n        {\n          id: \"500000063\",\n          tooltip: \"Company\",\n          label: \"公司\",\n          description: null,\n          descriptionZh: null,\n          depth: 4,\n          subTypeCount: 2,\n          status: 1,\n          children: [\n            {\n              id: \"707000093\",\n              tooltip: \"FilmCompany\",\n              label: \"电影公司\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000094\",\n              tooltip: \"MusicCompany\",\n              label: \"音乐公司\",\n              description: null,\n              descriptionZh: null,\n              depth: 2,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/knowledge-tree-graph/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\nimport data from \"./data\";\n\n/**\n * 知识图谱树\n */\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    const minWidth = 60;\n\n    // TODO:这里需要定义两次，因为onLoad()里面传不到,updateChart()里面,如果定义在Page外面是不是就是全局的\n    const BaseConfig = {\n      nameFontSize: 12,\n      childCountWidth: 22,\n      countMarginLeft: 0,\n      itemPadding: 16,\n      nameMarginLeft: 4,\n      rootPadding: 18,\n    };\n    F6.registerNode(\"treeNode\", {\n      draw: (cfg, group) => {\n        const { label, collapsed, selected, children, depth } = cfg;\n        const rootNode = depth === 0;\n        const hasChildren = children && children.length !== 0;\n\n        const {\n          childCountWidth,\n          countMarginLeft,\n          itemPadding,\n          nameMarginLeft,\n          rootPadding,\n        } = BaseConfig;\n\n        let width = 0;\n        const height = 28;\n        const x = 0;\n        const y = -height / 2;\n\n        // 名称文本\n        const text = group.addShape(\"text\", {\n          attrs: {\n            text: label,\n            x: x * 2,\n            y,\n            textAlign: \"left\",\n            textBaseline: \"top\",\n            fontFamily: \"PingFangSC-Regular\",\n          },\n          cursor: \"pointer\",\n          name: \"name-text-shape\",\n        });\n        const textWidth = text.getBBox().width;\n        width = textWidth + itemPadding + nameMarginLeft;\n\n        width = width < minWidth ? minWidth : width;\n\n        if (!rootNode && hasChildren) {\n          width += countMarginLeft;\n          width += childCountWidth;\n        }\n\n        const keyShapeAttrs = {\n          x,\n          y,\n          width,\n          height,\n          radius: 4,\n        };\n\n        // keyShape根节点选中样式\n        if (rootNode && selected) {\n          keyShapeAttrs.fill = \"#e8f7ff\";\n          keyShapeAttrs.stroke = \"#e8f7ff\";\n        }\n        const keyShape = group.addShape(\"rect\", {\n          attrs: keyShapeAttrs,\n          name: \"root-key-shape-rect-shape\",\n        });\n\n        if (!rootNode) {\n          // 底部横线\n          group.addShape(\"path\", {\n            attrs: {\n              path: [\n                [\"M\", x - 1, 0],\n                [\"L\", width, 0],\n              ],\n              stroke: \"#AAB7C4\",\n              lineWidth: 1,\n            },\n            name: \"node-path-shape\",\n          });\n        }\n\n        const mainX = x - 10;\n        const mainY = -height + 15;\n\n        if (rootNode) {\n          group.addShape(\"rect\", {\n            attrs: {\n              x: mainX,\n              y: mainY,\n              width: width + 12,\n              height,\n              radius: 14,\n              fill: \"#e8f7ff\",\n              cursor: \"pointer\",\n            },\n            name: \"main-shape\",\n          });\n        }\n\n        let nameColor = \"rgba(0, 0, 0, .65)\";\n        if (selected) {\n          nameColor = \"#40A8FF\";\n        }\n\n        // 名称\n        if (rootNode) {\n          group.addShape(\"text\", {\n            attrs: {\n              text: label,\n              x: mainX + rootPadding,\n              y: 1,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: nameColor,\n              fontSize: 12,\n              fontFamily: \"PingFangSC-Regular\",\n              cursor: \"pointer\",\n            },\n            name: \"root-text-shape\",\n          });\n        } else {\n          group.addShape(\"text\", {\n            attrs: {\n              text: label,\n              x: selected ? mainX + 6 + nameMarginLeft : mainX + 6,\n              y: y - 5,\n              textAlign: \"start\",\n              textBaseline: \"top\",\n              fill: nameColor,\n              fontSize: 12,\n              fontFamily: \"PingFangSC-Regular\",\n              cursor: \"pointer\",\n            },\n            name: \"not-root-text-shape\",\n          });\n        }\n\n        // 子类数量\n        if (hasChildren && !rootNode) {\n          const childCountHeight = 12;\n          const childCountX = width - childCountWidth;\n          const childCountY = -childCountHeight / 2;\n\n          group.addShape(\"rect\", {\n            attrs: {\n              width: childCountWidth,\n              height: 12,\n              stroke: collapsed ? \"#1890ff\" : \"#5CDBD3\",\n              fill: collapsed ? \"#fff\" : \"#E6FFFB\",\n              x: childCountX,\n              y: childCountY,\n              radius: 6,\n              cursor: \"pointer\",\n            },\n            name: \"child-count-rect-shape\",\n          });\n          group.addShape(\"text\", {\n            attrs: {\n              text: `${children.length}`,\n              fill: \"rgba(0, 0, 0, .65)\",\n              x: childCountX + childCountWidth / 2,\n              y: childCountY + 12,\n              fontSize: 10,\n              width: childCountWidth,\n              textAlign: \"center\",\n              cursor: \"pointer\",\n            },\n            name: \"child-count-text-shape\",\n          });\n        }\n\n        return keyShape;\n      },\n    });\n\n    F6.registerEdge(\"smooth\", {\n      draw(cfg, group) {\n        const { startPoint, endPoint } = cfg;\n        const hgap = Math.abs(endPoint.x - startPoint.x);\n\n        const path = [\n          [\"M\", startPoint.x, startPoint.y],\n          [\n            \"C\",\n            startPoint.x + hgap / 4,\n            startPoint.y,\n            endPoint.x - hgap / 2,\n            endPoint.y,\n            endPoint.x,\n            endPoint.y,\n          ],\n        ];\n\n        const shape = group.addShape(\"path\", {\n          attrs: {\n            stroke: \"#AAB7C4\",\n            path,\n          },\n          name: \"smooth-path-shape\",\n        });\n        return shape;\n      },\n    });\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    const BaseConfig = {\n      nameFontSize: 12,\n      childCountWidth: 22,\n      countMarginLeft: 0,\n      itemPadding: 16,\n      nameMarginLeft: 4,\n      rootPadding: 18,\n    };\n    // 创建F6实例\n\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: 60,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        type: \"treeNode\",\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"smooth\",\n      },\n      layout: {\n        type: \"compactBox\", // TODO：为什么这里找不到\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth(d) {\n          const labelWidth = F6.Util.getTextSize(\n            d.label,\n            BaseConfig.nameFontSize,\n          )[0];\n          const width_ =\n            BaseConfig.itemPadding +\n            BaseConfig.nameMarginLeft +\n            labelWidth +\n            BaseConfig.rootPadding +\n            BaseConfig.childCountWidth;\n          return width_;\n        },\n        getVGap: function getVGap() {\n          return 15;\n        },\n        getHGap: function getHGap() {\n          return 30;\n        },\n      },\n    });\n\n    // 注册数据\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/knowledge-tree-graph/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"知识图谱树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/knowledge-tree-graph/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/knowledge-tree-graph/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/metro-lines/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 12955418.07889617,\n      y: 4858516.455509626,\n      class: \"地铁二号线\",\n      name: \"地铁二号线 0\",\n    },\n    {\n      id: \"1\",\n      x: 12955418.07889617,\n      y: 4858516.455509626,\n      class: \"地铁二号线\",\n      name: \"地铁二号线 1\",\n    },\n    {\n      id: \"2\",\n      x: 12960805.702543395,\n      y: 4843623.153783939,\n      class: \"地铁五号线\",\n      name: \"地铁五号线 0\",\n    },\n    {\n      id: \"3\",\n      x: 12957909.41496727,\n      y: 4878612.7284845,\n      class: \"地铁五号线\",\n      name: \"地铁五号线 1\",\n    },\n    {\n      id: \"4\",\n      x: 12924431.591067636,\n      y: 4826881.565994551,\n      class: \"地铁房山线\",\n      name: \"地铁房山线 0\",\n    },\n    {\n      id: \"5\",\n      x: 12946675.914777644,\n      y: 4839000.571326079,\n      class: \"地铁房山线\",\n      name: \"地铁房山线 1\",\n    },\n    {\n      id: \"6\",\n      x: 12960805.702543395,\n      y: 4843623.153783939,\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 0\",\n    },\n    {\n      id: \"7\",\n      x: 12980513.522539986,\n      y: 4840611.685434834,\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 1\",\n    },\n    {\n      id: \"8\",\n      x: 12970460.425604625,\n      y: 4852660.505494347,\n      class: \"地铁一号线\",\n      name: \"地铁一号线 0\",\n    },\n    {\n      id: \"9\",\n      x: 12932857.683691781,\n      y: 4855262.558461167,\n      class: \"地铁一号线\",\n      name: \"地铁一号线 1\",\n    },\n    {\n      id: \"10\",\n      x: 12954336.341521818,\n      y: 4841957.844498525,\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 0\",\n    },\n    {\n      id: \"11\",\n      x: 12948661.393356105,\n      y: 4818156.255552412,\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 1\",\n    },\n    {\n      id: \"12\",\n      x: 12954336.341521818,\n      y: 4841957.844498525,\n      class: \"地铁四号线\",\n      name: \"地铁四号线 0\",\n    },\n    {\n      id: \"13\",\n      x: 12943094.565471629,\n      y: 4868005.960957178,\n      class: \"地铁四号线\",\n      name: \"地铁四号线 1\",\n    },\n    {\n      id: \"14\",\n      x: 12943697.439571828,\n      y: 4856096.365355702,\n      class: \"地铁六号线\",\n      name: \"地铁六号线 0\",\n    },\n    {\n      id: \"15\",\n      x: 12982538.96049167,\n      y: 4855210.774849254,\n      class: \"地铁六号线\",\n      name: \"地铁六号线 1\",\n    },\n    {\n      id: \"16\",\n      x: 12946675.914777644,\n      y: 4839000.571326079,\n      class: \"地铁九号线\",\n      name: \"地铁九号线 0\",\n    },\n    {\n      id: \"17\",\n      x: 12949261.040454354,\n      y: 4857656.700765552,\n      class: \"地铁九号线\",\n      name: \"地铁九号线 1\",\n    },\n    {\n      id: \"18\",\n      x: 12956918.23852815,\n      y: 4858529.6221339535,\n      class: \"地铁八号线\",\n      name: \"地铁八号线 0\",\n    },\n    {\n      id: \"19\",\n      x: 12957923.222643975,\n      y: 4856285.931514598,\n      class: \"地铁八号线\",\n      name: \"地铁八号线 1\",\n    },\n    {\n      id: \"20\",\n      x: 12947165.66572366,\n      y: 4873622.718414709,\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 0\",\n    },\n    {\n      id: \"21\",\n      x: 12945101.617382836,\n      y: 4896059.0154147735,\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 1\",\n    },\n    {\n      id: \"22\",\n      x: 12970460.425604625,\n      y: 4852660.505494347,\n      class: \"地铁八通线\",\n      name: \"地铁八通线 0\",\n    },\n    {\n      id: \"23\",\n      x: 12989768.23411335,\n      y: 4847232.117513346,\n      class: \"地铁八通线\",\n      name: \"地铁八通线 1\",\n    },\n    {\n      id: \"24\",\n      x: 12961385.775293019,\n      y: 4857425.3359782435,\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 0\",\n    },\n    {\n      id: \"25\",\n      x: 12952415.003097966,\n      y: 4857385.42314959,\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 1\",\n    },\n    {\n      id: \"26\",\n      x: 12964405.448829094,\n      y: 4849043.663728292,\n      class: \"地铁十号线\",\n      name: \"地铁十号线 0\",\n    },\n    {\n      id: \"27\",\n      x: 12945523.914777555,\n      y: 4862157.070927259,\n      class: \"地铁十号线\",\n      name: \"地铁十号线 1\",\n    },\n    {\n      id: \"28\",\n      x: 12937182.6004098,\n      y: 4846484.783681809,\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 0\",\n    },\n    {\n      id: \"29\",\n      x: 12946851.421569752,\n      y: 4846551.5626413245,\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 1\",\n    },\n    {\n      id: \"30\",\n      x: 12975248.324027628,\n      y: 4879080.29109743,\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 0\",\n    },\n    {\n      id: \"31\",\n      x: 12962862.26847603,\n      y: 4865214.088371204,\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 1\",\n    },\n    {\n      id: \"32\",\n      x: 12981143.037271895,\n      y: 4871509.161726701,\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 0\",\n    },\n    {\n      id: \"33\",\n      x: 12961347.967621036,\n      y: 4857396.841326526,\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 1\",\n    },\n  ],\n  edges: [\n    {\n      id: \"0\",\n      source: \"0\",\n      target: \"1\",\n      class: \"地铁二号线\",\n      name: \"地铁二号线 0\",\n      controlPoints: [\n        {\n          x: 12956158.028659772,\n          y: 4858523.099945488,\n        },\n        {\n          x: 12956181.882943347,\n          y: 4858523.313643505,\n        },\n        {\n          x: 12956333.569265882,\n          y: 4858524.675979247,\n        },\n        {\n          x: 12956722.101097316,\n          y: 4858528.426228019,\n        },\n        {\n          x: 12956892.09019568,\n          y: 4858529.577087689,\n        },\n        {\n          x: 12957092.031747662,\n          y: 4858532.537231651,\n        },\n        {\n          x: 12957285.500773665,\n          y: 4858534.624581567,\n        },\n        {\n          x: 12958025.324180173,\n          y: 4858542.359953267,\n        },\n        {\n          x: 12958025.324180173,\n          y: 4858542.359953267,\n        },\n        {\n          x: 12958040.386887064,\n          y: 4858542.398858417,\n        },\n        {\n          x: 12958051.381729262,\n          y: 4858542.39594296,\n        },\n        {\n          x: 12958077.436647858,\n          y: 4858542.626090849,\n        },\n        {\n          x: 12958156.437099922,\n          y: 4858543.794072316,\n        },\n        {\n          x: 12958189.185511772,\n          y: 4858543.944439034,\n        },\n        {\n          x: 12958309.191310784,\n          y: 4858545.279485739,\n        },\n        {\n          x: 12958458.470410347,\n          y: 4858547.406977885,\n        },\n        {\n          x: 12958499.690753505,\n          y: 4858547.988957175,\n        },\n        {\n          x: 12958505.143835366,\n          y: 4858548.099568159,\n        },\n        {\n          x: 12958552.455966821,\n          y: 4858548.335831382,\n        },\n        {\n          x: 12958768.467696369,\n          y: 4858549.399143227,\n        },\n        {\n          x: 12958859.902949648,\n          y: 4858552.977807331,\n        },\n        {\n          x: 12958924.391812265,\n          y: 4858556.413893195,\n        },\n        {\n          x: 12958993.172822965,\n          y: 4858558.959445135,\n        },\n        {\n          x: 12959013.547905065,\n          y: 4858559.7809649445,\n        },\n        {\n          x: 12959327.7774419,\n          y: 4858574.063556792,\n        },\n        {\n          x: 12959423.21800485,\n          y: 4858577.691630111,\n        },\n        {\n          x: 12959426.045447897,\n          y: 4858577.797144458,\n        },\n        {\n          x: 12959659.119375631,\n          y: 4858587.989742429,\n        },\n        {\n          x: 12959737.865294052,\n          y: 4858591.668097373,\n        },\n        {\n          x: 12959846.282077461,\n          y: 4858596.613007342,\n        },\n        {\n          x: 12959955.561247244,\n          y: 4858601.256188295,\n        },\n        {\n          x: 12960095.413179535,\n          y: 4858607.094133126,\n        },\n        {\n          x: 12960179.06451476,\n          y: 4858611.470739427,\n        },\n        {\n          x: 12960222.914558794,\n          y: 4858613.727307291,\n        },\n        {\n          x: 12960421.743963502,\n          y: 4858622.407685848,\n        },\n        {\n          x: 12960445.476249201,\n          y: 4858623.093869879,\n        },\n        {\n          x: 12960629.592854993,\n          y: 4858630.086065551,\n        },\n        {\n          x: 12960751.203872466,\n          y: 4858635.467581922,\n        },\n        {\n          x: 12960848.858819682,\n          y: 4858639.927849644,\n        },\n        {\n          x: 12960917.431335308,\n          y: 4858642.696504292,\n        },\n        {\n          x: 12960954.897539183,\n          y: 4858643.0533597935,\n        },\n        {\n          x: 12960982.959798397,\n          y: 4858642.704017011,\n        },\n        {\n          x: 12961014.781746428,\n          y: 4858640.30966017,\n        },\n        {\n          x: 12961051.662476636,\n          y: 4858634.414079347,\n        },\n        {\n          x: 12961083.478422668,\n          y: 4858626.929183689,\n        },\n        {\n          x: 12961111.532563318,\n          y: 4858617.271161616,\n        },\n        {\n          x: 12961140.594020512,\n          y: 4858604.699543408,\n        },\n        {\n          x: 12961160.7368578,\n          y: 4858593.842589348,\n        },\n        {\n          x: 12961181.649884878,\n          y: 4858581.485318099,\n        },\n        {\n          x: 12961198.850660494,\n          y: 4858569.376089524,\n        },\n        {\n          x: 12961224.140661275,\n          y: 4858547.942074989,\n        },\n        {\n          x: 12961236.424254648,\n          y: 4858536.280756947,\n        },\n        {\n          x: 12961250.296104662,\n          y: 4858521.997990917,\n        },\n        {\n          x: 12961263.585987432,\n          y: 4858506.114455221,\n        },\n        {\n          x: 12961276.44120637,\n          y: 4858488.344153348,\n        },\n        {\n          x: 12961286.408321457,\n          y: 4858473.632750297,\n        },\n        {\n          x: 12961294.63870108,\n          y: 4858460.527513578,\n        },\n        {\n          x: 12961303.735586522,\n          y: 4858443.4908795785,\n        },\n        {\n          x: 12961311.961795231,\n          y: 4858426.312269373,\n        },\n        {\n          x: 12961324.544825437,\n          y: 4858394.384768109,\n        },\n        {\n          x: 12961332.599563174,\n          y: 4858367.639883998,\n        },\n        {\n          x: 12961338.437462995,\n          y: 4858349.099767153,\n        },\n        {\n          x: 12961341.2480161,\n          y: 4858329.523211644,\n        },\n        {\n          x: 12961344.471828079,\n          y: 4858307.641213481,\n        },\n        {\n          x: 12961347.327668607,\n          y: 4858271.276643974,\n        },\n        {\n          x: 12961347.988308016,\n          y: 4858252.824580443,\n        },\n        {\n          x: 12961348.859027859,\n          y: 4858200.010594391,\n        },\n        {\n          x: 12961348.859027859,\n          y: 4858200.0103943935,\n        },\n        {\n          x: 12961347.38216376,\n          y: 4858144.4708304275,\n        },\n        {\n          x: 12961343.338631237,\n          y: 4857930.979484696,\n        },\n        {\n          x: 12961343.002661625,\n          y: 4857896.233210593,\n        },\n        {\n          x: 12961340.747563919,\n          y: 4857737.363889014,\n        },\n        {\n          x: 12961338.592553958,\n          y: 4857671.84297017,\n        },\n        {\n          x: 12961341.18922736,\n          y: 4857596.35911637,\n        },\n        {\n          x: 12961344.975191534,\n          y: 4857477.302133615,\n        },\n        {\n          x: 12961347.967621036,\n          y: 4857396.841326526,\n        },\n        {\n          x: 12961350.020733643,\n          y: 4857318.561403474,\n        },\n        {\n          x: 12961355.68061802,\n          y: 4857153.852373557,\n        },\n        {\n          x: 12961355.680618014,\n          y: 4857153.852273558,\n        },\n        {\n          x: 12961359.731217345,\n          y: 4857006.275839691,\n        },\n        {\n          x: 12961359.731017353,\n          y: 4857006.131939777,\n        },\n        {\n          x: 12961360.845305737,\n          y: 4856963.669545529,\n        },\n        {\n          x: 12961366.890092889,\n          y: 4856784.230691269,\n        },\n        {\n          x: 12961368.58851819,\n          y: 4856746.131025358,\n        },\n        {\n          x: 12961372.266035046,\n          y: 4856660.336259479,\n        },\n        {\n          x: 12961372.829975668,\n          y: 4856646.230202675,\n        },\n        {\n          x: 12961378.034419877,\n          y: 4856495.295969707,\n        },\n        {\n          x: 12961382.403443811,\n          y: 4856377.660000789,\n        },\n        {\n          x: 12961384.942063117,\n          y: 4856311.497820034,\n        },\n        {\n          x: 12961386.465992313,\n          y: 4856243.30465021,\n        },\n        {\n          x: 12961390.674716666,\n          y: 4856107.682763318,\n        },\n        {\n          x: 12961394.329897156,\n          y: 4855999.369524935,\n        },\n        {\n          x: 12961394.516375585,\n          y: 4855993.8847022,\n        },\n        {\n          x: 12961417.584882293,\n          y: 4855310.507392769,\n        },\n        {\n          x: 12961417.694868386,\n          y: 4855307.2384764915,\n        },\n        {\n          x: 12961425.988003194,\n          y: 4855061.622208351,\n        },\n        {\n          x: 12961440.215299333,\n          y: 4854643.566032893,\n        },\n        {\n          x: 12961461.215758536,\n          y: 4854015.5516425,\n        },\n        {\n          x: 12961471.471998505,\n          y: 4853691.795660701,\n        },\n        {\n          x: 12961471.611776885,\n          y: 4853686.561937957,\n        },\n        {\n          x: 12961474.998051625,\n          y: 4853601.811384682,\n        },\n        {\n          x: 12961478.809553925,\n          y: 4853507.031446198,\n        },\n        {\n          x: 12961480.521483717,\n          y: 4853483.915660419,\n        },\n        {\n          x: 12961481.521725276,\n          y: 4853474.174593727,\n        },\n        {\n          x: 12961482.954997385,\n          y: 4853459.926853736,\n        },\n        {\n          x: 12961485.39370743,\n          y: 4853441.314944552,\n        },\n        {\n          x: 12961494.966948297,\n          y: 4853364.78470371,\n        },\n        {\n          x: 12961499.936921315,\n          y: 4853336.948636642,\n        },\n        {\n          x: 12961547.758241706,\n          y: 4853069.064103569,\n        },\n        {\n          x: 12961553.642808063,\n          y: 4853027.336298535,\n        },\n        {\n          x: 12961555.648717735,\n          y: 4853011.198681677,\n        },\n        {\n          x: 12961558.402478581,\n          y: 4852968.599887655,\n        },\n        {\n          x: 12961561.595948681,\n          y: 4852886.1285595605,\n        },\n        {\n          x: 12961562.434182541,\n          y: 4852851.8992535565,\n        },\n        {\n          x: 12961567.092653673,\n          y: 4852663.388779601,\n        },\n        {\n          x: 12961567.151841797,\n          y: 4852661.004664356,\n        },\n        {\n          x: 12961571.615182877,\n          y: 4852499.601380691,\n        },\n        {\n          x: 12961570.762650162,\n          y: 4852327.846076672,\n        },\n        {\n          x: 12961554.898502,\n          y: 4852258.290511526,\n        },\n        {\n          x: 12961533.80510204,\n          y: 4852226.950476327,\n        },\n        {\n          x: 12961502.181787156,\n          y: 4852194.501877436,\n        },\n        {\n          x: 12961463.801001186,\n          y: 4852175.682708853,\n        },\n        {\n          x: 12961419.411661869,\n          y: 4852168.225375068,\n        },\n        {\n          x: 12961360.726703899,\n          y: 4852159.287636606,\n        },\n        {\n          x: 12961305.806766747,\n          y: 4852155.632147181,\n        },\n        {\n          x: 12961091.327734,\n          y: 4852150.8841911405,\n        },\n        {\n          x: 12961044.05355995,\n          y: 4852148.93802986,\n        },\n        {\n          x: 12960991.078574985,\n          y: 4852148.12380065,\n        },\n        {\n          x: 12960926.683247,\n          y: 4852147.134333183,\n        },\n        {\n          x: 12960858.046176687,\n          y: 4852148.206427826,\n        },\n        {\n          x: 12960832.258540388,\n          y: 4852148.44774515,\n        },\n        {\n          x: 12960823.161300883,\n          y: 4852148.574651271,\n        },\n        {\n          x: 12960804.266769528,\n          y: 4852149.284002013,\n        },\n        {\n          x: 12960648.459496386,\n          y: 4852144.033337599,\n        },\n        {\n          x: 12960623.783721833,\n          y: 4852142.918236917,\n        },\n        {\n          x: 12960610.08653878,\n          y: 4852142.2999238875,\n        },\n        {\n          x: 12960436.33035975,\n          y: 4852141.569412107,\n        },\n        {\n          x: 12960425.323876735,\n          y: 4852141.588789343,\n        },\n        {\n          x: 12960418.062649192,\n          y: 4852140.894469294,\n        },\n        {\n          x: 12960397.685451128,\n          y: 4852136.929909052,\n        },\n        {\n          x: 12960381.523315413,\n          y: 4852132.778561514,\n        },\n        {\n          x: 12960359.877821121,\n          y: 4852123.64158053,\n        },\n        {\n          x: 12960334.346658466,\n          y: 4852109.556173046,\n        },\n        {\n          x: 12960318.030734146,\n          y: 4852101.525721443,\n        },\n        {\n          x: 12960299.754816394,\n          y: 4852089.551346909,\n        },\n        {\n          x: 12960273.273841146,\n          y: 4852069.355692289,\n        },\n        {\n          x: 12960250.771053055,\n          y: 4852047.738776747,\n        },\n        {\n          x: 12960236.237871027,\n          y: 4852032.227379977,\n        },\n        {\n          x: 12960225.220958065,\n          y: 4852021.18490097,\n        },\n        {\n          x: 12960202.953132067,\n          y: 4851998.62513292,\n        },\n        {\n          x: 12960134.803431373,\n          y: 4851930.302729313,\n        },\n        {\n          x: 12960131.415559309,\n          y: 4851926.836000303,\n        },\n        {\n          x: 12960033.302394766,\n          y: 4851823.178699325,\n        },\n        {\n          x: 12959943.550656857,\n          y: 4851717.754021466,\n        },\n        {\n          x: 12959908.855465326,\n          y: 4851685.719289181,\n        },\n        {\n          x: 12959858.337924149,\n          y: 4851648.509466072,\n        },\n        {\n          x: 12959827.947234219,\n          y: 4851635.216304059,\n        },\n        {\n          x: 12959793.596422547,\n          y: 4851620.193270011,\n        },\n        {\n          x: 12959764.33089034,\n          y: 4851609.816513307,\n        },\n        {\n          x: 12959751.845001617,\n          y: 4851605.540422947,\n        },\n        {\n          x: 12959710.096488312,\n          y: 4851595.58055257,\n        },\n        {\n          x: 12959644.793413645,\n          y: 4851583.581423427,\n        },\n        {\n          x: 12959487.546643838,\n          y: 4851579.1003289465,\n        },\n        {\n          x: 12959322.352977112,\n          y: 4851573.1751883635,\n        },\n        {\n          x: 12959215.355539855,\n          y: 4851567.487059426,\n        },\n        {\n          x: 12958906.741867626,\n          y: 4851555.576738978,\n        },\n        {\n          x: 12958503.588496968,\n          y: 4851536.078897831,\n        },\n        {\n          x: 12958347.549098158,\n          y: 4851535.177370091,\n        },\n        {\n          x: 12958020.7967457,\n          y: 4851519.547451833,\n        },\n        {\n          x: 12958020.774536882,\n          y: 4851519.546442713,\n        },\n        {\n          x: 12957918.246551817,\n          y: 4851517.112404003,\n        },\n        {\n          x: 12957847.278726801,\n          y: 4851508.301972056,\n        },\n        {\n          x: 12957786.075293908,\n          y: 4851497.8561179675,\n        },\n        {\n          x: 12957620.930185705,\n          y: 4851464.46553163,\n        },\n        {\n          x: 12957553.206441535,\n          y: 4851451.069831951,\n        },\n        {\n          x: 12957184.967742233,\n          y: 4851438.277567215,\n        },\n        {\n          x: 12957151.372959128,\n          y: 4851442.83206844,\n        },\n        {\n          x: 12956984.39334164,\n          y: 4851457.2499878295,\n        },\n        {\n          x: 12956887.683125133,\n          y: 4851467.99801078,\n        },\n        {\n          x: 12956842.417678,\n          y: 4851471.246557499,\n        },\n        {\n          x: 12956795.847498052,\n          y: 4851471.877345327,\n        },\n        {\n          x: 12956726.805401612,\n          y: 4851470.21078116,\n        },\n        {\n          x: 12956719.005096909,\n          y: 4851470.206809098,\n        },\n        {\n          x: 12956690.032717621,\n          y: 4851466.331142748,\n        },\n        {\n          x: 12956671.745146377,\n          y: 4851465.288835637,\n        },\n        {\n          x: 12956647.92701909,\n          y: 4851464.086883708,\n        },\n        {\n          x: 12956432.678734198,\n          y: 4851457.009062028,\n        },\n        {\n          x: 12956305.238743283,\n          y: 4851452.754473514,\n        },\n        {\n          x: 12956260.077742493,\n          y: 4851451.052139781,\n        },\n        {\n          x: 12956108.520973446,\n          y: 4851442.943084553,\n        },\n        {\n          x: 12955979.955562841,\n          y: 4851437.82970239,\n        },\n        {\n          x: 12955830.878658453,\n          y: 4851433.243655892,\n        },\n        {\n          x: 12955632.99933834,\n          y: 4851425.357106182,\n        },\n        {\n          x: 12955594.773108216,\n          y: 4851423.831054184,\n        },\n        {\n          x: 12955514.958767148,\n          y: 4851420.40654864,\n        },\n        {\n          x: 12955415.916358192,\n          y: 4851415.173754157,\n        },\n        {\n          x: 12955412.341824232,\n          y: 4851415.068560076,\n        },\n        {\n          x: 12955220.500590362,\n          y: 4851409.551334249,\n        },\n        {\n          x: 12955177.214926412,\n          y: 4851406.5893032905,\n        },\n        {\n          x: 12955161.53826209,\n          y: 4851406.056397046,\n        },\n        {\n          x: 12955016.683409026,\n          y: 4851400.736845952,\n        },\n        {\n          x: 12954738.676569056,\n          y: 4851389.629311211,\n        },\n        {\n          x: 12954418.456831554,\n          y: 4851372.282889688,\n        },\n        {\n          x: 12954112.367106372,\n          y: 4851361.821497771,\n        },\n        {\n          x: 12954112.366906373,\n          y: 4851361.821497775,\n        },\n        {\n          x: 12954095.960447045,\n          y: 4851361.608137167,\n        },\n        {\n          x: 12954011.183086088,\n          y: 4851358.621103881,\n        },\n        {\n          x: 12953877.563076375,\n          y: 4851352.740857408,\n        },\n        {\n          x: 12953853.85732765,\n          y: 4851351.967020577,\n        },\n        {\n          x: 12953803.748811886,\n          y: 4851349.749490414,\n        },\n        {\n          x: 12953512.054691948,\n          y: 4851336.624567439,\n        },\n        {\n          x: 12953304.439376486,\n          y: 4851326.941645583,\n        },\n        {\n          x: 12953215.990118599,\n          y: 4851343.405356978,\n        },\n        {\n          x: 12953186.516178105,\n          y: 4851352.304914633,\n        },\n        {\n          x: 12953160.820809599,\n          y: 4851360.075985219,\n        },\n        {\n          x: 12953135.6284275,\n          y: 4851368.607839927,\n        },\n        {\n          x: 12953110.773697035,\n          y: 4851379.448142389,\n        },\n        {\n          x: 12953078.728780996,\n          y: 4851396.784940073,\n        },\n        {\n          x: 12953055.671146156,\n          y: 4851410.242045931,\n        },\n        {\n          x: 12953025.125081131,\n          y: 4851430.283492892,\n        },\n        {\n          x: 12953002.867918571,\n          y: 4851441.908865417,\n        },\n        {\n          x: 12952970.9803234,\n          y: 4851464.194335162,\n        },\n        {\n          x: 12952948.54425685,\n          y: 4851486.7574834535,\n        },\n        {\n          x: 12952924.669249073,\n          y: 4851516.663157407,\n        },\n        {\n          x: 12952893.865250975,\n          y: 4851558.425931095,\n        },\n        {\n          x: 12952868.114842031,\n          y: 4851601.291024181,\n        },\n        {\n          x: 12952849.72221334,\n          y: 4851633.9557742765,\n        },\n        {\n          x: 12952840.178024879,\n          y: 4851649.33032892,\n        },\n        {\n          x: 12952831.61507648,\n          y: 4851664.098507009,\n        },\n        {\n          x: 12952820.749844346,\n          y: 4851683.626532975,\n        },\n        {\n          x: 12952808.35960638,\n          y: 4851712.713968235,\n        },\n        {\n          x: 12952805.20735029,\n          y: 4851721.38335488,\n        },\n        {\n          x: 12952799.79260895,\n          y: 4851738.36548495,\n        },\n        {\n          x: 12952789.190178515,\n          y: 4851772.8758911565,\n        },\n        {\n          x: 12952788.761437649,\n          y: 4851774.851755323,\n        },\n        {\n          x: 12952777.120529784,\n          y: 4851828.491181396,\n        },\n        {\n          x: 12952769.442166151,\n          y: 4851865.129402015,\n        },\n        {\n          x: 12952767.325349899,\n          y: 4851875.233108534,\n        },\n        {\n          x: 12952767.225566436,\n          y: 4851887.288016115,\n        },\n        {\n          x: 12952766.931015346,\n          y: 4851923.099737246,\n        },\n        {\n          x: 12952761.952007528,\n          y: 4852049.700375895,\n        },\n        {\n          x: 12952753.300309705,\n          y: 4852305.149185844,\n        },\n        {\n          x: 12952748.81253644,\n          y: 4852466.605133841,\n        },\n        {\n          x: 12952741.572670683,\n          y: 4852644.392438163,\n        },\n        {\n          x: 12952738.74974852,\n          y: 4852719.016327442,\n        },\n        {\n          x: 12952741.79628366,\n          y: 4852826.032311127,\n        },\n        {\n          x: 12952754.022033157,\n          y: 4852951.122076449,\n        },\n        {\n          x: 12952755.67102211,\n          y: 4852968.493352729,\n        },\n        {\n          x: 12952758.734429048,\n          y: 4853002.058635834,\n        },\n        {\n          x: 12952761.031034866,\n          y: 4853033.715526356,\n        },\n        {\n          x: 12952761.5816642,\n          y: 4853041.308351835,\n        },\n        {\n          x: 12952765.105510674,\n          y: 4853089.883771956,\n        },\n        {\n          x: 12952768.26850136,\n          y: 4853131.897335772,\n        },\n        {\n          x: 12952769.995078206,\n          y: 4853158.94429872,\n        },\n        {\n          x: 12952770.288851582,\n          y: 4853209.010686412,\n        },\n        {\n          x: 12952769.71843731,\n          y: 4853247.566692912,\n        },\n        {\n          x: 12952767.145004591,\n          y: 4853346.541922129,\n        },\n        {\n          x: 12952765.253378324,\n          y: 4853436.619436339,\n        },\n        {\n          x: 12952765.214083849,\n          y: 4853437.930242571,\n        },\n        {\n          x: 12952764.052342676,\n          y: 4853458.187819974,\n        },\n        {\n          x: 12952760.168979194,\n          y: 4853554.878914973,\n        },\n        {\n          x: 12952757.95248891,\n          y: 4853628.164651818,\n        },\n        {\n          x: 12952754.901710529,\n          y: 4853716.499504081,\n        },\n        {\n          x: 12952752.129394304,\n          y: 4853804.555406498,\n        },\n        {\n          x: 12952749.6335356,\n          y: 4853872.268162026,\n        },\n        {\n          x: 12952743.72513416,\n          y: 4854014.227085098,\n        },\n        {\n          x: 12952741.487142773,\n          y: 4854096.795681505,\n        },\n        {\n          x: 12952740.271323254,\n          y: 4854189.877021544,\n        },\n        {\n          x: 12952735.244090632,\n          y: 4854295.470985418,\n        },\n        {\n          x: 12952732.246698955,\n          y: 4854403.93734809,\n        },\n        {\n          x: 12952731.594985832,\n          y: 4854421.351329048,\n        },\n        {\n          x: 12952728.21683085,\n          y: 4854497.1336529,\n        },\n        {\n          x: 12952727.968463881,\n          y: 4854504.109582829,\n        },\n        {\n          x: 12952726.933201442,\n          y: 4854533.194906944,\n        },\n        {\n          x: 12952726.57184963,\n          y: 4854544.113349503,\n        },\n        {\n          x: 12952721.050076714,\n          y: 4854688.295102883,\n        },\n        {\n          x: 12952720.966294285,\n          y: 4854713.652392979,\n        },\n        {\n          x: 12952718.064468559,\n          y: 4854769.647643217,\n        },\n        {\n          x: 12952715.044363484,\n          y: 4854852.440379618,\n        },\n        {\n          x: 12952709.221122695,\n          y: 4855060.2259299345,\n        },\n        {\n          x: 12952706.836731823,\n          y: 4855138.965809699,\n        },\n        {\n          x: 12952705.041061016,\n          y: 4855185.826583675,\n        },\n        {\n          x: 12952701.912666142,\n          y: 4855297.303072879,\n        },\n        {\n          x: 12952701.774883661,\n          y: 4855301.000993471,\n        },\n        {\n          x: 12952698.542893687,\n          y: 4855388.379772971,\n        },\n        {\n          x: 12952694.722481314,\n          y: 4855513.192139022,\n        },\n        {\n          x: 12952694.351429062,\n          y: 4855527.489094137,\n        },\n        {\n          x: 12952693.024699595,\n          y: 4855578.268289678,\n        },\n        {\n          x: 12952691.583080197,\n          y: 4855615.825893778,\n        },\n        {\n          x: 12952690.241251186,\n          y: 4855663.662486527,\n        },\n        {\n          x: 12952689.665623294,\n          y: 4855679.603567254,\n        },\n        {\n          x: 12952688.776130756,\n          y: 4855688.786687114,\n        },\n        {\n          x: 12952687.754061554,\n          y: 4855729.323832838,\n        },\n        {\n          x: 12952686.019483153,\n          y: 4855798.026277147,\n        },\n        {\n          x: 12952677.323277667,\n          y: 4856106.12994655,\n        },\n        {\n          x: 12952676.787444718,\n          y: 4856125.15381618,\n        },\n        {\n          x: 12952664.53774193,\n          y: 4856474.271753169,\n        },\n        {\n          x: 12952649.541640174,\n          y: 4856902.04310439,\n        },\n        {\n          x: 12952649.394057715,\n          y: 4856906.40602088,\n        },\n        {\n          x: 12952635.915840019,\n          y: 4857296.152572144,\n        },\n        {\n          x: 12952629.098613512,\n          y: 4857468.8577486845,\n        },\n        {\n          x: 12952638.14364149,\n          y: 4857509.197665979,\n        },\n        {\n          x: 12952650.97963757,\n          y: 4857566.931901507,\n        },\n        {\n          x: 12952656.040774604,\n          y: 4857583.179374015,\n        },\n        {\n          x: 12952668.497268757,\n          y: 4857619.1841071565,\n        },\n        {\n          x: 12952685.776569141,\n          y: 4857653.8455795515,\n        },\n        {\n          x: 12952706.290524684,\n          y: 4857693.299857913,\n        },\n        {\n          x: 12952720.33970559,\n          y: 4857717.258845025,\n        },\n        {\n          x: 12952728.768056454,\n          y: 4857729.804878156,\n        },\n        {\n          x: 12952742.39713164,\n          y: 4857747.850560737,\n        },\n        {\n          x: 12952755.039200235,\n          y: 4857761.81094819,\n        },\n        {\n          x: 12952769.509095559,\n          y: 4857774.792433353,\n        },\n        {\n          x: 12952782.996884435,\n          y: 4857785.801023545,\n        },\n        {\n          x: 12952788.77239826,\n          y: 4857789.984151489,\n        },\n        {\n          x: 12952798.589047497,\n          y: 4857797.094653569,\n        },\n        {\n          x: 12952808.39067999,\n          y: 4857802.308737876,\n        },\n        {\n          x: 12952837.452516967,\n          y: 4857817.2604270065,\n        },\n        {\n          x: 12952881.01716795,\n          y: 4857832.991883696,\n        },\n        {\n          x: 12952938.897575248,\n          y: 4857852.0831211675,\n        },\n        {\n          x: 12952998.780647367,\n          y: 4857874.054135021,\n        },\n        {\n          x: 12953258.491335763,\n          y: 4857983.238622202,\n        },\n        {\n          x: 12953413.859664995,\n          y: 4858039.332894681,\n        },\n        {\n          x: 12953461.589598283,\n          y: 4858056.89652088,\n        },\n        {\n          x: 12953597.722309152,\n          y: 4858106.241247336,\n        },\n        {\n          x: 12953667.79405445,\n          y: 4858131.433108243,\n        },\n        {\n          x: 12953748.275540665,\n          y: 4858167.149194927,\n        },\n        {\n          x: 12953812.476893716,\n          y: 4858200.790776387,\n        },\n        {\n          x: 12954043.962199515,\n          y: 4858326.647837333,\n        },\n        {\n          x: 12954069.141445398,\n          y: 4858340.297104379,\n        },\n        {\n          x: 12954072.957342735,\n          y: 4858342.340504059,\n        },\n        {\n          x: 12954114.16432913,\n          y: 4858364.427001315,\n        },\n        {\n          x: 12954137.618859049,\n          y: 4858375.535725627,\n        },\n        {\n          x: 12954295.058541333,\n          y: 4858440.811649338,\n        },\n        {\n          x: 12954302.457537467,\n          y: 4858443.441923854,\n        },\n        {\n          x: 12954310.15020407,\n          y: 4858445.926167106,\n        },\n        {\n          x: 12954332.638227137,\n          y: 4858452.508316665,\n        },\n        {\n          x: 12954353.823772585,\n          y: 4858458.21648571,\n        },\n        {\n          x: 12954389.227238271,\n          y: 4858467.144308251,\n        },\n        {\n          x: 12954466.181852238,\n          y: 4858479.982544497,\n        },\n        {\n          x: 12954466.70470393,\n          y: 4858480.069293314,\n        },\n        {\n          x: 12954681.711705219,\n          y: 4858497.4227523925,\n        },\n        {\n          x: 12954881.814571371,\n          y: 4858508.773537354,\n        },\n        {\n          x: 12954977.646000914,\n          y: 4858510.359249282,\n        },\n        {\n          x: 12955052.400974875,\n          y: 4858511.444873559,\n        },\n        {\n          x: 12955252.256507836,\n          y: 4858514.336868981,\n        },\n        {\n          x: 12955253.967495963,\n          y: 4858514.361726689,\n        },\n        {\n          x: 12955289.19954713,\n          y: 4858514.5128645515,\n        },\n        {\n          x: 12955354.90360536,\n          y: 4858516.033826125,\n        },\n        {\n          x: 12955355.483066956,\n          y: 4858516.047198033,\n        },\n      ],\n    },\n    {\n      id: \"1\",\n      source: \"2\",\n      target: \"3\",\n      class: \"地铁五号线\",\n      name: \"地铁五号线 0\",\n      controlPoints: [\n        {\n          x: 12960720.74502968,\n          y: 4843624.831892422,\n        },\n        {\n          x: 12960633.531054523,\n          y: 4843628.020999428,\n        },\n        {\n          x: 12960615.721414793,\n          y: 4843628.698697272,\n        },\n        {\n          x: 12960529.018550536,\n          y: 4843631.993865521,\n        },\n        {\n          x: 12960395.923003213,\n          y: 4843634.498433887,\n        },\n        {\n          x: 12960303.4487313,\n          y: 4843658.086022387,\n        },\n        {\n          x: 12960247.83253429,\n          y: 4843698.236051296,\n        },\n        {\n          x: 12960198.244516307,\n          y: 4843756.513927734,\n        },\n        {\n          x: 12960152.936239943,\n          y: 4843826.831983379,\n        },\n        {\n          x: 12960093.80567492,\n          y: 4844050.470482044,\n        },\n        {\n          x: 12960074.685721893,\n          y: 4844241.260554531,\n        },\n        {\n          x: 12960067.43941915,\n          y: 4844443.961097181,\n        },\n        {\n          x: 12960064.463686703,\n          y: 4844812.802009133,\n        },\n        {\n          x: 12960051.958804457,\n          y: 4845167.465485617,\n        },\n        {\n          x: 12960045.686471423,\n          y: 4845319.993679029,\n        },\n        {\n          x: 12960040.290314263,\n          y: 4845427.501735388,\n        },\n        {\n          x: 12960000.078505961,\n          y: 4846409.670004274,\n        },\n        {\n          x: 12959967.360368509,\n          y: 4847353.92871215,\n        },\n        {\n          x: 12959903.599435318,\n          y: 4849086.018465949,\n        },\n        {\n          x: 12959897.308980407,\n          y: 4849189.719214646,\n        },\n        {\n          x: 12959894.110421222,\n          y: 4849203.583410498,\n        },\n        {\n          x: 12959890.4317169,\n          y: 4849219.531068828,\n        },\n        {\n          x: 12959886.89822709,\n          y: 4849232.656139195,\n        },\n        {\n          x: 12959877.73105254,\n          y: 4849260.436420323,\n        },\n        {\n          x: 12959865.561524102,\n          y: 4849290.043697017,\n        },\n        {\n          x: 12959837.38401807,\n          y: 4849362.616048384,\n        },\n        {\n          x: 12959808.903257467,\n          y: 4849435.004427626,\n        },\n        {\n          x: 12959779.115515891,\n          y: 4849512.45632027,\n        },\n        {\n          x: 12959744.160038425,\n          y: 4849599.294323696,\n        },\n        {\n          x: 12959725.117032269,\n          y: 4849657.80245415,\n        },\n        {\n          x: 12959719.313276159,\n          y: 4849682.1804609,\n        },\n        {\n          x: 12959715.446228703,\n          y: 4849703.304149181,\n        },\n        {\n          x: 12959711.903727653,\n          y: 4849724.430177948,\n        },\n        {\n          x: 12959709.011729391,\n          y: 4849753.676989364,\n        },\n        {\n          x: 12959707.415947258,\n          y: 4849783.8967948,\n        },\n        {\n          x: 12959706.932266207,\n          y: 4849809.126489505,\n        },\n        {\n          x: 12959706.941864654,\n          y: 4849836.458652587,\n        },\n        {\n          x: 12959706.941864647,\n          y: 4849836.458852586,\n        },\n        {\n          x: 12959706.73825638,\n          y: 4849843.058438657,\n        },\n        {\n          x: 12959701.188848983,\n          y: 4850022.751749156,\n        },\n        {\n          x: 12959698.75643586,\n          y: 4850092.048955763,\n        },\n        {\n          x: 12959696.677162938,\n          y: 4850153.857703244,\n        },\n        {\n          x: 12959695.78056296,\n          y: 4850188.632551699,\n        },\n        {\n          x: 12959694.918345,\n          y: 4850201.721921542,\n        },\n        {\n          x: 12959692.002134146,\n          y: 4850243.844071576,\n        },\n        {\n          x: 12959688.713196509,\n          y: 4850307.368296433,\n        },\n        {\n          x: 12959688.399038235,\n          y: 4850412.527108991,\n        },\n        {\n          x: 12959688.405735636,\n          y: 4850420.937318844,\n        },\n        {\n          x: 12959688.343863737,\n          y: 4850445.110083258,\n        },\n        {\n          x: 12959686.127736844,\n          y: 4850539.017117742,\n        },\n        {\n          x: 12959683.968880652,\n          y: 4850587.739754507,\n        },\n        {\n          x: 12959680.875828847,\n          y: 4850658.134830053,\n        },\n        {\n          x: 12959679.529814905,\n          y: 4850705.839287117,\n        },\n        {\n          x: 12959676.829087818,\n          y: 4850793.495084584,\n        },\n        {\n          x: 12959675.815426968,\n          y: 4850823.398964908,\n        },\n        {\n          x: 12959675.182101322,\n          y: 4850846.066167584,\n        },\n        {\n          x: 12959674.637837825,\n          y: 4850881.825140678,\n        },\n        {\n          x: 12959674.600854788,\n          y: 4850900.231972202,\n        },\n        {\n          x: 12959672.17730142,\n          y: 4850971.880703524,\n        },\n        {\n          x: 12959670.889156122,\n          y: 4851002.727395804,\n        },\n        {\n          x: 12959670.698638307,\n          y: 4851010.549985337,\n        },\n        {\n          x: 12959668.117749112,\n          y: 4851106.755282467,\n        },\n        {\n          x: 12959665.56854209,\n          y: 4851184.430341829,\n        },\n        {\n          x: 12959663.290916206,\n          y: 4851257.106068522,\n        },\n        {\n          x: 12959662.369610716,\n          y: 4851304.277585146,\n        },\n        {\n          x: 12959661.413917739,\n          y: 4851326.766808909,\n        },\n        {\n          x: 12959657.931598857,\n          y: 4851433.829044472,\n        },\n        {\n          x: 12959658.028261015,\n          y: 4851474.80850299,\n        },\n        {\n          x: 12959657.267483199,\n          y: 4851488.965234568,\n        },\n        {\n          x: 12959651.951822918,\n          y: 4851544.541841047,\n        },\n        {\n          x: 12959644.793413645,\n          y: 4851583.581423427,\n        },\n        {\n          x: 12959595.684288755,\n          y: 4852619.8846618915,\n        },\n        {\n          x: 12959574.465131808,\n          y: 4853929.7776421,\n        },\n        {\n          x: 12959536.880014552,\n          y: 4854963.031257658,\n        },\n        {\n          x: 12959497.404227743,\n          y: 4856298.871464132,\n        },\n        {\n          x: 12959482.020338908,\n          y: 4856720.60653976,\n        },\n        {\n          x: 12959481.210910158,\n          y: 4856745.719910398,\n        },\n        {\n          x: 12959480.218744718,\n          y: 4856801.67083334,\n        },\n        {\n          x: 12959480.657100372,\n          y: 4856811.732979886,\n        },\n        {\n          x: 12959473.537570594,\n          y: 4857026.976625398,\n        },\n        {\n          x: 12959472.67316361,\n          y: 4857117.529377648,\n        },\n        {\n          x: 12959471.826244202,\n          y: 4857148.4116494795,\n        },\n        {\n          x: 12959471.914116398,\n          y: 4857157.0041156085,\n        },\n        {\n          x: 12959471.914116394,\n          y: 4857157.004315607,\n        },\n        {\n          x: 12959468.421265613,\n          y: 4857243.442849801,\n        },\n        {\n          x: 12959465.42503048,\n          y: 4857320.248131243,\n        },\n        {\n          x: 12959457.359831337,\n          y: 4857487.904976163,\n        },\n        {\n          x: 12959441.732397161,\n          y: 4858203.22983063,\n        },\n        {\n          x: 12959436.13624882,\n          y: 4858459.380345282,\n        },\n        {\n          x: 12959415.193417262,\n          y: 4858615.8007214,\n        },\n        {\n          x: 12959400.093169626,\n          y: 4858713.511716538,\n        },\n        {\n          x: 12959399.09985982,\n          y: 4858740.126114421,\n        },\n        {\n          x: 12959398.923112214,\n          y: 4858756.581567208,\n        },\n        {\n          x: 12959400.425177053,\n          y: 4858770.664816282,\n        },\n        {\n          x: 12959403.329731172,\n          y: 4858781.277141151,\n        },\n        {\n          x: 12959406.81271103,\n          y: 4858791.891385901,\n        },\n        {\n          x: 12959411.454041706,\n          y: 4858801.77406984,\n        },\n        {\n          x: 12959416.960302725,\n          y: 4858809.912175236,\n        },\n        {\n          x: 12959421.887523,\n          y: 4858817.179145314,\n        },\n        {\n          x: 12959428.263989503,\n          y: 4858824.297946437,\n        },\n        {\n          x: 12959438.405571558,\n          y: 4858834.467323184,\n        },\n        {\n          x: 12959446.951603249,\n          y: 4858840.418765018,\n        },\n        {\n          x: 12959453.47044277,\n          y: 4858844.047635263,\n        },\n        {\n          x: 12959461.338227013,\n          y: 4858847.889734993,\n        },\n        {\n          x: 12959468.530699532,\n          y: 4858850.719229388,\n        },\n        {\n          x: 12959476.367733365,\n          y: 4858853.206677165,\n        },\n        {\n          x: 12959486.177776907,\n          y: 4858855.242211642,\n        },\n        {\n          x: 12959498.356965585,\n          y: 4858856.501662772,\n        },\n        {\n          x: 12959543.238861157,\n          y: 4858861.103129856,\n        },\n        {\n          x: 12959564.955544673,\n          y: 4858862.823145494,\n        },\n        {\n          x: 12959585.658078235,\n          y: 4858864.541516278,\n        },\n        {\n          x: 12959595.839429364,\n          y: 4858866.740035375,\n        },\n        {\n          x: 12959604.626178885,\n          y: 4858869.753969439,\n        },\n        {\n          x: 12959619.393890884,\n          y: 4858875.118084437,\n        },\n        {\n          x: 12959634.602011,\n          y: 4858883.533997516,\n        },\n        {\n          x: 12959647.926199682,\n          y: 4858893.114601357,\n        },\n        {\n          x: 12959659.08101609,\n          y: 4858903.862660445,\n        },\n        {\n          x: 12959672.122859873,\n          y: 4858920.571917142,\n        },\n        {\n          x: 12959683.284136135,\n          y: 4858939.464230514,\n        },\n        {\n          x: 12959691.987331163,\n          y: 4858961.4122961955,\n        },\n        {\n          x: 12959695.907905033,\n          y: 4858977.986510597,\n        },\n        {\n          x: 12959696.897168944,\n          y: 4858990.458458495,\n        },\n        {\n          x: 12959696.95704519,\n          y: 4859022.197030113,\n        },\n        {\n          x: 12959693.756261105,\n          y: 4859059.590188502,\n        },\n        {\n          x: 12959690.179340184,\n          y: 4859134.214310129,\n        },\n        {\n          x: 12959685.340567466,\n          y: 4859249.237691335,\n        },\n        {\n          x: 12959685.339668898,\n          y: 4859260.445091072,\n        },\n        {\n          x: 12959679.606577044,\n          y: 4859423.720155937,\n        },\n        {\n          x: 12959665.286089724,\n          y: 4859737.709063406,\n        },\n        {\n          x: 12959643.000270054,\n          y: 4860035.900026235,\n        },\n        {\n          x: 12959632.910441214,\n          y: 4860295.517810925,\n        },\n        {\n          x: 12959592.233549183,\n          y: 4861342.088331037,\n        },\n        {\n          x: 12959588.730015729,\n          y: 4861432.225749819,\n        },\n        {\n          x: 12959556.060278306,\n          y: 4862388.960503767,\n        },\n        {\n          x: 12959545.695101015,\n          y: 4862688.364754779,\n        },\n        {\n          x: 12959518.592346862,\n          y: 4863435.743969738,\n        },\n        {\n          x: 12959485.60762339,\n          y: 4864345.2318098685,\n        },\n        {\n          x: 12959486.001310887,\n          y: 4864482.759632916,\n        },\n        {\n          x: 12959486.585650299,\n          y: 4865230.9384146165,\n        },\n        {\n          x: 12959489.44520427,\n          y: 4865436.730097548,\n        },\n        {\n          x: 12959497.988421464,\n          y: 4865529.704413291,\n        },\n        {\n          x: 12959497.988421455,\n          y: 4865529.704613299,\n        },\n        {\n          x: 12959519.200702442,\n          y: 4865741.969269226,\n        },\n        {\n          x: 12959522.357194034,\n          y: 4865776.148131042,\n        },\n        {\n          x: 12959522.573317947,\n          y: 4865778.504652967,\n        },\n        {\n          x: 12959522.916097239,\n          y: 4865782.246629099,\n        },\n        {\n          x: 12959551.022895565,\n          y: 4866071.32380023,\n        },\n        {\n          x: 12959556.838158142,\n          y: 4866160.7037429465,\n        },\n        {\n          x: 12959551.949571997,\n          y: 4866262.940886653,\n        },\n        {\n          x: 12959540.38150212,\n          y: 4866354.7103297105,\n        },\n        {\n          x: 12959539.340979226,\n          y: 4866362.459925865,\n        },\n        {\n          x: 12959513.475078186,\n          y: 4866576.75533692,\n        },\n        {\n          x: 12959513.47507818,\n          y: 4866576.755436918,\n        },\n        {\n          x: 12959497.755400725,\n          y: 4866692.268572319,\n        },\n        {\n          x: 12959497.610949984,\n          y: 4866693.40672459,\n        },\n        {\n          x: 12959483.493606979,\n          y: 4866796.261737931,\n        },\n        {\n          x: 12959466.691132883,\n          y: 4866917.22829191,\n        },\n        {\n          x: 12959461.210504338,\n          y: 4866960.1057711635,\n        },\n        {\n          x: 12959426.407796139,\n          y: 4867225.807957604,\n        },\n        {\n          x: 12959418.801394718,\n          y: 4867288.213382227,\n        },\n        {\n          x: 12959416.692326868,\n          y: 4867306.0886218455,\n        },\n        {\n          x: 12959410.47637647,\n          y: 4867351.37610048,\n        },\n        {\n          x: 12959400.148907803,\n          y: 4867462.455263302,\n        },\n        {\n          x: 12959399.112409318,\n          y: 4867478.93856583,\n        },\n        {\n          x: 12959396.256439034,\n          y: 4867556.841285077,\n        },\n        {\n          x: 12959394.84524912,\n          y: 4867623.882782224,\n        },\n        {\n          x: 12959402.914618,\n          y: 4867739.272140503,\n        },\n        {\n          x: 12959407.505976537,\n          y: 4867797.003244392,\n        },\n        {\n          x: 12959415.808022052,\n          y: 4867872.177101691,\n        },\n        {\n          x: 12959437.831136882,\n          y: 4868003.5787004335,\n        },\n        {\n          x: 12959443.098101616,\n          y: 4868036.394816039,\n        },\n        {\n          x: 12959464.101440175,\n          y: 4868167.242968876,\n        },\n        {\n          x: 12959478.37498549,\n          y: 4868261.98680037,\n        },\n        {\n          x: 12959508.23051181,\n          y: 4868432.816097544,\n        },\n        {\n          x: 12959539.922123043,\n          y: 4868629.3165109595,\n        },\n        {\n          x: 12959551.24160535,\n          y: 4868728.22086592,\n        },\n        {\n          x: 12959555.049512597,\n          y: 4868834.379861189,\n        },\n        {\n          x: 12959557.09776522,\n          y: 4869178.128956159,\n        },\n        {\n          x: 12959557.46233141,\n          y: 4869212.439258056,\n        },\n        {\n          x: 12959560.523011155,\n          y: 4869592.048363338,\n        },\n        {\n          x: 12959577.865984676,\n          y: 4869718.394291774,\n        },\n        {\n          x: 12959590.012423703,\n          y: 4869827.204686913,\n        },\n        {\n          x: 12959595.795077762,\n          y: 4869869.18333726,\n        },\n        {\n          x: 12959598.248023918,\n          y: 4869952.360503471,\n        },\n        {\n          x: 12959599.56821579,\n          y: 4870095.040123146,\n        },\n        {\n          x: 12959609.728836436,\n          y: 4870531.437161518,\n        },\n        {\n          x: 12959603.972221585,\n          y: 4870603.500963714,\n        },\n        {\n          x: 12959588.040449219,\n          y: 4870699.62726807,\n        },\n        {\n          x: 12959577.341958042,\n          y: 4870759.729165575,\n        },\n        {\n          x: 12959552.550153958,\n          y: 4870890.017106278,\n        },\n        {\n          x: 12959549.504474476,\n          y: 4870907.895185102,\n        },\n        {\n          x: 12959536.238199469,\n          y: 4870980.633462292,\n        },\n        {\n          x: 12959519.906514881,\n          y: 4871059.136581221,\n        },\n        {\n          x: 12959498.606091205,\n          y: 4871123.470002014,\n        },\n        {\n          x: 12959483.02793797,\n          y: 4871158.4458806105,\n        },\n        {\n          x: 12959398.579719294,\n          y: 4871307.904408066,\n        },\n        {\n          x: 12959372.473708287,\n          y: 4871364.923557604,\n        },\n        {\n          x: 12959355.676189639,\n          y: 4871417.85108307,\n        },\n        {\n          x: 12959345.382419249,\n          y: 4871467.110988155,\n        },\n        {\n          x: 12959337.246138988,\n          y: 4871518.719362454,\n        },\n        {\n          x: 12959331.993689496,\n          y: 4871552.047085774,\n        },\n        {\n          x: 12959329.720869558,\n          y: 4871566.954753559,\n        },\n        {\n          x: 12959309.401737848,\n          y: 4871682.640660545,\n        },\n        {\n          x: 12959284.09575571,\n          y: 4871813.104051212,\n        },\n        {\n          x: 12959272.141485408,\n          y: 4871880.577467433,\n        },\n        {\n          x: 12959212.679174809,\n          y: 4872024.938082188,\n        },\n        {\n          x: 12959122.218527583,\n          y: 4872236.515550644,\n        },\n        {\n          x: 12959101.497205438,\n          y: 4872286.842893077,\n        },\n        {\n          x: 12959082.233978389,\n          y: 4872332.857224708,\n        },\n        {\n          x: 12959064.438388105,\n          y: 4872374.568487362,\n        },\n        {\n          x: 12959002.833097033,\n          y: 4872476.910775585,\n        },\n        {\n          x: 12958978.720982237,\n          y: 4872510.998020613,\n        },\n        {\n          x: 12958934.40716439,\n          y: 4872572.781793622,\n        },\n        {\n          x: 12958888.474905616,\n          y: 4872641.302003023,\n        },\n        {\n          x: 12958847.253143456,\n          y: 4872732.877987774,\n        },\n        {\n          x: 12958840.613299651,\n          y: 4872775.301160091,\n        },\n        {\n          x: 12958826.01344493,\n          y: 4872861.8293480575,\n        },\n        {\n          x: 12958817.526527362,\n          y: 4873017.26494393,\n        },\n        {\n          x: 12958814.054718142,\n          y: 4873226.284171534,\n        },\n        {\n          x: 12958816.11193364,\n          y: 4873266.055943593,\n        },\n        {\n          x: 12958816.129135203,\n          y: 4873290.15488096,\n        },\n        {\n          x: 12958821.354560152,\n          y: 4873309.887136759,\n        },\n        {\n          x: 12958841.32562995,\n          y: 4873397.115248937,\n        },\n        {\n          x: 12958844.285408415,\n          y: 4873409.713148855,\n        },\n        {\n          x: 12958847.915875804,\n          y: 4873422.442037873,\n        },\n        {\n          x: 12958889.630321097,\n          y: 4873507.434415227,\n        },\n        {\n          x: 12958925.449787276,\n          y: 4873574.258471447,\n        },\n        {\n          x: 12959052.396737209,\n          y: 4873809.916450764,\n        },\n        {\n          x: 12959072.334776778,\n          y: 4873851.7039971035,\n        },\n        {\n          x: 12959091.382334014,\n          y: 4873912.579314463,\n        },\n        {\n          x: 12959103.205925986,\n          y: 4873994.365655067,\n        },\n        {\n          x: 12959105.049669469,\n          y: 4874040.715385412,\n        },\n        {\n          x: 12959098.781538986,\n          y: 4874130.696496499,\n        },\n        {\n          x: 12959091.653604891,\n          y: 4874277.942229356,\n        },\n        {\n          x: 12959073.762015432,\n          y: 4874560.621555201,\n        },\n        {\n          x: 12959055.88026487,\n          y: 4874851.491609374,\n        },\n        {\n          x: 12959035.313639542,\n          y: 4875190.5466335295,\n        },\n        {\n          x: 12959020.984397592,\n          y: 4875394.165125814,\n        },\n        {\n          x: 12958976.23099209,\n          y: 4876077.778969328,\n        },\n        {\n          x: 12958959.745692749,\n          y: 4876337.611516656,\n        },\n        {\n          x: 12958959.782791425,\n          y: 4876388.517880667,\n        },\n        {\n          x: 12958963.47494545,\n          y: 4876487.604684548,\n        },\n        {\n          x: 12958978.051701134,\n          y: 4876614.863733437,\n        },\n        {\n          x: 12959002.615098093,\n          y: 4876782.118274665,\n        },\n        {\n          x: 12959044.457185756,\n          y: 4877060.270620597,\n        },\n        {\n          x: 12959067.219679391,\n          y: 4877241.168949157,\n        },\n        {\n          x: 12959071.783226173,\n          y: 4877290.243072816,\n        },\n        {\n          x: 12959070.11534219,\n          y: 4877482.0814475445,\n        },\n        {\n          x: 12959050.419169253,\n          y: 4877777.579645479,\n        },\n        {\n          x: 12959032.750496056,\n          y: 4878102.221159315,\n        },\n        {\n          x: 12959032.750496058,\n          y: 4878102.221259315,\n        },\n        {\n          x: 12959003.26866052,\n          y: 4878470.802548815,\n        },\n        {\n          x: 12959000.418311324,\n          y: 4878535.557270987,\n        },\n        {\n          x: 12958996.46075172,\n          y: 4878573.393290567,\n        },\n        {\n          x: 12958986.710555336,\n          y: 4878612.325690378,\n        },\n        {\n          x: 12958984.36114175,\n          y: 4878620.285756933,\n        },\n        {\n          x: 12958979.482719835,\n          y: 4878633.567604723,\n        },\n        {\n          x: 12958971.70519758,\n          y: 4878648.669953857,\n        },\n        {\n          x: 12958960.310788708,\n          y: 4878668.732809022,\n        },\n        {\n          x: 12958954.159688484,\n          y: 4878678.6962916935,\n        },\n        {\n          x: 12958940.408512954,\n          y: 4878697.079788669,\n        },\n        {\n          x: 12958920.863620294,\n          y: 4878718.556967109,\n        },\n        {\n          x: 12958911.0902516,\n          y: 4878726.568490176,\n        },\n        {\n          x: 12958895.161451222,\n          y: 4878738.950175331,\n        },\n        {\n          x: 12958883.032721909,\n          y: 4878747.3254355155,\n        },\n        {\n          x: 12958866.73870309,\n          y: 4878756.433205192,\n        },\n        {\n          x: 12958839.217742998,\n          y: 4878769.914421513,\n        },\n        {\n          x: 12958816.400635526,\n          y: 4878777.388295637,\n        },\n        {\n          x: 12958783.623366289,\n          y: 4878784.917193882,\n        },\n        {\n          x: 12958771.309150409,\n          y: 4878786.744063957,\n        },\n        {\n          x: 12958739.429878792,\n          y: 4878788.584452175,\n        },\n        {\n          x: 12958705.738986243,\n          y: 4878786.424910058,\n        },\n        {\n          x: 12958578.932445105,\n          y: 4878772.682927707,\n        },\n        {\n          x: 12958490.16318142,\n          y: 4878762.546866739,\n        },\n        {\n          x: 12958476.030639933,\n          y: 4878759.645153562,\n        },\n        {\n          x: 12958398.482079366,\n          y: 4878738.585155731,\n        },\n        {\n          x: 12958337.60009126,\n          y: 4878723.697450009,\n        },\n        {\n          x: 12958319.258018306,\n          y: 4878717.823743411,\n        },\n        {\n          x: 12958285.414545368,\n          y: 4878706.985809459,\n        },\n        {\n          x: 12958281.24441303,\n          y: 4878706.124142206,\n        },\n        {\n          x: 12958265.300704759,\n          y: 4878704.674592208,\n        },\n        {\n          x: 12958248.322873216,\n          y: 4878700.7330124155,\n        },\n        {\n          x: 12958235.48402549,\n          y: 4878697.874149074,\n        },\n        {\n          x: 12958209.66504376,\n          y: 4878694.661718712,\n        },\n        {\n          x: 12958185.394430613,\n          y: 4878692.518259022,\n        },\n        {\n          x: 12958163.832025072,\n          y: 4878687.433936088,\n        },\n        {\n          x: 12958149.29817478,\n          y: 4878683.5722363135,\n        },\n        {\n          x: 12958127.588537483,\n          y: 4878677.8039692715,\n        },\n        {\n          x: 12958103.488411777,\n          y: 4878671.445979302,\n        },\n        {\n          x: 12958088.084013943,\n          y: 4878666.72080967,\n        },\n        {\n          x: 12958073.22210372,\n          y: 4878661.450932288,\n        },\n        {\n          x: 12958053.105073934,\n          y: 4878653.090874466,\n        },\n        {\n          x: 12958019.939165607,\n          y: 4878639.8218743205,\n        },\n        {\n          x: 12957987.498125235,\n          y: 4878626.005036278,\n        },\n        {\n          x: 12957976.804148829,\n          y: 4878622.369122046,\n        },\n        {\n          x: 12957959.95128188,\n          y: 4878618.734327142,\n        },\n        {\n          x: 12957933.674733272,\n          y: 4878614.921507571,\n        },\n      ],\n    },\n    {\n      id: \"2\",\n      source: \"4\",\n      target: \"5\",\n      class: \"地铁房山线\",\n      name: \"地铁房山线 0\",\n      controlPoints: [\n        {\n          x: 12924448.17238817,\n          y: 4826880.333482542,\n        },\n        {\n          x: 12924525.979211709,\n          y: 4826872.878344628,\n        },\n        {\n          x: 12924651.003975658,\n          y: 4826850.186382258,\n        },\n        {\n          x: 12924772.909010362,\n          y: 4826831.637862584,\n        },\n        {\n          x: 12924892.815210382,\n          y: 4826808.910764785,\n        },\n        {\n          x: 12924979.825081667,\n          y: 4826797.17955122,\n        },\n        {\n          x: 12925084.39744784,\n          y: 4826783.365645579,\n        },\n        {\n          x: 12925155.81120956,\n          y: 4826773.302022665,\n        },\n        {\n          x: 12925191.531802883,\n          y: 4826763.145386636,\n        },\n        {\n          x: 12925246.401130036,\n          y: 4826741.508641205,\n        },\n        {\n          x: 12925289.809143692,\n          y: 4826716.000219138,\n        },\n        {\n          x: 12925328.122217724,\n          y: 4826687.913828323,\n        },\n        {\n          x: 12925435.446934095,\n          y: 4826589.547291209,\n        },\n        {\n          x: 12925667.935929714,\n          y: 4826383.866700324,\n        },\n        {\n          x: 12925703.114335984,\n          y: 4826349.828286723,\n        },\n        {\n          x: 12925770.622207448,\n          y: 4826279.8993723765,\n        },\n        {\n          x: 12925812.089063462,\n          y: 4826236.363691168,\n        },\n        {\n          x: 12925860.064926796,\n          y: 4826185.624213163,\n        },\n        {\n          x: 12925972.45908047,\n          y: 4826067.695006573,\n        },\n        {\n          x: 12926072.836947165,\n          y: 4825968.627523454,\n        },\n        {\n          x: 12926117.70970191,\n          y: 4825926.122953221,\n        },\n        {\n          x: 12926163.925422803,\n          y: 4825891.864408059,\n        },\n        {\n          x: 12926224.487089904,\n          y: 4825859.005237854,\n        },\n        {\n          x: 12926272.713245494,\n          y: 4825838.833351052,\n        },\n        {\n          x: 12926306.225330409,\n          y: 4825828.247220456,\n        },\n        {\n          x: 12926323.66112753,\n          y: 4825823.471552652,\n        },\n        {\n          x: 12926342.999038229,\n          y: 4825815.638790402,\n        },\n        {\n          x: 12926395.038321048,\n          y: 4825807.019948717,\n        },\n        {\n          x: 12926456.619666297,\n          y: 4825801.386693386,\n        },\n        {\n          x: 12926771.931888463,\n          y: 4825802.616129439,\n        },\n        {\n          x: 12926851.048048986,\n          y: 4825801.631130125,\n        },\n        {\n          x: 12926918.475671358,\n          y: 4825800.789146462,\n        },\n        {\n          x: 12927029.359667536,\n          y: 4825801.827672996,\n        },\n        {\n          x: 12927182.830807276,\n          y: 4825803.048420769,\n        },\n        {\n          x: 12927499.41885292,\n          y: 4825801.064920832,\n        },\n        {\n          x: 12927985.316114604,\n          y: 4825802.302803997,\n        },\n        {\n          x: 12928151.253302878,\n          y: 4825800.059199896,\n        },\n        {\n          x: 12928748.07329185,\n          y: 4825800.240476295,\n        },\n        {\n          x: 12929111.030443402,\n          y: 4825800.274953787,\n        },\n        {\n          x: 12929262.734959431,\n          y: 4825802.042122076,\n        },\n        {\n          x: 12929411.395781256,\n          y: 4825802.035455338,\n        },\n        {\n          x: 12929506.992909838,\n          y: 4825802.706934221,\n        },\n        {\n          x: 12929650.07556503,\n          y: 4825802.544157764,\n        },\n        {\n          x: 12929720.668591391,\n          y: 4825802.142241587,\n        },\n        {\n          x: 12929772.983434387,\n          y: 4825800.887369454,\n        },\n        {\n          x: 12929857.446321096,\n          y: 4825798.160825567,\n        },\n        {\n          x: 12929912.070413183,\n          y: 4825797.961849597,\n        },\n        {\n          x: 12930020.049115648,\n          y: 4825798.40702736,\n        },\n        {\n          x: 12930163.955832295,\n          y: 4825797.372447041,\n        },\n        {\n          x: 12930397.554672962,\n          y: 4825796.54976334,\n        },\n        {\n          x: 12930475.738706259,\n          y: 4825796.886377486,\n        },\n        {\n          x: 12930546.696718559,\n          y: 4825797.190814849,\n        },\n        {\n          x: 12930678.19064345,\n          y: 4825796.767765474,\n        },\n        {\n          x: 12930758.84637836,\n          y: 4825797.611875748,\n        },\n        {\n          x: 12930844.12941692,\n          y: 4825797.184218957,\n        },\n        {\n          x: 12931658.797219362,\n          y: 4825797.407901417,\n        },\n        {\n          x: 12932033.235206187,\n          y: 4825795.320207194,\n        },\n        {\n          x: 12932233.393439343,\n          y: 4825794.180152587,\n        },\n        {\n          x: 12932721.308799969,\n          y: 4825803.219910631,\n        },\n        {\n          x: 12932928.523249036,\n          y: 4825803.557711617,\n        },\n        {\n          x: 12933053.790329,\n          y: 4825812.987185039,\n        },\n        {\n          x: 12933138.900921563,\n          y: 4825833.806609662,\n        },\n        {\n          x: 12933190.809829095,\n          y: 4825856.349271142,\n        },\n        {\n          x: 12933226.429307265,\n          y: 4825874.795930243,\n        },\n        {\n          x: 12933272.213535246,\n          y: 4825905.5475769965,\n        },\n        {\n          x: 12933330.19116232,\n          y: 4825952.706628941,\n        },\n        {\n          x: 12933394.224417783,\n          y: 4826031.661583878,\n        },\n        {\n          x: 12933434.848204572,\n          y: 4826099.343443693,\n        },\n        {\n          x: 12933457.160278024,\n          y: 4826153.699179631,\n        },\n        {\n          x: 12933477.393874265,\n          y: 4826231.651463547,\n        },\n        {\n          x: 12933483.411973838,\n          y: 4826283.965274176,\n        },\n        {\n          x: 12933484.24966211,\n          y: 4826383.467920047,\n        },\n        {\n          x: 12933484.612918697,\n          y: 4826744.564537366,\n        },\n        {\n          x: 12933484.578816487,\n          y: 4826763.36453251,\n        },\n        {\n          x: 12933483.779386565,\n          y: 4826924.895615106,\n        },\n        {\n          x: 12933482.610669505,\n          y: 4827007.992815708,\n        },\n        {\n          x: 12933492.646572754,\n          y: 4827092.110644749,\n        },\n        {\n          x: 12933513.41196703,\n          y: 4827439.884337276,\n        },\n        {\n          x: 12933543.228519833,\n          y: 4827854.75280781,\n        },\n        {\n          x: 12933566.570100563,\n          y: 4828176.552121379,\n        },\n        {\n          x: 12933594.643939137,\n          y: 4828596.572517603,\n        },\n        {\n          x: 12933629.925192222,\n          y: 4829103.087824667,\n        },\n        {\n          x: 12933645.64381434,\n          y: 4829320.597027384,\n        },\n        {\n          x: 12933649.89045366,\n          y: 4829382.144115338,\n        },\n        {\n          x: 12933667.168927083,\n          y: 4829632.556420974,\n        },\n        {\n          x: 12933676.117122944,\n          y: 4829774.023766041,\n        },\n        {\n          x: 12933682.081289982,\n          y: 4829869.157117123,\n        },\n        {\n          x: 12933689.928693485,\n          y: 4829940.817807672,\n        },\n        {\n          x: 12933703.310192509,\n          y: 4830006.297419812,\n        },\n        {\n          x: 12933719.154849395,\n          y: 4830066.214843579,\n        },\n        {\n          x: 12933755.774424188,\n          y: 4830174.310550475,\n        },\n        {\n          x: 12933810.744445253,\n          y: 4830313.90749861,\n        },\n        {\n          x: 12933922.503728205,\n          y: 4830609.788269573,\n        },\n        {\n          x: 12934038.543576436,\n          y: 4830918.028547641,\n        },\n        {\n          x: 12934058.694520555,\n          y: 4830974.859139696,\n        },\n        {\n          x: 12934069.58014834,\n          y: 4831005.072471465,\n        },\n        {\n          x: 12934119.846976575,\n          y: 4831143.433958218,\n        },\n        {\n          x: 12934149.991077174,\n          y: 4831222.949836257,\n        },\n        {\n          x: 12934198.033104936,\n          y: 4831349.678156342,\n        },\n        {\n          x: 12934223.473509623,\n          y: 4831400.412253144,\n        },\n        {\n          x: 12934259.369952803,\n          y: 4831461.028016709,\n        },\n        {\n          x: 12934309.114426302,\n          y: 4831520.072779361,\n        },\n        {\n          x: 12934377.085065225,\n          y: 4831581.991332408,\n        },\n        {\n          x: 12934396.69835483,\n          y: 4831595.164926664,\n        },\n        {\n          x: 12934437.243386144,\n          y: 4831618.212550709,\n        },\n        {\n          x: 12934478.449542966,\n          y: 4831638.623777254,\n        },\n        {\n          x: 12934524.898399867,\n          y: 4831655.075704626,\n        },\n        {\n          x: 12934580.515549589,\n          y: 4831668.889447878,\n        },\n        {\n          x: 12934636.143351322,\n          y: 4831676.770691342,\n        },\n        {\n          x: 12934666.908025475,\n          y: 4831679.39163554,\n        },\n        {\n          x: 12934765.756048232,\n          y: 4831678.685510442,\n        },\n        {\n          x: 12934930.73367185,\n          y: 4831674.651678714,\n        },\n        {\n          x: 12935250.876591342,\n          y: 4831667.251747576,\n        },\n        {\n          x: 12935499.671785736,\n          y: 4831663.187574107,\n        },\n        {\n          x: 12935746.513249094,\n          y: 4831659.130713738,\n        },\n        {\n          x: 12935815.915508969,\n          y: 4831660.42132409,\n        },\n        {\n          x: 12935908.050789848,\n          y: 4831663.982781072,\n        },\n        {\n          x: 12935967.815653212,\n          y: 4831666.293463208,\n        },\n        {\n          x: 12936241.494185515,\n          y: 4831674.4963234225,\n        },\n        {\n          x: 12936369.370711273,\n          y: 4831678.336400013,\n        },\n        {\n          x: 12936425.785732588,\n          y: 4831676.31555289,\n        },\n        {\n          x: 12936581.316240864,\n          y: 4831673.037189442,\n        },\n        {\n          x: 12936633.370649267,\n          y: 4831674.963771561,\n        },\n        {\n          x: 12936737.713978717,\n          y: 4831679.370178035,\n        },\n        {\n          x: 12936831.315349536,\n          y: 4831683.322450787,\n        },\n        {\n          x: 12936877.589160608,\n          y: 4831685.252679165,\n        },\n        {\n          x: 12936910.361308584,\n          y: 4831690.419854687,\n        },\n        {\n          x: 12936949.558532905,\n          y: 4831696.881239256,\n        },\n        {\n          x: 12936987.467610013,\n          y: 4831706.574167675,\n        },\n        {\n          x: 12937022.15788816,\n          y: 4831719.5039792955,\n        },\n        {\n          x: 12937065.199754963,\n          y: 4831736.958924886,\n        },\n        {\n          x: 12937110.158974504,\n          y: 4831760.881236912,\n        },\n        {\n          x: 12937157.036534246,\n          y: 4831793.8590075895,\n        },\n        {\n          x: 12937199.404558316,\n          y: 4831833.307823846,\n        },\n        {\n          x: 12937237.91287837,\n          y: 4831875.343509309,\n        },\n        {\n          x: 12937258.446807722,\n          y: 4831901.211682247,\n        },\n        {\n          x: 12937284.10526521,\n          y: 4831938.723324833,\n        },\n        {\n          x: 12937312.95239147,\n          y: 4831994.991182708,\n        },\n        {\n          x: 12937327.68762551,\n          y: 4832030.564244142,\n        },\n        {\n          x: 12937343.684707167,\n          y: 4832083.600788961,\n        },\n        {\n          x: 12937351.972602425,\n          y: 4832131.461705969,\n        },\n        {\n          x: 12937358.31940185,\n          y: 4832186.438225887,\n        },\n        {\n          x: 12937355.622857124,\n          y: 4832274.4059191365,\n        },\n        {\n          x: 12937339.975481886,\n          y: 4832427.060379704,\n        },\n        {\n          x: 12937324.788945852,\n          y: 4832705.848365801,\n        },\n        {\n          x: 12937293.01305762,\n          y: 4832897.32304263,\n        },\n        {\n          x: 12937270.892804373,\n          y: 4833079.740939002,\n        },\n        {\n          x: 12937248.767915612,\n          y: 4833263.455352972,\n        },\n        {\n          x: 12937209.689481642,\n          y: 4833612.138889359,\n        },\n        {\n          x: 12937165.784590699,\n          y: 4834031.900756954,\n        },\n        {\n          x: 12937138.418116648,\n          y: 4834222.711592586,\n        },\n        {\n          x: 12937083.08660543,\n          y: 4834535.844936789,\n        },\n        {\n          x: 12937052.334413424,\n          y: 4834663.757169239,\n        },\n        {\n          x: 12936994.342385216,\n          y: 4834895.126983638,\n        },\n        {\n          x: 12936953.854431149,\n          y: 4835030.737985154,\n        },\n        {\n          x: 12936869.843218748,\n          y: 4835313.3219827665,\n        },\n        {\n          x: 12936862.532161772,\n          y: 4835339.778036121,\n        },\n        {\n          x: 12936836.320704404,\n          y: 4835434.637730703,\n        },\n        {\n          x: 12936827.217503313,\n          y: 4835519.169988192,\n        },\n        {\n          x: 12936827.124637516,\n          y: 4835581.758973662,\n        },\n        {\n          x: 12936837.906126408,\n          y: 4835663.063325517,\n        },\n        {\n          x: 12936864.056538468,\n          y: 4835757.266142062,\n        },\n        {\n          x: 12936880.668495258,\n          y: 4835797.917881852,\n        },\n        {\n          x: 12936907.667939143,\n          y: 4835847.318738415,\n        },\n        {\n          x: 12936952.878761742,\n          y: 4835914.1082075,\n        },\n        {\n          x: 12937000.216170117,\n          y: 4835969.234486032,\n        },\n        {\n          x: 12937063.361933991,\n          y: 4836023.2971759755,\n        },\n        {\n          x: 12937143.36704171,\n          y: 4836079.4810301885,\n        },\n        {\n          x: 12937217.081887215,\n          y: 4836115.519519725,\n        },\n        {\n          x: 12937329.790312514,\n          y: 4836151.556748291,\n        },\n        {\n          x: 12937431.328256749,\n          y: 4836175.655924688,\n        },\n        {\n          x: 12937851.122850813,\n          y: 4836275.4876682935,\n        },\n        {\n          x: 12938154.622310877,\n          y: 4836341.2390868,\n        },\n        {\n          x: 12938362.244614977,\n          y: 4836390.037264124,\n        },\n        {\n          x: 12938503.041870078,\n          y: 4836411.664485504,\n        },\n        {\n          x: 12938564.047320768,\n          y: 4836418.793423229,\n        },\n        {\n          x: 12938988.303480383,\n          y: 4836457.009886602,\n        },\n        {\n          x: 12939480.568825236,\n          y: 4836493.208155112,\n        },\n        {\n          x: 12939792.38983277,\n          y: 4836515.385447704,\n        },\n        {\n          x: 12940262.993302846,\n          y: 4836548.909357694,\n        },\n        {\n          x: 12940393.59269819,\n          y: 4836559.504709913,\n        },\n        {\n          x: 12940478.91780255,\n          y: 4836571.822251312,\n        },\n        {\n          x: 12940790.622461848,\n          y: 4836636.837138435,\n        },\n        {\n          x: 12941203.633091165,\n          y: 4836730.122990206,\n        },\n        {\n          x: 12941712.749939607,\n          y: 4836839.200160033,\n        },\n        {\n          x: 12942167.786199445,\n          y: 4836936.5137574095,\n        },\n        {\n          x: 12942294.984682916,\n          y: 4836959.65357408,\n        },\n        {\n          x: 12942610.524821742,\n          y: 4837005.682620561,\n        },\n        {\n          x: 12942843.547300853,\n          y: 4837039.413158133,\n        },\n        {\n          x: 12943166.318173433,\n          y: 4837086.947605261,\n        },\n        {\n          x: 12943510.46784253,\n          y: 4837134.81698191,\n        },\n        {\n          x: 12943617.3707184,\n          y: 4837150.799628537,\n        },\n        {\n          x: 12943658.487001108,\n          y: 4837158.769269097,\n        },\n        {\n          x: 12943691.736804834,\n          y: 4837167.08383111,\n        },\n        {\n          x: 12943717.587123148,\n          y: 4837172.921819401,\n        },\n        {\n          x: 12943814.810048617,\n          y: 4837200.232098826,\n        },\n        {\n          x: 12943917.263605423,\n          y: 4837238.058053253,\n        },\n        {\n          x: 12943974.78713743,\n          y: 4837264.277939439,\n        },\n        {\n          x: 12944030.153658753,\n          y: 4837291.952562648,\n        },\n        {\n          x: 12944135.650915911,\n          y: 4837354.294186727,\n        },\n        {\n          x: 12944445.141549075,\n          y: 4837528.417611227,\n        },\n        {\n          x: 12944644.509050895,\n          y: 4837635.945078776,\n        },\n        {\n          x: 12944685.94060137,\n          y: 4837654.409708789,\n        },\n        {\n          x: 12944719.086739298,\n          y: 4837669.359215808,\n        },\n        {\n          x: 12944794.975247588,\n          y: 4837699.716510274,\n        },\n        {\n          x: 12944947.1976908,\n          y: 4837760.873124597,\n        },\n        {\n          x: 12945035.745333357,\n          y: 4837798.266491122,\n        },\n        {\n          x: 12945124.72566364,\n          y: 4837845.286033468,\n        },\n        {\n          x: 12945270.414963193,\n          y: 4837921.319729365,\n        },\n        {\n          x: 12945450.582071586,\n          y: 4838013.632744957,\n        },\n        {\n          x: 12945577.533408465,\n          y: 4838080.445217846,\n        },\n        {\n          x: 12945834.434212714,\n          y: 4838202.613398697,\n        },\n        {\n          x: 12946075.31690205,\n          y: 4838296.146027662,\n        },\n        {\n          x: 12946292.279576164,\n          y: 4838360.532187274,\n        },\n        {\n          x: 12946521.019224824,\n          y: 4838491.165573925,\n        },\n        {\n          x: 12946638.949600644,\n          y: 4838621.542593471,\n        },\n        {\n          x: 12946650.686066799,\n          y: 4838737.438298838,\n        },\n      ],\n    },\n    {\n      id: \"3\",\n      source: \"6\",\n      target: \"7\",\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 0\",\n      controlPoints: [\n        {\n          x: 12960801.92985531,\n          y: 4843268.231642703,\n        },\n        {\n          x: 12960819.048596159,\n          y: 4842751.648234617,\n        },\n        {\n          x: 12960883.71369413,\n          y: 4842268.659267911,\n        },\n        {\n          x: 12960932.9503868,\n          y: 4842163.931739517,\n        },\n        {\n          x: 12961006.927248925,\n          y: 4842097.692273121,\n        },\n        {\n          x: 12961168.66192465,\n          y: 4842014.7338780835,\n        },\n        {\n          x: 12962601.717469966,\n          y: 4841896.79575762,\n        },\n        {\n          x: 12962754.46753597,\n          y: 4841885.241291034,\n        },\n        {\n          x: 12962943.500290178,\n          y: 4841880.673982279,\n        },\n        {\n          x: 12963012.112349365,\n          y: 4841876.615867013,\n        },\n        {\n          x: 12963059.010006737,\n          y: 4841861.67650217,\n        },\n        {\n          x: 12963116.452138275,\n          y: 4841834.8158408785,\n        },\n        {\n          x: 12963210.447880082,\n          y: 4841771.47221078,\n        },\n        {\n          x: 12963235.833946913,\n          y: 4841754.363392143,\n        },\n        {\n          x: 12963662.654879957,\n          y: 4841466.647965242,\n        },\n        {\n          x: 12964038.994342858,\n          y: 4841212.831358209,\n        },\n        {\n          x: 12964154.545155134,\n          y: 4841070.441342094,\n        },\n        {\n          x: 12964171.735590378,\n          y: 4841010.993206987,\n        },\n        {\n          x: 12964339.916463993,\n          y: 4840434.314594529,\n        },\n        {\n          x: 12964343.389385078,\n          y: 4840399.329742603,\n        },\n        {\n          x: 12964334.817316562,\n          y: 4840225.397102979,\n        },\n        {\n          x: 12964331.221136974,\n          y: 4840162.554061632,\n        },\n        {\n          x: 12964328.50535713,\n          y: 4840100.593094604,\n        },\n        {\n          x: 12964332.779831221,\n          y: 4840004.0775054535,\n        },\n        {\n          x: 12964346.582668858,\n          y: 4839794.207556842,\n        },\n        {\n          x: 12964363.097590594,\n          y: 4839601.773416806,\n        },\n        {\n          x: 12964380.328964364,\n          y: 4839365.602941362,\n        },\n        {\n          x: 12964385.8482237,\n          y: 4839211.548689884,\n        },\n        {\n          x: 12964387.499547305,\n          y: 4839127.002529577,\n        },\n        {\n          x: 12964391.276917182,\n          y: 4838985.794324284,\n        },\n        {\n          x: 12964392.443018869,\n          y: 4838864.958482721,\n        },\n        {\n          x: 12964394.955731656,\n          y: 4838766.690857032,\n        },\n        {\n          x: 12964393.975998627,\n          y: 4838687.027470687,\n        },\n        {\n          x: 12964387.294707682,\n          y: 4838617.567328025,\n        },\n        {\n          x: 12964367.416052649,\n          y: 4838539.309062238,\n        },\n        {\n          x: 12964347.51619,\n          y: 4838431.650587995,\n        },\n        {\n          x: 12964322.767169563,\n          y: 4838324.645467618,\n        },\n        {\n          x: 12964313.562428541,\n          y: 4838262.541243617,\n        },\n        {\n          x: 12964310.411869453,\n          y: 4838225.729635625,\n        },\n        {\n          x: 12964309.355618041,\n          y: 4838208.017849213,\n        },\n        {\n          x: 12964309.656222237,\n          y: 4838174.319843992,\n        },\n        {\n          x: 12964311.684558112,\n          y: 4838140.960443022,\n        },\n        {\n          x: 12964317.833830703,\n          y: 4838091.9543595165,\n        },\n        {\n          x: 12964329.018005343,\n          y: 4838019.745353896,\n        },\n        {\n          x: 12964357.57037216,\n          y: 4837928.397117701,\n        },\n        {\n          x: 12964379.95742845,\n          y: 4837836.721116149,\n        },\n        {\n          x: 12964395.761376698,\n          y: 4837785.937210788,\n        },\n        {\n          x: 12964408.481659109,\n          y: 4837751.494051737,\n        },\n        {\n          x: 12964423.958059136,\n          y: 4837713.2194660455,\n        },\n        {\n          x: 12964454.929082762,\n          y: 4837651.608776794,\n        },\n        {\n          x: 12964485.908545986,\n          y: 4837599.028090593,\n        },\n        {\n          x: 12964502.078122087,\n          y: 4837575.000819509,\n        },\n        {\n          x: 12964507.944067815,\n          y: 4837566.284373945,\n        },\n        {\n          x: 12964538.941616124,\n          y: 4837526.901722564,\n        },\n        {\n          x: 12964580.623847708,\n          y: 4837481.571345544,\n        },\n        {\n          x: 12964632.30168787,\n          y: 4837432.37855521,\n        },\n        {\n          x: 12964707.289879689,\n          y: 4837377.0810903795,\n        },\n        {\n          x: 12964746.5828552,\n          y: 4837352.947415166,\n        },\n        {\n          x: 12964787.599945143,\n          y: 4837330.888655926,\n        },\n        {\n          x: 12964847.234552702,\n          y: 4837303.540100147,\n        },\n        {\n          x: 12964952.379239444,\n          y: 4837263.837261641,\n        },\n        {\n          x: 12965041.659042722,\n          y: 4837228.367036585,\n        },\n        {\n          x: 12965086.817706559,\n          y: 4837212.190291242,\n        },\n        {\n          x: 12965125.425630035,\n          y: 4837197.083091712,\n        },\n        {\n          x: 12965198.852510314,\n          y: 4837173.487209741,\n        },\n        {\n          x: 12965285.035077993,\n          y: 4837148.788444636,\n        },\n        {\n          x: 12965345.022458684,\n          y: 4837136.015256971,\n        },\n        {\n          x: 12965376.741696445,\n          y: 4837131.008352433,\n        },\n        {\n          x: 12965413.288189877,\n          y: 4837126.675422853,\n        },\n        {\n          x: 12965466.732716972,\n          y: 4837121.571415942,\n        },\n        {\n          x: 12965495.35177725,\n          y: 4837119.3559531085,\n        },\n        {\n          x: 12965530.521028334,\n          y: 4837117.112703386,\n        },\n        {\n          x: 12965593.968191253,\n          y: 4837116.473776446,\n        },\n        {\n          x: 12965649.486601945,\n          y: 4837118.648806222,\n        },\n        {\n          x: 12965697.768784914,\n          y: 4837122.941340376,\n        },\n        {\n          x: 12965780.881747998,\n          y: 4837133.843576874,\n        },\n        {\n          x: 12965906.431954557,\n          y: 4837162.43093923,\n        },\n        {\n          x: 12966118.21979879,\n          y: 4837224.64350029,\n        },\n        {\n          x: 12966330.35727124,\n          y: 4837296.215654915,\n        },\n        {\n          x: 12966430.728530029,\n          y: 4837328.721880014,\n        },\n        {\n          x: 12966526.230111593,\n          y: 4837358.910915481,\n        },\n        {\n          x: 12966643.884234305,\n          y: 4837396.097468287,\n        },\n        {\n          x: 12966715.9714909,\n          y: 4837420.053074277,\n        },\n        {\n          x: 12966775.298984269,\n          y: 4837442.68182159,\n        },\n        {\n          x: 12966834.282130612,\n          y: 4837464.615069852,\n        },\n        {\n          x: 12966877.402287401,\n          y: 4837483.848933528,\n        },\n        {\n          x: 12966941.220910013,\n          y: 4837513.053573998,\n        },\n        {\n          x: 12967048.56698116,\n          y: 4837567.953487057,\n        },\n        {\n          x: 12967160.356455721,\n          y: 4837633.033932691,\n        },\n        {\n          x: 12967341.830451151,\n          y: 4837734.223029286,\n        },\n        {\n          x: 12967598.515018187,\n          y: 4837876.520746398,\n        },\n        {\n          x: 12967695.550281677,\n          y: 4837931.8672629995,\n        },\n        {\n          x: 12967769.295083275,\n          y: 4837973.927233142,\n        },\n        {\n          x: 12967806.210225426,\n          y: 4837994.921276422,\n        },\n        {\n          x: 12967880.373314308,\n          y: 4838029.263222194,\n        },\n        {\n          x: 12967942.458581364,\n          y: 4838054.463929446,\n        },\n        {\n          x: 12968006.949619304,\n          y: 4838074.960467259,\n        },\n        {\n          x: 12968064.880156811,\n          y: 4838089.239839763,\n        },\n        {\n          x: 12968160.7317529,\n          y: 4838106.785960654,\n        },\n        {\n          x: 12968223.818423554,\n          y: 4838111.656953844,\n        },\n        {\n          x: 12968280.003925696,\n          y: 4838113.086931953,\n        },\n        {\n          x: 12968326.878944056,\n          y: 4838112.138498563,\n        },\n        {\n          x: 12968367.54589312,\n          y: 4838109.4857799625,\n        },\n        {\n          x: 12968389.51656575,\n          y: 4838106.448409635,\n        },\n        {\n          x: 12968438.187831255,\n          y: 4838099.719152986,\n        },\n        {\n          x: 12968498.833145326,\n          y: 4838088.619169914,\n        },\n        {\n          x: 12968538.110375632,\n          y: 4838079.370846887,\n        },\n        {\n          x: 12968616.314083783,\n          y: 4838057.750684839,\n        },\n        {\n          x: 12968698.633058043,\n          y: 4838023.949189746,\n        },\n        {\n          x: 12968811.931290373,\n          y: 4837966.003419178,\n        },\n        {\n          x: 12968881.824553497,\n          y: 4837922.53959489,\n        },\n        {\n          x: 12968943.430079784,\n          y: 4837870.786756742,\n        },\n        {\n          x: 12969022.924111847,\n          y: 4837800.520362136,\n        },\n        {\n          x: 12969055.9530577,\n          y: 4837765.945136667,\n        },\n        {\n          x: 12969084.843050089,\n          y: 4837731.392991392,\n        },\n        {\n          x: 12969120.958078042,\n          y: 4837688.466172142,\n        },\n        {\n          x: 12969155.332209961,\n          y: 4837635.4723625,\n        },\n        {\n          x: 12969242.285513127,\n          y: 4837496.730319538,\n        },\n        {\n          x: 12969333.712761667,\n          y: 4837355.187852096,\n        },\n        {\n          x: 12969408.647255532,\n          y: 4837235.936020544,\n        },\n        {\n          x: 12969513.801304353,\n          y: 4837064.791048047,\n        },\n        {\n          x: 12969590.779687598,\n          y: 4836941.394981127,\n        },\n        {\n          x: 12969705.899936745,\n          y: 4836755.955416486,\n        },\n        {\n          x: 12969806.238916375,\n          y: 4836594.567940544,\n        },\n        {\n          x: 12969938.533153186,\n          y: 4836382.639398942,\n        },\n        {\n          x: 12970039.8160462,\n          y: 4836217.531831086,\n        },\n        {\n          x: 12970129.245947173,\n          y: 4836071.878209337,\n        },\n        {\n          x: 12970220.246216761,\n          y: 4835926.897614078,\n        },\n        {\n          x: 12970286.073547151,\n          y: 4835822.025633852,\n        },\n        {\n          x: 12970415.07546836,\n          y: 4835612.642595116,\n        },\n        {\n          x: 12970568.870650535,\n          y: 4835365.18734994,\n        },\n        {\n          x: 12970669.724938907,\n          y: 4835202.376148994,\n        },\n        {\n          x: 12970752.484735584,\n          y: 4835070.152439515,\n        },\n        {\n          x: 12970832.895625059,\n          y: 4834939.975857269,\n        },\n        {\n          x: 12970899.569476828,\n          y: 4834832.910757041,\n        },\n        {\n          x: 12971033.918129083,\n          y: 4834616.066050077,\n        },\n        {\n          x: 12971144.158073269,\n          y: 4834433.937266104,\n        },\n        {\n          x: 12971198.069970135,\n          y: 4834344.871445297,\n        },\n        {\n          x: 12971305.26943295,\n          y: 4834167.479451596,\n        },\n        {\n          x: 12971364.235194443,\n          y: 4834074.351988931,\n        },\n        {\n          x: 12971525.71156008,\n          y: 4833814.364471716,\n        },\n        {\n          x: 12971682.679083303,\n          y: 4833562.284042895,\n        },\n        {\n          x: 12971812.288419375,\n          y: 4833350.753875024,\n        },\n        {\n          x: 12972017.979800759,\n          y: 4833021.125112385,\n        },\n        {\n          x: 12972103.744545488,\n          y: 4832885.194999167,\n        },\n        {\n          x: 12972135.257382995,\n          y: 4832846.417732776,\n        },\n        {\n          x: 12972160.077781122,\n          y: 4832821.220722371,\n        },\n        {\n          x: 12972199.662509607,\n          y: 4832785.10628778,\n        },\n        {\n          x: 12972264.123885086,\n          y: 4832742.901302573,\n        },\n        {\n          x: 12972264.12408505,\n          y: 4832742.901202536,\n        },\n        {\n          x: 12972324.21434308,\n          y: 4832713.4141902095,\n        },\n        {\n          x: 12972386.305619905,\n          y: 4832692.675651716,\n        },\n        {\n          x: 12972428.804140508,\n          y: 4832685.222868618,\n        },\n        {\n          x: 12972485.012097614,\n          y: 4832680.520476171,\n        },\n        {\n          x: 12972542.168608952,\n          y: 4832680.834396475,\n        },\n        {\n          x: 12972604.011630796,\n          y: 4832688.654398485,\n        },\n        {\n          x: 12972644.212348452,\n          y: 4832699.10386752,\n        },\n        {\n          x: 12972696.734916897,\n          y: 4832717.642597281,\n        },\n        {\n          x: 12972757.695351638,\n          y: 4832749.00336457,\n        },\n        {\n          x: 12972859.999908108,\n          y: 4832813.088811927,\n        },\n        {\n          x: 12972941.093523078,\n          y: 4832860.97338974,\n        },\n        {\n          x: 12973004.727402989,\n          y: 4832901.107069043,\n        },\n        {\n          x: 12973063.375094922,\n          y: 4832939.388312671,\n        },\n        {\n          x: 12973118.709117647,\n          y: 4832976.2564467145,\n        },\n        {\n          x: 12973157.278549964,\n          y: 4833001.955820043,\n        },\n        {\n          x: 12973287.045299167,\n          y: 4833078.76948663,\n        },\n        {\n          x: 12973336.018910544,\n          y: 4833107.376876498,\n        },\n        {\n          x: 12973532.737387815,\n          y: 4833234.050880133,\n        },\n        {\n          x: 12973711.056147737,\n          y: 4833345.140835251,\n        },\n        {\n          x: 12973939.785549805,\n          y: 4833486.730983602,\n        },\n        {\n          x: 12974177.84357694,\n          y: 4833635.477147498,\n        },\n        {\n          x: 12974448.095380764,\n          y: 4833804.380259698,\n        },\n        {\n          x: 12974616.656587714,\n          y: 4833906.469350846,\n        },\n        {\n          x: 12974744.179042902,\n          y: 4833983.66343434,\n        },\n        {\n          x: 12974848.457567113,\n          y: 4834048.738895861,\n        },\n        {\n          x: 12975023.307596708,\n          y: 4834158.038177878,\n        },\n        {\n          x: 12975344.80631824,\n          y: 4834362.369596276,\n        },\n        {\n          x: 12975542.195598783,\n          y: 4834485.718127945,\n        },\n        {\n          x: 12975589.153098417,\n          y: 4834515.976788436,\n        },\n        {\n          x: 12975743.362999665,\n          y: 4834615.341611351,\n        },\n        {\n          x: 12976018.28541726,\n          y: 4834788.58647766,\n        },\n        {\n          x: 12976156.837017762,\n          y: 4834874.4406398935,\n        },\n        {\n          x: 12976203.26410973,\n          y: 4834903.209489788,\n        },\n        {\n          x: 12976425.749449603,\n          y: 4835044.1395141035,\n        },\n        {\n          x: 12976682.803252261,\n          y: 4835209.05760146,\n        },\n        {\n          x: 12977612.288689816,\n          y: 4836078.591476348,\n        },\n        {\n          x: 12977703.538800083,\n          y: 4836157.900805114,\n        },\n        {\n          x: 12977801.888863295,\n          y: 4836235.662686368,\n        },\n        {\n          x: 12978758.33292605,\n          y: 4837259.312987513,\n        },\n        {\n          x: 12978842.971959101,\n          y: 4837349.736883194,\n        },\n        {\n          x: 12979531.54154612,\n          y: 4838049.719256911,\n        },\n        {\n          x: 12979689.378903074,\n          y: 4838256.735438744,\n        },\n        {\n          x: 12980051.853140548,\n          y: 4838731.323685468,\n        },\n        {\n          x: 12980384.15998818,\n          y: 4839120.990048823,\n        },\n        {\n          x: 12980467.93565266,\n          y: 4839255.613023306,\n        },\n        {\n          x: 12980521.623321274,\n          y: 4839397.296177998,\n        },\n        {\n          x: 12980529.827086125,\n          y: 4839430.697709363,\n        },\n        {\n          x: 12980535.501366084,\n          y: 4839564.805608976,\n        },\n        {\n          x: 12980538.135068312,\n          y: 4840222.645451332,\n        },\n        {\n          x: 12980538.379641674,\n          y: 4840283.5996034695,\n        },\n        {\n          x: 12980538.543424217,\n          y: 4840324.221498785,\n        },\n        {\n          x: 12980535.067586645,\n          y: 4840405.430398631,\n        },\n        {\n          x: 12980525.345959615,\n          y: 4840470.937074263,\n        },\n        {\n          x: 12980513.995958695,\n          y: 4840544.736949112,\n        },\n      ],\n    },\n    {\n      id: \"4\",\n      source: \"8\",\n      target: \"9\",\n      class: \"地铁一号线\",\n      name: \"地铁一号线 0\",\n      controlPoints: [\n        {\n          x: 12969787.144385956,\n          y: 4852662.477041108,\n        },\n        {\n          x: 12969236.284285808,\n          y: 4852670.237943584,\n        },\n        {\n          x: 12968944.36629118,\n          y: 4852676.464039239,\n        },\n        {\n          x: 12968472.728321342,\n          y: 4852684.58530441,\n        },\n        {\n          x: 12968414.420578972,\n          y: 4852687.842999674,\n        },\n        {\n          x: 12968235.54912727,\n          y: 4852697.8323459625,\n        },\n        {\n          x: 12968069.523958666,\n          y: 4852708.845800531,\n        },\n        {\n          x: 12967520.284252618,\n          y: 4852709.247613191,\n        },\n        {\n          x: 12967117.366149856,\n          y: 4852665.62205985,\n        },\n        {\n          x: 12966772.612022452,\n          y: 4852628.17396013,\n        },\n        {\n          x: 12966517.096762186,\n          y: 4852623.936320605,\n        },\n        {\n          x: 12966223.985369124,\n          y: 4852617.830735498,\n        },\n        {\n          x: 12964521.542056274,\n          y: 4852636.984637193,\n        },\n        {\n          x: 12964462.063732337,\n          y: 4852637.63680008,\n        },\n        {\n          x: 12964380.646967553,\n          y: 4852638.41249018,\n        },\n        {\n          x: 12964310.636384122,\n          y: 4852638.548196548,\n        },\n        {\n          x: 12964259.391907305,\n          y: 4852638.609292217,\n        },\n        {\n          x: 12964063.789477564,\n          y: 4852640.250627404,\n        },\n        {\n          x: 12964002.433399238,\n          y: 4852641.068996505,\n        },\n        {\n          x: 12963990.595935801,\n          y: 4852641.261031478,\n        },\n        {\n          x: 12963890.25903454,\n          y: 4852642.515969342,\n        },\n        {\n          x: 12963809.987625448,\n          y: 4852643.546429879,\n        },\n        {\n          x: 12963781.834338633,\n          y: 4852643.942282169,\n        },\n        {\n          x: 12963774.327120606,\n          y: 4852643.970398907,\n        },\n        {\n          x: 12963455.081045607,\n          y: 4852646.588025983,\n        },\n        {\n          x: 12963322.230220675,\n          y: 4852647.784045951,\n        },\n        {\n          x: 12963223.166991241,\n          y: 4852649.725733759,\n        },\n        {\n          x: 12963190.819152791,\n          y: 4852650.417434513,\n        },\n        {\n          x: 12963127.561328052,\n          y: 4852650.0517423265,\n        },\n        {\n          x: 12963039.607865393,\n          y: 4852649.766256757,\n        },\n        {\n          x: 12962819.058636826,\n          y: 4852651.358893755,\n        },\n        {\n          x: 12962593.866965737,\n          y: 4852653.665194887,\n        },\n        {\n          x: 12962462.408622202,\n          y: 4852654.791986625,\n        },\n        {\n          x: 12962183.756523842,\n          y: 4852657.365475698,\n        },\n        {\n          x: 12962157.173752429,\n          y: 4852659.766562548,\n        },\n        {\n          x: 12961924.104038442,\n          y: 4852660.11712501,\n        },\n        {\n          x: 12961924.059855,\n          y: 4852660.116942157,\n        },\n        {\n          x: 12961900.696391538,\n          y: 4852660.033076115,\n        },\n        {\n          x: 12961567.092653673,\n          y: 4852663.388779601,\n        },\n        {\n          x: 12961454.569802668,\n          y: 4852664.505495348,\n        },\n        {\n          x: 12961217.079500727,\n          y: 4852658.515584384,\n        },\n        {\n          x: 12961149.13715287,\n          y: 4852657.212458487,\n        },\n        {\n          x: 12961133.237071244,\n          y: 4852657.247371087,\n        },\n        {\n          x: 12961027.846655574,\n          y: 4852654.2780048065,\n        },\n        {\n          x: 12960863.900760658,\n          y: 4852649.966801163,\n        },\n        {\n          x: 12960818.644700909,\n          y: 4852648.896293183,\n        },\n        {\n          x: 12960637.184863163,\n          y: 4852644.743311257,\n        },\n        {\n          x: 12960624.025816733,\n          y: 4852644.477645673,\n        },\n        {\n          x: 12960602.480219977,\n          y: 4852643.937047354,\n        },\n        {\n          x: 12960506.031680021,\n          y: 4852641.9318091385,\n        },\n        {\n          x: 12960391.353551494,\n          y: 4852639.083787939,\n        },\n        {\n          x: 12960320.201913092,\n          y: 4852637.313773441,\n        },\n        {\n          x: 12960062.18095632,\n          y: 4852628.1362550985,\n        },\n        {\n          x: 12959904.438548937,\n          y: 4852627.023597047,\n        },\n        {\n          x: 12959595.684288755,\n          y: 4852619.8846618915,\n        },\n        {\n          x: 12959323.178066703,\n          y: 4852609.481755874,\n        },\n        {\n          x: 12958840.802221617,\n          y: 4852590.942915122,\n        },\n        {\n          x: 12957502.352622895,\n          y: 4852528.684166141,\n        },\n        {\n          x: 12956620.835296787,\n          y: 4852504.508925668,\n        },\n        {\n          x: 12955674.942021938,\n          y: 4852471.61015628,\n        },\n        {\n          x: 12955416.308852747,\n          y: 4852469.018503432,\n        },\n        {\n          x: 12954706.035138829,\n          y: 4852461.803325078,\n        },\n        {\n          x: 12953928.716739,\n          y: 4852464.489858927,\n        },\n        {\n          x: 12952788.83672684,\n          y: 4852466.54282573,\n        },\n        {\n          x: 12952748.81253644,\n          y: 4852466.605133841,\n        },\n        {\n          x: 12951563.203060223,\n          y: 4852477.671537925,\n        },\n        {\n          x: 12951199.751181506,\n          y: 4852495.122833292,\n        },\n        {\n          x: 12950198.141508736,\n          y: 4852495.025451202,\n        },\n        {\n          x: 12949965.299984097,\n          y: 4852495.077305805,\n        },\n        {\n          x: 12949129.26242653,\n          y: 4852504.598358415,\n        },\n        {\n          x: 12947838.444126923,\n          y: 4852505.90698292,\n        },\n        {\n          x: 12947589.306786017,\n          y: 4852505.320736883,\n        },\n        {\n          x: 12945901.390879856,\n          y: 4852501.577557874,\n        },\n        {\n          x: 12944980.974916212,\n          y: 4852499.625168126,\n        },\n        {\n          x: 12943548.12132782,\n          y: 4852497.380847655,\n        },\n        {\n          x: 12942376.001682293,\n          y: 4852500.03430738,\n        },\n        {\n          x: 12941203.789519304,\n          y: 4852502.985840143,\n        },\n        {\n          x: 12939774.001753055,\n          y: 4852500.299665425,\n        },\n        {\n          x: 12938324.854233196,\n          y: 4852497.834034189,\n        },\n        {\n          x: 12938281.788912078,\n          y: 4852497.828983922,\n        },\n        {\n          x: 12938058.817138307,\n          y: 4852497.810737135,\n        },\n        {\n          x: 12937898.86276059,\n          y: 4852497.3685845565,\n        },\n        {\n          x: 12937671.875809424,\n          y: 4852496.791572168,\n        },\n        {\n          x: 12937460.220387606,\n          y: 4852497.967734828,\n        },\n        {\n          x: 12937174.041187,\n          y: 4852498.731022245,\n        },\n        {\n          x: 12937173.96999806,\n          y: 4852498.730233027,\n        },\n        {\n          x: 12937136.194604035,\n          y: 4852498.300376261,\n        },\n        {\n          x: 12936946.821682766,\n          y: 4852498.918736944,\n        },\n        {\n          x: 12936849.614381388,\n          y: 4852498.356186343,\n        },\n        {\n          x: 12936692.322356569,\n          y: 4852497.959326306,\n        },\n        {\n          x: 12936587.17645106,\n          y: 4852498.5677669365,\n        },\n        {\n          x: 12934252.339824114,\n          y: 4852499.457888381,\n        },\n        {\n          x: 12934092.666854141,\n          y: 4852498.783005591,\n        },\n        {\n          x: 12933957.2920676,\n          y: 4852554.157396755,\n        },\n        {\n          x: 12933867.245068891,\n          y: 4852636.768727248,\n        },\n        {\n          x: 12933790.29537299,\n          y: 4852771.049393255,\n        },\n        {\n          x: 12933709.54499776,\n          y: 4852986.243814959,\n        },\n        {\n          x: 12933275.354659256,\n          y: 4854146.7353322515,\n        },\n      ],\n    },\n    {\n      id: \"5\",\n      source: \"10\",\n      target: \"11\",\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 0\",\n      controlPoints: [\n        {\n          x: 12954320.097829182,\n          y: 4841755.370768595,\n        },\n        {\n          x: 12954269.565863218,\n          y: 4841475.231416884,\n        },\n        {\n          x: 12954109.467427691,\n          y: 4840587.804965775,\n        },\n        {\n          x: 12953795.666789988,\n          y: 4838847.936111765,\n        },\n        {\n          x: 12953779.74076359,\n          y: 4838781.406112334,\n        },\n        {\n          x: 12953764.911988458,\n          y: 4838735.372116771,\n        },\n        {\n          x: 12953728.040718146,\n          y: 4838684.612972186,\n        },\n        {\n          x: 12953200.942060454,\n          y: 4837849.787883376,\n        },\n        {\n          x: 12953071.02731984,\n          y: 4837651.869209399,\n        },\n        {\n          x: 12952979.616992796,\n          y: 4837589.00545091,\n        },\n        {\n          x: 12952903.159508042,\n          y: 4837579.42379109,\n        },\n        {\n          x: 12952782.211602798,\n          y: 4837577.388802782,\n        },\n        {\n          x: 12952678.006507806,\n          y: 4837568.850794091,\n        },\n        {\n          x: 12952630.246652557,\n          y: 4837568.346663251,\n        },\n        {\n          x: 12952563.144880537,\n          y: 4837569.3784104185,\n        },\n        {\n          x: 12952459.727695232,\n          y: 4837576.654353493,\n        },\n        {\n          x: 12952047.259057738,\n          y: 4837602.473680529,\n        },\n        {\n          x: 12951992.11263072,\n          y: 4837607.014363404,\n        },\n        {\n          x: 12951930.600837775,\n          y: 4837607.287158209,\n        },\n        {\n          x: 12951859.333033504,\n          y: 4837604.988006545,\n        },\n        {\n          x: 12951659.950799704,\n          y: 4837590.463923004,\n        },\n        {\n          x: 12951511.86811374,\n          y: 4837581.708907432,\n        },\n        {\n          x: 12951503.592170091,\n          y: 4837581.306936129,\n        },\n        {\n          x: 12951471.758692794,\n          y: 4837579.760443551,\n        },\n        {\n          x: 12951416.434195919,\n          y: 4837581.464508876,\n        },\n        {\n          x: 12951320.836636368,\n          y: 4837591.26673181,\n        },\n        {\n          x: 12951208.471245904,\n          y: 4837608.1171654025,\n        },\n        {\n          x: 12951130.332944639,\n          y: 4837620.206020496,\n        },\n        {\n          x: 12951053.162266875,\n          y: 4837624.532130631,\n        },\n        {\n          x: 12950994.073467728,\n          y: 4837620.818036712,\n        },\n        {\n          x: 12950952.099045333,\n          y: 4837614.236065724,\n        },\n        {\n          x: 12950903.02068405,\n          y: 4837603.431351229,\n        },\n        {\n          x: 12950854.265358152,\n          y: 4837586.804646552,\n        },\n        {\n          x: 12950803.897617934,\n          y: 4837565.966975064,\n        },\n        {\n          x: 12950750.622557428,\n          y: 4837538.00750994,\n        },\n        {\n          x: 12950713.171179097,\n          y: 4837512.0295137195,\n        },\n        {\n          x: 12950613.406373397,\n          y: 4837431.864322759,\n        },\n        {\n          x: 12950473.803516785,\n          y: 4837318.037136518,\n        },\n        {\n          x: 12950224.739204535,\n          y: 4837111.815739738,\n        },\n        {\n          x: 12949781.71624435,\n          y: 4836761.283068602,\n        },\n        {\n          x: 12949728.565575039,\n          y: 4836716.7570553925,\n        },\n        {\n          x: 12949703.653419532,\n          y: 4836690.060944494,\n        },\n        {\n          x: 12949670.437469736,\n          y: 4836646.1427171705,\n        },\n        {\n          x: 12949640.546313735,\n          y: 4836599.462744173,\n        },\n        {\n          x: 12949602.355321119,\n          y: 4836518.919640969,\n        },\n        {\n          x: 12949581.32899617,\n          y: 4836447.855053628,\n        },\n        {\n          x: 12949571.933781365,\n          y: 4836366.283691224,\n        },\n        {\n          x: 12949570.99564922,\n          y: 4836297.018513739,\n        },\n        {\n          x: 12949583.773060184,\n          y: 4836131.096596216,\n        },\n        {\n          x: 12949630.95790481,\n          y: 4835587.242148269,\n        },\n        {\n          x: 12949644.605106963,\n          y: 4835427.978435933,\n        },\n        {\n          x: 12949674.069930378,\n          y: 4835084.076939791,\n        },\n        {\n          x: 12949741.123785608,\n          y: 4834412.860058607,\n        },\n        {\n          x: 12949881.255387962,\n          y: 4833114.597124276,\n        },\n        {\n          x: 12949988.167188657,\n          y: 4831634.321648644,\n        },\n        {\n          x: 12950011.8904392,\n          y: 4831024.642033773,\n        },\n        {\n          x: 12950045.949834898,\n          y: 4830169.250105037,\n        },\n        {\n          x: 12950067.86965607,\n          y: 4829187.531131907,\n        },\n        {\n          x: 12950068.411119526,\n          y: 4828643.488667632,\n        },\n        {\n          x: 12950089.439076275,\n          y: 4827012.598861079,\n        },\n        {\n          x: 12950075.332266735,\n          y: 4825735.265538567,\n        },\n        {\n          x: 12950077.6177772,\n          y: 4825610.926281617,\n        },\n        {\n          x: 12950063.743562018,\n          y: 4825551.423688702,\n        },\n        {\n          x: 12949886.484341538,\n          y: 4825355.5838901615,\n        },\n        {\n          x: 12949714.24435096,\n          y: 4825240.542840744,\n        },\n        {\n          x: 12948810.72447873,\n          y: 4824919.1962220995,\n        },\n        {\n          x: 12948630.372620959,\n          y: 4824779.957329413,\n        },\n        {\n          x: 12948551.763527192,\n          y: 4824562.001534207,\n        },\n        {\n          x: 12948571.333401924,\n          y: 4824233.799839876,\n        },\n        {\n          x: 12948851.677430334,\n          y: 4820591.681083957,\n        },\n        {\n          x: 12948856.025176648,\n          y: 4820535.340838382,\n        },\n        {\n          x: 12948857.519128771,\n          y: 4820485.531178259,\n        },\n      ],\n    },\n    {\n      id: \"6\",\n      source: \"12\",\n      target: \"13\",\n      class: \"地铁四号线\",\n      name: \"地铁四号线 0\",\n      controlPoints: [\n        {\n          x: 12954373.657756021,\n          y: 4843560.934009259,\n        },\n        {\n          x: 12954403.308395952,\n          y: 4844637.092136642,\n        },\n        {\n          x: 12954443.631939387,\n          y: 4845049.84687948,\n        },\n        {\n          x: 12954465.385927541,\n          y: 4845230.316998346,\n        },\n        {\n          x: 12954477.104733607,\n          y: 4845295.713890768,\n        },\n        {\n          x: 12954510.159202749,\n          y: 4845363.4843960125,\n        },\n        {\n          x: 12954722.716019211,\n          y: 4845628.35857464,\n        },\n        {\n          x: 12954922.594454948,\n          y: 4845874.895440882,\n        },\n        {\n          x: 12955211.028271338,\n          y: 4846209.062552702,\n        },\n        {\n          x: 12955269.78815066,\n          y: 4846334.5600019405,\n        },\n        {\n          x: 12955267.306704495,\n          y: 4846529.094981971,\n        },\n        {\n          x: 12955200.99362026,\n          y: 4846713.313157282,\n        },\n        {\n          x: 12955050.45468214,\n          y: 4846989.573067081,\n        },\n        {\n          x: 12954853.97442472,\n          y: 4847378.402945743,\n        },\n        {\n          x: 12954774.906886864,\n          y: 4847675.2444390515,\n        },\n        {\n          x: 12954731.85449024,\n          y: 4848212.883938044,\n        },\n        {\n          x: 12954744.79924884,\n          y: 4848786.391306657,\n        },\n        {\n          x: 12954747.612023802,\n          y: 4849835.643590178,\n        },\n        {\n          x: 12954747.682216099,\n          y: 4849861.774043528,\n        },\n        {\n          x: 12954741.08816034,\n          y: 4850881.230635524,\n        },\n        {\n          x: 12954737.645653786,\n          y: 4851386.201206222,\n        },\n        {\n          x: 12954721.760149185,\n          y: 4851926.74810973,\n        },\n        {\n          x: 12954706.035138829,\n          y: 4852461.803325078,\n        },\n        {\n          x: 12954661.27452527,\n          y: 4853769.120768002,\n        },\n        {\n          x: 12954633.49377667,\n          y: 4854880.847809376,\n        },\n        {\n          x: 12954587.535533391,\n          y: 4856278.18149549,\n        },\n        {\n          x: 12954557.952698175,\n          y: 4857155.485744631,\n        },\n        {\n          x: 12954557.437163154,\n          y: 4857170.770202318,\n        },\n        {\n          x: 12954537.64640468,\n          y: 4857234.798733779,\n        },\n        {\n          x: 12954507.61800925,\n          y: 4857265.498611502,\n        },\n        {\n          x: 12954448.18840873,\n          y: 4857290.387739614,\n        },\n        {\n          x: 12954389.022163786,\n          y: 4857304.787614773,\n        },\n        {\n          x: 12954302.10618948,\n          y: 4857314.253741188,\n        },\n        {\n          x: 12954046.446788153,\n          y: 4857314.448443049,\n        },\n        {\n          x: 12952788.718781503,\n          y: 4857298.136733208,\n        },\n        {\n          x: 12952635.915840019,\n          y: 4857296.152572144,\n        },\n        {\n          x: 12952564.595755607,\n          y: 4857295.107641618,\n        },\n        {\n          x: 12952364.409316596,\n          y: 4857273.12227582,\n        },\n        {\n          x: 12952154.040871462,\n          y: 4857235.468350076,\n        },\n        {\n          x: 12951969.43909615,\n          y: 4857201.456667664,\n        },\n        {\n          x: 12951808.104168849,\n          y: 4857155.825128381,\n        },\n        {\n          x: 12951795.707910977,\n          y: 4857150.112186163,\n        },\n        {\n          x: 12951672.542241815,\n          y: 4857093.348351254,\n        },\n        {\n          x: 12951530.459501661,\n          y: 4857032.392475653,\n        },\n        {\n          x: 12951457.165035697,\n          y: 4857016.611367204,\n        },\n        {\n          x: 12951413.82925054,\n          y: 4857010.241801462,\n        },\n        {\n          x: 12951362.398381047,\n          y: 4857007.948880891,\n        },\n        {\n          x: 12951289.260741765,\n          y: 4857006.283719927,\n        },\n        {\n          x: 12951243.494159421,\n          y: 4857003.966436169,\n        },\n        {\n          x: 12951198.613096055,\n          y: 4857003.604147996,\n        },\n        {\n          x: 12951191.52223199,\n          y: 4857003.216630181,\n        },\n        {\n          x: 12951176.410532618,\n          y: 4857002.724713779,\n        },\n        {\n          x: 12950664.103792224,\n          y: 4856969.636138788,\n        },\n        {\n          x: 12950490.915616779,\n          y: 4856960.604637075,\n        },\n        {\n          x: 12950376.449417142,\n          y: 4856957.730451393,\n        },\n        {\n          x: 12950275.412423559,\n          y: 4856958.095432962,\n        },\n        {\n          x: 12950197.754097624,\n          y: 4856965.795888429,\n        },\n        {\n          x: 12950087.769172028,\n          y: 4856976.7011729805,\n        },\n        {\n          x: 12949969.030407438,\n          y: 4856988.731925641,\n        },\n        {\n          x: 12949611.385620916,\n          y: 4857033.614270364,\n        },\n        {\n          x: 12949433.088418497,\n          y: 4857064.900798794,\n        },\n        {\n          x: 12949359.045249254,\n          y: 4857097.992433988,\n        },\n        {\n          x: 12949324.284422386,\n          y: 4857141.787668212,\n        },\n        {\n          x: 12949323.829516204,\n          y: 4857143.221560914,\n        },\n        {\n          x: 12949294.040752294,\n          y: 4857237.088716105,\n        },\n        {\n          x: 12949290.965819698,\n          y: 4857281.5241520675,\n        },\n        {\n          x: 12949290.844836328,\n          y: 4857284.326685918,\n        },\n        {\n          x: 12949286.84859171,\n          y: 4857363.3786635455,\n        },\n        {\n          x: 12949255.74271649,\n          y: 4857669.774620552,\n        },\n        {\n          x: 12949251.021282567,\n          y: 4857716.034187529,\n        },\n        {\n          x: 12949240.534414742,\n          y: 4857818.781418282,\n        },\n        {\n          x: 12949229.599655101,\n          y: 4857925.935052169,\n        },\n        {\n          x: 12949223.285025857,\n          y: 4857987.8014169345,\n        },\n        {\n          x: 12949218.68930698,\n          y: 4858032.839792737,\n        },\n        {\n          x: 12949202.705857255,\n          y: 4858189.081518219,\n        },\n        {\n          x: 12949201.91675542,\n          y: 4858197.081514944,\n        },\n        {\n          x: 12949188.720634252,\n          y: 4858325.005565848,\n        },\n        {\n          x: 12949171.484932527,\n          y: 4858492.101118972,\n        },\n        {\n          x: 12949140.242605533,\n          y: 4858794.965387163,\n        },\n        {\n          x: 12949128.462758997,\n          y: 4858908.105794337,\n        },\n        {\n          x: 12949119.684607878,\n          y: 4858997.242106079,\n        },\n        {\n          x: 12949117.630120248,\n          y: 4859021.712509141,\n        },\n        {\n          x: 12949113.161648553,\n          y: 4859077.167116614,\n        },\n        {\n          x: 12949110.991163222,\n          y: 4859101.470621213,\n        },\n        {\n          x: 12949110.099969309,\n          y: 4859112.821822983,\n        },\n        {\n          x: 12949108.911677599,\n          y: 4859127.083425599,\n        },\n        {\n          x: 12949101.505333235,\n          y: 4859206.231246072,\n        },\n        {\n          x: 12949098.141760852,\n          y: 4859235.087958121,\n        },\n        {\n          x: 12949086.945661454,\n          y: 4859330.204405712,\n        },\n        {\n          x: 12949080.506525062,\n          y: 4859390.090037273,\n        },\n        {\n          x: 12949072.760807924,\n          y: 4859454.574381684,\n        },\n        {\n          x: 12949053.421043288,\n          y: 4859613.1813176535,\n        },\n        {\n          x: 12949006.291508188,\n          y: 4860099.103019413,\n        },\n        {\n          x: 12948987.273876615,\n          y: 4860281.083185734,\n        },\n        {\n          x: 12948981.095505225,\n          y: 4860340.214580902,\n        },\n        {\n          x: 12948971.386815451,\n          y: 4860438.818238612,\n        },\n        {\n          x: 12948968.790673513,\n          y: 4860465.186182631,\n        },\n        {\n          x: 12948957.099444743,\n          y: 4860583.923590711,\n        },\n        {\n          x: 12948954.944696926,\n          y: 4860602.30153119,\n        },\n        {\n          x: 12948953.629329322,\n          y: 4860611.371156355,\n        },\n        {\n          x: 12948945.376137566,\n          y: 4860665.772419023,\n        },\n        {\n          x: 12948943.371389516,\n          y: 4860677.809759844,\n        },\n        {\n          x: 12948941.428640455,\n          y: 4860688.287999877,\n        },\n        {\n          x: 12948940.027077485,\n          y: 4860695.8687290335,\n        },\n        {\n          x: 12948933.979640268,\n          y: 4860726.099657515,\n        },\n        {\n          x: 12948928.21129958,\n          y: 4860754.943783897,\n        },\n        {\n          x: 12948925.53477491,\n          y: 4860767.8741438445,\n        },\n        {\n          x: 12948914.390798561,\n          y: 4860816.020402436,\n        },\n        {\n          x: 12948908.818966143,\n          y: 4860838.981437038,\n        },\n        {\n          x: 12948891.21272109,\n          y: 4860906.962985634,\n        },\n        {\n          x: 12948891.084425297,\n          y: 4860907.371989038,\n        },\n        {\n          x: 12948849.368497113,\n          y: 4861042.125295077,\n        },\n        {\n          x: 12948835.90431828,\n          y: 4861088.737227414,\n        },\n        {\n          x: 12948830.296142103,\n          y: 4861108.420813816,\n        },\n        {\n          x: 12948822.04407856,\n          y: 4861138.651794888,\n        },\n        {\n          x: 12948813.499036651,\n          y: 4861166.617294492,\n        },\n        {\n          x: 12948805.08019881,\n          y: 4861193.008798196,\n        },\n        {\n          x: 12948779.113573417,\n          y: 4861277.779889043,\n        },\n        {\n          x: 12948764.04589559,\n          y: 4861326.974101848,\n        },\n        {\n          x: 12948764.026496535,\n          y: 4861327.037202654,\n        },\n        {\n          x: 12948753.359326178,\n          y: 4861360.815953497,\n        },\n        {\n          x: 12948743.747416658,\n          y: 4861389.941771785,\n        },\n        {\n          x: 12948718.178381432,\n          y: 4861470.921841358,\n        },\n        {\n          x: 12948696.13872888,\n          y: 4861543.199816692,\n        },\n        {\n          x: 12948691.345809,\n          y: 4861558.918058851,\n        },\n        {\n          x: 12948670.805545585,\n          y: 4861626.292230624,\n        },\n        {\n          x: 12948635.660998613,\n          y: 4861741.800393923,\n        },\n        {\n          x: 12948620.137949644,\n          y: 4861792.813013884,\n        },\n        {\n          x: 12948586.362157172,\n          y: 4861900.900528574,\n        },\n        {\n          x: 12948570.146171637,\n          y: 4861955.959000696,\n        },\n        {\n          x: 12948553.55913321,\n          y: 4862007.46980901,\n        },\n        {\n          x: 12948506.607909067,\n          y: 4862151.020102147,\n        },\n        {\n          x: 12948474.477154713,\n          y: 4862249.710439044,\n        },\n        {\n          x: 12948433.854782313,\n          y: 4862372.508539395,\n        },\n        {\n          x: 12948405.896567902,\n          y: 4862457.026555028,\n        },\n        {\n          x: 12948387.467864858,\n          y: 4862540.95750102,\n        },\n        {\n          x: 12948369.72084694,\n          y: 4862608.589042327,\n        },\n        {\n          x: 12948351.287448928,\n          y: 4862705.352991365,\n        },\n        {\n          x: 12948349.399856329,\n          y: 4862717.969572795,\n        },\n        {\n          x: 12948342.9554688,\n          y: 4862761.161096935,\n        },\n        {\n          x: 12948334.103059907,\n          y: 4862815.789967469,\n        },\n        {\n          x: 12948330.745336216,\n          y: 4862847.533998459,\n        },\n        {\n          x: 12948330.324781813,\n          y: 4862857.667238568,\n        },\n        {\n          x: 12948330.719618713,\n          y: 4862923.321583864,\n        },\n        {\n          x: 12948329.271456743,\n          y: 4863030.035711758,\n        },\n        {\n          x: 12948318.983617261,\n          y: 4863152.700650098,\n        },\n        {\n          x: 12948308.624791207,\n          y: 4863323.528821448,\n        },\n        {\n          x: 12948305.573238118,\n          y: 4863383.023344128,\n        },\n        {\n          x: 12948304.882713268,\n          y: 4863410.205718649,\n        },\n        {\n          x: 12948304.34907461,\n          y: 4863418.883075538,\n        },\n        {\n          x: 12948304.349074604,\n          y: 4863418.883175537,\n        },\n        {\n          x: 12948293.57852302,\n          y: 4863594.090943488,\n        },\n        {\n          x: 12948292.26537664,\n          y: 4863615.222388438,\n        },\n        {\n          x: 12948285.911429897,\n          y: 4863694.78289179,\n        },\n        {\n          x: 12948279.888862576,\n          y: 4863721.625153882,\n        },\n        {\n          x: 12948276.328498306,\n          y: 4863738.652548549,\n        },\n        {\n          x: 12948273.0212985,\n          y: 4863779.761424982,\n        },\n        {\n          x: 12948271.391195413,\n          y: 4863804.060012918,\n        },\n        {\n          x: 12948269.44583099,\n          y: 4863833.063038297,\n        },\n        {\n          x: 12948268.544436276,\n          y: 4863862.57964908,\n        },\n        {\n          x: 12948264.951457486,\n          y: 4863980.229798113,\n        },\n        {\n          x: 12948262.743327497,\n          y: 4864012.842760259,\n        },\n        {\n          x: 12948253.95970473,\n          y: 4864163.393230665,\n        },\n        {\n          x: 12948251.540303396,\n          y: 4864206.470731608,\n        },\n        {\n          x: 12948212.079753308,\n          y: 4864794.335183325,\n        },\n        {\n          x: 12948192.775449837,\n          y: 4865057.815886522,\n        },\n        {\n          x: 12948172.296877252,\n          y: 4865301.5112607,\n        },\n        {\n          x: 12948164.786289226,\n          y: 4865392.804538419,\n        },\n        {\n          x: 12948154.255917,\n          y: 4865512.14757284,\n        },\n        {\n          x: 12948154.255917,\n          y: 4865512.1477728365,\n        },\n        {\n          x: 12948149.74303433,\n          y: 4865560.011840421,\n        },\n        {\n          x: 12948144.366829144,\n          y: 4865612.142398512,\n        },\n        {\n          x: 12948143.959623424,\n          y: 4865618.525997311,\n        },\n        {\n          x: 12948137.439734928,\n          y: 4865720.508486359,\n        },\n        {\n          x: 12948107.519605923,\n          y: 4865814.2291544955,\n        },\n        {\n          x: 12948078.069647746,\n          y: 4865856.462480031,\n        },\n        {\n          x: 12948024.306038419,\n          y: 4865884.525941556,\n        },\n        {\n          x: 12947948.793208137,\n          y: 4865895.857790665,\n        },\n        {\n          x: 12947726.110412342,\n          y: 4865901.65407643,\n        },\n        {\n          x: 12947662.03325602,\n          y: 4865903.549335554,\n        },\n        {\n          x: 12947582.728775566,\n          y: 4865884.474219018,\n        },\n        {\n          x: 12947578.428732935,\n          y: 4865883.43990478,\n        },\n        {\n          x: 12947516.084078891,\n          y: 4865861.968135664,\n        },\n        {\n          x: 12947457.991019811,\n          y: 4865841.929292836,\n        },\n        {\n          x: 12947430.320338927,\n          y: 4865825.17744688,\n        },\n        {\n          x: 12947403.34891173,\n          y: 4865801.908641243,\n        },\n        {\n          x: 12947385.583410634,\n          y: 4865783.125515066,\n        },\n        {\n          x: 12947366.462947419,\n          y: 4865758.28002787,\n        },\n        {\n          x: 12947349.636991477,\n          y: 4865736.761035594,\n        },\n        {\n          x: 12947325.434427919,\n          y: 4865705.9521581745,\n        },\n        {\n          x: 12947293.294439247,\n          y: 4865662.223273893,\n        },\n        {\n          x: 12947280.026460873,\n          y: 4865645.503535422,\n        },\n        {\n          x: 12947272.790190758,\n          y: 4865637.152186299,\n        },\n        {\n          x: 12947264.45234974,\n          y: 4865630.50206878,\n        },\n        {\n          x: 12947253.895662466,\n          y: 4865622.890310138,\n        },\n        {\n          x: 12947242.3961359,\n          y: 4865615.799413275,\n        },\n        {\n          x: 12947228.023148427,\n          y: 4865608.898160762,\n        },\n        {\n          x: 12947219.081559768,\n          y: 4865605.561492597,\n        },\n        {\n          x: 12947209.673061684,\n          y: 4865603.139115063,\n        },\n        {\n          x: 12947199.896463385,\n          y: 4865601.658737004,\n        },\n        {\n          x: 12947170.376100887,\n          y: 4865598.241728645,\n        },\n        {\n          x: 12947114.262342412,\n          y: 4865594.002744353,\n        },\n        {\n          x: 12947069.303568143,\n          y: 4865590.097302363,\n        },\n        {\n          x: 12946996.955287198,\n          y: 4865580.432522639,\n        },\n        {\n          x: 12946941.228131976,\n          y: 4865573.255125918,\n        },\n        {\n          x: 12946900.084918642,\n          y: 4865569.517658332,\n        },\n        {\n          x: 12946822.761463061,\n          y: 4865560.673446433,\n        },\n        {\n          x: 12946727.614742137,\n          y: 4865552.84563637,\n        },\n        {\n          x: 12946678.905013254,\n          y: 4865548.119018174,\n        },\n        {\n          x: 12946642.17997207,\n          y: 4865544.956115833,\n        },\n        {\n          x: 12946584.893309405,\n          y: 4865543.859270443,\n        },\n        {\n          x: 12946544.506879704,\n          y: 4865545.213818521,\n        },\n        {\n          x: 12946501.165103968,\n          y: 4865545.26638306,\n        },\n        {\n          x: 12946422.048745677,\n          y: 4865542.2614939865,\n        },\n        {\n          x: 12946366.591065088,\n          y: 4865538.478497777,\n        },\n        {\n          x: 12946343.54274385,\n          y: 4865536.796393288,\n        },\n        {\n          x: 12946313.331102742,\n          y: 4865534.072102609,\n        },\n        {\n          x: 12946276.992936801,\n          y: 4865530.295722415,\n        },\n        {\n          x: 12946044.983768271,\n          y: 4865506.53848812,\n        },\n        {\n          x: 12946044.982468616,\n          y: 4865506.538388461,\n        },\n        {\n          x: 12945999.054564236,\n          y: 4865501.51634233,\n        },\n        {\n          x: 12945939.11875475,\n          y: 4865501.919490546,\n        },\n        {\n          x: 12945842.188083762,\n          y: 4865505.838142619,\n        },\n        {\n          x: 12945841.360324211,\n          y: 4865506.238193714,\n        },\n        {\n          x: 12945718.088826543,\n          y: 4865565.803399573,\n        },\n        {\n          x: 12945361.171856038,\n          y: 4865725.241244186,\n        },\n        {\n          x: 12945288.888034362,\n          y: 4865771.876347319,\n        },\n        {\n          x: 12944971.787632536,\n          y: 4865960.501491743,\n        },\n        {\n          x: 12944694.050529143,\n          y: 4866125.748562615,\n        },\n        {\n          x: 12944571.275779925,\n          y: 4866175.496896087,\n        },\n        {\n          x: 12944486.984637886,\n          y: 4866196.026940467,\n        },\n        {\n          x: 12944376.91914833,\n          y: 4866212.279980763,\n        },\n        {\n          x: 12943875.491423381,\n          y: 4866303.184805465,\n        },\n        {\n          x: 12943715.625648474,\n          y: 4866329.140561554,\n        },\n        {\n          x: 12943691.286623739,\n          y: 4866336.782693048,\n        },\n        {\n          x: 12943666.684753045,\n          y: 4866355.700580207,\n        },\n        {\n          x: 12943647.036226608,\n          y: 4866386.77867161,\n        },\n        {\n          x: 12943618.683377,\n          y: 4866431.5171539625,\n        },\n        {\n          x: 12943575.591938026,\n          y: 4866503.065200196,\n        },\n        {\n          x: 12943549.272841655,\n          y: 4866548.372445914,\n        },\n        {\n          x: 12943513.655516205,\n          y: 4866606.664160266,\n        },\n        {\n          x: 12943464.443157,\n          y: 4866692.552688016,\n        },\n        {\n          x: 12943362.33352031,\n          y: 4866844.144888357,\n        },\n        {\n          x: 12943298.332087196,\n          y: 4866965.865469642,\n        },\n        {\n          x: 12943194.660765983,\n          y: 4867152.9265388595,\n        },\n        {\n          x: 12943140.884084987,\n          y: 4867273.386822292,\n        },\n        {\n          x: 12943114.423065275,\n          y: 4867594.932334096,\n        },\n        {\n          x: 12943113.763426922,\n          y: 4867602.948598135,\n        },\n        {\n          x: 12943108.181515867,\n          y: 4867757.799791251,\n        },\n      ],\n    },\n    {\n      id: \"7\",\n      source: \"14\",\n      target: \"15\",\n      class: \"地铁六号线\",\n      name: \"地铁六号线 0\",\n      controlPoints: [\n        {\n          x: 12944329.792132245,\n          y: 4856125.732393313,\n        },\n        {\n          x: 12944374.963417206,\n          y: 4856132.075934602,\n        },\n        {\n          x: 12944438.830775484,\n          y: 4856136.896376604,\n        },\n        {\n          x: 12944515.16641718,\n          y: 4856137.056480541,\n        },\n        {\n          x: 12944577.483953971,\n          y: 4856135.625803216,\n        },\n        {\n          x: 12944642.924413817,\n          y: 4856126.389908644,\n        },\n        {\n          x: 12944711.48482392,\n          y: 4856114.036716937,\n        },\n        {\n          x: 12944790.955263415,\n          y: 4856098.58349056,\n        },\n        {\n          x: 12944854.842780758,\n          y: 4856089.348004857,\n        },\n        {\n          x: 12944925.484679118,\n          y: 4856086.034136885,\n        },\n        {\n          x: 12944964.41973033,\n          y: 4856083.331773158,\n        },\n        {\n          x: 12944978.393002376,\n          y: 4856082.950699846,\n        },\n        {\n          x: 12945058.975743152,\n          y: 4856080.754937213,\n        },\n        {\n          x: 12945281.461997462,\n          y: 4856092.418480259,\n        },\n        {\n          x: 12945643.041754864,\n          y: 4856110.003093847,\n        },\n        {\n          x: 12945784.907202916,\n          y: 4856113.134308052,\n        },\n        {\n          x: 12946578.056629626,\n          y: 4856112.4447421245,\n        },\n        {\n          x: 12947587.39674028,\n          y: 4856115.133251456,\n        },\n        {\n          x: 12947613.274919279,\n          y: 4856115.203954564,\n        },\n        {\n          x: 12948409.558918482,\n          y: 4856120.2980670845,\n        },\n        {\n          x: 12950197.88091994,\n          y: 4856127.655709365,\n        },\n        {\n          x: 12950522.56167453,\n          y: 4856128.972474555,\n        },\n        {\n          x: 12952789.177160164,\n          y: 4856124.15803456,\n        },\n        {\n          x: 12953464.615126304,\n          y: 4856122.0006891955,\n        },\n        {\n          x: 12954530.376567366,\n          y: 4856151.814350079,\n        },\n        {\n          x: 12955417.241989752,\n          y: 4856201.3555319505,\n        },\n        {\n          x: 12956068.761834681,\n          y: 4856237.46303956,\n        },\n        {\n          x: 12956833.347700687,\n          y: 4856274.21357933,\n        },\n        {\n          x: 12958297.780383743,\n          y: 4856277.010194032,\n        },\n        {\n          x: 12958569.623250166,\n          y: 4856268.920119228,\n        },\n        {\n          x: 12958601.133725567,\n          y: 4855382.984479329,\n        },\n        {\n          x: 12958611.676282825,\n          y: 4855232.673994465,\n        },\n        {\n          x: 12958632.866942339,\n          y: 4855139.665765479,\n        },\n        {\n          x: 12958688.973578054,\n          y: 4855045.110782978,\n        },\n        {\n          x: 12958728.4139951,\n          y: 4855000.874038989,\n        },\n        {\n          x: 12958770.892719645,\n          y: 4854961.207780969,\n        },\n        {\n          x: 12958799.677543039,\n          y: 4854945.921102297,\n        },\n        {\n          x: 12959324.962061018,\n          y: 4854945.451113535,\n        },\n        {\n          x: 12959585.872160498,\n          y: 4854945.153439757,\n        },\n        {\n          x: 12961042.442201044,\n          y: 4854962.677000188,\n        },\n        {\n          x: 12961432.109595038,\n          y: 4854972.467899889,\n        },\n        {\n          x: 12961926.386577822,\n          y: 4854934.294285994,\n        },\n        {\n          x: 12962148.74759053,\n          y: 4854917.131482158,\n        },\n        {\n          x: 12962283.599321207,\n          y: 4854895.403863202,\n        },\n        {\n          x: 12962563.81989391,\n          y: 4854825.953182589,\n        },\n        {\n          x: 12962930.401073314,\n          y: 4854769.91200932,\n        },\n        {\n          x: 12963190.916752387,\n          y: 4854738.551506216,\n        },\n        {\n          x: 12964441.84613731,\n          y: 4854799.404628956,\n        },\n        {\n          x: 12964524.312877567,\n          y: 4854798.896359394,\n        },\n        {\n          x: 12965180.991672397,\n          y: 4854794.927301339,\n        },\n        {\n          x: 12965609.29152333,\n          y: 4854782.320431698,\n        },\n        {\n          x: 12965890.746902762,\n          y: 4854765.761862335,\n        },\n        {\n          x: 12966166.126872526,\n          y: 4854749.201512711,\n        },\n        {\n          x: 12966285.65860789,\n          y: 4854745.572490727,\n        },\n        {\n          x: 12966514.13404955,\n          y: 4854747.498023047,\n        },\n        {\n          x: 12967120.576418092,\n          y: 4854750.252015507,\n        },\n        {\n          x: 12968417.872233221,\n          y: 4854755.563269503,\n        },\n        {\n          x: 12968618.637517042,\n          y: 4854756.352373138,\n        },\n        {\n          x: 12969113.28223611,\n          y: 4854778.000756352,\n        },\n        {\n          x: 12969684.88717921,\n          y: 4854779.300801552,\n        },\n        {\n          x: 12970067.575502042,\n          y: 4854781.712135722,\n        },\n        {\n          x: 12970534.989097549,\n          y: 4854786.685865359,\n        },\n        {\n          x: 12970699.884643015,\n          y: 4854793.3733178545,\n        },\n        {\n          x: 12970823.931856325,\n          y: 4854795.719200881,\n        },\n        {\n          x: 12970982.830224,\n          y: 4854826.832892539,\n        },\n        {\n          x: 12971113.005257478,\n          y: 4854865.732206641,\n        },\n        {\n          x: 12971202.287273336,\n          y: 4854878.94766238,\n        },\n        {\n          x: 12971370.206297623,\n          y: 4854874.950868926,\n        },\n        {\n          x: 12972309.189289698,\n          y: 4854855.496835954,\n        },\n        {\n          x: 12973018.812017871,\n          y: 4854841.117131226,\n        },\n        {\n          x: 12973547.047963066,\n          y: 4854830.666734374,\n        },\n        {\n          x: 12974064.854700932,\n          y: 4854852.350465733,\n        },\n        {\n          x: 12974472.82455872,\n          y: 4854876.455052272,\n        },\n        {\n          x: 12975051.371356072,\n          y: 4854904.052996347,\n        },\n        {\n          x: 12975605.826026462,\n          y: 4854907.507188204,\n        },\n        {\n          x: 12975778.549655946,\n          y: 4854906.705688043,\n        },\n        {\n          x: 12976205.686714906,\n          y: 4854908.883752931,\n        },\n        {\n          x: 12977221.096053148,\n          y: 4854914.252570144,\n        },\n        {\n          x: 12977364.010499585,\n          y: 4854929.9394761175,\n        },\n        {\n          x: 12977849.475332348,\n          y: 4854987.676906845,\n        },\n        {\n          x: 12978108.4311247,\n          y: 4855013.81299573,\n        },\n        {\n          x: 12978521.22706543,\n          y: 4855058.406105899,\n        },\n        {\n          x: 12980109.377856214,\n          y: 4855165.781190299,\n        },\n        {\n          x: 12980283.977902222,\n          y: 4855177.638637634,\n        },\n        {\n          x: 12980489.227525037,\n          y: 4855187.924099469,\n        },\n        {\n          x: 12980583.71991004,\n          y: 4855179.543517038,\n        },\n        {\n          x: 12980688.925014246,\n          y: 4855138.6160322325,\n        },\n        {\n          x: 12980767.103468414,\n          y: 4855089.631526497,\n        },\n        {\n          x: 12980869.512862012,\n          y: 4855013.486901767,\n        },\n        {\n          x: 12981090.661572816,\n          y: 4854899.114190809,\n        },\n        {\n          x: 12981198.816266755,\n          y: 4854879.956045967,\n        },\n        {\n          x: 12981320.40982718,\n          y: 4854890.50993648,\n        },\n        {\n          x: 12982163.741886314,\n          y: 4855124.274679628,\n        },\n      ],\n    },\n    {\n      id: \"8\",\n      source: \"16\",\n      target: \"17\",\n      class: \"地铁九号线\",\n      name: \"地铁九号线 0\",\n      controlPoints: [\n        {\n          x: 12946648.06073432,\n          y: 4839260.025729084,\n        },\n        {\n          x: 12946544.074465087,\n          y: 4839619.202216059,\n        },\n        {\n          x: 12946445.496254807,\n          y: 4839771.777087536,\n        },\n        {\n          x: 12946363.495286731,\n          y: 4839808.518510458,\n        },\n        {\n          x: 12946292.702186562,\n          y: 4839843.812617867,\n        },\n        {\n          x: 12946221.884510016,\n          y: 4839925.221959326,\n        },\n        {\n          x: 12946200.062497655,\n          y: 4839988.63678963,\n        },\n        {\n          x: 12946126.464738874,\n          y: 4840577.558530562,\n        },\n        {\n          x: 12946154.121327115,\n          y: 4841454.65715364,\n        },\n        {\n          x: 12946159.216413628,\n          y: 4841615.166540137,\n        },\n        {\n          x: 12946163.133984758,\n          y: 4841750.3172009885,\n        },\n        {\n          x: 12946166.16397019,\n          y: 4841854.414496068,\n        },\n        {\n          x: 12946134.718988903,\n          y: 4842145.305047408,\n        },\n        {\n          x: 12946011.482648093,\n          y: 4842839.443615038,\n        },\n        {\n          x: 12945967.3702783,\n          y: 4843175.101744513,\n        },\n        {\n          x: 12945875.098454604,\n          y: 4843833.607067226,\n        },\n        {\n          x: 12945815.866086949,\n          y: 4844216.664802826,\n        },\n        {\n          x: 12945773.952396747,\n          y: 4844701.295741741,\n        },\n        {\n          x: 12945762.960414361,\n          y: 4844884.183169307,\n        },\n        {\n          x: 12945811.645641796,\n          y: 4846485.73907944,\n        },\n        {\n          x: 12945821.760873735,\n          y: 4846713.698002954,\n        },\n        {\n          x: 12945850.240499485,\n          y: 4847377.283903233,\n        },\n        {\n          x: 12945860.277378498,\n          y: 4847457.126713241,\n        },\n        {\n          x: 12945889.251105716,\n          y: 4847545.70699325,\n        },\n        {\n          x: 12946012.904132249,\n          y: 4847683.799611397,\n        },\n        {\n          x: 12946527.681154523,\n          y: 4848401.627416125,\n        },\n        {\n          x: 12946550.388778795,\n          y: 4848450.652934715,\n        },\n        {\n          x: 12946578.885636054,\n          y: 4848483.879589509,\n        },\n        {\n          x: 12946614.230164707,\n          y: 4848509.121830013,\n        },\n        {\n          x: 12946687.204717232,\n          y: 4848555.03996301,\n        },\n        {\n          x: 12946714.570161361,\n          y: 4848573.402833471,\n        },\n        {\n          x: 12946927.965178315,\n          y: 4848771.050237301,\n        },\n        {\n          x: 12947039.251749933,\n          y: 4848874.121019451,\n        },\n        {\n          x: 12947590.671676153,\n          y: 4849210.0301651545,\n        },\n        {\n          x: 12947894.176283287,\n          y: 4849394.908355361,\n        },\n        {\n          x: 12948001.161563184,\n          y: 4849454.528594686,\n        },\n        {\n          x: 12948726.115618171,\n          y: 4849833.574366419,\n        },\n        {\n          x: 12948780.697656307,\n          y: 4849859.709410215,\n        },\n        {\n          x: 12948804.10908822,\n          y: 4849909.061453937,\n        },\n        {\n          x: 12948808.591585146,\n          y: 4849968.572800762,\n        },\n        {\n          x: 12948813.15515829,\n          y: 4850598.421530288,\n        },\n        {\n          x: 12949122.850263117,\n          y: 4852505.623073113,\n        },\n        {\n          x: 12949328.200350346,\n          y: 4854831.558034923,\n        },\n        {\n          x: 12949353.269647257,\n          y: 4856109.000245334,\n        },\n        {\n          x: 12949291.632125383,\n          y: 4857143.131243851,\n        },\n      ],\n    },\n    {\n      id: \"9\",\n      source: \"18\",\n      target: \"19\",\n      class: \"地铁八号线\",\n      name: \"地铁八号线 0\",\n      controlPoints: [\n        {\n          x: 12957190.97175418,\n          y: 4856829.187045242,\n        },\n        {\n          x: 12957268.3578042,\n          y: 4856387.328711017,\n        },\n        {\n          x: 12957289.353013203,\n          y: 4856359.317449307,\n        },\n        {\n          x: 12957331.343025276,\n          y: 4856327.797491008,\n        },\n        {\n          x: 12957376.831138888,\n          y: 4856317.277947678,\n        },\n        {\n          x: 12957891.704380175,\n          y: 4856296.418069313,\n        },\n      ],\n    },\n    {\n      id: \"10\",\n      source: \"20\",\n      target: \"21\",\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 0\",\n      controlPoints: [\n        {\n          x: 12947094.115985483,\n          y: 4873731.336740117,\n        },\n        {\n          x: 12947072.54413634,\n          y: 4873784.735931892,\n        },\n        {\n          x: 12947042.017514793,\n          y: 4873859.579611177,\n        },\n        {\n          x: 12946995.4508778,\n          y: 4873970.753583026,\n        },\n        {\n          x: 12946943.109137688,\n          y: 4874095.283923113,\n        },\n        {\n          x: 12946899.787751423,\n          y: 4874206.107863865,\n        },\n        {\n          x: 12946881.01472949,\n          y: 4874253.759727108,\n        },\n        {\n          x: 12946789.68802783,\n          y: 4874467.089710582,\n        },\n        {\n          x: 12946751.78362451,\n          y: 4874555.5292996485,\n        },\n        {\n          x: 12946700.523958035,\n          y: 4874674.650758464,\n        },\n        {\n          x: 12946655.766671386,\n          y: 4874767.410641011,\n        },\n        {\n          x: 12946571.364045683,\n          y: 4874925.748577232,\n        },\n        {\n          x: 12946510.5646055,\n          y: 4875031.897509199,\n        },\n        {\n          x: 12946472.444944305,\n          y: 4875099.449536901,\n        },\n        {\n          x: 12946378.125857558,\n          y: 4875270.873813889,\n        },\n        {\n          x: 12946315.432537835,\n          y: 4875442.5781064425,\n        },\n        {\n          x: 12945987.019381497,\n          y: 4876429.405849195,\n        },\n        {\n          x: 12945494.324537683,\n          y: 4877247.425781118,\n        },\n        {\n          x: 12945212.872442825,\n          y: 4877783.708641315,\n        },\n        {\n          x: 12944881.49739096,\n          y: 4878774.737871047,\n        },\n        {\n          x: 12944906.896743502,\n          y: 4879158.180641696,\n        },\n        {\n          x: 12945532.959607262,\n          y: 4879647.417083359,\n        },\n        {\n          x: 12946150.468651066,\n          y: 4879791.647184245,\n        },\n        {\n          x: 12946905.53928399,\n          y: 4879921.626008038,\n        },\n        {\n          x: 12947757.621608311,\n          y: 4880143.70392179,\n        },\n        {\n          x: 12948030.412870025,\n          y: 4880398.632118471,\n        },\n        {\n          x: 12948052.616659699,\n          y: 4880692.773681223,\n        },\n        {\n          x: 12947846.20854383,\n          y: 4881514.465746558,\n        },\n        {\n          x: 12947597.065183768,\n          y: 4882366.221916524,\n        },\n        {\n          x: 12947351.139175126,\n          y: 4883370.132124624,\n        },\n        {\n          x: 12947176.67206149,\n          y: 4883933.272704212,\n        },\n        {\n          x: 12946774.041093351,\n          y: 4884211.771737467,\n        },\n        {\n          x: 12946459.054291379,\n          y: 4884228.537864571,\n        },\n        {\n          x: 12945934.213743346,\n          y: 4884401.946771053,\n        },\n        {\n          x: 12945765.765805947,\n          y: 4884775.110386402,\n        },\n        {\n          x: 12945765.322226081,\n          y: 4884788.004333703,\n        },\n        {\n          x: 12945769.507831955,\n          y: 4885435.210764532,\n        },\n        {\n          x: 12945706.715861775,\n          y: 4886123.159872877,\n        },\n        {\n          x: 12945619.689717943,\n          y: 4886769.72363822,\n        },\n        {\n          x: 12945442.673617564,\n          y: 4887206.479468694,\n        },\n        {\n          x: 12945265.150235325,\n          y: 4887443.841590078,\n        },\n        {\n          x: 12944956.967706354,\n          y: 4887910.572665611,\n        },\n        {\n          x: 12944764.2703165,\n          y: 4888414.954761419,\n        },\n        {\n          x: 12944490.393851373,\n          y: 4889211.049688148,\n        },\n        {\n          x: 12944158.000725761,\n          y: 4890227.3009047955,\n        },\n        {\n          x: 12943939.50054619,\n          y: 4890938.589379339,\n        },\n        {\n          x: 12943741.193033013,\n          y: 4891765.333179633,\n        },\n        {\n          x: 12943523.89343197,\n          y: 4892817.059629789,\n        },\n        {\n          x: 12943477.185800951,\n          y: 4893223.648609116,\n        },\n        {\n          x: 12943632.832055906,\n          y: 4893581.194364219,\n        },\n        {\n          x: 12944230.352351204,\n          y: 4893813.015893581,\n        },\n        {\n          x: 12944907.808217492,\n          y: 4894017.717405242,\n        },\n        {\n          x: 12945120.621122792,\n          y: 4894152.507246883,\n        },\n        {\n          x: 12945341.919177428,\n          y: 4894481.916219006,\n        },\n      ],\n    },\n    {\n      id: \"11\",\n      source: \"22\",\n      target: \"23\",\n      class: \"地铁八通线\",\n      name: \"地铁八通线 0\",\n      controlPoints: [\n        {\n          x: 12970985.252146643,\n          y: 4852637.932500459,\n        },\n        {\n          x: 12971008.063154463,\n          y: 4852637.603850775,\n        },\n        {\n          x: 12971057.7816163,\n          y: 4852638.1331448015,\n        },\n        {\n          x: 12971134.73710355,\n          y: 4852640.9154947065,\n        },\n        {\n          x: 12971179.237531189,\n          y: 4852645.416718783,\n        },\n        {\n          x: 12971201.570727265,\n          y: 4852648.649302951,\n        },\n        {\n          x: 12971249.17801756,\n          y: 4852658.196621391,\n        },\n        {\n          x: 12971255.746157914,\n          y: 4852659.512994105,\n        },\n        {\n          x: 12971346.991565293,\n          y: 4852680.378101265,\n        },\n        {\n          x: 12971465.503559206,\n          y: 4852715.45222975,\n        },\n        {\n          x: 12971556.44305453,\n          y: 4852739.194460047,\n        },\n        {\n          x: 12971603.653185746,\n          y: 4852750.417086441,\n        },\n        {\n          x: 12971652.445129333,\n          y: 4852760.353265841,\n        },\n        {\n          x: 12971690.783407204,\n          y: 4852768.115819445,\n        },\n        {\n          x: 12971748.39988629,\n          y: 4852774.830285477,\n        },\n        {\n          x: 12971832.350691043,\n          y: 4852785.209187933,\n        },\n        {\n          x: 12971909.010570884,\n          y: 4852791.801163421,\n        },\n        {\n          x: 12971924.359283764,\n          y: 4852792.523685262,\n        },\n        {\n          x: 12971999.921089781,\n          y: 4852796.079471216,\n        },\n        {\n          x: 12972107.290890923,\n          y: 4852793.567220141,\n        },\n        {\n          x: 12972304.93984065,\n          y: 4852791.354142118,\n        },\n        {\n          x: 12972304.939940628,\n          y: 4852791.354142104,\n        },\n        {\n          x: 12972558.358169641,\n          y: 4852786.198665246,\n        },\n        {\n          x: 12972686.068063304,\n          y: 4852781.700119552,\n        },\n        {\n          x: 12972843.240578711,\n          y: 4852778.233391634,\n        },\n        {\n          x: 12972922.890764125,\n          y: 4852776.13617569,\n        },\n        {\n          x: 12973043.782765854,\n          y: 4852773.582308092,\n        },\n        {\n          x: 12973160.438646115,\n          y: 4852771.291533754,\n        },\n        {\n          x: 12973301.369215274,\n          y: 4852766.977022844,\n        },\n        {\n          x: 12973376.555572206,\n          y: 4852766.575507644,\n        },\n        {\n          x: 12973483.79407899,\n          y: 4852764.105804903,\n        },\n        {\n          x: 12973602.57893526,\n          y: 4852764.972085765,\n        },\n        {\n          x: 12973986.241797326,\n          y: 4852757.068452248,\n        },\n        {\n          x: 12974216.115580516,\n          y: 4852753.700414064,\n        },\n        {\n          x: 12974536.719347281,\n          y: 4852751.372519053,\n        },\n        {\n          x: 12974901.466203645,\n          y: 4852758.063962363,\n        },\n        {\n          x: 12974983.483695555,\n          y: 4852759.700171818,\n        },\n        {\n          x: 12975075.477382166,\n          y: 4852761.366109267,\n        },\n        {\n          x: 12975146.21345055,\n          y: 4852762.740995125,\n        },\n        {\n          x: 12975252.652350875,\n          y: 4852765.001749013,\n        },\n        {\n          x: 12975418.029274665,\n          y: 4852769.231663441,\n        },\n        {\n          x: 12975512.274773095,\n          y: 4852771.693583396,\n        },\n        {\n          x: 12975667.430020995,\n          y: 4852774.665220624,\n        },\n        {\n          x: 12975945.482280165,\n          y: 4852780.652428524,\n        },\n        {\n          x: 12976048.941242512,\n          y: 4852783.088273825,\n        },\n        {\n          x: 12976157.13466884,\n          y: 4852786.1686903015,\n        },\n        {\n          x: 12976200.541262798,\n          y: 4852787.159456441,\n        },\n        {\n          x: 12976234.258291336,\n          y: 4852787.5677579185,\n        },\n        {\n          x: 12976365.991912834,\n          y: 4852790.688773559,\n        },\n        {\n          x: 12976483.576280847,\n          y: 4852793.632750944,\n        },\n        {\n          x: 12976521.657226892,\n          y: 4852795.637126801,\n        },\n        {\n          x: 12976580.431624653,\n          y: 4852800.4899075935,\n        },\n        {\n          x: 12976630.833259074,\n          y: 4852806.145179798,\n        },\n        {\n          x: 12976695.08046594,\n          y: 4852815.315654606,\n        },\n        {\n          x: 12976729.999958823,\n          y: 4852820.657543227,\n        },\n        {\n          x: 12976776.474955026,\n          y: 4852827.352541805,\n        },\n        {\n          x: 12976812.252139,\n          y: 4852833.2147945,\n        },\n        {\n          x: 12976815.968375333,\n          y: 4852833.822868197,\n        },\n        {\n          x: 12976885.429953378,\n          y: 4852844.764512234,\n        },\n        {\n          x: 12976975.596115217,\n          y: 4852858.43044723,\n        },\n        {\n          x: 12977055.606962522,\n          y: 4852871.247395306,\n        },\n        {\n          x: 12977150.103301922,\n          y: 4852886.690040669,\n        },\n        {\n          x: 12977164.484104557,\n          y: 4852889.144325767,\n        },\n        {\n          x: 12977349.452764807,\n          y: 4852911.35750741,\n        },\n        {\n          x: 12977396.826802246,\n          y: 4852914.6312842835,\n        },\n        {\n          x: 12977445.21322845,\n          y: 4852917.3740233835,\n        },\n        {\n          x: 12977499.905881032,\n          y: 4852919.653667679,\n        },\n        {\n          x: 12977561.24229945,\n          y: 4852918.623041482,\n        },\n        {\n          x: 12977618.078808535,\n          y: 4852916.964759332,\n        },\n        {\n          x: 12977670.621610347,\n          y: 4852911.879830347,\n        },\n        {\n          x: 12977751.148635335,\n          y: 4852902.670739922,\n        },\n        {\n          x: 12977786.88548381,\n          y: 4852897.948010646,\n        },\n        {\n          x: 12977824.596628416,\n          y: 4852892.215955226,\n        },\n        {\n          x: 12977838.222668163,\n          y: 4852889.785354156,\n        },\n        {\n          x: 12977897.63684129,\n          y: 4852879.987122803,\n        },\n        {\n          x: 12978112.587513769,\n          y: 4852847.147889897,\n        },\n        {\n          x: 12978212.010580407,\n          y: 4852831.849550509,\n        },\n        {\n          x: 12978289.722346092,\n          y: 4852819.825778696,\n        },\n        {\n          x: 12978376.198797919,\n          y: 4852806.369032904,\n        },\n        {\n          x: 12978443.1247446,\n          y: 4852796.941799674,\n        },\n        {\n          x: 12978511.962721677,\n          y: 4852789.040221515,\n        },\n        {\n          x: 12978556.675266935,\n          y: 4852784.800445814,\n        },\n        {\n          x: 12978603.675698506,\n          y: 4852781.445204418,\n        },\n        {\n          x: 12978657.285893984,\n          y: 4852778.451914039,\n        },\n        {\n          x: 12978800.565625936,\n          y: 4852773.68229988,\n        },\n        {\n          x: 12978914.98070244,\n          y: 4852769.67853182,\n        },\n        {\n          x: 12979058.626918213,\n          y: 4852765.050844271,\n        },\n        {\n          x: 12979117.93108979,\n          y: 4852764.395843838,\n        },\n        {\n          x: 12979200.907964638,\n          y: 4852760.896022486,\n        },\n        {\n          x: 12979376.070149522,\n          y: 4852755.492429703,\n        },\n        {\n          x: 12979821.264409432,\n          y: 4852740.865419091,\n        },\n        {\n          x: 12979869.005644636,\n          y: 4852738.659817284,\n        },\n        {\n          x: 12980006.684293807,\n          y: 4852733.642694393,\n        },\n        {\n          x: 12980010.412107708,\n          y: 4852733.505705852,\n        },\n        {\n          x: 12980102.14796544,\n          y: 4852731.09585125,\n        },\n        {\n          x: 12980102.150365561,\n          y: 4852731.095751376,\n        },\n        {\n          x: 12980241.426094191,\n          y: 4852724.458911123,\n        },\n        {\n          x: 12980383.972661799,\n          y: 4852720.275860491,\n        },\n        {\n          x: 12980452.567191115,\n          y: 4852718.295604612,\n        },\n        {\n          x: 12980501.279651301,\n          y: 4852717.168056968,\n        },\n        {\n          x: 12980511.817043953,\n          y: 4852716.940679275,\n        },\n        {\n          x: 12980527.720170368,\n          y: 4852714.900895137,\n        },\n        {\n          x: 12980546.205864942,\n          y: 4852712.0589568885,\n        },\n        {\n          x: 12980556.739903979,\n          y: 4852710.6345186,\n        },\n        {\n          x: 12980575.024717016,\n          y: 4852707.192393184,\n        },\n        {\n          x: 12980600.064811092,\n          y: 4852702.138990685,\n        },\n        {\n          x: 12980620.733107321,\n          y: 4852697.095017998,\n        },\n        {\n          x: 12980641.992123496,\n          y: 4852691.0518540675,\n        },\n        {\n          x: 12980667.422524082,\n          y: 4852682.803530873,\n        },\n        {\n          x: 12980697.81666234,\n          y: 4852671.350689514,\n        },\n        {\n          x: 12980750.44375973,\n          y: 4852646.269770028,\n        },\n        {\n          x: 12980789.758654011,\n          y: 4852625.613153645,\n        },\n        {\n          x: 12980817.158831125,\n          y: 4852610.176831961,\n        },\n        {\n          x: 12980871.562055342,\n          y: 4852579.505635189,\n        },\n        {\n          x: 12980917.628692484,\n          y: 4852553.447517574,\n        },\n        {\n          x: 12981043.583099704,\n          y: 4852484.690581212,\n        },\n        {\n          x: 12981099.336563937,\n          y: 4852456.01893319,\n        },\n        {\n          x: 12981140.890511304,\n          y: 4852432.9686271055,\n        },\n        {\n          x: 12981182.135998141,\n          y: 4852411.356320457,\n        },\n        {\n          x: 12981255.809566528,\n          y: 4852369.673110186,\n        },\n        {\n          x: 12981306.254684363,\n          y: 4852342.213287527,\n        },\n        {\n          x: 12981355.360464152,\n          y: 4852316.156478455,\n        },\n        {\n          x: 12981380.125408497,\n          y: 4852304.328818308,\n        },\n        {\n          x: 12981404.370375846,\n          y: 4852293.9445663355,\n        },\n        {\n          x: 12981411.357722916,\n          y: 4852291.019192892,\n        },\n        {\n          x: 12981429.138416857,\n          y: 4852284.705685185,\n        },\n        {\n          x: 12981449.445248626,\n          y: 4852278.144038033,\n        },\n        {\n          x: 12981466.988468504,\n          y: 4852273.038244298,\n        },\n        {\n          x: 12981483.934169278,\n          y: 4852269.01732057,\n        },\n        {\n          x: 12981501.72129354,\n          y: 4852264.633525485,\n        },\n        {\n          x: 12981521.195052542,\n          y: 4852260.970876668,\n        },\n        {\n          x: 12981540.429482171,\n          y: 4852257.912291013,\n        },\n        {\n          x: 12981556.300366443,\n          y: 4852255.823523872,\n        },\n        {\n          x: 12981570.366991611,\n          y: 4852253.983978159,\n        },\n        {\n          x: 12981590.808079034,\n          y: 4852252.37024785,\n        },\n        {\n          x: 12981606.562289793,\n          y: 4852251.488995252,\n        },\n        {\n          x: 12981636.507357743,\n          y: 4852250.579113849,\n        },\n        {\n          x: 12981656.356278451,\n          y: 4852250.896393729,\n        },\n        {\n          x: 12981692.086214192,\n          y: 4852252.868202504,\n        },\n        {\n          x: 12981714.223939104,\n          y: 4852254.872887953,\n        },\n        {\n          x: 12981755.862461897,\n          y: 4852261.416093576,\n        },\n        {\n          x: 12981787.756915031,\n          y: 4852268.344546958,\n        },\n        {\n          x: 12981824.48947952,\n          y: 4852277.740325138,\n        },\n        {\n          x: 12982006.994348593,\n          y: 4852327.843007399,\n        },\n        {\n          x: 12982014.941592565,\n          y: 4852330.480576966,\n        },\n        {\n          x: 12982026.402121745,\n          y: 4852333.381042817,\n        },\n        {\n          x: 12982040.946943458,\n          y: 4852337.063108767,\n        },\n        {\n          x: 12982067.796619976,\n          y: 4852344.124059822,\n        },\n        {\n          x: 12982082.244231999,\n          y: 4852347.351909036,\n        },\n        {\n          x: 12982111.255736986,\n          y: 4852353.085681991,\n        },\n        {\n          x: 12982129.791819442,\n          y: 4852355.941803544,\n        },\n        {\n          x: 12982150.73459613,\n          y: 4852358.6745200455,\n        },\n        {\n          x: 12982173.599064307,\n          y: 4852360.678826859,\n        },\n        {\n          x: 12982199.590729142,\n          y: 4852362.073329141,\n        },\n        {\n          x: 12982224.25684918,\n          y: 4852362.508778318,\n        },\n        {\n          x: 12982242.781496631,\n          y: 4852362.108043774,\n        },\n        {\n          x: 12982265.278136691,\n          y: 4852361.098500819,\n        },\n        {\n          x: 12982291.742691308,\n          y: 4852358.874468977,\n        },\n        {\n          x: 12982315.67474395,\n          y: 4852355.811827975,\n        },\n        {\n          x: 12982335.035976896,\n          y: 4852352.394862233,\n        },\n        {\n          x: 12982357.042847889,\n          y: 4852348.851728803,\n        },\n        {\n          x: 12982382.295058098,\n          y: 4852343.857827946,\n        },\n        {\n          x: 12982417.531268932,\n          y: 4852337.395309842,\n        },\n        {\n          x: 12982448.197524806,\n          y: 4852331.785528333,\n        },\n        {\n          x: 12982478.86330164,\n          y: 4852326.658255823,\n        },\n        {\n          x: 12982531.423479121,\n          y: 4852319.199320662,\n        },\n        {\n          x: 12982583.51522219,\n          y: 4852315.239714849,\n        },\n        {\n          x: 12982619.249260034,\n          y: 4852313.483230399,\n        },\n        {\n          x: 12982707.726446714,\n          y: 4852311.01354565,\n        },\n        {\n          x: 12982818.643484026,\n          y: 4852310.195081021,\n        },\n        {\n          x: 12982926.718911368,\n          y: 4852308.423580399,\n        },\n        {\n          x: 12982969.351654056,\n          y: 4852307.719497175,\n        },\n        {\n          x: 12983023.546593202,\n          y: 4852306.599390685,\n        },\n        {\n          x: 12983109.423810175,\n          y: 4852304.789328974,\n        },\n        {\n          x: 12983167.539974144,\n          y: 4852304.283514513,\n        },\n        {\n          x: 12983217.219463198,\n          y: 4852303.191877694,\n        },\n        {\n          x: 12983281.254377576,\n          y: 4852302.216069689,\n        },\n        {\n          x: 12983366.75675525,\n          y: 4852300.701005913,\n        },\n        {\n          x: 12983452.20281669,\n          y: 4852299.1755383825,\n        },\n        {\n          x: 12983534.11611313,\n          y: 4852296.359641885,\n        },\n        {\n          x: 12983559.667424409,\n          y: 4852295.629501179,\n        },\n        {\n          x: 12983601.161266102,\n          y: 4852294.627091015,\n        },\n        {\n          x: 12983611.984969016,\n          y: 4852293.890433964,\n        },\n        {\n          x: 12983622.368472738,\n          y: 4852292.692271228,\n        },\n        {\n          x: 12983631.964793393,\n          y: 4852291.967613732,\n        },\n        {\n          x: 12983642.347676827,\n          y: 4852290.532228432,\n        },\n        {\n          x: 12983664.288969724,\n          y: 4852286.790795176,\n        },\n        {\n          x: 12983681.665854465,\n          y: 4852283.294093203,\n        },\n        {\n          x: 12983691.650165133,\n          y: 4852280.518425564,\n        },\n        {\n          x: 12983704.937446222,\n          y: 4852276.871566698,\n        },\n        {\n          x: 12983719.485094307,\n          y: 4852271.960088485,\n        },\n        {\n          x: 12983734.576153021,\n          y: 4852266.573224977,\n        },\n        {\n          x: 12983749.349894535,\n          y: 4852260.636238543,\n        },\n        {\n          x: 12983764.356448224,\n          y: 4852253.439065454,\n        },\n        {\n          x: 12983783.229950167,\n          y: 4852243.675282068,\n        },\n        {\n          x: 12983809.54016834,\n          y: 4852227.647694631,\n        },\n        {\n          x: 12983819.177255707,\n          y: 4852221.021988448,\n        },\n        {\n          x: 12983830.24508297,\n          y: 4852212.4117375035,\n        },\n        {\n          x: 12983845.626987867,\n          y: 4852200.007109512,\n        },\n        {\n          x: 12983856.53356637,\n          y: 4852190.291205582,\n        },\n        {\n          x: 12983870.184671514,\n          y: 4852177.732756121,\n        },\n        {\n          x: 12983883.752366735,\n          y: 4852163.04569551,\n        },\n        {\n          x: 12983893.242055438,\n          y: 4852153.491082963,\n        },\n        {\n          x: 12983901.156669818,\n          y: 4852143.226680874,\n        },\n        {\n          x: 12983911.419729222,\n          y: 4852128.860448257,\n        },\n        {\n          x: 12983920.032326968,\n          y: 4852115.678436422,\n        },\n        {\n          x: 12983928.333826244,\n          y: 4852103.047421788,\n        },\n        {\n          x: 12983936.314326718,\n          y: 4852088.763105886,\n        },\n        {\n          x: 12983946.18360984,\n          y: 4852068.498493203,\n        },\n        {\n          x: 12984045.08972995,\n          y: 4851885.404455599,\n        },\n        {\n          x: 12984080.804905687,\n          y: 4851817.337034466,\n        },\n        {\n          x: 12984134.748354,\n          y: 4851706.836804487,\n        },\n        {\n          x: 12984195.8623765,\n          y: 4851591.525543062,\n        },\n        {\n          x: 12984254.587788567,\n          y: 4851478.621198026,\n        },\n        {\n          x: 12984307.768564539,\n          y: 4851379.326535712,\n        },\n        {\n          x: 12984344.27421628,\n          y: 4851308.864740265,\n        },\n        {\n          x: 12984375.225174434,\n          y: 4851249.609910724,\n        },\n        {\n          x: 12984415.701271733,\n          y: 4851172.74323114,\n        },\n        {\n          x: 12984461.729403371,\n          y: 4851084.666569579,\n        },\n        {\n          x: 12984517.277267791,\n          y: 4850976.575614915,\n        },\n        {\n          x: 12984628.35638987,\n          y: 4850756.39703862,\n        },\n        {\n          x: 12984643.441411281,\n          y: 4850729.173746353,\n        },\n        {\n          x: 12984659.718515014,\n          y: 4850700.1083314745,\n        },\n        {\n          x: 12984681.711487297,\n          y: 4850670.601281623,\n        },\n        {\n          x: 12984717.725659953,\n          y: 4850629.896011068,\n        },\n        {\n          x: 12984754.999484044,\n          y: 4850595.784380661,\n        },\n        {\n          x: 12984794.35474119,\n          y: 4850566.24036794,\n        },\n        {\n          x: 12984822.179769346,\n          y: 4850548.063337961,\n        },\n        {\n          x: 12984863.461169159,\n          y: 4850526.723240278,\n        },\n        {\n          x: 12984915.289983816,\n          y: 4850505.12020892,\n        },\n        {\n          x: 12984951.72965507,\n          y: 4850491.149559257,\n        },\n        {\n          x: 12985164.594748862,\n          y: 4850408.269419757,\n        },\n        {\n          x: 12985223.73663421,\n          y: 4850386.334720776,\n        },\n        {\n          x: 12985231.332473703,\n          y: 4850382.288306166,\n        },\n        {\n          x: 12985243.255608164,\n          y: 4850375.964354305,\n        },\n        {\n          x: 12985309.485768877,\n          y: 4850350.550316565,\n        },\n        {\n          x: 12985309.485868897,\n          y: 4850350.550316587,\n        },\n        {\n          x: 12986172.233193466,\n          y: 4850032.791403444,\n        },\n        {\n          x: 12986172.8663129,\n          y: 4850032.558329904,\n        },\n        {\n          x: 12986339.175501348,\n          y: 4849968.327595861,\n        },\n        {\n          x: 12986505.507225916,\n          y: 4849904.089056084,\n        },\n        {\n          x: 12986656.604391119,\n          y: 4849847.60963517,\n        },\n        {\n          x: 12986702.483696718,\n          y: 4849828.918664281,\n        },\n        {\n          x: 12986760.975453354,\n          y: 4849792.3676841725,\n        },\n        {\n          x: 12986797.326063676,\n          y: 4849765.012441939,\n        },\n        {\n          x: 12986830.880906345,\n          y: 4849735.181111031,\n        },\n        {\n          x: 12986886.127819829,\n          y: 4849677.217710046,\n        },\n        {\n          x: 12987120.13083682,\n          y: 4849429.888750661,\n        },\n        {\n          x: 12987545.455182405,\n          y: 4848990.56075093,\n        },\n        {\n          x: 12987572.780970717,\n          y: 4848962.972667584,\n        },\n        {\n          x: 12987750.347789623,\n          y: 4848775.995218805,\n        },\n        {\n          x: 12987812.698881118,\n          y: 4848712.132626582,\n        },\n        {\n          x: 12987888.840439832,\n          y: 4848629.514697122,\n        },\n        {\n          x: 12987922.383888729,\n          y: 4848595.374774107,\n        },\n        {\n          x: 12988054.963756831,\n          y: 4848456.434616343,\n        },\n        {\n          x: 12988203.560175221,\n          y: 4848293.895912913,\n        },\n        {\n          x: 12988250.566429619,\n          y: 4848245.193567729,\n        },\n        {\n          x: 12988306.722374829,\n          y: 4848191.552325912,\n        },\n        {\n          x: 12988429.814042207,\n          y: 4848060.358476343,\n        },\n        {\n          x: 12988509.892477134,\n          y: 4847972.732590752,\n        },\n        {\n          x: 12988516.052521963,\n          y: 4847966.473292817,\n        },\n        {\n          x: 12988531.25232795,\n          y: 4847951.020837734,\n        },\n        {\n          x: 12988547.774189414,\n          y: 4847934.22664656,\n        },\n        {\n          x: 12988684.205479793,\n          y: 4847792.520992836,\n        },\n        {\n          x: 12988709.83813206,\n          y: 4847765.978322433,\n        },\n        {\n          x: 12988751.064218508,\n          y: 4847721.917838166,\n        },\n        {\n          x: 12988806.893480845,\n          y: 4847664.753238427,\n        },\n        {\n          x: 12988838.47984446,\n          y: 4847638.4005759265,\n        },\n        {\n          x: 12988863.550537288,\n          y: 4847617.484576525,\n        },\n        {\n          x: 12988871.447747946,\n          y: 4847610.900250857,\n        },\n        {\n          x: 12988928.71596574,\n          y: 4847568.305396379,\n        },\n        {\n          x: 12989015.639990052,\n          y: 4847513.087871169,\n        },\n        {\n          x: 12989070.178705394,\n          y: 4847482.192075563,\n        },\n        {\n          x: 12989148.863691295,\n          y: 4847447.998694799,\n        },\n        {\n          x: 12989221.630766438,\n          y: 4847420.154502207,\n        },\n        {\n          x: 12989339.331564289,\n          y: 4847380.68202523,\n        },\n        {\n          x: 12989542.519483887,\n          y: 4847312.531220079,\n        },\n        {\n          x: 12989591.848173946,\n          y: 4847295.984625068,\n        },\n      ],\n    },\n    {\n      id: \"12\",\n      source: \"24\",\n      target: \"25\",\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 0\",\n      controlPoints: [\n        {\n          x: 12961384.821093876,\n          y: 4857604.895638846,\n        },\n        {\n          x: 12961379.888425605,\n          y: 4857950.407662031,\n        },\n        {\n          x: 12961378.603161972,\n          y: 4858178.984029268,\n        },\n        {\n          x: 12961378.251699504,\n          y: 4858199.941669665,\n        },\n        {\n          x: 12961362.948288757,\n          y: 4859113.050576728,\n        },\n        {\n          x: 12961351.774871988,\n          y: 4859246.305776181,\n        },\n        {\n          x: 12961344.673628464,\n          y: 4859330.995740561,\n        },\n        {\n          x: 12961338.185205506,\n          y: 4859379.136027955,\n        },\n        {\n          x: 12961326.701474292,\n          y: 4859430.3762181355,\n        },\n        {\n          x: 12961296.23872469,\n          y: 4859534.623118192,\n        },\n        {\n          x: 12961279.573160157,\n          y: 4859595.157872784,\n        },\n        {\n          x: 12961271.432916135,\n          y: 4859636.755033974,\n        },\n        {\n          x: 12961227.692613533,\n          y: 4859930.467545727,\n        },\n        {\n          x: 12961219.290961184,\n          y: 4859990.017196776,\n        },\n        {\n          x: 12961215.868152,\n          y: 4860031.195887179,\n        },\n        {\n          x: 12961213.956200192,\n          y: 4860042.603136049,\n        },\n        {\n          x: 12961206.891662417,\n          y: 4860091.520899557,\n        },\n        {\n          x: 12961188.165871859,\n          y: 4860211.789308975,\n        },\n        {\n          x: 12961182.052734978,\n          y: 4860252.9748706035,\n        },\n        {\n          x: 12961177.381970651,\n          y: 4860285.458304639,\n        },\n        {\n          x: 12961133.584798172,\n          y: 4861282.165295659,\n        },\n        {\n          x: 12961131.197062261,\n          y: 4861339.773361728,\n        },\n        {\n          x: 12961125.764970018,\n          y: 4861465.195775947,\n        },\n        {\n          x: 12961124.551248107,\n          y: 4861505.652557301,\n        },\n        {\n          x: 12961122.644612342,\n          y: 4861570.024727552,\n        },\n        {\n          x: 12961122.505511757,\n          y: 4861612.817632623,\n        },\n        {\n          x: 12961126.125387294,\n          y: 4861656.679218022,\n        },\n        {\n          x: 12961134.236030966,\n          y: 4861724.086379644,\n        },\n        {\n          x: 12961147.346890498,\n          y: 4861783.573658952,\n        },\n        {\n          x: 12961169.949061126,\n          y: 4861856.88455326,\n        },\n        {\n          x: 12961190.92239628,\n          y: 4861908.443200537,\n        },\n        {\n          x: 12961244.80679,\n          y: 4862017.212104109,\n        },\n        {\n          x: 12961785.271410704,\n          y: 4863090.557436891,\n        },\n        {\n          x: 12962406.945922375,\n          y: 4864318.974454228,\n        },\n        {\n          x: 12963018.284754738,\n          y: 4865521.493683898,\n        },\n        {\n          x: 12963018.284854762,\n          y: 4865521.493783919,\n        },\n        {\n          x: 12963224.051473433,\n          y: 4866039.3565800125,\n        },\n        {\n          x: 12963500.971012274,\n          y: 4867139.241053313,\n        },\n        {\n          x: 12963650.819367116,\n          y: 4867725.703316142,\n        },\n        {\n          x: 12963888.949552327,\n          y: 4868660.037686641,\n        },\n        {\n          x: 12964153.29996666,\n          y: 4869706.424707541,\n        },\n        {\n          x: 12964161.049777685,\n          y: 4869739.748010959,\n        },\n        {\n          x: 12964169.022003202,\n          y: 4869783.887620618,\n        },\n        {\n          x: 12964169.79918989,\n          y: 4869788.187596136,\n        },\n        {\n          x: 12964170.396725647,\n          y: 4869792.28592288,\n        },\n        {\n          x: 12964178.09229784,\n          y: 4869845.141780633,\n        },\n        {\n          x: 12964182.866363246,\n          y: 4869906.602764703,\n        },\n        {\n          x: 12964186.742670394,\n          y: 4869983.180502373,\n        },\n        {\n          x: 12964187.80107099,\n          y: 4870004.059485736,\n        },\n        {\n          x: 12964194.767189663,\n          y: 4870141.601109272,\n        },\n        {\n          x: 12964195.586355446,\n          y: 4870157.791065987,\n        },\n        {\n          x: 12964195.629143188,\n          y: 4870158.625753281,\n        },\n        {\n          x: 12964197.365642045,\n          y: 4870232.162939279,\n        },\n        {\n          x: 12964199.986983918,\n          y: 4870338.989878203,\n        },\n        {\n          x: 12964198.233979,\n          y: 4870399.4780171625,\n        },\n        {\n          x: 12964195.521848764,\n          y: 4870426.330630218,\n        },\n        {\n          x: 12964189.688597165,\n          y: 4870457.628060375,\n        },\n        {\n          x: 12964178.76505046,\n          y: 4870495.275356304,\n        },\n        {\n          x: 12964167.839258399,\n          y: 4870529.241804792,\n        },\n        {\n          x: 12964156.90262342,\n          y: 4870556.635705516,\n        },\n        {\n          x: 12964139.446759911,\n          y: 4870591.940950339,\n        },\n        {\n          x: 12964119.380342938,\n          y: 4870629.3612662265,\n        },\n        {\n          x: 12964087.063558495,\n          y: 4870686.289743977,\n        },\n        {\n          x: 12964065.951472988,\n          y: 4870723.716488513,\n        },\n        {\n          x: 12964052.918280806,\n          y: 4870746.119234959,\n        },\n        {\n          x: 12964041.187130783,\n          y: 4870764.046505531,\n        },\n        {\n          x: 12964018.239456784,\n          y: 4870796.744059516,\n        },\n        {\n          x: 12963997.373145364,\n          y: 4870821.018842714,\n        },\n        {\n          x: 12963975.979364637,\n          y: 4870842.403550631,\n        },\n        {\n          x: 12963943.620649595,\n          y: 4870869.876901368,\n        },\n        {\n          x: 12963912.565489624,\n          y: 4870894.189978186,\n        },\n        {\n          x: 12963888.553606404,\n          y: 4870910.587164291,\n        },\n        {\n          x: 12963855.921490764,\n          y: 4870928.856058391,\n        },\n        {\n          x: 12963818.847341483,\n          y: 4870946.088721298,\n        },\n        {\n          x: 12963778.372132206,\n          y: 4870961.231012497,\n        },\n        {\n          x: 12963730.060326898,\n          y: 4870976.4015065245,\n        },\n        {\n          x: 12963657.978381645,\n          y: 4870995.602780929,\n        },\n        {\n          x: 12963622.05854108,\n          y: 4871004.430416085,\n        },\n        {\n          x: 12963558.724530451,\n          y: 4871019.810885714,\n        },\n        {\n          x: 12963512.503679566,\n          y: 4871035.906957649,\n        },\n        {\n          x: 12963453.681321735,\n          y: 4871059.763481818,\n        },\n        {\n          x: 12963248.80497939,\n          y: 4871172.328870646,\n        },\n        {\n          x: 12963244.572822267,\n          y: 4871174.658396504,\n        },\n        {\n          x: 12963038.471529033,\n          y: 4871288.035313995,\n        },\n        {\n          x: 12962853.820973437,\n          y: 4871391.186996228,\n        },\n        {\n          x: 12962725.303994041,\n          y: 4871462.571934574,\n        },\n        {\n          x: 12962724.957375426,\n          y: 4871462.752610938,\n        },\n        {\n          x: 12962723.887909118,\n          y: 4871463.345629024,\n        },\n        {\n          x: 12962716.736546198,\n          y: 4871467.315161244,\n        },\n        {\n          x: 12962716.284189595,\n          y: 4871467.567097997,\n        },\n        {\n          x: 12962579.957906647,\n          y: 4871543.225352538,\n        },\n        {\n          x: 12962098.530270364,\n          y: 4871808.314025743,\n        },\n        {\n          x: 12961985.615570927,\n          y: 4871875.438409937,\n        },\n        {\n          x: 12961943.360948866,\n          y: 4871903.003423259,\n        },\n        {\n          x: 12961806.371053975,\n          y: 4871987.009769704,\n        },\n        {\n          x: 12961737.483883223,\n          y: 4872026.3265607115,\n        },\n        {\n          x: 12961633.115452316,\n          y: 4872086.751682198,\n        },\n        {\n          x: 12961545.844782017,\n          y: 4872134.320089415,\n        },\n        {\n          x: 12961361.563495556,\n          y: 4872236.98400638,\n        },\n        {\n          x: 12961327.331658702,\n          y: 4872255.833857056,\n        },\n        {\n          x: 12961251.875342408,\n          y: 4872297.087065438,\n        },\n        {\n          x: 12961204.826219695,\n          y: 4872325.325771341,\n        },\n        {\n          x: 12961132.023615833,\n          y: 4872361.658743605,\n        },\n        {\n          x: 12961052.11865231,\n          y: 4872405.144750871,\n        },\n        {\n          x: 12960972.646711243,\n          y: 4872441.930478759,\n        },\n        {\n          x: 12960858.106042854,\n          y: 4872506.91698905,\n        },\n        {\n          x: 12960760.426450621,\n          y: 4872559.359681711,\n        },\n        {\n          x: 12960724.908352494,\n          y: 4872580.416320622,\n        },\n        {\n          x: 12960641.560702814,\n          y: 4872626.948672511,\n        },\n        {\n          x: 12960409.848923735,\n          y: 4872755.68364987,\n        },\n        {\n          x: 12960214.328045709,\n          y: 4872860.212735837,\n        },\n        {\n          x: 12960127.928549424,\n          y: 4872909.2953869505,\n        },\n        {\n          x: 12960102.655544914,\n          y: 4872922.969133999,\n        },\n        {\n          x: 12960020.162988434,\n          y: 4872967.3561403835,\n        },\n        {\n          x: 12959950.134860648,\n          y: 4873006.403798974,\n        },\n        {\n          x: 12959863.03802686,\n          y: 4873054.88910155,\n        },\n        {\n          x: 12959777.644680386,\n          y: 4873104.258241601,\n        },\n        {\n          x: 12959699.508191582,\n          y: 4873147.282306783,\n        },\n        {\n          x: 12959620.328795532,\n          y: 4873191.4477808075,\n        },\n        {\n          x: 12959477.877193257,\n          y: 4873269.404125038,\n        },\n        {\n          x: 12959357.123719096,\n          y: 4873335.684058211,\n        },\n        {\n          x: 12959338.647690238,\n          y: 4873345.82380848,\n        },\n        {\n          x: 12958925.449787276,\n          y: 4873574.258471447,\n        },\n        {\n          x: 12958914.496696375,\n          y: 4873580.313011027,\n        },\n        {\n          x: 12958908.925432095,\n          y: 4873583.384761498,\n        },\n        {\n          x: 12958469.664608255,\n          y: 4873826.333185746,\n        },\n        {\n          x: 12958317.119431961,\n          y: 4873910.348894859,\n        },\n        {\n          x: 12958173.63725258,\n          y: 4873989.354939118,\n        },\n        {\n          x: 12958109.864433711,\n          y: 4874026.411209632,\n        },\n        {\n          x: 12958056.459419694,\n          y: 4874055.42987156,\n        },\n        {\n          x: 12958035.572431948,\n          y: 4874066.780988242,\n        },\n        {\n          x: 12957541.464879088,\n          y: 4874339.316503633,\n        },\n        {\n          x: 12957541.314450411,\n          y: 4874339.40007746,\n        },\n        {\n          x: 12957515.50602984,\n          y: 4874353.589680841,\n        },\n        {\n          x: 12957515.424667433,\n          y: 4874353.63521974,\n        },\n        {\n          x: 12957178.774763126,\n          y: 4874538.369890689,\n        },\n        {\n          x: 12957143.891148778,\n          y: 4874557.897348821,\n        },\n        {\n          x: 12956953.433700653,\n          y: 4874662.620502712,\n        },\n        {\n          x: 12956865.14112665,\n          y: 4874711.491226545,\n        },\n        {\n          x: 12956730.395010892,\n          y: 4874784.283691582,\n        },\n        {\n          x: 12956584.60989753,\n          y: 4874864.17479837,\n        },\n        {\n          x: 12956514.690003015,\n          y: 4874902.207189248,\n        },\n        {\n          x: 12956415.921079142,\n          y: 4874957.945257982,\n        },\n        {\n          x: 12956350.318605551,\n          y: 4874993.942196934,\n        },\n        {\n          x: 12955970.523661379,\n          y: 4875204.572856644,\n        },\n        {\n          x: 12955961.168925371,\n          y: 4875209.826648806,\n        },\n        {\n          x: 12955608.616340334,\n          y: 4875403.58048848,\n        },\n        {\n          x: 12955424.989326235,\n          y: 4875505.19312055,\n        },\n        {\n          x: 12955208.191654494,\n          y: 4875621.246472876,\n        },\n        {\n          x: 12955106.685266893,\n          y: 4875676.949542184,\n        },\n        {\n          x: 12954909.088653814,\n          y: 4875785.6214146055,\n        },\n        {\n          x: 12954898.699293226,\n          y: 4875791.33469513,\n        },\n        {\n          x: 12954809.86015897,\n          y: 4875840.183103034,\n        },\n        {\n          x: 12954515.78755851,\n          y: 4876003.857567704,\n        },\n        {\n          x: 12954425.351083811,\n          y: 4876047.515434021,\n        },\n        {\n          x: 12954361.536701877,\n          y: 4876075.173523097,\n        },\n        {\n          x: 12954318.522177251,\n          y: 4876092.11950955,\n        },\n        {\n          x: 12954285.295954525,\n          y: 4876103.586379883,\n        },\n        {\n          x: 12954230.248733655,\n          y: 4876121.545707381,\n        },\n        {\n          x: 12954175.140615348,\n          y: 4876137.686398102,\n        },\n        {\n          x: 12954117.372576779,\n          y: 4876152.031328337,\n        },\n        {\n          x: 12954117.372476779,\n          y: 4876152.031328334,\n        },\n        {\n          x: 12954063.303781305,\n          y: 4876163.662863832,\n        },\n        {\n          x: 12954007.331071056,\n          y: 4876172.399246002,\n        },\n        {\n          x: 12953967.211788474,\n          y: 4876178.65975709,\n        },\n        {\n          x: 12953802.621925015,\n          y: 4876196.237827291,\n        },\n        {\n          x: 12953668.73601341,\n          y: 4876199.186105529,\n        },\n        {\n          x: 12953503.298073018,\n          y: 4876194.053015986,\n        },\n        {\n          x: 12953435.898150826,\n          y: 4876195.031116625,\n        },\n        {\n          x: 12952907.1719517,\n          y: 4876202.110021278,\n        },\n        {\n          x: 12952854.57708836,\n          y: 4876202.818902422,\n        },\n        {\n          x: 12952810.046254802,\n          y: 4876203.418551955,\n        },\n        {\n          x: 12952736.613090457,\n          y: 4876203.294253911,\n        },\n        {\n          x: 12952624.4348891,\n          y: 4876204.555723625,\n        },\n        {\n          x: 12952552.43031391,\n          y: 4876204.964896776,\n        },\n        {\n          x: 12952497.943888191,\n          y: 4876207.608055034,\n        },\n        {\n          x: 12952468.042451413,\n          y: 4876210.829014632,\n        },\n        {\n          x: 12952437.79969268,\n          y: 4876214.509841102,\n        },\n        {\n          x: 12952375.588643614,\n          y: 4876223.886731359,\n        },\n        {\n          x: 12952301.856311196,\n          y: 4876236.1209624605,\n        },\n        {\n          x: 12952251.31522576,\n          y: 4876242.8451233655,\n        },\n        {\n          x: 12952214.021838313,\n          y: 4876246.965370512,\n        },\n        {\n          x: 12952162.807325037,\n          y: 4876250.527753233,\n        },\n        {\n          x: 12952103.452750135,\n          y: 4876251.697783142,\n        },\n        {\n          x: 12952023.611417918,\n          y: 4876253.082581543,\n        },\n        {\n          x: 12951892.55511939,\n          y: 4876253.812631988,\n        },\n        {\n          x: 12951846.328905031,\n          y: 4876253.171084735,\n        },\n        {\n          x: 12951802.992080217,\n          y: 4876249.116505366,\n        },\n        {\n          x: 12951766.843265098,\n          y: 4876244.26441203,\n        },\n        {\n          x: 12951714.743373726,\n          y: 4876233.633230178,\n        },\n        {\n          x: 12951654.073062496,\n          y: 4876222.691277131,\n        },\n        {\n          x: 12951616.46554052,\n          y: 4876216.252301995,\n        },\n        {\n          x: 12951584.63468386,\n          y: 4876213.574076274,\n        },\n        {\n          x: 12951561.015438031,\n          y: 4876212.359467597,\n        },\n        {\n          x: 12951502.289814433,\n          y: 4876212.143345088,\n        },\n        {\n          x: 12951293.085304,\n          y: 4876214.875420837,\n        },\n        {\n          x: 12951031.075470097,\n          y: 4876215.897535212,\n        },\n        {\n          x: 12950959.097605025,\n          y: 4876216.275884133,\n        },\n        {\n          x: 12950894.730929183,\n          y: 4876215.974946514,\n        },\n        {\n          x: 12950773.64057589,\n          y: 4876216.703301484,\n        },\n        {\n          x: 12950673.746751422,\n          y: 4876225.670588799,\n        },\n        {\n          x: 12950616.565179903,\n          y: 4876229.034309006,\n        },\n        {\n          x: 12950568.486162541,\n          y: 4876230.042798452,\n        },\n        {\n          x: 12950375.145719487,\n          y: 4876231.976121928,\n        },\n        {\n          x: 12950194.78158641,\n          y: 4876234.464466195,\n        },\n        {\n          x: 12950048.658437809,\n          y: 4876236.2574803205,\n        },\n        {\n          x: 12950001.4772779,\n          y: 4876235.293804152,\n        },\n        {\n          x: 12949948.747199,\n          y: 4876229.307334167,\n        },\n        {\n          x: 12949849.140274497,\n          y: 4876224.443260822,\n        },\n        {\n          x: 12948886.90103617,\n          y: 4876237.644317312,\n        },\n        {\n          x: 12948886.90093617,\n          y: 4876237.644317315,\n        },\n        {\n          x: 12948715.380098497,\n          y: 4876239.997015189,\n        },\n        {\n          x: 12948425.68643085,\n          y: 4876243.705096172,\n        },\n        {\n          x: 12948424.112088347,\n          y: 4876243.72353365,\n        },\n        {\n          x: 12948407.06491928,\n          y: 4876243.944145824,\n        },\n        {\n          x: 12948405.98243078,\n          y: 4876243.95624331,\n        },\n        {\n          x: 12948361.171213618,\n          y: 4876244.531933125,\n        },\n        {\n          x: 12948356.092076505,\n          y: 4876244.596227219,\n        },\n        {\n          x: 12948294.145588111,\n          y: 4876245.390073654,\n        },\n        {\n          x: 12948293.421376245,\n          y: 4876245.398151391,\n        },\n        {\n          x: 12948245.081662236,\n          y: 4876246.017528498,\n        },\n        {\n          x: 12948244.258669348,\n          y: 4876246.030423269,\n        },\n        {\n          x: 12948227.313400865,\n          y: 4876246.246399225,\n        },\n        {\n          x: 12948226.443416782,\n          y: 4876246.256701933,\n        },\n        {\n          x: 12948223.250043418,\n          y: 4876246.298279974,\n        },\n        {\n          x: 12947945.409350824,\n          y: 4876250.961636466,\n        },\n        {\n          x: 12947934.332267188,\n          y: 4876250.890472651,\n        },\n        {\n          x: 12947877.07401595,\n          y: 4876250.914315445,\n        },\n        {\n          x: 12947815.021065967,\n          y: 4876253.851354821,\n        },\n        {\n          x: 12947763.487477783,\n          y: 4876261.1465055365,\n        },\n        {\n          x: 12947725.059790507,\n          y: 4876269.052617193,\n        },\n        {\n          x: 12947653.430817837,\n          y: 4876293.225426714,\n        },\n        {\n          x: 12947609.2695425,\n          y: 4876314.985599062,\n        },\n        {\n          x: 12947579.101654992,\n          y: 4876329.096570221,\n        },\n        {\n          x: 12947532.916624067,\n          y: 4876357.08904473,\n        },\n        {\n          x: 12947462.2262063,\n          y: 4876393.072714213,\n        },\n        {\n          x: 12947421.555621969,\n          y: 4876408.477083252,\n        },\n        {\n          x: 12947369.78948997,\n          y: 4876424.051528886,\n        },\n        {\n          x: 12947316.08051995,\n          y: 4876430.96623273,\n        },\n        {\n          x: 12947288.108453162,\n          y: 4876433.523245403,\n        },\n        {\n          x: 12947233.34126908,\n          y: 4876432.790803788,\n        },\n        {\n          x: 12947188.401168212,\n          y: 4876429.088000529,\n        },\n        {\n          x: 12947141.165666422,\n          y: 4876420.772086076,\n        },\n        {\n          x: 12947111.803456603,\n          y: 4876412.760024161,\n        },\n        {\n          x: 12947064.825877437,\n          y: 4876399.584901326,\n        },\n        {\n          x: 12947029.14763327,\n          y: 4876383.288698463,\n        },\n        {\n          x: 12947000.45767468,\n          y: 4876366.611471653,\n        },\n        {\n          x: 12946972.12493202,\n          y: 4876348.110056718,\n        },\n        {\n          x: 12946952.979055353,\n          y: 4876335.007395409,\n        },\n        {\n          x: 12946936.827550543,\n          y: 4876323.077202845,\n        },\n        {\n          x: 12946921.333707113,\n          y: 4876310.548771458,\n        },\n        {\n          x: 12946816.8297496,\n          y: 4876219.287650481,\n        },\n        {\n          x: 12946732.699527778,\n          y: 4876127.270037018,\n        },\n        {\n          x: 12946657.488720905,\n          y: 4876045.210086455,\n        },\n        {\n          x: 12946622.587940522,\n          y: 4875983.965371542,\n        },\n        {\n          x: 12946496.471341081,\n          y: 4875762.643722024,\n        },\n        {\n          x: 12946423.522392513,\n          y: 4875557.850478406,\n        },\n        {\n          x: 12946399.995473424,\n          y: 4875459.537530149,\n        },\n        {\n          x: 12946396.978958678,\n          y: 4875437.0025600875,\n        },\n        {\n          x: 12946396.993859813,\n          y: 4875409.162322274,\n        },\n        {\n          x: 12946399.79561764,\n          y: 4875362.09033934,\n        },\n        {\n          x: 12946402.86393251,\n          y: 4875338.563648224,\n        },\n        {\n          x: 12946405.625597931,\n          y: 4875320.088412483,\n        },\n        {\n          x: 12946410.942566253,\n          y: 4875295.299492259,\n        },\n        {\n          x: 12946416.254743187,\n          y: 4875274.811186232,\n        },\n        {\n          x: 12946428.647654204,\n          y: 4875238.394850413,\n        },\n        {\n          x: 12946449.128231185,\n          y: 4875187.827926565,\n        },\n        {\n          x: 12946468.842936842,\n          y: 4875151.68413807,\n        },\n        {\n          x: 12946489.817988945,\n          y: 4875118.8342050975,\n        },\n        {\n          x: 12946522.546502326,\n          y: 4875072.470895908,\n        },\n        {\n          x: 12946570.68181112,\n          y: 4875007.932055009,\n        },\n        {\n          x: 12946590.31852286,\n          y: 4874978.982263895,\n        },\n        {\n          x: 12946617.815584973,\n          y: 4874935.88435813,\n        },\n        {\n          x: 12946646.325475948,\n          y: 4874873.520782715,\n        },\n        {\n          x: 12946820.499390153,\n          y: 4874459.418667514,\n        },\n        {\n          x: 12946888.30456704,\n          y: 4874294.857213484,\n        },\n        {\n          x: 12946930.646429846,\n          y: 4874192.6851136675,\n        },\n        {\n          x: 12946949.005201655,\n          y: 4874148.378390104,\n        },\n        {\n          x: 12947044.284756513,\n          y: 4873918.4637040915,\n        },\n        {\n          x: 12947056.289818808,\n          y: 4873889.083139696,\n        },\n        {\n          x: 12947165.66572366,\n          y: 4873622.718414709,\n        },\n        {\n          x: 12947202.737800827,\n          y: 4873531.999517411,\n        },\n        {\n          x: 12947209.63262473,\n          y: 4873515.652391753,\n        },\n        {\n          x: 12947273.282788856,\n          y: 4873364.7546024555,\n        },\n        {\n          x: 12947273.708122,\n          y: 4873363.743532597,\n        },\n        {\n          x: 12947287.460317507,\n          y: 4873331.140831067,\n        },\n        {\n          x: 12947304.830566434,\n          y: 4873289.959057868,\n        },\n        {\n          x: 12947411.8537799,\n          y: 4873054.533746381,\n        },\n        {\n          x: 12947541.50808741,\n          y: 4872842.7485984,\n        },\n        {\n          x: 12947580.982706897,\n          y: 4872777.370338213,\n        },\n        {\n          x: 12947615.711724276,\n          y: 4872723.318503141,\n        },\n        {\n          x: 12947649.183798542,\n          y: 4872667.856626571,\n        },\n        {\n          x: 12947675.12323022,\n          y: 4872624.93555951,\n        },\n        {\n          x: 12947696.263067583,\n          y: 4872593.158431816,\n        },\n        {\n          x: 12947734.29565014,\n          y: 4872530.60731087,\n        },\n        {\n          x: 12947764.795609327,\n          y: 4872480.528620551,\n        },\n        {\n          x: 12947824.300805386,\n          y: 4872380.158015446,\n        },\n        {\n          x: 12947865.335921923,\n          y: 4872300.691582129,\n        },\n        {\n          x: 12947868.4019642,\n          y: 4872293.260799115,\n        },\n        {\n          x: 12947877.607004203,\n          y: 4872273.69886109,\n        },\n        {\n          x: 12947897.445241943,\n          y: 4872226.595834379,\n        },\n        {\n          x: 12947927.647142874,\n          y: 4872153.107787066,\n        },\n        {\n          x: 12947994.798658265,\n          y: 4871994.343646774,\n        },\n        {\n          x: 12948026.296440713,\n          y: 4871921.612665893,\n        },\n        {\n          x: 12948040.948586507,\n          y: 4871894.217878682,\n        },\n        {\n          x: 12948057.308193548,\n          y: 4871865.8032324435,\n        },\n        {\n          x: 12948067.326472418,\n          y: 4871850.338413439,\n        },\n        {\n          x: 12948081.773480348,\n          y: 4871830.043075507,\n        },\n        {\n          x: 12948106.005618699,\n          y: 4871796.572364472,\n        },\n        {\n          x: 12948147.255517324,\n          y: 4871752.044003956,\n        },\n        {\n          x: 12948212.569000661,\n          y: 4871679.780786607,\n        },\n        {\n          x: 12948214.328663053,\n          y: 4871677.809478982,\n        },\n        {\n          x: 12948273.504086189,\n          y: 4871611.484093596,\n        },\n        {\n          x: 12948317.798932584,\n          y: 4871561.862160343,\n        },\n        {\n          x: 12948344.377879875,\n          y: 4871527.5162396645,\n        },\n        {\n          x: 12948380.890677512,\n          y: 4871477.605026336,\n        },\n        {\n          x: 12948413.38959998,\n          y: 4871425.5829799725,\n        },\n        {\n          x: 12948414.44249342,\n          y: 4871423.82499065,\n        },\n        {\n          x: 12948447.049964357,\n          y: 4871369.071132418,\n        },\n        {\n          x: 12948447.986775042,\n          y: 4871367.444350426,\n        },\n        {\n          x: 12948505.566148069,\n          y: 4871267.333064074,\n        },\n        {\n          x: 12948544.503004055,\n          y: 4871190.001687928,\n        },\n        {\n          x: 12948579.413090972,\n          y: 4871111.04819233,\n        },\n        {\n          x: 12948621.84723699,\n          y: 4871002.001678927,\n        },\n        {\n          x: 12948649.245005308,\n          y: 4870919.800386681,\n        },\n        {\n          x: 12948729.034075115,\n          y: 4870659.041565615,\n        },\n        {\n          x: 12948806.660201645,\n          y: 4870408.542141671,\n        },\n        {\n          x: 12948816.10369674,\n          y: 4870377.056894108,\n        },\n        {\n          x: 12948817.112454178,\n          y: 4870373.69505771,\n        },\n        {\n          x: 12948822.827115472,\n          y: 4870354.633454126,\n        },\n        {\n          x: 12948823.264697373,\n          y: 4870353.177438731,\n        },\n        {\n          x: 12948871.583647873,\n          y: 4870192.062297062,\n        },\n        {\n          x: 12948888.256377492,\n          y: 4870137.412837239,\n        },\n        {\n          x: 12948888.256477488,\n          y: 4870137.412437243,\n        },\n        {\n          x: 12948981.13241698,\n          y: 4869833.0181290535,\n        },\n        {\n          x: 12949020.38513926,\n          y: 4869703.696545276,\n        },\n        {\n          x: 12949062.757994082,\n          y: 4869570.843921744,\n        },\n        {\n          x: 12949090.169382466,\n          y: 4869479.2850293545,\n        },\n        {\n          x: 12949123.989708498,\n          y: 4869371.588525548,\n        },\n        {\n          x: 12949143.001308247,\n          y: 4869300.813594804,\n        },\n        {\n          x: 12949146.761492698,\n          y: 4869288.429210793,\n        },\n        {\n          x: 12949163.7803404,\n          y: 4869233.145301005,\n        },\n        {\n          x: 12949175.026622072,\n          y: 4869195.787679086,\n        },\n        {\n          x: 12949196.938022848,\n          y: 4869123.013569744,\n        },\n        {\n          x: 12949208.873643316,\n          y: 4869083.2070951825,\n        },\n        {\n          x: 12949223.461787153,\n          y: 4869036.1056654295,\n        },\n        {\n          x: 12949242.728116639,\n          y: 4868973.956351733,\n        },\n        {\n          x: 12949271.681629652,\n          y: 4868877.983261017,\n        },\n        {\n          x: 12949297.10128093,\n          y: 4868796.606128646,\n        },\n        {\n          x: 12949301.07802554,\n          y: 4868786.43636378,\n        },\n        {\n          x: 12949316.770515563,\n          y: 4868745.313714858,\n        },\n        {\n          x: 12949322.956596527,\n          y: 4868730.50358208,\n        },\n        {\n          x: 12949339.748933367,\n          y: 4868696.689288448,\n        },\n        {\n          x: 12949362.183788385,\n          y: 4868657.470406632,\n        },\n        {\n          x: 12949389.99988878,\n          y: 4868612.036959275,\n        },\n        {\n          x: 12949405.211090067,\n          y: 4868588.465232985,\n        },\n        {\n          x: 12949424.342096223,\n          y: 4868564.828507317,\n        },\n        {\n          x: 12949513.190764954,\n          y: 4868460.242782986,\n        },\n        {\n          x: 12949542.465744024,\n          y: 4868426.322580645,\n        },\n        {\n          x: 12949544.338502375,\n          y: 4868424.150033486,\n        },\n        {\n          x: 12949600.872280473,\n          y: 4868356.658526145,\n        },\n        {\n          x: 12949646.996273136,\n          y: 4868303.803243655,\n        },\n        {\n          x: 12949696.144125719,\n          y: 4868246.537783951,\n        },\n        {\n          x: 12949755.723785738,\n          y: 4868181.855453389,\n        },\n        {\n          x: 12949832.37526342,\n          y: 4868093.127098315,\n        },\n        {\n          x: 12949851.813717443,\n          y: 4868068.399532126,\n        },\n        {\n          x: 12949894.667583121,\n          y: 4868017.630119035,\n        },\n        {\n          x: 12949932.221547332,\n          y: 4867975.033422636,\n        },\n        {\n          x: 12949984.350867936,\n          y: 4867915.6628556745,\n        },\n        {\n          x: 12950051.280432409,\n          y: 4867836.640979047,\n        },\n        {\n          x: 12950119.532814305,\n          y: 4867759.173557603,\n        },\n        {\n          x: 12950170.049738903,\n          y: 4867700.545102677,\n        },\n        {\n          x: 12950196.18372548,\n          y: 4867669.647630281,\n        },\n        {\n          x: 12950245.012623828,\n          y: 4867612.641024118,\n        },\n        {\n          x: 12950366.341310102,\n          y: 4867472.554440256,\n        },\n        {\n          x: 12950396.016682621,\n          y: 4867437.159853344,\n        },\n        {\n          x: 12950433.41414459,\n          y: 4867388.174952161,\n        },\n        {\n          x: 12950467.047766922,\n          y: 4867337.197051575,\n        },\n        {\n          x: 12950472.727024797,\n          y: 4867327.624837841,\n        },\n        {\n          x: 12950504.43931956,\n          y: 4867270.541731104,\n        },\n        {\n          x: 12950506.66515916,\n          y: 4867265.686943075,\n        },\n        {\n          x: 12950513.328076823,\n          y: 4867251.147877864,\n        },\n        {\n          x: 12950522.125427773,\n          y: 4867231.948518946,\n        },\n        {\n          x: 12950543.25084689,\n          y: 4867180.747377998,\n        },\n        {\n          x: 12950554.610753339,\n          y: 4867148.755648968,\n        },\n        {\n          x: 12950565.938845547,\n          y: 4867113.7289358685,\n        },\n        {\n          x: 12950577.077540115,\n          y: 4867070.725547691,\n        },\n        {\n          x: 12950584.992247868,\n          y: 4867034.253515085,\n        },\n        {\n          x: 12950597.570781464,\n          y: 4866945.446932178,\n        },\n        {\n          x: 12950602.621253733,\n          y: 4866858.218872007,\n        },\n        {\n          x: 12950604.351725787,\n          y: 4866798.591035709,\n        },\n        {\n          x: 12950604.673463916,\n          y: 4866769.830411211,\n        },\n        {\n          x: 12950608.500044588,\n          y: 4866652.0108254915,\n        },\n        {\n          x: 12950610.319620667,\n          y: 4866589.554543856,\n        },\n        {\n          x: 12950610.359324489,\n          y: 4866588.2321465295,\n        },\n        {\n          x: 12950610.80126891,\n          y: 4866566.6265690895,\n        },\n        {\n          x: 12950612.409021743,\n          y: 4866522.173389596,\n        },\n        {\n          x: 12950616.621330654,\n          y: 4866372.98018754,\n        },\n        {\n          x: 12950618.97605836,\n          y: 4866293.007567341,\n        },\n        {\n          x: 12950619.842244353,\n          y: 4866255.184129226,\n        },\n        {\n          x: 12950625.910927346,\n          y: 4866063.848140013,\n        },\n        {\n          x: 12950628.387367597,\n          y: 4865977.081155829,\n        },\n        {\n          x: 12950629.753005603,\n          y: 4865908.9763710955,\n        },\n        {\n          x: 12950632.086528255,\n          y: 4865841.0262908945,\n        },\n        {\n          x: 12950632.35165354,\n          y: 4865833.33471617,\n        },\n        {\n          x: 12950633.79978892,\n          y: 4865801.28505746,\n        },\n        {\n          x: 12950635.690965662,\n          y: 4865759.427843475,\n        },\n        {\n          x: 12950637.922484085,\n          y: 4865674.26866093,\n        },\n        {\n          x: 12950641.139187874,\n          y: 4865591.213986744,\n        },\n        {\n          x: 12950643.134781921,\n          y: 4865519.6466930285,\n        },\n        {\n          x: 12950643.368005117,\n          y: 4865509.419217591,\n        },\n        {\n          x: 12950643.529421674,\n          y: 4865500.599934787,\n        },\n        {\n          x: 12950643.977363357,\n          y: 4865491.176881495,\n        },\n        {\n          x: 12950644.362001631,\n          y: 4865474.307022515,\n        },\n        {\n          x: 12950644.872350669,\n          y: 4865458.107876617,\n        },\n        {\n          x: 12950645.130576981,\n          y: 4865444.560304754,\n        },\n        {\n          x: 12950645.57682058,\n          y: 4865427.882852814,\n        },\n        {\n          x: 12950645.993461674,\n          y: 4865410.917198133,\n        },\n        {\n          x: 12950646.667225737,\n          y: 4865391.909170426,\n        },\n        {\n          x: 12950647.177975576,\n          y: 4865372.994126345,\n        },\n        {\n          x: 12950647.75493018,\n          y: 4865357.594288625,\n        },\n        {\n          x: 12950648.042257652,\n          y: 4865348.937219927,\n        },\n        {\n          x: 12950648.42689613,\n          y: 4865331.427963337,\n        },\n        {\n          x: 12950649.226270262,\n          y: 4865315.3585491525,\n        },\n        {\n          x: 12950650.507293697,\n          y: 4865273.423391737,\n        },\n        {\n          x: 12950650.697711246,\n          y: 4865269.97251224,\n        },\n        {\n          x: 12950651.401779896,\n          y: 4865244.094692232,\n        },\n        {\n          x: 12950652.233156506,\n          y: 4865229.016682226,\n        },\n        {\n          x: 12950652.74640693,\n          y: 4865208.822741665,\n        },\n        {\n          x: 12950653.64269155,\n          y: 4865185.438841808,\n        },\n        {\n          x: 12950654.09033895,\n          y: 4865156.015598994,\n        },\n        {\n          x: 12950655.11473383,\n          y: 4865135.615712103,\n        },\n        {\n          x: 12950655.81880249,\n          y: 4865109.7205952415,\n        },\n        {\n          x: 12950656.266944723,\n          y: 4865098.219646195,\n        },\n        {\n          x: 12950656.776491228,\n          y: 4865090.42570183,\n        },\n        {\n          x: 12950657.610074416,\n          y: 4865053.173004747,\n        },\n        {\n          x: 12950657.80429587,\n          y: 4865037.45393246,\n        },\n        {\n          x: 12950665.057790544,\n          y: 4864813.469608394,\n        },\n        {\n          x: 12950666.31470639,\n          y: 4864789.756353396,\n        },\n        {\n          x: 12950666.825456835,\n          y: 4864768.799620799,\n        },\n        {\n          x: 12950667.593330417,\n          y: 4864744.839817025,\n        },\n        {\n          x: 12950667.977868663,\n          y: 4864728.163469017,\n        },\n        {\n          x: 12950669.195489043,\n          y: 4864677.813533126,\n        },\n        {\n          x: 12950669.835947098,\n          y: 4864668.869905654,\n        },\n        {\n          x: 12950670.091873968,\n          y: 4864653.088344843,\n        },\n        {\n          x: 12950670.988058263,\n          y: 4864630.3428553175,\n        },\n        {\n          x: 12950670.92435391,\n          y: 4864626.509652139,\n        },\n        {\n          x: 12950671.691826217,\n          y: 4864606.63864744,\n        },\n        {\n          x: 12950672.203278288,\n          y: 4864580.504222692,\n        },\n        {\n          x: 12950673.228074549,\n          y: 4864554.884550185,\n        },\n        {\n          x: 12950673.73952671,\n          y: 4864528.497326723,\n        },\n        {\n          x: 12950674.890434487,\n          y: 4864500.769470086,\n        },\n        {\n          x: 12950675.2757754,\n          y: 4864475.593033784,\n        },\n        {\n          x: 12950675.409487799,\n          y: 4864472.776850138,\n        },\n        {\n          x: 12950676.010148842,\n          y: 4864442.529341358,\n        },\n        {\n          x: 12950677.468085546,\n          y: 4864406.737226046,\n        },\n        {\n          x: 12950678.344374934,\n          y: 4864361.629262644,\n        },\n        {\n          x: 12950681.645047376,\n          y: 4864252.127616024,\n        },\n        {\n          x: 12950682.9547692,\n          y: 4864216.335625385,\n        },\n        {\n          x: 12950683.100682352,\n          y: 4864214.154238779,\n        },\n        {\n          x: 12950684.236285895,\n          y: 4864191.999439908,\n        },\n        {\n          x: 12950685.866634507,\n          y: 4864160.1778856525,\n        },\n        {\n          x: 12950689.79278639,\n          y: 4864108.3870529765,\n        },\n        {\n          x: 12950689.938599342,\n          y: 4864106.931066905,\n        },\n        {\n          x: 12950697.064031562,\n          y: 4864036.379448896,\n        },\n        {\n          x: 12950699.534748787,\n          y: 4864019.216889406,\n        },\n        {\n          x: 12950699.680561578,\n          y: 4864018.345103669,\n        },\n        {\n          x: 12950716.396330617,\n          y: 4863888.161824789,\n        },\n        {\n          x: 12950718.57772101,\n          y: 4863874.636737837,\n        },\n        {\n          x: 12950718.577821152,\n          y: 4863874.05533762,\n        },\n        {\n          x: 12950732.387228379,\n          y: 4863767.873478454,\n        },\n        {\n          x: 12950748.375318805,\n          y: 4863648.896232093,\n        },\n        {\n          x: 12950765.67291641,\n          y: 4863514.502311158,\n        },\n        {\n          x: 12950777.731654065,\n          y: 4863426.117281793,\n        },\n        {\n          x: 12950782.448058736,\n          y: 4863391.472539309,\n        },\n        {\n          x: 12950787.587200012,\n          y: 4863348.835337318,\n        },\n        {\n          x: 12950801.256266356,\n          y: 4863250.146561549,\n        },\n        {\n          x: 12950805.275908938,\n          y: 4863217.932650578,\n        },\n        {\n          x: 12950818.28101368,\n          y: 4863113.762708521,\n        },\n        {\n          x: 12950822.999512516,\n          y: 4863078.5401642835,\n        },\n        {\n          x: 12950827.797217675,\n          y: 4863040.997227563,\n        },\n        {\n          x: 12950833.851926966,\n          y: 4862997.421011249,\n        },\n        {\n          x: 12950838.379305013,\n          y: 4862973.344145836,\n        },\n        {\n          x: 12950848.476446522,\n          y: 4862915.367113537,\n        },\n        {\n          x: 12950856.118280582,\n          y: 4862873.256843487,\n        },\n        {\n          x: 12950862.060671719,\n          y: 4862842.477409358,\n        },\n        {\n          x: 12950882.653269414,\n          y: 4862709.589368273,\n        },\n        {\n          x: 12950907.883131918,\n          y: 4862524.421459502,\n        },\n        {\n          x: 12950907.90533372,\n          y: 4862524.26986159,\n        },\n        {\n          x: 12950920.067918759,\n          y: 4862435.001208198,\n        },\n        {\n          x: 12950928.527198693,\n          y: 4862379.783399951,\n        },\n        {\n          x: 12950939.681083987,\n          y: 4862336.514125757,\n        },\n        {\n          x: 12950954.29343263,\n          y: 4862293.863553435,\n        },\n        {\n          x: 12950967.571566563,\n          y: 4862263.107846068,\n        },\n        {\n          x: 12950978.195387682,\n          y: 4862240.704492119,\n        },\n        {\n          x: 12950999.06198339,\n          y: 4862206.546426427,\n        },\n        {\n          x: 12951021.446772633,\n          y: 4862168.969866098,\n        },\n        {\n          x: 12951097.70213785,\n          y: 4862042.200138503,\n        },\n        {\n          x: 12951174.075577334,\n          y: 4861915.693221821,\n        },\n        {\n          x: 12951267.776776478,\n          y: 4861760.078948706,\n        },\n        {\n          x: 12951395.236453552,\n          y: 4861519.784399533,\n        },\n        {\n          x: 12951412.303520849,\n          y: 4861476.874540171,\n        },\n        {\n          x: 12951451.654131988,\n          y: 4861334.408202046,\n        },\n        {\n          x: 12951451.745536273,\n          y: 4861334.052106667,\n        },\n        {\n          x: 12951466.623726709,\n          y: 4861241.564646258,\n        },\n        {\n          x: 12951489.13393889,\n          y: 4861018.001826673,\n        },\n        {\n          x: 12951490.383194035,\n          y: 4860999.999285448,\n        },\n        {\n          x: 12951491.439840542,\n          y: 4860985.560035131,\n        },\n        {\n          x: 12951503.010040093,\n          y: 4860889.175072468,\n        },\n        {\n          x: 12951531.140403,\n          y: 4860680.970427163,\n        },\n        {\n          x: 12951557.758936353,\n          y: 4860485.587344637,\n        },\n        {\n          x: 12951565.10420882,\n          y: 4860453.124738692,\n        },\n        {\n          x: 12951575.364280945,\n          y: 4860406.458640103,\n        },\n        {\n          x: 12951581.065583235,\n          y: 4860384.268158007,\n        },\n        {\n          x: 12951610.884689623,\n          y: 4860288.296338669,\n        },\n        {\n          x: 12951620.19888619,\n          y: 4860261.224956072,\n        },\n        {\n          x: 12951627.274605729,\n          y: 4860242.081190622,\n        },\n        {\n          x: 12951637.413111666,\n          y: 4860215.23171692,\n        },\n        {\n          x: 12951657.721893568,\n          y: 4860163.979635463,\n        },\n        {\n          x: 12951666.949544173,\n          y: 4860142.223200858,\n        },\n        {\n          x: 12951668.869595224,\n          y: 4860137.696654858,\n        },\n        {\n          x: 12951693.982928237,\n          y: 4860078.331821876,\n        },\n        {\n          x: 12951736.262245214,\n          y: 4859972.802878212,\n        },\n        {\n          x: 12951779.310281485,\n          y: 4859859.063131411,\n        },\n        {\n          x: 12951799.296553789,\n          y: 4859804.14710355,\n        },\n        {\n          x: 12951825.224839896,\n          y: 4859739.862680752,\n        },\n        {\n          x: 12951906.509982908,\n          y: 4859546.26065336,\n        },\n        {\n          x: 12951960.443026407,\n          y: 4859429.470375646,\n        },\n        {\n          x: 12951999.771882042,\n          y: 4859335.105420177,\n        },\n        {\n          x: 12952032.435444733,\n          y: 4859254.969474848,\n        },\n        {\n          x: 12952037.41706581,\n          y: 4859242.9403781,\n        },\n        {\n          x: 12952060.923649335,\n          y: 4859187.91377235,\n        },\n        {\n          x: 12952072.317820875,\n          y: 4859160.3641980635,\n        },\n        {\n          x: 12952084.970246904,\n          y: 4859131.4834706,\n        },\n        {\n          x: 12952113.084959969,\n          y: 4859065.12985738,\n        },\n        {\n          x: 12952130.693674402,\n          y: 4859023.732486952,\n        },\n        {\n          x: 12952141.643150551,\n          y: 4858996.55370852,\n        },\n        {\n          x: 12952162.804377414,\n          y: 4858947.308924186,\n        },\n        {\n          x: 12952171.755373834,\n          y: 4858927.981571281,\n        },\n        {\n          x: 12952175.604139445,\n          y: 4858917.094515989,\n        },\n        {\n          x: 12952180.82205369,\n          y: 4858900.9651018735,\n        },\n        {\n          x: 12952184.554718394,\n          y: 4858889.243946094,\n        },\n        {\n          x: 12952190.769288482,\n          y: 4858868.280381973,\n        },\n        {\n          x: 12952193.507485226,\n          y: 4858857.610563799,\n        },\n        {\n          x: 12952195.947291974,\n          y: 4858845.681757747,\n        },\n        {\n          x: 12952197.797320686,\n          y: 4858836.642376694,\n        },\n        {\n          x: 12952199.129268397,\n          y: 4858825.304718492,\n        },\n        {\n          x: 12952203.716285268,\n          y: 4858778.431416472,\n        },\n        {\n          x: 12952205.964993557,\n          y: 4858749.46331663,\n        },\n        {\n          x: 12952207.408630643,\n          y: 4858703.901754291,\n        },\n        {\n          x: 12952205.633196818,\n          y: 4858677.13773786,\n        },\n        {\n          x: 12952200.97007183,\n          y: 4858631.018552714,\n        },\n        {\n          x: 12952196.971420817,\n          y: 4858601.209733323,\n        },\n        {\n          x: 12952192.67917836,\n          y: 4858569.843524169,\n        },\n        {\n          x: 12952188.386933465,\n          y: 4858539.217911885,\n        },\n        {\n          x: 12952168.84610709,\n          y: 4858394.254627763,\n        },\n        {\n          x: 12952159.519210786,\n          y: 4858329.002694597,\n        },\n        {\n          x: 12952158.632838566,\n          y: 4858318.547228751,\n        },\n        {\n          x: 12952157.151183436,\n          y: 4858288.818485506,\n        },\n        {\n          x: 12952156.706496444,\n          y: 4858276.218902411,\n        },\n        {\n          x: 12952157.149780104,\n          y: 4858257.685985396,\n        },\n        {\n          x: 12952159.218710119,\n          y: 4858232.933605842,\n        },\n        {\n          x: 12952159.810389748,\n          y: 4858223.449482893,\n        },\n        {\n          x: 12952162.532997137,\n          y: 4858196.9427767545,\n        },\n        {\n          x: 12952172.755045319,\n          y: 4858146.897168553,\n        },\n        {\n          x: 12952179.958089378,\n          y: 4858120.216771117,\n        },\n        {\n          x: 12952191.658258049,\n          y: 4858079.657970377,\n        },\n        {\n          x: 12952208.58059935,\n          y: 4858022.51880722,\n        },\n        {\n          x: 12952216.501576891,\n          y: 4857997.283134168,\n        },\n        {\n          x: 12952225.680391517,\n          y: 4857966.100288983,\n        },\n        {\n          x: 12952269.24519301,\n          y: 4857823.342887307,\n        },\n        {\n          x: 12952302.724863112,\n          y: 4857711.949002681,\n        },\n      ],\n    },\n    {\n      id: \"13\",\n      source: \"26\",\n      target: \"27\",\n      class: \"地铁十号线\",\n      name: \"地铁十号线 0\",\n      controlPoints: [\n        {\n          x: 12964391.173261674,\n          y: 4847959.964747035,\n        },\n        {\n          x: 12964381.421162914,\n          y: 4847238.950861313,\n        },\n        {\n          x: 12964379.013229802,\n          y: 4847130.369249381,\n        },\n        {\n          x: 12964369.707333228,\n          y: 4846953.233573841,\n        },\n        {\n          x: 12964365.098653296,\n          y: 4846899.529372901,\n        },\n        {\n          x: 12964350.271597194,\n          y: 4846844.7236321755,\n        },\n        {\n          x: 12964328.613459915,\n          y: 4846773.943192761,\n        },\n        {\n          x: 12964303.571447244,\n          y: 4846720.321707801,\n        },\n        {\n          x: 12964261.49123042,\n          y: 4846658.767114734,\n        },\n        {\n          x: 12964219.422329223,\n          y: 4846606.356004327,\n        },\n        {\n          x: 12964163.72308854,\n          y: 4846548.283066274,\n        },\n        {\n          x: 12964117.115347376,\n          y: 4846498.174184149,\n        },\n        {\n          x: 12963719.24125982,\n          y: 4846081.363070078,\n        },\n        {\n          x: 12963666.940189386,\n          y: 4846020.980269377,\n        },\n        {\n          x: 12963651.029381108,\n          y: 4846008.466281171,\n        },\n        {\n          x: 12963640.792827746,\n          y: 4845993.645627467,\n        },\n        {\n          x: 12963630.555030722,\n          y: 4845977.682026026,\n        },\n        {\n          x: 12963622.579870086,\n          y: 4845954.85254285,\n        },\n        {\n          x: 12963622.547271827,\n          y: 4845927.422297171,\n        },\n        {\n          x: 12963624.705055857,\n          y: 4845832.5516995825,\n        },\n        {\n          x: 12963605.106422728,\n          y: 4844950.156548626,\n        },\n        {\n          x: 12963600.552929461,\n          y: 4844939.887775902,\n        },\n        {\n          x: 12963641.28504856,\n          y: 4844029.840890613,\n        },\n        {\n          x: 12963635.07102118,\n          y: 4843895.785437119,\n        },\n        {\n          x: 12963592.56494142,\n          y: 4843790.304489117,\n        },\n        {\n          x: 12963515.79594813,\n          y: 4843723.544249312,\n        },\n        {\n          x: 12963437.02641232,\n          y: 4843673.039785006,\n        },\n        {\n          x: 12963372.392513098,\n          y: 4843630.608396946,\n        },\n        {\n          x: 12963273.452605404,\n          y: 4843594.387913362,\n        },\n        {\n          x: 12963212.653908446,\n          y: 4843577.914113967,\n        },\n        {\n          x: 12963206.82489125,\n          y: 4843576.334664474,\n        },\n        {\n          x: 12963057.427614385,\n          y: 4843550.431693091,\n        },\n        {\n          x: 12962954.477380954,\n          y: 4843548.741287049,\n        },\n        {\n          x: 12962788.932332132,\n          y: 4843539.119846538,\n        },\n        {\n          x: 12960734.413928954,\n          y: 4843579.436506579,\n        },\n        {\n          x: 12960615.677401308,\n          y: 4843579.296389959,\n        },\n        {\n          x: 12959224.804679275,\n          y: 4843577.132908265,\n        },\n        {\n          x: 12958165.962075146,\n          y: 4843552.786071934,\n        },\n        {\n          x: 12958015.842937116,\n          y: 4843539.299682281,\n        },\n        {\n          x: 12957633.083574392,\n          y: 4843505.052930688,\n        },\n        {\n          x: 12956758.552751072,\n          y: 4843474.381786778,\n        },\n        {\n          x: 12956086.236845858,\n          y: 4843457.686331021,\n        },\n        {\n          x: 12955417.836020822,\n          y: 4843562.642953932,\n        },\n        {\n          x: 12955413.075883733,\n          y: 4843564.0987397935,\n        },\n        {\n          x: 12955318.578314304,\n          y: 4843592.994666116,\n        },\n        {\n          x: 12955279.765356282,\n          y: 4843598.897849127,\n        },\n        {\n          x: 12955190.622782081,\n          y: 4843602.847728858,\n        },\n        {\n          x: 12953646.394080758,\n          y: 4843575.957979132,\n        },\n        {\n          x: 12953060.552869217,\n          y: 4843574.760301962,\n        },\n        {\n          x: 12952787.031931885,\n          y: 4843571.511276698,\n        },\n        {\n          x: 12951953.230827896,\n          y: 4843561.903501986,\n        },\n        {\n          x: 12951924.357645055,\n          y: 4843559.360785293,\n        },\n        {\n          x: 12951835.590379665,\n          y: 4843551.541948503,\n        },\n        {\n          x: 12951527.588141518,\n          y: 4843484.482094485,\n        },\n        {\n          x: 12951075.84273588,\n          y: 4843410.169546208,\n        },\n        {\n          x: 12950795.208394462,\n          y: 4843386.56777375,\n        },\n        {\n          x: 12950199.79003986,\n          y: 4843370.818621907,\n        },\n        {\n          x: 12950187.299179578,\n          y: 4843370.485690744,\n        },\n        {\n          x: 12948755.739655264,\n          y: 4843370.555741397,\n        },\n        {\n          x: 12948301.7684026,\n          y: 4843375.188304583,\n        },\n        {\n          x: 12948278.325845689,\n          y: 4843375.123114149,\n        },\n        {\n          x: 12947913.423896424,\n          y: 4843373.865129756,\n        },\n        {\n          x: 12947592.303468505,\n          y: 4843394.1161822025,\n        },\n        {\n          x: 12947581.215097992,\n          y: 4843394.815685296,\n        },\n        {\n          x: 12947415.424213238,\n          y: 4843437.701399312,\n        },\n        {\n          x: 12947274.850617228,\n          y: 4843509.5493655335,\n        },\n        {\n          x: 12947145.066987505,\n          y: 4843631.989033849,\n        },\n        {\n          x: 12947083.745603528,\n          y: 4843765.448522134,\n        },\n        {\n          x: 12947029.622192265,\n          y: 4843916.987015813,\n        },\n        {\n          x: 12946979.091048203,\n          y: 4844090.2070025485,\n        },\n        {\n          x: 12946955.102622215,\n          y: 4844184.990607465,\n        },\n        {\n          x: 12946945.915349547,\n          y: 4844319.830258014,\n        },\n        {\n          x: 12946923.770701075,\n          y: 4845315.372927731,\n        },\n        {\n          x: 12946851.421569752,\n          y: 4846551.5626413245,\n        },\n        {\n          x: 12946848.88594415,\n          y: 4846594.6202231655,\n        },\n        {\n          x: 12946848.609652413,\n          y: 4846598.19993173,\n        },\n        {\n          x: 12946696.54362537,\n          y: 4848569.1295227185,\n        },\n        {\n          x: 12946757.730386814,\n          y: 4848764.400754196,\n        },\n        {\n          x: 12946757.762984468,\n          y: 4848770.602855413,\n        },\n        {\n          x: 12946761.025258096,\n          y: 4849389.514336067,\n        },\n        {\n          x: 12946767.82605037,\n          y: 4850217.041711847,\n        },\n        {\n          x: 12946789.423173606,\n          y: 4850282.143556595,\n        },\n        {\n          x: 12946825.465052422,\n          y: 4850311.148186556,\n        },\n        {\n          x: 12947052.561481878,\n          y: 4850452.686121019,\n        },\n        {\n          x: 12947214.803034527,\n          y: 4850514.554585377,\n        },\n        {\n          x: 12947308.555685857,\n          y: 4850529.261912783,\n        },\n        {\n          x: 12947449.196901781,\n          y: 4850533.256072254,\n        },\n        {\n          x: 12947590.121115766,\n          y: 4850533.639384969,\n        },\n        {\n          x: 12947604.269979956,\n          y: 4850533.6780554075,\n        },\n        {\n          x: 12947595.595432382,\n          y: 4853171.930337626,\n        },\n        {\n          x: 12947588.6332791,\n          y: 4853230.507756927,\n        },\n        {\n          x: 12947570.25534986,\n          y: 4853385.134998881,\n        },\n        {\n          x: 12947534.132989677,\n          y: 4853500.7123848,\n        },\n        {\n          x: 12947451.113532243,\n          y: 4853616.16379296,\n        },\n        {\n          x: 12947332.03107398,\n          y: 4853706.215145492,\n        },\n        {\n          x: 12947133.576039799,\n          y: 4853828.591678857,\n        },\n        {\n          x: 12946866.97284939,\n          y: 4854028.085858982,\n        },\n        {\n          x: 12946608.167520212,\n          y: 4854187.260197411,\n        },\n        {\n          x: 12946364.738988684,\n          y: 4854328.7254704805,\n        },\n        {\n          x: 12946303.257037977,\n          y: 4854430.402571901,\n        },\n        {\n          x: 12946252.383757986,\n          y: 4854573.552461346,\n        },\n        {\n          x: 12946214.461752877,\n          y: 4854793.706838007,\n        },\n        {\n          x: 12946220.215499429,\n          y: 4854990.273434222,\n        },\n        {\n          x: 12946219.011349382,\n          y: 4855034.084710322,\n        },\n        {\n          x: 12946156.333146382,\n          y: 4855155.899273862,\n        },\n        {\n          x: 12946061.71710423,\n          y: 4855352.240931815,\n        },\n        {\n          x: 12946050.635431375,\n          y: 4855405.652363556,\n        },\n        {\n          x: 12946036.841429455,\n          y: 4855472.970938698,\n        },\n        {\n          x: 12945937.184814524,\n          y: 4856212.898218268,\n        },\n        {\n          x: 12945963.10362221,\n          y: 4857094.046675076,\n        },\n        {\n          x: 12945958.921351675,\n          y: 4857134.026535522,\n        },\n        {\n          x: 12945884.03047807,\n          y: 4857857.218830575,\n        },\n        {\n          x: 12945847.638054904,\n          y: 4858399.611054495,\n        },\n        {\n          x: 12945847.280553274,\n          y: 4859007.224022067,\n        },\n        {\n          x: 12945860.526034107,\n          y: 4859226.599693325,\n        },\n        {\n          x: 12945864.842806887,\n          y: 4859298.0925262105,\n        },\n        {\n          x: 12945879.5175261,\n          y: 4859405.1651427485,\n        },\n        {\n          x: 12945886.625513952,\n          y: 4859589.651325276,\n        },\n        {\n          x: 12945864.662784807,\n          y: 4859694.379973758,\n        },\n        {\n          x: 12945784.912348324,\n          y: 4859882.159043464,\n        },\n        {\n          x: 12945727.11821354,\n          y: 4859994.151868572,\n        },\n        {\n          x: 12945701.784202412,\n          y: 4860124.311216468,\n        },\n        {\n          x: 12945698.14559977,\n          y: 4860174.944243185,\n        },\n        {\n          x: 12945452.47590781,\n          y: 4860713.3477798365,\n        },\n        {\n          x: 12945196.058016783,\n          y: 4861128.770078741,\n        },\n        {\n          x: 12945092.686995683,\n          y: 4861317.482488749,\n        },\n        {\n          x: 12945051.578445194,\n          y: 4861392.531520205,\n        },\n        {\n          x: 12945015.437229244,\n          y: 4861490.129152049,\n        },\n        {\n          x: 12945008.163701242,\n          y: 4861576.939256895,\n        },\n        {\n          x: 12945015.284018965,\n          y: 4861718.049761452,\n        },\n        {\n          x: 12945022.23002506,\n          y: 4861756.836245517,\n        },\n        {\n          x: 12945035.651318152,\n          y: 4861797.3254907355,\n        },\n        {\n          x: 12945054.888690906,\n          y: 4861837.528089324,\n        },\n        {\n          x: 12945105.325637072,\n          y: 4861946.179124048,\n        },\n        {\n          x: 12945125.370065786,\n          y: 4861974.055941134,\n        },\n        {\n          x: 12945163.446826743,\n          y: 4862019.098382124,\n        },\n        {\n          x: 12945194.809906306,\n          y: 4862048.391273372,\n        },\n        {\n          x: 12945228.090067945,\n          y: 4862073.16642714,\n        },\n        {\n          x: 12945255.305523323,\n          y: 4862092.36230406,\n        },\n        {\n          x: 12945285.556679495,\n          y: 4862110.414454173,\n        },\n        {\n          x: 12945315.808265274,\n          y: 4862128.467023728,\n        },\n        {\n          x: 12945361.54760602,\n          y: 4862142.217026062,\n        },\n        {\n          x: 12945487.830327151,\n          y: 4862156.985505024,\n        },\n      ],\n    },\n    {\n      id: \"14\",\n      source: \"28\",\n      target: \"29\",\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 0\",\n      controlPoints: [\n        {\n          x: 12937234.877597623,\n          y: 4846515.674866713,\n        },\n        {\n          x: 12937368.988537306,\n          y: 4846593.191490097,\n        },\n        {\n          x: 12937461.335291399,\n          y: 4846647.398606839,\n        },\n        {\n          x: 12937532.375518117,\n          y: 4846688.019702177,\n        },\n        {\n          x: 12937591.769328088,\n          y: 4846720.059432032,\n        },\n        {\n          x: 12937621.188342465,\n          y: 4846732.002843995,\n        },\n        {\n          x: 12937671.789557256,\n          y: 4846748.737535954,\n        },\n        {\n          x: 12937709.602904188,\n          y: 4846758.320650579,\n        },\n        {\n          x: 12937735.762316125,\n          y: 4846763.326932602,\n        },\n        {\n          x: 12937752.397758542,\n          y: 4846765.615152837,\n        },\n        {\n          x: 12937773.44091199,\n          y: 4846768.332774585,\n        },\n        {\n          x: 12937804.297495496,\n          y: 4846770.764304414,\n        },\n        {\n          x: 12937827.33427437,\n          y: 4846772.051537565,\n        },\n        {\n          x: 12937868.008451082,\n          y: 4846771.479321919,\n        },\n        {\n          x: 12937892.32897584,\n          y: 4846770.33498424,\n        },\n        {\n          x: 12937918.075058706,\n          y: 4846766.901995257,\n        },\n        {\n          x: 12937940.834554123,\n          y: 4846763.6122220345,\n        },\n        {\n          x: 12937968.574529182,\n          y: 4846758.463006948,\n        },\n        {\n          x: 12937995.180239107,\n          y: 4846751.025023762,\n        },\n        {\n          x: 12938017.517118562,\n          y: 4846745.160619812,\n        },\n        {\n          x: 12938042.132414829,\n          y: 4846737.43681869,\n        },\n        {\n          x: 12938076.570282334,\n          y: 4846723.276240112,\n        },\n        {\n          x: 12938122.822349729,\n          y: 4846702.393192925,\n        },\n        {\n          x: 12938155.702757211,\n          y: 4846683.512634498,\n        },\n        {\n          x: 12938188.444042044,\n          y: 4846662.62954278,\n        },\n        {\n          x: 12938219.76602793,\n          y: 4846639.600848661,\n        },\n        {\n          x: 12938250.095861865,\n          y: 4846614.140497331,\n        },\n        {\n          x: 12938278.438376905,\n          y: 4846585.962328421,\n        },\n        {\n          x: 12938304.220769178,\n          y: 4846557.783944012,\n        },\n        {\n          x: 12938329.579807637,\n          y: 4846527.173999285,\n        },\n        {\n          x: 12938353.520818293,\n          y: 4846493.274026497,\n        },\n        {\n          x: 12938372.907309297,\n          y: 4846461.6623603245,\n        },\n        {\n          x: 12938391.017690128,\n          y: 4846427.046785262,\n        },\n        {\n          x: 12938412.561981687,\n          y: 4846377.125676343,\n        },\n        {\n          x: 12938434.974010698,\n          y: 4846316.476277426,\n        },\n        {\n          x: 12938448.248669473,\n          y: 4846281.574595996,\n        },\n        {\n          x: 12938475.656359944,\n          y: 4846207.766580478,\n        },\n        {\n          x: 12938490.211433839,\n          y: 4846172.579389068,\n        },\n        {\n          x: 12938507.041724533,\n          y: 4846137.6790905995,\n        },\n        {\n          x: 12938526.29072453,\n          y: 4846102.493274418,\n        },\n        {\n          x: 12938542.26056133,\n          y: 4846073.028826507,\n        },\n        {\n          x: 12938584.740041988,\n          y: 4846003.660309321,\n        },\n        {\n          x: 12938633.06400581,\n          y: 4845924.638571542,\n        },\n        {\n          x: 12938715.454181843,\n          y: 4845792.771941782,\n        },\n        {\n          x: 12938776.553557053,\n          y: 4845700.585488995,\n        },\n        {\n          x: 12938781.398345944,\n          y: 4845694.149817628,\n        },\n        {\n          x: 12938800.081236716,\n          y: 4845673.873968367,\n        },\n        {\n          x: 12938830.820290571,\n          y: 4845645.815687927,\n        },\n        {\n          x: 12938844.393556165,\n          y: 4845633.390067325,\n        },\n        {\n          x: 12938873.132778017,\n          y: 4845610.143030206,\n        },\n        {\n          x: 12938936.183000699,\n          y: 4845573.274183875,\n        },\n        {\n          x: 12938969.9751077,\n          y: 4845523.292870295,\n        },\n        {\n          x: 12939008.30658488,\n          y: 4845483.611718048,\n        },\n        {\n          x: 12939046.62636937,\n          y: 4845453.553428374,\n        },\n        {\n          x: 12939107.67397802,\n          y: 4845425.508528395,\n        },\n        {\n          x: 12939139.988430338,\n          y: 4845415.095566754,\n        },\n        {\n          x: 12939215.636890687,\n          y: 4845415.718690437,\n        },\n        {\n          x: 12939308.039270518,\n          y: 4845421.266472513,\n        },\n        {\n          x: 12939491.25690715,\n          y: 4845458.350894194,\n        },\n        {\n          x: 12939790.511140315,\n          y: 4845556.207267058,\n        },\n        {\n          x: 12939988.628771447,\n          y: 4845616.1622475535,\n        },\n        {\n          x: 12940117.839141306,\n          y: 4845661.911291016,\n        },\n        {\n          x: 12940686.897376765,\n          y: 4845952.2196258595,\n        },\n        {\n          x: 12941074.89764744,\n          y: 4846157.503429323,\n        },\n        {\n          x: 12941335.171058182,\n          y: 4846317.370755986,\n        },\n        {\n          x: 12941559.500148436,\n          y: 4846435.253157876,\n        },\n        {\n          x: 12941942.0737714,\n          y: 4846649.584496282,\n        },\n        {\n          x: 12942044.003008543,\n          y: 4846663.89086179,\n        },\n        {\n          x: 12942128.18335582,\n          y: 4846652.232800751,\n        },\n        {\n          x: 12942566.46418881,\n          y: 4846526.042660932,\n        },\n        {\n          x: 12942889.715147126,\n          y: 4846450.953434545,\n        },\n        {\n          x: 12943968.393642,\n          y: 4846408.250017698,\n        },\n        {\n          x: 12944809.837601995,\n          y: 4846425.649451,\n        },\n        {\n          x: 12944985.099897848,\n          y: 4846441.60822536,\n        },\n        {\n          x: 12945546.215890277,\n          y: 4846492.747584046,\n        },\n        {\n          x: 12946211.229001617,\n          y: 4846547.780306945,\n        },\n      ],\n    },\n    {\n      id: \"15\",\n      source: \"30\",\n      target: \"31\",\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 0\",\n      controlPoints: [\n        {\n          x: 12975220.360613192,\n          y: 4878868.526210992,\n        },\n        {\n          x: 12975170.101829547,\n          y: 4878482.810853661,\n        },\n        {\n          x: 12975127.393577926,\n          y: 4878166.084186471,\n        },\n        {\n          x: 12975102.3383307,\n          y: 4877971.094415046,\n        },\n        {\n          x: 12975067.230635904,\n          y: 4877703.212676576,\n        },\n        {\n          x: 12975028.196639525,\n          y: 4877408.433615002,\n        },\n        {\n          x: 12974992.782733576,\n          y: 4877135.782488413,\n        },\n        {\n          x: 12974961.616855532,\n          y: 4876898.418269849,\n        },\n        {\n          x: 12974957.635438241,\n          y: 4876867.667671654,\n        },\n        {\n          x: 12974924.692424836,\n          y: 4876613.225913413,\n        },\n        {\n          x: 12974904.122140514,\n          y: 4876457.185169152,\n        },\n        {\n          x: 12974891.114395186,\n          y: 4876358.838107704,\n        },\n        {\n          x: 12974881.80755435,\n          y: 4876318.801830084,\n        },\n        {\n          x: 12974850.30174708,\n          y: 4876128.145737729,\n        },\n        {\n          x: 12974841.600142721,\n          y: 4876060.242186066,\n        },\n        {\n          x: 12974833.693115635,\n          y: 4875993.44712488,\n        },\n        {\n          x: 12974824.851303473,\n          y: 4875896.879010218,\n        },\n        {\n          x: 12974823.581860177,\n          y: 4875861.890374971,\n        },\n        {\n          x: 12974804.231609207,\n          y: 4875717.818793602,\n        },\n        {\n          x: 12974793.363254767,\n          y: 4875644.593833729,\n        },\n        {\n          x: 12974780.733046675,\n          y: 4875579.452634726,\n        },\n        {\n          x: 12974765.457217943,\n          y: 4875526.588724708,\n        },\n        {\n          x: 12974748.090285787,\n          y: 4875469.247595661,\n        },\n        {\n          x: 12974731.657055452,\n          y: 4875430.44830189,\n        },\n        {\n          x: 12974707.759133428,\n          y: 4875374.935044397,\n        },\n        {\n          x: 12974682.982388051,\n          y: 4875324.213162166,\n        },\n        {\n          x: 12974660.60794111,\n          y: 4875285.743106426,\n        },\n        {\n          x: 12974635.85688353,\n          y: 4875245.7891169265,\n        },\n        {\n          x: 12974592.33221722,\n          y: 4875182.6007377645,\n        },\n        {\n          x: 12974565.515120054,\n          y: 4875148.641781552,\n        },\n        {\n          x: 12974477.340428105,\n          y: 4875046.200795493,\n        },\n        {\n          x: 12974324.23997027,\n          y: 4874868.727412534,\n        },\n        {\n          x: 12974285.225031873,\n          y: 4874824.06709895,\n        },\n        {\n          x: 12974250.676817749,\n          y: 4874784.765451768,\n        },\n        {\n          x: 12974226.548435159,\n          y: 4874754.982961457,\n        },\n        {\n          x: 12974179.793554721,\n          y: 4874702.287665765,\n        },\n        {\n          x: 12974152.700378012,\n          y: 4874674.611620291,\n        },\n        {\n          x: 12974102.993937358,\n          y: 4874629.4094777135,\n        },\n        {\n          x: 12974057.281876976,\n          y: 4874592.149864237,\n        },\n        {\n          x: 12974010.571259402,\n          y: 4874557.10058754,\n        },\n        {\n          x: 12973965.349593911,\n          y: 4874523.243715123,\n        },\n        {\n          x: 12973927.86306645,\n          y: 4874495.325444062,\n        },\n        {\n          x: 12973778.829987278,\n          y: 4874388.442810681,\n        },\n        {\n          x: 12973631.292726409,\n          y: 4874281.260318043,\n        },\n        {\n          x: 12973511.128084678,\n          y: 4874193.07702723,\n        },\n        {\n          x: 12973457.885669941,\n          y: 4874152.090015151,\n        },\n        {\n          x: 12973424.569167605,\n          y: 4874125.653511811,\n        },\n        {\n          x: 12973401.064728435,\n          y: 4874103.948181291,\n        },\n        {\n          x: 12973364.466450525,\n          y: 4874069.155318013,\n        },\n        {\n          x: 12973343.040548371,\n          y: 4874047.737895291,\n        },\n        {\n          x: 12973301.971003683,\n          y: 4874004.595285215,\n        },\n        {\n          x: 12973268.333740914,\n          y: 4873965.001992706,\n        },\n        {\n          x: 12973223.968151508,\n          y: 4873907.523655236,\n        },\n        {\n          x: 12973200.145078428,\n          y: 4873874.757068463,\n        },\n        {\n          x: 12973184.359140303,\n          y: 4873851.817254196,\n        },\n        {\n          x: 12973151.288220981,\n          y: 4873799.065100245,\n        },\n        {\n          x: 12973133.104508085,\n          y: 4873765.071843533,\n        },\n        {\n          x: 12973115.220516248,\n          y: 4873731.975402937,\n        },\n        {\n          x: 12973083.514099035,\n          y: 4873666.6145877475,\n        },\n        {\n          x: 12972958.272448545,\n          y: 4873409.226124313,\n        },\n        {\n          x: 12972918.910218379,\n          y: 4873326.610352403,\n        },\n        {\n          x: 12972826.476255693,\n          y: 4873134.840144364,\n        },\n        {\n          x: 12972795.763337882,\n          y: 4873070.719005933,\n        },\n        {\n          x: 12972744.76742065,\n          y: 4872959.163678453,\n        },\n        {\n          x: 12972720.60264992,\n          y: 4872901.886303345,\n        },\n        {\n          x: 12972659.997036628,\n          y: 4872735.667320859,\n        },\n        {\n          x: 12972643.299525585,\n          y: 4872699.580940345,\n        },\n        {\n          x: 12972559.100747146,\n          y: 4872455.805418115,\n        },\n        {\n          x: 12972532.783339068,\n          y: 4872369.677216135,\n        },\n        {\n          x: 12972491.590280673,\n          y: 4872256.099208747,\n        },\n        {\n          x: 12972431.316032,\n          y: 4872100.655541013,\n        },\n        {\n          x: 12972411.705557901,\n          y: 4872052.949093282,\n        },\n        {\n          x: 12972344.317184499,\n          y: 4871873.754390362,\n        },\n        {\n          x: 12972344.317084517,\n          y: 4871873.754090381,\n        },\n        {\n          x: 12972283.901539784,\n          y: 4871713.096747656,\n        },\n        {\n          x: 12972231.51025757,\n          y: 4871590.704161345,\n        },\n        {\n          x: 12972220.786418218,\n          y: 4871568.055674147,\n        },\n        {\n          x: 12972187.677583814,\n          y: 4871506.46596912,\n        },\n        {\n          x: 12972159.917606726,\n          y: 4871462.740223999,\n        },\n        {\n          x: 12972122.405523332,\n          y: 4871409.778587388,\n        },\n        {\n          x: 12972070.897276413,\n          y: 4871345.708445298,\n        },\n        {\n          x: 12972018.521820415,\n          y: 4871290.250138916,\n        },\n        {\n          x: 12971949.740475345,\n          y: 4871227.65827687,\n        },\n        {\n          x: 12971856.352377752,\n          y: 4871157.9745282065,\n        },\n        {\n          x: 12971744.543129945,\n          y: 4871096.1426233165,\n        },\n        {\n          x: 12971666.305498093,\n          y: 4871059.28347291,\n        },\n        {\n          x: 12971573.517186211,\n          y: 4871028.317100962,\n        },\n        {\n          x: 12971543.275268642,\n          y: 4871019.710796947,\n        },\n        {\n          x: 12970313.75580163,\n          y: 4871029.4038401535,\n        },\n        {\n          x: 12969743.624482477,\n          y: 4871013.157693107,\n        },\n        {\n          x: 12969526.746136123,\n          y: 4871006.97216711,\n        },\n        {\n          x: 12969268.713759044,\n          y: 4870954.619065353,\n        },\n        {\n          x: 12969027.21710455,\n          y: 4870806.293398591,\n        },\n        {\n          x: 12968695.732934553,\n          y: 4870386.919417365,\n        },\n        {\n          x: 12968267.842089783,\n          y: 4869845.614706303,\n        },\n        {\n          x: 12968041.977084596,\n          y: 4869507.853755934,\n        },\n        {\n          x: 12967897.801472468,\n          y: 4868972.889715916,\n        },\n        {\n          x: 12967878.337220326,\n          y: 4867594.394019558,\n        },\n        {\n          x: 12967868.77862341,\n          y: 4866238.919959571,\n        },\n        {\n          x: 12967801.717744218,\n          y: 4865970.777359848,\n        },\n        {\n          x: 12967494.283058798,\n          y: 4865925.768674796,\n        },\n        {\n          x: 12965837.973847104,\n          y: 4865743.023798019,\n        },\n        {\n          x: 12965348.196035301,\n          y: 4865688.751628207,\n        },\n        {\n          x: 12964443.21307059,\n          y: 4865516.203149938,\n        },\n      ],\n    },\n    {\n      id: \"16\",\n      source: \"32\",\n      target: \"33\",\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 0\",\n      controlPoints: [\n        {\n          x: 12981108.370146083,\n          y: 4871488.68313175,\n        },\n        {\n          x: 12981018.508214273,\n          y: 4871439.9092021575,\n        },\n        {\n          x: 12980902.535834748,\n          y: 4871405.203097882,\n        },\n        {\n          x: 12980821.525095403,\n          y: 4871396.07635756,\n        },\n        {\n          x: 12980751.756629316,\n          y: 4871395.085485736,\n        },\n        {\n          x: 12980685.769679295,\n          y: 4871406.921907764,\n        },\n        {\n          x: 12980609.835639,\n          y: 4871428.117243195,\n        },\n        {\n          x: 12980553.791983627,\n          y: 4871454.35924438,\n        },\n        {\n          x: 12980504.260708505,\n          y: 4871483.782440005,\n        },\n        {\n          x: 12980435.350114407,\n          y: 4871539.621344493,\n        },\n        {\n          x: 12980398.504969673,\n          y: 4871582.03131289,\n        },\n        {\n          x: 12980362.007896207,\n          y: 4871632.577822356,\n        },\n        {\n          x: 12980332.654508604,\n          y: 4871686.360369531,\n        },\n        {\n          x: 12980319.13294245,\n          y: 4871720.246401924,\n        },\n        {\n          x: 12980306.26908758,\n          y: 4871757.385237568,\n        },\n        {\n          x: 12980293.763164897,\n          y: 4871806.2405863255,\n        },\n        {\n          x: 12980277.698010115,\n          y: 4871929.260816189,\n        },\n        {\n          x: 12980261.290169481,\n          y: 4871965.0230897125,\n        },\n        {\n          x: 12980254.749320468,\n          y: 4871910.852033942,\n        },\n        {\n          x: 12980243.756181171,\n          y: 4871816.594568528,\n        },\n        {\n          x: 12980227.70573535,\n          y: 4871752.941176994,\n        },\n        {\n          x: 12980203.072226636,\n          y: 4871672.165283503,\n        },\n        {\n          x: 12980150.33990551,\n          y: 4871582.889266779,\n        },\n        {\n          x: 12980101.34029352,\n          y: 4871516.884384831,\n        },\n        {\n          x: 12980048.722460367,\n          y: 4871461.910039693,\n        },\n        {\n          x: 12979996.111785132,\n          y: 4871413.06501025,\n        },\n        {\n          x: 12979909.333892826,\n          y: 4871359.422428334,\n        },\n        {\n          x: 12979799.058829894,\n          y: 4871312.3731178045,\n        },\n        {\n          x: 12979720.936799372,\n          y: 4871295.456660487,\n        },\n        {\n          x: 12979624.500482768,\n          y: 4871274.924462654,\n        },\n        {\n          x: 12979479.39873571,\n          y: 4871277.213494264,\n        },\n        {\n          x: 12979085.453077132,\n          y: 4871280.917372964,\n        },\n        {\n          x: 12978992.156225236,\n          y: 4871279.384364794,\n        },\n        {\n          x: 12978956.177897697,\n          y: 4871277.666599098,\n        },\n        {\n          x: 12978900.674255166,\n          y: 4871271.113841657,\n        },\n        {\n          x: 12978860.293281717,\n          y: 4871262.702607095,\n        },\n        {\n          x: 12978764.752916442,\n          y: 4871245.472966051,\n        },\n        {\n          x: 12978664.480746558,\n          y: 4871226.718917767,\n        },\n        {\n          x: 12978629.714270562,\n          y: 4871220.650472208,\n        },\n        {\n          x: 12978620.414652059,\n          y: 4871219.068466421,\n        },\n        {\n          x: 12978564.580504624,\n          y: 4871213.590081386,\n        },\n        {\n          x: 12978460.737579372,\n          y: 4871195.649671084,\n        },\n        {\n          x: 12978328.733081415,\n          y: 4871172.822299577,\n        },\n        {\n          x: 12978213.58406164,\n          y: 4871153.546776074,\n        },\n        {\n          x: 12978126.884770632,\n          y: 4871139.996553964,\n        },\n        {\n          x: 12978030.808147773,\n          y: 4871127.039056859,\n        },\n        {\n          x: 12977949.096244726,\n          y: 4871117.637013953,\n        },\n        {\n          x: 12977857.7281794,\n          y: 4871107.719554274,\n        },\n        {\n          x: 12977818.256715368,\n          y: 4871103.431990254,\n        },\n        {\n          x: 12977782.926936783,\n          y: 4871099.961185381,\n        },\n        {\n          x: 12977738.76375114,\n          y: 4871094.860768784,\n        },\n        {\n          x: 12977699.015983863,\n          y: 4871089.466841593,\n        },\n        {\n          x: 12977670.034107389,\n          y: 4871085.695982234,\n        },\n        {\n          x: 12977617.58207723,\n          y: 4871075.083050405,\n        },\n        {\n          x: 12977586.096101644,\n          y: 4871069.051658005,\n        },\n        {\n          x: 12977553.816080883,\n          y: 4871065.107010753,\n        },\n        {\n          x: 12977547.258727068,\n          y: 4871063.901849335,\n        },\n        {\n          x: 12977530.618654177,\n          y: 4871060.843754747,\n        },\n        {\n          x: 12977510.63402144,\n          y: 4871057.271591576,\n        },\n        {\n          x: 12977488.410456756,\n          y: 4871052.304085646,\n        },\n        {\n          x: 12977476.108263735,\n          y: 4871049.825167599,\n        },\n        {\n          x: 12977449.974956136,\n          y: 4871043.750099359,\n        },\n        {\n          x: 12977426.211063186,\n          y: 4871036.9651420405,\n        },\n        {\n          x: 12977355.623273922,\n          y: 4871014.777517495,\n        },\n        {\n          x: 12977296.479809767,\n          y: 4870992.125603299,\n        },\n        {\n          x: 12977282.77631216,\n          y: 4870986.002440447,\n        },\n        {\n          x: 12977251.719621776,\n          y: 4870972.154493815,\n        },\n        {\n          x: 12977247.24550043,\n          y: 4870969.812148521,\n        },\n        {\n          x: 12977238.854476603,\n          y: 4870965.421079147,\n        },\n        {\n          x: 12977209.761773894,\n          y: 4870950.136411922,\n        },\n        {\n          x: 12977096.757856315,\n          y: 4870889.44525773,\n        },\n        {\n          x: 12976968.08990173,\n          y: 4870816.956775016,\n        },\n        {\n          x: 12976780.16768485,\n          y: 4870720.01310895,\n        },\n        {\n          x: 12976677.82368606,\n          y: 4870666.528023298,\n        },\n        {\n          x: 12976655.8764118,\n          y: 4870655.5205783425,\n        },\n        {\n          x: 12976529.223142704,\n          y: 4870592.317432991,\n        },\n        {\n          x: 12976428.586317737,\n          y: 4870542.427981049,\n        },\n        {\n          x: 12976366.5421185,\n          y: 4870518.407870099,\n        },\n        {\n          x: 12976329.380473636,\n          y: 4870506.354736436,\n        },\n        {\n          x: 12976271.82754423,\n          y: 4870490.321866817,\n        },\n        {\n          x: 12976228.111302977,\n          y: 4870481.388277324,\n        },\n        {\n          x: 12976188.09288433,\n          y: 4870478.038546045,\n        },\n        {\n          x: 12976149.436712662,\n          y: 4870471.373423314,\n        },\n        {\n          x: 12976071.072179394,\n          y: 4870465.607346994,\n        },\n        {\n          x: 12975965.86990555,\n          y: 4870455.646798379,\n        },\n        {\n          x: 12975917.917454332,\n          y: 4870449.027466127,\n        },\n        {\n          x: 12975868.894021038,\n          y: 4870442.773831003,\n        },\n        {\n          x: 12975820.580020344,\n          y: 4870433.638390911,\n        },\n        {\n          x: 12975790.158459982,\n          y: 4870426.94054179,\n        },\n        {\n          x: 12975775.838848663,\n          y: 4870422.328125062,\n        },\n        {\n          x: 12975751.13866662,\n          y: 4870414.524700168,\n        },\n        {\n          x: 12975725.00528259,\n          y: 4870405.648373743,\n        },\n        {\n          x: 12975714.620193584,\n          y: 4870400.657944233,\n        },\n        {\n          x: 12975694.938773984,\n          y: 4870397.150636553,\n        },\n        {\n          x: 12975674.888572035,\n          y: 4870388.966441453,\n        },\n        {\n          x: 12975636.937384691,\n          y: 4870373.667942694,\n        },\n        {\n          x: 12975612.227725828,\n          y: 4870361.187195985,\n        },\n        {\n          x: 12975582.510264473,\n          y: 4870348.370360326,\n        },\n        {\n          x: 12975500.513648823,\n          y: 4870309.887833572,\n        },\n        {\n          x: 12975383.793644667,\n          y: 4870256.097796813,\n        },\n        {\n          x: 12975133.184359929,\n          y: 4870136.739612404,\n        },\n        {\n          x: 12974949.40711058,\n          y: 4870050.794763821,\n        },\n        {\n          x: 12974941.365436705,\n          y: 4870047.009858454,\n        },\n        {\n          x: 12974724.15676446,\n          y: 4869944.777526178,\n        },\n        {\n          x: 12974559.111049827,\n          y: 4869868.410730108,\n        },\n        {\n          x: 12974550.453614099,\n          y: 4869864.520617537,\n        },\n        {\n          x: 12974441.55043712,\n          y: 4869814.212693192,\n        },\n        {\n          x: 12974270.106768792,\n          y: 4869734.071269941,\n        },\n        {\n          x: 12974091.838388277,\n          y: 4869651.027056911,\n        },\n        {\n          x: 12973885.444597295,\n          y: 4869555.245051317,\n        },\n        {\n          x: 12973766.248404168,\n          y: 4869500.831533556,\n        },\n        {\n          x: 12973540.981958374,\n          y: 4869392.930468844,\n        },\n        {\n          x: 12973391.381564768,\n          y: 4869323.244557277,\n        },\n        {\n          x: 12973283.232700225,\n          y: 4869272.859937838,\n        },\n        {\n          x: 12972573.852092165,\n          y: 4868943.251794805,\n        },\n        {\n          x: 12970368.479611576,\n          y: 4867801.281579257,\n        },\n        {\n          x: 12970186.368543653,\n          y: 4867581.247939134,\n        },\n        {\n          x: 12970138.160652429,\n          y: 4867522.999803067,\n        },\n        {\n          x: 12970014.83652081,\n          y: 4867376.428914912,\n        },\n        {\n          x: 12969982.687756885,\n          y: 4867339.028822399,\n        },\n        {\n          x: 12969938.176704682,\n          y: 4867288.1582316635,\n        },\n        {\n          x: 12969884.318320546,\n          y: 4867223.8002079725,\n        },\n        {\n          x: 12969842.279029265,\n          y: 4867174.850547206,\n        },\n        {\n          x: 12969736.51761531,\n          y: 4867052.928304552,\n        },\n        {\n          x: 12969715.618553909,\n          y: 4867028.835423228,\n        },\n        {\n          x: 12969620.004793288,\n          y: 4866917.186788599,\n        },\n        {\n          x: 12969438.04374979,\n          y: 4866711.844669058,\n        },\n        {\n          x: 12969408.156057132,\n          y: 4866677.285747163,\n        },\n        {\n          x: 12969324.820910655,\n          y: 4866578.791680055,\n        },\n        {\n          x: 12969226.67533753,\n          y: 4866469.379122947,\n        },\n        {\n          x: 12968956.364812195,\n          y: 4866149.976631404,\n        },\n        {\n          x: 12968801.20089387,\n          y: 4865953.939934027,\n        },\n        {\n          x: 12968661.628187554,\n          y: 4865774.016041136,\n        },\n        {\n          x: 12968440.203180425,\n          y: 4865520.086029257,\n        },\n        {\n          x: 12968418.752663735,\n          y: 4865496.720383862,\n        },\n        {\n          x: 12968265.16366474,\n          y: 4865329.4158122465,\n        },\n        {\n          x: 12968082.376416814,\n          y: 4865118.794538391,\n        },\n        {\n          x: 12967977.74367467,\n          y: 4865003.326373822,\n        },\n        {\n          x: 12967875.580874648,\n          y: 4864890.602510729,\n        },\n        {\n          x: 12967828.859212246,\n          y: 4864840.529032915,\n        },\n        {\n          x: 12967771.529788392,\n          y: 4864773.642307851,\n        },\n        {\n          x: 12967754.0789727,\n          y: 4864752.1729925005,\n        },\n        {\n          x: 12967615.98897636,\n          y: 4864590.439552254,\n        },\n        {\n          x: 12967559.654778784,\n          y: 4864523.543494982,\n        },\n        {\n          x: 12967512.793535465,\n          y: 4864468.1316355625,\n        },\n        {\n          x: 12967489.97373297,\n          y: 4864440.960919648,\n        },\n        {\n          x: 12967391.600998314,\n          y: 4864324.055311191,\n        },\n        {\n          x: 12967258.997379664,\n          y: 4864167.803726059,\n        },\n        {\n          x: 12967157.800077152,\n          y: 4864048.489056851,\n        },\n        {\n          x: 12967072.064892631,\n          y: 4863952.160647396,\n        },\n        {\n          x: 12966932.938263306,\n          y: 4863786.109663975,\n        },\n        {\n          x: 12966772.422852328,\n          y: 4863597.399173657,\n        },\n        {\n          x: 12966615.568496268,\n          y: 4863412.808523439,\n        },\n        {\n          x: 12966305.336633127,\n          y: 4863047.703772259,\n        },\n        {\n          x: 12966269.190687215,\n          y: 4863001.279273752,\n        },\n        {\n          x: 12965833.711641828,\n          y: 4862475.155696717,\n        },\n        {\n          x: 12965806.851898653,\n          y: 4862442.704151941,\n        },\n        {\n          x: 12964858.528949967,\n          y: 4861327.4237803,\n        },\n        {\n          x: 12964224.475284964,\n          y: 4860561.038983111,\n        },\n        {\n          x: 12963811.623681322,\n          y: 4860051.71716615,\n        },\n        {\n          x: 12963154.244359475,\n          y: 4859240.959120094,\n        },\n        {\n          x: 12962659.851017611,\n          y: 4858630.950164011,\n        },\n        {\n          x: 12962035.08051321,\n          y: 4857953.39954861,\n        },\n        {\n          x: 12961929.533509394,\n          y: 4857864.163282811,\n        },\n        {\n          x: 12961663.821656032,\n          y: 4857639.499910775,\n        },\n        {\n          x: 12961465.562880669,\n          y: 4857485.1627320545,\n        },\n        {\n          x: 12961385.775293019,\n          y: 4857425.3359782435,\n        },\n      ],\n    },\n  ],\n};\nconst colors = [\n  \"rgb(64, 174, 247)\",\n  \"rgb(108, 207, 169)\",\n  \"rgb(157, 223, 125)\",\n  \"rgb(240, 198, 74)\",\n  \"rgb(221, 158, 97)\",\n  \"rgb(141, 163, 112)\",\n  \"rgb(115, 136, 220)\",\n  \"rgb(133, 88, 219)\",\n  \"rgb(203, 135, 226)\",\n  \"rgb(227, 137, 163)\",\n];\nconst { nodes } = data;\nconst { edges } = data;\nconst classMap = new Map();\nlet classId = 0;\nnodes.forEach((node) => {\n  node.y = -node.y;\n});\nedges.forEach((edge) => {\n  edge.id = `edge-${edge.id}`;\n  // edge cluster\n  if (edge.class && classMap.get(edge.class) === undefined) {\n    classMap.set(edge.class, classId);\n    classId++;\n  }\n  const cid = classMap.get(edge.class);\n  edge.color = colors[cid % colors.length];\n  const { controlPoints } = edge;\n\n  controlPoints.forEach((cp) => {\n    cp.y = -cp.y;\n  });\n});\n\nexport { nodes, edges, data };\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/metro-lines/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport { nodes, edges, data } from \"./data\";\n/**\n * metro-lines\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    wx.setBackgroundColor({\n      backgroundColorTop: \"#000000\",\n      backgroundColorBottom: \"#000000\",\n    });\n    // custom the node\n    F6.registerNode(\n      \"breath-node\",\n      {\n        afterDraw(cfg, group) {\n          const r = cfg.size / 2;\n          const back1 = group.addShape(\"circle\", {\n            zIndex: -3,\n            attrs: {\n              x: 0,\n              y: 0,\n              r,\n              fill: cfg.color || (cfg.style && cfg.style.fill),\n              opacity: 0.6,\n            },\n            name: \"back1-shape\",\n          });\n          const back2 = group.addShape(\"circle\", {\n            zIndex: -2,\n            attrs: {\n              x: 0,\n              y: 0,\n              r,\n              fill: cfg.color,\n              // 为了显示清晰，随意设置了颜色\n              opacity: 0.6,\n            },\n            name: \"back2-shape\",\n          });\n          const back3 = group.addShape(\"circle\", {\n            zIndex: -1,\n            attrs: {\n              x: 0,\n              y: 0,\n              r,\n              fill: cfg.color,\n              opacity: 0.6,\n            },\n            name: \"back3-shape\",\n          });\n          group.sort(); // 排序，根据zIndex 排序\n          const delayBase = Math.random() * 2000;\n          back1.animate(\n            {\n              // 逐渐放大，并消失\n              r: r + 10,\n              opacity: 0.0,\n            },\n            {\n              repeat: true, // 循环\n              duration: 3000,\n              easing: \"easeCubic\",\n              delay: delayBase, // 无延迟\n            },\n          );\n          back2.animate(\n            {\n              // 逐渐放大，并消失\n              r: r + 10,\n              opacity: 0.0,\n            },\n            {\n              repeat: true, // 循环\n              duration: 3000,\n              easing: \"easeCubic\",\n              delay: delayBase + 1000, // 1 秒延迟\n            },\n          );\n          back3.animate(\n            {\n              // 逐渐放大，并消失\n              r: r + 10,\n              opacity: 0.0,\n            },\n            {\n              repeat: true, // 循环\n              duration: 3000,\n              easing: \"easeCubic\",\n              delay: delayBase + 2000, // 2 秒延迟\n            },\n          );\n        },\n      },\n      \"circle\",\n    );\n\n    // custom the edge\n    F6.registerEdge(\n      \"running-polyline\",\n      {\n        afterDraw(cfg, group) {\n          const shape = group.get(\"children\")[0];\n          const length = shape.getTotalLength();\n          let circleCount = Math.ceil(length / 20);\n          circleCount = circleCount === 0 ? 1 : circleCount;\n\n          const _loop = function _loop(i) {\n            const delay = Math.random() * 1000;\n            const start = shape.getPoint(i / circleCount);\n            const circle = group.addShape(\"circle\", {\n              attrs: {\n                x: start.x,\n                y: start.y,\n                r: 0.8,\n                fill: \"#A0F3AF\",\n                shadowColor: \"#fff\",\n                shadowBlur: 30,\n              },\n              name: \"circle-shape\",\n            });\n            circle.animate(\n              (ratio) => {\n                ratio += i / circleCount;\n                if (ratio > 1) {\n                  ratio %= 1;\n                }\n                const tmpPoint = shape.getPoint(ratio);\n                return {\n                  x: tmpPoint.x,\n                  y: tmpPoint.y,\n                };\n              },\n              {\n                repeat: true,\n                duration: 10 * length,\n                easing: \"easeCubic\",\n                delay,\n              },\n            );\n          };\n\n          for (let i = 0; i < circleCount; i++) {\n            _loop(i);\n          }\n        },\n      },\n      \"polyline\",\n    );\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    function scaleNodesPoints(nodes_, edges_, graphSize) {\n      const size = graphSize[0] < graphSize[1] ? graphSize[0] : graphSize[1];\n      let minX = 99999999999999999;\n      let maxX = -99999999999999999;\n      let minY = 99999999999999999;\n      let maxY = -99999999999999999;\n      nodes_.forEach((node) => {\n        if (node.x > maxX) maxX = node.x;\n        if (node.x < minX) minX = node.x;\n        if (node.y > maxY) maxY = node.y;\n        if (node.y < minY) minY = node.y;\n      });\n\n      edges_.forEach((edge) => {\n        const { controlPoints } = edge;\n        controlPoints.forEach((cp) => {\n          if (cp.x > maxX) maxX = cp.x;\n          if (cp.x < minX) minX = cp.x;\n          if (cp.y > maxY) maxY = cp.y;\n          if (cp.y < minY) minY = cp.y;\n        });\n      });\n\n      const xScale = maxX - minX;\n      const yScale = maxY - minY;\n      nodes_.forEach((node) => {\n        node.orix = node.x;\n        node.oriy = node.y;\n        node.x = ((node.x - minX) / xScale) * size;\n        node.y = ((node.y - minY) / yScale) * size;\n      });\n      edges_.forEach((edge) => {\n        const { controlPoints } = edge;\n        controlPoints.forEach((cp) => {\n          cp.x = ((cp.x - minX) / xScale) * size;\n          cp.y = ((cp.y - minY) / yScale) * size;\n        });\n      });\n    }\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      linkCenter: true,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"edge-tooltip\",\n            formatText: function formatText(model) {\n              const text = model.class;\n              return text;\n            },\n          },\n        ],\n      },\n      defaultNode: {\n        type: \"breath-node\",\n        size: 3,\n        style: {\n          lineWidth: 0,\n          fill: \"rgb(240, 223, 83)\",\n        },\n      },\n      defaultEdge: {\n        type: \"running-polyline\",\n        size: 1,\n        color: \"rgb(14,142,63)\",\n        style: {\n          opacity: 0.4,\n          lineAppendWidth: 3,\n        },\n      },\n    });\n    const graphSize = [500, 500];\n    scaleNodesPoints(nodes, edges, graphSize);\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/metro-lines/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"地铁路线图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/metro-lines/index.wxml",
    "content": "<view style=\"background: url(https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*G23iRqkiibIAAAAAAAAAAABkARQnAQ) no-repeat center/100% auto;\">\n  <f6-canvas\n    width=\"{{width}}\"\n    height=\"{{height}}\"\n    forceMini=\"{{forceMini}}\"\n    pixelRatio=\"{{pixelRatio}}\"\n    bind:onTouchEvent=\"handleTouch\"\n    bind:onInit=\"handleInit\"\n  ></f6-canvas>\n</view>\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/metro-lines/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/mind-map/data.js",
    "content": "const rawData = {\n  label: \"Modeling Methods\",\n  id: \"0\",\n  children: [\n    {\n      label: \"Classification\",\n      id: \"0-1\",\n      color: \"#5AD8A6\",\n      children: [\n        {\n          label: \"Logistic regression\",\n          id: \"0-1-1\",\n        },\n        {\n          label: \"Linear discriminant analysis\",\n          id: \"0-1-2\",\n        },\n        {\n          label: \"Rules\",\n          id: \"0-1-3\",\n        },\n        {\n          label: \"Decision trees\",\n          id: \"0-1-4\",\n        },\n        {\n          label: \"Naive Bayes\",\n          id: \"0-1-5\",\n        },\n        {\n          label: \"K nearest neighbor\",\n          id: \"0-1-6\",\n        },\n        {\n          label: \"Probabilistic neural network\",\n          id: \"0-1-7\",\n        },\n        {\n          label: \"Support vector machine\",\n          id: \"0-1-8\",\n        },\n      ],\n    },\n    {\n      label: \"Consensus\",\n      id: \"0-2\",\n      color: \"#F6BD16\",\n      children: [\n        {\n          label: \"Models diversity\",\n          id: \"0-2-1\",\n          children: [\n            {\n              label: \"Different initializations\",\n              id: \"0-2-1-1\",\n            },\n            {\n              label: \"Different parameter choices\",\n              id: \"0-2-1-2\",\n            },\n            {\n              label: \"Different architectures\",\n              id: \"0-2-1-3\",\n            },\n            {\n              label: \"Different modeling methods\",\n              id: \"0-2-1-4\",\n            },\n            {\n              label: \"Different training sets\",\n              id: \"0-2-1-5\",\n            },\n            {\n              label: \"Different feature sets\",\n              id: \"0-2-1-6\",\n            },\n          ],\n        },\n        {\n          label: \"Methods\",\n          id: \"0-2-2\",\n          children: [\n            {\n              label: \"Classifier selection\",\n              id: \"0-2-2-1\",\n            },\n            {\n              label: \"Classifier fusion\",\n              id: \"0-2-2-2\",\n            },\n          ],\n        },\n        {\n          label: \"Common\",\n          id: \"0-2-3\",\n          children: [\n            {\n              label: \"Bagging\",\n              id: \"0-2-3-1\",\n            },\n            {\n              label: \"Boosting\",\n              id: \"0-2-3-2\",\n            },\n            {\n              label: \"AdaBoost\",\n              id: \"0-2-3-3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      label: \"Regression\",\n      id: \"0-3\",\n      color: \"#269A99\",\n      children: [\n        {\n          label: \"Multiple linear regression\",\n          id: \"0-3-1\",\n        },\n        {\n          label: \"Partial least squares\",\n          id: \"0-3-2\",\n        },\n        {\n          label: \"Multi-layer feedforward neural network\",\n          id: \"0-3-3\",\n        },\n        {\n          label: \"General regression neural network\",\n          id: \"0-3-4\",\n        },\n        {\n          label: \"Support vector regression\",\n          id: \"0-3-5\",\n        },\n      ],\n    },\n  ],\n};\n\nconst dataTransform = (data_) => {\n  const changeData = (d, level = 0, color) => {\n    const data = {\n      ...d,\n    };\n    switch (level) {\n      case 0:\n        data.type = \"dice-mind-map-root\";\n        break;\n      case 1:\n        data.type = \"dice-mind-map-sub\";\n        break;\n      default:\n        data.type = \"dice-mind-map-leaf\";\n        break;\n    }\n\n    data.hover = false;\n\n    if (color) {\n      data.color = color;\n    }\n\n    if (level === 1 && !d.direction) {\n      if (!d.direction) {\n        data.direction =\n          d.id.charCodeAt(d.id.length - 1) % 2 === 0 ? \"right\" : \"left\";\n      }\n    }\n\n    if (d.children) {\n      data.children = d.children.map((child) =>\n        changeData(child, level + 1, data.color),\n      );\n    }\n    return data;\n  };\n  return changeData(data_);\n};\n\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/mind-map/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport result from \"./data\";\n\n/**\n * mind-map\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    const { Util } = F6;\n    // const colorArr = [\n    //   '#5B8FF9',\n    //   '#5AD8A6',\n    //   '#5D7092',\n    //   '#F6BD16',\n    //   '#6F5EF9',\n    //   '#6DC8EC',\n    //   '#D3EEF9',\n    //   '#DECFEA',\n    //   '#FFE0C7',\n    //   '#1E9493',\n    //   '#BBDEDE',\n    //   '#FF99C3',\n    //   '#FFE0ED',\n    //   '#CDDDFD',\n    //   '#CDF3E4',\n    //   '#CED4DE',\n    //   '#FCEBB9',\n    //   '#D3CEFD',\n    //   '#945FB9',\n    //   '#FF9845',\n    // ];\n\n    F6.registerNode(\n      \"dice-mind-map-root\",\n      {\n        jsx: (cfg) => {\n          const width = Util.getTextSize(cfg.label, 16)[0] + 24;\n          const stroke = cfg.style.stroke || \"#096dd9\";\n\n          return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${width}, height: 42, stroke: ${stroke}, radius: 4}} keyshape>\n              <text style={{ fontSize: 16, marginLeft: 12, marginTop: 12 }}>${\n                cfg.label\n              }</text>\n              <text style={{ marginLeft: ${\n                width - 16\n              }, marginTop: -20, stroke: '#66ccff', fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              } }} action=\"add\">+</text>\n            </rect>\n          </group>\n        `;\n        },\n        getAnchorPoints() {\n          return [\n            [0, 0.5],\n            [1, 0.5],\n          ];\n        },\n      },\n      \"single-node\",\n    );\n    F6.registerNode(\n      \"dice-mind-map-sub\",\n      {\n        jsx: (cfg) => {\n          const width = Util.getTextSize(cfg.label, 14)[0] + 24;\n          const color = cfg.color || cfg.style.stroke;\n\n          return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${\n              width + 24\n            }, height: 22}} keyshape>\n              <text draggable=\"true\" style={{ fontSize: 14, marginLeft: 12, marginTop: 6 }}>${\n                cfg.label\n              }</text>\n              <text style={{ marginLeft: ${\n                width - 8\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"add\">+</text>\n              <text style={{ marginLeft: ${\n                width - 4\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"delete\">-</text>\n            </rect>\n            <rect style={{ fill: ${color}, width: ${\n              width + 24\n            }, height: 2, x: 0, y: 22 }} />\n            \n          </group>\n        `;\n        },\n        getAnchorPoints() {\n          return [\n            [0, 0.965],\n            [1, 0.965],\n          ];\n        },\n      },\n      \"single-node\",\n    );\n    F6.registerNode(\n      \"dice-mind-map-leaf\",\n      {\n        jsx: (cfg) => {\n          const width = Util.getTextSize(cfg.label, 12)[0] + 24;\n          const color = cfg.color || cfg.style.stroke;\n\n          return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${\n              width + 20\n            }, height: 26, fill: 'transparent' }}>\n              <text style={{ fontSize: 12, marginLeft: 12, marginTop: 6 }}>${\n                cfg.label\n              }</text>\n                  <text style={{ marginLeft: ${\n                    width - 8\n                  }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                    cfg.hover ? 0.75 : 0\n                  }, next: 'inline' }} action=\"add\">+</text>\n                  <text style={{ marginLeft: ${\n                    width - 4\n                  }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                    cfg.hover ? 0.75 : 0\n                  }, next: 'inline' }} action=\"delete\">-</text>\n            </rect>\n            <rect style={{ fill: ${color}, width: ${\n              width + 24\n            }, height: 2, x: 0, y: 32 }} />\n            \n          </group>\n        `;\n        },\n        getAnchorPoints() {\n          return [\n            [0, 0.965],\n            [1, 0.965],\n          ];\n        },\n      },\n      \"single-node\",\n    );\n    F6.registerBehavior(\"dice-mindmap\", {\n      getEvents() {\n        return {\n          \"node:click\": \"clickNode\",\n          \"node:dblclick\": \"editNode\",\n          \"node:mouseenter\": \"hoverNode\",\n          \"node:mouseleave\": \"hoverNodeOut\",\n        };\n      },\n\n      clickNode(evt) {\n        // const model = evt.item.get('model');\n        const name = evt.target.get(\"action\");\n        switch (name) {\n          // TODO:这里没办法过语法检查\n          // case 'add':\n          //   const newId = `${model.id}-${\n          //     ((model.children || []).reduce((a, b) => {\n          //       const num = Number(b.id.split('-').pop());\n          //       return a < num ? num : a;\n          //     }, 0) || 0) + 1\n          //   }`;\n          //   evt.currentTarget.updateItem(evt.item, {\n          //     children: (model.children || []).concat([\n          //       {\n          //         id: newId,\n          //         direction: newId.charCodeAt(newId.length - 1) % 2 === 0 ? 'right' : 'left',\n          //         label: 'New',\n          //         type: 'dice-mind-map-leaf',\n          //         color: model.color || colorArr[Math.floor(Math.random() * colorArr.length)],\n          //       },\n          //     ]),\n          //   });\n          //   evt.currentTarget.layout(false);\n          //   break;\n          // case 'delete':\n          //   const parent = evt.item.get('parent');\n          //   evt.currentTarget.updateItem(parent, {\n          //     children: (parent.get('model').children || []).filter((e) => e.id !== model.id),\n          //   });\n          //   evt.currentTarget.layout(false);\n          //   break;\n          case \"edit\":\n            break;\n          default:\n        }\n      },\n      editNode(evt) {\n        const { item } = evt;\n        const model = item.get(\"model\");\n        const { x, y } = item.calculateBBox();\n        const graph = evt.currentTarget;\n        const realPosition = evt.currentTarget.getClientByPoint(x, y);\n        const el = document.createElement(\"div\");\n        const fontSizeMap = {\n          \"dice-mind-map-root\": 24,\n          \"dice-mind-map-sub\": 18,\n          \"dice-mind-map-leaf\": 16,\n        };\n        el.style.fontSize = `${fontSizeMap[model.type]}px`;\n        el.style.position = \"fixed\";\n        el.style.top = `${realPosition.y}px`;\n        el.style.left = `${realPosition.x}px`;\n        el.style.paddingLeft = \"12px\";\n        el.style.transformOrigin = \"top left\";\n        el.style.transform = `scale(${evt.currentTarget.getZoom()})`;\n        const input = document.createElement(\"input\");\n        input.style.border = \"none\";\n        input.value = model.label;\n        input.style.width = `${\n          Util.getTextSize(model.label, fontSizeMap[model.type])[0]\n        }px`;\n        input.className = \"dice-input\";\n        el.className = \"dice-input\";\n        el.appendChild(input);\n        document.body.appendChild(el);\n        const destroyEl = () => {\n          document.body.removeChild(el);\n        };\n        const clickEvt = (event) => {\n          if (\n            !(\n              event.target &&\n              event.target.className &&\n              event.target.className.includes(\"dice-input\")\n            )\n          ) {\n            window.removeEventListener(\"mousedown\", clickEvt);\n            window.removeEventListener(\"scroll\", clickEvt);\n            graph.updateItem(item, {\n              label: input.value,\n            });\n            graph.layout(false);\n            graph.off(\"wheelZoom\", clickEvt);\n            destroyEl();\n          }\n        };\n        graph.on(\"wheelZoom\", clickEvt);\n        window.addEventListener(\"mousedown\", clickEvt);\n        window.addEventListener(\"scroll\", clickEvt);\n        input.addEventListener(\"keyup\", (event) => {\n          if (event.key === \"Enter\") {\n            clickEvt({\n              target: {},\n            });\n          }\n        });\n      },\n      hoverNode(evt) {\n        evt.currentTarget.updateItem(evt.item, {\n          hover: true,\n        });\n      },\n      hoverNodeOut(evt) {\n        evt.currentTarget.updateItem(evt.item, {\n          hover: false,\n        });\n      },\n    });\n    F6.registerBehavior(\"scroll-canvas\", {\n      getEvents: function getEvents() {\n        return {\n          wheel: \"onWheel\",\n        };\n      },\n\n      onWheel: function onWheel(ev) {\n        const { graph } = this;\n        if (!graph) {\n          return;\n        }\n        if (ev.ctrlKey) {\n          const canvas = graph.get(\"canvas\");\n          const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n          let ratio = graph.getZoom();\n          if (ev.wheelDelta > 0) {\n            ratio += ratio * 0.05;\n          } else {\n            ratio *= ratio * 0.05;\n          }\n          graph.zoomTo(ratio, {\n            x: point.x,\n            y: point.y,\n          });\n        } else {\n          const x = ev.deltaX || ev.movementX;\n          const y = ev.deltaY || ev.movementY || (-ev.wheelDelta * 125) / 3;\n          graph.translate(-x, -y);\n        }\n        ev.preventDefault();\n      },\n    });\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      fitViewPadding: [10, 20],\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: (node) => {\n          return node.level === 0\n            ? F6.Util.getTextSize(node.label, 16)[0] + 12\n            : F6.Util.getTextSize(node.label, 12)[0];\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 60;\n        },\n        getSide: (node) => {\n          return node.data.direction;\n        },\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          lineWidth: 2,\n        },\n      },\n      minZoom: 0.5,\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"dice-mindmap\"],\n      },\n    });\n\n    this.graph.data(result);\n    this.graph.render();\n    // this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/mind-map/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"思维导图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/mind-map/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/mind-map/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/sankey/data.js",
    "content": "const colorArr = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#6F5EF9\",\n  \"#6DC8EC\",\n  \"#D3EEF9\",\n  \"#DECFEA\",\n  \"#FFE0C7\",\n  \"#1E9493\",\n  \"#BBDEDE\",\n  \"#FF99C3\",\n  \"#FFE0ED\",\n  \"#CDDDFD\",\n  \"#CDF3E4\",\n  \"#CED4DE\",\n  \"#FCEBB9\",\n  \"#D3CEFD\",\n  \"#945FB9\",\n  \"#FF9845\",\n];\n\nconst rawData = [\n  {\n    label: \"A\",\n    id: \"A\",\n    to: [\n      {\n        target: \"C\",\n        value: 200,\n      },\n    ],\n  },\n  {\n    label: \"B\",\n    id: \"B\",\n    to: [\n      {\n        target: \"C\",\n        value: 400,\n      },\n    ],\n  },\n  {\n    label: \"C\",\n    id: \"C\",\n    to: [\n      {\n        target: \"D\",\n        value: 300,\n      },\n      {\n        target: \"E\",\n        value: 300,\n      },\n    ],\n  },\n  {\n    label: \"D\",\n    id: \"D\",\n    to: [\n      {\n        target: \"F\",\n        value: 100,\n      },\n      {\n        target: \"G\",\n        value: 200,\n      },\n    ],\n  },\n  {\n    label: \"E\",\n    id: \"E\",\n    to: [\n      {\n        target: \"F\",\n        value: 200,\n      },\n      {\n        target: \"G\",\n        value: 100,\n      },\n    ],\n  },\n  {\n    label: \"F\",\n    id: \"F\",\n  },\n  {\n    label: \"G\",\n    id: \"G\",\n  },\n];\n\nconst dataTransform = (data) => {\n  const nodes = [];\n  const edges = [];\n  const nodeRecvMap = {};\n\n  data.forEach((node, i) => {\n    const { id, label, color = colorArr[i % colorArr.length], to = [] } = node;\n\n    let index = 0;\n    to.forEach((rel) => {\n      edges.push({\n        source: id,\n        target: rel.target,\n        value: rel.value,\n        color,\n        sourceIndex: index,\n        targetIndex: nodeRecvMap[rel.target] || 0,\n      });\n      index += rel.value || 0;\n      if (rel.value) {\n        nodeRecvMap[rel.target] = (nodeRecvMap[rel.target] || 0) + rel.value;\n      }\n    });\n    nodes.push({\n      id,\n      label,\n      color,\n      outSize: index,\n    });\n  });\n\n  nodes.forEach((node) => {\n    node.inSize = nodeRecvMap[node.id] || 0;\n    node.size = [4, Math.max(4, node.inSize, node.outSize)];\n  });\n\n  return {\n    nodes,\n    edges,\n  };\n};\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/sankey/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\n\nimport result from \"./data\";\nimport dagreLayout from \"@antv/f6-wx/extends/layout/dagreLayout\";\n\n/**\n * sankey\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"dagre\", dagreLayout);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    F6.registerNode(\n      \"dice-sankey-node\",\n      {\n        jsx: (cfg) => `\n        <group>\n          <rect style={{ width: ${cfg.size[0]}, height: ${cfg.size[1]}, fill: ${cfg.color} }} />\n          <text style={{ marginLeft: 6, marginTop: 24,  fill: #333, stroke: ${cfg.color}, lineWidth: 2, fontSize: 24 }}>${cfg.label} ${cfg.size[1]}</text>\n        </group>\n      `,\n        getAnchorPoints() {\n          return [[0, 0]];\n        },\n      },\n      \"single-node\",\n    );\n\n    F6.registerEdge(\"dice-sankey-edge\", {\n      draw(cfg, group) {\n        const { startPoint, endPoint, color } = cfg;\n        const deltaY1 = Number(cfg.sourceIndex);\n        const deltaY2 = Number(cfg.sourceIndex) + Number(cfg.value);\n        const deltaY3 = Number(cfg.targetIndex);\n        const deltaY4 = Number(cfg.targetIndex) + Number(cfg.value);\n        const quaterX = (Math.abs(endPoint.x - startPoint.x) / 5) * 3;\n        return group.addShape(\"path\", {\n          attrs: {\n            fill: color,\n            opacity: 0.6,\n            path: [\n              [\"M\", startPoint.x, startPoint.y + deltaY1],\n              [\n                \"C\",\n                endPoint.x - quaterX,\n                startPoint.y + deltaY1,\n                startPoint.x + quaterX,\n                endPoint.y + deltaY3,\n                endPoint.x,\n                endPoint.y + deltaY3,\n              ],\n              [\"L\", endPoint.x, endPoint.y + deltaY4],\n              [\n                \"C\",\n                startPoint.x + quaterX,\n                endPoint.y + deltaY4,\n                endPoint.x - quaterX,\n                startPoint.y + deltaY2,\n                startPoint.x,\n                startPoint.y + deltaY2,\n              ],\n              [\"L\", startPoint.x, startPoint.y + deltaY1],\n              [\"Z\"],\n            ],\n          },\n        });\n      },\n    });\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      defaultNode: {\n        type: \"dice-sankey-node\",\n      },\n      defaultEdge: {\n        type: \"dice-sankey-edge\",\n      },\n      fitView: true,\n      fitViewPadding: 60,\n      layout: {\n        type: \"dagre\",\n        rankdir: \"LR\",\n        nodesep: 10,\n        ranksep: 130,\n        align: \"ul\",\n      },\n    });\n\n    this.graph.data(result);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/sankey/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"桑基图\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/sankey/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>\n"
  },
  {
    "path": "packages/examples-wx/package-scene-case/pages/scene-case/sankey/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n\n.f6-canvas {\n  z-index: 10;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/basic-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/basic-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 生态树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"dendrogram\",\n        direction: \"LR\",\n        nodeSep: 30,\n        rankSep: 100,\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node((node) => {\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 5,\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/basic-dendrogram/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"生态树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/basic-dendrogram/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/basic-dendrogram/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box/index.js",
    "content": "// TreeGraph/file-system/index.js\nimport F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data.js\";\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 2,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    this.graph.node((node) => {\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 10,\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"紧凑树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box-left-align/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box-left-align/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data.js\";\n\n/**\n * 节点左右对齐的紧凑树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const fontSize = 15;\n    F6.registerNode(\"crect\", {\n      draw: (cfg, group) => {\n        const width = cfg.id.length * 10;\n        const rect = group.addShape(\"rect\", {\n          attrs: {\n            x: 0,\n            y: -10,\n            ...cfg.style,\n            width,\n            height: 20,\n            lineWidth: 0,\n            opacity: 0,\n          },\n          name: \"rect-shape\",\n          draggable: true,\n        });\n        const label = group.addShape(\"text\", {\n          attrs: {\n            text: cfg.id,\n            fill: \"#ccc\",\n            fontSize,\n            x: 0,\n            y: 0,\n          },\n          name: \"label-shape\",\n          draggable: true,\n        });\n        const bboxWidth = label.getBBox().width + 20;\n        rect.attr({ width: bboxWidth });\n\n        group.addShape(\"path\", {\n          attrs: {\n            lineWidth: 1,\n            fill: \"#ccc\",\n            stroke: \"#ccc\",\n            path: [\n              [\"M\", 0, 0],\n              [\"L\", bboxWidth, 0],\n            ],\n          },\n          name: \"path-shape\",\n          draggable: true,\n        });\n\n        return rect;\n      },\n      getAnchorPoints: () => {\n        return [\n          [0, 0.5],\n          [1, 0.5],\n        ];\n      },\n    });\n\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"collapse-expand\", \"drag-canvas\", \"zoom-canvas\"],\n      },\n      defaultNode: {\n        type: \"crect\",\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n        getWidth: function getWidth(d) {\n          return F6.Util.getTextSize(d.id, fontSize)[0] + 20;\n        },\n      },\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box-left-align/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"节点左右对齐的紧凑树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box-left-align/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/compact-box-left-align/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-edge-tree/data.js",
    "content": "export default {\n  id: \"root\",\n  label: \"root\",\n  children: [\n    {\n      id: \"c1\",\n      label: \"c1\",\n      children: [\n        {\n          id: \"c1-1\",\n          label: \"c1-1\",\n        },\n        {\n          id: \"c1-2\",\n          label: \"c1-2\",\n          children: [\n            {\n              id: \"c1-2-1\",\n              label: \"c1-2-1\",\n            },\n            {\n              id: \"c1-2-2\",\n              label: \"c1-2-2\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"c2\",\n      label: \"c2\",\n    },\n    {\n      id: \"c3\",\n      label: \"c3\",\n      children: [\n        {\n          id: \"c3-1\",\n          label: \"c3-1\",\n        },\n        {\n          id: \"c3-2\",\n          label: \"c3-2\",\n          children: [\n            {\n              id: \"c3-2-1\",\n              label: \"c3-2-1\",\n            },\n            {\n              id: \"c3-2-2\",\n              label: \"c3-2-2\",\n            },\n            {\n              id: \"c3-2-3\",\n              label: \"c3-2-3\",\n            },\n          ],\n        },\n        {\n          id: \"c3-3\",\n          label: \"c3-3\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-edge-tree/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 自定义图中的边\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    const COLLAPSE_ICON = function COLLAPSE_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y - r],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x + 2 - r, y - r],\n        [\"L\", x + r - 2, y - r],\n      ];\n    };\n    const EXPAND_ICON = function EXPAND_ICON(x, y, r) {\n      return [\n        [\"M\", x - r, y - r],\n        [\"a\", r, r, 0, 1, 0, r * 2, 0],\n        [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n        [\"M\", x + 2 - r, y - r],\n        [\"L\", x + r - 2, y - r],\n        [\"M\", x, y - 2 * r + 2],\n        [\"L\", x, y - 2],\n      ];\n    };\n\n    F6.Util.traverseTree(data, (d) => {\n      d.leftIcon = {\n        style: {\n          fill: \"#e6fffb\",\n          stroke: \"#e6fffb\",\n        },\n        img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\",\n      };\n      return true;\n    });\n\n    F6.registerNode(\n      \"icon-node\",\n      {\n        options: {\n          size: [60, 20],\n          stroke: \"#91d5ff\",\n          fill: \"#91d5ff\",\n        },\n        draw(cfg, group) {\n          const styles = this.getShapeStyle(cfg);\n          const { labelCfg = {} } = cfg;\n\n          const w = styles.width;\n          const h = styles.height;\n\n          const keyShape = group.addShape(\"rect\", {\n            attrs: {\n              ...styles,\n              x: -w / 2,\n              y: -h / 2,\n            },\n          });\n\n          /**\n           * leftIcon 格式如下：\n           *  {\n           *    style: ShapeStyle;\n           *    img: ''\n           *  }\n           */\n          console.log(\"cfg.leftIcon\", cfg.leftIcon);\n          if (cfg.leftIcon) {\n            const { style, img } = cfg.leftIcon;\n            group.addShape(\"rect\", {\n              attrs: {\n                x: 1 - w / 2,\n                y: 1 - h / 2,\n                width: 38,\n                height: styles.height - 2,\n                fill: \"#8c8c8c\",\n                ...style,\n              },\n            });\n            group.addShape(\"image\", {\n              attrs: {\n                x: 8 - w / 2,\n                y: 8 - h / 2,\n                width: 24,\n                height: 24,\n                img:\n                  img ||\n                  \"https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png\",\n              },\n              name: \"image-shape\",\n            });\n          }\n\n          // 如果不需要动态增加或删除元素，则不需要 add 这两个 marker\n          group.addShape(\"marker\", {\n            attrs: {\n              x: 40 - w / 2,\n              y: 52 - h / 2,\n              r: 6,\n              stroke: \"#73d13d\",\n              cursor: \"pointer\",\n              symbol: EXPAND_ICON,\n            },\n            name: \"add-item\",\n          });\n\n          group.addShape(\"marker\", {\n            attrs: {\n              x: 80 - w / 2,\n              y: 52 - h / 2,\n              r: 6,\n              stroke: \"#ff4d4f\",\n              cursor: \"pointer\",\n              symbol: COLLAPSE_ICON,\n            },\n            name: \"remove-item\",\n          });\n\n          if (cfg.label) {\n            group.addShape(\"text\", {\n              attrs: {\n                ...labelCfg.style,\n                text: cfg.label,\n                x: 50 - w / 2,\n                y: 25 - h / 2,\n              },\n            });\n          }\n\n          return keyShape;\n        },\n        update: undefined,\n      },\n      \"rect\",\n    );\n\n    F6.registerEdge(\"flow-line\", {\n      draw(cfg, group) {\n        const { startPoint } = cfg;\n        const { endPoint } = cfg;\n\n        const { style } = cfg;\n        const shape = group.addShape(\"path\", {\n          attrs: {\n            stroke: style.stroke,\n            endArrow: style.endArrow,\n            path: [\n              [\"M\", startPoint.x, startPoint.y],\n              [\"L\", startPoint.x, (startPoint.y + endPoint.y) / 2],\n              [\"L\", endPoint.x, (startPoint.y + endPoint.y) / 2],\n              [\"L\", endPoint.x, endPoint.y],\n            ],\n          },\n        });\n\n        return shape;\n      },\n    });\n\n    const defaultStateStyles = {\n      hover: {\n        stroke: \"#1890ff\",\n        lineWidth: 2,\n      },\n    };\n\n    const defaultNodeStyle = {\n      fill: \"#91d5ff\",\n      stroke: \"#40a9ff\",\n      radius: 5,\n    };\n\n    const defaultEdgeStyle = {\n      stroke: \"#91d5ff\",\n      endArrow: {\n        path: \"M 0,0 L 12, 6 L 9,0 L 12, -6 Z\",\n        fill: \"#91d5ff\",\n        d: -20,\n      },\n    };\n\n    const defaultLayout = {\n      type: \"compactBox\",\n      direction: \"TB\",\n      getId: function getId(d) {\n        return d.id;\n      },\n      getHeight: function getHeight() {\n        return 16;\n      },\n      getWidth: function getWidth() {\n        return 16;\n      },\n      getVGap: function getVGap() {\n        return 40;\n      },\n      getHGap: function getHGap() {\n        return 70;\n      },\n    };\n\n    const defaultLabelCfg = {\n      style: {\n        fill: \"#000\",\n        fontSize: 12,\n      },\n    };\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      // plugins: [minimap],\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\"],\n      },\n      defaultNode: {\n        type: \"icon-node\",\n        size: [120, 40],\n        style: defaultNodeStyle,\n        labelCfg: defaultLabelCfg,\n      },\n      defaultEdge: {\n        type: \"flow-line\",\n        style: defaultEdgeStyle,\n      },\n      nodeStateStyles: defaultStateStyles,\n      edgeStateStyles: defaultStateStyles,\n      layout: defaultLayout,\n      extra: {\n        createImage: this.canvas && this.canvas.createImage,\n      },\n    });\n\n    // 监听\n    this.graph.on(\"node:mouseenter\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"hover\", true);\n    });\n\n    this.graph.on(\"node:mouseleave\", (evt) => {\n      const { item } = evt;\n      this.graph.setItemState(item, \"hover\", false);\n    });\n\n    this.graph.on(\"node:tap\", (evt) => {\n      const { item, target } = evt;\n      const targetType = target.get(\"type\");\n      const name = target.get(\"name\");\n\n      // 增加元素\n      if (targetType === \"marker\") {\n        const model = item.getModel();\n        if (name === \"add-item\") {\n          if (!model.children) {\n            model.children = [];\n          }\n          const id = `n-${Math.random()}`;\n          model.children.push({\n            id,\n            label: id.substr(0, 8),\n            leftIcon: {\n              style: {\n                fill: \"#e6fffb\",\n                stroke: \"#e6fffb\",\n              },\n              img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\",\n            },\n          });\n          this.graph.updateChild(model, model.id);\n        } else if (name === \"remove-item\") {\n          this.graph.removeChild(model.id);\n        }\n      }\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-edge-tree/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义树中的边\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-edge-tree/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-edge-tree/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-side-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-side-mind-map/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 脑图-自定义子节点分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: () => {\n          return 16;\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 50;\n        },\n        getSide: (d) => {\n          if (d.id === \"Classification\") {\n            return \"left\";\n          }\n          return \"right\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node((node) => {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"right\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-side-mind-map/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"自定义子节点分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-side-mind-map/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-side-mind-map/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-tree/data.js",
    "content": "export default {\n  name: \"Modeling Methods\",\n  children: [\n    {\n      name: \"Classification\",\n      children: [\n        {\n          name: \"Logistic regression\",\n        },\n        {\n          name: \"Linear discriminant analysis\",\n        },\n        {\n          name: \"Rules\",\n        },\n        {\n          name: \"Decision trees\",\n        },\n        {\n          name: \"Naive Bayes\",\n        },\n        {\n          name: \"K nearest neighbor\",\n        },\n        {\n          name: \"Probabilistic neural network\",\n        },\n        {\n          name: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      name: \"Consensus\",\n      children: [\n        {\n          name: \"Models diversity\",\n          children: [\n            {\n              name: \"Different initializations\",\n            },\n            {\n              name: \"Different parameter choices\",\n            },\n            {\n              name: \"Different architectures\",\n            },\n            {\n              name: \"Different modeling methods\",\n            },\n            {\n              name: \"Different training sets\",\n            },\n            {\n              name: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          name: \"Methods\",\n          children: [\n            {\n              name: \"Classifier selection\",\n            },\n            {\n              name: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          name: \"Common\",\n          children: [\n            {\n              name: \"Bagging\",\n            },\n            {\n              name: \"Boosting\",\n            },\n            {\n              name: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      name: \"Regression\",\n      children: [\n        {\n          name: \"Multiple linear regression\",\n        },\n        {\n          name: \"Partial least squares\",\n        },\n        {\n          name: \"Multi-layer feedforward neural network\",\n        },\n        {\n          name: \"General regression neural network\",\n        },\n        {\n          name: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-tree/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 自定义复杂树图样式\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n    F6.registerNode(\n      \"tree-node\",\n      {\n        drawShape: function drawShape(cfg, group) {\n          const rect = group.addShape(\"rect\", {\n            attrs: {\n              fill: \"#fff\",\n              stroke: \"#666\",\n              x: 0,\n              y: 0,\n              width: 1,\n              height: 1,\n            },\n            name: \"rect-shape\",\n          });\n          const content = cfg.name.replace(/(.{19})/g, \"$1\\n\");\n          const text = group.addShape(\"text\", {\n            attrs: {\n              text: content,\n              x: 0,\n              y: 0,\n              textAlign: \"left\",\n              textBaseline: \"middle\",\n              fill: \"#666\",\n            },\n            name: \"text-shape\",\n          });\n          const bbox = text.getBBox();\n          const hasChildren = cfg.children && cfg.children.length > 0;\n          rect.attr({\n            x: -bbox.width / 2 - 4,\n            y: -bbox.height / 2 - 6,\n            width: bbox.width + (hasChildren ? 26 : 12),\n            height: bbox.height + 12,\n          });\n          text.attr({\n            x: -bbox.width / 2,\n            y: 0,\n          });\n          if (hasChildren) {\n            group.addShape(\"marker\", {\n              attrs: {\n                x: bbox.width / 2 + 12,\n                y: 0,\n                r: 6,\n                symbol: cfg.collapsed ? F6.Marker.expand : F6.Marker.collapse,\n                stroke: \"#666\",\n                lineWidth: 2,\n              },\n              name: \"collapse-icon\",\n            });\n          }\n          return rect;\n        },\n        update: (cfg, item) => {\n          const group = item.getContainer();\n          const icon = group.find((e) => e.get(\"name\") === \"collapse-icon\");\n          icon.attr(\n            \"symbol\",\n            cfg.collapsed ? F6.Marker.expand : F6.Marker.collapse,\n          );\n        },\n      },\n      \"single-node\",\n    );\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              this.graph.updateItem(item, {\n                collapsed,\n              });\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        type: \"tree-node\",\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 20;\n        },\n        getHGap: function getHGap() {\n          return 80;\n        },\n      },\n    });\n\n    F6.Util.traverseTree(data_, (item) => {\n      item.id = item.name;\n    });\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-tree/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"复杂树样式\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-tree/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/custom-tree/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/file-system/data.js",
    "content": "export default {\n  id: \"1\",\n  name: \"src\",\n  children: [\n    {\n      id: \"1-1\",\n      name: \"behavior\",\n      children: [],\n    },\n    {\n      id: \"1-3\",\n      name: \"graph\",\n      children: [\n        {\n          id: \"1-3-1\",\n          name: \"controller\",\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"1-5\",\n      name: \"item\",\n      children: [],\n    },\n    {\n      id: \"1-6\",\n      name: \"shape\",\n      children: [\n        {\n          id: \"1-6-2\",\n          name: \"extend\",\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"1-7\",\n      name: \"util\",\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/file-system/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 缩进树-文件系统\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // registerNode\n    F6.registerNode(\"file-node\", {\n      draw: function draw(cfg, group) {\n        const keyShape = group.addShape(\"rect\", {\n          attrs: {\n            x: 10,\n            y: -12,\n            fill: \"#fff\",\n            stroke: null,\n          },\n        });\n        let isLeaf = false;\n        if (cfg.collapsed) {\n          group.addShape(\"marker\", {\n            attrs: {\n              symbol: \"triangle\",\n              x: 4,\n              y: -2,\n              r: 4,\n              fill: \"#666\",\n            },\n            name: \"marker-shape\",\n          });\n        } else if (cfg.children && cfg.children.length > 0) {\n          group.addShape(\"marker\", {\n            attrs: {\n              symbol: \"triangle-down\",\n              x: 4,\n              y: -2,\n              r: 4,\n              fill: \"#666\",\n            },\n            name: \"marker-shape\",\n          });\n        } else {\n          isLeaf = true;\n        }\n        const shape = group.addShape(\"text\", {\n          attrs: {\n            x: 15,\n            y: 4,\n            text: cfg.name,\n            fill: \"#666\",\n            fontSize: 16,\n            textAlign: \"left\",\n            fontFamily:\n              typeof window !== \"undefined\"\n                ? window\n                    .getComputedStyle(document.body, null)\n                    .getPropertyValue(\"font-family\") || \"Arial, sans-serif\"\n                : \"Arial, sans-serif\",\n          },\n          name: \"text-shape\",\n        });\n        const bbox = shape.getBBox();\n        let backRectW = bbox.width;\n        let backRectX = keyShape.attr(\"x\");\n        if (!isLeaf) {\n          backRectW += 8;\n          backRectX -= 15;\n        }\n        keyShape.attr({\n          width: backRectW,\n          height: bbox.height + 4,\n          x: backRectX,\n        });\n        return keyShape;\n      },\n    });\n\n    // registerEdge\n    F6.registerEdge(\n      \"step-line\",\n      {\n        getControlPoints: function getControlPoints(cfg) {\n          const { startPoint } = cfg;\n          const { endPoint } = cfg;\n          return [\n            startPoint,\n            {\n              x: startPoint.x,\n              y: endPoint.y,\n            },\n            endPoint,\n          ];\n        },\n      },\n      \"polyline\",\n    );\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            animate: false,\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultEdge: {\n        style: {\n          stroke: \"#A3B1BF\",\n        },\n      },\n      layout: {\n        type: \"indented\",\n        isHorizontal: true,\n        direction: \"LR\",\n        indent: 30,\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node((node) => {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n\n      // position的取值（由于ESlint禁止嵌套的三元表达，所以单独提取出来写）\n      let position_value = null;\n      if (node.children && node.children.length > 0) {\n        position_value = \"left\";\n      } else if (node.x > centerX) position_value = \"right\";\n      else position_value = \"left\";\n\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 5,\n          position: position_value,\n        },\n      };\n    });\n\n    this.graph.node((node) => {\n      return {\n        type: \"file-node\",\n        label: node.name,\n      };\n    });\n\n    this.graph.edge(() => {\n      return {\n        type: \"step-line\",\n      };\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/file-system/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"文件系统\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/file-system/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/file-system/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/h-intended/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/h-intended/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 缩进树-子节点两侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"H\",\n        indent: 80,\n        getHeight: () => {\n          return 10;\n        },\n        getWidth: () => {\n          return 10;\n        },\n        getSide: (d) => {\n          if (d.id === \"Regression\" || d.id === \"Classification\") return \"left\";\n          return \"right\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node((node) => {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"left\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/h-intended/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"子节点两侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/h-intended/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/h-intended/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/intend-align-top/data.js",
    "content": "export default {\n  id: \"A\",\n  children: [\n    {\n      id: \"A1\",\n      children: [{ id: \"A11\" }, { id: \"A12\" }, { id: \"A13\" }, { id: \"A14\" }],\n    },\n    {\n      id: \"A2\",\n      children: [\n        {\n          id: \"A21\",\n          children: [{ id: \"A211\" }, { id: \"A212\" }],\n        },\n        {\n          id: \"A22\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/intend-align-top/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 缩进树-顶部对齐\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n    F6.registerNode(\"card-node\", {\n      draw: function drawShape(cfg, group) {\n        const r = 2;\n        const color = \"#5B8FF9\";\n        const w = cfg.size[0];\n        const h = cfg.size[1];\n        const shape = group.addShape(\"rect\", {\n          attrs: {\n            x: -w / 2,\n            y: -h / 2,\n            width: w, // 200,\n            height: h, // 60\n            stroke: color,\n            radius: r,\n            fill: \"#fff\",\n          },\n          name: \"main-box\",\n          draggable: true,\n        });\n\n        group.addShape(\"rect\", {\n          attrs: {\n            x: -w / 2,\n            y: -h / 2,\n            width: w, // 200,\n            height: h / 2, // 60\n            fill: color,\n            radius: [r, r, 0, 0],\n          },\n          name: \"title-box\",\n          draggable: true,\n        });\n\n        // title text\n        group.addShape(\"text\", {\n          attrs: {\n            textBaseline: \"top\",\n            x: -w / 2 + 8,\n            y: -h / 2 + 2,\n            lineHeight: 20,\n            text: cfg.id,\n            fill: \"#fff\",\n          },\n          name: \"title\",\n        });\n        cfg.children &&\n          group.addShape(\"marker\", {\n            attrs: {\n              x: w / 2,\n              y: 0,\n              r: 6,\n              cursor: \"pointer\",\n              symbol: F6.Marker.collapse,\n              stroke: \"#666\",\n              lineWidth: 1,\n              fill: \"#fff\",\n            },\n            name: \"collapse-icon\",\n          });\n        group.addShape(\"text\", {\n          attrs: {\n            textBaseline: \"top\",\n            x: -w / 2 + 8,\n            y: -h / 2 + 24,\n            lineHeight: 20,\n            text: \"description\",\n            fill: \"rgba(0,0,0, 1)\",\n          },\n          name: `description`,\n        });\n        return shape;\n      },\n      setState(name, value, item) {\n        if (name === \"collapsed\") {\n          const marker = item\n            .get(\"group\")\n            .find((ele) => ele.get(\"name\") === \"collapse-icon\");\n          const icon = value ? F6.Marker.expand : F6.Marker.collapse;\n          marker.attr(\"symbol\", icon);\n        }\n      },\n    });\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\"drag-canvas\"],\n      },\n      defaultNode: {\n        type: \"card-node\",\n        size: [100, 40],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n        style: {\n          endArrow: true,\n        },\n      },\n      layout: {\n        type: \"indented\",\n        direction: \"LR\",\n        dropCap: false,\n        indent: 200,\n        getHeight: () => {\n          return 60;\n        },\n      },\n    });\n    this.graph.on(\"node:tap\", (e) => {\n      if (e.target.get(\"name\") === \"collapse-icon\") {\n        e.item.getModel().collapsed = !e.item.getModel().collapsed;\n        this.graph.setItemState(\n          e.item,\n          \"collapsed\",\n          e.item.getModel().collapsed,\n        );\n        this.graph.layout();\n      }\n    });\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/intend-align-top/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"顶部对齐\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/intend-align-top/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/intend-align-top/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/left-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/left-mind-map/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 脑图-子节点右侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: () => {\n          return 16;\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 100;\n        },\n        getSide: () => {\n          return \"left\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node((node) => {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"right\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/left-mind-map/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"子节点左侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/left-mind-map/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/left-mind-map/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/mind-map/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 脑图-自节点自动两侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 50;\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node((node) => {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n\n      // position的取值（由于ESlint禁止嵌套的三元表达，所以单独提取出来写）\n      let position_value = null;\n      if (node.children && node.children.length > 0) {\n        position_value = \"left\";\n      } else if (node.x > centerX) position_value = \"right\";\n      else position_value = \"left\";\n\n      return {\n        label: node.id,\n        labelCfg: {\n          offset: 5,\n          position: position_value,\n        },\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/mind-map/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"子节点自动两侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/mind-map/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/mind-map/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-compact-box/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 紧凑辐射树\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"RL\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: () => {\n          return 26;\n        },\n        getWidth: () => {\n          return 26;\n        },\n        getVGap: () => {\n          return 20;\n        },\n        getHGap: () => {\n          return 30;\n        },\n        radial: true,\n      },\n    });\n\n    this.graph.node((node) => {\n      return {\n        label: node.id,\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-compact-box/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"紧凑辐射树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-compact-box/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-compact-box/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data from \"./data\";\n\n/**\n * 生态辐射树\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const model = item.getModel();\n              model.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n      },\n      layout: {\n        type: \"dendrogram\",\n        direction: \"LR\",\n        nodeSep: 20,\n        rankSep: 100,\n        radial: true,\n      },\n    });\n\n    this.graph.node((node) => {\n      return {\n        label: node.id,\n      };\n    });\n\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-dendrogram/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"生态辐射树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-dendrogram/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/radial-dendrogram/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/right-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/right-mind-map/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 脑图-子节点右侧分布\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-horizontal\",\n      },\n      layout: {\n        type: \"mindmap\",\n        direction: \"H\",\n        getHeight: () => {\n          return 16;\n        },\n        getWidth: () => {\n          return 16;\n        },\n        getVGap: () => {\n          return 10;\n        },\n        getHGap: () => {\n          return 100;\n        },\n        getSide: () => {\n          return \"right\";\n        },\n      },\n    });\n    let centerX = 0;\n    this.graph.node((node) => {\n      if (node.id === \"Modeling Methods\") {\n        centerX = node.x;\n      }\n      let pos = \"\";\n      if (node.children && node.children.length > 0) {\n        pos = \"right\";\n      } else if (node.x > centerX) pos = \"right\";\n      else pos = \"left\";\n      return {\n        label: node.id,\n        labelCfg: {\n          position: pos,\n          offset: 5,\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/right-mind-map/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"子节点右侧分布\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/right-mind-map/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/right-mind-map/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-compact-box/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data.js\";\n\n/**\n * 至上而下的紧凑树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化canvas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      linkCenter: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.getModel();\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-vertical\",\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"TB\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 80;\n        },\n        getHGap: function getHGap() {\n          return 20;\n        },\n      },\n    });\n\n    this.graph.node((node) => {\n      let position = \"right\";\n      let rotate = 0;\n      if (!node.children) {\n        position = \"bottom\";\n        rotate = Math.PI / 2;\n      }\n      return {\n        label: node.id,\n        labelCfg: {\n          position,\n          offset: 5,\n          style: {\n            rotate,\n            textAlign: \"start\",\n          },\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-compact-box/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"至上而下的紧凑树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-compact-box/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-compact-box/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 至上而下的生态树\n */\n\nPage({\n  canvas: null,\n  ctx: null, // 延迟获取的2d context\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      pixelRatio,\n      fitView: true,\n      linkCenter: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 26,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n      },\n      defaultEdge: {\n        type: \"cubic-vertical\",\n      },\n      layout: {\n        type: \"dendrogram\",\n        direction: \"TB\", // H / V / LR / RL / TB / BT\n        nodeSep: 40,\n        rankSep: 100,\n      },\n    });\n\n    this.graph.node((node) => {\n      let position = \"right\";\n      let rotate = 0;\n      if (!node.children) {\n        position = \"bottom\";\n        rotate = Math.PI / 2;\n      }\n      return {\n        label: node.id,\n        labelCfg: {\n          position,\n          offset: 5,\n          style: {\n            rotate,\n            textAlign: \"start\",\n          },\n        },\n      };\n    });\n\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-dendrogram/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"至上而下的生态树\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-dendrogram/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tb-dendrogram/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tree-edge-label/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n    {\n      id: \"SubTreeNode7\",\n    },\n    {\n      id: \"SubTreeNode8\",\n    },\n    {\n      id: \"SubTreeNode9\",\n    },\n    {\n      id: \"SubTreeNode10\",\n    },\n    {\n      id: \"SubTreeNode11\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tree-edge-label/index.js",
    "content": "import F6 from \"@antv/f6-wx\";\nimport TreeGraph from \"@antv/f6-wx/extends/graph/treeGraph\";\n\nimport data_ from \"./data\";\n\n/**\n * 树图边上的标签\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  isCanvasInit: false, // canvas是否准备好了\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    // 注册自定义树，节点等\n    F6.registerGraph(\"TreeGraph\", TreeGraph);\n\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { width, height, pixelRatio } = this.data;\n\n    // 创建F6实例\n    this.graph = new F6.TreeGraph({\n      context: this.ctx,\n      renderer: this.renderer,\n      width,\n      height,\n      linkCenter: true,\n      pixelRatio,\n      fitView: true,\n      modes: {\n        default: [\n          {\n            type: \"collapse-expand\",\n            onChange: function onChange(item, collapsed) {\n              const data = item.get(\"model\");\n              data.collapsed = collapsed;\n              return true;\n            },\n          },\n          \"drag-canvas\",\n          \"zoom-canvas\",\n        ],\n      },\n      defaultNode: {\n        size: 30,\n      },\n      layout: {\n        type: \"compactBox\",\n        direction: \"LR\",\n        getId: function getId(d) {\n          return d.id;\n        },\n        getHeight: function getHeight() {\n          return 16;\n        },\n        getWidth: function getWidth() {\n          return 16;\n        },\n        getVGap: function getVGap() {\n          return 10;\n        },\n        getHGap: function getHGap() {\n          return 100;\n        },\n      },\n    });\n\n    // 点\n    this.graph.node((node) => {\n      return {\n        size: 16,\n        anchorPoints: [\n          [0, 0.5],\n          [1, 0.5],\n        ],\n        style: {\n          fill: \"#C6E5FF\",\n          stroke: \"#5B8FF9\",\n        },\n        label: node.id,\n        labelCfg: {\n          position:\n            node.children && node.children.length > 0 ? \"left\" : \"right\",\n          offset: 5,\n        },\n      };\n    });\n\n    // 边\n    let i = 0;\n    this.graph.edge(() => {\n      i++;\n      return {\n        type: \"cubic-horizontal\",\n        color: \"#A3B1BF\",\n        label: i,\n      };\n    });\n    this.graph.data(data_);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tree-edge-label/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"树边上的标签\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tree-edge-label/index.wxml",
    "content": "<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{forceMini}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  bind:onTouchEvent=\"handleTouch\"\n  bind:onInit=\"handleInit\"\n></f6-canvas>"
  },
  {
    "path": "packages/examples-wx/package-tree-graph/pages/tree-graph/tree-edge-label/index.wxss",
    "content": "page {\n  background-color: #f7f7f7;\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-sizing: border-box;\n}\n\n.page-section-demo {\n  padding: 32rpx;\n}\n"
  },
  {
    "path": "packages/examples-wx/package.json",
    "content": "{\n  \"name\": \"miniprogram-1\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"@antv/f6-plugin\": \"^1.0.3\",\n    \"@antv/f6-wx\": \"^0.0.6\"\n  },\n  \"repository\": \"git@github.com:antvis/F6.git\"\n}\n"
  },
  {
    "path": "packages/examples-wx/pages/index/index.js",
    "content": "import {\n  processed_treeGraphContainer as treeGraphContainer,\n  processed_generalGraphContainer as generalGraphContainer,\n  processed_basicElementContainer as basicElementContainer,\n  processed_basicInteractiveContainer as basicInteractiveContainer,\n  processed_aminationContainer as aminationContainer,\n  processed_customizeTree as customizeTree,\n  processed_classicCace as classicCace,\n  processed_newsMapVisualize as newsMapVisualize,\n  processed_plugins as plugins,\n} from \"../../utils/index\";\n\nconst basicComponentList = [\n  {\n    type: \"树图\",\n    list: treeGraphContainer,\n  },\n  {\n    type: \"一般图\",\n    list: generalGraphContainer,\n  },\n  {\n    type: \"元素\",\n    list: basicElementContainer,\n  },\n  {\n    type: \"交互\",\n    list: basicInteractiveContainer,\n  },\n  {\n    type: \"动画\",\n    list: aminationContainer,\n  },\n  {\n    type: \"自定义树\",\n    list: customizeTree,\n  },\n  {\n    type: \"经典案例\",\n    list: classicCace,\n  },\n  {\n    type: \"新闻图可视化\",\n    list: newsMapVisualize,\n  },\n  {\n    type: \"自定义组件\",\n    list: plugins,\n  },\n];\n\n// // 这里控制拓展组件的盒子个数\n// const extComponentList = [\n\n// ];\nPage({\n  onShow() {\n    wx.reportAnalytics(\"enter_home_programmatically\", {});\n  },\n  onShareAppMessage() {\n    return {\n      title: \"F6能力演示\",\n      path: \"pages/index/index\",\n    };\n  },\n\n  data: {\n    all_list: basicComponentList, // 展示列表\n    theme: \"light\", // 日间夜间主题 'light', 'dark'\n  },\n\n  onLoad() {\n    console.log(\"导入list\", this.data.all_list);\n    this.setData({\n      theme: wx.getSystemInfoSync().theme || \"light\",\n    });\n\n    if (wx.onThemeChange) {\n      wx.onThemeChange(({ theme }) => {\n        this.setData({ theme });\n      });\n    }\n  },\n\n  kindToggle(e) {\n    const { id } = e.currentTarget;\n    const lists = this.data.all_list;\n    lists.forEach((component) => {\n      const { list } = component;\n      list.forEach((obj) => {\n        console.log(obj.open);\n        if (obj.id === id) {\n          obj.open = !obj.open;\n        } else {\n          obj.open = false;\n        }\n      });\n    });\n    this.setData({\n      all_list: lists,\n    });\n  },\n\n  testClick(e) {\n    console.log(e);\n  },\n});\n"
  },
  {
    "path": "packages/examples-wx/pages/index/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"F6\"\n}\n"
  },
  {
    "path": "packages/examples-wx/pages/index/index.wxml",
    "content": "<view class=\"index\">\n  <image class=\"background\" src=\"../../images/component_bg.png\"></image>\n  <view class=\"index-hd\">\n    <image class=\"index-logo\" src=\"../../images/antvf6.png\"></image>\n    <view class=\"index-desc\">F6 官方示例 </view>\n    <view class=\"index-sub-desc\">移动端可视化解决方案F6 demos </view>\n  </view>\n  <view class=\"index-bd\">\n    <block wx:for-items=\"{{all_list}}\" wx:for-item=\"component\"> \n      <view class=\"list-title\">{{component.type}}</view>\n      <view class=\"kind-list\">\n      <block wx:for-items=\"{{component.list}}\" wx:key=\"{{item.id}}\">\n        <view class=\"kind-list-item\">\n          <view id=\"{{item.id}}\" class=\"kind-list-item-hd {{item.open ? 'kind-list-item-hd-show' : ''}}\" bindtap=\"kindToggle\">\n            <view class=\"kind-list-text\">{{item.name}}</view>\n            <view class=\"kind-list-en-text\">{{item.nameEn}}</view>\n            <image wx:if=\"{{theme === 'dark'}}\" class=\"kind-list-img\" src=\"resources/kind/{{item.id}}_dark.png\"></image>\n            <image wx:else class=\"kind-list-img\" src=\"{{item.thumb}}\"></image>\n          </view>\n          <view class=\"kind-list-item-bd {{item.open ? 'kind-list-item-bd-show' : ''}}\">\n            <view class=\"navigator-box {{item.open ? 'navigator-box-show' : ''}}\">\n              <block wx:for-items=\"{{item.pages}}\" wx:for-item=\"page\" wx:key=\"*item\">\n                <navigator url=\"{{page.path}}\" class=\"navigator\" bindtap=\"testClick\" data-path=\"{{page.path}}\">\n                  <view class=\"navigator-text\">{{page.name}}</view>\n                  <view class=\"navigator-arrow\"></view>\n                </navigator>\n              </block>\n            </view>\n          </view>\n        </view>\n      </block>\n      </view>\n    </block>\n  </view>\n</view>"
  },
  {
    "path": "packages/examples-wx/pages/index/index.wxss",
    "content": ".index {\n  position: relative;\n  overflow-x: hidden;\n}\n\n.background {\n  position: absolute;\n  height: 166px;\n  width: 1000px;\n  z-index: -1;\n}\n\n.index-hd {\n  padding: 40px 40px 40px;\n  text-align: center;\n  background-image: url(https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*64rwQa4miUkAAAAAAAAAAAAAARQnAQ);\n}\n\n.index-bd {\n  /* padding: 0 15px 20px; */\n  padding: 0 20px 20px;\n}\n.index-ft {\n  padding-bottom: 10px;\n  text-align: center;\n}\n.index-logo {\n  /* width: 43px;\n  height: 43px; */\n  width: 43px;\n  height: 43px;\n}\n.index-desc {\n  margin-top: 10px;\n  color: white;\n  font-size: 20px;\n}\n.index-sub-desc {\n  color: gray;\n  font-size: 12px;\n}\n.navigator-box {\n  opacity: 0;\n  position: relative;\n  background-color: var(--weui-BG-2);\n  line-height: 1.41176471;\n  /* font-size: 32px; */\n  font-size: 17px;\n\n  transform: translateY(-50%);\n  transition: 0.3s;\n}\n.navigator-box-show {\n  opacity: 1;\n  transform: translateY(0);\n}\n.navigator {\n  /* padding: 10px 15px; */\n  padding: 10px 15px;\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n.navigator:before {\n  content: \" \";\n  position: absolute;\n  /* left: 15px; */\n  left: 15px;\n  top: 0;\n  /* right: 15px; */\n  right: 15px;\n  height: 1px;\n  /* border-top: 1px solid var(--weui-FG-3); */\n  border-top: 1px solid var(--weui-FG-3);\n  color: var(--weui-FG-3);\n}\n.navigator:first-child:before {\n  display: none;\n}\n.navigator-text {\n  flex: 1;\n}\n.navigator-arrow {\n  /* padding-right: 13px; */\n  padding-right: 13px;\n  position: relative;\n}\n.navigator-arrow:after {\n  content: \" \";\n  display: inline-block;\n  /* height: 9px;\n  width: 9px;\n  border-width: 1px 1px 0 0; */\n  height: 9px;\n  width: 9px;\n  border-width: 1px 1px 0 0;\n  border-color: var(--weui-FG-2);\n  border-style: solid;\n  transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);\n  position: absolute;\n  top: 50%;\n  /* margin-top: -4px; */\n  margin-top: -4px;\n  /* right: 14px; */\n  right: 14px;\n}\n\n.list-title {\n  font-weight: bold;\n  font-size: larger;\n  margin: 40px 0 20px 0;\n}\n.kind-list-item {\n  /* margin: 10px 0; */\n  margin: 10px 0;\n  background-color: var(--weui-BG-2);\n  border-radius: 2px;\n  overflow: hidden;\n}\n.kind-list-item:first-child {\n  margin-top: 0;\n}\n.kind-list-text {\n  margin-right: 15px;\n}\n.kind-list-en-text {\n  color: gray;\n  flex: 1;\n}\n.kind-list-img {\n  /* width: 30px;\n  height: 30px; */\n  width: 20px;\n  height: 20px;\n}\n.kind-list-item-hd {\n  padding-bottom: 10px;\n  display: flex;\n  align-items: flex-start;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n\n  transition: opacity 0.3s;\n}\n.kind-list-item-hd-show {\n  opacity: 0.2;\n}\n.kind-list-item-bd {\n  height: 0;\n  overflow: hidden;\n}\n.kind-list-item-bd-show {\n  height: auto;\n}\n\n.weui-agree__link {\n  display: inline;\n  color: var(--weui-LINK);\n}\n"
  },
  {
    "path": "packages/examples-wx/project.config.json",
    "content": "{\n  \"description\": \"项目配置文件\",\n  \"packOptions\": {\n    \"ignore\": []\n  },\n  \"setting\": {\n    \"urlCheck\": true,\n    \"es6\": true,\n    \"enhance\": false,\n    \"postcss\": true,\n    \"preloadBackgroundData\": false,\n    \"minified\": true,\n    \"newFeature\": false,\n    \"coverView\": true,\n    \"nodeModules\": false,\n    \"autoAudits\": false,\n    \"showShadowRootInWxmlPanel\": true,\n    \"scopeDataCheck\": false,\n    \"uglifyFileName\": false,\n    \"checkInvalidKey\": true,\n    \"checkSiteMap\": true,\n    \"uploadWithSourceMap\": true,\n    \"compileHotReLoad\": false,\n    \"lazyloadPlaceholderEnable\": false,\n    \"useMultiFrameRuntime\": true,\n    \"useApiHook\": true,\n    \"useApiHostProcess\": true,\n    \"babelSetting\": {\n      \"ignore\": [],\n      \"disablePlugins\": [],\n      \"outputPath\": \"\"\n    },\n    \"enableEngineNative\": false,\n    \"useIsolateContext\": true,\n    \"userConfirmedBundleSwitch\": false,\n    \"packNpmManually\": true,\n    \"packNpmRelationList\": [\n      {\n        \"packageJsonPath\": \"./f6_node_modules_1/package.json\",\n        \"miniprogramNpmDistDir\": \"./miniprogram/\"\n      },\n      {\n        \"packageJsonPath\": \"./src_node_modules_2/package.json\",\n        \"miniprogramNpmDistDir\": \"./miniprogram/sub_package\"\n      }\n    ],\n    \"minifyWXSS\": true,\n    \"showES6CompileOption\": false\n  },\n  \"compileType\": \"miniprogram\",\n  \"libVersion\": \"2.19.1\",\n  \"appid\": \"wx203a86077094f3b7\",\n  \"projectname\": \"wx\",\n  \"debugOptions\": {\n    \"hidedInDevtools\": []\n  },\n  \"scripts\": {},\n  \"staticServerOptions\": {\n    \"baseURL\": \"\",\n    \"servePath\": \"\"\n  },\n  \"isGameTourist\": false,\n  \"condition\": {\n    \"search\": {\n      \"list\": []\n    },\n    \"conversation\": {\n      \"list\": []\n    },\n    \"game\": {\n      \"list\": []\n    },\n    \"plugin\": {\n      \"list\": []\n    },\n    \"gamePlugin\": {\n      \"list\": []\n    },\n    \"miniprogram\": {\n      \"list\": []\n    }\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/project.private.config.json",
    "content": "{\n  \"setting\": {},\n  \"condition\": {\n    \"plugin\": {\n      \"list\": []\n    },\n    \"game\": {\n      \"list\": []\n    },\n    \"gamePlugin\": {\n      \"list\": []\n    },\n    \"miniprogram\": {\n      \"list\": [\n        {\n          \"name\": \"package-plugin/pages/plugin/edge-filter/index\",\n          \"pathName\": \"package-plugin/pages/plugin/edge-filter/index\",\n          \"query\": \"\",\n          \"scene\": null\n        },\n        {\n          \"name\": \"package-plugin/pages/plugin/fish-eye/index\",\n          \"pathName\": \"package-plugin/pages/plugin/fish-eye/index\",\n          \"query\": \"\",\n          \"scene\": null\n        },\n        {\n          \"name\": \"package-plugin/pages/plugin/time-bar/index\",\n          \"pathName\": \"package-plugin/pages/plugin/time-bar/index\",\n          \"query\": \"\",\n          \"scene\": null\n        }\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "packages/examples-wx/sitemap.json",
    "content": "{\n  \"desc\": \"F6演示\",\n  \"rules\": [\n    {\n      \"action\": \"allow\",\n      \"page\": \"*\"\n    }\n  ]\n}\n"
  },
  {
    "path": "packages/examples-wx/utils/common.js",
    "content": "function strLen(str = \"\") {\n  let len = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) {\n      len += 1;\n    } else {\n      len += 2;\n    }\n  }\n\n  return len;\n}\n\nfunction measureText(text, font) {\n  let fontSize = 12;\n  if (font) {\n    fontSize = parseInt(font.split(\" \")[3], 10);\n  }\n  fontSize /= 2;\n  return {\n    width: strLen(text) * fontSize,\n  };\n}\n\nfunction processSearchData(all_data) {\n  const all_result = [];\n  all_data.forEach((obj) => {\n    const { name: groupName, thumb, nameEn, detailList } = obj;\n    detailList.forEach((detail) => {\n      const { name, path: tmpPath } = detail;\n      const suggestion = nameEn + groupName + name;\n      const path = tmpPath.replace(/../, \"/pages\");\n      const result = {\n        name,\n        thumb,\n        path,\n        suggestion,\n      };\n      all_result.push(result);\n    });\n  });\n  return all_result;\n}\nexport { measureText, processSearchData };\n"
  },
  {
    "path": "packages/examples-wx/utils/data.js",
    "content": "export const list = [\n  {\n    id: \"view\",\n    name: \"视图容器\",\n    open: false,\n    pages: [\"view\", \"scroll-view\", \"swiper\", \"movable-view\", \"cover-view\"],\n  },\n  {\n    id: \"content\",\n    name: \"基础内容\",\n    open: false,\n    pages: [\"text\", \"icon\", \"progress\", \"rich-text\"],\n  },\n  {\n    id: \"form\",\n    name: \"表单组件\",\n    open: false,\n    pages: [\n      \"button\",\n      \"checkbox\",\n      \"form\",\n      \"input\",\n      \"label\",\n      \"picker\",\n      \"picker-view\",\n      \"radio\",\n      \"slider\",\n      \"switch\",\n      \"textarea\",\n      \"editor\",\n    ],\n  },\n  {\n    id: \"nav\",\n    name: \"导航\",\n    open: false,\n    pages: [\"navigator\"],\n  },\n  {\n    id: \"media\",\n    name: \"媒体组件\",\n    open: false,\n    pages: [\"image\", \"video\", \"camera\", \"live-pusher\", \"live-player\"],\n  },\n  {\n    id: \"map\",\n    name: \"地图\",\n    open: false,\n    pages: [\"map\"],\n  },\n  {\n    id: \"canvas\",\n    name: \"画布\",\n    open: false,\n    pages: [\"canvas\", \"canvas-2d\", \"webgl\"],\n  },\n  {\n    id: \"open\",\n    name: \"开放能力\",\n    open: false,\n    pages: [\"ad\", \"open-data\", \"web-view\"],\n  },\n  {\n    id: \"obstacle-free\",\n    name: \"无障碍访问\",\n    open: false,\n    pages: [\"aria-component\"],\n  },\n];\n\n// 下面是第一个tab中的内容\nexport const treeGraphContainer = [\n  {\n    name: \"紧凑树\",\n    thumb: \"/images/icon/compactbox.png\",\n    nameEn: \"CompactTree\",\n    detailList: [\n      {\n        name: \"紧凑树\",\n        path: \"/package-tree-graph/pages/tree-graph/compact-box/index\",\n      },\n      {\n        name: \"至上而下的紧凑树\",\n        path: \"/package-tree-graph/pages/tree-graph/tb-compact-box/index\",\n      },\n      {\n        name: \"节点左对齐的紧凑树\",\n        path: \"/package-tree-graph/pages/tree-graph/compact-box-left-align/index\",\n      },\n    ],\n  },\n  {\n    name: \"生态树\",\n    thumb: \"/images/icon/dendrogram.png\",\n    nameEn: \"Dendrogram\",\n    detailList: [\n      {\n        name: \"生态树\",\n        path: \"/package-tree-graph/pages/tree-graph/basic-dendrogram/index\",\n      },\n      {\n        name: \"至上而下的生态树\",\n        path: \"/package-tree-graph/pages/tree-graph/tb-dendrogram/index\",\n      },\n    ],\n  },\n  {\n    name: \"脑图树\",\n    thumb: \"/images/icon/mind.png\",\n    nameEn: \"MindMap\",\n    detailList: [\n      {\n        name: \"子节点自动两侧分布\",\n        path: \"/package-tree-graph/pages/tree-graph/mind-map/index\",\n      },\n      {\n        name: \"子节点右侧分布\",\n        path: \"/package-tree-graph/pages/tree-graph/right-mind-map/index\",\n      },\n      {\n        name: \"子节点左侧分布\",\n        path: \"/package-tree-graph/pages/tree-graph/left-mind-map/index\",\n      },\n      {\n        name: \"自定义子节点分布\",\n        path: \"/package-tree-graph/pages/tree-graph/custom-side-mind-map/index\",\n      },\n    ],\n  },\n  {\n    name: \"缩进树\",\n    thumb: \"/images/icon/indent.png\",\n    nameEn: \"Intend\",\n    path: \"/page/component/movable-view/movable-view\",\n    detailList: [\n      {\n        name: \"文件系统\",\n        path: \"/package-tree-graph/pages/tree-graph/file-system/index\",\n      },\n      {\n        name: \"顶部对齐\",\n        path: \"/package-tree-graph/pages/tree-graph/intend-align-top/index\",\n      },\n      {\n        name: \"子节点两侧分布\",\n        path: \"/package-tree-graph/pages/tree-graph/h-intended/index\",\n      },\n    ],\n  },\n  {\n    name: \"辐射树\",\n    thumb: \"/images/icon/radial.png\",\n    nameEn: \"Radial\",\n    detailList: [\n      {\n        name: \"生态辐射树\",\n        path: \"/package-tree-graph/pages/tree-graph/radial-dendrogram/index\",\n      },\n      {\n        name: \"紧凑辐射树\",\n        path: \"/package-tree-graph/pages/tree-graph/radial-compact-box/index\",\n      },\n    ],\n  },\n  {\n    name: \"定制样式树\",\n    thumb: \"/images/icon/dingzhi.png\",\n    nameEn: \"Custom\",\n    detailList: [\n      {\n        name: \"自定义树中的边\",\n        path: \"/package-tree-graph/pages/tree-graph/custom-edge-tree/index\",\n      },\n      {\n        name: \"树边上的标签\",\n        path: \"/package-tree-graph/pages/tree-graph/tree-edge-label/index\",\n      },\n      {\n        name: \"复杂树样式\",\n        path: \"/package-tree-graph/pages/tree-graph/custom-tree/index\",\n      },\n    ],\n  },\n];\n\nexport const generalGraphContainer = [\n  {\n    name: \"力导向图\",\n    thumb: \"/images/icon/fa.png\",\n    nameEn: \"ForceAtalas\",\n    detailList: [\n      {\n        name: \"FA布局及节点拖拽\",\n        path: \"/package-general-graph/pages/general-graph/basic-force-directed/index\",\n      },\n      {\n        name: \"FA2布局\",\n        path: \"/package-general-graph/pages/general-graph/basic-FA2/index\",\n      },\n      {\n        name: \"FA布局防止节点重叠\",\n        path: \"/package-general-graph/pages/general-graph/force-directed-prevent-overlap/index\",\n      },\n      {\n        name: \"FA布局聚类\",\n        path: \"/package-general-graph/pages/general-graph/force-directed-force-clustering/index\",\n      },\n      {\n        name: \"定制不同节点的参数\",\n        path: \"/package-general-graph/pages/general-graph/force-directed-functional-params/index\",\n      },\n      {\n        name: \"固定被拖拽节点\",\n        path: \"/package-general-graph/pages/general-graph/basic-force-directed-drag-fix/index\",\n      },\n      {\n        name: \"FA布局参数动态变化\",\n        path: \"/package-general-graph/pages/general-graph/force-directed-configuration-translate/index\",\n      },\n      {\n        name: \"FA气泡图\",\n        path: \"/package-general-graph/pages/general-graph/force-bubbles/index\",\n      },\n      {\n        name: \"约束在范围内布局\",\n        path: \"/package-general-graph/pages/general-graph/force-constrained-in-rect/index\",\n      },\n      {\n        name: \"Combo FA布局\",\n        path: \"/package-general-graph/pages/general-graph/basic-combo-force/index\",\n      },\n    ],\n  },\n  {\n    name: \"流程图\",\n    thumb: \"/images/icon/dagre.png\",\n    nameEn: \"Dagre\",\n    detailList: [\n      {\n        name: \"流程图\",\n        path: \"/package-general-graph/pages/general-graph/basic-dagre/index\",\n      },\n      {\n        name: \"带有Combo的流程图\",\n        path: \"/package-general-graph/pages/general-graph/dagre-combo/index\",\n      },\n      {\n        name: \"自左向右的流程图\",\n        path: \"/package-general-graph/pages/general-graph/dagre/index\",\n      },\n      {\n        name: \"自左向右的流程图对齐\",\n        path: \"/package-general-graph/pages/general-graph/dagre-UL/index\",\n      },\n      {\n        name: \"布局参数动态变化\",\n        path: \"/package-general-graph/pages/general-graph/dagre-configuration-translate/index\",\n      },\n    ],\n  },\n  {\n    name: \"Fruchterman图\",\n    thumb: \"/images/icon/terms.png\",\n    nameEn: \"Fruchterman\",\n    detailList: [\n      {\n        name: \"基本Fruchterman\",\n        path: \"/package-general-graph/pages/general-graph/fruchterman/index\",\n      },\n      {\n        name: \"Fruchterman聚类\",\n        path: \"/package-general-graph/pages/general-graph/fruchterman-clustering/index\",\n      },\n      {\n        name: \"参数动态变化\",\n        path: \"/package-general-graph/pages/general-graph/fruchterman-configuration-translate/index\",\n      },\n    ],\n  },\n  {\n    name: \"辐射图\",\n    thumb: \"/images/icon/radial.png\",\n    nameEn: \"Radial\",\n    detailList: [\n      {\n        name: \"基本辐射布局\",\n        path: \"/package-general-graph/pages/general-graph/basic-radial/index\",\n      },\n      {\n        name: \"防止节点重叠的严格辐射布局\",\n        path: \"/package-general-graph/pages/general-graph/prevent-overlap-radial/index\",\n      },\n      {\n        name: \"防止节点重叠的非严格辐射布局\",\n        path: \"/package-general-graph/pages/general-graph/prevent-overlap-unstrict-radial/index\",\n      },\n      {\n        name: \"交互扩展节点的辐射布局\",\n        path: \"/package-general-graph/pages/general-graph/interact-radial/index\",\n      },\n      {\n        name: \"布局参数动态变化\",\n        path: \"/package-general-graph/pages/general-graph/radial-configuration-translate/index\",\n      },\n      {\n        name: \"同层节点按照指定字段聚类\",\n        path: \"/package-general-graph/pages/general-graph/sort-radial/index\",\n      },\n    ],\n  },\n  {\n    name: \"环形图\",\n    thumb: \"/images/icon/circle.png\",\n    nameEn: \"Circle\",\n    detailList: [\n      {\n        name: \"基本环形布局\",\n        path: \"/package-general-graph/pages/general-graph/basic-circular/index\",\n      },\n      {\n        name: \"按节点度数排序\",\n        path: \"/package-general-graph/pages/general-graph/degree-circular/index\",\n      },\n      {\n        name: \"螺旋线布局\",\n        path: \"/package-general-graph/pages/general-graph/spiral-circular/index\",\n      },\n      {\n        name: \"分割环形布局\",\n        path: \"/package-general-graph/pages/general-graph/division-circular/index\",\n      },\n      {\n        name: \"参数动态变化\",\n        path: \"/package-general-graph/pages/general-graph/circular-configuration-translate/index\",\n      },\n    ],\n  },\n  {\n    name: \"网格图\",\n    thumb: \"/images/icon/grid.png\",\n    nameEn: \"Grid\",\n    detailList: [\n      {\n        name: \"基本网格布局\",\n        path: \"/package-general-graph/pages/general-graph/basic-grid/index\",\n      },\n      {\n        name: \"指定排序方式的网格布局\",\n        path: \"/package-general-graph/pages/general-graph/cluster-grid/index\",\n      },\n    ],\n  },\n  {\n    name: \"同心圆\",\n    thumb: \"/images/icon/concentric.png\",\n    nameEn: \"Concentric\",\n    detailList: [\n      {\n        name: \"基本同心圆布局\",\n        path: \"/package-general-graph/pages/general-graph/basic-concentric/index\",\n      },\n    ],\n  },\n  {\n    name: \"降维图\",\n    thumb: \"/images/icon/degree.png\",\n    nameEn: \"MDS\",\n    detailList: [\n      {\n        name: \"基本降维布局图\",\n        path: \"/package-general-graph/pages/general-graph/basic-MDS/index\",\n      },\n    ],\n  },\n  {\n    name: \"弧线图\",\n    thumb: \"/images/icon/arc.png\",\n    nameEn: \"Arc Diagram \",\n    detailList: [\n      {\n        name: \"基本弧线图\",\n        path: \"/package-general-graph/pages/general-graph/basic-arc-diagram/index\",\n      },\n      {\n        name: \"环形弧线图\",\n        path: \"/package-general-graph/pages/general-graph/circular-arc-diagram/index\",\n      },\n    ],\n  },\n  {\n    name: \"布局机制\",\n    thumb: \"/images/icon/buju.png\",\n    nameEn: \"Layout\",\n    detailList: [\n      {\n        name: \"布局切换\",\n        path: \"/package-general-graph/pages/general-graph/layoutTranslate/index\",\n      },\n      {\n        name: \"子图布局\",\n        path: \"/package-general-graph/pages/general-graph/subgraph-layout/index\",\n      },\n      {\n        name: \"流水线子图布局\",\n        path: \"/package-general-graph/pages/general-graph/sublayout-pipes/index\",\n      },\n      {\n        name: \"数据动态切换\",\n        path: \"/package-general-graph/pages/general-graph/data-change/index\",\n      },\n      {\n        name: \"自定义二分图布局\",\n        path: \"/package-general-graph/pages/general-graph/custom-bi-graph/index\",\n      },\n      {\n        name: \"布局时机监听\",\n        path: \"/package-general-graph/pages/general-graph/layout-timing/index\",\n      },\n    ],\n  },\n];\n\nexport const basicElementContainer = [\n  {\n    name: \"内置节点\",\n    thumb: \"/images/icon/node.png\",\n    nameEn: \"Node\",\n    detailList: [\n      {\n        name: \"圆形\",\n        path: \"/package-elements/pages/elements/circle/index\",\n      },\n      {\n        name: \"甜甜圈\",\n        path: \"/package-elements/pages/elements/donut/index\",\n      },\n      {\n        name: \"椭圆\",\n        path: \"/package-elements/pages/elements/ellipse/index\",\n      },\n      {\n        name: \"矩形\",\n        path: \"/package-elements/pages/elements/rect/index\",\n      },\n      {\n        name: \"模态矩形\",\n        path: \"/package-elements/pages/elements/mode-rect/index\",\n      },\n      {\n        name: \"模态菱形\",\n        path: \"/package-elements/pages/elements/diamond/index\",\n      },\n      {\n        name: \"五角星\",\n        path: \"/package-elements/pages/elements/star/index\",\n      },\n      {\n        name: \"三角形\",\n        path: \"/package-elements/pages/elements/triangle/index\",\n      },\n      {\n        name: \"图片\",\n        path: \"/package-elements/pages/elements/image/index\",\n      },\n    ],\n  },\n  {\n    name: \"内置边\",\n    thumb: \"/images/icon/defaultEdge.png\",\n    nameEn: \"Edge\",\n    detailList: [\n      {\n        name: \"折线1\",\n        path: \"/package-elements/pages/elements/polyline1/index\",\n      },\n      {\n        name: \"折线2\",\n        path: \"/package-elements/pages/elements/polyline2/index\",\n      },\n      {\n        name: \"折线3\",\n        path: \"/package-elements/pages/elements/polyline3/index\",\n      },\n      {\n        name: \"三次贝塞尔曲线-垂直\",\n        path: \"/package-elements/pages/elements/cubic1/index\",\n      },\n      {\n        name: \"三次贝塞尔曲线-水平\",\n        path: \"/package-elements/pages/elements/cubic2/index\",\n      },\n      {\n        name: \"弧线\",\n        path: \"/package-elements/pages/elements/arc/index\",\n      },\n      {\n        name: \"自环边\",\n        path: \"/package-elements/pages/elements/loop/index\",\n      },\n    ],\n  },\n  {\n    name: \"内置组合\",\n    thumb: \"/images/icon/combo.png\",\n    nameEn: \"Combo\",\n    detailList: [\n      {\n        name: \"圆形\",\n        path: \"/package-elements/pages/elements/circle-with-combo/index\",\n      },\n      {\n        name: \"矩形\",\n        path: \"/package-elements/pages/elements/rect-with-combo/index\",\n      },\n    ],\n  },\n  {\n    name: \"边的箭头\",\n    thumb: \"/images/icon/arrow.png\",\n    nameEn: \"Arrow\",\n    detailList: [\n      {\n        name: \"默认内置箭头\",\n        path: \"/package-elements/pages/elements/built-in-arrows/index\",\n      },\n      {\n        name: \"自定义箭头\",\n        path: \"/package-elements/pages/elements/custom-arrows/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义节点\",\n    thumb: \"/images/icon/customNode.png\",\n    nameEn: \"CustomNode\",\n    detailList: [\n      {\n        name: \"卡片\",\n        path: \"/package-elements/pages/elements/card/index\",\n      },\n      {\n        name: \"卡片2\",\n        path: \"/package-elements/pages/elements/card-node/index\",\n      },\n      {\n        name: \"面积图节点\",\n        path: \"/package-elements/pages/elements/area-chart/index\",\n      },\n      {\n        name: \"堆叠图节点\",\n        path: \"/package-elements/pages/elements/stack-chart/index\",\n      },\n      {\n        name: \"折线图节点\",\n        path: \"/package-elements/pages/elements/line-chart/index\",\n      },\n      {\n        name: \"南丁格尔图节点\",\n        path: \"/package-elements/pages/elements/bar-chart/index\",\n      },\n      {\n        name: \"点线图节点\",\n        path: \"/package-elements/pages/elements/point-chart/index\",\n      },\n      {\n        name: \"饼图节点\",\n        path: \"/package-elements/pages/elements/pie-chart/index\",\n      },\n      {\n        name: \"列表\",\n        path: \"/package-elements/pages/elements/list/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义边\",\n    thumb: \"/images/icon/customEdge.png\",\n    nameEn: \"CustomEdge\",\n    detailList: [\n      {\n        name: \"添加额外图形\",\n        path: \"/package-elements/pages/elements/extra-shape/index\",\n      },\n      {\n        name: \"自定义折线\",\n        path: \"/package-elements/pages/elements/custom-polyline/index\",\n      },\n      {\n        name: \"自定义折线2\",\n        path: \"/package-elements/pages/elements/custom-polyline2/index\",\n      },\n      {\n        name: \"多标签边\",\n        path: \"/package-elements/pages/elements/edge-mul-label/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义组合\",\n    thumb: \"/images/icon/customCombo.png\",\n    nameEn: \"CustomCombo\",\n    detailList: [\n      {\n        name: \"带有Marker的圆\",\n        path: \"/package-elements/pages/elements/c-circle/index\",\n      },\n      {\n        name: \"带有Marker的矩形\",\n        path: \"/package-elements/pages/elements/c-rect/index\",\n      },\n    ],\n  },\n  {\n    name: \"超长文本\",\n    thumb: \"/images/icon/article.png\",\n    nameEn: \"Long\",\n    detailList: [\n      {\n        name: \"文本超长\",\n        path: \"/package-elements/pages/elements/label-len/index\",\n      },\n      {\n        name: \"使用换行符处理\",\n        path: \"/package-elements/pages/elements/label-len1/index\",\n      },\n    ],\n  },\n  {\n    name: \"文本背景\",\n    thumb: \"/images/icon/background.png\",\n    nameEn: \"Background\",\n    detailList: [\n      {\n        name: \"节点文本背景\",\n        path: \"/package-elements/pages/elements/node-bg/index\",\n      },\n      {\n        name: \"边上文本背景\",\n        path: \"/package-elements/pages/elements/edge-bg/index\",\n      },\n    ],\n  },\n  {\n    name: \"多边定点\",\n    thumb: \"/images/icon/multiedges.png\",\n    nameEn: \"Multiple\",\n    detailList: [\n      {\n        name: \"两节点间存在多条边\",\n        path: \"/package-elements/pages/elements/multi-edges/index\",\n      },\n    ],\n  },\n];\n\nexport const basicInteractiveContainer = [\n  // {\n  //   name: '高亮',\n  //   thumb: '/images/icon/button.png',\n  //   nameEn: 'HighLight',\n  //   detailList: [\n  //     {\n  //       name: '内置的高亮节点',\n  //       path: '/package-interactive/pages/interactive/activate-relations/index',\n  //     },\n  //     {\n  //       name: '自定义高亮',\n  //       path: '/package-interactive/pages/interactive/highlight-dark/index',\n  //     },\n  //   ],\n  // },\n  {\n    name: \"自定义树图交互\",\n    thumb: \"/images/icon/interact.png\",\n    nameEn: \"Tree-Graph\",\n    detailList: [\n      {\n        name: \"拖拽子树改变结构\",\n        path: \"/package-interactive/pages/interactive/drag-subtree/index\",\n      },\n      {\n        name: \"合并同类兄弟节点\",\n        path: \"/package-interactive/pages/interactive/collapse-slibing/index\",\n      },\n      {\n        name: \"使用changeData\",\n        path: \"/package-interactive/pages/interactive/change-data/index\",\n      },\n      {\n        name: \"使用addChild\",\n        path: \"/package-interactive/pages/interactive/add-child/index\",\n      },\n    ],\n  },\n  {\n    name: \"节点分组\",\n    thumb: \"/images/icon/label.png\",\n    nameEn: \"Combo\",\n    detailList: [\n      {\n        name: \"圆形组合\",\n        path: \"/package-interactive/pages/interactive/combo-circle/index\",\n      },\n      {\n        name: \"矩形组合\",\n        path: \"/package-interactive/pages/interactive/combo-rect/index\",\n      },\n    ],\n  },\n  {\n    name: \"节点集轮廓包裹\",\n    thumb: \"/images/icon/textarea.png\",\n    nameEn: \"Hull\",\n    detailList: [\n      {\n        name: \"用轮廓包裹节点集合\",\n        path: \"/package-interactive/pages/interactive/hull/index\",\n      },\n      {\n        name: \"修改包裹内部成员\",\n        path: \"/package-interactive/pages/interactive/change-members/index\",\n      },\n    ],\n  },\n  {\n    name: \"聚集一个节点\",\n    thumb: \"/images/icon/radio.png\",\n    nameEn: \"Move\",\n    detailList: [\n      {\n        name: \"点击节点移动\",\n        path: \"/package-interactive/pages/interactive/move/index\",\n      },\n      {\n        name: \"点击节点动画\",\n        path: \"/package-interactive/pages/interactive/move-animate/index\",\n      },\n    ],\n  },\n  {\n    name: \"响应区域事件\",\n    thumb: \"/images/icon/checkbox.png\",\n    nameEn: \"Response\",\n    detailList: [\n      {\n        name: \"响应节点中部分区域\",\n        path: \"/package-interactive/pages/interactive/partial-node/index\",\n      },\n    ],\n  },\n  {\n    name: \"切换模式增加点和边\",\n    thumb: \"/images/icon/switch.png\",\n    nameEn: \"Switch\",\n    detailList: [\n      {\n        name: \"设置交互模式\",\n        path: \"/package-interactive/pages/interactive/set-mode/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义交互\",\n    thumb: \"/images/icon/slider.png\",\n    nameEn: \"CustomInteraction\",\n    detailList: [\n      {\n        name: \"两指平移画布\",\n        path: \"/package-interactive/pages/interactive/canvas-two-fingers/index\",\n      },\n    ],\n  },\n  {\n    name: \"画布交互\",\n    thumb: \"/images/icon/picker-view.png\",\n    nameEn: \"Canvas\",\n    detailList: [\n      {\n        name: \"缩放画布时固定元素\",\n        path: \"/package-interactive/pages/interactive/fix-item/index\",\n      },\n      {\n        name: \"拖拽画布时候隐藏\",\n        path: \"/package-interactive/pages/interactive/hide-item/index\",\n      },\n    ],\n  },\n];\n\nexport const aminationContainer = [\n  {\n    name: \"节点动画\",\n    thumb: \"/images/icon/nodeAminate.png\",\n    nameEn: \"NodeAnimate\",\n    detailList: [\n      {\n        name: \"节点动画\",\n        path: \"/package-animation/pages/animation/node-node/index\",\n      },\n    ],\n  },\n  {\n    name: \"边动画\",\n    thumb: \"/images/icon/edgeMove.png\",\n    nameEn: \"EdgeAnimate\",\n    detailList: [\n      {\n        name: \"圆点沿边运动\",\n        path: \"/package-animation/pages/animation/point-in-line/index\",\n      },\n      {\n        name: \"虚线运动\",\n        path: \"/package-animation/pages/animation/edge-edge/index\",\n      },\n      {\n        name: \"无到有的边\",\n        path: \"/package-animation/pages/animation/edge-line-growth/index\",\n      },\n    ],\n  },\n  {\n    name: \"状态切换\",\n    thumb: \"/images/icon/change.png\",\n    nameEn: \"Change\",\n    detailList: [\n      {\n        name: \"状态与动画\",\n        path: \"/package-animation/pages/animation/state-change-hover/index\",\n      },\n    ],\n  },\n  {\n    name: \"节点移动动画\",\n    thumb: \"/images/icon/nodeMove.png\",\n    nameEn: \"NodeMove\",\n    detailList: [\n      {\n        name: \"节点移动动画\",\n        path: \"/package-animation/pages/animation/change-position-default/index\",\n      },\n    ],\n  },\n  {\n    name: \"自定义动画\",\n    thumb: \"/images/icon/navigator.png\",\n    nameEn: \"CustomAminate\",\n    detailList: [\n      {\n        name: \"自定义动画\",\n        path: \"/package-animation/pages/animation/custom-animate-position/index\",\n      },\n    ],\n  },\n];\n\n// 下面是第二个tab内容\nexport const customizeTree = [\n  {\n    name: \"自定义树图\",\n    thumb: \"/images/icon/radial.png\",\n    nameEn: \"Custom\",\n    detailList: [\n      {\n        name: \"决策树\",\n        path: \"/package-scene-case/pages/scene-case/decision-tree/index\",\n      },\n      {\n        name: \"知识图谱树\",\n        path: \"/package-scene-case/pages/scene-case/knowledge-tree-graph/index\",\n      },\n    ],\n  },\n];\n\nexport const classicCace = [\n  {\n    name: \"经典案例\",\n    thumb: \"/images/icon/classic.png\",\n    nameEn: \"Classic\",\n    detailList: [\n      {\n        name: \"自定义流向图\",\n        path: \"/package-scene-case/pages/scene-case/custom-flow/index\",\n      },\n      // {\n      //   name: '桑基图',\n      //   path: '/package-scene-case/pages/scene-case/sankey/index',\n      // },\n      // {\n      //   name: '思维导图',\n      //   path: '/package-scene-case/pages/scene-case/mind-map/index',\n      // },\n      {\n        name: \"甜甜圈转账图\",\n        path: \"/package-scene-case/pages/scene-case/donut-transfer/index\",\n      },\n    ],\n  },\n];\n\nexport const newsMapVisualize = [\n  {\n    name: \"新闻图可视化\",\n    thumb: \"/images/icon/news.png\",\n    nameEn: \"News\",\n    detailList: [\n      {\n        name: \"地铁路线图\",\n        path: \"/package-scene-case/pages/scene-case/metro-lines/index\",\n      },\n    ],\n  },\n];\n\nexport const plugins = [\n  {\n    name: \"提示框\",\n    nameEn: \"Tooltip\",\n    detailList: [\n      {\n        name: \"Tooltip\",\n        path: \"/package-plugin/pages/plugin/tool-tip/index\",\n      },\n    ],\n  },\n  {\n    name: \"图例\",\n    nameEn: \"Legend\",\n    detailList: [\n      {\n        name: \"Legend\",\n        path: \"/package-plugin/pages/plugin/legend/index\",\n      },\n    ],\n  },\n  {\n    name: \"边过滤\",\n    nameEn: \"EdgeFilter\",\n    detailList: [\n      {\n        name: \"EdgeFilter\",\n        path: \"/package-plugin/pages/plugin/edge-filter/index\",\n      },\n    ],\n  },\n  {\n    name: \"鱼眼\",\n    nameEn: \"Fisheye\",\n    detailList: [\n      {\n        name: \"Fisheye\",\n        path: \"/package-plugin/pages/plugin/fish-eye/index\",\n      },\n    ],\n  },\n  {\n    name: \"时间轴\",\n    nameEn: \"Timebar\",\n    detailList: [\n      {\n        name: \"Timebar\",\n        path: \"/package-plugin/pages/plugin/time-bar/index\",\n      },\n    ],\n  },\n  {\n    name: \"缩放轴\",\n    nameEn: \"ZoomSlider\",\n    detailList: [\n      {\n        name: \"ZoomSlider\",\n        path: \"/package-plugin/pages/plugin/zoom-slider/index\",\n      },\n    ],\n  },\n  {\n    name: \"边绑定\",\n    nameEn: \"Bundling\",\n    detailList: [\n      {\n        name: \"Bundling\",\n        path: \"/package-plugin/pages/plugin/bundling/index\",\n      },\n    ],\n  },\n  {\n    name: \"上下文菜单\",\n    nameEn: \"Menu\",\n    detailList: [\n      {\n        name: \"Menu\",\n        path: \"/package-plugin/pages/plugin/menu/index\",\n      },\n    ],\n  },\n  {\n    name: \"对齐线\",\n    nameEn: \"SnapLine\",\n    detailList: [\n      {\n        name: \"SnapLine\",\n        path: \"/package-plugin/pages/plugin/snap-line/index\",\n      },\n    ],\n  },\n  {\n    name: \"miniMap\",\n    nameEn: \"miniMap\",\n    detailList: [\n      {\n        name: \"miniMap\",\n        path: \"/package-plugin/pages/plugin/mini-map/index\",\n      },\n    ],\n  },\n];\n"
  },
  {
    "path": "packages/examples-wx/utils/index.js",
    "content": "import { processDisplayData } from \"./util\";\n\nimport {\n  treeGraphContainer,\n  generalGraphContainer,\n  basicElementContainer,\n  basicInteractiveContainer,\n  aminationContainer,\n  customizeTree,\n  classicCace,\n  newsMapVisualize,\n  plugins,\n} from \"./data\";\n\nconst processed_treeGraphContainer = processDisplayData(treeGraphContainer);\nconst processed_generalGraphContainer = processDisplayData(\n  generalGraphContainer,\n);\nconst processed_basicElementContainer = processDisplayData(\n  basicElementContainer,\n);\nconst processed_basicInteractiveContainer = processDisplayData(\n  basicInteractiveContainer,\n);\nconst processed_aminationContainer = processDisplayData(aminationContainer);\nconst processed_customizeTree = processDisplayData(customizeTree);\nconst processed_classicCace = processDisplayData(classicCace);\nconst processed_newsMapVisualize = processDisplayData(newsMapVisualize);\nconst processed_plugins = processDisplayData(plugins);\n\n// 所有处理好的列表数据，用于展示\n// const list = processDisplayData(all_data)\n\nconst all_list = [\n  processed_treeGraphContainer,\n  processed_generalGraphContainer,\n  processed_basicElementContainer,\n  processed_basicInteractiveContainer,\n  processed_aminationContainer,\n  processed_customizeTree,\n  processed_classicCace,\n  processed_newsMapVisualize,\n  processed_plugins,\n];\n\nexport {\n  all_list,\n  processed_treeGraphContainer,\n  processed_generalGraphContainer,\n  processed_basicElementContainer,\n  processed_basicInteractiveContainer,\n  processed_aminationContainer,\n  processed_customizeTree,\n  processed_classicCace,\n  processed_newsMapVisualize,\n  processed_plugins,\n};\n"
  },
  {
    "path": "packages/examples-wx/utils/util.js",
    "content": "const formatTime = (date) => {\n  const year = date.getFullYear();\n  const month = date.getMonth() + 1;\n  const day = date.getDate();\n  const hour = date.getHours();\n  const minute = date.getMinutes();\n  const second = date.getSeconds();\n\n  return `${[year, month, day].map(formatNumber).join(\"/\")} ${[\n    hour,\n    minute,\n    second,\n  ]\n    .map(formatNumber)\n    .join(\":\")}`;\n};\n\nconst formatNumber = (n) => {\n  n = n.toString();\n  return n[1] ? n : `0${n}`;\n};\n\n// 对data.js中的列表数据进行处理\nconst processDisplayData = (displayContainers) => {\n  const containerResult = [];\n  displayContainers.forEach((container) => {\n    const { name, thumb, nameEn, detailList } = container;\n    const id = name + nameEn;\n    const pages = [];\n    detailList.forEach((obj) => {\n      pages.push(obj);\n    });\n\n    const list = {\n      id,\n      name,\n      nameEn,\n      open: false,\n      pages,\n      thumb,\n    };\n    containerResult.push(list);\n  });\n  return containerResult;\n};\n\nexport { formatTime, processDisplayData };\n"
  },
  {
    "path": "packages/f6/.storybook/main.ts",
    "content": "import * as path from \"path\";\n\nconst config = {\n  stories: [\n    \"../stories/**/*.mdx\",\n    \"../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)\",\n  ],\n  addons: [\n    \"@storybook/addon-onboarding\",\n    \"@storybook/addon-links\",\n    \"@storybook/addon-essentials\",\n    \"@chromatic-com/storybook\",\n    \"@storybook/addon-interactions\",\n    \"@storybook/preset-create-react-app\",\n  ],\n  framework: {\n    name: \"@storybook/react-vite\",\n    options: {},\n  },\n  core: {\n    builder: \"@storybook/builder-vite\",\n  },\n};\nexport default config;\n"
  },
  {
    "path": "packages/f6/.storybook/preview.ts",
    "content": "import { Preview } from \"@storybook/react\";\n\nimport {\n  INITIAL_VIEWPORTS,\n  MINIMAL_VIEWPORTS,\n} from \"@storybook/addon-viewport\";\n\nconst preview: Preview = {\n  parameters: {\n    viewport: {\n      viewports: {\n        ...INITIAL_VIEWPORTS,\n        ...MINIMAL_VIEWPORTS,\n      },\n      defaultViewport: \"iphone14promax\",\n    },\n  },\n};\n\nexport default preview;\n"
  },
  {
    "path": "packages/f6/package.json",
    "content": "{\n  \"name\": \"@antv/f6\",\n  \"version\": \"0.0.16\",\n  \"description\": \"A Mobile Graph Visualization Framework in JavaScript\",\n  \"keywords\": [\n    \"antv\",\n    \"f6\",\n    \"graph\",\n    \"graph analysis\",\n    \"graph editor\",\n    \"graph visualization\",\n    \"relational data\"\n  ],\n  \"homepage\": \"https://f6.antv.vision\",\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/F6/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/antvis/F6\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"https://github.com/orgs/antvis/people\",\n  \"main\": \"dist/cjs/index.cjs.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"files\": [\n    \"package.json\",\n    \"esm\",\n    \"lib\",\n    \"dist\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"scripts\": {\n    \"clean\": \"rimraf dist\",\n    \"storybook\": \"storybook dev\",\n    \"build\": \"vite build\"\n  },\n  \"dependencies\": {\n    \"@ant-design/colors\": \"^5.0.1\",\n    \"@antv/algorithm\": \"^0.1.8\",\n    \"@antv/chart-node-g6\": \"^0.0.3\",\n    \"@antv/dom-util\": \"^2.0.1\",\n    \"@antv/event-emitter\": \"~0.1.0\",\n    \"@antv/f6-core\": \"workspace:*\",\n    \"@antv/f6-element\": \"workspace:*\",\n    \"@antv/f6-ui\": \"workspace:*\",\n    \"@antv/f6-plugin\": \"workspace:*\",\n    \"@antv/g-math\": \"^0.1.1\",\n    \"@antv/g-mobile\": \"^0.0.13\",\n    \"@antv/hierarchy\": \"^0.6.2\",\n    \"@antv/layout\": \"0.1.14\",\n    \"@antv/matrix-util\": \"^3.0.4\",\n    \"@antv/path-util\": \"^2.0.3\",\n    \"@antv/scale\": \"^0.3.1\",\n    \"@antv/util\": \"~2.0.5\",\n    \"@react-docgen/cli\": \"^2.0.3\",\n    \"color\": \"^3.1.3\",\n    \"@babel/runtime\": \"~7.24.7\",\n    \"@antv/g-base\": \"~0.5.16\",\n    \"react-dom\": \"~18.3.1\",\n    \"react\": \"~18.3.1\",\n    \"@storybook/preset-create-react-app\": \"~8.1.10\"\n  },\n  \"devDependencies\": {\n    \"@storybook/react-vite\": \"~8.1.10\",\n    \"@storybook/builder-vite\": \"~8.1.10\",\n    \"@storybook/addon-actions\": \"^8.1.10\",\n    \"@storybook/addon-viewport\": \"^8.1.10\",\n    \"react-docgen-loader\": \"^2.9.1\",\n    \"react-docgen-typescript\": \"^2.2.2\",\n    \"@chromatic-com/storybook\": \"^1.5.0\",\n    \"@storybook/addon-essentials\": \"^8.1.10\",\n    \"@storybook/addon-interactions\": \"^8.1.10\",\n    \"@storybook/addon-links\": \"^8.1.10\",\n    \"@storybook/addon-onboarding\": \"^8.1.10\",\n    \"@storybook/addon-webpack5-compiler-swc\": \"^1.0.3\",\n    \"@storybook/blocks\": \"^8.1.10\",\n    \"@storybook/react\": \"^8.1.10\",\n    \"prop-types\": \"^15.8.1\",\n    \"storybook\": \"^8.1.10\",\n    \"vite\": \"~5.3.1\",\n    \"@vitejs/plugin-react\": \"~4.3.1\"\n  },\n  \"miniprogram\": \"dist\"\n}\n"
  },
  {
    "path": "packages/f6/src/behavior/activate-relations.ts",
    "content": "import { G6Event, IG6GraphEvent, INode } from \"@antv/f6-core\";\n\nexport default {\n  getDefaultCfg(): object {\n    return {\n      activeState: \"active\",\n      inactiveState: \"inactive\",\n      resetSelected: false,\n      shouldUpdate() {\n        return true;\n      },\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    return {\n      \"node:tap\": \"setAllItemStates\",\n      \"canvas:tap\": \"clearAllItemStates\",\n    };\n  },\n  setAllItemStates(e: IG6GraphEvent) {\n    const self = this;\n    const item: INode = e.item as INode;\n    const graph = self.graph;\n    self.item = item;\n    if (!self.shouldUpdate(e.item, { event: e, action: \"activate\" })) {\n      return;\n    }\n    const activeState = self.activeState;\n    const inactiveState = self.inactiveState;\n    const nodes = graph.getNodes();\n    const edges = graph.getEdges();\n    const nodeLength = nodes.length;\n    const edgeLength = edges.length;\n    for (let i = 0; i < nodeLength; i++) {\n      const node = nodes[i];\n      const hasSelected = node.hasState(\"selected\");\n      if (self.resetSelected) {\n        if (hasSelected) {\n          graph.setItemState(node, \"selected\", false);\n        }\n      }\n      graph.setItemState(node, activeState, false);\n      if (inactiveState) {\n        graph.setItemState(node, inactiveState, true);\n      }\n    }\n\n    for (let i = 0; i < edgeLength; i++) {\n      const edge = edges[i];\n      graph.setItemState(edge, activeState, false);\n      if (inactiveState) {\n        graph.setItemState(edge, inactiveState, true);\n      }\n    }\n\n    if (inactiveState) {\n      graph.setItemState(item, inactiveState, false);\n    }\n    graph.setItemState(item, activeState, true);\n\n    const rEdges = item.getEdges();\n    const rEdgeLegnth = rEdges.length;\n    for (let i = 0; i < rEdgeLegnth; i++) {\n      const edge = rEdges[i];\n      let otherEnd;\n      if (edge.getSource() === item) {\n        otherEnd = edge.getTarget();\n      } else {\n        otherEnd = edge.getSource();\n      }\n      if (inactiveState) {\n        graph.setItemState(otherEnd, inactiveState, false);\n      }\n      graph.setItemState(otherEnd, activeState, true);\n      graph.setItemState(edge, inactiveState, false);\n      graph.setItemState(edge, activeState, true);\n      edge.toFront();\n    }\n    graph.emit(\"afteractivaterelations\", { item: e.item, action: \"activate\" });\n  },\n  clearActiveState(e: any) {\n    const self = this;\n    const graph = self.get(\"graph\");\n    if (!self.shouldUpdate(e.item, { event: e, action: \"deactivate\" })) {\n      return;\n    }\n\n    const activeState = this.activeState;\n    const inactiveState = this.inactiveState;\n\n    const autoPaint = graph.get(\"autoPaint\");\n    graph.setAutoPaint(false);\n    const nodes = graph.getNodes();\n    const edges = graph.getEdges();\n    const nodeLength = nodes.length;\n    const edgeLength = edges.length;\n\n    for (let i = 0; i < nodeLength; i++) {\n      const node = nodes[i];\n      graph.clearItemStates(node, [activeState, inactiveState]);\n    }\n    for (let i = 0; i < edgeLength; i++) {\n      const edge = edges[i];\n      graph.clearItemStates(edge, [activeState, inactiveState, \"deactivate\"]);\n    }\n    graph.paint();\n    graph.setAutoPaint(autoPaint);\n    graph.emit(\"afteractivaterelations\", {\n      item: e.item || self.get(\"item\"),\n      action: \"deactivate\",\n    });\n  },\n  clearAllItemStates(e: any) {\n    const self = this;\n    const graph = self.graph;\n    if (!self.shouldUpdate(e.item, { event: e, action: \"deactivate\" })) {\n      return;\n    }\n\n    const activeState = this.activeState;\n    const inactiveState = this.inactiveState;\n\n    const nodes = graph.getNodes();\n    const edges = graph.getEdges();\n    const nodeLength = nodes.length;\n    const edgeLength = edges.length;\n\n    for (let i = 0; i < nodeLength; i++) {\n      const node = nodes[i];\n      graph.clearItemStates(node, [activeState, inactiveState]);\n    }\n    for (let i = 0; i < edgeLength; i++) {\n      const edge = edges[i];\n      graph.clearItemStates(edge, [activeState, inactiveState, \"deactivate\"]);\n    }\n\n    graph.emit(\"afteractivaterelations\", {\n      item: e.item || self.get(\"item\"),\n      action: \"deactivate\",\n    });\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/click-select.ts",
    "content": "import { each } from \"@antv/util\";\nimport { G6Event, IG6GraphEvent } from \"@antv/f6-core\";\n\nexport default {\n  getDefaultCfg(): object {\n    return {\n      multiple: true,\n      selectedState: \"selected\",\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    const self = this as any;\n\n    return {\n      \"node:tap\": \"onClick\",\n      \"combo:tap\": \"onClick\",\n      \"canvas:tap\": \"onCanvasClick\",\n    };\n  },\n  onClick(evt: IG6GraphEvent) {\n    const self = this;\n    const { item } = evt;\n    if (!item || item.destroyed) {\n      return;\n    }\n\n    const type = item.getType();\n    const { graph, multiple, shouldUpdate, shouldBegin } = self;\n    if (!shouldBegin.call(self, evt)) {\n      return;\n    }\n\n    // allow to select multiple nodes but did not press a key || do not allow the select multiple nodes\n    if (!multiple) {\n      const selected = graph.findAllByState(type, self.selectedState);\n      each(selected, (combo) => {\n        if (combo !== item) {\n          graph.setItemState(combo, self.selectedState, false);\n        }\n      });\n    }\n\n    if (item.hasState(self.selectedState)) {\n      if (shouldUpdate.call(self, evt)) {\n        graph.setItemState(item, self.selectedState, false);\n      }\n      const selectedNodes = graph.findAllByState(\"node\", self.selectedState);\n      const selectedCombos = graph.findAllByState(\"combo\", self.selectedState);\n      graph.emit(\"nodeselectchange\", {\n        target: item,\n        selectedItems: {\n          nodes: selectedNodes,\n          combos: selectedCombos,\n        },\n        select: false,\n      });\n    } else {\n      if (shouldUpdate.call(self, evt)) {\n        graph.setItemState(item, self.selectedState, true);\n      }\n      const selectedNodes = graph.findAllByState(\"node\", self.selectedState);\n      const selectedCombos = graph.findAllByState(\"combo\", self.selectedState);\n      graph.emit(\"nodeselectchange\", {\n        target: item,\n        selectedItems: {\n          nodes: selectedNodes,\n          combos: selectedCombos,\n        },\n        select: true,\n      });\n    }\n  },\n  onCanvasClick() {\n    const { graph } = this;\n    const selected = graph.findAllByState(\"node\", this.selectedState);\n    each(selected, (node) => {\n      graph.setItemState(node, this.selectedState, false);\n    });\n\n    const selectedCombos = graph.findAllByState(\"combo\", this.selectedState);\n    each(selectedCombos, (combo) => {\n      graph.setItemState(combo, this.selectedState, false);\n    });\n    graph.emit(\"nodeselectchange\", {\n      selectedItems: { nodes: [], edges: [], combos: [] },\n      select: false,\n    });\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/collapse-expand-combo.ts",
    "content": "/*\n * @Author: Shiwu\n * @Description: 收起和展开 Combo\n */\n\nimport { G6Event, IG6GraphEvent } from \"@antv/f6-core\";\n\nconst DEFAULT_TRIGGER = \"dblclick\";\nconst ALLOW_EVENTS = [\"click\", \"dblclick\"];\nexport default {\n  getDefaultCfg(): object {\n    return {\n      trigger: DEFAULT_TRIGGER,\n      relayout: true,\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    let trigger: string;\n    // 检测输入是否合法\n    if (ALLOW_EVENTS.includes(this.trigger)) {\n      trigger = this.trigger;\n    } else {\n      trigger = DEFAULT_TRIGGER;\n      // eslint-disable-next-line no-console\n      console.warn(\n        \"Behavior collapse-expand-group 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n      );\n    }\n    return {\n      [`combo:${trigger}`]: \"onComboClick\",\n    };\n  },\n  onComboClick(evt: IG6GraphEvent) {\n    const { item } = evt;\n    const { graph, relayout } = this;\n\n    if (!item || item.destroyed || item.getType() !== \"combo\") return;\n    const model = item.getModel();\n    const comboId = model.id;\n    if (!comboId) {\n      return;\n    }\n    graph.collapseExpandCombo(comboId);\n    if (relayout && graph.get(\"layout\")) graph.layout();\n    else graph.refreshPositions();\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/collapse-expand.ts",
    "content": "import { G6Event, IG6GraphEvent } from \"@antv/f6-core\";\n\nconst DEFAULT_TRIGGER = \"tap\";\nconst ALLOW_EVENTS = [\"tap\", \"dbltap\"];\nexport default {\n  getDefaultCfg(): object {\n    return {\n      /**\n       * 发生收缩/扩展变化时的回调\n       */\n      trigger: DEFAULT_TRIGGER,\n      onChange() {},\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    let trigger: string;\n    // 检测输入是否合法\n    if (ALLOW_EVENTS.includes(this.trigger)) {\n      ({ trigger } = this);\n    } else {\n      trigger = DEFAULT_TRIGGER;\n      // eslint-disable-next-line no-console\n      console.warn(\n        \"Behavior collapse-expand 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n      );\n    }\n    return {\n      [`node:${trigger}`]: \"onNodeTap\",\n      // 支持移动端事件\n      touchstart: \"onNodeTap\",\n    };\n  },\n  onNodeTap(e: IG6GraphEvent) {\n    const { item } = e;\n\n    // 如果节点进行过更新，model 会进行 merge，直接改 model 就不能改布局，所以需要去改源数据\n    const sourceData = this.graph.findDataById(item.get(\"id\"));\n    if (!sourceData) {\n      return;\n    }\n\n    const { children } = sourceData;\n    // 叶子节点的收缩和展开没有意义\n    if (!children || children.length === 0) {\n      return;\n    }\n    const collapsed = !sourceData.collapsed;\n    if (!this.shouldBegin(e, collapsed)) {\n      return;\n    }\n    sourceData.collapsed = collapsed;\n    item.getModel().collapsed = collapsed;\n    this.graph.emit(\"itemcollapsed\", { item: e.item, collapsed });\n    if (!this.shouldUpdate(e, collapsed)) {\n      return;\n    }\n    try {\n      this.onChange(item, collapsed);\n    } catch (err) {\n      // eslint-disable-next-line no-console\n      console.warn(err);\n    }\n    this.graph.layout();\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/create-edge.ts",
    "content": "import { G6Event, IG6GraphEvent, EdgeConfig } from \"@antv/f6-core\";\nimport { IGraph } from \"../interface/graph\";\n\nconst DEFAULT_TRIGGER = \"tap\";\nconst ALLOW_EVENTS = [\"tap\", \"drag\"];\nconst DEFAULT_KEY = undefined;\nconst ALLOW_KEYS = [\"shift\", \"ctrl\", \"control\", \"alt\", \"meta\", undefined];\n\nexport default {\n  getDefaultCfg(): object {\n    return {\n      trigger: DEFAULT_TRIGGER,\n      key: DEFAULT_KEY,\n      edgeConfig: {},\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    const self = this as any;\n    // 检测输入是否合法\n    if (!(ALLOW_EVENTS.indexOf(self.trigger.toLowerCase()) > -1)) {\n      self.trigger = DEFAULT_TRIGGER;\n      // eslint-disable-next-line no-console\n      console.warn(\n        \"Behavior create-edge 的 trigger 参数不合法，请输入 'click'，'drag'\",\n      );\n    }\n    if (self.key && ALLOW_KEYS.indexOf(self.key.toLowerCase()) === -1) {\n      self.trigger = DEFAULT_KEY;\n      // eslint-disable-next-line no-console\n      console.warn(\n        \"Behavior create-edge 的 key 参数不合法，请输入 'shift'，'ctrl'，'alt'，'control'，或 undefined\",\n      );\n    }\n    let events;\n    if (self.trigger === \"drag\") {\n      events = {\n        \"node:dragstart\": \"onClick\",\n        \"combo:dragstart\": \"onClick\",\n        drag: \"updateEndPoint\",\n        \"node:drop\": \"onClick\",\n        \"combo:drop\": \"onClick\",\n        dragend: \"onDragEnd\",\n      };\n    } else if (self.trigger === \"click\") {\n      events = {\n        \"node:tap\": \"onClick\", // The event is node:click, the responsing function is onClick\n        mousemove: \"updateEndPoint\", // The event is mousemove, the responsing function is onMousemove\n        \"edge:tap\": \"cancelCreating\", // The event is edge:click, the responsing function is onEdgeClick\n        \"canvas:tap\": \"cancelCreating\",\n        \"combo:tap\": \"onClick\",\n      };\n    }\n    if (self.key) {\n      events.keydown = \"onKeyDown\";\n      events.keyup = \"onKeyUp\";\n    }\n    return events;\n  },\n  onDragEnd(ev: IG6GraphEvent) {\n    const self = this;\n    if (self.key && !self.keydown) return;\n    const { item } = ev;\n    if (!item || item.getID() === self.source || item.getType() !== \"node\")\n      self.cancelCreating({\n        item: self.edge,\n        x: ev.x,\n        y: ev.y,\n      });\n  },\n  // 如果边的起点没有指定，则根据起点创建新边；如果起点已经指定而终点未指定，则指定终点\n  onClick(ev: IG6GraphEvent) {\n    const self = this;\n    if (self.key && !self.keydown) return;\n    const node = ev.item;\n    const graph: IGraph = self.graph;\n    const model = node.getModel();\n    // 如果起点已经指定而终点未指定，则指定终点\n    if (self.addingEdge && self.edge) {\n      if (!self.shouldEnd.call(self, ev)) return;\n      const updateCfg: EdgeConfig = {\n        target: model.id,\n      };\n      if (self.source === model.id) {\n        updateCfg.type = \"loop\";\n      }\n\n      graph.emit(\"beforecreateedge\", {});\n\n      graph.updateItem(self.edge, updateCfg);\n\n      graph.emit(\"aftercreateedge\", {\n        edge: self.edge,\n      });\n\n      // 暂时将该边的 capture 恢复为 true\n      self.edge.getKeyShape().set(\"capture\", true);\n\n      self.edge = null;\n      self.addingEdge = false;\n    } else {\n      // 如果边的起点没有指定，则根据起点创建新边\n      if (!self.shouldBegin.call(self, ev)) return;\n      self.edge = graph.addItem(\n        \"edge\",\n        {\n          source: model.id,\n          target: model.id,\n          ...self.edgeConfig,\n        },\n        false,\n      );\n      self.source = model.id;\n      self.addingEdge = true;\n      // 暂时将该边的 capture 设置为 false，这样可以拾取到后面的元素\n      self.edge.getKeyShape().set(\"capture\", false);\n    }\n  },\n  // 边的起点已经确定，边的末端跟随鼠标移动\n  updateEndPoint(ev: IG6GraphEvent) {\n    const self = this;\n    if (self.key && !self.keydown) return;\n    const point = { x: ev.x, y: ev.y };\n\n    // 若此时 source 节点已经被移除，结束添加边\n    if (!self.graph.findById(self.source)) {\n      self.addingEdge = false;\n      return;\n    }\n    if (self.addingEdge && self.edge) {\n      // 更新边的终点为鼠标位置\n      self.graph.updateItem(\n        self.edge,\n        {\n          target: point,\n        },\n        false,\n      );\n    }\n  },\n  // 取消增加边，删除该边；或指定终点\n  cancelCreating(ev: IG6GraphEvent) {\n    const self = this;\n    if (self.key && !self.keydown) return;\n    const graph: IGraph = self.graph;\n    const currentEdge = ev.item;\n    if (\n      self.addingEdge &&\n      ev.target &&\n      ev.target.isCanvas &&\n      ev.target.isCanvas()\n    ) {\n      graph.removeItem(self.edge, false);\n      self.edge = null;\n      self.addingEdge = false;\n      return;\n    }\n    if (self.addingEdge && self.edge === currentEdge) {\n      let cancelEdge = true;\n      // !graph.get('groupByTypes') 将会导致选中终点时实际上边在最上层，节点无法响应 click 事件\n      if (!graph.get(\"groupByTypes\")) {\n        // 此时需要判断点击的位置是否在节点范围内，若在，则指定终点。否则取消增加边\n        const { x, y } = ev;\n        const nodes = graph.getNodes();\n        const length = nodes.length;\n        for (let i = 0; i < length; i++) {\n          const node = nodes[i];\n          const model = node.getModel();\n          const nodeBBox = node.getBBox();\n          if (\n            x <= nodeBBox.maxX &&\n            x >= nodeBBox.minX &&\n            y <= nodeBBox.maxY &&\n            y >= nodeBBox.minY\n          ) {\n            if (\n              !self.shouldEnd.call(self, {\n                x: ev.x,\n                y: ev.y,\n                canvasX: ev.canvasX,\n                canvasY: ev.canvasY,\n                clientX: ev.clientX,\n                clientY: ev.clientY,\n                item: node,\n              })\n            ) {\n              return;\n            }\n\n            graph.emit(\"beforecreateedge\", {});\n\n            graph.updateItem(self.edge, {\n              target: model.id,\n            });\n            graph.emit(\"aftercreateedge\", {\n              edge: self.edge,\n            });\n            cancelEdge = false;\n            break;\n          }\n        }\n      }\n      if (cancelEdge) graph.removeItem(self.edge, false);\n      self.edge = null;\n      self.addingEdge = false;\n    }\n  },\n\n  onKeyDown(e: IG6GraphEvent) {\n    const self = this;\n    const code = e.key;\n    if (!code) {\n      return;\n    }\n    if (code.toLowerCase() === self.key.toLowerCase()) {\n      self.keydown = true;\n    } else {\n      self.keydown = false;\n    }\n  },\n  onKeyUp() {\n    const self = this;\n    if (self.addingEdge && self.edge) {\n      // 清除正在增加的边\n      self.graph.removeItem(self.edge, false);\n      self.addingEdge = false;\n      self.edge = null;\n    }\n    this.keydown = false;\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/drag-canvas.ts",
    "content": "import { G6Event, IG6GraphEvent } from \"@antv/f6-core\";\nimport { IGraph } from \"../interface/graph\";\nimport Util from \"../util\";\n\nconst { cloneEvent, isNaN } = Util;\n\nconst { abs } = Math;\nconst DRAG_OFFSET = 10;\n\nexport default {\n  getDefaultCfg(): object {\n    return {\n      direction: \"both\",\n      enableOptimize: false,\n      // drag-canvas 可拖动的扩展范围，默认为 0，即最多可以拖动一屏的位置\n      // 当设置的值大于 0 时，即拖动可以超过一屏\n      // 当设置的值小于 0 时，相当于缩小了可拖动范围\n      // 具体实例可参考：https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IFfoS67_HssAAAAAAAAAAAAAARQnAQ\n      scalableRange: 0,\n      allowDragOnItem: false,\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    return {\n      dragstart: \"onDragStart\",\n      drag: \"onDragMove\",\n      dragend: \"onDragEnd\",\n    };\n  },\n  updateViewport(e: IG6GraphEvent) {\n    const { origin } = this;\n    const clientX = +e.clientX;\n    const clientY = +e.clientY;\n\n    if (isNaN(clientX) || isNaN(clientY)) {\n      return;\n    }\n    let dx = clientX - origin.x;\n    let dy = clientY - origin.y;\n\n    if (this.get(\"direction\") === \"x\") {\n      dy = 0;\n    } else if (this.get(\"direction\") === \"y\") {\n      dx = 0;\n    }\n    this.origin = {\n      x: clientX,\n      y: clientY,\n    };\n    const width = this.graph.get(\"width\");\n    const height = this.graph.get(\"height\");\n    const graphCanvasBBox = this.graph.get(\"canvas\").getCanvasBBox();\n\n    if (\n      (graphCanvasBBox.minX <= width + this.scalableRange &&\n        graphCanvasBBox.minX + dx > width + this.scalableRange) ||\n      (graphCanvasBBox.maxX + this.scalableRange >= 0 &&\n        graphCanvasBBox.maxX + this.scalableRange + dx < 0)\n    ) {\n      dx = 0;\n    }\n    if (\n      (graphCanvasBBox.minY <= height + this.scalableRange &&\n        graphCanvasBBox.minY + dy > height + this.scalableRange) ||\n      (graphCanvasBBox.maxY + this.scalableRange >= 0 &&\n        graphCanvasBBox.maxY + this.scalableRange + dy < 0)\n    ) {\n      dy = 0;\n    }\n    this.graph.translate(dx, dy);\n  },\n  onDragStart(e: IG6GraphEvent) {\n    const self = this as any;\n    const event = e.originalEvent as Event;\n    if (!this.shouldBegin.call(this, e)) {\n      return;\n    }\n\n    const target = e.target;\n    const targetIsCanvas = target && target.isCanvas && target.isCanvas();\n    if (!this.allowDragOnItem && !targetIsCanvas) return;\n\n    self.origin = { x: e.clientX, y: e.clientY };\n    self.dragging = false;\n\n    if (this.enableOptimize) {\n      // 拖动 canvas 过程中隐藏所有的边及label\n      const graph: IGraph = this.graph;\n      const edges = graph.getEdges();\n      for (let i = 0, len = edges.length; i < len; i++) {\n        const shapes = edges[i].get(\"group\").get(\"children\");\n        if (!shapes) continue;\n        shapes.forEach((shape) => {\n          shape.set(\n            \"ori-visibility\",\n            shape.get(\"ori-visibility\") || shape.get(\"visible\"),\n          );\n          shape.hide();\n        });\n      }\n      const nodes = graph.getNodes();\n      for (let j = 0, nodeLen = nodes.length; j < nodeLen; j++) {\n        const container = nodes[j].getContainer();\n        const children = container.get(\"children\");\n        for (const child of children) {\n          const isKeyShape = child.get(\"isKeyShape\");\n          if (!isKeyShape) {\n            child.set(\n              \"ori-visibility\",\n              child.get(\"ori-visibility\") || child.get(\"visible\"),\n            );\n            child.hide();\n          }\n        }\n      }\n    }\n  },\n\n  onDragMove(e: IG6GraphEvent) {\n    const { graph } = this;\n    const target = e.target;\n    const targetIsCanvas = target && target.isCanvas && target.isCanvas();\n    if (!this.allowDragOnItem && !targetIsCanvas) return;\n\n    e = cloneEvent(e);\n    if (!this.origin) {\n      return;\n    }\n\n    if (!this.dragging) {\n      if (\n        abs(this.origin.x - e.clientX) + abs(this.origin.y - e.clientY) <\n        DRAG_OFFSET\n      ) {\n        return;\n      }\n      if (this.shouldBegin.call(this, e)) {\n        e.type = \"dragstart\";\n        this.dragging = true;\n      }\n    }\n    if (this.shouldUpdate.call(this, e)) {\n      this.updateViewport(e);\n    }\n  },\n  onDragEnd(e: IG6GraphEvent) {\n    const { graph } = this;\n\n    if (this.enableOptimize) {\n      // 拖动结束后显示所有的边\n      const edges = graph.getEdges();\n      for (let i = 0, len = edges.length; i < len; i++) {\n        const shapes = edges[i].get(\"group\").get(\"children\");\n        if (!shapes) continue;\n        shapes.forEach((shape) => {\n          const oriVis = shape.get(\"ori-visibility\");\n          if (oriVis) shape.show();\n        });\n      }\n      const nodes = graph.getNodes();\n      for (let j = 0, nodeLen = nodes.length; j < nodeLen; j++) {\n        const container = nodes[j].getContainer();\n        const children = container.get(\"children\");\n        for (const child of children) {\n          const isKeyShape = child.get(\"isKeyShape\");\n          if (!isKeyShape) {\n            const oriVis = child.get(\"ori-visibility\");\n            if (oriVis) child.show();\n          }\n        }\n      }\n    }\n\n    if (!this.dragging) {\n      this.origin = null;\n      return;\n    }\n\n    e = cloneEvent(e);\n\n    if (this.shouldEnd.call(this, e)) {\n      this.updateViewport(e);\n    }\n    e.type = \"dragend\";\n    // graph.emit('canvas:dragend', e);\n    this.endDrag();\n  },\n  endDrag() {\n    this.origin = null;\n    this.dragging = false;\n    this.dragbegin = false;\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/drag-combo.ts",
    "content": "/*\n * @Author: moyee\n * @LastEditors: moyee\n * @Description: 拖动 Combo\n */\nimport { each } from \"@antv/util\";\nimport { IGroup } from \"@antv/g-base\";\nimport {\n  G6Event,\n  IG6GraphEvent,\n  Item,\n  ComboConfig,\n  ICombo,\n  INode,\n} from \"@antv/f6-core\";\nimport { IGraph } from \"../interface/graph\";\nimport Util from \"../util\";\nimport Global from \"../global\";\n\nconst { calculationItemsBBox } = Util;\n\n/**\n * 遍历拖动的 Combo 下的所有 Combo\n * @param data 拖动的 Combo\n * @param fn\n */\nconst traverseCombo = (data, fn: (param: any) => boolean) => {\n  if (fn(data) === false) {\n    return;\n  }\n\n  if (data) {\n    const combos = data.get(\"combos\");\n    if (combos.length === 0) {\n      return false;\n    }\n    each(combos, (child) => {\n      traverseCombo(child, fn);\n    });\n  }\n};\n\nexport default {\n  getDefaultCfg() {\n    return {\n      enableDelegate: false,\n      delegateStyle: {},\n      // 拖动节点过程中是否只改变 Combo 的大小，而不改变其结构\n      onlyChangeComboSize: false,\n      // 拖动过程中目标 combo 状态样式\n      activeState: \"\",\n      selectedState: \"selected\",\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    return {\n      \"combo:dragstart\": \"onDragStart\",\n      \"combo:drag\": \"onDrag\",\n      \"combo:dragend\": \"onDragEnd\",\n      \"combo:drop\": \"onDrop\",\n      \"node:drop\": \"onNodeDrop\",\n      \"combo:dragenter\": \"onDragEnter\",\n      \"combo:dragleave\": \"onDragLeave\",\n    };\n  },\n  validationCombo(evt: IG6GraphEvent) {\n    const { item } = evt;\n    if (!item || item.destroyed) {\n      return false;\n    }\n\n    if (!this.shouldUpdate(this, evt)) {\n      return false;\n    }\n\n    const type = item.getType();\n\n    if (type !== \"combo\") {\n      return false;\n    }\n    return true;\n  },\n  onDragStart(evt: IG6GraphEvent) {\n    const graph: IGraph = this.graph;\n    const { item } = evt;\n\n    if (!this.validationCombo(evt)) return;\n\n    this.targets = [];\n\n    // 获取所有选中的 Combo\n    const combos = graph.findAllByState(\"combo\", this.selectedState);\n\n    const currentCombo = item.get(\"id\");\n\n    const dragCombos = combos.filter((combo) => {\n      const comboId = combo.get(\"id\");\n      return currentCombo === comboId;\n    });\n\n    if (dragCombos.length === 0) {\n      this.targets.push(item);\n    } else {\n      this.targets = combos;\n    }\n\n    if (this.activeState) {\n      this.targets.map((combo: ICombo) => {\n        const model = combo.getModel() as ComboConfig;\n        if (model.parentId) {\n          const parentCombo = graph.findById(model.parentId);\n          if (parentCombo) {\n            graph.setItemState(parentCombo, this.activeState, true);\n          }\n        }\n      });\n    }\n\n    this.point = {};\n    this.originPoint = {};\n\n    this.origin = {\n      x: evt.x,\n      y: evt.y,\n    };\n\n    this.currentItemChildCombos = [];\n\n    traverseCombo(item, (param) => {\n      if (param.destroyed) {\n        return false;\n      }\n      const model = param.getModel();\n      this.currentItemChildCombos.push(model.id);\n      return true;\n    });\n  },\n  onDrag(evt: IG6GraphEvent) {\n    if (!this.origin) {\n      return;\n    }\n\n    if (!this.validationCombo(evt)) return;\n\n    if (this.enableDelegate) {\n      this.updateDelegate(evt);\n    } else {\n      if (this.activeState) {\n        const graph: IGraph = this.graph;\n        const item: Item = evt.item;\n        const model = item.getModel();\n        // 拖动过程中实时计算距离\n        const combos = graph.getCombos();\n        const sourceBBox = item.getBBox();\n\n        const { centerX, centerY, width } = sourceBBox;\n\n        // 参与计算的 Combo，需要排除掉：\n        // 1、拖动 combo 自己\n        // 2、拖动 combo 的 parent\n        // 3、拖动 Combo 的 children\n\n        const calcCombos = combos.filter((combo) => {\n          const cmodel = combo.getModel() as ComboConfig;\n          // 被拖动的是最外层的 Combo，无 parent，排除自身和子元素\n          if (!model.parentId) {\n            return (\n              cmodel.id !== model.id &&\n              !this.currentItemChildCombos.includes(cmodel.id)\n            );\n          }\n          return (\n            cmodel.id !== model.id &&\n            !this.currentItemChildCombos.includes(cmodel.id)\n          );\n        });\n\n        calcCombos.map((combo) => {\n          const { centerX: cx, centerY: cy, width: w } = combo.getBBox();\n\n          // 拖动的 combo 和要进入的 combo 之间的距离\n          const disX = centerX - cx;\n          const disY = centerY - cy;\n          // 圆心距离\n          const distance = 2 * Math.sqrt(disX * disX + disY * disY);\n\n          if (width + w - distance > 0.8 * width) {\n            graph.setItemState(combo, this.activeState, true);\n          } else {\n            graph.setItemState(combo, this.activeState, false);\n          }\n        });\n      }\n\n      each(this.targets, (item) => {\n        this.updateCombo(item, evt);\n      });\n    }\n  },\n\n  updatePositions(evt: IG6GraphEvent) {\n    // 当启用 delegate 时，拖动结束时需要更新 combo\n    if (this.enableDelegate) {\n      each(this.targets, (item) => {\n        this.updateCombo(item, evt);\n      });\n    }\n  },\n\n  onDrop(evt: IG6GraphEvent) {\n    // 被放下的目标 combo\n    const { item } = evt;\n    if (!item || !this.targets || item.destroyed) {\n      return;\n    }\n    this.updatePositions(evt);\n\n    const graph: IGraph = this.graph;\n\n    const targetModel = item.getModel();\n\n    this.targets.map((combo: ICombo) => {\n      const model = combo.getModel();\n      if (model.parentId !== targetModel.id) {\n        if (this.activeState) {\n          graph.setItemState(item, this.activeState, false);\n        }\n        // 将 Combo 放置到某个 Combo 上面时，只有当 onlyChangeComboSize 为 false 时候才更新 Combo 结构\n        if (!this.onlyChangeComboSize) {\n          graph.updateComboTree(combo, targetModel.id);\n        } else {\n          graph.updateCombo(combo);\n        }\n      } else {\n        graph.updateCombo(item as ICombo);\n      }\n    });\n\n    this.end(item, evt);\n\n    // 如果已经拖放下了，则不需要再通过距离判断了\n    this.endComparison = true;\n  },\n  onNodeDrop(evt: IG6GraphEvent) {\n    if (!this.targets || this.targets.length === 0) return;\n    this.updatePositions(evt);\n    const graph: IGraph = this.graph;\n\n    const item = evt.item as INode;\n    const comboId = item.getModel().comboId as string;\n    let droppedCombo;\n    // 如果被放置的的节点有 comboId，且这个 comboId 与正在被拖拽的 combo 的父 id 不相同，则更新父亲为 comboId\n    if (comboId) {\n      if (this.activeState) {\n        const combo = graph.findById(comboId);\n        graph.setItemState(combo, this.activeState, false);\n      }\n      this.targets.map((combo: ICombo) => {\n        if (!this.onlyChangeComboSize) {\n          if (comboId !== combo.getID()) {\n            droppedCombo = graph.findById(comboId);\n            if (comboId !== combo.getModel().parentId)\n              graph.updateComboTree(combo, comboId);\n          }\n        } else {\n          graph.updateCombo(combo);\n        }\n      });\n    } else {\n      // 如果被放置的节点没有 comboId，且正在被拖拽的 combo 有父 id，则更新父亲为 undefined\n      this.targets.map((combo: ICombo) => {\n        if (!this.onlyChangeComboSize) {\n          const model = combo.getModel();\n          if (model.comboId) {\n            graph.updateComboTree(combo);\n          }\n        } else {\n          graph.updateCombo(combo);\n        }\n      });\n    }\n\n    // 如果已经拖放下了，则不需要再通过距离判断了\n    this.endComparison = true;\n    this.end(droppedCombo, evt);\n  },\n  onDragEnter(evt: IG6GraphEvent) {\n    if (!this.origin) {\n      return;\n    }\n\n    if (!this.validationCombo(evt)) return;\n\n    const { item } = evt;\n    const graph: IGraph = this.graph;\n    if (this.activeState) {\n      graph.setItemState(item, this.activeState, true);\n    }\n  },\n  onDragLeave(evt) {\n    if (!this.origin) {\n      return;\n    }\n\n    if (!this.validationCombo(evt)) return;\n\n    const item = evt.item as ICombo;\n    const graph: IGraph = this.graph;\n    if (this.activeState) {\n      graph.setItemState(item, this.activeState, false);\n    }\n  },\n  onDragEnd(evt: IG6GraphEvent) {\n    if (!this.targets || this.targets.length === 0) return;\n    const item = evt.item;\n    this.updatePositions(evt);\n    const parentCombo = this.getParentCombo(item.getModel().parentId);\n    const graph: IGraph = this.graph;\n    if (parentCombo && this.activeState) {\n      graph.setItemState(parentCombo, this.activeState, false);\n    }\n    this.end(undefined, evt);\n  },\n\n  end(comboDropedOn: ICombo | undefined, evt: IG6GraphEvent) {\n    if (!this.origin) return;\n    const graph: IGraph = this.graph;\n\n    // 删除delegate shape\n    if (this.delegateShape) {\n      const delegateGroup = graph.get(\"delegateGroup\");\n      delegateGroup.clear();\n      this.delegateShape = null;\n    }\n\n    if (comboDropedOn && this.activeState) {\n      graph.setItemState(comboDropedOn, this.activeState, false);\n    }\n    // 若没有被放置的 combo，则是被放置在画布上\n    if (!comboDropedOn) {\n      this.targets.map((combo: ICombo) => {\n        // 将 Combo 放置到某个 Combo 上面时，只有当 onlyChangeComboSize 为 false 时候才更新 Combo 结构\n        if (!this.onlyChangeComboSize) {\n          graph.updateComboTree(combo);\n        } else {\n          graph.updateCombo(combo);\n        }\n      });\n    }\n\n    this.point = [];\n    this.origin = null;\n    this.originPoint = null;\n    this.targets.length = 0;\n  },\n\n  /**\n   * 遍历 comboTree，分别更新 node 和 combo\n   * @param data\n   * @param fn\n   */\n  traverse<T extends Item>(data: T, fn: (param: T) => boolean) {\n    if (fn(data) === false) {\n      return;\n    }\n\n    if (data) {\n      const combos = data.get(\"combos\");\n      each(combos, (child) => {\n        this.traverse(child, fn);\n      });\n\n      const nodes = data.get(\"nodes\");\n      each(nodes, (child) => {\n        this.traverse(child, fn);\n      });\n    }\n  },\n\n  updateCombo(item: ICombo, evt: IG6GraphEvent) {\n    this.traverse(item, (param) => {\n      if (param.destroyed) {\n        return false;\n      }\n      this.updateSignleItem(param, evt);\n      return true;\n    });\n  },\n\n  /**\n   *\n   * @param item 当前正在拖动的元素\n   * @param evt\n   */\n  updateSignleItem(item: Item, evt: IG6GraphEvent) {\n    const { origin } = this;\n    const graph: IGraph = this.graph;\n    const model = item.getModel() as ComboConfig;\n    const itemId = item.get(\"id\");\n\n    if (!this.point[itemId]) {\n      this.point[itemId] = {\n        x: model.x,\n        y: model.y,\n      };\n    }\n\n    const x: number = evt.x - origin.x + this.point[itemId].x;\n    const y: number = evt.y - origin.y + this.point[itemId].y;\n\n    graph.updateItem(item, { x, y });\n  },\n\n  /**\n   * 根据 ID 获取父 Combo\n   * @param parentId 父 Combo ID\n   */\n  getParentCombo(parentId: string): ICombo | undefined {\n    const graph: IGraph = this.graph;\n    if (!parentId) {\n      return undefined;\n    }\n\n    const parentCombo = graph.findById(parentId) as ICombo;\n    if (!parentCombo) {\n      return undefined;\n    }\n\n    return parentCombo;\n  },\n\n  updateDelegate(evt: IG6GraphEvent) {\n    const graph: IGraph = this.graph;\n    // 当没有 delegate shape 时创建\n    if (!this.delegateShape) {\n      const delegateGroup: IGroup = graph.get(\"delegateGroup\");\n\n      let bbox = null;\n      if (this.targets.length > 1) {\n        bbox = calculationItemsBBox(this.targets);\n      } else {\n        bbox = this.targets[0].getBBox();\n      }\n\n      const { x, y, width, height, minX, minY } = bbox;\n\n      this.originPoint = { x, y, width, height, minX, minY };\n\n      const attrs = { ...Global.delegateStyle, ...this.delegateStyle };\n\n      this.delegateShape = delegateGroup.addShape(\"rect\", {\n        attrs: {\n          width: bbox.width,\n          height: bbox.height,\n          x: bbox.x,\n          y: bbox.y,\n          ...attrs,\n        },\n        name: \"combo-delegate-shape\",\n      });\n    } else {\n      const clientX = evt.x - this.origin.x + this.originPoint.minX;\n      const clientY = evt.y - this.origin.y + this.originPoint.minY;\n\n      this.delegateShape.attr({\n        x: clientX,\n        y: clientY,\n      });\n    }\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/drag-node.ts",
    "content": "/*\n * @Author: moyee\n * @Date: 2019-06-27 18:12:06\n * @LastEditors: moyee\n * @LastEditTime: 2019-08-22 18:41:45\n * @Description: 拖动节点的Behavior\n */\nimport { Point } from \"@antv/g-base\";\nimport { deepMix, clone } from \"@antv/util\";\nimport {\n  G6Event,\n  IG6GraphEvent,\n  Item,\n  NodeConfig,\n  INode,\n  ICombo,\n} from \"@antv/f6-core\";\nimport { IGraph } from \"../interface/graph\";\nimport Global from \"../global\";\n\nexport default {\n  getDefaultCfg(): object {\n    return {\n      updateEdge: true,\n      delegateStyle: {},\n      // 是否开启delegate\n      enableDelegate: false,\n      // 拖动节点过程中是否只改变 Combo 的大小，而不改变其结构\n      onlyChangeComboSize: false,\n      // 拖动过程中目标 combo 状态样式\n      comboActiveState: \"\",\n      selectedState: \"selected\",\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    return {\n      \"node:dragstart\": \"onDragStart\",\n      \"node:drag\": \"onDrag\",\n      \"node:dragend\": \"onDragEnd\",\n      \"combo:dragenter\": \"onDragEnter\",\n      \"combo:dragleave\": \"onDragLeave\",\n      \"combo:drop\": \"onDropCombo\",\n      \"node:drop\": \"onDropNode\",\n      \"canvas:drop\": \"onDropCanvas\",\n    };\n  },\n  validationCombo(item: ICombo) {\n    if (!this.origin || !item || item.destroyed) {\n      return false;\n    }\n\n    const type = item.getType();\n    if (type !== \"combo\") {\n      return false;\n    }\n    return true;\n  },\n  /**\n   * 开始拖动节点\n   * @param evt\n   */\n  onDragStart(evt: IG6GraphEvent) {\n    if (!this.shouldBegin.call(this, evt)) {\n      return;\n    }\n\n    const item: INode = evt.item as INode;\n    if (!item || item.destroyed || item.hasLocked()) {\n      return;\n    }\n\n    // 如果拖动的target 是linkPoints / anchorPoints 则不允许拖动\n    const { target } = evt;\n    if (target) {\n      const isAnchorPoint = target.get(\"isAnchorPoint\");\n      if (isAnchorPoint) {\n        return;\n      }\n    }\n\n    const { graph } = this;\n\n    this.targets = [];\n\n    // 将节点拖入到指定的 Combo\n    this.targetCombo = null;\n\n    // 获取所有选中的元素\n    const nodes = graph.findAllByState(\"node\", this.selectedState);\n\n    const currentNodeId = item.get(\"id\");\n\n    // 当前拖动的节点是否是选中的节点\n    const dragNodes = nodes.filter((node) => {\n      const nodeId = node.get(\"id\");\n      return currentNodeId === nodeId;\n    });\n\n    // 只拖动当前节点\n    if (dragNodes.length === 0) {\n      this.targets.push(item);\n    } else if (nodes.length > 1) {\n      // 拖动多个节点\n      nodes.forEach((node) => {\n        const locked = node.hasLocked();\n        if (!locked) {\n          this.targets.push(node);\n        }\n      });\n    } else {\n      this.targets.push(item);\n    }\n    const beforeDragNodes = [];\n    this.targets.forEach((t) => {\n      beforeDragNodes.push(clone(t.getModel()));\n    });\n    this.set(\"beforeDragNodes\", beforeDragNodes);\n\n    this.origin = {\n      x: evt.x,\n      y: evt.y,\n    };\n\n    this.point = {};\n    this.originPoint = {};\n  },\n\n  /**\n   * 持续拖动节点\n   * @param evt\n   */\n  onDrag(evt: IG6GraphEvent) {\n    if (!this.origin) {\n      return;\n    }\n\n    if (!this.shouldUpdate(this, evt)) {\n      return;\n    }\n\n    if (this.get(\"enableDelegate\")) {\n      this.updateDelegate(evt);\n    } else {\n      this.targets.map((target) => {\n        this.update(target, evt);\n      });\n    }\n  },\n  /**\n   * 拖动结束，设置拖动元素capture为true，更新元素位置，如果是拖动涉及到 combo，则更新 combo 结构\n   * @param evt\n   */\n  onDragEnd(evt: IG6GraphEvent) {\n    if (!this.origin || !this.shouldEnd.call(this, evt)) {\n      return;\n    }\n\n    // 拖动结束后，设置拖动元素 group 的 capture 为 true，允许拾取拖动元素\n    const item = evt.item as INode;\n    if (item) {\n      const group = item.getContainer();\n      group.set(\"capture\", true);\n    }\n\n    if (this.delegateRect) {\n      this.delegateRect.remove();\n      this.delegateRect = null;\n    }\n\n    this.updatePositions(evt);\n\n    const graph: IGraph = this.graph;\n\n    // 拖动结束后，入栈\n    if (graph.get(\"enabledStack\")) {\n      const stackData = {\n        before: { nodes: this.get(\"beforeDragNodes\"), edges: [], combos: [] },\n        after: { nodes: [], edges: [], combos: [] },\n      };\n\n      this.targets.forEach((target) => {\n        stackData.after.nodes.push(target.getModel());\n      });\n      graph.pushStack(\"update\", clone(stackData));\n    }\n\n    // 拖动结束后emit事件，将当前操作的节点抛出去，目标节点为null\n    graph.emit(\"dragnodeend\", {\n      items: this.targets,\n      targetItem: null,\n    });\n\n    this.point = {};\n    this.origin = null;\n    this.originPoint = {};\n    this.targets.length = 0;\n    this.targetCombo = null;\n  },\n  /**\n   * 拖动过程中将节点放置到 combo 上\n   * @param evt\n   */\n  onDropCombo(evt: IG6GraphEvent) {\n    const item = evt.item as ICombo;\n    if (!this.validationCombo(item)) return;\n\n    this.updatePositions(evt);\n\n    const graph: IGraph = this.graph;\n\n    if (this.comboActiveState) {\n      graph.setItemState(item, this.comboActiveState, false);\n    }\n\n    this.targetCombo = item;\n\n    // 拖动结束后是动态改变 Combo 大小还是将节点从 Combo 中删除\n    if (this.onlyChangeComboSize) {\n      // 拖动节点结束后，动态改变 Combo 的大小\n      graph.updateCombos();\n    } else {\n      const targetComboModel = item.getModel();\n      this.targets.map((node: INode) => {\n        const nodeModel = node.getModel();\n        if (nodeModel.comboId !== targetComboModel.id) {\n          graph.updateComboTree(node, targetComboModel.id);\n        }\n      });\n      graph.updateCombo(item as ICombo);\n    }\n\n    // 将节点拖动到 combo 上面，emit事件抛出当前操作的节点及目标 combo\n    graph.emit(\"dragnodeend\", {\n      items: this.targets,\n      targetItem: this.targetCombo,\n    });\n  },\n\n  onDropCanvas(evt: IG6GraphEvent) {\n    const graph: IGraph = this.graph;\n    if (!this.targets || this.targets.length === 0) return;\n    this.updatePositions(evt);\n    if (this.onlyChangeComboSize) {\n      // 拖动节点结束后，动态改变 Combo 的大小\n      graph.updateCombos();\n    } else {\n      this.targets.map((node: INode) => {\n        // 拖动的节点有 comboId，即是从其他 combo 中拖出时才处理\n        const model = node.getModel();\n        if (model.comboId) {\n          graph.updateComboTree(node);\n        }\n      });\n    }\n  },\n\n  /**\n   * 拖动放置到某个 combo 中的子 node 上\n   * @param evt\n   */\n  onDropNode(evt: IG6GraphEvent) {\n    const self = this;\n    if (!self.targets || self.targets.length === 0) return;\n    const item = evt.item as INode;\n    self.updatePositions(evt);\n    const graph: IGraph = self.graph;\n\n    const comboId = item.getModel().comboId as string;\n\n    if (comboId) {\n      const combo = graph.findById(comboId);\n      if (self.comboActiveState) {\n        graph.setItemState(combo, self.comboActiveState, false);\n      }\n      self.targets.map((node: INode) => {\n        const nodeModel = node.getModel();\n        if (comboId !== nodeModel.comboId) {\n          graph.updateComboTree(node, comboId);\n        }\n      });\n      graph.updateCombo(combo as ICombo);\n    } else {\n      self.targets.map((node: INode) => {\n        const model = node.getModel();\n        if (model.comboId) {\n          graph.updateComboTree(node);\n        }\n      });\n    }\n\n    // 将节点拖动到另外个节点上面，emit 事件抛出当前操作的节点及目标节点\n    graph.emit(\"dragnodeend\", {\n      items: self.targets,\n      targetItem: item,\n    });\n  },\n  /**\n   * 将节点拖入到 Combo 中\n   * @param evt\n   */\n  onDragEnter(evt: IG6GraphEvent) {\n    const item = evt.item as ICombo;\n    if (!this.validationCombo(item)) return;\n\n    const graph: IGraph = this.graph;\n    if (this.comboActiveState) {\n      graph.setItemState(item, this.comboActiveState, true);\n    }\n  },\n  /**\n   * 将节点从 Combo 中拖出\n   * @param evt\n   */\n  onDragLeave(evt: IG6GraphEvent) {\n    const item = evt.item as ICombo;\n    if (!this.validationCombo(item)) return;\n\n    const graph: IGraph = this.graph;\n    if (this.comboActiveState) {\n      graph.setItemState(item, this.comboActiveState, false);\n    }\n  },\n\n  updatePositions(evt: IG6GraphEvent) {\n    if (!this.targets || this.targets.length === 0) return;\n    // 当开启 delegate 时，拖动结束后需要更新所有已选中节点的位置\n    if (this.get(\"enableDelegate\")) {\n      this.targets.map((node) => this.update(node, evt));\n    }\n  },\n  /**\n   * 更新节点\n   * @param item 拖动的节点实例\n   * @param evt\n   */\n  update(item: Item, evt: IG6GraphEvent) {\n    const { origin } = this;\n    const model: NodeConfig = item.get(\"model\");\n    const nodeId: string = item.get(\"id\");\n    if (!this.point[nodeId]) {\n      this.point[nodeId] = {\n        x: model.x || 0,\n        y: model.y || 0,\n      };\n    }\n\n    const x: number = evt.x - origin.x + this.point[nodeId].x;\n    const y: number = evt.y - origin.y + this.point[nodeId].y;\n\n    const pos: Point = { x, y };\n\n    if (this.get(\"updateEdge\")) {\n      this.graph.updateItem(item, pos, false);\n    } else {\n      item.updatePosition(pos);\n    }\n  },\n  /**\n   * 更新拖动元素时的delegate\n   * @param {Event} e 事件句柄\n   * @param {number} x 拖动单个元素时候的x坐标\n   * @param {number} y 拖动单个元素时候的y坐标\n   */\n  updateDelegate(e) {\n    const { graph } = this;\n    if (!this.delegateRect) {\n      // 拖动多个\n      const parent = this.graph.get(\"group\");\n      const attrs = deepMix({}, Global.delegateStyle, this.delegateStyle);\n\n      const {\n        x: cx,\n        y: cy,\n        width,\n        height,\n        minX,\n        minY,\n      } = this.calculationGroupPosition(e);\n      this.originPoint = { x: cx, y: cy, width, height, minX, minY };\n      // model上的x, y是相对于图形中心的，delegateShape是g实例，x,y是绝对坐标\n      this.delegateRect = parent.addShape(\"rect\", {\n        attrs: {\n          width,\n          height,\n          x: cx,\n          y: cy,\n          ...attrs,\n        },\n        name: \"rect-delegate-shape\",\n      });\n      // this.delegateRect.set('capture', false);\n    } else {\n      const clientX = e.x - this.origin.x + this.originPoint.minX;\n      const clientY = e.y - this.origin.y + this.originPoint.minY;\n      this.delegateRect.attr({\n        x: clientX,\n        y: clientY,\n      });\n    }\n  },\n  /**\n   * 计算delegate位置，包括左上角左边及宽度和高度\n   * @memberof ItemGroup\n   * @return {object} 计算出来的delegate坐标信息及宽高\n   */\n  calculationGroupPosition(evt: IG6GraphEvent) {\n    const { graph } = this;\n\n    const nodes = graph.findAllByState(\"node\", this.selectedState);\n    if (nodes.length === 0) {\n      nodes.push(evt.item);\n    }\n\n    let minx = Infinity;\n    let maxx = -Infinity;\n    let miny = Infinity;\n    let maxy = -Infinity;\n\n    // 获取已节点的所有最大最小x y值\n    for (let i = 0; i < nodes.length; i++) {\n      const element = nodes[i];\n      const bbox = element.getBBox();\n      const { minX, minY, maxX, maxY } = bbox;\n      if (minX < minx) {\n        minx = minX;\n      }\n\n      if (minY < miny) {\n        miny = minY;\n      }\n\n      if (maxX > maxx) {\n        maxx = maxX;\n      }\n\n      if (maxY > maxy) {\n        maxy = maxY;\n      }\n    }\n\n    const x = Math.floor(minx);\n    const y = Math.floor(miny);\n    const width = Math.ceil(maxx) - Math.floor(minx);\n    const height = Math.ceil(maxy) - Math.floor(miny);\n\n    return {\n      x,\n      y,\n      width,\n      height,\n      minX: minx,\n      minY: miny,\n    };\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/index.ts",
    "content": "import { each } from \"@antv/util\";\nimport { registerBehavior } from \"@antv/f6-core\";\nimport DragCanvas from \"./drag-canvas\";\nimport DragNode from \"./drag-node\";\nimport ActivateRelations from \"./activate-relations\";\nimport ClickSelect from \"./click-select\";\nimport ZoomCanvas from \"./zoom-canvas\";\nimport CollapseExpand from \"./collapse-expand\";\nimport DragCombo from \"./drag-combo\";\nimport CollapseExpandCombo from \"./collapse-expand-combo\";\nimport CreateEdge from \"./create-edge\";\nimport mobileBehavior from \"./mobile-behavior\";\n\nconst behaviors = {\n  \"drag-canvas\": DragCanvas,\n  \"zoom-canvas\": ZoomCanvas,\n  \"drag-node\": DragNode,\n  \"activate-relations\": ActivateRelations,\n  \"click-select\": ClickSelect,\n  \"collapse-expand\": CollapseExpand,\n  \"drag-combo\": DragCombo,\n  \"collapse-expand-combo\": CollapseExpandCombo,\n  \"create-edge\": CreateEdge,\n};\n\neach(behaviors, (behavior, type: string) => {\n  registerBehavior(type, { ...behavior, ...mobileBehavior });\n});\n\n// export default Behavior;\n"
  },
  {
    "path": "packages/f6/src/behavior/mobile-behavior.ts",
    "content": "import { each } from \"@antv/util\";\nimport { IAbstractGraph, G6Event } from \"@antv/f6-core\";\n\nexport default {\n  /**\n   * auto bind events when register behavior\n   * @param graph Graph instance\n   */\n  bind(graph: IAbstractGraph) {\n    if (this.type === \"drag-canvas\") {\n      graph.get(\"canvas\").set(\"draggable\", true);\n    }\n    const { events } = this;\n    this.graph = graph;\n    each(events, (handler: () => void, event: G6Event) => {\n      graph.on(event, handler);\n    });\n  },\n\n  unbind(graph: IAbstractGraph) {\n    const { events } = this;\n    if (this.type === \"drag-canvas\") {\n      graph.get(\"canvas\").set(\"draggable\", false);\n    }\n    this.graph = null;\n    each(events, (handler: () => void, event: G6Event) => {\n      graph.off(event, handler);\n    });\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/tooltip.ts",
    "content": "import { G6Event, IG6GraphEvent } from \"@antv/f6-core\";\n\nexport default {\n  getDefaultCfg(): object {\n    return {\n      item: \"node\",\n      offset: 12,\n      formatText(model) {\n        return model.label;\n      },\n    };\n  },\n  getEvents(): { [key in G6Event | \"afterremoveitem\"]?: string } {\n    return {\n      \"node:press\": \"onPress\",\n      actionend: \"onPressEnd\",\n    };\n  },\n  onPress(e: IG6GraphEvent) {\n    const { item } = e;\n    this.currentTarget = item;\n    this.showTooltip(e);\n    this.graph.emit(\"tooltipchange\", { item: e.item, action: \"show\" });\n  },\n  onPressEnd(e: IG6GraphEvent) {\n    if (!this.shouldEnd(e)) {\n      return;\n    }\n    this.hideTooltip();\n    this.graph.emit(\"tooltipchange\", {\n      item: this.currentTarget,\n      action: \"hide\",\n    });\n    this.currentTarget = null;\n  },\n  showTooltip(e: IG6GraphEvent) {\n    // 绘制tip\n  },\n  hideTooltip() {\n    // 隐藏tip\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/behavior/zoom-canvas.ts",
    "content": "import { G6Event } from \"@antv/f6-core\";\n\nexport default {\n  firstScale: null,\n  getDefaultCfg(): object {\n    return {\n      originScale: 1,\n      sensitivity: 2,\n      minZoom: undefined,\n      maxZoom: undefined,\n      enableOptimize: false,\n      optimizeZoom: 0.1,\n      fixSelectedItems: {\n        fixAll: false,\n        fixLineWidth: false,\n        fixLabel: false,\n        fixState: \"selected\",\n      },\n    };\n  },\n  getEvents(): { [key in G6Event]?: string } {\n    const { fixSelectedItems } = this;\n\n    if (!fixSelectedItems.fixState) fixSelectedItems.fixState = \"selected\";\n    if (fixSelectedItems.fixAll) {\n      fixSelectedItems.fixLineWidth = true;\n      fixSelectedItems.fixLabel = true;\n    }\n\n    return {\n      pinchstart: \"onPinch\",\n      pinchmove: \"onPinch\",\n    };\n  },\n  onPinch(evt) {\n    if (evt.preventDefault) evt.preventDefault();\n    if (evt.originalEvent.preventDefault) evt.originalEvent.preventDefault();\n\n    const pointers = evt.originalEvent.pointers;\n    if (pointers.length < 2) return;\n\n    if (evt.type === \"pinchstart\") {\n      this.firstScale = this.graph.getZoom();\n    }\n\n    const scale =\n      evt.originalEvent.scale || evt.originalEvent.srcEvent.extra.scale;\n\n    // 应用到画布上的缩放比例\n    const zoom = this.firstScale * scale;\n\n    // 缓存当前的缩放比例\n    this.currentScale = zoom;\n\n    const minZoom = this.get(\"minZoom\") || this.graph.get(\"minZoom\");\n    const maxZoom = this.get(\"maxZoom\") || this.graph.get(\"maxZoom\");\n\n    if (zoom > maxZoom || zoom < minZoom) {\n      return;\n    }\n    const canvas = this.graph.get(\"canvas\");\n\n    const posA = { x: pointers[0].clientX, y: pointers[0].clientY };\n    const posB = { x: pointers[1].clientX, y: pointers[1].clientY };\n    // 缩放点放中间\n    const point = canvas.getPointByClient(\n      (posA.x + posB.x) / 2,\n      (posA.y + posB.y) / 2,\n    );\n    this.graph.zoomTo(zoom, { x: point.x, y: point.y });\n  },\n};\n"
  },
  {
    "path": "packages/f6/src/element/index.ts",
    "content": "import \"@antv/f6-element\";\n"
  },
  {
    "path": "packages/f6/src/extends/graph/treeGraph/index.ts",
    "content": "// @ts-nocheck\nimport { Point } from \"@antv/g-base\";\nimport Hierarchy from \"@antv/hierarchy\";\nimport { each, isString } from \"@antv/util\";\nimport {\n  GraphData,\n  Item,\n  NodeConfig,\n  ShapeStyle,\n  TreeGraphData,\n  GraphOptions,\n} from \"@antv/f6-core\";\nimport { ITreeGraph } from \"../../../interface/graph\";\n// import { makeExtender } from '../../../util/extender';\n\nconst treeGraph = (G6: { Graph?: any; Util?: any }): ITreeGraph => {\n  const { Graph, Util } = G6;\n  const { radialLayout, traverseTree } = Util;\n\n  class TreeGraph extends Graph implements ITreeGraph {\n    private layoutAnimating: boolean;\n\n    constructor(cfg: GraphOptions) {\n      super(cfg);\n      this.layoutAnimating = false;\n\n      // 用于缓存动画结束后需要删除的节点\n      this.set(\"removeList\", []);\n      this.set(\"layoutMethod\", this.getLayout());\n    }\n\n    /**\n     * 通过 Layout 配置获取布局配置\n     */\n    private getLayout() {\n      const layout = this.get(\"layout\");\n      if (!layout) {\n        return null;\n      }\n      if (typeof layout === \"function\") {\n        return layout;\n      }\n      if (!layout.type) {\n        layout.type = \"dendrogram\";\n      }\n      if (!layout.direction) {\n        layout.direction = \"TB\";\n      }\n      if (layout.radial) {\n        return (data: any) => {\n          const layoutData = Hierarchy[layout.type](data, layout);\n          radialLayout(layoutData);\n          return layoutData;\n        };\n      }\n      return (data: any) => Hierarchy[layout.type](data, layout);\n    }\n\n    /**\n     * 返回指定节点在树图数据中的索引\n     * @param children 树图数据\n     * @param child 树图中某一个 Item 的数据\n     */\n    private static indexOfChild(children: TreeGraphData[], id: string): number {\n      let index = -1;\n      // eslint-disable-next-line consistent-return\n      each(children, (former, i) => {\n        if (id === former.id) {\n          index = i;\n          return false;\n        }\n      });\n      return index;\n    }\n\n    public getDefaultCfg(): any {\n      const cfg = super.getDefaultCfg();\n      // 树图默认打开动画\n      cfg.animate = true;\n      return cfg;\n    }\n\n    /**\n     * 向🌲树中添加数据\n     * @param treeData 树图数据\n     * @param parent 父节点实例\n     * @param animate 是否开启动画\n     */\n    private innerAddChild(\n      treeData: TreeGraphData,\n      parent: Item | undefined,\n      animate: boolean,\n    ): Item {\n      const self = this;\n      const model = treeData.data;\n\n      if (model) {\n        // model 中应存储真实的数据，特别是真实的 children\n        model.x = treeData.x;\n        model.y = treeData.y;\n        model.depth = treeData.depth;\n      }\n\n      const node = self.addItem(\"node\", model!, false);\n      if (parent) {\n        node.set(\"parent\", parent);\n        if (animate) {\n          const origin = parent.get(\"originAttrs\");\n          if (origin) {\n            node.set(\"originAttrs\", origin);\n          } else {\n            const parentModel = parent.getModel();\n            node.set(\"originAttrs\", {\n              x: parentModel.x,\n              y: parentModel.y,\n            });\n          }\n        }\n        const childrenList = parent.get(\"children\");\n        if (!childrenList) {\n          parent.set(\"children\", [node]);\n        } else {\n          childrenList.push(node);\n        }\n        self.addItem(\n          \"edge\",\n          {\n            source: parent,\n            target: node,\n            id: `${parent.get(\"id\")}:${node.get(\"id\")}`,\n          },\n          false,\n        );\n      }\n      // 渲染到视图上应参考布局的children, 避免多绘制了收起的节点\n      each(treeData.children || [], (child) => {\n        self.innerAddChild(child, node, animate);\n      });\n      self.emit(\"afteraddchild\", { item: node, parent });\n      return node;\n    }\n\n    /**\n     * 将数据上的变更转换到视图上\n     * @param data\n     * @param parent\n     * @param animate\n     */\n    private innerUpdateChild(\n      data: TreeGraphData,\n      parent: Item | undefined,\n      animate: boolean,\n    ) {\n      const self = this;\n      const current = self.findById(data.id);\n\n      // 若子树不存在，整体添加即可\n      if (!current) {\n        self.innerAddChild(data, parent, animate);\n        return;\n      }\n\n      // 更新新节点下所有子节点\n      each(data.children || [], (child: TreeGraphData) => {\n        self.innerUpdateChild(child, current, animate);\n      });\n\n      // 用现在节点的children实例来删除移除的子节点\n      const children = current.get(\"children\");\n      if (children) {\n        const len = children.length;\n        if (len > 0) {\n          for (let i = children.length - 1; i >= 0; i--) {\n            const child = children[i].getModel();\n\n            if (TreeGraph.indexOfChild(data.children || [], child.id) === -1) {\n              self.innerRemoveChild(\n                child.id,\n                {\n                  x: data.x!,\n                  y: data.y!,\n                },\n                animate,\n              );\n\n              // 更新父节点下缓存的子节点 item 实例列表\n              children.splice(i, 1);\n            }\n          }\n        }\n      }\n      let oriX: number;\n      let oriY: number;\n      if (current.get(\"originAttrs\")) {\n        oriX = current.get(\"originAttrs\").x;\n        oriY = current.get(\"originAttrs\").y;\n      }\n      const model = current.getModel();\n      if (animate) {\n        // 如果有动画，先缓存节点运动再更新节点\n        current.set(\"originAttrs\", {\n          x: model.x,\n          y: model.y,\n        });\n      }\n      current.set(\"model\", data.data);\n      if (oriX !== data.x || oriY !== data.y) {\n        current.updatePosition({ x: data.x, y: data.y });\n      }\n    }\n\n    /**\n     * 删除子节点Item对象\n     * @param id\n     * @param to\n     * @param animate\n     */\n    private innerRemoveChild(id: string, to: Point, animate: boolean) {\n      const self = this;\n      const node: Item = self.findById(id);\n\n      if (!node) {\n        return;\n      }\n\n      each(node.get(\"children\"), (child) => {\n        self.innerRemoveChild(child.getModel().id, to, animate);\n      });\n\n      if (animate) {\n        const model = node.getModel();\n        node.set(\"to\", to);\n        node.set(\"originAttrs\", { x: model.x, y: model.y });\n        self.get(\"removeList\").push(node);\n      } else {\n        self.removeItem(node);\n      }\n    }\n\n    /**\n     * 更新数据模型，差量更新并重新渲染\n     * @param {object} data 数据模型\n     */\n    public changeData(data?: GraphData | TreeGraphData): any {\n      const self = this;\n\n      // 更改数据源后，取消所有状态\n      this.getNodes().map((node) => self.clearItemStates(node));\n      this.getEdges().map((edge) => self.clearItemStates(edge));\n\n      if (data) {\n        self.data(data);\n        self.render();\n      } else {\n        self.layout(this.get(\"fitView\"));\n      }\n    }\n\n    /**\n     * 已更名为 updateLayout，为保持兼容暂且保留。\n     * 更改并应用树布局算法\n     * @param {object} layout 布局算法\n     */\n    public changeLayout(layout: any) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        \"Please call updateLayout instead of changeLayout. changeLayout will be discarded soon\",\n      );\n      const self = this;\n      self.updateLayout(layout);\n    }\n\n    /**\n     * 更改并应用树布局算法\n     * @param {object} layout 布局算法\n     */\n    public updateLayout(layout: any) {\n      const self = this;\n      if (!layout) {\n        // eslint-disable-next-line no-console\n        console.warn(\"layout cannot be null\");\n        return;\n      }\n      self.set(\"layout\", layout);\n      self.set(\"layoutMethod\", self.getLayout());\n      self.layout();\n    }\n\n    /**\n     * 已更名为 layout，为保持兼容暂且保留。\n     * 根据目前的 data 刷新布局，更新到画布上。用于变更数据之后刷新视图。\n     * @param {boolean} fitView 更新布局时是否需要适应窗口\n     */\n    public refreshLayout(fitView?: boolean) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        \"Please call layout instead of refreshLayout. refreshLayout will be discarded soon\",\n      );\n      const self = this;\n      self.layout(fitView);\n    }\n\n    /**\n     * 根据目前的 data 刷新布局，更新到画布上。用于变更数据之后刷新视图。\n     * @param {boolean} fitView 更新布局时是否需要适应窗口\n     */\n    public layout(fitView?: boolean) {\n      const self = this;\n      const data: TreeGraphData = self.get(\"data\");\n      const layoutMethod = self.get(\"layoutMethod\");\n      const layoutData = layoutMethod(data, self.get(\"layout\"));\n\n      const animate: boolean = self.get(\"animate\");\n\n      self.emit(\"beforerefreshlayout\", { data, layoutData });\n      self.emit(\"beforelayout\");\n\n      self.innerUpdateChild(layoutData, undefined, animate);\n\n      if (fitView) {\n        const viewController = self.get(\"viewController\");\n        viewController.fitView();\n      }\n\n      if (!animate) {\n        // 如果没有动画，目前仅更新了节点的位置，刷新一下边的样式\n        self.refresh();\n        self.paint();\n      } else {\n        self.layoutAnimate(layoutData);\n      }\n      self.emit(\"afterrefreshlayout\", { data, layoutData });\n      self.emit(\"afterlayout\");\n    }\n\n    /**\n     * 添加子树到对应 id 的节点\n     * @param {TreeGraphData} data 子树数据模型\n     * @param {string} parent 子树的父节点id\n     */\n    public addChild(data: TreeGraphData, parent: string | Item): void {\n      const self = this;\n      self.emit(\"beforeaddchild\", { model: data, parent });\n      // 将数据添加到源数据中，走changeData方法\n      if (!isString(parent)) {\n        parent = parent.get(\"id\") as string;\n      }\n\n      const parentData = self.findDataById(parent);\n\n      if (parentData) {\n        if (!parentData.children) {\n          parentData.children = [];\n        }\n        parentData.children.push(data);\n        self.changeData();\n      }\n    }\n\n    /**\n     * 更新某个节点下的所有子节点\n     * @param {TreeGraphData[]} data 子树数据模型集合\n     * @param {string} parent 子树的父节点id\n     */\n    public updateChildren(data: TreeGraphData[], parentId: string): void {\n      const self = this;\n\n      // 如果没有父节点或找不到该节点，是全量的更新，直接重置data\n      if (!parentId || !self.findById(parentId)) {\n        console.warn(\n          `Update children failed! There is no node with id '${parentId}'`,\n        );\n        return;\n      }\n\n      const parentModel = self.findDataById(parentId) as NodeConfig;\n\n      parentModel.children = data;\n\n      self.changeData();\n    }\n\n    /**\n     * 更新源数据，差量更新子树\n     * @param {TreeGraphData} data 子树数据模型\n     * @param {string} parentId 子树的父节点id\n     */\n    public updateChild(data: TreeGraphData, parentId?: string): void {\n      const self = this;\n\n      // 如果没有父节点或找不到该节点，是全量的更新，直接重置data\n      if (!parentId || !self.findById(parentId)) {\n        self.changeData(data);\n        return;\n      }\n\n      const parentModel = self.findDataById(parentId) as NodeConfig;\n\n      const current = self.findById(data.id);\n\n      if (!parentModel.children) {\n        // 当 current 不存在时，children 为空数组\n        parentModel.children = [];\n      }\n\n      // 如果不存在该节点，则添加\n      if (!current) {\n        parentModel.children.push(data);\n      } else {\n        const index = TreeGraph.indexOfChild(parentModel.children, data.id);\n        parentModel.children[index] = data;\n      }\n      self.changeData();\n    }\n\n    /**\n     * 删除子树\n     * @param {string} id 子树根节点id\n     */\n    public removeChild(id: string): void {\n      const self = this;\n      const node = self.findById(id);\n\n      if (!node) {\n        return;\n      }\n\n      const parent = node.get(\"parent\");\n      if (parent && !parent.destroyed) {\n        const parentNode = self.findDataById(parent.get(\"id\"));\n        const siblings = (parentNode && parentNode.children) || [];\n        const model: NodeConfig = node.getModel() as NodeConfig;\n\n        const index = TreeGraph.indexOfChild(siblings, model.id);\n        siblings.splice(index, 1);\n      }\n      self.changeData();\n    }\n\n    /**\n     * 根据id获取对应的源数据\n     * @param {string} id 元素id\n     * @param {TreeGraphData | undefined} parent 从哪个节点开始寻找，为空时从根节点开始查找\n     * @return {TreeGraphData} 对应源数据\n     */\n    public findDataById(\n      id: string,\n      parent?: TreeGraphData | undefined,\n    ): TreeGraphData | null {\n      const self = this;\n\n      if (!parent) {\n        parent = self.get(\"data\") as TreeGraphData;\n      }\n\n      if (id === parent.id) {\n        return parent;\n      }\n\n      let result: TreeGraphData | null = null;\n      // eslint-disable-next-line consistent-return\n      each(parent.children || [], (child) => {\n        if (child.id === id) {\n          result = child;\n          return false;\n        }\n        result = self.findDataById(id, child);\n        if (result) {\n          return false;\n        }\n      });\n\n      return result;\n    }\n\n    /**\n     * 布局动画接口，用于数据更新时做节点位置更新的动画\n     * @param {TreeGraphData} data 更新的数据\n     * @param {function} onFrame 定义节点位置更新时如何移动\n     */\n    public layoutAnimate(\n      data: TreeGraphData,\n      onFrame?: (\n        item: Item,\n        ratio: number,\n        originAttrs?: ShapeStyle,\n        data?: TreeGraphData,\n      ) => unknown,\n    ): void {\n      const self = this;\n      const animateCfg = this.get(\"animateCfg\");\n      self.emit(\"beforeanimate\", { data });\n      // 如果边中没有指定锚点，但是本身有锚点控制，在动画过程中保持锚点不变\n      self.getEdges().forEach((edge) => {\n        const model = edge.get(\"model\");\n        if (!model.sourceAnchor) {\n          model.sourceAnchor = edge.get(\"sourceAnchorIndex\");\n        }\n      });\n\n      this.get(\"canvas\").animate(\n        (ratio: number) => {\n          traverseTree<TreeGraphData>(data, (child) => {\n            const node = self.findById(child.id);\n\n            // 只有当存在node的时候才执行\n            if (node) {\n              let origin = node.get(\"originAttrs\");\n              const model = node.get(\"model\");\n\n              if (!origin) {\n                origin = {\n                  x: model.x,\n                  y: model.y,\n                };\n                node.set(\"originAttrs\", origin);\n              }\n\n              if (onFrame) {\n                const attrs = onFrame(node, ratio, origin, data);\n                node.set(\"model\", Object.assign(model, attrs));\n              } else {\n                model.x = origin.x + (child.x! - origin.x) * ratio;\n                model.y = origin.y + (child.y! - origin.y) * ratio;\n              }\n            }\n            return true;\n          });\n\n          each(self.get(\"removeList\"), (node) => {\n            const model = node.getModel();\n            const from = node.get(\"originAttrs\");\n            const to = node.get(\"to\");\n            model.x = from.x + (to.x - from.x) * ratio;\n            model.y = from.y + (to.y - from.y) * ratio;\n          });\n\n          self.refreshPositions();\n        },\n        {\n          duration: animateCfg.duration,\n          easing: animateCfg.ease,\n          callback: () => {\n            each(self.getNodes(), (node) => {\n              node.set(\"originAttrs\", null);\n            });\n\n            each(self.get(\"removeList\"), (node) => {\n              self.removeItem(node);\n            });\n\n            self.set(\"removeList\", []);\n\n            if (animateCfg.callback) {\n              animateCfg.callback();\n            }\n\n            self.emit(\"afteranimate\", { data });\n          },\n          delay: animateCfg.delay,\n        },\n      );\n    }\n\n    /**\n     * 立即停止布局动画\n     */\n    public stopLayoutAnimate(): void {\n      this.get(\"canvas\").stopAnimate();\n      this.emit(\"layoutanimateend\", { data: this.get(\"data\") });\n      this.layoutAnimating = false;\n    }\n\n    /**\n     * 是否在布局动画\n     * @return {boolean} 是否有布局动画\n     */\n    public isLayoutAnimating(): boolean {\n      return this.layoutAnimating;\n    }\n\n    /**\n     * 根据data接口的数据渲染视图\n     */\n    public render(): void {\n      const self = this;\n      const data: TreeGraphData = self.get(\"data\");\n\n      if (!data) {\n        throw new Error(\"data must be defined first\");\n      }\n\n      self.clear();\n\n      self.emit(\"beforerender\");\n\n      self.layout(this.get(\"fitView\"));\n\n      self.emit(\"afterrender\");\n    }\n\n    /**\n     * 导出图数据\n     * @return {object} data\n     */\n    public save(): TreeGraphData | GraphData {\n      return this.get(\"data\");\n    }\n  }\n\n  return TreeGraph;\n};\n\nexport default treeGraph;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/circularLayout/index.ts",
    "content": "import { CircularLayout } from \"@antv/layout/lib/layout/circular\";\n\nexport default CircularLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/comboForceLayout/index.ts",
    "content": "import { ComboForceLayout } from \"@antv/layout/lib/layout/comboForce\";\n\nexport default ComboForceLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/concentricLayout/index.ts",
    "content": "import { ConcentricLayout } from \"@antv/layout/lib/layout/concentric\";\n\nexport default ConcentricLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/dagreLayout/index.ts",
    "content": "import { DagreLayout } from \"@antv/layout/lib/layout/dagre\";\n\nexport default DagreLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/forceAtlas2Layout/index.ts",
    "content": "import { ForceAtlas2Layout } from \"@antv/layout/lib/layout/forceAtlas2\";\n\nexport default ForceAtlas2Layout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/forceLayout/index.ts",
    "content": "import { ForceLayout } from \"@antv/layout/lib/layout/force\";\n\nexport default ForceLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/fruchtermanLayout/index.ts",
    "content": "import { FruchtermanLayout } from \"@antv/layout/lib/layout/fruchterman\";\n\nexport default FruchtermanLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/gForceLayout/index.ts",
    "content": "import { GForceLayout } from \"@antv/layout/lib/layout/gForce\";\n\nexport default GForceLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/gridLayout/index.ts",
    "content": "import { GridLayout } from \"@antv/layout/lib/layout/grid\";\n\nexport default GridLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/mdsLayout/index.ts",
    "content": "import { MDSLayout } from \"@antv/layout/lib/layout/mds\";\n\nexport default MDSLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/radialLayout/index.ts",
    "content": "import { RadialLayout } from \"@antv/layout/lib/layout/radial\";\n\nexport default RadialLayout;\n"
  },
  {
    "path": "packages/f6/src/extends/layout/randomLayout/index.ts",
    "content": "import { RandomLayout } from \"@antv/layout/lib/layout/random\";\n\nexport default RandomLayout;\n"
  },
  {
    "path": "packages/f6/src/global.ts",
    "content": "import { getColorsWithSubjectColor } from \"./util/color\";\n\nconst subjectColor = \"rgb(95, 149, 255)\";\nconst backColor = \"rgb(255, 255, 255)\";\nconst textColor = \"rgb(0, 0, 0)\";\n\nconst colorSet = getColorsWithSubjectColor(subjectColor, backColor);\n\nexport default {\n  version: \"0.0.16\",\n  rootContainerClassName: \"root-container\",\n  uiContainerClassName: \"ui-container\",\n  waterContainerClassName: \"water-container\",\n  nodeContainerClassName: \"node-container\",\n  edgeContainerClassName: \"edge-container\",\n  comboContainerClassName: \"combo-container\",\n  delegateContainerClassName: \"delegate-container\",\n  defaultLoopPosition: \"top\",\n  nodeLabel: {\n    style: {\n      fill: \"#000\",\n      fontSize: 12,\n      textAlign: \"center\",\n      textBaseline: \"middle\",\n    },\n    offset: 4, // 节点的默认文本不居中时的偏移量\n  },\n  defaultNode: {\n    type: \"circle\",\n    style: {\n      lineWidth: 1,\n      stroke: colorSet.mainStroke,\n      fill: colorSet.mainFill,\n    },\n    size: 20,\n    color: colorSet.mainStroke,\n    linkPoints: {\n      size: 8,\n      lineWidth: 1,\n      fill: colorSet.activeFill,\n      stroke: colorSet.activeStroke,\n    },\n  },\n  // 节点应用状态后的样式，默认仅提供 active、selected、highlight、inactive、disable，用户可以自己扩展\n  nodeStateStyles: {\n    active: {\n      fill: colorSet.activeFill,\n      stroke: colorSet.activeStroke,\n      lineWidth: 2,\n      shadowColor: colorSet.mainStroke,\n      shadowBlur: 10,\n    },\n    selected: {\n      fill: colorSet.selectedFill,\n      stroke: colorSet.selectedStroke,\n      lineWidth: 4,\n      shadowColor: colorSet.selectedStroke,\n      shadowBlur: 10,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    highlight: {\n      fill: colorSet.highlightFill,\n      stroke: colorSet.highlightStroke,\n      lineWidth: 2,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    inactive: {\n      fill: colorSet.inactiveFill,\n      stroke: colorSet.inactiveStroke,\n      lineWidth: 1,\n    },\n    disable: {\n      fill: colorSet.disableFill,\n      stroke: colorSet.disableStroke,\n      lineWidth: 1,\n    },\n  },\n  edgeLabel: {\n    style: {\n      fill: textColor,\n      textAlign: \"center\",\n      textBaseline: \"middle\",\n      fontSize: 12,\n    },\n  },\n  defaultEdge: {\n    type: \"line\",\n    size: 1,\n    style: {\n      stroke: colorSet.edgeMainStroke,\n      lineAppendWidth: 2,\n    },\n    color: colorSet.edgeMainStroke,\n  },\n  // 边应用状态后的样式，默认仅提供 active、selected、highlight、inactive、disable，用户可以自己扩展\n  edgeStateStyles: {\n    active: {\n      stroke: colorSet.edgeActiveStroke,\n      lineWidth: 1,\n    },\n    selected: {\n      stroke: colorSet.edgeSelectedStroke,\n      lineWidth: 2,\n      shadowColor: colorSet.edgeSelectedStroke,\n      shadowBlur: 10,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    highlight: {\n      stroke: colorSet.edgeHighlightStroke,\n      lineWidth: 2,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    inactive: {\n      stroke: colorSet.edgeInactiveStroke,\n      lineWidth: 1,\n    },\n    disable: {\n      stroke: colorSet.edgeDisableStroke,\n      lineWidth: 1,\n    },\n  },\n  comboLabel: {\n    style: {\n      fill: textColor,\n      // textAlign: 'center',\n      textBaseline: \"middle\",\n      fontSize: 12,\n    },\n    refY: 10, // Combo 的默认文本不居中时的偏移量\n    refX: 10, // Combo 的默认文本不居中时的偏移量\n  },\n  defaultCombo: {\n    type: \"circle\",\n    style: {\n      fill: colorSet.comboMainFill,\n      lineWidth: 1,\n      stroke: colorSet.comboMainStroke,\n      r: 5,\n      width: 20,\n      height: 10,\n    },\n    size: [20, 5],\n    color: colorSet.comboMainStroke,\n    padding: [25, 20, 15, 20],\n  },\n  // combo 应用状态后的样式，默认仅提供 active、selected、highlight、inactive、disable，用户可以自己扩展\n  comboStateStyles: {\n    active: {\n      stroke: colorSet.comboActiveStroke,\n      lineWidth: 1,\n      fill: colorSet.comboActiveFill,\n    },\n    selected: {\n      stroke: colorSet.comboSelectedStroke,\n      lineWidth: 2,\n      fill: colorSet.comboSelectedFill,\n      shadowColor: colorSet.comboSelectedStroke,\n      shadowBlur: 10,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    highlight: {\n      stroke: colorSet.comboHighlightStroke,\n      lineWidth: 2,\n      fill: colorSet.comboHighlightFill,\n      \"text-shape\": {\n        fontWeight: 500,\n      },\n    },\n    inactive: {\n      stroke: colorSet.comboInactiveStroke,\n      fill: colorSet.comboInactiveFill,\n      lineWidth: 1,\n    },\n    disable: {\n      stroke: colorSet.comboDisableStroke,\n      fill: colorSet.comboDisableFill,\n      lineWidth: 1,\n    },\n  },\n  delegateStyle: {\n    fill: \"#F3F9FF\",\n    fillOpacity: 0.5,\n    stroke: \"#1890FF\",\n    strokeOpacity: 0.9,\n    lineDash: [5, 5],\n  },\n  // 文本水印默认配置\n  textWaterMarkerConfig: {\n    width: 150,\n    height: 100,\n    compatible: false,\n    text: {\n      x: 0,\n      y: 60,\n      lineHeight: 20,\n      rotate: 20,\n      fontSize: 14,\n      fontFamily: \"Microsoft YaHei\",\n      fill: \"rgba(0, 0, 0, 0.1)\",\n      baseline: \"Middle\",\n    },\n  },\n  imageWaterMarkerConfig: {\n    // compatible: false,\n    image: {\n      x: 0,\n      y: 0,\n      width: 30,\n      height: 20,\n      rotate: 0,\n    },\n  },\n  waterMarkerImage:\n    \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n};\n"
  },
  {
    "path": "packages/f6/src/graph/controller/event.ts",
    "content": "import { ICanvas, IGroup, IShape } from \"@antv/g-base\";\nimport { each, wrapBehavior } from \"@antv/util\";\nimport {\n  AbstractEvent,\n  IG6GraphEvent,\n  Matrix,\n  Item,\n  Util,\n} from \"@antv/f6-core\";\nimport Graph from \"../graph\";\n\nconst { cloneEvent, isViewportChanged } = Util;\n\ntype Fun = () => void;\n\nexport default class EventController extends AbstractEvent {\n  protected extendEvents: any[] = [];\n\n  protected canvasHandler!: Fun;\n\n  protected dragging: boolean = false;\n\n  protected preItem: Item | null = null;\n\n  public destroyed: boolean;\n\n  constructor(graph: Graph) {\n    super(graph);\n    this.graph = graph;\n    this.destroyed = false;\n  }\n\n  // 初始化 G6 中的事件\n  protected initEvents() {\n    const { graph, extendEvents = [] } = this;\n    const canvas: ICanvas = graph.get(\"canvas\");\n    this.canvasHandler = wrapBehavior(this, \"onCanvasEvents\") as Fun;\n    canvas.off(\"*\").on(\"*\", this.canvasHandler);\n  }\n\n  // 获取 shape 的 item 对象\n  private static getItemRoot<T extends IShape>(shape: any): T {\n    while (shape && !shape.get(\"item\")) {\n      shape = shape.get(\"parent\");\n    }\n    return shape;\n  }\n\n  /**\n   * 处理 canvas 事件\n   * @param evt 事件句柄\n   */\n  protected onCanvasEvents(evt: IG6GraphEvent) {\n    const { graph } = this;\n    const canvas = graph.get(\"canvas\");\n    const { target } = evt;\n    const eventType = evt.type;\n\n    /**\n     * (clientX, clientY): 相对于页面的坐标；\n     * (canvasX, canvasY): 相对于 <canvas> 左上角的坐标；\n     * (x, y): 相对于整个画布的坐标, 与 model 的 x, y 是同一维度的。\n     */\n    evt.canvasX = evt.x;\n    evt.canvasY = evt.y;\n    let point = { x: evt.canvasX, y: evt.canvasY };\n\n    const group: IGroup = graph.get(\"group\");\n    let matrix: Matrix = group.getMatrix();\n\n    if (!matrix) {\n      matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    }\n\n    if (isViewportChanged(matrix)) {\n      point = graph.getPointByClient(evt.clientX, evt.clientY);\n    }\n\n    evt.x = point.x;\n    evt.y = point.y;\n\n    evt.currentTarget = graph;\n\n    if (target === canvas) {\n      if (eventType === \"panmove\") {\n        this.handleTouchMove(evt, \"canvas\");\n      }\n      evt.target = canvas;\n      evt.item = null;\n\n      graph.emit(eventType, evt);\n      graph.emit(`canvas:${eventType}`, evt);\n      return;\n    }\n\n    const itemShape: IShape = EventController.getItemRoot(target);\n    if (!itemShape) {\n      graph.emit(eventType, evt);\n      return;\n    }\n\n    const item = itemShape.get(\"item\");\n    if (item.destroyed) {\n      return;\n    }\n\n    const type = item.getType();\n\n    // 事件target是触发事件的Shape实例，item是触发事件的item实例\n    evt.target = target;\n    evt.item = item;\n    if (evt.canvasX === evt.x && evt.canvasY === evt.y) {\n      const canvasPoint = graph.getCanvasByPoint(evt.x, evt.y);\n      evt.canvasX = canvasPoint.x;\n      evt.canvasY = canvasPoint.y;\n    }\n\n    graph.emit(eventType, evt);\n    if (evt.name && !evt.name.includes(\":\")) {\n      graph.emit(`${type}:${eventType}`, evt);\n    } else {\n      graph.emit(evt.name, evt);\n    }\n\n    if (eventType === \"dragstart\") {\n      this.dragging = true;\n    }\n    if (eventType === \"dragend\") {\n      this.dragging = false;\n    }\n    if (eventType === \"panmove\") {\n      this.handleTouchMove(evt, type);\n    }\n  }\n\n  /**\n   * 处理扩展事件\n   * @param evt 事件句柄\n   */\n  protected onExtendEvents(evt: IG6GraphEvent) {\n    this.graph.emit(evt.type, evt);\n  }\n\n  /**\n   * 在 graph 上面 emit 事件\n   * @param itemType item 类型\n   * @param eventType 事件类型\n   * @param evt 事件句柄\n   */\n  private emitCustomEvent(\n    itemType: string,\n    eventType: string,\n    evt: IG6GraphEvent,\n  ) {\n    evt.type = eventType;\n    this.graph.emit(`${itemType}:${eventType}`, evt);\n  }\n\n  public destroy() {\n    const { graph, canvasHandler, extendEvents } = this;\n    const canvas: ICanvas = graph.get(\"canvas\");\n\n    // each(EVENTS, event => {\n    //   canvas.off(event, canvasHandler);\n    // });\n\n    canvas.off(\"*\", canvasHandler);\n\n    each(extendEvents, (event) => {\n      event.remove();\n    });\n\n    this.dragging = false;\n    this.preItem = null;\n    this.extendEvents.length = 0;\n    (this.canvasHandler as Fun | null) = null;\n    this.destroyed = true;\n  }\n\n  /**\n   * 处理移动事件\n   * @param evt 事件句柄\n   * @param type item 类型\n   */\n  private handleTouchMove(evt: IG6GraphEvent, type: string) {\n    const { graph, preItem } = this;\n    const canvas: ICanvas = graph.get(\"canvas\");\n    const item = (evt.target as any) === canvas ? null : evt.item;\n\n    evt = cloneEvent(evt) as IG6GraphEvent;\n\n    // 从前一个item直接移动到当前item，触发前一个item的leave事件\n    if (preItem && preItem !== item && !preItem.destroyed) {\n      evt.item = preItem;\n      this.emitCustomEvent(preItem.getType(), \"touchleave\", evt);\n      if (this.dragging) {\n        this.emitCustomEvent(preItem.getType(), \"dragleave\", evt);\n      }\n    }\n\n    // 从一个item或canvas移动到当前item，触发当前item的enter事件\n    if (item && preItem !== item) {\n      evt.item = item;\n      this.emitCustomEvent(type, \"touchenter\", evt);\n      if (this.dragging) {\n        this.emitCustomEvent(type, \"dragenter\", evt);\n      }\n    }\n\n    this.preItem = item;\n  }\n}\n"
  },
  {
    "path": "packages/f6/src/graph/controller/index.ts",
    "content": "export { default as EventController } from \"./event\";\nexport { default as LayoutController } from \"./layout\";\n"
  },
  {
    "path": "packages/f6/src/graph/controller/layout.ts",
    "content": "import { AbstractLayout, GraphData } from \"@antv/f6-core\";\nimport { Layout } from \"../../layout\";\nimport { mix, clone } from \"@antv/util\";\n\nimport { IGraph } from \"../../interface/graph\";\n\nconst LayoutPipesAdjustNames = [\"force\", \"grid\", \"circular\"];\nexport default class LayoutController extends AbstractLayout {\n  public graph: IGraph;\n\n  public destroyed: boolean;\n\n  constructor(graph: IGraph) {\n    super(graph);\n    this.graph = graph;\n    this.layoutCfg = graph.get(\"layout\") || {};\n    this.layoutType = this.getLayoutType();\n  }\n\n  // 更新布局参数\n  public updateLayoutCfg(cfg) {\n    const { graph, layoutMethods } = this;\n    const layoutCfg = mix({}, this.layoutCfg, cfg);\n    this.layoutCfg = layoutCfg;\n\n    if (!layoutMethods?.length) {\n      this.layout();\n      return;\n    }\n    this.data = this.setDataFromGraph();\n\n    graph.emit(\"beforelayout\");\n\n    let start = Promise.resolve();\n    if (layoutMethods.length === 1) {\n      start = start.then(() =>\n        this.updateLayoutMethod(layoutMethods[0], layoutCfg),\n      );\n    } else {\n      layoutMethods?.forEach((layoutMethod, index) => {\n        const currentCfg = layoutCfg.pipes[index];\n        start = start.then(() =>\n          this.updateLayoutMethod(layoutMethod, currentCfg),\n        );\n      });\n    }\n    this.data = this.setDataFromGraph();\n\n    start\n      .then(() => {\n        if (layoutCfg.onAllLayoutEnd) layoutCfg.onAllLayoutEnd();\n      })\n      .catch((error) => {\n        console.warn(\"layout failed\", error);\n      });\n  }\n\n  /**\n   * @param {function} success callback\n   * @return {boolean} 是否使用web worker布局\n   */\n  public layout(success?: () => void): boolean {\n    const { graph } = this;\n\n    this.data = this.setDataFromGraph();\n    const { nodes, hiddenNodes } = this.data;\n\n    if (!nodes) {\n      return false;\n    }\n    const width = graph.get(\"width\");\n    const height = graph.get(\"height\");\n    const layoutCfg: any = {};\n    Object.assign(\n      layoutCfg,\n      {\n        width,\n        height,\n        center: [width / 2, height / 2],\n      },\n      this.layoutCfg,\n    );\n    this.layoutCfg = layoutCfg;\n\n    this.destoryLayoutMethods();\n\n    graph.emit(\"beforelayout\");\n    this.initPositions(layoutCfg.center, nodes);\n    // init hidden ndoes\n    this.initPositions(layoutCfg.center, hiddenNodes);\n\n    // 在 onAllLayoutEnd 中执行用户自定义 onLayoutEnd，触发 afterlayout、更新节点位置、fitView/fitCenter、触发 afterrender\n    const { onLayoutEnd, layoutEndFormatted, adjust } = layoutCfg;\n\n    if (!layoutEndFormatted) {\n      layoutCfg.layoutEndFormatted = true;\n\n      layoutCfg.onAllLayoutEnd = async () => {\n        // 执行用户自定义 onLayoutEnd\n        if (onLayoutEnd) {\n          onLayoutEnd();\n        }\n\n        // 更新节点位置\n        this.refreshLayout();\n\n        // 最后再次调整\n        if (adjust && layoutCfg.pipes) {\n          await this.adjustPipesBox(this.data, adjust);\n          this.refreshLayout();\n        }\n\n        // 触发 afterlayout\n        graph.emit(\"afterlayout\");\n      };\n    }\n\n    let start = Promise.resolve();\n    if (layoutCfg.type) {\n      start = start.then(() => this.execLayoutMethod(layoutCfg, 0));\n    } else if (layoutCfg.pipes) {\n      layoutCfg.pipes.forEach((cfg, index) => {\n        start = start.then(() => this.execLayoutMethod(cfg, index));\n      });\n    }\n\n    // 最后统一在外部调用onAllLayoutEnd\n    start\n      .then(() => {\n        if (layoutCfg.onAllLayoutEnd) layoutCfg.onAllLayoutEnd();\n        // 在执行 execute 后立即执行 success，且在 timeBar 中有 throttle，可以防止 timeBar 监听 afterrender 进行 changeData 后 layout，从而死循环\n        // 对于 force 一类布局完成后的 fitView 需要用户自己在 onLayoutEnd 中配置\n        if (success) success();\n      })\n      .catch((error) => {\n        console.warn(\"graph layout failed,\", error);\n      });\n\n    return false;\n  }\n\n  private execLayoutMethod(layoutCfg, order): Promise<void> {\n    return new Promise((reslove, reject) => {\n      const { graph } = this;\n      const layoutType = layoutCfg.type;\n\n      // 每个布局方法都需要注册\n      layoutCfg.onLayoutEnd = () => {\n        graph.emit(\"aftersublayout\", { type: layoutType });\n        reslove();\n      };\n\n      const isForce =\n        layoutType === \"force\" ||\n        layoutType === \"g6force\" ||\n        layoutType === \"gForce\";\n      if (isForce) {\n        const { onTick } = layoutCfg;\n        const tick = () => {\n          if (onTick) {\n            onTick();\n          }\n          graph.refreshPositions();\n        };\n        layoutCfg.tick = tick;\n      } else if (layoutCfg.type === \"comboForce\") {\n        layoutCfg.comboTrees = graph.get(\"comboTrees\");\n      }\n\n      let enableTick = false;\n      let layoutMethod;\n\n      try {\n        layoutMethod = new Layout(layoutCfg);\n      } catch (e) {\n        console.warn(\n          `The layout method: '${layoutType}' does not exist! Please specify it first.`,\n        );\n        reject();\n      }\n\n      // 是否需要迭代的方式完成布局。这里是来自布局对象的实例属性，是由布局的定义者在布局类定义的。\n      enableTick = layoutMethod.enableTick;\n      if (enableTick) {\n        const { onTick } = layoutCfg;\n        const tick = () => {\n          if (onTick) {\n            onTick();\n          }\n          graph.refreshPositions();\n        };\n        layoutMethod.tick = tick;\n      }\n      const layoutData = this.filterLayoutData(this.data, layoutCfg);\n      addLayoutOrder(layoutData, order);\n      layoutMethod.init(layoutData);\n      // 若存在节点没有位置信息，且没有设置 layout，在 initPositions 中 random 给出了所有节点的位置，不需要再次执行 random 布局\n      // 所有节点都有位置信息，且指定了 layout，则执行布局（代表不是第一次进行布局）\n      graph.emit(\"beforesublayout\", { type: layoutType });\n      layoutMethod.execute();\n      if (layoutMethod.isCustomLayout && layoutCfg.onLayoutEnd)\n        layoutCfg.onLayoutEnd();\n      this.layoutMethods.push(layoutMethod);\n    });\n  }\n\n  private updateLayoutMethod(layoutMethod, layoutCfg): Promise<void> {\n    return new Promise((reslove, reject) => {\n      const { graph } = this;\n      const layoutType = layoutCfg?.type;\n\n      // 每个布局方法都需要注册\n      layoutCfg.onLayoutEnd = () => {\n        graph.emit(\"aftersublayout\", { type: layoutType });\n        reslove();\n      };\n\n      const layoutData = this.filterLayoutData(this.data, layoutCfg);\n      layoutMethod.init(layoutData);\n      layoutMethod.updateCfg(layoutCfg);\n      graph.emit(\"beforesublayout\", { type: layoutType });\n      layoutMethod.execute();\n      if (layoutMethod.isCustomLayout && layoutCfg.onLayoutEnd)\n        layoutCfg.onLayoutEnd();\n    });\n  }\n\n  protected adjustPipesBox(data, adjust: string): Promise<void> {\n    return new Promise((resolve) => {\n      const { nodes } = data;\n      if (!nodes?.length) {\n        resolve();\n      }\n\n      if (!LayoutPipesAdjustNames.includes(adjust)) {\n        console.warn(\n          `The adjust type ${adjust} is not supported yet, please assign it with 'force', 'grid', or 'circular'.`,\n        );\n        resolve();\n      }\n\n      const layoutCfg = {\n        center: this.layoutCfg.center,\n        nodeSize: (d) => Math.max(d.height, d.width),\n        preventOverlap: true,\n        onLayoutEnd: () => {},\n      };\n\n      // 计算出大单元\n      const { groupNodes, layoutNodes } = this.getLayoutBBox(nodes);\n      const preNodes = clone(layoutNodes);\n\n      // 根据大单元坐标的变化，调整这里面每个小单元nodes\n      layoutCfg.onLayoutEnd = () => {\n        layoutNodes?.forEach((ele, index) => {\n          const dx = ele.x - preNodes[index]?.x;\n          const dy = ele.y - preNodes[index]?.y;\n          groupNodes[index]?.forEach((n: any) => {\n            n.x += dx;\n            n.y += dy;\n          });\n        });\n        resolve();\n      };\n      const layoutMethod = new Layout(layoutCfg);\n      layoutMethod.layout({ nodes: layoutNodes });\n    });\n  }\n\n  public destroy() {\n    this.destoryLayoutMethods();\n    this.destroyed = true;\n\n    this.graph.set(\"layout\", undefined);\n    this.layoutCfg = undefined;\n    this.layoutType = undefined;\n    this.layoutMethods = undefined;\n    this.graph = null;\n  }\n}\n\nfunction addLayoutOrder(data, order) {\n  if (!data?.nodes?.length) {\n    return;\n  }\n  const { nodes } = data;\n  nodes.forEach((node) => {\n    node.layoutOrder = order;\n  });\n}\n"
  },
  {
    "path": "packages/f6/src/graph/graph.ts",
    "content": "import { Canvas as GMobileCanvas } from \"@antv/g-mobile\";\nimport { IGroup } from \"@antv/g-base\";\nimport { mat3 } from \"@antv/matrix-util\";\nimport { clone, deepMix, each, isString, isNumber } from \"@antv/util\";\nimport { IGraph, DataUrlType } from \"../interface/graph\";\nimport { AbstractGraph, GraphOptions } from \"@antv/f6-core\";\n\nimport { WaterMarkerConfig } from \"../types\";\nimport Global from \"../global\";\nimport { LayoutController, EventController } from \"./controller\";\nimport PluginBase from \"../plugin/base\";\nimport { createDom } from \"@antv/dom-util\";\n\nexport const registerGraph = (\n  graphName: string,\n  GraphFunction: any,\n  G6: Object,\n): Object => {\n  if (G6[graphName]) {\n    console.warn(\n      `The graph with the name ${graphName} exists already, it will be overridden`,\n    );\n  }\n  G6[graphName] = GraphFunction(G6);\n  return G6;\n};\nexport default class Graph extends AbstractGraph implements IGraph {\n  // private cfg: GraphOptions & { [key: string]: any };\n\n  public destroyed: boolean;\n\n  constructor(cfg: GraphOptions) {\n    super(cfg);\n\n    if (this.get(\"renderer\").startsWith(\"mini\")) {\n      this.set(\"context\", (cfg as any).context);\n    }\n\n    super.init();\n    const defaultNode = this.get(\"defaultNode\");\n    if (!defaultNode) {\n      this.set(\"defaultNode\", { type: \"circle\" });\n    }\n    if (!defaultNode.type) {\n      defaultNode.type = \"circle\";\n      this.set(\"defaultNode\", defaultNode);\n    }\n    this.destroyed = false;\n  }\n\n  // 这里是为了规避基类那个deepmix，等待架构调整\n  protected init() {}\n\n  public emitEvent(event) {\n    const canvas: GMobileCanvas = this.get(\"canvas\");\n    event.type = event.type.toLowerCase();\n    canvas.registerEventCallback(event);\n  }\n\n  protected initLayoutController() {\n    const layoutController = new LayoutController(this);\n    this.set({\n      layoutController,\n    });\n  }\n\n  protected initEventController() {\n    const eventController = new EventController(this);\n    this.set({\n      eventController,\n    });\n\n    if (this.get(\"renderer\").startsWith(\"mini\")) {\n      return;\n    }\n\n    const canvas: GMobileCanvas = this.get(\"canvas\");\n    const canvasDom = canvas.get(\"el\");\n    \"touchstart touchmove touchend touchcancel\".split(\" \").forEach((key) => {\n      canvasDom.addEventListener(\n        key,\n        canvas.registerEventCallback.bind(canvas),\n        false,\n      );\n    });\n  }\n\n  protected initCanvas() {\n    let container: string | HTMLElement | Element | null =\n      this.get(\"container\");\n    if (container !== null && typeof container === \"string\") {\n      container = document.getElementById(container);\n      this.set(\"container\", container);\n    }\n\n    const renderer: string = this.get(\"renderer\");\n\n    if (!container && !renderer.startsWith(\"mini\")) {\n      throw new Error(\"invalid container\");\n    }\n\n    const width: number = this.get(\"width\");\n    const height: number = this.get(\"height\");\n    const context: string = this.get(\"context\");\n    const fitView: boolean = this.get(\"fitView\");\n\n    const canvasCfg: any = {\n      container, // native canvas 会传递 requestAnimationFrame, clearAnimationFrame 等函数进来\n      context,\n      width,\n      height,\n      renderer,\n      fitView,\n    };\n\n    const pixelRatio = this.get(\"pixelRatio\");\n\n    if (pixelRatio) {\n      canvasCfg.pixelRatio = pixelRatio;\n    }\n\n    const canvas = new GMobileCanvas(canvasCfg);\n\n    this.set(\"canvas\", canvas);\n  }\n\n  protected initPlugins(): void {\n    const self = this;\n    each(self.get(\"plugins\"), (plugin) => {\n      if (!plugin.destroyed && plugin.initPlugin) {\n        plugin.initPlugin(self);\n      }\n    });\n  }\n\n  /**\n   * 返回可见区域的图的 dataUrl，用于生成图片\n   * @param {String} type 图片类型，可选值：\"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/bmp\"\n   * @param {string} backgroundColor 图片背景色\n   * @return {string} 图片 dataURL\n   */\n  public toDataURL(type?: DataUrlType, backgroundColor?: string): string {\n    const canvas: GMobileCanvas = this.get(\"canvas\");\n    const renderer = canvas.getRenderer();\n    const canvasDom = canvas.get(\"el\");\n\n    if (!type) type = \"image/png\";\n\n    let dataURL = \"\";\n    if (renderer === \"svg\") {\n      const cloneNode = canvasDom.cloneNode(true);\n      const svgDocType = document.implementation.createDocumentType(\n        \"svg\",\n        \"-//W3C//DTD SVG 1.1//EN\",\n        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n      );\n      const svgDoc = document.implementation.createDocument(\n        \"http://www.w3.org/2000/svg\",\n        \"svg\",\n        svgDocType,\n      );\n      svgDoc.replaceChild(cloneNode, svgDoc.documentElement);\n      const svgData = new XMLSerializer().serializeToString(svgDoc);\n      dataURL = `data:image/svg+xml;charset=utf8,${encodeURIComponent(\n        svgData,\n      )}`;\n    } else {\n      let imageData;\n      const context = canvasDom.getContext(\"2d\");\n      const width = this.get(\"width\");\n      const height = this.get(\"height\");\n      let compositeOperation;\n      if (backgroundColor) {\n        const pixelRatio =\n          typeof window !== \"undefined\" ? window.devicePixelRatio : 1;\n        imageData = context.getImageData(\n          0,\n          0,\n          width * pixelRatio,\n          height * pixelRatio,\n        );\n        compositeOperation = context.globalCompositeOperation;\n        context.globalCompositeOperation = \"destination-over\";\n        context.fillStyle = backgroundColor;\n        context.fillRect(0, 0, width, height);\n      }\n      dataURL = canvasDom.toDataURL(type);\n      if (backgroundColor) {\n        context.clearRect(0, 0, width, height);\n        context.putImageData(imageData, 0, 0);\n        context.globalCompositeOperation = compositeOperation;\n      }\n    }\n    return dataURL;\n  }\n\n  /**\n   * 返回整个图（包括超出可见区域的部分）的 dataUrl，用于生成图片\n   * @param {Function} callback 异步生成 dataUrl 完成后的回调函数，在这里处理生成的 dataUrl 字符串\n   * @param {String} type 图片类型，可选值：\"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/bmp\"\n   * @param {Object} imageConfig 图片配置项，包括背景色和上下左右的 padding\n   */\n  public toFullDataURL(\n    callback: (res: string) => any,\n    type?: DataUrlType,\n    imageConfig?: { backgroundColor?: string; padding?: number | number[] },\n  ) {\n    const bbox = this.get(\"group\").getCanvasBBox();\n    const height = bbox.height;\n    const width = bbox.width;\n    const renderer = this.get(\"renderer\");\n    const vContainerDOM: HTMLDivElement = createDom(\n      '<id=\"virtual-image\"></div>',\n    );\n\n    const backgroundColor = imageConfig\n      ? imageConfig.backgroundColor\n      : undefined;\n    let padding = imageConfig ? imageConfig.padding : undefined;\n    if (!padding) padding = [0, 0, 0, 0];\n    else if (isNumber(padding)) padding = [padding, padding, padding, padding];\n\n    const vHeight = height + padding[0] + padding[2];\n    const vWidth = width + padding[1] + padding[3];\n    const canvasOptions = {\n      container: vContainerDOM,\n      height: vHeight,\n      width: vWidth,\n      quickHit: true,\n    };\n\n    const vCanvas = new GMobileCanvas(canvasOptions);\n\n    const group = this.get(\"group\");\n    const vGroup = group.clone();\n\n    let matrix = clone(vGroup.getMatrix());\n    if (!matrix) matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    const centerX = (bbox.maxX + bbox.minX) / 2;\n    const centerY = (bbox.maxY + bbox.minY) / 2;\n    mat3.translate(matrix, matrix, [-centerX, -centerY]);\n    mat3.translate(matrix, matrix, [\n      width / 2 + padding[3],\n      height / 2 + padding[0],\n    ]);\n\n    vGroup.resetMatrix();\n    vGroup.setMatrix(matrix);\n    vCanvas.add(vGroup);\n\n    const vCanvasEl = vCanvas.get(\"el\");\n\n    let dataURL = \"\";\n    if (!type) type = \"image/png\";\n\n    setTimeout(() => {\n      if (renderer === \"svg\") {\n        const cloneNode = vCanvasEl.cloneNode(true);\n        const svgDocType = document.implementation.createDocumentType(\n          \"svg\",\n          \"-//W3C//DTD SVG 1.1//EN\",\n          \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n        );\n        const svgDoc = document.implementation.createDocument(\n          \"http://www.w3.org/2000/svg\",\n          \"svg\",\n          svgDocType,\n        );\n        svgDoc.replaceChild(cloneNode, svgDoc.documentElement);\n        const svgData = new XMLSerializer().serializeToString(svgDoc);\n        dataURL = `data:image/svg+xml;charset=utf8,${encodeURIComponent(\n          svgData,\n        )}`;\n      } else {\n        let imageData;\n        const context = vCanvasEl.getContext(\"2d\");\n        let compositeOperation;\n        if (backgroundColor) {\n          const pixelRatio =\n            typeof window !== \"undefined\" ? window.devicePixelRatio : 1;\n          imageData = context.getImageData(\n            0,\n            0,\n            vWidth * pixelRatio,\n            vHeight * pixelRatio,\n          );\n          compositeOperation = context.globalCompositeOperation;\n          context.globalCompositeOperation = \"destination-over\";\n          context.fillStyle = backgroundColor;\n          context.fillRect(0, 0, vWidth, vHeight);\n        }\n        dataURL = vCanvasEl.toDataURL(type);\n        if (backgroundColor) {\n          context.clearRect(0, 0, vWidth, vHeight);\n          context.putImageData(imageData, 0, 0);\n          context.globalCompositeOperation = compositeOperation;\n        }\n      }\n      if (callback) callback(dataURL);\n    }, 16);\n  }\n\n  /**\n   * 导出包含全图的图片\n   * @param {String} name 图片的名称\n   * @param {String} type 图片类型，可选值：\"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/bmp\"\n   * @param {Object} imageConfig 图片配置项，包括背景色和上下左右的 padding\n   */\n  public downloadFullImage(\n    name?: string,\n    type?: DataUrlType,\n    imageConfig?: { backgroundColor?: string; padding?: number | number[] },\n  ): void {\n    const bbox = this.get(\"group\").getCanvasBBox();\n    const height = bbox.height;\n    const width = bbox.width;\n    const renderer = this.get(\"renderer\");\n    const vContainerDOM: HTMLDivElement = createDom(\n      '<id=\"virtual-image\"></div>',\n    );\n\n    const backgroundColor = imageConfig\n      ? imageConfig.backgroundColor\n      : undefined;\n    let padding = imageConfig ? imageConfig.padding : undefined;\n    if (!padding) padding = [0, 0, 0, 0];\n    else if (isNumber(padding)) padding = [padding, padding, padding, padding];\n\n    const vHeight = height + padding[0] + padding[2];\n    const vWidth = width + padding[1] + padding[3];\n    const canvasOptions = {\n      container: vContainerDOM,\n      height: vHeight,\n      width: vWidth,\n    };\n    const vCanvas = new GMobileCanvas(canvasOptions);\n\n    const group = this.get(\"group\");\n    const vGroup = group.clone();\n\n    let matrix = clone(vGroup.getMatrix());\n    if (!matrix) matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    const centerX = (bbox.maxX + bbox.minX) / 2;\n    const centerY = (bbox.maxY + bbox.minY) / 2;\n    mat3.translate(matrix, matrix, [-centerX, -centerY]);\n    mat3.translate(matrix, matrix, [\n      width / 2 + padding[3],\n      height / 2 + padding[0],\n    ]);\n\n    vGroup.resetMatrix();\n    vGroup.setMatrix(matrix);\n    vCanvas.add(vGroup);\n\n    const vCanvasEl = vCanvas.get(\"el\");\n\n    if (!type) type = \"image/png\";\n    setTimeout(() => {\n      let dataURL = \"\";\n      if (renderer === \"svg\") {\n        const cloneNode = vCanvasEl.cloneNode(true);\n        const svgDocType = document.implementation.createDocumentType(\n          \"svg\",\n          \"-//W3C//DTD SVG 1.1//EN\",\n          \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n        );\n        const svgDoc = document.implementation.createDocument(\n          \"http://www.w3.org/2000/svg\",\n          \"svg\",\n          svgDocType,\n        );\n        svgDoc.replaceChild(cloneNode, svgDoc.documentElement);\n        const svgData = new XMLSerializer().serializeToString(svgDoc);\n        dataURL = `data:image/svg+xml;charset=utf8,${encodeURIComponent(\n          svgData,\n        )}`;\n      } else {\n        let imageData;\n        const context = vCanvasEl.getContext(\"2d\");\n        let compositeOperation;\n        if (backgroundColor) {\n          const pixelRatio =\n            typeof window !== \"undefined\" ? window.devicePixelRatio : 1;\n          imageData = context.getImageData(\n            0,\n            0,\n            vWidth * pixelRatio,\n            vHeight * pixelRatio,\n          );\n          compositeOperation = context.globalCompositeOperation;\n          context.globalCompositeOperation = \"destination-over\";\n          context.fillStyle = backgroundColor;\n          context.fillRect(0, 0, vWidth, vHeight);\n        }\n        dataURL = vCanvasEl.toDataURL(type);\n        if (backgroundColor) {\n          context.clearRect(0, 0, vWidth, vHeight);\n          context.putImageData(imageData, 0, 0);\n          context.globalCompositeOperation = compositeOperation;\n        }\n      }\n\n      const link: HTMLAnchorElement = document.createElement(\"a\");\n      const fileName: string =\n        (name || \"graph\") +\n        (renderer === \"svg\" ? \".svg\" : `.${type.split(\"/\")[1]}`);\n\n      this.dataURLToImage(dataURL, renderer, link, fileName);\n\n      const e = document.createEvent(\"MouseEvents\");\n      e.initEvent(\"click\", false, false);\n      link.dispatchEvent(e);\n    }, 16);\n  }\n\n  /**\n   * 画布导出图片，图片仅包含画布可见区域部分内容\n   * @param {String} name 图片的名称\n   * @param {String} type 图片类型，可选值：\"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/bmp\"\n   * @param {string} backgroundColor 图片背景色\n   */\n  public downloadImage(\n    name?: string,\n    type?: DataUrlType,\n    backgroundColor?: string,\n  ): void {\n    const self = this;\n\n    if (self.isAnimating()) {\n      self.stopAnimate();\n    }\n\n    const canvas = self.get(\"canvas\");\n    const renderer = canvas.getRenderer();\n    if (!type) type = \"image/png\";\n    const fileName: string =\n      (name || \"graph\") + (renderer === \"svg\" ? \".svg\" : type.split(\"/\")[1]);\n    const link: HTMLAnchorElement = document.createElement(\"a\");\n    setTimeout(() => {\n      const dataURL = self.toDataURL(type, backgroundColor);\n      this.dataURLToImage(dataURL, renderer, link, fileName);\n\n      const e = document.createEvent(\"MouseEvents\");\n      e.initEvent(\"click\", false, false);\n      link.dispatchEvent(e);\n    }, 16);\n  }\n\n  private dataURLToImage(dataURL: string, renderer: string, link, fileName) {\n    if (typeof window !== \"undefined\") {\n      if (window.Blob && window.URL && renderer !== \"svg\") {\n        const arr = dataURL.split(\",\");\n        let mime = \"\";\n        if (arr && arr.length > 0) {\n          const match = arr[0].match(/:(.*?);/);\n          // eslint-disable-next-line prefer-destructuring\n          if (match && match.length >= 2) mime = match[1];\n        }\n\n        const bstr = atob(arr[1]);\n        let n = bstr.length;\n        const u8arr = new Uint8Array(n);\n\n        while (n--) {\n          u8arr[n] = bstr.charCodeAt(n);\n        }\n\n        const blobObj = new Blob([u8arr], { type: mime });\n\n        if (window.navigator[\"msSaveBlob\"]) {\n          window.navigator[\"msSaveBlob\"](blobObj, fileName);\n        } else {\n          link.addEventListener(\"click\", () => {\n            link.download = fileName;\n            link.href = window.URL.createObjectURL(blobObj);\n          });\n        }\n      } else {\n        link.addEventListener(\"click\", () => {\n          link.download = fileName;\n          link.href = dataURL;\n        });\n      }\n    }\n  }\n\n  /**\n   * 添加插件\n   * @param {object} plugin 插件实例\n   */\n  public addPlugin(plugin: PluginBase): void {\n    const self = this;\n    if (plugin.destroyed) {\n      return;\n    }\n    self.get(\"plugins\").push(plugin);\n    plugin.initPlugin(self);\n  }\n\n  /**\n   * 添加插件\n   * @param {object} plugin 插件实例\n   */\n  public removePlugin(plugin: PluginBase): void {\n    const plugins = this.get(\"plugins\");\n    const index = plugins.indexOf(plugin);\n    if (index >= 0) {\n      plugin.destroyPlugin();\n      plugins.splice(index, 1);\n    }\n  }\n\n  private isMiniNative() {\n    return this.get(\"renderer\") === \"mini-native\";\n  }\n\n  private isMini() {\n    return this.get(\"renderer\").startsWith(\"mini\");\n  }\n\n  private isBrowser() {\n    return this.get(\"renderer\") === \"canvas\";\n  }\n\n  /**\n   * 设置图片水印\n   * @param {string} imgURL 图片水印的url地址\n   * @param {WaterMarkerConfig} config 文本水印的配置项\n   * @param {any} waterCanvas 小程序canvas\n   */\n  public setImageWaterMarker(\n    imgURL: string,\n    config: WaterMarkerConfig,\n    waterCanvas?: any,\n  ) {\n    //水印的设置合并\n    const waterMarkerConfig = deepMix(\n      {},\n      Global.imageWaterMarkerConfig,\n      config,\n    );\n    const { width, height, image } = waterMarkerConfig;\n    const { rotate, x, y, width: imgWidth, height: imgHeight } = image;\n    //mini\n    if (this.isMini() && !this.isMiniNative()) {\n      //设置属性为背景图\n    }\n    //mini-native\n    if (this.isMiniNative()) {\n      //设定水印canvas的宽高\n      waterCanvas.width = width ? width : this.get(\"width\");\n      waterCanvas.height = height ? height : this.get(\"height\");\n      //获取context\n      const waterCanvasContext = waterCanvas.getContext(\"2d\");\n\n      const { createImage } = this.get(\"extra\");\n\n      const img = createImage();\n      img.crossOrigin = \"anonymous\";\n      img.src = imgURL;\n      img.onload = () => {\n        if (this.destroyed) return;\n        //计算缩放比例\n        const scaleX = imgWidth / img.width;\n        const scaleY = imgHeight / img.height;\n\n        //旋转\n        waterCanvasContext.rotate(-(rotate * Math.PI) / 180);\n\n        //循环重复绘制\n        const pattern = waterCanvasContext.createPattern(img, \"repeat\");\n        waterCanvasContext.fillStyle = pattern;\n        waterCanvasContext.scale(scaleX, scaleY);\n        //调整位置\n        waterCanvasContext.fillRect(\n          -this.get(\"width\") * 2,\n          -this.get(\"height\"),\n          this.get(\"width\") * 10,\n          this.get(\"height\") * 10,\n        );\n        this.get(\"waterGroup\").addShape(\"image\", {\n          attrs: {\n            img: waterCanvas,\n          },\n        });\n      };\n    }\n    //render\n    if (this.isBrowser()) {\n      const waterCanvas = document.createElement(\"canvas\");\n\n      //获取整个画布的宽高，以确定水印层的宽高\n      waterCanvas.width = width ? width : this.get(\"width\");\n      waterCanvas.height = height ? height : this.get(\"height\");\n      const context = waterCanvas.getContext(\"2d\");\n      const img = new Image();\n      img.crossOrigin = \"anonymous\";\n      img.src = imgURL;\n      img.onload = () => {\n        if (this.destroyed) return;\n\n        //计算图片宽高的缩放比例\n        const scaleX = imgWidth / img.width;\n        const scaleY = imgHeight / img.height;\n\n        //旋转\n        context.rotate(-(rotate * Math.PI) / 180);\n        //循环重复绘制\n        const pattern = context.createPattern(img, \"repeat\");\n        context.fillStyle = pattern;\n        context.scale(scaleX, scaleY);\n        //调整位置\n        context.fillRect(\n          -this.get(\"width\") * 2,\n          -this.get(\"height\"),\n          this.get(\"width\") * 10,\n          this.get(\"height\") * 10,\n        );\n\n        const water_img_url = waterCanvas.toDataURL();\n        this.get(\"waterGroup\").addShape(\"image\", {\n          attrs: {\n            img: water_img_url,\n          },\n        });\n      };\n    }\n  }\n\n  /**\n   * 设置文本水印\n   * @param {string[]} texts 水印的文本内容\n   * @param {WaterMarkerConfig} config 文本水印的配置项\n   */\n  public setTextWaterMarker(texts: string[], config?: WaterMarkerConfig) {\n    let container: string | HTMLElement | null = this.get(\"container\");\n    if (isString(container)) {\n      container = document.getElementById(container);\n    }\n\n    if (!container.style.position) {\n      container.style.position = \"relative\";\n    }\n\n    let canvas = this.get(\"graphWaterMarker\");\n\n    const waterMarkerConfig: WaterMarkerConfig = deepMix(\n      {},\n      Global.textWaterMarkerConfig,\n      config,\n    );\n    const { width, height, compatible, text } = waterMarkerConfig;\n\n    if (!canvas) {\n      const canvasCfg: any = {\n        container,\n        width,\n        height,\n        capture: false,\n      };\n      const pixelRatio = this.get(\"pixelRatio\");\n      if (pixelRatio) {\n        canvasCfg.pixelRatio = pixelRatio;\n      }\n      canvas = new GMobileCanvas(canvasCfg);\n      this.set(\"graphWaterMarker\", canvas);\n    }\n    canvas.get(\"el\").style.display = \"none\";\n    const ctx = canvas.get(\"context\");\n\n    const { rotate, fill, fontFamily, fontSize, baseline, x, y, lineHeight } =\n      text;\n    // 旋转20度\n    ctx.rotate((-rotate * Math.PI) / 180);\n\n    // 设置文字样式\n    ctx.font = `${fontSize}px ${fontFamily}`;\n\n    // 设置文字颜色\n    ctx.fillStyle = fill;\n\n    ctx.textBaseline = baseline;\n\n    for (let i = texts.length - 1; i >= 0; i--) {\n      // 将文字绘制到画布\n      ctx.fillText(texts[i], x, y + i * lineHeight);\n    }\n\n    // 恢复旋转角度\n    ctx.rotate((rotate * Math.PI) / 180);\n\n    // 默认按照现代浏览器处理\n    if (!compatible) {\n      let box = document.querySelector(\".g6-graph-watermarker\") as HTMLElement;\n      if (!box) {\n        box = document.createElement(\"div\");\n        box.className = \"g6-graph-watermarker\";\n      }\n      box.style.cssText = `background-image: url(${canvas\n        .get(\"el\")\n        .toDataURL(\n          \"image/png\",\n        )});background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:99;`;\n      container.appendChild(box);\n    } else {\n      // 当需要兼容不支持 pointer-events属性的浏览器时，将 compatible 设置为 true\n      container.style.cssText = `background-image: url(${canvas\n        .get(\"el\")\n        .toDataURL(\"image/png\")});background-repeat:repeat;`;\n    }\n  }\n\n  /**\n   * 销毁画布\n   */\n  public destroy() {\n    each(this.get(\"plugins\"), (plugin) => {\n      plugin.destroyPlugin();\n    });\n\n    // destroy tooltip doms, removed when upgrade G6 4.0\n    const tooltipDOMs = this.get(\"tooltips\");\n    if (tooltipDOMs) {\n      for (let i = 0; i < tooltipDOMs.length; i++) {\n        const container = tooltipDOMs[i];\n        if (!container) continue;\n        const parent = container.parentElement;\n        if (!parent) continue;\n        parent.removeChild(container);\n      }\n    }\n\n    this.get(\"eventController\").destroy();\n    this.get(\"layoutController\")?.destroy();\n\n    if (this.get(\"graphWaterMarker\")) {\n      this.get(\"graphWaterMarker\").destroy();\n    }\n\n    if (\n      typeof document !== \"undefined\" &&\n      document.querySelector &&\n      document.querySelector(\".g6-graph-watermarker\")\n    ) {\n      document.querySelector(\".g6-graph-watermarker\").remove();\n    }\n\n    super.destroy();\n  }\n\n  // 初始化所有 Group\n  protected initGroups(): void {\n    const canvas: GMobileCanvas = this.get(\"canvas\");\n\n    const group: IGroup = canvas.addGroup({\n      id: \"root\",\n      className: Global.rootContainerClassName,\n    });\n\n    const waterGroup: IGroup = canvas.addGroup({\n      id: \"water\",\n      className: Global.waterContainerClassName,\n    });\n\n    if (this.get(\"groupByTypes\")) {\n      const edgeGroup: IGroup = group.addGroup({\n        id: \"edge\",\n        className: Global.edgeContainerClassName,\n      });\n\n      const nodeGroup: IGroup = group.addGroup({\n        id: \"node\",\n        className: Global.nodeContainerClassName,\n      });\n\n      const comboGroup: IGroup = group.addGroup({\n        id: \"combo\",\n        className: Global.comboContainerClassName,\n      });\n\n      // 用于存储自定义的群组\n      comboGroup.toBack();\n\n      this.set({ nodeGroup, edgeGroup, comboGroup });\n    }\n\n    const uiGroup: IGroup = canvas.addGroup({\n      id: \"uiGroup\",\n      className: Global.uiContainerClassName,\n    });\n\n    const delegateGroup: IGroup = group.addGroup({\n      id: \"delegate\",\n      className: Global.delegateContainerClassName,\n    });\n    this.set({ delegateGroup });\n    this.set(\"group\", group);\n    this.set(\"uiGroup\", uiGroup);\n    this.set(\"waterGroup\", waterGroup);\n  }\n}\n"
  },
  {
    "path": "packages/f6/src/index.ts",
    "content": "import {\n  registerBehavior,\n  registerCombo,\n  registerEdge,\n  registerNode,\n  Arrow,\n  Marker,\n  Shape,\n} from \"@antv/f6-core\";\nimport { ICanvas, IGroup, IShape } from \"@antv/g-base\";\nimport * as Algorithm from \"@antv/algorithm\";\nimport Graph, { registerGraph as oRegisterGraph } from \"./graph/graph\";\nimport { Layout, Layouts, registerLayout, unRegisterLayout } from \"./layout\";\nimport Global from \"./global\";\nimport Util from \"./util\";\nimport \"./element\";\nimport \"./behavior\";\n\nconst F6 = {\n  version: Global.version,\n  Graph,\n  Util,\n  Layout,\n  Layouts,\n  registerLayout,\n  unRegisterLayout,\n  Global,\n  registerBehavior,\n  registerCombo,\n  registerEdge,\n  registerNode,\n  Algorithm,\n  Arrow,\n  Marker,\n  Shape,\n};\n\nfunction registerExtenderWrapper<T1, T2>(\n  registerExtender: (\n    registerName: T1,\n    registerFunction: T2,\n    global: Object,\n  ) => Object,\n): (registerName: T1, registerFunction: T2) => Object {\n  return function (...args) {\n    return registerExtender.apply(null, [...args, F6]);\n  };\n}\n\nconst registerGraph = registerExtenderWrapper(oRegisterGraph);\n\n(F6 as any).registerGraph = registerGraph;\n\nexport * from \"@antv/f6-core\";\nexport * from \"./types\";\nexport * from \"./interface/graph\";\n\nexport {\n  Graph,\n  Util,\n  Layout,\n  registerLayout,\n  registerGraph,\n  Global,\n  Algorithm,\n  Arrow,\n  Marker,\n  Shape,\n  // 对外暴露 G-Base 的几个类型定义\n  // ICanvas,\n  // IGroup,\n  // IShape,\n};\n\nexport default F6;\n"
  },
  {
    "path": "packages/f6/src/index.umd.ts",
    "content": "// @ts-nocheck\nimport F6 from \"./index\";\n\n// @ts-ignore：兼容旧版本H5导出,不用考虑其他环境，其他环境会使用其他规范\nvar getGlobal = function () {\n  if (typeof globalThis !== \"undefined\") {\n    return globalThis;\n  }\n  if (typeof self !== \"undefined\") {\n    return self;\n  }\n  if (typeof window !== \"undefined\") {\n    return window;\n  }\n  if (typeof global !== \"undefined\") {\n    return global;\n  }\n};\n\nconst root = getGlobal();\n// umd 部分定义\nif (typeof exports === \"object\" && typeof module === \"object\") {\n} else if (typeof define === \"function\" && define.amd) {\n} else if (typeof exports === \"object\") {\n} else {\n  Object.defineProperties(root, {\n    f6: {\n      get: function () {\n        console.warn(\"废弃的特性: f6, 请使用 F6 代替 f6\");\n        return F6;\n      },\n    },\n  });\n}\n\nexport default F6;\n"
  },
  {
    "path": "packages/f6/src/interface/graph.ts",
    "content": "import { IAbstractGraph, Item, ShapeStyle, TreeGraphData } from \"@antv/f6-core\";\nimport { WaterMarkerConfig } from \"../types\";\n\nimport PluginBase from \"../plugin/base\";\n\nexport type DataUrlType =\n  | \"image/png\"\n  | \"image/jpeg\"\n  | \"image/webp\"\n  | \"image/bmp\";\n\nexport interface IGraph extends IAbstractGraph {\n  /**\n   * 返回图表的 dataUrl 用于生成图片\n   */\n  toDataURL: () => string;\n\n  /**\n   * 画布导出图片\n   * @param {String} name 图片的名称\n   */\n  downloadImage: (\n    name?: string,\n    type?: DataUrlType,\n    backgroundColor?: string,\n  ) => void;\n\n  /**\n   * 导出包含全图的图片\n   * @param {String} name 图片的名称\n   * @param {String} type 图片类型，可选值：\"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/bmp\"\n   * @param {Object} imageConfig 图片配置项，包括背景色和上下左右的 padding\n   */\n  downloadFullImage: (\n    name?: string,\n    type?: DataUrlType,\n    imageConfig?: { backgroundColor?: string; padding?: number | number[] },\n  ) => void;\n\n  /**\n   * 返回整个图（包括超出可见区域的部分）的 dataUrl，用于生成图片\n   * @param {Function} callback 异步生成 dataUrl 完成后的回调函数，在这里处理生成的 dataUrl 字符串\n   * @param {String} type 图片类型，可选值：\"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/bmp\"\n   * @param {Object} imageConfig 图片配置项，包括背景色和上下左右的 padding\n   */\n  toFullDataURL: (\n    callback: (res: string) => any,\n    type?: DataUrlType,\n    imageConfig?: { backgroundColor?: string; padding?: number | number[] },\n  ) => void;\n\n  /**\n   * 添加插件\n   * @param {object} plugin 插件实例\n   */\n  addPlugin: (plugin: PluginBase) => void;\n\n  /**\n   * 添加插件\n   * @param {object} plugin 插件实例\n   */\n  removePlugin: (plugin: PluginBase) => void;\n\n  /**\n   * 设置图片水印\n   * @param {string} imgURL 图片水印的url地址\n   * @param {WaterMarkerConfig} config 文本水印的配置项\n   */\n  setImageWaterMarker: (\n    imgURL: string,\n    config: WaterMarkerConfig,\n    waterCanvas: any,\n  ) => void;\n\n  /**\n   * 设置文本水印\n   * @param {string[]} texts 水印的文本内容\n   * @param {WaterMarkerConfig} config 文本水印的配置项\n   */\n  setTextWaterMarker: (texts: string[], config?: WaterMarkerConfig) => void;\n}\n\nexport interface ITreeGraph extends IGraph {\n  /**\n   * 添加子树到对应 id 的节点\n   * @param {TreeGraphData} data 子树数据模型\n   * @param {string | Item} parent 子树的父节点id\n   */\n  addChild: (data: TreeGraphData, parent: string | Item) => void;\n\n  /**\n   * 更新源数据，差量更新子树\n   * @param {TreeGraphData} data 子树数据模型\n   * @param {string} parent 子树的父节点id\n   */\n  updateChild: (data: TreeGraphData, parent?: string) => void;\n\n  /**\n   * 删除子树\n   * @param {string} id 子树根节点id\n   */\n  removeChild: (id: string) => void;\n\n  /**\n   * 根据id获取对应的源数据\n   * @param {string} id 元素id\n   * @param {TreeGraphData | undefined} parent 从哪个节点开始寻找，为空时从根节点开始查找\n   * @return {TreeGraphData} 对应源数据\n   */\n  findDataById: (\n    id: string,\n    parent?: TreeGraphData | undefined,\n  ) => TreeGraphData | null;\n\n  /**\n   * 布局动画接口，用于数据更新时做节点位置更新的动画\n   * @param {TreeGraphData} data 更新的数据\n   * @param {function} onFrame 定义节点位置更新时如何移动\n   */\n  layoutAnimate: (\n    data: TreeGraphData,\n    onFrame?: (\n      item: Item,\n      ratio: number,\n      originAttrs?: ShapeStyle,\n      data?: TreeGraphData,\n    ) => unknown,\n  ) => void;\n\n  /**\n   * 立即停止布局动画\n   */\n  stopLayoutAnimate: () => void;\n\n  /**\n   * 是否在布局动画\n   * @return {boolean} 是否有布局动画\n   */\n  isLayoutAnimating: () => boolean;\n}\n"
  },
  {
    "path": "packages/f6/src/layout/index.ts",
    "content": "import { Layout, Layouts } from \"@antv/layout/lib/layout/layout\";\nimport { registerLayout, unRegisterLayout } from \"@antv/layout/lib/registy\";\nimport { RandomLayout } from \"@antv/layout/lib/layout/random\";\n\n// 默认提供 random 布局\nregisterLayout(\"random\", RandomLayout);\n\nexport { Layout, Layouts, registerLayout, unRegisterLayout };\n"
  },
  {
    "path": "packages/f6/src/plugin/base.ts",
    "content": "import { wrapBehavior, each, deepMix } from \"@antv/util\";\nimport { IGraph } from \"../interface/graph\";\nimport { IG6GraphEvent } from \"@antv/f6-core\";\n\nexport interface IPluginBaseConfig {\n  container?: HTMLDivElement | string | null;\n  className?: string;\n  graph?: IGraph;\n  [key: string]: any;\n}\n\ninterface EventMapType {\n  [key: string]: any;\n}\n\nexport default abstract class PluginBase {\n  private _events: EventMapType;\n\n  public _cfgs: IPluginBaseConfig;\n\n  public destroyed: boolean;\n\n  /**\n   * 插件基类的构造函数\n   * @param cfgs 插件的配置项\n   */\n  constructor(cfgs?: IPluginBaseConfig) {\n    this._cfgs = deepMix(this.getDefaultCfgs(), cfgs);\n    this._events = {};\n    this.destroyed = false;\n  }\n\n  /**\n   * 获取默认的插件配置\n   */\n  public getDefaultCfgs() {\n    return {};\n  }\n\n  /**\n   * 初始化插件\n   * @param graph IGraph 实例\n   */\n  public initPlugin(graph: IGraph) {\n    const self = this;\n    self.set(\"graph\", graph);\n\n    const events = self.getEvents();\n\n    const bindEvents: EventMapType = {};\n\n    each(events, (v, k) => {\n      const event = wrapBehavior(self, v) as (e: IG6GraphEvent) => void;\n      bindEvents[k] = event;\n      graph.on(k, event);\n    });\n    this._events = bindEvents;\n\n    this.init();\n  }\n\n  /**\n   * 初始化方法，供子类实现\n   */\n  public init() {}\n\n  /**\n   * 获取插件中的事件和事件处理方法，供子类实现\n   */\n  public getEvents() {\n    return {};\n  }\n\n  /**\n   * 获取配置项中的某个值\n   * @param key 键值\n   */\n  public get(key: string) {\n    return this._cfgs[key];\n  }\n\n  /**\n   * 将指定的值存储到 cfgs 中\n   * @param key 键值\n   * @param val 设置的值\n   */\n  public set(key: string, val: any) {\n    this._cfgs[key] = val;\n  }\n\n  /**\n   * 销毁方法，供子类复写\n   */\n  public destroy() {}\n\n  /**\n   * 销毁插件\n   */\n  public destroyPlugin() {\n    this.destroy();\n    const graph = this.get(\"graph\");\n    const events = this._events;\n    each(events, (v, k) => {\n      graph.off(k, v);\n    });\n    (this._events as EventMapType | null) = null;\n    (this._cfgs as IPluginBaseConfig | null) = null;\n    this.destroyed = true;\n  }\n}\n"
  },
  {
    "path": "packages/f6/src/plugin/index.ts",
    "content": "// import Plugin from '@antv/g6-plugins';\n\nexport default Plugin;\n\n// export default {};\n"
  },
  {
    "path": "packages/f6/src/types/index.ts",
    "content": "/* eslint @typescript-eslint/no-use-before-define: 0 */\nexport type WaterMarkerConfig = Partial<{\n  // 水印 canvas 容器的宽高\n  width: number;\n  height: number;\n  compatible: boolean;\n  text: {\n    x?: number;\n    y?: number;\n    lineHeight?: number;\n    rotate?: number;\n    fontSize?: number;\n    fontFamily?: string;\n    fill?: string;\n    baseline?: string;\n  };\n  image: {\n    x?: number;\n    y?: number;\n    // 图片的宽高\n    width?: number;\n    height: number;\n    rotate?: number;\n  };\n}>;\n"
  },
  {
    "path": "packages/f6/src/util/color.ts",
    "content": "import color from \"color\";\nimport { generate } from \"@ant-design/colors\";\n\n/**\n * get the mix color of backColor and frontColor with alpah\n * @param backColor background color\n * @param frontColor foreground color\n * @param frontAlpha the opacity of foreground color\n */\nexport const mixColor = (backColor, frontColor, frontAlpha) => {\n  const bc = color(backColor);\n  const fc = color(frontColor);\n  return color([\n    (1 - frontAlpha) * bc.red() + frontAlpha * fc.red(),\n    (1 - frontAlpha) * bc.green() + frontAlpha * fc.green(),\n    (1 - frontAlpha) * bc.blue() + frontAlpha * fc.blue(),\n  ]).rgb();\n};\n\nconst getColorsWithDefaultTheme = (\n  subjectColor,\n  backColor = \"#fff\",\n  disableColor = \"rgb(150, 150, 150)\",\n) => {\n  const subjectColor005 = mixColor(backColor, subjectColor, 0.05)\n    .rgb()\n    .toString();\n  const subjectColor01 = mixColor(backColor, subjectColor, 0.1)\n    .rgb()\n    .toString();\n  const subjectColor02 = mixColor(backColor, subjectColor, 0.2)\n    .rgb()\n    .toString();\n  const subjectColor04 = mixColor(backColor, subjectColor, 0.4)\n    .rgb()\n    .toString();\n\n  const disableColor002 = mixColor(backColor, disableColor, 0.02)\n    .rgb()\n    .toString();\n  const disableColor005 = mixColor(backColor, disableColor, 0.05)\n    .rgb()\n    .toString();\n  const disableColor01 = mixColor(backColor, disableColor, 0.1)\n    .rgb()\n    .toString();\n  const disableColor02 = mixColor(backColor, disableColor, 0.2)\n    .rgb()\n    .toString();\n  const disableColor03 = mixColor(backColor, disableColor, 0.3)\n    .rgb()\n    .toString();\n\n  const paletteFromSubject = generate(subjectColor, {\n    theme: \"default\",\n    backgroundColor: backColor,\n  });\n  const subjectHex = color(subjectColor).hex().toLowerCase();\n  const subjectIdx = paletteFromSubject.indexOf(subjectHex);\n  let deeperSubject = subjectColor;\n  if (subjectIdx !== -1) {\n    deeperSubject = paletteFromSubject[subjectIdx + 1];\n  }\n  return {\n    // for nodes\n    mainStroke: subjectColor,\n    mainFill: subjectColor01,\n\n    activeStroke: subjectColor,\n    activeFill: subjectColor005,\n\n    inactiveStroke: subjectColor04,\n    inactiveFill: subjectColor005,\n\n    selectedStroke: subjectColor,\n    selectedFill: backColor,\n\n    highlightStroke: deeperSubject,\n    highlightFill: subjectColor02,\n\n    disableStroke: disableColor03,\n    disableFill: disableColor005,\n\n    // for edges\n    edgeMainStroke: disableColor03,\n    edgeActiveStroke: subjectColor,\n    edgeInactiveStroke: disableColor02,\n    edgeSelectedStroke: subjectColor,\n    edgeHighlightStroke: subjectColor,\n    edgeDisableStroke: disableColor01,\n\n    // for combos\n    comboMainStroke: disableColor03,\n    comboMainFill: disableColor002,\n\n    comboActiveStroke: subjectColor,\n    comboActiveFill: subjectColor005,\n\n    comboInactiveStroke: disableColor03,\n    comboInactiveFill: disableColor002,\n\n    comboSelectedStroke: subjectColor,\n    comboSelectedFill: disableColor002,\n\n    comboHighlightStroke: deeperSubject, // 'rgb(53, 119, 222)', // TODO: how to generate it ???\n    comboHighlightFill: disableColor002,\n\n    comboDisableStroke: disableColor02,\n    comboDisableFill: disableColor005,\n  };\n};\n\nconst getColorsWithDarkTheme = (\n  subjectColor,\n  backColor = \"#fff\",\n  disableColor = \"#777\",\n) => {\n  const subjectColor02 = mixColor(backColor, subjectColor, 0.2)\n    .rgb()\n    .toString();\n  const subjectColor03 = mixColor(backColor, subjectColor, 0.3)\n    .rgb()\n    .toString();\n  const subjectColor06 = mixColor(backColor, subjectColor, 0.6)\n    .rgb()\n    .toString();\n  const subjectColor08 = mixColor(backColor, subjectColor, 0.8)\n    .rgb()\n    .toString();\n\n  const disableColor02 = mixColor(backColor, disableColor, 0.2)\n    .rgb()\n    .toString();\n  const disableColor025 = mixColor(backColor, disableColor, 0.25)\n    .rgb()\n    .toString();\n  const disableColor03 = mixColor(backColor, disableColor, 0.3)\n    .rgb()\n    .toString();\n  const disableColor04 = mixColor(backColor, disableColor, 0.4)\n    .rgb()\n    .toString();\n  const disableColor05 = mixColor(backColor, disableColor, 0.5)\n    .rgb()\n    .toString();\n\n  const paletteFromSubject = generate(subjectColor, {\n    theme: \"dark\",\n    backgroundColor: backColor,\n  });\n  const subjectHex = color(subjectColor).hex().toLowerCase();\n  const subjectIdx = paletteFromSubject.indexOf(subjectHex);\n  let deeperSubject = subjectColor;\n  if (subjectIdx !== -1) {\n    deeperSubject = paletteFromSubject[subjectIdx + 1];\n  }\n  return {\n    // for nodes\n    mainStroke: subjectColor08,\n    mainFill: subjectColor02,\n\n    activeStroke: subjectColor,\n    activeFill: subjectColor03,\n\n    inactiveStroke: subjectColor08,\n    inactiveFill: subjectColor02,\n\n    selectedStroke: subjectColor,\n    selectedFill: subjectColor02,\n\n    highlightStroke: subjectColor,\n    highlightFill: subjectColor06,\n\n    disableStroke: disableColor05,\n    disableFill: disableColor025,\n\n    // for edges\n    edgeMainStroke: disableColor,\n    edgeActiveStroke: subjectColor,\n    edgeInactiveStroke: disableColor,\n    edgeSelectedStroke: subjectColor,\n    edgeHighlightStroke: subjectColor,\n    edgeDisableStroke: disableColor03,\n\n    // for combos\n    comboMainStroke: disableColor04,\n    comboMainFill: disableColor025,\n\n    comboActiveStroke: subjectColor,\n    comboActiveFill: disableColor02,\n\n    comboInactiveStroke: disableColor04,\n    comboInactiveFill: disableColor025,\n\n    comboSelectedStroke: subjectColor,\n    comboSelectedFill: disableColor02,\n\n    comboHighlightStroke: deeperSubject, // 'rgb(53, 119, 222)', // TODO: how to generate it ???\n    comboHighlightFill: disableColor025,\n\n    comboDisableStroke: disableColor04,\n    comboDisableFill: disableColor02,\n  };\n};\n\n/**\n * get the set of colors according to the subject color and background color\n * @param subjectColor the subject color\n * @param backColor background color\n * @param disableColor the color for disable state\n */\nexport const getColorsWithSubjectColor = (\n  subjectColor,\n  backColor = \"#fff\",\n  theme: \"default\" | \"dark\" = \"default\",\n  disableColor = \"rgb(150, 150, 150)\",\n) => {\n  if (theme === \"default\")\n    return getColorsWithDefaultTheme(\n      subjectColor,\n      backColor,\n      \"rgb(150, 150, 150)\",\n    );\n  return getColorsWithDarkTheme(subjectColor, backColor, \"#777\");\n};\n\nexport const getColorSetsBySubjectColors = (\n  subjectColors,\n  backColor = \"#fff\",\n  theme: \"default\" | \"dark\" = \"default\",\n  disableColor = \"rgb(150, 150, 150)\",\n) => {\n  const sets = [];\n  subjectColors.forEach((sColor) => {\n    sets.push(\n      getColorsWithSubjectColor(sColor, backColor, theme, disableColor),\n    );\n  });\n  return sets;\n};\n"
  },
  {
    "path": "packages/f6/src/util/index.ts",
    "content": "import * as ColorUtil from \"./color\";\nimport * as LayoutUtil from \"./layout\";\nimport { Util } from \"@antv/f6-core\";\n\nconst G6Util: any = { ...Util, ...ColorUtil, ...LayoutUtil };\n\nexport default G6Util;\n"
  },
  {
    "path": "packages/f6/src/util/layout.ts",
    "content": "import { IPoint, TreeGraphData, Util } from \"@antv/f6-core\";\nimport { isNumber } from \"@antv/util\";\n\nconst { traverseTree } = Util;\n\n/**\n * 将 number | Function 类型的参数转换为 return number 的 Function\n * @param  {number | Function}  value 需要被转换的值\n * @param  {number}  defaultV 返回函数的默认返回值\n * @return {Function} 转换后的函数\n */\nexport const proccessToFunc = (\n  value: number | Function,\n  defaultV?: number,\n): ((d?: any) => number) => {\n  let func;\n  if (!value) {\n    func = (d) => {\n      return defaultV || 1;\n    };\n  } else if (isNumber(value)) {\n    func = (d) => {\n      return value;\n    };\n  } else {\n    func = value;\n  }\n  return func;\n};\n\n/**\n * 将节点和边数据转换为 GPU 可读的数组。并返回 maxEdgePerVetex，每个节点上最多的边数\n * @param  {NodeConfig[]}  nodes 需要被转换的值\n * @param  {EdgeConfig[]}  edges 返回函数的默认返回值\n * @return {Object} 转换后的数组及 maxEdgePerVetex 组成的对象\n */\nexport const buildTextureData = (\n  nodes,\n  edges,\n): {\n  array: Float32Array;\n  maxEdgePerVetex: number;\n} => {\n  const dataArray = [];\n  const nodeDict = [];\n  const mapIdPos = {};\n  let i = 0;\n  for (i = 0; i < nodes.length; i++) {\n    const n = nodes[i];\n    mapIdPos[n.id] = i;\n    dataArray.push(n.x);\n    dataArray.push(n.y);\n    dataArray.push(0);\n    dataArray.push(0);\n    nodeDict.push([]);\n  }\n  for (i = 0; i < edges.length; i++) {\n    const e = edges[i];\n    nodeDict[mapIdPos[e.source]].push(mapIdPos[e.target]);\n    nodeDict[mapIdPos[e.target]].push(mapIdPos[e.source]);\n  }\n\n  let maxEdgePerVetex = 0;\n  for (i = 0; i < nodes.length; i++) {\n    const offset = dataArray.length;\n    const dests = nodeDict[i];\n    const len = dests.length;\n    dataArray[i * 4 + 2] = offset;\n    dataArray[i * 4 + 3] = dests.length;\n    maxEdgePerVetex = Math.max(maxEdgePerVetex, dests.length);\n    for (let j = 0; j < len; ++j) {\n      const dest = dests[j];\n      dataArray.push(+dest);\n    }\n  }\n\n  while (dataArray.length % 4 !== 0) {\n    dataArray.push(0);\n  }\n  return {\n    array: new Float32Array(dataArray),\n    maxEdgePerVetex,\n  };\n};\n\n/**\n * 将节点和边数据转换为 GPU 可读的数组，每条边带有一个属性。并返回 maxEdgePerVetex，每个节点上最多的边数\n * @param  {NodeConfig[]}  nodes 节点数组\n * @param  {EdgeConfig[]}  edges 边数组\n * @param  {Function}  attrs 读取边属性的函数\n * @return {Object} 转换后的数组及 maxEdgePerVetex 组成的对象\n */\nexport const buildTextureDataWithOneEdgeAttr = (\n  nodes,\n  edges,\n  attrs: Function,\n): {\n  array: Float32Array;\n  maxEdgePerVetex: number;\n} => {\n  const dataArray = [];\n  const nodeDict = [];\n  const mapIdPos = {};\n  let i = 0;\n  for (i = 0; i < nodes.length; i++) {\n    const n = nodes[i];\n    mapIdPos[n.id] = i;\n    dataArray.push(n.x);\n    dataArray.push(n.y);\n    dataArray.push(0);\n    dataArray.push(0);\n    nodeDict.push([]);\n  }\n  for (i = 0; i < edges.length; i++) {\n    const e = edges[i];\n    nodeDict[mapIdPos[e.source]].push(mapIdPos[e.target]);\n    nodeDict[mapIdPos[e.source]].push(attrs(e)); // 理想边长，后续可以改成每条边不同\n    nodeDict[mapIdPos[e.target]].push(mapIdPos[e.source]);\n    nodeDict[mapIdPos[e.target]].push(attrs(e)); // 理想边长，后续可以改成每条边不同\n  }\n\n  let maxEdgePerVetex = 0;\n  for (i = 0; i < nodes.length; i++) {\n    const offset = dataArray.length;\n    const dests = nodeDict[i]; // dest 中节点 id 与边长间隔存储，即一位节点 id，一位边长……\n    const len = dests.length;\n    dataArray[i * 4 + 2] = offset;\n    dataArray[i * 4 + 3] = len / 2; // 第四位存储与该节点相关的所有节点个数\n    maxEdgePerVetex = Math.max(maxEdgePerVetex, len / 2);\n    for (let j = 0; j < len; ++j) {\n      const dest = dests[j];\n      dataArray.push(+dest);\n    }\n  }\n\n  // 不是 4 的倍数，填充 0\n  while (dataArray.length % 4 !== 0) {\n    dataArray.push(0);\n  }\n  return {\n    array: new Float32Array(dataArray),\n    maxEdgePerVetex,\n  };\n};\n\n/**\n * 将节点和边数据转换为 GPU 可读的数组，每条边带有一个以上属性。并返回 maxEdgePerVetex，每个节点上最多的边数\n * @param  {NodeConfig[]}  nodes 节点数组\n * @param  {EdgeConfig[]}  edges 边数组\n * @param  {Function}  attrs 读取边属性的函数\n * @return {Object} 转换后的数组及 maxEdgePerVetex 组成的对象\n */\nexport const buildTextureDataWithTwoEdgeAttr = (\n  nodes,\n  edges,\n  attrs1: Function,\n  attrs2: Function,\n): {\n  array: Float32Array;\n  maxEdgePerVetex: number;\n} => {\n  const dataArray = [];\n  const nodeDict = [];\n  const mapIdPos = {};\n  let i = 0;\n  for (i = 0; i < nodes.length; i++) {\n    const n = nodes[i];\n    mapIdPos[n.id] = i;\n    dataArray.push(n.x);\n    dataArray.push(n.y);\n    dataArray.push(0);\n    dataArray.push(0);\n    nodeDict.push([]);\n  }\n  for (i = 0; i < edges.length; i++) {\n    const e = edges[i];\n    nodeDict[mapIdPos[e.source]].push(mapIdPos[e.target]);\n    nodeDict[mapIdPos[e.source]].push(attrs1(e));\n    nodeDict[mapIdPos[e.source]].push(attrs2(e));\n    nodeDict[mapIdPos[e.source]].push(0);\n    nodeDict[mapIdPos[e.target]].push(mapIdPos[e.source]);\n    nodeDict[mapIdPos[e.target]].push(attrs1(e));\n    nodeDict[mapIdPos[e.target]].push(attrs2(e));\n    nodeDict[mapIdPos[e.target]].push(0);\n  }\n\n  let maxEdgePerVetex = 0;\n  for (i = 0; i < nodes.length; i++) {\n    const offset = dataArray.length;\n    const dests = nodeDict[i]; // dest 中节点 id 与边长间隔存储，即一位节点 id，一位边长……\n    const len = dests.length;\n    // dataArray[i * 4 + 2] = offset;\n    // dataArray[i * 4 + 3] = len / 4; // 第四位存储与该节点相关的所有节点个数\n    // pack offset & length into float32: offset 20bit, length 12bit\n    dataArray[i * 4 + 2] = offset + (1048576 * len) / 4;\n    dataArray[i * 4 + 3] = 0; // 第四位存储与上一次的距离差值\n    maxEdgePerVetex = Math.max(maxEdgePerVetex, len / 4);\n    for (let j = 0; j < len; ++j) {\n      const dest = dests[j];\n      dataArray.push(+dest);\n    }\n  }\n\n  // 不是 4 的倍数，填充 0\n  while (dataArray.length % 4 !== 0) {\n    dataArray.push(0);\n  }\n  return {\n    array: new Float32Array(dataArray),\n    maxEdgePerVetex,\n  };\n};\n/**\n * transform the extended attributes of nodes or edges to a texture array\n * @param  {string[]}  attributeNames attributes' name to be read from items and put into output array\n * @param  {ModelConfig[]}  items the items to be read\n * @return {Float32Array} the attributes' value array to be read by GPU\n */\nexport const attributesToTextureData = (\n  attributeNames: string[],\n  items,\n): { array: Float32Array; count: number } => {\n  const dataArray = [];\n  const attributeNum = attributeNames.length;\n  const attributteStringMap = {};\n  items.forEach((item) => {\n    attributeNames.forEach((name, i) => {\n      if (attributteStringMap[item[name]] === undefined) {\n        attributteStringMap[item[name]] =\n          Object.keys(attributteStringMap).length;\n      }\n      dataArray.push(attributteStringMap[item[name]]);\n      // insure each node's attributes take inter number of grids\n      if (i === attributeNum - 1) {\n        while (dataArray.length % 4 !== 0) {\n          dataArray.push(0);\n        }\n      }\n    });\n  });\n  return {\n    array: new Float32Array(dataArray),\n    count: Object.keys(attributteStringMap).length,\n  };\n};\n\n/**\n * transform the number array format of extended attributes of nodes or edges to a texture array\n * @param  {string[]}  attributeNames attributes' name to be read from items and put into output array\n * @return {Float32Array} the attributes' value array to be read by GPU\n */\nexport const arrayToTextureData = (valueArrays: number[][]): Float32Array => {\n  const dataArray = [];\n  const attributeNum = valueArrays.length;\n  const itemNum = valueArrays[0].length;\n  for (let j = 0; j < itemNum; j++) {\n    valueArrays.forEach((valueArray, i) => {\n      dataArray.push(valueArray[j]);\n      // insure each node's attributes take inter number of grids\n      if (i === attributeNum - 1) {\n        while (dataArray.length % 4 !== 0) {\n          dataArray.push(0);\n        }\n      }\n    });\n  }\n\n  return new Float32Array(dataArray);\n};\n\nexport type TreeGraphDataWithPosition = TreeGraphData & {\n  x: number;\n  y: number;\n  children?: TreeGraphDataWithPosition[];\n};\n\n/**\n *\n * @param data Tree graph data\n * @param layout\n */\nexport const radialLayout = (\n  data: TreeGraphDataWithPosition,\n  layout?: string,\n): TreeGraphDataWithPosition => {\n  // 布局方式有 H / V / LR / RL / TB / BT\n  const VERTICAL_LAYOUTS: string[] = [\"V\", \"TB\", \"BT\"];\n  const min: IPoint = {\n    x: Infinity,\n    y: Infinity,\n  };\n\n  const max: IPoint = {\n    x: -Infinity,\n    y: -Infinity,\n  };\n  // 默认布局是垂直布局TB，此时x对应rad，y对应r\n  let rScale: \"x\" | \"y\" = \"x\";\n  let radScale: \"x\" | \"y\" = \"y\";\n  if (layout && VERTICAL_LAYOUTS.indexOf(layout) >= 0) {\n    // 若是水平布局，y对应rad，x对应r\n    radScale = \"x\";\n    rScale = \"y\";\n  }\n  let count = 0;\n  traverseTree(data, (node: TreeGraphDataWithPosition) => {\n    count++;\n    if (node.x > max.x) {\n      max.x = node.x;\n    }\n    if (node.x < min.x) {\n      min.x = node.x;\n    }\n    if (node.y > max.y) {\n      max.y = node.y;\n    }\n    if (node.y < min.y) {\n      min.y = node.y;\n    }\n    return true;\n  });\n  const avgRad = (Math.PI * 2) / count;\n  const radDiff = max[radScale] - min[radScale];\n  if (radDiff === 0) {\n    return data;\n  }\n\n  traverseTree(data, (node) => {\n    const radial =\n      ((node[radScale] - min[radScale]) / radDiff) * (Math.PI * 2 - avgRad) +\n      avgRad;\n    const r = Math.abs(rScale === \"x\" ? node.x - data.x : node.y - data.y);\n    node.x = r * Math.cos(radial);\n    node.y = r * Math.sin(radial);\n    return true;\n  });\n  return data;\n};\n"
  },
  {
    "path": "packages/f6/stories/algorithm/dfs/data.ts",
    "content": "export default {\n  nodes: [\n    {\n      id: \"A\",\n      label: \"A\",\n    },\n    {\n      id: \"B\",\n      label: \"B\",\n    },\n    {\n      id: \"C\",\n      label: \"C\",\n    },\n    {\n      id: \"D\",\n      label: \"D\",\n    },\n    {\n      id: \"E\",\n      label: \"E\",\n    },\n    {\n      id: \"F\",\n      label: \"F\",\n    },\n    {\n      id: \"G\",\n      label: \"G\",\n    },\n  ],\n  edges: [\n    {\n      source: \"A\",\n      target: \"B\",\n    },\n    {\n      source: \"B\",\n      target: \"C\",\n    },\n    {\n      source: \"C\",\n      target: \"G\",\n    },\n    {\n      source: \"A\",\n      target: \"D\",\n    },\n    {\n      source: \"A\",\n      target: \"E\",\n    },\n    {\n      source: \"E\",\n      target: \"F\",\n    },\n    {\n      source: \"F\",\n      target: \"D\",\n    },\n    {\n      source: \"D\",\n      target: \"G\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/f6/stories/algorithm/dfs/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6, { Algorithm } from \"@antv/f6\";\nimport dagreLayout from \"@antv/f6/src/extends/layout/dagreLayout\";\n\nimport data from \"./data\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n  let graph = null;\n\n  F6.registerLayout(\"dagre\", dagreLayout);\n\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        localRefresh: false,\n        modes: {\n          default: [\"drag-canvas\", \"drag-node\"],\n        },\n        layout: {\n          type: \"dagre\",\n          sortByCombo: false,\n          ranksep: 10,\n          nodesep: 10,\n        },\n        animate: true,\n        defaultNode: {\n          size: 30,\n        },\n        defaultEdge: {\n          style: {\n            endArrow: {\n              path: \"M 0,0 L 8,4 L 8,-4 Z\",\n              fill: \"#e2e2e2\",\n            },\n          },\n        },\n      } as any);\n\n      graph.data(data);\n      graph.render();\n      graph.fitView();\n\n      const { depthFirstSearch } = Algorithm;\n      const commands = [];\n\n      graph.getNodes().forEach((node) => {\n        graph.setItemState(node, \"inactive\", true);\n      });\n\n      depthFirstSearch(data, \"A\", {\n        enter: ({ current: id }) => {\n          commands.push({\n            action: \"enter\",\n            id,\n          });\n        },\n        leave: ({ current: id }) => {\n          commands.push({\n            action: \"leave\",\n            id,\n          });\n        },\n      });\n\n      function loop() {\n        const command = commands.shift();\n        if (command) {\n          const pathNode = graph.findById(command.id);\n          if (command.action === \"enter\") {\n            pathNode.toFront();\n            graph.clearItemStates(pathNode);\n            graph.setItemState(pathNode, \"highlight\", true);\n          }\n          if (command.action === \"leave\") {\n            graph.clearItemStates(pathNode);\n            graph.setItemState(pathNode, \"inactive\", true);\n          }\n          setTimeout(loop, 1000);\n        }\n      }\n      loop();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/algorithm/index.stories.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport DFSDemo from \"./dfs\";\nimport ShortestPathDemo from \"./shortestPath\";\n\nexport default {\n  title: \"Example/Algorithm\",\n};\n\nexport const DFS = (args) => <DFSDemo {...args} />;\nexport const ShortestPath = (args) => <ShortestPathDemo {...args} />;\n"
  },
  {
    "path": "packages/f6/stories/algorithm/shortestPath/data.ts",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/f6/stories/algorithm/shortestPath/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6, { Algorithm } from \"@antv/f6\";\nimport force from \"@antv/f6/src/extends/layout/forceLayout\";\nimport data from \"./data\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n  let graph = null;\n  // 注册布局\n  F6.registerLayout(\"force\", force);\n\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        localRefresh: false,\n        modes: {\n          default: [\"click-select\", \"drag-canvas\", \"drag-node\"],\n        },\n\n        layout: {\n          type: \"force\",\n          alphaDecay: 0,\n        },\n\n        animate: true,\n        defaultNode: {\n          size: 30,\n        },\n        defaultEdge: {\n          style: {\n            endArrow: {\n              path: \"M 0,0 L 8,4 L 8,-4 Z\",\n              fill: \"#e2e2e2\",\n            },\n          },\n        },\n      } as any);\n\n      graph.data(data);\n      graph.render();\n      graph.fitView();\n\n      const { findShortestPath } = Algorithm;\n\n      // 清除状态\n      const clearStates = () => {\n        graph.getNodes().forEach((node) => {\n          graph.clearItemStates(node);\n        });\n        graph.getEdges().forEach((edge) => {\n          graph.clearItemStates(edge);\n        });\n      };\n\n      graph.on(\"node:tap\", (e) => {\n        const selectedNodes = graph.findAllByState(\"node\", \"selected\");\n        if (selectedNodes.length !== 2) {\n          return;\n        }\n        // 清除状态\n        clearStates();\n        // path 为其中一条最短路径\n        const { path } = findShortestPath(\n          data,\n          selectedNodes[0].getID(),\n          selectedNodes[1].getID(),\n        );\n\n        const pathNodeMap = {};\n        // 高亮节点\n        path.forEach((id) => {\n          const pathNode = graph.findById(id);\n          pathNode.toFront();\n          graph.setItemState(pathNode, \"highlight\", true);\n          pathNodeMap[id] = true;\n        });\n        // 高亮边，置灰非路径中边\n        graph.getEdges().forEach((edge) => {\n          const edgeModel = edge.getModel();\n          const source = edgeModel.source;\n          const target = edgeModel.target;\n          const sourceInPathIdx = path.indexOf(source);\n          const targetInPathIdx = path.indexOf(target);\n          if (sourceInPathIdx === -1 || targetInPathIdx === -1) return;\n          if (Math.abs(sourceInPathIdx - targetInPathIdx) === 1) {\n            graph.setItemState(edge, \"highlight\", true);\n          } else {\n            graph.setItemState(edge, \"inactive\", true);\n          }\n        });\n        // 置灰非路径中节点\n        graph.getNodes().forEach((node) => {\n          if (!pathNodeMap[node.getID()]) {\n            graph.setItemState(node, \"inactive\", true);\n          }\n        });\n      });\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/fruchterman/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport GridLayout from \"../../src/extends/layout/fruchtermanLayout\";\n\nF6.registerLayout(\"fruchterman\", GridLayout);\n\nconst data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"a\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"a\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"a\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"a\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"a\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"a\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"a\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"a\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"a\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"a\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"a\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"a\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"a\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"b\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"b\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"b\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"b\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"b\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"c\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"c\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"c\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"c\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"c\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"c\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"c\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"c\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"c\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"c\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"c\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"c\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"c\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"d\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"d\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        localRefresh: false,\n        modes: {\n          default: [\"drag-canvas\", \"drag-node\"],\n        },\n        layout: {\n          type: \"fruchterman\",\n          gravity: 5,\n          speed: 5,\n          // for rendering after each iteration\n          tick: () => {\n            console.log(\"e\");\n            graph.refreshPositions();\n          },\n        },\n        animate: true,\n        defaultNode: {\n          size: 30,\n        },\n      } as any);\n\n      graph.get(\"canvas\").set(\"localRefresh\", false);\n      graph.data(data);\n      const waterURL =\n        \"https://gw.alipayobjects.com/zos/bmw-prod/8088a9d7-e5b0-42f2-b6b2-27c823043993.svg\";\n      const waterConfig = {\n        image: {\n          x: -15, //图片在水印画布的开始位置\n          y: 35, // 图片在水印画布的开始位置\n          width: 156, //图片的大小\n          height: 34, //图片的大小\n          rotate: 30, //图片的旋转角度\n        },\n      };\n      graph.render();\n      graph.fitView();\n      graph.setImageWaterMarker(waterURL, waterConfig, null);\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/g-force/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport GridLayout from \"../../src/extends/layout/fruchtermanLayout\";\n\nF6.registerLayout(\"fruchterman\", GridLayout);\n\nconst data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"a\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"a\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"a\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"a\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"a\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"a\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"a\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"a\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"a\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"a\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"a\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"a\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"a\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"b\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"b\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"b\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"b\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"b\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"c\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"c\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"c\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"c\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"c\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"c\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"c\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"c\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"c\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"c\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"c\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"c\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"c\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"d\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"d\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        localRefresh: false,\n        modes: {\n          default: [\"drag-canvas\", \"drag-node\"],\n        },\n        layout: {\n          type: \"fruchterman\",\n          gravity: 5,\n          speed: 5,\n          // for rendering after each iteration\n          tick: () => {\n            console.log(\"e\");\n            graph.refreshPositions();\n          },\n        },\n        animate: true,\n        defaultNode: {\n          size: 30,\n        },\n      } as any);\n\n      graph.get(\"canvas\").set(\"localRefresh\", false);\n      graph.data(data);\n      const waterURL =\n        \"https://gw.alipayobjects.com/zos/bmw-prod/8088a9d7-e5b0-42f2-b6b2-27c823043993.svg\";\n      const waterConfig = {\n        image: {\n          x: -15, //图片在水印画布的开始位置\n          y: 35, // 图片在水印画布的开始位置\n          width: 156, //图片的大小\n          height: 34, //图片的大小\n          rotate: 30, //图片的旋转角度\n        },\n      };\n      graph.render();\n      graph.fitView();\n      graph.setImageWaterMarker(waterURL, waterConfig, null);\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/generalGraph/dagreConfigurationTranslate/data.ts",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/f6/stories/generalGraph/dagreConfigurationTranslate/index.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport F6 from \"../../../src\";\nimport dagreLayout from \"../../../src/extends/layout/dagreLayout\";\nimport data from \"./data\";\n\nF6.registerLayout(\"dagre\", dagreLayout);\nexport default () => {\n  const ref = React.useRef(null);\n  const [description, setDescription] = useState(\"\");\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n\n  useEffect(() => {\n    if (!graph) {\n      // 创建F6实例\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        fitViewPadding: 30,\n        modes: {\n          default: [\"drag-canvas\", \"drag-node\"],\n        },\n        layout: {\n          type: \"dagre\",\n          nodeSize: [40, 20],\n          nodesep: 1,\n          ranksep: 1,\n        },\n        animate: true,\n        defaultNode: {\n          size: [40, 20],\n          type: \"rect\",\n          style: {\n            lineWidth: 2,\n            stroke: \"#5B8FF9\",\n            fill: \"#C6E5FF\",\n          },\n        },\n        defaultEdge: {\n          size: 1,\n          color: \"#e2e2e2\",\n          style: {\n            endArrow: {\n              path: \"M 0,0 L 8,4 L 8,-4 Z\",\n              fill: \"#e2e2e2\",\n            },\n          },\n        },\n      });\n\n      graph.data(data);\n      graph.render();\n      graph.fitView();\n\n      layoutConfigTranslation();\n\n      function layoutConfigTranslation() {\n        setTimeout(() => {\n          setDescription(\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 1, layout direction: Top->Bottom, alignment of nodes: DL\",\n          ),\n            graph.updateLayout({\n              ranksep: 10,\n            });\n        }, 1000);\n\n        setTimeout(() => {\n          setDescription(\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: DL\",\n          );\n          graph.updateLayout({\n            nodesep: 5,\n          });\n        }, 2500);\n\n        setTimeout(() => {\n          setDescription(\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UL\",\n          );\n          graph.updateLayout({\n            align: \"UL\",\n          });\n        }, 4000);\n\n        setTimeout(() => {\n          setDescription(\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UR\",\n          );\n          graph.updateLayout({\n            align: \"UR\",\n          });\n        }, 5500);\n\n        setTimeout(() => {\n          setDescription(\n            \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n          );\n          graph.updateLayout({\n            rankdir: \"LR\",\n            align: \"DL\",\n          });\n        }, 7000);\n\n        setTimeout(() => {\n          setDescription(\n            \"Dagre layout, rank seperation: 30, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n          );\n          graph.updateLayout({\n            ranksep: 30,\n          });\n        }, 8500);\n      }\n    }\n  }, []);\n\n  return (\n    <div>\n      <div>{description}</div>\n      <div ref={ref}></div>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/f6/stories/index.stories.tsx",
    "content": "import React from \"react\";\n\nimport type { Meta, StoryObj } from \"@storybook/react\";\n\nimport FruchtermanDemo from \"./fruchterman\";\nimport CollapseSlibingDemo from \"./interactive/collapseSlibing\";\nimport DagreConfigurationTranslateDemo from \"./generalGraph/dagreConfigurationTranslate\";\nimport MindMapDemo from \"./sceneCase/mindMap\";\nimport UITest from \"./uiTest\";\nimport SnapLineDemo from \"./snapLine\";\nimport PluginTooltipDemo from \"./pluginTooltip\";\nimport PluginLegendDemo from \"./pluginLegend\";\nimport PluginZoomSliderDemo from \"./pluginZoomSlider\";\nimport PluginEdgeFilterDemo from \"./pluginEdgeFilter\";\nimport PluginFisheyeDemo from \"./pluginFisheye\";\nimport PluginMniMapDemo from \"./pluginMiniMap\";\nimport PluginBundlingDemo from \"./pluginBundling\";\nimport MenuDemo from \"./pluginMenu\";\nimport NodeDemo from \"./nodeDemo\";\n\nimport {\n  INITIAL_VIEWPORTS,\n  MINIMAL_VIEWPORTS,\n} from \"@storybook/addon-viewport\";\n\nexport default {\n  title: \"Example\",\n  parameters: {\n    viewports: {\n      ...INITIAL_VIEWPORTS,\n      ...MINIMAL_VIEWPORTS,\n    },\n    defaultViewport: \"iphone14promax\",\n  },\n} as Meta;\n\nexport const CollapseSlibing = ((args) => (\n  <CollapseSlibingDemo {...args} />\n)).bind({});\nexport const MindMap = ((args) => <MindMapDemo {...args} />).bind({});\nexport const DagreConfigurationTranslate = ((args) => (\n  <DagreConfigurationTranslateDemo {...args} />\n)).bind({});\nexport const fruchterman = (args) => <FruchtermanDemo {...args} />;\n\nexport const uiTest = (args) => <UITest {...args} />;\nexport const SnapLine = (args) => <SnapLineDemo {...args} />;\n\nexport const PluginTooltip = (args) => <PluginTooltipDemo {...args} />;\nexport const PluginLegend = (args) => <PluginLegendDemo {...args} />;\nexport const PluginZoomSlider = (args) => <PluginZoomSliderDemo {...args} />;\nexport const PluginEdgeFilter = (args) => <PluginEdgeFilterDemo {...args} />;\n\nexport const PluginFisheye = (args) => <PluginFisheyeDemo {...args} />;\n\n// mini map\nexport const PluginMniMap = (args) => <PluginMniMapDemo {...args} />;\n\nexport const PluginBundling = (args) => <PluginBundlingDemo {...args} />;\n\nexport const PluginMenu = (args) => <MenuDemo {...args} />;\n\nexport const nodeDemo = (args) => <NodeDemo {...args} />;\n"
  },
  {
    "path": "packages/f6/stories/interactive/collapseSlibing/data.ts",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  cluster: \"c0\",\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      cluster: \"c0\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n          cluster: \"c1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          cluster: \"c1\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n              cluster: \"c1\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode5\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode6\",\n      cluster: \"c1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/f6/stories/interactive/collapseSlibing/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../../src\";\nimport TreeGraph from \"../../../src/extends/graph/treeGraph\";\nimport data from \"./data\";\n\nF6.registerGraph(\"TreeGraph\", TreeGraph);\n\n// custom the collapse-sibling behavior\nF6.registerBehavior(\"collapse-slibing\", {\n  getEvents() {\n    return {\n      \"node:tap\": \"onTap\",\n    };\n  },\n  onTap(evt) {\n    const { item } = evt;\n    const model = item.getModel();\n    const { cluster } = model;\n    const parentData = item.get(\"parent\").getModel();\n    const me = this;\n\n    if (model.collapsedSiblings) {\n      this.graph.removeChild(model.id);\n      setTimeout(() => {\n        const { children } = parentData;\n        for (let i = model.collapsedSiblings.length - 1; i >= 0; i--) {\n          const add = model.collapsedSiblings[i];\n          children.splice(add.idx, 0, add);\n        }\n        delete model.collapsedSiblings;\n        me.graph.updateChildren(children, parentData.id);\n      }, 550);\n      return;\n    }\n    const siblingData = parentData.children;\n    if (siblingData.length <= 1) return;\n    let count = 0;\n    const aggregateNode = {\n      id: `aggregate-node-${model.id}`,\n      children: [],\n      cluster,\n      collapsedSiblings: [],\n    };\n    let modelIdx = siblingData.length - 1;\n    for (let i = siblingData.length - 1; i >= 0; i--) {\n      const sibling = siblingData[i];\n      if (sibling.id === model.id) {\n        const remove = siblingData[i];\n        remove.idx = i;\n        aggregateNode.collapsedSiblings.push(remove);\n        modelIdx = Math.min(i, modelIdx);\n\n        aggregateNode.children = (siblingData[i].children || []).concat(\n          aggregateNode.children,\n        );\n      } else if (sibling.cluster === cluster && sibling.id !== model.id) {\n        count++;\n        aggregateNode.children = (siblingData[i].children || []).concat(\n          aggregateNode.children,\n        );\n        const remove = siblingData.splice(i, 1)[0];\n        remove.idx = i;\n        aggregateNode.collapsedSiblings.push(remove);\n        modelIdx = Math.min(i, modelIdx);\n      }\n    }\n    if (!count) return;\n    aggregateNode.label = count + 1;\n    aggregateNode.size = 16 + (count + 1) * 4;\n\n    this.graph.removeChild(model.id);\n    siblingData.splice(modelIdx, 0, aggregateNode);\n    setTimeout(() => {\n      me.graph.updateChildren(siblingData, parentData.id);\n    }, 550);\n  },\n});\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n\n  useEffect(() => {\n    if (!graph) {\n      const colors = [\"#5F95FF\", \"#61DDAA\", \"#65789B\"];\n      const colorSets = F6.Util.getColorSetsBySubjectColors(\n        colors,\n        \"#fff\",\n        \"default\",\n        \"#777\",\n      );\n\n      // 创建F6实例\n      graph = new F6.TreeGraph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        modes: {\n          default: [\"collapse-slibing\", \"drag-canvas\"],\n        },\n        layout: {\n          type: \"compactBox\",\n          direction: \"LR\",\n          defalutPosition: [],\n          getId: function getId(d) {\n            return d.id;\n          },\n          getHeight: function getHeight() {\n            return 16;\n          },\n          getWidth: function getWidth() {\n            return 16;\n          },\n          getVGap: function getVGap() {\n            return 10;\n          },\n          getHGap: function getHGap() {\n            return 50;\n          },\n        },\n        defaultEdge: {\n          type: \"cubic-horizontal\",\n          color: \"#A3B1BF\",\n        },\n      });\n\n      graph.node(function (node) {\n        const colorSet = colorSets[+node.cluster.replace(\"c\", \"\")];\n        return {\n          size: node.size || 16,\n          style: {\n            fill: colorSet.mainFill || \"#DEE9FF\",\n            stroke: colorSet.mainStroke || \"#5B8FF9\",\n          },\n        };\n      });\n\n      graph.data(data);\n      graph.render();\n      graph.fitView();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/nodeDemo/data.ts",
    "content": "const data = {\n  type: \"rect\",\n  label: \"F6UI演示\",\n  children: [\n    {\n      id: \"18\",\n      type: \"EQUITY_GRAPH_NODE_TYPE_COMPANY\",\n      tip: \"测试\",\n      circleIcon: \"\",\n      formattedName: \"深圳丹邦科技股份有限公\\n司\",\n      x: 0,\n      y: 0,\n      children: [],\n      originChildren: [],\n      side: \"down\",\n      path: {\n        招商银行股份有限公司: 1,\n      },\n      relationType: null,\n      tyshxydm: \"91440300732076027R\",\n      investRatio: 0.0238,\n      hasExpand: true,\n      ratio: 0.0238,\n      nodeType: \"ENTERPRISE_ORGANIZATION\",\n      name: \"深圳丹邦科技股份有限公司\",\n      formattedRatio: \"2.38%\",\n      isCircle: true,\n    },\n    {\n      id: \"19\",\n      type: \"EQUITY_GRAPH_NODE_TYPE_COMPANY_F6UI\",\n      tip: \"测试\",\n      circleIcon: \"\",\n      formattedName: \"上海黄金交易所\",\n      x: 0,\n      y: 0,\n      children: [],\n      originChildren: [],\n      side: \"down\",\n      path: {\n        招商银行股份有限公司: 1,\n      },\n      relationType: null,\n      tyshxydm: \"91310000736228569K\",\n      investRatio: 0.0071,\n      hasExpand: true,\n      ratio: 0.0071,\n      nodeType: \"ENTERPRISE_ORGANIZATION\",\n      name: \"上海黄金交易所\",\n      formattedRatio: \"0.71%\",\n      isCircle: true,\n    },\n  ],\n};\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/nodeDemo/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport TreeGraph from \"../../src/extends/graph/treeGraph\";\nimport data from \"./data\";\nimport equityCompanyNode from \"./node\";\nimport equityCompanyNodeF6UI from \"./uiNode\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      // debugger\n      F6.registerNode(\n        \"EQUITY_GRAPH_NODE_TYPE_COMPANY\",\n        equityCompanyNode,\n        \"rect\",\n      );\n      F6.registerNode(\n        \"EQUITY_GRAPH_NODE_TYPE_COMPANY_F6UI\",\n        equityCompanyNodeF6UI,\n        \"rect\",\n      );\n      F6.registerGraph(\"TreeGraph\", TreeGraph);\n      graph = new F6.TreeGraph({\n        container: ref.current,\n        width,\n        height,\n        fitView: true,\n        linkCenter: true,\n        defaultNode: {\n          type: \"rect\",\n          maxTextCount: 20,\n          size: [242, 106],\n          style: {\n            radius: 0,\n            fill: \"#FFFFFF\",\n            stroke: \"#91D5FF\",\n          },\n          labelCfg: {\n            style: {\n              fill: \"#333333\",\n              fontSize: 20,\n              textAlign: \"center\",\n            },\n          },\n          anchorPoints: [\n            [0.5, 0],\n            [0.5, 1],\n          ],\n        },\n        modes: {\n          default: [\"drag-node\", \"zoom-canvas\"],\n        },\n        layout: {\n          type: \"compactBox\",\n          direction: \"V\",\n          getId: function getId(d) {\n            return d.id;\n          },\n          getHeight: function getHeight() {\n            return 106;\n          },\n          getWidth: function getWidth() {\n            return 242;\n          },\n          getVGap: function getVGap() {\n            return 154 / 2;\n          },\n          getHGap: function getHGap() {\n            return 24 / 2;\n          },\n          getSide: function getSide(node) {\n            switch (node.data.side) {\n              case \"up\":\n                return \"left\";\n              case \"down\":\n                return \"right\";\n              default:\n                return \"left\";\n            }\n          },\n        },\n        defaultEdge: {\n          color: \"#999\",\n          style: {\n            stroke: \"#C5C5C5\",\n          },\n          labelCfg: {\n            style: {\n              fill: \"#000\",\n              fontSize: 20,\n              textAlign: \"left\",\n              fontStyle: \"Italic\",\n            },\n          },\n        },\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/nodeDemo/node.ts",
    "content": "// 展开icon\nconst collipseIcon = function collipseIcon(x, y, r) {\n  return [\n    [\"M\", x - r, y],\n    [\"A\", r, r, 0, 1, 0, x + r, y],\n    [\"A\", r, r, 0, 1, 0, x - r, y],\n    [\"M\", x + 7 - r, y],\n    [\"L\", x + r - 7, y],\n  ];\n};\n// 折叠icon\nconst expandIcon = function expandIcon(x, y, r) {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x + 7 - r, y],\n    [\"L\", x + r - 7, y],\n    [\"M\", x, y - r + 7],\n    [\"L\", x, y + r - 7],\n  ];\n};\n\n/**\n * 添加展开/折叠标记\n * @param {*} group\n * @param {*} side up ｜ down 上下布局的时候，位置不一样\n * @param {*} type expand ｜ collipse 展开/折叠类型\n * @param {*} h 容器高度\n */\nexport function addMarker(group, side, type, h, circleIcon?) {\n  let markerY = 0;\n  if (side === \"up\") {\n    markerY = -h / 2 - 1 - 16;\n  }\n  if (side === \"down\") {\n    markerY = h / 2 + 16 + 1;\n  }\n\n  group.addShape(\"marker\", {\n    attrs: {\n      x: 0,\n      y: markerY,\n      r: 14,\n      stroke: \"#FFFFFF\",\n      cursor: \"pointer\",\n      fill: \"#1890FF\",\n      symbol: type === \"expand\" ? expandIcon : collipseIcon,\n    },\n    name: type === \"expand\" ? \"add-item\" : \"remove-item\",\n  });\n}\n\n/**\n * 增加循环持股标记\n * @param {*} group\n * @param {*} x\n * @param {*} y\n * @param {*} icon\n */\nexport function addTag(group, x, y) {\n  const tagGroup = group.addGroup({\n    id: \"equity-tag\",\n    name: \"equity-tag\",\n  });\n\n  const tagKeyShape = tagGroup.addShape(\"rect\", {\n    attrs: {\n      width: 98,\n      height: 28,\n      stroke: \"#FFA39E\",\n      fill: \"#FFF1F0\",\n      x,\n      y,\n      radius: 2,\n    },\n  });\n  group.set(\"tagKeyShape\", tagKeyShape);\n\n  tagGroup.addShape(\"text\", {\n    attrs: {\n      fill: \"#FF4D4F\",\n      text: \"循环持股\",\n      textAlign: \"left\",\n      fontSize: 20,\n      width: 98,\n      x: x + 8,\n      y: y + 20 / 2 + 6 + 9,\n    },\n  });\n}\n\nexport default {\n  draw(cfg, group) {\n    const styles = this.getShapeStyle(cfg);\n    const { side, children, isCircle, hasExpand } = cfg;\n    const w = styles.width;\n    const h = styles.height;\n\n    const keyShape = group.addShape(\"rect\", {\n      attrs: {\n        ...styles,\n        x: -w / 2,\n        y: -h / 2,\n      },\n    });\n\n    const bg = \"#E6F7FF\";\n    const fontColor = \"#333333\";\n\n    let labelY = 10;\n    let rectH = h;\n\n    if (cfg.formattedName.includes(\"\\n\")) {\n      labelY = 6;\n    }\n    rectH = 70;\n\n    // 边框\n    group.addShape(\"rect\", {\n      attrs: {\n        width: w - 2,\n        height: rectH - 2,\n        fill: bg,\n        x: 1 - w / 2,\n        y: 1 - h / 2,\n      },\n      draggable: true,\n    });\n\n    // 格式化后文本\n    group.addShape(\"text\", {\n      attrs: {\n        fontSize: 20,\n        fill: fontColor,\n        text: cfg.formattedName,\n        width: w,\n        textAlign: \"center\",\n        x: 0,\n        y: labelY,\n        lineHeight: 28,\n      },\n      draggable: true,\n    });\n    group.addShape(\"text\", {\n      attrs: {\n        fill: \"#000000\",\n        fillOpacity: 0.45,\n        text: cfg.tip,\n        fontSize: 16,\n        width: w,\n        textAlign: \"center\",\n        x: 0,\n        y: (h - 70) / 2 + 70 - h / 2 + 8,\n      },\n    });\n\n    // addCircleBubble(group, -104 / 2, -h / 2 - 36 - 6, '循环持股');\n    addTag(group, 10, -22 / 2 - h / 2 - 5);\n\n    addMarker(group, side, children.length > 0 ? \"ellipse\" : \"expand\", h);\n\n    return keyShape;\n  },\n};\n"
  },
  {
    "path": "packages/f6/stories/nodeDemo/uiNode.ts",
    "content": "import { createUI } from \"@antv/f6-ui\";\n\nexport default {\n  draw(cfg, group) {\n    const styles = this.getShapeStyle(cfg);\n    const w = styles.width;\n    const h = styles.height;\n    const bg = \"#E6F7FF\";\n\n    const html = `\n      <root class=\"f6_ui_node\">\n        <div class= \"title\">\n          上海黄金交易所\n        </div>\n        <div class=\"tip\">\n          测试\n        </div>\n        <div class=\"tag\">循环持股</div>\n        <div class=\"marker\"> \n          <shape type=\"path\" path='[[\"M\",7,14],[\"L\",21,14],[\"M\",14,7],[\"L\",14,21]]'> </shape>\n        </div>\n      </root>\n    `;\n\n    const css = `\n      text{\n        font-family: sans-serif;\n      }\n      .f6_ui_node{\n        display: flex;\n        width: ${w};\n        height: ${h};\n        color: #333333;\n        text-align: center;\n        border: 1 solid #91D5FF;\n      }\n      .title{\n        padding: 20;\n        font-size: 20;\n        height: 70;\n        background: ${bg};\n        pointer-events: none;\n      }\n      .tip {\n        font-size: 16;\n        padding: 10;\n        color: #999;\n      }\n\n      .tag{\n        position: absolute;\n        top: -15;\n        right: 15;\n        width: 98;\n        height: 28;\n        border: 1 solid #FFA39E;\n        background: #FFF1F0;\n        padding: 2;\n        border-radius: 2;\n        font-size: 20;\n        color: #FF4D4F;\n      }\n\n      .marker{\n        position: absolute;\n        bottom: -30;\n        left: ${w / 2 - 28 / 2};\n        background: #1890FF;\n        width: 28;\n        height: 28;\n        border-radius: 14;\n        \n      }\n      shape{\n        background: black;\n        border: 1 solid #fff;\n      }\n    `;\n\n    const ui = createUI(html, css, group);\n    return ui.backgroudNode.get(\"children\")[0];\n  },\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginBundling/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginBundling/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\nimport { Bundling } from \"@antv/f6-plugin\";\nimport CircularLayout from \"@antv/f6/src/extends/layout/circularLayout\";\n\nF6.registerLayout(\"circular\", CircularLayout);\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n  const edgeBundling = new Bundling({\n    bundleThreshold: 0.1,\n  });\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        layout: {\n          type: \"circular\",\n          center: [width / 2, height / 2],\n          radius: height / 2.5,\n          ordering: null,\n        },\n        plugins: [edgeBundling],\n        defaultNode: {\n          size: [20, 20],\n          color: \"steelblue\",\n        },\n        defaultEdge: {\n          size: 1,\n          color: \"#999\",\n        },\n      });\n      graph.data(data);\n      graph.render();\n    }\n\n    setTimeout(() => {\n      edgeBundling.bundling(data);\n    }, 1000);\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginEdgeFilter/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginEdgeFilter/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\nimport plugins from \"../../../plugin/src\";\n\nconst EdgeFilterLens = plugins.EdgeFilterLens;\n\ndata.edges.forEach((edge) => {\n  edge.color = \"#aaa\";\n  edge.size = 2;\n  edge.style = {\n    opacity: 0.7,\n  };\n  edge.label = \"a\";\n});\nconst filterConfigs = {\n  trigger: \"drag\",\n  showLabel: \"edge\",\n  r: 60,\n};\nlet filterLens = new EdgeFilterLens(filterConfigs);\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n        },\n        plugins: [filterLens],\n        defaultEdge: {\n          labelCfg: {\n            autoRotate: true,\n            style: {\n              stroke: \"#fff\",\n              lineWidth: 2,\n            },\n          },\n        },\n        defaultNode: {\n          size: 15,\n          color: \"#5B8FF9\",\n          style: {\n            lineWidth: 2,\n            fill: \"#C6E5FF\",\n          },\n        },\n      });\n      graph.data(data);\n      graph.render();\n      graph.getEdges().forEach((edge) => {\n        edge\n          .getContainer()\n          .getChildren()\n          .forEach((shape) => {\n            if (shape.get(\"type\") === \"text\") shape.set(\"visible\", false);\n          });\n      });\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginFisheye/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginFisheye/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6, { ShapeStyle } from \"../../src\";\nimport data from \"./data\";\nimport { Fisheye } from \"@antv/f6-plugin\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      let fisheye = new Fisheye({\n        r: 200,\n        showLabel: true,\n        trigger: \"tap\",\n        scaleRBy: \"drag\",\n      });\n      const colors = [\n        \"#8FE9FF\",\n        \"#87EAEF\",\n        \"#FFC9E3\",\n        \"#A7C2FF\",\n        \"#FFA1E3\",\n        \"#FFE269\",\n        \"#BFCFEE\",\n        \"#FFA0C5\",\n        \"#D5FF86\",\n      ];\n\n      data.nodes.forEach((node: ShapeStyle) => {\n        node.label = node.id;\n        node.size = Math.random() * 30 + 10;\n        node.style = {\n          fill: colors[Math.floor(Math.random() * 9)],\n          lineWidth: 0,\n        };\n      });\n\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        fitView: true,\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n        },\n        plugins: [fisheye],\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginLegend/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"1:type1\",\n      legendType: \"type1\",\n    },\n    {\n      id: \"2\",\n      label: \"2:type2\",\n      legendType: \"type2\",\n    },\n    {\n      id: \"3\",\n      label: \"3:type1\",\n      legendType: \"type1\",\n    },\n    {\n      id: \"4\",\n      label: \"4:type3\",\n      legendType: \"type3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n      legendType: \"eType1\",\n      label: \"1->2:edge-type1\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n      legendType: \"eType3\",\n      label: \"1->4:edge-type3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"2\",\n      target: \"4\",\n      legendType: \"eType1\",\n      label: \"2->4:edge-type1\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginLegend/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\nimport { Legend } from \"@antv/f6-plugin\";\n\nconst typeConfigs = {\n  type1: {\n    type: \"circle\",\n    size: 5,\n    style: {\n      fill: \"#5B8FF9\",\n    },\n  },\n  type2: {\n    type: \"circle\",\n    size: 20,\n    style: {\n      fill: \"#5AD8A6\",\n    },\n  },\n  type3: {\n    type: \"rect\",\n    size: [10, 10],\n    style: {\n      fill: \"#5D7092\",\n    },\n  },\n  eType1: {\n    type: \"line\",\n    style: {\n      width: 20,\n      stroke: \"#F6BD16\",\n    },\n  },\n  eType2: {\n    type: \"cubic\",\n  },\n  eType3: {\n    type: \"quadratic\",\n    style: {\n      width: 25,\n      stroke: \"#6F5EF9\",\n    },\n  },\n};\n\ndata.nodes.forEach((node) => {\n  if (!node.legendType) return;\n  node = Object.assign(node, { ...typeConfigs[node.legendType] });\n});\ndata.edges.forEach((edge) => {\n  if (!edge.legendType) return;\n  const config = typeConfigs[edge.legendType];\n  edge = Object.assign(edge, { ...config });\n});\nconst legendData = {\n  nodes: [\n    {\n      id: \"type1\",\n      label: \"node-type1\",\n      order: 4,\n      ...typeConfigs[\"type1\"],\n    },\n    {\n      id: \"type2\",\n      label: \"node-type2\",\n      order: 0,\n      ...typeConfigs[\"type2\"],\n    },\n    {\n      id: \"type3\",\n      label: \"node-type3\",\n      order: 2,\n      ...typeConfigs[\"type3\"],\n    },\n  ],\n  edges: [\n    {\n      id: \"eType1\",\n      label: \"edge-type1\",\n      order: 2,\n      ...typeConfigs[\"eType1\"],\n    },\n    {\n      id: \"eType2\",\n      label: \"edge-type2\",\n      ...typeConfigs[\"eType2\"],\n    },\n    {\n      id: \"eType3\",\n      label: \"edge-type3\",\n      ...typeConfigs[\"eType3\"],\n    },\n  ],\n};\nconst legend = new Legend({\n  width: 300,\n  height: 200,\n  data: legendData,\n  align: \"center\",\n  layout: \"vertical\", // vertical\n  position: \"bottom-right\",\n  offsetY: 0,\n  padding: 10,\n  containerStyle: {\n    fill: \"#ccc\",\n    lineWidth: 1,\n  },\n  title: \"Legend\",\n  titleConfig: {\n    position: \"center\",\n    offsetX: 0,\n    offsetY: 0,\n  },\n  itemConfig: {},\n  filter: {\n    enable: true,\n    multiple: true,\n    trigger: \"click\",\n    graphActiveState: \"activeByLegend\",\n    graphInactiveState: \"inactiveByLegend\",\n    filterFunctions: {\n      type1: (d) => {\n        if (d.legendType === \"type1\") return true;\n        return false;\n      },\n      type2: (d) => {\n        if (d.legendType === \"type2\") return true;\n        return false;\n      },\n      type3: (d) => {\n        if (d.legendType === \"type3\") return true;\n        return false;\n      },\n      eType1: (d) => {\n        if (d.legendType === \"eType1\") return true;\n        return false;\n      },\n      eType2: (d) => {\n        if (d.legendType === \"eType2\") return true;\n        return false;\n      },\n      eType3: (d) => {\n        if (d.legendType === \"eType3\") return true;\n        return false;\n      },\n    },\n  },\n});\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        defaultNode: {\n          size: [80, 40],\n          type: \"rect\",\n        },\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n        },\n        plugins: [legend],\n        nodeStateStyles: {\n          activeByLegend: {\n            lineWidth: 10,\n            strokeOpacity: 0.5,\n          },\n          inactiveByLegend: {\n            opacity: 0.5,\n          },\n        },\n        edgeStateStyles: {\n          activeByLegend: {\n            lineWidth: 3,\n          },\n          inactiveByLegend: {\n            opacity: 0.5,\n          },\n        },\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginMenu/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      x: 200,\n      y: 100,\n      type: \"rect\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n      x: 250,\n      y: 250,\n      type: \"rect\",\n    },\n    {\n      id: \"node3\",\n      label: \"node3\",\n      x: 350,\n      y: 100,\n      type: \"rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"Test Label\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      label: \"Test Label 2\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginMenu/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\nimport { Menu } from \"@antv/f6-plugin\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    const contextMenu = new Menu({\n      getContent(evt) {\n        let header;\n        if (evt.target && evt.target.isCanvas && evt.target.isCanvas()) {\n          header = \"Canvas ContextMenu\";\n        } else if (evt.item) {\n          const itemType = evt.item.getType();\n          header = `${itemType.toUpperCase()} ContextMenu`;\n        }\n        return `\n        <div class=\"container\">\n          <div class=\"header\">${header}</div>\n          <div>\n            <div class=\"li\">div 1</div>\n            <div class=\"li\">div 2</div>\n          </div>\n        </div>\n        `;\n      },\n      getCss: () => {\n        return `\n          .container {\n            opacity: 0.9;\n            width: 150;\n            padding: 10 8;\n            border: 1 solid #e2e2e2;\n          }\n          .header {\n            padding-bottom: 10;\n            font-weight: bold;\n          }\n          .li {\n            padding-bottom: 10;\n          }\n        `;\n      },\n      handleMenuClick: (target, item) => {\n        console.log(target, item);\n      },\n      // offsetX and offsetY include the padding of the parent container\n      // 需要加上父级容器的 padding-left 16 与自身偏移量 10\n      offsetX: 0,\n      // 需要加上父级容器的 padding-top 24 、画布兄弟元素高度、与自身偏移量 10\n      offsetY: 0,\n      // the types of items that allow the menu show up\n      // 在哪些类型的元素上响应\n      itemTypes: [\"node\", \"edge\", \"canvas\"],\n    });\n\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        fitView: true,\n        plugins: [contextMenu],\n        defaultNode: {\n          size: [80, 40],\n          type: \"rect\",\n          style: {\n            fill: \"#DEE9FF\",\n            stroke: \"#5B8FF9\",\n          },\n        },\n        defaultEdge: {\n          style: {\n            stroke: \"#b5b5b5\",\n            lineAppendWidth: 3, // Enlarge the range the edge to be hitted\n          },\n          labelCfg: {\n            autoRotate: true,\n            style: {\n              // A white stroke with width 5 helps show the label more clearly avoiding the interference of the overlapped edge\n              stroke: \"white\",\n              lineWidth: 5,\n            },\n          },\n        },\n        modes: {\n          default: [\"drag-node\"],\n        },\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginMiniMap/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginMiniMap/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport { MiniMap } from \"@antv/f6-plugin/src\";\nimport data from \"./data\";\n\nconst miniMap = new MiniMap();\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        layout: {\n          type: \"dagre\",\n          rankdir: \"LR\",\n          align: \"DL\",\n          nodesepFunc: () => 1,\n          ranksepFunc: () => 1,\n        },\n        defaultNode: {\n          size: [80, 40],\n          type: \"rect\",\n          style: {\n            fill: \"#DEE9FF\",\n            stroke: \"#5B8FF9\",\n          },\n        },\n        defaultEdge: {\n          style: {\n            stroke: \"#b5b5b5\",\n            lineAppendWidth: 3,\n          },\n        },\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\"],\n        },\n        plugins: [miniMap],\n      });\n      graph.data(data);\n      graph.render();\n    }\n\n    const handleZoom = (e) => {\n      console.log(e);\n    };\n\n    ref.current.addEventListener(\"wheel\", handleZoom);\n\n    return () => {\n      ref.current.removeEventListener(\"wheel\", handleZoom);\n    };\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginTooltip/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"node-0\",\n      x: 100,\n      y: 100,\n      description: \"This is node-0.\",\n      subdescription: \"This is subdescription of node-0.\",\n    },\n    {\n      id: \"1\",\n      label: \"node-1\",\n      x: 250,\n      y: 100,\n      description: \"This is node-1.\",\n      subdescription: \"This is subdescription of node-1.\",\n    },\n    {\n      id: \"2\",\n      label: \"node-2\",\n      x: 150,\n      y: 310,\n      description: \"This is node-2.\",\n      subdescription: \"This is subdescription of node-2.\",\n    },\n    {\n      id: \"3\",\n      label: \"node-3\",\n      x: 320,\n      y: 310,\n      description: \"This is node-3.\",\n      subdescription: \"This is subdescription of node-3.\",\n    },\n  ],\n  edges: [\n    {\n      id: \"e0\",\n      source: \"0\",\n      target: \"1\",\n      description: \"This is edge from node 0 to node 1.\",\n    },\n    {\n      id: \"e1\",\n      source: \"0\",\n      target: \"2\",\n      description: \"This is edge from node 0 to node 2.\",\n    },\n    {\n      id: \"e2\",\n      source: \"0\",\n      target: \"3\",\n      description: \"This is edge from node 0 to node 3.\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginTooltip/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\nimport { Tooltip } from \"@antv/f6-plugin\";\n\nconst tooltip = new Tooltip({\n  trigger: \"press\",\n  offsetX: 0,\n  offsetY: 0,\n  // the types of items that allow the tooltip show up\n  // 允许出现 tooltip 的 item 类型\n  itemTypes: [\"node\", \"edge\"],\n  // custom the tooltip's content\n  // 自定义 tooltip 内容\n  getContent: (e) => {\n    // outDiv.style.padding = '0px 0px 20px 0px';\n    return `\n      <div class=\"f6-tooltip-container\">\n        <div>Custom Content</div>\n        <div class='tooltip-type'>Type: ${e.item.getType()}</div>\n        <div class='tooltip-id'>Label: ${\n          e.item.getModel().label || e.item.getModel().id\n        }</div>\n      </div>\n  `;\n  },\n  getCss: () => `\n    .f6-tooltip-container {\n      position: absolute;\n      width: 150;\n      border: 1 solid #e2e2e2;\n      border-radius: 4;\n      font-size: 12;\n      color: #545454;\n      background-color: rgba(255, 255, 255, 0.9);\n      padding: 10 8;\n    }\n\n    .f6-tooltip-container div{\n      height: 20;\n    }\n    \n    .tooltip-type {\n      padding: 0;\n      margin: 0;\n    }\n    .tooltip-id {\n      color: #531dab;\n    }\n  `,\n});\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        defaultNode: {\n          size: [80, 40],\n          type: \"rect\",\n        },\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n        },\n        plugins: [tooltip],\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/pluginZoomSlider/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/pluginZoomSlider/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport { ZoomSlider } from \"@antv/f6-plugin\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\n\nconst zoomSlider = new ZoomSlider();\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        defaultNode: {\n          size: 30,\n        },\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n        },\n        plugins: [zoomSlider],\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/sceneCase/mindMap/data.ts",
    "content": "const rawData = {\n  label: \"Modeling Methods\",\n  id: \"0\",\n  children: [\n    {\n      label: \"Classification\",\n      id: \"0-1\",\n      color: \"#5AD8A6\",\n      children: [\n        {\n          label: \"Logistic regression\",\n          id: \"0-1-1\",\n        },\n        {\n          label: \"Linear discriminant analysis\",\n          id: \"0-1-2\",\n        },\n        {\n          label: \"Rules\",\n          id: \"0-1-3\",\n        },\n        {\n          label: \"Decision trees\",\n          id: \"0-1-4\",\n        },\n        {\n          label: \"Naive Bayes\",\n          id: \"0-1-5\",\n        },\n        {\n          label: \"K nearest neighbor\",\n          id: \"0-1-6\",\n        },\n        {\n          label: \"Probabilistic neural network\",\n          id: \"0-1-7\",\n        },\n        {\n          label: \"Support vector machine\",\n          id: \"0-1-8\",\n        },\n      ],\n    },\n    {\n      label: \"Consensus\",\n      id: \"0-2\",\n      color: \"#F6BD16\",\n      children: [\n        {\n          label: \"Models diversity\",\n          id: \"0-2-1\",\n          children: [\n            {\n              label: \"Different initializations\",\n              id: \"0-2-1-1\",\n            },\n            {\n              label: \"Different parameter choices\",\n              id: \"0-2-1-2\",\n            },\n            {\n              label: \"Different architectures\",\n              id: \"0-2-1-3\",\n            },\n            {\n              label: \"Different modeling methods\",\n              id: \"0-2-1-4\",\n            },\n            {\n              label: \"Different training sets\",\n              id: \"0-2-1-5\",\n            },\n            {\n              label: \"Different feature sets\",\n              id: \"0-2-1-6\",\n            },\n          ],\n        },\n        {\n          label: \"Methods\",\n          id: \"0-2-2\",\n          children: [\n            {\n              label: \"Classifier selection\",\n              id: \"0-2-2-1\",\n            },\n            {\n              label: \"Classifier fusion\",\n              id: \"0-2-2-2\",\n            },\n          ],\n        },\n        {\n          label: \"Common\",\n          id: \"0-2-3\",\n          children: [\n            {\n              label: \"Bagging\",\n              id: \"0-2-3-1\",\n            },\n            {\n              label: \"Boosting\",\n              id: \"0-2-3-2\",\n            },\n            {\n              label: \"AdaBoost\",\n              id: \"0-2-3-3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      label: \"Regression\",\n      id: \"0-3\",\n      color: \"#269A99\",\n      children: [\n        {\n          label: \"Multiple linear regression\",\n          id: \"0-3-1\",\n        },\n        {\n          label: \"Partial least squares\",\n          id: \"0-3-2\",\n        },\n        {\n          label: \"Multi-layer feedforward neural network\",\n          id: \"0-3-3\",\n        },\n        {\n          label: \"General regression neural network\",\n          id: \"0-3-4\",\n        },\n        {\n          label: \"Support vector regression\",\n          id: \"0-3-5\",\n        },\n      ],\n    },\n  ],\n};\n\nconst dataTransform = (data_) => {\n  const changeData = (d, level = 0, color) => {\n    const data = {\n      ...d,\n    };\n    switch (level) {\n      case 0:\n        data.type = \"dice-mind-map-root\";\n        break;\n      case 1:\n        data.type = \"dice-mind-map-sub\";\n        break;\n      default:\n        data.type = \"dice-mind-map-leaf\";\n        break;\n    }\n\n    data.hover = false;\n\n    if (color) {\n      data.color = color;\n    }\n\n    if (level === 1 && !d.direction) {\n      if (!d.direction) {\n        data.direction =\n          d.id.charCodeAt(d.id.length - 1) % 2 === 0 ? \"right\" : \"left\";\n      }\n    }\n\n    if (d.children) {\n      data.children = d.children.map((child) =>\n        changeData(child, level + 1, data.color),\n      );\n    }\n    return data;\n  };\n  return changeData(data_);\n};\n\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/f6/stories/sceneCase/mindMap/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../../src\";\nimport TreeGraph from \"../../../src/extends/graph/treeGraph\";\nimport data from \"./data\";\n\nconst { Util } = F6;\n\nF6.registerGraph(\"TreeGraph\", TreeGraph);\n\nconst colorArr = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#6F5EF9\",\n  \"#6DC8EC\",\n  \"#D3EEF9\",\n  \"#DECFEA\",\n  \"#FFE0C7\",\n  \"#1E9493\",\n  \"#BBDEDE\",\n  \"#FF99C3\",\n  \"#FFE0ED\",\n  \"#CDDDFD\",\n  \"#CDF3E4\",\n  \"#CED4DE\",\n  \"#FCEBB9\",\n  \"#D3CEFD\",\n  \"#945FB9\",\n  \"#FF9845\",\n];\n\nconst rawData = {\n  label: \"Modeling Methods\",\n  id: \"0\",\n  children: [\n    {\n      label: \"Classification\",\n      id: \"0-1\",\n      color: \"#5AD8A6\",\n      children: [\n        {\n          label: \"Logistic regression\",\n          id: \"0-1-1\",\n        },\n        {\n          label: \"Linear discriminant analysis\",\n          id: \"0-1-2\",\n        },\n        {\n          label: \"Rules\",\n          id: \"0-1-3\",\n        },\n        {\n          label: \"Decision trees\",\n          id: \"0-1-4\",\n        },\n        {\n          label: \"Naive Bayes\",\n          id: \"0-1-5\",\n        },\n        {\n          label: \"K nearest neighbor\",\n          id: \"0-1-6\",\n        },\n        {\n          label: \"Probabilistic neural network\",\n          id: \"0-1-7\",\n        },\n        {\n          label: \"Support vector machine\",\n          id: \"0-1-8\",\n        },\n      ],\n    },\n    {\n      label: \"Consensus\",\n      id: \"0-2\",\n      color: \"#F6BD16\",\n      children: [\n        {\n          label: \"Models diversity\",\n          id: \"0-2-1\",\n          children: [\n            {\n              label: \"Different initializations\",\n              id: \"0-2-1-1\",\n            },\n            {\n              label: \"Different parameter choices\",\n              id: \"0-2-1-2\",\n            },\n            {\n              label: \"Different architectures\",\n              id: \"0-2-1-3\",\n            },\n            {\n              label: \"Different modeling methods\",\n              id: \"0-2-1-4\",\n            },\n            {\n              label: \"Different training sets\",\n              id: \"0-2-1-5\",\n            },\n            {\n              label: \"Different feature sets\",\n              id: \"0-2-1-6\",\n            },\n          ],\n        },\n        {\n          label: \"Methods\",\n          id: \"0-2-2\",\n          children: [\n            {\n              label: \"Classifier selection\",\n              id: \"0-2-2-1\",\n            },\n            {\n              label: \"Classifier fusion\",\n              id: \"0-2-2-2\",\n            },\n          ],\n        },\n        {\n          label: \"Common\",\n          id: \"0-2-3\",\n          children: [\n            {\n              label: \"Bagging\",\n              id: \"0-2-3-1\",\n            },\n            {\n              label: \"Boosting\",\n              id: \"0-2-3-2\",\n            },\n            {\n              label: \"AdaBoost\",\n              id: \"0-2-3-3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      label: \"Regression\",\n      id: \"0-3\",\n      color: \"#269A99\",\n      children: [\n        {\n          label: \"Multiple linear regression\",\n          id: \"0-3-1\",\n        },\n        {\n          label: \"Partial least squares\",\n          id: \"0-3-2\",\n        },\n        {\n          label: \"Multi-layer feedforward neural network\",\n          id: \"0-3-3\",\n        },\n        {\n          label: \"General regression neural network\",\n          id: \"0-3-4\",\n        },\n        {\n          label: \"Support vector regression\",\n          id: \"0-3-5\",\n        },\n      ],\n    },\n  ],\n};\n\nF6.registerNode(\n  \"dice-mind-map-root\",\n  {\n    jsx: (cfg) => {\n      debugger;\n      const width = Util.getTextSize(cfg.label, 16)[0] + 24;\n      const stroke = cfg.style.stroke || \"#096dd9\";\n      const fill = cfg.style.fill;\n\n      return `\n      <group>\n        <rect draggable=\"true\" style={{width: ${width}, height: 42, stroke: ${stroke}, radius: 4}} keyshape>\n          <text style={{ fontSize: 16, marginLeft: 12, marginTop: 12 }}>${\n            cfg.label\n          }</text>\n          <text style={{ marginLeft: ${\n            width - 16\n          }, marginTop: -20, stroke: '#66ccff', fill: '#000', cursor: 'pointer', opacity: ${\n            cfg.hover ? 0.75 : 0\n          } }} action=\"add\">+</text>\n        </rect>\n      </group>\n    `;\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n  },\n  \"single-node\",\n);\nF6.registerNode(\n  \"dice-mind-map-sub\",\n  {\n    jsx: (cfg) => {\n      const width = Util.getTextSize(cfg.label, 14)[0] + 24;\n      const color = cfg.color || cfg.style.stroke;\n\n      return `\n      <group>\n        <rect draggable=\"true\" style={{width: ${\n          width + 24\n        }, height: 22}} keyshape>\n          <text draggable=\"true\" style={{ fontSize: 14, marginLeft: 12, marginTop: 6 }}>${\n            cfg.label\n          }</text>\n          <text style={{ marginLeft: ${\n            width - 8\n          }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n            cfg.hover ? 0.75 : 0\n          }, next: 'inline' }} action=\"add\">+</text>\n          <text style={{ marginLeft: ${\n            width - 4\n          }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n            cfg.hover ? 0.75 : 0\n          }, next: 'inline' }} action=\"delete\">-</text>\n        </rect>\n        <rect style={{ fill: ${color}, width: ${\n          width + 24\n        }, height: 2, x: 0, y: 22 }} />\n        \n      </group>\n    `;\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.965],\n        [1, 0.965],\n      ];\n    },\n  },\n  \"single-node\",\n);\nF6.registerNode(\n  \"dice-mind-map-leaf\",\n  {\n    jsx: (cfg) => {\n      const width = Util.getTextSize(cfg.label, 12)[0] + 24;\n      const color = cfg.color || cfg.style.stroke;\n\n      return `\n      <group>\n        <rect draggable=\"true\" style={{width: ${\n          width + 20\n        }, height: 26, fill: 'transparent' }}>\n          <text style={{ fontSize: 12, marginLeft: 12, marginTop: 6 }}>${\n            cfg.label\n          }</text>\n              <text style={{ marginLeft: ${\n                width - 8\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"add\">+</text>\n              <text style={{ marginLeft: ${\n                width - 4\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"delete\">-</text>\n        </rect>\n        <rect style={{ fill: ${color}, width: ${\n          width + 24\n        }, height: 2, x: 0, y: 32 }} />\n        \n      </group>\n    `;\n    },\n    getAnchorPoints() {\n      return [\n        [0, 0.965],\n        [1, 0.965],\n      ];\n    },\n  },\n  \"single-node\",\n);\nF6.registerBehavior(\"dice-mindmap\", {\n  getEvents() {\n    return {\n      \"node:tap\": \"clickNode\",\n      \"node:dbltap\": \"editNode\",\n    };\n  },\n  clickNode(evt) {\n    debugger;\n    const model = evt.item.get(\"model\");\n    const name = evt.target.get(\"action\");\n    switch (name) {\n      case \"add\":\n        const newId =\n          model.id +\n          \"-\" +\n          (((model.children || []).reduce((a, b) => {\n            const num = Number(b.id.split(\"-\").pop());\n            return a < num ? num : a;\n          }, 0) || 0) +\n            1);\n        evt.currentTarget.updateItem(evt.item, {\n          children: (model.children || []).concat([\n            {\n              id: newId,\n              direction:\n                newId.charCodeAt(newId.length - 1) % 2 === 0 ? \"right\" : \"left\",\n              label: \"New\",\n              type: \"dice-mind-map-leaf\",\n              color:\n                model.color ||\n                colorArr[Math.floor(Math.random() * colorArr.length)],\n            },\n          ]),\n        });\n        evt.currentTarget.layout(false);\n        break;\n      case \"delete\":\n        const parent = evt.item.get(\"parent\");\n        evt.currentTarget.updateItem(parent, {\n          children: (parent.get(\"model\").children || []).filter(\n            (e) => e.id !== model.id,\n          ),\n        });\n        evt.currentTarget.layout(false);\n        break;\n      case \"edit\":\n        break;\n      default:\n        return;\n    }\n  },\n  editNode(evt) {\n    const item = evt.item;\n    const model = item.get(\"model\");\n    const { x, y } = item.calculateBBox();\n    const graph = evt.currentTarget;\n    const realPosition = evt.currentTarget.getClientByPoint(x, y);\n    const el = document.createElement(\"div\");\n    const fontSizeMap = {\n      \"dice-mind-map-root\": 24,\n      \"dice-mind-map-sub\": 18,\n      \"dice-mind-map-leaf\": 16,\n    };\n    el.style.fontSize = fontSizeMap[model.type] + \"px\";\n    el.style.position = \"fixed\";\n    el.style.top = realPosition.y + \"px\";\n    el.style.left = realPosition.x + \"px\";\n    el.style.paddingLeft = \"12px\";\n    el.style.transformOrigin = \"top left\";\n    el.style.transform = `scale(${evt.currentTarget.getZoom()})`;\n    const input = document.createElement(\"input\");\n    input.style.border = \"none\";\n    input.value = model.label;\n    input.style.width =\n      Util.getTextSize(model.label, fontSizeMap[model.type])[0] + \"px\";\n    input.className = \"dice-input\";\n    el.className = \"dice-input\";\n    el.appendChild(input);\n    document.body.appendChild(el);\n    const destroyEl = () => {\n      document.body.removeChild(el);\n    };\n    const clickEvt = (event) => {\n      if (\n        !(\n          event.target &&\n          event.target.className &&\n          event.target.className.includes(\"dice-input\")\n        )\n      ) {\n        window.removeEventListener(\"mousedown\", clickEvt);\n        window.removeEventListener(\"scroll\", clickEvt);\n        graph.updateItem(item, {\n          label: input.value,\n        });\n        graph.layout(false);\n        graph.off(\"wheelZoom\", clickEvt);\n        destroyEl();\n      }\n    };\n    graph.on(\"wheelZoom\", clickEvt);\n    window.addEventListener(\"mousedown\", clickEvt);\n    window.addEventListener(\"scroll\", clickEvt);\n    input.addEventListener(\"keyup\", (event) => {\n      if (event.key === \"Enter\") {\n        clickEvt({\n          target: {},\n        });\n      }\n    });\n  },\n});\nF6.registerBehavior(\"scroll-canvas\", {\n  getEvents: function getEvents() {\n    return {\n      wheel: \"onWheel\",\n    };\n  },\n\n  onWheel: function onWheel(ev) {\n    const { graph } = this;\n    if (!graph) {\n      return;\n    }\n    if (ev.ctrlKey) {\n      const canvas = graph.get(\"canvas\");\n      const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n      let ratio = graph.getZoom();\n      if (ev.wheelDelta > 0) {\n        ratio += ratio * 0.05;\n      } else {\n        ratio *= ratio * 0.05;\n      }\n      graph.zoomTo(ratio, {\n        x: point.x,\n        y: point.y,\n      });\n    } else {\n      const x = ev.deltaX || ev.movementX;\n      const y = ev.deltaY || ev.movementY || (-ev.wheelDelta * 125) / 3;\n      graph.translate(-x, -y);\n    }\n    ev.preventDefault();\n  },\n});\n\nconst dataTransform = (data) => {\n  const changeData = (d, level = 0, color) => {\n    const data = {\n      ...d,\n    };\n    switch (level) {\n      case 0:\n        data.type = \"dice-mind-map-root\";\n        break;\n      case 1:\n        data.type = \"dice-mind-map-sub\";\n        break;\n      default:\n        data.type = \"dice-mind-map-leaf\";\n        break;\n    }\n\n    data.hover = false;\n\n    if (color) {\n      data.color = color;\n    }\n\n    if (level === 1 && !d.direction) {\n      if (!d.direction) {\n        data.direction =\n          d.id.charCodeAt(d.id.length - 1) % 2 === 0 ? \"right\" : \"left\";\n      }\n    }\n\n    if (d.children) {\n      data.children = d.children.map((child) =>\n        changeData(child, level + 1, data.color),\n      );\n    }\n    return data;\n  };\n  return changeData(data);\n};\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n\n  useEffect(() => {\n    if (!graph) {\n      // 创建F6实例\n      graph = new F6.TreeGraph({\n        container: ref.current,\n        width,\n        height,\n        fitView: true,\n        fitViewPadding: [10, 20],\n        layout: {\n          type: \"mindmap\",\n          direction: \"H\",\n          getHeight: () => {\n            return 16;\n          },\n          getWidth: (node) => {\n            return node.level === 0\n              ? Util.getTextSize(node.label, 16)[0] + 12\n              : Util.getTextSize(node.label, 12)[0];\n          },\n          getVGap: () => {\n            return 10;\n          },\n          getHGap: () => {\n            return 60;\n          },\n          getSide: (node) => {\n            return node.data.direction;\n          },\n        },\n        defaultEdge: {\n          type: \"cubic-horizontal\",\n          style: {\n            lineWidth: 2,\n          },\n        },\n        minZoom: 0.5,\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"dice-mindmap\"],\n        },\n      });\n      graph.data(dataTransform(rawData));\n      graph.render();\n      graph.fitView();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/snapLine/data.ts",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/f6/stories/snapLine/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport { SnapLine } from \"@antv/f6-plugin\";\nimport F6 from \"../../src\";\nimport data from \"./data\";\n\nconst snapLine = new SnapLine();\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        linkCenter: true,\n        defaultNode: {\n          size: 30,\n        },\n        modes: {\n          default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n        },\n        plugins: [snapLine],\n      });\n      graph.data(data);\n      graph.render();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/stories/uiTest/data.ts",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"a\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"a\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"a\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"a\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"a\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"a\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"a\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"a\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"a\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"a\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"a\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"a\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"a\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"b\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"b\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"b\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"b\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"b\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"c\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"c\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"c\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"c\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"c\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"c\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"c\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"c\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"c\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"c\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"c\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"c\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"c\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"d\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"d\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/f6/stories/uiTest/index.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport F6 from \"../../src\";\nimport { TimeBar } from \"@antv/f6-plugin\";\n\nexport default () => {\n  const ref = React.useRef(null);\n  const height = window.innerHeight - 32; // demos padding\n  const width = window.innerWidth - 32;\n  const data = {\n    nodes: [],\n    edges: [],\n  };\n\n  for (let i = 0; i < 50; i++) {\n    const id = `node-${i}`;\n    data.nodes.push({\n      id,\n      date: Number(`2020${i}`),\n      value: Math.round(Math.random() * 300),\n    });\n\n    data.edges.push({\n      source: `node-${Math.round(Math.random() * 90)}`,\n      target: `node-${Math.round(Math.random() * 90)}`,\n    });\n  }\n\n  const timeBarData = [];\n\n  for (let i = 0; i < 50; i++) {\n    timeBarData.push({\n      date: Number(`2020${i}`),\n      value: Math.round(Math.random() * 300),\n    });\n  }\n  let count = 0;\n  const timebar = new TimeBar({\n    x: 0,\n    y: 0,\n    width,\n    padding: 0,\n    type: \"simple\",\n    data: timeBarData,\n  });\n\n  let graph = null;\n  useEffect(() => {\n    if (!graph) {\n      graph = new F6.Graph({\n        container: ref.current,\n        width,\n        height,\n        pixelRatio: 2,\n        fitView: true,\n        localRefresh: false,\n        modes: {\n          default: [\"drag-canvas\", \"drag-node\"],\n        },\n        animate: false,\n        defaultNode: {\n          size: 30,\n        },\n        plugins: [timebar],\n      } as any);\n\n      graph.get(\"canvas\").set(\"localRefresh\", false);\n      graph.data(data);\n      graph.render();\n      graph.fitView();\n    }\n  }, []);\n\n  return <div ref={ref}></div>;\n};\n"
  },
  {
    "path": "packages/f6/vite.config.ts",
    "content": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport path from \"path\";\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: {\n      \"@\": path.resolve(__dirname, \"src\"),\n      \"@antv/f6\": path.resolve(__dirname),\n      \"@antv/f6-ui\": path.resolve(__dirname, \"../f6-ui\"),\n    },\n  },\n  build: {\n    lib: {\n      entry: path.resolve(__dirname, \"src/index.ts\"), // 入口文件\n      name: \"f6\", // UMD 构建时的全局变量名\n      fileName: (format) => `index.${format}.js`, // 输出文件名\n    },\n    rollupOptions: {\n      // 确保 external 包不会被打包到库中\n      external: [\"react\", \"react-dom\"],\n      output: [\n        {\n          // CommonJS\n          format: \"cjs\",\n          dir: \"dist/cjs\",\n        },\n        {\n          // ESM\n          format: \"es\",\n          dir: \"dist/esm\",\n        },\n        {\n          // UMD\n          format: \"umd\",\n          dir: \"dist/umd\",\n          name: \"f6\",\n          globals: {\n            react: \"React\",\n            \"react-dom\": \"ReactDOM\",\n          },\n        },\n      ],\n    },\n  },\n});\n"
  },
  {
    "path": "packages/f6-alipay/CHANGELOG.md",
    "content": ""
  },
  {
    "path": "packages/f6-alipay/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 openwayne\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/f6-alipay/babel.config.js",
    "content": "module.exports = {\n  presets: [\n    [\n      \"@babel/preset-env\",\n      {\n        loose: true,\n        modules: false,\n      },\n    ],\n    \"@babel/preset-typescript\",\n  ],\n  plugins: [\n    \"@babel/plugin-syntax-dynamic-import\",\n    \"@babel/plugin-transform-runtime\",\n  ],\n};\n"
  },
  {
    "path": "packages/f6-alipay/demo/app.acss",
    "content": "page {\n  background-color: #f5f5f5;\n}"
  },
  {
    "path": "packages/f6-alipay/demo/app.js",
    "content": "App({\n  globalData: {\n    // miniAliUiLang: 'en-US',\n  },\n  onLaunch() {},\n  onShow() {},\n  onHide() {},\n});\n"
  },
  {
    "path": "packages/f6-alipay/demo/app.json",
    "content": "{\n  \"pages\": [\n    \"pages/native-test/native-test\",\n    \"pages/g6/g6\",\n    \"pages/native-canvas/index\",\n    \"pages/native-test-fullpage/index\",\n    \"pages/image/image\"\n  ],\n  \"window\": {\n    \"enableWK\": \"YES\",\n    \"enableDSL\": \"YES\",\n    \"enableJSC\": \"YES\",\n    \"defaultTitle\": \"F6组件测试\",\n    \"backgroundColor\": \"#F5F5F9\",\n    \"pullRefresh\": false,\n    \"allowsBounceVertical\": \"NO\"\n  },\n  \"debug\": true\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/mini.project.json",
    "content": "{\n  \"component2\": true,\n  \"axmlStrictCheck\": true,\n  \"enableAppxNg\": true,\n  \"enableNodeModuleBabelTransform\": true,\n  \"exclude\": [\"dist/**/*\"]\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/package.json",
    "content": "{\n  \"name\": \"demo\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"@antv/g6-mobile\": \"^0.0.1-beta.14\",\n    \"tslib\": \"2.3.0\",\n    \"@antv/f6\": \"^0.0.13\",\n    \"@antv/f6-ui\": \"1.0.0\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/g6/g6.acss",
    "content": ""
  },
  {
    "path": "packages/f6-alipay/demo/pages/g6/g6.axml",
    "content": "<native-canvas\n  width=\"{{width}}\"\n  height=\"{{height - 100}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  forceMini=\"{{true}}\"\n  onInit=\"onCanvasInit\"\n  onTouchEvent=\"onTouch\"\n/>\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/g6/g6.js",
    "content": "import { createUI } from \"@antv/f6-ui/dist/f6GUI\";\nimport F6 from \"../../../../f6\";\nimport forceLayout from \"../../../../f6/dist/extends/layout/forceLayout\";\n\nF6.registerLayout(\"force\", forceLayout);\n\nfunction test(group) {\n  const html = `\n    <div id=\"lll\">\n      <div class=\"test\">\n        <shape type=\"rect\" r=\"10\" path=\"M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80\" >ttt</shape>\n      </div>\n      <div class=\"real\">       \n       <image src=\"https://gw.alipayobjects.com/mdn/rms_6ae20b/afts/img/A*N4ZMS7gHsUIAAAAAAAAAAABkARQnAQ\"></image>\n      </div>\n      <div class=\"real\">testtesetsets</div>\n      <div class=\"test\">testtesetsets</div>\n      <div class=\"real\">testtesetsets</div>\n    </div>\n  `;\n  const css = `\n    #lll {\n      width: 600;\n      height: 200;\n      display: flex;\n      flexDirection: row;\n      flex-wrap: nowrap;\n      justify-content: flex-start;\n      align-items: center;\n\n      background: blue;\n      color: black;\n      border: 20 solid rgba(0,0,0,0.5);\n      border-radius: 10;\n\n      font-size: 24;\n    }\n    div {\n      background: red;\n    }\n    .test {\n      background: yellow;\n      padding-left: 0;\n    }\n\n    #lll div{\n      margin-left: 10;\n      text-align: left;\n      width: 100;\n      height: 100;\n    }\n    \n    #lll div.real{\n      text-align: left;\n    }\n    shape {\n      background: #ff00ff;\n      top: 0;\n      left: 0;\n      width: 50;\n      height: 50;\n      text-align: center;\n    }\n    image {\n      width: 50;\n      height: 50;\n    }\n  `;\n  // 样式解析计算，简写样式展开。\n  console.log(createUI);\n  const ui = createUI(html, css, group);\n  console.log(\"query\", ui.query(\"#lll div.real\"));\n\n  console.log(ui);\n}\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get(\"model\");\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\nconst data = {\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n};\n\nPage({\n  data: {\n    width: 500,\n    height: 500,\n  },\n  onLoad() {\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas, renderer) {\n    console.log(ctx, rect, canvas);\n    this.graph = new F6.Graph({\n      context: ctx,\n      renderer,\n      width: this.data.width,\n      height: this.data.height,\n      fitView: true,\n      layout: {\n        type: \"force\",\n        preventOverlap: true,\n        linkDistance: (d) => {\n          if (d.source.id === \"node0\") {\n            return 100;\n          }\n          return 30;\n        },\n        nodeStrength: (d) => {\n          if (d.isLeaf) {\n            return -50;\n          }\n          return -10;\n        },\n        edgeStrength: (d) => {\n          if (\n            d.source.id === \"node1\" ||\n            d.source.id === \"node2\" ||\n            d.source.id === \"node3\"\n          ) {\n            return 0.7;\n          }\n          return 0.1;\n        },\n        onTick: () => {\n          const nodeItems = this.graph.getNodes();\n          const height = this.graph.get(\"height\");\n          const width = this.graph.get(\"width\");\n          const padding = 10;\n          nodeItems.forEach((item) => {\n            const model = item.getModel();\n            if (model.x > width - padding) model.x = width - padding;\n            else if (model.x < padding) model.x = padding;\n\n            if (model.y > height - padding) model.y = height - padding;\n            else if (model.y < padding) model.y = padding;\n          });\n        },\n      },\n      defaultNode: {\n        color: \"#5B8FF9\",\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n    });\n    const { nodes } = data;\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n    this.graph.on(\"node:dragstart\", (e) => {\n      this.graph.layout();\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:drag\", (e) => {\n      refreshDragedNodePosition(e);\n    });\n    this.graph.on(\"node:dragend\", (e) => {\n      e.item.get(\"model\").fx = null;\n      e.item.get(\"model\").fy = null;\n    });\n    test(this.graph.get(\"uiGroup\"));\n  },\n  onTouch(e) {\n    this.graph.emitEvent(e);\n  },\n});\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/g6/g6.json",
    "content": "{\n  \"defaultTitle\": \"g6-native-canvas\",\n  \"usingComponents\": {\n    \"native-canvas\": \"../../../es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/image/image.acss",
    "content": ""
  },
  {
    "path": "packages/f6-alipay/demo/pages/image/image.axml",
    "content": "<native-canvas\n  width=\"{{width}}\"\n  height=\"{{height - 100}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  forceMini=\"{{false}}\"\n  onInit=\"onCanvasInit\"\n  onTouchEvent=\"onTouch\"\n/>\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/image/image.js",
    "content": "import F6 from \"../../../../f6\";\n\nconst data = {\n  nodes: [\n    {\n      id: \"node0\",\n      img: \"https://yyb.gtimg.com/aiplat/page/product/visionimgidy/img/demo6-16a47e5d31.jpg?max_age=31536000\",\n      type: \"image\",\n      size: 200,\n      label: \"AntV Team\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      // 裁剪图片配置\n      clipCfg: {\n        show: false,\n        type: \"circle\",\n        r: 15,\n      },\n    },\n    {\n      id: \"node1\",\n      img: \"https://yyb.gtimg.com/aiplat/page/product/visionimgidy/img/demo6-16a47e5d31.jpg?max_age=31536000\",\n      type: \"circle\",\n      size: 200,\n      label: \"AntV Team\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n    },\n  ],\n  edges: [{ source: \"node0\", target: \"node1\" }],\n};\n\nPage({\n  data: {\n    width: 300,\n    height: 400,\n    pixelRatio: 1,\n  },\n  onLoad() {\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas, renderer) {\n    console.log(ctx, rect, canvas, renderer);\n\n    this.graph = new F6.Graph({\n      context: ctx,\n      renderer,\n      width: this.data.width,\n      height: this.data.height,\n      extra: {\n        createImage: canvas && canvas.createImage,\n      },\n      defaultNode: {\n        type: \"image\",\n        label: \"AntV Team\",\n        // 其他配置\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\", \"zoom-canvas\"],\n      },\n    });\n    const { nodes } = data;\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n\n    this.graph.on(\"panstart\", (e) => {\n      console.log(\"pan\", e);\n    });\n    this.graph.on(\"panmove\", (e) => {\n      console.log(\"pan move\", e);\n    });\n    this.graph.on(\"panend\", (e) => {\n      console.log(\"pan end\", e);\n    });\n  },\n  onTouch(e) {\n    this.graph.emitEvent(e);\n  },\n});\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/image/image.json",
    "content": "{\n  \"defaultTitle\": \"g6-native-canvas\",\n  \"usingComponents\": {\n    \"native-canvas\": \"../../../es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-canvas/index.acss",
    "content": ""
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-canvas/index.axml",
    "content": "<native-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  onInit=\"onCanvasInit\"\n  onTouchEvent=\"onTouch\"\n/>\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-canvas/index.js",
    "content": "Page({\n  data: {\n    width: 500,\n    height: 500,\n  },\n  onLoad() {\n    const { windowWidth, windowHeight } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas, renderer) {\n    // ctx.fillStyle = '#000';\n    console.log(ctx, rect, canvas);\n    ctx.fillStyle = `rgb(${12}, ${255}, ${44})`;\n\n    ctx.beginPath();\n    ctx.arc(100, 100, 20, 0, 2 * Math.PI);\n    ctx.fill();\n\n    ctx.save();\n    ctx.beginPath();\n    ctx.strokeStyle = \"#108ee9\";\n    ctx.rect(25, 25, 50, 50);\n    ctx.stroke();\n\n    ctx.scale(2, 2);\n\n    ctx.beginPath();\n    ctx.rect(25, 25, 50, 50);\n    ctx.stroke();\n    ctx.restore();\n\n    if (renderer === \"mini\") {\n      ctx.draw();\n    }\n  },\n  onTouch(e) {\n    console.log(\"canvas on touch\", e);\n  },\n});\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-canvas/index.json",
    "content": "{\n  \"defaultTitle\": \"native-canvas\",\n  \"usingComponents\": {\n    \"native-canvas\": \"../../../es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test/native-test.acss",
    "content": "page {\n  height: 1000px;\n}\n\n.container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.canvas {\n  border: 2px solid red;\n  margin: 40px;\n  width: 300px;\n  height: 400px;\n}"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test/native-test.axml",
    "content": "<view class=\"container\">\n  <view class=\"canvas\">\n    <native-canvas \n      width=\"{{width}}\" \n      height=\"{{height}}\" \n      forceMini=\"{{true}}\" \n      pixelRatio=\"{{pixelRatio}}\" \n      onInit=\"onCanvasInit\" \n      onTouchEvent=\"onTouch\"\n      waterMarker=\"https://gw.alipayobjects.com/zos/bmw-prod/8088a9d7-e5b0-42f2-b6b2-27c823043993.svg\"\n     />\n  </view>\n</view>"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test/native-test.js",
    "content": "import F6 from \"../../../../f6\";\n\nconst data = {\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"node2\", target: \"node3\" },\n  ],\n};\n\nPage({\n  data: {\n    width: 300,\n    height: 400,\n    pixelRatio: 1,\n  },\n  onLoad() {\n    const { pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      pixelRatio,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas, renderer) {\n    console.log(ctx, rect, canvas);\n    this.graph = new F6.Graph({\n      context: ctx,\n      renderer,\n      width: this.data.width,\n      height: this.data.height,\n      defaultNode: {\n        color: \"#5B8FF9\",\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\", \"zoom-canvas\"],\n      },\n      extra: {\n        createImage: canvas && canvas.createImage,\n      },\n    });\n    const { nodes } = data;\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n\n    //水印的设置\n    const waterConfig = {\n      image: {\n        x: -15,\n        y: 35,\n        width: 156 / 2,\n        height: 34 / 2,\n        rotate: 30,\n      },\n    };\n    const waterURL =\n      \"https://gw.alipayobjects.com/zos/bmw-prod/8088a9d7-e5b0-42f2-b6b2-27c823043993.svg\";\n    this.graph.render();\n    const waterCanvas = my.createOffscreenCanvas();\n    this.graph.setImageWaterMarker(waterURL, waterConfig, waterCanvas);\n  },\n  onTouch(e) {\n    this.graph.emitEvent(e);\n  },\n});\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test/native-test.json",
    "content": "{\n  \"defaultTitle\": \"g6-native-canvas\",\n  \"usingComponents\": {\n    \"native-canvas\": \"../../../es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test-fullpage/index.acss",
    "content": "page {\n  height: 1000px;\n}\n\n.container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test-fullpage/index.axml",
    "content": "    <native-canvas width=\"{{width}}\" height=\"{{height}}\" forceMini=\"{{false}}\" pixelRatio=\"{{pixelRatio}}\" onInit=\"onCanvasInit\" onTouchEvent=\"onTouch\" />"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test-fullpage/index.js",
    "content": "import F6 from \"../../../../f6\";\n\nconst data = {\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"node2\", target: \"node3\" },\n  ],\n};\n\nPage({\n  data: {\n    width: 300,\n    height: 400,\n    pixelRatio: 1,\n  },\n  onLoad() {\n    const { windowWidth, windowHeight, pixelRatio } = my.getSystemInfoSync();\n    this.setData({\n      width: windowWidth,\n      height: windowHeight,\n      pixelRatio,\n    });\n  },\n  onCanvasInit(ctx, rect, canvas) {\n    console.log(ctx, rect, canvas);\n    this.graph = new F6.Graph({\n      context: ctx,\n      renderer: \"mini-native\",\n      width: this.data.width,\n      height: this.data.height,\n      defaultNode: {\n        color: \"#5B8FF9\",\n      },\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\", \"zoom-canvas\"],\n      },\n    });\n    const { nodes } = data;\n    this.graph.data({\n      nodes,\n      edges: data.edges.map((edge, i) => {\n        edge.id = `edge${i}`;\n        return Object.assign({}, edge);\n      }),\n    });\n    this.graph.render();\n\n    this.graph.on(\"panstart\", (e) => {\n      console.log(\"pan\", e);\n    });\n    this.graph.on(\"panmove\", (e) => {\n      console.log(\"pan move\", e);\n    });\n    this.graph.on(\"panend\", (e) => {\n      console.log(\"pan end\", e);\n    });\n  },\n  onTouch(e) {\n    this.graph.emitEvent(e);\n  },\n});\n"
  },
  {
    "path": "packages/f6-alipay/demo/pages/native-test-fullpage/index.json",
    "content": "{\n  \"defaultTitle\": \"g6-native-canvas\",\n  \"usingComponents\": {\n    \"native-canvas\": \"../../../es/container/container\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-alipay/package.json",
    "content": "{\n  \"name\": \"@antv/f6-alipay\",\n  \"version\": \"0.0.7\",\n  \"description\": \"支付宝小程序F6组件\",\n  \"files\": [\n    \"es\"\n  ],\n  \"keywords\": [\n    \"F6\",\n    \"G6Mobile\"\n  ],\n  \"license\": \"MIT\",\n  \"miniprogram\": \"es\",\n  \"devDependencies\": {\n    \"@babel/runtime\": \"^7.11.2\",\n    \"@babel/core\": \"^7.6.4\",\n    \"@babel/plugin-syntax-dynamic-import\": \"^7.0.0\",\n    \"@babel/plugin-transform-runtime\": \"^7.11.5\",\n    \"@babel/preset-env\": \"^7.6.3\",\n    \"@babel/preset-typescript\": \"^7.6.0\",\n    \"alipay-style\": \"^0.1.0\",\n    \"gulp\": \"^4.0.0\",\n    \"gulp-babel\": \"^8.0.0\",\n    \"gulp-clean-css\": \"^4.0.0\",\n    \"gulp-if\": \"^2.0.2\",\n    \"gulp-inject-envs\": \"^1.1.1\",\n    \"gulp-less\": \"^4.0.1\",\n    \"gulp-rename\": \"^1.2.3\",\n    \"mini-types\": \"^0.0.1\",\n    \"pre-commit\": \"^1.2.2\"\n  },\n  \"dependencies\": {},\n  \"scripts\": {\n    \"build\": \"NODE_ENV=production node scripts/compiler.js\",\n    \"pub\": \"npm run build && node scripts/pub.js\",\n    \"dev\": \"node scripts/compiler.js\",\n    \"build:rpx\": \"NODE_ENV=production node scripts/compiler.js --rpx\",\n    \"pub:rpx\": \"npm run build:rpx && node scripts/pub.js --rpx\",\n    \"dev:rpx\": \"node scripts/compiler.js --rpx\"\n  },\n  \"repository\": \"git@github.com:antvis/F6.git\"\n}\n"
  },
  {
    "path": "packages/f6-alipay/scripts/compiler.js",
    "content": "const path = require(\"path\");\nconst gulp = require(\"gulp\");\nconst less = require(\"gulp-less\");\nconst rename = require(\"gulp-rename\");\nconst cleanCss = require(\"gulp-clean-css\");\nconst babel = require(\"gulp-babel\");\nconst gulpif = require(\"gulp-if\");\nconst injectEnvs = require(\"gulp-inject-envs\");\n\nconst isProduction = process.env.NODE_ENV === \"production\";\nconst dist = isProduction\n  ? path.join(__dirname, \"../es\")\n  : path.join(__dirname, \"../demo/es\");\nconst src = path.join(__dirname, \"../src\");\nconst extTypes = [\"ts\", \"less\", \"json\", \"axml\", \"sjs\"];\nconst isRpx = process.argv.splice(2)[0] === \"--rpx\";\nconst env = { jsUnitRpx: isRpx };\n\ngulp.task(\"less\", () =>\n  gulp\n    .src(`${src}/**/*.less`)\n    .pipe(\n      less({\n        modifyVars: {\n          \"@pixelSize\": isRpx ? \"1rpx\" : \"0.5px\",\n        },\n      }),\n    )\n    .on(\"error\", (e) => console.error(e))\n    .pipe(gulpif(isProduction, cleanCss()))\n    .pipe(\n      rename({\n        extname: \".acss\",\n      }),\n    )\n    .pipe(gulp.dest(dist)),\n);\n\ngulp.task(\"ts\", () =>\n  gulp\n    .src(`${src}/**/*.ts`)\n    .pipe(babel())\n    .pipe(injectEnvs(env))\n    .on(\"error\", (err) => {\n      console.log(err);\n    })\n    .pipe(gulp.dest(dist)),\n);\n\ngulp.task(\"json\", () => gulp.src(`${src}/**/*.json`).pipe(gulp.dest(dist)));\n\ngulp.task(\"axml\", () => gulp.src(`${src}/**/*.axml`).pipe(gulp.dest(dist)));\n\ngulp.task(\"sjs\", () => gulp.src(`${src}/**/*.sjs`).pipe(gulp.dest(dist)));\n\nconst build = gulp.series(...extTypes);\nbuild();\n\nif (!isProduction) {\n  extTypes.forEach((type) => {\n    const watcher = gulp.watch(`${src}/**/*${type}`, gulp.series(type));\n    watcher.on(\"change\", (event) => {\n      console.log(`File ${event} was change`);\n    });\n    watcher.on(\"add\", (event) => {\n      console.log(`File ${event} was add`);\n    });\n    watcher.on(\"unlink\", (event) => {\n      console.log(`File ${event} was remove`);\n    });\n  });\n}\n"
  },
  {
    "path": "packages/f6-alipay/scripts/pub.js",
    "content": "const { execSync, spawn } = require(\"child_process\");\n\nconst packageJson = require(`${process.cwd()}/package.json`);\nconst { version } = packageJson;\n\nconst runner = spawn(\"npm\", [\"publish\"]);\n\nrunner.on(\"close\", () => {\n  execSync(`git tag ${version}`);\n  execSync(`git push origin ${version}:${version}`);\n  execSync(\"git push origin master:master\");\n});\n"
  },
  {
    "path": "packages/f6-alipay/src/container/container.axml",
    "content": " <view\n  id=\"f6-alipay-container\"\n  style=\"width: {{width}}px; height: {{height}}px; {{style}} {{waterStyle}}\"\n  catchTouchStart=\"ontouch\"\n  catchTouchCancel=\"ontouch\"\n  catchTouchMove=\"ontouch\"\n  catchTouchEnd=\"ontouch\"\n>\n  <canvas\n    a:if=\"{{supportNative && !forceMini}}\"\n    id=\"f6-canvas-{{$id}}\"\n    type=\"webgl\"\n    width=\"{{width * finalPixelRatio}}\"\n    height=\"{{height * finalPixelRatio}}\"\n    style=\"width: {{width}}px; height: {{height}}px;\"\n    disable-scroll=\"{{true}}\"\n    onReady=\"onCanvasReady\"\n  />\n  <canvas\n    a:else\n    id=\"f6-canvas-{{$id}}\"\n    width=\"{{width * finalPixelRatio}}\"\n    height=\"{{height * finalPixelRatio}}\"\n    style=\"width: {{width}}px; height: {{height}}px;\"\n    disable-scroll=\"{{true}}\"\n  />\n</view>"
  },
  {
    "path": "packages/f6-alipay/src/container/container.json",
    "content": "{\n  \"component\": true\n}\n"
  },
  {
    "path": "packages/f6-alipay/src/container/container.ts",
    "content": "Component({\n  data: {\n    supportNative: !!my._createCanvas,\n    waterStyle: \"\",\n    finalPixelRatio: 1,\n  },\n  props: {\n    style: \"\",\n    width: 100,\n    height: 100,\n    forceMini: false,\n    pixelRatio: 1,\n    onTouchEvent: () => {},\n    onInit: () => {},\n    onError: () => {},\n    waterMarker: null,\n    updateEventOffsetFlag: null,\n  },\n  didMount() {\n    // pixel 向上取整，保持和g同样的规则\n    const pixelRatio = this.props.pixelRatio;\n    const finalPixelRatio = pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1;\n    this.setData({\n      finalPixelRatio,\n    });\n    if (!this.data.supportNative || this.props.forceMini) {\n      this.onCanvasReady();\n    }\n  },\n\n  didUpdate(prev) {\n    if (prev.updateEventOffsetFlag !== this.props.updateEventOffsetFlag) {\n      this.refreshOffset();\n    }\n  },\n\n  methods: {\n    onCanvasReady() {\n      const canvasId = `f6-canvas-${this.$id}`;\n\n      my.createSelectorQuery()\n        .select(`#${canvasId}`)\n        .boundingClientRect()\n        .exec((ret) => {\n          if (ret && ret[0]) {\n            this.rect = ret[0];\n          } else {\n            this.rect = {\n              bottom: 0,\n              height: 0,\n              left: 0,\n              right: 0,\n              top: 0,\n              width: 0,\n            };\n            this.props.onError && this.props.onError(ret);\n          }\n          if (this.data.supportNative && !this.props.forceMini) {\n            console.log(\"native support\");\n            my._createCanvas({\n              id: canvasId,\n              success: (canvas) => {\n                this.ctx = canvas.getContext(\"2d\");\n                this.props.onInit(this.ctx, ret[0], canvas, \"mini-native\");\n              },\n            });\n          } else {\n            console.log(\"web support\");\n            this.ctx = my.createCanvasContext(canvasId);\n            this.props.onInit(this.ctx, ret[0], null, \"mini\");\n          }\n        });\n      if (this.props.waterMarker && this.props.forceMini) {\n        this.setData({\n          waterStyle: `background: url(\"${this.props.waterMarker}\") repeat; background-size: 156px 34px;`, //这里面的url需不需要双引号？\n        });\n      }\n    },\n    ontouch(e) {\n      const { target } = e;\n\n      const ev: any = {\n        ...e,\n        changedTouches: [],\n        touches: [],\n      };\n\n      e.touches.forEach((touchEvent) => {\n        ev.touches.push(modifyEvent(touchEvent, target, this.rect));\n      });\n\n      e.changedTouches.forEach((touchEvent) => {\n        // 真实的x的位置为client的位置 + rect的位置 +\n        ev.changedTouches.push(modifyEvent(touchEvent, target, this.rect));\n      });\n      this.props.onTouchEvent(ev);\n    },\n    refreshOffset() {\n      const canvasId = `f6-canvas-${this.$id}`;\n      my.createSelectorQuery()\n        .select(`#${canvasId}`)\n        .boundingClientRect()\n        .exec((ret) => {\n          if (ret && ret[0]) {\n            this.rect = ret[0];\n          } else {\n            this.rect = {\n              bottom: 0,\n              height: 0,\n              left: 0,\n              right: 0,\n              top: 0,\n              width: 0,\n            };\n            this.props.onError && this.props.onError(ret);\n          }\n        });\n    },\n  },\n});\n\nfunction modifyEvent(touchEvent, target, rect) {\n  var x = touchEvent.pageX - rect.left; // target.offsetLeft;\n  var y = touchEvent.pageY - rect.top; // target.offsetTop;\n  return {\n    x,\n    y,\n    identifier: touchEvent.identifier,\n    clientX: x,\n    clientY: y,\n    pageX: x,\n    pageY: y,\n  };\n}\n"
  },
  {
    "path": "packages/f6-rax/README.md",
    "content": "## f6-rax\n\n## Install\n\n```\n$ npm install @antv/f6-rax --save\n```\n\n## Usage\n\n```\nimport F6Rax from '@antv/f6-rax';\n```\n\n## API\n\n### Props\n\n| 属性名                | 默认值 | 类型                 | 是否必传 | 描述                                         |\n| --------------------- | ------ | -------------------- | -------- | -------------------------------------------- |\n| data                  | --     | {nodes:[],edges: []} | 是       | 图数据                                       |\n| width                 | ---    | Number               | 否       | canvas 的宽度，这个值是页面中组件的宽度      |\n| height                | ---    | Number               | 否       | canvas 的高度，这个值是页面中组件的高度      |\n| handleClick           | ---    | （）=> {}            | 否       | 点击事件回调函数                             |\n| updateEventOffsetFlag | ---    | false                | 否       | 小程序中生效，当容器改变时，需手动更新该标志 |\n| config                | ---    | object               | 否       | 参考f6的config参数                           |\n\n## Example\n\n```\nimport { createElement } from 'rax';\nimport View from 'rax-view';\nimport F6Rax from '@antv/f6-rax';\n\nexport default function Home() {\n  const data = {\n    nodes: [\n      {\n        id: '0',\n        label: '0',\n      },\n      {\n        id: '1',\n        label: '1',\n      },\n      {\n        id: '2',\n        label: '2',\n      },\n    ],\n    edges: [\n      {\n        source: '0',\n        target: '1',\n      },\n      {\n        source: '0',\n        target: '2',\n      },\n    ],\n  };\n  return (\n    <View>\n      <F6Rax data={data} width={300} height={500} config={{ fitView: false }}></F6Rax>\n    </View>\n  );\n}\n\n```\n"
  },
  {
    "path": "packages/f6-rax/build.json",
    "content": "{\n  \"type\": \"rax\",\n  \"targets\": [\"web\", \"miniapp\"],\n  \"plugins\": [\"build-plugin-component\"],\n  \"enablePlatformLoader\": true\n}\n"
  },
  {
    "path": "packages/f6-rax/demo/basic.md",
    "content": "---\ntitle: Baisc\norder: 1\n---\n\nbasic usage\n\n```jsx\nimport { createElement } from \"rax\";\nimport F6Rax from \"@antv/f6-rax\";\n\nfunction App() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n    ],\n  };\n  return <F6Rax data={data} />;\n}\n\nexport default App;\n```\n"
  },
  {
    "path": "packages/f6-rax/package.json",
    "content": "{\n  \"name\": \"@antv/f6-rax\",\n  \"version\": \"0.0.1\",\n  \"description\": \"rax F6组件，支持H5和小程序端\",\n  \"main\": \"lib/index.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"unpkg\": \"dist/umd/index.umd.js\",\n  \"miniappConfig\": {\n    \"main\": \"lib/miniapp/index\",\n    \"main:wechat\": \"lib/wechat-miniprogram/index\"\n  },\n  \"files\": [\n    \"build\",\n    \"dist\",\n    \"es\",\n    \"lib\"\n  ],\n  \"keywords\": [\n    \"Rax\",\n    \"rax-component\"\n  ],\n  \"scripts\": {\n    \"start\": \"build-scripts start\",\n    \"build\": \"\",\n    \"build:rax\": \"build-scripts build\",\n    \"eslint\": \"eslint --ext .js,.jsx,.ts,.tsx ./\",\n    \"eslint:fix\": \"npm run eslint -- --fix\",\n    \"stylelint\": \"stylelint \\\"**/*.{css,scss,less}\\\"\",\n    \"lint\": \"npm run eslint && npm run stylelint\",\n    \"prepublishOnly\": \"npm run build\"\n  },\n  \"dependencies\": {\n    \"@antv/f6\": \"^0.0.16\",\n    \"@antv/f6-alipay\": \"^0.0.7\",\n    \"@uni/element\": \"^1.0.9\",\n    \"@uni/system-info\": \"^1.0.8\",\n    \"rax-text\": \"^2.0.0\",\n    \"rax-view\": \"^2.0.0\",\n    \"rax\": \"^1.1.0\",\n    \"universal-env\": \"^3.0.0\"\n  },\n  \"devDependencies\": {\n    \"@iceworks/spec\": \"^1.0.0\",\n    \"@types/rax\": \"^1.0.0\",\n    \"build-plugin-component\": \"^1.0.0\",\n    \"build-scripts\": \"^1.1.1\",\n    \"driver-universal\": \"^3.1.0\",\n    \"rax-test-renderer\": \"^1.0.0\",\n    \"stylelint\": \"^13.7.2\"\n  },\n  \"componentConfig\": {\n    \"name\": \"rax-example\",\n    \"title\": \"示例组件\",\n    \"category\": \"\"\n  },\n  \"exports\": {\n    \".\": {\n      \"default\": \"./es/index.js\"\n    },\n    \"./*\": \"./*\"\n  },\n  \"publishConfig\": {\n    \"registry\": \"https://registry.npm.alibaba-inc.com\"\n  },\n  \"license\": \"MIT\",\n  \"homepage\": \"https://unpkg.com/@antv/f6-rax@0.0.1/build/index.html\",\n  \"repository\": \"git@github.com:antvis/F6.git\"\n}\n"
  },
  {
    "path": "packages/f6-rax/src/index.ali.tsx",
    "content": "import { createElement, useEffect, useRef } from \"rax\";\nimport View from \"rax-view\";\nimport F6 from \"@antv/f6\";\nimport NativeCanvas from \"@antv/f6-alipay/es/container/container\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nimport { getInfoSync } from \"@uni/system-info\";\nimport \"./index.css\";\n\nconst miniF6 = (props) => {\n  const {\n    data,\n    config,\n    handleClick = () => {},\n    updateEventOffsetFlag = false,\n    width,\n    height,\n  } = props;\n\n  const f6Chart = useRef(null);\n  const { pixelRatio } = getInfoSync();\n\n  const renderChart = (config) => {\n    if (window) {\n      // 目前F6内部使用了getComputedStyle处理判断逻辑，rax注入了该函数，导致绘制错误，屏蔽掉\n      window.getComputedStyle = undefined;\n    }\n\n    F6.registerLayout(\"force\", force);\n\n    const chart = new F6.Graph({\n      fitView: true,\n      pixelRatio: pixelRatio,\n      layout: {\n        type: \"force\",\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      ...config,\n    });\n    chart.data(data);\n    chart.get(\"canvas\").set(\"localRefresh\", false);\n    chart.render();\n    chart.on(\"node:tap\", handleClick);\n    f6Chart.current = chart;\n  };\n\n  const handleInit = (_ctx, ret, _canvas, _renderer) => {\n    if (!_ctx || !_renderer) return;\n    renderChart({\n      context: _ctx,\n      container: _canvas,\n      renderer: _renderer,\n      width: width,\n      height: height,\n      ...config,\n    });\n  };\n\n  useEffect(() => {\n    if (data.nodes.length && f6Chart.current) {\n      f6Chart.current.changeData(data);\n    }\n  }, [data]);\n\n  return (\n    <View id=\"f6-rax-mini-container\">\n      <NativeCanvas\n        width={width}\n        height={height}\n        forceMini={false}\n        pixelRatio={pixelRatio}\n        onTouchEvent={(e) => {\n          f6Chart.current && f6Chart.current.emitEvent(e);\n        }}\n        onInit={handleInit}\n        updateEventOffsetFlag={updateEventOffsetFlag}\n      />\n    </View>\n  );\n};\n\nexport default miniF6;\n"
  },
  {
    "path": "packages/f6-rax/src/index.css",
    "content": ".rax-demo-title {\n  margin: 20rpx 0;\n  font-weight: bold;\n  font-size: 45rpx;\n}\n\n#f6-rax-container {\n  width: 100%;\n  height: 100%;\n}\n\n#f6-rax-mini-container {\n  width: 100%;\n  height: 100%;\n}\n"
  },
  {
    "path": "packages/f6-rax/src/index.tsx",
    "content": "import { createElement, useEffect, useRef } from \"rax\";\nimport View from \"rax-view\";\nimport F6 from \"@antv/f6\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nimport { getInfoSync } from \"@uni/system-info\";\nimport { isWeb } from \"@uni/env\";\nimport \"./index.css\";\n\nconst F6Chart = (props) => {\n  const { data, config, handleClick = () => {}, width, height } = props;\n\n  const f6Chart = useRef(null);\n  const { pixelRatio } = getInfoSync();\n\n  const renderChart = (config) => {\n    if (window) {\n      // 目前F6内部使用了getComputedStyle处理判断逻辑，rax注入了该函数，导致绘制错误，屏蔽掉\n      window.getComputedStyle = undefined;\n    }\n\n    F6.registerLayout(\"force\", force);\n    const chart = new F6.Graph({\n      fitView: true,\n      pixelRatio: pixelRatio,\n      layout: {\n        type: \"force\",\n      },\n      modes: {\n        default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n      },\n      ...config,\n    });\n    chart.data(data);\n    chart.get(\"canvas\").set(\"localRefresh\", false);\n    chart.render();\n    chart.on(\"node:tap\", handleClick);\n    f6Chart.current = chart;\n  };\n\n  useEffect(() => {\n    let query = { offsetWidth: 0, offsetHeight: 0 };\n    // bug： 不加判断会影响小程序代码\n    if (isWeb) {\n      query = document.getElementById(\"f6-rax-container\");\n    }\n    renderChart({\n      container: \"f6-rax-container\",\n      width: width || query.offsetWidth,\n      height: height || query.offsetHeight,\n      ...config,\n    });\n  }, []);\n\n  useEffect(() => {\n    if (data.nodes.length && f6Chart.current) {\n      f6Chart.current.changeData(data);\n    }\n  }, [data]);\n\n  return <View id=\"f6-rax-container\"></View>;\n};\n\nexport default F6Chart;\n"
  },
  {
    "path": "packages/f6-rax/tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"buildOnSave\": false,\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"outDir\": \"build\",\n    \"module\": \"esnext\",\n    \"target\": \"es6\",\n    \"jsx\": \"preserve\",\n    \"jsxFactory\": \"createElement\",\n    \"moduleResolution\": \"node\",\n    \"allowSyntheticDefaultImports\": true,\n    \"lib\": [\"es6\", \"dom\"],\n    \"sourceMap\": true,\n    \"allowJs\": true,\n    \"rootDir\": \"./\",\n    \"forceConsistentCasingInFileNames\": true,\n    \"noImplicitReturns\": true,\n    \"noImplicitThis\": false,\n    \"noImplicitAny\": false,\n    \"importHelpers\": true,\n    \"strictNullChecks\": false,\n    \"suppressImplicitAnyIndexErrors\": true,\n    \"noUnusedLocals\": true,\n    \"skipLibCheck\": true,\n    \"paths\": {\n      \"@/*\": [\"./src/*\"],\n      \"rax-app\": [\".rax/index.ts\"]\n    }\n  },\n  \"include\": [\"src\", \".rax\"],\n  \"exclude\": [\"node_modules\", \"build\", \"public\"]\n}\n"
  },
  {
    "path": "packages/f6-ui/package.json",
    "content": "{\n  \"name\": \"@antv/f6-ui\",\n  \"version\": \"1.0.3\",\n  \"description\": \"UI system for @antv/f6\",\n  \"keywords\": [\n    \"antv\",\n    \"f6\",\n    \"graph\",\n    \"graph analysis\",\n    \"graph editor\",\n    \"graph visualization\",\n    \"relational data\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/antvis/F6.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"https://github.com/orgs/antvis/people\",\n  \"files\": [\n    \"package.json\",\n    \"es\",\n    \"lib\",\n    \"dist\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"main\": \"dist/cjs/index.cjs.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"unpkg\": \"dist/umd/index.umd.js\",\n  \"browser\": \"dist/umd/index.umd.js\",\n  \"miniprogram\": \"dist\",\n  \"types\": \"lib/index.d.ts\",\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/F6/issues\"\n  },\n  \"homepage\": \"https://github.com/antvis/F6#readme\",\n  \"scripts\": {\n    \"clean\": \"rimraf dist\",\n    \"build\": \"vite build\"\n  },\n  \"dependencies\": {\n    \"@antv/g-base\": \"~0.5.16\",\n    \"@antv/g-mobile\": \"^0.0.13\",\n    \"css-layout\": \"1.1.1\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"~5.3.1\",\n    \"@vitejs/plugin-react\": \"~4.3.1\"\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/index.ts",
    "content": "import htmlParse from \"./om/dom\";\nimport cssParse from \"./om/css\";\nimport styleParse from \"./om/style\";\nimport { createUINode } from \"./ui-node\";\nimport { registerUINode } from \"./ui-node\";\nimport { registerAttr } from \"./parser/attr-parser\";\nimport UIBaseNode from \"./ui-node/base\";\n\nfunction createUI(htmlString, cssString, group) {\n  const tree = create(htmlString, cssString, true);\n  tree.manualMount(group);\n  return tree;\n}\n\nfunction createSegmentNode(htmlString, cssString, group?) {\n  const tree = create(htmlString, cssString, false);\n  if (group) tree.manualMount(group);\n  return tree;\n}\n\nfunction create(htmlString, cssString, isNeedRoot = false) {\n  const dom = htmlParse(htmlString, isNeedRoot);\n  const cssTree = cssParse(cssString);\n  const styleTree = styleParse(dom, cssTree);\n  const tree = createUINode(styleTree.dom.tagName, styleTree);\n  // 创建ui节点\n  const stack = [[styleTree, tree]];\n  while (stack.length) {\n    const [node, parent] = stack.pop();\n    for (let child of node.originChildren) {\n      const uiNode = createUINode(child.dom.tagName, child);\n\n      parent.children.push(uiNode);\n      uiNode.setParent(parent);\n\n      stack.push([child, uiNode]);\n    }\n  }\n  return tree;\n}\nconst f6ui = {\n  UIBaseNode,\n  createUI,\n  registerUINode,\n  registerAttr,\n  createSegmentNode,\n};\nexport default f6ui;\nexport {\n  UIBaseNode,\n  createUI,\n  registerUINode,\n  registerAttr,\n  createSegmentNode,\n};\n"
  },
  {
    "path": "packages/f6-ui/src/om/css.ts",
    "content": "// https://github.com/reworkcss/css\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nfunction parse(css, options?) {\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   */\n\n  function updatePosition(str) {\n    var lines = str.match(/\\n/g);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(\"\\n\");\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   */\n\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node\n   */\n\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string\n   */\n\n  Position.prototype.content = css;\n\n  /**\n   * Error `msg`.\n   */\n\n  var errorsList = [];\n\n  function error(msg) {\n    var err: any = new Error(\n      options.source + \":\" + lineno + \":\" + column + \": \" + msg,\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = css;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Parse stylesheet.\n   */\n\n  function stylesheet() {\n    var rulesList = rules();\n\n    return {\n      type: \"stylesheet\",\n      stylesheet: {\n        source: options.source,\n        rules: rulesList,\n        parsingErrors: errorsList,\n      },\n    };\n  }\n\n  /**\n   * Opening brace.\n   */\n\n  function open() {\n    return match(/^{\\s*/);\n  }\n\n  /**\n   * Closing brace.\n   */\n\n  function close() {\n    return match(/^}/);\n  }\n\n  /**\n   * Parse ruleset.\n   */\n\n  function rules() {\n    var node;\n    var rules = [];\n    whitespace();\n    comments(rules);\n    while (css.length && css.charAt(0) != \"}\" && (node = atrule() || rule())) {\n      if (node !== false) {\n        rules.push(node);\n        comments(rules);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Match `re` and return captures.\n   */\n\n  function match(re) {\n    var m = re.exec(css);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    css = css.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n\n  function whitespace() {\n    match(/^\\s*/);\n  }\n\n  /**\n   * Parse comments;\n   */\n\n  function comments(rules?) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   */\n\n  function comment() {\n    var pos = position();\n    if (\"/\" != css.charAt(0) || \"*\" != css.charAt(1)) return;\n\n    var i = 2;\n    while (\n      \"\" != css.charAt(i) &&\n      (\"*\" != css.charAt(i) || \"/\" != css.charAt(i + 1))\n    )\n      ++i;\n    i += 2;\n\n    if (\"\" === css.charAt(i - 1)) {\n      return error(\"End of comment missing\");\n    }\n\n    var str = css.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    css = css.slice(i);\n    column += 2;\n\n    return pos({\n      type: \"comment\",\n      comment: str,\n    });\n  }\n\n  /**\n   * Parse selector.\n   */\n\n  function selector() {\n    var m = match(/^([^{]+)/);\n    if (!m) return;\n    /* @fix Remove all comments from selectors\n     * http://ostermiller.org/findcomment.html */\n    return trim(m[0])\n      .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, \"\")\n      .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\n        return m.replace(/,/g, \"\\u200C\");\n      })\n      .split(/\\s*(?![^(]*\\)),\\s*/)\n      .map(function (s) {\n        return s.replace(/\\u200C/g, \",\");\n      });\n  }\n\n  /**\n   * Parse declaration.\n   */\n\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n    if (!prop) return;\n    prop = trim(prop[0]);\n\n    // :\n    if (!match(/^:\\s*/)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n\n    var ret = pos({\n      type: \"declaration\",\n      property: prop.replace(commentre, \"\"),\n      value: val ? trim(val[0]).replace(commentre, \"\") : \"\",\n    });\n\n    // ;\n    match(/^[;\\s]*/);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   */\n\n  function declarations() {\n    var decls = [];\n\n    if (!open()) return error(\"missing '{'\");\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    if (!close()) return error(\"missing '}'\");\n    return decls;\n  }\n\n  /**\n   * Parse keyframe.\n   */\n\n  function keyframe() {\n    var m;\n    var vals = [];\n    var pos = position();\n\n    while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\n      vals.push(m[1]);\n      match(/^,\\s*/);\n    }\n\n    if (!vals.length) return;\n\n    return pos({\n      type: \"keyframe\",\n      values: vals,\n      declarations: declarations(),\n    });\n  }\n\n  /**\n   * Parse keyframes.\n   */\n\n  function atkeyframes() {\n    var pos = position();\n    var m = match(/^@([-\\w]+)?keyframes\\s*/);\n\n    if (!m) return;\n    var vendor = m[1];\n\n    // identifier\n    var m = match(/^([-\\w]+)\\s*/);\n    if (!m) return error(\"@keyframes missing name\");\n    var name = m[1];\n\n    if (!open()) return error(\"@keyframes missing '{'\");\n\n    var frame;\n    var frames = comments();\n    while ((frame = keyframe())) {\n      frames.push(frame);\n      frames = frames.concat(comments());\n    }\n\n    if (!close()) return error(\"@keyframes missing '}'\");\n\n    return pos({\n      type: \"keyframes\",\n      name: name,\n      vendor: vendor,\n      keyframes: frames,\n    });\n  }\n\n  /**\n   * Parse supports.\n   */\n\n  function atsupports() {\n    var pos = position();\n    var m = match(/^@supports *([^{]+)/);\n\n    if (!m) return;\n    var supports = trim(m[1]);\n\n    if (!open()) return error(\"@supports missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@supports missing '}'\");\n\n    return pos({\n      type: \"supports\",\n      supports: supports,\n      rules: style,\n    });\n  }\n\n  /**\n   * Parse host.\n   */\n\n  function athost() {\n    var pos = position();\n    var m = match(/^@host\\s*/);\n\n    if (!m) return;\n\n    if (!open()) return error(\"@host missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@host missing '}'\");\n\n    return pos({\n      type: \"host\",\n      rules: style,\n    });\n  }\n\n  /**\n   * Parse media.\n   */\n\n  function atmedia() {\n    var pos = position();\n    var m = match(/^@media *([^{]+)/);\n\n    if (!m) return;\n    var media = trim(m[1]);\n\n    if (!open()) return error(\"@media missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@media missing '}'\");\n\n    return pos({\n      type: \"media\",\n      media: media,\n      rules: style,\n    });\n  }\n\n  /**\n   * Parse custom-media.\n   */\n\n  function atcustommedia() {\n    var pos = position();\n    var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n    if (!m) return;\n\n    return pos({\n      type: \"custom-media\",\n      name: trim(m[1]),\n      media: trim(m[2]),\n    });\n  }\n\n  /**\n   * Parse paged media.\n   */\n\n  function atpage() {\n    var pos = position();\n    var m = match(/^@page */);\n    if (!m) return;\n\n    var sel = selector() || [];\n\n    if (!open()) return error(\"@page missing '{'\");\n    var decls = comments();\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n\n    if (!close()) return error(\"@page missing '}'\");\n\n    return pos({\n      type: \"page\",\n      selectors: sel,\n      declarations: decls,\n    });\n  }\n\n  /**\n   * Parse document.\n   */\n\n  function atdocument() {\n    var pos = position();\n    var m = match(/^@([-\\w]+)?document *([^{]+)/);\n    if (!m) return;\n\n    var vendor = trim(m[1]);\n    var doc = trim(m[2]);\n\n    if (!open()) return error(\"@document missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@document missing '}'\");\n\n    return pos({\n      type: \"document\",\n      document: doc,\n      vendor: vendor,\n      rules: style,\n    });\n  }\n\n  /**\n   * Parse font-face.\n   */\n\n  function atfontface() {\n    var pos = position();\n    var m = match(/^@font-face\\s*/);\n    if (!m) return;\n\n    if (!open()) return error(\"@font-face missing '{'\");\n    var decls = comments();\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n\n    if (!close()) return error(\"@font-face missing '}'\");\n\n    return pos({\n      type: \"font-face\",\n      declarations: decls,\n    });\n  }\n\n  /**\n   * Parse import\n   */\n\n  var atimport = _compileAtrule(\"import\");\n\n  /**\n   * Parse charset\n   */\n\n  var atcharset = _compileAtrule(\"charset\");\n\n  /**\n   * Parse namespace\n   */\n\n  var atnamespace = _compileAtrule(\"namespace\");\n\n  /**\n   * Parse non-block at-rules\n   */\n\n  function _compileAtrule(name) {\n    var re = new RegExp(\"^@\" + name + \"\\\\s*([^;]+);\");\n    return function () {\n      var pos = position();\n      var m = match(re);\n      if (!m) return;\n      var ret = { type: name };\n      ret[name] = m[1].trim();\n      return pos(ret);\n    };\n  }\n\n  /**\n   * Parse at rule.\n   */\n\n  function atrule() {\n    if (css[0] != \"@\") return;\n\n    return (\n      atkeyframes() ||\n      atmedia() ||\n      atcustommedia() ||\n      atsupports() ||\n      atimport() ||\n      atcharset() ||\n      atnamespace() ||\n      atdocument() ||\n      atpage() ||\n      athost() ||\n      atfontface()\n    );\n  }\n\n  /**\n   * Parse rule.\n   */\n\n  function rule() {\n    var pos = position();\n    var sel = selector();\n\n    if (!sel) return error(\"selector missing\");\n    comments();\n\n    return pos({\n      type: \"rule\",\n      selectors: sel,\n      declarations: declarations(),\n    });\n  }\n\n  return addParent(stylesheet());\n}\n\n/**\n * Trim `str`.\n */\n\nfunction trim(str) {\n  return str ? str.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n}\n\n/**\n * Adds non-enumerable parent node reference to each node.\n */\n\nfunction addParent(obj, parent?) {\n  var isNode = obj && typeof obj.type === \"string\";\n  var childParent = isNode ? obj : parent;\n\n  for (var k in obj) {\n    var value = obj[k];\n    if (Array.isArray(value)) {\n      value.forEach(function (v) {\n        addParent(v, childParent);\n      });\n    } else if (value && typeof value === \"object\") {\n      addParent(value, childParent);\n    }\n  }\n\n  if (isNode) {\n    Object.defineProperty(obj, \"parent\", {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: parent || null,\n    });\n  }\n\n  return obj;\n}\n\nexport default parse;\n"
  },
  {
    "path": "packages/f6-ui/src/om/dom.ts",
    "content": "import { parseAttr } from \"../parser/attr-parser\";\n\nclass Node {\n  type = \"\";\n  tagName = \"\";\n  attrs = {};\n  children = [];\n  text = \"\";\n}\n\nclass Helper {\n  input = \"\";\n  index = 0;\n  constructor(input) {\n    this.input = input;\n  }\n  stepNext() {\n    this.index++;\n  }\n  cur() {\n    return this.input[this.index];\n  }\n  twoChar() {\n    return this.input[this.index] + this.input[this.index + 1];\n  }\n  stepWhile(test) {\n    let s = \"\";\n\n    while (\n      this.index < this.input.length &&\n      test &&\n      test(this.input[this.index])\n    ) {\n      s += this.input[this.index++];\n    }\n\n    return s;\n  }\n\n  skipWhiteSpace() {\n    this.stepWhile((letter) => /\\s/.test(letter));\n  }\n\n  getText() {\n    return this.stepWhile((letter) => /[a-zA-Z0-9_]/.test(letter));\n  }\n\n  eof() {\n    return this.index >= this.input.length;\n  }\n}\n\nclass HtmlParser {\n  helper: Helper;\n\n  constructor(input) {\n    this.helper = new Helper(input);\n  }\n\n  parse() {\n    return this.parseNodes();\n  }\n\n  parseNodes() {\n    const nodes = [];\n    while (true) {\n      nodes.push(this.parseNode());\n      this.helper.skipWhiteSpace();\n      if (this.helper.eof() || this.helper.twoChar() === \"</\") {\n        break;\n      }\n    }\n    return nodes;\n  }\n\n  parseNode() {\n    this.helper.skipWhiteSpace();\n    if (this.helper.cur() === \"<\") {\n      return this.parseElement();\n    } else {\n      return this.parseTextNode();\n    }\n  }\n\n  parseElement() {\n    const node = new Node();\n    node.type = \"element\";\n    this.helper.stepNext();\n    const startTag = this.helper.getText();\n    node.tagName = startTag;\n    node.attrs = this.parseAttributes();\n\n    // 自闭\n    if (this.helper.twoChar() === \"/>\") {\n      this.helper.stepNext();\n      this.helper.stepNext();\n      return node;\n    }\n    // 非自闭\n    if (this.helper.cur() !== \">\") throw new Error(\"解析标签开始失败\");\n\n    this.helper.stepNext();\n    this.helper.skipWhiteSpace();\n\n    // 排除空标签\n    if (this.helper.twoChar() !== \"</\") {\n      node.children.push(...this.parseNodes());\n      this.helper.skipWhiteSpace();\n    }\n\n    if (this.helper.twoChar() !== \"</\") throw new Error(\"解析标签结束失败\");\n    this.helper.stepNext();\n    this.helper.stepNext();\n\n    const endTag = this.helper.getText();\n    if (endTag !== startTag) throw new Error(\"解析标签结束失败\");\n    if (this.helper.cur() !== \">\") throw new Error(\"解析标签结束失败\");\n    this.helper.stepNext();\n    return node;\n  }\n\n  parseTextNode() {\n    const node = new Node();\n    const text = this.helper.stepWhile((s) => /[^<]/.test(s));\n    node.type = \"text\";\n    node.tagName = \"text\";\n    node.text = text;\n    return node;\n  }\n\n  parseAttributes() {\n    let attrs = {};\n    this.helper.skipWhiteSpace();\n    while (\n      !this.helper.eof() &&\n      this.helper.cur() !== \">\" &&\n      this.helper.twoChar() !== \"/>\"\n    ) {\n      const name = this.helper.stepWhile((letter) => /[^\\s=]/.test(letter));\n      this.helper.skipWhiteSpace();\n      this.helper.stepNext();\n      this.helper.skipWhiteSpace();\n      let value = \"\";\n      if (this.helper.cur() === '\"') {\n        this.helper.stepNext();\n        value = this.helper.stepWhile((letter) => /[^\"]/.test(letter));\n        this.helper.stepNext();\n      } else if (this.helper.cur() === \"'\") {\n        this.helper.stepNext();\n        value = this.helper.stepWhile((letter) => /[^']/.test(letter));\n        this.helper.stepNext();\n      } else {\n        value = this.helper.stepWhile((letter) => /[^\\s</>/]/.test(letter));\n      }\n      attrs[name] = parseAttr(name, value);\n      this.helper.skipWhiteSpace();\n    }\n    return attrs;\n  }\n\n  removeQuote(value) {\n    let result = value;\n    if (/^[\"']/.test(result[0])) {\n      result = result.slice(1);\n    }\n    if (/[\"']$/.test(result[result.length - 1])) {\n      result = result.slice(0, -1);\n    }\n    return result;\n  }\n}\n\nexport default function parser(html, isNeedRoot = true) {\n  const nodes = new HtmlParser(html).parse();\n  let rootNode = nodes[0];\n  if (nodes[0]?.tagName !== \"root\" && isNeedRoot) {\n    rootNode = new Node();\n    rootNode.tagName = \"root\";\n    rootNode.children = nodes;\n  }\n  return rootNode;\n}\n"
  },
  {
    "path": "packages/f6-ui/src/om/style.ts",
    "content": "import { parseAttr } from \"../parser/attr-parser\";\nimport {\n  isSelectorMatchDom,\n  selectorToArr,\n  walkDomSelector,\n} from \"../utils/index\";\n\nexport class StyleNode {\n  dom = null;\n  style = null;\n  children = [];\n  originChildren = [];\n}\n\nconst defaultStyle = {\n  \"font-family\": \"serif\",\n};\n\nconst inheritAttr = [\n  \"font\",\n  \"fontFamily\",\n  \"fontWeight\",\n  \"fontSize\",\n  \"fontVariant\",\n  \"fontStretch\",\n  \"textIndent\",\n  \"textAlign\",\n  \"textShadow\",\n  \"lineHeight\",\n  \"color\",\n  \"direction\",\n  \"wordSpacing\",\n  \"letterSpacing\",\n  \"textTransform\",\n  \"captionSide\",\n  \"borderCollapse\",\n  \"emptyCells\",\n  \"listStyleType\",\n  \"listStyleImage\",\n  \"listStylePosition\",\n  \"listStyle\",\n  \"visibility\",\n  \"cursor\",\n];\n\nclass StyleParser {\n  domTree = null;\n  cssTree = null;\n\n  rulesHash = {\n    ids: {},\n    classes: {},\n    tagNames: {},\n  };\n\n  constructor(domTree, cssTree) {\n    this.domTree = domTree;\n    this.cssTree = cssTree;\n  }\n\n  parse() {\n    this.parseRulesHash(this.cssTree);\n    return this.genStyleTree(this.domTree);\n  }\n\n  parseRulesHash(rules) {\n    const rulesHash = this.rulesHash;\n    for (let rule of rules.stylesheet.rules) {\n      // 处理keyframe等\n      if (rule.type !== \"rule\") continue;\n      for (let selector of rule.selectors) {\n        const keySeletor = this.genKeySelector(selector);\n        switch (keySeletor[0]) {\n          case \"#\":\n            const key = keySeletor.slice(1);\n            rulesHash.ids[key] = [\n              ...(rulesHash.ids[key] || []),\n              {\n                selector,\n                specificity: this.genSpecificity(selector),\n                style: this.genStyleFromRule(rule),\n              },\n            ];\n            break;\n          case \".\":\n            const classKey = keySeletor.slice(1);\n            rulesHash.classes[classKey] = [\n              ...(rulesHash.classes[classKey] || []),\n              {\n                selector,\n                specificity: this.genSpecificity(selector),\n                style: this.genStyleFromRule(rule),\n              },\n            ];\n            break;\n          default:\n            rulesHash.tagNames[keySeletor] = [\n              ...(rulesHash.tagNames[keySeletor] || []),\n              {\n                selector,\n                specificity: this.genSpecificity(selector),\n                style: this.genStyleFromRule(rule),\n              },\n            ];\n            break;\n        }\n      }\n    }\n  }\n\n  genStyleTree(root) {\n    const rootStyleNode = new StyleNode();\n    // 遍历doms\n    const stack = [[root, [], rootStyleNode]];\n\n    while (stack.length) {\n      const [node, path, rootStyleNode, parentStyleNode] = stack.pop();\n      rootStyleNode.dom = node;\n      rootStyleNode.style = this.computeCSS(node, path, parentStyleNode?.style);\n      // dom 查找样式并合并\n      for (let child of node.children) {\n        let styleNode = new StyleNode();\n        rootStyleNode.originChildren.push(styleNode);\n        stack.push([child, [...path, node], styleNode, rootStyleNode]);\n      }\n    }\n    return rootStyleNode;\n  }\n\n  genSpecificity(selector) {\n    const idCount = selector.match(/#\\w+/g)?.length || 0;\n    const classCount = selector.match(/\\.\\w+/g)?.length || 0;\n    const arr = selector.split(/\\s+|#|\\./).filter((s) => s !== \"\");\n    const tagCount = arr.length - idCount - classCount;\n    return idCount * 100 + classCount * 10 + tagCount;\n  }\n\n  genKeySelector(ruleSel) {\n    const selector = selectorToArr(ruleSel, /\\s/).pop();\n\n    let matchs = selector.match(/(#[^\\.#]+)/);\n    if (matchs?.length > 0) return matchs[0];\n\n    matchs = selector.match(/\\.[^\\.#]+/);\n    if (matchs?.length > 0) return matchs[0];\n\n    return selector;\n  }\n\n  genStyleFromRule(rule) {\n    return this.genStyleFromDeclaration(rule.declarations);\n  }\n\n  genStyleFromDeclaration(declarations) {\n    const style = {};\n    declarations.forEach((dn) => {\n      let value = dn.value;\n      style[dn.property] = value;\n    });\n    return style;\n  }\n\n  computeCSS(dom, path, parentStyle) {\n    // 从hash表中拿到匹配的rules\n    const filteredRules = [];\n    walkDomSelector(dom, (keyName, selector) => {\n      switch (keyName) {\n        case \"id\":\n          filteredRules.push(...(this.rulesHash.ids[selector] || []));\n          break;\n        case \"class\":\n          filteredRules.push(...(this.rulesHash.classes[selector] || []));\n          break;\n        case \"tagName\":\n          filteredRules.push(...(this.rulesHash.tagNames[selector] || []));\n        default:\n          break;\n      }\n    });\n\n    // 再根据路径筛选一次, 每条rule和dom的path去对比\n    const finaleRules = filteredRules.filter((rule) => {\n      // 判断selector是否和路径匹配，\n      const ruleSelectors = selectorToArr(rule.selector, /\\s+/g);\n      // 逆序判断每个子选择器\n      let lastSelMatch = ruleSelectors.length - 2;\n      let lastDomMatch = path.length - 1;\n\n      let result = true;\n      for (; lastSelMatch > -1; lastSelMatch--) {\n        let isMatch = false;\n        for (; lastDomMatch > -1; lastDomMatch--) {\n          // 不断取节点去匹配选择器\n          const dom = path[lastDomMatch];\n          // 路径中该节点匹配命中，准备匹配下个\n          if (isSelectorMatchDom(dom, ruleSelectors[lastSelMatch])) {\n            isMatch = true;\n            break;\n          }\n        }\n        if (!isMatch) {\n          result = false;\n          break;\n        }\n      }\n      return result;\n    });\n\n    // 根据优先级排序\n    finaleRules.sort((a, b) => a.specificity - b.specificity);\n\n    // 按顺序合并style，高优先级覆盖\n    const finalStyle = finaleRules.reduce(\n      (prev, cur) => Object.assign(prev, cur.style),\n      {\n        ...defaultStyle,\n      },\n    );\n\n    // 解析属性值/属性转驼峰\n    let jsStyle = {};\n    for (let [key, value] of Object.entries(finalStyle)) {\n      const camel = key\n        .split(\"-\")\n        .map((s, index) => {\n          if (index > 0) {\n            return `${s[0].toUpperCase()}${s.slice(1)}`;\n          }\n          return s;\n        })\n        .join(\"\");\n\n      const parsedValue = parseAttr(key, value);\n      if (typeof parsedValue === \"object\") {\n        jsStyle = { ...jsStyle, ...parsedValue };\n      } else {\n        jsStyle[camel] = parsedValue;\n      }\n    }\n\n    if (parentStyle) {\n      // 处理继承属性\n      for (let [key, value] of Object.entries(jsStyle)) {\n        if (value === \"inherit\" && inheritAttr.includes(key)) {\n          delete jsStyle[key];\n          if (parentStyle[key] !== undefined) {\n            jsStyle[key] = parentStyle[key];\n          }\n        }\n      }\n      for (let [key, value] of Object.entries(parentStyle)) {\n        if (inheritAttr.includes(key) && !jsStyle[key]) {\n          jsStyle[key] = value;\n        }\n      }\n    }\n\n    return jsStyle;\n  }\n}\n\nexport default function (dom, css) {\n  return new StyleParser(dom, css).parse();\n}\n"
  },
  {
    "path": "packages/f6-ui/src/parser/attr-parser.ts",
    "content": "import { isColor, typeParser } from \"../utils/parser\";\n\nconst attributesMap = {};\nexport function registerAttr(attr, parser: Function) {\n  if (!attr) return;\n  let arr = attr;\n  if (!Array.isArray(arr)) arr = [arr];\n  arr.forEach((attr) => {\n    if (typeof parser === \"function\") {\n      attributesMap[attr] = parser;\n    } else {\n      attributesMap[attr] = typeParser;\n    }\n  });\n}\n\nconst boxParser = function (type, value) {\n  const style = {};\n  const arr = value.split(/\\s/g).filter((s) => s !== \"\");\n  if (arr.length === 1 && !isNaN(arr[0])) {\n    style[`${type}`] = Number(arr[0]);\n  }\n  if (arr.length === 2) {\n    !isNaN(Number(arr[0])) &&\n      (style[`${type}Bottom`] = style[`${type}Top`] = Number(arr[0]));\n    !isNaN(Number(arr[1])) &&\n      (style[`${type}Left`] = style[`${type}Right`] = Number(arr[1]));\n  }\n  if (arr.length === 3) {\n    !isNaN(Number(arr[0])) && (style[`${type}Top`] = Number(arr[0]));\n    !isNaN(Number(arr[1])) &&\n      (style[`${type}Left`] = style[`${type}Right`] = Number(arr[1]));\n    !isNaN(Number(arr[2])) && (style[`${type}Bottom`] = Number(arr[2]));\n  }\n  if (arr.length === 4) {\n    !isNaN(Number(arr[0])) && (style[`${type}Top`] = Number(arr[0]));\n    !isNaN(Number(arr[1])) && (style[`${type}Right`] = Number(arr[1]));\n    !isNaN(Number(arr[2])) && (style[`${type}Bottom`] = Number(arr[2]));\n    !isNaN(Number(arr[3])) && (style[`${type}Left`] = Number(arr[3]));\n  }\n  return style;\n};\n\nconst borderRadiusParser = function (value) {\n  const style = {};\n  const arr = value.split(/\\s/g).filter((s) => s !== \"\");\n  if (arr.length === 1 && !isNaN(arr[0])) {\n    style[`borderTopLeftRadius`] = Number(arr[0]);\n    style[`borderTopRightRadius`] = Number(arr[0]);\n    style[`borderBottomRightRadius`] = Number(arr[0]);\n    style[`borderBottomLeftRadius`] = Number(arr[0]);\n  }\n  if (arr.length === 2) {\n    !isNaN(Number(arr[0])) &&\n      (style[`borderTopLeftRadius`] = style[`borderBottomRightRadius`] =\n        Number(arr[0]));\n    !isNaN(Number(arr[2])) &&\n      (style[`borderBottomLeftRadius`] = style[`borderTopRightRadius`] =\n        Number(arr[1]));\n  }\n  if (arr.length === 3) {\n    !isNaN(Number(arr[0])) && (style[`borderTopLeftRadius`] = Number(arr[0]));\n    !isNaN(Number(arr[1])) &&\n      (style[`borderBottomLeftRadius`] = style[`borderTopRightRadius`] =\n        Number(arr[1]));\n    !isNaN(Number(arr[2])) &&\n      (style[`borderBottomRightRadius`] = Number(arr[2]));\n  }\n  if (arr.length === 4) {\n    !isNaN(Number(arr[0])) && (style[`borderTopLeftRadius`] = Number(arr[0]));\n    !isNaN(Number(arr[1])) && (style[`borderTopRightRadius`] = Number(arr[1]));\n    !isNaN(Number(arr[2])) &&\n      (style[`borderBottomRightRadius`] = Number(arr[2]));\n    !isNaN(Number(arr[3])) &&\n      (style[`borderBottomLeftRadius`] = Number(arr[3]));\n  }\n  return style;\n};\n\nconst backgroundParser = function (value) {\n  const style = {};\n\n  const arr = value.split(/\\s/g).filter((s) => s !== \"\");\n\n  for (value of arr) {\n    if (isColor(value)) {\n      style[\"backgroundColor\"] = value;\n    } else if (value?.startsWith(\"url\")) {\n      const match = value.match(/url\\((.+?)\\)/);\n      match && (style[\"backgroundImage\"] = match[1]);\n    }\n  }\n  return style;\n};\n\nconst borders = [\"solid\", \"dashed\"];\nconst borderParser = function (value) {\n  const style = {};\n  const arr = value.split(/\\s/g).filter((s) => s !== \"\");\n  for (const value of arr) {\n    if (!isNaN(Number(value))) {\n      style[\"borderWidth\"] = Number(value);\n    } else if (isColor(value)) {\n      style[\"borderColor\"] = value;\n    } else if (borders.includes(value)) {\n      style[\"borderStyle\"] = value;\n    }\n  }\n  return style;\n};\n\nconst shadowParser = function (value) {\n  const style = {};\n  const arr = value.split(/\\s/g).filter((s) => s !== \"\");\n\n  const propers = [\n    \"shadowOffsetX\",\n    \"shadowOffsetY\",\n    \"shadowBlur\",\n    \"shadowColor\",\n  ];\n\n  while (arr.length) {\n    const value = arr.shift();\n    if (!isNaN(Number(value))) {\n      const key = propers.shift();\n      style[key] = Number(value);\n      continue;\n    } else if (isColor(value)) {\n      style[\"shadowColor\"] = value;\n    }\n  }\n  return style;\n};\n\nregisterAttr(\"padding\", boxParser.bind(null, \"padding\"));\nregisterAttr(\"margin\", boxParser.bind(null, \"margin\"));\nregisterAttr(\"border-radius\", borderRadiusParser);\nregisterAttr(\"border\", borderParser);\nregisterAttr(\"background\", backgroundParser);\nregisterAttr([\"box-shadow\", \"text-shadow\"], shadowParser);\n\nexport function parseAttr(key, value) {\n  if (attributesMap[key]) {\n    return attributesMap[key](value);\n  }\n  try {\n    return typeParser(value);\n  } catch (e) {\n    console.error(e);\n    return value;\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/UIDivNode.ts",
    "content": "import { ShapeCfg } from \"@antv/g-base\";\nimport UINode from \"./base\";\nexport default class UIDivNode extends UINode {\n  backgroudNode = null;\n\n  draw(parentGNode) {\n    if (!this.gNode) {\n      this.gNode = parentGNode.addGroup({\n        id: this.attributes?.id,\n        className: this.styleNode.dom.attrs.class,\n      });\n    }\n    const gNode = this.gNode;\n\n    const styleNode = this.styleNode;\n    gNode.resetMatrix();\n    this.backgroudNode?.remove();\n    const backgroudNode = (this.backgroudNode = gNode.addGroup());\n\n    gNode.translate(this.left, this.top);\n\n    const style = styleNode.style;\n\n    // zIndex\n    typeof style.zIndex === \"number\" && gNode.setZIndex(style.zIndex);\n\n    // 绘制background\n    backgroudNode.addShape(\"rect\", {\n      attrs: {\n        x: 0, // line绘制的时候是沿着两边扩\n        y: 0,\n        fill: style.backgroundColor || \"#fff\",\n        fillOpacity: style.backgroundOpacity,\n        opacity: style.opacity,\n        width: this.width,\n        height: this.height,\n        radius: [\n          style.borderTopLeftRadius || 0,\n          style.borderTopRightRadius || 0,\n          style.borderBottomLeftRadius || 0,\n          style.borderBottomLeftRadius || 0,\n        ],\n        shadowBlur: style.shadowBlur || 0,\n        shadowColor: style.shadowColor || null,\n        shadowOffsetX: style.shadowOffsetX || 0,\n        shadowOffsetY: style.shadowOffsetY || 0,\n      },\n      capture: style.pointerEvents === \"none\" ? false : true,\n    });\n\n    if (style.backgroundImage) {\n      backgroudNode.addShape(\"image\", {\n        attrs: {\n          x: 0, // line绘制的时候是沿着两边扩\n          y: 0,\n          img: style.url,\n          width: this.width,\n          height: this.height,\n        },\n        capture: false,\n      });\n    }\n\n    // 绘制边框\n    const border: ShapeCfg = {\n      attrs: {\n        x: (style.borderWidth || 0) / 2, // line绘制的时候是沿着两边扩\n        y: (style.borderWidth || 0) / 2,\n        lineWidth: style.borderWidth,\n        stroke: style.borderColor,\n        width: this.width - (style.borderWidth || 0),\n        height: this.height - (style.borderWidth || 0),\n        radius: [\n          (style.borderTopLeftRadius || 0) *\n            ((this.width - (style.borderWidth || 0)) / this.width),\n          (style.borderTopRightRadius || 0) *\n            ((this.width - (style.borderWidth || 0)) / this.width),\n          (style.borderBottomLeftRadius || 0) *\n            ((this.width - (style.borderWidth || 0)) / this.width),\n          (style.borderBottomLeftRadius || 0) *\n            ((this.width - (style.borderWidth || 0)) / this.width),\n        ],\n      },\n      capture: false,\n    };\n    if (style.borderStyle === \"dashed\") {\n      border.attrs.lineDash = style.lineDash || [2, 2];\n    }\n\n    backgroudNode.addShape(\"rect\", border);\n\n    if (style.overflow === \"hidden\") {\n      gNode.setClip({\n        type: \"rect\",\n        attrs: {\n          width: this.width,\n          height: this.height,\n          radius: [\n            style.borderTopLeftRadius || 0,\n            style.borderTopRightRadius || 0,\n            style.borderBottomLeftRadius || 0,\n            style.borderBottomLeftRadius || 0,\n          ],\n        },\n      });\n    }\n    backgroudNode.toBack();\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/UIImageNode.ts",
    "content": "import UINode from \"./base\";\n\nexport default class UIImageNode extends UINode {\n  draw(parentGNode) {\n    const attrs = {\n      x: this.styleNode.layout.left,\n      y: this.styleNode.layout.top,\n      img: this.styleNode.dom.attrs.src,\n      width: this.styleNode.layout.width || 0,\n      height: this.styleNode.layout.height || 0,\n    };\n\n    const isCapture =\n      this.styleNode.style.pointerEvents === \"none\" ? false : true;\n    if (!this.gNode) {\n      this.gNode = parentGNode.addShape(\"image\", {\n        type: \"image\",\n        attrs,\n        capture: isCapture,\n      });\n    }\n\n    const shape = this.gNode;\n\n    shape.resetMatrix();\n\n    shape.set(\"capture\", isCapture);\n\n    shape.attr(attrs);\n    // zIndex\n    typeof this.styleNode.style.zIndex === \"number\" &&\n      shape.setZIndex(this.styleNode.style.zIndex);\n\n    switch (this.styleNode.style.textAlign) {\n      case \"center\":\n        shape.translate(this.styleNode.layout.width / 2);\n        break;\n      case \"right\":\n        shape.translate(this.styleNode.layout.width);\n        break;\n      default:\n        break;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/UIRootNode.ts",
    "content": "import UIDivNode from \"./UIDivNode\";\n\nexport default class UIRootNode extends UIDivNode {}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/UIShapeNode.ts",
    "content": "import UINode from \"./base\";\n\nexport default class UIShapeNode extends UINode {\n  getAttrs() {\n    const styleNode = this.styleNode;\n    const style = styleNode.style;\n    const layout = styleNode.layout;\n    const dom = styleNode.dom;\n    return {\n      fill: style.backgroundColor,\n      lineWidth: style.borderWidth,\n      fillOpacity: style.backgroundOpacity,\n      stroke: style.borderColor,\n      width: layout.width - (style.borderWidth || 0),\n      height: layout.height - (style.borderWidth || 0),\n      ...dom.attrs,\n    };\n  }\n\n  draw(parentGNode) {\n    const styleNode = this.styleNode;\n    const attrs = this.getAttrs();\n    const dom = styleNode.dom;\n    if (!this.gNode)\n      this.gNode = parentGNode.addShape(dom.attrs.type, { attrs });\n    this.update();\n  }\n  update() {\n    const attrs = this.getAttrs();\n    let shape = this.gNode;\n    const isCapture =\n      this.styleNode.style.pointerEvents === \"none\" ? false : true;\n    shape.attr(attrs);\n    shape.set(\"capture\", isCapture);\n    shape.resetMatrix();\n    shape.translate(this.left, this.top);\n    typeof this.style?.zIndex === \"number\" &&\n      shape.setZIndex(this.style.zIndex);\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/UITextNode.ts",
    "content": "import UINode from \"./base\";\nimport { assembleFont, ShapeAttrs } from \"@antv/g-base\";\n\nexport default class UITextNode extends UINode {\n  getAttrs() {\n    const style = this.styleNode.style;\n    const attrs: ShapeAttrs = {\n      x: this.styleNode.layout.left,\n      y: this.styleNode.layout.top,\n      textAlign: style.textAlign,\n      fill: style.color,\n      fontSize: style.fontSize || 12,\n      fontStyle: style.fontStyle,\n      fontFamily: style.fontFamily,\n      lineHeight: style.lineHeight || 0,\n      fontVariant: style.fontVariant,\n      fontWeight: style.fontWeight,\n      textBaseline: \"top\",\n      opacity: style.opacity,\n      fillOpacity: style.backgroundOpacity,\n    };\n    return attrs;\n  }\n\n  draw(parentGNode) {\n    const attrs: ShapeAttrs = this.getAttrs();\n    if (!this.gNode) {\n      this.gNode = parentGNode.addShape(\"text\", {\n        type: \"text\",\n        attrs,\n        capture: false,\n      });\n    }\n    this.update();\n  }\n  getMultiLineText(text, attrs, width) {\n    const ctx = this.parent.gNode.get(\"canvas\")?.get(\"context\");\n    if (!ctx) return text;\n    ctx.save();\n    const font = assembleFont(attrs);\n    ctx.font = font;\n    if (ctx.measureText(text).width < width) return text;\n    let s = \"\";\n    let lineWidth = 0;\n    for (let value of text) {\n      const valueW = ctx.measureText(value).width;\n      lineWidth += valueW;\n      if (lineWidth >= width) {\n        lineWidth = valueW;\n        s += `\\n${value}`;\n      } else {\n        s += value;\n      }\n    }\n    ctx.restore();\n    return s;\n  }\n  update() {\n    const style = this.styleNode.style;\n    const attrs: ShapeAttrs = this.getAttrs();\n    let shape = this.gNode;\n    shape.attr(attrs);\n    shape.resetMatrix();\n    switch (style.textAlign) {\n      case \"center\":\n        shape.translate(this.styleNode.layout.width / 2);\n        break;\n      case \"right\":\n        shape.translate(this.styleNode.layout.width);\n        break;\n      default:\n        break;\n    }\n    if (style.whiteSpace === \"nowrap\") {\n      shape.attr(\"text\", String(this.styleNode.dom.text));\n    } else {\n      shape.attr(\n        \"text\",\n        this.getMultiLineText(\n          String(this.styleNode.dom.text),\n          attrs,\n          this.styleNode.layout.width,\n        ),\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/base.ts",
    "content": "import { isSelectorMatchDom, reflowAttrs } from \"../utils/index\";\nimport { computeLayout } from \"../utils/ui\";\nexport default abstract class UIBaseNode {\n  styleNode = null;\n  gNode = null;\n  parent = null;\n  children = [];\n\n  isMounted = false;\n  isDisplay = true;\n\n  private _parentGNode = null;\n  private _prevAttrs = null;\n  private _prevStyle = null;\n  private _prevLayout = null;\n  private events = {};\n\n  constructor(styleNode?) {\n    this.styleNode = styleNode;\n  }\n\n  get top() {\n    return this.styleNode?.layout?.top;\n  }\n\n  get left() {\n    return this.styleNode?.layout?.left;\n  }\n\n  get width() {\n    return this.styleNode?.layout?.width;\n  }\n  get height() {\n    return this.styleNode?.layout?.height;\n  }\n\n  get tagName() {\n    return this.styleNode?.dom?.tagName;\n  }\n\n  get style() {\n    return this.styleNode?.style;\n  }\n\n  get attributes() {\n    return this.styleNode?.dom?.attrs;\n  }\n\n  private get _layout() {\n    return this.styleNode?._layout;\n  }\n\n  set parentGNode(gNode) {\n    this._parentGNode = gNode;\n  }\n\n  get parentGNode() {\n    return this.parent?.gNode || this._parentGNode;\n  }\n\n  setParent(parent) {\n    this.parent = parent;\n  }\n\n  appendChild(...list) {\n    list.forEach((child) => {\n      child.setParent(this);\n      this.children.push(child);\n      child.styleNode &&\n        this.styleNode &&\n        !this.styleNode.originChildren.includes(child.styleNode) &&\n        this.styleNode.originChildren.push(child.styleNode);\n    });\n    this.reflow();\n  }\n\n  removeChild(child) {\n    if (!child) return;\n    child.remove();\n  }\n\n  remove() {\n    const parent = this.parent;\n    this.gNode?.remove();\n    if (parent) {\n      parent.children.splice(1, parent.children.indexOf(this));\n      parent.styleNode?.children.splice(\n        1,\n        parent.children.indexOf(this.styleNode),\n      );\n      if (this.isMounted) parent.reflow();\n    }\n    if (this.isMounted) this.unmount();\n  }\n\n  query(selector) {\n    if (typeof selector !== \"string\") return;\n    const arr = selector.split(/\\s+/g).filter((s) => s !== \"\");\n    const stack: any = [[this, arr]];\n    while (stack.length) {\n      const [uiNode, selectorArr] = stack.shift();\n      for (const child of uiNode.children) {\n        let rest = [];\n        if (\n          child.styleNode &&\n          isSelectorMatchDom(child.styleNode.dom, selectorArr[0])\n        ) {\n          if (selectorArr.slice(1).length === 0) {\n            return child;\n          } else {\n            rest = selectorArr.slice(1);\n          }\n        } else {\n          rest = selectorArr;\n        }\n        stack.push([child, rest]);\n      }\n    }\n  }\n\n  queryAll(selector) {\n    if (typeof selector !== \"string\") return;\n    const arr = selector.split(/\\s+/g).filter((s) => s !== \"\");\n    const result = [];\n    const stack: any = [[this, arr, result]];\n    while (stack.length) {\n      const [uiNode, selectorArr, result] = stack.shift();\n      for (const child of uiNode.children) {\n        let rest = [];\n        if (\n          child.styleNode &&\n          isSelectorMatchDom(child.styleNode.dom, selectorArr[0])\n        ) {\n          if (selectorArr.slice(1).length === 0) {\n            result.push(child);\n            rest = [selectorArr[0]];\n          } else {\n            rest = selectorArr.slice(1);\n          }\n        } else {\n          rest = selectorArr;\n        }\n        stack.push([child, rest, result]);\n      }\n    }\n    return result;\n  }\n\n  // 手动挂载G节点\n  private manualMount(parentGNode) {\n    this.parentGNode = parentGNode;\n    this.layout();\n    this.mount();\n  }\n\n  reflow() {\n    // 节点没有挂载到G上\n    if (!this.parentGNode) return;\n\n    // 上浮到absolute或根节点\n    if (this.style?.position !== \"absolute\" && this.parent) {\n      this.parent.reflow();\n      return;\n    }\n\n    // 开始重排\n    this.layout();\n    this.render();\n  }\n\n  // 计算布局\n  layout() {\n    this._prevLayout = { ...(this._layout || {}) };\n    this.clearLayout();\n    computeLayout(this.styleNode);\n    return;\n  }\n\n  mount() {\n    if (this.isMounted) {\n      return;\n    }\n\n    if (this.style?.display === \"none\") {\n      this.isDisplay = false;\n      return;\n    }\n    // 保存之后会对比\n    this._prevAttrs = this.attributes;\n    this._prevStyle = this.style;\n\n    this.draw(this.parentGNode);\n    this.isMounted = true;\n    this.gNode.set(\"uiNode\", this);\n    this.gNode.on(\"*\", this.trigger);\n\n    this.children.forEach((child) => child.mount());\n    this.didMount();\n  }\n  // 全部draw一遍后触发下\n  didMount() {}\n\n  unmount() {\n    if (!this.isMounted) return;\n    this.isMounted = false;\n    this.children.forEach((child) => child.unmount());\n    this.didUnmount();\n  }\n  didUnmount() {}\n\n  private render() {\n    if (!this.isMounted) {\n      this.mount();\n      return;\n    }\n    // if (!this.shouldUpdate(this._prevAttrs, this._prevStyle)) return;\n    // 处理display的情况\n    if (this.style?.display === \"none\") {\n      this.isDisplay = false;\n      this.gNode?.remove(false);\n      return false;\n    }\n\n    if (this.isDisplay === false) {\n      this.isDisplay = true;\n      this.parentGNode?.add(this.gNode);\n    }\n    const should = this.shouldUpdate(\n      this._prevAttrs,\n      this._prevStyle,\n      this._prevLayout,\n    );\n    should && this.draw();\n    this.children.forEach((child) => child.render());\n    should && this.didUpdate();\n  }\n\n  didUpdate() {}\n\n  shouldUpdate(prevAttr, prevStyle, prevLayout) {\n    return true;\n  }\n\n  draw(parentGNode?) {}\n\n  animate() {}\n\n  private clearLayout() {\n    this.styleNode.isDirty = true;\n    this.children.forEach((child) => {\n      child.clearLayout();\n    });\n  }\n\n  setAttribute(key, value) {\n    if (this.styleNode && this.styleNode.dom) {\n      this._prevAttrs = { ...this.styleNode.dom.attrs };\n      this.styleNode.dom.attrs[key] = value;\n      if (!this.parent?.isMounted) return;\n      this.render();\n    }\n  }\n\n  setStyle(key, value) {\n    if (this.styleNode && this.styleNode.style) {\n      this._prevStyle = { ...this.styleNode.dom.style };\n      this.styleNode.style[key] = value;\n      if (this.parent && !this.parent.isMounted) return;\n      if (reflowAttrs[key]) {\n        this.reflow();\n      } else {\n        this.render();\n      }\n    }\n  }\n\n  getAttribute(key) {\n    return this.styleNode?.dom?.attrs[key];\n  }\n\n  getStyle(key) {\n    return this.styleNode?.layout[key] ?? this.styleNode?.style[key];\n  }\n\n  setText(text) {\n    const textNode = this.query(\"text\");\n    if (textNode && textNode.styleNode && textNode.styleNode.dom) {\n      textNode.styleNode.dom.text = text;\n      textNode.render();\n    }\n  }\n\n  trigger = (e) => {\n    let shape = e.target;\n    while (shape && !shape.get(\"uiNode\")) {\n      shape = shape.get(\"parent\");\n    }\n    e.targetGNode = shape || null;\n    e.uiNode = shape?.get(\"uiNode\") ?? null;\n    this.events[e.type]?.forEach((fn) => fn(e, this));\n  };\n\n  on(eventName, fn) {\n    this.events[eventName] = [...(this.events[eventName] || []), fn];\n  }\n  off(eventName, fn) {\n    if (!fn) {\n      delete this.events[eventName];\n      return;\n    }\n    const events = this.events[eventName];\n    const index = events?.indexOf(fn);\n    if (index && index !== -1) events?.splice(index, 1);\n  }\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/factory.ts",
    "content": "const Node_Map = {};\n\nexport function registerUINode(tagName, nodeConstruct) {\n  Node_Map[tagName] = nodeConstruct;\n}\n\nexport function createUINode(tagName, ...args) {\n  const consturct = Node_Map[tagName];\n  if (!consturct) throw new Error(`找不到标签${tagName}的构造函数`);\n  const uiNode = new consturct(...args);\n  return uiNode;\n}\n"
  },
  {
    "path": "packages/f6-ui/src/ui-node/index.ts",
    "content": "import { registerUINode, createUINode } from \"./factory\";\nimport UIDivNode from \"./UIDivNode\";\nimport UITextNode from \"./UITextNode\";\nimport UIShapeNode from \"./UIShapeNode\";\nimport UIImageNode from \"./UIImageNode\";\nimport UIRootNode from \"./UIRootNode\";\n\nregisterUINode(\"div\", UIDivNode);\nregisterUINode(\"text\", UITextNode);\nregisterUINode(\"shape\", UIShapeNode);\nregisterUINode(\"image\", UIImageNode);\nregisterUINode(\"root\", UIRootNode);\n\nexport { createUINode, registerUINode };\n"
  },
  {
    "path": "packages/f6-ui/src/utils/index.ts",
    "content": "export * from \"./parser\";\nexport * from \"./ui\";\n"
  },
  {
    "path": "packages/f6-ui/src/utils/parser.ts",
    "content": "export function typeParser(value) {\n  if (/^[-\\+\\.\\d]+$/.test(value)) {\n    return Number(value);\n  }\n\n  if (/true|false/.test(value)) {\n    return Boolean(value);\n  }\n\n  if (/^\\s*\\[/.test(value)) {\n    try {\n      return JSON.parse(value);\n    } catch (e) {\n      throw new Error(`解析数组${value}失败`);\n    }\n  }\n\n  if (/^\\s*\\{/.test(value)) {\n    try {\n      return JSON.parse(value);\n    } catch (e) {\n      throw new Error(`解析对象${value}失败`);\n    }\n  }\n  return value;\n}\n\nenum colors {\n  \"aliceblue\",\n  \"antiquewhite\",\n  \"aqua\",\n  \"aquamarine\",\n  \"azure\",\n  \"beige\",\n  \"bisque\",\n  \"black\",\n  \"blanchedalmond\",\n  \"blue\",\n  \"blueviolet\",\n  \"brown\",\n  \"burlywood\",\n  \"cadetblue\",\n  \"chartreuse\",\n  \"chocolate\",\n  \"coral\",\n  \"cornflowerblue\",\n  \"cornsilk\",\n  \"crimson\",\n  \"cyan\",\n  \"darkblue\",\n  \"darkcyan\",\n  \"darkgoldenrod\",\n  \"darkgray\",\n  \"darkgreen\",\n  \"darkgrey\",\n  \"darkkhaki\",\n  \"darkmagenta\",\n  \"darkolivegreen\",\n  \"darkorange\",\n  \"darkorchid\",\n  \"darkred\",\n  \"darksalmon\",\n  \"darkseagreen\",\n  \"darkslateblue\",\n  \"darkslategray\",\n  \"darkslategrey\",\n  \"darkturquoise\",\n  \"darkviolet\",\n  \"deeppink\",\n  \"deepskyblue\",\n  \"dimgray\",\n  \"dimgrey\",\n  \"dodgerblue\",\n  \"firebrick\",\n  \"floralwhite\",\n  \"forestgreen\",\n  \"fuchsia\",\n  \"gainsboro\",\n  \"ghostwhite\",\n  \"gold\",\n  \"goldenrod\",\n  \"gray\",\n  \"green\",\n  \"greenyellow\",\n  \"grey\",\n  \"honeydew\",\n  \"hotpink\",\n  \"indianred\",\n  \"indigo\",\n  \"ivory\",\n  \"khaki\",\n  \"lavender\",\n  \"lavenderblush\",\n  \"lawngreen\",\n  \"lemonchiffon\",\n  \"lightblue\",\n  \"lightcoral\",\n  \"lightcyan\",\n  \"lightgoldenrodyellow\",\n  \"lightgray\",\n  \"lightgreen\",\n  \"lightgrey\",\n  \"lightpink\",\n  \"lightsalmon\",\n  \"lightseagreen\",\n  \"lightskyblue\",\n  \"lightslategray\",\n  \"lightslategrey\",\n  \"lightsteelblue\",\n  \"lightyellow\",\n  \"lime\",\n  \"limegreen\",\n  \"linen\",\n  \"magenta\",\n  \"maroon\",\n  \"mediumaquamarine\",\n  \"mediumblue\",\n  \"mediumorchid\",\n  \"mediumpurple\",\n  \"mediumseagreen\",\n  \"mediumslateblue\",\n  \"mediumspringgreen\",\n  \"mediumturquoise\",\n  \"mediumvioletred\",\n  \"midnightblue\",\n  \"mintcream\",\n  \"mistyrose\",\n  \"moccasin\",\n  \"navajowhite\",\n  \"navy\",\n  \"oldlace\",\n  \"olive\",\n  \"olivedrab\",\n  \"orange\",\n  \"orangered\",\n  \"orchid\",\n  \"palegoldenrod\",\n  \"palegreen\",\n  \"paleturquoise\",\n  \"palevioletred\",\n  \"papayawhip\",\n  \"peachpuff\",\n  \"peru\",\n  \"pink\",\n  \"plum\",\n  \"powderblue\",\n  \"purple\",\n  \"red\",\n  \"rosybrown\",\n  \"royalblue\",\n  \"saddlebrown\",\n  \"salmon\",\n  \"sandybrown\",\n  \"seagreen\",\n  \"seashell\",\n  \"sienna\",\n  \"silver\",\n  \"skyblue\",\n  \"slateblue\",\n  \"slategray\",\n  \"slategrey\",\n  \"snow\",\n  \"springgreen\",\n  \"steelblue\",\n  \"tan\",\n  \"teal\",\n  \"thistle\",\n  \"tomato\",\n  \"turquoise\",\n  \"violet\",\n  \"wheat\",\n  \"white\",\n  \"whitesmoke\",\n  \"yellow\",\n  \"yellowgreen\",\n}\n\nexport function isColor(value) {\n  return (\n    colors[value] ||\n    value.startsWith(\"rgb(\") ||\n    value.startsWith(\"rgba(\") ||\n    (value.startsWith(\"#\") && !isNaN(Number(`0x${value.slice(1)}`)))\n  );\n}\n\nexport function walkDomSelector(dom, fn) {\n  if (!dom || !fn) return;\n  if (dom.attrs.id) {\n    fn(\"id\", dom.attrs.id);\n  }\n  if (dom.attrs.class) {\n    selectorToArr(dom.attrs.class, /\\s+/g).forEach((className) =>\n      fn(\"class\", className),\n    );\n  }\n  fn(\"tagName\", dom.tagName);\n}\n\nexport function selectorToArr(selector, rex) {\n  if (!rex) return [selector];\n  return selector.split(rex).filter((s) => s != \"\");\n}\n\nexport function isSelectorMatchDom(dom, selector) {\n  if (!dom || !selector) {\n    return false;\n  }\n  const tags = selector.match(/(^[^\\.#]+)/g);\n  const ids = selector.match(/#[^\\.#]+/g);\n  const classes = selector.match(/\\.[^\\.#]+/g);\n\n  const parts = [...(tags || []), ...(ids || []), ...(classes || [])];\n\n  const domSels = {};\n\n  walkDomSelector(dom, (key, sel) => {\n    switch (key) {\n      case \"id\":\n        domSels[`#${sel}`] = 1;\n        break;\n      case \"class\":\n        domSels[`.${sel}`] = 1;\n        break;\n      case \"tagName\":\n        domSels[`${sel}`] = 1;\n        break;\n    }\n  });\n\n  for (const part of parts) {\n    // 对比dom的id/class等是否和selector匹配上的\n    if (!domSels[part]) return false;\n  }\n  return true;\n}\n\nexport const reflowAttrs = {\n  position: 1,\n  display: 1,\n  width: 1,\n  height: 1,\n  minWidth: 1,\n  minHeight: 1,\n  top: 1,\n  left: 1,\n  right: 1,\n  bottom: 1,\n  flex: 1,\n  margin: 1,\n  marginLeft: 1,\n  marginRight: 1,\n  marginTop: 1,\n  marginBottom: 1,\n  padding: 1,\n  paddingLeft: 1,\n  paddingRight: 1,\n  paddingTop: 1,\n  paddingBottom: 1,\n  borderWidth: 1,\n  borderLeftWidth: 1,\n  borderRightWidth: 1,\n  borderTopWidth: 1,\n  borderBottomWidth: 1,\n  flexDirection: 1,\n  justifyContent: 1,\n  alignItems: 1,\n  alignSelf: 1,\n  flexWrap: 1,\n};\n\nexport const layoutAttrs = {\n  left: 1,\n  top: 1,\n  right: 1,\n  bottom: 1,\n  width: 1,\n  height: 1,\n  direction: 1,\n};\n"
  },
  {
    "path": "packages/f6-ui/src/utils/ui.ts",
    "content": "import compute from \"css-layout\";\n\nexport function computeLayout(styleNode) {\n  const stack = [styleNode];\n  while (stack.length) {\n    const node = stack.pop();\n    node.children = node.originChildren.filter((child) => {\n      if (child.style.display !== \"none\") {\n        stack.push(child);\n        return true;\n      }\n      return false;\n    });\n  }\n  compute(styleNode);\n}\n"
  },
  {
    "path": "packages/f6-ui/vite.config.ts",
    "content": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport path from \"path\";\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: {\n      \"@\": path.resolve(__dirname, \"src\"),\n    },\n  },\n  build: {\n    lib: {\n      entry: path.resolve(__dirname, \"src/index.ts\"), // 入口文件\n      name: \"f6-ui\", // UMD 构建时的全局变量名\n      fileName: (format) => `index.${format}.js`, // 输出文件名\n    },\n    rollupOptions: {\n      // 确保 external 包不会被打包到库中\n      external: [\"react\", \"react-dom\"],\n      output: [\n        {\n          // CommonJS\n          format: \"cjs\",\n          dir: \"dist/cjs\",\n        },\n        {\n          // ESM\n          format: \"es\",\n          dir: \"dist/esm\",\n        },\n        {\n          // UMD\n          format: \"umd\",\n          dir: \"dist/umd\",\n          name: \"f6-ui\",\n          globals: {\n            react: \"React\",\n            \"react-dom\": \"ReactDOM\",\n          },\n        },\n      ],\n    },\n  },\n});\n"
  },
  {
    "path": "packages/f6-wx/CHANGELOG.md",
    "content": "## 0.0.1\n\n提供G6Mobile配套的组件能力\n"
  },
  {
    "path": "packages/f6-wx/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 openwayne\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "packages/f6-wx/package.json",
    "content": "{\n  \"name\": \"@antv/f6-wx\",\n  \"version\": \"0.0.6\",\n  \"description\": \"微信小程序f6组件\",\n  \"files\": [\n    \"src\"\n  ],\n  \"keywords\": [\n    \"f6\",\n    \"Wechat\"\n  ],\n  \"license\": \"MIT\",\n  \"miniprogram\": \"src\",\n  \"devDependencies\": {},\n  \"dependencies\": {},\n  \"scripts\": {\n    \"build\": \"echo '@antv/f6-wx is ready'\"\n  },\n  \"repository\": \"git@github.com:antvis/F6.git\"\n}\n"
  },
  {
    "path": "packages/f6-wx/src/canvas/canvas.js",
    "content": "Component({\n  data: {\n    finalPixelRatio: 1,\n  },\n  properties: {\n    style: {\n      type: String,\n      value: \"\",\n    },\n    width: {\n      type: Number,\n      value: 100,\n    },\n    height: {\n      type: Number,\n      value: 100,\n    },\n    onInit: {\n      type: Function,\n      value: function value() {},\n    },\n    onTouchEvent: {\n      type: Function,\n      value: function value() {},\n    },\n    onError: {\n      type: Function,\n      value: function value() {},\n    },\n    pixelRatio: {\n      type: Number,\n      value: 1,\n    },\n  },\n  observers: {\n    pixelRatio: function (pixelRatio) {\n      this.setData({\n        finalPixelRatio: pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1,\n      });\n    },\n  },\n  ready: function ready() {\n    const query = wx.createSelectorQuery().in(this);\n    query\n      .select(\"#f6-canvas\")\n      .fields({\n        node: true,\n        size: true,\n      })\n      .exec((ret) => {\n        console.log(\"ret\", ret);\n        var canvas = ret[0].node;\n        const finalPixelRatio = this.data.finalPixelRatio;\n        canvas.width = this.data.width * finalPixelRatio;\n        canvas.height = this.data.height * finalPixelRatio;\n        this.rect = {\n          width: this.data.width * finalPixelRatio,\n          height: this.data.height * finalPixelRatio,\n          left: canvas._left,\n          top: canvas._top,\n        };\n        console.log(\"rect\", this.rect);\n        this.ctx = canvas.getContext(\"2d\");\n\n        this.triggerEvent(\"onInit\", {\n          ctx: this.ctx,\n          rect: this.rect,\n          canvas: canvas,\n          renderer: \"mini-native\",\n        });\n      });\n  },\n  methods: {\n    error: function error(e) {\n      this.data.onError(e);\n    },\n    ontouch: function ontouch(e) {\n      var i = 0;\n\n      for (i = 0; i < e.touches.length; i++) {\n        modifyEvent(e.touches[i]);\n      }\n\n      for (i = 0; i < e.changedTouches.length; i++) {\n        modifyEvent(e.changedTouches[i]);\n      }\n\n      this.triggerEvent(\"onTouchEvent\", e);\n    },\n  },\n});\n\nfunction modifyEvent(touchEvent) {\n  touchEvent.clientX = touchEvent.x;\n  touchEvent.clientY = touchEvent.y;\n  touchEvent.pageX = touchEvent.x;\n  touchEvent.pageY = touchEvent.y;\n}\n"
  },
  {
    "path": "packages/f6-wx/src/canvas/canvas.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}\n"
  },
  {
    "path": "packages/f6-wx/src/canvas/canvas.wxml",
    "content": "<canvas\n  id=\"f6-canvas\"\n  type=\"2d\"\n  width=\"{{width * finalPixelRatio}}\"\n  height=\"{{(height) * finalPixelRatio}}\"\n  style=\"width: {{width}}px; height: {{height}}px; {{style}}\"\n  disable-scroll=\"{{true}}\"\n  bindtouchstart=\"ontouch\"\n  bindtouchcancel=\"ontouch\"\n  bindtouchmove=\"ontouch\"\n  bindtouchend=\"ontouch\"\n  binderror=\"error\"\n></canvas>\n"
  },
  {
    "path": "packages/f6-wx/src/container/container.js",
    "content": "Component({\n  data: {},\n  properties: {\n    style: {\n      type: String,\n      value: \"\",\n    },\n    width: {\n      type: Number,\n      value: 100,\n    },\n    height: {\n      type: Number,\n      value: 100,\n    },\n    onInit: {\n      type: Function,\n      value: () => {},\n    },\n    onTouchEvent: {\n      type: Function,\n      value: () => {},\n    },\n    onError: {\n      type: Function,\n      value: () => {},\n    },\n    pixelRatio: {\n      type: Number,\n      value: 1,\n    },\n  },\n  observers: {\n    pixelRatio: function (pixelRatio) {\n      this.setData({\n        finalPixelRatio: pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1,\n      });\n    },\n  },\n  ready() {\n    const query = wx.createSelectorQuery().in(this);\n    query\n      .select(\"#g6-canvas\")\n      .fields({\n        node: true,\n        size: true,\n      })\n      .exec((ret) => {\n        console.log(\"ret\", ret);\n        const { node: canvas } = ret[0];\n        const finalPixelRatio = this.data.finalPixelRatio;\n        canvas.width = this.data.width * finalPixelRatio;\n        canvas.height = this.data.height * finalPixelRatio;\n        this.rect = {\n          width: this.data.width * finalPixelRatio,\n          height: this.data.height * finalPixelRatio,\n          left: canvas._left,\n          top: canvas._top,\n        };\n        console.log(\"rect\", this.rect);\n        this.ctx = canvas.getContext(\"2d\");\n        this.data.onInit(this.ctx, this.rect, canvas, \"mini-native\");\n      });\n  },\n  methods: {\n    error(e) {\n      this.data.onError(e);\n    },\n    ontouch(e) {\n      let i = 0;\n      for (i = 0; i < e.touches.length; i++) {\n        modifyEvent(e.touches[i]);\n      }\n      for (i = 0; i < e.changedTouches.length; i++) {\n        modifyEvent(e.changedTouches[i]);\n      }\n      this.data.onTouchEvent(e);\n    },\n  },\n});\n\nfunction modifyEvent(touchEvent) {\n  touchEvent.clientX = touchEvent.x;\n  touchEvent.clientY = touchEvent.y;\n  touchEvent.pageX = touchEvent.x;\n  touchEvent.pageY = touchEvent.y;\n}\n"
  },
  {
    "path": "packages/f6-wx/src/container/container.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}\n"
  },
  {
    "path": "packages/f6-wx/src/container/container.wxml",
    "content": "<canvas\n  id=\"g6-canvas\"\n  type=\"2d\"\n  width=\"{{width * finalPixelRatio}}\"\n  height=\"{{(height) * finalPixelRatio}}\"\n  style=\"width: {{width}}px; height: {{height}}px; {{style}}\"\n  disable-scroll=\"{{true}}\"\n  bindtouchstart=\"ontouch\"\n  bindtouchcancel=\"ontouch\"\n  bindtouchmove=\"ontouch\"\n  bindtouchend=\"ontouch\"\n  binderror=\"error\"\n></canvas>\n"
  },
  {
    "path": "packages/f6-wx/src/extends/graph/treeGraph.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.f6 = n())\n    : (t.f6 = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function r(e) {\n      if (n[e]) return n[e].exports;\n      var i = (n[e] = { i: e, l: !1, exports: {} });\n      return t[e].call(i.exports, i, i.exports, r), (i.l = !0), i.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = n),\n      (r.d = function (t, n, e) {\n        r.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: e });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, n) {\n        if ((1 & n && (t = r(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var e = Object.create(null);\n        if (\n          (r.r(e),\n          Object.defineProperty(e, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var i in t)\n            r.d(\n              e,\n              i,\n              function (n) {\n                return t[n];\n              }.bind(null, i),\n            );\n        return e;\n      }),\n      (r.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(n, \"a\", n), n;\n      }),\n      (r.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (r.p = \"\"),\n      r((r.s = 214))\n    );\n  })({\n    0: function (t, n, r) {\n      \"use strict\";\n      r.d(n, \"e\", function () {\n        return O;\n      }),\n        r.d(n, \"x\", function () {\n          return j;\n        }),\n        r.d(n, \"l\", function () {\n          return w;\n        }),\n        r.d(n, \"p\", function () {\n          return v;\n        }),\n        r.d(n, \"q\", function () {\n          return y;\n        }),\n        r.d(n, \"s\", function () {\n          return A;\n        }),\n        r.d(n, \"u\", function () {\n          return P;\n        }),\n        r.d(n, \"w\", function () {\n          return M;\n        }),\n        r.d(n, \"f\", function () {\n          return c;\n        }),\n        r.d(n, \"g\", function () {\n          return C;\n        }),\n        r.d(n, \"i\", function () {\n          return u;\n        }),\n        r.d(n, \"j\", function () {\n          return a;\n        }),\n        r.d(n, \"k\", function () {\n          return x;\n        }),\n        r.d(n, \"m\", function () {\n          return s;\n        }),\n        r.d(n, \"n\", function () {\n          return p;\n        }),\n        r.d(n, \"o\", function () {\n          return b;\n        }),\n        r.d(n, \"a\", function () {\n          return N;\n        }),\n        r.d(n, \"b\", function () {\n          return k;\n        }),\n        r.d(n, \"c\", function () {\n          return l;\n        }),\n        r.d(n, \"h\", function () {\n          return T;\n        }),\n        r.d(n, \"r\", function () {\n          return I;\n        }),\n        r.d(n, \"d\", function () {\n          return D;\n        }),\n        r.d(n, \"v\", function () {\n          return F;\n        }),\n        r.d(n, \"t\", function () {\n          return R;\n        });\n      var e = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = {}.toString,\n        o = function (t, n) {\n          return i.call(t) === \"[object \" + n + \"]\";\n        },\n        u = function (t) {\n          return o(t, \"Function\");\n        },\n        a = function (t) {\n          return null == t;\n        },\n        c = function (t) {\n          return Array.isArray ? Array.isArray(t) : o(t, \"Array\");\n        };\n      function f(t) {\n        return (f =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var s = function (t) {\n        var n = f(t);\n        return (null !== t && \"object\" === n) || \"function\" === n;\n      };\n      var l = function (t, n) {\n        if (t)\n          if (c(t))\n            for (var r = 0, e = t.length; r < e && !1 !== n(t[r], r); r++);\n          else if (s(t))\n            for (var i in t)\n              if (t.hasOwnProperty(i) && !1 === n(t[i], i)) break;\n      };\n      Object.keys;\n      function d(t) {\n        return (d =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var h = function (t) {\n          return \"object\" === d(t) && null !== t;\n        },\n        p = function (t) {\n          if (!h(t) || !o(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var n = t; null !== Object.getPrototypeOf(n); )\n            n = Object.getPrototypeOf(n);\n          return Object.getPrototypeOf(t) === n;\n        };\n      var v = function (t) {\n          if (c(t))\n            return t.reduce(function (t, n) {\n              return Math.max(t, n);\n            }, t[0]);\n        },\n        y = function (t) {\n          if (c(t))\n            return t.reduce(function (t, n) {\n              return Math.min(t, n);\n            }, t[0]);\n        },\n        g = Array.prototype,\n        b =\n          (g.splice,\n          g.indexOf,\n          Array.prototype.splice,\n          function (t) {\n            return o(t, \"String\");\n          });\n      var m = Object.prototype.hasOwnProperty;\n      var O = function (t, n) {\n        if (!n || !c(t)) return {};\n        for (\n          var r,\n            e = {},\n            i = u(n)\n              ? n\n              : function (t) {\n                  return t[n];\n                },\n            o = 0;\n          o < t.length;\n          o++\n        ) {\n          var a = t[o];\n          (r = i(a)), m.call(e, r) ? e[r].push(a) : (e[r] = [a]);\n        }\n        return e;\n      };\n      var j = function (t, n) {\n        if (t[\"_wrap_\" + n]) return t[\"_wrap_\" + n];\n        var r = function (r) {\n          t[n](r);\n        };\n        return (t[\"_wrap_\" + n] = r), r;\n      };\n      var x = function (t) {\n        return o(t, \"Number\");\n      };\n      Number.isInteger && Number.isInteger;\n      function w(t, n, r) {\n        return void 0 === r && (r = 1e-5), Math.abs(t - n) < r;\n      }\n      var A = function (t, n) {\n          return ((t % n) + n) % n;\n        },\n        S = (Math.PI, parseInt, Math.PI / 180),\n        P = function (t) {\n          return S * t;\n        },\n        _ =\n          (Object.values,\n          function (t) {\n            return a(t) ? \"\" : t.toString();\n          });\n      var M = function (t) {\n          var n = _(t);\n          return n.charAt(0).toUpperCase() + n.substring(1);\n        },\n        C = function (t) {\n          return o(t, \"Boolean\");\n        };\n      Object.prototype;\n      function E(t, n) {\n        for (var r in n)\n          n.hasOwnProperty(r) &&\n            \"constructor\" !== r &&\n            void 0 !== n[r] &&\n            (t[r] = n[r]);\n      }\n      function I(t, n, r, e) {\n        return n && E(t, n), r && E(t, r), e && E(t, e), t;\n      }\n      function B(t) {\n        return (B =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var N = function t(n) {\n        if (\"object\" !== B(n) || null === n) return n;\n        var r;\n        if (c(n)) {\n          r = [];\n          for (var e = 0, i = n.length; e < i; e++)\n            \"object\" === B(n[e]) && null != n[e]\n              ? (r[e] = t(n[e]))\n              : (r[e] = n[e]);\n        } else\n          for (var o in ((r = {}), n))\n            \"object\" === B(n[o]) && null != n[o]\n              ? (r[o] = t(n[o]))\n              : (r[o] = n[o]);\n        return r;\n      };\n      function L(t, n, r, e) {\n        for (var i in ((r = r || 0), (e = e || 5), n))\n          if (n.hasOwnProperty(i)) {\n            var o = n[i];\n            null !== o && p(o)\n              ? (p(t[i]) || (t[i] = {}),\n                r < e ? L(t[i], o, r + 1, e) : (t[i] = n[i]))\n              : c(o)\n              ? ((t[i] = []), (t[i] = t[i].concat(o)))\n              : void 0 !== o && (t[i] = o);\n          }\n      }\n      var k = function (t) {\n        for (var n = [], r = 1; r < arguments.length; r++)\n          n[r - 1] = arguments[r];\n        for (var e = 0; e < n.length; e += 1) L(t, n[e]);\n        return t;\n      };\n      Object.prototype.hasOwnProperty;\n      var T = function t(n, r) {\n          if (n === r) return !0;\n          if (!n || !r) return !1;\n          if (b(n) || b(r)) return !1;\n          if (e(n) || e(r)) {\n            if (n.length !== r.length) return !1;\n            for (var i = !0, o = 0; o < n.length && (i = t(n[o], r[o])); o++);\n            return i;\n          }\n          if (h(n) || h(r)) {\n            var u = Object.keys(n),\n              a = Object.keys(r);\n            if (u.length !== a.length) return !1;\n            for (i = !0, o = 0; o < u.length && (i = t(n[u[o]], r[u[o]])); o++);\n            return i;\n          }\n          return !1;\n        },\n        D = function (t, n, r) {\n          for (var e = 0, i = b(n) ? n.split(\".\") : n; t && e < i.length; )\n            t = t[i[e++]];\n          return void 0 === t || e < i.length ? r : t;\n        },\n        H = (Object.prototype.hasOwnProperty, {}),\n        F = function (t) {\n          return H[(t = t || \"g\")] ? (H[t] += 1) : (H[t] = 1), t + H[t];\n        },\n        R = function () {};\n      !(function () {\n        function t() {\n          this.map = {};\n        }\n        (t.prototype.has = function (t) {\n          return void 0 !== this.map[t];\n        }),\n          (t.prototype.get = function (t, n) {\n            var r = this.map[t];\n            return void 0 === r ? n : r;\n          }),\n          (t.prototype.set = function (t, n) {\n            this.map[t] = n;\n          }),\n          (t.prototype.clear = function () {\n            this.map = {};\n          }),\n          (t.prototype.delete = function (t) {\n            delete this.map[t];\n          }),\n          (t.prototype.size = function () {\n            return Object.keys(this.map).length;\n          });\n      })();\n    },\n    1: function (t, n, r) {\n      \"use strict\";\n      r.d(n, \"c\", function () {\n        return i;\n      }),\n        r.d(n, \"a\", function () {\n          return o;\n        }),\n        r.d(n, \"e\", function () {\n          return u;\n        }),\n        r.d(n, \"b\", function () {\n          return a;\n        }),\n        r.d(n, \"d\", function () {\n          return c;\n        }),\n        r.d(n, \"g\", function () {\n          return f;\n        }),\n        r.d(n, \"f\", function () {\n          return s;\n        });\n      /*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n      var e = function (t, n) {\n        return (e =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, n) {\n              t.__proto__ = n;\n            }) ||\n          function (t, n) {\n            for (var r in n)\n              Object.prototype.hasOwnProperty.call(n, r) && (t[r] = n[r]);\n          })(t, n);\n      };\n      function i(t, n) {\n        if (\"function\" != typeof n && null !== n)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(n) +\n              \" is not a constructor or null\",\n          );\n        function r() {\n          this.constructor = t;\n        }\n        e(t, n),\n          (t.prototype =\n            null === n\n              ? Object.create(n)\n              : ((r.prototype = n.prototype), new r()));\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            for (var n, r = 1, e = arguments.length; r < e; r++)\n              for (var i in (n = arguments[r]))\n                Object.prototype.hasOwnProperty.call(n, i) && (t[i] = n[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function u(t, n) {\n        var r = {};\n        for (var e in t)\n          Object.prototype.hasOwnProperty.call(t, e) &&\n            n.indexOf(e) < 0 &&\n            (r[e] = t[e]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (e = Object.getOwnPropertySymbols(t); i < e.length; i++)\n            n.indexOf(e[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, e[i]) &&\n              (r[e[i]] = t[e[i]]);\n        }\n        return r;\n      }\n      function a(t, n, r, e) {\n        return new (r || (r = Promise))(function (i, o) {\n          function u(t) {\n            try {\n              c(e.next(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function a(t) {\n            try {\n              c(e.throw(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function c(t) {\n            var n;\n            t.done\n              ? i(t.value)\n              : ((n = t.value),\n                n instanceof r\n                  ? n\n                  : new r(function (t) {\n                      t(n);\n                    })).then(u, a);\n          }\n          c((e = e.apply(t, n || [])).next());\n        });\n      }\n      function c(t, n) {\n        var r,\n          e,\n          i,\n          o,\n          u = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (o = { next: a(0), throw: a(1), return: a(2) }),\n          \"function\" == typeof Symbol &&\n            (o[Symbol.iterator] = function () {\n              return this;\n            }),\n          o\n        );\n        function a(o) {\n          return function (a) {\n            return (function (o) {\n              if (r) throw new TypeError(\"Generator is already executing.\");\n              for (; u; )\n                try {\n                  if (\n                    ((r = 1),\n                    e &&\n                      (i =\n                        2 & o[0]\n                          ? e.return\n                          : o[0]\n                          ? e.throw || ((i = e.return) && i.call(e), 0)\n                          : e.next) &&\n                      !(i = i.call(e, o[1])).done)\n                  )\n                    return i;\n                  switch (((e = 0), i && (o = [2 & o[0], i.value]), o[0])) {\n                    case 0:\n                    case 1:\n                      i = o;\n                      break;\n                    case 4:\n                      return u.label++, { value: o[1], done: !1 };\n                    case 5:\n                      u.label++, (e = o[1]), (o = [0]);\n                      continue;\n                    case 7:\n                      (o = u.ops.pop()), u.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = u.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== o[0] && 2 !== o[0]))\n                      ) {\n                        u = 0;\n                        continue;\n                      }\n                      if (3 === o[0] && (!i || (o[1] > i[0] && o[1] < i[3]))) {\n                        u.label = o[1];\n                        break;\n                      }\n                      if (6 === o[0] && u.label < i[1]) {\n                        (u.label = i[1]), (i = o);\n                        break;\n                      }\n                      if (i && u.label < i[2]) {\n                        (u.label = i[2]), u.ops.push(o);\n                        break;\n                      }\n                      i[2] && u.ops.pop(), u.trys.pop();\n                      continue;\n                  }\n                  o = n.call(t, u);\n                } catch (t) {\n                  (o = [6, t]), (e = 0);\n                } finally {\n                  r = i = 0;\n                }\n              if (5 & o[0]) throw o[1];\n              return { value: o[0] ? o[1] : void 0, done: !0 };\n            })([o, a]);\n          };\n        }\n      }\n      Object.create;\n      function f() {\n        for (var t = 0, n = 0, r = arguments.length; n < r; n++)\n          t += arguments[n].length;\n        var e = Array(t),\n          i = 0;\n        for (n = 0; n < r; n++)\n          for (var o = arguments[n], u = 0, a = o.length; u < a; u++, i++)\n            e[i] = o[u];\n        return e;\n      }\n      function s(t, n, r) {\n        if (r || 2 === arguments.length)\n          for (var e, i = 0, o = n.length; i < o; i++)\n            (!e && i in n) ||\n              (e || (e = Array.prototype.slice.call(n, 0, i)), (e[i] = n[i]));\n        return t.concat(e || n);\n      }\n      Object.create;\n    },\n    104: function (t, n, r) {\n      (function (t) {\n        var r, e, i, o;\n        function u(t) {\n          return (u =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        \"undefined\" != typeof self && self,\n          (o = function () {\n            return (function (t) {\n              var n = {};\n              function r(e) {\n                if (n[e]) return n[e].exports;\n                var i = (n[e] = { i: e, l: !1, exports: {} });\n                return (\n                  t[e].call(i.exports, i, i.exports, r), (i.l = !0), i.exports\n                );\n              }\n              return (\n                (r.m = t),\n                (r.c = n),\n                (r.d = function (t, n, e) {\n                  r.o(t, n) ||\n                    Object.defineProperty(t, n, {\n                      configurable: !1,\n                      enumerable: !0,\n                      get: e,\n                    });\n                }),\n                (r.n = function (t) {\n                  var n =\n                    t && t.__esModule\n                      ? function () {\n                          return t.default;\n                        }\n                      : function () {\n                          return t;\n                        };\n                  return r.d(n, \"a\", n), n;\n                }),\n                (r.o = function (t, n) {\n                  return Object.prototype.hasOwnProperty.call(t, n);\n                }),\n                (r.p = \"\"),\n                r((r.s = 31))\n              );\n            })([\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Array.isArray\n                    ? Array.isArray(t)\n                    : Object(e.a)(t, \"Array\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return (\n                    null !== t && \"function\" != typeof t && isFinite(t.length)\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(13);\n                n.a = function (t, n) {\n                  if (t)\n                    if (Object(e.a)(t))\n                      for (\n                        var r = 0, o = t.length;\n                        r < o && !1 !== n(t[r], r);\n                        r++\n                      );\n                    else if (Object(i.a)(t))\n                      for (var u in t)\n                        if (t.hasOwnProperty(u) && !1 === n(t[u], u)) break;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Function\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {}.toString;\n                n.a = function (t, n) {\n                  return e.call(t) === \"[object \" + n + \"]\";\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Number\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return null == t;\n                };\n              },\n              function (t, n, r) {\n                var e = r(33).mix;\n                t.exports = { assign: e };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"String\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(15),\n                  i = r(4);\n                n.a = function (t) {\n                  if (!Object(e.a)(t) || !Object(i.a)(t, \"Object\")) return !1;\n                  if (null === Object.getPrototypeOf(t)) return !0;\n                  for (var n = t; null !== Object.getPrototypeOf(n); )\n                    n = Object.getPrototypeOf(n);\n                  return Object.getPrototypeOf(t) === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6);\n                n.a = function (t) {\n                  return Object(e.a)(t) ? \"\" : t.toString();\n                };\n              },\n              function (t, n, r) {\n                var e = r(18),\n                  i = (function () {\n                    function t(t, n) {\n                      void 0 === n && (n = {}),\n                        (this.options = n),\n                        (this.rootNode = e(t, n));\n                    }\n                    return (\n                      (t.prototype.execute = function () {\n                        throw new Error(\"please override this method\");\n                      }),\n                      t\n                    );\n                  })();\n                t.exports = i;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t, n) {\n                  return !!Object(e.a)(t) && t.indexOf(n) > -1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  var n = u(t);\n                  return (null !== t && \"object\" === n) || \"function\" === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(1);\n                n.a = function (t, n) {\n                  if (!Object(i.a)(t)) return t;\n                  var r = [];\n                  return (\n                    Object(e.a)(t, function (t, e) {\n                      n(t, e) && r.push(t);\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return \"object\" === u(t) && null !== t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                function e(t, n) {\n                  for (var r in n)\n                    n.hasOwnProperty(r) &&\n                      \"constructor\" !== r &&\n                      void 0 !== n[r] &&\n                      (t[r] = n[r]);\n                }\n                n.a = function (t, n, r, i) {\n                  return n && e(t, n), r && e(t, r), i && e(t, i), t;\n                };\n              },\n              function (t, n, r) {\n                var e = r(30),\n                  i = [\"LR\", \"RL\", \"TB\", \"BT\", \"H\", \"V\"],\n                  o = [\"LR\", \"RL\", \"H\"],\n                  u = i[0];\n                t.exports = function (t, n, r) {\n                  var a = n.direction || u;\n                  if (\n                    ((n.isHorizontal = (function (t) {\n                      return o.indexOf(t) > -1;\n                    })(a)),\n                    a && -1 === i.indexOf(a))\n                  )\n                    throw new TypeError(\"Invalid direction: \" + a);\n                  if (a === i[0]) r(t, n);\n                  else if (a === i[1]) r(t, n), t.right2left();\n                  else if (a === i[2]) r(t, n);\n                  else if (a === i[3]) r(t, n), t.bottom2top();\n                  else if (a === i[4] || a === i[5]) {\n                    var c = e(t, n),\n                      f = c.left,\n                      s = c.right;\n                    r(f, n),\n                      r(s, n),\n                      n.isHorizontal ? f.right2left() : f.bottom2top(),\n                      s.translate(f.x - s.x, f.y - s.y),\n                      (t.x = f.x),\n                      (t.y = s.y);\n                    var l = t.getBoundingBox();\n                    n.isHorizontal\n                      ? l.top < 0 && t.translate(0, -l.top)\n                      : l.left < 0 && t.translate(-l.left, 0);\n                  }\n                  var d = n.fixedRoot;\n                  return (\n                    void 0 === d && (d = !0),\n                    d &&\n                      t.translate(\n                        -(t.x + t.width / 2 + t.hgap),\n                        -(t.y + t.height / 2 + t.vgap),\n                      ),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = r(7),\n                  i = {\n                    getId: function (t) {\n                      return t.id || t.name;\n                    },\n                    getPreH: function (t) {\n                      return t.preH || 0;\n                    },\n                    getPreV: function (t) {\n                      return t.preV || 0;\n                    },\n                    getHGap: function (t) {\n                      return t.hgap || 18;\n                    },\n                    getVGap: function (t) {\n                      return t.vgap || 18;\n                    },\n                    getChildren: function (t) {\n                      return t.children;\n                    },\n                    getHeight: function (t) {\n                      return t.height || 36;\n                    },\n                    getWidth: function (t) {\n                      var n = t.label || \" \";\n                      return t.width || 18 * n.split(\"\").length;\n                    },\n                  };\n                function o(t, n) {\n                  var r = this;\n                  if (((r.vgap = r.hgap = 0), t instanceof o)) return t;\n                  r.data = t;\n                  var e = n.getHGap(t),\n                    i = n.getVGap(t);\n                  return (\n                    (r.preH = n.getPreH(t)),\n                    (r.preV = n.getPreV(t)),\n                    (r.width = n.getWidth(t)),\n                    (r.height = n.getHeight(t)),\n                    (r.width += r.preH),\n                    (r.height += r.preV),\n                    (r.id = n.getId(t)),\n                    (r.x = r.y = 0),\n                    (r.depth = 0),\n                    r.children || (r.children = []),\n                    r.addGap(e, i),\n                    r\n                  );\n                }\n                e.assign(o.prototype, {\n                  isRoot: function () {\n                    return 0 === this.depth;\n                  },\n                  isLeaf: function () {\n                    return 0 === this.children.length;\n                  },\n                  addGap: function (t, n) {\n                    (this.hgap += t),\n                      (this.vgap += n),\n                      (this.width += 2 * t),\n                      (this.height += 2 * n);\n                  },\n                  eachNode: function (t) {\n                    for (var n, r = [this]; (n = r.shift()); )\n                      t(n), (r = n.children.concat(r));\n                  },\n                  DFTraverse: function (t) {\n                    this.eachNode(t);\n                  },\n                  BFTraverse: function (t) {\n                    for (var n, r = [this]; (n = r.shift()); )\n                      t(n), (r = r.concat(n.children));\n                  },\n                  getBoundingBox: function () {\n                    var t = {\n                      left: Number.MAX_VALUE,\n                      top: Number.MAX_VALUE,\n                      width: 0,\n                      height: 0,\n                    };\n                    return (\n                      this.eachNode(function (n) {\n                        (t.left = Math.min(t.left, n.x)),\n                          (t.top = Math.min(t.top, n.y)),\n                          (t.width = Math.max(t.width, n.x + n.width)),\n                          (t.height = Math.max(t.height, n.y + n.height));\n                      }),\n                      t\n                    );\n                  },\n                  translate: function (t, n) {\n                    void 0 === t && (t = 0),\n                      void 0 === n && (n = 0),\n                      this.eachNode(function (r) {\n                        (r.x += t),\n                          (r.y += n),\n                          (r.x += r.preH),\n                          (r.y += r.preV);\n                      });\n                  },\n                  right2left: function () {\n                    var t = this.getBoundingBox();\n                    this.eachNode(function (n) {\n                      n.x = n.x - 2 * (n.x - t.left) - n.width;\n                    }),\n                      this.translate(t.width, 0);\n                  },\n                  bottom2top: function () {\n                    var t = this.getBoundingBox();\n                    this.eachNode(function (n) {\n                      n.y = n.y - 2 * (n.y - t.top) - n.height;\n                    }),\n                      this.translate(0, t.height);\n                  },\n                }),\n                  (t.exports = function (t, n, r) {\n                    void 0 === n && (n = {});\n                    var u,\n                      a = new o(t, (n = e.assign({}, i, n))),\n                      c = [a];\n                    if (!r && !t.collapsed)\n                      for (; (u = c.shift()); )\n                        if (!u.data.collapsed) {\n                          var f = n.getChildren(u.data),\n                            s = f ? f.length : 0;\n                          if (((u.children = new Array(s)), f && s))\n                            for (var l = 0; l < s; l++) {\n                              var d = new o(f[l], n);\n                              (u.children[l] = d),\n                                c.push(d),\n                                (d.parent = u),\n                                (d.depth = u.depth + 1);\n                            }\n                        }\n                    return a;\n                  });\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(20);\n                n.a = function (t, n) {\n                  var r = Object(i.a)(n),\n                    o = r.length;\n                  if (Object(e.a)(t)) return !o;\n                  for (var u = 0; u < o; u += 1) {\n                    var a = r[u];\n                    if (n[a] !== t[a] || !(a in t)) return !1;\n                  }\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(3),\n                  o = Object.keys\n                    ? function (t) {\n                        return Object.keys(t);\n                      }\n                    : function (t) {\n                        var n = [];\n                        return (\n                          Object(e.a)(t, function (r, e) {\n                            (Object(i.a)(t) && \"prototype\" === e) || n.push(e);\n                          }),\n                          n\n                        );\n                      };\n                n.a = o;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1),\n                  i = Array.prototype.splice;\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t)) return [];\n                  for (var r = t ? n.length : 0, o = r - 1; r--; ) {\n                    var u = void 0,\n                      a = n[r];\n                    (r !== o && a === u) || ((u = a), i.call(t, a, 1));\n                  }\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(12),\n                  i = r(2);\n                n.a = function (t) {\n                  var n = [];\n                  return (\n                    Object(i.a)(t, function (t) {\n                      Object(e.a)(n, t) || n.push(t);\n                    }),\n                    n\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(3),\n                  o = r(24);\n                n.a = function (t, n) {\n                  if (!n) return { 0: t };\n                  if (!Object(i.a)(n)) {\n                    var r = Object(e.a)(n)\n                      ? n\n                      : n.replace(/\\s+/g, \"\").split(\"*\");\n                    n = function (t) {\n                      for (var n = \"_\", e = 0, i = r.length; e < i; e++)\n                        n += t[r[e]] && t[r[e]].toString();\n                      return n;\n                    };\n                  }\n                  return Object(o.a)(t, n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(3),\n                  u = Object.prototype.hasOwnProperty;\n                n.a = function (t, n) {\n                  if (!n || !Object(i.a)(t)) return {};\n                  var r,\n                    a = {},\n                    c = Object(o.a)(n)\n                      ? n\n                      : function (t) {\n                          return t[n];\n                        };\n                  return (\n                    Object(e.a)(t, function (t) {\n                      (r = c(t)), u.call(a, r) ? a[r].push(t) : (a[r] = [t]);\n                    }),\n                    a\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t.hasOwnProperty(n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(3),\n                  o = Object.values\n                    ? function (t) {\n                        return Object.values(t);\n                      }\n                    : function (t) {\n                        var n = [];\n                        return (\n                          Object(e.a)(t, function (r, e) {\n                            (Object(i.a)(t) && \"prototype\" === e) || n.push(r);\n                          }),\n                          n\n                        );\n                      };\n                n.a = o;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {}.toString;\n                n.a = function (t) {\n                  return e\n                    .call(t)\n                    .replace(/^\\[object /, \"\")\n                    .replace(/]$/, \"\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Object.prototype;\n                n.a = function (t) {\n                  var n = t && t.constructor;\n                  return t === ((\"function\" == typeof n && n.prototype) || e);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(15),\n                  i = r(1),\n                  o = r(8);\n                n.a = function t(n, r) {\n                  if (n === r) return !0;\n                  if (!n || !r) return !1;\n                  if (Object(o.a)(n) || Object(o.a)(r)) return !1;\n                  if (Object(i.a)(n) || Object(i.a)(r)) {\n                    if (n.length !== r.length) return !1;\n                    for (\n                      var u = !0, a = 0;\n                      a < n.length && (u = t(n[a], r[a]));\n                      a++\n                    );\n                    return u;\n                  }\n                  if (Object(e.a)(n) || Object(e.a)(r)) {\n                    var c = Object.keys(n),\n                      f = Object.keys(r);\n                    if (c.length !== f.length) return !1;\n                    for (\n                      u = !0, a = 0;\n                      a < c.length && (u = t(n[c[a]], r[c[a]]));\n                      a++\n                    );\n                    return u;\n                  }\n                  return !1;\n                };\n              },\n              function (t, n, r) {\n                var e = r(18);\n                t.exports = function (t, n) {\n                  for (\n                    var r = e(t.data, n, !0),\n                      i = e(t.data, n, !0),\n                      o = t.children.length,\n                      u = Math.round(o / 2),\n                      a =\n                        n.getSide ||\n                        function (t, n) {\n                          return n < u ? \"right\" : \"left\";\n                        },\n                      c = 0;\n                    c < o;\n                    c++\n                  ) {\n                    var f = t.children[c];\n                    \"right\" === a(f, c)\n                      ? i.children.push(f)\n                      : r.children.push(f);\n                  }\n                  return (\n                    r.eachNode(function (t) {\n                      t.isRoot() || (t.side = \"left\");\n                    }),\n                    i.eachNode(function (t) {\n                      t.isRoot() || (t.side = \"right\");\n                    }),\n                    { left: r, right: i }\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = {\n                  compactBox: r(32),\n                  dendrogram: r(114),\n                  indented: r(116),\n                  mindmap: r(118),\n                };\n                t.exports = e;\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(113),\n                  o = r(17),\n                  u = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return o(this.rootNode, this.options, i);\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                Object.defineProperty(n, \"__esModule\", { value: !0 });\n                var e = r(12);\n                r.d(n, \"contains\", function () {\n                  return e.a;\n                }),\n                  r.d(n, \"includes\", function () {\n                    return e.a;\n                  });\n                var i = r(34);\n                r.d(n, \"difference\", function () {\n                  return i.a;\n                });\n                var o = r(35);\n                r.d(n, \"find\", function () {\n                  return o.a;\n                });\n                var u = r(36);\n                r.d(n, \"findIndex\", function () {\n                  return u.a;\n                });\n                var a = r(37);\n                r.d(n, \"firstValue\", function () {\n                  return a.a;\n                });\n                var c = r(38);\n                r.d(n, \"flatten\", function () {\n                  return c.a;\n                });\n                var f = r(39);\n                r.d(n, \"flattenDeep\", function () {\n                  return f.a;\n                });\n                var s = r(40);\n                r.d(n, \"getRange\", function () {\n                  return s.a;\n                });\n                var l = r(41);\n                r.d(n, \"pull\", function () {\n                  return l.a;\n                });\n                var d = r(21);\n                r.d(n, \"pullAt\", function () {\n                  return d.a;\n                });\n                var h = r(42);\n                r.d(n, \"reduce\", function () {\n                  return h.a;\n                });\n                var p = r(43);\n                r.d(n, \"remove\", function () {\n                  return p.a;\n                });\n                var v = r(44);\n                r.d(n, \"sortBy\", function () {\n                  return v.a;\n                });\n                var y = r(45);\n                r.d(n, \"union\", function () {\n                  return y.a;\n                });\n                var g = r(22);\n                r.d(n, \"uniq\", function () {\n                  return g.a;\n                });\n                var b = r(46);\n                r.d(n, \"valuesOfKey\", function () {\n                  return b.a;\n                });\n                var m = r(47);\n                r.d(n, \"head\", function () {\n                  return m.a;\n                });\n                var O = r(48);\n                r.d(n, \"last\", function () {\n                  return O.a;\n                });\n                var j = r(49);\n                r.d(n, \"startsWith\", function () {\n                  return j.a;\n                });\n                var x = r(50);\n                r.d(n, \"endsWith\", function () {\n                  return x.a;\n                });\n                var w = r(14);\n                r.d(n, \"filter\", function () {\n                  return w.a;\n                });\n                var A = r(51);\n                r.d(n, \"every\", function () {\n                  return A.a;\n                });\n                var S = r(52);\n                r.d(n, \"some\", function () {\n                  return S.a;\n                });\n                var P = r(53);\n                r.d(n, \"group\", function () {\n                  return P.a;\n                });\n                var _ = r(24);\n                r.d(n, \"groupBy\", function () {\n                  return _.a;\n                });\n                var M = r(23);\n                r.d(n, \"groupToMap\", function () {\n                  return M.a;\n                });\n                var C = r(54);\n                r.d(n, \"getWrapBehavior\", function () {\n                  return C.a;\n                });\n                var E = r(55);\n                r.d(n, \"wrapBehavior\", function () {\n                  return E.a;\n                });\n                var I = r(56);\n                r.d(n, \"number2color\", function () {\n                  return I.a;\n                });\n                var B = r(57);\n                r.d(n, \"parseRadius\", function () {\n                  return B.a;\n                });\n                var N = r(58);\n                r.d(n, \"clamp\", function () {\n                  return N.a;\n                });\n                var L = r(59);\n                r.d(n, \"fixedBase\", function () {\n                  return L.a;\n                });\n                var k = r(60);\n                r.d(n, \"isDecimal\", function () {\n                  return k.a;\n                });\n                var T = r(61);\n                r.d(n, \"isEven\", function () {\n                  return T.a;\n                });\n                var D = r(62);\n                r.d(n, \"isInteger\", function () {\n                  return D.a;\n                });\n                var H = r(63);\n                r.d(n, \"isNegative\", function () {\n                  return H.a;\n                });\n                var F = r(64);\n                r.d(n, \"isNumberEqual\", function () {\n                  return F.a;\n                });\n                var R = r(65);\n                r.d(n, \"isOdd\", function () {\n                  return R.a;\n                });\n                var V = r(66);\n                r.d(n, \"isPositive\", function () {\n                  return V.a;\n                });\n                var z = r(67);\n                r.d(n, \"maxBy\", function () {\n                  return z.a;\n                });\n                var q = r(68);\n                r.d(n, \"minBy\", function () {\n                  return q.a;\n                });\n                var U = r(69);\n                r.d(n, \"mod\", function () {\n                  return U.a;\n                });\n                var G = r(70);\n                r.d(n, \"toDegree\", function () {\n                  return G.a;\n                });\n                var Y = r(71);\n                r.d(n, \"toInteger\", function () {\n                  return Y.a;\n                });\n                var W = r(72);\n                r.d(n, \"toRadian\", function () {\n                  return W.a;\n                });\n                var K = r(73);\n                r.d(n, \"forIn\", function () {\n                  return K.a;\n                });\n                var X = r(25);\n                r.d(n, \"has\", function () {\n                  return X.a;\n                });\n                var $ = r(74);\n                r.d(n, \"hasKey\", function () {\n                  return $.a;\n                });\n                var J = r(75);\n                r.d(n, \"hasValue\", function () {\n                  return J.a;\n                });\n                var Q = r(20);\n                r.d(n, \"keys\", function () {\n                  return Q.a;\n                });\n                var Z = r(19);\n                r.d(n, \"isMatch\", function () {\n                  return Z.a;\n                });\n                var tt = r(26);\n                r.d(n, \"values\", function () {\n                  return tt.a;\n                });\n                var nt = r(76);\n                r.d(n, \"lowerCase\", function () {\n                  return nt.a;\n                });\n                var rt = r(77);\n                r.d(n, \"lowerFirst\", function () {\n                  return rt.a;\n                });\n                var et = r(78);\n                r.d(n, \"substitute\", function () {\n                  return et.a;\n                });\n                var it = r(79);\n                r.d(n, \"upperCase\", function () {\n                  return it.a;\n                });\n                var ot = r(80);\n                r.d(n, \"upperFirst\", function () {\n                  return ot.a;\n                });\n                var ut = r(27);\n                r.d(n, \"getType\", function () {\n                  return ut.a;\n                });\n                var at = r(81);\n                r.d(n, \"isArguments\", function () {\n                  return at.a;\n                });\n                var ct = r(0);\n                r.d(n, \"isArray\", function () {\n                  return ct.a;\n                });\n                var ft = r(1);\n                r.d(n, \"isArrayLike\", function () {\n                  return ft.a;\n                });\n                var st = r(82);\n                r.d(n, \"isBoolean\", function () {\n                  return st.a;\n                });\n                var lt = r(83);\n                r.d(n, \"isDate\", function () {\n                  return lt.a;\n                });\n                var dt = r(84);\n                r.d(n, \"isError\", function () {\n                  return dt.a;\n                });\n                var ht = r(3);\n                r.d(n, \"isFunction\", function () {\n                  return ht.a;\n                });\n                var pt = r(85);\n                r.d(n, \"isFinite\", function () {\n                  return pt.a;\n                });\n                var vt = r(6);\n                r.d(n, \"isNil\", function () {\n                  return vt.a;\n                });\n                var yt = r(86);\n                r.d(n, \"isNull\", function () {\n                  return yt.a;\n                });\n                var gt = r(5);\n                r.d(n, \"isNumber\", function () {\n                  return gt.a;\n                });\n                var bt = r(13);\n                r.d(n, \"isObject\", function () {\n                  return bt.a;\n                });\n                var mt = r(15);\n                r.d(n, \"isObjectLike\", function () {\n                  return mt.a;\n                });\n                var Ot = r(9);\n                r.d(n, \"isPlainObject\", function () {\n                  return Ot.a;\n                });\n                var jt = r(28);\n                r.d(n, \"isPrototype\", function () {\n                  return jt.a;\n                });\n                var xt = r(87);\n                r.d(n, \"isRegExp\", function () {\n                  return xt.a;\n                });\n                var wt = r(8);\n                r.d(n, \"isString\", function () {\n                  return wt.a;\n                });\n                var At = r(4);\n                r.d(n, \"isType\", function () {\n                  return At.a;\n                });\n                var St = r(88);\n                r.d(n, \"isUndefined\", function () {\n                  return St.a;\n                });\n                var Pt = r(89);\n                r.d(n, \"isElement\", function () {\n                  return Pt.a;\n                });\n                var _t = r(90);\n                r.d(n, \"requestAnimationFrame\", function () {\n                  return _t.a;\n                });\n                var Mt = r(91);\n                r.d(n, \"clearAnimationFrame\", function () {\n                  return Mt.a;\n                });\n                var Ct = r(92);\n                r.d(n, \"augment\", function () {\n                  return Ct.a;\n                });\n                var Et = r(93);\n                r.d(n, \"clone\", function () {\n                  return Et.a;\n                });\n                var It = r(94);\n                r.d(n, \"debounce\", function () {\n                  return It.a;\n                });\n                var Bt = r(95);\n                r.d(n, \"memoize\", function () {\n                  return Bt.a;\n                });\n                var Nt = r(96);\n                r.d(n, \"deepMix\", function () {\n                  return Nt.a;\n                });\n                var Lt = r(2);\n                r.d(n, \"each\", function () {\n                  return Lt.a;\n                });\n                var kt = r(97);\n                r.d(n, \"extend\", function () {\n                  return kt.a;\n                });\n                var Tt = r(98);\n                r.d(n, \"indexOf\", function () {\n                  return Tt.a;\n                });\n                var Dt = r(99);\n                r.d(n, \"isEmpty\", function () {\n                  return Dt.a;\n                });\n                var Ht = r(29);\n                r.d(n, \"isEqual\", function () {\n                  return Ht.a;\n                });\n                var Ft = r(100);\n                r.d(n, \"isEqualWith\", function () {\n                  return Ft.a;\n                });\n                var Rt = r(101);\n                r.d(n, \"map\", function () {\n                  return Rt.a;\n                });\n                var Vt = r(102);\n                r.d(n, \"mapValues\", function () {\n                  return Vt.a;\n                });\n                var zt = r(16);\n                r.d(n, \"mix\", function () {\n                  return zt.a;\n                }),\n                  r.d(n, \"assign\", function () {\n                    return zt.a;\n                  });\n                var qt = r(103);\n                r.d(n, \"get\", function () {\n                  return qt.a;\n                });\n                var Ut = r(104);\n                r.d(n, \"set\", function () {\n                  return Ut.a;\n                });\n                var Gt = r(105);\n                r.d(n, \"pick\", function () {\n                  return Gt.a;\n                });\n                var Yt = r(106);\n                r.d(n, \"throttle\", function () {\n                  return Yt.a;\n                });\n                var Wt = r(107);\n                r.d(n, \"toArray\", function () {\n                  return Wt.a;\n                });\n                var Kt = r(10);\n                r.d(n, \"toString\", function () {\n                  return Kt.a;\n                });\n                var Xt = r(108);\n                r.d(n, \"uniqueId\", function () {\n                  return Xt.a;\n                });\n                var $t = r(109);\n                r.d(n, \"noop\", function () {\n                  return $t.a;\n                });\n                var Jt = r(110);\n                r.d(n, \"identity\", function () {\n                  return Jt.a;\n                });\n                var Qt = r(111);\n                r.d(n, \"size\", function () {\n                  return Qt.a;\n                });\n                var Zt = r(112);\n                r.d(n, \"Cache\", function () {\n                  return Zt.a;\n                });\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(14),\n                  i = r(12);\n                n.a = function (t, n) {\n                  return (\n                    void 0 === n && (n = []),\n                    Object(e.a)(t, function (t) {\n                      return !Object(i.a)(n, t);\n                    })\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3),\n                  i = r(19),\n                  o = r(0),\n                  u = r(9);\n                n.a = function (t, n) {\n                  if (!Object(o.a)(t)) return null;\n                  var r;\n                  if (\n                    (Object(e.a)(n) && (r = n),\n                    Object(u.a)(n) &&\n                      (r = function (t) {\n                        return Object(i.a)(t, n);\n                      }),\n                    r)\n                  )\n                    for (var a = 0; a < t.length; a += 1)\n                      if (r(t[a])) return t[a];\n                  return null;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  void 0 === r && (r = 0);\n                  for (var e = r; e < t.length; e++) if (n(t[e], e)) return e;\n                  return -1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(0);\n                n.a = function (t, n) {\n                  for (var r = null, o = 0; o < t.length; o++) {\n                    var u = t[o][n];\n                    if (!Object(e.a)(u)) {\n                      r = Object(i.a)(u) ? u[0] : u;\n                      break;\n                    }\n                  }\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function (t) {\n                  if (!Object(e.a)(t)) return [];\n                  for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n                  return n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function t(n, r) {\n                  if ((void 0 === r && (r = []), Object(e.a)(n)))\n                    for (var i = 0; i < n.length; i += 1) t(n[i], r);\n                  else r.push(n);\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(14);\n                n.a = function (t) {\n                  if (\n                    !(t = Object(i.a)(t, function (t) {\n                      return !isNaN(t);\n                    })).length\n                  )\n                    return { min: 0, max: 0 };\n                  if (Object(e.a)(t[0])) {\n                    for (var n = [], r = 0; r < t.length; r++)\n                      n = n.concat(t[r]);\n                    t = n;\n                  }\n                  var o = Math.max.apply(null, t);\n                  return { min: Math.min.apply(null, t), max: o };\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Array.prototype,\n                  i = e.splice,\n                  o = e.indexOf;\n                n.a = function (t) {\n                  for (var n = [], r = 1; r < arguments.length; r++)\n                    n[r - 1] = arguments[r];\n                  for (var e = 0; e < n.length; e++)\n                    for (var u = n[e], a = -1; (a = o.call(t, u)) > -1; )\n                      i.call(t, a, 1);\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(9);\n                n.a = function (t, n, r) {\n                  if (!Object(i.a)(t) && !Object(o.a)(t)) return t;\n                  var u = r;\n                  return (\n                    Object(e.a)(t, function (t, r) {\n                      u = n(u, t, r);\n                    }),\n                    u\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1),\n                  i = r(21);\n                n.a = function (t, n) {\n                  var r = [];\n                  if (!Object(e.a)(t)) return r;\n                  for (var o = -1, u = [], a = t.length; ++o < a; ) {\n                    var c = t[o];\n                    n(c, o, t) && (r.push(c), u.push(o));\n                  }\n                  return Object(i.a)(t, u), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8),\n                  o = r(3);\n                n.a = function (t, n) {\n                  var r;\n                  if (Object(o.a)(n))\n                    r = function (t, r) {\n                      return n(t) - n(r);\n                    };\n                  else {\n                    var u = [];\n                    Object(i.a)(n) ? u.push(n) : Object(e.a)(n) && (u = n),\n                      (r = function (t, n) {\n                        for (var r = 0; r < u.length; r += 1) {\n                          var e = u[r];\n                          if (t[e] > n[e]) return 1;\n                          if (t[e] < n[e]) return -1;\n                        }\n                        return 0;\n                      });\n                  }\n                  return t.sort(r), t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(22);\n                n.a = function () {\n                  for (var t = [], n = 0; n < arguments.length; n++)\n                    t[n] = arguments[n];\n                  return Object(e.a)([].concat.apply([], t));\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(6);\n                n.a = function (t, n) {\n                  var r = [],\n                    u = {};\n                  return (\n                    t.forEach(function (t) {\n                      var a = t[n];\n                      Object(o.a)(a) ||\n                        (Object(i.a)(a) || (a = [a]),\n                        Object(e.a)(a, function (t) {\n                          u[t] || (r.push(t), (u[t] = !0));\n                        }));\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return t[0];\n                };\n                var e = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return t[t.length - 1];\n                };\n                var e = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8);\n                n.a = function (t, n) {\n                  return !(!Object(e.a)(t) && !Object(i.a)(t)) && t[0] === n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(8);\n                n.a = function (t, n) {\n                  return (\n                    !(!Object(e.a)(t) && !Object(i.a)(t)) &&\n                    t[t.length - 1] === n\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  for (var r = 0; r < t.length; r++) if (!n(t[r], r)) return !1;\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  for (var r = 0; r < t.length; r++) if (n(t[r], r)) return !0;\n                  return !1;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(23);\n                n.a = function (t, n) {\n                  if (!n) return [t];\n                  var r = Object(e.a)(t, n),\n                    i = [];\n                  for (var o in r) i.push(r[o]);\n                  return i;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t[\"_wrap_\" + n];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  if (t[\"_wrap_\" + n]) return t[\"_wrap_\" + n];\n                  var r = function (r) {\n                    t[n](r);\n                  };\n                  return (t[\"_wrap_\" + n] = r), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {};\n                n.a = function (t) {\n                  var n = e[t];\n                  if (!n) {\n                    for (var r = t.toString(16), i = r.length; i < 6; i++)\n                      r = \"0\" + r;\n                    (n = \"#\" + r), (e[t] = n);\n                  }\n                  return n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function (t) {\n                  var n = 0,\n                    r = 0,\n                    i = 0,\n                    o = 0;\n                  return (\n                    Object(e.a)(t)\n                      ? 1 === t.length\n                        ? (n = r = i = o = t[0])\n                        : 2 === t.length\n                        ? ((n = i = t[0]), (r = o = t[1]))\n                        : 3 === t.length\n                        ? ((n = t[0]), (r = o = t[1]), (i = t[2]))\n                        : ((n = t[0]), (r = t[1]), (i = t[2]), (o = t[3]))\n                      : (n = r = i = o = t),\n                    { r1: n, r2: r, r3: i, r4: o }\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  return t < n ? n : t > r ? r : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  var r = n.toString(),\n                    e = r.indexOf(\".\");\n                  if (-1 === e) return Math.round(t);\n                  var i = r.substr(e + 1).length;\n                  return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 1 != 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 2 == 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5),\n                  i = Number.isInteger\n                    ? Number.isInteger\n                    : function (t) {\n                        return Object(e.a)(t) && t % 1 == 0;\n                      };\n                n.a = i;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t < 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  return void 0 === r && (r = 1e-5), Math.abs(t - n) < r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t % 2 != 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && t > 0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(3);\n                n.a = function (t, n) {\n                  if (Object(i.a)(t)) {\n                    var r,\n                      u,\n                      a = t[0];\n                    return (\n                      (r = Object(o.a)(n) ? n(t[0]) : t[0][n]),\n                      Object(e.a)(t, function (t) {\n                        (u = Object(o.a)(n) ? n(t) : t[n]) > r &&\n                          ((a = t), (r = u));\n                      }),\n                      a\n                    );\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(0),\n                  o = r(3);\n                n.a = function (t, n) {\n                  if (Object(i.a)(t)) {\n                    var r,\n                      u,\n                      a = t[0];\n                    return (\n                      (r = Object(o.a)(n) ? n(t[0]) : t[0][n]),\n                      Object(e.a)(t, function (t) {\n                        (u = Object(o.a)(n) ? n(t) : t[n]) < r &&\n                          ((a = t), (r = u));\n                      }),\n                      a\n                    );\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return ((t % n) + n) % n;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = 180 / Math.PI;\n                n.a = function (t) {\n                  return e * t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = parseInt;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = Math.PI / 180;\n                n.a = function (t) {\n                  return e * t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2);\n                n.a = e.a;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(25);\n                n.a = e.a;\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(12),\n                  i = r(26);\n                n.a = function (t, n) {\n                  return Object(e.a)(Object(i.a)(t), n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  return Object(e.a)(t).toLowerCase();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  var n = Object(e.a)(t);\n                  return n.charAt(0).toLowerCase() + n.substring(1);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n) {\n                  return t && n\n                    ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, r) {\n                        return \"\\\\\" === t.charAt(0)\n                          ? t.slice(1)\n                          : void 0 === n[r]\n                          ? \"\"\n                          : n[r];\n                      })\n                    : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  return Object(e.a)(t).toUpperCase();\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(10);\n                n.a = function (t) {\n                  var n = Object(e.a)(t);\n                  return n.charAt(0).toUpperCase() + n.substring(1);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Arguments\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Boolean\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Date\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"Error\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(5);\n                n.a = function (t) {\n                  return Object(e.a)(t) && isFinite(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return null === t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(4);\n                n.a = function (t) {\n                  return Object(e.a)(t, \"RegExp\");\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return void 0 === t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return t instanceof Element || t instanceof HTMLDocument;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return (\n                    window.requestAnimationFrame ||\n                    window.webkitRequestAnimationFrame ||\n                    window.mozRequestAnimationFrame ||\n                    window.msRequestAnimationFrame ||\n                    function (t) {\n                      return setTimeout(t, 16);\n                    }\n                  )(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  (\n                    window.cancelAnimationFrame ||\n                    window.webkitCancelAnimationFrame ||\n                    window.mozCancelAnimationFrame ||\n                    window.msCancelAnimationFrame ||\n                    clearTimeout\n                  )(t);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(16),\n                  i = r(3);\n                n.a = function () {\n                  for (var t = [], n = 0; n < arguments.length; n++)\n                    t[n] = arguments[n];\n                  for (var r = t[0], o = 1; o < t.length; o++) {\n                    var u = t[o];\n                    Object(i.a)(u) && (u = u.prototype),\n                      Object(e.a)(r.prototype, u);\n                  }\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0);\n                n.a = function t(n) {\n                  if (\"object\" !== u(n) || null === n) return n;\n                  var r;\n                  if (Object(e.a)(n)) {\n                    r = [];\n                    for (var i = 0, o = n.length; i < o; i++)\n                      \"object\" === u(n[i]) && null != n[i]\n                        ? (r[i] = t(n[i]))\n                        : (r[i] = n[i]);\n                  } else\n                    for (var a in ((r = {}), n))\n                      \"object\" === u(n[a]) && null != n[a]\n                        ? (r[a] = t(n[a]))\n                        : (r[a] = n[a]);\n                  return r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  var e;\n                  return function () {\n                    var i = this,\n                      o = arguments,\n                      u = function () {\n                        (e = null), r || t.apply(i, o);\n                      },\n                      a = r && !e;\n                    clearTimeout(e), (e = setTimeout(u, n)), a && t.apply(i, o);\n                  };\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3);\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t))\n                    throw new TypeError(\"Expected a function\");\n                  var r = function r() {\n                    for (var e = [], i = 0; i < arguments.length; i++)\n                      e[i] = arguments[i];\n                    var o = n ? n.apply(this, e) : e[0],\n                      u = r.cache;\n                    if (u.has(o)) return u.get(o);\n                    var a = t.apply(this, e);\n                    return u.set(o, a), a;\n                  };\n                  return (r.cache = new Map()), r;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(0),\n                  i = r(9);\n                function o(t, n, r, u) {\n                  for (var a in ((r = r || 0), (u = u || 5), n))\n                    if (n.hasOwnProperty(a)) {\n                      var c = n[a];\n                      null !== c && Object(i.a)(c)\n                        ? (Object(i.a)(t[a]) || (t[a] = {}),\n                          r < u ? o(t[a], c, r + 1, u) : (t[a] = n[a]))\n                        : Object(e.a)(c)\n                        ? ((t[a] = []), (t[a] = t[a].concat(c)))\n                        : void 0 !== c && (t[a] = c);\n                    }\n                }\n                n.a = function (t) {\n                  for (var n = [], r = 1; r < arguments.length; r++)\n                    n[r - 1] = arguments[r];\n                  for (var e = 0; e < n.length; e += 1) o(t, n[e]);\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(16),\n                  i = r(3);\n                n.a = function (t, n, r, o) {\n                  Object(i.a)(n) || ((r = n), (n = t), (t = function () {}));\n                  var u = Object.create\n                      ? function (t, n) {\n                          return Object.create(t, {\n                            constructor: { value: n },\n                          });\n                        }\n                      : function (t, n) {\n                          function r() {}\n                          r.prototype = t;\n                          var e = new r();\n                          return (e.constructor = n), e;\n                        },\n                    a = u(n.prototype, t);\n                  return (\n                    (t.prototype = Object(e.a)(a, t.prototype)),\n                    (t.superclass = u(n.prototype, n)),\n                    Object(e.a)(a, r),\n                    Object(e.a)(t, o),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t, n) {\n                  if (!Object(e.a)(t)) return -1;\n                  var r = Array.prototype.indexOf;\n                  if (r) return r.call(t, n);\n                  for (var i = -1, o = 0; o < t.length; o++)\n                    if (t[o] === n) {\n                      i = o;\n                      break;\n                    }\n                  return i;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(1),\n                  o = r(27),\n                  u = r(28),\n                  a = Object.prototype.hasOwnProperty;\n                n.a = function (t) {\n                  if (Object(e.a)(t)) return !0;\n                  if (Object(i.a)(t)) return !t.length;\n                  var n = Object(o.a)(t);\n                  if (\"Map\" === n || \"Set\" === n) return !t.size;\n                  if (Object(u.a)(t)) return !Object.keys(t).length;\n                  for (var r in t) if (a.call(t, r)) return !1;\n                  return !0;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(3),\n                  i = r(29);\n                n.a = function (t, n, r) {\n                  return Object(e.a)(r) ? !!r(t, n) : Object(i.a)(t, n);\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(1);\n                n.a = function (t, n) {\n                  if (!Object(i.a)(t)) return t;\n                  var r = [];\n                  return (\n                    Object(e.a)(t, function (t, e) {\n                      r.push(n(t, e));\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(6),\n                  i = r(13),\n                  o = function (t) {\n                    return t;\n                  };\n                n.a = function (t, n) {\n                  void 0 === n && (n = o);\n                  var r = {};\n                  return (\n                    Object(i.a)(t) &&\n                      !Object(e.a)(t) &&\n                      Object.keys(t).forEach(function (e) {\n                        r[e] = n(t[e], e);\n                      }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(8);\n                n.a = function (t, n, r) {\n                  for (\n                    var i = 0, o = Object(e.a)(n) ? n.split(\".\") : n;\n                    t && i < o.length;\n\n                  )\n                    t = t[o[i++]];\n                  return void 0 === t || i < o.length ? r : t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(13),\n                  i = r(8),\n                  o = r(5);\n                n.a = function (t, n, r) {\n                  var u = t,\n                    a = Object(i.a)(n) ? n.split(\".\") : n;\n                  return (\n                    a.forEach(function (t, n) {\n                      n < a.length - 1\n                        ? (Object(e.a)(u[t]) ||\n                            (u[t] = Object(o.a)(a[n + 1]) ? [] : {}),\n                          (u = u[t]))\n                        : (u[t] = r);\n                    }),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(2),\n                  i = r(9),\n                  o = Object.prototype.hasOwnProperty;\n                n.a = function (t, n) {\n                  if (null === t || !Object(i.a)(t)) return {};\n                  var r = {};\n                  return (\n                    Object(e.a)(n, function (n) {\n                      o.call(t, n) && (r[n] = t[n]);\n                    }),\n                    r\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t, n, r) {\n                  var e,\n                    i,\n                    o,\n                    u,\n                    a = 0;\n                  r || (r = {});\n                  var c = function () {\n                      (a = !1 === r.leading ? 0 : Date.now()),\n                        (e = null),\n                        (u = t.apply(i, o)),\n                        e || (i = o = null);\n                    },\n                    f = function () {\n                      var f = Date.now();\n                      a || !1 !== r.leading || (a = f);\n                      var s = n - (f - a);\n                      return (\n                        (i = this),\n                        (o = arguments),\n                        s <= 0 || s > n\n                          ? (e && (clearTimeout(e), (e = null)),\n                            (a = f),\n                            (u = t.apply(i, o)),\n                            e || (i = o = null))\n                          : e || !1 === r.trailing || (e = setTimeout(c, s)),\n                        u\n                      );\n                    };\n                  return (\n                    (f.cancel = function () {\n                      clearTimeout(e), (a = 0), (e = i = o = null);\n                    }),\n                    f\n                  );\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = r(1);\n                n.a = function (t) {\n                  return Object(e.a)(t) ? Array.prototype.slice.call(t) : [];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = {};\n                n.a = function (t) {\n                  return e[(t = t || \"g\")] ? (e[t] += 1) : (e[t] = 1), t + e[t];\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function () {};\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return t;\n                };\n              },\n              function (t, n, r) {\n                \"use strict\";\n                n.a = function (t) {\n                  return Object(e.a)(t)\n                    ? 0\n                    : Object(i.a)(t)\n                    ? t.length\n                    : Object.keys(t).length;\n                };\n                var e = r(6),\n                  i = r(1);\n              },\n              function (t, n, r) {\n                \"use strict\";\n                var e = (function () {\n                  function t() {\n                    this.map = {};\n                  }\n                  return (\n                    (t.prototype.has = function (t) {\n                      return void 0 !== this.map[t];\n                    }),\n                    (t.prototype.get = function (t, n) {\n                      var r = this.map[t];\n                      return void 0 === r ? n : r;\n                    }),\n                    (t.prototype.set = function (t, n) {\n                      this.map[t] = n;\n                    }),\n                    (t.prototype.clear = function () {\n                      this.map = {};\n                    }),\n                    (t.prototype.delete = function (t) {\n                      delete this.map[t];\n                    }),\n                    (t.prototype.size = function () {\n                      return Object.keys(this.map).length;\n                    }),\n                    t\n                  );\n                })();\n                n.a = e;\n              },\n              function (t, n) {\n                function r(t, n, r, e) {\n                  void 0 === e && (e = []);\n                  var i = this;\n                  (i.w = t || 0),\n                    (i.h = n || 0),\n                    (i.y = r || 0),\n                    (i.x = 0),\n                    (i.c = e || []),\n                    (i.cs = e.length),\n                    (i.prelim = 0),\n                    (i.mod = 0),\n                    (i.shift = 0),\n                    (i.change = 0),\n                    (i.tl = null),\n                    (i.tr = null),\n                    (i.el = null),\n                    (i.er = null),\n                    (i.msel = 0),\n                    (i.mser = 0);\n                }\n                function e(t, n) {\n                  var r = (function t(n, r) {\n                    var e = r ? n.y : n.x;\n                    return (\n                      n.children.forEach(function (n) {\n                        e = Math.min(t(n, r), e);\n                      }),\n                      e\n                    );\n                  })(t, n);\n                  !(function t(n, r, e) {\n                    e ? (n.y += r) : (n.x += r),\n                      n.children.forEach(function (n) {\n                        t(n, r, e);\n                      });\n                  })(t, -r, n);\n                }\n                (r.fromNode = function (t, n) {\n                  if (!t) return null;\n                  var e = [];\n                  return (\n                    t.children.forEach(function (t) {\n                      e.push(r.fromNode(t, n));\n                    }),\n                    n\n                      ? new r(t.height, t.width, t.x, e)\n                      : new r(t.width, t.height, t.y, e)\n                  );\n                }),\n                  (t.exports = function (t, n) {\n                    void 0 === n && (n = {});\n                    var i = n.isHorizontal;\n                    function o(t) {\n                      0 === t.cs\n                        ? ((t.el = t), (t.er = t), (t.msel = t.mser = 0))\n                        : ((t.el = t.c[0].el),\n                          (t.msel = t.c[0].msel),\n                          (t.er = t.c[t.cs - 1].er),\n                          (t.mser = t.c[t.cs - 1].mser));\n                    }\n                    function u(t, n, r) {\n                      for (\n                        var e = t.c[n - 1], i = e.mod, o = t.c[n], u = o.mod;\n                        null !== e && null !== o;\n\n                      ) {\n                        s(e) > r.low && (r = r.nxt);\n                        var l = i + e.prelim + e.w - (u + o.prelim);\n                        l > 0 && ((u += l), a(t, n, r.index, l));\n                        var d = s(e),\n                          h = s(o);\n                        d <= h && null !== (e = f(e)) && (i += e.mod),\n                          d >= h && null !== (o = c(o)) && (u += o.mod);\n                      }\n                      !e && o\n                        ? (function (t, n, r, e) {\n                            var i = t.c[0].el;\n                            i.tl = r;\n                            var o = e - r.mod - t.c[0].msel;\n                            (i.mod += o),\n                              (i.prelim -= o),\n                              (t.c[0].el = t.c[n].el),\n                              (t.c[0].msel = t.c[n].msel);\n                          })(t, n, o, u)\n                        : e &&\n                          !o &&\n                          (function (t, n, r, e) {\n                            var i = t.c[n].er;\n                            i.tr = r;\n                            var o = e - r.mod - t.c[n].mser;\n                            (i.mod += o),\n                              (i.prelim -= o),\n                              (t.c[n].er = t.c[n - 1].er),\n                              (t.c[n].mser = t.c[n - 1].mser);\n                          })(t, n, e, i);\n                    }\n                    function a(t, n, r, e) {\n                      (t.c[n].mod += e),\n                        (t.c[n].msel += e),\n                        (t.c[n].mser += e),\n                        (function (t, n, r, e) {\n                          if (r !== n - 1) {\n                            var i = n - r;\n                            (t.c[r + 1].shift += e / i),\n                              (t.c[n].shift -= e / i),\n                              (t.c[n].change -= e - e / i);\n                          }\n                        })(t, n, r, e);\n                    }\n                    function c(t) {\n                      return 0 === t.cs ? t.tl : t.c[0];\n                    }\n                    function f(t) {\n                      return 0 === t.cs ? t.tr : t.c[t.cs - 1];\n                    }\n                    function s(t) {\n                      return t.y + t.h;\n                    }\n                    function l(t, n, r) {\n                      for (; null !== r && t >= r.low; ) r = r.nxt;\n                      return { low: t, index: n, nxt: r };\n                    }\n                    !(function t(n, r, e) {\n                      void 0 === e && (e = 0),\n                        r\n                          ? ((n.x = e), (e += n.width))\n                          : ((n.y = e), (e += n.height)),\n                        n.children.forEach(function (n) {\n                          t(n, r, e);\n                        });\n                    })(t, i);\n                    var d = r.fromNode(t, i);\n                    return (\n                      (function t(n) {\n                        if (0 !== n.cs) {\n                          t(n.c[0]);\n                          for (\n                            var r = l(s(n.c[0].el), 0, null), e = 1;\n                            e < n.cs;\n                            ++e\n                          ) {\n                            t(n.c[e]);\n                            var i = s(n.c[e].er);\n                            u(n, e, r), (r = l(i, e, r));\n                          }\n                          !(function (t) {\n                            t.prelim =\n                              (t.c[0].prelim +\n                                t.c[0].mod +\n                                t.c[t.cs - 1].mod +\n                                t.c[t.cs - 1].prelim +\n                                t.c[t.cs - 1].w) /\n                                2 -\n                              t.w / 2;\n                          })(n),\n                            o(n);\n                        } else o(n);\n                      })(d),\n                      (function t(n, r) {\n                        (r += n.mod),\n                          (n.x = n.prelim + r),\n                          (function (t) {\n                            for (var n = 0, r = 0, e = 0; e < t.cs; e++)\n                              (n += t.c[e].shift),\n                                (r += n + t.c[e].change),\n                                (t.c[e].mod += r);\n                          })(n);\n                        for (var e = 0; e < n.cs; e++) t(n.c[e], r);\n                      })(d, 0),\n                      (function t(n, r, e) {\n                        e ? (r.y = n.x) : (r.x = n.x),\n                          n.c.forEach(function (n, i) {\n                            t(n, r.children[i], e);\n                          });\n                      })(d, t, i),\n                      e(t, i),\n                      t\n                    );\n                  });\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(115),\n                  o = r(17),\n                  u = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return (\n                          (this.rootNode.width = 0),\n                          o(this.rootNode, this.options, i)\n                        );\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                var e = r(7);\n                function i(t, n) {\n                  void 0 === t && (t = 0), void 0 === n && (n = []);\n                  var r = this;\n                  (r.x = r.y = 0),\n                    (r.leftChild = r.rightChild = null),\n                    (r.height = 0),\n                    (r.children = n);\n                }\n                var o = {\n                  isHorizontal: !0,\n                  nodeSep: 20,\n                  nodeSize: 20,\n                  rankSep: 200,\n                  subTreeSep: 10,\n                };\n                t.exports = function (t, n) {\n                  void 0 === n && (n = {}), (n = e.assign({}, o, n));\n                  var r,\n                    u = 0,\n                    a = (function t(n) {\n                      if (!n) return null;\n                      (n.width = 0), n.depth && n.depth > u && (u = n.depth);\n                      var r = n.children,\n                        e = r.length,\n                        o = new i(n.height, []);\n                      return (\n                        r.forEach(function (n, r) {\n                          var i = t(n);\n                          o.children.push(i),\n                            0 === r && (o.leftChild = i),\n                            r === e - 1 && (o.rightChild = i);\n                        }),\n                        (o.originNode = n),\n                        (o.isLeaf = n.isLeaf()),\n                        o\n                      );\n                    })(t);\n                  return (\n                    (function t(n) {\n                      if (n.isLeaf || 0 === n.children.length)\n                        n.drawingDepth = u;\n                      else {\n                        var r = n.children.map(function (n) {\n                            return t(n);\n                          }),\n                          e = Math.min.apply(null, r);\n                        n.drawingDepth = e - 1;\n                      }\n                      return n.drawingDepth;\n                    })(a),\n                    (function t(e) {\n                      (e.x = e.drawingDepth * n.rankSep),\n                        e.isLeaf\n                          ? ((e.y = 0),\n                            r &&\n                              ((e.y = r.y + r.height + n.nodeSep),\n                              e.originNode.parent !== r.originNode.parent &&\n                                (e.y += n.subTreeSep)),\n                            (r = e))\n                          : (e.children.forEach(function (n) {\n                              t(n);\n                            }),\n                            (e.y = (e.leftChild.y + e.rightChild.y) / 2));\n                    })(a),\n                    (function t(n, r, e) {\n                      e\n                        ? ((r.x = n.x), (r.y = n.y))\n                        : ((r.x = n.y), (r.y = n.x)),\n                        n.children.forEach(function (n, i) {\n                          t(n, r.children[i], e);\n                        });\n                    })(a, t, n.isHorizontal),\n                    t\n                  );\n                };\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(117),\n                  o = r(30),\n                  u = r(7),\n                  a = [\"LR\", \"RL\", \"H\"],\n                  c = a[0],\n                  f = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        var t = this.options,\n                          n = this.rootNode;\n                        t.isHorizontal = !0;\n                        var r = t.indent,\n                          e = void 0 === r ? 20 : r,\n                          u = t.dropCap,\n                          f = void 0 === u || u,\n                          s = t.direction || c;\n                        if (s && -1 === a.indexOf(s))\n                          throw new TypeError(\"Invalid direction: \" + s);\n                        if (s === a[0]) i(n, e, f);\n                        else if (s === a[1]) i(n, e, f), n.right2left();\n                        else if (s === a[2]) {\n                          var l = o(n, t),\n                            d = l.left,\n                            h = l.right;\n                          i(d, e, f), d.right2left(), i(h, e, f);\n                          var p = d.getBoundingBox();\n                          h.translate(p.width, 0), (n.x = h.x - n.width / 2);\n                        }\n                        return n;\n                      }),\n                      e\n                    );\n                  })(e),\n                  s = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, s, n)), new f(t, n).execute();\n                };\n              },\n              function (t, n) {\n                t.exports = function (t, n, r) {\n                  var e = null;\n                  t.eachNode(function (t) {\n                    !(function (t, n, r, e) {\n                      if (!e)\n                        try {\n                          if (t.id === t.parent.children[0].id)\n                            return (\n                              (t.x += r * t.depth), void (t.y = n ? n.y : 0)\n                            );\n                        } catch (t) {}\n                      (t.x += r * t.depth), (t.y = n ? n.y + n.height : 0);\n                    })(t, e, n, r),\n                      (e = t);\n                  });\n                };\n              },\n              function (t, n, r) {\n                var e = r(11),\n                  i = r(119),\n                  o = r(17),\n                  u = r(7),\n                  a = (function (t) {\n                    var n, r;\n                    function e() {\n                      return t.apply(this, arguments) || this;\n                    }\n                    return (\n                      (r = t),\n                      ((n = e).prototype = Object.create(r.prototype)),\n                      (n.prototype.constructor = n),\n                      (n.__proto__ = r),\n                      (e.prototype.execute = function () {\n                        return o(this.rootNode, this.options, i);\n                      }),\n                      e\n                    );\n                  })(e),\n                  c = {};\n                t.exports = function (t, n) {\n                  return (n = u.assign({}, c, n)), new a(t, n).execute();\n                };\n              },\n              function (t, n, r) {\n                var e = r(7),\n                  i = {\n                    getSubTreeSep: function () {\n                      return 0;\n                    },\n                  };\n                t.exports = function (t, n) {\n                  void 0 === n && (n = {}),\n                    (n = e.assign({}, i, n)),\n                    (t.parent = { x: 0, width: 0, height: 0, y: 0 }),\n                    t.BFTraverse(function (t) {\n                      t.x = t.parent.x + t.parent.width;\n                    }),\n                    (t.parent = null),\n                    (function t(n, r) {\n                      var e = 0;\n                      return (\n                        n.children.length\n                          ? n.children.forEach(function (n) {\n                              e += t(n, r);\n                            })\n                          : (e = n.height),\n                        (n._subTreeSep = r.getSubTreeSep(n.data)),\n                        (n.totalHeight =\n                          Math.max(n.height, e) + 2 * n._subTreeSep),\n                        n.totalHeight\n                      );\n                    })(t, n),\n                    (t.startY = 0),\n                    (t.y = t.totalHeight / 2 - t.height / 2),\n                    t.eachNode(function (t) {\n                      var n = t.children,\n                        r = n.length;\n                      if (r) {\n                        var e = n[0];\n                        if (((e.startY = t.startY + t._subTreeSep), 1 === r))\n                          e.y = t.y + t.height / 2 - e.height / 2;\n                        else {\n                          e.y = e.startY + e.totalHeight / 2 - e.height / 2;\n                          for (var i = 1; i < r; i++) {\n                            var o = n[i];\n                            (o.startY = n[i - 1].startY + n[i - 1].totalHeight),\n                              (o.y =\n                                o.startY + o.totalHeight / 2 - o.height / 2);\n                          }\n                        }\n                      }\n                    }),\n                    (function t(n) {\n                      var r = n.children,\n                        e = r.length;\n                      if (e) {\n                        r.forEach(function (n) {\n                          t(n);\n                        });\n                        var i = r[0],\n                          o = r[e - 1],\n                          u = o.y - i.y + o.height,\n                          a = 0;\n                        if (\n                          (r.forEach(function (t) {\n                            a += t.totalHeight;\n                          }),\n                          u > n.height)\n                        )\n                          n.y = i.y + u / 2 - n.height / 2;\n                        else if (1 !== r.length || n.height > a) {\n                          var c = n.y + (n.height - u) / 2 - i.y;\n                          r.forEach(function (t) {\n                            t.translate(0, c);\n                          });\n                        } else\n                          n.y =\n                            (i.y + i.height / 2 + o.y + o.height / 2) / 2 -\n                            n.height / 2;\n                      }\n                    })(t);\n                };\n              },\n            ]);\n          }),\n          \"object\" === u(n) && \"object\" === u(t)\n            ? (t.exports = o())\n            : ((e = []),\n              void 0 ===\n                (i = \"function\" == typeof (r = o) ? r.apply(n, e) : r) ||\n                (t.exports = i));\n      }).call(this, r(50)(t));\n    },\n    214: function (t, n, r) {\n      \"use strict\";\n      r.r(n);\n      var e = r(1),\n        i = r(104),\n        o = r.n(i),\n        u = r(0);\n      n.default = function (t) {\n        var n = t.Graph,\n          r = t.Util,\n          i = r.radialLayout,\n          a = r.traverseTree;\n        return (function (t) {\n          function n(n) {\n            var r = t.call(this, n) || this;\n            return (\n              (r.layoutAnimating = !1),\n              r.set(\"removeList\", []),\n              r.set(\"layoutMethod\", r.getLayout()),\n              r\n            );\n          }\n          return (\n            Object(e.c)(n, t),\n            (n.prototype.getLayout = function () {\n              var t = this.get(\"layout\");\n              return t\n                ? \"function\" == typeof t\n                  ? t\n                  : (t.type || (t.type = \"dendrogram\"),\n                    t.direction || (t.direction = \"TB\"),\n                    t.radial\n                      ? function (n) {\n                          var r = o.a[t.type](n, t);\n                          return i(r), r;\n                        }\n                      : function (n) {\n                          return o.a[t.type](n, t);\n                        })\n                : null;\n            }),\n            (n.indexOfChild = function (t, n) {\n              var r = -1;\n              return (\n                Object(u.c)(t, function (t, e) {\n                  if (n === t.id) return (r = e), !1;\n                }),\n                r\n              );\n            }),\n            (n.prototype.getDefaultCfg = function () {\n              var n = t.prototype.getDefaultCfg.call(this);\n              return (n.animate = !0), n;\n            }),\n            (n.prototype.innerAddChild = function (t, n, r) {\n              var e = this,\n                i = t.data;\n              i && ((i.x = t.x), (i.y = t.y), (i.depth = t.depth));\n              var o = e.addItem(\"node\", i, !1);\n              if (n) {\n                if ((o.set(\"parent\", n), r)) {\n                  var a = n.get(\"originAttrs\");\n                  if (a) o.set(\"originAttrs\", a);\n                  else {\n                    var c = n.getModel();\n                    o.set(\"originAttrs\", { x: c.x, y: c.y });\n                  }\n                }\n                var f = n.get(\"children\");\n                f ? f.push(o) : n.set(\"children\", [o]),\n                  e.addItem(\n                    \"edge\",\n                    {\n                      source: n,\n                      target: o,\n                      id: n.get(\"id\") + \":\" + o.get(\"id\"),\n                    },\n                    !1,\n                  );\n              }\n              return (\n                Object(u.c)(t.children || [], function (t) {\n                  e.innerAddChild(t, o, r);\n                }),\n                e.emit(\"afteraddchild\", { item: o, parent: n }),\n                o\n              );\n            }),\n            (n.prototype.innerUpdateChild = function (t, r, e) {\n              var i = this,\n                o = i.findById(t.id);\n              if (o) {\n                Object(u.c)(t.children || [], function (t) {\n                  i.innerUpdateChild(t, o, e);\n                });\n                var a,\n                  c,\n                  f = o.get(\"children\");\n                if (f)\n                  if (f.length > 0)\n                    for (var s = f.length - 1; s >= 0; s--) {\n                      var l = f[s].getModel();\n                      -1 === n.indexOfChild(t.children || [], l.id) &&\n                        (i.innerRemoveChild(l.id, { x: t.x, y: t.y }, e),\n                        f.splice(s, 1));\n                    }\n                o.get(\"originAttrs\") &&\n                  ((a = o.get(\"originAttrs\").x), (c = o.get(\"originAttrs\").y));\n                var d = o.getModel();\n                e && o.set(\"originAttrs\", { x: d.x, y: d.y }),\n                  o.set(\"model\", t.data),\n                  (a === t.x && c === t.y) ||\n                    o.updatePosition({ x: t.x, y: t.y });\n              } else i.innerAddChild(t, r, e);\n            }),\n            (n.prototype.innerRemoveChild = function (t, n, r) {\n              var e = this,\n                i = e.findById(t);\n              if (i)\n                if (\n                  (Object(u.c)(i.get(\"children\"), function (t) {\n                    e.innerRemoveChild(t.getModel().id, n, r);\n                  }),\n                  r)\n                ) {\n                  var o = i.getModel();\n                  i.set(\"to\", n),\n                    i.set(\"originAttrs\", { x: o.x, y: o.y }),\n                    e.get(\"removeList\").push(i);\n                } else e.removeItem(i);\n            }),\n            (n.prototype.changeData = function (t) {\n              var n = this;\n              this.getNodes().map(function (t) {\n                return n.clearItemStates(t);\n              }),\n                this.getEdges().map(function (t) {\n                  return n.clearItemStates(t);\n                }),\n                t ? (n.data(t), n.render()) : n.layout(this.get(\"fitView\"));\n            }),\n            (n.prototype.changeLayout = function (t) {\n              console.warn(\n                \"Please call updateLayout instead of changeLayout. changeLayout will be discarded soon\",\n              );\n              this.updateLayout(t);\n            }),\n            (n.prototype.updateLayout = function (t) {\n              t\n                ? (this.set(\"layout\", t),\n                  this.set(\"layoutMethod\", this.getLayout()),\n                  this.layout())\n                : console.warn(\"layout cannot be null\");\n            }),\n            (n.prototype.refreshLayout = function (t) {\n              console.warn(\n                \"Please call layout instead of refreshLayout. refreshLayout will be discarded soon\",\n              );\n              this.layout(t);\n            }),\n            (n.prototype.layout = function (t) {\n              var n = this.get(\"data\"),\n                r = this.get(\"layoutMethod\")(n, this.get(\"layout\")),\n                e = this.get(\"animate\");\n              (this.emit(\"beforerefreshlayout\", { data: n, layoutData: r }),\n              this.emit(\"beforelayout\"),\n              this.innerUpdateChild(r, void 0, e),\n              t) && this.get(\"viewController\").fitView();\n              e ? this.layoutAnimate(r) : (this.refresh(), this.paint()),\n                this.emit(\"afterrefreshlayout\", { data: n, layoutData: r }),\n                this.emit(\"afterlayout\");\n            }),\n            (n.prototype.addChild = function (t, n) {\n              this.emit(\"beforeaddchild\", { model: t, parent: n }),\n                Object(u.o)(n) || (n = n.get(\"id\"));\n              var r = this.findDataById(n);\n              r &&\n                (r.children || (r.children = []),\n                r.children.push(t),\n                this.changeData());\n            }),\n            (n.prototype.updateChildren = function (t, n) {\n              n && this.findById(n)\n                ? ((this.findDataById(n).children = t), this.changeData())\n                : console.warn(\n                    \"Update children failed! There is no node with id '\" +\n                      n +\n                      \"'\",\n                  );\n            }),\n            (n.prototype.updateChild = function (t, r) {\n              if (r && this.findById(r)) {\n                var e = this.findDataById(r),\n                  i = this.findById(t.id);\n                if ((e.children || (e.children = []), i)) {\n                  var o = n.indexOfChild(e.children, t.id);\n                  e.children[o] = t;\n                } else e.children.push(t);\n                this.changeData();\n              } else this.changeData(t);\n            }),\n            (n.prototype.removeChild = function (t) {\n              var r = this.findById(t);\n              if (r) {\n                var e = r.get(\"parent\");\n                if (e && !e.destroyed) {\n                  var i = this.findDataById(e.get(\"id\")),\n                    o = (i && i.children) || [],\n                    u = r.getModel(),\n                    a = n.indexOfChild(o, u.id);\n                  o.splice(a, 1);\n                }\n                this.changeData();\n              }\n            }),\n            (n.prototype.findDataById = function (t, n) {\n              var r = this;\n              if ((n || (n = r.get(\"data\")), t === n.id)) return n;\n              var e = null;\n              return (\n                Object(u.c)(n.children || [], function (n) {\n                  return n.id === t\n                    ? ((e = n), !1)\n                    : !(e = r.findDataById(t, n)) && void 0;\n                }),\n                e\n              );\n            }),\n            (n.prototype.layoutAnimate = function (t, n) {\n              var r = this,\n                e = this.get(\"animateCfg\");\n              r.emit(\"beforeanimate\", { data: t }),\n                r.getEdges().forEach(function (t) {\n                  var n = t.get(\"model\");\n                  n.sourceAnchor ||\n                    (n.sourceAnchor = t.get(\"sourceAnchorIndex\"));\n                }),\n                this.get(\"canvas\").animate(\n                  function (e) {\n                    a(t, function (i) {\n                      var o = r.findById(i.id);\n                      if (o) {\n                        var u = o.get(\"originAttrs\"),\n                          a = o.get(\"model\");\n                        if (\n                          (u ||\n                            ((u = { x: a.x, y: a.y }), o.set(\"originAttrs\", u)),\n                          n)\n                        ) {\n                          var c = n(o, e, u, t);\n                          o.set(\"model\", Object.assign(a, c));\n                        } else\n                          (a.x = u.x + (i.x - u.x) * e),\n                            (a.y = u.y + (i.y - u.y) * e);\n                      }\n                      return !0;\n                    }),\n                      Object(u.c)(r.get(\"removeList\"), function (t) {\n                        var n = t.getModel(),\n                          r = t.get(\"originAttrs\"),\n                          i = t.get(\"to\");\n                        (n.x = r.x + (i.x - r.x) * e),\n                          (n.y = r.y + (i.y - r.y) * e);\n                      }),\n                      r.refreshPositions();\n                  },\n                  {\n                    duration: e.duration,\n                    easing: e.ease,\n                    callback: function () {\n                      Object(u.c)(r.getNodes(), function (t) {\n                        t.set(\"originAttrs\", null);\n                      }),\n                        Object(u.c)(r.get(\"removeList\"), function (t) {\n                          r.removeItem(t);\n                        }),\n                        r.set(\"removeList\", []),\n                        e.callback && e.callback(),\n                        r.emit(\"afteranimate\", { data: t });\n                    },\n                    delay: e.delay,\n                  },\n                );\n            }),\n            (n.prototype.stopLayoutAnimate = function () {\n              this.get(\"canvas\").stopAnimate(),\n                this.emit(\"layoutanimateend\", { data: this.get(\"data\") }),\n                (this.layoutAnimating = !1);\n            }),\n            (n.prototype.isLayoutAnimating = function () {\n              return this.layoutAnimating;\n            }),\n            (n.prototype.render = function () {\n              if (!this.get(\"data\"))\n                throw new Error(\"data must be defined first\");\n              this.clear(),\n                this.emit(\"beforerender\"),\n                this.layout(this.get(\"fitView\")),\n                this.emit(\"afterrender\");\n            }),\n            (n.prototype.save = function () {\n              return this.get(\"data\");\n            }),\n            n\n          );\n        })(n);\n      };\n    },\n    50: function (t, n) {\n      t.exports = function (t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function () {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function () {\n                return t.l;\n              },\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function () {\n                return t.i;\n              },\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n  }).default;\n});\n//# sourceMappingURL=treeGraph.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/circularLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function r(n) {\n      if (e[n]) return e[n].exports;\n      var o = (e[n] = { i: n, l: !1, exports: {} });\n      return t[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports;\n    }\n    return (\n      (r.m = t),\n      (r.c = e),\n      (r.d = function (t, e, n) {\n        r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n });\n      }),\n      (r.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (r.t = function (t, e) {\n        if ((1 & e && (t = r(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var n = Object.create(null);\n        if (\n          (r.r(n),\n          Object.defineProperty(n, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            r.d(\n              n,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return n;\n      }),\n      (r.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return r.d(e, \"a\", e), e;\n      }),\n      (r.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (r.p = \"\"),\n      r((r.s = 215))\n    );\n  })({\n    10: function (t, e, r) {\n      \"use strict\";\n      var n =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, r, n) {\n                void 0 === n && (n = r),\n                  Object.defineProperty(t, n, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[r];\n                    },\n                  });\n              }\n            : function (t, e, r, n) {\n                void 0 === n && (n = r), (t[n] = e[r]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var r in t)\n              \"default\" === r ||\n                Object.prototype.hasOwnProperty.call(e, r) ||\n                n(e, t, r);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(r(11), e),\n        o(r(12), e),\n        o(r(13), e),\n        o(r(14), e),\n        o(r(15), e),\n        o(r(16), e);\n    },\n    11: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var n,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((n = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = n(t));\n        });\n    },\n    12: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var r = parseFloat(t);\n        return e.isNaN(r) ? t : r;\n      };\n    },\n    14: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, r) {\n        for (var n = [], o = 0; o < t; o++) n[o] = 0;\n        return r\n          ? (r.forEach(function (t) {\n              t.source && (n[e[t.source]] += 1),\n                t.target && (n[e[t.target]] += 1);\n            }),\n            n)\n          : n;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], r = t.length, n = 0; n < r; n += 1) {\n          e[n] = [];\n          for (var o = 0; o < r; o += 1)\n            n === o\n              ? (e[n][o] = 0)\n              : 0 !== t[n][o] && t[n][o]\n              ? (e[n][o] = t[n][o])\n              : (e[n][o] = 1 / 0);\n        }\n        for (var i = 0; i < r; i += 1)\n          for (n = 0; n < r; n += 1)\n            for (o = 0; o < r; o += 1)\n              e[n][o] > e[n][i] + e[i][o] && (e[n][o] = e[n][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var r = t.nodes,\n          n = t.edges,\n          o = [],\n          i = {};\n        if (!r) throw new Error(\"invalid nodes data!\");\n        return (\n          r &&\n            r.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          n &&\n            n.forEach(function (t) {\n              var r = t.source,\n                n = t.target,\n                u = i[r],\n                s = i[n];\n              (o[u][s] = 1), e || (o[s][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var r = [];\n        return (\n          t.forEach(function (t) {\n            var n = [];\n            t.forEach(function (t) {\n              n.push(t * e);\n            }),\n              r.push(n);\n          }),\n          r\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, r) {\n            if (e && e.children)\n              for (var n = e.children.length - 1; n >= 0; n--)\n                if (!t(e.children[n], r)) return;\n            return !!r(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, r) {\n      \"use strict\";\n      function n(t) {\n        return (n =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, r = 1, n = arguments.length; r < n; r++)\n                for (var o in (e = arguments[r]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === n(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var r = [];\n          return (\n            t.forEach(function (t) {\n              r.push(t);\n            }),\n            r.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === n(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    171: function (t, e, r) {\n      \"use strict\";\n      var n,\n        o =\n          (this && this.__extends) ||\n          ((n = function (t, e) {\n            return (n =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var r in e)\n                  Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function r() {\n              this.constructor = t;\n            }\n            n(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((r.prototype = e.prototype), new r()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.CircularLayout = void 0);\n      var i = r(7),\n        u = r(10);\n      function s(t, e) {\n        var r = t.degree,\n          n = e.degree;\n        return r < n ? -1 : r > n ? 1 : 0;\n      }\n      var c = (function (t) {\n        function e(e) {\n          var r = t.call(this) || this;\n          return (\n            (r.radius = null),\n            (r.startRadius = null),\n            (r.endRadius = null),\n            (r.startAngle = 0),\n            (r.endAngle = 2 * Math.PI),\n            (r.clockwise = !0),\n            (r.divisions = 1),\n            (r.ordering = null),\n            (r.angleRatio = 1),\n            (r.nodes = []),\n            (r.edges = []),\n            (r.nodeMap = {}),\n            (r.degrees = []),\n            (r.width = 300),\n            (r.height = 300),\n            r.updateCfg(e),\n            r\n          );\n        }\n        return (\n          o(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return {\n              radius: null,\n              startRadius: null,\n              endRadius: null,\n              startAngle: 0,\n              endAngle: 2 * Math.PI,\n              clockwise: !0,\n              divisions: 1,\n              ordering: null,\n              angleRatio: 1,\n            };\n          }),\n          (e.prototype.execute = function () {\n            var t = this.nodes,\n              e = this.edges,\n              r = t.length;\n            if (0 !== r) {\n              this.width ||\n                \"undefined\" == typeof window ||\n                (this.width = window.innerWidth),\n                this.height ||\n                  \"undefined\" == typeof window ||\n                  (this.height = window.innerHeight),\n                this.center ||\n                  (this.center = [this.width / 2, this.height / 2]);\n              var n = this.center;\n              if (1 === r)\n                return (\n                  (t[0].x = n[0]),\n                  (t[0].y = n[1]),\n                  void (this.onLayoutEnd && this.onLayoutEnd())\n                );\n              var o = this.radius,\n                i = this.startRadius,\n                s = this.endRadius,\n                c = this.divisions,\n                a = this.startAngle,\n                f = this.endAngle,\n                d = (f - a) / r,\n                l = {};\n              t.forEach(function (t, e) {\n                l[t.id] = e;\n              }),\n                (this.nodeMap = l);\n              var h = u.getDegree(t.length, l, e);\n              (this.degrees = h),\n                o || i || s\n                  ? !i && s\n                    ? (i = s)\n                    : i && !s && (s = i)\n                  : (o =\n                      this.height > this.width\n                        ? this.width / 2\n                        : this.height / 2);\n              var p = d * this.angleRatio,\n                y = this.ordering,\n                g = [];\n              g =\n                \"topology\" === y\n                  ? this.topologyOrdering()\n                  : \"topology-directed\" === y\n                  ? this.topologyOrdering(!0)\n                  : \"degree\" === y\n                  ? this.degreeOrdering()\n                  : t;\n              for (\n                var v = this.clockwise, b = Math.ceil(r / c), _ = 0;\n                _ < r;\n                ++_\n              ) {\n                var O = o;\n                O ||\n                  null === i ||\n                  null === s ||\n                  (O = i + (_ * (s - i)) / (r - 1)),\n                  O || (O = 10 + (100 * _) / (r - 1));\n                var j =\n                  a + (_ % b) * p + ((2 * Math.PI) / c) * Math.floor(_ / b);\n                v ||\n                  (j =\n                    f - (_ % b) * p - ((2 * Math.PI) / c) * Math.floor(_ / b)),\n                  (g[_].x = n[0] + Math.cos(j) * O),\n                  (g[_].y = n[1] + Math.sin(j) * O),\n                  (g[_].weight = h[_]);\n              }\n              return (\n                this.onLayoutEnd && this.onLayoutEnd(),\n                { nodes: g, edges: this.edges }\n              );\n            }\n            this.onLayoutEnd && this.onLayoutEnd();\n          }),\n          (e.prototype.topologyOrdering = function (t) {\n            void 0 === t && (t = !1);\n            var e = this.degrees,\n              r = this.edges,\n              n = this.nodes,\n              o = u.clone(n),\n              i = this.nodeMap,\n              s = [o[0]],\n              c = [n[0]],\n              a = [],\n              f = n.length;\n            (a[0] = !0),\n              (function (t, e, r, n) {\n                t.forEach(function (e, r) {\n                  (t[r].children = []), (t[r].parent = []);\n                }),\n                  n\n                    ? e.forEach(function (e) {\n                        var n = 0;\n                        e.source && (n = r[e.source]);\n                        var o = 0;\n                        e.target && (o = r[e.target]);\n                        var i = t[n].children,\n                          u = t[o].parent;\n                        i.push(t[o].id), u.push(t[n].id);\n                      })\n                    : e.forEach(function (e) {\n                        var n = 0;\n                        e.source && (n = r[e.source]);\n                        var o = 0;\n                        e.target && (o = r[e.target]);\n                        var i = t[n].children,\n                          u = t[o].children;\n                        i.push(t[o].id), u.push(t[n].id);\n                      });\n              })(o, r, i, t);\n            var d = 0;\n            return (\n              o.forEach(function (t, u) {\n                if (0 !== u)\n                  if (\n                    (u !== f - 1 &&\n                      e[u] === e[u + 1] &&\n                      !(function (t, e, r) {\n                        for (var n = r.length, o = 0; o < n; o++)\n                          if (\n                            (t.id === r[o].source && e.id === r[o].target) ||\n                            (e.id === r[o].source && t.id === r[o].target)\n                          )\n                            return !0;\n                        return !1;\n                      })(s[d], t, r)) ||\n                    a[u]\n                  ) {\n                    for (\n                      var l = s[d].children, h = !1, p = 0;\n                      p < l.length;\n                      p++\n                    ) {\n                      var y = i[l[p]];\n                      if (e[y] === e[u] && !a[y]) {\n                        s.push(o[y]),\n                          c.push(n[i[o[y].id]]),\n                          (a[y] = !0),\n                          (h = !0);\n                        break;\n                      }\n                    }\n                    for (\n                      var g = 0;\n                      !h &&\n                      (a[g] ||\n                        (s.push(o[g]),\n                        c.push(n[i[o[g].id]]),\n                        (a[g] = !0),\n                        (h = !0)),\n                      ++g !== f);\n\n                    );\n                  } else s.push(t), c.push(n[i[t.id]]), (a[u] = !0), d++;\n              }),\n              c\n            );\n          }),\n          (e.prototype.degreeOrdering = function () {\n            var t = this.nodes,\n              e = [],\n              r = this.degrees;\n            return (\n              t.forEach(function (t, n) {\n                (t.degree = r[n]), e.push(t);\n              }),\n              e.sort(s),\n              e\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"circular\";\n          }),\n          e\n        );\n      })(i.Base);\n      e.CircularLayout = c;\n    },\n    215: function (t, e, r) {\n      \"use strict\";\n      r.r(e);\n      var n = r(171);\n      e.default = n.CircularLayout;\n    },\n    7: function (t, e, r) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var n = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = n;\n    },\n  }).default;\n});\n//# sourceMappingURL=circularLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/comboForceLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.f6 = t())\n    : (e.f6 = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function o(r) {\n      if (t[r]) return t[r].exports;\n      var n = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(n.exports, n, n.exports, o), (n.l = !0), n.exports;\n    }\n    return (\n      (o.m = e),\n      (o.c = t),\n      (o.d = function (e, t, r) {\n        o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (o.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (e, t) {\n        if ((1 & t && (e = o(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (o.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var n in e)\n            o.d(\n              r,\n              n,\n              function (t) {\n                return e[t];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (o.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return o.d(t, \"a\", t), t;\n      }),\n      (o.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (o.p = \"\"),\n      o((o.s = 216))\n    );\n  })({\n    10: function (e, t, o) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, o, r) {\n                void 0 === r && (r = o),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[o];\n                    },\n                  });\n              }\n            : function (e, t, o, r) {\n                void 0 === r && (r = o), (e[r] = t[o]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var o in e)\n              \"default\" === o ||\n                Object.prototype.hasOwnProperty.call(t, o) ||\n                r(t, e, o);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        n(o(11), t),\n        n(o(12), t),\n        n(o(13), t),\n        n(o(14), t),\n        n(o(15), t),\n        n(o(16), t);\n    },\n    11: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        n,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (e) {\n          return n[e] || (n[e] = r(e));\n        });\n    },\n    12: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var o = parseFloat(e);\n        return t.isNaN(o) ? e : o;\n      };\n    },\n    14: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, o) {\n        for (var r = [], n = 0; n < e; n++) r[n] = 0;\n        return o\n          ? (o.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], o = e.length, r = 0; r < o; r += 1) {\n          t[r] = [];\n          for (var n = 0; n < o; n += 1)\n            r === n\n              ? (t[r][n] = 0)\n              : 0 !== e[r][n] && e[r][n]\n              ? (t[r][n] = e[r][n])\n              : (t[r][n] = 1 / 0);\n        }\n        for (var i = 0; i < o; i += 1)\n          for (r = 0; r < o; r += 1)\n            for (n = 0; n < o; n += 1)\n              t[r][n] > t[r][i] + t[i][n] && (t[r][n] = t[r][i] + t[i][n]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var o = e.nodes,\n          r = e.edges,\n          n = [],\n          i = {};\n        if (!o) throw new Error(\"invalid nodes data!\");\n        return (\n          o &&\n            o.forEach(function (e, t) {\n              i[e.id] = t;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var o = e.source,\n                r = e.target,\n                c = i[o],\n                a = i[r];\n              (n[c][a] = 1), t || (n[a][c] = 1);\n            }),\n          n\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var o = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              o.push(r);\n          }),\n          o\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, o) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], o)) return;\n            return !!o(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, o) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (e) {\n              for (var t, o = 1, r = arguments.length; o < r; o++)\n                for (var n in (t = arguments[o]))\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var o = [];\n          return (\n            e.forEach(function (e) {\n              o.push(e);\n            }),\n            o.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = n({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    172: function (e, t, o) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var o in t)\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((o.prototype = t.prototype), new o()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.ComboForceLayout = void 0);\n      var i = o(7),\n        c = o(10),\n        a = (function (e) {\n          function t(t) {\n            var o = e.call(this) || this;\n            return (\n              (o.center = [0, 0]),\n              (o.maxIteration = 100),\n              (o.gravity = 10),\n              (o.comboGravity = 10),\n              (o.linkDistance = 10),\n              (o.alpha = 1),\n              (o.alphaMin = 0.001),\n              (o.alphaDecay = 1 - Math.pow(o.alphaMin, 1 / 300)),\n              (o.alphaTarget = 0),\n              (o.velocityDecay = 0.6),\n              (o.edgeStrength = 0.6),\n              (o.nodeStrength = 30),\n              (o.preventOverlap = !1),\n              (o.preventNodeOverlap = !1),\n              (o.preventComboOverlap = !1),\n              (o.collideStrength = void 0),\n              (o.nodeCollideStrength = 0.5),\n              (o.comboCollideStrength = 0.5),\n              (o.comboSpacing = 20),\n              (o.comboPadding = 10),\n              (o.optimizeRangeFactor = 1),\n              (o.onTick = function () {}),\n              (o.onLayoutEnd = function () {}),\n              (o.depthAttractiveForceScale = 1),\n              (o.depthRepulsiveForceScale = 2),\n              (o.nodes = []),\n              (o.edges = []),\n              (o.combos = []),\n              (o.comboTrees = []),\n              (o.width = 300),\n              (o.height = 300),\n              (o.bias = []),\n              (o.nodeMap = {}),\n              (o.oriComboMap = {}),\n              (o.indexMap = {}),\n              (o.comboMap = {}),\n              (o.previousLayouted = !1),\n              o.updateCfg(t),\n              o\n            );\n          }\n          return (\n            n(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                maxIteration: 100,\n                center: [0, 0],\n                gravity: 10,\n                speed: 1,\n                comboGravity: 30,\n                preventOverlap: !1,\n                preventComboOverlap: !0,\n                preventNodeOverlap: !0,\n                nodeSpacing: void 0,\n                collideStrength: void 0,\n                nodeCollideStrength: 0.5,\n                comboCollideStrength: 0.5,\n                comboSpacing: 20,\n                comboPadding: 10,\n                edgeStrength: 0.6,\n                nodeStrength: 30,\n                linkDistance: 10,\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this.nodes,\n                t = this.center;\n              if (\n                ((this.comboTree = {\n                  id: \"comboTreeRoot\",\n                  depth: -1,\n                  children: this.comboTrees,\n                }),\n                e && 0 !== e.length)\n              ) {\n                if (1 === e.length)\n                  return (\n                    (e[0].x = t[0]),\n                    (e[0].y = t[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                this.initVals(),\n                  this.run(),\n                  this.onLayoutEnd && this.onLayoutEnd();\n              } else this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (t.prototype.run = function () {\n              var e = this,\n                t = e.nodes,\n                o = e.previousLayouted ? e.maxIteration / 5 : e.maxIteration;\n              e.width ||\n                \"undefined\" == typeof window ||\n                (e.width = window.innerWidth),\n                e.height ||\n                  \"undefined\" == typeof window ||\n                  (e.height = window.innerHeight);\n              var r = e.center,\n                n = e.velocityDecay,\n                i = e.comboMap;\n              e.previousLayouted || e.initPos(i);\n              for (\n                var a = function (o) {\n                    var r = [];\n                    t.forEach(function (e, t) {\n                      r[t] = { x: 0, y: 0 };\n                    }),\n                      e.applyCalculate(r),\n                      e.applyComboCenterForce(r),\n                      t.forEach(function (e, t) {\n                        c.isNumber(e.x) &&\n                          c.isNumber(e.y) &&\n                          ((e.x += r[t].x * n), (e.y += r[t].y * n));\n                      }),\n                      (e.alpha += (e.alphaTarget - e.alpha) * e.alphaDecay),\n                      e.onTick();\n                  },\n                  u = 0;\n                u < o;\n                u++\n              )\n                a();\n              var s = [0, 0];\n              t.forEach(function (e) {\n                c.isNumber(e.x) &&\n                  c.isNumber(e.y) &&\n                  ((s[0] += e.x), (s[1] += e.y));\n              }),\n                (s[0] /= t.length),\n                (s[1] /= t.length);\n              var f = [r[0] - s[0], r[1] - s[1]];\n              t.forEach(function (e, t) {\n                c.isNumber(e.x) &&\n                  c.isNumber(e.y) &&\n                  ((e.x += f[0]), (e.y += f[1]));\n              }),\n                e.combos.forEach(function (e) {\n                  var t = i[e.id];\n                  t && t.empty && ((e.x = t.cx || e.x), (e.y = t.cy || e.y));\n                }),\n                (e.previousLayouted = !0);\n            }),\n            (t.prototype.initVals = function () {\n              var e = this.edges,\n                t = this.nodes,\n                o = this.combos,\n                r = {},\n                n = {},\n                i = {};\n              t.forEach(function (e, t) {\n                (n[e.id] = e), (i[e.id] = t);\n              }),\n                (this.nodeMap = n),\n                (this.indexMap = i);\n              var a = {};\n              o.forEach(function (e) {\n                a[e.id] = e;\n              }),\n                (this.oriComboMap = a),\n                (this.comboMap = this.getComboMap());\n              var u = this.preventOverlap;\n              (this.preventComboOverlap = this.preventComboOverlap || u),\n                (this.preventNodeOverlap = this.preventNodeOverlap || u);\n              var s = this.collideStrength;\n              s &&\n                ((this.comboCollideStrength = s),\n                (this.nodeCollideStrength = s)),\n                (this.comboCollideStrength = this.comboCollideStrength\n                  ? this.comboCollideStrength\n                  : 0),\n                (this.nodeCollideStrength = this.nodeCollideStrength\n                  ? this.nodeCollideStrength\n                  : 0);\n              for (var f = 0; f < e.length; ++f)\n                r[e[f].source] ? r[e[f].source]++ : (r[e[f].source] = 1),\n                  r[e[f].target] ? r[e[f].target]++ : (r[e[f].target] = 1);\n              var d = [];\n              for (f = 0; f < e.length; ++f)\n                d[f] = r[e[f].source] / (r[e[f].source] + r[e[f].target]);\n              this.bias = d;\n              var p,\n                h,\n                l = this.nodeSize,\n                y = this.nodeSpacing;\n              if (\n                ((h = c.isNumber(y)\n                  ? function () {\n                      return y;\n                    }\n                  : c.isFunction(y)\n                  ? y\n                  : function () {\n                      return 0;\n                    }),\n                (this.nodeSpacing = h),\n                l)\n              )\n                if (c.isFunction(l))\n                  p = function (e) {\n                    return l(e);\n                  };\n                else if (c.isArray(l)) {\n                  var v = (l[0] > l[1] ? l[0] : l[1]) / 2;\n                  p = function (e) {\n                    return v;\n                  };\n                } else {\n                  var m = l / 2;\n                  p = function (e) {\n                    return m;\n                  };\n                }\n              else\n                p = function (e) {\n                  return e.size\n                    ? c.isArray(e.size)\n                      ? (e.size[0] > e.size[1] ? e.size[0] : e.size[1]) / 2\n                      : e.size / 2\n                    : 10;\n                };\n              this.nodeSize = p;\n              var b,\n                g = this.comboSpacing;\n              (b = c.isNumber(g)\n                ? function () {\n                    return g;\n                  }\n                : c.isFunction(g)\n                ? g\n                : function () {\n                    return 0;\n                  }),\n                (this.comboSpacing = b);\n              var x,\n                S = this.comboPadding;\n              (x = c.isNumber(S)\n                ? function () {\n                    return S;\n                  }\n                : c.isArray(S)\n                ? function () {\n                    return Math.max.apply(null, S);\n                  }\n                : c.isFunction(S)\n                ? S\n                : function () {\n                    return 0;\n                  }),\n                (this.comboPadding = x);\n              var M,\n                O = this.linkDistance;\n              O || (O = 10),\n                (M = c.isNumber(O)\n                  ? function (e) {\n                      return O;\n                    }\n                  : O),\n                (this.linkDistance = M);\n              var N,\n                C = this.edgeStrength;\n              C || (C = 1),\n                (N = c.isNumber(C)\n                  ? function (e) {\n                      return C;\n                    }\n                  : C),\n                (this.edgeStrength = N);\n              var E,\n                _ = this.nodeStrength;\n              _ || (_ = 30),\n                (E = c.isNumber(_)\n                  ? function (e) {\n                      return _;\n                    }\n                  : _),\n                (this.nodeStrength = E);\n            }),\n            (t.prototype.initPos = function (e) {\n              this.nodes.forEach(function (t, o) {\n                var r = t.comboId,\n                  n = e[r];\n                r && n\n                  ? ((t.x = n.cx + 100 / (o + 1)), (t.y = n.cy + 100 / (o + 1)))\n                  : ((t.x = 100 / (o + 1)), (t.y = 100 / (o + 1)));\n              });\n            }),\n            (t.prototype.getComboMap = function () {\n              var e = this,\n                t = e.nodeMap,\n                o = e.indexMap,\n                r = e.comboTrees,\n                n = e.oriComboMap,\n                i = {};\n              return (\n                (r || []).forEach(function (r) {\n                  var a = [];\n                  c.traverseTreeUp(r, function (r) {\n                    if (\"node\" === r.itemType) return !0;\n                    if (!n[r.id]) return !0;\n                    if (void 0 === i[r.id]) {\n                      var u = {\n                        id: r.id,\n                        name: r.id,\n                        cx: 0,\n                        cy: 0,\n                        count: 0,\n                        depth: e.oriComboMap[r.id].depth,\n                        children: [],\n                      };\n                      i[r.id] = u;\n                    }\n                    var s = r.children;\n                    s &&\n                      s.forEach(function (e) {\n                        if (!i[e.id] && !t[e.id]) return !0;\n                        a.push(e);\n                      });\n                    var f = i[r.id];\n                    if (((f.cx = 0), (f.cy = 0), 0 === a.length)) {\n                      f.empty = !0;\n                      var d = n[r.id],\n                        p = Object.keys(t).length,\n                        h = r.id + \"-visual-child-\" + p,\n                        l = {\n                          id: h,\n                          x: d.x,\n                          y: d.y,\n                          depth: f.depth + 1,\n                          itemType: \"node\",\n                        };\n                      e.nodes.push(l),\n                        (t[h] = l),\n                        (o[h] = p),\n                        (f.cx = d.x),\n                        (f.cy = d.y),\n                        a.push(l);\n                    }\n                    return (\n                      a.forEach(function (e) {\n                        if ((f.count++, \"node\" !== e.itemType)) {\n                          var o = i[e.id];\n                          return (\n                            c.isNumber(o.cx) && (f.cx += o.cx),\n                            void (c.isNumber(o.cy) && (f.cy += o.cy))\n                          );\n                        }\n                        var r = t[e.id];\n                        r &&\n                          (c.isNumber(r.x) && (f.cx += r.x),\n                          c.isNumber(r.y) && (f.cy += r.y));\n                      }),\n                      (f.cx /= f.count),\n                      (f.cy /= f.count),\n                      (f.children = a),\n                      !0\n                    );\n                  });\n                }),\n                i\n              );\n            }),\n            (t.prototype.applyComboCenterForce = function (e) {\n              var t = this.gravity,\n                o = this.comboGravity || t,\n                r = this.alpha,\n                n = this.comboTrees,\n                i = this.indexMap,\n                a = this.nodeMap,\n                u = this.comboMap;\n              (n || []).forEach(function (t) {\n                c.traverseTreeUp(t, function (t) {\n                  if (\"node\" === t.itemType) return !0;\n                  if (!u[t.id]) return !0;\n                  var n = u[t.id],\n                    s = ((n.depth + 1) / 10) * 0.5,\n                    f = n.cx,\n                    d = n.cy;\n                  return (\n                    (n.cx = 0),\n                    (n.cy = 0),\n                    n.children.forEach(function (t) {\n                      if (\"node\" !== t.itemType) {\n                        var p = u[t.id];\n                        return (\n                          p && c.isNumber(p.cx) && (n.cx += p.cx),\n                          void (p && c.isNumber(p.cy) && (n.cy += p.cy))\n                        );\n                      }\n                      var h = a[t.id],\n                        l = h.x - f || 0.005,\n                        y = h.y - d || 0.005,\n                        v = Math.sqrt(l * l + y * y),\n                        m = i[h.id],\n                        b = ((o * r) / v) * s;\n                      (e[m].x -= l * b),\n                        (e[m].y -= y * b),\n                        c.isNumber(h.x) && (n.cx += h.x),\n                        c.isNumber(h.y) && (n.cy += h.y);\n                    }),\n                    (n.cx /= n.count),\n                    (n.cy /= n.count),\n                    !0\n                  );\n                });\n              });\n            }),\n            (t.prototype.applyCalculate = function (e) {\n              var t = this.comboMap,\n                o = this.nodes,\n                r = {};\n              o.forEach(function (e, t) {\n                o.forEach(function (o, n) {\n                  if (!(t < n)) {\n                    var i = e.x - o.x || 0.005,\n                      c = e.y - o.y || 0.005,\n                      a = i * i + c * c,\n                      u = Math.sqrt(a);\n                    a < 1 && (a = u),\n                      (r[e.id + \"-\" + o.id] = { vx: i, vy: c, vl2: a, vl: u }),\n                      (r[o.id + \"-\" + e.id] = {\n                        vl2: a,\n                        vl: u,\n                        vx: -i,\n                        vy: -c,\n                      });\n                  }\n                });\n              }),\n                this.updateComboSizes(t),\n                this.calRepulsive(e, r),\n                this.calAttractive(e, r),\n                this.preventComboOverlap && this.comboNonOverlapping(e, t);\n            }),\n            (t.prototype.updateComboSizes = function (e) {\n              var t = this,\n                o = t.comboTrees,\n                r = t.nodeMap,\n                n = t.nodeSize,\n                i = t.comboSpacing,\n                a = t.comboPadding;\n              (o || []).forEach(function (o) {\n                var u = [];\n                c.traverseTreeUp(o, function (o) {\n                  if (\"node\" === o.itemType) return !0;\n                  var s = e[o.id];\n                  if (!s) return !1;\n                  var f = o.children;\n                  f &&\n                    f.forEach(function (t) {\n                      (e[t.id] || r[t.id]) && u.push(t);\n                    }),\n                    (s.minX = 1 / 0),\n                    (s.minY = 1 / 0),\n                    (s.maxX = -1 / 0),\n                    (s.maxY = -1 / 0),\n                    u.forEach(function (e) {\n                      if (\"node\" !== e.itemType) return !0;\n                      var t = r[e.id];\n                      if (!t) return !0;\n                      var o = n(t),\n                        i = t.x - o,\n                        c = t.y - o,\n                        a = t.x + o,\n                        u = t.y + o;\n                      s.minX > i && (s.minX = i),\n                        s.minY > c && (s.minY = c),\n                        s.maxX < a && (s.maxX = a),\n                        s.maxY < u && (s.maxY = u);\n                    });\n                  var d = t.oriComboMap[o.id].size || 10;\n                  c.isArray(d) && (d = d[0]);\n                  var p = Math.max(s.maxX - s.minX, s.maxY - s.minY, d);\n                  return (s.r = p / 2 + i(s) / 2 + a(s)), !0;\n                });\n              });\n            }),\n            (t.prototype.comboNonOverlapping = function (e, t) {\n              var o = this.comboTree,\n                r = this.comboCollideStrength,\n                n = this.indexMap,\n                i = this.nodeMap;\n              c.traverseTreeUp(o, function (o) {\n                if (!t[o.id] && !i[o.id] && \"comboTreeRoot\" !== o.id) return !1;\n                var c = o.children;\n                return (\n                  c &&\n                    c.length > 1 &&\n                    c.forEach(function (o, a) {\n                      if (\"node\" === o.itemType) return !1;\n                      var u = t[o.id];\n                      u &&\n                        c.forEach(function (c, s) {\n                          if (a <= s) return !1;\n                          if (\"node\" === c.itemType) return !1;\n                          var f = t[c.id];\n                          if (!f) return !1;\n                          var d = u.cx - f.cx || 0.005,\n                            p = u.cy - f.cy || 0.005,\n                            h = d * d + p * p,\n                            l = u.r,\n                            y = f.r,\n                            v = l + y,\n                            m = y * y,\n                            b = l * l;\n                          if (h < v * v) {\n                            var g = o.children;\n                            if (!g || 0 === g.length) return !1;\n                            var x = c.children;\n                            if (!x || 0 === x.length) return !1;\n                            var S = Math.sqrt(h),\n                              M = ((v - S) / S) * r,\n                              O = d * M,\n                              N = p * M,\n                              C = m / (b + m),\n                              E = 1 - C;\n                            g.forEach(function (t) {\n                              if (\"node\" !== t.itemType) return !1;\n                              if (i[t.id]) {\n                                var o = n[t.id];\n                                x.forEach(function (t) {\n                                  if (\"node\" !== t.itemType) return !1;\n                                  if (!i[t.id]) return !1;\n                                  var r = n[t.id];\n                                  (e[o].x += O * C),\n                                    (e[o].y += N * C),\n                                    (e[r].x -= O * E),\n                                    (e[r].y -= N * E);\n                                });\n                              }\n                            });\n                          }\n                        });\n                    }),\n                  !0\n                );\n              });\n            }),\n            (t.prototype.calRepulsive = function (e, t) {\n              var o = this,\n                r = o.nodes,\n                n = o.width * o.optimizeRangeFactor,\n                i = o.nodeStrength,\n                c = o.alpha,\n                a = o.nodeCollideStrength,\n                u = o.preventNodeOverlap,\n                s = o.nodeSize,\n                f = o.nodeSpacing,\n                d = o.depthRepulsiveForceScale,\n                p = o.center;\n              r.forEach(function (h, l) {\n                if (h.x && h.y) {\n                  if (p) {\n                    var y = o.gravity,\n                      v = h.x - p[0] || 0.005,\n                      m = h.y - p[1] || 0.005,\n                      b = Math.sqrt(v * v + m * m);\n                    (e[l].x -= (v * y * c) / b), (e[l].y -= (m * y * c) / b);\n                  }\n                  r.forEach(function (o, r) {\n                    if (l !== r && o.x && o.y) {\n                      var p = t[h.id + \"-\" + o.id],\n                        y = p.vl2,\n                        v = p.vl;\n                      if (!(v > n)) {\n                        var m = t[h.id + \"-\" + o.id],\n                          b = m.vx,\n                          g = m.vy,\n                          x =\n                            Math.log(Math.abs(o.depth - h.depth) / 10) + 1 || 1;\n                        (x = x < 1 ? 1 : x),\n                          o.comboId !== h.comboId && (x += 1);\n                        var S = x ? Math.pow(d, x) : 1,\n                          M = ((i(o) * c) / y) * S;\n                        if (\n                          ((e[l].x += b * M), (e[l].y += g * M), l < r && u)\n                        ) {\n                          var O = s(h) + f(h),\n                            N = s(o) + f(o),\n                            C = O + N;\n                          if (y < C * C) {\n                            var E = ((C - v) / v) * a,\n                              _ = N * N,\n                              j = _ / (O * O + _),\n                              T = b * E,\n                              w = g * E;\n                            (e[l].x += T * j),\n                              (e[l].y += w * j),\n                              (j = 1 - j),\n                              (e[r].x -= T * j),\n                              (e[r].y -= w * j);\n                          }\n                        }\n                      }\n                    }\n                  });\n                }\n              });\n            }),\n            (t.prototype.calAttractive = function (e, t) {\n              var o = this,\n                r = o.edges,\n                n = o.linkDistance,\n                i = o.alpha,\n                a = o.edgeStrength,\n                u = o.bias,\n                s = o.depthAttractiveForceScale;\n              r.forEach(function (r, f) {\n                if (r.source && r.target && r.source !== r.target) {\n                  var d = o.indexMap[r.source],\n                    p = o.indexMap[r.target],\n                    h = o.nodeMap[r.source],\n                    l = o.nodeMap[r.target];\n                  if (h && l) {\n                    var y = Math.log(Math.abs(h.depth - l.depth) / 10);\n                    h.comboId === l.comboId && (y /= 2);\n                    var v = y ? Math.pow(s, y) : 1;\n                    if (\n                      (h.comboId !== l.comboId && 1 === v\n                        ? (v = s / 2)\n                        : h.comboId === l.comboId && (v = 2),\n                      c.isNumber(l.x) &&\n                        c.isNumber(h.x) &&\n                        c.isNumber(l.y) &&\n                        c.isNumber(h.y))\n                    ) {\n                      var m = t[r.target + \"-\" + r.source],\n                        b = m.vl,\n                        g = m.vx,\n                        x = m.vy,\n                        S = ((b - n(r)) / b) * i * a(r) * v,\n                        M = g * S,\n                        O = x * S,\n                        N = u[f];\n                      (e[p].x -= M * N),\n                        (e[p].y -= O * N),\n                        (e[d].x += M * (1 - N)),\n                        (e[d].y += O * (1 - N));\n                    }\n                  }\n                }\n              });\n            }),\n            (t.prototype.getType = function () {\n              return \"comboForce\";\n            }),\n            t\n          );\n        })(i.Base);\n      t.ComboForceLayout = a;\n    },\n    216: function (e, t, o) {\n      \"use strict\";\n      o.r(t);\n      var r = o(172);\n      t.default = r.ComboForceLayout;\n    },\n    7: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=comboForceLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/concentricLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.f6 = t())\n    : (e.f6 = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function n(r) {\n      if (t[r]) return t[r].exports;\n      var o = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = e),\n      (n.c = t),\n      (n.d = function (e, t, r) {\n        n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (n.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (e, t) {\n        if ((1 & t && (e = n(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var o in e)\n            n.d(\n              r,\n              o,\n              function (t) {\n                return e[t];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return n.d(t, \"a\", t), t;\n      }),\n      (n.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (n.p = \"\"),\n      n((n.s = 217))\n    );\n  })({\n    10: function (e, t, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[n];\n                    },\n                  });\n              }\n            : function (e, t, n, r) {\n                void 0 === r && (r = n), (e[r] = t[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var n in e)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(t, n) ||\n                r(t, e, n);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        o(n(11), t),\n        o(n(12), t),\n        o(n(13), t),\n        o(n(14), t),\n        o(n(15), t),\n        o(n(16), t);\n    },\n    11: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (e) {\n          return o[e] || (o[e] = r(e));\n        });\n    },\n    12: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var n = parseFloat(e);\n        return t.isNaN(n) ? e : n;\n      };\n    },\n    14: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, n) {\n        for (var r = [], o = 0; o < e; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], n = e.length, r = 0; r < n; r += 1) {\n          t[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (t[r][o] = 0)\n              : 0 !== e[r][o] && e[r][o]\n              ? (t[r][o] = e[r][o])\n              : (t[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              t[r][o] > t[r][i] + t[i][o] && (t[r][o] = t[r][i] + t[i][o]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var n = e.nodes,\n          r = e.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (e, t) {\n              i[e.id] = t;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var n = e.source,\n                r = e.target,\n                u = i[n],\n                c = i[r];\n              (o[u][c] = 1), t || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var n = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, n) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], n)) return;\n            return !!n(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, n) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (e) {\n              for (var t, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (t = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var n = [];\n          return (\n            e.forEach(function (e) {\n              n.push(e);\n            }),\n            n.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = o({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    173: function (e, t, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var n in t)\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((n.prototype = t.prototype), new n()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.ConcentricLayout = void 0);\n      var i = n(10),\n        u = (function (e) {\n          function t(t) {\n            var n = e.call(this) || this;\n            return (\n              (n.nodeSize = 30),\n              (n.minNodeSpacing = 10),\n              (n.preventOverlap = !1),\n              (n.equidistant = !1),\n              (n.startAngle = 1.5 * Math.PI),\n              (n.clockwise = !0),\n              (n.sortBy = \"degree\"),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.onLayoutEnd = function () {}),\n              n.updateCfg(t),\n              n\n            );\n          }\n          return (\n            o(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                nodeSize: 30,\n                minNodeSpacing: 10,\n                preventOverlap: !1,\n                sweep: void 0,\n                equidistant: !1,\n                startAngle: 1.5 * Math.PI,\n                clockwise: !0,\n                maxLevelDiff: void 0,\n                sortBy: \"degree\",\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this,\n                t = e.nodes,\n                n = e.edges,\n                r = t.length;\n              if (0 !== r) {\n                e.width ||\n                  \"undefined\" == typeof window ||\n                  (e.width = window.innerWidth),\n                  e.height ||\n                    \"undefined\" == typeof window ||\n                    (e.height = window.innerHeight),\n                  e.center || (e.center = [e.width / 2, e.height / 2]);\n                var o = e.center;\n                if (1 === r)\n                  return (\n                    (t[0].x = o[0]),\n                    (t[0].y = o[1]),\n                    void (e.onLayoutEnd && e.onLayoutEnd())\n                  );\n                var u,\n                  c = [];\n                (u = i.isArray(e.nodeSize)\n                  ? Math.max(e.nodeSize[0], e.nodeSize[1])\n                  : e.nodeSize),\n                  t.forEach(function (e) {\n                    c.push(e);\n                    var t = u;\n                    i.isArray(e.size)\n                      ? (t = Math.max(e.size[0], e.size[1]))\n                      : i.isNumber(e.size) && (t = e.size),\n                      (u = Math.max(u, t));\n                  }),\n                  (e.clockwise =\n                    void 0 !== e.counterclockwise\n                      ? !e.counterclockwise\n                      : e.clockwise);\n                var a = {},\n                  s = {};\n                if (\n                  (c.forEach(function (e, t) {\n                    (a[e.id] = e), (s[e.id] = t);\n                  }),\n                  !(\n                    (\"degree\" !== e.sortBy &&\n                      i.isString(e.sortBy) &&\n                      void 0 !== c[0][e.sortBy]) ||\n                    ((e.sortBy = \"degree\"), i.isNumber(t[0].degree))\n                  ))\n                ) {\n                  var f = i.getDegree(t.length, s, n);\n                  c.forEach(function (e, t) {\n                    e.degree = f[t];\n                  });\n                }\n                c.sort(function (t, n) {\n                  return n[e.sortBy] - t[e.sortBy];\n                }),\n                  (e.maxValueNode = c[0]),\n                  (e.maxLevelDiff =\n                    e.maxLevelDiff || e.maxValueNode[e.sortBy] / 4);\n                var d = [[]],\n                  l = d[0];\n                c.forEach(function (t) {\n                  if (l.length > 0) {\n                    var n = Math.abs(l[0][e.sortBy] - t[e.sortBy]);\n                    e.maxLevelDiff &&\n                      n >= e.maxLevelDiff &&\n                      ((l = []), d.push(l));\n                  }\n                  l.push(t);\n                });\n                var p = u + e.minNodeSpacing;\n                if (!e.preventOverlap) {\n                  var h = d.length > 0 && d[0].length > 1,\n                    y =\n                      (Math.min(e.width, e.height) / 2 - p) /\n                      (d.length + (h ? 1 : 0));\n                  p = Math.min(p, y);\n                }\n                var v = 0;\n                if (\n                  (d.forEach(function (t) {\n                    var n = e.sweep;\n                    void 0 === n &&\n                      (n = 2 * Math.PI - (2 * Math.PI) / t.length);\n                    var r = (t.dTheta = n / Math.max(1, t.length - 1));\n                    if (t.length > 1 && e.preventOverlap) {\n                      var o = Math.cos(r) - Math.cos(0),\n                        i = Math.sin(r) - Math.sin(0),\n                        u = Math.sqrt((p * p) / (o * o + i * i));\n                      v = Math.max(u, v);\n                    }\n                    (t.r = v), (v += p);\n                  }),\n                  e.equidistant)\n                ) {\n                  for (var g = 0, b = 0, m = 0; m < d.length; m++) {\n                    var _ = d[m].r - b;\n                    g = Math.max(g, _);\n                  }\n                  (b = 0),\n                    d.forEach(function (e, t) {\n                      0 === t && (b = e.r), (e.r = b), (b += g);\n                    });\n                }\n                return (\n                  d.forEach(function (t) {\n                    var n = t.dTheta,\n                      r = t.r;\n                    t.forEach(function (t, i) {\n                      var u = e.startAngle + (e.clockwise ? 1 : -1) * n * i;\n                      (t.x = o[0] + r * Math.cos(u)),\n                        (t.y = o[1] + r * Math.sin(u));\n                    });\n                  }),\n                  e.onLayoutEnd && e.onLayoutEnd(),\n                  { nodes: t, edges: n }\n                );\n              }\n              e.onLayoutEnd && e.onLayoutEnd();\n            }),\n            (t.prototype.getType = function () {\n              return \"concentric\";\n            }),\n            t\n          );\n        })(n(7).Base);\n      t.ConcentricLayout = u;\n    },\n    217: function (e, t, n) {\n      \"use strict\";\n      n.r(t);\n      var r = n(173);\n      t.default = r.ConcentricLayout;\n    },\n    7: function (e, t, n) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=concentricLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/dagreLayout.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.f6 = n())\n    : (t.f6 = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function e(r) {\n      if (n[r]) return n[r].exports;\n      var o = (n[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, e), (o.l = !0), o.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = n),\n      (e.d = function (t, n, r) {\n        e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: r });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, n) {\n        if ((1 & n && (t = e(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (e.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var o in t)\n            e.d(\n              r,\n              o,\n              function (n) {\n                return t[n];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (e.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(n, \"a\", n), n;\n      }),\n      (e.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (e.p = \"\"),\n      e((e.s = 218))\n    );\n  })([\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), (n.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      n.Base = r;\n    },\n    ,\n    function (t, n, e) {\n      var r;\n      try {\n        r = {\n          cloneDeep: e(335),\n          constant: e(95),\n          defaults: e(336),\n          each: e(131),\n          filter: e(134),\n          find: e(337),\n          flatten: e(161),\n          forEach: e(132),\n          forIn: e(344),\n          has: e(145),\n          isUndefined: e(146),\n          last: e(345),\n          map: e(147),\n          mapValues: e(346),\n          max: e(347),\n          merge: e(349),\n          min: e(355),\n          minBy: e(356),\n          now: e(357),\n          pick: e(358),\n          range: e(363),\n          reduce: e(149),\n          sortBy: e(366),\n          uniqueId: e(371),\n          values: e(154),\n          zipObject: e(372),\n        };\n      } catch (t) {}\n      r || (r = window._), (t.exports = r);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        o(e(11), n),\n        o(e(12), n),\n        o(e(13), n),\n        o(e(14), n),\n        o(e(15), n),\n        o(e(16), n);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.camelize = n.isString = void 0);\n      n.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      n.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, n) {\n            return n ? n.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isArray = void 0),\n        (n.isArray = Array.isArray);\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.toNumber = n.isNaN = n.isNumber = void 0);\n      n.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      n.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      n.toNumber = function (t) {\n        var e = parseFloat(t);\n        return n.isNaN(e) ? t : e;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.traverseTreeUp =\n          n.scaleMatrix =\n          n.getAdjMatrix =\n          n.floydWarshall =\n          n.getDegree =\n            void 0);\n      n.getDegree = function (t, n, e) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (r[n[t.source]] += 1),\n                t.target && (r[n[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      n.floydWarshall = function (t) {\n        for (var n = [], e = t.length, r = 0; r < e; r += 1) {\n          n[r] = [];\n          for (var o = 0; o < e; o += 1)\n            r === o\n              ? (n[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (n[r][o] = t[r][o])\n              : (n[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (r = 0; r < e; r += 1)\n            for (o = 0; o < e; o += 1)\n              n[r][o] > n[r][i] + n[i][o] && (n[r][o] = n[r][i] + n[i][o]);\n        return n;\n      };\n      n.getAdjMatrix = function (t, n) {\n        var e = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, n) {\n              i[t.id] = n;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var e = t.source,\n                r = t.target,\n                u = i[e],\n                c = i[r];\n              (o[u][c] = 1), n || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      n.scaleMatrix = function (t, n) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * n);\n            }),\n              e.push(r);\n          }),\n          e\n        );\n      };\n      n.traverseTreeUp = function (t, n) {\n        \"function\" == typeof n &&\n          (function t(n, e) {\n            if (n && n.children)\n              for (var r = n.children.length - 1; r >= 0; r--)\n                if (!t(n.children[r], e)) return;\n            return !!e(n);\n          })(t, n);\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var n, e = 1, r = arguments.length; e < r; e++)\n                for (var o in (n = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.clone = n.isObject = void 0);\n      n.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      n.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return n.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = n.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isFunction = void 0);\n      n.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    function (t, n) {\n      var e = Array.isArray;\n      t.exports = e;\n    },\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(23).Graph;\n      function i(t, n, e, o) {\n        var i;\n        do {\n          i = r.uniqueId(o);\n        } while (t.hasNode(i));\n        return (e.dummy = n), t.setNode(i, e), i;\n      }\n      function u(t) {\n        return r.max(\n          r.map(t.nodes(), function (n) {\n            var e = t.node(n).rank;\n            if (!r.isUndefined(e)) return e;\n          }),\n        );\n      }\n      t.exports = {\n        addDummyNode: i,\n        simplify: function (t) {\n          var n = new o().setGraph(t.graph());\n          return (\n            r.forEach(t.nodes(), function (e) {\n              n.setNode(e, t.node(e));\n            }),\n            r.forEach(t.edges(), function (e) {\n              var r = n.edge(e.v, e.w) || { weight: 0, minlen: 1 },\n                o = t.edge(e);\n              n.setEdge(e.v, e.w, {\n                weight: r.weight + o.weight,\n                minlen: Math.max(r.minlen, o.minlen),\n              });\n            }),\n            n\n          );\n        },\n        asNonCompoundGraph: function (t) {\n          var n = new o({ multigraph: t.isMultigraph() }).setGraph(t.graph());\n          return (\n            r.forEach(t.nodes(), function (e) {\n              t.children(e).length || n.setNode(e, t.node(e));\n            }),\n            r.forEach(t.edges(), function (e) {\n              n.setEdge(e, t.edge(e));\n            }),\n            n\n          );\n        },\n        successorWeights: function (t) {\n          var n = r.map(t.nodes(), function (n) {\n            var e = {};\n            return (\n              r.forEach(t.outEdges(n), function (n) {\n                e[n.w] = (e[n.w] || 0) + t.edge(n).weight;\n              }),\n              e\n            );\n          });\n          return r.zipObject(t.nodes(), n);\n        },\n        predecessorWeights: function (t) {\n          var n = r.map(t.nodes(), function (n) {\n            var e = {};\n            return (\n              r.forEach(t.inEdges(n), function (n) {\n                e[n.v] = (e[n.v] || 0) + t.edge(n).weight;\n              }),\n              e\n            );\n          });\n          return r.zipObject(t.nodes(), n);\n        },\n        intersectRect: function (t, n) {\n          var e,\n            r,\n            o = t.x,\n            i = t.y,\n            u = n.x - o,\n            c = n.y - i,\n            a = t.width / 2,\n            f = t.height / 2;\n          if (!u && !c)\n            throw new Error(\n              \"Not possible to find intersection inside of the rectangle\",\n            );\n          Math.abs(c) * a > Math.abs(u) * f\n            ? (c < 0 && (f = -f), (e = (f * u) / c), (r = f))\n            : (u < 0 && (a = -a), (e = a), (r = (a * c) / u));\n          return { x: o + e, y: i + r };\n        },\n        buildLayerMatrix: function (t) {\n          var n = r.map(r.range(u(t) + 1), function () {\n            return [];\n          });\n          return (\n            r.forEach(t.nodes(), function (e) {\n              var o = t.node(e),\n                i = o.rank;\n              r.isUndefined(i) || (n[i][o.order] = e);\n            }),\n            n\n          );\n        },\n        normalizeRanks: function (t) {\n          var n = r.min(\n            r.map(t.nodes(), function (n) {\n              return t.node(n).rank;\n            }),\n          );\n          r.forEach(t.nodes(), function (e) {\n            var o = t.node(e);\n            r.has(o, \"rank\") && (o.rank -= n);\n          });\n        },\n        removeEmptyRanks: function (t) {\n          var n = r.min(\n              r.map(t.nodes(), function (n) {\n                return t.node(n).rank;\n              }),\n            ),\n            e = [];\n          r.forEach(t.nodes(), function (r) {\n            var o = t.node(r).rank - n;\n            e[o] || (e[o] = []), e[o].push(r);\n          });\n          var o = 0,\n            i = t.graph().nodeRankFactor;\n          r.forEach(e, function (n, e) {\n            r.isUndefined(n) && e % i != 0\n              ? --o\n              : o &&\n                r.forEach(n, function (n) {\n                  t.node(n).rank += o;\n                });\n          });\n        },\n        addBorderNode: function (t, n, e, r) {\n          var o = { width: 0, height: 0 };\n          arguments.length >= 4 && ((o.rank = e), (o.order = r));\n          return i(t, \"border\", o, n);\n        },\n        maxRank: u,\n        partition: function (t, n) {\n          var e = { lhs: [], rhs: [] };\n          return (\n            r.forEach(t, function (t) {\n              n(t) ? e.lhs.push(t) : e.rhs.push(t);\n            }),\n            e\n          );\n        },\n        time: function (t, n) {\n          var e = r.now();\n          try {\n            return n();\n          } finally {\n            console.log(t + \" time: \" + (r.now() - e) + \"ms\");\n          }\n        },\n        notime: function (t, n) {\n          return n();\n        },\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r;\n      try {\n        r = {\n          clone: e(222),\n          constant: e(95),\n          each: e(131),\n          filter: e(134),\n          has: e(145),\n          isArray: e(17),\n          isEmpty: e(299),\n          isFunction: e(51),\n          isUndefined: e(146),\n          keys: e(33),\n          map: e(147),\n          reduce: e(149),\n          size: e(302),\n          transform: e(308),\n          union: e(309),\n          values: e(154),\n        };\n      } catch (t) {}\n      r || (r = window._), (t.exports = r);\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        var n = e(t);\n        return null != t && (\"object\" == n || \"function\" == n);\n      };\n    },\n    function (t, n, e) {\n      var r;\n      try {\n        r = e(220);\n      } catch (t) {}\n      r || (r = window.graphlib), (t.exports = r);\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(114),\n        i =\n          \"object\" == (\"undefined\" == typeof self ? \"undefined\" : r(self)) &&\n          self &&\n          self.Object === Object &&\n          self,\n        u = o || i || Function(\"return this\")();\n      t.exports = u;\n    },\n    ,\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        return null != t && \"object\" == e(t);\n      };\n    },\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(51),\n        o = e(89);\n      t.exports = function (t) {\n        return null != t && o(t.length) && !r(t);\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(279),\n        i = e(289),\n        u = e(38),\n        c = e(17),\n        a = e(296);\n      t.exports = function (t) {\n        return \"function\" == typeof t\n          ? t\n          : null == t\n          ? u\n          : \"object\" == r(t)\n          ? c(t)\n            ? i(t[0], t[1])\n            : o(t)\n          : a(t);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r = e(117),\n        o = e(91),\n        i = e(30);\n      t.exports = function (t) {\n        return i(t) ? r(t) : o(t);\n      };\n    },\n    ,\n    function (t, n, e) {\n      var r = e(233),\n        o = e(239);\n      t.exports = function (t, n) {\n        var e = o(t, n);\n        return r(e) ? e : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(235),\n        i = e(236),\n        u = r ? r.toStringTag : void 0;\n      t.exports = function (t) {\n        return null == t\n          ? void 0 === t\n            ? \"[object Undefined]\"\n            : \"[object Null]\"\n          : u && u in Object(t)\n          ? o(t)\n          : i(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(117),\n        o = e(259),\n        i = e(30);\n      t.exports = function (t) {\n        return i(t) ? r(t, !0) : o(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return t;\n      };\n    },\n    ,\n    ,\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t === n || (t != t && n != n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(24).Symbol;\n      t.exports = r;\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(24),\n          i = e(255),\n          u = \"object\" == r(n) && n && !n.nodeType && n,\n          c = u && \"object\" == r(t) && t && !t.nodeType && t,\n          a = c && c.exports === u ? o.Buffer : void 0,\n          f = (a ? a.isBuffer : void 0) || i;\n        t.exports = f;\n      }).call(this, e(50)(t));\n    },\n    function (t, n, e) {\n      var r = e(264),\n        o = e(86),\n        i = e(265),\n        u = e(126),\n        c = e(266),\n        a = e(36),\n        f = e(115),\n        s = f(r),\n        p = f(o),\n        d = f(i),\n        h = f(u),\n        l = f(c),\n        v = a;\n      ((r && \"[object DataView]\" != v(new r(new ArrayBuffer(1)))) ||\n        (o && \"[object Map]\" != v(new o())) ||\n        (i && \"[object Promise]\" != v(i.resolve())) ||\n        (u && \"[object Set]\" != v(new u())) ||\n        (c && \"[object WeakMap]\" != v(new c()))) &&\n        (v = function (t) {\n          var n = a(t),\n            e = \"[object Object]\" == n ? t.constructor : void 0,\n            r = e ? f(e) : \"\";\n          if (r)\n            switch (r) {\n              case s:\n                return \"[object DataView]\";\n              case p:\n                return \"[object Map]\";\n              case d:\n                return \"[object Promise]\";\n              case h:\n                return \"[object Set]\";\n              case l:\n                return \"[object WeakMap]\";\n            }\n          return n;\n        }),\n        (t.exports = v);\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(36),\n        i = e(26);\n      t.exports = function (t) {\n        return \"symbol\" == r(t) || (i(t) && \"[object Symbol]\" == o(t));\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    function (t, n) {\n      t.exports = function (t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function () {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function () {\n                return t.l;\n              },\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function () {\n                return t.i;\n              },\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(22);\n      t.exports = function (t) {\n        if (!o(t)) return !1;\n        var n = r(t);\n        return (\n          \"[object Function]\" == n ||\n          \"[object GeneratorFunction]\" == n ||\n          \"[object AsyncFunction]\" == n ||\n          \"[object Proxy]\" == n\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(64);\n      t.exports = function (t, n, e, i) {\n        var u = !e;\n        e || (e = {});\n        for (var c = -1, a = n.length; ++c < a; ) {\n          var f = n[c],\n            s = i ? i(e[f], t[f], f, e, t) : void 0;\n          void 0 === s && (s = t[f]), u ? o(e, f, s) : r(e, f, s);\n        }\n        return e;\n      };\n    },\n    function (t, n, e) {\n      var r = e(254),\n        o = e(26),\n        i = Object.prototype,\n        u = i.hasOwnProperty,\n        c = i.propertyIsEnumerable,\n        a = r(\n          (function () {\n            return arguments;\n          })(),\n        )\n          ? r\n          : function (t) {\n              return o(t) && u.call(t, \"callee\") && !c.call(t, \"callee\");\n            };\n      t.exports = a;\n    },\n    function (t, n, e) {\n      var r = e(256),\n        o = e(66),\n        i = e(90),\n        u = i && i.isTypedArray,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(45);\n      t.exports = function (t) {\n        if (\"string\" == typeof t || r(t)) return t;\n        var n = t + \"\";\n        return \"0\" == n && 1 / t == -1 / 0 ? \"-0\" : n;\n      };\n    },\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(59),\n        o = e(228),\n        i = e(229),\n        u = e(230),\n        c = e(231),\n        a = e(232);\n      function f(t) {\n        var n = (this.__data__ = new r(t));\n        this.size = n.size;\n      }\n      (f.prototype.clear = o),\n        (f.prototype.delete = i),\n        (f.prototype.get = u),\n        (f.prototype.has = c),\n        (f.prototype.set = a),\n        (t.exports = f);\n    },\n    function (t, n, e) {\n      var r = e(223),\n        o = e(224),\n        i = e(225),\n        u = e(226),\n        c = e(227);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n, e) {\n      var r = e(41);\n      t.exports = function (t, n) {\n        for (var e = t.length; e--; ) if (r(t[e][0], n)) return e;\n        return -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(35)(Object, \"create\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(248);\n      t.exports = function (t, n) {\n        var e = t.__data__;\n        return r(n) ? e[\"string\" == typeof n ? \"string\" : \"hash\"] : e.map;\n      };\n    },\n    function (t, n, e) {\n      var r = e(64),\n        o = e(41),\n        i = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e) {\n        var u = t[n];\n        (i.call(t, n) && o(u, e) && (void 0 !== e || n in t)) || r(t, n, e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(116);\n      t.exports = function (t, n, e) {\n        \"__proto__\" == n && r\n          ? r(t, n, {\n              configurable: !0,\n              enumerable: !0,\n              value: e,\n              writable: !0,\n            })\n          : (t[n] = e);\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r = /^(?:0|[1-9]\\d*)$/;\n      t.exports = function (t, n) {\n        var o = e(t);\n        return (\n          !!(n = null == n ? 9007199254740991 : n) &&\n          (\"number\" == o || (\"symbol\" != o && r.test(t))) &&\n          t > -1 &&\n          t % 1 == 0 &&\n          t < n\n        );\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n) {\n          return t(n);\n        };\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype;\n      t.exports = function (t) {\n        var n = t && t.constructor;\n        return t === ((\"function\" == typeof n && n.prototype) || e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(118)(Object.getPrototypeOf, Object);\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(96),\n        o = e(277)(r);\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(71),\n        o = e(55);\n      t.exports = function (t, n) {\n        for (var e = 0, i = (n = r(n, t)).length; null != t && e < i; )\n          t = t[o(n[e++])];\n        return e && e == i ? t : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(17),\n        o = e(99),\n        i = e(291),\n        u = e(141);\n      t.exports = function (t, n) {\n        return r(t) ? t : o(t, n) ? [t] : i(u(t));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = null == t ? 0 : t.length, o = Array(r); ++e < r; )\n          o[e] = n(t[e], e, t);\n        return o;\n      };\n    },\n    function (t, n, e) {\n      var r = e(38),\n        o = e(150),\n        i = e(151);\n      t.exports = function (t, n) {\n        return i(o(t, n, r), t + \"\");\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(41),\n        i = e(30),\n        u = e(65),\n        c = e(22);\n      t.exports = function (t, n, e) {\n        if (!c(e)) return !1;\n        var a = r(n);\n        return (\n          !!(\"number\" == a\n            ? i(e) && u(n, e.length)\n            : \"string\" == a && n in e) && o(e[n], t)\n        );\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      t.exports = {\n        longestPath: function (t) {\n          var n = {};\n          r.forEach(t.sources(), function e(o) {\n            var i = t.node(o);\n            if (r.has(n, o)) return i.rank;\n            n[o] = !0;\n            var u = r.min(\n              r.map(t.outEdges(o), function (n) {\n                return e(n.w) - t.edge(n).minlen;\n              }),\n            );\n            return (\n              (u !== Number.POSITIVE_INFINITY && null != u) || (u = 0),\n              (i.rank = u)\n            );\n          });\n        },\n        slack: function (t, n) {\n          return t.node(n.w).rank - t.node(n.v).rank - t.edge(n).minlen;\n        },\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(21);\n      t.exports = i;\n      function i(t) {\n        (this._isDirected = !o.has(t, \"directed\") || t.directed),\n          (this._isMultigraph = !!o.has(t, \"multigraph\") && t.multigraph),\n          (this._isCompound = !!o.has(t, \"compound\") && t.compound),\n          (this._label = void 0),\n          (this._defaultNodeLabelFn = o.constant(void 0)),\n          (this._defaultEdgeLabelFn = o.constant(void 0)),\n          (this._nodes = {}),\n          this._isCompound &&\n            ((this._parent = {}),\n            (this._children = {}),\n            (this._children[\"\\0\"] = {})),\n          (this._in = {}),\n          (this._preds = {}),\n          (this._out = {}),\n          (this._sucs = {}),\n          (this._edgeObjs = {}),\n          (this._edgeLabels = {});\n      }\n      function u(t, n) {\n        t[n] ? t[n]++ : (t[n] = 1);\n      }\n      function c(t, n) {\n        --t[n] || delete t[n];\n      }\n      function a(t, n, e, r) {\n        var i = \"\" + n,\n          u = \"\" + e;\n        if (!t && i > u) {\n          var c = i;\n          (i = u), (u = c);\n        }\n        return i + \"\u0001\" + u + \"\u0001\" + (o.isUndefined(r) ? \"\\0\" : r);\n      }\n      function f(t, n, e, r) {\n        var o = \"\" + n,\n          i = \"\" + e;\n        if (!t && o > i) {\n          var u = o;\n          (o = i), (i = u);\n        }\n        var c = { v: o, w: i };\n        return r && (c.name = r), c;\n      }\n      function s(t, n) {\n        return a(t, n.v, n.w, n.name);\n      }\n      (i.prototype._nodeCount = 0),\n        (i.prototype._edgeCount = 0),\n        (i.prototype.isDirected = function () {\n          return this._isDirected;\n        }),\n        (i.prototype.isMultigraph = function () {\n          return this._isMultigraph;\n        }),\n        (i.prototype.isCompound = function () {\n          return this._isCompound;\n        }),\n        (i.prototype.setGraph = function (t) {\n          return (this._label = t), this;\n        }),\n        (i.prototype.graph = function () {\n          return this._label;\n        }),\n        (i.prototype.setDefaultNodeLabel = function (t) {\n          return (\n            o.isFunction(t) || (t = o.constant(t)),\n            (this._defaultNodeLabelFn = t),\n            this\n          );\n        }),\n        (i.prototype.nodeCount = function () {\n          return this._nodeCount;\n        }),\n        (i.prototype.nodes = function () {\n          return o.keys(this._nodes);\n        }),\n        (i.prototype.sources = function () {\n          var t = this;\n          return o.filter(this.nodes(), function (n) {\n            return o.isEmpty(t._in[n]);\n          });\n        }),\n        (i.prototype.sinks = function () {\n          var t = this;\n          return o.filter(this.nodes(), function (n) {\n            return o.isEmpty(t._out[n]);\n          });\n        }),\n        (i.prototype.setNodes = function (t, n) {\n          var e = arguments,\n            r = this;\n          return (\n            o.each(t, function (t) {\n              e.length > 1 ? r.setNode(t, n) : r.setNode(t);\n            }),\n            this\n          );\n        }),\n        (i.prototype.setNode = function (t, n) {\n          return o.has(this._nodes, t)\n            ? (arguments.length > 1 && (this._nodes[t] = n), this)\n            : ((this._nodes[t] =\n                arguments.length > 1 ? n : this._defaultNodeLabelFn(t)),\n              this._isCompound &&\n                ((this._parent[t] = \"\\0\"),\n                (this._children[t] = {}),\n                (this._children[\"\\0\"][t] = !0)),\n              (this._in[t] = {}),\n              (this._preds[t] = {}),\n              (this._out[t] = {}),\n              (this._sucs[t] = {}),\n              ++this._nodeCount,\n              this);\n        }),\n        (i.prototype.node = function (t) {\n          return this._nodes[t];\n        }),\n        (i.prototype.hasNode = function (t) {\n          return o.has(this._nodes, t);\n        }),\n        (i.prototype.removeNode = function (t) {\n          var n = this;\n          if (o.has(this._nodes, t)) {\n            var e = function (t) {\n              n.removeEdge(n._edgeObjs[t]);\n            };\n            delete this._nodes[t],\n              this._isCompound &&\n                (this._removeFromParentsChildList(t),\n                delete this._parent[t],\n                o.each(this.children(t), function (t) {\n                  n.setParent(t);\n                }),\n                delete this._children[t]),\n              o.each(o.keys(this._in[t]), e),\n              delete this._in[t],\n              delete this._preds[t],\n              o.each(o.keys(this._out[t]), e),\n              delete this._out[t],\n              delete this._sucs[t],\n              --this._nodeCount;\n          }\n          return this;\n        }),\n        (i.prototype.setParent = function (t, n) {\n          if (!this._isCompound)\n            throw new Error(\"Cannot set parent in a non-compound graph\");\n          if (o.isUndefined(n)) n = \"\\0\";\n          else {\n            for (var e = (n += \"\"); !o.isUndefined(e); e = this.parent(e))\n              if (e === t)\n                throw new Error(\n                  \"Setting \" +\n                    n +\n                    \" as parent of \" +\n                    t +\n                    \" would create a cycle\",\n                );\n            this.setNode(n);\n          }\n          return (\n            this.setNode(t),\n            this._removeFromParentsChildList(t),\n            (this._parent[t] = n),\n            (this._children[n][t] = !0),\n            this\n          );\n        }),\n        (i.prototype._removeFromParentsChildList = function (t) {\n          delete this._children[this._parent[t]][t];\n        }),\n        (i.prototype.parent = function (t) {\n          if (this._isCompound) {\n            var n = this._parent[t];\n            if (\"\\0\" !== n) return n;\n          }\n        }),\n        (i.prototype.children = function (t) {\n          if ((o.isUndefined(t) && (t = \"\\0\"), this._isCompound)) {\n            var n = this._children[t];\n            if (n) return o.keys(n);\n          } else {\n            if (\"\\0\" === t) return this.nodes();\n            if (this.hasNode(t)) return [];\n          }\n        }),\n        (i.prototype.predecessors = function (t) {\n          var n = this._preds[t];\n          if (n) return o.keys(n);\n        }),\n        (i.prototype.successors = function (t) {\n          var n = this._sucs[t];\n          if (n) return o.keys(n);\n        }),\n        (i.prototype.neighbors = function (t) {\n          var n = this.predecessors(t);\n          if (n) return o.union(n, this.successors(t));\n        }),\n        (i.prototype.isLeaf = function (t) {\n          return (\n            0 ===\n            (this.isDirected() ? this.successors(t) : this.neighbors(t)).length\n          );\n        }),\n        (i.prototype.filterNodes = function (t) {\n          var n = new this.constructor({\n            directed: this._isDirected,\n            multigraph: this._isMultigraph,\n            compound: this._isCompound,\n          });\n          n.setGraph(this.graph());\n          var e = this;\n          o.each(this._nodes, function (e, r) {\n            t(r) && n.setNode(r, e);\n          }),\n            o.each(this._edgeObjs, function (t) {\n              n.hasNode(t.v) && n.hasNode(t.w) && n.setEdge(t, e.edge(t));\n            });\n          var r = {};\n          return (\n            this._isCompound &&\n              o.each(n.nodes(), function (t) {\n                n.setParent(\n                  t,\n                  (function t(o) {\n                    var i = e.parent(o);\n                    return void 0 === i || n.hasNode(i)\n                      ? ((r[o] = i), i)\n                      : i in r\n                      ? r[i]\n                      : t(i);\n                  })(t),\n                );\n              }),\n            n\n          );\n        }),\n        (i.prototype.setDefaultEdgeLabel = function (t) {\n          return (\n            o.isFunction(t) || (t = o.constant(t)),\n            (this._defaultEdgeLabelFn = t),\n            this\n          );\n        }),\n        (i.prototype.edgeCount = function () {\n          return this._edgeCount;\n        }),\n        (i.prototype.edges = function () {\n          return o.values(this._edgeObjs);\n        }),\n        (i.prototype.setPath = function (t, n) {\n          var e = this,\n            r = arguments;\n          return (\n            o.reduce(t, function (t, o) {\n              return r.length > 1 ? e.setEdge(t, o, n) : e.setEdge(t, o), o;\n            }),\n            this\n          );\n        }),\n        (i.prototype.setEdge = function () {\n          var t,\n            n,\n            e,\n            i,\n            c = !1,\n            s = arguments[0];\n          \"object\" === r(s) && null !== s && \"v\" in s\n            ? ((t = s.v),\n              (n = s.w),\n              (e = s.name),\n              2 === arguments.length && ((i = arguments[1]), (c = !0)))\n            : ((t = s),\n              (n = arguments[1]),\n              (e = arguments[3]),\n              arguments.length > 2 && ((i = arguments[2]), (c = !0))),\n            (t = \"\" + t),\n            (n = \"\" + n),\n            o.isUndefined(e) || (e = \"\" + e);\n          var p = a(this._isDirected, t, n, e);\n          if (o.has(this._edgeLabels, p))\n            return c && (this._edgeLabels[p] = i), this;\n          if (!o.isUndefined(e) && !this._isMultigraph)\n            throw new Error(\n              \"Cannot set a named edge when isMultigraph = false\",\n            );\n          this.setNode(t),\n            this.setNode(n),\n            (this._edgeLabels[p] = c ? i : this._defaultEdgeLabelFn(t, n, e));\n          var d = f(this._isDirected, t, n, e);\n          return (\n            (t = d.v),\n            (n = d.w),\n            Object.freeze(d),\n            (this._edgeObjs[p] = d),\n            u(this._preds[n], t),\n            u(this._sucs[t], n),\n            (this._in[n][p] = d),\n            (this._out[t][p] = d),\n            this._edgeCount++,\n            this\n          );\n        }),\n        (i.prototype.edge = function (t, n, e) {\n          var r =\n            1 === arguments.length\n              ? s(this._isDirected, arguments[0])\n              : a(this._isDirected, t, n, e);\n          return this._edgeLabels[r];\n        }),\n        (i.prototype.hasEdge = function (t, n, e) {\n          var r =\n            1 === arguments.length\n              ? s(this._isDirected, arguments[0])\n              : a(this._isDirected, t, n, e);\n          return o.has(this._edgeLabels, r);\n        }),\n        (i.prototype.removeEdge = function (t, n, e) {\n          var r =\n              1 === arguments.length\n                ? s(this._isDirected, arguments[0])\n                : a(this._isDirected, t, n, e),\n            o = this._edgeObjs[r];\n          return (\n            o &&\n              ((t = o.v),\n              (n = o.w),\n              delete this._edgeLabels[r],\n              delete this._edgeObjs[r],\n              c(this._preds[n], t),\n              c(this._sucs[t], n),\n              delete this._in[n][r],\n              delete this._out[t][r],\n              this._edgeCount--),\n            this\n          );\n        }),\n        (i.prototype.inEdges = function (t, n) {\n          var e = this._in[t];\n          if (e) {\n            var r = o.values(e);\n            return n\n              ? o.filter(r, function (t) {\n                  return t.v === n;\n                })\n              : r;\n          }\n        }),\n        (i.prototype.outEdges = function (t, n) {\n          var e = this._out[t];\n          if (e) {\n            var r = o.values(e);\n            return n\n              ? o.filter(r, function (t) {\n                  return t.w === n;\n                })\n              : r;\n          }\n        }),\n        (i.prototype.nodeEdges = function (t, n) {\n          var e = this.inEdges(t, n);\n          if (e) return e.concat(this.outEdges(t, n));\n        });\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"Map\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(240),\n        o = e(247),\n        i = e(249),\n        u = e(250),\n        c = e(251);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (\n          var e = -1, r = null == t ? 0 : t.length;\n          ++e < r && !1 !== n(t[e], e, t);\n\n        );\n        return t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return (\n          \"number\" == typeof t && t > -1 && t % 1 == 0 && t <= 9007199254740991\n        );\n      };\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(114),\n          i = \"object\" == r(n) && n && !n.nodeType && n,\n          u = i && \"object\" == r(t) && t && !t.nodeType && t,\n          c = u && u.exports === i && o.process,\n          a = (function () {\n            try {\n              var t = u && u.require && u.require(\"util\").types;\n              return t || (c && c.binding && c.binding(\"util\"));\n            } catch (t) {}\n          })();\n        t.exports = a;\n      }).call(this, e(50)(t));\n    },\n    function (t, n, e) {\n      var r = e(67),\n        o = e(257),\n        i = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (!r(t)) return o(t);\n        var n = [];\n        for (var e in Object(t))\n          i.call(t, e) && \"constructor\" != e && n.push(e);\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(121),\n        o = e(122),\n        i = Object.prototype.propertyIsEnumerable,\n        u = Object.getOwnPropertySymbols,\n        c = u\n          ? function (t) {\n              return null == t\n                ? []\n                : ((t = Object(t)),\n                  r(u(t), function (n) {\n                    return i.call(t, n);\n                  }));\n            }\n          : o;\n      t.exports = c;\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = n.length, o = t.length; ++e < r; ) t[o + e] = n[e];\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(127);\n      t.exports = function (t) {\n        var n = new t.constructor(t.byteLength);\n        return new r(n).set(new r(t)), n;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function () {\n          return t;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(97),\n        o = e(33);\n      t.exports = function (t, n) {\n        return t && r(t, n, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(276)();\n      t.exports = r;\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = -1,\n          e = Array(t.size);\n        return (\n          t.forEach(function (t) {\n            e[++n] = t;\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o = e(17),\n        i = e(45),\n        u = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n        c = /^\\w*$/;\n      t.exports = function (t, n) {\n        if (o(t)) return !1;\n        var e = r(t);\n        return (\n          !(\n            \"number\" != e &&\n            \"symbol\" != e &&\n            \"boolean\" != e &&\n            null != t &&\n            !i(t)\n          ) ||\n          c.test(t) ||\n          !u.test(t) ||\n          (null != n && t in Object(n))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(93),\n        o = e(310);\n      t.exports = function t(n, e, i, u, c) {\n        var a = -1,\n          f = n.length;\n        for (i || (i = o), c || (c = []); ++a < f; ) {\n          var s = n[a];\n          e > 0 && i(s)\n            ? e > 1\n              ? t(s, e - 1, i, u, c)\n              : r(c, s)\n            : u || (c[c.length] = s);\n        }\n        return c;\n      };\n    },\n    function (t, n, e) {\n      var r = e(45);\n      t.exports = function (t, n, e) {\n        for (var o = -1, i = t.length; ++o < i; ) {\n          var u = t[o],\n            c = n(u);\n          if (null != c && (void 0 === a ? c == c && !r(c) : e(c, a)))\n            var a = c,\n              f = u;\n        }\n        return f;\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      var r = e(58),\n        o = e(88),\n        i = e(63),\n        u = e(252),\n        c = e(258),\n        a = e(119),\n        f = e(120),\n        s = e(261),\n        p = e(262),\n        d = e(124),\n        h = e(263),\n        l = e(44),\n        v = e(267),\n        y = e(268),\n        g = e(129),\n        b = e(17),\n        m = e(43),\n        x = e(272),\n        _ = e(22),\n        w = e(274),\n        E = e(33),\n        j = e(37),\n        k = {};\n      (k[\"[object Arguments]\"] =\n        k[\"[object Array]\"] =\n        k[\"[object ArrayBuffer]\"] =\n        k[\"[object DataView]\"] =\n        k[\"[object Boolean]\"] =\n        k[\"[object Date]\"] =\n        k[\"[object Float32Array]\"] =\n        k[\"[object Float64Array]\"] =\n        k[\"[object Int8Array]\"] =\n        k[\"[object Int16Array]\"] =\n        k[\"[object Int32Array]\"] =\n        k[\"[object Map]\"] =\n        k[\"[object Number]\"] =\n        k[\"[object Object]\"] =\n        k[\"[object RegExp]\"] =\n        k[\"[object Set]\"] =\n        k[\"[object String]\"] =\n        k[\"[object Symbol]\"] =\n        k[\"[object Uint8Array]\"] =\n        k[\"[object Uint8ClampedArray]\"] =\n        k[\"[object Uint16Array]\"] =\n        k[\"[object Uint32Array]\"] =\n          !0),\n        (k[\"[object Error]\"] =\n          k[\"[object Function]\"] =\n          k[\"[object WeakMap]\"] =\n            !1),\n        (t.exports = function t(n, e, S, O, N, I) {\n          var P,\n            M = 1 & e,\n            C = 2 & e,\n            A = 4 & e;\n          if ((S && (P = N ? S(n, O, N, I) : S(n)), void 0 !== P)) return P;\n          if (!_(n)) return n;\n          var L = b(n);\n          if (L) {\n            if (((P = v(n)), !M)) return f(n, P);\n          } else {\n            var T = l(n),\n              z = \"[object Function]\" == T || \"[object GeneratorFunction]\" == T;\n            if (m(n)) return a(n, M);\n            if (\n              \"[object Object]\" == T ||\n              \"[object Arguments]\" == T ||\n              (z && !N)\n            ) {\n              if (((P = C || z ? {} : g(n)), !M))\n                return C ? p(n, c(P, n)) : s(n, u(P, n));\n            } else {\n              if (!k[T]) return N ? n : {};\n              P = y(n, T, M);\n            }\n          }\n          I || (I = new r());\n          var F = I.get(n);\n          if (F) return F;\n          I.set(n, P),\n            w(n)\n              ? n.forEach(function (r) {\n                  P.add(t(r, e, S, r, n, I));\n                })\n              : x(n) &&\n                n.forEach(function (r, o) {\n                  P.set(o, t(r, e, S, o, n, I));\n                });\n          var D = L ? void 0 : (A ? (C ? h : d) : C ? j : E)(n);\n          return (\n            o(D || n, function (r, o) {\n              D && (r = n[(o = r)]), i(P, o, t(r, e, S, o, n, I));\n            }),\n            P\n          );\n        });\n    },\n    function (t, n, e) {\n      (function (n) {\n        function e(t) {\n          return (e =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var r =\n          \"object\" == (void 0 === n ? \"undefined\" : e(n)) &&\n          n &&\n          n.Object === Object &&\n          n;\n        t.exports = r;\n      }).call(this, e(234));\n    },\n    function (t, n) {\n      var e = Function.prototype.toString;\n      t.exports = function (t) {\n        if (null != t) {\n          try {\n            return e.call(t);\n          } catch (t) {}\n          try {\n            return t + \"\";\n          } catch (t) {}\n        }\n        return \"\";\n      };\n    },\n    function (t, n, e) {\n      var r = e(35),\n        o = (function () {\n          try {\n            var t = r(Object, \"defineProperty\");\n            return t({}, \"\", {}), t;\n          } catch (t) {}\n        })();\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(253),\n        o = e(53),\n        i = e(17),\n        u = e(43),\n        c = e(65),\n        a = e(54),\n        f = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n) {\n        var e = i(t),\n          s = !e && o(t),\n          p = !e && !s && u(t),\n          d = !e && !s && !p && a(t),\n          h = e || s || p || d,\n          l = h ? r(t.length, String) : [],\n          v = l.length;\n        for (var y in t)\n          (!n && !f.call(t, y)) ||\n            (h &&\n              (\"length\" == y ||\n                (p && (\"offset\" == y || \"parent\" == y)) ||\n                (d &&\n                  (\"buffer\" == y || \"byteLength\" == y || \"byteOffset\" == y)) ||\n                c(y, v))) ||\n            l.push(y);\n        return l;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return function (e) {\n          return t(n(e));\n        };\n      };\n    },\n    function (t, n, e) {\n      (function (t) {\n        function r(t) {\n          return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n              ? function (t) {\n                  return typeof t;\n                }\n              : function (t) {\n                  return t &&\n                    \"function\" == typeof Symbol &&\n                    t.constructor === Symbol &&\n                    t !== Symbol.prototype\n                    ? \"symbol\"\n                    : typeof t;\n                })(t);\n        }\n        var o = e(24),\n          i = \"object\" == r(n) && n && !n.nodeType && n,\n          u = i && \"object\" == r(t) && t && !t.nodeType && t,\n          c = u && u.exports === i ? o.Buffer : void 0,\n          a = c ? c.allocUnsafe : void 0;\n        t.exports = function (t, n) {\n          if (n) return t.slice();\n          var e = t.length,\n            r = a ? a(e) : new t.constructor(e);\n          return t.copy(r), r;\n        };\n      }).call(this, e(50)(t));\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        var e = -1,\n          r = t.length;\n        for (n || (n = Array(r)); ++e < r; ) n[e] = t[e];\n        return n;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (\n          var e = -1, r = null == t ? 0 : t.length, o = 0, i = [];\n          ++e < r;\n\n        ) {\n          var u = t[e];\n          n(u, e, t) && (i[o++] = u);\n        }\n        return i;\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        return [];\n      };\n    },\n    function (t, n, e) {\n      var r = e(93),\n        o = e(68),\n        i = e(92),\n        u = e(122),\n        c = Object.getOwnPropertySymbols\n          ? function (t) {\n              for (var n = []; t; ) r(n, i(t)), (t = o(t));\n              return n;\n            }\n          : u;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(125),\n        o = e(92),\n        i = e(33);\n      t.exports = function (t) {\n        return r(t, i, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(93),\n        o = e(17);\n      t.exports = function (t, n, e) {\n        var i = n(t);\n        return o(t) ? i : r(i, e(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"Set\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(24).Uint8Array;\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(94);\n      t.exports = function (t, n) {\n        var e = n ? r(t.buffer) : t.buffer;\n        return new t.constructor(e, t.byteOffset, t.length);\n      };\n    },\n    function (t, n, e) {\n      var r = e(130),\n        o = e(68),\n        i = e(67);\n      t.exports = function (t) {\n        return \"function\" != typeof t.constructor || i(t) ? {} : r(o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(22),\n        o = Object.create,\n        i = (function () {\n          function t() {}\n          return function (n) {\n            if (!r(n)) return {};\n            if (o) return o(n);\n            t.prototype = n;\n            var e = new t();\n            return (t.prototype = void 0), e;\n          };\n        })();\n      t.exports = i;\n    },\n    function (t, n, e) {\n      t.exports = e(132);\n    },\n    function (t, n, e) {\n      var r = e(88),\n        o = e(69),\n        i = e(133),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : o)(t, i(n));\n      };\n    },\n    function (t, n, e) {\n      var r = e(38);\n      t.exports = function (t) {\n        return \"function\" == typeof t ? t : r;\n      };\n    },\n    function (t, n, e) {\n      var r = e(121),\n        o = e(278),\n        i = e(31),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : o)(t, i(n, 3));\n      };\n    },\n    function (t, n, e) {\n      var r = e(281),\n        o = e(26);\n      t.exports = function t(n, e, i, u, c) {\n        return (\n          n === e ||\n          (null == n || null == e || (!o(n) && !o(e))\n            ? n != n && e != e\n            : r(n, e, i, u, t, c))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(137),\n        o = e(284),\n        i = e(138);\n      t.exports = function (t, n, e, u, c, a) {\n        var f = 1 & e,\n          s = t.length,\n          p = n.length;\n        if (s != p && !(f && p > s)) return !1;\n        var d = a.get(t),\n          h = a.get(n);\n        if (d && h) return d == n && h == t;\n        var l = -1,\n          v = !0,\n          y = 2 & e ? new r() : void 0;\n        for (a.set(t, n), a.set(n, t); ++l < s; ) {\n          var g = t[l],\n            b = n[l];\n          if (u) var m = f ? u(b, g, l, n, t, a) : u(g, b, l, t, n, a);\n          if (void 0 !== m) {\n            if (m) continue;\n            v = !1;\n            break;\n          }\n          if (y) {\n            if (\n              !o(n, function (t, n) {\n                if (!i(y, n) && (g === t || c(g, t, e, u, a))) return y.push(n);\n              })\n            ) {\n              v = !1;\n              break;\n            }\n          } else if (g !== b && !c(g, b, e, u, a)) {\n            v = !1;\n            break;\n          }\n        }\n        return a.delete(t), a.delete(n), v;\n      };\n    },\n    function (t, n, e) {\n      var r = e(87),\n        o = e(282),\n        i = e(283);\n      function u(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.__data__ = new r(); ++n < e; ) this.add(t[n]);\n      }\n      (u.prototype.add = u.prototype.push = o),\n        (u.prototype.has = i),\n        (t.exports = u);\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t.has(n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(22);\n      t.exports = function (t) {\n        return t == t && !r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return function (e) {\n          return null != e && e[t] === n && (void 0 !== n || t in Object(e));\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(294);\n      t.exports = function (t) {\n        return null == t ? \"\" : r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(295),\n        o = e(143);\n      t.exports = function (t, n) {\n        return null != t && o(t, n, r);\n      };\n    },\n    function (t, n, e) {\n      var r = e(71),\n        o = e(53),\n        i = e(17),\n        u = e(65),\n        c = e(89),\n        a = e(55);\n      t.exports = function (t, n, e) {\n        for (var f = -1, s = (n = r(n, t)).length, p = !1; ++f < s; ) {\n          var d = a(n[f]);\n          if (!(p = null != t && e(t, d))) break;\n          t = t[d];\n        }\n        return p || ++f != s\n          ? p\n          : !!(s = null == t ? 0 : t.length) &&\n              c(s) &&\n              u(d, s) &&\n              (i(t) || o(t));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n) {\n          return null == n ? void 0 : n[t];\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(298),\n        o = e(143);\n      t.exports = function (t, n) {\n        return null != t && o(t, n, r);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return void 0 === t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(72),\n        o = e(31),\n        i = e(148),\n        u = e(17);\n      t.exports = function (t, n) {\n        return (u(t) ? r : i)(t, o(n, 3));\n      };\n    },\n    function (t, n, e) {\n      var r = e(69),\n        o = e(30);\n      t.exports = function (t, n) {\n        var e = -1,\n          i = o(t) ? Array(t.length) : [];\n        return (\n          r(t, function (t, r, o) {\n            i[++e] = n(t, r, o);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(300),\n        o = e(69),\n        i = e(31),\n        u = e(301),\n        c = e(17);\n      t.exports = function (t, n, e) {\n        var a = c(t) ? r : u,\n          f = arguments.length < 3;\n        return a(t, i(n, 4), e, f, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(311),\n        o = Math.max;\n      t.exports = function (t, n, e) {\n        return (\n          (n = o(void 0 === n ? t.length - 1 : n, 0)),\n          function () {\n            for (\n              var i = arguments, u = -1, c = o(i.length - n, 0), a = Array(c);\n              ++u < c;\n\n            )\n              a[u] = i[n + u];\n            u = -1;\n            for (var f = Array(n + 1); ++u < n; ) f[u] = i[u];\n            return (f[n] = e(a)), r(t, this, f);\n          }\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(312),\n        o = e(313)(r);\n      t.exports = o;\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r) {\n        for (var o = t.length, i = e + (r ? 1 : -1); r ? i-- : ++i < o; )\n          if (n(t[i], i, t)) return i;\n        return -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(30),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(322),\n        o = e(33);\n      t.exports = function (t) {\n        return null == t ? [] : r(t, o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(156);\n      t.exports = function (t, n, e, r) {\n        return (function (t, n, e, r) {\n          var i,\n            u,\n            c = {},\n            a = new o(),\n            f = function (t) {\n              var n = t.v !== i ? t.v : t.w,\n                r = c[n],\n                o = e(t),\n                f = u.distance + o;\n              if (o < 0)\n                throw new Error(\n                  \"dijkstra does not allow negative edge weights. Bad edge: \" +\n                    t +\n                    \" Weight: \" +\n                    o,\n                );\n              f < r.distance &&\n                ((r.distance = f), (r.predecessor = i), a.decrease(n, f));\n            };\n          t.nodes().forEach(function (t) {\n            var e = t === n ? 0 : Number.POSITIVE_INFINITY;\n            (c[t] = { distance: e }), a.add(t, e);\n          });\n          for (\n            ;\n            a.size() > 0 &&\n            ((i = a.removeMin()),\n            (u = c[i]).distance !== Number.POSITIVE_INFINITY);\n\n          )\n            r(i).forEach(f);\n          return c;\n        })(\n          t,\n          String(n),\n          e || i,\n          r ||\n            function (n) {\n              return t.outEdges(n);\n            },\n        );\n      };\n      var i = r.constant(1);\n    },\n    function (t, n, e) {\n      var r = e(21);\n      function o() {\n        (this._arr = []), (this._keyIndices = {});\n      }\n      (t.exports = o),\n        (o.prototype.size = function () {\n          return this._arr.length;\n        }),\n        (o.prototype.keys = function () {\n          return this._arr.map(function (t) {\n            return t.key;\n          });\n        }),\n        (o.prototype.has = function (t) {\n          return r.has(this._keyIndices, t);\n        }),\n        (o.prototype.priority = function (t) {\n          var n = this._keyIndices[t];\n          if (void 0 !== n) return this._arr[n].priority;\n        }),\n        (o.prototype.min = function () {\n          if (0 === this.size()) throw new Error(\"Queue underflow\");\n          return this._arr[0].key;\n        }),\n        (o.prototype.add = function (t, n) {\n          var e = this._keyIndices;\n          if (((t = String(t)), !r.has(e, t))) {\n            var o = this._arr,\n              i = o.length;\n            return (\n              (e[t] = i), o.push({ key: t, priority: n }), this._decrease(i), !0\n            );\n          }\n          return !1;\n        }),\n        (o.prototype.removeMin = function () {\n          this._swap(0, this._arr.length - 1);\n          var t = this._arr.pop();\n          return delete this._keyIndices[t.key], this._heapify(0), t.key;\n        }),\n        (o.prototype.decrease = function (t, n) {\n          var e = this._keyIndices[t];\n          if (n > this._arr[e].priority)\n            throw new Error(\n              \"New priority is greater than current priority. Key: \" +\n                t +\n                \" Old: \" +\n                this._arr[e].priority +\n                \" New: \" +\n                n,\n            );\n          (this._arr[e].priority = n), this._decrease(e);\n        }),\n        (o.prototype._heapify = function (t) {\n          var n = this._arr,\n            e = 2 * t,\n            r = e + 1,\n            o = t;\n          e < n.length &&\n            ((o = n[e].priority < n[o].priority ? e : o),\n            r < n.length && (o = n[r].priority < n[o].priority ? r : o),\n            o !== t && (this._swap(t, o), this._heapify(o)));\n        }),\n        (o.prototype._decrease = function (t) {\n          for (\n            var n, e = this._arr, r = e[t].priority;\n            0 !== t && !(e[(n = t >> 1)].priority < r);\n\n          )\n            this._swap(t, n), (t = n);\n        }),\n        (o.prototype._swap = function (t, n) {\n          var e = this._arr,\n            r = this._keyIndices,\n            o = e[t],\n            i = e[n];\n          (e[t] = i), (e[n] = o), (r[i.key] = t), (r[o.key] = n);\n        });\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t) {\n        var n = 0,\n          e = [],\n          o = {},\n          i = [];\n        return (\n          t.nodes().forEach(function (u) {\n            r.has(o, u) ||\n              (function u(c) {\n                var a = (o[c] = { onStack: !0, lowlink: n, index: n++ });\n                if (\n                  (e.push(c),\n                  t.successors(c).forEach(function (t) {\n                    r.has(o, t)\n                      ? o[t].onStack &&\n                        (a.lowlink = Math.min(a.lowlink, o[t].index))\n                      : (u(t), (a.lowlink = Math.min(a.lowlink, o[t].lowlink)));\n                  }),\n                  a.lowlink === a.index)\n                ) {\n                  var f,\n                    s = [];\n                  do {\n                    (f = e.pop()), (o[f].onStack = !1), s.push(f);\n                  } while (c !== f);\n                  i.push(s);\n                }\n              })(u);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      function o(t) {\n        var n = {},\n          e = {},\n          o = [];\n        if (\n          (r.each(t.sinks(), function u(c) {\n            if (r.has(e, c)) throw new i();\n            r.has(n, c) ||\n              ((e[c] = !0),\n              (n[c] = !0),\n              r.each(t.predecessors(c), u),\n              delete e[c],\n              o.push(c));\n          }),\n          r.size(n) !== t.nodeCount())\n        )\n          throw new i();\n        return o;\n      }\n      function i() {}\n      (t.exports = o), (o.CycleException = i), (i.prototype = new Error());\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t, n, e) {\n        r.isArray(n) || (n = [n]);\n        var o = (t.isDirected() ? t.successors : t.neighbors).bind(t),\n          i = [],\n          u = {};\n        return (\n          r.each(n, function (n) {\n            if (!t.hasNode(n))\n              throw new Error(\"Graph does not have node: \" + n);\n            !(function t(n, e, o, i, u, c) {\n              r.has(i, e) ||\n                ((i[e] = !0),\n                o || c.push(e),\n                r.each(u(e), function (e) {\n                  t(n, e, o, i, u, c);\n                }),\n                o && c.push(e));\n            })(t, n, \"post\" === e, u, o, i);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(341);\n      t.exports = function (t) {\n        return t\n          ? (t = r(t)) === 1 / 0 || t === -1 / 0\n            ? 17976931348623157e292 * (t < 0 ? -1 : 1)\n            : t == t\n            ? t\n            : 0\n          : 0 === t\n          ? t\n          : 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(100);\n      t.exports = function (t) {\n        return (null == t ? 0 : t.length) ? r(t, 1) : [];\n      };\n    },\n    function (t, n, e) {\n      var r = e(64),\n        o = e(41);\n      t.exports = function (t, n, e) {\n        ((void 0 !== e && !o(t[n], e)) || (void 0 === e && !(n in t))) &&\n          r(t, n, e);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        if (\n          (\"constructor\" !== n || \"function\" != typeof t[n]) &&\n          \"__proto__\" != n\n        )\n          return t[n];\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t < n;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(23).Graph,\n        i = e(75).slack;\n      function u(t, n) {\n        return (\n          r.forEach(t.nodes(), function e(o) {\n            r.forEach(n.nodeEdges(o), function (r) {\n              var u = r.v,\n                c = o === u ? r.w : u;\n              t.hasNode(c) ||\n                i(n, r) ||\n                (t.setNode(c, {}), t.setEdge(o, c, {}), e(c));\n            });\n          }),\n          t.nodeCount()\n        );\n      }\n      function c(t, n) {\n        return r.minBy(n.edges(), function (e) {\n          if (t.hasNode(e.v) !== t.hasNode(e.w)) return i(n, e);\n        });\n      }\n      function a(t, n, e) {\n        r.forEach(t.nodes(), function (t) {\n          n.node(t).rank += e;\n        });\n      }\n      t.exports = function (t) {\n        var n,\n          e,\n          r = new o({ directed: !1 }),\n          f = t.nodes()[0],\n          s = t.nodeCount();\n        r.setNode(f, {});\n        for (; u(r, t) < s; )\n          (n = c(r, t)), (e = r.hasNode(n.v) ? i(t, n) : -i(t, n)), a(r, t, e);\n        return r;\n      };\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, n) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, n) {\n                  t.__proto__ = n;\n                }) ||\n              function (t, n) {\n                for (var e in n)\n                  Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);\n              })(t, n);\n          }),\n          function (t, n) {\n            if (\"function\" != typeof n && null !== n)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(n) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            r(t, n),\n              (t.prototype =\n                null === n\n                  ? Object.create(n)\n                  : ((e.prototype = n.prototype), new e()));\n          }),\n        i =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.DagreLayout = void 0);\n      var u = i(e(219)),\n        c = e(10),\n        a = (function (t) {\n          function n(n) {\n            var e = t.call(this) || this;\n            return (\n              (e.rankdir = \"TB\"),\n              (e.nodesep = 50),\n              (e.ranksep = 50),\n              (e.controlPoints = !1),\n              (e.sortByCombo = !1),\n              (e.nodes = []),\n              (e.edges = []),\n              (e.onLayoutEnd = function () {}),\n              e.updateCfg(n),\n              e\n            );\n          }\n          return (\n            o(n, t),\n            (n.prototype.getDefaultCfg = function () {\n              return {\n                rankdir: \"TB\",\n                align: void 0,\n                nodeSize: void 0,\n                nodesepFunc: void 0,\n                ranksepFunc: void 0,\n                nodesep: 50,\n                ranksep: 50,\n                controlPoints: !1,\n              };\n            }),\n            (n.prototype.execute = function () {\n              var t = this,\n                n = this,\n                e = n.nodes,\n                r = n.nodeSize,\n                o = n.rankdir,\n                i = n.combos;\n              if (e) {\n                var a,\n                  s = n.edges || [],\n                  p = new u.default.graphlib.Graph({\n                    multigraph: !0,\n                    compound: !0,\n                  });\n                a = r\n                  ? c.isArray(r)\n                    ? function () {\n                        return r;\n                      }\n                    : function () {\n                        return [r, r];\n                      }\n                  : function (t) {\n                      return t.size\n                        ? c.isArray(t.size)\n                          ? t.size\n                          : [t.size, t.size]\n                        : [40, 40];\n                    };\n                var d = f(n.nodesepFunc, n.nodesep, 50),\n                  h = f(n.ranksepFunc, n.ranksep, 50);\n                (\"LR\" !== o && \"RL\" !== o) ||\n                  ((d = f(n.ranksepFunc, n.ranksep, 50)),\n                  (h = f(n.nodesepFunc, n.nodesep, 50))),\n                  p.setDefaultEdgeLabel(function () {\n                    return {};\n                  }),\n                  p.setGraph(n);\n                var l,\n                  v = {};\n                return (\n                  e.forEach(function (n) {\n                    var e = a(n),\n                      r = h(n),\n                      o = d(n),\n                      i = e[0] + 2 * o,\n                      u = e[1] + 2 * r;\n                    p.setNode(n.id, { width: i, height: u }),\n                      t.sortByCombo &&\n                        n.comboId &&\n                        (v[n.comboId] ||\n                          ((v[n.comboId] = !0), p.setNode(n.comboId, {})),\n                        p.setParent(n.id, n.comboId));\n                  }),\n                  this.sortByCombo &&\n                    i &&\n                    i.forEach(function (t) {\n                      t.parentId &&\n                        (v[t.parentId] ||\n                          ((v[t.parentId] = !0), p.setNode(t.parentId, {})),\n                        p.setParent(t.id, t.parentId));\n                    }),\n                  s.forEach(function (t) {\n                    p.setEdge(t.source, t.target, { weight: t.weight || 1 });\n                  }),\n                  u.default.layout(p),\n                  p.nodes().forEach(function (t) {\n                    l = p.node(t);\n                    var n = e.findIndex(function (n) {\n                      return n.id === t;\n                    });\n                    e[n] && ((e[n].x = l.x), (e[n].y = l.y));\n                  }),\n                  p.edges().forEach(function (t) {\n                    l = p.edge(t);\n                    var e = s.findIndex(function (n) {\n                      return n.source === t.v && n.target === t.w;\n                    });\n                    n.controlPoints &&\n                      \"loop\" !== s[e].type &&\n                      (s[e].controlPoints = l.points.slice(\n                        1,\n                        l.points.length - 1,\n                      ));\n                  }),\n                  n.onLayoutEnd && n.onLayoutEnd(),\n                  { nodes: e, edges: s }\n                );\n              }\n            }),\n            (n.prototype.getType = function () {\n              return \"dagre\";\n            }),\n            n\n          );\n        })(e(7).Base);\n      function f(t, n, e) {\n        return (\n          t ||\n          (c.isNumber(n)\n            ? function () {\n                return n;\n              }\n            : function () {\n                return e;\n              })\n        );\n      }\n      n.DagreLayout = a;\n    },\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    ,\n    function (t, n, e) {\n      \"use strict\";\n      e.r(n);\n      var r = e(174);\n      n.default = r.DagreLayout;\n    },\n    function (t, n, e) {\n      t.exports = {\n        graphlib: e(23),\n        layout: e(334),\n        debug: e(395),\n        util: { time: e(19).time, notime: e(19).notime },\n        version: e(396),\n      };\n    },\n    function (t, n, e) {\n      var r = e(221);\n      t.exports = {\n        Graph: r.Graph,\n        json: e(324),\n        alg: e(325),\n        version: r.version,\n      };\n    },\n    function (t, n, e) {\n      t.exports = { Graph: e(85), version: e(323) };\n    },\n    function (t, n, e) {\n      var r = e(113);\n      t.exports = function (t) {\n        return r(t, 4);\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        (this.__data__ = []), (this.size = 0);\n      };\n    },\n    function (t, n, e) {\n      var r = e(60),\n        o = Array.prototype.splice;\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = r(n, t);\n        return (\n          !(e < 0) &&\n          (e == n.length - 1 ? n.pop() : o.call(n, e, 1), --this.size, !0)\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(60);\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = r(n, t);\n        return e < 0 ? void 0 : n[e][1];\n      };\n    },\n    function (t, n, e) {\n      var r = e(60);\n      t.exports = function (t) {\n        return r(this.__data__, t) > -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(60);\n      t.exports = function (t, n) {\n        var e = this.__data__,\n          o = r(e, t);\n        return o < 0 ? (++this.size, e.push([t, n])) : (e[o][1] = n), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(59);\n      t.exports = function () {\n        (this.__data__ = new r()), (this.size = 0);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = this.__data__,\n          e = n.delete(t);\n        return (this.size = n.size), e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.get(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.has(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(59),\n        o = e(86),\n        i = e(87);\n      t.exports = function (t, n) {\n        var e = this.__data__;\n        if (e instanceof r) {\n          var u = e.__data__;\n          if (!o || u.length < 199)\n            return u.push([t, n]), (this.size = ++e.size), this;\n          e = this.__data__ = new i(u);\n        }\n        return e.set(t, n), (this.size = e.size), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(51),\n        o = e(237),\n        i = e(22),\n        u = e(115),\n        c = /^\\[object .+?Constructor\\]$/,\n        a = Function.prototype,\n        f = Object.prototype,\n        s = a.toString,\n        p = f.hasOwnProperty,\n        d = RegExp(\n          \"^\" +\n            s\n              .call(p)\n              .replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\")\n              .replace(\n                /hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\n                \"$1.*?\",\n              ) +\n            \"$\",\n        );\n      t.exports = function (t) {\n        return !(!i(t) || o(t)) && (r(t) ? d : c).test(u(t));\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r;\n      r = (function () {\n        return this;\n      })();\n      try {\n        r = r || new Function(\"return this\")();\n      } catch (t) {\n        \"object\" === (\"undefined\" == typeof window ? \"undefined\" : e(window)) &&\n          (r = window);\n      }\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = Object.prototype,\n        i = o.hasOwnProperty,\n        u = o.toString,\n        c = r ? r.toStringTag : void 0;\n      t.exports = function (t) {\n        var n = i.call(t, c),\n          e = t[c];\n        try {\n          t[c] = void 0;\n          var r = !0;\n        } catch (t) {}\n        var o = u.call(t);\n        return r && (n ? (t[c] = e) : delete t[c]), o;\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype.toString;\n      t.exports = function (t) {\n        return e.call(t);\n      };\n    },\n    function (t, n, e) {\n      var r,\n        o = e(238),\n        i = (r = /[^.]+$/.exec((o && o.keys && o.keys.IE_PROTO) || \"\"))\n          ? \"Symbol(src)_1.\" + r\n          : \"\";\n      t.exports = function (t) {\n        return !!i && i in t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(24)[\"__core-js_shared__\"];\n      t.exports = r;\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return null == t ? void 0 : t[n];\n      };\n    },\n    function (t, n, e) {\n      var r = e(241),\n        o = e(59),\n        i = e(86);\n      t.exports = function () {\n        (this.size = 0),\n          (this.__data__ = {\n            hash: new r(),\n            map: new (i || o)(),\n            string: new r(),\n          });\n      };\n    },\n    function (t, n, e) {\n      var r = e(242),\n        o = e(243),\n        i = e(244),\n        u = e(245),\n        c = e(246);\n      function a(t) {\n        var n = -1,\n          e = null == t ? 0 : t.length;\n        for (this.clear(); ++n < e; ) {\n          var r = t[n];\n          this.set(r[0], r[1]);\n        }\n      }\n      (a.prototype.clear = r),\n        (a.prototype.delete = o),\n        (a.prototype.get = i),\n        (a.prototype.has = u),\n        (a.prototype.set = c),\n        (t.exports = a);\n    },\n    function (t, n, e) {\n      var r = e(61);\n      t.exports = function () {\n        (this.__data__ = r ? r(null) : {}), (this.size = 0);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = this.has(t) && delete this.__data__[t];\n        return (this.size -= n ? 1 : 0), n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(61),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = this.__data__;\n        if (r) {\n          var e = n[t];\n          return \"__lodash_hash_undefined__\" === e ? void 0 : e;\n        }\n        return o.call(n, t) ? n[t] : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(61),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = this.__data__;\n        return r ? void 0 !== n[t] : o.call(n, t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(61);\n      t.exports = function (t, n) {\n        var e = this.__data__;\n        return (\n          (this.size += this.has(t) ? 0 : 1),\n          (e[t] = r && void 0 === n ? \"__lodash_hash_undefined__\" : n),\n          this\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t) {\n        var n = r(this, t).delete(t);\n        return (this.size -= n ? 1 : 0), n;\n      };\n    },\n    function (t, n) {\n      function e(t) {\n        return (e =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      t.exports = function (t) {\n        var n = e(t);\n        return \"string\" == n || \"number\" == n || \"symbol\" == n || \"boolean\" == n\n          ? \"__proto__\" !== t\n          : null === t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t) {\n        return r(this, t).get(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t) {\n        return r(this, t).has(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(62);\n      t.exports = function (t, n) {\n        var e = r(this, t),\n          o = e.size;\n        return e.set(t, n), (this.size += e.size == o ? 0 : 1), this;\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(33);\n      t.exports = function (t, n) {\n        return t && r(n, o(n), t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = Array(t); ++e < t; ) r[e] = n(e);\n        return r;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && \"[object Arguments]\" == r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function () {\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(89),\n        i = e(26),\n        u = {};\n      (u[\"[object Float32Array]\"] =\n        u[\"[object Float64Array]\"] =\n        u[\"[object Int8Array]\"] =\n        u[\"[object Int16Array]\"] =\n        u[\"[object Int32Array]\"] =\n        u[\"[object Uint8Array]\"] =\n        u[\"[object Uint8ClampedArray]\"] =\n        u[\"[object Uint16Array]\"] =\n        u[\"[object Uint32Array]\"] =\n          !0),\n        (u[\"[object Arguments]\"] =\n          u[\"[object Array]\"] =\n          u[\"[object ArrayBuffer]\"] =\n          u[\"[object Boolean]\"] =\n          u[\"[object DataView]\"] =\n          u[\"[object Date]\"] =\n          u[\"[object Error]\"] =\n          u[\"[object Function]\"] =\n          u[\"[object Map]\"] =\n          u[\"[object Number]\"] =\n          u[\"[object Object]\"] =\n          u[\"[object RegExp]\"] =\n          u[\"[object Set]\"] =\n          u[\"[object String]\"] =\n          u[\"[object WeakMap]\"] =\n            !1),\n        (t.exports = function (t) {\n          return i(t) && o(t.length) && !!u[r(t)];\n        });\n    },\n    function (t, n, e) {\n      var r = e(118)(Object.keys, Object);\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(37);\n      t.exports = function (t, n) {\n        return t && r(n, o(n), t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(22),\n        o = e(67),\n        i = e(260),\n        u = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (!r(t)) return i(t);\n        var n = o(t),\n          e = [];\n        for (var c in t)\n          (\"constructor\" != c || (!n && u.call(t, c))) && e.push(c);\n        return e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = [];\n        if (null != t) for (var e in Object(t)) n.push(e);\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(92);\n      t.exports = function (t, n) {\n        return r(t, o(t), n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(123);\n      t.exports = function (t, n) {\n        return r(t, o(t), n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(125),\n        o = e(123),\n        i = e(37);\n      t.exports = function (t) {\n        return r(t, i, o);\n      };\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"DataView\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"Promise\");\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(35)(e(24), \"WeakMap\");\n      t.exports = r;\n    },\n    function (t, n) {\n      var e = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        var n = t.length,\n          r = new t.constructor(n);\n        return (\n          n &&\n            \"string\" == typeof t[0] &&\n            e.call(t, \"index\") &&\n            ((r.index = t.index), (r.input = t.input)),\n          r\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(94),\n        o = e(269),\n        i = e(270),\n        u = e(271),\n        c = e(128);\n      t.exports = function (t, n, e) {\n        var a = t.constructor;\n        switch (n) {\n          case \"[object ArrayBuffer]\":\n            return r(t);\n          case \"[object Boolean]\":\n          case \"[object Date]\":\n            return new a(+t);\n          case \"[object DataView]\":\n            return o(t, e);\n          case \"[object Float32Array]\":\n          case \"[object Float64Array]\":\n          case \"[object Int8Array]\":\n          case \"[object Int16Array]\":\n          case \"[object Int32Array]\":\n          case \"[object Uint8Array]\":\n          case \"[object Uint8ClampedArray]\":\n          case \"[object Uint16Array]\":\n          case \"[object Uint32Array]\":\n            return c(t, e);\n          case \"[object Map]\":\n            return new a();\n          case \"[object Number]\":\n          case \"[object String]\":\n            return new a(t);\n          case \"[object RegExp]\":\n            return i(t);\n          case \"[object Set]\":\n            return new a();\n          case \"[object Symbol]\":\n            return u(t);\n        }\n      };\n    },\n    function (t, n, e) {\n      var r = e(94);\n      t.exports = function (t, n) {\n        var e = n ? r(t.buffer) : t.buffer;\n        return new t.constructor(e, t.byteOffset, t.byteLength);\n      };\n    },\n    function (t, n) {\n      var e = /\\w*$/;\n      t.exports = function (t) {\n        var n = new t.constructor(t.source, e.exec(t));\n        return (n.lastIndex = t.lastIndex), n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = r ? r.prototype : void 0,\n        i = o ? o.valueOf : void 0;\n      t.exports = function (t) {\n        return i ? Object(i.call(t)) : {};\n      };\n    },\n    function (t, n, e) {\n      var r = e(273),\n        o = e(66),\n        i = e(90),\n        u = i && i.isMap,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(44),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && \"[object Map]\" == r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(275),\n        o = e(66),\n        i = e(90),\n        u = i && i.isSet,\n        c = u ? o(u) : r;\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(44),\n        o = e(26);\n      t.exports = function (t) {\n        return o(t) && \"[object Set]\" == r(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return function (n, e, r) {\n          for (var o = -1, i = Object(n), u = r(n), c = u.length; c--; ) {\n            var a = u[t ? c : ++o];\n            if (!1 === e(i[a], a, i)) break;\n          }\n          return n;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(30);\n      t.exports = function (t, n) {\n        return function (e, o) {\n          if (null == e) return e;\n          if (!r(e)) return t(e, o);\n          for (\n            var i = e.length, u = n ? i : -1, c = Object(e);\n            (n ? u-- : ++u < i) && !1 !== o(c[u], u, c);\n\n          );\n          return e;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(69);\n      t.exports = function (t, n) {\n        var e = [];\n        return (\n          r(t, function (t, r, o) {\n            n(t, r, o) && e.push(t);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(280),\n        o = e(288),\n        i = e(140);\n      t.exports = function (t) {\n        var n = o(t);\n        return 1 == n.length && n[0][2]\n          ? i(n[0][0], n[0][1])\n          : function (e) {\n              return e === t || r(e, t, n);\n            };\n      };\n    },\n    function (t, n, e) {\n      var r = e(58),\n        o = e(135);\n      t.exports = function (t, n, e, i) {\n        var u = e.length,\n          c = u,\n          a = !i;\n        if (null == t) return !c;\n        for (t = Object(t); u--; ) {\n          var f = e[u];\n          if (a && f[2] ? f[1] !== t[f[0]] : !(f[0] in t)) return !1;\n        }\n        for (; ++u < c; ) {\n          var s = (f = e[u])[0],\n            p = t[s],\n            d = f[1];\n          if (a && f[2]) {\n            if (void 0 === p && !(s in t)) return !1;\n          } else {\n            var h = new r();\n            if (i) var l = i(p, d, s, t, n, h);\n            if (!(void 0 === l ? o(d, p, 3, i, h) : l)) return !1;\n          }\n        }\n        return !0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(58),\n        o = e(136),\n        i = e(285),\n        u = e(287),\n        c = e(44),\n        a = e(17),\n        f = e(43),\n        s = e(54),\n        p = \"[object Object]\",\n        d = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e, h, l, v) {\n        var y = a(t),\n          g = a(n),\n          b = y ? \"[object Array]\" : c(t),\n          m = g ? \"[object Array]\" : c(n),\n          x = (b = \"[object Arguments]\" == b ? p : b) == p,\n          _ = (m = \"[object Arguments]\" == m ? p : m) == p,\n          w = b == m;\n        if (w && f(t)) {\n          if (!f(n)) return !1;\n          (y = !0), (x = !1);\n        }\n        if (w && !x)\n          return (\n            v || (v = new r()),\n            y || s(t) ? o(t, n, e, h, l, v) : i(t, n, b, e, h, l, v)\n          );\n        if (!(1 & e)) {\n          var E = x && d.call(t, \"__wrapped__\"),\n            j = _ && d.call(n, \"__wrapped__\");\n          if (E || j) {\n            var k = E ? t.value() : t,\n              S = j ? n.value() : n;\n            return v || (v = new r()), l(k, S, e, h, v);\n          }\n        }\n        return !!w && (v || (v = new r()), u(t, n, e, h, l, v));\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.set(t, \"__lodash_hash_undefined__\"), this;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return this.__data__.has(t);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        for (var e = -1, r = null == t ? 0 : t.length; ++e < r; )\n          if (n(t[e], e, t)) return !0;\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(127),\n        i = e(41),\n        u = e(136),\n        c = e(286),\n        a = e(98),\n        f = r ? r.prototype : void 0,\n        s = f ? f.valueOf : void 0;\n      t.exports = function (t, n, e, r, f, p, d) {\n        switch (e) {\n          case \"[object DataView]\":\n            if (t.byteLength != n.byteLength || t.byteOffset != n.byteOffset)\n              return !1;\n            (t = t.buffer), (n = n.buffer);\n          case \"[object ArrayBuffer]\":\n            return !(t.byteLength != n.byteLength || !p(new o(t), new o(n)));\n          case \"[object Boolean]\":\n          case \"[object Date]\":\n          case \"[object Number]\":\n            return i(+t, +n);\n          case \"[object Error]\":\n            return t.name == n.name && t.message == n.message;\n          case \"[object RegExp]\":\n          case \"[object String]\":\n            return t == n + \"\";\n          case \"[object Map]\":\n            var h = c;\n          case \"[object Set]\":\n            var l = 1 & r;\n            if ((h || (h = a), t.size != n.size && !l)) return !1;\n            var v = d.get(t);\n            if (v) return v == n;\n            (r |= 2), d.set(t, n);\n            var y = u(h(t), h(n), r, f, p, d);\n            return d.delete(t), y;\n          case \"[object Symbol]\":\n            if (s) return s.call(t) == s.call(n);\n        }\n        return !1;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = -1,\n          e = Array(t.size);\n        return (\n          t.forEach(function (t, r) {\n            e[++n] = [r, t];\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(124),\n        o = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n, e, i, u, c) {\n        var a = 1 & e,\n          f = r(t),\n          s = f.length;\n        if (s != r(n).length && !a) return !1;\n        for (var p = s; p--; ) {\n          var d = f[p];\n          if (!(a ? d in n : o.call(n, d))) return !1;\n        }\n        var h = c.get(t),\n          l = c.get(n);\n        if (h && l) return h == n && l == t;\n        var v = !0;\n        c.set(t, n), c.set(n, t);\n        for (var y = a; ++p < s; ) {\n          var g = t[(d = f[p])],\n            b = n[d];\n          if (i) var m = a ? i(b, g, d, n, t, c) : i(g, b, d, t, n, c);\n          if (!(void 0 === m ? g === b || u(g, b, e, i, c) : m)) {\n            v = !1;\n            break;\n          }\n          y || (y = \"constructor\" == d);\n        }\n        if (v && !y) {\n          var x = t.constructor,\n            _ = n.constructor;\n          x == _ ||\n            !(\"constructor\" in t) ||\n            !(\"constructor\" in n) ||\n            (\"function\" == typeof x &&\n              x instanceof x &&\n              \"function\" == typeof _ &&\n              _ instanceof _) ||\n            (v = !1);\n        }\n        return c.delete(t), c.delete(n), v;\n      };\n    },\n    function (t, n, e) {\n      var r = e(139),\n        o = e(33);\n      t.exports = function (t) {\n        for (var n = o(t), e = n.length; e--; ) {\n          var i = n[e],\n            u = t[i];\n          n[e] = [i, u, r(u)];\n        }\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(135),\n        o = e(290),\n        i = e(142),\n        u = e(99),\n        c = e(139),\n        a = e(140),\n        f = e(55);\n      t.exports = function (t, n) {\n        return u(t) && c(n)\n          ? a(f(t), n)\n          : function (e) {\n              var u = o(e, t);\n              return void 0 === u && u === n ? i(e, t) : r(n, u, 3);\n            };\n      };\n    },\n    function (t, n, e) {\n      var r = e(70);\n      t.exports = function (t, n, e) {\n        var o = null == t ? void 0 : r(t, n);\n        return void 0 === o ? e : o;\n      };\n    },\n    function (t, n, e) {\n      var r = e(292),\n        o =\n          /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,\n        i = /\\\\(\\\\)?/g,\n        u = r(function (t) {\n          var n = [];\n          return (\n            46 === t.charCodeAt(0) && n.push(\"\"),\n            t.replace(o, function (t, e, r, o) {\n              n.push(r ? o.replace(i, \"$1\") : e || t);\n            }),\n            n\n          );\n        });\n      t.exports = u;\n    },\n    function (t, n, e) {\n      var r = e(293);\n      t.exports = function (t) {\n        var n = r(t, function (t) {\n            return 500 === e.size && e.clear(), t;\n          }),\n          e = n.cache;\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(87);\n      function o(t, n) {\n        if (\"function\" != typeof t || (null != n && \"function\" != typeof n))\n          throw new TypeError(\"Expected a function\");\n        var e = function e() {\n          var r = arguments,\n            o = n ? n.apply(this, r) : r[0],\n            i = e.cache;\n          if (i.has(o)) return i.get(o);\n          var u = t.apply(this, r);\n          return (e.cache = i.set(o, u) || i), u;\n        };\n        return (e.cache = new (o.Cache || r)()), e;\n      }\n      (o.Cache = r), (t.exports = o);\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(72),\n        i = e(17),\n        u = e(45),\n        c = r ? r.prototype : void 0,\n        a = c ? c.toString : void 0;\n      t.exports = function t(n) {\n        if (\"string\" == typeof n) return n;\n        if (i(n)) return o(n, t) + \"\";\n        if (u(n)) return a ? a.call(n) : \"\";\n        var e = n + \"\";\n        return \"0\" == e && 1 / n == -1 / 0 ? \"-0\" : e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return null != t && n in Object(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(144),\n        o = e(297),\n        i = e(99),\n        u = e(55);\n      t.exports = function (t) {\n        return i(t) ? r(u(t)) : o(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(70);\n      t.exports = function (t) {\n        return function (n) {\n          return r(n, t);\n        };\n      };\n    },\n    function (t, n) {\n      var e = Object.prototype.hasOwnProperty;\n      t.exports = function (t, n) {\n        return null != t && e.call(t, n);\n      };\n    },\n    function (t, n, e) {\n      var r = e(91),\n        o = e(44),\n        i = e(53),\n        u = e(17),\n        c = e(30),\n        a = e(43),\n        f = e(67),\n        s = e(54),\n        p = Object.prototype.hasOwnProperty;\n      t.exports = function (t) {\n        if (null == t) return !0;\n        if (\n          c(t) &&\n          (u(t) ||\n            \"string\" == typeof t ||\n            \"function\" == typeof t.splice ||\n            a(t) ||\n            s(t) ||\n            i(t))\n        )\n          return !t.length;\n        var n = o(t);\n        if (\"[object Map]\" == n || \"[object Set]\" == n) return !t.size;\n        if (f(t)) return !r(t).length;\n        for (var e in t) if (p.call(t, e)) return !1;\n        return !0;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r) {\n        var o = -1,\n          i = null == t ? 0 : t.length;\n        for (r && i && (e = t[++o]); ++o < i; ) e = n(e, t[o], o, t);\n        return e;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e, r, o) {\n        return (\n          o(t, function (t, o, i) {\n            e = r ? ((r = !1), t) : n(e, t, o, i);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(91),\n        o = e(44),\n        i = e(30),\n        u = e(303),\n        c = e(304);\n      t.exports = function (t) {\n        if (null == t) return 0;\n        if (i(t)) return u(t) ? c(t) : t.length;\n        var n = o(t);\n        return \"[object Map]\" == n || \"[object Set]\" == n\n          ? t.size\n          : r(t).length;\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(17),\n        i = e(26);\n      t.exports = function (t) {\n        return (\n          \"string\" == typeof t || (!o(t) && i(t) && \"[object String]\" == r(t))\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(305),\n        o = e(306),\n        i = e(307);\n      t.exports = function (t) {\n        return o(t) ? i(t) : r(t);\n      };\n    },\n    function (t, n, e) {\n      var r = e(144)(\"length\");\n      t.exports = r;\n    },\n    function (t, n) {\n      var e = RegExp(\n        \"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\",\n      );\n      t.exports = function (t) {\n        return e.test(t);\n      };\n    },\n    function (t, n) {\n      var e = \"[\\\\ud800-\\\\udfff]\",\n        r = \"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\n        o = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n        i = \"[^\\\\ud800-\\\\udfff]\",\n        u = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n        c = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n        a = \"(?:\" + r + \"|\" + o + \")\" + \"?\",\n        f =\n          \"[\\\\ufe0e\\\\ufe0f]?\" +\n          a +\n          (\"(?:\\\\u200d(?:\" +\n            [i, u, c].join(\"|\") +\n            \")[\\\\ufe0e\\\\ufe0f]?\" +\n            a +\n            \")*\"),\n        s = \"(?:\" + [i + r + \"?\", r, u, c, e].join(\"|\") + \")\",\n        p = RegExp(o + \"(?=\" + o + \")|\" + s + f, \"g\");\n      t.exports = function (t) {\n        for (var n = (p.lastIndex = 0); p.test(t); ) ++n;\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(88),\n        o = e(130),\n        i = e(96),\n        u = e(31),\n        c = e(68),\n        a = e(17),\n        f = e(43),\n        s = e(51),\n        p = e(22),\n        d = e(54);\n      t.exports = function (t, n, e) {\n        var h = a(t),\n          l = h || f(t) || d(t);\n        if (((n = u(n, 4)), null == e)) {\n          var v = t && t.constructor;\n          e = l ? (h ? new v() : []) : p(t) && s(v) ? o(c(t)) : {};\n        }\n        return (\n          (l ? r : i)(t, function (t, r, o) {\n            return n(e, t, r, o);\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(100),\n        o = e(73),\n        i = e(314),\n        u = e(153),\n        c = o(function (t) {\n          return i(r(t, 1, u, !0));\n        });\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(42),\n        o = e(53),\n        i = e(17),\n        u = r ? r.isConcatSpreadable : void 0;\n      t.exports = function (t) {\n        return i(t) || o(t) || !!(u && t && t[u]);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        switch (e.length) {\n          case 0:\n            return t.call(n);\n          case 1:\n            return t.call(n, e[0]);\n          case 2:\n            return t.call(n, e[0], e[1]);\n          case 3:\n            return t.call(n, e[0], e[1], e[2]);\n        }\n        return t.apply(n, e);\n      };\n    },\n    function (t, n, e) {\n      var r = e(95),\n        o = e(116),\n        i = e(38),\n        u = o\n          ? function (t, n) {\n              return o(t, \"toString\", {\n                configurable: !0,\n                enumerable: !1,\n                value: r(n),\n                writable: !0,\n              });\n            }\n          : i;\n      t.exports = u;\n    },\n    function (t, n) {\n      var e = Date.now;\n      t.exports = function (t) {\n        var n = 0,\n          r = 0;\n        return function () {\n          var o = e(),\n            i = 16 - (o - r);\n          if (((r = o), i > 0)) {\n            if (++n >= 800) return arguments[0];\n          } else n = 0;\n          return t.apply(void 0, arguments);\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(137),\n        o = e(315),\n        i = e(319),\n        u = e(138),\n        c = e(320),\n        a = e(98);\n      t.exports = function (t, n, e) {\n        var f = -1,\n          s = o,\n          p = t.length,\n          d = !0,\n          h = [],\n          l = h;\n        if (e) (d = !1), (s = i);\n        else if (p >= 200) {\n          var v = n ? null : c(t);\n          if (v) return a(v);\n          (d = !1), (s = u), (l = new r());\n        } else l = n ? [] : h;\n        t: for (; ++f < p; ) {\n          var y = t[f],\n            g = n ? n(y) : y;\n          if (((y = e || 0 !== y ? y : 0), d && g == g)) {\n            for (var b = l.length; b--; ) if (l[b] === g) continue t;\n            n && l.push(g), h.push(y);\n          } else s(l, g, e) || (l !== h && l.push(g), h.push(y));\n        }\n        return h;\n      };\n    },\n    function (t, n, e) {\n      var r = e(316);\n      t.exports = function (t, n) {\n        return !!(null == t ? 0 : t.length) && r(t, n, 0) > -1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(152),\n        o = e(317),\n        i = e(318);\n      t.exports = function (t, n, e) {\n        return n == n ? i(t, n, e) : r(t, o, e);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        return t != t;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = e - 1, o = t.length; ++r < o; ) if (t[r] === n) return r;\n        return -1;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = -1, o = null == t ? 0 : t.length; ++r < o; )\n          if (e(n, t[r])) return !0;\n        return !1;\n      };\n    },\n    function (t, n, e) {\n      var r = e(126),\n        o = e(321),\n        i = e(98),\n        u =\n          r && 1 / i(new r([, -0]))[1] == 1 / 0\n            ? function (t) {\n                return new r(t);\n              }\n            : o;\n      t.exports = u;\n    },\n    function (t, n) {\n      t.exports = function () {};\n    },\n    function (t, n, e) {\n      var r = e(72);\n      t.exports = function (t, n) {\n        return r(n, function (n) {\n          return t[n];\n        });\n      };\n    },\n    function (t, n) {\n      t.exports = \"2.1.8\";\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(85);\n      function i(t) {\n        return r.map(t.nodes(), function (n) {\n          var e = t.node(n),\n            o = t.parent(n),\n            i = { v: n };\n          return (\n            r.isUndefined(e) || (i.value = e),\n            r.isUndefined(o) || (i.parent = o),\n            i\n          );\n        });\n      }\n      function u(t) {\n        return r.map(t.edges(), function (n) {\n          var e = t.edge(n),\n            o = { v: n.v, w: n.w };\n          return (\n            r.isUndefined(n.name) || (o.name = n.name),\n            r.isUndefined(e) || (o.value = e),\n            o\n          );\n        });\n      }\n      t.exports = {\n        write: function (t) {\n          var n = {\n            options: {\n              directed: t.isDirected(),\n              multigraph: t.isMultigraph(),\n              compound: t.isCompound(),\n            },\n            nodes: i(t),\n            edges: u(t),\n          };\n          r.isUndefined(t.graph()) || (n.value = r.clone(t.graph()));\n          return n;\n        },\n        read: function (t) {\n          var n = new o(t.options).setGraph(t.value);\n          return (\n            r.each(t.nodes, function (t) {\n              n.setNode(t.v, t.value), t.parent && n.setParent(t.v, t.parent);\n            }),\n            r.each(t.edges, function (t) {\n              n.setEdge({ v: t.v, w: t.w, name: t.name }, t.value);\n            }),\n            n\n          );\n        },\n      };\n    },\n    function (t, n, e) {\n      t.exports = {\n        components: e(326),\n        dijkstra: e(155),\n        dijkstraAll: e(327),\n        findCycles: e(328),\n        floydWarshall: e(329),\n        isAcyclic: e(330),\n        postorder: e(331),\n        preorder: e(332),\n        prim: e(333),\n        tarjan: e(157),\n        topsort: e(158),\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t) {\n        var n,\n          e = {},\n          o = [];\n        function i(o) {\n          r.has(e, o) ||\n            ((e[o] = !0),\n            n.push(o),\n            r.each(t.successors(o), i),\n            r.each(t.predecessors(o), i));\n        }\n        return (\n          r.each(t.nodes(), function (t) {\n            (n = []), i(t), n.length && o.push(n);\n          }),\n          o\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(155),\n        o = e(21);\n      t.exports = function (t, n, e) {\n        return o.transform(\n          t.nodes(),\n          function (o, i) {\n            o[i] = r(t, i, n, e);\n          },\n          {},\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(157);\n      t.exports = function (t) {\n        return r.filter(o(t), function (n) {\n          return n.length > 1 || (1 === n.length && t.hasEdge(n[0], n[0]));\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(21);\n      t.exports = function (t, n, e) {\n        return (function (t, n, e) {\n          var r = {},\n            o = t.nodes();\n          return (\n            o.forEach(function (t) {\n              (r[t] = {}),\n                (r[t][t] = { distance: 0 }),\n                o.forEach(function (n) {\n                  t !== n && (r[t][n] = { distance: Number.POSITIVE_INFINITY });\n                }),\n                e(t).forEach(function (e) {\n                  var o = e.v === t ? e.w : e.v,\n                    i = n(e);\n                  r[t][o] = { distance: i, predecessor: t };\n                });\n            }),\n            o.forEach(function (t) {\n              var n = r[t];\n              o.forEach(function (e) {\n                var i = r[e];\n                o.forEach(function (e) {\n                  var r = i[t],\n                    o = n[e],\n                    u = i[e],\n                    c = r.distance + o.distance;\n                  c < u.distance &&\n                    ((u.distance = c), (u.predecessor = o.predecessor));\n                });\n              });\n            }),\n            r\n          );\n        })(\n          t,\n          n || o,\n          e ||\n            function (n) {\n              return t.outEdges(n);\n            },\n        );\n      };\n      var o = r.constant(1);\n    },\n    function (t, n, e) {\n      var r = e(158);\n      t.exports = function (t) {\n        try {\n          r(t);\n        } catch (t) {\n          if (t instanceof r.CycleException) return !1;\n          throw t;\n        }\n        return !0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(159);\n      t.exports = function (t, n) {\n        return r(t, n, \"post\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(159);\n      t.exports = function (t, n) {\n        return r(t, n, \"pre\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(21),\n        o = e(85),\n        i = e(156);\n      t.exports = function (t, n) {\n        var e,\n          u = new o(),\n          c = {},\n          a = new i();\n        function f(t) {\n          var r = t.v === e ? t.w : t.v,\n            o = a.priority(r);\n          if (void 0 !== o) {\n            var i = n(t);\n            i < o && ((c[r] = e), a.decrease(r, i));\n          }\n        }\n        if (0 === t.nodeCount()) return u;\n        r.each(t.nodes(), function (t) {\n          a.add(t, Number.POSITIVE_INFINITY), u.setNode(t);\n        }),\n          a.decrease(t.nodes()[0], 0);\n        var s = !1;\n        for (; a.size() > 0; ) {\n          if (((e = a.removeMin()), r.has(c, e))) u.setEdge(e, c[e]);\n          else {\n            if (s) throw new Error(\"Input graph is not connected: \" + t);\n            s = !0;\n          }\n          t.nodeEdges(e).forEach(f);\n        }\n        return u;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(374),\n        i = e(377),\n        u = e(378),\n        c = e(19).normalizeRanks,\n        a = e(380),\n        f = e(19).removeEmptyRanks,\n        s = e(381),\n        p = e(382),\n        d = e(383),\n        h = e(384),\n        l = e(393),\n        v = e(19),\n        y = e(23).Graph;\n      t.exports = function (t, n) {\n        var e = n && n.debugTiming ? v.time : v.notime;\n        e(\"layout\", function () {\n          var n = e(\"  buildLayoutGraph\", function () {\n            return (function (t) {\n              var n = new y({ multigraph: !0, compound: !0 }),\n                e = S(t.graph());\n              return (\n                n.setGraph(r.merge({}, b, k(e, g), r.pick(e, m))),\n                r.forEach(t.nodes(), function (e) {\n                  var o = S(t.node(e));\n                  n.setNode(e, r.defaults(k(o, x), _)),\n                    n.setParent(e, t.parent(e));\n                }),\n                r.forEach(t.edges(), function (e) {\n                  var o = S(t.edge(e));\n                  n.setEdge(e, r.merge({}, E, k(o, w), r.pick(o, j)));\n                }),\n                n\n              );\n            })(t);\n          });\n          e(\"  runLayout\", function () {\n            !(function (t, n) {\n              n(\"    makeSpaceForEdgeLabels\", function () {\n                !(function (t) {\n                  var n = t.graph();\n                  (n.ranksep /= 2),\n                    r.forEach(t.edges(), function (e) {\n                      var r = t.edge(e);\n                      (r.minlen *= 2),\n                        \"c\" !== r.labelpos.toLowerCase() &&\n                          (\"TB\" === n.rankdir || \"BT\" === n.rankdir\n                            ? (r.width += r.labeloffset)\n                            : (r.height += r.labeloffset));\n                    });\n                })(t);\n              }),\n                n(\"    removeSelfEdges\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      if (n.v === n.w) {\n                        var e = t.node(n.v);\n                        e.selfEdges || (e.selfEdges = []),\n                          e.selfEdges.push({ e: n, label: t.edge(n) }),\n                          t.removeEdge(n);\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    acyclic\", function () {\n                  o.run(t);\n                }),\n                n(\"    nestingGraph.run\", function () {\n                  s.run(t);\n                }),\n                n(\"    rank\", function () {\n                  u(v.asNonCompoundGraph(t));\n                }),\n                n(\"    injectEdgeLabelProxies\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      if (e.width && e.height) {\n                        var r = t.node(n.v),\n                          o = {\n                            rank: (t.node(n.w).rank - r.rank) / 2 + r.rank,\n                            e: n,\n                          };\n                        v.addDummyNode(t, \"edge-proxy\", o, \"_ep\");\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    removeEmptyRanks\", function () {\n                  f(t);\n                }),\n                n(\"    nestingGraph.cleanup\", function () {\n                  s.cleanup(t);\n                }),\n                n(\"    normalizeRanks\", function () {\n                  c(t);\n                }),\n                n(\"    assignRankMinMax\", function () {\n                  !(function (t) {\n                    var n = 0;\n                    r.forEach(t.nodes(), function (e) {\n                      var o = t.node(e);\n                      o.borderTop &&\n                        ((o.minRank = t.node(o.borderTop).rank),\n                        (o.maxRank = t.node(o.borderBottom).rank),\n                        (n = r.max(n, o.maxRank)));\n                    }),\n                      (t.graph().maxRank = n);\n                  })(t);\n                }),\n                n(\"    removeEdgeLabelProxies\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      var e = t.node(n);\n                      \"edge-proxy\" === e.dummy &&\n                        ((t.edge(e.e).labelRank = e.rank), t.removeNode(n));\n                    });\n                  })(t);\n                }),\n                n(\"    normalize.run\", function () {\n                  i.run(t);\n                }),\n                n(\"    parentDummyChains\", function () {\n                  a(t);\n                }),\n                n(\"    addBorderSegments\", function () {\n                  p(t);\n                }),\n                n(\"    order\", function () {\n                  h(t);\n                }),\n                n(\"    insertSelfEdges\", function () {\n                  !(function (t) {\n                    var n = v.buildLayerMatrix(t);\n                    r.forEach(n, function (n) {\n                      var e = 0;\n                      r.forEach(n, function (n, o) {\n                        var i = t.node(n);\n                        (i.order = o + e),\n                          r.forEach(i.selfEdges, function (n) {\n                            v.addDummyNode(\n                              t,\n                              \"selfedge\",\n                              {\n                                width: n.label.width,\n                                height: n.label.height,\n                                rank: i.rank,\n                                order: o + ++e,\n                                e: n.e,\n                                label: n.label,\n                              },\n                              \"_se\",\n                            );\n                          }),\n                          delete i.selfEdges;\n                      });\n                    });\n                  })(t);\n                }),\n                n(\"    adjustCoordinateSystem\", function () {\n                  d.adjust(t);\n                }),\n                n(\"    position\", function () {\n                  l(t);\n                }),\n                n(\"    positionSelfEdges\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      var e = t.node(n);\n                      if (\"selfedge\" === e.dummy) {\n                        var r = t.node(e.e.v),\n                          o = r.x + r.width / 2,\n                          i = r.y,\n                          u = e.x - o,\n                          c = r.height / 2;\n                        t.setEdge(e.e, e.label),\n                          t.removeNode(n),\n                          (e.label.points = [\n                            { x: o + (2 * u) / 3, y: i - c },\n                            { x: o + (5 * u) / 6, y: i - c },\n                            { x: o + u, y: i },\n                            { x: o + (5 * u) / 6, y: i + c },\n                            { x: o + (2 * u) / 3, y: i + c },\n                          ]),\n                          (e.label.x = e.x),\n                          (e.label.y = e.y);\n                      }\n                    });\n                  })(t);\n                }),\n                n(\"    removeBorderNodes\", function () {\n                  !(function (t) {\n                    r.forEach(t.nodes(), function (n) {\n                      if (t.children(n).length) {\n                        var e = t.node(n),\n                          o = t.node(e.borderTop),\n                          i = t.node(e.borderBottom),\n                          u = t.node(r.last(e.borderLeft)),\n                          c = t.node(r.last(e.borderRight));\n                        (e.width = Math.abs(c.x - u.x)),\n                          (e.height = Math.abs(i.y - o.y)),\n                          (e.x = u.x + e.width / 2),\n                          (e.y = o.y + e.height / 2);\n                      }\n                    }),\n                      r.forEach(t.nodes(), function (n) {\n                        \"border\" === t.node(n).dummy && t.removeNode(n);\n                      });\n                  })(t);\n                }),\n                n(\"    normalize.undo\", function () {\n                  i.undo(t);\n                }),\n                n(\"    fixupEdgeLabelCoords\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      if (r.has(e, \"x\"))\n                        switch (\n                          ((\"l\" !== e.labelpos && \"r\" !== e.labelpos) ||\n                            (e.width -= e.labeloffset),\n                          e.labelpos)\n                        ) {\n                          case \"l\":\n                            e.x -= e.width / 2 + e.labeloffset;\n                            break;\n                          case \"r\":\n                            e.x += e.width / 2 + e.labeloffset;\n                        }\n                    });\n                  })(t);\n                }),\n                n(\"    undoCoordinateSystem\", function () {\n                  d.undo(t);\n                }),\n                n(\"    translateGraph\", function () {\n                  !(function (t) {\n                    var n = Number.POSITIVE_INFINITY,\n                      e = 0,\n                      o = Number.POSITIVE_INFINITY,\n                      i = 0,\n                      u = t.graph(),\n                      c = u.marginx || 0,\n                      a = u.marginy || 0;\n                    function f(t) {\n                      var r = t.x,\n                        u = t.y,\n                        c = t.width,\n                        a = t.height;\n                      (n = Math.min(n, r - c / 2)),\n                        (e = Math.max(e, r + c / 2)),\n                        (o = Math.min(o, u - a / 2)),\n                        (i = Math.max(i, u + a / 2));\n                    }\n                    r.forEach(t.nodes(), function (n) {\n                      f(t.node(n));\n                    }),\n                      r.forEach(t.edges(), function (n) {\n                        var e = t.edge(n);\n                        r.has(e, \"x\") && f(e);\n                      }),\n                      (n -= c),\n                      (o -= a),\n                      r.forEach(t.nodes(), function (e) {\n                        var r = t.node(e);\n                        (r.x -= n), (r.y -= o);\n                      }),\n                      r.forEach(t.edges(), function (e) {\n                        var i = t.edge(e);\n                        r.forEach(i.points, function (t) {\n                          (t.x -= n), (t.y -= o);\n                        }),\n                          r.has(i, \"x\") && (i.x -= n),\n                          r.has(i, \"y\") && (i.y -= o);\n                      }),\n                      (u.width = e - n + c),\n                      (u.height = i - o + a);\n                  })(t);\n                }),\n                n(\"    assignNodeIntersects\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e,\n                        r,\n                        o = t.edge(n),\n                        i = t.node(n.v),\n                        u = t.node(n.w);\n                      o.points\n                        ? ((e = o.points[0]),\n                          (r = o.points[o.points.length - 1]))\n                        : ((o.points = []), (e = u), (r = i)),\n                        o.points.unshift(v.intersectRect(i, e)),\n                        o.points.push(v.intersectRect(u, r));\n                    });\n                  })(t);\n                }),\n                n(\"    reversePoints\", function () {\n                  !(function (t) {\n                    r.forEach(t.edges(), function (n) {\n                      var e = t.edge(n);\n                      e.reversed && e.points.reverse();\n                    });\n                  })(t);\n                }),\n                n(\"    acyclic.undo\", function () {\n                  o.undo(t);\n                });\n            })(n, e);\n          }),\n            e(\"  updateInputGraph\", function () {\n              !(function (t, n) {\n                r.forEach(t.nodes(), function (e) {\n                  var r = t.node(e),\n                    o = n.node(e);\n                  r &&\n                    ((r.x = o.x),\n                    (r.y = o.y),\n                    n.children(e).length &&\n                      ((r.width = o.width), (r.height = o.height)));\n                }),\n                  r.forEach(t.edges(), function (e) {\n                    var o = t.edge(e),\n                      i = n.edge(e);\n                    (o.points = i.points),\n                      r.has(i, \"x\") && ((o.x = i.x), (o.y = i.y));\n                  }),\n                  (t.graph().width = n.graph().width),\n                  (t.graph().height = n.graph().height);\n              })(t, n);\n            });\n        });\n      };\n      var g = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"],\n        b = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" },\n        m = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"],\n        x = [\"width\", \"height\"],\n        _ = { width: 0, height: 0 },\n        w = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"],\n        E = {\n          minlen: 1,\n          weight: 1,\n          width: 0,\n          height: 0,\n          labeloffset: 10,\n          labelpos: \"r\",\n        },\n        j = [\"labelpos\"];\n      function k(t, n) {\n        return r.mapValues(r.pick(t, n), Number);\n      }\n      function S(t) {\n        var n = {};\n        return (\n          r.forEach(t, function (t, e) {\n            n[e.toLowerCase()] = t;\n          }),\n          n\n        );\n      }\n    },\n    function (t, n, e) {\n      var r = e(113);\n      t.exports = function (t) {\n        return r(t, 5);\n      };\n    },\n    function (t, n, e) {\n      var r = e(73),\n        o = e(41),\n        i = e(74),\n        u = e(37),\n        c = Object.prototype,\n        a = c.hasOwnProperty,\n        f = r(function (t, n) {\n          t = Object(t);\n          var e = -1,\n            r = n.length,\n            f = r > 2 ? n[2] : void 0;\n          for (f && i(n[0], n[1], f) && (r = 1); ++e < r; )\n            for (var s = n[e], p = u(s), d = -1, h = p.length; ++d < h; ) {\n              var l = p[d],\n                v = t[l];\n              (void 0 === v || (o(v, c[l]) && !a.call(t, l))) && (t[l] = s[l]);\n            }\n          return t;\n        });\n      t.exports = f;\n    },\n    function (t, n, e) {\n      var r = e(338)(e(339));\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(31),\n        o = e(30),\n        i = e(33);\n      t.exports = function (t) {\n        return function (n, e, u) {\n          var c = Object(n);\n          if (!o(n)) {\n            var a = r(e, 3);\n            (n = i(n)),\n              (e = function (t) {\n                return a(c[t], t, c);\n              });\n          }\n          var f = t(n, e, u);\n          return f > -1 ? c[a ? n[f] : f] : void 0;\n        };\n      };\n    },\n    function (t, n, e) {\n      var r = e(152),\n        o = e(31),\n        i = e(340),\n        u = Math.max;\n      t.exports = function (t, n, e) {\n        var c = null == t ? 0 : t.length;\n        if (!c) return -1;\n        var a = null == e ? 0 : i(e);\n        return a < 0 && (a = u(c + a, 0)), r(t, o(n, 3), a);\n      };\n    },\n    function (t, n, e) {\n      var r = e(160);\n      t.exports = function (t) {\n        var n = r(t),\n          e = n % 1;\n        return n == n ? (e ? n - e : n) : 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(342),\n        o = e(22),\n        i = e(45),\n        u = /^[-+]0x[0-9a-f]+$/i,\n        c = /^0b[01]+$/i,\n        a = /^0o[0-7]+$/i,\n        f = parseInt;\n      t.exports = function (t) {\n        if (\"number\" == typeof t) return t;\n        if (i(t)) return NaN;\n        if (o(t)) {\n          var n = \"function\" == typeof t.valueOf ? t.valueOf() : t;\n          t = o(n) ? n + \"\" : n;\n        }\n        if (\"string\" != typeof t) return 0 === t ? t : +t;\n        t = r(t);\n        var e = c.test(t);\n        return e || a.test(t) ? f(t.slice(2), e ? 2 : 8) : u.test(t) ? NaN : +t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(343),\n        o = /^\\s+/;\n      t.exports = function (t) {\n        return t ? t.slice(0, r(t) + 1).replace(o, \"\") : t;\n      };\n    },\n    function (t, n) {\n      var e = /\\s/;\n      t.exports = function (t) {\n        for (var n = t.length; n-- && e.test(t.charAt(n)); );\n        return n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(97),\n        o = e(133),\n        i = e(37);\n      t.exports = function (t, n) {\n        return null == t ? t : r(t, o(n), i);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t) {\n        var n = null == t ? 0 : t.length;\n        return n ? t[n - 1] : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(64),\n        o = e(96),\n        i = e(31);\n      t.exports = function (t, n) {\n        var e = {};\n        return (\n          (n = i(n, 3)),\n          o(t, function (t, o, i) {\n            r(e, o, n(t, o, i));\n          }),\n          e\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(101),\n        o = e(348),\n        i = e(38);\n      t.exports = function (t) {\n        return t && t.length ? r(t, i, o) : void 0;\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        return t > n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(350),\n        o = e(354)(function (t, n, e) {\n          r(t, n, e);\n        });\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(58),\n        o = e(162),\n        i = e(97),\n        u = e(351),\n        c = e(22),\n        a = e(37),\n        f = e(163);\n      t.exports = function t(n, e, s, p, d) {\n        n !== e &&\n          i(\n            e,\n            function (i, a) {\n              if ((d || (d = new r()), c(i))) u(n, e, a, s, t, p, d);\n              else {\n                var h = p ? p(f(n, a), i, a + \"\", n, e, d) : void 0;\n                void 0 === h && (h = i), o(n, a, h);\n              }\n            },\n            a,\n          );\n      };\n    },\n    function (t, n, e) {\n      var r = e(162),\n        o = e(119),\n        i = e(128),\n        u = e(120),\n        c = e(129),\n        a = e(53),\n        f = e(17),\n        s = e(153),\n        p = e(43),\n        d = e(51),\n        h = e(22),\n        l = e(352),\n        v = e(54),\n        y = e(163),\n        g = e(353);\n      t.exports = function (t, n, e, b, m, x, _) {\n        var w = y(t, e),\n          E = y(n, e),\n          j = _.get(E);\n        if (j) r(t, e, j);\n        else {\n          var k = x ? x(w, E, e + \"\", t, n, _) : void 0,\n            S = void 0 === k;\n          if (S) {\n            var O = f(E),\n              N = !O && p(E),\n              I = !O && !N && v(E);\n            (k = E),\n              O || N || I\n                ? f(w)\n                  ? (k = w)\n                  : s(w)\n                  ? (k = u(w))\n                  : N\n                  ? ((S = !1), (k = o(E, !0)))\n                  : I\n                  ? ((S = !1), (k = i(E, !0)))\n                  : (k = [])\n                : l(E) || a(E)\n                ? ((k = w), a(w) ? (k = g(w)) : (h(w) && !d(w)) || (k = c(E)))\n                : (S = !1);\n          }\n          S && (_.set(E, k), m(k, E, b, x, _), _.delete(E)), r(t, e, k);\n        }\n      };\n    },\n    function (t, n, e) {\n      var r = e(36),\n        o = e(68),\n        i = e(26),\n        u = Function.prototype,\n        c = Object.prototype,\n        a = u.toString,\n        f = c.hasOwnProperty,\n        s = a.call(Object);\n      t.exports = function (t) {\n        if (!i(t) || \"[object Object]\" != r(t)) return !1;\n        var n = o(t);\n        if (null === n) return !0;\n        var e = f.call(n, \"constructor\") && n.constructor;\n        return \"function\" == typeof e && e instanceof e && a.call(e) == s;\n      };\n    },\n    function (t, n, e) {\n      var r = e(52),\n        o = e(37);\n      t.exports = function (t) {\n        return r(t, o(t));\n      };\n    },\n    function (t, n, e) {\n      var r = e(73),\n        o = e(74);\n      t.exports = function (t) {\n        return r(function (n, e) {\n          var r = -1,\n            i = e.length,\n            u = i > 1 ? e[i - 1] : void 0,\n            c = i > 2 ? e[2] : void 0;\n          for (\n            u = t.length > 3 && \"function\" == typeof u ? (i--, u) : void 0,\n              c && o(e[0], e[1], c) && ((u = i < 3 ? void 0 : u), (i = 1)),\n              n = Object(n);\n            ++r < i;\n\n          ) {\n            var a = e[r];\n            a && t(n, a, r, u);\n          }\n          return n;\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(101),\n        o = e(164),\n        i = e(38);\n      t.exports = function (t) {\n        return t && t.length ? r(t, i, o) : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(101),\n        o = e(31),\n        i = e(164);\n      t.exports = function (t, n) {\n        return t && t.length ? r(t, o(n, 2), i) : void 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(24);\n      t.exports = function () {\n        return r.Date.now();\n      };\n    },\n    function (t, n, e) {\n      var r = e(359),\n        o = e(362)(function (t, n) {\n          return null == t ? {} : r(t, n);\n        });\n      t.exports = o;\n    },\n    function (t, n, e) {\n      var r = e(360),\n        o = e(142);\n      t.exports = function (t, n) {\n        return r(t, n, function (n, e) {\n          return o(t, e);\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(70),\n        o = e(361),\n        i = e(71);\n      t.exports = function (t, n, e) {\n        for (var u = -1, c = n.length, a = {}; ++u < c; ) {\n          var f = n[u],\n            s = r(t, f);\n          e(s, f) && o(a, i(f, t), s);\n        }\n        return a;\n      };\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(71),\n        i = e(65),\n        u = e(22),\n        c = e(55);\n      t.exports = function (t, n, e, a) {\n        if (!u(t)) return t;\n        for (\n          var f = -1, s = (n = o(n, t)).length, p = s - 1, d = t;\n          null != d && ++f < s;\n\n        ) {\n          var h = c(n[f]),\n            l = e;\n          if (\"__proto__\" === h || \"constructor\" === h || \"prototype\" === h)\n            return t;\n          if (f != p) {\n            var v = d[h];\n            void 0 === (l = a ? a(v, h, d) : void 0) &&\n              (l = u(v) ? v : i(n[f + 1]) ? [] : {});\n          }\n          r(d, h, l), (d = d[h]);\n        }\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(161),\n        o = e(150),\n        i = e(151);\n      t.exports = function (t) {\n        return i(o(t, void 0, r), t + \"\");\n      };\n    },\n    function (t, n, e) {\n      var r = e(364)();\n      t.exports = r;\n    },\n    function (t, n, e) {\n      var r = e(365),\n        o = e(74),\n        i = e(160);\n      t.exports = function (t) {\n        return function (n, e, u) {\n          return (\n            u && \"number\" != typeof u && o(n, e, u) && (e = u = void 0),\n            (n = i(n)),\n            void 0 === e ? ((e = n), (n = 0)) : (e = i(e)),\n            (u = void 0 === u ? (n < e ? 1 : -1) : i(u)),\n            r(n, e, u, t)\n          );\n        };\n      };\n    },\n    function (t, n) {\n      var e = Math.ceil,\n        r = Math.max;\n      t.exports = function (t, n, o, i) {\n        for (var u = -1, c = r(e((n - t) / (o || 1)), 0), a = Array(c); c--; )\n          (a[i ? c : ++u] = t), (t += o);\n        return a;\n      };\n    },\n    function (t, n, e) {\n      var r = e(100),\n        o = e(367),\n        i = e(73),\n        u = e(74),\n        c = i(function (t, n) {\n          if (null == t) return [];\n          var e = n.length;\n          return (\n            e > 1 && u(t, n[0], n[1])\n              ? (n = [])\n              : e > 2 && u(n[0], n[1], n[2]) && (n = [n[0]]),\n            o(t, r(n, 1), [])\n          );\n        });\n      t.exports = c;\n    },\n    function (t, n, e) {\n      var r = e(72),\n        o = e(70),\n        i = e(31),\n        u = e(148),\n        c = e(368),\n        a = e(66),\n        f = e(369),\n        s = e(38),\n        p = e(17);\n      t.exports = function (t, n, e) {\n        n = n.length\n          ? r(n, function (t) {\n              return p(t)\n                ? function (n) {\n                    return o(n, 1 === t.length ? t[0] : t);\n                  }\n                : t;\n            })\n          : [s];\n        var d = -1;\n        n = r(n, a(i));\n        var h = u(t, function (t, e, o) {\n          return {\n            criteria: r(n, function (n) {\n              return n(t);\n            }),\n            index: ++d,\n            value: t,\n          };\n        });\n        return c(h, function (t, n) {\n          return f(t, n, e);\n        });\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n) {\n        var e = t.length;\n        for (t.sort(n); e--; ) t[e] = t[e].value;\n        return t;\n      };\n    },\n    function (t, n, e) {\n      var r = e(370);\n      t.exports = function (t, n, e) {\n        for (\n          var o = -1,\n            i = t.criteria,\n            u = n.criteria,\n            c = i.length,\n            a = e.length;\n          ++o < c;\n\n        ) {\n          var f = r(i[o], u[o]);\n          if (f) return o >= a ? f : f * (\"desc\" == e[o] ? -1 : 1);\n        }\n        return t.index - n.index;\n      };\n    },\n    function (t, n, e) {\n      var r = e(45);\n      t.exports = function (t, n) {\n        if (t !== n) {\n          var e = void 0 !== t,\n            o = null === t,\n            i = t == t,\n            u = r(t),\n            c = void 0 !== n,\n            a = null === n,\n            f = n == n,\n            s = r(n);\n          if (\n            (!a && !s && !u && t > n) ||\n            (u && c && f && !a && !s) ||\n            (o && c && f) ||\n            (!e && f) ||\n            !i\n          )\n            return 1;\n          if (\n            (!o && !u && !s && t < n) ||\n            (s && e && i && !o && !u) ||\n            (a && e && i) ||\n            (!c && i) ||\n            !f\n          )\n            return -1;\n        }\n        return 0;\n      };\n    },\n    function (t, n, e) {\n      var r = e(141),\n        o = 0;\n      t.exports = function (t) {\n        var n = ++o;\n        return r(t) + n;\n      };\n    },\n    function (t, n, e) {\n      var r = e(63),\n        o = e(373);\n      t.exports = function (t, n) {\n        return o(t || [], n || [], r);\n      };\n    },\n    function (t, n) {\n      t.exports = function (t, n, e) {\n        for (var r = -1, o = t.length, i = n.length, u = {}; ++r < o; ) {\n          var c = r < i ? n[r] : void 0;\n          e(u, t[r], c);\n        }\n        return u;\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(375);\n      t.exports = {\n        run: function (t) {\n          var n =\n            \"greedy\" === t.graph().acyclicer\n              ? o(\n                  t,\n                  (function (t) {\n                    return function (n) {\n                      return t.edge(n).weight;\n                    };\n                  })(t),\n                )\n              : (function (t) {\n                  var n = [],\n                    e = {},\n                    o = {};\n                  function i(u) {\n                    r.has(o, u) ||\n                      ((o[u] = !0),\n                      (e[u] = !0),\n                      r.forEach(t.outEdges(u), function (t) {\n                        r.has(e, t.w) ? n.push(t) : i(t.w);\n                      }),\n                      delete e[u]);\n                  }\n                  return r.forEach(t.nodes(), i), n;\n                })(t);\n          r.forEach(n, function (n) {\n            var e = t.edge(n);\n            t.removeEdge(n),\n              (e.forwardName = n.name),\n              (e.reversed = !0),\n              t.setEdge(n.w, n.v, e, r.uniqueId(\"rev\"));\n          });\n        },\n        undo: function (t) {\n          r.forEach(t.edges(), function (n) {\n            var e = t.edge(n);\n            if (e.reversed) {\n              t.removeEdge(n);\n              var r = e.forwardName;\n              delete e.reversed,\n                delete e.forwardName,\n                t.setEdge(n.w, n.v, e, r);\n            }\n          });\n        },\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(23).Graph,\n        i = e(376);\n      t.exports = function (t, n) {\n        if (t.nodeCount() <= 1) return [];\n        var e = (function (t, n) {\n            var e = new o(),\n              u = 0,\n              c = 0;\n            r.forEach(t.nodes(), function (t) {\n              e.setNode(t, { v: t, in: 0, out: 0 });\n            }),\n              r.forEach(t.edges(), function (t) {\n                var r = e.edge(t.v, t.w) || 0,\n                  o = n(t),\n                  i = r + o;\n                e.setEdge(t.v, t.w, i),\n                  (c = Math.max(c, (e.node(t.v).out += o))),\n                  (u = Math.max(u, (e.node(t.w).in += o)));\n              });\n            var f = r.range(c + u + 3).map(function () {\n                return new i();\n              }),\n              s = u + 1;\n            return (\n              r.forEach(e.nodes(), function (t) {\n                a(f, s, e.node(t));\n              }),\n              { graph: e, buckets: f, zeroIdx: s }\n            );\n          })(t, n || u),\n          f = (function (t, n, e) {\n            var r,\n              o = [],\n              i = n[n.length - 1],\n              u = n[0];\n            for (; t.nodeCount(); ) {\n              for (; (r = u.dequeue()); ) c(t, n, e, r);\n              for (; (r = i.dequeue()); ) c(t, n, e, r);\n              if (t.nodeCount())\n                for (var a = n.length - 2; a > 0; --a)\n                  if ((r = n[a].dequeue())) {\n                    o = o.concat(c(t, n, e, r, !0));\n                    break;\n                  }\n            }\n            return o;\n          })(e.graph, e.buckets, e.zeroIdx);\n        return r.flatten(\n          r.map(f, function (n) {\n            return t.outEdges(n.v, n.w);\n          }),\n          !0,\n        );\n      };\n      var u = r.constant(1);\n      function c(t, n, e, o, i) {\n        var u = i ? [] : void 0;\n        return (\n          r.forEach(t.inEdges(o.v), function (r) {\n            var o = t.edge(r),\n              c = t.node(r.v);\n            i && u.push({ v: r.v, w: r.w }), (c.out -= o), a(n, e, c);\n          }),\n          r.forEach(t.outEdges(o.v), function (r) {\n            var o = t.edge(r),\n              i = r.w,\n              u = t.node(i);\n            (u.in -= o), a(n, e, u);\n          }),\n          t.removeNode(o.v),\n          u\n        );\n      }\n      function a(t, n, e) {\n        e.out\n          ? e.in\n            ? t[e.out - e.in + n].enqueue(e)\n            : t[t.length - 1].enqueue(e)\n          : t[0].enqueue(e);\n      }\n    },\n    function (t, n) {\n      function e() {\n        var t = {};\n        (t._next = t._prev = t), (this._sentinel = t);\n      }\n      function r(t) {\n        (t._prev._next = t._next),\n          (t._next._prev = t._prev),\n          delete t._next,\n          delete t._prev;\n      }\n      function o(t, n) {\n        if (\"_next\" !== t && \"_prev\" !== t) return n;\n      }\n      (t.exports = e),\n        (e.prototype.dequeue = function () {\n          var t = this._sentinel,\n            n = t._prev;\n          if (n !== t) return r(n), n;\n        }),\n        (e.prototype.enqueue = function (t) {\n          var n = this._sentinel;\n          t._prev && t._next && r(t),\n            (t._next = n._next),\n            (n._next._prev = t),\n            (n._next = t),\n            (t._prev = n);\n        }),\n        (e.prototype.toString = function () {\n          for (var t = [], n = this._sentinel, e = n._prev; e !== n; )\n            t.push(JSON.stringify(e, o)), (e = e._prev);\n          return \"[\" + t.join(\", \") + \"]\";\n        });\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(19);\n      t.exports = {\n        run: function (t) {\n          (t.graph().dummyChains = []),\n            r.forEach(t.edges(), function (n) {\n              !(function (t, n) {\n                var e,\n                  r,\n                  i,\n                  u = n.v,\n                  c = t.node(u).rank,\n                  a = n.w,\n                  f = t.node(a).rank,\n                  s = n.name,\n                  p = t.edge(n),\n                  d = p.labelRank;\n                if (f === c + 1) return;\n                for (t.removeEdge(n), i = 0, ++c; c < f; ++i, ++c)\n                  (p.points = []),\n                    (r = {\n                      width: 0,\n                      height: 0,\n                      edgeLabel: p,\n                      edgeObj: n,\n                      rank: c,\n                    }),\n                    (e = o.addDummyNode(t, \"edge\", r, \"_d\")),\n                    c === d &&\n                      ((r.width = p.width),\n                      (r.height = p.height),\n                      (r.dummy = \"edge-label\"),\n                      (r.labelpos = p.labelpos)),\n                    t.setEdge(u, e, { weight: p.weight }, s),\n                    0 === i && t.graph().dummyChains.push(e),\n                    (u = e);\n                t.setEdge(u, a, { weight: p.weight }, s);\n              })(t, n);\n            });\n        },\n        undo: function (t) {\n          r.forEach(t.graph().dummyChains, function (n) {\n            var e,\n              r = t.node(n),\n              o = r.edgeLabel;\n            for (t.setEdge(r.edgeObj, o); r.dummy; )\n              (e = t.successors(n)[0]),\n                t.removeNode(n),\n                o.points.push({ x: r.x, y: r.y }),\n                \"edge-label\" === r.dummy &&\n                  ((o.x = r.x),\n                  (o.y = r.y),\n                  (o.width = r.width),\n                  (o.height = r.height)),\n                (n = e),\n                (r = t.node(n));\n          });\n        },\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(75).longestPath,\n        o = e(165),\n        i = e(379);\n      t.exports = function (t) {\n        switch (t.graph().ranker) {\n          case \"network-simplex\":\n            c(t);\n            break;\n          case \"tight-tree\":\n            !(function (t) {\n              r(t), o(t);\n            })(t);\n            break;\n          case \"longest-path\":\n            u(t);\n            break;\n          default:\n            c(t);\n        }\n      };\n      var u = r;\n      function c(t) {\n        i(t);\n      }\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(165),\n        i = e(75).slack,\n        u = e(75).longestPath,\n        c = e(23).alg.preorder,\n        a = e(23).alg.postorder,\n        f = e(19).simplify;\n      function s(t) {\n        (t = f(t)), u(t);\n        var n,\n          e = o(t);\n        for (h(e), p(e, t); (n = v(e)); ) g(e, t, n, y(e, t, n));\n      }\n      function p(t, n) {\n        var e = a(t, t.nodes());\n        (e = e.slice(0, e.length - 1)),\n          r.forEach(e, function (e) {\n            !(function (t, n, e) {\n              var r = t.node(e).parent;\n              t.edge(e, r).cutvalue = d(t, n, e);\n            })(t, n, e);\n          });\n      }\n      function d(t, n, e) {\n        var o = t.node(e).parent,\n          i = !0,\n          u = n.edge(e, o),\n          c = 0;\n        return (\n          u || ((i = !1), (u = n.edge(o, e))),\n          (c = u.weight),\n          r.forEach(n.nodeEdges(e), function (r) {\n            var u,\n              a,\n              f = r.v === e,\n              s = f ? r.w : r.v;\n            if (s !== o) {\n              var p = f === i,\n                d = n.edge(r).weight;\n              if (((c += p ? d : -d), (u = e), (a = s), t.hasEdge(u, a))) {\n                var h = t.edge(e, s).cutvalue;\n                c += p ? -h : h;\n              }\n            }\n          }),\n          c\n        );\n      }\n      function h(t, n) {\n        arguments.length < 2 && (n = t.nodes()[0]), l(t, {}, 1, n);\n      }\n      function l(t, n, e, o, i) {\n        var u = e,\n          c = t.node(o);\n        return (\n          (n[o] = !0),\n          r.forEach(t.neighbors(o), function (i) {\n            r.has(n, i) || (e = l(t, n, e, i, o));\n          }),\n          (c.low = u),\n          (c.lim = e++),\n          i ? (c.parent = i) : delete c.parent,\n          e\n        );\n      }\n      function v(t) {\n        return r.find(t.edges(), function (n) {\n          return t.edge(n).cutvalue < 0;\n        });\n      }\n      function y(t, n, e) {\n        var o = e.v,\n          u = e.w;\n        n.hasEdge(o, u) || ((o = e.w), (u = e.v));\n        var c = t.node(o),\n          a = t.node(u),\n          f = c,\n          s = !1;\n        c.lim > a.lim && ((f = a), (s = !0));\n        var p = r.filter(n.edges(), function (n) {\n          return s === b(t, t.node(n.v), f) && s !== b(t, t.node(n.w), f);\n        });\n        return r.minBy(p, function (t) {\n          return i(n, t);\n        });\n      }\n      function g(t, n, e, o) {\n        var i = e.v,\n          u = e.w;\n        t.removeEdge(i, u),\n          t.setEdge(o.v, o.w, {}),\n          h(t),\n          p(t, n),\n          (function (t, n) {\n            var e = r.find(t.nodes(), function (t) {\n                return !n.node(t).parent;\n              }),\n              o = c(t, e);\n            (o = o.slice(1)),\n              r.forEach(o, function (e) {\n                var r = t.node(e).parent,\n                  o = n.edge(e, r),\n                  i = !1;\n                o || ((o = n.edge(r, e)), (i = !0)),\n                  (n.node(e).rank =\n                    n.node(r).rank + (i ? o.minlen : -o.minlen));\n              });\n          })(t, n);\n      }\n      function b(t, n, e) {\n        return e.low <= n.lim && n.lim <= e.lim;\n      }\n      (t.exports = s),\n        (s.initLowLimValues = h),\n        (s.initCutValues = p),\n        (s.calcCutValue = d),\n        (s.leaveEdge = v),\n        (s.enterEdge = y),\n        (s.exchangeEdges = g);\n    },\n    function (t, n, e) {\n      var r = e(9);\n      t.exports = function (t) {\n        var n = (function (t) {\n          var n = {},\n            e = 0;\n          function o(i) {\n            var u = e;\n            r.forEach(t.children(i), o), (n[i] = { low: u, lim: e++ });\n          }\n          return r.forEach(t.children(), o), n;\n        })(t);\n        r.forEach(t.graph().dummyChains, function (e) {\n          for (\n            var r = t.node(e),\n              o = r.edgeObj,\n              i = (function (t, n, e, r) {\n                var o,\n                  i,\n                  u = [],\n                  c = [],\n                  a = Math.min(n[e].low, n[r].low),\n                  f = Math.max(n[e].lim, n[r].lim);\n                o = e;\n                do {\n                  (o = t.parent(o)), u.push(o);\n                } while (o && (n[o].low > a || f > n[o].lim));\n                (i = o), (o = r);\n                for (; (o = t.parent(o)) !== i; ) c.push(o);\n                return { path: u.concat(c.reverse()), lca: i };\n              })(t, n, o.v, o.w),\n              u = i.path,\n              c = i.lca,\n              a = 0,\n              f = u[a],\n              s = !0;\n            e !== o.w;\n\n          ) {\n            if (((r = t.node(e)), s)) {\n              for (; (f = u[a]) !== c && t.node(f).maxRank < r.rank; ) a++;\n              f === c && (s = !1);\n            }\n            if (!s) {\n              for (\n                ;\n                a < u.length - 1 && t.node((f = u[a + 1])).minRank <= r.rank;\n\n              )\n                a++;\n              f = u[a];\n            }\n            t.setParent(e, f), (e = t.successors(e)[0]);\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19);\n      t.exports = {\n        run: function (t) {\n          var n = o.addDummyNode(t, \"root\", {}, \"_root\"),\n            e = (function (t) {\n              var n = {};\n              return (\n                r.forEach(t.children(), function (e) {\n                  !(function e(o, i) {\n                    var u = t.children(o);\n                    u &&\n                      u.length &&\n                      r.forEach(u, function (t) {\n                        e(t, i + 1);\n                      });\n                    n[o] = i;\n                  })(e, 1);\n                }),\n                n\n              );\n            })(t),\n            i = r.max(r.values(e)) - 1,\n            u = 2 * i + 1;\n          (t.graph().nestingRoot = n),\n            r.forEach(t.edges(), function (n) {\n              t.edge(n).minlen *= u;\n            });\n          var c =\n            (function (t) {\n              return r.reduce(\n                t.edges(),\n                function (n, e) {\n                  return n + t.edge(e).weight;\n                },\n                0,\n              );\n            })(t) + 1;\n          r.forEach(t.children(), function (a) {\n            !(function t(n, e, i, u, c, a, f) {\n              var s = n.children(f);\n              if (!s.length)\n                return void (\n                  f !== e && n.setEdge(e, f, { weight: 0, minlen: i })\n                );\n              var p = o.addBorderNode(n, \"_bt\"),\n                d = o.addBorderNode(n, \"_bb\"),\n                h = n.node(f);\n              n.setParent(p, f),\n                (h.borderTop = p),\n                n.setParent(d, f),\n                (h.borderBottom = d),\n                r.forEach(s, function (r) {\n                  t(n, e, i, u, c, a, r);\n                  var o = n.node(r),\n                    s = o.borderTop ? o.borderTop : r,\n                    h = o.borderBottom ? o.borderBottom : r,\n                    l = o.borderTop ? u : 2 * u,\n                    v = s !== h ? 1 : c - a[f] + 1;\n                  n.setEdge(p, s, { weight: l, minlen: v, nestingEdge: !0 }),\n                    n.setEdge(h, d, { weight: l, minlen: v, nestingEdge: !0 });\n                }),\n                n.parent(f) || n.setEdge(e, p, { weight: 0, minlen: c + a[f] });\n            })(t, n, u, c, i, e, a);\n          }),\n            (t.graph().nodeRankFactor = u);\n        },\n        cleanup: function (t) {\n          var n = t.graph();\n          t.removeNode(n.nestingRoot),\n            delete n.nestingRoot,\n            r.forEach(t.edges(), function (n) {\n              t.edge(n).nestingEdge && t.removeEdge(n);\n            });\n        },\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19);\n      function i(t, n, e, r, i, u) {\n        var c = { width: 0, height: 0, rank: u, borderType: n },\n          a = i[n][u - 1],\n          f = o.addDummyNode(t, \"border\", c, e);\n        (i[n][u] = f), t.setParent(f, r), a && t.setEdge(a, f, { weight: 1 });\n      }\n      t.exports = function (t) {\n        r.forEach(t.children(), function n(e) {\n          var o = t.children(e),\n            u = t.node(e);\n          if ((o.length && r.forEach(o, n), r.has(u, \"minRank\"))) {\n            (u.borderLeft = []), (u.borderRight = []);\n            for (var c = u.minRank, a = u.maxRank + 1; c < a; ++c)\n              i(t, \"borderLeft\", \"_bl\", e, u, c),\n                i(t, \"borderRight\", \"_br\", e, u, c);\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      function o(t) {\n        r.forEach(t.nodes(), function (n) {\n          i(t.node(n));\n        }),\n          r.forEach(t.edges(), function (n) {\n            i(t.edge(n));\n          });\n      }\n      function i(t) {\n        var n = t.width;\n        (t.width = t.height), (t.height = n);\n      }\n      function u(t) {\n        t.y = -t.y;\n      }\n      function c(t) {\n        var n = t.x;\n        (t.x = t.y), (t.y = n);\n      }\n      t.exports = {\n        adjust: function (t) {\n          var n = t.graph().rankdir.toLowerCase();\n          (\"lr\" !== n && \"rl\" !== n) || o(t);\n        },\n        undo: function (t) {\n          var n = t.graph().rankdir.toLowerCase();\n          (\"bt\" !== n && \"rl\" !== n) ||\n            (function (t) {\n              r.forEach(t.nodes(), function (n) {\n                u(t.node(n));\n              }),\n                r.forEach(t.edges(), function (n) {\n                  var e = t.edge(n);\n                  r.forEach(e.points, u), r.has(e, \"y\") && u(e);\n                });\n            })(t);\n          (\"lr\" !== n && \"rl\" !== n) ||\n            (!(function (t) {\n              r.forEach(t.nodes(), function (n) {\n                c(t.node(n));\n              }),\n                r.forEach(t.edges(), function (n) {\n                  var e = t.edge(n);\n                  r.forEach(e.points, c), r.has(e, \"x\") && c(e);\n                });\n            })(t),\n            o(t));\n        },\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(385),\n        i = e(386),\n        u = e(387),\n        c = e(391),\n        a = e(392),\n        f = e(23).Graph,\n        s = e(19);\n      function p(t, n, e) {\n        return r.map(n, function (n) {\n          return c(t, n, e);\n        });\n      }\n      function d(t, n) {\n        var e = new f();\n        r.forEach(t, function (t) {\n          var o = t.graph().root,\n            i = u(t, o, e, n);\n          r.forEach(i.vs, function (n, e) {\n            t.node(n).order = e;\n          }),\n            a(t, e, i.vs);\n        });\n      }\n      function h(t, n) {\n        r.forEach(n, function (n) {\n          r.forEach(n, function (n, e) {\n            t.node(n).order = e;\n          });\n        });\n      }\n      t.exports = function (t) {\n        var n = s.maxRank(t),\n          e = p(t, r.range(1, n + 1), \"inEdges\"),\n          u = p(t, r.range(n - 1, -1, -1), \"outEdges\"),\n          c = o(t);\n        h(t, c);\n        for (\n          var a, f = Number.POSITIVE_INFINITY, l = 0, v = 0;\n          v < 4;\n          ++l, ++v\n        ) {\n          d(l % 2 ? e : u, l % 4 >= 2), (c = s.buildLayerMatrix(t));\n          var y = i(t, c);\n          y < f && ((v = 0), (a = r.cloneDeep(c)), (f = y));\n        }\n        h(t, a);\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      t.exports = function (t) {\n        var n = {},\n          e = r.filter(t.nodes(), function (n) {\n            return !t.children(n).length;\n          }),\n          o = r.max(\n            r.map(e, function (n) {\n              return t.node(n).rank;\n            }),\n          ),\n          i = r.map(r.range(o + 1), function () {\n            return [];\n          });\n        var u = r.sortBy(e, function (n) {\n          return t.node(n).rank;\n        });\n        return (\n          r.forEach(u, function e(o) {\n            if (r.has(n, o)) return;\n            n[o] = !0;\n            var u = t.node(o);\n            i[u.rank].push(o), r.forEach(t.successors(o), e);\n          }),\n          i\n        );\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      function o(t, n, e) {\n        for (\n          var o = r.zipObject(\n              e,\n              r.map(e, function (t, n) {\n                return n;\n              }),\n            ),\n            i = r.flatten(\n              r.map(n, function (n) {\n                return r.sortBy(\n                  r.map(t.outEdges(n), function (n) {\n                    return { pos: o[n.w], weight: t.edge(n).weight };\n                  }),\n                  \"pos\",\n                );\n              }),\n              !0,\n            ),\n            u = 1;\n          u < e.length;\n\n        )\n          u <<= 1;\n        var c = 2 * u - 1;\n        u -= 1;\n        var a = r.map(new Array(c), function () {\n            return 0;\n          }),\n          f = 0;\n        return (\n          r.forEach(\n            i.forEach(function (t) {\n              var n = t.pos + u;\n              a[n] += t.weight;\n              for (var e = 0; n > 0; )\n                n % 2 && (e += a[n + 1]), (a[(n = (n - 1) >> 1)] += t.weight);\n              f += t.weight * e;\n            }),\n          ),\n          f\n        );\n      }\n      t.exports = function (t, n) {\n        for (var e = 0, r = 1; r < n.length; ++r) e += o(t, n[r - 1], n[r]);\n        return e;\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(388),\n        i = e(389),\n        u = e(390);\n      t.exports = function t(n, e, c, a) {\n        var f = n.children(e),\n          s = n.node(e),\n          p = s ? s.borderLeft : void 0,\n          d = s ? s.borderRight : void 0,\n          h = {};\n        p &&\n          (f = r.filter(f, function (t) {\n            return t !== p && t !== d;\n          }));\n        var l = o(n, f);\n        r.forEach(l, function (e) {\n          if (n.children(e.v).length) {\n            var o = t(n, e.v, c, a);\n            (h[e.v] = o),\n              r.has(o, \"barycenter\") &&\n                ((i = e),\n                (u = o),\n                r.isUndefined(i.barycenter)\n                  ? ((i.barycenter = u.barycenter), (i.weight = u.weight))\n                  : ((i.barycenter =\n                      (i.barycenter * i.weight + u.barycenter * u.weight) /\n                      (i.weight + u.weight)),\n                    (i.weight += u.weight)));\n          }\n          var i, u;\n        });\n        var v = i(l, c);\n        !(function (t, n) {\n          r.forEach(t, function (t) {\n            t.vs = r.flatten(\n              t.vs.map(function (t) {\n                return n[t] ? n[t].vs : t;\n              }),\n              !0,\n            );\n          });\n        })(v, h);\n        var y = u(v, a);\n        if (\n          p &&\n          ((y.vs = r.flatten([p, y.vs, d], !0)), n.predecessors(p).length)\n        ) {\n          var g = n.node(n.predecessors(p)[0]),\n            b = n.node(n.predecessors(d)[0]);\n          r.has(y, \"barycenter\") || ((y.barycenter = 0), (y.weight = 0)),\n            (y.barycenter =\n              (y.barycenter * y.weight + g.order + b.order) / (y.weight + 2)),\n            (y.weight += 2);\n        }\n        return y;\n      };\n    },\n    function (t, n, e) {\n      var r = e(9);\n      t.exports = function (t, n) {\n        return r.map(n, function (n) {\n          var e = t.inEdges(n);\n          if (e.length) {\n            var o = r.reduce(\n              e,\n              function (n, e) {\n                var r = t.edge(e),\n                  o = t.node(e.v);\n                return {\n                  sum: n.sum + r.weight * o.order,\n                  weight: n.weight + r.weight,\n                };\n              },\n              { sum: 0, weight: 0 },\n            );\n            return { v: n, barycenter: o.sum / o.weight, weight: o.weight };\n          }\n          return { v: n };\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9);\n      t.exports = function (t, n) {\n        var e = {};\n        return (\n          r.forEach(t, function (t, n) {\n            var o = (e[t.v] = {\n              indegree: 0,\n              in: [],\n              out: [],\n              vs: [t.v],\n              i: n,\n            });\n            r.isUndefined(t.barycenter) ||\n              ((o.barycenter = t.barycenter), (o.weight = t.weight));\n          }),\n          r.forEach(n.edges(), function (t) {\n            var n = e[t.v],\n              o = e[t.w];\n            r.isUndefined(n) ||\n              r.isUndefined(o) ||\n              (o.indegree++, n.out.push(e[t.w]));\n          }),\n          (function (t) {\n            var n = [];\n            function e(t) {\n              return function (n) {\n                n.merged ||\n                  ((r.isUndefined(n.barycenter) ||\n                    r.isUndefined(t.barycenter) ||\n                    n.barycenter >= t.barycenter) &&\n                    (function (t, n) {\n                      var e = 0,\n                        r = 0;\n                      t.weight &&\n                        ((e += t.barycenter * t.weight), (r += t.weight));\n                      n.weight &&\n                        ((e += n.barycenter * n.weight), (r += n.weight));\n                      (t.vs = n.vs.concat(t.vs)),\n                        (t.barycenter = e / r),\n                        (t.weight = r),\n                        (t.i = Math.min(n.i, t.i)),\n                        (n.merged = !0);\n                    })(t, n));\n              };\n            }\n            function o(n) {\n              return function (e) {\n                e.in.push(n), 0 == --e.indegree && t.push(e);\n              };\n            }\n            for (; t.length; ) {\n              var i = t.pop();\n              n.push(i),\n                r.forEach(i.in.reverse(), e(i)),\n                r.forEach(i.out, o(i));\n            }\n            return r.map(\n              r.filter(n, function (t) {\n                return !t.merged;\n              }),\n              function (t) {\n                return r.pick(t, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n              },\n            );\n          })(\n            r.filter(e, function (t) {\n              return !t.indegree;\n            }),\n          )\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19);\n      function i(t, n, e) {\n        for (var o; n.length && (o = r.last(n)).i <= e; )\n          n.pop(), t.push(o.vs), e++;\n        return e;\n      }\n      t.exports = function (t, n) {\n        var e = o.partition(t, function (t) {\n            return r.has(t, \"barycenter\");\n          }),\n          u = e.lhs,\n          c = r.sortBy(e.rhs, function (t) {\n            return -t.i;\n          }),\n          a = [],\n          f = 0,\n          s = 0,\n          p = 0;\n        u.sort(\n          ((d = !!n),\n          function (t, n) {\n            return t.barycenter < n.barycenter\n              ? -1\n              : t.barycenter > n.barycenter\n              ? 1\n              : d\n              ? n.i - t.i\n              : t.i - n.i;\n          }),\n        ),\n          (p = i(a, c, p)),\n          r.forEach(u, function (t) {\n            (p += t.vs.length),\n              a.push(t.vs),\n              (f += t.barycenter * t.weight),\n              (s += t.weight),\n              (p = i(a, c, p));\n          });\n        var d;\n        var h = { vs: r.flatten(a, !0) };\n        s && ((h.barycenter = f / s), (h.weight = s));\n        return h;\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(23).Graph;\n      t.exports = function (t, n, e) {\n        var i = (function (t) {\n            var n;\n            for (; t.hasNode((n = r.uniqueId(\"_root\"))); );\n            return n;\n          })(t),\n          u = new o({ compound: !0 })\n            .setGraph({ root: i })\n            .setDefaultNodeLabel(function (n) {\n              return t.node(n);\n            });\n        return (\n          r.forEach(t.nodes(), function (o) {\n            var c = t.node(o),\n              a = t.parent(o);\n            (c.rank === n || (c.minRank <= n && n <= c.maxRank)) &&\n              (u.setNode(o),\n              u.setParent(o, a || i),\n              r.forEach(t[e](o), function (n) {\n                var e = n.v === o ? n.w : n.v,\n                  i = u.edge(e, o),\n                  c = r.isUndefined(i) ? 0 : i.weight;\n                u.setEdge(e, o, { weight: t.edge(n).weight + c });\n              }),\n              r.has(c, \"minRank\") &&\n                u.setNode(o, {\n                  borderLeft: c.borderLeft[n],\n                  borderRight: c.borderRight[n],\n                }));\n          }),\n          u\n        );\n      };\n    },\n    function (t, n, e) {\n      var r = e(9);\n      t.exports = function (t, n, e) {\n        var o,\n          i = {};\n        r.forEach(e, function (e) {\n          for (var r, u, c = t.parent(e); c; ) {\n            if (\n              ((r = t.parent(c))\n                ? ((u = i[r]), (i[r] = c))\n                : ((u = o), (o = c)),\n              u && u !== c)\n            )\n              return void n.setEdge(u, c);\n            c = r;\n          }\n        });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(19),\n        i = e(394).positionX;\n      t.exports = function (t) {\n        (function (t) {\n          var n = o.buildLayerMatrix(t),\n            e = t.graph().ranksep,\n            i = 0;\n          r.forEach(n, function (n) {\n            var o = r.max(\n              r.map(n, function (n) {\n                return t.node(n).height;\n              }),\n            );\n            r.forEach(n, function (n) {\n              t.node(n).y = i + o / 2;\n            }),\n              (i += o + e);\n          });\n        })((t = o.asNonCompoundGraph(t))),\n          r.forEach(i(t), function (n, e) {\n            t.node(e).x = n;\n          });\n      };\n    },\n    function (t, n, e) {\n      \"use strict\";\n      var r = e(9),\n        o = e(23).Graph,\n        i = e(19);\n      function u(t, n) {\n        var e = {};\n        return (\n          r.reduce(n, function (n, o) {\n            var i = 0,\n              u = 0,\n              c = n.length,\n              f = r.last(o);\n            return (\n              r.forEach(o, function (n, s) {\n                var p = (function (t, n) {\n                    if (t.node(n).dummy)\n                      return r.find(t.predecessors(n), function (n) {\n                        return t.node(n).dummy;\n                      });\n                  })(t, n),\n                  d = p ? t.node(p).order : c;\n                (p || n === f) &&\n                  (r.forEach(o.slice(u, s + 1), function (n) {\n                    r.forEach(t.predecessors(n), function (r) {\n                      var o = t.node(r),\n                        u = o.order;\n                      !(u < i || d < u) ||\n                        (o.dummy && t.node(n).dummy) ||\n                        a(e, r, n);\n                    });\n                  }),\n                  (u = s + 1),\n                  (i = d));\n              }),\n              o\n            );\n          }),\n          e\n        );\n      }\n      function c(t, n) {\n        var e = {};\n        function o(n, o, i, u, c) {\n          var f;\n          r.forEach(r.range(o, i), function (o) {\n            (f = n[o]),\n              t.node(f).dummy &&\n                r.forEach(t.predecessors(f), function (n) {\n                  var r = t.node(n);\n                  r.dummy && (r.order < u || r.order > c) && a(e, n, f);\n                });\n          });\n        }\n        return (\n          r.reduce(n, function (n, e) {\n            var i,\n              u = -1,\n              c = 0;\n            return (\n              r.forEach(e, function (r, a) {\n                if (\"border\" === t.node(r).dummy) {\n                  var f = t.predecessors(r);\n                  f.length &&\n                    ((i = t.node(f[0]).order),\n                    o(e, c, a, u, i),\n                    (c = a),\n                    (u = i));\n                }\n                o(e, c, e.length, i, n.length);\n              }),\n              e\n            );\n          }),\n          e\n        );\n      }\n      function a(t, n, e) {\n        if (n > e) {\n          var r = n;\n          (n = e), (e = r);\n        }\n        var o = t[n];\n        o || (t[n] = o = {}), (o[e] = !0);\n      }\n      function f(t, n, e) {\n        if (n > e) {\n          var o = n;\n          (n = e), (e = o);\n        }\n        return r.has(t[n], e);\n      }\n      function s(t, n, e, o) {\n        var i = {},\n          u = {},\n          c = {};\n        return (\n          r.forEach(n, function (t) {\n            r.forEach(t, function (t, n) {\n              (i[t] = t), (u[t] = t), (c[t] = n);\n            });\n          }),\n          r.forEach(n, function (t) {\n            var n = -1;\n            r.forEach(t, function (t) {\n              var a = o(t);\n              if (a.length)\n                for (\n                  var s =\n                      ((a = r.sortBy(a, function (t) {\n                        return c[t];\n                      })).length -\n                        1) /\n                      2,\n                    p = Math.floor(s),\n                    d = Math.ceil(s);\n                  p <= d;\n                  ++p\n                ) {\n                  var h = a[p];\n                  u[t] === t &&\n                    n < c[h] &&\n                    !f(e, t, h) &&\n                    ((u[h] = t), (u[t] = i[t] = i[h]), (n = c[h]));\n                }\n            });\n          }),\n          { root: i, align: u }\n        );\n      }\n      function p(t, n, e, i, u) {\n        var c = {},\n          a = (function (t, n, e, i) {\n            var u = new o(),\n              c = t.graph(),\n              a = (function (t, n, e) {\n                return function (o, i, u) {\n                  var c,\n                    a = o.node(i),\n                    f = o.node(u),\n                    s = 0;\n                  if (((s += a.width / 2), r.has(a, \"labelpos\")))\n                    switch (a.labelpos.toLowerCase()) {\n                      case \"l\":\n                        c = -a.width / 2;\n                        break;\n                      case \"r\":\n                        c = a.width / 2;\n                    }\n                  if (\n                    (c && (s += e ? c : -c),\n                    (c = 0),\n                    (s += (a.dummy ? n : t) / 2),\n                    (s += (f.dummy ? n : t) / 2),\n                    (s += f.width / 2),\n                    r.has(f, \"labelpos\"))\n                  )\n                    switch (f.labelpos.toLowerCase()) {\n                      case \"l\":\n                        c = f.width / 2;\n                        break;\n                      case \"r\":\n                        c = -f.width / 2;\n                    }\n                  return c && (s += e ? c : -c), (c = 0), s;\n                };\n              })(c.nodesep, c.edgesep, i);\n            return (\n              r.forEach(n, function (n) {\n                var o;\n                r.forEach(n, function (n) {\n                  var r = e[n];\n                  if ((u.setNode(r), o)) {\n                    var i = e[o],\n                      c = u.edge(i, r);\n                    u.setEdge(i, r, Math.max(a(t, n, o), c || 0));\n                  }\n                  o = n;\n                });\n              }),\n              u\n            );\n          })(t, n, e, u),\n          f = u ? \"borderLeft\" : \"borderRight\";\n        function s(t, n) {\n          for (var e = a.nodes(), r = e.pop(), o = {}; r; )\n            o[r] ? t(r) : ((o[r] = !0), e.push(r), (e = e.concat(n(r)))),\n              (r = e.pop());\n        }\n        return (\n          s(function (t) {\n            c[t] = a.inEdges(t).reduce(function (t, n) {\n              return Math.max(t, c[n.v] + a.edge(n));\n            }, 0);\n          }, a.predecessors.bind(a)),\n          s(function (n) {\n            var e = a.outEdges(n).reduce(function (t, n) {\n                return Math.min(t, c[n.w] - a.edge(n));\n              }, Number.POSITIVE_INFINITY),\n              r = t.node(n);\n            e !== Number.POSITIVE_INFINITY &&\n              r.borderType !== f &&\n              (c[n] = Math.max(c[n], e));\n          }, a.successors.bind(a)),\n          r.forEach(i, function (t) {\n            c[t] = c[e[t]];\n          }),\n          c\n        );\n      }\n      function d(t, n) {\n        return r.minBy(r.values(n), function (n) {\n          var e = Number.NEGATIVE_INFINITY,\n            o = Number.POSITIVE_INFINITY;\n          return (\n            r.forIn(n, function (n, r) {\n              var i =\n                (function (t, n) {\n                  return t.node(n).width;\n                })(t, r) / 2;\n              (e = Math.max(n + i, e)), (o = Math.min(n - i, o));\n            }),\n            e - o\n          );\n        });\n      }\n      function h(t, n) {\n        var e = r.values(n),\n          o = r.min(e),\n          i = r.max(e);\n        r.forEach([\"u\", \"d\"], function (e) {\n          r.forEach([\"l\", \"r\"], function (u) {\n            var c,\n              a = e + u,\n              f = t[a];\n            if (f !== n) {\n              var s = r.values(f);\n              (c = \"l\" === u ? o - r.min(s) : i - r.max(s)) &&\n                (t[a] = r.mapValues(f, function (t) {\n                  return t + c;\n                }));\n            }\n          });\n        });\n      }\n      function l(t, n) {\n        return r.mapValues(t.ul, function (e, o) {\n          if (n) return t[n.toLowerCase()][o];\n          var i = r.sortBy(r.map(t, o));\n          return (i[1] + i[2]) / 2;\n        });\n      }\n      t.exports = {\n        positionX: function (t) {\n          var n,\n            e = i.buildLayerMatrix(t),\n            o = r.merge(u(t, e), c(t, e)),\n            a = {};\n          r.forEach([\"u\", \"d\"], function (i) {\n            (n = \"u\" === i ? e : r.values(e).reverse()),\n              r.forEach([\"l\", \"r\"], function (e) {\n                \"r\" === e &&\n                  (n = r.map(n, function (t) {\n                    return r.values(t).reverse();\n                  }));\n                var u = (\"u\" === i ? t.predecessors : t.successors).bind(t),\n                  c = s(t, n, o, u),\n                  f = p(t, n, c.root, c.align, \"r\" === e);\n                \"r\" === e &&\n                  (f = r.mapValues(f, function (t) {\n                    return -t;\n                  })),\n                  (a[i + e] = f);\n              });\n          });\n          var f = d(t, a);\n          return h(a, f), l(a, t.graph().align);\n        },\n        findType1Conflicts: u,\n        findType2Conflicts: c,\n        addConflict: a,\n        hasConflict: f,\n        verticalAlignment: s,\n        horizontalCompaction: p,\n        alignCoordinates: h,\n        findSmallestWidthAlignment: d,\n        balance: l,\n      };\n    },\n    function (t, n, e) {\n      var r = e(9),\n        o = e(19),\n        i = e(23).Graph;\n      t.exports = {\n        debugOrdering: function (t) {\n          var n = o.buildLayerMatrix(t),\n            e = new i({ compound: !0, multigraph: !0 }).setGraph({});\n          return (\n            r.forEach(t.nodes(), function (n) {\n              e.setNode(n, { label: n }),\n                e.setParent(n, \"layer\" + t.node(n).rank);\n            }),\n            r.forEach(t.edges(), function (t) {\n              e.setEdge(t.v, t.w, {}, t.name);\n            }),\n            r.forEach(n, function (t, n) {\n              var o = \"layer\" + n;\n              e.setNode(o, { rank: \"same\" }),\n                r.reduce(t, function (t, n) {\n                  return e.setEdge(t, n, { style: \"invis\" }), n;\n                });\n            }),\n            e\n          );\n        },\n      };\n    },\n    function (t, n) {\n      t.exports = \"0.8.5\";\n    },\n  ]).default;\n});\n//# sourceMappingURL=dagreLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/forceAtlas2Layout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function i(r) {\n      if (e[r]) return e[r].exports;\n      var n = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(n.exports, n, n.exports, i), (n.l = !0), n.exports;\n    }\n    return (\n      (i.m = t),\n      (i.c = e),\n      (i.d = function (t, e, r) {\n        i.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (i.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (i.t = function (t, e) {\n        if ((1 & e && (t = i(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (i.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var n in t)\n            i.d(\n              r,\n              n,\n              function (e) {\n                return t[e];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (i.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return i.d(e, \"a\", e), e;\n      }),\n      (i.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (i.p = \"\"),\n      i((i.s = 397))\n    );\n  })({\n    10: function (t, e, i) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, i, r) {\n                void 0 === r && (r = i),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[i];\n                    },\n                  });\n              }\n            : function (t, e, i, r) {\n                void 0 === r && (r = i), (t[r] = e[i]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var i in t)\n              \"default\" === i ||\n                Object.prototype.hasOwnProperty.call(e, i) ||\n                r(e, t, i);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        n(i(11), e),\n        n(i(12), e),\n        n(i(13), e),\n        n(i(14), e),\n        n(i(15), e),\n        n(i(16), e);\n    },\n    11: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        n,\n        o = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(o, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = r(t));\n        });\n    },\n    12: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var i = parseFloat(t);\n        return e.isNaN(i) ? t : i;\n      };\n    },\n    14: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, i) {\n        for (var r = [], n = 0; n < t; n++) r[n] = 0;\n        return i\n          ? (i.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], i = t.length, r = 0; r < i; r += 1) {\n          e[r] = [];\n          for (var n = 0; n < i; n += 1)\n            r === n\n              ? (e[r][n] = 0)\n              : 0 !== t[r][n] && t[r][n]\n              ? (e[r][n] = t[r][n])\n              : (e[r][n] = 1 / 0);\n        }\n        for (var o = 0; o < i; o += 1)\n          for (r = 0; r < i; r += 1)\n            for (n = 0; n < i; n += 1)\n              e[r][n] > e[r][o] + e[o][n] && (e[r][n] = e[r][o] + e[o][n]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var i = t.nodes,\n          r = t.edges,\n          n = [],\n          o = {};\n        if (!i) throw new Error(\"invalid nodes data!\");\n        return (\n          i &&\n            i.forEach(function (t, e) {\n              o[t.id] = e;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var i = t.source,\n                r = t.target,\n                s = o[i],\n                u = o[r];\n              (n[s][u] = 1), e || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var i = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              i.push(r);\n          }),\n          i\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, i) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], i)) return;\n            return !!i(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, i) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var e, i = 1, r = arguments.length; i < r; i++)\n                for (var n in (e = arguments[i]))\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              i.push(t);\n            }),\n            i.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var o = n({}, t);\n          return (\n            Object.keys(o).forEach(function (t) {\n              o[t] = e.clone(o[t]);\n            }),\n            o\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    175: function (t, e, i) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var i in e)\n                  Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function i() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((i.prototype = e.prototype), new i()));\n          }),\n        o =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.ForceAtlas2Layout = void 0);\n      var s = i(7),\n        u = i(10),\n        h = o(i(398)),\n        a = o(i(399)),\n        c = o(i(400)),\n        d = (function (t) {\n          function e(e) {\n            var i = t.call(this) || this;\n            return (\n              (i.center = [0, 0]),\n              (i.width = 300),\n              (i.height = 300),\n              (i.nodes = []),\n              (i.edges = []),\n              (i.kr = 5),\n              (i.kg = 1),\n              (i.mode = \"normal\"),\n              (i.preventOverlap = !1),\n              (i.dissuadeHubs = !1),\n              (i.barnesHut = !1),\n              (i.maxIteration = 0),\n              (i.ks = 0.1),\n              (i.ksmax = 10),\n              (i.tao = 0.1),\n              (i.onLayoutEnd = function () {}),\n              (i.prune = !1),\n              i.updateCfg(e),\n              i\n            );\n          }\n          return (\n            n(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.execute = function () {\n              var t = this.nodes,\n                e = this.maxIteration,\n                i = this.onLayoutEnd,\n                r = this.prune;\n              this.width ||\n                \"undefined\" == typeof window ||\n                (this.width = window.innerWidth),\n                this.height ||\n                  \"undefined\" == typeof window ||\n                  (this.height = window.innerHeight);\n              for (var n = [], o = t.length, s = 0; s < o; s += 1) {\n                var h = t[s],\n                  a = 10,\n                  c = 10;\n                u.isNumber(h.size) && ((a = h.size), (c = h.size)),\n                  u.isArray(h.size) &&\n                    (isNaN(h.size[0]) || (a = h.size[0]),\n                    isNaN(h.size[1]) || (c = h.size[1])),\n                  this.getWidth &&\n                    !isNaN(this.getWidth(h)) &&\n                    (c = this.getWidth(h)),\n                  this.getHeight &&\n                    !isNaN(this.getHeight(h)) &&\n                    (a = this.getHeight(h));\n                var d = Math.max(a, c);\n                n.push(d);\n              }\n              !this.barnesHut && o > 250 && (this.barnesHut = !0),\n                !this.prune && o > 100 && (this.prune = !0),\n                0 !== this.maxIteration || this.prune\n                  ? 0 === this.maxIteration &&\n                    r &&\n                    ((e = 100),\n                    o <= 200 && o > 100 ? (e = 500) : o > 200 && (e = 950),\n                    (this.maxIteration = e))\n                  : ((e = 250),\n                    o <= 200 && o > 100 ? (e = 1e3) : o > 200 && (e = 1200),\n                    (this.maxIteration = e)),\n                this.kr ||\n                  ((this.kr = 50),\n                  o > 100 && o <= 500\n                    ? (this.kr = 20)\n                    : o > 500 && (this.kr = 1)),\n                this.kg ||\n                  ((this.kg = 20),\n                  o > 100 && o <= 500\n                    ? (this.kg = 10)\n                    : o > 500 && (this.kg = 1)),\n                (this.nodes = this.updateNodesByForces(n)),\n                i();\n            }),\n            (e.prototype.updateNodesByForces = function (t) {\n              for (\n                var e = this.nodes,\n                  i = this.edges,\n                  r = this.maxIteration,\n                  n = i.filter(function (t) {\n                    return t.source !== t.target;\n                  }),\n                  o = e.length,\n                  s = n.length,\n                  u = [],\n                  h = {},\n                  a = {},\n                  c = [],\n                  d = 0;\n                d < o;\n                d += 1\n              )\n                (h[e[d].id] = d),\n                  (u[d] = 0),\n                  (void 0 === e[d].x || isNaN(e[d].x)) &&\n                    (e[d].x = 1e3 * Math.random()),\n                  (void 0 === e[d].y || isNaN(e[d].y)) &&\n                    (e[d].y = 1e3 * Math.random()),\n                  c.push({ x: e[d].x, y: e[d].y });\n              for (d = 0; d < s; d += 1) {\n                for (\n                  var f = void 0, p = void 0, l = 0, y = 0, g = 0;\n                  g < o;\n                  g += 1\n                )\n                  e[g].id === n[d].source\n                    ? ((f = e[g]), (l = g))\n                    : e[g].id === n[d].target && ((p = e[g]), (y = g)),\n                    (a[d] = { sourceIdx: l, targetIdx: y });\n                f && (u[h[f.id]] += 1), p && (u[h[p.id]] += 1);\n              }\n              var v = r;\n              if (((e = this.iterate(v, h, a, s, u, t)), this.prune)) {\n                for (g = 0; g < s; g += 1)\n                  u[a[g].sourceIdx] <= 1\n                    ? ((e[a[g].sourceIdx].x = e[a[g].targetIdx].x),\n                      (e[a[g].sourceIdx].y = e[a[g].targetIdx].y))\n                    : u[a[g].targetIdx] <= 1 &&\n                      ((e[a[g].targetIdx].x = e[a[g].sourceIdx].x),\n                      (e[a[g].targetIdx].y = e[a[g].sourceIdx].y));\n                (this.prune = !1),\n                  (this.barnesHut = !1),\n                  (v = 100),\n                  (e = this.iterate(v, h, a, s, u, t));\n              }\n              return e;\n            }),\n            (e.prototype.iterate = function (t, e, i, r, n, o) {\n              for (\n                var s = this.nodes,\n                  u = this.kr,\n                  a = this.preventOverlap,\n                  c = this.barnesHut,\n                  d = s.length,\n                  f = 0,\n                  p = t,\n                  l = [],\n                  y = [],\n                  g = [],\n                  v = 0;\n                v < d;\n                v += 1\n              )\n                if (((l[2 * v] = 0), (l[2 * v + 1] = 0), c)) {\n                  var x = {\n                    id: v,\n                    rx: s[v].x,\n                    ry: s[v].y,\n                    mass: 1,\n                    g: u,\n                    degree: n[v],\n                  };\n                  g[v] = new h.default(x);\n                }\n              for (; p > 0; ) {\n                for (v = 0; v < d; v += 1)\n                  (y[2 * v] = l[2 * v]),\n                    (y[2 * v + 1] = l[2 * v + 1]),\n                    (l[2 * v] = 0),\n                    (l[2 * v + 1] = 0);\n                (l = this.getAttrForces(p, 50, r, e, i, n, o, l)),\n                  (l =\n                    c && ((a && p > 50) || !a)\n                      ? this.getOptRepGraForces(l, g, n)\n                      : this.getRepGraForces(p, 50, l, 100, o, n));\n                var m = this.updatePos(l, y, f, n);\n                (s = m.nodes), (f = m.sg), p--, this.tick && this.tick();\n              }\n              return s;\n            }),\n            (e.prototype.getAttrForces = function (t, e, i, r, n, o, s, u) {\n              for (\n                var h = this.nodes,\n                  a = this.preventOverlap,\n                  c = this.dissuadeHubs,\n                  d = this.mode,\n                  f = this.prune,\n                  p = 0;\n                p < i;\n                p += 1\n              ) {\n                var l = h[n[p].sourceIdx],\n                  y = n[p].sourceIdx,\n                  g = h[n[p].targetIdx],\n                  v = n[p].targetIdx;\n                if (!f || !(o[y] <= 1 || o[v] <= 1)) {\n                  var x = [g.x - l.x, g.y - l.y],\n                    m = Math.hypot(x[0], x[1]);\n                  (m = m < 1e-4 ? 1e-4 : m),\n                    (x[0] = x[0] / m),\n                    (x[1] = x[1] / m),\n                    a && t < e && (m = m - s[y] - s[v]);\n                  var b = m,\n                    _ = b;\n                  \"linlog\" === d && (_ = b = Math.log(1 + m)),\n                    c && ((b = m / o[y]), (_ = m / o[v])),\n                    a && t < e && m <= 0\n                      ? ((b = 0), (_ = 0))\n                      : a && t < e && m > 0 && ((b = m), (_ = m)),\n                    (u[2 * r[l.id]] += b * x[0]),\n                    (u[2 * r[g.id]] -= _ * x[0]),\n                    (u[2 * r[l.id] + 1] += b * x[1]),\n                    (u[2 * r[g.id] + 1] -= _ * x[1]);\n                }\n              }\n              return u;\n            }),\n            (e.prototype.getRepGraForces = function (t, e, i, r, n, o) {\n              for (\n                var s = this.nodes,\n                  u = this.preventOverlap,\n                  h = this.kr,\n                  a = this.kg,\n                  c = this.center,\n                  d = this.prune,\n                  f = s.length,\n                  p = 0;\n                p < f;\n                p += 1\n              ) {\n                for (var l = p + 1; l < f; l += 1)\n                  if (!d || !(o[p] <= 1 || o[l] <= 1)) {\n                    var y = [s[l].x - s[p].x, s[l].y - s[p].y],\n                      g = Math.hypot(y[0], y[1]);\n                    (g = g < 1e-4 ? 1e-4 : g),\n                      (y[0] = y[0] / g),\n                      (y[1] = y[1] / g),\n                      u && t < e && (g = g - n[p] - n[l]);\n                    var v = (h * (o[p] + 1) * (o[l] + 1)) / g;\n                    u && t < e && g < 0\n                      ? (v = r * (o[p] + 1) * (o[l] + 1))\n                      : u && t < e && 0 === g\n                      ? (v = 0)\n                      : u &&\n                        t < e &&\n                        g > 0 &&\n                        (v = (h * (o[p] + 1) * (o[l] + 1)) / g),\n                      (i[2 * p] -= v * y[0]),\n                      (i[2 * l] += v * y[0]),\n                      (i[2 * p + 1] -= v * y[1]),\n                      (i[2 * l + 1] += v * y[1]);\n                  }\n                var x = [s[p].x - c[0], s[p].y - c[1]],\n                  m = Math.hypot(x[0], x[1]);\n                (x[0] = x[0] / m), (x[1] = x[1] / m);\n                var b = a * (o[p] + 1);\n                (i[2 * p] -= b * x[0]), (i[2 * p + 1] -= b * x[1]);\n              }\n              return i;\n            }),\n            (e.prototype.getOptRepGraForces = function (t, e, i) {\n              for (\n                var r = this.nodes,\n                  n = this.kg,\n                  o = this.center,\n                  s = this.prune,\n                  u = r.length,\n                  h = 9e10,\n                  d = -9e10,\n                  f = 9e10,\n                  p = -9e10,\n                  l = 0;\n                l < u;\n                l += 1\n              )\n                (s && i[l] <= 1) ||\n                  (e[l].setPos(r[l].x, r[l].y),\n                  r[l].x >= d && (d = r[l].x),\n                  r[l].x <= h && (h = r[l].x),\n                  r[l].y >= p && (p = r[l].y),\n                  r[l].y <= f && (f = r[l].y));\n              var y = {\n                  xmid: (d + h) / 2,\n                  ymid: (p + f) / 2,\n                  length: Math.max(d - h, p - f),\n                  massCenter: o,\n                  mass: u,\n                },\n                g = new a.default(y),\n                v = new c.default(g);\n              for (l = 0; l < u; l += 1)\n                (s && i[l] <= 1) || (e[l].in(g) && v.insert(e[l]));\n              for (l = 0; l < u; l += 1)\n                if (!(s && i[l] <= 1)) {\n                  e[l].resetForce(),\n                    v.updateForce(e[l]),\n                    (t[2 * l] -= e[l].fx),\n                    (t[2 * l + 1] -= e[l].fy);\n                  var x = [r[l].x - o[0], r[l].y - o[1]],\n                    m = Math.hypot(x[0], x[1]);\n                  (m = m < 1e-4 ? 1e-4 : m),\n                    (x[0] = x[0] / m),\n                    (x[1] = x[1] / m);\n                  var b = n * (i[l] + 1);\n                  (t[2 * l] -= b * x[0]), (t[2 * l + 1] -= b * x[1]);\n                }\n              return t;\n            }),\n            (e.prototype.updatePos = function (t, e, i, r) {\n              for (\n                var n = this.nodes,\n                  o = this.ks,\n                  s = this.tao,\n                  u = this.prune,\n                  h = this.ksmax,\n                  a = n.length,\n                  c = [],\n                  d = [],\n                  f = 0,\n                  p = 0,\n                  l = 0;\n                l < a;\n                l += 1\n              )\n                if (!(u && r[l] <= 1)) {\n                  var y = [t[2 * l] - e[2 * l], t[2 * l + 1] - e[2 * l + 1]],\n                    g = Math.hypot(y[0], y[1]),\n                    v = [t[2 * l] + e[2 * l], t[2 * l + 1] + e[2 * l + 1]],\n                    x = Math.hypot(v[0], v[1]);\n                  (c[l] = g),\n                    (d[l] = x / 2),\n                    (f += (r[l] + 1) * c[l]),\n                    (p += (r[l] + 1) * d[l]);\n                }\n              var m = i;\n              (i = (s * p) / f), 0 !== m && (i = i > 1.5 * m ? 1.5 * m : i);\n              for (l = 0; l < a; l += 1)\n                if (!(u && r[l] <= 1)) {\n                  var b = (o * i) / (1 + i * Math.sqrt(c[l])),\n                    _ = Math.hypot(t[2 * l], t[2 * l + 1]),\n                    N = h / (_ = _ < 1e-4 ? 1e-4 : _),\n                    O = (b = b > N ? N : b) * t[2 * l],\n                    j = b * t[2 * l + 1];\n                  (n[l].x += O), (n[l].y += j);\n                }\n              return { nodes: n, sg: i };\n            }),\n            e\n          );\n        })(s.Base);\n      e.ForceAtlas2Layout = d;\n    },\n    397: function (t, e, i) {\n      \"use strict\";\n      i.r(e);\n      var r = i(175);\n      e.default = r.ForceAtlas2Layout;\n    },\n    398: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var r = (function () {\n        function t(t) {\n          (this.id = t.id || 0),\n            (this.rx = t.rx),\n            (this.ry = t.ry),\n            (this.fx = 0),\n            (this.fy = 0),\n            (this.mass = t.mass),\n            (this.degree = t.degree),\n            (this.g = t.g || 0);\n        }\n        return (\n          (t.prototype.distanceTo = function (t) {\n            var e = this.rx - t.rx,\n              i = this.ry - t.ry;\n            return Math.hypot(e, i);\n          }),\n          (t.prototype.setPos = function (t, e) {\n            (this.rx = t), (this.ry = e);\n          }),\n          (t.prototype.resetForce = function () {\n            (this.fx = 0), (this.fy = 0);\n          }),\n          (t.prototype.addForce = function (t) {\n            var e = t.rx - this.rx,\n              i = t.ry - this.ry,\n              r = Math.hypot(e, i);\n            r = r < 1e-4 ? 1e-4 : r;\n            var n = (this.g * (this.degree + 1) * (t.degree + 1)) / r;\n            (this.fx += (n * e) / r), (this.fy += (n * i) / r);\n          }),\n          (t.prototype.in = function (t) {\n            return t.contains(this.rx, this.ry);\n          }),\n          (t.prototype.add = function (e) {\n            var i = this.mass + e.mass;\n            return new t({\n              rx: (this.rx * this.mass + e.rx * e.mass) / i,\n              ry: (this.ry * this.mass + e.ry * e.mass) / i,\n              mass: i,\n              degree: this.degree + e.degree,\n            });\n          }),\n          t\n        );\n      })();\n      e.default = r;\n    },\n    399: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var r = (function () {\n        function t(t) {\n          (this.xmid = t.xmid),\n            (this.ymid = t.ymid),\n            (this.length = t.length),\n            (this.massCenter = t.massCenter || [0, 0]),\n            (this.mass = t.mass || 1);\n        }\n        return (\n          (t.prototype.getLength = function () {\n            return this.length;\n          }),\n          (t.prototype.contains = function (t, e) {\n            var i = this.length / 2;\n            return (\n              t <= this.xmid + i &&\n              t >= this.xmid - i &&\n              e <= this.ymid + i &&\n              e >= this.ymid - i\n            );\n          }),\n          (t.prototype.NW = function () {\n            return new t({\n              xmid: this.xmid - this.length / 4,\n              ymid: this.ymid + this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.NE = function () {\n            return new t({\n              xmid: this.xmid + this.length / 4,\n              ymid: this.ymid + this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.SW = function () {\n            return new t({\n              xmid: this.xmid - this.length / 4,\n              ymid: this.ymid - this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          (t.prototype.SE = function () {\n            return new t({\n              xmid: this.xmid + this.length / 4,\n              ymid: this.ymid - this.length / 4,\n              length: this.length / 2,\n            });\n          }),\n          t\n        );\n      })();\n      e.default = r;\n    },\n    400: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 });\n      var r = (function () {\n        function t(t) {\n          (this.body = null),\n            (this.quad = null),\n            (this.NW = null),\n            (this.NE = null),\n            (this.SW = null),\n            (this.SE = null),\n            (this.theta = 0.5),\n            null != t && (this.quad = t);\n        }\n        return (\n          (t.prototype.insert = function (e) {\n            null != this.body\n              ? this._isExternal()\n                ? (this.quad &&\n                    ((this.NW = new t(this.quad.NW())),\n                    (this.NE = new t(this.quad.NE())),\n                    (this.SW = new t(this.quad.SW())),\n                    (this.SE = new t(this.quad.SE()))),\n                  this._putBody(this.body),\n                  this._putBody(e),\n                  (this.body = this.body.add(e)))\n                : ((this.body = this.body.add(e)), this._putBody(e))\n              : (this.body = e);\n          }),\n          (t.prototype._putBody = function (t) {\n            this.quad &&\n              (t.in(this.quad.NW()) && this.NW\n                ? this.NW.insert(t)\n                : t.in(this.quad.NE()) && this.NE\n                ? this.NE.insert(t)\n                : t.in(this.quad.SW()) && this.SW\n                ? this.SW.insert(t)\n                : t.in(this.quad.SE()) && this.SE && this.SE.insert(t));\n          }),\n          (t.prototype._isExternal = function () {\n            return (\n              null == this.NW &&\n              null == this.NE &&\n              null == this.SW &&\n              null == this.SE\n            );\n          }),\n          (t.prototype.updateForce = function (t) {\n            null != this.body &&\n              t !== this.body &&\n              (this._isExternal() ||\n              (this.quad ? this.quad.getLength() : 0) /\n                this.body.distanceTo(t) <\n                this.theta\n                ? t.addForce(this.body)\n                : (this.NW && this.NW.updateForce(t),\n                  this.NE && this.NE.updateForce(t),\n                  this.SW && this.SW.updateForce(t),\n                  this.SE && this.SE.updateForce(t)));\n          }),\n          t\n        );\n      })();\n      e.default = r;\n    },\n    7: function (t, e, i) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=forceAtlas2Layout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/forceLayout.js",
    "content": "!(function (t, n) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = n())\n    : \"function\" == typeof define && define.amd\n    ? define([], n)\n    : \"object\" == typeof exports\n    ? (exports.f6 = n())\n    : (t.f6 = n());\n})(this, function () {\n  return (function (t) {\n    var n = {};\n    function e(r) {\n      if (n[r]) return n[r].exports;\n      var o = (n[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, e), (o.l = !0), o.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = n),\n      (e.d = function (t, n, r) {\n        e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: r });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, n) {\n        if ((1 & n && (t = e(t)), 8 & n)) return t;\n        if (4 & n && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (e.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & n && \"string\" != typeof t)\n        )\n          for (var o in t)\n            e.d(\n              r,\n              o,\n              function (n) {\n                return t[n];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (e.n = function (t) {\n        var n =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(n, \"a\", n), n;\n      }),\n      (e.o = function (t, n) {\n        return Object.prototype.hasOwnProperty.call(t, n);\n      }),\n      (e.p = \"\"),\n      e((e.s = 401))\n    );\n  })({\n    10: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        o(e(11), n),\n        o(e(12), n),\n        o(e(13), n),\n        o(e(14), n),\n        o(e(15), n),\n        o(e(16), n);\n    },\n    11: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.camelize = n.isString = void 0);\n      n.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      n.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, n) {\n            return n ? n.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isArray = void 0),\n        (n.isArray = Array.isArray);\n    },\n    13: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.toNumber = n.isNaN = n.isNumber = void 0);\n      n.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      n.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      n.toNumber = function (t) {\n        var e = parseFloat(t);\n        return n.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.traverseTreeUp =\n          n.scaleMatrix =\n          n.getAdjMatrix =\n          n.floydWarshall =\n          n.getDegree =\n            void 0);\n      n.getDegree = function (t, n, e) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (r[n[t.source]] += 1),\n                t.target && (r[n[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      n.floydWarshall = function (t) {\n        for (var n = [], e = t.length, r = 0; r < e; r += 1) {\n          n[r] = [];\n          for (var o = 0; o < e; o += 1)\n            r === o\n              ? (n[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (n[r][o] = t[r][o])\n              : (n[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (r = 0; r < e; r += 1)\n            for (o = 0; o < e; o += 1)\n              n[r][o] > n[r][i] + n[i][o] && (n[r][o] = n[r][i] + n[i][o]);\n        return n;\n      };\n      n.getAdjMatrix = function (t, n) {\n        var e = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, n) {\n              i[t.id] = n;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var e = t.source,\n                r = t.target,\n                u = i[e],\n                c = i[r];\n              (o[u][c] = 1), n || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      n.scaleMatrix = function (t, n) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * n);\n            }),\n              e.push(r);\n          }),\n          e\n        );\n      };\n      n.traverseTreeUp = function (t, n) {\n        \"function\" == typeof n &&\n          (function t(n, e) {\n            if (n && n.children)\n              for (var r = n.children.length - 1; r >= 0; r--)\n                if (!t(n.children[r], e)) return;\n            return !!e(n);\n          })(t, n);\n      };\n    },\n    15: function (t, n, e) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var n, e = 1, r = arguments.length; e < r; e++)\n                for (var o in (n = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.clone = n.isObject = void 0);\n      n.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      n.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return n.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = n.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.isFunction = void 0);\n      n.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    167: function (t, n, e) {\n      \"use strict\";\n      e.r(n),\n        e.d(n, \"forceCenter\", function () {\n          return r;\n        }),\n        e.d(n, \"forceCollide\", function () {\n          return v;\n        }),\n        e.d(n, \"forceLink\", function () {\n          return b;\n        }),\n        e.d(n, \"forceManyBody\", function () {\n          return V;\n        }),\n        e.d(n, \"forceRadial\", function () {\n          return Z;\n        }),\n        e.d(n, \"forceSimulation\", function () {\n          return Q;\n        }),\n        e.d(n, \"forceX\", function () {\n          return $;\n        }),\n        e.d(n, \"forceY\", function () {\n          return tt;\n        });\n      var r = function (t, n) {\n        var e,\n          r = 1;\n        function o() {\n          var o,\n            i,\n            u = e.length,\n            c = 0,\n            f = 0;\n          for (o = 0; o < u; ++o) (c += (i = e[o]).x), (f += i.y);\n          for (c = (c / u - t) * r, f = (f / u - n) * r, o = 0; o < u; ++o)\n            ((i = e[o]).x -= c), (i.y -= f);\n        }\n        return (\n          null == t && (t = 0),\n          null == n && (n = 0),\n          (o.initialize = function (t) {\n            e = t;\n          }),\n          (o.x = function (n) {\n            return arguments.length ? ((t = +n), o) : t;\n          }),\n          (o.y = function (t) {\n            return arguments.length ? ((n = +t), o) : n;\n          }),\n          (o.strength = function (t) {\n            return arguments.length ? ((r = +t), o) : r;\n          }),\n          o\n        );\n      };\n      function o(t, n, e, r) {\n        if (isNaN(n) || isNaN(e)) return t;\n        var o,\n          i,\n          u,\n          c,\n          f,\n          a,\n          l,\n          s,\n          h,\n          d = t._root,\n          y = { data: r },\n          p = t._x0,\n          v = t._y0,\n          g = t._x1,\n          _ = t._y1;\n        if (!d) return (t._root = y), t;\n        for (; d.length; )\n          if (\n            ((a = n >= (i = (p + g) / 2)) ? (p = i) : (g = i),\n            (l = e >= (u = (v + _) / 2)) ? (v = u) : (_ = u),\n            (o = d),\n            !(d = d[(s = (l << 1) | a)]))\n          )\n            return (o[s] = y), t;\n        if (\n          ((c = +t._x.call(null, d.data)),\n          (f = +t._y.call(null, d.data)),\n          n === c && e === f)\n        )\n          return (y.next = d), o ? (o[s] = y) : (t._root = y), t;\n        do {\n          (o = o ? (o[s] = new Array(4)) : (t._root = new Array(4))),\n            (a = n >= (i = (p + g) / 2)) ? (p = i) : (g = i),\n            (l = e >= (u = (v + _) / 2)) ? (v = u) : (_ = u);\n        } while ((s = (l << 1) | a) == (h = ((f >= u) << 1) | (c >= i)));\n        return (o[h] = d), (o[s] = y), t;\n      }\n      var i = function (t, n, e, r, o) {\n        (this.node = t),\n          (this.x0 = n),\n          (this.y0 = e),\n          (this.x1 = r),\n          (this.y1 = o);\n      };\n      function u(t) {\n        return t[0];\n      }\n      function c(t) {\n        return t[1];\n      }\n      function f(t, n, e) {\n        var r = new a(null == n ? u : n, null == e ? c : e, NaN, NaN, NaN, NaN);\n        return null == t ? r : r.addAll(t);\n      }\n      function a(t, n, e, r, o, i) {\n        (this._x = t),\n          (this._y = n),\n          (this._x0 = e),\n          (this._y0 = r),\n          (this._x1 = o),\n          (this._y1 = i),\n          (this._root = void 0);\n      }\n      function l(t) {\n        for (var n = { data: t.data }, e = n; (t = t.next); )\n          e = e.next = { data: t.data };\n        return n;\n      }\n      var s = (f.prototype = a.prototype);\n      (s.copy = function () {\n        var t,\n          n,\n          e = new a(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n          r = this._root;\n        if (!r) return e;\n        if (!r.length) return (e._root = l(r)), e;\n        for (\n          t = [{ source: r, target: (e._root = new Array(4)) }];\n          (r = t.pop());\n\n        )\n          for (var o = 0; o < 4; ++o)\n            (n = r.source[o]) &&\n              (n.length\n                ? t.push({ source: n, target: (r.target[o] = new Array(4)) })\n                : (r.target[o] = l(n)));\n        return e;\n      }),\n        (s.add = function (t) {\n          var n = +this._x.call(null, t),\n            e = +this._y.call(null, t);\n          return o(this.cover(n, e), n, e, t);\n        }),\n        (s.addAll = function (t) {\n          var n,\n            e,\n            r,\n            i,\n            u = t.length,\n            c = new Array(u),\n            f = new Array(u),\n            a = 1 / 0,\n            l = 1 / 0,\n            s = -1 / 0,\n            h = -1 / 0;\n          for (e = 0; e < u; ++e)\n            isNaN((r = +this._x.call(null, (n = t[e])))) ||\n              isNaN((i = +this._y.call(null, n))) ||\n              ((c[e] = r),\n              (f[e] = i),\n              r < a && (a = r),\n              r > s && (s = r),\n              i < l && (l = i),\n              i > h && (h = i));\n          if (a > s || l > h) return this;\n          for (this.cover(a, l).cover(s, h), e = 0; e < u; ++e)\n            o(this, c[e], f[e], t[e]);\n          return this;\n        }),\n        (s.cover = function (t, n) {\n          if (isNaN((t = +t)) || isNaN((n = +n))) return this;\n          var e = this._x0,\n            r = this._y0,\n            o = this._x1,\n            i = this._y1;\n          if (isNaN(e))\n            (o = (e = Math.floor(t)) + 1), (i = (r = Math.floor(n)) + 1);\n          else {\n            for (\n              var u, c, f = o - e || 1, a = this._root;\n              e > t || t >= o || r > n || n >= i;\n\n            )\n              switch (\n                ((c = ((n < r) << 1) | (t < e)),\n                ((u = new Array(4))[c] = a),\n                (a = u),\n                (f *= 2),\n                c)\n              ) {\n                case 0:\n                  (o = e + f), (i = r + f);\n                  break;\n                case 1:\n                  (e = o - f), (i = r + f);\n                  break;\n                case 2:\n                  (o = e + f), (r = i - f);\n                  break;\n                case 3:\n                  (e = o - f), (r = i - f);\n              }\n            this._root && this._root.length && (this._root = a);\n          }\n          return (\n            (this._x0 = e), (this._y0 = r), (this._x1 = o), (this._y1 = i), this\n          );\n        }),\n        (s.data = function () {\n          var t = [];\n          return (\n            this.visit(function (n) {\n              if (!n.length)\n                do {\n                  t.push(n.data);\n                } while ((n = n.next));\n            }),\n            t\n          );\n        }),\n        (s.extent = function (t) {\n          return arguments.length\n            ? this.cover(+t[0][0], +t[0][1]).cover(+t[1][0], +t[1][1])\n            : isNaN(this._x0)\n            ? void 0\n            : [\n                [this._x0, this._y0],\n                [this._x1, this._y1],\n              ];\n        }),\n        (s.find = function (t, n, e) {\n          var r,\n            o,\n            u,\n            c,\n            f,\n            a,\n            l,\n            s = this._x0,\n            h = this._y0,\n            d = this._x1,\n            y = this._y1,\n            p = [],\n            v = this._root;\n          for (\n            v && p.push(new i(v, s, h, d, y)),\n              null == e\n                ? (e = 1 / 0)\n                : ((s = t - e),\n                  (h = n - e),\n                  (d = t + e),\n                  (y = n + e),\n                  (e *= e));\n            (a = p.pop());\n\n          )\n            if (\n              !(\n                !(v = a.node) ||\n                (o = a.x0) > d ||\n                (u = a.y0) > y ||\n                (c = a.x1) < s ||\n                (f = a.y1) < h\n              )\n            )\n              if (v.length) {\n                var g = (o + c) / 2,\n                  _ = (u + f) / 2;\n                p.push(\n                  new i(v[3], g, _, c, f),\n                  new i(v[2], o, _, g, f),\n                  new i(v[1], g, u, c, _),\n                  new i(v[0], o, u, g, _),\n                ),\n                  (l = ((n >= _) << 1) | (t >= g)) &&\n                    ((a = p[p.length - 1]),\n                    (p[p.length - 1] = p[p.length - 1 - l]),\n                    (p[p.length - 1 - l] = a));\n              } else {\n                var x = t - +this._x.call(null, v.data),\n                  b = n - +this._y.call(null, v.data),\n                  w = x * x + b * b;\n                if (w < e) {\n                  var m = Math.sqrt((e = w));\n                  (s = t - m),\n                    (h = n - m),\n                    (d = t + m),\n                    (y = n + m),\n                    (r = v.data);\n                }\n              }\n          return r;\n        }),\n        (s.remove = function (t) {\n          if (\n            isNaN((i = +this._x.call(null, t))) ||\n            isNaN((u = +this._y.call(null, t)))\n          )\n            return this;\n          var n,\n            e,\n            r,\n            o,\n            i,\n            u,\n            c,\n            f,\n            a,\n            l,\n            s,\n            h,\n            d = this._root,\n            y = this._x0,\n            p = this._y0,\n            v = this._x1,\n            g = this._y1;\n          if (!d) return this;\n          if (d.length)\n            for (;;) {\n              if (\n                ((a = i >= (c = (y + v) / 2)) ? (y = c) : (v = c),\n                (l = u >= (f = (p + g) / 2)) ? (p = f) : (g = f),\n                (n = d),\n                !(d = d[(s = (l << 1) | a)]))\n              )\n                return this;\n              if (!d.length) break;\n              (n[(s + 1) & 3] || n[(s + 2) & 3] || n[(s + 3) & 3]) &&\n                ((e = n), (h = s));\n            }\n          for (; d.data !== t; ) if (((r = d), !(d = d.next))) return this;\n          return (\n            (o = d.next) && delete d.next,\n            r\n              ? (o ? (r.next = o) : delete r.next, this)\n              : n\n              ? (o ? (n[s] = o) : delete n[s],\n                (d = n[0] || n[1] || n[2] || n[3]) &&\n                  d === (n[3] || n[2] || n[1] || n[0]) &&\n                  !d.length &&\n                  (e ? (e[h] = d) : (this._root = d)),\n                this)\n              : ((this._root = o), this)\n          );\n        }),\n        (s.removeAll = function (t) {\n          for (var n = 0, e = t.length; n < e; ++n) this.remove(t[n]);\n          return this;\n        }),\n        (s.root = function () {\n          return this._root;\n        }),\n        (s.size = function () {\n          var t = 0;\n          return (\n            this.visit(function (n) {\n              if (!n.length)\n                do {\n                  ++t;\n                } while ((n = n.next));\n            }),\n            t\n          );\n        }),\n        (s.visit = function (t) {\n          var n,\n            e,\n            r,\n            o,\n            u,\n            c,\n            f = [],\n            a = this._root;\n          for (\n            a && f.push(new i(a, this._x0, this._y0, this._x1, this._y1));\n            (n = f.pop());\n\n          )\n            if (\n              !t(\n                (a = n.node),\n                (r = n.x0),\n                (o = n.y0),\n                (u = n.x1),\n                (c = n.y1),\n              ) &&\n              a.length\n            ) {\n              var l = (r + u) / 2,\n                s = (o + c) / 2;\n              (e = a[3]) && f.push(new i(e, l, s, u, c)),\n                (e = a[2]) && f.push(new i(e, r, s, l, c)),\n                (e = a[1]) && f.push(new i(e, l, o, u, s)),\n                (e = a[0]) && f.push(new i(e, r, o, l, s));\n            }\n          return this;\n        }),\n        (s.visitAfter = function (t) {\n          var n,\n            e = [],\n            r = [];\n          for (\n            this._root &&\n            e.push(new i(this._root, this._x0, this._y0, this._x1, this._y1));\n            (n = e.pop());\n\n          ) {\n            var o = n.node;\n            if (o.length) {\n              var u,\n                c = n.x0,\n                f = n.y0,\n                a = n.x1,\n                l = n.y1,\n                s = (c + a) / 2,\n                h = (f + l) / 2;\n              (u = o[0]) && e.push(new i(u, c, f, s, h)),\n                (u = o[1]) && e.push(new i(u, s, f, a, h)),\n                (u = o[2]) && e.push(new i(u, c, h, s, l)),\n                (u = o[3]) && e.push(new i(u, s, h, a, l));\n            }\n            r.push(n);\n          }\n          for (; (n = r.pop()); ) t(n.node, n.x0, n.y0, n.x1, n.y1);\n          return this;\n        }),\n        (s.x = function (t) {\n          return arguments.length ? ((this._x = t), this) : this._x;\n        }),\n        (s.y = function (t) {\n          return arguments.length ? ((this._y = t), this) : this._y;\n        });\n      var h = function (t) {\n          return function () {\n            return t;\n          };\n        },\n        d = function (t) {\n          return 1e-6 * (t() - 0.5);\n        };\n      function y(t) {\n        return t.x + t.vx;\n      }\n      function p(t) {\n        return t.y + t.vy;\n      }\n      var v = function (t) {\n        var n,\n          e,\n          r,\n          o = 1,\n          i = 1;\n        function u() {\n          for (var t, u, a, l, s, h, v, g = n.length, _ = 0; _ < i; ++_)\n            for (u = f(n, y, p).visitAfter(c), t = 0; t < g; ++t)\n              (a = n[t]),\n                (h = e[a.index]),\n                (v = h * h),\n                (l = a.x + a.vx),\n                (s = a.y + a.vy),\n                u.visit(x);\n          function x(t, n, e, i, u) {\n            var c = t.data,\n              f = t.r,\n              y = h + f;\n            if (!c) return n > l + y || i < l - y || e > s + y || u < s - y;\n            if (c.index > a.index) {\n              var p = l - c.x - c.vx,\n                g = s - c.y - c.vy,\n                _ = p * p + g * g;\n              _ < y * y &&\n                (0 === p && (_ += (p = d(r)) * p),\n                0 === g && (_ += (g = d(r)) * g),\n                (_ = ((y - (_ = Math.sqrt(_))) / _) * o),\n                (a.vx += (p *= _) * (y = (f *= f) / (v + f))),\n                (a.vy += (g *= _) * y),\n                (c.vx -= p * (y = 1 - y)),\n                (c.vy -= g * y));\n            }\n          }\n        }\n        function c(t) {\n          if (t.data) return (t.r = e[t.data.index]);\n          for (var n = (t.r = 0); n < 4; ++n)\n            t[n] && t[n].r > t.r && (t.r = t[n].r);\n        }\n        function a() {\n          if (n) {\n            var r,\n              o,\n              i = n.length;\n            for (e = new Array(i), r = 0; r < i; ++r)\n              (o = n[r]), (e[o.index] = +t(o, r, n));\n          }\n        }\n        return (\n          \"function\" != typeof t && (t = h(null == t ? 1 : +t)),\n          (u.initialize = function (t, e) {\n            (n = t), (r = e), a();\n          }),\n          (u.iterations = function (t) {\n            return arguments.length ? ((i = +t), u) : i;\n          }),\n          (u.strength = function (t) {\n            return arguments.length ? ((o = +t), u) : o;\n          }),\n          (u.radius = function (n) {\n            return arguments.length\n              ? ((t = \"function\" == typeof n ? n : h(+n)), a(), u)\n              : t;\n          }),\n          u\n        );\n      };\n      function g(t) {\n        return (g =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function _(t) {\n        return t.index;\n      }\n      function x(t, n) {\n        var e = t.get(n);\n        if (!e) throw new Error(\"node not found: \" + n);\n        return e;\n      }\n      var b = function (t) {\n          var n,\n            e,\n            r,\n            o,\n            i,\n            u,\n            c = _,\n            f = function (t) {\n              return 1 / Math.min(o[t.source.index], o[t.target.index]);\n            },\n            a = h(30),\n            l = 1;\n          function s(r) {\n            for (var o = 0, c = t.length; o < l; ++o)\n              for (var f, a, s, h, y, p, v, g = 0; g < c; ++g)\n                (a = (f = t[g]).source),\n                  (h = (s = f.target).x + s.vx - a.x - a.vx || d(u)),\n                  (y = s.y + s.vy - a.y - a.vy || d(u)),\n                  (h *= p =\n                    (((p = Math.sqrt(h * h + y * y)) - e[g]) / p) * r * n[g]),\n                  (y *= p),\n                  (s.vx -= h * (v = i[g])),\n                  (s.vy -= y * v),\n                  (a.vx += h * (v = 1 - v)),\n                  (a.vy += y * v);\n          }\n          function y() {\n            if (r) {\n              var u,\n                f,\n                a = r.length,\n                l = t.length,\n                s = new Map(\n                  r.map(function (t, n) {\n                    return [c(t, n, r), t];\n                  }),\n                );\n              for (u = 0, o = new Array(a); u < l; ++u)\n                ((f = t[u]).index = u),\n                  \"object\" !== g(f.source) && (f.source = x(s, f.source)),\n                  \"object\" !== g(f.target) && (f.target = x(s, f.target)),\n                  (o[f.source.index] = (o[f.source.index] || 0) + 1),\n                  (o[f.target.index] = (o[f.target.index] || 0) + 1);\n              for (u = 0, i = new Array(l); u < l; ++u)\n                (f = t[u]),\n                  (i[u] =\n                    o[f.source.index] /\n                    (o[f.source.index] + o[f.target.index]));\n              (n = new Array(l)), p(), (e = new Array(l)), v();\n            }\n          }\n          function p() {\n            if (r)\n              for (var e = 0, o = t.length; e < o; ++e) n[e] = +f(t[e], e, t);\n          }\n          function v() {\n            if (r)\n              for (var n = 0, o = t.length; n < o; ++n) e[n] = +a(t[n], n, t);\n          }\n          return (\n            null == t && (t = []),\n            (s.initialize = function (t, n) {\n              (r = t), (u = n), y();\n            }),\n            (s.links = function (n) {\n              return arguments.length ? ((t = n), y(), s) : t;\n            }),\n            (s.id = function (t) {\n              return arguments.length ? ((c = t), s) : c;\n            }),\n            (s.iterations = function (t) {\n              return arguments.length ? ((l = +t), s) : l;\n            }),\n            (s.strength = function (t) {\n              return arguments.length\n                ? ((f = \"function\" == typeof t ? t : h(+t)), p(), s)\n                : f;\n            }),\n            (s.distance = function (t) {\n              return arguments.length\n                ? ((a = \"function\" == typeof t ? t : h(+t)), v(), s)\n                : a;\n            }),\n            s\n          );\n        },\n        w = { value: function () {} };\n      function m() {\n        for (var t, n = 0, e = arguments.length, r = {}; n < e; ++n) {\n          if (!(t = arguments[n] + \"\") || t in r || /[\\s.]/.test(t))\n            throw new Error(\"illegal type: \" + t);\n          r[t] = [];\n        }\n        return new S(r);\n      }\n      function S(t) {\n        this._ = t;\n      }\n      function N(t, n) {\n        return t\n          .trim()\n          .split(/^|\\s+/)\n          .map(function (t) {\n            var e = \"\",\n              r = t.indexOf(\".\");\n            if (\n              (r >= 0 && ((e = t.slice(r + 1)), (t = t.slice(0, r))),\n              t && !n.hasOwnProperty(t))\n            )\n              throw new Error(\"unknown type: \" + t);\n            return { type: t, name: e };\n          });\n      }\n      function O(t, n) {\n        for (var e, r = 0, o = t.length; r < o; ++r)\n          if ((e = t[r]).name === n) return e.value;\n      }\n      function k(t, n, e) {\n        for (var r = 0, o = t.length; r < o; ++r)\n          if (t[r].name === n) {\n            (t[r] = w), (t = t.slice(0, r).concat(t.slice(r + 1)));\n            break;\n          }\n        return null != e && t.push({ name: n, value: e }), t;\n      }\n      S.prototype = m.prototype = {\n        constructor: S,\n        on: function (t, n) {\n          var e,\n            r = this._,\n            o = N(t + \"\", r),\n            i = -1,\n            u = o.length;\n          if (!(arguments.length < 2)) {\n            if (null != n && \"function\" != typeof n)\n              throw new Error(\"invalid callback: \" + n);\n            for (; ++i < u; )\n              if ((e = (t = o[i]).type)) r[e] = k(r[e], t.name, n);\n              else if (null == n) for (e in r) r[e] = k(r[e], t.name, null);\n            return this;\n          }\n          for (; ++i < u; )\n            if ((e = (t = o[i]).type) && (e = O(r[e], t.name))) return e;\n        },\n        copy: function () {\n          var t = {},\n            n = this._;\n          for (var e in n) t[e] = n[e].slice();\n          return new S(t);\n        },\n        call: function (t, n) {\n          if ((e = arguments.length - 2) > 0)\n            for (var e, r, o = new Array(e), i = 0; i < e; ++i)\n              o[i] = arguments[i + 2];\n          if (!this._.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n          for (i = 0, e = (r = this._[t]).length; i < e; ++i)\n            r[i].value.apply(n, o);\n        },\n        apply: function (t, n, e) {\n          if (!this._.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n          for (var r = this._[t], o = 0, i = r.length; o < i; ++o)\n            r[o].value.apply(n, e);\n        },\n      };\n      var M = m;\n      function j(t) {\n        return (j =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var E,\n        A,\n        P = 0,\n        z = 0,\n        D = 0,\n        T = 0,\n        L = 0,\n        F = 0,\n        U =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : j(performance)) && performance.now\n            ? performance\n            : Date,\n        C =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : j(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function q() {\n        return L || (C(B), (L = U.now() + F));\n      }\n      function B() {\n        L = 0;\n      }\n      function Y() {\n        this._call = this._time = this._next = null;\n      }\n      function R(t, n, e) {\n        var r = new Y();\n        return r.restart(t, n, e), r;\n      }\n      function G() {\n        (L = (T = U.now()) + F), (P = z = 0);\n        try {\n          !(function () {\n            q(), ++P;\n            for (var t, n = E; n; )\n              (t = L - n._time) >= 0 && n._call.call(null, t), (n = n._next);\n            --P;\n          })();\n        } finally {\n          (P = 0),\n            (function () {\n              var t,\n                n,\n                e = E,\n                r = 1 / 0;\n              for (; e; )\n                e._call\n                  ? (r > e._time && (r = e._time), (t = e), (e = e._next))\n                  : ((n = e._next),\n                    (e._next = null),\n                    (e = t ? (t._next = n) : (E = n)));\n              (A = t), W(r);\n            })(),\n            (L = 0);\n        }\n      }\n      function I() {\n        var t = U.now(),\n          n = t - T;\n        n > 1e3 && ((F -= n), (T = t));\n      }\n      function W(t) {\n        P ||\n          (z && (z = clearTimeout(z)),\n          t - L > 24\n            ? (t < 1 / 0 && (z = setTimeout(G, t - U.now() - F)),\n              D && (D = clearInterval(D)))\n            : (D || ((T = U.now()), (D = setInterval(I, 1e3))), (P = 1), C(G)));\n      }\n      Y.prototype = R.prototype = {\n        constructor: Y,\n        restart: function (t, n, e) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (e = (null == e ? q() : +e) + (null == n ? 0 : +n)),\n            this._next ||\n              A === this ||\n              (A ? (A._next = this) : (E = this), (A = this)),\n            (this._call = t),\n            (this._time = e),\n            W();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), W());\n        },\n      };\n      var X = 4294967296;\n      function K(t) {\n        return t.x;\n      }\n      function H(t) {\n        return t.y;\n      }\n      var J = Math.PI * (3 - Math.sqrt(5)),\n        Q = function (t) {\n          var n,\n            e,\n            r = 1,\n            o = 0.001,\n            i = 1 - Math.pow(o, 1 / 300),\n            u = 0,\n            c = 0.6,\n            f = new Map(),\n            a = R(h),\n            l = M(\"tick\", \"end\"),\n            s =\n              ((e = 1),\n              function () {\n                return (e = (1664525 * e + 1013904223) % X) / X;\n              });\n          function h() {\n            d(), l.call(\"tick\", n), r < o && (a.stop(), l.call(\"end\", n));\n          }\n          function d(e) {\n            var o,\n              a,\n              l = t.length;\n            void 0 === e && (e = 1);\n            for (var s = 0; s < e; ++s)\n              for (\n                r += (u - r) * i,\n                  f.forEach(function (t) {\n                    t(r);\n                  }),\n                  o = 0;\n                o < l;\n                ++o\n              )\n                null == (a = t[o]).fx\n                  ? (a.x += a.vx *= c)\n                  : ((a.x = a.fx), (a.vx = 0)),\n                  null == a.fy\n                    ? (a.y += a.vy *= c)\n                    : ((a.y = a.fy), (a.vy = 0));\n            return n;\n          }\n          function y() {\n            for (var n, e = 0, r = t.length; e < r; ++e) {\n              if (\n                (((n = t[e]).index = e),\n                null != n.fx && (n.x = n.fx),\n                null != n.fy && (n.y = n.fy),\n                isNaN(n.x) || isNaN(n.y))\n              ) {\n                var o = 10 * Math.sqrt(0.5 + e),\n                  i = e * J;\n                (n.x = o * Math.cos(i)), (n.y = o * Math.sin(i));\n              }\n              (isNaN(n.vx) || isNaN(n.vy)) && (n.vx = n.vy = 0);\n            }\n          }\n          function p(n) {\n            return n.initialize && n.initialize(t, s), n;\n          }\n          return (\n            null == t && (t = []),\n            y(),\n            (n = {\n              tick: d,\n              restart: function () {\n                return a.restart(h), n;\n              },\n              stop: function () {\n                return a.stop(), n;\n              },\n              nodes: function (e) {\n                return arguments.length ? ((t = e), y(), f.forEach(p), n) : t;\n              },\n              alpha: function (t) {\n                return arguments.length ? ((r = +t), n) : r;\n              },\n              alphaMin: function (t) {\n                return arguments.length ? ((o = +t), n) : o;\n              },\n              alphaDecay: function (t) {\n                return arguments.length ? ((i = +t), n) : +i;\n              },\n              alphaTarget: function (t) {\n                return arguments.length ? ((u = +t), n) : u;\n              },\n              velocityDecay: function (t) {\n                return arguments.length ? ((c = 1 - t), n) : 1 - c;\n              },\n              randomSource: function (t) {\n                return arguments.length ? ((s = t), f.forEach(p), n) : s;\n              },\n              force: function (t, e) {\n                return arguments.length > 1\n                  ? (null == e ? f.delete(t) : f.set(t, p(e)), n)\n                  : f.get(t);\n              },\n              find: function (n, e, r) {\n                var o,\n                  i,\n                  u,\n                  c,\n                  f,\n                  a = 0,\n                  l = t.length;\n                for (null == r ? (r = 1 / 0) : (r *= r), a = 0; a < l; ++a)\n                  (u = (o = n - (c = t[a]).x) * o + (i = e - c.y) * i) < r &&\n                    ((f = c), (r = u));\n                return f;\n              },\n              on: function (t, e) {\n                return arguments.length > 1 ? (l.on(t, e), n) : l.on(t);\n              },\n            })\n          );\n        },\n        V = function () {\n          var t,\n            n,\n            e,\n            r,\n            o,\n            i = h(-30),\n            u = 1,\n            c = 1 / 0,\n            a = 0.81;\n          function l(e) {\n            var o,\n              i = t.length,\n              u = f(t, K, H).visitAfter(y);\n            for (r = e, o = 0; o < i; ++o) (n = t[o]), u.visit(p);\n          }\n          function s() {\n            if (t) {\n              var n,\n                e,\n                r = t.length;\n              for (o = new Array(r), n = 0; n < r; ++n)\n                (e = t[n]), (o[e.index] = +i(e, n, t));\n            }\n          }\n          function y(t) {\n            var n,\n              e,\n              r,\n              i,\n              u,\n              c = 0,\n              f = 0;\n            if (t.length) {\n              for (r = i = u = 0; u < 4; ++u)\n                (n = t[u]) &&\n                  (e = Math.abs(n.value)) &&\n                  ((c += n.value), (f += e), (r += e * n.x), (i += e * n.y));\n              (t.x = r / f), (t.y = i / f);\n            } else {\n              ((n = t).x = n.data.x), (n.y = n.data.y);\n              do {\n                c += o[n.data.index];\n              } while ((n = n.next));\n            }\n            t.value = c;\n          }\n          function p(t, i, f, l) {\n            if (!t.value) return !0;\n            var s = t.x - n.x,\n              h = t.y - n.y,\n              y = l - i,\n              p = s * s + h * h;\n            if ((y * y) / a < p)\n              return (\n                p < c &&\n                  (0 === s && (p += (s = d(e)) * s),\n                  0 === h && (p += (h = d(e)) * h),\n                  p < u && (p = Math.sqrt(u * p)),\n                  (n.vx += (s * t.value * r) / p),\n                  (n.vy += (h * t.value * r) / p)),\n                !0\n              );\n            if (!(t.length || p >= c)) {\n              (t.data !== n || t.next) &&\n                (0 === s && (p += (s = d(e)) * s),\n                0 === h && (p += (h = d(e)) * h),\n                p < u && (p = Math.sqrt(u * p)));\n              do {\n                t.data !== n &&\n                  ((y = (o[t.data.index] * r) / p),\n                  (n.vx += s * y),\n                  (n.vy += h * y));\n              } while ((t = t.next));\n            }\n          }\n          return (\n            (l.initialize = function (n, r) {\n              (t = n), (e = r), s();\n            }),\n            (l.strength = function (t) {\n              return arguments.length\n                ? ((i = \"function\" == typeof t ? t : h(+t)), s(), l)\n                : i;\n            }),\n            (l.distanceMin = function (t) {\n              return arguments.length ? ((u = t * t), l) : Math.sqrt(u);\n            }),\n            (l.distanceMax = function (t) {\n              return arguments.length ? ((c = t * t), l) : Math.sqrt(c);\n            }),\n            (l.theta = function (t) {\n              return arguments.length ? ((a = t * t), l) : Math.sqrt(a);\n            }),\n            l\n          );\n        },\n        Z = function (t, n, e) {\n          var r,\n            o,\n            i,\n            u = h(0.1);\n          function c(t) {\n            for (var u = 0, c = r.length; u < c; ++u) {\n              var f = r[u],\n                a = f.x - n || 1e-6,\n                l = f.y - e || 1e-6,\n                s = Math.sqrt(a * a + l * l),\n                h = ((i[u] - s) * o[u] * t) / s;\n              (f.vx += a * h), (f.vy += l * h);\n            }\n          }\n          function f() {\n            if (r) {\n              var n,\n                e = r.length;\n              for (o = new Array(e), i = new Array(e), n = 0; n < e; ++n)\n                (i[n] = +t(r[n], n, r)),\n                  (o[n] = isNaN(i[n]) ? 0 : +u(r[n], n, r));\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(+t)),\n            null == n && (n = 0),\n            null == e && (e = 0),\n            (c.initialize = function (t) {\n              (r = t), f();\n            }),\n            (c.strength = function (t) {\n              return arguments.length\n                ? ((u = \"function\" == typeof t ? t : h(+t)), f(), c)\n                : u;\n            }),\n            (c.radius = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), f(), c)\n                : t;\n            }),\n            (c.x = function (t) {\n              return arguments.length ? ((n = +t), c) : n;\n            }),\n            (c.y = function (t) {\n              return arguments.length ? ((e = +t), c) : e;\n            }),\n            c\n          );\n        },\n        $ = function (t) {\n          var n,\n            e,\n            r,\n            o = h(0.1);\n          function i(t) {\n            for (var o, i = 0, u = n.length; i < u; ++i)\n              (o = n[i]).vx += (r[i] - o.x) * e[i] * t;\n          }\n          function u() {\n            if (n) {\n              var i,\n                u = n.length;\n              for (e = new Array(u), r = new Array(u), i = 0; i < u; ++i)\n                e[i] = isNaN((r[i] = +t(n[i], i, n))) ? 0 : +o(n[i], i, n);\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(null == t ? 0 : +t)),\n            (i.initialize = function (t) {\n              (n = t), u();\n            }),\n            (i.strength = function (t) {\n              return arguments.length\n                ? ((o = \"function\" == typeof t ? t : h(+t)), u(), i)\n                : o;\n            }),\n            (i.x = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), u(), i)\n                : t;\n            }),\n            i\n          );\n        },\n        tt = function (t) {\n          var n,\n            e,\n            r,\n            o = h(0.1);\n          function i(t) {\n            for (var o, i = 0, u = n.length; i < u; ++i)\n              (o = n[i]).vy += (r[i] - o.y) * e[i] * t;\n          }\n          function u() {\n            if (n) {\n              var i,\n                u = n.length;\n              for (e = new Array(u), r = new Array(u), i = 0; i < u; ++i)\n                e[i] = isNaN((r[i] = +t(n[i], i, n))) ? 0 : +o(n[i], i, n);\n            }\n          }\n          return (\n            \"function\" != typeof t && (t = h(null == t ? 0 : +t)),\n            (i.initialize = function (t) {\n              (n = t), u();\n            }),\n            (i.strength = function (t) {\n              return arguments.length\n                ? ((o = \"function\" == typeof t ? t : h(+t)), u(), i)\n                : o;\n            }),\n            (i.y = function (n) {\n              return arguments.length\n                ? ((t = \"function\" == typeof n ? n : h(+n)), u(), i)\n                : t;\n            }),\n            i\n          );\n        };\n    },\n    176: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, n) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(n, e) ||\n                r(n, t, e);\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), o(e(402), n);\n    },\n    401: function (t, n, e) {\n      \"use strict\";\n      e.r(n);\n      var r = e(176);\n      n.default = r.ForceLayout;\n    },\n    402: function (t, n, e) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, n) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, n) {\n                  t.__proto__ = n;\n                }) ||\n              function (t, n) {\n                for (var e in n)\n                  Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);\n              })(t, n);\n          }),\n          function (t, n) {\n            if (\"function\" != typeof n && null !== n)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(n) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            r(t, n),\n              (t.prototype =\n                null === n\n                  ? Object.create(n)\n                  : ((e.prototype = n.prototype), new e()));\n          }),\n        i =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        u =\n          (this && this.__setModuleDefault) ||\n          (Object.create\n            ? function (t, n) {\n                Object.defineProperty(t, \"default\", {\n                  enumerable: !0,\n                  value: n,\n                });\n              }\n            : function (t, n) {\n                t.default = n;\n              }),\n        c =\n          (this && this.__importStar) ||\n          function (t) {\n            if (t && t.__esModule) return t;\n            var n = {};\n            if (null != t)\n              for (var e in t)\n                \"default\" !== e &&\n                  Object.prototype.hasOwnProperty.call(t, e) &&\n                  i(n, t, e);\n            return u(n, t), n;\n          },\n        f =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.ForceLayout = void 0);\n      var a = c(e(167)),\n        l = f(e(403)),\n        s = e(10),\n        h = e(7),\n        d = e(404),\n        y = (function (t) {\n          function n(n) {\n            var e = t.call(this) || this;\n            return (\n              (e.center = [0, 0]),\n              (e.nodeStrength = null),\n              (e.edgeStrength = null),\n              (e.preventOverlap = !1),\n              (e.clusterNodeStrength = null),\n              (e.clusterEdgeStrength = null),\n              (e.clusterEdgeDistance = null),\n              (e.clusterNodeSize = null),\n              (e.clusterFociStrength = null),\n              (e.linkDistance = 50),\n              (e.alphaDecay = 0.028),\n              (e.alphaMin = 0.001),\n              (e.alpha = 0.3),\n              (e.collideStrength = 1),\n              (e.workerEnabled = !1),\n              (e.tick = function () {}),\n              (e.onLayoutEnd = function () {}),\n              (e.ticking = void 0),\n              n && e.updateCfg(n),\n              e\n            );\n          }\n          return (\n            o(n, t),\n            (n.prototype.getDefaultCfg = function () {\n              return {\n                center: [0, 0],\n                nodeStrength: null,\n                edgeStrength: null,\n                preventOverlap: !1,\n                nodeSize: void 0,\n                nodeSpacing: void 0,\n                linkDistance: 50,\n                forceSimulation: null,\n                alphaDecay: 0.028,\n                alphaMin: 0.001,\n                alpha: 0.3,\n                collideStrength: 1,\n                clustering: !1,\n                clusterNodeStrength: -1,\n                clusterEdgeStrength: 0.1,\n                clusterEdgeDistance: 100,\n                clusterFociStrength: 0.8,\n                clusterNodeSize: 10,\n                tick: function () {},\n                onLayoutEnd: function () {},\n                workerEnabled: !1,\n              };\n            }),\n            (n.prototype.init = function (t) {\n              this.nodes = t.nodes || [];\n              var n = t.edges || [];\n              (this.edges = n.map(function (t) {\n                var n = {},\n                  e = [\"targetNode\", \"sourceNode\", \"startPoint\", \"endPoint\"];\n                return (\n                  Object.keys(t).forEach(function (r) {\n                    e.indexOf(r) > -1 || (n[r] = t[r]);\n                  }),\n                  n\n                );\n              })),\n                (this.ticking = !1);\n            }),\n            (n.prototype.execute = function (t) {\n              var n = this,\n                e = n.nodes,\n                r = n.edges;\n              if (!n.ticking) {\n                var o = n.forceSimulation,\n                  i = n.alphaMin,\n                  u = n.alphaDecay,\n                  c = n.alpha;\n                if (o) {\n                  if (t)\n                    if (\n                      (n.clustering &&\n                        n.clusterForce &&\n                        (n.clusterForce.nodes(e), n.clusterForce.links(r)),\n                      o.nodes(e),\n                      r && n.edgeForce)\n                    )\n                      n.edgeForce.links(r);\n                    else if (r && !n.edgeForce) {\n                      h = a\n                        .forceLink()\n                        .id(function (t) {\n                          return t.id;\n                        })\n                        .links(r);\n                      n.edgeStrength && h.strength(n.edgeStrength),\n                        n.linkDistance && h.distance(n.linkDistance),\n                        (n.edgeForce = h),\n                        o.force(\"link\", h);\n                    }\n                  n.preventOverlap && n.overlapProcess(o),\n                    o.alpha(c).restart(),\n                    (this.ticking = !0);\n                } else\n                  try {\n                    var f = a.forceManyBody();\n                    if (\n                      (n.nodeStrength && f.strength(n.nodeStrength),\n                      (o = a.forceSimulation().nodes(e)),\n                      n.clustering)\n                    ) {\n                      var s = l.default();\n                      s\n                        .centerX(n.center[0])\n                        .centerY(n.center[1])\n                        .template(\"force\")\n                        .strength(n.clusterFociStrength),\n                        r && s.links(r),\n                        e && s.nodes(e),\n                        s\n                          .forceLinkDistance(n.clusterEdgeDistance)\n                          .forceLinkStrength(n.clusterEdgeStrength)\n                          .forceCharge(n.clusterNodeStrength)\n                          .forceNodeSize(n.clusterNodeSize),\n                        (n.clusterForce = s),\n                        o.force(\"group\", s);\n                    }\n                    if (\n                      (o\n                        .force(\n                          \"center\",\n                          a.forceCenter(n.center[0], n.center[1]),\n                        )\n                        .force(\"charge\", f)\n                        .alpha(c)\n                        .alphaDecay(u)\n                        .alphaMin(i),\n                      n.preventOverlap && n.overlapProcess(o),\n                      r)\n                    ) {\n                      var h = a\n                        .forceLink()\n                        .id(function (t) {\n                          return t.id;\n                        })\n                        .links(r);\n                      n.edgeStrength && h.strength(n.edgeStrength),\n                        n.linkDistance && h.distance(n.linkDistance),\n                        (n.edgeForce = h),\n                        o.force(\"link\", h);\n                    }\n                    if (\n                      (n.workerEnabled &&\n                        !p() &&\n                        ((n.workerEnabled = !1),\n                        console.warn(\n                          \"workerEnabled option is only supported when running in web worker.\",\n                        )),\n                      n.workerEnabled)\n                    ) {\n                      o.stop();\n                      for (\n                        var y = (function (t) {\n                            var n = t.alphaMin(),\n                              e = t.alphaTarget(),\n                              r = t.alpha(),\n                              o =\n                                Math.log((n - e) / (r - e)) /\n                                Math.log(1 - t.alphaDecay());\n                            return Math.ceil(o);\n                          })(o),\n                          v = 1;\n                        v <= y;\n                        v++\n                      )\n                        o.tick(),\n                          postMessage(\n                            {\n                              nodes: e,\n                              currentTick: v,\n                              totalTicks: y,\n                              type: d.LAYOUT_MESSAGE.TICK,\n                            },\n                            void 0,\n                          );\n                      n.ticking = !1;\n                    } else\n                      o\n                        .on(\"tick\", function () {\n                          n.tick();\n                        })\n                        .on(\"end\", function () {\n                          (n.ticking = !1), n.onLayoutEnd && n.onLayoutEnd();\n                        }),\n                        (n.ticking = !0);\n                    (n.forceSimulation = o), (n.ticking = !0);\n                  } catch (t) {\n                    (n.ticking = !1), console.warn(t);\n                  }\n              }\n            }),\n            (n.prototype.overlapProcess = function (t) {\n              var n,\n                e,\n                r = this.nodeSize,\n                o = this.nodeSpacing,\n                i = this.collideStrength;\n              if (\n                ((e = s.isNumber(o)\n                  ? function () {\n                      return o;\n                    }\n                  : s.isFunction(o)\n                  ? o\n                  : function () {\n                      return 0;\n                    }),\n                r)\n              )\n                if (s.isFunction(r))\n                  n = function (t) {\n                    return r(t) + e(t);\n                  };\n                else if (s.isArray(r)) {\n                  var u = (r[0] > r[1] ? r[0] : r[1]) / 2;\n                  n = function (t) {\n                    return u + e(t);\n                  };\n                } else if (s.isNumber(r)) {\n                  var c = r / 2;\n                  n = function (t) {\n                    return c + e(t);\n                  };\n                } else\n                  n = function () {\n                    return 10;\n                  };\n              else\n                n = function (t) {\n                  return t.size\n                    ? s.isArray(t.size)\n                      ? (t.size[0] > t.size[1] ? t.size[0] : t.size[1]) / 2 +\n                        e(t)\n                      : t.size / 2 + e(t)\n                    : 10 + e(t);\n                };\n              t.force(\"collisionForce\", a.forceCollide(n).strength(i));\n            }),\n            (n.prototype.updateCfg = function (t) {\n              this.ticking &&\n                (this.forceSimulation.stop(), (this.ticking = !1)),\n                (this.forceSimulation = null),\n                Object.assign(this, t);\n            }),\n            (n.prototype.destroy = function () {\n              this.ticking &&\n                (this.forceSimulation.stop(), (this.ticking = !1)),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            n\n          );\n        })(h.Base);\n      function p() {\n        return (\n          \"undefined\" != typeof WorkerGlobalScope &&\n          self instanceof WorkerGlobalScope\n        );\n      }\n      n.ForceLayout = y;\n    },\n    403: function (t, n, e) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, n, e, r) {\n                void 0 === r && (r = e),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return n[e];\n                    },\n                  });\n              }\n            : function (t, n, e, r) {\n                void 0 === r && (r = e), (t[r] = n[e]);\n              }),\n        o =\n          (this && this.__setModuleDefault) ||\n          (Object.create\n            ? function (t, n) {\n                Object.defineProperty(t, \"default\", {\n                  enumerable: !0,\n                  value: n,\n                });\n              }\n            : function (t, n) {\n                t.default = n;\n              }),\n        i =\n          (this && this.__importStar) ||\n          function (t) {\n            if (t && t.__esModule) return t;\n            var n = {};\n            if (null != t)\n              for (var e in t)\n                \"default\" !== e &&\n                  Object.prototype.hasOwnProperty.call(t, e) &&\n                  r(n, t, e);\n            return o(n, t), n;\n          };\n      Object.defineProperty(n, \"__esModule\", { value: !0 });\n      var u = i(e(167));\n      n.default = function () {\n        function t(t) {\n          return function () {\n            return t;\n          };\n        }\n        var n,\n          e = function (t) {\n            return t.cluster;\n          },\n          r = t(1),\n          o = t(-1),\n          i = t(100),\n          c = t(0.1),\n          f = [0, 0],\n          a = [],\n          l = {},\n          s = [],\n          h = 100,\n          d = 100,\n          y = { none: { x: 0, y: 0 } },\n          p = [],\n          v = \"force\",\n          g = !0,\n          _ = 0.1;\n        function x(t) {\n          if (!g) return x;\n          n.tick(), w();\n          for (var r = 0, o = a.length, i = void 0, u = t * _; r < o; ++r)\n            ((i = a[r]).vx += (y[e(i)].x - i.x) * u),\n              (i.vy += (y[e(i)].y - i.y) * u);\n        }\n        function b() {\n          a &&\n            (function () {\n              if (!a || !a.length) return;\n              if (void 0 === e(a[0]))\n                throw Error(\n                  \"Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInABox.groupBy('clusterAttr') before calling .links()\",\n                );\n              var t =\n                ((y = []),\n                (v = []),\n                (g = {}),\n                (_ = []),\n                (f = (function (t) {\n                  var n = {};\n                  return (\n                    t.forEach(function (t) {\n                      var r = e(t);\n                      n[r] || (n[r] = { count: 0, sumforceNodeSize: 0 });\n                    }),\n                    t.forEach(function (t) {\n                      var o = e(t),\n                        i = r(t),\n                        u = n[o];\n                      (u.count = u.count + 1),\n                        (u.sumforceNodeSize =\n                          u.sumforceNodeSize + Math.PI * (i * i) * 1.3),\n                        (n[o] = u);\n                    }),\n                    n\n                  );\n                })(a)),\n                (_ = (function (t) {\n                  var n = {},\n                    r = [];\n                  return (\n                    t.forEach(function (t) {\n                      var r = (function (t) {\n                          var n = e(l[t.source]),\n                            r = e(l[t.target]);\n                          return n <= r ? n + \"~\" + r : r + \"~\" + n;\n                        })(t),\n                        o = 0;\n                      void 0 !== n[r] && (o = n[r]), (o += 1), (n[r] = o);\n                    }),\n                    Object.entries(n).forEach(function (t) {\n                      var n = t[0],\n                        e = t[1],\n                        o = n.split(\"~\")[0],\n                        i = n.split(\"~\")[1];\n                      void 0 !== o &&\n                        void 0 !== i &&\n                        r.push({ source: o, target: i, count: e });\n                    }),\n                    r\n                  );\n                })(s)),\n                Object.keys(f).forEach(function (t, n) {\n                  var e = f[t];\n                  y.push({\n                    id: t,\n                    size: e.count,\n                    r: Math.sqrt(e.sumforceNodeSize / Math.PI),\n                  }),\n                    (g[t] = n);\n                }),\n                _.forEach(function (t) {\n                  var n = g[t.source],\n                    e = g[t.target];\n                  void 0 !== n &&\n                    void 0 !== e &&\n                    v.push({ source: n, target: e, count: t.count });\n                }),\n                { nodes: y, links: v });\n              var f, y, v, g, _;\n              (n = u\n                .forceSimulation(t.nodes)\n                .force(\"x\", u.forceX(h).strength(0.1))\n                .force(\"y\", u.forceY(d).strength(0.1))\n                .force(\n                  \"collide\",\n                  u\n                    .forceCollide(function (t) {\n                      return t.r;\n                    })\n                    .iterations(4),\n                )\n                .force(\"charge\", u.forceManyBody().strength(o))\n                .force(\n                  \"links\",\n                  u\n                    .forceLink(t.nodes.length ? t.links : [])\n                    .distance(i)\n                    .strength(c),\n                )),\n                (p = n.nodes()),\n                w();\n            })();\n        }\n        function w() {\n          return (\n            (y = { none: { x: 0, y: 0 } }),\n            p.forEach(function (t) {\n              y[t.id] = { x: t.x - f[0], y: t.y - f[1] };\n            }),\n            y\n          );\n        }\n        function m(t) {\n          (l = {}),\n            t.forEach(function (t) {\n              l[t.id] = t;\n            });\n        }\n        return (\n          (x.initialize = function (t) {\n            (a = t), b();\n          }),\n          (x.template = function (t) {\n            return arguments.length ? ((v = t), b(), x) : v;\n          }),\n          (x.groupBy = function (t) {\n            return arguments.length\n              ? \"string\" == typeof t\n                ? ((e = function (n) {\n                    return n[t];\n                  }),\n                  x)\n                : ((e = t), x)\n              : e;\n          }),\n          (x.enableGrouping = function (t) {\n            return arguments.length ? ((g = t), x) : g;\n          }),\n          (x.strength = function (t) {\n            return arguments.length ? ((_ = t), x) : _;\n          }),\n          (x.centerX = function (t) {\n            return arguments.length ? ((h = t), x) : h;\n          }),\n          (x.centerY = function (t) {\n            return arguments.length ? ((d = t), x) : d;\n          }),\n          (x.nodes = function (t) {\n            return arguments.length ? (m(t || []), (a = t || []), x) : a;\n          }),\n          (x.links = function (t) {\n            return arguments.length ? ((s = t || []), b(), x) : s;\n          }),\n          (x.forceNodeSize = function (n) {\n            return arguments.length\n              ? ((r = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : r;\n          }),\n          (x.nodeSize = x.forceNodeSize),\n          (x.forceCharge = function (n) {\n            return arguments.length\n              ? ((o = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : o;\n          }),\n          (x.forceLinkDistance = function (n) {\n            return arguments.length\n              ? ((i = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : i;\n          }),\n          (x.forceLinkStrength = function (n) {\n            return arguments.length\n              ? ((c = \"function\" == typeof n ? n : t(+n)), b(), x)\n              : c;\n          }),\n          (x.offset = function (t) {\n            return arguments.length ? ((f = t), x) : f;\n          }),\n          (x.getFocis = w),\n          x\n        );\n      };\n    },\n    404: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }),\n        (n.LAYOUT_MESSAGE = void 0),\n        (n.LAYOUT_MESSAGE = {\n          RUN: \"LAYOUT_RUN\",\n          END: \"LAYOUT_END\",\n          ERROR: \"LAYOUT_ERROR\",\n          TICK: \"LAYOUT_TICK\",\n          GPURUN: \"GPU_LAYOUT_RUN\",\n          GPUEND: \"GPU_LAYOUT_END\",\n        });\n    },\n    7: function (t, n, e) {\n      \"use strict\";\n      Object.defineProperty(n, \"__esModule\", { value: !0 }), (n.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      n.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=forceLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/fruchtermanLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var o = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            n.d(\n              r,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 405))\n    );\n  })({\n    10: function (t, e, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[n];\n                    },\n                  });\n              }\n            : function (t, e, n, r) {\n                void 0 === r && (r = n), (t[r] = e[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var n in t)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(e, n) ||\n                r(e, t, n);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(n(11), e),\n        o(n(12), e),\n        o(n(13), e),\n        o(n(14), e),\n        o(n(15), e),\n        o(n(16), e);\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    14: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n          e[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (e[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (e[r][o] = t[r][o])\n              : (e[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              e[r][o] > e[r][i] + e[i][o] && (e[r][o] = e[r][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                u = i[n],\n                c = i[r];\n              (o[u][c] = 1), e || (o[c][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (e = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    177: function (t, e, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.FruchtermanLayout = void 0);\n      var i = n(7),\n        u = n(10),\n        c = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.maxIteration = 1e3),\n              (n.gravity = 10),\n              (n.speed = 5),\n              (n.clustering = !1),\n              (n.clusterGravity = 10),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.nodeMap = {}),\n              (n.nodeIdxMap = {}),\n              (n.onLayoutEnd = function () {}),\n              (n.tick = function () {}),\n              n.updateCfg(e),\n              n\n            );\n          }\n          return (\n            o(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                maxIteration: 1e3,\n                gravity: 10,\n                speed: 1,\n                clustering: !1,\n                clusterGravity: 10,\n              };\n            }),\n            (e.prototype.execute = function () {\n              var t = this,\n                e = this.nodes;\n              if (\n                (void 0 !== this.timeInterval &&\n                  \"undefined\" != typeof window &&\n                  window.clearInterval(this.timeInterval),\n                e && 0 !== e.length)\n              ) {\n                this.width ||\n                  \"undefined\" == typeof window ||\n                  (this.width = window.innerWidth),\n                  this.height ||\n                    \"undefined\" == typeof window ||\n                    (this.height = window.innerHeight),\n                  this.center ||\n                    (this.center = [this.width / 2, this.height / 2]);\n                var n = this.center;\n                if (1 === e.length)\n                  return (\n                    (e[0].x = n[0]),\n                    (e[0].y = n[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                var r = {},\n                  o = {};\n                return (\n                  e.forEach(function (e, n) {\n                    u.isNumber(e.x) || (e.x = Math.random() * t.width),\n                      u.isNumber(e.y) || (e.y = Math.random() * t.height),\n                      (r[e.id] = e),\n                      (o[e.id] = n);\n                  }),\n                  (this.nodeMap = r),\n                  (this.nodeIdxMap = o),\n                  this.run()\n                );\n              }\n              this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (e.prototype.run = function () {\n              var t = this,\n                e = t.nodes;\n              if (e) {\n                var n = t.edges,\n                  r = t.maxIteration,\n                  o = t.center,\n                  i = t.height * t.width,\n                  c = Math.sqrt(i) / 10,\n                  s = i / (e.length + 1),\n                  a = Math.sqrt(s),\n                  f = t.gravity,\n                  y = t.speed,\n                  l = t.clustering,\n                  d = {};\n                if (l)\n                  for (var p in (e.forEach(function (t) {\n                    if (void 0 === d[t.cluster]) {\n                      var e = { name: t.cluster, cx: 0, cy: 0, count: 0 };\n                      d[t.cluster] = e;\n                    }\n                    var n = d[t.cluster];\n                    u.isNumber(t.x) && (n.cx += t.x),\n                      u.isNumber(t.y) && (n.cy += t.y),\n                      n.count++;\n                  }),\n                  d))\n                    (d[p].cx /= d[p].count), (d[p].cy /= d[p].count);\n                if (\"undefined\" != typeof window) {\n                  var h = 0;\n                  return (\n                    (this.timeInterval = window.setInterval(function () {\n                      if (e) {\n                        var i = [];\n                        if (\n                          (e.forEach(function (t, e) {\n                            i[e] = { x: 0, y: 0 };\n                          }),\n                          t.applyCalculate(e, n, i, a, s),\n                          l)\n                        ) {\n                          var p = t.clusterGravity || f;\n                          for (var v in (e.forEach(function (t, e) {\n                            if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                              var n = d[t.cluster],\n                                r = Math.sqrt(\n                                  (t.x - n.cx) * (t.x - n.cx) +\n                                    (t.y - n.cy) * (t.y - n.cy),\n                                ),\n                                o = a * p;\n                              (i[e].x -= (o * (t.x - n.cx)) / r),\n                                (i[e].y -= (o * (t.y - n.cy)) / r);\n                            }\n                          }),\n                          d))\n                            (d[v].cx = 0), (d[v].cy = 0), (d[v].count = 0);\n                          for (var v in (e.forEach(function (t) {\n                            var e = d[t.cluster];\n                            u.isNumber(t.x) && (e.cx += t.x),\n                              u.isNumber(t.y) && (e.cy += t.y),\n                              e.count++;\n                          }),\n                          d))\n                            (d[v].cx /= d[v].count), (d[v].cy /= d[v].count);\n                        }\n                        e.forEach(function (t, e) {\n                          if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                            var n = 0.01 * a * f;\n                            (i[e].x -= n * (t.x - o[0])),\n                              (i[e].y -= n * (t.y - o[1]));\n                          }\n                        }),\n                          e.forEach(function (t, e) {\n                            if (u.isNumber(t.fx) && u.isNumber(t.fy))\n                              return (t.x = t.fx), void (t.y = t.fy);\n                            if (u.isNumber(t.x) && u.isNumber(t.y)) {\n                              var n = Math.sqrt(\n                                i[e].x * i[e].x + i[e].y * i[e].y,\n                              );\n                              if (n > 0) {\n                                var r = Math.min(c * (y / 800), n);\n                                (t.x += (i[e].x / n) * r),\n                                  (t.y += (i[e].y / n) * r);\n                              }\n                            }\n                          }),\n                          t.tick && t.tick(),\n                          ++h >= r &&\n                            (t.onLayoutEnd && t.onLayoutEnd(),\n                            window.clearInterval(t.timeInterval));\n                      }\n                    }, 0)),\n                    { nodes: e, edges: n }\n                  );\n                }\n              }\n            }),\n            (e.prototype.applyCalculate = function (t, e, n, r, o) {\n              this.calRepulsive(t, n, o), e && this.calAttractive(e, n, r);\n            }),\n            (e.prototype.calRepulsive = function (t, e, n) {\n              t.forEach(function (r, o) {\n                (e[o] = { x: 0, y: 0 }),\n                  t.forEach(function (t, i) {\n                    if (\n                      o !== i &&\n                      u.isNumber(r.x) &&\n                      u.isNumber(t.x) &&\n                      u.isNumber(r.y) &&\n                      u.isNumber(t.y)\n                    ) {\n                      var c = r.x - t.x,\n                        s = r.y - t.y,\n                        a = c * c + s * s;\n                      if (0 === a) {\n                        a = 1;\n                        var f = o > i ? 1 : -1;\n                        (c = 0.01 * f), (s = 0.01 * f);\n                      }\n                      var y = n / a;\n                      (e[o].x += c * y), (e[o].y += s * y);\n                    }\n                  });\n              });\n            }),\n            (e.prototype.calAttractive = function (t, e, n) {\n              var r = this;\n              t.forEach(function (t) {\n                if (t.source && t.target) {\n                  var o = r.nodeIdxMap[t.source],\n                    i = r.nodeIdxMap[t.target];\n                  if (o !== i) {\n                    var c = r.nodeMap[t.source],\n                      s = r.nodeMap[t.target];\n                    if (\n                      u.isNumber(s.x) &&\n                      u.isNumber(c.x) &&\n                      u.isNumber(s.y) &&\n                      u.isNumber(c.y)\n                    ) {\n                      var a = s.x - c.x,\n                        f = s.y - c.y,\n                        y = Math.sqrt(a * a + f * f),\n                        l = (y * y) / n;\n                      (e[i].x -= (a / y) * l),\n                        (e[i].y -= (f / y) * l),\n                        (e[o].x += (a / y) * l),\n                        (e[o].y += (f / y) * l);\n                    }\n                  }\n                }\n              });\n            }),\n            (e.prototype.stop = function () {\n              this.timeInterval &&\n                \"undefined\" != typeof window &&\n                window.clearInterval(this.timeInterval);\n            }),\n            (e.prototype.destroy = function () {\n              this.stop(),\n                (this.tick = null),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.getType = function () {\n              return \"fruchterman\";\n            }),\n            e\n          );\n        })(i.Base);\n      e.FruchtermanLayout = c;\n    },\n    405: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var r = n(177);\n      e.default = r.FruchtermanLayout;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=fruchtermanLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/gForceLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var o = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var o in t)\n            n.d(\n              r,\n              o,\n              function (e) {\n                return t[e];\n              }.bind(null, o),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 406))\n    );\n  })({\n    10: function (t, e, n) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, e, n, r) {\n                void 0 === r && (r = n),\n                  Object.defineProperty(t, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return e[n];\n                    },\n                  });\n              }\n            : function (t, e, n, r) {\n                void 0 === r && (r = n), (t[r] = e[n]);\n              }),\n        o =\n          (this && this.__exportStar) ||\n          function (t, e) {\n            for (var n in t)\n              \"default\" === n ||\n                Object.prototype.hasOwnProperty.call(e, n) ||\n                r(e, t, n);\n          };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        o(n(11), e),\n        o(n(12), e),\n        o(n(13), e),\n        o(n(14), e),\n        o(n(15), e),\n        o(n(16), e);\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r,\n        o,\n        i = /-(\\w)/g;\n      e.camelize =\n        ((r = function (t) {\n          return t.replace(i, function (t, e) {\n            return e ? e.toUpperCase() : \"\";\n          });\n        }),\n        (o = Object.create(null)),\n        function (t) {\n          return o[t] || (o[t] = r(t));\n        });\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    13: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    14: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        for (var r = [], o = 0; o < t; o++) r[o] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      e.floydWarshall = function (t) {\n        for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n          e[r] = [];\n          for (var o = 0; o < n; o += 1)\n            r === o\n              ? (e[r][o] = 0)\n              : 0 !== t[r][o] && t[r][o]\n              ? (e[r][o] = t[r][o])\n              : (e[r][o] = 1 / 0);\n        }\n        for (var i = 0; i < n; i += 1)\n          for (r = 0; r < n; r += 1)\n            for (o = 0; o < n; o += 1)\n              e[r][o] > e[r][i] + e[i][o] && (e[r][o] = e[r][i] + e[i][o]);\n        return e;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          o = [],\n          i = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              i[t.id] = e;\n              o.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                u = i[n],\n                a = i[r];\n              (o[u][a] = 1), e || (o[a][u] = 1);\n            }),\n          o\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            if (e && e.children)\n              for (var r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    15: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var o =\n        (this && this.__assign) ||\n        function () {\n          return (o =\n            Object.assign ||\n            function (t) {\n              for (var e, n = 1, r = arguments.length; n < r; n++)\n                for (var o in (e = arguments[n]))\n                  Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === r(t);\n      };\n      e.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            })\n          );\n        }\n        if (\"object\" === r(t) && t !== {}) {\n          var i = o({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = e.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    178: function (t, e, n) {\n      \"use strict\";\n      var r,\n        o =\n          (this && this.__extends) ||\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.GForceLayout = void 0);\n      var i = n(7),\n        u = n(10),\n        a = function (t, e) {\n          return t\n            ? u.isNumber(t)\n              ? function (e) {\n                  return t;\n                }\n              : t\n            : function (t) {\n                return e || 1;\n              };\n        },\n        c = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.maxIteration = 1e3),\n              (n.edgeStrength = 200),\n              (n.nodeStrength = 1e3),\n              (n.coulombDisScale = 0.005),\n              (n.damping = 0.9),\n              (n.maxSpeed = 1e3),\n              (n.minMovement = 0.5),\n              (n.interval = 0.02),\n              (n.factor = 1),\n              (n.linkDistance = 1),\n              (n.gravity = 10),\n              (n.preventOverlap = !0),\n              (n.tick = function () {}),\n              (n.nodes = []),\n              (n.edges = []),\n              (n.width = 300),\n              (n.height = 300),\n              (n.nodeMap = {}),\n              (n.nodeIdxMap = {}),\n              n.updateCfg(e),\n              n\n            );\n          }\n          return (\n            o(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { maxIteration: 500, gravity: 10, enableTick: !0 };\n            }),\n            (e.prototype.execute = function () {\n              var t = this,\n                e = t.nodes;\n              if (\n                (void 0 !== t.timeInterval &&\n                  \"undefined\" != typeof window &&\n                  window.clearInterval(t.timeInterval),\n                e && 0 !== e.length)\n              ) {\n                t.width ||\n                  \"undefined\" == typeof window ||\n                  (t.width = window.innerWidth),\n                  t.height ||\n                    \"undefined\" == typeof window ||\n                    (t.height = window.innerHeight),\n                  t.center || (t.center = [t.width / 2, t.height / 2]);\n                var n = t.center;\n                if (1 === e.length)\n                  return (\n                    (e[0].x = n[0]),\n                    (e[0].y = n[1]),\n                    void (t.onLayoutEnd && t.onLayoutEnd())\n                  );\n                var r = {},\n                  o = {};\n                e.forEach(function (e, n) {\n                  u.isNumber(e.x) || (e.x = Math.random() * t.width),\n                    u.isNumber(e.y) || (e.y = Math.random() * t.height),\n                    (r[e.id] = e),\n                    (o[e.id] = n);\n                }),\n                  (t.nodeMap = r),\n                  (t.nodeIdxMap = o),\n                  (t.linkDistance = a(t.linkDistance, 1)),\n                  (t.nodeStrength = a(t.nodeStrength, 1)),\n                  (t.edgeStrength = a(t.edgeStrength, 1));\n                var i,\n                  c = t.nodeSize;\n                if (t.preventOverlap) {\n                  var s,\n                    f = t.nodeSpacing;\n                  (s = u.isNumber(f)\n                    ? function () {\n                        return f;\n                      }\n                    : u.isFunction(f)\n                    ? f\n                    : function () {\n                        return 0;\n                      }),\n                    (i = c\n                      ? u.isArray(c)\n                        ? function (t) {\n                            return (c[0] > c[1] ? c[0] : c[1]) + s(t);\n                          }\n                        : function (t) {\n                            return c + s(t);\n                          }\n                      : function (t) {\n                          return t.size\n                            ? u.isArray(t.size)\n                              ? (t.size[0] > t.size[1]\n                                  ? t.size[0]\n                                  : t.size[1]) + s(t)\n                              : t.size + s(t)\n                            : 10 + s(t);\n                        });\n                }\n                t.nodeSize = i;\n                var d = t.edges;\n                (t.degrees = u.getDegree(e.length, t.nodeIdxMap, d)),\n                  t.getMass ||\n                    (t.getMass = function (e) {\n                      return t.degrees[t.nodeIdxMap[e.id]] || 1;\n                    }),\n                  t.run();\n              } else t.onLayoutEnd && t.onLayoutEnd();\n            }),\n            (e.prototype.run = function () {\n              var t = this,\n                e = t.nodes,\n                n = t.edges,\n                r = t.maxIteration;\n              if (\"undefined\" != typeof window) {\n                var o = 0;\n                this.timeInterval = window.setInterval(function () {\n                  var i = [],\n                    u = [];\n                  if (e) {\n                    e.forEach(function (t, e) {\n                      (i[2 * e] = 0),\n                        (i[2 * e + 1] = 0),\n                        (u[2 * e] = 0),\n                        (u[2 * e + 1] = 0);\n                    }),\n                      t.calRepulsive(i, e),\n                      n && t.calAttractive(i, n),\n                      t.calGravity(i, e);\n                    var a = Math.max(0.02, t.interval - 0.002 * o);\n                    t.updateVelocity(i, u, a, e);\n                    var c = [];\n                    e.forEach(function (t) {\n                      c.push({ x: t.x, y: t.y });\n                    }),\n                      t.updatePosition(u, a, e),\n                      t.tick && t.tick();\n                    var s = 0;\n                    e.forEach(function (t, e) {\n                      var n = t.x - c[e].x,\n                        r = t.y - c[e].y;\n                      s += Math.sqrt(n * n + r * r);\n                    }),\n                      (s /= e.length) < t.minMovement &&\n                        (window.clearInterval(t.timeInterval),\n                        t.onLayoutEnd && t.onLayoutEnd()),\n                      ++o >= r &&\n                        (t.onLayoutEnd && t.onLayoutEnd(),\n                        window.clearInterval(t.timeInterval));\n                  }\n                }, 0);\n              }\n            }),\n            (e.prototype.calRepulsive = function (t, e) {\n              var n = this.getMass,\n                r = this.nodeStrength,\n                o = this.factor,\n                i = this.coulombDisScale,\n                u = this.preventOverlap,\n                a = this.nodeSize;\n              e.forEach(function (c, s) {\n                var f = n ? n(c) : 1;\n                e.forEach(function (e, d) {\n                  if (!(s >= d)) {\n                    var l = c.x - e.x,\n                      p = c.y - e.y,\n                      y = Math.sqrt(l * l + p * p) + 0.01,\n                      h = (y + 0.1) * i,\n                      v = l / y,\n                      g = p / y,\n                      b = (((r(c) + r(e)) / 2) * o) / (h * h),\n                      m = n ? n(e) : 1;\n                    if (\n                      ((t[2 * s] += v * b),\n                      (t[2 * s + 1] += g * b),\n                      (t[2 * d] -= v * b),\n                      (t[2 * d + 1] -= g * b),\n                      u && y < (a(c) + a(e)) / 2)\n                    ) {\n                      var x = (r(c) + r(e)) / 2 / (y * y);\n                      (t[2 * s] += (v * x) / f),\n                        (t[2 * s + 1] += (g * x) / f),\n                        (t[2 * d] -= (v * x) / m),\n                        (t[2 * d + 1] -= (g * x) / m);\n                    }\n                  }\n                });\n              });\n            }),\n            (e.prototype.calAttractive = function (t, e) {\n              var n = this.nodeMap,\n                r = this.nodeIdxMap,\n                o = this.linkDistance,\n                i = this.edgeStrength,\n                u = this.getMass;\n              e.forEach(function (e, a) {\n                var c = n[e.source],\n                  s = n[e.target],\n                  f = s.x - c.x,\n                  d = s.y - c.y,\n                  l = Math.sqrt(f * f + d * d) + 0.01,\n                  p = f / l,\n                  y = d / l,\n                  h = ((o(e) || 1) - l) * i(e),\n                  v = r[e.source],\n                  g = r[e.target],\n                  b = u ? u(c) : 1,\n                  m = u ? u(s) : 1;\n                (t[2 * v] -= (p * h) / b),\n                  (t[2 * v + 1] -= (y * h) / b),\n                  (t[2 * g] += (p * h) / m),\n                  (t[2 * g + 1] += (y * h) / m);\n              });\n            }),\n            (e.prototype.calGravity = function (t, e) {\n              for (\n                var n = this.center,\n                  r = this.gravity,\n                  o = this.degrees,\n                  i = e.length,\n                  a = 0;\n                a < i;\n                a++\n              ) {\n                var c = e[a],\n                  s = c.x - n[0],\n                  f = c.y - n[1],\n                  d = r;\n                if (this.getCenter) {\n                  var l = this.getCenter(c, o[a]);\n                  l &&\n                    u.isNumber(l[0]) &&\n                    u.isNumber(l[1]) &&\n                    u.isNumber(l[2]) &&\n                    ((s = c.x - l[0]), (f = c.y - l[1]), (d = l[2]));\n                }\n                d && ((t[2 * a] -= d * s), (t[2 * a + 1] -= d * f));\n              }\n            }),\n            (e.prototype.updateVelocity = function (t, e, n, r) {\n              var o = this,\n                i = n * o.damping;\n              r.forEach(function (n, r) {\n                var u = t[2 * r] * i || 0.01,\n                  a = t[2 * r + 1] * i || 0.01,\n                  c = Math.sqrt(u * u + a * a);\n                if (c > o.maxSpeed) {\n                  var s = o.maxSpeed / c;\n                  (u *= s), (a *= s);\n                }\n                (e[2 * r] = u), (e[2 * r + 1] = a);\n              });\n            }),\n            (e.prototype.updatePosition = function (t, e, n) {\n              n.forEach(function (n, r) {\n                if (u.isNumber(n.fx) && u.isNumber(n.fy))\n                  return (n.x = n.fx), void (n.y = n.fy);\n                var o = t[2 * r] * e,\n                  i = t[2 * r + 1] * e;\n                (n.x += o), (n.y += i);\n              });\n            }),\n            (e.prototype.stop = function () {\n              this.timeInterval &&\n                \"undefined\" != typeof window &&\n                window.clearInterval(this.timeInterval);\n            }),\n            (e.prototype.destroy = function () {\n              this.stop(),\n                (this.tick = null),\n                (this.nodes = null),\n                (this.edges = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.getType = function () {\n              return \"gForce\";\n            }),\n            e\n          );\n        })(i.Base);\n      e.GForceLayout = c;\n    },\n    406: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var r = n(178);\n      e.default = r.GForceLayout;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=gForceLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/gridLayout.js",
    "content": "!(function (e, t) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = t())\n    : \"function\" == typeof define && define.amd\n    ? define([], t)\n    : \"object\" == typeof exports\n    ? (exports.f6 = t())\n    : (e.f6 = t());\n})(this, function () {\n  return (function (e) {\n    var t = {};\n    function o(r) {\n      if (t[r]) return t[r].exports;\n      var n = (t[r] = { i: r, l: !1, exports: {} });\n      return e[r].call(n.exports, n, n.exports, o), (n.l = !0), n.exports;\n    }\n    return (\n      (o.m = e),\n      (o.c = t),\n      (o.d = function (e, t, r) {\n        o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });\n      }),\n      (o.r = function (e) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(e, \"__esModule\", { value: !0 });\n      }),\n      (o.t = function (e, t) {\n        if ((1 & t && (e = o(e)), 8 & t)) return e;\n        if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n        var r = Object.create(null);\n        if (\n          (o.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: e }),\n          2 & t && \"string\" != typeof e)\n        )\n          for (var n in e)\n            o.d(\n              r,\n              n,\n              function (t) {\n                return e[t];\n              }.bind(null, n),\n            );\n        return r;\n      }),\n      (o.n = function (e) {\n        var t =\n          e && e.__esModule\n            ? function () {\n                return e.default;\n              }\n            : function () {\n                return e;\n              };\n        return o.d(t, \"a\", t), t;\n      }),\n      (o.o = function (e, t) {\n        return Object.prototype.hasOwnProperty.call(e, t);\n      }),\n      (o.p = \"\"),\n      o((o.s = 407))\n    );\n  })({\n    10: function (e, t, o) {\n      \"use strict\";\n      var r =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (e, t, o, r) {\n                void 0 === r && (r = o),\n                  Object.defineProperty(e, r, {\n                    enumerable: !0,\n                    get: function () {\n                      return t[o];\n                    },\n                  });\n              }\n            : function (e, t, o, r) {\n                void 0 === r && (r = o), (e[r] = t[o]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (e, t) {\n            for (var o in e)\n              \"default\" === o ||\n                Object.prototype.hasOwnProperty.call(t, o) ||\n                r(t, e, o);\n          };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        n(o(11), t),\n        n(o(12), t),\n        n(o(13), t),\n        n(o(14), t),\n        n(o(15), t),\n        n(o(16), t);\n    },\n    11: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.camelize = t.isString = void 0);\n      t.isString = function (e) {\n        return \"string\" == typeof e;\n      };\n      var r,\n        n,\n        i = /-(\\w)/g;\n      t.camelize =\n        ((r = function (e) {\n          return e.replace(i, function (e, t) {\n            return t ? t.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (e) {\n          return n[e] || (n[e] = r(e));\n        });\n    },\n    12: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isArray = void 0),\n        (t.isArray = Array.isArray);\n    },\n    13: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.toNumber = t.isNaN = t.isNumber = void 0);\n      t.isNumber = function (e) {\n        return \"number\" == typeof e;\n      };\n      t.isNaN = function (e) {\n        return Number.isNaN(Number(e));\n      };\n      t.toNumber = function (e) {\n        var o = parseFloat(e);\n        return t.isNaN(o) ? e : o;\n      };\n    },\n    14: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.traverseTreeUp =\n          t.scaleMatrix =\n          t.getAdjMatrix =\n          t.floydWarshall =\n          t.getDegree =\n            void 0);\n      t.getDegree = function (e, t, o) {\n        for (var r = [], n = 0; n < e; n++) r[n] = 0;\n        return o\n          ? (o.forEach(function (e) {\n              e.source && (r[t[e.source]] += 1),\n                e.target && (r[t[e.target]] += 1);\n            }),\n            r)\n          : r;\n      };\n      t.floydWarshall = function (e) {\n        for (var t = [], o = e.length, r = 0; r < o; r += 1) {\n          t[r] = [];\n          for (var n = 0; n < o; n += 1)\n            r === n\n              ? (t[r][n] = 0)\n              : 0 !== e[r][n] && e[r][n]\n              ? (t[r][n] = e[r][n])\n              : (t[r][n] = 1 / 0);\n        }\n        for (var i = 0; i < o; i += 1)\n          for (r = 0; r < o; r += 1)\n            for (n = 0; n < o; n += 1)\n              t[r][n] > t[r][i] + t[i][n] && (t[r][n] = t[r][i] + t[i][n]);\n        return t;\n      };\n      t.getAdjMatrix = function (e, t) {\n        var o = e.nodes,\n          r = e.edges,\n          n = [],\n          i = {};\n        if (!o) throw new Error(\"invalid nodes data!\");\n        return (\n          o &&\n            o.forEach(function (e, t) {\n              i[e.id] = t;\n              n.push([]);\n            }),\n          r &&\n            r.forEach(function (e) {\n              var o = e.source,\n                r = e.target,\n                s = i[o],\n                u = i[r];\n              (n[s][u] = 1), t || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      t.scaleMatrix = function (e, t) {\n        var o = [];\n        return (\n          e.forEach(function (e) {\n            var r = [];\n            e.forEach(function (e) {\n              r.push(e * t);\n            }),\n              o.push(r);\n          }),\n          o\n        );\n      };\n      t.traverseTreeUp = function (e, t) {\n        \"function\" == typeof t &&\n          (function e(t, o) {\n            if (t && t.children)\n              for (var r = t.children.length - 1; r >= 0; r--)\n                if (!e(t.children[r], o)) return;\n            return !!o(t);\n          })(e, t);\n      };\n    },\n    15: function (e, t, o) {\n      \"use strict\";\n      function r(e) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (e) {\n                return typeof e;\n              }\n            : function (e) {\n                return e &&\n                  \"function\" == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof e;\n              })(e);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (e) {\n              for (var t, o = 1, r = arguments.length; o < r; o++)\n                for (var n in (t = arguments[o]))\n                  Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n              return e;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.clone = t.isObject = void 0);\n      t.isObject = function (e) {\n        return null !== e && \"object\" === r(e);\n      };\n      t.clone = function (e) {\n        if (null === e) return e;\n        if (e instanceof Date) return new Date(e.getTime());\n        if (e instanceof Array) {\n          var o = [];\n          return (\n            e.forEach(function (e) {\n              o.push(e);\n            }),\n            o.map(function (e) {\n              return t.clone(e);\n            })\n          );\n        }\n        if (\"object\" === r(e) && e !== {}) {\n          var i = n({}, e);\n          return (\n            Object.keys(i).forEach(function (e) {\n              i[e] = t.clone(i[e]);\n            }),\n            i\n          );\n        }\n        return e;\n      };\n    },\n    16: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.isFunction = void 0);\n      t.isFunction = function (e) {\n        return \"function\" == typeof e;\n      };\n    },\n    179: function (e, t, o) {\n      \"use strict\";\n      var r,\n        n =\n          (this && this.__extends) ||\n          ((r = function (e, t) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (e, t) {\n                  e.__proto__ = t;\n                }) ||\n              function (e, t) {\n                for (var o in t)\n                  Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n              })(e, t);\n          }),\n          function (e, t) {\n            if (\"function\" != typeof t && null !== t)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(t) +\n                  \" is not a constructor or null\",\n              );\n            function o() {\n              this.constructor = e;\n            }\n            r(e, t),\n              (e.prototype =\n                null === t\n                  ? Object.create(t)\n                  : ((o.prototype = t.prototype), new o()));\n          });\n      Object.defineProperty(t, \"__esModule\", { value: !0 }),\n        (t.GridLayout = void 0);\n      var i = o(10),\n        s = (function (e) {\n          function t(t) {\n            var o = e.call(this) || this;\n            return (\n              (o.begin = [0, 0]),\n              (o.preventOverlap = !0),\n              (o.preventOverlapPadding = 10),\n              (o.condense = !1),\n              (o.sortBy = \"degree\"),\n              (o.nodeSize = 30),\n              (o.nodes = []),\n              (o.edges = []),\n              (o.width = 300),\n              (o.height = 300),\n              (o.row = 0),\n              (o.col = 0),\n              (o.cellWidth = 0),\n              (o.cellHeight = 0),\n              (o.cellUsed = {}),\n              (o.id2manPos = {}),\n              (o.onLayoutEnd = function () {}),\n              o.updateCfg(t),\n              o\n            );\n          }\n          return (\n            n(t, e),\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                begin: [0, 0],\n                preventOverlap: !0,\n                preventOverlapPadding: 10,\n                condense: !1,\n                rows: void 0,\n                cols: void 0,\n                position: void 0,\n                sortBy: \"degree\",\n                nodeSize: 30,\n              };\n            }),\n            (t.prototype.execute = function () {\n              var e = this,\n                t = e.nodes,\n                o = t.length,\n                r = e.begin;\n              if (0 !== o) {\n                if (1 === o)\n                  return (\n                    (t[0].x = r[0]),\n                    (t[0].y = r[1]),\n                    void (e.onLayoutEnd && e.onLayoutEnd())\n                  );\n                var n = e.edges,\n                  s = [];\n                t.forEach(function (e) {\n                  s.push(e);\n                });\n                var u = {};\n                if (\n                  (s.forEach(function (e, t) {\n                    u[e.id] = t;\n                  }),\n                  (\"degree\" === e.sortBy ||\n                    !i.isString(e.sortBy) ||\n                    void 0 === s[0][e.sortBy]) &&\n                    ((e.sortBy = \"degree\"), i.isNaN(t[0].degree)))\n                ) {\n                  var c = i.getDegree(s.length, u, n);\n                  s.forEach(function (e, t) {\n                    e.degree = c[t];\n                  });\n                }\n                s.sort(function (t, o) {\n                  return o[e.sortBy] - t[e.sortBy];\n                }),\n                  e.width ||\n                    \"undefined\" == typeof window ||\n                    (e.width = window.innerWidth),\n                  e.height ||\n                    \"undefined\" == typeof window ||\n                    (e.height = window.innerHeight);\n                var l = e.rows,\n                  a = null != e.cols ? e.cols : e.columns;\n                if (\n                  ((e.cells = o),\n                  null != l && null != a\n                    ? ((e.rows = l), (e.cols = a))\n                    : null != l && null == a\n                    ? ((e.rows = l), (e.cols = Math.ceil(e.cells / e.rows)))\n                    : null == l && null != a\n                    ? ((e.cols = a), (e.rows = Math.ceil(e.cells / e.cols)))\n                    : ((e.splits = Math.sqrt((e.cells * e.height) / e.width)),\n                      (e.rows = Math.round(e.splits)),\n                      (e.cols = Math.round((e.width / e.height) * e.splits))),\n                  e.cols * e.rows > e.cells)\n                )\n                  ((d = e.small()) - 1) * (f = e.large()) >= e.cells\n                    ? e.small(d - 1)\n                    : (f - 1) * d >= e.cells && e.large(f - 1);\n                else\n                  for (; e.cols * e.rows < e.cells; ) {\n                    var f,\n                      d = e.small();\n                    ((f = e.large()) + 1) * d >= e.cells\n                      ? e.large(f + 1)\n                      : e.small(d + 1);\n                  }\n                (e.cellWidth = e.width / e.cols),\n                  (e.cellHeight = e.height / e.rows),\n                  e.condense && ((e.cellWidth = 0), (e.cellHeight = 0)),\n                  e.preventOverlap &&\n                    s.forEach(function (t) {\n                      var o, r;\n                      (t.x && t.y) || ((t.x = 0), (t.y = 0)),\n                        i.isArray(t.size)\n                          ? ((o = t.size[0]), (r = t.size[1]))\n                          : i.isNumber(t.size) && ((o = t.size), (r = t.size)),\n                        (void 0 !== o && void 0 !== r) ||\n                          (i.isArray(e.nodeSize)\n                            ? ((o = e.nodeSize[0]), (r = e.nodeSize[1]))\n                            : i.isNumber(e.nodeSize)\n                            ? ((o = e.nodeSize), (r = e.nodeSize))\n                            : ((o = 30), (r = 30)));\n                      var n = e.preventOverlapPadding,\n                        s = o + n,\n                        u = r + n;\n                      (e.cellWidth = Math.max(e.cellWidth, s)),\n                        (e.cellHeight = Math.max(e.cellHeight, u));\n                    }),\n                  (e.cellUsed = {}),\n                  (e.row = 0),\n                  (e.col = 0),\n                  (e.id2manPos = {});\n                for (var p = 0; p < s.length; p++) {\n                  var h = s[p],\n                    y = void 0;\n                  if (\n                    (e.position && (y = e.position(h)),\n                    y && (void 0 !== y.row || void 0 !== y.col))\n                  ) {\n                    var v = { row: y.row, col: y.col };\n                    if (void 0 === v.col)\n                      for (v.col = 0; e.used(v.row, v.col); ) v.col++;\n                    else if (void 0 === v.row)\n                      for (v.row = 0; e.used(v.row, v.col); ) v.row++;\n                    (e.id2manPos[h.id] = v), e.use(v.row, v.col);\n                  }\n                  e.getPos(h);\n                }\n                return e.onLayoutEnd && e.onLayoutEnd(), { edges: n, nodes: s };\n              }\n              e.onLayoutEnd && e.onLayoutEnd();\n            }),\n            (t.prototype.small = function (e) {\n              var t,\n                o = this.rows || 5,\n                r = this.cols || 5;\n              null == e\n                ? (t = Math.min(o, r))\n                : Math.min(o, r) === this.rows\n                ? (this.rows = e)\n                : (this.cols = e);\n              return t;\n            }),\n            (t.prototype.large = function (e) {\n              var t,\n                o = this.rows || 5,\n                r = this.cols || 5;\n              null == e\n                ? (t = Math.max(o, r))\n                : Math.max(o, r) === this.rows\n                ? (this.rows = e)\n                : (this.cols = e);\n              return t;\n            }),\n            (t.prototype.used = function (e, t) {\n              return this.cellUsed[\"c-\" + e + \"-\" + t] || !1;\n            }),\n            (t.prototype.use = function (e, t) {\n              this.cellUsed[\"c-\" + e + \"-\" + t] = !0;\n            }),\n            (t.prototype.moveToNextCell = function () {\n              var e = this.cols || 5;\n              this.col++, this.col >= e && ((this.col = 0), this.row++);\n            }),\n            (t.prototype.getPos = function (e) {\n              var t,\n                o,\n                r = this.begin,\n                n = this.cellWidth,\n                i = this.cellHeight,\n                s = this.id2manPos[e.id];\n              if (s)\n                (t = s.col * n + n / 2 + r[0]), (o = s.row * i + i / 2 + r[1]);\n              else {\n                for (; this.used(this.row, this.col); ) this.moveToNextCell();\n                (t = this.col * n + n / 2 + r[0]),\n                  (o = this.row * i + i / 2 + r[1]),\n                  this.use(this.row, this.col),\n                  this.moveToNextCell();\n              }\n              (e.x = t), (e.y = o);\n            }),\n            (t.prototype.getType = function () {\n              return \"grid\";\n            }),\n            t\n          );\n        })(o(7).Base);\n      t.GridLayout = s;\n    },\n    407: function (e, t, o) {\n      \"use strict\";\n      o.r(t);\n      var r = o(179);\n      t.default = r.GridLayout;\n    },\n    7: function (e, t, o) {\n      \"use strict\";\n      Object.defineProperty(t, \"__esModule\", { value: !0 }), (t.Base = void 0);\n      var r = (function () {\n        function e() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (e.prototype.layout = function (e) {\n            return this.init(e), this.execute(!0);\n          }),\n          (e.prototype.init = function (e) {\n            (this.nodes = e.nodes || []),\n              (this.edges = e.edges || []),\n              (this.combos = e.combos || []);\n          }),\n          (e.prototype.execute = function (e) {}),\n          (e.prototype.executeWithWorker = function () {}),\n          (e.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (e.prototype.updateCfg = function (e) {\n            e && Object.assign(this, e);\n          }),\n          (e.prototype.getType = function () {\n            return \"base\";\n          }),\n          (e.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          e\n        );\n      })();\n      t.Base = r;\n    },\n  }).default;\n});\n//# sourceMappingURL=gridLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/mdsLayout.js",
    "content": "!(function (t, r) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = r())\n    : \"function\" == typeof define && define.amd\n    ? define([], r)\n    : \"object\" == typeof exports\n    ? (exports.f6 = r())\n    : (t.f6 = r());\n})(this, function () {\n  return (function (t) {\n    var r = {};\n    function e(o) {\n      if (r[o]) return r[o].exports;\n      var n = (r[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(n.exports, n, n.exports, e), (n.l = !0), n.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = r),\n      (e.d = function (t, r, o) {\n        e.o(t, r) || Object.defineProperty(t, r, { enumerable: !0, get: o });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, r) {\n        if ((1 & r && (t = e(t)), 8 & r)) return t;\n        if (4 & r && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (e.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & r && \"string\" != typeof t)\n        )\n          for (var n in t)\n            e.d(\n              o,\n              n,\n              function (r) {\n                return t[r];\n              }.bind(null, n),\n            );\n        return o;\n      }),\n      (e.n = function (t) {\n        var r =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(r, \"a\", r), r;\n      }),\n      (e.o = function (t, r) {\n        return Object.prototype.hasOwnProperty.call(t, r);\n      }),\n      (e.p = \"\"),\n      e((e.s = 408))\n    );\n  })({\n    10: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        n(e(11), r),\n        n(e(12), r),\n        n(e(13), r),\n        n(e(14), r),\n        n(e(15), r),\n        n(e(16), r);\n    },\n    102: function (t, r, e) {\n      \"use strict\";\n      e.r(r),\n        e.d(r, \"AbstractMatrix\", function () {\n          return Q;\n        }),\n        e.d(r, \"default\", function () {\n          return K;\n        }),\n        e.d(r, \"Matrix\", function () {\n          return K;\n        }),\n        e.d(r, \"MatrixColumnView\", function () {\n          return at;\n        }),\n        e.d(r, \"MatrixColumnSelectionView\", function () {\n          return yt;\n        }),\n        e.d(r, \"MatrixFlipColumnView\", function () {\n          return xt;\n        }),\n        e.d(r, \"MatrixFlipRowView\", function () {\n          return _t;\n        }),\n        e.d(r, \"MatrixRowView\", function () {\n          return Vt;\n        }),\n        e.d(r, \"MatrixRowSelectionView\", function () {\n          return Ut;\n        }),\n        e.d(r, \"MatrixSelectionView\", function () {\n          return Xt;\n        }),\n        e.d(r, \"MatrixSubView\", function () {\n          return or;\n        }),\n        e.d(r, \"MatrixTransposeView\", function () {\n          return cr;\n        }),\n        e.d(r, \"wrap\", function () {\n          return Or;\n        }),\n        e.d(r, \"WrapperMatrix1D\", function () {\n          return wr;\n        }),\n        e.d(r, \"WrapperMatrix2D\", function () {\n          return Er;\n        }),\n        e.d(r, \"solve\", function () {\n          return Vr;\n        }),\n        e.d(r, \"inverse\", function () {\n          return Ir;\n        }),\n        e.d(r, \"determinant\", function () {\n          return qr;\n        }),\n        e.d(r, \"linearDependencies\", function () {\n          return Br;\n        }),\n        e.d(r, \"pseudoInverse\", function () {\n          return Lr;\n        }),\n        e.d(r, \"covariance\", function () {\n          return Ur;\n        }),\n        e.d(r, \"correlation\", function () {\n          return Qr;\n        }),\n        e.d(r, \"SingularValueDecomposition\", function () {\n          return Nr;\n        }),\n        e.d(r, \"SVD\", function () {\n          return Nr;\n        }),\n        e.d(r, \"EigenvalueDecomposition\", function () {\n          return Hr;\n        }),\n        e.d(r, \"EVD\", function () {\n          return Hr;\n        }),\n        e.d(r, \"CholeskyDecomposition\", function () {\n          return re;\n        }),\n        e.d(r, \"CHO\", function () {\n          return re;\n        }),\n        e.d(r, \"LuDecomposition\", function () {\n          return jr;\n        }),\n        e.d(r, \"LU\", function () {\n          return jr;\n        }),\n        e.d(r, \"QrDecomposition\", function () {\n          return Tr;\n        }),\n        e.d(r, \"QR\", function () {\n          return Tr;\n        }),\n        e.d(r, \"Nipals\", function () {\n          return oe;\n        }),\n        e.d(r, \"NIPALS\", function () {\n          return oe;\n        });\n      var o = Object.prototype.toString;\n      function n(t) {\n        return o.call(t).endsWith(\"Array]\");\n      }\n      var i = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] > u && (u = t[a]);\n        return u;\n      };\n      var s = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] < u && (u = t[a]);\n        return u;\n      };\n      var u = function (t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          if (!n(t)) throw new TypeError(\"input must be an array\");\n          if (0 === t.length) throw new TypeError(\"input must not be empty\");\n          if (void 0 !== e.output) {\n            if (!n(e.output))\n              throw new TypeError(\n                \"output option must be an array if specified\",\n              );\n            r = e.output;\n          } else r = new Array(t.length);\n          var o = s(t),\n            u = i(t);\n          if (o === u)\n            throw new RangeError(\n              \"minimum and maximum input values are equal. Cannot rescale a constant array\",\n            );\n          var a = e.min,\n            f = void 0 === a ? (e.autoMinMax ? o : 0) : a,\n            c = e.max,\n            h = void 0 === c ? (e.autoMinMax ? u : 1) : c;\n          if (f >= h)\n            throw new RangeError(\"min option must be smaller than max option\");\n          for (var l = (h - f) / (u - o), p = 0; p < t.length; p++)\n            r[p] = (t[p] - o) * l + f;\n          return r;\n        },\n        a = \" \".repeat(2),\n        f = \" \".repeat(4);\n      function c(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = r.maxRows,\n          o = void 0 === e ? 15 : e,\n          n = r.maxColumns,\n          i = void 0 === n ? 10 : n,\n          s = r.maxNumSize,\n          u = void 0 === s ? 8 : s;\n        return \"\"\n          .concat(t.constructor.name, \" {\\n\")\n          .concat(a, \"[\\n\")\n          .concat(f)\n          .concat(h(t, o, i, u), \"\\n\")\n          .concat(a, \"]\\n\")\n          .concat(a, \"rows: \")\n          .concat(t.rows, \"\\n\")\n          .concat(a, \"columns: \")\n          .concat(t.columns, \"\\n}\");\n      }\n      function h(t, r, e, o) {\n        for (\n          var n = t.rows,\n            i = t.columns,\n            s = Math.min(n, r),\n            u = Math.min(i, e),\n            a = [],\n            c = 0;\n          c < s;\n          c++\n        ) {\n          for (var h = [], p = 0; p < u; p++) h.push(l(t.get(c, p), o));\n          a.push(\"\".concat(h.join(\" \")));\n        }\n        return (\n          u !== i &&\n            (a[a.length - 1] += \" ... \".concat(i - e, \" more columns\")),\n          s !== n && a.push(\"... \".concat(n - r, \" more rows\")),\n          a.join(\"\\n\".concat(f))\n        );\n      }\n      function l(t, r) {\n        var e = String(t);\n        if (e.length <= r) return e.padEnd(r, \" \");\n        var o = t.toPrecision(r - 2);\n        if (o.length <= r) return o;\n        var n = t.toExponential(r - 2),\n          i = n.indexOf(\"e\"),\n          s = n.slice(i);\n        return n.slice(0, r - s.length) + s;\n      }\n      function p(t) {\n        return (p =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function v(t, r, e) {\n        var o = e ? t.rows : t.rows - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Row index out of range\");\n      }\n      function y(t, r, e) {\n        var o = e ? t.columns : t.columns - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Column index out of range\");\n      }\n      function m(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.columns))\n          throw new RangeError(\n            \"vector size must be the same as the number of columns\",\n          );\n        return r;\n      }\n      function g(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.rows))\n          throw new RangeError(\n            \"vector size must be the same as the number of rows\",\n          );\n        return r;\n      }\n      function w(t, r, e) {\n        return { row: b(t, r), column: d(t, e) };\n      }\n      function b(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for row indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.rows;\n          })\n        )\n          throw new RangeError(\"row indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function d(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for column indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.columns;\n          })\n        )\n          throw new RangeError(\"column indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function M(t, r, e, o, n) {\n        if (5 !== arguments.length)\n          throw new RangeError(\"expected 4 arguments\");\n        if (\n          (k(\"startRow\", r),\n          k(\"endRow\", e),\n          k(\"startColumn\", o),\n          k(\"endColumn\", n),\n          r > e ||\n            o > n ||\n            r < 0 ||\n            r >= t.rows ||\n            e < 0 ||\n            e >= t.rows ||\n            o < 0 ||\n            o >= t.columns ||\n            n < 0 ||\n            n >= t.columns)\n        )\n          throw new RangeError(\"Submatrix indices are out of range\");\n      }\n      function x(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : 0,\n            e = [],\n            o = 0;\n          o < t;\n          o++\n        )\n          e.push(r);\n        return e;\n      }\n      function k(t, r) {\n        if (\"number\" != typeof r)\n          throw new TypeError(\"\".concat(t, \" must be a number\"));\n      }\n      function S(t) {\n        if (t.isEmpty())\n          throw new Error(\"Empty matrix has no elements to index\");\n      }\n      function E(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < o; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < n; c++)\n            (u += f = t.get(s, c) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / n) / (n - 1))\n            : i.push((a - (u * u) / n) / n);\n        }\n        return i;\n      }\n      function O(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < n; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < o; c++)\n            (u += f = t.get(c, s) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / o) / (o - 1))\n            : i.push((a - (u * u) / o) / o);\n        }\n        return i;\n      }\n      function R(t, r, e) {\n        for (\n          var o = t.rows, n = t.columns, i = o * n, s = 0, u = 0, a = 0, f = 0;\n          f < o;\n          f++\n        )\n          for (var c = 0; c < n; c++) (s += a = t.get(f, c) - e), (u += a * a);\n        return r ? (u - (s * s) / i) / (i - 1) : (u - (s * s) / i) / i;\n      }\n      function j(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[e]);\n      }\n      function _(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[o]);\n      }\n      function P(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r);\n      }\n      function T(t) {\n        for (var r = [], e = 0; e < t.rows; e++) {\n          for (var o = 0, n = 0; n < t.columns; n++)\n            o += Math.pow(t.get(e, n), 2) / (t.columns - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function A(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[e]);\n      }\n      function C(t) {\n        for (var r = [], e = 0; e < t.columns; e++) {\n          for (var o = 0, n = 0; n < t.rows; n++)\n            o += Math.pow(t.get(n, e), 2) / (t.rows - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function N(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[o]);\n      }\n      function I(t) {\n        for (var r = t.size - 1, e = 0, o = 0; o < t.columns; o++)\n          for (var n = 0; n < t.rows; n++) e += Math.pow(t.get(n, o), 2) / r;\n        return Math.sqrt(e);\n      }\n      function V(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r);\n      }\n      function q(t, r) {\n        return (q =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function D(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = B(t);\n          if (r) {\n            var n = B(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return F(this, e);\n        };\n      }\n      function F(t, r) {\n        return !r || (\"object\" !== L(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function B(t) {\n        return (B = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      function L(t) {\n        return (L =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function z(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function U(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function W(t, r, e) {\n        return r && U(t.prototype, r), e && U(t, e), t;\n      }\n      var Q = (function () {\n        function t() {\n          z(this, t);\n        }\n        return (\n          W(\n            t,\n            [\n              {\n                key: \"size\",\n                get: function () {\n                  return this.rows * this.columns;\n                },\n              },\n              {\n                key: \"apply\",\n                value: function (t) {\n                  if (\"function\" != typeof t)\n                    throw new TypeError(\"callback must be a function\");\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) t.call(this, r, e);\n                  return this;\n                },\n              },\n              {\n                key: \"to1DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      t.push(this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"to2DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++) {\n                    t.push([]);\n                    for (var e = 0; e < this.columns; e++)\n                      t[r].push(this.get(r, e));\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"toJSON\",\n                value: function () {\n                  return this.to2DArray();\n                },\n              },\n              {\n                key: \"isRowVector\",\n                value: function () {\n                  return 1 === this.rows;\n                },\n              },\n              {\n                key: \"isColumnVector\",\n                value: function () {\n                  return 1 === this.columns;\n                },\n              },\n              {\n                key: \"isVector\",\n                value: function () {\n                  return 1 === this.rows || 1 === this.columns;\n                },\n              },\n              {\n                key: \"isSquare\",\n                value: function () {\n                  return this.rows === this.columns;\n                },\n              },\n              {\n                key: \"isEmpty\",\n                value: function () {\n                  return 0 === this.rows || 0 === this.columns;\n                },\n              },\n              {\n                key: \"isSymmetric\",\n                value: function () {\n                  if (this.isSquare()) {\n                    for (var t = 0; t < this.rows; t++)\n                      for (var r = 0; r <= t; r++)\n                        if (this.get(t, r) !== this.get(r, t)) return !1;\n                    return !0;\n                  }\n                  return !1;\n                },\n              },\n              {\n                key: \"isEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"isReducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    for (var i = r + 1; i < this.rows; i++)\n                      0 !== this.get(t, i) && (o = !1);\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"echelonForm\",\n                value: function () {\n                  for (\n                    var t = this.clone(), r = 0, e = 0;\n                    r < t.rows && e < t.columns;\n\n                  ) {\n                    for (var o = r, n = r; n < t.rows; n++)\n                      t.get(n, e) > t.get(o, e) && (o = n);\n                    if (0 === t.get(o, e)) e++;\n                    else {\n                      t.swapRows(r, o);\n                      for (var i = t.get(r, e), s = e; s < t.columns; s++)\n                        t.set(r, s, t.get(r, s) / i);\n                      for (var u = r + 1; u < t.rows; u++) {\n                        var a = t.get(u, e) / t.get(r, e);\n                        t.set(u, e, 0);\n                        for (var f = e + 1; f < t.columns; f++)\n                          t.set(u, f, t.get(u, f) - t.get(r, f) * a);\n                      }\n                      r++, e++;\n                    }\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"reducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = this.echelonForm(),\n                      r = t.columns,\n                      e = t.rows,\n                      o = e - 1;\n                    o >= 0;\n\n                  )\n                    if (0 === t.maxRow(o)) o--;\n                    else {\n                      for (var n = 0, i = !1; n < e && !1 === i; )\n                        1 === t.get(o, n) ? (i = !0) : n++;\n                      for (var s = 0; s < o; s++)\n                        for (var u = t.get(s, n), a = n; a < r; a++) {\n                          var f = t.get(s, a) - u * t.get(o, a);\n                          t.set(s, a, f);\n                        }\n                      o--;\n                    }\n                  return t;\n                },\n              },\n              {\n                key: \"set\",\n                value: function () {\n                  throw new Error(\"set method is unimplemented\");\n                },\n              },\n              {\n                key: \"get\",\n                value: function () {\n                  throw new Error(\"get method is unimplemented\");\n                },\n              },\n              {\n                key: \"repeat\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== L(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.rows,\n                    e = void 0 === r ? 1 : r,\n                    o = t.columns,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isInteger(e) || e <= 0)\n                    throw new TypeError(\"rows must be a positive integer\");\n                  if (!Number.isInteger(n) || n <= 0)\n                    throw new TypeError(\"columns must be a positive integer\");\n                  for (\n                    var i = new K(this.rows * e, this.columns * n), s = 0;\n                    s < e;\n                    s++\n                  )\n                    for (var u = 0; u < n; u++)\n                      i.setSubMatrix(this, this.rows * s, this.columns * u);\n                  return i;\n                },\n              },\n              {\n                key: \"fill\",\n                value: function (t) {\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"neg\",\n                value: function () {\n                  return this.mulS(-1);\n                },\n              },\n              {\n                key: \"getRow\",\n                value: function (t) {\n                  v(this, t);\n                  for (var r = [], e = 0; e < this.columns; e++)\n                    r.push(this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"getRowVector\",\n                value: function (t) {\n                  return K.rowVector(this.getRow(t));\n                },\n              },\n              {\n                key: \"setRow\",\n                value: function (t, r) {\n                  v(this, t), (r = m(this, r));\n                  for (var e = 0; e < this.columns; e++) this.set(t, e, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapRows\",\n                value: function (t, r) {\n                  v(this, t), v(this, r);\n                  for (var e = 0; e < this.columns; e++) {\n                    var o = this.get(t, e);\n                    this.set(t, e, this.get(r, e)), this.set(r, e, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"getColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = [], e = 0; e < this.rows; e++)\n                    r.push(this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"getColumnVector\",\n                value: function (t) {\n                  return K.columnVector(this.getColumn(t));\n                },\n              },\n              {\n                key: \"setColumn\",\n                value: function (t, r) {\n                  y(this, t), (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) this.set(e, t, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapColumns\",\n                value: function (t, r) {\n                  y(this, t), y(this, r);\n                  for (var e = 0; e < this.rows; e++) {\n                    var o = this.get(e, t);\n                    this.set(e, t, this.get(e, r)), this.set(e, r, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"addRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"subRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"divRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"addColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"subColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"divColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRow\",\n                value: function (t, r) {\n                  v(this, t);\n                  for (var e = 0; e < this.columns; e++)\n                    this.set(t, e, this.get(t, e) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumn\",\n                value: function (t, r) {\n                  y(this, t);\n                  for (var e = 0; e < this.rows; e++)\n                    this.set(e, t, this.get(e, t) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"max\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) > t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"maxIndex\",\n                value: function () {\n                  S(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) > t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"min\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) < t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"minIndex\",\n                value: function () {\n                  S(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) < t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) > r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRowIndex\",\n                value: function (t) {\n                  v(this, t), S(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) > r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) < r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"minRowIndex\",\n                value: function (t) {\n                  v(this, t), S(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) < r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"maxColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) > r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"maxColumnIndex\",\n                value: function (t) {\n                  y(this, t), S(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) > r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) < r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"minColumnIndex\",\n                value: function (t) {\n                  y(this, t), S(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) < r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = [], e = 0;\n                    e < t;\n                    e++\n                  )\n                    r.push(this.get(e, e));\n                  return r;\n                },\n              },\n              {\n                key: \"norm\",\n                value: function () {\n                  var t =\n                      arguments.length > 0 && void 0 !== arguments[0]\n                        ? arguments[0]\n                        : \"frobenius\",\n                    r = 0;\n                  if (\"max\" === t) return this.max();\n                  if (\"frobenius\" === t) {\n                    for (var e = 0; e < this.rows; e++)\n                      for (var o = 0; o < this.columns; o++)\n                        r += this.get(e, o) * this.get(e, o);\n                    return Math.sqrt(r);\n                  }\n                  throw new RangeError(\"unknown norm type: \".concat(t));\n                },\n              },\n              {\n                key: \"cumulativeSum\",\n                value: function () {\n                  for (var t = 0, r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      (t += this.get(r, e)), this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"dot\",\n                value: function (r) {\n                  t.isMatrix(r) && (r = r.to1DArray());\n                  var e = this.to1DArray();\n                  if (e.length !== r.length)\n                    throw new RangeError(\"vectors do not have the same size\");\n                  for (var o = 0, n = 0; n < e.length; n++) o += e[n] * r[n];\n                  return o;\n                },\n              },\n              {\n                key: \"mmul\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.columns,\n                      n = new K(r, o),\n                      i = new Float64Array(e),\n                      s = 0;\n                    s < o;\n                    s++\n                  ) {\n                    for (var u = 0; u < e; u++) i[u] = t.get(u, s);\n                    for (var a = 0; a < r; a++) {\n                      for (var f = 0, c = 0; c < e; c++)\n                        f += this.get(a, c) * i[c];\n                      n.set(a, s, f);\n                    }\n                  }\n                  return n;\n                },\n              },\n              {\n                key: \"strassen2x2\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(2, 2),\n                    e = this.get(0, 0),\n                    o = t.get(0, 0),\n                    n = this.get(0, 1),\n                    i = t.get(0, 1),\n                    s = this.get(1, 0),\n                    u = t.get(1, 0),\n                    a = this.get(1, 1),\n                    f = t.get(1, 1),\n                    c = (e + a) * (o + f),\n                    h = (s + a) * o,\n                    l = e * (i - f),\n                    p = a * (u - o),\n                    v = (e + n) * f,\n                    y = c + p - v + (n - a) * (u + f),\n                    m = l + v,\n                    g = h + p,\n                    w = c - h + l + (s - e) * (o + i);\n                  return (\n                    r.set(0, 0, y),\n                    r.set(0, 1, m),\n                    r.set(1, 0, g),\n                    r.set(1, 1, w),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"strassen3x3\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(3, 3),\n                    e = this.get(0, 0),\n                    o = this.get(0, 1),\n                    n = this.get(0, 2),\n                    i = this.get(1, 0),\n                    s = this.get(1, 1),\n                    u = this.get(1, 2),\n                    a = this.get(2, 0),\n                    f = this.get(2, 1),\n                    c = this.get(2, 2),\n                    h = t.get(0, 0),\n                    l = t.get(0, 1),\n                    p = t.get(0, 2),\n                    v = t.get(1, 0),\n                    y = t.get(1, 1),\n                    m = t.get(1, 2),\n                    g = t.get(2, 0),\n                    w = t.get(2, 1),\n                    b = t.get(2, 2),\n                    d = (e - i) * (-l + y),\n                    M = (-e + i + s) * (h - l + y),\n                    x = (i + s) * (-h + l),\n                    k = e * h,\n                    S = (-e + a + f) * (h - p + m),\n                    E = (-e + a) * (p - m),\n                    O = (a + f) * (-h + p),\n                    R = (-n + f + c) * (y + g - w),\n                    j = (n - c) * (y - w),\n                    _ = n * g,\n                    P = (f + c) * (-g + w),\n                    T = (-n + s + u) * (m + g - b),\n                    A = (n - u) * (m - b),\n                    C = (s + u) * (-g + b),\n                    N = k + _ + o * v,\n                    I = (e + o + n - i - s - f - c) * y + M + x + k + R + _ + P,\n                    V = k + S + O + (e + o + n - s - u - a - f) * m + _ + T + C,\n                    q =\n                      d + s * (-h + l + v - y - m - g + b) + M + k + _ + T + A,\n                    D = d + M + x + k + u * w,\n                    F = _ + T + A + C + i * p,\n                    B =\n                      k + S + E + f * (-h + p + v - y - m - g + w) + R + j + _,\n                    L = R + j + _ + P + a * l,\n                    z = k + S + E + O + c * b;\n                  return (\n                    r.set(0, 0, N),\n                    r.set(0, 1, I),\n                    r.set(0, 2, V),\n                    r.set(1, 0, q),\n                    r.set(1, 1, D),\n                    r.set(1, 2, F),\n                    r.set(2, 0, B),\n                    r.set(2, 1, L),\n                    r.set(2, 2, z),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"mmulStrassen\",\n                value: function (r) {\n                  r = K.checkMatrix(r);\n                  var e = this.clone(),\n                    o = e.rows,\n                    n = e.columns,\n                    i = r.rows,\n                    s = r.columns;\n                  function u(r, e, o) {\n                    var n = r.rows,\n                      i = r.columns;\n                    if (n === e && i === o) return r;\n                    var s = t.zeros(e, o);\n                    return (s = s.setSubMatrix(r, 0, 0));\n                  }\n                  n !== i &&\n                    console.warn(\n                      \"Multiplying \"\n                        .concat(o, \" x \")\n                        .concat(n, \" and \")\n                        .concat(i, \" x \")\n                        .concat(s, \" matrix: dimensions do not match.\"),\n                    );\n                  var a = Math.max(o, i),\n                    f = Math.max(n, s);\n                  return (function r(e, o, n, i) {\n                    if (n <= 512 || i <= 512) return e.mmul(o);\n                    n % 2 == 1 && i % 2 == 1\n                      ? ((e = u(e, n + 1, i + 1)), (o = u(o, n + 1, i + 1)))\n                      : n % 2 == 1\n                      ? ((e = u(e, n + 1, i)), (o = u(o, n + 1, i)))\n                      : i % 2 == 1 &&\n                        ((e = u(e, n, i + 1)), (o = u(o, n, i + 1)));\n                    var s = parseInt(e.rows / 2, 10),\n                      a = parseInt(e.columns / 2, 10),\n                      f = e.subMatrix(0, s - 1, 0, a - 1),\n                      c = o.subMatrix(0, s - 1, 0, a - 1),\n                      h = e.subMatrix(0, s - 1, a, e.columns - 1),\n                      l = o.subMatrix(0, s - 1, a, o.columns - 1),\n                      p = e.subMatrix(s, e.rows - 1, 0, a - 1),\n                      v = o.subMatrix(s, o.rows - 1, 0, a - 1),\n                      y = e.subMatrix(s, e.rows - 1, a, e.columns - 1),\n                      m = o.subMatrix(s, o.rows - 1, a, o.columns - 1),\n                      g = r(t.add(f, y), t.add(c, m), s, a),\n                      w = r(t.add(p, y), c, s, a),\n                      b = r(f, t.sub(l, m), s, a),\n                      d = r(y, t.sub(v, c), s, a),\n                      M = r(t.add(f, h), m, s, a),\n                      x = r(t.sub(p, f), t.add(c, l), s, a),\n                      k = r(t.sub(h, y), t.add(v, m), s, a),\n                      S = t.add(g, d);\n                    S.sub(M), S.add(k);\n                    var E = t.add(b, M),\n                      O = t.add(w, d),\n                      R = t.sub(g, w);\n                    R.add(b), R.add(x);\n                    var j = t.zeros(2 * S.rows, 2 * S.columns);\n                    return (j = (j = (j = (j = j.setSubMatrix(\n                      S,\n                      0,\n                      0,\n                    )).setSubMatrix(E, S.rows, 0)).setSubMatrix(\n                      O,\n                      0,\n                      S.columns,\n                    )).setSubMatrix(R, S.rows, S.columns)).subMatrix(\n                      0,\n                      n - 1,\n                      0,\n                      i - 1,\n                    );\n                  })((e = u(e, a, f)), (r = u(r, a, f)), a, f);\n                },\n              },\n              {\n                key: \"scaleRows\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== L(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.rows;\n                    s++\n                  ) {\n                    var a = this.getRow(s);\n                    a.length > 0 && u(a, { min: e, max: n, output: a }),\n                      i.setRow(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"scaleColumns\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== L(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.columns;\n                    s++\n                  ) {\n                    var a = this.getColumn(s);\n                    a.length && u(a, { min: e, max: n, output: a }),\n                      i.setColumn(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"flipRows\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.columns / 2), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(r, e),\n                        n = this.get(r, this.columns - 1 - e);\n                      this.set(r, e, n), this.set(r, this.columns - 1 - e, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"flipColumns\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.rows / 2), r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(e, r),\n                        n = this.get(this.rows - 1 - e, r);\n                      this.set(e, r, n), this.set(this.rows - 1 - e, r, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"kroneckerProduct\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.rows,\n                      n = t.columns,\n                      i = new K(r * o, e * n),\n                      s = 0;\n                    s < r;\n                    s++\n                  )\n                    for (var u = 0; u < e; u++)\n                      for (var a = 0; a < o; a++)\n                        for (var f = 0; f < n; f++)\n                          i.set(\n                            o * s + a,\n                            n * u + f,\n                            this.get(s, u) * t.get(a, f),\n                          );\n                  return i;\n                },\n              },\n              {\n                key: \"kroneckerSum\",\n                value: function (t) {\n                  if (\n                    ((t = K.checkMatrix(t)), !this.isSquare() || !t.isSquare())\n                  )\n                    throw new Error(\"Kronecker Sum needs two Square Matrices\");\n                  var r = this.rows,\n                    e = t.rows,\n                    o = this.kroneckerProduct(K.eye(e, e)),\n                    n = K.eye(r, r).kroneckerProduct(t);\n                  return o.add(n);\n                },\n              },\n              {\n                key: \"transpose\",\n                value: function () {\n                  for (\n                    var t = new K(this.columns, this.rows), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(e, r, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sortRows\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    this.setRow(r, this.getRow(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"sortColumns\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    this.setColumn(r, this.getColumn(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"subMatrix\",\n                value: function (t, r, e, o) {\n                  M(this, t, r, e, o);\n                  for (var n = new K(r - t + 1, o - e + 1), i = t; i <= r; i++)\n                    for (var s = e; s <= o; s++)\n                      n.set(i - t, s - e, this.get(i, s));\n                  return n;\n                },\n              },\n              {\n                key: \"subMatrixRow\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.columns - 1),\n                    r > e ||\n                      r < 0 ||\n                      r >= this.columns ||\n                      e < 0 ||\n                      e >= this.columns)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(t.length, e - r + 1), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.rows)\n                        throw new RangeError(\n                          \"Row index out of range: \".concat(t[n]),\n                        );\n                      o.set(n, i - r, this.get(t[n], i));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"subMatrixColumn\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.rows - 1),\n                    r > e || r < 0 || r >= this.rows || e < 0 || e >= this.rows)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(e - r + 1, t.length), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.columns)\n                        throw new RangeError(\n                          \"Column index out of range: \".concat(t[n]),\n                        );\n                      o.set(i - r, n, this.get(i, t[n]));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"setSubMatrix\",\n                value: function (t, r, e) {\n                  if ((t = K.checkMatrix(t)).isEmpty()) return this;\n                  M(this, r, r + t.rows - 1, e, e + t.columns - 1);\n                  for (var o = 0; o < t.rows; o++)\n                    for (var n = 0; n < t.columns; n++)\n                      this.set(r + o, e + n, t.get(o, n));\n                  return this;\n                },\n              },\n              {\n                key: \"selection\",\n                value: function (t, r) {\n                  for (\n                    var e = w(this, t, r), o = new K(t.length, r.length), n = 0;\n                    n < e.row.length;\n                    n++\n                  )\n                    for (var i = e.row[n], s = 0; s < e.column.length; s++) {\n                      var u = e.column[s];\n                      o.set(n, s, this.get(i, u));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"trace\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = 0, e = 0;\n                    e < t;\n                    e++\n                  )\n                    r += this.get(e, e);\n                  return r;\n                },\n              },\n              {\n                key: \"clone\",\n                value: function () {\n                  for (\n                    var t = new K(this.rows, this.columns), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(r, e, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sum\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 0, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r += t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"product\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 1, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r *= t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"mean\",\n                value: function (t) {\n                  var r = this.sum(t);\n                  switch (t) {\n                    case \"row\":\n                      for (var e = 0; e < this.rows; e++) r[e] /= this.columns;\n                      return r;\n                    case \"column\":\n                      for (var o = 0; o < this.columns; o++) r[o] /= this.rows;\n                      return r;\n                    case void 0:\n                      return r / this.size;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"variance\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === L(t) && ((r = t), (t = void 0)),\n                    \"object\" !== L(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.unbiased,\n                    n = void 0 === o || o,\n                    i = e.mean,\n                    s = void 0 === i ? this.mean(t) : i;\n                  if (\"boolean\" != typeof n)\n                    throw new TypeError(\"unbiased must be a boolean\");\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return E(this, n, s);\n                    case \"column\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return O(this, n, s);\n                    case void 0:\n                      if (\"number\" != typeof s)\n                        throw new TypeError(\"mean must be a number\");\n                      return R(this, n, s);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"standardDeviation\",\n                value: function (t, r) {\n                  \"object\" === L(t) && ((r = t), (t = void 0));\n                  var e = this.variance(t, r);\n                  if (void 0 === t) return Math.sqrt(e);\n                  for (var o = 0; o < e.length; o++) e[o] = Math.sqrt(e[o]);\n                  return e;\n                },\n              },\n              {\n                key: \"center\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === L(t) && ((r = t), (t = void 0)),\n                    \"object\" !== L(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.center,\n                    n = void 0 === o ? this.mean(t) : o;\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return j(this, n), this;\n                    case \"column\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return _(this, n), this;\n                    case void 0:\n                      if (\"number\" != typeof n)\n                        throw new TypeError(\"center must be a number\");\n                      return P(this, n), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"scale\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === L(t) && ((r = t), (t = void 0)),\n                    \"object\" !== L(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r.scale;\n                  switch (t) {\n                    case \"row\":\n                      if (void 0 === e) e = T(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return A(this, e), this;\n                    case \"column\":\n                      if (void 0 === e) e = C(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return N(this, e), this;\n                    case void 0:\n                      if (void 0 === e) e = I(this);\n                      else if (\"number\" != typeof e)\n                        throw new TypeError(\"scale must be a number\");\n                      return V(this, e), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"toString\",\n                value: function (t) {\n                  return c(this, t);\n                },\n              },\n            ],\n            [\n              {\n                key: \"from1DArray\",\n                value: function (t, r, e) {\n                  if (t * r !== e.length)\n                    throw new RangeError(\n                      \"data length does not match given dimensions\",\n                    );\n                  for (var o = new K(t, r), n = 0; n < t; n++)\n                    for (var i = 0; i < r; i++) o.set(n, i, e[n * r + i]);\n                  return o;\n                },\n              },\n              {\n                key: \"rowVector\",\n                value: function (t) {\n                  for (var r = new K(1, t.length), e = 0; e < t.length; e++)\n                    r.set(0, e, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"columnVector\",\n                value: function (t) {\n                  for (var r = new K(t.length, 1), e = 0; e < t.length; e++)\n                    r.set(e, 0, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"zeros\",\n                value: function (t, r) {\n                  return new K(t, r);\n                },\n              },\n              {\n                key: \"ones\",\n                value: function (t, r) {\n                  return new K(t, r).fill(1);\n                },\n              },\n              {\n                key: \"rand\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== L(e))\n                    throw new TypeError(\"options must be an object\");\n                  for (\n                    var o = e.random,\n                      n = void 0 === o ? Math.random : o,\n                      i = new K(t, r),\n                      s = 0;\n                    s < t;\n                    s++\n                  )\n                    for (var u = 0; u < r; u++) i.set(s, u, n());\n                  return i;\n                },\n              },\n              {\n                key: \"randInt\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== L(e))\n                    throw new TypeError(\"options must be an object\");\n                  var o = e.min,\n                    n = void 0 === o ? 0 : o,\n                    i = e.max,\n                    s = void 0 === i ? 1e3 : i,\n                    u = e.random,\n                    a = void 0 === u ? Math.random : u;\n                  if (!Number.isInteger(n))\n                    throw new TypeError(\"min must be an integer\");\n                  if (!Number.isInteger(s))\n                    throw new TypeError(\"max must be an integer\");\n                  if (n >= s)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (var f = s - n, c = new K(t, r), h = 0; h < t; h++)\n                    for (var l = 0; l < r; l++) {\n                      var p = n + Math.round(a() * f);\n                      c.set(h, l, p);\n                    }\n                  return c;\n                },\n              },\n              {\n                key: \"eye\",\n                value: function (t, r, e) {\n                  void 0 === r && (r = t), void 0 === e && (e = 1);\n                  for (\n                    var o = Math.min(t, r), n = this.zeros(t, r), i = 0;\n                    i < o;\n                    i++\n                  )\n                    n.set(i, i, e);\n                  return n;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function (t, r, e) {\n                  var o = t.length;\n                  void 0 === r && (r = o), void 0 === e && (e = r);\n                  for (\n                    var n = Math.min(o, r, e), i = this.zeros(r, e), s = 0;\n                    s < n;\n                    s++\n                  )\n                    i.set(s, s, t[s]);\n                  return i;\n                },\n              },\n              {\n                key: \"min\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new K(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.min(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"max\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new this(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.max(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"checkMatrix\",\n                value: function (r) {\n                  return t.isMatrix(r) ? r : new K(r);\n                },\n              },\n              {\n                key: \"isMatrix\",\n                value: function (t) {\n                  return null != t && \"Matrix\" === t.klass;\n                },\n              },\n            ],\n          ),\n          t\n        );\n      })();\n      function J(t, r) {\n        return t - r;\n      }\n      (Q.prototype.klass = \"Matrix\"),\n        \"undefined\" != typeof Symbol &&\n          (Q.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = function () {\n            return c(this);\n          }),\n        (Q.random = Q.rand),\n        (Q.randomInt = Q.randInt),\n        (Q.diagonal = Q.diag),\n        (Q.prototype.diagonal = Q.prototype.diag),\n        (Q.identity = Q.eye),\n        (Q.prototype.negate = Q.prototype.neg),\n        (Q.prototype.tensorProduct = Q.prototype.kroneckerProduct);\n      var Y,\n        H,\n        K = (function (t) {\n          !(function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Super expression must either be null or a function\",\n              );\n            (t.prototype = Object.create(r && r.prototype, {\n              constructor: { value: t, writable: !0, configurable: !0 },\n            })),\n              r && q(t, r);\n          })(e, t);\n          var r = D(e);\n          function e(t, o) {\n            var n;\n            if ((z(this, e), (n = r.call(this)), e.isMatrix(t)))\n              return F(n, t.clone());\n            if (Number.isInteger(t) && t >= 0) {\n              if (((n.data = []), !(Number.isInteger(o) && o >= 0)))\n                throw new TypeError(\"nColumns must be a positive integer\");\n              for (var i = 0; i < t; i++) n.data.push(new Float64Array(o));\n            } else {\n              if (!Array.isArray(t))\n                throw new TypeError(\n                  \"First argument must be a positive number or an array\",\n                );\n              var s = t;\n              if (\"number\" != typeof (o = (t = s.length) ? s[0].length : 0))\n                throw new TypeError(\n                  \"Data must be a 2D array with at least one element\",\n                );\n              n.data = [];\n              for (var u = 0; u < t; u++) {\n                if (s[u].length !== o)\n                  throw new RangeError(\"Inconsistent array dimensions\");\n                n.data.push(Float64Array.from(s[u]));\n              }\n            }\n            return (n.rows = t), (n.columns = o), n;\n          }\n          return (\n            W(e, [\n              {\n                key: \"set\",\n                value: function (t, r, e) {\n                  return (this.data[t][r] = e), this;\n                },\n              },\n              {\n                key: \"get\",\n                value: function (t, r) {\n                  return this.data[t][r];\n                },\n              },\n              {\n                key: \"removeRow\",\n                value: function (t) {\n                  return (\n                    v(this, t), this.data.splice(t, 1), (this.rows -= 1), this\n                  );\n                },\n              },\n              {\n                key: \"addRow\",\n                value: function (t, r) {\n                  return (\n                    void 0 === r && ((r = t), (t = this.rows)),\n                    v(this, t, !0),\n                    (r = Float64Array.from(m(this, r))),\n                    this.data.splice(t, 0, r),\n                    (this.rows += 1),\n                    this\n                  );\n                },\n              },\n              {\n                key: \"removeColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = 0; r < this.rows; r++) {\n                    for (\n                      var e = new Float64Array(this.columns - 1), o = 0;\n                      o < t;\n                      o++\n                    )\n                      e[o] = this.data[r][o];\n                    for (var n = t + 1; n < this.columns; n++)\n                      e[n - 1] = this.data[r][n];\n                    this.data[r] = e;\n                  }\n                  return (this.columns -= 1), this;\n                },\n              },\n              {\n                key: \"addColumn\",\n                value: function (t, r) {\n                  void 0 === r && ((r = t), (t = this.columns)),\n                    y(this, t, !0),\n                    (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) {\n                    for (\n                      var o = new Float64Array(this.columns + 1), n = 0;\n                      n < t;\n                      n++\n                    )\n                      o[n] = this.data[e][n];\n                    for (o[n++] = r[e]; n < this.columns + 1; n++)\n                      o[n] = this.data[e][n - 1];\n                    this.data[e] = o;\n                  }\n                  return (this.columns += 1), this;\n                },\n              },\n            ]),\n            e\n          );\n        })(Q);\n      function X(t) {\n        return (X =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function G(t, r) {\n        return (G =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Z(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = tt(t);\n          if (r) {\n            var n = tt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return $(this, e);\n        };\n      }\n      function $(t, r) {\n        return !r || (\"object\" !== X(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function tt(t) {\n        return (tt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      (H = K),\n        ((Y = Q).prototype.add = function (t) {\n          return \"number\" == typeof t ? this.addS(t) : this.addM(t);\n        }),\n        (Y.prototype.addS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t);\n          return this;\n        }),\n        (Y.prototype.addM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t.get(r, e));\n          return this;\n        }),\n        (Y.add = function (t, r) {\n          return new H(t).add(r);\n        }),\n        (Y.prototype.sub = function (t) {\n          return \"number\" == typeof t ? this.subS(t) : this.subM(t);\n        }),\n        (Y.prototype.subS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t);\n          return this;\n        }),\n        (Y.prototype.subM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t.get(r, e));\n          return this;\n        }),\n        (Y.sub = function (t, r) {\n          return new H(t).sub(r);\n        }),\n        (Y.prototype.subtract = Y.prototype.sub),\n        (Y.prototype.subtractS = Y.prototype.subS),\n        (Y.prototype.subtractM = Y.prototype.subM),\n        (Y.subtract = Y.sub),\n        (Y.prototype.mul = function (t) {\n          return \"number\" == typeof t ? this.mulS(t) : this.mulM(t);\n        }),\n        (Y.prototype.mulS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t);\n          return this;\n        }),\n        (Y.prototype.mulM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t.get(r, e));\n          return this;\n        }),\n        (Y.mul = function (t, r) {\n          return new H(t).mul(r);\n        }),\n        (Y.prototype.multiply = Y.prototype.mul),\n        (Y.prototype.multiplyS = Y.prototype.mulS),\n        (Y.prototype.multiplyM = Y.prototype.mulM),\n        (Y.multiply = Y.mul),\n        (Y.prototype.div = function (t) {\n          return \"number\" == typeof t ? this.divS(t) : this.divM(t);\n        }),\n        (Y.prototype.divS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t);\n          return this;\n        }),\n        (Y.prototype.divM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t.get(r, e));\n          return this;\n        }),\n        (Y.div = function (t, r) {\n          return new H(t).div(r);\n        }),\n        (Y.prototype.divide = Y.prototype.div),\n        (Y.prototype.divideS = Y.prototype.divS),\n        (Y.prototype.divideM = Y.prototype.divM),\n        (Y.divide = Y.div),\n        (Y.prototype.mod = function (t) {\n          return \"number\" == typeof t ? this.modS(t) : this.modM(t);\n        }),\n        (Y.prototype.modS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t);\n          return this;\n        }),\n        (Y.prototype.modM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t.get(r, e));\n          return this;\n        }),\n        (Y.mod = function (t, r) {\n          return new H(t).mod(r);\n        }),\n        (Y.prototype.modulus = Y.prototype.mod),\n        (Y.prototype.modulusS = Y.prototype.modS),\n        (Y.prototype.modulusM = Y.prototype.modM),\n        (Y.modulus = Y.mod),\n        (Y.prototype.and = function (t) {\n          return \"number\" == typeof t ? this.andS(t) : this.andM(t);\n        }),\n        (Y.prototype.andS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t);\n          return this;\n        }),\n        (Y.prototype.andM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t.get(r, e));\n          return this;\n        }),\n        (Y.and = function (t, r) {\n          return new H(t).and(r);\n        }),\n        (Y.prototype.or = function (t) {\n          return \"number\" == typeof t ? this.orS(t) : this.orM(t);\n        }),\n        (Y.prototype.orS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t);\n          return this;\n        }),\n        (Y.prototype.orM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t.get(r, e));\n          return this;\n        }),\n        (Y.or = function (t, r) {\n          return new H(t).or(r);\n        }),\n        (Y.prototype.xor = function (t) {\n          return \"number\" == typeof t ? this.xorS(t) : this.xorM(t);\n        }),\n        (Y.prototype.xorS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t);\n          return this;\n        }),\n        (Y.prototype.xorM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t.get(r, e));\n          return this;\n        }),\n        (Y.xor = function (t, r) {\n          return new H(t).xor(r);\n        }),\n        (Y.prototype.leftShift = function (t) {\n          return \"number\" == typeof t ? this.leftShiftS(t) : this.leftShiftM(t);\n        }),\n        (Y.prototype.leftShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t);\n          return this;\n        }),\n        (Y.prototype.leftShiftM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t.get(r, e));\n          return this;\n        }),\n        (Y.leftShift = function (t, r) {\n          return new H(t).leftShift(r);\n        }),\n        (Y.prototype.signPropagatingRightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.signPropagatingRightShiftS(t)\n            : this.signPropagatingRightShiftM(t);\n        }),\n        (Y.prototype.signPropagatingRightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t);\n          return this;\n        }),\n        (Y.prototype.signPropagatingRightShiftM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t.get(r, e));\n          return this;\n        }),\n        (Y.signPropagatingRightShift = function (t, r) {\n          return new H(t).signPropagatingRightShift(r);\n        }),\n        (Y.prototype.rightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.rightShiftS(t)\n            : this.rightShiftM(t);\n        }),\n        (Y.prototype.rightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t);\n          return this;\n        }),\n        (Y.prototype.rightShiftM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t.get(r, e));\n          return this;\n        }),\n        (Y.rightShift = function (t, r) {\n          return new H(t).rightShift(r);\n        }),\n        (Y.prototype.zeroFillRightShift = Y.prototype.rightShift),\n        (Y.prototype.zeroFillRightShiftS = Y.prototype.rightShiftS),\n        (Y.prototype.zeroFillRightShiftM = Y.prototype.rightShiftM),\n        (Y.zeroFillRightShift = Y.rightShift),\n        (Y.prototype.not = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, ~this.get(t, r));\n          return this;\n        }),\n        (Y.not = function (t) {\n          return new H(t).not();\n        }),\n        (Y.prototype.abs = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.abs(this.get(t, r)));\n          return this;\n        }),\n        (Y.abs = function (t) {\n          return new H(t).abs();\n        }),\n        (Y.prototype.acos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acos(this.get(t, r)));\n          return this;\n        }),\n        (Y.acos = function (t) {\n          return new H(t).acos();\n        }),\n        (Y.prototype.acosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acosh(this.get(t, r)));\n          return this;\n        }),\n        (Y.acosh = function (t) {\n          return new H(t).acosh();\n        }),\n        (Y.prototype.asin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asin(this.get(t, r)));\n          return this;\n        }),\n        (Y.asin = function (t) {\n          return new H(t).asin();\n        }),\n        (Y.prototype.asinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asinh(this.get(t, r)));\n          return this;\n        }),\n        (Y.asinh = function (t) {\n          return new H(t).asinh();\n        }),\n        (Y.prototype.atan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atan(this.get(t, r)));\n          return this;\n        }),\n        (Y.atan = function (t) {\n          return new H(t).atan();\n        }),\n        (Y.prototype.atanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atanh(this.get(t, r)));\n          return this;\n        }),\n        (Y.atanh = function (t) {\n          return new H(t).atanh();\n        }),\n        (Y.prototype.cbrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cbrt(this.get(t, r)));\n          return this;\n        }),\n        (Y.cbrt = function (t) {\n          return new H(t).cbrt();\n        }),\n        (Y.prototype.ceil = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.ceil(this.get(t, r)));\n          return this;\n        }),\n        (Y.ceil = function (t) {\n          return new H(t).ceil();\n        }),\n        (Y.prototype.clz32 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.clz32(this.get(t, r)));\n          return this;\n        }),\n        (Y.clz32 = function (t) {\n          return new H(t).clz32();\n        }),\n        (Y.prototype.cos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cos(this.get(t, r)));\n          return this;\n        }),\n        (Y.cos = function (t) {\n          return new H(t).cos();\n        }),\n        (Y.prototype.cosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cosh(this.get(t, r)));\n          return this;\n        }),\n        (Y.cosh = function (t) {\n          return new H(t).cosh();\n        }),\n        (Y.prototype.exp = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.exp(this.get(t, r)));\n          return this;\n        }),\n        (Y.exp = function (t) {\n          return new H(t).exp();\n        }),\n        (Y.prototype.expm1 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.expm1(this.get(t, r)));\n          return this;\n        }),\n        (Y.expm1 = function (t) {\n          return new H(t).expm1();\n        }),\n        (Y.prototype.floor = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.floor(this.get(t, r)));\n          return this;\n        }),\n        (Y.floor = function (t) {\n          return new H(t).floor();\n        }),\n        (Y.prototype.fround = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.fround(this.get(t, r)));\n          return this;\n        }),\n        (Y.fround = function (t) {\n          return new H(t).fround();\n        }),\n        (Y.prototype.log = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log(this.get(t, r)));\n          return this;\n        }),\n        (Y.log = function (t) {\n          return new H(t).log();\n        }),\n        (Y.prototype.log1p = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log1p(this.get(t, r)));\n          return this;\n        }),\n        (Y.log1p = function (t) {\n          return new H(t).log1p();\n        }),\n        (Y.prototype.log10 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log10(this.get(t, r)));\n          return this;\n        }),\n        (Y.log10 = function (t) {\n          return new H(t).log10();\n        }),\n        (Y.prototype.log2 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log2(this.get(t, r)));\n          return this;\n        }),\n        (Y.log2 = function (t) {\n          return new H(t).log2();\n        }),\n        (Y.prototype.round = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.round(this.get(t, r)));\n          return this;\n        }),\n        (Y.round = function (t) {\n          return new H(t).round();\n        }),\n        (Y.prototype.sign = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sign(this.get(t, r)));\n          return this;\n        }),\n        (Y.sign = function (t) {\n          return new H(t).sign();\n        }),\n        (Y.prototype.sin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sin(this.get(t, r)));\n          return this;\n        }),\n        (Y.sin = function (t) {\n          return new H(t).sin();\n        }),\n        (Y.prototype.sinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sinh(this.get(t, r)));\n          return this;\n        }),\n        (Y.sinh = function (t) {\n          return new H(t).sinh();\n        }),\n        (Y.prototype.sqrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sqrt(this.get(t, r)));\n          return this;\n        }),\n        (Y.sqrt = function (t) {\n          return new H(t).sqrt();\n        }),\n        (Y.prototype.tan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tan(this.get(t, r)));\n          return this;\n        }),\n        (Y.tan = function (t) {\n          return new H(t).tan();\n        }),\n        (Y.prototype.tanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tanh(this.get(t, r)));\n          return this;\n        }),\n        (Y.tanh = function (t) {\n          return new H(t).tanh();\n        }),\n        (Y.prototype.trunc = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.trunc(this.get(t, r)));\n          return this;\n        }),\n        (Y.trunc = function (t) {\n          return new H(t).trunc();\n        }),\n        (Y.pow = function (t, r) {\n          return new H(t).pow(r);\n        }),\n        (Y.prototype.pow = function (t) {\n          return \"number\" == typeof t ? this.powS(t) : this.powM(t);\n        }),\n        (Y.prototype.powS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t));\n          return this;\n        }),\n        (Y.prototype.powM = function (t) {\n          if (\n            ((t = H.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t.get(r, e)));\n          return this;\n        });\n      var rt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && G(t, r);\n        })(e, t);\n        var r = Z(e);\n        function e(t, o, n) {\n          var i;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, e),\n            ((i = r.call(this)).matrix = t),\n            (i.rows = o),\n            (i.columns = n),\n            i\n          );\n        }\n        return e;\n      })(Q);\n      function et(t) {\n        return (et =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ot(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function nt(t, r) {\n        return (nt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function it(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = ut(t);\n          if (r) {\n            var n = ut(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return st(this, e);\n        };\n      }\n      function st(t, r) {\n        return !r || (\"object\" !== et(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function ut(t) {\n        return (ut = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var at = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && nt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = it(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            y(t, r),\n            ((e = n.call(this, t, t.rows, 1)).column = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.column, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t) {\n                return this.matrix.get(t, this.column);\n              },\n            },\n          ]) && ot(r.prototype, e),\n          o && ot(r, o),\n          i\n        );\n      })(rt);\n      function ft(t) {\n        return (ft =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ct(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ht(t, r) {\n        return (ht =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function lt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = vt(t);\n          if (r) {\n            var n = vt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return pt(this, e);\n        };\n      }\n      function pt(t, r) {\n        return !r || (\"object\" !== ft(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function vt(t) {\n        return (vt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var yt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && ht(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = lt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = d(t, r)),\n            ((e = n.call(this, t, t.rows, r.length)).columnIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columnIndices[r], e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columnIndices[r]);\n              },\n            },\n          ]) && ct(r.prototype, e),\n          o && ct(r, o),\n          i\n        );\n      })(rt);\n      function mt(t) {\n        return (mt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function gt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function wt(t, r) {\n        return (wt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function bt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Mt(t);\n          if (r) {\n            var n = Mt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return dt(this, e);\n        };\n      }\n      function dt(t, r) {\n        return !r || (\"object\" !== mt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Mt(t) {\n        return (Mt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && wt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = bt(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columns - r - 1, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columns - r - 1);\n              },\n            },\n          ]) && gt(r.prototype, e),\n          o && gt(r, o),\n          i\n        );\n      })(rt);\n      function kt(t) {\n        return (kt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function St(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Et(t, r) {\n        return (Et =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ot(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = jt(t);\n          if (r) {\n            var n = jt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Rt(this, e);\n        };\n      }\n      function Rt(t, r) {\n        return !r || (\"object\" !== kt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function jt(t) {\n        return (jt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var _t = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Et(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ot(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rows - t - 1, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rows - t - 1, r);\n              },\n            },\n          ]) && St(r.prototype, e),\n          o && St(r, o),\n          i\n        );\n      })(rt);\n      function Pt(t) {\n        return (Pt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Tt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function At(t, r) {\n        return (At =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ct(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = It(t);\n          if (r) {\n            var n = It(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Nt(this, e);\n        };\n      }\n      function Nt(t, r) {\n        return !r || (\"object\" !== Pt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function It(t) {\n        return (It = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Vt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && At(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ct(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            v(t, r),\n            ((e = n.call(this, t, 1, t.columns)).row = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.row, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.row, r);\n              },\n            },\n          ]) && Tt(r.prototype, e),\n          o && Tt(r, o),\n          i\n        );\n      })(rt);\n      function qt(t) {\n        return (qt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Dt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Ft(t, r) {\n        return (Ft =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Bt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = zt(t);\n          if (r) {\n            var n = zt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Lt(this, e);\n        };\n      }\n      function Lt(t, r) {\n        return !r || (\"object\" !== qt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function zt(t) {\n        return (zt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Ut = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Ft(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Bt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = b(t, r)),\n            ((e = n.call(this, t, r.length, t.columns)).rowIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rowIndices[t], r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rowIndices[t], r);\n              },\n            },\n          ]) && Dt(r.prototype, e),\n          o && Dt(r, o),\n          i\n        );\n      })(rt);\n      function Wt(t) {\n        return (Wt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Jt(t, r) {\n        return (Jt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Yt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Kt(t);\n          if (r) {\n            var n = Kt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Ht(this, e);\n        };\n      }\n      function Ht(t, r) {\n        return !r || (\"object\" !== Wt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Kt(t) {\n        return (Kt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Jt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Yt(i);\n        function i(t, r, e) {\n          var o;\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, i);\n          var s = w(t, r, e);\n          return (\n            ((o = n.call(this, t, s.row.length, s.column.length)).rowIndices =\n              s.row),\n            (o.columnIndices = s.column),\n            o\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.rowIndices[t], this.columnIndices[r], e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(\n                  this.rowIndices[t],\n                  this.columnIndices[r],\n                );\n              },\n            },\n          ]) && Qt(r.prototype, e),\n          o && Qt(r, o),\n          i\n        );\n      })(rt);\n      function Gt(t) {\n        return (Gt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Zt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function $t(t, r) {\n        return ($t =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function tr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = er(t);\n          if (r) {\n            var n = er(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return rr(this, e);\n        };\n      }\n      function rr(t, r) {\n        return !r || (\"object\" !== Gt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function er(t) {\n        return (er = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var or = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && $t(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = tr(i);\n        function i(t, r, e, o, s) {\n          var u;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            M(t, r, e, o, s),\n            ((u = n.call(this, t, e - r + 1, s - o + 1)).startRow = r),\n            (u.startColumn = o),\n            u\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.startRow + t, this.startColumn + r, e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.startRow + t, this.startColumn + r);\n              },\n            },\n          ]) && Zt(r.prototype, e),\n          o && Zt(r, o),\n          i\n        );\n      })(rt);\n      function nr(t) {\n        return (nr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function sr(t, r) {\n        return (sr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function ur(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = fr(t);\n          if (r) {\n            var n = fr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return ar(this, e);\n        };\n      }\n      function ar(t, r) {\n        return !r || (\"object\" !== nr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function fr(t) {\n        return (fr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var cr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && sr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = ur(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.columns, t.rows)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(r, t, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(r, t);\n              },\n            },\n          ]) && ir(r.prototype, e),\n          o && ir(r, o),\n          i\n        );\n      })(rt);\n      function hr(t) {\n        return (hr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function lr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function vr(t, r) {\n        return (vr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function yr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = gr(t);\n          if (r) {\n            var n = gr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return mr(this, e);\n        };\n      }\n      function mr(t, r) {\n        return !r || (\"object\" !== hr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function gr(t) {\n        return (gr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var wr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && vr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = yr(i);\n        function i(t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          lr(this, i);\n          var o = e.rows,\n            s = void 0 === o ? 1 : o;\n          if (t.length % s != 0)\n            throw new Error(\n              \"the data length is not divisible by the number of rows\",\n            );\n          return (\n            ((r = n.call(this)).rows = s),\n            (r.columns = t.length / s),\n            (r.data = t),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                var o = this._calculateIndex(t, r);\n                return (this.data[o] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                var e = this._calculateIndex(t, r);\n                return this.data[e];\n              },\n            },\n            {\n              key: \"_calculateIndex\",\n              value: function (t, r) {\n                return t * this.columns + r;\n              },\n            },\n          ]) && pr(r.prototype, e),\n          o && pr(r, o),\n          i\n        );\n      })(Q);\n      function br(t) {\n        return (br =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function dr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Mr(t, r) {\n        return (Mr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function xr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Sr(t);\n          if (r) {\n            var n = Sr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return kr(this, e);\n        };\n      }\n      function kr(t, r) {\n        return !r || (\"object\" !== br(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Sr(t) {\n        return (Sr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Er = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Mr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = xr(i);\n        function i(t) {\n          var r;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((r = n.call(this)).data = t),\n            (r.rows = t.length),\n            (r.columns = t[0].length),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (this.data[t][r] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.data[t][r];\n              },\n            },\n          ]) && dr(r.prototype, e),\n          o && dr(r, o),\n          i\n        );\n      })(Q);\n      function Or(t, r) {\n        if (Array.isArray(t))\n          return t[0] && Array.isArray(t[0]) ? new Er(t) : new wr(t, r);\n        throw new Error(\"the argument is not an array\");\n      }\n      function Rr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var jr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s,\n            u,\n            a,\n            f,\n            c,\n            h = (r = Er.checkMatrix(r)).clone(),\n            l = h.rows,\n            p = h.columns,\n            v = new Float64Array(l),\n            y = 1;\n          for (e = 0; e < l; e++) v[e] = e;\n          for (f = new Float64Array(l), o = 0; o < p; o++) {\n            for (e = 0; e < l; e++) f[e] = h.get(e, o);\n            for (e = 0; e < l; e++) {\n              for (c = Math.min(e, o), s = 0, n = 0; n < c; n++)\n                s += h.get(e, n) * f[n];\n              (f[e] -= s), h.set(e, o, f[e]);\n            }\n            for (i = o, e = o + 1; e < l; e++)\n              Math.abs(f[e]) > Math.abs(f[i]) && (i = e);\n            if (i !== o) {\n              for (n = 0; n < p; n++)\n                (u = h.get(i, n)), h.set(i, n, h.get(o, n)), h.set(o, n, u);\n              (a = v[i]), (v[i] = v[o]), (v[o] = a), (y = -y);\n            }\n            if (o < l && 0 !== h.get(o, o))\n              for (e = o + 1; e < l; e++)\n                h.set(e, o, h.get(e, o) / h.get(o, o));\n          }\n          (this.LU = h), (this.pivotVector = v), (this.pivotSign = y);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isSingular\",\n              value: function () {\n                for (var t = this.LU, r = t.columns, e = 0; e < r; e++)\n                  if (0 === t.get(e, e)) return !0;\n                return !1;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.LU;\n                if (r.rows !== t.rows)\n                  throw new Error(\"Invalid matrix dimensions\");\n                if (this.isSingular()) throw new Error(\"LU matrix is singular\");\n                var e,\n                  o,\n                  n,\n                  i = t.columns,\n                  s = t.subMatrixRow(this.pivotVector, 0, i - 1),\n                  u = r.columns;\n                for (n = 0; n < u; n++)\n                  for (e = n + 1; e < u; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                for (n = u - 1; n >= 0; n--) {\n                  for (o = 0; o < i; o++)\n                    s.set(n, o, s.get(n, o) / r.get(n, n));\n                  for (e = 0; e < n; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                }\n                return s;\n              },\n            },\n            {\n              key: \"determinant\",\n              get: function () {\n                var t = this.LU;\n                if (!t.isSquare()) throw new Error(\"Matrix must be square\");\n                for (var r = this.pivotSign, e = t.columns, o = 0; o < e; o++)\n                  r *= t.get(o, o);\n                return r;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n > i\n                      ? o.set(n, i, t.get(n, i))\n                      : n === i\n                      ? o.set(n, i, 1)\n                      : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n <= i ? o.set(n, i, t.get(n, i)) : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"pivotPermutationVector\",\n              get: function () {\n                return Array.from(this.pivotVector);\n              },\n            },\n          ]) && Rr(r.prototype, e),\n          o && Rr(r, o),\n          t\n        );\n      })();\n      function _r(t, r) {\n        var e = 0;\n        return Math.abs(t) > Math.abs(r)\n          ? ((e = r / t), Math.abs(t) * Math.sqrt(1 + e * e))\n          : 0 !== r\n          ? ((e = t / r), Math.abs(r) * Math.sqrt(1 + e * e))\n          : 0;\n      }\n      function Pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Tr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s = (r = Er.checkMatrix(r)).clone(),\n            u = r.rows,\n            a = r.columns,\n            f = new Float64Array(a);\n          for (n = 0; n < a; n++) {\n            var c = 0;\n            for (e = n; e < u; e++) c = _r(c, s.get(e, n));\n            if (0 !== c) {\n              for (s.get(n, n) < 0 && (c = -c), e = n; e < u; e++)\n                s.set(e, n, s.get(e, n) / c);\n              for (s.set(n, n, s.get(n, n) + 1), o = n + 1; o < a; o++) {\n                for (i = 0, e = n; e < u; e++) i += s.get(e, n) * s.get(e, o);\n                for (i = -i / s.get(n, n), e = n; e < u; e++)\n                  s.set(e, o, s.get(e, o) + i * s.get(e, n));\n              }\n            }\n            f[n] = -c;\n          }\n          (this.QR = s), (this.Rdiag = f);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.QR,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix row dimensions must agree\");\n                if (!this.isFullRank())\n                  throw new Error(\"Matrix is rank deficient\");\n                var o,\n                  n,\n                  i,\n                  s,\n                  u = t.columns,\n                  a = t.clone(),\n                  f = r.columns;\n                for (i = 0; i < f; i++)\n                  for (n = 0; n < u; n++) {\n                    for (s = 0, o = i; o < e; o++)\n                      s += r.get(o, i) * a.get(o, n);\n                    for (s = -s / r.get(i, i), o = i; o < e; o++)\n                      a.set(o, n, a.get(o, n) + s * r.get(o, i));\n                  }\n                for (i = f - 1; i >= 0; i--) {\n                  for (n = 0; n < u; n++)\n                    a.set(i, n, a.get(i, n) / this.Rdiag[i]);\n                  for (o = 0; o < i; o++)\n                    for (n = 0; n < u; n++)\n                      a.set(o, n, a.get(o, n) - a.get(i, n) * r.get(o, i));\n                }\n                return a.subMatrix(0, f - 1, 0, u - 1);\n              },\n            },\n            {\n              key: \"isFullRank\",\n              value: function () {\n                for (var t = this.QR.columns, r = 0; r < t; r++)\n                  if (0 === this.Rdiag[r]) return !1;\n                return !0;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.QR,\n                  o = e.columns,\n                  n = new K(o, o);\n                for (t = 0; t < o; t++)\n                  for (r = 0; r < o; r++)\n                    t < r\n                      ? n.set(t, r, e.get(t, r))\n                      : t === r\n                      ? n.set(t, r, this.Rdiag[t])\n                      : n.set(t, r, 0);\n                return n;\n              },\n            },\n            {\n              key: \"orthogonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e,\n                  o,\n                  n = this.QR,\n                  i = n.rows,\n                  s = n.columns,\n                  u = new K(i, s);\n                for (e = s - 1; e >= 0; e--) {\n                  for (t = 0; t < i; t++) u.set(t, e, 0);\n                  for (u.set(e, e, 1), r = e; r < s; r++)\n                    if (0 !== n.get(e, e)) {\n                      for (o = 0, t = e; t < i; t++)\n                        o += n.get(t, e) * u.get(t, r);\n                      for (o = -o / n.get(e, e), t = e; t < i; t++)\n                        u.set(t, r, u.get(t, r) + o * n.get(t, e));\n                    }\n                }\n                return u;\n              },\n            },\n          ]) && Pr(r.prototype, e),\n          o && Pr(r, o),\n          t\n        );\n      })();\n      function Ar(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Cr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Nr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          if ((Ar(this, t), (r = Er.checkMatrix(r)).isEmpty()))\n            throw new Error(\"Matrix must be non-empty\");\n          var o,\n            n = r.rows,\n            i = r.columns,\n            s = e.computeLeftSingularVectors,\n            u = void 0 === s || s,\n            a = e.computeRightSingularVectors,\n            f = void 0 === a || a,\n            c = e.autoTranspose,\n            h = void 0 !== c && c,\n            l = Boolean(u),\n            p = Boolean(f),\n            v = !1;\n          if (n < i)\n            if (h) {\n              (n = (o = r.transpose()).rows), (i = o.columns), (v = !0);\n              var y = l;\n              (l = p), (p = y);\n            } else\n              (o = r.clone()),\n                console.warn(\n                  \"Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose\",\n                );\n          else o = r.clone();\n          for (\n            var m = Math.min(n, i),\n              g = Math.min(n + 1, i),\n              w = new Float64Array(g),\n              b = new K(n, m),\n              d = new K(i, i),\n              M = new Float64Array(i),\n              x = new Float64Array(n),\n              k = new Float64Array(g),\n              S = 0;\n            S < g;\n            S++\n          )\n            k[S] = S;\n          for (\n            var E = Math.min(n - 1, i),\n              O = Math.max(0, Math.min(i - 2, n)),\n              R = Math.max(E, O),\n              j = 0;\n            j < R;\n            j++\n          ) {\n            if (j < E) {\n              w[j] = 0;\n              for (var _ = j; _ < n; _++) w[j] = _r(w[j], o.get(_, j));\n              if (0 !== w[j]) {\n                o.get(j, j) < 0 && (w[j] = -w[j]);\n                for (var P = j; P < n; P++) o.set(P, j, o.get(P, j) / w[j]);\n                o.set(j, j, o.get(j, j) + 1);\n              }\n              w[j] = -w[j];\n            }\n            for (var T = j + 1; T < i; T++) {\n              if (j < E && 0 !== w[j]) {\n                for (var A = 0, C = j; C < n; C++)\n                  A += o.get(C, j) * o.get(C, T);\n                A = -A / o.get(j, j);\n                for (var N = j; N < n; N++)\n                  o.set(N, T, o.get(N, T) + A * o.get(N, j));\n              }\n              M[T] = o.get(j, T);\n            }\n            if (l && j < E)\n              for (var I = j; I < n; I++) b.set(I, j, o.get(I, j));\n            if (j < O) {\n              M[j] = 0;\n              for (var V = j + 1; V < i; V++) M[j] = _r(M[j], M[V]);\n              if (0 !== M[j]) {\n                M[j + 1] < 0 && (M[j] = 0 - M[j]);\n                for (var q = j + 1; q < i; q++) M[q] /= M[j];\n                M[j + 1] += 1;\n              }\n              if (((M[j] = -M[j]), j + 1 < n && 0 !== M[j])) {\n                for (var D = j + 1; D < n; D++) x[D] = 0;\n                for (var F = j + 1; F < n; F++)\n                  for (var B = j + 1; B < i; B++) x[F] += M[B] * o.get(F, B);\n                for (var L = j + 1; L < i; L++)\n                  for (var z = -M[L] / M[j + 1], U = j + 1; U < n; U++)\n                    o.set(U, L, o.get(U, L) + z * x[U]);\n              }\n              if (p) for (var W = j + 1; W < i; W++) d.set(W, j, M[W]);\n            }\n          }\n          var Q = Math.min(i, n + 1);\n          if (\n            (E < i && (w[E] = o.get(E, E)),\n            n < Q && (w[Q - 1] = 0),\n            O + 1 < Q && (M[O] = o.get(O, Q - 1)),\n            (M[Q - 1] = 0),\n            l)\n          ) {\n            for (var J = E; J < m; J++) {\n              for (var Y = 0; Y < n; Y++) b.set(Y, J, 0);\n              b.set(J, J, 1);\n            }\n            for (var H = E - 1; H >= 0; H--)\n              if (0 !== w[H]) {\n                for (var X = H + 1; X < m; X++) {\n                  for (var G = 0, Z = H; Z < n; Z++)\n                    G += b.get(Z, H) * b.get(Z, X);\n                  G = -G / b.get(H, H);\n                  for (var $ = H; $ < n; $++)\n                    b.set($, X, b.get($, X) + G * b.get($, H));\n                }\n                for (var tt = H; tt < n; tt++) b.set(tt, H, -b.get(tt, H));\n                b.set(H, H, 1 + b.get(H, H));\n                for (var rt = 0; rt < H - 1; rt++) b.set(rt, H, 0);\n              } else {\n                for (var et = 0; et < n; et++) b.set(et, H, 0);\n                b.set(H, H, 1);\n              }\n          }\n          if (p)\n            for (var ot = i - 1; ot >= 0; ot--) {\n              if (ot < O && 0 !== M[ot])\n                for (var nt = ot + 1; nt < i; nt++) {\n                  for (var it = 0, st = ot + 1; st < i; st++)\n                    it += d.get(st, ot) * d.get(st, nt);\n                  it = -it / d.get(ot + 1, ot);\n                  for (var ut = ot + 1; ut < i; ut++)\n                    d.set(ut, nt, d.get(ut, nt) + it * d.get(ut, ot));\n                }\n              for (var at = 0; at < i; at++) d.set(at, ot, 0);\n              d.set(ot, ot, 1);\n            }\n          for (var ft = Q - 1, ct = Number.EPSILON; Q > 0; ) {\n            var ht = void 0,\n              lt = void 0;\n            for (ht = Q - 2; ht >= -1 && -1 !== ht; ht--) {\n              var pt =\n                Number.MIN_VALUE + ct * Math.abs(w[ht] + Math.abs(w[ht + 1]));\n              if (Math.abs(M[ht]) <= pt || Number.isNaN(M[ht])) {\n                M[ht] = 0;\n                break;\n              }\n            }\n            if (ht === Q - 2) lt = 4;\n            else {\n              var vt = void 0;\n              for (vt = Q - 1; vt >= ht && vt !== ht; vt--) {\n                var yt =\n                  (vt !== Q ? Math.abs(M[vt]) : 0) +\n                  (vt !== ht + 1 ? Math.abs(M[vt - 1]) : 0);\n                if (Math.abs(w[vt]) <= ct * yt) {\n                  w[vt] = 0;\n                  break;\n                }\n              }\n              vt === ht\n                ? (lt = 3)\n                : vt === Q - 1\n                ? (lt = 1)\n                : ((lt = 2), (ht = vt));\n            }\n            switch ((ht++, lt)) {\n              case 1:\n                var mt = M[Q - 2];\n                M[Q - 2] = 0;\n                for (var gt = Q - 2; gt >= ht; gt--) {\n                  var wt = _r(w[gt], mt),\n                    bt = w[gt] / wt,\n                    dt = mt / wt;\n                  if (\n                    ((w[gt] = wt),\n                    gt !== ht &&\n                      ((mt = -dt * M[gt - 1]), (M[gt - 1] = bt * M[gt - 1])),\n                    p)\n                  )\n                    for (var Mt = 0; Mt < i; Mt++)\n                      (wt = bt * d.get(Mt, gt) + dt * d.get(Mt, Q - 1)),\n                        d.set(\n                          Mt,\n                          Q - 1,\n                          -dt * d.get(Mt, gt) + bt * d.get(Mt, Q - 1),\n                        ),\n                        d.set(Mt, gt, wt);\n                }\n                break;\n              case 2:\n                var xt = M[ht - 1];\n                M[ht - 1] = 0;\n                for (var kt = ht; kt < Q; kt++) {\n                  var St = _r(w[kt], xt),\n                    Et = w[kt] / St,\n                    Ot = xt / St;\n                  if (\n                    ((w[kt] = St), (xt = -Ot * M[kt]), (M[kt] = Et * M[kt]), l)\n                  )\n                    for (var Rt = 0; Rt < n; Rt++)\n                      (St = Et * b.get(Rt, kt) + Ot * b.get(Rt, ht - 1)),\n                        b.set(\n                          Rt,\n                          ht - 1,\n                          -Ot * b.get(Rt, kt) + Et * b.get(Rt, ht - 1),\n                        ),\n                        b.set(Rt, kt, St);\n                }\n                break;\n              case 3:\n                var jt = Math.max(\n                    Math.abs(w[Q - 1]),\n                    Math.abs(w[Q - 2]),\n                    Math.abs(M[Q - 2]),\n                    Math.abs(w[ht]),\n                    Math.abs(M[ht]),\n                  ),\n                  _t = w[Q - 1] / jt,\n                  Pt = w[Q - 2] / jt,\n                  Tt = M[Q - 2] / jt,\n                  At = w[ht] / jt,\n                  Ct = M[ht] / jt,\n                  Nt = ((Pt + _t) * (Pt - _t) + Tt * Tt) / 2,\n                  It = _t * Tt * (_t * Tt),\n                  Vt = 0;\n                (0 === Nt && 0 === It) ||\n                  (Vt =\n                    It /\n                    (Nt +\n                      (Vt =\n                        Nt < 0\n                          ? 0 - Math.sqrt(Nt * Nt + It)\n                          : Math.sqrt(Nt * Nt + It))));\n                for (\n                  var qt = (At + _t) * (At - _t) + Vt, Dt = At * Ct, Ft = ht;\n                  Ft < Q - 1;\n                  Ft++\n                ) {\n                  var Bt = _r(qt, Dt);\n                  0 === Bt && (Bt = Number.MIN_VALUE);\n                  var Lt = qt / Bt,\n                    zt = Dt / Bt;\n                  if (\n                    (Ft !== ht && (M[Ft - 1] = Bt),\n                    (qt = Lt * w[Ft] + zt * M[Ft]),\n                    (M[Ft] = Lt * M[Ft] - zt * w[Ft]),\n                    (Dt = zt * w[Ft + 1]),\n                    (w[Ft + 1] = Lt * w[Ft + 1]),\n                    p)\n                  )\n                    for (var Ut = 0; Ut < i; Ut++)\n                      (Bt = Lt * d.get(Ut, Ft) + zt * d.get(Ut, Ft + 1)),\n                        d.set(\n                          Ut,\n                          Ft + 1,\n                          -zt * d.get(Ut, Ft) + Lt * d.get(Ut, Ft + 1),\n                        ),\n                        d.set(Ut, Ft, Bt);\n                  if (\n                    (0 === (Bt = _r(qt, Dt)) && (Bt = Number.MIN_VALUE),\n                    (Lt = qt / Bt),\n                    (zt = Dt / Bt),\n                    (w[Ft] = Bt),\n                    (qt = Lt * M[Ft] + zt * w[Ft + 1]),\n                    (w[Ft + 1] = -zt * M[Ft] + Lt * w[Ft + 1]),\n                    (Dt = zt * M[Ft + 1]),\n                    (M[Ft + 1] = Lt * M[Ft + 1]),\n                    l && Ft < n - 1)\n                  )\n                    for (var Wt = 0; Wt < n; Wt++)\n                      (Bt = Lt * b.get(Wt, Ft) + zt * b.get(Wt, Ft + 1)),\n                        b.set(\n                          Wt,\n                          Ft + 1,\n                          -zt * b.get(Wt, Ft) + Lt * b.get(Wt, Ft + 1),\n                        ),\n                        b.set(Wt, Ft, Bt);\n                }\n                (M[Q - 2] = qt), 1;\n                break;\n              case 4:\n                if (w[ht] <= 0 && ((w[ht] = w[ht] < 0 ? -w[ht] : 0), p))\n                  for (var Qt = 0; Qt <= ft; Qt++)\n                    d.set(Qt, ht, -d.get(Qt, ht));\n                for (; ht < ft && !(w[ht] >= w[ht + 1]); ) {\n                  var Jt = w[ht];\n                  if (((w[ht] = w[ht + 1]), (w[ht + 1] = Jt), p && ht < i - 1))\n                    for (var Yt = 0; Yt < i; Yt++)\n                      (Jt = d.get(Yt, ht + 1)),\n                        d.set(Yt, ht + 1, d.get(Yt, ht)),\n                        d.set(Yt, ht, Jt);\n                  if (l && ht < n - 1)\n                    for (var Ht = 0; Ht < n; Ht++)\n                      (Jt = b.get(Ht, ht + 1)),\n                        b.set(Ht, ht + 1, b.get(Ht, ht)),\n                        b.set(Ht, ht, Jt);\n                  ht++;\n                }\n                0, Q--;\n            }\n          }\n          if (v) {\n            var Kt = d;\n            (d = b), (b = Kt);\n          }\n          (this.m = n), (this.n = i), (this.s = w), (this.U = b), (this.V = d);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                for (\n                  var r = t,\n                    e = this.threshold,\n                    o = this.s.length,\n                    n = K.zeros(o, o),\n                    i = 0;\n                  i < o;\n                  i++\n                )\n                  Math.abs(this.s[i]) <= e\n                    ? n.set(i, i, 0)\n                    : n.set(i, i, 1 / this.s[i]);\n                for (\n                  var s = this.U,\n                    u = this.rightSingularVectors,\n                    a = u.mmul(n),\n                    f = u.rows,\n                    c = s.rows,\n                    h = K.zeros(f, c),\n                    l = 0;\n                  l < f;\n                  l++\n                )\n                  for (var p = 0; p < c; p++) {\n                    for (var v = 0, y = 0; y < o; y++)\n                      v += a.get(l, y) * s.get(p, y);\n                    h.set(l, p, v);\n                  }\n                return h.mmul(r);\n              },\n            },\n            {\n              key: \"solveForDiagonal\",\n              value: function (t) {\n                return this.solve(K.diag(t));\n              },\n            },\n            {\n              key: \"inverse\",\n              value: function () {\n                for (\n                  var t = this.V,\n                    r = this.threshold,\n                    e = t.rows,\n                    o = t.columns,\n                    n = new K(e, this.s.length),\n                    i = 0;\n                  i < e;\n                  i++\n                )\n                  for (var s = 0; s < o; s++)\n                    Math.abs(this.s[s]) > r &&\n                      n.set(i, s, t.get(i, s) / this.s[s]);\n                for (\n                  var u = this.U,\n                    a = u.rows,\n                    f = u.columns,\n                    c = new K(e, a),\n                    h = 0;\n                  h < e;\n                  h++\n                )\n                  for (var l = 0; l < a; l++) {\n                    for (var p = 0, v = 0; v < f; v++)\n                      p += n.get(h, v) * u.get(l, v);\n                    c.set(h, l, p);\n                  }\n                return c;\n              },\n            },\n            {\n              key: \"condition\",\n              get: function () {\n                return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n              },\n            },\n            {\n              key: \"norm2\",\n              get: function () {\n                return this.s[0];\n              },\n            },\n            {\n              key: \"rank\",\n              get: function () {\n                for (\n                  var t = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON,\n                    r = 0,\n                    e = this.s,\n                    o = 0,\n                    n = e.length;\n                  o < n;\n                  o++\n                )\n                  e[o] > t && r++;\n                return r;\n              },\n            },\n            {\n              key: \"diagonal\",\n              get: function () {\n                return Array.from(this.s);\n              },\n            },\n            {\n              key: \"threshold\",\n              get: function () {\n                return (\n                  (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0]\n                );\n              },\n            },\n            {\n              key: \"leftSingularVectors\",\n              get: function () {\n                return this.U;\n              },\n            },\n            {\n              key: \"rightSingularVectors\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                return K.diag(this.s);\n              },\n            },\n          ]) && Cr(r.prototype, e),\n          o && Cr(r, o),\n          t\n        );\n      })();\n      function Ir(t) {\n        var r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n        return (\n          (t = Er.checkMatrix(t)),\n          r ? new Nr(t).inverse() : Vr(t, K.eye(t.rows))\n        );\n      }\n      function Vr(t, r) {\n        var e = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\n        return (\n          (t = Er.checkMatrix(t)),\n          (r = Er.checkMatrix(r)),\n          e\n            ? new Nr(t).solve(r)\n            : t.isSquare()\n            ? new jr(t).solve(r)\n            : new Tr(t).solve(r)\n        );\n      }\n      function qr(t) {\n        var r, e, o, n, i, s;\n        if ((t = K.checkMatrix(t)).isSquare())\n          return 0 === t.columns\n            ? 1\n            : 2 === t.columns\n            ? ((r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(1, 0)),\n              r * t.get(1, 1) - e * o)\n            : 3 === t.columns\n            ? ((n = new Xt(t, [1, 2], [1, 2])),\n              (i = new Xt(t, [1, 2], [0, 2])),\n              (s = new Xt(t, [1, 2], [0, 1])),\n              (r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(0, 2)),\n              r * qr(n) - e * qr(i) + o * qr(s))\n            : new jr(t).determinant;\n        throw Error(\"determinant can only be calculated for a square matrix\");\n      }\n      function Dr(t, r) {\n        for (var e = [], o = 0; o < t; o++) o !== r && e.push(o);\n        return e;\n      }\n      function Fr(t, r, e) {\n        var o =\n            arguments.length > 3 && void 0 !== arguments[3]\n              ? arguments[3]\n              : 1e-9,\n          n =\n            arguments.length > 4 && void 0 !== arguments[4]\n              ? arguments[4]\n              : 1e-9;\n        if (t > n) return new Array(r.rows + 1).fill(0);\n        for (var i = r.addRow(e, [0]), s = 0; s < i.rows; s++)\n          Math.abs(i.get(s, 0)) < o && i.set(s, 0, 0);\n        return i.to1DArray();\n      }\n      function Br(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            e = r.thresholdValue,\n            o = void 0 === e ? 1e-9 : e,\n            n = r.thresholdError,\n            i = void 0 === n ? 1e-9 : n,\n            s = (t = K.checkMatrix(t)).rows,\n            u = new K(s, s),\n            a = 0;\n          a < s;\n          a++\n        ) {\n          var f = K.columnVector(t.getRow(a)),\n            c = t.subMatrixRow(Dr(s, a)).transpose(),\n            h = new Nr(c),\n            l = h.solve(f),\n            p = K.sub(f, c.mmul(l)).abs().max();\n          u.setRow(a, Fr(p, l, a, o, i));\n        }\n        return u;\n      }\n      function Lr(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1]\n            ? arguments[1]\n            : Number.EPSILON;\n        if ((t = K.checkMatrix(t)).isEmpty()) return t.transpose();\n        for (\n          var e = new Nr(t, { autoTranspose: !0 }),\n            o = e.leftSingularVectors,\n            n = e.rightSingularVectors,\n            i = e.diagonal,\n            s = 0;\n          s < i.length;\n          s++\n        )\n          Math.abs(i[s]) > r ? (i[s] = 1 / i[s]) : (i[s] = 0);\n        return n.mmul(K.diag(i).mmul(o.transpose()));\n      }\n      function zr(t) {\n        return (zr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Ur(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== zr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i;\n        s && ((t = t.center(\"column\")), o || (r = r.center(\"column\")));\n        for (var u = t.transpose().mmul(r), a = 0; a < u.rows; a++)\n          for (var f = 0; f < u.columns; f++)\n            u.set(a, f, u.get(a, f) * (1 / (t.rows - 1)));\n        return u;\n      }\n      function Wr(t) {\n        return (Wr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== Wr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i,\n          u = n.scale,\n          a = void 0 === u || u;\n        s && (t.center(\"column\"), o || r.center(\"column\")),\n          a && (t.scale(\"column\"), o || r.scale(\"column\"));\n        for (\n          var f = t.standardDeviation(\"column\", { unbiased: !0 }),\n            c = o ? f : r.standardDeviation(\"column\", { unbiased: !0 }),\n            h = t.transpose().mmul(r),\n            l = 0;\n          l < h.rows;\n          l++\n        )\n          for (var p = 0; p < h.columns; p++)\n            h.set(l, p, h.get(l, p) * (1 / (f[l] * c[p])) * (1 / (t.rows - 1)));\n        return h;\n      }\n      function Jr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Yr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Hr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          Jr(this, t);\n          var o = e.assumeSymmetric,\n            n = void 0 !== o && o;\n          if (!(r = Er.checkMatrix(r)).isSquare())\n            throw new Error(\"Matrix is not a square matrix\");\n          if (r.isEmpty()) throw new Error(\"Matrix must be non-empty\");\n          var i,\n            s,\n            u = r.columns,\n            a = new K(u, u),\n            f = new Float64Array(u),\n            c = new Float64Array(u),\n            h = r;\n          if (!!n || r.isSymmetric()) {\n            for (i = 0; i < u; i++)\n              for (s = 0; s < u; s++) a.set(i, s, h.get(i, s));\n            Kr(u, c, f, a), Xr(u, c, f, a);\n          } else {\n            var l = new K(u, u),\n              p = new Float64Array(u);\n            for (s = 0; s < u; s++)\n              for (i = 0; i < u; i++) l.set(i, s, h.get(i, s));\n            Gr(u, l, p, a), Zr(u, c, f, a, l);\n          }\n          (this.n = u), (this.e = c), (this.d = f), (this.V = a);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"realEigenvalues\",\n              get: function () {\n                return Array.from(this.d);\n              },\n            },\n            {\n              key: \"imaginaryEigenvalues\",\n              get: function () {\n                return Array.from(this.e);\n              },\n            },\n            {\n              key: \"eigenvectorMatrix\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.n,\n                  o = this.e,\n                  n = this.d,\n                  i = new K(e, e);\n                for (t = 0; t < e; t++) {\n                  for (r = 0; r < e; r++) i.set(t, r, 0);\n                  i.set(t, t, n[t]),\n                    o[t] > 0\n                      ? i.set(t, t + 1, o[t])\n                      : o[t] < 0 && i.set(t, t - 1, o[t]);\n                }\n                return i;\n              },\n            },\n          ]) && Yr(r.prototype, e),\n          o && Yr(r, o),\n          t\n        );\n      })();\n      function Kr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h;\n        for (a = 0; a < t; a++) e[a] = o.get(t - 1, a);\n        for (u = t - 1; u > 0; u--) {\n          for (h = 0, s = 0, f = 0; f < u; f++) h += Math.abs(e[f]);\n          if (0 === h)\n            for (r[u] = e[u - 1], a = 0; a < u; a++)\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0), o.set(a, u, 0);\n          else {\n            for (f = 0; f < u; f++) (e[f] /= h), (s += e[f] * e[f]);\n            for (\n              n = e[u - 1],\n                i = Math.sqrt(s),\n                n > 0 && (i = -i),\n                r[u] = h * i,\n                s -= n * i,\n                e[u - 1] = n - i,\n                a = 0;\n              a < u;\n              a++\n            )\n              r[a] = 0;\n            for (a = 0; a < u; a++) {\n              for (\n                n = e[a], o.set(a, u, n), i = r[a] + o.get(a, a) * n, f = a + 1;\n                f <= u - 1;\n                f++\n              )\n                (i += o.get(f, a) * e[f]), (r[f] += o.get(f, a) * n);\n              r[a] = i;\n            }\n            for (n = 0, a = 0; a < u; a++) (r[a] /= s), (n += r[a] * e[a]);\n            for (c = n / (s + s), a = 0; a < u; a++) r[a] -= c * e[a];\n            for (a = 0; a < u; a++) {\n              for (n = e[a], i = r[a], f = a; f <= u - 1; f++)\n                o.set(f, a, o.get(f, a) - (n * r[f] + i * e[f]));\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0);\n            }\n          }\n          e[u] = s;\n        }\n        for (u = 0; u < t - 1; u++) {\n          if (\n            (o.set(t - 1, u, o.get(u, u)), o.set(u, u, 1), 0 !== (s = e[u + 1]))\n          ) {\n            for (f = 0; f <= u; f++) e[f] = o.get(f, u + 1) / s;\n            for (a = 0; a <= u; a++) {\n              for (i = 0, f = 0; f <= u; f++)\n                i += o.get(f, u + 1) * o.get(f, a);\n              for (f = 0; f <= u; f++) o.set(f, a, o.get(f, a) - i * e[f]);\n            }\n          }\n          for (f = 0; f <= u; f++) o.set(f, u + 1, 0);\n        }\n        for (a = 0; a < t; a++) (e[a] = o.get(t - 1, a)), o.set(t - 1, a, 0);\n        o.set(t - 1, t - 1, 1), (r[0] = 0);\n      }\n      function Xr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h, l, p, v, y, m, g, w, b;\n        for (s = 1; s < t; s++) r[s - 1] = r[s];\n        r[t - 1] = 0;\n        var d = 0,\n          M = 0,\n          x = Number.EPSILON;\n        for (f = 0; f < t; f++) {\n          for (\n            M = Math.max(M, Math.abs(e[f]) + Math.abs(r[f])), c = f;\n            c < t && !(Math.abs(r[c]) <= x * M);\n\n          )\n            c++;\n          if (c > f) {\n            0;\n            do {\n              for (\n                1,\n                  n = e[f],\n                  l = _r((h = (e[f + 1] - n) / (2 * r[f])), 1),\n                  h < 0 && (l = -l),\n                  e[f] = r[f] / (h + l),\n                  e[f + 1] = r[f] * (h + l),\n                  p = e[f + 1],\n                  i = n - e[f],\n                  s = f + 2;\n                s < t;\n                s++\n              )\n                e[s] -= i;\n              for (\n                d += i,\n                  h = e[c],\n                  y = v = 1,\n                  m = v,\n                  g = r[f + 1],\n                  w = 0,\n                  b = 0,\n                  s = c - 1;\n                s >= f;\n                s--\n              )\n                for (\n                  m = y,\n                    y = v,\n                    b = w,\n                    n = v * r[s],\n                    i = v * h,\n                    l = _r(h, r[s]),\n                    r[s + 1] = w * l,\n                    w = r[s] / l,\n                    h = (v = h / l) * e[s] - w * n,\n                    e[s + 1] = i + w * (v * n + w * e[s]),\n                    a = 0;\n                  a < t;\n                  a++\n                )\n                  (i = o.get(a, s + 1)),\n                    o.set(a, s + 1, w * o.get(a, s) + v * i),\n                    o.set(a, s, v * o.get(a, s) - w * i);\n              (h = (-w * b * m * g * r[f]) / p), (r[f] = w * h), (e[f] = v * h);\n            } while (Math.abs(r[f]) > x * M);\n          }\n          (e[f] = e[f] + d), (r[f] = 0);\n        }\n        for (s = 0; s < t - 1; s++) {\n          for (a = s, h = e[s], u = s + 1; u < t; u++)\n            e[u] < h && ((a = u), (h = e[u]));\n          if (a !== s)\n            for (e[a] = e[s], e[s] = h, u = 0; u < t; u++)\n              (h = o.get(u, s)), o.set(u, s, o.get(u, a)), o.set(u, a, h);\n        }\n      }\n      function Gr(t, r, e, o) {\n        var n,\n          i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h = t - 1;\n        for (f = 1; f <= h - 1; f++) {\n          for (c = 0, u = f; u <= h; u++) c += Math.abs(r.get(u, f - 1));\n          if (0 !== c) {\n            for (s = 0, u = h; u >= f; u--)\n              (e[u] = r.get(u, f - 1) / c), (s += e[u] * e[u]);\n            for (\n              i = Math.sqrt(s),\n                e[f] > 0 && (i = -i),\n                s -= e[f] * i,\n                e[f] = e[f] - i,\n                a = f;\n              a < t;\n              a++\n            ) {\n              for (n = 0, u = h; u >= f; u--) n += e[u] * r.get(u, a);\n              for (n /= s, u = f; u <= h; u++)\n                r.set(u, a, r.get(u, a) - n * e[u]);\n            }\n            for (u = 0; u <= h; u++) {\n              for (n = 0, a = h; a >= f; a--) n += e[a] * r.get(u, a);\n              for (n /= s, a = f; a <= h; a++)\n                r.set(u, a, r.get(u, a) - n * e[a]);\n            }\n            (e[f] = c * e[f]), r.set(f, f - 1, c * i);\n          }\n        }\n        for (u = 0; u < t; u++)\n          for (a = 0; a < t; a++) o.set(u, a, u === a ? 1 : 0);\n        for (f = h - 1; f >= 1; f--)\n          if (0 !== r.get(f, f - 1)) {\n            for (u = f + 1; u <= h; u++) e[u] = r.get(u, f - 1);\n            for (a = f; a <= h; a++) {\n              for (i = 0, u = f; u <= h; u++) i += e[u] * o.get(u, a);\n              for (i = i / e[f] / r.get(f, f - 1), u = f; u <= h; u++)\n                o.set(u, a, o.get(u, a) + i * e[u]);\n            }\n          }\n      }\n      function Zr(t, r, e, o, n) {\n        var i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h,\n          l,\n          p,\n          v,\n          y,\n          m,\n          g,\n          w,\n          b,\n          d = t - 1,\n          M = t - 1,\n          x = Number.EPSILON,\n          k = 0,\n          S = 0,\n          E = 0,\n          O = 0,\n          R = 0,\n          j = 0,\n          _ = 0,\n          P = 0;\n        for (i = 0; i < t; i++)\n          for (\n            (i < 0 || i > M) && ((e[i] = n.get(i, i)), (r[i] = 0)),\n              s = Math.max(i - 1, 0);\n            s < t;\n            s++\n          )\n            S += Math.abs(n.get(i, s));\n        for (; d >= 0; ) {\n          for (\n            a = d;\n            a > 0 &&\n            (0 ===\n              (j = Math.abs(n.get(a - 1, a - 1)) + Math.abs(n.get(a, a))) &&\n              (j = S),\n            !(Math.abs(n.get(a, a - 1)) < x * j));\n\n          )\n            a--;\n          if (a === d)\n            n.set(d, d, n.get(d, d) + k),\n              (e[d] = n.get(d, d)),\n              (r[d] = 0),\n              d--,\n              (P = 0);\n          else if (a === d - 1) {\n            if (\n              ((h = n.get(d, d - 1) * n.get(d - 1, d)),\n              (O = (E = (n.get(d - 1, d - 1) - n.get(d, d)) / 2) * E + h),\n              (_ = Math.sqrt(Math.abs(O))),\n              n.set(d, d, n.get(d, d) + k),\n              n.set(d - 1, d - 1, n.get(d - 1, d - 1) + k),\n              (l = n.get(d, d)),\n              O >= 0)\n            ) {\n              for (\n                _ = E >= 0 ? E + _ : E - _,\n                  e[d - 1] = l + _,\n                  e[d] = e[d - 1],\n                  0 !== _ && (e[d] = l - h / _),\n                  r[d - 1] = 0,\n                  r[d] = 0,\n                  E = (l = n.get(d, d - 1)) / (j = Math.abs(l) + Math.abs(_)),\n                  O = _ / j,\n                  E /= R = Math.sqrt(E * E + O * O),\n                  O /= R,\n                  s = d - 1;\n                s < t;\n                s++\n              )\n                (_ = n.get(d - 1, s)),\n                  n.set(d - 1, s, O * _ + E * n.get(d, s)),\n                  n.set(d, s, O * n.get(d, s) - E * _);\n              for (i = 0; i <= d; i++)\n                (_ = n.get(i, d - 1)),\n                  n.set(i, d - 1, O * _ + E * n.get(i, d)),\n                  n.set(i, d, O * n.get(i, d) - E * _);\n              for (i = 0; i <= M; i++)\n                (_ = o.get(i, d - 1)),\n                  o.set(i, d - 1, O * _ + E * o.get(i, d)),\n                  o.set(i, d, O * o.get(i, d) - E * _);\n            } else\n              (e[d - 1] = l + E), (e[d] = l + E), (r[d - 1] = _), (r[d] = -_);\n            (d -= 2), (P = 0);\n          } else {\n            if (\n              ((l = n.get(d, d)),\n              (p = 0),\n              (h = 0),\n              a < d &&\n                ((p = n.get(d - 1, d - 1)),\n                (h = n.get(d, d - 1) * n.get(d - 1, d))),\n              10 === P)\n            ) {\n              for (k += l, i = 0; i <= d; i++) n.set(i, i, n.get(i, i) - l);\n              (l = p =\n                0.75 *\n                (j =\n                  Math.abs(n.get(d, d - 1)) + Math.abs(n.get(d - 1, d - 2)))),\n                (h = -0.4375 * j * j);\n            }\n            if (30 === P && (j = (j = (p - l) / 2) * j + h) > 0) {\n              for (\n                j = Math.sqrt(j),\n                  p < l && (j = -j),\n                  j = l - h / ((p - l) / 2 + j),\n                  i = 0;\n                i <= d;\n                i++\n              )\n                n.set(i, i, n.get(i, i) - j);\n              (k += j), (l = p = h = 0.964);\n            }\n            for (\n              P += 1, f = d - 2;\n              f >= a &&\n              ((E =\n                ((R = l - (_ = n.get(f, f))) * (j = p - _) - h) /\n                  n.get(f + 1, f) +\n                n.get(f, f + 1)),\n              (O = n.get(f + 1, f + 1) - _ - R - j),\n              (R = n.get(f + 2, f + 1)),\n              (E /= j = Math.abs(E) + Math.abs(O) + Math.abs(R)),\n              (O /= j),\n              (R /= j),\n              f !== a) &&\n              !(\n                Math.abs(n.get(f, f - 1)) * (Math.abs(O) + Math.abs(R)) <\n                x *\n                  (Math.abs(E) *\n                    (Math.abs(n.get(f - 1, f - 1)) +\n                      Math.abs(_) +\n                      Math.abs(n.get(f + 1, f + 1))))\n              );\n\n            )\n              f--;\n            for (i = f + 2; i <= d; i++)\n              n.set(i, i - 2, 0), i > f + 2 && n.set(i, i - 3, 0);\n            for (\n              u = f;\n              u <= d - 1 &&\n              ((w = u !== d - 1),\n              u !== f &&\n                ((E = n.get(u, u - 1)),\n                (O = n.get(u + 1, u - 1)),\n                (R = w ? n.get(u + 2, u - 1) : 0),\n                0 !== (l = Math.abs(E) + Math.abs(O) + Math.abs(R)) &&\n                  ((E /= l), (O /= l), (R /= l))),\n              0 !== l);\n              u++\n            )\n              if (\n                ((j = Math.sqrt(E * E + O * O + R * R)),\n                E < 0 && (j = -j),\n                0 !== j)\n              ) {\n                for (\n                  u !== f\n                    ? n.set(u, u - 1, -j * l)\n                    : a !== f && n.set(u, u - 1, -n.get(u, u - 1)),\n                    l = (E += j) / j,\n                    p = O / j,\n                    _ = R / j,\n                    O /= E,\n                    R /= E,\n                    s = u;\n                  s < t;\n                  s++\n                )\n                  (E = n.get(u, s) + O * n.get(u + 1, s)),\n                    w &&\n                      ((E += R * n.get(u + 2, s)),\n                      n.set(u + 2, s, n.get(u + 2, s) - E * _)),\n                    n.set(u, s, n.get(u, s) - E * l),\n                    n.set(u + 1, s, n.get(u + 1, s) - E * p);\n                for (i = 0; i <= Math.min(d, u + 3); i++)\n                  (E = l * n.get(i, u) + p * n.get(i, u + 1)),\n                    w &&\n                      ((E += _ * n.get(i, u + 2)),\n                      n.set(i, u + 2, n.get(i, u + 2) - E * R)),\n                    n.set(i, u, n.get(i, u) - E),\n                    n.set(i, u + 1, n.get(i, u + 1) - E * O);\n                for (i = 0; i <= M; i++)\n                  (E = l * o.get(i, u) + p * o.get(i, u + 1)),\n                    w &&\n                      ((E += _ * o.get(i, u + 2)),\n                      o.set(i, u + 2, o.get(i, u + 2) - E * R)),\n                    o.set(i, u, o.get(i, u) - E),\n                    o.set(i, u + 1, o.get(i, u + 1) - E * O);\n              }\n          }\n        }\n        if (0 !== S) {\n          for (d = t - 1; d >= 0; d--)\n            if (((E = e[d]), 0 === (O = r[d])))\n              for (a = d, n.set(d, d, 1), i = d - 1; i >= 0; i--) {\n                for (h = n.get(i, i) - E, R = 0, s = a; s <= d; s++)\n                  R += n.get(i, s) * n.get(s, d);\n                if (r[i] < 0) (_ = h), (j = R);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? n.set(i, d, 0 !== h ? -R / h : -R / (x * S))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (c =\n                        (l * j - _ * R) /\n                        (O = (e[i] - E) * (e[i] - E) + r[i] * r[i])),\n                      n.set(i, d, c),\n                      n.set(\n                        i + 1,\n                        d,\n                        Math.abs(l) > Math.abs(_)\n                          ? (-R - h * c) / l\n                          : (-j - p * c) / _,\n                      )),\n                  x * (c = Math.abs(n.get(i, d))) * c > 1)\n                )\n                  for (s = i; s <= d; s++) n.set(s, d, n.get(s, d) / c);\n              }\n            else if (O < 0)\n              for (\n                a = d - 1,\n                  Math.abs(n.get(d, d - 1)) > Math.abs(n.get(d - 1, d))\n                    ? (n.set(d - 1, d - 1, O / n.get(d, d - 1)),\n                      n.set(d - 1, d, -(n.get(d, d) - E) / n.get(d, d - 1)))\n                    : ((b = $r(\n                        0,\n                        -n.get(d - 1, d),\n                        n.get(d - 1, d - 1) - E,\n                        O,\n                      )),\n                      n.set(d - 1, d - 1, b[0]),\n                      n.set(d - 1, d, b[1])),\n                  n.set(d, d - 1, 0),\n                  n.set(d, d, 1),\n                  i = d - 2;\n                i >= 0;\n                i--\n              ) {\n                for (v = 0, y = 0, s = a; s <= d; s++)\n                  (v += n.get(i, s) * n.get(s, d - 1)),\n                    (y += n.get(i, s) * n.get(s, d));\n                if (((h = n.get(i, i) - E), r[i] < 0))\n                  (_ = h), (R = v), (j = y);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? ((b = $r(-v, -y, h, O)),\n                      n.set(i, d - 1, b[0]),\n                      n.set(i, d, b[1]))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (m = (e[i] - E) * (e[i] - E) + r[i] * r[i] - O * O),\n                      (g = 2 * (e[i] - E) * O),\n                      0 === m &&\n                        0 === g &&\n                        (m =\n                          x *\n                          S *\n                          (Math.abs(h) +\n                            Math.abs(O) +\n                            Math.abs(l) +\n                            Math.abs(p) +\n                            Math.abs(_))),\n                      (b = $r(\n                        l * R - _ * v + O * y,\n                        l * j - _ * y - O * v,\n                        m,\n                        g,\n                      )),\n                      n.set(i, d - 1, b[0]),\n                      n.set(i, d, b[1]),\n                      Math.abs(l) > Math.abs(_) + Math.abs(O)\n                        ? (n.set(\n                            i + 1,\n                            d - 1,\n                            (-v - h * n.get(i, d - 1) + O * n.get(i, d)) / l,\n                          ),\n                          n.set(\n                            i + 1,\n                            d,\n                            (-y - h * n.get(i, d) - O * n.get(i, d - 1)) / l,\n                          ))\n                        : ((b = $r(\n                            -R - p * n.get(i, d - 1),\n                            -j - p * n.get(i, d),\n                            _,\n                            O,\n                          )),\n                          n.set(i + 1, d - 1, b[0]),\n                          n.set(i + 1, d, b[1]))),\n                  x *\n                    (c = Math.max(\n                      Math.abs(n.get(i, d - 1)),\n                      Math.abs(n.get(i, d)),\n                    )) *\n                    c >\n                    1)\n                )\n                  for (s = i; s <= d; s++)\n                    n.set(s, d - 1, n.get(s, d - 1) / c),\n                      n.set(s, d, n.get(s, d) / c);\n              }\n          for (i = 0; i < t; i++)\n            if (i < 0 || i > M)\n              for (s = i; s < t; s++) o.set(i, s, n.get(i, s));\n          for (s = t - 1; s >= 0; s--)\n            for (i = 0; i <= M; i++) {\n              for (_ = 0, u = 0; u <= Math.min(s, M); u++)\n                _ += o.get(i, u) * n.get(u, s);\n              o.set(i, s, _);\n            }\n        }\n      }\n      function $r(t, r, e, o) {\n        var n, i;\n        return Math.abs(e) > Math.abs(o)\n          ? [(t + (n = o / e) * r) / (i = e + n * o), (r - n * t) / i]\n          : [((n = e / o) * t + r) / (i = o + n * e), (n * r - t) / i];\n      }\n      function te(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var re = (function () {\n        function t(r) {\n          if (\n            ((function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, t),\n            !(r = Er.checkMatrix(r)).isSymmetric())\n          )\n            throw new Error(\"Matrix is not symmetric\");\n          var e,\n            o,\n            n,\n            i = r,\n            s = i.rows,\n            u = new K(s, s),\n            a = !0;\n          for (o = 0; o < s; o++) {\n            var f = 0;\n            for (n = 0; n < o; n++) {\n              var c = 0;\n              for (e = 0; e < n; e++) c += u.get(n, e) * u.get(o, e);\n              (c = (i.get(o, n) - c) / u.get(n, n)),\n                u.set(o, n, c),\n                (f += c * c);\n            }\n            for (\n              a &= (f = i.get(o, o) - f) > 0,\n                u.set(o, o, Math.sqrt(Math.max(f, 0))),\n                n = o + 1;\n              n < s;\n              n++\n            )\n              u.set(o, n, 0);\n          }\n          (this.L = u), (this.positiveDefinite = Boolean(a));\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isPositiveDefinite\",\n              value: function () {\n                return this.positiveDefinite;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Er.checkMatrix(t);\n                var r = this.L,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix dimensions do not match\");\n                if (!1 === this.isPositiveDefinite())\n                  throw new Error(\"Matrix is not positive definite\");\n                var o,\n                  n,\n                  i,\n                  s = t.columns,\n                  u = t.clone();\n                for (i = 0; i < e; i++)\n                  for (n = 0; n < s; n++) {\n                    for (o = 0; o < i; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(i, o));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                for (i = e - 1; i >= 0; i--)\n                  for (n = 0; n < s; n++) {\n                    for (o = i + 1; o < e; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(o, i));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                return u;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                return this.L;\n              },\n            },\n          ]) && te(r.prototype, e),\n          o && te(r, o),\n          t\n        );\n      })();\n      function ee(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      var oe = function t(r) {\n        var e =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        ee(this, t), (r = Er.checkMatrix(r));\n        var o,\n          n = e.Y,\n          i = e.scaleScores,\n          s = void 0 !== i && i,\n          u = e.maxIterations,\n          a = void 0 === u ? 1e3 : u,\n          f = e.terminationCriteria,\n          c = void 0 === f ? 1e-10 : f;\n        if (n) {\n          if (\n            (n =\n              Array.isArray(n) && \"number\" == typeof n[0]\n                ? K.columnVector(n)\n                : Er.checkMatrix(n)).rows !== r.rows\n          )\n            throw new Error(\"Y should have the same number of rows as X\");\n          o = n.getColumnVector(0);\n        } else o = r.getColumnVector(0);\n        for (var h, l, p, v, y = 1, m = 0; m < a && y > c; m++)\n          (p = (p = r\n            .transpose()\n            .mmul(o)\n            .div(o.transpose().mmul(o).get(0, 0))).div(p.norm())),\n            (h = r.mmul(p).div(p.transpose().mmul(p).get(0, 0))),\n            m > 0 && (y = h.clone().sub(v).pow(2).sum()),\n            (v = h.clone()),\n            n\n              ? ((l = (l = n\n                  .transpose()\n                  .mmul(h)\n                  .div(h.transpose().mmul(h).get(0, 0))).div(l.norm())),\n                (o = n.mmul(l).div(l.transpose().mmul(l).get(0, 0))))\n              : (o = h);\n        if (n) {\n          var g = r.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0));\n          g = g.div(g.norm());\n          var w = r.clone().sub(h.clone().mmul(g.transpose())),\n            b = o.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0)),\n            d = n.clone().sub(h.clone().mulS(b.get(0, 0)).mmul(l.transpose()));\n          (this.t = h),\n            (this.p = g.transpose()),\n            (this.w = p.transpose()),\n            (this.q = l),\n            (this.u = o),\n            (this.s = h.transpose().mmul(h)),\n            (this.xResidual = w),\n            (this.yResidual = d),\n            (this.betas = b);\n        } else\n          (this.w = p.transpose()),\n            (this.s = h.transpose().mmul(h).sqrt()),\n            (this.t = s ? h.clone().div(this.s.get(0, 0)) : h),\n            (this.xResidual = r.sub(h.mmul(p.transpose())));\n      };\n    },\n    11: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.camelize = r.isString = void 0);\n      r.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var o,\n        n,\n        i = /-(\\w)/g;\n      r.camelize =\n        ((o = function (t) {\n          return t.replace(i, function (t, r) {\n            return r ? r.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = o(t));\n        });\n    },\n    12: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isArray = void 0),\n        (r.isArray = Array.isArray);\n    },\n    13: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.toNumber = r.isNaN = r.isNumber = void 0);\n      r.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      r.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      r.toNumber = function (t) {\n        var e = parseFloat(t);\n        return r.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.traverseTreeUp =\n          r.scaleMatrix =\n          r.getAdjMatrix =\n          r.floydWarshall =\n          r.getDegree =\n            void 0);\n      r.getDegree = function (t, r, e) {\n        for (var o = [], n = 0; n < t; n++) o[n] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (o[r[t.source]] += 1),\n                t.target && (o[r[t.target]] += 1);\n            }),\n            o)\n          : o;\n      };\n      r.floydWarshall = function (t) {\n        for (var r = [], e = t.length, o = 0; o < e; o += 1) {\n          r[o] = [];\n          for (var n = 0; n < e; n += 1)\n            o === n\n              ? (r[o][n] = 0)\n              : 0 !== t[o][n] && t[o][n]\n              ? (r[o][n] = t[o][n])\n              : (r[o][n] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (o = 0; o < e; o += 1)\n            for (n = 0; n < e; n += 1)\n              r[o][n] > r[o][i] + r[i][n] && (r[o][n] = r[o][i] + r[i][n]);\n        return r;\n      };\n      r.getAdjMatrix = function (t, r) {\n        var e = t.nodes,\n          o = t.edges,\n          n = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, r) {\n              i[t.id] = r;\n              n.push([]);\n            }),\n          o &&\n            o.forEach(function (t) {\n              var e = t.source,\n                o = t.target,\n                s = i[e],\n                u = i[o];\n              (n[s][u] = 1), r || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      r.scaleMatrix = function (t, r) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var o = [];\n            t.forEach(function (t) {\n              o.push(t * r);\n            }),\n              e.push(o);\n          }),\n          e\n        );\n      };\n      r.traverseTreeUp = function (t, r) {\n        \"function\" == typeof r &&\n          (function t(r, e) {\n            if (r && r.children)\n              for (var o = r.children.length - 1; o >= 0; o--)\n                if (!t(r.children[o], e)) return;\n            return !!e(r);\n          })(t, r);\n      };\n    },\n    15: function (t, r, e) {\n      \"use strict\";\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var r, e = 1, o = arguments.length; e < o; e++)\n                for (var n in (r = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.clone = r.isObject = void 0);\n      r.isObject = function (t) {\n        return null !== t && \"object\" === o(t);\n      };\n      r.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return r.clone(t);\n            })\n          );\n        }\n        if (\"object\" === o(t) && t !== {}) {\n          var i = n({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = r.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isFunction = void 0);\n      r.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    180: function (t, r, e) {\n      \"use strict\";\n      var o,\n        n =\n          (this && this.__extends) ||\n          ((o = function (t, r) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, r) {\n                  t.__proto__ = r;\n                }) ||\n              function (t, r) {\n                for (var e in r)\n                  Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]);\n              })(t, r);\n          }),\n          function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(r) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            o(t, r),\n              (t.prototype =\n                null === r\n                  ? Object.create(r)\n                  : ((e.prototype = r.prototype), new e()));\n          });\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.MDSLayout = void 0);\n      var i = e(102),\n        s = e(10),\n        u = (function (t) {\n          function r(r) {\n            var e = t.call(this) || this;\n            return (\n              (e.center = [0, 0]),\n              (e.linkDistance = 50),\n              (e.nodes = []),\n              (e.edges = []),\n              (e.onLayoutEnd = function () {}),\n              e.updateCfg(r),\n              e\n            );\n          }\n          return (\n            n(r, t),\n            (r.prototype.getDefaultCfg = function () {\n              return { center: [0, 0], linkDistance: 50 };\n            }),\n            (r.prototype.execute = function () {\n              var t = this.nodes,\n                r = this.edges,\n                e = void 0 === r ? [] : r,\n                o = this.center;\n              if (t && 0 !== t.length) {\n                if (1 === t.length)\n                  return (\n                    (t[0].x = o[0]),\n                    (t[0].y = o[1]),\n                    void (this.onLayoutEnd && this.onLayoutEnd())\n                  );\n                var n = this.linkDistance,\n                  i = s.getAdjMatrix({ nodes: t, edges: e }, !1),\n                  u = s.floydWarshall(i);\n                this.handleInfinity(u);\n                var a = s.scaleMatrix(u, n);\n                this.scaledDistances = a;\n                var f = this.runMDS();\n                return (\n                  (this.positions = f),\n                  f.forEach(function (r, e) {\n                    (t[e].x = r[0] + o[0]), (t[e].y = r[1] + o[1]);\n                  }),\n                  this.onLayoutEnd && this.onLayoutEnd(),\n                  { nodes: t, edges: e }\n                );\n              }\n              this.onLayoutEnd && this.onLayoutEnd();\n            }),\n            (r.prototype.runMDS = function () {\n              var t = this.scaledDistances,\n                r = i.Matrix.mul(i.Matrix.pow(t, 2), -0.5),\n                e = r.mean(\"row\"),\n                o = r.mean(\"column\"),\n                n = r.mean();\n              r.add(n).subRowVector(e).subColumnVector(o);\n              var s = new i.SingularValueDecomposition(r),\n                u = i.Matrix.sqrt(s.diagonalMatrix).diagonal();\n              return s.leftSingularVectors.toJSON().map(function (t) {\n                return i.Matrix.mul([t], [u]).toJSON()[0].splice(0, 2);\n              });\n            }),\n            (r.prototype.handleInfinity = function (t) {\n              var r = -999999;\n              t.forEach(function (t) {\n                t.forEach(function (t) {\n                  t !== 1 / 0 && r < t && (r = t);\n                });\n              }),\n                t.forEach(function (e, o) {\n                  e.forEach(function (e, n) {\n                    e === 1 / 0 && (t[o][n] = r);\n                  });\n                });\n            }),\n            (r.prototype.getType = function () {\n              return \"mds\";\n            }),\n            r\n          );\n        })(e(7).Base);\n      r.MDSLayout = u;\n    },\n    408: function (t, r, e) {\n      \"use strict\";\n      e.r(r);\n      var o = e(180);\n      r.default = o.MDSLayout;\n    },\n    7: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), (r.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      r.Base = o;\n    },\n  }).default;\n});\n//# sourceMappingURL=mdsLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/radialLayout.js",
    "content": "!(function (t, r) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = r())\n    : \"function\" == typeof define && define.amd\n    ? define([], r)\n    : \"object\" == typeof exports\n    ? (exports.f6 = r())\n    : (t.f6 = r());\n})(this, function () {\n  return (function (t) {\n    var r = {};\n    function e(o) {\n      if (r[o]) return r[o].exports;\n      var n = (r[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(n.exports, n, n.exports, e), (n.l = !0), n.exports;\n    }\n    return (\n      (e.m = t),\n      (e.c = r),\n      (e.d = function (t, r, o) {\n        e.o(t, r) || Object.defineProperty(t, r, { enumerable: !0, get: o });\n      }),\n      (e.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (e.t = function (t, r) {\n        if ((1 & r && (t = e(t)), 8 & r)) return t;\n        if (4 & r && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (e.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & r && \"string\" != typeof t)\n        )\n          for (var n in t)\n            e.d(\n              o,\n              n,\n              function (r) {\n                return t[r];\n              }.bind(null, n),\n            );\n        return o;\n      }),\n      (e.n = function (t) {\n        var r =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return e.d(r, \"a\", r), r;\n      }),\n      (e.o = function (t, r) {\n        return Object.prototype.hasOwnProperty.call(t, r);\n      }),\n      (e.p = \"\"),\n      e((e.s = 409))\n    );\n  })({\n    10: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        n(e(11), r),\n        n(e(12), r),\n        n(e(13), r),\n        n(e(14), r),\n        n(e(15), r),\n        n(e(16), r);\n    },\n    102: function (t, r, e) {\n      \"use strict\";\n      e.r(r),\n        e.d(r, \"AbstractMatrix\", function () {\n          return Q;\n        }),\n        e.d(r, \"default\", function () {\n          return K;\n        }),\n        e.d(r, \"Matrix\", function () {\n          return K;\n        }),\n        e.d(r, \"MatrixColumnView\", function () {\n          return at;\n        }),\n        e.d(r, \"MatrixColumnSelectionView\", function () {\n          return yt;\n        }),\n        e.d(r, \"MatrixFlipColumnView\", function () {\n          return xt;\n        }),\n        e.d(r, \"MatrixFlipRowView\", function () {\n          return _t;\n        }),\n        e.d(r, \"MatrixRowView\", function () {\n          return Dt;\n        }),\n        e.d(r, \"MatrixRowSelectionView\", function () {\n          return Ut;\n        }),\n        e.d(r, \"MatrixSelectionView\", function () {\n          return Xt;\n        }),\n        e.d(r, \"MatrixSubView\", function () {\n          return or;\n        }),\n        e.d(r, \"MatrixTransposeView\", function () {\n          return cr;\n        }),\n        e.d(r, \"wrap\", function () {\n          return Or;\n        }),\n        e.d(r, \"WrapperMatrix1D\", function () {\n          return wr;\n        }),\n        e.d(r, \"WrapperMatrix2D\", function () {\n          return Er;\n        }),\n        e.d(r, \"solve\", function () {\n          return Dr;\n        }),\n        e.d(r, \"inverse\", function () {\n          return Cr;\n        }),\n        e.d(r, \"determinant\", function () {\n          return Vr;\n        }),\n        e.d(r, \"linearDependencies\", function () {\n          return Br;\n        }),\n        e.d(r, \"pseudoInverse\", function () {\n          return zr;\n        }),\n        e.d(r, \"covariance\", function () {\n          return Ur;\n        }),\n        e.d(r, \"correlation\", function () {\n          return Qr;\n        }),\n        e.d(r, \"SingularValueDecomposition\", function () {\n          return Nr;\n        }),\n        e.d(r, \"SVD\", function () {\n          return Nr;\n        }),\n        e.d(r, \"EigenvalueDecomposition\", function () {\n          return Yr;\n        }),\n        e.d(r, \"EVD\", function () {\n          return Yr;\n        }),\n        e.d(r, \"CholeskyDecomposition\", function () {\n          return re;\n        }),\n        e.d(r, \"CHO\", function () {\n          return re;\n        }),\n        e.d(r, \"LuDecomposition\", function () {\n          return jr;\n        }),\n        e.d(r, \"LU\", function () {\n          return jr;\n        }),\n        e.d(r, \"QrDecomposition\", function () {\n          return Tr;\n        }),\n        e.d(r, \"QR\", function () {\n          return Tr;\n        }),\n        e.d(r, \"Nipals\", function () {\n          return oe;\n        }),\n        e.d(r, \"NIPALS\", function () {\n          return oe;\n        });\n      var o = Object.prototype.toString;\n      function n(t) {\n        return o.call(t).endsWith(\"Array]\");\n      }\n      var i = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] > u && (u = t[a]);\n        return u;\n      };\n      var s = function (t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        if (!n(t)) throw new TypeError(\"input must be an array\");\n        if (0 === t.length) throw new TypeError(\"input must not be empty\");\n        var e = r.fromIndex,\n          o = void 0 === e ? 0 : e,\n          i = r.toIndex,\n          s = void 0 === i ? t.length : i;\n        if (o < 0 || o >= t.length || !Number.isInteger(o))\n          throw new Error(\n            \"fromIndex must be a positive integer smaller than length\",\n          );\n        if (s <= o || s > t.length || !Number.isInteger(s))\n          throw new Error(\n            \"toIndex must be an integer greater than fromIndex and at most equal to length\",\n          );\n        for (var u = t[o], a = o + 1; a < s; a++) t[a] < u && (u = t[a]);\n        return u;\n      };\n      var u = function (t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          if (!n(t)) throw new TypeError(\"input must be an array\");\n          if (0 === t.length) throw new TypeError(\"input must not be empty\");\n          if (void 0 !== e.output) {\n            if (!n(e.output))\n              throw new TypeError(\n                \"output option must be an array if specified\",\n              );\n            r = e.output;\n          } else r = new Array(t.length);\n          var o = s(t),\n            u = i(t);\n          if (o === u)\n            throw new RangeError(\n              \"minimum and maximum input values are equal. Cannot rescale a constant array\",\n            );\n          var a = e.min,\n            f = void 0 === a ? (e.autoMinMax ? o : 0) : a,\n            c = e.max,\n            h = void 0 === c ? (e.autoMinMax ? u : 1) : c;\n          if (f >= h)\n            throw new RangeError(\"min option must be smaller than max option\");\n          for (var l = (h - f) / (u - o), p = 0; p < t.length; p++)\n            r[p] = (t[p] - o) * l + f;\n          return r;\n        },\n        a = \" \".repeat(2),\n        f = \" \".repeat(4);\n      function c(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = r.maxRows,\n          o = void 0 === e ? 15 : e,\n          n = r.maxColumns,\n          i = void 0 === n ? 10 : n,\n          s = r.maxNumSize,\n          u = void 0 === s ? 8 : s;\n        return \"\"\n          .concat(t.constructor.name, \" {\\n\")\n          .concat(a, \"[\\n\")\n          .concat(f)\n          .concat(h(t, o, i, u), \"\\n\")\n          .concat(a, \"]\\n\")\n          .concat(a, \"rows: \")\n          .concat(t.rows, \"\\n\")\n          .concat(a, \"columns: \")\n          .concat(t.columns, \"\\n}\");\n      }\n      function h(t, r, e, o) {\n        for (\n          var n = t.rows,\n            i = t.columns,\n            s = Math.min(n, r),\n            u = Math.min(i, e),\n            a = [],\n            c = 0;\n          c < s;\n          c++\n        ) {\n          for (var h = [], p = 0; p < u; p++) h.push(l(t.get(c, p), o));\n          a.push(\"\".concat(h.join(\" \")));\n        }\n        return (\n          u !== i &&\n            (a[a.length - 1] += \" ... \".concat(i - e, \" more columns\")),\n          s !== n && a.push(\"... \".concat(n - r, \" more rows\")),\n          a.join(\"\\n\".concat(f))\n        );\n      }\n      function l(t, r) {\n        var e = String(t);\n        if (e.length <= r) return e.padEnd(r, \" \");\n        var o = t.toPrecision(r - 2);\n        if (o.length <= r) return o;\n        var n = t.toExponential(r - 2),\n          i = n.indexOf(\"e\"),\n          s = n.slice(i);\n        return n.slice(0, r - s.length) + s;\n      }\n      function p(t) {\n        return (p =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function v(t, r, e) {\n        var o = e ? t.rows : t.rows - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Row index out of range\");\n      }\n      function y(t, r, e) {\n        var o = e ? t.columns : t.columns - 1;\n        if (r < 0 || r > o) throw new RangeError(\"Column index out of range\");\n      }\n      function m(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.columns))\n          throw new RangeError(\n            \"vector size must be the same as the number of columns\",\n          );\n        return r;\n      }\n      function g(t, r) {\n        if ((r.to1DArray && (r = r.to1DArray()), r.length !== t.rows))\n          throw new RangeError(\n            \"vector size must be the same as the number of rows\",\n          );\n        return r;\n      }\n      function w(t, r, e) {\n        return { row: d(t, r), column: b(t, e) };\n      }\n      function d(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for row indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.rows;\n          })\n        )\n          throw new RangeError(\"row indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function b(t, r) {\n        if (\"object\" !== p(r))\n          throw new TypeError(\"unexpected type for column indices\");\n        if (\n          r.some(function (r) {\n            return r < 0 || r >= t.columns;\n          })\n        )\n          throw new RangeError(\"column indices are out of range\");\n        return Array.isArray(r) || (r = Array.from(r)), r;\n      }\n      function M(t, r, e, o, n) {\n        if (5 !== arguments.length)\n          throw new RangeError(\"expected 4 arguments\");\n        if (\n          (S(\"startRow\", r),\n          S(\"endRow\", e),\n          S(\"startColumn\", o),\n          S(\"endColumn\", n),\n          r > e ||\n            o > n ||\n            r < 0 ||\n            r >= t.rows ||\n            e < 0 ||\n            e >= t.rows ||\n            o < 0 ||\n            o >= t.columns ||\n            n < 0 ||\n            n >= t.columns)\n        )\n          throw new RangeError(\"Submatrix indices are out of range\");\n      }\n      function x(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : 0,\n            e = [],\n            o = 0;\n          o < t;\n          o++\n        )\n          e.push(r);\n        return e;\n      }\n      function S(t, r) {\n        if (\"number\" != typeof r)\n          throw new TypeError(\"\".concat(t, \" must be a number\"));\n      }\n      function k(t) {\n        if (t.isEmpty())\n          throw new Error(\"Empty matrix has no elements to index\");\n      }\n      function E(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < o; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < n; c++)\n            (u += f = t.get(s, c) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / n) / (n - 1))\n            : i.push((a - (u * u) / n) / n);\n        }\n        return i;\n      }\n      function O(t, r, e) {\n        for (var o = t.rows, n = t.columns, i = [], s = 0; s < n; s++) {\n          for (var u = 0, a = 0, f = 0, c = 0; c < o; c++)\n            (u += f = t.get(c, s) - e[s]), (a += f * f);\n          r\n            ? i.push((a - (u * u) / o) / (o - 1))\n            : i.push((a - (u * u) / o) / o);\n        }\n        return i;\n      }\n      function R(t, r, e) {\n        for (\n          var o = t.rows, n = t.columns, i = o * n, s = 0, u = 0, a = 0, f = 0;\n          f < o;\n          f++\n        )\n          for (var c = 0; c < n; c++) (s += a = t.get(f, c) - e), (u += a * a);\n        return r ? (u - (s * s) / i) / (i - 1) : (u - (s * s) / i) / i;\n      }\n      function j(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[e]);\n      }\n      function _(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r[o]);\n      }\n      function P(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) - r);\n      }\n      function T(t) {\n        for (var r = [], e = 0; e < t.rows; e++) {\n          for (var o = 0, n = 0; n < t.columns; n++)\n            o += Math.pow(t.get(e, n), 2) / (t.columns - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function A(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[e]);\n      }\n      function I(t) {\n        for (var r = [], e = 0; e < t.columns; e++) {\n          for (var o = 0, n = 0; n < t.rows; n++)\n            o += Math.pow(t.get(n, e), 2) / (t.rows - 1);\n          r.push(Math.sqrt(o));\n        }\n        return r;\n      }\n      function N(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r[o]);\n      }\n      function C(t) {\n        for (var r = t.size - 1, e = 0, o = 0; o < t.columns; o++)\n          for (var n = 0; n < t.rows; n++) e += Math.pow(t.get(n, o), 2) / r;\n        return Math.sqrt(e);\n      }\n      function D(t, r) {\n        for (var e = 0; e < t.rows; e++)\n          for (var o = 0; o < t.columns; o++) t.set(e, o, t.get(e, o) / r);\n      }\n      function V(t, r) {\n        return (V =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function q(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = B(t);\n          if (r) {\n            var n = B(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return F(this, e);\n        };\n      }\n      function F(t, r) {\n        return !r || (\"object\" !== z(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function B(t) {\n        return (B = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      function z(t) {\n        return (z =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function L(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function U(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function W(t, r, e) {\n        return r && U(t.prototype, r), e && U(t, e), t;\n      }\n      var Q = (function () {\n        function t() {\n          L(this, t);\n        }\n        return (\n          W(\n            t,\n            [\n              {\n                key: \"size\",\n                get: function () {\n                  return this.rows * this.columns;\n                },\n              },\n              {\n                key: \"apply\",\n                value: function (t) {\n                  if (\"function\" != typeof t)\n                    throw new TypeError(\"callback must be a function\");\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) t.call(this, r, e);\n                  return this;\n                },\n              },\n              {\n                key: \"to1DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      t.push(this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"to2DArray\",\n                value: function () {\n                  for (var t = [], r = 0; r < this.rows; r++) {\n                    t.push([]);\n                    for (var e = 0; e < this.columns; e++)\n                      t[r].push(this.get(r, e));\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"toJSON\",\n                value: function () {\n                  return this.to2DArray();\n                },\n              },\n              {\n                key: \"isRowVector\",\n                value: function () {\n                  return 1 === this.rows;\n                },\n              },\n              {\n                key: \"isColumnVector\",\n                value: function () {\n                  return 1 === this.columns;\n                },\n              },\n              {\n                key: \"isVector\",\n                value: function () {\n                  return 1 === this.rows || 1 === this.columns;\n                },\n              },\n              {\n                key: \"isSquare\",\n                value: function () {\n                  return this.rows === this.columns;\n                },\n              },\n              {\n                key: \"isEmpty\",\n                value: function () {\n                  return 0 === this.rows || 0 === this.columns;\n                },\n              },\n              {\n                key: \"isSymmetric\",\n                value: function () {\n                  if (this.isSquare()) {\n                    for (var t = 0; t < this.rows; t++)\n                      for (var r = 0; r <= t; r++)\n                        if (this.get(t, r) !== this.get(r, t)) return !1;\n                    return !0;\n                  }\n                  return !1;\n                },\n              },\n              {\n                key: \"isEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"isReducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = 0, r = 0, e = -1, o = !0, n = !1;\n                    t < this.rows && o;\n\n                  ) {\n                    for (r = 0, n = !1; r < this.columns && !1 === n; )\n                      0 === this.get(t, r)\n                        ? r++\n                        : 1 === this.get(t, r) && r > e\n                        ? ((n = !0), (e = r))\n                        : ((o = !1), (n = !0));\n                    for (var i = r + 1; i < this.rows; i++)\n                      0 !== this.get(t, i) && (o = !1);\n                    t++;\n                  }\n                  return o;\n                },\n              },\n              {\n                key: \"echelonForm\",\n                value: function () {\n                  for (\n                    var t = this.clone(), r = 0, e = 0;\n                    r < t.rows && e < t.columns;\n\n                  ) {\n                    for (var o = r, n = r; n < t.rows; n++)\n                      t.get(n, e) > t.get(o, e) && (o = n);\n                    if (0 === t.get(o, e)) e++;\n                    else {\n                      t.swapRows(r, o);\n                      for (var i = t.get(r, e), s = e; s < t.columns; s++)\n                        t.set(r, s, t.get(r, s) / i);\n                      for (var u = r + 1; u < t.rows; u++) {\n                        var a = t.get(u, e) / t.get(r, e);\n                        t.set(u, e, 0);\n                        for (var f = e + 1; f < t.columns; f++)\n                          t.set(u, f, t.get(u, f) - t.get(r, f) * a);\n                      }\n                      r++, e++;\n                    }\n                  }\n                  return t;\n                },\n              },\n              {\n                key: \"reducedEchelonForm\",\n                value: function () {\n                  for (\n                    var t = this.echelonForm(),\n                      r = t.columns,\n                      e = t.rows,\n                      o = e - 1;\n                    o >= 0;\n\n                  )\n                    if (0 === t.maxRow(o)) o--;\n                    else {\n                      for (var n = 0, i = !1; n < e && !1 === i; )\n                        1 === t.get(o, n) ? (i = !0) : n++;\n                      for (var s = 0; s < o; s++)\n                        for (var u = t.get(s, n), a = n; a < r; a++) {\n                          var f = t.get(s, a) - u * t.get(o, a);\n                          t.set(s, a, f);\n                        }\n                      o--;\n                    }\n                  return t;\n                },\n              },\n              {\n                key: \"set\",\n                value: function () {\n                  throw new Error(\"set method is unimplemented\");\n                },\n              },\n              {\n                key: \"get\",\n                value: function () {\n                  throw new Error(\"get method is unimplemented\");\n                },\n              },\n              {\n                key: \"repeat\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== z(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.rows,\n                    e = void 0 === r ? 1 : r,\n                    o = t.columns,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isInteger(e) || e <= 0)\n                    throw new TypeError(\"rows must be a positive integer\");\n                  if (!Number.isInteger(n) || n <= 0)\n                    throw new TypeError(\"columns must be a positive integer\");\n                  for (\n                    var i = new K(this.rows * e, this.columns * n), s = 0;\n                    s < e;\n                    s++\n                  )\n                    for (var u = 0; u < n; u++)\n                      i.setSubMatrix(this, this.rows * s, this.columns * u);\n                  return i;\n                },\n              },\n              {\n                key: \"fill\",\n                value: function (t) {\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++) this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"neg\",\n                value: function () {\n                  return this.mulS(-1);\n                },\n              },\n              {\n                key: \"getRow\",\n                value: function (t) {\n                  v(this, t);\n                  for (var r = [], e = 0; e < this.columns; e++)\n                    r.push(this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"getRowVector\",\n                value: function (t) {\n                  return K.rowVector(this.getRow(t));\n                },\n              },\n              {\n                key: \"setRow\",\n                value: function (t, r) {\n                  v(this, t), (r = m(this, r));\n                  for (var e = 0; e < this.columns; e++) this.set(t, e, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapRows\",\n                value: function (t, r) {\n                  v(this, t), v(this, r);\n                  for (var e = 0; e < this.columns; e++) {\n                    var o = this.get(t, e);\n                    this.set(t, e, this.get(r, e)), this.set(r, e, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"getColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = [], e = 0; e < this.rows; e++)\n                    r.push(this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"getColumnVector\",\n                value: function (t) {\n                  return K.columnVector(this.getColumn(t));\n                },\n              },\n              {\n                key: \"setColumn\",\n                value: function (t, r) {\n                  y(this, t), (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) this.set(e, t, r[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"swapColumns\",\n                value: function (t, r) {\n                  y(this, t), y(this, r);\n                  for (var e = 0; e < this.rows; e++) {\n                    var o = this.get(e, t);\n                    this.set(e, t, this.get(e, r)), this.set(e, r, o);\n                  }\n                  return this;\n                },\n              },\n              {\n                key: \"addRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"subRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"divRowVector\",\n                value: function (t) {\n                  t = m(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[e]);\n                  return this;\n                },\n              },\n              {\n                key: \"addColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) + t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"subColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) - t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) * t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"divColumnVector\",\n                value: function (t) {\n                  t = g(this, t);\n                  for (var r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.set(r, e, this.get(r, e) / t[r]);\n                  return this;\n                },\n              },\n              {\n                key: \"mulRow\",\n                value: function (t, r) {\n                  v(this, t);\n                  for (var e = 0; e < this.columns; e++)\n                    this.set(t, e, this.get(t, e) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"mulColumn\",\n                value: function (t, r) {\n                  y(this, t);\n                  for (var e = 0; e < this.rows; e++)\n                    this.set(e, t, this.get(e, t) * r);\n                  return this;\n                },\n              },\n              {\n                key: \"max\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) > t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"maxIndex\",\n                value: function () {\n                  k(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) > t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"min\",\n                value: function () {\n                  if (this.isEmpty()) return NaN;\n                  for (var t = this.get(0, 0), r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      this.get(r, e) < t && (t = this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"minIndex\",\n                value: function () {\n                  k(this);\n                  for (\n                    var t = this.get(0, 0), r = [0, 0], e = 0;\n                    e < this.rows;\n                    e++\n                  )\n                    for (var o = 0; o < this.columns; o++)\n                      this.get(e, o) < t &&\n                        ((t = this.get(e, o)), (r[0] = e), (r[1] = o));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) > r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"maxRowIndex\",\n                value: function (t) {\n                  v(this, t), k(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) > r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minRow\",\n                value: function (t) {\n                  if ((v(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(t, 0), e = 1; e < this.columns; e++)\n                    this.get(t, e) < r && (r = this.get(t, e));\n                  return r;\n                },\n              },\n              {\n                key: \"minRowIndex\",\n                value: function (t) {\n                  v(this, t), k(this);\n                  for (\n                    var r = this.get(t, 0), e = [t, 0], o = 1;\n                    o < this.columns;\n                    o++\n                  )\n                    this.get(t, o) < r && ((r = this.get(t, o)), (e[1] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"maxColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) > r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"maxColumnIndex\",\n                value: function (t) {\n                  y(this, t), k(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) > r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"minColumn\",\n                value: function (t) {\n                  if ((y(this, t), this.isEmpty())) return NaN;\n                  for (var r = this.get(0, t), e = 1; e < this.rows; e++)\n                    this.get(e, t) < r && (r = this.get(e, t));\n                  return r;\n                },\n              },\n              {\n                key: \"minColumnIndex\",\n                value: function (t) {\n                  y(this, t), k(this);\n                  for (\n                    var r = this.get(0, t), e = [0, t], o = 1;\n                    o < this.rows;\n                    o++\n                  )\n                    this.get(o, t) < r && ((r = this.get(o, t)), (e[0] = o));\n                  return e;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = [], e = 0;\n                    e < t;\n                    e++\n                  )\n                    r.push(this.get(e, e));\n                  return r;\n                },\n              },\n              {\n                key: \"norm\",\n                value: function () {\n                  var t =\n                      arguments.length > 0 && void 0 !== arguments[0]\n                        ? arguments[0]\n                        : \"frobenius\",\n                    r = 0;\n                  if (\"max\" === t) return this.max();\n                  if (\"frobenius\" === t) {\n                    for (var e = 0; e < this.rows; e++)\n                      for (var o = 0; o < this.columns; o++)\n                        r += this.get(e, o) * this.get(e, o);\n                    return Math.sqrt(r);\n                  }\n                  throw new RangeError(\"unknown norm type: \".concat(t));\n                },\n              },\n              {\n                key: \"cumulativeSum\",\n                value: function () {\n                  for (var t = 0, r = 0; r < this.rows; r++)\n                    for (var e = 0; e < this.columns; e++)\n                      (t += this.get(r, e)), this.set(r, e, t);\n                  return this;\n                },\n              },\n              {\n                key: \"dot\",\n                value: function (r) {\n                  t.isMatrix(r) && (r = r.to1DArray());\n                  var e = this.to1DArray();\n                  if (e.length !== r.length)\n                    throw new RangeError(\"vectors do not have the same size\");\n                  for (var o = 0, n = 0; n < e.length; n++) o += e[n] * r[n];\n                  return o;\n                },\n              },\n              {\n                key: \"mmul\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.columns,\n                      n = new K(r, o),\n                      i = new Float64Array(e),\n                      s = 0;\n                    s < o;\n                    s++\n                  ) {\n                    for (var u = 0; u < e; u++) i[u] = t.get(u, s);\n                    for (var a = 0; a < r; a++) {\n                      for (var f = 0, c = 0; c < e; c++)\n                        f += this.get(a, c) * i[c];\n                      n.set(a, s, f);\n                    }\n                  }\n                  return n;\n                },\n              },\n              {\n                key: \"strassen2x2\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(2, 2),\n                    e = this.get(0, 0),\n                    o = t.get(0, 0),\n                    n = this.get(0, 1),\n                    i = t.get(0, 1),\n                    s = this.get(1, 0),\n                    u = t.get(1, 0),\n                    a = this.get(1, 1),\n                    f = t.get(1, 1),\n                    c = (e + a) * (o + f),\n                    h = (s + a) * o,\n                    l = e * (i - f),\n                    p = a * (u - o),\n                    v = (e + n) * f,\n                    y = c + p - v + (n - a) * (u + f),\n                    m = l + v,\n                    g = h + p,\n                    w = c - h + l + (s - e) * (o + i);\n                  return (\n                    r.set(0, 0, y),\n                    r.set(0, 1, m),\n                    r.set(1, 0, g),\n                    r.set(1, 1, w),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"strassen3x3\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  var r = new K(3, 3),\n                    e = this.get(0, 0),\n                    o = this.get(0, 1),\n                    n = this.get(0, 2),\n                    i = this.get(1, 0),\n                    s = this.get(1, 1),\n                    u = this.get(1, 2),\n                    a = this.get(2, 0),\n                    f = this.get(2, 1),\n                    c = this.get(2, 2),\n                    h = t.get(0, 0),\n                    l = t.get(0, 1),\n                    p = t.get(0, 2),\n                    v = t.get(1, 0),\n                    y = t.get(1, 1),\n                    m = t.get(1, 2),\n                    g = t.get(2, 0),\n                    w = t.get(2, 1),\n                    d = t.get(2, 2),\n                    b = (e - i) * (-l + y),\n                    M = (-e + i + s) * (h - l + y),\n                    x = (i + s) * (-h + l),\n                    S = e * h,\n                    k = (-e + a + f) * (h - p + m),\n                    E = (-e + a) * (p - m),\n                    O = (a + f) * (-h + p),\n                    R = (-n + f + c) * (y + g - w),\n                    j = (n - c) * (y - w),\n                    _ = n * g,\n                    P = (f + c) * (-g + w),\n                    T = (-n + s + u) * (m + g - d),\n                    A = (n - u) * (m - d),\n                    I = (s + u) * (-g + d),\n                    N = S + _ + o * v,\n                    C = (e + o + n - i - s - f - c) * y + M + x + S + R + _ + P,\n                    D = S + k + O + (e + o + n - s - u - a - f) * m + _ + T + I,\n                    V =\n                      b + s * (-h + l + v - y - m - g + d) + M + S + _ + T + A,\n                    q = b + M + x + S + u * w,\n                    F = _ + T + A + I + i * p,\n                    B =\n                      S + k + E + f * (-h + p + v - y - m - g + w) + R + j + _,\n                    z = R + j + _ + P + a * l,\n                    L = S + k + E + O + c * d;\n                  return (\n                    r.set(0, 0, N),\n                    r.set(0, 1, C),\n                    r.set(0, 2, D),\n                    r.set(1, 0, V),\n                    r.set(1, 1, q),\n                    r.set(1, 2, F),\n                    r.set(2, 0, B),\n                    r.set(2, 1, z),\n                    r.set(2, 2, L),\n                    r\n                  );\n                },\n              },\n              {\n                key: \"mmulStrassen\",\n                value: function (r) {\n                  r = K.checkMatrix(r);\n                  var e = this.clone(),\n                    o = e.rows,\n                    n = e.columns,\n                    i = r.rows,\n                    s = r.columns;\n                  function u(r, e, o) {\n                    var n = r.rows,\n                      i = r.columns;\n                    if (n === e && i === o) return r;\n                    var s = t.zeros(e, o);\n                    return (s = s.setSubMatrix(r, 0, 0));\n                  }\n                  n !== i &&\n                    console.warn(\n                      \"Multiplying \"\n                        .concat(o, \" x \")\n                        .concat(n, \" and \")\n                        .concat(i, \" x \")\n                        .concat(s, \" matrix: dimensions do not match.\"),\n                    );\n                  var a = Math.max(o, i),\n                    f = Math.max(n, s);\n                  return (function r(e, o, n, i) {\n                    if (n <= 512 || i <= 512) return e.mmul(o);\n                    n % 2 == 1 && i % 2 == 1\n                      ? ((e = u(e, n + 1, i + 1)), (o = u(o, n + 1, i + 1)))\n                      : n % 2 == 1\n                      ? ((e = u(e, n + 1, i)), (o = u(o, n + 1, i)))\n                      : i % 2 == 1 &&\n                        ((e = u(e, n, i + 1)), (o = u(o, n, i + 1)));\n                    var s = parseInt(e.rows / 2, 10),\n                      a = parseInt(e.columns / 2, 10),\n                      f = e.subMatrix(0, s - 1, 0, a - 1),\n                      c = o.subMatrix(0, s - 1, 0, a - 1),\n                      h = e.subMatrix(0, s - 1, a, e.columns - 1),\n                      l = o.subMatrix(0, s - 1, a, o.columns - 1),\n                      p = e.subMatrix(s, e.rows - 1, 0, a - 1),\n                      v = o.subMatrix(s, o.rows - 1, 0, a - 1),\n                      y = e.subMatrix(s, e.rows - 1, a, e.columns - 1),\n                      m = o.subMatrix(s, o.rows - 1, a, o.columns - 1),\n                      g = r(t.add(f, y), t.add(c, m), s, a),\n                      w = r(t.add(p, y), c, s, a),\n                      d = r(f, t.sub(l, m), s, a),\n                      b = r(y, t.sub(v, c), s, a),\n                      M = r(t.add(f, h), m, s, a),\n                      x = r(t.sub(p, f), t.add(c, l), s, a),\n                      S = r(t.sub(h, y), t.add(v, m), s, a),\n                      k = t.add(g, b);\n                    k.sub(M), k.add(S);\n                    var E = t.add(d, M),\n                      O = t.add(w, b),\n                      R = t.sub(g, w);\n                    R.add(d), R.add(x);\n                    var j = t.zeros(2 * k.rows, 2 * k.columns);\n                    return (j = (j = (j = (j = j.setSubMatrix(\n                      k,\n                      0,\n                      0,\n                    )).setSubMatrix(E, k.rows, 0)).setSubMatrix(\n                      O,\n                      0,\n                      k.columns,\n                    )).setSubMatrix(R, k.rows, k.columns)).subMatrix(\n                      0,\n                      n - 1,\n                      0,\n                      i - 1,\n                    );\n                  })((e = u(e, a, f)), (r = u(r, a, f)), a, f);\n                },\n              },\n              {\n                key: \"scaleRows\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== z(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.rows;\n                    s++\n                  ) {\n                    var a = this.getRow(s);\n                    a.length > 0 && u(a, { min: e, max: n, output: a }),\n                      i.setRow(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"scaleColumns\",\n                value: function () {\n                  var t =\n                    arguments.length > 0 && void 0 !== arguments[0]\n                      ? arguments[0]\n                      : {};\n                  if (\"object\" !== z(t))\n                    throw new TypeError(\"options must be an object\");\n                  var r = t.min,\n                    e = void 0 === r ? 0 : r,\n                    o = t.max,\n                    n = void 0 === o ? 1 : o;\n                  if (!Number.isFinite(e))\n                    throw new TypeError(\"min must be a number\");\n                  if (!Number.isFinite(n))\n                    throw new TypeError(\"max must be a number\");\n                  if (e >= n)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (\n                    var i = new K(this.rows, this.columns), s = 0;\n                    s < this.columns;\n                    s++\n                  ) {\n                    var a = this.getColumn(s);\n                    a.length && u(a, { min: e, max: n, output: a }),\n                      i.setColumn(s, a);\n                  }\n                  return i;\n                },\n              },\n              {\n                key: \"flipRows\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.columns / 2), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(r, e),\n                        n = this.get(r, this.columns - 1 - e);\n                      this.set(r, e, n), this.set(r, this.columns - 1 - e, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"flipColumns\",\n                value: function () {\n                  for (\n                    var t = Math.ceil(this.rows / 2), r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    for (var e = 0; e < t; e++) {\n                      var o = this.get(e, r),\n                        n = this.get(this.rows - 1 - e, r);\n                      this.set(e, r, n), this.set(this.rows - 1 - e, r, o);\n                    }\n                  return this;\n                },\n              },\n              {\n                key: \"kroneckerProduct\",\n                value: function (t) {\n                  t = K.checkMatrix(t);\n                  for (\n                    var r = this.rows,\n                      e = this.columns,\n                      o = t.rows,\n                      n = t.columns,\n                      i = new K(r * o, e * n),\n                      s = 0;\n                    s < r;\n                    s++\n                  )\n                    for (var u = 0; u < e; u++)\n                      for (var a = 0; a < o; a++)\n                        for (var f = 0; f < n; f++)\n                          i.set(\n                            o * s + a,\n                            n * u + f,\n                            this.get(s, u) * t.get(a, f),\n                          );\n                  return i;\n                },\n              },\n              {\n                key: \"kroneckerSum\",\n                value: function (t) {\n                  if (\n                    ((t = K.checkMatrix(t)), !this.isSquare() || !t.isSquare())\n                  )\n                    throw new Error(\"Kronecker Sum needs two Square Matrices\");\n                  var r = this.rows,\n                    e = t.rows,\n                    o = this.kroneckerProduct(K.eye(e, e)),\n                    n = K.eye(r, r).kroneckerProduct(t);\n                  return o.add(n);\n                },\n              },\n              {\n                key: \"transpose\",\n                value: function () {\n                  for (\n                    var t = new K(this.columns, this.rows), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(e, r, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sortRows\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    this.setRow(r, this.getRow(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"sortColumns\",\n                value: function () {\n                  for (\n                    var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                          ? arguments[0]\n                          : J,\n                      r = 0;\n                    r < this.columns;\n                    r++\n                  )\n                    this.setColumn(r, this.getColumn(r).sort(t));\n                  return this;\n                },\n              },\n              {\n                key: \"subMatrix\",\n                value: function (t, r, e, o) {\n                  M(this, t, r, e, o);\n                  for (var n = new K(r - t + 1, o - e + 1), i = t; i <= r; i++)\n                    for (var s = e; s <= o; s++)\n                      n.set(i - t, s - e, this.get(i, s));\n                  return n;\n                },\n              },\n              {\n                key: \"subMatrixRow\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.columns - 1),\n                    r > e ||\n                      r < 0 ||\n                      r >= this.columns ||\n                      e < 0 ||\n                      e >= this.columns)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(t.length, e - r + 1), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.rows)\n                        throw new RangeError(\n                          \"Row index out of range: \".concat(t[n]),\n                        );\n                      o.set(n, i - r, this.get(t[n], i));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"subMatrixColumn\",\n                value: function (t, r, e) {\n                  if (\n                    (void 0 === r && (r = 0),\n                    void 0 === e && (e = this.rows - 1),\n                    r > e || r < 0 || r >= this.rows || e < 0 || e >= this.rows)\n                  )\n                    throw new RangeError(\"Argument out of range\");\n                  for (\n                    var o = new K(e - r + 1, t.length), n = 0;\n                    n < t.length;\n                    n++\n                  )\n                    for (var i = r; i <= e; i++) {\n                      if (t[n] < 0 || t[n] >= this.columns)\n                        throw new RangeError(\n                          \"Column index out of range: \".concat(t[n]),\n                        );\n                      o.set(i - r, n, this.get(i, t[n]));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"setSubMatrix\",\n                value: function (t, r, e) {\n                  if ((t = K.checkMatrix(t)).isEmpty()) return this;\n                  M(this, r, r + t.rows - 1, e, e + t.columns - 1);\n                  for (var o = 0; o < t.rows; o++)\n                    for (var n = 0; n < t.columns; n++)\n                      this.set(r + o, e + n, t.get(o, n));\n                  return this;\n                },\n              },\n              {\n                key: \"selection\",\n                value: function (t, r) {\n                  for (\n                    var e = w(this, t, r), o = new K(t.length, r.length), n = 0;\n                    n < e.row.length;\n                    n++\n                  )\n                    for (var i = e.row[n], s = 0; s < e.column.length; s++) {\n                      var u = e.column[s];\n                      o.set(n, s, this.get(i, u));\n                    }\n                  return o;\n                },\n              },\n              {\n                key: \"trace\",\n                value: function () {\n                  for (\n                    var t = Math.min(this.rows, this.columns), r = 0, e = 0;\n                    e < t;\n                    e++\n                  )\n                    r += this.get(e, e);\n                  return r;\n                },\n              },\n              {\n                key: \"clone\",\n                value: function () {\n                  for (\n                    var t = new K(this.rows, this.columns), r = 0;\n                    r < this.rows;\n                    r++\n                  )\n                    for (var e = 0; e < this.columns; e++)\n                      t.set(r, e, this.get(r, e));\n                  return t;\n                },\n              },\n              {\n                key: \"sum\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] += t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 0, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r += t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"product\",\n                value: function (t) {\n                  switch (t) {\n                    case \"row\":\n                      return (function (t) {\n                        for (var r = x(t.rows, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[e] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case \"column\":\n                      return (function (t) {\n                        for (var r = x(t.columns, 1), e = 0; e < t.rows; ++e)\n                          for (var o = 0; o < t.columns; ++o)\n                            r[o] *= t.get(e, o);\n                        return r;\n                      })(this);\n                    case void 0:\n                      return (function (t) {\n                        for (var r = 1, e = 0; e < t.rows; e++)\n                          for (var o = 0; o < t.columns; o++) r *= t.get(e, o);\n                        return r;\n                      })(this);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"mean\",\n                value: function (t) {\n                  var r = this.sum(t);\n                  switch (t) {\n                    case \"row\":\n                      for (var e = 0; e < this.rows; e++) r[e] /= this.columns;\n                      return r;\n                    case \"column\":\n                      for (var o = 0; o < this.columns; o++) r[o] /= this.rows;\n                      return r;\n                    case void 0:\n                      return r / this.size;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"variance\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === z(t) && ((r = t), (t = void 0)),\n                    \"object\" !== z(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.unbiased,\n                    n = void 0 === o || o,\n                    i = e.mean,\n                    s = void 0 === i ? this.mean(t) : i;\n                  if (\"boolean\" != typeof n)\n                    throw new TypeError(\"unbiased must be a boolean\");\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return E(this, n, s);\n                    case \"column\":\n                      if (!Array.isArray(s))\n                        throw new TypeError(\"mean must be an array\");\n                      return O(this, n, s);\n                    case void 0:\n                      if (\"number\" != typeof s)\n                        throw new TypeError(\"mean must be a number\");\n                      return R(this, n, s);\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"standardDeviation\",\n                value: function (t, r) {\n                  \"object\" === z(t) && ((r = t), (t = void 0));\n                  var e = this.variance(t, r);\n                  if (void 0 === t) return Math.sqrt(e);\n                  for (var o = 0; o < e.length; o++) e[o] = Math.sqrt(e[o]);\n                  return e;\n                },\n              },\n              {\n                key: \"center\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === z(t) && ((r = t), (t = void 0)),\n                    \"object\" !== z(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r,\n                    o = e.center,\n                    n = void 0 === o ? this.mean(t) : o;\n                  switch (t) {\n                    case \"row\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return j(this, n), this;\n                    case \"column\":\n                      if (!Array.isArray(n))\n                        throw new TypeError(\"center must be an array\");\n                      return _(this, n), this;\n                    case void 0:\n                      if (\"number\" != typeof n)\n                        throw new TypeError(\"center must be a number\");\n                      return P(this, n), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"scale\",\n                value: function (t) {\n                  var r =\n                    arguments.length > 1 && void 0 !== arguments[1]\n                      ? arguments[1]\n                      : {};\n                  if (\n                    (\"object\" === z(t) && ((r = t), (t = void 0)),\n                    \"object\" !== z(r))\n                  )\n                    throw new TypeError(\"options must be an object\");\n                  var e = r.scale;\n                  switch (t) {\n                    case \"row\":\n                      if (void 0 === e) e = T(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return A(this, e), this;\n                    case \"column\":\n                      if (void 0 === e) e = I(this);\n                      else if (!Array.isArray(e))\n                        throw new TypeError(\"scale must be an array\");\n                      return N(this, e), this;\n                    case void 0:\n                      if (void 0 === e) e = C(this);\n                      else if (\"number\" != typeof e)\n                        throw new TypeError(\"scale must be a number\");\n                      return D(this, e), this;\n                    default:\n                      throw new Error(\"invalid option: \".concat(t));\n                  }\n                },\n              },\n              {\n                key: \"toString\",\n                value: function (t) {\n                  return c(this, t);\n                },\n              },\n            ],\n            [\n              {\n                key: \"from1DArray\",\n                value: function (t, r, e) {\n                  if (t * r !== e.length)\n                    throw new RangeError(\n                      \"data length does not match given dimensions\",\n                    );\n                  for (var o = new K(t, r), n = 0; n < t; n++)\n                    for (var i = 0; i < r; i++) o.set(n, i, e[n * r + i]);\n                  return o;\n                },\n              },\n              {\n                key: \"rowVector\",\n                value: function (t) {\n                  for (var r = new K(1, t.length), e = 0; e < t.length; e++)\n                    r.set(0, e, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"columnVector\",\n                value: function (t) {\n                  for (var r = new K(t.length, 1), e = 0; e < t.length; e++)\n                    r.set(e, 0, t[e]);\n                  return r;\n                },\n              },\n              {\n                key: \"zeros\",\n                value: function (t, r) {\n                  return new K(t, r);\n                },\n              },\n              {\n                key: \"ones\",\n                value: function (t, r) {\n                  return new K(t, r).fill(1);\n                },\n              },\n              {\n                key: \"rand\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== z(e))\n                    throw new TypeError(\"options must be an object\");\n                  for (\n                    var o = e.random,\n                      n = void 0 === o ? Math.random : o,\n                      i = new K(t, r),\n                      s = 0;\n                    s < t;\n                    s++\n                  )\n                    for (var u = 0; u < r; u++) i.set(s, u, n());\n                  return i;\n                },\n              },\n              {\n                key: \"randInt\",\n                value: function (t, r) {\n                  var e =\n                    arguments.length > 2 && void 0 !== arguments[2]\n                      ? arguments[2]\n                      : {};\n                  if (\"object\" !== z(e))\n                    throw new TypeError(\"options must be an object\");\n                  var o = e.min,\n                    n = void 0 === o ? 0 : o,\n                    i = e.max,\n                    s = void 0 === i ? 1e3 : i,\n                    u = e.random,\n                    a = void 0 === u ? Math.random : u;\n                  if (!Number.isInteger(n))\n                    throw new TypeError(\"min must be an integer\");\n                  if (!Number.isInteger(s))\n                    throw new TypeError(\"max must be an integer\");\n                  if (n >= s)\n                    throw new RangeError(\"min must be smaller than max\");\n                  for (var f = s - n, c = new K(t, r), h = 0; h < t; h++)\n                    for (var l = 0; l < r; l++) {\n                      var p = n + Math.round(a() * f);\n                      c.set(h, l, p);\n                    }\n                  return c;\n                },\n              },\n              {\n                key: \"eye\",\n                value: function (t, r, e) {\n                  void 0 === r && (r = t), void 0 === e && (e = 1);\n                  for (\n                    var o = Math.min(t, r), n = this.zeros(t, r), i = 0;\n                    i < o;\n                    i++\n                  )\n                    n.set(i, i, e);\n                  return n;\n                },\n              },\n              {\n                key: \"diag\",\n                value: function (t, r, e) {\n                  var o = t.length;\n                  void 0 === r && (r = o), void 0 === e && (e = r);\n                  for (\n                    var n = Math.min(o, r, e), i = this.zeros(r, e), s = 0;\n                    s < n;\n                    s++\n                  )\n                    i.set(s, s, t[s]);\n                  return i;\n                },\n              },\n              {\n                key: \"min\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new K(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.min(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"max\",\n                value: function (t, r) {\n                  (t = this.checkMatrix(t)), (r = this.checkMatrix(r));\n                  for (\n                    var e = t.rows, o = t.columns, n = new this(e, o), i = 0;\n                    i < e;\n                    i++\n                  )\n                    for (var s = 0; s < o; s++)\n                      n.set(i, s, Math.max(t.get(i, s), r.get(i, s)));\n                  return n;\n                },\n              },\n              {\n                key: \"checkMatrix\",\n                value: function (r) {\n                  return t.isMatrix(r) ? r : new K(r);\n                },\n              },\n              {\n                key: \"isMatrix\",\n                value: function (t) {\n                  return null != t && \"Matrix\" === t.klass;\n                },\n              },\n            ],\n          ),\n          t\n        );\n      })();\n      function J(t, r) {\n        return t - r;\n      }\n      (Q.prototype.klass = \"Matrix\"),\n        \"undefined\" != typeof Symbol &&\n          (Q.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = function () {\n            return c(this);\n          }),\n        (Q.random = Q.rand),\n        (Q.randomInt = Q.randInt),\n        (Q.diagonal = Q.diag),\n        (Q.prototype.diagonal = Q.prototype.diag),\n        (Q.identity = Q.eye),\n        (Q.prototype.negate = Q.prototype.neg),\n        (Q.prototype.tensorProduct = Q.prototype.kroneckerProduct);\n      var H,\n        Y,\n        K = (function (t) {\n          !(function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Super expression must either be null or a function\",\n              );\n            (t.prototype = Object.create(r && r.prototype, {\n              constructor: { value: t, writable: !0, configurable: !0 },\n            })),\n              r && V(t, r);\n          })(e, t);\n          var r = q(e);\n          function e(t, o) {\n            var n;\n            if ((L(this, e), (n = r.call(this)), e.isMatrix(t)))\n              return F(n, t.clone());\n            if (Number.isInteger(t) && t >= 0) {\n              if (((n.data = []), !(Number.isInteger(o) && o >= 0)))\n                throw new TypeError(\"nColumns must be a positive integer\");\n              for (var i = 0; i < t; i++) n.data.push(new Float64Array(o));\n            } else {\n              if (!Array.isArray(t))\n                throw new TypeError(\n                  \"First argument must be a positive number or an array\",\n                );\n              var s = t;\n              if (\"number\" != typeof (o = (t = s.length) ? s[0].length : 0))\n                throw new TypeError(\n                  \"Data must be a 2D array with at least one element\",\n                );\n              n.data = [];\n              for (var u = 0; u < t; u++) {\n                if (s[u].length !== o)\n                  throw new RangeError(\"Inconsistent array dimensions\");\n                n.data.push(Float64Array.from(s[u]));\n              }\n            }\n            return (n.rows = t), (n.columns = o), n;\n          }\n          return (\n            W(e, [\n              {\n                key: \"set\",\n                value: function (t, r, e) {\n                  return (this.data[t][r] = e), this;\n                },\n              },\n              {\n                key: \"get\",\n                value: function (t, r) {\n                  return this.data[t][r];\n                },\n              },\n              {\n                key: \"removeRow\",\n                value: function (t) {\n                  return (\n                    v(this, t), this.data.splice(t, 1), (this.rows -= 1), this\n                  );\n                },\n              },\n              {\n                key: \"addRow\",\n                value: function (t, r) {\n                  return (\n                    void 0 === r && ((r = t), (t = this.rows)),\n                    v(this, t, !0),\n                    (r = Float64Array.from(m(this, r))),\n                    this.data.splice(t, 0, r),\n                    (this.rows += 1),\n                    this\n                  );\n                },\n              },\n              {\n                key: \"removeColumn\",\n                value: function (t) {\n                  y(this, t);\n                  for (var r = 0; r < this.rows; r++) {\n                    for (\n                      var e = new Float64Array(this.columns - 1), o = 0;\n                      o < t;\n                      o++\n                    )\n                      e[o] = this.data[r][o];\n                    for (var n = t + 1; n < this.columns; n++)\n                      e[n - 1] = this.data[r][n];\n                    this.data[r] = e;\n                  }\n                  return (this.columns -= 1), this;\n                },\n              },\n              {\n                key: \"addColumn\",\n                value: function (t, r) {\n                  void 0 === r && ((r = t), (t = this.columns)),\n                    y(this, t, !0),\n                    (r = g(this, r));\n                  for (var e = 0; e < this.rows; e++) {\n                    for (\n                      var o = new Float64Array(this.columns + 1), n = 0;\n                      n < t;\n                      n++\n                    )\n                      o[n] = this.data[e][n];\n                    for (o[n++] = r[e]; n < this.columns + 1; n++)\n                      o[n] = this.data[e][n - 1];\n                    this.data[e] = o;\n                  }\n                  return (this.columns += 1), this;\n                },\n              },\n            ]),\n            e\n          );\n        })(Q);\n      function X(t) {\n        return (X =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function G(t, r) {\n        return (G =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Z(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = tt(t);\n          if (r) {\n            var n = tt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return $(this, e);\n        };\n      }\n      function $(t, r) {\n        return !r || (\"object\" !== X(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function tt(t) {\n        return (tt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      (Y = K),\n        ((H = Q).prototype.add = function (t) {\n          return \"number\" == typeof t ? this.addS(t) : this.addM(t);\n        }),\n        (H.prototype.addS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t);\n          return this;\n        }),\n        (H.prototype.addM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) + t.get(r, e));\n          return this;\n        }),\n        (H.add = function (t, r) {\n          return new Y(t).add(r);\n        }),\n        (H.prototype.sub = function (t) {\n          return \"number\" == typeof t ? this.subS(t) : this.subM(t);\n        }),\n        (H.prototype.subS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t);\n          return this;\n        }),\n        (H.prototype.subM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) - t.get(r, e));\n          return this;\n        }),\n        (H.sub = function (t, r) {\n          return new Y(t).sub(r);\n        }),\n        (H.prototype.subtract = H.prototype.sub),\n        (H.prototype.subtractS = H.prototype.subS),\n        (H.prototype.subtractM = H.prototype.subM),\n        (H.subtract = H.sub),\n        (H.prototype.mul = function (t) {\n          return \"number\" == typeof t ? this.mulS(t) : this.mulM(t);\n        }),\n        (H.prototype.mulS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t);\n          return this;\n        }),\n        (H.prototype.mulM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) * t.get(r, e));\n          return this;\n        }),\n        (H.mul = function (t, r) {\n          return new Y(t).mul(r);\n        }),\n        (H.prototype.multiply = H.prototype.mul),\n        (H.prototype.multiplyS = H.prototype.mulS),\n        (H.prototype.multiplyM = H.prototype.mulM),\n        (H.multiply = H.mul),\n        (H.prototype.div = function (t) {\n          return \"number\" == typeof t ? this.divS(t) : this.divM(t);\n        }),\n        (H.prototype.divS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t);\n          return this;\n        }),\n        (H.prototype.divM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) / t.get(r, e));\n          return this;\n        }),\n        (H.div = function (t, r) {\n          return new Y(t).div(r);\n        }),\n        (H.prototype.divide = H.prototype.div),\n        (H.prototype.divideS = H.prototype.divS),\n        (H.prototype.divideM = H.prototype.divM),\n        (H.divide = H.div),\n        (H.prototype.mod = function (t) {\n          return \"number\" == typeof t ? this.modS(t) : this.modM(t);\n        }),\n        (H.prototype.modS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t);\n          return this;\n        }),\n        (H.prototype.modM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) % t.get(r, e));\n          return this;\n        }),\n        (H.mod = function (t, r) {\n          return new Y(t).mod(r);\n        }),\n        (H.prototype.modulus = H.prototype.mod),\n        (H.prototype.modulusS = H.prototype.modS),\n        (H.prototype.modulusM = H.prototype.modM),\n        (H.modulus = H.mod),\n        (H.prototype.and = function (t) {\n          return \"number\" == typeof t ? this.andS(t) : this.andM(t);\n        }),\n        (H.prototype.andS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t);\n          return this;\n        }),\n        (H.prototype.andM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) & t.get(r, e));\n          return this;\n        }),\n        (H.and = function (t, r) {\n          return new Y(t).and(r);\n        }),\n        (H.prototype.or = function (t) {\n          return \"number\" == typeof t ? this.orS(t) : this.orM(t);\n        }),\n        (H.prototype.orS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t);\n          return this;\n        }),\n        (H.prototype.orM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) | t.get(r, e));\n          return this;\n        }),\n        (H.or = function (t, r) {\n          return new Y(t).or(r);\n        }),\n        (H.prototype.xor = function (t) {\n          return \"number\" == typeof t ? this.xorS(t) : this.xorM(t);\n        }),\n        (H.prototype.xorS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t);\n          return this;\n        }),\n        (H.prototype.xorM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) ^ t.get(r, e));\n          return this;\n        }),\n        (H.xor = function (t, r) {\n          return new Y(t).xor(r);\n        }),\n        (H.prototype.leftShift = function (t) {\n          return \"number\" == typeof t ? this.leftShiftS(t) : this.leftShiftM(t);\n        }),\n        (H.prototype.leftShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t);\n          return this;\n        }),\n        (H.prototype.leftShiftM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) << t.get(r, e));\n          return this;\n        }),\n        (H.leftShift = function (t, r) {\n          return new Y(t).leftShift(r);\n        }),\n        (H.prototype.signPropagatingRightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.signPropagatingRightShiftS(t)\n            : this.signPropagatingRightShiftM(t);\n        }),\n        (H.prototype.signPropagatingRightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t);\n          return this;\n        }),\n        (H.prototype.signPropagatingRightShiftM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >> t.get(r, e));\n          return this;\n        }),\n        (H.signPropagatingRightShift = function (t, r) {\n          return new Y(t).signPropagatingRightShift(r);\n        }),\n        (H.prototype.rightShift = function (t) {\n          return \"number\" == typeof t\n            ? this.rightShiftS(t)\n            : this.rightShiftM(t);\n        }),\n        (H.prototype.rightShiftS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t);\n          return this;\n        }),\n        (H.prototype.rightShiftM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, this.get(r, e) >>> t.get(r, e));\n          return this;\n        }),\n        (H.rightShift = function (t, r) {\n          return new Y(t).rightShift(r);\n        }),\n        (H.prototype.zeroFillRightShift = H.prototype.rightShift),\n        (H.prototype.zeroFillRightShiftS = H.prototype.rightShiftS),\n        (H.prototype.zeroFillRightShiftM = H.prototype.rightShiftM),\n        (H.zeroFillRightShift = H.rightShift),\n        (H.prototype.not = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, ~this.get(t, r));\n          return this;\n        }),\n        (H.not = function (t) {\n          return new Y(t).not();\n        }),\n        (H.prototype.abs = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.abs(this.get(t, r)));\n          return this;\n        }),\n        (H.abs = function (t) {\n          return new Y(t).abs();\n        }),\n        (H.prototype.acos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acos(this.get(t, r)));\n          return this;\n        }),\n        (H.acos = function (t) {\n          return new Y(t).acos();\n        }),\n        (H.prototype.acosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.acosh(this.get(t, r)));\n          return this;\n        }),\n        (H.acosh = function (t) {\n          return new Y(t).acosh();\n        }),\n        (H.prototype.asin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asin(this.get(t, r)));\n          return this;\n        }),\n        (H.asin = function (t) {\n          return new Y(t).asin();\n        }),\n        (H.prototype.asinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.asinh(this.get(t, r)));\n          return this;\n        }),\n        (H.asinh = function (t) {\n          return new Y(t).asinh();\n        }),\n        (H.prototype.atan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atan(this.get(t, r)));\n          return this;\n        }),\n        (H.atan = function (t) {\n          return new Y(t).atan();\n        }),\n        (H.prototype.atanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.atanh(this.get(t, r)));\n          return this;\n        }),\n        (H.atanh = function (t) {\n          return new Y(t).atanh();\n        }),\n        (H.prototype.cbrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cbrt(this.get(t, r)));\n          return this;\n        }),\n        (H.cbrt = function (t) {\n          return new Y(t).cbrt();\n        }),\n        (H.prototype.ceil = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.ceil(this.get(t, r)));\n          return this;\n        }),\n        (H.ceil = function (t) {\n          return new Y(t).ceil();\n        }),\n        (H.prototype.clz32 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.clz32(this.get(t, r)));\n          return this;\n        }),\n        (H.clz32 = function (t) {\n          return new Y(t).clz32();\n        }),\n        (H.prototype.cos = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cos(this.get(t, r)));\n          return this;\n        }),\n        (H.cos = function (t) {\n          return new Y(t).cos();\n        }),\n        (H.prototype.cosh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.cosh(this.get(t, r)));\n          return this;\n        }),\n        (H.cosh = function (t) {\n          return new Y(t).cosh();\n        }),\n        (H.prototype.exp = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.exp(this.get(t, r)));\n          return this;\n        }),\n        (H.exp = function (t) {\n          return new Y(t).exp();\n        }),\n        (H.prototype.expm1 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.expm1(this.get(t, r)));\n          return this;\n        }),\n        (H.expm1 = function (t) {\n          return new Y(t).expm1();\n        }),\n        (H.prototype.floor = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.floor(this.get(t, r)));\n          return this;\n        }),\n        (H.floor = function (t) {\n          return new Y(t).floor();\n        }),\n        (H.prototype.fround = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.fround(this.get(t, r)));\n          return this;\n        }),\n        (H.fround = function (t) {\n          return new Y(t).fround();\n        }),\n        (H.prototype.log = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log(this.get(t, r)));\n          return this;\n        }),\n        (H.log = function (t) {\n          return new Y(t).log();\n        }),\n        (H.prototype.log1p = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log1p(this.get(t, r)));\n          return this;\n        }),\n        (H.log1p = function (t) {\n          return new Y(t).log1p();\n        }),\n        (H.prototype.log10 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log10(this.get(t, r)));\n          return this;\n        }),\n        (H.log10 = function (t) {\n          return new Y(t).log10();\n        }),\n        (H.prototype.log2 = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.log2(this.get(t, r)));\n          return this;\n        }),\n        (H.log2 = function (t) {\n          return new Y(t).log2();\n        }),\n        (H.prototype.round = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.round(this.get(t, r)));\n          return this;\n        }),\n        (H.round = function (t) {\n          return new Y(t).round();\n        }),\n        (H.prototype.sign = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sign(this.get(t, r)));\n          return this;\n        }),\n        (H.sign = function (t) {\n          return new Y(t).sign();\n        }),\n        (H.prototype.sin = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sin(this.get(t, r)));\n          return this;\n        }),\n        (H.sin = function (t) {\n          return new Y(t).sin();\n        }),\n        (H.prototype.sinh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sinh(this.get(t, r)));\n          return this;\n        }),\n        (H.sinh = function (t) {\n          return new Y(t).sinh();\n        }),\n        (H.prototype.sqrt = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.sqrt(this.get(t, r)));\n          return this;\n        }),\n        (H.sqrt = function (t) {\n          return new Y(t).sqrt();\n        }),\n        (H.prototype.tan = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tan(this.get(t, r)));\n          return this;\n        }),\n        (H.tan = function (t) {\n          return new Y(t).tan();\n        }),\n        (H.prototype.tanh = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.tanh(this.get(t, r)));\n          return this;\n        }),\n        (H.tanh = function (t) {\n          return new Y(t).tanh();\n        }),\n        (H.prototype.trunc = function () {\n          for (var t = 0; t < this.rows; t++)\n            for (var r = 0; r < this.columns; r++)\n              this.set(t, r, Math.trunc(this.get(t, r)));\n          return this;\n        }),\n        (H.trunc = function (t) {\n          return new Y(t).trunc();\n        }),\n        (H.pow = function (t, r) {\n          return new Y(t).pow(r);\n        }),\n        (H.prototype.pow = function (t) {\n          return \"number\" == typeof t ? this.powS(t) : this.powM(t);\n        }),\n        (H.prototype.powS = function (t) {\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t));\n          return this;\n        }),\n        (H.prototype.powM = function (t) {\n          if (\n            ((t = Y.checkMatrix(t)),\n            this.rows !== t.rows || this.columns !== t.columns)\n          )\n            throw new RangeError(\"Matrices dimensions must be equal\");\n          for (var r = 0; r < this.rows; r++)\n            for (var e = 0; e < this.columns; e++)\n              this.set(r, e, Math.pow(this.get(r, e), t.get(r, e)));\n          return this;\n        });\n      var rt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && G(t, r);\n        })(e, t);\n        var r = Z(e);\n        function e(t, o, n) {\n          var i;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, e),\n            ((i = r.call(this)).matrix = t),\n            (i.rows = o),\n            (i.columns = n),\n            i\n          );\n        }\n        return e;\n      })(Q);\n      function et(t) {\n        return (et =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ot(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function nt(t, r) {\n        return (nt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function it(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = ut(t);\n          if (r) {\n            var n = ut(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return st(this, e);\n        };\n      }\n      function st(t, r) {\n        return !r || (\"object\" !== et(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function ut(t) {\n        return (ut = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var at = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && nt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = it(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            y(t, r),\n            ((e = n.call(this, t, t.rows, 1)).column = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.column, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t) {\n                return this.matrix.get(t, this.column);\n              },\n            },\n          ]) && ot(r.prototype, e),\n          o && ot(r, o),\n          i\n        );\n      })(rt);\n      function ft(t) {\n        return (ft =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ct(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function ht(t, r) {\n        return (ht =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function lt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = vt(t);\n          if (r) {\n            var n = vt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return pt(this, e);\n        };\n      }\n      function pt(t, r) {\n        return !r || (\"object\" !== ft(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function vt(t) {\n        return (vt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var yt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && ht(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = lt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = b(t, r)),\n            ((e = n.call(this, t, t.rows, r.length)).columnIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columnIndices[r], e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columnIndices[r]);\n              },\n            },\n          ]) && ct(r.prototype, e),\n          o && ct(r, o),\n          i\n        );\n      })(rt);\n      function mt(t) {\n        return (mt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function gt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function wt(t, r) {\n        return (wt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function dt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Mt(t);\n          if (r) {\n            var n = Mt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return bt(this, e);\n        };\n      }\n      function bt(t, r) {\n        return !r || (\"object\" !== mt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Mt(t) {\n        return (Mt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && wt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = dt(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(t, this.columns - r - 1, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(t, this.columns - r - 1);\n              },\n            },\n          ]) && gt(r.prototype, e),\n          o && gt(r, o),\n          i\n        );\n      })(rt);\n      function St(t) {\n        return (St =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function kt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Et(t, r) {\n        return (Et =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ot(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = jt(t);\n          if (r) {\n            var n = jt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Rt(this, e);\n        };\n      }\n      function Rt(t, r) {\n        return !r || (\"object\" !== St(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function jt(t) {\n        return (jt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var _t = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Et(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ot(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.rows, t.columns)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rows - t - 1, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rows - t - 1, r);\n              },\n            },\n          ]) && kt(r.prototype, e),\n          o && kt(r, o),\n          i\n        );\n      })(rt);\n      function Pt(t) {\n        return (Pt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Tt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function At(t, r) {\n        return (At =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function It(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Ct(t);\n          if (r) {\n            var n = Ct(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Nt(this, e);\n        };\n      }\n      function Nt(t, r) {\n        return !r || (\"object\" !== Pt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Ct(t) {\n        return (Ct = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Dt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && At(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = It(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            v(t, r),\n            ((e = n.call(this, t, 1, t.columns)).row = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.row, r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.row, r);\n              },\n            },\n          ]) && Tt(r.prototype, e),\n          o && Tt(r, o),\n          i\n        );\n      })(rt);\n      function Vt(t) {\n        return (Vt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Ft(t, r) {\n        return (Ft =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Bt(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Lt(t);\n          if (r) {\n            var n = Lt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return zt(this, e);\n        };\n      }\n      function zt(t, r) {\n        return !r || (\"object\" !== Vt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Lt(t) {\n        return (Lt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Ut = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Ft(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Bt(i);\n        function i(t, r) {\n          var e;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            (r = d(t, r)),\n            ((e = n.call(this, t, r.length, t.columns)).rowIndices = r),\n            e\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(this.rowIndices[t], r, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.rowIndices[t], r);\n              },\n            },\n          ]) && qt(r.prototype, e),\n          o && qt(r, o),\n          i\n        );\n      })(rt);\n      function Wt(t) {\n        return (Wt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Jt(t, r) {\n        return (Jt =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function Ht(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = Kt(t);\n          if (r) {\n            var n = Kt(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Yt(this, e);\n        };\n      }\n      function Yt(t, r) {\n        return !r || (\"object\" !== Wt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function Kt(t) {\n        return (Kt = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Xt = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Jt(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = Ht(i);\n        function i(t, r, e) {\n          var o;\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, i);\n          var s = w(t, r, e);\n          return (\n            ((o = n.call(this, t, s.row.length, s.column.length)).rowIndices =\n              s.row),\n            (o.columnIndices = s.column),\n            o\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.rowIndices[t], this.columnIndices[r], e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(\n                  this.rowIndices[t],\n                  this.columnIndices[r],\n                );\n              },\n            },\n          ]) && Qt(r.prototype, e),\n          o && Qt(r, o),\n          i\n        );\n      })(rt);\n      function Gt(t) {\n        return (Gt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Zt(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function $t(t, r) {\n        return ($t =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function tr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = er(t);\n          if (r) {\n            var n = er(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return rr(this, e);\n        };\n      }\n      function rr(t, r) {\n        return !r || (\"object\" !== Gt(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function er(t) {\n        return (er = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var or = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && $t(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = tr(i);\n        function i(t, r, e, o, s) {\n          var u;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            M(t, r, e, o, s),\n            ((u = n.call(this, t, e - r + 1, s - o + 1)).startRow = r),\n            (u.startColumn = o),\n            u\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (\n                  this.matrix.set(this.startRow + t, this.startColumn + r, e),\n                  this\n                );\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(this.startRow + t, this.startColumn + r);\n              },\n            },\n          ]) && Zt(r.prototype, e),\n          o && Zt(r, o),\n          i\n        );\n      })(rt);\n      function nr(t) {\n        return (nr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function sr(t, r) {\n        return (sr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function ur(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = fr(t);\n          if (r) {\n            var n = fr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return ar(this, e);\n        };\n      }\n      function ar(t, r) {\n        return !r || (\"object\" !== nr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function fr(t) {\n        return (fr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var cr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && sr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = ur(i);\n        function i(t) {\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            n.call(this, t, t.columns, t.rows)\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return this.matrix.set(r, t, e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.matrix.get(r, t);\n              },\n            },\n          ]) && ir(r.prototype, e),\n          o && ir(r, o),\n          i\n        );\n      })(rt);\n      function hr(t) {\n        return (hr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function lr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function vr(t, r) {\n        return (vr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function yr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = gr(t);\n          if (r) {\n            var n = gr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return mr(this, e);\n        };\n      }\n      function mr(t, r) {\n        return !r || (\"object\" !== hr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function gr(t) {\n        return (gr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var wr = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && vr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = yr(i);\n        function i(t) {\n          var r,\n            e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {};\n          lr(this, i);\n          var o = e.rows,\n            s = void 0 === o ? 1 : o;\n          if (t.length % s != 0)\n            throw new Error(\n              \"the data length is not divisible by the number of rows\",\n            );\n          return (\n            ((r = n.call(this)).rows = s),\n            (r.columns = t.length / s),\n            (r.data = t),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                var o = this._calculateIndex(t, r);\n                return (this.data[o] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                var e = this._calculateIndex(t, r);\n                return this.data[e];\n              },\n            },\n            {\n              key: \"_calculateIndex\",\n              value: function (t, r) {\n                return t * this.columns + r;\n              },\n            },\n          ]) && pr(r.prototype, e),\n          o && pr(r, o),\n          i\n        );\n      })(Q);\n      function dr(t) {\n        return (dr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function br(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      function Mr(t, r) {\n        return (Mr =\n          Object.setPrototypeOf ||\n          function (t, r) {\n            return (t.__proto__ = r), t;\n          })(t, r);\n      }\n      function xr(t) {\n        var r = (function () {\n          if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n          if (Reflect.construct.sham) return !1;\n          if (\"function\" == typeof Proxy) return !0;\n          try {\n            return (\n              Boolean.prototype.valueOf.call(\n                Reflect.construct(Boolean, [], function () {}),\n              ),\n              !0\n            );\n          } catch (t) {\n            return !1;\n          }\n        })();\n        return function () {\n          var e,\n            o = kr(t);\n          if (r) {\n            var n = kr(this).constructor;\n            e = Reflect.construct(o, arguments, n);\n          } else e = o.apply(this, arguments);\n          return Sr(this, e);\n        };\n      }\n      function Sr(t, r) {\n        return !r || (\"object\" !== dr(r) && \"function\" != typeof r)\n          ? (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t)\n          : r;\n      }\n      function kr(t) {\n        return (kr = Object.setPrototypeOf\n          ? Object.getPrototypeOf\n          : function (t) {\n              return t.__proto__ || Object.getPrototypeOf(t);\n            })(t);\n      }\n      var Er = (function (t) {\n        !(function (t, r) {\n          if (\"function\" != typeof r && null !== r)\n            throw new TypeError(\n              \"Super expression must either be null or a function\",\n            );\n          (t.prototype = Object.create(r && r.prototype, {\n            constructor: { value: t, writable: !0, configurable: !0 },\n          })),\n            r && Mr(t, r);\n        })(i, t);\n        var r,\n          e,\n          o,\n          n = xr(i);\n        function i(t) {\n          var r;\n          return (\n            (function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, i),\n            ((r = n.call(this)).data = t),\n            (r.rows = t.length),\n            (r.columns = t[0].length),\n            r\n          );\n        }\n        return (\n          (r = i),\n          (e = [\n            {\n              key: \"set\",\n              value: function (t, r, e) {\n                return (this.data[t][r] = e), this;\n              },\n            },\n            {\n              key: \"get\",\n              value: function (t, r) {\n                return this.data[t][r];\n              },\n            },\n          ]) && br(r.prototype, e),\n          o && br(r, o),\n          i\n        );\n      })(Q);\n      function Or(t, r) {\n        if (Array.isArray(t))\n          return t[0] && Array.isArray(t[0]) ? new Er(t) : new wr(t, r);\n        throw new Error(\"the argument is not an array\");\n      }\n      function Rr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var jr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s,\n            u,\n            a,\n            f,\n            c,\n            h = (r = Er.checkMatrix(r)).clone(),\n            l = h.rows,\n            p = h.columns,\n            v = new Float64Array(l),\n            y = 1;\n          for (e = 0; e < l; e++) v[e] = e;\n          for (f = new Float64Array(l), o = 0; o < p; o++) {\n            for (e = 0; e < l; e++) f[e] = h.get(e, o);\n            for (e = 0; e < l; e++) {\n              for (c = Math.min(e, o), s = 0, n = 0; n < c; n++)\n                s += h.get(e, n) * f[n];\n              (f[e] -= s), h.set(e, o, f[e]);\n            }\n            for (i = o, e = o + 1; e < l; e++)\n              Math.abs(f[e]) > Math.abs(f[i]) && (i = e);\n            if (i !== o) {\n              for (n = 0; n < p; n++)\n                (u = h.get(i, n)), h.set(i, n, h.get(o, n)), h.set(o, n, u);\n              (a = v[i]), (v[i] = v[o]), (v[o] = a), (y = -y);\n            }\n            if (o < l && 0 !== h.get(o, o))\n              for (e = o + 1; e < l; e++)\n                h.set(e, o, h.get(e, o) / h.get(o, o));\n          }\n          (this.LU = h), (this.pivotVector = v), (this.pivotSign = y);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isSingular\",\n              value: function () {\n                for (var t = this.LU, r = t.columns, e = 0; e < r; e++)\n                  if (0 === t.get(e, e)) return !0;\n                return !1;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.LU;\n                if (r.rows !== t.rows)\n                  throw new Error(\"Invalid matrix dimensions\");\n                if (this.isSingular()) throw new Error(\"LU matrix is singular\");\n                var e,\n                  o,\n                  n,\n                  i = t.columns,\n                  s = t.subMatrixRow(this.pivotVector, 0, i - 1),\n                  u = r.columns;\n                for (n = 0; n < u; n++)\n                  for (e = n + 1; e < u; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                for (n = u - 1; n >= 0; n--) {\n                  for (o = 0; o < i; o++)\n                    s.set(n, o, s.get(n, o) / r.get(n, n));\n                  for (e = 0; e < n; e++)\n                    for (o = 0; o < i; o++)\n                      s.set(e, o, s.get(e, o) - s.get(n, o) * r.get(e, n));\n                }\n                return s;\n              },\n            },\n            {\n              key: \"determinant\",\n              get: function () {\n                var t = this.LU;\n                if (!t.isSquare()) throw new Error(\"Matrix must be square\");\n                for (var r = this.pivotSign, e = t.columns, o = 0; o < e; o++)\n                  r *= t.get(o, o);\n                return r;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n > i\n                      ? o.set(n, i, t.get(n, i))\n                      : n === i\n                      ? o.set(n, i, 1)\n                      : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                for (\n                  var t = this.LU,\n                    r = t.rows,\n                    e = t.columns,\n                    o = new K(r, e),\n                    n = 0;\n                  n < r;\n                  n++\n                )\n                  for (var i = 0; i < e; i++)\n                    n <= i ? o.set(n, i, t.get(n, i)) : o.set(n, i, 0);\n                return o;\n              },\n            },\n            {\n              key: \"pivotPermutationVector\",\n              get: function () {\n                return Array.from(this.pivotVector);\n              },\n            },\n          ]) && Rr(r.prototype, e),\n          o && Rr(r, o),\n          t\n        );\n      })();\n      function _r(t, r) {\n        var e = 0;\n        return Math.abs(t) > Math.abs(r)\n          ? ((e = r / t), Math.abs(t) * Math.sqrt(1 + e * e))\n          : 0 !== r\n          ? ((e = t / r), Math.abs(r) * Math.sqrt(1 + e * e))\n          : 0;\n      }\n      function Pr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Tr = (function () {\n        function t(r) {\n          !(function (t, r) {\n            if (!(t instanceof r))\n              throw new TypeError(\"Cannot call a class as a function\");\n          })(this, t);\n          var e,\n            o,\n            n,\n            i,\n            s = (r = Er.checkMatrix(r)).clone(),\n            u = r.rows,\n            a = r.columns,\n            f = new Float64Array(a);\n          for (n = 0; n < a; n++) {\n            var c = 0;\n            for (e = n; e < u; e++) c = _r(c, s.get(e, n));\n            if (0 !== c) {\n              for (s.get(n, n) < 0 && (c = -c), e = n; e < u; e++)\n                s.set(e, n, s.get(e, n) / c);\n              for (s.set(n, n, s.get(n, n) + 1), o = n + 1; o < a; o++) {\n                for (i = 0, e = n; e < u; e++) i += s.get(e, n) * s.get(e, o);\n                for (i = -i / s.get(n, n), e = n; e < u; e++)\n                  s.set(e, o, s.get(e, o) + i * s.get(e, n));\n              }\n            }\n            f[n] = -c;\n          }\n          (this.QR = s), (this.Rdiag = f);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = K.checkMatrix(t);\n                var r = this.QR,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix row dimensions must agree\");\n                if (!this.isFullRank())\n                  throw new Error(\"Matrix is rank deficient\");\n                var o,\n                  n,\n                  i,\n                  s,\n                  u = t.columns,\n                  a = t.clone(),\n                  f = r.columns;\n                for (i = 0; i < f; i++)\n                  for (n = 0; n < u; n++) {\n                    for (s = 0, o = i; o < e; o++)\n                      s += r.get(o, i) * a.get(o, n);\n                    for (s = -s / r.get(i, i), o = i; o < e; o++)\n                      a.set(o, n, a.get(o, n) + s * r.get(o, i));\n                  }\n                for (i = f - 1; i >= 0; i--) {\n                  for (n = 0; n < u; n++)\n                    a.set(i, n, a.get(i, n) / this.Rdiag[i]);\n                  for (o = 0; o < i; o++)\n                    for (n = 0; n < u; n++)\n                      a.set(o, n, a.get(o, n) - a.get(i, n) * r.get(o, i));\n                }\n                return a.subMatrix(0, f - 1, 0, u - 1);\n              },\n            },\n            {\n              key: \"isFullRank\",\n              value: function () {\n                for (var t = this.QR.columns, r = 0; r < t; r++)\n                  if (0 === this.Rdiag[r]) return !1;\n                return !0;\n              },\n            },\n            {\n              key: \"upperTriangularMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.QR,\n                  o = e.columns,\n                  n = new K(o, o);\n                for (t = 0; t < o; t++)\n                  for (r = 0; r < o; r++)\n                    t < r\n                      ? n.set(t, r, e.get(t, r))\n                      : t === r\n                      ? n.set(t, r, this.Rdiag[t])\n                      : n.set(t, r, 0);\n                return n;\n              },\n            },\n            {\n              key: \"orthogonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e,\n                  o,\n                  n = this.QR,\n                  i = n.rows,\n                  s = n.columns,\n                  u = new K(i, s);\n                for (e = s - 1; e >= 0; e--) {\n                  for (t = 0; t < i; t++) u.set(t, e, 0);\n                  for (u.set(e, e, 1), r = e; r < s; r++)\n                    if (0 !== n.get(e, e)) {\n                      for (o = 0, t = e; t < i; t++)\n                        o += n.get(t, e) * u.get(t, r);\n                      for (o = -o / n.get(e, e), t = e; t < i; t++)\n                        u.set(t, r, u.get(t, r) + o * n.get(t, e));\n                    }\n                }\n                return u;\n              },\n            },\n          ]) && Pr(r.prototype, e),\n          o && Pr(r, o),\n          t\n        );\n      })();\n      function Ar(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Ir(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Nr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          if ((Ar(this, t), (r = Er.checkMatrix(r)).isEmpty()))\n            throw new Error(\"Matrix must be non-empty\");\n          var o,\n            n = r.rows,\n            i = r.columns,\n            s = e.computeLeftSingularVectors,\n            u = void 0 === s || s,\n            a = e.computeRightSingularVectors,\n            f = void 0 === a || a,\n            c = e.autoTranspose,\n            h = void 0 !== c && c,\n            l = Boolean(u),\n            p = Boolean(f),\n            v = !1;\n          if (n < i)\n            if (h) {\n              (n = (o = r.transpose()).rows), (i = o.columns), (v = !0);\n              var y = l;\n              (l = p), (p = y);\n            } else\n              (o = r.clone()),\n                console.warn(\n                  \"Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose\",\n                );\n          else o = r.clone();\n          for (\n            var m = Math.min(n, i),\n              g = Math.min(n + 1, i),\n              w = new Float64Array(g),\n              d = new K(n, m),\n              b = new K(i, i),\n              M = new Float64Array(i),\n              x = new Float64Array(n),\n              S = new Float64Array(g),\n              k = 0;\n            k < g;\n            k++\n          )\n            S[k] = k;\n          for (\n            var E = Math.min(n - 1, i),\n              O = Math.max(0, Math.min(i - 2, n)),\n              R = Math.max(E, O),\n              j = 0;\n            j < R;\n            j++\n          ) {\n            if (j < E) {\n              w[j] = 0;\n              for (var _ = j; _ < n; _++) w[j] = _r(w[j], o.get(_, j));\n              if (0 !== w[j]) {\n                o.get(j, j) < 0 && (w[j] = -w[j]);\n                for (var P = j; P < n; P++) o.set(P, j, o.get(P, j) / w[j]);\n                o.set(j, j, o.get(j, j) + 1);\n              }\n              w[j] = -w[j];\n            }\n            for (var T = j + 1; T < i; T++) {\n              if (j < E && 0 !== w[j]) {\n                for (var A = 0, I = j; I < n; I++)\n                  A += o.get(I, j) * o.get(I, T);\n                A = -A / o.get(j, j);\n                for (var N = j; N < n; N++)\n                  o.set(N, T, o.get(N, T) + A * o.get(N, j));\n              }\n              M[T] = o.get(j, T);\n            }\n            if (l && j < E)\n              for (var C = j; C < n; C++) d.set(C, j, o.get(C, j));\n            if (j < O) {\n              M[j] = 0;\n              for (var D = j + 1; D < i; D++) M[j] = _r(M[j], M[D]);\n              if (0 !== M[j]) {\n                M[j + 1] < 0 && (M[j] = 0 - M[j]);\n                for (var V = j + 1; V < i; V++) M[V] /= M[j];\n                M[j + 1] += 1;\n              }\n              if (((M[j] = -M[j]), j + 1 < n && 0 !== M[j])) {\n                for (var q = j + 1; q < n; q++) x[q] = 0;\n                for (var F = j + 1; F < n; F++)\n                  for (var B = j + 1; B < i; B++) x[F] += M[B] * o.get(F, B);\n                for (var z = j + 1; z < i; z++)\n                  for (var L = -M[z] / M[j + 1], U = j + 1; U < n; U++)\n                    o.set(U, z, o.get(U, z) + L * x[U]);\n              }\n              if (p) for (var W = j + 1; W < i; W++) b.set(W, j, M[W]);\n            }\n          }\n          var Q = Math.min(i, n + 1);\n          if (\n            (E < i && (w[E] = o.get(E, E)),\n            n < Q && (w[Q - 1] = 0),\n            O + 1 < Q && (M[O] = o.get(O, Q - 1)),\n            (M[Q - 1] = 0),\n            l)\n          ) {\n            for (var J = E; J < m; J++) {\n              for (var H = 0; H < n; H++) d.set(H, J, 0);\n              d.set(J, J, 1);\n            }\n            for (var Y = E - 1; Y >= 0; Y--)\n              if (0 !== w[Y]) {\n                for (var X = Y + 1; X < m; X++) {\n                  for (var G = 0, Z = Y; Z < n; Z++)\n                    G += d.get(Z, Y) * d.get(Z, X);\n                  G = -G / d.get(Y, Y);\n                  for (var $ = Y; $ < n; $++)\n                    d.set($, X, d.get($, X) + G * d.get($, Y));\n                }\n                for (var tt = Y; tt < n; tt++) d.set(tt, Y, -d.get(tt, Y));\n                d.set(Y, Y, 1 + d.get(Y, Y));\n                for (var rt = 0; rt < Y - 1; rt++) d.set(rt, Y, 0);\n              } else {\n                for (var et = 0; et < n; et++) d.set(et, Y, 0);\n                d.set(Y, Y, 1);\n              }\n          }\n          if (p)\n            for (var ot = i - 1; ot >= 0; ot--) {\n              if (ot < O && 0 !== M[ot])\n                for (var nt = ot + 1; nt < i; nt++) {\n                  for (var it = 0, st = ot + 1; st < i; st++)\n                    it += b.get(st, ot) * b.get(st, nt);\n                  it = -it / b.get(ot + 1, ot);\n                  for (var ut = ot + 1; ut < i; ut++)\n                    b.set(ut, nt, b.get(ut, nt) + it * b.get(ut, ot));\n                }\n              for (var at = 0; at < i; at++) b.set(at, ot, 0);\n              b.set(ot, ot, 1);\n            }\n          for (var ft = Q - 1, ct = Number.EPSILON; Q > 0; ) {\n            var ht = void 0,\n              lt = void 0;\n            for (ht = Q - 2; ht >= -1 && -1 !== ht; ht--) {\n              var pt =\n                Number.MIN_VALUE + ct * Math.abs(w[ht] + Math.abs(w[ht + 1]));\n              if (Math.abs(M[ht]) <= pt || Number.isNaN(M[ht])) {\n                M[ht] = 0;\n                break;\n              }\n            }\n            if (ht === Q - 2) lt = 4;\n            else {\n              var vt = void 0;\n              for (vt = Q - 1; vt >= ht && vt !== ht; vt--) {\n                var yt =\n                  (vt !== Q ? Math.abs(M[vt]) : 0) +\n                  (vt !== ht + 1 ? Math.abs(M[vt - 1]) : 0);\n                if (Math.abs(w[vt]) <= ct * yt) {\n                  w[vt] = 0;\n                  break;\n                }\n              }\n              vt === ht\n                ? (lt = 3)\n                : vt === Q - 1\n                ? (lt = 1)\n                : ((lt = 2), (ht = vt));\n            }\n            switch ((ht++, lt)) {\n              case 1:\n                var mt = M[Q - 2];\n                M[Q - 2] = 0;\n                for (var gt = Q - 2; gt >= ht; gt--) {\n                  var wt = _r(w[gt], mt),\n                    dt = w[gt] / wt,\n                    bt = mt / wt;\n                  if (\n                    ((w[gt] = wt),\n                    gt !== ht &&\n                      ((mt = -bt * M[gt - 1]), (M[gt - 1] = dt * M[gt - 1])),\n                    p)\n                  )\n                    for (var Mt = 0; Mt < i; Mt++)\n                      (wt = dt * b.get(Mt, gt) + bt * b.get(Mt, Q - 1)),\n                        b.set(\n                          Mt,\n                          Q - 1,\n                          -bt * b.get(Mt, gt) + dt * b.get(Mt, Q - 1),\n                        ),\n                        b.set(Mt, gt, wt);\n                }\n                break;\n              case 2:\n                var xt = M[ht - 1];\n                M[ht - 1] = 0;\n                for (var St = ht; St < Q; St++) {\n                  var kt = _r(w[St], xt),\n                    Et = w[St] / kt,\n                    Ot = xt / kt;\n                  if (\n                    ((w[St] = kt), (xt = -Ot * M[St]), (M[St] = Et * M[St]), l)\n                  )\n                    for (var Rt = 0; Rt < n; Rt++)\n                      (kt = Et * d.get(Rt, St) + Ot * d.get(Rt, ht - 1)),\n                        d.set(\n                          Rt,\n                          ht - 1,\n                          -Ot * d.get(Rt, St) + Et * d.get(Rt, ht - 1),\n                        ),\n                        d.set(Rt, St, kt);\n                }\n                break;\n              case 3:\n                var jt = Math.max(\n                    Math.abs(w[Q - 1]),\n                    Math.abs(w[Q - 2]),\n                    Math.abs(M[Q - 2]),\n                    Math.abs(w[ht]),\n                    Math.abs(M[ht]),\n                  ),\n                  _t = w[Q - 1] / jt,\n                  Pt = w[Q - 2] / jt,\n                  Tt = M[Q - 2] / jt,\n                  At = w[ht] / jt,\n                  It = M[ht] / jt,\n                  Nt = ((Pt + _t) * (Pt - _t) + Tt * Tt) / 2,\n                  Ct = _t * Tt * (_t * Tt),\n                  Dt = 0;\n                (0 === Nt && 0 === Ct) ||\n                  (Dt =\n                    Ct /\n                    (Nt +\n                      (Dt =\n                        Nt < 0\n                          ? 0 - Math.sqrt(Nt * Nt + Ct)\n                          : Math.sqrt(Nt * Nt + Ct))));\n                for (\n                  var Vt = (At + _t) * (At - _t) + Dt, qt = At * It, Ft = ht;\n                  Ft < Q - 1;\n                  Ft++\n                ) {\n                  var Bt = _r(Vt, qt);\n                  0 === Bt && (Bt = Number.MIN_VALUE);\n                  var zt = Vt / Bt,\n                    Lt = qt / Bt;\n                  if (\n                    (Ft !== ht && (M[Ft - 1] = Bt),\n                    (Vt = zt * w[Ft] + Lt * M[Ft]),\n                    (M[Ft] = zt * M[Ft] - Lt * w[Ft]),\n                    (qt = Lt * w[Ft + 1]),\n                    (w[Ft + 1] = zt * w[Ft + 1]),\n                    p)\n                  )\n                    for (var Ut = 0; Ut < i; Ut++)\n                      (Bt = zt * b.get(Ut, Ft) + Lt * b.get(Ut, Ft + 1)),\n                        b.set(\n                          Ut,\n                          Ft + 1,\n                          -Lt * b.get(Ut, Ft) + zt * b.get(Ut, Ft + 1),\n                        ),\n                        b.set(Ut, Ft, Bt);\n                  if (\n                    (0 === (Bt = _r(Vt, qt)) && (Bt = Number.MIN_VALUE),\n                    (zt = Vt / Bt),\n                    (Lt = qt / Bt),\n                    (w[Ft] = Bt),\n                    (Vt = zt * M[Ft] + Lt * w[Ft + 1]),\n                    (w[Ft + 1] = -Lt * M[Ft] + zt * w[Ft + 1]),\n                    (qt = Lt * M[Ft + 1]),\n                    (M[Ft + 1] = zt * M[Ft + 1]),\n                    l && Ft < n - 1)\n                  )\n                    for (var Wt = 0; Wt < n; Wt++)\n                      (Bt = zt * d.get(Wt, Ft) + Lt * d.get(Wt, Ft + 1)),\n                        d.set(\n                          Wt,\n                          Ft + 1,\n                          -Lt * d.get(Wt, Ft) + zt * d.get(Wt, Ft + 1),\n                        ),\n                        d.set(Wt, Ft, Bt);\n                }\n                (M[Q - 2] = Vt), 1;\n                break;\n              case 4:\n                if (w[ht] <= 0 && ((w[ht] = w[ht] < 0 ? -w[ht] : 0), p))\n                  for (var Qt = 0; Qt <= ft; Qt++)\n                    b.set(Qt, ht, -b.get(Qt, ht));\n                for (; ht < ft && !(w[ht] >= w[ht + 1]); ) {\n                  var Jt = w[ht];\n                  if (((w[ht] = w[ht + 1]), (w[ht + 1] = Jt), p && ht < i - 1))\n                    for (var Ht = 0; Ht < i; Ht++)\n                      (Jt = b.get(Ht, ht + 1)),\n                        b.set(Ht, ht + 1, b.get(Ht, ht)),\n                        b.set(Ht, ht, Jt);\n                  if (l && ht < n - 1)\n                    for (var Yt = 0; Yt < n; Yt++)\n                      (Jt = d.get(Yt, ht + 1)),\n                        d.set(Yt, ht + 1, d.get(Yt, ht)),\n                        d.set(Yt, ht, Jt);\n                  ht++;\n                }\n                0, Q--;\n            }\n          }\n          if (v) {\n            var Kt = b;\n            (b = d), (d = Kt);\n          }\n          (this.m = n), (this.n = i), (this.s = w), (this.U = d), (this.V = b);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"solve\",\n              value: function (t) {\n                for (\n                  var r = t,\n                    e = this.threshold,\n                    o = this.s.length,\n                    n = K.zeros(o, o),\n                    i = 0;\n                  i < o;\n                  i++\n                )\n                  Math.abs(this.s[i]) <= e\n                    ? n.set(i, i, 0)\n                    : n.set(i, i, 1 / this.s[i]);\n                for (\n                  var s = this.U,\n                    u = this.rightSingularVectors,\n                    a = u.mmul(n),\n                    f = u.rows,\n                    c = s.rows,\n                    h = K.zeros(f, c),\n                    l = 0;\n                  l < f;\n                  l++\n                )\n                  for (var p = 0; p < c; p++) {\n                    for (var v = 0, y = 0; y < o; y++)\n                      v += a.get(l, y) * s.get(p, y);\n                    h.set(l, p, v);\n                  }\n                return h.mmul(r);\n              },\n            },\n            {\n              key: \"solveForDiagonal\",\n              value: function (t) {\n                return this.solve(K.diag(t));\n              },\n            },\n            {\n              key: \"inverse\",\n              value: function () {\n                for (\n                  var t = this.V,\n                    r = this.threshold,\n                    e = t.rows,\n                    o = t.columns,\n                    n = new K(e, this.s.length),\n                    i = 0;\n                  i < e;\n                  i++\n                )\n                  for (var s = 0; s < o; s++)\n                    Math.abs(this.s[s]) > r &&\n                      n.set(i, s, t.get(i, s) / this.s[s]);\n                for (\n                  var u = this.U,\n                    a = u.rows,\n                    f = u.columns,\n                    c = new K(e, a),\n                    h = 0;\n                  h < e;\n                  h++\n                )\n                  for (var l = 0; l < a; l++) {\n                    for (var p = 0, v = 0; v < f; v++)\n                      p += n.get(h, v) * u.get(l, v);\n                    c.set(h, l, p);\n                  }\n                return c;\n              },\n            },\n            {\n              key: \"condition\",\n              get: function () {\n                return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n              },\n            },\n            {\n              key: \"norm2\",\n              get: function () {\n                return this.s[0];\n              },\n            },\n            {\n              key: \"rank\",\n              get: function () {\n                for (\n                  var t = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON,\n                    r = 0,\n                    e = this.s,\n                    o = 0,\n                    n = e.length;\n                  o < n;\n                  o++\n                )\n                  e[o] > t && r++;\n                return r;\n              },\n            },\n            {\n              key: \"diagonal\",\n              get: function () {\n                return Array.from(this.s);\n              },\n            },\n            {\n              key: \"threshold\",\n              get: function () {\n                return (\n                  (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0]\n                );\n              },\n            },\n            {\n              key: \"leftSingularVectors\",\n              get: function () {\n                return this.U;\n              },\n            },\n            {\n              key: \"rightSingularVectors\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                return K.diag(this.s);\n              },\n            },\n          ]) && Ir(r.prototype, e),\n          o && Ir(r, o),\n          t\n        );\n      })();\n      function Cr(t) {\n        var r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n        return (\n          (t = Er.checkMatrix(t)),\n          r ? new Nr(t).inverse() : Dr(t, K.eye(t.rows))\n        );\n      }\n      function Dr(t, r) {\n        var e = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\n        return (\n          (t = Er.checkMatrix(t)),\n          (r = Er.checkMatrix(r)),\n          e\n            ? new Nr(t).solve(r)\n            : t.isSquare()\n            ? new jr(t).solve(r)\n            : new Tr(t).solve(r)\n        );\n      }\n      function Vr(t) {\n        var r, e, o, n, i, s;\n        if ((t = K.checkMatrix(t)).isSquare())\n          return 0 === t.columns\n            ? 1\n            : 2 === t.columns\n            ? ((r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(1, 0)),\n              r * t.get(1, 1) - e * o)\n            : 3 === t.columns\n            ? ((n = new Xt(t, [1, 2], [1, 2])),\n              (i = new Xt(t, [1, 2], [0, 2])),\n              (s = new Xt(t, [1, 2], [0, 1])),\n              (r = t.get(0, 0)),\n              (e = t.get(0, 1)),\n              (o = t.get(0, 2)),\n              r * Vr(n) - e * Vr(i) + o * Vr(s))\n            : new jr(t).determinant;\n        throw Error(\"determinant can only be calculated for a square matrix\");\n      }\n      function qr(t, r) {\n        for (var e = [], o = 0; o < t; o++) o !== r && e.push(o);\n        return e;\n      }\n      function Fr(t, r, e) {\n        var o =\n            arguments.length > 3 && void 0 !== arguments[3]\n              ? arguments[3]\n              : 1e-9,\n          n =\n            arguments.length > 4 && void 0 !== arguments[4]\n              ? arguments[4]\n              : 1e-9;\n        if (t > n) return new Array(r.rows + 1).fill(0);\n        for (var i = r.addRow(e, [0]), s = 0; s < i.rows; s++)\n          Math.abs(i.get(s, 0)) < o && i.set(s, 0, 0);\n        return i.to1DArray();\n      }\n      function Br(t) {\n        for (\n          var r =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            e = r.thresholdValue,\n            o = void 0 === e ? 1e-9 : e,\n            n = r.thresholdError,\n            i = void 0 === n ? 1e-9 : n,\n            s = (t = K.checkMatrix(t)).rows,\n            u = new K(s, s),\n            a = 0;\n          a < s;\n          a++\n        ) {\n          var f = K.columnVector(t.getRow(a)),\n            c = t.subMatrixRow(qr(s, a)).transpose(),\n            h = new Nr(c),\n            l = h.solve(f),\n            p = K.sub(f, c.mmul(l)).abs().max();\n          u.setRow(a, Fr(p, l, a, o, i));\n        }\n        return u;\n      }\n      function zr(t) {\n        var r =\n          arguments.length > 1 && void 0 !== arguments[1]\n            ? arguments[1]\n            : Number.EPSILON;\n        if ((t = K.checkMatrix(t)).isEmpty()) return t.transpose();\n        for (\n          var e = new Nr(t, { autoTranspose: !0 }),\n            o = e.leftSingularVectors,\n            n = e.rightSingularVectors,\n            i = e.diagonal,\n            s = 0;\n          s < i.length;\n          s++\n        )\n          Math.abs(i[s]) > r ? (i[s] = 1 / i[s]) : (i[s] = 0);\n        return n.mmul(K.diag(i).mmul(o.transpose()));\n      }\n      function Lr(t) {\n        return (Lr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Ur(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== Lr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i;\n        s && ((t = t.center(\"column\")), o || (r = r.center(\"column\")));\n        for (var u = t.transpose().mmul(r), a = 0; a < u.rows; a++)\n          for (var f = 0; f < u.columns; f++)\n            u.set(a, f, u.get(a, f) * (1 / (t.rows - 1)));\n        return u;\n      }\n      function Wr(t) {\n        return (Wr =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Qr(t) {\n        var r =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : t,\n          e =\n            arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        t = new K(t);\n        var o = !1;\n        if (\n          (\"object\" !== Wr(r) || K.isMatrix(r) || Array.isArray(r)\n            ? (r = new K(r))\n            : ((e = r), (r = t), (o = !0)),\n          t.rows !== r.rows)\n        )\n          throw new TypeError(\n            \"Both matrices must have the same number of rows\",\n          );\n        var n = e,\n          i = n.center,\n          s = void 0 === i || i,\n          u = n.scale,\n          a = void 0 === u || u;\n        s && (t.center(\"column\"), o || r.center(\"column\")),\n          a && (t.scale(\"column\"), o || r.scale(\"column\"));\n        for (\n          var f = t.standardDeviation(\"column\", { unbiased: !0 }),\n            c = o ? f : r.standardDeviation(\"column\", { unbiased: !0 }),\n            h = t.transpose().mmul(r),\n            l = 0;\n          l < h.rows;\n          l++\n        )\n          for (var p = 0; p < h.columns; p++)\n            h.set(l, p, h.get(l, p) * (1 / (f[l] * c[p])) * (1 / (t.rows - 1)));\n        return h;\n      }\n      function Jr(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      function Hr(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var Yr = (function () {\n        function t(r) {\n          var e =\n            arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n          Jr(this, t);\n          var o = e.assumeSymmetric,\n            n = void 0 !== o && o;\n          if (!(r = Er.checkMatrix(r)).isSquare())\n            throw new Error(\"Matrix is not a square matrix\");\n          if (r.isEmpty()) throw new Error(\"Matrix must be non-empty\");\n          var i,\n            s,\n            u = r.columns,\n            a = new K(u, u),\n            f = new Float64Array(u),\n            c = new Float64Array(u),\n            h = r;\n          if (!!n || r.isSymmetric()) {\n            for (i = 0; i < u; i++)\n              for (s = 0; s < u; s++) a.set(i, s, h.get(i, s));\n            Kr(u, c, f, a), Xr(u, c, f, a);\n          } else {\n            var l = new K(u, u),\n              p = new Float64Array(u);\n            for (s = 0; s < u; s++)\n              for (i = 0; i < u; i++) l.set(i, s, h.get(i, s));\n            Gr(u, l, p, a), Zr(u, c, f, a, l);\n          }\n          (this.n = u), (this.e = c), (this.d = f), (this.V = a);\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"realEigenvalues\",\n              get: function () {\n                return Array.from(this.d);\n              },\n            },\n            {\n              key: \"imaginaryEigenvalues\",\n              get: function () {\n                return Array.from(this.e);\n              },\n            },\n            {\n              key: \"eigenvectorMatrix\",\n              get: function () {\n                return this.V;\n              },\n            },\n            {\n              key: \"diagonalMatrix\",\n              get: function () {\n                var t,\n                  r,\n                  e = this.n,\n                  o = this.e,\n                  n = this.d,\n                  i = new K(e, e);\n                for (t = 0; t < e; t++) {\n                  for (r = 0; r < e; r++) i.set(t, r, 0);\n                  i.set(t, t, n[t]),\n                    o[t] > 0\n                      ? i.set(t, t + 1, o[t])\n                      : o[t] < 0 && i.set(t, t - 1, o[t]);\n                }\n                return i;\n              },\n            },\n          ]) && Hr(r.prototype, e),\n          o && Hr(r, o),\n          t\n        );\n      })();\n      function Kr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h;\n        for (a = 0; a < t; a++) e[a] = o.get(t - 1, a);\n        for (u = t - 1; u > 0; u--) {\n          for (h = 0, s = 0, f = 0; f < u; f++) h += Math.abs(e[f]);\n          if (0 === h)\n            for (r[u] = e[u - 1], a = 0; a < u; a++)\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0), o.set(a, u, 0);\n          else {\n            for (f = 0; f < u; f++) (e[f] /= h), (s += e[f] * e[f]);\n            for (\n              n = e[u - 1],\n                i = Math.sqrt(s),\n                n > 0 && (i = -i),\n                r[u] = h * i,\n                s -= n * i,\n                e[u - 1] = n - i,\n                a = 0;\n              a < u;\n              a++\n            )\n              r[a] = 0;\n            for (a = 0; a < u; a++) {\n              for (\n                n = e[a], o.set(a, u, n), i = r[a] + o.get(a, a) * n, f = a + 1;\n                f <= u - 1;\n                f++\n              )\n                (i += o.get(f, a) * e[f]), (r[f] += o.get(f, a) * n);\n              r[a] = i;\n            }\n            for (n = 0, a = 0; a < u; a++) (r[a] /= s), (n += r[a] * e[a]);\n            for (c = n / (s + s), a = 0; a < u; a++) r[a] -= c * e[a];\n            for (a = 0; a < u; a++) {\n              for (n = e[a], i = r[a], f = a; f <= u - 1; f++)\n                o.set(f, a, o.get(f, a) - (n * r[f] + i * e[f]));\n              (e[a] = o.get(u - 1, a)), o.set(u, a, 0);\n            }\n          }\n          e[u] = s;\n        }\n        for (u = 0; u < t - 1; u++) {\n          if (\n            (o.set(t - 1, u, o.get(u, u)), o.set(u, u, 1), 0 !== (s = e[u + 1]))\n          ) {\n            for (f = 0; f <= u; f++) e[f] = o.get(f, u + 1) / s;\n            for (a = 0; a <= u; a++) {\n              for (i = 0, f = 0; f <= u; f++)\n                i += o.get(f, u + 1) * o.get(f, a);\n              for (f = 0; f <= u; f++) o.set(f, a, o.get(f, a) - i * e[f]);\n            }\n          }\n          for (f = 0; f <= u; f++) o.set(f, u + 1, 0);\n        }\n        for (a = 0; a < t; a++) (e[a] = o.get(t - 1, a)), o.set(t - 1, a, 0);\n        o.set(t - 1, t - 1, 1), (r[0] = 0);\n      }\n      function Xr(t, r, e, o) {\n        var n, i, s, u, a, f, c, h, l, p, v, y, m, g, w, d;\n        for (s = 1; s < t; s++) r[s - 1] = r[s];\n        r[t - 1] = 0;\n        var b = 0,\n          M = 0,\n          x = Number.EPSILON;\n        for (f = 0; f < t; f++) {\n          for (\n            M = Math.max(M, Math.abs(e[f]) + Math.abs(r[f])), c = f;\n            c < t && !(Math.abs(r[c]) <= x * M);\n\n          )\n            c++;\n          if (c > f) {\n            0;\n            do {\n              for (\n                1,\n                  n = e[f],\n                  l = _r((h = (e[f + 1] - n) / (2 * r[f])), 1),\n                  h < 0 && (l = -l),\n                  e[f] = r[f] / (h + l),\n                  e[f + 1] = r[f] * (h + l),\n                  p = e[f + 1],\n                  i = n - e[f],\n                  s = f + 2;\n                s < t;\n                s++\n              )\n                e[s] -= i;\n              for (\n                b += i,\n                  h = e[c],\n                  y = v = 1,\n                  m = v,\n                  g = r[f + 1],\n                  w = 0,\n                  d = 0,\n                  s = c - 1;\n                s >= f;\n                s--\n              )\n                for (\n                  m = y,\n                    y = v,\n                    d = w,\n                    n = v * r[s],\n                    i = v * h,\n                    l = _r(h, r[s]),\n                    r[s + 1] = w * l,\n                    w = r[s] / l,\n                    h = (v = h / l) * e[s] - w * n,\n                    e[s + 1] = i + w * (v * n + w * e[s]),\n                    a = 0;\n                  a < t;\n                  a++\n                )\n                  (i = o.get(a, s + 1)),\n                    o.set(a, s + 1, w * o.get(a, s) + v * i),\n                    o.set(a, s, v * o.get(a, s) - w * i);\n              (h = (-w * d * m * g * r[f]) / p), (r[f] = w * h), (e[f] = v * h);\n            } while (Math.abs(r[f]) > x * M);\n          }\n          (e[f] = e[f] + b), (r[f] = 0);\n        }\n        for (s = 0; s < t - 1; s++) {\n          for (a = s, h = e[s], u = s + 1; u < t; u++)\n            e[u] < h && ((a = u), (h = e[u]));\n          if (a !== s)\n            for (e[a] = e[s], e[s] = h, u = 0; u < t; u++)\n              (h = o.get(u, s)), o.set(u, s, o.get(u, a)), o.set(u, a, h);\n        }\n      }\n      function Gr(t, r, e, o) {\n        var n,\n          i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h = t - 1;\n        for (f = 1; f <= h - 1; f++) {\n          for (c = 0, u = f; u <= h; u++) c += Math.abs(r.get(u, f - 1));\n          if (0 !== c) {\n            for (s = 0, u = h; u >= f; u--)\n              (e[u] = r.get(u, f - 1) / c), (s += e[u] * e[u]);\n            for (\n              i = Math.sqrt(s),\n                e[f] > 0 && (i = -i),\n                s -= e[f] * i,\n                e[f] = e[f] - i,\n                a = f;\n              a < t;\n              a++\n            ) {\n              for (n = 0, u = h; u >= f; u--) n += e[u] * r.get(u, a);\n              for (n /= s, u = f; u <= h; u++)\n                r.set(u, a, r.get(u, a) - n * e[u]);\n            }\n            for (u = 0; u <= h; u++) {\n              for (n = 0, a = h; a >= f; a--) n += e[a] * r.get(u, a);\n              for (n /= s, a = f; a <= h; a++)\n                r.set(u, a, r.get(u, a) - n * e[a]);\n            }\n            (e[f] = c * e[f]), r.set(f, f - 1, c * i);\n          }\n        }\n        for (u = 0; u < t; u++)\n          for (a = 0; a < t; a++) o.set(u, a, u === a ? 1 : 0);\n        for (f = h - 1; f >= 1; f--)\n          if (0 !== r.get(f, f - 1)) {\n            for (u = f + 1; u <= h; u++) e[u] = r.get(u, f - 1);\n            for (a = f; a <= h; a++) {\n              for (i = 0, u = f; u <= h; u++) i += e[u] * o.get(u, a);\n              for (i = i / e[f] / r.get(f, f - 1), u = f; u <= h; u++)\n                o.set(u, a, o.get(u, a) + i * e[u]);\n            }\n          }\n      }\n      function Zr(t, r, e, o, n) {\n        var i,\n          s,\n          u,\n          a,\n          f,\n          c,\n          h,\n          l,\n          p,\n          v,\n          y,\n          m,\n          g,\n          w,\n          d,\n          b = t - 1,\n          M = t - 1,\n          x = Number.EPSILON,\n          S = 0,\n          k = 0,\n          E = 0,\n          O = 0,\n          R = 0,\n          j = 0,\n          _ = 0,\n          P = 0;\n        for (i = 0; i < t; i++)\n          for (\n            (i < 0 || i > M) && ((e[i] = n.get(i, i)), (r[i] = 0)),\n              s = Math.max(i - 1, 0);\n            s < t;\n            s++\n          )\n            k += Math.abs(n.get(i, s));\n        for (; b >= 0; ) {\n          for (\n            a = b;\n            a > 0 &&\n            (0 ===\n              (j = Math.abs(n.get(a - 1, a - 1)) + Math.abs(n.get(a, a))) &&\n              (j = k),\n            !(Math.abs(n.get(a, a - 1)) < x * j));\n\n          )\n            a--;\n          if (a === b)\n            n.set(b, b, n.get(b, b) + S),\n              (e[b] = n.get(b, b)),\n              (r[b] = 0),\n              b--,\n              (P = 0);\n          else if (a === b - 1) {\n            if (\n              ((h = n.get(b, b - 1) * n.get(b - 1, b)),\n              (O = (E = (n.get(b - 1, b - 1) - n.get(b, b)) / 2) * E + h),\n              (_ = Math.sqrt(Math.abs(O))),\n              n.set(b, b, n.get(b, b) + S),\n              n.set(b - 1, b - 1, n.get(b - 1, b - 1) + S),\n              (l = n.get(b, b)),\n              O >= 0)\n            ) {\n              for (\n                _ = E >= 0 ? E + _ : E - _,\n                  e[b - 1] = l + _,\n                  e[b] = e[b - 1],\n                  0 !== _ && (e[b] = l - h / _),\n                  r[b - 1] = 0,\n                  r[b] = 0,\n                  E = (l = n.get(b, b - 1)) / (j = Math.abs(l) + Math.abs(_)),\n                  O = _ / j,\n                  E /= R = Math.sqrt(E * E + O * O),\n                  O /= R,\n                  s = b - 1;\n                s < t;\n                s++\n              )\n                (_ = n.get(b - 1, s)),\n                  n.set(b - 1, s, O * _ + E * n.get(b, s)),\n                  n.set(b, s, O * n.get(b, s) - E * _);\n              for (i = 0; i <= b; i++)\n                (_ = n.get(i, b - 1)),\n                  n.set(i, b - 1, O * _ + E * n.get(i, b)),\n                  n.set(i, b, O * n.get(i, b) - E * _);\n              for (i = 0; i <= M; i++)\n                (_ = o.get(i, b - 1)),\n                  o.set(i, b - 1, O * _ + E * o.get(i, b)),\n                  o.set(i, b, O * o.get(i, b) - E * _);\n            } else\n              (e[b - 1] = l + E), (e[b] = l + E), (r[b - 1] = _), (r[b] = -_);\n            (b -= 2), (P = 0);\n          } else {\n            if (\n              ((l = n.get(b, b)),\n              (p = 0),\n              (h = 0),\n              a < b &&\n                ((p = n.get(b - 1, b - 1)),\n                (h = n.get(b, b - 1) * n.get(b - 1, b))),\n              10 === P)\n            ) {\n              for (S += l, i = 0; i <= b; i++) n.set(i, i, n.get(i, i) - l);\n              (l = p =\n                0.75 *\n                (j =\n                  Math.abs(n.get(b, b - 1)) + Math.abs(n.get(b - 1, b - 2)))),\n                (h = -0.4375 * j * j);\n            }\n            if (30 === P && (j = (j = (p - l) / 2) * j + h) > 0) {\n              for (\n                j = Math.sqrt(j),\n                  p < l && (j = -j),\n                  j = l - h / ((p - l) / 2 + j),\n                  i = 0;\n                i <= b;\n                i++\n              )\n                n.set(i, i, n.get(i, i) - j);\n              (S += j), (l = p = h = 0.964);\n            }\n            for (\n              P += 1, f = b - 2;\n              f >= a &&\n              ((E =\n                ((R = l - (_ = n.get(f, f))) * (j = p - _) - h) /\n                  n.get(f + 1, f) +\n                n.get(f, f + 1)),\n              (O = n.get(f + 1, f + 1) - _ - R - j),\n              (R = n.get(f + 2, f + 1)),\n              (E /= j = Math.abs(E) + Math.abs(O) + Math.abs(R)),\n              (O /= j),\n              (R /= j),\n              f !== a) &&\n              !(\n                Math.abs(n.get(f, f - 1)) * (Math.abs(O) + Math.abs(R)) <\n                x *\n                  (Math.abs(E) *\n                    (Math.abs(n.get(f - 1, f - 1)) +\n                      Math.abs(_) +\n                      Math.abs(n.get(f + 1, f + 1))))\n              );\n\n            )\n              f--;\n            for (i = f + 2; i <= b; i++)\n              n.set(i, i - 2, 0), i > f + 2 && n.set(i, i - 3, 0);\n            for (\n              u = f;\n              u <= b - 1 &&\n              ((w = u !== b - 1),\n              u !== f &&\n                ((E = n.get(u, u - 1)),\n                (O = n.get(u + 1, u - 1)),\n                (R = w ? n.get(u + 2, u - 1) : 0),\n                0 !== (l = Math.abs(E) + Math.abs(O) + Math.abs(R)) &&\n                  ((E /= l), (O /= l), (R /= l))),\n              0 !== l);\n              u++\n            )\n              if (\n                ((j = Math.sqrt(E * E + O * O + R * R)),\n                E < 0 && (j = -j),\n                0 !== j)\n              ) {\n                for (\n                  u !== f\n                    ? n.set(u, u - 1, -j * l)\n                    : a !== f && n.set(u, u - 1, -n.get(u, u - 1)),\n                    l = (E += j) / j,\n                    p = O / j,\n                    _ = R / j,\n                    O /= E,\n                    R /= E,\n                    s = u;\n                  s < t;\n                  s++\n                )\n                  (E = n.get(u, s) + O * n.get(u + 1, s)),\n                    w &&\n                      ((E += R * n.get(u + 2, s)),\n                      n.set(u + 2, s, n.get(u + 2, s) - E * _)),\n                    n.set(u, s, n.get(u, s) - E * l),\n                    n.set(u + 1, s, n.get(u + 1, s) - E * p);\n                for (i = 0; i <= Math.min(b, u + 3); i++)\n                  (E = l * n.get(i, u) + p * n.get(i, u + 1)),\n                    w &&\n                      ((E += _ * n.get(i, u + 2)),\n                      n.set(i, u + 2, n.get(i, u + 2) - E * R)),\n                    n.set(i, u, n.get(i, u) - E),\n                    n.set(i, u + 1, n.get(i, u + 1) - E * O);\n                for (i = 0; i <= M; i++)\n                  (E = l * o.get(i, u) + p * o.get(i, u + 1)),\n                    w &&\n                      ((E += _ * o.get(i, u + 2)),\n                      o.set(i, u + 2, o.get(i, u + 2) - E * R)),\n                    o.set(i, u, o.get(i, u) - E),\n                    o.set(i, u + 1, o.get(i, u + 1) - E * O);\n              }\n          }\n        }\n        if (0 !== k) {\n          for (b = t - 1; b >= 0; b--)\n            if (((E = e[b]), 0 === (O = r[b])))\n              for (a = b, n.set(b, b, 1), i = b - 1; i >= 0; i--) {\n                for (h = n.get(i, i) - E, R = 0, s = a; s <= b; s++)\n                  R += n.get(i, s) * n.get(s, b);\n                if (r[i] < 0) (_ = h), (j = R);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? n.set(i, b, 0 !== h ? -R / h : -R / (x * k))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (c =\n                        (l * j - _ * R) /\n                        (O = (e[i] - E) * (e[i] - E) + r[i] * r[i])),\n                      n.set(i, b, c),\n                      n.set(\n                        i + 1,\n                        b,\n                        Math.abs(l) > Math.abs(_)\n                          ? (-R - h * c) / l\n                          : (-j - p * c) / _,\n                      )),\n                  x * (c = Math.abs(n.get(i, b))) * c > 1)\n                )\n                  for (s = i; s <= b; s++) n.set(s, b, n.get(s, b) / c);\n              }\n            else if (O < 0)\n              for (\n                a = b - 1,\n                  Math.abs(n.get(b, b - 1)) > Math.abs(n.get(b - 1, b))\n                    ? (n.set(b - 1, b - 1, O / n.get(b, b - 1)),\n                      n.set(b - 1, b, -(n.get(b, b) - E) / n.get(b, b - 1)))\n                    : ((d = $r(\n                        0,\n                        -n.get(b - 1, b),\n                        n.get(b - 1, b - 1) - E,\n                        O,\n                      )),\n                      n.set(b - 1, b - 1, d[0]),\n                      n.set(b - 1, b, d[1])),\n                  n.set(b, b - 1, 0),\n                  n.set(b, b, 1),\n                  i = b - 2;\n                i >= 0;\n                i--\n              ) {\n                for (v = 0, y = 0, s = a; s <= b; s++)\n                  (v += n.get(i, s) * n.get(s, b - 1)),\n                    (y += n.get(i, s) * n.get(s, b));\n                if (((h = n.get(i, i) - E), r[i] < 0))\n                  (_ = h), (R = v), (j = y);\n                else if (\n                  ((a = i),\n                  0 === r[i]\n                    ? ((d = $r(-v, -y, h, O)),\n                      n.set(i, b - 1, d[0]),\n                      n.set(i, b, d[1]))\n                    : ((l = n.get(i, i + 1)),\n                      (p = n.get(i + 1, i)),\n                      (m = (e[i] - E) * (e[i] - E) + r[i] * r[i] - O * O),\n                      (g = 2 * (e[i] - E) * O),\n                      0 === m &&\n                        0 === g &&\n                        (m =\n                          x *\n                          k *\n                          (Math.abs(h) +\n                            Math.abs(O) +\n                            Math.abs(l) +\n                            Math.abs(p) +\n                            Math.abs(_))),\n                      (d = $r(\n                        l * R - _ * v + O * y,\n                        l * j - _ * y - O * v,\n                        m,\n                        g,\n                      )),\n                      n.set(i, b - 1, d[0]),\n                      n.set(i, b, d[1]),\n                      Math.abs(l) > Math.abs(_) + Math.abs(O)\n                        ? (n.set(\n                            i + 1,\n                            b - 1,\n                            (-v - h * n.get(i, b - 1) + O * n.get(i, b)) / l,\n                          ),\n                          n.set(\n                            i + 1,\n                            b,\n                            (-y - h * n.get(i, b) - O * n.get(i, b - 1)) / l,\n                          ))\n                        : ((d = $r(\n                            -R - p * n.get(i, b - 1),\n                            -j - p * n.get(i, b),\n                            _,\n                            O,\n                          )),\n                          n.set(i + 1, b - 1, d[0]),\n                          n.set(i + 1, b, d[1]))),\n                  x *\n                    (c = Math.max(\n                      Math.abs(n.get(i, b - 1)),\n                      Math.abs(n.get(i, b)),\n                    )) *\n                    c >\n                    1)\n                )\n                  for (s = i; s <= b; s++)\n                    n.set(s, b - 1, n.get(s, b - 1) / c),\n                      n.set(s, b, n.get(s, b) / c);\n              }\n          for (i = 0; i < t; i++)\n            if (i < 0 || i > M)\n              for (s = i; s < t; s++) o.set(i, s, n.get(i, s));\n          for (s = t - 1; s >= 0; s--)\n            for (i = 0; i <= M; i++) {\n              for (_ = 0, u = 0; u <= Math.min(s, M); u++)\n                _ += o.get(i, u) * n.get(u, s);\n              o.set(i, s, _);\n            }\n        }\n      }\n      function $r(t, r, e, o) {\n        var n, i;\n        return Math.abs(e) > Math.abs(o)\n          ? [(t + (n = o / e) * r) / (i = e + n * o), (r - n * t) / i]\n          : [((n = e / o) * t + r) / (i = o + n * e), (n * r - t) / i];\n      }\n      function te(t, r) {\n        for (var e = 0; e < r.length; e++) {\n          var o = r[e];\n          (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            \"value\" in o && (o.writable = !0),\n            Object.defineProperty(t, o.key, o);\n        }\n      }\n      var re = (function () {\n        function t(r) {\n          if (\n            ((function (t, r) {\n              if (!(t instanceof r))\n                throw new TypeError(\"Cannot call a class as a function\");\n            })(this, t),\n            !(r = Er.checkMatrix(r)).isSymmetric())\n          )\n            throw new Error(\"Matrix is not symmetric\");\n          var e,\n            o,\n            n,\n            i = r,\n            s = i.rows,\n            u = new K(s, s),\n            a = !0;\n          for (o = 0; o < s; o++) {\n            var f = 0;\n            for (n = 0; n < o; n++) {\n              var c = 0;\n              for (e = 0; e < n; e++) c += u.get(n, e) * u.get(o, e);\n              (c = (i.get(o, n) - c) / u.get(n, n)),\n                u.set(o, n, c),\n                (f += c * c);\n            }\n            for (\n              a &= (f = i.get(o, o) - f) > 0,\n                u.set(o, o, Math.sqrt(Math.max(f, 0))),\n                n = o + 1;\n              n < s;\n              n++\n            )\n              u.set(o, n, 0);\n          }\n          (this.L = u), (this.positiveDefinite = Boolean(a));\n        }\n        var r, e, o;\n        return (\n          (r = t),\n          (e = [\n            {\n              key: \"isPositiveDefinite\",\n              value: function () {\n                return this.positiveDefinite;\n              },\n            },\n            {\n              key: \"solve\",\n              value: function (t) {\n                t = Er.checkMatrix(t);\n                var r = this.L,\n                  e = r.rows;\n                if (t.rows !== e)\n                  throw new Error(\"Matrix dimensions do not match\");\n                if (!1 === this.isPositiveDefinite())\n                  throw new Error(\"Matrix is not positive definite\");\n                var o,\n                  n,\n                  i,\n                  s = t.columns,\n                  u = t.clone();\n                for (i = 0; i < e; i++)\n                  for (n = 0; n < s; n++) {\n                    for (o = 0; o < i; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(i, o));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                for (i = e - 1; i >= 0; i--)\n                  for (n = 0; n < s; n++) {\n                    for (o = i + 1; o < e; o++)\n                      u.set(i, n, u.get(i, n) - u.get(o, n) * r.get(o, i));\n                    u.set(i, n, u.get(i, n) / r.get(i, i));\n                  }\n                return u;\n              },\n            },\n            {\n              key: \"lowerTriangularMatrix\",\n              get: function () {\n                return this.L;\n              },\n            },\n          ]) && te(r.prototype, e),\n          o && te(r, o),\n          t\n        );\n      })();\n      function ee(t, r) {\n        if (!(t instanceof r))\n          throw new TypeError(\"Cannot call a class as a function\");\n      }\n      var oe = function t(r) {\n        var e =\n          arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n        ee(this, t), (r = Er.checkMatrix(r));\n        var o,\n          n = e.Y,\n          i = e.scaleScores,\n          s = void 0 !== i && i,\n          u = e.maxIterations,\n          a = void 0 === u ? 1e3 : u,\n          f = e.terminationCriteria,\n          c = void 0 === f ? 1e-10 : f;\n        if (n) {\n          if (\n            (n =\n              Array.isArray(n) && \"number\" == typeof n[0]\n                ? K.columnVector(n)\n                : Er.checkMatrix(n)).rows !== r.rows\n          )\n            throw new Error(\"Y should have the same number of rows as X\");\n          o = n.getColumnVector(0);\n        } else o = r.getColumnVector(0);\n        for (var h, l, p, v, y = 1, m = 0; m < a && y > c; m++)\n          (p = (p = r\n            .transpose()\n            .mmul(o)\n            .div(o.transpose().mmul(o).get(0, 0))).div(p.norm())),\n            (h = r.mmul(p).div(p.transpose().mmul(p).get(0, 0))),\n            m > 0 && (y = h.clone().sub(v).pow(2).sum()),\n            (v = h.clone()),\n            n\n              ? ((l = (l = n\n                  .transpose()\n                  .mmul(h)\n                  .div(h.transpose().mmul(h).get(0, 0))).div(l.norm())),\n                (o = n.mmul(l).div(l.transpose().mmul(l).get(0, 0))))\n              : (o = h);\n        if (n) {\n          var g = r.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0));\n          g = g.div(g.norm());\n          var w = r.clone().sub(h.clone().mmul(g.transpose())),\n            d = o.transpose().mmul(h).div(h.transpose().mmul(h).get(0, 0)),\n            b = n.clone().sub(h.clone().mulS(d.get(0, 0)).mmul(l.transpose()));\n          (this.t = h),\n            (this.p = g.transpose()),\n            (this.w = p.transpose()),\n            (this.q = l),\n            (this.u = o),\n            (this.s = h.transpose().mmul(h)),\n            (this.xResidual = w),\n            (this.yResidual = b),\n            (this.betas = d);\n        } else\n          (this.w = p.transpose()),\n            (this.s = h.transpose().mmul(h).sqrt()),\n            (this.t = s ? h.clone().div(this.s.get(0, 0)) : h),\n            (this.xResidual = r.sub(h.mmul(p.transpose())));\n      };\n    },\n    11: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.camelize = r.isString = void 0);\n      r.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var o,\n        n,\n        i = /-(\\w)/g;\n      r.camelize =\n        ((o = function (t) {\n          return t.replace(i, function (t, r) {\n            return r ? r.toUpperCase() : \"\";\n          });\n        }),\n        (n = Object.create(null)),\n        function (t) {\n          return n[t] || (n[t] = o(t));\n        });\n    },\n    12: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isArray = void 0),\n        (r.isArray = Array.isArray);\n    },\n    13: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.toNumber = r.isNaN = r.isNumber = void 0);\n      r.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      r.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      r.toNumber = function (t) {\n        var e = parseFloat(t);\n        return r.isNaN(e) ? t : e;\n      };\n    },\n    14: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.traverseTreeUp =\n          r.scaleMatrix =\n          r.getAdjMatrix =\n          r.floydWarshall =\n          r.getDegree =\n            void 0);\n      r.getDegree = function (t, r, e) {\n        for (var o = [], n = 0; n < t; n++) o[n] = 0;\n        return e\n          ? (e.forEach(function (t) {\n              t.source && (o[r[t.source]] += 1),\n                t.target && (o[r[t.target]] += 1);\n            }),\n            o)\n          : o;\n      };\n      r.floydWarshall = function (t) {\n        for (var r = [], e = t.length, o = 0; o < e; o += 1) {\n          r[o] = [];\n          for (var n = 0; n < e; n += 1)\n            o === n\n              ? (r[o][n] = 0)\n              : 0 !== t[o][n] && t[o][n]\n              ? (r[o][n] = t[o][n])\n              : (r[o][n] = 1 / 0);\n        }\n        for (var i = 0; i < e; i += 1)\n          for (o = 0; o < e; o += 1)\n            for (n = 0; n < e; n += 1)\n              r[o][n] > r[o][i] + r[i][n] && (r[o][n] = r[o][i] + r[i][n]);\n        return r;\n      };\n      r.getAdjMatrix = function (t, r) {\n        var e = t.nodes,\n          o = t.edges,\n          n = [],\n          i = {};\n        if (!e) throw new Error(\"invalid nodes data!\");\n        return (\n          e &&\n            e.forEach(function (t, r) {\n              i[t.id] = r;\n              n.push([]);\n            }),\n          o &&\n            o.forEach(function (t) {\n              var e = t.source,\n                o = t.target,\n                s = i[e],\n                u = i[o];\n              (n[s][u] = 1), r || (n[u][s] = 1);\n            }),\n          n\n        );\n      };\n      r.scaleMatrix = function (t, r) {\n        var e = [];\n        return (\n          t.forEach(function (t) {\n            var o = [];\n            t.forEach(function (t) {\n              o.push(t * r);\n            }),\n              e.push(o);\n          }),\n          e\n        );\n      };\n      r.traverseTreeUp = function (t, r) {\n        \"function\" == typeof r &&\n          (function t(r, e) {\n            if (r && r.children)\n              for (var o = r.children.length - 1; o >= 0; o--)\n                if (!t(r.children[o], e)) return;\n            return !!e(r);\n          })(t, r);\n      };\n    },\n    15: function (t, r, e) {\n      \"use strict\";\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var n =\n        (this && this.__assign) ||\n        function () {\n          return (n =\n            Object.assign ||\n            function (t) {\n              for (var r, e = 1, o = arguments.length; e < o; e++)\n                for (var n in (r = arguments[e]))\n                  Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n              return t;\n            }).apply(this, arguments);\n        };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.clone = r.isObject = void 0);\n      r.isObject = function (t) {\n        return null !== t && \"object\" === o(t);\n      };\n      r.clone = function (t) {\n        if (null === t) return t;\n        if (t instanceof Date) return new Date(t.getTime());\n        if (t instanceof Array) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              e.push(t);\n            }),\n            e.map(function (t) {\n              return r.clone(t);\n            })\n          );\n        }\n        if (\"object\" === o(t) && t !== {}) {\n          var i = n({}, t);\n          return (\n            Object.keys(i).forEach(function (t) {\n              i[t] = r.clone(i[t]);\n            }),\n            i\n          );\n        }\n        return t;\n      };\n    },\n    16: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.isFunction = void 0);\n      r.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    181: function (t, r, e) {\n      \"use strict\";\n      var o =\n          (this && this.__createBinding) ||\n          (Object.create\n            ? function (t, r, e, o) {\n                void 0 === o && (o = e),\n                  Object.defineProperty(t, o, {\n                    enumerable: !0,\n                    get: function () {\n                      return r[e];\n                    },\n                  });\n              }\n            : function (t, r, e, o) {\n                void 0 === o && (o = e), (t[o] = r[e]);\n              }),\n        n =\n          (this && this.__exportStar) ||\n          function (t, r) {\n            for (var e in t)\n              \"default\" === e ||\n                Object.prototype.hasOwnProperty.call(r, e) ||\n                o(r, t, e);\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), n(e(410), r);\n    },\n    409: function (t, r, e) {\n      \"use strict\";\n      e.r(r);\n      var o = e(181);\n      r.default = o.RadialLayout;\n    },\n    410: function (t, r, e) {\n      \"use strict\";\n      var o,\n        n =\n          (this && this.__extends) ||\n          ((o = function (t, r) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, r) {\n                  t.__proto__ = r;\n                }) ||\n              function (t, r) {\n                for (var e in r)\n                  Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]);\n              })(t, r);\n          }),\n          function (t, r) {\n            if (\"function\" != typeof r && null !== r)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(r) +\n                  \" is not a constructor or null\",\n              );\n            function e() {\n              this.constructor = t;\n            }\n            o(t, r),\n              (t.prototype =\n                null === r\n                  ? Object.create(r)\n                  : ((e.prototype = r.prototype), new e()));\n          }),\n        i =\n          (this && this.__importDefault) ||\n          function (t) {\n            return t && t.__esModule ? t : { default: t };\n          };\n      Object.defineProperty(r, \"__esModule\", { value: !0 }),\n        (r.RadialLayout = void 0);\n      var s = e(10),\n        u = e(7),\n        a = i(e(411)),\n        f = i(e(412));\n      function c(t, r) {\n        return Math.sqrt(\n          (t[0] - r[0]) * (t[0] - r[0]) + (t[1] - r[1]) * (t[1] - r[1]),\n        );\n      }\n      var h = (function (t) {\n        function r(r) {\n          var e = t.call(this) || this;\n          return (\n            (e.maxIteration = 1e3),\n            (e.focusNode = null),\n            (e.unitRadius = null),\n            (e.linkDistance = 50),\n            (e.preventOverlap = !1),\n            (e.strictRadial = !0),\n            (e.maxPreventOverlapIteration = 200),\n            (e.sortStrength = 10),\n            (e.nodes = []),\n            (e.edges = []),\n            e.updateCfg(r),\n            e\n          );\n        }\n        return (\n          n(r, t),\n          (r.prototype.getDefaultCfg = function () {\n            return {\n              maxIteration: 1e3,\n              focusNode: null,\n              unitRadius: null,\n              linkDistance: 50,\n              preventOverlap: !1,\n              nodeSize: void 0,\n              nodeSpacing: void 0,\n              strictRadial: !0,\n              maxPreventOverlapIteration: 200,\n              sortBy: void 0,\n              sortStrength: 10,\n            };\n          }),\n          (r.prototype.execute = function () {\n            var t = this,\n              r = t.nodes,\n              e = t.edges || [];\n            if (r && 0 !== r.length) {\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n                t.height ||\n                  \"undefined\" == typeof window ||\n                  (t.height = window.innerHeight),\n                t.center || (t.center = [t.width / 2, t.height / 2]);\n              var o = t.center;\n              if (1 === r.length)\n                return (\n                  (r[0].x = o[0]),\n                  (r[0].y = o[1]),\n                  void (t.onLayoutEnd && t.onLayoutEnd())\n                );\n              var n = t.linkDistance,\n                i = null;\n              if (s.isString(t.focusNode)) {\n                for (var u = !1, c = 0; c < r.length; c++)\n                  r[c].id === t.focusNode &&\n                    ((i = r[c]), (t.focusNode = i), (u = !0), (c = r.length));\n                u || (i = null);\n              } else i = t.focusNode;\n              i || ((i = r[0]), (t.focusNode = i));\n              var h,\n                l,\n                p,\n                v =\n                  ((h = r),\n                  (l = i.id),\n                  (p = -1),\n                  h.forEach(function (t, r) {\n                    t.id === l && (p = r);\n                  }),\n                  p);\n              t.focusIndex = v;\n              var y = s.getAdjMatrix({ nodes: r, edges: e }, !1),\n                m = s.floydWarshall(y),\n                g = t.maxToFocus(m, v);\n              t.handleInfinity(m, v, g + 1), (t.distances = m);\n              var w = m[v],\n                d = t.width || 500,\n                b = t.height || 500,\n                M = d - o[0] > o[0] ? o[0] : d - o[0],\n                x = b - o[1] > o[1] ? o[1] : b - o[1];\n              0 === M && (M = d / 2), 0 === x && (x = b / 2);\n              var S = x > M ? M : x,\n                k = Math.max.apply(Math, w),\n                E = [];\n              w.forEach(function (r, e) {\n                t.unitRadius || (t.unitRadius = S / k),\n                  (E[e] = r * t.unitRadius);\n              }),\n                (t.radii = E);\n              var O = t.eIdealDisMatrix();\n              t.eIdealDistances = O;\n              var R = (function (t) {\n                for (\n                  var r = t.length, e = t[0].length, o = [], n = 0;\n                  n < r;\n                  n++\n                ) {\n                  for (var i = [], s = 0; s < e; s++)\n                    0 !== t[n][s] ? i.push(1 / (t[n][s] * t[n][s])) : i.push(0);\n                  o.push(i);\n                }\n                return o;\n              })(O);\n              t.weights = R;\n              var j = new a.default({ linkDistance: n, distances: O }).layout();\n              j.forEach(function (t) {\n                s.isNaN(t[0]) && (t[0] = Math.random() * n),\n                  s.isNaN(t[1]) && (t[1] = Math.random() * n);\n              }),\n                (t.positions = j),\n                j.forEach(function (t, e) {\n                  (r[e].x = t[0] + o[0]), (r[e].y = t[1] + o[1]);\n                }),\n                j.forEach(function (t) {\n                  (t[0] -= j[v][0]), (t[1] -= j[v][1]);\n                }),\n                t.run();\n              var _,\n                P = t.preventOverlap,\n                T = t.nodeSize,\n                A = t.strictRadial;\n              if (P) {\n                var I,\n                  N = t.nodeSpacing;\n                (I = s.isNumber(N)\n                  ? function () {\n                      return N;\n                    }\n                  : s.isFunction(N)\n                  ? N\n                  : function () {\n                      return 0;\n                    }),\n                  (_ = T\n                    ? s.isArray(T)\n                      ? function (t) {\n                          return (T[0] > T[1] ? T[0] : T[1]) + I(t);\n                        }\n                      : function (t) {\n                          return T + I(t);\n                        }\n                    : function (t) {\n                        return t.size\n                          ? s.isArray(t.size)\n                            ? (t.size[0] > t.size[1] ? t.size[0] : t.size[1]) +\n                              I(t)\n                            : t.size + I(t)\n                          : 10 + I(t);\n                      });\n                var C = {\n                    nodes: r,\n                    nodeSizeFunc: _,\n                    adjMatrix: y,\n                    positions: j,\n                    radii: E,\n                    height: b,\n                    width: d,\n                    strictRadial: A,\n                    focusID: v,\n                    iterations: t.maxPreventOverlapIteration || 200,\n                    k: j.length / 4.5,\n                  },\n                  D = new f.default(C);\n                j = D.layout();\n              }\n              return (\n                j.forEach(function (t, e) {\n                  (r[e].x = t[0] + o[0]), (r[e].y = t[1] + o[1]);\n                }),\n                t.onLayoutEnd && t.onLayoutEnd(),\n                { nodes: r, edges: e }\n              );\n            }\n            t.onLayoutEnd && t.onLayoutEnd();\n          }),\n          (r.prototype.run = function () {\n            for (\n              var t = this.maxIteration,\n                r = this.positions || [],\n                e = this.weights || [],\n                o = this.eIdealDistances || [],\n                n = this.radii || [],\n                i = 0;\n              i <= t;\n              i++\n            ) {\n              var s = i / t;\n              this.oneIteration(s, r, n, o, e);\n            }\n          }),\n          (r.prototype.oneIteration = function (t, r, e, o, n) {\n            var i = 1 - t,\n              s = this.focusIndex;\n            r.forEach(function (u, a) {\n              var f = c(u, [0, 0]),\n                h = 0 === f ? 0 : 1 / f;\n              if (a !== s) {\n                var l = 0,\n                  p = 0,\n                  v = 0;\n                r.forEach(function (t, r) {\n                  if (a !== r) {\n                    var e = c(u, t),\n                      i = 0 === e ? 0 : 1 / e,\n                      s = o[r][a];\n                    (v += n[a][r]),\n                      (l += n[a][r] * (t[0] + s * (u[0] - t[0]) * i)),\n                      (p += n[a][r] * (t[1] + s * (u[1] - t[1]) * i));\n                  }\n                });\n                var y = 0 === e[a] ? 0 : 1 / e[a];\n                (v *= i),\n                  (v += t * y * y),\n                  (l *= i),\n                  (l += t * y * u[0] * h),\n                  (u[0] = l / v),\n                  (p *= i),\n                  (p += t * y * u[1] * h),\n                  (u[1] = p / v);\n              }\n            });\n          }),\n          (r.prototype.eIdealDisMatrix = function () {\n            var t = this,\n              r = t.nodes;\n            if (!r) return [];\n            var e = t.distances,\n              o = t.linkDistance,\n              n = t.radii || [],\n              i = t.unitRadius || 50,\n              u = [];\n            return (\n              e &&\n                e.forEach(function (e, a) {\n                  var f = [];\n                  e.forEach(function (e, u) {\n                    if (a === u) f.push(0);\n                    else if (n[a] === n[u])\n                      if (\"data\" === t.sortBy)\n                        f.push(\n                          (e * (Math.abs(a - u) * t.sortStrength)) / (n[a] / i),\n                        );\n                      else if (t.sortBy) {\n                        var c = r[a][t.sortBy] || 0,\n                          h = r[u][t.sortBy] || 0;\n                        s.isString(c) && (c = c.charCodeAt(0)),\n                          s.isString(h) && (h = h.charCodeAt(0)),\n                          f.push(\n                            (e * (Math.abs(c - h) * t.sortStrength)) /\n                              (n[a] / i),\n                          );\n                      } else f.push((e * o) / (n[a] / i));\n                    else {\n                      var l = (o + i) / 2;\n                      f.push(e * l);\n                    }\n                  }),\n                    u.push(f);\n                }),\n              u\n            );\n          }),\n          (r.prototype.handleInfinity = function (t, r, e) {\n            for (var o = t.length, n = 0; n < o; n++)\n              if (t[r][n] === 1 / 0) {\n                (t[r][n] = e), (t[n][r] = e);\n                for (var i = 0; i < o; i++)\n                  t[n][i] !== 1 / 0 &&\n                    t[r][i] === 1 / 0 &&\n                    ((t[r][i] = e + t[n][i]), (t[i][r] = e + t[n][i]));\n              }\n            for (n = 0; n < o; n++)\n              if (n !== r)\n                for (i = 0; i < o; i++)\n                  if (t[n][i] === 1 / 0) {\n                    var s = Math.abs(t[r][n] - t[r][i]);\n                    (s = 0 === s ? 1 : s), (t[n][i] = s);\n                  }\n          }),\n          (r.prototype.maxToFocus = function (t, r) {\n            for (var e = 0, o = 0; o < t[r].length; o++)\n              t[r][o] !== 1 / 0 && (e = t[r][o] > e ? t[r][o] : e);\n            return e;\n          }),\n          (r.prototype.getType = function () {\n            return \"radial\";\n          }),\n          r\n        );\n      })(u.Base);\n      r.RadialLayout = h;\n    },\n    411: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 });\n      var o = e(102),\n        n = (function () {\n          function t(t) {\n            (this.distances = t.distances),\n              (this.dimension = t.dimension || 2),\n              (this.linkDistance = t.linkDistance);\n          }\n          return (\n            (t.prototype.layout = function () {\n              var t = this.dimension,\n                r = this.distances,\n                e = this.linkDistance;\n              try {\n                var n = o.Matrix.mul(o.Matrix.pow(r, 2), -0.5),\n                  i = n.mean(\"row\"),\n                  s = n.mean(\"column\"),\n                  u = n.mean();\n                n.add(u).subRowVector(i).subColumnVector(s);\n                var a = new o.SingularValueDecomposition(n),\n                  f = o.Matrix.sqrt(a.diagonalMatrix).diagonal();\n                return a.leftSingularVectors.toJSON().map(function (r) {\n                  return o.Matrix.mul([r], [f]).toJSON()[0].splice(0, t);\n                });\n              } catch (t) {\n                for (var c = [], h = 0; h < r.length; h++) {\n                  var l = Math.random() * e,\n                    p = Math.random() * e;\n                  c.push([l, p]);\n                }\n                return c;\n              }\n            }),\n            t\n          );\n        })();\n      r.default = n;\n    },\n    412: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 });\n      var o = (function () {\n        function t(t) {\n          (this.disp = []),\n            (this.positions = t.positions),\n            (this.adjMatrix = t.adjMatrix),\n            (this.focusID = t.focusID),\n            (this.radii = t.radii),\n            (this.iterations = t.iterations || 10),\n            (this.height = t.height || 10),\n            (this.width = t.width || 10),\n            (this.speed = t.speed || 100),\n            (this.gravity = t.gravity || 10),\n            (this.nodeSizeFunc = t.nodeSizeFunc),\n            (this.k = t.k || 5),\n            (this.strictRadial = t.strictRadial),\n            (this.nodes = t.nodes);\n        }\n        return (\n          (t.prototype.layout = function () {\n            var t = this.positions,\n              r = [],\n              e = this.iterations,\n              o = this.width / 10;\n            (this.maxDisplace = o), (this.disp = r);\n            for (var n = 0; n < e; n++)\n              t.forEach(function (t, e) {\n                r[e] = { x: 0, y: 0 };\n              }),\n                this.getRepulsion(),\n                this.updatePositions();\n            return t;\n          }),\n          (t.prototype.getRepulsion = function () {\n            var t = this,\n              r = t.positions,\n              e = t.nodes,\n              o = t.disp,\n              n = t.k,\n              i = t.radii || [];\n            r.forEach(function (s, u) {\n              (o[u] = { x: 0, y: 0 }),\n                r.forEach(function (r, a) {\n                  if (u !== a && i[u] === i[a]) {\n                    var f = s[0] - r[0],\n                      c = s[1] - r[1],\n                      h = Math.sqrt(f * f + c * c);\n                    if (0 === h) {\n                      h = 1;\n                      var l = u > a ? 1 : -1;\n                      (f = 0.01 * l), (c = 0.01 * l);\n                    }\n                    if (\n                      h <\n                      t.nodeSizeFunc(e[u]) / 2 + t.nodeSizeFunc(e[a]) / 2\n                    ) {\n                      var p = (n * n) / h;\n                      (o[u].x += (f / h) * p), (o[u].y += (c / h) * p);\n                    }\n                  }\n                });\n            });\n          }),\n          (t.prototype.updatePositions = function () {\n            var t = this.positions,\n              r = this.disp,\n              e = this.speed,\n              o = this.strictRadial,\n              n = this.focusID,\n              i = this.maxDisplace || this.width / 10;\n            o &&\n              r.forEach(function (r, e) {\n                var o = t[e][0] - t[n][0],\n                  i = t[e][1] - t[n][1],\n                  s = Math.sqrt(o * o + i * i),\n                  u = i / s,\n                  a = -o / s,\n                  f = Math.sqrt(r.x * r.x + r.y * r.y),\n                  c = Math.acos((u * r.x + a * r.y) / f);\n                c > Math.PI / 2 && ((c -= Math.PI / 2), (u *= -1), (a *= -1));\n                var h = Math.cos(c) * f;\n                (r.x = u * h), (r.y = a * h);\n              });\n            var s = this.radii;\n            t.forEach(function (u, a) {\n              if (a !== n) {\n                var f = Math.sqrt(r[a].x * r[a].x + r[a].y * r[a].y);\n                if (f > 0 && a !== n) {\n                  var c = Math.min(i * (e / 800), f);\n                  if (\n                    ((u[0] += (r[a].x / f) * c), (u[1] += (r[a].y / f) * c), o)\n                  ) {\n                    var h = u[0] - t[n][0],\n                      l = u[1] - t[n][1],\n                      p = Math.sqrt(h * h + l * l);\n                    (h = (h / p) * s[a]),\n                      (l = (l / p) * s[a]),\n                      (u[0] = t[n][0] + h),\n                      (u[1] = t[n][1] + l);\n                  }\n                }\n              }\n            });\n          }),\n          t\n        );\n      })();\n      r.default = o;\n    },\n    7: function (t, r, e) {\n      \"use strict\";\n      Object.defineProperty(r, \"__esModule\", { value: !0 }), (r.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      r.Base = o;\n    },\n  }).default;\n});\n//# sourceMappingURL=radialLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/extends/layout/randomLayout.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.f6 = e())\n    : (t.f6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(o) {\n      if (e[o]) return e[o].exports;\n      var r = (e[o] = { i: o, l: !1, exports: {} });\n      return t[o].call(r.exports, r, r.exports, n), (r.l = !0), r.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, o) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: o });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var o = Object.create(null);\n        if (\n          (n.r(o),\n          Object.defineProperty(o, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var r in t)\n            n.d(\n              o,\n              r,\n              function (e) {\n                return t[e];\n              }.bind(null, r),\n            );\n        return o;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 413))\n    );\n  })({\n    413: function (t, e, n) {\n      \"use strict\";\n      n.r(e);\n      var o = n(57);\n      e.default = o.RandomLayout;\n    },\n    57: function (t, e, n) {\n      \"use strict\";\n      var o,\n        r =\n          (this && this.__extends) ||\n          ((o = function (t, e) {\n            return (o =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            o(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.RandomLayout = void 0);\n      var i = (function (t) {\n        function e(e) {\n          var n = t.call(this) || this;\n          return (\n            (n.center = [0, 0]),\n            (n.width = 300),\n            (n.height = 300),\n            (n.nodes = []),\n            (n.edges = []),\n            (n.onLayoutEnd = function () {}),\n            n.updateCfg(e),\n            n\n          );\n        }\n        return (\n          r(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { center: [0, 0], width: 300, height: 300 };\n          }),\n          (e.prototype.execute = function () {\n            var t = this,\n              e = t.nodes,\n              n = t.center;\n            return (\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n              t.height ||\n                \"undefined\" == typeof window ||\n                (t.height = window.innerHeight),\n              e &&\n                e.forEach(function (e) {\n                  (e.x = 0.9 * (Math.random() - 0.5) * t.width + n[0]),\n                    (e.y = 0.9 * (Math.random() - 0.5) * t.height + n[1]);\n                }),\n              t.onLayoutEnd && t.onLayoutEnd(),\n              { nodes: e, edges: this.edges }\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"random\";\n          }),\n          e\n        );\n      })(n(7).Base);\n      e.RandomLayout = i;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var o = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function (t) {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = o;\n    },\n  }).default;\n});\n//# sourceMappingURL=randomLayout.js.map\n"
  },
  {
    "path": "packages/f6-wx/src/index.js",
    "content": "!(function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module\n    ? (module.exports = e())\n    : \"function\" == typeof define && define.amd\n    ? define([], e)\n    : \"object\" == typeof exports\n    ? (exports.F6 = e())\n    : (t.F6 = e());\n})(this, function () {\n  return (function (t) {\n    var e = {};\n    function n(r) {\n      if (e[r]) return e[r].exports;\n      var i = (e[r] = { i: r, l: !1, exports: {} });\n      return t[r].call(i.exports, i, i.exports, n), (i.l = !0), i.exports;\n    }\n    return (\n      (n.m = t),\n      (n.c = e),\n      (n.d = function (t, e, r) {\n        n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });\n      }),\n      (n.r = function (t) {\n        \"undefined\" != typeof Symbol &&\n          Symbol.toStringTag &&\n          Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }),\n          Object.defineProperty(t, \"__esModule\", { value: !0 });\n      }),\n      (n.t = function (t, e) {\n        if ((1 & e && (t = n(t)), 8 & e)) return t;\n        if (4 & e && \"object\" == typeof t && t && t.__esModule) return t;\n        var r = Object.create(null);\n        if (\n          (n.r(r),\n          Object.defineProperty(r, \"default\", { enumerable: !0, value: t }),\n          2 & e && \"string\" != typeof t)\n        )\n          for (var i in t)\n            n.d(\n              r,\n              i,\n              function (e) {\n                return t[e];\n              }.bind(null, i),\n            );\n        return r;\n      }),\n      (n.n = function (t) {\n        var e =\n          t && t.__esModule\n            ? function () {\n                return t.default;\n              }\n            : function () {\n                return t;\n              };\n        return n.d(e, \"a\", e), e;\n      }),\n      (n.o = function (t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n      }),\n      (n.p = \"\"),\n      n((n.s = 205))\n    );\n  })({\n    0: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"contains\", function () {\n          return i;\n        }),\n        n.d(e, \"includes\", function () {\n          return i;\n        }),\n        n.d(e, \"difference\", function () {\n          return a;\n        }),\n        n.d(e, \"find\", function () {\n          return x;\n        }),\n        n.d(e, \"findIndex\", function () {\n          return S;\n        }),\n        n.d(e, \"firstValue\", function () {\n          return w;\n        }),\n        n.d(e, \"flatten\", function () {\n          return O;\n        }),\n        n.d(e, \"flattenDeep\", function () {\n          return M;\n        }),\n        n.d(e, \"getRange\", function () {\n          return C;\n        }),\n        n.d(e, \"pull\", function () {\n          return I;\n        }),\n        n.d(e, \"pullAt\", function () {\n          return N;\n        }),\n        n.d(e, \"reduce\", function () {\n          return B;\n        }),\n        n.d(e, \"remove\", function () {\n          return L;\n        }),\n        n.d(e, \"sortBy\", function () {\n          return _;\n        }),\n        n.d(e, \"union\", function () {\n          return F;\n        }),\n        n.d(e, \"uniq\", function () {\n          return R;\n        }),\n        n.d(e, \"valuesOfKey\", function () {\n          return Y;\n        }),\n        n.d(e, \"head\", function () {\n          return X;\n        }),\n        n.d(e, \"last\", function () {\n          return z;\n        }),\n        n.d(e, \"startsWith\", function () {\n          return W;\n        }),\n        n.d(e, \"endsWith\", function () {\n          return q;\n        }),\n        n.d(e, \"filter\", function () {\n          return o;\n        }),\n        n.d(e, \"every\", function () {\n          return V;\n        }),\n        n.d(e, \"some\", function () {\n          return G;\n        }),\n        n.d(e, \"group\", function () {\n          return K;\n        }),\n        n.d(e, \"groupBy\", function () {\n          return U;\n        }),\n        n.d(e, \"groupToMap\", function () {\n          return Z;\n        }),\n        n.d(e, \"getWrapBehavior\", function () {\n          return $;\n        }),\n        n.d(e, \"wrapBehavior\", function () {\n          return Q;\n        }),\n        n.d(e, \"number2color\", function () {\n          return tt;\n        }),\n        n.d(e, \"parseRadius\", function () {\n          return et;\n        }),\n        n.d(e, \"clamp\", function () {\n          return nt;\n        }),\n        n.d(e, \"fixedBase\", function () {\n          return rt;\n        }),\n        n.d(e, \"isDecimal\", function () {\n          return ot;\n        }),\n        n.d(e, \"isEven\", function () {\n          return at;\n        }),\n        n.d(e, \"isInteger\", function () {\n          return st;\n        }),\n        n.d(e, \"isNegative\", function () {\n          return ct;\n        }),\n        n.d(e, \"isNumberEqual\", function () {\n          return ut;\n        }),\n        n.d(e, \"isOdd\", function () {\n          return ht;\n        }),\n        n.d(e, \"isPositive\", function () {\n          return lt;\n        }),\n        n.d(e, \"max\", function () {\n          return k;\n        }),\n        n.d(e, \"maxBy\", function () {\n          return ft;\n        }),\n        n.d(e, \"min\", function () {\n          return j;\n        }),\n        n.d(e, \"minBy\", function () {\n          return dt;\n        }),\n        n.d(e, \"mod\", function () {\n          return pt;\n        }),\n        n.d(e, \"toDegree\", function () {\n          return vt;\n        }),\n        n.d(e, \"toInteger\", function () {\n          return yt;\n        }),\n        n.d(e, \"toRadian\", function () {\n          return bt;\n        }),\n        n.d(e, \"forIn\", function () {\n          return xt;\n        }),\n        n.d(e, \"has\", function () {\n          return St;\n        }),\n        n.d(e, \"hasKey\", function () {\n          return wt;\n        }),\n        n.d(e, \"hasValue\", function () {\n          return Mt;\n        }),\n        n.d(e, \"keys\", function () {\n          return g;\n        }),\n        n.d(e, \"isMatch\", function () {\n          return v;\n        }),\n        n.d(e, \"values\", function () {\n          return Ot;\n        }),\n        n.d(e, \"lowerCase\", function () {\n          return jt;\n        }),\n        n.d(e, \"lowerFirst\", function () {\n          return Ct;\n        }),\n        n.d(e, \"substitute\", function () {\n          return Et;\n        }),\n        n.d(e, \"upperCase\", function () {\n          return Pt;\n        }),\n        n.d(e, \"upperFirst\", function () {\n          return At;\n        }),\n        n.d(e, \"getType\", function () {\n          return Tt;\n        }),\n        n.d(e, \"isArguments\", function () {\n          return Nt;\n        }),\n        n.d(e, \"isArray\", function () {\n          return l;\n        }),\n        n.d(e, \"isArrayLike\", function () {\n          return r;\n        }),\n        n.d(e, \"isBoolean\", function () {\n          return Bt;\n        }),\n        n.d(e, \"isDate\", function () {\n          return Lt;\n        }),\n        n.d(e, \"isError\", function () {\n          return Dt;\n        }),\n        n.d(e, \"isFunction\", function () {\n          return u;\n        }),\n        n.d(e, \"isFinite\", function () {\n          return _t;\n        }),\n        n.d(e, \"isNil\", function () {\n          return h;\n        }),\n        n.d(e, \"isNull\", function () {\n          return Rt;\n        }),\n        n.d(e, \"isNumber\", function () {\n          return it;\n        }),\n        n.d(e, \"isObject\", function () {\n          return d;\n        }),\n        n.d(e, \"isObjectLike\", function () {\n          return m;\n        }),\n        n.d(e, \"isPlainObject\", function () {\n          return b;\n        }),\n        n.d(e, \"isPrototype\", function () {\n          return Yt;\n        }),\n        n.d(e, \"isRegExp\", function () {\n          return Xt;\n        }),\n        n.d(e, \"isString\", function () {\n          return D;\n        }),\n        n.d(e, \"isType\", function () {\n          return c;\n        }),\n        n.d(e, \"isUndefined\", function () {\n          return zt;\n        }),\n        n.d(e, \"isElement\", function () {\n          return Wt;\n        }),\n        n.d(e, \"requestAnimationFrame\", function () {\n          return qt;\n        }),\n        n.d(e, \"clearAnimationFrame\", function () {\n          return Vt;\n        }),\n        n.d(e, \"augment\", function () {\n          return Ut;\n        }),\n        n.d(e, \"clone\", function () {\n          return Kt;\n        }),\n        n.d(e, \"debounce\", function () {\n          return $t;\n        }),\n        n.d(e, \"memoize\", function () {\n          return Qt;\n        }),\n        n.d(e, \"deepMix\", function () {\n          return te;\n        }),\n        n.d(e, \"each\", function () {\n          return p;\n        }),\n        n.d(e, \"extend\", function () {\n          return ee;\n        }),\n        n.d(e, \"indexOf\", function () {\n          return ne;\n        }),\n        n.d(e, \"isEmpty\", function () {\n          return ie;\n        }),\n        n.d(e, \"isEqual\", function () {\n          return oe;\n        }),\n        n.d(e, \"isEqualWith\", function () {\n          return ae;\n        }),\n        n.d(e, \"map\", function () {\n          return se;\n        }),\n        n.d(e, \"mapValues\", function () {\n          return ue;\n        }),\n        n.d(e, \"mix\", function () {\n          return Ht;\n        }),\n        n.d(e, \"assign\", function () {\n          return Ht;\n        }),\n        n.d(e, \"get\", function () {\n          return he;\n        }),\n        n.d(e, \"set\", function () {\n          return le;\n        }),\n        n.d(e, \"pick\", function () {\n          return de;\n        }),\n        n.d(e, \"omit\", function () {\n          return pe;\n        }),\n        n.d(e, \"throttle\", function () {\n          return ge;\n        }),\n        n.d(e, \"toArray\", function () {\n          return ve;\n        }),\n        n.d(e, \"toString\", function () {\n          return kt;\n        }),\n        n.d(e, \"uniqueId\", function () {\n          return me;\n        }),\n        n.d(e, \"noop\", function () {\n          return be;\n        }),\n        n.d(e, \"identity\", function () {\n          return xe;\n        }),\n        n.d(e, \"size\", function () {\n          return Se;\n        }),\n        n.d(e, \"measureTextWidth\", function () {\n          return Me;\n        }),\n        n.d(e, \"getEllipsisText\", function () {\n          return ke;\n        }),\n        n.d(e, \"Cache\", function () {\n          return je;\n        });\n      var r = function (t) {\n          return null !== t && \"function\" != typeof t && isFinite(t.length);\n        },\n        i = function (t, e) {\n          return !!r(t) && t.indexOf(e) > -1;\n        },\n        o = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            e(o, i) && n.push(o);\n          }\n          return n;\n        },\n        a = function (t, e) {\n          return (\n            void 0 === e && (e = []),\n            o(t, function (t) {\n              return !i(e, t);\n            })\n          );\n        },\n        s = {}.toString,\n        c = function (t, e) {\n          return s.call(t) === \"[object \" + e + \"]\";\n        },\n        u = function (t) {\n          return c(t, \"Function\");\n        },\n        h = function (t) {\n          return null == t;\n        },\n        l = function (t) {\n          return Array.isArray ? Array.isArray(t) : c(t, \"Array\");\n        };\n      function f(t) {\n        return (f =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var d = function (t) {\n        var e = f(t);\n        return (null !== t && \"object\" === e) || \"function\" === e;\n      };\n      var p = function (t, e) {\n          if (t)\n            if (l(t))\n              for (var n = 0, r = t.length; n < r && !1 !== e(t[n], n); n++);\n            else if (d(t))\n              for (var i in t)\n                if (t.hasOwnProperty(i) && !1 === e(t[i], i)) break;\n        },\n        g = Object.keys\n          ? function (t) {\n              return Object.keys(t);\n            }\n          : function (t) {\n              var e = [];\n              return (\n                p(t, function (n, r) {\n                  (u(t) && \"prototype\" === r) || e.push(r);\n                }),\n                e\n              );\n            };\n      var v = function (t, e) {\n        var n = g(e),\n          r = n.length;\n        if (h(t)) return !r;\n        for (var i = 0; i < r; i += 1) {\n          var o = n[i];\n          if (e[o] !== t[o] || !(o in t)) return !1;\n        }\n        return !0;\n      };\n      function y(t) {\n        return (y =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var m = function (t) {\n          return \"object\" === y(t) && null !== t;\n        },\n        b = function (t) {\n          if (!m(t) || !c(t, \"Object\")) return !1;\n          if (null === Object.getPrototypeOf(t)) return !0;\n          for (var e = t; null !== Object.getPrototypeOf(e); )\n            e = Object.getPrototypeOf(e);\n          return Object.getPrototypeOf(t) === e;\n        };\n      var x = function (t, e) {\n        if (!l(t)) return null;\n        var n;\n        if (\n          (u(e) && (n = e),\n          b(e) &&\n            (n = function (t) {\n              return v(t, e);\n            }),\n          n)\n        )\n          for (var r = 0; r < t.length; r += 1) if (n(t[r])) return t[r];\n        return null;\n      };\n      var S = function (t, e, n) {\n          void 0 === n && (n = 0);\n          for (var r = n; r < t.length; r++) if (e(t[r], r)) return r;\n          return -1;\n        },\n        w = function (t, e) {\n          for (var n = null, r = 0; r < t.length; r++) {\n            var i = t[r][e];\n            if (!h(i)) {\n              n = l(i) ? i[0] : i;\n              break;\n            }\n          }\n          return n;\n        },\n        O = function (t) {\n          if (!l(t)) return [];\n          for (var e = [], n = 0; n < t.length; n++) e = e.concat(t[n]);\n          return e;\n        },\n        M = function t(e, n) {\n          if ((void 0 === n && (n = []), l(e)))\n            for (var r = 0; r < e.length; r += 1) t(e[r], n);\n          else n.push(e);\n          return n;\n        },\n        k = function (t) {\n          if (l(t))\n            return t.reduce(function (t, e) {\n              return Math.max(t, e);\n            }, t[0]);\n        },\n        j = function (t) {\n          if (l(t))\n            return t.reduce(function (t, e) {\n              return Math.min(t, e);\n            }, t[0]);\n        },\n        C = function (t) {\n          var e = t.filter(function (t) {\n            return !isNaN(t);\n          });\n          if (!e.length) return { min: 0, max: 0 };\n          if (l(t[0])) {\n            for (var n = [], r = 0; r < t.length; r++) n = n.concat(t[r]);\n            e = n;\n          }\n          var i = k(e);\n          return { min: j(e), max: i };\n        },\n        E = Array.prototype,\n        P = E.splice,\n        A = E.indexOf,\n        I = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r++)\n            for (var i = e[r], o = -1; (o = A.call(t, i)) > -1; )\n              P.call(t, o, 1);\n          return t;\n        },\n        T = Array.prototype.splice,\n        N = function (t, e) {\n          if (!r(t)) return [];\n          for (var n = t ? e.length : 0, i = n - 1; n--; ) {\n            var o = void 0,\n              a = e[n];\n            (n !== i && a === o) || ((o = a), T.call(t, a, 1));\n          }\n          return t;\n        },\n        B = function (t, e, n) {\n          if (!l(t) && !b(t)) return t;\n          var r = n;\n          return (\n            p(t, function (t, n) {\n              r = e(r, t, n);\n            }),\n            r\n          );\n        },\n        L = function (t, e) {\n          var n = [];\n          if (!r(t)) return n;\n          for (var i = -1, o = [], a = t.length; ++i < a; ) {\n            var s = t[i];\n            e(s, i, t) && (n.push(s), o.push(i));\n          }\n          return N(t, o), n;\n        },\n        D = function (t) {\n          return c(t, \"String\");\n        };\n      var _ = function (t, e) {\n        var n;\n        if (u(e))\n          n = function (t, n) {\n            return e(t) - e(n);\n          };\n        else {\n          var r = [];\n          D(e) ? r.push(e) : l(e) && (r = e),\n            (n = function (t, e) {\n              for (var n = 0; n < r.length; n += 1) {\n                var i = r[n];\n                if (t[i] > e[i]) return 1;\n                if (t[i] < e[i]) return -1;\n              }\n              return 0;\n            });\n        }\n        return t.sort(n), t;\n      };\n      function R(t, e) {\n        void 0 === e && (e = new Map());\n        var n = [];\n        if (Array.isArray(t))\n          for (var r = 0, i = t.length; r < i; r++) {\n            var o = t[r];\n            e.has(o) || (n.push(o), e.set(o, !0));\n          }\n        return n;\n      }\n      var F = function () {\n          for (var t = [], e = 0; e < arguments.length; e++)\n            t[e] = arguments[e];\n          return R([].concat.apply([], t));\n        },\n        Y = function (t, e) {\n          for (var n = [], r = {}, i = 0; i < t.length; i++) {\n            var o = t[i][e];\n            if (!h(o)) {\n              l(o) || (o = [o]);\n              for (var a = 0; a < o.length; a++) {\n                var s = o[a];\n                r[s] || (n.push(s), (r[s] = !0));\n              }\n            }\n          }\n          return n;\n        };\n      function X(t) {\n        if (r(t)) return t[0];\n      }\n      function z(t) {\n        if (r(t)) {\n          return t[t.length - 1];\n        }\n      }\n      var W = function (t, e) {\n        return !(!l(t) && !D(t)) && t[0] === e;\n      };\n      var q = function (t, e) {\n          return !(!l(t) && !D(t)) && t[t.length - 1] === e;\n        },\n        V = function (t, e) {\n          for (var n = 0; n < t.length; n++) if (!e(t[n], n)) return !1;\n          return !0;\n        },\n        G = function (t, e) {\n          for (var n = 0; n < t.length; n++) if (e(t[n], n)) return !0;\n          return !1;\n        },\n        H = Object.prototype.hasOwnProperty;\n      var U = function (t, e) {\n        if (!e || !l(t)) return {};\n        for (\n          var n,\n            r = {},\n            i = u(e)\n              ? e\n              : function (t) {\n                  return t[e];\n                },\n            o = 0;\n          o < t.length;\n          o++\n        ) {\n          var a = t[o];\n          (n = i(a)), H.call(r, n) ? r[n].push(a) : (r[n] = [a]);\n        }\n        return r;\n      };\n      function Z(t, e) {\n        if (!e) return { 0: t };\n        if (!u(e)) {\n          var n = l(e) ? e : e.replace(/\\s+/g, \"\").split(\"*\");\n          e = function (t) {\n            for (var e = \"_\", r = 0, i = n.length; r < i; r++)\n              e += t[n[r]] && t[n[r]].toString();\n            return e;\n          };\n        }\n        return U(t, e);\n      }\n      var K = function (t, e) {\n        if (!e) return [t];\n        var n = Z(t, e),\n          r = [];\n        for (var i in n) r.push(n[i]);\n        return r;\n      };\n      var $ = function (t, e) {\n        return t[\"_wrap_\" + e];\n      };\n      var Q = function (t, e) {\n          if (t[\"_wrap_\" + e]) return t[\"_wrap_\" + e];\n          var n = function (n) {\n            t[e](n);\n          };\n          return (t[\"_wrap_\" + e] = n), n;\n        },\n        J = {};\n      var tt = function (t) {\n        var e = J[t];\n        if (!e) {\n          for (var n = t.toString(16), r = n.length; r < 6; r++) n = \"0\" + n;\n          (e = \"#\" + n), (J[t] = e);\n        }\n        return e;\n      };\n      var et = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          return (\n            l(t)\n              ? 1 === t.length\n                ? (e = n = r = i = t[0])\n                : 2 === t.length\n                ? ((e = r = t[0]), (n = i = t[1]))\n                : 3 === t.length\n                ? ((e = t[0]), (n = i = t[1]), (r = t[2]))\n                : ((e = t[0]), (n = t[1]), (r = t[2]), (i = t[3]))\n              : (e = n = r = i = t),\n            { r1: e, r2: n, r3: r, r4: i }\n          );\n        },\n        nt = function (t, e, n) {\n          return t < e ? e : t > n ? n : t;\n        },\n        rt = function (t, e) {\n          var n = e.toString(),\n            r = n.indexOf(\".\");\n          if (-1 === r) return Math.round(t);\n          var i = n.substr(r + 1).length;\n          return i > 20 && (i = 20), parseFloat(t.toFixed(i));\n        },\n        it = function (t) {\n          return c(t, \"Number\");\n        },\n        ot = function (t) {\n          return it(t) && t % 1 != 0;\n        },\n        at = function (t) {\n          return it(t) && t % 2 == 0;\n        },\n        st = Number.isInteger\n          ? Number.isInteger\n          : function (t) {\n              return it(t) && t % 1 == 0;\n            },\n        ct = function (t) {\n          return it(t) && t < 0;\n        };\n      function ut(t, e, n) {\n        return void 0 === n && (n = 1e-5), Math.abs(t - e) < n;\n      }\n      var ht = function (t) {\n          return it(t) && t % 2 != 0;\n        },\n        lt = function (t) {\n          return it(t) && t > 0;\n        },\n        ft = function (t, e) {\n          if (l(t)) {\n            for (var n, r = -1 / 0, i = 0; i < t.length; i++) {\n              var o = t[i],\n                a = u(e) ? e(o) : o[e];\n              a > r && ((n = o), (r = a));\n            }\n            return n;\n          }\n        },\n        dt = function (t, e) {\n          if (l(t)) {\n            for (var n, r = 1 / 0, i = 0; i < t.length; i++) {\n              var o = t[i],\n                a = u(e) ? e(o) : o[e];\n              a < r && ((n = o), (r = a));\n            }\n            return n;\n          }\n        },\n        pt = function (t, e) {\n          return ((t % e) + e) % e;\n        },\n        gt = 180 / Math.PI,\n        vt = function (t) {\n          return gt * t;\n        },\n        yt = parseInt,\n        mt = Math.PI / 180,\n        bt = function (t) {\n          return mt * t;\n        },\n        xt = p,\n        St = function (t, e) {\n          return t.hasOwnProperty(e);\n        },\n        wt = St,\n        Ot = Object.values\n          ? function (t) {\n              return Object.values(t);\n            }\n          : function (t) {\n              var e = [];\n              return (\n                p(t, function (n, r) {\n                  (u(t) && \"prototype\" === r) || e.push(n);\n                }),\n                e\n              );\n            },\n        Mt = function (t, e) {\n          return i(Ot(t), e);\n        },\n        kt = function (t) {\n          return h(t) ? \"\" : t.toString();\n        },\n        jt = function (t) {\n          return kt(t).toLowerCase();\n        },\n        Ct = function (t) {\n          var e = kt(t);\n          return e.charAt(0).toLowerCase() + e.substring(1);\n        };\n      var Et = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                return \"\\\\\" === t.charAt(0)\n                  ? t.slice(1)\n                  : void 0 === e[n]\n                  ? \"\"\n                  : e[n];\n              })\n            : t;\n        },\n        Pt = function (t) {\n          return kt(t).toUpperCase();\n        },\n        At = function (t) {\n          var e = kt(t);\n          return e.charAt(0).toUpperCase() + e.substring(1);\n        },\n        It = {}.toString,\n        Tt = function (t) {\n          return It.call(t)\n            .replace(/^\\[object /, \"\")\n            .replace(/]$/, \"\");\n        },\n        Nt = function (t) {\n          return c(t, \"Arguments\");\n        },\n        Bt = function (t) {\n          return c(t, \"Boolean\");\n        },\n        Lt = function (t) {\n          return c(t, \"Date\");\n        },\n        Dt = function (t) {\n          return c(t, \"Error\");\n        },\n        _t = function (t) {\n          return it(t) && isFinite(t);\n        },\n        Rt = function (t) {\n          return null === t;\n        },\n        Ft = Object.prototype,\n        Yt = function (t) {\n          var e = t && t.constructor;\n          return t === ((\"function\" == typeof e && e.prototype) || Ft);\n        },\n        Xt = function (t) {\n          return c(t, \"RegExp\");\n        },\n        zt = function (t) {\n          return void 0 === t;\n        },\n        Wt = function (t) {\n          return t instanceof Element || t instanceof HTMLDocument;\n        };\n      function qt(t) {\n        return (\n          window.requestAnimationFrame ||\n          window.webkitRequestAnimationFrame ||\n          window.mozRequestAnimationFrame ||\n          window.msRequestAnimationFrame ||\n          function (t) {\n            return setTimeout(t, 16);\n          }\n        )(t);\n      }\n      function Vt(t) {\n        (\n          window.cancelAnimationFrame ||\n          window.webkitCancelAnimationFrame ||\n          window.mozCancelAnimationFrame ||\n          window.msCancelAnimationFrame ||\n          clearTimeout\n        )(t);\n      }\n      function Gt(t, e) {\n        for (var n in e)\n          e.hasOwnProperty(n) &&\n            \"constructor\" !== n &&\n            void 0 !== e[n] &&\n            (t[n] = e[n]);\n      }\n      function Ht(t, e, n, r) {\n        return e && Gt(t, e), n && Gt(t, n), r && Gt(t, r), t;\n      }\n      var Ut = function () {\n        for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n        for (var n = t[0], r = 1; r < t.length; r++) {\n          var i = t[r];\n          u(i) && (i = i.prototype), Ht(n.prototype, i);\n        }\n      };\n      function Zt(t) {\n        return (Zt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Kt = function t(e) {\n        if (\"object\" !== Zt(e) || null === e) return e;\n        var n;\n        if (l(e)) {\n          n = [];\n          for (var r = 0, i = e.length; r < i; r++)\n            \"object\" === Zt(e[r]) && null != e[r]\n              ? (n[r] = t(e[r]))\n              : (n[r] = e[r]);\n        } else\n          for (var o in ((n = {}), e))\n            \"object\" === Zt(e[o]) && null != e[o]\n              ? (n[o] = t(e[o]))\n              : (n[o] = e[o]);\n        return n;\n      };\n      var $t = function (t, e, n) {\n          var r;\n          return function () {\n            var i = this,\n              o = arguments,\n              a = function () {\n                (r = null), n || t.apply(i, o);\n              },\n              s = n && !r;\n            clearTimeout(r), (r = setTimeout(a, e)), s && t.apply(i, o);\n          };\n        },\n        Qt = function (t, e) {\n          if (!u(t)) throw new TypeError(\"Expected a function\");\n          var n = function n() {\n            for (var r = [], i = 0; i < arguments.length; i++)\n              r[i] = arguments[i];\n            var o = e ? e.apply(this, r) : r[0],\n              a = n.cache;\n            if (a.has(o)) return a.get(o);\n            var s = t.apply(this, r);\n            return a.set(o, s), s;\n          };\n          return (n.cache = new Map()), n;\n        };\n      function Jt(t, e, n, r) {\n        for (var i in ((n = n || 0), (r = r || 5), e))\n          if (e.hasOwnProperty(i)) {\n            var o = e[i];\n            null !== o && b(o)\n              ? (b(t[i]) || (t[i] = {}),\n                n < r ? Jt(t[i], o, n + 1, r) : (t[i] = e[i]))\n              : l(o)\n              ? ((t[i] = []), (t[i] = t[i].concat(o)))\n              : void 0 !== o && (t[i] = o);\n          }\n      }\n      var te = function (t) {\n          for (var e = [], n = 1; n < arguments.length; n++)\n            e[n - 1] = arguments[n];\n          for (var r = 0; r < e.length; r += 1) Jt(t, e[r]);\n          return t;\n        },\n        ee = function (t, e, n, r) {\n          u(e) || ((n = e), (e = t), (t = function () {}));\n          var i = Object.create\n              ? function (t, e) {\n                  return Object.create(t, { constructor: { value: e } });\n                }\n              : function (t, e) {\n                  function n() {}\n                  n.prototype = t;\n                  var r = new n();\n                  return (r.constructor = e), r;\n                },\n            o = i(e.prototype, t);\n          return (\n            (t.prototype = Ht(o, t.prototype)),\n            (t.superclass = i(e.prototype, e)),\n            Ht(o, n),\n            Ht(t, r),\n            t\n          );\n        },\n        ne = function (t, e) {\n          if (!r(t)) return -1;\n          var n = Array.prototype.indexOf;\n          if (n) return n.call(t, e);\n          for (var i = -1, o = 0; o < t.length; o++)\n            if (t[o] === e) {\n              i = o;\n              break;\n            }\n          return i;\n        },\n        re = Object.prototype.hasOwnProperty;\n      var ie = function (t) {\n          if (h(t)) return !0;\n          if (r(t)) return !t.length;\n          var e = Tt(t);\n          if (\"Map\" === e || \"Set\" === e) return !t.size;\n          if (Yt(t)) return !Object.keys(t).length;\n          for (var n in t) if (re.call(t, n)) return !1;\n          return !0;\n        },\n        oe = function t(e, n) {\n          if (e === n) return !0;\n          if (!e || !n) return !1;\n          if (D(e) || D(n)) return !1;\n          if (r(e) || r(n)) {\n            if (e.length !== n.length) return !1;\n            for (var i = !0, o = 0; o < e.length && (i = t(e[o], n[o])); o++);\n            return i;\n          }\n          if (m(e) || m(n)) {\n            var a = Object.keys(e),\n              s = Object.keys(n);\n            if (a.length !== s.length) return !1;\n            for (i = !0, o = 0; o < a.length && (i = t(e[a[o]], n[a[o]])); o++);\n            return i;\n          }\n          return !1;\n        },\n        ae = function (t, e, n) {\n          return u(n) ? !!n(t, e) : oe(t, e);\n        },\n        se = function (t, e) {\n          if (!r(t)) return t;\n          for (var n = [], i = 0; i < t.length; i++) {\n            var o = t[i];\n            n.push(e(o, i));\n          }\n          return n;\n        },\n        ce = function (t) {\n          return t;\n        },\n        ue = function (t, e) {\n          void 0 === e && (e = ce);\n          var n = {};\n          return (\n            d(t) &&\n              !h(t) &&\n              Object.keys(t).forEach(function (r) {\n                n[r] = e(t[r], r);\n              }),\n            n\n          );\n        },\n        he = function (t, e, n) {\n          for (var r = 0, i = D(e) ? e.split(\".\") : e; t && r < i.length; )\n            t = t[i[r++]];\n          return void 0 === t || r < i.length ? n : t;\n        },\n        le = function (t, e, n) {\n          var r = t,\n            i = D(e) ? e.split(\".\") : e;\n          return (\n            i.forEach(function (t, e) {\n              e < i.length - 1\n                ? (d(r[t]) || (r[t] = it(i[e + 1]) ? [] : {}), (r = r[t]))\n                : (r[t] = n);\n            }),\n            t\n          );\n        },\n        fe = Object.prototype.hasOwnProperty,\n        de = function (t, e) {\n          if (null === t || !b(t)) return {};\n          var n = {};\n          return (\n            p(e, function (e) {\n              fe.call(t, e) && (n[e] = t[e]);\n            }),\n            n\n          );\n        },\n        pe = function (t, e) {\n          return B(\n            t,\n            function (t, n, r) {\n              return e.includes(r) || (t[r] = n), t;\n            },\n            {},\n          );\n        },\n        ge = function (t, e, n) {\n          var r,\n            i,\n            o,\n            a,\n            s = 0;\n          n || (n = {});\n          var c = function () {\n              (s = !1 === n.leading ? 0 : Date.now()),\n                (r = null),\n                (a = t.apply(i, o)),\n                r || (i = o = null);\n            },\n            u = function () {\n              var u = Date.now();\n              s || !1 !== n.leading || (s = u);\n              var h = e - (u - s);\n              return (\n                (i = this),\n                (o = arguments),\n                h <= 0 || h > e\n                  ? (r && (clearTimeout(r), (r = null)),\n                    (s = u),\n                    (a = t.apply(i, o)),\n                    r || (i = o = null))\n                  : r || !1 === n.trailing || (r = setTimeout(c, h)),\n                a\n              );\n            };\n          return (\n            (u.cancel = function () {\n              clearTimeout(r), (s = 0), (r = i = o = null);\n            }),\n            u\n          );\n        },\n        ve = function (t) {\n          return r(t) ? Array.prototype.slice.call(t) : [];\n        },\n        ye = {},\n        me = function (t) {\n          return ye[(t = t || \"g\")] ? (ye[t] += 1) : (ye[t] = 1), t + ye[t];\n        },\n        be = function () {},\n        xe = function (t) {\n          return t;\n        };\n      function Se(t) {\n        return h(t) ? 0 : r(t) ? t.length : Object.keys(t).length;\n      }\n      var we,\n        Oe = n(1),\n        Me = Qt(\n          function (t, e) {\n            void 0 === e && (e = {});\n            var n = e.fontSize,\n              r = e.fontFamily,\n              i = e.fontWeight,\n              o = e.fontStyle,\n              a = e.fontVariant;\n            return (\n              we || (we = document.createElement(\"canvas\").getContext(\"2d\")),\n              (we.font = [o, a, i, n + \"px\", r].join(\" \")),\n              we.measureText(D(t) ? t : \"\").width\n            );\n          },\n          function (t, e) {\n            return void 0 === e && (e = {}), Object(Oe.g)([t], Ot(e)).join(\"\");\n          },\n        ),\n        ke = function (t, e, n, r) {\n          void 0 === r && (r = \"...\");\n          var i,\n            o,\n            a = Me(r, n),\n            s = D(t) ? t : kt(t),\n            c = e,\n            u = [];\n          if (Me(t, n) <= e) return t;\n          for (; (i = s.substr(0, 16)), !((o = Me(i, n)) + a > c && o > c); )\n            if ((u.push(i), (c -= o), !(s = s.substr(16)))) return u.join(\"\");\n          for (; (i = s.substr(0, 1)), !((o = Me(i, n)) + a > c); )\n            if ((u.push(i), (c -= o), !(s = s.substr(1)))) return u.join(\"\");\n          return \"\" + u.join(\"\") + r;\n        },\n        je = (function () {\n          function t() {\n            this.map = {};\n          }\n          return (\n            (t.prototype.has = function (t) {\n              return void 0 !== this.map[t];\n            }),\n            (t.prototype.get = function (t, e) {\n              var n = this.map[t];\n              return void 0 === n ? e : n;\n            }),\n            (t.prototype.set = function (t, e) {\n              this.map[t] = e;\n            }),\n            (t.prototype.clear = function () {\n              this.map = {};\n            }),\n            (t.prototype.delete = function (t) {\n              delete this.map[t];\n            }),\n            (t.prototype.size = function () {\n              return Object.keys(this.map).length;\n            }),\n            t\n          );\n        })();\n    },\n    1: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return i;\n      }),\n        n.d(e, \"a\", function () {\n          return o;\n        }),\n        n.d(e, \"e\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        }),\n        n.d(e, \"d\", function () {\n          return c;\n        }),\n        n.d(e, \"g\", function () {\n          return u;\n        }),\n        n.d(e, \"f\", function () {\n          return h;\n        });\n      var r = function (t, e) {\n        return (r =\n          Object.setPrototypeOf ||\n          ({ __proto__: [] } instanceof Array &&\n            function (t, e) {\n              t.__proto__ = e;\n            }) ||\n          function (t, e) {\n            for (var n in e)\n              Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n          })(t, e);\n      };\n      function i(t, e) {\n        if (\"function\" != typeof e && null !== e)\n          throw new TypeError(\n            \"Class extends value \" +\n              String(e) +\n              \" is not a constructor or null\",\n          );\n        function n() {\n          this.constructor = t;\n        }\n        r(t, e),\n          (t.prototype =\n            null === e\n              ? Object.create(e)\n              : ((n.prototype = e.prototype), new n()));\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function a(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      function s(t, e, n, r) {\n        return new (n || (n = Promise))(function (i, o) {\n          function a(t) {\n            try {\n              c(r.next(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function s(t) {\n            try {\n              c(r.throw(t));\n            } catch (t) {\n              o(t);\n            }\n          }\n          function c(t) {\n            var e;\n            t.done\n              ? i(t.value)\n              : ((e = t.value),\n                e instanceof n\n                  ? e\n                  : new n(function (t) {\n                      t(e);\n                    })).then(a, s);\n          }\n          c((r = r.apply(t, e || [])).next());\n        });\n      }\n      function c(t, e) {\n        var n,\n          r,\n          i,\n          o,\n          a = {\n            label: 0,\n            sent: function () {\n              if (1 & i[0]) throw i[1];\n              return i[1];\n            },\n            trys: [],\n            ops: [],\n          };\n        return (\n          (o = { next: s(0), throw: s(1), return: s(2) }),\n          \"function\" == typeof Symbol &&\n            (o[Symbol.iterator] = function () {\n              return this;\n            }),\n          o\n        );\n        function s(s) {\n          return function (c) {\n            return (function (s) {\n              if (n) throw new TypeError(\"Generator is already executing.\");\n              for (; o && ((o = 0), s[0] && (a = 0)), a; )\n                try {\n                  if (\n                    ((n = 1),\n                    r &&\n                      (i =\n                        2 & s[0]\n                          ? r.return\n                          : s[0]\n                          ? r.throw || ((i = r.return) && i.call(r), 0)\n                          : r.next) &&\n                      !(i = i.call(r, s[1])).done)\n                  )\n                    return i;\n                  switch (((r = 0), i && (s = [2 & s[0], i.value]), s[0])) {\n                    case 0:\n                    case 1:\n                      i = s;\n                      break;\n                    case 4:\n                      return a.label++, { value: s[1], done: !1 };\n                    case 5:\n                      a.label++, (r = s[1]), (s = [0]);\n                      continue;\n                    case 7:\n                      (s = a.ops.pop()), a.trys.pop();\n                      continue;\n                    default:\n                      if (\n                        !((i = a.trys),\n                        (i = i.length > 0 && i[i.length - 1]) ||\n                          (6 !== s[0] && 2 !== s[0]))\n                      ) {\n                        a = 0;\n                        continue;\n                      }\n                      if (3 === s[0] && (!i || (s[1] > i[0] && s[1] < i[3]))) {\n                        a.label = s[1];\n                        break;\n                      }\n                      if (6 === s[0] && a.label < i[1]) {\n                        (a.label = i[1]), (i = s);\n                        break;\n                      }\n                      if (i && a.label < i[2]) {\n                        (a.label = i[2]), a.ops.push(s);\n                        break;\n                      }\n                      i[2] && a.ops.pop(), a.trys.pop();\n                      continue;\n                  }\n                  s = e.call(t, a);\n                } catch (t) {\n                  (s = [6, t]), (r = 0);\n                } finally {\n                  n = i = 0;\n                }\n              if (5 & s[0]) throw s[1];\n              return { value: s[0] ? s[1] : void 0, done: !0 };\n            })([s, c]);\n          };\n        }\n      }\n      Object.create;\n      function u() {\n        for (var t = 0, e = 0, n = arguments.length; e < n; e++)\n          t += arguments[e].length;\n        var r = Array(t),\n          i = 0;\n        for (e = 0; e < n; e++)\n          for (var o = arguments[e], a = 0, s = o.length; a < s; a++, i++)\n            r[i] = o[a];\n        return r;\n      }\n      function h(t, e, n) {\n        if (n || 2 === arguments.length)\n          for (var r, i = 0, o = e.length; i < o; i++)\n            (!r && i in e) ||\n              (r || (r = Array.prototype.slice.call(e, 0, i)), (r[i] = e[i]));\n        return t.concat(r || Array.prototype.slice.call(e));\n      }\n      Object.create;\n    },\n    11: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(8),\n        o = n(3),\n        a = n(12),\n        s = n(31),\n        c = n(52),\n        u = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(r.a)(Object(r.a)({}, e), {\n                lineWidth: 1,\n                lineAppendWidth: 0,\n                strokeOpacity: 1,\n                fillOpacity: 1,\n              });\n            }),\n            (e.prototype.getShapeBase = function () {\n              return s;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return c.a;\n            }),\n            (e.prototype.onCanvasChange = function (t) {\n              Object(a.h)(this, t);\n            }),\n            (e.prototype.calculateBBox = function () {\n              var t = this.get(\"type\"),\n                e = this.getHitLineWidth(),\n                n = Object(i.getBBoxMethod)(t)(this),\n                r = e / 2,\n                o = n.x - r,\n                a = n.y - r,\n                s = n.x + n.width + r,\n                c = n.y + n.height + r;\n              return {\n                x: o,\n                minX: o,\n                y: a,\n                minY: a,\n                width: n.width + e,\n                height: n.height + e,\n                maxX: s,\n                maxY: c,\n              };\n            }),\n            (e.prototype.isFill = function () {\n              return !!this.attrs.fill || this.isClipShape();\n            }),\n            (e.prototype.isStroke = function () {\n              return !!this.attrs.stroke;\n            }),\n            (e.prototype._applyClip = function (t, e) {\n              e &&\n                (t.save(),\n                Object(a.a)(t, e),\n                e.createPath(t),\n                t.restore(),\n                t.clip(),\n                e._afterDraw());\n            }),\n            (e.prototype.draw = function (t, e) {\n              var n = this.cfg.clipShape;\n              if (e) {\n                if (!1 === this.cfg.refresh)\n                  return void this.set(\"hasChanged\", !1);\n                var r = this.getCanvasBBox();\n                if (!Object(o.e)(e, r))\n                  return (\n                    this.set(\"hasChanged\", !1),\n                    void (this.cfg.isInView && this._afterDraw())\n                  );\n              }\n              t.save(),\n                Object(a.a)(t, this),\n                this._applyClip(t, n),\n                this.drawPath(t),\n                t.restore(),\n                this._afterDraw();\n            }),\n            (e.prototype.getCanvasViewBox = function () {\n              var t = this.cfg.canvas;\n              return t ? t.getViewRange() : null;\n            }),\n            (e.prototype.cacheCanvasBBox = function () {\n              var t = this.getCanvasViewBox();\n              if (t) {\n                var e = this.getCanvasBBox(),\n                  n = Object(o.e)(e, t);\n                this.set(\"isInView\", n),\n                  n\n                    ? this.set(\"cacheCanvasBBox\", e)\n                    : this.set(\"cacheCanvasBBox\", null);\n              }\n            }),\n            (e.prototype._afterDraw = function () {\n              this.cacheCanvasBBox(),\n                this.set(\"hasChanged\", !1),\n                this.set(\"refresh\", null);\n            }),\n            (e.prototype.skipDraw = function () {\n              this.set(\"cacheCanvasBBox\", null),\n                this.set(\"isInView\", null),\n                this.set(\"hasChanged\", !1);\n            }),\n            (e.prototype.drawPath = function (t) {\n              this.createPath(t), this.strokeAndFill(t), this.afterDrawPath(t);\n            }),\n            (e.prototype.fill = function (t) {\n              t.fill();\n            }),\n            (e.prototype.stroke = function (t) {\n              t.stroke();\n            }),\n            (e.prototype.strokeAndFill = function (t) {\n              var e = this.attrs,\n                n = e.lineWidth,\n                r = e.opacity,\n                i = e.strokeOpacity,\n                a = e.fillOpacity;\n              this.isFill() &&\n                (Object(o.h)(a) || 1 === a\n                  ? this.fill(t)\n                  : ((t.globalAlpha = a), this.fill(t), (t.globalAlpha = r))),\n                this.isStroke() &&\n                  n > 0 &&\n                  (Object(o.h)(i) || 1 === i || (t.globalAlpha = i),\n                  this.stroke(t)),\n                this.afterDrawPath(t);\n            }),\n            (e.prototype.createPath = function (t) {}),\n            (e.prototype.afterDrawPath = function (t) {}),\n            (e.prototype.isInShape = function (t, e) {\n              var n = this.isStroke(),\n                r = this.isFill(),\n                i = this.getHitLineWidth();\n              return this.isInStrokeOrPath(t, e, n, r, i);\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              return !1;\n            }),\n            (e.prototype.getHitLineWidth = function () {\n              if (!this.isStroke()) return 0;\n              var t = this.attrs;\n              return t.lineWidth + t.lineAppendWidth;\n            }),\n            e\n          );\n        })(i.AbstractShape);\n      e.a = u;\n    },\n    118: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return o;\n      }),\n        n.d(e, \"b\", function () {\n          return i;\n        });\n      var r = new Map();\n      function i(t, e) {\n        r.set(t, e);\n      }\n      function o(t) {\n        return r.get(t);\n      }\n      var a = function (t) {\n          var e = t.attr();\n          return { x: e.x, y: e.y, width: e.width, height: e.height };\n        },\n        s = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.r;\n          return { x: n - i, y: r - i, width: 2 * i, height: 2 * i };\n        },\n        c = n(9);\n      function u(t, e) {\n        return t && e\n          ? {\n              minX: Math.min(t.minX, e.minX),\n              minY: Math.min(t.minY, e.minY),\n              maxX: Math.max(t.maxX, e.maxX),\n              maxY: Math.max(t.maxY, e.maxY),\n            }\n          : t || e;\n      }\n      function h(t, e) {\n        var n = t.get(\"startArrowShape\"),\n          r = t.get(\"endArrowShape\");\n        return (\n          n && (e = u(e, n.getCanvasBBox())),\n          r && (e = u(e, r.getCanvasBBox())),\n          e\n        );\n      }\n      var l = n(46),\n        f = n(28),\n        d = n(0);\n      function p(t, e) {\n        var n = t.prePoint,\n          r = t.currentPoint,\n          i = t.nextPoint,\n          o = Math.pow(r[0] - n[0], 2) + Math.pow(r[1] - n[1], 2),\n          a = Math.pow(r[0] - i[0], 2) + Math.pow(r[1] - i[1], 2),\n          s = Math.pow(n[0] - i[0], 2) + Math.pow(n[1] - i[1], 2),\n          c = Math.acos((o + a - s) / (2 * Math.sqrt(o) * Math.sqrt(a)));\n        if (!c || 0 === Math.sin(c) || Object(d.isNumberEqual)(c, 0))\n          return { xExtra: 0, yExtra: 0 };\n        var u = Math.abs(Math.atan2(i[1] - r[1], i[0] - r[0])),\n          h = Math.abs(Math.atan2(i[0] - r[0], i[1] - r[1]));\n        return (\n          (u = u > Math.PI / 2 ? Math.PI - u : u),\n          (h = h > Math.PI / 2 ? Math.PI - h : h),\n          {\n            xExtra:\n              Math.cos(c / 2 - u) * ((e / 2) * (1 / Math.sin(c / 2))) - e / 2 ||\n              0,\n            yExtra:\n              Math.cos(h - c / 2) * ((e / 2) * (1 / Math.sin(c / 2))) - e / 2 ||\n              0,\n          }\n        );\n      }\n      i(\"rect\", a),\n        i(\"image\", a),\n        i(\"circle\", s),\n        i(\"marker\", s),\n        i(\"polyline\", function (t) {\n          for (\n            var e = t.attr().points, n = [], r = [], i = 0;\n            i < e.length;\n            i++\n          ) {\n            var o = e[i];\n            n.push(o[0]), r.push(o[1]);\n          }\n          var a = c.f.getBBoxByArray(n, r),\n            s = a.x,\n            u = a.y,\n            l = { minX: s, minY: u, maxX: s + a.width, maxY: u + a.height };\n          return {\n            x: (l = h(t, l)).minX,\n            y: l.minY,\n            width: l.maxX - l.minX,\n            height: l.maxY - l.minY,\n          };\n        }),\n        i(\"polygon\", function (t) {\n          for (\n            var e = t.attr().points, n = [], r = [], i = 0;\n            i < e.length;\n            i++\n          ) {\n            var o = e[i];\n            n.push(o[0]), r.push(o[1]);\n          }\n          return c.f.getBBoxByArray(n, r);\n        }),\n        i(\"text\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            a = e.lineHeight,\n            s = e.font;\n          s || (s = Object(l.a)(e));\n          var c,\n            u = Object(l.c)(i, s);\n          if (u) {\n            var h = e.textAlign,\n              f = e.textBaseline,\n              d = Object(l.b)(i, o, a),\n              p = { x: n, y: r - d };\n            h &&\n              (\"end\" === h || \"right\" === h\n                ? (p.x -= u)\n                : \"center\" === h && (p.x -= u / 2)),\n              f &&\n                (\"top\" === f ? (p.y += d) : \"middle\" === f && (p.y += d / 2)),\n              (c = { x: p.x, y: p.y, width: u, height: d });\n          } else c = { x: n, y: r, width: 0, height: 0 };\n          return c;\n        }),\n        i(\"path\", function (t) {\n          var e = t.attr(),\n            n = e.path,\n            r = e.stroke ? e.lineWidth : 0,\n            i = (function (t, e) {\n              for (var n = [], r = [], i = [], o = 0; o < t.length; o++) {\n                var a = (m = t[o]).currentPoint,\n                  s = m.params,\n                  u = m.prePoint,\n                  h = void 0;\n                switch (m.command) {\n                  case \"Q\":\n                    h = c.e.box(u[0], u[1], s[1], s[2], s[3], s[4]);\n                    break;\n                  case \"C\":\n                    h = c.b.box(u[0], u[1], s[1], s[2], s[3], s[4], s[5], s[6]);\n                    break;\n                  case \"A\":\n                    var l = m.arcParams;\n                    h = c.a.box(\n                      l.cx,\n                      l.cy,\n                      l.rx,\n                      l.ry,\n                      l.xRotation,\n                      l.startAngle,\n                      l.endAngle,\n                    );\n                    break;\n                  default:\n                    n.push(a[0]), r.push(a[1]);\n                }\n                h &&\n                  ((m.box = h),\n                  n.push(h.x, h.x + h.width),\n                  r.push(h.y, h.y + h.height)),\n                  e &&\n                    (\"L\" === m.command || \"M\" === m.command) &&\n                    m.prePoint &&\n                    m.nextPoint &&\n                    i.push(m);\n              }\n              (n = n.filter(function (t) {\n                return !Number.isNaN(t) && t !== 1 / 0 && t !== -1 / 0;\n              })),\n                (r = r.filter(function (t) {\n                  return !Number.isNaN(t) && t !== 1 / 0 && t !== -1 / 0;\n                }));\n              var f = Object(d.min)(n),\n                g = Object(d.min)(r),\n                v = Object(d.max)(n),\n                y = Object(d.max)(r);\n              if (0 === i.length)\n                return { x: f, y: g, width: v - f, height: y - g };\n              for (o = 0; o < i.length; o++) {\n                var m;\n                (a = (m = i[o]).currentPoint)[0] === f\n                  ? (f -= p(m, e).xExtra)\n                  : a[0] === v && (v += p(m, e).xExtra),\n                  a[1] === g\n                    ? (g -= p(m, e).yExtra)\n                    : a[1] === y && (y += p(m, e).yExtra);\n              }\n              return { x: f, y: g, width: v - f, height: y - g };\n            })(t.get(\"segments\") || Object(f.d)(n), r),\n            o = i.x,\n            a = i.y,\n            s = { minX: o, minY: a, maxX: o + i.width, maxY: a + i.height };\n          return {\n            x: (s = h(t, s)).minX,\n            y: s.minY,\n            width: s.maxX - s.minX,\n            height: s.maxY - s.minY,\n          };\n        }),\n        i(\"line\", function (t) {\n          var e = t.attr(),\n            n = e.x1,\n            r = e.y1,\n            i = e.x2,\n            o = e.y2,\n            a = {\n              minX: Math.min(n, i),\n              maxX: Math.max(n, i),\n              minY: Math.min(r, o),\n              maxY: Math.max(r, o),\n            };\n          return {\n            x: (a = h(t, a)).minX,\n            y: a.minY,\n            width: a.maxX - a.minX,\n            height: a.maxY - a.minY,\n          };\n        }),\n        i(\"ellipse\", function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.rx,\n            o = e.ry;\n          return { x: n - i, y: r - o, width: 2 * i, height: 2 * o };\n        });\n    },\n    119: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(2),\n        o = (n(8), n(35)),\n        a = n(96),\n        s = n(33),\n        c = n(22),\n        u = n(41),\n        h =\n          (n(423),\n          n(424),\n          n(127),\n          n(128),\n          {\n            version: c.a.version,\n            Graph: a.a,\n            Util: u.a,\n            Layout: s.a,\n            Layouts: s.b,\n            registerLayout: s.c,\n            unRegisterLayout: s.d,\n            Global: c.a,\n            registerBehavior: i.i,\n            registerCombo: i.j,\n            registerEdge: i.k,\n            registerNode: i.l,\n            Algorithm: o,\n            Arrow: i.d,\n            Marker: i.f,\n            Shape: i.g,\n          });\n      var l,\n        f =\n          ((l = a.b),\n          function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            return l.apply(null, Object(r.g)(t, [h]));\n          });\n      (h.registerGraph = f), (e.default = h);\n    },\n    12: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return u;\n      }),\n        n.d(e, \"d\", function () {\n          return h;\n        }),\n        n.d(e, \"b\", function () {\n          return l;\n        }),\n        n.d(e, \"c\", function () {\n          return f;\n        }),\n        n.d(e, \"e\", function () {\n          return g;\n        }),\n        n.d(e, \"h\", function () {\n          return v;\n        }),\n        n.d(e, \"f\", function () {\n          return y;\n        }),\n        n.d(e, \"g\", function () {\n          return m;\n        });\n      var r = n(0),\n        i = n(94),\n        o = n(63),\n        a = n(3),\n        s = n(23),\n        c = {\n          fill: \"fillStyle\",\n          stroke: \"strokeStyle\",\n          opacity: \"globalAlpha\",\n        };\n      function u(t, e) {\n        var n = e.attr();\n        for (var o in n) {\n          var a = n[o],\n            s = c[o] ? c[o] : o;\n          \"matrix\" === s && a\n            ? t.transform(a[0], a[1], a[3], a[4], a[6], a[7])\n            : \"lineDash\" === s && t.setLineDash\n            ? Object(r.isArray)(a) && t.setLineDash(a)\n            : (\"strokeStyle\" === s || \"fillStyle\" === s\n                ? (a = Object(i.b)(t, e, a))\n                : \"globalAlpha\" === s && (a *= t.globalAlpha),\n              (t[s] = a));\n        }\n      }\n      function h(t, e, n) {\n        for (var r = 0; r < e.length; r++) {\n          var i = e[r];\n          i.cfg.visible ? i.draw(t, n) : i.skipDraw();\n        }\n      }\n      function l(t, e, n) {\n        var i = t.get(\"refreshElements\");\n        Object(r.each)(i, function (e) {\n          if (e !== t)\n            for (var n = e.cfg.parent; n && n !== t && !n.cfg.refresh; )\n              (n.cfg.refresh = !0), (n = n.cfg.parent);\n        }),\n          i[0] === t\n            ? d(e, n)\n            : (function t(e, n) {\n                for (var r = 0; r < e.length; r++) {\n                  var i = e[r];\n                  if (i.cfg.visible)\n                    if (i.cfg.hasChanged)\n                      (i.cfg.refresh = !0), i.isGroup() && d(i.cfg.children, n);\n                    else if (i.cfg.refresh) i.isGroup() && t(i.cfg.children, n);\n                    else {\n                      var o = p(i, n);\n                      (i.cfg.refresh = o),\n                        o && i.isGroup() && t(i.cfg.children, n);\n                    }\n                }\n              })(e, n);\n      }\n      function f(t) {\n        for (var e = 0; e < t.length; e++) {\n          var n = t[e];\n          (n.cfg.hasChanged = !1),\n            n.isGroup() && !n.destroyed && f(n.cfg.children);\n        }\n      }\n      function d(t, e) {\n        for (var n = 0; n < t.length; n++) {\n          var r = t[n];\n          (r.cfg.refresh = !0), r.isGroup() && d(r.get(\"children\"), e);\n        }\n      }\n      function p(t, e) {\n        var n = t.cfg.cacheCanvasBBox;\n        return t.cfg.isInView && n && Object(a.e)(n, e);\n      }\n      function g(t, e, n, r) {\n        var i = n.path,\n          a = n.startArrow,\n          c = n.endArrow;\n        if (i) {\n          var u = [0, 0],\n            h = [0, 0],\n            l = { dx: 0, dy: 0 };\n          e.beginPath();\n          for (var f = 0; f < i.length; f++) {\n            var d = i[f],\n              p = d[0];\n            if (0 === f && a && a.d) {\n              var g = t.getStartTangent();\n              l = s.c(g[0][0], g[0][1], g[1][0], g[1][1], a.d);\n            } else if (f === i.length - 2 && \"Z\" === i[f + 1][0] && c && c.d) {\n              if (\"Z\" === i[f + 1][0]) {\n                g = t.getEndTangent();\n                l = s.c(g[0][0], g[0][1], g[1][0], g[1][1], c.d);\n              }\n            } else if (f === i.length - 1 && c && c.d && \"Z\" !== i[0]) {\n              g = t.getEndTangent();\n              l = s.c(g[0][0], g[0][1], g[1][0], g[1][1], c.d);\n            }\n            var v = l.dx,\n              y = l.dy;\n            switch (p) {\n              case \"M\":\n                e.moveTo(d[1] - v, d[2] - y), (h = [d[1], d[2]]);\n                break;\n              case \"L\":\n                e.lineTo(d[1] - v, d[2] - y);\n                break;\n              case \"Q\":\n                e.quadraticCurveTo(d[1], d[2], d[3] - v, d[4] - y);\n                break;\n              case \"C\":\n                e.bezierCurveTo(d[1], d[2], d[3], d[4], d[5] - v, d[6] - y);\n                break;\n              case \"A\":\n                var m = void 0;\n                r\n                  ? (m = r[f]) || ((m = Object(o.a)(u, d)), (r[f] = m))\n                  : (m = Object(o.a)(u, d));\n                var b = m.cx,\n                  x = m.cy,\n                  S = m.rx,\n                  w = m.ry,\n                  O = m.startAngle,\n                  M = m.endAngle,\n                  k = m.xRotation,\n                  j = m.sweepFlag;\n                if (e.ellipse) e.ellipse(b, x, S, w, k, O, M, 1 - j);\n                else {\n                  var C = S > w ? S : w,\n                    E = S > w ? 1 : S / w,\n                    P = S > w ? w / S : 1;\n                  e.translate(b, x),\n                    e.rotate(k),\n                    e.scale(E, P),\n                    e.arc(0, 0, C, O, M, 1 - j),\n                    e.scale(1 / E, 1 / P),\n                    e.rotate(-k),\n                    e.translate(-b, -x);\n                }\n                break;\n              case \"Z\":\n                e.closePath();\n            }\n            if (\"Z\" === p) u = h;\n            else {\n              var A = d.length;\n              u = [d[A - 2], d[A - 1]];\n            }\n          }\n        }\n      }\n      function v(t, e) {\n        var n = t.get(\"canvas\");\n        n &&\n          (\"remove\" === e && (t._cacheCanvasBBox = t.get(\"cacheCanvasBBox\")),\n          t.get(\"hasChanged\") ||\n            (t.set(\"hasChanged\", !0),\n            (t.cfg.parent && t.cfg.parent.get(\"hasChanged\")) ||\n              (n.refreshElement(t, e, n), n.get(\"autoDraw\") && n.draw())));\n      }\n      function y(t) {\n        if (!t.length) return null;\n        var e = [],\n          n = [],\n          i = [],\n          o = [];\n        return (\n          Object(r.each)(t, function (t) {\n            var r = (function (t) {\n              var e;\n              if (t.destroyed) e = t._cacheCanvasBBox;\n              else {\n                var n = t.get(\"cacheCanvasBBox\"),\n                  r = n && !(!n.width || !n.height),\n                  i = t.getCanvasBBox(),\n                  o = i && !(!i.width || !i.height);\n                r && o ? (e = Object(a.l)(n, i)) : r ? (e = n) : o && (e = i);\n              }\n              return e;\n            })(t);\n            r &&\n              (e.push(r.minX), n.push(r.minY), i.push(r.maxX), o.push(r.maxY));\n          }),\n          {\n            minX: Math.min.apply(null, e),\n            minY: Math.min.apply(null, n),\n            maxX: Math.max.apply(null, i),\n            maxY: Math.max.apply(null, o),\n          }\n        );\n      }\n      function m(t, e) {\n        return t && e && Object(a.e)(t, e)\n          ? {\n              minX: Math.max(t.minX, e.minX),\n              minY: Math.max(t.minY, e.minY),\n              maxX: Math.min(t.maxX, e.maxX),\n              maxY: Math.min(t.maxY, e.maxY),\n            }\n          : null;\n      }\n    },\n    120: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.assembleFont =\n          e.getTextWidth =\n          e.getLineSpaceing =\n          e.getTextHeight =\n            void 0);\n      var r = n(207),\n        i = n(208);\n      function o(t, e) {\n        return e ? e - t : 0.14 * t;\n      }\n      (e.getTextHeight = function (t, e, n) {\n        var i = 1;\n        return (\n          r.isString(t) && (i = t.split(\"\\n\").length),\n          i > 1 ? e * i + o(e, n) * (i - 1) : e\n        );\n      }),\n        (e.getLineSpaceing = o),\n        (e.getTextWidth = function (t, e) {\n          var n = i.getOffScreenContext(),\n            o = 0;\n          if (r.isNil(t) || \"\" === t) return o;\n          if ((n.save(), (n.font = e), r.isString(t) && t.includes(\"\\n\"))) {\n            var a = t.split(\"\\n\");\n            r.each(a, function (t) {\n              var e = n.measureText(t).width;\n              o < e && (o = e);\n            });\n          } else o = n.measureText(t).width;\n          return n.restore(), o;\n        }),\n        (e.assembleFont = function (t) {\n          var e = t.fontSize,\n            n = t.fontFamily,\n            r = t.fontWeight;\n          return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n        });\n    },\n    122: function (t, e) {},\n    123: function (t, e) {},\n    124: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.isGroup = function () {\n              return !0;\n            }),\n            (e.prototype.isEntityGroup = function () {\n              return !1;\n            }),\n            (e.prototype.clone = function () {\n              for (\n                var e = t.prototype.clone.call(this),\n                  n = this.getChildren(),\n                  r = 0;\n                r < n.length;\n                r++\n              ) {\n                var i = n[r];\n                e.add(i.clone());\n              }\n              return e;\n            }),\n            e\n          );\n        })(n(92).a);\n      e.a = i;\n    },\n    125: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(93),\n        o = n(25),\n        a = (function (t) {\n          function e(e) {\n            return t.call(this, e) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype._isInBBox = function (t, e) {\n              var n = this.getBBox();\n              return n.minX <= t && n.maxX >= t && n.minY <= e && n.maxY >= e;\n            }),\n            (e.prototype.afterAttrsChange = function (e) {\n              t.prototype.afterAttrsChange.call(this, e), this.clearCacheBBox();\n            }),\n            (e.prototype.getBBox = function () {\n              var t = this.cfg.bbox;\n              return t || ((t = this.calculateBBox()), this.set(\"bbox\", t)), t;\n            }),\n            (e.prototype.getCanvasBBox = function () {\n              var t = this.cfg.canvasBBox;\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()), this.set(\"canvasBBox\", t)),\n                t\n              );\n            }),\n            (e.prototype.applyMatrix = function (e) {\n              t.prototype.applyMatrix.call(this, e),\n                this.set(\"canvasBBox\", null);\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              var t = this.getBBox(),\n                e = this.getTotalMatrix(),\n                n = t.minX,\n                r = t.minY,\n                i = t.maxX,\n                a = t.maxY;\n              if (e) {\n                var s = Object(o.c)(e, [t.minX, t.minY]),\n                  c = Object(o.c)(e, [t.maxX, t.minY]),\n                  u = Object(o.c)(e, [t.minX, t.maxY]),\n                  h = Object(o.c)(e, [t.maxX, t.maxY]);\n                (n = Math.min(s[0], c[0], u[0], h[0])),\n                  (i = Math.max(s[0], c[0], u[0], h[0])),\n                  (r = Math.min(s[1], c[1], u[1], h[1])),\n                  (a = Math.max(s[1], c[1], u[1], h[1]));\n              }\n              var l = this.attrs;\n              if (l.shadowColor) {\n                var f = l.shadowBlur,\n                  d = void 0 === f ? 0 : f,\n                  p = l.shadowOffsetX,\n                  g = void 0 === p ? 0 : p,\n                  v = l.shadowOffsetY,\n                  y = void 0 === v ? 0 : v,\n                  m = n - d + g,\n                  b = i + d + g,\n                  x = r - d + y,\n                  S = a + d + y;\n                (n = Math.min(n, m)),\n                  (i = Math.max(i, b)),\n                  (r = Math.min(r, x)),\n                  (a = Math.max(a, S));\n              }\n              return {\n                x: n,\n                y: r,\n                minX: n,\n                minY: r,\n                maxX: i,\n                maxY: a,\n                width: i - n,\n                height: a - r,\n              };\n            }),\n            (e.prototype.clearCacheBBox = function () {\n              this.set(\"bbox\", null), this.set(\"canvasBBox\", null);\n            }),\n            (e.prototype.isClipShape = function () {\n              return this.get(\"isClipShape\");\n            }),\n            (e.prototype.isInShape = function (t, e) {\n              return !1;\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !1;\n            }),\n            (e.prototype.isHit = function (t, e) {\n              var n = this.get(\"startArrowShape\"),\n                r = this.get(\"endArrowShape\"),\n                i = [t, e, 1],\n                o = (i = this.invertFromMatrix(i))[0],\n                a = i[1],\n                s = this._isInBBox(o, a);\n              if (this.isOnlyHitBox()) return s;\n              if (s && !this.isClipped(o, a)) {\n                if (this.isInShape(o, a)) return !0;\n                if (n && n.isHit(o, a)) return !0;\n                if (r && r.isHit(o, a)) return !0;\n              }\n              return !1;\n            }),\n            e\n          );\n        })(i.a);\n      e.a = a;\n    },\n    126: function (t, e, n) {\n      \"use strict\";\n      var r = n(214),\n        i = {};\n      for (var o in r) r.hasOwnProperty(o) && (i[r[o]] = o);\n      var a = (t.exports = {\n        rgb: { channels: 3, labels: \"rgb\" },\n        hsl: { channels: 3, labels: \"hsl\" },\n        hsv: { channels: 3, labels: \"hsv\" },\n        hwb: { channels: 3, labels: \"hwb\" },\n        cmyk: { channels: 4, labels: \"cmyk\" },\n        xyz: { channels: 3, labels: \"xyz\" },\n        lab: { channels: 3, labels: \"lab\" },\n        lch: { channels: 3, labels: \"lch\" },\n        hex: { channels: 1, labels: [\"hex\"] },\n        keyword: { channels: 1, labels: [\"keyword\"] },\n        ansi16: { channels: 1, labels: [\"ansi16\"] },\n        ansi256: { channels: 1, labels: [\"ansi256\"] },\n        hcg: { channels: 3, labels: [\"h\", \"c\", \"g\"] },\n        apple: { channels: 3, labels: [\"r16\", \"g16\", \"b16\"] },\n        gray: { channels: 1, labels: [\"gray\"] },\n      });\n      for (var s in a)\n        if (a.hasOwnProperty(s)) {\n          if (!(\"channels\" in a[s]))\n            throw new Error(\"missing channels property: \" + s);\n          if (!(\"labels\" in a[s]))\n            throw new Error(\"missing channel labels property: \" + s);\n          if (a[s].labels.length !== a[s].channels)\n            throw new Error(\"channel and label counts mismatch: \" + s);\n          var c = a[s].channels,\n            u = a[s].labels;\n          delete a[s].channels,\n            delete a[s].labels,\n            Object.defineProperty(a[s], \"channels\", { value: c }),\n            Object.defineProperty(a[s], \"labels\", { value: u });\n        }\n      function h(t, e) {\n        return (\n          Math.pow(t[0] - e[0], 2) +\n          Math.pow(t[1] - e[1], 2) +\n          Math.pow(t[2] - e[2], 2)\n        );\n      }\n      (a.rgb.hsl = function (t) {\n        var e,\n          n,\n          r = t[0] / 255,\n          i = t[1] / 255,\n          o = t[2] / 255,\n          a = Math.min(r, i, o),\n          s = Math.max(r, i, o),\n          c = s - a;\n        return (\n          s === a\n            ? (e = 0)\n            : r === s\n            ? (e = (i - o) / c)\n            : i === s\n            ? (e = 2 + (o - r) / c)\n            : o === s && (e = 4 + (r - i) / c),\n          (e = Math.min(60 * e, 360)) < 0 && (e += 360),\n          (n = (a + s) / 2),\n          [\n            e,\n            100 * (s === a ? 0 : n <= 0.5 ? c / (s + a) : c / (2 - s - a)),\n            100 * n,\n          ]\n        );\n      }),\n        (a.rgb.hsv = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a = t[0] / 255,\n            s = t[1] / 255,\n            c = t[2] / 255,\n            u = Math.max(a, s, c),\n            h = u - Math.min(a, s, c),\n            l = function (t) {\n              return (u - t) / 6 / h + 0.5;\n            };\n          return (\n            0 === h\n              ? (i = o = 0)\n              : ((o = h / u),\n                (e = l(a)),\n                (n = l(s)),\n                (r = l(c)),\n                a === u\n                  ? (i = r - n)\n                  : s === u\n                  ? (i = 1 / 3 + e - r)\n                  : c === u && (i = 2 / 3 + n - e),\n                i < 0 ? (i += 1) : i > 1 && (i -= 1)),\n            [360 * i, 100 * o, 100 * u]\n          );\n        }),\n        (a.rgb.hwb = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return [\n            a.rgb.hsl(t)[0],\n            (1 / 255) * Math.min(e, Math.min(n, r)) * 100,\n            100 * (r = 1 - (1 / 255) * Math.max(e, Math.max(n, r))),\n          ];\n        }),\n        (a.rgb.cmyk = function (t) {\n          var e = t[0] / 255,\n            n = t[1] / 255,\n            r = t[2] / 255,\n            i = Math.min(1 - e, 1 - n, 1 - r);\n          return [\n            100 * ((1 - e - i) / (1 - i) || 0),\n            100 * ((1 - n - i) / (1 - i) || 0),\n            100 * ((1 - r - i) / (1 - i) || 0),\n            100 * i,\n          ];\n        }),\n        (a.rgb.keyword = function (t) {\n          var e,\n            n = i[t];\n          if (n) return n;\n          var o,\n            a = 1 / 0;\n          for (var s in r)\n            r.hasOwnProperty(s) && (e = h(t, r[s])) < a && ((a = e), (o = s));\n          return o;\n        }),\n        (a.keyword.rgb = function (t) {\n          return r[t];\n        }),\n        (a.rgb.xyz = function (t) {\n          var e = t[0] / 255,\n            n = t[1] / 255,\n            r = t[2] / 255;\n          return [\n            100 *\n              (0.4124 *\n                (e =\n                  e > 0.04045\n                    ? Math.pow((e + 0.055) / 1.055, 2.4)\n                    : e / 12.92) +\n                0.3576 *\n                  (n =\n                    n > 0.04045\n                      ? Math.pow((n + 0.055) / 1.055, 2.4)\n                      : n / 12.92) +\n                0.1805 *\n                  (r =\n                    r > 0.04045\n                      ? Math.pow((r + 0.055) / 1.055, 2.4)\n                      : r / 12.92)),\n            100 * (0.2126 * e + 0.7152 * n + 0.0722 * r),\n            100 * (0.0193 * e + 0.1192 * n + 0.9505 * r),\n          ];\n        }),\n        (a.rgb.lab = function (t) {\n          var e = a.rgb.xyz(t),\n            n = e[0],\n            r = e[1],\n            i = e[2];\n          return (\n            (r /= 100),\n            (i /= 108.883),\n            (n =\n              (n /= 95.047) > 0.008856\n                ? Math.pow(n, 1 / 3)\n                : 7.787 * n + 16 / 116),\n            [\n              116 *\n                (r = r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116) -\n                16,\n              500 * (n - r),\n              200 *\n                (r -\n                  (i =\n                    i > 0.008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116)),\n            ]\n          );\n        }),\n        (a.hsl.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a,\n            s = t[0] / 360,\n            c = t[1] / 100,\n            u = t[2] / 100;\n          if (0 === c) return [(a = 255 * u), a, a];\n          for (\n            n = 2 * u - (r = u < 0.5 ? u * (1 + c) : u + c - u * c),\n              o = [0, 0, 0],\n              e = 0;\n            e < 3;\n            e++\n          )\n            (i = s + (1 / 3) * -(e - 1)) < 0 && i++,\n              i > 1 && i--,\n              (a =\n                6 * i < 1\n                  ? n + 6 * (r - n) * i\n                  : 2 * i < 1\n                  ? r\n                  : 3 * i < 2\n                  ? n + (r - n) * (2 / 3 - i) * 6\n                  : n),\n              (o[e] = 255 * a);\n          return o;\n        }),\n        (a.hsl.hsv = function (t) {\n          var e = t[0],\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = n,\n            o = Math.max(r, 0.01);\n          return (\n            (n *= (r *= 2) <= 1 ? r : 2 - r),\n            (i *= o <= 1 ? o : 2 - o),\n            [\n              e,\n              100 * (0 === r ? (2 * i) / (o + i) : (2 * n) / (r + n)),\n              ((r + n) / 2) * 100,\n            ]\n          );\n        }),\n        (a.hsv.rgb = function (t) {\n          var e = t[0] / 60,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = Math.floor(e) % 6,\n            o = e - Math.floor(e),\n            a = 255 * r * (1 - n),\n            s = 255 * r * (1 - n * o),\n            c = 255 * r * (1 - n * (1 - o));\n          switch (((r *= 255), i)) {\n            case 0:\n              return [r, c, a];\n            case 1:\n              return [s, r, a];\n            case 2:\n              return [a, r, c];\n            case 3:\n              return [a, s, r];\n            case 4:\n              return [c, a, r];\n            case 5:\n              return [r, a, s];\n          }\n        }),\n        (a.hsv.hsl = function (t) {\n          var e,\n            n,\n            r = t[0],\n            i = t[1] / 100,\n            o = t[2] / 100,\n            a = Math.max(o, 0.01),\n            s = (2 - i) * o;\n          return (\n            (n = i * a),\n            [\n              r,\n              100 * (n = (n /= (e = (2 - i) * a) <= 1 ? e : 2 - e) || 0),\n              100 * (s /= 2),\n            ]\n          );\n        }),\n        (a.hwb.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i,\n            o,\n            a,\n            s,\n            c = t[0] / 360,\n            u = t[1] / 100,\n            h = t[2] / 100,\n            l = u + h;\n          switch (\n            (l > 1 && ((u /= l), (h /= l)),\n            (r = 6 * c - (e = Math.floor(6 * c))),\n            0 != (1 & e) && (r = 1 - r),\n            (i = u + r * ((n = 1 - h) - u)),\n            e)\n          ) {\n            default:\n            case 6:\n            case 0:\n              (o = n), (a = i), (s = u);\n              break;\n            case 1:\n              (o = i), (a = n), (s = u);\n              break;\n            case 2:\n              (o = u), (a = n), (s = i);\n              break;\n            case 3:\n              (o = u), (a = i), (s = n);\n              break;\n            case 4:\n              (o = i), (a = u), (s = n);\n              break;\n            case 5:\n              (o = n), (a = u), (s = i);\n          }\n          return [255 * o, 255 * a, 255 * s];\n        }),\n        (a.cmyk.rgb = function (t) {\n          var e = t[0] / 100,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = t[3] / 100;\n          return [\n            255 * (1 - Math.min(1, e * (1 - i) + i)),\n            255 * (1 - Math.min(1, n * (1 - i) + i)),\n            255 * (1 - Math.min(1, r * (1 - i) + i)),\n          ];\n        }),\n        (a.xyz.rgb = function (t) {\n          var e,\n            n,\n            r,\n            i = t[0] / 100,\n            o = t[1] / 100,\n            a = t[2] / 100;\n          return (\n            (n = -0.9689 * i + 1.8758 * o + 0.0415 * a),\n            (r = 0.0557 * i + -0.204 * o + 1.057 * a),\n            (e =\n              (e = 3.2406 * i + -1.5372 * o + -0.4986 * a) > 0.0031308\n                ? 1.055 * Math.pow(e, 1 / 2.4) - 0.055\n                : 12.92 * e),\n            (n =\n              n > 0.0031308 ? 1.055 * Math.pow(n, 1 / 2.4) - 0.055 : 12.92 * n),\n            (r =\n              r > 0.0031308 ? 1.055 * Math.pow(r, 1 / 2.4) - 0.055 : 12.92 * r),\n            [\n              255 * (e = Math.min(Math.max(0, e), 1)),\n              255 * (n = Math.min(Math.max(0, n), 1)),\n              255 * (r = Math.min(Math.max(0, r), 1)),\n            ]\n          );\n        }),\n        (a.xyz.lab = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return (\n            (n /= 100),\n            (r /= 108.883),\n            (e =\n              (e /= 95.047) > 0.008856\n                ? Math.pow(e, 1 / 3)\n                : 7.787 * e + 16 / 116),\n            [\n              116 *\n                (n = n > 0.008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116) -\n                16,\n              500 * (e - n),\n              200 *\n                (n -\n                  (r =\n                    r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116)),\n            ]\n          );\n        }),\n        (a.lab.xyz = function (t) {\n          var e,\n            n,\n            r,\n            i = t[0];\n          (e = t[1] / 500 + (n = (i + 16) / 116)), (r = n - t[2] / 200);\n          var o = Math.pow(n, 3),\n            a = Math.pow(e, 3),\n            s = Math.pow(r, 3);\n          return (\n            (n = o > 0.008856 ? o : (n - 16 / 116) / 7.787),\n            (e = a > 0.008856 ? a : (e - 16 / 116) / 7.787),\n            (r = s > 0.008856 ? s : (r - 16 / 116) / 7.787),\n            [(e *= 95.047), (n *= 100), (r *= 108.883)]\n          );\n        }),\n        (a.lab.lch = function (t) {\n          var e,\n            n = t[0],\n            r = t[1],\n            i = t[2];\n          return (\n            (e = (360 * Math.atan2(i, r)) / 2 / Math.PI) < 0 && (e += 360),\n            [n, Math.sqrt(r * r + i * i), e]\n          );\n        }),\n        (a.lch.lab = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = (t[2] / 360) * 2 * Math.PI;\n          return [e, n * Math.cos(r), n * Math.sin(r)];\n        }),\n        (a.rgb.ansi16 = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2],\n            i = 1 in arguments ? arguments[1] : a.rgb.hsv(t)[2];\n          if (0 === (i = Math.round(i / 50))) return 30;\n          var o =\n            30 +\n            ((Math.round(r / 255) << 2) |\n              (Math.round(n / 255) << 1) |\n              Math.round(e / 255));\n          return 2 === i && (o += 60), o;\n        }),\n        (a.hsv.ansi16 = function (t) {\n          return a.rgb.ansi16(a.hsv.rgb(t), t[2]);\n        }),\n        (a.rgb.ansi256 = function (t) {\n          var e = t[0],\n            n = t[1],\n            r = t[2];\n          return e === n && n === r\n            ? e < 8\n              ? 16\n              : e > 248\n              ? 231\n              : Math.round(((e - 8) / 247) * 24) + 232\n            : 16 +\n                36 * Math.round((e / 255) * 5) +\n                6 * Math.round((n / 255) * 5) +\n                Math.round((r / 255) * 5);\n        }),\n        (a.ansi16.rgb = function (t) {\n          var e = t % 10;\n          if (0 === e || 7 === e)\n            return t > 50 && (e += 3.5), [(e = (e / 10.5) * 255), e, e];\n          var n = 0.5 * (1 + ~~(t > 50));\n          return [\n            (1 & e) * n * 255,\n            ((e >> 1) & 1) * n * 255,\n            ((e >> 2) & 1) * n * 255,\n          ];\n        }),\n        (a.ansi256.rgb = function (t) {\n          return t >= 232\n            ? [(n = 10 * (t - 232) + 8), n, n]\n            : ((t -= 16),\n              [\n                (Math.floor(t / 36) / 5) * 255,\n                (Math.floor((e = t % 36) / 6) / 5) * 255,\n                ((e % 6) / 5) * 255,\n              ]);\n          var e, n;\n        }),\n        (a.rgb.hex = function (t) {\n          var e = (\n            ((255 & Math.round(t[0])) << 16) +\n            ((255 & Math.round(t[1])) << 8) +\n            (255 & Math.round(t[2]))\n          )\n            .toString(16)\n            .toUpperCase();\n          return \"000000\".substring(e.length) + e;\n        }),\n        (a.hex.rgb = function (t) {\n          var e = t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n          if (!e) return [0, 0, 0];\n          var n = e[0];\n          3 === e[0].length &&\n            (n = n\n              .split(\"\")\n              .map(function (t) {\n                return t + t;\n              })\n              .join(\"\"));\n          var r = parseInt(n, 16);\n          return [(r >> 16) & 255, (r >> 8) & 255, 255 & r];\n        }),\n        (a.rgb.hcg = function (t) {\n          var e,\n            n = t[0] / 255,\n            r = t[1] / 255,\n            i = t[2] / 255,\n            o = Math.max(Math.max(n, r), i),\n            a = Math.min(Math.min(n, r), i),\n            s = o - a;\n          return (\n            (e =\n              s <= 0\n                ? 0\n                : o === n\n                ? ((r - i) / s) % 6\n                : o === r\n                ? 2 + (i - n) / s\n                : 4 + (n - r) / s + 4),\n            (e /= 6),\n            [360 * (e %= 1), 100 * s, 100 * (s < 1 ? a / (1 - s) : 0)]\n          );\n        }),\n        (a.hsl.hcg = function (t) {\n          var e,\n            n = t[1] / 100,\n            r = t[2] / 100,\n            i = 0;\n          return (\n            (e = r < 0.5 ? 2 * n * r : 2 * n * (1 - r)) < 1 &&\n              (i = (r - 0.5 * e) / (1 - e)),\n            [t[0], 100 * e, 100 * i]\n          );\n        }),\n        (a.hsv.hcg = function (t) {\n          var e = t[1] / 100,\n            n = t[2] / 100,\n            r = e * n,\n            i = 0;\n          return r < 1 && (i = (n - r) / (1 - r)), [t[0], 100 * r, 100 * i];\n        }),\n        (a.hcg.rgb = function (t) {\n          var e = t[0] / 360,\n            n = t[1] / 100,\n            r = t[2] / 100;\n          if (0 === n) return [255 * r, 255 * r, 255 * r];\n          var i,\n            o = [0, 0, 0],\n            a = (e % 1) * 6,\n            s = a % 1,\n            c = 1 - s;\n          switch (Math.floor(a)) {\n            case 0:\n              (o[0] = 1), (o[1] = s), (o[2] = 0);\n              break;\n            case 1:\n              (o[0] = c), (o[1] = 1), (o[2] = 0);\n              break;\n            case 2:\n              (o[0] = 0), (o[1] = 1), (o[2] = s);\n              break;\n            case 3:\n              (o[0] = 0), (o[1] = c), (o[2] = 1);\n              break;\n            case 4:\n              (o[0] = s), (o[1] = 0), (o[2] = 1);\n              break;\n            default:\n              (o[0] = 1), (o[1] = 0), (o[2] = c);\n          }\n          return (\n            (i = (1 - n) * r),\n            [255 * (n * o[0] + i), 255 * (n * o[1] + i), 255 * (n * o[2] + i)]\n          );\n        }),\n        (a.hcg.hsv = function (t) {\n          var e = t[1] / 100,\n            n = e + (t[2] / 100) * (1 - e),\n            r = 0;\n          return n > 0 && (r = e / n), [t[0], 100 * r, 100 * n];\n        }),\n        (a.hcg.hsl = function (t) {\n          var e = t[1] / 100,\n            n = (t[2] / 100) * (1 - e) + 0.5 * e,\n            r = 0;\n          return (\n            n > 0 && n < 0.5\n              ? (r = e / (2 * n))\n              : n >= 0.5 && n < 1 && (r = e / (2 * (1 - n))),\n            [t[0], 100 * r, 100 * n]\n          );\n        }),\n        (a.hcg.hwb = function (t) {\n          var e = t[1] / 100,\n            n = e + (t[2] / 100) * (1 - e);\n          return [t[0], 100 * (n - e), 100 * (1 - n)];\n        }),\n        (a.hwb.hcg = function (t) {\n          var e = t[1] / 100,\n            n = 1 - t[2] / 100,\n            r = n - e,\n            i = 0;\n          return r < 1 && (i = (n - r) / (1 - r)), [t[0], 100 * r, 100 * i];\n        }),\n        (a.apple.rgb = function (t) {\n          return [\n            (t[0] / 65535) * 255,\n            (t[1] / 65535) * 255,\n            (t[2] / 65535) * 255,\n          ];\n        }),\n        (a.rgb.apple = function (t) {\n          return [\n            (t[0] / 255) * 65535,\n            (t[1] / 255) * 65535,\n            (t[2] / 255) * 65535,\n          ];\n        }),\n        (a.gray.rgb = function (t) {\n          return [(t[0] / 100) * 255, (t[0] / 100) * 255, (t[0] / 100) * 255];\n        }),\n        (a.gray.hsl = a.gray.hsv =\n          function (t) {\n            return [0, 0, t[0]];\n          }),\n        (a.gray.hwb = function (t) {\n          return [0, 100, t[0]];\n        }),\n        (a.gray.cmyk = function (t) {\n          return [0, 0, 0, t[0]];\n        }),\n        (a.gray.lab = function (t) {\n          return [t[0], 0, 0];\n        }),\n        (a.gray.hex = function (t) {\n          var e = 255 & Math.round((t[0] / 100) * 255),\n            n = ((e << 16) + (e << 8) + e).toString(16).toUpperCase();\n          return \"000000\".substring(n.length) + n;\n        }),\n        (a.rgb.gray = function (t) {\n          return [((t[0] + t[1] + t[2]) / 3 / 255) * 100];\n        });\n    },\n    127: function (t, e) {},\n    128: function (t, e) {},\n    183: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(185),\n        o = n(92),\n        a = n(6),\n        s = n(0);\n      function c(t) {\n        return (c =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var u,\n        h,\n        l = 0,\n        f = 0,\n        d = 0,\n        p = 0,\n        g = 0,\n        v = 0,\n        y =\n          \"object\" ===\n            (\"undefined\" == typeof performance\n              ? \"undefined\"\n              : c(performance)) && performance.now\n            ? performance\n            : Date,\n        m =\n          \"object\" ===\n            (\"undefined\" == typeof window ? \"undefined\" : c(window)) &&\n          window.requestAnimationFrame\n            ? window.requestAnimationFrame.bind(window)\n            : function (t) {\n                setTimeout(t, 17);\n              };\n      function b() {\n        return g || (m(x), (g = y.now() + v));\n      }\n      function x() {\n        g = 0;\n      }\n      function S() {\n        this._call = this._time = this._next = null;\n      }\n      function w(t, e, n) {\n        var r = new S();\n        return r.restart(t, e, n), r;\n      }\n      function O() {\n        (g = (p = y.now()) + v), (l = f = 0);\n        try {\n          !(function () {\n            b(), ++l;\n            for (var t, e = u; e; )\n              (t = g - e._time) >= 0 && e._call.call(null, t), (e = e._next);\n            --l;\n          })();\n        } finally {\n          (l = 0),\n            (function () {\n              var t,\n                e,\n                n = u,\n                r = 1 / 0;\n              for (; n; )\n                n._call\n                  ? (r > n._time && (r = n._time), (t = n), (n = n._next))\n                  : ((e = n._next),\n                    (n._next = null),\n                    (n = t ? (t._next = e) : (u = e)));\n              (h = t), k(r);\n            })(),\n            (g = 0);\n        }\n      }\n      function M() {\n        var t = y.now(),\n          e = t - p;\n        e > 1e3 && ((v -= e), (p = t));\n      }\n      function k(t) {\n        l ||\n          (f && (f = clearTimeout(f)),\n          t - g > 24\n            ? (t < 1 / 0 && (f = setTimeout(O, t - y.now() - v)),\n              d && (d = clearInterval(d)))\n            : (d || ((p = y.now()), (d = setInterval(M, 1e3))), (l = 1), m(O)));\n      }\n      S.prototype = w.prototype = {\n        constructor: S,\n        restart: function (t, e, n) {\n          if (\"function\" != typeof t)\n            throw new TypeError(\"callback is not a function\");\n          (n = (null == n ? b() : +n) + (null == e ? 0 : +e)),\n            this._next ||\n              h === this ||\n              (h ? (h._next = this) : (u = this), (h = this)),\n            (this._call = t),\n            (this._time = n),\n            k();\n        },\n        stop: function () {\n          this._call && ((this._call = null), (this._time = 1 / 0), k());\n        },\n      };\n      var j = function (t, e, n) {\n        (t.prototype = e.prototype = n), (n.constructor = t);\n      };\n      function C(t, e) {\n        var n = Object.create(t.prototype);\n        for (var r in e) n[r] = e[r];\n        return n;\n      }\n      function E() {}\n      var P = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n        A = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n        I = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n        T = /^#([0-9a-f]{3,8})$/,\n        N = new RegExp(\n          \"^rgb\\\\(\".concat(P, \",\").concat(P, \",\").concat(P, \"\\\\)$\"),\n        ),\n        B = new RegExp(\n          \"^rgb\\\\(\".concat(I, \",\").concat(I, \",\").concat(I, \"\\\\)$\"),\n        ),\n        L = new RegExp(\n          \"^rgba\\\\(\"\n            .concat(P, \",\")\n            .concat(P, \",\")\n            .concat(P, \",\")\n            .concat(A, \"\\\\)$\"),\n        ),\n        D = new RegExp(\n          \"^rgba\\\\(\"\n            .concat(I, \",\")\n            .concat(I, \",\")\n            .concat(I, \",\")\n            .concat(A, \"\\\\)$\"),\n        ),\n        _ = new RegExp(\n          \"^hsl\\\\(\".concat(A, \",\").concat(I, \",\").concat(I, \"\\\\)$\"),\n        ),\n        R = new RegExp(\n          \"^hsla\\\\(\"\n            .concat(A, \",\")\n            .concat(I, \",\")\n            .concat(I, \",\")\n            .concat(A, \"\\\\)$\"),\n        ),\n        F = {\n          aliceblue: 15792383,\n          antiquewhite: 16444375,\n          aqua: 65535,\n          aquamarine: 8388564,\n          azure: 15794175,\n          beige: 16119260,\n          bisque: 16770244,\n          black: 0,\n          blanchedalmond: 16772045,\n          blue: 255,\n          blueviolet: 9055202,\n          brown: 10824234,\n          burlywood: 14596231,\n          cadetblue: 6266528,\n          chartreuse: 8388352,\n          chocolate: 13789470,\n          coral: 16744272,\n          cornflowerblue: 6591981,\n          cornsilk: 16775388,\n          crimson: 14423100,\n          cyan: 65535,\n          darkblue: 139,\n          darkcyan: 35723,\n          darkgoldenrod: 12092939,\n          darkgray: 11119017,\n          darkgreen: 25600,\n          darkgrey: 11119017,\n          darkkhaki: 12433259,\n          darkmagenta: 9109643,\n          darkolivegreen: 5597999,\n          darkorange: 16747520,\n          darkorchid: 10040012,\n          darkred: 9109504,\n          darksalmon: 15308410,\n          darkseagreen: 9419919,\n          darkslateblue: 4734347,\n          darkslategray: 3100495,\n          darkslategrey: 3100495,\n          darkturquoise: 52945,\n          darkviolet: 9699539,\n          deeppink: 16716947,\n          deepskyblue: 49151,\n          dimgray: 6908265,\n          dimgrey: 6908265,\n          dodgerblue: 2003199,\n          firebrick: 11674146,\n          floralwhite: 16775920,\n          forestgreen: 2263842,\n          fuchsia: 16711935,\n          gainsboro: 14474460,\n          ghostwhite: 16316671,\n          gold: 16766720,\n          goldenrod: 14329120,\n          gray: 8421504,\n          green: 32768,\n          greenyellow: 11403055,\n          grey: 8421504,\n          honeydew: 15794160,\n          hotpink: 16738740,\n          indianred: 13458524,\n          indigo: 4915330,\n          ivory: 16777200,\n          khaki: 15787660,\n          lavender: 15132410,\n          lavenderblush: 16773365,\n          lawngreen: 8190976,\n          lemonchiffon: 16775885,\n          lightblue: 11393254,\n          lightcoral: 15761536,\n          lightcyan: 14745599,\n          lightgoldenrodyellow: 16448210,\n          lightgray: 13882323,\n          lightgreen: 9498256,\n          lightgrey: 13882323,\n          lightpink: 16758465,\n          lightsalmon: 16752762,\n          lightseagreen: 2142890,\n          lightskyblue: 8900346,\n          lightslategray: 7833753,\n          lightslategrey: 7833753,\n          lightsteelblue: 11584734,\n          lightyellow: 16777184,\n          lime: 65280,\n          limegreen: 3329330,\n          linen: 16445670,\n          magenta: 16711935,\n          maroon: 8388608,\n          mediumaquamarine: 6737322,\n          mediumblue: 205,\n          mediumorchid: 12211667,\n          mediumpurple: 9662683,\n          mediumseagreen: 3978097,\n          mediumslateblue: 8087790,\n          mediumspringgreen: 64154,\n          mediumturquoise: 4772300,\n          mediumvioletred: 13047173,\n          midnightblue: 1644912,\n          mintcream: 16121850,\n          mistyrose: 16770273,\n          moccasin: 16770229,\n          navajowhite: 16768685,\n          navy: 128,\n          oldlace: 16643558,\n          olive: 8421376,\n          olivedrab: 7048739,\n          orange: 16753920,\n          orangered: 16729344,\n          orchid: 14315734,\n          palegoldenrod: 15657130,\n          palegreen: 10025880,\n          paleturquoise: 11529966,\n          palevioletred: 14381203,\n          papayawhip: 16773077,\n          peachpuff: 16767673,\n          peru: 13468991,\n          pink: 16761035,\n          plum: 14524637,\n          powderblue: 11591910,\n          purple: 8388736,\n          rebeccapurple: 6697881,\n          red: 16711680,\n          rosybrown: 12357519,\n          royalblue: 4286945,\n          saddlebrown: 9127187,\n          salmon: 16416882,\n          sandybrown: 16032864,\n          seagreen: 3050327,\n          seashell: 16774638,\n          sienna: 10506797,\n          silver: 12632256,\n          skyblue: 8900331,\n          slateblue: 6970061,\n          slategray: 7372944,\n          slategrey: 7372944,\n          snow: 16775930,\n          springgreen: 65407,\n          steelblue: 4620980,\n          tan: 13808780,\n          teal: 32896,\n          thistle: 14204888,\n          tomato: 16737095,\n          turquoise: 4251856,\n          violet: 15631086,\n          wheat: 16113331,\n          white: 16777215,\n          whitesmoke: 16119285,\n          yellow: 16776960,\n          yellowgreen: 10145074,\n        };\n      function Y() {\n        return this.rgb().formatHex();\n      }\n      function X() {\n        return this.rgb().formatRgb();\n      }\n      function z(t) {\n        var e, n;\n        return (\n          (t = (t + \"\").trim().toLowerCase()),\n          (e = T.exec(t))\n            ? ((n = e[1].length),\n              (e = parseInt(e[1], 16)),\n              6 === n\n                ? W(e)\n                : 3 === n\n                ? new H(\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    ((15 & e) << 4) | (15 & e),\n                    1,\n                  )\n                : 8 === n\n                ? q(\n                    (e >> 24) & 255,\n                    (e >> 16) & 255,\n                    (e >> 8) & 255,\n                    (255 & e) / 255,\n                  )\n                : 4 === n\n                ? q(\n                    ((e >> 12) & 15) | ((e >> 8) & 240),\n                    ((e >> 8) & 15) | ((e >> 4) & 240),\n                    ((e >> 4) & 15) | (240 & e),\n                    (((15 & e) << 4) | (15 & e)) / 255,\n                  )\n                : null)\n            : (e = N.exec(t))\n            ? new H(e[1], e[2], e[3], 1)\n            : (e = B.exec(t))\n            ? new H(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                1,\n              )\n            : (e = L.exec(t))\n            ? q(e[1], e[2], e[3], e[4])\n            : (e = D.exec(t))\n            ? q(\n                (255 * e[1]) / 100,\n                (255 * e[2]) / 100,\n                (255 * e[3]) / 100,\n                e[4],\n              )\n            : (e = _.exec(t))\n            ? J(e[1], e[2] / 100, e[3] / 100, 1)\n            : (e = R.exec(t))\n            ? J(e[1], e[2] / 100, e[3] / 100, e[4])\n            : F.hasOwnProperty(t)\n            ? W(F[t])\n            : \"transparent\" === t\n            ? new H(NaN, NaN, NaN, 0)\n            : null\n        );\n      }\n      function W(t) {\n        return new H((t >> 16) & 255, (t >> 8) & 255, 255 & t, 1);\n      }\n      function q(t, e, n, r) {\n        return r <= 0 && (t = e = n = NaN), new H(t, e, n, r);\n      }\n      function V(t) {\n        return (\n          t instanceof E || (t = z(t)),\n          t ? new H((t = t.rgb()).r, t.g, t.b, t.opacity) : new H()\n        );\n      }\n      function G(t, e, n, r) {\n        return 1 === arguments.length\n          ? V(t)\n          : new H(t, e, n, null == r ? 1 : r);\n      }\n      function H(t, e, n, r) {\n        (this.r = +t), (this.g = +e), (this.b = +n), (this.opacity = +r);\n      }\n      function U() {\n        return \"#\".concat(Q(this.r)).concat(Q(this.g)).concat(Q(this.b));\n      }\n      function Z() {\n        var t = K(this.opacity);\n        return \"\"\n          .concat(1 === t ? \"rgb(\" : \"rgba(\")\n          .concat($(this.r), \", \")\n          .concat($(this.g), \", \")\n          .concat($(this.b))\n          .concat(1 === t ? \")\" : \", \".concat(t, \")\"));\n      }\n      function K(t) {\n        return isNaN(t) ? 1 : Math.max(0, Math.min(1, t));\n      }\n      function $(t) {\n        return Math.max(0, Math.min(255, Math.round(t) || 0));\n      }\n      function Q(t) {\n        return ((t = $(t)) < 16 ? \"0\" : \"\") + t.toString(16);\n      }\n      function J(t, e, n, r) {\n        return (\n          r <= 0\n            ? (t = e = n = NaN)\n            : n <= 0 || n >= 1\n            ? (t = e = NaN)\n            : e <= 0 && (t = NaN),\n          new et(t, e, n, r)\n        );\n      }\n      function tt(t) {\n        if (t instanceof et) return new et(t.h, t.s, t.l, t.opacity);\n        if ((t instanceof E || (t = z(t)), !t)) return new et();\n        if (t instanceof et) return t;\n        var e = (t = t.rgb()).r / 255,\n          n = t.g / 255,\n          r = t.b / 255,\n          i = Math.min(e, n, r),\n          o = Math.max(e, n, r),\n          a = NaN,\n          s = o - i,\n          c = (o + i) / 2;\n        return (\n          s\n            ? ((a =\n                e === o\n                  ? (n - r) / s + 6 * (n < r)\n                  : n === o\n                  ? (r - e) / s + 2\n                  : (e - n) / s + 4),\n              (s /= c < 0.5 ? o + i : 2 - o - i),\n              (a *= 60))\n            : (s = c > 0 && c < 1 ? 0 : a),\n          new et(a, s, c, t.opacity)\n        );\n      }\n      function et(t, e, n, r) {\n        (this.h = +t), (this.s = +e), (this.l = +n), (this.opacity = +r);\n      }\n      function nt(t) {\n        return (t = (t || 0) % 360) < 0 ? t + 360 : t;\n      }\n      function rt(t) {\n        return Math.max(0, Math.min(1, t || 0));\n      }\n      function it(t, e, n) {\n        return (\n          255 *\n          (t < 60\n            ? e + ((n - e) * t) / 60\n            : t < 180\n            ? n\n            : t < 240\n            ? e + ((n - e) * (240 - t)) / 60\n            : e)\n        );\n      }\n      function ot(t, e, n, r, i) {\n        var o = t * t,\n          a = o * t;\n        return (\n          ((1 - 3 * t + 3 * o - a) * e +\n            (4 - 6 * o + 3 * a) * n +\n            (1 + 3 * t + 3 * o - 3 * a) * r +\n            a * i) /\n          6\n        );\n      }\n      j(E, z, {\n        copy: function (t) {\n          return Object.assign(new this.constructor(), this, t);\n        },\n        displayable: function () {\n          return this.rgb().displayable();\n        },\n        hex: Y,\n        formatHex: Y,\n        formatHex8: function () {\n          return this.rgb().formatHex8();\n        },\n        formatHsl: function () {\n          return tt(this).formatHsl();\n        },\n        formatRgb: X,\n        toString: X,\n      }),\n        j(\n          H,\n          G,\n          C(E, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new H(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new H(this.r * t, this.g * t, this.b * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              return this;\n            },\n            clamp: function () {\n              return new H($(this.r), $(this.g), $(this.b), K(this.opacity));\n            },\n            displayable: function () {\n              return (\n                -0.5 <= this.r &&\n                this.r < 255.5 &&\n                -0.5 <= this.g &&\n                this.g < 255.5 &&\n                -0.5 <= this.b &&\n                this.b < 255.5 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            hex: U,\n            formatHex: U,\n            formatHex8: function () {\n              return \"#\"\n                .concat(Q(this.r))\n                .concat(Q(this.g))\n                .concat(Q(this.b))\n                .concat(Q(255 * (isNaN(this.opacity) ? 1 : this.opacity)));\n            },\n            formatRgb: Z,\n            toString: Z,\n          }),\n        ),\n        j(\n          et,\n          function (t, e, n, r) {\n            return 1 === arguments.length\n              ? tt(t)\n              : new et(t, e, n, null == r ? 1 : r);\n          },\n          C(E, {\n            brighter: function (t) {\n              return (\n                (t = null == t ? 1 / 0.7 : Math.pow(1 / 0.7, t)),\n                new et(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            darker: function (t) {\n              return (\n                (t = null == t ? 0.7 : Math.pow(0.7, t)),\n                new et(this.h, this.s, this.l * t, this.opacity)\n              );\n            },\n            rgb: function () {\n              var t = (this.h % 360) + 360 * (this.h < 0),\n                e = isNaN(t) || isNaN(this.s) ? 0 : this.s,\n                n = this.l,\n                r = n + (n < 0.5 ? n : 1 - n) * e,\n                i = 2 * n - r;\n              return new H(\n                it(t >= 240 ? t - 240 : t + 120, i, r),\n                it(t, i, r),\n                it(t < 120 ? t + 240 : t - 120, i, r),\n                this.opacity,\n              );\n            },\n            clamp: function () {\n              return new et(\n                nt(this.h),\n                rt(this.s),\n                rt(this.l),\n                K(this.opacity),\n              );\n            },\n            displayable: function () {\n              return (\n                ((0 <= this.s && this.s <= 1) || isNaN(this.s)) &&\n                0 <= this.l &&\n                this.l <= 1 &&\n                0 <= this.opacity &&\n                this.opacity <= 1\n              );\n            },\n            formatHsl: function () {\n              var t = K(this.opacity);\n              return \"\"\n                .concat(1 === t ? \"hsl(\" : \"hsla(\")\n                .concat(nt(this.h), \", \")\n                .concat(100 * rt(this.s), \"%, \")\n                .concat(100 * rt(this.l), \"%\")\n                .concat(1 === t ? \")\" : \", \".concat(t, \")\"));\n            },\n          }),\n        );\n      var at = function (t) {\n        return function () {\n          return t;\n        };\n      };\n      function st(t, e) {\n        return function (n) {\n          return t + n * e;\n        };\n      }\n      function ct(t) {\n        return 1 == (t = +t)\n          ? ut\n          : function (e, n) {\n              return n - e\n                ? (function (t, e, n) {\n                    return (\n                      (t = Math.pow(t, n)),\n                      (e = Math.pow(e, n) - t),\n                      (n = 1 / n),\n                      function (r) {\n                        return Math.pow(t + r * e, n);\n                      }\n                    );\n                  })(e, n, t)\n                : at(isNaN(e) ? n : e);\n            };\n      }\n      function ut(t, e) {\n        var n = e - t;\n        return n ? st(t, n) : at(isNaN(t) ? e : t);\n      }\n      var ht = (function t(e) {\n        var n = ct(e);\n        function r(t, e) {\n          var r = n((t = G(t)).r, (e = G(e)).r),\n            i = n(t.g, e.g),\n            o = n(t.b, e.b),\n            a = ut(t.opacity, e.opacity);\n          return function (e) {\n            return (\n              (t.r = r(e)),\n              (t.g = i(e)),\n              (t.b = o(e)),\n              (t.opacity = a(e)),\n              t + \"\"\n            );\n          };\n        }\n        return (r.gamma = t), r;\n      })(1);\n      function lt(t) {\n        return function (e) {\n          var n,\n            r,\n            i = e.length,\n            o = new Array(i),\n            a = new Array(i),\n            s = new Array(i);\n          for (n = 0; n < i; ++n)\n            (r = G(e[n])),\n              (o[n] = r.r || 0),\n              (a[n] = r.g || 0),\n              (s[n] = r.b || 0);\n          return (\n            (o = t(o)),\n            (a = t(a)),\n            (s = t(s)),\n            (r.opacity = 1),\n            function (t) {\n              return (r.r = o(t)), (r.g = a(t)), (r.b = s(t)), r + \"\";\n            }\n          );\n        };\n      }\n      lt(function (t) {\n        var e = t.length - 1;\n        return function (n) {\n          var r =\n              n <= 0 ? (n = 0) : n >= 1 ? ((n = 1), e - 1) : Math.floor(n * e),\n            i = t[r],\n            o = t[r + 1],\n            a = r > 0 ? t[r - 1] : 2 * i - o,\n            s = r < e - 1 ? t[r + 2] : 2 * o - i;\n          return ot((n - r / e) * e, a, i, o, s);\n        };\n      }),\n        lt(function (t) {\n          var e = t.length;\n          return function (n) {\n            var r = Math.floor(((n %= 1) < 0 ? ++n : n) * e),\n              i = t[(r + e - 1) % e],\n              o = t[r % e],\n              a = t[(r + 1) % e],\n              s = t[(r + 2) % e];\n            return ot((n - r / e) * e, i, o, a, s);\n          };\n        });\n      var ft = function (t, e) {\n        e || (e = []);\n        var n,\n          r = t ? Math.min(e.length, t.length) : 0,\n          i = e.slice();\n        return function (o) {\n          for (n = 0; n < r; ++n) i[n] = t[n] * (1 - o) + e[n] * o;\n          return i;\n        };\n      };\n      function dt(t) {\n        return ArrayBuffer.isView(t) && !(t instanceof DataView);\n      }\n      function pt(t, e) {\n        var n,\n          r = e ? e.length : 0,\n          i = t ? Math.min(r, t.length) : 0,\n          o = new Array(i),\n          a = new Array(r);\n        for (n = 0; n < i; ++n) o[n] = Ot(t[n], e[n]);\n        for (; n < r; ++n) a[n] = e[n];\n        return function (t) {\n          for (n = 0; n < i; ++n) a[n] = o[n](t);\n          return a;\n        };\n      }\n      var gt = function (t, e) {\n          var n = new Date();\n          return (\n            (t = +t),\n            (e = +e),\n            function (r) {\n              return n.setTime(t * (1 - r) + e * r), n;\n            }\n          );\n        },\n        vt = function (t, e) {\n          return (\n            (t = +t),\n            (e = +e),\n            function (n) {\n              return t * (1 - n) + e * n;\n            }\n          );\n        };\n      function yt(t) {\n        return (yt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var mt = function (t, e) {\n          var n,\n            r = {},\n            i = {};\n          for (n in ((null !== t && \"object\" === yt(t)) || (t = {}),\n          (null !== e && \"object\" === yt(e)) || (e = {}),\n          e))\n            n in t ? (r[n] = Ot(t[n], e[n])) : (i[n] = e[n]);\n          return function (t) {\n            for (n in r) i[n] = r[n](t);\n            return i;\n          };\n        },\n        bt = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        xt = new RegExp(bt.source, \"g\");\n      var St = function (t, e) {\n        var n,\n          r,\n          i,\n          o = (bt.lastIndex = xt.lastIndex = 0),\n          a = -1,\n          s = [],\n          c = [];\n        for (t += \"\", e += \"\"; (n = bt.exec(t)) && (r = xt.exec(e)); )\n          (i = r.index) > o &&\n            ((i = e.slice(o, i)), s[a] ? (s[a] += i) : (s[++a] = i)),\n            (n = n[0]) === (r = r[0])\n              ? s[a]\n                ? (s[a] += r)\n                : (s[++a] = r)\n              : ((s[++a] = null), c.push({ i: a, x: vt(n, r) })),\n            (o = xt.lastIndex);\n        return (\n          o < e.length && ((i = e.slice(o)), s[a] ? (s[a] += i) : (s[++a] = i)),\n          s.length < 2\n            ? c[0]\n              ? (function (t) {\n                  return function (e) {\n                    return t(e) + \"\";\n                  };\n                })(c[0].x)\n              : (function (t) {\n                  return function () {\n                    return t;\n                  };\n                })(e)\n            : ((e = c.length),\n              function (t) {\n                for (var n, r = 0; r < e; ++r) s[(n = c[r]).i] = n.x(t);\n                return s.join(\"\");\n              })\n        );\n      };\n      function wt(t) {\n        return (wt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Ot = function (t, e) {\n          var n,\n            r = wt(e);\n          return null == e || \"boolean\" === r\n            ? at(e)\n            : (\"number\" === r\n                ? vt\n                : \"string\" === r\n                ? (n = z(e))\n                  ? ((e = n), ht)\n                  : St\n                : e instanceof z\n                ? ht\n                : e instanceof Date\n                ? gt\n                : dt(e)\n                ? ft\n                : Array.isArray(e)\n                ? pt\n                : (\"function\" != typeof e.valueOf &&\n                    \"function\" != typeof e.toString) ||\n                  isNaN(e)\n                ? mt\n                : vt)(t, e);\n        },\n        Mt = n(90),\n        kt = n(34),\n        jt = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n      function Ct(t, e, n) {\n        var r,\n          i = e.startTime;\n        if (n < i + e.delay || e._paused) return !1;\n        var o = e.duration,\n          a = e.easing,\n          c = Object(Mt.a)(a);\n        if (((n = n - i - e.delay), e.repeat)) r = c((r = (n % o) / o));\n        else {\n          if (!((r = n / o) < 1))\n            return e.onFrame ? t.attr(e.onFrame(1)) : t.attr(e.toAttrs), !0;\n          r = c(r);\n        }\n        if (e.onFrame) {\n          var u = e.onFrame(r);\n          t.attr(u);\n        } else\n          !(function (t, e, n) {\n            var r = {},\n              i = e.fromAttrs,\n              o = e.toAttrs;\n            if (!t.destroyed) {\n              var a, c, u, h;\n              for (var l in o)\n                if (!Object(s.isEqual)(i[l], o[l]))\n                  if (\"path\" === l) {\n                    var f = o[l],\n                      d = i[l];\n                    f.length > d.length\n                      ? ((f = kt.parsePathString(o[l])),\n                        (d = kt.parsePathString(i[l])),\n                        (d = kt.fillPathByDiff(d, f)),\n                        (d = kt.formatPath(d, f)),\n                        (e.fromAttrs.path = d),\n                        (e.toAttrs.path = f))\n                      : e.pathFormatted ||\n                        ((f = kt.parsePathString(o[l])),\n                        (d = kt.parsePathString(i[l])),\n                        (d = kt.formatPath(d, f)),\n                        (e.fromAttrs.path = d),\n                        (e.toAttrs.path = f),\n                        (e.pathFormatted = !0)),\n                      (r[l] = []);\n                    for (var p = 0; p < f.length; p++) {\n                      for (\n                        var g = f[p], v = d[p], y = [], m = 0;\n                        m < g.length;\n                        m++\n                      )\n                        Object(s.isNumber)(g[m]) &&\n                        v &&\n                        Object(s.isNumber)(v[m])\n                          ? ((a = Ot(v[m], g[m])), y.push(a(n)))\n                          : y.push(g[m]);\n                      r[l].push(y);\n                    }\n                  } else if (\"matrix\" === l) {\n                    var b = ((u = i[l] || jt),\n                    (dt((h = o[l] || jt)) ? ft : pt)(u, h))(n);\n                    r[l] = b;\n                  } else\n                    [\"fill\", \"stroke\", \"fillStyle\", \"strokeStyle\"].includes(\n                      l,\n                    ) && ((c = o[l]), /^[r,R,L,l]{1}[\\s]*\\(/.test(c))\n                      ? (r[l] = o[l])\n                      : Object(s.isFunction)(o[l]) ||\n                        ((a = Ot(i[l], o[l])), (r[l] = a(n)));\n              t.attr(r);\n            }\n          })(t, e, r);\n        return !1;\n      }\n      var Et = (function () {\n          function t(t) {\n            (this.animators = []),\n              (this.current = 0),\n              (this.timer = null),\n              (this.canvas = t);\n          }\n          return (\n            (t.prototype.initTimer = function () {\n              var t,\n                e,\n                n,\n                r = this;\n              this.timer = w(function (i) {\n                if (((r.current = i), r.animators.length > 0)) {\n                  for (var o = r.animators.length - 1; o >= 0; o--)\n                    if ((t = r.animators[o]).destroyed) r.removeAnimator(o);\n                    else {\n                      if (!t.isAnimatePaused())\n                        for (\n                          var a = (e = t.get(\"animations\")).length - 1;\n                          a >= 0;\n                          a--\n                        )\n                          (n = e[a]),\n                            Ct(t, n, i) &&\n                              (e.splice(a, 1), !1, n.callback && n.callback());\n                      0 === e.length && r.removeAnimator(o);\n                    }\n                  r.canvas.get(\"autoDraw\") || r.canvas.draw();\n                }\n              });\n            }),\n            (t.prototype.addAnimator = function (t) {\n              this.animators.push(t);\n            }),\n            (t.prototype.removeAnimator = function (t) {\n              this.animators.splice(t, 1);\n            }),\n            (t.prototype.isAnimating = function () {\n              return !!this.animators.length;\n            }),\n            (t.prototype.stop = function () {\n              this.timer && this.timer.stop();\n            }),\n            (t.prototype.stopAllAnimations = function (t) {\n              void 0 === t && (t = !0),\n                this.animators.forEach(function (e) {\n                  e.stopAnimate(t);\n                }),\n                (this.animators = []),\n                this.canvas.draw();\n            }),\n            (t.prototype.getTime = function () {\n              return this.current;\n            }),\n            t\n          );\n        })(),\n        Pt = n(86),\n        At = [\n          \"mousedown\",\n          \"mouseup\",\n          \"dblclick\",\n          \"mouseout\",\n          \"mouseover\",\n          \"mousemove\",\n          \"mouseleave\",\n          \"mouseenter\",\n          \"touchstart\",\n          \"touchmove\",\n          \"touchend\",\n          \"dragenter\",\n          \"dragover\",\n          \"dragleave\",\n          \"drop\",\n          \"contextmenu\",\n          \"mousewheel\",\n        ];\n      function It(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function Tt(t, e, n) {\n        if (n.bubbles) {\n          var r = void 0,\n            i = !1;\n          if (\n            (\"mouseenter\" === e\n              ? ((r = n.fromShape), (i = !0))\n              : \"mouseleave\" === e && ((i = !0), (r = n.toShape)),\n            t.isCanvas() && i)\n          )\n            return;\n          if (r && Object(a.g)(t, r)) return void (n.bubbles = !1);\n          (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var Nt = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.mousedownShape = null),\n              (this.mousedownPoint = null),\n              (this._eventCallback = function (t) {\n                var n = t.type;\n                e._triggerEvent(n, t);\n              }),\n              (this._onDocumentMove = function (t) {\n                if (\n                  e.canvas.get(\"el\") !== t.target &&\n                  (e.dragging || e.currentShape)\n                ) {\n                  var n = e._getPointInfo(t);\n                  e.dragging && e._emitEvent(\"drag\", t, n, e.draggingShape);\n                }\n              }),\n              (this._onDocumentMouseUp = function (t) {\n                if (e.canvas.get(\"el\") !== t.target && e.dragging) {\n                  var n = e._getPointInfo(t);\n                  e.draggingShape && e._emitEvent(\"drop\", t, n, null),\n                    e._emitEvent(\"dragend\", t, n, e.draggingShape),\n                    e._afterDrag(e.draggingShape, n, t);\n                }\n              }),\n              (this.canvas = t.canvas);\n          }\n          return (\n            (t.prototype.init = function () {\n              this._bindEvents();\n            }),\n            (t.prototype._bindEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(a.a)(At, function (n) {\n                e.addEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.addEventListener(\"mousemove\", this._onDocumentMove),\n                  document.addEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._clearEvents = function () {\n              var t = this,\n                e = this.canvas.get(\"el\");\n              Object(a.a)(At, function (n) {\n                e.removeEventListener(n, t._eventCallback);\n              }),\n                document &&\n                  (document.removeEventListener(\n                    \"mousemove\",\n                    this._onDocumentMove,\n                  ),\n                  document.removeEventListener(\n                    \"mouseup\",\n                    this._onDocumentMouseUp,\n                  ));\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, i, o) {\n              var a = new Pt.a(t, e);\n              return (\n                (a.fromShape = i),\n                (a.toShape = o),\n                (a.x = n.x),\n                (a.y = n.y),\n                (a.clientX = n.clientX),\n                (a.clientY = n.clientY),\n                a.propagationPath.push(r),\n                a\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              return this.canvas.getShape(t.x, t.y, e);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t],\n                o = !1;\n              if (i) i.call(this, n, r, e);\n              else {\n                var a = this.currentShape;\n                \"mouseenter\" === t || \"dragenter\" === t || \"mouseover\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"mouseenter\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"mouseleave\" === t || \"dragleave\" === t || \"mouseout\" === t\n                  ? ((o = !0),\n                    a && this._emitEvent(t, e, n, a, a, null),\n                    this._emitEvent(t, e, n, null, a, null),\n                    \"mouseleave\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n              if ((o || (this.currentShape = r), r && !r.get(\"destroyed\"))) {\n                var s = this.canvas;\n                s.get(\"el\").style.cursor = r.attr(\"cursor\") || s.get(\"cursor\");\n              }\n            }),\n            (t.prototype._onmousedown = function (t, e, n) {\n              0 === n.button &&\n                ((this.mousedownShape = e),\n                (this.mousedownPoint = t),\n                (this.mousedownTimeStamp = n.timeStamp)),\n                this._emitEvent(\"mousedown\", n, t, e, null, null);\n            }),\n            (t.prototype._emitMouseoverEvents = function (t, e, n, r) {\n              var i = this.canvas.get(\"el\");\n              n !== r &&\n                (n &&\n                  (this._emitEvent(\"mouseout\", t, e, n, n, r),\n                  this._emitEvent(\"mouseleave\", t, e, n, n, r),\n                  (r && !r.get(\"destroyed\")) ||\n                    (i.style.cursor = this.canvas.get(\"cursor\"))),\n                r &&\n                  (this._emitEvent(\"mouseover\", t, e, r, n, r),\n                  this._emitEvent(\"mouseenter\", t, e, r, n, r)));\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              r !== t && this._emitMouseoverEvents(n, e, t, r),\n                (this.currentShape = r);\n            }),\n            (t.prototype._onmouseup = function (t, e, n) {\n              if (0 === n.button) {\n                var r = this.draggingShape;\n                this.dragging\n                  ? (r && this._emitEvent(\"drop\", n, t, e),\n                    this._emitEvent(\"dragend\", n, t, r),\n                    this._afterDrag(r, t, n))\n                  : (this._emitEvent(\"mouseup\", n, t, e),\n                    e === this.mousedownShape &&\n                      this._emitEvent(\"click\", n, t, e),\n                    (this.mousedownShape = null),\n                    (this.mousedownPoint = null));\n              }\n            }),\n            (t.prototype._ondragover = function (t, e, n) {\n              n.preventDefault();\n              var r = this.currentShape;\n              this._emitDragoverEvents(n, t, r, e, !0);\n            }),\n            (t.prototype._onmousemove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.mousedownPoint;\n                if (a) {\n                  var s = this.mousedownShape,\n                    c = n.timeStamp - this.mousedownTimeStamp,\n                    u = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  c > 120 || u * u + h * h > 40\n                    ? s && s.get(\"draggable\")\n                      ? ((o = this.mousedownShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.mousedownShape = null),\n                        (this.mousedownPoint = null))\n                      : (this._emitMouseoverEvents(n, t, i, e),\n                        this._emitEvent(\"mousemove\", n, t, e))\n                    : (this._emitMouseoverEvents(n, t, i, e),\n                      this._emitEvent(\"mousemove\", n, t, e));\n                } else\n                  this._emitMouseoverEvents(n, t, i, e),\n                    this._emitEvent(\"mousemove\", n, t, e);\n              }\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), It(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || Tt(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                It(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              this._clearEvents(),\n                (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.mousedownPoint = null),\n                (this.mousedownShape = null),\n                (this.mousedownTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        Bt = Object(i.a)(),\n        Lt = Bt && \"firefox\" === Bt.name,\n        Dt = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              n.initContainer(),\n              n.initDom(),\n              n.initEvents(),\n              n.initTimeline(),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              var e = t.prototype.getDefaultCfg.call(this);\n              return (e.cursor = \"default\"), (e.supportCSSTransform = !1), e;\n            }),\n            (e.prototype.initContainer = function () {\n              var t = this.get(\"container\");\n              Object(a.h)(t) &&\n                ((t = document.getElementById(t)), this.set(\"container\", t));\n            }),\n            (e.prototype.initDom = function () {\n              var t = this.createDom();\n              this.set(\"el\", t),\n                this.get(\"container\").appendChild(t),\n                this.setDOMSize(this.get(\"width\"), this.get(\"height\"));\n            }),\n            (e.prototype.initEvents = function () {\n              var t = new Nt({ canvas: this });\n              t.init(), this.set(\"eventController\", t);\n            }),\n            (e.prototype.initTimeline = function () {\n              var t = new Et(this);\n              this.set(\"timeline\", t);\n            }),\n            (e.prototype.setDOMSize = function (t, e) {\n              var n = this.get(\"el\");\n              a.c && ((n.style.width = t + \"px\"), (n.style.height = e + \"px\"));\n            }),\n            (e.prototype.changeSize = function (t, e) {\n              this.setDOMSize(t, e),\n                this.set(\"width\", t),\n                this.set(\"height\", e),\n                this.onCanvasChange(\"changeSize\");\n            }),\n            (e.prototype.getRenderer = function () {\n              return this.get(\"renderer\");\n            }),\n            (e.prototype.getCursor = function () {\n              return this.get(\"cursor\");\n            }),\n            (e.prototype.setCursor = function (t) {\n              this.set(\"cursor\", t);\n              var e = this.get(\"el\");\n              a.c && e && (e.style.cursor = t);\n            }),\n            (e.prototype.getPointByEvent = function (t) {\n              if (this.get(\"supportCSSTransform\")) {\n                if (Lt && !Object(a.e)(t.layerX) && t.layerX !== t.offsetX)\n                  return { x: t.layerX, y: t.layerY };\n                if (!Object(a.e)(t.offsetX))\n                  return { x: t.offsetX, y: t.offsetY };\n              }\n              var e = this.getClientByEvent(t),\n                n = e.x,\n                r = e.y;\n              return this.getPointByClient(n, r);\n            }),\n            (e.prototype.getClientByEvent = function (t) {\n              var e = t;\n              return (\n                t.touches &&\n                  (e =\n                    \"touchend\" === t.type ? t.changedTouches[0] : t.touches[0]),\n                { x: e.clientX, y: e.clientY }\n              );\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              var n = this.get(\"el\").getBoundingClientRect();\n              return { x: t - n.left, y: e - n.top };\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              var n = this.get(\"el\").getBoundingClientRect();\n              return { x: t + n.left, y: e + n.top };\n            }),\n            (e.prototype.draw = function () {}),\n            (e.prototype.removeDom = function () {\n              var t = this.get(\"el\");\n              t.parentNode.removeChild(t);\n            }),\n            (e.prototype.clearEvents = function () {\n              this.get(\"eventController\").destroy();\n            }),\n            (e.prototype.isCanvas = function () {\n              return !0;\n            }),\n            (e.prototype.getParent = function () {\n              return null;\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"timeline\");\n              this.get(\"destroyed\") ||\n                (this.clear(),\n                e && e.stop(),\n                this.clearEvents(),\n                this.removeDom(),\n                t.prototype.destroy.call(this));\n            }),\n            e\n          );\n        })(o.a);\n      e.a = Dt;\n    },\n    184: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(8);\n      function o(t, e, n) {\n        var r = t.getTotalMatrix();\n        if (r) {\n          var o = (function (t, e) {\n            if (e) {\n              var n = Object(i.invert)(e);\n              return Object(i.multiplyVec2)(n, t);\n            }\n            return t;\n          })([e, n, 1], r);\n          return [o[0], o[1]];\n        }\n        return [e, n];\n      }\n      function a(t, e, n) {\n        if (t.isCanvas && t.isCanvas()) return !0;\n        if (!Object(i.isAllowCapture)(t) || !1 === t.cfg.isInView) return !1;\n        if (t.cfg.clipShape) {\n          var r = o(t, e, n),\n            a = r[0],\n            s = r[1];\n          if (t.isClipped(a, s)) return !1;\n        }\n        var c = t.cfg.cacheCanvasBBox || t.getCanvasBBox();\n        return e >= c.minX && e <= c.maxX && n >= c.minY && n <= c.maxY;\n      }\n      var s = n(31),\n        c = n(52),\n        u = n(3),\n        h = n(40),\n        l = n(12),\n        f = n(38),\n        d = n.n(f);\n      function p(t, e, n) {\n        (n.name = e),\n          (n.target = t),\n          (n.currentTarget = t),\n          (n.delegateTarget = t),\n          t.emit(e, n);\n      }\n      function g(t, e, n) {\n        if (n.bubbles) {\n          t.isCanvas(),\n            0,\n            (n.name = e),\n            (n.currentTarget = t),\n            (n.delegateTarget = t),\n            t.emit(e, n);\n        }\n      }\n      var v = (function () {\n          function t(t) {\n            var e = this;\n            (this.draggingShape = null),\n              (this.dragging = !1),\n              (this.currentShape = null),\n              (this.panstartShape = null),\n              (this.panstartPoint = null),\n              (this.handleEvent = function (t) {\n                e.hammerRuntime.emit(\"origin_input:\" + t.type, t);\n              }),\n              (this.canvas = t.canvas),\n              this._initEvent();\n          }\n          return (\n            (t.prototype._initEvent = function () {\n              var t = this;\n              (this.hammerRuntime = new d.a({}, { inputClass: f.TouchInput })),\n                this.hammerRuntime.add(\n                  new d.a.Pan({ threshold: 0, pointers: 1 }),\n                ),\n                this.hammerRuntime\n                  .add(new d.a.Swipe())\n                  .recognizeWith(this.hammerRuntime.get(\"pan\")),\n                this.hammerRuntime.add(\n                  new d.a.Pinch({ threshold: 0, pointers: 2 }),\n                ),\n                this.hammerRuntime.add(\n                  new d.a.Tap({ event: \"dbltap\", taps: 2 }),\n                ),\n                this.hammerRuntime.add(new d.a.Tap()),\n                this.hammerRuntime.add(new d.a.Press({ time: 500 })),\n                this.hammerRuntime.on(\n                  \"panstart panmove panend pancancel\",\n                  function (e) {\n                    e.srcEvent.extra = e;\n                    var n = t._getPointInfo(e),\n                      r = t._getShape(n, e);\n                    (\"panend\" !== e.type && \"pancancel\" !== e.type) ||\n                      t._onpanend(n, r, e),\n                      \"panstart\" === e.type &&\n                        (t.dragging &&\n                          ((t.draggingShape = null),\n                          (t.dragging = !1),\n                          (t.panstartShape = null),\n                          (t.panstartPoint = null)),\n                        t._onpanstart(n, r, e)),\n                      \"panmove\" === e.type && t._onpanmove(n, r, e),\n                      (t.currentShape = r);\n                  },\n                ),\n                this.hammerRuntime.on(\n                  \"tap dbltap press swipe rotatestart rotatemove\",\n                  function (e) {\n                    t._emitMobileEvent(e.type, e);\n                  },\n                ),\n                this.hammerRuntime.on(\n                  \"pinchstart pinchmove pinchend pinchcancel\",\n                  function (e) {\n                    \"pinchend\" !== e.type && \"pinchcancel\" !== e.type\n                      ? ((e.srcEvent.extra = { scale: e.scale }),\n                        t._emitMobileEvent(e.type, e))\n                      : t._emitMobileEvent(e.type, e);\n                  },\n                );\n            }),\n            (t.prototype._emitMobileEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e);\n              this._emitEvent(t, e, n, r);\n            }),\n            (t.prototype._getEventObj = function (t, e, n, r, o, a) {\n              var s = new i.Event(t, e);\n              return (\n                (s.fromShape = o),\n                (s.toShape = a),\n                (s.x = n.x),\n                (s.y = n.y),\n                (s.clientX = n.clientX),\n                (s.clientY = n.clientY),\n                s.propagationPath.push(r),\n                s\n              );\n            }),\n            (t.prototype._getShape = function (t, e) {\n              var n = e.srcEvent;\n              return this.canvas.getShape(t.x, t.y, n);\n            }),\n            (t.prototype._getPointInfo = function (t) {\n              var e = this.canvas,\n                n = e.getClientByEvent(t),\n                r = e.getPointByEvent(t);\n              return { x: r.x, y: r.y, clientX: n.x, clientY: n.y };\n            }),\n            (t.prototype._triggerEvent = function (t, e) {\n              var n = this._getPointInfo(e),\n                r = this._getShape(n, e),\n                i = this[\"_on\" + t];\n              if (i) i.call(this, n, r, e);\n              else {\n                var o = this.currentShape;\n                \"panstart\" === t || \"dragenter\" === t\n                  ? (this._emitEvent(t, e, n, null, null, r),\n                    r && this._emitEvent(t, e, n, r, null, r),\n                    \"panstart\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragenter\", e, n, null))\n                  : \"panend\" === t || \"dragleave\" === t\n                  ? (o && this._emitEvent(t, e, n, o, o, null),\n                    this._emitEvent(t, e, n, null, o, null),\n                    \"panend\" === t &&\n                      this.draggingShape &&\n                      this._emitEvent(\"dragleave\", e, n, null))\n                  : this._emitEvent(t, e, n, r, null, null);\n              }\n            }),\n            (t.prototype._onpanstart = function (t, e, n) {\n              (this.panstartShape = e),\n                (this.panstartPoint = t),\n                (this.panstartTimeStamp = n.timeStamp),\n                this._emitEvent(\"panstart\", n, t, e, null, null);\n            }),\n            (t.prototype._emitDragoverEvents = function (t, e, n, r, i) {\n              r\n                ? (r !== n &&\n                    (n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                    this._emitEvent(\"dragenter\", t, e, r, n, r)),\n                  i || this._emitEvent(\"dragover\", t, e, r))\n                : n && this._emitEvent(\"dragleave\", t, e, n, n, r),\n                i && this._emitEvent(\"dragover\", t, e, r);\n            }),\n            (t.prototype._afterDrag = function (t, e, n) {\n              t && (t.set(\"capture\", !0), (this.draggingShape = null)),\n                (this.dragging = !1);\n              var r = this._getShape(e, n);\n              this.currentShape = r;\n            }),\n            (t.prototype._onpanend = function (t, e, n) {\n              var r = this.draggingShape;\n              this.dragging &&\n                (r && this._emitEvent(\"drop\", n, t, e),\n                this._emitEvent(\"dragend\", n, t, r),\n                this._afterDrag(r, t, n)),\n                this._emitEvent(\"panend\", n, t, e),\n                (this.panstartShape = null),\n                (this.panstartPoint = null);\n            }),\n            (t.prototype._onpanmove = function (t, e, n) {\n              var r = this.canvas,\n                i = this.currentShape,\n                o = this.draggingShape;\n              if (this.dragging)\n                o && this._emitDragoverEvents(n, t, i, e, !1),\n                  this._emitEvent(\"drag\", n, t, o);\n              else {\n                var a = this.panstartPoint;\n                if (a) {\n                  var s = this.panstartShape,\n                    c = n.timeStamp - this.panstartTimeStamp,\n                    u = a.clientX - t.clientX,\n                    h = a.clientY - t.clientY;\n                  (c > 120 || u * u + h * h > 40) &&\n                    (s && s.get(\"draggable\")\n                      ? ((o = this.panstartShape).set(\"capture\", !1),\n                        (this.draggingShape = o),\n                        (this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, o),\n                        (this.panstartShape = null),\n                        (this.panstartPoint = null))\n                      : !s && r.get(\"draggable\")\n                      ? ((this.dragging = !0),\n                        this._emitEvent(\"dragstart\", n, t, null),\n                        (this.panstartShape = null),\n                        (this.panstartPoint = null))\n                      : this._emitEvent(\"panmove\", n, t, e));\n                }\n              }\n              this._emitEvent(\"panmove\", n, t, e);\n            }),\n            (t.prototype._emitEvent = function (t, e, n, r, i, o) {\n              var a = this._getEventObj(t, e, n, r, i, o);\n              if (r) {\n                (a.shape = r), p(r, t, a);\n                for (var s = r.getParent(); s; )\n                  s.emitDelegation(t, a),\n                    a.propagationStopped || g(s, t, a),\n                    a.propagationPath.push(s),\n                    (s = s.getParent());\n              } else {\n                p(this.canvas, t, a);\n              }\n            }),\n            (t.prototype.destroy = function () {\n              (this.canvas = null),\n                (this.currentShape = null),\n                (this.draggingShape = null),\n                (this.panstartPoint = null),\n                (this.panstartShape = null),\n                (this.panstartTimeStamp = null);\n            }),\n            t\n          );\n        })(),\n        y = (function () {\n          function t() {}\n          return (\n            (t.prototype.set = function (t, e, n) {\n              switch (e) {\n                case \"strokeStyle\":\n                  t.setStrokeStyle(n);\n                  break;\n                case \"fillStyle\":\n                  t.setFillStyle(n);\n                  break;\n                case \"lineWidth\":\n                  t.setLineWidth(n);\n                  break;\n                case \"lineDash\":\n                  t.setLineDash(n);\n                  break;\n                case \"globalAlpha\":\n                  (n || 0 === n) && ((t.globalAlpha = n), t.setGlobalAlpha(n));\n                  break;\n                case \"fontSize\":\n                  t.setFontSize(n);\n                  break;\n                case \"textAlign\":\n                  t.setTextAlign(n);\n                  break;\n                case \"fontStyle\":\n                case \"font\":\n                  t.setFont(n);\n                  break;\n                case \"textBaseline\":\n                  t.setTextBaseline(n);\n                  break;\n                default:\n                  t[e] = n;\n              }\n              return !0;\n            }),\n            (t.prototype.get = function (t, e) {\n              return \"globalAlpha\" === e && void 0 === t[e]\n                ? 1\n                : \"function\" == typeof t[e]\n                ? t[e].bind(t)\n                : t[e];\n            }),\n            t\n          );\n        })(),\n        m = n(0),\n        b = n(120),\n        x = null;\n      var S = function (t) {\n          var e = t.attr(),\n            n = e.x,\n            r = e.y,\n            i = e.text,\n            o = e.fontSize,\n            a = e.lineHeight,\n            s = e.font;\n          s || (s = Object(b.assembleFont)(e));\n          var c,\n            u = (function (t, e) {\n              var n = 0;\n              if (Object(m.isNil)(t) || \"\" === t) return n;\n              if (\n                (x.save(),\n                (x.font = e),\n                Object(m.isString)(t) && t.includes(\"\\n\"))\n              ) {\n                var r = t.split(\"\\n\");\n                Object(m.each)(r, function (t) {\n                  var e = x.measureText(t).width;\n                  n < e && (n = e);\n                });\n              } else n = x.measureText(t).width;\n              return x.restore(), n;\n            })(i, s);\n          if (u) {\n            var h = e.textAlign,\n              l = e.textBaseline,\n              f = Object(b.getTextHeight)(i, o, a),\n              d = { x: n, y: r - f };\n            h &&\n              (\"end\" === h || \"right\" === h\n                ? (d.x -= u)\n                : \"center\" === h && (d.x -= u / 2)),\n              l &&\n                (\"top\" === l ? (d.y += f) : \"middle\" === l && (d.y += f / 2)),\n              (c = { x: d.x, y: d.y, width: u, height: f });\n          } else c = { x: n, y: r, width: 0, height: 0 };\n          return c;\n        },\n        w = function (t) {\n          (x = t), Object(i.registerBBox)(\"text\", S);\n        },\n        O = n(89),\n        M = (function (t) {\n          function e(e) {\n            var n,\n              r,\n              i = t.call(this, e) || this,\n              o = i.get(\"context\");\n            return (\n              i.isMini() &&\n                (i.isMiniNative()\n                  ? Object(h.c)(i.get(\"container\"))\n                  : i.set(\"context\", new Proxy(o, new y())),\n                (n = o),\n                (r = i),\n                Object(O.b)(r),\n                w(n)),\n              i\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.isMiniNative = function () {\n              return \"mini-native\" === this.get(\"renderer\");\n            }),\n            (e.prototype.isMini = function () {\n              return this.get(\"renderer\").startsWith(\"mini\");\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              var e = t.prototype.getDefaultCfg.call(this);\n              return (\n                (e.renderer = \"canvas\"),\n                (e.autoDraw = !0),\n                (e.localRefresh = !0),\n                (e.refreshElements = []),\n                (e.clipView = !0),\n                (e.quickHit = !1),\n                (e.boundingClientRect = {\n                  width: 0,\n                  height: 0,\n                  left: 0,\n                  top: 0,\n                  bottom: 0,\n                  right: 0,\n                }),\n                e\n              );\n            }),\n            (e.prototype.initEvents = function () {\n              var t = new v({ canvas: this });\n              this.set(\"eventController\", t);\n            }),\n            (e.prototype.registerEventCallback = function (t) {\n              this.get(\"eventController\").handleEvent(t);\n            }),\n            (e.prototype.clearEvents = function () {\n              this.get(\"eventController\").destroy();\n            }),\n            (e.prototype.onCanvasChange = function (t) {\n              (\"attr\" !== t && \"sort\" !== t && \"changeSize\" !== t) ||\n                (this.set(\"refreshElements\", [this]), this.draw());\n            }),\n            (e.prototype.getShapeBase = function () {\n              return s;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return c.a;\n            }),\n            (e.prototype.getPixelRatio = function () {\n              var t = this.get(\"pixelRatio\") || Object(u.c)();\n              return t >= 1 ? Math.ceil(t) : 1;\n            }),\n            (e.prototype.getViewRange = function () {\n              return {\n                minX: 0,\n                minY: 0,\n                maxX: this.cfg.width,\n                maxY: this.cfg.height,\n              };\n            }),\n            (e.prototype.initDom = function () {\n              if (this.isMini()) {\n                var e = this.get(\"context\"),\n                  n = this.getPixelRatio();\n                n > 1 && e.scale(n, n);\n              } else t.prototype.initDom.call(this);\n            }),\n            (e.prototype.createDom = function () {\n              var t = document.createElement(\"canvas\"),\n                e = t.getContext(\"2d\");\n              return this.set(\"context\", e), t;\n            }),\n            (e.prototype.setDOMSize = function (e, n) {\n              t.prototype.setDOMSize.call(this, e, n);\n              var r = this.get(\"context\"),\n                i = this.get(\"el\"),\n                o = this.getPixelRatio();\n              (i.width = o * e), (i.height = o * n), o > 1 && r.scale(o, o);\n            }),\n            (e.prototype.clear = function () {\n              t.prototype.clear.call(this),\n                this._clearFrame(),\n                this.get(\"context\").clearRect(\n                  0,\n                  0,\n                  this.get(\"width\"),\n                  this.get(\"height\"),\n                );\n            }),\n            (e.prototype.getShape = function (e, n) {\n              return this.get(\"quickHit\")\n                ? (function t(e, n, r) {\n                    if (!a(e, n, r)) return null;\n                    for (\n                      var i = null, s = e.getChildren(), c = s.length - 1;\n                      c >= 0;\n                      c--\n                    ) {\n                      var u = s[c];\n                      if (u.isGroup()) i = t(u, n, r);\n                      else if (a(u, n, r)) {\n                        var h = u,\n                          l = o(u, n, r),\n                          f = l[0],\n                          d = l[1];\n                        h.isInShape(f, d) && (i = u);\n                      }\n                      if (i) break;\n                    }\n                    return i;\n                  })(this, e, n)\n                : t.prototype.getShape.call(this, e, n, null);\n            }),\n            (e.prototype._getRefreshRegion = function () {\n              var t,\n                e = this.get(\"refreshElements\"),\n                n = this.getViewRange();\n              e.length && e[0] === this\n                ? (t = n)\n                : (t = Object(l.f)(e)) &&\n                  ((t.minX = Math.floor(t.minX)),\n                  (t.minY = Math.floor(t.minY)),\n                  (t.maxX = Math.ceil(t.maxX)),\n                  (t.maxY = Math.ceil(t.maxY)),\n                  (t.maxY += 1),\n                  this.get(\"clipView\") && (t = Object(l.g)(t, n)));\n              return t;\n            }),\n            (e.prototype._clearFrame = function () {\n              var t = this.get(\"drawFrame\");\n              t &&\n                (Object(h.a)(t),\n                this.set(\"drawFrame\", null),\n                this.set(\"refreshElements\", []));\n            }),\n            (e.prototype.draw = function () {\n              var t = this.get(\"drawFrame\");\n              (this.get(\"autoDraw\") && t) || this._startDraw();\n            }),\n            (e.prototype._startDraw = function () {\n              var t = this,\n                e = this.get(\"drawFrame\");\n              e ||\n                ((e = Object(h.b)(function () {\n                  t.get(\"localRefresh\") ? t._drawRegion() : t._drawAll(),\n                    Object(h.a)(e),\n                    t.set(\"drawFrame\", null);\n                })),\n                this.set(\"drawFrame\", e));\n            }),\n            (e.prototype._drawRegion = function () {\n              var t = this.get(\"context\"),\n                e = this.get(\"refreshElements\"),\n                n = this.getChildren(),\n                r = this._getRefreshRegion();\n              r\n                ? (t.clearRect(\n                    r.minX,\n                    r.minY,\n                    r.maxX - r.minX,\n                    r.maxY - r.minY,\n                  ),\n                  t.save(),\n                  t.beginPath(),\n                  t.rect(r.minX, r.minY, r.maxX - r.minX, r.maxY - r.minY),\n                  t.clip(),\n                  Object(l.a)(t, this),\n                  Object(l.b)(this, n, r),\n                  Object(l.d)(t, n, r),\n                  t.restore())\n                : e.length && Object(l.c)(e),\n                Object(u.b)(e, function (t) {\n                  t.get(\"hasChanged\") && t.set(\"hasChanged\", !1);\n                }),\n                this.isMini() && !this.isMiniNative() && t.draw(!0),\n                this.set(\"refreshElements\", []);\n            }),\n            (e.prototype._drawAll = function () {\n              var t = this.get(\"context\"),\n                e = this.getChildren();\n              t.clearRect(0, 0, this.get(\"width\"), this.get(\"height\")),\n                Object(l.a)(t, this),\n                Object(l.d)(t, e),\n                this.isMini() && !this.isMiniNative() && t.draw(!0),\n                this.set(\"refreshElements\", []);\n            }),\n            (e.prototype.skipDraw = function () {}),\n            (e.prototype.refreshElement = function (t) {\n              this.get(\"refreshElements\").push(t);\n            }),\n            (e.prototype.getPointByEvent = function (e) {\n              if (this.isMini()) {\n                var n = this.getClientByEvent(e),\n                  r = n.x,\n                  i = n.y;\n                return this.getPointByClient(r, i);\n              }\n              return t.prototype.getPointByEvent.call(this, e);\n            }),\n            (e.prototype.getClientByEvent = function (t) {\n              var e = t.srcEvent,\n                n = null;\n              return (\n                e.touches &&\n                  (n =\n                    \"touchend\" === e.type ? e.changedTouches[0] : e.touches[0]),\n                n ? { x: n.clientX, y: n.clientY } : {}\n              );\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              if (this.isMini()) {\n                var n = this.get(\"boundingClientRect\");\n                return { x: t + n.left, y: e + n.top };\n              }\n              var r = this.get(\"el\").getBoundingClientRect();\n              return { x: t - r.left, y: e - r.top };\n            }),\n            (e.prototype.removeDom = function () {\n              this.isMini() || t.prototype.removeDom.call(this);\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              if (this.isMini()) {\n                var n = this.get(\"boundingClientRect\");\n                return { x: t + n.left, y: e + n.top };\n              }\n              var r = this.get(\"el\").getBoundingClientRect();\n              return { x: t + r.left, y: e + r.top };\n            }),\n            e\n          );\n        })(i.AbstractCanvas);\n      e.a = M;\n    },\n    185: function (t, e, n) {\n      \"use strict\";\n      (function (t) {\n        n.d(e, \"a\", function () {\n          return f;\n        });\n        var r = function (t, e, n) {\n            if (n || 2 === arguments.length)\n              for (var r, i = 0, o = e.length; i < o; i++)\n                (!r && i in e) ||\n                  (r || (r = Array.prototype.slice.call(e, 0, i)),\n                  (r[i] = e[i]));\n            return t.concat(r || Array.prototype.slice.call(e));\n          },\n          i = function (t, e, n) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.type = \"browser\");\n          },\n          o = function (e) {\n            (this.version = e),\n              (this.type = \"node\"),\n              (this.name = \"node\"),\n              (this.os = t.platform);\n          },\n          a = function (t, e, n, r) {\n            (this.name = t),\n              (this.version = e),\n              (this.os = n),\n              (this.bot = r),\n              (this.type = \"bot-device\");\n          },\n          s = function () {\n            (this.type = \"bot\"),\n              (this.bot = !0),\n              (this.name = \"bot\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          c = function () {\n            (this.type = \"react-native\"),\n              (this.name = \"react-native\"),\n              (this.version = null),\n              (this.os = null);\n          },\n          u =\n            /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/,\n          h = [\n            [\"aol\", /AOLShield\\/([0-9\\._]+)/],\n            [\"edge\", /Edge\\/([0-9\\._]+)/],\n            [\"edge-ios\", /EdgiOS\\/([0-9\\._]+)/],\n            [\"yandexbrowser\", /YaBrowser\\/([0-9\\._]+)/],\n            [\"kakaotalk\", /KAKAOTALK\\s([0-9\\.]+)/],\n            [\"samsung\", /SamsungBrowser\\/([0-9\\.]+)/],\n            [\"silk\", /\\bSilk\\/([0-9._-]+)\\b/],\n            [\"miui\", /MiuiBrowser\\/([0-9\\.]+)$/],\n            [\"beaker\", /BeakerBrowser\\/([0-9\\.]+)/],\n            [\"edge-chromium\", /EdgA?\\/([0-9\\.]+)/],\n            [\n              \"chromium-webview\",\n              /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n            ],\n            [\"chrome\", /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"phantomjs\", /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"crios\", /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"firefox\", /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"fxios\", /FxiOS\\/([0-9\\.]+)/],\n            [\"opera-mini\", /Opera Mini.*Version\\/([0-9\\.]+)/],\n            [\"opera\", /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n            [\"opera\", /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n            [\"pie\", /^Microsoft Pocket Internet Explorer\\/(\\d+\\.\\d+)$/],\n            [\n              \"pie\",\n              /^Mozilla\\/\\d\\.\\d+\\s\\(compatible;\\s(?:MSP?IE|MSInternet Explorer) (\\d+\\.\\d+);.*Windows CE.*\\)$/,\n            ],\n            [\"netfront\", /^Mozilla\\/\\d\\.\\d+.*NetFront\\/(\\d.\\d)/],\n            [\"ie\", /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n            [\"ie\", /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n            [\"ie\", /MSIE\\s(7\\.0)/],\n            [\"bb10\", /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n            [\"android\", /Android\\s([0-9\\.]+)/],\n            [\"ios\", /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n            [\"safari\", /Version\\/([0-9\\._]+).*Safari/],\n            [\"facebook\", /FB[AS]V\\/([0-9\\.]+)/],\n            [\"instagram\", /Instagram\\s([0-9\\.]+)/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n            [\"ios-webview\", /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n            [\"curl\", /^curl\\/([0-9\\.]+)$/],\n            [\n              \"searchbot\",\n              /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,\n            ],\n          ],\n          l = [\n            [\"iOS\", /iP(hone|od|ad)/],\n            [\"Android OS\", /Android/],\n            [\"BlackBerry OS\", /BlackBerry|BB10/],\n            [\"Windows Mobile\", /IEMobile/],\n            [\"Amazon OS\", /Kindle/],\n            [\"Windows 3.11\", /Win16/],\n            [\"Windows 95\", /(Windows 95)|(Win95)|(Windows_95)/],\n            [\"Windows 98\", /(Windows 98)|(Win98)/],\n            [\"Windows 2000\", /(Windows NT 5.0)|(Windows 2000)/],\n            [\"Windows XP\", /(Windows NT 5.1)|(Windows XP)/],\n            [\"Windows Server 2003\", /(Windows NT 5.2)/],\n            [\"Windows Vista\", /(Windows NT 6.0)/],\n            [\"Windows 7\", /(Windows NT 6.1)/],\n            [\"Windows 8\", /(Windows NT 6.2)/],\n            [\"Windows 8.1\", /(Windows NT 6.3)/],\n            [\"Windows 10\", /(Windows NT 10.0)/],\n            [\"Windows ME\", /Windows ME/],\n            [\n              \"Windows CE\",\n              /Windows CE|WinCE|Microsoft Pocket Internet Explorer/,\n            ],\n            [\"Open BSD\", /OpenBSD/],\n            [\"Sun OS\", /SunOS/],\n            [\"Chrome OS\", /CrOS/],\n            [\"Linux\", /(Linux)|(X11)/],\n            [\"Mac OS\", /(Mac_PowerPC)|(Macintosh)/],\n            [\"QNX\", /QNX/],\n            [\"BeOS\", /BeOS/],\n            [\"OS/2\", /OS\\/2/],\n          ];\n        function f(e) {\n          return e\n            ? p(e)\n            : \"undefined\" == typeof document &&\n              \"undefined\" != typeof navigator &&\n              \"ReactNative\" === navigator.product\n            ? new c()\n            : \"undefined\" != typeof navigator\n            ? p(navigator.userAgent)\n            : void 0 !== t && t.version\n            ? new o(t.version.slice(1))\n            : null;\n        }\n        function d(t) {\n          return (\n            \"\" !== t &&\n            h.reduce(function (e, n) {\n              var r = n[0],\n                i = n[1];\n              if (e) return e;\n              var o = i.exec(t);\n              return !!o && [r, o];\n            }, !1)\n          );\n        }\n        function p(t) {\n          var e = d(t);\n          if (!e) return null;\n          var n = e[0],\n            o = e[1];\n          if (\"searchbot\" === n) return new s();\n          var c = o[1] && o[1].split(\".\").join(\"_\").split(\"_\").slice(0, 3);\n          c\n            ? c.length < 3 &&\n              (c = r(\n                r([], c, !0),\n                (function (t) {\n                  for (var e = [], n = 0; n < t; n++) e.push(\"0\");\n                  return e;\n                })(3 - c.length),\n                !0,\n              ))\n            : (c = []);\n          var h = c.join(\".\"),\n            f = (function (t) {\n              for (var e = 0, n = l.length; e < n; e++) {\n                var r = l[e],\n                  i = r[0];\n                if (r[1].exec(t)) return i;\n              }\n              return null;\n            })(t),\n            p = u.exec(t);\n          return p && p[1] ? new a(n, h, f, p[1]) : new i(n, h, f);\n        }\n      }).call(this, n(206));\n    },\n    2: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"d\", function () {\n        return Le;\n      }),\n        n.d(e, \"g\", function () {\n          return _e;\n        }),\n        n.d(e, \"f\", function () {\n          return De;\n        }),\n        n.d(e, \"l\", function () {\n          return We;\n        }),\n        n.d(e, \"j\", function () {\n          return Ve;\n        }),\n        n.d(e, \"b\", function () {\n          return Se;\n        }),\n        n.d(e, \"h\", function () {\n          return Ye;\n        }),\n        n.d(e, \"k\", function () {\n          return qe;\n        }),\n        n.d(e, \"i\", function () {\n          return Ge;\n        }),\n        n.d(e, \"c\", function () {\n          return Xe;\n        }),\n        n.d(e, \"a\", function () {\n          return ze;\n        }),\n        n.d(e, \"e\", function () {\n          return He;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"compare\", function () {\n          return m;\n        }),\n        n.d(r, \"getLineIntersect\", function () {\n          return x;\n        }),\n        n.d(r, \"getRectIntersectByPoint\", function () {\n          return S;\n        }),\n        n.d(r, \"getCircleIntersectByPoint\", function () {\n          return w;\n        }),\n        n.d(r, \"getEllipseIntersectByPoint\", function () {\n          return O;\n        }),\n        n.d(r, \"applyMatrix\", function () {\n          return M;\n        }),\n        n.d(r, \"invertMatrix\", function () {\n          return k;\n        }),\n        n.d(r, \"getCircleCenterByPoints\", function () {\n          return j;\n        }),\n        n.d(r, \"distance\", function () {\n          return C;\n        }),\n        n.d(r, \"scaleMatrix\", function () {\n          return E;\n        }),\n        n.d(r, \"floydWarshall\", function () {\n          return P;\n        }),\n        n.d(r, \"getAdjMatrix\", function () {\n          return A;\n        }),\n        n.d(r, \"translate\", function () {\n          return I;\n        }),\n        n.d(r, \"move\", function () {\n          return T;\n        }),\n        n.d(r, \"scale\", function () {\n          return N;\n        }),\n        n.d(r, \"rotate\", function () {\n          return B;\n        }),\n        n.d(r, \"getDegree\", function () {\n          return L;\n        }),\n        n.d(r, \"isPointInPolygon\", function () {\n          return _;\n        }),\n        n.d(r, \"intersectBBox\", function () {\n          return R;\n        }),\n        n.d(r, \"isPolygonsIntersect\", function () {\n          return F;\n        }),\n        n.d(r, \"Line\", function () {\n          return Y;\n        }),\n        n.d(r, \"getBBoxBoundLine\", function () {\n          return X;\n        }),\n        n.d(r, \"itemIntersectByLine\", function () {\n          return W;\n        }),\n        n.d(r, \"fractionToLine\", function () {\n          return q;\n        }),\n        n.d(r, \"getPointsCenter\", function () {\n          return V;\n        }),\n        n.d(r, \"squareDist\", function () {\n          return G;\n        }),\n        n.d(r, \"pointLineSquareDist\", function () {\n          return H;\n        }),\n        n.d(r, \"isPointsOverlap\", function () {\n          return U;\n        }),\n        n.d(r, \"pointRectSquareDist\", function () {\n          return Z;\n        }),\n        n.d(r, \"pointLineDistance\", function () {\n          return K;\n        });\n      var i = {};\n      n.r(i),\n        n.d(i, \"getBBox\", function () {\n          return ut;\n        }),\n        n.d(i, \"getLoopCfgs\", function () {\n          return ht;\n        }),\n        n.d(i, \"getLabelPosition\", function () {\n          return lt;\n        }),\n        n.d(i, \"traverseTree\", function () {\n          return dt;\n        }),\n        n.d(i, \"traverseTreeUp\", function () {\n          return pt;\n        }),\n        n.d(i, \"getLetterWidth\", function () {\n          return gt;\n        }),\n        n.d(i, \"getTextSize\", function () {\n          return vt;\n        }),\n        n.d(i, \"plainCombosToTrees\", function () {\n          return yt;\n        }),\n        n.d(i, \"reconstructTree\", function () {\n          return mt;\n        }),\n        n.d(i, \"getComboBBox\", function () {\n          return bt;\n        }),\n        n.d(i, \"shouldRefreshEdge\", function () {\n          return xt;\n        }),\n        n.d(i, \"cloneBesidesImg\", function () {\n          return St;\n        });\n      var o = {};\n      n.r(o),\n        n.d(o, \"uniqueId\", function () {\n          return jt;\n        }),\n        n.d(o, \"formatPadding\", function () {\n          return Ct;\n        }),\n        n.d(o, \"cloneEvent\", function () {\n          return Et;\n        }),\n        n.d(o, \"isViewportChanged\", function () {\n          return Pt;\n        }),\n        n.d(o, \"isNaN\", function () {\n          return At;\n        }),\n        n.d(o, \"calculationItemsBBox\", function () {\n          return It;\n        }),\n        n.d(o, \"processParallelEdges\", function () {\n          return Tt;\n        });\n      var a = {};\n      n.r(a),\n        n.d(a, \"getSpline\", function () {\n          return te;\n        }),\n        n.d(a, \"getControlPoint\", function () {\n          return ee;\n        }),\n        n.d(a, \"pointsToPolygon\", function () {\n          return ne;\n        }),\n        n.d(a, \"pathToPoints\", function () {\n          return re;\n        }),\n        n.d(a, \"getClosedSpline\", function () {\n          return ie;\n        }),\n        n.d(a, \"roundedHull\", function () {\n          return ce;\n        }),\n        n.d(a, \"paddedHull\", function () {\n          return ue;\n        });\n      var s = {};\n      n.r(s),\n        n.d(s, \"defaultSubjectColors\", function () {\n          return Re;\n        });\n      var c = n(0),\n        u = {\n          getDefaultCfg: function () {\n            return {};\n          },\n          getEvents: function () {\n            return {};\n          },\n          updateCfg: function (t) {\n            return Object.assign(this, t), !0;\n          },\n          shouldBegin: function () {\n            return !0;\n          },\n          shouldUpdate: function () {\n            return !0;\n          },\n          shouldEnd: function () {\n            return !0;\n          },\n          bind: function (t) {\n            var e = this.events;\n            (this.graph = t),\n              (\"drag-canvas\" !== this.type &&\n                \"brush-select\" !== this.type &&\n                \"lasso-select\" !== this.type) ||\n                t.get(\"canvas\").set(\"draggable\", !0),\n              Object(c.each)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            (\"drag-canvas\" !== this.type &&\n              \"brush-select\" !== this.type &&\n              \"lasso-select\" !== this.type) ||\n              t.get(\"canvas\").set(\"draggable\", !1),\n              Object(c.each)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n          get: function (t) {\n            return this[t];\n          },\n          set: function (t, e) {\n            return (this[t] = e), this;\n          },\n        },\n        h = (function () {\n          function t() {}\n          return (\n            (t.registerBehavior = function (e, n) {\n              if (!n)\n                throw new Error(\n                  \"please specify handler for this behavior: \".concat(e),\n                );\n              var r = Object(c.clone)(u);\n              Object.assign(r, n);\n              var i = function (t) {\n                var e = this;\n                Object.assign(this, this.getDefaultCfg(), t);\n                var n = this.getEvents();\n                this.events = null;\n                var r = {};\n                n &&\n                  (Object(c.each)(n, function (t, n) {\n                    r[n] = Object(c.wrapBehavior)(e, t);\n                  }),\n                  (this.events = r));\n              };\n              (i.prototype = r), (t.types[e] = i);\n            }),\n            (t.hasBehavior = function (e) {\n              return !!t.types[e];\n            }),\n            (t.getBehavior = function (e) {\n              return t.types[e];\n            }),\n            (t.types = {}),\n            t\n          );\n        })(),\n        l = h,\n        f = n(1),\n        d = n(91),\n        p = n(97),\n        g = n(4),\n        v = n(35),\n        y = g.a.transform,\n        m = function (t) {\n          return function (e, n) {\n            return e[t] - n[t];\n          };\n        },\n        b = function (t, e, n) {\n          return t >= e && t <= n;\n        },\n        x = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = e.x - t.x,\n            s = e.y - t.y,\n            c = r.x - n.x,\n            u = r.y - n.y,\n            h = a * u - s * c,\n            l = 1 / h;\n          if (h * h > 1e-4 * (a * a + s * s) * (c * c + u * u)) {\n            var f = (i * u - o * c) * l,\n              d = (i * s - o * a) * l;\n            return b(f, 0, 1) && b(d, 0, 1)\n              ? { x: t.x + f * a, y: t.y + f * s }\n              : null;\n          }\n          return null;\n        },\n        S = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.width,\n            o = t.height,\n            a = [],\n            s = { x: n + i / 2, y: r + o / 2 };\n          a.push({ x: n, y: r }),\n            a.push({ x: n + i, y: r }),\n            a.push({ x: n + i, y: r + o }),\n            a.push({ x: n, y: r + o }),\n            a.push({ x: n, y: r });\n          for (\n            var c = null, u = 1;\n            u < a.length && !(c = x(a[u - 1], a[u], s, e));\n            u++\n          );\n          return c;\n        },\n        w = function (t, e) {\n          var n = t.x,\n            r = t.y,\n            i = t.r,\n            o = e.x - n,\n            a = e.y - r;\n          if (Math.sqrt(o * o + a * a) < i) return null;\n          var s = Math.sign(o),\n            c = Math.sign(a),\n            u = Math.atan(a / o);\n          return {\n            x: n + Math.abs(i * Math.cos(u)) * s,\n            y: r + Math.abs(i * Math.sin(u)) * c,\n          };\n        },\n        O = function (t, e) {\n          var n = t.rx,\n            r = t.ry,\n            i = t.x,\n            o = t.y,\n            a = e.x - i,\n            s = e.y - o,\n            c = Math.atan2(s / r, a / n);\n          return (\n            c < 0 && (c += 2 * Math.PI),\n            { x: i + n * Math.cos(c), y: o + r * Math.sin(c) }\n          );\n        },\n        M = function (t, e, n) {\n          void 0 === n && (n = 1);\n          var r = [t.x, t.y, n];\n          return (\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            g.d.transformMat3(r, r, e),\n            { x: r[0], y: r[1] }\n          );\n        },\n        k = function (t, e, n) {\n          void 0 === n && (n = 1),\n            (e && !isNaN(e[0])) || (e = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = g.b.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], e);\n          r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var i = [t.x, t.y, n];\n          return g.d.transformMat3(i, i, r), { x: i[0], y: i[1] };\n        },\n        j = function (t, e, n) {\n          var r = t.x - e.x,\n            i = t.y - e.y,\n            o = t.x - n.x,\n            a = t.y - n.y,\n            s = (t.x * t.x - e.x * e.x - e.y * e.y + t.y * t.y) / 2,\n            c = (t.x * t.x - n.x * n.x - n.y * n.y + t.y * t.y) / 2,\n            u = i * o - r * a;\n          return { x: -(a * s - i * c) / u, y: -(r * c - o * s) / u };\n        },\n        C = function (t, e) {\n          var n = t.x - e.x,\n            r = t.y - e.y;\n          return Math.sqrt(n * n + r * r);\n        },\n        E = function (t, e) {\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              var r = [];\n              t.forEach(function (t) {\n                r.push(t * e);\n              }),\n                n.push(r);\n            }),\n            n\n          );\n        },\n        P = function (t) {\n          for (var e = [], n = t.length, r = 0; r < n; r += 1) {\n            e[r] = [];\n            for (var i = 0; i < n; i += 1)\n              r === i\n                ? (e[r][i] = 0)\n                : 0 !== t[r][i] && t[r][i]\n                ? (e[r][i] = t[r][i])\n                : (e[r][i] = 1 / 0);\n          }\n          for (var o = 0; o < n; o += 1)\n            for (r = 0; r < n; r += 1)\n              for (i = 0; i < n; i += 1)\n                e[r][i] > e[r][o] + e[o][i] && (e[r][i] = e[r][o] + e[o][i]);\n          return e;\n        },\n        A = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (i[a][s] = 1), e || (i[s][a] = 1);\n              }),\n            i\n          );\n        },\n        I = function (t, e) {\n          t.translate(e.x, e.y);\n        },\n        T = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = t.getCanvasBBox(),\n            i = e.x - r.minX,\n            o = e.y - r.minY,\n            a = y(n, [[\"t\", i, o]]);\n          t.setMatrix(a);\n        },\n        N = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e;\n          Object(c.isArray)(e) || (r = [e, e]),\n            Object(c.isArray)(e) && 1 === e.length && (r = [e[0], e[0]]),\n            (n = y(n, [[\"s\", r[0], r[1]]])),\n            t.setMatrix(n);\n        },\n        B = function (t, e) {\n          var n = t.getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n            (n = y(n, [[\"r\", e]])),\n            t.setMatrix(n);\n        },\n        L = function (t, e, n) {\n          for (var r = [], i = 0; i < t; i++) r[i] = 0;\n          return (\n            n.forEach(function (t) {\n              t.source && (r[e[t.source]] += 1),\n                t.target && (r[e[t.target]] += 1);\n            }),\n            r\n          );\n        };\n      function D(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      var _ = function (t, e, n) {\n          var r = !1,\n            i = t.length;\n          function o(t) {\n            return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n          }\n          if (i <= 2) return !1;\n          for (var a = 0; a < i; a++) {\n            var s = t[a],\n              c = t[(a + 1) % i];\n            if (D(s, c, [e, n])) return !0;\n            o(s[1] - n) > 0 != o(c[1] - n) > 0 &&\n              o(e - ((n - s[1]) * (s[0] - c[0])) / (s[1] - c[1]) - s[0]) < 0 &&\n              (r = !r);\n          }\n          return r;\n        },\n        R = function (t, e) {\n          return !(\n            e.minX > t.maxX ||\n            e.maxX < t.minX ||\n            e.minY > t.maxY ||\n            e.maxY < t.minY\n          );\n        },\n        F = function (t, e) {\n          var n = function (t) {\n              var e = t.map(function (t) {\n                  return t[0];\n                }),\n                n = t.map(function (t) {\n                  return t[1];\n                });\n              return {\n                minX: Math.min.apply(null, e),\n                maxX: Math.max.apply(null, e),\n                minY: Math.min.apply(null, n),\n                maxY: Math.max.apply(null, n),\n              };\n            },\n            r = function (t) {\n              for (var e = [], n = t.length, r = 0; r < n - 1; r++) {\n                var i = t[r],\n                  o = t[r + 1];\n                e.push({\n                  from: { x: i[0], y: i[1] },\n                  to: { x: o[0], y: o[1] },\n                });\n              }\n              if (e.length > 1) {\n                var a = t[0],\n                  s = t[n - 1];\n                e.push({\n                  from: { x: s[0], y: s[1] },\n                  to: { x: a[0], y: a[1] },\n                });\n              }\n              return e;\n            };\n          if (t.length < 2 || e.length < 2) return !1;\n          var i = n(t),\n            o = n(e);\n          if (!R(i, o)) return !1;\n          var a = !1;\n          if (\n            (Object(c.each)(e, function (e) {\n              if (_(t, e[0], e[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          if (\n            (Object(c.each)(t, function (t) {\n              if (_(e, t[0], t[1])) return (a = !0), !1;\n            }),\n            a)\n          )\n            return !0;\n          var s = r(t),\n            u = r(e),\n            h = !1;\n          return (\n            Object(c.each)(u, function (t) {\n              if (\n                (function (t, e) {\n                  var n = !1;\n                  return (\n                    Object(c.each)(t, function (t) {\n                      if (x(t.from, t.to, e.from, e.to)) return (n = !0), !1;\n                    }),\n                    n\n                  );\n                })(s, t)\n              )\n                return (h = !0), !1;\n            }),\n            h\n          );\n        },\n        Y = (function () {\n          function t(t, e, n, r) {\n            (this.x1 = t), (this.y1 = e), (this.x2 = n), (this.y2 = r);\n          }\n          return (\n            (t.prototype.getBBox = function () {\n              var t = Math.min(this.x1, this.x2),\n                e = Math.min(this.y1, this.y2),\n                n = Math.max(this.x1, this.x2),\n                r = Math.max(this.y1, this.y2);\n              return {\n                x: t,\n                y: e,\n                minX: t,\n                minY: e,\n                maxX: n,\n                maxY: r,\n                width: n - t,\n                height: r - e,\n              };\n            }),\n            t\n          );\n        })(),\n        X = function (t, e) {\n          return {\n            top: [t.minX, t.minY, t.maxX, t.minY],\n            left: [t.minX, t.minY, t.minX, t.maxY],\n            bottom: [t.minX, t.maxY, t.maxX, t.maxY],\n            right: [t.maxX, t.minY, t.maxX, t.maxY],\n          }[e];\n        },\n        z = function (t, e) {\n          var n = (e.x2 - e.x1) * (t.y1 - e.y1) - (e.y2 - e.y1) * (t.x1 - e.x1),\n            r = (t.x2 - t.x1) * (t.y1 - e.y1) - (t.y2 - t.y1) * (t.x1 - e.x1),\n            i = (e.y2 - e.y1) * (t.x2 - t.x1) - (e.x2 - e.x1) * (t.y2 - t.y1);\n          if (i) {\n            var o = n / i,\n              a = r / i;\n            if (o >= 0 && o <= 1 && a >= 0 && a <= 1) return o;\n          }\n          return Number.POSITIVE_INFINITY;\n        },\n        W = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = 0,\n              o = [],\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = X(r, n[a]),\n              c = s[0],\n              u = s[1],\n              h = s[2],\n              l = s[3];\n            (o[a] = x(\n              { x: e.x1, y: e.y1 },\n              { x: e.x2, y: e.y2 },\n              { x: c, y: u },\n              { x: h, y: l },\n            )),\n              o[a] && (i += 1);\n          }\n          return [o, i];\n        },\n        q = function (t, e) {\n          for (\n            var n = [\"top\", \"left\", \"bottom\", \"right\"],\n              r = t.getBBox(),\n              i = Number.POSITIVE_INFINITY,\n              o = 0,\n              a = 0;\n            a < 4;\n            a++\n          ) {\n            var s = X(r, n[a]),\n              c = s[0],\n              u = s[1],\n              h = s[2],\n              l = s[3],\n              f = z(e, new Y(c, u, h, l));\n            (f = Math.abs(f - 0.5)) >= 0 &&\n              f <= 1 &&\n              ((o += 1), (i = f < i ? f : i));\n          }\n          return 0 === o ? -1 : i;\n        },\n        V = function (t) {\n          var e = 0,\n            n = 0;\n          if (t.length > 0) {\n            for (var r = 0, i = t; r < i.length; r++) {\n              var o = i[r];\n              (e += o.x), (n += o.y);\n            }\n            (e /= t.length), (n /= t.length);\n          }\n          return { x: e, y: n };\n        },\n        G = function (t, e) {\n          return Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2);\n        },\n        H = function (t, e) {\n          var n,\n            r = e.x1,\n            i = e.y1,\n            o = e.x2 - r,\n            a = e.y2 - i,\n            s = t.x - r,\n            c = t.y - i,\n            u = s * o + c * a;\n          n =\n            u <= 0 || (u = (s = o - s) * o + (c = a - c) * a) <= 0\n              ? 0\n              : (u * u) / (o * o + a * a);\n          var h = s * s + c * c - n;\n          return h < 0 && (h = 0), h;\n        },\n        U = function (t, e, n) {\n          return (\n            void 0 === n && (n = 0.001),\n            Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2) < Math.pow(n, 2)\n          );\n        },\n        Z = function (t, e) {\n          var n = t.x < e.x,\n            r = t.x > e.x + e.width,\n            i = t.y > e.y + e.height,\n            o = t.y < e.y;\n          if (!(n || r || i || o)) return 0;\n          if (i && !n && !r) return Math.pow(e.y + e.height - t.y, 2);\n          if (o && !n && !r) return Math.pow(t.y - e.y, 2);\n          if (n && !i && !o) return Math.pow(e.x - t.x, 2);\n          if (r && !i && !o) return Math.pow(e.x + e.width - t.x, 2);\n          var a = Math.min(Math.abs(e.x - t.x), Math.abs(e.x + e.width - t.x)),\n            s = Math.min(Math.abs(e.y - t.y), Math.abs(e.y + e.height - t.y));\n          return a * a + s * s;\n        },\n        K = function (t, e) {\n          var n = t[0],\n            r = t[1],\n            i = t[2],\n            o = t[3],\n            a = e.x,\n            s = e.y,\n            c = [i - n, o - r];\n          if (g.c.exactEquals(c, [0, 0])) return NaN;\n          var u = [-c[1], c[0]];\n          g.c.normalize(u, u);\n          var h = [a - n, s - r];\n          return Math.abs(g.c.dot(h, u));\n        },\n        $ = \"rgb(95, 149, 255)\",\n        Q = \"rgb(253, 253, 253)\",\n        J = \"rgb(247, 250, 255)\",\n        tt = \"rgb(224, 224, 224)\",\n        et = \"rgb(224, 224, 224)\",\n        nt = {\n          version: \"0.0.2\",\n          rootContainerClassName: \"root-container\",\n          nodeContainerClassName: \"node-container\",\n          edgeContainerClassName: \"edge-container\",\n          comboContainerClassName: \"combo-container\",\n          delegateContainerClassName: \"delegate-container\",\n          defaultLoopPosition: \"top\",\n          nodeLabel: {\n            style: {\n              fill: \"#000\",\n              fontSize: 12,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n            },\n            offset: 4,\n          },\n          defaultNode: {\n            type: \"circle\",\n            style: { lineWidth: 1, stroke: $, fill: \"rgb(239, 244, 255)\" },\n            size: 20,\n            color: $,\n            linkPoints: { size: 8, lineWidth: 1, fill: J, stroke: $ },\n          },\n          nodeStateStyles: {\n            active: {\n              fill: J,\n              stroke: $,\n              lineWidth: 2,\n              shadowColor: $,\n              shadowBlur: 10,\n            },\n            selected: {\n              fill: \"rgb(255, 255, 255)\",\n              stroke: $,\n              lineWidth: 4,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              fill: \"rgb(223, 234, 255)\",\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: {\n              fill: \"rgb(247, 250, 255)\",\n              stroke: \"rgb(191, 213, 255)\",\n              lineWidth: 1,\n            },\n            disable: {\n              fill: \"rgb(250, 250, 250)\",\n              stroke: \"rgb(224, 224, 224)\",\n              lineWidth: 1,\n            },\n          },\n          edgeLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n          },\n          defaultEdge: {\n            type: \"line\",\n            size: 1,\n            style: { stroke: tt, lineAppendWidth: 2 },\n            color: tt,\n          },\n          edgeStateStyles: {\n            active: { stroke: $, lineWidth: 1 },\n            selected: {\n              stroke: $,\n              lineWidth: 2,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: $,\n              lineWidth: 2,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(234, 234, 234)\", lineWidth: 1 },\n            disable: { stroke: \"rgb(245, 245, 245)\", lineWidth: 1 },\n          },\n          comboLabel: {\n            style: {\n              fill: \"rgb(0, 0, 0)\",\n              textBaseline: \"middle\",\n              fontSize: 12,\n            },\n            refY: 10,\n            refX: 10,\n          },\n          defaultCombo: {\n            type: \"circle\",\n            style: {\n              fill: Q,\n              lineWidth: 1,\n              stroke: et,\n              r: 5,\n              width: 20,\n              height: 10,\n            },\n            size: [20, 5],\n            color: et,\n            padding: [25, 20, 15, 20],\n          },\n          comboStateStyles: {\n            active: { stroke: $, lineWidth: 1, fill: \"rgb(247, 250, 255)\" },\n            selected: {\n              stroke: $,\n              lineWidth: 2,\n              fill: Q,\n              shadowColor: $,\n              shadowBlur: 10,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            highlight: {\n              stroke: \"#4572d9\",\n              lineWidth: 2,\n              fill: Q,\n              \"text-shape\": { fontWeight: 500 },\n            },\n            inactive: { stroke: \"rgb(224, 224, 224)\", fill: Q, lineWidth: 1 },\n            disable: {\n              stroke: \"rgb(234, 234, 234)\",\n              fill: \"rgb(250, 250, 250)\",\n              lineWidth: 1,\n            },\n          },\n          delegateStyle: {\n            fill: \"#F3F9FF\",\n            fillOpacity: 0.5,\n            stroke: \"#1890FF\",\n            strokeOpacity: 0.9,\n            lineDash: [5, 5],\n          },\n        },\n        rt = {\n          \" \": 0.3329986572265625,\n          a: 0.5589996337890625,\n          A: 0.6569992065429687,\n          b: 0.58599853515625,\n          B: 0.6769989013671875,\n          c: 0.5469985961914062,\n          C: 0.7279998779296875,\n          d: 0.58599853515625,\n          D: 0.705999755859375,\n          e: 0.554998779296875,\n          E: 0.63699951171875,\n          f: 0.37299957275390627,\n          F: 0.5769989013671875,\n          g: 0.5909988403320312,\n          G: 0.7479995727539063,\n          h: 0.555999755859375,\n          H: 0.7199996948242188,\n          i: 0.255999755859375,\n          I: 0.23699951171875,\n          j: 0.26699981689453123,\n          J: 0.5169998168945312,\n          k: 0.5289993286132812,\n          K: 0.6899993896484375,\n          l: 0.23499908447265624,\n          L: 0.5879989624023437,\n          m: 0.854998779296875,\n          M: 0.8819992065429687,\n          n: 0.5589996337890625,\n          N: 0.7189987182617188,\n          o: 0.58599853515625,\n          O: 0.7669998168945312,\n          p: 0.58599853515625,\n          P: 0.6419998168945312,\n          q: 0.58599853515625,\n          Q: 0.7669998168945312,\n          r: 0.3649993896484375,\n          R: 0.6759994506835938,\n          s: 0.504998779296875,\n          S: 0.6319992065429687,\n          t: 0.354998779296875,\n          T: 0.6189987182617187,\n          u: 0.5599990844726562,\n          U: 0.7139999389648437,\n          v: 0.48199920654296874,\n          V: 0.6389999389648438,\n          w: 0.754998779296875,\n          W: 0.929998779296875,\n          x: 0.5089996337890625,\n          X: 0.63699951171875,\n          y: 0.4959991455078125,\n          Y: 0.66199951171875,\n          z: 0.48699951171875,\n          Z: 0.6239990234375,\n          0: 0.6,\n          1: 0.40099945068359377,\n          2: 0.6,\n          3: 0.6,\n          4: 0.6,\n          5: 0.6,\n          6: 0.6,\n          7: 0.5469985961914062,\n          8: 0.6,\n          9: 0.6,\n          \"[\": 0.3329986572265625,\n          \"]\": 0.3329986572265625,\n          \",\": 0.26399993896484375,\n          \".\": 0.26399993896484375,\n          \";\": 0.26399993896484375,\n          \":\": 0.26399993896484375,\n          \"{\": 0.3329986572265625,\n          \"}\": 0.3329986572265625,\n          \"\\\\\": 0.5,\n          \"|\": 0.19499969482421875,\n          \"=\": 0.604998779296875,\n          \"+\": 0.604998779296875,\n          \"-\": 0.604998779296875,\n          _: 0.5,\n          \"`\": 0.3329986572265625,\n          \" ~\": 0.8329986572265625,\n          \"!\": 0.3329986572265625,\n          \"@\": 0.8579986572265625,\n          \"#\": 0.6,\n          $: 0.6,\n          \"%\": 0.9699996948242188,\n          \"^\": 0.517999267578125,\n          \"&\": 0.7259994506835937,\n          \"*\": 0.505999755859375,\n          \"(\": 0.3329986572265625,\n          \")\": 0.3329986572265625,\n          \"<\": 0.604998779296875,\n          \">\": 0.604998779296875,\n          \"/\": 0.5,\n          \"?\": 0.53699951171875,\n        },\n        it = Math.PI,\n        ot = Math.sin,\n        at = Math.cos,\n        st = ot(it / 8),\n        ct = at(it / 8),\n        ut = function (t, e) {\n          var n = t.getBBox(),\n            r = { x: n.minX, y: n.minY },\n            i = { x: n.maxX, y: n.maxY };\n          if (e) {\n            var o = e.getMatrix();\n            o || (o = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n              (r = M(r, o)),\n              (i = M(i, o));\n          }\n          var a = r.x,\n            s = r.y,\n            c = i.x,\n            u = i.y;\n          return {\n            x: a,\n            y: s,\n            minX: a,\n            minY: s,\n            maxX: c,\n            maxY: u,\n            width: c - a,\n            height: u - s,\n          };\n        },\n        ht = function (t) {\n          var e = t.sourceNode || t.targetNode,\n            n = e.get(\"group\").getMatrix();\n          n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n          var r = e.getKeyShape().getBBox(),\n            i = t.loopCfg || {},\n            o = i.dist || 2 * Math.max(r.width, r.height),\n            a = i.position || nt.defaultLoopPosition,\n            s = [n[6], n[7]],\n            c = [t.startPoint.x, t.startPoint.y],\n            u = [t.endPoint.x, t.endPoint.y],\n            h = r.height / 2,\n            l = r.height / 2,\n            f = h * st,\n            d = h * ct,\n            p = l * st,\n            v = l * ct;\n          if (c[0] === u[0] && c[1] === u[1]) {\n            switch (a) {\n              case \"top\":\n                (c = [s[0] - f, s[1] - d]), (u = [s[0] + p, s[1] - v]);\n                break;\n              case \"top-right\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] + (f = h * st), s[1] - (d = h * ct)]),\n                  (u = [s[0] + (v = l * ct), s[1] - (p = l * st)]);\n                break;\n              case \"right\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] + (d = h * ct), s[1] - (f = h * st)]),\n                  (u = [s[0] + (v = l * ct), s[1] + (p = l * st)]);\n                break;\n              case \"bottom-right\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] + (d = h * ct), s[1] + (f = h * st)]),\n                  (u = [s[0] + (p = l * st), s[1] + (v = l * ct)]);\n                break;\n              case \"bottom\":\n                (h = r.height / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] + (f = h * st), s[1] + (d = h * ct)]),\n                  (u = [s[0] - (p = l * st), s[1] + (v = l * ct)]);\n                break;\n              case \"bottom-left\":\n                (h = r.height / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (f = h * st), s[1] + (d = h * ct)]),\n                  (u = [s[0] - (v = l * ct), s[1] + (p = l * st)]);\n                break;\n              case \"left\":\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (d = h * ct), s[1] + (f = h * st)]),\n                  (u = [s[0] - (v = l * ct), s[1] - (p = l * st)]);\n                break;\n              case \"top-left\":\n                (h = r.width / 2),\n                  (l = r.height / 2),\n                  (c = [s[0] - (d = h * ct), s[1] - (f = h * st)]),\n                  (u = [s[0] - (p = l * st), s[1] - (v = l * ct)]);\n                break;\n              default:\n                (h = r.width / 2),\n                  (l = r.width / 2),\n                  (c = [s[0] - (f = h * st), s[1] - (d = h * ct)]),\n                  (u = [s[0] + (p = l * st), s[1] - (v = l * ct)]);\n            }\n            if (!1 === i.clockwise) {\n              var y = [c[0], c[1]];\n              (c = [u[0], u[1]]), (u = [y[0], y[1]]);\n            }\n          }\n          var m = [c[0] - s[0], c[1] - s[1]],\n            b = (h + o) / h,\n            x = (l + o) / l;\n          !1 === i.clockwise && ((b = (l + o) / l), (x = (h + o) / h));\n          var S = g.c.scale([0, 0], m, b),\n            w = [s[0] + S[0], s[1] + S[1]],\n            O = [u[0] - s[0], u[1] - s[1]],\n            M = g.c.scale([0, 0], O, x),\n            k = [s[0] + M[0], s[1] + M[1]];\n          return (\n            (t.startPoint = { x: c[0], y: c[1] }),\n            (t.endPoint = { x: u[0], y: u[1] }),\n            (t.controlPoints = [\n              { x: w[0], y: w[1] },\n              { x: k[0], y: k[1] },\n            ]),\n            t\n          );\n        },\n        lt = function (t, e, n, r, i) {\n          var o = [],\n            a = t.getPoint(e);\n          if (null === a) return { x: 0, y: 0, angle: 0 };\n          if (e < 1e-4) o = t.getStartTangent().reverse();\n          else if (e > 0.9999) o = t.getEndTangent();\n          else {\n            var s = t.getPoint(e + 1e-4);\n            o.push([a.x, a.y]), o.push([s.x, s.y]);\n          }\n          var c = Math.atan2(o[1][1] - o[0][1], o[1][0] - o[0][0]);\n          if (\n            (c < 0 && (c += 2 * it),\n            n && ((a.x += at(c) * n), (a.y += ot(c) * n)),\n            r)\n          ) {\n            var u = c - it / 2;\n            c > 0.5 * it && c < 1.5 * it && (u -= it),\n              (a.x += at(u) * r),\n              (a.y += ot(u) * r);\n          }\n          var h = { x: a.x, y: a.y, angle: c };\n          return i\n            ? (c > 0.5 * it && c < 1.5 * it && (c -= it),\n              Object(f.a)({ rotate: c }, h))\n            : h;\n        },\n        ft = function t(e, n) {\n          if (!1 === n(e)) return !1;\n          if (e && e.children)\n            for (var r = e.children.length - 1; r >= 0; r--)\n              if (!t(e.children[r], n)) return !1;\n          return !0;\n        },\n        dt = function (t, e) {\n          \"function\" == typeof e && ft(t, e);\n        },\n        pt = function (t, e) {\n          \"function\" == typeof e &&\n            (function t(e, n) {\n              if (e && e.children)\n                for (var r = e.children.length - 1; r >= 0; r--)\n                  if (!t(e.children[r], n)) return;\n              return !1 !== n(e);\n            })(t, e);\n        },\n        gt = function (t, e) {\n          return e * (rt[t] || 1);\n        },\n        vt = function (t, e) {\n          var n = 0,\n            r = new RegExp(\"[一-龥]+\");\n          return (\n            t.split(\"\").forEach(function (t) {\n              r.test(t) ? (n += e) : (n += gt(t, e));\n            }),\n            [n, e]\n          );\n        },\n        yt = function (t, e) {\n          var n = [],\n            r = {},\n            i = {};\n          t.forEach(function (t) {\n            i[t.id] = t;\n          }),\n            t.forEach(function (t, e) {\n              var o = Object(c.clone)(t);\n              (o.itemType = \"combo\"),\n                (o.children = void 0),\n                o.parentId === o.id\n                  ? (console.warn(\n                      \"The parentId for combo \".concat(\n                        o.id,\n                        \" can not be the same as the combo's id\",\n                      ),\n                    ),\n                    delete o.parentId)\n                  : o.parentId &&\n                    !i[o.parentId] &&\n                    (console.warn(\n                      \"The parent combo for combo \".concat(\n                        o.id,\n                        \" does not exist!\",\n                      ),\n                    ),\n                    delete o.parentId);\n              var a = r[o.id];\n              if (a) {\n                if (\n                  ((o.children = a.children), (r[o.id] = o), !(a = o).parentId)\n                )\n                  return void n.push(a);\n                var s = r[a.parentId];\n                if (s) s.children ? s.children.push(o) : (s.children = [o]);\n                else {\n                  var u = { id: a.parentId, children: [a] };\n                  (r[a.parentId] = u), (r[o.id] = o);\n                }\n              } else if (Object(c.isString)(t.parentId)) {\n                var h = r[t.parentId];\n                if (h)\n                  h.children ? h.children.push(o) : (h.children = [o]),\n                    (r[o.id] = o);\n                else {\n                  var l = { id: t.parentId, children: [o] };\n                  (r[l.id] = l), (r[o.id] = o);\n                }\n              } else n.push(o), (r[o.id] = o);\n            });\n          var o = {};\n          (e || []).forEach(function (t) {\n            o[t.id] = t;\n            var e = r[t.comboId];\n            if (e) {\n              var n = { id: t.id, comboId: t.comboId };\n              e.children ? e.children.push(n) : (e.children = [n]),\n                (n.itemType = \"node\"),\n                (r[t.id] = n);\n            }\n          });\n          var a = 0;\n          return (\n            n.forEach(function (t) {\n              (t.depth = a + 10),\n                ft(t, function (t) {\n                  var e,\n                    n = r[t.id].itemType;\n                  (e = \"node\" === n ? r[t.comboId] : r[t.parentId]),\n                    (t.depth = e && \"node\" === n ? a + 1 : a + 10),\n                    a < t.depth && (a = t.depth);\n                  var i = o[t.id];\n                  return i && (i.depth = t.depth), !0;\n                });\n            }),\n            n\n          );\n        },\n        mt = function (t, e, n) {\n          var r,\n            i = t,\n            o = { root: { children: t } },\n            a = !1,\n            s = \"root\";\n          (t || []).forEach(function (t) {\n            if (!a)\n              return t.id === e\n                ? ((r = t),\n                  \"combo\" === t.itemType ? (r.parentId = n) : (r.comboId = n),\n                  void (a = !0))\n                : void dt(t, function (t) {\n                    return (\n                      (o[t.id] = { children: t.children }),\n                      (i = o[t.parentId || t.comboId || \"root\"].children),\n                      !t ||\n                        (!t.removed && e !== t.id) ||\n                        !i ||\n                        ((s = t.parentId || t.comboId || \"root\"),\n                        (r = t),\n                        \"combo\" === t.itemType\n                          ? (r.parentId = n)\n                          : (r.comboId = n),\n                        (a = !0),\n                        !1)\n                    );\n                  });\n          });\n          var c = (i = o[s].children) ? i.indexOf(r) : -1;\n          if (\n            (c > -1 && i.splice(c, 1),\n            a ||\n              ((r = { id: e, itemType: \"node\", comboId: n }),\n              (o[e] = { children: void 0 })),\n            e)\n          ) {\n            var u = !1;\n            if (n) {\n              var h = 0;\n              (t || []).forEach(function (t) {\n                u ||\n                  dt(t, function (t) {\n                    return (\n                      n !== t.id ||\n                      ((u = !0),\n                      t.children ? t.children.push(r) : (t.children = [r]),\n                      (h = t.depth),\n                      \"node\" === r.itemType\n                        ? (r.depth = h + 2)\n                        : (r.depth = h + 1),\n                      !1)\n                    );\n                  });\n              });\n            } else (n && u) || \"node\" === r.itemType || t.push(r);\n            var l = r.depth;\n            dt(r, function (t) {\n              return (\n                \"node\" === t.itemType ? (l += 2) : (l += 1), (t.depth = l), !0\n              );\n            });\n          }\n          return t;\n        },\n        bt = function (t, e) {\n          var n = {\n            minX: 1 / 0,\n            minY: 1 / 0,\n            maxX: -1 / 0,\n            maxY: -1 / 0,\n            x: void 0,\n            y: void 0,\n            width: void 0,\n            height: void 0,\n            centerX: void 0,\n            centerY: void 0,\n          };\n          return t && 0 !== t.length\n            ? (t.forEach(function (t) {\n                var r = e.findById(t.id);\n                if (r && r.isVisible()) {\n                  r.set(\"bboxCanvasCache\", void 0);\n                  var i = r.getCanvasBBox();\n                  i.x && n.minX > i.minX && (n.minX = i.minX),\n                    i.y && n.minY > i.minY && (n.minY = i.minY),\n                    i.x && n.maxX < i.maxX && (n.maxX = i.maxX),\n                    i.y && n.maxY < i.maxY && (n.maxY = i.maxY);\n                }\n              }),\n              (n.x = (n.minX + n.maxX) / 2),\n              (n.y = (n.minY + n.maxY) / 2),\n              (n.width = n.maxX - n.minX),\n              (n.height = n.maxY - n.minY),\n              (n.centerX = (n.minX + n.maxX) / 2),\n              (n.centerY = (n.minY + n.maxY) / 2),\n              Object.keys(n).forEach(function (t) {\n                (n[t] !== 1 / 0 && n[t] !== -1 / 0) || (n[t] = void 0);\n              }),\n              n)\n            : n;\n        },\n        xt = function (t) {\n          var e =\n            Object(c.isNumber)(t.x) ||\n            Object(c.isNumber)(t.y) ||\n            t.type ||\n            t.anchorPoints ||\n            t.size;\n          return (\n            t.style &&\n              (e =\n                e ||\n                Object(c.isNumber)(t.style.r) ||\n                Object(c.isNumber)(t.style.width) ||\n                Object(c.isNumber)(t.style.height) ||\n                Object(c.isNumber)(t.style.rx) ||\n                Object(c.isNumber)(t.style.ry)),\n            e\n          );\n        },\n        St = function (t) {\n          var e = {};\n          return (\n            Object.keys(t).forEach(function (n) {\n              var r = t[n];\n              if (Object(c.isObject)(r)) {\n                var i = {};\n                Object.keys(r).forEach(function (t) {\n                  var e = r[t];\n                  (\"img\" !== t || Object(c.isString)(e)) &&\n                    (i[t] = Object(c.clone)(e));\n                }),\n                  (e[n] = i);\n              } else e[n] = Object(c.clone)(r);\n            }),\n            e\n          );\n        },\n        wt = function (t) {\n          if (!t)\n            return console.error(\"G6 Error Tips: the data must be defined\"), !1;\n          var e = t.nodes,\n            n = t.edges,\n            r = t.combos,\n            i = void 0 === r ? [] : r;\n          if (!e && !n) {\n            var o = !0;\n            return (\n              dt(t, function (t) {\n                return !!Object(c.isString)(t.id) || ((o = !1), !1);\n              }),\n              o\n            );\n          }\n          var a = (e || []).find(function (t) {\n            return !Object(c.isString)(t.id);\n          });\n          if (a)\n            return (\n              console.warn(\n                \"G6 Warning Tips: missing 'id' property, or %c\".concat(\n                  a.id,\n                  \"%c is not a string.\",\n                ),\n                \"font-size: 20px; color: red;\",\n                \"\",\n              ),\n              !1\n            );\n          var s = (e || []).map(function (t) {\n              return t.id;\n            }),\n            u = i.map(function (t) {\n              return t.id;\n            }),\n            h = Object(f.f)(Object(f.f)([], s, !0), u, !0),\n            l = (n || []).find(function (t) {\n              return !h.includes(t.source) || !h.includes(t.target);\n            });\n          return (\n            !l ||\n            (console.warn(\n              \"G6 Warning Tips: The source %c\"\n                .concat(l.source, \"%c or the target %c\")\n                .concat(\n                  l.target,\n                  \"%c of the edge do not exist in the nodes or combos.\",\n                ),\n              \"font-size: 20px; color: red;\",\n              \"\",\n              \"font-size: 20px; color: red;\",\n              \"\",\n            ),\n            !1)\n          );\n        },\n        Ot = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.destroyed = !1),\n              (this.modes = t.get(\"modes\") || { default: [] }),\n              this.formatModes(),\n              (this.mode = t.get(\"defaultMode\") || \"default\"),\n              (this.currentBehaves = []),\n              this.setMode(this.mode);\n          }\n          return (\n            (t.prototype.formatModes = function () {\n              var t = this.modes;\n              Object(c.each)(t, function (t) {\n                Object(c.each)(t, function (e, n) {\n                  Object(c.isString)(e) && (t[n] = { type: e });\n                });\n              });\n            }),\n            (t.prototype.setBehaviors = function (t) {\n              var e,\n                n = this.graph,\n                r = this.modes[t],\n                i = [];\n              Object(c.each)(r || [], function (t) {\n                var r = h.getBehavior(t.type || t);\n                r && (e = new r(t)) && (e.bind(n), i.push(e));\n              }),\n                (this.currentBehaves = i);\n            }),\n            (t.mergeBehaviors = function (t, e) {\n              return (\n                Object(c.each)(e, function (e) {\n                  t.indexOf(e) < 0 &&\n                    (Object(c.isString)(e) && (e = { type: e }), t.push(e));\n                }),\n                t\n              );\n            }),\n            (t.filterBehaviors = function (t, e) {\n              var n = [];\n              return (\n                t.forEach(function (t) {\n                  var r = \"\";\n                  (r = Object(c.isString)(t) ? t : t.type),\n                    e.indexOf(r) < 0 && n.push(t);\n                }),\n                n\n              );\n            }),\n            (t.prototype.setMode = function (t) {\n              var e = this.modes,\n                n = this.graph,\n                r = t;\n              e[r] &&\n                (n.emit(\"beforemodechange\", { mode: t }),\n                Object(c.each)(this.currentBehaves, function (t) {\n                  t.delegate && t.delegate.remove(), t.unbind(n);\n                }),\n                this.setBehaviors(r),\n                n.emit(\"aftermodechange\", { mode: t }),\n                (this.mode = t));\n            }),\n            (t.prototype.getMode = function () {\n              return this.mode;\n            }),\n            (t.prototype.manipulateBehaviors = function (e, n, r) {\n              var i,\n                o = this;\n              if (((i = Object(c.isArray)(e) ? e : [e]), Object(c.isArray)(n)))\n                return (\n                  Object(c.each)(n, function (e) {\n                    o.modes[e]\n                      ? (o.modes[e] = r\n                          ? t.mergeBehaviors(o.modes[e] || [], i)\n                          : t.filterBehaviors(o.modes[e] || [], i))\n                      : r && (o.modes[e] = i);\n                  }),\n                  this\n                );\n              var a = n;\n              return (\n                n || (a = this.mode),\n                this.modes[a] || (r && (this.modes[a] = i)),\n                (this.modes[a] = r\n                  ? t.mergeBehaviors(this.modes[a] || [], i)\n                  : t.filterBehaviors(this.modes[a] || [], i)),\n                this.setMode(this.mode),\n                this\n              );\n            }),\n            (t.prototype.updateBehavior = function (t, e, n) {\n              Object(c.isString)(t) && (t = { type: t });\n              var r = [];\n              if (n && n !== this.mode && \"default\" !== n) {\n                if (!(r = this.modes[n]) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                var i = r.length;\n                for (a = 0; a < i; a++) {\n                  if ((s = r[a]).type === t.type || s === t.type)\n                    return (\n                      s === t.type && (s = { type: s }),\n                      Object.assign(s, e),\n                      (r[a] = s),\n                      this\n                    );\n                  a === i - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              } else {\n                if (!(r = this.currentBehaves) || !r.length)\n                  return (\n                    console.warn(\n                      \"Update behavior failed! There is no behaviors in this mode on the graph.\",\n                    ),\n                    this\n                  );\n                for (var o = r.length, a = 0; a < o; a++) {\n                  var s;\n                  if ((s = r[a]).type === t.type) return s.updateCfg(e), this;\n                  a === o - 1 &&\n                    console.warn(\n                      \"Update behavior failed! There is no such behavior in the mode\",\n                    );\n                }\n              }\n              return this;\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.modes = null),\n                (this.currentBehaves = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Mt = n(54),\n        kt = (function (t) {\n          function e(e, n) {\n            var r = t.call(this, e, n) || this;\n            return (\n              (r.item = n.item),\n              (r.canvasX = n.canvasX),\n              (r.canvasY = n.canvasY),\n              (r.detail = n.detail),\n              r\n            );\n          }\n          return Object(f.c)(e, t), e;\n        })(n(8).Event),\n        jt = function (t) {\n          return \"\".concat(t, \"-\").concat(Math.random()).concat(Date.now());\n        },\n        Ct = function (t) {\n          var e = 0,\n            n = 0,\n            r = 0,\n            i = 0;\n          if (Object(c.isNumber)(t)) e = n = r = i = t;\n          else if (Object(c.isString)(t)) {\n            e = n = r = i = parseInt(t, 10);\n          } else\n            Object(c.isArray)(t) &&\n              ((e = t[0]),\n              (r = Object(c.isNil)(t[1]) ? t[0] : t[1]),\n              (i = Object(c.isNil)(t[2]) ? t[0] : t[2]),\n              (n = Object(c.isNil)(t[3]) ? r : t[3]));\n          return [e, r, i, n];\n        },\n        Et = function (t) {\n          var e = new kt(t.type, t);\n          return (\n            (e.clientX = t.clientX),\n            (e.clientY = t.clientY),\n            (e.x = t.x),\n            (e.y = t.y),\n            (e.target = t.target),\n            (e.currentTarget = t.currentTarget),\n            (e.bubbles = !0),\n            (e.item = t.item),\n            e\n          );\n        },\n        Pt = function (t) {\n          if (!t) return !1;\n          for (var e = [1, 0, 0, 0, 1, 0, 0, 0, 1], n = 0; n < 9; n++)\n            if (t[n] !== e[n]) return !0;\n          return !1;\n        },\n        At = function (t) {\n          return Number.isNaN(Number(t));\n        },\n        It = function (t) {\n          for (\n            var e = 1 / 0, n = -1 / 0, r = 1 / 0, i = -1 / 0, o = 0;\n            o < t.length;\n            o++\n          ) {\n            var a = t[o].getBBox(),\n              s = a.minX,\n              c = a.minY,\n              u = a.maxX,\n              h = a.maxY;\n            s < e && (e = s),\n              c < r && (r = c),\n              u > n && (n = u),\n              h > i && (i = h);\n          }\n          return {\n            x: Math.floor(e),\n            y: Math.floor(r),\n            width: Math.ceil(n) - Math.floor(e),\n            height: Math.ceil(i) - Math.floor(r),\n            minX: e,\n            minY: r,\n            maxX: n,\n            maxY: i,\n          };\n        },\n        Tt = function (t, e, n, r, i) {\n          void 0 === e && (e = 15),\n            void 0 === n && (n = \"quadratic\"),\n            void 0 === r && (r = void 0),\n            void 0 === i && (i = void 0);\n          for (\n            var o = t.length,\n              a = 2 * e,\n              s = [\n                \"top\",\n                \"top-right\",\n                \"right\",\n                \"bottom-right\",\n                \"bottom\",\n                \"bottom-left\",\n                \"left\",\n                \"top-left\",\n              ],\n              c = {},\n              u = [],\n              h = {},\n              l = 0;\n            l < o;\n            l++\n          ) {\n            var f = t[l],\n              d = f.source,\n              p = f.target,\n              g = \"\".concat(d, \"-\").concat(p);\n            if (!u[l]) {\n              c[g] || (c[g] = []), (u[l] = !0), c[g].push(f);\n              for (var v = 0; v < o; v++)\n                if (l !== v) {\n                  var y = t[v],\n                    m = y.source,\n                    b = y.target;\n                  u[v] ||\n                    (d === b && p === m\n                      ? (c[g].push(y),\n                        (u[v] = !0),\n                        (h[\n                          \"\"\n                            .concat(m, \"|\")\n                            .concat(b, \"|\")\n                            .concat(c[g].length - 1)\n                        ] = !0))\n                      : d === m && p === b && (c[g].push(y), (u[v] = !0)));\n                }\n            }\n          }\n          for (var x in c)\n            for (var S = c[x], w = S.length, O = 0; O < w; O++) {\n              var M = S[O];\n              if (M.source !== M.target)\n                if (1 === w && r && M.source !== M.target) M.type = r;\n                else {\n                  M.type = n;\n                  var k =\n                    (O % 2 == 0 ? 1 : -1) *\n                    (h[\"\".concat(M.source, \"|\").concat(M.target, \"|\").concat(O)]\n                      ? -1\n                      : 1);\n                  M.curveOffset =\n                    w % 2 == 1\n                      ? k * Math.ceil(O / 2) * a\n                      : k * (Math.floor(O / 2) * a + e);\n                }\n              else\n                i && (M.type = i),\n                  (M.loopCfg = {\n                    position: s[O % 8],\n                    dist: 20 * Math.floor(O / 8) + 50,\n                  });\n            }\n          return t;\n        },\n        Nt = (function () {\n          function t(t) {\n            (this.destroyed = !1), (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.getViewCenter = function () {\n              var t = this.getFormatPadding(),\n                e = this.graph,\n                n = this.graph.get(\"width\"),\n                r = e.get(\"height\");\n              return {\n                x: (n - t[1] - t[3]) / 2 + t[3],\n                y: (r - t[0] - t[2]) / 2 + t[0],\n              };\n            }),\n            (t.prototype.fitCenter = function () {\n              var t = this.graph,\n                e = t.get(\"group\");\n              e.resetMatrix();\n              var n = e.getCanvasBBox();\n              if (0 !== n.width && 0 !== n.height) {\n                var r = this.getViewCenter(),\n                  i = n.x + n.width / 2,\n                  o = n.y + n.height / 2;\n                t.translate(r.x - i, r.y - o);\n              }\n            }),\n            (t.prototype.fitView = function () {\n              var t = this.graph,\n                e = this.getFormatPadding(),\n                n = t.get(\"width\"),\n                r = t.get(\"height\"),\n                i = t.get(\"group\");\n              i.resetMatrix();\n              var o = i.getCanvasBBox();\n              if (0 !== o.width && 0 !== o.height) {\n                var a = this.getViewCenter(),\n                  s = o.x + o.width / 2,\n                  c = o.y + o.height / 2;\n                t.translate(a.x - s, a.y - c);\n                var u = (n - e[1] - e[3]) / o.width,\n                  h = (r - e[0] - e[2]) / o.height,\n                  l = u;\n                u > h && (l = h), t.zoom(l, a);\n              }\n            }),\n            (t.prototype.getFormatPadding = function () {\n              var t = this.graph.get(\"fitViewPadding\");\n              return Ct(t);\n            }),\n            (t.prototype.focusPoint = function (t, e, n) {\n              var r = this,\n                i = this.getViewCenter(),\n                o = this.getPointByCanvas(i.x, i.y),\n                a = this.graph.get(\"group\").getMatrix();\n              if ((a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]), e)) {\n                var s = (o.x - t.x) * a[0],\n                  c = (o.y - t.y) * a[4],\n                  u = 0,\n                  h = 0,\n                  l = 0,\n                  d = 0;\n                this.graph.get(\"canvas\").animate(\n                  function (t) {\n                    (l = s * t),\n                      (d = c * t),\n                      r.graph.translate(l - u, d - h),\n                      (u = l),\n                      (h = d);\n                  },\n                  Object(f.a)({}, n),\n                );\n              } else\n                this.graph.translate((o.x - t.x) * a[0], (o.y - t.y) * a[4]);\n            }),\n            (t.prototype.getPointByCanvas = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), k({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.getPointByClient = function (t, e) {\n              var n = this.graph.get(\"canvas\").getPointByClient(t, e);\n              return this.getPointByCanvas(n.x, n.y);\n            }),\n            (t.prototype.getClientByPoint = function (t, e) {\n              var n = this.graph.get(\"canvas\"),\n                r = this.getCanvasByPoint(t, e),\n                i = n.getClientByPoint(r.x, r.y);\n              return { x: i.x, y: i.y };\n            }),\n            (t.prototype.getCanvasByPoint = function (t, e) {\n              var n = this.graph.get(\"group\").getMatrix();\n              return (\n                n || (n = [1, 0, 0, 0, 1, 0, 0, 0, 1]), M({ x: t, y: e }, n)\n              );\n            }),\n            (t.prototype.focus = function (t, e, n) {\n              if ((Object(c.isString)(t) && (t = this.graph.findById(t)), t)) {\n                var r = 0,\n                  i = 0;\n                if (t.getType && \"edge\" === t.getType()) {\n                  var o = t.getSource().get(\"group\").getMatrix(),\n                    a = t.getTarget().get(\"group\").getMatrix();\n                  o && a\n                    ? ((r = (o[6] + a[6]) / 2), (i = (o[7] + a[7]) / 2))\n                    : (o || a) &&\n                      ((r = o ? o[6] : a[6]), (i = o ? o[7] : a[7]));\n                } else {\n                  var s = t.get(\"group\").getMatrix();\n                  s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                    (r = s[6]),\n                    (i = s[7]);\n                }\n                this.focusPoint({ x: r, y: i }, e, n);\n              }\n            }),\n            (t.prototype.changeSize = function (t, e) {\n              var n = this.graph;\n              if (!Object(c.isNumber)(t) || !Object(c.isNumber)(e))\n                throw Error(\n                  \"invalid canvas width & height, please make sure width & height type is number\",\n                );\n              n.set({ width: t, height: e }),\n                n.get(\"canvas\").changeSize(t, e),\n                n.get(\"plugins\").forEach(function (r) {\n                  if (r.get(\"gridContainer\")) {\n                    var i = n.get(\"minZoom\");\n                    Object(Mt.b)(r.get(\"container\"), {\n                      width: \"\".concat(t, \"px\"),\n                      height: \"\".concat(e, \"px\"),\n                    }),\n                      Object(Mt.b)(r.get(\"gridContainer\"), {\n                        width: \"\".concat(t / i, \"px\"),\n                        height: \"\".concat(e / i, \"px\"),\n                        left: 0,\n                        top: 0,\n                      });\n                  }\n                });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !1);\n            }),\n            t\n          );\n        })();\n      function Bt(t) {\n        return (Bt =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function Lt(t) {\n        if (\"string\" != typeof t) return t;\n        var e = function (t) {\n            if (\"string\" != typeof t) return t;\n            try {\n              return JSON.parse(t.trim());\n            } catch (e) {\n              return t.trim();\n            }\n          },\n          n = e(t);\n        if (\"string\" != typeof n) return n;\n        for (\n          var r = function (t) {\n              return t[t.length - 1];\n            },\n            i = t.trim(),\n            o = [],\n            a = [],\n            s = function () {\n              for (var t = [], e = 0; e < arguments.length; e++)\n                t[e] = arguments[e];\n              return t.some(function (t) {\n                return r(a) === t;\n              });\n            },\n            c = null,\n            u = 0,\n            h = \"\";\n          u < i.length;\n\n        ) {\n          var l = i[u],\n            f = s('\"', \"'\");\n          if (f || l.trim()) {\n            var d = \"\\\\\" === i[u - 1],\n              p = s(\"}\"),\n              g = s(\"]\"),\n              v = s(\",\"),\n              y = r(o);\n            if (f)\n              if (r(a) !== l || d) h += l;\n              else {\n                a.pop();\n                var m = e(h);\n                y.push(m), (c = m), (h = \"\");\n              }\n            else if (g && \",\" === l) h && (y.push(e(h)), (h = \"\"));\n            else if (p && \":\" === l) a.push(\",\"), h && (y.push(h), (h = \"\"));\n            else if (v && \",\" === l) h && (y.push(e(h)), (h = \"\")), a.pop();\n            else if (\"}\" === l && (p || v)) {\n              h && (y.push(e(h)), (h = \"\")), v && a.pop();\n              for (var b = {}, x = 1; x < y.length; x += 2) b[y[x - 1]] = y[x];\n              o.pop(), o.length && r(o).push(b), a.pop(), (c = b);\n            } else\n              \"]\" === l && g\n                ? (h && (y.push(e(h)), (h = \"\")),\n                  o.pop(),\n                  o.length && r(o).push(y),\n                  a.pop(),\n                  (c = y))\n                : \"{\" === l\n                ? (o.push([]), a.push(\"}\"))\n                : \"[\" === l\n                ? (o.push([]), a.push(\"]\"))\n                : '\"' === l\n                ? a.push('\"')\n                : \"'\" === l\n                ? a.push(\"'\")\n                : (h += l);\n            u += 1;\n          } else u += 1;\n        }\n        return c || h;\n      }\n      function Dt(t, e) {\n        var n;\n        void 0 === e && (e = { x: 0, y: 0 });\n        var r = Object(f.a)({ x: 0, y: 0, width: 0, height: 0 }, e);\n        if (null === (n = t.children) || void 0 === n ? void 0 : n.length) {\n          var i = t.attrs,\n            o = void 0 === i ? {} : i,\n            a = o.marginTop,\n            s = Object(f.a)({}, e);\n          a && (s.y += a);\n          for (var c = 0; c < t.children.length; c++) {\n            t.children[c].attrs.key = \"\"\n              .concat(o.key || \"root\", \" -\")\n              .concat(c, \" \");\n            var u = Dt(t.children[c], s);\n            if (u.bbox) {\n              var h = u.bbox;\n              \"inline\" === u.attrs.next\n                ? (s.x += u.bbox.width)\n                : (s.y += u.bbox.height),\n                h.width + h.x > r.width && (r.width = h.width + h.x),\n                h.height + h.y > r.height && (r.height = h.height + h.y);\n            }\n          }\n        }\n        return (\n          (t.bbox = (function (t, e, n) {\n            var r,\n              i,\n              o = t.attrs,\n              a = void 0 === o ? {} : o,\n              s = {\n                x: e.x || 0,\n                y: e.y || 0,\n                width: n.width || 0,\n                height: n.height || 0,\n              };\n            switch (t.type) {\n              case \"maker\":\n              case \"circle\":\n                a.r && ((i = 2 * a.r), (r = 2 * a.r));\n                break;\n              case \"text\":\n                a.text &&\n                  ((i = vt(a.text, a.fontSize || 12)[0]),\n                  (r = 16),\n                  (s.y += r),\n                  (s.height = r),\n                  (s.width = i),\n                  (t.attrs = Object(f.a)({ fontSize: 12, fill: \"#000\" }, a)));\n                break;\n              default:\n                a.width && (i = a.width), a.height && (r = a.height);\n            }\n            return (\n              r >= 0 && (s.height = r),\n              i >= 0 && (s.width = i),\n              a.marginTop && (s.y += a.marginTop),\n              a.marginLeft && (s.x += a.marginLeft),\n              s\n            );\n          })(t, e, r)),\n          (t.attrs = Object(f.a)(Object(f.a)({}, t.attrs), t.bbox)),\n          t\n        );\n      }\n      function _t(t) {\n        var e = {},\n          n = function (e) {\n            var n = (function (t) {\n                return function (e) {\n                  for (var n = t.length, r = [], i = 0, o = \"\"; i < n; )\n                    if (\"{\" === t[i] && \"{\" === t[i + 1])\n                      r.push(o), (o = \"\"), (i += 2);\n                    else if (\"}\" === t[i] && \"}\" === t[i + 1]) {\n                      if (r.length) {\n                        var a = r.pop();\n                        (o = Object(c.get)(\n                          e,\n                          o,\n                          a.endsWith(\"=\") ? '\"{'.concat(o, '}\"') : o,\n                        )),\n                          r.push(a + o);\n                      }\n                      (i += 2), (o = \"\");\n                    } else (o += t[i]), (i += 1);\n                  return (\n                    r.push(o),\n                    r\n                      .map(function (t, e) {\n                        return r[e - 1] && r[e - 1].endsWith(\"=\")\n                          ? '\"{'.concat(t, '}\"')\n                          : t;\n                      })\n                      .join(\"\")\n                  );\n                };\n              })(\"function\" == typeof t ? t(e) : t)(e),\n              r = document.createElement(\"div\");\n            r.innerHTML = n;\n            var i = Dt(\n              (function t(e, n) {\n                var r = {},\n                  i = (e.getAttributeNames && e.getAttributeNames()) || [],\n                  o =\n                    e.children &&\n                    Array.from(e.children).map(function (e) {\n                      return t(e, n);\n                    }),\n                  a = {},\n                  s = e.tagName ? e.tagName.toLowerCase() : \"group\";\n                return (\n                  \"text\" === s && (r.text = e.innerText),\n                  (a.type = s),\n                  \"img\" === s && (a.type = \"image\"),\n                  Array.from(i).forEach(function (t) {\n                    var n = t.split(\"-\").reduce(function (t, e) {\n                        return t + e.charAt(0).toUpperCase() + e.slice(1);\n                      }),\n                      i = e.getAttribute(t);\n                    try {\n                      if (\"style\" === n || \"attrs\" === n) {\n                        var o = Lt(i);\n                        r = Object(f.a)(Object(f.a)({}, r), o);\n                      } else a[n] = Lt(i);\n                    } catch (t) {\n                      if (\"style\" === n) throw t;\n                      a[n] = i;\n                    }\n                  }),\n                  (a.attrs = r),\n                  n &&\n                    n.style &&\n                    a.name &&\n                    \"object\" === Bt(n.style[a.name]) &&\n                    (a.attrs = Object(f.a)(\n                      Object(f.a)({}, a.attrs),\n                      n.style[a.name],\n                    )),\n                  n &&\n                    n.style &&\n                    a.keyshape &&\n                    (a.attrs = Object(f.a)(Object(f.a)({}, a.attrs), n.style)),\n                  o.length && (a.children = o),\n                  a\n                );\n              })(r.children[0], e),\n            );\n            return r.remove(), i;\n          };\n        return {\n          draw: function (t, r) {\n            var i = n(t),\n              o = r;\n            return (\n              (function t(e) {\n                var n = e.attrs,\n                  i = void 0 === n ? {} : n,\n                  a = e.bbox,\n                  s = e.type,\n                  c = e.children,\n                  u = Object(f.e)(e, [\"attrs\", \"bbox\", \"type\", \"children\"]);\n                if (\"group\" !== e.type) {\n                  var h = r.addShape(\n                    e.type,\n                    Object(f.a)(\n                      { attrs: i, origin: { bbox: a, type: s, children: c } },\n                      u,\n                    ),\n                  );\n                  e.keyshape && (o = h);\n                }\n                e.children &&\n                  e.children.forEach(function (e) {\n                    return t(e);\n                  });\n              })(i),\n              (e[t.id] = [i]),\n              o\n            );\n          },\n          update: function (t, r) {\n            e[t.id] || (e[t.id] = []);\n            var i = r.getContainer(),\n              o = i.get(\"children\"),\n              a = n(t),\n              s = (function t(e, n) {\n                var r,\n                  i,\n                  o,\n                  a,\n                  s = (e || {}).type,\n                  c = ((null == n ? void 0 : n.attrs) || {}).key;\n                if ((c && e && (e.attrs.key = c), !e && n))\n                  return { action: \"delete\", val: n, type: s, key: c };\n                if (e && !n) return { action: \"add\", val: e, type: s };\n                if (!e && !n) return { action: \"same\", type: s };\n                var u = [];\n                if (\n                  (null === (r = e.children) || void 0 === r\n                    ? void 0\n                    : r.length) > 0 ||\n                  (null === (i = n.children) || void 0 === i\n                    ? void 0\n                    : i.length) > 0\n                )\n                  for (\n                    var h = Math.max(\n                        null === (o = e.children) || void 0 === o\n                          ? void 0\n                          : o.length,\n                        null === (a = n.children) || void 0 === a\n                          ? void 0\n                          : a.length,\n                      ),\n                      l = n.children || [],\n                      f = e.children || [],\n                      d = 0;\n                    d < h;\n                    d += 1\n                  )\n                    u.push(t(f[d], l[d]));\n                var p = Object.keys(n.attrs),\n                  g = Object.keys(e.attrs);\n                return n.type !== e.type\n                  ? {\n                      action: \"restructure\",\n                      nowTarget: e,\n                      formerTarget: n,\n                      key: c,\n                      children: u,\n                    }\n                  : p\n                      .filter(function (t) {\n                        return \"children\" !== t;\n                      })\n                      .some(function (t) {\n                        return e.attrs[t] !== n.attrs[t] || !g.includes(t);\n                      })\n                  ? { action: \"change\", val: e, children: u, type: s, key: c }\n                  : { action: \"same\", children: u, type: s, key: c };\n              })(a, e[t.id].pop()),\n              c = function t(e) {\n                var n;\n                \"group\" !== e.type && i.addShape(e.type, { attrs: e.attrs }),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              },\n              u = function t(e) {\n                var n,\n                  r = o.find(function (t) {\n                    return t.attrs.key === e.attrs.key;\n                  });\n                r && i.removeChild(r),\n                  (null === (n = e.children) || void 0 === n\n                    ? void 0\n                    : n.length) &&\n                    e.children.map(function (e) {\n                      return t(e);\n                    });\n              };\n            !(function t(e) {\n              var n = e.key;\n              if (\"group\" !== e.type) {\n                var i = o.find(function (t) {\n                  return t.attrs.key === n;\n                });\n                switch (e.action) {\n                  case \"change\":\n                    if (i) {\n                      var a = e.val.keyshape ? r.getOriginStyle() : {};\n                      i.attr(Object(f.a)(Object(f.a)({}, a), e.val.attrs));\n                    }\n                    break;\n                  case \"add\":\n                    c(e.val);\n                    break;\n                  case \"delete\":\n                    u(e.val);\n                    break;\n                  case \"restructure\":\n                    u(e.formerTarget), c(e.nowTarget);\n                }\n              }\n              e.children &&\n                e.children.forEach(function (e) {\n                  return t(e);\n                });\n            })(s),\n              e[t.id].push(a);\n          },\n          getAnchorPoints: function () {\n            return [\n              [0, 0.5],\n              [1, 0.5],\n              [0.5, 1],\n              [0.5, 0],\n            ];\n          },\n        };\n      }\n      var Rt = {};\n      function Ft(t) {\n        return Rt[t] || (Rt[t] = Object(c.upperFirst)(t)), Rt[t];\n      }\n      var Yt = {\n          defaultShapeType: \"defaultType\",\n          className: null,\n          getShape: function (t) {\n            return (\n              this[t] || this[this.defaultShapeType] || this[\"simple-circle\"]\n            );\n          },\n          draw: function (t, e, n) {\n            var r = this.getShape(t),\n              i = r.draw(e, n);\n            return r.afterDraw && r.afterDraw(e, n, i), i;\n          },\n          baseUpdate: function (t, e, n) {\n            var r = this.getShape(t);\n            r.update && r.update(e, n), r.afterUpdate && r.afterUpdate(e, n);\n          },\n          setState: function (t, e, n, r) {\n            this.getShape(t).setState(e, n, r);\n          },\n          shouldUpdate: function (t) {\n            return !!this.getShape(t).update;\n          },\n          getControlPoints: function (t, e) {\n            return this.getShape(t).getControlPoints(e);\n          },\n          getAnchorPoints: function (t, e) {\n            return this.getShape(t).getAnchorPoints(e);\n          },\n        },\n        Xt = {\n          options: {},\n          draw: function (t, e) {\n            return this.drawShape(t, e);\n          },\n          drawShape: function () {},\n          afterDraw: function () {},\n          afterUpdate: function () {},\n          setState: function () {},\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            var e = this.options.anchorPoints;\n            return t.anchorPoints || e;\n          },\n        },\n        zt = (function () {\n          function t() {}\n          return (\n            (t.registerFactory = function (e, n) {\n              var r = Ft(e),\n                i = Yt,\n                o = Object(f.a)(Object(f.a)({}, i), n);\n              return (t[r] = o), (o.className = r), o;\n            }),\n            (t.getFactory = function (e) {\n              return t[Ft(e)];\n            }),\n            (t.registerNode = function (e, n, r) {\n              var i,\n                o = t.Node;\n              if (\"string\" == typeof n || \"function\" == typeof n) {\n                var a = _t(n);\n                i = Object(f.a)(Object(f.a)({}, o.getShape(\"single-node\")), a);\n              } else if (n.jsx) {\n                a = _t(n.jsx);\n                i = Object(f.a)(\n                  Object(f.a)(Object(f.a)({}, o.getShape(\"single-node\")), a),\n                  n,\n                );\n              } else {\n                o.getShape(r);\n                var s = r ? o.getShape(r) : Xt;\n                i = Object(f.a)(Object(f.a)({}, s), n);\n              }\n              return (i.type = e), (i.itemType = \"node\"), (o[e] = i), i;\n            }),\n            (t.registerEdge = function (e, n, r) {\n              var i = t.Edge,\n                o = r ? i.getShape(r) : Xt,\n                a = Object(f.a)(Object(f.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"edge\"), (i[e] = a), a;\n            }),\n            (t.registerCombo = function (e, n, r) {\n              var i = t.Combo,\n                o = r ? i.getShape(r) : Xt,\n                a = Object(f.a)(Object(f.a)({}, o), n);\n              return (a.type = e), (a.itemType = \"combo\"), (i[e] = a), a;\n            }),\n            t\n          );\n        })(),\n        Wt = zt;\n      zt.registerFactory(\"node\", { defaultShapeType: \"circle\" }),\n        zt.registerFactory(\"edge\", { defaultShapeType: \"line\" }),\n        zt.registerFactory(\"combo\", { defaultShapeType: \"circle\" });\n      var qt = (function () {\n          function t(t) {\n            (this._cfg = {}), (this.destroyed = !1);\n            var e = {\n              id: void 0,\n              type: \"item\",\n              model: {},\n              group: void 0,\n              animate: !1,\n              visible: !0,\n              locked: !1,\n              event: !0,\n              keyShape: void 0,\n              states: [],\n            };\n            this._cfg = Object.assign(e, this.getDefaultCfg(), t);\n            var n = this.get(\"model\"),\n              r = n.id,\n              i = this.get(\"type\");\n            r || ((r = jt(i)), (this.get(\"model\").id = r)), this.set(\"id\", r);\n            var o = t.group;\n            o && (o.set(\"item\", this), o.set(\"id\", r)),\n              this.init(),\n              this.draw();\n            var a = n.shape || n.type || (\"edge\" === i ? \"line\" : \"circle\"),\n              s = this.get(\"shapeFactory\");\n            if (s && s[a]) {\n              var u = s[a].options;\n              if (u && u.stateStyles) {\n                var h = this.get(\"styles\") || n.stateStyles;\n                (h = Object(c.deepMix)({}, u.stateStyles, h)),\n                  this.set(\"styles\", h);\n              }\n            }\n          }\n          return (\n            (t.prototype.calculateBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = ut(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.calculateCanvasBBox = function () {\n              var t = this.get(\"keyShape\"),\n                e = this.get(\"group\"),\n                n = ut(t, e);\n              return (\n                (n.x = n.minX),\n                (n.y = n.minY),\n                (n.width = n.maxX - n.minX),\n                (n.height = n.maxY - n.minY),\n                (n.centerX = (n.minX + n.maxX) / 2),\n                (n.centerY = (n.minY + n.maxY) / 2),\n                n\n              );\n            }),\n            (t.prototype.drawInner = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"group\"),\n                n = this.get(\"model\");\n              e.clear();\n              var r = n.visible;\n              if ((void 0 === r || r || this.changeVisibility(r), t)) {\n                this.updatePosition(n);\n                var i = this.getShapeCfg(n),\n                  o = i.type,\n                  a = t.draw(o, i, e);\n                a &&\n                  (this.set(\"keyShape\", a),\n                  a.set(\"isKeyShape\", !0),\n                  a.set(\"draggable\", !0)),\n                  this.setOriginStyle(),\n                  this.set(\"currentShape\", o),\n                  this.restoreStates(t, o);\n              }\n            }),\n            (t.prototype.setOriginStyle = function () {\n              var t = this.get(\"group\").get(\"children\"),\n                e = this.getKeyShape(),\n                n = this,\n                r = e.get(\"name\");\n              if (this.get(\"originStyle\")) {\n                var i = this.getOriginStyle();\n                r && !i[r] && (i[r] = {});\n                var o = this.getCurrentStatesStyle();\n                Object(c.each)(t, function (t) {\n                  var e = t.get(\"name\"),\n                    a = t.attr();\n                  if (e && e !== r) {\n                    var s = o[e];\n                    i[e] || (i[e] = {}),\n                      s\n                        ? Object.keys(a).forEach(function (t) {\n                            var n = a[t];\n                            n !== s[t] && (i[e][t] = n);\n                          })\n                        : (i[e] =\n                            \"image\" !== t.get(\"type\")\n                              ? Object(c.clone)(a)\n                              : n.getShapeStyleByName(e));\n                  } else {\n                    var u = t.attr(),\n                      h = Object(f.a)(Object(f.a)({}, o), o[r]);\n                    Object.keys(u).forEach(function (t) {\n                      var e = u[t];\n                      h[t] !== e && (r ? (i[r][t] = e) : (i[t] = e));\n                    });\n                  }\n                }),\n                  i.path && delete i.path,\n                  i.matrix && delete i.matrix,\n                  i.x && delete i.x,\n                  i.y && delete i.y,\n                  i[r] && i[r].x && delete i[r].x,\n                  i[r] && i[r].y && delete i[r].y,\n                  n.set(\"originStyle\", i);\n              } else {\n                var a = {};\n                Object(c.each)(t, function (t) {\n                  var e = t.get(\"type\"),\n                    i = t.get(\"name\");\n                  if (i && i !== r)\n                    a[i] =\n                      \"image\" !== e\n                        ? Object(c.clone)(t.attr())\n                        : n.getShapeStyleByName(i);\n                  else {\n                    var o = n.getShapeStyleByName();\n                    if (\n                      (o.path && delete o.path, o.matrix && delete o.matrix, r)\n                    )\n                      if (i) a[r] = o;\n                      else {\n                        var s = jt(\"shape\");\n                        t.set(\"name\", s),\n                          (a[s] =\n                            \"image\" !== e\n                              ? Object(c.clone)(t.attr())\n                              : n.getShapeStyleByName(i));\n                      }\n                    else Object.assign(a, o);\n                  }\n                }),\n                  n.set(\"originStyle\", a);\n              }\n            }),\n            (t.prototype.restoreStates = function (t, e) {\n              var n = this,\n                r = n.get(\"states\");\n              Object(c.each)(r, function (r) {\n                t.setState(e, r, !0, n);\n              });\n            }),\n            (t.prototype.init = function () {\n              var t = Wt.getFactory(this.get(\"type\"));\n              this.set(\"shapeFactory\", t);\n            }),\n            (t.prototype.get = function (t) {\n              return this._cfg[t];\n            }),\n            (t.prototype.set = function (t, e) {\n              Object(c.isPlainObject)(t)\n                ? (this._cfg = Object(f.a)(Object(f.a)({}, this._cfg), t))\n                : (this._cfg[t] = e);\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (t.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"bboxCanvasCache\", null);\n            }),\n            (t.prototype.beforeDraw = function () {}),\n            (t.prototype.afterDraw = function () {}),\n            (t.prototype.afterUpdate = function () {}),\n            (t.prototype.draw = function () {\n              this.beforeDraw(), this.drawInner(), this.afterDraw();\n            }),\n            (t.prototype.getShapeStyleByName = function (t) {\n              var e,\n                n = this.get(\"group\");\n              if (\n                (e = t\n                  ? n.find(function (e) {\n                      return e.get(\"name\") === t;\n                    })\n                  : this.getKeyShape())\n              ) {\n                var r = {};\n                return (\n                  Object(c.each)(e.attr(), function (t, e) {\n                    \"img\" !== e && (r[e] = t);\n                  }),\n                  r\n                );\n              }\n              return {};\n            }),\n            (t.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\");\n              if (e) {\n                var n = t;\n                return (n.style = Object(f.a)(Object(f.a)({}, e), t.style)), n;\n              }\n              return t;\n            }),\n            (t.prototype.getStateStyle = function (t) {\n              var e = this.get(\"styles\");\n              return e && e[t];\n            }),\n            (t.prototype.getOriginStyle = function () {\n              return this.get(\"originStyle\");\n            }),\n            (t.prototype.getCurrentStatesStyle = function () {\n              var t = this,\n                e = {},\n                n = t.getStates();\n              return n && n.length\n                ? (Object(c.each)(t.getStates(), function (n) {\n                    e = Object.assign(e, t.getStateStyle(n));\n                  }),\n                  e)\n                : this.getOriginStyle();\n            }),\n            (t.prototype.setState = function (t, e) {\n              var n = this.get(\"states\"),\n                r = this.get(\"shapeFactory\"),\n                i = t,\n                o = t;\n              Object(c.isString)(e) &&\n                ((i = \"\".concat(t, \":\").concat(e)), (o = \"\".concat(t, \":\")));\n              var a = n;\n              if (Object(c.isBoolean)(e)) {\n                var s = n.indexOf(o);\n                if (e) {\n                  if (s > -1) return;\n                  n.push(i);\n                } else s > -1 && n.splice(s, 1);\n              } else if (Object(c.isString)(e)) {\n                var u = n.filter(function (t) {\n                  return t.includes(o);\n                });\n                u.length > 0 && this.clearStates(u),\n                  (a = a.filter(function (t) {\n                    return !t.includes(o);\n                  })).push(i),\n                  this.set(\"states\", a);\n              }\n              if (r) {\n                var h = this.get(\"model\").type;\n                r.setState(h, t, e, this);\n              }\n            }),\n            (t.prototype.clearStates = function (t) {\n              var e = this,\n                n = e.getStates(),\n                r = e.get(\"shapeFactory\"),\n                i = e.get(\"model\").type;\n              t || (t = n), Object(c.isString)(t) && (t = [t]);\n              var o = n.filter(function (e) {\n                return -1 === t.indexOf(e);\n              });\n              e.set(\"states\", o),\n                t.forEach(function (t) {\n                  r.setState(i, t, !1, e);\n                });\n            }),\n            (t.prototype.getContainer = function () {\n              return this.get(\"group\");\n            }),\n            (t.prototype.getKeyShape = function () {\n              return this.get(\"keyShape\");\n            }),\n            (t.prototype.getModel = function () {\n              return this.get(\"model\");\n            }),\n            (t.prototype.getType = function () {\n              return this.get(\"type\");\n            }),\n            (t.prototype.getID = function () {\n              return this.get(\"id\");\n            }),\n            (t.prototype.isItem = function () {\n              return !0;\n            }),\n            (t.prototype.getStates = function () {\n              return this.get(\"states\");\n            }),\n            (t.prototype.hasState = function (t) {\n              return this.getStates().indexOf(t) >= 0;\n            }),\n            (t.prototype.refresh = function () {\n              var t = this.get(\"model\");\n              this.updatePosition(t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (t.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = n.x,\n                a = n.y;\n              (t.x = isNaN(t.x) ? n.x : t.x), (t.y = isNaN(t.y) ? n.y : t.y);\n              var s = this.get(\"styles\");\n              if (t.stateStyles) {\n                var u = t.stateStyles;\n                Object(c.mix)(s, u), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                e\n                  ? this.updatePosition(t)\n                  : ((o === t.x && a === t.y) || this.updatePosition(t),\n                    this.updateShape()),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (t.prototype.updateShape = function () {\n              var t = this.get(\"shapeFactory\"),\n                e = this.get(\"model\"),\n                n = e.type;\n              if (t.shouldUpdate(n) && n === this.get(\"currentShape\")) {\n                var r = this.getShapeCfg(e);\n                t.baseUpdate(n, r, this), this.setOriginStyle();\n              } else this.draw();\n              this.restoreStates(t, n);\n            }),\n            (t.prototype.updatePosition = function (t) {\n              var e = this.get(\"model\"),\n                n = Object(c.isNil)(t.x) ? e.x : t.x,\n                r = Object(c.isNil)(t.y) ? e.y : t.y,\n                i = this.get(\"group\");\n              if (Object(c.isNil)(n) || Object(c.isNil)(r)) return !1;\n              (e.x = n), (e.y = r);\n              var o = i.getMatrix();\n              return (\n                (!o || o[6] !== n || o[7] !== r) &&\n                (i.resetMatrix(), I(i, { x: n, y: r }), this.clearCache(), !0)\n              );\n            }),\n            (t.prototype.getBBox = function () {\n              var t = this.get(\"bboxCache\");\n              return (\n                t || ((t = this.calculateBBox()), this.set(\"bboxCache\", t)), t\n              );\n            }),\n            (t.prototype.getCanvasBBox = function () {\n              var t = this.get(\"bboxCanvasCache\");\n              return (\n                t ||\n                  ((t = this.calculateCanvasBBox()),\n                  this.set(\"bboxCanvasCache\", t)),\n                t\n              );\n            }),\n            (t.prototype.toFront = function () {\n              this.get(\"group\").toFront();\n            }),\n            (t.prototype.toBack = function () {\n              this.get(\"group\").toBack();\n            }),\n            (t.prototype.show = function () {\n              this.changeVisibility(!0);\n            }),\n            (t.prototype.hide = function () {\n              this.changeVisibility(!1);\n            }),\n            (t.prototype.changeVisibility = function (t) {\n              var e = this.get(\"group\");\n              t ? e.show() : e.hide(), this.set(\"visible\", t);\n            }),\n            (t.prototype.isVisible = function () {\n              return this.get(\"visible\");\n            }),\n            (t.prototype.enableCapture = function (t) {\n              var e = this.get(\"group\");\n              e && e.set(\"capture\", t);\n            }),\n            (t.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            t\n          );\n        })(),\n        Vt = { source: \"start\", target: \"end\" },\n        Gt = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                type: \"edge\",\n                sourceNode: null,\n                targetNode: null,\n                startPoint: null,\n                endPoint: null,\n                linkCenter: !1,\n              };\n            }),\n            (e.prototype.setEnd = function (t, e) {\n              var n = Vt[t] + \"Point\",\n                r = t + \"Node\",\n                i = this.get(r);\n              i && !i.destroyed && i.removeEdge(this),\n                Object(c.isPlainObject)(e)\n                  ? (this.set(n, e), this.set(r, null))\n                  : (e.addEdge(this), this.set(r, e), this.set(n, null));\n            }),\n            (e.prototype.getLinkPoint = function (t, e, n) {\n              var r = Vt[t] + \"Point\",\n                i = t + \"Node\",\n                o = this.get(r);\n              if (!o) {\n                var a = this.get(i),\n                  s = t + \"Anchor\",\n                  u = this.getPrePoint(t, n),\n                  h = e[s];\n                Object(c.isNil)(h) || (o = a.getLinkPointByAnchor(h)),\n                  (o = o || a.getLinkPoint(u)),\n                  Object(c.isNil)(o.index) ||\n                    this.set(\"\".concat(t, \"AnchorIndex\"), o.index);\n              }\n              return o;\n            }),\n            (e.prototype.getPrePoint = function (t, e) {\n              if (e && e.length) return e[\"source\" === t ? 0 : e.length - 1];\n              var n = \"source\" === t ? \"target\" : \"source\";\n              return this.getEndPoint(n);\n            }),\n            (e.prototype.getEndPoint = function (t) {\n              var e = t + \"Node\",\n                n = Vt[t] + \"Point\",\n                r = this.get(e);\n              return r ? r.get(\"model\") : this.get(n);\n            }),\n            (e.prototype.getControlPointsByCenter = function (t) {\n              var e = this.getEndPoint(\"source\"),\n                n = this.getEndPoint(\"target\"),\n                r = this.get(\"shapeFactory\"),\n                i = t.type;\n              return r.getControlPoints(i, { startPoint: e, endPoint: n });\n            }),\n            (e.prototype.getEndCenter = function (t) {\n              var e = t + \"Node\",\n                n = Vt[t] + \"Point\",\n                r = this.get(e);\n              if (r) {\n                var i = r.getBBox();\n                return { x: i.centerX, y: i.centerY };\n              }\n              return this.get(n);\n            }),\n            (e.prototype.init = function () {\n              t.prototype.init.call(this),\n                this.setSource(this.get(\"source\")),\n                this.setTarget(this.get(\"target\"));\n            }),\n            (e.prototype.getShapeCfg = function (e) {\n              var n = this.get(\"linkCenter\"),\n                r = t.prototype.getShapeCfg.call(this, e);\n              if (n)\n                (r.startPoint = this.getEndCenter(\"source\")),\n                  (r.endPoint = this.getEndCenter(\"target\"));\n              else {\n                var i = r.controlPoints || this.getControlPointsByCenter(r);\n                (r.startPoint = this.getLinkPoint(\"source\", e, i)),\n                  (r.endPoint = this.getLinkPoint(\"target\", e, i));\n              }\n              return (\n                (r.sourceNode = this.get(\"sourceNode\")),\n                (r.targetNode = this.get(\"targetNode\")),\n                r\n              );\n            }),\n            (e.prototype.getModel = function () {\n              var t = this.get(\"model\"),\n                e = this.get(\"source\".concat(\"Node\")),\n                n = this.get(\"target\".concat(\"Node\"));\n              return (\n                e\n                  ? delete t[\"source\".concat(\"Node\")]\n                  : (t.source = this.get(\"start\".concat(\"Point\"))),\n                n\n                  ? delete t[\"target\".concat(\"Node\")]\n                  : (t.target = this.get(\"end\".concat(\"Point\"))),\n                Object(c.isString)(t.source) ||\n                  Object(c.isPlainObject)(t.source) ||\n                  (t.source = t.source.getID()),\n                Object(c.isString)(t.target) ||\n                  Object(c.isPlainObject)(t.target) ||\n                  (t.target = t.target.getID()),\n                t\n              );\n            }),\n            (e.prototype.setSource = function (t) {\n              this.setEnd(\"source\", t), this.set(\"source\", t);\n            }),\n            (e.prototype.setTarget = function (t) {\n              this.setEnd(\"target\", t), this.set(\"target\", t);\n            }),\n            (e.prototype.getSource = function () {\n              return this.get(\"source\");\n            }),\n            (e.prototype.getTarget = function () {\n              return this.get(\"target\");\n            }),\n            (e.prototype.updatePosition = function () {\n              return !1;\n            }),\n            (e.prototype.update = function (t, e) {\n              void 0 === e && (e = !1);\n              var n = this.get(\"model\"),\n                r = n.visible,\n                i = t.visible;\n              r !== i && void 0 !== i && this.changeVisibility(i);\n              var o = this.get(\"styles\");\n              if (t.stateStyles) {\n                var a = t.stateStyles;\n                Object(c.mix)(o, a), delete t.stateStyles;\n              }\n              Object.assign(n, t),\n                this.updateShape(),\n                this.afterUpdate(),\n                this.clearCache();\n            }),\n            (e.prototype.destroy = function () {\n              var e = this.get(\"source\".concat(\"Node\")),\n                n = this.get(\"target\".concat(\"Node\"));\n              e && !e.destroyed && e.removeEdge(this),\n                n && !n.destroyed && n.removeEdge(this),\n                t.prototype.destroy.call(this);\n            }),\n            e\n          );\n        })(qt),\n        Ht = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getNearestPoint = function (t, e) {\n              for (\n                var n = 0, r = t[0], i = C(t[0], e), o = 0;\n                o < t.length;\n                o++\n              ) {\n                var a = t[o],\n                  s = C(a, e);\n                s < i && ((r = a), (i = s), (n = o));\n              }\n              return (r.anchorIndex = n), r;\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"node\", edges: [] };\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getInEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"target\") === t;\n              });\n            }),\n            (e.prototype.getOutEdges = function () {\n              var t = this;\n              return this.get(\"edges\").filter(function (e) {\n                return e.get(\"source\") === t;\n              });\n            }),\n            (e.prototype.getNeighbors = function (t) {\n              var e = this,\n                n = this.get(\"edges\");\n              if (\"target\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getSource() === e;\n                  })\n                  .map(function (t) {\n                    return t.getTarget();\n                  });\n              }\n              if (\"source\" === t) {\n                return n\n                  .filter(function (t) {\n                    return t.getTarget() === e;\n                  })\n                  .map(function (t) {\n                    return t.getSource();\n                  });\n              }\n              return n.map(function (t) {\n                return t.getSource() === e ? t.getTarget() : t.getSource();\n              });\n            }),\n            (e.prototype.getLinkPointByAnchor = function (t) {\n              return this.getAnchorPoints()[t];\n            }),\n            (e.prototype.getLinkPoint = function (t) {\n              var e,\n                n,\n                r = this.get(\"keyShape\").get(\"type\"),\n                i = this.get(\"type\"),\n                o = this.getBBox();\n              \"combo\" === i\n                ? ((e = o.centerX || (o.maxX + o.minX) / 2),\n                  (n = o.centerY || (o.maxY + o.minY) / 2))\n                : ((e = o.centerX), (n = o.centerY));\n              var a,\n                s = this.getAnchorPoints();\n              switch (r) {\n                case \"circle\":\n                  a = w({ x: e, y: n, r: o.width / 2 }, t);\n                  break;\n                case \"ellipse\":\n                  a = O({ x: e, y: n, rx: o.width / 2, ry: o.height / 2 }, t);\n                  break;\n                default:\n                  a = S(o, t);\n              }\n              var c = a;\n              return (\n                s.length && (c || (c = t), (c = this.getNearestPoint(s, c))),\n                c || (c = { x: e, y: n }),\n                c\n              );\n            }),\n            (e.prototype.getAnchorPoints = function () {\n              var t = this.get(\"anchorPointsCache\");\n              if (!t) {\n                t = [];\n                var e = this.get(\"shapeFactory\"),\n                  n = this.getBBox(),\n                  r = this.get(\"model\"),\n                  i = this.getShapeCfg(r),\n                  o = r.type,\n                  a = e.getAnchorPoints(o, i) || [];\n                Object(c.each)(a, function (e, r) {\n                  var i = {\n                    x: n.minX + e[0] * n.width,\n                    y: n.minY + e[1] * n.height,\n                    anchorIndex: r,\n                  };\n                  t.push(i);\n                }),\n                  this.set(\"anchorPointsCache\", t);\n              }\n              return t;\n            }),\n            (e.prototype.addEdge = function (t) {\n              this.get(\"edges\").push(t);\n            }),\n            (e.prototype.lock = function () {\n              this.set(\"locked\", !0);\n            }),\n            (e.prototype.unlock = function () {\n              this.set(\"locked\", !1);\n            }),\n            (e.prototype.hasLocked = function () {\n              return this.get(\"locked\");\n            }),\n            (e.prototype.removeEdge = function (t) {\n              var e = this.getEdges(),\n                n = e.indexOf(t);\n              n > -1 && e.splice(n, 1);\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null), this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              if (!t) return !1;\n              var e = !Object(c.isNil)(t.x),\n                n = !Object(c.isNil)(t.y),\n                r = Object.keys(t);\n              return (1 === r.length && (e || n)) || (2 === r.length && e && n);\n            }),\n            e\n          );\n        })(qt),\n        Ut = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return { type: \"combo\", nodes: [], edges: [], combos: [] };\n            }),\n            (e.prototype.getShapeCfg = function (t) {\n              var e = this.get(\"styles\"),\n                n = this.get(\"bbox\");\n              if (e && n) {\n                var r = t,\n                  i = {\n                    r:\n                      Math.hypot(n.height, n.width) / 2 ||\n                      nt.defaultCombo.size[0] / 2,\n                    width: n.width || nt.defaultCombo.size[0],\n                    height: n.height || nt.defaultCombo.size[1],\n                  };\n                r.style = Object(f.a)(\n                  Object(f.a)(Object(f.a)({}, e), t.style),\n                  i,\n                );\n                var o = t.padding || nt.defaultCombo.padding;\n                return (\n                  Object(c.isNumber)(o)\n                    ? ((i.r += o), (i.width += 2 * o), (i.height += 2 * o))\n                    : ((i.r += o[0]),\n                      (i.width += o[1] + o[3] || 2 * o[1]),\n                      (i.height += o[0] + o[2] || 2 * o[0])),\n                  this.set(\"sizeCache\", i),\n                  r\n                );\n              }\n              return t;\n            }),\n            (e.prototype.calculateCanvasBBox = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"keyShape\"),\n                  e = this.get(\"group\"),\n                  n = ut(t, e);\n                (n.centerX = (n.minX + n.maxX) / 2),\n                  (n.centerY = (n.minY + n.maxY) / 2);\n                var r = this.get(\"sizeCache\"),\n                  i = this.get(\"bboxCache\") || {},\n                  o = i.x,\n                  a = i.x;\n                if (r)\n                  (r.width = Math.max(r.width, n.width)),\n                    (r.height = Math.max(r.height, n.height)),\n                    \"circle\" === t.get(\"type\")\n                      ? ((n.width = 2 * r.r), (n.height = 2 * r.r))\n                      : ((n.width = r.width), (n.height = r.height)),\n                    (n.minX = n.centerX - n.width / 2),\n                    (n.minY = n.centerY - n.height / 2),\n                    (n.maxX = n.centerX + n.width / 2),\n                    (n.maxY = n.centerY + n.height / 2);\n                else\n                  (n.width = n.maxX - n.minX),\n                    (n.height = n.maxY - n.minY),\n                    (n.centerX = (n.minX + n.maxX) / 2),\n                    (n.centerY = (n.minY + n.maxY) / 2);\n                return (\n                  (n.x = n.minX),\n                  (n.y = n.minY),\n                  (n.x === o && n.y === a) ||\n                    this.set(\"anchorPointsCache\", null),\n                  n\n                );\n              }\n            }),\n            (e.prototype.getChildren = function () {\n              return { nodes: this.getNodes(), combos: this.getCombos() };\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.addChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.addNode(t);\n                  break;\n                case \"combo\":\n                  this.addCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.addCombo = function (t) {\n              return this.get(\"combos\").push(t), !0;\n            }),\n            (e.prototype.addNode = function (t) {\n              return this.get(\"nodes\").push(t), !0;\n            }),\n            (e.prototype.removeChild = function (t) {\n              switch (t.getType()) {\n                case \"node\":\n                  this.removeNode(t);\n                  break;\n                case \"combo\":\n                  this.removeCombo(t);\n                  break;\n                default:\n                  return (\n                    console.warn(\n                      \"Only node or combo items are allowed to be added into a combo\",\n                    ),\n                    !1\n                  );\n              }\n              return !0;\n            }),\n            (e.prototype.removeCombo = function (t) {\n              if (t) {\n                var e = this.getCombos(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.removeNode = function (t) {\n              if (t) {\n                var e = this.getNodes(),\n                  n = e.indexOf(t);\n                return n > -1 && (e.splice(n, 1), !0);\n              }\n            }),\n            (e.prototype.isOnlyMove = function (t) {\n              return !1;\n            }),\n            (e.prototype.getBBox = function () {\n              return (\n                this.set(\"bboxCanvasCache\", null), this.calculateCanvasBBox()\n              );\n            }),\n            (e.prototype.clearCache = function () {\n              this.set(\"bboxCache\", null),\n                this.set(\"bboxCanvasCache\", null),\n                this.set(\"anchorPointsCache\", null);\n            }),\n            (e.prototype.destroy = function () {\n              if (!this.destroyed) {\n                var t = this.get(\"animate\"),\n                  e = this.get(\"group\");\n                t && e.stopAnimate(),\n                  this.clearCache(),\n                  this.set(\"sizeCache\", null),\n                  this.set(\"bbox\", null),\n                  e.remove(),\n                  (this._cfg = null),\n                  (this.destroyed = !0);\n              }\n            }),\n            e\n          );\n        })(Ht),\n        Zt = (function () {\n          function t(t) {\n            (this.graph = t), (this.destroyed = !1);\n          }\n          return (\n            (t.prototype.addItem = function (t, e) {\n              var n = this.graph,\n                r = \"vedge\" === t ? \"edge\" : t,\n                i = n.get(\"\".concat(r, \"Group\")) || n.get(\"group\"),\n                o = Object(c.upperFirst)(r),\n                a = null,\n                s = n.get(r + Object(c.upperFirst)(\"stateStyles\")) || {},\n                u = n.get(\"default\" + o);\n              e.stateStyles && (s = e.stateStyles),\n                u &&\n                  Object(c.each)(u, function (t, n) {\n                    Object(c.isObject)(t) && !Object(c.isArray)(t)\n                      ? (e[n] = Object(c.deepMix)({}, t, e[n]))\n                      : Object(c.isArray)(t)\n                      ? (e[n] = e[n] || Object(c.clone)(u[n]))\n                      : (e[n] = e[n] || u[n]);\n                  });\n              var h = n.get(r + \"Mapper\");\n              if (h) {\n                var l = h(e);\n                l.stateStyles && ((s = l.stateStyles), delete l.stateStyles),\n                  Object(c.each)(l, function (t, n) {\n                    Object(c.isObject)(t) && !Object(c.isArray)(t)\n                      ? (e[n] = Object(c.deepMix)({}, e[n], t))\n                      : (e[n] = l[n] || e[n]);\n                  });\n              }\n              if (\n                (n.emit(\"beforeadditem\", { type: t, model: e }),\n                \"edge\" === t || \"vedge\" === t)\n              ) {\n                var f = void 0,\n                  d = void 0;\n                if (\n                  ((f = e.source),\n                  (d = e.target),\n                  f && Object(c.isString)(f) && (f = n.findById(f)),\n                  d && Object(c.isString)(d) && (d = n.findById(d)),\n                  !f || !d)\n                )\n                  return void console.warn(\n                    \"The source or target node of edge \".concat(\n                      e.id,\n                      \" does not exist!\",\n                    ),\n                  );\n                f.getType && \"combo\" === f.getType() && (e.isComboEdge = !0),\n                  d.getType && \"combo\" === d.getType() && (e.isComboEdge = !0),\n                  (a = new Gt({\n                    model: e,\n                    source: f,\n                    target: d,\n                    styles: s,\n                    linkCenter: n.get(\"linkCenter\"),\n                    group: i.addGroup(),\n                  }));\n              } else if (\"node\" === t)\n                a = new Ht({ model: e, styles: s, group: i.addGroup() });\n              else if (\"combo\" === t) {\n                var p = e.children,\n                  g = bt(p, n);\n                isNaN(g.x)\n                  ? isNaN(e.x) && (e.x = 100 * Math.random())\n                  : (e.x = g.x),\n                  isNaN(g.y)\n                    ? isNaN(e.y) && (e.y = 100 * Math.random())\n                    : (e.y = g.y);\n                var v = i.addGroup();\n                v.setZIndex(e.depth);\n                var y = (a = new Ut({\n                  model: e,\n                  styles: s,\n                  bbox: e.collapsed ? bt([], n) : g,\n                  group: v,\n                })).getModel();\n                (p || []).forEach(function (t) {\n                  var e = n.findById(t.id);\n                  a.addChild(e), (t.depth = y.depth + 2);\n                }),\n                  e.collapsed &&\n                    setTimeout(function () {\n                      n.collapseCombo(a);\n                    }, 16);\n              }\n              if (a)\n                return (\n                  n.get(\"\".concat(t, \"s\")).push(a),\n                  (n.get(\"itemMap\")[a.get(\"id\")] = a),\n                  n.emit(\"afteradditem\", { item: a, model: e }),\n                  a\n                );\n            }),\n            (t.prototype.updateItem = function (t, e) {\n              var n,\n                r,\n                i = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = i.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var o = \"\";\n                t.getType && (o = t.getType());\n                var a = i.get(o + \"Mapper\"),\n                  s = t.getModel(),\n                  u = t.isOnlyMove(e);\n                if (a) {\n                  var h = a(Object(c.deepMix)({}, s, e)),\n                    l = Object(c.deepMix)({}, s, h, e);\n                  h.stateStyles &&\n                    (t.set(\"styles\", l.stateStyles), delete l.stateStyles),\n                    Object(c.each)(l, function (t, n) {\n                      e[n] = t;\n                    });\n                } else\n                  Object(c.each)(e, function (t, n) {\n                    s[n] &&\n                      Object(c.isObject)(t) &&\n                      !Object(c.isArray)(t) &&\n                      (e[n] = Object(f.a)(Object(f.a)({}, s[n]), e[n]));\n                  });\n                if (\n                  (i.emit(\"beforeupdateitem\", { item: t, cfg: e }),\n                  \"edge\" === o)\n                ) {\n                  if (e.source) {\n                    var d = e.source;\n                    Object(c.isString)(d) && (d = i.findById(d)),\n                      t.setSource(d);\n                  }\n                  if (e.target) {\n                    var p = e.target;\n                    Object(c.isString)(p) && (p = i.findById(p)),\n                      t.setTarget(p);\n                  }\n                  t.update(e);\n                }\n                if (\"node\" === o || \"combo\" === o) {\n                  t.update(e, u);\n                  var g = t.getEdges(),\n                    v = xt(e);\n                  if (v && \"node\" === o)\n                    Object(c.each)(g, function (t) {\n                      t.refresh();\n                    });\n                  else if (v && \"combo\" === o) {\n                    var y = t.get(\"shapeFactory\"),\n                      m = s.type || \"circle\";\n                    (\n                      void 0 === s.animate || void 0 === e.animate\n                        ? null ===\n                            (r =\n                              null === (n = y[m]) || void 0 === n\n                                ? void 0\n                                : n.options) || void 0 === r\n                          ? void 0\n                          : r.animate\n                        : s.animate || e.animate\n                    )\n                      ? setTimeout(function () {\n                          if (t && !t.destroyed) {\n                            var e = t.getKeyShape();\n                            e &&\n                              !e.destroyed &&\n                              Object(c.each)(g, function (t) {\n                                t && !t.destroyed && t.refresh();\n                              });\n                          }\n                        }, 201)\n                      : Object(c.each)(g, function (t) {\n                          t.refresh();\n                        });\n                  }\n                }\n                i.emit(\"afterupdateitem\", { item: t, cfg: e });\n              }\n            }),\n            (t.prototype.updateCombo = function (t, e) {\n              var n,\n                r,\n                i = this,\n                o = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = o.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var a = t.getModel(),\n                  s = bt(a.collapsed ? [] : e, o);\n                t.set(\"bbox\", s), t.update({ x: s.x, y: s.y });\n                var u = t.get(\"shapeFactory\"),\n                  h = a.type || \"circle\";\n                (\n                  void 0 === a.animate\n                    ? null ===\n                        (r =\n                          null === (n = u[h]) || void 0 === n\n                            ? void 0\n                            : n.options) || void 0 === r\n                      ? void 0\n                      : r.animate\n                    : a.animate\n                )\n                  ? setTimeout(function () {\n                      if (t && !t.destroyed) {\n                        var e = t.getKeyShape();\n                        e &&\n                          !e.destroyed &&\n                          (t.getShapeCfg(a), i.updateComboEdges(t));\n                      }\n                    }, 201)\n                  : this.updateComboEdges(t);\n              }\n            }),\n            (t.prototype.updateComboEdges = function (t) {\n              for (var e = t.getEdges() || [], n = 0; n < e.length; n++) {\n                var r = e[n];\n                if (r && !r.destroyed) {\n                  var i = r.get(\"shapeFactory\"),\n                    o = r.getShapeCfg(r.getModel()),\n                    a = r.getContainer();\n                  a.clear();\n                  var s = i.draw(o.type, o, a);\n                  r.set(\"keyShape\", s),\n                    s.set(\"isKeyShape\", !0),\n                    s.set(\"draggable\", !0),\n                    r.setOriginStyle();\n                }\n              }\n            }),\n            (t.prototype.collapseCombo = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.hideItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  e.hideItem(t);\n                });\n            }),\n            (t.prototype.expandCombo = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t));\n              var n = t.getChildren();\n              n.nodes.forEach(function (t) {\n                e.showItem(t);\n              }),\n                n.combos.forEach(function (t) {\n                  t.getModel().collapsed ? t.show() : e.showItem(t);\n                });\n            }),\n            (t.prototype.removeItem = function (t) {\n              var e = this,\n                n = this.graph;\n              if (\n                (Object(c.isString)(t) && (t = n.findById(t)),\n                t && !t.destroyed)\n              ) {\n                var r = Object(c.clone)(t.getModel());\n                n.emit(\"beforeremoveitem\", { item: r });\n                var i = \"\";\n                t.getType && (i = t.getType());\n                var o = n.get(\"\".concat(i, \"s\")),\n                  a = o.indexOf(t);\n                if ((a > -1 && o.splice(a, 1), \"edge\" === i)) {\n                  var s = n.get(\"v\".concat(i, \"s\")),\n                    u = s.indexOf(t);\n                  u > -1 && s.splice(u, 1);\n                }\n                var h = t.get(\"id\");\n                delete n.get(\"itemMap\")[h];\n                var l = n.get(\"comboTrees\"),\n                  f = t.get(\"id\");\n                if (\"node\" === i) {\n                  var d = t.getModel().comboId;\n                  if (l && d) {\n                    var p = l,\n                      g = !1;\n                    l.forEach(function (t) {\n                      g ||\n                        dt(t, function (t) {\n                          if (t.id === f && p) {\n                            var e = p.indexOf(t);\n                            return p.splice(e, 1), (g = !0), !1;\n                          }\n                          return (p = t.children), !0;\n                        });\n                    });\n                  }\n                  for (var v = (x = t.getEdges()).length - 1; v >= 0; v--)\n                    n.removeItem(x[v], !1);\n                  d && n.updateCombo(d);\n                } else if (\"combo\" === i) {\n                  var y,\n                    m = t.getModel().parentId,\n                    b = !1;\n                  (l || []).forEach(function (t) {\n                    b ||\n                      dt(t, function (t) {\n                        return t.id !== f || ((y = t), (b = !0), !1);\n                      });\n                  }),\n                    (y.removed = !0),\n                    y &&\n                      y.children &&\n                      y.children.forEach(function (t) {\n                        e.removeItem(t.id);\n                      });\n                  var x;\n                  for (v = (x = t.getEdges()).length; v >= 0; v--)\n                    n.removeItem(x[v], !1);\n                  m && n.updateCombo(m);\n                }\n                t.destroy(), n.emit(\"afterremoveitem\", { item: r });\n              }\n            }),\n            (t.prototype.setItemState = function (t, e, n) {\n              var r = this.graph,\n                i = e;\n              Object(c.isString)(n) && (i = \"\".concat(e, \":\").concat(n)),\n                (t.hasState(i) === n && n) ||\n                  (Object(c.isString)(n) && t.hasState(i)) ||\n                  (r.emit(\"beforeitemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }),\n                  t.setState(e, n),\n                  r.autoPaint(),\n                  r.emit(\"afteritemstatechange\", {\n                    item: t,\n                    state: i,\n                    enabled: n,\n                  }));\n            }),\n            (t.prototype.priorityState = function (t, e) {\n              var n = this.graph,\n                r = t;\n              Object(c.isString)(t) && (r = n.findById(t)),\n                this.setItemState(r, e, !1),\n                this.setItemState(r, e, !0);\n            }),\n            (t.prototype.clearItemStates = function (t, e) {\n              var n = this.graph;\n              Object(c.isString)(t) && (t = n.findById(t)),\n                n.emit(\"beforeitemstatesclear\", { item: t, states: e }),\n                t.clearStates(e),\n                n.emit(\"afteritemstatesclear\", { item: t, states: e });\n            }),\n            (t.prototype.refreshItem = function (t) {\n              var e = this.graph;\n              Object(c.isString)(t) && (t = e.findById(t)),\n                e.emit(\"beforeitemrefresh\", { item: t }),\n                t.refresh(),\n                e.emit(\"afteritemrefresh\", { item: t });\n            }),\n            (t.prototype.addCombos = function (t, e) {\n              var n = this,\n                r = this.graph;\n              (t || []).forEach(function (t) {\n                pt(t, function (t) {\n                  var r;\n                  return (\n                    e.forEach(function (e) {\n                      e.id === t.id &&\n                        ((e.children = t.children),\n                        (e.depth = t.depth),\n                        (r = e));\n                    }),\n                    r && n.addItem(\"combo\", r),\n                    !0\n                  );\n                });\n              });\n              var i = r.get(\"comboGroup\");\n              i && i.sort();\n            }),\n            (t.prototype.changeItemVisibility = function (t, e) {\n              var n = this,\n                r = this.graph;\n              if ((Object(c.isString)(t) && (t = r.findById(t)), t)) {\n                if (\n                  (r.emit(\"beforeitemvisibilitychange\", {\n                    item: t,\n                    visible: e,\n                  }),\n                  t.changeVisibility(e),\n                  t.getType && \"node\" === t.getType())\n                ) {\n                  var i = t.getEdges();\n                  Object(c.each)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                } else if (t.getType && \"combo\" === t.getType()) {\n                  var o = r.get(\"comboTrees\"),\n                    a = t.get(\"id\"),\n                    s = [],\n                    u = !1;\n                  (o || []).forEach(function (t) {\n                    u ||\n                      (t.children &&\n                        0 !== t.children.length &&\n                        dt(t, function (t) {\n                          return t.id !== a || ((s = t.children), (u = !0), !1);\n                        }));\n                  }),\n                    s &&\n                      (!e || (e && !t.getModel().collapsed)) &&\n                      s.forEach(function (t) {\n                        var i = r.findById(t.id);\n                        n.changeItemVisibility(i, e);\n                      });\n                  i = t.getEdges();\n                  Object(c.each)(i, function (t) {\n                    (!e ||\n                      (t.get(\"source\").isVisible() &&\n                        t.get(\"target\").isVisible())) &&\n                      n.changeItemVisibility(t, e);\n                  });\n                }\n                return (\n                  r.emit(\"afteritemvisibilitychange\", { item: t, visible: e }),\n                  t\n                );\n              }\n              console.warn(\"The item to be shown or hidden does not exist!\");\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null), (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Kt = null,\n        $t = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.cachedStates = { enabled: {}, disabled: {} }),\n              (this.destroyed = !1);\n          }\n          return (\n            (t.checkCache = function (t, e, n) {\n              if (n[e]) {\n                var r = n[e].indexOf(t);\n                r >= 0 && n[e].splice(r, 1);\n              }\n            }),\n            (t.cacheState = function (t, e, n) {\n              n[e] || (n[e] = []), n[e].push(t);\n            }),\n            (t.prototype.updateState = function (e, n, r) {\n              var i = this,\n                o = t.checkCache,\n                a = t.cacheState;\n              if (!e.destroyed) {\n                var s = this.cachedStates,\n                  c = s.enabled,\n                  u = s.disabled;\n                r ? (o(e, n, u), a(e, n, c)) : (o(e, n, c), a(e, n, u)),\n                  Kt && clearTimeout(Kt),\n                  (Kt = setTimeout(function () {\n                    (Kt = null), i.updateGraphStates();\n                  }, 16));\n              }\n            }),\n            (t.prototype.updateStates = function (t, e, n) {\n              var r = this;\n              Object(c.isString)(e)\n                ? this.updateState(t, e, n)\n                : e.forEach(function (e) {\n                    r.updateState(t, e, n);\n                  });\n            }),\n            (t.prototype.updateGraphStates = function () {\n              var t = this.graph.get(\"states\"),\n                e = this.cachedStates;\n              Object(c.each)(e.disabled, function (e, n) {\n                t[n] &&\n                  (t[n] = t[n].filter(function (t) {\n                    return e.indexOf(t) < 0 && !e.destroyed;\n                  }));\n              }),\n                Object(c.each)(e.enabled, function (e, n) {\n                  if (t[n]) {\n                    var r = {};\n                    t[n].forEach(function (t) {\n                      t.destroyed || (r[t.get(\"id\")] = !0);\n                    }),\n                      e.forEach(function (e) {\n                        if (!e.destroyed) {\n                          var i = e.get(\"id\");\n                          r[i] || ((r[i] = !0), t[n].push(e));\n                        }\n                      });\n                  } else t[n] = e;\n                }),\n                this.graph.emit(\"graphstatechange\", { states: t }),\n                (this.cachedStates = { enabled: {}, disabled: {} });\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                (this.cachedStates = null),\n                Kt && clearTimeout(Kt),\n                (Kt = null),\n                (this.destroyed = !0);\n            }),\n            t\n          );\n        })(),\n        Qt = n(28),\n        Jt = function (t, e) {\n          return t && e\n            ? t.replace(/\\\\?\\{([^{}]+)\\}/g, function (t, n) {\n                if (\"\\\\\" === t.charAt(0)) return t.slice(1);\n                var r = e[n];\n                return 0 === r && (r = \"0\"), r || \"\";\n              })\n            : t;\n        },\n        te = function (t) {\n          var e = [];\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \".concat(t.length),\n            );\n          for (var n = 0, r = t; n < r.length; n++) {\n            var i = r[n],\n              o = i.x,\n              a = i.y;\n            e.push(o), e.push(a);\n          }\n          var s = Object(Qt.a)(e);\n          return s.unshift([\"M\", t[0].x, t[0].y]), s;\n        },\n        ee = function (t, e, n, r) {\n          void 0 === n && (n = 0), void 0 === r && (r = 0);\n          var i = { x: (1 - n) * t.x + n * e.x, y: (1 - n) * t.y + n * e.y },\n            o = [0, 0];\n          g.c.normalize(o, [e.x - t.x, e.y - t.y]),\n            (o && (o[0] || o[1])) || (o = [0, 0]);\n          var a = [-o[1] * r, o[0] * r];\n          return (i.x += a[0]), (i.y += a[1]), i;\n        },\n        ne = function (t, e) {\n          var n = t.length;\n          if (!n) return \"\";\n          for (var r = \"\", i = 0; i < n; i++) {\n            var o = t[i];\n            r += Jt(0 === i ? \"M{x} {y}\" : \"L{x} {y}\", o);\n          }\n          return e && (r += \"Z\"), r;\n        },\n        re = function (t) {\n          var e = [];\n          return (\n            t.forEach(function (t) {\n              if (\"A\" !== t[0])\n                for (var n = 1; n < t.length; n += 2) e.push([t[n], t[n + 1]]);\n              else {\n                var r = t.length;\n                e.push([t[r - 2], t[r - 1]]);\n              }\n            }),\n            e\n          );\n        },\n        ie = function (t) {\n          if (t.length < 2)\n            throw new Error(\n              \"point length must largn than 2, now it's \".concat(t.length),\n            );\n          var e = t[0],\n            n = t[1],\n            r = t[t.length - 1],\n            i = t[t.length - 2];\n          t.unshift(r), t.unshift(i), t.push(e), t.push(n);\n          for (var o = [], a = 1; a < t.length - 2; a += 1) {\n            var s = t[a - 1].x,\n              c = t[a - 1].y,\n              u = t[a].x,\n              h = t[a].y,\n              l = t[a + 1].x,\n              f = t[a + 1].y,\n              d = u + (l - s) / 6,\n              p = h + (f - c) / 6,\n              g = l - ((a !== t.length - 2 ? t[a + 2].x : l) - u) / 6,\n              v = f - ((a !== t.length - 2 ? t[a + 2].y : f) - h) / 6;\n            o.push([\"C\", d, p, g, v, l, f]);\n          }\n          return o.unshift([\"M\", r.x, r.y]), o;\n        },\n        oe = function (t, e) {\n          return g.c.scale([0, 0], g.c.normalize([0, 0], t), e);\n        },\n        ae = function (t, e) {\n          var n = [t[1] - e[1], e[0] - t[0]],\n            r = Math.sqrt(n[0] * n[0] + n[1] * n[1]);\n          if (0 === r) throw new Error(\"p0 should not be equal to p1\");\n          return [n[0] / r, n[1] / r];\n        },\n        se = function (t, e) {\n          return [e[0] - t[0], e[1] - t[1]];\n        };\n      function ce(t, e) {\n        if (!t || t.length < 1) return \"\";\n        if (1 === t.length)\n          return (function (t) {\n            var n = [t[0][0], t[0][1] - e],\n              r = [t[0][0], t[0][1] + e];\n            return \"M \"\n              .concat(n, \" A \")\n              .concat(e, \",\")\n              .concat(e, \",0,0,0,\")\n              .concat(r, \" A \")\n              .concat(e, \",\")\n              .concat(e, \",0,0,0,\")\n              .concat(n);\n          })(t);\n        if (2 === t.length)\n          return (function (t) {\n            var n = g.c.scale([0, 0], ae(t[0], t[1]), e),\n              r = g.c.scale([0, 0], n, -1),\n              i = g.c.add([0, 0], t[0], n),\n              o = g.c.add([0, 0], t[1], n),\n              a = g.c.add([0, 0], t[1], r),\n              s = g.c.add([0, 0], t[0], r);\n            return \"M \"\n              .concat(i, \" L \")\n              .concat(o, \" A \")\n              .concat([e, e, \"0,0,0\", a].join(\",\"), \" L \")\n              .concat(s, \" A \")\n              .concat([e, e, \"0,0,0\", i].join(\",\"));\n          })(t);\n        for (var n = new Array(t.length), r = 0; r < n.length; ++r) {\n          var i = 0 === r ? t[t.length - 1] : t[r - 1],\n            o = t[r],\n            a = g.c.scale([0, 0], ae(i, o), e);\n          n[r] = [g.c.add([0, 0], i, a), g.c.add([0, 0], o, a)];\n        }\n        var s = \"A \".concat([e, e, \"0,0,0,\"].join(\",\"));\n        return (n = n.map(function (t, e) {\n          var r = \"\";\n          return (\n            0 === e && (r = \"M \".concat(n[n.length - 1][1], \" \")),\n            (r += \"\".concat(s + t[0], \" L \").concat(t[1]))\n          );\n        })).join(\" \");\n      }\n      function ue(t, e) {\n        var n,\n          r,\n          i,\n          o = t.length;\n        if (!t || o < 1) return \"\";\n        if (1 === o)\n          return (\n            (r = [(n = t)[0][0], n[0][1] - e]),\n            (i = [n[0][0], n[0][1] + e]),\n            \"M \"\n              .concat(r, \" A \")\n              .concat([e, e, \"0,0,0\", i].join(\",\"), \" A \")\n              .concat([e, e, \"0,0,0\", r].join(\",\"))\n          );\n        if (2 === o)\n          return (function (t) {\n            var n = se(t[0], t[1]),\n              r = oe(n, e),\n              i = g.c.add([0, 0], t[0], g.c.scale([0, 0], r, -1)),\n              o = g.c.add([0, 0], t[1], r),\n              a = 1.2 * e,\n              s = oe(g.c.normalize([0, 0], n), a),\n              c = g.c.scale([0, 0], s, -1),\n              u = g.c.add([0, 0], i, c),\n              h = g.c.add([0, 0], o, c),\n              l = g.c.add([0, 0], i, s);\n            return \"M \"\n              .concat(i, \" C \")\n              .concat([u, h, o].join(\",\"), \" S \")\n              .concat([l, i].join(\",\"), \" Z\");\n          })(t);\n        for (\n          var a = t.map(function (e, n) {\n              var r = t[(n + 1) % o];\n              return { p: e, v: g.c.normalize([0, 0], se(e, r)) };\n            }),\n            s = 0;\n          s < a.length;\n          ++s\n        ) {\n          var c = s > 0 ? s - 1 : o - 1,\n            u = g.c.normalize(\n              [0, 0],\n              g.c.add([0, 0], a[c].v, g.c.scale([0, 0], a[s].v, -1)),\n            );\n          a[s].p = g.c.add([0, 0], a[s].p, g.c.scale([0, 0], u, e));\n        }\n        return a.map(function (t) {\n          var e = t.p;\n          return { x: e[0], y: e[1] };\n        });\n      }\n      var he = function (t, e, n) {\n          return (t.y - n.y) * (e.x - n.x) - (t.x - n.x) * (e.y - n.y);\n        },\n        le = function (t) {\n          var e = t.map(function (t) {\n            return { x: t.getModel().x, y: t.getModel().y };\n          });\n          if (\n            (e.sort(function (t, e) {\n              return t.x === e.x ? t.y - e.y : t.x - e.x;\n            }),\n            1 === e.length)\n          )\n            return e;\n          for (var n = [], r = 0; r < e.length; r++) {\n            for (\n              ;\n              n.length >= 2 && he(n[n.length - 2], n[n.length - 1], e[r]) <= 0;\n\n            )\n              n.pop();\n            n.push(e[r]);\n          }\n          var i = [];\n          for (r = e.length - 1; r >= 0; r--) {\n            for (\n              ;\n              i.length >= 2 && he(i[i.length - 2], i[i.length - 1], e[r]) <= 0;\n\n            )\n              i.pop();\n            i.push(e[r]);\n          }\n          return i.pop(), n.pop(), n.concat(i);\n        },\n        fe = {\n          maxRoutingIterations: 100,\n          maxMarchingIterations: 100,\n          pixelGroupSize: 2,\n          edgeR0: 10,\n          edgeR1: 10,\n          nodeR0: 5,\n          nodeR1: 10,\n          morphBuffer: 5,\n          threshold: 0.001,\n          skip: 16,\n          nodeInfluenceFactor: 1,\n          edgeInfluenceFactor: 1,\n          negativeNodeInfluenceFactor: -0.5,\n        };\n      function de(t, e, n) {\n        var r = !1,\n          i = function (t, n) {\n            return e.cells[t + n * e.width];\n          },\n          o = function (t, e) {\n            var r = 0;\n            return (\n              i(t - 1, e - 1) >= n && (r += 1),\n              i(t, e - 1) > n && (r += 2),\n              i(t - 1, e) > n && (r += 4),\n              i(t, e) > n && (r += 8),\n              r\n            );\n          },\n          a = function (n, r) {\n            for (var i, a, s = n, c = r, u = 0; u < e.width * e.height; u++) {\n              if (\n                ((i = s),\n                (a = c),\n                t.findIndex(function (t) {\n                  return t.x === s && t.y === c;\n                }) > -1)\n              ) {\n                if (t[0].x === s && t[0].y === c) return !0;\n              } else t.push({ x: s, y: c });\n              var h = o(s, c);\n              switch (h) {\n                case -1:\n                  return console.warn(\"Marched out of bounds\"), !0;\n                case 0:\n                case 3:\n                case 2:\n                case 7:\n                  s++;\n                  break;\n                case 12:\n                case 14:\n                case 4:\n                  s--;\n                  break;\n                case 6:\n                  0 === i && (-1 === a ? (s -= 1) : (s += 1));\n                  break;\n                case 1:\n                case 13:\n                case 5:\n                  c--;\n                  break;\n                case 9:\n                  1 === i && (0 === a ? (c -= 1) : (c += 1));\n                  break;\n                case 10:\n                case 8:\n                case 11:\n                  c++;\n                  break;\n                default:\n                  return (\n                    console.warn(\"Marching squares invalid state: \".concat(h)),\n                    !0\n                  );\n              }\n            }\n          };\n        this.march = function () {\n          for (var t = 0; t < e.width && !r; t += 1)\n            for (var s = 0; s < e.height && !r; s += 1)\n              i(t, s) > n && 15 !== o(t, s) && (r = a(t, s));\n          return r;\n        };\n      }\n      var pe = function (t, e) {\n        var n = Number.POSITIVE_INFINITY,\n          r = null;\n        return (\n          t.forEach(function (t) {\n            var i = q(t, e);\n            i >= 0 && i < n && ((r = t), (n = i));\n          }),\n          r\n        );\n      };\n      function ge(t, e, n, r, i) {\n        var o = (function (t, e, n) {\n          var r = null,\n            i = Number.POSITIVE_INFINITY;\n          return (\n            e.forEach(function (e) {\n              var o = { x: t.getModel().x, y: t.getModel().y },\n                a = { x: e.getModel().x, y: e.getModel().y },\n                s = G(o, a),\n                c = new Y(o.x, o.y, a.x, a.y),\n                u = n.reduce(function (t, e) {\n                  return q(e, c) > 0 ? t + 1 : t;\n                }, 0);\n              s * Math.pow(u + 1, 2) < i &&\n                ((r = e), (i = s * Math.pow(u + 1, 2)));\n            }),\n            r\n          );\n        })(t, n, e);\n        if (null === o) return [];\n        return (function (t) {\n          for (var n = []; t.length > 0; ) {\n            var r = t.pop();\n            if (0 === t.length) {\n              n.push(r);\n              break;\n            }\n            var i = t.pop(),\n              o = new Y(r.x1, r.y1, i.x2, i.y2);\n            pe(e, o) ? (n.push(r), t.push(i)) : t.push(o);\n          }\n          return n;\n        })(\n          (function (t, e, n, r) {\n            var i = [],\n              o = [];\n            o.push(t);\n            for (\n              var a = !0,\n                s = 0,\n                c = function (t, e) {\n                  var n = !1;\n                  return (\n                    e.forEach(function (e) {\n                      n ||\n                        ((U(t, { x: e.x1, y: e.y1 }) ||\n                          U(t, { x: e.x2, y: e.y2 })) &&\n                          (n = !0));\n                    }),\n                    n\n                  );\n                },\n                u = function (t, e) {\n                  for (var n = 0, r = e; n < r.length; n++) {\n                    var i = r[n].getBBox(),\n                      o = [\n                        [i.x, i.y],\n                        [i.x + i.width, i.y],\n                        [i.x, i.y + i.height],\n                        [i.x + i.width, i.y + i.height],\n                      ];\n                    if (_(o, t.x, t.y)) return !0;\n                  }\n                  return !1;\n                };\n              a && s < n;\n\n            ) {\n              a = !1;\n              for (\n                var h = function () {\n                  var t = o.pop(),\n                    n = pe(e, t);\n                  if (n) {\n                    var h = W(n, t),\n                      l = h[0];\n                    if (2 === h[1]) {\n                      var f = function (s) {\n                        for (\n                          var h = r,\n                            f = me(n, h, l, s),\n                            d = c(f, o) || c(f, i),\n                            p = u(f, e);\n                          !d && p && h >= 1;\n\n                        )\n                          (f = me(n, (h /= 1.5), l, s)),\n                            (d = c(f, o) || c(f, i)),\n                            (p = u(f, e));\n                        !f ||\n                          d ||\n                          (s && p) ||\n                          (o.push(new Y(t.x1, t.y1, f.x, f.y)),\n                          o.push(new Y(f.x, f.y, t.x2, t.y2)),\n                          (a = !0));\n                      };\n                      f(!0), a || f(!1);\n                    }\n                  }\n                  a || i.push(t), (s += 1);\n                };\n                !a && o.length;\n\n              )\n                h();\n            }\n            for (; o.length; ) i.push(o.pop());\n            return i;\n          })(\n            new Y(\n              t.getModel().x,\n              t.getModel().y,\n              o.getModel().x,\n              o.getModel().y,\n            ),\n            e,\n            r,\n            i,\n          ),\n        );\n      }\n      var ve = function (t, e, n) {\n        var r = Object.assign(fe, n),\n          i = V(\n            t.map(function (t) {\n              return { x: t.getModel().x, y: t.getModel().y };\n            }),\n          );\n        t = t.sort(function (t, e) {\n          return (\n            G({ x: t.getModel().x, y: t.getModel().y }, i) -\n            G({ x: e.getModel().x, y: e.getModel().y }, i)\n          );\n        });\n        var o = [],\n          a = [];\n        t.forEach(function (t) {\n          ge(t, e, o, r.maxRoutingIterations, r.morphBuffer).forEach(\n            function (t) {\n              a.push(t);\n            },\n          ),\n            o.push(t);\n        });\n        for (\n          var s,\n            c,\n            u,\n            h,\n            l,\n            f = (function (t, e, n) {\n              var r = {\n                  minX: Number.POSITIVE_INFINITY,\n                  minY: Number.POSITIVE_INFINITY,\n                  maxX: Number.NEGATIVE_INFINITY,\n                  maxY: Number.NEGATIVE_INFINITY,\n                  width: 0,\n                  height: 0,\n                  x: 0,\n                  y: 0,\n                },\n                i = [];\n              t.forEach(function (t) {\n                i.push(t.getBBox());\n              }),\n                e.forEach(function (t) {\n                  i.push(t.getBBox());\n                });\n              for (var o = 0, a = i; o < a.length; o++) {\n                var s = a[o];\n                (r.minX = (s.minX < r.minX ? s.minX : r.minX) - n),\n                  (r.minY = (s.minY < r.minY ? s.minY : r.minY) - n),\n                  (r.maxX = (s.maxX > r.maxX ? s.maxX : r.maxX) + n),\n                  (r.maxY = (s.maxY > r.maxY ? s.maxY : r.maxY) + n);\n              }\n              return (\n                (r.width = r.maxX - r.minX),\n                (r.height = r.maxY - r.minY),\n                (r.x = r.minX),\n                (r.y = r.minY),\n                r\n              );\n            })(t, a, r.nodeR0),\n            d =\n              ((s = f.width),\n              (c = f.height),\n              (u = r.pixelGroupSize),\n              (h = Math.ceil(s / u)),\n              (l = Math.ceil(c / u)),\n              {\n                cells: new Float32Array(Math.max(0, h * l)).fill(0),\n                width: h,\n                height: l,\n              }),\n            p = [],\n            g = [],\n            v = 0;\n          v < r.maxMarchingIterations;\n          v++\n        )\n          if (\n            (ye(t, e, a, f, d, r),\n            (g = []),\n            new de((p = []), d, r.threshold).march())\n          ) {\n            var y = p.map(function (t) {\n              return {\n                x: Math.round(t.x * r.pixelGroupSize + f.minX),\n                y: Math.round(t.y * r.pixelGroupSize + f.minY),\n              };\n            });\n            if (y) {\n              var m = y.length;\n              if (r.skip > 1)\n                for (m = Math.floor(y.length / r.skip); m < 3 && r.skip > 1; )\n                  (r.skip -= 1), (m = Math.floor(y.length / r.skip));\n              for (var b = 0, x = 0; x < m; x += 1, b += r.skip)\n                g.push({ x: y[b].x, y: y[b].y });\n            }\n            if (\n              g &&\n              (function () {\n                for (var e = 0, n = t; e < n.length; e++) {\n                  var r = n[e],\n                    i = g.map(function (t) {\n                      return [t.x, t.y];\n                    });\n                  if (!_(i, r.getBBox().centerX, r.getBBox().centerY))\n                    return !1;\n                }\n                return !0;\n              })()\n            )\n              return g;\n            if (((r.threshold *= 0.9), v <= 0.5 * r.maxMarchingIterations))\n              (r.memberInfluenceFactor *= 1.2), (r.edgeInfluenceFactor *= 1.2);\n            else {\n              if (!(0 !== r.nonMemberInfluenceFactor && e.length > 0)) break;\n              r.nonMemberInfluenceFactor *= 0.8;\n            }\n          }\n        return g;\n      };\n      function ye(t, e, n, r, i, o) {\n        function a(t, e) {\n          var n = Math.floor((t - e) / o.pixelGroupSize);\n          return n < 0 ? 0 : n;\n        }\n        function s(t, e) {\n          return t * o.pixelGroupSize + e;\n        }\n        var c = (o.nodeR0 - o.nodeR1) * (o.nodeR0 - o.nodeR1),\n          u = (o.edgeR0 - o.edgeR1) * (o.edgeR0 - o.edgeR1),\n          h = function (t, e) {\n            return [\n              Math.min(a(t.minX, e + r.minX), i.width),\n              Math.min(a(t.minY, e + r.minY), i.height),\n              Math.min(a(t.maxX, -e + r.minX), i.width),\n              Math.min(a(t.maxY, -e + r.minY), i.height),\n            ];\n          },\n          l = function (t, e) {\n            for (\n              var n = t.getBBox(),\n                a = h(n, o.nodeR1),\n                c = a[0],\n                u = a[1],\n                l = a[2],\n                f = a[3],\n                d = u;\n              d < f;\n              d += 1\n            )\n              for (var p = c; p < l; p += 1)\n                if (!(e < 0 && i[p + d * i.width] <= 0)) {\n                  var g = s(p, r.minX),\n                    v = s(d, r.minY),\n                    y = Z(\n                      { x: g, y: v },\n                      {\n                        x: n.minX,\n                        y: n.minY,\n                        width: n.width,\n                        height: n.height,\n                      },\n                    );\n                  if (y < Math.pow(o.nodeR1, 2)) {\n                    var m = Math.sqrt(y) - o.nodeR1;\n                    i.cells[p + d * i.width] += e * m * m;\n                  }\n                }\n          };\n        o.nodeInfluenceFactor &&\n          t.forEach(function (t) {\n            l(t, o.nodeInfluenceFactor / c);\n          }),\n          o.edgeInfluenceFactor &&\n            n.forEach(function (t) {\n              !(function (t, e) {\n                for (\n                  var n = t.getBBox(),\n                    a = h(n, o.edgeR1),\n                    c = a[0],\n                    u = a[1],\n                    l = a[2],\n                    f = a[3],\n                    d = u;\n                  d < f;\n                  d += 1\n                )\n                  for (var p = c; p < l; p += 1)\n                    if (!(e < 0 && i.cells[p + d * i.width] <= 0)) {\n                      var g = s(p, r.minX),\n                        v = s(d, r.minY),\n                        y = H({ x: g, y: v }, t);\n                      if (y < Math.pow(o.edgeR1, 2)) {\n                        var m = Math.sqrt(y) - o.edgeR1;\n                        i.cells[p + d * i.width] += e * m * m;\n                      }\n                    }\n              })(t, o.edgeInfluenceFactor / u);\n            }),\n          o.negativeNodeInfluenceFactor &&\n            e.forEach(function (t) {\n              l(t, o.negativeNodeInfluenceFactor / c);\n            });\n      }\n      function me(t, e, n, r) {\n        var i = t.getBBox(),\n          o = n[0],\n          a = n[1],\n          s = n[2],\n          c = n[3],\n          u = {\n            topLeft: { x: i.minX - e, y: i.minY - e },\n            topRight: { x: i.maxX + e, y: i.minY - e },\n            bottomLeft: { x: i.minX - e, y: i.maxY + e },\n            bottomRight: { x: i.maxX + e, y: i.maxY + e },\n          },\n          h = i.height * i.width;\n        function l(t, e) {\n          return i.width * (0.5 * (t.y - i.minY + (e.y - i.minY)));\n        }\n        if (a)\n          return o\n            ? r\n              ? u.topLeft\n              : u.bottomRight\n            : s\n            ? r\n              ? u.bottomLeft\n              : u.topRight\n            : l(a, c) < 0.5 * h\n            ? a.y > c.y\n              ? r\n                ? u.topLeft\n                : u.bottomRight\n              : r\n              ? u.topRight\n              : u.bottomLeft\n            : a.y < c.y\n            ? r\n              ? u.bottomLeft\n              : u.topRight\n            : r\n            ? u.bottomRight\n            : u.topLeft;\n        if (c) {\n          if (o) return r ? u.topRight : u.bottomLeft;\n          if (s) return r ? u.bottomRight : u.topLeft;\n        }\n        return l(o, s) < 0.5 * h\n          ? o.x > s.x\n            ? r\n              ? u.topLeft\n              : u.bottomRight\n            : r\n            ? u.bottomLeft\n            : u.topRight\n          : o.x < s.x\n          ? r\n            ? u.topRight\n            : u.bottomLeft\n          : r\n          ? u.bottomRight\n          : u.topLeft;\n      }\n      var be = (function () {\n          function t(t, e) {\n            (this.cfg = Object(c.deepMix)(this.getDefaultCfg(), e)),\n              (this.graph = t),\n              (this.id = this.cfg.id),\n              (this.group = this.cfg.group),\n              (this.members = this.cfg.members.map(function (e) {\n                return Object(c.isString)(e) ? t.findById(e) : e;\n              })),\n              (this.nonMembers = this.cfg.nonMembers.map(function (e) {\n                return Object(c.isString)(e) ? t.findById(e) : e;\n              })),\n              this.setPadding(),\n              this.setType(),\n              (this.path = this.calcPath(this.members, this.nonMembers)),\n              this.render();\n          }\n          return (\n            (t.prototype.getDefaultCfg = function () {\n              return {\n                id: \"g6-hull\",\n                type: \"round-convex\",\n                members: [],\n                nonMembers: [],\n                style: { fill: \"lightblue\", stroke: \"blue\", opacity: 0.2 },\n                padding: 10,\n              };\n            }),\n            (t.prototype.setPadding = function () {\n              var t =\n                this.members.length &&\n                this.members[0].getKeyShape().getCanvasBBox().width / 2;\n              (this.padding =\n                this.cfg.padding > 0 ? this.cfg.padding + t : 10 + t),\n                (this.cfg.bubbleCfg = {\n                  nodeR0: this.padding - t,\n                  nodeR1: this.padding - t,\n                  morphBuffer: this.padding - t,\n                });\n            }),\n            (t.prototype.setType = function () {\n              (this.type = this.cfg.type),\n                this.members.length < 3 && (this.type = \"round-convex\"),\n                \"round-convex\" !== this.type &&\n                  \"smooth-convex\" !== this.type &&\n                  \"bubble\" !== this.type &&\n                  (console.warn(\n                    \"The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default.\",\n                  ),\n                  (this.type = \"round-convex\"));\n            }),\n            (t.prototype.calcPath = function (t, e) {\n              var n, r, i;\n              switch (this.type) {\n                case \"round-convex\":\n                  (i = ce(\n                    (n = le(t)).map(function (t) {\n                      return [t.x, t.y];\n                    }),\n                    this.padding,\n                  )),\n                    (r = Object(Qt.b)(i));\n                  break;\n                case \"smooth-convex\":\n                  2 === (n = le(t)).length\n                    ? ((i = ce(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = Object(Qt.b)(i)))\n                    : n.length > 2 &&\n                      ((i = ue(\n                        n.map(function (t) {\n                          return [t.x, t.y];\n                        }),\n                        this.padding,\n                      )),\n                      (r = ie(i)));\n                  break;\n                case \"bubble\":\n                  r = (n = ve(t, e, this.cfg.bubbleCfg)).length >= 2 && ie(n);\n              }\n              return r;\n            }),\n            (t.prototype.render = function () {\n              this.group.addShape(\"path\", {\n                attrs: Object(f.a)({ path: this.path }, this.cfg.style),\n                id: this.id,\n                name: this.cfg.id,\n              }),\n                this.group.toBack();\n            }),\n            (t.prototype.addMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t)),\n                  this.members.push(t);\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 && this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.addNonMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t)),\n                  this.nonMembers.push(t);\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 && this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0\n                );\n              }\n            }),\n            (t.prototype.removeMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t));\n                var e = this.members.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.members.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.removeNonMember = function (t) {\n              if (t) {\n                Object(c.isString)(t) && (t = this.graph.findById(t));\n                var e = this.nonMembers.indexOf(t);\n                return (\n                  e > -1 &&\n                  (this.nonMembers.splice(e, 1),\n                  this.updateData(this.members, this.nonMembers),\n                  !0)\n                );\n              }\n            }),\n            (t.prototype.updateData = function (t, e) {\n              var n = this;\n              this.group.findById(this.id).remove(),\n                t &&\n                  (this.members = t.map(function (t) {\n                    return Object(c.isString)(t) ? n.graph.findById(t) : t;\n                  })),\n                e &&\n                  (this.nonMembers = e.map(function (t) {\n                    return Object(c.isString)(t) ? n.graph.findById(t) : t;\n                  })),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.updateStyle = function (t) {\n              this.group.findById(this.id).attr(Object(f.a)({}, t));\n            }),\n            (t.prototype.updateCfg = function (t) {\n              var e = this;\n              (this.cfg = Object(c.deepMix)(this.cfg, t)),\n                (this.id = this.cfg.id),\n                (this.group = this.cfg.group),\n                t.members &&\n                  (this.members = this.cfg.members.map(function (t) {\n                    return Object(c.isString)(t) ? e.graph.findById(t) : t;\n                  })),\n                t.nonMembers &&\n                  (this.nonMembers = this.cfg.nonMembers.map(function (t) {\n                    return Object(c.isString)(t) ? e.graph.findById(t) : t;\n                  })),\n                this.setPadding(),\n                this.setType(),\n                (this.path = this.calcPath(this.members, this.nonMembers)),\n                this.render();\n            }),\n            (t.prototype.contain = function (t) {\n              var e,\n                n,\n                r = this,\n                i = (e = Object(c.isString)(t)\n                  ? this.graph.findById(t)\n                  : t).getKeyShape();\n              if (\"path\" === e.get(\"type\")) n = re(i.attr(\"path\"));\n              else {\n                var o = i.getCanvasBBox();\n                n = [\n                  [o.minX, o.minY],\n                  [o.maxX, o.minY],\n                  [o.maxX, o.maxY],\n                  [o.minX, o.maxY],\n                ];\n              }\n              return (\n                (n = n.map(function (t) {\n                  var e = r.graph.getPointByCanvas(t[0], t[1]);\n                  return [e.x, e.y];\n                })),\n                F(n, re(this.path))\n              );\n            }),\n            (t.prototype.destroy = function () {\n              this.group.remove(), (this.cfg = null);\n            }),\n            t\n          );\n        })(),\n        xe = g.a.transform,\n        Se = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            return (\n              (n.cfg = Object(c.deepMix)(n.getDefaultCfg(), e)),\n              n.init(),\n              (n.animating = !1),\n              (n.destroyed = !1),\n              n.cfg.enabledStack &&\n                ((n.undoStack = new v.Stack(n.cfg.maxStep)),\n                (n.redoStack = new v.Stack(n.cfg.maxStep))),\n              n\n            );\n          }\n          return (\n            Object(f.c)(e, t),\n            (e.prototype.init = function () {\n              this.initCanvas();\n              var t = new Nt(this),\n                e = new Ot(this),\n                n = new Zt(this),\n                r = new $t(this);\n              this.set({\n                viewController: t,\n                modeController: e,\n                itemController: n,\n                stateController: r,\n              }),\n                this.initLayoutController(),\n                this.initEventController(),\n                this.initGroups(),\n                this.initPlugins(),\n                (this.timeIndex = Object(p.requestAnimationFrame)(\n                  this.onTick.bind(this),\n                ));\n            }),\n            (e.prototype.initGroups = function () {\n              var t = this.get(\"canvas\"),\n                e = this.get(\"canvas\").get(\"el\").id,\n                n = t.addGroup({\n                  id: \"\".concat(e, \"-root\"),\n                  className: nt.rootContainerClassName,\n                });\n              if (this.get(\"groupByTypes\")) {\n                var r = n.addGroup({\n                    id: \"\".concat(e, \"-edge\"),\n                    className: nt.edgeContainerClassName,\n                  }),\n                  i = n.addGroup({\n                    id: \"\".concat(e, \"-node\"),\n                    className: nt.nodeContainerClassName,\n                  }),\n                  o = n.addGroup({\n                    id: \"\".concat(e, \"-combo\"),\n                    className: nt.comboContainerClassName,\n                  });\n                o.toBack(),\n                  this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n              }\n              var a = n.addGroup({\n                id: \"\".concat(e, \"-delegate\"),\n                className: nt.delegateContainerClassName,\n              });\n              this.set({ delegateGroup: a }), this.set(\"group\", n);\n            }),\n            (e.prototype.getDefaultCfg = function () {\n              return {\n                container: void 0,\n                width: void 0,\n                height: void 0,\n                renderer: \"canvas\",\n                modes: {},\n                plugins: [],\n                data: {},\n                fitViewPadding: 10,\n                minZoom: 0.2,\n                maxZoom: 10,\n                event: !0,\n                groupByTypes: !0,\n                directed: !1,\n                autoPaint: !0,\n                nodes: [],\n                edges: [],\n                combos: [],\n                vedges: [],\n                itemMap: {},\n                linkCenter: !1,\n                defaultNode: {},\n                defaultEdge: {},\n                nodeStateStyles: {},\n                edgeStateStyles: {},\n                states: {},\n                animate: !1,\n                animateCfg: {\n                  onFrame: void 0,\n                  duration: 500,\n                  easing: \"easeLinear\",\n                },\n                callback: void 0,\n                enabledStack: !1,\n                maxStep: 10,\n                tooltips: [],\n              };\n            }),\n            (e.prototype.set = function (t, e) {\n              return (\n                Object(c.isPlainObject)(t)\n                  ? (this.cfg = Object(f.a)(Object(f.a)({}, this.cfg), t))\n                  : (this.cfg[t] = e),\n                this\n              );\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.getGroup = function () {\n              return this.get(\"group\");\n            }),\n            (e.prototype.getContainer = function () {\n              return this.get(\"container\");\n            }),\n            (e.prototype.getMinZoom = function () {\n              return this.get(\"minZoom\");\n            }),\n            (e.prototype.setMinZoom = function (t) {\n              return this.set(\"minZoom\", t);\n            }),\n            (e.prototype.getMaxZoom = function () {\n              return this.get(\"maxZoom\");\n            }),\n            (e.prototype.setMaxZoom = function (t) {\n              return this.set(\"maxZoom\", t);\n            }),\n            (e.prototype.getWidth = function () {\n              return this.get(\"width\");\n            }),\n            (e.prototype.getHeight = function () {\n              return this.get(\"height\");\n            }),\n            (e.prototype.clearItemStates = function (t, e) {\n              Object(c.isString)(t) && (t = this.findById(t));\n              var n = this.get(\"itemController\");\n              e || (e = t.get(\"states\")),\n                n.clearItemStates(t, e),\n                this.get(\"stateController\").updateStates(t, e, !1);\n            }),\n            (e.prototype.node = function (t) {\n              \"function\" == typeof t && this.set(\"nodeMapper\", t);\n            }),\n            (e.prototype.edge = function (t) {\n              \"function\" == typeof t && this.set(\"edgeMapper\", t);\n            }),\n            (e.prototype.combo = function (t) {\n              \"function\" == typeof t && this.set(\"comboMapper\", t);\n            }),\n            (e.prototype.findById = function (t) {\n              return this.get(\"itemMap\")[t];\n            }),\n            (e.prototype.find = function (t, e) {\n              var n,\n                r = this.get(\"\".concat(t, \"s\"));\n              return (\n                Object(c.each)(r, function (t, r) {\n                  if (e(t, r)) return (n = t);\n                }),\n                n\n              );\n            }),\n            (e.prototype.findAll = function (t, e) {\n              var n = [];\n              return (\n                Object(c.each)(this.get(\"\".concat(t, \"s\")), function (t, r) {\n                  e(t, r) && n.push(t);\n                }),\n                n\n              );\n            }),\n            (e.prototype.findAllByState = function (t, e) {\n              return this.findAll(t, function (t) {\n                return t.hasState(e);\n              });\n            }),\n            (e.prototype.translate = function (t, e) {\n              var n = this.get(\"group\"),\n                r = Object(c.clone)(n.getMatrix());\n              r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                (r = xe(r, [[\"t\", t, e]])),\n                n.setMatrix(r),\n                this.emit(\"viewportchange\", {\n                  action: \"translate\",\n                  matrix: n.getMatrix(),\n                }),\n                this.autoPaint();\n            }),\n            (e.prototype.moveTo = function (t, e) {\n              var n = this.get(\"group\");\n              T(n, { x: t, y: e }),\n                this.emit(\"viewportchange\", {\n                  action: \"move\",\n                  matrix: n.getMatrix(),\n                });\n            }),\n            (e.prototype.fitView = function (t) {\n              t && this.set(\"fitViewPadding\", t),\n                this.get(\"viewController\").fitView(),\n                this.autoPaint();\n            }),\n            (e.prototype.fitCenter = function () {\n              this.get(\"viewController\").fitCenter(), this.autoPaint();\n            }),\n            (e.prototype.addBehaviors = function (t, e) {\n              return (\n                this.get(\"modeController\").manipulateBehaviors(t, e, !0), this\n              );\n            }),\n            (e.prototype.removeBehaviors = function (t, e) {\n              return (\n                this.get(\"modeController\").manipulateBehaviors(t, e, !1), this\n              );\n            }),\n            (e.prototype.updateBehavior = function (t, e, n) {\n              return this.get(\"modeController\").updateBehavior(t, e, n), this;\n            }),\n            (e.prototype.zoom = function (t, e) {\n              var n = this.get(\"group\"),\n                r = Object(c.clone)(n.getMatrix()),\n                i = this.get(\"minZoom\"),\n                o = this.get(\"maxZoom\");\n              r || (r = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                (r = xe(\n                  r,\n                  e\n                    ? [\n                        [\"t\", -e.x, -e.y],\n                        [\"s\", t, t],\n                        [\"t\", e.x, e.y],\n                      ]\n                    : [[\"s\", t, t]],\n                )),\n                (i && r[0] < i) ||\n                  (o && r[0] > o) ||\n                  (n.setMatrix(r),\n                  this.emit(\"viewportchange\", { action: \"zoom\", matrix: r }),\n                  this.autoPaint());\n            }),\n            (e.prototype.zoomTo = function (t, e) {\n              var n = t / this.getZoom();\n              this.zoom(n, e);\n            }),\n            (e.prototype.focusItem = function (t, e, n) {\n              var r = this.get(\"viewController\"),\n                i = !1;\n              e ? (i = !0) : void 0 === e && (i = this.get(\"animate\"));\n              var o = {};\n              n ? (o = n) : void 0 === n && (o = this.get(\"animateCfg\")),\n                r.focus(t, i, o),\n                this.autoPaint();\n            }),\n            (e.prototype.autoPaint = function () {\n              this.get(\"autoPaint\") && this.paint();\n            }),\n            (e.prototype.paint = function () {\n              this.emit(\"beforepaint\"),\n                this.get(\"canvas\").draw(),\n                this.emit(\"afterpaint\");\n            }),\n            (e.prototype.getPointByClient = function (t, e) {\n              return this.get(\"viewController\").getPointByClient(t, e);\n            }),\n            (e.prototype.getClientByPoint = function (t, e) {\n              return this.get(\"viewController\").getClientByPoint(t, e);\n            }),\n            (e.prototype.getPointByCanvas = function (t, e) {\n              return this.get(\"viewController\").getPointByCanvas(t, e);\n            }),\n            (e.prototype.getCanvasByPoint = function (t, e) {\n              return this.get(\"viewController\").getCanvasByPoint(t, e);\n            }),\n            (e.prototype.getGraphCenterPoint = function () {\n              var t = this.get(\"group\").getCanvasBBox();\n              return { x: (t.minX + t.maxX) / 2, y: (t.minY + t.maxY) / 2 };\n            }),\n            (e.prototype.getViewPortCenterPoint = function () {\n              return this.getPointByCanvas(\n                this.get(\"width\") / 2,\n                this.get(\"height\") / 2,\n              );\n            }),\n            (e.prototype.showItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this.get(\"itemController\").changeItemVisibility(t, !0);\n              if (e && this.get(\"enabledStack\")) {\n                var r = n.getID(),\n                  i = {},\n                  o = {};\n                switch (n.getType()) {\n                  case \"node\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.nodes = [{ id: r, visible: !0 }]);\n                    break;\n                  case \"edge\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.edges = [{ id: r, visible: !0 }]);\n                    break;\n                  case \"combo\":\n                    (i.nodes = [{ id: r, visible: !1 }]),\n                      (o.combos = [{ id: r, visible: !0 }]);\n                }\n                this.pushStack(\"visible\", { before: i, after: o });\n              }\n            }),\n            (e.prototype.hideItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this.get(\"itemController\").changeItemVisibility(t, !1);\n              if (e && this.get(\"enabledStack\")) {\n                var r = n.getID(),\n                  i = {},\n                  o = {};\n                switch (n.getType()) {\n                  case \"node\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.nodes = [{ id: r, visible: !1 }]);\n                    break;\n                  case \"edge\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.edges = [{ id: r, visible: !1 }]);\n                    break;\n                  case \"combo\":\n                    (i.nodes = [{ id: r, visible: !0 }]),\n                      (o.combos = [{ id: r, visible: !1 }]);\n                }\n                this.pushStack(\"visible\", { before: i, after: o });\n              }\n            }),\n            (e.prototype.refreshItem = function (t) {\n              this.get(\"itemController\").refreshItem(t);\n            }),\n            (e.prototype.setAutoPaint = function (t) {\n              this.set(\"autoPaint\", t), this.get(\"canvas\").set(\"autoDraw\", t);\n            }),\n            (e.prototype.remove = function (t, e) {\n              void 0 === e && (e = !0), this.removeItem(t, e);\n            }),\n            (e.prototype.removeItem = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = t;\n              if (\n                (Object(c.isString)(t) && (n = this.findById(t)),\n                !n && Object(c.isString)(t))\n              )\n                console.warn(\"The item to be removed does not exist!\");\n              else if (n) {\n                var r = \"\";\n                if (\n                  (n.getType && (r = n.getType()),\n                  e && this.get(\"enabledStack\"))\n                ) {\n                  var i = Object(f.a)(Object(f.a)({}, n.getModel()), {\n                      itemType: r,\n                    }),\n                    o = {};\n                  switch (r) {\n                    case \"node\":\n                      (o.nodes = [i]), (o.edges = []);\n                      for (var a = n.getEdges(), s = a.length - 1; s >= 0; s--)\n                        o.edges.push(\n                          Object(f.a)(Object(f.a)({}, a[s].getModel()), {\n                            itemType: \"edge\",\n                          }),\n                        );\n                      break;\n                    case \"edge\":\n                      o.edges = [i];\n                      break;\n                    case \"combo\":\n                      o.combos = [i];\n                  }\n                  this.pushStack(\"delete\", { before: o, after: {} });\n                }\n                if (\"node\" === r)\n                  n.getModel().comboId && this.updateComboTree(n);\n                if ((this.get(\"itemController\").removeItem(n), \"combo\" === r)) {\n                  var u = mt(this.get(\"comboTrees\"));\n                  this.set(\"comboTrees\", u);\n                }\n              }\n            }),\n            (e.prototype.addItem = function (t, e, n, r) {\n              void 0 === n && (n = !0), void 0 === r && (r = !0);\n              var i = this.get(\"comboSorted\");\n              this.set(\"comboSorted\", i && !r);\n              var o = this.get(\"itemController\");\n              if (\n                !(function (t, e) {\n                  if (\"node\" === t || \"combo\" === t) {\n                    if (e.id && !Object(c.isString)(e.id))\n                      return (\n                        console.warn(\n                          \"G6 Warning Tips: missing 'id' property, or the 'id' %c\".concat(\n                            e.id,\n                            \"%c is not a string.\",\n                          ),\n                          \"font-size: 20px; color: red;\",\n                          \"\",\n                        ),\n                        !1\n                      );\n                  } else if (!(\"edge\" !== t || (e.source && e.target)))\n                    return (\n                      console.warn(\n                        \"G6 Warning Tips: missing 'source' or 'target' for the edge.\",\n                      ),\n                      !1\n                    );\n                  return !0;\n                })(t, e)\n              )\n                return !1;\n              if (!e.id || !this.findById(e.id)) {\n                var a,\n                  s = this.get(\"comboTrees\");\n                if ((s || (s = []), \"combo\" === t)) {\n                  var u = this.get(\"itemMap\"),\n                    h = !1;\n                  if (\n                    (s.forEach(function (n) {\n                      h ||\n                        pt(n, function (n) {\n                          if (e.parentId === n.id) {\n                            h = !0;\n                            var r = Object(f.a)(\n                              { id: e.id, depth: n.depth + 2 },\n                              e,\n                            );\n                            n.children\n                              ? n.children.push(r)\n                              : (n.children = [r]),\n                              (e.depth = r.depth),\n                              (a = o.addItem(t, e));\n                          }\n                          var i = u[n.id];\n                          return (\n                            h &&\n                              i &&\n                              i.getType &&\n                              \"combo\" === i.getType() &&\n                              o.updateCombo(i, n.children),\n                            !0\n                          );\n                        });\n                    }),\n                    !h)\n                  ) {\n                    var l = Object(f.a)({ id: e.id, depth: 0 }, e);\n                    (e.depth = l.depth), s.push(l), (a = o.addItem(t, e));\n                  }\n                  this.set(\"comboTrees\", s);\n                } else if (\"node\" === t && Object(c.isString)(e.comboId) && s) {\n                  var d;\n                  (d = this.findById(e.comboId)) &&\n                    d.getType &&\n                    \"combo\" !== d.getType() &&\n                    console.warn(\n                      \"'\".concat(\n                        e.comboId,\n                        \"' is not a id of a combo in the graph, the node will be added without combo.\",\n                      ),\n                    ),\n                    (a = o.addItem(t, e));\n                  var p = this.get(\"itemMap\"),\n                    g = !1,\n                    v = !1;\n                  (s || []).forEach(function (t) {\n                    v ||\n                      g ||\n                      pt(t, function (t) {\n                        if (t.id === e.id) return (v = !0), !1;\n                        if (e.comboId === t.id && !v) {\n                          g = !0;\n                          var n = Object(c.clone)(e);\n                          (n.itemType = \"node\"),\n                            t.children\n                              ? t.children.push(n)\n                              : (t.children = [n]),\n                            (n.depth = t.depth + 1);\n                        }\n                        return (\n                          g &&\n                            p[t.id].getType &&\n                            \"combo\" === p[t.id].getType() &&\n                            o.updateCombo(p[t.id], t.children),\n                          !0\n                        );\n                      });\n                  });\n                } else a = o.addItem(t, e);\n                if (\n                  (\"node\" === t && e.comboId) ||\n                  (\"combo\" === t && e.parentId)\n                )\n                  (d = this.findById(e.comboId || e.parentId)) &&\n                    d.getType &&\n                    \"combo\" === d.getType() &&\n                    d.addChild(a);\n                var y = this.get(\"combos\");\n                if (\n                  (y && y.length > 0 && this.sortCombos(),\n                  this.autoPaint(),\n                  n && this.get(\"enabledStack\"))\n                ) {\n                  var m = Object(f.a)(Object(f.a)({}, a.getModel()), {\n                      itemType: t,\n                    }),\n                    b = {};\n                  switch (t) {\n                    case \"node\":\n                      b.nodes = [m];\n                      break;\n                    case \"edge\":\n                      b.edges = [m];\n                      break;\n                    case \"combo\":\n                      b.combos = [m];\n                  }\n                  this.pushStack(\"add\", { before: {}, after: b });\n                }\n                return a;\n              }\n              console.warn(\n                \"This item exists already. Be sure the id %c\".concat(\n                  e.id,\n                  \"%c is unique.\",\n                ),\n                \"font-size: 20px; color: red;\",\n                \"\",\n              );\n            }),\n            (e.prototype.add = function (t, e, n, r) {\n              return (\n                void 0 === n && (n = !0),\n                void 0 === r && (r = !0),\n                this.addItem(t, e, n, r)\n              );\n            }),\n            (e.prototype.updateItem = function (t, e, n) {\n              var r = this;\n              void 0 === n && (n = !0);\n              var i,\n                o = this.get(\"itemController\");\n              i = Object(c.isString)(t) ? this.findById(t) : t;\n              var a = Object(c.clone)(i.getModel()),\n                s = \"\";\n              i.getType && (s = i.getType());\n              var u = Object(f.f)([], i.getStates(), !0);\n              if (\n                (\"combo\" === s &&\n                  Object(c.each)(u, function (t) {\n                    return r.setItemState(i, t, !1);\n                  }),\n                o.updateItem(i, e),\n                \"combo\" === s &&\n                  Object(c.each)(u, function (t) {\n                    return r.setItemState(i, t, !0);\n                  }),\n                n && this.get(\"enabledStack\"))\n              ) {\n                var h = { nodes: [], edges: [], combos: [] },\n                  l = { nodes: [], edges: [], combos: [] },\n                  d = Object(f.a)({ id: a.id }, e);\n                switch (s) {\n                  case \"node\":\n                    h.nodes.push(a), l.nodes.push(d);\n                    break;\n                  case \"edge\":\n                    h.edges.push(a), l.edges.push(d);\n                    break;\n                  case \"combo\":\n                    h.combos.push(a), l.combos.push(d);\n                }\n                \"node\" === s && h.nodes.push(a),\n                  this.pushStack(\"update\", { before: h, after: l });\n              }\n            }),\n            (e.prototype.update = function (t, e, n) {\n              void 0 === n && (n = !0), this.updateItem(t, e, n);\n            }),\n            (e.prototype.setItemState = function (t, e, n) {\n              Object(c.isString)(t) && (t = this.findById(t)),\n                this.get(\"itemController\").setItemState(t, e, n);\n              var r = this.get(\"stateController\");\n              Object(c.isString)(n)\n                ? r.updateState(t, \"\".concat(e, \":\").concat(n), !0)\n                : r.updateState(t, e, n);\n            }),\n            (e.prototype.priorityState = function (t, e) {\n              this.get(\"itemController\").priorityState(t, e);\n            }),\n            (e.prototype.data = function (t) {\n              wt(t), this.set(\"data\", t);\n            }),\n            (e.prototype.render = function () {\n              var t = this;\n              this.set(\"comboSorted\", !1);\n              var e = this.get(\"data\");\n              if ((this.get(\"enabledStack\") && this.clearStack(), !e))\n                throw new Error(\"data must be defined first\");\n              var n = e.nodes,\n                r = void 0 === n ? [] : n,\n                i = e.edges,\n                o = void 0 === i ? [] : i,\n                a = e.combos,\n                s = void 0 === a ? [] : a;\n              if (\n                (this.clear(!0),\n                this.emit(\"beforerender\"),\n                Object(c.each)(r, function (e) {\n                  t.add(\"node\", e, !1, !1);\n                }),\n                s && 0 !== s.length)\n              ) {\n                var u = yt(s, r);\n                this.set(\"comboTrees\", u), t.addCombos(s);\n              }\n              Object(c.each)(o, function (e) {\n                t.add(\"edge\", e, !1, !1);\n              });\n              var h = t.get(\"animate\");\n              (t.get(\"fitView\") || t.get(\"fitCenter\")) && t.set(\"animate\", !1);\n              var l = t.get(\"layoutController\");\n              if (l) {\n                if (\n                  (l.layout(function () {\n                    t.get(\"fitView\")\n                      ? t.fitView()\n                      : t.get(\"fitCenter\") && t.fitCenter();\n                    t.autoPaint(),\n                      t.emit(\"afterrender\"),\n                      (t.get(\"fitView\") || t.get(\"fitCenter\")) &&\n                        t.set(\"animate\", h);\n                  }),\n                  this.refreshPositions(),\n                  this.destroyed)\n                )\n                  return;\n              } else\n                t.get(\"fitView\") && t.fitView(),\n                  t.get(\"fitCenter\") && t.fitCenter(),\n                  t.emit(\"afterrender\"),\n                  t.set(\"animate\", h);\n              this.get(\"groupByTypes\") ||\n                (s && 0 !== s.length\n                  ? this.sortCombos()\n                  : e.nodes && e.edges && e.nodes.length < e.edges.length\n                  ? this.getNodes().forEach(function (t) {\n                      t.toFront();\n                    })\n                  : this.getEdges().forEach(function (t) {\n                      t.toBack();\n                    }));\n              this.get(\"enabledStack\") && this.pushStack(\"render\");\n            }),\n            (e.prototype.read = function (t) {\n              this.data(t), this.render();\n            }),\n            (e.prototype.diffItems = function (t, e, n) {\n              var r,\n                i = this,\n                o = this.get(\"itemMap\");\n              Object(c.each)(n, function (n) {\n                if ((r = o[n.id])) {\n                  if (i.get(\"animate\") && \"node\" === t) {\n                    var a = r.getContainer().getMatrix();\n                    a || (a = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                      r.set(\"originAttrs\", { x: a[6], y: a[7] });\n                  }\n                  i.updateItem(r, n, !1);\n                } else r = i.addItem(t, n, !1);\n                r && e[\"\".concat(t, \"s\")].push(r);\n              });\n            }),\n            (e.prototype.changeData = function (t, e) {\n              void 0 === e && (e = !0);\n              var n = this;\n              if (!wt(t)) return this;\n              e &&\n                this.get(\"enabledStack\") &&\n                this.pushStack(\"changedata\", { before: n.save(), after: t }),\n                this.set(\"comboSorted\", !1),\n                this.removeHulls(),\n                this.getNodes().map(function (t) {\n                  return n.clearItemStates(t);\n                }),\n                this.getEdges().map(function (t) {\n                  return n.clearItemStates(t);\n                });\n              var r = this.get(\"canvas\"),\n                i = r.get(\"localRefresh\");\n              r.set(\"localRefresh\", !1),\n                n.get(\"data\") || (n.data(t), n.render());\n              var o = this.get(\"itemMap\"),\n                a = { nodes: [], edges: [] },\n                s = t.combos;\n              if (s) {\n                var u = yt(s, t.nodes);\n                this.set(\"comboTrees\", u);\n              }\n              this.diffItems(\"node\", a, t.nodes),\n                Object(c.each)(o, function (t, e) {\n                  (o[e].getModel().depth = 0),\n                    (t.getType && \"edge\" === t.getType()) ||\n                      (t.getType && \"combo\" === t.getType()\n                        ? (delete o[e], t.destroy())\n                        : a.nodes.indexOf(t) < 0 &&\n                          (delete o[e], n.remove(t, !1)));\n                });\n              for (var h = this.getCombos(), l = h.length - 1; l >= 0; l--)\n                h[l].destroyed && h.splice(l, 1);\n              s &&\n                (n.addCombos(s), this.get(\"groupByTypes\") || this.sortCombos()),\n                this.diffItems(\"edge\", a, t.edges),\n                Object(c.each)(o, function (t, e) {\n                  (!t.getType ||\n                    (\"node\" !== t.getType() && \"combo\" !== t.getType())) &&\n                    a.edges.indexOf(t) < 0 &&\n                    (delete o[e], n.remove(t, !1));\n                }),\n                this.set({ nodes: a.nodes, edges: a.edges });\n              var f = this.get(\"layoutController\");\n              return (\n                f &&\n                  (f.changeData(),\n                  n.get(\"animate\") && !f.getLayoutType()\n                    ? n.positionsAnimate()\n                    : n.autoPaint()),\n                setTimeout(function () {\n                  r.set(\"localRefresh\", i);\n                }, 16),\n                this\n              );\n            }),\n            (e.prototype.addCombos = function (t) {\n              var e = this.get(\"comboTrees\");\n              this.get(\"itemController\").addCombos(e, t);\n            }),\n            (e.prototype.createCombo = function (t, e) {\n              var n = this;\n              this.set(\"comboSorted\", !1);\n              var r,\n                i = \"\";\n              if (t) {\n                if (Object(c.isString)(t)) (i = t), (r = { id: t });\n                else {\n                  if (!(i = t.id))\n                    return void console.warn(\n                      \"Create combo failed. Please assign a unique string id for the adding combo.\",\n                    );\n                  r = t;\n                }\n                var o = e.map(function (t) {\n                  var e = n.findById(t),\n                    r = e.getModel(),\n                    o = \"\";\n                  e.getType && (o = e.getType());\n                  var a = { id: e.getID(), itemType: o };\n                  return (\n                    \"combo\" === o\n                      ? ((a.parentId = i), (r.parentId = i))\n                      : \"node\" === o && ((a.comboId = i), (r.comboId = i)),\n                    a\n                  );\n                });\n                (r.children = o),\n                  this.addItem(\"combo\", r, !1),\n                  this.set(\"comboSorted\", !1);\n                var a = this.get(\"comboTrees\");\n                (a || []).forEach(function (t) {\n                  pt(t, function (t) {\n                    return (\n                      t.id !== i ||\n                      ((t.itemType = \"combo\"), (t.children = o), !1)\n                    );\n                  });\n                }),\n                  a && this.sortCombos();\n              }\n            }),\n            (e.prototype.uncombo = function (t) {\n              var e = this,\n                n = t;\n              if (\n                (Object(c.isString)(t) && (n = this.findById(t)),\n                !n || (n.getType && \"combo\" !== n.getType()))\n              )\n                console.warn(\"The item is not a combo!\");\n              else {\n                var r = n.getModel().parentId,\n                  i = this.get(\"comboTrees\");\n                i || (i = []);\n                var o,\n                  a = this.get(\"itemMap\"),\n                  s = n.get(\"id\"),\n                  u = [],\n                  h = this.get(\"combos\"),\n                  l = this.findById(r);\n                if (\n                  (i.forEach(function (i) {\n                    o ||\n                      pt(i, function (i) {\n                        if (i.id === s) {\n                          (o = i),\n                            n.getEdges().forEach(function (t) {\n                              e.removeItem(t, !1);\n                            });\n                          var c = h.indexOf(t);\n                          h.splice(c, 1), delete a[s], n.destroy();\n                        }\n                        return (\n                          !r ||\n                          !o ||\n                          i.id !== r ||\n                          (l.removeCombo(n),\n                          -1 !== (c = (u = i.children).indexOf(o)) &&\n                            u.splice(c, 1),\n                          o.children.forEach(function (t) {\n                            var n = e.findById(t.id),\n                              i = n.getModel();\n                            n.getType && \"combo\" === n.getType()\n                              ? ((t.parentId = r),\n                                delete t.comboId,\n                                (i.parentId = r),\n                                delete i.comboId)\n                              : n.getType &&\n                                \"node\" === n.getType() &&\n                                ((t.comboId = r), (i.comboId = r)),\n                              l.addChild(n),\n                              u.push(t);\n                          }),\n                          !1)\n                        );\n                      });\n                  }),\n                  !r && o)\n                ) {\n                  var f = i.indexOf(o);\n                  i.splice(f, 1),\n                    o.children.forEach(function (t) {\n                      t.parentId = void 0;\n                      var n = e.findById(t.id).getModel();\n                      delete n.parentId,\n                        delete n.comboId,\n                        \"node\" !== t.itemType && i.push(t);\n                    });\n                }\n              }\n            }),\n            (e.prototype.updateCombos = function () {\n              var t = this,\n                e = this.get(\"comboTrees\"),\n                n = this.get(\"itemController\"),\n                r = this.get(\"itemMap\");\n              (e || []).forEach(function (e) {\n                pt(e, function (e) {\n                  if (!e) return !0;\n                  var i = r[e.id];\n                  if (i && i.getType && \"combo\" === i.getType()) {\n                    var o = Object(f.f)([], i.getStates(), !0);\n                    Object(c.each)(o, function (e) {\n                      return t.setItemState(i, e, !1);\n                    }),\n                      n.updateCombo(i, e.children),\n                      Object(c.each)(o, function (e) {\n                        return t.setItemState(i, e, !0);\n                      });\n                  }\n                  return !0;\n                });\n              }),\n                this.sortCombos();\n            }),\n            (e.prototype.updateCombo = function (t) {\n              var e,\n                n = this,\n                r = t;\n              if (\n                (Object(c.isString)(t) && (r = this.findById(t)),\n                !r || (r.getType && \"combo\" !== r.getType()))\n              )\n                console.warn(\"The item to be updated is not a combo!\");\n              else {\n                e = r.get(\"id\");\n                var i = this.get(\"comboTrees\"),\n                  o = this.get(\"itemController\"),\n                  a = this.get(\"itemMap\");\n                (i || []).forEach(function (t) {\n                  pt(t, function (t) {\n                    if (!t) return !0;\n                    var r = a[t.id];\n                    if (\n                      e === t.id &&\n                      r &&\n                      r.getType &&\n                      \"combo\" === r.getType()\n                    ) {\n                      var i = Object(f.f)([], r.getStates(), !0);\n                      Object(c.each)(i, function (t) {\n                        r.getStateStyle(t) && n.setItemState(r, t, !1);\n                      }),\n                        o.updateCombo(r, t.children),\n                        Object(c.each)(i, function (t) {\n                          r.getStateStyle(t) && n.setItemState(r, t, !0);\n                        }),\n                        e && (e = t.parentId);\n                    }\n                    return !0;\n                  });\n                });\n              }\n            }),\n            (e.prototype.updateComboTree = function (t, e, n) {\n              void 0 === n && (n = !0);\n              var r;\n              this.set(\"comboSorted\", !1);\n              var i,\n                o = (r = Object(c.isString)(t)\n                  ? this.findById(t)\n                  : t).getModel(),\n                a = o.comboId || o.parentId,\n                s = \"\";\n              if ((r.getType && (s = r.getType()), e && \"combo\" === s)) {\n                var u,\n                  h = this.get(\"comboTrees\"),\n                  l = !0;\n                if (\n                  ((h || []).forEach(function (t) {\n                    u ||\n                      dt(t, function (t) {\n                        if (!u) return t.id === r.getID() && (u = t), !0;\n                      });\n                  }),\n                  dt(u, function (t) {\n                    return t.id !== e || ((l = !1), !1);\n                  }),\n                  !l)\n                )\n                  return void console.warn(\n                    \"Failed to update the combo tree! The parentId points to a descendant of the combo!\",\n                  );\n              }\n              if (n && this.get(\"enabledStack\")) {\n                var f = {},\n                  d = {};\n                \"combo\" === s\n                  ? ((f.combos = [{ id: o.id, parentId: o.parentId }]),\n                    (d.combos = [{ id: o.id, parentId: e }]))\n                  : \"node\" === s &&\n                    ((f.nodes = [{ id: o.id, parentId: o.comboId }]),\n                    (d.nodes = [{ id: o.id, parentId: e }])),\n                  this.pushStack(\"updateComboTree\", { before: f, after: d });\n              }\n              if (o.parentId || o.comboId) {\n                var p = this.findById(o.parentId || o.comboId);\n                p && p.removeChild(r);\n              }\n              (\"combo\" === s\n                ? (o.parentId = e)\n                : \"node\" === s && (o.comboId = e),\n              e) &&\n                (i = this.findById(e)) &&\n                i.addChild(r);\n              a && (i = this.findById(a)) && i.removeChild(r);\n              var g = mt(this.get(\"comboTrees\"), o.id, e);\n              this.set(\"comboTrees\", g), this.updateCombos();\n            }),\n            (e.prototype.save = function () {\n              var t = [],\n                e = [],\n                n = [];\n              return (\n                Object(c.each)(this.get(\"nodes\"), function (e) {\n                  t.push(e.getModel());\n                }),\n                Object(c.each)(this.get(\"edges\"), function (t) {\n                  e.push(t.getModel());\n                }),\n                Object(c.each)(this.get(\"combos\"), function (t) {\n                  n.push(t.getModel());\n                }),\n                { nodes: t, edges: e, combos: n }\n              );\n            }),\n            (e.prototype.changeSize = function (t, e) {\n              return this.get(\"viewController\").changeSize(t, e), this;\n            }),\n            (e.prototype.refresh = function () {\n              if ((this.emit(\"beforegraphrefresh\"), this.get(\"animate\")))\n                this.positionsAnimate();\n              else {\n                var t = this.get(\"nodes\"),\n                  e = this.get(\"edges\"),\n                  n = this.get(\"edges\");\n                Object(c.each)(t, function (t) {\n                  t.refresh();\n                }),\n                  Object(c.each)(e, function (t) {\n                    t.refresh();\n                  }),\n                  Object(c.each)(n, function (t) {\n                    t.refresh();\n                  });\n              }\n              this.emit(\"aftergraphrefresh\"), this.autoPaint();\n            }),\n            (e.prototype.getNodes = function () {\n              return this.get(\"nodes\");\n            }),\n            (e.prototype.getEdges = function () {\n              return this.get(\"edges\");\n            }),\n            (e.prototype.getCombos = function () {\n              return this.get(\"combos\");\n            }),\n            (e.prototype.getComboChildren = function (t) {\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                t && (!t.getType || \"combo\" === t.getType()))\n              )\n                return t.getChildren();\n              console.warn(\"The combo does not exist!\");\n            }),\n            (e.prototype.positionsAnimate = function () {\n              var t = this;\n              t.emit(\"beforeanimate\");\n              var e = t.get(\"animateCfg\"),\n                n = e.onFrame,\n                r = t.getNodes(),\n                i = r.map(function (t) {\n                  var e = t.getModel();\n                  return { id: e.id, x: e.x, y: e.y };\n                });\n              t.isAnimating() && t.stopAnimate(),\n                t.get(\"canvas\").animate(\n                  function (e) {\n                    Object(c.each)(i, function (r) {\n                      var i = t.findById(r.id);\n                      if (i && !i.destroyed) {\n                        var o = i.get(\"originAttrs\"),\n                          a = i.get(\"model\");\n                        if (!o) {\n                          var s = i.getContainer().getMatrix();\n                          s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                            (o = { x: s[6], y: s[7] }),\n                            i.set(\"originAttrs\", o);\n                        }\n                        if (n) {\n                          var c = n(i, e, r, o);\n                          i.set(\"model\", Object.assign(a, c));\n                        } else\n                          (a.x = o.x + (r.x - o.x) * e),\n                            (a.y = o.y + (r.y - o.y) * e);\n                      }\n                    }),\n                      t.refreshPositions();\n                  },\n                  {\n                    duration: e.duration,\n                    easing: e.easing,\n                    callback: function () {\n                      Object(c.each)(r, function (t) {\n                        t.set(\"originAttrs\", null);\n                      }),\n                        e.callback && e.callback(),\n                        t.emit(\"afteranimate\"),\n                        (t.animating = !1);\n                    },\n                  },\n                );\n            }),\n            (e.prototype.refreshPositions = function () {\n              this.emit(\"beforegraphrefreshposition\");\n              var t,\n                e = this.get(\"nodes\"),\n                n = this.get(\"edges\"),\n                r = this.get(\"vedges\"),\n                i = this.get(\"combos\"),\n                o = {};\n              Object(c.each)(e, function (e) {\n                t = e.getModel();\n                var n = e.get(\"originAttrs\");\n                if (!n || t.x !== n.x || t.y !== n.y) {\n                  var r = e.updatePosition({ x: t.x, y: t.y });\n                  (o[t.id] = r),\n                    t.comboId && (o[t.comboId] = o[t.comboId] || r);\n                }\n              }),\n                i && 0 !== i.length && this.updateCombos(),\n                Object(c.each)(n, function (t) {\n                  var e = t.getSource().getModel(),\n                    n = t.getTarget();\n                  if (!Object(c.isPlainObject)(n)) {\n                    var r = n.getModel();\n                    (o[e.id] || o[r.id] || t.getModel().isComboEdge) &&\n                      t.refresh();\n                  }\n                }),\n                Object(c.each)(r, function (t) {\n                  t.refresh();\n                }),\n                this.emit(\"aftergraphrefreshposition\"),\n                this.autoPaint();\n            }),\n            (e.prototype.stopAnimate = function () {\n              this.get(\"canvas\").stopAnimate();\n            }),\n            (e.prototype.isAnimating = function () {\n              return this.animating;\n            }),\n            (e.prototype.getZoom = function () {\n              var t = this.get(\"group\").getMatrix();\n              return t ? t[0] : 1;\n            }),\n            (e.prototype.getCurrentMode = function () {\n              return this.get(\"modeController\").getMode();\n            }),\n            (e.prototype.setMode = function (t) {\n              return this.get(\"modeController\").setMode(t), this;\n            }),\n            (e.prototype.clear = function (t) {\n              return (\n                void 0 === t && (t = !1),\n                this.get(\"canvas\").clear(),\n                this.initGroups(),\n                this.set({\n                  itemMap: {},\n                  nodes: [],\n                  edges: [],\n                  groups: [],\n                  combos: [],\n                  comboTrees: [],\n                }),\n                t || this.emit(\"afterrender\"),\n                this\n              );\n            }),\n            (e.prototype.updateLayout = function (t) {\n              var e = this.get(\"layoutController\");\n              Object(c.isString)(t) && (t = { type: t });\n              var n = this.get(\"layout\"),\n                r = {};\n              Object.assign(r, n, t),\n                this.set(\"layout\", r),\n                e.isLayoutTypeSame(r) && r.gpuEnabled === n.gpuEnabled\n                  ? e.updateLayoutCfg(r)\n                  : e.changeLayout(r);\n            }),\n            (e.prototype.destroyLayout = function () {\n              this.get(\"layoutController\").destroyLayout();\n            }),\n            (e.prototype.layout = function () {\n              var t = this.get(\"layoutController\"),\n                e = this.get(\"layout\");\n              e &&\n                t &&\n                (e.workerEnabled\n                  ? t.layout()\n                  : t.layoutMethod\n                  ? t.relayout(!0)\n                  : t.layout());\n            }),\n            (e.prototype.collapseCombo = function (t) {\n              var e = this;\n              if ((Object(c.isString)(t) && (t = this.findById(t)), t)) {\n                this.emit(\"beforecollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n                var n = t.getModel();\n                this.get(\"itemController\").collapseCombo(t), (n.collapsed = !0);\n                var r = this.getEdges().concat(this.get(\"vedges\")),\n                  i = [],\n                  o = [],\n                  a = this.get(\"comboTrees\"),\n                  s = !1;\n                (a || []).forEach(function (t) {\n                  s ||\n                    dt(t, function (t) {\n                      if (s && t.depth <= n.depth) return !1;\n                      if ((n.id === t.id && (s = !0), s)) {\n                        var r = e.findById(t.id);\n                        r &&\n                          r.getType &&\n                          \"combo\" === r.getType() &&\n                          ((i = i.concat(r.getNodes())),\n                          (o = o.concat(r.getCombos())));\n                      }\n                      return !0;\n                    });\n                });\n                var u = {},\n                  h = [];\n                r.forEach(function (t) {\n                  if (!t.isVisible() || t.getModel().isVEdge) {\n                    var r = t.getSource(),\n                      a = t.getTarget();\n                    if (\n                      ((i.includes(r) || o.includes(r)) &&\n                        !i.includes(a) &&\n                        !o.includes(a)) ||\n                      r.getModel().id === n.id\n                    ) {\n                      if ((f = t.getModel()).isVEdge)\n                        return void e.removeItem(t, !1);\n                      for (var s = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(s.parentId || s.comboId)) ||\n                          (!s.parentId && !s.comboId)\n                        )\n                          return;\n                        s = a.getModel();\n                      }\n                      var c = s.id;\n                      if (u[\"\".concat(n.id, \"-\").concat(c)])\n                        return void (u[\"\".concat(n.id, \"-\").concat(c)] +=\n                          f.size || 1);\n                      var l = e.addItem(\n                        \"vedge\",\n                        { source: n.id, target: c, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[\"\".concat(n.id, \"-\").concat(c)] = f.size || 1),\n                        h.push(l);\n                    } else if (\n                      (!i.includes(r) &&\n                        !o.includes(r) &&\n                        (i.includes(a) || o.includes(a))) ||\n                      a.getModel().id === n.id\n                    ) {\n                      var f;\n                      if ((f = t.getModel()).isVEdge)\n                        return void e.removeItem(t, !1);\n                      for (var d = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(d.parentId || d.comboId)) ||\n                          (!d.parentId && !d.comboId)\n                        )\n                          return;\n                        d = r.getModel();\n                      }\n                      var p = d.id;\n                      if (u[\"\".concat(p, \"-\").concat(n.id)])\n                        return void (u[\"\".concat(p, \"-\").concat(n.id)] +=\n                          f.size || 1);\n                      l = e.addItem(\n                        \"vedge\",\n                        { target: n.id, source: p, isVEdge: !0 },\n                        !1,\n                      );\n                      (u[\"\".concat(p, \"-\").concat(n.id)] = f.size || 1),\n                        h.push(l);\n                    }\n                  }\n                }),\n                  h.forEach(function (t) {\n                    var n = t.getModel();\n                    e.updateItem(\n                      t,\n                      { size: u[\"\".concat(n.source, \"-\").concat(n.target)] },\n                      !1,\n                    );\n                  }),\n                  this.emit(\"aftercollapseexpandcombo\", {\n                    action: \"collapse\",\n                    item: t,\n                  });\n              } else console.warn(\"The combo to be collapsed does not exist!\");\n            }),\n            (e.prototype.expandCombo = function (t) {\n              var e = this;\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                !t || (t.getType && \"combo\" !== t.getType()))\n              )\n                console.warn(\"The combo to be collapsed does not exist!\");\n              else {\n                this.emit(\"beforecollapseexpandcombo\", {\n                  action: \"expand\",\n                  item: t,\n                });\n                var n = t.getModel();\n                this.get(\"itemController\").expandCombo(t), (n.collapsed = !1);\n                var r = this.getEdges().concat(this.get(\"vedges\")),\n                  i = [],\n                  o = [],\n                  a = this.get(\"comboTrees\"),\n                  s = !1;\n                (a || []).forEach(function (t) {\n                  s ||\n                    dt(t, function (t) {\n                      if (s && t.depth <= n.depth) return !1;\n                      if ((n.id === t.id && (s = !0), s)) {\n                        var r = e.findById(t.id);\n                        r &&\n                          r.getType &&\n                          \"combo\" === r.getType() &&\n                          ((i = i.concat(r.getNodes())),\n                          (o = o.concat(r.getCombos())));\n                      }\n                      return !0;\n                    });\n                });\n                var u = {},\n                  h = {};\n                r.forEach(function (t) {\n                  if (!t.isVisible() || t.getModel().isVEdge) {\n                    var r = t.getSource(),\n                      a = t.getTarget(),\n                      s = r.get(\"id\"),\n                      c = a.get(\"id\");\n                    if (\n                      ((i.includes(r) || o.includes(r)) &&\n                        !i.includes(a) &&\n                        !o.includes(a)) ||\n                      s === n.id\n                    ) {\n                      if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                      for (var l = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(l.comboId || l.parentId)) ||\n                          (!l.parentId && !l.comboId)\n                        )\n                          return;\n                        l = a.getModel();\n                      }\n                      c = l.id;\n                      for (var f = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(f.comboId || f.parentId)) ||\n                          (!f.parentId && !f.comboId)\n                        )\n                          return;\n                        if (f.comboId === n.id || f.parentId === n.id) break;\n                        f = r.getModel();\n                      }\n                      if (((s = f.id), c)) {\n                        var d = \"\".concat(s, \"-\").concat(c);\n                        if (u[d])\n                          return (\n                            (u[d] += t.getModel().size || 1),\n                            void e.updateItem(h[d], { size: u[d] }, !1)\n                          );\n                        var p = e.addItem(\n                          \"vedge\",\n                          { source: s, target: c, isVEdge: !0 },\n                          !1,\n                        );\n                        (u[d] = t.getModel().size || 1), (h[d] = p);\n                      }\n                    } else if (\n                      (!i.includes(r) &&\n                        !o.includes(r) &&\n                        (i.includes(a) || o.includes(a))) ||\n                      c === n.id\n                    ) {\n                      if (t.getModel().isVEdge) return void e.removeItem(t, !1);\n                      for (f = r.getModel(); !r.isVisible(); ) {\n                        if (\n                          !(r = e.findById(f.comboId || f.parentId)) ||\n                          (!f.parentId && !f.comboId)\n                        )\n                          return;\n                        f = r.getModel();\n                      }\n                      s = f.id;\n                      for (l = a.getModel(); !a.isVisible(); ) {\n                        if (\n                          !(a = e.findById(l.comboId || l.parentId)) ||\n                          (!l.parentId && !l.comboId)\n                        )\n                          return;\n                        if (l.comboId === n.id || l.parentId === n.id) break;\n                        l = a.getModel();\n                      }\n                      if (((c = l.id), s)) {\n                        d = \"\".concat(s, \"-\").concat(c);\n                        if (u[d])\n                          return (\n                            (u[d] += t.getModel().size || 1),\n                            void e.updateItem(h[d], { size: u[d] }, !1)\n                          );\n                        p = e.addItem(\n                          \"vedge\",\n                          { target: c, source: s, isVEdge: !0 },\n                          !1,\n                        );\n                        (u[d] = t.getModel().size || 1), (h[d] = p);\n                      }\n                    } else\n                      (i.includes(r) || o.includes(r)) &&\n                        (i.includes(a) || o.includes(a)) &&\n                        r.isVisible() &&\n                        a.isVisible() &&\n                        t.show();\n                  }\n                }),\n                  this.emit(\"aftercollapseexpandcombo\", {\n                    action: \"expand\",\n                    item: t,\n                  });\n              }\n            }),\n            (e.prototype.collapseExpandCombo = function (t) {\n              if (\n                (Object(c.isString)(t) && (t = this.findById(t)),\n                t && (!t.getType || \"combo\" === t.getType()))\n              ) {\n                for (var e = t.getModel(), n = this.findById(e.parentId); n; ) {\n                  var r = n.getModel();\n                  if (r.collapsed)\n                    return (\n                      console.warn(\n                        \"Fail to expand the combo since it's ancestor combo is collapsed.\",\n                      ),\n                      void (n = void 0)\n                    );\n                  n = this.findById(r.parentId);\n                }\n                e.collapsed ? this.expandCombo(t) : this.collapseCombo(t),\n                  this.updateCombo(t);\n              }\n            }),\n            (e.prototype.sortCombos = function () {\n              var t = this;\n              if (!this.get(\"comboSorted\")) {\n                this.set(\"comboSorted\", !0);\n                var e = [],\n                  n = {};\n                (this.get(\"comboTrees\") || []).forEach(function (t) {\n                  dt(t, function (t) {\n                    return (\n                      e[t.depth]\n                        ? e[t.depth].push(t.id)\n                        : (e[t.depth] = [t.id]),\n                      (n[t.id] = t.depth),\n                      !0\n                    );\n                  });\n                }),\n                  (this.getEdges().concat(this.get(\"vedges\")) || []).forEach(\n                    function (t) {\n                      var r = t.getModel(),\n                        i = n[r.source] || 0,\n                        o = n[r.target] || 0,\n                        a = Math.max(i, o);\n                      e[a] ? e[a].push(r.id) : (e[a] = [r.id]);\n                    },\n                  ),\n                  e.forEach(function (e) {\n                    if (e && e.length)\n                      for (var n = e.length - 1; n >= 0; n--) {\n                        var r = t.findById(e[n]);\n                        r && r.toFront();\n                      }\n                  });\n              }\n            }),\n            (e.prototype.getNeighbors = function (t, e) {\n              var n = t;\n              return (\n                Object(c.isString)(t) && (n = this.findById(t)),\n                n.getNeighbors(e)\n              );\n            }),\n            (e.prototype.getNodeDegree = function (t, e, n) {\n              void 0 === e && (e = void 0), void 0 === n && (n = !1);\n              var r = t;\n              Object(c.isString)(t) && (r = this.findById(t));\n              var i = this.get(\"degrees\");\n              (i && !n) ||\n                ((i = Object(v.getDegree)(this.save())),\n                this.set(\"degrees\", i));\n              var o = i[r.getID()],\n                a = 0;\n              if (!o) return 0;\n              switch (e) {\n                case \"in\":\n                  a = o.inDegree;\n                  break;\n                case \"out\":\n                  a = o.outDegree;\n                  break;\n                case \"all\":\n                  a = o;\n                  break;\n                default:\n                  a = o.degree;\n              }\n              return a;\n            }),\n            (e.prototype.getUndoStack = function () {\n              return this.undoStack;\n            }),\n            (e.prototype.getRedoStack = function () {\n              return this.redoStack;\n            }),\n            (e.prototype.getStackData = function () {\n              return this.get(\"enabledStack\")\n                ? {\n                    undoStack: this.undoStack.toArray(),\n                    redoStack: this.redoStack.toArray(),\n                  }\n                : null;\n            }),\n            (e.prototype.clearStack = function () {\n              this.get(\"enabledStack\") &&\n                (this.undoStack.clear(), this.redoStack.clear());\n            }),\n            (e.prototype.pushStack = function (t, e, n) {\n              if (\n                (void 0 === t && (t = \"update\"),\n                void 0 === n && (n = \"undo\"),\n                this.get(\"enabledStack\"))\n              ) {\n                var r = e\n                  ? Object(c.clone)(e)\n                  : { before: {}, after: Object(c.clone)(this.save()) };\n                \"redo\" === n\n                  ? this.redoStack.push({ action: t, data: r })\n                  : this.undoStack.push({ action: t, data: r }),\n                  this.emit(\"stackchange\", {\n                    undoStack: this.undoStack,\n                    redoStack: this.redoStack,\n                  });\n              } else\n                console.warn(\n                  \"请先启用 undo & redo 功能，在实例化 Graph 时候配置 enabledStack: true !\",\n                );\n            }),\n            (e.prototype.getAdjMatrix = function (t, e) {\n              void 0 === t && (t = !0),\n                void 0 === e && (e = this.get(\"directed\"));\n              var n = this.get(\"adjMatrix\");\n              return (\n                (n && t) ||\n                  ((n = Object(v.getAdjMatrix)(this.save(), e)),\n                  this.set(\"adjMatrix\", n)),\n                n\n              );\n            }),\n            (e.prototype.getShortestPathMatrix = function (t, e) {\n              void 0 === t && (t = !0),\n                void 0 === e && (e = this.get(\"directed\"));\n              var n = this.get(\"adjMatrix\"),\n                r = this.get(\"shortestPathMatrix\");\n              return (\n                (n && t) ||\n                  ((n = Object(v.getAdjMatrix)(this.save(), e)),\n                  this.set(\"adjMatrix\", n)),\n                (r && t) ||\n                  ((r = Object(v.floydWarshall)(this.save(), e)),\n                  this.set(\"shortestPathMatrix\", r)),\n                r\n              );\n            }),\n            (e.prototype.on = function (e, n, r) {\n              return t.prototype.on.call(this, e, n, r);\n            }),\n            (e.prototype.destroy = function () {\n              this.clear(),\n                Object(p.clearAnimationFrame)(this.timeIndex),\n                this.clearStack(),\n                this.get(\"itemController\").destroy(),\n                this.get(\"modeController\").destroy(),\n                this.get(\"viewController\").destroy(),\n                this.get(\"stateController\").destroy(),\n                this.get(\"canvas\").destroy(),\n                (this.cfg = null),\n                (this.destroyed = !0),\n                (this.redoStack = null),\n                (this.undoStack = null);\n            }),\n            (e.prototype.createHull = function (t) {\n              if (t.members && !(t.members.length < 1)) {\n                var e = this.get(\"hullGroup\"),\n                  n = this.get(\"hullMap\");\n                if (\n                  (n || ((n = {}), this.set(\"hullMap\", n)),\n                  (e && !e.get(\"destroyed\")) ||\n                    ((e = this.get(\"group\").addGroup({\n                      id: \"hullGroup\",\n                    })).toBack(),\n                    this.set(\"hullGroup\", e)),\n                  n[t.id])\n                )\n                  return console.warn(\"Existed hull id.\"), n[t.id];\n                var r = e.addGroup({ id: \"\".concat(t.id, \"-container\") }),\n                  i = new be(\n                    this,\n                    Object(f.a)(Object(f.a)({}, t), { group: r }),\n                  );\n                return (n[i.id] = i), i;\n              }\n              console.warn(\"Create hull failed! The members is empty.\");\n            }),\n            (e.prototype.getHulls = function () {\n              return this.get(\"hullMap\");\n            }),\n            (e.prototype.getHullById = function (t) {\n              return this.get(\"hullMap\")[t];\n            }),\n            (e.prototype.removeHull = function (t) {\n              var e;\n              (e = Object(c.isString)(t) ? this.getHullById(t) : t),\n                delete this.get(\"hullMap\")[e.id],\n                e.destroy();\n            }),\n            (e.prototype.removeHulls = function () {\n              var t = this.getHulls();\n              t &&\n                Object.keys(t).length &&\n                (Object.keys(t).forEach(function (e) {\n                  t[e].destroy();\n                }),\n                this.set(\"hullMap\", {}));\n            }),\n            (e.prototype.onTick = function (t) {\n              var e = this.get(\"layoutController\");\n              e &&\n                (e.onTick(t),\n                (this.timeIndex = Object(p.requestAnimationFrame)(\n                  this.onTick.bind(this),\n                )));\n            }),\n            e\n          );\n        })(d.a);\n      function we(t) {\n        return (we =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var Oe = g.a.transform,\n        Me = [\"startArrow\", \"endArrow\"],\n        ke = {\n          lineWidth: 1,\n          stroke: void 0,\n          fill: void 0,\n          lineAppendWidth: 1,\n          opacity: void 0,\n          strokeOpacity: void 0,\n          fillOpacity: void 0,\n          x: 0,\n          y: 0,\n          r: 10,\n          width: 20,\n          height: 20,\n          shadowColor: void 0,\n          shadowBlur: 0,\n          shadowOffsetX: 0,\n          shadowOffsetY: 0,\n        },\n        je = {\n          edge: {\n            lineWidth: 1,\n            stroke: \"#000\",\n            lineDash: void 0,\n            startArrow: !1,\n            endArrow: !1,\n            opacity: void 0,\n            strokeOpacity: void 0,\n            fillOpacity: void 0,\n            shadowColor: void 0,\n            shadowBlur: 0,\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n          },\n          node: ke,\n          combo: ke,\n        },\n        Ce = {\n          options: {},\n          itemType: \"\",\n          type: \"\",\n          getCustomConfig: function (t) {\n            return {};\n          },\n          getOptions: function (t) {\n            return Object(c.deepMix)(\n              {\n                labelCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n                descriptionCfg: {\n                  style: {\n                    fontFamily:\n                      (\"undefined\" != typeof window &&\n                        window.getComputedStyle &&\n                        window\n                          .getComputedStyle(document.body, null)\n                          .getPropertyValue(\"font-family\")) ||\n                      \"Arial, sans-serif\",\n                  },\n                },\n              },\n              this.options,\n              this.getCustomConfig(t) || {},\n              t,\n            );\n          },\n          draw: function (t, e) {\n            var n = this.drawShape(t, e);\n            (n.set(\"className\", this.itemType + \"-shape\"), t.label) &&\n              this.drawLabel(t, e).set(\"className\", this.itemType + \"-label\");\n            return n;\n          },\n          afterDraw: function (t, e, n) {},\n          drawShape: function (t, e) {\n            return null;\n          },\n          drawLabel: function (t, e) {\n            var n = this.getOptions(t).labelCfg || {},\n              r = this.getLabelStyle(t, n, e),\n              i = r.rotate;\n            delete r.rotate;\n            var o = e.addShape(\"text\", {\n              attrs: r,\n              draggable: !0,\n              className: \"text-shape\",\n              name: \"text-shape\",\n            });\n            if (i) {\n              var a = o.getBBox(),\n                s = o.getMatrix();\n              if ((s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]), r.rotateCenter))\n                switch (r.rotateCenter) {\n                  case \"center\":\n                    s = Oe(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                    break;\n                  case \"lefttop\":\n                    s = Oe(s, [\n                      [\"t\", -r.x, -r.y],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y],\n                    ]);\n                    break;\n                  case \"leftcenter\":\n                    s = Oe(s, [\n                      [\"t\", -r.x, -r.y - a.height / 2],\n                      [\"r\", i],\n                      [\"t\", r.x, r.y + a.height / 2],\n                    ]);\n                    break;\n                  default:\n                    s = Oe(s, [\n                      [\"t\", -a.width / 2, -a.height / 2],\n                      [\"r\", i],\n                      [\"t\", a.width / 2, a.height / 2],\n                    ]);\n                }\n              else\n                s = Oe(s, [\n                  [\"t\", -r.x, -r.y - a.height / 2],\n                  [\"r\", i],\n                  [\"t\", r.x, r.y + a.height / 2],\n                ]);\n              o.setMatrix(s);\n            }\n            if (r.background) {\n              var c = this.drawLabelBg(t, e, o),\n                u = this.itemType + \"-label-bg\";\n              c.set(\"classname\", u), o.toFront();\n            }\n            return o;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(c.mix)({}, r, t.labelCfg),\n              o = this.getLabelBgStyleByPosition(n, t, i, e);\n            return e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: o });\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            return { text: t.label };\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            return {};\n          },\n          getLabelStyle: function (t, e, n) {\n            var r = this.getLabelStyleByPosition(t, e, n),\n              i = \"\".concat(this.itemType, \"Label\"),\n              o = nt[i] ? nt[i].style : null;\n            return Object(f.a)(Object(f.a)(Object(f.a)({}, o), r), e.style);\n          },\n          getShapeStyle: function (t) {\n            return t.style;\n          },\n          update: function (t, e) {\n            this.updateShapeStyle(t, e), this.updateLabel(t, e);\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = e.getKeyShape(),\n              i = Object(c.mix)({}, r.attr(), t.style),\n              o = function (t) {\n                var e,\n                  o = i[t];\n                if (Object(c.isPlainObject)(o)) {\n                  var a = n.find(function (e) {\n                    return e.get(\"name\") === t;\n                  });\n                  a && a.attr(o);\n                } else r.attr((((e = {})[t] = o), e));\n              };\n            for (var a in i) o(a);\n          },\n          updateLabel: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getOptions({}).labelCfg,\n              i = this.itemType + \"-label\",\n              o = n.find(function (t) {\n                return t.get(\"className\") === i;\n              }),\n              a = this.itemType + \"-label-bg\",\n              s = n.find(function (t) {\n                return t.get(\"classname\") === a;\n              });\n            if (t.label || \"\" === t.label)\n              if (o) {\n                var u = {};\n                e.getModel && (u = e.getModel().labelCfg);\n                var h = Object(c.deepMix)({}, r, u, t.labelCfg),\n                  l = this.getLabelStyleByPosition(t, h, n),\n                  d = t.labelCfg ? t.labelCfg.style : void 0,\n                  p = h.style && h.style.background,\n                  g = Object(f.a)(Object(f.a)(Object(f.a)({}, o.attr()), l), d),\n                  v = g.rotate;\n                if ((delete g.rotate, v)) {\n                  var y = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                  (y = Oe(y, [\n                    [\"t\", -g.x, -g.y],\n                    [\"r\", v],\n                    [\"t\", g.x, g.y],\n                  ])),\n                    o.resetMatrix(),\n                    o.attr(Object(f.a)(Object(f.a)({}, g), { matrix: y }));\n                } else o.resetMatrix(), o.attr(g);\n                if (s)\n                  if (g.background) {\n                    var m = this.getLabelBgStyleByPosition(o, t, h, n),\n                      b = Object(f.a)(Object(f.a)({}, m), p);\n                    if ((s.resetMatrix(), v)) {\n                      var x = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n                      (x = Oe(x, [\n                        [\"t\", -b.x, -b.y],\n                        [\"r\", v],\n                        [\"t\", b.x, b.y],\n                      ])),\n                        (b.matrix = x);\n                    }\n                    s.attr(b);\n                  } else n.removeChild(s);\n                else\n                  g.background &&\n                    ((s = this.drawLabelBg(t, n, o)).set(\"classname\", a),\n                    o.toFront());\n              } else {\n                this.drawLabel(t, n).set(\"className\", i);\n              }\n          },\n          afterUpdate: function (t, e) {},\n          setState: function (t, e, n) {\n            var r,\n              i,\n              o = n.get(\"keyShape\");\n            if (o && !o.destroyed) {\n              var a = n.getType(),\n                s = Object(c.isBoolean)(e) ? t : \"\".concat(t, \":\").concat(e),\n                u = this.getStateStyle(s, n),\n                h = n.getStateStyle(s);\n              if (h || u) {\n                var l = Object(c.mix)({}, h || u),\n                  f = n.getContainer(),\n                  d = { x: 1, y: 1, cx: 1, cy: 1 };\n                if (\n                  (\"combo\" === a && ((d.r = 1), (d.width = 1), (d.height = 1)),\n                  e)\n                ) {\n                  var p = function (t) {\n                    var e,\n                      n = l[t];\n                    if (Object(c.isPlainObject)(n) && !Me.includes(t)) {\n                      var r = f.find(function (e) {\n                        return e.get(\"name\") === t;\n                      });\n                      r && r.attr(n);\n                    } else o.attr((((e = {})[t] = n), e));\n                  };\n                  for (var g in l) p(g);\n                } else {\n                  var v = St(n.getCurrentStatesStyle()),\n                    y = n.getModel(),\n                    m = Object(c.mix)({}, y.style, St(n.getOriginStyle())),\n                    b = o.get(\"name\"),\n                    x = o.attr(),\n                    S = {};\n                  Object.keys(x).forEach(function (t) {\n                    if (\"img\" !== t) {\n                      var e = x[t];\n                      e && \"object\" === we(e)\n                        ? (S[t] = Object(c.clone)(e))\n                        : (S[t] = e);\n                    }\n                  });\n                  var w = {},\n                    O = function (t) {\n                      var e = l[t];\n                      if (Object(c.isPlainObject)(e) && !Me.includes(t)) {\n                        var n = f.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        if (n) {\n                          var r = Object(c.clone)(n.attr());\n                          Object(c.each)(e, function (e, i) {\n                            if (t === b && S[i] && !d[i]) {\n                              delete S[i];\n                              var s = m[t][i] || je[a][i];\n                              o.attr(i, s);\n                            } else if (r[i] || 0 === r[i]) {\n                              delete r[i];\n                              var c = m[t][i] || je[a][i];\n                              n.attr(i, c);\n                            }\n                          }),\n                            (w[t] = r);\n                        }\n                      } else if (S[t] && !d[t]) {\n                        delete S[t];\n                        var i = m[t] || (m[b] ? m[b][t] : void 0) || je[a][t];\n                        o.attr(t, i);\n                      }\n                    };\n                  for (var M in l) O(M);\n                  for (var g in (b ? (w[b] = S) : Object(c.mix)(w, S), v))\n                    if (!d[g]) {\n                      var k = v[g];\n                      (Object(c.isPlainObject)(k) && !Me.includes(g)) ||\n                        (b\n                          ? (Object(c.mix)(m[b], (((i = {})[g] = k), i)),\n                            delete m[g])\n                          : Object(c.mix)(m, (((r = {})[g] = k), r)),\n                        delete v[g]);\n                    }\n                  var j = {};\n                  Object(c.deepMix)(j, m, w, v);\n                  var C = !1,\n                    E = function (t) {\n                      var e,\n                        n,\n                        r = j[t];\n                      if (Object(c.isPlainObject)(r) && !Me.includes(t)) {\n                        var i = f.find(function (e) {\n                          return e.get(\"name\") === t;\n                        });\n                        i &&\n                          (t === b &&\n                            (\"combo\" === a &&\n                              (delete r.r, delete r.width, delete r.height),\n                            (C = !0)),\n                          i.attr(r));\n                      } else if (!C) {\n                        var s = r || je[a][t];\n                        \"combo\" === a\n                          ? b || o.attr((((e = {})[t] = s), e))\n                          : o.attr((((n = {})[t] = s), n));\n                      }\n                    };\n                  for (var P in j) E(P);\n                }\n              }\n            }\n          },\n          getStateStyle: function (t, e) {\n            var n = e.getModel(),\n              r = e.getType(),\n              i = this.getOptions(n),\n              o = i.stateStyles,\n              a = i.style,\n              s = void 0 === a ? {} : a,\n              u = n.stateStyles ? n.stateStyles[t] : o && o[t];\n            return \"combo\" === r ? Object(c.clone)(u) : Object(c.mix)({}, s, u);\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getAnchorPoints: function (t) {\n            return this.getOptions(t).anchorPoints;\n          },\n        },\n        Ee = {\n          itemType: \"node\",\n          shapeType: \"single-node\",\n          labelPosition: \"center\",\n          offset: nt.nodeLabel.offset,\n          getSize: function (t) {\n            var e = t.size || this.getOptions({}).size || nt.defaultNode.size;\n            return (\n              Object(c.isArray)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(c.isArray)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition;\n            if (\"center\" === n) return { x: 0, y: 0, text: t.label };\n            var r = e.offset;\n            Object(c.isNil)(r) && (r = this.offset);\n            var i,\n              o = this.getSize(t),\n              a = o[0],\n              s = o[1];\n            switch (n) {\n              case \"top\":\n                i = { x: 0, y: 0 - s / 2 - r, textBaseline: \"bottom\" };\n                break;\n              case \"bottom\":\n                i = { x: 0, y: s / 2 + r, textBaseline: \"top\" };\n                break;\n              case \"left\":\n                i = { x: 0 - a / 2 - r, y: 0, textAlign: \"right\" };\n                break;\n              default:\n                i = { x: a / 2 + r, y: 0, textAlign: \"left\" };\n            }\n            return (i.text = t.label), i;\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = Ct(o.padding),\n              u = i.width + s[1] + s[3],\n              h = i.height + s[0] + s[2],\n              l = n.offset;\n            return (\n              Object(c.isNil)(l) && (l = this.offset),\n              (a = { x: i.minX - s[3], y: i.minY - s[0] }),\n              (a = Object(f.a)(Object(f.a)(Object(f.a)({}, a), o), {\n                width: u,\n                height: h,\n              }))\n            );\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"node-shape\",\n            });\n          },\n          updateLinkPoints: function (t, e) {\n            var n,\n              r = this.getOptions(t).linkPoints,\n              i = e.find(function (t) {\n                return \"link-point-left\" === t.get(\"className\");\n              }),\n              o = e.find(function (t) {\n                return \"link-point-right\" === t.get(\"className\");\n              }),\n              a = e.find(function (t) {\n                return \"link-point-top\" === t.get(\"className\");\n              }),\n              s = e.find(function (t) {\n                return \"link-point-bottom\" === t.get(\"className\");\n              });\n            i && (n = i.attr()),\n              o && !n && (n = o.attr()),\n              a && !n && (n = a.attr()),\n              s && !n && (n = s.attr()),\n              n || (n = r);\n            var u = Object(c.mix)({}, n, t.linkPoints),\n              h = u.fill,\n              l = u.stroke,\n              d = u.lineWidth,\n              p = u.size / 2;\n            p || (p = u.r);\n            var g = t.linkPoints\n                ? t.linkPoints\n                : { left: void 0, right: void 0, top: void 0, bottom: void 0 },\n              v = g.left,\n              y = g.right,\n              m = g.top,\n              b = g.bottom,\n              x = this.getSize(t),\n              S = x[0],\n              w = x[1],\n              O = { r: p, fill: h, stroke: l, lineWidth: d };\n            i\n              ? v || void 0 === v\n                ? i.attr(Object(f.a)(Object(f.a)({}, O), { x: -S / 2, y: 0 }))\n                : i.remove()\n              : v &&\n                e.addShape(\"circle\", {\n                  attrs: Object(f.a)(Object(f.a)({}, O), { x: -S / 2, y: 0 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n              o\n                ? (y || void 0 === y || o.remove(),\n                  o.attr(Object(f.a)(Object(f.a)({}, O), { x: S / 2, y: 0 })))\n                : y &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: S / 2, y: 0 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n              a\n                ? (m || void 0 === m || a.remove(),\n                  a.attr(Object(f.a)(Object(f.a)({}, O), { x: 0, y: -w / 2 })))\n                : m &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: 0, y: -w / 2 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n              s\n                ? b || void 0 === b\n                  ? s.attr(Object(f.a)(Object(f.a)({}, O), { x: 0, y: w / 2 }))\n                  : s.remove()\n                : b &&\n                  e.addShape(\"circle\", {\n                    attrs: Object(f.a)(Object(f.a)({}, O), { x: 0, y: w / 2 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n          },\n          updateShape: function (t, e, n, r) {\n            e.get(\"keyShape\").attr(Object(f.a)({}, n)),\n              this.updateLabel(t, e),\n              r && this.updateIcon(t, e);\n          },\n          updateIcon: function (t, e) {\n            var n = this,\n              r = e.getContainer(),\n              i = this.getOptions(t).icon,\n              o = (t.icon ? t.icon : { show: void 0 }).show,\n              a = r.find(function (t) {\n                return t.get(\"className\") === \"\".concat(n.type, \"-icon\");\n              });\n            if (a)\n              if (o || void 0 === o) {\n                var s = Object(c.mix)({}, a.attr(), i),\n                  u = s.width,\n                  h = s.height;\n                a.attr(\n                  Object(f.a)(Object(f.a)({}, s), { x: -u / 2, y: -h / 2 }),\n                );\n              } else a.remove();\n            else if (o) {\n              (u = i.width), (h = i.height);\n              r.addShape(\"image\", {\n                attrs: Object(f.a)(Object(f.a)({}, i), {\n                  x: -u / 2,\n                  y: -h / 2,\n                }),\n                className: \"\".concat(this.type, \"-icon\"),\n                name: \"\".concat(this.type, \"-icon\"),\n              });\n              var l = r.find(function (t) {\n                return \"node-label\" === t.get(\"className\");\n              });\n              l && l.toFront();\n            }\n          },\n        },\n        Pe = Object(f.a)(Object(f.a)({}, Ce), Ee);\n      Wt.registerNode(\"single-node\", Pe);\n      var Ae = {\n          itemType: \"edge\",\n          labelPosition: \"center\",\n          refX: 0,\n          refY: 0,\n          labelAutoRotate: !1,\n          options: {\n            size: nt.defaultEdge.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: nt.defaultEdge.style.stroke,\n              lineAppendWidth: nt.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: nt.edgeLabel.style.fill,\n                fontSize: nt.edgeLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(f.a)({}, nt.edgeStateStyles),\n          },\n          getPath: function (t) {\n            var e = [];\n            return (\n              Object(c.each)(t, function (t, n) {\n                0 === n ? e.push([\"M\", t.x, t.y]) : e.push([\"L\", t.x, t.y]);\n              }),\n              e\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(c.mix)({}, e, n, t.style),\n              i = t.size || nt.defaultEdge.size,\n              o = (t = this.getPathPoints(t)).startPoint,\n              a = t.endPoint,\n              s = this.getControlPoints(t),\n              u = [o];\n            s && (u = u.concat(s)), u.push(a);\n            var h = this.getPath(u);\n            return Object(c.mix)(\n              {},\n              nt.defaultEdge.style,\n              { stroke: nt.defaultEdge.color, lineWidth: i, path: h },\n              r,\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer(),\n              r = { stroke: t.color },\n              i =\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                }) || e.getKeyShape(),\n              o = t.size,\n              a = (t = this.getPathPoints(t)).startPoint,\n              s = t.endPoint,\n              u = this.getControlPoints(t),\n              h = [a];\n            u && (h = h.concat(u)), h.push(s);\n            var l = i.attr(),\n              f = Object(c.mix)({}, r, l, t.style),\n              d = t.sourceNode,\n              p = t.targetNode,\n              g = { radius: f.radius };\n            u ||\n              (g = {\n                source: d,\n                target: p,\n                offset: f.offset,\n                radius: f.radius,\n              }),\n              l.endArrow &&\n                !1 === f.endArrow &&\n                (t.style.endArrow = { path: \"\" }),\n              l.startArrow &&\n                !1 === f.startArrow &&\n                (t.style.startArrow = { path: \"\" });\n            var v = this.getPath(h, g),\n              y = Object(c.mix)(\n                r,\n                i.attr(),\n                { lineWidth: o, path: v },\n                t.style,\n              );\n            i && i.attr(y);\n          },\n          getLabelStyleByPosition: function (t, e, n) {\n            var r,\n              i = e.position || this.labelPosition,\n              o = {},\n              a =\n                n &&\n                n.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            r = \"start\" === i ? 0 : \"end\" === i ? 1 : 0.5;\n            var s,\n              u = e.refX || this.refX,\n              h = e.refY || this.refY;\n            if (\n              t.startPoint.x === t.endPoint.x &&\n              t.startPoint.y === t.endPoint.y\n            )\n              return (\n                (o.x = t.startPoint.x + u),\n                (o.y = t.startPoint.y + h),\n                (o.text = t.label),\n                o\n              );\n            s = Object(c.isNil)(e.autoRotate)\n              ? this.labelAutoRotate\n              : e.autoRotate;\n            var l = lt(a, r, u, h, s);\n            return (\n              (o.x = l.x),\n              (o.y = l.y),\n              (o.rotate = l.rotate),\n              (o.textAlign = this._getTextAlign(i, l.angle)),\n              (o.text = t.label),\n              o\n            );\n          },\n          getLabelBgStyleByPosition: function (t, e, n, r) {\n            if (!t) return {};\n            var i = t.getBBox(),\n              o = n.style && n.style.background;\n            if (!o) return {};\n            var a,\n              s = o.padding,\n              u = i.width + s[1] + s[3],\n              h = i.height + s[0] + s[2],\n              l = n.position || this.labelPosition,\n              d = Object(f.a)(Object(f.a)({}, o), {\n                width: u,\n                height: h,\n                x: i.minX - s[2],\n                y: i.minY - s[0],\n                rotate: 0,\n              });\n            a = Object(c.isNil)(n.autoRotate)\n              ? this.labelAutoRotate\n              : n.autoRotate;\n            var p,\n              g =\n                r &&\n                r.find(function (t) {\n                  return \"edge-shape\" === t.get(\"className\");\n                });\n            p = \"start\" === l ? 0 : \"end\" === l ? 1 : 0.5;\n            var v = n.refX || this.refX,\n              y = n.refY || this.refY;\n            if (\n              e.startPoint.x === e.endPoint.x &&\n              e.startPoint.y === e.endPoint.y\n            )\n              return (\n                (d.x = e.startPoint.x + v - u / 2),\n                (d.y = e.startPoint.y + y - h / 2),\n                d\n              );\n            var m = lt(g, p, v - u / 2, y + h / 2, a),\n              b = m.angle;\n            return (\n              b > 0.5 * Math.PI &&\n                b < 1.5 * Math.PI &&\n                (m = lt(g, p, v + u / 2, y + h / 2, a)),\n              a && ((d.x = m.x), (d.y = m.y)),\n              (d.rotate = m.rotate),\n              d\n            );\n          },\n          _getTextAlign: function (t, e) {\n            var n = \"center\";\n            return e\n              ? ((e %= 2 * Math.PI),\n                \"center\" !== t &&\n                  (n =\n                    (e >= 0 && e <= Math.PI / 2) ||\n                    (e >= 1.5 * Math.PI && e < 2 * Math.PI)\n                      ? t\n                      : (function (t) {\n                          var e = t;\n                          return (\n                            \"start\" === t\n                              ? (e = \"end\")\n                              : \"end\" === t && (e = \"start\"),\n                            e\n                          );\n                        })(t)),\n                n)\n              : t;\n          },\n          getControlPoints: function (t) {\n            return t.controlPoints;\n          },\n          getPathPoints: function (t) {\n            return t;\n          },\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return e.addShape(\"path\", {\n              className: \"edge-shape\",\n              name: \"edge-shape\",\n              attrs: n,\n            });\n          },\n          drawLabel: function (t, e) {\n            var n,\n              r = this.options.labelCfg;\n            n =\n              (\"undefined\" != typeof window &&\n                void 0 !== window.getComputedStyle &&\n                window\n                  .getComputedStyle(document.body, null)\n                  .getPropertyValue(\"font-family\")) ||\n              \"Arial, sans-serif\";\n            var i = Object(c.deepMix)({ fontFamily: n }, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e),\n              a = o.rotate;\n            delete o.rotate;\n            var s = e.addShape(\"text\", { attrs: o, name: \"text-shape\" });\n            if ((a && s.rotateAtStart(a), o.background)) {\n              var u = this.drawLabelBg(t, e, s),\n                h = this.itemType + \"-label-bg\";\n              u.set(\"classname\", h), s.toFront();\n            }\n            return s;\n          },\n          drawLabelBg: function (t, e, n) {\n            var r = this.options.labelCfg,\n              i = Object(c.deepMix)({}, r, t.labelCfg),\n              o = this.getLabelStyle(t, i, e).rotate,\n              a = this.getLabelBgStyleByPosition(n, t, i, e);\n            delete a.rotate;\n            var s = e.addShape(\"rect\", { name: \"text-bg-shape\", attrs: a });\n            return o && s.rotateAtStart(o), s;\n          },\n        },\n        Ie = Object(f.a)(Object(f.a)({}, Ce), Ae);\n      Wt.registerEdge(\"single-edge\", Ie),\n        Wt.registerEdge(\n          \"line\",\n          { getControlPoints: function () {} },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"spline\",\n          {\n            getPath: function (t) {\n              return te(t);\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"arc\",\n          {\n            curveOffset: 20,\n            clockwise: 1,\n            getControlPoints: function (t) {\n              var e,\n                n,\n                r = t.startPoint,\n                i = t.endPoint,\n                o = (r.x + i.x) / 2,\n                a = (r.y + i.y) / 2;\n              if (void 0 !== t.controlPoints) {\n                if (\n                  ((n = t.controlPoints[0]),\n                  (e = j(r, n, i)),\n                  r.x <= i.x && r.y > i.y\n                    ? (this.clockwise = e.x > n.x ? 0 : 1)\n                    : r.x <= i.x && r.y < i.y\n                    ? (this.clockwise = e.x > n.x ? 1 : 0)\n                    : r.x > i.x && r.y <= i.y\n                    ? (this.clockwise = e.y < n.y ? 0 : 1)\n                    : (this.clockwise = e.y < n.y ? 1 : 0),\n                  (n.x - r.x) / (n.y - r.y) == (i.x - r.x) / (i.y - r.y))\n                )\n                  return [];\n              } else {\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  Object(c.isArray)(t.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  t.curveOffset < 0\n                    ? (this.clockwise = 0)\n                    : (this.clockwise = 1);\n                var s = { x: i.x - r.x, y: i.y - r.y },\n                  u = Math.atan2(s.y, s.x);\n                (n = {\n                  x: t.curveOffset * Math.cos(-Math.PI / 2 + u) + o,\n                  y: t.curveOffset * Math.sin(-Math.PI / 2 + u) + a,\n                }),\n                  (e = j(r, n, i));\n              }\n              var h = C(r, e);\n              return [{ x: h, y: h }];\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                2 === t.length\n                  ? e.push([\"L\", t[1].x, t[1].y])\n                  : e.push([\n                      \"A\",\n                      t[1].x,\n                      t[1].y,\n                      0,\n                      0,\n                      this.clockwise,\n                      t[2].x,\n                      t[2].y,\n                    ]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"quadratic\",\n          {\n            curvePosition: 0.5,\n            curveOffset: -20,\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (!e || !e.length) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                  void 0 === t.curvePosition &&\n                    (t.curvePosition = this.curvePosition),\n                  Object(c.isArray)(this.curveOffset) &&\n                    (t.curveOffset = t.curveOffset[0]),\n                  Object(c.isArray)(this.curvePosition) &&\n                    (t.curvePosition = t.curveOffset[0]),\n                  (e = [ee(n, r, t.curvePosition, t.curveOffset)]);\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"Q\", t[1].x, t[1].y, t[2].x, t[2].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"cubic\",\n          {\n            curvePosition: [0.5, 0.5],\n            curveOffset: [-20, 20],\n            getControlPoints: function (t) {\n              var e = t.controlPoints;\n              if (\n                (void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.curvePosition &&\n                  (t.curvePosition = this.curvePosition),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]),\n                !e || !e.length || e.length < 2)\n              ) {\n                var n = t.startPoint,\n                  r = t.endPoint;\n                e = [\n                  ee(n, r, t.curvePosition[0], t.curveOffset[0]),\n                  ee(n, r, t.curvePosition[1], t.curveOffset[1]),\n                ];\n              }\n              return e;\n            },\n            getPath: function (t) {\n              var e = [];\n              return (\n                e.push([\"M\", t[0].x, t[0].y]),\n                e.push([\"C\", t[1].x, t[1].y, t[2].x, t[2].y, t[3].x, t[3].y]),\n                e\n              );\n            },\n          },\n          \"single-edge\",\n        ),\n        Wt.registerEdge(\n          \"cubic-vertical\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.y - e.y,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x, y: e.y + r * this.curvePosition[0] + i[0] },\n                  { x: n.x, y: n.y - r * this.curvePosition[1] + i[1] },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Wt.registerEdge(\n          \"cubic-horizontal\",\n          {\n            curvePosition: [0.5, 0.5],\n            minCurveOffset: [0, 0],\n            curveOffset: void 0,\n            getControlPoints: function (t) {\n              var e = t.startPoint,\n                n = t.endPoint;\n              void 0 === t.curvePosition &&\n                (t.curvePosition = this.curvePosition),\n                void 0 === t.curveOffset && (t.curveOffset = this.curveOffset),\n                void 0 === t.minCurveOffset &&\n                  (t.minCurveOffset = this.minCurveOffset),\n                Object(c.isNumber)(t.curveOffset) &&\n                  (t.curveOffset = [t.curveOffset, -t.curveOffset]),\n                Object(c.isNumber)(t.minCurveOffset) &&\n                  (t.minCurveOffset = [t.minCurveOffset, -t.minCurveOffset]),\n                Object(c.isNumber)(t.curvePosition) &&\n                  (t.curvePosition = [t.curvePosition, 1 - t.curvePosition]);\n              var r = n.x - e.x,\n                i = [0, 0];\n              return (\n                t.curveOffset\n                  ? (i = t.curveOffset)\n                  : Math.abs(r) < Math.abs(t.minCurveOffset[0]) &&\n                    (i = t.minCurveOffset),\n                [\n                  { x: e.x + r * this.curvePosition[0] + i[0], y: e.y },\n                  { x: n.x - r * this.curvePosition[1] + i[1], y: n.y },\n                ]\n              );\n            },\n          },\n          \"cubic\",\n        ),\n        Wt.registerEdge(\n          \"loop\",\n          {\n            getPathPoints: function (t) {\n              return ht(t);\n            },\n            getControlPoints: function (t) {\n              return t.controlPoints;\n            },\n            afterDraw: function (t) {\n              t.controlPoints = void 0;\n            },\n            afterUpdate: function (t) {\n              t.controlPoints = void 0;\n            },\n          },\n          \"cubic\",\n        );\n      var Te = {\n          itemType: \"combo\",\n          shapeType: \"single-combo\",\n          labelPosition: \"top\",\n          refX: nt.comboLabel.refX,\n          refY: nt.comboLabel.refY,\n          options: {\n            style: {\n              stroke: nt.defaultCombo.style.stroke,\n              fill: nt.defaultCombo.style.fill,\n              lineWidth: nt.defaultCombo.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: nt.comboLabel.style.fill,\n                fontSize: nt.comboLabel.style.fontSize,\n              },\n            },\n            stateStyles: Object(f.a)({}, nt.comboStateStyles),\n          },\n          getSize: function (t) {\n            var e = Object(c.clone)(\n              t.size || this.options.size || nt.defaultCombo.size,\n            );\n            return (\n              Object(c.isArray)(e) && 1 === e.length && (e = [e[0], e[0]]),\n              Object(c.isArray)(e) || (e = [e, e]),\n              e\n            );\n          },\n          getLabelStyleByPosition: function (t, e) {\n            var n = e.position || this.labelPosition,\n              r = t.style,\n              i = t.padding || this.options.padding;\n            Object(c.isArray)(i) && (i = i[0]);\n            var o = e.refX,\n              a = e.refY;\n            Object(c.isNil)(o) && (o = this.refX),\n              Object(c.isNil)(a) && (a = this.refY);\n            var s,\n              u = this.getSize(t),\n              h = (Math.max(r.r, u[0] / 2) || u[0] / 2) + i;\n            switch (n) {\n              case \"top\":\n                s = {\n                  x: 0,\n                  y: -h - a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"bottom\":\n                s = {\n                  x: 0,\n                  y: h + a,\n                  textBaseline: \"bottom\",\n                  textAlign: \"center\",\n                };\n                break;\n              case \"left\":\n                s = { x: -h + o, y: 0, textAlign: \"left\" };\n                break;\n              case \"center\":\n                s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                break;\n              default:\n                s = { x: h + o, y: 0, textAlign: \"right\" };\n            }\n            return (s.text = t.label), s;\n          },\n          drawShape: function (t, e) {\n            var n = this.shapeType,\n              r = this.getShapeStyle(t);\n            return e.addShape(n, {\n              attrs: r,\n              draggable: !0,\n              name: \"combo-shape\",\n            });\n          },\n          updateShape: function (t, e, n) {\n            var r = e.get(\"keyShape\");\n            (void 0 === t.animate ? this.options.animate : t.animate) &&\n            r.animate\n              ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n              : r.attr(Object(f.a)({}, n)),\n              this.updateLabel(t, e);\n          },\n        },\n        Ne = Object(f.a)(Object(f.a)({}, Ce), Te);\n      Wt.registerCombo(\"single-combo\", Ne),\n        Wt.registerCombo(\n          \"circle\",\n          {\n            options: {\n              size: [nt.defaultCombo.size[0], nt.defaultCombo.size[0]],\n              padding: nt.defaultCombo.padding[0],\n              animate: !0,\n              style: {\n                stroke: nt.defaultCombo.style.stroke,\n                fill: nt.defaultCombo.style.fill,\n                lineWidth: nt.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.comboLabel.style.fill,\n                  fontSize: nt.comboLabel.style.fontSize,\n                },\n                refX: 0,\n                refY: 0,\n              },\n              stateStyles: Object(f.a)({}, nt.comboStateStyles),\n            },\n            shapeType: \"circle\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return (\n                delete n.height,\n                delete n.width,\n                e.addShape(\"circle\", {\n                  attrs: n,\n                  className: \"circle-combo\",\n                  name: \"circle-combo\",\n                  draggable: !0,\n                })\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(c.isArray)(n) && (n = n[0]);\n              var r,\n                i = { stroke: t.color },\n                o = Object(c.mix)({}, e, i, t.style);\n              if (t.fixSize)\n                r = Object(c.isNumber)(t.fixSize) ? t.fixSize : t.fixSize[0];\n              else {\n                var a = this.getSize(t);\n                r =\n                  !Object(c.isNumber)(o.r) || isNaN(o.r)\n                    ? a[0] / 2 || nt.defaultCombo.style.r\n                    : Math.max(o.r, a[0] / 2) || a[0] / 2;\n              }\n              o.r = r + n;\n              var s = Object(f.a)({ x: 0, y: 0 }, o);\n              return t.style ? (t.style.r = r) : (t.style = { r: r }), s;\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(c.isArray)(r) && (r = r[0]);\n              var i,\n                o = Object(c.clone)(t.style);\n              (i = t.fixSize\n                ? Object(c.isNumber)(t.fixSize)\n                  ? t.fixSize\n                  : t.fixSize[0]\n                : Math.max(o.r, n[0] / 2) || n[0] / 2),\n                (o.r = i + r);\n              var a = e.get(\"sizeCache\");\n              a && (a.r = o.r);\n              var s = { stroke: t.color },\n                u = e.get(\"keyShape\"),\n                h = Object(c.mix)({}, u.attr(), s, o);\n              t.style ? (t.style.r = i) : (t.style = { r: i }),\n                this.updateShape(t, e, h, !0);\n            },\n          },\n          \"single-combo\",\n        ),\n        Wt.registerCombo(\n          \"rect\",\n          {\n            options: {\n              size: [40, 5],\n              padding: [25, 20, 15, 20],\n              animate: !0,\n              style: {\n                radius: 0,\n                stroke: nt.defaultCombo.style.stroke,\n                fill: nt.defaultCombo.style.fill,\n                lineWidth: nt.defaultCombo.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.comboLabel.style.fill,\n                  fontSize: nt.comboLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(f.a)({}, nt.comboStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"top\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"rect-combo\",\n                name: \"rect-combo\",\n                draggable: !0,\n              });\n            },\n            getLabelStyleByPosition: function (t, e) {\n              var n = e.position || this.labelPosition,\n                r = t.style,\n                i = t.padding || this.options.padding;\n              Object(c.isNumber)(i) && (i = [i, i, i, i]);\n              var o = e.refX,\n                a = e.refY;\n              Object(c.isNil)(o) && (o = this.refX),\n                Object(c.isNil)(a) && (a = this.refY);\n              var s,\n                u = r.width / 2 + i[3],\n                h = r.height / 2 + i[0];\n              switch (n) {\n                case \"top\":\n                  s = {\n                    x: 0 - u + o,\n                    y: 0 - h + a,\n                    textBaseline: \"top\",\n                    textAlign: \"left\",\n                  };\n                  break;\n                case \"bottom\":\n                  s = {\n                    x: 0,\n                    y: h + a,\n                    textBaseline: \"bottom\",\n                    textAlign: \"center\",\n                  };\n                  break;\n                case \"left\":\n                  s = { x: 0 - u + a, y: 0, textAlign: \"left\" };\n                  break;\n                case \"center\":\n                  s = { x: 0, y: 0, text: t.label, textAlign: \"center\" };\n                  break;\n                default:\n                  s = { x: u + o, y: 0, textAlign: \"right\" };\n              }\n              return (s.text = t.label), s;\n            },\n            getShapeStyle: function (t) {\n              var e = this.options.style,\n                n = t.padding || this.options.padding;\n              Object(c.isNumber)(n) && (n = [n, n, n, n]);\n              var r,\n                i,\n                o = { stroke: t.color },\n                a = Object(c.mix)({}, e, o, t.style),\n                s = this.getSize(t),\n                u =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              u\n                ? Object(c.isNumber)(u)\n                  ? ((r = u), (i = u))\n                  : ((r = u[0]), (i = u[1]))\n                : ((r =\n                    !Object(c.isNumber)(a.width) || isNaN(a.width)\n                      ? s[0] || nt.defaultCombo.style.width\n                      : Math.max(a.width, s[0]) || s[0]),\n                  (i =\n                    !Object(c.isNumber)(a.height) || isNaN(a.height)\n                      ? s[1] || nt.defaultCombo.style.height\n                      : Math.max(a.height, s[1]) || s[1]));\n              var h = -r / 2 - n[3],\n                l = -i / 2 - n[0];\n              (a.width = r + n[1] + n[3]), (a.height = i + n[0] + n[2]);\n              var d = Object(f.a)({ x: h, y: l }, a);\n              return (\n                t.style\n                  ? ((t.style.width = r), (t.style.height = i))\n                  : (t.style = { width: r, height: i }),\n                d\n              );\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = t.padding || this.options.padding;\n              Object(c.isNumber)(r) && (r = [r, r, r, r]);\n              var i,\n                o,\n                a = Object(c.clone)(t.style),\n                s =\n                  t.collapsed && t.fixCollapseSize\n                    ? t.fixCollapseSize\n                    : t.fixSize;\n              s\n                ? Object(c.isNumber)(s)\n                  ? ((i = s), (o = s))\n                  : ((i = s[0]), (o = s[1]))\n                : ((i = Math.max(a.width, n[0]) || n[0]),\n                  (o = Math.max(a.height, n[1]) || n[1])),\n                (a.width = i + r[1] + r[3]),\n                (a.height = o + r[0] + r[2]);\n              var u = e.get(\"sizeCache\");\n              u && ((u.width = a.width), (u.height = a.height)),\n                (a.x = -i / 2 - r[3]),\n                (a.y = -o / 2 - r[0]);\n              var h = { stroke: t.color },\n                l = e.get(\"keyShape\"),\n                f = Object(c.mix)({}, l.attr(), h, a);\n              t.style\n                ? ((t.style.width = i), (t.style.height = o))\n                : (t.style = { width: i, height: o }),\n                this.updateShape(t, e, f, !1);\n            },\n            updateShape: function (t, e, n) {\n              var r = e.get(\"keyShape\");\n              (void 0 === t.animate ? this.options.animate : t.animate) &&\n              r.animate\n                ? r.animate(n, { duration: 200, easing: \"easeLinear\" })\n                : r.attr(Object(f.a)({}, n)),\n                this.updateLabel(t, e);\n            },\n          },\n          \"single-combo\",\n        ),\n        Wt.registerNode(\n          \"simple-circle\",\n          {\n            options: {\n              size: nt.defaultNode.size,\n              style: {\n                x: 0,\n                y: 0,\n                stroke: nt.defaultNode.style.stroke,\n                fill: nt.defaultNode.style.fill,\n                lineWidth: nt.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.nodeLabel.style.fill,\n                  fontSize: nt.nodeLabel.style.fontSize,\n                },\n              },\n              stateStyles: Object(f.a)({}, nt.nodeStateStyles),\n            },\n            shapeType: \"simple-circle\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"circle\", {\n                attrs: n,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(c.deepMix)({}, e, n),\n                i = this.getSize(t)[0] / 2;\n              return Object(f.a)({ x: 0, y: 0, r: i }, r);\n            },\n            update: function (t, e) {\n              var n = this.getSize(t),\n                r = { stroke: t.color, r: n[0] / 2 },\n                i = e.get(\"keyShape\"),\n                o = Object(c.deepMix)({}, i.attr(), r, t.style);\n              this.updateShape(t, e, o, !0);\n            },\n          },\n          \"single-node\",\n        ),\n        Wt.registerNode(\n          \"simple-rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: nt.defaultNode.style.stroke,\n                fill: nt.defaultNode.style.fill,\n                lineWidth: nt.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: nt.nodeLabel.style.fill,\n                  fontSize: nt.nodeLabel.style.fontSize,\n                },\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: Object(f.a)({}, nt.nodeStateStyles),\n            },\n            shapeType: \"simple-rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t);\n              return e.addShape(\"rect\", {\n                attrs: n,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                name: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                r = Object(c.mix)({}, e, n),\n                i = this.getSize(t),\n                o = r.width || i[0],\n                a = r.height || i[1];\n              return Object(f.a)(\n                { x: -o / 2, y: -a / 2, width: o, height: a },\n                r,\n              );\n            },\n            update: function (t, e) {\n              e.getContainer();\n              var n = this.getOptions({}).style,\n                r = this.getSize(t),\n                i = e.get(\"keyShape\");\n              t.size ||\n                ((r[0] = i.attr(\"width\") || n.width),\n                (r[1] = i.attr(\"height\") || n.height));\n              var o = {\n                  stroke: t.color,\n                  x: -r[0] / 2,\n                  y: -r[1] / 2,\n                  width: r[0],\n                  height: r[1],\n                },\n                a = Object(c.mix)({}, n, i.attr(), o);\n              (a = Object(c.mix)(a, t.style)), this.updateShape(t, e, a, !1);\n            },\n          },\n          \"single-node\",\n        ),\n        Wt.registerNode(\n          \"image\",\n          {\n            options: {\n              img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ\",\n              size: 200,\n              clipCfg: {\n                show: !1,\n                type: \"circle\",\n                r: 50,\n                rx: 50,\n                ry: 35,\n                width: 50,\n                height: 35,\n                points: [\n                  [30, 12],\n                  [12, 30],\n                  [30, 48],\n                  [48, 30],\n                ],\n                path: [\n                  [\"M\", 25, 25],\n                  [\"L\", 50, 25],\n                  [\"A\", 12.5, 12.5, 0, 1, 1, 50, 50],\n                  [\"A\", 12.5, 12.5, 0, 1, 0, 50, 50],\n                  [\"L\", 25, 75],\n                  [\"Z\"],\n                ],\n                x: 0,\n                y: 0,\n              },\n            },\n            shapeType: \"image\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.shapeType,\n                r = this.getShapeStyle(t);\n              delete r.fill;\n              var i = e.addShape(n, {\n                attrs: r,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                name: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              });\n              return this.drawClip(t, i), i;\n            },\n            drawClip: function (t, e) {\n              var n = this.getOptions(t).clipCfg;\n              if (n.show) {\n                var r = n.type,\n                  i = n.x,\n                  o = n.y,\n                  a = n.style;\n                if (\"circle\" === r) {\n                  var s = n.r;\n                  e.setClip({\n                    type: \"circle\",\n                    attrs: Object(f.a)({ r: s, x: i, y: o }, a),\n                  });\n                } else if (\"rect\" === r) {\n                  var c = n.width,\n                    u = n.height,\n                    h = i - c / 2,\n                    l = o - u / 2;\n                  e.setClip({\n                    type: \"rect\",\n                    attrs: Object(f.a)({ x: h, y: l, width: c, height: u }, a),\n                  });\n                } else if (\"ellipse\" === r) {\n                  var d = n.rx,\n                    p = n.ry;\n                  e.setClip({\n                    type: \"ellipse\",\n                    attrs: Object(f.a)({ x: i, y: o, rx: d, ry: p }, a),\n                  });\n                } else if (\"polygon\" === r) {\n                  var g = n.points;\n                  e.setClip({\n                    type: \"polygon\",\n                    attrs: Object(f.a)({ points: g }, a),\n                  });\n                } else if (\"path\" === r) {\n                  var v = n.path;\n                  e.setClip({\n                    type: \"path\",\n                    attrs: Object(f.a)({ path: v }, a),\n                  });\n                }\n              }\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = this.getSize(t),\n                r = this.getOptions(t).img,\n                i = n[0],\n                o = n[1];\n              return (\n                e && ((i = e.width || n[0]), (o = e.height || n[1])),\n                Object(f.a)(\n                  { x: -i / 2, y: -o / 2, width: i, height: o, img: r },\n                  e,\n                )\n              );\n            },\n            updateShapeStyle: function (t, e) {\n              var n = e.getContainer(),\n                r = \"\".concat(this.itemType, \"-shape\"),\n                i =\n                  n.find(function (t) {\n                    return t.get(\"className\") === r;\n                  }) || e.getKeyShape(),\n                o = this.getShapeStyle(t);\n              i && i.attr(o);\n            },\n          },\n          \"single-node\",\n        );\n      var Be,\n        Le = {\n          triangle: function (t, e, n) {\n            void 0 === t && (t = 10),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 L \")\n              .concat(r + e, \",-\")\n              .concat(t / 2, \" L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          vee: function (t, e, n) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 20),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 L \")\n              .concat(r + e, \",-\")\n              .concat(t / 2, \"\\n        L \")\n              .concat(r + (2 * e) / 3, \",0 L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          circle: function (t, e) {\n            return (\n              void 0 === t && (t = 5),\n              void 0 === e && (e = 0),\n              \"M \"\n                .concat(2 * e, \", 0\\n            a \")\n                .concat(t, \",\")\n                .concat(t, \" 0 1,0 \")\n                .concat(2 * t, \",0\\n            a \")\n                .concat(t, \",\")\n                .concat(t, \" 0 1,0 \")\n                .concat(2 * -t, \",0\")\n            );\n          },\n          rect: function (t, e, n) {\n            void 0 === t && (t = 10),\n              void 0 === e && (e = 10),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",\")\n              .concat(t / 2, \" \\n        L \")\n              .concat(r, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          diamond: function (t, e, n) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 0);\n            var r = 2 * n;\n            return \"M \"\n              .concat(r, \",0 \\n        L \")\n              .concat(r + e / 2, \",\")\n              .concat(-t / 2, \" \\n        L \")\n              .concat(r + e, \",0 \\n        L \")\n              .concat(r + e / 2, \",\")\n              .concat(t / 2, \" Z\");\n          },\n          triangleRect: function (t, e, n, r, i, o) {\n            void 0 === t && (t = 15),\n              void 0 === e && (e = 15),\n              void 0 === n && (n = 15),\n              void 0 === r && (r = 3),\n              void 0 === i && (i = 5),\n              void 0 === o && (o = 0);\n            var a = 2 * o,\n              s = a + e + i;\n            return \"M \"\n              .concat(a, \",0 L \")\n              .concat(a + e, \",-\")\n              .concat(t / 2, \" L \")\n              .concat(a + e, \",\")\n              .concat(t / 2, \" Z\\n            M \")\n              .concat(s, \", -\")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s + r, \" -\")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s + r, \" \")\n              .concat(n / 2, \"\\n            L \")\n              .concat(s, \" \")\n              .concat(n / 2, \"\\n            Z\");\n          },\n        },\n        De = {\n          collapse: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"a\", n, n, 0, 1, 0, 2 * n, 0],\n              [\"a\", n, n, 0, 1, 0, 2 * -n, 0],\n              [\"M\", t - n + 4, e],\n              [\"L\", t + n - 4, e],\n            ];\n          },\n          expand: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"a\", n, n, 0, 1, 0, 2 * n, 0],\n              [\"a\", n, n, 0, 1, 0, 2 * -n, 0],\n              [\"M\", t - n + 4, e],\n              [\"L\", t - n + 2 * n - 4, e],\n              [\"M\", t - n + n, e - n + 4],\n              [\"L\", t, e + n - 4],\n            ];\n          },\n          upTriangle: function (t, e, n) {\n            var r = n * Math.cos(Math.PI / 6),\n              i = n * Math.sin(Math.PI / 6);\n            return [\n              [\"M\", t - r, e + i],\n              [\"L\", t + r, e + i],\n              [\"L\", t, e - n],\n              [\"Z\"],\n            ];\n          },\n          downTriangle: function (t, e, n) {\n            var r = n * Math.cos(Math.PI / 6),\n              i = n * Math.sin(Math.PI / 6);\n            return [\n              [\"M\", t - r, e - i],\n              [\"L\", t + r, e - i],\n              [\"L\", t, e + n],\n              [\"Z\"],\n            ];\n          },\n        },\n        _e = Wt,\n        Re = [\n          \"#5F95FF\",\n          \"#61DDAA\",\n          \"#65789B\",\n          \"#F6BD16\",\n          \"#7262FD\",\n          \"#78D3F8\",\n          \"#9661BC\",\n          \"#F6903D\",\n          \"#008685\",\n          \"#F08BB4\",\n        ],\n        Fe = g.a.transform,\n        Ye = Object(f.a)(\n          Object(f.a)(\n            Object(f.a)(Object(f.a)(Object(f.a)(Object(f.a)({}, o), i), a), r),\n            s,\n          ),\n          { transform: Fe, mat3: g.b },\n        ),\n        Xe = (function () {\n          function t(t) {\n            (this.graph = t),\n              (this.layoutCfg = t.get(\"layout\") || {}),\n              (this.layoutType = this.getLayoutType()),\n              (this.layoutMethods = []),\n              this.initLayout();\n          }\n          return (\n            (t.prototype.initLayout = function () {}),\n            (t.prototype.getLayoutType = function () {\n              return this.getLayoutCfgType(this.layoutCfg);\n            }),\n            (t.prototype.getLayoutCfgType = function (t) {\n              var e = t.type;\n              if (e) return e;\n              var n = t.pipes;\n              return Array.isArray(n)\n                ? n.map(function (t) {\n                    return (null == t ? void 0 : t.type) || \"\";\n                  })\n                : null;\n            }),\n            (t.prototype.isLayoutTypeSame = function (t) {\n              var e = this.getLayoutCfgType(t);\n              return Array.isArray(this.layoutType)\n                ? this.layoutType.every(function (t, n) {\n                    return t === e[n];\n                  })\n                : (null == t ? void 0 : t.type) === this.layoutType;\n            }),\n            (t.prototype.refreshLayout = function () {\n              var t = this.graph;\n              t &&\n                (t.get(\"animate\")\n                  ? t.positionsAnimate()\n                  : t.refreshPositions());\n            }),\n            (t.prototype.changeLayout = function (t) {\n              (this.layoutCfg = t), this.destoryLayoutMethods(), this.layout();\n            }),\n            (t.prototype.changeData = function () {\n              this.destoryLayoutMethods(), this.layout();\n            }),\n            (t.prototype.destoryLayoutMethods = function () {\n              var t = this.layoutMethods;\n              null == t ||\n                t.forEach(function (t) {\n                  t.destroy();\n                }),\n                (this.layoutMethods = []);\n            }),\n            (t.prototype.destroyLayout = function () {\n              var t = this.graph;\n              this.destoryLayoutMethods(),\n                t.set(\"layout\", void 0),\n                (this.layoutCfg = void 0),\n                (this.layoutType = void 0),\n                (this.layoutMethods = void 0);\n            }),\n            (t.prototype.setDataFromGraph = function () {\n              for (\n                var t = [],\n                  e = [],\n                  n = [],\n                  r = [],\n                  i = [],\n                  o = [],\n                  a = this.graph.getNodes(),\n                  s = this.graph.getEdges(),\n                  c = this.graph.getCombos(),\n                  u = a.length,\n                  h = 0;\n                h < u;\n                h++\n              ) {\n                var l = a[h];\n                if (l && !l.destroyed) {\n                  var f = l.getModel();\n                  l.isVisible() ? t.push(f) : e.push(f);\n                }\n              }\n              var d = s.length;\n              for (h = 0; h < d; h++) {\n                var p = s[h];\n                if (p && !p.destroyed) {\n                  f = p.getModel();\n                  p.isVisible()\n                    ? f.isComboEdge\n                      ? i.push(f)\n                      : n.push(f)\n                    : r.push(f);\n                }\n              }\n              var g = c.length;\n              for (h = 0; h < g; h++) {\n                var v = c[h];\n                if (!v.destroyed) {\n                  f = v.getModel();\n                  v.isVisible() ? o.push(f) : r.push(f);\n                }\n              }\n              return {\n                nodes: t,\n                hiddenNodes: e,\n                edges: n,\n                hiddenEdges: r,\n                combos: o,\n                hiddenCombos: [],\n                comboEdges: i,\n              };\n            }),\n            (t.prototype.reLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = null == e ? void 0 : e.type;\n                (e.onLayoutEnd = function () {\n                  o.emit(\"aftersublayout\", { type: a }), r();\n                }),\n                  t.init(n.data),\n                  \"force\" === a && ((t.ticking = !1), t.forceSimulation.stop()),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  t.execute(),\n                  t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n              });\n            }),\n            (t.prototype.relayout = function (t) {\n              var e = this,\n                n = this.graph,\n                r = this.layoutMethods,\n                i = this.layoutCfg;\n              if (t) {\n                this.data = this.setDataFromGraph();\n                var o = this.data.nodes;\n                if (!o) return !1;\n                this.initPositions(i.center, o);\n              }\n              n.emit(\"beforelayout\");\n              var a = Promise.resolve();\n              null == r ||\n                r.forEach(function (t, n) {\n                  var r = i[n];\n                  a = a.then(function () {\n                    return e.reLayoutMethod(t, r);\n                  });\n                }),\n                a\n                  .then(function () {\n                    i.onAllLayoutEnd && i.onAllLayoutEnd();\n                  })\n                  .catch(function (t) {\n                    console.warn(\"relayout failed\", t);\n                  });\n            }),\n            (t.prototype.filterLayoutData = function (t, e) {\n              var n,\n                r,\n                i = t.nodes,\n                o = t.edges,\n                a = Object(f.e)(t, [\"nodes\", \"edges\"]);\n              if (!i) return t;\n              if (\n                ((n = Object(c.isFunction)(null == e ? void 0 : e.nodesFilter)\n                  ? e.nodesFilter\n                  : function () {\n                      return !0;\n                    }),\n                Object(c.isFunction)(null == e ? void 0 : e.edgesFilter))\n              )\n                r = e.edgesFilter;\n              else {\n                var s = i.reduce(function (t, e) {\n                  return (t[e.id] = !0), t;\n                }, {});\n                r = function (t) {\n                  return s[t.source] && s[t.target];\n                };\n              }\n              return Object(f.a)({ nodes: i.filter(n), edges: o.filter(r) }, a);\n            }),\n            (t.prototype.getLayoutBBox = function (t) {\n              var e = this.graph,\n                n = Object(c.groupBy)(e.getNodes(), function (t) {\n                  return t.getModel().layoutOrder;\n                }),\n                r = Object.values(n).map(function (t) {\n                  var e = It(t);\n                  return (e.size = [e.width, e.height]), e;\n                });\n              return {\n                groupNodes: Object.values(Object(c.groupBy)(t, \"layoutOrder\")),\n                layoutNodes: r,\n              };\n            }),\n            (t.prototype.layoutAnimate = function () {}),\n            (t.prototype.moveToZero = function () {\n              var t = this.graph.get(\"data\").nodes;\n              if (void 0 !== t[0].x && null !== t[0].x && !At(t[0].x)) {\n                for (var e = [0, 0], n = t.length, r = 0; r < n; r++) {\n                  var i = t[r];\n                  (e[0] += i.x), (e[1] += i.y);\n                }\n                (e[0] /= t.length), (e[1] /= t.length);\n                for (r = 0; r < n; r++) {\n                  ((i = t[r]).x -= e[0]), (i.y -= e[1]);\n                }\n              }\n            }),\n            (t.prototype.initPositions = function (t, e) {\n              var n = this.graph;\n              if (!e) return !1;\n              var r = e ? e.length : 0;\n              if (r) {\n                var i = 0.85 * n.get(\"width\"),\n                  o = 0.85 * n.get(\"height\"),\n                  a = Math.ceil(Math.sqrt(r) * (i / o)),\n                  s = i / (a - 1),\n                  c = o / (Math.ceil(r / a) - 1);\n                (isFinite(s) && s) || (s = 0), (isFinite(c) && s) || (c = 0);\n                for (\n                  var u = t[0] - i / 2, h = t[1] - o / 2, l = !0, f = 0;\n                  f < r;\n                  f++\n                ) {\n                  var d = e[f];\n                  At(d.x) && ((l = !1), (d.x = (f % a) * s + u)),\n                    At(d.y) && ((l = !1), (d.y = Math.floor(f / a) * c + h));\n                }\n                return l;\n              }\n            }),\n            (t.prototype.destroy = function () {\n              (this.graph = null),\n                this.destoryLayoutMethods(),\n                (this.destroyed = !0);\n            }),\n            (t.prototype.onTick = function (t) {\n              var e;\n              null === (e = this.layoutMethods) ||\n                void 0 === e ||\n                e.forEach(function (e) {\n                  var n;\n                  null === (n = null == e ? void 0 : e.onTick) ||\n                    void 0 === n ||\n                    n.call(e, t);\n                });\n            }),\n            t\n          );\n        })(),\n        ze = function (t) {\n          (this.graph = t), (this.destroyed = !1), this.initEvents();\n        };\n      !(function (t) {\n        (t.CLICK = \"click\"),\n          (t.DBLCLICK = \"dblclick\"),\n          (t.TAP = \"tap\"),\n          (t.DBLTAP = \"dbltap\"),\n          (t.DRAGSTART = \"dragstart\"),\n          (t.DRAGEND = \"dragend\"),\n          (t.DRAG = \"drag\"),\n          (t.DRAGENTER = \"dragenter\"),\n          (t.DRAGLEAVE = \"dragleave\"),\n          (t.DRAGOVER = \"dragover\"),\n          (t.DRAGOUT = \"dragout\"),\n          (t.DDROP = \"drop\"),\n          (t.PINCHSTART = \"pinchstart\"),\n          (t.PINCHMOVE = \"pinchmove\"),\n          (t.PANSTART = \"panstart\"),\n          (t.PANMOVE = \"panmove\"),\n          (t.PANEND = \"panend\"),\n          (t.PRESS = \"press\"),\n          (t.ACTION_END = \"actionend\"),\n          (t.TOUCHSTART = \"touchstart\"),\n          (t.TOUCHMOVE = \"touchmove\"),\n          (t.TOUCHEND = \"touchend\"),\n          (t.CANVAS_TOUCHSTART = \"canvas:touchstart\"),\n          (t.CANVAS_TOUCHMOVE = \"canvas:touchmove\"),\n          (t.CANVAS_TOUCHEND = \"canvas:touchend\"),\n          (t.NODE_TOUCHSTART = \"node:touchstart\"),\n          (t.NODE_TOUCHMOVE = \"node:touchmove\"),\n          (t.NODE_TOUCHEND = \"node:touchend\"),\n          (t.COMBO_TOUCHSTART = \"combo:touchstart\"),\n          (t.COMBO_TOUCHMOVE = \"combo:touchmove\"),\n          (t.COMBO_TOUCHEND = \"combo:touchend\"),\n          (t.EDGE_TOUCHSTART = \"edge:touchstart\"),\n          (t.EDGE_TOUCHMOVE = \"edge:touchmove\"),\n          (t.EDGE_TOUCHEND = \"edge:touchend\"),\n          (t.NODE_CLICK = \"node:click\"),\n          (t.NODE_DBLCLICK = \"node:dblclick\"),\n          (t.NODE_DROP = \"node:drop\"),\n          (t.NODE_DRAGOVER = \"node:dragover\"),\n          (t.NODE_DRAGENTER = \"node:dragenter\"),\n          (t.NODE_DRAGLEAVE = \"node:dragleave\"),\n          (t.NODE_DRAGSTART = \"node:dragstart\"),\n          (t.NODE_DRAG = \"node:drag\"),\n          (t.NODE_DRAGEND = \"node:dragend\"),\n          (t.NODE_TAP = \"node:tap\"),\n          (t.NODE_DBLTAP = \"node:dbltap\"),\n          (t.NODE_PANSTART = \"node:panstart\"),\n          (t.NODE_PANMOVE = \"node:panmove\"),\n          (t.NODE_PANEND = \"node:panend\"),\n          (t.NODE_PRESS = \"node:press\"),\n          (t.COMBO_CLICK = \"combo:click\"),\n          (t.COMBO_DBLCLICK = \"combo:dblclick\"),\n          (t.COMBO_DROP = \"combo:drop\"),\n          (t.COMBO_DRAGOVER = \"combo:dragover\"),\n          (t.COMBO_DRAGENTER = \"combo:dragenter\"),\n          (t.COMBO_DRAGLEAVE = \"combo:dragleave\"),\n          (t.COMBO_DRAGSTART = \"combo:dragstart\"),\n          (t.COMBO_DRAG = \"combo:drag\"),\n          (t.COMBO_DRAGEND = \"combo:dragend\"),\n          (t.COMBO_TAP = \"combo:tap\"),\n          (t.COMBO_DBLTAP = \"combo:dbltap\"),\n          (t.COMBO_PANSTART = \"combo:panstart\"),\n          (t.COMBO_PANMOVE = \"combo:panmove\"),\n          (t.COMBO_PANEND = \"combo:panend\"),\n          (t.COMBO_PRESS = \"combo:press\"),\n          (t.EDGE_CLICK = \"edge:click\"),\n          (t.EDGE_DBLCLICK = \"edge:dblclick\"),\n          (t.EDGE_DROP = \"edge:drop\"),\n          (t.EDGE_DRAGOVER = \"edge:dragover\"),\n          (t.EDGE_DRAGENTER = \"edge:dragenter\"),\n          (t.EDGE_DRAGLEAVE = \"edge:dragleave\"),\n          (t.EDGE_TAP = \"edge:tap\"),\n          (t.EDGE_DBLTAP = \"edge:dbltap\"),\n          (t.EDGE_PRESS = \"edge:press\"),\n          (t.CANVAS_CLICK = \"canvas:click\"),\n          (t.CANVAS_DBLCLICK = \"canvas:dblclick\"),\n          (t.CANVAS_DROP = \"canvas:drop\"),\n          (t.CANVAS_DRAGENTER = \"canvas:dragenter\"),\n          (t.CANVAS_DRAGLEAVE = \"canvas:dragleave\"),\n          (t.CANVAS_DRAGSTART = \"canvas:dragstart\"),\n          (t.CANVAS_DRAG = \"canvas:drag\"),\n          (t.CANVAS_DRAGEND = \"canvas:dragend\"),\n          (t.CANVAS_TAP = \"canvas:tap\"),\n          (t.CANVAS_DBLTAP = \"canvas:dbltap\"),\n          (t.CANVAS_PANSTART = \"canvas:panstart\"),\n          (t.CANVAS_PANMOVE = \"canvas:panmove\"),\n          (t.CANVAS_PANEND = \"canvas:panend\"),\n          (t.CANVAS_PRESS = \"canvas:press\"),\n          (t.BEFORERENDER = \"beforerender\"),\n          (t.AFTERRENDER = \"afterrender\"),\n          (t.BEFOREADDITEM = \"beforeadditem\"),\n          (t.AFTERADDITEM = \"afteradditem\"),\n          (t.BEFOREREMOVEITEM = \"beforeremoveitem\"),\n          (t.AFTERREMOVEITEM = \"afterremoveitem\"),\n          (t.BEFOREUPDATEITEM = \"beforeupdateitem\"),\n          (t.AFTERUPDATEITEM = \"afterupdateitem\"),\n          (t.BEFOREITEMVISIBILITYCHANGE = \"beforeitemvisibilitychange\"),\n          (t.AFTERITEMVISIBILITYCHANGE = \"afteritemvisibilitychange\"),\n          (t.BEFOREITEMSTATECHANGE = \"beforeitemstatechange\"),\n          (t.AFTERITEMSTATECHANGE = \"afteritemstatechange\"),\n          (t.BEFOREITEMREFRESH = \"beforeitemrefresh\"),\n          (t.AFTERITEMREFRESH = \"afteritemrefresh\"),\n          (t.BEFOREITEMSTATESCLEAR = \"beforeitemstatesclear\"),\n          (t.AFTERITEMSTATESCLEAR = \"afteritemstatesclear\"),\n          (t.BEFOREMODECHANGE = \"beforemodechange\"),\n          (t.AFTERMODECHANGE = \"aftermodechange\"),\n          (t.BEFORELAYOUT = \"beforelayout\"),\n          (t.AFTERLAYOUT = \"afterlayout\"),\n          (t.BEFORECREATEEDGE = \"beforecreateedge\"),\n          (t.AFTERCREATEEDGE = \"aftercreateedge\"),\n          (t.BEFOREGRAPHREFRESHPOSITION = \"beforegraphrefreshposition\"),\n          (t.AFTERGRAPHREFRESHPOSITION = \"aftergraphrefreshposition\"),\n          (t.BEFOREGRAPHREFRESH = \"beforegraphrefresh\"),\n          (t.AFTERGRAPHREFRESH = \"aftergraphrefresh\"),\n          (t.BEFOREANIMATE = \"beforeanimate\"),\n          (t.AFTERANIMATE = \"afteranimate\"),\n          (t.BEFOREPAINT = \"beforepaint\"),\n          (t.AFTERPAINT = \"afterpaint\"),\n          (t.BEFORECOLLAPSEEXPANDCOMBO = \"beforecollapseexpandcombo\"),\n          (t.AFTERCOLLAPSEEXPANDCOMBO = \"aftercollapseexpandcombo\"),\n          (t.GRAPHSTATECHANGE = \"graphstatechange\"),\n          (t.AFTERACTIVATERELATIONS = \"afteractivaterelations\"),\n          (t.NODESELECTCHANGE = \"nodeselectchange\"),\n          (t.TOOLTIPCHANGE = \"tooltipchange\"),\n          (t.WHEELZOOM = \"wheelzoom\"),\n          (t.VIEWPORTCHANGE = \"viewportchange\"),\n          (t.DRAGNODEEND = \"dragnodeend\"),\n          (t.STACKCHANGE = \"stackchange\");\n      })(Be || (Be = {}));\n      var We = _e.registerNode,\n        qe = _e.registerEdge,\n        Ve = _e.registerCombo,\n        Ge = l.registerBehavior,\n        He = nt;\n      _e.registerNode, _e.registerEdge, _e.registerCombo, l.registerBehavior;\n    },\n    205: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        function (r) {\n          var i = n(119),\n            o =\n              \"undefined\" != typeof globalThis\n                ? globalThis\n                : \"undefined\" != typeof self\n                ? self\n                : \"undefined\" != typeof window\n                ? window\n                : void 0 !== r\n                ? r\n                : void 0;\n          (\"object\" == typeof exports && \"object\" == typeof t) ||\n            (\"function\" == typeof define && n(223)) ||\n            \"object\" == typeof exports ||\n            Object.defineProperties(o, {\n              f6: {\n                get: function () {\n                  return (\n                    console.warn(\"废弃的特性: f6, 请使用 F6 代替 f6\"), i.default\n                  );\n                },\n              },\n            }),\n            (e.default = i.default);\n        }.call(this, n(98));\n    },\n    206: function (t, e) {\n      var n,\n        r,\n        i = (t.exports = {});\n      function o() {\n        throw new Error(\"setTimeout has not been defined\");\n      }\n      function a() {\n        throw new Error(\"clearTimeout has not been defined\");\n      }\n      function s(t) {\n        if (n === setTimeout) return setTimeout(t, 0);\n        if ((n === o || !n) && setTimeout)\n          return (n = setTimeout), setTimeout(t, 0);\n        try {\n          return n(t, 0);\n        } catch (e) {\n          try {\n            return n.call(null, t, 0);\n          } catch (e) {\n            return n.call(this, t, 0);\n          }\n        }\n      }\n      !(function () {\n        try {\n          n = \"function\" == typeof setTimeout ? setTimeout : o;\n        } catch (t) {\n          n = o;\n        }\n        try {\n          r = \"function\" == typeof clearTimeout ? clearTimeout : a;\n        } catch (t) {\n          r = a;\n        }\n      })();\n      var c,\n        u = [],\n        h = !1,\n        l = -1;\n      function f() {\n        h &&\n          c &&\n          ((h = !1), c.length ? (u = c.concat(u)) : (l = -1), u.length && d());\n      }\n      function d() {\n        if (!h) {\n          var t = s(f);\n          h = !0;\n          for (var e = u.length; e; ) {\n            for (c = u, u = []; ++l < e; ) c && c[l].run();\n            (l = -1), (e = u.length);\n          }\n          (c = null),\n            (h = !1),\n            (function (t) {\n              if (r === clearTimeout) return clearTimeout(t);\n              if ((r === a || !r) && clearTimeout)\n                return (r = clearTimeout), clearTimeout(t);\n              try {\n                r(t);\n              } catch (e) {\n                try {\n                  return r.call(null, t);\n                } catch (e) {\n                  return r.call(this, t);\n                }\n              }\n            })(t);\n        }\n      }\n      function p(t, e) {\n        (this.fun = t), (this.array = e);\n      }\n      function g() {}\n      (i.nextTick = function (t) {\n        var e = new Array(arguments.length - 1);\n        if (arguments.length > 1)\n          for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n        u.push(new p(t, e)), 1 !== u.length || h || s(d);\n      }),\n        (p.prototype.run = function () {\n          this.fun.apply(null, this.array);\n        }),\n        (i.title = \"browser\"),\n        (i.browser = !0),\n        (i.env = {}),\n        (i.argv = []),\n        (i.version = \"\"),\n        (i.versions = {}),\n        (i.on = g),\n        (i.addListener = g),\n        (i.once = g),\n        (i.off = g),\n        (i.removeListener = g),\n        (i.removeAllListeners = g),\n        (i.emit = g),\n        (i.prependListener = g),\n        (i.prependOnceListener = g),\n        (i.listeners = function (t) {\n          return [];\n        }),\n        (i.binding = function (t) {\n          throw new Error(\"process.binding is not supported\");\n        }),\n        (i.cwd = function () {\n          return \"/\";\n        }),\n        (i.chdir = function (t) {\n          throw new Error(\"process.chdir is not supported\");\n        }),\n        (i.umask = function () {\n          return 0;\n        });\n    },\n    207: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isAllowCapture =\n          e.isParent =\n          e.isBrowser =\n          e.removeFromArray =\n            void 0),\n        (e.removeFromArray = function (t, e) {\n          var n = t.indexOf(e);\n          -1 !== n && t.splice(n, 1);\n        }),\n        (e.isBrowser =\n          \"undefined\" != typeof window && void 0 !== window.document);\n      var r = n(0);\n      Object.defineProperty(e, \"isNil\", {\n        enumerable: !0,\n        get: function () {\n          return r.isNil;\n        },\n      }),\n        Object.defineProperty(e, \"isFunction\", {\n          enumerable: !0,\n          get: function () {\n            return r.isFunction;\n          },\n        }),\n        Object.defineProperty(e, \"isString\", {\n          enumerable: !0,\n          get: function () {\n            return r.isString;\n          },\n        }),\n        Object.defineProperty(e, \"isObject\", {\n          enumerable: !0,\n          get: function () {\n            return r.isObject;\n          },\n        }),\n        Object.defineProperty(e, \"isArray\", {\n          enumerable: !0,\n          get: function () {\n            return r.isArray;\n          },\n        }),\n        Object.defineProperty(e, \"mix\", {\n          enumerable: !0,\n          get: function () {\n            return r.mix;\n          },\n        }),\n        Object.defineProperty(e, \"each\", {\n          enumerable: !0,\n          get: function () {\n            return r.each;\n          },\n        }),\n        Object.defineProperty(e, \"upperFirst\", {\n          enumerable: !0,\n          get: function () {\n            return r.upperFirst;\n          },\n        }),\n        (e.isParent = function (t, e) {\n          if (t.isCanvas()) return !0;\n          for (var n = e.getParent(), r = !1; n; ) {\n            if (n === t) {\n              r = !0;\n              break;\n            }\n            n = n.getParent();\n          }\n          return r;\n        }),\n        (e.isAllowCapture = function (t) {\n          return t.cfg.visible && t.cfg.capture;\n        });\n    },\n    208: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.getOffScreenContext = void 0);\n      var r = null;\n      e.getOffScreenContext = function () {\n        if (!r) {\n          var t = document.createElement(\"canvas\");\n          (t.width = 1), (t.height = 1), (r = t.getContext(\"2d\"));\n        }\n        return r;\n      };\n    },\n    209: function (t, e, n) {\n      \"use strict\";\n      var r = n(210),\n        i = n(211),\n        o = Object.hasOwnProperty,\n        a = Object.create(null);\n      for (var s in r) o.call(r, s) && (a[r[s]] = s);\n      var c = (t.exports = { to: {}, get: {} });\n      function u(t, e, n) {\n        return Math.min(Math.max(e, t), n);\n      }\n      function h(t) {\n        var e = Math.round(t).toString(16).toUpperCase();\n        return e.length < 2 ? \"0\" + e : e;\n      }\n      (c.get = function (t) {\n        var e, n;\n        switch (t.substring(0, 3).toLowerCase()) {\n          case \"hsl\":\n            (e = c.get.hsl(t)), (n = \"hsl\");\n            break;\n          case \"hwb\":\n            (e = c.get.hwb(t)), (n = \"hwb\");\n            break;\n          default:\n            (e = c.get.rgb(t)), (n = \"rgb\");\n        }\n        return e ? { model: n, value: e } : null;\n      }),\n        (c.get.rgb = function (t) {\n          if (!t) return null;\n          var e,\n            n,\n            i,\n            a,\n            s = [0, 0, 0, 1];\n          if ((n = t.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i))) {\n            for (a = n[2], n = n[1], i = 0; i < 3; i++)\n              (e = 2 * i), (s[i] = parseInt(n.slice(e, e + 2), 16));\n            a && (s[3] = parseInt(a, 16) / 255);\n          } else if ((n = t.match(/^#([a-f0-9]{3,4})$/i))) {\n            for (a = (n = n[1])[3], i = 0; i < 3; i++)\n              s[i] = parseInt(n[i] + n[i], 16);\n            a && (s[3] = parseInt(a + a, 16) / 255);\n          } else if (\n            (n = t.match(\n              /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/,\n            ))\n          ) {\n            for (i = 0; i < 3; i++) s[i] = parseInt(n[i + 1], 0);\n            n[4] &&\n              (n[5]\n                ? (s[3] = 0.01 * parseFloat(n[4]))\n                : (s[3] = parseFloat(n[4])));\n          } else {\n            if (\n              !(n = t.match(\n                /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/,\n              ))\n            )\n              return (n = t.match(/^(\\w+)$/))\n                ? \"transparent\" === n[1]\n                  ? [0, 0, 0, 0]\n                  : o.call(r, n[1])\n                  ? (((s = r[n[1]])[3] = 1), s)\n                  : null\n                : null;\n            for (i = 0; i < 3; i++)\n              s[i] = Math.round(2.55 * parseFloat(n[i + 1]));\n            n[4] &&\n              (n[5]\n                ? (s[3] = 0.01 * parseFloat(n[4]))\n                : (s[3] = parseFloat(n[4])));\n          }\n          for (i = 0; i < 3; i++) s[i] = u(s[i], 0, 255);\n          return (s[3] = u(s[3], 0, 1)), s;\n        }),\n        (c.get.hsl = function (t) {\n          if (!t) return null;\n          var e,\n            n = t.match(\n              /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/,\n            );\n          return n\n            ? ((e = parseFloat(n[4])),\n              [\n                ((parseFloat(n[1]) % 360) + 360) % 360,\n                u(parseFloat(n[2]), 0, 100),\n                u(parseFloat(n[3]), 0, 100),\n                u(isNaN(e) ? 1 : e, 0, 1),\n              ])\n            : null;\n        }),\n        (c.get.hwb = function (t) {\n          if (!t) return null;\n          var e,\n            n = t.match(\n              /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/,\n            );\n          return n\n            ? ((e = parseFloat(n[4])),\n              [\n                ((parseFloat(n[1]) % 360) + 360) % 360,\n                u(parseFloat(n[2]), 0, 100),\n                u(parseFloat(n[3]), 0, 100),\n                u(isNaN(e) ? 1 : e, 0, 1),\n              ])\n            : null;\n        }),\n        (c.to.hex = function () {\n          var t = i(arguments);\n          return (\n            \"#\" +\n            h(t[0]) +\n            h(t[1]) +\n            h(t[2]) +\n            (t[3] < 1 ? h(Math.round(255 * t[3])) : \"\")\n          );\n        }),\n        (c.to.rgb = function () {\n          var t = i(arguments);\n          return t.length < 4 || 1 === t[3]\n            ? \"rgb(\" +\n                Math.round(t[0]) +\n                \", \" +\n                Math.round(t[1]) +\n                \", \" +\n                Math.round(t[2]) +\n                \")\"\n            : \"rgba(\" +\n                Math.round(t[0]) +\n                \", \" +\n                Math.round(t[1]) +\n                \", \" +\n                Math.round(t[2]) +\n                \", \" +\n                t[3] +\n                \")\";\n        }),\n        (c.to.rgb.percent = function () {\n          var t = i(arguments),\n            e = Math.round((t[0] / 255) * 100),\n            n = Math.round((t[1] / 255) * 100),\n            r = Math.round((t[2] / 255) * 100);\n          return t.length < 4 || 1 === t[3]\n            ? \"rgb(\" + e + \"%, \" + n + \"%, \" + r + \"%)\"\n            : \"rgba(\" + e + \"%, \" + n + \"%, \" + r + \"%, \" + t[3] + \")\";\n        }),\n        (c.to.hsl = function () {\n          var t = i(arguments);\n          return t.length < 4 || 1 === t[3]\n            ? \"hsl(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%)\"\n            : \"hsla(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%, \" + t[3] + \")\";\n        }),\n        (c.to.hwb = function () {\n          var t = i(arguments),\n            e = \"\";\n          return (\n            t.length >= 4 && 1 !== t[3] && (e = \", \" + t[3]),\n            \"hwb(\" + t[0] + \", \" + t[1] + \"%, \" + t[2] + \"%\" + e + \")\"\n          );\n        }),\n        (c.to.keyword = function (t) {\n          return a[t.slice(0, 3)];\n        });\n    },\n    210: function (t, e, n) {\n      \"use strict\";\n      t.exports = {\n        aliceblue: [240, 248, 255],\n        antiquewhite: [250, 235, 215],\n        aqua: [0, 255, 255],\n        aquamarine: [127, 255, 212],\n        azure: [240, 255, 255],\n        beige: [245, 245, 220],\n        bisque: [255, 228, 196],\n        black: [0, 0, 0],\n        blanchedalmond: [255, 235, 205],\n        blue: [0, 0, 255],\n        blueviolet: [138, 43, 226],\n        brown: [165, 42, 42],\n        burlywood: [222, 184, 135],\n        cadetblue: [95, 158, 160],\n        chartreuse: [127, 255, 0],\n        chocolate: [210, 105, 30],\n        coral: [255, 127, 80],\n        cornflowerblue: [100, 149, 237],\n        cornsilk: [255, 248, 220],\n        crimson: [220, 20, 60],\n        cyan: [0, 255, 255],\n        darkblue: [0, 0, 139],\n        darkcyan: [0, 139, 139],\n        darkgoldenrod: [184, 134, 11],\n        darkgray: [169, 169, 169],\n        darkgreen: [0, 100, 0],\n        darkgrey: [169, 169, 169],\n        darkkhaki: [189, 183, 107],\n        darkmagenta: [139, 0, 139],\n        darkolivegreen: [85, 107, 47],\n        darkorange: [255, 140, 0],\n        darkorchid: [153, 50, 204],\n        darkred: [139, 0, 0],\n        darksalmon: [233, 150, 122],\n        darkseagreen: [143, 188, 143],\n        darkslateblue: [72, 61, 139],\n        darkslategray: [47, 79, 79],\n        darkslategrey: [47, 79, 79],\n        darkturquoise: [0, 206, 209],\n        darkviolet: [148, 0, 211],\n        deeppink: [255, 20, 147],\n        deepskyblue: [0, 191, 255],\n        dimgray: [105, 105, 105],\n        dimgrey: [105, 105, 105],\n        dodgerblue: [30, 144, 255],\n        firebrick: [178, 34, 34],\n        floralwhite: [255, 250, 240],\n        forestgreen: [34, 139, 34],\n        fuchsia: [255, 0, 255],\n        gainsboro: [220, 220, 220],\n        ghostwhite: [248, 248, 255],\n        gold: [255, 215, 0],\n        goldenrod: [218, 165, 32],\n        gray: [128, 128, 128],\n        green: [0, 128, 0],\n        greenyellow: [173, 255, 47],\n        grey: [128, 128, 128],\n        honeydew: [240, 255, 240],\n        hotpink: [255, 105, 180],\n        indianred: [205, 92, 92],\n        indigo: [75, 0, 130],\n        ivory: [255, 255, 240],\n        khaki: [240, 230, 140],\n        lavender: [230, 230, 250],\n        lavenderblush: [255, 240, 245],\n        lawngreen: [124, 252, 0],\n        lemonchiffon: [255, 250, 205],\n        lightblue: [173, 216, 230],\n        lightcoral: [240, 128, 128],\n        lightcyan: [224, 255, 255],\n        lightgoldenrodyellow: [250, 250, 210],\n        lightgray: [211, 211, 211],\n        lightgreen: [144, 238, 144],\n        lightgrey: [211, 211, 211],\n        lightpink: [255, 182, 193],\n        lightsalmon: [255, 160, 122],\n        lightseagreen: [32, 178, 170],\n        lightskyblue: [135, 206, 250],\n        lightslategray: [119, 136, 153],\n        lightslategrey: [119, 136, 153],\n        lightsteelblue: [176, 196, 222],\n        lightyellow: [255, 255, 224],\n        lime: [0, 255, 0],\n        limegreen: [50, 205, 50],\n        linen: [250, 240, 230],\n        magenta: [255, 0, 255],\n        maroon: [128, 0, 0],\n        mediumaquamarine: [102, 205, 170],\n        mediumblue: [0, 0, 205],\n        mediumorchid: [186, 85, 211],\n        mediumpurple: [147, 112, 219],\n        mediumseagreen: [60, 179, 113],\n        mediumslateblue: [123, 104, 238],\n        mediumspringgreen: [0, 250, 154],\n        mediumturquoise: [72, 209, 204],\n        mediumvioletred: [199, 21, 133],\n        midnightblue: [25, 25, 112],\n        mintcream: [245, 255, 250],\n        mistyrose: [255, 228, 225],\n        moccasin: [255, 228, 181],\n        navajowhite: [255, 222, 173],\n        navy: [0, 0, 128],\n        oldlace: [253, 245, 230],\n        olive: [128, 128, 0],\n        olivedrab: [107, 142, 35],\n        orange: [255, 165, 0],\n        orangered: [255, 69, 0],\n        orchid: [218, 112, 214],\n        palegoldenrod: [238, 232, 170],\n        palegreen: [152, 251, 152],\n        paleturquoise: [175, 238, 238],\n        palevioletred: [219, 112, 147],\n        papayawhip: [255, 239, 213],\n        peachpuff: [255, 218, 185],\n        peru: [205, 133, 63],\n        pink: [255, 192, 203],\n        plum: [221, 160, 221],\n        powderblue: [176, 224, 230],\n        purple: [128, 0, 128],\n        rebeccapurple: [102, 51, 153],\n        red: [255, 0, 0],\n        rosybrown: [188, 143, 143],\n        royalblue: [65, 105, 225],\n        saddlebrown: [139, 69, 19],\n        salmon: [250, 128, 114],\n        sandybrown: [244, 164, 96],\n        seagreen: [46, 139, 87],\n        seashell: [255, 245, 238],\n        sienna: [160, 82, 45],\n        silver: [192, 192, 192],\n        skyblue: [135, 206, 235],\n        slateblue: [106, 90, 205],\n        slategray: [112, 128, 144],\n        slategrey: [112, 128, 144],\n        snow: [255, 250, 250],\n        springgreen: [0, 255, 127],\n        steelblue: [70, 130, 180],\n        tan: [210, 180, 140],\n        teal: [0, 128, 128],\n        thistle: [216, 191, 216],\n        tomato: [255, 99, 71],\n        turquoise: [64, 224, 208],\n        violet: [238, 130, 238],\n        wheat: [245, 222, 179],\n        white: [255, 255, 255],\n        whitesmoke: [245, 245, 245],\n        yellow: [255, 255, 0],\n        yellowgreen: [154, 205, 50],\n      };\n    },\n    211: function (t, e, n) {\n      \"use strict\";\n      var r = n(212),\n        i = Array.prototype.concat,\n        o = Array.prototype.slice,\n        a = (t.exports = function (t) {\n          var e,\n            n,\n            a,\n            s = [];\n          for (e = 0, n = t.length; e < n; e++)\n            (a = t[e]), r(a) ? (s = i.call(s, o.call(a))) : s.push(a);\n          return s;\n        });\n      a.wrap = function (t) {\n        return function () {\n          return t(a(arguments));\n        };\n      };\n    },\n    212: function (t, e, n) {\n      \"use strict\";\n      t.exports = function (t) {\n        return (\n          !(!t || \"string\" == typeof t) &&\n          (t instanceof Array ||\n            Array.isArray(t) ||\n            (t.length >= 0 &&\n              (t.splice instanceof Function ||\n                (Object.getOwnPropertyDescriptor(t, t.length - 1) &&\n                  \"String\" !== t.constructor.name))))\n        );\n      };\n    },\n    213: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = n(126),\n        a = n(215),\n        s = {};\n      Object.keys(o).forEach(function (t) {\n        (s[t] = {}),\n          Object.defineProperty(s[t], \"channels\", { value: o[t].channels }),\n          Object.defineProperty(s[t], \"labels\", { value: o[t].labels });\n        var e = a(t);\n        Object.keys(e).forEach(function (n) {\n          var r = e[n];\n          (s[t][n] = (function (t) {\n            var e = function (e) {\n              if (null == e) return e;\n              arguments.length > 1 &&\n                (e = Array.prototype.slice.call(arguments));\n              var n,\n                r,\n                o = t(e);\n              if (\"object\" === i(o))\n                for (n = o.length, r = 0; r < n; r++) o[r] = Math.round(o[r]);\n              return o;\n            };\n            return \"conversion\" in t && (e.conversion = t.conversion), e;\n          })(r)),\n            (s[t][n].raw = (function (t) {\n              var e = function (e) {\n                return null == e\n                  ? e\n                  : (arguments.length > 1 &&\n                      (e = Array.prototype.slice.call(arguments)),\n                    t(e));\n              };\n              return \"conversion\" in t && (e.conversion = t.conversion), e;\n            })(r));\n        });\n      }),\n        (t.exports = s);\n    },\n    214: function (t, e, n) {\n      \"use strict\";\n      t.exports = {\n        aliceblue: [240, 248, 255],\n        antiquewhite: [250, 235, 215],\n        aqua: [0, 255, 255],\n        aquamarine: [127, 255, 212],\n        azure: [240, 255, 255],\n        beige: [245, 245, 220],\n        bisque: [255, 228, 196],\n        black: [0, 0, 0],\n        blanchedalmond: [255, 235, 205],\n        blue: [0, 0, 255],\n        blueviolet: [138, 43, 226],\n        brown: [165, 42, 42],\n        burlywood: [222, 184, 135],\n        cadetblue: [95, 158, 160],\n        chartreuse: [127, 255, 0],\n        chocolate: [210, 105, 30],\n        coral: [255, 127, 80],\n        cornflowerblue: [100, 149, 237],\n        cornsilk: [255, 248, 220],\n        crimson: [220, 20, 60],\n        cyan: [0, 255, 255],\n        darkblue: [0, 0, 139],\n        darkcyan: [0, 139, 139],\n        darkgoldenrod: [184, 134, 11],\n        darkgray: [169, 169, 169],\n        darkgreen: [0, 100, 0],\n        darkgrey: [169, 169, 169],\n        darkkhaki: [189, 183, 107],\n        darkmagenta: [139, 0, 139],\n        darkolivegreen: [85, 107, 47],\n        darkorange: [255, 140, 0],\n        darkorchid: [153, 50, 204],\n        darkred: [139, 0, 0],\n        darksalmon: [233, 150, 122],\n        darkseagreen: [143, 188, 143],\n        darkslateblue: [72, 61, 139],\n        darkslategray: [47, 79, 79],\n        darkslategrey: [47, 79, 79],\n        darkturquoise: [0, 206, 209],\n        darkviolet: [148, 0, 211],\n        deeppink: [255, 20, 147],\n        deepskyblue: [0, 191, 255],\n        dimgray: [105, 105, 105],\n        dimgrey: [105, 105, 105],\n        dodgerblue: [30, 144, 255],\n        firebrick: [178, 34, 34],\n        floralwhite: [255, 250, 240],\n        forestgreen: [34, 139, 34],\n        fuchsia: [255, 0, 255],\n        gainsboro: [220, 220, 220],\n        ghostwhite: [248, 248, 255],\n        gold: [255, 215, 0],\n        goldenrod: [218, 165, 32],\n        gray: [128, 128, 128],\n        green: [0, 128, 0],\n        greenyellow: [173, 255, 47],\n        grey: [128, 128, 128],\n        honeydew: [240, 255, 240],\n        hotpink: [255, 105, 180],\n        indianred: [205, 92, 92],\n        indigo: [75, 0, 130],\n        ivory: [255, 255, 240],\n        khaki: [240, 230, 140],\n        lavender: [230, 230, 250],\n        lavenderblush: [255, 240, 245],\n        lawngreen: [124, 252, 0],\n        lemonchiffon: [255, 250, 205],\n        lightblue: [173, 216, 230],\n        lightcoral: [240, 128, 128],\n        lightcyan: [224, 255, 255],\n        lightgoldenrodyellow: [250, 250, 210],\n        lightgray: [211, 211, 211],\n        lightgreen: [144, 238, 144],\n        lightgrey: [211, 211, 211],\n        lightpink: [255, 182, 193],\n        lightsalmon: [255, 160, 122],\n        lightseagreen: [32, 178, 170],\n        lightskyblue: [135, 206, 250],\n        lightslategray: [119, 136, 153],\n        lightslategrey: [119, 136, 153],\n        lightsteelblue: [176, 196, 222],\n        lightyellow: [255, 255, 224],\n        lime: [0, 255, 0],\n        limegreen: [50, 205, 50],\n        linen: [250, 240, 230],\n        magenta: [255, 0, 255],\n        maroon: [128, 0, 0],\n        mediumaquamarine: [102, 205, 170],\n        mediumblue: [0, 0, 205],\n        mediumorchid: [186, 85, 211],\n        mediumpurple: [147, 112, 219],\n        mediumseagreen: [60, 179, 113],\n        mediumslateblue: [123, 104, 238],\n        mediumspringgreen: [0, 250, 154],\n        mediumturquoise: [72, 209, 204],\n        mediumvioletred: [199, 21, 133],\n        midnightblue: [25, 25, 112],\n        mintcream: [245, 255, 250],\n        mistyrose: [255, 228, 225],\n        moccasin: [255, 228, 181],\n        navajowhite: [255, 222, 173],\n        navy: [0, 0, 128],\n        oldlace: [253, 245, 230],\n        olive: [128, 128, 0],\n        olivedrab: [107, 142, 35],\n        orange: [255, 165, 0],\n        orangered: [255, 69, 0],\n        orchid: [218, 112, 214],\n        palegoldenrod: [238, 232, 170],\n        palegreen: [152, 251, 152],\n        paleturquoise: [175, 238, 238],\n        palevioletred: [219, 112, 147],\n        papayawhip: [255, 239, 213],\n        peachpuff: [255, 218, 185],\n        peru: [205, 133, 63],\n        pink: [255, 192, 203],\n        plum: [221, 160, 221],\n        powderblue: [176, 224, 230],\n        purple: [128, 0, 128],\n        rebeccapurple: [102, 51, 153],\n        red: [255, 0, 0],\n        rosybrown: [188, 143, 143],\n        royalblue: [65, 105, 225],\n        saddlebrown: [139, 69, 19],\n        salmon: [250, 128, 114],\n        sandybrown: [244, 164, 96],\n        seagreen: [46, 139, 87],\n        seashell: [255, 245, 238],\n        sienna: [160, 82, 45],\n        silver: [192, 192, 192],\n        skyblue: [135, 206, 235],\n        slateblue: [106, 90, 205],\n        slategray: [112, 128, 144],\n        slategrey: [112, 128, 144],\n        snow: [255, 250, 250],\n        springgreen: [0, 255, 127],\n        steelblue: [70, 130, 180],\n        tan: [210, 180, 140],\n        teal: [0, 128, 128],\n        thistle: [216, 191, 216],\n        tomato: [255, 99, 71],\n        turquoise: [64, 224, 208],\n        violet: [238, 130, 238],\n        wheat: [245, 222, 179],\n        white: [255, 255, 255],\n        whitesmoke: [245, 245, 245],\n        yellow: [255, 255, 0],\n        yellowgreen: [154, 205, 50],\n      };\n    },\n    215: function (t, e, n) {\n      \"use strict\";\n      var r = n(126);\n      function i(t) {\n        var e,\n          n,\n          i,\n          o,\n          a,\n          s,\n          c = (function () {\n            var t,\n              e,\n              n = {},\n              i = Object.keys(r);\n            for (t = i.length, e = 0; e < t; e++)\n              n[i[e]] = { distance: -1, parent: null };\n            return n;\n          })(),\n          u = [t];\n        for (c[t].distance = 0; u.length; )\n          for (\n            e = u.pop(), i = (n = Object.keys(r[e])).length, o = 0;\n            o < i;\n            o++\n          )\n            -1 === (s = c[(a = n[o])]).distance &&\n              ((s.distance = c[e].distance + 1), (s.parent = e), u.unshift(a));\n        return c;\n      }\n      function o(t, e) {\n        return function (n) {\n          return e(t(n));\n        };\n      }\n      function a(t, e) {\n        for (\n          var n = [e[t].parent, t], i = r[e[t].parent][t], a = e[t].parent;\n          e[a].parent;\n\n        )\n          n.unshift(e[a].parent),\n            (i = o(r[e[a].parent][a], i)),\n            (a = e[a].parent);\n        return (i.conversion = n), i;\n      }\n      t.exports = function (t) {\n        var e,\n          n,\n          r,\n          o = i(t),\n          s = {},\n          c = Object.keys(o);\n        for (e = c.length, n = 0; n < e; n++)\n          null !== o[(r = c[n])].parent && (s[r] = a(r, o));\n        return s;\n      };\n    },\n    216: function (t, e, n) {\n      \"use strict\";\n      var r = Object.create\n          ? function (t, e, n, r) {\n              void 0 === r && (r = n),\n                Object.defineProperty(t, r, {\n                  enumerable: !0,\n                  get: function () {\n                    return e[n];\n                  },\n                });\n            }\n          : function (t, e, n, r) {\n              void 0 === r && (r = n), (t[r] = e[n]);\n            },\n        i = function (t, e) {\n          for (var n in t)\n            \"default\" === n ||\n              Object.prototype.hasOwnProperty.call(e, n) ||\n              r(e, t, n);\n        };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        i(n(217), e),\n        i(n(218), e),\n        i(n(219), e),\n        i(n(220), e),\n        i(n(221), e),\n        i(n(222), e);\n    },\n    217: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.camelize = e.isString = void 0);\n      e.isString = function (t) {\n        return \"string\" == typeof t;\n      };\n      var r = /-(\\w)/g;\n      e.camelize = (function (t) {\n        var e = Object.create(null);\n        return function (n) {\n          return e[n] || (e[n] = t(n));\n        };\n      })(function (t) {\n        return t.replace(r, function (t, e) {\n          return e ? e.toUpperCase() : \"\";\n        });\n      });\n    },\n    218: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isArray = void 0),\n        (e.isArray = Array.isArray);\n    },\n    219: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.toNumber = e.isNaN = e.isNumber = void 0);\n      e.isNumber = function (t) {\n        return \"number\" == typeof t;\n      };\n      e.isNaN = function (t) {\n        return Number.isNaN(Number(t));\n      };\n      e.toNumber = function (t) {\n        var n = parseFloat(t);\n        return e.isNaN(n) ? t : n;\n      };\n    },\n    22: function (t, e, n) {\n      \"use strict\";\n      var r = n(95),\n        i = Object(r.getColorsWithSubjectColor)(\n          \"rgb(95, 149, 255)\",\n          \"rgb(255, 255, 255)\",\n        );\n      e.a = {\n        version: \"0.0.16\",\n        rootContainerClassName: \"root-container\",\n        uiContainerClassName: \"ui-container\",\n        waterContainerClassName: \"water-container\",\n        nodeContainerClassName: \"node-container\",\n        edgeContainerClassName: \"edge-container\",\n        comboContainerClassName: \"combo-container\",\n        delegateContainerClassName: \"delegate-container\",\n        defaultLoopPosition: \"top\",\n        nodeLabel: {\n          style: {\n            fill: \"#000\",\n            fontSize: 12,\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n          },\n          offset: 4,\n        },\n        defaultNode: {\n          type: \"circle\",\n          style: { lineWidth: 1, stroke: i.mainStroke, fill: i.mainFill },\n          size: 20,\n          color: i.mainStroke,\n          linkPoints: {\n            size: 8,\n            lineWidth: 1,\n            fill: i.activeFill,\n            stroke: i.activeStroke,\n          },\n        },\n        nodeStateStyles: {\n          active: {\n            fill: i.activeFill,\n            stroke: i.activeStroke,\n            lineWidth: 2,\n            shadowColor: i.mainStroke,\n            shadowBlur: 10,\n          },\n          selected: {\n            fill: i.selectedFill,\n            stroke: i.selectedStroke,\n            lineWidth: 4,\n            shadowColor: i.selectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            fill: i.highlightFill,\n            stroke: i.highlightStroke,\n            lineWidth: 2,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: {\n            fill: i.inactiveFill,\n            stroke: i.inactiveStroke,\n            lineWidth: 1,\n          },\n          disable: {\n            fill: i.disableFill,\n            stroke: i.disableStroke,\n            lineWidth: 1,\n          },\n        },\n        edgeLabel: {\n          style: {\n            fill: \"rgb(0, 0, 0)\",\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n            fontSize: 12,\n          },\n        },\n        defaultEdge: {\n          type: \"line\",\n          size: 1,\n          style: { stroke: i.edgeMainStroke, lineAppendWidth: 2 },\n          color: i.edgeMainStroke,\n        },\n        edgeStateStyles: {\n          active: { stroke: i.edgeActiveStroke, lineWidth: 1 },\n          selected: {\n            stroke: i.edgeSelectedStroke,\n            lineWidth: 2,\n            shadowColor: i.edgeSelectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            stroke: i.edgeHighlightStroke,\n            lineWidth: 2,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: { stroke: i.edgeInactiveStroke, lineWidth: 1 },\n          disable: { stroke: i.edgeDisableStroke, lineWidth: 1 },\n        },\n        comboLabel: {\n          style: { fill: \"rgb(0, 0, 0)\", textBaseline: \"middle\", fontSize: 12 },\n          refY: 10,\n          refX: 10,\n        },\n        defaultCombo: {\n          type: \"circle\",\n          style: {\n            fill: i.comboMainFill,\n            lineWidth: 1,\n            stroke: i.comboMainStroke,\n            r: 5,\n            width: 20,\n            height: 10,\n          },\n          size: [20, 5],\n          color: i.comboMainStroke,\n          padding: [25, 20, 15, 20],\n        },\n        comboStateStyles: {\n          active: {\n            stroke: i.comboActiveStroke,\n            lineWidth: 1,\n            fill: i.comboActiveFill,\n          },\n          selected: {\n            stroke: i.comboSelectedStroke,\n            lineWidth: 2,\n            fill: i.comboSelectedFill,\n            shadowColor: i.comboSelectedStroke,\n            shadowBlur: 10,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          highlight: {\n            stroke: i.comboHighlightStroke,\n            lineWidth: 2,\n            fill: i.comboHighlightFill,\n            \"text-shape\": { fontWeight: 500 },\n          },\n          inactive: {\n            stroke: i.comboInactiveStroke,\n            fill: i.comboInactiveFill,\n            lineWidth: 1,\n          },\n          disable: {\n            stroke: i.comboDisableStroke,\n            fill: i.comboDisableFill,\n            lineWidth: 1,\n          },\n        },\n        delegateStyle: {\n          fill: \"#F3F9FF\",\n          fillOpacity: 0.5,\n          stroke: \"#1890FF\",\n          strokeOpacity: 0.9,\n          lineDash: [5, 5],\n        },\n        textWaterMarkerConfig: {\n          width: 150,\n          height: 100,\n          compatible: !1,\n          text: {\n            x: 0,\n            y: 60,\n            lineHeight: 20,\n            rotate: 20,\n            fontSize: 14,\n            fontFamily: \"Microsoft YaHei\",\n            fill: \"rgba(0, 0, 0, 0.1)\",\n            baseline: \"Middle\",\n          },\n        },\n        imageWaterMarkerConfig: {\n          image: { x: 0, y: 0, width: 30, height: 20, rotate: 0 },\n        },\n        waterMarkerImage:\n          \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n      };\n    },\n    220: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.traverseTreeUp =\n          e.scaleMatrix =\n          e.getAdjMatrix =\n          e.floydWarshall =\n          e.getDegree =\n            void 0);\n      e.getDegree = function (t, e, n) {\n        var r,\n          i = [];\n        for (r = 0; r < t; r++) i[r] = 0;\n        return n\n          ? (n.forEach(function (t) {\n              t.source && (i[e[t.source]] += 1),\n                t.target && (i[e[t.target]] += 1);\n            }),\n            i)\n          : i;\n      };\n      e.floydWarshall = function (t) {\n        var e,\n          n = [],\n          r = t.length;\n        for (i = 0; i < r; i += 1)\n          for (n[i] = [], o = 0; o < r; o += 1)\n            i === o\n              ? (n[i][o] = 0)\n              : 0 !== t[i][o] && t[i][o]\n              ? (n[i][o] = t[i][o])\n              : (n[i][o] = 1 / 0);\n        for (e = 0; e < r; e += 1)\n          for (var i = 0; i < r; i += 1)\n            for (var o = 0; o < r; o += 1)\n              n[i][o] > n[i][e] + n[e][o] && (n[i][o] = n[i][e] + n[e][o]);\n        return n;\n      };\n      e.getAdjMatrix = function (t, e) {\n        var n = t.nodes,\n          r = t.edges,\n          i = [],\n          o = {};\n        if (!n) throw new Error(\"invalid nodes data!\");\n        return (\n          n &&\n            n.forEach(function (t, e) {\n              (o[t.id] = e), i.push([]);\n            }),\n          r &&\n            r.forEach(function (t) {\n              var n = t.source,\n                r = t.target,\n                a = o[n],\n                s = o[r];\n              (i[a][s] = 1), e || (i[s][a] = 1);\n            }),\n          i\n        );\n      };\n      e.scaleMatrix = function (t, e) {\n        var n = [];\n        return (\n          t.forEach(function (t) {\n            var r = [];\n            t.forEach(function (t) {\n              r.push(t * e);\n            }),\n              n.push(r);\n          }),\n          n\n        );\n      };\n      e.traverseTreeUp = function (t, e) {\n        \"function\" == typeof e &&\n          (function t(e, n) {\n            var r;\n            if (e && e.children)\n              for (r = e.children.length - 1; r >= 0; r--)\n                if (!t(e.children[r], n)) return;\n            return !!n(e);\n          })(t, e);\n      };\n    },\n    221: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = function () {\n        return (o =\n          Object.assign ||\n          function (t) {\n            var e, n, r;\n            for (n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clone = e.isObject = void 0);\n      e.isObject = function (t) {\n        return null !== t && \"object\" === i(t);\n      };\n      e.clone = function (t) {\n        var n, r;\n        return null === t\n          ? t\n          : t instanceof Date\n          ? new Date(t.getTime())\n          : t instanceof Array\n          ? ((n = []),\n            t.forEach(function (t) {\n              n.push(t);\n            }),\n            n.map(function (t) {\n              return e.clone(t);\n            }))\n          : \"object\" === i(t) && t !== {}\n          ? ((r = o({}, t)),\n            Object.keys(r).forEach(function (t) {\n              r[t] = e.clone(r[t]);\n            }),\n            r)\n          : t;\n      };\n    },\n    222: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.isFunction = void 0);\n      e.isFunction = function (t) {\n        return \"function\" == typeof t;\n      };\n    },\n    223: function (t, e) {\n      (function (e) {\n        t.exports = e;\n      }).call(this, {});\n    },\n    23: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return f;\n      }),\n        n.d(e, \"b\", function () {\n          return d;\n        }),\n        n.d(e, \"a\", function () {\n          return p;\n        });\n      var r = n(1),\n        i = n(31);\n      function o(t) {\n        return (o =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var a = Math.sin,\n        s = Math.cos,\n        c = Math.atan2,\n        u = Math.PI;\n      function h(t, e, n, r, o, h, l) {\n        var f = e.stroke,\n          d = e.lineWidth,\n          p = c(r - h, n - o),\n          g = new i.Path({\n            type: \"path\",\n            canvas: t.get(\"canvas\"),\n            isArrowShape: !0,\n            attrs: {\n              path:\n                \"M\" +\n                10 * s(u / 6) +\n                \",\" +\n                10 * a(u / 6) +\n                \" L0,0 L\" +\n                10 * s(u / 6) +\n                \",-\" +\n                10 * a(u / 6),\n              stroke: f,\n              lineWidth: d,\n            },\n          });\n        g.translate(o, h),\n          g.rotateAtPoint(o, h, p),\n          t.set(l ? \"startArrowShape\" : \"endArrowShape\", g);\n      }\n      function l(t, e, n, o, u, h, l) {\n        var f = e.startArrow,\n          d = e.endArrow,\n          p = e.stroke,\n          g = e.lineWidth,\n          v = l ? f : d,\n          y = v.d,\n          m = v.fill,\n          b = v.stroke,\n          x = v.lineWidth,\n          S = Object(r.e)(v, [\"d\", \"fill\", \"stroke\", \"lineWidth\"]),\n          w = c(o - h, n - u);\n        y && ((u -= s(w) * y), (h -= a(w) * y));\n        var O = new i.Path({\n          type: \"path\",\n          canvas: t.get(\"canvas\"),\n          isArrowShape: !0,\n          attrs: Object(r.a)(Object(r.a)({}, S), {\n            stroke: b || p,\n            lineWidth: x || g,\n            fill: m,\n          }),\n        });\n        O.translate(u, h),\n          O.rotateAtPoint(u, h, w),\n          t.set(l ? \"startArrowShape\" : \"endArrowShape\", O);\n      }\n      function f(t, e, n, r, i) {\n        var o = c(r - e, n - t);\n        return { dx: s(o) * i, dy: a(o) * i };\n      }\n      function d(t, e, n, r, i, a) {\n        \"object\" === o(e.startArrow)\n          ? l(t, e, n, r, i, a, !0)\n          : e.startArrow\n          ? h(t, e, n, r, i, a, !0)\n          : t.set(\"startArrowShape\", null);\n      }\n      function p(t, e, n, r, i, a) {\n        \"object\" === o(e.endArrow)\n          ? l(t, e, n, r, i, a, !1)\n          : e.endArrow\n          ? h(t, e, n, r, i, a, !1)\n          : t.set(\"startArrowShape\", null);\n      }\n    },\n    25: function (t, e, n) {\n      \"use strict\";\n      function r(t, e) {\n        var n = [],\n          r = t[0],\n          i = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          c = t[5],\n          u = t[6],\n          h = t[7],\n          l = t[8],\n          f = e[0],\n          d = e[1],\n          p = e[2],\n          g = e[3],\n          v = e[4],\n          y = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          (n[0] = f * r + d * a + p * u),\n          (n[1] = f * i + d * s + p * h),\n          (n[2] = f * o + d * c + p * l),\n          (n[3] = g * r + v * a + y * u),\n          (n[4] = g * i + v * s + y * h),\n          (n[5] = g * o + v * c + y * l),\n          (n[6] = m * r + b * a + x * u),\n          (n[7] = m * i + b * s + x * h),\n          (n[8] = m * o + b * c + x * l),\n          n\n        );\n      }\n      function i(t, e) {\n        var n = [],\n          r = e[0],\n          i = e[1];\n        return (\n          (n[0] = t[0] * r + t[3] * i + t[6]),\n          (n[1] = t[1] * r + t[4] * i + t[7]),\n          n\n        );\n      }\n      function o(t) {\n        var e = [],\n          n = t[0],\n          r = t[1],\n          i = t[2],\n          o = t[3],\n          a = t[4],\n          s = t[5],\n          c = t[6],\n          u = t[7],\n          h = t[8],\n          l = h * a - s * u,\n          f = -h * o + s * c,\n          d = u * o - a * c,\n          p = n * l + r * f + i * d;\n        return p\n          ? ((p = 1 / p),\n            (e[0] = l * p),\n            (e[1] = (-h * r + i * u) * p),\n            (e[2] = (s * r - i * a) * p),\n            (e[3] = f * p),\n            (e[4] = (h * n - i * c) * p),\n            (e[5] = (-s * n + i * o) * p),\n            (e[6] = d * p),\n            (e[7] = (-u * n + r * c) * p),\n            (e[8] = (a * n - r * o) * p),\n            e)\n          : null;\n      }\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"c\", function () {\n          return i;\n        }),\n        n.d(e, \"a\", function () {\n          return o;\n        });\n    },\n    28: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return c;\n      }),\n        n.d(e, \"b\", function () {\n          return f;\n        }),\n        n.d(e, \"c\", function () {\n          return g;\n        }),\n        n.d(e, \"d\", function () {\n          return w;\n        });\n      var r = n(0),\n        i = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi,\n        o = /[^\\s\\,]+/gi;\n      var a = function (t) {\n          var e = t || [];\n          return Object(r.isArray)(e)\n            ? e\n            : Object(r.isString)(e)\n            ? ((e = e.match(i)),\n              Object(r.each)(e, function (t, n) {\n                if ((t = t.match(o))[0].length > 1) {\n                  var i = t[0].charAt(0);\n                  t.splice(1, 0, t[0].substr(1)), (t[0] = i);\n                }\n                Object(r.each)(t, function (e, n) {\n                  isNaN(e) || (t[n] = +e);\n                }),\n                  (e[n] = t);\n              }),\n              e)\n            : void 0;\n        },\n        s = n(5);\n      var c = function (t, e, n) {\n        void 0 === e && (e = !1),\n          void 0 === n &&\n            (n = [\n              [0, 0],\n              [1, 1],\n            ]);\n        for (var r = !!e, i = [], o = 0, a = t.length; o < a; o += 2)\n          i.push([t[o], t[o + 1]]);\n        var c,\n          u,\n          h,\n          l = (function (t, e, n, r) {\n            var i,\n              o,\n              a,\n              c,\n              u,\n              h,\n              l,\n              f = [],\n              d = !!r;\n            if (d) {\n              (a = r[0]), (c = r[1]);\n              for (var p = 0, g = t.length; p < g; p += 1) {\n                var v = t[p];\n                (a = s.b.min([0, 0], a, v)), (c = s.b.max([0, 0], c, v));\n              }\n            }\n            p = 0;\n            for (var y = t.length; p < y; p += 1) {\n              v = t[p];\n              if (0 !== p || n)\n                if (p !== y - 1 || n) {\n                  (i = t[[p ? p - 1 : y - 1, p - 1][n ? 0 : 1]]),\n                    (o = t[n ? (p + 1) % y : p + 1]);\n                  var m = [0, 0];\n                  (m = s.b.sub(m, o, i)), (m = s.b.scale(m, m, e));\n                  var b = s.b.distance(v, i),\n                    x = s.b.distance(v, o),\n                    S = b + x;\n                  0 !== S && ((b /= S), (x /= S));\n                  var w = s.b.scale([0, 0], m, -b),\n                    O = s.b.scale([0, 0], m, x);\n                  (h = s.b.add([0, 0], v, w)),\n                    (u = s.b.add([0, 0], v, O)),\n                    (u = s.b.min([0, 0], u, s.b.max([0, 0], o, v))),\n                    (u = s.b.max([0, 0], u, s.b.min([0, 0], o, v))),\n                    (w = s.b.sub([0, 0], u, v)),\n                    (w = s.b.scale([0, 0], w, -b / x)),\n                    (h = s.b.add([0, 0], v, w)),\n                    (h = s.b.min([0, 0], h, s.b.max([0, 0], i, v))),\n                    (h = s.b.max([0, 0], h, s.b.min([0, 0], i, v))),\n                    (O = s.b.sub([0, 0], v, h)),\n                    (O = s.b.scale([0, 0], O, x / b)),\n                    (u = s.b.add([0, 0], v, O)),\n                    d &&\n                      ((h = s.b.max([0, 0], h, a)),\n                      (h = s.b.min([0, 0], h, c)),\n                      (u = s.b.max([0, 0], u, a)),\n                      (u = s.b.min([0, 0], u, c))),\n                    f.push(l),\n                    f.push(h),\n                    (l = u);\n                } else (h = v), f.push(l), f.push(h);\n              else l = v;\n            }\n            return n && f.push(f.shift()), f;\n          })(i, 0.4, r, n),\n          f = i.length,\n          d = [];\n        for (o = 0; o < f - 1; o += 1)\n          (c = l[2 * o]),\n            (u = l[2 * o + 1]),\n            (h = i[o + 1]),\n            d.push([\"C\", c[0], c[1], u[0], u[1], h[0], h[1]]);\n        return (\n          r &&\n            ((c = l[f]),\n            (u = l[f + 1]),\n            (h = i[0]),\n            d.push([\"C\", c[0], c[1], u[0], u[1], h[0], h[1]])),\n          d\n        );\n      };\n      var u = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        h = new RegExp(\n          \"([a-z])[\" +\n            u +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            u +\n            \"]*,?[\" +\n            u +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        l = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + u + \"]*,?[\" + u + \"]*\",\n          \"ig\",\n        );\n      function f(t) {\n        if (!t) return null;\n        if (Object(r.isArray)(t)) return t;\n        var e = {\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          n = [];\n        return (\n          String(t).replace(h, function (t, r, i) {\n            var o = [],\n              a = r.toLowerCase();\n            if (\n              (i.replace(l, function (t, e) {\n                e && o.push(+e);\n              }),\n              \"m\" === a &&\n                o.length > 2 &&\n                (n.push([r].concat(o.splice(0, 2))),\n                (a = \"l\"),\n                (r = \"m\" === r ? \"l\" : \"L\")),\n              \"o\" === a && 1 === o.length && n.push([r, o[0]]),\n              \"r\" === a)\n            )\n              n.push([r].concat(o));\n            else\n              for (\n                ;\n                o.length >= e[a] &&\n                (n.push([r].concat(o.splice(0, e[a]))), e[a]);\n\n              );\n            return \"\";\n          }),\n          n\n        );\n      }\n      var d = /[a-z]/;\n      function p(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function g(t) {\n        var e = f(t);\n        if (!e || !e.length) return [[\"M\", 0, 0]];\n        for (var n = !1, r = 0; r < e.length; r++) {\n          var i = e[r][0];\n          if (d.test(i) || [\"V\", \"H\", \"T\", \"S\"].indexOf(i) >= 0) {\n            n = !0;\n            break;\n          }\n        }\n        if (!n) return e;\n        var o = [],\n          a = 0,\n          s = 0,\n          c = 0,\n          u = 0,\n          h = 0,\n          l = e[0];\n        (\"M\" !== l[0] && \"m\" !== l[0]) ||\n          ((c = a = +l[1]), (u = s = +l[2]), h++, (o[0] = [\"M\", a, s]));\n        r = h;\n        for (var g = e.length; r < g; r++) {\n          var v = e[r],\n            y = o[r - 1],\n            m = [],\n            b = (i = v[0]).toUpperCase();\n          if (i !== b)\n            switch (((m[0] = b), b)) {\n              case \"A\":\n                (m[1] = v[1]),\n                  (m[2] = v[2]),\n                  (m[3] = v[3]),\n                  (m[4] = v[4]),\n                  (m[5] = v[5]),\n                  (m[6] = +v[6] + a),\n                  (m[7] = +v[7] + s);\n                break;\n              case \"V\":\n                m[1] = +v[1] + s;\n                break;\n              case \"H\":\n                m[1] = +v[1] + a;\n                break;\n              case \"M\":\n                (c = +v[1] + a), (u = +v[2] + s), (m[1] = c), (m[2] = u);\n                break;\n              default:\n                for (var x = 1, S = v.length; x < S; x++)\n                  m[x] = +v[x] + (x % 2 ? a : s);\n            }\n          else m = e[r];\n          switch (b) {\n            case \"Z\":\n              (a = +c), (s = +u);\n              break;\n            case \"H\":\n              m = [\"L\", (a = m[1]), s];\n              break;\n            case \"V\":\n              m = [\"L\", a, (s = m[1])];\n              break;\n            case \"T\":\n              (a = m[1]), (s = m[2]);\n              var w = p([y[1], y[2]], [y[3], y[4]]);\n              m = [\"Q\", w[0], w[1], a, s];\n              break;\n            case \"S\":\n              (a = m[m.length - 2]), (s = m[m.length - 1]);\n              var O = y.length,\n                M = p([y[O - 4], y[O - 3]], [y[O - 2], y[O - 1]]);\n              m = [\"C\", M[0], M[1], m[1], m[2], a, s];\n              break;\n            case \"M\":\n              (c = m[m.length - 2]), (u = m[m.length - 1]);\n              break;\n            default:\n              (a = m[m.length - 2]), (s = m[m.length - 1]);\n          }\n          o.push(m);\n        }\n        return o;\n      }\n      Math.PI;\n      function v(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function y(t, e) {\n        return v(t) * v(e) ? (t[0] * e[0] + t[1] * e[1]) / (v(t) * v(e)) : 1;\n      }\n      function m(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(y(t, e));\n      }\n      function b(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function x(t, e) {\n        var n = e[1],\n          i = e[2],\n          o = Object(r.mod)(Object(r.toRadian)(e[3]), 2 * Math.PI),\n          a = e[4],\n          s = e[5],\n          c = t[0],\n          u = t[1],\n          h = e[6],\n          l = e[7],\n          f = (Math.cos(o) * (c - h)) / 2 + (Math.sin(o) * (u - l)) / 2,\n          d = (-1 * Math.sin(o) * (c - h)) / 2 + (Math.cos(o) * (u - l)) / 2,\n          p = (f * f) / (n * n) + (d * d) / (i * i);\n        p > 1 && ((n *= Math.sqrt(p)), (i *= Math.sqrt(p)));\n        var g = n * n * (d * d) + i * i * (f * f),\n          v = g ? Math.sqrt((n * n * (i * i) - g) / g) : 1;\n        a === s && (v *= -1), isNaN(v) && (v = 0);\n        var x = i ? (v * n * d) / i : 0,\n          S = n ? (v * -i * f) / n : 0,\n          w = (c + h) / 2 + Math.cos(o) * x - Math.sin(o) * S,\n          O = (u + l) / 2 + Math.sin(o) * x + Math.cos(o) * S,\n          M = [(f - x) / n, (d - S) / i],\n          k = [(-1 * f - x) / n, (-1 * d - S) / i],\n          j = m([1, 0], M),\n          C = m(M, k);\n        return (\n          y(M, k) <= -1 && (C = Math.PI),\n          y(M, k) >= 1 && (C = 0),\n          0 === s && C > 0 && (C -= 2 * Math.PI),\n          1 === s && C < 0 && (C += 2 * Math.PI),\n          {\n            cx: w,\n            cy: O,\n            rx: b(t, [h, l]) ? 0 : n,\n            ry: b(t, [h, l]) ? 0 : i,\n            startAngle: j,\n            endAngle: j + C,\n            xRotation: o,\n            arcFlag: a,\n            sweepFlag: s,\n          }\n        );\n      }\n      function S(t, e) {\n        return [e[0] + (e[0] - t[0]), e[1] + (e[1] - t[1])];\n      }\n      function w(t) {\n        for (\n          var e = [],\n            n = null,\n            r = null,\n            i = null,\n            o = 0,\n            s = (t = a(t)).length,\n            c = 0;\n          c < s;\n          c++\n        ) {\n          var u = t[c];\n          r = t[c + 1];\n          var h = u[0],\n            l = {\n              command: h,\n              prePoint: n,\n              params: u,\n              startTangent: null,\n              endTangent: null,\n            };\n          switch (h) {\n            case \"M\":\n              (i = [u[1], u[2]]), (o = c);\n              break;\n            case \"A\":\n              var f = x(n, u);\n              l.arcParams = f;\n          }\n          if (\"Z\" === h) (n = i), (r = t[o + 1]);\n          else {\n            var d = u.length;\n            n = [u[d - 2], u[d - 1]];\n          }\n          r && \"Z\" === r[0] && ((r = t[o]), e[o] && (e[o].prePoint = n)),\n            (l.currentPoint = n),\n            e[o] && b(n, e[o].currentPoint) && (e[o].prePoint = l.prePoint);\n          var p = r ? [r[r.length - 2], r[r.length - 1]] : null;\n          l.nextPoint = p;\n          var g = l.prePoint;\n          if ([\"L\", \"H\", \"V\"].includes(h))\n            (l.startTangent = [g[0] - n[0], g[1] - n[1]]),\n              (l.endTangent = [n[0] - g[0], n[1] - g[1]]);\n          else if (\"Q\" === h) {\n            var v = [u[1], u[2]];\n            (l.startTangent = [g[0] - v[0], g[1] - v[1]]),\n              (l.endTangent = [n[0] - v[0], n[1] - v[1]]);\n          } else if (\"T\" === h) {\n            v = S((w = e[c - 1]).currentPoint, g);\n            \"Q\" === w.command\n              ? ((l.command = \"Q\"),\n                (l.startTangent = [g[0] - v[0], g[1] - v[1]]),\n                (l.endTangent = [n[0] - v[0], n[1] - v[1]]))\n              : ((l.command = \"TL\"),\n                (l.startTangent = [g[0] - n[0], g[1] - n[1]]),\n                (l.endTangent = [n[0] - g[0], n[1] - g[1]]));\n          } else if (\"C\" === h) {\n            var y = [u[1], u[2]],\n              m = [u[3], u[4]];\n            (l.startTangent = [g[0] - y[0], g[1] - y[1]]),\n              (l.endTangent = [n[0] - m[0], n[1] - m[1]]),\n              0 === l.startTangent[0] &&\n                0 === l.startTangent[1] &&\n                (l.startTangent = [y[0] - m[0], y[1] - m[1]]),\n              0 === l.endTangent[0] &&\n                0 === l.endTangent[1] &&\n                (l.endTangent = [m[0] - y[0], m[1] - y[1]]);\n          } else if (\"S\" === h) {\n            var w;\n            (y = S((w = e[c - 1]).currentPoint, g)), (m = [u[1], u[2]]);\n            \"C\" === w.command\n              ? ((l.command = \"C\"),\n                (l.startTangent = [g[0] - y[0], g[1] - y[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]))\n              : ((l.command = \"SQ\"),\n                (l.startTangent = [g[0] - m[0], g[1] - m[1]]),\n                (l.endTangent = [n[0] - m[0], n[1] - m[1]]));\n          } else if (\"A\" === h) {\n            var O = 0.001,\n              M = l.arcParams || {},\n              k = M.cx,\n              j = void 0 === k ? 0 : k,\n              C = M.cy,\n              E = void 0 === C ? 0 : C,\n              P = M.rx,\n              A = void 0 === P ? 0 : P,\n              I = M.ry,\n              T = void 0 === I ? 0 : I,\n              N = M.sweepFlag,\n              B = void 0 === N ? 0 : N,\n              L = M.startAngle,\n              D = void 0 === L ? 0 : L,\n              _ = M.endAngle,\n              R = void 0 === _ ? 0 : _;\n            0 === B && (O *= -1);\n            var F = A * Math.cos(D - O) + j,\n              Y = T * Math.sin(D - O) + E;\n            l.startTangent = [F - i[0], Y - i[1]];\n            var X = A * Math.cos(D + R + O) + j,\n              z = T * Math.sin(D + R - O) + E;\n            l.endTangent = [g[0] - X, g[1] - z];\n          }\n          e.push(l);\n        }\n        return e;\n      }\n    },\n    3: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"c\", function () {\n        return o;\n      }),\n        n.d(e, \"a\", function () {\n          return a;\n        }),\n        n.d(e, \"d\", function () {\n          return s;\n        }),\n        n.d(e, \"e\", function () {\n          return c;\n        }),\n        n.d(e, \"l\", function () {\n          return u;\n        }),\n        n.d(e, \"j\", function () {\n          return h;\n        }),\n        n.d(e, \"i\", function () {\n          return l;\n        });\n      var r = n(0);\n      n.d(e, \"h\", function () {\n        return r.isNil;\n      }),\n        n.d(e, \"k\", function () {\n          return r.isString;\n        }),\n        n.d(e, \"g\", function () {\n          return r.isFunction;\n        }),\n        n.d(e, \"f\", function () {\n          return r.isArray;\n        }),\n        n.d(e, \"b\", function () {\n          return r.each;\n        }),\n        n.d(e, \"n\", function () {\n          return r.toRadian;\n        }),\n        n.d(e, \"m\", function () {\n          return r.mod;\n        });\n      n(40);\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function o() {\n        return \"object\" ===\n          (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n          window.devicePixelRatio\n          ? window.devicePixelRatio\n          : 1;\n      }\n      function a(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function s(t, e, n, r, i, o) {\n        return i >= t && i <= t + n && o >= e && o <= e + r;\n      }\n      function c(t, e) {\n        return !(\n          e.minX > t.maxX ||\n          e.maxX < t.minX ||\n          e.minY > t.maxY ||\n          e.maxY < t.minY\n        );\n      }\n      function u(t, e) {\n        return t && e\n          ? {\n              minX: Math.min(t.minX, e.minX),\n              minY: Math.min(t.minY, e.minY),\n              maxX: Math.max(t.maxX, e.maxX),\n              maxY: Math.max(t.maxY, e.maxY),\n            }\n          : t || e;\n      }\n      function h(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function l(t, e) {\n        if (t.isCanvas()) return !0;\n        for (var n = e.getParent(), r = !1; n; ) {\n          if (n === t) {\n            r = !0;\n            break;\n          }\n          n = n.getParent();\n        }\n        return r;\n      }\n    },\n    31: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"Base\", function () {\n          return r.a;\n        }),\n        n.d(e, \"Circle\", function () {\n          return a;\n        }),\n        n.d(e, \"Ellipse\", function () {\n          return c;\n        }),\n        n.d(e, \"Image\", function () {\n          return u.a;\n        }),\n        n.d(e, \"Line\", function () {\n          return d;\n        }),\n        n.d(e, \"Marker\", function () {\n          return m;\n        }),\n        n.d(e, \"Path\", function () {\n          return P;\n        }),\n        n.d(e, \"Polygon\", function () {\n          return I;\n        }),\n        n.d(e, \"Polyline\", function () {\n          return T;\n        }),\n        n.d(e, \"Rect\", function () {\n          return B;\n        }),\n        n.d(e, \"Text\", function () {\n          return L;\n        });\n      var r = n(11),\n        i = n(1),\n        o = n(3),\n        a = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), { x: 0, y: 0, r: 0 });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var a = this.attr(),\n                s = a.x,\n                c = a.y,\n                u = a.r,\n                h = i / 2,\n                l = Object(o.a)(s, c, t, e);\n              return r && n\n                ? l <= u + h\n                : r\n                ? l <= u\n                : !!n && l >= u - h && l <= u + h;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.r;\n              t.beginPath(), t.arc(n, r, i, 0, 2 * Math.PI, !1), t.closePath();\n            }),\n            e\n          );\n        })(r.a);\n      function s(t, e, n, r) {\n        return t / (n * n) + e / (r * r);\n      }\n      var c = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x: 0,\n                y: 0,\n                rx: 0,\n                ry: 0,\n              });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr(),\n                a = i / 2,\n                c = o.x,\n                u = o.y,\n                h = o.rx,\n                l = o.ry,\n                f = (t - c) * (t - c),\n                d = (e - u) * (e - u);\n              return r && n\n                ? s(f, d, h + a, l + a) <= 1\n                : r\n                ? s(f, d, h, l) <= 1\n                : !!n &&\n                  s(f, d, h - a, l - a) >= 1 &&\n                  s(f, d, h + a, l + a) <= 1;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.rx,\n                o = e.ry;\n              if ((t.beginPath(), t.ellipse))\n                t.ellipse(n, r, i, o, 0, 0, 2 * Math.PI, !1);\n              else {\n                var a = i > o ? i : o,\n                  s = i > o ? 1 : i / o,\n                  c = i > o ? o / i : 1;\n                t.save(),\n                  t.translate(n, r),\n                  t.scale(s, c),\n                  t.arc(0, 0, a, 0, 2 * Math.PI),\n                  t.restore(),\n                  t.closePath();\n              }\n            }),\n            e\n          );\n        })(r.a),\n        u = n(89),\n        h = n(9);\n      function l(t, e, n, r, i, o, a) {\n        var s = Math.min(t, n),\n          c = Math.max(t, n),\n          u = Math.min(e, r),\n          l = Math.max(e, r),\n          f = i / 2;\n        return (\n          o >= s - f &&\n          o <= c + f &&\n          a >= u - f &&\n          a <= l + f &&\n          h.c.pointToLine(t, e, n, r, o, a) <= i / 2\n        );\n      }\n      var f = n(23),\n        d = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x1: 0,\n                y1: 0,\n                x2: 0,\n                y2: 0,\n                startArrow: !1,\n                endArrow: !1,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this.setArrow();\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r), this.setArrow();\n            }),\n            (e.prototype.setArrow = function () {\n              var t = this.attr(),\n                e = t.x1,\n                n = t.y1,\n                r = t.x2,\n                i = t.y2,\n                o = t.startArrow,\n                a = t.endArrow;\n              o && f.b(this, t, r, i, e, n), a && f.a(this, t, e, n, r, i);\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              if (!n || !i) return !1;\n              var o = this.attr();\n              return l(o.x1, o.y1, o.x2, o.y2, i, t, e);\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x1,\n                r = e.y1,\n                i = e.x2,\n                o = e.y2,\n                a = e.startArrow,\n                s = e.endArrow,\n                c = { dx: 0, dy: 0 },\n                u = { dx: 0, dy: 0 };\n              a && a.d && (c = f.c(n, r, i, o, e.startArrow.d)),\n                s && s.d && (u = f.c(n, r, i, o, e.endArrow.d)),\n                t.beginPath(),\n                t.moveTo(n + c.dx, r + c.dy),\n                t.lineTo(i - u.dx, o - u.dy);\n            }),\n            (e.prototype.afterDrawPath = function (t) {\n              var e = this.get(\"startArrowShape\"),\n                n = this.get(\"endArrowShape\");\n              e && e.draw(t), n && n.draw(t);\n            }),\n            (e.prototype.getTotalLength = function () {\n              var t = this.attr(),\n                e = t.x1,\n                n = t.y1,\n                r = t.x2,\n                i = t.y2;\n              return h.c.length(e, n, r, i);\n            }),\n            (e.prototype.getPoint = function (t) {\n              var e = this.attr(),\n                n = e.x1,\n                r = e.y1,\n                i = e.x2,\n                o = e.y2;\n              return h.c.pointAt(n, r, i, o, t);\n            }),\n            e\n          );\n        })(r.a),\n        p = n(0),\n        g = n(28),\n        v = n(12),\n        y = {\n          circle: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"A\", n, n, 0, 1, 0, t + n, e],\n              [\"A\", n, n, 0, 1, 0, t - n, e],\n            ];\n          },\n          square: function (t, e, n) {\n            return [\n              [\"M\", t - n, e - n],\n              [\"L\", t + n, e - n],\n              [\"L\", t + n, e + n],\n              [\"L\", t - n, e + n],\n              [\"Z\"],\n            ];\n          },\n          diamond: function (t, e, n) {\n            return [\n              [\"M\", t - n, e],\n              [\"L\", t, e - n],\n              [\"L\", t + n, e],\n              [\"L\", t, e + n],\n              [\"Z\"],\n            ];\n          },\n          triangle: function (t, e, n) {\n            var r = n * Math.sin((1 / 3) * Math.PI);\n            return [\n              [\"M\", t - n, e + r],\n              [\"L\", t, e - r],\n              [\"L\", t + n, e + r],\n              [\"Z\"],\n            ];\n          },\n          \"triangle-down\": function (t, e, n) {\n            var r = n * Math.sin((1 / 3) * Math.PI);\n            return [\n              [\"M\", t - n, e - r],\n              [\"L\", t + n, e - r],\n              [\"L\", t, e + r],\n              [\"Z\"],\n            ];\n          },\n        },\n        m = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.initAttrs = function (t) {\n              this._resetParamsCache();\n            }),\n            (e.prototype._resetParamsCache = function () {\n              this.set(\"paramsCache\", {});\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                -1 !== [\"symbol\", \"x\", \"y\", \"r\", \"radius\"].indexOf(e) &&\n                  this._resetParamsCache();\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype._getR = function (t) {\n              return Object(p.isNil)(t.r) ? t.radius : t.r;\n            }),\n            (e.prototype._getPath = function () {\n              var t,\n                n,\n                r = this.attr(),\n                i = r.x,\n                a = r.y,\n                s = r.symbol || \"circle\",\n                c = this._getR(r);\n              if (Object(o.g)(s)) (n = (t = s)(i, a, c)), (n = Object(g.c)(n));\n              else {\n                if (!(t = e.Symbols[s]))\n                  return console.warn(s + \" marker is not supported.\"), null;\n                n = t(i, a, c);\n              }\n              return n;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this._getPath(),\n                n = this.get(\"paramsCache\");\n              Object(v.e)(this, t, { path: e }, n);\n            }),\n            (e.Symbols = y),\n            e\n          );\n        })(r.a);\n      function b(t) {\n        return Math.abs(t) < 1e-6 ? 0 : t < 0 ? -1 : 1;\n      }\n      function x(t, e, n) {\n        return (\n          (n[0] - t[0]) * (e[1] - t[1]) == (e[0] - t[0]) * (n[1] - t[1]) &&\n          Math.min(t[0], e[0]) <= n[0] &&\n          n[0] <= Math.max(t[0], e[0]) &&\n          Math.min(t[1], e[1]) <= n[1] &&\n          n[1] <= Math.max(t[1], e[1])\n        );\n      }\n      function S(t, e, n) {\n        var r = !1,\n          i = t.length;\n        if (i <= 2) return !1;\n        for (var o = 0; o < i; o++) {\n          var a = t[o],\n            s = t[(o + 1) % i];\n          if (x(a, s, [e, n])) return !0;\n          b(a[1] - n) > 0 != b(s[1] - n) > 0 &&\n            b(e - ((n - a[1]) * (a[0] - s[0])) / (a[1] - s[1]) - a[0]) < 0 &&\n            (r = !r);\n        }\n        return r;\n      }\n      var w = n(8),\n        O = n(4),\n        M = n(85);\n      function k(t, e, n, r, i, a, s, c) {\n        var u = (Math.atan2(c - e, s - t) + 2 * Math.PI) % (2 * Math.PI);\n        if (u < r || u > i) return !1;\n        var h = { x: t + n * Math.cos(u), y: e + n * Math.sin(u) };\n        return Object(o.a)(h.x, h.y, s, c) <= a / 2;\n      }\n      var j = O.a.transform;\n      var C = Object(i.a)(\n        {\n          hasArc: function (t) {\n            for (var e = !1, n = t.length, r = 0; r < n; r++) {\n              var i = t[r][0];\n              if (\"C\" === i || \"A\" === i || \"Q\" === i) {\n                e = !0;\n                break;\n              }\n            }\n            return e;\n          },\n          extractPolygons: function (t) {\n            for (var e = t.length, n = [], r = [], i = [], o = 0; o < e; o++) {\n              var a = t[o],\n                s = a[0];\n              \"M\" === s\n                ? (i.length && (r.push(i), (i = [])), i.push([a[1], a[2]]))\n                : \"Z\" === s\n                ? i.length && (n.push(i), (i = []))\n                : i.push([a[1], a[2]]);\n            }\n            return i.length > 0 && r.push(i), { polygons: n, polylines: r };\n          },\n          isPointInStroke: function (t, e, n, r, i) {\n            for (var a = !1, s = e / 2, c = 0; c < t.length; c++) {\n              var u = t[c],\n                f = u.currentPoint,\n                d = u.params,\n                p = u.prePoint,\n                g = u.box;\n              if (\n                !g ||\n                Object(o.d)(g.x - s, g.y - s, g.width + e, g.height + e, n, r)\n              ) {\n                switch (u.command) {\n                  case \"L\":\n                  case \"Z\":\n                    a = l(p[0], p[1], f[0], f[1], e, n, r);\n                    break;\n                  case \"Q\":\n                    a =\n                      h.e.pointDistance(\n                        p[0],\n                        p[1],\n                        d[1],\n                        d[2],\n                        d[3],\n                        d[4],\n                        n,\n                        r,\n                      ) <=\n                      e / 2;\n                    break;\n                  case \"C\":\n                    a =\n                      h.b.pointDistance(\n                        p[0],\n                        p[1],\n                        d[1],\n                        d[2],\n                        d[3],\n                        d[4],\n                        d[5],\n                        d[6],\n                        n,\n                        r,\n                        i,\n                      ) <=\n                      e / 2;\n                    break;\n                  case \"A\":\n                    var v = u.arcParams,\n                      y = v.cx,\n                      m = v.cy,\n                      b = v.rx,\n                      x = v.ry,\n                      S = v.startAngle,\n                      w = v.endAngle,\n                      O = v.xRotation,\n                      C = [n, r, 1],\n                      E = b > x ? b : x,\n                      P = j(null, [\n                        [\"t\", -y, -m],\n                        [\"r\", -O],\n                        [\"s\", 1 / (b > x ? 1 : b / x), 1 / (b > x ? x / b : 1)],\n                      ]);\n                    M.transformMat3(C, C, P),\n                      (a = k(0, 0, E, S, w, e, C[0], C[1]));\n                }\n                if (a) break;\n              }\n            }\n            return a;\n          },\n        },\n        w.PathUtil,\n      );\n      function E(t, e, n) {\n        for (var r = !1, i = 0; i < t.length; i++) {\n          if ((r = S(t[i], e, n))) break;\n        }\n        return r;\n      }\n      var P = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(i.c)(e, t),\n          (e.prototype.getDefaultAttrs = function () {\n            var e = t.prototype.getDefaultAttrs.call(this);\n            return Object(i.a)(Object(i.a)({}, e), {\n              startArrow: !1,\n              endArrow: !1,\n            });\n          }),\n          (e.prototype.initAttrs = function (t) {\n            this._setPathArr(t.path), this.setArrow();\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            t.prototype.onAttrChange.call(this, e, n, r),\n              \"path\" === e && this._setPathArr(n),\n              this.setArrow();\n          }),\n          (e.prototype._setPathArr = function (t) {\n            this.attrs.path = Object(g.c)(t);\n            var e = C.hasArc(t);\n            this.set(\"hasArc\", e),\n              this.set(\"paramsCache\", {}),\n              this.set(\"segments\", null),\n              this.set(\"curve\", null),\n              this.set(\"tCache\", null),\n              this.set(\"totalLength\", null);\n          }),\n          (e.prototype.getSegments = function () {\n            var t = this.get(\"segements\");\n            return (\n              t ||\n                ((t = Object(g.d)(this.attr(\"path\"))), this.set(\"segments\", t)),\n              t\n            );\n          }),\n          (e.prototype.setArrow = function () {\n            var t = this.attr(),\n              e = t.startArrow,\n              n = t.endArrow;\n            if (e) {\n              var r = this.getStartTangent();\n              f.b(this, t, r[0][0], r[0][1], r[1][0], r[1][1]);\n            }\n            if (n) {\n              r = this.getEndTangent();\n              f.a(this, t, r[0][0], r[0][1], r[1][0], r[1][1]);\n            }\n          }),\n          (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n            var o = this.getSegments(),\n              a = (this.get(\"hasArc\"), !1);\n            if (n) {\n              var s = this.getTotalLength();\n              a = C.isPointInStroke(o, i, t, e, s);\n            }\n            if (!a && r) {\n              var c = this.attr(\"path\"),\n                u = C.extractPolygons(c);\n              a = E(u.polygons, t, e) || E(u.polylines, t, e);\n            }\n            return a;\n          }),\n          (e.prototype.createPath = function (t) {\n            var e = this.attr(),\n              n = this.get(\"paramsCache\");\n            Object(v.e)(this, t, e, n);\n          }),\n          (e.prototype.afterDrawPath = function (t) {\n            var e = this.get(\"startArrowShape\"),\n              n = this.get(\"endArrowShape\");\n            e && e.draw(t), n && n.draw(t);\n          }),\n          (e.prototype.getTotalLength = function () {\n            var t = this.get(\"totalLength\");\n            return Object(p.isNil)(t)\n              ? (this._calculateCurve(),\n                this._setTcache(),\n                this.get(\"totalLength\"))\n              : t;\n          }),\n          (e.prototype.getPoint = function (t) {\n            var e,\n              n,\n              r = this.get(\"tCache\");\n            r ||\n              (this._calculateCurve(),\n              this._setTcache(),\n              (r = this.get(\"tCache\")));\n            var i = this.get(\"curve\");\n            if (!r || 0 === r.length)\n              return i ? { x: i[0][1], y: i[0][2] } : null;\n            Object(p.each)(r, function (r, i) {\n              t >= r[0] &&\n                t <= r[1] &&\n                ((e = (t - r[0]) / (r[1] - r[0])), (n = i));\n            });\n            var o = i[n];\n            if (Object(p.isNil)(o) || Object(p.isNil)(n)) return null;\n            var a = o.length,\n              s = i[n + 1];\n            return h.b.pointAt(\n              o[a - 2],\n              o[a - 1],\n              s[1],\n              s[2],\n              s[3],\n              s[4],\n              s[5],\n              s[6],\n              e,\n            );\n          }),\n          (e.prototype._calculateCurve = function () {\n            var t = this.attr().path;\n            this.set(\"curve\", C.pathToCurve(t));\n          }),\n          (e.prototype._setTcache = function () {\n            var t,\n              e,\n              n,\n              r,\n              i = 0,\n              o = 0,\n              a = [],\n              s = this.get(\"curve\");\n            s &&\n              (Object(p.each)(s, function (t, e) {\n                (n = s[e + 1]),\n                  (r = t.length),\n                  n &&\n                    (i +=\n                      h.b.length(\n                        t[r - 2],\n                        t[r - 1],\n                        n[1],\n                        n[2],\n                        n[3],\n                        n[4],\n                        n[5],\n                        n[6],\n                      ) || 0);\n              }),\n              this.set(\"totalLength\", i),\n              0 !== i\n                ? (Object(p.each)(s, function (c, u) {\n                    (n = s[u + 1]),\n                      (r = c.length),\n                      n &&\n                        (((t = [])[0] = o / i),\n                        (e = h.b.length(\n                          c[r - 2],\n                          c[r - 1],\n                          n[1],\n                          n[2],\n                          n[3],\n                          n[4],\n                          n[5],\n                          n[6],\n                        )),\n                        (o += e || 0),\n                        (t[1] = o / i),\n                        a.push(t));\n                  }),\n                  this.set(\"tCache\", a))\n                : this.set(\"tCache\", []));\n          }),\n          (e.prototype.getStartTangent = function () {\n            var t,\n              e = this.getSegments();\n            if (e.length > 1) {\n              var n = e[0].currentPoint,\n                r = e[1].currentPoint,\n                i = e[1].startTangent;\n              (t = []),\n                i\n                  ? (t.push([n[0] - i[0], n[1] - i[1]]), t.push([n[0], n[1]]))\n                  : (t.push([r[0], r[1]]), t.push([n[0], n[1]]));\n            }\n            return t;\n          }),\n          (e.prototype.getEndTangent = function () {\n            var t,\n              e = this.getSegments(),\n              n = e.length;\n            if (n > 1) {\n              var r = e[n - 2].currentPoint,\n                i = e[n - 1].currentPoint,\n                o = e[n - 1].endTangent;\n              (t = []),\n                o\n                  ? (t.push([i[0] - o[0], i[1] - o[1]]), t.push([i[0], i[1]]))\n                  : (t.push([r[0], r[1]]), t.push([i[0], i[1]]));\n            }\n            return t;\n          }),\n          e\n        );\n      })(r.a);\n      function A(t, e, n, r, i) {\n        var o = t.length;\n        if (o < 2) return !1;\n        for (var a = 0; a < o - 1; a++) {\n          if (l(t[a][0], t[a][1], t[a + 1][0], t[a + 1][1], e, n, r)) return !0;\n        }\n        if (i) {\n          var s = t[0],\n            c = t[o - 1];\n          if (l(s[0], s[1], c[0], c[1], e, n, r)) return !0;\n        }\n        return !1;\n      }\n      var I = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var o = this.attr().points,\n                a = !1;\n              return (\n                n && (a = A(o, i, t, e, !0)), !a && r && (a = S(o, t, e)), a\n              );\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr().points;\n              if (!(e.length < 2)) {\n                t.beginPath();\n                for (var n = 0; n < e.length; n++) {\n                  var r = e[n];\n                  0 === n ? t.moveTo(r[0], r[1]) : t.lineTo(r[0], r[1]);\n                }\n                t.closePath();\n              }\n            }),\n            e\n          );\n        })(r.a),\n        T = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                startArrow: !1,\n                endArrow: !1,\n              });\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this.setArrow();\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                this.setArrow(),\n                -1 !== [\"points\"].indexOf(e) && this._resetCache();\n            }),\n            (e.prototype._resetCache = function () {\n              this.set(\"totalLength\", null), this.set(\"tCache\", null);\n            }),\n            (e.prototype.setArrow = function () {\n              var t = this.attr(),\n                e = this.attrs,\n                n = e.points,\n                r = e.startArrow,\n                i = e.endArrow,\n                o = n.length,\n                a = n[0][0],\n                s = n[0][1],\n                c = n[o - 1][0],\n                u = n[o - 1][1];\n              r && f.b(this, t, n[1][0], n[1][1], a, s),\n                i && f.a(this, t, n[o - 2][0], n[o - 2][1], c, u);\n            }),\n            (e.prototype.isFill = function () {\n              return !1;\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              return !(!n || !i) && A(this.attr().points, i, t, e, !1);\n            }),\n            (e.prototype.isStroke = function () {\n              return !0;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.points,\n                r = e.startArrow,\n                i = e.endArrow,\n                o = n.length;\n              if (!(n.length < 2)) {\n                var a,\n                  s = n[0][0],\n                  c = n[0][1],\n                  u = n[o - 1][0],\n                  h = n[o - 1][1];\n                if (r && r.d)\n                  (s += (a = f.c(s, c, n[1][0], n[1][1], r.d)).dx), (c += a.dy);\n                if (i && i.d)\n                  (u -= (a = f.c(n[o - 2][0], n[o - 2][1], u, h, i.d)).dx),\n                    (h -= a.dy);\n                t.beginPath(), t.moveTo(s, c);\n                for (var l = 0; l < o - 1; l++) {\n                  var d = n[l];\n                  t.lineTo(d[0], d[1]);\n                }\n                t.lineTo(u, h);\n              }\n            }),\n            (e.prototype.afterDrawPath = function (t) {\n              var e = this.get(\"startArrowShape\"),\n                n = this.get(\"endArrowShape\");\n              e && e.draw(t), n && n.draw(t);\n            }),\n            (e.prototype.getTotalLength = function () {\n              var t = this.attr().points,\n                e = this.get(\"totalLength\");\n              return Object(p.isNil)(e)\n                ? (this.set(\"totalLength\", h.d.length(t)),\n                  this.get(\"totalLength\"))\n                : e;\n            }),\n            (e.prototype.getPoint = function (t) {\n              var e,\n                n,\n                r = this.attr().points,\n                i = this.get(\"tCache\");\n              return (\n                i || (this._setTcache(), (i = this.get(\"tCache\"))),\n                Object(p.each)(i, function (r, i) {\n                  t >= r[0] &&\n                    t <= r[1] &&\n                    ((e = (t - r[0]) / (r[1] - r[0])), (n = i));\n                }),\n                h.c.pointAt(r[n][0], r[n][1], r[n + 1][0], r[n + 1][1], e)\n              );\n            }),\n            (e.prototype._setTcache = function () {\n              var t = this.attr().points;\n              if (t && 0 !== t.length) {\n                var e = this.getTotalLength();\n                if (!(e <= 0)) {\n                  var n,\n                    r,\n                    i = 0,\n                    o = [];\n                  Object(p.each)(t, function (a, s) {\n                    t[s + 1] &&\n                      (((n = [])[0] = i / e),\n                      (r = h.c.length(a[0], a[1], t[s + 1][0], t[s + 1][1])),\n                      (i += r),\n                      (n[1] = i / e),\n                      o.push(n));\n                  }),\n                    this.set(\"tCache\", o);\n                }\n              }\n            }),\n            (e.prototype.getStartTangent = function () {\n              var t = this.attr().points,\n                e = [];\n              return e.push([t[1][0], t[1][1]]), e.push([t[0][0], t[0][1]]), e;\n            }),\n            (e.prototype.getEndTangent = function () {\n              var t = this.attr().points,\n                e = t.length - 1,\n                n = [];\n              return (\n                n.push([t[e - 1][0], t[e - 1][1]]),\n                n.push([t[e][0], t[e][1]]),\n                n\n              );\n            }),\n            e\n          );\n        })(r.a),\n        N = n(94);\n      var B = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0,\n                radius: 0,\n              });\n            }),\n            (e.prototype.isInStrokeOrPath = function (t, e, n, r, i) {\n              var a = this.attr(),\n                s = a.x,\n                c = a.y,\n                u = a.width,\n                h = a.height,\n                f = a.radius;\n              if (f) {\n                var d = !1;\n                return (\n                  n &&\n                    (d = (function (t, e, n, r, i, o, a, s) {\n                      return (\n                        l(t + i, e, t + n - i, e, o, a, s) ||\n                        l(t + n, e + i, t + n, e + r - i, o, a, s) ||\n                        l(t + n - i, e + r, t + i, e + r, o, a, s) ||\n                        l(t, e + r - i, t, e + i, o, a, s) ||\n                        k(\n                          t + n - i,\n                          e + i,\n                          i,\n                          1.5 * Math.PI,\n                          2 * Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        k(t + n - i, e + r - i, i, 0, 0.5 * Math.PI, o, a, s) ||\n                        k(\n                          t + i,\n                          e + r - i,\n                          i,\n                          0.5 * Math.PI,\n                          Math.PI,\n                          o,\n                          a,\n                          s,\n                        ) ||\n                        k(t + i, e + i, i, Math.PI, 1.5 * Math.PI, o, a, s)\n                      );\n                    })(s, c, u, h, f, i, t, e)),\n                  !d && r && (d = Object(o.d)(s, c, u, h, t, e)),\n                  d\n                );\n              }\n              var p = i / 2;\n              return r && n\n                ? Object(o.d)(s - p, c - p, u + p, h + p, t, e)\n                : r\n                ? Object(o.d)(s, c, u, h, t, e)\n                : n\n                ? (function (t, e, n, r, i, a, s) {\n                    var c = i / 2;\n                    return (\n                      Object(o.d)(t - c, e - c, n, i, a, s) ||\n                      Object(o.d)(t + n - c, e - c, i, r, a, s) ||\n                      Object(o.d)(t + c, e + r - c, n, i, a, s) ||\n                      Object(o.d)(t - c, e + c, i, r, a, s)\n                    );\n                  })(s, c, u, h, i, t, e)\n                : void 0;\n            }),\n            (e.prototype.createPath = function (t) {\n              var e = this.attr(),\n                n = e.x,\n                r = e.y,\n                i = e.width,\n                o = e.height,\n                a = e.radius;\n              if ((t.beginPath(), 0 === a)) t.rect(n, r, i, o);\n              else {\n                var s = Object(N.a)(a),\n                  c = s[0],\n                  u = s[1],\n                  h = s[2],\n                  l = s[3];\n                t.moveTo(n + c, r),\n                  t.lineTo(n + i - u, r),\n                  0 !== u && t.arc(n + i - u, r + u, u, -Math.PI / 2, 0),\n                  t.lineTo(n + i, r + o - h),\n                  0 !== h && t.arc(n + i - h, r + o - h, h, 0, Math.PI / 2),\n                  t.lineTo(n + l, r + o),\n                  0 !== l && t.arc(n + l, r + o - l, l, Math.PI / 2, Math.PI),\n                  t.lineTo(n, r + c),\n                  0 !== c && t.arc(n + c, r + c, c, Math.PI, 1.5 * Math.PI),\n                  t.closePath();\n              }\n            }),\n            e\n          );\n        })(r.a),\n        L = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(i.c)(e, t),\n            (e.prototype.getDefaultAttrs = function () {\n              var e = t.prototype.getDefaultAttrs.call(this);\n              return Object(i.a)(Object(i.a)({}, e), {\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              });\n            }),\n            (e.prototype.isOnlyHitBox = function () {\n              return !0;\n            }),\n            (e.prototype.initAttrs = function (t) {\n              this._assembleFont(), t.text && this._setText(t.text);\n            }),\n            (e.prototype._assembleFont = function () {\n              var t = this.attrs;\n              t.font = Object(w.assembleFont)(t);\n            }),\n            (e.prototype._setText = function (t) {\n              var e = null;\n              Object(o.k)(t) && -1 !== t.indexOf(\"\\n\") && (e = t.split(\"\\n\")),\n                this.set(\"textArr\", e);\n            }),\n            (e.prototype.onAttrChange = function (e, n, r) {\n              t.prototype.onAttrChange.call(this, e, n, r),\n                e.startsWith(\"font\") && this._assembleFont(),\n                \"text\" === e && this._setText(n);\n            }),\n            (e.prototype._getSpaceingY = function () {\n              var t = this.attrs,\n                e = t.lineHeight,\n                n = 1 * t.fontSize;\n              return e ? e - n : 0.14 * n;\n            }),\n            (e.prototype._drawTextArr = function (t, e, n) {\n              var r,\n                i = this.attrs,\n                a = i.textBaseline,\n                s = i.x,\n                c = i.y,\n                u = 1 * i.fontSize,\n                h = this._getSpaceingY(),\n                l = Object(w.getTextHeight)(i.text, i.fontSize, i.lineHeight);\n              Object(o.b)(e, function (e, i) {\n                (r = c + i * (h + u) - l + u),\n                  \"middle\" === a && (r += l - u - (l - u) / 2),\n                  \"top\" === a && (r += l - u),\n                  n ? t.fillText(e, s, r) : t.strokeText(e, s, r);\n              });\n            }),\n            (e.prototype._drawText = function (t, e) {\n              var n = this.attr(),\n                r = n.x,\n                i = n.y,\n                o = this.get(\"textArr\");\n              if (o) this._drawTextArr(t, o, e);\n              else {\n                var a = n.text;\n                e ? t.fillText(a, r, i) : t.strokeText(a, r, i);\n              }\n            }),\n            (e.prototype.strokeAndFill = function (t) {\n              var e = this.attrs,\n                n = e.lineWidth,\n                r = e.opacity,\n                i = e.strokeOpacity,\n                a = e.fillOpacity;\n              this.isStroke() &&\n                n > 0 &&\n                (Object(o.h)(i) || 1 === i || (t.globalAlpha = r),\n                this.stroke(t)),\n                this.isFill() &&\n                  (Object(o.h)(a) || 1 === a\n                    ? this.fill(t)\n                    : ((t.globalAlpha = a), this.fill(t), (t.globalAlpha = r))),\n                this.afterDrawPath(t);\n            }),\n            (e.prototype.fill = function (t) {\n              this._drawText(t, !0);\n            }),\n            (e.prototype.stroke = function (t) {\n              this._drawText(t, !1);\n            }),\n            e\n          );\n        })(r.a);\n    },\n    33: function (t, e, n) {\n      \"use strict\";\n      var r = n(99);\n      n.d(e, \"a\", function () {\n        return r.Layout;\n      }),\n        n.d(e, \"b\", function () {\n          return r.Layouts;\n        });\n      var i = n(62);\n      n.d(e, \"c\", function () {\n        return i.registerLayout;\n      }),\n        n.d(e, \"d\", function () {\n          return i.unRegisterLayout;\n        });\n      var o = n(64);\n      Object(i.registerLayout)(\"random\", o.RandomLayout);\n    },\n    34: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"catmullRomToBezier\", function () {\n          return c;\n        }),\n        n.d(e, \"fillPath\", function () {\n          return A;\n        }),\n        n.d(e, \"fillPathByDiff\", function () {\n          return N;\n        }),\n        n.d(e, \"formatPath\", function () {\n          return D;\n        }),\n        n.d(e, \"intersection\", function () {\n          return C;\n        }),\n        n.d(e, \"parsePathArray\", function () {\n          return v;\n        }),\n        n.d(e, \"parsePathString\", function () {\n          return s;\n        }),\n        n.d(e, \"pathToAbsolute\", function () {\n          return h;\n        }),\n        n.d(e, \"pathToCurve\", function () {\n          return p;\n        }),\n        n.d(e, \"rectPath\", function () {\n          return w;\n        });\n      var r = n(0),\n        i = \"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\",\n        o = new RegExp(\n          \"([a-z])[\" +\n            i +\n            \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" +\n            i +\n            \"]*,?[\" +\n            i +\n            \"]*)+)\",\n          \"ig\",\n        ),\n        a = new RegExp(\n          \"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + i + \"]*,?[\" + i + \"]*\",\n          \"ig\",\n        ),\n        s = function (t) {\n          if (!t) return null;\n          if (Object(r.isArray)(t)) return t;\n          var e = {\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            n = [];\n          return (\n            String(t).replace(o, function (r, i, o) {\n              var s = [],\n                c = i.toLowerCase();\n              if (\n                (o.replace(a, function (t, e) {\n                  e && s.push(+e);\n                }),\n                \"m\" === c &&\n                  s.length > 2 &&\n                  (n.push([i].concat(s.splice(0, 2))),\n                  (c = \"l\"),\n                  (i = \"m\" === i ? \"l\" : \"L\")),\n                \"o\" === c && 1 === s.length && n.push([i, s[0]]),\n                \"r\" === c)\n              )\n                n.push([i].concat(s));\n              else\n                for (\n                  ;\n                  s.length >= e[c] &&\n                  (n.push([i].concat(s.splice(0, e[c]))), e[c]);\n\n                );\n              return t;\n            }),\n            n\n          );\n        },\n        c = function (t, e) {\n          for (var n = [], r = 0, i = t.length; i - 2 * !e > r; r += 2) {\n            var o = [\n              { x: +t[r - 2], y: +t[r - 1] },\n              { x: +t[r], y: +t[r + 1] },\n              { x: +t[r + 2], y: +t[r + 3] },\n              { x: +t[r + 4], y: +t[r + 5] },\n            ];\n            e\n              ? r\n                ? i - 4 === r\n                  ? (o[3] = { x: +t[0], y: +t[1] })\n                  : i - 2 === r &&\n                    ((o[2] = { x: +t[0], y: +t[1] }),\n                    (o[3] = { x: +t[2], y: +t[3] }))\n                : (o[0] = { x: +t[i - 2], y: +t[i - 1] })\n              : i - 4 === r\n              ? (o[3] = o[2])\n              : r || (o[0] = { x: +t[r], y: +t[r + 1] }),\n              n.push([\n                \"C\",\n                (-o[0].x + 6 * o[1].x + o[2].x) / 6,\n                (-o[0].y + 6 * o[1].y + o[2].y) / 6,\n                (o[1].x + 6 * o[2].x - o[3].x) / 6,\n                (o[1].y + 6 * o[2].y - o[3].y) / 6,\n                o[2].x,\n                o[2].y,\n              ]);\n          }\n          return n;\n        },\n        u = function (t, e, n, r, i) {\n          var o = [];\n          if (\n            (null === i && null === r && (r = n),\n            (t = +t),\n            (e = +e),\n            (n = +n),\n            (r = +r),\n            null !== i)\n          ) {\n            var a = Math.PI / 180,\n              s = t + n * Math.cos(-r * a),\n              c = t + n * Math.cos(-i * a);\n            o = [\n              [\"M\", s, e + n * Math.sin(-r * a)],\n              [\"A\", n, n, 0, +(i - r > 180), 0, c, e + n * Math.sin(-i * a)],\n            ];\n          } else\n            o = [\n              [\"M\", t, e],\n              [\"m\", 0, -r],\n              [\"a\", n, r, 0, 1, 1, 0, 2 * r],\n              [\"a\", n, r, 0, 1, 1, 0, -2 * r],\n              [\"z\"],\n            ];\n          return o;\n        },\n        h = function (t) {\n          if (!(t = s(t)) || !t.length) return [[\"M\", 0, 0]];\n          var e,\n            n,\n            r = [],\n            i = 0,\n            o = 0,\n            a = 0,\n            h = 0,\n            l = 0;\n          \"M\" === t[0][0] &&\n            ((a = i = +t[0][1]), (h = o = +t[0][2]), l++, (r[0] = [\"M\", i, o]));\n          for (\n            var f =\n                3 === t.length &&\n                \"M\" === t[0][0] &&\n                \"R\" === t[1][0].toUpperCase() &&\n                \"Z\" === t[2][0].toUpperCase(),\n              d = void 0,\n              p = void 0,\n              g = l,\n              v = t.length;\n            g < v;\n            g++\n          ) {\n            if ((r.push((d = [])), (e = (p = t[g])[0]) !== e.toUpperCase()))\n              switch (((d[0] = e.toUpperCase()), d[0])) {\n                case \"A\":\n                  (d[1] = p[1]),\n                    (d[2] = p[2]),\n                    (d[3] = p[3]),\n                    (d[4] = p[4]),\n                    (d[5] = p[5]),\n                    (d[6] = +p[6] + i),\n                    (d[7] = +p[7] + o);\n                  break;\n                case \"V\":\n                  d[1] = +p[1] + o;\n                  break;\n                case \"H\":\n                  d[1] = +p[1] + i;\n                  break;\n                case \"R\":\n                  for (\n                    var y = 2, m = (n = [i, o].concat(p.slice(1))).length;\n                    y < m;\n                    y++\n                  )\n                    (n[y] = +n[y] + i), (n[++y] = +n[y] + o);\n                  r.pop(), (r = r.concat(c(n, f)));\n                  break;\n                case \"O\":\n                  r.pop(),\n                    (n = u(i, o, p[1], p[2])).push(n[0]),\n                    (r = r.concat(n));\n                  break;\n                case \"U\":\n                  r.pop(),\n                    (r = r.concat(u(i, o, p[1], p[2], p[3]))),\n                    (d = [\"U\"].concat(r[r.length - 1].slice(-2)));\n                  break;\n                case \"M\":\n                  (a = +p[1] + i), (h = +p[2] + o);\n                  break;\n                default:\n                  for (y = 1, m = p.length; y < m; y++)\n                    d[y] = +p[y] + (y % 2 ? i : o);\n              }\n            else if (\"R\" === e)\n              (n = [i, o].concat(p.slice(1))),\n                r.pop(),\n                (r = r.concat(c(n, f))),\n                (d = [\"R\"].concat(p.slice(-2)));\n            else if (\"O\" === e)\n              r.pop(), (n = u(i, o, p[1], p[2])).push(n[0]), (r = r.concat(n));\n            else if (\"U\" === e)\n              r.pop(),\n                (r = r.concat(u(i, o, p[1], p[2], p[3]))),\n                (d = [\"U\"].concat(r[r.length - 1].slice(-2)));\n            else for (var b = 0, x = p.length; b < x; b++) d[b] = p[b];\n            if (\"O\" !== (e = e.toUpperCase()))\n              switch (d[0]) {\n                case \"Z\":\n                  (i = +a), (o = +h);\n                  break;\n                case \"H\":\n                  i = d[1];\n                  break;\n                case \"V\":\n                  o = d[1];\n                  break;\n                case \"M\":\n                  (a = d[d.length - 2]), (h = d[d.length - 1]);\n                  break;\n                default:\n                  (i = d[d.length - 2]), (o = d[d.length - 1]);\n              }\n          }\n          return r;\n        },\n        l = function (t, e, n, r) {\n          return [t, e, n, r, n, r];\n        },\n        f = function (t, e, n, r, i, o) {\n          return [\n            (1 / 3) * t + (2 / 3) * n,\n            (1 / 3) * e + (2 / 3) * r,\n            (1 / 3) * i + (2 / 3) * n,\n            (1 / 3) * o + (2 / 3) * r,\n            i,\n            o,\n          ];\n        },\n        d = function t(e, n, r, i, o, a, s, c, u, h) {\n          r === i && (r += 1);\n          var l,\n            f,\n            d,\n            p,\n            g,\n            v = (120 * Math.PI) / 180,\n            y = (Math.PI / 180) * (+o || 0),\n            m = [],\n            b = function (t, e, n) {\n              return {\n                x: t * Math.cos(n) - e * Math.sin(n),\n                y: t * Math.sin(n) + e * Math.cos(n),\n              };\n            };\n          if (h) (f = h[0]), (d = h[1]), (p = h[2]), (g = h[3]);\n          else {\n            (e = (l = b(e, n, -y)).x),\n              (n = l.y),\n              (c = (l = b(c, u, -y)).x),\n              (u = l.y),\n              e === c && n === u && ((c += 1), (u += 1));\n            var x = (e - c) / 2,\n              S = (n - u) / 2,\n              w = (x * x) / (r * r) + (S * S) / (i * i);\n            w > 1 && ((r *= w = Math.sqrt(w)), (i *= w));\n            var O = r * r,\n              M = i * i,\n              k =\n                (a === s ? -1 : 1) *\n                Math.sqrt(\n                  Math.abs(\n                    (O * M - O * S * S - M * x * x) / (O * S * S + M * x * x),\n                  ),\n                );\n            (p = (k * r * S) / i + (e + c) / 2),\n              (g = (k * -i * x) / r + (n + u) / 2),\n              (f = Math.asin(((n - g) / i).toFixed(9))),\n              (d = Math.asin(((u - g) / i).toFixed(9))),\n              (f = e < p ? Math.PI - f : f),\n              (d = c < p ? Math.PI - d : d),\n              f < 0 && (f = 2 * Math.PI + f),\n              d < 0 && (d = 2 * Math.PI + d),\n              s && f > d && (f -= 2 * Math.PI),\n              !s && d > f && (d -= 2 * Math.PI);\n          }\n          var j = d - f;\n          if (Math.abs(j) > v) {\n            var C = d,\n              E = c,\n              P = u;\n            (d = f + v * (s && d > f ? 1 : -1)),\n              (m = t(\n                (c = p + r * Math.cos(d)),\n                (u = g + i * Math.sin(d)),\n                r,\n                i,\n                o,\n                0,\n                s,\n                E,\n                P,\n                [d, C, p, g],\n              ));\n          }\n          j = d - f;\n          var A = Math.cos(f),\n            I = Math.sin(f),\n            T = Math.cos(d),\n            N = Math.sin(d),\n            B = Math.tan(j / 4),\n            L = (4 / 3) * r * B,\n            D = (4 / 3) * i * B,\n            _ = [e, n],\n            R = [e + L * I, n - D * A],\n            F = [c + L * N, u - D * T],\n            Y = [c, u];\n          if (((R[0] = 2 * _[0] - R[0]), (R[1] = 2 * _[1] - R[1]), h))\n            return [R, F, Y].concat(m);\n          for (\n            var X = [],\n              z = 0,\n              W = (m = [R, F, Y].concat(m).join().split(\",\")).length;\n            z < W;\n            z++\n          )\n            X[z] = z % 2 ? b(m[z - 1], m[z], y).y : b(m[z], m[z + 1], y).x;\n          return X;\n        },\n        p = function (t, e) {\n          var n,\n            r = h(t),\n            i = e && h(e),\n            o = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n            a = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n            s = [],\n            c = [],\n            u = \"\",\n            p = \"\",\n            g = function (t, e, n) {\n              var r, i;\n              if (!t) return [\"C\", e.x, e.y, e.x, e.y, e.x, e.y];\n              switch (\n                (!(t[0] in { T: 1, Q: 1 }) && (e.qx = e.qy = null), t[0])\n              ) {\n                case \"M\":\n                  (e.X = t[1]), (e.Y = t[2]);\n                  break;\n                case \"A\":\n                  t = [\"C\"].concat(d.apply(0, [e.x, e.y].concat(t.slice(1))));\n                  break;\n                case \"S\":\n                  \"C\" === n || \"S\" === n\n                    ? ((r = 2 * e.x - e.bx), (i = 2 * e.y - e.by))\n                    : ((r = e.x), (i = e.y)),\n                    (t = [\"C\", r, i].concat(t.slice(1)));\n                  break;\n                case \"T\":\n                  \"Q\" === n || \"T\" === n\n                    ? ((e.qx = 2 * e.x - e.qx), (e.qy = 2 * e.y - e.qy))\n                    : ((e.qx = e.x), (e.qy = e.y)),\n                    (t = [\"C\"].concat(f(e.x, e.y, e.qx, e.qy, t[1], t[2])));\n                  break;\n                case \"Q\":\n                  (e.qx = t[1]),\n                    (e.qy = t[2]),\n                    (t = [\"C\"].concat(f(e.x, e.y, t[1], t[2], t[3], t[4])));\n                  break;\n                case \"L\":\n                  t = [\"C\"].concat(l(e.x, e.y, t[1], t[2]));\n                  break;\n                case \"H\":\n                  t = [\"C\"].concat(l(e.x, e.y, t[1], e.y));\n                  break;\n                case \"V\":\n                  t = [\"C\"].concat(l(e.x, e.y, e.x, t[1]));\n                  break;\n                case \"Z\":\n                  t = [\"C\"].concat(l(e.x, e.y, e.X, e.Y));\n              }\n              return t;\n            },\n            v = function (t, e) {\n              if (t[e].length > 7) {\n                t[e].shift();\n                for (var o = t[e]; o.length; )\n                  (s[e] = \"A\"),\n                    i && (c[e] = \"A\"),\n                    t.splice(e++, 0, [\"C\"].concat(o.splice(0, 6)));\n                t.splice(e, 1), (n = Math.max(r.length, (i && i.length) || 0));\n              }\n            },\n            y = function (t, e, o, a, s) {\n              t &&\n                e &&\n                \"M\" === t[s][0] &&\n                \"M\" !== e[s][0] &&\n                (e.splice(s, 0, [\"M\", a.x, a.y]),\n                (o.bx = 0),\n                (o.by = 0),\n                (o.x = t[s][1]),\n                (o.y = t[s][2]),\n                (n = Math.max(r.length, (i && i.length) || 0)));\n            };\n          n = Math.max(r.length, (i && i.length) || 0);\n          for (var m = 0; m < n; m++) {\n            r[m] && (u = r[m][0]),\n              \"C\" !== u && ((s[m] = u), m && (p = s[m - 1])),\n              (r[m] = g(r[m], o, p)),\n              \"A\" !== s[m] && \"C\" === u && (s[m] = \"C\"),\n              v(r, m),\n              i &&\n                (i[m] && (u = i[m][0]),\n                \"C\" !== u && ((c[m] = u), m && (p = c[m - 1])),\n                (i[m] = g(i[m], a, p)),\n                \"A\" !== c[m] && \"C\" === u && (c[m] = \"C\"),\n                v(i, m)),\n              y(r, i, o, a, m),\n              y(i, r, a, o, m);\n            var b = r[m],\n              x = i && i[m],\n              S = b.length,\n              w = i && x.length;\n            (o.x = b[S - 2]),\n              (o.y = b[S - 1]),\n              (o.bx = parseFloat(b[S - 4]) || o.x),\n              (o.by = parseFloat(b[S - 3]) || o.y),\n              (a.bx = i && (parseFloat(x[w - 4]) || a.x)),\n              (a.by = i && (parseFloat(x[w - 3]) || a.y)),\n              (a.x = i && x[w - 2]),\n              (a.y = i && x[w - 1]);\n          }\n          return i ? [r, i] : r;\n        },\n        g = /,?([a-z]),?/gi,\n        v = function (t) {\n          return t.join(\",\").replace(g, \"$1\");\n        },\n        y = function (t, e, n, r, i) {\n          return (\n            t *\n              (t * (-3 * e + 9 * n - 9 * r + 3 * i) + 6 * e - 12 * n + 6 * r) -\n            3 * e +\n            3 * n\n          );\n        },\n        m = function (t, e, n, r, i, o, a, s, c) {\n          null === c && (c = 1);\n          for (\n            var u = (c = c > 1 ? 1 : c < 0 ? 0 : c) / 2,\n              h = [\n                -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699,\n                0.7699, -0.9041, 0.9041, -0.9816, 0.9816,\n              ],\n              l = [\n                0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601,\n                0.1069, 0.1069, 0.0472, 0.0472,\n              ],\n              f = 0,\n              d = 0;\n            d < 12;\n            d++\n          ) {\n            var p = u * h[d] + u,\n              g = y(p, t, n, i, a),\n              v = y(p, e, r, o, s),\n              m = g * g + v * v;\n            f += l[d] * Math.sqrt(m);\n          }\n          return u * f;\n        },\n        b = function (t, e, n, r, i, o, a, s) {\n          for (var c, u, h, l, f = [], d = [[], []], p = 0; p < 2; ++p)\n            if (\n              (0 === p\n                ? ((u = 6 * t - 12 * n + 6 * i),\n                  (c = -3 * t + 9 * n - 9 * i + 3 * a),\n                  (h = 3 * n - 3 * t))\n                : ((u = 6 * e - 12 * r + 6 * o),\n                  (c = -3 * e + 9 * r - 9 * o + 3 * s),\n                  (h = 3 * r - 3 * e)),\n              Math.abs(c) < 1e-12)\n            ) {\n              if (Math.abs(u) < 1e-12) continue;\n              (l = -h / u) > 0 && l < 1 && f.push(l);\n            } else {\n              var g = u * u - 4 * h * c,\n                v = Math.sqrt(g);\n              if (!(g < 0)) {\n                var y = (-u + v) / (2 * c);\n                y > 0 && y < 1 && f.push(y);\n                var m = (-u - v) / (2 * c);\n                m > 0 && m < 1 && f.push(m);\n              }\n            }\n          for (var b, x = f.length, S = x; x--; )\n            (b = 1 - (l = f[x])),\n              (d[0][x] =\n                b * b * b * t +\n                3 * b * b * l * n +\n                3 * b * l * l * i +\n                l * l * l * a),\n              (d[1][x] =\n                b * b * b * e +\n                3 * b * b * l * r +\n                3 * b * l * l * o +\n                l * l * l * s);\n          return (\n            (d[0][S] = t),\n            (d[1][S] = e),\n            (d[0][S + 1] = a),\n            (d[1][S + 1] = s),\n            (d[0].length = d[1].length = S + 2),\n            {\n              min: { x: Math.min.apply(0, d[0]), y: Math.min.apply(0, d[1]) },\n              max: { x: Math.max.apply(0, d[0]), y: Math.max.apply(0, d[1]) },\n            }\n          );\n        },\n        x = function (t, e, n, r, i, o, a, s) {\n          if (\n            !(\n              Math.max(t, n) < Math.min(i, a) ||\n              Math.min(t, n) > Math.max(i, a) ||\n              Math.max(e, r) < Math.min(o, s) ||\n              Math.min(e, r) > Math.max(o, s)\n            )\n          ) {\n            var c = (t - n) * (o - s) - (e - r) * (i - a);\n            if (c) {\n              var u =\n                  ((t * r - e * n) * (i - a) - (t - n) * (i * s - o * a)) / c,\n                h = ((t * r - e * n) * (o - s) - (e - r) * (i * s - o * a)) / c,\n                l = +u.toFixed(2),\n                f = +h.toFixed(2);\n              if (\n                !(\n                  l < +Math.min(t, n).toFixed(2) ||\n                  l > +Math.max(t, n).toFixed(2) ||\n                  l < +Math.min(i, a).toFixed(2) ||\n                  l > +Math.max(i, a).toFixed(2) ||\n                  f < +Math.min(e, r).toFixed(2) ||\n                  f > +Math.max(e, r).toFixed(2) ||\n                  f < +Math.min(o, s).toFixed(2) ||\n                  f > +Math.max(o, s).toFixed(2)\n                )\n              )\n                return { x: u, y: h };\n            }\n          }\n        },\n        S = function (t, e, n) {\n          return (\n            e >= t.x && e <= t.x + t.width && n >= t.y && n <= t.y + t.height\n          );\n        },\n        w = function (t, e, n, r, i) {\n          if (i)\n            return [\n              [\"M\", +t + +i, e],\n              [\"l\", n - 2 * i, 0],\n              [\"a\", i, i, 0, 0, 1, i, i],\n              [\"l\", 0, r - 2 * i],\n              [\"a\", i, i, 0, 0, 1, -i, i],\n              [\"l\", 2 * i - n, 0],\n              [\"a\", i, i, 0, 0, 1, -i, -i],\n              [\"l\", 0, 2 * i - r],\n              [\"a\", i, i, 0, 0, 1, i, -i],\n              [\"z\"],\n            ];\n          var o = [[\"M\", t, e], [\"l\", n, 0], [\"l\", 0, r], [\"l\", -n, 0], [\"z\"]];\n          return (o.parsePathArray = v), o;\n        },\n        O = function (t, e, n, r) {\n          return (\n            null === t && (t = e = n = r = 0),\n            null === e && ((e = t.y), (n = t.width), (r = t.height), (t = t.x)),\n            {\n              x: t,\n              y: e,\n              width: n,\n              w: n,\n              height: r,\n              h: r,\n              x2: t + n,\n              y2: e + r,\n              cx: t + n / 2,\n              cy: e + r / 2,\n              r1: Math.min(n, r) / 2,\n              r2: Math.max(n, r) / 2,\n              r0: Math.sqrt(n * n + r * r) / 2,\n              path: w(t, e, n, r),\n              vb: [t, e, n, r].join(\" \"),\n            }\n          );\n        },\n        M = function (t, e, n, i, o, a, s, c) {\n          Object(r.isArray)(t) || (t = [t, e, n, i, o, a, s, c]);\n          var u = b.apply(null, t);\n          return O(u.min.x, u.min.y, u.max.x - u.min.x, u.max.y - u.min.y);\n        },\n        k = function (t, e, n, r, i, o, a, s, c) {\n          var u = 1 - c,\n            h = Math.pow(u, 3),\n            l = Math.pow(u, 2),\n            f = c * c,\n            d = f * c,\n            p = t + 2 * c * (n - t) + f * (i - 2 * n + t),\n            g = e + 2 * c * (r - e) + f * (o - 2 * r + e),\n            v = n + 2 * c * (i - n) + f * (a - 2 * i + n),\n            y = r + 2 * c * (o - r) + f * (s - 2 * o + r);\n          return {\n            x: h * t + 3 * l * c * n + 3 * u * c * c * i + d * a,\n            y: h * e + 3 * l * c * r + 3 * u * c * c * o + d * s,\n            m: { x: p, y: g },\n            n: { x: v, y: y },\n            start: { x: u * t + c * n, y: u * e + c * r },\n            end: { x: u * i + c * a, y: u * o + c * s },\n            alpha: 90 - (180 * Math.atan2(p - v, g - y)) / Math.PI,\n          };\n        },\n        j = function (t, e, n) {\n          if (\n            !(function (t, e) {\n              return (\n                (t = O(t)),\n                (e = O(e)),\n                S(e, t.x, t.y) ||\n                  S(e, t.x2, t.y) ||\n                  S(e, t.x, t.y2) ||\n                  S(e, t.x2, t.y2) ||\n                  S(t, e.x, e.y) ||\n                  S(t, e.x2, e.y) ||\n                  S(t, e.x, e.y2) ||\n                  S(t, e.x2, e.y2) ||\n                  (((t.x < e.x2 && t.x > e.x) || (e.x < t.x2 && e.x > t.x)) &&\n                    ((t.y < e.y2 && t.y > e.y) || (e.y < t.y2 && e.y > t.y)))\n              );\n            })(M(t), M(e))\n          )\n            return n ? 0 : [];\n          for (\n            var r = ~~(m.apply(0, t) / 8),\n              i = ~~(m.apply(0, e) / 8),\n              o = [],\n              a = [],\n              s = {},\n              c = n ? 0 : [],\n              u = 0;\n            u < r + 1;\n            u++\n          ) {\n            var h = k.apply(0, t.concat(u / r));\n            o.push({ x: h.x, y: h.y, t: u / r });\n          }\n          for (u = 0; u < i + 1; u++) {\n            h = k.apply(0, e.concat(u / i));\n            a.push({ x: h.x, y: h.y, t: u / i });\n          }\n          for (u = 0; u < r; u++)\n            for (var l = 0; l < i; l++) {\n              var f = o[u],\n                d = o[u + 1],\n                p = a[l],\n                g = a[l + 1],\n                v = Math.abs(d.x - f.x) < 0.001 ? \"y\" : \"x\",\n                y = Math.abs(g.x - p.x) < 0.001 ? \"y\" : \"x\",\n                b = x(f.x, f.y, d.x, d.y, p.x, p.y, g.x, g.y);\n              if (b) {\n                if (s[b.x.toFixed(4)] === b.y.toFixed(4)) continue;\n                s[b.x.toFixed(4)] = b.y.toFixed(4);\n                var w =\n                    f.t + Math.abs((b[v] - f[v]) / (d[v] - f[v])) * (d.t - f.t),\n                  j =\n                    p.t + Math.abs((b[y] - p[y]) / (g[y] - p[y])) * (g.t - p.t);\n                w >= 0 &&\n                  w <= 1 &&\n                  j >= 0 &&\n                  j <= 1 &&\n                  (n ? (c += 1) : c.push({ x: b.x, y: b.y, t1: w, t2: j }));\n              }\n            }\n          return c;\n        },\n        C = function (t, e) {\n          return (function (t, e, n) {\n            var r, i, o, a, s, c, u, h, l, f;\n            (t = p(t)), (e = p(e));\n            for (var d = n ? 0 : [], g = 0, v = t.length; g < v; g++) {\n              var y = t[g];\n              if (\"M\" === y[0]) (r = s = y[1]), (i = c = y[2]);\n              else {\n                \"C\" === y[0]\n                  ? ((l = [r, i].concat(y.slice(1))), (r = l[6]), (i = l[7]))\n                  : ((l = [r, i, r, i, s, c, s, c]), (r = s), (i = c));\n                for (var m = 0, b = e.length; m < b; m++) {\n                  var x = e[m];\n                  if (\"M\" === x[0]) (o = u = x[1]), (a = h = x[2]);\n                  else {\n                    \"C\" === x[0]\n                      ? ((f = [o, a].concat(x.slice(1))),\n                        (o = f[6]),\n                        (a = f[7]))\n                      : ((f = [o, a, o, a, u, h, u, h]), (o = u), (a = h));\n                    var S = j(l, f, n);\n                    if (n) d += S;\n                    else {\n                      for (var w = 0, O = S.length; w < O; w++)\n                        (S[w].segment1 = g),\n                          (S[w].segment2 = m),\n                          (S[w].bez1 = l),\n                          (S[w].bez2 = f);\n                      d = d.concat(S);\n                    }\n                  }\n                }\n              }\n            }\n            return d;\n          })(t, e);\n        };\n      function E(t, e) {\n        var n = [],\n          r = [];\n        return (\n          t.length &&\n            (function t(e, i) {\n              if (1 === e.length) n.push(e[0]), r.push(e[0]);\n              else {\n                for (var o = [], a = 0; a < e.length - 1; a++)\n                  0 === a && n.push(e[0]),\n                    a === e.length - 2 && r.push(e[a + 1]),\n                    (o[a] = [\n                      (1 - i) * e[a][0] + i * e[a + 1][0],\n                      (1 - i) * e[a][1] + i * e[a + 1][1],\n                    ]);\n                t(o, i);\n              }\n            })(t, e),\n          { left: n, right: r.reverse() }\n        );\n      }\n      var P = function (t, e, n) {\n          if (1 === n) return [[].concat(t)];\n          var r = [];\n          if (\"L\" === e[0] || \"C\" === e[0] || \"Q\" === e[0])\n            r = r.concat(\n              (function (t, e, n) {\n                var r = [[t[1], t[2]]];\n                n = n || 2;\n                var i = [];\n                \"A\" === e[0]\n                  ? (r.push(e[6]), r.push(e[7]))\n                  : \"C\" === e[0]\n                  ? (r.push([e[1], e[2]]),\n                    r.push([e[3], e[4]]),\n                    r.push([e[5], e[6]]))\n                  : \"S\" === e[0] || \"Q\" === e[0]\n                  ? (r.push([e[1], e[2]]), r.push([e[3], e[4]]))\n                  : r.push([e[1], e[2]]);\n                for (var o = r, a = 1 / n, s = 0; s < n - 1; s++) {\n                  var c = E(o, a / (1 - a * s));\n                  i.push(c.left), (o = c.right);\n                }\n                return (\n                  i.push(o),\n                  i.map(function (t) {\n                    var e = [];\n                    return (\n                      4 === t.length && (e.push(\"C\"), (e = e.concat(t[2]))),\n                      t.length >= 3 &&\n                        (3 === t.length && e.push(\"Q\"), (e = e.concat(t[1]))),\n                      2 === t.length && e.push(\"L\"),\n                      (e = e.concat(t[t.length - 1]))\n                    );\n                  })\n                );\n              })(t, e, n),\n            );\n          else {\n            var i = [].concat(t);\n            \"M\" === i[0] && (i[0] = \"L\");\n            for (var o = 0; o <= n - 1; o++) r.push(i);\n          }\n          return r;\n        },\n        A = function (t, e) {\n          if (1 === t.length) return t;\n          var n = t.length - 1,\n            r = e.length - 1,\n            i = n / r,\n            o = [];\n          if (1 === t.length && \"M\" === t[0][0]) {\n            for (var a = 0; a < r - n; a++) t.push(t[0]);\n            return t;\n          }\n          for (a = 0; a < r; a++) {\n            var s = Math.floor(i * a);\n            o[s] = (o[s] || 0) + 1;\n          }\n          var c = o.reduce(function (e, r, i) {\n            return i === n ? e.concat(t[n]) : e.concat(P(t[i], t[i + 1], r));\n          }, []);\n          return (\n            c.unshift(t[0]), (\"Z\" !== e[r] && \"z\" !== e[r]) || c.push(\"Z\"), c\n          );\n        },\n        I = function (t, e) {\n          if (t.length !== e.length) return !1;\n          var n = !0;\n          return (\n            Object(r.each)(t, function (t, r) {\n              if (t !== e[r]) return (n = !1), !1;\n            }),\n            n\n          );\n        };\n      function T(t, e, n) {\n        var r = null,\n          i = n;\n        return (\n          e < i && ((i = e), (r = \"add\")),\n          t < i && ((i = t), (r = \"del\")),\n          { type: r, min: i }\n        );\n      }\n      var N = function (t, e) {\n        var n = (function (t, e) {\n            var n,\n              r,\n              i = t.length,\n              o = e.length,\n              a = 0;\n            if (0 === i || 0 === o) return null;\n            for (var s = [], c = 0; c <= i; c++)\n              (s[c] = []), (s[c][0] = { min: c });\n            for (var u = 0; u <= o; u++) s[0][u] = { min: u };\n            for (c = 1; c <= i; c++) {\n              n = t[c - 1];\n              for (u = 1; u <= o; u++) {\n                (r = e[u - 1]), (a = I(n, r) ? 0 : 1);\n                var h = s[c - 1][u].min + 1,\n                  l = s[c][u - 1].min + 1,\n                  f = s[c - 1][u - 1].min + a;\n                s[c][u] = T(h, l, f);\n              }\n            }\n            return s;\n          })(t, e),\n          r = t.length,\n          i = e.length,\n          o = [],\n          a = 1,\n          s = 1;\n        if (n[r][i].min !== r) {\n          for (var c = 1; c <= r; c++) {\n            var u = n[c][c].min;\n            s = c;\n            for (var h = a; h <= i; h++)\n              n[c][h].min < u && ((u = n[c][h].min), (s = h));\n            (a = s),\n              n[c][a].type && o.push({ index: c - 1, type: n[c][a].type });\n          }\n          for (c = o.length - 1; c >= 0; c--)\n            (a = o[c].index),\n              \"add\" === o[c].type\n                ? t.splice(a, 0, [].concat(t[a]))\n                : t.splice(a, 1);\n        }\n        var l = i - (r = t.length);\n        if (r < i)\n          for (c = 0; c < l; c++)\n            \"z\" === t[r - 1][0] || \"Z\" === t[r - 1][0]\n              ? t.splice(r - 2, 0, t[r - 2])\n              : t.push(t[r - 1]),\n              (r += 1);\n        return t;\n      };\n      function B(t, e, n) {\n        for (\n          var r, i = [].concat(t), o = 1 / (n + 1), a = L(e)[0], s = 1;\n          s <= n;\n          s++\n        )\n          (o *= s),\n            0 === (r = Math.floor(t.length * o))\n              ? i.unshift([\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ])\n              : i.splice(r, 0, [\n                  a[0] * o + t[r][0] * (1 - o),\n                  a[1] * o + t[r][1] * (1 - o),\n                ]);\n        return i;\n      }\n      function L(t) {\n        var e = [];\n        switch (t[0]) {\n          case \"M\":\n          case \"L\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"A\":\n            e.push([t[6], t[7]]);\n            break;\n          case \"Q\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"T\":\n            e.push([t[1], t[2]]);\n            break;\n          case \"C\":\n            e.push([t[5], t[6]]), e.push([t[1], t[2]]), e.push([t[3], t[4]]);\n            break;\n          case \"S\":\n            e.push([t[3], t[4]]), e.push([t[1], t[2]]);\n            break;\n          case \"H\":\n          case \"V\":\n            e.push([t[1], t[1]]);\n        }\n        return e;\n      }\n      var D = function (t, e) {\n        if (t.length <= 1) return t;\n        for (var n, r = 0; r < e.length; r++)\n          if (t[r][0] !== e[r][0])\n            switch (((n = L(t[r])), e[r][0])) {\n              case \"M\":\n                t[r] = [\"M\"].concat(n[0]);\n                break;\n              case \"L\":\n                t[r] = [\"L\"].concat(n[0]);\n                break;\n              case \"A\":\n                (t[r] = [].concat(e[r])),\n                  (t[r][6] = n[0][0]),\n                  (t[r][7] = n[0][1]);\n                break;\n              case \"Q\":\n                if (n.length < 2) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = B(n, t[r - 1], 1);\n                }\n                t[r] = [\"Q\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              case \"T\":\n                t[r] = [\"T\"].concat(n[0]);\n                break;\n              case \"C\":\n                if (n.length < 3) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = B(n, t[r - 1], 2);\n                }\n                t[r] = [\"C\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              case \"S\":\n                if (n.length < 2) {\n                  if (!(r > 0)) {\n                    t[r] = e[r];\n                    break;\n                  }\n                  n = B(n, t[r - 1], 1);\n                }\n                t[r] = [\"S\"].concat(\n                  n.reduce(function (t, e) {\n                    return t.concat(e);\n                  }, []),\n                );\n                break;\n              default:\n                t[r] = e[r];\n            }\n        return t;\n      };\n    },\n    35: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"getAdjMatrix\", function () {\n          return r;\n        }),\n        n.d(e, \"breadthFirstSearch\", function () {\n          return l;\n        }),\n        n.d(e, \"connectedComponent\", function () {\n          return d;\n        }),\n        n.d(e, \"getDegree\", function () {\n          return g;\n        }),\n        n.d(e, \"getInDegree\", function () {\n          return v;\n        }),\n        n.d(e, \"getOutDegree\", function () {\n          return y;\n        }),\n        n.d(e, \"detectCycle\", function () {\n          return w;\n        }),\n        n.d(e, \"detectDirectedCycle\", function () {\n          return mt;\n        }),\n        n.d(e, \"detectAllCycles\", function () {\n          return S;\n        }),\n        n.d(e, \"detectAllDirectedCycle\", function () {\n          return x;\n        }),\n        n.d(e, \"detectAllUndirectedCycle\", function () {\n          return b;\n        }),\n        n.d(e, \"depthFirstSearch\", function () {\n          return m;\n        }),\n        n.d(e, \"dijkstra\", function () {\n          return k;\n        }),\n        n.d(e, \"findAllPath\", function () {\n          return P;\n        }),\n        n.d(e, \"findShortestPath\", function () {\n          return E;\n        }),\n        n.d(e, \"floydWarshall\", function () {\n          return A;\n        }),\n        n.d(e, \"labelPropagation\", function () {\n          return I;\n        }),\n        n.d(e, \"louvain\", function () {\n          return F;\n        }),\n        n.d(e, \"iLouvain\", function () {\n          return Y;\n        }),\n        n.d(e, \"kCore\", function () {\n          return X;\n        }),\n        n.d(e, \"kMeans\", function () {\n          return W;\n        }),\n        n.d(e, \"cosineSimilarity\", function () {\n          return q;\n        }),\n        n.d(e, \"nodesCosineSimilarity\", function () {\n          return V;\n        }),\n        n.d(e, \"minimumSpanningTree\", function () {\n          return $;\n        }),\n        n.d(e, \"pageRank\", function () {\n          return Q;\n        }),\n        n.d(e, \"getNeighbors\", function () {\n          return c;\n        }),\n        n.d(e, \"Stack\", function () {\n          return yt;\n        }),\n        n.d(e, \"GADDI\", function () {\n          return vt;\n        });\n      var r = function (t, e) {\n          var n = t.nodes,\n            r = t.edges,\n            i = [],\n            o = {};\n          if (!n) throw new Error(\"invalid nodes data!\");\n          return (\n            n &&\n              n.forEach(function (t, e) {\n                o[t.id] = e;\n                i.push([]);\n              }),\n            r &&\n              r.forEach(function (t) {\n                var n = t.source,\n                  r = t.target,\n                  a = o[n],\n                  s = o[r];\n                (!a && 0 !== a) ||\n                  (!s && 0 !== s) ||\n                  ((i[a][s] = 1), e || (i[s][a] = 1));\n              }),\n            i\n          );\n        },\n        i = function (t, e) {\n          return t === e;\n        },\n        o = (function () {\n          function t(t, e) {\n            void 0 === e && (e = null), (this.value = t), (this.next = e);\n          }\n          return (\n            (t.prototype.toString = function (t) {\n              return t ? t(this.value) : \"\".concat(this.value);\n            }),\n            t\n          );\n        })(),\n        a = (function () {\n          function t(t) {\n            void 0 === t && (t = i),\n              (this.head = null),\n              (this.tail = null),\n              (this.compare = t);\n          }\n          return (\n            (t.prototype.prepend = function (t) {\n              var e = new o(t, this.head);\n              return (this.head = e), this.tail || (this.tail = e), this;\n            }),\n            (t.prototype.append = function (t) {\n              var e = new o(t);\n              return this.head\n                ? ((this.tail.next = e), (this.tail = e), this)\n                : ((this.head = e), (this.tail = e), this);\n            }),\n            (t.prototype.delete = function (t) {\n              if (!this.head) return null;\n              for (\n                var e = null;\n                this.head && this.compare(this.head.value, t);\n\n              )\n                (e = this.head), (this.head = this.head.next);\n              var n = this.head;\n              if (null !== n)\n                for (; n.next; )\n                  this.compare(n.next.value, t)\n                    ? ((e = n.next), (n.next = n.next.next))\n                    : (n = n.next);\n              return this.compare(this.tail.value, t) && (this.tail = n), e;\n            }),\n            (t.prototype.find = function (t) {\n              var e = t.value,\n                n = void 0 === e ? void 0 : e,\n                r = t.callback,\n                i = void 0 === r ? void 0 : r;\n              if (!this.head) return null;\n              for (var o = this.head; o; ) {\n                if (i && i(o.value)) return o;\n                if (void 0 !== n && this.compare(o.value, n)) return o;\n                o = o.next;\n              }\n              return null;\n            }),\n            (t.prototype.deleteTail = function () {\n              var t = this.tail;\n              if (this.head === this.tail)\n                return (this.head = null), (this.tail = null), t;\n              for (var e = this.head; e.next; )\n                e.next.next ? (e = e.next) : (e.next = null);\n              return (this.tail = e), t;\n            }),\n            (t.prototype.deleteHead = function () {\n              if (!this.head) return null;\n              var t = this.head;\n              return (\n                this.head.next\n                  ? (this.head = this.head.next)\n                  : ((this.head = null), (this.tail = null)),\n                t\n              );\n            }),\n            (t.prototype.fromArray = function (t) {\n              var e = this;\n              return (\n                t.forEach(function (t) {\n                  return e.append(t);\n                }),\n                this\n              );\n            }),\n            (t.prototype.toArray = function () {\n              for (var t = [], e = this.head; e; ) t.push(e), (e = e.next);\n              return t;\n            }),\n            (t.prototype.reverse = function () {\n              for (var t = this.head, e = null, n = null; t; )\n                (n = t.next), (t.next = e), (e = t), (t = n);\n              (this.tail = this.head), (this.head = e);\n            }),\n            (t.prototype.toString = function (t) {\n              return (\n                void 0 === t && (t = void 0),\n                this.toArray()\n                  .map(function (e) {\n                    return e.toString(t);\n                  })\n                  .toString()\n              );\n            }),\n            t\n          );\n        })(),\n        s = (function () {\n          function t() {\n            this.linkedList = new a();\n          }\n          return (\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.peek = function () {\n              return this.linkedList.head ? this.linkedList.head.value : null;\n            }),\n            (t.prototype.enqueue = function (t) {\n              this.linkedList.append(t);\n            }),\n            (t.prototype.dequeue = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toString = function (t) {\n              return this.linkedList.toString(t);\n            }),\n            t\n          );\n        })(),\n        c = function (t, e, n) {\n          void 0 === e && (e = []);\n          var r = e.filter(function (e) {\n            return e.source === t || e.target === t;\n          });\n          if (\"target\" === n) {\n            return r\n              .filter(function (e) {\n                return e.source === t;\n              })\n              .map(function (t) {\n                return t.target;\n              });\n          }\n          if (\"source\" === n) {\n            return r\n              .filter(function (e) {\n                return e.target === t;\n              })\n              .map(function (t) {\n                return t.source;\n              });\n          }\n          return r.map(function (e) {\n            return e.source === t ? e.target : e.source;\n          });\n        },\n        u = function (t, e) {\n          return e.filter(function (e) {\n            return e.source === t || e.target === t;\n          });\n        },\n        h = function (t) {\n          void 0 === t && (t = 0);\n          var e = \"\".concat(Math.random()).split(\".\")[1].substr(0, 5),\n            n = \"\".concat(Math.random()).split(\".\")[1].substr(0, 5);\n          return \"\".concat(t, \"-\").concat(e).concat(n);\n        };\n      var l = function (t, e, n, r) {\n          void 0 === r && (r = !0);\n          var i = (function (t) {\n              void 0 === t && (t = {});\n              var e,\n                n = t,\n                r = function () {},\n                i =\n                  ((e = {}),\n                  function (t) {\n                    var n = t.next;\n                    return !e[n] && ((e[n] = !0), !0);\n                  });\n              return (\n                (n.allowTraversal = t.allowTraversal || i),\n                (n.enter = t.enter || r),\n                (n.leave = t.leave || r),\n                n\n              );\n            })(n),\n            o = new s(),\n            a = t.edges,\n            u = void 0 === a ? [] : a;\n          o.enqueue(e);\n          for (\n            var h = \"\",\n              l = function () {\n                var t = o.dequeue();\n                i.enter({ current: t, previous: h }),\n                  c(t, u, r ? \"target\" : void 0).forEach(function (e) {\n                    i.allowTraversal({ previous: h, current: t, next: e }) &&\n                      o.enqueue(e);\n                  }),\n                  i.leave({ current: t, previous: h }),\n                  (h = t);\n              };\n            !o.isEmpty();\n\n          )\n            l();\n        },\n        f = function (t) {\n          for (\n            var e = t.nodes,\n              n = void 0 === e ? [] : e,\n              r = t.edges,\n              i = void 0 === r ? [] : r,\n              o = [],\n              a = {},\n              s = {},\n              u = {},\n              h = [],\n              l = 0,\n              f = function t(e) {\n                (s[e.id] = l),\n                  (u[e.id] = l),\n                  (l += 1),\n                  o.push(e),\n                  (a[e.id] = !0);\n                for (\n                  var r = c(e.id, i, \"target\").filter(function (t) {\n                      return (\n                        n\n                          .map(function (t) {\n                            return t.id;\n                          })\n                          .indexOf(t) > -1\n                      );\n                    }),\n                    f = function (i) {\n                      var o = r[i];\n                      if (s[o] || 0 === s[o])\n                        a[o] && (u[e.id] = Math.min(u[e.id], s[o]));\n                      else {\n                        var c = n.filter(function (t) {\n                          return t.id === o;\n                        });\n                        c.length > 0 && t(c[0]),\n                          (u[e.id] = Math.min(u[e.id], u[o]));\n                      }\n                    },\n                    d = 0;\n                  d < r.length;\n                  d++\n                )\n                  f(d);\n                if (u[e.id] === s[e.id]) {\n                  for (var p = []; o.length > 0; ) {\n                    var g = o.pop();\n                    if (((a[g.id] = !1), p.push(g), g === e)) break;\n                  }\n                  p.length > 0 && h.push(p);\n                }\n              },\n              d = 0,\n              p = n;\n            d < p.length;\n            d++\n          ) {\n            var g = p[d];\n            s[g.id] || 0 === s[g.id] || f(g);\n          }\n          return h;\n        };\n      function d(t, e) {\n        return e\n          ? f(t)\n          : (function (t) {\n              for (\n                var e = t.nodes,\n                  n = void 0 === e ? [] : e,\n                  r = t.edges,\n                  i = void 0 === r ? [] : r,\n                  o = [],\n                  a = {},\n                  s = [],\n                  u = function t(e) {\n                    s.push(e), (a[e.id] = !0);\n                    for (\n                      var r = c(e.id, i),\n                        o = function (e) {\n                          var i = r[e];\n                          if (!a[i]) {\n                            var o = n.filter(function (t) {\n                              return t.id === i;\n                            });\n                            o.length > 0 && t(o[0]);\n                          }\n                        },\n                        u = 0;\n                      u < r.length;\n                      ++u\n                    )\n                      o(u);\n                  },\n                  h = 0;\n                h < n.length;\n                h++\n              ) {\n                var l = n[h];\n                if (!a[l.id]) {\n                  u(l);\n                  for (var f = []; s.length > 0; ) f.push(s.pop());\n                  o.push(f);\n                }\n              }\n              return o;\n            })(t);\n      }\n      var p = function (t) {\n          var e = {},\n            n = t.nodes,\n            r = void 0 === n ? [] : n,\n            i = t.edges,\n            o = void 0 === i ? [] : i;\n          return (\n            r.forEach(function (t) {\n              e[t.id] = { degree: 0, inDegree: 0, outDegree: 0 };\n            }),\n            o.forEach(function (t) {\n              e[t.source].degree++,\n                e[t.source].outDegree++,\n                e[t.target].degree++,\n                e[t.target].inDegree++;\n            }),\n            e\n          );\n        },\n        g = p,\n        v = function (t, e) {\n          return p(t)[e] ? p(t)[e].inDegree : 0;\n        },\n        y = function (t, e) {\n          return p(t)[e] ? p(t)[e].outDegree : 0;\n        };\n      function m(t, e, n) {\n        !(function t(e, n, r, i) {\n          i.enter({ current: n, previous: r });\n          var o = e.edges;\n          c(n, void 0 === o ? [] : o, \"target\").forEach(function (o) {\n            i.allowTraversal({ previous: r, current: n, next: o }) &&\n              t(e, o, n, i);\n          }),\n            i.leave({ current: n, previous: r });\n        })(\n          t,\n          e,\n          \"\",\n          (function (t) {\n            void 0 === t && (t = {});\n            var e,\n              n = t,\n              r = function () {},\n              i =\n                ((e = {}),\n                function (t) {\n                  var n = t.next;\n                  return !e[n] && ((e[n] = !0), !0);\n                });\n            return (\n              (n.allowTraversal = t.allowTraversal || i),\n              (n.enter = t.enter || r),\n              (n.leave = t.leave || r),\n              n\n            );\n          })(n),\n        );\n      }\n      var b = function (t, e, n) {\n          var r, i;\n          void 0 === n && (n = !0);\n          for (var o = [], a = 0, s = d(t, !1); a < s.length; a++) {\n            var u = s[a];\n            if (u.length)\n              for (\n                var h = u[0],\n                  l = h.id,\n                  f = [h],\n                  p = (((r = {})[l] = h), r),\n                  g = (((i = {})[l] = new Set()), i);\n                f.length > 0;\n\n              )\n                for (\n                  var v = f.pop(),\n                    y = v.id,\n                    m = c(y, t.edges),\n                    b = function (r) {\n                      var i,\n                        a = m[r],\n                        s = t.nodes.find(function (t) {\n                          return t.id === a;\n                        });\n                      if (a === y) o.push((((i = {})[a] = v), i));\n                      else if ((a in g)) {\n                        if (!g[y].has(s)) {\n                          for (\n                            var c = !0, u = [s, v], h = p[y];\n                            g[a].size &&\n                            !g[a].has(h) &&\n                            (u.push(h), h !== p[h.id]);\n\n                          )\n                            h = p[h.id];\n                          if (\n                            (u.push(h),\n                            e && n\n                              ? ((c = !1),\n                                u.findIndex(function (t) {\n                                  return e.indexOf(t.id) > -1;\n                                }) > -1 && (c = !0))\n                              : e &&\n                                !n &&\n                                u.findIndex(function (t) {\n                                  return e.indexOf(t.id) > -1;\n                                }) > -1 &&\n                                (c = !1),\n                            c)\n                          ) {\n                            for (var l = {}, d = 1; d < u.length; d += 1)\n                              l[u[d - 1].id] = u[d];\n                            u.length && (l[u[u.length - 1].id] = u[0]),\n                              o.push(l);\n                          }\n                          g[a].add(v);\n                        }\n                      } else (p[a] = v), f.push(s), (g[a] = new Set([v]));\n                    },\n                    x = 0;\n                  x < m.length;\n                  x += 1\n                )\n                  b(x);\n          }\n          return o;\n        },\n        x = function (t, e, n) {\n          void 0 === n && (n = !0);\n          for (\n            var r = [],\n              i = new Set(),\n              o = [],\n              a = [],\n              s = {},\n              u = {},\n              h = function t(c, u, h) {\n                var l = !1;\n                if (e && !1 === n && e.indexOf(c.id) > -1) return l;\n                r.push(c), i.add(c);\n                for (var f = h[c.id], d = 0; d < f.length; d += 1) {\n                  if ((v = s[f[d]]) === u) {\n                    for (var p = {}, g = 1; g < r.length; g += 1)\n                      p[r[g - 1].id] = r[g];\n                    r.length && (p[r[r.length - 1].id] = r[0]),\n                      a.push(p),\n                      (l = !0);\n                  } else i.has(v) || (t(v, u, h) && (l = !0));\n                }\n                if (l)\n                  !(function (t) {\n                    for (var e = [t]; e.length > 0; ) {\n                      var n = e.pop();\n                      i.has(n) &&\n                        (i.delete(n),\n                        o[n.id].forEach(function (t) {\n                          e.push(t);\n                        }),\n                        o[n.id].clear());\n                    }\n                  })(c);\n                else\n                  for (d = 0; d < f.length; d += 1) {\n                    var v = s[f[d]];\n                    o[v.id].has(c) || o[v.id].add(c);\n                  }\n                return r.pop(), l;\n              },\n              l = t.nodes,\n              d = void 0 === l ? [] : l,\n              p = 0;\n            p < d.length;\n            p += 1\n          ) {\n            var g = d[p],\n              v = g.id;\n            (u[v] = p), (s[p] = g);\n          }\n          if (e && n) {\n            var y = function (t) {\n              var n = e[t];\n              (u[d[t].id] = u[n]),\n                (u[n] = 0),\n                (s[0] = d.find(function (t) {\n                  return t.id === n;\n                })),\n                (s[u[d[t].id]] = d[t]);\n            };\n            for (p = 0; p < e.length; p++) y(p);\n          }\n          for (\n            var m = function (r) {\n                for (var i, o, s = 1 / 0, h = 0; h < r.length; h += 1)\n                  for (var l = r[h], f = 0; f < l.length; f++) {\n                    var d = u[l[f].id];\n                    d < s && ((s = d), (o = h));\n                  }\n                var p = r[o],\n                  g = [];\n                for (h = 0; h < p.length; h += 1) {\n                  var v = p[h];\n                  g[v.id] = [];\n                  for (\n                    var y = 0,\n                      m = c(v.id, t.edges, \"target\").filter(function (t) {\n                        return (\n                          p\n                            .map(function (t) {\n                              return t.id;\n                            })\n                            .indexOf(t) > -1\n                        );\n                      });\n                    y < m.length;\n                    y++\n                  ) {\n                    var b = m[y];\n                    b !== v.id || (!1 === n && e.indexOf(v.id) > -1)\n                      ? g[v.id].push(u[b])\n                      : a.push((((i = {})[v.id] = v), i));\n                  }\n                }\n                return { component: p, adjList: g, minIdx: s };\n              },\n              b = 0;\n            b < d.length;\n\n          ) {\n            var x = d.filter(function (t) {\n                return u[t.id] >= b;\n              }),\n              S = f({ nodes: x, edges: t.edges }).filter(function (t) {\n                return t.length > 1;\n              });\n            if (0 === S.length) break;\n            var w = m(S),\n              O = w.minIdx,\n              M = w.adjList,\n              k = w.component;\n            if (!(k.length > 1)) break;\n            k.forEach(function (t) {\n              o[t.id] = new Set();\n            });\n            var j = s[O];\n            if (e && n && -1 === e.indexOf(j.id)) return a;\n            h(j, j, M), (b = O + 1);\n          }\n          return a;\n        },\n        S = function (t, e, n, r) {\n          return void 0 === r && (r = !0), e ? x(t, n, r) : b(t, n, r);\n        },\n        w = function (t) {\n          var e = null,\n            n = t.nodes,\n            r = {},\n            i = {},\n            o = {},\n            a = {};\n          (void 0 === n ? [] : n).forEach(function (t) {\n            i[t.id] = t;\n          });\n          for (\n            var s = {\n              enter: function (t) {\n                var n = t.current,\n                  a = t.previous;\n                if (o[n]) {\n                  e = {};\n                  for (var s = n, c = a; c !== n; )\n                    (e[s] = c), (s = c), (c = r[c]);\n                  e[s] = c;\n                } else (o[n] = n), delete i[n], (r[n] = a);\n              },\n              leave: function (t) {\n                var e = t.current;\n                (a[e] = e), delete o[e];\n              },\n              allowTraversal: function (t) {\n                var n = t.next;\n                return !e && !a[n];\n              },\n            };\n            Object.keys(i).length;\n\n          ) {\n            m(t, Object.keys(i)[0], s);\n          }\n          return e;\n        },\n        O = n(1),\n        M = n(0),\n        k = function (t, e, n, r) {\n          var i = t.nodes,\n            o = void 0 === i ? [] : i,\n            a = t.edges,\n            s = void 0 === a ? [] : a,\n            c = [],\n            h = {},\n            l = {},\n            f = {};\n          o.forEach(function (t, n) {\n            var r = t.id;\n            c.push(r), (l[r] = 1 / 0), r === e && (l[r] = 0);\n          });\n          for (\n            var d = o.length,\n              p = function (t) {\n                var e = (function (t, e, n) {\n                    for (var r, i = 1 / 0, o = 0; o < e.length; o++) {\n                      var a = e[o].id;\n                      !n[a] && t[a] <= i && ((i = t[a]), (r = e[o]));\n                    }\n                    return r;\n                  })(l, o, h),\n                  i = e.id;\n                if (((h[i] = !0), l[i] === 1 / 0)) return \"continue\";\n                (n\n                  ? (function (t, e) {\n                      return e.filter(function (e) {\n                        return e.source === t;\n                      });\n                    })(i, s)\n                  : u(i, s)\n                ).forEach(function (t) {\n                  var n = t.target,\n                    o = t.source,\n                    a = n === i ? o : n,\n                    s = r && t[r] ? t[r] : 1;\n                  l[a] > l[e.id] + s\n                    ? ((l[a] = l[e.id] + s), (f[a] = [e.id]))\n                    : l[a] === l[e.id] + s && f[a].push(e.id);\n                });\n              },\n              g = 0;\n            g < d;\n            g++\n          )\n            p();\n          f[e] = [e];\n          var v = {};\n          for (var y in l) l[y] !== 1 / 0 && j(e, y, f, v);\n          var m = {};\n          for (var y in v) m[y] = v[y][0];\n          return { length: l, path: m, allPath: v };\n        };\n      function j(t, e, n, r) {\n        if (t === e) return [t];\n        if (r[e]) return r[e];\n        for (var i = [], o = 0, a = n[e]; o < a.length; o++) {\n          var s = j(t, a[o], n, r);\n          if (!s) return;\n          for (var c = 0, u = s; c < u.length; c++) {\n            var h = u[c];\n            Object(M.isArray)(h)\n              ? i.push(Object(O.f)(Object(O.f)([], h, !0), [e], !1))\n              : i.push([h, e]);\n          }\n        }\n        return (r[e] = i), r[e];\n      }\n      var C,\n        E = function (t, e, n, r, i) {\n          var o = k(t, e, r, i),\n            a = o.length,\n            s = o.path,\n            c = o.allPath;\n          return { length: a[n], path: s[n], allPath: c[n] };\n        },\n        P = function (t, e, n, r) {\n          var i;\n          if (e === n) return [[e]];\n          var o = t.edges,\n            a = void 0 === o ? [] : o,\n            s = [e],\n            u = (((i = {})[e] = !0), i),\n            h = [],\n            l = [],\n            f = r ? c(e, a, \"target\") : c(e, a);\n          for (h.push(f); s.length > 0 && h.length > 0; ) {\n            var d = h[h.length - 1];\n            if (d.length) {\n              var p = d.shift();\n              if (\n                (p &&\n                  (s.push(p),\n                  (u[p] = !0),\n                  (f = r ? c(p, a, \"target\") : c(p, a)),\n                  h.push(\n                    f.filter(function (t) {\n                      return !u[t];\n                    }),\n                  )),\n                s[s.length - 1] === n)\n              ) {\n                var g = s.map(function (t) {\n                  return t;\n                });\n                l.push(g);\n                v = s.pop();\n                (u[v] = !1), h.pop();\n              }\n            } else {\n              var v = s.pop();\n              (u[v] = !1), h.pop();\n            }\n          }\n          return l;\n        },\n        A = function (t, e) {\n          for (var n = r(t, e), i = [], o = n.length, a = 0; a < o; a += 1) {\n            i[a] = [];\n            for (var s = 0; s < o; s += 1)\n              a === s\n                ? (i[a][s] = 0)\n                : 0 !== n[a][s] && n[a][s]\n                ? (i[a][s] = n[a][s])\n                : (i[a][s] = 1 / 0);\n          }\n          for (var c = 0; c < o; c += 1)\n            for (a = 0; a < o; a += 1)\n              for (s = 0; s < o; s += 1)\n                i[a][s] > i[a][c] + i[c][s] && (i[a][s] = i[a][c] + i[c][s]);\n          return i;\n        },\n        I = function (t, e, n, i) {\n          void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === i && (i = 1e3);\n          var o = t.nodes,\n            a = void 0 === o ? [] : o,\n            s = t.edges,\n            c = void 0 === s ? [] : s,\n            u = {},\n            l = {};\n          a.forEach(function (t, e) {\n            var n = h();\n            (t.clusterId = n),\n              (u[n] = { id: n, nodes: [t] }),\n              (l[t.id] = { node: t, idx: e });\n          });\n          var f = r(t, e),\n            d = [],\n            p = {};\n          f.forEach(function (t, e) {\n            var n = 0,\n              r = a[e].id;\n            (p[r] = {}),\n              t.forEach(function (t, e) {\n                if (t) {\n                  n += t;\n                  var i = a[e].id;\n                  p[r][i] = t;\n                }\n              }),\n              d.push(n);\n          });\n          for (\n            var g = 0,\n              v = function () {\n                var t = !1;\n                if (\n                  (a.forEach(function (e) {\n                    var n = {};\n                    Object.keys(p[e.id]).forEach(function (t) {\n                      var r = p[e.id][t],\n                        i = l[t].node.clusterId;\n                      n[i] || (n[i] = 0), (n[i] += r);\n                    });\n                    var r = -1 / 0,\n                      i = [];\n                    if (\n                      (Object.keys(n).forEach(function (t) {\n                        r < n[t]\n                          ? ((r = n[t]), (i = [t]))\n                          : r === n[t] && i.push(t);\n                      }),\n                      1 !== i.length || i[0] !== e.clusterId)\n                    ) {\n                      var o = i.indexOf(e.clusterId);\n                      if ((o >= 0 && i.splice(o, 1), i && i.length)) {\n                        t = !0;\n                        var a = u[e.clusterId],\n                          s = a.nodes.indexOf(e);\n                        a.nodes.splice(s, 1);\n                        var c = Math.floor(Math.random() * i.length),\n                          h = u[i[c]];\n                        h.nodes.push(e), (e.clusterId = h.id);\n                      }\n                    }\n                  }),\n                  !t)\n                )\n                  return \"break\";\n                g++;\n              };\n            g < i;\n\n          ) {\n            if (\"break\" === v()) break;\n          }\n          Object.keys(u).forEach(function (t) {\n            var e = u[t];\n            (e.nodes && e.nodes.length) || delete u[t];\n          });\n          var y = [],\n            m = {};\n          c.forEach(function (t) {\n            var e = t.source,\n              r = t.target,\n              i = t[n] || 1,\n              o = l[e].node.clusterId,\n              a = l[r].node.clusterId,\n              s = \"\".concat(o, \"---\").concat(a);\n            if (m[s]) (m[s].weight += i), m[s].count++;\n            else {\n              var c = { source: o, target: a, weight: i, count: 1 };\n              (m[s] = c), y.push(c);\n            }\n          });\n          var b = [];\n          return (\n            Object.keys(u).forEach(function (t) {\n              b.push(u[t]);\n            }),\n            { clusters: b, clusterEdges: y }\n          );\n        },\n        T = (function () {\n          function t(t) {\n            this.arr = t;\n          }\n          return (\n            (t.prototype.getArr = function () {\n              return this.arr || [];\n            }),\n            (t.prototype.add = function (e) {\n              var n,\n                r = e.arr;\n              if (\n                !(null === (n = this.arr) || void 0 === n ? void 0 : n.length)\n              )\n                return new t(r);\n              if (!(null == r ? void 0 : r.length)) return new t(this.arr);\n              if (this.arr.length === r.length) {\n                var i = [];\n                for (var o in this.arr) i[o] = this.arr[o] + r[o];\n                return new t(i);\n              }\n            }),\n            (t.prototype.subtract = function (e) {\n              var n,\n                r = e.arr;\n              if (\n                !(null === (n = this.arr) || void 0 === n ? void 0 : n.length)\n              )\n                return new t(r);\n              if (!(null == r ? void 0 : r.length)) return new t(this.arr);\n              if (this.arr.length === r.length) {\n                var i = [];\n                for (var o in this.arr) i[o] = this.arr[o] - r[o];\n                return new t(i);\n              }\n            }),\n            (t.prototype.avg = function (e) {\n              var n = [];\n              if (0 !== e) for (var r in this.arr) n[r] = this.arr[r] / e;\n              return new t(n);\n            }),\n            (t.prototype.negate = function () {\n              var e = [];\n              for (var n in this.arr) e[n] = -this.arr[n];\n              return new t(e);\n            }),\n            (t.prototype.squareEuclideanDistance = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr)\n                  r += Math.pow(this.arr[i] - t.arr[i], 2);\n                return r;\n              }\n            }),\n            (t.prototype.euclideanDistance = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr)\n                  r += Math.pow(this.arr[i] - t.arr[i], 2);\n                return Math.sqrt(r);\n              }\n              console.error(\"The two vectors are unequal in length.\");\n            }),\n            (t.prototype.normalize = function () {\n              var e = [],\n                n = Object(M.clone)(this.arr);\n              n.sort(function (t, e) {\n                return t - e;\n              });\n              var r = n[n.length - 1],\n                i = n[0];\n              for (var o in this.arr) e[o] = (this.arr[o] - i) / (r - i);\n              return new t(e);\n            }),\n            (t.prototype.norm2 = function () {\n              var t;\n              if (\n                !(null === (t = this.arr) || void 0 === t ? void 0 : t.length)\n              )\n                return 0;\n              var e = 0;\n              for (var n in this.arr) e += Math.pow(this.arr[n], 2);\n              return Math.sqrt(e);\n            }),\n            (t.prototype.dot = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                !(null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) ||\n                !(null == n ? void 0 : n.length)\n              )\n                return 0;\n              if (this.arr.length === n.length) {\n                var r = 0;\n                for (var i in this.arr) r += this.arr[i] * t.arr[i];\n                return r;\n              }\n              console.error(\"The two vectors are unequal in length.\");\n            }),\n            (t.prototype.equal = function (t) {\n              var e,\n                n = t.arr;\n              if (\n                (null === (e = this.arr) || void 0 === e\n                  ? void 0\n                  : e.length) !== (null == n ? void 0 : n.length)\n              )\n                return !1;\n              for (var r in this.arr) if (this.arr[r] !== n[r]) return !1;\n              return !0;\n            }),\n            t\n          );\n        })(),\n        N = function (t, e) {\n          void 0 === e && (e = void 0);\n          var n = [];\n          return (\n            t.forEach(function (t) {\n              void 0 === e && n.push(t), void 0 !== t[e] && n.push(t[e]);\n            }),\n            n\n          );\n        };\n      !(function (t) {\n        t.EuclideanDistance = \"euclideanDistance\";\n      })(C || (C = {}));\n      var B = function (t, e, n) {\n          var r = [];\n          (null == e ? void 0 : e.length)\n            ? (r = e)\n            : (t.forEach(function (t) {\n                r = r.concat(Object.keys(t));\n              }),\n              (r = Object(M.uniq)(r)));\n          var i = {};\n          return (\n            r.forEach(function (e) {\n              var r = [];\n              t.forEach(function (t) {\n                void 0 !== t[e] && \"\" !== t[e] && r.push(t[e]);\n              }),\n                r.length &&\n                  !(null == n ? void 0 : n.includes(e)) &&\n                  (i[e] = Object(M.uniq)(r));\n            }),\n            i\n          );\n        },\n        L = function (t, e, n) {\n          var r = B(t, e, n),\n            i = [];\n          if (!Object.keys(r).length) return i;\n          var o = Object.values(r).every(function (t) {\n            return t.every(function (t) {\n              return \"number\" == typeof t;\n            });\n          });\n          return (\n            t.forEach(function (t, e) {\n              var n = [];\n              Object.keys(r).forEach(function (e) {\n                var i = t[e],\n                  a = r[e],\n                  s = a.findIndex(function (t) {\n                    return i === t;\n                  }),\n                  c = [];\n                if (o) c.push(i);\n                else\n                  for (var u = 0; u < a.length; u++)\n                    u === s ? c.push(1) : c.push(0);\n                n = n.concat(c);\n              }),\n                (i[e] = n);\n            }),\n            i\n          );\n        },\n        D = function (t, e, n, r) {\n          void 0 === n && (n = C.EuclideanDistance);\n          var i = 0;\n          switch (n) {\n            case C.EuclideanDistance:\n              i = new T(t).euclideanDistance(new T(e));\n          }\n          return i;\n        },\n        _ = function (t, e, n, r) {\n          for (var i = e.length, o = 2 * r, a = 0, s = 0; s < i; s++)\n            for (var c = t[s].clusterId, u = 0; u < i; u++) {\n              if (c === t[u].clusterId)\n                a += (e[s][u] || 0) - ((n[s] || 0) * (n[u] || 0)) / o;\n            }\n          return (a *= 1 / o);\n        },\n        R = function (t, e) {\n          void 0 === t && (t = []);\n          for (var n = t.length, r = new T([]), i = 0; i < n; i++)\n            r = r.add(new T(e[i]));\n          var o = r.avg(n);\n          o.normalize();\n          var a = 0;\n          for (i = 0; i < n; i++) {\n            a += (c = new T(e[i])).squareEuclideanDistance(o);\n          }\n          var s = [];\n          t.forEach(function () {\n            s.push([]);\n          });\n          for (i = 0; i < n; i++) {\n            var c = new T(e[i]);\n            t[i].clusterInertial = 0;\n            for (var u = 0; u < n; u++)\n              if (i !== u) {\n                var h = new T(e[u]);\n                (s[i][u] = c.squareEuclideanDistance(h)),\n                  (t[i].clusterInertial += s[i][u]);\n              } else s[i][u] = 0;\n          }\n          var l = 0,\n            f = 2 * n * a;\n          for (i = 0; i < n; i++) {\n            var d = t[i].clusterId;\n            for (u = 0; u < n; u++) {\n              var p = t[u].clusterId;\n              if (i !== u && d === p)\n                l +=\n                  (t[i].clusterInertial * t[u].clusterInertial) /\n                    Math.pow(f, 2) -\n                  s[i][u] / f;\n            }\n          }\n          return Number(l.toFixed(4));\n        },\n        F = function (t, e, n, i, o, a, s, c, u) {\n          void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === i && (i = 1e-4),\n            void 0 === o && (o = !1),\n            void 0 === a && (a = void 0),\n            void 0 === s && (s = []),\n            void 0 === c && (c = [\"id\"]),\n            void 0 === u && (u = 1);\n          var h = t.nodes,\n            l = void 0 === h ? [] : h,\n            f = t.edges,\n            d = void 0 === f ? [] : f,\n            p = [];\n          if (o) {\n            l.forEach(function (t, e) {\n              (t.properties = t.properties || {}), (t.originIndex = e);\n            });\n            var g = [];\n            l.every(function (t) {\n              return t.hasOwnProperty(\"nodeType\");\n            }) &&\n              ((g = Array.from(\n                new Set(\n                  l.map(function (t) {\n                    return t.nodeType;\n                  }),\n                ),\n              )),\n              l.forEach(function (t) {\n                t.properties.nodeType = g.findIndex(function (e) {\n                  return e === t.nodeType;\n                });\n              }));\n            var v = N(l, a);\n            p = L(v, s, c);\n          }\n          var y = 1,\n            m = {},\n            b = {};\n          l.forEach(function (t, e) {\n            var n = String(y++);\n            (t.clusterId = n),\n              (m[n] = { id: n, nodes: [t] }),\n              (b[t.id] = { node: t, idx: e });\n          });\n          var x = r(t, e),\n            S = [],\n            w = {},\n            O = 0;\n          x.forEach(function (t, e) {\n            var n = 0,\n              r = l[e].id;\n            (w[r] = {}),\n              t.forEach(function (t, e) {\n                if (t) {\n                  n += t;\n                  var i = l[e].id;\n                  (w[r][i] = t), (O += t);\n                }\n              }),\n              S.push(n);\n          }),\n            (O /= 2);\n          for (var k = 1 / 0, j = 1 / 0, C = 0, E = [], P = {}; ; ) {\n            (k =\n              o &&\n              l.every(function (t) {\n                return t.hasOwnProperty(\"properties\");\n              })\n                ? _(l, x, S, O) + R(l, p) * u\n                : _(l, x, S, O)),\n              0 === C && ((j = k), (E = l), (P = m));\n            var A = k > 0 && k > j && k - j < i;\n            if (\n              (k > j &&\n                ((E = l.map(function (t) {\n                  return { node: t, clusterId: t.clusterId };\n                })),\n                (P = Object(M.clone)(m)),\n                (j = k)),\n              A || C > 100)\n            )\n              break;\n            C++,\n              Object.keys(m).forEach(function (t) {\n                var e = 0;\n                d.forEach(function (r) {\n                  var i = r.source,\n                    o = r.target,\n                    a = b[i].node.clusterId,\n                    s = b[o].node.clusterId;\n                  ((a === t && s !== t) || (s === t && a !== t)) &&\n                    (e += r[n] || 1);\n                }),\n                  (m[t].sumTot = e);\n              }),\n              l.forEach(function (t, e) {\n                var r,\n                  i = m[t.clusterId],\n                  a = 0,\n                  s = S[e] / (2 * O),\n                  c = 0,\n                  h = i.nodes;\n                h.forEach(function (t) {\n                  var n = b[t.id].idx;\n                  c += x[e][n] || 0;\n                });\n                var l = c - i.sumTot * s,\n                  f = h.filter(function (e) {\n                    return e.id !== t.id;\n                  }),\n                  g = [];\n                f.forEach(function (t, e) {\n                  g[e] = p[t.originIndex];\n                });\n                var v = R(f, p) * u,\n                  y = w[t.id];\n                if (\n                  (Object.keys(y).forEach(function (n) {\n                    var i = b[n].node.clusterId;\n                    if (i !== t.clusterId) {\n                      var c = m[i],\n                        h = c.nodes;\n                      if (h && h.length) {\n                        var f = 0;\n                        h.forEach(function (t) {\n                          var n = b[t.id].idx;\n                          f += x[e][n] || 0;\n                        });\n                        var d = f - c.sumTot * s,\n                          g = h.concat([t]),\n                          y = [];\n                        g.forEach(function (t, e) {\n                          y[e] = p[t.originIndex];\n                        });\n                        var S = R(g, p) * u,\n                          w = d - l;\n                        o && (w = d + S - (l + v)), w > a && ((a = w), (r = c));\n                      }\n                    }\n                  }),\n                  a > 0)\n                ) {\n                  r.nodes.push(t);\n                  var M = t.clusterId;\n                  t.clusterId = r.id;\n                  var k = i.nodes.indexOf(t);\n                  i.nodes.splice(k, 1);\n                  var j = 0,\n                    C = 0;\n                  d.forEach(function (t) {\n                    var e = t.source,\n                      i = t.target,\n                      o = b[e].node.clusterId,\n                      a = b[i].node.clusterId;\n                    ((o === r.id && a !== r.id) ||\n                      (a === r.id && o !== r.id)) &&\n                      (j += t[n] || 1),\n                      ((o === M && a !== M) || (a === M && o !== M)) &&\n                        (C += t[n] || 1);\n                  }),\n                    (r.sumTot = j),\n                    (i.sumTot = C);\n                }\n              });\n          }\n          var I = {},\n            T = 0;\n          Object.keys(P).forEach(function (t) {\n            var e = P[t];\n            if (e.nodes && e.nodes.length) {\n              var n = String(T + 1);\n              n !== t &&\n                ((e.id = n),\n                (e.nodes = e.nodes.map(function (t) {\n                  return { id: t.id, clusterId: n };\n                })),\n                (P[n] = e),\n                (I[t] = n),\n                delete P[t],\n                T++);\n            } else delete P[t];\n          }),\n            E.forEach(function (t) {\n              var e = t.node,\n                n = t.clusterId;\n              e &&\n                ((e.clusterId = n),\n                e.clusterId &&\n                  I[e.clusterId] &&\n                  (e.clusterId = I[e.clusterId]));\n            });\n          var B = [],\n            D = {};\n          d.forEach(function (t) {\n            var e = t.source,\n              r = t.target,\n              i = t[n] || 1,\n              o = b[e].node.clusterId,\n              a = b[r].node.clusterId;\n            if (o && a) {\n              var s = \"\".concat(o, \"---\").concat(a);\n              if (D[s]) (D[s].weight += i), D[s].count++;\n              else {\n                var c = { source: o, target: a, weight: i, count: 1 };\n                (D[s] = c), B.push(c);\n              }\n            }\n          });\n          var F = [];\n          return (\n            Object.keys(P).forEach(function (t) {\n              F.push(P[t]);\n            }),\n            { clusters: F, clusterEdges: B }\n          );\n        },\n        Y = function (t, e, n, r, i, o, a, s) {\n          return (\n            void 0 === e && (e = !1),\n            void 0 === n && (n = \"weight\"),\n            void 0 === r && (r = 1e-4),\n            void 0 === i && (i = void 0),\n            void 0 === o && (o = []),\n            void 0 === a && (a = [\"id\"]),\n            void 0 === s && (s = 1),\n            F(t, e, n, r, !0, i, o, a, s)\n          );\n        },\n        X = function (t, e) {\n          var n;\n          void 0 === e && (e = 1);\n          for (\n            var r = Object(M.clone)(t),\n              i = r.nodes,\n              o = void 0 === i ? [] : i,\n              a = r.edges,\n              s = void 0 === a ? [] : a,\n              c = function () {\n                var t = g({ nodes: o, edges: s }),\n                  r = Object.keys(t);\n                r.sort(function (e, n) {\n                  var r, i;\n                  return (\n                    (null === (r = t[e]) || void 0 === r ? void 0 : r.degree) -\n                    (null === (i = t[n]) || void 0 === i ? void 0 : i.degree)\n                  );\n                });\n                var i = r[0];\n                if (\n                  !o.length ||\n                  (null === (n = t[i]) || void 0 === n ? void 0 : n.degree) >= e\n                )\n                  return \"break\";\n                var a = o.findIndex(function (t) {\n                  return t.id === i;\n                });\n                o.splice(a, 1),\n                  (s = s.filter(function (t) {\n                    return !(t.source === i || t.target === i);\n                  }));\n              };\n            ;\n\n          ) {\n            if (\"break\" === c()) break;\n          }\n          return { nodes: o, edges: s };\n        },\n        z = function (t, e, n) {\n          var r = [];\n          switch (t) {\n            case C.EuclideanDistance:\n              r = e[n];\n              break;\n            default:\n              r = [];\n          }\n          return r;\n        },\n        W = function (t, e, n, r, i, o) {\n          void 0 === e && (e = 3),\n            void 0 === n && (n = void 0),\n            void 0 === r && (r = []),\n            void 0 === i && (i = [\"id\"]),\n            void 0 === o && (o = C.EuclideanDistance);\n          var a = t.nodes,\n            s = void 0 === a ? [] : a,\n            c = t.edges,\n            u = void 0 === c ? [] : c,\n            h = { clusters: [{ id: \"0\", nodes: s }], clusterEdges: [] };\n          if (\n            o === C.EuclideanDistance &&\n            !s.every(function (t) {\n              return t.hasOwnProperty(n);\n            })\n          )\n            return h;\n          var l = [],\n            f = [];\n          if (\n            (o === C.EuclideanDistance && ((l = N(s, n)), (f = L(l, r, i))),\n            !f.length)\n          )\n            return h;\n          for (\n            var d = Object(M.uniq)(\n                f.map(function (t) {\n                  return t.join(\"\");\n                }),\n              ),\n              p = Math.min(e, s.length, d.length),\n              g = 0;\n            g < s.length;\n            g++\n          )\n            s[g].originIndex = g;\n          var v = [],\n            y = [],\n            m = [];\n          for (g = 0; g < p; g++)\n            if (0 === g) {\n              var b = Math.floor(Math.random() * s.length);\n              switch (o) {\n                case C.EuclideanDistance:\n                  v[g] = f[b];\n                  break;\n                default:\n                  v[g] = [];\n              }\n              y.push(b), (m[g] = [s[b]]), (s[b].clusterId = String(g));\n            } else {\n              for (\n                var x = -1 / 0,\n                  S = 0,\n                  w = function (t) {\n                    if (!y.includes(t)) {\n                      for (var e = 0, n = 0; n < v.length; n++) {\n                        var r = 0;\n                        switch (o) {\n                          case C.EuclideanDistance:\n                            r = D(f[s[t].originIndex], v[n], o);\n                        }\n                        e += r;\n                      }\n                      var i = e / v.length;\n                      i > x &&\n                        !v.find(function (e) {\n                          return Object(M.isEqual)(\n                            e,\n                            z(o, f, s[t].originIndex),\n                          );\n                        }) &&\n                        ((x = i), (S = t));\n                    }\n                  },\n                  O = 0;\n                O < s.length;\n                O++\n              )\n                w(O);\n              (v[g] = z(o, f, S)),\n                y.push(S),\n                (m[g] = [s[S]]),\n                (s[S].clusterId = String(g));\n            }\n          for (var k = 0; ; ) {\n            for (g = 0; g < s.length; g++) {\n              var j = 0,\n                E = 1 / 0;\n              if (0 !== k || !y.includes(g)) {\n                for (var P = 0; P < v.length; P++) {\n                  var A = 0;\n                  switch (o) {\n                    case C.EuclideanDistance:\n                      A = D(f[g], v[P], o);\n                  }\n                  A < E && ((E = A), (j = P));\n                }\n                if (void 0 !== s[g].clusterId)\n                  for (\n                    var I = m[Number(s[g].clusterId)].length - 1;\n                    I >= 0;\n                    I--\n                  )\n                    m[Number(s[g].clusterId)][I].id === s[g].id &&\n                      m[Number(s[g].clusterId)].splice(I, 1);\n                (s[g].clusterId = String(j)), m[j].push(s[g]);\n              }\n            }\n            var B = !1;\n            for (g = 0; g < m.length; g++) {\n              var _ = m[g],\n                R = new T([]);\n              for (P = 0; P < _.length; P++)\n                R = R.add(new T(f[_[P].originIndex]));\n              var F = R.avg(_.length);\n              F.equal(new T(v[g])) || ((B = !0), (v[g] = F.getArr()));\n            }\n            if (\n              (k++,\n              (s.every(function (t) {\n                return void 0 !== t.clusterId;\n              }) &&\n                B) ||\n                k >= 1e3)\n            )\n              break;\n          }\n          var Y = [],\n            X = {};\n          return (\n            u.forEach(function (t) {\n              var e,\n                n,\n                r = t.source,\n                i = t.target,\n                o =\n                  null ===\n                    (e = s.find(function (t) {\n                      return t.id === r;\n                    })) || void 0 === e\n                    ? void 0\n                    : e.clusterId,\n                a =\n                  null ===\n                    (n = s.find(function (t) {\n                      return t.id === i;\n                    })) || void 0 === n\n                    ? void 0\n                    : n.clusterId,\n                c = \"\".concat(o, \"---\").concat(a);\n              if (X[c]) X[c].count++;\n              else {\n                var u = { source: o, target: a, count: 1 };\n                (X[c] = u), Y.push(u);\n              }\n            }),\n            { clusters: m, clusterEdges: Y }\n          );\n        },\n        q = function (t, e) {\n          var n = new T(e),\n            r = n.norm2(),\n            i = new T(t),\n            o = i.norm2(),\n            a = n.dot(i),\n            s = r * o,\n            c = s ? a / s : 0;\n          return c;\n        },\n        V = function (t, e, n, r, i) {\n          void 0 === t && (t = []),\n            void 0 === n && (n = void 0),\n            void 0 === r && (r = []),\n            void 0 === i && (i = []);\n          var o = Object(M.clone)(\n              t.filter(function (t) {\n                return t.id !== e.id;\n              }),\n            ),\n            a = t.findIndex(function (t) {\n              return t.id === e.id;\n            }),\n            s = N(t, n),\n            c = L(s, r, i),\n            u = c[a],\n            h = [];\n          return (\n            o.forEach(function (t, n) {\n              if (t.id !== e.id) {\n                var r = c[n],\n                  i = q(r, u);\n                h.push(i), (t.cosineSimilarity = i);\n              }\n            }),\n            o.sort(function (t, e) {\n              return e.cosineSimilarity - t.cosineSimilarity;\n            }),\n            { allCosineSimilarity: h, similarNodes: o }\n          );\n        },\n        G = (function () {\n          function t(t) {\n            (this.count = t.length), (this.parent = {});\n            for (var e = 0, n = t; e < n.length; e++) {\n              var r = n[e];\n              this.parent[r] = r;\n            }\n          }\n          return (\n            (t.prototype.find = function (t) {\n              for (; this.parent[t] !== t; ) t = this.parent[t];\n              return t;\n            }),\n            (t.prototype.union = function (t, e) {\n              var n = this.find(t),\n                r = this.find(e);\n              n !== r &&\n                (n < r\n                  ? (this.parent[e] !== e && this.union(this.parent[e], t),\n                    (this.parent[e] = this.parent[t]))\n                  : (this.parent[t] !== t && this.union(this.parent[t], e),\n                    (this.parent[t] = this.parent[e])));\n            }),\n            (t.prototype.connected = function (t, e) {\n              return this.find(t) === this.find(e);\n            }),\n            t\n          );\n        })(),\n        H = function (t, e) {\n          return t - e;\n        },\n        U = (function () {\n          function t(t) {\n            void 0 === t && (t = H), (this.compareFn = t), (this.list = []);\n          }\n          return (\n            (t.prototype.getLeft = function (t) {\n              return 2 * t + 1;\n            }),\n            (t.prototype.getRight = function (t) {\n              return 2 * t + 2;\n            }),\n            (t.prototype.getParent = function (t) {\n              return 0 === t ? null : Math.floor((t - 1) / 2);\n            }),\n            (t.prototype.isEmpty = function () {\n              return this.list.length <= 0;\n            }),\n            (t.prototype.top = function () {\n              return this.isEmpty() ? void 0 : this.list[0];\n            }),\n            (t.prototype.delMin = function () {\n              var t = this.top(),\n                e = this.list.pop();\n              return (\n                this.list.length > 0 && ((this.list[0] = e), this.moveDown(0)),\n                t\n              );\n            }),\n            (t.prototype.insert = function (t) {\n              if (null !== t) {\n                this.list.push(t);\n                var e = this.list.length - 1;\n                return this.moveUp(e), !0;\n              }\n              return !1;\n            }),\n            (t.prototype.moveUp = function (t) {\n              for (\n                var e = this.getParent(t);\n                t && t > 0 && this.compareFn(this.list[e], this.list[t]) > 0;\n\n              ) {\n                var n = this.list[e];\n                (this.list[e] = this.list[t]),\n                  (this.list[t] = n),\n                  (t = e),\n                  (e = this.getParent(t));\n              }\n            }),\n            (t.prototype.moveDown = function (t) {\n              var e,\n                n = t,\n                r = this.getLeft(t),\n                i = this.getRight(t),\n                o = this.list.length;\n              null !== r &&\n              r < o &&\n              this.compareFn(this.list[n], this.list[r]) > 0\n                ? (n = r)\n                : null !== i &&\n                  i < o &&\n                  this.compareFn(this.list[n], this.list[i]) > 0 &&\n                  (n = i),\n                t !== n &&\n                  ((e = [this.list[n], this.list[t]]),\n                  (this.list[t] = e[0]),\n                  (this.list[n] = e[1]),\n                  this.moveDown(n));\n            }),\n            t\n          );\n        })(),\n        Z = function (t, e) {\n          var n = [],\n            r = t.nodes,\n            i = void 0 === r ? [] : r,\n            o = t.edges,\n            a = void 0 === o ? [] : o;\n          if (0 === i.length) return n;\n          var s = i[0],\n            c = new Set();\n          c.add(s);\n          var h = new U(function (t, n) {\n            return e ? t.weight - n.weight : 0;\n          });\n          for (\n            u(s.id, a).forEach(function (t) {\n              h.insert(t);\n            });\n            !h.isEmpty();\n\n          ) {\n            var l = h.delMin(),\n              f = l.source,\n              d = l.target;\n            (c.has(f) && c.has(d)) ||\n              (n.push(l),\n              c.has(f) ||\n                (c.add(f),\n                u(f, a).forEach(function (t) {\n                  h.insert(t);\n                })),\n              c.has(d) ||\n                (c.add(d),\n                u(d, a).forEach(function (t) {\n                  h.insert(t);\n                })));\n          }\n          return n;\n        },\n        K = function (t, e) {\n          var n = [],\n            r = t.nodes,\n            i = void 0 === r ? [] : r,\n            o = t.edges,\n            a = void 0 === o ? [] : o;\n          if (0 === i.length) return n;\n          var s = a.map(function (t) {\n            return t;\n          });\n          e &&\n            s.sort(function (t, e) {\n              return t.weight - e.weight;\n            });\n          for (\n            var c = new G(\n              i.map(function (t) {\n                return t.id;\n              }),\n            );\n            s.length > 0;\n\n          ) {\n            var u = s.shift(),\n              h = u.source,\n              l = u.target;\n            c.connected(h, l) || (n.push(u), c.union(h, l));\n          }\n          return n;\n        },\n        $ = function (t, e, n) {\n          return n ? { prim: Z, kruskal: K }[n](t, e) : K(t, e);\n        },\n        Q = function (t, e, n) {\n          \"number\" != typeof e && (e = 1e-6),\n            \"number\" != typeof n && (n = 0.85);\n          for (\n            var r,\n              i = 1,\n              o = 0,\n              a = 1e3,\n              s = t.nodes,\n              u = void 0 === s ? [] : s,\n              h = t.edges,\n              l = void 0 === h ? [] : h,\n              f = u.length,\n              d = {},\n              p = {},\n              v = 0;\n            v < f;\n            ++v\n          ) {\n            (d[(m = (O = u[v]).id)] = 1 / f), (p[m] = 1 / f);\n          }\n          for (var y = g(t); a > 0 && i > e; ) {\n            o = 0;\n            for (v = 0; v < f; ++v) {\n              var m = (O = u[v]).id;\n              if (((r = 0), 0 === y[O.id].inDegree)) d[m] = 0;\n              else {\n                for (var b = c(m, l, \"source\"), x = 0; x < b.length; ++x) {\n                  var S = b[x],\n                    w = y[S].outDegree;\n                  w > 0 && (r += p[S] / w);\n                }\n                (d[m] = n * r), (o += d[m]);\n              }\n            }\n            (o = (1 - o) / f), (i = 0);\n            for (v = 0; v < f; ++v) {\n              var O;\n              (r = d[(m = (O = u[v]).id)] + o),\n                (i += Math.abs(r - p[m])),\n                (p[m] = r);\n            }\n            a -= 1;\n          }\n          return p;\n        },\n        J = function (t, e, n, r) {\n          void 0 === t && (t = -1),\n            void 0 === e && (e = -1),\n            void 0 === n && (n = -1),\n            void 0 === r && (r = \"-1\"),\n            (this.id = t),\n            (this.from = e),\n            (this.to = n),\n            (this.label = r);\n        },\n        tt = (function () {\n          function t(t, e) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = \"-1\"),\n              (this.id = t),\n              (this.label = e),\n              (this.edges = []),\n              (this.edgeMap = {});\n          }\n          return (\n            (t.prototype.addEdge = function (t) {\n              this.edges.push(t), (this.edgeMap[t.id] = t);\n            }),\n            t\n          );\n        })(),\n        et = (function () {\n          function t(t, e, n) {\n            void 0 === t && (t = -1),\n              void 0 === e && (e = !0),\n              void 0 === n && (n = !1),\n              (this.id = t),\n              (this.edgeIdAutoIncrease = e),\n              (this.edges = []),\n              (this.nodes = []),\n              (this.nodeMap = {}),\n              (this.edgeMap = {}),\n              (this.nodeLabelMap = {}),\n              (this.edgeLabelMap = {}),\n              (this.counter = 0),\n              (this.directed = n);\n          }\n          return (\n            (t.prototype.getNodeNum = function () {\n              return this.nodes.length;\n            }),\n            (t.prototype.addNode = function (t, e) {\n              if (!this.nodeMap[t]) {\n                var n = new tt(t, e);\n                this.nodes.push(n),\n                  (this.nodeMap[t] = n),\n                  this.nodeLabelMap[e] || (this.nodeLabelMap[e] = []),\n                  this.nodeLabelMap[e].push(t);\n              }\n            }),\n            (t.prototype.addEdge = function (t, e, n, r) {\n              if (\n                ((this.edgeIdAutoIncrease || void 0 === t) &&\n                  (t = this.counter++),\n                !(\n                  this.nodeMap[e] &&\n                  this.nodeMap[n] &&\n                  this.nodeMap[n].edgeMap[t]\n                ))\n              ) {\n                var i = new J(t, e, n, r);\n                if (\n                  (this.edges.push(i),\n                  (this.edgeMap[t] = i),\n                  this.nodeMap[e].addEdge(i),\n                  this.edgeLabelMap[r] || (this.edgeLabelMap[r] = []),\n                  this.edgeLabelMap[r].push(i),\n                  !this.directed)\n                ) {\n                  var o = new J(t, n, e, r);\n                  this.nodeMap[n].addEdge(o), this.edgeLabelMap[r].push(o);\n                }\n              }\n            }),\n            t\n          );\n        })(),\n        nt = (function () {\n          function t(t, e, n, r, i) {\n            (this.fromNode = t),\n              (this.toNode = e),\n              (this.nodeEdgeNodeLabel = {\n                nodeLabel1: n || \"-1\",\n                edgeLabel: r || \"-1\",\n                nodeLabel2: i || \"-1\",\n              });\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              return (\n                this.fromNode === t.formNode &&\n                this.toNode === t.toNode &&\n                this.nodeEdgeNodeLabel === t.nodeEdgeNodeLabel\n              );\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            t\n          );\n        })(),\n        rt = (function () {\n          function t() {\n            (this.rmpath = []), (this.dfsEdgeList = []);\n          }\n          return (\n            (t.prototype.equalTo = function (t) {\n              var e = this.dfsEdgeList.length;\n              if (e !== t.length) return !1;\n              for (var n = 0; n < e; n++)\n                if (this.dfsEdgeList[n] !== t[n]) return !1;\n              return !0;\n            }),\n            (t.prototype.notEqualTo = function (t) {\n              return !this.equalTo(t);\n            }),\n            (t.prototype.pushBack = function (t, e, n, r, i) {\n              return (\n                this.dfsEdgeList.push(new nt(t, e, n, r, i)), this.dfsEdgeList\n              );\n            }),\n            (t.prototype.toGraph = function (t, e) {\n              void 0 === t && (t = -1), void 0 === e && (e = !1);\n              var n = new et(t, !0, e);\n              return (\n                this.dfsEdgeList.forEach(function (t) {\n                  var e = t.fromNode,\n                    r = t.toNode,\n                    i = t.nodeEdgeNodeLabel,\n                    o = i.nodeLabel1,\n                    a = i.edgeLabel,\n                    s = i.nodeLabel2;\n                  \"-1\" !== o && n.addNode(e, o),\n                    \"-1\" !== s && n.addNode(r, s),\n                    \"-1\" !== o && s !== o && n.addEdge(void 0, e, r, a);\n                }),\n                n\n              );\n            }),\n            (t.prototype.buildRmpath = function () {\n              this.rmpath = [];\n              for (\n                var t = void 0, e = this.dfsEdgeList.length - 1;\n                e >= 0;\n                e--\n              ) {\n                var n = this.dfsEdgeList[e],\n                  r = n.fromNode,\n                  i = n.toNode;\n                r < i &&\n                  (void 0 === t || i === t) &&\n                  (this.rmpath.push(e), (t = r));\n              }\n              return this.rmpath;\n            }),\n            (t.prototype.getNodeNum = function () {\n              var t = {};\n              return (\n                this.dfsEdgeList.forEach(function (e) {\n                  t[e.fromNode] || (t[e.fromNode] = !0),\n                    t[e.toNode] || (t[e.toNode] = !0);\n                }),\n                Object.keys(t).length\n              );\n            }),\n            t\n          );\n        })(),\n        it = (function () {\n          function t(t) {\n            if (\n              ((this.his = {}),\n              (this.nodesUsed = {}),\n              (this.edgesUsed = {}),\n              (this.edges = []),\n              t)\n            ) {\n              for (; t; ) {\n                var e = t.edge;\n                this.edges.push(e),\n                  (this.nodesUsed[e.from] = 1),\n                  (this.nodesUsed[e.to] = 1),\n                  (this.edgesUsed[e.id] = 1),\n                  (t = t.preNode);\n              }\n              this.edges = this.edges.reverse();\n            }\n          }\n          return (\n            (t.prototype.hasNode = function (t) {\n              return 1 === this.nodesUsed[t.id];\n            }),\n            (t.prototype.hasEdge = function (t) {\n              return 1 === this.edgesUsed[t.id];\n            }),\n            t\n          );\n        })(),\n        ot = (function () {\n          function t(t) {\n            var e = t.graphs,\n              n = t.minSupport,\n              r = void 0 === n ? 2 : n,\n              i = t.minNodeNum,\n              o = void 0 === i ? 1 : i,\n              a = t.maxNodeNum,\n              s = void 0 === a ? 4 : a,\n              c = t.top,\n              u = void 0 === c ? 10 : c,\n              h = t.directed,\n              l = void 0 !== h && h,\n              f = t.verbose,\n              d = void 0 !== f && f;\n            (this.graphs = e),\n              (this.dfsCode = new rt()),\n              (this.support = 0),\n              (this.frequentSize1Subgraphs = []),\n              (this.frequentSubgraphs = []),\n              (this.minSupport = r),\n              (this.top = u),\n              (this.directed = l),\n              (this.counter = 0),\n              (this.maxNodeNum = s),\n              (this.minNodeNum = o),\n              (this.verbose = d),\n              this.maxNodeNum < this.minNodeNum &&\n                (this.maxNodeNum = this.minNodeNum),\n              (this.reportDF = []);\n          }\n          return (\n            (t.prototype.findForwardRootEdges = function (t, e) {\n              var n = this,\n                r = [],\n                i = t.nodeMap;\n              return (\n                e.edges.forEach(function (t) {\n                  (n.directed || e.label <= i[t.to].label) && r.push(t);\n                }),\n                r\n              );\n            }),\n            (t.prototype.findBackwardEdge = function (t, e, n, r) {\n              if (!this.directed && e === n) return null;\n              for (\n                var i = t.nodeMap, o = i[n.to].edges, a = o.length, s = 0;\n                s < a;\n                s++\n              ) {\n                var c = o[s];\n                if (!r.hasEdge(c) && c.to === e.from)\n                  if (this.directed) {\n                    if (\n                      i[e.from].label < i[n.to].label ||\n                      (i[e.from].label === i[n.to].label && e.label <= c.label)\n                    )\n                      return c;\n                  } else if (\n                    e.label < c.label ||\n                    (e.label === c.label && i[e.to].label <= i[n.to].label)\n                  )\n                    return c;\n              }\n              return null;\n            }),\n            (t.prototype.findForwardPureEdges = function (t, e, n, r) {\n              for (\n                var i = [],\n                  o = e.to,\n                  a = t.nodeMap[o].edges,\n                  s = a.length,\n                  c = 0;\n                c < s;\n                c++\n              ) {\n                var u = a[c],\n                  h = t.nodeMap[u.to];\n                n <= h.label && !r.hasNode(h) && i.push(u);\n              }\n              return i;\n            }),\n            (t.prototype.findForwardRmpathEdges = function (t, e, n, r) {\n              for (\n                var i = [],\n                  o = t.nodeMap,\n                  a = o[e.to].label,\n                  s = o[e.from].edges,\n                  c = s.length,\n                  u = 0;\n                u < c;\n                u++\n              ) {\n                var h = s[u],\n                  l = o[h.to].label;\n                e.to === h.to ||\n                  n > l ||\n                  r.hasNode(o[h.to]) ||\n                  ((e.label < h.label || (e.label === h.label && a <= l)) &&\n                    i.push(h));\n              }\n              return i;\n            }),\n            (t.prototype.getSupport = function (t) {\n              var e = {};\n              return (\n                t.forEach(function (t) {\n                  e[t.graphId] || (e[t.graphId] = !0);\n                }),\n                Object.keys(e).length\n              );\n            }),\n            (t.prototype.findMinLabel = function (t) {\n              var e = void 0;\n              return (\n                Object.keys(t).forEach(function (n) {\n                  var r = t[n],\n                    i = r.nodeLabel1,\n                    o = r.edgeLabel,\n                    a = r.nodeLabel2;\n                  e\n                    ? (i < e.nodeLabel1 ||\n                        (i === e.nodeLabel1 && o < e.edgeLabel) ||\n                        (i === e.nodeLabel1 &&\n                          o === e.edgeLabel &&\n                          a < e.nodeLabel2)) &&\n                      (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a })\n                    : (e = { nodeLabel1: i, edgeLabel: o, nodeLabel2: a });\n                }),\n                e\n              );\n            }),\n            (t.prototype.isMin = function () {\n              var t = this,\n                e = this.dfsCode;\n              if (\n                (this.verbose && console.log(\"isMin checking\", e),\n                1 === e.dfsEdgeList.length)\n              )\n                return !0;\n              var n = this.directed,\n                r = e.toGraph(-1, n),\n                i = r.nodeMap,\n                o = new rt(),\n                a = {};\n              r.nodes.forEach(function (e) {\n                t.findForwardRootEdges(r, e).forEach(function (t) {\n                  var n = i[t.to],\n                    o = \"\"\n                      .concat(e.label, \"-\")\n                      .concat(t.label, \"-\")\n                      .concat(n.label);\n                  a[o] ||\n                    (a[o] = {\n                      projected: [],\n                      nodeLabel1: e.label,\n                      edgeLabel: t.label,\n                      nodeLabel2: n.label,\n                    });\n                  var s = { graphId: r.id, edge: t, preNode: null };\n                  a[o].projected.push(s);\n                });\n              });\n              var s = this.findMinLabel(a);\n              if (s) {\n                o.dfsEdgeList.push(\n                  new nt(0, 1, s.nodeLabel1, s.edgeLabel, s.nodeLabel2),\n                );\n                var c = \"\"\n                  .concat(s.nodeLabel1, \"-\")\n                  .concat(s.edgeLabel, \"-\")\n                  .concat(s.nodeLabel2);\n                return (function a(s) {\n                  for (\n                    var c = o.buildRmpath(),\n                      u = o.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                      h = o.dfsEdgeList[c[0]].toNode,\n                      l = {},\n                      f = !1,\n                      d = 0,\n                      p = n ? -1 : 0,\n                      g = function (e) {\n                        if (f) return \"break\";\n                        s.forEach(function (n) {\n                          var i = new it(n),\n                            a = t.findBackwardEdge(\n                              r,\n                              i.edges[c[e]],\n                              i.edges[c[0]],\n                              i,\n                            );\n                          a &&\n                            (l[a.label] ||\n                              (l[a.label] = {\n                                projected: [],\n                                edgeLabel: a.label,\n                              }),\n                            l[a.label].projected.push({\n                              graphId: r.id,\n                              edge: l,\n                              preNode: n,\n                            }),\n                            (d = o.dfsEdgeList[c[e]].fromNode),\n                            (f = !0));\n                        });\n                      },\n                      v = c.length - 1;\n                    v > p;\n                    v--\n                  ) {\n                    if (\"break\" === g(v)) break;\n                  }\n                  if (f) {\n                    var y = t.findMinLabel(l);\n                    o.dfsEdgeList.push(new nt(h, d, \"-1\", y.edgeLabel, \"-1\"));\n                    var m = o.dfsEdgeList.length - 1;\n                    return (\n                      t.dfsCode.dfsEdgeList[m] === o.dfsEdgeList[m] &&\n                      a(l[y.edgeLabel].projected)\n                    );\n                  }\n                  var b = {};\n                  f = !1;\n                  var x = 0;\n                  s.forEach(function (e) {\n                    var n = new it(e),\n                      o = t.findForwardPureEdges(r, n.edges[c[0]], u, n);\n                    o.length > 0 &&\n                      ((f = !0),\n                      (x = h),\n                      o.forEach(function (t) {\n                        var n = \"\".concat(t.label, \"-\").concat(i[t.to].label);\n                        b[n] ||\n                          (b[n] = {\n                            projected: [],\n                            edgeLabel: t.label,\n                            nodeLabel2: i[t.to].label,\n                          }),\n                          b[n].projected.push({\n                            graphId: r.id,\n                            edge: t,\n                            preNode: e,\n                          });\n                      }));\n                  });\n                  var S = c.length,\n                    w = function (e) {\n                      if (f) return \"break\";\n                      var n = c[e];\n                      s.forEach(function (e) {\n                        var a = new it(e),\n                          s = t.findForwardRmpathEdges(r, a.edges[n], u, a);\n                        s.length > 0 &&\n                          ((f = !0),\n                          (x = o.dfsEdgeList[n].fromNode),\n                          s.forEach(function (t) {\n                            var n = \"\"\n                              .concat(t.label, \"-\")\n                              .concat(i[t.to].label);\n                            b[n] ||\n                              (b[n] = {\n                                projected: [],\n                                edgeLabel: t.label,\n                                nodeLabel2: i[t.to].label,\n                              }),\n                              b[n].projected.push({\n                                graphId: r.id,\n                                edge: t,\n                                preNode: e,\n                              });\n                          }));\n                      });\n                    };\n                  for (v = 0; v < S; v++) {\n                    if (\"break\" === w(v)) break;\n                  }\n                  if (!f) return !0;\n                  var O = t.findMinLabel(b);\n                  o.dfsEdgeList.push(\n                    new nt(x, h + 1, \"-1\", O.edgeLabel, O.nodeLabel2),\n                  );\n                  var M = o.dfsEdgeList.length - 1;\n                  return (\n                    e.dfsEdgeList[M] === o.dfsEdgeList[M] &&\n                    a(\n                      b[\"\".concat(O.edgeLabel, \"-\").concat(O.nodeLabel2)]\n                        .projected,\n                    )\n                  );\n                })(a[c].projected);\n              }\n            }),\n            (t.prototype.report = function () {\n              if (!(this.dfsCode.getNodeNum() < this.minNodeNum)) {\n                this.counter++;\n                var t = this.dfsCode.toGraph(this.counter, this.directed);\n                this.frequentSubgraphs.push(Object(M.clone)(t));\n              }\n            }),\n            (t.prototype.subGraphMining = function (t) {\n              var e = this;\n              if (!(this.getSupport(t) < this.minSupport) && this.isMin()) {\n                this.report();\n                var n = this.dfsCode.getNodeNum(),\n                  r = this.dfsCode.buildRmpath(),\n                  i = this.dfsCode.dfsEdgeList[r[0]].toNode,\n                  o = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1,\n                  a = {},\n                  s = {};\n                t.forEach(function (t) {\n                  for (\n                    var c = e.graphs[t.graphId],\n                      u = c.nodeMap,\n                      h = new it(t),\n                      l = r.length - 1;\n                    l >= 0;\n                    l--\n                  ) {\n                    var f = e.findBackwardEdge(\n                      c,\n                      h.edges[r[l]],\n                      h.edges[r[0]],\n                      h,\n                    );\n                    if (f) {\n                      var d = \"\"\n                        .concat(e.dfsCode.dfsEdgeList[r[l]].fromNode, \"-\")\n                        .concat(f.label);\n                      s[d] ||\n                        (s[d] = {\n                          projected: [],\n                          toNodeId: e.dfsCode.dfsEdgeList[r[l]].fromNode,\n                          edgeLabel: f.label,\n                        }),\n                        s[d].projected.push({\n                          graphId: t.graphId,\n                          edge: f,\n                          preNode: t,\n                        });\n                    }\n                  }\n                  if (!(n >= e.maxNodeNum)) {\n                    e.findForwardPureEdges(c, h.edges[r[0]], o, h).forEach(\n                      function (e) {\n                        var n = \"\"\n                          .concat(i, \"-\")\n                          .concat(e.label, \"-\")\n                          .concat(u[e.to].label);\n                        a[n] ||\n                          (a[n] = {\n                            projected: [],\n                            fromNodeId: i,\n                            edgeLabel: e.label,\n                            nodeLabel2: u[e.to].label,\n                          }),\n                          a[n].projected.push({\n                            graphId: t.graphId,\n                            edge: e,\n                            preNode: t,\n                          });\n                      },\n                    );\n                    var p = function (n) {\n                      e.findForwardRmpathEdges(c, h.edges[r[n]], o, h).forEach(\n                        function (i) {\n                          var o = \"\"\n                            .concat(e.dfsCode.dfsEdgeList[r[n]].fromNode, \"-\")\n                            .concat(i.label, \"-\")\n                            .concat(u[i.to].label);\n                          a[o] ||\n                            (a[o] = {\n                              projected: [],\n                              fromNodeId: e.dfsCode.dfsEdgeList[r[n]].fromNode,\n                              edgeLabel: i.label,\n                              nodeLabel2: u[i.to].label,\n                            }),\n                            a[o].projected.push({\n                              graphId: t.graphId,\n                              edge: i,\n                              preNode: t,\n                            });\n                        },\n                      );\n                    };\n                    for (l = 0; l < r.length; l++) p(l);\n                  }\n                }),\n                  Object.keys(s).forEach(function (t) {\n                    var n = s[t],\n                      r = n.toNodeId,\n                      o = n.edgeLabel;\n                    e.dfsCode.dfsEdgeList.push(new nt(i, r, \"-1\", o, \"-1\")),\n                      e.subGraphMining(s[t].projected),\n                      e.dfsCode.dfsEdgeList.pop();\n                  }),\n                  Object.keys(a).forEach(function (t) {\n                    var n = a[t],\n                      r = n.fromNodeId,\n                      o = n.edgeLabel,\n                      s = n.nodeLabel2;\n                    e.dfsCode.dfsEdgeList.push(new nt(r, i + 1, \"-1\", o, s)),\n                      e.subGraphMining(a[t].projected),\n                      e.dfsCode.dfsEdgeList.pop();\n                  });\n              }\n            }),\n            (t.prototype.generate1EdgeFrequentSubGraphs = function () {\n              var t = this.graphs,\n                e = this.directed,\n                n = this.minSupport,\n                r = this.frequentSize1Subgraphs,\n                i = {},\n                o = {},\n                a = {},\n                s = {};\n              return (\n                Object.keys(t).forEach(function (n) {\n                  var r = t[n],\n                    c = r.nodeMap;\n                  r.nodes.forEach(function (t, r) {\n                    var u = t.label,\n                      h = \"\".concat(n, \"-\").concat(u);\n                    if (!a[h]) {\n                      var l = i[u] || 0;\n                      l++, (i[u] = l);\n                    }\n                    (a[h] = { graphKey: n, label: u }),\n                      t.edges.forEach(function (t) {\n                        var r = u,\n                          i = c[t.to].label;\n                        if (!e && r > i) {\n                          var a = i;\n                          (i = r), (r = a);\n                        }\n                        var h = t.label,\n                          l = \"\"\n                            .concat(n, \"-\")\n                            .concat(r, \"-\")\n                            .concat(h, \"-\")\n                            .concat(i),\n                          f = \"\".concat(r, \"-\").concat(h, \"-\").concat(i);\n                        if (!o[f]) {\n                          var d = o[f] || 0;\n                          d++, (o[f] = d);\n                        }\n                        s[l] = {\n                          graphId: n,\n                          nodeLabel1: r,\n                          edgeLabel: h,\n                          nodeLabel2: i,\n                        };\n                      });\n                  });\n                }),\n                Object.keys(i).forEach(function (t) {\n                  if (!(i[t] < n)) {\n                    var e = { nodes: [], edges: [] };\n                    e.nodes.push({ id: \"0\", label: t }), r.push(e);\n                  }\n                }),\n                r\n              );\n            }),\n            (t.prototype.run = function () {\n              var t = this;\n              if (\n                ((this.frequentSize1Subgraphs =\n                  this.generate1EdgeFrequentSubGraphs()),\n                !(this.maxNodeNum < 2))\n              ) {\n                var e = this.graphs,\n                  n = (this.directed, {});\n                Object.keys(e).forEach(function (r) {\n                  var i = e[r],\n                    o = i.nodeMap;\n                  i.nodes.forEach(function (e) {\n                    t.findForwardRootEdges(i, e).forEach(function (t) {\n                      var i = o[t.to],\n                        a = \"\"\n                          .concat(e.label, \"-\")\n                          .concat(t.label, \"-\")\n                          .concat(i.label);\n                      n[a] ||\n                        (n[a] = {\n                          projected: [],\n                          nodeLabel1: e.label,\n                          edgeLabel: t.label,\n                          nodeLabel2: i.label,\n                        });\n                      var s = { graphId: r, edge: t, preNode: null };\n                      n[a].projected.push(s);\n                    });\n                  });\n                }),\n                  Object.keys(n).forEach(function (e) {\n                    var r = n[e],\n                      i = r.projected,\n                      o = r.nodeLabel1,\n                      a = r.edgeLabel,\n                      s = r.nodeLabel2;\n                    t.dfsCode.dfsEdgeList.push(new nt(0, 1, o, a, s)),\n                      t.subGraphMining(i),\n                      t.dfsCode.dfsEdgeList.pop();\n                  });\n              }\n            }),\n            t\n          );\n        })(),\n        at = function (t) {\n          var e = t.graphs,\n            n = t.directed,\n            r = void 0 !== n && n,\n            i = t.nodeLabelProp,\n            o = void 0 === i ? \"cluster\" : i,\n            a = t.edgeLabelProp,\n            s = void 0 === a ? \"cluster\" : a,\n            c = (function (t, e, n, r) {\n              var i = {};\n              return (\n                Object.keys(t).forEach(function (o, a) {\n                  var s = t[o],\n                    c = new et(a, !0, e),\n                    u = {};\n                  s.nodes.forEach(function (t, e) {\n                    c.addNode(e, t[n]), (u[t.id] = e);\n                  }),\n                    s.edges.forEach(function (t, e) {\n                      var n = u[t.source],\n                        i = u[t.target];\n                      c.addEdge(-1, n, i, t[r]);\n                    }),\n                    c && c.getNodeNum() && (i[c.id] = c);\n                }),\n                i\n              );\n            })(e, r, o, s),\n            u = t.minSupport,\n            h = t.maxNodeNum,\n            l = t.minNodeNum,\n            f = t.verbose,\n            d = t.top,\n            p = new ot({\n              graphs: c,\n              minSupport: u,\n              maxNodeNum: h,\n              minNodeNum: l,\n              top: d,\n              verbose: f,\n              directed: r,\n            });\n          return (\n            p.run(),\n            (function (t, e, n) {\n              var r = [];\n              return (\n                t.forEach(function (t) {\n                  var i = { nodes: [], edges: [] };\n                  t.nodes.forEach(function (t) {\n                    var n;\n                    i.nodes.push(\n                      (((n = { id: \"\".concat(t.id) })[e] = t.label), n),\n                    );\n                  }),\n                    t.edges.forEach(function (t) {\n                      var e;\n                      i.edges.push(\n                        (((e = {\n                          source: \"\".concat(t.from),\n                          target: \"\".concat(t.to),\n                        })[n] = t.label),\n                        e),\n                      );\n                    }),\n                    r.push(i);\n                }),\n                r\n              );\n            })(p.frequentSubgraphs, o, s)\n          );\n        },\n        st = function (t, e, n, r) {\n          void 0 === n && (n = \"cluster\"), void 0 === r && (r = 2);\n          var i = [],\n            o = t.nodes;\n          return (\n            e.forEach(function (t, e) {\n              i.push(ct(o, t, e, n, r));\n            }),\n            i\n          );\n        },\n        ct = function (t, e, n, r, i) {\n          var o = [n],\n            a = [],\n            s = {};\n          return (\n            e.forEach(function (e, c) {\n              if (e <= i && n !== c) {\n                o.push(c), a.push(t[c]);\n                var u = t[c][r];\n                s[u]\n                  ? (s[u].count++, s[u].dists.push(e))\n                  : (s[u] = { count: 1, dists: [e] });\n              }\n            }),\n            Object.keys(s).forEach(function (t) {\n              s[t].dists = s[t].dists.sort(function (t, e) {\n                return t - e;\n              });\n            }),\n            {\n              nodeIdx: n,\n              nodeId: t[n].id,\n              nodeIdxs: o,\n              neighbors: a,\n              neighborNum: o.length - 1,\n              nodeLabelCountMap: s,\n            }\n          );\n        },\n        ut = function (t, e, n, r) {\n          var i = n.nodes;\n          return (\n            r || (r = {}),\n            Object.keys(t).forEach(function (o) {\n              var a, s;\n              if (!r || !r[o]) {\n                r[o] = { nodes: [], edges: [] };\n                var c = t[o],\n                  u =\n                    null === (a = e[c.start]) || void 0 === a\n                      ? void 0\n                      : a.nodeIdxs,\n                  h =\n                    null === (s = e[c.end]) || void 0 === s\n                      ? void 0\n                      : s.nodeIdxs;\n                if (u && h) {\n                  var l = new Set(h),\n                    f = u.filter(function (t) {\n                      return l.has(t);\n                    });\n                  if (f && f.length) {\n                    for (var d = {}, p = f.length, g = 0; g < p; g++) {\n                      var v = i[f[g]];\n                      r[o].nodes.push(v), (d[v.id] = !0);\n                    }\n                    n.edges.forEach(function (t) {\n                      d[t.source] && d[t.target] && r[o].edges.push(t);\n                    });\n                  }\n                }\n              }\n            }),\n            r\n          );\n        },\n        ht = function (t, e, n, r) {\n          var i,\n            o,\n            a = {};\n          t.nodes.forEach(function (t) {\n            a[t.id] = t;\n          });\n          var s = 0;\n          return !(null === (i = null == e ? void 0 : e.edges) || void 0 === i\n            ? void 0\n            : i.length) ||\n            (null === (o = null == e ? void 0 : e.nodes) || void 0 === o\n              ? void 0\n              : o.length) < 2\n            ? 0\n            : (t.edges.forEach(function (t) {\n                var i = a[t.source][n],\n                  o = a[t.target][n],\n                  c = null == e ? void 0 : e.nodes[0][n],\n                  u = null == e ? void 0 : e.nodes[1][n],\n                  h = null == e ? void 0 : e.edges[0][r];\n                t[r] === h &&\n                  ((i === c && o === u) || (i === u && o === c)) &&\n                  s++;\n              }),\n              s);\n        },\n        lt = function (t, e) {\n          var n = {},\n            r = {};\n          return (\n            t.forEach(function (t, i) {\n              n[t.id] = {\n                idx: i,\n                node: t,\n                degree: 0,\n                inDegree: 0,\n                outDegree: 0,\n              };\n              var o = t[e];\n              r[o] || (r[o] = []), r[o].push(t);\n            }),\n            { nodeMap: n, nodeLabelMap: r }\n          );\n        },\n        ft = function (t, e, n) {\n          var r = {},\n            i = {};\n          return (\n            t.forEach(function (t, o) {\n              r[\"\".concat(h)] = { idx: o, edge: t };\n              var a = t[e];\n              i[a] || (i[a] = []), i[a].push(t);\n              var s = n[t.source];\n              s && (s.degree++, s.outDegree++);\n              var c = n[t.target];\n              c && (c.degree++, c.inDegree++);\n            }),\n            { edgeMap: r, edgeLabelMap: i }\n          );\n        },\n        dt = function (t, e, n) {\n          var r = e.length,\n            i = {};\n          return (\n            e.forEach(function (e, o) {\n              for (var a = n ? 0 : o + 1, s = t[o].id, c = a; c < r; c++)\n                if (o !== c) {\n                  var u = t[c].id,\n                    h = e[c];\n                  (i[\"\".concat(s, \"-\").concat(u)] = h),\n                    n || (i[\"\".concat(u, \"-\").concat(s)] = h);\n                }\n            }),\n            i\n          );\n        },\n        pt = function (t, e, n, r, i, o, a, s, c, u, h) {\n          var l,\n            f = \"\".concat(e.id, \"-\").concat(n.id);\n          if (u && u[f]) return u[f];\n          var d = h ? h[f] : void 0;\n          if (!d) {\n            var p =\n              (((l = {})[f] = {\n                start: r[e.id].idx,\n                end: r[n.id].idx,\n                distance: i,\n              }),\n              l);\n            d = (h = ut(p, o, t, h))[f];\n          }\n          return ht(d, a, s, c);\n        },\n        gt = function (t, e, n, r) {\n          var i,\n            o,\n            a,\n            s = null === (i = t[e]) || void 0 === i ? void 0 : i.degree,\n            c = null === (o = t[e]) || void 0 === o ? void 0 : o.inDegree,\n            u = null === (a = t[e]) || void 0 === a ? void 0 : a.outDegree;\n          return (\n            void 0 === t[e] &&\n              ((s = 1 / 0),\n              (c = 1 / 0),\n              (u = 1 / 0),\n              r[e].forEach(function (t) {\n                var e = n[t.id].degree;\n                s > e && (s = e);\n                var r = n[t.id].inDegree;\n                c > r && (c = r);\n                var i = n[t.id].outDegree;\n                u > i && (u = i);\n              }),\n              (t[e] = { degree: s, inDegree: c, outDegree: u })),\n            {\n              minPatternNodeLabelDegree: s,\n              minPatternNodeLabelInDegree: c,\n              minPatternNodeLabelOutDegree: u,\n            }\n          );\n        },\n        vt = function (t, e, n, r, i, o, a) {\n          var s;\n          if (\n            (void 0 === n && (n = !1),\n            void 0 === o && (o = \"cluster\"),\n            void 0 === a && (a = \"cluster\"),\n            t && t.nodes)\n          ) {\n            var c = t.nodes.length;\n            if (c) {\n              var u = A(t, n),\n                h = A(e, n),\n                l = dt(t.nodes, u, n),\n                f = dt(e.nodes, h, n),\n                d = lt(t.nodes, o),\n                p = d.nodeMap,\n                g = d.nodeLabelMap,\n                v = lt(e.nodes, o),\n                y = v.nodeMap,\n                m = v.nodeLabelMap;\n              ft(t.edges, a, p);\n              var b = ft(e.edges, a, y).edgeLabelMap,\n                x = [];\n              null == h ||\n                h.forEach(function (t) {\n                  x = x.concat(t);\n                }),\n                i ||\n                  (i = Math.max.apply(\n                    Math,\n                    Object(O.f)(Object(O.f)([], x, !1), [2], !1),\n                  )),\n                r || (r = i);\n              var S = st(t, u, o, r),\n                w = st(e, h, o, r),\n                M = (function (t, e, n, r, i) {\n                  var o = Math.ceil(n / e),\n                    a = {},\n                    s = 0;\n                  return (\n                    r.forEach(function (t, r) {\n                      for (\n                        var c = 0, u = 0, h = t.nodeIdxs, l = t.neighborNum - 1;\n                        c < o;\n\n                      ) {\n                        for (\n                          var f = h[1 + Math.floor(Math.random() * l)], d = 0;\n                          (a[\"\".concat(r, \"-\").concat(f)] ||\n                            a[\"\".concat(f, \"-\").concat(r)]) &&\n                          ((f = Math.floor(Math.random() * e)), !(++d > 2 * e));\n\n                        );\n                        if (\n                          d < 2 * e &&\n                          ((a[\"\".concat(r, \"-\").concat(f)] = {\n                            start: r,\n                            end: f,\n                            distance: i[r][f],\n                          }),\n                          c++,\n                          ++s >= n)\n                        )\n                          return a;\n                        if (++u > 2 * e) break;\n                      }\n                      c < o && (o = (o + (o - c)) / (e - r - 1));\n                    }),\n                    a\n                  );\n                })(0, c, Math.min(100, (c * (c - 1)) / 2), S, u),\n                j = ut(M, S, t),\n                C = at({\n                  graphs: j,\n                  nodeLabelProp: o,\n                  edgeLabelProp: a,\n                  minSupport: 1,\n                  minNodeNum: 1,\n                  maxNodeNum: 4,\n                  directed: n,\n                }).slice(0, 10),\n                E = C.length,\n                P = [];\n              C.forEach(function (t, e) {\n                (P[e] = {}),\n                  Object.keys(j).forEach(function (n) {\n                    var r = j[n],\n                      i = ht(r, t, o, a);\n                    P[e][n] = i;\n                  });\n              });\n              var I = (function (t, e, n) {\n                  for (\n                    var r = 1 / 0,\n                      i = 0,\n                      o = function (e) {\n                        var n = t[e],\n                          o = Object.keys(n).sort(function (t, e) {\n                            return n[t] - n[e];\n                          }),\n                          a = [];\n                        o.forEach(function (t, e) {\n                          a[e % 10] ||\n                            (a[e % 10] = {\n                              graphs: [],\n                              totalCount: 0,\n                              aveCount: 0,\n                            }),\n                            a[e % 10].graphs.push(t),\n                            (a[e % 10].totalCount += n[t]);\n                        });\n                        var s = 0,\n                          c = [];\n                        a.forEach(function (t) {\n                          var e = t.totalCount / t.graphs.length;\n                          (t.aveCount = e), c.push(e);\n                          var r = 0,\n                            i = t.length;\n                          t.graphs.forEach(function (e, i) {\n                            var o = n[e];\n                            t.graphs.forEach(function (t, e) {\n                              i !== e && (r += Math.abs(o - n[t]));\n                            });\n                          }),\n                            (s += r /= (i * (i - 1)) / 2);\n                        }),\n                          (s /= a.length);\n                        var u = 0;\n                        c.forEach(function (t, e) {\n                          c.forEach(function (n, r) {\n                            e !== r && (u += Math.abs(t - n));\n                          }),\n                            (u /= (c.length * (c.length - 1)) / 2);\n                        });\n                        var h = u - s;\n                        r < h && ((r = h), (i = e));\n                      },\n                      a = 0;\n                    a < e;\n                    a++\n                  )\n                    o(a);\n                  return { structure: n[i], structureCountMap: t[i] };\n                })(P, E, C),\n                T = I.structure,\n                N = I.structureCountMap,\n                B = e.nodes[0],\n                L = [],\n                D = null === (s = e.nodes[0]) || void 0 === s ? void 0 : s[o],\n                _ = -1 / 0;\n              e.nodes.forEach(function (t) {\n                var e = t[o],\n                  n = g[e];\n                (null == n ? void 0 : n.length) > _ &&\n                  ((_ = n.length), (L = n), (D = e), (B = t));\n              });\n              var R = {},\n                F = {},\n                Y = {},\n                X = {},\n                z = {},\n                W = {};\n              Object.keys(m).forEach(function (r, i) {\n                (z[r] = []), n && (W[r] = []);\n                var s = -1 / 0,\n                  c = m[r],\n                  u = {};\n                c.forEach(function (t) {\n                  var e = f[\"\".concat(B.id, \"-\").concat(t.id)];\n                  if (\n                    (e && z[r].push(e),\n                    s < e && (s = e),\n                    (u[\"\".concat(B.id, \"-\").concat(t.id)] = {\n                      start: 0,\n                      end: y[t.id].idx,\n                      distance: e,\n                    }),\n                    n)\n                  ) {\n                    var i = f[\"\".concat(t.id, \"-\").concat(B.id)];\n                    i && W[r].push(i);\n                  }\n                }),\n                  (z[r] = z[r].sort(function (t, e) {\n                    return t - e;\n                  })),\n                  n &&\n                    (W[r] = W[r].sort(function (t, e) {\n                      return t - e;\n                    })),\n                  (F = ut(u, w, e, F));\n                var h = [];\n                if (\n                  (Object.keys(u).forEach(function (t) {\n                    if (Y[t]) h.push(Y[t]);\n                    else {\n                      var e = F[t];\n                      (Y[t] = ht(e, T, o, a)), h.push(Y[t]);\n                    }\n                  }),\n                  (h = h.sort(function (t, e) {\n                    return e - t;\n                  })),\n                  (X[\"\".concat(B.id, \"-\").concat(r)] = h),\n                  r !== D)\n                )\n                  for (\n                    var d = function (e) {\n                        var n = L[e],\n                          i = S[p[n.id].idx],\n                          s = i.nodeLabelCountMap[r],\n                          c = m[r].length;\n                        if (!s || s.count < c)\n                          return L.splice(e, 1), \"continue\";\n                        for (var u = !1, f = 0; f < c; f++)\n                          if (s.dists[f] > z[r][f]) {\n                            u = !0;\n                            break;\n                          }\n                        if (u) return L.splice(e, 1), \"continue\";\n                        var d = {};\n                        i.neighbors.forEach(function (t) {\n                          var e = l[\"\".concat(n.id, \"-\").concat(t.id)];\n                          d[\"\".concat(n.id, \"-\").concat(t.id)] = {\n                            start: p[n.id].idx,\n                            end: p[t.id].idx,\n                            distance: e,\n                          };\n                        }),\n                          (j = ut(d, S, t, j));\n                        var g = [];\n                        Object.keys(d).forEach(function (t) {\n                          if (N[t]) g.push(N[t]);\n                          else {\n                            var e = j[t];\n                            (N[t] = ht(e, T, o, a)), g.push(N[t]);\n                          }\n                        }),\n                          (g = g.sort(function (t, e) {\n                            return e - t;\n                          }));\n                        var v = !1;\n                        for (f = 0; f < c; f++)\n                          if (g[f] < h[f]) {\n                            v = !0;\n                            break;\n                          }\n                        return v ? (L.splice(e, 1), \"continue\") : void 0;\n                      },\n                      g = ((null == L ? void 0 : L.length) || 0) - 1;\n                    g >= 0;\n                    g--\n                  )\n                    d(g);\n              });\n              var q = [];\n              null == L ||\n                L.forEach(function (r) {\n                  for (\n                    var s = p[r.id].idx,\n                      c = ct(t.nodes, u[s], s, o, i).neighbors,\n                      h = !1,\n                      f = c.length - 1;\n                    f >= 0;\n                    f--\n                  ) {\n                    if (c.length + 1 < e.nodes.length) return void (h = !0);\n                    var d = c[f],\n                      g = d[o];\n                    if (m[g] && m[g].length)\n                      if (z[g] && z[g].length) {\n                        var v = \"\".concat(r.id, \"-\").concat(d.id),\n                          b = l[v],\n                          x = z[g].length - 1;\n                        if (b > z[g][x]) c.splice(f, 1);\n                        else {\n                          if (n) {\n                            var w = \"\".concat(d.id, \"-\").concat(r.id),\n                              O = l[w];\n                            if (((x = W[g].length - 1), O > W[g][x])) {\n                              c.splice(f, 1);\n                              continue;\n                            }\n                          }\n                          var M = N[v]\n                              ? N[v]\n                              : pt(t, r, d, p, b, S, T, o, a, N, j),\n                            k = \"\".concat(B.id, \"-\").concat(g);\n                          if (M < X[k][X[k].length - 1]) c.splice(f, 1);\n                          else {\n                            var C = gt(R, g, y, m),\n                              E = C.minPatternNodeLabelDegree;\n                            C.minPatternNodeLabelInDegree,\n                              C.minPatternNodeLabelOutDegree;\n                            p[d.id].degree < E && c.splice(f, 1);\n                          }\n                        }\n                      } else c.splice(f, 1);\n                    else c.splice(f, 1);\n                  }\n                  h || q.push({ nodes: [r].concat(c) });\n                });\n              var V = k(e, B.id, !1).length,\n                G = {};\n              n\n                ? (Object.keys(V).forEach(function (t) {\n                    var e = y[t].node[o];\n                    G[e] ? G[e].push(V[t]) : (G[e] = [V[t]]);\n                  }),\n                  Object.keys(G).forEach(function (t) {\n                    G[t].sort(function (t, e) {\n                      return t - e;\n                    });\n                  }))\n                : (G = z);\n              for (\n                var H = function (r) {\n                    var i = q[r],\n                      s = i.nodes[0],\n                      c = {},\n                      u = {};\n                    i.nodes.forEach(function (t, e) {\n                      u[t.id] = {\n                        idx: e,\n                        node: t,\n                        degree: 0,\n                        inDegree: 0,\n                        outDegree: 0,\n                      };\n                      var n = t[o];\n                      c[n] ? c[n]++ : (c[n] = 1);\n                    });\n                    var h = [],\n                      l = {};\n                    t.edges.forEach(function (t) {\n                      u[t.source] &&\n                        u[t.target] &&\n                        (h.push(t),\n                        l[t[a]] ? l[t[a]]++ : (l[t[a]] = 1),\n                        u[t.source].degree++,\n                        u[t.target].degree++,\n                        u[t.source].outDegree++,\n                        u[t.target].inDegree++);\n                    });\n                    for (\n                      var f = Object.keys(b).length, d = !1, g = 0;\n                      g < f;\n                      g++\n                    ) {\n                      var v = Object.keys(b)[g];\n                      if (!l[v] || l[v] < b[v].length) {\n                        d = !0;\n                        break;\n                      }\n                    }\n                    if (d) return q.splice(r, 1), \"continue\";\n                    var x = h.length;\n                    if (x < e.edges.length) return q.splice(r, 1), \"break\";\n                    var S = !1,\n                      w = function (t) {\n                        var e = h[t],\n                          r = e[a],\n                          i = b[r];\n                        if (!i || !i.length)\n                          return (\n                            l[r]--,\n                            i && l[r] < i.length\n                              ? ((S = !0), \"break\")\n                              : (h.splice(t, 1),\n                                u[e.source].degree--,\n                                u[e.target].degree--,\n                                u[e.source].outDegree--,\n                                u[e.target].inDegree--,\n                                \"continue\")\n                          );\n                        var s = u[e.source].node[o],\n                          c = u[e.target].node[o],\n                          f = !1;\n                        return (\n                          i.forEach(function (t) {\n                            var e = y[t.source].node,\n                              r = y[t.target].node;\n                            e[o] === s && r[o] === c && (f = !0),\n                              n || e[o] !== c || r[o] !== s || (f = !0);\n                          }),\n                          f\n                            ? void 0\n                            : (l[r]--,\n                              i && l[r] < i.length\n                                ? ((S = !0), \"break\")\n                                : (h.splice(t, 1),\n                                  u[e.source].degree--,\n                                  u[e.target].degree--,\n                                  u[e.source].outDegree--,\n                                  u[e.target].inDegree--,\n                                  \"continue\"))\n                        );\n                      };\n                    for (g = x - 1; g >= 0; g--) {\n                      if (\"break\" === w(g)) break;\n                    }\n                    if (S) return q.splice(r, 1), \"continue\";\n                    i.edges = h;\n                    var O = k(i, i.nodes[0].id, !1).length;\n                    if (\n                      (Object.keys(O)\n                        .reverse()\n                        .forEach(function (t) {\n                          if (t !== i.nodes[0].id && !S) {\n                            if (O[t] === 1 / 0) {\n                              var e = u[t].node[o];\n                              if ((c[e]--, c[e] < m[e].length))\n                                return void (S = !0);\n                              var n = i.nodes.indexOf(u[t].node);\n                              return i.nodes.splice(n, 1), void (u[t] = void 0);\n                            }\n                            var r = p[t].node[o];\n                            if (\n                              !G[r] ||\n                              !G[r].length ||\n                              O[t] > G[r][G[r].length - 1]\n                            ) {\n                              e = u[t].node[o];\n                              if ((c[e]--, c[e] < m[e].length))\n                                return void (S = !0);\n                              n = i.nodes.indexOf(u[t].node);\n                              i.nodes.splice(n, 1), (u[t] = void 0);\n                            }\n                          }\n                        }),\n                      S)\n                    )\n                      return q.splice(r, 1), \"continue\";\n                    for (var M = !0, j = 0; M && !S; ) {\n                      if (\n                        ((M = !1),\n                        n\n                          ? u[s.id].degree < y[B.id].degree ||\n                            u[s.id].inDegree < y[B.id].inDegree ||\n                            u[s.id].outDegree < y[B.id].outDegree\n                          : u[s.id].degree < y[B.id].degree)\n                      ) {\n                        S = !0;\n                        break;\n                      }\n                      if (c[s[o]] < m[s[o]].length) {\n                        S = !0;\n                        break;\n                      }\n                      for (var C = i.nodes.length - 1; C >= 0; C--) {\n                        var E = i.nodes[C],\n                          P = u[E.id].degree,\n                          A = u[E.id].inDegree,\n                          I = u[E.id].outDegree,\n                          T = E[o],\n                          N = gt(R, T, y, m),\n                          L = N.minPatternNodeLabelDegree,\n                          D = N.minPatternNodeLabelInDegree,\n                          _ = N.minPatternNodeLabelOutDegree;\n                        if (n ? P < L || A < D || I < _ : P < L) {\n                          if ((c[E[o]]--, c[E[o]] < m[E[o]].length)) {\n                            S = !0;\n                            break;\n                          }\n                          i.nodes.splice(C, 1), (u[E.id] = void 0), (M = !0);\n                        }\n                      }\n                      if (S || (!M && 0 !== j)) break;\n                      for (var F = (x = h.length) - 1; F >= 0; F--) {\n                        var Y = h[F];\n                        if (!u[Y.source] || !u[Y.target]) {\n                          h.splice(F, 1);\n                          var X = Y[a];\n                          if (\n                            (l[X]--,\n                            u[Y.source] &&\n                              (u[Y.source].degree--, u[Y.source].outDegree--),\n                            u[Y.target] &&\n                              (u[Y.target].degree--, u[Y.target].inDegree--),\n                            b[X] && l[X] < b[X].length)\n                          ) {\n                            S = !0;\n                            break;\n                          }\n                          M = !0;\n                        }\n                      }\n                      j++;\n                    }\n                    return S ||\n                      S ||\n                      i.nodes.length < e.nodes.length ||\n                      h.length < e.edges.length\n                      ? (q.splice(r, 1), \"continue\")\n                      : void 0;\n                  },\n                  U = q.length - 1;\n                U >= 0;\n                U--\n              ) {\n                if (\"break\" === H(U)) break;\n              }\n              var Z = q.length,\n                K = function (t) {\n                  var e = q[t],\n                    n = {};\n                  e.edges.forEach(function (t) {\n                    var e = \"\"\n                      .concat(t.source, \"-\")\n                      .concat(t.target, \"-\")\n                      .concat(t.label);\n                    n[e] ? n[e]++ : (n[e] = 1);\n                  });\n                  for (\n                    var r = function (t) {\n                        var e = q[t],\n                          r = {};\n                        e.edges.forEach(function (t) {\n                          var e = \"\"\n                            .concat(t.source, \"-\")\n                            .concat(t.target, \"-\")\n                            .concat(t.label);\n                          r[e] ? r[e]++ : (r[e] = 1);\n                        });\n                        var i = !0;\n                        Object.keys(r).length !== Object.keys(n).length\n                          ? (i = !1)\n                          : Object.keys(n).forEach(function (t) {\n                              r[t] !== n[t] && (i = !1);\n                            }),\n                          i && q.splice(t, 1);\n                      },\n                      i = Z - 1;\n                    i > t;\n                    i--\n                  )\n                    r(i);\n                  Z = q.length;\n                };\n              for (U = 0; U <= Z - 1; U++) K(U);\n              return q;\n            }\n          }\n        },\n        yt = (function () {\n          function t(t) {\n            void 0 === t && (t = 10),\n              (this.linkedList = new a()),\n              (this.maxStep = t);\n          }\n          return (\n            Object.defineProperty(t.prototype, \"length\", {\n              get: function () {\n                return this.linkedList.toArray().length;\n              },\n              enumerable: !1,\n              configurable: !0,\n            }),\n            (t.prototype.isEmpty = function () {\n              return !this.linkedList.head;\n            }),\n            (t.prototype.isMaxStack = function () {\n              return this.toArray().length >= this.maxStep;\n            }),\n            (t.prototype.peek = function () {\n              return this.isEmpty() ? null : this.linkedList.head.value;\n            }),\n            (t.prototype.push = function (t) {\n              this.linkedList.prepend(t),\n                this.length > this.maxStep && this.linkedList.deleteTail();\n            }),\n            (t.prototype.pop = function () {\n              var t = this.linkedList.deleteHead();\n              return t ? t.value : null;\n            }),\n            (t.prototype.toArray = function () {\n              return this.linkedList.toArray().map(function (t) {\n                return t.value;\n              });\n            }),\n            (t.prototype.clear = function () {\n              for (; !this.isEmpty(); ) this.pop();\n            }),\n            t\n          );\n        })(),\n        mt = w;\n      e.default = {\n        getAdjMatrix: r,\n        breadthFirstSearch: l,\n        connectedComponent: d,\n        getDegree: g,\n        getInDegree: v,\n        getOutDegree: y,\n        detectCycle: w,\n        detectDirectedCycle: mt,\n        detectAllCycles: S,\n        detectAllDirectedCycle: x,\n        detectAllUndirectedCycle: b,\n        depthFirstSearch: m,\n        dijkstra: k,\n        findAllPath: P,\n        findShortestPath: E,\n        floydWarshall: A,\n        labelPropagation: I,\n        louvain: F,\n        iLouvain: Y,\n        kCore: X,\n        kMeans: W,\n        cosineSimilarity: q,\n        nodesCosineSimilarity: V,\n        minimumSpanningTree: $,\n        pageRank: Q,\n        getNeighbors: c,\n        Stack: yt,\n        GADDI: vt,\n      };\n    },\n    38: function (t, e, n) {\n      self,\n        (t.exports = (function () {\n          \"use strict\";\n          var t = {\n              d: function (e, n) {\n                for (var r in n)\n                  t.o(n, r) &&\n                    !t.o(e, r) &&\n                    Object.defineProperty(e, r, { enumerable: !0, get: n[r] });\n              },\n              o: function (t, e) {\n                return Object.prototype.hasOwnProperty.call(t, e);\n              },\n              r: function (t) {\n                \"undefined\" != typeof Symbol &&\n                  Symbol.toStringTag &&\n                  Object.defineProperty(t, Symbol.toStringTag, {\n                    value: \"Module\",\n                  }),\n                  Object.defineProperty(t, \"__esModule\", { value: !0 });\n              },\n            },\n            e = {};\n          function n(t, e) {\n            return void 0 === t ? e : t;\n          }\n          t.r(e),\n            t.d(e, {\n              default: function () {\n                return me;\n              },\n            });\n          var r,\n            i = Math.round,\n            o = Math.abs,\n            a = Date.now,\n            s = \"compute\",\n            c = \"auto\",\n            u = \"manipulation\",\n            h = \"none\",\n            l = \"pan-x\",\n            f = \"pan-y\",\n            d =\n              ((r = {}),\n              [\n                \"auto\",\n                \"manipulation\",\n                \"pan-y\",\n                \"pan-x\",\n                \"pan-x pan-y\",\n                \"none\",\n              ].forEach(function (t) {\n                return (r[t] = !0);\n              }),\n              r),\n            p = \"touch\",\n            g = [\"x\", \"y\"],\n            v = [\"clientX\", \"clientY\"],\n            y = 32,\n            m =\n              \"function\" != typeof Object.assign\n                ? function (t) {\n                    if (null == t)\n                      throw new TypeError(\n                        \"Cannot convert undefined or null to object\",\n                      );\n                    for (var e = Object(t), n = 1; n < arguments.length; n++) {\n                      var r = arguments[n];\n                      if (null != r)\n                        for (var i in r) r.hasOwnProperty(i) && (e[i] = r[i]);\n                    }\n                    return e;\n                  }\n                : Object.assign,\n            b = 1;\n          function x(t, e, n) {\n            var r;\n            if (t)\n              if (t.forEach) t.forEach(e, n);\n              else if (void 0 !== t.length)\n                for (r = 0; r < t.length; ) e.call(n, t[r], r, t), r++;\n              else for (r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);\n          }\n          function S(t, e, n) {\n            return !!Array.isArray(t) && (x(t, n[e], n), !0);\n          }\n          function w(t, e, n) {\n            if (t.indexOf && !n) return t.indexOf(e);\n            for (var r = 0; r < t.length; ) {\n              if ((n && t[r][n] == e) || (!n && t[r] === e)) return r;\n              r++;\n            }\n            return -1;\n          }\n          function O(t) {\n            return (O =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function M(t, e) {\n            return \"function\" === O(t) ? t.apply((e && e[0]) || void 0, e) : t;\n          }\n          function k(t, e) {\n            var n = e.manager;\n            return n ? n.get(t) : t;\n          }\n          function j(t) {\n            return 16 & t\n              ? \"cancel\"\n              : 8 & t\n              ? \"end\"\n              : 4 & t\n              ? \"move\"\n              : 2 & t\n              ? \"start\"\n              : \"\";\n          }\n          function C(t) {\n            return (C =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          var E = (function () {\n            function t(e) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.options = m({}, this.defaults, e || {})),\n                (this.id = b++),\n                (this.manager = null),\n                (this.options.enable = n(this.options.enable, !0)),\n                (this.state = 1),\n                (this.simultaneous = {}),\n                (this.requireFail = []);\n            }\n            var e, r;\n            return (\n              (e = t),\n              (r = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    return (\n                      m(this.options, t),\n                      this.manager && this.manager.touchAction.update(),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"recognizeWith\",\n                  value: function (t) {\n                    if (S(t, \"recognizeWith\", this)) return this;\n                    var e = this.simultaneous;\n                    return (\n                      e[(t = k(t, this)).id] ||\n                        ((e[t.id] = t), t.recognizeWith(this)),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"dropRecognizeWith\",\n                  value: function (t) {\n                    return (\n                      S(t, \"dropRecognizeWith\", this) ||\n                        ((t = k(t, this)), delete this.simultaneous[t.id]),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"requireFailure\",\n                  value: function (t) {\n                    if (S(t, \"requireFailure\", this)) return this;\n                    var e = this.requireFail;\n                    return (\n                      -1 === w(e, (t = k(t, this))) &&\n                        (e.push(t), t.requireFailure(this)),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"dropRequireFailure\",\n                  value: function (t) {\n                    if (S(t, \"dropRequireFailure\", this)) return this;\n                    t = k(t, this);\n                    var e = w(this.requireFail, t);\n                    return e > -1 && this.requireFail.splice(e, 1), this;\n                  },\n                },\n                {\n                  key: \"hasRequireFailures\",\n                  value: function () {\n                    return this.requireFail.length > 0;\n                  },\n                },\n                {\n                  key: \"canRecognizeWith\",\n                  value: function (t) {\n                    return !!this.simultaneous[t.id];\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.state;\n                    function r(n) {\n                      e.manager.emit(n, t);\n                    }\n                    n < 8 && r(e.options.event + j(n)),\n                      r(e.options.event),\n                      t.additionalEvent && r(t.additionalEvent),\n                      n >= 8 && r(e.options.event + j(n));\n                  },\n                },\n                {\n                  key: \"tryEmit\",\n                  value: function (t) {\n                    if (this.canEmit()) return this.emit(t);\n                    this.state = y;\n                  },\n                },\n                {\n                  key: \"canEmit\",\n                  value: function () {\n                    for (var t = 0; t < this.requireFail.length; ) {\n                      if (!(33 & this.requireFail[t].state)) return !1;\n                      t++;\n                    }\n                    return !0;\n                  },\n                },\n                {\n                  key: \"recognize\",\n                  value: function (t) {\n                    var e = m({}, t);\n                    if (!M(this.options.enable, [this, e]))\n                      return this.reset(), void (this.state = y);\n                    56 & this.state && (this.state = 1),\n                      (this.state = this.process(e)),\n                      30 & this.state && this.tryEmit(e);\n                  },\n                },\n                { key: \"process\", value: function (t) {} },\n                { key: \"getTouchAction\", value: function () {} },\n                { key: \"reset\", value: function () {} },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== C(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== C(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === C(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, r),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function P(t) {\n            return (P =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function A(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function I(t, e) {\n            return (I = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function T(t, e) {\n            if (e && (\"object\" === P(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function N(t) {\n            return (N = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          E.prototype.defaults = {};\n          var B = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && I(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = N(r);\n                  if (i) {\n                    var n = N(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return T(this, t);\n                });\n            function a() {\n              return A(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    var e = this.options.pointers;\n                    return 0 === e || t.pointers.length === e;\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this.state,\n                      n = t.eventType,\n                      r = 6 & e,\n                      i = this.attrTest(t);\n                    return r && (8 & n || !i)\n                      ? 16 | e\n                      : r || i\n                      ? 4 & n\n                        ? 8 | e\n                        : 2 & e\n                        ? 4 | e\n                        : 2\n                      : y;\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== P(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== P(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === P(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(E);\n          function L(t) {\n            return (L =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function D(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function _() {\n            return (_ =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = R(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function R(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = X(t));\n\n            );\n            return t;\n          }\n          function F(t, e) {\n            return (F = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function Y(t, e) {\n            if (e && (\"object\" === L(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function X(t) {\n            return (X = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          B.prototype.defaults = { pointers: 1 };\n          var z = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && F(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = X(r);\n                  if (i) {\n                    var n = X(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return Y(this, t);\n                });\n            function a() {\n              return D(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [h];\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      _(X(a.prototype), \"attrTest\", this).call(this, t) &&\n                      (Math.abs(t.rotation) > this.options.threshold ||\n                        2 & this.state)\n                    );\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== L(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== L(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === L(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(B);\n          function W(t) {\n            return (W =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function q(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function V() {\n            return (V =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = G(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function G(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = Z(t));\n\n            );\n            return t;\n          }\n          function H(t, e) {\n            return (H = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function U(t, e) {\n            if (e && (\"object\" === W(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Z(t) {\n            return (Z = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          z.prototype.defaults = { event: \"rotate\", threshold: 0, pointers: 2 };\n          var K = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && H(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = Z(r);\n                  if (i) {\n                    var n = Z(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return U(this, t);\n                });\n            function a() {\n              return q(this, a), o.apply(this, arguments);\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [h];\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      V(Z(a.prototype), \"attrTest\", this).call(this, t) &&\n                      (Math.abs(t.scale - 1) > this.options.threshold ||\n                        2 & this.state)\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    if (1 !== t.scale) {\n                      var e = t.scale < 1 ? \"in\" : \"out\";\n                      t.additionalEvent = this.options.event + e;\n                    }\n                    V(Z(a.prototype), \"emit\", this).call(this, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== W(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== W(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === W(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(B);\n          function $(t) {\n            return 16 === t\n              ? \"down\"\n              : 8 === t\n              ? \"up\"\n              : 2 === t\n              ? \"left\"\n              : 4 === t\n              ? \"right\"\n              : \"\";\n          }\n          function Q(t) {\n            return (Q =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function J(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function tt() {\n            return (tt =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = et(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function et(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = it(t));\n\n            );\n            return t;\n          }\n          function nt(t, e) {\n            return (nt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function rt(t, e) {\n            if (e && (\"object\" === Q(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function it(t) {\n            return (it = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          K.prototype.defaults = { event: \"pinch\", threshold: 0, pointers: 2 };\n          var ot = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && nt(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = it(r);\n                  if (i) {\n                    var n = it(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return rt(this, t);\n                });\n            function a() {\n              var t;\n              return (\n                J(this, a),\n                ((t = o.apply(this, arguments)).pX = null),\n                (t.pY = null),\n                t\n              );\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    var t = this.options.direction,\n                      e = [];\n                    return 6 & t && e.push(f), 24 & t && e.push(l), e;\n                  },\n                },\n                {\n                  key: \"directionTest\",\n                  value: function (t) {\n                    var e = this.options,\n                      n = !0,\n                      r = t.distance,\n                      i = t.direction,\n                      o = t.deltaX,\n                      a = t.deltaY;\n                    return (\n                      i & e.direction ||\n                        (6 & e.direction\n                          ? ((i = 0 === o ? 1 : o < 0 ? 2 : 4),\n                            (n = o !== this.pX),\n                            (r = Math.abs(t.deltaX)))\n                          : ((i = 0 === a ? 1 : a < 0 ? 8 : 16),\n                            (n = a !== this.pY),\n                            (r = Math.abs(t.deltaY)))),\n                      (t.direction = i),\n                      n && r > e.threshold && i & e.direction\n                    );\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    return (\n                      B.prototype.attrTest.call(this, t) &&\n                      (2 & this.state ||\n                        (!(2 & this.state) && this.directionTest(t)))\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    (this.pX = t.deltaX), (this.pY = t.deltaY);\n                    var e = $(t.direction);\n                    e && (t.additionalEvent = this.options.event + e),\n                      tt(it(a.prototype), \"emit\", this).call(this, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Q(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Q(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Q(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(B);\n          function at(t) {\n            return (at =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function st(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function ct() {\n            return (ct =\n              \"undefined\" != typeof Reflect && Reflect.get\n                ? Reflect.get.bind()\n                : function (t, e, n) {\n                    var r = ut(t, e);\n                    if (r) {\n                      var i = Object.getOwnPropertyDescriptor(r, e);\n                      return i.get\n                        ? i.get.call(arguments.length < 3 ? t : n)\n                        : i.value;\n                    }\n                  }).apply(this, arguments);\n          }\n          function ut(t, e) {\n            for (\n              ;\n              !Object.prototype.hasOwnProperty.call(t, e) &&\n              null !== (t = ft(t));\n\n            );\n            return t;\n          }\n          function ht(t, e) {\n            return (ht = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function lt(t, e) {\n            if (e && (\"object\" === at(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function ft(t) {\n            return (ft = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          ot.prototype.defaults = {\n            event: \"pan\",\n            threshold: 10,\n            pointers: 1,\n            direction: 30,\n          };\n          var dt = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && ht(t, e);\n            })(s, t);\n            var e,\n              n,\n              r,\n              i,\n              a =\n                ((r = s),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = ft(r);\n                  if (i) {\n                    var n = ft(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return lt(this, t);\n                });\n            function s() {\n              return st(this, s), a.apply(this, arguments);\n            }\n            return (\n              (e = s),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return ot.prototype.getTouchAction.call(this);\n                  },\n                },\n                {\n                  key: \"attrTest\",\n                  value: function (t) {\n                    var e,\n                      n = this.options.direction;\n                    return (\n                      30 & n\n                        ? (e = t.overallVelocity)\n                        : 6 & n\n                        ? (e = t.overallVelocityX)\n                        : 24 & n && (e = t.overallVelocityY),\n                      ct(ft(s.prototype), \"attrTest\", this).call(this, t) &&\n                        n & t.offsetDirection &&\n                        t.distance > this.options.threshold &&\n                        t.maxPointers === this.options.pointers &&\n                        o(e) > this.options.velocity &&\n                        4 & t.eventType\n                    );\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    var e = $(t.offsetDirection);\n                    e && this.manager.emit(this.options.event + e, t),\n                      this.manager.emit(this.options.event, t);\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== at(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== at(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === at(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              s\n            );\n          })(B);\n          function pt(t, e) {\n            return function () {\n              return t.apply(e, arguments);\n            };\n          }\n          function gt(t, e, n) {\n            return setTimeout(pt(t, n), e);\n          }\n          function vt(t, e, n) {\n            n || (n = g);\n            var r = e[n[0]] - t[n[0]],\n              i = e[n[1]] - t[n[1]];\n            return Math.sqrt(r * r + i * i);\n          }\n          function yt(t) {\n            return (yt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function mt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function bt(t, e) {\n            return (bt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function xt(t, e) {\n            if (e && (\"object\" === yt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function St(t) {\n            return (St = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          dt.prototype.defaults = {\n            event: \"swipe\",\n            threshold: 10,\n            velocity: 0.3,\n            direction: 30,\n            pointers: 1,\n          };\n          var wt = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && bt(t, e);\n            })(a, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = a),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = St(r);\n                  if (i) {\n                    var n = St(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return xt(this, t);\n                });\n            function a() {\n              var t;\n              return (\n                mt(this, a),\n                ((t = o.apply(this, arguments)).pTime = !1),\n                (t.pCenter = !1),\n                (t._timer = null),\n                (t._input = null),\n                (t.count = 0),\n                t\n              );\n            }\n            return (\n              (e = a),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [u];\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.options,\n                      r = t.pointers.length === n.pointers,\n                      i = t.distance < n.threshold,\n                      o = t.deltaTime < n.time;\n                    if ((this.reset(), 1 & t.eventType && 0 === this.count))\n                      return this.failTimeout();\n                    if (i && o && r) {\n                      if (4 !== t.eventType) return this.failTimeout();\n                      var a =\n                          !this.pTime || t.timeStamp - this.pTime < n.interval,\n                        s =\n                          !this.pCenter ||\n                          vt(this.pCenter, t.center) < n.posThreshold;\n                      if (\n                        ((this.pTime = t.timeStamp),\n                        (this.pCenter = t.center),\n                        s && a ? (this.count += 1) : (this.count = 1),\n                        (this._input = t),\n                        0 == this.count % n.taps)\n                      )\n                        return this.hasRequireFailures()\n                          ? ((this._timer = gt(\n                              function () {\n                                (e.state = 8), e.tryEmit();\n                              },\n                              n.interval,\n                              this,\n                            )),\n                            2)\n                          : 8;\n                    }\n                    return y;\n                  },\n                },\n                {\n                  key: \"failTimeout\",\n                  value: function () {\n                    var t = this;\n                    return (\n                      (this._timer = gt(\n                        function () {\n                          t.state = y;\n                        },\n                        this.options.interval,\n                        this,\n                      )),\n                      y\n                    );\n                  },\n                },\n                {\n                  key: \"reset\",\n                  value: function () {\n                    clearTimeout(this._timer), (this._timer = null);\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function () {\n                    8 === this.state &&\n                      ((this._input.tapCount = this.count),\n                      this.manager.emit(this.options.event, this._input));\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== yt(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== yt(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === yt(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              a\n            );\n          })(E);\n          function Ot(t) {\n            return (Ot =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function Mt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function kt(t, e) {\n            return (kt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function jt(t, e) {\n            if (e && (\"object\" === Ot(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Ct(t) {\n            return (Ct = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          wt.prototype.defaults = {\n            event: \"tap\",\n            pointers: 1,\n            taps: 1,\n            interval: 300,\n            time: 250,\n            threshold: 9,\n            posThreshold: 10,\n          };\n          var Et = (function (t) {\n            !(function (t, e) {\n              if (\"function\" != typeof e && null !== e)\n                throw new TypeError(\n                  \"Super expression must either be null or a function\",\n                );\n              (t.prototype = Object.create(e && e.prototype, {\n                constructor: { value: t, writable: !0, configurable: !0 },\n              })),\n                Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                e && kt(t, e);\n            })(s, t);\n            var e,\n              n,\n              r,\n              i,\n              o =\n                ((r = s),\n                (i = (function () {\n                  if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                    return !1;\n                  if (Reflect.construct.sham) return !1;\n                  if (\"function\" == typeof Proxy) return !0;\n                  try {\n                    return (\n                      Boolean.prototype.valueOf.call(\n                        Reflect.construct(Boolean, [], function () {}),\n                      ),\n                      !0\n                    );\n                  } catch (t) {\n                    return !1;\n                  }\n                })()),\n                function () {\n                  var t,\n                    e = Ct(r);\n                  if (i) {\n                    var n = Ct(this).constructor;\n                    t = Reflect.construct(e, arguments, n);\n                  } else t = e.apply(this, arguments);\n                  return jt(this, t);\n                });\n            function s() {\n              var t;\n              return (\n                Mt(this, s),\n                ((t = o.apply(this, arguments))._timer = null),\n                (t._input = null),\n                t\n              );\n            }\n            return (\n              (e = s),\n              (n = [\n                {\n                  key: \"getTouchAction\",\n                  value: function () {\n                    return [c];\n                  },\n                },\n                {\n                  key: \"process\",\n                  value: function (t) {\n                    var e = this,\n                      n = this.options,\n                      r = t.pointers.length === n.pointers,\n                      i = t.distance < n.threshold,\n                      o = t.deltaTime > n.time;\n                    if (\n                      ((this._input = t), !i || !r || (12 & t.eventType && !o))\n                    )\n                      this.reset();\n                    else if (1 & t.eventType)\n                      this.reset(),\n                        (this._timer = gt(\n                          function () {\n                            (e.state = 8), e.tryEmit();\n                          },\n                          n.time,\n                          this,\n                        ));\n                    else if (4 & t.eventType) return 8;\n                    return y;\n                  },\n                },\n                {\n                  key: \"reset\",\n                  value: function () {\n                    clearTimeout(this._timer), (this._timer = null);\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t) {\n                    8 === this.state &&\n                      (t && 4 & t.eventType\n                        ? this.manager.emit(\n                            \"\".concat(this.options.event, \"up\"),\n                            t,\n                          )\n                        : ((this._input.timeStamp = a()),\n                          this.manager.emit(this.options.event, this._input)));\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Ot(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Ot(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Ot(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              s\n            );\n          })(E);\n          function Pt(t, e) {\n            return t.indexOf(e) > -1;\n          }\n          function At(t) {\n            return (At =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          Et.prototype.defaults = {\n            event: \"press\",\n            pointers: 1,\n            time: 251,\n            threshold: 9,\n          };\n          var It = (function () {\n            function t(e, n) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.manager = e),\n                this.set(n);\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    t === s && (t = this.compute()),\n                      (this.actions = t.toLowerCase().trim());\n                  },\n                },\n                {\n                  key: \"update\",\n                  value: function () {\n                    this.set(this.manager.options.touchAction);\n                  },\n                },\n                {\n                  key: \"compute\",\n                  value: function () {\n                    var t = [];\n                    return (\n                      x(this.manager.recognizers, function (e) {\n                        M(e.options.enable, [e]) &&\n                          (t = t.concat(e.getTouchAction()));\n                      }),\n                      (function (t) {\n                        if (Pt(t, h)) return h;\n                        var e = Pt(t, l),\n                          n = Pt(t, f);\n                        return e && n\n                          ? h\n                          : e || n\n                          ? e\n                            ? l\n                            : f\n                          : Pt(t, u)\n                          ? u\n                          : c;\n                      })(t.join(\" \"))\n                    );\n                  },\n                },\n                {\n                  key: \"preventDefaults\",\n                  value: function (t) {\n                    var e = t.srcEvent,\n                      n = t.offsetDirection;\n                    if (this.manager.session.prevented) e.preventDefault();\n                    else {\n                      var r = this.actions,\n                        i = Pt(r, h) && !d[h],\n                        o = Pt(r, f) && !d[f],\n                        a = Pt(r, l) && !d[l];\n                      if (i) {\n                        var s = 1 === t.pointers.length,\n                          c = t.distance < 2,\n                          u = t.deltaTime < 250;\n                        if (s && c && u) return;\n                      }\n                      if (!a || !o)\n                        return i || (o && 6 & n) || (a && 24 & n)\n                          ? this.preventSrc(e)\n                          : void 0;\n                    }\n                  },\n                },\n                {\n                  key: \"preventSrc\",\n                  value: function (t) {\n                    (this.manager.session.prevented = !0), t.preventDefault();\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== At(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== At(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === At(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function Tt(t) {\n            var e = t.length;\n            if (1 === e) return { x: i(t[0].clientX), y: i(t[0].clientY) };\n            for (var n = 0, r = 0, o = 0; o < e; )\n              (n += t[o].clientX), (r += t[o].clientY), o++;\n            return { x: i(n / e), y: i(r / e) };\n          }\n          function Nt(t) {\n            for (var e = [], n = 0; n < t.pointers.length; )\n              (e[n] = {\n                clientX: i(t.pointers[n].clientX),\n                clientY: i(t.pointers[n].clientY),\n              }),\n                n++;\n            return {\n              timeStamp: a(),\n              pointers: e,\n              center: Tt(e),\n              deltaX: t.deltaX,\n              deltaY: t.deltaY,\n            };\n          }\n          function Bt(t, e, n) {\n            n || (n = g);\n            var r = e[n[0]] - t[n[0]],\n              i = e[n[1]] - t[n[1]];\n            return (180 * Math.atan2(i, r)) / Math.PI;\n          }\n          function Lt(t, e) {\n            return t === e\n              ? 1\n              : o(t) >= o(e)\n              ? t < 0\n                ? 2\n                : 4\n              : e < 0\n              ? 8\n              : 16;\n          }\n          function Dt(t, e, n) {\n            return { x: e / t || 0, y: n / t || 0 };\n          }\n          function _t(t, e, n) {\n            var r = n.pointers.length,\n              i = n.changedPointers.length,\n              s = 1 & e && r - i == 0,\n              c = 12 & e && r - i == 0;\n            (n.isFirst = !!s),\n              (n.isFinal = !!c),\n              s && (t.session = {}),\n              (n.eventType = e),\n              (function (t, e) {\n                var n = t.session,\n                  r = e.pointers,\n                  i = r.length;\n                n.firstInput || (n.firstInput = Nt(e)),\n                  i > 1 && !n.firstMultiple\n                    ? (n.firstMultiple = Nt(e))\n                    : 1 === i && (n.firstMultiple = !1);\n                var s = n.firstInput,\n                  c = n.firstMultiple,\n                  u = c ? c.center : s.center,\n                  h = (e.center = Tt(r));\n                (e.timeStamp = a()),\n                  (e.deltaTime = e.timeStamp - s.timeStamp),\n                  (e.angle = Bt(u, h)),\n                  (e.distance = vt(u, h)),\n                  (function (t, e) {\n                    var n = e.center,\n                      r = t.offsetDelta || {},\n                      i = t.prevDelta || {},\n                      o = t.prevInput || {};\n                    (1 !== e.eventType && 4 !== o.eventType) ||\n                      ((i = t.prevDelta =\n                        { x: o.deltaX || 0, y: o.deltaY || 0 }),\n                      (r = t.offsetDelta = { x: n.x, y: n.y })),\n                      (e.deltaX = i.x + (n.x - r.x)),\n                      (e.deltaY = i.y + (n.y - r.y));\n                  })(n, e),\n                  (e.offsetDirection = Lt(e.deltaX, e.deltaY));\n                var l,\n                  f,\n                  d = Dt(e.deltaTime, e.deltaX, e.deltaY);\n                (e.overallVelocityX = d.x),\n                  (e.overallVelocityY = d.y),\n                  (e.overallVelocity = o(d.x) > o(d.y) ? d.x : d.y),\n                  (e.scale = c\n                    ? ((l = c.pointers),\n                      vt((f = r)[0], f[1], v) / vt(l[0], l[1], v))\n                    : 1),\n                  (e.rotation = c\n                    ? (function (t, e) {\n                        return Bt(e[1], e[0], v) + Bt(t[1], t[0], v);\n                      })(c.pointers, r)\n                    : 0),\n                  (e.maxPointers = n.prevInput\n                    ? e.pointers.length > n.prevInput.maxPointers\n                      ? e.pointers.length\n                      : n.prevInput.maxPointers\n                    : e.pointers.length),\n                  (function (t, e) {\n                    var n,\n                      r,\n                      i,\n                      a,\n                      s = t.lastInterval || e,\n                      c = e.timeStamp - s.timeStamp;\n                    if (\n                      8 !== e.eventType &&\n                      (c > 25 || void 0 === s.velocity)\n                    ) {\n                      var u = e.deltaX - s.deltaX,\n                        h = e.deltaY - s.deltaY,\n                        l = Dt(c, u, h);\n                      (r = l.x),\n                        (i = l.y),\n                        (n = o(l.x) > o(l.y) ? l.x : l.y),\n                        (a = Lt(u, h)),\n                        (t.lastInterval = e);\n                    } else\n                      (n = s.velocity),\n                        (r = s.velocityX),\n                        (i = s.velocityY),\n                        (a = s.direction);\n                    (e.velocity = n),\n                      (e.velocityX = r),\n                      (e.velocityY = i),\n                      (e.direction = a);\n                  })(n, e);\n              })(t, n),\n              t.emit(\"hammer.input\", n),\n              t.recognize(n),\n              (t.session.prevInput = n);\n          }\n          function Rt(t) {\n            return t.trim().split(/\\s+/g);\n          }\n          function Ft(t, e, n) {\n            x(Rt(e), function (e) {\n              t.addEventListener(e, n, !1);\n            });\n          }\n          function Yt(t) {\n            return (Yt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          var Xt = (function () {\n            function t(e, n) {\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t);\n              var r = this;\n              (this.manager = e),\n                (this.callback = n),\n                (this.eventHandler = function (t) {\n                  M(e.options.enable, [e]) && r.handler(t);\n                }),\n                this.init();\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                { key: \"handler\", value: function () {} },\n                {\n                  key: \"init\",\n                  value: function () {\n                    var t, e, n;\n                    (t = this.manager),\n                      (e = this.events || \"\"),\n                      (n = this.eventHandler),\n                      x(Rt(e), function (e) {\n                        t.on(\"origin_input:\".concat(e), n);\n                      });\n                  },\n                },\n                {\n                  key: \"destroy\",\n                  value: function () {\n                    removeManagerListeners(\n                      this.manager,\n                      this.events || \"\",\n                      this.eventHandler,\n                    );\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Yt(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Yt(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Yt(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function zt(t) {\n            return Array.prototype.slice.call(t, 0);\n          }\n          function Wt(t, e, n) {\n            for (var r = [], i = [], o = 0; o < t.length; ) {\n              var a = e ? t[o][e] : t[o];\n              w(i, a) < 0 && r.push(t[o]), (i[o] = a), o++;\n            }\n            return (\n              n &&\n                (r = e\n                  ? r.sort(function (t, n) {\n                      return t[e] > n[e];\n                    })\n                  : r.sort()),\n              r\n            );\n          }\n          function qt(t) {\n            return (qt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function Vt(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function Gt(t, e) {\n            return (Gt = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function Ht(t, e) {\n            if (e && (\"object\" === qt(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function Ut(t) {\n            return (Ut = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          var Zt = { touchstart: 1, touchmove: 2, touchend: 4, touchcancel: 8 },\n            Kt = \"touchstart touchmove touchend touchcancel\",\n            $t = (function (t) {\n              !(function (t, e) {\n                if (\"function\" != typeof e && null !== e)\n                  throw new TypeError(\n                    \"Super expression must either be null or a function\",\n                  );\n                (t.prototype = Object.create(e && e.prototype, {\n                  constructor: { value: t, writable: !0, configurable: !0 },\n                })),\n                  Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                  e && Gt(t, e);\n              })(a, t);\n              var e,\n                n,\n                r,\n                i,\n                o =\n                  ((r = a),\n                  (i = (function () {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                      return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                      return (\n                        Boolean.prototype.valueOf.call(\n                          Reflect.construct(Boolean, [], function () {}),\n                        ),\n                        !0\n                      );\n                    } catch (t) {\n                      return !1;\n                    }\n                  })()),\n                  function () {\n                    var t,\n                      e = Ut(r);\n                    if (i) {\n                      var n = Ut(this).constructor;\n                      t = Reflect.construct(e, arguments, n);\n                    } else t = e.apply(this, arguments);\n                    return Ht(this, t);\n                  });\n              function a() {\n                var t;\n                return (\n                  Vt(this, a),\n                  (a.prototype.evTarget = Kt),\n                  (a.prototype.targetIds = {}),\n                  (a.prototype.events = Kt),\n                  ((t = o.apply(this, arguments)).evTarget = Kt),\n                  (t.targetIds = {}),\n                  t\n                );\n              }\n              return (\n                (e = a),\n                (n = [\n                  {\n                    key: \"handler\",\n                    value: function (t) {\n                      var e = Zt[t.type],\n                        n = Qt.call(this, t, e);\n                      n &&\n                        this.callback(this.manager, e, {\n                          pointers: n[0],\n                          changedPointers: n[1],\n                          pointerType: p,\n                          srcEvent: t,\n                        });\n                    },\n                  },\n                ]) &&\n                  (function (t, e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.enumerable = r.enumerable || !1),\n                        (r.configurable = !0),\n                        \"value\" in r && (r.writable = !0),\n                        Object.defineProperty(\n                          t,\n                          ((i = (function (t, e) {\n                            if (\"object\" !== qt(t) || null === t) return t;\n                            var n = t[Symbol.toPrimitive];\n                            if (void 0 !== n) {\n                              var r = n.call(t, \"string\");\n                              if (\"object\" !== qt(r)) return r;\n                              throw new TypeError(\n                                \"@@toPrimitive must return a primitive value.\",\n                              );\n                            }\n                            return String(t);\n                          })(r.key)),\n                          \"symbol\" === qt(i) ? i : String(i)),\n                          r,\n                        );\n                    }\n                    var i;\n                  })(e.prototype, n),\n                Object.defineProperty(e, \"prototype\", { writable: !1 }),\n                a\n              );\n            })(Xt);\n          function Qt(t, e) {\n            var n,\n              r,\n              i = zt(t.touches),\n              o = this.targetIds;\n            if (3 & e && 1 === i.length)\n              return (o[i[0].identifier] = !0), [i, i];\n            var a = zt(t.changedTouches),\n              s = [];\n            if ((this.target, (r = i), 1 === e))\n              for (n = 0; n < r.length; ) (o[r[n].identifier] = !0), n++;\n            for (n = 0; n < a.length; )\n              o[a[n].identifier] && s.push(a[n]),\n                12 & e && delete o[a[n].identifier],\n                n++;\n            return s.length ? [Wt(r.concat(s), \"identifier\", !0), s] : void 0;\n          }\n          function Jt(t) {\n            return (Jt =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          var te = (function () {\n            function t(e) {\n              var n,\n                r = this;\n              !(function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n                (this.options = m({}, re.defaults, e || {})),\n                (this.handlers = {}),\n                (this.filters = []),\n                (this.session = {}),\n                (this.recognizers = []),\n                (this.input =\n                  ((n = $t),\n                  this.options.inputClass && (n = inputClass),\n                  new n(this, _t))),\n                (this.touchAction = new It(this, this.options.touchAction)),\n                x(\n                  this.options.recognizers,\n                  function (t) {\n                    var e = r.add(new t[0](t[1]));\n                    t[2] && e.recognizeWith(t[2]),\n                      t[3] && e.requireFailure(t[3]);\n                  },\n                  this,\n                );\n            }\n            var e, n;\n            return (\n              (e = t),\n              (n = [\n                {\n                  key: \"set\",\n                  value: function (t) {\n                    return (\n                      m(this.options, t),\n                      t.touchAction && this.touchAction.update(),\n                      this\n                    );\n                  },\n                },\n                {\n                  key: \"stop\",\n                  value: function (t) {\n                    this.session.stopped = t ? 2 : 1;\n                  },\n                },\n                {\n                  key: \"addFilter\",\n                  value: function (t) {\n                    if (\"function\" != typeof t)\n                      throw new Error(\"filter must be a function\");\n                    this.filters.push(t);\n                  },\n                },\n                {\n                  key: \"recognize\",\n                  value: function (t) {\n                    var e = this.session;\n                    if (!e.stopped) {\n                      var n;\n                      this.touchAction.preventDefaults(t);\n                      var r = this.recognizers,\n                        i = e.curRecognizer;\n                      (!i || (i && 8 & i.state)) &&\n                        (i = e.curRecognizer = null);\n                      for (var o = 0; o < r.length; )\n                        (n = r[o]),\n                          2 === e.stopped ||\n                          (i && n !== i && !n.canRecognizeWith(i))\n                            ? n.reset()\n                            : n.recognize(t),\n                          !i && 14 & n.state && (i = e.curRecognizer = n),\n                          o++;\n                    }\n                  },\n                },\n                {\n                  key: \"get\",\n                  value: function (t) {\n                    if (t instanceof E) return t;\n                    for (var e = this.recognizers, n = 0; n < e.length; n++)\n                      if (e[n].options.event === t) return e[n];\n                    return null;\n                  },\n                },\n                {\n                  key: \"add\",\n                  value: function (t) {\n                    if (S(t, \"add\", this)) return this;\n                    var e = this.get(t.options.event);\n                    return (\n                      e && this.remove(e),\n                      this.recognizers.push(t),\n                      (t.manager = this),\n                      this.touchAction.update(),\n                      t\n                    );\n                  },\n                },\n                {\n                  key: \"remove\",\n                  value: function (t) {\n                    if (S(t, \"remove\", this)) return this;\n                    if ((t = this.get(t))) {\n                      var e = this.recognizers,\n                        n = w(e, t);\n                      -1 !== n && (e.splice(n, 1), this.touchAction.update());\n                    }\n                    return this;\n                  },\n                },\n                {\n                  key: \"on\",\n                  value: function (t, e) {\n                    if (void 0 !== t && void 0 !== e) {\n                      var n = this.handlers;\n                      return (\n                        x(Rt(t), function (t) {\n                          (n[t] = n[t] || []), n[t].push(e);\n                        }),\n                        this\n                      );\n                    }\n                  },\n                },\n                {\n                  key: \"off\",\n                  value: function (t, e) {\n                    if (void 0 !== t) {\n                      var n = this.handlers;\n                      return (\n                        x(Rt(t), function (t) {\n                          e ? n[t] && n[t].splice(w(n[t], e), 1) : delete n[t];\n                        }),\n                        this\n                      );\n                    }\n                  },\n                },\n                {\n                  key: \"emit\",\n                  value: function (t, e) {\n                    var n = this.handlers[t] && this.handlers[t].slice();\n                    if ((this.filters, n && n.length)) {\n                      t.startsWith(\"origin_input\") ||\n                        ((e.type = t),\n                        (e.preventDefault = function () {\n                          e.srcEvent.preventDefault &&\n                            e.srcEvent.preventDefault();\n                        }));\n                      for (var r = 0; r < n.length; ) n[r](e), r++;\n                    }\n                  },\n                },\n                {\n                  key: \"destroy\",\n                  value: function () {\n                    (this.handlers = {}),\n                      (this.filters = []),\n                      (this.session = {}),\n                      this.input.destroy();\n                  },\n                },\n              ]) &&\n                (function (t, e) {\n                  for (var n = 0; n < e.length; n++) {\n                    var r = e[n];\n                    (r.enumerable = r.enumerable || !1),\n                      (r.configurable = !0),\n                      \"value\" in r && (r.writable = !0),\n                      Object.defineProperty(\n                        t,\n                        ((i = (function (t, e) {\n                          if (\"object\" !== Jt(t) || null === t) return t;\n                          var n = t[Symbol.toPrimitive];\n                          if (void 0 !== n) {\n                            var r = n.call(t, \"string\");\n                            if (\"object\" !== Jt(r)) return r;\n                            throw new TypeError(\n                              \"@@toPrimitive must return a primitive value.\",\n                            );\n                          }\n                          return String(t);\n                        })(r.key)),\n                        \"symbol\" === Jt(i) ? i : String(i)),\n                        r,\n                      );\n                  }\n                  var i;\n                })(e.prototype, n),\n              Object.defineProperty(e, \"prototype\", { writable: !1 }),\n              t\n            );\n          })();\n          function ee(t) {\n            return (ee =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function ne(t, e) {\n            for (var n = 0; n < e.length; n++) {\n              var r = e[n];\n              (r.enumerable = r.enumerable || !1),\n                (r.configurable = !0),\n                \"value\" in r && (r.writable = !0),\n                Object.defineProperty(\n                  t,\n                  ((i = (function (t, e) {\n                    if (\"object\" !== ee(t) || null === t) return t;\n                    var n = t[Symbol.toPrimitive];\n                    if (void 0 !== n) {\n                      var r = n.call(t, \"string\");\n                      if (\"object\" !== ee(r)) return r;\n                      throw new TypeError(\n                        \"@@toPrimitive must return a primitive value.\",\n                      );\n                    }\n                    return String(t);\n                  })(r.key)),\n                  \"symbol\" === ee(i) ? i : String(i)),\n                  r,\n                );\n            }\n            var i;\n          }\n          var re = (function (t, e, n) {\n            return (\n              e && ne(t.prototype, e),\n              n && ne(t, n),\n              Object.defineProperty(t, \"prototype\", { writable: !1 }),\n              t\n            );\n          })(function t(e) {\n            return (\n              (function (t, e) {\n                if (!(t instanceof e))\n                  throw new TypeError(\"Cannot call a class as a function\");\n              })(this, t),\n              ((e = e || {}).recognizers = n(e.recognizers, t.defaults.preset)),\n              new te(e)\n            );\n          });\n          function ie(t) {\n            return (ie =\n              \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                    return typeof t;\n                  }\n                : function (t) {\n                    return t &&\n                      \"function\" == typeof Symbol &&\n                      t.constructor === Symbol &&\n                      t !== Symbol.prototype\n                      ? \"symbol\"\n                      : typeof t;\n                  })(t);\n          }\n          function oe(t, e) {\n            if (!(t instanceof e))\n              throw new TypeError(\"Cannot call a class as a function\");\n          }\n          function ae(t, e) {\n            return (ae = Object.setPrototypeOf\n              ? Object.setPrototypeOf.bind()\n              : function (t, e) {\n                  return (t.__proto__ = e), t;\n                })(t, e);\n          }\n          function se(t, e) {\n            if (e && (\"object\" === ie(e) || \"function\" == typeof e)) return e;\n            if (void 0 !== e)\n              throw new TypeError(\n                \"Derived constructors may only return object or undefined\",\n              );\n            return (function (t) {\n              if (void 0 === t)\n                throw new ReferenceError(\n                  \"this hasn't been initialised - super() hasn't been called\",\n                );\n              return t;\n            })(t);\n          }\n          function ce(t) {\n            return (ce = Object.setPrototypeOf\n              ? Object.getPrototypeOf.bind()\n              : function (t) {\n                  return t.__proto__ || Object.getPrototypeOf(t);\n                })(t);\n          }\n          re.defaults = {\n            domEvents: !1,\n            touchAction: s,\n            enable: !0,\n            inputClass: null,\n            preset: [\n              [z, { enable: !1 }],\n              [K, { enable: !1 }, [\"rotate\"]],\n              [dt, { direction: 6 }],\n              [ot, { direction: 6 }, [\"swipe\"]],\n              [wt],\n              [wt, { event: \"doubletap\", taps: 2 }, [\"tap\"]],\n              [Et],\n            ],\n          };\n          var ue = {\n              pointerdown: 1,\n              pointermove: 2,\n              pointerup: 4,\n              pointercancel: 8,\n              pointerout: 8,\n            },\n            he = { 2: p, 3: \"pen\", 4: \"mouse\", 5: \"kinect\" },\n            le = \"pointerdown\",\n            fe = \"pointermove pointerup pointercancel\",\n            de = (function (t) {\n              !(function (t, e) {\n                if (\"function\" != typeof e && null !== e)\n                  throw new TypeError(\n                    \"Super expression must either be null or a function\",\n                  );\n                (t.prototype = Object.create(e && e.prototype, {\n                  constructor: { value: t, writable: !0, configurable: !0 },\n                })),\n                  Object.defineProperty(t, \"prototype\", { writable: !1 }),\n                  e && ae(t, e);\n              })(a, t);\n              var e,\n                n,\n                r,\n                i,\n                o =\n                  ((r = a),\n                  (i = (function () {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct)\n                      return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                      return (\n                        Boolean.prototype.valueOf.call(\n                          Reflect.construct(Boolean, [], function () {}),\n                        ),\n                        !0\n                      );\n                    } catch (t) {\n                      return !1;\n                    }\n                  })()),\n                  function () {\n                    var t,\n                      e = ce(r);\n                    if (i) {\n                      var n = ce(this).constructor;\n                      t = Reflect.construct(e, arguments, n);\n                    } else t = e.apply(this, arguments);\n                    return se(this, t);\n                  });\n              function a() {\n                var t;\n                return (\n                  oe(this, a),\n                  (a.prototype.events = \"\".concat(le, \" \").concat(fe)),\n                  ((t = o.apply(this, arguments)).evEl = le),\n                  (t.evWin = fe),\n                  (t.store = t.manager.session.pointerEvents = []),\n                  t\n                );\n              }\n              return (\n                (e = a),\n                (n = [\n                  {\n                    key: \"handler\",\n                    value: function (t) {\n                      var e = this.store,\n                        n = !1,\n                        r = t.type.toLowerCase().replace(\"ms\", \"\"),\n                        i = ue[r],\n                        o = he[t.pointerType] || t.pointerType,\n                        a = o === p,\n                        s = w(e, t.pointerId, \"pointerId\");\n                      1 & i && (0 === t.button || a)\n                        ? s < 0 && (e.push(t), (s = e.length - 1))\n                        : 12 & i && (n = !0),\n                        s < 0 ||\n                          ((e[s] = t),\n                          this.callback(this.manager, i, {\n                            pointers: e,\n                            changedPointers: [t],\n                            pointerType: o,\n                            srcEvent: t,\n                          }),\n                          n && e.splice(s, 1));\n                    },\n                  },\n                ]) &&\n                  (function (t, e) {\n                    for (var n = 0; n < e.length; n++) {\n                      var r = e[n];\n                      (r.enumerable = r.enumerable || !1),\n                        (r.configurable = !0),\n                        \"value\" in r && (r.writable = !0),\n                        Object.defineProperty(\n                          t,\n                          ((i = (function (t, e) {\n                            if (\"object\" !== ie(t) || null === t) return t;\n                            var n = t[Symbol.toPrimitive];\n                            if (void 0 !== n) {\n                              var r = n.call(t, \"string\");\n                              if (\"object\" !== ie(r)) return r;\n                              throw new TypeError(\n                                \"@@toPrimitive must return a primitive value.\",\n                              );\n                            }\n                            return String(t);\n                          })(r.key)),\n                          \"symbol\" === ie(i) ? i : String(i)),\n                          r,\n                        );\n                    }\n                    var i;\n                  })(e.prototype, n),\n                Object.defineProperty(e, \"prototype\", { writable: !1 }),\n                a\n              );\n            })(Xt);\n          function pe(t, e, n) {\n            x(Rt(e), function (e) {\n              t.removeEventListener(e, n, !1);\n            });\n          }\n          function ge(t, e, n) {\n            var r = \"DEPRECATED METHOD: \".concat(e, \"\\n\").concat(n, \" AT \\n\");\n            return function () {\n              var e = new Error(\"get-stack-trace\"),\n                n =\n                  e && e.stack\n                    ? e.stack\n                        .replace(/^[^\\(]+?[\\n$]/gm, \"\")\n                        .replace(/^\\s+at\\s+/gm, \"\")\n                        .replace(/^Object.<anonymous>\\s*\\(/gm, \"{anonymous}()@\")\n                    : \"Unknown Stack Trace\",\n                i = console.warn;\n              return i && i(r, n), t.apply(this, arguments);\n            };\n          }\n          var ve = ge(\n              function (t, e, n) {\n                for (var r = Object.keys(e), i = 0; i < r.length; )\n                  (!n || (n && void 0 === t[r[i]])) && (t[r[i]] = e[r[i]]), i++;\n                return t;\n              },\n              \"extend\",\n              \"Use `assign`.\",\n            ),\n            ye = ge(\n              function (t, e) {\n                return ve(t, e, !0);\n              },\n              \"merge\",\n              \"Use `assign`.\",\n            ),\n            me = m(re, {\n              INPUT_START: 1,\n              INPUT_MOVE: 2,\n              INPUT_END: 4,\n              INPUT_CANCEL: 8,\n              STATE_POSSIBLE: 1,\n              STATE_BEGAN: 2,\n              STATE_CHANGED: 4,\n              STATE_ENDED: 8,\n              STATE_RECOGNIZED: 8,\n              STATE_CANCELLED: 16,\n              STATE_FAILED: y,\n              DIRECTION_NONE: 1,\n              DIRECTION_LEFT: 2,\n              DIRECTION_RIGHT: 4,\n              DIRECTION_UP: 8,\n              DIRECTION_DOWN: 16,\n              DIRECTION_HORIZONTAL: 6,\n              DIRECTION_VERTICAL: 24,\n              DIRECTION_ALL: 30,\n              Manager: te,\n              Input: Xt,\n              TouchAction: It,\n              TouchInput: $t,\n              PointerEventInput: de,\n              Recognizer: E,\n              AttrRecognizer: B,\n              Tap: wt,\n              Pan: ot,\n              Swipe: dt,\n              Pinch: K,\n              Rotate: z,\n              Press: Et,\n              on: Ft,\n              off: pe,\n              each: x,\n              merge: ye,\n              extend: ve,\n              assign: m,\n              inherit: function (t, e, n) {\n                var r,\n                  i = e.prototype;\n                ((r = t.prototype = Object.create(i)).constructor = t),\n                  (r._super = i),\n                  n && m(r, n);\n              },\n              bindFn: pt,\n              toArray: zt,\n              inArray: w,\n              uniqueArray: Wt,\n              splitStr: Rt,\n              boolOrFn: M,\n              hasParent: function (t, e) {\n                for (; t; ) {\n                  if (t === e) return !0;\n                  t = t.parentNode;\n                }\n                return !1;\n              },\n              addEventListeners: Ft,\n              removeEventListeners: pe,\n            });\n          return e;\n        })());\n    },\n    4: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return i.a;\n      }),\n        n.d(e, \"c\", function () {\n          return i.b;\n        }),\n        n.d(e, \"d\", function () {\n          return i.c;\n        }),\n        n.d(e, \"a\", function () {\n          return r;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"leftTranslate\", function () {\n          return o;\n        }),\n        n.d(r, \"leftRotate\", function () {\n          return a;\n        }),\n        n.d(r, \"leftScale\", function () {\n          return s;\n        }),\n        n.d(r, \"transform\", function () {\n          return c;\n        }),\n        n.d(r, \"direction\", function () {\n          return u;\n        }),\n        n.d(r, \"angleTo\", function () {\n          return h;\n        }),\n        n.d(r, \"vertical\", function () {\n          return l;\n        });\n      var i = n(5);\n      function o(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromTranslation(r, n), i.a.multiply(t, r, e);\n      }\n      function a(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromRotation(r, n), i.a.multiply(t, r, e);\n      }\n      function s(t, e, n) {\n        var r = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        return i.a.fromScaling(r, n), i.a.multiply(t, r, e);\n      }\n      function c(t, e) {\n        for (\n          var n,\n            r,\n            c,\n            u = t ? [].concat(t) : [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            h = 0,\n            l = e.length;\n          h < l;\n          h++\n        ) {\n          var f = e[h];\n          switch (f[0]) {\n            case \"t\":\n              o(u, u, [f[1], f[2]]);\n              break;\n            case \"s\":\n              s(u, u, [f[1], f[2]]);\n              break;\n            case \"r\":\n              a(u, u, f[1]);\n              break;\n            case \"m\":\n              (n = u), (r = u), (c = f[1]), i.a.multiply(n, c, r);\n          }\n        }\n        return u;\n      }\n      function u(t, e) {\n        return t[0] * e[1] - e[0] * t[1];\n      }\n      function h(t, e, n) {\n        var r = i.b.angle(t, e),\n          o = u(t, e) >= 0;\n        return n ? (o ? 2 * Math.PI - r : r) : o ? r : 2 * Math.PI - r;\n      }\n      function l(t, e, n) {\n        return (\n          n\n            ? ((t[0] = e[1]), (t[1] = -1 * e[0]))\n            : ((t[0] = -1 * e[1]), (t[1] = e[0])),\n          t\n        );\n      }\n    },\n    40: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      n.d(e, \"c\", function () {\n        return o;\n      }),\n        n.d(e, \"b\", function () {\n          return a;\n        }),\n        n.d(e, \"a\", function () {\n          return s;\n        });\n      var i = {};\n      function o(t) {\n        void 0 === t && (t = {}), (t = t);\n      }\n      function a(t) {\n        return (null == i ? void 0 : i.requestAnimationFrame)\n          ? i.requestAnimationFrame(t)\n          : (\"object\" ===\n              (\"undefined\" == typeof window ? \"undefined\" : r(window)) &&\n              window.requestAnimationFrame\n              ? window.requestAnimationFrame\n              : function (t) {\n                  return setTimeout(t, 16);\n                })(t);\n      }\n      function s(t) {\n        return (null == i ? void 0 : i.clearAnimationFrame)\n          ? i.clearAnimationFrame(t)\n          : (\"object\" ===\n              (\"undefined\" == typeof window ? \"undefined\" : r(window)) &&\n              window.cancelAnimationFrame\n              ? window.cancelAnimationFrame\n              : clearTimeout)(t);\n      }\n    },\n    41: function (t, e, n) {\n      \"use strict\";\n      var r = {};\n      n.r(r),\n        n.d(r, \"proccessToFunc\", function () {\n          return u;\n        }),\n        n.d(r, \"buildTextureData\", function () {\n          return h;\n        }),\n        n.d(r, \"buildTextureDataWithOneEdgeAttr\", function () {\n          return l;\n        }),\n        n.d(r, \"buildTextureDataWithTwoEdgeAttr\", function () {\n          return f;\n        }),\n        n.d(r, \"attributesToTextureData\", function () {\n          return d;\n        }),\n        n.d(r, \"arrayToTextureData\", function () {\n          return p;\n        }),\n        n.d(r, \"radialLayout\", function () {\n          return g;\n        });\n      var i = n(1),\n        o = n(95),\n        a = n(2),\n        s = n(0),\n        c = a.h.traverseTree,\n        u = function (t, e) {\n          return t\n            ? Object(s.isNumber)(t)\n              ? function (e) {\n                  return t;\n                }\n              : t\n            : function (t) {\n                return e || 1;\n              };\n        },\n        h = function (t, e) {\n          var n = [],\n            r = [],\n            i = {},\n            o = 0;\n          for (o = 0; o < t.length; o++) {\n            var a = t[o];\n            (i[a.id] = o),\n              n.push(a.x),\n              n.push(a.y),\n              n.push(0),\n              n.push(0),\n              r.push([]);\n          }\n          for (o = 0; o < e.length; o++) {\n            var s = e[o];\n            r[i[s.source]].push(i[s.target]), r[i[s.target]].push(i[s.source]);\n          }\n          var c = 0;\n          for (o = 0; o < t.length; o++) {\n            var u = n.length,\n              h = r[o],\n              l = h.length;\n            (n[4 * o + 2] = u),\n              (n[4 * o + 3] = h.length),\n              (c = Math.max(c, h.length));\n            for (var f = 0; f < l; ++f) {\n              var d = h[f];\n              n.push(+d);\n            }\n          }\n          for (; n.length % 4 != 0; ) n.push(0);\n          return { array: new Float32Array(n), maxEdgePerVetex: c };\n        },\n        l = function (t, e, n) {\n          var r = [],\n            i = [],\n            o = {},\n            a = 0;\n          for (a = 0; a < t.length; a++) {\n            var s = t[a];\n            (o[s.id] = a),\n              r.push(s.x),\n              r.push(s.y),\n              r.push(0),\n              r.push(0),\n              i.push([]);\n          }\n          for (a = 0; a < e.length; a++) {\n            var c = e[a];\n            i[o[c.source]].push(o[c.target]),\n              i[o[c.source]].push(n(c)),\n              i[o[c.target]].push(o[c.source]),\n              i[o[c.target]].push(n(c));\n          }\n          var u = 0;\n          for (a = 0; a < t.length; a++) {\n            var h = r.length,\n              l = i[a],\n              f = l.length;\n            (r[4 * a + 2] = h),\n              (r[4 * a + 3] = f / 2),\n              (u = Math.max(u, f / 2));\n            for (var d = 0; d < f; ++d) {\n              var p = l[d];\n              r.push(+p);\n            }\n          }\n          for (; r.length % 4 != 0; ) r.push(0);\n          return { array: new Float32Array(r), maxEdgePerVetex: u };\n        },\n        f = function (t, e, n, r) {\n          var i = [],\n            o = [],\n            a = {},\n            s = 0;\n          for (s = 0; s < t.length; s++) {\n            var c = t[s];\n            (a[c.id] = s),\n              i.push(c.x),\n              i.push(c.y),\n              i.push(0),\n              i.push(0),\n              o.push([]);\n          }\n          for (s = 0; s < e.length; s++) {\n            var u = e[s];\n            o[a[u.source]].push(a[u.target]),\n              o[a[u.source]].push(n(u)),\n              o[a[u.source]].push(r(u)),\n              o[a[u.source]].push(0),\n              o[a[u.target]].push(a[u.source]),\n              o[a[u.target]].push(n(u)),\n              o[a[u.target]].push(r(u)),\n              o[a[u.target]].push(0);\n          }\n          var h = 0;\n          for (s = 0; s < t.length; s++) {\n            var l = i.length,\n              f = o[s],\n              d = f.length;\n            (i[4 * s + 2] = l + (1048576 * d) / 4),\n              (i[4 * s + 3] = 0),\n              (h = Math.max(h, d / 4));\n            for (var p = 0; p < d; ++p) {\n              var g = f[p];\n              i.push(+g);\n            }\n          }\n          for (; i.length % 4 != 0; ) i.push(0);\n          return { array: new Float32Array(i), maxEdgePerVetex: h };\n        },\n        d = function (t, e) {\n          var n = [],\n            r = t.length,\n            i = {};\n          return (\n            e.forEach(function (e) {\n              t.forEach(function (t, o) {\n                if (\n                  (void 0 === i[e[t]] && (i[e[t]] = Object.keys(i).length),\n                  n.push(i[e[t]]),\n                  o === r - 1)\n                )\n                  for (; n.length % 4 != 0; ) n.push(0);\n              });\n            }),\n            { array: new Float32Array(n), count: Object.keys(i).length }\n          );\n        },\n        p = function (t) {\n          for (\n            var e = [],\n              n = t.length,\n              r = t[0].length,\n              i = function (r) {\n                t.forEach(function (t, i) {\n                  if ((e.push(t[r]), i === n - 1))\n                    for (; e.length % 4 != 0; ) e.push(0);\n                });\n              },\n              o = 0;\n            o < r;\n            o++\n          )\n            i(o);\n          return new Float32Array(e);\n        },\n        g = function (t, e) {\n          var n = { x: 1 / 0, y: 1 / 0 },\n            r = { x: -1 / 0, y: -1 / 0 },\n            i = \"x\",\n            o = \"y\";\n          e && [\"V\", \"TB\", \"BT\"].indexOf(e) >= 0 && ((o = \"x\"), (i = \"y\"));\n          var a = 0;\n          c(t, function (t) {\n            return (\n              a++,\n              t.x > r.x && (r.x = t.x),\n              t.x < n.x && (n.x = t.x),\n              t.y > r.y && (r.y = t.y),\n              t.y < n.y && (n.y = t.y),\n              !0\n            );\n          });\n          var s = (2 * Math.PI) / a,\n            u = r[o] - n[o];\n          return (\n            0 === u ||\n              c(t, function (e) {\n                var r = ((e[o] - n[o]) / u) * (2 * Math.PI - s) + s,\n                  a = Math.abs(\"x\" === i ? e.x - t.x : e.y - t.y);\n                return (e.x = a * Math.cos(r)), (e.y = a * Math.sin(r)), !0;\n              }),\n            t\n          );\n        },\n        v = Object(i.a)(Object(i.a)(Object(i.a)({}, a.h), o), r);\n      e.a = v;\n    },\n    423: function (t, e, n) {\n      \"use strict\";\n      var r = function () {\n        return (r =\n          Object.assign ||\n          function (t) {\n            for (var e, n = 1, r = arguments.length; n < r; n++)\n              for (var i in (e = arguments[n]))\n                Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n            return t;\n          }).apply(this, arguments);\n      };\n      function i(t, e) {\n        var n = {};\n        for (var r in t)\n          Object.prototype.hasOwnProperty.call(t, r) &&\n            e.indexOf(r) < 0 &&\n            (n[r] = t[r]);\n        if (null != t && \"function\" == typeof Object.getOwnPropertySymbols) {\n          var i = 0;\n          for (r = Object.getOwnPropertySymbols(t); i < r.length; i++)\n            e.indexOf(r[i]) < 0 &&\n              Object.prototype.propertyIsEnumerable.call(t, r[i]) &&\n              (n[r[i]] = t[r[i]]);\n        }\n        return n;\n      }\n      var o = n(2),\n        a = n(0);\n      Object(o.l)(\n        \"circle\",\n        {\n          options: {\n            size: o.e.defaultNode.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultNode.style.stroke,\n              fill: o.e.defaultNode.style.fill,\n              lineWidth: o.e.defaultNode.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.nodeLabel.style.fill,\n                fontSize: o.e.nodeLabel.style.fontSize,\n              },\n            },\n            linkPoints: {\n              top: !1,\n              right: !1,\n              bottom: !1,\n              left: !1,\n              size: o.e.defaultNode.linkPoints.size,\n              lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n              fill: o.e.defaultNode.linkPoints.fill,\n              stroke: o.e.defaultNode.linkPoints.stroke,\n            },\n            icon: {\n              show: !1,\n              img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n              width: 20,\n              height: 20,\n            },\n            stateStyles: r({}, o.e.nodeStateStyles),\n          },\n          shapeType: \"circle\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getOptions(t).icon,\n              i = void 0 === n ? {} : n,\n              o = this.getShapeStyle(t),\n              s = Object(a.deepMix)({}, i, t.icon),\n              c = e.addShape(\"circle\", {\n                attrs: o,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n              }),\n              u = s.width,\n              h = s.height,\n              l = s.show,\n              f = s.text;\n            return (\n              l &&\n                (f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        s,\n                      ),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r({ x: -u / 2, y: -h / 2 }, s),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    })),\n              this.drawLinkPoints(t, e),\n              c\n            );\n          },\n          drawLinkPoints: function (t, e) {\n            var n = this.getOptions(t).linkPoints,\n              o = void 0 === n ? {} : n,\n              a = o.top,\n              s = o.left,\n              c = o.right,\n              u = o.bottom,\n              h = o.size,\n              l = o.r,\n              f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n              d = this.getSize(t)[0] / 2;\n            s &&\n              e.addShape(\"circle\", {\n                attrs: r(r({}, f), { x: -d, y: 0, r: h / 2 || l || 5 }),\n                className: \"link-point-left\",\n                name: \"link-point-left\",\n                isAnchorPoint: !0,\n              }),\n              c &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: d, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-right\",\n                  name: \"link-point-right\",\n                  isAnchorPoint: !0,\n                }),\n              a &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: 0, y: -d, r: h / 2 || l || 5 }),\n                  className: \"link-point-top\",\n                  name: \"link-point-top\",\n                  isAnchorPoint: !0,\n                }),\n              u &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: 0, y: d, r: h / 2 || l || 5 }),\n                  className: \"link-point-bottom\",\n                  name: \"link-point-bottom\",\n                  isAnchorPoint: !0,\n                });\n          },\n          getShapeStyle: function (t) {\n            var e = this.getOptions(t).style,\n              n = { stroke: t.color },\n              i = Object(a.deepMix)({}, e, n),\n              o = this.getSize(t)[0] / 2;\n            return r({ x: 0, y: 0, r: o }, i);\n          },\n          update: function (t, e) {\n            var n = e.getContainer(),\n              r = this.getSize(t),\n              i = { stroke: t.color, r: r[0] / 2 },\n              o = e.get(\"keyShape\"),\n              s = Object(a.deepMix)({}, o.attr(), i, t.style);\n            this.updateShape(t, e, s, !0), this.updateLinkPoints(t, n);\n          },\n        },\n        \"single-node\",\n      ),\n        Object(o.l)(\n          \"rect\",\n          {\n            options: {\n              size: [100, 30],\n              style: {\n                radius: 0,\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"rect\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getShapeStyle(t),\n                r = e.addShape(\"rect\", {\n                  attrs: n,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                });\n              return this.drawLinkPoints(t, e), r;\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = i.width || o[0],\n                c = i.height || o[1];\n              return r({ x: -s / 2, y: -c / 2, width: s, height: c }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getSize(t),\n                o = e.get(\"keyShape\");\n              t.size ||\n                ((i[0] = o.attr(\"width\") || r.width),\n                (i[1] = o.attr(\"height\") || r.height));\n              var s = {\n                  stroke: t.color,\n                  x: -i[0] / 2,\n                  y: -i[1] / 2,\n                  width: i[0],\n                  height: i[1],\n                },\n                c = Object(a.mix)({}, r, o.attr(), s);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !1),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"ellipse\",\n          {\n            options: {\n              size: [80, 40],\n              style: {\n                x: 0,\n                y: 0,\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"ellipse\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"ellipse\", {\n                  attrs: o,\n                  className: \"ellipse-keyShape\",\n                  name: \"ellipse-keyShape\",\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0] / 2,\n                g = d[1] / 2;\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = o[0] / 2,\n                c = o[1] / 2;\n              return r({ x: 0, y: 0, rx: s, ry: c }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getSize(t),\n                o = { stroke: t.color, rx: i[0] / 2, ry: i[1] / 2 },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"diamond\",\n          {\n            options: {\n              size: [80, 80],\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"diamond\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"path\", {\n                  attrs: o,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            getPath: function (t) {\n              var e = this.getSize(t),\n                n = e[0],\n                r = e[1];\n              return [\n                [\"M\", 0, -r / 2],\n                [\"L\", n / 2, 0],\n                [\"L\", 0, r / 2],\n                [\"L\", -n / 2, 0],\n                [\"Z\"],\n              ];\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"triangle\",\n          {\n            options: {\n              size: 40,\n              direction: \"up\",\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n                offset: 15,\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n                offset: 6,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"triangle\",\n            labelPosition: \"bottom\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t),\n                i = n.icon,\n                o = void 0 === i ? {} : i,\n                a = n.direction,\n                s = this.getShapeStyle(t),\n                c = t.direction || a,\n                u = e.addShape(\"path\", {\n                  attrs: s,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                h = o.width,\n                l = o.height,\n                f = o.show,\n                d = o.offset,\n                p = o.text;\n              if (f)\n                if (p)\n                  e.addShape(\"text\", {\n                    attrs: r(\n                      {\n                        x: 0,\n                        y: 0,\n                        fontSize: 12,\n                        fill: \"#000\",\n                        stroke: \"#000\",\n                        textBaseline: \"middle\",\n                        textAlign: \"center\",\n                      },\n                      o,\n                    ),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  });\n                else {\n                  var g = -h / 2,\n                    v = -l / 2;\n                  (\"up\" !== c && \"down\" !== c) || (v += d),\n                    (\"left\" !== c && \"right\" !== c) || (g += d),\n                    e.addShape(\"image\", {\n                      attrs: r({ x: g, y: v }, o),\n                      className: \"\".concat(this.type, \"-icon\"),\n                      name: \"\".concat(this.type, \"-icon\"),\n                      draggable: !0,\n                    });\n                }\n              return this.drawLinkPoints(t, e), u;\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t),\n                o = n.linkPoints,\n                a = void 0 === o ? {} : o,\n                s = n.direction,\n                c = t.direction || s,\n                u = a.top,\n                h = a.left,\n                l = a.right,\n                f = a.bottom,\n                d = a.size,\n                p = a.r,\n                g = i(a, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                v = this.getSize(t)[0];\n              if (h) {\n                var y = null,\n                  m = v * Math.sin((1 / 3) * Math.PI),\n                  b = v * Math.sin((1 / 3) * Math.PI);\n                \"up\" === c\n                  ? (y = [-b, m])\n                  : \"down\" === c\n                  ? (y = [-b, -m])\n                  : \"left\" === c && (y = [-b, b - m]),\n                  y &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: y[0],\n                        y: y[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-left\",\n                      name: \"link-point-left\",\n                    });\n              }\n              if (l) {\n                var x = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"up\" === c\n                  ? (x = [b, m])\n                  : \"down\" === c\n                  ? (x = [b, -m])\n                  : \"right\" === c && (x = [b, b - m]),\n                  x &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: x[0],\n                        y: x[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-right\",\n                      name: \"link-point-right\",\n                    });\n              }\n              if (u) {\n                var S = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"up\" === c\n                  ? (S = [b - m, -m])\n                  : \"left\" === c\n                  ? (S = [b, -m])\n                  : \"right\" === c && (S = [-b, -m]),\n                  S &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: S[0],\n                        y: S[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-top\",\n                      name: \"link-point-top\",\n                    });\n              }\n              if (f) {\n                var w = null;\n                (m = v * Math.sin((1 / 3) * Math.PI)),\n                  (b = v * Math.sin((1 / 3) * Math.PI));\n                \"down\" === c\n                  ? (w = [-b + m, m])\n                  : \"left\" === c\n                  ? (w = [b, m])\n                  : \"right\" === c && (w = [-b, m]),\n                  w &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, g), {\n                        x: w[0],\n                        y: w[1],\n                        r: d / 2 || p || 5,\n                      }),\n                      className: \"link-point-bottom\",\n                      name: \"link-point-bottom\",\n                    });\n              }\n            },\n            getPath: function (t) {\n              var e = this.getOptions(t).direction,\n                n = t.direction || e,\n                r = this.getSize(t)[0],\n                i = r * Math.sin((1 / 3) * Math.PI),\n                o = r * Math.sin((1 / 3) * Math.PI),\n                a = [[\"M\", -o, i], [\"L\", 0, -i], [\"L\", o, i], [\"Z\"]];\n              return (\n                \"down\" === n\n                  ? (a = [[\"M\", -o, -i], [\"L\", o, -i], [\"L\", 0, i], [\"Z\"]])\n                  : \"left\" === n\n                  ? (a = [[\"M\", -o, o - i], [\"L\", o, -o], [\"L\", o, o], [\"Z\"]])\n                  : \"right\" === n &&\n                    (a = [[\"M\", o, o - i], [\"L\", -o, o], [\"L\", -o, -o], [\"Z\"]]),\n                a\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n            updateLinkPoints: function (t, e) {\n              var n = this.getOptions({}),\n                i = n.linkPoints,\n                o = n.direction,\n                s = t.direction || o,\n                c = e.find(function (t) {\n                  return \"link-point-left\" === t.get(\"className\");\n                }),\n                u = e.find(function (t) {\n                  return \"link-point-right\" === t.get(\"className\");\n                }),\n                h = e.find(function (t) {\n                  return \"link-point-top\" === t.get(\"className\");\n                }),\n                l = e.find(function (t) {\n                  return \"link-point-bottom\" === t.get(\"className\");\n                }),\n                f = i,\n                d = c || u || h || l;\n              d && (f = d.attr());\n              var p = Object(a.mix)({}, f, t.linkPoints),\n                g = p.fill,\n                v = p.stroke,\n                y = p.lineWidth,\n                m = p.size / 2;\n              m || (m = p.r);\n              var b = t.linkPoints\n                  ? t.linkPoints\n                  : {\n                      left: void 0,\n                      right: void 0,\n                      top: void 0,\n                      bottom: void 0,\n                    },\n                x = b.left,\n                S = b.right,\n                w = b.top,\n                O = b.bottom,\n                M = this.getSize(t)[0],\n                k = { r: m, fill: g, stroke: v, lineWidth: y },\n                j = null,\n                C = M * Math.sin((1 / 3) * Math.PI),\n                E = M * Math.sin((1 / 3) * Math.PI);\n              \"up\" === s\n                ? (j = [-E, C])\n                : \"down\" === s\n                ? (j = [-E, -C])\n                : \"left\" === s && (j = [-E, E - C]),\n                j &&\n                  (c\n                    ? x || void 0 === x\n                      ? c.attr(r(r({}, k), { x: j[0], y: j[1] }))\n                      : c.remove()\n                    : x &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: j[0], y: j[1] }),\n                        className: \"link-point-left\",\n                        name: \"link-point-left\",\n                        isAnchorPoint: !0,\n                      }));\n              var P = null;\n              \"up\" === s\n                ? (P = [E, C])\n                : \"down\" === s\n                ? (P = [E, -C])\n                : \"right\" === s && (P = [E, E - C]),\n                P &&\n                  (u\n                    ? S || void 0 === S\n                      ? u.attr(r(r({}, k), { x: P[0], y: P[1] }))\n                      : u.remove()\n                    : S &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: P[0], y: P[1] }),\n                        className: \"link-point-right\",\n                        name: \"link-point-right\",\n                        isAnchorPoint: !0,\n                      }));\n              var A = null;\n              \"up\" === s\n                ? (A = [E - C, -C])\n                : \"left\" === s\n                ? (A = [E, -C])\n                : \"right\" === s && (A = [-E, -C]),\n                A &&\n                  (h\n                    ? w || void 0 === w\n                      ? h.attr(r(r({}, k), { x: A[0], y: A[1] }))\n                      : h.remove()\n                    : w &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: A[0], y: A[1] }),\n                        className: \"link-point-top\",\n                        name: \"link-point-top\",\n                        isAnchorPoint: !0,\n                      }));\n              var I = null;\n              \"down\" === s\n                ? (I = [-E + C, C])\n                : \"left\" === s\n                ? (I = [E, C])\n                : \"right\" === s && (I = [-E, C]),\n                I &&\n                  (l\n                    ? O || void 0 === O\n                      ? l.attr(r(r({}, k), { x: I[0], y: I[1] }))\n                      : l.remove()\n                    : O &&\n                      e.addShape(\"circle\", {\n                        attrs: r(r({}, k), { x: I[0], y: I[1] }),\n                        className: \"link-point-bottom\",\n                        name: \"link-point-bottom\",\n                        isAnchorPoint: !0,\n                      }));\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"modelRect\",\n          {\n            options: {\n              size: [185, 70],\n              style: {\n                radius: 5,\n                stroke: \"#69c0ff\",\n                fill: \"#ffffff\",\n                lineWidth: o.e.defaultNode.style.lineWidth,\n                fillOpacity: 1,\n              },\n              labelCfg: {\n                style: { fill: \"#595959\", fontSize: 14 },\n                offset: 30,\n              },\n              descriptionCfg: {\n                style: { fontSize: 12, fill: \"#bfbfbf\" },\n                paddingTop: 0,\n              },\n              preRect: { show: !0, width: 4, fill: \"#40a9ff\", radius: 2 },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: 10,\n                lineWidth: 1,\n                fill: \"#72CC4A\",\n                stroke: \"#72CC4A\",\n              },\n              logoIcon: {\n                show: !0,\n                x: 0,\n                y: 0,\n                img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n                width: 16,\n                height: 16,\n                offset: 0,\n              },\n              stateIcon: {\n                show: !0,\n                x: 0,\n                y: 0,\n                img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n                width: 16,\n                height: 16,\n                offset: -5,\n              },\n              anchorPoints: [\n                [0, 0.5],\n                [1, 0.5],\n              ],\n            },\n            shapeType: \"modelRect\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).preRect,\n                o = void 0 === n ? {} : n,\n                a = this.getShapeStyle(t),\n                s = this.getSize(t),\n                c = s[0],\n                u = s[1],\n                h = e.addShape(\"rect\", {\n                  attrs: a,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                l = o.show,\n                f = i(o, [\"show\"]);\n              return (\n                l &&\n                  e.addShape(\"rect\", {\n                    attrs: r({ x: -c / 2, y: -u / 2, height: u }, f),\n                    className: \"pre-rect\",\n                    name: \"pre-rect\",\n                    draggable: !0,\n                  }),\n                this.drawLogoIcon(t, e),\n                this.drawStateIcon(t, e),\n                this.drawLinkPoints(t, e),\n                h\n              );\n            },\n            drawLogoIcon: function (t, e) {\n              var n = this.getOptions(t).logoIcon,\n                o = void 0 === n ? {} : n,\n                a = this.getSize(t)[0];\n              if (o.show) {\n                var s = o.width,\n                  c = o.height,\n                  u = o.x,\n                  h = o.y,\n                  l = o.offset,\n                  f = o.text,\n                  d = i(o, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n                f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        d,\n                      ),\n                      className: \"rect-logo-icon\",\n                      name: \"rect-logo-icon\",\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r(r({}, d), {\n                        x: u || -a / 2 + s + l,\n                        y: h || -c / 2,\n                        width: s,\n                        height: c,\n                      }),\n                      className: \"rect-logo-icon\",\n                      name: \"rect-logo-icon\",\n                      draggable: !0,\n                    });\n              }\n            },\n            drawStateIcon: function (t, e) {\n              var n = this.getOptions(t).stateIcon,\n                o = void 0 === n ? {} : n,\n                a = this.getSize(t)[0];\n              if (o.show) {\n                var s = o.width,\n                  c = o.height,\n                  u = o.x,\n                  h = o.y,\n                  l = o.offset,\n                  f = o.text,\n                  d = i(o, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n                f\n                  ? e.addShape(\"text\", {\n                      attrs: r(\n                        {\n                          x: 0,\n                          y: 0,\n                          fontSize: 12,\n                          fill: \"#000\",\n                          stroke: \"#000\",\n                          textBaseline: \"middle\",\n                          textAlign: \"center\",\n                        },\n                        d,\n                      ),\n                      className: \"rect-state-icon\",\n                      name: \"rect-state-icon\",\n                      draggable: !0,\n                    })\n                  : e.addShape(\"image\", {\n                      attrs: r(r({}, d), {\n                        x: u || a / 2 - s + l,\n                        y: h || -c / 2,\n                        width: s,\n                        height: c,\n                      }),\n                      className: \"rect-state-icon\",\n                      name: \"rect-state-icon\",\n                      draggable: !0,\n                    });\n              }\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.bottom,\n                h = o.size,\n                l = o.r,\n                f = i(o, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]),\n                d = this.getSize(t),\n                p = d[0],\n                g = d[1];\n              s &&\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, f), { x: -p / 2, y: 0, r: h / 2 || l || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                  isAnchorPoint: !0,\n                }),\n                c &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: p / 2, y: 0, r: h / 2 || l || 5 }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                a &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: -g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-top\",\n                    name: \"link-point-top\",\n                    isAnchorPoint: !0,\n                  }),\n                u &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, f), { x: 0, y: g / 2, r: h / 2 || l || 5 }),\n                    className: \"link-point-bottom\",\n                    name: \"link-point-bottom\",\n                    isAnchorPoint: !0,\n                  });\n            },\n            drawLabel: function (t, e) {\n              var n = this.getOptions(t),\n                i = n.labelCfg,\n                o = void 0 === i ? {} : i,\n                s = n.logoIcon,\n                c = void 0 === s ? {} : s,\n                u = n.descriptionCfg,\n                h = void 0 === u ? {} : u,\n                l = this.getSize(t)[0],\n                f = null,\n                d = c.show,\n                p = c.width,\n                g = -l / 2 + o.offset;\n              d && (g = -l / 2 + p + o.offset);\n              var v = o.style,\n                y = h.style,\n                m = h.paddingTop;\n              return (\n                Object(a.isString)(t.description)\n                  ? ((f = e.addShape(\"text\", {\n                      attrs: r(r({}, v), { x: g, y: -5, text: t.label }),\n                      className: \"text-shape\",\n                      name: \"text-shape\",\n                      draggable: !0,\n                    })),\n                    e.addShape(\"text\", {\n                      attrs: r(r({}, y), {\n                        x: g,\n                        y: 17 + (m || 0),\n                        text: t.description,\n                      }),\n                      className: \"rect-description\",\n                      name: \"rect-description\",\n                      draggable: !0,\n                    }))\n                  : (f = e.addShape(\"text\", {\n                      attrs: r(r({}, v), { x: g, y: 7, text: t.label }),\n                      className: \"text-shape\",\n                      name: \"text-shape\",\n                      draggable: !0,\n                    })),\n                f\n              );\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getSize(t),\n                s = i.width || o[0],\n                c = i.height || o[1];\n              return r({ x: -s / 2, y: -c / 2, width: s, height: c }, i);\n            },\n            update: function (t, e) {\n              var n = this.getOptions(t),\n                o = n.style,\n                s = void 0 === o ? {} : o,\n                c = n.labelCfg,\n                u = void 0 === c ? {} : c,\n                h = n.descriptionCfg,\n                l = void 0 === h ? {} : h,\n                f = this.getSize(t),\n                d = f[0],\n                p = f[1];\n              e.get(\"keyShape\").attr(\n                r(r({}, s), { x: -d / 2, y: -p / 2, width: d, height: p }),\n              );\n              var g = e.getContainer(),\n                v = g.find(function (t) {\n                  return \"rect-logo-icon\" === t.get(\"className\");\n                }),\n                y = v ? v.attr() : {},\n                m = Object(a.mix)({}, y, t.logoIcon),\n                b = m.width;\n              void 0 === b && (b = this.options.logoIcon.width);\n              var x = t.logoIcon ? t.logoIcon.show : void 0,\n                S = u.offset,\n                w = -d / 2 + b + S;\n              x || void 0 === x || (w = -d / 2 + S);\n              var O = g.find(function (t) {\n                  return \"node-label\" === t.get(\"className\");\n                }),\n                M = g.find(function (t) {\n                  return \"rect-description\" === t.get(\"className\");\n                });\n              if (t.label)\n                if (O) {\n                  var k = t.labelCfg ? t.labelCfg.style : {},\n                    j = Object(a.mix)({}, O.attr(), k);\n                  t.label && (j.text = t.label),\n                    (j.x = w),\n                    Object(a.isString)(t.description) && (j.y = -5),\n                    M && (M.resetMatrix(), M.attr({ x: w })),\n                    O.resetMatrix(),\n                    O.attr(j);\n                } else\n                  g.addShape(\"text\", {\n                    attrs: r(r({}, u.style), {\n                      x: w,\n                      y: t.description ? -5 : 7,\n                      text: t.label,\n                    }),\n                    className: \"node-label\",\n                    name: \"node-label\",\n                    draggable: !0,\n                  });\n              if (Object(a.isString)(t.description)) {\n                var C = l.paddingTop;\n                if (M) {\n                  k = t.descriptionCfg ? t.descriptionCfg.style : {};\n                  var E = Object(a.mix)({}, M.attr(), k);\n                  Object(a.isString)(t.description) && (E.text = t.description),\n                    (E.x = w),\n                    M.resetMatrix(),\n                    M.attr(r(r({}, E), { y: 17 + (C || 0) }));\n                } else\n                  g.addShape(\"text\", {\n                    attrs: r(r({}, l.style), {\n                      x: w,\n                      y: 17 + (C || 0),\n                      text: t.description,\n                    }),\n                    className: \"rect-description\",\n                    name: \"rect-description\",\n                    draggable: !0,\n                  });\n              }\n              var P = g.find(function (t) {\n                return \"pre-rect\" === t.get(\"className\");\n              });\n              if (P) {\n                var A = Object(a.mix)({}, P.attr(), t.preRect);\n                P.attr(r(r({}, A), { x: -d / 2, y: -p / 2, height: p }));\n              }\n              if (v)\n                if (x || void 0 === x) {\n                  var I = m.width,\n                    T = m.height,\n                    N = m.x,\n                    B = m.y,\n                    L = m.offset,\n                    D = i(m, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n                  v.attr(\n                    r(r({}, D), {\n                      x: N || -d / 2 + I + L,\n                      y: B || -T / 2,\n                      width: I,\n                      height: T,\n                    }),\n                  );\n                } else v.remove();\n              else x && this.drawLogoIcon(t, g);\n              var _ = g.find(function (t) {\n                  return \"rect-state-icon\" === t.get(\"className\");\n                }),\n                R = _ ? _.attr() : {},\n                F = Object(a.mix)({}, R, t.stateIcon);\n              if (_) {\n                F.show || void 0 === F.show || _.remove();\n                var Y = F.width,\n                  X = ((T = F.height), (N = F.x), (B = F.y), F.offset),\n                  z = i(F, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n                _.attr(\n                  r(r({}, z), {\n                    x: N || d / 2 - Y + X,\n                    y: B || -T / 2,\n                    width: Y,\n                    height: T,\n                  }),\n                );\n              } else F.show && this.drawStateIcon(t, g);\n              this.updateLinkPoints(t, g);\n            },\n          },\n          \"single-node\",\n        ),\n        Object(o.l)(\n          \"star\",\n          {\n            options: {\n              size: 60,\n              style: {\n                stroke: o.e.defaultNode.style.stroke,\n                fill: o.e.defaultNode.style.fill,\n                lineWidth: o.e.defaultNode.style.lineWidth,\n              },\n              labelCfg: {\n                style: {\n                  fill: o.e.nodeLabel.style.fill,\n                  fontSize: o.e.nodeLabel.style.fontSize,\n                },\n              },\n              linkPoints: {\n                top: !1,\n                right: !1,\n                bottom: !1,\n                left: !1,\n                size: o.e.defaultNode.linkPoints.size,\n                lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n                fill: o.e.defaultNode.linkPoints.fill,\n                stroke: o.e.defaultNode.linkPoints.stroke,\n              },\n              icon: {\n                show: !1,\n                img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n                width: 20,\n                height: 20,\n              },\n              stateStyles: r({}, o.e.nodeStateStyles),\n            },\n            shapeType: \"star\",\n            labelPosition: \"center\",\n            drawShape: function (t, e) {\n              var n = this.getOptions(t).icon,\n                i = void 0 === n ? {} : n,\n                o = this.getShapeStyle(t),\n                a = e.addShape(\"path\", {\n                  attrs: o,\n                  className: \"\".concat(this.type, \"-keyShape\"),\n                  name: \"\".concat(this.type, \"-keyShape\"),\n                  draggable: !0,\n                }),\n                s = i.width,\n                c = i.height,\n                u = i.show,\n                h = i.text;\n              return (\n                u &&\n                  (h\n                    ? e.addShape(\"text\", {\n                        attrs: r(\n                          {\n                            x: 0,\n                            y: 0,\n                            fontSize: 12,\n                            fill: \"#000\",\n                            stroke: \"#000\",\n                            textBaseline: \"middle\",\n                            textAlign: \"center\",\n                          },\n                          i,\n                        ),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })\n                    : e.addShape(\"image\", {\n                        attrs: r({ x: -s / 2, y: -c / 2 }, i),\n                        className: \"\".concat(this.type, \"-icon\"),\n                        name: \"\".concat(this.type, \"-icon\"),\n                        draggable: !0,\n                      })),\n                this.drawLinkPoints(t, e),\n                a\n              );\n            },\n            drawLinkPoints: function (t, e) {\n              var n = this.getOptions(t).linkPoints,\n                o = void 0 === n ? {} : n,\n                a = o.top,\n                s = o.left,\n                c = o.right,\n                u = o.leftBottom,\n                h = o.rightBottom,\n                l = o.size,\n                f = o.r,\n                d = i(o, [\n                  \"top\",\n                  \"left\",\n                  \"right\",\n                  \"leftBottom\",\n                  \"rightBottom\",\n                  \"size\",\n                  \"r\",\n                ]),\n                p = this.getSize(t)[0];\n              if (c) {\n                var g = Math.cos(0.1 * Math.PI) * p,\n                  v = Math.sin(0.1 * Math.PI) * p;\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-right\",\n                  name: \"link-point-right\",\n                });\n              }\n              if (a) {\n                (g = Math.cos(0.5 * Math.PI) * p),\n                  (v = Math.sin(0.5 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-top\",\n                  name: \"link-point-top\",\n                });\n              }\n              if (s) {\n                (g = Math.cos(0.9 * Math.PI) * p),\n                  (v = Math.sin(0.9 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-left\",\n                  name: \"link-point-left\",\n                });\n              }\n              if (u) {\n                (g = Math.cos(1.3 * Math.PI) * p),\n                  (v = Math.sin(1.3 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-left-bottom\",\n                  name: \"link-point-left-bottom\",\n                });\n              }\n              if (h) {\n                (g = Math.cos(1.7 * Math.PI) * p),\n                  (v = Math.sin(1.7 * Math.PI) * p);\n                e.addShape(\"circle\", {\n                  attrs: r(r({}, d), { x: g, y: -v, r: l / 2 || f || 5 }),\n                  className: \"link-point-right-bottom\",\n                  name: \"link-point-right-bottom\",\n                });\n              }\n            },\n            getPath: function (t) {\n              for (\n                var e = this.getSize(t)[0],\n                  n = (3 * e) / 8,\n                  r = t.innerR || n,\n                  i = [],\n                  o = 0;\n                o < 5;\n                o++\n              ) {\n                var a = Math.cos(((18 + 72 * o) / 180) * Math.PI) * e,\n                  s = Math.sin(((18 + 72 * o) / 180) * Math.PI) * e,\n                  c = Math.cos(((54 + 72 * o) / 180) * Math.PI) * r,\n                  u = Math.sin(((54 + 72 * o) / 180) * Math.PI) * r;\n                0 === o ? i.push([\"M\", a, -s]) : i.push([\"L\", a, -s]),\n                  i.push([\"L\", c, -u]);\n              }\n              return i.push([\"Z\"]), i;\n            },\n            getShapeStyle: function (t) {\n              var e = this.getOptions(t).style,\n                n = { stroke: t.color },\n                i = Object(a.mix)({}, e, n),\n                o = this.getPath(t);\n              return r({ path: o }, i);\n            },\n            update: function (t, e) {\n              var n = e.getContainer(),\n                r = this.getOptions({}).style,\n                i = this.getPath(t),\n                o = { stroke: t.color, path: i },\n                s = e.get(\"keyShape\"),\n                c = Object(a.mix)({}, r, s.attr(), o);\n              (c = Object(a.mix)(c, t.style)),\n                this.updateShape(t, e, c, !0),\n                this.updateLinkPoints(t, n);\n            },\n            updateLinkPoints: function (t, e) {\n              var n = this.getOptions({}).linkPoints,\n                i = e.find(function (t) {\n                  return \"link-point-left\" === t.get(\"className\");\n                }),\n                o = e.find(function (t) {\n                  return \"link-point-right\" === t.get(\"className\");\n                }),\n                s = e.find(function (t) {\n                  return \"link-point-top\" === t.get(\"className\");\n                }),\n                c = e.find(function (t) {\n                  return \"link-point-left-bottom\" === t.get(\"className\");\n                }),\n                u = e.find(function (t) {\n                  return \"link-point-right-bottom\" === t.get(\"className\");\n                }),\n                h = n,\n                l = i || o || s || c || u;\n              l && (h = l.attr());\n              var f = Object(a.mix)({}, h, t.linkPoints),\n                d = f.fill,\n                p = f.stroke,\n                g = f.lineWidth,\n                v = f.size / 2;\n              v || (v = f.r);\n              var y = t.linkPoints\n                  ? t.linkPoints\n                  : {\n                      left: void 0,\n                      right: void 0,\n                      top: void 0,\n                      leftBottom: void 0,\n                      rightBottom: void 0,\n                    },\n                m = y.left,\n                b = y.right,\n                x = y.top,\n                S = y.leftBottom,\n                w = y.rightBottom,\n                O = this.getSize(t)[0],\n                M = { r: v, fill: d, stroke: p, lineWidth: g },\n                k = Math.cos(0.1 * Math.PI) * O,\n                j = Math.sin(0.1 * Math.PI) * O;\n              o\n                ? b || void 0 === b\n                  ? o.attr(r(r({}, M), { x: k, y: -j }))\n                  : o.remove()\n                : b &&\n                  e.addShape(\"circle\", {\n                    attrs: r(r({}, M), { x: k, y: -j }),\n                    className: \"link-point-right\",\n                    name: \"link-point-right\",\n                    isAnchorPoint: !0,\n                  }),\n                (k = Math.cos(0.5 * Math.PI) * O),\n                (j = Math.sin(0.5 * Math.PI) * O),\n                s\n                  ? x || void 0 === x\n                    ? s.attr(r(r({}, M), { x: k, y: -j }))\n                    : s.remove()\n                  : x &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-top\",\n                      name: \"link-point-top\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(0.9 * Math.PI) * O),\n                (j = Math.sin(0.9 * Math.PI) * O),\n                i\n                  ? m || void 0 === m\n                    ? i.attr(r(r({}, M), { x: k, y: -j }))\n                    : i.remove()\n                  : m &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-left\",\n                      name: \"link-point-left\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(1.3 * Math.PI) * O),\n                (j = Math.sin(1.3 * Math.PI) * O),\n                c\n                  ? S || void 0 === S\n                    ? c.attr(r(r({}, M), { x: k, y: -j }))\n                    : c.remove()\n                  : S &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-left-bottom\",\n                      name: \"link-point-left-bottom\",\n                      isAnchorPoint: !0,\n                    }),\n                (k = Math.cos(1.7 * Math.PI) * O),\n                (j = Math.sin(1.7 * Math.PI) * O),\n                u\n                  ? w || void 0 === w\n                    ? u.attr(r(r({}, M), { x: k, y: -j }))\n                    : c.remove()\n                  : w &&\n                    e.addShape(\"circle\", {\n                      attrs: r(r({}, M), { x: k, y: -j }),\n                      className: \"link-point-right-bottom\",\n                      name: \"link-point-right-bottom\",\n                      isAnchorPoint: !0,\n                    });\n            },\n          },\n          \"single-node\",\n        );\n      var s = o.h.defaultSubjectColors;\n      Object(o.l)(\n        \"donut\",\n        {\n          options: {\n            size: o.e.defaultNode.size,\n            style: {\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultNode.style.stroke,\n              fill: o.e.defaultNode.style.fill,\n              lineWidth: o.e.defaultNode.style.lineWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.nodeLabel.style.fill,\n                fontSize: o.e.nodeLabel.style.fontSize,\n              },\n            },\n            linkPoints: {\n              top: !1,\n              right: !1,\n              bottom: !1,\n              left: !1,\n              size: o.e.defaultNode.linkPoints.size,\n              lineWidth: o.e.defaultNode.linkPoints.lineWidth,\n              fill: o.e.defaultNode.linkPoints.fill,\n              stroke: o.e.defaultNode.linkPoints.stroke,\n            },\n            icon: {\n              show: !1,\n              img: \"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg\",\n              width: 20,\n              height: 20,\n            },\n            stateStyles: r({}, o.e.nodeStateStyles),\n          },\n          shapeType: \"circle\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getOptions(t).icon,\n              i = void 0 === n ? {} : n,\n              o = this.getShapeStyle(t),\n              c = Object(a.deepMix)({}, i, t.icon),\n              u = e.addShape(\"circle\", {\n                attrs: o,\n                className: \"\".concat(this.type, \"-keyShape\"),\n                draggable: !0,\n                name: \"\".concat(this.type, \"-keyShape\"),\n              }),\n              h = c.width,\n              l = c.height,\n              f = c.show,\n              d = c.text;\n            f &&\n              (d\n                ? e.addShape(\"text\", {\n                    attrs: r(\n                      {\n                        x: 0,\n                        y: 0,\n                        fontSize: 12,\n                        fill: \"#000\",\n                        stroke: \"#000\",\n                        textBaseline: \"middle\",\n                        textAlign: \"center\",\n                      },\n                      c,\n                    ),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  })\n                : e.addShape(\"image\", {\n                    attrs: r({ x: -h / 2, y: -l / 2 }, c),\n                    className: \"\".concat(this.type, \"-icon\"),\n                    name: \"\".concat(this.type, \"-icon\"),\n                    draggable: !0,\n                  }));\n            var p = u.attr(\"r\"),\n              g = 0.6 * p,\n              v = (p + g) / 2,\n              y = t,\n              m = y.donutAttrs,\n              b = void 0 === m ? {} : m,\n              x = y.donutColorMap,\n              S = void 0 === x ? {} : x,\n              w = Object.keys(b).length;\n            if (b && w > 1) {\n              var O = [],\n                M = 0;\n              if (\n                (Object.keys(b).forEach(function (t) {\n                  var e = b[t] || 0;\n                  Object(a.isNumber)(e) &&\n                    (O.push({ key: t, value: e, color: S[t] }), (M += e));\n                }),\n                M)\n              ) {\n                var k = p - g;\n                if (1 === w)\n                  return void e.addShape(\"circle\", {\n                    attrs: {\n                      r: v,\n                      x: 0,\n                      y: 0,\n                      stroke: O[0].color || s[0],\n                      lineWidth: k,\n                    },\n                    name: \"fan-shape-0\",\n                  });\n                var j = [v, 0],\n                  C = 0;\n                O.forEach(function (t, n) {\n                  var r = t.value / M;\n                  if (!(r < 0.001))\n                    if ((r > 0.999 && (r = 1), 1 !== r)) {\n                      (t.percent = r),\n                        (t.angle = r * Math.PI * 2),\n                        (t.beginAgnle = C),\n                        (C += t.angle),\n                        (t.endAngle = C),\n                        (t.arcBegin = j),\n                        (t.arcEnd = [\n                          v * Math.cos(t.endAngle),\n                          -v * Math.sin(t.endAngle),\n                        ]);\n                      var i = t.angle > Math.PI ? 1 : 0,\n                        o = [\n                          [\"M\", t.arcBegin[0], t.arcBegin[1]],\n                          [\"A\", v, v, 0, i, 0, t.arcEnd[0], t.arcEnd[1]],\n                          [\"L\", t.arcEnd[0], t.arcEnd[1]],\n                        ];\n                      e.addShape(\"path\", {\n                        attrs: {\n                          path: o,\n                          lineWidth: k,\n                          stroke: t.color || s[n % s.length],\n                        },\n                        name: \"fan-shape-\".concat(n),\n                      }),\n                        (j = t.arcEnd);\n                    } else\n                      e.addShape(\"circle\", {\n                        attrs: {\n                          r: v,\n                          x: 0,\n                          y: 0,\n                          stroke: t.color || s[n % s.length],\n                          lineWidth: k,\n                        },\n                        name: \"fan-shape-\".concat(n),\n                      });\n                });\n              }\n            }\n            return this.drawLinkPoints(t, e), u;\n          },\n          update: void 0,\n        },\n        \"circle\",\n      );\n      var c = function (t) {\n          var e = t.x,\n            n = t.y;\n          return {\n            x: e,\n            y: n,\n            centerX: e,\n            centerY: n,\n            minX: e,\n            minY: n,\n            maxX: e,\n            maxY: n,\n            height: 0,\n            width: 0,\n          };\n        },\n        u = function (t) {\n          for (var e = [], n = {}, r = t.length - 1; r >= 0; r--) {\n            var i = t[r];\n            (i.id = \"\".concat(i.x, \"|||\").concat(i.y)),\n              (n[i.id] = i),\n              e.push(i);\n          }\n          return e;\n        },\n        h = function (t) {\n          return u(t);\n        },\n        l = function (t, e) {\n          return t.width || t.height\n            ? {\n                centerX: t.centerX,\n                centerY: t.centerY,\n                minX: t.minX - e,\n                minY: t.minY - e,\n                maxX: t.maxX + e,\n                maxY: t.maxY + e,\n                height: t.height + 2 * e,\n                width: t.width + 2 * e,\n              }\n            : t;\n        },\n        f = function (t, e, n) {\n          var r = (function (t, e) {\n            var n = Math.abs(t.x - e.centerX),\n              r = Math.abs(t.y - e.centerY);\n            return 0 === n && 0 === r ? 0 : n / e.width > r / e.height;\n          })(e, t);\n          if (0 === r) {\n            var i = t.centerX,\n              o = t.centerY;\n            return (\n              n.y < e.y\n                ? (o = t.minY)\n                : n.x > e.x\n                ? (i = t.maxX)\n                : n.x < e.x\n                ? (i = t.minX)\n                : n.x === e.x && (o = t.maxY),\n              { x: i, y: o }\n            );\n          }\n          return r\n            ? { x: e.x > t.centerX ? t.maxX : t.minX, y: e.y }\n            : { x: e.x, y: e.y > t.centerY ? t.maxY : t.minY };\n        },\n        d = function (t, e) {\n          var n = Math.min(t.minX, e.minX),\n            r = Math.min(t.minY, e.minY),\n            i = Math.max(t.maxX, e.maxX),\n            o = Math.max(t.maxY, e.maxY);\n          return {\n            centerX: (n + i) / 2,\n            centerY: (r + o) / 2,\n            minX: n,\n            minY: r,\n            maxX: i,\n            maxY: o,\n            height: o - r,\n            width: i - n,\n          };\n        },\n        p = function (t) {\n          return [\n            { x: t.minX, y: t.minY },\n            { x: t.maxX, y: t.minY },\n            { x: t.maxX, y: t.maxY },\n            { x: t.minX, y: t.maxY },\n          ];\n        },\n        g = function (t, e) {\n          var n = t.x,\n            r = t.y;\n          return n < e.minX || n > e.maxX || r < e.minY || r > e.maxY;\n        },\n        v = function (t, e) {\n          return Math.abs(t.x - e.x) + Math.abs(t.y - e.y);\n        },\n        y = function (t, e, n, r, i) {\n          return (\n            v(t, e) +\n            v(t, n) +\n            (function (t, e) {\n              var n = 0;\n              return (\n                e.forEach(function (e) {\n                  e && (t.x === e.x && (n += -2), t.y === e.y && (n += -2));\n                }),\n                n\n              );\n            })(t, [e, n, r, i])\n          );\n        },\n        m = function t(e, n, r, i, o) {\n          void 0 === o && (o = 0),\n            e.unshift(n[i]),\n            r[i] && r[i] !== i && o <= 100 && t(e, n, r, r[i], o + 1);\n        },\n        b = function (t, e, n, r) {\n          var i = n.x - t.x,\n            o = n.y - t.y,\n            a = r.x - t.x,\n            s = r.y - t.y,\n            c = n.x - e.x,\n            u = n.y - e.y,\n            h = r.x - e.x,\n            l = r.y - e.y;\n          return (\n            (i * s - o * a) * (c * l - u * h) <= 0 &&\n            (i * u - o * c) * (a * l - s * h) <= 0\n          );\n        },\n        x = function (t, e, n) {\n          if (n.width || n.height) {\n            var r = p(n),\n              i = r[0],\n              o = r[1],\n              a = r[2],\n              s = r[3];\n            return (\n              b(t, e, i, o) || b(t, e, i, s) || b(t, e, o, a) || b(t, e, a, s)\n            );\n          }\n          return !1;\n        },\n        S = function (t, e, n, r) {\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              if (t !== e && (t.x === e.x || t.y === e.y)) {\n                if (x(t, e, n) || x(t, e, r)) return;\n                i.push(t);\n              }\n            }),\n            u(i)\n          );\n        },\n        w = function (t, e) {\n          var n = [],\n            r = t[0];\n          return (\n            n.push(\"M\".concat(r.x, \" \").concat(r.y)),\n            t.forEach(function (r, i) {\n              var o = t[i + 1],\n                a = t[i + 2];\n              if (o && a)\n                if (\n                  (function (t, e, n) {\n                    return !(\n                      (t.x === e.x && e.x === n.x) ||\n                      (t.y === e.y && e.y === n.y)\n                    );\n                  })(r, o, a)\n                ) {\n                  var s = (function (t, e, n, r) {\n                      var i = v(t, e),\n                        o = v(n, e);\n                      return (\n                        i < r && (r = i),\n                        o < r && (r = o),\n                        [\n                          {\n                            x: e.x - (r / i) * (e.x - t.x),\n                            y: e.y - (r / i) * (e.y - t.y),\n                          },\n                          {\n                            x: e.x - (r / o) * (e.x - n.x),\n                            y: e.y - (r / o) * (e.y - n.y),\n                          },\n                        ]\n                      );\n                    })(r, o, a, e),\n                    c = s[0],\n                    u = s[1];\n                  n.push(\"L\".concat(c.x, \" \").concat(c.y)),\n                    n.push(\n                      \"Q\"\n                        .concat(o.x, \" \")\n                        .concat(o.y, \" \")\n                        .concat(u.x, \" \")\n                        .concat(u.y),\n                    ),\n                    n.push(\"L\".concat(u.x, \" \").concat(u.y));\n                } else n.push(\"L\".concat(o.x, \" \").concat(o.y));\n              else o && n.push(\"L\".concat(o.x, \" \").concat(o.y));\n            }),\n            n.join(\"\")\n          );\n        },\n        O = function (t, e, n, r, i) {\n          var o, a;\n          if (n && n.getType())\n            if (\"combo\" === n.getType()) {\n              ((o = n.getKeyShape().getCanvasBBox() || c(t)).centerX =\n                (o.minX + o.maxX) / 2),\n                (o.centerY = (o.minY + o.maxY) / 2);\n            } else o = n.getBBox();\n          else o = c(t);\n          if (r && r.getType())\n            if (\"combo\" === r.getType()) {\n              var s = r.getKeyShape().getBBox();\n              if (s) {\n                var b = r.getModel(),\n                  x = b.x,\n                  w = b.y;\n                ((a = {\n                  x: x,\n                  y: w,\n                  width: s.width,\n                  height: s.height,\n                  minX: s.minX + x,\n                  maxX: s.maxX + x,\n                  minY: s.minY + w,\n                  maxY: s.maxY + w,\n                }).centerX = (a.minX + a.maxX) / 2),\n                  (a.centerY = (a.minY + a.maxY) / 2);\n              } else a = c(e);\n            } else a = r && r.getBBox();\n          else a = c(e);\n          var O = l(o, i),\n            M = l(a, i),\n            k = f(O, t, e),\n            j = f(M, e, t),\n            C = (function (t) {\n              void 0 === t && (t = []);\n              var e = [],\n                n = [];\n              t.forEach(function (t) {\n                e.push(t.x), n.push(t.y);\n              });\n              var r = Math.min.apply(Math, e),\n                i = Math.max.apply(Math, e),\n                o = Math.min.apply(Math, n),\n                a = Math.max.apply(Math, n);\n              return {\n                centerX: (r + i) / 2,\n                centerY: (o + a) / 2,\n                maxX: i,\n                maxY: a,\n                minX: r,\n                minY: o,\n                height: a - o,\n                width: i - r,\n              };\n            })([k, j]),\n            E = d(O, C),\n            P = d(M, C),\n            A = [];\n          A = A.concat(p(E)).concat(p(P));\n          var I = { x: (t.x + e.x) / 2, y: (t.y + e.y) / 2 };\n          [C, E, P].forEach(function (t) {\n            A = A.concat(\n              (function (t, e) {\n                return (function (t, e) {\n                  return e < t.minX || e > t.maxX\n                    ? []\n                    : [\n                        { x: e, y: t.minY },\n                        { x: e, y: t.maxY },\n                      ];\n                })(t, e.x).concat(\n                  (function (t, e) {\n                    return e < t.minY || e > t.maxY\n                      ? []\n                      : [\n                          { x: t.minX, y: e },\n                          { x: t.maxX, y: e },\n                        ];\n                  })(t, e.y),\n                );\n              })(t, I).filter(function (t) {\n                return g(t, O) && g(t, M);\n              }),\n            );\n          }),\n            [\n              { x: k.x, y: j.y },\n              { x: j.x, y: k.y },\n            ].forEach(function (t) {\n              g(t, O) && g(t, M) && A.push(t);\n            }),\n            A.unshift(k),\n            A.push(j);\n          var T = (function (t, e, n, r, i, o, a) {\n            var s = [],\n              c = [e],\n              u = {},\n              h = {},\n              l = {};\n            (h[e.id] = 0), (l[e.id] = y(e, n, e));\n            var f,\n              d,\n              p,\n              g,\n              b,\n              x = {};\n            for (\n              t.forEach(function (t) {\n                x[t.id] = t;\n              });\n              c.length;\n\n            ) {\n              if (\n                ((f = void 0),\n                (d = 1 / 0),\n                c.forEach(function (t) {\n                  l[t.id] <= d && ((d = l[t.id]), (f = t));\n                }),\n                f === n)\n              ) {\n                var w = [];\n                return m(w, x, u, n.id), w;\n              }\n              (g = f),\n                (b = void 0),\n                (b = (p = c).indexOf(g)) > -1 && p.splice(b, 1),\n                s.push(f),\n                S(t, f, r, i).forEach(function (t) {\n                  if (-1 === s.indexOf(t)) {\n                    -1 === c.indexOf(t) && c.push(t);\n                    var r = l[f.id] + v(f, t);\n                    (h[t.id] && r >= h[t.id]) ||\n                      ((u[t.id] = f.id),\n                      (h[t.id] = r),\n                      (l[t.id] = h[t.id] + y(t, n, e, o, a)));\n                  }\n                });\n            }\n            return [e, n];\n          })((A = u(A)), k, j, o, a, t, e);\n          return T.unshift(t), T.push(e), h(T);\n        },\n        M = {\n          offset: 20,\n          maxAllowedDirectionChange: Math.PI / 2,\n          maximumLoops: 2e3,\n          gridSize: 10,\n          directions: [\n            { stepX: 1, stepY: 0 },\n            { stepX: -1, stepY: 0 },\n            { stepX: 0, stepY: 1 },\n            { stepX: 0, stepY: -1 },\n          ],\n          get penalties() {\n            return { 0: 0, 45: this.gridSize / 2, 90: this.gridSize / 2 };\n          },\n          distFunc: function (t, e) {\n            return Math.abs(t.x - e.x) + Math.abs(t.y - e.y);\n          },\n          fallbackRoute: function (t, e, n, r, i) {\n            return h(O(t, e, n, r, i.offset));\n          },\n        },\n        k =\n          (Math.PI,\n          function (t, e) {\n            var n = Math.round(Math.abs(t / e));\n            return n < 0 ? 0 : (t < 0 ? -1 : 1) * n;\n          }),\n        j = function (t, e) {\n          var n = e.x - t.x,\n            r = e.y - t.y;\n          return n || r ? Math.atan2(r, n) : 0;\n        },\n        C = function (t, e) {\n          var n = Math.abs(t - e);\n          return n > Math.PI ? 2 * Math.PI - n : n;\n        },\n        E = function (t, e, n) {\n          for (var r = 1 / 0, i = 0, o = e.length; i < o; i++) {\n            var a = n(t, e[i]);\n            a < r && (r = a);\n          }\n          return r;\n        },\n        P = function (t, e, n, r, i) {\n          var a = [];\n          if (!n) return [t];\n          var s = i.directions,\n            c = i.offset,\n            u = n.getBBox(),\n            h = e.x > u.minX && e.x < u.maxX && e.y > u.minY && e.y < u.maxY,\n            d = l(u, c);\n          for (var p in d) d[p] = k(d[p], i.gridSize);\n          if (h) {\n            for (var g = 0, v = s; g < v.length; g++) {\n              var y = v[g],\n                m = [\n                  [\n                    { x: d.minX, y: d.minY },\n                    { x: d.maxX, y: d.minY },\n                  ],\n                  [\n                    { x: d.minX, y: d.minY },\n                    { x: d.minX, y: d.maxY },\n                  ],\n                  [\n                    { x: d.maxX, y: d.minY },\n                    { x: d.maxX, y: d.maxY },\n                  ],\n                  [\n                    { x: d.minX, y: d.maxY },\n                    { x: d.maxX, y: d.maxY },\n                  ],\n                ];\n              for (p = 0; p < 4; p++) {\n                var b = m[p],\n                  S = o.h.getLineIntersect(\n                    t,\n                    { x: t.x + y.stepX * d.width, y: t.y + y.stepY * d.height },\n                    b[0],\n                    b[1],\n                  );\n                S &&\n                  !x(t, S, u) &&\n                  ((S.id = \"\".concat(S.x, \"|||\").concat(S.y)), a.push(S));\n              }\n            }\n            return a;\n          }\n          var w = f(d, t, r);\n          return (w.id = \"\".concat(w.x, \"|||\").concat(w.y)), [w];\n        },\n        A = function (t, e, n, r) {\n          var i = j(t, e);\n          if (!n[t.id]) {\n            var o = j(r, t);\n            return C(o, i);\n          }\n          var a = j({ x: n[t.id].x, y: n[t.id].y }, t);\n          return C(a, i);\n        },\n        I = function (t, e, n, r, i, o, a) {\n          var s = [r],\n            c = t.id,\n            u = t.x,\n            h = t.y,\n            l = { x: u, y: h, id: c };\n          for (\n            A(l, o, e, n) &&\n            s.unshift({\n              x: o.x === r.x ? r.x : l.x * a,\n              y: o.y === r.y ? r.y : l.y * a,\n            });\n            e[c] && e[c].id !== c;\n\n          ) {\n            var f = { x: u, y: h, id: c },\n              d = e[c].id,\n              p = e[c].x,\n              g = e[c].y,\n              v = { x: p, y: g, id: d };\n            A(v, f, e, n) &&\n              s.unshift({\n                x: v.x === f.x ? s[0].x : v.x * a,\n                y: v.y === f.y ? s[0].y : v.y * a,\n              }),\n              (c = d),\n              (u = p),\n              (h = g);\n          }\n          var y = u,\n            m = h;\n          return (\n            (s[0].x = y === n.x ? i.x : s[0].x),\n            (s[0].y = m === n.y ? i.y : s[0].y),\n            s.unshift(i),\n            s\n          );\n        },\n        T = function (t, e, n, r, i) {\n          if (isNaN(t.x) || isNaN(e.x)) return [];\n          var o = Object(a.deepMix)(M, i);\n          o.obstacles = o.obstacles || [];\n          var s = o.gridSize,\n            c = (function (t, e, n) {\n              var r = {};\n              return (\n                t.forEach(function (t) {\n                  if (t)\n                    for (\n                      var i = l(t.getBBox(), n), o = k(i.minX, e);\n                      o <= k(i.maxX, e);\n                      o += 1\n                    )\n                      for (var a = k(i.minY, e); a <= k(i.maxY, e); a += 1)\n                        r[\"\".concat(o, \"|||\").concat(a)] = !0;\n                }),\n                r\n              );\n            })(o.obstacles.concat([n, r]), s, o.offset),\n            u = { x: k(t.x, s), y: k(t.y, s) },\n            h = { x: k(e.x, s), y: k(e.y, s) };\n          (t.id = \"\".concat(u.x, \"|||\").concat(u.y)),\n            (e.id = \"\".concat(h.x, \"|||\").concat(h.y));\n          var f = P(u, t, n, h, o),\n            d = P(h, e, r, u, o);\n          f.forEach(function (t) {\n            delete c[t.id];\n          }),\n            d.forEach(function (t) {\n              delete c[t.id];\n            });\n          for (\n            var p = {}, g = {}, v = {}, y = {}, m = {}, b = 0;\n            b < f.length;\n            b++\n          ) {\n            var x = f[b];\n            (p[x.id] = x), (y[x.id] = 0), (m[x.id] = E(x, d, o.distFunc));\n          }\n          for (\n            var S, w, O, j, C, T, N, B = o.maximumLoops, L = o.penalties;\n            Object.keys(p).length > 0 &&\n            B > 0 &&\n            ((S = void 0),\n            (w = 1 / 0),\n            Object.keys(p).forEach(function (t) {\n              var e = p[t].id;\n              m[e] <= w && ((w = m[e]), (S = p[e]));\n            }),\n            S);\n\n          ) {\n            if (\n              d.findIndex(function (t) {\n                return t.x === S.x && t.y === S.y;\n              }) > -1\n            )\n              return I(S, v, u, e, t, h, s);\n            delete p[S.id], (g[S.id] = !0);\n            for (b = 0; b < o.directions.length; b++)\n              (O = o.directions[b]),\n                g[\n                  (j = {\n                    x: S.x + O.stepX,\n                    y: S.y + O.stepY,\n                    id: \"\"\n                      .concat(Math.round(S.x) + O.stepX, \"|||\")\n                      .concat(Math.round(S.y) + O.stepY),\n                  }).id\n                ] ||\n                  (N = A(S, j, v, u)) > o.maxAllowedDirectionChange ||\n                  c[j.id] ||\n                  (p[j.id] || (p[j.id] = j),\n                  (C = o.distFunc(S, j) + (isNaN(L[N]) ? s : L[N])),\n                  (T = y[S.id] + C),\n                  (y[j.id] && T >= y[j.id]) ||\n                    ((v[j.id] = S),\n                    (y[j.id] = T),\n                    (m[j.id] = T + E(j, d, o.distFunc))));\n            B -= 1;\n          }\n          return o.fallbackRoute(t, e, n, r, o);\n        };\n      Object(o.k)(\n        \"polyline\",\n        {\n          options: {\n            color: o.e.defaultEdge.color,\n            size: o.e.defaultEdge.size,\n            style: {\n              radius: 0,\n              offset: 15,\n              x: 0,\n              y: 0,\n              stroke: o.e.defaultEdge.style.stroke,\n              lineAppendWidth: o.e.defaultEdge.style.lineAppendWidth,\n            },\n            labelCfg: {\n              style: {\n                fill: o.e.edgeLabel.style.fill,\n                fontSize: o.e.edgeLabel.style.fontSize,\n              },\n            },\n            routeCfg: {\n              obstacles: [],\n              maxAllowedDirectionChange: Math.PI,\n              maximumLoops: 500,\n              gridSize: 10,\n            },\n            stateStyles: r({}, o.e.edgeStateStyles),\n          },\n          shapeType: \"polyline\",\n          labelPosition: \"center\",\n          drawShape: function (t, e) {\n            var n = this.getShapeStyle(t);\n            return (\n              0 === n.radius && delete n.radius,\n              e.addShape(\"path\", {\n                className: \"edge-shape\",\n                name: \"edge-shape\",\n                attrs: n,\n              })\n            );\n          },\n          getShapeStyle: function (t) {\n            var e = this.options.style,\n              n = { stroke: t.color },\n              r = Object(a.mix)({}, e, n, t.style);\n            (t = this.getPathPoints(t)),\n              (this.radius = r.radius),\n              (this.offset = r.offset);\n            var i = t.startPoint,\n              s = t.endPoint,\n              c = this.getControlPoints(t),\n              u = [i];\n            c && (u = u.concat(c)), u.push(s);\n            var h = t.sourceNode,\n              l = t.targetNode,\n              f = r.radius,\n              d = this.options.routeCfg,\n              p = Object(a.mix)({}, d, t.routeCfg);\n            p.offset = r.offset;\n            var g = this.getPath(u, h, l, f, p);\n            return (\n              ((Object(a.isArray)(g) && g.length <= 1) ||\n                (Object(a.isString)(g) && -1 === g.indexOf(\"L\"))) &&\n                (g = \"M0 0, L0 0\"),\n              (isNaN(i.x) || isNaN(i.y) || isNaN(s.x) || isNaN(s.y)) &&\n                (g = \"M0 0, L0 0\"),\n              Object(a.mix)({}, o.e.defaultEdge.style, r, {\n                lineWidth: t.size,\n                path: g,\n              })\n            );\n          },\n          updateShapeStyle: function (t, e) {\n            var n = e.getContainer();\n            if (e.isVisible()) {\n              var r = { stroke: t.color },\n                i =\n                  n.find(function (t) {\n                    return \"edge-shape\" === t.get(\"className\");\n                  }) || e.getKeyShape(),\n                o = t.size,\n                s = (t = this.getPathPoints(t)).startPoint,\n                c = t.endPoint,\n                u = this.getControlPoints(t),\n                h = [s];\n              u && (h = h.concat(u)), h.push(c);\n              var l = i.attr(),\n                f = Object(a.mix)({}, r, l, t.style),\n                d = t.sourceNode,\n                p = t.targetNode,\n                g = f.radius,\n                v = this.options.routeCfg,\n                y = Object(a.mix)({}, v, t.routeCfg);\n              y.offset = f.offset;\n              var m = this.getPath(h, d, p, g, y);\n              ((Object(a.isArray)(m) && m.length <= 1) ||\n                (Object(a.isString)(m) && -1 === m.indexOf(\"L\"))) &&\n                (m = \"M0 0, L0 0\"),\n                (isNaN(s.x) || isNaN(s.y) || isNaN(c.x) || isNaN(c.y)) &&\n                  (m = \"M0 0, L0 0\"),\n                l.endArrow &&\n                  !1 === f.endArrow &&\n                  (t.style.endArrow = { path: \"\" }),\n                l.startArrow &&\n                  !1 === f.startArrow &&\n                  (t.style.startArrow = { path: \"\" });\n              var b = Object(a.mix)(\n                r,\n                i.attr(),\n                { lineWidth: o, path: m },\n                t.style,\n              );\n              i && i.attr(b);\n            }\n          },\n          getPath: function (t, e, n, r, i) {\n            var s = i.offset,\n              c = i.simple;\n            if (!s || t.length > 2) {\n              if (r) return w(t, r);\n              var u = [];\n              return (\n                Object(a.each)(t, function (t, e) {\n                  0 === e ? u.push([\"M\", t.x, t.y]) : u.push([\"L\", t.x, t.y]);\n                }),\n                u\n              );\n            }\n            var h = c\n              ? O(t[t.length - 1], t[0], n, e, s)\n              : T(t[0], t[t.length - 1], e, n, i);\n            return h && h.length\n              ? r\n                ? w(h, r)\n                : o.h.pointsToPolygon(h)\n              : \"M0 0, L0 0\";\n          },\n        },\n        \"single-edge\",\n      );\n    },\n    424: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(2),\n        a = n(41),\n        s = a.a.cloneEvent,\n        c = a.a.isNaN,\n        u = Math.abs,\n        h = {\n          getDefaultCfg: function () {\n            return {\n              direction: \"both\",\n              enableOptimize: !1,\n              scalableRange: 0,\n              allowDragOnItem: !1,\n            };\n          },\n          getEvents: function () {\n            return {\n              dragstart: \"onDragStart\",\n              drag: \"onDragMove\",\n              dragend: \"onDragEnd\",\n            };\n          },\n          updateViewport: function (t) {\n            var e = this.origin,\n              n = +t.clientX,\n              r = +t.clientY;\n            if (!c(n) && !c(r)) {\n              var i = n - e.x,\n                o = r - e.y;\n              \"x\" === this.get(\"direction\")\n                ? (o = 0)\n                : \"y\" === this.get(\"direction\") && (i = 0),\n                (this.origin = { x: n, y: r });\n              var a = this.graph.get(\"width\"),\n                s = this.graph.get(\"height\"),\n                u = this.graph.get(\"canvas\").getCanvasBBox();\n              ((u.minX <= a + this.scalableRange &&\n                u.minX + i > a + this.scalableRange) ||\n                (u.maxX + this.scalableRange >= 0 &&\n                  u.maxX + this.scalableRange + i < 0)) &&\n                (i = 0),\n                ((u.minY <= s + this.scalableRange &&\n                  u.minY + o > s + this.scalableRange) ||\n                  (u.maxY + this.scalableRange >= 0 &&\n                    u.maxY + this.scalableRange + o < 0)) &&\n                  (o = 0),\n                this.graph.translate(i, o);\n            }\n          },\n          onDragStart: function (t) {\n            t.originalEvent;\n            if (this.shouldBegin.call(this, t)) {\n              var e = t.target,\n                n = e && e.isCanvas && e.isCanvas();\n              if (\n                (this.allowDragOnItem || n) &&\n                ((this.origin = { x: t.clientX, y: t.clientY }),\n                (this.dragging = !1),\n                this.enableOptimize)\n              ) {\n                for (\n                  var r = this.graph, i = r.getEdges(), o = 0, a = i.length;\n                  o < a;\n                  o++\n                ) {\n                  var s = i[o].get(\"group\").get(\"children\");\n                  s &&\n                    s.forEach(function (t) {\n                      t.set(\n                        \"ori-visibility\",\n                        t.get(\"ori-visibility\") || t.get(\"visible\"),\n                      ),\n                        t.hide();\n                    });\n                }\n                for (var c = r.getNodes(), u = 0, h = c.length; u < h; u++)\n                  for (\n                    var l = 0, f = c[u].getContainer().get(\"children\");\n                    l < f.length;\n                    l++\n                  ) {\n                    var d = f[l];\n                    d.get(\"isKeyShape\") ||\n                      (d.set(\n                        \"ori-visibility\",\n                        d.get(\"ori-visibility\") || d.get(\"visible\"),\n                      ),\n                      d.hide());\n                  }\n              }\n            }\n          },\n          onDragMove: function (t) {\n            this.graph;\n            var e = t.target,\n              n = e && e.isCanvas && e.isCanvas();\n            if ((this.allowDragOnItem || n) && ((t = s(t)), this.origin)) {\n              if (!this.dragging) {\n                if (\n                  u(this.origin.x - t.clientX) + u(this.origin.y - t.clientY) <\n                  10\n                )\n                  return;\n                this.shouldBegin.call(this, t) &&\n                  ((t.type = \"dragstart\"), (this.dragging = !0));\n              }\n              this.shouldUpdate.call(this, t) && this.updateViewport(t);\n            }\n          },\n          onDragEnd: function (t) {\n            var e = this.graph;\n            if (this.enableOptimize) {\n              for (var n = e.getEdges(), r = 0, i = n.length; r < i; r++) {\n                var o = n[r].get(\"group\").get(\"children\");\n                o &&\n                  o.forEach(function (t) {\n                    t.get(\"ori-visibility\") && t.show();\n                  });\n              }\n              for (var a = e.getNodes(), c = 0, u = a.length; c < u; c++)\n                for (\n                  var h = 0, l = a[c].getContainer().get(\"children\");\n                  h < l.length;\n                  h++\n                ) {\n                  var f = l[h];\n                  if (!f.get(\"isKeyShape\")) f.get(\"ori-visibility\") && f.show();\n                }\n            }\n            this.dragging\n              ? ((t = s(t)),\n                this.shouldEnd.call(this, t) && this.updateViewport(t),\n                (t.type = \"dragend\"),\n                this.endDrag())\n              : (this.origin = null);\n          },\n          endDrag: function () {\n            (this.origin = null), (this.dragging = !1), (this.dragbegin = !1);\n          },\n        },\n        l = n(22),\n        f = {\n          getDefaultCfg: function () {\n            return {\n              updateEdge: !0,\n              delegateStyle: {},\n              enableDelegate: !1,\n              onlyChangeComboSize: !1,\n              comboActiveState: \"\",\n              selectedState: \"selected\",\n            };\n          },\n          getEvents: function () {\n            return {\n              \"node:dragstart\": \"onDragStart\",\n              \"node:drag\": \"onDrag\",\n              \"node:dragend\": \"onDragEnd\",\n              \"combo:dragenter\": \"onDragEnter\",\n              \"combo:dragleave\": \"onDragLeave\",\n              \"combo:drop\": \"onDropCombo\",\n              \"node:drop\": \"onDropNode\",\n              \"canvas:drop\": \"onDropCanvas\",\n            };\n          },\n          validationCombo: function (t) {\n            return (\n              !(!this.origin || !t || t.destroyed) && \"combo\" === t.getType()\n            );\n          },\n          onDragStart: function (t) {\n            var e = this;\n            if (this.shouldBegin.call(this, t)) {\n              var n = t.item;\n              if (n && !n.destroyed && !n.hasLocked()) {\n                var r = t.target;\n                if (r) if (r.get(\"isAnchorPoint\")) return;\n                var o = this.graph;\n                (this.targets = []), (this.targetCombo = null);\n                var a = o.findAllByState(\"node\", this.selectedState),\n                  s = n.get(\"id\");\n                0 ===\n                a.filter(function (t) {\n                  var e = t.get(\"id\");\n                  return s === e;\n                }).length\n                  ? this.targets.push(n)\n                  : a.length > 1\n                  ? a.forEach(function (t) {\n                      t.hasLocked() || e.targets.push(t);\n                    })\n                  : this.targets.push(n);\n                var c = [];\n                this.targets.forEach(function (t) {\n                  c.push(Object(i.clone)(t.getModel()));\n                }),\n                  this.set(\"beforeDragNodes\", c),\n                  (this.origin = { x: t.x, y: t.y }),\n                  (this.point = {}),\n                  (this.originPoint = {});\n              }\n            }\n          },\n          onDrag: function (t) {\n            var e = this;\n            this.origin &&\n              this.shouldUpdate(this, t) &&\n              (this.get(\"enableDelegate\")\n                ? this.updateDelegate(t)\n                : this.targets.map(function (n) {\n                    e.update(n, t);\n                  }));\n          },\n          onDragEnd: function (t) {\n            if (this.origin && this.shouldEnd.call(this, t)) {\n              var e = t.item;\n              if (e) e.getContainer().set(\"capture\", !0);\n              this.delegateRect &&\n                (this.delegateRect.remove(), (this.delegateRect = null)),\n                this.updatePositions(t);\n              var n = this.graph;\n              if (n.get(\"enabledStack\")) {\n                var r = {\n                  before: {\n                    nodes: this.get(\"beforeDragNodes\"),\n                    edges: [],\n                    combos: [],\n                  },\n                  after: { nodes: [], edges: [], combos: [] },\n                };\n                this.targets.forEach(function (t) {\n                  r.after.nodes.push(t.getModel());\n                }),\n                  n.pushStack(\"update\", Object(i.clone)(r));\n              }\n              n.emit(\"dragnodeend\", { items: this.targets, targetItem: null }),\n                (this.point = {}),\n                (this.origin = null),\n                (this.originPoint = {}),\n                (this.targets.length = 0),\n                (this.targetCombo = null);\n            }\n          },\n          onDropCombo: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              this.updatePositions(t);\n              var n = this.graph;\n              if (\n                (this.comboActiveState &&\n                  n.setItemState(e, this.comboActiveState, !1),\n                (this.targetCombo = e),\n                this.onlyChangeComboSize)\n              )\n                n.updateCombos();\n              else {\n                var r = e.getModel();\n                this.targets.map(function (t) {\n                  t.getModel().comboId !== r.id && n.updateComboTree(t, r.id);\n                }),\n                  n.updateCombo(e);\n              }\n              n.emit(\"dragnodeend\", {\n                items: this.targets,\n                targetItem: this.targetCombo,\n              });\n            }\n          },\n          onDropCanvas: function (t) {\n            var e = this.graph;\n            this.targets &&\n              0 !== this.targets.length &&\n              (this.updatePositions(t),\n              this.onlyChangeComboSize\n                ? e.updateCombos()\n                : this.targets.map(function (t) {\n                    t.getModel().comboId && e.updateComboTree(t);\n                  }));\n          },\n          onDropNode: function (t) {\n            if (this.targets && 0 !== this.targets.length) {\n              var e = t.item;\n              this.updatePositions(t);\n              var n = this.graph,\n                r = e.getModel().comboId;\n              if (r) {\n                var i = n.findById(r);\n                this.comboActiveState &&\n                  n.setItemState(i, this.comboActiveState, !1),\n                  this.targets.map(function (t) {\n                    var e = t.getModel();\n                    r !== e.comboId && n.updateComboTree(t, r);\n                  }),\n                  n.updateCombo(i);\n              } else\n                this.targets.map(function (t) {\n                  t.getModel().comboId && n.updateComboTree(t);\n                });\n              n.emit(\"dragnodeend\", { items: this.targets, targetItem: e });\n            }\n          },\n          onDragEnter: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              var n = this.graph;\n              this.comboActiveState &&\n                n.setItemState(e, this.comboActiveState, !0);\n            }\n          },\n          onDragLeave: function (t) {\n            var e = t.item;\n            if (this.validationCombo(e)) {\n              var n = this.graph;\n              this.comboActiveState &&\n                n.setItemState(e, this.comboActiveState, !1);\n            }\n          },\n          updatePositions: function (t) {\n            var e = this;\n            this.targets &&\n              0 !== this.targets.length &&\n              this.get(\"enableDelegate\") &&\n              this.targets.map(function (n) {\n                return e.update(n, t);\n              });\n          },\n          update: function (t, e) {\n            var n = this.origin,\n              r = t.get(\"model\"),\n              i = t.get(\"id\");\n            this.point[i] || (this.point[i] = { x: r.x || 0, y: r.y || 0 });\n            var o = {\n              x: e.x - n.x + this.point[i].x,\n              y: e.y - n.y + this.point[i].y,\n            };\n            this.get(\"updateEdge\")\n              ? this.graph.updateItem(t, o, !1)\n              : t.updatePosition(o);\n          },\n          updateDelegate: function (t) {\n            this.graph;\n            if (this.delegateRect) {\n              var e = t.x - this.origin.x + this.originPoint.minX,\n                n = t.y - this.origin.y + this.originPoint.minY;\n              this.delegateRect.attr({ x: e, y: n });\n            } else {\n              var o = this.graph.get(\"group\"),\n                a = Object(i.deepMix)(\n                  {},\n                  l.a.delegateStyle,\n                  this.delegateStyle,\n                ),\n                s = this.calculationGroupPosition(t),\n                c = s.x,\n                u = s.y,\n                h = s.width,\n                f = s.height,\n                d = s.minX,\n                p = s.minY;\n              (this.originPoint = {\n                x: c,\n                y: u,\n                width: h,\n                height: f,\n                minX: d,\n                minY: p,\n              }),\n                (this.delegateRect = o.addShape(\"rect\", {\n                  attrs: Object(r.a)({ width: h, height: f, x: c, y: u }, a),\n                  name: \"rect-delegate-shape\",\n                }));\n            }\n          },\n          calculationGroupPosition: function (t) {\n            var e = this.graph.findAllByState(\"node\", this.selectedState);\n            0 === e.length && e.push(t.item);\n            for (\n              var n = 1 / 0, r = -1 / 0, i = 1 / 0, o = -1 / 0, a = 0;\n              a < e.length;\n              a++\n            ) {\n              var s = e[a].getBBox(),\n                c = s.minX,\n                u = s.minY,\n                h = s.maxX,\n                l = s.maxY;\n              c < n && (n = c),\n                u < i && (i = u),\n                h > r && (r = h),\n                l > o && (o = l);\n            }\n            return {\n              x: Math.floor(n),\n              y: Math.floor(i),\n              width: Math.ceil(r) - Math.floor(n),\n              height: Math.ceil(o) - Math.floor(i),\n              minX: n,\n              minY: i,\n            };\n          },\n        },\n        d = {\n          getDefaultCfg: function () {\n            return { multiple: !0, selectedState: \"selected\" };\n          },\n          getEvents: function () {\n            return {\n              \"node:tap\": \"onClick\",\n              \"combo:tap\": \"onClick\",\n              \"canvas:tap\": \"onCanvasClick\",\n            };\n          },\n          onClick: function (t) {\n            var e = this,\n              n = t.item;\n            if (n && !n.destroyed) {\n              var r = n.getType(),\n                o = e.graph,\n                a = e.multiple,\n                s = e.shouldUpdate;\n              if (e.shouldBegin.call(e, t)) {\n                if (!a) {\n                  var c = o.findAllByState(r, e.selectedState);\n                  Object(i.each)(c, function (t) {\n                    t !== n && o.setItemState(t, e.selectedState, !1);\n                  });\n                }\n                if (n.hasState(e.selectedState)) {\n                  s.call(e, t) && o.setItemState(n, e.selectedState, !1);\n                  var u = o.findAllByState(\"node\", e.selectedState),\n                    h = o.findAllByState(\"combo\", e.selectedState);\n                  o.emit(\"nodeselectchange\", {\n                    target: n,\n                    selectedItems: { nodes: u, combos: h },\n                    select: !1,\n                  });\n                } else {\n                  s.call(e, t) && o.setItemState(n, e.selectedState, !0);\n                  (u = o.findAllByState(\"node\", e.selectedState)),\n                    (h = o.findAllByState(\"combo\", e.selectedState));\n                  o.emit(\"nodeselectchange\", {\n                    target: n,\n                    selectedItems: { nodes: u, combos: h },\n                    select: !0,\n                  });\n                }\n              }\n            }\n          },\n          onCanvasClick: function () {\n            var t = this,\n              e = this.graph,\n              n = e.findAllByState(\"node\", this.selectedState);\n            Object(i.each)(n, function (n) {\n              e.setItemState(n, t.selectedState, !1);\n            });\n            var r = e.findAllByState(\"combo\", this.selectedState);\n            Object(i.each)(r, function (n) {\n              e.setItemState(n, t.selectedState, !1);\n            }),\n              e.emit(\"nodeselectchange\", {\n                selectedItems: { nodes: [], edges: [], combos: [] },\n                select: !1,\n              });\n          },\n        },\n        p = {\n          firstScale: null,\n          getDefaultCfg: function () {\n            return {\n              originScale: 1,\n              sensitivity: 2,\n              minZoom: void 0,\n              maxZoom: void 0,\n              enableOptimize: !1,\n              optimizeZoom: 0.1,\n              fixSelectedItems: {\n                fixAll: !1,\n                fixLineWidth: !1,\n                fixLabel: !1,\n                fixState: \"selected\",\n              },\n            };\n          },\n          getEvents: function () {\n            var t = this.fixSelectedItems;\n            return (\n              t.fixState || (t.fixState = \"selected\"),\n              t.fixAll && ((t.fixLineWidth = !0), (t.fixLabel = !0)),\n              { pinchstart: \"onPinch\", pinchmove: \"onPinch\" }\n            );\n          },\n          onPinch: function (t) {\n            t.preventDefault && t.preventDefault(),\n              t.originalEvent.preventDefault &&\n                t.originalEvent.preventDefault();\n            var e = t.originalEvent.pointers;\n            if (!(e.length < 2)) {\n              \"pinchstart\" === t.type &&\n                (this.firstScale = this.graph.getZoom());\n              var n =\n                  t.originalEvent.scale || t.originalEvent.srcEvent.extra.scale,\n                r = this.firstScale * n;\n              this.currentScale = r;\n              var i = this.get(\"minZoom\") || this.graph.get(\"minZoom\");\n              if (\n                !(\n                  r > (this.get(\"maxZoom\") || this.graph.get(\"maxZoom\")) ||\n                  r < i\n                )\n              ) {\n                var o = this.graph.get(\"canvas\"),\n                  a = e[0].clientX,\n                  s = e[0].clientY,\n                  c = e[1].clientX,\n                  u = e[1].clientY,\n                  h = o.getPointByClient((a + c) / 2, (s + u) / 2);\n                this.graph.zoomTo(r, { x: h.x, y: h.y });\n              }\n            }\n          },\n        },\n        g = [\"tap\", \"dbltap\"],\n        v = {\n          getDefaultCfg: function () {\n            return { trigger: \"tap\", onChange: function () {} };\n          },\n          getEvents: function () {\n            var t, e;\n            return (\n              g.includes(this.trigger)\n                ? (e = this.trigger)\n                : ((e = \"tap\"),\n                  console.warn(\n                    \"Behavior collapse-expand 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n                  )),\n              ((t = {})[\"node:\" + e] = \"onNodeTap\"),\n              (t.touchstart = \"onNodeTap\"),\n              t\n            );\n          },\n          onNodeTap: function (t) {\n            var e = t.item,\n              n = this.graph.findDataById(e.get(\"id\"));\n            if (n) {\n              var r = n.children;\n              if (r && 0 !== r.length) {\n                var i = !n.collapsed;\n                if (\n                  this.shouldBegin(t, i) &&\n                  ((n.collapsed = i),\n                  (e.getModel().collapsed = i),\n                  this.graph.emit(\"itemcollapsed\", {\n                    item: t.item,\n                    collapsed: i,\n                  }),\n                  this.shouldUpdate(t, i))\n                ) {\n                  try {\n                    this.onChange(e, i);\n                  } catch (t) {\n                    console.warn(t);\n                  }\n                  this.graph.layout();\n                }\n              }\n            }\n          },\n        },\n        y = a.a.calculationItemsBBox,\n        m = function (t, e) {\n          if (!1 !== e(t) && t) {\n            var n = t.get(\"combos\");\n            if (0 === n.length) return !1;\n            Object(i.each)(n, function (t) {\n              m(t, e);\n            });\n          }\n        },\n        b = [\"click\", \"dblclick\"],\n        x = [\"tap\", \"drag\"],\n        S = [\"shift\", \"ctrl\", \"control\", \"alt\", \"meta\", void 0],\n        w = {\n          bind: function (t) {\n            \"drag-canvas\" === this.type && t.get(\"canvas\").set(\"draggable\", !0);\n            var e = this.events;\n            (this.graph = t),\n              Object(i.each)(e, function (e, n) {\n                t.on(n, e);\n              });\n          },\n          unbind: function (t) {\n            var e = this.events;\n            \"drag-canvas\" === this.type && t.get(\"canvas\").set(\"draggable\", !1),\n              (this.graph = null),\n              Object(i.each)(e, function (e, n) {\n                t.off(n, e);\n              });\n          },\n        },\n        O = {\n          \"drag-canvas\": h,\n          \"zoom-canvas\": p,\n          \"drag-node\": f,\n          \"activate-relations\": {\n            getDefaultCfg: function () {\n              return {\n                activeState: \"active\",\n                inactiveState: \"inactive\",\n                resetSelected: !1,\n                shouldUpdate: function () {\n                  return !0;\n                },\n              };\n            },\n            getEvents: function () {\n              return {\n                \"node:tap\": \"setAllItemStates\",\n                \"canvas:tap\": \"clearAllItemStates\",\n              };\n            },\n            setAllItemStates: function (t) {\n              var e = t.item,\n                n = this.graph;\n              if (\n                ((this.item = e),\n                this.shouldUpdate(t.item, { event: t, action: \"activate\" }))\n              ) {\n                for (\n                  var r = this.activeState,\n                    i = this.inactiveState,\n                    o = n.getNodes(),\n                    a = n.getEdges(),\n                    s = o.length,\n                    c = a.length,\n                    u = 0;\n                  u < s;\n                  u++\n                ) {\n                  var h = o[u],\n                    l = h.hasState(\"selected\");\n                  this.resetSelected && l && n.setItemState(h, \"selected\", !1),\n                    n.setItemState(h, r, !1),\n                    i && n.setItemState(h, i, !0);\n                }\n                for (u = 0; u < c; u++) {\n                  var f = a[u];\n                  n.setItemState(f, r, !1), i && n.setItemState(f, i, !0);\n                }\n                i && n.setItemState(e, i, !1), n.setItemState(e, r, !0);\n                var d = e.getEdges(),\n                  p = d.length;\n                for (u = 0; u < p; u++) {\n                  var g = void 0;\n                  (g =\n                    (f = d[u]).getSource() === e\n                      ? f.getTarget()\n                      : f.getSource()),\n                    i && n.setItemState(g, i, !1),\n                    n.setItemState(g, r, !0),\n                    n.setItemState(f, i, !1),\n                    n.setItemState(f, r, !0),\n                    f.toFront();\n                }\n                n.emit(\"afteractivaterelations\", {\n                  item: t.item,\n                  action: \"activate\",\n                });\n              }\n            },\n            clearActiveState: function (t) {\n              var e = this.get(\"graph\");\n              if (\n                this.shouldUpdate(t.item, { event: t, action: \"deactivate\" })\n              ) {\n                var n = this.activeState,\n                  r = this.inactiveState,\n                  i = e.get(\"autoPaint\");\n                e.setAutoPaint(!1);\n                for (\n                  var o = e.getNodes(),\n                    a = e.getEdges(),\n                    s = o.length,\n                    c = a.length,\n                    u = 0;\n                  u < s;\n                  u++\n                ) {\n                  var h = o[u];\n                  e.clearItemStates(h, [n, r]);\n                }\n                for (u = 0; u < c; u++) {\n                  var l = a[u];\n                  e.clearItemStates(l, [n, r, \"deactivate\"]);\n                }\n                e.paint(),\n                  e.setAutoPaint(i),\n                  e.emit(\"afteractivaterelations\", {\n                    item: t.item || this.get(\"item\"),\n                    action: \"deactivate\",\n                  });\n              }\n            },\n            clearAllItemStates: function (t) {\n              var e = this.graph;\n              if (\n                this.shouldUpdate(t.item, { event: t, action: \"deactivate\" })\n              ) {\n                for (\n                  var n = this.activeState,\n                    r = this.inactiveState,\n                    i = e.getNodes(),\n                    o = e.getEdges(),\n                    a = i.length,\n                    s = o.length,\n                    c = 0;\n                  c < a;\n                  c++\n                ) {\n                  var u = i[c];\n                  e.clearItemStates(u, [n, r]);\n                }\n                for (c = 0; c < s; c++) {\n                  var h = o[c];\n                  e.clearItemStates(h, [n, r, \"deactivate\"]);\n                }\n                e.emit(\"afteractivaterelations\", {\n                  item: t.item || this.get(\"item\"),\n                  action: \"deactivate\",\n                });\n              }\n            },\n          },\n          \"click-select\": d,\n          \"collapse-expand\": v,\n          \"drag-combo\": {\n            getDefaultCfg: function () {\n              return {\n                enableDelegate: !1,\n                delegateStyle: {},\n                onlyChangeComboSize: !1,\n                activeState: \"\",\n                selectedState: \"selected\",\n              };\n            },\n            getEvents: function () {\n              return {\n                \"combo:dragstart\": \"onDragStart\",\n                \"combo:drag\": \"onDrag\",\n                \"combo:dragend\": \"onDragEnd\",\n                \"combo:drop\": \"onDrop\",\n                \"node:drop\": \"onNodeDrop\",\n                \"combo:dragenter\": \"onDragEnter\",\n                \"combo:dragleave\": \"onDragLeave\",\n              };\n            },\n            validationCombo: function (t) {\n              var e = t.item;\n              return (\n                !(!e || e.destroyed) &&\n                !!this.shouldUpdate(this, t) &&\n                \"combo\" === e.getType()\n              );\n            },\n            onDragStart: function (t) {\n              var e = this,\n                n = this.graph,\n                r = t.item;\n              if (this.validationCombo(t)) {\n                this.targets = [];\n                var i = n.findAllByState(\"combo\", this.selectedState),\n                  o = r.get(\"id\");\n                0 ===\n                i.filter(function (t) {\n                  var e = t.get(\"id\");\n                  return o === e;\n                }).length\n                  ? this.targets.push(r)\n                  : (this.targets = i),\n                  this.activeState &&\n                    this.targets.map(function (t) {\n                      var r = t.getModel();\n                      if (r.parentId) {\n                        var i = n.findById(r.parentId);\n                        i && n.setItemState(i, e.activeState, !0);\n                      }\n                    }),\n                  (this.point = {}),\n                  (this.originPoint = {}),\n                  (this.origin = { x: t.x, y: t.y }),\n                  (this.currentItemChildCombos = []),\n                  m(r, function (t) {\n                    if (t.destroyed) return !1;\n                    var n = t.getModel();\n                    return e.currentItemChildCombos.push(n.id), !0;\n                  });\n              }\n            },\n            onDrag: function (t) {\n              var e = this;\n              if (this.origin && this.validationCombo(t))\n                if (this.enableDelegate) this.updateDelegate(t);\n                else {\n                  if (this.activeState) {\n                    var n = this.graph,\n                      r = t.item,\n                      o = r.getModel(),\n                      a = n.getCombos(),\n                      s = r.getBBox(),\n                      c = s.centerX,\n                      u = s.centerY,\n                      h = s.width;\n                    a.filter(function (t) {\n                      var n = t.getModel();\n                      return (\n                        o.parentId,\n                        n.id !== o.id &&\n                          !e.currentItemChildCombos.includes(n.id)\n                      );\n                    }).map(function (t) {\n                      var r = t.getBBox(),\n                        i = r.centerX,\n                        o = r.centerY,\n                        a = r.width,\n                        s = c - i,\n                        l = u - o,\n                        f = 2 * Math.sqrt(s * s + l * l);\n                      h + a - f > 0.8 * h\n                        ? n.setItemState(t, e.activeState, !0)\n                        : n.setItemState(t, e.activeState, !1);\n                    });\n                  }\n                  Object(i.each)(this.targets, function (n) {\n                    e.updateCombo(n, t);\n                  });\n                }\n            },\n            updatePositions: function (t) {\n              var e = this;\n              this.enableDelegate &&\n                Object(i.each)(this.targets, function (n) {\n                  e.updateCombo(n, t);\n                });\n            },\n            onDrop: function (t) {\n              var e = this,\n                n = t.item;\n              if (n && this.targets && !n.destroyed) {\n                this.updatePositions(t);\n                var r = this.graph,\n                  i = n.getModel();\n                this.targets.map(function (t) {\n                  t.getModel().parentId !== i.id\n                    ? (e.activeState && r.setItemState(n, e.activeState, !1),\n                      e.onlyChangeComboSize\n                        ? r.updateCombo(t)\n                        : r.updateComboTree(t, i.id))\n                    : r.updateCombo(n);\n                }),\n                  this.end(n, t),\n                  (this.endComparison = !0);\n              }\n            },\n            onNodeDrop: function (t) {\n              var e = this;\n              if (this.targets && 0 !== this.targets.length) {\n                this.updatePositions(t);\n                var n,\n                  r = this.graph,\n                  i = t.item.getModel().comboId;\n                if (i) {\n                  if (this.activeState) {\n                    var o = r.findById(i);\n                    r.setItemState(o, this.activeState, !1);\n                  }\n                  this.targets.map(function (t) {\n                    e.onlyChangeComboSize\n                      ? r.updateCombo(t)\n                      : i !== t.getID() &&\n                        ((n = r.findById(i)),\n                        i !== t.getModel().parentId && r.updateComboTree(t, i));\n                  });\n                } else\n                  this.targets.map(function (t) {\n                    e.onlyChangeComboSize\n                      ? r.updateCombo(t)\n                      : t.getModel().comboId && r.updateComboTree(t);\n                  });\n                (this.endComparison = !0), this.end(n, t);\n              }\n            },\n            onDragEnter: function (t) {\n              if (this.origin && this.validationCombo(t)) {\n                var e = t.item,\n                  n = this.graph;\n                this.activeState && n.setItemState(e, this.activeState, !0);\n              }\n            },\n            onDragLeave: function (t) {\n              if (this.origin && this.validationCombo(t)) {\n                var e = t.item,\n                  n = this.graph;\n                this.activeState && n.setItemState(e, this.activeState, !1);\n              }\n            },\n            onDragEnd: function (t) {\n              if (this.targets && 0 !== this.targets.length) {\n                var e = t.item;\n                this.updatePositions(t);\n                var n = this.getParentCombo(e.getModel().parentId),\n                  r = this.graph;\n                n &&\n                  this.activeState &&\n                  r.setItemState(n, this.activeState, !1),\n                  this.end(void 0, t);\n              }\n            },\n            end: function (t, e) {\n              var n = this;\n              if (this.origin) {\n                var r = this.graph;\n                if (this.delegateShape)\n                  r.get(\"delegateGroup\").clear(), (this.delegateShape = null);\n                t &&\n                  this.activeState &&\n                  r.setItemState(t, this.activeState, !1),\n                  t ||\n                    this.targets.map(function (t) {\n                      n.onlyChangeComboSize\n                        ? r.updateCombo(t)\n                        : r.updateComboTree(t);\n                    }),\n                  (this.point = []),\n                  (this.origin = null),\n                  (this.originPoint = null),\n                  (this.targets.length = 0);\n              }\n            },\n            traverse: function (t, e) {\n              var n = this;\n              if (!1 !== e(t) && t) {\n                var r = t.get(\"combos\");\n                Object(i.each)(r, function (t) {\n                  n.traverse(t, e);\n                });\n                var o = t.get(\"nodes\");\n                Object(i.each)(o, function (t) {\n                  n.traverse(t, e);\n                });\n              }\n            },\n            updateCombo: function (t, e) {\n              var n = this;\n              this.traverse(t, function (t) {\n                return !t.destroyed && (n.updateSignleItem(t, e), !0);\n              });\n            },\n            updateSignleItem: function (t, e) {\n              var n = this.origin,\n                r = this.graph,\n                i = t.getModel(),\n                o = t.get(\"id\");\n              this.point[o] || (this.point[o] = { x: i.x, y: i.y });\n              var a = e.x - n.x + this.point[o].x,\n                s = e.y - n.y + this.point[o].y;\n              r.updateItem(t, { x: a, y: s });\n            },\n            getParentCombo: function (t) {\n              var e = this.graph;\n              if (t) {\n                var n = e.findById(t);\n                if (n) return n;\n              }\n            },\n            updateDelegate: function (t) {\n              var e = this.graph;\n              if (this.delegateShape) {\n                var n = t.x - this.origin.x + this.originPoint.minX,\n                  i = t.y - this.origin.y + this.originPoint.minY;\n                this.delegateShape.attr({ x: n, y: i });\n              } else {\n                var o = e.get(\"delegateGroup\"),\n                  a = null,\n                  s = (a =\n                    this.targets.length > 1\n                      ? y(this.targets)\n                      : this.targets[0].getBBox()).x,\n                  c = a.y,\n                  u = a.width,\n                  h = a.height,\n                  f = a.minX,\n                  d = a.minY;\n                this.originPoint = {\n                  x: s,\n                  y: c,\n                  width: u,\n                  height: h,\n                  minX: f,\n                  minY: d,\n                };\n                var p = Object(r.a)(\n                  Object(r.a)({}, l.a.delegateStyle),\n                  this.delegateStyle,\n                );\n                this.delegateShape = o.addShape(\"rect\", {\n                  attrs: Object(r.a)(\n                    { width: a.width, height: a.height, x: a.x, y: a.y },\n                    p,\n                  ),\n                  name: \"combo-delegate-shape\",\n                });\n              }\n            },\n          },\n          \"collapse-expand-combo\": {\n            getDefaultCfg: function () {\n              return { trigger: \"dblclick\", relayout: !0 };\n            },\n            getEvents: function () {\n              var t, e;\n              return (\n                b.includes(this.trigger)\n                  ? (e = this.trigger)\n                  : ((e = \"dblclick\"),\n                    console.warn(\n                      \"Behavior collapse-expand-group 的 trigger 参数不合法，请输入 'click' 或 'dblclick'\",\n                    )),\n                ((t = {})[\"combo:\" + e] = \"onComboClick\"),\n                t\n              );\n            },\n            onComboClick: function (t) {\n              var e = t.item,\n                n = this.graph,\n                r = this.relayout;\n              if (e && !e.destroyed && \"combo\" === e.getType()) {\n                var i = e.getModel().id;\n                i &&\n                  (n.collapseExpandCombo(i),\n                  r && n.get(\"layout\") ? n.layout() : n.refreshPositions());\n              }\n            },\n          },\n          \"create-edge\": {\n            getDefaultCfg: function () {\n              return { trigger: \"tap\", key: void 0, edgeConfig: {} };\n            },\n            getEvents: function () {\n              var t;\n              return (\n                x.indexOf(this.trigger.toLowerCase()) > -1 ||\n                  ((this.trigger = \"tap\"),\n                  console.warn(\n                    \"Behavior create-edge 的 trigger 参数不合法，请输入 'click'，'drag'\",\n                  )),\n                this.key &&\n                  -1 === S.indexOf(this.key.toLowerCase()) &&\n                  ((this.trigger = void 0),\n                  console.warn(\n                    \"Behavior create-edge 的 key 参数不合法，请输入 'shift'，'ctrl'，'alt'，'control'，或 undefined\",\n                  )),\n                \"drag\" === this.trigger\n                  ? (t = {\n                      \"node:dragstart\": \"onClick\",\n                      \"combo:dragstart\": \"onClick\",\n                      drag: \"updateEndPoint\",\n                      \"node:drop\": \"onClick\",\n                      \"combo:drop\": \"onClick\",\n                      dragend: \"onDragEnd\",\n                    })\n                  : \"click\" === this.trigger &&\n                    (t = {\n                      \"node:tap\": \"onClick\",\n                      mousemove: \"updateEndPoint\",\n                      \"edge:tap\": \"cancelCreating\",\n                      \"canvas:tap\": \"cancelCreating\",\n                      \"combo:tap\": \"onClick\",\n                    }),\n                this.key && ((t.keydown = \"onKeyDown\"), (t.keyup = \"onKeyUp\")),\n                t\n              );\n            },\n            onDragEnd: function (t) {\n              if (!this.key || this.keydown) {\n                var e = t.item;\n                (e && e.getID() !== this.source && \"node\" === e.getType()) ||\n                  this.cancelCreating({ item: this.edge, x: t.x, y: t.y });\n              }\n            },\n            onClick: function (t) {\n              if (!this.key || this.keydown) {\n                var e = t.item,\n                  n = this.graph,\n                  i = e.getModel();\n                if (this.addingEdge && this.edge) {\n                  if (!this.shouldEnd.call(this, t)) return;\n                  var o = { target: i.id };\n                  this.source === i.id && (o.type = \"loop\"),\n                    n.emit(\"beforecreateedge\", {}),\n                    n.updateItem(this.edge, o),\n                    n.emit(\"aftercreateedge\", { edge: this.edge }),\n                    this.edge.getKeyShape().set(\"capture\", !0),\n                    (this.edge = null),\n                    (this.addingEdge = !1);\n                } else {\n                  if (!this.shouldBegin.call(this, t)) return;\n                  (this.edge = n.addItem(\n                    \"edge\",\n                    Object(r.a)(\n                      { source: i.id, target: i.id },\n                      this.edgeConfig,\n                    ),\n                    !1,\n                  )),\n                    (this.source = i.id),\n                    (this.addingEdge = !0),\n                    this.edge.getKeyShape().set(\"capture\", !1);\n                }\n              }\n            },\n            updateEndPoint: function (t) {\n              if (!this.key || this.keydown) {\n                var e = { x: t.x, y: t.y };\n                this.graph.findById(this.source)\n                  ? this.addingEdge &&\n                    this.edge &&\n                    this.graph.updateItem(this.edge, { target: e }, !1)\n                  : (this.addingEdge = !1);\n              }\n            },\n            cancelCreating: function (t) {\n              if (!this.key || this.keydown) {\n                var e = this.graph,\n                  n = t.item;\n                if (\n                  this.addingEdge &&\n                  t.target &&\n                  t.target.isCanvas &&\n                  t.target.isCanvas()\n                )\n                  return (\n                    e.removeItem(this.edge, !1),\n                    (this.edge = null),\n                    void (this.addingEdge = !1)\n                  );\n                if (this.addingEdge && this.edge === n) {\n                  var r = !0;\n                  if (!e.get(\"groupByTypes\"))\n                    for (\n                      var i = t.x,\n                        o = t.y,\n                        a = e.getNodes(),\n                        s = a.length,\n                        c = 0;\n                      c < s;\n                      c++\n                    ) {\n                      var u = a[c],\n                        h = u.getModel(),\n                        l = u.getBBox();\n                      if (\n                        i <= l.maxX &&\n                        i >= l.minX &&\n                        o <= l.maxY &&\n                        o >= l.minY\n                      ) {\n                        if (\n                          !this.shouldEnd.call(this, {\n                            x: t.x,\n                            y: t.y,\n                            canvasX: t.canvasX,\n                            canvasY: t.canvasY,\n                            clientX: t.clientX,\n                            clientY: t.clientY,\n                            item: u,\n                          })\n                        )\n                          return;\n                        e.emit(\"beforecreateedge\", {}),\n                          e.updateItem(this.edge, { target: h.id }),\n                          e.emit(\"aftercreateedge\", { edge: this.edge }),\n                          (r = !1);\n                        break;\n                      }\n                    }\n                  r && e.removeItem(this.edge, !1),\n                    (this.edge = null),\n                    (this.addingEdge = !1);\n                }\n              }\n            },\n            onKeyDown: function (t) {\n              var e = t.key;\n              e &&\n                (e.toLowerCase() === this.key.toLowerCase()\n                  ? (this.keydown = !0)\n                  : (this.keydown = !1));\n            },\n            onKeyUp: function () {\n              this.addingEdge &&\n                this.edge &&\n                (this.graph.removeItem(this.edge, !1),\n                (this.addingEdge = !1),\n                (this.edge = null)),\n                (this.keydown = !1);\n            },\n          },\n        };\n      Object(i.each)(O, function (t, e) {\n        Object(o.i)(e, Object(r.a)(Object(r.a)({}, t), w));\n      });\n    },\n    46: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return o;\n      }),\n        n.d(e, \"c\", function () {\n          return a;\n        }),\n        n.d(e, \"a\", function () {\n          return s;\n        });\n      var r = n(6),\n        i = n(88);\n      function o(t, e, n) {\n        var i = 1;\n        return (\n          Object(r.h)(t) && (i = t.split(\"\\n\").length),\n          i > 1\n            ? e * i +\n              (function (t, e) {\n                return e ? e - t : 0.14 * t;\n              })(e, n) *\n                (i - 1)\n            : e\n        );\n      }\n      function a(t, e) {\n        var n = Object(i.a)(),\n          o = 0;\n        if (Object(r.e)(t) || \"\" === t) return o;\n        if ((n.save(), (n.font = e), Object(r.h)(t) && t.includes(\"\\n\"))) {\n          var a = t.split(\"\\n\");\n          Object(r.a)(a, function (t) {\n            var e = n.measureText(t).width;\n            o < e && (o = e);\n          });\n        } else o = n.measureText(t).width;\n        return n.restore(), o;\n      }\n      function s(t) {\n        var e = t.fontSize,\n          n = t.fontFamily,\n          r = t.fontWeight;\n        return [t.fontStyle, t.fontVariant, r, e + \"px\", n].join(\" \").trim();\n      }\n    },\n    5: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return r;\n      }),\n        n.d(e, \"b\", function () {\n          return _;\n        }),\n        n.d(e, \"c\", function () {\n          return R;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"create\", function () {\n          return o;\n        }),\n        n.d(r, \"fromMat4\", function () {\n          return a;\n        }),\n        n.d(r, \"clone\", function () {\n          return s;\n        }),\n        n.d(r, \"copy\", function () {\n          return c;\n        }),\n        n.d(r, \"fromValues\", function () {\n          return u;\n        }),\n        n.d(r, \"set\", function () {\n          return h;\n        }),\n        n.d(r, \"identity\", function () {\n          return l;\n        }),\n        n.d(r, \"transpose\", function () {\n          return f;\n        }),\n        n.d(r, \"invert\", function () {\n          return d;\n        }),\n        n.d(r, \"adjoint\", function () {\n          return p;\n        }),\n        n.d(r, \"determinant\", function () {\n          return g;\n        }),\n        n.d(r, \"multiply\", function () {\n          return v;\n        }),\n        n.d(r, \"translate\", function () {\n          return y;\n        }),\n        n.d(r, \"rotate\", function () {\n          return m;\n        }),\n        n.d(r, \"scale\", function () {\n          return b;\n        }),\n        n.d(r, \"fromTranslation\", function () {\n          return x;\n        }),\n        n.d(r, \"fromRotation\", function () {\n          return S;\n        }),\n        n.d(r, \"fromScaling\", function () {\n          return w;\n        }),\n        n.d(r, \"fromMat2d\", function () {\n          return O;\n        }),\n        n.d(r, \"fromQuat\", function () {\n          return M;\n        }),\n        n.d(r, \"normalFromMat4\", function () {\n          return k;\n        }),\n        n.d(r, \"projection\", function () {\n          return j;\n        }),\n        n.d(r, \"str\", function () {\n          return C;\n        }),\n        n.d(r, \"frob\", function () {\n          return E;\n        }),\n        n.d(r, \"add\", function () {\n          return P;\n        }),\n        n.d(r, \"subtract\", function () {\n          return A;\n        }),\n        n.d(r, \"multiplyScalar\", function () {\n          return I;\n        }),\n        n.d(r, \"multiplyScalarAndAdd\", function () {\n          return T;\n        }),\n        n.d(r, \"exactEquals\", function () {\n          return N;\n        }),\n        n.d(r, \"equals\", function () {\n          return B;\n        }),\n        n.d(r, \"mul\", function () {\n          return L;\n        }),\n        n.d(r, \"sub\", function () {\n          return D;\n        });\n      var i = n(7);\n      function o() {\n        var t = new i.a(9);\n        return (\n          i.a != Float32Array &&\n            ((t[1] = 0),\n            (t[2] = 0),\n            (t[3] = 0),\n            (t[5] = 0),\n            (t[6] = 0),\n            (t[7] = 0)),\n          (t[0] = 1),\n          (t[4] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function a(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[4]),\n          (t[4] = e[5]),\n          (t[5] = e[6]),\n          (t[6] = e[8]),\n          (t[7] = e[9]),\n          (t[8] = e[10]),\n          t\n        );\n      }\n      function s(t) {\n        var e = new i.a(9);\n        return (\n          (e[0] = t[0]),\n          (e[1] = t[1]),\n          (e[2] = t[2]),\n          (e[3] = t[3]),\n          (e[4] = t[4]),\n          (e[5] = t[5]),\n          (e[6] = t[6]),\n          (e[7] = t[7]),\n          (e[8] = t[8]),\n          e\n        );\n      }\n      function c(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = e[2]),\n          (t[3] = e[3]),\n          (t[4] = e[4]),\n          (t[5] = e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function u(t, e, n, r, o, a, s, c, u) {\n        var h = new i.a(9);\n        return (\n          (h[0] = t),\n          (h[1] = e),\n          (h[2] = n),\n          (h[3] = r),\n          (h[4] = o),\n          (h[5] = a),\n          (h[6] = s),\n          (h[7] = c),\n          (h[8] = u),\n          h\n        );\n      }\n      function h(t, e, n, r, i, o, a, s, c, u) {\n        return (\n          (t[0] = e),\n          (t[1] = n),\n          (t[2] = r),\n          (t[3] = i),\n          (t[4] = o),\n          (t[5] = a),\n          (t[6] = s),\n          (t[7] = c),\n          (t[8] = u),\n          t\n        );\n      }\n      function l(t) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function f(t, e) {\n        if (t === e) {\n          var n = e[1],\n            r = e[2],\n            i = e[5];\n          (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = n),\n            (t[5] = e[7]),\n            (t[6] = r),\n            (t[7] = i);\n        } else\n          (t[0] = e[0]),\n            (t[1] = e[3]),\n            (t[2] = e[6]),\n            (t[3] = e[1]),\n            (t[4] = e[4]),\n            (t[5] = e[7]),\n            (t[6] = e[2]),\n            (t[7] = e[5]),\n            (t[8] = e[8]);\n        return t;\n      }\n      function d(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8],\n          l = h * a - s * u,\n          f = -h * o + s * c,\n          d = u * o - a * c,\n          p = n * l + r * f + i * d;\n        return p\n          ? ((p = 1 / p),\n            (t[0] = l * p),\n            (t[1] = (-h * r + i * u) * p),\n            (t[2] = (s * r - i * a) * p),\n            (t[3] = f * p),\n            (t[4] = (h * n - i * c) * p),\n            (t[5] = (-s * n + i * o) * p),\n            (t[6] = d * p),\n            (t[7] = (-u * n + r * c) * p),\n            (t[8] = (a * n - r * o) * p),\n            t)\n          : null;\n      }\n      function p(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8];\n        return (\n          (t[0] = a * h - s * u),\n          (t[1] = i * u - r * h),\n          (t[2] = r * s - i * a),\n          (t[3] = s * c - o * h),\n          (t[4] = n * h - i * c),\n          (t[5] = i * o - n * s),\n          (t[6] = o * u - a * c),\n          (t[7] = r * c - n * u),\n          (t[8] = n * a - r * o),\n          t\n        );\n      }\n      function g(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2],\n          i = t[3],\n          o = t[4],\n          a = t[5],\n          s = t[6],\n          c = t[7],\n          u = t[8];\n        return e * (u * o - a * c) + n * (-u * i + a * s) + r * (c * i - o * s);\n      }\n      function v(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = n[0],\n          d = n[1],\n          p = n[2],\n          g = n[3],\n          v = n[4],\n          y = n[5],\n          m = n[6],\n          b = n[7],\n          x = n[8];\n        return (\n          (t[0] = f * r + d * a + p * u),\n          (t[1] = f * i + d * s + p * h),\n          (t[2] = f * o + d * c + p * l),\n          (t[3] = g * r + v * a + y * u),\n          (t[4] = g * i + v * s + y * h),\n          (t[5] = g * o + v * c + y * l),\n          (t[6] = m * r + b * a + x * u),\n          (t[7] = m * i + b * s + x * h),\n          (t[8] = m * o + b * c + x * l),\n          t\n        );\n      }\n      function y(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = n[0],\n          d = n[1];\n        return (\n          (t[0] = r),\n          (t[1] = i),\n          (t[2] = o),\n          (t[3] = a),\n          (t[4] = s),\n          (t[5] = c),\n          (t[6] = f * r + d * a + u),\n          (t[7] = f * i + d * s + h),\n          (t[8] = f * o + d * c + l),\n          t\n        );\n      }\n      function m(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = e[3],\n          s = e[4],\n          c = e[5],\n          u = e[6],\n          h = e[7],\n          l = e[8],\n          f = Math.sin(n),\n          d = Math.cos(n);\n        return (\n          (t[0] = d * r + f * a),\n          (t[1] = d * i + f * s),\n          (t[2] = d * o + f * c),\n          (t[3] = d * a - f * r),\n          (t[4] = d * s - f * i),\n          (t[5] = d * c - f * o),\n          (t[6] = u),\n          (t[7] = h),\n          (t[8] = l),\n          t\n        );\n      }\n      function b(t, e, n) {\n        var r = n[0],\n          i = n[1];\n        return (\n          (t[0] = r * e[0]),\n          (t[1] = r * e[1]),\n          (t[2] = r * e[2]),\n          (t[3] = i * e[3]),\n          (t[4] = i * e[4]),\n          (t[5] = i * e[5]),\n          (t[6] = e[6]),\n          (t[7] = e[7]),\n          (t[8] = e[8]),\n          t\n        );\n      }\n      function x(t, e) {\n        return (\n          (t[0] = 1),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = 1),\n          (t[5] = 0),\n          (t[6] = e[0]),\n          (t[7] = e[1]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function S(t, e) {\n        var n = Math.sin(e),\n          r = Math.cos(e);\n        return (\n          (t[0] = r),\n          (t[1] = n),\n          (t[2] = 0),\n          (t[3] = -n),\n          (t[4] = r),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function w(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = e[1]),\n          (t[5] = 0),\n          (t[6] = 0),\n          (t[7] = 0),\n          (t[8] = 1),\n          t\n        );\n      }\n      function O(t, e) {\n        return (\n          (t[0] = e[0]),\n          (t[1] = e[1]),\n          (t[2] = 0),\n          (t[3] = e[2]),\n          (t[4] = e[3]),\n          (t[5] = 0),\n          (t[6] = e[4]),\n          (t[7] = e[5]),\n          (t[8] = 1),\n          t\n        );\n      }\n      function M(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = n + n,\n          s = r + r,\n          c = i + i,\n          u = n * a,\n          h = r * a,\n          l = r * s,\n          f = i * a,\n          d = i * s,\n          p = i * c,\n          g = o * a,\n          v = o * s,\n          y = o * c;\n        return (\n          (t[0] = 1 - l - p),\n          (t[3] = h - y),\n          (t[6] = f + v),\n          (t[1] = h + y),\n          (t[4] = 1 - u - p),\n          (t[7] = d - g),\n          (t[2] = f - v),\n          (t[5] = d + g),\n          (t[8] = 1 - u - l),\n          t\n        );\n      }\n      function k(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = e[3],\n          a = e[4],\n          s = e[5],\n          c = e[6],\n          u = e[7],\n          h = e[8],\n          l = e[9],\n          f = e[10],\n          d = e[11],\n          p = e[12],\n          g = e[13],\n          v = e[14],\n          y = e[15],\n          m = n * s - r * a,\n          b = n * c - i * a,\n          x = n * u - o * a,\n          S = r * c - i * s,\n          w = r * u - o * s,\n          O = i * u - o * c,\n          M = h * g - l * p,\n          k = h * v - f * p,\n          j = h * y - d * p,\n          C = l * v - f * g,\n          E = l * y - d * g,\n          P = f * y - d * v,\n          A = m * P - b * E + x * C + S * j - w * k + O * M;\n        return A\n          ? ((A = 1 / A),\n            (t[0] = (s * P - c * E + u * C) * A),\n            (t[1] = (c * j - a * P - u * k) * A),\n            (t[2] = (a * E - s * j + u * M) * A),\n            (t[3] = (i * E - r * P - o * C) * A),\n            (t[4] = (n * P - i * j + o * k) * A),\n            (t[5] = (r * j - n * E - o * M) * A),\n            (t[6] = (g * O - v * w + y * S) * A),\n            (t[7] = (v * x - p * O - y * b) * A),\n            (t[8] = (p * w - g * x + y * m) * A),\n            t)\n          : null;\n      }\n      function j(t, e, n) {\n        return (\n          (t[0] = 2 / e),\n          (t[1] = 0),\n          (t[2] = 0),\n          (t[3] = 0),\n          (t[4] = -2 / n),\n          (t[5] = 0),\n          (t[6] = -1),\n          (t[7] = 1),\n          (t[8] = 1),\n          t\n        );\n      }\n      function C(t) {\n        return (\n          \"mat3(\" +\n          t[0] +\n          \", \" +\n          t[1] +\n          \", \" +\n          t[2] +\n          \", \" +\n          t[3] +\n          \", \" +\n          t[4] +\n          \", \" +\n          t[5] +\n          \", \" +\n          t[6] +\n          \", \" +\n          t[7] +\n          \", \" +\n          t[8] +\n          \")\"\n        );\n      }\n      function E(t) {\n        return Math.hypot(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);\n      }\n      function P(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]),\n          (t[1] = e[1] + n[1]),\n          (t[2] = e[2] + n[2]),\n          (t[3] = e[3] + n[3]),\n          (t[4] = e[4] + n[4]),\n          (t[5] = e[5] + n[5]),\n          (t[6] = e[6] + n[6]),\n          (t[7] = e[7] + n[7]),\n          (t[8] = e[8] + n[8]),\n          t\n        );\n      }\n      function A(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]),\n          (t[1] = e[1] - n[1]),\n          (t[2] = e[2] - n[2]),\n          (t[3] = e[3] - n[3]),\n          (t[4] = e[4] - n[4]),\n          (t[5] = e[5] - n[5]),\n          (t[6] = e[6] - n[6]),\n          (t[7] = e[7] - n[7]),\n          (t[8] = e[8] - n[8]),\n          t\n        );\n      }\n      function I(t, e, n) {\n        return (\n          (t[0] = e[0] * n),\n          (t[1] = e[1] * n),\n          (t[2] = e[2] * n),\n          (t[3] = e[3] * n),\n          (t[4] = e[4] * n),\n          (t[5] = e[5] * n),\n          (t[6] = e[6] * n),\n          (t[7] = e[7] * n),\n          (t[8] = e[8] * n),\n          t\n        );\n      }\n      function T(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          (t[3] = e[3] + n[3] * r),\n          (t[4] = e[4] + n[4] * r),\n          (t[5] = e[5] + n[5] * r),\n          (t[6] = e[6] + n[6] * r),\n          (t[7] = e[7] + n[7] * r),\n          (t[8] = e[8] + n[8] * r),\n          t\n        );\n      }\n      function N(t, e) {\n        return (\n          t[0] === e[0] &&\n          t[1] === e[1] &&\n          t[2] === e[2] &&\n          t[3] === e[3] &&\n          t[4] === e[4] &&\n          t[5] === e[5] &&\n          t[6] === e[6] &&\n          t[7] === e[7] &&\n          t[8] === e[8]\n        );\n      }\n      function B(t, e) {\n        var n = t[0],\n          r = t[1],\n          o = t[2],\n          a = t[3],\n          s = t[4],\n          c = t[5],\n          u = t[6],\n          h = t[7],\n          l = t[8],\n          f = e[0],\n          d = e[1],\n          p = e[2],\n          g = e[3],\n          v = e[4],\n          y = e[5],\n          m = e[6],\n          b = e[7],\n          x = e[8];\n        return (\n          Math.abs(n - f) <= i.b * Math.max(1, Math.abs(n), Math.abs(f)) &&\n          Math.abs(r - d) <= i.b * Math.max(1, Math.abs(r), Math.abs(d)) &&\n          Math.abs(o - p) <= i.b * Math.max(1, Math.abs(o), Math.abs(p)) &&\n          Math.abs(a - g) <= i.b * Math.max(1, Math.abs(a), Math.abs(g)) &&\n          Math.abs(s - v) <= i.b * Math.max(1, Math.abs(s), Math.abs(v)) &&\n          Math.abs(c - y) <= i.b * Math.max(1, Math.abs(c), Math.abs(y)) &&\n          Math.abs(u - m) <= i.b * Math.max(1, Math.abs(u), Math.abs(m)) &&\n          Math.abs(h - b) <= i.b * Math.max(1, Math.abs(h), Math.abs(b)) &&\n          Math.abs(l - x) <= i.b * Math.max(1, Math.abs(l), Math.abs(x))\n        );\n      }\n      var L = v,\n        D = A,\n        _ = n(53),\n        R = n(85);\n    },\n    52: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(8),\n        o = n(31),\n        a = n(12),\n        s = n(0),\n        c = n(3),\n        u = (function (t) {\n          function e() {\n            return (null !== t && t.apply(this, arguments)) || this;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.onCanvasChange = function (t) {\n              Object(a.h)(this, t);\n            }),\n            (e.prototype.getShapeBase = function () {\n              return o;\n            }),\n            (e.prototype.getGroupBase = function () {\n              return e;\n            }),\n            (e.prototype._applyClip = function (t, e) {\n              e &&\n                (t.save(),\n                Object(a.a)(t, e),\n                e.createPath(t),\n                t.restore(),\n                t.clip(),\n                e._afterDraw());\n            }),\n            (e.prototype.cacheCanvasBBox = function () {\n              var t = this.cfg.children,\n                e = [],\n                n = [];\n              Object(s.each)(t, function (t) {\n                var r = t.cfg.cacheCanvasBBox;\n                r &&\n                  t.cfg.isInView &&\n                  (e.push(r.minX, r.maxX), n.push(r.minY, r.maxY));\n              });\n              var r = null;\n              if (e.length) {\n                var i = Math.min.apply(null, e),\n                  o = Math.max.apply(null, e),\n                  a = Math.min.apply(null, n),\n                  u = Math.max.apply(null, n);\n                r = {\n                  minX: i,\n                  minY: a,\n                  x: i,\n                  y: a,\n                  maxX: o,\n                  maxY: u,\n                  width: o - i,\n                  height: u - a,\n                };\n                var h = this.cfg.canvas;\n                if (h) {\n                  var l = h.getViewRange();\n                  this.set(\"isInView\", Object(c.e)(r, l));\n                }\n              } else this.set(\"isInView\", !1);\n              this.set(\"cacheCanvasBBox\", r);\n            }),\n            (e.prototype.draw = function (t, e) {\n              var n = this.cfg.children,\n                r = !e || this.cfg.refresh;\n              n.length &&\n                r &&\n                (t.save(),\n                Object(a.a)(t, this),\n                this._applyClip(t, this.getClip()),\n                Object(a.d)(t, n, e),\n                t.restore(),\n                this.cacheCanvasBBox()),\n                (this.cfg.refresh = null),\n                this.set(\"hasChanged\", !1);\n            }),\n            (e.prototype.skipDraw = function () {\n              this.set(\"cacheCanvasBBox\", null), this.set(\"hasChanged\", !1);\n            }),\n            e\n          );\n        })(i.AbstractGroup);\n      e.a = u;\n    },\n    53: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return a;\n        }),\n        n.d(e, \"copy\", function () {\n          return s;\n        }),\n        n.d(e, \"set\", function () {\n          return c;\n        }),\n        n.d(e, \"add\", function () {\n          return u;\n        }),\n        n.d(e, \"subtract\", function () {\n          return h;\n        }),\n        n.d(e, \"multiply\", function () {\n          return l;\n        }),\n        n.d(e, \"divide\", function () {\n          return f;\n        }),\n        n.d(e, \"ceil\", function () {\n          return d;\n        }),\n        n.d(e, \"floor\", function () {\n          return p;\n        }),\n        n.d(e, \"min\", function () {\n          return g;\n        }),\n        n.d(e, \"max\", function () {\n          return v;\n        }),\n        n.d(e, \"round\", function () {\n          return y;\n        }),\n        n.d(e, \"scale\", function () {\n          return m;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return b;\n        }),\n        n.d(e, \"distance\", function () {\n          return x;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return S;\n        }),\n        n.d(e, \"length\", function () {\n          return w;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return O;\n        }),\n        n.d(e, \"negate\", function () {\n          return M;\n        }),\n        n.d(e, \"inverse\", function () {\n          return k;\n        }),\n        n.d(e, \"normalize\", function () {\n          return j;\n        }),\n        n.d(e, \"dot\", function () {\n          return C;\n        }),\n        n.d(e, \"cross\", function () {\n          return E;\n        }),\n        n.d(e, \"lerp\", function () {\n          return P;\n        }),\n        n.d(e, \"random\", function () {\n          return A;\n        }),\n        n.d(e, \"transformMat2\", function () {\n          return I;\n        }),\n        n.d(e, \"transformMat2d\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return N;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return B;\n        }),\n        n.d(e, \"rotate\", function () {\n          return L;\n        }),\n        n.d(e, \"angle\", function () {\n          return D;\n        }),\n        n.d(e, \"zero\", function () {\n          return _;\n        }),\n        n.d(e, \"str\", function () {\n          return R;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return F;\n        }),\n        n.d(e, \"equals\", function () {\n          return Y;\n        }),\n        n.d(e, \"len\", function () {\n          return z;\n        }),\n        n.d(e, \"sub\", function () {\n          return W;\n        }),\n        n.d(e, \"mul\", function () {\n          return q;\n        }),\n        n.d(e, \"div\", function () {\n          return V;\n        }),\n        n.d(e, \"dist\", function () {\n          return G;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return H;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return U;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Z;\n        });\n      var r = n(7);\n      function i() {\n        var t = new r.a(2);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(2);\n        return (e[0] = t[0]), (e[1] = t[1]), e;\n      }\n      function a(t, e) {\n        var n = new r.a(2);\n        return (n[0] = t), (n[1] = e), n;\n      }\n      function s(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), t;\n      }\n      function c(t, e, n) {\n        return (t[0] = e), (t[1] = n), t;\n      }\n      function u(t, e, n) {\n        return (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), t;\n      }\n      function h(t, e, n) {\n        return (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), t;\n      }\n      function l(t, e, n) {\n        return (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), t;\n      }\n      function f(t, e, n) {\n        return (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), t;\n      }\n      function d(t, e) {\n        return (t[0] = Math.ceil(e[0])), (t[1] = Math.ceil(e[1])), t;\n      }\n      function p(t, e) {\n        return (t[0] = Math.floor(e[0])), (t[1] = Math.floor(e[1])), t;\n      }\n      function g(t, e, n) {\n        return (t[0] = Math.min(e[0], n[0])), (t[1] = Math.min(e[1], n[1])), t;\n      }\n      function v(t, e, n) {\n        return (t[0] = Math.max(e[0], n[0])), (t[1] = Math.max(e[1], n[1])), t;\n      }\n      function y(t, e) {\n        return (t[0] = Math.round(e[0])), (t[1] = Math.round(e[1])), t;\n      }\n      function m(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), t;\n      }\n      function b(t, e, n, r) {\n        return (t[0] = e[0] + n[0] * r), (t[1] = e[1] + n[1] * r), t;\n      }\n      function x(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return Math.hypot(n, r);\n      }\n      function S(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1];\n        return n * n + r * r;\n      }\n      function w(t) {\n        var e = t[0],\n          n = t[1];\n        return Math.hypot(e, n);\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1];\n        return e * e + n * n;\n      }\n      function M(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), t;\n      }\n      function k(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), t;\n      }\n      function j(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = n * n + r * r;\n        return (\n          i > 0 && (i = 1 / Math.sqrt(i)),\n          (t[0] = e[0] * i),\n          (t[1] = e[1] * i),\n          t\n        );\n      }\n      function C(t, e) {\n        return t[0] * e[0] + t[1] * e[1];\n      }\n      function E(t, e, n) {\n        var r = e[0] * n[1] - e[1] * n[0];\n        return (t[0] = t[1] = 0), (t[2] = r), t;\n      }\n      function P(t, e, n, r) {\n        var i = e[0],\n          o = e[1];\n        return (t[0] = i + r * (n[0] - i)), (t[1] = o + r * (n[1] - o)), t;\n      }\n      function A(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI;\n        return (t[0] = Math.cos(n) * e), (t[1] = Math.sin(n) * e), t;\n      }\n      function I(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (t[0] = n[0] * r + n[2] * i), (t[1] = n[1] * r + n[3] * i), t;\n      }\n      function T(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[2] * i + n[4]),\n          (t[1] = n[1] * r + n[3] * i + n[5]),\n          t\n        );\n      }\n      function N(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[3] * i + n[6]),\n          (t[1] = n[1] * r + n[4] * i + n[7]),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1];\n        return (\n          (t[0] = n[0] * r + n[4] * i + n[12]),\n          (t[1] = n[1] * r + n[5] * i + n[13]),\n          t\n        );\n      }\n      function L(t, e, n, r) {\n        var i = e[0] - n[0],\n          o = e[1] - n[1],\n          a = Math.sin(r),\n          s = Math.cos(r);\n        return (t[0] = i * s - o * a + n[0]), (t[1] = i * a + o * s + n[1]), t;\n      }\n      function D(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = e[0],\n          o = e[1],\n          a = Math.sqrt(n * n + r * r) * Math.sqrt(i * i + o * o),\n          s = a && (n * i + r * o) / a;\n        return Math.acos(Math.min(Math.max(s, -1), 1));\n      }\n      function _(t) {\n        return (t[0] = 0), (t[1] = 0), t;\n      }\n      function R(t) {\n        return \"vec2(\" + t[0] + \", \" + t[1] + \")\";\n      }\n      function F(t, e) {\n        return t[0] === e[0] && t[1] === e[1];\n      }\n      function Y(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = e[0],\n          a = e[1];\n        return (\n          Math.abs(n - o) <= r.b * Math.max(1, Math.abs(n), Math.abs(o)) &&\n          Math.abs(i - a) <= r.b * Math.max(1, Math.abs(i), Math.abs(a))\n        );\n      }\n      var X,\n        z = w,\n        W = h,\n        q = l,\n        V = f,\n        G = x,\n        H = S,\n        U = O,\n        Z =\n          ((X = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 2),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (X[0] = t[a]),\n                (X[1] = t[a + 1]),\n                i(X, X, o),\n                (t[a] = X[0]),\n                (t[a + 1] = X[1]);\n            return t;\n          });\n    },\n    54: function (t, e, n) {\n      \"use strict\";\n      var r, i, o, a;\n      function s(t) {\n        r ||\n          ((r = document.createElement(\"table\")),\n          (i = document.createElement(\"tr\")),\n          (o = /^\\s*<(\\w+|!)[^>]*>/),\n          (a = {\n            tr: document.createElement(\"tbody\"),\n            tbody: r,\n            thead: r,\n            tfoot: r,\n            td: i,\n            th: i,\n            \"*\": document.createElement(\"div\"),\n          }));\n        var e = o.test(t) && RegExp.$1;\n        (e && e in a) || (e = \"*\");\n        var n = a[e];\n        (t = \"string\" == typeof t ? t.replace(/(^\\s*)|(\\s*$)/g, \"\") : t),\n          (n.innerHTML = \"\" + t);\n        var s = n.childNodes[0];\n        return s && n.contains(s) && n.removeChild(s), s;\n      }\n      function c(t, e) {\n        if (t) for (var n in e) e.hasOwnProperty(n) && (t.style[n] = e[n]);\n        return t;\n      }\n      n.d(e, \"a\", function () {\n        return s;\n      }),\n        n.d(e, \"b\", function () {\n          return c;\n        });\n    },\n    55: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      var o = n(209),\n        a = n(213),\n        s = [].slice,\n        c = [\"keyword\", \"gray\", \"hex\"],\n        u = {};\n      Object.keys(a).forEach(function (t) {\n        u[s.call(a[t].labels).sort().join(\"\")] = t;\n      });\n      var h = {};\n      function l(t, e) {\n        if (!(this instanceof l)) return new l(t, e);\n        if ((e && e in c && (e = null), e && !(e in a)))\n          throw new Error(\"Unknown model: \" + e);\n        var n, r, i, f, d, p, g, y, m;\n        if (null == t)\n          (this.model = \"rgb\"), (this.color = [0, 0, 0]), (this.valpha = 1);\n        else if (t instanceof l)\n          (this.model = t.model),\n            (this.color = t.color.slice()),\n            (this.valpha = t.valpha);\n        else if (\"string\" == typeof t) {\n          if (null === (r = o.get(t)))\n            throw new Error(\"Unable to parse color from string: \" + t);\n          (this.model = r.model),\n            (m = a[this.model].channels),\n            (this.color = r.value.slice(0, m)),\n            (this.valpha = \"number\" == typeof r.value[m] ? r.value[m] : 1);\n        } else if (t.length)\n          (this.model = e || \"rgb\"),\n            (m = a[this.model].channels),\n            (i = s.call(t, 0, m)),\n            (this.color = v(i, m)),\n            (this.valpha = \"number\" == typeof t[m] ? t[m] : 1);\n        else if (\"number\" == typeof t)\n          (t &= 16777215),\n            (this.model = \"rgb\"),\n            (this.color = [(t >> 16) & 255, (t >> 8) & 255, 255 & t]),\n            (this.valpha = 1);\n        else {\n          if (\n            ((this.valpha = 1),\n            (f = Object.keys(t)),\n            \"alpha\" in t &&\n              (f.splice(f.indexOf(\"alpha\"), 1),\n              (this.valpha = \"number\" == typeof t.alpha ? t.alpha : 0)),\n            !((d = f.sort().join(\"\")) in u))\n          )\n            throw new Error(\n              \"Unable to parse color from object: \" + JSON.stringify(t),\n            );\n          for (\n            this.model = u[d], p = a[this.model].labels, g = [], n = 0;\n            n < p.length;\n            n++\n          )\n            g.push(t[p[n]]);\n          this.color = v(g);\n        }\n        if (h[this.model])\n          for (m = a[this.model].channels, n = 0; n < m; n++)\n            (y = h[this.model][n]) && (this.color[n] = y(this.color[n]));\n        (this.valpha = Math.max(0, Math.min(1, this.valpha))),\n          Object.freeze && Object.freeze(this);\n      }\n      function f(t) {\n        return function (e) {\n          return (function (t, e) {\n            return Number(t.toFixed(e));\n          })(e, t);\n        };\n      }\n      function d(t, e, n) {\n        return (\n          (t = Array.isArray(t) ? t : [t]).forEach(function (t) {\n            (h[t] || (h[t] = []))[e] = n;\n          }),\n          (t = t[0]),\n          function (r) {\n            var i;\n            return arguments.length\n              ? (n && (r = n(r)), ((i = this[t]()).color[e] = r), i)\n              : ((i = this[t]().color[e]), n && (i = n(i)), i);\n          }\n        );\n      }\n      function p(t) {\n        return function (e) {\n          return Math.max(0, Math.min(t, e));\n        };\n      }\n      function g(t) {\n        return Array.isArray(t) ? t : [t];\n      }\n      function v(t, e) {\n        var n;\n        for (n = 0; n < e; n++) \"number\" != typeof t[n] && (t[n] = 0);\n        return t;\n      }\n      (l.prototype = {\n        toString: function () {\n          return this.string();\n        },\n        toJSON: function () {\n          return this[this.model]();\n        },\n        string: function (t) {\n          var e = this.model in o.to ? this : this.rgb(),\n            n =\n              1 === (e = e.round(\"number\" == typeof t ? t : 1)).valpha\n                ? e.color\n                : e.color.concat(this.valpha);\n          return o.to[e.model](n);\n        },\n        percentString: function (t) {\n          var e = this.rgb().round(\"number\" == typeof t ? t : 1),\n            n = 1 === e.valpha ? e.color : e.color.concat(this.valpha);\n          return o.to.rgb.percent(n);\n        },\n        array: function () {\n          return 1 === this.valpha\n            ? this.color.slice()\n            : this.color.concat(this.valpha);\n        },\n        object: function () {\n          var t,\n            e = {},\n            n = a[this.model].channels,\n            r = a[this.model].labels;\n          for (t = 0; t < n; t++) e[r[t]] = this.color[t];\n          return 1 !== this.valpha && (e.alpha = this.valpha), e;\n        },\n        unitArray: function () {\n          var t = this.rgb().color;\n          return (\n            (t[0] /= 255),\n            (t[1] /= 255),\n            (t[2] /= 255),\n            1 !== this.valpha && t.push(this.valpha),\n            t\n          );\n        },\n        unitObject: function () {\n          var t = this.rgb().object();\n          return (\n            (t.r /= 255),\n            (t.g /= 255),\n            (t.b /= 255),\n            1 !== this.valpha && (t.alpha = this.valpha),\n            t\n          );\n        },\n        round: function (t) {\n          return (\n            (t = Math.max(t || 0, 0)),\n            new l(this.color.map(f(t)).concat(this.valpha), this.model)\n          );\n        },\n        alpha: function (t) {\n          return arguments.length\n            ? new l(this.color.concat(Math.max(0, Math.min(1, t))), this.model)\n            : this.valpha;\n        },\n        red: d(\"rgb\", 0, p(255)),\n        green: d(\"rgb\", 1, p(255)),\n        blue: d(\"rgb\", 2, p(255)),\n        hue: d([\"hsl\", \"hsv\", \"hsl\", \"hwb\", \"hcg\"], 0, function (t) {\n          return ((t % 360) + 360) % 360;\n        }),\n        saturationl: d(\"hsl\", 1, p(100)),\n        lightness: d(\"hsl\", 2, p(100)),\n        saturationv: d(\"hsv\", 1, p(100)),\n        value: d(\"hsv\", 2, p(100)),\n        chroma: d(\"hcg\", 1, p(100)),\n        gray: d(\"hcg\", 2, p(100)),\n        white: d(\"hwb\", 1, p(100)),\n        wblack: d(\"hwb\", 2, p(100)),\n        cyan: d(\"cmyk\", 0, p(100)),\n        magenta: d(\"cmyk\", 1, p(100)),\n        yellow: d(\"cmyk\", 2, p(100)),\n        black: d(\"cmyk\", 3, p(100)),\n        x: d(\"xyz\", 0, p(100)),\n        y: d(\"xyz\", 1, p(100)),\n        z: d(\"xyz\", 2, p(100)),\n        l: d(\"lab\", 0, p(100)),\n        a: d(\"lab\", 1),\n        b: d(\"lab\", 2),\n        keyword: function (t) {\n          return arguments.length\n            ? new l(t)\n            : a[this.model].keyword(this.color);\n        },\n        hex: function (t) {\n          return arguments.length\n            ? new l(t)\n            : o.to.hex(this.rgb().round().color);\n        },\n        rgbNumber: function () {\n          var t = this.rgb().color;\n          return ((255 & t[0]) << 16) | ((255 & t[1]) << 8) | (255 & t[2]);\n        },\n        luminosity: function () {\n          var t,\n            e,\n            n = this.rgb().color,\n            r = [];\n          for (t = 0; t < n.length; t++)\n            (e = n[t] / 255),\n              (r[t] =\n                e <= 0.03928 ? e / 12.92 : Math.pow((e + 0.055) / 1.055, 2.4));\n          return 0.2126 * r[0] + 0.7152 * r[1] + 0.0722 * r[2];\n        },\n        contrast: function (t) {\n          var e = this.luminosity(),\n            n = t.luminosity();\n          return e > n ? (e + 0.05) / (n + 0.05) : (n + 0.05) / (e + 0.05);\n        },\n        level: function (t) {\n          var e = this.contrast(t);\n          return e >= 7.1 ? \"AAA\" : e >= 4.5 ? \"AA\" : \"\";\n        },\n        isDark: function () {\n          var t = this.rgb().color;\n          return (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3 < 128;\n        },\n        isLight: function () {\n          return !this.isDark();\n        },\n        negate: function () {\n          var t,\n            e = this.rgb();\n          for (t = 0; t < 3; t++) e.color[t] = 255 - e.color[t];\n          return e;\n        },\n        lighten: function (t) {\n          var e = this.hsl();\n          return (e.color[2] += e.color[2] * t), e;\n        },\n        darken: function (t) {\n          var e = this.hsl();\n          return (e.color[2] -= e.color[2] * t), e;\n        },\n        saturate: function (t) {\n          var e = this.hsl();\n          return (e.color[1] += e.color[1] * t), e;\n        },\n        desaturate: function (t) {\n          var e = this.hsl();\n          return (e.color[1] -= e.color[1] * t), e;\n        },\n        whiten: function (t) {\n          var e = this.hwb();\n          return (e.color[1] += e.color[1] * t), e;\n        },\n        blacken: function (t) {\n          var e = this.hwb();\n          return (e.color[2] += e.color[2] * t), e;\n        },\n        grayscale: function () {\n          var t = this.rgb().color,\n            e = 0.3 * t[0] + 0.59 * t[1] + 0.11 * t[2];\n          return l.rgb(e, e, e);\n        },\n        fade: function (t) {\n          return this.alpha(this.valpha - this.valpha * t);\n        },\n        opaquer: function (t) {\n          return this.alpha(this.valpha + this.valpha * t);\n        },\n        rotate: function (t) {\n          var e = this.hsl(),\n            n = e.color[0];\n          return (\n            (n = (n = (n + t) % 360) < 0 ? 360 + n : n), (e.color[0] = n), e\n          );\n        },\n        mix: function (t, e) {\n          if (!t || !t.rgb)\n            throw new Error(\n              'Argument to \"mix\" was not a Color instance, but rather an instance of ' +\n                i(t),\n            );\n          var n = t.rgb(),\n            r = this.rgb(),\n            o = void 0 === e ? 0.5 : e,\n            a = 2 * o - 1,\n            s = n.alpha() - r.alpha(),\n            c = ((a * s == -1 ? a : (a + s) / (1 + a * s)) + 1) / 2,\n            u = 1 - c;\n          return l.rgb(\n            c * n.red() + u * r.red(),\n            c * n.green() + u * r.green(),\n            c * n.blue() + u * r.blue(),\n            n.alpha() * o + r.alpha() * (1 - o),\n          );\n        },\n      }),\n        Object.keys(a).forEach(function (t) {\n          if (-1 === c.indexOf(t)) {\n            var e = a[t].channels;\n            (l.prototype[t] = function () {\n              if (this.model === t) return new l(this);\n              if (arguments.length) return new l(arguments, t);\n              var n = \"number\" == typeof arguments[e] ? e : this.valpha;\n              return new l(g(a[this.model][t].raw(this.color)).concat(n), t);\n            }),\n              (l[t] = function (n) {\n                return (\n                  \"number\" == typeof n && (n = v(s.call(arguments), e)),\n                  new l(n, t)\n                );\n              });\n          }\n        }),\n        (t.exports = l);\n    },\n    6: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"j\", function () {\n        return i;\n      }),\n        n.d(e, \"c\", function () {\n          return o;\n        }),\n        n.d(e, \"g\", function () {\n          return a;\n        }),\n        n.d(e, \"b\", function () {\n          return s;\n        });\n      var r = n(0);\n      function i(t, e) {\n        var n = t.indexOf(e);\n        -1 !== n && t.splice(n, 1);\n      }\n      n.d(e, \"e\", function () {\n        return r.isNil;\n      }),\n        n.d(e, \"d\", function () {\n          return r.isFunction;\n        }),\n        n.d(e, \"h\", function () {\n          return r.isString;\n        }),\n        n.d(e, \"f\", function () {\n          return r.isObject;\n        }),\n        n.d(e, \"i\", function () {\n          return r.mix;\n        }),\n        n.d(e, \"a\", function () {\n          return r.each;\n        }),\n        n.d(e, \"k\", function () {\n          return r.upperFirst;\n        });\n      var o = \"undefined\" != typeof window && void 0 !== window.document;\n      function a(t, e) {\n        if (t.isCanvas()) return !0;\n        for (var n = e.getParent(), r = !1; n; ) {\n          if (n === t) {\n            r = !0;\n            break;\n          }\n          n = n.getParent();\n        }\n        return r;\n      }\n      function s(t) {\n        return t.cfg.visible && t.cfg.capture;\n      }\n    },\n    62: function (t, e, n) {\n      \"use strict\";\n      var r,\n        i =\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.getLayoutByName = e.unRegisterLayout = e.registerLayout = void 0);\n      var o = n(66),\n        a = n(216),\n        s = new Map();\n      e.registerLayout = function (t, e) {\n        var n;\n        s.get(t) &&\n          console.warn(\n            \"The layout with the name \" +\n              t +\n              \" exists already, it will be overridden\",\n          ),\n          a.isObject(e)\n            ? ((n = (function (t) {\n                function n(n) {\n                  var r = t.call(this) || this,\n                    i = r,\n                    o = {},\n                    a = i.getDefaultCfg();\n                  return (\n                    Object.assign(o, a, e, n),\n                    Object.keys(o).forEach(function (t) {\n                      var e = o[t];\n                      i[t] = e;\n                    }),\n                    r\n                  );\n                }\n                return i(n, t), n;\n              })(o.Base)),\n              s.set(t, n))\n            : s.set(t, e);\n      };\n      e.unRegisterLayout = function (t) {\n        s.has(t) && s.delete(t);\n      };\n      e.getLayoutByName = function (t) {\n        return s.has(t) ? s.get(t) : null;\n      };\n    },\n    63: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return s;\n      });\n      var r = n(3);\n      function i(t) {\n        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);\n      }\n      function o(t, e) {\n        return i(t) * i(e) ? (t[0] * e[0] + t[1] * e[1]) / (i(t) * i(e)) : 1;\n      }\n      function a(t, e) {\n        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(o(t, e));\n      }\n      function s(t, e) {\n        var n = e[1],\n          i = e[2],\n          s = Object(r.m)(Object(r.n)(e[3]), 2 * Math.PI),\n          c = e[4],\n          u = e[5],\n          h = t[0],\n          l = t[1],\n          f = e[6],\n          d = e[7],\n          p = (Math.cos(s) * (h - f)) / 2 + (Math.sin(s) * (l - d)) / 2,\n          g = (-1 * Math.sin(s) * (h - f)) / 2 + (Math.cos(s) * (l - d)) / 2,\n          v = (p * p) / (n * n) + (g * g) / (i * i);\n        v > 1 && ((n *= Math.sqrt(v)), (i *= Math.sqrt(v)));\n        var y = n * n * (g * g) + i * i * (p * p),\n          m = y ? Math.sqrt((n * n * (i * i) - y) / y) : 1;\n        c === u && (m *= -1), isNaN(m) && (m = 0);\n        var b = i ? (m * n * g) / i : 0,\n          x = n ? (m * -i * p) / n : 0,\n          S = (h + f) / 2 + Math.cos(s) * b - Math.sin(s) * x,\n          w = (l + d) / 2 + Math.sin(s) * b + Math.cos(s) * x,\n          O = [(p - b) / n, (g - x) / i],\n          M = [(-1 * p - b) / n, (-1 * g - x) / i],\n          k = a([1, 0], O),\n          j = a(O, M);\n        return (\n          o(O, M) <= -1 && (j = Math.PI),\n          o(O, M) >= 1 && (j = 0),\n          0 === u && j > 0 && (j -= 2 * Math.PI),\n          1 === u && j < 0 && (j += 2 * Math.PI),\n          {\n            cx: S,\n            cy: w,\n            rx: Object(r.j)(t, [f, d]) ? 0 : n,\n            ry: Object(r.j)(t, [f, d]) ? 0 : i,\n            startAngle: k,\n            endAngle: k + j,\n            xRotation: s,\n            arcFlag: c,\n            sweepFlag: u,\n          }\n        );\n      }\n    },\n    64: function (t, e, n) {\n      \"use strict\";\n      var r,\n        i =\n          ((r = function (t, e) {\n            return (r =\n              Object.setPrototypeOf ||\n              ({ __proto__: [] } instanceof Array &&\n                function (t, e) {\n                  t.__proto__ = e;\n                }) ||\n              function (t, e) {\n                for (var n in e)\n                  Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);\n              })(t, e);\n          }),\n          function (t, e) {\n            if (\"function\" != typeof e && null !== e)\n              throw new TypeError(\n                \"Class extends value \" +\n                  String(e) +\n                  \" is not a constructor or null\",\n              );\n            function n() {\n              this.constructor = t;\n            }\n            r(t, e),\n              (t.prototype =\n                null === e\n                  ? Object.create(e)\n                  : ((n.prototype = e.prototype), new n()));\n          });\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.RandomLayout = void 0);\n      var o = (function (t) {\n        function e(e) {\n          var n = t.call(this) || this;\n          return (\n            (n.center = [0, 0]),\n            (n.width = 300),\n            (n.height = 300),\n            (n.nodes = []),\n            (n.edges = []),\n            (n.onLayoutEnd = function () {}),\n            n.updateCfg(e),\n            n\n          );\n        }\n        return (\n          i(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { center: [0, 0], width: 300, height: 300 };\n          }),\n          (e.prototype.execute = function () {\n            var t = this,\n              e = t.nodes,\n              n = t.center;\n            return (\n              t.width ||\n                \"undefined\" == typeof window ||\n                (t.width = window.innerWidth),\n              t.height ||\n                \"undefined\" == typeof window ||\n                (t.height = window.innerHeight),\n              e &&\n                e.forEach(function (e) {\n                  (e.x = 0.9 * (Math.random() - 0.5) * t.width + n[0]),\n                    (e.y = 0.9 * (Math.random() - 0.5) * t.height + n[1]);\n                }),\n              t.onLayoutEnd && t.onLayoutEnd(),\n              { nodes: e, edges: this.edges }\n            );\n          }),\n          (e.prototype.getType = function () {\n            return \"random\";\n          }),\n          e\n        );\n      })(n(66).Base);\n      e.RandomLayout = o;\n    },\n    65: function (t, e, n) {\n      \"use strict\";\n      n(31), n(8);\n      var r = n(184);\n      n.d(e, \"Canvas\", function () {\n        return r.a;\n      });\n      n(52), n(63);\n    },\n    66: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }), (e.Base = void 0);\n      var r = (function () {\n        function t() {\n          (this.nodes = []),\n            (this.edges = []),\n            (this.combos = []),\n            (this.positions = []),\n            (this.destroyed = !1),\n            (this.onLayoutEnd = function () {});\n        }\n        return (\n          (t.prototype.layout = function (t) {\n            return this.init(t), this.execute(!0);\n          }),\n          (t.prototype.init = function (t) {\n            (this.nodes = t.nodes || []),\n              (this.edges = t.edges || []),\n              (this.combos = t.combos || []);\n          }),\n          (t.prototype.execute = function () {}),\n          (t.prototype.executeWithWorker = function () {}),\n          (t.prototype.getDefaultCfg = function () {\n            return {};\n          }),\n          (t.prototype.updateCfg = function (t) {\n            t && Object.assign(this, t);\n          }),\n          (t.prototype.getType = function () {\n            return \"base\";\n          }),\n          (t.prototype.destroy = function () {\n            (this.nodes = null),\n              (this.edges = null),\n              (this.combos = null),\n              (this.positions = null),\n              (this.destroyed = !0);\n          }),\n          t\n        );\n      })();\n      e.Base = r;\n    },\n    7: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return r;\n      }),\n        n.d(e, \"a\", function () {\n          return i;\n        }),\n        n.d(e, \"c\", function () {\n          return o;\n        });\n      var r = 1e-6,\n        i = \"undefined\" != typeof Float32Array ? Float32Array : Array,\n        o = Math.random;\n      Math.PI;\n      Math.hypot ||\n        (Math.hypot = function () {\n          for (var t = 0, e = arguments.length; e--; )\n            t += arguments[e] * arguments[e];\n          return Math.sqrt(t);\n        });\n    },\n    8: function (t, e, n) {\n      \"use strict\";\n      var r = n(34);\n      n.d(e, \"PathUtil\", function () {\n        return r;\n      });\n      n(122), n(123);\n      var i = n(86);\n      n.d(e, \"Event\", function () {\n        return i.a;\n      });\n      n(87);\n      var o = n(183);\n      n.d(e, \"AbstractCanvas\", function () {\n        return o.a;\n      });\n      var a = n(124);\n      n.d(e, \"AbstractGroup\", function () {\n        return a.a;\n      });\n      var s = n(125);\n      n.d(e, \"AbstractShape\", function () {\n        return s.a;\n      });\n      var c = n(118);\n      n.d(e, \"getBBoxMethod\", function () {\n        return c.a;\n      }),\n        n.d(e, \"registerBBox\", function () {\n          return c.b;\n        });\n      var u = n(46);\n      n.d(e, \"getTextHeight\", function () {\n        return u.b;\n      }),\n        n.d(e, \"assembleFont\", function () {\n          return u.a;\n        });\n      var h = n(6);\n      n.d(e, \"isAllowCapture\", function () {\n        return h.b;\n      });\n      var l = n(25);\n      n.d(e, \"multiplyVec2\", function () {\n        return l.c;\n      }),\n        n.d(e, \"invert\", function () {\n          return l.a;\n        });\n      n(88), n(90);\n    },\n    85: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"create\", function () {\n          return i;\n        }),\n        n.d(e, \"clone\", function () {\n          return o;\n        }),\n        n.d(e, \"length\", function () {\n          return a;\n        }),\n        n.d(e, \"fromValues\", function () {\n          return s;\n        }),\n        n.d(e, \"copy\", function () {\n          return c;\n        }),\n        n.d(e, \"set\", function () {\n          return u;\n        }),\n        n.d(e, \"add\", function () {\n          return h;\n        }),\n        n.d(e, \"subtract\", function () {\n          return l;\n        }),\n        n.d(e, \"multiply\", function () {\n          return f;\n        }),\n        n.d(e, \"divide\", function () {\n          return d;\n        }),\n        n.d(e, \"ceil\", function () {\n          return p;\n        }),\n        n.d(e, \"floor\", function () {\n          return g;\n        }),\n        n.d(e, \"min\", function () {\n          return v;\n        }),\n        n.d(e, \"max\", function () {\n          return y;\n        }),\n        n.d(e, \"round\", function () {\n          return m;\n        }),\n        n.d(e, \"scale\", function () {\n          return b;\n        }),\n        n.d(e, \"scaleAndAdd\", function () {\n          return x;\n        }),\n        n.d(e, \"distance\", function () {\n          return S;\n        }),\n        n.d(e, \"squaredDistance\", function () {\n          return w;\n        }),\n        n.d(e, \"squaredLength\", function () {\n          return O;\n        }),\n        n.d(e, \"negate\", function () {\n          return M;\n        }),\n        n.d(e, \"inverse\", function () {\n          return k;\n        }),\n        n.d(e, \"normalize\", function () {\n          return j;\n        }),\n        n.d(e, \"dot\", function () {\n          return C;\n        }),\n        n.d(e, \"cross\", function () {\n          return E;\n        }),\n        n.d(e, \"lerp\", function () {\n          return P;\n        }),\n        n.d(e, \"hermite\", function () {\n          return A;\n        }),\n        n.d(e, \"bezier\", function () {\n          return I;\n        }),\n        n.d(e, \"random\", function () {\n          return T;\n        }),\n        n.d(e, \"transformMat4\", function () {\n          return N;\n        }),\n        n.d(e, \"transformMat3\", function () {\n          return B;\n        }),\n        n.d(e, \"transformQuat\", function () {\n          return L;\n        }),\n        n.d(e, \"rotateX\", function () {\n          return D;\n        }),\n        n.d(e, \"rotateY\", function () {\n          return _;\n        }),\n        n.d(e, \"rotateZ\", function () {\n          return R;\n        }),\n        n.d(e, \"angle\", function () {\n          return F;\n        }),\n        n.d(e, \"zero\", function () {\n          return Y;\n        }),\n        n.d(e, \"str\", function () {\n          return X;\n        }),\n        n.d(e, \"exactEquals\", function () {\n          return z;\n        }),\n        n.d(e, \"equals\", function () {\n          return W;\n        }),\n        n.d(e, \"sub\", function () {\n          return V;\n        }),\n        n.d(e, \"mul\", function () {\n          return G;\n        }),\n        n.d(e, \"div\", function () {\n          return H;\n        }),\n        n.d(e, \"dist\", function () {\n          return U;\n        }),\n        n.d(e, \"sqrDist\", function () {\n          return Z;\n        }),\n        n.d(e, \"len\", function () {\n          return K;\n        }),\n        n.d(e, \"sqrLen\", function () {\n          return $;\n        }),\n        n.d(e, \"forEach\", function () {\n          return Q;\n        });\n      var r = n(7);\n      function i() {\n        var t = new r.a(3);\n        return r.a != Float32Array && ((t[0] = 0), (t[1] = 0), (t[2] = 0)), t;\n      }\n      function o(t) {\n        var e = new r.a(3);\n        return (e[0] = t[0]), (e[1] = t[1]), (e[2] = t[2]), e;\n      }\n      function a(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return Math.hypot(e, n, r);\n      }\n      function s(t, e, n) {\n        var i = new r.a(3);\n        return (i[0] = t), (i[1] = e), (i[2] = n), i;\n      }\n      function c(t, e) {\n        return (t[0] = e[0]), (t[1] = e[1]), (t[2] = e[2]), t;\n      }\n      function u(t, e, n, r) {\n        return (t[0] = e), (t[1] = n), (t[2] = r), t;\n      }\n      function h(t, e, n) {\n        return (\n          (t[0] = e[0] + n[0]), (t[1] = e[1] + n[1]), (t[2] = e[2] + n[2]), t\n        );\n      }\n      function l(t, e, n) {\n        return (\n          (t[0] = e[0] - n[0]), (t[1] = e[1] - n[1]), (t[2] = e[2] - n[2]), t\n        );\n      }\n      function f(t, e, n) {\n        return (\n          (t[0] = e[0] * n[0]), (t[1] = e[1] * n[1]), (t[2] = e[2] * n[2]), t\n        );\n      }\n      function d(t, e, n) {\n        return (\n          (t[0] = e[0] / n[0]), (t[1] = e[1] / n[1]), (t[2] = e[2] / n[2]), t\n        );\n      }\n      function p(t, e) {\n        return (\n          (t[0] = Math.ceil(e[0])),\n          (t[1] = Math.ceil(e[1])),\n          (t[2] = Math.ceil(e[2])),\n          t\n        );\n      }\n      function g(t, e) {\n        return (\n          (t[0] = Math.floor(e[0])),\n          (t[1] = Math.floor(e[1])),\n          (t[2] = Math.floor(e[2])),\n          t\n        );\n      }\n      function v(t, e, n) {\n        return (\n          (t[0] = Math.min(e[0], n[0])),\n          (t[1] = Math.min(e[1], n[1])),\n          (t[2] = Math.min(e[2], n[2])),\n          t\n        );\n      }\n      function y(t, e, n) {\n        return (\n          (t[0] = Math.max(e[0], n[0])),\n          (t[1] = Math.max(e[1], n[1])),\n          (t[2] = Math.max(e[2], n[2])),\n          t\n        );\n      }\n      function m(t, e) {\n        return (\n          (t[0] = Math.round(e[0])),\n          (t[1] = Math.round(e[1])),\n          (t[2] = Math.round(e[2])),\n          t\n        );\n      }\n      function b(t, e, n) {\n        return (t[0] = e[0] * n), (t[1] = e[1] * n), (t[2] = e[2] * n), t;\n      }\n      function x(t, e, n, r) {\n        return (\n          (t[0] = e[0] + n[0] * r),\n          (t[1] = e[1] + n[1] * r),\n          (t[2] = e[2] + n[2] * r),\n          t\n        );\n      }\n      function S(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return Math.hypot(n, r, i);\n      }\n      function w(t, e) {\n        var n = e[0] - t[0],\n          r = e[1] - t[1],\n          i = e[2] - t[2];\n        return n * n + r * r + i * i;\n      }\n      function O(t) {\n        var e = t[0],\n          n = t[1],\n          r = t[2];\n        return e * e + n * n + r * r;\n      }\n      function M(t, e) {\n        return (t[0] = -e[0]), (t[1] = -e[1]), (t[2] = -e[2]), t;\n      }\n      function k(t, e) {\n        return (t[0] = 1 / e[0]), (t[1] = 1 / e[1]), (t[2] = 1 / e[2]), t;\n      }\n      function j(t, e) {\n        var n = e[0],\n          r = e[1],\n          i = e[2],\n          o = n * n + r * r + i * i;\n        return (\n          o > 0 && (o = 1 / Math.sqrt(o)),\n          (t[0] = e[0] * o),\n          (t[1] = e[1] * o),\n          (t[2] = e[2] * o),\n          t\n        );\n      }\n      function C(t, e) {\n        return t[0] * e[0] + t[1] * e[1] + t[2] * e[2];\n      }\n      function E(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[0],\n          s = n[1],\n          c = n[2];\n        return (\n          (t[0] = i * c - o * s),\n          (t[1] = o * a - r * c),\n          (t[2] = r * s - i * a),\n          t\n        );\n      }\n      function P(t, e, n, r) {\n        var i = e[0],\n          o = e[1],\n          a = e[2];\n        return (\n          (t[0] = i + r * (n[0] - i)),\n          (t[1] = o + r * (n[1] - o)),\n          (t[2] = a + r * (n[2] - a)),\n          t\n        );\n      }\n      function A(t, e, n, r, i, o) {\n        var a = o * o,\n          s = a * (2 * o - 3) + 1,\n          c = a * (o - 2) + o,\n          u = a * (o - 1),\n          h = a * (3 - 2 * o);\n        return (\n          (t[0] = e[0] * s + n[0] * c + r[0] * u + i[0] * h),\n          (t[1] = e[1] * s + n[1] * c + r[1] * u + i[1] * h),\n          (t[2] = e[2] * s + n[2] * c + r[2] * u + i[2] * h),\n          t\n        );\n      }\n      function I(t, e, n, r, i, o) {\n        var a = 1 - o,\n          s = a * a,\n          c = o * o,\n          u = s * a,\n          h = 3 * o * s,\n          l = 3 * c * a,\n          f = c * o;\n        return (\n          (t[0] = e[0] * u + n[0] * h + r[0] * l + i[0] * f),\n          (t[1] = e[1] * u + n[1] * h + r[1] * l + i[1] * f),\n          (t[2] = e[2] * u + n[2] * h + r[2] * l + i[2] * f),\n          t\n        );\n      }\n      function T(t, e) {\n        e = e || 1;\n        var n = 2 * r.c() * Math.PI,\n          i = 2 * r.c() - 1,\n          o = Math.sqrt(1 - i * i) * e;\n        return (\n          (t[0] = Math.cos(n) * o), (t[1] = Math.sin(n) * o), (t[2] = i * e), t\n        );\n      }\n      function N(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2],\n          a = n[3] * r + n[7] * i + n[11] * o + n[15];\n        return (\n          (a = a || 1),\n          (t[0] = (n[0] * r + n[4] * i + n[8] * o + n[12]) / a),\n          (t[1] = (n[1] * r + n[5] * i + n[9] * o + n[13]) / a),\n          (t[2] = (n[2] * r + n[6] * i + n[10] * o + n[14]) / a),\n          t\n        );\n      }\n      function B(t, e, n) {\n        var r = e[0],\n          i = e[1],\n          o = e[2];\n        return (\n          (t[0] = r * n[0] + i * n[3] + o * n[6]),\n          (t[1] = r * n[1] + i * n[4] + o * n[7]),\n          (t[2] = r * n[2] + i * n[5] + o * n[8]),\n          t\n        );\n      }\n      function L(t, e, n) {\n        var r = n[0],\n          i = n[1],\n          o = n[2],\n          a = n[3],\n          s = e[0],\n          c = e[1],\n          u = e[2],\n          h = i * u - o * c,\n          l = o * s - r * u,\n          f = r * c - i * s,\n          d = i * f - o * l,\n          p = o * h - r * f,\n          g = r * l - i * h,\n          v = 2 * a;\n        return (\n          (h *= v),\n          (l *= v),\n          (f *= v),\n          (d *= 2),\n          (p *= 2),\n          (g *= 2),\n          (t[0] = s + h + d),\n          (t[1] = c + l + p),\n          (t[2] = u + f + g),\n          t\n        );\n      }\n      function D(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0]),\n          (o[1] = i[1] * Math.cos(r) - i[2] * Math.sin(r)),\n          (o[2] = i[1] * Math.sin(r) + i[2] * Math.cos(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function _(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[2] * Math.sin(r) + i[0] * Math.cos(r)),\n          (o[1] = i[1]),\n          (o[2] = i[2] * Math.cos(r) - i[0] * Math.sin(r)),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function R(t, e, n, r) {\n        var i = [],\n          o = [];\n        return (\n          (i[0] = e[0] - n[0]),\n          (i[1] = e[1] - n[1]),\n          (i[2] = e[2] - n[2]),\n          (o[0] = i[0] * Math.cos(r) - i[1] * Math.sin(r)),\n          (o[1] = i[0] * Math.sin(r) + i[1] * Math.cos(r)),\n          (o[2] = i[2]),\n          (t[0] = o[0] + n[0]),\n          (t[1] = o[1] + n[1]),\n          (t[2] = o[2] + n[2]),\n          t\n        );\n      }\n      function F(t, e) {\n        var n = t[0],\n          r = t[1],\n          i = t[2],\n          o = e[0],\n          a = e[1],\n          s = e[2],\n          c =\n            Math.sqrt(n * n + r * r + i * i) * Math.sqrt(o * o + a * a + s * s),\n          u = c && C(t, e) / c;\n        return Math.acos(Math.min(Math.max(u, -1), 1));\n      }\n      function Y(t) {\n        return (t[0] = 0), (t[1] = 0), (t[2] = 0), t;\n      }\n      function X(t) {\n        return \"vec3(\" + t[0] + \", \" + t[1] + \", \" + t[2] + \")\";\n      }\n      function z(t, e) {\n        return t[0] === e[0] && t[1] === e[1] && t[2] === e[2];\n      }\n      function W(t, e) {\n        var n = t[0],\n          i = t[1],\n          o = t[2],\n          a = e[0],\n          s = e[1],\n          c = e[2];\n        return (\n          Math.abs(n - a) <= r.b * Math.max(1, Math.abs(n), Math.abs(a)) &&\n          Math.abs(i - s) <= r.b * Math.max(1, Math.abs(i), Math.abs(s)) &&\n          Math.abs(o - c) <= r.b * Math.max(1, Math.abs(o), Math.abs(c))\n        );\n      }\n      var q,\n        V = l,\n        G = f,\n        H = d,\n        U = S,\n        Z = w,\n        K = a,\n        $ = O,\n        Q =\n          ((q = i()),\n          function (t, e, n, r, i, o) {\n            var a, s;\n            for (\n              e || (e = 3),\n                n || (n = 0),\n                s = r ? Math.min(r * e + n, t.length) : t.length,\n                a = n;\n              a < s;\n              a += e\n            )\n              (q[0] = t[a]),\n                (q[1] = t[a + 1]),\n                (q[2] = t[a + 2]),\n                i(q, q, o),\n                (t[a] = q[0]),\n                (t[a + 1] = q[1]),\n                (t[a + 2] = q[2]);\n            return t;\n          });\n    },\n    86: function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t(t, e) {\n          (this.bubbles = !0),\n            (this.target = null),\n            (this.currentTarget = null),\n            (this.delegateTarget = null),\n            (this.delegateObject = null),\n            (this.defaultPrevented = !1),\n            (this.propagationStopped = !1),\n            (this.shape = null),\n            (this.fromShape = null),\n            (this.toShape = null),\n            (this.propagationPath = []),\n            (this.type = t),\n            (this.name = t),\n            (this.originalEvent = e),\n            (this.timeStamp = e.timeStamp);\n        }\n        return (\n          (t.prototype.preventDefault = function () {\n            (this.defaultPrevented = !0),\n              this.originalEvent.preventDefault &&\n                this.originalEvent.preventDefault();\n          }),\n          (t.prototype.stopPropagation = function () {\n            this.propagationStopped = !0;\n          }),\n          (t.prototype.toString = function () {\n            return \"[Event (type=\" + this.type + \")]\";\n          }),\n          (t.prototype.save = function () {}),\n          (t.prototype.restore = function () {}),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    87: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(91),\n        o = n(6),\n        a = (function (t) {\n          function e(e) {\n            var n = t.call(this) || this;\n            n.destroyed = !1;\n            var r = n.getDefaultCfg();\n            return (n.cfg = Object(o.i)(r, e)), n;\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.getDefaultCfg = function () {\n              return {};\n            }),\n            (e.prototype.get = function (t) {\n              return this.cfg[t];\n            }),\n            (e.prototype.set = function (t, e) {\n              this.cfg[t] = e;\n            }),\n            (e.prototype.destroy = function () {\n              (this.cfg = { destroyed: !0 }), this.off(), (this.destroyed = !0);\n            }),\n            e\n          );\n        })(i.a);\n      e.a = a;\n    },\n    88: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return i;\n      });\n      var r = null;\n      function i() {\n        if (!r) {\n          var t = document.createElement(\"canvas\");\n          (t.width = 1), (t.height = 1), (r = t.getContext(\"2d\"));\n        }\n        return r;\n      }\n    },\n    89: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return c;\n      });\n      var r = n(1),\n        i = n(11),\n        o = n(3);\n      function a(t) {\n        return (\n          t instanceof HTMLElement &&\n          Object(o.k)(t.nodeName) &&\n          \"CANVAS\" === t.nodeName.toUpperCase()\n        );\n      }\n      var s = null;\n      function c(t) {\n        s = t;\n      }\n      var u = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.getDefaultAttrs = function () {\n            var e = t.prototype.getDefaultAttrs.call(this);\n            return Object(r.a)(Object(r.a)({}, e), {\n              x: 0,\n              y: 0,\n              width: 0,\n              height: 0,\n            });\n          }),\n          (e.prototype.initAttrs = function (t) {\n            this._setImage(t.img);\n          }),\n          (e.prototype.isStroke = function () {\n            return !1;\n          }),\n          (e.prototype.isOnlyHitBox = function () {\n            return !0;\n          }),\n          (e.prototype._afterLoading = function () {\n            if (!0 === this.get(\"toDraw\")) {\n              var t = this.get(\"canvas\");\n              t ? t.draw() : this.createPath(this.get(\"context\"));\n            }\n          }),\n          (e.prototype._setImage = function (t) {\n            var e = this,\n              n = this.attrs;\n            if (\n              !(null == s ? void 0 : s.isMini()) ||\n              (null == s ? void 0 : s.isMiniNative())\n            )\n              if (Object(o.k)(t)) {\n                var r = null;\n                ((r = (null == s ? void 0 : s.isMiniNative())\n                  ? null == s\n                    ? void 0\n                    : s.get(\"container\").createImage()\n                  : new Image()).onload = function () {\n                  if (e.destroyed) return !1;\n                  e.attr(\"img\", r), e.set(\"loading\", !1), e._afterLoading();\n                  var t = e.get(\"callback\");\n                  t && t.call(e);\n                }),\n                  (r.crossOrigin = \"Anonymous\"),\n                  (r.src = t),\n                  this.set(\"loading\", !0);\n              } else\n                (null == s ? void 0 : s.isMiniNative()) || t instanceof Image\n                  ? (n.width || (n.width = t.width),\n                    n.height || (n.height = t.height))\n                  : a(t) &&\n                    (n.width || (n.width = Number(t.getAttribute(\"width\"))),\n                    n.height || (n.height, Number(t.getAttribute(\"height\"))));\n            else this.attr(\"img\", t);\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            t.prototype.onAttrChange.call(this, e, n, r),\n              \"img\" === e && this._setImage(n);\n          }),\n          (e.prototype.createPath = function (t) {\n            var e = this.attr(),\n              n = e.img,\n              r = e.x,\n              i = e.y,\n              c = e.width,\n              u = e.height,\n              h = e.sx,\n              l = e.sy,\n              f = e.swidth,\n              d = e.sheight;\n            if (this.get(\"loading\"))\n              return this.set(\"toDraw\", !0), void this.set(\"context\", t);\n            (null == s ? void 0 : s.isMini())\n              ? t.drawImage(n, r, i, c, u)\n              : (n instanceof Image || a(n)) &&\n                (Object(o.h)(h) ||\n                Object(o.h)(l) ||\n                Object(o.h)(f) ||\n                Object(o.h)(d)\n                  ? t.drawImage(n, r, i, c, u)\n                  : t.drawImage(n, h, l, f, d, r, i, c, u));\n          }),\n          e\n        );\n      })(i.a);\n      e.a = u;\n    },\n    9: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"e\", function () {\n        return y;\n      }),\n        n.d(e, \"b\", function () {\n          return O;\n        }),\n        n.d(e, \"a\", function () {\n          return A;\n        }),\n        n.d(e, \"c\", function () {\n          return l;\n        }),\n        n.d(e, \"d\", function () {\n          return D;\n        }),\n        n.d(e, \"f\", function () {\n          return r;\n        });\n      var r = {};\n      n.r(r),\n        n.d(r, \"distance\", function () {\n          return o;\n        }),\n        n.d(r, \"isNumberEqual\", function () {\n          return a;\n        }),\n        n.d(r, \"getBBoxByArray\", function () {\n          return s;\n        }),\n        n.d(r, \"getBBoxRange\", function () {\n          return c;\n        }),\n        n.d(r, \"piMod\", function () {\n          return u;\n        });\n      var i = n(0);\n      function o(t, e, n, r) {\n        var i = t - n,\n          o = e - r;\n        return Math.sqrt(i * i + o * o);\n      }\n      function a(t, e) {\n        return Math.abs(t - e) < 0.001;\n      }\n      function s(t, e) {\n        var n = Object(i.min)(t),\n          r = Object(i.min)(e);\n        return {\n          x: n,\n          y: r,\n          width: Object(i.max)(t) - n,\n          height: Object(i.max)(e) - r,\n        };\n      }\n      function c(t, e, n, r) {\n        return {\n          minX: Object(i.min)([t, n]),\n          maxX: Object(i.max)([t, n]),\n          minY: Object(i.min)([e, r]),\n          maxY: Object(i.max)([e, r]),\n        };\n      }\n      function u(t) {\n        return (t + 2 * Math.PI) % (2 * Math.PI);\n      }\n      var h = n(53),\n        l = {\n          box: function (t, e, n, r) {\n            return s([t, n], [e, r]);\n          },\n          length: function (t, e, n, r) {\n            return o(t, e, n, r);\n          },\n          pointAt: function (t, e, n, r, i) {\n            return { x: (1 - i) * t + i * n, y: (1 - i) * e + i * r };\n          },\n          pointDistance: function (t, e, n, r, i, a) {\n            var s = (n - t) * (i - t) + (r - e) * (a - e);\n            return s < 0\n              ? o(t, e, i, a)\n              : s > (n - t) * (n - t) + (r - e) * (r - e)\n              ? o(n, r, i, a)\n              : this.pointToLine(t, e, n, r, i, a);\n          },\n          pointToLine: function (t, e, n, r, i, o) {\n            var a = [n - t, r - e];\n            if (h.exactEquals(a, [0, 0]))\n              return Math.sqrt((i - t) * (i - t) + (o - e) * (o - e));\n            var s = [-a[1], a[0]];\n            h.normalize(s, s);\n            var c = [i - t, o - e];\n            return Math.abs(h.dot(c, s));\n          },\n          tangentAngle: function (t, e, n, r) {\n            return Math.atan2(r - e, n - t);\n          },\n        };\n      function f(t, e, n, r, i, a) {\n        var s,\n          c = 1 / 0,\n          u = [n, r],\n          h = 20;\n        a && a > 200 && (h = a / 10);\n        for (var l = 1 / h, f = l / 10, d = 0; d <= h; d++) {\n          var p = d * l,\n            g = [i.apply(null, t.concat([p])), i.apply(null, e.concat([p]))];\n          (b = o(u[0], u[1], g[0], g[1])) < c && ((s = p), (c = b));\n        }\n        if (0 === s) return { x: t[0], y: e[0] };\n        if (1 === s) {\n          var v = t.length;\n          return { x: t[v - 1], y: e[v - 1] };\n        }\n        c = 1 / 0;\n        for (d = 0; d < 32 && !(f < 1e-4); d++) {\n          var y = s - f,\n            m = s + f,\n            b =\n              ((g = [\n                i.apply(null, t.concat([y])),\n                i.apply(null, e.concat([y])),\n              ]),\n              o(u[0], u[1], g[0], g[1]));\n          if (y >= 0 && b < c) (s = y), (c = b);\n          else {\n            var x = [\n                i.apply(null, t.concat([m])),\n                i.apply(null, e.concat([m])),\n              ],\n              S = o(u[0], u[1], x[0], x[1]);\n            m <= 1 && S < c ? ((s = m), (c = S)) : (f *= 0.5);\n          }\n        }\n        return {\n          x: i.apply(null, t.concat([s])),\n          y: i.apply(null, e.concat([s])),\n        };\n      }\n      function d(t, e, n, r) {\n        var i = 1 - r;\n        return i * i * t + 2 * r * i * e + r * r * n;\n      }\n      function p(t, e, n) {\n        var r = t + n - 2 * e;\n        if (a(r, 0)) return [0.5];\n        var i = (t - e) / r;\n        return i <= 1 && i >= 0 ? [i] : [];\n      }\n      function g(t, e, n, r) {\n        return 2 * (1 - r) * (e - t) + 2 * r * (n - e);\n      }\n      function v(t, e, n, r, i, o, a) {\n        var s = d(t, n, i, a),\n          c = d(e, r, o, a),\n          u = l.pointAt(t, e, n, r, a),\n          h = l.pointAt(n, r, i, o, a);\n        return [\n          [t, e, u.x, u.y, s, c],\n          [s, c, h.x, h.y, i, o],\n        ];\n      }\n      var y = {\n        box: function (t, e, n, r, i, o) {\n          var a = p(t, n, i)[0],\n            c = p(e, r, o)[0],\n            u = [t, i],\n            h = [e, o];\n          return (\n            void 0 !== a && u.push(d(t, n, i, a)),\n            void 0 !== c && h.push(d(e, r, o, c)),\n            s(u, h)\n          );\n        },\n        length: function (t, e, n, r, i, a) {\n          return (function t(e, n, r, i, a, s, c) {\n            if (0 === c)\n              return (o(e, n, r, i) + o(r, i, a, s) + o(e, n, a, s)) / 2;\n            var u = v(e, n, r, i, a, s, 0.5),\n              h = u[0],\n              l = u[1];\n            return (\n              h.push(c - 1), l.push(c - 1), t.apply(null, h) + t.apply(null, l)\n            );\n          })(t, e, n, r, i, a, 3);\n        },\n        nearestPoint: function (t, e, n, r, i, o, a, s) {\n          return f([t, n, i], [e, r, o], a, s, d);\n        },\n        pointDistance: function (t, e, n, r, i, a, s, c) {\n          var u = this.nearestPoint(t, e, n, r, i, a, s, c);\n          return o(u.x, u.y, s, c);\n        },\n        interpolationAt: d,\n        pointAt: function (t, e, n, r, i, o, a) {\n          return { x: d(t, n, i, a), y: d(e, r, o, a) };\n        },\n        divide: function (t, e, n, r, i, o, a) {\n          return v(t, e, n, r, i, o, a);\n        },\n        tangentAngle: function (t, e, n, r, i, o, a) {\n          var s = g(t, n, i, a),\n            c = g(e, r, o, a);\n          return u(Math.atan2(c, s));\n        },\n      };\n      function m(t, e, n, r, i) {\n        var o = 1 - i;\n        return (\n          o * o * o * t + 3 * e * i * o * o + 3 * n * i * i * o + r * i * i * i\n        );\n      }\n      function b(t, e, n, r, i) {\n        var o = 1 - i;\n        return 3 * (o * o * (e - t) + 2 * o * i * (n - e) + i * i * (r - n));\n      }\n      function x(t, e, n, r) {\n        var i,\n          o,\n          s,\n          c = -3 * t + 9 * e - 9 * n + 3 * r,\n          u = 6 * t - 12 * e + 6 * n,\n          h = 3 * e - 3 * t,\n          l = [];\n        if (a(c, 0)) a(u, 0) || ((i = -h / u) >= 0 && i <= 1 && l.push(i));\n        else {\n          var f = u * u - 4 * c * h;\n          a(f, 0)\n            ? l.push(-u / (2 * c))\n            : f > 0 &&\n              ((o = (-u - (s = Math.sqrt(f))) / (2 * c)),\n              (i = (-u + s) / (2 * c)) >= 0 && i <= 1 && l.push(i),\n              o >= 0 && o <= 1 && l.push(o));\n        }\n        return l;\n      }\n      function S(t, e, n, r, i, o, a, s, c) {\n        var u = m(t, n, i, a, c),\n          h = m(e, r, o, s, c),\n          f = l.pointAt(t, e, n, r, c),\n          d = l.pointAt(n, r, i, o, c),\n          p = l.pointAt(i, o, a, s, c),\n          g = l.pointAt(f.x, f.y, d.x, d.y, c),\n          v = l.pointAt(d.x, d.y, p.x, p.y, c);\n        return [\n          [t, e, f.x, f.y, g.x, g.y, u, h],\n          [u, h, v.x, v.y, p.x, p.y, a, s],\n        ];\n      }\n      function w(t, e, n, r, i, a, s, c, u) {\n        if (0 === u)\n          return (function (t, e) {\n            for (var n = 0, r = t.length, i = 0; i < r; i++) {\n              n += o(t[i], e[i], t[(i + 1) % r], e[(i + 1) % r]);\n            }\n            return n / 2;\n          })([t, n, i, s], [e, r, a, c]);\n        var h = S(t, e, n, r, i, a, s, c, 0.5),\n          l = h[0],\n          f = h[1];\n        return (\n          l.push(u - 1), f.push(u - 1), w.apply(null, l) + w.apply(null, f)\n        );\n      }\n      var O = {\n        extrema: x,\n        box: function (t, e, n, r, i, o, a, c) {\n          for (\n            var u = [t, a],\n              h = [e, c],\n              l = x(t, n, i, a),\n              f = x(e, r, o, c),\n              d = 0;\n            d < l.length;\n            d++\n          )\n            u.push(m(t, n, i, a, l[d]));\n          for (d = 0; d < f.length; d++) h.push(m(e, r, o, c, f[d]));\n          return s(u, h);\n        },\n        length: function (t, e, n, r, i, o, a, s) {\n          return w(t, e, n, r, i, o, a, s, 3);\n        },\n        nearestPoint: function (t, e, n, r, i, o, a, s, c, u, h) {\n          return f([t, n, i, a], [e, r, o, s], c, u, m, h);\n        },\n        pointDistance: function (t, e, n, r, i, a, s, c, u, h, l) {\n          var f = this.nearestPoint(t, e, n, r, i, a, s, c, u, h, l);\n          return o(f.x, f.y, u, h);\n        },\n        interpolationAt: m,\n        pointAt: function (t, e, n, r, i, o, a, s, c) {\n          return { x: m(t, n, i, a, c), y: m(e, r, o, s, c) };\n        },\n        divide: function (t, e, n, r, i, o, a, s, c) {\n          return S(t, e, n, r, i, o, a, s, c);\n        },\n        tangentAngle: function (t, e, n, r, i, o, a, s, c) {\n          var h = b(t, n, i, a, c),\n            l = b(e, r, o, s, c);\n          return u(Math.atan2(l, h));\n        },\n      };\n      function M(t, e) {\n        var n = Math.abs(t);\n        return e > 0 ? n : -1 * n;\n      }\n      var k = function (t, e, n, r, i, o) {\n        var a = n,\n          s = r;\n        if (0 === a || 0 === s) return { x: t, y: e };\n        for (\n          var c,\n            u,\n            h = i - t,\n            l = o - e,\n            f = Math.abs(h),\n            d = Math.abs(l),\n            p = a * a,\n            g = s * s,\n            v = Math.PI / 4,\n            y = 0;\n          y < 4;\n          y++\n        ) {\n          (c = a * Math.cos(v)), (u = s * Math.sin(v));\n          var m = ((p - g) * Math.pow(Math.cos(v), 3)) / a,\n            b = ((g - p) * Math.pow(Math.sin(v), 3)) / s,\n            x = c - m,\n            S = u - b,\n            w = f - m,\n            O = d - b,\n            k = Math.hypot(S, x),\n            j = Math.hypot(O, w);\n          (v +=\n            (k * Math.asin((x * O - S * w) / (k * j))) /\n            Math.sqrt(p + g - c * c - u * u)),\n            (v = Math.min(Math.PI / 2, Math.max(0, v)));\n        }\n        return { x: t + M(c, h), y: e + M(u, l) };\n      };\n      function j(t, e, n, r, i, o) {\n        return (\n          n * Math.cos(i) * Math.cos(o) - r * Math.sin(i) * Math.sin(o) + t\n        );\n      }\n      function C(t, e, n, r, i, o) {\n        return (\n          n * Math.sin(i) * Math.cos(o) + r * Math.cos(i) * Math.sin(o) + e\n        );\n      }\n      function E(t, e, n) {\n        return { x: t * Math.cos(n), y: e * Math.sin(n) };\n      }\n      function P(t, e, n) {\n        var r = Math.cos(n),\n          i = Math.sin(n);\n        return [t * r - e * i, t * i + e * r];\n      }\n      var A = {\n        box: function (t, e, n, r, i, o, a) {\n          for (\n            var s = (function (t, e, n) {\n                return Math.atan((-e / t) * Math.tan(n));\n              })(n, r, i),\n              c = 1 / 0,\n              u = -1 / 0,\n              h = [o, a],\n              l = 2 * -Math.PI;\n            l <= 2 * Math.PI;\n            l += Math.PI\n          ) {\n            var f = s + l;\n            o < a ? o < f && f < a && h.push(f) : a < f && f < o && h.push(f);\n          }\n          for (l = 0; l < h.length; l++) {\n            var d = j(t, 0, n, r, i, h[l]);\n            d < c && (c = d), d > u && (u = d);\n          }\n          var p = (function (t, e, n) {\n              return Math.atan(e / (t * Math.tan(n)));\n            })(n, r, i),\n            g = 1 / 0,\n            v = -1 / 0,\n            y = [o, a];\n          for (l = 2 * -Math.PI; l <= 2 * Math.PI; l += Math.PI) {\n            var m = p + l;\n            o < a ? o < m && m < a && y.push(m) : a < m && m < o && y.push(m);\n          }\n          for (l = 0; l < y.length; l++) {\n            var b = C(0, e, n, r, i, y[l]);\n            b < g && (g = b), b > v && (v = b);\n          }\n          return { x: c, y: g, width: u - c, height: v - g };\n        },\n        length: function (t, e, n, r, i, o, a) {},\n        nearestPoint: function (t, e, n, r, i, o, a, s, c) {\n          var u = P(s - t, c - e, -i),\n            h = u[0],\n            l = u[1],\n            f = k(0, 0, n, r, h, l),\n            d = (function (t, e, n, r) {\n              return (Math.atan2(r * t, n * e) + 2 * Math.PI) % (2 * Math.PI);\n            })(n, r, f.x, f.y);\n          d < o ? (f = E(n, r, o)) : d > a && (f = E(n, r, a));\n          var p = P(f.x, f.y, i);\n          return { x: p[0] + t, y: p[1] + e };\n        },\n        pointDistance: function (t, e, n, r, i, a, s, c, u) {\n          var h = this.nearestPoint(t, e, n, r, c, u);\n          return o(h.x, h.y, c, u);\n        },\n        pointAt: function (t, e, n, r, i, o, a, s) {\n          var c = (a - o) * s + o;\n          return { x: j(t, 0, n, r, i, c), y: C(0, e, n, r, i, c) };\n        },\n        tangentAngle: function (t, e, n, r, i, o, a, s) {\n          var c = (a - o) * s + o,\n            h = (function (t, e, n, r, i, o, a, s) {\n              return (\n                -1 * n * Math.cos(i) * Math.sin(s) -\n                r * Math.sin(i) * Math.cos(s)\n              );\n            })(0, 0, n, r, i, 0, 0, c),\n            l = (function (t, e, n, r, i, o, a, s) {\n              return (\n                -1 * n * Math.sin(i) * Math.sin(s) +\n                r * Math.cos(i) * Math.cos(s)\n              );\n            })(0, 0, n, r, i, 0, 0, c);\n          return u(Math.atan2(l, h));\n        },\n      };\n      function I(t) {\n        for (var e = 0, n = [], r = 0; r < t.length - 1; r++) {\n          var i = t[r],\n            a = t[r + 1],\n            s = o(i[0], i[1], a[0], a[1]),\n            c = { from: i, to: a, length: s };\n          n.push(c), (e += s);\n        }\n        return { segments: n, totalLength: e };\n      }\n      function T(t) {\n        if (t.length < 2) return 0;\n        for (var e = 0, n = 0; n < t.length - 1; n++) {\n          var r = t[n],\n            i = t[n + 1];\n          e += o(r[0], r[1], i[0], i[1]);\n        }\n        return e;\n      }\n      function N(t, e) {\n        if (e > 1 || e < 0 || t.length < 2) return null;\n        var n = I(t),\n          r = n.segments,\n          i = n.totalLength;\n        if (0 === i) return { x: t[0][0], y: t[0][1] };\n        for (var o = 0, a = null, s = 0; s < r.length; s++) {\n          var c = r[s],\n            u = c.from,\n            h = c.to,\n            f = c.length / i;\n          if (e >= o && e <= o + f) {\n            var d = (e - o) / f;\n            a = l.pointAt(u[0], u[1], h[0], h[1], d);\n            break;\n          }\n          o += f;\n        }\n        return a;\n      }\n      function B(t, e) {\n        if (e > 1 || e < 0 || t.length < 2) return 0;\n        for (\n          var n = I(t), r = n.segments, i = n.totalLength, o = 0, a = 0, s = 0;\n          s < r.length;\n          s++\n        ) {\n          var c = r[s],\n            u = c.from,\n            h = c.to,\n            l = c.length / i;\n          if (e >= o && e <= o + l) {\n            a = Math.atan2(h[1] - u[1], h[0] - u[0]);\n            break;\n          }\n          o += l;\n        }\n        return a;\n      }\n      function L(t, e, n) {\n        for (var r = 1 / 0, i = 0; i < t.length - 1; i++) {\n          var o = t[i],\n            a = t[i + 1],\n            s = l.pointDistance(o[0], o[1], a[0], a[1], e, n);\n          s < r && (r = s);\n        }\n        return r;\n      }\n      var D = {\n        box: function (t) {\n          for (var e = [], n = [], r = 0; r < t.length; r++) {\n            var i = t[r];\n            e.push(i[0]), n.push(i[1]);\n          }\n          return s(e, n);\n        },\n        length: function (t) {\n          return T(t);\n        },\n        pointAt: function (t, e) {\n          return N(t, e);\n        },\n        pointDistance: function (t, e, n) {\n          return L(t, e, n);\n        },\n        tangentAngle: function (t, e) {\n          return B(t, e);\n        },\n      };\n    },\n    90: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"a\", function () {\n        return R;\n      });\n      var r = {};\n      function i(t) {\n        return +t;\n      }\n      function o(t) {\n        return t * t;\n      }\n      function a(t) {\n        return t * (2 - t);\n      }\n      function s(t) {\n        return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n      }\n      function c(t) {\n        return t * t * t;\n      }\n      function u(t) {\n        return --t * t * t + 1;\n      }\n      function h(t) {\n        return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n      }\n      n.r(r),\n        n.d(r, \"easeLinear\", function () {\n          return i;\n        }),\n        n.d(r, \"easeQuad\", function () {\n          return s;\n        }),\n        n.d(r, \"easeQuadIn\", function () {\n          return o;\n        }),\n        n.d(r, \"easeQuadOut\", function () {\n          return a;\n        }),\n        n.d(r, \"easeQuadInOut\", function () {\n          return s;\n        }),\n        n.d(r, \"easeCubic\", function () {\n          return h;\n        }),\n        n.d(r, \"easeCubicIn\", function () {\n          return c;\n        }),\n        n.d(r, \"easeCubicOut\", function () {\n          return u;\n        }),\n        n.d(r, \"easeCubicInOut\", function () {\n          return h;\n        }),\n        n.d(r, \"easePoly\", function () {\n          return d;\n        }),\n        n.d(r, \"easePolyIn\", function () {\n          return l;\n        }),\n        n.d(r, \"easePolyOut\", function () {\n          return f;\n        }),\n        n.d(r, \"easePolyInOut\", function () {\n          return d;\n        }),\n        n.d(r, \"easeSin\", function () {\n          return m;\n        }),\n        n.d(r, \"easeSinIn\", function () {\n          return v;\n        }),\n        n.d(r, \"easeSinOut\", function () {\n          return y;\n        }),\n        n.d(r, \"easeSinInOut\", function () {\n          return m;\n        }),\n        n.d(r, \"easeExp\", function () {\n          return w;\n        }),\n        n.d(r, \"easeExpIn\", function () {\n          return x;\n        }),\n        n.d(r, \"easeExpOut\", function () {\n          return S;\n        }),\n        n.d(r, \"easeExpInOut\", function () {\n          return w;\n        }),\n        n.d(r, \"easeCircle\", function () {\n          return k;\n        }),\n        n.d(r, \"easeCircleIn\", function () {\n          return O;\n        }),\n        n.d(r, \"easeCircleOut\", function () {\n          return M;\n        }),\n        n.d(r, \"easeCircleInOut\", function () {\n          return k;\n        }),\n        n.d(r, \"easeBounce\", function () {\n          return E;\n        }),\n        n.d(r, \"easeBounceIn\", function () {\n          return C;\n        }),\n        n.d(r, \"easeBounceOut\", function () {\n          return E;\n        }),\n        n.d(r, \"easeBounceInOut\", function () {\n          return P;\n        }),\n        n.d(r, \"easeBack\", function () {\n          return T;\n        }),\n        n.d(r, \"easeBackIn\", function () {\n          return A;\n        }),\n        n.d(r, \"easeBackOut\", function () {\n          return I;\n        }),\n        n.d(r, \"easeBackInOut\", function () {\n          return T;\n        }),\n        n.d(r, \"easeElastic\", function () {\n          return L;\n        }),\n        n.d(r, \"easeElasticIn\", function () {\n          return B;\n        }),\n        n.d(r, \"easeElasticOut\", function () {\n          return L;\n        }),\n        n.d(r, \"easeElasticInOut\", function () {\n          return D;\n        });\n      var l = (function t(e) {\n          function n(t) {\n            return Math.pow(t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        f = (function t(e) {\n          function n(t) {\n            return 1 - Math.pow(1 - t, e);\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        d = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2\n            );\n          }\n          return (e = +e), (n.exponent = t), n;\n        })(3),\n        p = Math.PI,\n        g = p / 2;\n      function v(t) {\n        return 1 == +t ? 1 : 1 - Math.cos(t * g);\n      }\n      function y(t) {\n        return Math.sin(t * g);\n      }\n      function m(t) {\n        return (1 - Math.cos(p * t)) / 2;\n      }\n      function b(t) {\n        return 1.0009775171065494 * (Math.pow(2, -10 * t) - 0.0009765625);\n      }\n      function x(t) {\n        return b(1 - +t);\n      }\n      function S(t) {\n        return 1 - b(t);\n      }\n      function w(t) {\n        return ((t *= 2) <= 1 ? b(1 - t) : 2 - b(t - 1)) / 2;\n      }\n      function O(t) {\n        return 1 - Math.sqrt(1 - t * t);\n      }\n      function M(t) {\n        return Math.sqrt(1 - --t * t);\n      }\n      function k(t) {\n        return (\n          ((t *= 2) <= 1\n            ? 1 - Math.sqrt(1 - t * t)\n            : Math.sqrt(1 - (t -= 2) * t) + 1) / 2\n        );\n      }\n      var j = 7.5625;\n      function C(t) {\n        return 1 - E(1 - t);\n      }\n      function E(t) {\n        return (t = +t) < 4 / 11\n          ? j * t * t\n          : t < 8 / 11\n          ? j * (t -= 6 / 11) * t + 3 / 4\n          : t < 10 / 11\n          ? j * (t -= 9 / 11) * t + 15 / 16\n          : j * (t -= 21 / 22) * t + 63 / 64;\n      }\n      function P(t) {\n        return ((t *= 2) <= 1 ? 1 - E(1 - t) : E(t - 1) + 1) / 2;\n      }\n      var A = (function t(e) {\n          function n(t) {\n            return (t = +t) * t * (e * (t - 1) + t);\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        I = (function t(e) {\n          function n(t) {\n            return --t * t * ((t + 1) * e + t) + 1;\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        T = (function t(e) {\n          function n(t) {\n            return (\n              ((t *= 2) < 1\n                ? t * t * ((e + 1) * t - e)\n                : (t -= 2) * t * ((e + 1) * t + e) + 2) / 2\n            );\n          }\n          return (e = +e), (n.overshoot = t), n;\n        })(1.70158),\n        N = 2 * Math.PI,\n        B = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= N);\n          function i(t) {\n            return e * b(-(--t)) * Math.sin((r - t) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * N);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        L = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= N);\n          function i(t) {\n            return 1 - e * b((t = +t)) * Math.sin((t + r) / n);\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * N);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        D = (function t(e, n) {\n          var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= N);\n          function i(t) {\n            return (\n              ((t = 2 * t - 1) < 0\n                ? e * b(-t) * Math.sin((r - t) / n)\n                : 2 - e * b(t) * Math.sin((r + t) / n)) / 2\n            );\n          }\n          return (\n            (i.amplitude = function (e) {\n              return t(e, n * N);\n            }),\n            (i.period = function (n) {\n              return t(e, n);\n            }),\n            i\n          );\n        })(1, 0.3),\n        _ = {};\n      function R(t) {\n        return _[t.toLowerCase()] || r[t];\n      }\n    },\n    91: function (t, e, n) {\n      \"use strict\";\n      var r = (function () {\n        function t() {\n          this._events = {};\n        }\n        return (\n          (t.prototype.on = function (t, e, n) {\n            return (\n              this._events[t] || (this._events[t] = []),\n              this._events[t].push({ callback: e, once: !!n }),\n              this\n            );\n          }),\n          (t.prototype.once = function (t, e) {\n            return this.on(t, e, !0);\n          }),\n          (t.prototype.emit = function (t) {\n            for (var e = this, n = [], r = 1; r < arguments.length; r++)\n              n[r - 1] = arguments[r];\n            var i = this._events[t] || [],\n              o = this._events[\"*\"] || [],\n              a = function (r) {\n                for (var i = r.length, o = 0; o < i; o++)\n                  if (r[o]) {\n                    var a = r[o],\n                      s = a.callback;\n                    a.once &&\n                      (r.splice(o, 1),\n                      0 === r.length && delete e._events[t],\n                      i--,\n                      o--),\n                      s.apply(e, n);\n                  }\n              };\n            a(i), a(o);\n          }),\n          (t.prototype.off = function (t, e) {\n            if (t)\n              if (e) {\n                for (\n                  var n = this._events[t] || [], r = n.length, i = 0;\n                  i < r;\n                  i++\n                )\n                  n[i].callback === e && (n.splice(i, 1), r--, i--);\n                0 === n.length && delete this._events[t];\n              } else delete this._events[t];\n            else this._events = {};\n            return this;\n          }),\n          (t.prototype.getEvents = function () {\n            return this._events;\n          }),\n          t\n        );\n      })();\n      e.a = r;\n    },\n    92: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(93),\n        a = n(6),\n        s = {};\n      var c = (function (t) {\n        function e() {\n          return (null !== t && t.apply(this, arguments)) || this;\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.isCanvas = function () {\n            return !1;\n          }),\n          (e.prototype.getBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              o = [],\n              s = [],\n              c = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              c.length > 0\n                ? (Object(a.a)(c, function (t) {\n                    var e = t.getBBox();\n                    o.push(e.minX, e.maxX), s.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(i.min)(o)),\n                  (e = Object(i.max)(o)),\n                  (n = Object(i.min)(s)),\n                  (r = Object(i.max)(s)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getCanvasBBox = function () {\n            var t = 1 / 0,\n              e = -1 / 0,\n              n = 1 / 0,\n              r = -1 / 0,\n              o = [],\n              s = [],\n              c = this.getChildren().filter(function (t) {\n                return (\n                  t.get(\"visible\") &&\n                  (!t.isGroup() || (t.isGroup() && t.getChildren().length > 0))\n                );\n              });\n            return (\n              c.length > 0\n                ? (Object(a.a)(c, function (t) {\n                    var e = t.getCanvasBBox();\n                    o.push(e.minX, e.maxX), s.push(e.minY, e.maxY);\n                  }),\n                  (t = Object(i.min)(o)),\n                  (e = Object(i.max)(o)),\n                  (n = Object(i.min)(s)),\n                  (r = Object(i.max)(s)))\n                : ((t = 0), (e = 0), (n = 0), (r = 0)),\n              {\n                x: t,\n                y: n,\n                minX: t,\n                minY: n,\n                maxX: e,\n                maxY: r,\n                width: e - t,\n                height: r - n,\n              }\n            );\n          }),\n          (e.prototype.getDefaultCfg = function () {\n            var e = t.prototype.getDefaultCfg.call(this);\n            return (e.children = []), e;\n          }),\n          (e.prototype.onAttrChange = function (e, n, r) {\n            if (\n              (t.prototype.onAttrChange.call(this, e, n, r), \"matrix\" === e)\n            ) {\n              var i = this.getTotalMatrix();\n              this._applyChildrenMarix(i);\n            }\n          }),\n          (e.prototype.applyMatrix = function (e) {\n            var n = this.getTotalMatrix();\n            t.prototype.applyMatrix.call(this, e);\n            var r = this.getTotalMatrix();\n            r !== n && this._applyChildrenMarix(r);\n          }),\n          (e.prototype._applyChildrenMarix = function (t) {\n            var e = this.getChildren();\n            Object(a.a)(e, function (e) {\n              e.applyMatrix(t);\n            });\n          }),\n          (e.prototype.addShape = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n = t[0],\n              r = t[1];\n            Object(a.f)(n) ? (r = n) : (r.type = n);\n            var i = s[r.type];\n            i || ((i = Object(a.k)(r.type)), (s[r.type] = i));\n            var o = this.getShapeBase(),\n              c = new o[i](r);\n            return this.add(c), c;\n          }),\n          (e.prototype.addGroup = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            var n,\n              r = t[0],\n              i = t[1];\n            if (Object(a.d)(r)) n = new r(i || { parent: this });\n            else {\n              var o = r || {},\n                s = this.getGroupBase();\n              n = new s(o);\n            }\n            return this.add(n), n;\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.isCanvas() ? this : this.get(\"canvas\");\n          }),\n          (e.prototype.getShape = function (t, e, n) {\n            if (!Object(a.b)(this)) return null;\n            var r,\n              i = this.getChildren();\n            if (this.isCanvas()) r = this._findShape(i, t, e, n);\n            else {\n              var o = [t, e, 1];\n              (o = this.invertFromMatrix(o)),\n                this.isClipped(o[0], o[1]) ||\n                  (r = this._findShape(i, o[0], o[1], n));\n            }\n            return r;\n          }),\n          (e.prototype._findShape = function (t, e, n, r) {\n            for (var i = null, o = t.length - 1; o >= 0; o--) {\n              var s = t[o];\n              if (\n                (Object(a.b)(s) &&\n                  (s.isGroup()\n                    ? (i = s.getShape(e, n, r))\n                    : s.isHit(e, n) && (i = s)),\n                i)\n              )\n                break;\n            }\n            return i;\n          }),\n          (e.prototype.add = function (t) {\n            var e = this.getCanvas(),\n              n = this.getChildren(),\n              r = this.get(\"timeline\"),\n              i = t.getParent();\n            i &&\n              (function (t, e, n) {\n                void 0 === n && (n = !0),\n                  n\n                    ? e.destroy()\n                    : (e.set(\"parent\", null), e.set(\"canvas\", null)),\n                  Object(a.j)(t.getChildren(), e);\n              })(i, t, !1),\n              t.set(\"parent\", this),\n              e &&\n                (function t(e, n) {\n                  if ((e.set(\"canvas\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, e),\n              r &&\n                (function t(e, n) {\n                  if ((e.set(\"timeline\", n), e.isGroup())) {\n                    var r = e.get(\"children\");\n                    r.length &&\n                      r.forEach(function (e) {\n                        t(e, n);\n                      });\n                  }\n                })(t, r),\n              n.push(t),\n              t.onCanvasChange(\"add\"),\n              this._applyElementMatrix(t);\n          }),\n          (e.prototype._applyElementMatrix = function (t) {\n            var e = this.getTotalMatrix();\n            e && t.applyMatrix(e);\n          }),\n          (e.prototype.getChildren = function () {\n            return this.get(\"children\");\n          }),\n          (e.prototype.sort = function () {\n            var t,\n              e = this.getChildren();\n            Object(a.a)(e, function (t, e) {\n              return (t._INDEX = e), t;\n            }),\n              e.sort(\n                ((t = function (t, e) {\n                  return t.get(\"zIndex\") - e.get(\"zIndex\");\n                }),\n                function (e, n) {\n                  var r = t(e, n);\n                  return 0 === r ? e._INDEX - n._INDEX : r;\n                }),\n              ),\n              this.onCanvasChange(\"sort\");\n          }),\n          (e.prototype.clear = function () {\n            if ((this.set(\"clearing\", !0), !this.destroyed)) {\n              for (var t = this.getChildren(), e = t.length - 1; e >= 0; e--)\n                t[e].destroy();\n              this.set(\"children\", []),\n                this.onCanvasChange(\"clear\"),\n                this.set(\"clearing\", !1);\n            }\n          }),\n          (e.prototype.destroy = function () {\n            this.get(\"destroyed\") ||\n              (this.clear(), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.getFirst = function () {\n            return this.getChildByIndex(0);\n          }),\n          (e.prototype.getLast = function () {\n            var t = this.getChildren();\n            return this.getChildByIndex(t.length - 1);\n          }),\n          (e.prototype.getChildByIndex = function (t) {\n            return this.getChildren()[t];\n          }),\n          (e.prototype.getCount = function () {\n            return this.getChildren().length;\n          }),\n          (e.prototype.contain = function (t) {\n            return this.getChildren().indexOf(t) > -1;\n          }),\n          (e.prototype.removeChild = function (t, e) {\n            void 0 === e && (e = !0), this.contain(t) && t.remove(e);\n          }),\n          (e.prototype.findAll = function (t) {\n            var e = [],\n              n = this.getChildren();\n            return (\n              Object(a.a)(n, function (n) {\n                t(n) && e.push(n), n.isGroup() && (e = e.concat(n.findAll(t)));\n              }),\n              e\n            );\n          }),\n          (e.prototype.find = function (t) {\n            var e = null,\n              n = this.getChildren();\n            return (\n              Object(a.a)(n, function (n) {\n                if ((t(n) ? (e = n) : n.isGroup() && (e = n.find(t)), e))\n                  return !1;\n              }),\n              e\n            );\n          }),\n          (e.prototype.findById = function (t) {\n            return this.find(function (e) {\n              return e.get(\"id\") === t;\n            });\n          }),\n          (e.prototype.findByClassName = function (t) {\n            return this.find(function (e) {\n              return e.get(\"className\") === t;\n            });\n          }),\n          (e.prototype.findAllByName = function (t) {\n            return this.findAll(function (e) {\n              return e.get(\"name\") === t;\n            });\n          }),\n          e\n        );\n      })(o.a);\n      e.a = c;\n    },\n    93: function (t, e, n) {\n      \"use strict\";\n      var r = n(1),\n        i = n(0),\n        o = n(4),\n        a = n(6),\n        s = n(25),\n        c = n(87),\n        u = o.a.transform,\n        h = [\"zIndex\", \"capture\", \"visible\", \"type\"],\n        l = [\"repeat\"];\n      function f(t, e) {\n        var n = {},\n          r = e.attrs;\n        for (var i in t) n[i] = r[i];\n        return n;\n      }\n      function d(t, e) {\n        var n = {},\n          r = e.attr();\n        return (\n          Object(i.each)(t, function (t, e) {\n            -1 !== l.indexOf(e) || Object(i.isEqual)(r[e], t) || (n[e] = t);\n          }),\n          n\n        );\n      }\n      function p(t, e) {\n        if (e.onFrame) return t;\n        var n = e.startTime,\n          r = e.delay,\n          o = e.duration,\n          a = Object.prototype.hasOwnProperty;\n        return (\n          Object(i.each)(t, function (t) {\n            n + r < t.startTime + t.delay + t.duration &&\n              o > t.delay &&\n              Object(i.each)(e.toAttrs, function (e, n) {\n                a.call(t.toAttrs, n) &&\n                  (delete t.toAttrs[n], delete t.fromAttrs[n]);\n              });\n          }),\n          t\n        );\n      }\n      var g = (function (t) {\n        function e(e) {\n          var n = t.call(this, e) || this;\n          n.attrs = {};\n          var r = n.getDefaultAttrs();\n          return (\n            Object(i.mix)(r, e.attrs),\n            (n.attrs = r),\n            n.initAttrs(r),\n            n.initAnimate(),\n            n\n          );\n        }\n        return (\n          Object(r.c)(e, t),\n          (e.prototype.getDefaultCfg = function () {\n            return { visible: !0, capture: !0, zIndex: 0 };\n          }),\n          (e.prototype.getDefaultAttrs = function () {\n            return { matrix: this.getDefaultMatrix(), opacity: 1 };\n          }),\n          (e.prototype.onCanvasChange = function (t) {}),\n          (e.prototype.initAttrs = function (t) {}),\n          (e.prototype.initAnimate = function () {\n            this.set(\"animable\", !0), this.set(\"animating\", !1);\n          }),\n          (e.prototype.isGroup = function () {\n            return !1;\n          }),\n          (e.prototype.getParent = function () {\n            return this.get(\"parent\");\n          }),\n          (e.prototype.getCanvas = function () {\n            return this.get(\"canvas\");\n          }),\n          (e.prototype.attr = function () {\n            for (var t, e = [], n = 0; n < arguments.length; n++)\n              e[n] = arguments[n];\n            var r = e[0],\n              o = e[1];\n            if (!r) return this.attrs;\n            if (Object(i.isObject)(r)) {\n              for (var a in r) this.setAttr(a, r[a]);\n              return this.afterAttrsChange(r), this;\n            }\n            return 2 === e.length\n              ? (this.setAttr(r, o),\n                this.afterAttrsChange((((t = {})[r] = o), t)),\n                this)\n              : this.attrs[r];\n          }),\n          (e.prototype.isClipped = function (t, e) {\n            var n = this.getClip();\n            return n && !n.isHit(t, e);\n          }),\n          (e.prototype.setAttr = function (t, e) {\n            var n = this.attrs[t];\n            n !== e && ((this.attrs[t] = e), this.onAttrChange(t, e, n));\n          }),\n          (e.prototype.onAttrChange = function (t, e, n) {\n            \"matrix\" === t && this.set(\"totalMatrix\", null);\n          }),\n          (e.prototype.afterAttrsChange = function (t) {\n            if (this.cfg.isClipShape) {\n              var e = this.cfg.applyTo;\n              e && e.onCanvasChange(\"clip\");\n            } else this.onCanvasChange(\"attr\");\n          }),\n          (e.prototype.show = function () {\n            return this.set(\"visible\", !0), this.onCanvasChange(\"show\"), this;\n          }),\n          (e.prototype.hide = function () {\n            return this.set(\"visible\", !1), this.onCanvasChange(\"hide\"), this;\n          }),\n          (e.prototype.setZIndex = function (t) {\n            this.set(\"zIndex\", t);\n            var e = this.getParent();\n            return e && e.sort(), this;\n          }),\n          (e.prototype.toFront = function () {\n            var t = this.getParent();\n            if (t) {\n              var e = t.getChildren(),\n                n = (this.get(\"el\"), e.indexOf(this));\n              e.splice(n, 1), e.push(this), this.onCanvasChange(\"zIndex\");\n            }\n          }),\n          (e.prototype.toBack = function () {\n            var t = this.getParent();\n            if (t) {\n              var e = t.getChildren(),\n                n = (this.get(\"el\"), e.indexOf(this));\n              e.splice(n, 1), e.unshift(this), this.onCanvasChange(\"zIndex\");\n            }\n          }),\n          (e.prototype.remove = function (t) {\n            void 0 === t && (t = !0);\n            var e = this.getParent();\n            e\n              ? (Object(a.j)(e.getChildren(), this),\n                e.get(\"clearing\") || this.onCanvasChange(\"remove\"))\n              : this.onCanvasChange(\"remove\"),\n              t && this.destroy();\n          }),\n          (e.prototype.resetMatrix = function () {\n            this.attr(\"matrix\", this.getDefaultMatrix()),\n              this.onCanvasChange(\"matrix\");\n          }),\n          (e.prototype.getMatrix = function () {\n            return this.attr(\"matrix\");\n          }),\n          (e.prototype.setMatrix = function (t) {\n            this.attr(\"matrix\", t), this.onCanvasChange(\"matrix\");\n          }),\n          (e.prototype.getTotalMatrix = function () {\n            var t = this.cfg.totalMatrix;\n            if (!t) {\n              var e = this.attr(\"matrix\"),\n                n = this.cfg.parentMatrix;\n              (t = n && e ? Object(s.b)(n, e) : e || n),\n                this.set(\"totalMatrix\", t);\n            }\n            return t;\n          }),\n          (e.prototype.applyMatrix = function (t) {\n            var e = this.attr(\"matrix\"),\n              n = null;\n            (n = t && e ? Object(s.b)(t, e) : e || t),\n              this.set(\"totalMatrix\", n),\n              this.set(\"parentMatrix\", t);\n          }),\n          (e.prototype.getDefaultMatrix = function () {\n            return null;\n          }),\n          (e.prototype.applyToMatrix = function (t) {\n            var e = this.attr(\"matrix\");\n            return e ? Object(s.c)(e, t) : t;\n          }),\n          (e.prototype.invertFromMatrix = function (t) {\n            var e = this.attr(\"matrix\");\n            if (e) {\n              var n = Object(s.a)(e);\n              if (n) return Object(s.c)(n, t);\n            }\n            return t;\n          }),\n          (e.prototype.setClip = function (t) {\n            var e = this.getCanvas(),\n              n = null;\n            if (t) {\n              var r = this.getShapeBase()[Object(i.upperFirst)(t.type)];\n              r &&\n                (n = new r({\n                  type: t.type,\n                  isClipShape: !0,\n                  applyTo: this,\n                  attrs: t.attrs,\n                  canvas: e,\n                }));\n            }\n            return this.set(\"clipShape\", n), this.onCanvasChange(\"clip\"), n;\n          }),\n          (e.prototype.getClip = function () {\n            var t = this.cfg.clipShape;\n            return t || null;\n          }),\n          (e.prototype.clone = function () {\n            var t = this,\n              e = this.attrs,\n              n = {};\n            Object(i.each)(e, function (t, r) {\n              Object(i.isArray)(e[r])\n                ? (n[r] = (function (t) {\n                    for (var e = [], n = 0; n < t.length; n++)\n                      Object(i.isArray)(t[n])\n                        ? e.push([].concat(t[n]))\n                        : e.push(t[n]);\n                    return e;\n                  })(e[r]))\n                : (n[r] = e[r]);\n            });\n            var r = new (0, this.constructor)({ attrs: n });\n            return (\n              Object(i.each)(h, function (e) {\n                r.set(e, t.get(e));\n              }),\n              r\n            );\n          }),\n          (e.prototype.destroy = function () {\n            this.destroyed ||\n              ((this.attrs = {}), t.prototype.destroy.call(this));\n          }),\n          (e.prototype.isAnimatePaused = function () {\n            return this.get(\"_pause\").isPaused;\n          }),\n          (e.prototype.animate = function () {\n            for (var t = [], e = 0; e < arguments.length; e++)\n              t[e] = arguments[e];\n            if (this.get(\"timeline\") || this.get(\"canvas\")) {\n              this.set(\"animating\", !0);\n              var n = this.get(\"timeline\");\n              n ||\n                ((n = this.get(\"canvas\").get(\"timeline\")),\n                this.set(\"timeline\", n));\n              var r = this.get(\"animations\") || [];\n              n.timer || n.initTimer();\n              var o,\n                a,\n                s,\n                c,\n                u,\n                h = t[0],\n                l = t[1],\n                g = t[2],\n                v = void 0 === g ? \"easeLinear\" : g,\n                y = t[3],\n                m = void 0 === y ? i.noop : y,\n                b = t[4],\n                x = void 0 === b ? 0 : b;\n              Object(i.isFunction)(h)\n                ? ((o = h), (h = {}))\n                : Object(i.isObject)(h) &&\n                  h.onFrame &&\n                  ((o = h.onFrame), (a = h.repeat)),\n                Object(i.isObject)(l)\n                  ? ((l = (u = l).duration),\n                    (v = u.easing || \"easeLinear\"),\n                    (x = u.delay || 0),\n                    (a = u.repeat || a || !1),\n                    (m = u.callback || i.noop),\n                    (s = u.pauseCallback || i.noop),\n                    (c = u.resumeCallback || i.noop))\n                  : (Object(i.isNumber)(m) && ((x = m), (m = null)),\n                    Object(i.isFunction)(v)\n                      ? ((m = v), (v = \"easeLinear\"))\n                      : (v = v || \"easeLinear\"));\n              var S = d(h, this),\n                w = {\n                  fromAttrs: f(S, this),\n                  toAttrs: S,\n                  duration: l,\n                  easing: v,\n                  repeat: a,\n                  callback: m,\n                  pauseCallback: s,\n                  resumeCallback: c,\n                  delay: x,\n                  startTime: n.getTime(),\n                  id: Object(i.uniqueId)(),\n                  onFrame: o,\n                  pathFormatted: !1,\n                };\n              r.length > 0 ? (r = p(r, w)) : n.addAnimator(this),\n                r.push(w),\n                this.set(\"animations\", r),\n                this.set(\"_pause\", { isPaused: !1 });\n            }\n          }),\n          (e.prototype.stopAnimate = function (t) {\n            var e = this;\n            void 0 === t && (t = !0);\n            var n = this.get(\"animations\");\n            Object(i.each)(n, function (n) {\n              t && (n.onFrame ? e.attr(n.onFrame(1)) : e.attr(n.toAttrs)),\n                n.callback && n.callback();\n            }),\n              this.set(\"animating\", !1),\n              this.set(\"animations\", []);\n          }),\n          (e.prototype.pauseAnimate = function () {\n            var t = this.get(\"timeline\"),\n              e = this.get(\"animations\"),\n              n = t.getTime();\n            return (\n              Object(i.each)(e, function (t) {\n                (t._paused = !0),\n                  (t._pauseTime = n),\n                  t.pauseCallback && t.pauseCallback();\n              }),\n              this.set(\"_pause\", { isPaused: !0, pauseTime: n }),\n              this\n            );\n          }),\n          (e.prototype.resumeAnimate = function () {\n            var t = this.get(\"timeline\").getTime(),\n              e = this.get(\"animations\"),\n              n = this.get(\"_pause\").pauseTime;\n            return (\n              Object(i.each)(e, function (e) {\n                (e.startTime = e.startTime + (t - n)),\n                  (e._paused = !1),\n                  (e._pauseTime = null),\n                  e.resumeCallback && e.resumeCallback();\n              }),\n              this.set(\"_pause\", { isPaused: !1 }),\n              this.set(\"animations\", e),\n              this\n            );\n          }),\n          (e.prototype.emitDelegation = function (t, e) {\n            var n,\n              r = this,\n              o = e.propagationPath;\n            this.getEvents();\n            \"mouseenter\" === t\n              ? (n = e.fromShape)\n              : \"mouseleave\" === t && (n = e.toShape);\n            for (\n              var s = function (t) {\n                  var s = o[t],\n                    u = s.get(\"name\");\n                  if (u) {\n                    if (\n                      (s.isGroup() || (s.isCanvas && s.isCanvas())) &&\n                      n &&\n                      Object(a.g)(s, n)\n                    )\n                      return \"break\";\n                    Object(i.isArray)(u)\n                      ? Object(i.each)(u, function (t) {\n                          r.emitDelegateEvent(s, t, e);\n                        })\n                      : c.emitDelegateEvent(s, u, e);\n                  }\n                },\n                c = this,\n                u = 0;\n              u < o.length;\n              u++\n            ) {\n              if (\"break\" === s(u)) break;\n            }\n          }),\n          (e.prototype.emitDelegateEvent = function (t, e, n) {\n            var r = this.getEvents(),\n              i = e + \":\" + n.type;\n            (r[i] || r[\"*\"]) &&\n              ((n.name = i),\n              (n.currentTarget = t),\n              (n.delegateTarget = this),\n              (n.delegateObject = t.get(\"delegateObject\")),\n              this.emit(i, n));\n          }),\n          (e.prototype.translate = function (t, e) {\n            void 0 === t && (t = 0), void 0 === e && (e = 0);\n            var n = this.getMatrix(),\n              r = u(n, [[\"t\", t, e]]);\n            return this.setMatrix(r), this;\n          }),\n          (e.prototype.move = function (t, e) {\n            var n = this.attr(\"x\") || 0,\n              r = this.attr(\"y\") || 0;\n            return this.translate(t - n, e - r), this;\n          }),\n          (e.prototype.moveTo = function (t, e) {\n            return this.move(t, e);\n          }),\n          (e.prototype.scale = function (t, e) {\n            var n = this.getMatrix(),\n              r = u(n, [[\"s\", t, e || t]]);\n            return this.setMatrix(r), this;\n          }),\n          (e.prototype.rotate = function (t) {\n            var e = this.getMatrix(),\n              n = u(e, [[\"r\", t]]);\n            return this.setMatrix(n), this;\n          }),\n          (e.prototype.rotateAtStart = function (t) {\n            var e = this.attr(),\n              n = e.x,\n              r = e.y,\n              i = this.getMatrix(),\n              o = u(i, [\n                [\"t\", -n, -r],\n                [\"r\", t],\n                [\"t\", n, r],\n              ]);\n            return this.setMatrix(o), this;\n          }),\n          (e.prototype.rotateAtPoint = function (t, e, n) {\n            var r = this.getMatrix(),\n              i = u(r, [\n                [\"t\", -t, -e],\n                [\"r\", n],\n                [\"t\", t, e],\n              ]);\n            return this.setMatrix(i), this;\n          }),\n          e\n        );\n      })(c.a);\n      e.a = g;\n    },\n    94: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return u;\n      }),\n        n.d(e, \"a\", function () {\n          return h;\n        });\n      var r = n(3),\n        i = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i,\n        o = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i,\n        a = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i,\n        s = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\n      function c(t, e) {\n        var n = t.match(s);\n        Object(r.b)(n, function (t) {\n          var n = t.split(\":\");\n          e.addColorStop(n[0], n[1]);\n        });\n      }\n      function u(t, e, n) {\n        if (Object(r.k)(n)) {\n          if (\"(\" === n[1] || \"(\" === n[2]) {\n            if (\"l\" === n[0])\n              return (function (t, e, n) {\n                var r,\n                  o,\n                  a = i.exec(n),\n                  s = (parseFloat(a[1]) % 360) * (Math.PI / 180),\n                  u = a[2],\n                  h = e.getBBox();\n                s >= 0 && s < 0.5 * Math.PI\n                  ? ((r = { x: h.minX, y: h.minY }),\n                    (o = { x: h.maxX, y: h.maxY }))\n                  : 0.5 * Math.PI <= s && s < Math.PI\n                  ? ((r = { x: h.maxX, y: h.minY }),\n                    (o = { x: h.minX, y: h.maxY }))\n                  : Math.PI <= s && s < 1.5 * Math.PI\n                  ? ((r = { x: h.maxX, y: h.maxY }),\n                    (o = { x: h.minX, y: h.minY }))\n                  : ((r = { x: h.minX, y: h.maxY }),\n                    (o = { x: h.maxX, y: h.minY }));\n                var l = Math.tan(s),\n                  f = l * l,\n                  d = (o.x - r.x + l * (o.y - r.y)) / (f + 1) + r.x,\n                  p = (l * (o.x - r.x + l * (o.y - r.y))) / (f + 1) + r.y,\n                  g = t.createLinearGradient(r.x, r.y, d, p);\n                return c(u, g), g;\n              })(t, e, n);\n            if (\"r\" === n[0])\n              return (function (t, e, n) {\n                var r = o.exec(n),\n                  i = parseFloat(r[1]),\n                  a = parseFloat(r[2]),\n                  u = parseFloat(r[3]),\n                  h = r[4];\n                if (0 === u) {\n                  var l = h.match(s);\n                  return l[l.length - 1].split(\":\")[1];\n                }\n                var f = e.getBBox(),\n                  d = f.maxX - f.minX,\n                  p = f.maxY - f.minY,\n                  g = Math.sqrt(d * d + p * p) / 2,\n                  v = t.createRadialGradient(\n                    f.minX + d * i,\n                    f.minY + p * a,\n                    0,\n                    f.minX + d / 2,\n                    f.minY + p / 2,\n                    u * g,\n                  );\n                return c(h, v), v;\n              })(t, e, n);\n            if (\"p\" === n[0])\n              return (function (t, e, n) {\n                if (e.get(\"patternSource\") && e.get(\"patternSource\") === n)\n                  return e.get(\"pattern\");\n                var r,\n                  i,\n                  o = a.exec(n),\n                  s = o[1],\n                  c = o[2];\n                function u() {\n                  (r = t.createPattern(i, s)),\n                    e.set(\"pattern\", r),\n                    e.set(\"patternSource\", n);\n                }\n                switch (s) {\n                  case \"a\":\n                    s = \"repeat\";\n                    break;\n                  case \"x\":\n                    s = \"repeat-x\";\n                    break;\n                  case \"y\":\n                    s = \"repeat-y\";\n                    break;\n                  case \"n\":\n                    s = \"no-repeat\";\n                    break;\n                  default:\n                    s = \"no-repeat\";\n                }\n                return (\n                  (i = new Image()),\n                  c.match(/^data:/i) || (i.crossOrigin = \"Anonymous\"),\n                  (i.src = c),\n                  i.complete ? u() : ((i.onload = u), (i.src = i.src)),\n                  r\n                );\n              })(t, e, n);\n          }\n          return n;\n        }\n      }\n      function h(t) {\n        var e = 0,\n          n = 0,\n          i = 0,\n          o = 0;\n        return (\n          Object(r.f)(t)\n            ? 1 === t.length\n              ? (e = n = i = o = t[0])\n              : 2 === t.length\n              ? ((e = i = t[0]), (n = o = t[1]))\n              : 3 === t.length\n              ? ((e = t[0]), (n = o = t[1]), (i = t[2]))\n              : ((e = t[0]), (n = t[1]), (i = t[2]), (o = t[3]))\n            : (e = n = i = o = t),\n          [e, n, i, o]\n        );\n      }\n    },\n    95: function (t, e, n) {\n      \"use strict\";\n      n.r(e),\n        n.d(e, \"mixColor\", function () {\n          return B;\n        }),\n        n.d(e, \"getColorsWithSubjectColor\", function () {\n          return L;\n        }),\n        n.d(e, \"getColorSetsBySubjectColors\", function () {\n          return D;\n        });\n      var r = n(55),\n        i = n.n(r);\n      function o(t, e) {\n        (function (t) {\n          return (\n            \"string\" == typeof t && -1 !== t.indexOf(\".\") && 1 === parseFloat(t)\n          );\n        })(t) && (t = \"100%\");\n        var n = (function (t) {\n          return \"string\" == typeof t && -1 !== t.indexOf(\"%\");\n        })(t);\n        return (\n          (t = 360 === e ? t : Math.min(e, Math.max(0, parseFloat(t)))),\n          n && (t = parseInt(String(t * e), 10) / 100),\n          Math.abs(t - e) < 1e-6\n            ? 1\n            : (t =\n                360 === e\n                  ? (t < 0 ? (t % e) + e : t % e) / parseFloat(String(e))\n                  : (t % e) / parseFloat(String(e)))\n        );\n      }\n      function a(t) {\n        return Math.min(1, Math.max(0, t));\n      }\n      function s(t) {\n        return (t = parseFloat(t)), (isNaN(t) || t < 0 || t > 1) && (t = 1), t;\n      }\n      function c(t) {\n        return t <= 1 ? \"\".concat(100 * Number(t), \"%\") : t;\n      }\n      function u(t) {\n        return 1 === t.length ? \"0\" + t : String(t);\n      }\n      function h(t, e, n) {\n        (t = o(t, 255)), (e = o(e, 255)), (n = o(n, 255));\n        var r = Math.max(t, e, n),\n          i = Math.min(t, e, n),\n          a = 0,\n          s = 0,\n          c = (r + i) / 2;\n        if (r === i) (s = 0), (a = 0);\n        else {\n          var u = r - i;\n          switch (((s = c > 0.5 ? u / (2 - r - i) : u / (r + i)), r)) {\n            case t:\n              a = (e - n) / u + (e < n ? 6 : 0);\n              break;\n            case e:\n              a = (n - t) / u + 2;\n              break;\n            case n:\n              a = (t - e) / u + 4;\n          }\n          a /= 6;\n        }\n        return { h: a, s: s, l: c };\n      }\n      function l(t, e, n) {\n        return (\n          n < 0 && (n += 1),\n          n > 1 && (n -= 1),\n          n < 1 / 6\n            ? t + 6 * n * (e - t)\n            : n < 0.5\n            ? e\n            : n < 2 / 3\n            ? t + (e - t) * (2 / 3 - n) * 6\n            : t\n        );\n      }\n      function f(t, e, n) {\n        (t = o(t, 255)), (e = o(e, 255)), (n = o(n, 255));\n        var r = Math.max(t, e, n),\n          i = Math.min(t, e, n),\n          a = 0,\n          s = r,\n          c = r - i,\n          u = 0 === r ? 0 : c / r;\n        if (r === i) a = 0;\n        else {\n          switch (r) {\n            case t:\n              a = (e - n) / c + (e < n ? 6 : 0);\n              break;\n            case e:\n              a = (n - t) / c + 2;\n              break;\n            case n:\n              a = (t - e) / c + 4;\n          }\n          a /= 6;\n        }\n        return { h: a, s: u, v: s };\n      }\n      function d(t, e, n, r) {\n        var i = [\n          u(Math.round(t).toString(16)),\n          u(Math.round(e).toString(16)),\n          u(Math.round(n).toString(16)),\n        ];\n        return r &&\n          i[0].startsWith(i[0].charAt(1)) &&\n          i[1].startsWith(i[1].charAt(1)) &&\n          i[2].startsWith(i[2].charAt(1))\n          ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0)\n          : i.join(\"\");\n      }\n      function p(t) {\n        return Math.round(255 * parseFloat(t)).toString(16);\n      }\n      function g(t) {\n        return v(t) / 255;\n      }\n      function v(t) {\n        return parseInt(t, 16);\n      }\n      var y = {\n        aliceblue: \"#f0f8ff\",\n        antiquewhite: \"#faebd7\",\n        aqua: \"#00ffff\",\n        aquamarine: \"#7fffd4\",\n        azure: \"#f0ffff\",\n        beige: \"#f5f5dc\",\n        bisque: \"#ffe4c4\",\n        black: \"#000000\",\n        blanchedalmond: \"#ffebcd\",\n        blue: \"#0000ff\",\n        blueviolet: \"#8a2be2\",\n        brown: \"#a52a2a\",\n        burlywood: \"#deb887\",\n        cadetblue: \"#5f9ea0\",\n        chartreuse: \"#7fff00\",\n        chocolate: \"#d2691e\",\n        coral: \"#ff7f50\",\n        cornflowerblue: \"#6495ed\",\n        cornsilk: \"#fff8dc\",\n        crimson: \"#dc143c\",\n        cyan: \"#00ffff\",\n        darkblue: \"#00008b\",\n        darkcyan: \"#008b8b\",\n        darkgoldenrod: \"#b8860b\",\n        darkgray: \"#a9a9a9\",\n        darkgreen: \"#006400\",\n        darkgrey: \"#a9a9a9\",\n        darkkhaki: \"#bdb76b\",\n        darkmagenta: \"#8b008b\",\n        darkolivegreen: \"#556b2f\",\n        darkorange: \"#ff8c00\",\n        darkorchid: \"#9932cc\",\n        darkred: \"#8b0000\",\n        darksalmon: \"#e9967a\",\n        darkseagreen: \"#8fbc8f\",\n        darkslateblue: \"#483d8b\",\n        darkslategray: \"#2f4f4f\",\n        darkslategrey: \"#2f4f4f\",\n        darkturquoise: \"#00ced1\",\n        darkviolet: \"#9400d3\",\n        deeppink: \"#ff1493\",\n        deepskyblue: \"#00bfff\",\n        dimgray: \"#696969\",\n        dimgrey: \"#696969\",\n        dodgerblue: \"#1e90ff\",\n        firebrick: \"#b22222\",\n        floralwhite: \"#fffaf0\",\n        forestgreen: \"#228b22\",\n        fuchsia: \"#ff00ff\",\n        gainsboro: \"#dcdcdc\",\n        ghostwhite: \"#f8f8ff\",\n        goldenrod: \"#daa520\",\n        gold: \"#ffd700\",\n        gray: \"#808080\",\n        green: \"#008000\",\n        greenyellow: \"#adff2f\",\n        grey: \"#808080\",\n        honeydew: \"#f0fff0\",\n        hotpink: \"#ff69b4\",\n        indianred: \"#cd5c5c\",\n        indigo: \"#4b0082\",\n        ivory: \"#fffff0\",\n        khaki: \"#f0e68c\",\n        lavenderblush: \"#fff0f5\",\n        lavender: \"#e6e6fa\",\n        lawngreen: \"#7cfc00\",\n        lemonchiffon: \"#fffacd\",\n        lightblue: \"#add8e6\",\n        lightcoral: \"#f08080\",\n        lightcyan: \"#e0ffff\",\n        lightgoldenrodyellow: \"#fafad2\",\n        lightgray: \"#d3d3d3\",\n        lightgreen: \"#90ee90\",\n        lightgrey: \"#d3d3d3\",\n        lightpink: \"#ffb6c1\",\n        lightsalmon: \"#ffa07a\",\n        lightseagreen: \"#20b2aa\",\n        lightskyblue: \"#87cefa\",\n        lightslategray: \"#778899\",\n        lightslategrey: \"#778899\",\n        lightsteelblue: \"#b0c4de\",\n        lightyellow: \"#ffffe0\",\n        lime: \"#00ff00\",\n        limegreen: \"#32cd32\",\n        linen: \"#faf0e6\",\n        magenta: \"#ff00ff\",\n        maroon: \"#800000\",\n        mediumaquamarine: \"#66cdaa\",\n        mediumblue: \"#0000cd\",\n        mediumorchid: \"#ba55d3\",\n        mediumpurple: \"#9370db\",\n        mediumseagreen: \"#3cb371\",\n        mediumslateblue: \"#7b68ee\",\n        mediumspringgreen: \"#00fa9a\",\n        mediumturquoise: \"#48d1cc\",\n        mediumvioletred: \"#c71585\",\n        midnightblue: \"#191970\",\n        mintcream: \"#f5fffa\",\n        mistyrose: \"#ffe4e1\",\n        moccasin: \"#ffe4b5\",\n        navajowhite: \"#ffdead\",\n        navy: \"#000080\",\n        oldlace: \"#fdf5e6\",\n        olive: \"#808000\",\n        olivedrab: \"#6b8e23\",\n        orange: \"#ffa500\",\n        orangered: \"#ff4500\",\n        orchid: \"#da70d6\",\n        palegoldenrod: \"#eee8aa\",\n        palegreen: \"#98fb98\",\n        paleturquoise: \"#afeeee\",\n        palevioletred: \"#db7093\",\n        papayawhip: \"#ffefd5\",\n        peachpuff: \"#ffdab9\",\n        peru: \"#cd853f\",\n        pink: \"#ffc0cb\",\n        plum: \"#dda0dd\",\n        powderblue: \"#b0e0e6\",\n        purple: \"#800080\",\n        rebeccapurple: \"#663399\",\n        red: \"#ff0000\",\n        rosybrown: \"#bc8f8f\",\n        royalblue: \"#4169e1\",\n        saddlebrown: \"#8b4513\",\n        salmon: \"#fa8072\",\n        sandybrown: \"#f4a460\",\n        seagreen: \"#2e8b57\",\n        seashell: \"#fff5ee\",\n        sienna: \"#a0522d\",\n        silver: \"#c0c0c0\",\n        skyblue: \"#87ceeb\",\n        slateblue: \"#6a5acd\",\n        slategray: \"#708090\",\n        slategrey: \"#708090\",\n        snow: \"#fffafa\",\n        springgreen: \"#00ff7f\",\n        steelblue: \"#4682b4\",\n        tan: \"#d2b48c\",\n        teal: \"#008080\",\n        thistle: \"#d8bfd8\",\n        tomato: \"#ff6347\",\n        turquoise: \"#40e0d0\",\n        violet: \"#ee82ee\",\n        wheat: \"#f5deb3\",\n        white: \"#ffffff\",\n        whitesmoke: \"#f5f5f5\",\n        yellow: \"#ffff00\",\n        yellowgreen: \"#9acd32\",\n      };\n      function m(t) {\n        return (m =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function b(t) {\n        var e,\n          n,\n          r,\n          i = { r: 0, g: 0, b: 0 },\n          a = 1,\n          u = null,\n          h = null,\n          f = null,\n          d = !1,\n          p = !1;\n        return (\n          \"string\" == typeof t &&\n            (t = (function (t) {\n              if (0 === (t = t.trim().toLowerCase()).length) return !1;\n              var e = !1;\n              if (y[t]) (t = y[t]), (e = !0);\n              else if (\"transparent\" === t)\n                return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n              var n = O.rgb.exec(t);\n              if (n) return { r: n[1], g: n[2], b: n[3] };\n              if ((n = O.rgba.exec(t)))\n                return { r: n[1], g: n[2], b: n[3], a: n[4] };\n              if ((n = O.hsl.exec(t))) return { h: n[1], s: n[2], l: n[3] };\n              if ((n = O.hsla.exec(t)))\n                return { h: n[1], s: n[2], l: n[3], a: n[4] };\n              if ((n = O.hsv.exec(t))) return { h: n[1], s: n[2], v: n[3] };\n              if ((n = O.hsva.exec(t)))\n                return { h: n[1], s: n[2], v: n[3], a: n[4] };\n              if ((n = O.hex8.exec(t)))\n                return {\n                  r: v(n[1]),\n                  g: v(n[2]),\n                  b: v(n[3]),\n                  a: g(n[4]),\n                  format: e ? \"name\" : \"hex8\",\n                };\n              if ((n = O.hex6.exec(t)))\n                return {\n                  r: v(n[1]),\n                  g: v(n[2]),\n                  b: v(n[3]),\n                  format: e ? \"name\" : \"hex\",\n                };\n              if ((n = O.hex4.exec(t)))\n                return {\n                  r: v(n[1] + n[1]),\n                  g: v(n[2] + n[2]),\n                  b: v(n[3] + n[3]),\n                  a: g(n[4] + n[4]),\n                  format: e ? \"name\" : \"hex8\",\n                };\n              if ((n = O.hex3.exec(t)))\n                return {\n                  r: v(n[1] + n[1]),\n                  g: v(n[2] + n[2]),\n                  b: v(n[3] + n[3]),\n                  format: e ? \"name\" : \"hex\",\n                };\n              return !1;\n            })(t)),\n          \"object\" === m(t) &&\n            (M(t.r) && M(t.g) && M(t.b)\n              ? ((e = t.r),\n                (n = t.g),\n                (r = t.b),\n                (i = {\n                  r: 255 * o(e, 255),\n                  g: 255 * o(n, 255),\n                  b: 255 * o(r, 255),\n                }),\n                (d = !0),\n                (p = \"%\" === String(t.r).substr(-1) ? \"prgb\" : \"rgb\"))\n              : M(t.h) && M(t.s) && M(t.v)\n              ? ((u = c(t.s)),\n                (h = c(t.v)),\n                (i = (function (t, e, n) {\n                  (t = 6 * o(t, 360)), (e = o(e, 100)), (n = o(n, 100));\n                  var r = Math.floor(t),\n                    i = t - r,\n                    a = n * (1 - e),\n                    s = n * (1 - i * e),\n                    c = n * (1 - (1 - i) * e),\n                    u = r % 6;\n                  return {\n                    r: 255 * [n, s, a, a, c, n][u],\n                    g: 255 * [c, n, n, s, a, a][u],\n                    b: 255 * [a, a, c, n, n, s][u],\n                  };\n                })(t.h, u, h)),\n                (d = !0),\n                (p = \"hsv\"))\n              : M(t.h) &&\n                M(t.s) &&\n                M(t.l) &&\n                ((u = c(t.s)),\n                (f = c(t.l)),\n                (i = (function (t, e, n) {\n                  var r, i, a;\n                  if (\n                    ((t = o(t, 360)), (e = o(e, 100)), (n = o(n, 100)), 0 === e)\n                  )\n                    (i = n), (a = n), (r = n);\n                  else {\n                    var s = n < 0.5 ? n * (1 + e) : n + e - n * e,\n                      c = 2 * n - s;\n                    (r = l(c, s, t + 1 / 3)),\n                      (i = l(c, s, t)),\n                      (a = l(c, s, t - 1 / 3));\n                  }\n                  return { r: 255 * r, g: 255 * i, b: 255 * a };\n                })(t.h, u, f)),\n                (d = !0),\n                (p = \"hsl\")),\n            Object.prototype.hasOwnProperty.call(t, \"a\") && (a = t.a)),\n          (a = s(a)),\n          {\n            ok: d,\n            format: t.format || p,\n            r: Math.min(255, Math.max(i.r, 0)),\n            g: Math.min(255, Math.max(i.g, 0)),\n            b: Math.min(255, Math.max(i.b, 0)),\n            a: a,\n          }\n        );\n      }\n      var x = \"(?:\"\n          .concat(\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\", \")|(?:\")\n          .concat(\"[-\\\\+]?\\\\d+%?\", \")\"),\n        S = \"[\\\\s|\\\\(]+(\"\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")\\\\s*\\\\)?\"),\n        w = \"[\\\\s|\\\\(]+(\"\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")[,|\\\\s]+(\")\n          .concat(x, \")\\\\s*\\\\)?\"),\n        O = {\n          CSS_UNIT: new RegExp(x),\n          rgb: new RegExp(\"rgb\" + S),\n          rgba: new RegExp(\"rgba\" + w),\n          hsl: new RegExp(\"hsl\" + S),\n          hsla: new RegExp(\"hsla\" + w),\n          hsv: new RegExp(\"hsv\" + S),\n          hsva: new RegExp(\"hsva\" + w),\n          hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n          hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n          hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n          hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n        };\n      function M(t) {\n        return Boolean(O.CSS_UNIT.exec(String(t)));\n      }\n      var k = (function () {\n        function t(e, n) {\n          var r;\n          if (\n            (void 0 === e && (e = \"\"), void 0 === n && (n = {}), e instanceof t)\n          )\n            return e;\n          \"number\" == typeof e &&\n            (e = (function (t) {\n              return { r: t >> 16, g: (65280 & t) >> 8, b: 255 & t };\n            })(e)),\n            (this.originalInput = e);\n          var i = b(e);\n          (this.originalInput = e),\n            (this.r = i.r),\n            (this.g = i.g),\n            (this.b = i.b),\n            (this.a = i.a),\n            (this.roundA = Math.round(100 * this.a) / 100),\n            (this.format =\n              null !== (r = n.format) && void 0 !== r ? r : i.format),\n            (this.gradientType = n.gradientType),\n            this.r < 1 && (this.r = Math.round(this.r)),\n            this.g < 1 && (this.g = Math.round(this.g)),\n            this.b < 1 && (this.b = Math.round(this.b)),\n            (this.isValid = i.ok);\n        }\n        return (\n          (t.prototype.isDark = function () {\n            return this.getBrightness() < 128;\n          }),\n          (t.prototype.isLight = function () {\n            return !this.isDark();\n          }),\n          (t.prototype.getBrightness = function () {\n            var t = this.toRgb();\n            return (299 * t.r + 587 * t.g + 114 * t.b) / 1e3;\n          }),\n          (t.prototype.getLuminance = function () {\n            var t = this.toRgb(),\n              e = t.r / 255,\n              n = t.g / 255,\n              r = t.b / 255;\n            return (\n              0.2126 *\n                (e <= 0.03928\n                  ? e / 12.92\n                  : Math.pow((e + 0.055) / 1.055, 2.4)) +\n              0.7152 *\n                (n <= 0.03928\n                  ? n / 12.92\n                  : Math.pow((n + 0.055) / 1.055, 2.4)) +\n              0.0722 *\n                (r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4))\n            );\n          }),\n          (t.prototype.getAlpha = function () {\n            return this.a;\n          }),\n          (t.prototype.setAlpha = function (t) {\n            return (\n              (this.a = s(t)),\n              (this.roundA = Math.round(100 * this.a) / 100),\n              this\n            );\n          }),\n          (t.prototype.isMonochrome = function () {\n            return 0 === this.toHsl().s;\n          }),\n          (t.prototype.toHsv = function () {\n            var t = f(this.r, this.g, this.b);\n            return { h: 360 * t.h, s: t.s, v: t.v, a: this.a };\n          }),\n          (t.prototype.toHsvString = function () {\n            var t = f(this.r, this.g, this.b),\n              e = Math.round(360 * t.h),\n              n = Math.round(100 * t.s),\n              r = Math.round(100 * t.v);\n            return 1 === this.a\n              ? \"hsv(\".concat(e, \", \").concat(n, \"%, \").concat(r, \"%)\")\n              : \"hsva(\"\n                  .concat(e, \", \")\n                  .concat(n, \"%, \")\n                  .concat(r, \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toHsl = function () {\n            var t = h(this.r, this.g, this.b);\n            return { h: 360 * t.h, s: t.s, l: t.l, a: this.a };\n          }),\n          (t.prototype.toHslString = function () {\n            var t = h(this.r, this.g, this.b),\n              e = Math.round(360 * t.h),\n              n = Math.round(100 * t.s),\n              r = Math.round(100 * t.l);\n            return 1 === this.a\n              ? \"hsl(\".concat(e, \", \").concat(n, \"%, \").concat(r, \"%)\")\n              : \"hsla(\"\n                  .concat(e, \", \")\n                  .concat(n, \"%, \")\n                  .concat(r, \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toHex = function (t) {\n            return void 0 === t && (t = !1), d(this.r, this.g, this.b, t);\n          }),\n          (t.prototype.toHexString = function (t) {\n            return void 0 === t && (t = !1), \"#\" + this.toHex(t);\n          }),\n          (t.prototype.toHex8 = function (t) {\n            return (\n              void 0 === t && (t = !1),\n              (function (t, e, n, r, i) {\n                var o = [\n                  u(Math.round(t).toString(16)),\n                  u(Math.round(e).toString(16)),\n                  u(Math.round(n).toString(16)),\n                  u(p(r)),\n                ];\n                return i &&\n                  o[0].startsWith(o[0].charAt(1)) &&\n                  o[1].startsWith(o[1].charAt(1)) &&\n                  o[2].startsWith(o[2].charAt(1)) &&\n                  o[3].startsWith(o[3].charAt(1))\n                  ? o[0].charAt(0) +\n                      o[1].charAt(0) +\n                      o[2].charAt(0) +\n                      o[3].charAt(0)\n                  : o.join(\"\");\n              })(this.r, this.g, this.b, this.a, t)\n            );\n          }),\n          (t.prototype.toHex8String = function (t) {\n            return void 0 === t && (t = !1), \"#\" + this.toHex8(t);\n          }),\n          (t.prototype.toRgb = function () {\n            return {\n              r: Math.round(this.r),\n              g: Math.round(this.g),\n              b: Math.round(this.b),\n              a: this.a,\n            };\n          }),\n          (t.prototype.toRgbString = function () {\n            var t = Math.round(this.r),\n              e = Math.round(this.g),\n              n = Math.round(this.b);\n            return 1 === this.a\n              ? \"rgb(\".concat(t, \", \").concat(e, \", \").concat(n, \")\")\n              : \"rgba(\"\n                  .concat(t, \", \")\n                  .concat(e, \", \")\n                  .concat(n, \", \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toPercentageRgb = function () {\n            var t = function (t) {\n              return \"\".concat(Math.round(100 * o(t, 255)), \"%\");\n            };\n            return { r: t(this.r), g: t(this.g), b: t(this.b), a: this.a };\n          }),\n          (t.prototype.toPercentageRgbString = function () {\n            var t = function (t) {\n              return Math.round(100 * o(t, 255));\n            };\n            return 1 === this.a\n              ? \"rgb(\"\n                  .concat(t(this.r), \"%, \")\n                  .concat(t(this.g), \"%, \")\n                  .concat(t(this.b), \"%)\")\n              : \"rgba(\"\n                  .concat(t(this.r), \"%, \")\n                  .concat(t(this.g), \"%, \")\n                  .concat(t(this.b), \"%, \")\n                  .concat(this.roundA, \")\");\n          }),\n          (t.prototype.toName = function () {\n            if (0 === this.a) return \"transparent\";\n            if (this.a < 1) return !1;\n            for (\n              var t = \"#\" + d(this.r, this.g, this.b, !1),\n                e = 0,\n                n = Object.entries(y);\n              e < n.length;\n              e++\n            ) {\n              var r = n[e],\n                i = r[0];\n              if (t === r[1]) return i;\n            }\n            return !1;\n          }),\n          (t.prototype.toString = function (t) {\n            var e = Boolean(t);\n            t = null != t ? t : this.format;\n            var n = !1,\n              r = this.a < 1 && this.a >= 0;\n            return e || !r || (!t.startsWith(\"hex\") && \"name\" !== t)\n              ? (\"rgb\" === t && (n = this.toRgbString()),\n                \"prgb\" === t && (n = this.toPercentageRgbString()),\n                (\"hex\" !== t && \"hex6\" !== t) || (n = this.toHexString()),\n                \"hex3\" === t && (n = this.toHexString(!0)),\n                \"hex4\" === t && (n = this.toHex8String(!0)),\n                \"hex8\" === t && (n = this.toHex8String()),\n                \"name\" === t && (n = this.toName()),\n                \"hsl\" === t && (n = this.toHslString()),\n                \"hsv\" === t && (n = this.toHsvString()),\n                n || this.toHexString())\n              : \"name\" === t && 0 === this.a\n              ? this.toName()\n              : this.toRgbString();\n          }),\n          (t.prototype.toNumber = function () {\n            return (\n              (Math.round(this.r) << 16) +\n              (Math.round(this.g) << 8) +\n              Math.round(this.b)\n            );\n          }),\n          (t.prototype.clone = function () {\n            return new t(this.toString());\n          }),\n          (t.prototype.lighten = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.l += e / 100), (n.l = a(n.l)), new t(n);\n          }),\n          (t.prototype.brighten = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toRgb();\n            return (\n              (n.r = Math.max(\n                0,\n                Math.min(255, n.r - Math.round((-e / 100) * 255)),\n              )),\n              (n.g = Math.max(\n                0,\n                Math.min(255, n.g - Math.round((-e / 100) * 255)),\n              )),\n              (n.b = Math.max(\n                0,\n                Math.min(255, n.b - Math.round((-e / 100) * 255)),\n              )),\n              new t(n)\n            );\n          }),\n          (t.prototype.darken = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.l -= e / 100), (n.l = a(n.l)), new t(n);\n          }),\n          (t.prototype.tint = function (t) {\n            return void 0 === t && (t = 10), this.mix(\"white\", t);\n          }),\n          (t.prototype.shade = function (t) {\n            return void 0 === t && (t = 10), this.mix(\"black\", t);\n          }),\n          (t.prototype.desaturate = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.s -= e / 100), (n.s = a(n.s)), new t(n);\n          }),\n          (t.prototype.saturate = function (e) {\n            void 0 === e && (e = 10);\n            var n = this.toHsl();\n            return (n.s += e / 100), (n.s = a(n.s)), new t(n);\n          }),\n          (t.prototype.greyscale = function () {\n            return this.desaturate(100);\n          }),\n          (t.prototype.spin = function (e) {\n            var n = this.toHsl(),\n              r = (n.h + e) % 360;\n            return (n.h = r < 0 ? 360 + r : r), new t(n);\n          }),\n          (t.prototype.mix = function (e, n) {\n            void 0 === n && (n = 50);\n            var r = this.toRgb(),\n              i = new t(e).toRgb(),\n              o = n / 100;\n            return new t({\n              r: (i.r - r.r) * o + r.r,\n              g: (i.g - r.g) * o + r.g,\n              b: (i.b - r.b) * o + r.b,\n              a: (i.a - r.a) * o + r.a,\n            });\n          }),\n          (t.prototype.analogous = function (e, n) {\n            void 0 === e && (e = 6), void 0 === n && (n = 30);\n            var r = this.toHsl(),\n              i = 360 / n,\n              o = [this];\n            for (r.h = (r.h - ((i * e) >> 1) + 720) % 360; --e; )\n              (r.h = (r.h + i) % 360), o.push(new t(r));\n            return o;\n          }),\n          (t.prototype.complement = function () {\n            var e = this.toHsl();\n            return (e.h = (e.h + 180) % 360), new t(e);\n          }),\n          (t.prototype.monochromatic = function (e) {\n            void 0 === e && (e = 6);\n            for (\n              var n = this.toHsv(),\n                r = n.h,\n                i = n.s,\n                o = n.v,\n                a = [],\n                s = 1 / e;\n              e--;\n\n            )\n              a.push(new t({ h: r, s: i, v: o })), (o = (o + s) % 1);\n            return a;\n          }),\n          (t.prototype.splitcomplement = function () {\n            var e = this.toHsl(),\n              n = e.h;\n            return [\n              this,\n              new t({ h: (n + 72) % 360, s: e.s, l: e.l }),\n              new t({ h: (n + 216) % 360, s: e.s, l: e.l }),\n            ];\n          }),\n          (t.prototype.onBackground = function (e) {\n            var n = this.toRgb(),\n              r = new t(e).toRgb();\n            return new t({\n              r: r.r + (n.r - r.r) * n.a,\n              g: r.g + (n.g - r.g) * n.a,\n              b: r.b + (n.b - r.b) * n.a,\n            });\n          }),\n          (t.prototype.triad = function () {\n            return this.polyad(3);\n          }),\n          (t.prototype.tetrad = function () {\n            return this.polyad(4);\n          }),\n          (t.prototype.polyad = function (e) {\n            for (\n              var n = this.toHsl(), r = n.h, i = [this], o = 360 / e, a = 1;\n              a < e;\n              a++\n            )\n              i.push(new t({ h: (r + a * o) % 360, s: n.s, l: n.l }));\n            return i;\n          }),\n          (t.prototype.equals = function (e) {\n            return this.toRgbString() === new t(e).toRgbString();\n          }),\n          t\n        );\n      })();\n      var j = [\n        { index: 7, opacity: 0.15 },\n        { index: 6, opacity: 0.25 },\n        { index: 5, opacity: 0.3 },\n        { index: 5, opacity: 0.45 },\n        { index: 5, opacity: 0.65 },\n        { index: 5, opacity: 0.85 },\n        { index: 4, opacity: 0.9 },\n        { index: 3, opacity: 0.95 },\n        { index: 2, opacity: 0.97 },\n        { index: 1, opacity: 0.98 },\n      ];\n      function C(t, e, n) {\n        var r;\n        return (\n          (r =\n            Math.round(t.h) >= 60 && Math.round(t.h) <= 240\n              ? n\n                ? Math.round(t.h) - 2 * e\n                : Math.round(t.h) + 2 * e\n              : n\n              ? Math.round(t.h) + 2 * e\n              : Math.round(t.h) - 2 * e) < 0\n            ? (r += 360)\n            : r >= 360 && (r -= 360),\n          r\n        );\n      }\n      function E(t, e, n) {\n        return 0 === t.h && 0 === t.s\n          ? t.s\n          : ((r = n ? t.s - 0.16 * e : 4 === e ? t.s + 0.16 : t.s + 0.05 * e) >\n              1 && (r = 1),\n            n && 5 === e && r > 0.1 && (r = 0.1),\n            r < 0.06 && (r = 0.06),\n            Number(r.toFixed(2)));\n        var r;\n      }\n      function P(t, e, n) {\n        var r;\n        return (\n          (r = n ? t.v + 0.05 * e : t.v - 0.15 * e) > 1 && (r = 1),\n          Number(r.toFixed(2))\n        );\n      }\n      function A(t) {\n        for (\n          var e =\n              arguments.length > 1 && void 0 !== arguments[1]\n                ? arguments[1]\n                : {},\n            n = [],\n            r = new k(t),\n            i = 5;\n          i > 0;\n          i -= 1\n        ) {\n          var o = r.toHsv(),\n            a = new k({\n              h: C(o, i, !0),\n              s: E(o, i, !0),\n              v: P(o, i, !0),\n            }).toHexString();\n          n.push(a);\n        }\n        n.push(r.toHexString());\n        for (var s = 1; s <= 4; s += 1) {\n          var c = r.toHsv(),\n            u = new k({ h: C(c, s), s: E(c, s), v: P(c, s) }).toHexString();\n          n.push(u);\n        }\n        return \"dark\" === e.theme\n          ? j.map(function (t) {\n              var r = t.index,\n                i = t.opacity;\n              return new k(e.backgroundColor || \"#141414\")\n                .mix(n[r], 100 * i)\n                .toHexString();\n            })\n          : n;\n      }\n      var I = {\n          red: \"#F5222D\",\n          volcano: \"#FA541C\",\n          orange: \"#FA8C16\",\n          gold: \"#FAAD14\",\n          yellow: \"#FADB14\",\n          lime: \"#A0D911\",\n          green: \"#52C41A\",\n          cyan: \"#13C2C2\",\n          blue: \"#1890FF\",\n          geekblue: \"#2F54EB\",\n          purple: \"#722ED1\",\n          magenta: \"#EB2F96\",\n          grey: \"#666666\",\n        },\n        T = {},\n        N = {};\n      Object.keys(I).forEach(function (t) {\n        (T[t] = A(I[t])),\n          (T[t].primary = T[t][5]),\n          (N[t] = A(I[t], { theme: \"dark\", backgroundColor: \"#141414\" })),\n          (N[t].primary = N[t][5]);\n      });\n      T.red,\n        T.volcano,\n        T.gold,\n        T.orange,\n        T.yellow,\n        T.lime,\n        T.green,\n        T.cyan,\n        T.blue,\n        T.geekblue,\n        T.purple,\n        T.magenta,\n        T.grey;\n      var B = function (t, e, n) {\n          var r = i()(t),\n            o = i()(e);\n          return i()([\n            (1 - n) * r.red() + n * o.red(),\n            (1 - n) * r.green() + n * o.green(),\n            (1 - n) * r.blue() + n * o.blue(),\n          ]).rgb();\n        },\n        L = function (t, e, n, r) {\n          return (\n            void 0 === e && (e = \"#fff\"),\n            void 0 === n && (n = \"default\"),\n            void 0 === r && (r = \"rgb(150, 150, 150)\"),\n            \"default\" === n\n              ? (function (t, e, n) {\n                  void 0 === e && (e = \"#fff\"),\n                    void 0 === n && (n = \"rgb(150, 150, 150)\");\n                  var r = B(e, t, 0.05).rgb().toString(),\n                    o = B(e, t, 0.1).rgb().toString(),\n                    a = B(e, t, 0.2).rgb().toString(),\n                    s = B(e, t, 0.4).rgb().toString(),\n                    c = B(e, n, 0.02).rgb().toString(),\n                    u = B(e, n, 0.05).rgb().toString(),\n                    h = B(e, n, 0.1).rgb().toString(),\n                    l = B(e, n, 0.2).rgb().toString(),\n                    f = B(e, n, 0.3).rgb().toString(),\n                    d = A(t, { theme: \"default\", backgroundColor: e }),\n                    p = i()(t).hex().toLowerCase(),\n                    g = d.indexOf(p),\n                    v = t;\n                  return (\n                    -1 !== g && (v = d[g + 1]),\n                    {\n                      mainStroke: t,\n                      mainFill: o,\n                      activeStroke: t,\n                      activeFill: r,\n                      inactiveStroke: s,\n                      inactiveFill: r,\n                      selectedStroke: t,\n                      selectedFill: e,\n                      highlightStroke: v,\n                      highlightFill: a,\n                      disableStroke: f,\n                      disableFill: u,\n                      edgeMainStroke: f,\n                      edgeActiveStroke: t,\n                      edgeInactiveStroke: l,\n                      edgeSelectedStroke: t,\n                      edgeHighlightStroke: t,\n                      edgeDisableStroke: h,\n                      comboMainStroke: f,\n                      comboMainFill: c,\n                      comboActiveStroke: t,\n                      comboActiveFill: r,\n                      comboInactiveStroke: f,\n                      comboInactiveFill: c,\n                      comboSelectedStroke: t,\n                      comboSelectedFill: c,\n                      comboHighlightStroke: v,\n                      comboHighlightFill: c,\n                      comboDisableStroke: l,\n                      comboDisableFill: u,\n                    }\n                  );\n                })(t, e, \"rgb(150, 150, 150)\")\n              : (function (t, e, n) {\n                  void 0 === e && (e = \"#fff\"), void 0 === n && (n = \"#777\");\n                  var r = B(e, t, 0.2).rgb().toString(),\n                    o = B(e, t, 0.3).rgb().toString(),\n                    a = B(e, t, 0.6).rgb().toString(),\n                    s = B(e, t, 0.8).rgb().toString(),\n                    c = B(e, n, 0.2).rgb().toString(),\n                    u = B(e, n, 0.25).rgb().toString(),\n                    h = B(e, n, 0.3).rgb().toString(),\n                    l = B(e, n, 0.4).rgb().toString(),\n                    f = B(e, n, 0.5).rgb().toString(),\n                    d = A(t, { theme: \"dark\", backgroundColor: e }),\n                    p = i()(t).hex().toLowerCase(),\n                    g = d.indexOf(p),\n                    v = t;\n                  return (\n                    -1 !== g && (v = d[g + 1]),\n                    {\n                      mainStroke: s,\n                      mainFill: r,\n                      activeStroke: t,\n                      activeFill: o,\n                      inactiveStroke: s,\n                      inactiveFill: r,\n                      selectedStroke: t,\n                      selectedFill: r,\n                      highlightStroke: t,\n                      highlightFill: a,\n                      disableStroke: f,\n                      disableFill: u,\n                      edgeMainStroke: n,\n                      edgeActiveStroke: t,\n                      edgeInactiveStroke: n,\n                      edgeSelectedStroke: t,\n                      edgeHighlightStroke: t,\n                      edgeDisableStroke: h,\n                      comboMainStroke: l,\n                      comboMainFill: u,\n                      comboActiveStroke: t,\n                      comboActiveFill: c,\n                      comboInactiveStroke: l,\n                      comboInactiveFill: u,\n                      comboSelectedStroke: t,\n                      comboSelectedFill: c,\n                      comboHighlightStroke: v,\n                      comboHighlightFill: u,\n                      comboDisableStroke: l,\n                      comboDisableFill: c,\n                    }\n                  );\n                })(t, e, \"#777\")\n          );\n        },\n        D = function (t, e, n, r) {\n          void 0 === e && (e = \"#fff\"),\n            void 0 === n && (n = \"default\"),\n            void 0 === r && (r = \"rgb(150, 150, 150)\");\n          var i = [];\n          return (\n            t.forEach(function (t) {\n              i.push(L(t, e, n, r));\n            }),\n            i\n          );\n        };\n    },\n    96: function (t, e, n) {\n      \"use strict\";\n      n.d(e, \"b\", function () {\n        return v;\n      });\n      var r = n(1),\n        i = n(65),\n        o = n(5);\n      var a = n(0),\n        s = n(2),\n        c = n(22),\n        u = s.h.cloneEvent,\n        h = s.h.isViewportChanged,\n        l = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.extendEvents = []),\n              (n.dragging = !1),\n              (n.preItem = null),\n              (n.graph = e),\n              (n.destroyed = !1),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.initEvents = function () {\n              var t = this.graph,\n                e = (this.extendEvents, t.get(\"canvas\"));\n              (this.canvasHandler = Object(a.wrapBehavior)(\n                this,\n                \"onCanvasEvents\",\n              )),\n                e.off(\"*\").on(\"*\", this.canvasHandler);\n            }),\n            (e.getItemRoot = function (t) {\n              for (; t && !t.get(\"item\"); ) t = t.get(\"parent\");\n              return t;\n            }),\n            (e.prototype.onCanvasEvents = function (t) {\n              var n = this.graph,\n                r = n.get(\"canvas\"),\n                i = t.target,\n                o = t.type;\n              (t.canvasX = t.x), (t.canvasY = t.y);\n              var a = { x: t.canvasX, y: t.canvasY },\n                s = n.get(\"group\").getMatrix();\n              if (\n                (s || (s = [1, 0, 0, 0, 1, 0, 0, 0, 1]),\n                h(s) && (a = n.getPointByClient(t.clientX, t.clientY)),\n                (t.x = a.x),\n                (t.y = a.y),\n                (t.currentTarget = n),\n                i === r)\n              )\n                return (\n                  \"panmove\" === o && this.handleTouchMove(t, \"canvas\"),\n                  (t.target = r),\n                  (t.item = null),\n                  n.emit(o, t),\n                  void n.emit(\"canvas:\" + o, t)\n                );\n              var c = e.getItemRoot(i);\n              if (c) {\n                var u = c.get(\"item\");\n                if (!u.destroyed) {\n                  var l = u.getType();\n                  if (\n                    ((t.target = i),\n                    (t.item = u),\n                    t.canvasX === t.x && t.canvasY === t.y)\n                  ) {\n                    var f = n.getCanvasByPoint(t.x, t.y);\n                    (t.canvasX = f.x), (t.canvasY = f.y);\n                  }\n                  n.emit(o, t),\n                    t.name && !t.name.includes(\":\")\n                      ? n.emit(l + \":\" + o, t)\n                      : n.emit(t.name, t),\n                    \"dragstart\" === o && (this.dragging = !0),\n                    \"dragend\" === o && (this.dragging = !1),\n                    \"panmove\" === o && this.handleTouchMove(t, l);\n                }\n              } else n.emit(o, t);\n            }),\n            (e.prototype.onExtendEvents = function (t) {\n              this.graph.emit(t.type, t);\n            }),\n            (e.prototype.emitCustomEvent = function (t, e, n) {\n              (n.type = e), this.graph.emit(t + \":\" + e, n);\n            }),\n            (e.prototype.destroy = function () {\n              var t = this.graph,\n                e = this.canvasHandler,\n                n = this.extendEvents;\n              t.get(\"canvas\").off(\"*\", e),\n                Object(a.each)(n, function (t) {\n                  t.remove();\n                }),\n                (this.dragging = !1),\n                (this.preItem = null),\n                (this.extendEvents.length = 0),\n                (this.canvasHandler = null),\n                (this.destroyed = !0);\n            }),\n            (e.prototype.handleTouchMove = function (t, e) {\n              var n = this.graph,\n                r = this.preItem,\n                i = n.get(\"canvas\"),\n                o = t.target === i ? null : t.item;\n              (t = u(t)),\n                r &&\n                  r !== o &&\n                  !r.destroyed &&\n                  ((t.item = r),\n                  this.emitCustomEvent(r.getType(), \"touchleave\", t),\n                  this.dragging &&\n                    this.emitCustomEvent(r.getType(), \"dragleave\", t)),\n                o &&\n                  r !== o &&\n                  ((t.item = o),\n                  this.emitCustomEvent(e, \"touchenter\", t),\n                  this.dragging && this.emitCustomEvent(e, \"dragenter\", t)),\n                (this.preItem = o);\n            }),\n            e\n          );\n        })(s.a),\n        f = n(33),\n        d = [\"force\", \"grid\", \"circular\"],\n        p = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            return (\n              (n.graph = e),\n              (n.layoutCfg = e.get(\"layout\") || {}),\n              (n.layoutType = n.getLayoutType()),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.updateLayoutCfg = function (t) {\n              var e = this,\n                n = this.graph,\n                r = this.layoutMethods,\n                i = Object(a.mix)({}, this.layoutCfg, t);\n              if (((this.layoutCfg = i), null == r ? void 0 : r.length)) {\n                (this.data = this.setDataFromGraph()), n.emit(\"beforelayout\");\n                var o = Promise.resolve();\n                1 === r.length\n                  ? (o = o.then(function () {\n                      return e.updateLayoutMethod(r[0], i);\n                    }))\n                  : null == r ||\n                    r.forEach(function (t, n) {\n                      var r = i.pipes[n];\n                      o = o.then(function () {\n                        return e.updateLayoutMethod(t, r);\n                      });\n                    }),\n                  (this.data = this.setDataFromGraph()),\n                  o\n                    .then(function () {\n                      i.onAllLayoutEnd && i.onAllLayoutEnd();\n                    })\n                    .catch(function (t) {\n                      console.warn(\"layout failed\", t);\n                    });\n              } else this.layout();\n            }),\n            (e.prototype.layout = function (t) {\n              var e = this,\n                n = this.graph;\n              this.data = this.setDataFromGraph();\n              var i = this.data,\n                o = i.nodes,\n                a = i.hiddenNodes;\n              if (!o) return !1;\n              var s = n.get(\"width\"),\n                c = n.get(\"height\"),\n                u = {};\n              Object.assign(\n                u,\n                { width: s, height: c, center: [s / 2, c / 2] },\n                this.layoutCfg,\n              ),\n                (this.layoutCfg = u),\n                this.destoryLayoutMethods(),\n                n.emit(\"beforelayout\"),\n                this.initPositions(u.center, o),\n                this.initPositions(u.center, a);\n              var h = u.onLayoutEnd,\n                l = u.layoutEndFormatted,\n                f = u.adjust;\n              l ||\n                ((u.layoutEndFormatted = !0),\n                (u.onAllLayoutEnd = function () {\n                  return Object(r.b)(e, void 0, void 0, function () {\n                    return Object(r.d)(this, function (t) {\n                      switch (t.label) {\n                        case 0:\n                          return (\n                            h && h(),\n                            this.refreshLayout(),\n                            f && u.pipes\n                              ? [4, this.adjustPipesBox(this.data, f)]\n                              : [3, 2]\n                          );\n                        case 1:\n                          t.sent(), this.refreshLayout(), (t.label = 2);\n                        case 2:\n                          return n.emit(\"afterlayout\"), [2];\n                      }\n                    });\n                  });\n                }));\n              var d = Promise.resolve();\n              return (\n                u.type\n                  ? (d = d.then(function () {\n                      return e.execLayoutMethod(u, 0);\n                    }))\n                  : u.pipes &&\n                    u.pipes.forEach(function (t, n) {\n                      d = d.then(function () {\n                        return e.execLayoutMethod(t, n);\n                      });\n                    }),\n                d\n                  .then(function () {\n                    u.onAllLayoutEnd && u.onAllLayoutEnd(), t && t();\n                  })\n                  .catch(function (t) {\n                    console.warn(\"graph layout failed,\", t);\n                  }),\n                !1\n              );\n            }),\n            (e.prototype.execLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = t.type;\n                if (\n                  ((t.onLayoutEnd = function () {\n                    o.emit(\"aftersublayout\", { type: a }), r();\n                  }),\n                  \"force\" === a || \"g6force\" === a || \"gForce\" === a)\n                ) {\n                  var s = t.onTick,\n                    c = function () {\n                      s && s(), o.refreshPositions();\n                    };\n                  t.tick = c;\n                } else\n                  \"comboForce\" === t.type &&\n                    (t.comboTrees = o.get(\"comboTrees\"));\n                var u;\n                try {\n                  u = new f.a(t);\n                } catch (t) {\n                  console.warn(\n                    \"The layout method: '\" +\n                      a +\n                      \"' does not exist! Please specify it first.\",\n                  ),\n                    i();\n                }\n                if (u.enableTick) {\n                  var h = t.onTick;\n                  c = function () {\n                    h && h(), o.refreshPositions();\n                  };\n                  u.tick = c;\n                }\n                var l = n.filterLayoutData(n.data, t);\n                !(function (t, e) {\n                  var n;\n                  if (\n                    !(null === (n = null == t ? void 0 : t.nodes) ||\n                    void 0 === n\n                      ? void 0\n                      : n.length)\n                  )\n                    return;\n                  t.nodes.forEach(function (t) {\n                    t.layoutOrder = e;\n                  });\n                })(l, e),\n                  u.init(l),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  u.execute(),\n                  u.isCustomLayout && t.onLayoutEnd && t.onLayoutEnd(),\n                  n.layoutMethods.push(u);\n              });\n            }),\n            (e.prototype.updateLayoutMethod = function (t, e) {\n              var n = this;\n              return new Promise(function (r, i) {\n                var o = n.graph,\n                  a = null == e ? void 0 : e.type;\n                e.onLayoutEnd = function () {\n                  o.emit(\"aftersublayout\", { type: a }), r();\n                };\n                var s = n.filterLayoutData(n.data, e);\n                t.init(s),\n                  t.updateCfg(e),\n                  o.emit(\"beforesublayout\", { type: a }),\n                  t.execute(),\n                  t.isCustomLayout && e.onLayoutEnd && e.onLayoutEnd();\n              });\n            }),\n            (e.prototype.adjustPipesBox = function (t, e) {\n              var n = this;\n              return new Promise(function (r) {\n                var i = t.nodes;\n                (null == i ? void 0 : i.length) || r(),\n                  d.includes(e) ||\n                    (console.warn(\n                      \"The adjust type \" +\n                        e +\n                        \" is not supported yet, please assign it with 'force', 'grid', or 'circular'.\",\n                    ),\n                    r());\n                var o = {\n                    center: n.layoutCfg.center,\n                    nodeSize: function (t) {\n                      return Math.max(t.height, t.width);\n                    },\n                    preventOverlap: !0,\n                    onLayoutEnd: function () {},\n                  },\n                  s = n.getLayoutBBox(i),\n                  c = s.groupNodes,\n                  u = s.layoutNodes,\n                  h = Object(a.clone)(u);\n                (o.onLayoutEnd = function () {\n                  null == u ||\n                    u.forEach(function (t, e) {\n                      var n,\n                        r,\n                        i,\n                        o =\n                          t.x -\n                          (null === (n = h[e]) || void 0 === n ? void 0 : n.x),\n                        a =\n                          t.y -\n                          (null === (r = h[e]) || void 0 === r ? void 0 : r.y);\n                      null === (i = c[e]) ||\n                        void 0 === i ||\n                        i.forEach(function (t) {\n                          (t.x += o), (t.y += a);\n                        });\n                    }),\n                    r();\n                }),\n                  new f.a(o).layout({ nodes: u });\n              });\n            }),\n            (e.prototype.destroy = function () {\n              this.destoryLayoutMethods(),\n                (this.destroyed = !0),\n                this.graph.set(\"layout\", void 0),\n                (this.layoutCfg = void 0),\n                (this.layoutType = void 0),\n                (this.layoutMethods = void 0),\n                (this.graph = null);\n            }),\n            e\n          );\n        })(s.c);\n      var g = n(54),\n        v = function (t, e, n) {\n          return (\n            n[t] &&\n              console.warn(\n                \"The graph with the name \" +\n                  t +\n                  \" exists already, it will be overridden\",\n              ),\n            (n[t] = e(n)),\n            n\n          );\n        },\n        y = (function (t) {\n          function e(e) {\n            var n = t.call(this, e) || this;\n            n.get(\"renderer\").startsWith(\"mini\") && n.set(\"context\", e.context),\n              t.prototype.init.call(n);\n            var r = n.get(\"defaultNode\");\n            return (\n              r || n.set(\"defaultNode\", { type: \"circle\" }),\n              r.type || ((r.type = \"circle\"), n.set(\"defaultNode\", r)),\n              (n.destroyed = !1),\n              n\n            );\n          }\n          return (\n            Object(r.c)(e, t),\n            (e.prototype.init = function () {}),\n            (e.prototype.emitEvent = function (t) {\n              var e = this.get(\"canvas\");\n              (t.type = t.type.toLowerCase()), e.registerEventCallback(t);\n            }),\n            (e.prototype.initLayoutController = function () {\n              var t = new p(this);\n              this.set({ layoutController: t });\n            }),\n            (e.prototype.initEventController = function () {\n              var t = new l(this);\n              if (\n                (this.set({ eventController: t }),\n                !this.get(\"renderer\").startsWith(\"mini\"))\n              ) {\n                var e = this.get(\"canvas\"),\n                  n = e.get(\"el\");\n                \"touchstart touchmove touchend touchcancel\"\n                  .split(\" \")\n                  .forEach(function (t) {\n                    n.addEventListener(t, e.registerEventCallback.bind(e), !1);\n                  });\n              }\n            }),\n            (e.prototype.initCanvas = function () {\n              var t = this.get(\"container\");\n              null !== t &&\n                \"string\" == typeof t &&\n                ((t = document.getElementById(t)), this.set(\"container\", t));\n              var e = this.get(\"renderer\");\n              if (!t && !e.startsWith(\"mini\"))\n                throw new Error(\"invalid container\");\n              var n = this.get(\"width\"),\n                r = this.get(\"height\"),\n                o = {\n                  container: t,\n                  context: this.get(\"context\"),\n                  width: n,\n                  height: r,\n                  renderer: e,\n                  fitView: this.get(\"fitView\"),\n                },\n                a = this.get(\"pixelRatio\");\n              a && (o.pixelRatio = a);\n              var s = new i.Canvas(o);\n              this.set(\"canvas\", s);\n            }),\n            (e.prototype.initPlugins = function () {\n              var t = this;\n              Object(a.each)(t.get(\"plugins\"), function (e) {\n                !e.destroyed && e.initPlugin && e.initPlugin(t);\n              });\n            }),\n            (e.prototype.toDataURL = function (t, e) {\n              var n = this.get(\"canvas\"),\n                r = n.getRenderer(),\n                i = n.get(\"el\");\n              t || (t = \"image/png\");\n              var o = \"\";\n              if (\"svg\" === r) {\n                var a = i.cloneNode(!0),\n                  s = document.implementation.createDocumentType(\n                    \"svg\",\n                    \"-//W3C//DTD SVG 1.1//EN\",\n                    \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                  ),\n                  c = document.implementation.createDocument(\n                    \"http://www.w3.org/2000/svg\",\n                    \"svg\",\n                    s,\n                  );\n                c.replaceChild(a, c.documentElement);\n                var u = new XMLSerializer().serializeToString(c);\n                o = \"data:image/svg+xml;charset=utf8,\" + encodeURIComponent(u);\n              } else {\n                var h = void 0,\n                  l = i.getContext(\"2d\"),\n                  f = this.get(\"width\"),\n                  d = this.get(\"height\"),\n                  p = void 0;\n                if (e) {\n                  var g =\n                    \"undefined\" != typeof window ? window.devicePixelRatio : 1;\n                  (h = l.getImageData(0, 0, f * g, d * g)),\n                    (p = l.globalCompositeOperation),\n                    (l.globalCompositeOperation = \"destination-over\"),\n                    (l.fillStyle = e),\n                    l.fillRect(0, 0, f, d);\n                }\n                (o = i.toDataURL(t)),\n                  e &&\n                    (l.clearRect(0, 0, f, d),\n                    l.putImageData(h, 0, 0),\n                    (l.globalCompositeOperation = p));\n              }\n              return o;\n            }),\n            (e.prototype.toFullDataURL = function (t, e, n) {\n              var r = this.get(\"group\").getCanvasBBox(),\n                s = r.height,\n                c = r.width,\n                u = this.get(\"renderer\"),\n                h = Object(g.a)('<id=\"virtual-image\"></div>'),\n                l = n ? n.backgroundColor : void 0,\n                f = n ? n.padding : void 0;\n              f\n                ? Object(a.isNumber)(f) && (f = [f, f, f, f])\n                : (f = [0, 0, 0, 0]);\n              var d = s + f[0] + f[2],\n                p = c + f[1] + f[3],\n                v = { container: h, height: d, width: p, quickHit: !0 },\n                y = new i.Canvas(v),\n                m = this.get(\"group\").clone(),\n                b = Object(a.clone)(m.getMatrix());\n              b || (b = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n              var x = (r.maxX + r.minX) / 2,\n                S = (r.maxY + r.minY) / 2;\n              o.a.translate(b, b, [-x, -S]),\n                o.a.translate(b, b, [c / 2 + f[3], s / 2 + f[0]]),\n                m.resetMatrix(),\n                m.setMatrix(b),\n                y.add(m);\n              var w = y.get(\"el\"),\n                O = \"\";\n              e || (e = \"image/png\"),\n                setTimeout(function () {\n                  if (\"svg\" === u) {\n                    var n = w.cloneNode(!0),\n                      r = document.implementation.createDocumentType(\n                        \"svg\",\n                        \"-//W3C//DTD SVG 1.1//EN\",\n                        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                      ),\n                      i = document.implementation.createDocument(\n                        \"http://www.w3.org/2000/svg\",\n                        \"svg\",\n                        r,\n                      );\n                    i.replaceChild(n, i.documentElement);\n                    var o = new XMLSerializer().serializeToString(i);\n                    O =\n                      \"data:image/svg+xml;charset=utf8,\" +\n                      encodeURIComponent(o);\n                  } else {\n                    var a = void 0,\n                      s = w.getContext(\"2d\"),\n                      c = void 0;\n                    if (l) {\n                      var h =\n                        \"undefined\" != typeof window\n                          ? window.devicePixelRatio\n                          : 1;\n                      (a = s.getImageData(0, 0, p * h, d * h)),\n                        (c = s.globalCompositeOperation),\n                        (s.globalCompositeOperation = \"destination-over\"),\n                        (s.fillStyle = l),\n                        s.fillRect(0, 0, p, d);\n                    }\n                    (O = w.toDataURL(e)),\n                      l &&\n                        (s.clearRect(0, 0, p, d),\n                        s.putImageData(a, 0, 0),\n                        (s.globalCompositeOperation = c));\n                  }\n                  t && t(O);\n                }, 16);\n            }),\n            (e.prototype.downloadFullImage = function (t, e, n) {\n              var r = this,\n                s = this.get(\"group\").getCanvasBBox(),\n                c = s.height,\n                u = s.width,\n                h = this.get(\"renderer\"),\n                l = Object(g.a)('<id=\"virtual-image\"></div>'),\n                f = n ? n.backgroundColor : void 0,\n                d = n ? n.padding : void 0;\n              d\n                ? Object(a.isNumber)(d) && (d = [d, d, d, d])\n                : (d = [0, 0, 0, 0]);\n              var p = c + d[0] + d[2],\n                v = u + d[1] + d[3],\n                y = { container: l, height: p, width: v },\n                m = new i.Canvas(y),\n                b = this.get(\"group\").clone(),\n                x = Object(a.clone)(b.getMatrix());\n              x || (x = [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n              var S = (s.maxX + s.minX) / 2,\n                w = (s.maxY + s.minY) / 2;\n              o.a.translate(x, x, [-S, -w]),\n                o.a.translate(x, x, [u / 2 + d[3], c / 2 + d[0]]),\n                b.resetMatrix(),\n                b.setMatrix(x),\n                m.add(b);\n              var O = m.get(\"el\");\n              e || (e = \"image/png\"),\n                setTimeout(function () {\n                  var n = \"\";\n                  if (\"svg\" === h) {\n                    var i = O.cloneNode(!0),\n                      o = document.implementation.createDocumentType(\n                        \"svg\",\n                        \"-//W3C//DTD SVG 1.1//EN\",\n                        \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\",\n                      ),\n                      a = document.implementation.createDocument(\n                        \"http://www.w3.org/2000/svg\",\n                        \"svg\",\n                        o,\n                      );\n                    a.replaceChild(i, a.documentElement);\n                    var s = new XMLSerializer().serializeToString(a);\n                    n =\n                      \"data:image/svg+xml;charset=utf8,\" +\n                      encodeURIComponent(s);\n                  } else {\n                    var c = void 0,\n                      u = O.getContext(\"2d\"),\n                      l = void 0;\n                    if (f) {\n                      var d =\n                        \"undefined\" != typeof window\n                          ? window.devicePixelRatio\n                          : 1;\n                      (c = u.getImageData(0, 0, v * d, p * d)),\n                        (l = u.globalCompositeOperation),\n                        (u.globalCompositeOperation = \"destination-over\"),\n                        (u.fillStyle = f),\n                        u.fillRect(0, 0, v, p);\n                    }\n                    (n = O.toDataURL(e)),\n                      f &&\n                        (u.clearRect(0, 0, v, p),\n                        u.putImageData(c, 0, 0),\n                        (u.globalCompositeOperation = l));\n                  }\n                  var g = document.createElement(\"a\"),\n                    y =\n                      (t || \"graph\") +\n                      (\"svg\" === h ? \".svg\" : \".\" + e.split(\"/\")[1]);\n                  r.dataURLToImage(n, h, g, y);\n                  var m = document.createEvent(\"MouseEvents\");\n                  m.initEvent(\"click\", !1, !1), g.dispatchEvent(m);\n                }, 16);\n            }),\n            (e.prototype.downloadImage = function (t, e, n) {\n              var r = this,\n                i = this;\n              i.isAnimating() && i.stopAnimate();\n              var o = i.get(\"canvas\").getRenderer();\n              e || (e = \"image/png\");\n              var a = (t || \"graph\") + (\"svg\" === o ? \".svg\" : e.split(\"/\")[1]),\n                s = document.createElement(\"a\");\n              setTimeout(function () {\n                var t = i.toDataURL(e, n);\n                r.dataURLToImage(t, o, s, a);\n                var c = document.createEvent(\"MouseEvents\");\n                c.initEvent(\"click\", !1, !1), s.dispatchEvent(c);\n              }, 16);\n            }),\n            (e.prototype.dataURLToImage = function (t, e, n, r) {\n              if (\"undefined\" != typeof window)\n                if (window.Blob && window.URL && \"svg\" !== e) {\n                  var i = t.split(\",\"),\n                    o = \"\";\n                  if (i && i.length > 0) {\n                    var a = i[0].match(/:(.*?);/);\n                    a && a.length >= 2 && (o = a[1]);\n                  }\n                  for (\n                    var s = atob(i[1]), c = s.length, u = new Uint8Array(c);\n                    c--;\n\n                  )\n                    u[c] = s.charCodeAt(c);\n                  var h = new Blob([u], { type: o });\n                  window.navigator.msSaveBlob\n                    ? window.navigator.msSaveBlob(h, r)\n                    : n.addEventListener(\"click\", function () {\n                        (n.download = r),\n                          (n.href = window.URL.createObjectURL(h));\n                      });\n                } else\n                  n.addEventListener(\"click\", function () {\n                    (n.download = r), (n.href = t);\n                  });\n            }),\n            (e.prototype.addPlugin = function (t) {\n              t.destroyed || (this.get(\"plugins\").push(t), t.initPlugin(this));\n            }),\n            (e.prototype.removePlugin = function (t) {\n              var e = this.get(\"plugins\"),\n                n = e.indexOf(t);\n              n >= 0 && (t.destroyPlugin(), e.splice(n, 1));\n            }),\n            (e.prototype.isMiniNative = function () {\n              return \"mini-native\" === this.get(\"renderer\");\n            }),\n            (e.prototype.isMini = function () {\n              return this.get(\"renderer\").startsWith(\"mini\");\n            }),\n            (e.prototype.isBrowser = function () {\n              return \"canvas\" === this.get(\"renderer\");\n            }),\n            (e.prototype.setImageWaterMarker = function (t, e, n) {\n              var r = this,\n                i = Object(a.deepMix)({}, c.a.imageWaterMarkerConfig, e),\n                o = i.width,\n                s = i.height,\n                u = i.image,\n                h = u.rotate,\n                l = (u.x, u.y, u.width),\n                f = u.height;\n              if ((this.isMini() && this.isMiniNative(), this.isMiniNative())) {\n                (n.width = o || this.get(\"width\")),\n                  (n.height = s || this.get(\"height\"));\n                var d = n.getContext(\"2d\"),\n                  p = (0, this.get(\"extra\").createImage)();\n                (p.crossOrigin = \"anonymous\"),\n                  (p.src = t),\n                  (p.onload = function () {\n                    if (!r.destroyed) {\n                      var t = l / p.width,\n                        e = f / p.height;\n                      d.rotate((-h * Math.PI) / 180);\n                      var i = d.createPattern(p, \"repeat\");\n                      (d.fillStyle = i),\n                        d.scale(t, e),\n                        d.fillRect(\n                          2 * -r.get(\"width\"),\n                          -r.get(\"height\"),\n                          10 * r.get(\"width\"),\n                          10 * r.get(\"height\"),\n                        ),\n                        r\n                          .get(\"waterGroup\")\n                          .addShape(\"image\", { attrs: { img: n } });\n                    }\n                  });\n              }\n              if (this.isBrowser()) {\n                var g = document.createElement(\"canvas\");\n                (g.width = o || this.get(\"width\")),\n                  (g.height = s || this.get(\"height\"));\n                var v = g.getContext(\"2d\"),\n                  y = new Image();\n                (y.crossOrigin = \"anonymous\"),\n                  (y.src = t),\n                  (y.onload = function () {\n                    if (!r.destroyed) {\n                      var t = l / y.width,\n                        e = f / y.height;\n                      v.rotate((-h * Math.PI) / 180);\n                      var n = v.createPattern(y, \"repeat\");\n                      (v.fillStyle = n),\n                        v.scale(t, e),\n                        v.fillRect(\n                          2 * -r.get(\"width\"),\n                          -r.get(\"height\"),\n                          10 * r.get(\"width\"),\n                          10 * r.get(\"height\"),\n                        );\n                      var i = g.toDataURL();\n                      r.get(\"waterGroup\").addShape(\"image\", {\n                        attrs: { img: i },\n                      });\n                    }\n                  });\n              }\n            }),\n            (e.prototype.setTextWaterMarker = function (t, e) {\n              var n = this.get(\"container\");\n              Object(a.isString)(n) && (n = document.getElementById(n)),\n                n.style.position || (n.style.position = \"relative\");\n              var r = this.get(\"graphWaterMarker\"),\n                o = Object(a.deepMix)({}, c.a.textWaterMarkerConfig, e),\n                s = o.width,\n                u = o.height,\n                h = o.compatible,\n                l = o.text;\n              if (!r) {\n                var f = { container: n, width: s, height: u, capture: !1 },\n                  d = this.get(\"pixelRatio\");\n                d && (f.pixelRatio = d),\n                  (r = new i.Canvas(f)),\n                  this.set(\"graphWaterMarker\", r);\n              }\n              r.get(\"el\").style.display = \"none\";\n              var p = r.get(\"context\"),\n                g = l.rotate,\n                v = l.fill,\n                y = l.fontFamily,\n                m = l.fontSize,\n                b = l.baseline,\n                x = l.x,\n                S = l.y,\n                w = l.lineHeight;\n              p.rotate((-g * Math.PI) / 180),\n                (p.font = m + \"px \" + y),\n                (p.fillStyle = v),\n                (p.textBaseline = b);\n              for (var O = t.length - 1; O >= 0; O--)\n                p.fillText(t[O], x, S + O * w);\n              if ((p.rotate((g * Math.PI) / 180), h))\n                n.style.cssText =\n                  \"background-image: url(\" +\n                  r.get(\"el\").toDataURL(\"image/png\") +\n                  \");background-repeat:repeat;\";\n              else {\n                var M = document.querySelector(\".g6-graph-watermarker\");\n                M ||\n                  ((M = document.createElement(\"div\")).className =\n                    \"g6-graph-watermarker\"),\n                  (M.style.cssText =\n                    \"background-image: url(\" +\n                    r.get(\"el\").toDataURL(\"image/png\") +\n                    \");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:99;\"),\n                  n.appendChild(M);\n              }\n            }),\n            (e.prototype.destroy = function () {\n              var e;\n              Object(a.each)(this.get(\"plugins\"), function (t) {\n                t.destroyPlugin();\n              });\n              var n = this.get(\"tooltips\");\n              if (n)\n                for (var r = 0; r < n.length; r++) {\n                  var i = n[r];\n                  if (i) {\n                    var o = i.parentElement;\n                    o && o.removeChild(i);\n                  }\n                }\n              this.get(\"eventController\").destroy(),\n                null === (e = this.get(\"layoutController\")) ||\n                  void 0 === e ||\n                  e.destroy(),\n                this.get(\"graphWaterMarker\") &&\n                  this.get(\"graphWaterMarker\").destroy(),\n                \"undefined\" != typeof document &&\n                  document.querySelector &&\n                  document.querySelector(\".g6-graph-watermarker\") &&\n                  document.querySelector(\".g6-graph-watermarker\").remove(),\n                t.prototype.destroy.call(this);\n            }),\n            (e.prototype.initGroups = function () {\n              var t = this.get(\"canvas\"),\n                e = t.addGroup({\n                  id: \"root\",\n                  className: c.a.rootContainerClassName,\n                }),\n                n = t.addGroup({\n                  id: \"water\",\n                  className: c.a.waterContainerClassName,\n                });\n              if (this.get(\"groupByTypes\")) {\n                var r = e.addGroup({\n                    id: \"edge\",\n                    className: c.a.edgeContainerClassName,\n                  }),\n                  i = e.addGroup({\n                    id: \"node\",\n                    className: c.a.nodeContainerClassName,\n                  }),\n                  o = e.addGroup({\n                    id: \"combo\",\n                    className: c.a.comboContainerClassName,\n                  });\n                o.toBack(),\n                  this.set({ nodeGroup: i, edgeGroup: r, comboGroup: o });\n              }\n              var a = t.addGroup({\n                  id: \"uiGroup\",\n                  className: c.a.uiContainerClassName,\n                }),\n                s = e.addGroup({\n                  id: \"delegate\",\n                  className: c.a.delegateContainerClassName,\n                });\n              this.set({ delegateGroup: s }),\n                this.set(\"group\", e),\n                this.set(\"uiGroup\", a),\n                this.set(\"waterGroup\", n);\n            }),\n            e\n          );\n        })(s.b);\n      e.a = y;\n    },\n    97: function (t, e, n) {\n      \"use strict\";\n      function r(t) {\n        return (r =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      function i(t) {\n        return (i =\n          \"function\" == typeof Symbol && \"symbol\" == r(Symbol.iterator)\n            ? function (t) {\n                return r(t);\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : r(t);\n              })(t);\n      }\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.clearAnimationFrame = function (t) {\n          return o.clearAnimationFrame\n            ? o.clearAnimationFrame(t)\n            : (\"object\" ===\n                (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n                window.cancelAnimationFrame\n                ? window.cancelAnimationFrame\n                : clearTimeout)(t);\n        }),\n        (e.requestAnimationFrame = function (t) {\n          return o.requestAnimationFrame\n            ? o.requestAnimationFrame(t)\n            : (\"object\" ===\n                (\"undefined\" == typeof window ? \"undefined\" : i(window)) &&\n                window.requestAnimationFrame\n                ? window.requestAnimationFrame\n                : function (t) {\n                    return setTimeout(t, 16);\n                  })(t);\n        }),\n        (e.setExtraFunction = function (t) {\n          void 0 === t && (t = {}), (t = t);\n        });\n      var o = {};\n    },\n    98: function (t, e) {\n      function n(t) {\n        return (n =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              })(t);\n      }\n      var r;\n      r = (function () {\n        return this;\n      })();\n      try {\n        r = r || new Function(\"return this\")();\n      } catch (t) {\n        \"object\" === (\"undefined\" == typeof window ? \"undefined\" : n(window)) &&\n          (r = window);\n      }\n      t.exports = r;\n    },\n    99: function (t, e, n) {\n      \"use strict\";\n      Object.defineProperty(e, \"__esModule\", { value: !0 }),\n        (e.Layouts = e.Layout = void 0);\n      var r = n(62),\n        i = (function () {\n          function t(t) {\n            var e = r.getLayoutByName(t.type);\n            this.layoutInstance = new e(t);\n          }\n          return (\n            (t.prototype.layout = function (t) {\n              return this.layoutInstance.layout(t);\n            }),\n            (t.prototype.updateCfg = function (t) {\n              this.layoutInstance.updateCfg(t);\n            }),\n            (t.prototype.init = function (t) {\n              this.layoutInstance.init(t);\n            }),\n            (t.prototype.execute = function () {\n              this.layoutInstance.execute();\n            }),\n            (t.prototype.getDefaultCfg = function () {\n              return this.layoutInstance.getDefaultCfg();\n            }),\n            (t.prototype.destroy = function () {\n              return this.layoutInstance.destroy();\n            }),\n            t\n          );\n        })();\n      (e.Layout = i),\n        (e.Layouts = new Proxy(\n          {},\n          {\n            get: function (t, e) {\n              return r.getLayoutByName(e);\n            },\n            set: function (t, e, n) {\n              return r.registerLayout(e, n), !0;\n            },\n          },\n        ));\n    },\n  }).default;\n});\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "packages/hammer/CONTRIBUTING.md",
    "content": "# Contributing to Hammer.js\n\nLooking to contribute something to Hammer.js? **Here's how you can help.**\n\n## Reporting issues\n\nWe only accept issues that are bug reports or feature requests. Bugs must be\nisolated and reproducible problems that can be fixed within the Hammer.js.\nPlease read the following guidelines before opening any issue.\n\n1. [**Read the documentation**](https://hammerjs.github.io)\n\n2. **Search for existing issues.** We get a lot of duplicate issues, and you'd\n   help us out a lot by first checking if someone else has reported the same issue.\n   Moreover, the issue may have already been resolved with a fix available. Also\n   take a look if your problem is explained at the Wiki.\n\n3. **Create an isolated and reproducible test case.** Be sure the problem exists\n   in Hammer's code with a reduced test case that should be included in each bug\n   report.\n\n4. **Include a live example.** Make use of jsFiddle or jsBin to share your\n   isolated test cases. Also, a screen capture would work, with tools like LICEcap.\n\n5. **Share as much information as possible.** Include operating system and\n   version, browser and version, version of Hammer.js, customized or vanilla build,\n   etc. where appropriate. Also include steps to reproduce the bug.\n\n## Pull requests\n\n1. Changes must be done in `/src` files, never just the compiled files. Also, don't\n   commit the compiled files.\n\n2. Try not to pollute your pull request with unintended changes. Keep them simple\n   and small\n\n3. Try to share which browsers your code has been tested in before submitting a\n   pull request\n\n4. Write tests for your code, these can be found in `/tests`.\n"
  },
  {
    "path": "packages/hammer/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (C) 2011-2017 by Jorik Tangelder (Eight Media)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "packages/hammer/package.json",
    "content": "{\n  \"name\": \"@antv/f6-hammerjs\",\n  \"title\": \"Hammer.JS for F6\",\n  \"description\": \"A javascript library for multi-touch gestures\",\n  \"version\": \"0.0.2\",\n  \"main\": \"dist/cjs/index.cjs.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"unpkg\": \"dist/umd/index.umd.js\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"touch\",\n    \"gestures\"\n  ],\n  \"author\": {\n    \"name\": \"openwayne\",\n    \"email\": \"openwayne@gmail.com\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/antvis/f6\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/f6/issues\"\n  },\n  \"dependencies\": {\n    \"lodash\": \"^4.17.20\"\n  },\n  \"scripts\": {\n    \"clean\": \"rimraf dist\",\n    \"build\": \"vite build\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"~5.3.1\"\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/hammer.js",
    "content": "import ifUndefined from \"./utils/if-undefined\";\nimport { TOUCH_ACTION_COMPUTE } from \"./touchactionjs/touchaction-Consts\";\nimport { DIRECTION_HORIZONTAL } from \"./inputjs/input-consts\";\nimport RotateRecognizer from \"./recognizers/rotate\";\nimport PinchRecognizer from \"./recognizers/pinch\";\nimport SwipeRecognizer from \"./recognizers/swipe\";\nimport PanRecognizer from \"./recognizers/pan\";\nimport TapRecognizer from \"./recognizers/tap\";\nimport PressRecognizer from \"./recognizers/press\";\nimport Manager from \"./manager\";\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {Object} [options]\n * @constructor\n */\nexport default class Hammer {\n  constructor(options) {\n    options = options || {};\n    options.recognizers = ifUndefined(\n      options.recognizers,\n      Hammer.defaults.preset,\n    );\n    return new Manager(options);\n  }\n}\n\n/**\n * @private\n * default settings\n * @namespace\n */\nHammer.defaults = {\n  /**\n   * @private\n   * set if DOM events are being triggered.\n   * But this is slower and unused by simple implementations, so disabled by default.\n   * @type {Boolean}\n   * @default false\n   */\n  domEvents: false,\n\n  /**\n   * @private\n   * The value for the touchAction property/fallback.\n   * When set to `compute` it will magically set the correct value based on the added recognizers.\n   * @type {String}\n   * @default compute\n   */\n  touchAction: TOUCH_ACTION_COMPUTE,\n\n  /**\n   * @private\n   * @type {Boolean}\n   * @default true\n   */\n  enable: true,\n\n  /**\n   * @private\n   * force an input class\n   * @type {Null|Function}\n   * @default null\n   */\n  inputClass: null,\n\n  /**\n   * @private\n   * Default recognizer setup when calling `Hammer()`\n   * When creating a new Manager these will be skipped.\n   * @type {Array}\n   */\n  preset: [\n    // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n    [RotateRecognizer, { enable: false }],\n    [PinchRecognizer, { enable: false }, [\"rotate\"]],\n    [SwipeRecognizer, { direction: DIRECTION_HORIZONTAL }],\n    [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, [\"swipe\"]],\n    [TapRecognizer],\n    [TapRecognizer, { event: \"doubletap\", taps: 2 }, [\"tap\"]],\n    [PressRecognizer],\n  ],\n};\n"
  },
  {
    "path": "packages/hammer/src/index.js",
    "content": "import Hammer from \"./hammer\";\nimport assign from \"./utils/assign\";\nimport {\n  INPUT_START,\n  INPUT_MOVE,\n  INPUT_END,\n  INPUT_CANCEL,\n} from \"./inputjs/input-consts\";\nimport {\n  STATE_POSSIBLE,\n  STATE_BEGAN,\n  STATE_CHANGED,\n  STATE_ENDED,\n  STATE_RECOGNIZED,\n  STATE_CANCELLED,\n  STATE_FAILED,\n} from \"./recognizerjs/recognizer-consts\";\nimport {\n  DIRECTION_NONE,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n  DIRECTION_HORIZONTAL,\n  DIRECTION_VERTICAL,\n  DIRECTION_ALL,\n} from \"./inputjs/input-consts\";\n\nimport Manager from \"./manager\";\nimport Input from \"./inputjs/input-constructor\";\nimport TouchAction from \"./touchactionjs/touchaction-constructor\";\nimport TouchInput from \"./input/touch\";\nimport PointerEventInput from \"./input/pointerevent\";\n\nimport Recognizer from \"./recognizerjs/recognizer-constructor\";\nimport AttrRecognizer from \"./recognizers/attribute\";\nimport TapRecognizer from \"./recognizers/tap\";\nimport PanRecognizer from \"./recognizers/pan\";\nimport SwipeRecognizer from \"./recognizers/swipe\";\nimport PinchRecognizer from \"./recognizers/pinch\";\nimport RotateRecognizer from \"./recognizers/rotate\";\nimport PressRecognizer from \"./recognizers/press\";\n\nimport addEventListeners from \"./utils/add-event-listeners\";\nimport removeEventListeners from \"./utils/remove-event-listeners\";\nimport each from \"./utils/each\";\nimport merge from \"./utils/merge\";\nimport extend from \"./utils/extend\";\nimport inherit from \"./utils/inherit\";\nimport bindFn from \"./utils/bind-fn\";\nimport toArray from \"./utils/to-array\";\nimport uniqueArray from \"./utils/unique-array\";\nimport splitStr from \"./utils/split-str\";\nimport inArray from \"./utils/in-array\";\nimport boolOrFn from \"./utils/bool-or-fn\";\nimport hasParent from \"./utils/has-parent\";\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\n\nexport {\n  INPUT_START,\n  INPUT_MOVE,\n  INPUT_END,\n  INPUT_CANCEL,\n  STATE_POSSIBLE,\n  STATE_BEGAN,\n  STATE_CHANGED,\n  STATE_ENDED,\n  STATE_RECOGNIZED,\n  STATE_CANCELLED,\n  STATE_FAILED,\n  DIRECTION_NONE,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n  DIRECTION_HORIZONTAL,\n  DIRECTION_VERTICAL,\n  DIRECTION_ALL,\n  Manager,\n  Input,\n  TouchAction,\n  TouchInput,\n  PointerEventInput,\n  Recognizer,\n  AttrRecognizer,\n};\n\nexport default assign(Hammer, {\n  INPUT_START,\n  INPUT_MOVE,\n  INPUT_END,\n  INPUT_CANCEL,\n\n  STATE_POSSIBLE,\n  STATE_BEGAN,\n  STATE_CHANGED,\n  STATE_ENDED,\n  STATE_RECOGNIZED,\n  STATE_CANCELLED,\n  STATE_FAILED,\n\n  DIRECTION_NONE,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n  DIRECTION_HORIZONTAL,\n  DIRECTION_VERTICAL,\n  DIRECTION_ALL,\n\n  Manager,\n  Input,\n  TouchAction,\n\n  TouchInput,\n  PointerEventInput,\n\n  Recognizer,\n  AttrRecognizer,\n  Tap: TapRecognizer,\n  Pan: PanRecognizer,\n  Swipe: SwipeRecognizer,\n  Pinch: PinchRecognizer,\n  Rotate: RotateRecognizer,\n  Press: PressRecognizer,\n\n  on: addEventListeners,\n  off: removeEventListeners,\n  each,\n  merge,\n  extend,\n  assign,\n  inherit,\n  bindFn,\n  toArray,\n  inArray,\n  uniqueArray,\n  splitStr,\n  boolOrFn,\n  hasParent,\n  addEventListeners,\n  removeEventListeners,\n});\n"
  },
  {
    "path": "packages/hammer/src/input/pointerevent.js",
    "content": "import {\n  INPUT_START,\n  INPUT_END,\n  INPUT_CANCEL,\n  INPUT_MOVE,\n  INPUT_TYPE_TOUCH,\n  INPUT_TYPE_MOUSE,\n  INPUT_TYPE_PEN,\n  INPUT_TYPE_KINECT,\n} from \"../inputjs/input-consts\";\nimport Input from \"../inputjs/input-constructor\";\nimport inArray from \"../utils/in-array\";\n\nconst POINTER_INPUT_MAP = {\n  pointerdown: INPUT_START,\n  pointermove: INPUT_MOVE,\n  pointerup: INPUT_END,\n  pointercancel: INPUT_CANCEL,\n  pointerout: INPUT_CANCEL,\n};\n\n// in IE10 the pointer types is defined as an enum\nconst IE10_POINTER_TYPE_ENUM = {\n  2: INPUT_TYPE_TOUCH,\n  3: INPUT_TYPE_PEN,\n  4: INPUT_TYPE_MOUSE,\n  5: INPUT_TYPE_KINECT, // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nlet POINTER_ELEMENT_EVENTS = \"pointerdown\";\nlet POINTER_WINDOW_EVENTS = \"pointermove pointerup pointercancel\";\n\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\nexport default class PointerEventInput extends Input {\n  constructor() {\n    PointerEventInput.prototype.events = `${POINTER_ELEMENT_EVENTS} ${POINTER_WINDOW_EVENTS}`;\n    super(...arguments);\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    this.store = this.manager.session.pointerEvents = [];\n  }\n\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n  handler(ev) {\n    let { store } = this;\n    let removePointer = false;\n\n    let eventTypeNormalized = ev.type.toLowerCase().replace(\"ms\", \"\");\n    let eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n    let pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n    let isTouch = pointerType === INPUT_TYPE_TOUCH;\n\n    // get index of the event in the store\n    let storeIndex = inArray(store, ev.pointerId, \"pointerId\");\n\n    // start and mouse must be down\n    if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n      if (storeIndex < 0) {\n        store.push(ev);\n        storeIndex = store.length - 1;\n      }\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n      removePointer = true;\n    }\n\n    // it not found, so the pointer hasn't been down (so it's probably a hover)\n    if (storeIndex < 0) {\n      return;\n    }\n\n    // update the event in the store\n    store[storeIndex] = ev;\n\n    this.callback(this.manager, eventType, {\n      pointers: store,\n      changedPointers: [ev],\n      pointerType,\n      srcEvent: ev,\n    });\n\n    if (removePointer) {\n      // remove from the store\n      store.splice(storeIndex, 1);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/input/touch.js",
    "content": "import {\n  INPUT_START,\n  INPUT_MOVE,\n  INPUT_END,\n  INPUT_CANCEL,\n  INPUT_TYPE_TOUCH,\n} from \"../inputjs/input-consts\";\nimport Input from \"../inputjs/input-constructor\";\nimport toArray from \"../utils/to-array\";\nimport hasParent from \"../utils/has-parent\";\nimport uniqueArray from \"../utils/unique-array\";\n\nconst TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL,\n};\n\nconst TOUCH_TARGET_EVENTS = \"touchstart touchmove touchend touchcancel\";\n\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nexport default class TouchInput extends Input {\n  constructor() {\n    TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n    TouchInput.prototype.targetIds = {};\n    TouchInput.prototype.events = TOUCH_TARGET_EVENTS;\n    super(...arguments);\n\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n  }\n\n  handler(ev) {\n    let type = TOUCH_INPUT_MAP[ev.type];\n    let touches = getTouches.call(this, ev, type);\n    if (!touches) {\n      return;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev,\n    });\n  }\n}\n\n/**\n * @private\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n  let allTouches = toArray(ev.touches);\n  let { targetIds } = this;\n\n  // when there is only one touch, the process can be simplified\n  if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n    targetIds[allTouches[0].identifier] = true;\n    return [allTouches, allTouches];\n  }\n\n  let i;\n  let targetTouches;\n  let changedTouches = toArray(ev.changedTouches);\n  let changedTargetTouches = [];\n  let { target } = this;\n\n  //// get target touches from touches 小程序下targets是空，不太需要\n  //targetTouches = allTouches.filter((touch) => {\n  //  return hasParent(touch.target, target);\n  //});\n  targetTouches = allTouches;\n\n  // collect touches\n  if (type === INPUT_START) {\n    i = 0;\n    while (i < targetTouches.length) {\n      targetIds[targetTouches[i].identifier] = true;\n      i++;\n    }\n  }\n\n  // filter changed touches to only contain touches that exist in the collected target ids\n  i = 0;\n  while (i < changedTouches.length) {\n    if (targetIds[changedTouches[i].identifier]) {\n      changedTargetTouches.push(changedTouches[i]);\n    }\n\n    // cleanup removed touches\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n      delete targetIds[changedTouches[i].identifier];\n    }\n    i++;\n  }\n\n  if (!changedTargetTouches.length) {\n    return;\n  }\n\n  return [\n    // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n    uniqueArray(targetTouches.concat(changedTargetTouches), \"identifier\", true),\n    changedTargetTouches,\n  ];\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/compute-delta-xy.js",
    "content": "import { INPUT_START, INPUT_END } from \"./input-consts\";\n\nexport default function computeDeltaXY(session, input) {\n  let { center } = input;\n  // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n  // jscs throwing error on defalut destructured values and without defaults tests fail\n  let offset = session.offsetDelta || {};\n  let prevDelta = session.prevDelta || {};\n  let prevInput = session.prevInput || {};\n\n  if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n    prevDelta = session.prevDelta = {\n      x: prevInput.deltaX || 0,\n      y: prevInput.deltaY || 0,\n    };\n\n    offset = session.offsetDelta = {\n      x: center.x,\n      y: center.y,\n    };\n  }\n\n  input.deltaX = prevDelta.x + (center.x - offset.x);\n  input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/compute-input-data.js",
    "content": "import { now } from \"../utils/utils-consts\";\nimport { abs } from \"../utils/utils-consts\";\nimport hasParent from \"../utils/has-parent\";\nimport simpleCloneInputData from \"./simple-clone-input-data\";\nimport getCenter from \"./get-center\";\nimport getDistance from \"./get-distance\";\nimport getAngle from \"./get-angle\";\nimport getDirection from \"./get-direction\";\nimport computeDeltaXY from \"./compute-delta-xy\";\nimport getVelocity from \"./get-velocity\";\nimport getScale from \"./get-scale\";\nimport getRotation from \"./get-rotation\";\nimport computeIntervalInputData from \"./compute-interval-input-data\";\n\n/**\n * @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nexport default function computeInputData(manager, input) {\n  let { session } = manager;\n  let { pointers } = input;\n  let { length: pointersLength } = pointers;\n\n  // store the first input to calculate the distance and direction\n  if (!session.firstInput) {\n    session.firstInput = simpleCloneInputData(input);\n  }\n\n  // to compute scale and rotation we need to store the multiple touches\n  if (pointersLength > 1 && !session.firstMultiple) {\n    session.firstMultiple = simpleCloneInputData(input);\n  } else if (pointersLength === 1) {\n    session.firstMultiple = false;\n  }\n\n  let { firstInput, firstMultiple } = session;\n  let offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n  let center = (input.center = getCenter(pointers));\n  input.timeStamp = now();\n  input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n  input.angle = getAngle(offsetCenter, center);\n  input.distance = getDistance(offsetCenter, center);\n\n  computeDeltaXY(session, input);\n  input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n  let overallVelocity = getVelocity(\n    input.deltaTime,\n    input.deltaX,\n    input.deltaY,\n  );\n  input.overallVelocityX = overallVelocity.x;\n  input.overallVelocityY = overallVelocity.y;\n  input.overallVelocity =\n    abs(overallVelocity.x) > abs(overallVelocity.y)\n      ? overallVelocity.x\n      : overallVelocity.y;\n\n  input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n  input.rotation = firstMultiple\n    ? getRotation(firstMultiple.pointers, pointers)\n    : 0;\n\n  input.maxPointers = !session.prevInput\n    ? input.pointers.length\n    : input.pointers.length > session.prevInput.maxPointers\n    ? input.pointers.length\n    : session.prevInput.maxPointers;\n\n  computeIntervalInputData(session, input);\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/compute-interval-input-data.js",
    "content": "import { INPUT_CANCEL, COMPUTE_INTERVAL } from \"./input-consts\";\nimport { abs } from \"../utils/utils-consts\";\nimport getVelocity from \"./get-velocity\";\nimport getDirection from \"./get-direction\";\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nexport default function computeIntervalInputData(session, input) {\n  let last = session.lastInterval || input;\n  let deltaTime = input.timeStamp - last.timeStamp;\n  let velocity;\n  let velocityX;\n  let velocityY;\n  let direction;\n\n  if (\n    input.eventType !== INPUT_CANCEL &&\n    (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)\n  ) {\n    let deltaX = input.deltaX - last.deltaX;\n    let deltaY = input.deltaY - last.deltaY;\n\n    let v = getVelocity(deltaTime, deltaX, deltaY);\n    velocityX = v.x;\n    velocityY = v.y;\n    velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n    direction = getDirection(deltaX, deltaY);\n\n    session.lastInterval = input;\n  } else {\n    // use latest velocity info if it doesn't overtake a minimum period\n    velocity = last.velocity;\n    velocityX = last.velocityX;\n    velocityY = last.velocityY;\n    direction = last.direction;\n  }\n\n  input.velocity = velocity;\n  input.velocityX = velocityX;\n  input.velocityY = velocityY;\n  input.direction = direction;\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/create-input-instance.js",
    "content": "import inputHandler from \"./input-handler\";\nimport TouchInput from \"../input/touch\";\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nexport default function createInputInstance(manager) {\n  let Type = TouchInput;\n  if (manager.options.inputClass) {\n    Type = inputClass;\n  }\n  return new Type(manager, inputHandler);\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-angle.js",
    "content": "import { PROPS_XY } from \"./input-consts\";\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nexport default function getAngle(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n  let x = p2[props[0]] - p1[props[0]];\n  let y = p2[props[1]] - p1[props[1]];\n  return (Math.atan2(y, x) * 180) / Math.PI;\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-center.js",
    "content": "import { round } from \"../utils/utils-consts\";\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nexport default function getCenter(pointers) {\n  let pointersLength = pointers.length;\n\n  // no need to loop when only one touch\n  if (pointersLength === 1) {\n    return {\n      x: round(pointers[0].clientX),\n      y: round(pointers[0].clientY),\n    };\n  }\n\n  let x = 0;\n  let y = 0;\n  let i = 0;\n  while (i < pointersLength) {\n    x += pointers[i].clientX;\n    y += pointers[i].clientY;\n    i++;\n  }\n\n  return {\n    x: round(x / pointersLength),\n    y: round(y / pointersLength),\n  };\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-direction.js",
    "content": "import { abs } from \"../utils/utils-consts\";\nimport {\n  DIRECTION_NONE,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n} from \"./input-consts\";\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nexport default function getDirection(x, y) {\n  if (x === y) {\n    return DIRECTION_NONE;\n  }\n\n  if (abs(x) >= abs(y)) {\n    return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n  }\n  return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-distance.js",
    "content": "import { PROPS_XY } from \"./input-consts\";\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nexport default function getDistance(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n  let x = p2[props[0]] - p1[props[0]];\n  let y = p2[props[1]] - p1[props[1]];\n\n  return Math.sqrt(x * x + y * y);\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-rotation.js",
    "content": "import getAngle from \"./get-angle\";\nimport { PROPS_CLIENT_XY } from \"./input-consts\";\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nexport default function getRotation(start, end) {\n  return (\n    getAngle(end[1], end[0], PROPS_CLIENT_XY) +\n    getAngle(start[1], start[0], PROPS_CLIENT_XY)\n  );\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-scale.js",
    "content": "import { PROPS_CLIENT_XY } from \"./input-consts\";\nimport getDistance from \"./get-distance\";\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nexport default function getScale(start, end) {\n  return (\n    getDistance(end[0], end[1], PROPS_CLIENT_XY) /\n    getDistance(start[0], start[1], PROPS_CLIENT_XY)\n  );\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/get-velocity.js",
    "content": "/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nexport default function getVelocity(deltaTime, x, y) {\n  return {\n    x: x / deltaTime || 0,\n    y: y / deltaTime || 0,\n  };\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/input-constructor.js",
    "content": "import boolOrFn from \"../utils/bool-or-fn\";\nimport { addManagerListeners } from \"../utils/add-event-listeners\";\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nexport default class Input {\n  constructor(manager, callback) {\n    let self = this;\n    this.manager = manager;\n    this.callback = callback;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.eventHandler = function (ev) {\n      if (boolOrFn(manager.options.enable, [manager])) {\n        self.handler(ev);\n      }\n    };\n\n    this.init();\n  }\n  /**\n   * @private\n   * should handle the inputEvent data and trigger the callback\n   * @virtual\n   */\n  handler() {}\n\n  /**\n   * @private\n   */\n  init() {\n    addManagerListeners(this.manager, this.events || \"\", this.eventHandler);\n  }\n\n  /**\n   * @private\n   */\n  destroy() {\n    removeManagerListeners(this.manager, this.events || \"\", this.eventHandler);\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/input-consts.js",
    "content": "const INPUT_TYPE_TOUCH = \"touch\";\nconst INPUT_TYPE_PEN = \"pen\";\nconst INPUT_TYPE_MOUSE = \"mouse\";\nconst INPUT_TYPE_KINECT = \"kinect\";\n\nconst COMPUTE_INTERVAL = 25;\n\nconst INPUT_START = 1;\nconst INPUT_MOVE = 2;\nconst INPUT_END = 4;\nconst INPUT_CANCEL = 8;\n\nconst DIRECTION_NONE = 1;\nconst DIRECTION_LEFT = 2;\nconst DIRECTION_RIGHT = 4;\nconst DIRECTION_UP = 8;\nconst DIRECTION_DOWN = 16;\n\nconst DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nconst DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nconst DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nconst PROPS_XY = [\"x\", \"y\"];\nconst PROPS_CLIENT_XY = [\"clientX\", \"clientY\"];\n\nexport {\n  INPUT_TYPE_KINECT,\n  INPUT_TYPE_MOUSE,\n  INPUT_TYPE_PEN,\n  INPUT_TYPE_TOUCH,\n  COMPUTE_INTERVAL,\n  INPUT_START,\n  INPUT_MOVE,\n  INPUT_END,\n  INPUT_CANCEL,\n  DIRECTION_NONE,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n  DIRECTION_HORIZONTAL,\n  DIRECTION_VERTICAL,\n  DIRECTION_ALL,\n  PROPS_XY,\n  PROPS_CLIENT_XY,\n};\n"
  },
  {
    "path": "packages/hammer/src/inputjs/input-handler.js",
    "content": "import { INPUT_START, INPUT_END, INPUT_CANCEL } from \"./input-consts\";\nimport computeInputData from \"./compute-input-data\";\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nexport default function inputHandler(manager, eventType, input) {\n  let pointersLen = input.pointers.length;\n  let changedPointersLen = input.changedPointers.length;\n  let isFirst =\n    eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n  let isFinal =\n    eventType & (INPUT_END | INPUT_CANCEL) &&\n    pointersLen - changedPointersLen === 0;\n\n  input.isFirst = !!isFirst;\n  input.isFinal = !!isFinal;\n\n  if (isFirst) {\n    manager.session = {};\n  }\n\n  // source event is the normalized value of the domEvents\n  // like 'touchstart, mouseup, pointerdown'\n  input.eventType = eventType;\n\n  // compute scale, rotation etc\n  computeInputData(manager, input);\n\n  // emit secret event\n  manager.emit(\"hammer.input\", input);\n\n  manager.recognize(input);\n  manager.session.prevInput = input;\n}\n"
  },
  {
    "path": "packages/hammer/src/inputjs/simple-clone-input-data.js",
    "content": "import { now, round } from \"../utils/utils-consts\";\nimport getCenter from \"./get-center\";\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nexport default function simpleCloneInputData(input) {\n  // make a simple copy of the pointers because we will get a reference if we don't\n  // we only need clientXY for the calculations\n  let pointers = [];\n  let i = 0;\n  while (i < input.pointers.length) {\n    pointers[i] = {\n      clientX: round(input.pointers[i].clientX),\n      clientY: round(input.pointers[i].clientY),\n    };\n    i++;\n  }\n\n  return {\n    timeStamp: now(),\n    pointers,\n    center: getCenter(pointers),\n    deltaX: input.deltaX,\n    deltaY: input.deltaY,\n  };\n}\n"
  },
  {
    "path": "packages/hammer/src/manager.js",
    "content": "import assign from \"./utils/assign\";\nimport Hammer from \"./hammer\";\nimport TouchAction from \"./touchactionjs/touchaction-constructor\";\nimport createInputInstance from \"./inputjs/create-input-instance\";\nimport each from \"./utils/each\";\nimport inArray from \"./utils/in-array\";\nimport invokeArrayArg from \"./utils/invoke-array-arg\";\nimport splitStr from \"./utils/split-str\";\nimport Recognizer from \"./recognizerjs/recognizer-constructor\";\nimport {\n  STATE_BEGAN,\n  STATE_ENDED,\n  STATE_CHANGED,\n  STATE_RECOGNIZED,\n} from \"./recognizerjs/recognizer-consts\";\n\nconst STOP = 1;\nconst FORCED_STOP = 2;\n\n/**\n * @private\n * Manager\n * @param {Object} [options]\n * @constructor\n */\nexport default class Manager {\n  constructor(options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.handlers = {};\n    this.filters = [];\n    this.session = {};\n    this.recognizers = [];\n\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    each(\n      this.options.recognizers,\n      (item) => {\n        let recognizer = this.add(new item[0](item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n      },\n      this,\n    );\n  }\n\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @returns {Manager}\n   */\n  set(options) {\n    assign(this.options, options);\n\n    // Options that need a little more setup\n    if (options.touchAction) {\n      this.touchAction.update();\n    }\n\n    return this;\n  }\n\n  /**\n   * @private\n   * stop recognizing for this session.\n   * This session will be discarded, when a new [input]start event is fired.\n   * When forced, the recognizer cycle is stopped immediately.\n   * @param {Boolean} [force]\n   */\n  stop(force) {\n    this.session.stopped = force ? FORCED_STOP : STOP;\n  }\n\n  /**\n   * @private\n   * add event filters\n   */\n  addFilter(filter) {\n    if (typeof filter !== \"function\") {\n      throw new Error(\"filter must be a function\");\n    }\n    this.filters.push(filter);\n  }\n\n  /**\n   * @private\n   * run the recognizers!\n   * called by the inputHandler function on every movement of the pointers (touches)\n   * it walks through all the recognizers and tries to detect the gesture that is being made\n   * @param {Object} inputData\n   */\n  recognize(inputData) {\n    let { session } = this;\n    if (session.stopped) {\n      return;\n    }\n\n    // run the touch-action polyfill\n    this.touchAction.preventDefaults(inputData);\n\n    let recognizer;\n    let { recognizers } = this;\n\n    // this holds the recognizer that is being recognized.\n    // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n    // if no recognizer is detecting a thing, it is set to `null`\n    let { curRecognizer } = session;\n\n    // reset when the last recognizer is recognized\n    // or when we're in a new session\n    if (\n      !curRecognizer ||\n      (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)\n    ) {\n      curRecognizer = session.curRecognizer = null;\n    }\n\n    let i = 0;\n    while (i < recognizers.length) {\n      recognizer = recognizers[i];\n\n      // find out if we are allowed try to recognize the input for this one.\n      // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n      // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n      //      that is being recognized.\n      // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n      //      this can be setup with the `recognizeWith()` method on the recognizer.\n      if (\n        session.stopped !== FORCED_STOP && // 1\n        (!curRecognizer ||\n          recognizer === curRecognizer || // 2\n          recognizer.canRecognizeWith(curRecognizer))\n      ) {\n        // 3\n        recognizer.recognize(inputData);\n      } else {\n        recognizer.reset();\n      }\n\n      // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n      // current active recognizer. but only if we don't already have an active recognizer\n      if (\n        !curRecognizer &&\n        recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)\n      ) {\n        curRecognizer = session.curRecognizer = recognizer;\n      }\n      i++;\n    }\n  }\n\n  /**\n   * @private\n   * get a recognizer by its event name.\n   * @param {Recognizer|String} recognizer\n   * @returns {Recognizer|Null}\n   */\n  get(recognizer) {\n    if (recognizer instanceof Recognizer) {\n      return recognizer;\n    }\n\n    let { recognizers } = this;\n    for (let i = 0; i < recognizers.length; i++) {\n      if (recognizers[i].options.event === recognizer) {\n        return recognizers[i];\n      }\n    }\n    return null;\n  }\n\n  /**\n   * @private add a recognizer to the manager\n   * existing recognizers with the same event name will be removed\n   * @param {Recognizer} recognizer\n   * @returns {Recognizer|Manager}\n   */\n  add(recognizer) {\n    if (invokeArrayArg(recognizer, \"add\", this)) {\n      return this;\n    }\n\n    // remove existing\n    let existing = this.get(recognizer.options.event);\n    if (existing) {\n      this.remove(existing);\n    }\n\n    this.recognizers.push(recognizer);\n    recognizer.manager = this;\n\n    this.touchAction.update();\n    return recognizer;\n  }\n\n  /**\n   * @private\n   * remove a recognizer by name or instance\n   * @param {Recognizer|String} recognizer\n   * @returns {Manager}\n   */\n  remove(recognizer) {\n    if (invokeArrayArg(recognizer, \"remove\", this)) {\n      return this;\n    }\n\n    recognizer = this.get(recognizer);\n\n    // let's make sure this recognizer exists\n    if (recognizer) {\n      let { recognizers } = this;\n      let index = inArray(recognizers, recognizer);\n\n      if (index !== -1) {\n        recognizers.splice(index, 1);\n        this.touchAction.update();\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @private\n   * bind event\n   * @param {String} events\n   * @param {Function} handler\n   * @returns {EventEmitter} this\n   */\n  on(events, handler) {\n    if (events === undefined) {\n      return;\n    }\n    if (handler === undefined) {\n      return;\n    }\n\n    let { handlers } = this;\n    each(splitStr(events), (event) => {\n      handlers[event] = handlers[event] || [];\n      handlers[event].push(handler);\n    });\n    return this;\n  }\n\n  /**\n   * @private unbind event, leave emit blank to remove all handlers\n   * @param {String} events\n   * @param {Function} [handler]\n   * @returns {EventEmitter} this\n   */\n  off(events, handler) {\n    if (events === undefined) {\n      return;\n    }\n\n    let { handlers } = this;\n    each(splitStr(events), (event) => {\n      if (!handler) {\n        delete handlers[event];\n      } else {\n        handlers[event] &&\n          handlers[event].splice(inArray(handlers[event], handler), 1);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * @private emit event to the listeners\n   * @param {String} event\n   * @param {Object} data\n   */\n  emit(event, data) {\n    // no handlers, so skip it all\n    let handlers = this.handlers[event] && this.handlers[event].slice();\n    const { filters } = this;\n    if (!handlers || !handlers.length) {\n      return;\n    }\n\n    //let i = 0;\n    //let newData = Object.assign(data);\n    //data.type = event;\n    //data.preventDefault = function() {\n    //  data.srcEvent.preventDefault();\n    //};\n\n    //while (i < filters.length) {\n    //  newData = filters[i](newData);\n    //  i++;\n    //}\n    //\n    if (!event.startsWith(\"origin_input\")) {\n      data.type = event;\n      data.preventDefault = function () {\n        data.srcEvent.preventDefault && data.srcEvent.preventDefault();\n      };\n    }\n\n    let i = 0;\n    while (i < handlers.length) {\n      handlers[i](data);\n      i++;\n    }\n  }\n\n  /**\n   * @private\n   * destroy the manager and unbinds all events\n   * it doesn't unbind dom events, that is the user own responsibility\n   */\n  destroy() {\n    this.handlers = {};\n    this.filters = [];\n    this.session = {};\n    this.input.destroy();\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/recognizerjs/direction-str.js",
    "content": "import {\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n} from \"../inputjs/input-consts\";\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\nexport default function directionStr(direction) {\n  if (direction === DIRECTION_DOWN) {\n    return \"down\";\n  } else if (direction === DIRECTION_UP) {\n    return \"up\";\n  } else if (direction === DIRECTION_LEFT) {\n    return \"left\";\n  } else if (direction === DIRECTION_RIGHT) {\n    return \"right\";\n  }\n  return \"\";\n}\n"
  },
  {
    "path": "packages/hammer/src/recognizerjs/get-recognizer-by-name-if-manager.js",
    "content": "/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nexport default function getRecognizerByNameIfManager(\n  otherRecognizer,\n  recognizer,\n) {\n  let { manager } = recognizer;\n  if (manager) {\n    return manager.get(otherRecognizer);\n  }\n  return otherRecognizer;\n}\n"
  },
  {
    "path": "packages/hammer/src/recognizerjs/recognizer-constructor.js",
    "content": "import {\n  STATE_POSSIBLE,\n  STATE_ENDED,\n  STATE_FAILED,\n  STATE_RECOGNIZED,\n  STATE_CANCELLED,\n  STATE_BEGAN,\n  STATE_CHANGED,\n} from \"./recognizer-consts\";\nimport assign from \"../utils/assign\";\nimport uniqueId from \"../utils/unique-id\";\nimport ifUndefined from \"../utils/if-undefined\";\nimport invokeArrayArg from \"../utils/invoke-array-arg\";\nimport inArray from \"../utils/in-array\";\nimport boolOrFn from \"../utils/bool-or-fn\";\nimport getRecognizerByNameIfManager from \"./get-recognizer-by-name-if-manager\";\nimport stateStr from \"./state-str\";\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nexport default class Recognizer {\n  constructor(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n    this.simultaneous = {};\n    this.requireFail = [];\n  }\n\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @return {Recognizer}\n   */\n  set(options) {\n    assign(this.options, options);\n\n    // also update the touchAction, in case something changed about the directions/enabled state\n    this.manager && this.manager.touchAction.update();\n    return this;\n  }\n\n  /**\n   * @private\n   * recognize simultaneous with an other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n  recognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, \"recognizeWith\", this)) {\n      return this;\n    }\n\n    let { simultaneous } = this;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    if (!simultaneous[otherRecognizer.id]) {\n      simultaneous[otherRecognizer.id] = otherRecognizer;\n      otherRecognizer.recognizeWith(this);\n    }\n    return this;\n  }\n\n  /**\n   * @private\n   * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n  dropRecognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, \"dropRecognizeWith\", this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    delete this.simultaneous[otherRecognizer.id];\n    return this;\n  }\n\n  /**\n   * @private\n   * recognizer can only run when an other is failing\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n  requireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, \"requireFailure\", this)) {\n      return this;\n    }\n\n    let { requireFail } = this;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    if (inArray(requireFail, otherRecognizer) === -1) {\n      requireFail.push(otherRecognizer);\n      otherRecognizer.requireFailure(this);\n    }\n    return this;\n  }\n\n  /**\n   * @private\n   * drop the requireFailure link. it does not remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n  dropRequireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, \"dropRequireFailure\", this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    let index = inArray(this.requireFail, otherRecognizer);\n    if (index > -1) {\n      this.requireFail.splice(index, 1);\n    }\n    return this;\n  }\n\n  /**\n   * @private\n   * has require failures boolean\n   * @returns {boolean}\n   */\n  hasRequireFailures() {\n    return this.requireFail.length > 0;\n  }\n\n  /**\n   * @private\n   * if the recognizer can recognize simultaneous with an other recognizer\n   * @param {Recognizer} otherRecognizer\n   * @returns {Boolean}\n   */\n  canRecognizeWith(otherRecognizer) {\n    return !!this.simultaneous[otherRecognizer.id];\n  }\n\n  /**\n   * @private\n   * You should use `tryEmit` instead of `emit` directly to check\n   * that all the needed recognizers has failed before emitting.\n   * @param {Object} input\n   */\n  emit(input) {\n    let self = this;\n    let { state } = this;\n\n    function emit(event) {\n      self.manager.emit(event, input);\n    }\n\n    // 'panstart' and 'panmove'\n    if (state < STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n\n    emit(self.options.event); // simple 'eventName' events\n\n    if (input.additionalEvent) {\n      // additional event(panleft, panright, pinchin, pinchout...)\n      emit(input.additionalEvent);\n    }\n\n    // panend and pancancel\n    if (state >= STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n  }\n\n  /**\n   * @private\n   * Check that all the require failure recognizers has failed,\n   * if true, it emits a gesture event,\n   * otherwise, setup the state to FAILED.\n   * @param {Object} input\n   */\n  tryEmit(input) {\n    if (this.canEmit()) {\n      return this.emit(input);\n    }\n    // it's failing anyway\n    this.state = STATE_FAILED;\n  }\n\n  /**\n   * @private\n   * can we emit?\n   * @returns {boolean}\n   */\n  canEmit() {\n    let i = 0;\n    while (i < this.requireFail.length) {\n      if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n        return false;\n      }\n      i++;\n    }\n    return true;\n  }\n\n  /**\n   * @private\n   * update the recognizer\n   * @param {Object} inputData\n   */\n  recognize(inputData) {\n    // make a new copy of the inputData\n    // so we can change the inputData without messing up the other recognizers\n    let inputDataClone = assign({}, inputData);\n\n    // is is enabled and allow recognizing?\n    if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n      this.reset();\n      this.state = STATE_FAILED;\n      return;\n    }\n\n    // reset when we've reached the end\n    if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n      this.state = STATE_POSSIBLE;\n    }\n\n    this.state = this.process(inputDataClone);\n\n    // the recognizer has recognized a gesture\n    // so trigger an event\n    if (\n      this.state &\n      (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)\n    ) {\n      this.tryEmit(inputDataClone);\n    }\n  }\n\n  /**\n   * @private\n   * return the state of the recognizer\n   * the actual recognizing happens in this method\n   * @virtual\n   * @param {Object} inputData\n   * @returns {constant} STATE\n   */\n\n  /* jshint ignore:start */\n  process(inputData) {}\n  /* jshint ignore:end */\n\n  /**\n   * @private\n   * return the preferred touch-action\n   * @virtual\n   * @returns {Array}\n   */\n  getTouchAction() {}\n\n  /**\n   * @private\n   * called when the gesture isn't allowed to recognize\n   * like when another is being recognized or it is disabled\n   * @virtual\n   */\n  reset() {}\n}\n\nRecognizer.prototype.defaults = {};\n"
  },
  {
    "path": "packages/hammer/src/recognizerjs/recognizer-consts.js",
    "content": "const STATE_POSSIBLE = 1;\nconst STATE_BEGAN = 2;\nconst STATE_CHANGED = 4;\nconst STATE_ENDED = 8;\nconst STATE_RECOGNIZED = STATE_ENDED;\nconst STATE_CANCELLED = 16;\nconst STATE_FAILED = 32;\n\nexport {\n  STATE_POSSIBLE,\n  STATE_BEGAN,\n  STATE_CHANGED,\n  STATE_ENDED,\n  STATE_RECOGNIZED,\n  STATE_CANCELLED,\n  STATE_FAILED,\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizerjs/state-str.js",
    "content": "import {\n  STATE_CANCELLED,\n  STATE_ENDED,\n  STATE_CHANGED,\n  STATE_BEGAN,\n} from \"./recognizer-consts\";\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\nexport default function stateStr(state) {\n  if (state & STATE_CANCELLED) {\n    return \"cancel\";\n  } else if (state & STATE_ENDED) {\n    return \"end\";\n  } else if (state & STATE_CHANGED) {\n    return \"move\";\n  } else if (state & STATE_BEGAN) {\n    return \"start\";\n  }\n  return \"\";\n}\n"
  },
  {
    "path": "packages/hammer/src/recognizers/attribute.js",
    "content": "import Recognizer from \"../recognizerjs/recognizer-constructor\";\nimport {\n  STATE_BEGAN,\n  STATE_CHANGED,\n  STATE_CANCELLED,\n  STATE_ENDED,\n  STATE_FAILED,\n} from \"../recognizerjs/recognizer-consts\";\nimport { INPUT_CANCEL, INPUT_END } from \"../inputjs/input-consts\";\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nexport default class AttrRecognizer extends Recognizer {\n  constructor() {\n    super(...arguments);\n  }\n\n  /**\n   * @private\n   * Used to check if it the recognizer receives valid input, like input.distance > 10.\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {Boolean} recognized\n   */\n  attrTest(input) {\n    let optionPointers = this.options.pointers;\n    return optionPointers === 0 || input.pointers.length === optionPointers;\n  }\n\n  /**\n   * @private\n   * Process the input and return the state for the recognizer\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {*} State\n   */\n  process(input) {\n    let { state } = this;\n    let { eventType } = input;\n\n    let isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n    let isValid = this.attrTest(input);\n\n    // on cancel input and we've recognized before, return STATE_CANCELLED\n    if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n      return state | STATE_CANCELLED;\n    } else if (isRecognized || isValid) {\n      if (eventType & INPUT_END) {\n        return state | STATE_ENDED;\n      } else if (!(state & STATE_BEGAN)) {\n        return STATE_BEGAN;\n      }\n      return state | STATE_CHANGED;\n    }\n    return STATE_FAILED;\n  }\n}\n\nAttrRecognizer.prototype.defaults = {\n  /**\n   * @private\n   * @type {Number}\n   * @default 1\n   */\n  pointers: 1,\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizers/pan.js",
    "content": "import AttrRecognizer from \"./attribute\";\nimport {\n  DIRECTION_ALL,\n  DIRECTION_HORIZONTAL,\n  DIRECTION_VERTICAL,\n  DIRECTION_NONE,\n  DIRECTION_UP,\n  DIRECTION_DOWN,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n} from \"../inputjs/input-consts\";\nimport { STATE_BEGAN } from \"../recognizerjs/recognizer-consts\";\nimport {\n  TOUCH_ACTION_PAN_X,\n  TOUCH_ACTION_PAN_Y,\n} from \"../touchactionjs/touchaction-Consts\";\nimport directionStr from \"../recognizerjs/direction-str\";\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nexport default class PanRecognizer extends AttrRecognizer {\n  constructor() {\n    super(...arguments);\n    this.pX = null;\n    this.pY = null;\n  }\n\n  getTouchAction() {\n    let {\n      options: { direction },\n    } = this;\n    let actions = [];\n    if (direction & DIRECTION_HORIZONTAL) {\n      actions.push(TOUCH_ACTION_PAN_Y);\n    }\n    if (direction & DIRECTION_VERTICAL) {\n      actions.push(TOUCH_ACTION_PAN_X);\n    }\n    return actions;\n  }\n\n  directionTest(input) {\n    let { options } = this;\n    let hasMoved = true;\n    let { distance } = input;\n    let { direction } = input;\n    let x = input.deltaX;\n    let y = input.deltaY;\n\n    // lock to axis?\n    if (!(direction & options.direction)) {\n      if (options.direction & DIRECTION_HORIZONTAL) {\n        direction =\n          x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        hasMoved = x !== this.pX;\n        distance = Math.abs(input.deltaX);\n      } else {\n        direction =\n          y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n        hasMoved = y !== this.pY;\n        distance = Math.abs(input.deltaY);\n      }\n    }\n    input.direction = direction;\n    return (\n      hasMoved && distance > options.threshold && direction & options.direction\n    );\n  }\n\n  attrTest(input) {\n    return (\n      AttrRecognizer.prototype.attrTest.call(this, input) && // replace with a super call\n      (this.state & STATE_BEGAN ||\n        (!(this.state & STATE_BEGAN) && this.directionTest(input)))\n    );\n  }\n\n  emit(input) {\n    this.pX = input.deltaX;\n    this.pY = input.deltaY;\n\n    let direction = directionStr(input.direction);\n\n    if (direction) {\n      input.additionalEvent = this.options.event + direction;\n    }\n    super.emit(input);\n  }\n}\n\nPanRecognizer.prototype.defaults = {\n  event: \"pan\",\n  threshold: 10,\n  pointers: 1,\n  direction: DIRECTION_ALL,\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizers/pinch.js",
    "content": "import AttrRecognizer from \"./attribute\";\nimport { TOUCH_ACTION_NONE } from \"../touchactionjs/touchaction-Consts\";\nimport { STATE_BEGAN } from \"../recognizerjs/recognizer-consts\";\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nexport default class PinchRecognizer extends AttrRecognizer {\n  constructor() {\n    super(...arguments);\n  }\n\n  getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  }\n\n  attrTest(input) {\n    return (\n      super.attrTest(input) &&\n      (Math.abs(input.scale - 1) > this.options.threshold ||\n        this.state & STATE_BEGAN)\n    );\n  }\n\n  emit(input) {\n    if (input.scale !== 1) {\n      let inOut = input.scale < 1 ? \"in\" : \"out\";\n      input.additionalEvent = this.options.event + inOut;\n    }\n    super.emit(input);\n  }\n}\n\nPinchRecognizer.prototype.defaults = {\n  event: \"pinch\",\n  threshold: 0,\n  pointers: 2,\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizers/press.js",
    "content": "import Recognizer from \"../recognizerjs/recognizer-constructor\";\nimport {\n  STATE_RECOGNIZED,\n  STATE_FAILED,\n} from \"../recognizerjs/recognizer-consts\";\nimport { now } from \"../utils/utils-consts\";\nimport setTimeoutContext from \"../utils/set-timeout-context\";\nimport { TOUCH_ACTION_AUTO } from \"../touchactionjs/touchaction-Consts\";\nimport { INPUT_START, INPUT_END, INPUT_CANCEL } from \"../inputjs/input-consts\";\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nexport default class PressRecognizer extends Recognizer {\n  constructor() {\n    super(...arguments);\n    this._timer = null;\n    this._input = null;\n  }\n\n  getTouchAction() {\n    return [TOUCH_ACTION_AUTO];\n  }\n\n  process(input) {\n    let { options } = this;\n    let validPointers = input.pointers.length === options.pointers;\n    let validMovement = input.distance < options.threshold;\n    let validTime = input.deltaTime > options.time;\n\n    this._input = input;\n\n    // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n    if (\n      !validMovement ||\n      !validPointers ||\n      (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)\n    ) {\n      this.reset();\n    } else if (input.eventType & INPUT_START) {\n      this.reset();\n      this._timer = setTimeoutContext(\n        () => {\n          this.state = STATE_RECOGNIZED;\n          this.tryEmit();\n        },\n        options.time,\n        this,\n      );\n    } else if (input.eventType & INPUT_END) {\n      return STATE_RECOGNIZED;\n    }\n    return STATE_FAILED;\n  }\n\n  reset() {\n    clearTimeout(this._timer);\n    this._timer = null;\n  }\n\n  emit(input) {\n    if (this.state !== STATE_RECOGNIZED) {\n      return;\n    }\n\n    if (input && input.eventType & INPUT_END) {\n      this.manager.emit(`${this.options.event}up`, input);\n    } else {\n      this._input.timeStamp = now();\n      this.manager.emit(this.options.event, this._input);\n    }\n  }\n}\n\nPressRecognizer.prototype.defaults = {\n  event: \"press\",\n  pointers: 1,\n  time: 251, // minimal time of the pointer to be pressed\n  threshold: 9, // a minimal movement is ok, but keep it low\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizers/rotate.js",
    "content": "import AttrRecognizer from \"./attribute\";\nimport { TOUCH_ACTION_NONE } from \"../touchactionjs/touchaction-Consts\";\nimport { STATE_BEGAN } from \"../recognizerjs/recognizer-consts\";\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nexport default class RotateRecognizer extends AttrRecognizer {\n  constructor() {\n    super(...arguments);\n  }\n\n  getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  }\n\n  attrTest(input) {\n    return (\n      super.attrTest(input) &&\n      (Math.abs(input.rotation) > this.options.threshold ||\n        this.state & STATE_BEGAN)\n    );\n  }\n}\n\nRotateRecognizer.prototype.defaults = {\n  event: \"rotate\",\n  threshold: 0,\n  pointers: 2,\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizers/swipe.js",
    "content": "import AttrRecognizer from \"../recognizers/attribute\";\nimport { abs } from \"../utils/utils-consts\";\nimport {\n  DIRECTION_HORIZONTAL,\n  DIRECTION_VERTICAL,\n} from \"../inputjs/input-consts\";\nimport PanRecognizer from \"./pan\";\nimport { INPUT_END } from \"../inputjs/input-consts\";\nimport directionStr from \"../recognizerjs/direction-str\";\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nexport default class SwipeRecognizer extends AttrRecognizer {\n  constructor() {\n    super(...arguments);\n  }\n\n  getTouchAction() {\n    return PanRecognizer.prototype.getTouchAction.call(this);\n  }\n\n  attrTest(input) {\n    let { direction } = this.options;\n    let velocity;\n\n    if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n      velocity = input.overallVelocity;\n    } else if (direction & DIRECTION_HORIZONTAL) {\n      velocity = input.overallVelocityX;\n    } else if (direction & DIRECTION_VERTICAL) {\n      velocity = input.overallVelocityY;\n    }\n\n    return (\n      super.attrTest(input) &&\n      direction & input.offsetDirection &&\n      input.distance > this.options.threshold &&\n      input.maxPointers === this.options.pointers &&\n      abs(velocity) > this.options.velocity &&\n      input.eventType & INPUT_END\n    );\n  }\n\n  emit(input) {\n    let direction = directionStr(input.offsetDirection);\n    if (direction) {\n      this.manager.emit(this.options.event + direction, input);\n    }\n\n    this.manager.emit(this.options.event, input);\n  }\n}\n\nSwipeRecognizer.prototype.defaults = {\n  event: \"swipe\",\n  threshold: 10,\n  velocity: 0.3,\n  direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n  pointers: 1,\n};\n"
  },
  {
    "path": "packages/hammer/src/recognizers/tap.js",
    "content": "import setTimeoutContext from \"../utils/set-timeout-context\";\nimport Recognizer from \"../recognizerjs/recognizer-constructor\";\nimport { TOUCH_ACTION_MANIPULATION } from \"../touchactionjs/touchaction-Consts\";\nimport { INPUT_START, INPUT_END } from \"../inputjs/input-consts\";\nimport {\n  STATE_RECOGNIZED,\n  STATE_BEGAN,\n  STATE_FAILED,\n} from \"../recognizerjs/recognizer-consts\";\nimport getDistance from \"../inputjs/get-distance\";\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nexport default class TapRecognizer extends Recognizer {\n  constructor() {\n    super(...arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n  }\n\n  getTouchAction() {\n    return [TOUCH_ACTION_MANIPULATION];\n  }\n\n  process(input) {\n    let { options } = this;\n\n    let validPointers = input.pointers.length === options.pointers;\n    let validMovement = input.distance < options.threshold;\n    let validTouchTime = input.deltaTime < options.time;\n\n    this.reset();\n\n    if (input.eventType & INPUT_START && this.count === 0) {\n      return this.failTimeout();\n    }\n\n    // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n    if (validMovement && validTouchTime && validPointers) {\n      if (input.eventType !== INPUT_END) {\n        return this.failTimeout();\n      }\n\n      let validInterval = this.pTime\n        ? input.timeStamp - this.pTime < options.interval\n        : true;\n      let validMultiTap =\n        !this.pCenter ||\n        getDistance(this.pCenter, input.center) < options.posThreshold;\n\n      this.pTime = input.timeStamp;\n      this.pCenter = input.center;\n\n      if (!validMultiTap || !validInterval) {\n        this.count = 1;\n      } else {\n        this.count += 1;\n      }\n\n      this._input = input;\n\n      // if tap count matches we have recognized it,\n      // else it has began recognizing...\n      let tapCount = this.count % options.taps;\n      if (tapCount === 0) {\n        // no failing requirements, immediately trigger the tap event\n        // or wait as long as the multitap interval to trigger\n        if (!this.hasRequireFailures()) {\n          return STATE_RECOGNIZED;\n        } else {\n          this._timer = setTimeoutContext(\n            () => {\n              this.state = STATE_RECOGNIZED;\n              this.tryEmit();\n            },\n            options.interval,\n            this,\n          );\n          return STATE_BEGAN;\n        }\n      }\n    }\n    return STATE_FAILED;\n  }\n\n  failTimeout() {\n    this._timer = setTimeoutContext(\n      () => {\n        this.state = STATE_FAILED;\n      },\n      this.options.interval,\n      this,\n    );\n    return STATE_FAILED;\n  }\n\n  reset() {\n    clearTimeout(this._timer);\n    this._timer = null;\n  }\n\n  emit() {\n    if (this.state === STATE_RECOGNIZED) {\n      this._input.tapCount = this.count;\n      this.manager.emit(this.options.event, this._input);\n    }\n  }\n}\n\nTapRecognizer.prototype.defaults = {\n  event: \"tap\",\n  pointers: 1,\n  taps: 1,\n  interval: 300, // max time between the multi-tap taps\n  time: 250, // max time of the pointer to be down (like finger on the screen)\n  threshold: 9, // a minimal movement is ok, but keep it low\n  posThreshold: 10, // a multi-tap can be a bit off the initial position\n};\n"
  },
  {
    "path": "packages/hammer/src/touchactionjs/clean-touch-actions.js",
    "content": "import inStr from \"../utils/in-str\";\nimport {\n  TOUCH_ACTION_NONE,\n  TOUCH_ACTION_PAN_X,\n  TOUCH_ACTION_PAN_Y,\n  TOUCH_ACTION_MANIPULATION,\n  TOUCH_ACTION_AUTO,\n} from \"./touchaction-Consts\";\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nexport default function cleanTouchActions(actions) {\n  // none\n  if (inStr(actions, TOUCH_ACTION_NONE)) {\n    return TOUCH_ACTION_NONE;\n  }\n\n  let hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n  let hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n  // if both pan-x and pan-y are set (different recognizers\n  // for different directions, e.g. horizontal pan but vertical swipe?)\n  // we need none (as otherwise with pan-x pan-y combined none of these\n  // recognizers will work, since the browser would handle all panning\n  if (hasPanX && hasPanY) {\n    return TOUCH_ACTION_NONE;\n  }\n\n  // pan-x OR pan-y\n  if (hasPanX || hasPanY) {\n    return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n  }\n\n  // manipulation\n  if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n    return TOUCH_ACTION_MANIPULATION;\n  }\n\n  return TOUCH_ACTION_AUTO;\n}\n"
  },
  {
    "path": "packages/hammer/src/touchactionjs/get-touchaction-props.js",
    "content": "export default function getTouchActionProps() {\n  let touchMap = {};\n  [\"auto\", \"manipulation\", \"pan-y\", \"pan-x\", \"pan-x pan-y\", \"none\"].forEach(\n    (val) => {\n      // If css.supports is not supported but there is native touch-action assume it supports\n      // all values. This is the case for IE 10 and 11.\n      return (touchMap[val] = true);\n    },\n  );\n  return touchMap;\n}\n"
  },
  {
    "path": "packages/hammer/src/touchactionjs/touchaction-Consts.js",
    "content": "import getTouchActionProps from \"./get-touchaction-props\";\n\n// magical touchAction value\nconst TOUCH_ACTION_COMPUTE = \"compute\";\nconst TOUCH_ACTION_AUTO = \"auto\";\nconst TOUCH_ACTION_MANIPULATION = \"manipulation\"; // not implemented\nconst TOUCH_ACTION_NONE = \"none\";\nconst TOUCH_ACTION_PAN_X = \"pan-x\";\nconst TOUCH_ACTION_PAN_Y = \"pan-y\";\nconst TOUCH_ACTION_MAP = getTouchActionProps();\n\nexport {\n  TOUCH_ACTION_AUTO,\n  TOUCH_ACTION_COMPUTE,\n  TOUCH_ACTION_MANIPULATION,\n  TOUCH_ACTION_NONE,\n  TOUCH_ACTION_PAN_X,\n  TOUCH_ACTION_PAN_Y,\n  TOUCH_ACTION_MAP,\n};\n"
  },
  {
    "path": "packages/hammer/src/touchactionjs/touchaction-constructor.js",
    "content": "import {\n  TOUCH_ACTION_COMPUTE,\n  TOUCH_ACTION_MAP,\n  TOUCH_ACTION_NONE,\n  TOUCH_ACTION_PAN_X,\n  TOUCH_ACTION_PAN_Y,\n} from \"./touchaction-Consts\";\nimport {\n  DIRECTION_VERTICAL,\n  DIRECTION_HORIZONTAL,\n} from \"../inputjs/input-consts\";\nimport each from \"../utils/each\";\nimport boolOrFn from \"../utils/bool-or-fn\";\nimport inStr from \"../utils/in-str\";\nimport cleanTouchActions from \"./clean-touch-actions\";\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nexport default class TouchAction {\n  constructor(manager, value) {\n    this.manager = manager;\n    this.set(value);\n  }\n\n  /**\n   * @private\n   * set the touchAction value on the element or enable the polyfill\n   * @param {String} value\n   */\n  set(value) {\n    // find out the touch-action by the event handlers\n    if (value === TOUCH_ACTION_COMPUTE) {\n      value = this.compute();\n    }\n\n    this.actions = value.toLowerCase().trim();\n  }\n\n  /**\n   * @private\n   * just re-set the touchAction value\n   */\n  update() {\n    this.set(this.manager.options.touchAction);\n  }\n\n  /**\n   * @private\n   * compute the value for the touchAction property based on the recognizer's settings\n   * @returns {String} value\n   */\n  compute() {\n    let actions = [];\n    each(this.manager.recognizers, (recognizer) => {\n      if (boolOrFn(recognizer.options.enable, [recognizer])) {\n        actions = actions.concat(recognizer.getTouchAction());\n      }\n    });\n    return cleanTouchActions(actions.join(\" \"));\n  }\n\n  /**\n   * @private\n   * this method is called on each input cycle and provides the preventing of the browser behavior\n   * @param {Object} input\n   */\n  preventDefaults(input) {\n    let { srcEvent } = input;\n    let direction = input.offsetDirection;\n\n    // if the touch action did prevented once this session\n    if (this.manager.session.prevented) {\n      srcEvent.preventDefault();\n      return;\n    }\n\n    let { actions } = this;\n    let hasNone =\n      inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n    let hasPanY =\n      inStr(actions, TOUCH_ACTION_PAN_Y) &&\n      !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n    let hasPanX =\n      inStr(actions, TOUCH_ACTION_PAN_X) &&\n      !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n    if (hasNone) {\n      // do not prevent defaults if this is a tap gesture\n      let isTapPointer = input.pointers.length === 1;\n      let isTapMovement = input.distance < 2;\n      let isTapTouchTime = input.deltaTime < 250;\n\n      if (isTapPointer && isTapMovement && isTapTouchTime) {\n        return;\n      }\n    }\n\n    if (hasPanX && hasPanY) {\n      // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n      return;\n    }\n\n    if (\n      hasNone ||\n      (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n      (hasPanX && direction & DIRECTION_VERTICAL)\n    ) {\n      return this.preventSrc(srcEvent);\n    }\n  }\n\n  /**\n   * @private\n   * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n   * @param {Object} srcEvent\n   */\n  preventSrc(srcEvent) {\n    this.manager.session.prevented = true;\n    srcEvent.preventDefault();\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/add-event-listeners.js",
    "content": "import each from \"./each\";\nimport splitStr from \"./split-str\";\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nexport default function addEventListeners(target, types, handler) {\n  each(splitStr(types), (type) => {\n    target.addEventListener(type, handler, false);\n  });\n}\n\nexport function addManagerListeners(manager, types, handler) {\n  each(splitStr(types), (type) => {\n    manager.on(`origin_input:${type}`, handler);\n  });\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/assign.js",
    "content": "/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nlet assign;\nif (typeof Object.assign !== \"function\") {\n  assign = function assign(target) {\n    if (target === undefined || target === null) {\n      throw new TypeError(\"Cannot convert undefined or null to object\");\n    }\n\n    let output = Object(target);\n    for (let index = 1; index < arguments.length; index++) {\n      const source = arguments[index];\n      if (source !== undefined && source !== null) {\n        for (const nextKey in source) {\n          if (source.hasOwnProperty(nextKey)) {\n            output[nextKey] = source[nextKey];\n          }\n        }\n      }\n    }\n    return output;\n  };\n} else {\n  assign = Object.assign;\n}\n\nexport default assign;\n"
  },
  {
    "path": "packages/hammer/src/utils/bind-fn.js",
    "content": "/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nexport default function bindFn(fn, context) {\n  return function boundFn() {\n    return fn.apply(context, arguments);\n  };\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/bool-or-fn.js",
    "content": "import { TYPE_FUNCTION } from \"./utils-consts\";\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nexport default function boolOrFn(val, args) {\n  if (typeof val === TYPE_FUNCTION) {\n    return val.apply(args ? args[0] || undefined : undefined, args);\n  }\n  return val;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/deprecate.js",
    "content": "/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nexport default function deprecate(method, name, message) {\n  let deprecationMessage = `DEPRECATED METHOD: ${name}\\n${message} AT \\n`;\n  return function () {\n    let e = new Error(\"get-stack-trace\");\n    let stack =\n      e && e.stack\n        ? e.stack\n            .replace(/^[^\\(]+?[\\n$]/gm, \"\")\n            .replace(/^\\s+at\\s+/gm, \"\")\n            .replace(/^Object.<anonymous>\\s*\\(/gm, \"{anonymous}()@\")\n        : \"Unknown Stack Trace\";\n\n    let log = console.warn;\n    if (log) {\n      log(deprecationMessage, stack);\n    }\n    return method.apply(this, arguments);\n  };\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/each.js",
    "content": "/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nexport default function each(obj, iterator, context) {\n  let i;\n\n  if (!obj) {\n    return;\n  }\n\n  if (obj.forEach) {\n    obj.forEach(iterator, context);\n  } else if (obj.length !== undefined) {\n    i = 0;\n    while (i < obj.length) {\n      iterator.call(context, obj[i], i, obj);\n      i++;\n    }\n  } else {\n    for (i in obj) {\n      obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/extend.js",
    "content": "import deprecate from \"./deprecate\";\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nconst extend = deprecate(\n  (dest, src, merge) => {\n    let keys = Object.keys(src);\n    let i = 0;\n    while (i < keys.length) {\n      if (!merge || (merge && dest[keys[i]] === undefined)) {\n        dest[keys[i]] = src[keys[i]];\n      }\n      i++;\n    }\n    return dest;\n  },\n  \"extend\",\n  \"Use `assign`.\",\n);\n\nexport default extend;\n"
  },
  {
    "path": "packages/hammer/src/utils/has-parent.js",
    "content": "/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nexport default function hasParent(node, parent) {\n  while (node) {\n    if (node === parent) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/if-undefined.js",
    "content": "/**\n * @private\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nexport default function ifUndefined(val1, val2) {\n  return val1 === undefined ? val2 : val1;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/in-array.js",
    "content": "/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nexport default function inArray(src, find, findByKey) {\n  if (src.indexOf && !findByKey) {\n    return src.indexOf(find);\n  } else {\n    let i = 0;\n    while (i < src.length) {\n      if (\n        (findByKey && src[i][findByKey] == find) ||\n        (!findByKey && src[i] === find)\n      ) {\n        // do not use === here, test fails\n        return i;\n      }\n      i++;\n    }\n    return -1;\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/in-str.js",
    "content": "/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nexport default function inStr(str, find) {\n  return str.indexOf(find) > -1;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/inherit.js",
    "content": "import assign from \"./assign\";\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nexport default function inherit(child, base, properties) {\n  let baseP = base.prototype;\n  let childP;\n\n  childP = child.prototype = Object.create(baseP);\n  childP.constructor = child;\n  childP._super = baseP;\n\n  if (properties) {\n    assign(childP, properties);\n  }\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/invoke-array-arg.js",
    "content": "import each from \"./each\";\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nexport default function invokeArrayArg(arg, fn, context) {\n  if (Array.isArray(arg)) {\n    each(arg, context[fn], context);\n    return true;\n  }\n  return false;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/merge.js",
    "content": "import deprecate from \"./deprecate\";\nimport extend from \"./extend\";\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nconst merge = deprecate(\n  (dest, src) => {\n    return extend(dest, src, true);\n  },\n  \"merge\",\n  \"Use `assign`.\",\n);\n\nexport default merge;\n"
  },
  {
    "path": "packages/hammer/src/utils/remove-event-listeners.js",
    "content": "import each from \"./each\";\nimport splitStr from \"./split-str\";\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nexport default function removeEventListeners(target, types, handler) {\n  each(splitStr(types), (type) => {\n    target.removeEventListener(type, handler, false);\n  });\n}\n\nexport function removeManagerListeners(manager, types, handler) {\n  each(splitStr(types), (type) => {\n    manager.off(`origin_input:${type}`, handler);\n  });\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/set-timeout-context.js",
    "content": "import bindFn from \"./bind-fn\";\n\n/**\n * @private\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nexport default function setTimeoutContext(fn, timeout, context) {\n  return setTimeout(bindFn(fn, context), timeout);\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/split-str.js",
    "content": "/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\n\nexport default function splitStr(str) {\n  return str.trim().split(/\\s+/g);\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/to-array.js",
    "content": "/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nexport default function toArray(obj) {\n  return Array.prototype.slice.call(obj, 0);\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/unique-array.js",
    "content": "import inArray from \"./in-array\";\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nexport default function uniqueArray(src, key, sort) {\n  let results = [];\n  let values = [];\n  let i = 0;\n\n  while (i < src.length) {\n    let val = key ? src[i][key] : src[i];\n    if (inArray(values, val) < 0) {\n      results.push(src[i]);\n    }\n    values[i] = val;\n    i++;\n  }\n\n  if (sort) {\n    if (!key) {\n      results = results.sort();\n    } else {\n      results = results.sort((a, b) => {\n        return a[key] > b[key];\n      });\n    }\n  }\n\n  return results;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/unique-id.js",
    "content": "/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nlet _uniqueId = 1;\nexport default function uniqueId() {\n  return _uniqueId++;\n}\n"
  },
  {
    "path": "packages/hammer/src/utils/utils-consts.js",
    "content": "const TYPE_FUNCTION = \"function\";\n\nconst { round, abs } = Math;\nconst { now } = Date;\n\nexport { TYPE_FUNCTION, round, abs, now };\n"
  },
  {
    "path": "packages/hammer/vite.config.ts",
    "content": "import { defineConfig } from \"vite\";\nimport path from \"path\";\n\nexport default defineConfig({\n  plugins: [],\n  resolve: {\n    alias: {\n      \"@\": path.resolve(__dirname, \"src\"),\n    },\n  },\n  build: {\n    lib: {\n      entry: path.resolve(__dirname, \"src/index.js\"), // 入口文件\n      name: \"f6-hammer\", // UMD 构建时的全局变量名\n      fileName: (format) => `index.${format}.js`, // 输出文件名\n    },\n    sourcemap: true,\n    rollupOptions: {\n      // 确保 external 包不会被打包到库中\n      external: [\"react\", \"react-dom\"],\n      output: [\n        {\n          // CommonJS\n          format: \"cjs\",\n          dir: \"dist/cjs\",\n        },\n        {\n          // ESM\n          format: \"es\",\n          dir: \"dist/esm\",\n        },\n        {\n          // UMD\n          format: \"umd\",\n          dir: \"dist/umd\",\n          name: \"f6-hammer\",\n          globals: {\n            react: \"React\",\n            \"react-dom\": \"ReactDOM\",\n          },\n        },\n      ],\n    },\n  },\n});\n"
  },
  {
    "path": "packages/plugin/package.json",
    "content": "{\n  \"name\": \"@antv/f6-plugin\",\n  \"version\": \"1.0.5\",\n  \"description\": \"F6 plugin\",\n  \"keywords\": [\n    \"antv\",\n    \"f6\",\n    \"graph\",\n    \"graph analysis\",\n    \"graph editor\",\n    \"graph visualization\",\n    \"relational data\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/antvis/F6.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"https://github.com/orgs/antvis/people\",\n  \"files\": [\n    \"package.json\",\n    \"es\",\n    \"lib\",\n    \"dist\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"main\": \"dist/cjs/index.cjs.js\",\n  \"module\": \"dist/esm/index.es.js\",\n  \"unpkg\": \"dist/umd/index.umd.js\",\n  \"browser\": \"dist/umd/index.umd.js\",\n  \"miniprogram\": \"dist\",\n  \"types\": \"lib/index.d.ts\",\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/F6/issues\"\n  },\n  \"homepage\": \"https://github.com/antvis/F6#readme\",\n  \"scripts\": {\n    \"clean\": \"rimraf dist\",\n    \"build\": \"vite build\"\n  },\n  \"dependencies\": {\n    \"@antv/f6-core\": \"workspace:*\",\n    \"@antv/f6-ui\": \"workspace:*\",\n    \"@antv/g-mobile\": \"^0.0.13\",\n    \"@antv/scale\": \"^0.3.1\",\n    \"@antv/matrix-util\": \"^3.0.4\",\n    \"@antv/path-util\": \"^2.0.3\",\n    \"@antv/util\": \"~2.0.5\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"~5.3.1\"\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/base.ts",
    "content": "import { wrapBehavior, each, deepMix } from \"@antv/util\";\nimport { IG6GraphEvent, IAbstractGraph as IGraph } from \"@antv/f6-core\";\n\nexport interface IPluginBaseConfig {\n  container?: HTMLDivElement | string | null;\n  className?: string;\n}\n\nexport interface IPluginBaseConfig {\n  graph?: IGraph;\n  [key: string]: any;\n}\n\ninterface EventMapType {\n  [key: string]: any;\n}\n\nexport default abstract class PluginBase {\n  private _events: EventMapType;\n\n  public _cfgs: IPluginBaseConfig;\n\n  public destroyed: boolean;\n\n  /**\n   * 插件基类的构造函数\n   * @param cfgs 插件的配置项\n   */\n  constructor(cfgs?: IPluginBaseConfig) {\n    this._cfgs = deepMix(this.getDefaultCfgs(), cfgs);\n    this._events = {};\n    this.destroyed = false;\n  }\n\n  /**\n   * 获取默认的插件配置\n   */\n  public getDefaultCfgs() {\n    return {};\n  }\n\n  /**\n   * 初始化插件\n   * @param graph IGraph 实例\n   */\n  public initPlugin(graph: IGraph) {\n    const self = this;\n    self.set(\"graph\", graph);\n\n    const events = self.getEvents();\n\n    const bindEvents: EventMapType = {};\n\n    each(events, (v, k) => {\n      const event = wrapBehavior(self, v) as (e: IG6GraphEvent) => void;\n      bindEvents[k] = event;\n      graph.on(k, event);\n    });\n    this._events = bindEvents;\n\n    this.init();\n  }\n\n  /**\n   * 初始化方法，供子类实现\n   */\n  public init() {}\n\n  /**\n   * 获取插件中的事件和事件处理方法，供子类实现\n   */\n  public getEvents() {\n    return {};\n  }\n\n  /**\n   * 获取配置项中的某个值\n   * @param key 键值\n   */\n  public get(key: string) {\n    return this._cfgs[key];\n  }\n\n  /**\n   * 将指定的值存储到 cfgs 中\n   * @param key 键值\n   * @param val 设置的值\n   */\n  public set(key: string, val: any) {\n    this._cfgs[key] = val;\n  }\n\n  /**\n   * 销毁方法，供子类复写\n   */\n  public destroy() {}\n\n  /**\n   * 销毁插件\n   */\n  public destroyPlugin() {\n    this.destroy();\n    const graph = this.get(\"graph\");\n    const events = this._events;\n    each(events, (v, k) => {\n      graph.off(k, v);\n    });\n    (this._events as EventMapType | null) = null;\n    (this._cfgs as IPluginBaseConfig | null) = null;\n    this.destroyed = true;\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/bundling/index.ts",
    "content": "import Base, { IPluginBaseConfig } from \"../base\";\nimport {\n  IEdge,\n  IAbstractGraph as IGraph,\n  GraphData,\n  NodeConfig,\n  NodeConfigMap,\n  EdgeConfig,\n} from \"@antv/f6-core\";\nimport { Point } from \"@antv/g-base\";\n\ninterface BundlingConfig extends IPluginBaseConfig {\n  edgeBundles?: IEdge[];\n  edgePoints?: NodeConfig[];\n  K?: number;\n  lambda?: number;\n  divisions?: number;\n  divRate?: number;\n  cycles?: number;\n  iterations?: number;\n  iterRate?: number;\n  bundleThreshold?: number;\n  eps?: number;\n  onLayoutEnd?: () => void;\n  onTick?: () => void;\n}\n\ninterface VectorPosition {\n  source: {\n    x: number;\n    y: number;\n  };\n  target: {\n    x: number;\n    y: number;\n  };\n  vx: number;\n  vy: number;\n  length: number;\n}\n\nfunction getEucliDis(pointA: Point, pointB: Point, eps?: number): number {\n  const vx = pointA.x - pointB.x;\n  const vy = pointA.y - pointB.y;\n  if (!eps || Math.abs(vx) > eps || Math.abs(vy) > eps) {\n    return Math.sqrt(vx * vx + vy * vy);\n  }\n  return eps;\n}\n\nfunction getDotProduct(ei: Point, ej: Point): number {\n  return ei.x * ej.x + ei.y * ej.y;\n}\n\nfunction projectPointToEdge(p: Point, e: VectorPosition): Point {\n  const k = (e.source.y - e.target.y) / (e.source.x - e.target.x);\n  const x = (k * k * e.source.x + k * (p.y - e.source.y) + p.x) / (k * k + 1);\n  const y = k * (x - e.source.x) + e.source.y;\n  return { x, y };\n}\n\nexport default class Bundling extends Base {\n  constructor(config?: BundlingConfig) {\n    super(config);\n  }\n  public getDefaultCfgs(): BundlingConfig {\n    return {\n      edgeBundles: [], // |edges| arrays, each one stores the related edges' id\n      edgePoints: [], // |edges| * divisions edge points\n      K: 0.1, // 边的强度\n      lambda: 0.1, // 初始步长\n      divisions: 1, // 初始切割点数\n      divRate: 2, // subdivision rate increase\n      cycles: 6, // number of cycles to perform\n      iterations: 90, // 每个 cycle 初始迭代次数\n      iterRate: 0.6666667, // 迭代下降率\n      bundleThreshold: 0.6,\n      eps: 1e-6,\n      onLayoutEnd() {}, // 布局完成回调\n      onTick() {}, // 每一迭代布局回调\n    };\n  }\n\n  public init() {\n    const graph: IGraph = this.get(\"graph\");\n    const onTick = this.get(\"onTick\");\n    const tick = () => {\n      if (onTick) {\n        onTick();\n      }\n      graph.refreshPositions();\n    };\n    this.set(\"tick\", tick);\n  }\n\n  public bundling(data: GraphData): void {\n    const self = this;\n    self.set(\"data\", data);\n\n    // 如果正在布局，忽略布局请求\n    if (self.isTicking()) {\n      return;\n    }\n\n    const edges = data.edges || [];\n    const nodes = data.nodes || [];\n    const nodeIdMap: NodeConfigMap = {};\n    let error = false;\n\n    nodes.forEach((node) => {\n      if (\n        node.x === null ||\n        !node.y === null ||\n        node.x === undefined ||\n        !node.y === undefined\n      ) {\n        error = true;\n      }\n      nodeIdMap[node.id] = node;\n    });\n\n    if (error)\n      throw new Error(\n        \"please layout the graph or assign x and y for nodes first\",\n      );\n    self.set(\"nodeIdMap\", nodeIdMap);\n\n    // subdivide each edges\n    let divisions: number = self.get(\"divisions\");\n    const divRate: number = self.get(\"divRate\");\n    let edgePoints: Point[][] = self.divideEdges(divisions);\n    self.set(\"edgePoints\", edgePoints);\n\n    // compute the bundles\n    const edgeBundles = self.getEdgeBundles();\n    self.set(\"edgeBundles\", edgeBundles);\n\n    // iterations\n    const C: number = self.get(\"cycles\");\n    let iterations: number = self.get(\"iterations\");\n    const iterRate: number = self.get(\"iterRate\");\n    let lambda: number = self.get(\"lambda\");\n\n    for (let i = 0; i < C; i++) {\n      for (let j = 0; j < iterations; j++) {\n        const forces: Point[][] = [];\n        edges.forEach((e, k) => {\n          if (e.source === e.target) return;\n          const source = nodeIdMap[e.source as string];\n          const target = nodeIdMap[e.target as string];\n\n          forces[k] = self.getEdgeForces(\n            { source, target },\n            k,\n            divisions,\n            lambda,\n          );\n\n          for (let p = 0; p < divisions + 1; p++) {\n            edgePoints[k][p].x += forces[k][p].x;\n            edgePoints[k][p].y += forces[k][p].y;\n          }\n        });\n      }\n\n      // parameters for nex cycle\n      lambda = lambda / 2;\n      divisions *= divRate;\n      iterations *= iterRate;\n      edgePoints = self.divideEdges(divisions);\n      self.set(\"edgePoints\", edgePoints);\n    }\n\n    // change the edges according to edgePoints\n    edges.forEach((e, i) => {\n      if (e.source === e.target) return;\n      e.type = \"polyline\";\n      e.controlPoints = edgePoints[i].slice(1, edgePoints[i].length - 1);\n    });\n\n    const graph = self.get(\"graph\");\n    graph.refresh();\n  }\n\n  public updateBundling(cfg: BundlingConfig) {\n    const self = this;\n    const { data } = cfg;\n    if (data) {\n      self.set(\"data\", data);\n    }\n\n    if (self.get(\"ticking\")) {\n      self.set(\"ticking\", false);\n    }\n\n    Object.keys(cfg).forEach((key) => {\n      self.set(key, cfg[key]);\n    });\n\n    if (cfg.onTick) {\n      const graph = this.get(\"graph\");\n\n      self.set(\"tick\", () => {\n        cfg.onTick!();\n        graph.refresh();\n      });\n    }\n\n    self.bundling(data);\n  }\n\n  public divideEdges(divisions: number): Point[][] {\n    const self = this;\n    const edges: EdgeConfig[] = self.get(\"data\").edges;\n    const nodeIdMap: NodeConfigMap = self.get(\"nodeIdMap\");\n    let edgePoints = self.get(\"edgePoints\");\n\n    if (!edgePoints || edgePoints === undefined) edgePoints = [];\n\n    edges.forEach((edge, i) => {\n      if (!edgePoints[i] || edgePoints[i] === undefined) {\n        edgePoints[i] = [];\n      }\n\n      const source = nodeIdMap[edge.source as string];\n      const target = nodeIdMap[edge.target as string];\n\n      if (divisions === 1) {\n        edgePoints[i].push({ x: source.x, y: source.y }); // source\n        edgePoints[i].push({\n          x: 0.5 * (source.x! + target.x!),\n          y: 0.5 * (source.y! + target.y!),\n        }); // mid\n        edgePoints[i].push({ x: target.x, y: target.y }); // target\n      } else {\n        let edgeLength = 0;\n\n        if (\n          !edgePoints[i] ||\n          (Array.isArray(edgePoints[i]) && edgePoints[i].length === 0)\n        ) {\n          // it is a straight line\n          edgeLength = getEucliDis(\n            { x: source.x!, y: source.y! },\n            { x: target.x!, y: target.y! },\n          );\n        } else {\n          edgeLength = self.getEdgeLength(edgePoints[i]);\n        }\n\n        const divisionLength = edgeLength / (divisions + 1);\n        let currentDivisonLength = divisionLength;\n\n        const newEdgePoints = [{ x: source.x, y: source.y }]; // source\n\n        edgePoints[i].forEach((ep: Point, j: number) => {\n          if (j === 0) return;\n\n          let oriDivisionLength = getEucliDis(ep, edgePoints[i][j - 1]);\n\n          while (oriDivisionLength > currentDivisonLength) {\n            const ratio = currentDivisonLength / oriDivisionLength;\n            const edgePoint = {\n              x: edgePoints[i][j - 1].x,\n              y: edgePoints[i][j - 1].y,\n            };\n            edgePoint.x += ratio * (ep.x - edgePoints[i][j - 1].x);\n            edgePoint.y += ratio * (ep.y - edgePoints[i][j - 1].y);\n\n            newEdgePoints.push(edgePoint);\n            oriDivisionLength -= currentDivisonLength;\n            currentDivisonLength = divisionLength;\n          }\n\n          currentDivisonLength -= oriDivisionLength;\n        });\n\n        newEdgePoints.push({ x: target.x, y: target.y }); // target\n        edgePoints[i] = newEdgePoints;\n      }\n    });\n    return edgePoints;\n  }\n\n  /**\n   * 计算边的长度\n   * @param points\n   */\n  public getEdgeLength(points: Point[]): number {\n    let length = 0;\n    points.forEach((p, i) => {\n      if (i === 0) return;\n      length += getEucliDis(p, points[i - 1]);\n    });\n    return length;\n  }\n\n  public getEdgeBundles(): number[] {\n    const self = this;\n    const data: GraphData = self.get(\"data\");\n    const edges = data.edges || [];\n\n    const bundleThreshold: number = self.get(\"bundleThreshold\");\n    const nodeIdMap: NodeConfigMap = self.get(\"nodeIdMap\");\n    let edgeBundles = self.get(\"edgeBundles\");\n\n    if (!edgeBundles) edgeBundles = [];\n\n    edges.forEach((e, i) => {\n      if (!edgeBundles[i] || edgeBundles[i] === undefined) {\n        edgeBundles[i] = [];\n      }\n    });\n\n    edges.forEach((ei, i) => {\n      const iSource = nodeIdMap[ei.source as string];\n      const iTarget = nodeIdMap[ei.target as string];\n\n      edges.forEach((ej, j) => {\n        if (j <= i) return;\n\n        const jSource = nodeIdMap[ej.source as string];\n        const jTarget = nodeIdMap[ej.target as string];\n\n        const score = self.getBundleScore(\n          { source: iSource, target: iTarget },\n          { source: jSource, target: jTarget },\n        );\n\n        if (score >= bundleThreshold) {\n          edgeBundles[i].push(j);\n          edgeBundles[j].push(i);\n        }\n      });\n    });\n    return edgeBundles;\n  }\n\n  public getBundleScore(ei: any, ej: any): number {\n    const self = this;\n    ei.vx = ei.target.x - ei.source.x;\n    ei.vy = ei.target.y - ei.source.y;\n    ej.vx = ej.target.x - ej.source.x;\n    ej.vy = ej.target.y - ej.source.y;\n\n    ei.length = getEucliDis(\n      {\n        x: ei.source.x,\n        y: ei.source.y,\n      },\n      {\n        x: ei.target.x,\n        y: ei.target.y,\n      },\n    );\n\n    ej.length = getEucliDis(\n      {\n        x: ej.source.x,\n        y: ej.source.y,\n      },\n      {\n        x: ej.target.x,\n        y: ej.target.y,\n      },\n    );\n\n    // angle score\n    const aScore = self.getAngleScore(ei, ej);\n\n    // scale score\n    const sScore = self.getScaleScore(ei, ej);\n\n    // position score\n    const pScore = self.getPositionScore(ei, ej);\n\n    // visibility socre\n    const vScore = self.getVisibilityScore(ei, ej);\n\n    return aScore * sScore * pScore * vScore;\n  }\n\n  protected getAngleScore(ei: VectorPosition, ej: VectorPosition): number {\n    const dotProduct = getDotProduct(\n      { x: ei.vx, y: ei.vy },\n      { x: ej.vx, y: ej.vy },\n    );\n    return dotProduct / (ei.length * ej.length);\n  }\n\n  protected getScaleScore(ei: VectorPosition, ej: VectorPosition): number {\n    const aLength = (ei.length + ej.length) / 2;\n    const score =\n      2 /\n      (aLength / Math.min(ei.length, ej.length) +\n        Math.max(ei.length, ej.length) / aLength);\n    return score;\n  }\n\n  protected getPositionScore(ei: VectorPosition, ej: VectorPosition): number {\n    const aLength = (ei.length + ej.length) / 2;\n\n    const iMid = {\n      x: (ei.source.x + ei.target.x) / 2,\n      y: (ei.source.y + ei.target.y) / 2,\n    };\n\n    const jMid = {\n      x: (ej.source.x + ej.target.x) / 2,\n      y: (ej.source.y + ej.target.y) / 2,\n    };\n\n    const distance = getEucliDis(iMid, jMid);\n    return aLength / (aLength + distance);\n  }\n\n  protected getVisibilityScore(ei: VectorPosition, ej: VectorPosition): number {\n    const vij = this.getEdgeVisibility(ei, ej);\n    const vji = this.getEdgeVisibility(ej, ei);\n    return vij < vji ? vij : vji;\n  }\n\n  protected getEdgeVisibility(ei: VectorPosition, ej: VectorPosition): number {\n    const ps = projectPointToEdge(ej.source, ei);\n    const pt = projectPointToEdge(ej.target, ei);\n    const pMid = {\n      x: (ps.x + pt.x) / 2,\n      y: (ps.y + pt.y) / 2,\n    };\n\n    const iMid = {\n      x: (ei.source.x + ei.target.x) / 2,\n      y: (ei.source.y + ei.target.y) / 2,\n    };\n\n    return Math.max(0, 1 - (2 * getEucliDis(pMid, iMid)) / getEucliDis(ps, pt));\n  }\n\n  protected getEdgeForces(\n    e: any,\n    eidx: number,\n    divisions: number,\n    lambda: number,\n  ): Point[] {\n    const self = this;\n    const edgePoints = self.get(\"edgePoints\");\n    const K = self.get(\"K\");\n\n    const kp = K / (getEucliDis(e.source, e.target) * (divisions + 1));\n    const edgePointForces = [{ x: 0, y: 0 }];\n\n    for (let i = 1; i < divisions; i++) {\n      const force = { x: 0, y: 0 };\n\n      const spring = self.getSpringForce(\n        {\n          pre: edgePoints[eidx][i - 1],\n          cur: edgePoints[eidx][i],\n          next: edgePoints[eidx][i + 1],\n        },\n        kp,\n      );\n\n      const electrostatic = self.getElectrostaticForce(i, eidx);\n\n      force.x = lambda * (spring.x + electrostatic.x);\n      force.y = lambda * (spring.y + electrostatic.y);\n      edgePointForces.push(force);\n    }\n\n    edgePointForces.push({ x: 0, y: 0 });\n    return edgePointForces;\n  }\n\n  protected getSpringForce(divisions: any, kp: number): Point {\n    let x = divisions.pre.x + divisions.next.x - 2 * divisions.cur.x;\n    let y = divisions.pre.y + divisions.next.y - 2 * divisions.cur.y;\n    x *= kp;\n    y *= kp;\n\n    return { x, y };\n  }\n\n  protected getElectrostaticForce(pidx: number, eidx: number): Point {\n    const self = this;\n    const eps = self.get(\"eps\");\n    const edgeBundles = self.get(\"edgeBundles\");\n    const edgePoints = self.get(\"edgePoints\");\n    const edgeBundle = edgeBundles[eidx];\n    const resForce = { x: 0, y: 0 };\n\n    edgeBundle.forEach((eb: number) => {\n      const force = {\n        x: edgePoints[eb][pidx].x - edgePoints[eidx][pidx].x,\n        y: edgePoints[eb][pidx].y - edgePoints[eidx][pidx].y,\n      };\n\n      if (Math.abs(force.x) > eps || Math.abs(force.y) > eps) {\n        const length = getEucliDis(\n          edgePoints[eb][pidx],\n          edgePoints[eidx][pidx],\n        );\n\n        const diff = 1 / length;\n        resForce.x += force.x * diff;\n        resForce.y += force.y * diff;\n      }\n    });\n\n    return resForce;\n  }\n\n  public isTicking(): boolean {\n    return this.get(\"ticking\");\n  }\n\n  public getSimulation() {\n    return this.get(\"forceSimulation\");\n  }\n\n  public destroy() {\n    if (this.get(\"ticking\")) {\n      this.getSimulation().stop();\n    }\n    super.destroy();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/edge-filter-lens/index.ts",
    "content": "import { clone } from \"@antv/util\";\nimport {\n  IG6GraphEvent,\n  ShapeStyle,\n  IAbstractGraph as IGraph,\n  Util,\n} from \"@antv/f6-core\";\nimport Base from \"../base\";\n\nconst { distance } = Util;\n\nconst DELTA = 0.05;\n\ninterface EdgeFilterLensConfig {\n  trigger?: \"tab\" | \"drag\";\n  r?: number;\n  delegateStyle?: ShapeStyle;\n  showLabel?: \"node\" | \"edge\" | \"both\" | undefined;\n  maxR?: number;\n  minR?: number;\n  type?: \"one\" | \"both\" | \"only-source\" | \"only-target\";\n  shouldShow?: (d?: unknown) => boolean;\n}\n\nconst lensDelegateStyle = {\n  stroke: \"#000\",\n  strokeOpacity: 0.8,\n  lineWidth: 2,\n  fillOpacity: 1,\n  fill: \"#fff\",\n};\nexport default class EdgeFilterLens extends Base {\n  isUp = true;\n  scaleTimer = null;\n  constructor(config?: EdgeFilterLensConfig) {\n    super(config);\n  }\n\n  public getDefaultCfgs(): EdgeFilterLensConfig {\n    return {\n      type: \"both\",\n      trigger: \"drag\",\n      r: 60,\n      delegateStyle: clone(lensDelegateStyle),\n      showLabel: \"edge\",\n    };\n  }\n\n  // class-methods-use-this\n  public getEvents() {\n    let events;\n    switch ((this as any).get(\"trigger\")) {\n      case \"click\":\n        events = {\n          tap: \"filter\",\n        };\n        break;\n      case \"drag\":\n        events = {\n          press: \"createDelegate\",\n        };\n        break;\n      default:\n        events = {\n          mousemove: \"filter\",\n        };\n        break;\n    }\n    return events;\n  }\n\n  public init() {\n    const self = this;\n    const showLabel = self.get(\"showLabel\");\n    const showNodeLabel = showLabel === \"node\" || showLabel === \"both\";\n    const showEdgeLabel = showLabel === \"edge\" || showLabel === \"both\";\n    self.set(\"showNodeLabel\", showNodeLabel);\n    self.set(\"showEdgeLabel\", showEdgeLabel);\n    const shouldShow = self.get(\"shouldShow\");\n    if (!shouldShow) self.set(\"shouldShow\", () => true);\n  }\n\n  // Create the delegate when the trigger is drag\n  protected createDelegate(e: IG6GraphEvent) {\n    const self = this;\n    let lensDelegate = self.get(\"delegate\");\n    if (!lensDelegate || lensDelegate.destroyed) {\n      const graph = this.get(\"graph\");\n      const pos = graph.getPointByClient(e.clientX, e.clientY);\n      self.filter(pos);\n      lensDelegate = self.get(\"delegate\");\n\n      // drag to move the lens\n      lensDelegate.on(\"dragstart\", (evt) => {});\n      lensDelegate.on(\"drag\", (e) => {\n        const pos = graph.getPointByClient(e.clientX, e.clientY);\n        self.filter(pos);\n      });\n      lensDelegate.on(\"dragend\", (e) => {\n        this.clear();\n      });\n    }\n  }\n\n  /**\n   * Scale the range by wheel\n   * @param e mouse wheel event\n   */\n  protected scaleRByWheel(e: IG6GraphEvent, isUp: boolean) {\n    const self = this;\n    if (!e) return;\n    if (e.preventDefault) e.preventDefault();\n    const graph: IGraph = self.get(\"graph\");\n    let ratio;\n    const lensDelegate = self.get(\"delegate\");\n    const lensCenter = lensDelegate\n      ? {\n          x: lensDelegate.attr(\"x\"),\n          y: lensDelegate.attr(\"y\"),\n        }\n      : undefined;\n    const mousePos = lensCenter || graph.getPointByClient(e.clientX, e.clientY);\n    if (isUp) {\n      ratio = 1 / (1 - DELTA);\n    } else {\n      ratio = 1 - DELTA;\n    }\n    const maxR = self.get(\"maxR\");\n    const minR = self.get(\"minR\");\n    let r = self.get(\"r\");\n    if (\n      (r > (maxR || graph.get(\"height\")) && ratio > 1) ||\n      (r < (minR || graph.get(\"height\") * 0.05) && ratio < 1)\n    ) {\n      ratio = 1;\n    }\n    r *= ratio;\n    self.set(\"r\", r);\n    self.filter(e);\n  }\n\n  /**\n   * Response function for mousemove, click, or drag to filter out the edges\n   * @param e mouse event\n   */\n  protected filter({ x, y }) {\n    const self = this;\n    const graph = self.get(\"graph\");\n    const nodes = graph.getNodes();\n    const hitNodesMap = {};\n    const r = self.get(\"r\");\n    const type = self.get(\"type\");\n    const fCenter = { x, y };\n    self.updateDelegate(fCenter, r);\n    const shouldShow = self.get(\"shouldShow\");\n\n    let vShapes = self.get(\"vShapes\");\n    if (vShapes) {\n      vShapes.forEach((shape) => {\n        shape.remove();\n        shape.destroy();\n      });\n    }\n    vShapes = [];\n\n    nodes.forEach((node) => {\n      const model = node.getModel();\n      const { x, y } = model;\n      if (distance({ x, y }, fCenter) < r) {\n        hitNodesMap[model.id] = node;\n      }\n    });\n    const edges = graph.getEdges();\n    const hitEdges = [];\n    edges.forEach((edge) => {\n      const model = edge.getModel();\n      const sourceId = model.source;\n      const targetId = model.target;\n      if (shouldShow(model)) {\n        if (type === \"only-source\" || type === \"one\") {\n          if (hitNodesMap[sourceId] && !hitNodesMap[targetId])\n            hitEdges.push(edge);\n        } else if (type === \"only-target\" || type === \"one\") {\n          if (hitNodesMap[targetId] && !hitNodesMap[sourceId])\n            hitEdges.push(edge);\n        } else if (\n          type === \"both\" &&\n          hitNodesMap[sourceId] &&\n          hitNodesMap[targetId]\n        ) {\n          hitEdges.push(edge);\n        }\n      }\n    });\n\n    const showNodeLabel = self.get(\"showNodeLabel\");\n    const showEdgeLabel = self.get(\"showEdgelabel\");\n\n    // copy the shapes in hitEdges\n    const group = graph.get(\"group\");\n    hitEdges.forEach((edge) => {\n      const shapes = edge.get(\"group\").get(\"children\");\n      shapes.forEach((shape) => {\n        const shapeType = shape.get(\"type\");\n        const vShape = group.addShape(shapeType, {\n          attrs: shape.attr(),\n          capture: false,\n        });\n        vShapes.push(vShape);\n        if (showNodeLabel && shapeType === \"text\") {\n          vShape.set(\"visible\", true);\n        }\n      });\n    });\n    // copy the shape sof hitNodes\n    Object.keys(hitNodesMap).forEach((key) => {\n      const node = hitNodesMap[key];\n      const clonedGroup = node.get(\"group\").clone();\n      clonedGroup.set(\"capture\", false);\n      group.add(clonedGroup);\n      vShapes.push(clonedGroup);\n      if (showEdgeLabel) {\n        const shapes = clonedGroup.get(\"children\");\n        for (let j = 0; j < shapes.length; j++) {\n          const shape = shapes[j];\n          if (shape.get(\"type\") === \"text\") {\n            shape.set(\"visible\", true);\n          }\n        }\n      }\n    });\n\n    self.set(\"vShapes\", vShapes);\n  }\n\n  /**\n   * Adjust part of the parameters, including trigger, type, r, maxR, minR, shouldShow, showLabel, and scaleRBy\n   * @param {EdgeFilterLensConfig} cfg\n   */\n  public updateParams(cfg: EdgeFilterLensConfig) {\n    const self = this;\n    const { r, trigger, minR, maxR, showLabel, shouldShow } = cfg;\n    if (!isNaN(cfg.r)) {\n      self.set(\"r\", r);\n    }\n    if (!isNaN(maxR)) {\n      self.set(\"maxR\", maxR);\n    }\n    if (!isNaN(minR)) {\n      self.set(\"minR\", minR);\n    }\n    if (trigger === \"tab\") {\n      self.set(\"trigger\", trigger);\n    }\n\n    if (showLabel === \"node\" || showLabel === \"both\") {\n      self.set(\"showNodeLabel\", true);\n    }\n    if (showLabel === \"edge\" || showLabel === \"both\") {\n      self.set(\"showEdgeLabel\", true);\n    }\n    if (shouldShow) {\n      self.set(\"shouldShow\", shouldShow);\n    }\n  }\n\n  /**\n   * Update the delegate shape of the lens\n   * @param {Point} mCenter the center of the shape\n   * @param {number} r the radius of the shape\n   */\n  private updateDelegate(mCenter, r) {\n    const self = this;\n    const graph = self.get(\"graph\");\n    let lensDelegate = self.get(\"delegate\");\n    if (!lensDelegate || lensDelegate.destroyed) {\n      // 拖动多个\n      const parent = graph.get(\"group\");\n      const attrs = self.get(\"delegateStyle\") || lensDelegateStyle;\n\n      // model上的x, y是相对于图形中心的，delegateShape是g实例，x,y是绝对坐标\n      lensDelegate = parent.addShape(\"circle\", {\n        attrs: {\n          r,\n          x: mCenter.x,\n          y: mCenter.y,\n          ...attrs,\n        },\n        name: \"lens-shape\",\n        draggable: true,\n        zIndex: 1000,\n      });\n    } else {\n      lensDelegate.attr({\n        x: mCenter.x,\n        y: mCenter.y,\n        r,\n      });\n    }\n\n    self.set(\"delegate\", lensDelegate);\n  }\n\n  /**\n   * Clear the filtering\n   */\n  public clear() {\n    const self = this;\n    let vShapes = self.get(\"vShapes\");\n    if (vShapes) {\n      vShapes.forEach((shape) => {\n        shape.remove();\n        shape.destroy();\n      });\n    }\n    vShapes = [];\n    self.set(\"vShapes\", vShapes);\n    const lensDelegate = self.get(\"delegate\");\n    if (lensDelegate && !lensDelegate.destroyed) {\n      lensDelegate.remove();\n      lensDelegate.destroy();\n    }\n  }\n\n  /**\n   * Destroy the component\n   */\n  public destroy() {\n    this.clear();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/fisheye/index.ts",
    "content": "import { clone, throttle } from \"@antv/util\";\nimport {\n  IG6GraphEvent,\n  ShapeStyle,\n  IAbstractGraph as IGraph,\n} from \"@antv/f6-core\";\nimport Base from \"../base\";\n\nconst DELTA = 0.05;\n\ninterface FisheyeConfig {\n  trigger?: \"mousemove\" | \"tap\" | \"drag\";\n  d?: number;\n  r?: number;\n  delegateStyle?: ShapeStyle;\n  showLabel?: boolean;\n  scaleRBy?: \"drag\" | \"unset\" | undefined;\n  scaleDBy?: \"drag\" | \"unset\" | undefined;\n  maxR?: number;\n  minR?: number;\n  maxD?: number;\n  minD?: number;\n  showDPercent?: boolean;\n}\n\nconst lensDelegateStyle = {\n  stroke: \"#000\",\n  strokeOpacity: 0.8,\n  lineWidth: 2,\n  fillOpacity: 0.1,\n  fill: \"#ccc\",\n};\nexport default class Fisheye extends Base {\n  constructor(config?: FisheyeConfig) {\n    super(config);\n  }\n  public getDefaultCfgs(): FisheyeConfig {\n    return {\n      trigger: \"tap\",\n      d: 1.5,\n      r: 300,\n      delegateStyle: clone(lensDelegateStyle),\n      showLabel: false,\n      maxD: 5,\n      minD: 0,\n      scaleRBy: \"unset\",\n      scaleDBy: \"unset\",\n      showDPercent: true,\n    };\n  }\n\n  // class-methods-use-this\n  public getEvents() {\n    let events;\n    switch ((this as any).get(\"trigger\")) {\n      case \"tap\":\n        events = {\n          tap: \"magnify\",\n        };\n        break;\n      case \"drag\":\n        events = {\n          press: \"createDelegate\",\n        };\n        break;\n      default:\n        events = {\n          tap: \"magnify\",\n        };\n        break;\n    }\n    return events;\n  }\n\n  public init() {\n    const self = this;\n    const r = self.get(\"r\");\n    self.set(\"cachedMagnifiedModels\", []);\n    self.set(\"cachedOriginPositions\", {});\n    self.set(\"r2\", r * r);\n    const d = self.get(\"d\");\n    self.set(\"molecularParam\", (d + 1) * r);\n  }\n\n  // Create the delegate when the trigger is drag\n  protected createDelegate(e: IG6GraphEvent) {\n    const self = this;\n    let lensDelegate = self.get(\"delegate\");\n    if (!lensDelegate || lensDelegate.destroyed) {\n      self.magnify(e);\n      lensDelegate = self.get(\"delegate\");\n\n      // drag to move the lens\n      lensDelegate.on(\"dragstart\", (evt) => {\n        self.set(\"delegateCenterDiff\", {\n          x: lensDelegate.attr(\"x\") - evt.x,\n          y: lensDelegate.attr(\"y\") - evt.y,\n        });\n      });\n      const throMmagnify = throttle(self.magnify.bind(self), 100, {\n        leading: false,\n        trailing: false,\n      });\n      lensDelegate.on(\"drag\", throMmagnify);\n\n      lensDelegate.on(\"dragend\", (evt) => {\n        this.clear();\n      });\n\n      // 绑定调整范围（r）和缩放系数(d)的监听\n      // 由于 drag 用于改变 lens 位置, 因此在此模式下, drag 不能用于调整 r 和 d\n\n      // scaling d\n      if (this.get(\"scaleDBy\") === \"wheel\") {\n        lensDelegate.on(\"mousewheel\", (evt) => {\n          this.scaleDByWheel(evt);\n        });\n      }\n\n      // scaling r\n      if (this.get(\"scaleRBy\") === \"wheel\") {\n        lensDelegate.on(\"mousewheel\", (evt) => {\n          self.scaleRByWheel(evt);\n        });\n      }\n    }\n  }\n\n  /**\n   * Scale the range by wheel\n   * @param e mouse wheel event\n   */\n  protected scaleRByWheel(e: IG6GraphEvent) {\n    const self = this;\n    if (!e || !e.originalEvent) return;\n    if (e.preventDefault) e.preventDefault();\n    const graph: IGraph = self.get(\"graph\");\n    let ratio;\n    const lensDelegate = self.get(\"delegate\");\n    const lensCenter = lensDelegate\n      ? {\n          x: lensDelegate.attr(\"x\"),\n          y: lensDelegate.attr(\"y\"),\n        }\n      : undefined;\n    const mousePos = lensCenter || graph.getPointByClient(e.clientX, e.clientY);\n    if ((e.originalEvent as any).wheelDelta < 0) {\n      ratio = 1 - DELTA;\n    } else {\n      ratio = 1 / (1 - DELTA);\n    }\n    const maxR = self.get(\"maxR\");\n    const minR = self.get(\"minR\");\n    let r = self.get(\"r\");\n    if (\n      (r > (maxR || graph.get(\"height\")) && ratio > 1) ||\n      (r < (minR || graph.get(\"height\") * 0.05) && ratio < 1)\n    ) {\n      ratio = 1;\n    }\n    r *= ratio;\n    self.set(\"r\", r);\n    self.set(\"r2\", r * r);\n    const d = self.get(\"d\");\n    self.set(\"molecularParam\", (d + 1) * r);\n    self.set(\"delegateCenterDiff\", undefined);\n    self.magnify(e, mousePos);\n  }\n\n  /**\n   * Scale the range by dragging\n   * @param e mouse event\n   */\n  protected scaleRByDrag(e: IG6GraphEvent) {\n    const self = this;\n    if (!e) return;\n    const dragPrePos = self.get(\"dragPrePos\");\n    const graph: IGraph = self.get(\"graph\");\n    let ratio;\n    const mousePos = graph.getPointByClient(e.clientX, e.clientY);\n    if (e.x - dragPrePos.x < 0) {\n      ratio = 1 - DELTA;\n    } else {\n      ratio = 1 / (1 - DELTA);\n    }\n    const maxR = self.get(\"maxR\");\n    const minR = self.get(\"minR\");\n    let r = self.get(\"r\");\n    if (\n      (r > (maxR || graph.get(\"height\")) && ratio > 1) ||\n      (r < (minR || graph.get(\"height\") * 0.05) && ratio < 1)\n    ) {\n      ratio = 1;\n    }\n    r *= ratio;\n    self.set(\"r\", r);\n    self.set(\"r2\", r * r);\n    const d = self.get(\"d\");\n    self.set(\"molecularParam\", (d + 1) * r);\n    self.magnify(e, mousePos);\n    self.set(\"dragPrePos\", { x: e.x, y: e.y });\n  }\n\n  /**\n   * Scale the magnifying factor by wheel\n   * @param e mouse wheel event\n   */\n  protected scaleDByWheel(evt: IG6GraphEvent) {\n    const self = this;\n    if (!evt && !evt.originalEvent) return;\n    if (evt.preventDefault) evt.preventDefault();\n    let delta = 0;\n    if ((evt.originalEvent as any).wheelDelta < 0) {\n      delta = -0.1;\n    } else {\n      delta = 0.1;\n    }\n    const d = self.get(\"d\");\n    const newD = d + delta;\n    const maxD = self.get(\"maxD\");\n    const minD = self.get(\"minD\");\n    if (newD < maxD && newD > minD) {\n      self.set(\"d\", newD);\n      const r = self.get(\"r\");\n      self.set(\"molecularParam\", (newD + 1) * r);\n      const lensDelegate = self.get(\"delegate\");\n      const lensCenter = lensDelegate\n        ? {\n            x: lensDelegate.attr(\"x\"),\n            y: lensDelegate.attr(\"y\"),\n          }\n        : undefined;\n      self.set(\"delegateCenterDiff\", undefined);\n      self.magnify(evt, lensCenter);\n    }\n  }\n\n  /**\n   * Scale the magnifying factor by dragging\n   * @param e mouse event\n   */\n  protected scaleDByDrag(e: IG6GraphEvent) {\n    const self = this;\n    const dragPrePos = self.get(\"dragPrePos\");\n    const delta = e.x - dragPrePos.x > 0 ? 0.1 : -0.1;\n    const d = self.get(\"d\");\n    const newD = d + delta;\n    const maxD = self.get(\"maxD\");\n    const minD = self.get(\"minD\");\n    if (newD < maxD && newD > minD) {\n      self.set(\"d\", newD);\n      const r = self.get(\"r\");\n      self.set(\"molecularParam\", (newD + 1) * r);\n      self.magnify(e);\n    }\n    self.set(\"dragPrePos\", { x: e.x, y: e.y });\n  }\n\n  /**\n   * Response function for mousemove, tap, or drag to magnify\n   * @param e mouse event\n   */\n  protected magnify(e: IG6GraphEvent, mousePos?) {\n    const self = this;\n    self.restoreCache();\n    const graph: IGraph = self.get(\"graph\");\n    const cachedMagnifiedModels = self.get(\"cachedMagnifiedModels\");\n    const cachedOriginPositions = self.get(\"cachedOriginPositions\");\n    const showLabel = self.get(\"showLabel\");\n    const r = self.get(\"r\");\n    const r2 = self.get(\"r2\");\n    const d = self.get(\"d\");\n    const molecularParam = self.get(\"molecularParam\");\n    const nodes = graph.getNodes();\n    const nodeLength = nodes.length;\n    let mCenter = mousePos\n      ? { x: mousePos.x, y: mousePos.y }\n      : { x: e.x, y: e.y };\n    if (\n      self.get(\"dragging\") &&\n      (self.get(\"trigger\") === \"mousemove\" || self.get(\"trigger\") === \"tap\")\n    ) {\n      mCenter = self.get(\"cacheCenter\");\n      // todo: pc端不需要,why\n      mCenter = graph.getPointByClient(mCenter.x, mCenter.y);\n    }\n    const delegateCenterDiff = self.get(\"delegateCenterDiff\");\n    if (delegateCenterDiff) {\n      mCenter.x += delegateCenterDiff.x;\n      mCenter.y += delegateCenterDiff.y;\n    }\n    self.updateDelegate(mCenter, r);\n    for (let i = 0; i < nodeLength; i++) {\n      const model = nodes[i].getModel();\n      const { x, y } = model;\n      if (isNaN(x) || isNaN(y)) continue;\n      // the square of the distance between the node and the magnified center\n      const dist2 =\n        (x - mCenter.x) * (x - mCenter.x) + (y - mCenter.y) * (y - mCenter.y);\n      if (!isNaN(dist2) && dist2 < r2 && dist2 !== 0) {\n        const dist = Math.sqrt(dist2);\n        // (r * (d + 1) * (dist / r)) / (d * (dist / r) + 1);\n        const magnifiedDist = (molecularParam * dist) / (d * dist + r);\n        const cos = (x - mCenter.x) / dist;\n        const sin = (y - mCenter.y) / dist;\n        model.x = cos * magnifiedDist + mCenter.x;\n        model.y = sin * magnifiedDist + mCenter.y;\n        if (!cachedOriginPositions[model.id]) {\n          cachedOriginPositions[model.id] = { x, y, texts: [] };\n        }\n        cachedMagnifiedModels.push(model);\n        if (showLabel && 2 * dist < r) {\n          const node = nodes[i];\n          const nodeGroup = node.getContainer();\n          const shapes = nodeGroup.getChildren();\n          const shapeLength = shapes.length;\n          for (let j = 0; j < shapeLength; j++) {\n            const shape = shapes[j];\n            if (shape.get(\"type\") === \"text\") {\n              cachedOriginPositions[model.id].texts.push({\n                visible: shape.get(\"visible\"),\n                shape,\n              });\n              shape.set(\"visible\", true);\n            }\n          }\n        }\n      }\n    }\n    graph.refreshPositions();\n  }\n\n  /**\n   * Restore the cache nodes while magnifying\n   */\n  protected restoreCache() {\n    const self = this;\n    const cachedMagnifiedModels = self.get(\"cachedMagnifiedModels\");\n    const cachedOriginPositions = self.get(\"cachedOriginPositions\");\n    const cacheLength = cachedMagnifiedModels.length;\n    for (let i = 0; i < cacheLength; i++) {\n      const node = cachedMagnifiedModels[i];\n      const id = node.id;\n      const ori = cachedOriginPositions[id];\n      node.x = ori.x;\n      node.y = ori.y;\n      const textLength = ori.texts.length;\n      for (let j = 0; j < textLength; j++) {\n        const text = ori.texts[j];\n        text.shape.set(\"visible\", text.visible);\n      }\n    }\n    self.set(\"cachedMagnifiedModels\", []);\n    self.set(\"cachedOriginPositions\", {});\n  }\n\n  /**\n   * Adjust part of the parameters, including trigger, d, r, maxR, minR, maxD, minD, scaleRBy, and scaleDBy\n   * @param {FisheyeConfig} cfg\n   */\n  public updateParams(cfg: FisheyeConfig) {\n    const self = this;\n    const { r, d, trigger, minD, maxD, minR, maxR, scaleDBy, scaleRBy } = cfg;\n    if (!isNaN(cfg.r)) {\n      self.set(\"r\", r);\n      self.set(\"r2\", r * r);\n    }\n    if (!isNaN(d)) {\n      self.set(\"d\", d);\n    }\n    if (!isNaN(maxD)) {\n      self.set(\"maxD\", maxD);\n    }\n    if (!isNaN(minD)) {\n      self.set(\"minD\", minD);\n    }\n    if (!isNaN(maxR)) {\n      self.set(\"maxR\", maxR);\n    }\n    if (!isNaN(minR)) {\n      self.set(\"minR\", minR);\n    }\n    const nd = self.get(\"d\");\n    const nr = self.get(\"r\");\n    self.set(\"molecularParam\", (nd + 1) * nr);\n    if (trigger === \"mousemove\" || trigger === \"tap\" || trigger === \"drag\") {\n      self.set(\"trigger\", trigger);\n    }\n    if (scaleDBy === \"drag\" || scaleDBy === \"unset\") {\n      self.set(\"scaleDBy\", scaleDBy);\n      self.get(\"delegate\").remove();\n      self.get(\"delegate\").destroy();\n      const dPercentText = self.get(\"dPercentText\");\n      if (dPercentText) {\n        dPercentText.remove();\n        dPercentText.destroy();\n      }\n    }\n    if (scaleRBy === \"drag\" || scaleRBy === \"unset\") {\n      self.set(\"scaleRBy\", scaleRBy);\n      self.get(\"delegate\").remove();\n      self.get(\"delegate\").destroy();\n      const dPercentText = self.get(\"dPercentText\");\n      if (dPercentText) {\n        dPercentText.remove();\n        dPercentText.destroy();\n      }\n    }\n  }\n\n  /**\n   * Update the delegate shape of the lens\n   * @param {Point} mCenter the center of the shape\n   * @param {number} r the radius of the shape\n   */\n  private updateDelegate(mCenter, r) {\n    const self = this;\n    const graph = self.get(\"graph\");\n    let lensDelegate = self.get(\"delegate\");\n    if (!lensDelegate || lensDelegate.destroyed) {\n      // 拖动多个\n      const parent = graph.get(\"group\");\n      const attrs = self.get(\"delegateStyle\") || lensDelegateStyle;\n\n      // model上的x, y是相对于图形中心的, delegateShape是g实例, x,y是绝对坐标\n      lensDelegate = parent.addShape(\"circle\", {\n        attrs: {\n          r: r / 1.5,\n          x: mCenter.x,\n          y: mCenter.y,\n          ...attrs,\n        },\n        name: \"lens-shape\",\n        draggable: true,\n      });\n\n      if (this.get(\"trigger\") !== \"drag\") {\n        // 调整范围 r 的监听\n        if (this.get(\"scaleRBy\") === \"wheel\") {\n          // 使用滚轮调整 r\n          lensDelegate.on(\"mousewheel\", (evt) => {\n            self.scaleRByWheel(evt);\n          });\n        } else if (this.get(\"scaleRBy\") === \"drag\") {\n          // 使用拖拽调整 r\n          lensDelegate.on(\"dragstart\", (e) => {\n            self.set(\"dragging\", true);\n            self.set(\"cacheCenter\", { x: e.x, y: e.y });\n            self.set(\"dragPrePos\", { x: e.x, y: e.y });\n          });\n          lensDelegate.on(\"drag\", (evt) => {\n            self.scaleRByDrag(evt);\n          });\n          lensDelegate.on(\"dragend\", (e) => {\n            self.set(\"dragging\", false);\n          });\n        }\n\n        // 调整缩放系数 d 的监听\n        if (this.get(\"scaleDBy\") === \"wheel\") {\n          // 使用滚轮调整 d\n          lensDelegate.on(\"mousewheel\", (evt) => {\n            this.scaleDByWheel(evt);\n          });\n        } else if (this.get(\"scaleDBy\") === \"drag\") {\n          // 使用拖拽调整 d\n          lensDelegate.on(\"dragstart\", (evt) => {\n            self.set(\"dragging\", true);\n            self.set(\"cacheCenter\", { x: evt.x, y: evt.y });\n            self.set(\"dragPrePos\", { x: evt.x, y: evt.y });\n          });\n          lensDelegate.on(\"drag\", (evt) => {\n            this.scaleDByDrag(evt);\n          });\n          lensDelegate.on(\"dragend\", (evt) => {\n            self.set(\"dragging\", false);\n          });\n        }\n      }\n    } else {\n      lensDelegate.attr({\n        x: mCenter.x,\n        y: mCenter.y,\n        r: r / 1.5,\n      });\n    }\n\n    // 绘制缩放系数百分比文本\n    if (self.get(\"showDPercent\")) {\n      const percent = Math.round(\n        ((self.get(\"d\") - self.get(\"minD\")) /\n          (self.get(\"maxD\") - self.get(\"minD\"))) *\n          100,\n      );\n      let dPercentText = self.get(\"dPercentText\");\n      const textY = mCenter.y + r / 1.5 + 16;\n      if (!dPercentText || dPercentText.destroyed) {\n        const parent = graph.get(\"group\");\n        dPercentText = parent.addShape(\"text\", {\n          attrs: {\n            text: `${percent}%`,\n            x: mCenter.x,\n            y: textY,\n            fill: \"#aaa\",\n            stroke: \"#fff\",\n            lineWidth: 1,\n            fontSize: 12,\n          },\n        });\n        self.set(\"dPercentText\", dPercentText);\n      } else {\n        dPercentText.attr({\n          text: `${percent}%`,\n          x: mCenter.x,\n          y: textY,\n        });\n      }\n    }\n    self.set(\"delegate\", lensDelegate);\n  }\n\n  /**\n   * Clear the fisheye lens\n   */\n  public clear() {\n    const graph = this.get(\"graph\");\n    this.restoreCache();\n    graph.refreshPositions();\n    const lensDelegate = this.get(\"delegate\");\n    if (lensDelegate && !lensDelegate.destroyed) {\n      lensDelegate.remove();\n      lensDelegate.destroy();\n    }\n    const dPercentText = this.get(\"dPercentText\");\n    if (dPercentText && !dPercentText.destroyed) {\n      dPercentText.remove();\n      dPercentText.destroy();\n    }\n    this.set(\"delegateCenterDiff\", undefined);\n  }\n\n  /**\n   * Destroy the component\n   */\n  public destroy() {\n    this.clear();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/index.ts",
    "content": "import TimeBar from \"./time-bar\";\nimport SnapLine from \"./snap-line\";\nimport Tooltip from \"./tooltip\";\nimport Legend from \"./legend\";\nimport ZoomSlider from \"./zoom-slider\";\nimport EdgeFilterLens from \"./edge-filter-lens\";\nimport Fisheye from \"./fisheye\";\nimport MiniMap from \"./minimap\";\nimport Bundling from \"./bundling\";\nimport Menu from \"./menu\";\n\nconst plugin = {\n  TimeBar,\n  SnapLine,\n  Tooltip,\n  Legend,\n  ZoomSlider,\n  EdgeFilterLens,\n  Fisheye,\n  MiniMap,\n  Bundling,\n  Menu,\n};\nexport {\n  TimeBar,\n  SnapLine,\n  Tooltip,\n  Legend,\n  ZoomSlider,\n  EdgeFilterLens,\n  Fisheye,\n  MiniMap,\n  Bundling,\n  Menu,\n};\nexport default plugin;\n"
  },
  {
    "path": "packages/plugin/src/legend/index.ts",
    "content": "import { IAbstractGraph as IGraph, GraphData, ShapeStyle } from \"@antv/f6-core\";\nimport Base from \"../base\";\nimport { isArray, isNumber, uniqueId } from \"@antv/util\";\nimport { createUI } from \"@antv/f6-ui\";\nimport { createItem } from \"./item\";\n\nconst ALLOW_EVENTS = [\"click\", \"mouseenter\"];\n\ninterface LegendConfig {\n  data: GraphData;\n  position?:\n    | \"top\"\n    | \"top-left\"\n    | \"top-right\"\n    | \"right\"\n    | \"right-top\"\n    | \"right-bottom\"\n    | \"left\"\n    | \"left-top\"\n    | \"left-bottom\"\n    | \"bottom\"\n    | \"bottom-left\"\n    | \"bottom-right\";\n  padding?: number | number[];\n  margin?: number | number[];\n  offsetX?: number;\n  offsetY?: number;\n  containerStyle?: ShapeStyle;\n  layout?: \"vertical\" | \"horizontal\";\n  width?: number;\n  height?: number;\n  align?: \"center\" | \"right\" | \"left\";\n  title?: string;\n  titleConfig?: {\n    position?: \"center\" | \"right\" | \"left\";\n    offsetX?: number;\n    offsetY?: number;\n    [key: string]: unknown;\n  };\n  itemConfig?: {\n    width?: number;\n    height?: number;\n    fontSize?: number;\n    margin?: \"string\";\n  };\n  filter?: {\n    enable?: boolean;\n    multiple?: boolean;\n    trigger?: \"click\";\n    legendStateStyles?: {\n      active?: ShapeStyle;\n      inactive?: ShapeStyle;\n    };\n    graphActiveState?: string;\n    graphInactiveState?: string;\n    filterFunctions?: {\n      [key: string]: (d) => boolean;\n    };\n  };\n}\n\n/**\n * 不支持mouseenter\n */\nexport default class Legend extends Base {\n  active = [];\n\n  inActive = [];\n  constructor(config?: LegendConfig) {\n    super(config);\n  }\n  public getDefaultCfgs(): LegendConfig {\n    return {\n      data: {},\n      position: \"top\",\n      padding: 0,\n      margin: 0,\n      offsetX: -10,\n      offsetY: 0,\n      layout: \"horizontal\",\n      containerStyle: {},\n      align: undefined,\n      filter: {\n        enable: false,\n        trigger: \"click\",\n      },\n      itemConfig: {\n        width: 100,\n        height: 50,\n        fontSize: 12,\n      },\n    };\n  }\n\n  public init() {\n    this.formatArray(\"padding\");\n    this.formatArray(\"margin\");\n    const filter = this.get(\"filter\") || {};\n    const multiple = filter.multiple;\n    if (multiple) this.set(\"multiple\", false);\n    let align = this.get(\"align\");\n    if (!align) {\n      const positions = this.get(\"position\").split(\"-\");\n      if (positions.includes(\"left\")) align = \"left\";\n      if (positions.includes(\"right\")) align = \"right\";\n      else align = \"center\";\n      this.set(\"align\", align);\n    }\n    setTimeout(() => {\n      const size = this.render();\n\n      const pos = this.getContainerPos(size);\n\n      this.get(\"graph\").get(\"uiGroup\").translate(pos.left, pos.top);\n\n      this.bindEvents();\n    });\n  }\n\n  protected getContainerPos(size: number[] = [0, 0]) {\n    const self = this;\n    const graph: IGraph = self.get(\"graph\");\n    const offsetX = this.get(\"offsetX\");\n    const offsetY = this.get(\"offsetY\");\n    const margin = this.get(\"margin\");\n    const positions = this.get(\"position\").split(\"-\");\n    const posIdxMap = { top: 0, right: 1, bottom: 2, left: 3 };\n\n    const x = 0,\n      y = 0;\n    const containerCSS: any = {\n      left: (graph.getWidth() - size[0]) / 2 + x,\n      top: (graph.getHeight() - size[1]) / 2 + y,\n    };\n    positions.forEach((pos) => {\n      let marginValue = margin[posIdxMap[pos]];\n      let key = pos;\n      switch (pos) {\n        case \"top\":\n          marginValue += y;\n          break;\n        case \"left\":\n          marginValue += x;\n          break;\n        case \"bottom\":\n          marginValue = graph.getHeight() - size[1] - marginValue + y;\n          key = \"top\";\n          break;\n        default:\n          marginValue = graph.getWidth() - size[0] - marginValue + x;\n          key = \"left\";\n          break;\n      }\n      containerCSS[key] = marginValue;\n    });\n    containerCSS.top += offsetY;\n    containerCSS.left += offsetX;\n\n    Object.keys(containerCSS).forEach((key) => {\n      containerCSS[key] = `${containerCSS[key]}`;\n    });\n\n    return containerCSS;\n  }\n\n  // class-methods-use-this\n  public bindEvents() {\n    const self = this;\n    const filter = self.get(\"filter\");\n    if (!filter || !filter.enable) return;\n    let trigger = filter.trigger || \"click\";\n    if (!ALLOW_EVENTS.includes(trigger)) {\n      console.warn(\n        \"Trigger for legend filterling must be 'click' or 'mouseenter', 'click' will take effect by default.\",\n      );\n      trigger = \"click\";\n    }\n    const ui = this.get(\"legendUI\");\n    ui.on(\"tap\", (e) => {\n      if (e?.uiNode?.getAttribute(\"class\") === \"node-container\") {\n        self.filterData(e.uiNode);\n      } else {\n        self.clearFilter();\n        self.clearActiveLegend();\n      }\n    });\n  }\n\n  /**\n   * 更新 legend 数据，开放给用户控制\n   * @param param\n   */\n  public changeData(data: GraphData) {\n    this.set(\"data\", data);\n    const size = this.render();\n    const pos = this.getContainerPos(size);\n    this.get(\"graph\").get(\"uiGroup\").translate(pos.left, pos.top);\n  }\n\n  goActive(node) {\n    this.goDefault(node);\n    const filter = this.get(\"filter\");\n    const stateStyles = filter?.lengedStateStyles || {};\n    const legendActive = stateStyles?.active || {\n      stroke: \"#000\",\n      lineWidth: 2,\n      \"text-shape\": {\n        fontWeight: \"bold\",\n        opacity: 1,\n      },\n    };\n    node.query(\"shape\").setStyle(\"borderColor\", legendActive.stroke);\n    node.query(\"shape\").setStyle(\"borderWidth\", legendActive.lineWidth);\n    node\n      .query(\"text\")\n      .setStyle(\"fontWeight\", legendActive[\"text-shape\"].fontWeight);\n    node.query(\"text\").setStyle(\"opacity\", legendActive[\"text-shape\"].opacity);\n    this.active.push(node);\n    this.inActive.includes(node) &&\n      this.inActive.splice(this.inActive.indexOf(node), 1);\n  }\n\n  goDefault(node) {\n    const originStyle = node.getAttribute(\"orignStyle\");\n    node.query(\"shape\").setStyle(\"borderColor\", originStyle.stroke);\n    node.query(\"shape\").setStyle(\"opacity\", 1);\n    node.query(\"shape\").setStyle(\"borderWidth\", originStyle.lineWidth || 1);\n    node.query(\"text\").setStyle(\"fontWeight\", \"normal\");\n    node.query(\"text\").setStyle(\"opacity\", 1);\n  }\n\n  goInActive(node) {\n    this.goDefault(node);\n    const filter = this.get(\"filter\");\n    const stateStyles = filter?.lengedStateStyles || {};\n    const legendInactive = stateStyles?.inactive || {\n      opacity: 0.5,\n      \"text-shape\": {\n        opacity: 0.5,\n      },\n    };\n    node.query(\"shape\").setStyle(\"opacity\", legendInactive.opacity);\n    node\n      .query(\"text\")\n      .setStyle(\"opacity\", legendInactive[\"text-shape\"].opacity);\n    this.inActive.push(node);\n    this.active.includes(node) &&\n      this.active.splice(this.active.indexOf(node), 1);\n  }\n\n  public activateLegend(node) {\n    const filter = this.get(\"filter\");\n    const multiple = filter?.multiple;\n    if (!multiple) this.clearActiveLegend();\n    if (this.active.includes(node)) return;\n    const ui = this.get(\"legendUI\");\n    const nodes = ui.queryAll(\".node-container\");\n    this.goActive(node);\n    nodes.forEach((node) => {\n      if (this.active.includes(node)) return;\n      this.goInActive(node);\n    });\n  }\n\n  public clearActiveLegend() {\n    const ui = this.get(\"legendUI\");\n    const nodes = ui.queryAll(\".node-container\");\n    nodes.forEach((node) => {\n      this.goDefault(node);\n    });\n    this.active = [];\n    this.inActive = [];\n  }\n\n  /**\n   * 高亮和置灰图例，并过滤主图元素\n   * @param param\n   */\n  public filterData(activeNode) {\n    const filter = this.get(\"filter\");\n    const filterFunctions = filter?.filterFunctions;\n    if (!filter || !filterFunctions) return;\n    const graph = this.get(\"graph\");\n    const activeState = filter.graphActiveState || \"active\";\n    const inactiveState = filter.graphInactiveState || \"inactive\";\n    const multiple = filter.multiple;\n    this.clearFilter();\n    if (!multiple) this.clearActiveLegend();\n\n    if (this.active.includes(activeNode)) {\n      this.goInActive(activeNode);\n    } else {\n      // 设置 legend 的高亮状态\n      this.activateLegend(activeNode);\n    }\n    if (this.active.length === 0) {\n      const ui = this.get(\"legendUI\");\n      ui.queryAll(\".node-container\").forEach((child) => this.goDefault(child));\n    }\n    let activeCount = 0;\n    const typeFuncs = [\"getNodes\", \"getEdges\"];\n    typeFuncs.forEach((typeFunc) => {\n      graph[typeFunc]().forEach((graphItem) => {\n        let active = false;\n        this.active.forEach((node) => {\n          const func = filterFunctions[node.getAttribute(\"legendId\")];\n          active = active || func(graphItem.getModel());\n        });\n        if (active) {\n          graph.setItemState(graphItem, inactiveState, false);\n          graph.setItemState(graphItem, activeState, true);\n          activeCount++;\n        } else {\n          graph.setItemState(graphItem, activeState, false);\n          graph.setItemState(graphItem, inactiveState, true);\n        }\n      });\n    });\n    if (!activeCount)\n      typeFuncs.forEach((typeFunc) => {\n        graph[typeFunc]().forEach((graphItem) => {\n          graph.clearItemStates(graphItem, [inactiveState]);\n        });\n      });\n  }\n\n  /**\n   * 清除主图相关状态\n   * @param param\n   */\n  public clearFilter() {\n    // 清除 legend 的高亮状态\n    const graph = this.get(\"graph\");\n    const filter = this.get(\"filter\");\n    if (!filter) return;\n    const activeState = filter.graphActiveState || \"active\";\n    const inactiveState = filter.graphInactiveState || \"inactive\";\n    graph.getNodes().forEach((node) => {\n      graph.clearItemStates(node, [activeState, inactiveState]);\n    });\n    graph.getEdges().forEach((edge) => {\n      graph.clearItemStates(edge, [activeState, inactiveState]);\n    });\n  }\n\n  /**\n   * 渲染 legend 图\n   * @param param\n   */\n  protected render(): number[] {\n    this.processData();\n\n    const itemsData = this.get(\"itemsData\");\n    const itemTypes = [\"nodes\", \"edges\"];\n\n    // 创建单个节点\n    let nodes = [[], []];\n    itemTypes.forEach((itemType, i) => {\n      itemsData[itemType].forEach((data) => {\n        const style = this.getStyle(itemType.substr(0, 4), data);\n        nodes[i].push(createItem(data, style, this.get(\"itemConfig\")));\n      });\n    });\n\n    // 创建title\n    const title = this.get(\"title\");\n    const html = ` \n    <div class='g6-legend-container'>\n      ${title && `<div class='text-container'>${title}</div>`}\n      <div class='node-wrap'>\n        <div class='node-row'> </div>\n        <div class='edge-row'> </div>\n      </div>  \n    </div>`;\n\n    const defaultTitleStyle = {\n      fontSize: 20,\n      fontFamily: \"Arial\",\n      fontWeight: 300,\n      textBaseline: \"top\",\n      textAlign: \"center\",\n      fill: \"#000\",\n    };\n    const titleConfig = this.get(\"titleConfig\") || {};\n    const titleStyle = Object.assign(\n      defaultTitleStyle,\n      titleConfig.style || {},\n    );\n    const containerStyle = this.get(\"containerStyle\");\n    const padding = this.get(\"padding\");\n    const margin = this.get(\"margin\");\n    // flex-direction: ${this.get('layout') === 'vertical' ? 'column' : 'row'};\n\n    const css = `\n      .g6-legend-container{\n        width: ${this.get(\"width\")};\n        height: ${this.get(\"height\")};\n        padding: ${padding.join(\" \")};\n        margin: ${margin.join(\" \")};\n        background: ${containerStyle.fill || \"#f00\"};\n        border: ${containerStyle.lineWidth || \"1\"} solid ${\n          containerStyle.stroke || \"#000\"\n        };\n        opacity: ${containerStyle.opacity || \"0.5\"}\n      }\n      .text-container {\n        font-size: ${titleStyle.fontSize};\n        font-family: ${titleStyle.fontFamily};\n        font-weight: ${titleStyle.fontWeight};\n        text-align: ${titleStyle.textAlign};\n        color: ${titleStyle.fill};\n        height: ${titleStyle.fontSize};\n        background-opacity: 0;\n        top:  ${titleConfig.offsetY};\n        left: ${titleConfig.offsetX};\n      }\n      .edge-row, .node-row {\n        display: flex;\n        flex-direction: ${this.get(\"layout\") === \"vertical\" ? \"column\" : \"row\"};\n        flex-wrap: nowrap;\n        justify-content: space-between;\n        background-opacity: 0;\n      }\n      .node-wrap {\n        flex: 1;\n        flex-direction: ${this.get(\"layout\") === \"vertical\" ? \"row\" : \"column\"};\n        justify-content: space-between;\n        background-opacity: 0;\n      }\n    `;\n    const ui = createUI(html, css, this.get(\"graph\").get(\"uiGroup\"));\n    ui.query(\".node-row\").appendChild(...nodes[0]);\n    ui.query(\".edge-row\").appendChild(...nodes[1]);\n    this.set(\"legendUI\", ui);\n\n    return [ui.width, ui.height];\n  }\n\n  protected processData() {\n    const data = this.get(\"data\");\n    const itemsData = { nodes: [], edges: [] };\n    if (data.nodes) {\n      data.nodes.sort((a, b) => a.order - b.order);\n      data.nodes.forEach((node) => {\n        const size = node.size || [\n          node.style?.width || node.style?.r || 8,\n          node.style?.height || node.style?.r || 8,\n        ];\n        const labelStyle = node.labelCfg?.style || {};\n        itemsData.nodes.push({\n          id: node.id || uniqueId(),\n          type: node.type || \"circle\",\n          style: {\n            ...node.style,\n          },\n          order: node.order,\n          label: node.label,\n          itemType: \"node\",\n          size,\n          labelCfg: {\n            position: \"right\",\n            style: {\n              fontFamily: \"Arial\",\n              ...labelStyle,\n            },\n          },\n        });\n      });\n    }\n    if (data.edges) {\n      data.edges.sort((a, b) => a.order - b.order);\n      data.edges.forEach((edge) => {\n        let type = edge.type || \"line\";\n        if (edge.type === \"cubic-horizontal\") type = \"cubic\";\n        const labelStyle = edge.labelCfg?.style || {};\n        const size = edge.size || [edge.style?.width || 8, 1];\n\n        itemsData.edges.push({\n          id: edge.id || uniqueId(),\n          type,\n          size,\n          style: {\n            lineWidth: isArray(size) ? size[1] : 1,\n            ...edge.style,\n          },\n          order: edge.order,\n          label: edge.label,\n          itemType: \"edge\",\n          labelCfg: {\n            position: \"right\",\n            style: {\n              fontFamily: \"Arial\",\n              ...labelStyle,\n            },\n          },\n        });\n      });\n    }\n\n    this.set(\"itemsData\", itemsData);\n  }\n\n  protected formatArray(key: string) {\n    const value = this.get(key);\n    if (isNumber(value)) this.set(key, [value, value, value, value]);\n    else if (isArray(value)) {\n      switch (value.length) {\n        case 0:\n          this.set(key, [0, 0, 0, 0]);\n          break;\n        case 1:\n          this.set(key, [value[0], value[0], value[0], value[0]]);\n          break;\n        case 2:\n          this.set(key, [value[0], value[1], value[0], value[1]]);\n          break;\n        case 3:\n          this.set(key, [value[0], value[1], value[2], value[1]]);\n          break;\n        default:\n          break;\n      }\n    }\n    return this.get(key);\n  }\n\n  private getStyle(type, data) {\n    const defaultStyle =\n      type === \"node\"\n        ? {\n            fill: \"#ccc\",\n            lineWidth: 0,\n          }\n        : {\n            stroke: \"#000\",\n            lineWidth: 1,\n          };\n    return {\n      ...defaultStyle,\n      ...(data.style || {}),\n    };\n  }\n\n  public destroy() {\n    const graph: IGraph = this.get(\"graph\");\n    const graphContainer = graph.get<HTMLDivElement>(\"container\");\n    const container: HTMLDivElement = this.get(\"container\");\n    graphContainer.removeChild(container);\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/legend/item.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\n\nexport function createItem(data, style, itemConfig) {\n  let attrs;\n  let shapeType = data.type;\n  const { width, height, r } = getShapeSize(data);\n  switch (data.type) {\n    case \"circle\":\n      attrs = { r, x: 0, y: 0 };\n      break;\n    case \"rect\":\n      attrs = { width, height, x: -width / 2, y: -height / 2 };\n      break;\n    case \"ellipse\":\n      attrs = { r1: width, r2: height, x: 0, y: 0 };\n      break;\n    case \"line\":\n      attrs = { x1: -width / 2, y1: 0, x2: width / 2, y2: 0 };\n      shapeType = \"line\";\n      break;\n    case \"quadratic\":\n      attrs = {\n        path: [\n          [\"M\", -width / 2, 0],\n          [\"Q\", 0, width / 2, width / 2, 0],\n        ],\n      };\n      shapeType = \"path\";\n      break;\n    case \"cubic\":\n      attrs = {\n        path: [\n          [\"M\", -width / 2, 0],\n          [\"C\", -width / 6, width / 2, width / 6, -width / 2, width / 2, 0],\n        ],\n      };\n      shapeType = \"path\";\n      break;\n    default:\n      attrs = { r, x: 0, y: 0 };\n      break;\n  }\n  const html = `\n  <div class='node-container' orignStyle=${JSON.stringify(style)} legendId=${\n    data.id\n  }>\n    <shape type='${shapeType}' class='${data.type}-node-keyShape' \n      ${Object.entries(attrs).reduce(\n        (prev, cur) => (prev += ` ${cur[0]}=${cur[1]} `),\n        \"\",\n      )}\n    />\n    ${data.label && ` <div class='text'>${data.label}</div>`}\n  </div>\n`;\n  const labelStyle = {\n    textAlign: \"begin\",\n    fontSize: 12,\n    fill: \"#000\",\n    opacity: 1,\n    fontWeight: \"normal\",\n    ...data.labelStyle,\n  };\n  const css = `\n    .node-container {\n      width: ${itemConfig.width};\n      height: ${itemConfig.height || Math.max(height, itemConfig.fontSize)};\n      display: flex;\n      flex-direction: row;\n      justify-content: center;\n      align-items: center;\n      background-opacity: 0;\n      font-size: ${labelStyle.fontSize};\n      margin: ${itemConfig.margin}\n    }\n    shape {\n      top: ${height / 2};\n      left: ${width / 2};\n      width: ${width};\n      height: ${height};\n      background: ${style.fill};\n      border: ${style.lineWidth || \"1\"} solid ${style.stroke};\n      margin-right: 3;\n    }\n    .text {\n      flex: 1;\n      height: ${labelStyle.fontSize + 2};\n      color: ${labelStyle.fill};\n      background-opacity: 0;\n      pointer-events: none;\n      text-align: ${labelStyle.textAlign};\n      font-weight: ${labelStyle.fontWeight}\n    }\n    text {\n      opacity: ${labelStyle.opacity};\n      white-space: nowrap;\n    }\n`;\n\n  const node = createSegmentNode(html, css);\n  return node;\n}\n\nfunction getShapeSize(data) {\n  let width, height, r;\n  if (data.size) {\n    if (Array.isArray(data.size)) {\n      width = data.size[0];\n      height = data.size[1] || data.size[0];\n      r = data.size[0] / 2;\n    } else if (typeof data.size === \"number\") {\n      width = data.size;\n      height = data.size;\n      r = data.size / 2;\n    }\n  }\n  if (data.style) {\n    if (data.style.width) width = data.style.width;\n    if (data.style.height) height = data.style.height;\n    if (data.style.r) r = data.style.r;\n  }\n\n  if (!r) r = 5;\n  if (!width) width = r;\n  if (!height) height = r;\n\n  return { width, height, r };\n}\n"
  },
  {
    "path": "packages/plugin/src/menu/index.ts",
    "content": "import { IAbstractGraph as IGraph, IG6GraphEvent, Item } from \"@antv/f6-core\";\nimport Base, { IPluginBaseConfig } from \"../base\";\nimport { createUI } from \"@antv/f6-ui\";\n\ninterface MenuConfig extends IPluginBaseConfig {\n  handleMenuClick?: (target: HTMLElement, item: Item) => void;\n  getContent?: (evt?: IG6GraphEvent) => HTMLDivElement | string;\n  // offsetX 与 offsetY 需要加上父容器的 padding\n  offsetX?: number;\n  offsetY?: number;\n  shouldBegin?: (evt?: IG6GraphEvent) => boolean;\n  // 允许出现 tooltip 的 item 类型\n  itemTypes?: string[];\n}\n\nexport default class Menu extends Base {\n  constructor(config?: MenuConfig) {\n    super(config);\n  }\n\n  public getDefaultCfgs(): MenuConfig {\n    return {\n      offsetX: 6,\n      offsetY: 6,\n      handleMenuClick: undefined,\n      // 指定菜单内容，function(e) {...}\n      getContent: (e) => {\n        return `\n          <div class='f6-contextmenu-ul'>\n            <div class='f6-contextmenu-li'>菜单项1</div>\n            <div class='f6-contextmenu-li'>菜单项2</div>\n          </div>\n        `;\n      },\n      getCss() {\n        return `\n        .f6-contextmenu-ul {\n          display: flex;\n          width: 100;\n          border: 1 solid #e2e2e2;\n          border-radius: 4;\n          font-size: 12;\n          color: #545454;\n          padding: 10 8;\n          background-color: rgba(255, 255, 255, 0.9);\n        }\n        .f6-contextmenu-li {\n            opacity: 0;\n            justify-content: center;\n            text-align: center;\n            height: 50;\n          }\n        `;\n      },\n      shouldBegin: (e) => {\n        return true;\n      },\n      // 菜单隐藏事件\n      onHide() {\n        return true;\n      },\n      itemTypes: [\"node\", \"edge\", \"combo\"],\n    };\n  }\n\n  // class-methods-use-this\n  public getEvents() {\n    return {\n      press: \"onMenuShow\",\n    };\n  }\n\n  public init() {\n    const graph: IGraph = this.get(\"graph\");\n\n    graph.on(\"tap\", () => {\n      this.onMenuHide();\n    });\n  }\n\n  protected onMenuShow(e: IG6GraphEvent) {\n    const self = this;\n    e.preventDefault();\n\n    const itemTypes = this.get(\"itemTypes\");\n    if (!e.item) {\n      if (itemTypes.indexOf(\"canvas\") === -1) {\n        self.onMenuHide();\n        return;\n      }\n    } else {\n      if (\n        e.item &&\n        e.item.getType &&\n        itemTypes.indexOf(e.item.getType()) === -1\n      ) {\n        self.onMenuHide();\n        return;\n      }\n    }\n\n    const shouldBegin = this.get(\"shouldBegin\");\n    if (!shouldBegin(e)) return;\n\n    const className = this.get(\"className\");\n    const graph: IGraph = this.get(\"graph\");\n    const uiGroup = graph.get(\"uiGroup\");\n\n    const getContent = this.get(\"getContent\");\n    const getCss = this.get(\"getCss\");\n    const css = `\n    root {\n      display: flex;\n      font-size: 12;\n      color: #545454;\n    }\n    text {\n      height: 12;\n      opacity: 1;\n    }\n    ${getCss?.() ?? \"\"}\n  `;\n    const menuLiHtml = getContent(e, graph);\n    const menu = createUI(\n      `<root class=${\n        className || \"g6-component-contextmenu\"\n      }>${menuLiHtml}</root>`,\n      css,\n      uiGroup,\n    );\n    this.get(\"menu\")?.remove();\n    this.set(\"menu\", menu);\n\n    const handleMenuClick = this.get(\"handleMenuClick\");\n    if (handleMenuClick) {\n      const handleMenuClickWrapper = (evt) => {\n        evt.stopPropagation();\n        handleMenuClick(evt.uiNode?.attributes, e.item, graph);\n      };\n      this.set(\"handleMenuClickWrapper\", handleMenuClickWrapper);\n      menu.on(\"tap\", handleMenuClickWrapper);\n    }\n\n    const width: number = graph.get(\"width\");\n    const height: number = graph.get(\"height\");\n\n    const bbox = {\n      width: menu.width,\n      height: menu.height,\n      left: menu.left,\n      right: menu.right,\n    };\n\n    const offsetX = this.get(\"offsetX\") || 0;\n    const offsetY = this.get(\"offsetY\") || 0;\n\n    let x = e.canvasX + offsetX;\n    let y = e.canvasY + offsetY;\n\n    // when the menu is (part of) out of the canvas\n    if (x + bbox.width > width) {\n      x = e.canvasX - bbox.width - offsetX;\n    }\n    if (y + bbox.height > height) {\n      y = e.canvasY - bbox.height - offsetY;\n    }\n\n    menu.setStyle(\"left\", x);\n    menu.setStyle(\"top\", y);\n  }\n\n  private onMenuHide() {\n    const menuDom = this.get(\"menu\");\n    menuDom?.remove();\n  }\n\n  public destroy() {\n    const menu = this.get(\"menu\");\n    menu?.remove();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/minimap/index.ts",
    "content": "import { Canvas as GCanvas, Group } from \"@antv/g-mobile\";\nimport { Event as GraphEvent, Point } from \"@antv/g-base\";\nimport { isNil, each, debounce } from \"@antv/util\";\nimport { Matrix, ShapeStyle, IAbstractGraph as IGraph } from \"@antv/f6-core\";\nimport { ext } from \"@antv/matrix-util\";\nimport Base, { IPluginBaseConfig } from \"../base\";\n\nimport { createUI } from \"@antv/f6-ui\";\n\nconst { max } = Math;\nconst { transform } = ext;\n\nconst DEFAULT_MODE = \"default\";\nconst KEYSHAPE_MODE = \"keyShape\";\nconst DELEGATE_MODE = \"delegate\";\n\ninterface MiniMapConfig extends IPluginBaseConfig {\n  viewportClassName?: string;\n  className?: string;\n  type?: \"default\" | \"keyShape\" | \"delegate\";\n  size?: number[];\n  delegateStyle?: ShapeStyle;\n  refresh?: boolean;\n  padding?: number;\n  getCss?: Function;\n}\n\nexport default class MiniMap extends Base {\n  constructor(config?: MiniMapConfig) {\n    super(config);\n  }\n  this: IGraph;\n  public getDefaultCfgs(): MiniMapConfig {\n    return {\n      container: null,\n      className: \"\",\n      viewportClassName: \"\",\n      // Minimap 中默认展示和主图一样的内容，KeyShape 只展示节点和边的 key shape 部分，delegate表示展示自定义的rect，用户可自定义样式\n      type: \"default\",\n      padding: 50,\n      size: [200, 120],\n      delegateStyle: {\n        fill: \"#40a9ff\",\n        stroke: \"#096dd9\",\n      },\n      refresh: true,\n    };\n  }\n\n  public getEvents() {\n    return {\n      beforepaint: \"updateViewport\",\n      beforeanimate: \"disableRefresh\",\n      afteranimate: \"enableRefresh\",\n      viewportchange: \"disableOneRefresh\",\n    };\n  }\n\n  // 若是正在进行动画，不刷新缩略图\n  protected disableRefresh() {\n    this.set(\"refresh\", false);\n  }\n\n  protected enableRefresh() {\n    this.set(\"refresh\", true);\n    this.updateCanvas();\n  }\n\n  protected disableOneRefresh() {\n    this.set(\"viewportChange\", true);\n  }\n\n  private initViewport() {\n    const cfgs: MiniMapConfig = this._cfgs as MiniMapConfig;\n    const { size, graph } = cfgs;\n    if (this.destroyed) return;\n\n    // viewport 就是minimap的缩略图 拖拽方框  小程序模式下 不能使用createDom 使用createUi替代\n    const handleUI = this.get(\"container\").query(\".viewport\");\n\n    // 计算拖拽水平方向距离\n    let x = 0;\n    // 计算拖拽垂直方向距离\n    let y = 0;\n    // 是否在拖拽minimap的视口\n    let dragging = false;\n    // 缓存viewport当前对于画布的x\n    let left = 0;\n    // 缓存viewport当前对于画布的y\n    let top = 0;\n    // 缓存viewport当前宽度\n    let width = 0;\n    // 缓存viewport当前高度\n    let height = 0;\n    let ratio = 0;\n    let zoom = 0;\n\n    // 拖拽start事件\n    handleUI.on(\"panstart\", (e: GraphEvent) => {\n      cfgs.refresh = false;\n\n      // 如果视口已经最大了，不需要拖拽\n      left = parseInt(handleUI.getStyle(\"left\"), 10);\n      top = parseInt(handleUI.getStyle(\"top\"), 10);\n      width = parseInt(handleUI.getStyle(\"width\"), 10);\n      height = parseInt(handleUI.getStyle(\"height\"), 10);\n\n      if (width > size[0] || height > size[1]) {\n        return;\n      }\n\n      zoom = graph!.getZoom();\n      ratio = this.get(\"ratio\");\n\n      dragging = true;\n\n      x = e.x;\n      y = e.y;\n    });\n\n    handleUI.on(\n      \"panmove\",\n      (e: GraphEvent) => {\n        if (!dragging || isNil(e.x) || isNil(e.y)) {\n          return;\n        }\n\n        let dx = x - e.x;\n        let dy = y - e.y;\n\n        // 若视口移动到最左边或最右边了,仅移动到边界\n        if (left - dx < 0 || left - dx + width >= size[0]) {\n          dx = 0;\n        }\n\n        // 若视口移动到最上或最下边了，仅移动到边界\n        if (top - dy < 0 || top - dy + height >= size[1]) {\n          dy = 0;\n        }\n\n        left -= dx;\n        top -= dy;\n\n        // graph 移动需要偏移量 dx/dy * 缩放比例才会得到正确的移动距离\n        graph!.translate((dx * zoom) / ratio, (dy * zoom) / ratio);\n\n        x = e.x;\n        y = e.y;\n      },\n      false,\n    );\n\n    handleUI.on(\n      \"panend\",\n      () => {\n        dragging = false;\n        cfgs.refresh = true;\n      },\n      false,\n    );\n\n    this.set(\"viewport\", handleUI); // 这里viewport的 key 先保留，下面继续使用\n  }\n\n  /**\n   * 更新 viewport 视图\n   */\n  private updateViewport() {\n    if (this.destroyed) return;\n    const ratio: number = this.get(\"ratio\");\n    const totaldx: number = this.get(\"totaldx\");\n    const totaldy: number = this.get(\"totaldy\");\n    const graph: IGraph = this.get(\"graph\");\n    const size: number[] = this.get(\"size\");\n    const graphWidth = graph.get(\"width\");\n    const graphHeight = graph.get(\"height\");\n    const topLeft: Point = graph.getPointByCanvas(0, 0);\n    const bottomRight: Point = graph.getPointByCanvas(graphWidth, graphHeight);\n    const viewport = this.get(\"viewport\");\n\n    // viewport宽高,左上角点的计算\n    let width = (bottomRight.x - topLeft.x) * ratio;\n    let height = (bottomRight.y - topLeft.y) * ratio;\n\n    let left = topLeft.x * ratio + totaldx;\n    let top = topLeft.y * ratio + totaldy;\n\n    const right = left + width;\n    const bottom = top + height;\n\n    if (left < 0) {\n      width += left;\n      left = 0;\n    }\n    if (right >= size[0]) {\n      width = width - (right - size[0]);\n    }\n    if (top < 0) {\n      height += top;\n      top = 0;\n    }\n    if (bottom > size[1]) {\n      height = height - (bottom - size[1]);\n    }\n\n    // 缓存目前缩放比，在移动 minimap 视窗时就不用再计算大图的移动量\n    this.set(\"ratio\", ratio);\n\n    if (viewport) {\n      const borderWidth = viewport.getStyle(\"borderWidth\");\n      if (Math.floor(width) >= borderWidth * 2) {\n        viewport.setStyle(\"left\", left);\n        viewport.setStyle(\"width\", width);\n      }\n      if (Math.floor(height) >= borderWidth * 2) {\n        viewport.setStyle(\"top\", top);\n        viewport.setStyle(\"height\", height);\n      }\n    }\n  }\n\n  /**\n   * 将主图上的图形完全复制到小图\n   */\n  private updateGraphShapes() {\n    const { graph } = this._cfgs;\n    const graphGroup = graph!.get(\"group\");\n    if (graphGroup.destroyed) return;\n    const clonedGroup = graphGroup.clone();\n\n    const groupCanvas = this.get(\"groupCanvas\");\n\n    clonedGroup.resetMatrix();\n\n    groupCanvas.clear();\n\n    groupCanvas.add(clonedGroup);\n  }\n\n  // 仅在 minimap 上绘制 keyShape\n  // FIXME 如果用户自定义绘制了其他内容，minimap上就无法画出\n  private updateKeyShapes() {\n    const { graph } = this._cfgs;\n\n    const group = this.get(\"groupCanvas\"); // canvas.get('children')[0] || canvas.addGroup();\n\n    each(graph!.getEdges(), (edge) => {\n      this.updateOneEdgeKeyShape(edge, group);\n    });\n    each(graph!.getNodes(), (node) => {\n      this.updateOneNodeKeyShape(node, group);\n    });\n    const combos = graph!.getCombos();\n    if (combos && combos.length) {\n      const comboGroup =\n        group.find((e) => e.get(\"name\") === \"comboGroup\") ||\n        group.addGroup({\n          name: \"comboGroup\",\n        });\n      setTimeout(() => {\n        if (this.destroyed) return;\n        each(combos, (combo) => {\n          this.updateOneComboKeyShape(combo, comboGroup);\n        });\n        comboGroup?.sort();\n        comboGroup?.toBack();\n        this.updateCanvas();\n      }, 250);\n    }\n    this.clearDestroyedShapes();\n  }\n\n  /**\n   * 增加/更新单个元素的 keyShape\n   * @param item ICombo 实例\n   */\n  private updateOneComboKeyShape(item, comboGroup) {\n    if (this.destroyed) return;\n    const itemMap = this.get(\"itemMap\") || {};\n\n    // 差量更新 minimap 上的一个节点，对应主图的 item\n    let mappedItem = itemMap[item.get(\"id\")];\n    const bbox = item.getBBox(); // 计算了节点父组矩阵的 bbox\n    const cKeyShape = item.get(\"keyShape\").clone();\n    const keyShapeStyle = cKeyShape.attr();\n    let attrs: any = {\n      x: bbox.centerX,\n      y: bbox.centerY,\n    };\n    if (!mappedItem) {\n      mappedItem = cKeyShape;\n      comboGroup.add(mappedItem);\n    } else {\n      attrs = Object.assign(keyShapeStyle, attrs);\n    }\n    const shapeType = mappedItem.get(\"type\");\n    if (shapeType === \"rect\" || shapeType === \"image\") {\n      attrs.x = bbox.minX;\n      attrs.y = bbox.minY;\n    }\n    mappedItem.attr(attrs);\n    if (!item.isVisible()) mappedItem.hide();\n    else mappedItem.show();\n    mappedItem.exist = true;\n    const zIndex = item.getModel().depth;\n    if (!isNaN(zIndex)) mappedItem.set(\"zIndex\", zIndex);\n    itemMap[item.get(\"id\")] = mappedItem;\n    this.set(\"itemMap\", itemMap);\n  }\n\n  /**\n   * 增加/更新单个元素的 keyShape\n   * @param item INode 实例\n   */\n  private updateOneNodeKeyShape(item, group) {\n    const itemMap = this.get(\"itemMap\") || {};\n\n    // 差量更新 minimap 上的一个节点，对应主图的 item\n    let mappedItem = itemMap[item.get(\"id\")];\n    const bbox = item.getBBox(); // 计算了节点父组矩阵的 bbox\n    const cKeyShape = item.get(\"keyShape\").clone();\n    const keyShapeStyle = cKeyShape.attr();\n    let attrs: any = {\n      x: bbox.centerX,\n      y: bbox.centerY,\n    };\n    if (!mappedItem) {\n      mappedItem = cKeyShape;\n      group.add(mappedItem);\n    } else {\n      attrs = Object.assign(keyShapeStyle, attrs);\n    }\n    const shapeType = mappedItem.get(\"type\");\n    if (shapeType === \"rect\" || shapeType === \"image\") {\n      attrs.x = bbox.minX;\n      attrs.y = bbox.minY;\n    }\n    mappedItem.attr(attrs);\n    if (!item.isVisible()) mappedItem.hide();\n    else mappedItem.show();\n    mappedItem.exist = true;\n    const zIndex = item.getModel().depth;\n    if (!isNaN(zIndex)) mappedItem.set(\"zIndex\", zIndex);\n    itemMap[item.get(\"id\")] = mappedItem;\n    this.set(\"itemMap\", itemMap);\n  }\n\n  /**\n   * Minimap 中展示自定义的rect，支持用户自定义样式和节点大小\n   */\n  private updateDelegateShapes() {\n    const { graph } = this._cfgs;\n\n    const group = this.get(\"groupCanvas\");\n\n    // 差量更新 minimap 上的节点和边\n    each(graph!.getEdges(), (edge) => {\n      this.updateOneEdgeKeyShape(edge, group);\n    });\n    each(graph!.getNodes(), (node) => {\n      this.updateOneNodeDelegateShape(node, group);\n    });\n    const combos = graph!.getCombos();\n    if (combos && combos.length) {\n      const comboGroup =\n        group.find((e) => e.get(\"name\") === \"comboGroup\") ||\n        group.addGroup({\n          name: \"comboGroup\",\n        });\n      setTimeout(() => {\n        if (this.destroyed) return;\n        each(combos, (combo) => {\n          this.updateOneComboKeyShape(combo, comboGroup);\n        });\n        comboGroup?.sort();\n        comboGroup?.toBack();\n        this.updateCanvas();\n      }, 250);\n    }\n    this.clearDestroyedShapes();\n  }\n\n  private clearDestroyedShapes() {\n    const itemMap = this.get(\"itemMap\") || {};\n    const keys = Object.keys(itemMap);\n    if (!keys || keys.length === 0) return;\n    for (let i = keys.length - 1; i >= 0; i--) {\n      const shape = itemMap[keys[i]];\n      const exist = shape.exist;\n      shape.exist = false;\n      if (!exist) {\n        shape.remove();\n        delete itemMap[keys[i]];\n      }\n    }\n  }\n\n  /**\n   * 设置只显示 edge 的 keyShape\n   * @param item IEdge 实例\n   */\n  private updateOneEdgeKeyShape(item, group) {\n    const itemMap = this.get(\"itemMap\") || {};\n    // 差量更新 minimap 上的一个节点，对应主图的 item\n    let mappedItem = itemMap[item.get(\"id\")];\n    if (mappedItem) {\n      const path = item.get(\"keyShape\").attr(\"path\");\n      mappedItem.attr(\"path\", path);\n    } else {\n      mappedItem = item.get(\"keyShape\").clone();\n      group.add(mappedItem);\n    }\n    if (!item.isVisible()) mappedItem.hide();\n    else mappedItem.show();\n    mappedItem.exist = true;\n    itemMap[item.get(\"id\")] = mappedItem;\n    this.set(\"itemMap\", itemMap);\n  }\n\n  /**\n   * Minimap 中展示自定义的 rect，支持用户自定义样式和节点大小\n   * 增加/更新单个元素\n   * @param item INode 实例\n   */\n  private updateOneNodeDelegateShape(item, group) {\n    const delegateStyle = this.get(\"delegateStyle\");\n    const itemMap = this.get(\"itemMap\") || {};\n\n    // 差量更新 minimap 上的一个节点，对应主图的 item\n    let mappedItem = itemMap[item.get(\"id\")];\n    const bbox = item.getBBox(); // 计算了节点父组矩阵的 bbox\n    if (mappedItem) {\n      const attrs = {\n        x: bbox.minX,\n        y: bbox.minY,\n        width: bbox.width,\n        height: bbox.height,\n      };\n      mappedItem.attr(attrs);\n    } else {\n      mappedItem = group.addShape(\"rect\", {\n        attrs: {\n          x: bbox.minX,\n          y: bbox.minY,\n          width: bbox.width,\n          height: bbox.height,\n          ...delegateStyle,\n        },\n        name: \"minimap-node-shape\",\n      });\n    }\n    if (!item.isVisible()) mappedItem.hide();\n    else mappedItem.show();\n    mappedItem.exist = true;\n    itemMap[item.get(\"id\")] = mappedItem;\n    this.set(\"itemMap\", itemMap);\n  }\n\n  /**\n   * 主图更新的监听函数，使用 debounce 减少渲染频率\n   * e.g. 拖拽节点只会在松手后的 100ms 后执行 updateCanvas\n   * e.g. render 时大量 addItem 也只会执行一次 updateCanvas\n   */\n  private handleUpdateCanvas = debounce(\n    (event) => {\n      const self = this;\n      if (self.destroyed) return;\n      self.updateCanvas();\n    },\n    100,\n    false,\n  );\n\n  public init() {\n    this.get(\"graph\").on(\"afterupdateitem\", this.handleUpdateCanvas);\n    this.get(\"graph\").on(\"afteritemstatechange\", this.handleUpdateCanvas);\n    this.get(\"graph\").on(\"afteradditem\", this.handleUpdateCanvas);\n    this.get(\"graph\").on(\"afterremoveitem\", this.handleUpdateCanvas);\n    this.get(\"graph\").on(\"afterrender\", this.handleUpdateCanvas);\n    this.get(\"graph\").on(\"afterlayout\", this.handleUpdateCanvas);\n\n    setTimeout(() => {\n      this.initContainer();\n    });\n  }\n\n  /**\n   * 初始化 Minimap 的容器\n   */\n  public initContainer() {\n    const self = this;\n    const graph: IGraph = self.get(\"graph\");\n    const size: number[] = self.get(\"size\");\n    const className: string = self.get(\"className\");\n    const viewportClassName: string = self.get(\"viewportClassName\");\n    const getCss = self.get(\"getCss\");\n\n    const containerHtml = `\n    <div class='f6-minimap ${className}'>\n      <div class=\"f6-minimap-container\"></div>\n      <div class=\"viewport ${viewportClassName}\"></div>\n    </div>`;\n\n    const containerCss = `\n      root {\n        width: ${graph.getWidth()};\n        height: ${graph.getHeight()};\n        opacity: 0;\n        pointer-events: none;\n      }\n      .f6-minimap{ \n        position: absolute;\n        left: 0;\n        bottom: 0;\n        width: ${size[0]}; height: ${size[1]};\n      } \n      .f6-minimap-container{\n        position: relative;\n        background: rgba(0,0,0,0);\n        width: ${size[0]}; height: ${size[1]};\n      }\n      .viewport{\n        position: absolute;\n        border: 3 solid blue;\n        width: 100;\n        height: 100;\n        background: rgba(0,0,0,0);\n        z-index: 1000;\n      }\n      ${getCss?.() ?? \"\"}\n    `;\n    const uiGroup = graph.get(\"uiGroup\");\n\n    const miniMapContainerUI = createUI(containerHtml, containerCss, uiGroup);\n\n    const background = miniMapContainerUI.query(\".f6-minimap-container\");\n    const group = background.gNode;\n    const canvasGroup = group.addGroup();\n\n    this.set(\"groupCanvas\", canvasGroup);\n\n    this.set(\"container\", miniMapContainerUI);\n\n    self.updateCanvas();\n    this.initViewport();\n  }\n\n  public updateCanvas() {\n    if (this.destroyed) return;\n    // 如果是在动画，则不刷新视图\n    const isRefresh: boolean = this.get(\"refresh\");\n    if (!isRefresh) {\n      return;\n    }\n    const graph: IGraph = this.get(\"graph\");\n    if (graph.get(\"destroyed\")) {\n      return;\n    }\n\n    // 如果是视口变换，也不刷新视图，但是需要重置视口大小和位置\n    if (this.get(\"viewportChange\")) {\n      this.set(\"viewportChange\", false);\n      this.updateViewport();\n    }\n\n    const size: number[] = this.get(\"size\"); // 用户定义的 minimap size\n    const type: string = this.get(\"type\"); // minimap 的类型\n    const padding: number = this.get(\"padding\"); // 用户额定义的 minimap 的 padding\n\n    switch (type) {\n      case DEFAULT_MODE:\n        this.updateGraphShapes();\n        break;\n      case KEYSHAPE_MODE:\n        this.updateKeyShapes();\n        break;\n      case DELEGATE_MODE:\n        // 得到的节点直接带有 x 和 y，每个节点不存在父 group，即每个节点位置不由父 group 控制\n        this.updateDelegateShapes();\n        break;\n      default:\n        break;\n    }\n\n    const group = this.get(\"groupCanvas\"); // canvas.get('children')[0];\n    if (!group) return;\n\n    group.resetMatrix();\n    // 重新计算所有子节点的matrix，从group开始重新计算totalmatrix，重置传递下来的matrix，保证计算canvasBBox的时候，相对左上角\n    group.applyMatrix([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n    const bbox = group.getCanvasBBox();\n\n    const graphBBox = graph.get(\"group\").getCanvasBBox(); // 主图的 bbox\n    const graphZoom = graph.getZoom() || 1;\n    let width = graphBBox.width / graphZoom;\n    let height = graphBBox.height / graphZoom;\n\n    if (Number.isFinite(bbox.width)) {\n      // 刷新后bbox可能会变，需要重置画布矩阵以缩放到合适的大小\n      width = max(bbox.width, width);\n      height = max(bbox.height, height);\n    }\n\n    width += 2 * padding;\n    height += 2 * padding;\n\n    const ratio = Math.min(size[0] / width, size[1] / height);\n\n    let matrix: Matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n    let minX = 0;\n    let minY = 0;\n    // 平移到左上角\n    if (Number.isFinite(bbox.minX)) {\n      minX = -bbox.minX;\n    }\n    if (Number.isFinite(bbox.minY)) {\n      minY = -bbox.minY;\n    }\n\n    // 缩放到适合视口后, 平移到画布中心\n    const dx = (size[0] - (width - 2 * padding) * ratio) / 2;\n    const dy = (size[1] - (height - 2 * padding) * ratio) / 2;\n\n    matrix = transform(matrix, [\n      [\"t\", minX, minY], // 平移到左上角\n      [\"s\", ratio, ratio], // 缩放到正好撑着 minimap\n      [\"t\", dx, dy], // 移动到画布中心\n    ]);\n    group.setMatrix(matrix);\n\n    // 更新minimap视口\n    this.set(\"ratio\", ratio);\n    this.set(\"totaldx\", dx + minX * ratio);\n    this.set(\"totaldy\", dy + minY * ratio);\n    this.set(\"dx\", dx);\n    this.set(\"dy\", dy);\n    this.updateViewport();\n  }\n\n  /**\n   * 获取minimap的画布\n   * @return {GCanvas} G的canvas实例\n   */\n  public getCanvas(): GCanvas {\n    return this.get(\"canvas\");\n  }\n\n  /**\n   * 获取minimap的窗口\n   * @return {HTMLElement} 窗口的dom实例\n   */\n  public getViewport(): HTMLElement {\n    return this.get(\"viewport\");\n  }\n\n  /**\n   * 获取minimap的容器dom\n   * @return {HTMLElement} dom\n   */\n  public getContainer(): HTMLElement {\n    return this.get(\"container\");\n  }\n\n  public destroy() {\n    this.get(\"container\")?.remove();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/snap-line/index.ts",
    "content": "import { each, mix } from \"@antv/util\";\nimport { IAbstractGraph as IGraph, ShapeStyle, Util } from \"@antv/f6-core\";\nimport Base, { IPluginBaseConfig } from \"../base\";\n\nconst { pointLineDistance } = Util;\n\ninterface SnapLineConfig extends IPluginBaseConfig {\n  // 辅助线的样式\n  line?: ShapeStyle;\n  // 辅助线类型，true 表示双向\n  itemAlignType?: boolean | \"horizontal\" | \"vertical\" | \"center\";\n}\n\n// 对齐线样式\nconst alignLineStyle = {\n  stroke: \"#FA8C16\",\n  lineWidth: 1,\n};\n\nexport default class SnapLine extends Base {\n  constructor(props?: SnapLineConfig) {\n    super(props);\n  }\n\n  public getDefaultCfgs() {\n    return {\n      line: alignLineStyle,\n      /**\n       * item align type\n       * @type {String|True|False}\n       */\n      itemAlignType: \"center\", // true || false || 'horizontal' || 'vertical' || 'center',\n\n      /**\n       * tolerance to item force align\n       * @type {String|True|False}\n       */\n      tolerance: 5,\n      horizontalLines: {},\n      verticalLines: {},\n      alignLines: [],\n    };\n  }\n\n  public init() {}\n\n  // class-methods-use-this\n  public getEvents() {\n    return {\n      \"node:dragstart\": \"onDragStart\",\n      \"node:drag\": \"onDrag\",\n      \"node:dragend\": \"onDragEnd\",\n    };\n  }\n\n  onDragStart() {\n    this.initBoxLine();\n  }\n\n  onDrag(e) {\n    const { item } = e;\n    // 计算辅助线位置,拖动过程中更新辅助线\n    const delegateShape = item.get(\"delegateShape\") || item;\n\n    const bbox = delegateShape.getBBox();\n    const model = item.getModel();\n    const dx = model.x - bbox.x;\n    const dy = model.y - bbox.y;\n\n    this.show(\n      {\n        x: bbox.minX + dx,\n        y: bbox.minY + dy,\n      },\n      {\n        width: bbox.width,\n        height: bbox.height,\n      },\n    );\n  }\n\n  onDragEnd() {\n    // 拖动结束时候删除辅助线\n    this.destory();\n  }\n\n  /**\n   * 每次开始拖动之前，计算出所有节点在水平和垂直方向上，左中右三条中线，并缓存起来\n   *\n   * @param {object} item Node节点\n   * @memberof AlignLine\n   */\n  initBoxLine() {\n    const { horizontalLines, verticalLines, itemAlignType } = this._cfgs;\n\n    const graph: IGraph = this.get(\"graph\");\n    const nodes = graph.getNodes();\n    nodes.forEach((item) => {\n      const bbox = item.getBBox();\n      const nodeId = item.get(\"id\");\n      // 设置水平方向辅助线\n      if (itemAlignType === true || itemAlignType === \"horizontal\") {\n        // tltr: top left top right\n        // lcrc: left center right center\n        // blbr: bottom left bottom right\n        horizontalLines[`${nodeId}tltr`] = [\n          bbox.minX,\n          bbox.minY,\n          bbox.maxX,\n          bbox.minY,\n          item,\n        ];\n        horizontalLines[`${nodeId}lcrc`] = [\n          bbox.minX,\n          bbox.centerY,\n          bbox.maxX,\n          bbox.centerY,\n          item,\n        ];\n        horizontalLines[`${nodeId}blbr`] = [\n          bbox.minX,\n          bbox.maxY,\n          bbox.maxX,\n          bbox.maxY,\n          item,\n        ];\n      } else if (itemAlignType === \"center\") {\n        horizontalLines[`${nodeId}lcrc`] = [\n          bbox.minX,\n          bbox.centerY,\n          bbox.maxX,\n          bbox.centerY,\n          item,\n        ];\n      }\n\n      // 设置垂直方向辅助线\n      if (itemAlignType === true || itemAlignType === \"vertical\") {\n        // tlbl: top left bottom left\n        // tcbc: top center bottom center\n        // trbr: top right bottom right\n        verticalLines[`${nodeId}tlbl`] = [\n          bbox.minX,\n          bbox.minY,\n          bbox.minX,\n          bbox.maxY,\n          item,\n        ];\n        verticalLines[`${nodeId}tcbc`] = [\n          bbox.centerX,\n          bbox.minY,\n          bbox.centerX,\n          bbox.maxY,\n          item,\n        ];\n        verticalLines[`${nodeId}trbr`] = [\n          bbox.maxX,\n          bbox.minY,\n          bbox.maxX,\n          bbox.maxY,\n          item,\n        ];\n      } else if (itemAlignType === \"center\") {\n        verticalLines[`${nodeId}tcbc`] = [\n          bbox.centerX,\n          bbox.minY,\n          bbox.centerX,\n          bbox.maxY,\n          item,\n        ];\n      }\n    });\n  }\n\n  /**\n   * 显示AlignLine\n   *\n   * @param {object} point 起始点\n   * @param {object} bbox BBox\n   * @returns\n   * @memberof AlignLine\n   */\n  show(point, bbox) {\n    const originPoint = mix({}, point);\n    this.itemAlign(point, bbox, originPoint);\n    return point;\n  }\n\n  /**\n   * 拖动拖出中添加辅助线\n   *\n   * @param {object} point 起始点\n   * @param {object} bbox 代理形状的bbox\n   * @param {object} originPoint 原始点，同point\n   * @memberof AlignLine\n   */\n  private itemAlign(point, bbox, originPoint) {\n    const { horizontalLines, verticalLines, tolerance } = this._cfgs;\n\n    const tc = {\n      x: originPoint.x + bbox.width / 2,\n      y: originPoint.y,\n    };\n    const cc = {\n      x: originPoint.x + bbox.width / 2,\n      y: originPoint.y + bbox.height / 2,\n    };\n    const bc = {\n      x: originPoint.x + bbox.width / 2,\n      y: originPoint.y + bbox.height,\n    };\n    const lc = {\n      x: originPoint.x,\n      y: originPoint.y + bbox.height / 2,\n    };\n    const rc = {\n      x: originPoint.x + bbox.width,\n      y: originPoint.y + bbox.height / 2,\n    };\n\n    const horizontalDis = [];\n    const verticalDis = [];\n    let alignCfg = null;\n    this.clearAlignLine();\n\n    each(horizontalLines, (line) => {\n      if (line[4].isVisible) {\n        horizontalDis.push(this.getLineDisObject(line, tc));\n        horizontalDis.push(this.getLineDisObject(line, cc));\n        horizontalDis.push(this.getLineDisObject(line, bc));\n      }\n    });\n\n    each(verticalLines, (line) => {\n      if (line[4].isVisible) {\n        verticalDis.push(this.getLineDisObject(line, lc));\n        verticalDis.push(this.getLineDisObject(line, cc));\n        verticalDis.push(this.getLineDisObject(line, rc));\n      }\n    });\n\n    horizontalDis.sort((a, b) => {\n      return a.dis - b.dis;\n    });\n    verticalDis.sort((a, b) => {\n      return a.dis - b.dis;\n    });\n\n    if (horizontalDis.length !== 0 && horizontalDis[0].dis < tolerance) {\n      point.y =\n        horizontalDis[0].line[1] - horizontalDis[0].point.y + originPoint.y;\n      alignCfg = {\n        type: \"item\",\n        horizontals: [horizontalDis[0]],\n      };\n      for (let i = 1; i < 3; i++) {\n        if (horizontalDis[0].dis === horizontalDis[i].dis) {\n          alignCfg.horizontals.push(horizontalDis[i]);\n        }\n      }\n    }\n    if (verticalDis.length !== 0 && verticalDis[0].dis < tolerance) {\n      point.x = verticalDis[0].line[0] - verticalDis[0].point.x + originPoint.x;\n      if (!alignCfg) {\n        alignCfg = {\n          type: \"item\",\n          verticals: [verticalDis[0]],\n        };\n      } else {\n        alignCfg.verticals = [verticalDis[0]];\n      }\n      for (let i = 1; i < 3; i++) {\n        if (verticalDis[0].dis === verticalDis[i].dis) {\n          alignCfg.verticals.push(verticalDis[i]);\n        }\n      }\n    }\n    if (alignCfg) {\n      alignCfg.bbox = bbox;\n      this.addAlignLine(alignCfg);\n    }\n  }\n\n  /**\n   * 根据配置项添加辅助线\n   *\n   * @param {object} cfg\n   * @memberof AlignLine\n   */\n  private addAlignLine(cfg) {\n    const { bbox, type, horizontals, verticals } = cfg;\n    const { line: lineStyle, alignLines } = this._cfgs;\n    const graph: IGraph = this.get(\"graph\");\n    const group = graph.get(\"group\");\n\n    if (type === \"item\") {\n      if (horizontals) {\n        each(horizontals, (horizontal) => {\n          const { line: refLine, point: refPoint } = horizontal;\n          const lineCenterX = (refLine[0] + refLine[2]) / 2;\n          let x1;\n          let x2;\n          if (refPoint.x < lineCenterX) {\n            x1 = refPoint.x - bbox.width / 2;\n            x2 = Math.max(refLine[0], refLine[2]);\n          } else {\n            x1 = refPoint.x + bbox.width / 2;\n            x2 = Math.min(refLine[0], refLine[2]);\n          }\n\n          const lineAttrs = mix(\n            {\n              x1,\n              y1: refLine[1],\n              x2,\n              y2: refLine[1],\n            },\n            lineStyle,\n          );\n\n          const line = group.addShape(\"line\", {\n            attrs: lineAttrs,\n            capture: false,\n          });\n          alignLines.push(line);\n        });\n      }\n\n      if (verticals) {\n        each(verticals, (vertical) => {\n          const { line: refLine, point: refPoint } = vertical;\n          const lineCenterY = (refLine[1] + refLine[3]) / 2;\n          let y1;\n          let y2;\n          if (refPoint.y < lineCenterY) {\n            y1 = refPoint.y - bbox.height / 2;\n            y2 = Math.max(refLine[1], refLine[3]);\n          } else {\n            y1 = refPoint.y + bbox.height / 2;\n            y2 = Math.min(refLine[1], refLine[3]);\n          }\n\n          const lineAtts = mix(\n            {\n              x1: refLine[0],\n              y1,\n              x2: refLine[0],\n              y2,\n            },\n            lineStyle,\n          );\n\n          const line = group.addShape(\"line\", {\n            attrs: lineAtts,\n            capture: false,\n          });\n\n          alignLines.push(line);\n        });\n      }\n    }\n  }\n\n  /**\n   * 获取点到线的距离\n   *\n   * @param {array} line [x1, y1, x2, y2] 线的四个点\n   * @param {object} point 点的x和y坐标点 {x, y}\n   * @returns\n   * @memberof AlignLine\n   */\n  private getLineDisObject(line, point) {\n    return {\n      line,\n      point,\n      dis: pointLineDistance(line, point),\n    };\n  }\n\n  public getContainer(): HTMLDivElement {\n    return this.get(\"container\");\n  }\n\n  /**\n   * 拖动过程中，清楚上次绘制的线\n   *\n   * @memberof AlignLine\n   */\n  clearAlignLine() {\n    const { alignLines } = this._cfgs;\n    each(alignLines, (line) => {\n      line.remove();\n    });\n    alignLines.length = 0;\n  }\n\n  /**\n   * 拖动结束时候，情况缓存的节点的辅助线，同时删除绘制的线\n   *\n   * @memberof AlignLine\n   */\n  public destory() {\n    const { horizontalLines, verticalLines } = this._cfgs;\n\n    const graph: IGraph = this.get(\"graph\");\n    const nodes = graph.getNodes();\n    nodes.forEach((node) => {\n      const itemId = node.get(\"id\");\n      delete horizontalLines[`${itemId}tltr`];\n      delete horizontalLines[`${itemId}lcrc`];\n      delete horizontalLines[`${itemId}blbr`];\n      delete verticalLines[`${itemId}tlbl`];\n      delete verticalLines[`${itemId}tcbc`];\n      delete verticalLines[`${itemId}trbr`];\n    });\n\n    this.clearAlignLine();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/dispatcher.ts",
    "content": "let events = {};\nexport function dispatch(key, ...args) {\n  const fns = events[key];\n  fns?.forEach((fn) => {\n    fn.apply(null, args);\n  });\n}\n\nexport function subscribe(key, fn) {\n  events[key] = [...(events[key] || []), fn];\n}\n\nexport function unsubscribe(key, fn) {\n  if (!fn) {\n    delete events[key];\n    return;\n  }\n  if (events[key]) {\n    const index = events[key]?.indexOf(fn);\n    index > -1 && events[key].splice(index, 1);\n  }\n}\n\nexport function unsubscribeAll() {\n  events = {};\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/index.ts",
    "content": "import { createSimpleTimeBarUI, createTickUI, createTrendUI } from \"./ui\";\nimport PluginBase, { IPluginBaseConfig } from \"../base\";\nimport { throttle } from \"@antv/util\";\nimport { IAbstractGraph, TimeBarType } from \"@antv/f6-core\";\nimport { subscribe, unsubscribeAll } from \"./dispatcher\";\nimport { SLIDER_END, SLIDER_START } from \"./utils/const\";\nimport { SliderOption, SliderTick, TrendConfig } from \"./type/slider\";\nimport { TimeBarTickOption } from \"./type/tick\";\nimport { ControllerCfg } from \"./type/control-bar\";\n\ninterface TimeBarConfig extends IPluginBaseConfig {\n  // position size\n  readonly width?: number;\n  readonly padding?: number;\n\n  readonly type?: TimeBarType;\n  // 趋势图配置项\n  readonly trend?: TrendConfig;\n  // 滑块、及前后背景的配置\n  readonly slider?: SliderOption;\n\n  // tick 类型配置项，或 trend 和 simple 类型的时间刻度配置项\n  readonly tick?: TimeBarTickOption;\n\n  // 控制按钮\n  readonly controllerCfg?: ControllerCfg;\n\n  readonly sliderTick?: SliderTick;\n\n  // 是否过滤边，若为 true，则需要配合边数据上有 date 字段，过滤节点同时将不满足 date 在选中范围内的边也过滤出去\n  // 若为 false，则仅过滤节点以及两端节点都被过滤出去的边\n  readonly filterEdge?: boolean;\n\n  rangeChange?: (\n    graph: IAbstractGraph,\n    minValue: string,\n    maxValue: string,\n  ) => void;\n}\nexport default class TimeBar extends PluginBase {\n  private cacheGraphData;\n\n  constructor(cfg: TimeBarConfig) {\n    super(cfg);\n  }\n\n  public getDefaultCfgs(): TimeBarConfig {\n    return {\n      className: \"f6-component-timebar\",\n      padding: 10,\n      type: \"trend\",\n      data: [],\n      trend: {\n        smooth: true,\n      },\n      controllerCfg: {\n        speed: 1,\n      },\n      slider: {\n        start: SLIDER_START,\n        end: SLIDER_END,\n      },\n      tick: {\n        start: SLIDER_START,\n        end: SLIDER_END,\n      },\n      filterEdge: false,\n    };\n  }\n\n  init() {\n    setTimeout(() => {\n      this.render();\n      this.initEvent();\n    });\n  }\n\n  filterData(evt) {\n    const { value } = evt;\n    let trendData = this.get(\"data\");\n    if (!trendData || trendData.length === 0) {\n      console.warn(\"请配置 TimeBar 组件的数据\");\n      return;\n    }\n    const rangeChange = this.get(\"rangeChange\");\n    const graph = this.get(\"graph\");\n\n    let min = Math.round(trendData.length * value[0]);\n    let max = Math.round(trendData.length * value[1]);\n    max = max >= trendData.length ? trendData.length - 1 : max;\n    min = min >= trendData.length ? trendData.length - 1 : min;\n\n    const tickLabelFormatter = this._cfgs.tick?.tickLabelFormatter;\n    const minText = tickLabelFormatter\n      ? tickLabelFormatter(trendData[min])\n      : trendData[min].date;\n    const maxText = tickLabelFormatter\n      ? tickLabelFormatter(trendData[max])\n      : trendData[max].date;\n\n    if (rangeChange) {\n      rangeChange(graph, minText, maxText);\n    } else {\n      // 自动过滤数据，并渲染 graph\n      if (\n        !this.cacheGraphData ||\n        (this.cacheGraphData.nodes && this.cacheGraphData.nodes.length === 0)\n      ) {\n        this.cacheGraphData = graph.get(\"data\"); // graph.save() as GraphData;\n      }\n\n      // 过滤不在 min 和 max 范围内的节点\n      const filterData = this.cacheGraphData.nodes.filter(\n        (d: any) =>\n          d.date >= trendData[min].date && d.date <= trendData[max].date,\n      );\n\n      const nodeIds = filterData.map((node) => node.id);\n\n      let fileterEdges = [];\n      if (this.cacheGraphData.edges) {\n        // 过滤 source 或 target 不在 min 和 max 范围内的边\n        fileterEdges = this.cacheGraphData.edges.filter(\n          (edge) =>\n            nodeIds.includes(edge.source) && nodeIds.includes(edge.target),\n        );\n\n        if (this.get(\"filterEdge\")) {\n          fileterEdges = fileterEdges.filter(\n            (edge) =>\n              edge.date >= trendData[min].date &&\n              edge.date <= trendData[max].date,\n          );\n        }\n      }\n\n      graph.changeData({\n        nodes: filterData,\n        edges: fileterEdges,\n      });\n    }\n  }\n\n  private render() {\n    const {\n      data,\n      width,\n      padding,\n      type,\n      trend,\n      slider,\n      controllerCfg,\n      tick,\n      sliderTick,\n    } = this._cfgs;\n    const graph = this.get(\"graph\");\n    const group = graph.get(\"uiGroup\");\n    let timebar = null;\n    switch (type) {\n      case \"trend\":\n        timebar = createTrendUI({\n          group,\n          width,\n          padding,\n          data,\n          trend,\n          slider,\n          controllerCfg,\n          sliderTick,\n        });\n        break;\n\n      case \"tick\":\n        timebar = createTickUI({\n          group,\n          width,\n          padding,\n          tick,\n          data,\n          controllerCfg,\n        });\n        break;\n      case \"simple\":\n        timebar = createSimpleTimeBarUI({\n          group,\n          width,\n          padding,\n          slider,\n          data,\n          controllerCfg,\n          sliderTick,\n        });\n        break;\n    }\n    // 移动到左下角\n    const graphHeight = graph.get(\"height\");\n    group.translate(0, graphHeight - timebar.height);\n  }\n\n  private initEvent() {\n    subscribe(\n      \"RANGE_CHANGE\",\n      throttle(this.filterData.bind(this), 200, {\n        trailing: true,\n        leading: true,\n      }),\n    );\n  }\n\n  destroy() {\n    unsubscribeAll();\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/type/control-bar.ts",
    "content": "import { ShapeStyle } from \"@antv/f6-core\";\n\nexport type ControllerCfg = Partial<{\n  readonly wrapperWidth: number;\n  readonly contentWidth: number;\n  readonly height: number;\n  /** 控制器背景的颜色和描边色 */\n  readonly fill?: string;\n  readonly stroke?: string;\n  /** 整个控制栏的字体样式，优先级低于各个子控制器的 text 内的 fontFamily */\n  readonly fontFamily?: string;\n\n  /** 控制栏缩放比例 */\n  readonly scale?: number;\n\n  /** 播放速度，1 个 tick 花费时间 */\n  readonly speed?: number;\n  /** 是否循环播放 */\n  // readonly loop?: boolean;\n  // readonly hideTimeTypeController: boolean;\n\n  /** ‘上一帧’按钮的样式，同时可以为其配置 scale、offsetX、offsetY 单独控制该控制器的缩放以及平移 */\n  readonly preBtnStyle?: ShapeStyle;\n  /** ‘下一帧’按钮的样式，同时可以为其配置 scale、offsetX、offsetY 单独控制该控制器的缩放以及平移 */\n  readonly nextBtnStyle?: ShapeStyle;\n  /** ‘播放’ 与 ‘暂停’ 按钮的样式，同时可以为其配置 scale、offsetX、offsetY 单独控制该控制器的缩放以及平移 */\n  readonly playBtnStyle?: ShapeStyle;\n\n  // /** 播放时间类型切换器单一文本时的文本，默认为‘单一时间’ */\n  // readonly timePointControllerText?: string;\n  // /** 播放时间类型切换器单一文本时的文本，默认为‘时间范围’ */\n  // readonly timeRangeControllerText?: string;\n}>;\n"
  },
  {
    "path": "packages/plugin/src/time-bar/type/slider.ts",
    "content": "import { ShapeStyle } from \"@antv/f6-core\";\n\nexport type SliderOption = Partial<{\n  readonly width?: number;\n  readonly height?: number;\n  readonly backgroundStyle?: ShapeStyle;\n  readonly foregroundStyle?: ShapeStyle;\n  // 滑块样式\n  readonly handlerStyle?: ShapeStyle;\n  readonly textStyle?: ShapeStyle;\n  // 初始位置\n  readonly start: number;\n  readonly end: number;\n}>;\n\nexport interface SliderProgressBar {\n  slider: SliderOption;\n}\n\nexport interface Interval {\n  data: number[];\n  style: ShapeStyle;\n}\n\nexport interface TrendConfig {\n  // 数据\n  readonly data?: number[];\n  // 样式\n  readonly smooth?: boolean;\n  // readonly isArea?: boolean;\n\n  readonly lineStyle?: ShapeStyle;\n  // readonly areaStyle?: ShapeStyle;\n  // readonly interval?: Interval;\n}\n\nexport interface SliderTick {\n  width?: number;\n  lineStyle?: ShapeStyle;\n  textStyle?: ShapeStyle;\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/type/tick.ts",
    "content": "import { ShapeStyle } from \"@antv/f6-core\";\nimport { TimeBarData } from \"./time-bar\";\n\nexport interface TimeBarTickOption {\n  // position size\n  readonly width?: number;\n  readonly padding?: number | string;\n  readonly tickBoxHeight?: number;\n\n  // styles\n  readonly selectedTickStyle?: ShapeStyle;\n  readonly unSelectedTickStyle?: ShapeStyle;\n  readonly tooltipBackgroundColor?: string; // todo\n\n  readonly tickLabelStyle?: ShapeStyle;\n  readonly tickLineStyle?: ShapeStyle;\n\n  readonly start?: number;\n  readonly end?: number;\n\n  // 自定义标签格式化函数\n  readonly tickLabelFormatter?: (d: any) => string | boolean;\n  // 自定义 tooltip 内容格式化函数\n  readonly tooltipFomatter?: (d: any) => string;\n}\n\nexport interface TimeBarTickContext {\n  data: TimeBarData[];\n  width: number;\n  padding: string | number;\n  selectedFill: string;\n  unSelectFill: string;\n  gap: number;\n  tickBoxHeight: number;\n  lineStyle: ShapeStyle;\n  textStyle: ShapeStyle;\n  tickWidth: number;\n  count: number;\n  start: number;\n  end: number;\n  selects: any[];\n  tickBoxs: any;\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/type/time-bar.ts",
    "content": "import { IGroup } from \"@antv/g-base\";\nimport { ControllerCfg } from \"./control-bar\";\nimport { SliderOption, SliderTick, TrendConfig } from \"./slider\";\nimport { TimeBarTickOption } from \"./tick\";\n\nexport interface TimeBarData {\n  date: number;\n  value: number;\n}\n\nexport type TimeBarType = \"trend\" | \"simple\";\n\nexport interface TrendTimeBarOption {\n  group: IGroup;\n  width?: number;\n  padding?: number;\n  data?: TimeBarData[];\n  slider?: SliderOption;\n  controllerCfg?: ControllerCfg;\n  trend: TrendConfig;\n  sliderTick?: SliderTick;\n}\n\nexport interface SimpleTimeBarOption {\n  group: IGroup;\n  width?: number;\n  padding?: number;\n  data?: TimeBarData[];\n  slider?: SliderOption;\n  controllerCfg?: ControllerCfg;\n  sliderTick?: SliderTick;\n}\n\nexport interface TickTimeBarOption {\n  group: IGroup;\n  width?: number;\n  padding?: number;\n  data?: TimeBarData[];\n  controllerCfg?: ControllerCfg;\n  tick: TimeBarTickOption;\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/control-bar/control-btn.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\n\nfunction createControlBtn(which, style) {\n  const { height = 16, fill } = style;\n  const len = height / 2;\n  let html = \"\";\n  if (which === \"next\") {\n    html = `\n      <shape  type='path' path='[\n        [\"M\", 0, ${0 - len}],\n        [\"L\", ${len}, 0],\n        [\"L\", 0, ${len}],\n        [\"Z\", 0, ${0 - len}],\n        [\"M\", 0, 0],\n        [\"L\", ${0 - len}, ${0 - len}],\n        [\"L\", ${0 - len}, ${len}],\n        [\"Z\"]\n      ]'/>  \n    `;\n  }\n\n  if (which === \"prev\") {\n    html = `\n      <shape  type='path' path='[\n        [\"M\", 0, ${0 - len}],\n        [\"L\", ${0 - len}, 0],\n        [\"L\", 0, ${0 + len}],\n        [\"L\", 0, ${0 - len}],\n        [\"M\", 0, 0],\n        [\"L\", ${0 + len}, ${0 - len}],\n        [\"L\", ${0 + len}, ${0 + len}],\n        [\"Z\"]\n      ]'/>  \n    `;\n  }\n  const css = `\n    shape {\n      margin-left: ${len};\n      width: ${len};\n      background: ${fill};\n    }\n  `;\n  return createSegmentNode(html, css);\n}\n\nexport default createControlBtn;\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/control-bar/index.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport { dispatch } from \"../../dispatcher\";\nimport { ControllerCfg } from \"../../type/control-bar\";\nimport {\n  CONTROL_NEXT,\n  CONTROL_PREV,\n  DEFAULT_CONTROLLER_CONFIG,\n  SPEED_CHANGE,\n} from \"../../utils/const\";\nimport createControlBtn from \"./control-btn\";\nimport createPlayBtn from \"./play-btn\";\nimport { deepMix } from \"@antv/util\";\n\nfunction createControlbar(option: ControllerCfg) {\n  const mixOption: ControllerCfg = deepMix(\n    {},\n    DEFAULT_CONTROLLER_CONFIG,\n    option,\n  );\n  const {\n    wrapperWidth,\n    contentWidth,\n    height,\n    fill,\n    stroke,\n    nextBtnStyle,\n    preBtnStyle,\n    playBtnStyle,\n    speed,\n  } = mixOption;\n\n  const html = `\n    <div class='wrapper'>\n      <div class='content'> \n\n      </div>\n    </div>\n  `;\n  const css = `\n    .wrapper {\n      display: flex;\n      width: ${wrapperWidth};\n      height: ${height};\n      flex-wrap: nowrap;\n      flex-direction: row;\n      justify-content: center;\n      align-items: center;\n      background: ${fill};\n      ${stroke ? `border: 1 solid ${stroke};` : \"\"}\n    }\n    .content{\n      display: flex;\n      width: ${contentWidth};\n      flex-wrap: nowrap;\n      flex-direction: row;\n      justify-content: space-between;\n      align-items: center;\n      background-opacity: 0;\n    }\n`;\n  const uiTree = createSegmentNode(html, css);\n  const nextBtn = createControlBtn(\"next\", nextBtnStyle);\n  const prevBtn = createControlBtn(\"prev\", preBtnStyle);\n  const playBtn = createPlayBtn(playBtnStyle);\n\n  dispatch(SPEED_CHANGE, speed);\n\n  nextBtn.on(\"tap\", () => {\n    dispatch(CONTROL_NEXT);\n  });\n  prevBtn.on(\"tap\", () => {\n    dispatch(CONTROL_PREV);\n  });\n  uiTree.query(\".content\").appendChild(prevBtn, playBtn, nextBtn);\n\n  return uiTree;\n}\n\nexport default createControlbar;\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/control-bar/play-btn.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport { ShapeStyle } from \"@antv/f6-core\";\nimport { dispatch } from \"../../dispatcher\";\nimport { SLIDER_PAUSE, SLIDER_PLAY } from \"../../utils/const\";\n\nfunction createPlayBtn(style: ShapeStyle) {\n  const { radius = 15, fill } = style || {};\n  // 播放按钮中间三角形的高\n  const triH = (radius * Math.sqrt(3)) / 2;\n\n  const html = `\n  <div id='play_Btn'>\n    <shape class=\"start\" type='path' path='[\n      [\"M\", 0 , 0],\n      [\"L\", ${triH} , ${radius / 2}],\n      [\"L\", 0 , ${radius}]\n    ]'/>\n    <div class=\"pause\">\n      <shape class='pause_0' type='rect' />\n      <shape class='pause_1' type='rect' />\n    </div>\n  </div>`;\n  const css = `\n    #play_Btn {\n      width: ${radius * 2};\n      height: ${radius * 2};\n      background: #fff;\n      border: 1 solid ${fill};\n      border-radius: ${radius};\n    }\n    .start{\n      position: absolute;\n      top: ${radius / 2};\n      left: ${radius - triH / 2 + 1} ;\n      background: ${fill};\n      width: ${radius};\n      height: ${radius};\n    }\n    .pause {\n      display: none;\n    }\n    .pause shape {\n      position: absolute;\n      background: ${fill};\n      width: ${radius / 4};\n      height: ${radius};\n    }\n    .pause_1 {\n      left: ${(4 * radius) / 8};\n    }\n    .pause {\n      position: absolute;\n      top: ${radius / 2};\n      left: ${(5 * radius) / 8};\n    }\n  `;\n  const node = createSegmentNode(html, css);\n  const startNode = node.query(\".start\");\n  const pauseNode = node.query(\".pause\");\n\n  let isPause = true;\n  function update() {\n    startNode.setStyle(\"display\", isPause ? \"flex\" : \"none\");\n    pauseNode.setStyle(\"display\", isPause ? \"none\" : \"flex\");\n  }\n\n  update();\n\n  node.on(\"tap\", () => {\n    dispatch(isPause ? SLIDER_PLAY : SLIDER_PAUSE);\n    isPause = !isPause;\n    update();\n  });\n  return node;\n}\n\nexport default createPlayBtn;\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/index.ts",
    "content": "import { createUI } from \"@antv/f6-ui\";\nimport createControlbar from \"./control-bar\";\nimport {\n  createSimpleProgressBar,\n  createTickProgressBar,\n  createTrendProgressBar,\n} from \"./progress-bar\";\nimport {\n  SimpleTimeBarOption,\n  TickTimeBarOption,\n  TrendTimeBarOption,\n} from \"../type/time-bar\";\n\n/**\n * 创建简单模式的时间轴\n */\nexport function createSimpleTimeBarUI({\n  width = 0,\n  padding = 0,\n  group,\n  data = [],\n  slider = {},\n  controllerCfg = {},\n  sliderTick = {},\n}: SimpleTimeBarOption) {\n  const timeBar = createSimpleProgressBar({\n    data,\n    width,\n    slider: {\n      width: slider.width || width - padding * 2, // 实际padding\n      paddingTop: 0,\n      ...slider,\n    },\n    sliderTick: {\n      width: width - padding * 2,\n      ...sliderTick,\n    },\n  });\n  return createTimeBarUI(\n    { width, group, control: { wrapperWidth: width, ...controllerCfg } },\n    timeBar,\n  );\n}\n\n/**\n * 创建刻度模式时间轴\n */\nexport function createTickUI({\n  group,\n  data = [],\n  width,\n  padding,\n  controllerCfg = {},\n  tick = {},\n}: TickTimeBarOption) {\n  // 创建刻度progressBar\n  const tickBar = createTickProgressBar({\n    data,\n    tick: {\n      width: width - padding,\n      ...tick,\n    },\n  });\n\n  return createTimeBarUI(\n    { width, group, control: { wrapperWidth: width, ...controllerCfg } },\n    tickBar,\n  );\n}\n\n/**\n * 创建趋势时间轴\n */\nexport function createTrendUI({\n  width = 0,\n  padding = 0,\n  group,\n  data = [],\n  slider = {},\n  controllerCfg = {},\n  trend = {},\n  sliderTick = {},\n}: TrendTimeBarOption) {\n  // 创建progressBar\n  const progressBar = createTrendProgressBar({\n    data,\n    width,\n    slider: {\n      width: slider.width || width - padding * 2, // 实际padding\n      paddingTop: 0,\n      ...(slider || {}),\n    },\n    sliderTick: {\n      width: width - padding * 2,\n      ...(sliderTick || {}),\n    },\n    trend: { data: data?.map((item) => item.value), ...(trend || {}) },\n  });\n  // 创建TimeBar\n  const timeBar = createTimeBarUI(\n    { width, group, control: { wrapperWidth: width, ...controllerCfg } },\n    progressBar,\n  );\n  return timeBar;\n}\n\n/**\n * 时间轴创建函数\n * @param param\n * @param progressBar // 进度条部分\n * @returns\n */\nfunction createTimeBarUI({ width, group, control }, progressBar) {\n  const html = `<root></root>`;\n  const css = `\n  root {\n    /** 盒模型 **/\n    width: ${width};\n    /** flex **/\n    display: flex;\n    flex-direction: column;\n    flex-wrap: nowrap;\n    justify-content: center;\n    align-items: center;\n  }\n`;\n  const uiTree = createUI(html, css, group);\n  const controlBar = createControlbar(control);\n  uiTree.appendChild(progressBar, controlBar);\n  return uiTree;\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/progress-bar/index.ts",
    "content": "import { createSimpleProgressBar, createTrendProgressBar } from \"./trend\";\nimport createTickProgressBar from \"./tick\";\n\nexport {\n  createSimpleProgressBar,\n  createTickProgressBar,\n  createTrendProgressBar,\n};\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/progress-bar/tick.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport { dispatch, subscribe } from \"../../dispatcher\";\nimport {\n  CONTROL_NEXT,\n  CONTROL_PREV,\n  RANGE_CHANGE,\n  SLIDER_PAUSE,\n  SLIDER_PLAY,\n  PROGRESS_TICK_SELECTED_STYLE,\n  PROGRESS_TICK,\n  PROGRESS_TICK_LINE_STYLE,\n  PROGRESS_TICK_TEXT_STYLE,\n  PROGRESS_TICK_UNSELECTED_STYLE,\n  SLIDER_START,\n  SLIDER_END,\n  SPEED_CHANGE,\n} from \"../../utils/const\";\nimport { throttle } from \"@antv/util\";\nimport { createPlayer } from \"../../utils/player\";\nimport { TimeBarTickContext } from \"../../type/tick\";\n\nconst createTickProgressBar = function (option) {\n  const { data } = option;\n  const {\n    start = SLIDER_START,\n    end = SLIDER_END,\n    width,\n    padding,\n  } = option.tick;\n  console.log(option);\n  const selectedTickStyle = Object.assign(\n    {},\n    PROGRESS_TICK_SELECTED_STYLE,\n    option?.tick?.selectedTickStyle,\n  );\n\n  const unselectedTickStyle = Object.assign(\n    {},\n    PROGRESS_TICK_UNSELECTED_STYLE,\n    option?.tick?.unSelectedTickStyle,\n  );\n  const context: TimeBarTickContext = {} as TimeBarTickContext;\n\n  // 数据\n  context.data = data;\n  // 整个bar的宽度\n  context.width = width;\n\n  context.padding = padding || \"10 0\";\n  // 高亮\n  context.selectedFill = selectedTickStyle.fill;\n  // 默认\n  context.unSelectFill = unselectedTickStyle.fill;\n  // 每个刻度的间隔\n  context.gap = PROGRESS_TICK.gap;\n  // 每个刻度的高度\n  context.tickBoxHeight =\n    option?.tick?.tickBoxHeight || PROGRESS_TICK.tickBoxHeight;\n  // 刻度下面的线的样式\n  context.lineStyle = Object.assign(\n    {},\n    PROGRESS_TICK_LINE_STYLE,\n    option?.tick?.tickLineStyle,\n  );\n  // 刻度下面文本样式\n  context.textStyle = Object.assign(\n    {},\n    PROGRESS_TICK_TEXT_STYLE,\n    option?.tick?.tickLabelStyle,\n  );\n  // 每个刻度的宽度\n  context.tickWidth = width / data.length;\n  // 每个文本宽度相当于多少个刻度，用来布局文本\n  context.count = Math.floor(context.textStyle.width / context.tickWidth);\n  context.start = start;\n  context.end = end;\n  context.selects = [];\n  const node = createTickProgressBarNode(context);\n  context.tickBoxs = node.queryAll(\".tick-box\");\n\n  initPlayer(context);\n\n  bindEvents(node, context);\n\n  return node;\n};\n\n// 创建节点\nfunction createTickProgressBarNode(context) {\n  const {\n    data,\n    tickWidth,\n    count,\n    width,\n    gap,\n    tickBoxHeight,\n    textStyle,\n    lineStyle,\n    start,\n    end,\n    unSelectFill,\n  } = context;\n  const html = `\n  <div id='slider'>\n    ${data.reduce((prev, cur, index) => {\n      return (prev += `\n        <div class='ticker'> \n          <div class='tick-box' disFromStart='${index * tickWidth}'></div>\n          ${\n            index % count == 0\n              ? `\n              <div class='tick-desc' > \n                <shape class='line' type='rect'/>\n                <div class='text'>${cur.date}</div>\n              </div>`\n              : \"\"\n          }\n        </div>`);\n    }, \"\")}\n  </div>\n`;\n  const css = `\n  #slider {\n    width: ${width};\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    align-items: flex-start;\n    padding: ${context.padding};\n  }\n\n  .ticker {\n    width: ${tickWidth - gap};\n    display: flex;\n    background-opacity: 0;\n    align-items: center;\n  }\n\n  .tick-box {\n    width: ${tickWidth - gap};\n    height: ${tickBoxHeight};\n    background:  ${unSelectFill};\n  }\n\n  .tick-desc {\n    display: flex;\n    align-items: center;\n  }\n\n  .text{\n    width: 0;\n    height: ${textStyle.fontSize};\n    text-align:center;\n    color: ${textStyle.fill};\n    font-size: ${textStyle.fontSize};\n  }\n\n  .text text{\n    white-space: nowrap;\n  }\n\n  .line {\n    width: ${lineStyle.width};\n    height: ${lineStyle.height};\n    background: ${lineStyle.fill};\n    margin: 2 0;\n  }\n`;\n  const node = createSegmentNode(html, css);\n\n  node.didMount = function () {\n    context.start = start * width;\n    context.end = end * width;\n    select(context.start, context.end, context);\n  };\n  return node;\n}\n\n// 绑定事件\nfunction bindEvents(node, context) {\n  let startX = 0;\n  let isStart = false;\n  let startLeft = 0;\n\n  const selectThrottle = throttle(select, 30, {\n    trailing: true,\n    leading: true,\n  });\n\n  node.on(\"panstart\", (e) => {\n    isStart = false;\n    if (!e.uiNode) return;\n    if (e.uiNode.getAttribute(\"class\") === \"tick-box\") {\n      isStart = true;\n      startX = e.clientX;\n      startLeft = e.uiNode.getAttribute(\"disFromStart\");\n      clearAllSelect(context);\n    }\n  });\n\n  node.on(\"panmove\", (e) => {\n    if (!isStart) return;\n    const delta = e.clientX - startX;\n    selectThrottle(startLeft, startLeft + delta, context);\n  });\n\n  node.on(\"tap\", (e) => {\n    if (e.uiNode && e.uiNode.getAttribute(\"class\") === \"tick-box\") {\n      selectSingle(e.uiNode, context);\n    }\n  });\n}\n\n// 初始化播放器\nfunction initPlayer(context) {\n  const goNext = () => {\n    context.end += context.tickWidth;\n    select(context.start, context.end, context);\n  };\n\n  const goPrev = () => {\n    context.end -= context.tickWidth;\n    select(context.start, context.end, context);\n  };\n\n  const player = createPlayer(goNext, 1000);\n  subscribe(CONTROL_NEXT, goNext);\n  subscribe(CONTROL_PREV, goPrev);\n  subscribe(SLIDER_PLAY, player.play);\n  subscribe(SLIDER_PAUSE, player.stop);\n  subscribe(SPEED_CHANGE, player.setSpeed);\n}\n\n// 选中刻度函数\nfunction select(start, end, context) {\n  let max = Math.max(start, end);\n  let min = Math.min(start, end);\n  context.start = min;\n  context.end = max;\n  clearAllSelect(context);\n  context.tickBoxs.forEach((tickBox) => {\n    if (context.selects.includes(tickBox)) return;\n    if (\n      tickBox.getAttribute(\"disFromStart\") >= min &&\n      tickBox.getAttribute(\"disFromStart\") <= max\n    ) {\n      tickBox.setStyle(\"backgroundColor\", context.selectedFill);\n      context.selects.push(tickBox);\n    }\n  });\n\n  if (context.selects.length > 0) {\n    dispatch(RANGE_CHANGE, {\n      value: [\n        context.selects[0].getAttribute(\"disFromStart\") / context.width,\n        context.selects[context.selects.length - 1].getAttribute(\n          \"disFromStart\",\n        ) / context.width,\n      ],\n    });\n  }\n}\n\n// 清除选中\nfunction clearAllSelect(context) {\n  context.selects.forEach((box) => {\n    box.setStyle(\"backgroundColor\", context.unSelectFill);\n  });\n  context.selects = [];\n}\n\n// 选中单个box\nfunction selectSingle(tickBox, context) {\n  clearAllSelect(context);\n  context.selects.push(tickBox);\n  context.start = context.end = tickBox.getAttribute(\"disFromStart\");\n  dispatch(RANGE_CHANGE, {\n    value: [\n      tickBox.getAttribute(\"disFromStart\") / context.width,\n      tickBox.getAttribute(\"disFromStart\") / context.width,\n    ],\n  });\n  tickBox.setStyle(\"backgroundColor\", context.selectedFill);\n}\n\nexport default createTickProgressBar;\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/progress-bar/trend.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport bindDragEvents from \"../slider/slider-logic\";\nimport createSimpleSlider from \"../slider/simple-slider\";\nimport createTrendSlider from \"../slider/trend-slider\";\nimport createTiker from \"../slider/slide-ticker\";\nimport { subscribe } from \"../../dispatcher\";\nimport {\n  CONTROL_NEXT,\n  CONTROL_PREV,\n  SLIDER_END,\n  SLIDER_PAUSE,\n  SLIDER_PLAY,\n  SLIDER_START,\n  SPEED_CHANGE,\n} from \"../../utils/const\";\n\nexport function createSimpleProgressBar({\n  data = [],\n  width,\n  slider,\n  sliderTick,\n}) {\n  // 创建slider\n  const nodes = createSimpleSlider(slider);\n\n  // 创建progressBar\n  const progressBar = createProgressBar(\n    {\n      data,\n      width,\n      start: slider.start,\n      end: slider.end,\n      sliderTick,\n    },\n    nodes,\n  );\n  return progressBar;\n}\n\nexport function createTrendProgressBar({\n  data,\n  width,\n  slider,\n  sliderTick,\n  trend,\n}) {\n  // 创建slider\n  const nodes = createTrendSlider({ slider, trend });\n  // 创建progressBar\n  const progressBar = createProgressBar(\n    {\n      data,\n      width,\n      start: slider.start,\n      end: slider.end,\n      sliderTick,\n    },\n    nodes,\n  );\n  return progressBar;\n}\n\nfunction createProgressBar(\n  { data = [], width, start = SLIDER_START, end = SLIDER_END, sliderTick },\n  sliderNodes,\n) {\n  const { width: sliderTickWidth = 0 } = sliderTick;\n  // 每个刻度宽度\n  const tickWidth = sliderTickWidth / data.length;\n\n  const progressBar = createProgressBarNode(width);\n  const { slideContainer, leftControl, rightControl, slideInner } = sliderNodes;\n  const tiker = createTiker(data, tickWidth, sliderTick);\n  progressBar.appendChild(slideContainer, tiker);\n\n  const logic = bindDragEvents({\n    data,\n    slideContainer,\n    leftControl,\n    rightControl,\n    slideInner,\n    tickWidth,\n    delegateNode: progressBar,\n  });\n\n  // 节点挂载之后初始化\n  slideContainer.didMount = () => {\n    logic.goLeftPercent(start);\n    logic.goRightPercent(end);\n  };\n  subscribe(SLIDER_PLAY, logic.player.play);\n  subscribe(SLIDER_PAUSE, logic.player.stop);\n  subscribe(SPEED_CHANGE, logic.player.setSpeed);\n\n  subscribe(CONTROL_NEXT, logic.goNext);\n  subscribe(CONTROL_PREV, logic.goPrev);\n\n  return progressBar;\n}\n\nfunction createProgressBarNode(width) {\n  const html = `\n    <div id='slider'></div>\n  `;\n  const css = `\n    #slider {\n      width: ${width};\n      display: flex;\n      justify-content: center;\n      align-items: center;\n    }\n  `;\n  return createSegmentNode(html, css);\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/slider/simple-slider.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport { SliderOption } from \"../../type/slider\";\nimport {\n  SIMPLE_BACKGROUND_STYLE,\n  SIMPLE_HANDLE_STYLE,\n  FOREGROUND_STYLE,\n  TEXT_STYLE,\n} from \"../../utils/const\";\n\nexport default function createSimpleSlider(option: SliderOption) {\n  const { width, height = 4 } = option;\n  const handlerStyle = Object.assign(\n    {},\n    SIMPLE_HANDLE_STYLE,\n    option.handlerStyle,\n  );\n  const backgroundStyle = Object.assign(\n    {},\n    SIMPLE_BACKGROUND_STYLE,\n    option.backgroundStyle,\n  );\n  const foregroundStyle = Object.assign(\n    {},\n    FOREGROUND_STYLE,\n    option.foregroundStyle,\n  );\n  const textStyle = Object.assign({}, TEXT_STYLE, option.textStyle);\n\n  const html = `\n    <div class='slider-bg'>\n      <div class=\"slider-inner\"></div>\n      <div class='control left-control'>\n        <div class='text'>0</div>\n      </div>\n      <div class='control right-control'>\n        <div class='text'>0</div>\n      </div>\n    </div>\n  `;\n  const css = `\n    .slider-bg {\n      width: ${width};\n      height: ${height};\n      background: ${backgroundStyle.fill};\n      opacity: ${backgroundStyle.opacity};\n      border-radius: ${backgroundStyle.radius};\n      z-index: 10;\n      margin-top: 30;\n    }\n    \n    .slider-inner{\n      position: absolute;\n      width: ${width};\n      height: ${height};\n      border-radius: ${height / 2};\n      background: ${foregroundStyle.fill};\n      background-opacity: ${foregroundStyle.opacity}\n      z-index: 1;\n    }\n\n    .control {\n      position: absolute;\n      top: ${-handlerStyle.radius / 2 + height / 2};\n      width: ${handlerStyle.radius};\n      height: ${handlerStyle.radius};\n      border-radius: ${handlerStyle.radius / 2};\n      background: ${handlerStyle.fill};\n      border: ${handlerStyle.lineWidth} solid ${handlerStyle.stroke};\n      z-index: 2;\n    }\n\n    .text{\n      position: absolute;\n      left: ${handlerStyle.radius / 2};\n      top: -${handlerStyle.radius / 2 + textStyle.fontSize / 2};\n      width: 0;\n      color: ${textStyle.fill};\n      font-size: ${textStyle.fontSize};\n      text-align: center;\n    }\n\n    text{\n      opacity: ${textStyle.opacity};\n      white-space: nowrap;\n    }\n    \n    .left-control {\n      left: 0;\n    }\n\n    .right-control{\n      left: ${width - handlerStyle.radius};\n    }\n  `;\n\n  const node = createSegmentNode(html, css);\n\n  return {\n    slideContainer: node,\n    leftControl: node.query(\".left-control\"),\n    rightControl: node.query(\".right-control\"),\n    slideInner: node.query(\".slider-inner\"),\n  };\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/slider/slide-ticker.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport { SliderTick } from \"../../type/slider\";\nimport { TimeBarData } from \"../../type/time-bar\";\nimport { TICK_LABEL_STYLE, TICK_LINE_STYLE } from \"../../utils/const\";\n\nexport default function createTiker(\n  data: TimeBarData[],\n  tickWidth: number,\n  sliderTick: SliderTick,\n) {\n  const { width = 0 } = sliderTick;\n  const tickLabelStyle = Object.assign(\n    {},\n    TICK_LABEL_STYLE,\n    sliderTick.textStyle,\n  );\n  const tickLineStyle = Object.assign(\n    {},\n    TICK_LINE_STYLE,\n    sliderTick.lineStyle,\n  );\n\n  const count = Math.floor(tickLabelStyle.width / tickWidth);\n  const html = `\n  <div class='tiker'>\n    ${data.reduce((prev, cur, index) => {\n      return (prev += `\n        <div class='single-tick'> \n          ${\n            index % count === 0\n              ? `\n          <shape class='line' type='rect' />\n          <div class='text'>${cur.date}</div>`\n              : \"\"\n          }\n        </div> \n      `);\n    }, \"\")}\n  </div>`;\n\n  const css = `\n    .tiker {\n      width: ${width};\n      background-opacity: 0;\n      display: flex;\n      flex-direction: row;\n      z-index: 1;\n      color: black;\n    }\n    .single-tick {\n      width: ${tickWidth};\n      display: flex;\n      flex-direction: column;\n      justify-content: space-between;\n      align-items: flex-start;\n    }\n    .single-tick shape{\n      width: ${tickLineStyle.width};\n      height: ${tickLineStyle.height};\n      background: ${tickLineStyle.fill};\n    }\n    .single-tick .text {\n      height: ${tickLabelStyle.fontSize};\n      text-align: center;\n      font-size: ${tickLabelStyle.fontSize};\n      width: 0; \n      color: ${tickLabelStyle.fill};\n    }\n    text {\n      opacity: ${tickLabelStyle.opacity};;\n      white-space: nowrap;\n    }\n  `;\n  return createSegmentNode(html, css);\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/slider/slider-logic.ts",
    "content": "import { dispatch } from \"../../dispatcher\";\nimport { createPlayer } from \"../../utils/player\";\n\nexport default function createLogicer(option) {\n  const {\n    delegateNode,\n    leftControl,\n    rightControl,\n    slideInner,\n    data,\n    tickWidth,\n    slideContainer,\n    speed = 100,\n  } = option;\n\n  let start = 0;\n  let end = 1;\n  let cur = 0;\n\n  function goLeftPercent(percent) {\n    if (percent < 0 || percent > 1) return;\n    const containerWidth = slideContainer.width;\n    updateLeft(percent * containerWidth);\n  }\n\n  function goRightPercent(percent) {\n    if (percent < 0 || percent > 1) return;\n    const containerWidth = slideContainer.width;\n    updateRight(percent * containerWidth);\n  }\n\n  function goNext() {\n    const controlWidth = rightControl.width;\n    const containerWidth = slideContainer.width;\n    if (cur > containerWidth - controlWidth) return;\n    cur += tickWidth;\n    updateRight(cur);\n  }\n\n  function goPrev() {\n    if (cur < 0) return;\n    cur -= tickWidth;\n    updateRight(cur);\n  }\n\n  const player = createPlayer(goNext, speed);\n\n  function getSlideInnerWidth() {\n    return rightControl.left - leftControl.left + leftControl.width;\n  }\n\n  function getDataItem(value) {\n    const containerWidth = slideContainer.width;\n    const index = (value / containerWidth) * data.length;\n    return data[Math.floor(index)];\n  }\n\n  function updateLeft(value, isChangeSliderWidth = true) {\n    const controlWidth = leftControl.width;\n    const containerWidth = slideContainer.width;\n    if (value < 0) value = 0;\n    if (value > containerWidth - controlWidth)\n      value = containerWidth - controlWidth;\n    leftControl.onLeftChange?.(value);\n    leftControl.setStyle(\"left\", value);\n    isChangeSliderWidth && slideInner.setStyle(\"width\", getSlideInnerWidth());\n    slideInner.setStyle(\"left\", value < 0 ? 0 : value);\n    const data = getDataItem(value);\n    if (data) {\n      leftControl.setText(data.date);\n      start = value / containerWidth;\n      dispatch(\"RANGE_CHANGE\", { value: [start, end] });\n    }\n  }\n\n  function updateRight(value, isChangeSliderWidth = true) {\n    const controlWidth = rightControl.width;\n    const containerWidth = slideContainer.width;\n    if (value < 0) value = 0;\n    if (value >= containerWidth - controlWidth)\n      value = containerWidth - controlWidth;\n    rightControl.onLeftChange?.(value);\n    rightControl.setStyle(\"left\", value);\n    isChangeSliderWidth && slideInner.setStyle(\"width\", getSlideInnerWidth());\n    const data = getDataItem(value + controlWidth);\n    if (data) {\n      cur = value;\n      rightControl.setText(data.date);\n      end = (value + controlWidth) / containerWidth;\n      dispatch(\"RANGE_CHANGE\", { value: [start, end] });\n    }\n  }\n\n  function updateSlideInner(value) {\n    const controlWidth = rightControl.width;\n    const slideWidth = slideInner.width;\n    const containerWidth = slideContainer.width;\n    if (value < 0) value = 0;\n    if (value > containerWidth - slideWidth)\n      value = containerWidth - slideWidth;\n    updateLeft(value, false);\n    updateRight(value + slideWidth - controlWidth, false);\n  }\n\n  const map: any = new Map();\n  map.set(leftControl, {\n    getStart: () => leftControl.left,\n    handler: updateLeft,\n  });\n  map.set(rightControl, {\n    getStart: () => rightControl.left,\n    handler: updateRight,\n  });\n  map.set(slideInner, {\n    getStart: () => slideInner.left,\n    handler: updateSlideInner,\n  });\n\n  let startX = 0;\n  let startLeft = 0;\n  let dragingNode;\n\n  delegateNode.on(\"panstart\", (e) => {\n    if (!e.uiNode) return;\n    dragingNode = undefined;\n    const drager = map.get(e.uiNode);\n    if (drager) {\n      dragingNode = e.uiNode;\n      startX = e.clientX;\n      startLeft = drager.getStart();\n    }\n  });\n\n  delegateNode.on(\"panmove\", (e) => {\n    if (!dragingNode) return;\n    const drager = map.get(dragingNode);\n    const delta = e.clientX - startX;\n    drager.handler(startLeft + delta);\n  });\n\n  return {\n    goLeftPercent,\n    goRightPercent,\n    goNext,\n    goPrev,\n    player,\n  };\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/ui/slider/trend-slider.ts",
    "content": "import { createSegmentNode } from \"@antv/f6-ui\";\nimport { SliderOption, TrendConfig } from \"../../type/slider\";\nimport {\n  BACKGROUND_STYLE,\n  FOREGROUND_STYLE,\n  TREND_HANDLER_STYLE,\n  TEXT_STYLE,\n  TREND_SLIDER_HEIHGT,\n} from \"../../utils/const\";\nimport { dataToPath } from \"../../utils/path\";\n\nexport const TREND_LINE_STYLE = {\n  stroke: \"#C5C5C5\",\n  strokeOpacity: 0.85,\n};\n\nexport const AREA_STYLE = {\n  fill: \"#CACED4\",\n  opacity: 0.85,\n};\n\nexport default function createTrendSlider({\n  slider = {},\n  trend = {},\n}: {\n  slider: SliderOption;\n  trend: TrendConfig;\n}) {\n  const { width, height = TREND_SLIDER_HEIHGT } = slider;\n  const { data: trendData = [], lineStyle, smooth = true } = trend;\n\n  const handlerStyle = Object.assign(\n    {},\n    TREND_HANDLER_STYLE,\n    slider.handlerStyle,\n  );\n  const backgroundStyle = Object.assign(\n    {},\n    BACKGROUND_STYLE,\n    slider.backgroundStyle,\n  );\n  const foregroundStyle = Object.assign(\n    {},\n    FOREGROUND_STYLE,\n    slider.foregroundStyle,\n  );\n  const textStyle = Object.assign({}, TEXT_STYLE, slider.textStyle);\n\n  const trendLineStyle = Object.assign({}, TREND_LINE_STYLE, lineStyle);\n\n  const mainRectWidth = handlerStyle.width;\n  const circleR = mainRectWidth * 2;\n  const controlWidth = circleR * 2 + 10;\n\n  const html = `\n    <div class='slider-bg'>\n      <shape class='trend-bg' type='path' path='[]' />\n      <div class= 'slider-inner' />\n      <div class='control left-control'>\n        <div class='handler'> \n          <div class='text'>1</div>\n          <shape class='rect' type='rect' width='${handlerStyle.width}'/>\n          <shape class='circle top-circle' type='circle' r='${circleR}' />\n          <shape class='circle bottom-circle' type='circle' r='${circleR}' />\n        </div>\n      </div>\n      <div class='control right-control'>\n        <div class='handler'> \n          <div class='text'>1</div>\n          <shape class='rect' type='rect' width='${handlerStyle.width}'/>\n          <shape class='circle top-circle' type='circle' r='${circleR}' />\n          <shape class='circle bottom-circle' type='circle' r='${circleR}' />\n        </div>\n      </div>\n    </div>\n  `;\n  const css = `\n    .slider-bg {\n      width: ${width};\n      height: ${height};\n      background: ${backgroundStyle.fill};\n      opacity: ${backgroundStyle.opacity};\n      z-index: 10;\n    }\n\n    .trend-bg{\n      position: absolute;\n      width: ${width};\n      height: ${height};\n      border: 1 solid ${trendLineStyle.stroke};\n      opacity: ${trendLineStyle.strokeOpacity};\n    }\n    \n    .slider-inner{\n      position: absolute;\n      width: ${width};\n      height: ${height};\n      background: ${foregroundStyle.fill};\n      opacity: ${foregroundStyle.opacity};\n    }\n\n    .control {\n      position: absolute;\n      width: ${controlWidth};\n      height: ${height};\n      font-size: 10;\n      background-opacity: 0;\n    }\n\n    .handler{\n      position: absolute;\n      height: ${handlerStyle.height};\n      width: ${mainRectWidth};\n    }\n    \n    .rect {\n      position: absolute;\n      width: ${mainRectWidth};\n      height: ${handlerStyle.height};\n      background: ${handlerStyle.fill};\n    }\n\n    .circle {\n      background: ${handlerStyle.fill};\n      position: absolute;\n      left: ${mainRectWidth / 2}\n    }\n\n    .top-circle{\n      top: 0\n    }\n\n    .bottom-circle{\n      bottom: 0\n    }\n\n    .right-control .handler{\n      right: 0\n    }\n\n    .control .text{\n      position: absolute;\n      top: ${height / 2 - 5};\n    }\n    \n    .text{\n      color: ${textStyle.fill};\n      width: 40;\n      text-align: center;\n    }\n\n    .text text{\n      opacity:${textStyle.opacity}\n    }\n\n    .left-control .text{\n      margin-left: 0;\n    }\n\n    .right-control .text{\n      \n    }\n    \n    .left-control {\n      left: 0;\n    }\n\n    .right-control{\n      left: ${width - controlWidth};\n    }\n  `;\n\n  const slideContainer = createSegmentNode(html, css);\n  const path = dataToPath(trendData, width, height, smooth);\n  const slideTrendBg = slideContainer.query(\".trend-bg\");\n  slideTrendBg.setAttribute(\"path\", path);\n\n  const leftControl = slideContainer.query(\".left-control\");\n  const rightControl = slideContainer.query(\".right-control\");\n\n  const leftControlText = leftControl.query(\".text\");\n  const rightControlText = rightControl.query(\".text\");\n\n  leftControl.onLeftChange = (value) => {\n    if (value < leftControlText.width) {\n      leftControlText.setStyle(\"marginLeft\", 0);\n    } else {\n      leftControlText.setStyle(\"marginLeft\", -leftControlText.width);\n    }\n  };\n\n  rightControl.onLeftChange = (value) => {\n    if (\n      value >\n      slideContainer.width - rightControl.width - rightControlText.width\n    ) {\n      rightControlText.setStyle(\"marginLeft\", -rightControlText.width);\n    } else {\n      rightControlText.setStyle(\"marginLeft\", 0);\n    }\n  };\n\n  return {\n    slideContainer: slideContainer,\n    leftControl: slideContainer.query(\".left-control\"),\n    rightControl: slideContainer.query(\".right-control\"),\n    slideInner: slideContainer.query(\".slider-inner\"),\n  };\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/utils/const.ts",
    "content": "// event\nexport const SLIDER_PLAY = \"SLIDER_PLAY\";\nexport const SLIDER_PAUSE = \"SLIDER_PAUSE\";\n\nexport const CONTROL_NEXT = \"CONTROL_NEXT\";\nexport const CONTROL_PREV = \"CONTROL_PREV\";\n\nexport const RANGE_CHANGE = \"RANGE_CHANGE\";\nexport const SPEED_CHANGE = \"SPEED_CHANGE\";\n\n// slider\nexport const BACKGROUND_STYLE = {\n  fill: \"#416180\",\n  opacity: 0.05,\n};\n\nexport const SIMPLE_BACKGROUND_STYLE = {\n  fill: \"#416180\",\n  opacity: 0.15,\n  radius: 5,\n};\n\nexport const FOREGROUND_STYLE = {\n  fill: \"#5B8FF9\",\n  opacity: 0.3,\n  cursor: \"grab\",\n};\n\nexport const TREND_SLIDER_HEIHGT = 24;\n\nexport const TREND_HANDLER_STYLE = {\n  width: 2,\n  height: 26,\n  fill: \"#1890ff\",\n  stroke: \"#1890ff\",\n  opacity: 1,\n  cursor: \"ew-resize\",\n  // 高亮的颜色\n  highLightFill: \"#0050b3\",\n};\n\nexport const SIMPLE_HANDLE_STYLE = {\n  fill: \"#fff\",\n  stroke: \"#1890ff\",\n  radius: 15,\n  opacity: 1,\n  lineWidth: 2,\n  cursor: \"ew-resize\",\n};\n\n// sliderTick\nexport const TEXT_STYLE = {\n  textBaseline: \"middle\",\n  fill: \"#000\",\n  opacity: 0.45,\n  fontSize: 12,\n};\n\nexport const TICK_LABEL_STYLE = {\n  fill: \"#607889\",\n  opacity: 0.35,\n  fontSize: 12,\n  width: 50,\n};\n\nexport const TICK_LINE_STYLE = {\n  width: 1,\n  height: 4,\n  fill: \"#ccc\",\n};\n\nexport const PROGRESS_TICK = {\n  gap: 2,\n  tickBoxHeight: 18,\n};\n\nexport const PROGRESS_TICK_LINE_STYLE = {\n  height: 4,\n  width: 1,\n  fill: \"#BFBFBF\",\n};\n\nexport const PROGRESS_TICK_TEXT_STYLE = {\n  fill: \"#8c8c8c\",\n  fontSize: 10,\n  width: 50,\n};\n\nexport const PROGRESS_TICK_SELECTED_STYLE = {\n  fill: \"#5B8FF9\",\n};\n\nexport const PROGRESS_TICK_UNSELECTED_STYLE = {\n  fill: \"#e6e8e9\",\n};\n\nexport const SLIDER_START = 0.1;\nexport const SLIDER_END = 0.9;\n\nexport const DEFAULT_CONTROLLER_CONFIG = {\n  speed: 1,\n  contentWidth: 200,\n  height: 60,\n  fill: \"#fff\",\n  stroke: \"#fff\",\n  hideTimeTypeController: false,\n  preBtnStyle: {\n    fill: \"#aaa\",\n  },\n  nextBtnStyle: {\n    fill: \"#aaa\",\n  },\n  playBtnStyle: {\n    fill: \"#aaa\",\n  },\n};\n"
  },
  {
    "path": "packages/plugin/src/time-bar/utils/path.ts",
    "content": "import * as pathUtil from \"@antv/path-util\";\nimport { Category, Linear } from \"@antv/scale\";\nimport { map, each, isEqual, head, isArray } from \"@antv/util\";\n\ntype Point = [number, number];\n\n/**\n * 点数组转 path\n * @param points\n */\nfunction pointsToPath(points: Point[]): any[][] {\n  return map(points, (p: Point, idx: number) => {\n    const command = idx === 0 ? \"M\" : \"L\";\n    const [x, y] = p;\n    return [command, x, y];\n  });\n}\n\n/**\n * 将点连接成路径 path\n * @param points\n */\nexport function getLinePath(points: Point[]): any[][] {\n  return pointsToPath(points);\n}\n\n/**\n * 将点连成平滑的曲线\n * @param points\n */\nexport function getSmoothLinePath(points: Point[]): any[][] {\n  if (points.length <= 2) {\n    // 两点以内直接绘制成路径\n    return getLinePath(points);\n  }\n\n  const data = [];\n\n  each(points, (p) => {\n    // 当前点和上一个点一样的时候，忽略掉\n    if (!isEqual(p, data.slice(data.length - 2))) {\n      data.push(p[0], p[1]);\n    }\n  });\n\n  const path = pathUtil.catmullRom2Bezier(data, false);\n  const [x, y] = head(points);\n  path.unshift([\"M\", x, y]);\n\n  return path;\n}\n\n/**\n * 将数据转成 path，利用 scale 的归一化能力\n * @param data\n * @param width\n * @param height\n * @param smooth\n */\nexport function dataToPath(\n  data: number[],\n  width: number,\n  height: number,\n  smooth: boolean = true,\n): any[][] {\n  // 利用 scale 来获取 y 上的映射\n  const y = new Linear({\n    values: data,\n  });\n\n  const x = new Category({\n    values: map(data, (v, idx) => idx),\n  });\n\n  const points = map(data, (v: number, idx: number) => {\n    return [x.scale(idx) * width, height - y.scale(v) * height] as [\n      number,\n      number,\n    ];\n  });\n\n  return smooth ? getSmoothLinePath(points) : getLinePath(points);\n}\n\nexport function dataToRectPath(\n  data: number[],\n  width: number,\n  height: number,\n  barWidth: number = 5,\n): any[][] {\n  // 利用 scale 来获取 y 上的映射\n  const y = new Linear({\n    values: data,\n  });\n\n  const x = new Category({\n    values: map(data, (v, idx) => idx),\n  });\n\n  const points = map(data, (v: number, idx: number) => {\n    return [x.scale(idx) * width, height - y.scale(v) * height] as [\n      number,\n      number,\n    ];\n  });\n\n  const rectPoints = [];\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i];\n    const param = {\n      x: point[0],\n      y: point[1],\n      y0: height,\n      size: barWidth,\n    };\n    const rectPoint = getRectPoints(param);\n    rectPoints.push(...rectPoint);\n  }\n\n  return getRectPath(rectPoints);\n}\n\n/**\n * 获得 area 面积的横向连接线的 px 位置\n * @param data\n * @param width\n * @param height\n */\nexport function getAreaLineY(data: number[], height: number): number {\n  const y = new Linear({\n    values: data,\n  });\n\n  const lineY = Math.max(0, y.min);\n  return height - y.scale(lineY) * height;\n}\n\n/**\n * 线 path 转 area path\n * @param path\n * @param width\n * @param height\n */\nexport function linePathToAreaPath(\n  path: any[][],\n  width: number,\n  height: number,\n  data: number[],\n): any[][] {\n  const areaPath = [...path];\n\n  const lineYPx = getAreaLineY(data, height);\n\n  areaPath.push([\"L\", width, lineYPx]);\n  areaPath.push([\"L\", 0, lineYPx]);\n  areaPath.push([\"Z\"]);\n\n  return areaPath;\n}\n\n/**\n * @ignore\n * 根据数据点生成矩形的四个关键点\n * @param pointInfo 数据点信息\n * @returns rect points 返回矩形四个顶点信息\n */\nexport function getRectPoints(pointInfo): { x: number; y: number }[] {\n  const { x, y, y0, size } = pointInfo;\n  // 有 4 种情况，\n  // 1. x, y 都不是数组\n  // 2. y是数组，x不是\n  // 3. x是数组，y不是\n  // 4. x, y 都是数组\n  let yMin;\n  let yMax;\n  if (isArray(y)) {\n    [yMin, yMax] = y;\n  } else {\n    yMin = y0;\n    yMax = y;\n  }\n\n  let xMin;\n  let xMax;\n  if (isArray(x)) {\n    [xMin, xMax] = x;\n  } else {\n    xMin = x - size / 2;\n    xMax = x + size / 2;\n  }\n\n  const points = [\n    { x: xMin, y: yMin },\n    { x: xMin, y: yMax },\n  ];\n\n  // 矩形的四个关键点，结构如下（左下角顺时针连接）\n  // 1 ---- 2\n  // |      |\n  // 0 ---- 3\n  points.push({ x: xMax, y: yMax }, { x: xMax, y: yMin });\n\n  return points;\n}\n\n/**\n * @ignore\n * 根据矩形关键点绘制 path\n * @param points 关键点数组\n * @param isClosed path 是否需要闭合\n * @returns 返回矩形的 path\n */\nexport function getRectPath(\n  points: { x: number; y: number }[],\n  isClosed: boolean = true,\n) {\n  const path = [];\n  const firstPoint = points[0];\n  path.push([\"M\", firstPoint.x, firstPoint.y]);\n  for (let i = 1, len = points.length; i < len; i++) {\n    path.push([\"L\", points[i].x, points[i].y]);\n  }\n  // 对于 shape=\"line\" path 不应该闭合，否则会造成 lineCap 绘图属性失效\n  if (isClosed) {\n    path.push([\"L\", firstPoint.x, firstPoint.y]); // 需要闭合\n    path.push([\"z\"]);\n  }\n  return path;\n}\n"
  },
  {
    "path": "packages/plugin/src/time-bar/utils/player.ts",
    "content": "export function createPlayer(fn, time = 20) {\n  let isStop = true;\n  let timer = null;\n  let maxTime = 800;\n  let minTime = 300;\n\n  let maxLevel = 10;\n  let minLevel = 1;\n\n  const loop = function () {\n    if (isStop) {\n      clearTimeout(timer);\n      return;\n    }\n    fn?.();\n    timer = setTimeout(() => {\n      loop();\n    }, time);\n  };\n  return {\n    play() {\n      isStop = false;\n      loop();\n    },\n    stop() {\n      isStop = true;\n    },\n    setSpeed(speed) {\n      if (speed > maxLevel) speed = maxLevel;\n      if (speed < minLevel) speed = minLevel;\n      time = maxTime - ((maxTime - minTime) * speed) / (maxLevel - minLevel);\n    },\n  };\n}\n"
  },
  {
    "path": "packages/plugin/src/tooltip/css.ts",
    "content": "export function appendCss(cssString = \"\") {\n  return `\n    text {\n      opacity: 1\n    }\n    ${cssString}\n  `;\n}\n"
  },
  {
    "path": "packages/plugin/src/tooltip/html.ts",
    "content": "export default function getHtml(content = \"\") {\n  return `\n  <root> \n    ${content}\n  </root>`;\n}\n"
  },
  {
    "path": "packages/plugin/src/tooltip/index.ts",
    "content": "import { isArray } from \"@antv/util\";\nimport { IG6GraphEvent, Item, IAbstractGraph as IGraph } from \"@antv/f6-core\";\nimport Base, { IPluginBaseConfig } from \"../base\";\nimport { createUI } from \"@antv/f6-ui\";\nimport getHtml from \"./html\";\nimport { appendCss } from \"./css\";\n\ninterface TooltipConfig extends IPluginBaseConfig {\n  getContent?: (evt?: IG6GraphEvent) => HTMLDivElement | string;\n  offsetX?: number;\n  offsetY?: number;\n  shouldBegin?: (evt?: IG6GraphEvent) => boolean;\n  // 允许出现 tooltip 的 item 类型\n  itemTypes?: string[];\n  trigger?: \"mouseenter\" | \"click\";\n  fixToNode?: [number, number] | undefined;\n}\n\nexport default class Tooltip extends Base {\n  private currentTarget: Item;\n\n  public getDefaultCfgs(): TooltipConfig {\n    return {\n      offsetX: 6,\n      offsetY: 6,\n      // 指定菜单内容，function(e) {...}\n      getContent: (e) => {\n        return `\n          <div class=\"f6-tooltip-container\">\n            <div class='tooltip-type'>类型：${e.item?.getType()}</div>\n            <div class='tooltip-id'>ID：${e.item?.getID()}</div>\n          </div>\n        `;\n      },\n      getCss: () => `\n        .f6-tooltip-container {\n          position: absolute;\n          width: 200;\n          border: 1 solid #e2e2e2;\n          border-radius: 4;\n          font-size: 12;\n          color: #545454;\n          background-color: rgba(255, 255, 255, 0.9);\n          padding: 10 8;\n        }\n    \n        .f6-tooltip-container div{\n          height: 20;\n        }\n        \n        .tooltip-type {\n          padding: 0;\n          margin: 0;\n        }\n        .tooltip-id {\n          color: #531dab;\n        }\n      `,\n      shouldBegin: (e) => {\n        return true;\n      },\n      itemTypes: [\"node\", \"edge\", \"combo\"],\n      trigger: \"mouseenter\",\n      fixToNode: undefined,\n    };\n  }\n\n  // class-methods-use-this\n  public getEvents() {\n    if (this.get(\"trigger\") === \"click\") {\n      return {\n        \"node:tap\": \"onClick\",\n        \"edge:tap\": \"onClick\",\n        \"combo:tap\": \"onClick\",\n        \"canvas:tap\": \"onMouseLeave\",\n        afterremoveitem: \"onMouseLeave\",\n        contextmenu: \"onMouseLeave\",\n        drag: \"onMouseLeave\",\n      };\n    }\n    return {\n      \"node:press\": \"onClick\",\n      \"edge:press\": \"onClick\",\n      \"combo:press\": \"onClick\",\n      \"canvas:press\": \"onMouseLeave\",\n      \"node:tap\": \"onMouseLeave\",\n      \"edge:tap\": \"onMouseLeave\",\n      \"combo:tap\": \"onMouseLeave\",\n      \"canvas:tap\": \"onMouseLeave\",\n      afterremoveitem: \"onMouseLeave\",\n      contextmenu: \"onMouseLeave\",\n      drag: \"onMouseLeave\",\n    };\n  }\n\n  onClick(e: IG6GraphEvent) {\n    const itemTypes = this.get(\"itemTypes\");\n    if (e.item && e.item.getType && itemTypes.indexOf(e.item.getType()) === -1)\n      return;\n\n    const { item } = e;\n    const graph: IGraph = this.get(\"graph\");\n    // 若与上一次同一 item，隐藏该 tooltip\n    if (this.currentTarget === item) {\n      this.currentTarget = null;\n      this.hideTooltip();\n      graph.emit(\"tooltipchange\", { item: e.item, action: \"hide\" });\n    } else {\n      this.currentTarget = item;\n      this.showTooltip(e);\n      graph.emit(\"tooltipchange\", { item: e.item, action: \"show\" });\n    }\n  }\n\n  onMouseEnter(e: IG6GraphEvent) {\n    const itemTypes = this.get(\"itemTypes\");\n\n    if (e.item && e.item.getType && itemTypes.indexOf(e.item.getType()) === -1)\n      return;\n    const { item } = e;\n    const graph: IGraph = this.get(\"graph\");\n    this.currentTarget = item;\n    this.showTooltip(e);\n    graph.emit(\"tooltipchange\", { item: e.item, action: \"show\" });\n  }\n\n  onMouseMove(e: IG6GraphEvent) {\n    const itemTypes = this.get(\"itemTypes\");\n    if (e.item && e.item.getType && itemTypes.indexOf(e.item.getType()) === -1)\n      return;\n    if (!this.currentTarget || e.item !== this.currentTarget) {\n      return;\n    }\n    this.showTooltip(e);\n  }\n\n  onMouseLeave() {\n    this.hideTooltip();\n    const graph: IGraph = this.get(\"graph\");\n    graph.emit(\"tooltipchange\", { item: this.currentTarget, action: \"hide\" });\n    this.currentTarget = null;\n  }\n\n  showTooltip(e: IG6GraphEvent) {\n    if (!e.item) {\n      return;\n    }\n    const itemTypes = this.get(\"itemTypes\");\n\n    if (e.item.getType && itemTypes.indexOf(e.item.getType()) === -1) return;\n\n    const uiGroup = this.get(\"graph\").get(\"uiGroup\");\n\n    const html = getHtml(this.get(\"getContent\")?.(e));\n    const css = appendCss(this.get(\"getCss\")?.());\n    const tooltipUI = createUI(html, css, uiGroup);\n    this.get(\"tooltip\")?.remove();\n    this.set(\"tooltip\", tooltipUI);\n\n    this.updatePosition(e);\n  }\n\n  hideTooltip() {\n    const tooltip = this.get(\"tooltip\");\n    if (tooltip) {\n      tooltip.setStyle(\"display\", \"none\");\n    }\n  }\n\n  updatePosition(e: IG6GraphEvent) {\n    const shouldBegin = this.get(\"shouldBegin\");\n    const tooltip = this.get(\"tooltip\");\n    if (!shouldBegin(e)) {\n      this.hideTooltip();\n      return;\n    }\n    const graph: IGraph = this.get(\"graph\");\n    const width: number = graph.get(\"width\");\n    const height: number = graph.get(\"height\");\n\n    const offsetX = this.get(\"offsetX\") || 0;\n    const offsetY = this.get(\"offsetY\") || 0;\n\n    // const mousePos = graph.getPointByClient(e.clientX, e.clientY);\n    let point = graph.getPointByClient(e.clientX, e.clientY);\n\n    const fixToNode = this.get(\"fixToNode\");\n    const { item } = e;\n    if (\n      item.getType &&\n      item.getType() === \"node\" &&\n      fixToNode &&\n      isArray(fixToNode) &&\n      fixToNode.length >= 2\n    ) {\n      const itemBBox = item.getBBox();\n      point = {\n        x: itemBBox.minX + itemBBox.width * fixToNode[0],\n        y: itemBBox.minY + itemBBox.height * fixToNode[1],\n      };\n    }\n\n    const { x, y } = graph.getCanvasByPoint(point.x, point.y);\n\n    const res = {\n      x: x + offsetX,\n      y: y + offsetY,\n    };\n\n    // 先修改为 visible 方可正确计算 bbox\n    tooltip.setStyle(\"display\", \"flex\");\n\n    if (x + tooltip.width + offsetX > width) {\n      res.x -= tooltip.width + offsetX;\n    }\n\n    if (y + tooltip.height + offsetY > height) {\n      res.y -= tooltip.height + offsetY;\n    }\n    tooltip.setStyle(\"left\", res.x);\n    tooltip.setStyle(\"top\", res.y);\n  }\n\n  public hide() {\n    this.onMouseLeave();\n  }\n\n  public destroy() {\n    const tooltip = this.get(\"tooltip\");\n\n    if (tooltip) {\n      tooltip.remove();\n    }\n  }\n}\n"
  },
  {
    "path": "packages/plugin/src/zoom-slider/index.ts",
    "content": "import { IAbstractGraph as IGraph } from \"@antv/f6-core\";\nimport Base, { IPluginBaseConfig } from \"../base\";\nimport { createUI } from \"@antv/f6-ui\";\n\ninterface ZoomSliderConfig extends IPluginBaseConfig {\n  minZoom: number;\n  maxZoom: number;\n  // 滑块（竿）占屏幕宽度的比例\n  sliderWidthPercent: number;\n  // 滑块拖拽的时间戳\n  dragTimestamp: number;\n  sliderPosition: \"bottom\" | \"top\";\n  customizedStyle: string;\n}\n\n/**\n * 滑块缩放工具\n */\nexport default class ZoomSlider extends Base {\n  constructor(props?: ZoomSliderConfig) {\n    super(props);\n  }\n\n  public getDefaultCfgs() {\n    return {\n      minZoom: 0.5,\n      maxZoom: 3,\n      sliderWidthPercent: 0.3,\n      dragTimestamp: +new Date(),\n      sliderPosition: \"bottom\",\n      customizedStyle: \"\",\n      getContent: () => {\n        return `\n          <root class=\"f6-zoom-slider\">\n            <div class=\"rail\"></div>\n            <div class=\"track\"></div>\n            <div class=\"handle\">\n              <div class=\"text\">1 times</div>\n              <div class=\"circle\"></div>\n            </div>\n          </root>\n        `;\n      },\n      getCss: () => {\n        const graph: IGraph = this.get(\"graph\");\n        const graphWidth = graph.get(\"width\");\n        const graphHeight = graph.get(\"height\");\n        const minZoom = this.get(\"minZoom\");\n        const maxZoom = this.get(\"maxZoom\");\n        const sliderWidthPercent = this.get(\"sliderWidthPercent\");\n        const containerWidth = Math.floor(graphWidth * sliderWidthPercent);\n        const resultX = containerWidth * ((1 - minZoom) / (maxZoom - minZoom));\n        const sliderPosition = this.get(\"sliderPosition\");\n        const sliderToTop = sliderPosition === \"top\" ? 30 : graphHeight - 60;\n        const customizedStyle = this.get(\"customizedStyle\");\n        return (\n          `\n          .f6-zoom-slider {\n            width: ${containerWidth};\n            height: 30;\n            margin-left: ${Math.floor(\n              (graphWidth * (1 - sliderWidthPercent)) / 2,\n            )};\n            padding: 13 0;\n            top: ${sliderToTop};\n            position: relative;\n            opacity: 0;\n          }\n\n          .rail {\n            width: ${containerWidth};\n            height: 4;\n            background-color: #bcbcbc;\n            border-radius: 2;\n            opacity: 1;\n          }\n\n          .track {\n            width: ${resultX + 2};\n            height: 4;\n            background-color: #91d5ff;\n            position: absolute;\n            top: 13;\n            border-radius: 2;\n            opacity: 1;\n          }\n\n          .handle {\n            height: 30;\n            width: 40;\n            position: absolute;\n            top: 0;\n            left: ${resultX - 9};\n            padding: 9;\n            opacity: 0;\n          }\n\n          .circle {\n            height: 13;\n            width: 13;\n            border-radius: 6.5;\n            border: 2px solid #1890ff;\n            background-color: #fff;\n            opacity: 1;\n          }\n\n          .text  {\n            position: absolute;\n            top: -9;\n            margin-left: -12;\n            color: #666;\n            width: 45;\n          }\n        ` + customizedStyle\n        );\n      },\n    };\n  }\n\n  public getEvents() {\n    return {\n      dragstart: \"onDragStart\",\n      dragend: \"onDragEnd\",\n      pinchmove: \"onDragStart\",\n      pinchend: \"onDragEnd\",\n    };\n  }\n\n  public init() {\n    setTimeout(() => {\n      this.initSlider();\n    });\n  }\n\n  /**\n   * 初始化滑块视图\n   */\n  initSlider() {\n    console.log(\"initSlider\", this);\n    const graph: IGraph = this.get(\"graph\");\n    const uiGroup = graph.get(\"uiGroup\");\n    const html = this.get(\"getContent\")();\n    const css = this.get(\"getCss\")();\n    const zoomSliderUI = createUI(html, css, uiGroup);\n    const handleUI = zoomSliderUI.query(\".handle\");\n\n    let startX = 0;\n    handleUI.on(\"panstart\", (e) => {\n      startX = e.clientX;\n    });\n\n    handleUI.on(\"panmove\", (e) => {\n      const distance = e.clientX - startX;\n      startX = e.clientX;\n      this.set(\"dragTimestamp\", +new Date());\n      this.updateHandlePosition(distance);\n    });\n\n    zoomSliderUI.setStyle(\"display\", \"none\");\n    this.set(\"zoomSlider\", zoomSliderUI);\n  }\n\n  /**\n   * 开始拖动画布\n   */\n  onDragStart() {\n    // 同步画布缩放比例到滑块工具\n    const graph: IGraph = this.get(\"graph\");\n    const scale = graph.getZoom();\n    const graphWidth = graph.get(\"width\");\n    const zoomSliderUI = this.get(\"zoomSlider\");\n    const minZoom = this.get(\"minZoom\");\n    const maxZoom = this.get(\"maxZoom\");\n    const sliderWidthPercent = this.get(\"sliderWidthPercent\");\n    const trackUI = zoomSliderUI.query(\".track\");\n    const containerWidth = Math.floor(graphWidth * sliderWidthPercent);\n    const distance =\n      containerWidth * ((scale - minZoom) / (maxZoom - minZoom)) -\n      trackUI.getStyle(\"width\");\n    this.updateHandlePosition(distance);\n    // 显示滑块工具\n    clearInterval(this.get(\"clearHandle\"));\n    zoomSliderUI.setStyle(\"display\", \"block\");\n  }\n\n  /**\n   * 停止拖动画布\n   */\n  async onDragEnd() {\n    const zoomSliderUI = this.get(\"zoomSlider\");\n    clearInterval(this.get(\"clearHandle\"));\n    const clearHandle = setInterval(() => {\n      const dragBefore = +new Date() - this.get(\"dragTimestamp\");\n      if (dragBefore > 3000) {\n        clearInterval(this.get(\"clearHandle\"));\n        zoomSliderUI.setStyle(\"display\", \"none\");\n      }\n    }, 3000);\n    this.set(\"clearHandle\", clearHandle);\n  }\n\n  /**\n   * 更新滑块拖动的位置\n   */\n  updateHandlePosition(distance) {\n    const graph: IGraph = this.get(\"graph\");\n    const zoomSliderUI = this.get(\"zoomSlider\");\n    const sliderWidthPercent = this.get(\"sliderWidthPercent\");\n    const minZoom = this.get(\"minZoom\");\n    const maxZoom = this.get(\"maxZoom\");\n    const trackUI = zoomSliderUI.query(\".track\");\n    const handleUI = zoomSliderUI.query(\".handle\");\n    const clientX = trackUI.getStyle(\"width\");\n    const containerWidth = graph.get(\"width\") * sliderWidthPercent;\n    let resultX = clientX + distance;\n    if (resultX < 0) {\n      resultX = 0;\n    }\n    if (resultX > containerWidth) {\n      resultX = containerWidth;\n    }\n    const scaleRatio =\n      (maxZoom - minZoom) * (resultX / containerWidth) + minZoom;\n    trackUI.setStyle(\"width\", resultX);\n    handleUI.setStyle(\"left\", resultX - 9); // 9: handle 的 padding left\n    handleUI.setText(`${Math.round(scaleRatio * 10) / 10} times`);\n    this.updateScale(scaleRatio);\n  }\n\n  /**\n   * 更新画布缩放\n   */\n  updateScale(scaleRatio) {\n    const graph: IGraph = this.get(\"graph\");\n    graph.zoom(scaleRatio / graph.getZoom());\n  }\n}\n"
  },
  {
    "path": "packages/plugin/vite.config.ts",
    "content": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport path from \"path\";\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: {\n      \"@\": path.resolve(__dirname, \"src\"),\n    },\n  },\n  build: {\n    lib: {\n      entry: path.resolve(__dirname, \"src/index.ts\"), // 入口文件\n      name: \"f6-plugin\", // UMD 构建时的全局变量名\n      fileName: (format) => `index.${format}.js`, // 输出文件名\n    },\n    rollupOptions: {\n      // 确保 external 包不会被打包到库中\n      external: [\"react\", \"react-dom\"],\n      output: [\n        {\n          // CommonJS\n          format: \"cjs\",\n          dir: \"dist/cjs\",\n        },\n        {\n          // ESM\n          format: \"es\",\n          dir: \"dist/esm\",\n        },\n        {\n          // UMD\n          format: \"umd\",\n          dir: \"dist/umd\",\n          name: \"f6-plugin\",\n          globals: {\n            react: \"React\",\n            \"react-dom\": \"ReactDOM\",\n          },\n        },\n      ],\n    },\n  },\n});\n"
  },
  {
    "path": "packages/site/CNAME",
    "content": "f6.antv.vision\n"
  },
  {
    "path": "packages/site/api-extractor.json",
    "content": "{\n  \"mainEntryPointFilePath\": \"<projectFolder>/lib/index.d.ts\",\n  \"apiReport\": {\n    \"enabled\": false\n  },\n  \"docModel\": {\n    \"enabled\": false\n  },\n  \"dtsRollup\": {\n    \"enabled\": true\n  },\n  \"tsdocMetadata\": {\n    \"enabled\": false\n  }\n}\n"
  },
  {
    "path": "packages/site/circle-dragging-i/989198863e10b38a@125.js",
    "content": "// https://observablehq.com/@d3/circle-dragging-i@125\nexport default function define(runtime, observer) {\n  const main = runtime.module();\n  main.variable(observer()).define([\"md\"], function (md) {\n    return md`\n# Drag (SVG)\n\nEach circle’s datum is an object with _x_ and _y_ properties. The circle is raised to the foreground at the start of a drag, and a temporary stroke is applied during drag for visual feedback.\n    `;\n  });\n  main\n    .variable(observer(\"chart\"))\n    .define(\n      \"chart\",\n      [\"d3\", \"width\", \"height\", \"radius\", \"drag\"],\n      function (d3, width, height, radius, drag) {\n        const svg = d3\n          .create(\"svg\")\n          .attr(\"viewBox\", [0, 0, width, height])\n          .attr(\"stroke-width\", 2);\n\n        const circles = d3.range(20).map((i) => ({\n          x: Math.random() * (width - radius * 2) + radius,\n          y: Math.random() * (height - radius * 2) + radius,\n        }));\n\n        svg\n          .selectAll(\"circle\")\n          .data(circles)\n          .join(\"circle\")\n          .attr(\"cx\", (d) => d.x)\n          .attr(\"cy\", (d) => d.y)\n          .attr(\"r\", radius)\n          .attr(\"fill\", (d, i) => d3.schemeCategory10[i % 10])\n          .call(drag);\n\n        return svg.node();\n      },\n    );\n  main.variable(observer(\"drag\")).define(\"drag\", [\"d3\"], function (d3) {\n    function dragstarted(event, d) {\n      d3.select(this).raise().attr(\"stroke\", \"black\");\n    }\n\n    function dragged(event, d) {\n      d3.select(this)\n        .attr(\"cx\", (d.x = event.x))\n        .attr(\"cy\", (d.y = event.y));\n    }\n\n    function dragended(event, d) {\n      d3.select(this).attr(\"stroke\", null);\n    }\n\n    return d3\n      .drag()\n      .on(\"start\", dragstarted)\n      .on(\"drag\", dragged)\n      .on(\"end\", dragended);\n  });\n  main.variable(observer(\"height\")).define(\"height\", function () {\n    return 600;\n  });\n  main.variable(observer(\"radius\")).define(\"radius\", function () {\n    return 32;\n  });\n  main.variable(observer(\"d3\")).define(\"d3\", [\"require\"], function (require) {\n    return require(\"d3@6\");\n  });\n  return main;\n}\n"
  },
  {
    "path": "packages/site/circle-dragging-i/LICENSE.txt",
    "content": "Copyright 2019–2020 Observable, Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "packages/site/circle-dragging-i/index.html",
    "content": "<!doctype html>\n<meta charset=\"utf-8\" />\n<title>Drag (SVG)</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"./inspector.css\" />\n<body>\n  <script type=\"module\">\n    import define from \"./index.js\";\n    import { Runtime, Library, Inspector } from \"./runtime.js\";\n\n    const runtime = new Runtime();\n    const main = runtime.module(define, Inspector.into(document.body));\n  </script>\n</body>\n"
  },
  {
    "path": "packages/site/circle-dragging-i/index.js",
    "content": "export { default } from \"./989198863e10b38a@125.js\";\n"
  },
  {
    "path": "packages/site/circle-dragging-i/inspector.css",
    "content": ":root {\n  --syntax_normal: #1b1e23;\n  --syntax_comment: #a9b0bc;\n  --syntax_number: #20a5ba;\n  --syntax_keyword: #c30771;\n  --syntax_atom: #10a778;\n  --syntax_string: #008ec4;\n  --syntax_error: #ffbedc;\n  --syntax_unknown_variable: #838383;\n  --syntax_known_variable: #005f87;\n  --syntax_matchbracket: #20bbfc;\n  --syntax_key: #6636b4;\n  --mono_fonts: 82%/1.5 Menlo, Consolas, monospace;\n}\n.observablehq--collapsed,\n.observablehq--expanded,\n.observablehq--function,\n.observablehq--gray,\n.observablehq--import,\n.observablehq--string:after,\n.observablehq--string:before {\n  color: var(--syntax_normal);\n}\n.observablehq--collapsed,\n.observablehq--inspect a {\n  cursor: pointer;\n}\n.observablehq--field {\n  text-indent: -1em;\n  margin-left: 1em;\n}\n.observablehq--empty {\n  color: var(--syntax_comment);\n}\n.observablehq--blue,\n.observablehq--keyword {\n  color: #3182bd;\n}\n.observablehq--forbidden,\n.observablehq--pink {\n  color: #e377c2;\n}\n.observablehq--orange {\n  color: #e6550d;\n}\n.observablehq--boolean,\n.observablehq--null,\n.observablehq--undefined {\n  color: var(--syntax_atom);\n}\n.observablehq--bigint,\n.observablehq--date,\n.observablehq--green,\n.observablehq--number,\n.observablehq--regexp,\n.observablehq--symbol {\n  color: var(--syntax_number);\n}\n.observablehq--index,\n.observablehq--key {\n  color: var(--syntax_key);\n}\n.observablehq--prototype-key {\n  color: #aaa;\n}\n.observablehq--empty {\n  font-style: oblique;\n}\n.observablehq--purple,\n.observablehq--string {\n  color: var(--syntax_string);\n}\n.observablehq--error,\n.observablehq--red {\n  color: #e7040f;\n}\n.observablehq--inspect {\n  font: var(--mono_fonts);\n  overflow-x: auto;\n  display: block;\n  white-space: pre;\n}\n.observablehq--error .observablehq--inspect {\n  word-break: break-all;\n  white-space: pre-wrap;\n}\n"
  },
  {
    "path": "packages/site/circle-dragging-i/package.json",
    "content": "{\n  \"name\": \"@d3/circle-dragging-i\",\n  \"main\": \"989198863e10b38a@125.js\",\n  \"version\": \"125.0.0\",\n  \"homepage\": \"https://observablehq.com/@d3/circle-dragging-i\",\n  \"author\": {\n    \"name\": \"D3\",\n    \"url\": \"https://observablehq.com/@d3\"\n  },\n  \"type\": \"module\",\n  \"peerDependencies\": {\n    \"@observablehq/runtime\": \"4\"\n  }\n}\n"
  },
  {
    "path": "packages/site/circle-dragging-i/runtime.js",
    "content": "// @observablehq/runtime v4.10.0 Copyright 2021 Observable, Inc.\nfunction e(e, t, n) {\n  n = n || {};\n  var r = e.ownerDocument,\n    i = r.defaultView.CustomEvent;\n  \"function\" == typeof i\n    ? (i = new i(t, { detail: n }))\n    : ((i = r.createEvent(\"Event\")).initEvent(t, !1, !1), (i.detail = n)),\n    e.dispatchEvent(i);\n}\nfunction t(e) {\n  return (\n    Array.isArray(e) ||\n    e instanceof Int8Array ||\n    e instanceof Int16Array ||\n    e instanceof Int32Array ||\n    e instanceof Uint8Array ||\n    e instanceof Uint8ClampedArray ||\n    e instanceof Uint16Array ||\n    e instanceof Uint32Array ||\n    e instanceof Float32Array ||\n    e instanceof Float64Array\n  );\n}\nfunction n(e) {\n  return e === (0 | e) + \"\";\n}\nfunction r(e) {\n  const t = document.createElement(\"span\");\n  return (\n    (t.className = \"observablehq--cellname\"), (t.textContent = `${e} = `), t\n  );\n}\nconst i = Symbol.prototype.toString;\nfunction o(e) {\n  return i.call(e);\n}\nconst {\n    getOwnPropertySymbols: a,\n    prototype: { hasOwnProperty: s },\n  } = Object,\n  { toStringTag: u } = Symbol,\n  l = {},\n  c = a;\nfunction d(e, t) {\n  return s.call(e, t);\n}\nfunction f(e) {\n  return e[u] || (e.constructor && e.constructor.name) || \"Object\";\n}\nfunction p(e, t) {\n  try {\n    const n = e[t];\n    return n && n.constructor, n;\n  } catch (e) {\n    return l;\n  }\n}\nconst h = [\n  { symbol: \"@@__IMMUTABLE_INDEXED__@@\", name: \"Indexed\", modifier: !0 },\n  { symbol: \"@@__IMMUTABLE_KEYED__@@\", name: \"Keyed\", modifier: !0 },\n  { symbol: \"@@__IMMUTABLE_LIST__@@\", name: \"List\", arrayish: !0 },\n  { symbol: \"@@__IMMUTABLE_MAP__@@\", name: \"Map\" },\n  {\n    symbol: \"@@__IMMUTABLE_ORDERED__@@\",\n    name: \"Ordered\",\n    modifier: !0,\n    prefix: !0,\n  },\n  { symbol: \"@@__IMMUTABLE_RECORD__@@\", name: \"Record\" },\n  { symbol: \"@@__IMMUTABLE_SET__@@\", name: \"Set\", arrayish: !0, setish: !0 },\n  { symbol: \"@@__IMMUTABLE_STACK__@@\", name: \"Stack\", arrayish: !0 },\n];\nfunction m(e) {\n  try {\n    let t = h.filter(({ symbol: t }) => !0 === e[t]);\n    if (!t.length) return;\n    const n = t.find((e) => !e.modifier),\n      r = \"Map\" === n.name && t.find((e) => e.modifier && e.prefix),\n      i = t.some((e) => e.arrayish),\n      o = t.some((e) => e.setish);\n    return {\n      name: `${r ? r.name : \"\"}${n.name}`,\n      symbols: t,\n      arrayish: i && !o,\n      setish: o,\n    };\n  } catch (e) {\n    return null;\n  }\n}\nconst { getPrototypeOf: v, getOwnPropertyDescriptors: b } = Object,\n  _ = v({});\nfunction w(n, i, o, a) {\n  let s,\n    u,\n    l,\n    c,\n    d = t(n);\n  n instanceof Map\n    ? n instanceof n.constructor\n      ? ((s = `Map(${n.size})`), (u = g))\n      : ((s = \"Map()\"), (u = j))\n    : n instanceof Set\n    ? n instanceof n.constructor\n      ? ((s = `Set(${n.size})`), (u = y))\n      : ((s = \"Set()\"), (u = j))\n    : d\n    ? ((s = `${n.constructor.name}(${n.length})`), (u = x))\n    : (c = m(n))\n    ? ((s = `Immutable.${c.name}${\"Record\" === c.name ? \"\" : `(${n.size})`}`),\n      (d = c.arrayish),\n      (u = c.arrayish ? C : c.setish ? E : P))\n    : a\n    ? ((s = f(n)), (u = N))\n    : ((s = f(n)), (u = j));\n  const p = document.createElement(\"span\");\n  (p.className = \"observablehq--expanded\"), o && p.appendChild(r(o));\n  const h = p.appendChild(document.createElement(\"a\"));\n  (h.innerHTML =\n    \"<svg width=8 height=8 class='observablehq--caret'>\\n    <path d='M4 7L0 1h8z' fill='currentColor' />\\n  </svg>\"),\n    h.appendChild(document.createTextNode(`${s}${d ? \" [\" : \" {\"}`)),\n    h.addEventListener(\"mouseup\", function (e) {\n      e.stopPropagation(), ae(p, k(n, null, o, a));\n    }),\n    (u = u(n));\n  for (let e = 0; !(l = u.next()).done && e < 20; ++e) p.appendChild(l.value);\n  if (!l.done) {\n    const t = p.appendChild(document.createElement(\"a\"));\n    (t.className = \"observablehq--field\"),\n      (t.style.display = \"block\"),\n      t.appendChild(document.createTextNode(\"  … more\")),\n      t.addEventListener(\"mouseup\", function (t) {\n        t.stopPropagation(),\n          p.insertBefore(l.value, p.lastChild.previousSibling);\n        for (let e = 0; !(l = u.next()).done && e < 19; ++e)\n          p.insertBefore(l.value, p.lastChild.previousSibling);\n        l.done && p.removeChild(p.lastChild.previousSibling), e(p, \"load\");\n      });\n  }\n  return p.appendChild(document.createTextNode(d ? \"]\" : \"}\")), p;\n}\nfunction* g(e) {\n  for (const [t, n] of e) yield M(t, n);\n  yield* j(e);\n}\nfunction* y(e) {\n  for (const t of e) yield L(t);\n  yield* j(e);\n}\nfunction* E(e) {\n  for (const t of e) yield L(t);\n}\nfunction* x(e) {\n  for (let t = 0, n = e.length; t < n; ++t)\n    t in e && (yield q(t, p(e, t), \"observablehq--index\"));\n  for (const t in e)\n    !n(t) && d(e, t) && (yield q(t, p(e, t), \"observablehq--key\"));\n  for (const t of c(e)) yield q(o(t), p(e, t), \"observablehq--symbol\");\n}\nfunction* C(e) {\n  let t = 0;\n  for (const n = e.size; t < n; ++t) yield q(t, e.get(t), !0);\n}\nfunction* N(e) {\n  for (const t in b(e)) yield q(t, p(e, t), \"observablehq--key\");\n  for (const t of c(e)) yield q(o(t), p(e, t), \"observablehq--symbol\");\n  const t = v(e);\n  t && t !== _ && (yield S(t));\n}\nfunction* j(e) {\n  for (const t in e) d(e, t) && (yield q(t, p(e, t), \"observablehq--key\"));\n  for (const t of c(e)) yield q(o(t), p(e, t), \"observablehq--symbol\");\n  const t = v(e);\n  t && t !== _ && (yield S(t));\n}\nfunction* P(e) {\n  for (const [t, n] of e) yield q(t, n, \"observablehq--key\");\n}\nfunction S(e) {\n  const t = document.createElement(\"div\"),\n    n = t.appendChild(document.createElement(\"span\"));\n  return (\n    (t.className = \"observablehq--field\"),\n    (n.className = \"observablehq--prototype-key\"),\n    (n.textContent = \"  <prototype>\"),\n    t.appendChild(document.createTextNode(\": \")),\n    t.appendChild(oe(e, void 0, void 0, void 0, !0)),\n    t\n  );\n}\nfunction q(e, t, n) {\n  const r = document.createElement(\"div\"),\n    i = r.appendChild(document.createElement(\"span\"));\n  return (\n    (r.className = \"observablehq--field\"),\n    (i.className = n),\n    (i.textContent = `  ${e}`),\n    r.appendChild(document.createTextNode(\": \")),\n    r.appendChild(oe(t)),\n    r\n  );\n}\nfunction M(e, t) {\n  const n = document.createElement(\"div\");\n  return (\n    (n.className = \"observablehq--field\"),\n    n.appendChild(document.createTextNode(\"  \")),\n    n.appendChild(oe(e)),\n    n.appendChild(document.createTextNode(\" => \")),\n    n.appendChild(oe(t)),\n    n\n  );\n}\nfunction L(e) {\n  const t = document.createElement(\"div\");\n  return (\n    (t.className = \"observablehq--field\"),\n    t.appendChild(document.createTextNode(\"  \")),\n    t.appendChild(oe(e)),\n    t\n  );\n}\nfunction $(e) {\n  const t = window.getSelection();\n  return (\n    \"Range\" === t.type &&\n    (t.containsNode(e, !0) ||\n      t.anchorNode.isSelfOrDescendant(e) ||\n      t.focusNode.isSelfOrDescendant(e))\n  );\n}\nfunction k(e, n, i, o) {\n  let a,\n    s,\n    u,\n    l,\n    c = t(e);\n  if (\n    (e instanceof Map\n      ? e instanceof e.constructor\n        ? ((a = `Map(${e.size})`), (s = O))\n        : ((a = \"Map()\"), (s = D))\n      : e instanceof Set\n      ? e instanceof e.constructor\n        ? ((a = `Set(${e.size})`), (s = T))\n        : ((a = \"Set()\"), (s = D))\n      : c\n      ? ((a = `${e.constructor.name}(${e.length})`), (s = R))\n      : (l = m(e))\n      ? ((a = `Immutable.${l.name}${\"Record\" === l.name ? \"\" : `(${e.size})`}`),\n        (c = l.arrayish),\n        (s = l.arrayish ? U : l.setish ? A : I))\n      : ((a = f(e)), (s = D)),\n    n)\n  ) {\n    const t = document.createElement(\"span\");\n    return (\n      (t.className = \"observablehq--shallow\"),\n      i && t.appendChild(r(i)),\n      t.appendChild(document.createTextNode(a)),\n      t.addEventListener(\"mouseup\", function (n) {\n        $(t) || (n.stopPropagation(), ae(t, k(e)));\n      }),\n      t\n    );\n  }\n  const d = document.createElement(\"span\");\n  (d.className = \"observablehq--collapsed\"), i && d.appendChild(r(i));\n  const p = d.appendChild(document.createElement(\"a\"));\n  (p.innerHTML =\n    \"<svg width=8 height=8 class='observablehq--caret'>\\n    <path d='M7 4L1 8V0z' fill='currentColor' />\\n  </svg>\"),\n    p.appendChild(document.createTextNode(`${a}${c ? \" [\" : \" {\"}`)),\n    d.addEventListener(\n      \"mouseup\",\n      function (t) {\n        $(d) || (t.stopPropagation(), ae(d, w(e, 0, i, o)));\n      },\n      !0,\n    ),\n    (s = s(e));\n  for (let e = 0; !(u = s.next()).done && e < 20; ++e)\n    e > 0 && d.appendChild(document.createTextNode(\", \")),\n      d.appendChild(u.value);\n  return (\n    u.done || d.appendChild(document.createTextNode(\", …\")),\n    d.appendChild(document.createTextNode(c ? \"]\" : \"}\")),\n    d\n  );\n}\nfunction* O(e) {\n  for (const [t, n] of e) yield B(t, n);\n  yield* D(e);\n}\nfunction* T(e) {\n  for (const t of e) yield oe(t, !0);\n  yield* D(e);\n}\nfunction* A(e) {\n  for (const t of e) yield oe(t, !0);\n}\nfunction* U(e) {\n  let t = -1,\n    n = 0;\n  for (const r = e.size; n < r; ++n)\n    n > t + 1 && (yield F(n - t - 1)), yield oe(e.get(n), !0), (t = n);\n  n > t + 1 && (yield F(n - t - 1));\n}\nfunction* R(e) {\n  let t = -1,\n    r = 0;\n  for (const n = e.length; r < n; ++r)\n    r in e &&\n      (r > t + 1 && (yield F(r - t - 1)), yield oe(p(e, r), !0), (t = r));\n  r > t + 1 && (yield F(r - t - 1));\n  for (const t in e)\n    !n(t) && d(e, t) && (yield z(t, p(e, t), \"observablehq--key\"));\n  for (const t of c(e)) yield z(o(t), p(e, t), \"observablehq--symbol\");\n}\nfunction* D(e) {\n  for (const t in e) d(e, t) && (yield z(t, p(e, t), \"observablehq--key\"));\n  for (const t of c(e)) yield z(o(t), p(e, t), \"observablehq--symbol\");\n}\nfunction* I(e) {\n  for (const [t, n] of e) yield z(t, n, \"observablehq--key\");\n}\nfunction F(e) {\n  const t = document.createElement(\"span\");\n  return (\n    (t.className = \"observablehq--empty\"),\n    (t.textContent = 1 === e ? \"empty\" : `empty × ${e}`),\n    t\n  );\n}\nfunction z(e, t, n) {\n  const r = document.createDocumentFragment(),\n    i = r.appendChild(document.createElement(\"span\"));\n  return (\n    (i.className = n),\n    (i.textContent = e),\n    r.appendChild(document.createTextNode(\": \")),\n    r.appendChild(oe(t, !0)),\n    r\n  );\n}\nfunction B(e, t) {\n  const n = document.createDocumentFragment();\n  return (\n    n.appendChild(oe(e, !0)),\n    n.appendChild(document.createTextNode(\" => \")),\n    n.appendChild(oe(t, !0)),\n    n\n  );\n}\nfunction H(e, t) {\n  var n = e + \"\",\n    r = n.length;\n  return r < t ? new Array(t - r + 1).join(0) + n : n;\n}\nfunction W(e) {\n  return e < 0 ? \"-\" + H(-e, 6) : e > 9999 ? \"+\" + H(e, 6) : H(e, 4);\n}\nvar V = Error.prototype.toString;\nvar G = RegExp.prototype.toString;\nfunction K(e) {\n  return e.replace(/[\\\\`\\x00-\\x09\\x0b-\\x19]|\\${/g, Y);\n}\nfunction Y(e) {\n  var t = e.charCodeAt(0);\n  switch (t) {\n    case 8:\n      return \"\\\\b\";\n    case 9:\n      return \"\\\\t\";\n    case 11:\n      return \"\\\\v\";\n    case 12:\n      return \"\\\\f\";\n    case 13:\n      return \"\\\\r\";\n  }\n  return t < 16\n    ? \"\\\\x0\" + t.toString(16)\n    : t < 32\n    ? \"\\\\x\" + t.toString(16)\n    : \"\\\\\" + e;\n}\nfunction J(e, t) {\n  for (var n = 0; t.exec(e); ) ++n;\n  return n;\n}\nvar X = Function.prototype.toString,\n  Q = { prefix: \"async ƒ\" },\n  Z = { prefix: \"async ƒ*\" },\n  ee = { prefix: \"class\" },\n  te = { prefix: \"ƒ\" },\n  ne = { prefix: \"ƒ*\" };\nfunction re(e, t, n) {\n  var i = document.createElement(\"span\");\n  (i.className = \"observablehq--function\"), n && i.appendChild(r(n));\n  var o = i.appendChild(document.createElement(\"span\"));\n  return (\n    (o.className = \"observablehq--keyword\"),\n    (o.textContent = e.prefix),\n    i.appendChild(document.createTextNode(t)),\n    i\n  );\n}\nconst {\n  prototype: { toString: ie },\n} = Object;\nfunction oe(e, t, n, i, a) {\n  let s = typeof e;\n  switch (s) {\n    case \"boolean\":\n    case \"undefined\":\n      e += \"\";\n      break;\n    case \"number\":\n      e = 0 === e && 1 / e < 0 ? \"-0\" : e + \"\";\n      break;\n    case \"bigint\":\n      e += \"n\";\n      break;\n    case \"symbol\":\n      e = o(e);\n      break;\n    case \"function\":\n      return (function (e, t) {\n        var n,\n          r,\n          i = X.call(e);\n        switch (e.constructor && e.constructor.name) {\n          case \"AsyncFunction\":\n            n = Q;\n            break;\n          case \"AsyncGeneratorFunction\":\n            n = Z;\n            break;\n          case \"GeneratorFunction\":\n            n = ne;\n            break;\n          default:\n            n = /^class\\b/.test(i) ? ee : te;\n        }\n        return n === ee\n          ? re(n, \"\", t)\n          : (r = /^(?:async\\s*)?(\\w+)\\s*=>/.exec(i))\n          ? re(n, \"(\" + r[1] + \")\", t)\n          : (r = /^(?:async\\s*)?\\(\\s*(\\w+(?:\\s*,\\s*\\w+)*)?\\s*\\)/.exec(i)) ||\n            (r =\n              /^(?:async\\s*)?function(?:\\s*\\*)?(?:\\s*\\w+)?\\s*\\(\\s*(\\w+(?:\\s*,\\s*\\w+)*)?\\s*\\)/.exec(\n                i,\n              ))\n          ? re(n, r[1] ? \"(\" + r[1].replace(/\\s*,\\s*/g, \", \") + \")\" : \"()\", t)\n          : re(n, \"(…)\", t);\n      })(e, i);\n    case \"string\":\n      return (function (e, t, n, i) {\n        if (!1 === t) {\n          if (J(e, /[\"\\n]/g) <= J(e, /`|\\${/g)) {\n            const t = document.createElement(\"span\");\n            i && t.appendChild(r(i));\n            const n = t.appendChild(document.createElement(\"span\"));\n            return (\n              (n.className = \"observablehq--string\"),\n              (n.textContent = JSON.stringify(e)),\n              t\n            );\n          }\n          const o = e.split(\"\\n\");\n          if (o.length > 20 && !n) {\n            const n = document.createElement(\"div\");\n            i && n.appendChild(r(i));\n            const a = n.appendChild(document.createElement(\"span\"));\n            (a.className = \"observablehq--string\"),\n              (a.textContent = \"`\" + K(o.slice(0, 20).join(\"\\n\")));\n            const s = n.appendChild(document.createElement(\"span\")),\n              u = o.length - 20;\n            return (\n              (s.textContent = `Show ${u} truncated line${u > 1 ? \"s\" : \"\"}`),\n              (s.className = \"observablehq--string-expand\"),\n              s.addEventListener(\"mouseup\", function (r) {\n                r.stopPropagation(), ae(n, oe(e, t, !0, i));\n              }),\n              n\n            );\n          }\n          const a = document.createElement(\"span\");\n          i && a.appendChild(r(i));\n          const s = a.appendChild(document.createElement(\"span\"));\n          return (\n            (s.className =\n              \"observablehq--string\" + (n ? \" observablehq--expanded\" : \"\")),\n            (s.textContent = \"`\" + K(e) + \"`\"),\n            a\n          );\n        }\n        const o = document.createElement(\"span\");\n        i && o.appendChild(r(i));\n        const a = o.appendChild(document.createElement(\"span\"));\n        return (\n          (a.className = \"observablehq--string\"),\n          (a.textContent = JSON.stringify(\n            e.length > 100 ? `${e.slice(0, 50)}…${e.slice(-49)}` : e,\n          )),\n          o\n        );\n      })(e, t, n, i);\n    default:\n      if (null === e) {\n        (s = null), (e = \"null\");\n        break;\n      }\n      if (e instanceof Date) {\n        (s = \"date\"),\n          (u = e),\n          (e = isNaN(u)\n            ? \"Invalid Date\"\n            : (function (e) {\n                return (\n                  0 === e.getUTCMilliseconds() &&\n                  0 === e.getUTCSeconds() &&\n                  0 === e.getUTCMinutes() &&\n                  0 === e.getUTCHours()\n                );\n              })(u)\n            ? W(u.getUTCFullYear()) +\n              \"-\" +\n              H(u.getUTCMonth() + 1, 2) +\n              \"-\" +\n              H(u.getUTCDate(), 2)\n            : W(u.getFullYear()) +\n              \"-\" +\n              H(u.getMonth() + 1, 2) +\n              \"-\" +\n              H(u.getDate(), 2) +\n              \"T\" +\n              H(u.getHours(), 2) +\n              \":\" +\n              H(u.getMinutes(), 2) +\n              (u.getMilliseconds()\n                ? \":\" + H(u.getSeconds(), 2) + \".\" + H(u.getMilliseconds(), 3)\n                : u.getSeconds()\n                ? \":\" + H(u.getSeconds(), 2)\n                : \"\"));\n        break;\n      }\n      if (e === l) {\n        (s = \"forbidden\"), (e = \"[forbidden]\");\n        break;\n      }\n      switch (ie.call(e)) {\n        case \"[object RegExp]\":\n          (s = \"regexp\"),\n            (e = (function (e) {\n              return G.call(e);\n            })(e));\n          break;\n        case \"[object Error]\":\n        case \"[object DOMException]\":\n          (s = \"error\"),\n            (e = (function (e) {\n              return e.stack || V.call(e);\n            })(e));\n          break;\n        default:\n          return (n ? w : k)(e, t, i, a);\n      }\n  }\n  var u;\n  const c = document.createElement(\"span\");\n  i && c.appendChild(r(i));\n  const d = c.appendChild(document.createElement(\"span\"));\n  return (d.className = `observablehq--${s}`), (d.textContent = e), c;\n}\nfunction ae(t, n) {\n  t.classList.contains(\"observablehq--inspect\") &&\n    n.classList.add(\"observablehq--inspect\"),\n    t.parentNode.replaceChild(n, t),\n    e(n, \"load\");\n}\nconst se = /\\s+\\(\\d+:\\d+\\)$/m;\nclass ue {\n  constructor(e) {\n    if (!e) throw new Error(\"invalid node\");\n    (this._node = e), e.classList.add(\"observablehq\");\n  }\n  pending() {\n    const { _node: e } = this;\n    e.classList.remove(\"observablehq--error\"),\n      e.classList.add(\"observablehq--running\");\n  }\n  fulfilled(t, n) {\n    const { _node: r } = this;\n    if (\n      ((!(t instanceof Element || t instanceof Text) ||\n        (t.parentNode && t.parentNode !== r)) &&\n        (t = oe(\n          t,\n          !1,\n          r.firstChild &&\n            r.firstChild.classList &&\n            r.firstChild.classList.contains(\"observablehq--expanded\"),\n          n,\n        )).classList.add(\"observablehq--inspect\"),\n      r.classList.remove(\"observablehq--running\", \"observablehq--error\"),\n      r.firstChild !== t)\n    )\n      if (r.firstChild) {\n        for (; r.lastChild !== r.firstChild; ) r.removeChild(r.lastChild);\n        r.replaceChild(t, r.firstChild);\n      } else r.appendChild(t);\n    e(r, \"update\");\n  }\n  rejected(t, n) {\n    const { _node: i } = this;\n    for (\n      i.classList.remove(\"observablehq--running\"),\n        i.classList.add(\"observablehq--error\");\n      i.lastChild;\n\n    )\n      i.removeChild(i.lastChild);\n    var o = document.createElement(\"div\");\n    (o.className = \"observablehq--inspect\"),\n      n && o.appendChild(r(n)),\n      o.appendChild(document.createTextNode((t + \"\").replace(se, \"\"))),\n      i.appendChild(o),\n      e(i, \"error\", { error: t });\n  }\n}\nue.into = function (e) {\n  if (\"string\" == typeof e && null == (e = document.querySelector(e)))\n    throw new Error(\"container not found\");\n  return function () {\n    return new ue(e.appendChild(document.createElement(\"div\")));\n  };\n};\nconst le = new Map(),\n  ce = [],\n  de = ce.map,\n  fe = ce.some,\n  pe = ce.hasOwnProperty,\n  he = \"https://cdn.jsdelivr.net/npm/\",\n  me = /^((?:@[^/@]+\\/)?[^/@]+)(?:@([^/]+))?(?:\\/(.*))?$/,\n  ve = /^\\d+\\.\\d+\\.\\d+(-[\\w-.+]+)?$/,\n  be = /\\.[^/]*$/,\n  _e = [\"unpkg\", \"jsdelivr\", \"browser\", \"main\"];\nclass RequireError extends Error {\n  constructor(e) {\n    super(e);\n  }\n}\nfunction we(e) {\n  const t = me.exec(e);\n  return t && { name: t[1], version: t[2], path: t[3] };\n}\nfunction ge(e) {\n  const t = `${he}${e.name}${e.version ? `@${e.version}` : \"\"}/package.json`;\n  let n = le.get(t);\n  return (\n    n ||\n      le.set(\n        t,\n        (n = fetch(t).then((e) => {\n          if (!e.ok) throw new RequireError(\"unable to load package.json\");\n          return e.redirected && !le.has(e.url) && le.set(e.url, n), e.json();\n        })),\n      ),\n    n\n  );\n}\nRequireError.prototype.name = RequireError.name;\nvar ye = Ee(async function (e, t) {\n  if (\n    (e.startsWith(he) && (e = e.substring(he.length)), /^(\\w+:)|\\/\\//i.test(e))\n  )\n    return e;\n  if (/^[.]{0,2}\\//i.test(e)) return new URL(e, null == t ? location : t).href;\n  if (!e.length || /^[\\s._]/.test(e) || /\\s$/.test(e))\n    throw new RequireError(\"illegal name\");\n  const n = we(e);\n  if (!n) return `${he}${e}`;\n  if (!n.version && null != t && t.startsWith(he)) {\n    const e = await ge(we(t.substring(he.length)));\n    n.version =\n      (e.dependencies && e.dependencies[n.name]) ||\n      (e.peerDependencies && e.peerDependencies[n.name]);\n  }\n  if (\n    (n.path && !be.test(n.path) && (n.path += \".js\"),\n    n.path && n.version && ve.test(n.version))\n  )\n    return `${he}${n.name}@${n.version}/${n.path}`;\n  const r = await ge(n);\n  return `${he}${r.name}@${r.version}/${\n    n.path ||\n    (function (e) {\n      for (const t of _e) {\n        const n = e[t];\n        if (\"string\" == typeof n) return be.test(n) ? n : `${n}.js`;\n      }\n    })(r) ||\n    \"index.js\"\n  }`;\n});\nfunction Ee(e) {\n  const t = new Map(),\n    n = i(null);\n  function r(e) {\n    if (\"string\" != typeof e) return e;\n    let n = t.get(e);\n    return (\n      n ||\n        t.set(\n          e,\n          (n = new Promise((t, n) => {\n            const r = document.createElement(\"script\");\n            (r.onload = () => {\n              try {\n                t(ce.pop()(i(e)));\n              } catch (e) {\n                n(new RequireError(\"invalid module\"));\n              }\n              r.remove();\n            }),\n              (r.onerror = () => {\n                n(new RequireError(\"unable to load module\")), r.remove();\n              }),\n              (r.async = !0),\n              (r.src = e),\n              (window.define = je),\n              document.head.appendChild(r);\n          })),\n        ),\n      n\n    );\n  }\n  function i(t) {\n    return (n) => Promise.resolve(e(n, t)).then(r);\n  }\n  function o(e) {\n    return arguments.length > 1\n      ? Promise.all(de.call(arguments, n)).then(xe)\n      : n(e);\n  }\n  return (\n    (o.alias = function (t) {\n      return Ee((n, r) =>\n        n in t && ((r = null), \"string\" != typeof (n = t[n])) ? n : e(n, r),\n      );\n    }),\n    (o.resolve = e),\n    o\n  );\n}\nfunction xe(e) {\n  const t = {};\n  for (const n of e)\n    for (const e in n)\n      pe.call(n, e) &&\n        (null == n[e]\n          ? Object.defineProperty(t, e, { get: Ce(n, e) })\n          : (t[e] = n[e]));\n  return t;\n}\nfunction Ce(e, t) {\n  return () => e[t];\n}\nfunction Ne(e) {\n  return \"exports\" === (e += \"\") || \"module\" === e;\n}\nfunction je(e, t, n) {\n  const r = arguments.length;\n  r < 2\n    ? ((n = e), (t = []))\n    : r < 3 && ((n = t), (t = \"string\" == typeof e ? [] : e)),\n    ce.push(\n      fe.call(t, Ne)\n        ? (e) => {\n            const r = {},\n              i = { exports: r };\n            return Promise.all(\n              de.call(t, (t) =>\n                \"exports\" === (t += \"\") ? r : \"module\" === t ? i : e(t),\n              ),\n            ).then((e) => (n.apply(null, e), i.exports));\n          }\n        : (e) =>\n            Promise.all(de.call(t, e)).then((e) =>\n              \"function\" == typeof n ? n.apply(null, e) : n,\n            ),\n    );\n}\nasync function Pe(e) {\n  const t = await fetch(await e.url());\n  if (!t.ok) throw new Error(`Unable to load file: ${e.name}`);\n  return t;\n}\nasync function Se(e, t, { array: n = !1, typed: r = !1 } = {}) {\n  const [i, o] = await Promise.all([\n    e.text(),\n    ye(\"d3-dsv@2.0.0/dist/d3-dsv.min.js\"),\n  ]);\n  return (\n    \"\\t\" === t\n      ? n\n        ? o.tsvParseRows\n        : o.tsvParse\n      : n\n      ? o.csvParseRows\n      : o.csvParse\n  )(i, r && o.autoType);\n}\nje.amd = {};\nclass FileAttachment {\n  constructor(e, t) {\n    Object.defineProperties(this, {\n      _url: { value: e },\n      name: { value: t, enumerable: !0 },\n    });\n  }\n  async url() {\n    return (await this._url) + \"\";\n  }\n  async blob() {\n    return (await Pe(this)).blob();\n  }\n  async arrayBuffer() {\n    return (await Pe(this)).arrayBuffer();\n  }\n  async text() {\n    return (await Pe(this)).text();\n  }\n  async json() {\n    return (await Pe(this)).json();\n  }\n  async stream() {\n    return (await Pe(this)).body;\n  }\n  async csv(e) {\n    return Se(this, \",\", e);\n  }\n  async tsv(e) {\n    return Se(this, \"\\t\", e);\n  }\n  async image() {\n    const e = await this.url();\n    return new Promise((t, n) => {\n      const r = new Image();\n      new URL(e, document.baseURI).origin !== new URL(location).origin &&\n        (r.crossOrigin = \"anonymous\"),\n        (r.onload = () => t(r)),\n        (r.onerror = () => n(new Error(`Unable to load file: ${this.name}`))),\n        (r.src = e);\n    });\n  }\n}\nfunction qe(e) {\n  throw new Error(`File not found: ${e}`);\n}\nvar Me = {\n  math: \"http://www.w3.org/1998/Math/MathML\",\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: \"http://www.w3.org/1999/xhtml\",\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\",\n};\nvar Le = 0;\nfunction $e(e) {\n  (this.id = e), (this.href = new URL(`#${e}`, location) + \"\");\n}\n$e.prototype.toString = function () {\n  return \"url(\" + this.href + \")\";\n};\nvar ke = {\n  canvas: function (e, t) {\n    var n = document.createElement(\"canvas\");\n    return (n.width = e), (n.height = t), n;\n  },\n  context2d: function (e, t, n) {\n    null == n && (n = devicePixelRatio);\n    var r = document.createElement(\"canvas\");\n    (r.width = e * n), (r.height = t * n), (r.style.width = e + \"px\");\n    var i = r.getContext(\"2d\");\n    return i.scale(n, n), i;\n  },\n  download: function (e, t = \"untitled\", n = \"Save\") {\n    const r = document.createElement(\"a\"),\n      i = r.appendChild(document.createElement(\"button\"));\n    async function o() {\n      await new Promise(requestAnimationFrame),\n        URL.revokeObjectURL(r.href),\n        r.removeAttribute(\"href\"),\n        (i.textContent = n),\n        (i.disabled = !1);\n    }\n    return (\n      (i.textContent = n),\n      (r.download = t),\n      (r.onclick = async (t) => {\n        if (((i.disabled = !0), r.href)) return o();\n        i.textContent = \"Saving…\";\n        try {\n          const t = await (\"function\" == typeof e ? e() : e);\n          (i.textContent = \"Download\"), (r.href = URL.createObjectURL(t));\n        } catch (e) {\n          i.textContent = n;\n        }\n        if (t.eventPhase) return o();\n        i.disabled = !1;\n      }),\n      r\n    );\n  },\n  element: function (e, t) {\n    var n,\n      r = (e += \"\"),\n      i = r.indexOf(\":\");\n    i >= 0 && \"xmlns\" !== (r = e.slice(0, i)) && (e = e.slice(i + 1));\n    var o = Me.hasOwnProperty(r)\n      ? document.createElementNS(Me[r], e)\n      : document.createElement(e);\n    if (t)\n      for (var a in t)\n        (i = (r = a).indexOf(\":\")),\n          (n = t[a]),\n          i >= 0 && \"xmlns\" !== (r = a.slice(0, i)) && (a = a.slice(i + 1)),\n          Me.hasOwnProperty(r)\n            ? o.setAttributeNS(Me[r], a, n)\n            : o.setAttribute(a, n);\n    return o;\n  },\n  input: function (e) {\n    var t = document.createElement(\"input\");\n    return null != e && (t.type = e), t;\n  },\n  range: function (e, t, n) {\n    1 === arguments.length && ((t = e), (e = null));\n    var r = document.createElement(\"input\");\n    return (\n      (r.min = e = null == e ? 0 : +e),\n      (r.max = t = null == t ? 1 : +t),\n      (r.step = null == n ? \"any\" : (n = +n)),\n      (r.type = \"range\"),\n      r\n    );\n  },\n  select: function (e) {\n    var t = document.createElement(\"select\");\n    return (\n      Array.prototype.forEach.call(e, function (e) {\n        var n = document.createElement(\"option\");\n        (n.value = n.textContent = e), t.appendChild(n);\n      }),\n      t\n    );\n  },\n  svg: function (e, t) {\n    var n = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    return (\n      n.setAttribute(\"viewBox\", [0, 0, e, t]),\n      n.setAttribute(\"width\", e),\n      n.setAttribute(\"height\", t),\n      n\n    );\n  },\n  text: function (e) {\n    return document.createTextNode(e);\n  },\n  uid: function (e) {\n    return new $e(\"O-\" + (null == e ? \"\" : e + \"-\") + ++Le);\n  },\n};\nvar Oe = {\n  buffer: function (e) {\n    return new Promise(function (t, n) {\n      var r = new FileReader();\n      (r.onload = function () {\n        t(r.result);\n      }),\n        (r.onerror = n),\n        r.readAsArrayBuffer(e);\n    });\n  },\n  text: function (e) {\n    return new Promise(function (t, n) {\n      var r = new FileReader();\n      (r.onload = function () {\n        t(r.result);\n      }),\n        (r.onerror = n),\n        r.readAsText(e);\n    });\n  },\n  url: function (e) {\n    return new Promise(function (t, n) {\n      var r = new FileReader();\n      (r.onload = function () {\n        t(r.result);\n      }),\n        (r.onerror = n),\n        r.readAsDataURL(e);\n    });\n  },\n};\nfunction Te() {\n  return this;\n}\nfunction Ae(e, t) {\n  let n = !1;\n  if (\"function\" != typeof t) throw new Error(\"dispose is not a function\");\n  return {\n    [Symbol.iterator]: Te,\n    next: () => (n ? { done: !0 } : ((n = !0), { done: !1, value: e })),\n    return: () => ((n = !0), t(e), { done: !0 }),\n    throw: () => ({ done: (n = !0) }),\n  };\n}\nfunction Ue(e) {\n  let t,\n    n,\n    r = !1;\n  const i = e(function (e) {\n    n ? (n(e), (n = null)) : (r = !0);\n    return (t = e);\n  });\n  if (null != i && \"function\" != typeof i)\n    throw new Error(\n      \"function\" == typeof i.then\n        ? \"async initializers are not supported\"\n        : \"initializer returned something, but not a dispose function\",\n    );\n  return {\n    [Symbol.iterator]: Te,\n    throw: () => ({ done: !0 }),\n    return: () => (null != i && i(), { done: !0 }),\n    next: function () {\n      return {\n        done: !1,\n        value: r ? ((r = !1), Promise.resolve(t)) : new Promise((e) => (n = e)),\n      };\n    },\n  };\n}\nfunction Re(e) {\n  switch (e.type) {\n    case \"range\":\n    case \"number\":\n      return e.valueAsNumber;\n    case \"date\":\n      return e.valueAsDate;\n    case \"checkbox\":\n      return e.checked;\n    case \"file\":\n      return e.multiple ? e.files : e.files[0];\n    case \"select-multiple\":\n      return Array.from(e.selectedOptions, (e) => e.value);\n    default:\n      return e.value;\n  }\n}\nvar De = {\n  disposable: Ae,\n  filter: function* (e, t) {\n    for (var n, r = -1; !(n = e.next()).done; )\n      t(n.value, ++r) && (yield n.value);\n  },\n  input: function (e) {\n    return Ue(function (t) {\n      var n = (function (e) {\n          switch (e.type) {\n            case \"button\":\n            case \"submit\":\n            case \"checkbox\":\n              return \"click\";\n            case \"file\":\n              return \"change\";\n            default:\n              return \"input\";\n          }\n        })(e),\n        r = Re(e);\n      function i() {\n        t(Re(e));\n      }\n      return (\n        e.addEventListener(n, i),\n        void 0 !== r && t(r),\n        function () {\n          e.removeEventListener(n, i);\n        }\n      );\n    });\n  },\n  map: function* (e, t) {\n    for (var n, r = -1; !(n = e.next()).done; ) yield t(n.value, ++r);\n  },\n  observe: Ue,\n  queue: function (e) {\n    let t;\n    const n = [],\n      r = e(function (e) {\n        n.push(e), t && (t(n.shift()), (t = null));\n        return e;\n      });\n    if (null != r && \"function\" != typeof r)\n      throw new Error(\n        \"function\" == typeof r.then\n          ? \"async initializers are not supported\"\n          : \"initializer returned something, but not a dispose function\",\n      );\n    return {\n      [Symbol.iterator]: Te,\n      throw: () => ({ done: !0 }),\n      return: () => (null != r && r(), { done: !0 }),\n      next: function () {\n        return {\n          done: !1,\n          value: n.length\n            ? Promise.resolve(n.shift())\n            : new Promise((e) => (t = e)),\n        };\n      },\n    };\n  },\n  range: function* (e, t, n) {\n    (e = +e),\n      (t = +t),\n      (n = (i = arguments.length) < 2 ? ((t = e), (e = 0), 1) : i < 3 ? 1 : +n);\n    for (var r = -1, i = 0 | Math.max(0, Math.ceil((t - e) / n)); ++r < i; )\n      yield e + r * n;\n  },\n  valueAt: function (e, t) {\n    if (!(!isFinite((t = +t)) || t < 0 || (t != t) | 0))\n      for (var n, r = -1; !(n = e.next()).done; ) if (++r === t) return n.value;\n  },\n  worker: function (e) {\n    const t = URL.createObjectURL(new Blob([e], { type: \"text/javascript\" })),\n      n = new Worker(t);\n    return Ae(n, () => {\n      n.terminate(), URL.revokeObjectURL(t);\n    });\n  },\n};\nfunction Ie(e, t) {\n  return function (n) {\n    var r,\n      i,\n      o,\n      a,\n      s,\n      u,\n      l,\n      c,\n      d = n[0],\n      f = [],\n      p = null,\n      h = -1;\n    for (s = 1, u = arguments.length; s < u; ++s) {\n      if ((r = arguments[s]) instanceof Node)\n        (f[++h] = r), (d += \"\\x3c!--o:\" + h + \"--\\x3e\");\n      else if (Array.isArray(r)) {\n        for (l = 0, c = r.length; l < c; ++l)\n          (i = r[l]) instanceof Node\n            ? (null === p &&\n                ((f[++h] = p = document.createDocumentFragment()),\n                (d += \"\\x3c!--o:\" + h + \"--\\x3e\")),\n              p.appendChild(i))\n            : ((p = null), (d += i));\n        p = null;\n      } else d += r;\n      d += n[s];\n    }\n    if (((p = e(d)), ++h > 0)) {\n      for (\n        o = new Array(h),\n          a = document.createTreeWalker(p, NodeFilter.SHOW_COMMENT, null, !1);\n        a.nextNode();\n\n      )\n        (i = a.currentNode),\n          /^o:/.test(i.nodeValue) && (o[+i.nodeValue.slice(2)] = i);\n      for (s = 0; s < h; ++s) (i = o[s]) && i.parentNode.replaceChild(f[s], i);\n    }\n    return 1 === p.childNodes.length\n      ? p.removeChild(p.firstChild)\n      : 11 === p.nodeType\n      ? ((i = t()).appendChild(p), i)\n      : p;\n  };\n}\nvar Fe = Ie(\n  function (e) {\n    var t = document.createElement(\"template\");\n    return (t.innerHTML = e.trim()), document.importNode(t.content, !0);\n  },\n  function () {\n    return document.createElement(\"span\");\n  },\n);\nconst ze = \"https://cdn.jsdelivr.net/npm/@observablehq/highlight.js@2.0.0/\";\nfunction Be(e) {\n  return function () {\n    return e(\"marked@0.3.12/marked.min.js\").then(function (t) {\n      return Ie(\n        function (n) {\n          var r = document.createElement(\"div\");\n          r.innerHTML = t(n, { langPrefix: \"\" }).trim();\n          var i = r.querySelectorAll(\"pre code[class]\");\n          return (\n            i.length > 0 &&\n              e(ze + \"highlight.min.js\").then(function (t) {\n                i.forEach(function (n) {\n                  function r() {\n                    t.highlightBlock(n),\n                      n.parentNode.classList.add(\"observablehq--md-pre\");\n                  }\n                  t.getLanguage(n.className)\n                    ? r()\n                    : e(ze + \"async-languages/index.js\")\n                        .then((r) => {\n                          if (r.has(n.className))\n                            return e(\n                              ze + \"async-languages/\" + r.get(n.className),\n                            ).then((e) => {\n                              t.registerLanguage(n.className, e);\n                            });\n                        })\n                        .then(r, r);\n                });\n              }),\n            r\n          );\n        },\n        function () {\n          return document.createElement(\"div\");\n        },\n      );\n    });\n  };\n}\nfunction He(e) {\n  let t;\n  Object.defineProperties(this, {\n    generator: {\n      value: Ue((e) => {\n        t = e;\n      }),\n    },\n    value: { get: () => e, set: (n) => t((e = n)) },\n  }),\n    void 0 !== e && t(e);\n}\nfunction* We() {\n  for (;;) yield Date.now();\n}\nvar Ve = new Map();\nfunction Ge(e, t) {\n  var n;\n  return (n = Ve.get((e = +e)))\n    ? n.then(() => t)\n    : (n = Date.now()) >= e\n    ? Promise.resolve(t)\n    : (function (e, t) {\n        var n = new Promise(function (n) {\n          Ve.delete(t);\n          var r = t - e;\n          if (!(r > 0)) throw new Error(\"invalid time\");\n          if (r > 2147483647) throw new Error(\"too long to wait\");\n          setTimeout(n, r);\n        });\n        return Ve.set(t, n), n;\n      })(n, e).then(() => t);\n}\nvar Ke = {\n  delay: function (e, t) {\n    return new Promise(function (n) {\n      setTimeout(function () {\n        n(t);\n      }, e);\n    });\n  },\n  tick: function (e, t) {\n    return Ge(Math.ceil((Date.now() + 1) / e) * e, t);\n  },\n  when: Ge,\n};\nfunction Ye(e, t) {\n  if (/^(\\w+:)|\\/\\//i.test(e)) return e;\n  if (/^[.]{0,2}\\//i.test(e)) return new URL(e, null == t ? location : t).href;\n  if (!e.length || /^[\\s._]/.test(e) || /\\s$/.test(e))\n    throw new Error(\"illegal name\");\n  return \"https://unpkg.com/\" + e;\n}\nfunction Je(e) {\n  return null == e ? ye : Ee(e);\n}\nvar Xe = Ie(\n    function (e) {\n      var t = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n      return (t.innerHTML = e.trim()), t;\n    },\n    function () {\n      return document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n    },\n  ),\n  Qe = String.raw;\nfunction Ze(e) {\n  return new Promise(function (t, n) {\n    var r = document.createElement(\"link\");\n    (r.rel = \"stylesheet\"),\n      (r.href = e),\n      (r.onerror = n),\n      (r.onload = t),\n      document.head.appendChild(r);\n  });\n}\nfunction et(e) {\n  return function () {\n    return Promise.all([\n      e(\"@observablehq/katex@0.11.1/dist/katex.min.js\"),\n      e.resolve(\"@observablehq/katex@0.11.1/dist/katex.min.css\").then(Ze),\n    ]).then(function (e) {\n      var t = e[0],\n        n = r();\n      function r(e) {\n        return function () {\n          var n = document.createElement(\"div\");\n          return (\n            t.render(Qe.apply(String, arguments), n, e),\n            n.removeChild(n.firstChild)\n          );\n        };\n      }\n      return (n.options = r), (n.block = r({ displayMode: !0 })), n;\n    });\n  };\n}\nfunction tt(e) {\n  return async () => {\n    const [t, n, r] = await Promise.all(\n      [\n        \"vega@5.20.2/build/vega.min.js\",\n        \"vega-lite@5.1.0/build/vega-lite.min.js\",\n        \"vega-lite-api@5.0.0/build/vega-lite-api.min.js\",\n      ].map((t) => e(t)),\n    );\n    return r.register(t, n);\n  };\n}\nfunction nt() {\n  return Ue(function (e) {\n    var t = e(document.body.clientWidth);\n    function n() {\n      var n = document.body.clientWidth;\n      n !== t && e((t = n));\n    }\n    return (\n      window.addEventListener(\"resize\", n),\n      function () {\n        window.removeEventListener(\"resize\", n);\n      }\n    );\n  });\n}\nvar rt = Object.assign(\n  function (e) {\n    const t = Je(e);\n    var n;\n    Object.defineProperties(\n      this,\n      ((n = {\n        DOM: () => ke,\n        FileAttachment: () => qe,\n        Files: () => Oe,\n        Generators: () => De,\n        Inputs: () => t(\"@observablehq/inputs@0.8.0/dist/inputs.umd.min.js\"),\n        Mutable: () => He,\n        Plot: () => t(\"@observablehq/plot@0.1.0/dist/plot.umd.min.js\"),\n        Promises: () => Ke,\n        _: () => t(\"lodash@4.17.21/lodash.min.js\"),\n        d3: () => t(\"d3@6.7.0/dist/d3.min.js\"),\n        dot: () => t(\"@observablehq/graphviz@0.2.1/dist/graphviz.min.js\"),\n        htl: () => t(\"htl@0.2.5/dist/htl.min.js\"),\n        html: () => Fe,\n        md: Be(t),\n        now: We,\n        require: () => t,\n        resolve: () => Ye,\n        svg: () => Xe,\n        tex: et(t),\n        vl: tt(t),\n        width: nt,\n      }),\n      Object.fromEntries(Object.entries(n).map(it))),\n    );\n  },\n  { resolve: ye.resolve },\n);\nfunction it([e, t]) {\n  return [e, { value: t, writable: !0, enumerable: !0 }];\n}\nfunction ot(e, t) {\n  (this.message = e + \"\"), (this.input = t);\n}\n(ot.prototype = Object.create(Error.prototype)),\n  (ot.prototype.name = \"RuntimeError\"),\n  (ot.prototype.constructor = ot);\nvar at = Array.prototype,\n  st = at.map,\n  ut = at.forEach;\nfunction lt(e) {\n  return function () {\n    return e;\n  };\n}\nfunction ct(e) {\n  return e;\n}\nfunction dt() {}\nvar ft = {};\nfunction pt(e, t, n) {\n  var r;\n  n || (n = ft),\n    Object.defineProperties(this, {\n      _observer: { value: n, writable: !0 },\n      _definition: { value: vt, writable: !0 },\n      _duplicate: { value: void 0, writable: !0 },\n      _duplicates: { value: void 0, writable: !0 },\n      _indegree: { value: NaN, writable: !0 },\n      _inputs: { value: [], writable: !0 },\n      _invalidate: { value: dt, writable: !0 },\n      _module: { value: t },\n      _name: { value: null, writable: !0 },\n      _outputs: { value: new Set(), writable: !0 },\n      _promise: { value: Promise.resolve(void 0), writable: !0 },\n      _reachable: { value: n !== ft, writable: !0 },\n      _rejector: {\n        value:\n          ((r = this),\n          function (e) {\n            if (e === vt) throw new ot(r._name + \" is not defined\", r._name);\n            if (e instanceof Error && e.message)\n              throw new ot(e.message, r._name);\n            throw new ot(r._name + \" could not be resolved\", r._name);\n          }),\n      },\n      _type: { value: e },\n      _value: { value: void 0, writable: !0 },\n      _version: { value: 0, writable: !0 },\n    });\n}\nfunction ht(e) {\n  e._module._runtime._dirty.add(e), e._outputs.add(this);\n}\nfunction mt(e) {\n  e._module._runtime._dirty.add(e), e._outputs.delete(this);\n}\nfunction vt() {\n  throw vt;\n}\nfunction bt(e) {\n  return function () {\n    throw new ot(e + \" is defined more than once\");\n  };\n}\nfunction _t(e, t, n) {\n  var r = this._module._scope,\n    i = this._module._runtime;\n  if (\n    (this._inputs.forEach(mt, this),\n    t.forEach(ht, this),\n    (this._inputs = t),\n    (this._definition = n),\n    (this._value = void 0),\n    n === dt ? i._variables.delete(this) : i._variables.add(this),\n    e !== this._name || r.get(e) !== this)\n  ) {\n    var o, a;\n    if (this._name)\n      if (this._outputs.size)\n        r.delete(this._name),\n          ((a = this._module._resolve(this._name))._outputs = this._outputs),\n          (this._outputs = new Set()),\n          a._outputs.forEach(function (e) {\n            e._inputs[e._inputs.indexOf(this)] = a;\n          }, this),\n          a._outputs.forEach(i._updates.add, i._updates),\n          i._dirty.add(a).add(this),\n          r.set(this._name, a);\n      else if ((a = r.get(this._name)) === this) r.delete(this._name);\n      else {\n        if (3 !== a._type) throw new Error();\n        a._duplicates.delete(this),\n          (this._duplicate = void 0),\n          1 === a._duplicates.size &&\n            ((a = a._duplicates.keys().next().value),\n            (o = r.get(this._name)),\n            (a._outputs = o._outputs),\n            (o._outputs = new Set()),\n            a._outputs.forEach(function (e) {\n              e._inputs[e._inputs.indexOf(o)] = a;\n            }),\n            (a._definition = a._duplicate),\n            (a._duplicate = void 0),\n            i._dirty.add(o).add(a),\n            i._updates.add(a),\n            r.set(this._name, a));\n      }\n    if (this._outputs.size) throw new Error();\n    e &&\n      ((a = r.get(e))\n        ? 3 === a._type\n          ? ((this._definition = bt(e)),\n            (this._duplicate = n),\n            a._duplicates.add(this))\n          : 2 === a._type\n          ? ((this._outputs = a._outputs),\n            (a._outputs = new Set()),\n            this._outputs.forEach(function (e) {\n              e._inputs[e._inputs.indexOf(a)] = this;\n            }, this),\n            i._dirty.add(a).add(this),\n            r.set(e, this))\n          : ((a._duplicate = a._definition),\n            (this._duplicate = n),\n            ((o = new pt(3, this._module))._name = e),\n            (o._definition = this._definition = a._definition = bt(e)),\n            (o._outputs = a._outputs),\n            (a._outputs = new Set()),\n            o._outputs.forEach(function (e) {\n              e._inputs[e._inputs.indexOf(a)] = o;\n            }),\n            (o._duplicates = new Set([this, a])),\n            i._dirty.add(a).add(o),\n            i._updates.add(a).add(o),\n            r.set(e, o))\n        : r.set(e, this)),\n      (this._name = e);\n  }\n  return i._updates.add(this), i._compute(), this;\n}\nfunction wt(e, t = []) {\n  Object.defineProperties(this, {\n    _runtime: { value: e },\n    _scope: { value: new Map() },\n    _builtins: {\n      value: new Map([[\"invalidation\", Et], [\"visibility\", xt], ...t]),\n    },\n    _source: { value: null, writable: !0 },\n  });\n}\nfunction gt(e) {\n  return e._name;\n}\nObject.defineProperties(pt.prototype, {\n  _pending: {\n    value: function () {\n      this._observer.pending && this._observer.pending();\n    },\n    writable: !0,\n    configurable: !0,\n  },\n  _fulfilled: {\n    value: function (e) {\n      this._observer.fulfilled && this._observer.fulfilled(e, this._name);\n    },\n    writable: !0,\n    configurable: !0,\n  },\n  _rejected: {\n    value: function (e) {\n      this._observer.rejected && this._observer.rejected(e, this._name);\n    },\n    writable: !0,\n    configurable: !0,\n  },\n  define: {\n    value: function (e, t, n) {\n      switch (arguments.length) {\n        case 1:\n          (n = e), (e = t = null);\n          break;\n        case 2:\n          (n = t), \"string\" == typeof e ? (t = null) : ((t = e), (e = null));\n      }\n      return _t.call(\n        this,\n        null == e ? null : e + \"\",\n        null == t ? [] : st.call(t, this._module._resolve, this._module),\n        \"function\" == typeof n ? n : lt(n),\n      );\n    },\n    writable: !0,\n    configurable: !0,\n  },\n  delete: {\n    value: function () {\n      return _t.call(this, null, [], dt);\n    },\n    writable: !0,\n    configurable: !0,\n  },\n  import: {\n    value: function (e, t, n) {\n      arguments.length < 3 && ((n = t), (t = e));\n      return _t.call(this, t + \"\", [n._resolve(e + \"\")], ct);\n    },\n    writable: !0,\n    configurable: !0,\n  },\n}),\n  Object.defineProperties(wt.prototype, {\n    _copy: {\n      value: function (e, t) {\n        (e._source = this), t.set(this, e);\n        for (const [o, a] of this._scope) {\n          var n = e._scope.get(o);\n          if (!n || 1 !== n._type)\n            if (a._definition === ct) {\n              var r = a._inputs[0],\n                i = r._module;\n              e.import(\n                r._name,\n                o,\n                t.get(i) ||\n                  (i._source ? i._copy(new wt(e._runtime, e._builtins), t) : i),\n              );\n            } else e.define(o, a._inputs.map(gt), a._definition);\n        }\n        return e;\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    _resolve: {\n      value: function (e) {\n        var t,\n          n = this._scope.get(e);\n        if (!n)\n          if (((n = new pt(2, this)), this._builtins.has(e)))\n            n.define(e, lt(this._builtins.get(e)));\n          else if (this._runtime._builtin._scope.has(e))\n            n.import(e, this._runtime._builtin);\n          else {\n            try {\n              t = this._runtime._global(e);\n            } catch (t) {\n              return n.define(\n                e,\n                ((r = t),\n                function () {\n                  throw r;\n                }),\n              );\n            }\n            void 0 === t\n              ? this._scope.set((n._name = e), n)\n              : n.define(e, lt(t));\n          }\n        var r;\n        return n;\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    redefine: {\n      value: function (e) {\n        var t = this._scope.get(e);\n        if (!t) throw new ot(e + \" is not defined\");\n        if (3 === t._type) throw new ot(e + \" is defined more than once\");\n        return t.define.apply(t, arguments);\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    define: {\n      value: function () {\n        var e = new pt(1, this);\n        return e.define.apply(e, arguments);\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    derive: {\n      value: function (e, t) {\n        var n = new wt(this._runtime, this._builtins);\n        return (\n          (n._source = this),\n          ut.call(e, function (e) {\n            \"object\" != typeof e && (e = { name: e + \"\" }),\n              null == e.alias && (e.alias = e.name),\n              n.import(e.name, e.alias, t);\n          }),\n          Promise.resolve().then(() => {\n            const e = new Set([this]);\n            for (const t of e)\n              for (const n of t._scope.values())\n                if (n._definition === ct) {\n                  const t = n._inputs[0]._module,\n                    r = t._source || t;\n                  if (r === this)\n                    return void console.warn(\n                      \"circular module definition; ignoring\",\n                    );\n                  e.add(r);\n                }\n            this._copy(n, new Map());\n          }),\n          n\n        );\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    import: {\n      value: function () {\n        var e = new pt(1, this);\n        return e.import.apply(e, arguments);\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    value: {\n      value: async function (e) {\n        var t = this._scope.get(e);\n        if (!t) throw new ot(e + \" is not defined\");\n        t._observer === ft && ((t._observer = !0), this._runtime._dirty.add(t));\n        return await this._runtime._compute(), t._promise;\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    variable: {\n      value: function (e) {\n        return new pt(1, this, e);\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    builtin: {\n      value: function (e, t) {\n        this._builtins.set(e, t);\n      },\n      writable: !0,\n      configurable: !0,\n    },\n  });\nconst yt =\n  \"function\" == typeof requestAnimationFrame\n    ? requestAnimationFrame\n    : setImmediate;\nvar Et = {},\n  xt = {};\nfunction Ct(e = new rt(), t = Ot) {\n  var n = this.module();\n  if (\n    (Object.defineProperties(this, {\n      _dirty: { value: new Set() },\n      _updates: { value: new Set() },\n      _computing: { value: null, writable: !0 },\n      _init: { value: null, writable: !0 },\n      _modules: { value: new Map() },\n      _variables: { value: new Set() },\n      _disposed: { value: !1, writable: !0 },\n      _builtin: { value: n },\n      _global: { value: t },\n    }),\n    e)\n  )\n    for (var r in e) new pt(2, n).define(r, [], e[r]);\n}\nfunction Nt(e) {\n  const t = new Set(e._inputs);\n  for (const n of t) {\n    if (n === e) return !0;\n    n._inputs.forEach(t.add, t);\n  }\n  return !1;\n}\nfunction jt(e) {\n  ++e._indegree;\n}\nfunction Pt(e) {\n  --e._indegree;\n}\nfunction St(e) {\n  return e._promise.catch(e._rejector);\n}\nfunction qt(e) {\n  return new Promise(function (t) {\n    e._invalidate = t;\n  });\n}\nfunction Mt(e, t) {\n  let n,\n    r,\n    i =\n      \"function\" == typeof IntersectionObserver &&\n      t._observer &&\n      t._observer._node,\n    o = !i,\n    a = dt,\n    s = dt;\n  return (\n    i &&\n      ((r = new IntersectionObserver(\n        ([e]) => (o = e.isIntersecting) && ((n = null), a()),\n      )),\n      r.observe(i),\n      e.then(() => (r.disconnect(), (r = null), s()))),\n    function (e) {\n      return o\n        ? Promise.resolve(e)\n        : r\n        ? (n || (n = new Promise((e, t) => ((a = e), (s = t)))),\n          n.then(() => e))\n        : Promise.reject();\n    }\n  );\n}\nfunction Lt(e) {\n  e._invalidate(), (e._invalidate = dt), e._pending();\n  var t = e._value,\n    n = ++e._version,\n    r = null,\n    i = (e._promise = Promise.all(e._inputs.map(St))\n      .then(function (i) {\n        if (e._version === n) {\n          for (var o = 0, a = i.length; o < a; ++o)\n            switch (i[o]) {\n              case Et:\n                i[o] = r = qt(e);\n                break;\n              case xt:\n                r || (r = qt(e)), (i[o] = Mt(r, e));\n            }\n          return e._definition.apply(t, i);\n        }\n      })\n      .then(function (t) {\n        return (function (e) {\n          return (\n            e && \"function\" == typeof e.next && \"function\" == typeof e.return\n          );\n        })(t)\n          ? e._version !== n\n            ? void t.return()\n            : ((r || qt(e)).then(\n                ((o = t),\n                function () {\n                  o.return();\n                }),\n              ),\n              (function (e, t, n, r) {\n                function i() {\n                  var n = new Promise(function (e) {\n                    e(r.next());\n                  }).then(function (r) {\n                    return r.done\n                      ? void 0\n                      : Promise.resolve(r.value).then(function (r) {\n                          if (e._version === t)\n                            return $t(e, r, n).then(i), e._fulfilled(r), r;\n                        });\n                  });\n                  n.catch(function (r) {\n                    e._version === t && ($t(e, void 0, n), e._rejected(r));\n                  });\n                }\n                return new Promise(function (e) {\n                  e(r.next());\n                }).then(function (e) {\n                  if (!e.done) return n.then(i), e.value;\n                });\n              })(e, n, i, t))\n          : t;\n        var o;\n      }));\n  i.then(\n    function (t) {\n      e._version === n && ((e._value = t), e._fulfilled(t));\n    },\n    function (t) {\n      e._version === n && ((e._value = void 0), e._rejected(t));\n    },\n  );\n}\nfunction $t(e, t, n) {\n  var r = e._module._runtime;\n  return (\n    (e._value = t),\n    (e._promise = n),\n    e._outputs.forEach(r._updates.add, r._updates),\n    r._compute()\n  );\n}\nfunction kt(e, t) {\n  e._invalidate(),\n    (e._invalidate = dt),\n    e._pending(),\n    ++e._version,\n    (e._indegree = NaN),\n    (e._promise = Promise.reject(t)).catch(dt),\n    (e._value = void 0),\n    e._rejected(t);\n}\nfunction Ot(e) {\n  return window[e];\n}\nObject.defineProperties(Ct, {\n  load: {\n    value: function (e, t, n) {\n      if (\n        (\"function\" == typeof t && ((n = t), (t = null)),\n        \"function\" != typeof n)\n      )\n        throw new Error(\"invalid observer\");\n      null == t && (t = new rt());\n      const { modules: r, id: i } = e,\n        o = new Map(),\n        a = new Ct(t),\n        s = u(i);\n      function u(e) {\n        let t = o.get(e);\n        return t || o.set(e, (t = a.module())), t;\n      }\n      for (const e of r) {\n        const t = u(e.id);\n        let r = 0;\n        for (const i of e.variables)\n          i.from\n            ? t.import(i.remote, i.name, u(i.from))\n            : t === s\n            ? t.variable(n(i, r, e.variables)).define(i.name, i.inputs, i.value)\n            : t.define(i.name, i.inputs, i.value),\n            ++r;\n      }\n      return a;\n    },\n    writable: !0,\n    configurable: !0,\n  },\n}),\n  Object.defineProperties(Ct.prototype, {\n    _compute: {\n      value: function () {\n        return this._computing || (this._computing = this._computeSoon());\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    _computeSoon: {\n      value: function () {\n        var e = this;\n        return new Promise(function (t) {\n          yt(function () {\n            t(), e._disposed || e._computeNow();\n          });\n        });\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    _computeNow: {\n      value: function () {\n        var e,\n          t,\n          n = [];\n        (e = new Set(this._dirty)).forEach(function (t) {\n          t._inputs.forEach(e.add, e);\n          const n = (function (e) {\n            if (e._observer !== ft) return !0;\n            var t = new Set(e._outputs);\n            for (const e of t) {\n              if (e._observer !== ft) return !0;\n              e._outputs.forEach(t.add, t);\n            }\n            return !1;\n          })(t);\n          n > t._reachable\n            ? this._updates.add(t)\n            : n < t._reachable && t._invalidate(),\n            (t._reachable = n);\n        }, this),\n          (e = new Set(this._updates)).forEach(function (t) {\n            t._reachable\n              ? ((t._indegree = 0), t._outputs.forEach(e.add, e))\n              : ((t._indegree = NaN), e.delete(t));\n          }),\n          (this._computing = null),\n          this._updates.clear(),\n          this._dirty.clear(),\n          e.forEach(function (e) {\n            e._outputs.forEach(jt);\n          });\n        do {\n          for (\n            e.forEach(function (e) {\n              0 === e._indegree && n.push(e);\n            });\n            (t = n.pop());\n\n          )\n            Lt(t), t._outputs.forEach(r), e.delete(t);\n          e.forEach(function (t) {\n            Nt(t) &&\n              (kt(t, new ot(\"circular definition\")),\n              t._outputs.forEach(Pt),\n              e.delete(t));\n          });\n        } while (e.size);\n        function r(e) {\n          0 == --e._indegree && n.push(e);\n        }\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    dispose: {\n      value: function () {\n        (this._computing = Promise.resolve()),\n          (this._disposed = !0),\n          this._variables.forEach((e) => {\n            e._invalidate(), (e._version = NaN);\n          });\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    module: {\n      value: function (e, t = dt) {\n        let n;\n        if (void 0 === e)\n          return (n = this._init) ? ((this._init = null), n) : new wt(this);\n        if (((n = this._modules.get(e)), n)) return n;\n        (this._init = n = new wt(this)), this._modules.set(e, n);\n        try {\n          e(this, t);\n        } finally {\n          this._init = null;\n        }\n        return n;\n      },\n      writable: !0,\n      configurable: !0,\n    },\n    fileAttachments: {\n      value: function (e) {\n        return Object.assign(\n          (t) => {\n            const n = e((t += \"\"));\n            if (null == n) throw new Error(`File not found: ${t}`);\n            return new FileAttachment(n, t);\n          },\n          { prototype: FileAttachment.prototype },\n        );\n      },\n      writable: !0,\n      configurable: !0,\n    },\n  });\nexport { ue as Inspector, rt as Library, Ct as Runtime, ot as RuntimeError };\n"
  },
  {
    "path": "packages/site/docs/api/Algorithm.zh.md",
    "content": "---\ntitle: 图算法 Algorithm\norder: 15\n---\n\n图算法提供了一种最有效的分析关联数据的方法，它们描述了如何处理图以发现一些定性或者定量的结论。图算法基于图论，利用节点之间的关系来推断复杂系统的结构和变化。我们可以使用这些算法来发现隐藏的信息，验证业务假设，并对行为进行预测。\n\n如果你对数据结构及算法感兴趣，可以通过 [javascript-algorithms](https://github.com/trekhleb/javascript-algorithms) 来进一步学习。\n\n### GADDI 图模式匹配\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>「v4.2.2」新特性</strong></span>\n\n[GADDI 图模式匹配]()算法是一种支持结构和语义的图模式匹配算法，给定一个模式，可通过在算法在原数据上查找结果和语义相同、相似的结构。[DEMO](/zh/docs/examples/algorithm/algoDemos#gaddi)。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ahYwQJtk00EAAAAAAAAAAAAAARQnAQ' alt=\"img\" width='500px'>\n\n**参数**\n\n| 名称          | 类型      | 是否必选 | 描述                                          |\n| ------------- | --------- | -------- | --------------------------------------------- |\n| graphData     | GraphData | true     | 原图数据                                      |\n| pattern       | GraphData | true     | 需要查找的模式图数据                          |\n| k             | number    | false    | 匹配算法的参数，设置为 `undefined` 则自动设置 |\n| length        | number    | false    | 匹配算法的参数，设置为 `undefined` 则自动设置 |\n| nodeLabelProp | number    | false    | 节点聚类信息的属性名，默认为 `'cluster'`      |\n| edgeLabelProp | number    | false    | 边聚类信息的属性名，默认为 `'cluster'`        |\n\n**用法**\n\n```javascript\nimport F6, { Algorithm } from \"@antv/g6\";\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 500,\n});\n\nconst graphData = {\n  nodes: [\n    { id: \"A\", cluster: \"nc1\" },\n    { id: \"B\", cluster: \"nc1\" },\n    { id: \"C\", cluster: \"nc2\" },\n    { id: \"D\", cluster: \"nc1\" },\n    { id: \"E\", cluster: \"nc3\" },\n  ],\n  edges: [\n    { source: \"A\", target: \"B\", cluster: \"ec1\" },\n    { source: \"B\", target: \"C\", cluster: \"ec2\" },\n    { source: \"A\", target: \"D\", cluster: \"ec1\" },\n    { source: \"A\", target: \"E\", cluster: \"ec2\" },\n  ],\n};\n\ngraph.data(data);\ngraph.render();\n\nconst { GADDI } = Algorithm;\nconst patternData = {\n  nodes: [\n    { id: \"pn1\", cluster: \"nc1\" },\n    { id: \"pn2\", cluster: \"nc1\" },\n    { id: \"pn3\", cluster: \"nc3\" },\n  ],\n  edges: [\n    { source: \"pn1\", target: \"pn2\", cluster: \"ec1\" },\n    { source: \"pn1\", target: \"pn3\", cluster: \"ec2\" },\n  ],\n};\nconst resultMatches = GADDI(\n  graphData,\n  patternData,\n  true,\n  undefined,\n  undefined,\n  \"cluster\",\n  \"cluster\",\n);\n\nconsole.log(resultMatches);\n// output:\n// [{\n//   nodes: [\n//     { id: 'A', cluster: 'nc1' },\n//     { id: 'B', cluster: 'nc1' },\n//     { id: 'E', cluster: 'nc3' },],\n//   edges: [\n//     { source: 'A', target: 'B', cluster: 'ec1' },\n//     { source: 'A', target: 'E', cluster: 'ec2' }\n//   ]\n// }]\n```\n\n### depthFirstSearch\n\n[深度优先搜索](https://zh.wikipedia.org/wiki/%E6%B7%B1%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2)（Depth First Search，简称 DFS）算法是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点，尽可能深的搜索树的分支。当节点 v 的所在边都己被探寻过，搜索将回溯到发现节点 v 的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。\n\n<img src='https://camo.githubusercontent.com/aaad9e39961daf34d967c616edeb50abf3bf1235/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f372f37662f44657074682d46697273742d5365617263682e676966' alt=\"img\">\n\n[图片来源](https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/graph/depth-first-search)\n\n**参数**\n\n| 名称        | 类型                | 是否必选 | 描述                                                                                                                |\n| ----------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData   | GraphData           | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n| startNodeId | string              | true     | 开始访问的节点的 ID                                                                                                 |\n| callbacks   | IAlgorithmCallbacks | false    | 遍历的回调函数                                                                                                      |\n\n**用法**\n\n```\nimport F6, { Algorithm } from '@antv/g6'\nconst graph = new F6.Graph({\n  container: 'container',\n  width: 500,\n  height: 500\n})\n\nconst data = {\n  nodes: [\n    {\n      id: 'A'\n    },\n    {\n      id: 'B'\n    },\n    {\n      id: 'C'\n    },\n    {\n      id: 'D'\n    },\n    {\n      id: 'E'\n    },\n    {\n      id: 'F'\n    },\n    {\n      id: 'G'\n    },\n  ],\n  edges: [\n    {\n      source: 'A',\n      target: 'B'\n    },\n    {\n      source: 'B',\n      target: 'C'\n    },\n    {\n      source: 'C',\n      target: 'G'\n    },\n    {\n      source: 'A',\n      target: 'D'\n    },\n    {\n      source: 'A',\n      target: 'E'\n    },\n    {\n      source: 'E',\n      target: 'F'\n    },\n    {\n      source: 'F',\n      target: 'D'\n    },\n    {\n      source: 'D',\n      target: 'G'\n    },\n  ]\n}\n\ngraph.data(data)\ngraph.render()\n\nconst { depthFirstSearch } = Algorithm\ndepthFirstSearch(data, 'A', {\n  enter: ({ current, previous }) => {\n    // 开始遍历点的回调\n  },\n  leave: ({ current, previous }) => {\n    // 遍历完节点的回调\n  },\n})\n```\n\n### breadthFirstSearch\n\n[广度优先搜索](https://zh.wikipedia.org/zh/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2)算法（Breadth First Search，简称 BFS），又译作宽度优先搜索，或横向优先搜索，是一种图搜索算法。简单的说，BFS 是从根节点开始，沿着树的宽度遍历树的节点。如果所有节点均被访问，则算法中止。广度优先搜索的实现一般采用 open-closed 表。\n\n<img src='https://camo.githubusercontent.com/b8073f26dfdf1644e8a92312fff100341987a8f5/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f352f35642f427265616474682d46697273742d5365617263682d416c676f726974686d2e676966'  alt=\"img\"/>\n\n[图片来源](https://camo.githubusercontent.com/b8073f26dfdf1644e8a92312fff100341987a8f5/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f352f35642f427265616474682d46697273742d5365617263682d416c676f726974686d2e676966)\n\n**参数**\n\n| 名称              | 类型                | 是否必选 | 描述                                                                                                                |\n| ----------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData         | GraphData           | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n| startNodeId       | string              | true     | 开始访问的节点的 ID                                                                                                 |\n| originalCallbacks | IAlgorithmCallbacks | false    | 遍历的回调函数                                                                                                      |\n\n**用法**\n\n```\nimport F6, { Algorithm } from '@antv/g6'\nconst graph = new F6.Graph({\n  container: 'container',\n  width: 500,\n  height: 500\n})\n\nconst data = {\n  nodes: [\n    {\n      id: 'A'\n    },\n    {\n      id: 'B'\n    },\n    {\n      id: 'C'\n    },\n    {\n      id: 'D'\n    },\n    {\n      id: 'E'\n    },\n    {\n      id: 'F'\n    },\n    {\n      id: 'G'\n    },\n  ],\n  edges: [\n    {\n      source: 'A',\n      target: 'B'\n    },\n    {\n      source: 'B',\n      target: 'C'\n    },\n    {\n      source: 'C',\n      target: 'G'\n    },\n    {\n      source: 'A',\n      target: 'D'\n    },\n    {\n      source: 'A',\n      target: 'E'\n    },\n    {\n      source: 'E',\n      target: 'F'\n    },\n    {\n      source: 'F',\n      target: 'D'\n    },\n    {\n      source: 'D',\n      target: 'G'\n    },\n  ]\n}\n\ngraph.data(data)\ngraph.render()\n\nconst { breadthFirstSearch } = Algorithm\nbreadthFirstSearch(data, 'A', {\n  enter: ({ current, previous }) => {\n    // 开始遍历点的回调\n  },\n  leave: ({ current, previous }) => {\n    // 遍历完节点的回调\n  },\n})\n```\n\n### labelPropagation\n\n标签传播算法，自动为数据聚类。优势：速度较 LOUVAIN 快。\n\n参考资料：https://en.wikipedia.org/wiki/Label_propagation_algorithm\n\n**参数**\n\n| 名称               | 类型      | 是否必选 | 描述                                                                     |\n| ------------------ | --------- | -------- | ------------------------------------------------------------------------ |\n| data               | GraphData | true     | 图数据                                                                   |\n| directed           | Boolean   | false    | 是否是有向图，默认为 false                                               |\n| weightPropertyName | String    | false    | 边权重的属名称，默认为 `'weight'，若数据中没有权重，则默认每条边权重为 1 |\n| maxIteration       | Number    | false    | 最大迭代次数，默认为 1000                                                |\n\n**返回值**\n\n返回聚合数据，并为输入的 `data` 中的每个节点数据加上 `clusterId` 字段。聚合数据 `ClusterData` 类型如下：\n\n```typescript\ninterface ClusterData {\n  clusters: {\n    // 聚类数组\n    id: string; // 聚类 Id\n    nodes: NodeConfig[]; // 该聚类包含的节点\n  }[];\n  clusterEdges: {\n    // 聚类与聚类之间的边数组\n    source: string; // 起点聚类 id\n    target: string; // 终点聚类 id\n    count: number; // 该边所包含的真实边个数\n  }[];\n}\n```\n\n返回值示例：\n\n```javascript\n{\n  clusters: [\n    {id: 'cluster1', nodes: [ {id: 'node1', clusterId: 'cluster1'}, {id: 'node2', clusterId: 'cluster1'} ]},\n    {id: 'cluster2', nodes: [ {id: 'node3', clusterId: 'cluster2'} ]},\n  ],\n  clusterEdges: [\n    {source: 'cluster1', target: 'cluster2', count: 10},\n    {source: 'cluster1', target: 'cluster1', count: 3},\n  ]\n}\n```\n\n**用法**\n\n```javascript\nimport F6, { Algorithm } from \"@antv/g6\";\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 500,\n});\n\nconst data = {\n  nodes: [\n    { id: \"A\" },\n    { id: \"B\" },\n    { id: \"C\" },\n    { id: \"D\" },\n    { id: \"E\" },\n    { id: \"F\" },\n    { id: \"G\" },\n  ],\n  edges: [\n    { source: \"A\", target: \"B\" },\n    { source: \"B\", target: \"C\" },\n    { source: \"A\", target: \"C\" },\n    { source: \"D\", arget: \"A\" },\n    { source: \"D\", target: \"E\" },\n    { source: \"E\", target: \"F\" },\n  ],\n};\n\ngraph.data(data);\ngraph.render();\n\nconst { labelPropagation } = Algorithm;\n\n// result 中包含 clusters 与 clusterEdges 数组。data 中的每个节点数据将带有 clusterId 字段\nlet result = labelPropagation(data);\n```\n\n### louvain\n\nLOUVAIN 自动聚类算法。优势：根据节点间的紧密程度计算，较之于 Label Propagation 更准确。\n\n参考资料：https://en.wikipedia.org/wiki/Louvain_method\n\n**参数**\n\n| 名称               | 类型      | 是否必选 | 描述                                                                     |\n| ------------------ | --------- | -------- | ------------------------------------------------------------------------ |\n| data               | GraphData | true     | 图数据                                                                   |\n| directed           | Boolean   | false    | 是否是有向图，默认为 false                                               |\n| weightPropertyName | String    | false    | 边权重的属名称，默认为 `'weight'，若数据中没有权重，则默认每条边权重为 1 |\n| threshold          | Number    | false    | 停止迭代的阈值，默认为 0.0001                                            |\n\n**返回值**\n\n返回聚合数据，并为输入的 `data` 中的每个节点数据加上 `clusterId` 字段。聚合数据 `ClusterData` 类型如下：\n\n```typescript\ninterface ClusterData {\n  clusters: {\n    // 聚类数组\n    id: string; // 聚类 Id\n    nodes: NodeConfig[]; // 该聚类包含的节点\n    sumTot?: number; // 该聚类内部边总数\n  }[];\n  clusterEdges: {\n    // 聚类与聚类之间的边数组\n    source: string; // 起点聚类 id\n    target: string; // 终点聚类 id\n    count: number; // 该边所包含的真实边个数\n  }[];\n}\n```\n\n返回值示例：\n\n```javascript\n{\n  clusters: [\n    {id: 'cluster1', sumTot: 8, nodes: [ {id: 'node1', clusterId: 'cluster1'}, {id: 'node2', clusterId: 'cluster1'} ]},\n    {id: 'cluster2', sumTot: 15, nodes: [ {id: 'node3', clusterId: 'cluster2'} ]},\n  ],\n  clusterEdges: [\n    {source: 'cluster1', target: 'cluster2', count: 10},\n    {source: 'cluster1', target: 'cluster1', count: 3},\n  ]\n}\n```\n\n**用法**\n\n```javascript\nimport F6, { Algorithm } from \"@antv/g6\";\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 500,\n});\n\nconst data = {\n  nodes: [\n    { id: \"A\" },\n    { id: \"B\" },\n    { id: \"C\" },\n    { id: \"D\" },\n    { id: \"E\" },\n    { id: \"F\" },\n    { id: \"G\" },\n  ],\n  edges: [\n    { source: \"A\", target: \"B\" },\n    { source: \"B\", target: \"C\" },\n    { source: \"A\", target: \"C\" },\n    { source: \"D\", arget: \"A\" },\n    { source: \"D\", target: \"E\" },\n    { source: \"E\", target: \"F\" },\n  ],\n};\n\ngraph.data(data);\ngraph.render();\n\nconst { louvain } = Algorithm;\n\n// result 中包含 clusters 与 clusterEdges 数组。data 中的每个节点数据将带有 clusterId 字段\nlet result = louvain(data);\n```\n\n### detectDirectedCycle\n\n在给定的有向图中，检查是否包括圈。如果给定的图中至少包括一个圈，则返回包括的第一个圈，否则返回 null。\n\n参考资料：\n\n- [detect-cycle-in-a-graph](https://www.geeksforgeeks.org/detect-cycle-in-a-graph/)\n\n- [detect-cycle](https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/graph/detect-cycle)\n\n**参数**\n\n| 名称      | 类型      | 是否必选 | 描述                                                                                                                |\n| --------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData | GraphData | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n\n**返回值**\n\n返回检测到的圈，否则返回 null。\n\n**用法**\n\n```javascript\nimport F6, { Algorithm } from \"@antv/g6\";\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 500,\n});\n\nconst data = {\n  nodes: [\n    { id: \"A\" },\n    { id: \"B\" },\n    { id: \"C\" },\n    { id: \"D\" },\n    { id: \"E\" },\n    { id: \"F\" },\n    { id: \"G\" },\n  ],\n  edges: [\n    { source: \"A\", target: \"B\" },\n    { source: \"B\", target: \"C\" },\n    { source: \"A\", target: \"C\" },\n    { source: \"D\", arget: \"A\" },\n    { source: \"D\", target: \"E\" },\n    { source: \"E\", target: \"F\" },\n  ],\n};\n\ngraph.data(data);\ngraph.render();\n\nconst { detectDirectedCycle } = Algorithm;\n\n// 此时图中没有环，result 为 null\nlet result = detectDirectedCycle(data);\n\n// 当数据中加入 F->D 这条边后，图中有一个环\ndata.edges.push({\n  source: \"F\",\n  target: \"D\",\n});\n\ngraph.changeData(data);\n\n// 返回数据\n/**\n* {\n    D: Node,\n    F: Node,\n    E: Node,\n  }\n*/\nresult = detectDirectedCycle(data);\n```\n\n### detectAllCycles(graphData, directed, nodeIds, include)\n\n提供支持寻找图中所有环路的函数。对有向图来说返回所有简单环，简单环是指路径上的节点都只出现一次的闭合路径；对于无向图来说，返回一组完备的[基本环](https://en.wikipedia.org/wiki/Cycle_basis)。\n\n参考资料：\n\n- [检测无向图中的所有环](https://www.geeksforgeeks.org/print-all-the-cycles-in-an-undirected-graph/)\n\n- 检测所有有向图中的简单环: [Johnson's algorithm ](https://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF)\n\n**参数**\n\n| 名称      | 类型      | 是否必选 | 描述                                                                                                                      |\n| --------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------- |\n| graphData | GraphData | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例       |\n| directed  | boolean   | false    | 是否考虑边的方向性，若不指定，则取图的 `directed` 属性 ｜                                                                 |\n| nodeIds   | string[]  | false    | 需包含或排除的节点 ID 的数组，若不指定，则返回图中所有的圈 ｜                                                             |\n| include   | boolean   | false    | 若为 `true`, 则返回包含参数 `nodeIds` 中指定的节点的圈，否则，返回所有不包含 `nodeIds` 中指定的节点的圈。默认为 `true` ｜ |\n\n**返回值**\n\n- 返回值类型：[{[key: string]: Node}]\n- 返回一个数组表示检测到的所有符合条件的圈，每个环用一个 Object 表示，其中 key 为节点 id，value 为该节点在环中指向的下一个节点。\n\n**用法**\n\n```javascript\nconst { detectAllCycles } = Algorithm;\n\n// 检测有向图中的所有简单环\nconst allCycles = detectAllCycles(data, true);\n\n// 检测有向图中包含节点 B 的所有简单环\nconst allCycleIncludeB = detectAllCycles(data, true, [\"B\"]);\n\n// 检测无向图中所有不包含节点 B 的所有基本环\nconst allCycleExcludeB = detectAllCycles(data, false, [\"B\"], false);\n```\n\n### findShortestPath(graphData, start, end, directed, weightPropertyName)\n\n查找两点之间的最短路径。\n\n**参数**\n\n| 名称               | 类型           | 是否必选 | 描述                                                                                                                |\n| ------------------ | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData          | GraphData      | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n| start              | INode / string | true     | F6 Node 实例或 ID，路径起始点 ｜                                                                                    |\n| end                | INode / string | true     | F6 Node 实例或 ID，路径终点 ｜                                                                                      |\n| directed           | boolean        | false    | 是否考虑边的方向性，若不指定，则取图的 `directed` 属性 ｜                                                           |\n| weightPropertyName | string         | false    | 边的权重属性字段名，若不指定，则认为所有边权重相同 ｜                                                               |\n\n**返回值**\n\n- 返回值类型：Object，\n\n```\n {\n  length: number, // 最短路径长度\n  path: string[],\n  allPath: string[][] // start 到 end 的所有的最短路径\n}\n```\n\n- 返回的对象中，length 属性代表最短路径的长度，path 属性为构成一条最短路径的节点数组。\n\n**用法**\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"A\",\n      label: \"A\",\n    },\n    {\n      id: \"B\",\n      label: \"B\",\n    },\n    {\n      id: \"C\",\n      label: \"C\",\n    },\n    {\n      id: \"D\",\n      label: \"D\",\n    },\n    {\n      id: \"E\",\n      label: \"E\",\n    },\n    {\n      id: \"F\",\n      label: \"F\",\n    },\n    {\n      id: \"G\",\n      label: \"G\",\n    },\n    {\n      id: \"H\",\n      label: \"H\",\n    },\n  ],\n  edges: [\n    {\n      source: \"A\",\n      target: \"B\",\n    },\n    {\n      source: \"B\",\n      target: \"C\",\n    },\n    {\n      source: \"C\",\n      target: \"G\",\n    },\n    {\n      source: \"A\",\n      target: \"D\",\n    },\n    {\n      source: \"A\",\n      target: \"E\",\n    },\n    {\n      source: \"E\",\n      target: \"F\",\n    },\n    {\n      source: \"F\",\n      target: \"D\",\n    },\n    {\n      source: \"D\",\n      target: \"E\",\n    },\n  ],\n};\n\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 500,\n});\ngraph.data(data);\ngraph.render();\n\nconst { findShortestPath } = Algorithm;\n// 不考虑边的方向性，查找节点 A 和 节点 C 之间的最短路径\nconst { length, path, allPath } = findShortestPath(data, \"A\", \"C\");\nconsole.log(length, path);\n// 期望输出：2, ['A', 'B', 'C']\n```\n\n### findAllPath(graphData, start, end, directed)\n\n查找两点之间的所有路径。\n\n**参数**\n\n| 名称      | 类型           | 是否必选 | 描述                                                                                                                |\n| --------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData | GraphData      | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n| start     | INode / string | true     | F6 Node 实例或 ID，路径起始点 ｜                                                                                    |\n| end       | INode / string | true     | F6 Node 实例或 ID，路径终点 ｜                                                                                      |\n| directed  | boolean        | false    | 是否考虑边的方向性，若不指定，则取图的 `directed` 属性 ｜                                                           |\n\n**返回值**\n\n- 返回值类型：string[][]\n- 返回包含两个节点之间所有路径的数组，每条路径由节点 ID 数组表示\n\n**用法**\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"A\",\n      label: \"A\",\n    },\n    {\n      id: \"B\",\n      label: \"B\",\n    },\n    {\n      id: \"C\",\n      label: \"C\",\n    },\n    {\n      id: \"D\",\n      label: \"D\",\n    },\n    {\n      id: \"E\",\n      label: \"E\",\n    },\n    {\n      id: \"F\",\n      label: \"F\",\n    },\n    {\n      id: \"G\",\n      label: \"G\",\n    },\n    {\n      id: \"H\",\n      label: \"H\",\n    },\n  ],\n  edges: [\n    {\n      source: \"A\",\n      target: \"B\",\n    },\n    {\n      source: \"B\",\n      target: \"C\",\n    },\n    {\n      source: \"C\",\n      target: \"G\",\n    },\n    {\n      source: \"A\",\n      target: \"D\",\n    },\n    {\n      source: \"A\",\n      target: \"E\",\n    },\n    {\n      source: \"E\",\n      target: \"F\",\n    },\n    {\n      source: \"F\",\n      target: \"D\",\n    },\n    {\n      source: \"D\",\n      target: \"E\",\n    },\n  ],\n};\n\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 500,\n});\ngraph.data(data);\ngraph.render();\n\nconst { findAllPath } = Algorithm;\nconst allPath = findAllPath(data, \"A\", \"E\");\nconsole.log(allPath);\n// 期望输出值：[['A', 'D', 'F', 'E'], ['A', 'D', 'E'], ['A', 'E']]\n```\n\n### getConnectedComponents\n\n返回图中的连通分量。若为无向图，连通分量指图中的极大连通子图，连通子图中任何两个顶点之间通过路径相互连接；若为有向图，则返回所有强连通分量，强连通分量指有向图中的极大强连通子图，强连通子图中任何两个节点之间都存在一条可达到彼此的有向路径。\n\n参考资料：\n\n- 检测有向图中的强连通分量：[Tarjan's Algorithm](http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm)\n\n  **参数**\n\n| 名称      | 类型      | 是否必选 | 描述                                                                                                                |\n| --------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData | GraphData | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n| directed  | boolean   | false    | 是否考虑边的方向性，若不指定，则取图的 `directed` 属性 ｜                                                           |\n\n**返回值**\n\n- 返回值类型：INode[][]\n- 返回一个数组表示检测到的所有连通分量，每个连通分量为节点数组。\n\n**用法**\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"A\",\n    },\n    {\n      id: \"B\",\n    },\n    {\n      id: \"C\",\n    },\n    {\n      id: \"D\",\n    },\n    {\n      id: \"E\",\n    },\n    {\n      id: \"F\",\n    },\n    {\n      id: \"G\",\n    },\n    {\n      id: \"H\",\n    },\n  ],\n  edges: [\n    {\n      source: \"A\",\n      target: \"B\",\n    },\n    {\n      source: \"B\",\n      target: \"C\",\n    },\n    {\n      source: \"A\",\n      target: \"C\",\n    },\n    {\n      source: \"D\",\n      target: \"A\",\n    },\n    {\n      source: \"D\",\n      target: \"E\",\n    },\n    {\n      source: \"E\",\n      target: \"F\",\n    },\n    {\n      source: \"F\",\n      target: \"D\",\n    },\n    {\n      source: \"G\",\n      target: \"H\",\n    },\n    {\n      source: \"H\",\n      target: \"G\",\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  container: \"container\",\n  width: 500,\n  height: 400,\n});\ngraph.data(data);\ngraph.render();\n\n// 图中的连通分量\nconst components = getConnectedComponents(data, false);\ncomponents.forEach((component) => {\n  console.log(component.map((node) => node.get(\"id\")));\n});\n// 期望输出结果：['A', 'B', 'C', 'D', 'E', 'F'], ['G', 'H']\n\n// 有向图中的强连通分量\nconst components2 = getConnectedComponents(data, true);\ncomponents2.forEach((component) => {\n  console.log(component.map((node) => node.get(\"id\")));\n});\n// 期望输出结果：['A'], ['B'], ['C'], ['D', 'E', 'F'], ['G', 'H']\n```\n\n### pageRank\n\nPageRank 可以用来度量网络中节点的重要性，最初用于标识网页的重要性，对网页进行排序。PageRank 算法假设当前节点的重要性是由指向它的其他节点的重要性决定的，一个节点接收到的来自其他节点的入链 (inbound) 越多，则越重要，每个入链的权重由提供入链的节点的重要性决定。 因此 PageRank 除了考虑到入链数量，还参考了入链“质量”。PageRank 通过迭代递归计算来更新每个节点的得分，直到得分稳定为止。\n\n参考资料：\n\n- [PageRank](https://en.wikipedia.org/wiki/PageRank)\n\n  **参数**\n\n| 名称      | 类型      | 是否必选 | 描述                                                                                                                |\n| --------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------- |\n| graphData | GraphData | true     | 图数据，满足 F6 [数据格式](/zh/docs/manual/getting-started#step-2-数据准备)。注意，4.1 以前的版本该参数请传入图实例 |\n| epsilon   | number    | false    | 判断 PageRank 得分是否稳定的精度值，默认 0.000001 ｜                                                                |\n| linkProb  | number    | false    | 阻尼系数（dumping factor），指任意时刻，用户访问到某节点后继续访问该节点指向的节点的概率，默认 0.85。 ｜            |\n\n**返回值**\n\n- 返回值类型：Object, {[key: string]: number}\n- 返回一个对象，表示节点 ID 对应的该节点的 PageRank 值。\n"
  },
  {
    "path": "packages/site/docs/api/Behavior.zh.md",
    "content": "---\ntitle: 复合交互及其自定义 Behavior\norder: 13\n---\n\nBehavior 指 F6 中的复合交互，一般 Behavior 包含一个或多个事件的监听与处理以及一系列对图中元素的操作。\n\nBehavior 默认包含 `shouldBegin`，`shouldUpdate`，`shouldEnd` 三个回调，代表是否开始行为，是否更新元素，是否进行结束行为，当返回值为 `false` 时阻止默认行为。\n\n所有内置 Behavior 及其参数参见 [内置的 Behavior 教程](/zh/docs/manual/middle/states/defaultBehavior)。当 [内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior) 不能满足需求时，使用 `registerBehavior(behaviorName, behavior)` 方法注册自定义的交互行为。详见 [Behavior API](/zh/docs/api/Behavior)。本文将介绍如何自定义 Behavior。\n\n```ts\n// highlight-start\nF6.registerBehavior(behaviorName: string, behavior: BehaviorOption)\n// highlight-end\n\n// Custom a type of Behavior\nF6.registerBehavior('behaviorName', {\n  // Bind the event and its callback\n  getEvents() {\n    return {\n      'node:tap': 'onTap',\n      mousemove: 'onMousemove',\n      'edge:tap': 'onEdgeTap',\n    };\n  },\n  /**\n   * Handle the callback for node:tap\n   * @override\n   * @param  {Object} evt The handler\n   */\n  onTap(evt) {\n    const node = evt.item;\n    const graph = this.graph;\n    const point = { x: evt.x, y: evt.y };\n    const model = node.getModel();\n    // TODO\n  },\n  /**\n   * Handle the callback for mousemove\n   * @override\n   * @param  {Object} evt The handler\n   */\n  onMousemove(evt) {\n    // TODO\n  },\n  /**\n   * Handle the callback for :tap\n   * @override\n   * @param  {Object} evt The handler\n   */\n  onEdgeTap(evt) {\n    // TODO\n  },\n});\n```\n\n## 参数\n\n| 名称         | 类型           | 是否必选 | 描述                                                                                                    |\n| ------------ | -------------- | -------- | ------------------------------------------------------------------------------------------------------- |\n| behaviorName | String         | true     | 自定义 Behavior 的名称。                                                                                |\n| behavior     | BehaviorOption | true     | 自定义 behavior 时的配置项，配置项中包括的方法及作用具体请参考：[Behavior API](/zh/docs/api/Behavior)。 |\n\n### BehaviorOption.getEvents()\n\n自定义 Behavior 时，定义事件及处理事件的方法。\n\n`getEvents()` 方法中可以使用的事件请参考[Event 文档](/zh/docs/api/Event)。\n\n**用法**\n\n```javascript\nF6.registerBehavior('behaviorName', {\n  getEvents() {\n    return {\n      'node:tap': 'onNodeTap',\n      'edge:tap': 'onEdgeTap',\n      'mousemove': 'onMouseMove'\n    }\n  }\n}\n```\n\n### BehaviorOption.onNodeTap(evt)\n\n`onNodeTap`、`onEdgeTap` 和 `onMouseMove` 都属于自定义方法，用于处理 `node:tap`、`edge:tap`、`mousemove` 事件。\n\n**参数**\n\n| 名称 | 类型  | 是否必选 | 描述                                   |\n| ---- | ----- | -------- | -------------------------------------- |\n| evt  | Event | 否       | 包含事件句柄、当前操作对象及各坐标值等 |\n\n**参数 `evt` 包括以下属性：**\n\n| 名称             | 类型       | 描述               |\n| ---------------- | ---------- | ------------------ |\n| x                | Number     | 元素视口 x 坐标    |\n| y                | Number     | 元素视口 y 坐标    |\n| canvasX          | Number     | 元素 Canvas x 坐标 |\n| canvasY          | Number     | 元素 Canvas y 坐标 |\n| clientX          | Number     | 屏幕/页面 x 坐标   |\n| clientY          | Number     | 屏幕/页面 y 坐标   |\n| event            | MouseEvent | 事件句柄           |\n| target           | Shape      | 当前对象           |\n| type             | String     | 操作类型           |\n| currentTarget    | Object     |                    |\n| item             | Shape      | 操作的目标元素     |\n| removed          | Boolean    | 是否删除/销毁      |\n| timeStamp        | Number     | 时间戳             |\n| bubbles          | Boolean    | 是否支持事件冒泡   |\n| defaultPrevented | Boolean    | 是否阻止默认事件   |\n| cancelable       | Boolean    | 是否取消           |\n\n**用法**\n\n```javascript\nF6.registerBehavior(\"behaviorName\", {\n  getEvents() {\n    return {\n      \"node:tap\": \"onNodeTap\",\n      \"edge:tap\": \"onEdgeTap\",\n      mousemove: \"onMouseMove\",\n    };\n  },\n  onNodeTap(evt) {\n    // TODO\n  },\n  onEdgeTap(evt) {\n    // TODO\n  },\n  onMouseMove(evt) {\n    // TODO\n  },\n});\n```\n\n### BehaviorOption.getDefaultCfg()\n\n定义自定义 Behavior 时的默认参数，会与用户传入的参数进行合并。\n\n**提示：该方法是可选的**。\n\n**用法**\n\n```javascript\nF6.registerBehavior('behaviorName', {\n  getDefaultCfg() {\n    return {\n      trigger: 'click' // mouseneter or click\n    }\n  }\n}\n```\n\n### BehaviorOption.shouldBegin(evt)\n\n是否阻止行为发生，默认返回 `true`，不阻止行为，需要在处理逻辑中自行调用。\n\n**用法**\n\n```javascript\nF6.registerBehavior('behaviorName', {\n  shouldBegin() {\n    // 这里可以根据业务自定义\n    return true\n  }\n}\n```\n\n### BehaviorOption.shouldUpdate(evt)\n\n是否更新数据及更改视图，默认返回 `true`，允许更新，如果返回 `false`，则不更新数据和视图。\n\n**用法**\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n  modes: {\n    default: [\n      'drag-canvas',\n      {\n        type: 'self-behavior',\n        shouldUpdate: (e) => {\n          if (e.target.type !== 'text') {\n            return false;\n          }\n          return true;\n        },\n      },\n    ],\n  },\n});\n```\n\n### BehaviorOption.shouldEnd(evt)\n\n是否结束行为，默认返回 `true`。\n"
  },
  {
    "path": "packages/site/docs/api/Event.zh.md",
    "content": "---\ntitle: 基础事件 Event\norder: 12\n---\n\n本章介绍的事件可以通过 [graph.on](/zh/docs/api/graphFunc/on_off#graphoneventname-handler) 与 [graph.off](/zh/docs/api/graphFunc/on_off#graphoffeventname-handler) 进行绑定/解绑监听函数。\n\n通用事件、Node 事件、Edge 事件及 Canvas 事件回调的参数请参考 [Behavior API](/zh/docs/api/Behavior)。\n\n## 交互事件\n\n使用如下形式进行交互事件的监听：\n\n```\ngraph.on(eventName, evt => {\n  // 一些操作\n})\n```\n\n其中，事件对象 `evt` 的属性值有：\n\n- `type`: 事件类型\n- `name`: 事件名称\n- `x`: 画布上的 x 坐标\n- `y`: 画布上的 y 坐标\n- `clientX`: 浏览器窗口上的 x 坐标\n- `clientY`: 浏览器窗口上的 y 坐标\n- `canvasX`: 画布父容器视口上的 x 坐标\n- `canvasY`: 画布父容器视口上的 y 坐标\n\n（x/y，clientX/clientY，canvasX/canvasY 三套坐标系详解见 [F6 坐标系深度解析](/zh/docs/manual/advanced/coordinate-system)）\n\n- `item`: 事件的触发元素（节点/边/ Combo）\n- `target`: 事件的触发图形 [Shape](/zh/docs/manual/middle/elements/shape/shape-keyshape) 或画布对象\n- `bubbles`: 是否允许冒泡\n- `defaultPrevented`: 是否阻止了原生事件\n- `originalEvent`: 原始浏览器事件对象\n- `timeStamp`: 触发事件的时间\n- `propagationStopped`: 是否阻止传播（向上冒泡）\n- `propagationPath`: 触发事件的路径\n\n`eventName` 见下方内容。\n\n### 通用交互事件\n\n| 事件名称  | 描述                                                                                               |\n| --------- | -------------------------------------------------------------------------------------------------- |\n| tap       | 点击设备屏幕                                                                                       |\n| dbltap    | 快速点击两次设备屏幕                                                                               |\n| dragstart | 当拖拽元素开始被拖拽的时候触发的事件，此事件作用在被拖曳元素上                                     |\n| drag      | 当拖拽元素在拖动过程中时触发的事件，此事件作用于被拖拽元素上                                       |\n| dragend   | 当拖拽完成后触发的事件，此事件作用在被拖曳元素上                                                   |\n| dragenter | 当拖曳元素进入目标元素的时候触发的事件，此事件作用在目标元素上                                     |\n| dragleave | 当拖曳元素离开目标元素的时候触发的事件，此事件作用在目标元素上                                     |\n| drop      | 被拖拽的元素在目标元素上同时放开触发的事件，此事件作用在目标元素上                                 |\n| panstart  | 当手指触摸屏幕时候触发，即使已经有一个手指放在屏幕上也会触发                                       |\n| panmove   | 当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间，调用 `preventDefault()` 事件可以阻止滚动。 |\n| panend    | 当手指从屏幕上离开的时候触发                                                                       |\n\n### Node 交互事件\n\n| 事件名称       | 描述                                                               |\n| -------------- | ------------------------------------------------------------------ |\n| node:tap       | 点击设备屏幕触发                                                   |\n| node:dbltap    | 快速双击屏幕触发                                                   |\n| node:dragstart | 当节点开始被拖拽的时候触发的事件，此事件作用在被拖曳节点上         |\n| node:drag      | 当节点在拖动过程中时触发的事件，此事件作用于被拖拽节点上           |\n| node:dragend   | 当拖拽完成后触发的事件，此事件作用在被拖曳节点上                   |\n| node:dragenter | 当拖曳节点进入目标元素的时候触发的事件，此事件作用在目标元素上     |\n| node:dragleave | 当拖曳节点离开目标元素的时候触发的事件，此事件作用在目标元素上     |\n| node:dragover  | 当拖曳节点在另一目标元素上移动时触发此事件，此事件作用在目标元素上 |\n| node:drop      | 被拖拽的节点在目标元素上同时放开触发的事件，此事件作用在目标元素上 |\n| node:panstart  | 在触控屏上，当节点开始被触碰的时候触发的事件                       |\n| node:panmove   | 在触控屏上，当节点开始被触碰过程中触发的事件                       |\n| node:panend    | 在触控屏上，当节点开始被触碰结束的时候触发的事件                   |\n\n### Edge 交互事件\n\n| 事件名称       | 描述                                                                   |\n| -------------- | ---------------------------------------------------------------------- |\n| edge:tap       | 点击设备屏幕触发                                                       |\n| edge:dbltap    | 快速双击屏幕触发                                                       |\n| edge:dragenter | 当拖曳元素进入目标边元素的时候触发的事件，此事件作用在目标边元素上     |\n| edge:dragleave | 当拖曳元素离开目标边元素的时候触发的事件，此事件作用在目标边元素上     |\n| edge:dragover  | 当拖曳元素在另一目标边上移动时触发此事件，此事件作用在目标边元素上     |\n| edge:drop      | 被拖拽的元素在目标边元素上同时放开触发的事件，此事件作用在目标边元素上 |\n\n### Combo 交互事件\n\nCombo 继承所有 Node 事件。\n\n### Canvas 交互事件\n\n| 事件名称         | 描述                                                               |\n| ---------------- | ------------------------------------------------------------------ |\n| canvas:tap       | 点击画布时触发                                                     |\n| canvas:dbltap    | 双击画布时触发                                                     |\n| canvas:dragstart | 当画布开始被拖拽的时候触发的事件，此事件作用在被拖曳画布上         |\n| canvas:drag      | 当画布在拖动过程中时触发的事件，此事件作用于被拖拽画布上           |\n| canvas:dragend   | 当拖拽完成后触发的事件，此事件作用在被拖曳画布上                   |\n| canvas:dragenter | 当拖曳画布进入目标元素的时候触发的事件，此事件作用在目标画布上     |\n| canvas:dragleave | 当拖曳画布离开目标元素的时候触发的事件，此事件作用在目标画布上     |\n| canvas:drop      | 被拖拽的元素在空白画布上同时放开触发的事件，此事件作用在目标画布上 |\n| canvas:panstart  | 在触控屏上，当画布开始被触碰的时候触发的事件                       |\n| canvas:panmove   | 在触控屏上，当画布开始被触碰过程中触发的事件                       |\n| canvas:panend    | 在触控屏上，当画布开始被触碰结束的时候触发的事件                   |\n\n## 时机事件\n\n用于监听图的某方法调用前后的时机。使用如下形式进行交互事件的监听：\n\n```\ngraph.on(timingEventName, evt => {\n  // 一些操作\n})\n```\n\n`timingEventName` 见下方内容。\n\n| 事件名称                   | 描述                                                                                                                                     |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| beforerender               | 调用 `graph.render` / `graph.read` 方法之前触发                                                                                          |\n| afterrender                | 调用 `graph.render` / `graph.read` 方法之后触发                                                                                          |\n| beforeadditem              | 调用 `graph.add` / `graph.addItem` 方法之前触发                                                                                          |\n| afteradditem               | 调用 `graph.add` / `graph.addItem` 方法之后触发                                                                                          |\n| beforeremoveitem           | 调用 `graph.remove` / `graph.removeItem` 方法之前触发                                                                                    |\n| afterremoveitem            | 调用 `graph.remove` / `graph.removeItem` 方法之后触发                                                                                    |\n| beforeupdateitem           | 调用 `graph.update` / `graph.updateItem` 方法之前触发                                                                                    |\n| afterupdateitem            | 调用 `graph.update` / `graph.updateItem` 方法之后触发                                                                                    |\n| beforeitemvisibilitychange | 调用 `graph.showItem` / `graph.hideItem` 方法之前触发                                                                                    |\n| afteritemvisibilitychange  | 调用 `graph.showItem` / `graph.hideItem` 方法之后触发                                                                                    |\n| beforeitemstatechange      | 调用 `graph.setItemState` 方法之前触发                                                                                                   |\n| afteritemstatechange       | 调用 `graph.setItemState` 方法之后触发                                                                                                   |\n| beforeitemrefresh          | 调用 `graph.refreshItem` 方法之前触发                                                                                                    |\n| afteritemrefresh           | 调用 `graph.refreshItem` 方法之后触发                                                                                                    |\n| beforeitemstatesclear      | 调用 `graph.clearItemStates` 方法之前触发                                                                                                |\n| afteritemstatesclear       | 调用 `graph.clearItemStates` 方法之后触发                                                                                                |\n| beforemodechange           | 调用 `graph.setMode` / `graph.addBehaviors` / `graph.removeBehaviors` 方法之前触发                                                       |\n| aftermodechange            | 调用 `graph.setMode` / `graph.addBehaviors` / `graph.removeBehaviors` 方法之后触发                                                       |\n| beforelayout               | 布局前触发。调用 `graph.render` 时会进行布局，因此 `render` 时会触发。或用户主动调用图的 `graph.layout` 时触发。                         |\n| afterlayout                | 布局完成后触发。调用 `graph.render` 时会进行布局，因此 `render` 时布局完成后会触发。或用户主动调用图的 `graph.layout` 时布局完成后触发。 |\n| beforegraphrefreshposition | `graph.refreshPositions` 被调用前触发                                                                                                    |\n| aftergraphrefreshposition  | `graph.refreshPositions` 被调用后触发                                                                                                    |\n| beforegraphrefresh         | `graph.refresh` 被调用前触发                                                                                                             |\n| aftergraphrefresh          | `graph.refresh` 被调用后触发                                                                                                             |\n| beforeanimate              | 全局动画发生前触发                                                                                                                       |\n| afteranimate               | 全局动画发生后触发                                                                                                                       |\n| beforecreateedge           | 使用内置交互 `create-edge`，创建边之前触发                                                                                               |\n| aftercreateedge            | 使用内置交互 `create-edge`，创建边之后触发                                                                                               |\n| beforecollapseexpandcombo  | 当一个 combo 被收起或展开之前被触发，参数 `action` 指明了是收起还是展开                                                                  |\n| aftercollapseexpandcombo   | 当一个 combo 被收起或展开之后被触发，参数 `action` 指明了是收起还是展开                                                                  |\n| graphstatechange           | 调用 `graph.updateItemState` 方法之后触发                                                                                                |\n| afteractivaterelations     | 使用了 `'activate-relations'` Behavior 并触发了该行为后，该事件被触发                                                                    |\n| nodeselectchange           | 使用了 `'brush-select'` , `'click-select'` 或 `'lasso-select'` Behavior 且选中元素发生变化时，该事件被触发                               |\n| itemcollapsed              | 在 TreeGraph 上使用了 `'collapse-expand'` Behavior 并触发了该行为后，该事件被触发                                                        |\n| tooltipchange              | 使用了 `'tooltip'` 或 `'edge-tooltip'` Behavior 且 tooltip 的显示/隐藏被改变后，该事件被触发                                             |\n| wheelzoom                  | 使用了 `'zoom-canvas'` Behavior 并用滚轮对图进行缩放后，该事件被触发                                                                     |\n| viewportchange             | 调用 `graph.moveTo`，`graph.translate`，或 `graph.zoom` 均会触发该事件                                                                   |\n| dragnodeend                | 使用了 `'drag-node'` Behavior，当拖动结束时，该事件被触发                                                                                |\n| stackchange                | 撤销/重做栈发生变化时，该事件触发                                                                                                        |\n\n**插件中的时机事件**\n\nTimeBar 插件：\n\n| 事件名称         | 描述                           |\n| ---------------- | ------------------------------ |\n| valuechange      | 时间轴的时间范围发生变化时触发 |\n| timebarstartplay | 时间轴开始播放时触发           |\n| timebarendplay   | 时间轴播放结束时触发           |\n\nTooltip 插件：\n\n| 事件名称      | 描述                   |\n| ------------- | ---------------------- |\n| tooltipchange | Tooltip 发生变化时触发 |\n\n### 回调参数\n\n不同时机监听事件的回调参数不同，下面针对各个自定义事件的回调参数进行说明。\n\n#### beforerender / afterrender\n\n无参数\n\n#### beforeadditem\n\n| 名称  | 类型   | 描述           |\n| ----- | ------ | -------------- |\n| type  | String | 当前添加的类型 |\n| model | Object | item 数据模型  |\n\n#### afteradditem\n\n| 名称  | 类型   | 描述                 |\n| ----- | ------ | -------------------- |\n| item  | Item   | 已经添加的 item 实例 |\n| model | Object | item 数据模型        |\n\n#### beforeremoveitem / afterremoveitem\n\n| 名称 | 类型 | 描述               |\n| ---- | ---- | ------------------ |\n| item | Item | 要删除的 item 实例 |\n\n#### beforeupdateitem / afterupdateitem\n\n| 名称  | 类型   | 描述               |\n| ----- | ------ | ------------------ |\n| item  | Item   | 要更新的 item 实例 |\n| model | Object | item 数据模型      |\n\n#### beforeitemvisibilitychange / afteritemvisibilitychange\n\n| 名称    | 类型    | 描述                                      |\n| ------- | ------- | ----------------------------------------- |\n| item    | Item    | 当前操作的 item 实例                      |\n| visible | Boolean | 是否可见，`true` 为可见，`false` 为不可见 |\n\n#### beforeitemstatechange / afteritemstatechange\n\n| 名称    | 类型    | 描述                                      |\n| ------- | ------- | ----------------------------------------- |\n| item    | Item    | 当前操作的 item 实例                      |\n| state   | String  | 状态                                      |\n| enalbed | Boolean | 状态是否可用，`true` 可用，`false` 不可用 |\n\n#### beforeitemstatesclear / afteritemstatesclear\n\n| 名称   | 类型           | 描述                 |\n| ------ | -------------- | -------------------- |\n| item   | Item           | 当前操作的 item 实例 |\n| states | Array / String | 需要批量清除的状态   |\n\n#### beforemodechange / aftermodechange\n\n| 名称 | 类型   | 描述           |\n| ---- | ------ | -------------- |\n| mode | String | 当前的模式名称 |\n\n#### beforeitemrefresh / afteritemrefresh\n\n| 名称 | 类型 | 描述                 |\n| ---- | ---- | -------------------- |\n| item | Item | 当前操作的 item 实例 |\n\n#### beforelayout / afterlayout\n\n无参数\n\n#### graphstatechange\n\n| 名称   | 类型   | 描述                                                                         |\n| ------ | ------ | ---------------------------------------------------------------------------- |\n| states | Object | 当前各个状态下的元素，格式举例 `{ hover: [Node, Node], selected: [ Node ] }` |\n\n#### afteractivaterelations\n\n| 名称   | 类型   | 描述                 |\n| ------ | ------ | -------------------- |\n| item   | Item   | 当前操作的 item 实例 |\n| action | String | 当前操作名           |\n\n#### nodeselectchange\n\n| 名称          | 类型   | 描述                                                             |\n| ------------- | ------ | ---------------------------------------------------------------- |\n| target        | Item   | 当前操作的 item 实例                                             |\n| selectedItems | Object | 当前被选中的所有 item 实例，形如 `{ nodes: [...], edges: [...]}` |\n\n#### beforecreateedge / aftercreateedge\n\n`beforecreateedge` 无参数。`aftercreateedge` 参数如下：\n\n| 名称 | 类型 | 描述               |\n| ---- | ---- | ------------------ |\n| edge | Item | 当前被创建的边实例 |\n\n#### beforecollapseexpandcombo / aftercollapseexpandcombo\n\n| 名称   | 类型   | 描述                                    |\n| ------ | ------ | --------------------------------------- |\n| action | string | 具体的操作， `'collapse'` 或 `'expand'` |\n| combo  | Item   | 被操作的 combo item                     |\n\n#### itemcollapsed\n\n| 名称      | 类型    | 描述                                  |\n| --------- | ------- | ------------------------------------- |\n| item      | Item    | 当前操作的 item 实例                  |\n| collapsed | Boolean | 当前操作后，操作对象的 collapsed 状态 |\n\n#### tooltipchange\n\n| 名称   | 类型   | 描述                                          |\n| ------ | ------ | --------------------------------------------- |\n| item   | Item   | 当前操作的 item 实例                          |\n| action | String | tooltip 当前是显示 `'show'` 还是隐藏 `'hide'` |\n\n#### wheelzoom\n\n| 名称                       | 类型   | 描述                                                         |\n| -------------------------- | ------ | ------------------------------------------------------------ |\n| deltaX                     | Number | 滚动的 x 方向，取值 `1`，`0`，`-1`，`0` 代表没有该方向的滚动 |\n| deltaY                     | Number | 滚动的 y 方向，取值 `1`，`0`，`-1`，`0` 代表没有该方向的滚动 |\n| ... 其他滚轮事件的回调参数 |        |                                                              |\n\n#### viewportchange\n\n| 名称   | 类型                          | 描述                                                                                                                                     |\n| ------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| action | 'translate' / 'move' / 'zoom' | 视窗变换的类型，`'translate'`、`'move'`、`'zoom'` 分别标识该时机是由 `graph.translate`、`graph.move`、还是 `graph.zoom` 函数的调用而产生 |\n| matrix | Array                         | 视窗变换后的图的矩阵                                                                                                                     |\n\n#### dragnodeend\n\n| 名称       | 类型            | 描述                                                    |\n| ---------- | --------------- | ------------------------------------------------------- |\n| items      | Item[]          | 当前操作的 item 实例                                    |\n| targetItem | null/Node/Combo | 拖动节点结束后，节点是放到 canvas、Node 还是 Combo 上面 |\n\n#### stackchange\n\n| 名称      | 类型     | 描述     |\n| --------- | -------- | -------- |\n| redoStack | Object[] | 重做堆栈 |\n| undoStack | Object[] | 撤销堆栈 |\n\n#### valuechange\n\n| 名称  | 类型     | 描述                                                         |\n| ----- | -------- | ------------------------------------------------------------ |\n| value | number[] | 时间轴当前时间范围，`value[0]` 为起始值，`value[1]` 为结束值 |\n\n#### timelinestart / timelineend\n\n无参数\n\n#### tooltipchange\n\n| 名称   | 类型            | 描述                             |\n| ------ | --------------- | -------------------------------- |\n| item   | Item            | tooltip 所关联的元素（节点/边）  |\n| action | 'show' / 'hide' | tooltip 当前的变化时显示还是隐藏 |\n"
  },
  {
    "path": "packages/site/docs/api/Graph.zh.md",
    "content": "---\ntitle: 图配置 F6.Graph(cfg)\norder: 0\nredirect_from:\n  - /en/docs/api\n---\n\nGraph 是 F6 图表的载体，所有的 F6 节点实例操作以及事件，行为监听都在 Graph 实例上进行。Graph 的初始化通过 new 进行实例化，实例化时需要传入需要的参数。\n\n```ts\n// highlight-start\nnew F6.Graph(cfg: GraphOptions) => Graph\n// highlight-end\n\nconst graph = new F6.Graph({\n  container: '',\n  width: 500,\n  height: 500,\n  modes: {\n    default: ['drag-canvas'],\n  },\n  layout: {\n    type: 'radial',\n    unitRadius: 50,\n    center: [500, 300],\n  },\n});\n```\n\n### GraphOptions.container\n\n<description> _string | HTMLElement_ **required** </description>\n\n图的 DOM 容器，可以传入该 DOM 的 id 或者直接传入容器的 HTML 节点对象。\n\n### GraphOptions.width\n\n<description> _Number_ **optional** </description>\n\n指定画布宽度，单位为 'px'，默认为画布容器宽度。\n\n### GraphOptions.height\n\n<description> _Number_ **optional** </description>\n\n指定画布高度，单位为 'px'，默认为画布容器高度。\n\n### GraphOptions.fitView\n\n<description> _Boolean_ **optional** _default:_ `false`</description>\n\n是否开启画布自适应。开启后图自动适配画布大小。\n\n### GraphOptions.fitViewPadding\n\n<description> _Array | Number_ **optional** _default:_ `0`</description>\n\n`fitView` 为 `true` 时生效。图适应画布时，指定四周的留白。<br />- 可以是一个值, 例如：`fitViewPadding: 20`<br />- 也可以是一个数组，例如：`fitViewPadding: [ 20, 40, 50, 20 ]`<br />当指定一个值时，四边的边距都相等，当指定数组时，数组内数值依次对应 上，右，下，左四边的边距。\n\n### GraphOptions.fitCenter\n\n<description> _Boolean_ **optional** _default:_ `false`</description>\n\n开启后，图将会被平移，图的中心将对齐到画布中心，但不缩放。优先级低于 fitView。\n\n### GraphOptions.linkCenter\n\n<description> _Boolean_ **optional** _default:_ `false`</description>\n\n指定边是否连入节点的中心。\n\n### GraphOptions.groupByTypes\n\n<description> _Boolean_ **optional** _default:_ `true`</description>\n\n各种元素是否在一个分组内，决定节点和边的层级问题，默认情况下所有的节点在一个分组中，所有的边在一个分组中，当这个参数为 false 时，节点和边的层级根据生成的顺序确定。当使用 Combo 时，**必须**将其设置为 `false` 。\n\n### GraphOptions.autoPaint\n\n<description> _Boolean_ **optional** _default:_ `true`</description>\n\n当图中元素更新，或视口变换时，是否自动重绘。建议在批量操作节点时关闭，以提高性能，完成批量操作后再打开，参见后面的 setAutoPaint() 方法。\n\n### GraphOptions.modes\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n设置画布的交互模式。详情可见 [交互模式 Mode](/zh/docs/manual/middle/states/mode) 文档。\n\n#### GraphOptions.modes.default\n\n<description> _Object_ **optional** _default:_ `[]`</description>\n\n画布默认的模式。详情可参见 [内置的 Behavior](/zh/docs/manual/middle/states/defaultBehavior) 文档。\n\n### GraphOptions.nodeStateStyles\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n各个状态下节点的样式，例如 `hover`、`selected`。\n\n### GraphOptions.edgeStateStyles\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n各个状态下边的样式，例如 `hover`、`selected`。\n\n### GraphOptions.comboStateStyles\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n各个状态下 Combo 的样式，例如 `hover`、`selected`。\n\n### GraphOptions.defaultNode\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n默认状态下节点的配置，比如 `type`, `size`, `color`。会被写入的 data 覆盖。 见 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 。\n\n### GraphOptions.defaultEdge\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n默认状态下边的配置，比如 `type`, `size`, `color`。会被写入的 data 覆盖。 见 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 。\n\n### GraphOptions.defaultCombo\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n默认状态下 Combo 的配置，比如 `type`, `color`。会被写入的 data 覆盖。见 [Combo 的通用属性](/zh/docs/manual/middle/elements/combos/defaultCombo#combo-的通用属性) 。\n\n### GraphOptions.plugins\n\n<description> _Array _ **optional** _default:_ `[]`</description>\n\n向 graph 注册插件。插件机制请见：[插件](/zh/docs/manual/tutorial/plugins#插件) 。\n\n### GraphOptions.animate\n\n<description> _Boolean _ **optional** _default:_ `false`</description>\n\n是否启用全局动画。\n\n### GraphOptions.animateCfg\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n动画配置项，仅在 `animate` 为 `true` 时有效。关于 `animateCfg` 的更多配置项参见[基础动画教程](/zh/docs/manual/advanced/animation#animatecfg)。\n\n#### GraphOptions.animateCfg.onFrame\n\n<description> _Function_ **optional** _default:_ `null`</description>\n\n回调函数，用于自定义节点运动路径，为空时线性运动。\n\n#### GraphOptions.animateCfg.duration\n\n<description> _Number_ **optional** _default:_ `500`</description>\n\n动画时长，单位为毫秒。\n\n#### GraphOptions.animateCfg.easing\n\n<description> _string_ **optional** _default:_ `easeLinear`</description>\n\n动画动效，可参见 d3 ease。\n\n### GraphOptions.minZoom\n\n<description> _Number_ **optional** _default:_ `0.2`</description>\n\n最小缩放比例。\n\n### GraphOptions.maxZoom\n\n<description> _Number_ **optional** _default:_ `10`</description>\n\n最大缩放比例。\n\n### GraphOptions.layout\n\n<description> _Object_ **optional** _default:_ `{}`</description>\n\n布局配置项，使用 type 字段指定使用的布局方式，type 可取以下值：random, radial, mds, circular, fruchterman, force, gForce, forceAtlas2, dagre, concentric, grid。当实例化图时没有配置 `layout` 时：\n\n- 若数据中节点有位置信息（`x` 和 `y`），则按照数据的位置信息进行绘制；\n- 若数据中节点没有位置信息，则默认使用 Random Layout 进行布局。\n\n每种布局方法的配置项不尽相同，具体参见 [Graph 内置布局](/zh/docs/api/F6/common/graphLayout)。\n\n#### GraphOptions.layout.pipes\n\n**流水线子图布局**\n\n在 `GraphOptions.layout` 中可配置 `pipes` 达到同时对不通过子图使用不同布局的目的。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*TaymQYKOJkgAAAAAAAAAAAAAARQnAQ' alt=\"img\" width='400px'>\n\n在实例化图时配置 `layout.pipes` 数组，指定多个子图布局的布局类型（`type`）、布局参数、节点过滤函数（`nodesFilter`）。值得注意的是，若某些节点同时属于不同的子图（即这些节点在不同的子图的 `nodesFilter` 配置都返回为 `true`），则这些节点位置的计算将按照 `pipes` 数组顺序后者覆盖前者。\n\n`pipes` 的数据类型为：\n\n```javascript\ntype Pipes = {\n  // 该子图所使用的布局类型\n  type:\n    | 'random'\n    | 'radial'\n    | 'mds'\n    | 'circular'\n    | 'fruchterman'\n    | 'force'\n    | 'gForce'\n    | 'dagre'\n    | 'concentric'\n    | 'grid'\n    | 'forceAtlas2',\n  // 节点的筛选器，参数为节点数据，返回布尔值代表该节点是否在该子图中\n  nodesFilter: (node: NodeData) => boolean, // 布局对应的参数，详见各个布局的参数\n  ...\n}[];\n```\n\n使用方法如下：\n\n```javascript\nlayout: {\n  pipes: [\n    {\n      // 该子图所使用的布局类型\n      type: 'circular',\n      // 根据节点的某个字段判断是否属于该子图\n      nodesFilter: (node) => node.subGraphId === '1'\n    },\n    {\n      type: 'grid',\n      // 该 grid 布局的其他参数\n      begin: [100, 0],\n      nodesFilter: (node) => node.subGraphId === '2'\n    }\n  ],\n},\n```\n\n### GraphOptions.renderer\n\n<description> _'canvas' / 'svg' / 'mini' / 'mini-native' _ **optional** _default:_ `'canvas'`</description>\n\n### GraphOptions.enabledStack\n\n<description> _boolean_ **optional** _default:_ `false`</description>\n\n是否启用 stack，即是否开启 redo & undo 功能。\n\n### GraphOptions.maxStep\n\n<description> _number_ **optional** _default:_ `10`</description>\n\nredo & undo 最大步数, 只有当 enabledStack 为 true 时才起作用。\n"
  },
  {
    "path": "packages/site/docs/api/Group.zh.md",
    "content": "---\ntitle: 图形分组 Graphics Group\norder: 10\n---\n\n图形分组 Graphics Group（下文简称 Group） 类似于 <a href='https://developer.mozilla.org/zh-CN/docs/Web/SVG/Element/g' target='_blank'>SVG 中的 `<g>` 标签</a>：Group  是用来组合图形对象的容器。在 Group  上添加变换（例如剪裁、旋转、放缩、平移等）会应用到其所有的子元素上。在 Group  上添加属性（例如颜色、位置等）会被其所有的子元素继承。此外， Group 可以多层嵌套使用，因此可以用来定义复杂的对象。关于 Group 更详细的介绍请参考 [图形分组 Group](/zh/docs/manual/middle/elements/shape/graphics-group) 文档。\n\n## 获取元素的 group\n\n```javascript\n// 获取元素(节点/边/Combo)的图形对象的容器\nconst group = item.getContainer();\n\n// 等价于\nconst group = item.get(\"group\");\n```\n\n## group 实例方法\n\n### group.addGroup(cfg)\n\n向分组中添加新的分组。\n\n**参数**\n\n| 名称 | 类型   | 说明                 |\n| ---- | ------ | -------------------- |\n| cfg  | Object | 分组到配置项，非必须 |\n\n其中，`cfg` 不是必须指定到，它包括以下字段：\n\n| 名称      | 类型    | 说明                                                                                                                                                                                                                                                                                                     |\n| --------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| id        | String  | 图形分组的唯一标识，非必须指定，指定则必须唯一                                                                                                                                                                                                                                                           |\n| name      | String  | 图形分组的标识，非必须指定，可以不唯一。在 F6 3.3 及以后版本中必须指定。另外，`name` 可以用于组内搜索到该元素：`const shape = group.find(element => element.get('name') === 'shape-name')`，find 函数用法见 [find(fn)](#findfn)                                                                          |\n| capture   | Boolean | 非必须指定，该图形分组是否可以被鼠标事件捕捉到，即是否能够响应各鼠标事件。非必须指定                                                                                                                                                                                                                     |\n| visible   | Boolean | 非必须指定，该图形分组是否可见。非必须指定，默认为 `true`                                                                                                                                                                                                                                                |\n| draggable | Boolean | 非必须指定，该图形分组是否允许被拖拽。例如，自定义节点通过 `addGroup` 添加图形分组，当该图形分组的 `draggable` 值为 `true` 时，鼠标在该自定义节点的这个图形分组上才能够响应 `dragstart`，`drag`，与 `dragend` 事件；在实例化图时的 `modes` 中配置的 `'drag-node'` 交互才可以在该图形分组上进行拖拽时生效 |\n| zIndex    | Number  | 非必须指定，该图形分组的视觉层次 z-index。非必须指定。指定后，调用 `group.sort()` 可以对组内所有图形根据各自 zIndex 进行视觉层次的排序                                                                                                                                                                   |\n\n**用法**\n\n```javascript\n// No configurations\ngroup.addGroup();\n\n// Configured\ngroup.addGroup({\n  id: \"groupId\",\n  draggable: true,\n  // other configurations\n});\n```\n\n### group.addShape(type, cfgs)\n\n向分组中添加新的图形。<br /><span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 在分组上添加的 clip， transform 等操作会影响到该分组中的所有图形。所有图形及其绘图属性请见 [Shape Doc](/zh/docs/manual/middle/elements/shape/shape-keyshape)。\n\n**参数**\n\n| 名称 | 类型   | 说明                                                                                                                                                                                       |\n| ---- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| type | String | 图元素类型，值可以为：`'rect'`、`'circle'`、`'fan'`、`'ellipse'`、`'marker'`、`'image'` 等，具体参考 [Shape 的类型及属性](/zh/docs/manual/middle/elements/shape/shape-and-properties) 教程 |\n| cfg  | Object | 图元素的属性                                                                                                                                                                               |\n\n其中，`cfg` 包括以下字段：\n\n| 名称      | 类型    | 说明                                                                                                                                                                                                                                                                     |\n| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| attrs     | Object  | 图形样式，必须配置，例如：`{x: 0, y: 10, fill: '#0f0'}`                                                                                                                                                                                                                  |\n| name      | String  | 图形的标识，可以不唯一。在 F6 3.3 及以后版本中必须指定。另外，`name` 可以用于组内搜索到该元素：`const shape = group.find(element => element.get('name') === 'shape-name')`，find 函数用法见 [find(fn)](#findfn)                                                          |\n| capture   | Boolean | 该图形是否可以被鼠标事件捕捉到，即是否能够响应各鼠标事件。非必须指定                                                                                                                                                                                                     |\n| visible   | Boolean | 该图形是否可见。非必须指定，默认为 `true`                                                                                                                                                                                                                                |\n| draggable | Boolean | 该图形是否允许被拖拽。例如，自定义节点通过 `addShape` 添加图形，当该图形的 `draggable` 值为 `true` 时，鼠标在该自定义节点的这个图形上才能够响应 `dragstart`，`drag`，与 `dragend` 事件；在实例化图时的 `modes` 中配置的 `'drag-node'` 交互才可以在该图形上进行拖拽时生效 |\n| zIndex    | Number  | 该图形的视觉层次 z-index。非必须指定。指定后，调用 `group.sort()` 可以对组内所有图形根据各自 zIndex 进行视觉层次的排序                                                                                                                                                   |\n\n**用法**\n\n```javascript\ngroup.addShape(\"rect\", {\n  attrs: {\n    x: 0, // 必须配置\n    y: 0, // 必须配置\n    fill: \"red\",\n    stroke: \"red\",\n    shadowOffsetX: 10,\n    shadowOffsetY: 10,\n    shadowColor: \"blue\",\n    shadowBlur: 10,\n    opacity: 0.8,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"rect-shape\",\n  zIndex: 1,\n});\n```\n\n### group.contain(child)\n\n该分组是否包含此元素。<br />返回值: Boolean\n\n**参数**\n\n| 名称  | 类型          | 说明                   |\n| ----- | ------------- | ---------------------- |\n| child | Group / Shape | 子 Group 或 Shape 实例 |\n\n**用法**\n\n```javascript\nconst has = group.contain(child);\n```\n\n### group.find(fn)\n\n根据指定条件返回对应元素，**只返回符合条件的第一个元素**。\n\n**参数**\n\n| 名称 | 类型     | 说明           |\n| ---- | -------- | -------------- |\n| fn   | Function | 自定义回调函数 |\n\n**用法**\n\n```javascript\nconst child = group.find(function (item) {\n  return item.attr(\"fill\") === \"red\"; // 找到首个填充为红色的图形\n});\n```\n\n### group.findById(id)\n\n根据元素 ID 返回对应的实例。<br />返回值：Object。\n\n**参数**\n\n| 名称 | 类型   | 说明          |\n| ---- | ------ | ------------- |\n| id   | String | Group 实例 ID |\n\n**用法**\n\n```javascript\nconst group1 = group.findById(\"group1\");\n```\n\n### group.findAll(fn)\n\n返回所有符合条件的元素。<br />返回值: [ Object ]\n\n**参数**\n\n| 名称 | 类型     | 说明           |\n| ---- | -------- | -------------- |\n| fn   | Function | 自定义回调函数 |\n\n**用法**\n\n```javascript\nconst children = group.findAll(function (item) {\n  return item.get(\"id\") < 10; // 获取所有id小于10的元素\n});\n```\n\n### group.getShape(x,y)\n\n返回该坐标点最上层的元素。<br />返回值: Object\n\n**参数**\n\n| 名称 | 类型   | 说明   |\n| ---- | ------ | ------ |\n| x    | Number | x 坐标 |\n| y    | Number | y 坐标 |\n\n**用法**\n\n```javascript\n// 获取 (10, 30) 坐标点上层的元素\nconst element = group.getShape(10, 30);\n```\n\n### group.getFirst()\n\n获取该分组的第一个子元素。<br />返回值: Object\n\n**用法**\n\n```javascript\nconst child = group.getFirst();\n\n// 等价于\nconst childrens = group.get(\"children\");\nconst child = childrens[0];\n```\n\n### group.getLast()\n\n获取该分组的最后一个子元素。<br />返回值: Object\n\n**用法**\n\n```javascript\nconst child = group.getLast();\n\n// 等价于\nconst childrens = group.get(\"children\");\nconst child = childrens[childrens.length - 1];\n```\n\n### group.getChildByIndex(index）\n\n返回第 `index`  个子元素，从 `0` 开始计数。<br />返回值: Object\n\n**参数**\n\n| 名称  | 类型   | 说明                     |\n| ----- | ------ | ------------------------ |\n| index | Number | 子元素的序号，默认为 `0` |\n\n**用法**\n\n```javascript\nconst child = group.getChildByIndex(2);\n```\n\n### group.removeChild(child)\n\n从分组中删除一个分组或一个图形。\n\n**参数**\n\n| 名称  | 类型          | 说明                   |\n| ----- | ------------- | ---------------------- |\n| child | Group / Shape | 子 group 或 Shape 实例 |\n\n**用法**\n\n```javascript\ngroup.removeChild(child);\n```\n\n### group.sort()\n\n排序方法。<br />一般用于在设置子元素层叠顺序时使用。\n\n典型使用场景：通过 `group.addShape()` 添加 `shape` 时，添加的每个 `shape` 都设置了 `index`，在最后调用 `group.sort()` 可以对添加的 `shape` 进行排序。\n\n**用法**\n\n```javascript\ngroup.sort();\n```\n\n### group.clear()\n\n清除该组的所有子元素。\n\n**用法**\n\n```javascript\ngroup.clear();\n```\n"
  },
  {
    "path": "packages/site/docs/api/Items/comboMethods.zh.md",
    "content": "---\ntitle: combo 实例方法\norder: 3\n---\n\nCombo 继承自 Node，具有 Node 的所有特性。本文仅介绍 Combo 类的通用方法，内置节点见 [内置 Combo 文档](/zh/docs/manual/middle/elements/combos/defaultCombo) 和 [demo](/zh/docs/examples/item/defaultCombos)，自定义节点见 [自定义 Combo 文档](/zh/docs/manual/middle/elements/combos/custom-combo) 和 [demo](/zh/docs/examples/item/customCombo)。\n\n### combo.getChildren()\n\n获取 Combo 中所有的子元素，包括 Combo 和 Node。\n\n**返回值**\n\n- 返回值为子 node 和 combo 的集合：`{ nodes: INode[], combos: ICombo[] }`\n\n**用法**\n\n```javascript\nconst elements = combo.getChildren();\n```\n\n###combo. getNodes()\n\n获取 Combo 中所有子节点。\n\n**返回值**\n\n- 返回值类型为 `INode[]`。\n\n###combo. getCombos()\n\n获取 Combo 中所有子 combo。\n\n**返回值**\n\n- 返回值类型为 `ICombo[]`。\n\n###combo. addChild(item: INode | ICombo)\n\n向 Combo 中添加子 Node 或子 Combo。\n\n**参数**\n\n| 名称 | 类型           | 是否必选 | 描述                |\n| ---- | -------------- | -------- | ------------------- |\n| item | INode / ICombo | 是       | 节点或 Combo 的实例 |\n\n**返回值**\n\n- 类型： `boolean`；\n- 含义：返回 `true` 表示添加成功。\n\n**用法**\n\n```javascript\nconst node = graph.findById(\"node1\");\n\n// 如果返回结果为 true，则说明添加成功\nconst result = combo.addChild(node);\n```\n\n###combo. addNode(node: string | INode)\n\n向 combo 中添加节点。\n\n**参数**\n\n| 名称 | 类型           | 是否必选 | 描述               |\n| ---- | -------------- | -------- | ------------------ |\n| node | string / INode | 是       | 节点 ID 或节点实例 |\n\n**返回值**\n\n- 类型： `boolean`；\n- 含义：返回 `true` 表示添加成功。\n\n###combo. addCombo(combo: ICombo)\n\n向 combo 中添加 combo。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述       |\n| ----- | ------ | -------- | ---------- |\n| combo | ICombo | 是       | combo 实例 |\n\n**返回值**\n\n- 类型： `boolean`；\n- 含义：返回 `true` 表示添加成功。\n\n###combo. removeChild(item: ICombo | INode)\n\n移除子元素（子节点或子 combo）。\n\n**参数**\n\n| 名称 | 类型           | 是否必选 | 描述                |\n| ---- | -------------- | -------- | ------------------- |\n| item | INode / ICombo | 是       | 节点或 Combo 的实例 |\n\n**返回值**\n\n- 类型： `boolean`；\n- 含义：返回 `true` 表示移除成功。\n\n###combo. removeCombo(combo: ICombo)\n\n移除指定的子 combo。注意：移除后 `combo` 不再属于该父 Combo，但没有被删除。需要删除 `combo` 请调用 [graph.removeItem](/zh/docs/api/Graph#removeitemitem)\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述         |\n| ----- | ------ | -------- | ------------ |\n| combo | ICombo | 是       | Combo 的实例 |\n\n**返回值**\n\n- 类型： `boolean`；\n- 含义：返回 `true` 表示移除成功。\n\n###combo. removeNode(node: INode)\n\n移除指定的子 Node。注意：移除后该节点不再属于该 Combo，但没有被删除。需要删除节点请调用 [graph.removeItem](/zh/docs/api/Graph#removeitemitem)\n\n**参数**\n\n| 名称 | 类型  | 是否必选 | 描述               |\n| ---- | ----- | -------- | ------------------ |\n| node | INode | 是       | 节点 ID 或节点实例 |\n\n**返回值**\n\n- 类型： `boolean`；\n- 含义：返回 `true` 表示移除成功。\n"
  },
  {
    "path": "packages/site/docs/api/Items/comboProperties.zh.md",
    "content": "---\ntitle: Combo 配置项\norder: 8\n---\n\n### id\n\n<description> _String_ **required** </description>\n\n一个 Combo 的唯一标识，**必须是 string 类型，必须唯一**。\n\n### parentId\n\n<description> _String_ **optional** </description>\n\n该 Combo 的父 Combo 的 ID。\n\n### size\n\n<description> _String_ **optional** </description>\n\nCombo 的最小大小，默认 'circle' 类型 Combo 的 size 为 20，'rect' 类型的为 [20, 5]。\n\n### padding\n\n<description> _Number | Number[]_ **optional** </description>\n\n该 Combo 内边距。\n\n### style\n\n<description> _Object_ **optional** </description>\n\n该 Combo 的样式配置项，详见[内置 Combo 配置文档](/zh/docs/manual/middle/elements/combos/defaultCombo#样式属性-style)。\n\n### label\n\n<description> _String_ **optional** </description>\n\n该 Combo 的文本标签。\n\n### labelCfg\n\n<description> _Object_ **optional** </description>\n\n该 Combo 的文本标签样式配置项，详见[内置 Combo 配置文档](/zh/docs/manual/middle/elements/combos/defaultCombo#标签文本-label-及其配置-labelcfg)及各类型 Combo 的文档。\n\n### type\n\n<description> _Object_ **optional** </description>\n\n指定该 Combo 的类型，可以是内置 Combo 的类型名，也可以是自定义 Combo 的类型名。默认是 'circle'。\n\n| 名称   | 描述                                                                                                                                                                                                                                                                                                                                                 | 默认示例                                                                                                               |\n| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| circle | 圆形：<br />- `size` 是单个数字，表示直径<br />- 圆心位置对应 Combo 的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在 Combo 正上方<br />- 更多字段见 [Circle](/zh/docs/manual/middle/elements/combos/built-in/circle) Combo 教程<br />- <a href='/zh/docs/examples/item/defaultCombos#circle' target='_blank'>Demo</a>                | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ijeuQoiH0JUAAAAAAAAAAABkARQnAQ' width=150 alt='img'/> |\n| rect   | 矩形：<br />- `size` 是数组，例如：[100, 50]<br />- 矩形的中心位置是 COmbo 的位置，而不是左上角<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在 Combo 左上角<br />- 更多字段见 [Rect](/zh/docs/manual/middle/elements/combos/built-in/rect) Combo 教程<br />- <a href='/zh/docs/examples/item/defaultCombos#rect' target='_blank'>Demo</a> | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Khp4QpxXVlQAAAAAAAAAAABkARQnAQ' width=150 alt='img'/> |\n\n## 内置 Combo 的特有属性\n\n内置各个内置 Combo 的特有属性见 [内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo) 目录下各文档。\n"
  },
  {
    "path": "packages/site/docs/api/Items/edgeMethods.zh.md",
    "content": "---\ntitle: edge 实例方法\norder: 2\n---\n\nEdge 继承自 Item。所以 Item 的方法在 Edge 实例中都可以使用。本文仅介绍 Edge 类的通用方法，内置边见 [内置边文档](/zh/docs/manual/middle/elements/edges/defaultEdge) 和 [demo](/zh/docs/examples/item/defaultEdges)，自定义节点见 [自定义边文档](/zh/docs/manual/middle/elements/edges/custom-edge) 和 [demo](/zh/docs/examples/item/customEdge)。\n\n### edge.setSource(source)\n\n设置边的起始节点。\n\n**参数**\n\n| 名称   | 类型 | 是否必选 | 描述         |\n| ------ | ---- | -------- | ------------ |\n| source | Node | true     | 起始节点实例 |\n\n**用法**\n\n```javascript\nconst edge = new Edge({\n  // ...\n});\n\nconst node = new Node({\n  // ..\n});\n\nedge.setSource(node);\n```\n\n### edge.setTarget(target)\n\n设置边的终止节点。\n\n**参数**\n\n| 名称   | 类型 | 是否必选 | 描述         |\n| ------ | ---- | -------- | ------------ |\n| target | Node | true     | 终止节点实例 |\n\n**用法**\n\n```javascript\nedge.setTarget(node);\n```\n\n### edge.getSource()\n\n获取当前边的起始节点。\n\n**返回值**\n\n- 返回值类型：Node；\n- 返回值为起始节点的实例。\n\n**用法**\n\n```javascript\nconst node = edge.getSource();\n```\n\n### edge.getTarget()\n\n获取当前边的终止节点。\n\n**返回值**\n\n- 返回值类型：Node；\n- 返回值为终止节点的实例。\n\n**用法**\n\n```javascript\nconst node = edge.getTarget();\n```\n"
  },
  {
    "path": "packages/site/docs/api/Items/edgeProperties.zh.md",
    "content": "---\ntitle: 边配置项\norder: 7\n---\n\n## 边通用属性\n\n### id\n\n<description> _String_ **required** </description>\n\n边唯一 ID，**必须**是唯一的 string。\n\n### source\n\n<description> _String | Number_ **optional** </description>\n\n起始点 id 。\n\n### target\n\n<description> _String | Number_ **optional** </description>\n\n结束点 id 。\n\n### type\n\n<description> _String_ **optional** _default:_ `'line'`</description>\n\n指定边的类型，可以是内置边的类型名称，也可以是自定义边的名称。默认为 `'line'`。\n\n### sourceAnchor\n\n<description> _Number_ **optional** </description>\n\n边的起始节点上的锚点的索引值。\n\n### targetAnchor\n\n<description> _Number_ **optional** </description>\n\n边的终止节点上的锚点的索引值。\n\n### style\n\n<description> _Object_ **optional** </description>\n\n通过 `style` 配置来修改边的填充色、边框颜色、阴影等属性，具体配置属性见：[图形样式属性](/zh/docs/api/shapeProperties.zh.md)。\n\n### label\n\n<description> _String_ **optional** </description>\n\n文本文字，如果没有则不会显示。\n\n### labelCfg\n\n`label` String 类型。标签文本的文字内容。<br />`labelCfg` Object 类型。配置标签文本。下面是 `labelCfg` 对象中的常用配置项：\n\n| 名称       | 是否必须 | 类型    | 备注                                                                                                         |\n| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ |\n| refX       | false    | Number  | 标签在 x 方向的偏移量                                                                                        |\n| refY       | false    | Number  | 标签在 y 方向的偏移量                                                                                        |\n| position   | false    | String  | 文本相对于边的位置，目前支持的位置有：`'start'`，`'middle'`，`'end'`。默认为`'middle'`。                     |\n| autoRotate | false    | Boolean | 标签文字是否跟随边旋转，默认 `false`                                                                         |\n| style      | false    | Object  | 标签的样式属性，具体配置项参见统一整理在 [图形样式属性 - Text 图形](/zh/docs/api/shapeProperties/#文本-text) |\n\n## 内置边的特有属性\n\n各个内置节点的特有属性见 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge) 目录下各文档。\n"
  },
  {
    "path": "packages/site/docs/api/Items/itemMethods.zh.md",
    "content": "---\ntitle: 元素实例方法\norder: 0\n---\n\nItem 是 F6 中绘图元素实例，目前包含节点和边的实例。对于实例的变更建议在 graph 上进行。\n\n## 更新\n\n### item.update(model)\n\n根据元素数据项，更新元素。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述                       |\n| ----- | ------ | -------- | -------------------------- |\n| model | Object | true     | 元素描述项，包括数据和样式 |\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong> 提示：</strong></span>\n\n其中参数 model 可包括以下属性，下面属性的详细描述参见 [元素配置项](/zh/docs/api/Items/itemProperties)：\n\n| 名称     | 类型   | 是否必选 | 描述                                       |\n| -------- | ------ | -------- | ------------------------------------------ |\n| style    | Object | false    | 元素样式                                   |\n| type     | String | false    | 元素的类型，不传则使用默认值               |\n| label    | String | false    | 元素的文本标签，有该字段时默认会渲染 label |\n| labelCfg | Object | false    | 元素文本标签的样式                         |\n\n**用法**\n\n```javascript\nconst model = {\n  id: \"node\",\n  type: \"rect\",\n  label: \"node\",\n  style: {\n    fill: \"red\",\n  },\n};\n\nitem.update(model);\n```\n\n### item.refresh()\n\n刷新元素，包括更新元素位置，更新元素样式，清除之前的缓存。\n\n一般在以下情况时，会刷新元素：\n\n- item model 被改变；\n- 边的位置发生改变，需要重新计算边。\n\n**用法**\n\n```javascript\nitem.refresh();\n```\n\n### item.updatePosition(cfg)\n\n更新元素位置，避免整体重新绘制。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述                                                                                   |\n| ---- | ------ | -------- | -------------------------------------------------------------------------------------- |\n| cfg  | Object | true     | 元素配置项，包括 `x`、`y` 属性，如果参数中无 `x`、`y` 属性，则更新时使用数据项中的值。 |\n\n**用法**\n\n```javascript\nconst cfg = {\n  x: 100,\n  y: 200,\n};\n// 由于 cfg 中存在 x 与 y，则下面操作将会使用 cfg 中的 x、y 坐标\nitem.updatePosition(cfg);\n\nconst cfg1 = {\n  name: \"abc\",\n  dept: \"antv\",\n};\n// 由于 cfg 中不存在 x 与 y，下面才做将会使用 item.getModel() 中的 x、y 坐标值\nitem.updatePosition(cfg1);\n```\n\n## 销毁\n\n### item.destroy()\n\n销毁元素，主要包括停止动画、删除 group 中的所有元素、清空配置项、设置 `destroyed` 为 `true` 等操作。\n\n**用法**\n\n```javascript\nitem.destroy();\n```\n\n## 通用\n\n### item.getBBox()\n\n获取元素的包围盒。\n\n**返回值**\n\n- 返回值类型：Object。\n\n返回值对象包括以下属性：\n\n| 名称    | 类型   | 描述          |\n| ------- | ------ | ------------- |\n| x       | number | 视口 x 坐标   |\n| y       | number | 视口 y 坐标   |\n| width   | number | bbox 宽度     |\n| height  | number | bbox 高度     |\n| centerX | number | 中心点 x 坐标 |\n| centerY | number | 中心点 y 坐标 |\n\n**用法**\n\n```javascript\nitem.getBBox();\n```\n\n### item.getContainer()\n\n获取元素的容器。\n\n**返回值**\n\n- 返回值类型：G.Group；\n- 返回元素所在的 graphics group。\n\n**用法**\n\n```javascript\n// 获取元素的容器\nconst group = item.getContainer();\n\n// 等价于\nconst group = item.get(\"group\");\n```\n\n### item.getKeyShape()\n\n获取元素的关键形状，用于计算节点大小、连线截距等。\n\n**返回值**\n\n- 返回值类型：G.Shape；\n- 返回元素的 keyShape。\n\n**用法**\n\n```javascript\n// 获取元素的 keyShape\nconst keyShape = item.getKeyShape();\n\n// 等价于\nconst keyShape = item.get(\"keyShape\");\n```\n\n### item.getModel()\n\n获取元素的数据模型。\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回元素的数据模型。\n\n**用法**\n\n```javascript\n// 获取元素的数据模型\nconst model = item.getModel();\n\n// 等价于\nconst model = item.get(\"model\");\n```\n\n### item.getType()\n\n获取元素的类型。\n\n**返回值**\n\n- 返回值类型：String；\n- 返回元素的类型，可能是 `'node'` 或 `'edge'`。\n\n**用法**\n\n```javascript\n// 获取元素的类型\nconst type = item.getType();\n\n// 等价于\nconst type = item.get(\"type\");\n```\n\n### item.enableCapture(enable)\n\n是否拾取及触发该元素的交互事件。\n\n**参数**\n\n| 名称   | 类型    | 是否必选 | 描述                                                            |\n| ------ | ------- | -------- | --------------------------------------------------------------- |\n| enable | Boolean | true     | 是否允许该元素响应事件的标识，如果为 `true`，则允许，否则不允许 |\n\n**用法**\n\n```javascript\n// 不允许元素响应事件\nitem.enableCapture(false);\n\n// 允许元素响应事件\nitem.enableCapture(true);\n```\n\n### item.clearCache()\n\n更新或刷新等操作后，清除缓存。\n\n**用法**\n\n```javascript\n// 清除缓存\nitem.clearCache();\n```\n\n## 状态\n\n### item.show()\n\n显示元素。只显示 item 自身，若需要在显示节点的同时显示相关边，应调用 [graph.showItem(item)](/zh/docs/api/Graph#showitemitem)。\n\n**用法**\n\n```javascript\nitem.show();\n```\n\n### item.hide()\n\n隐藏元素。只隐藏 item 自身，若需要在隐藏节点的同时隐藏相关边，应调用 [graph.hideItem(item)](/zh/docs/api/Graph#hideitemitem)。\n\n**用法**\n\n```javascript\nitem.hide();\n```\n\n### item.changeVisibility(visible)\n\n更改元素是否显示。\n\n**参数**\n\n| 名称    | 类型    | 是否必选 | 描述                                        |\n| ------- | ------- | -------- | ------------------------------------------- |\n| visible | Boolean | true     | 是否显示元素，`true` 为显示，`false` 为隐藏 |\n\n**用法**\n\n```javascript\n// 显示元素\nitem.changeVisibility(true);\n\n// 隐藏元素\nitem.changeVisibility(false);\n```\n\n### item.isVisible()\n\n查询元素显示状态。\n\n**返回值**\n\n- 返回值类型：Boolean；\n- 返回值为 true，则表示当前元素处于显示状态，否则处于隐藏状态。\n\n**用法**\n\n```javascript\nconst visible = item.isVisible();\n```\n\n### item.toFront()\n\n将元素的层级设置到最上层，即当有元素重叠时，将元素置于顶层。\n\n**用法**\n\n```javascript\nitem.toFront();\n```\n\n### item.toBack()\n\n将元素的层级设置到最下层，即当有元素重叠时，将元素置于底层。\n\n**用法**\n\n```javascript\nitem.toBack();\n```\n\n### item.setState(state, enable)\n\n更新元素的状态。\n\n**参数**\n\n| 名称   | 类型    | 是否必选 | 描述                                                       |\n| ------ | ------- | -------- | ---------------------------------------------------------- |\n| state  | String  | true     | 元素的状态名，如 `'selected'`、`'hover'`                   |\n| enable | Boolean | true     | 是否启用状态的标识，为 `true` 表示启用该状态，否则不启用。 |\n\n**用法**\n\n```javascript\nitem.setState(\"selected\", true);\nitem.setState(\"actived\", false);\n```\n\n### item.clearStates(states)\n\n清除指定的状态，如果不传 states ，则默认清除**第一个**状态。\n\n**参数**\n\n| 名称   | 类型           | 是否必选 | 描述               |\n| ------ | -------------- | -------- | ------------------ |\n| states | String / Array | true     | 要清除的元素状态名 |\n\n**用法**\n\n```javascript\n// 清除 'selected' 状态\nitem.clearStates(\"selected\");\n\n// 清除 'active' 与 'hover' 状态\nitem.clearStates([\"actived\", \"hover\"]);\n```\n\n### item.getStates()\n\n获取当前元素的所有状态。\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回当前元素的所有状态，是一个字符串数组，数组中值表示元素的状态。\n\n**用法**\n\n```javascript\n// 获取元素的所有状态\nconst states = item.getStates();\n```\n\n### item.hasState(state)\n\n判断元素是否具有某种指定的状态。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述         |\n| ----- | ------ | -------- | ------------ |\n| state | String | true     | 元素的状态名 |\n\n**返回值**\n\n- 返回值类型：Boolean；\n- 返回值表示是否具有指定的状态，如果返回 `true`，则说明元素有指定的状态，否则没有。\n\n**用法**\n\n```javascript\n// 获取元素的 'hover' 状态值\nconst state = item.hasState(\"hover\");\n```\n\n## 样式\n\n### item.getStateStyle(state)\n\n获取元素指定状态的样式，返回的样式会将全局样式、默认样式和元素自定义样式合并。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述         |\n| ----- | ------ | -------- | ------------ |\n| state | String | true     | 元素的状态名 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回的样式会将全局样式、默认样式和元素自定义样式合并。\n\n**用法**\n\n```javascript\n// 获取元素的指定状态的样式\nconst style = item.getStateStyle(\"selected\");\n```\n\n### item.getOriginStyle()\n\n获取元素 keyShape 的样式。\n\n**返回值**\n\n- 返回值类型：Object | undefined；\n- 如果存在 keyShape ，则返回 `keyShape` 的样式，否则返回 `undefined` 。\n\n**用法**\n\n```javascript\nconst style = item.getOriginStyle();\n```\n\n### item.getCurrentStatesStyle()\n\n获取当前元素的所有状态的样式。\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回值表示当前元素所有状态的样式。\n\n**用法**\n\n```javascript\nconst styles = item.getCurrentStatesStyle();\n```\n"
  },
  {
    "path": "packages/site/docs/api/Items/itemProperties.zh.md",
    "content": "---\ntitle: 元素配置项\norder: 5\n---\n\nF6 图上的元素包括节点、边、节点分组 Combo。每一个元素是一个 [item](/zh/docs/api/Items/itemMethods) 实例，而实例中的数据模型 `model` 定义了该元素的样式、配置等。在 [入门教程-元素及其配置](/zh/docs/manual/tutorial/mini/elements#配置属性) 中，我们知道配置元素属性有两种方式：实例化图时全局配置；在数据中配置。无论何种方式，都是在配置每个元素的数据模型 `model`。本文介绍节点、边、节点分组 Combo 的 `model` 配置项。\n\n### id\n\n<description> _String_ **required** </description>\n\n说明： 元素的标识 ID，**必须**是唯一的 string\n\n### style\n\n<description> _Object_ **optional** </description>\n\n元素 [keyShape](/zh/docs/manual/middle/elements/shape-keyshape) 的样式属性，可配置内容与该 keyShape 的图形类型相关，各图形的具体属性参见[各图形样式属性](/zh/docs/api/shapeProperties) |\n\n### type\n\n<description> _String_ **optional** </description>\n\n元素的类型，不传则使用默认值，节点默认类型为 'circle'，边默认类型为 'line'，Combo 默认类型为 `circle`。\n\n### label\n\n<description> _String_ **optional** </description>\n\n元素的文本标签，有该字段时默认会渲染 label 。\n\n### labelCfg\n\n<description> _Object_ **optional** </description>\n\n元素文本标签的配置项，节点、Combo 与 边的配置不同，详见各子模块内容。\n"
  },
  {
    "path": "packages/site/docs/api/Items/nodeMethods.zh.md",
    "content": "---\ntitle: node 实例方法\norder: 1\n---\n\nNode 继承自 Item。所以 Item 上面的方法在 Node 实例中都可以调用。本文仅介绍 Node 类的通用方法，内置节点见 [内置节点文档](/zh/docs/manual/middle/elements/nodes/defaultNode) 和 [demo](/zh/docs/examples/item/defaultNodes)，自定义节点见 [自定义节点文档](/zh/docs/manual/middle/elements/nodes/custom-node) 和 [demo](/zh/docs/examples/item/customNode)。\n\n### node.lock()\n\n锁定当前节点，锁定节点后，该节点不再响应拖动节点的事件。\n\n提示：锁定节点后，拖动画布和缩放画布的操作依然对该节点有效。如果想在锁定节点后，不响应拖动画布和缩放的事件，需要自定义拖动画布和缩放的 Behavior，具体可参考 [锁定节点不响应拖动画布的事件](/zh/docs/manual/middle/elements/methods/lock-node#拖动画布时候不处理锁定的节点) 和 [锁定节点不响应缩放事件](/zh/docs/manual/middle/elements/methods/lock-node#缩放画布时不处理锁定的节点)。\n\n**用法**\n\n```javascript\nconst node = graph.findById(\"node\");\nnode.lock();\n```\n\n### node.unlock()\n\n解锁锁定的节点。\n\n**用法**\n\n```javascript\nconst node = graph.findById(\"node\");\nnode.unlock();\n```\n\n### node.hasLocked()\n\n检测节点是否处于锁定状态。\n\n**返回值**\n\n- 返回值类型：Boolean；\n- 返回 true 表示当前解锁处于锁定状态，否则表示未锁定。\n\n**用法**\n\n```javascript\nconst node = graph.findById(\"node\");\nconst hasLocked = node.hasLocked();\n```\n\n### node.getNeighbors(type)\n\n**参数**\n\n| 名称 | 类型                            | 是否必选 | 描述                                                                                                             |\n| ---- | ------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |\n| type | 'source' / 'target' / undefined | false    | 邻居类型， 'source' 只获取当前节点的源节点，'target' 只获取当前节点指向的目标节点， 若不指定则返回所有类型的邻居 |\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回值符合要求的节点实例数组。\n\n**用法**\n\n```javascript\nconst neighbors = node.getNeighbors(\"source\");\n```\n\n### node.getEdges()\n\n获取与当前节点有关联的所有边。\n\n**返回值**\n\n- 返回值类型：Edge[]；\n- 返回边实例的集合。\n\n**用法**\n\n```javascript\n// 获取与 node 关联的所有边\nconst edges = node.getEdges();\n```\n\n### node.getInEdges()\n\n获取与当前节点关联的所有入边。\n\n**返回值**\n\n- 返回值类型：Edge[]；\n- 返回入边实例的集合。\n\n**用法**\n\n```javascript\n// 获取与 node 关联的所有入边\nconst edges = node.getInEdges();\n```\n\n### node.getOutEdges()\n\n获取与当前节点关联的所有出边。\n\n**返回值**\n\n- 返回值类型：Edge[]；\n- 返回出边实例的集合。\n\n**用法**\n\n```javascript\n// 获取与 node 关联的所有出边\nconst edges = node.getOutEdges();\n```\n\n### node.getAnchorPoints()\n\n获取节点上面定义的锚点。\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回值的数据结构：\n\n```javascript\n[\n  (0: {\n    x: 100,\n    y: 105,\n    index: 0,\n  }),\n  (1: {\n    x: 200,\n    y: 105,\n    index: 1,\n  }),\n];\n```\n\n**用法**\n\n```javascript\n// 获取定义在节点上的锚点数据\nconst anchor = node.getAnchorPoints();\n```\n\n### node.getLinkPoint(point)\n\n获取距离指定坐标最近的一个锚点。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述                                       |\n| ----- | ------ | -------- | ------------------------------------------ |\n| point | Object | true     | 节点外部的一个点，用于计算交点及最近的锚点 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回值表示连接点的坐标 (x, y)，如果没有合适的锚点和连接点，则返回中心点。\n\n**用法**\n\n```javascript\nconst point = {\n  x: 100,\n  y: 105,\n};\n// 获取连接点\nconst linkPoint = node.getLinkPoint(point);\n```\n\n### node.getLinkPointByAnchor(index)\n\n根据锚点索引获取连接点的 x、y 坐标。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述       |\n| ----- | ------ | -------- | ---------- |\n| index | Number | true     | 锚点的索引 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回值表示连接点的坐标 (x, y)。\n\n**用法**\n\n```javascript\n// 获取定义在节点上的第一个锚点\nconst anchor = node.getLinkPointByAnchor(0);\n```\n\n### node.addEdge(edge)\n\n添加指定的边到当前节点上。\n\n**参数**\n\n| 名称 | 类型 | 是否必选 | 描述      |\n| ---- | ---- | -------- | --------- |\n| edge | Edge | true     | Edge 实例 |\n\n**用法**\n\n```javascript\nconst edge = new Edge({\n  // TODO\n});\nnode.addEdge(edge);\n```\n\n### node.removeEdge(edge)\n\n移除与当前节点相关的指定边。\n\n**参数**\n\n| 名称 | 类型 | 是否必选 | 描述      |\n| ---- | ---- | -------- | --------- |\n| edge | Edge | true     | Edge 实例 |\n\n**用法**\n\n```javascript\nconst edge = graph.findById(\"edge1\");\nnode.removeEdge(edge);\n```\n"
  },
  {
    "path": "packages/site/docs/api/Items/nodeProperties.zh.md",
    "content": "---\ntitle: 节点配置项\norder: 6\n---\n\n节点继承自元素类。除了[元素通用属性](/zh/docs/api/Items/itemProperties.zh.md)外，每种节点拥有一些特有的属性。\n\n## 内置节点的通用属性\n\n### id\n\n<description> _String_ **required** </description>\n\n节点唯一 ID，**必须**是唯一的 string。\n\n### x\n\n<description> _Number_ **optional** </description>\n\nx 坐标。\n\n### y\n\n<description> _Number_ **optional** </description>\n\ny 坐标。\n\n### type\n\n<description> _String_ **optional** _default:_: `'circle'`</description>\n\n指定节点类型，内置节点类型名称或自定义节点的名称。默认为 `'circle'`。\n\n### size\n\n<description> _Number | Array_ **optional** _default:_: `20`</description>\n\n节点的大小。\n\n### anchorPoints\n\n<description> _Array_ **optional** </description>\n\n指定边连入节点的连接点的位置（相对于该节点而言），可以为空。例如: `[0, 0]`，代表节点左上角的锚点，`[1, 1]`,代表节点右下角的锚点。\n\n### style\n\n<description> _Object_ **optional** </description>\n\n通过 `style` 配置来修改节点关键图形的填充色、边框颜色、阴影等属性，具体配置属性见：[图形样式属性](/zh/docs/api/shapeProperties.zh.md)。\n\n### label\n\n<description> _String_ **optional** </description>\n\n文本文字。\n\n### labelCfg\n\n| 名称     | 是否必须 | 类型   | 备注                                                                                                                                                                           |\n| -------- | -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| position | false    | String | 文本相对于节点的位置，目前支持的位置有：`'center'`，`'top'`，`'left'`，`'right'`，`'bottom'`。默认为 `'center'`。modelRect 节点不支持该属性                                    |\n| offset   | false    | Number | 文本的偏移，`position` 为 `'bottom'` 时，文本的上方偏移量；`position` 为 `'left'` 时，文本的右方偏移量；以此类推在其他 `position` 时的情况。modelRect 节点的 `offset` 为左边距 |\n| style    | false    | Object | 标签的样式属性，具体配置项参见统一整理在 [图形样式属性 - Text 图形](/zh/docs/api/shapeProperties/#文本-text)                                                                   |\n\n## 内置节点的特有属性\n\n各个内置节点的特有属性见 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 目录下各文档。\n"
  },
  {
    "path": "packages/site/docs/api/Plugins.zh.md",
    "content": "---\ntitle: 插件 Plugins\norder: 14\n---\n\nF6 提供了一些可插拔的组件，包括：\n\n- [Legend](#legend)\n- [SnapLine](#snapline)\n- [Grid](#grid)\n- [Minimap](#minimap)\n- [ImageMinimap](#image-minimap)\n- [Edge Bundling](#edge-bundling)\n- [Menu](#menu)\n- [ToolBar](#toolbar)\n- [TimeBar](#timebar)\n- [Tooltip](#tooltip)\n- [Fisheye](#fisheye)\n- [EdgeFilterLens](#edge-filter-lens)\n\n## 配置方法\n\n引入 F6 后，首先实例化需要使用的某插件对象。然后，在实例化图时将其配置到 `plugins` 中：\n\n```javascript\n// 实例化 Grid 插件\nconst grid = new F6.Grid();\nconst minimap = new F6.Minimap();\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [grid, minimap], // 配置 Grid 插件和 Minimap 插件\n});\n```\n\n## Legend\n\nLegend 是 F6 内置的图例插件。用于说明图中不同类型的节点和边所代表的含义，并可以通过与图例的交互做简单的高亮和过滤。 _v4.3.0 起支持_。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*UmXzQLF65vYAAAAAAAAAAAAAARQnAQ' alt=\"img\" width='500px'>\n\n### 配置项\n\n| 名称                      | 类型                                                                                                                                                        | 描述                                                                                                                                                                                                                                            |\n| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| data                      | GraphData                                                                                                                                                   | 图例的数据，与图数据格式相同。节点图例目前支持 `'circle'`，`'rect'`，和 `'ellipse'`，边图例目前支持 `'line'`、`'cubic'`、`'quadratic'`。通过指定每个数据项中的 `type` 字段以确定图例元素的类型，每个数据项中的 `order` 字段可用于同组图例的排序 |\n| position                  | 'top' / 'top-left' / 'top-right' / 'right' / 'right-top' / 'right-bottom' / 'left' / 'left-top' / 'left-bottom' / 'bottom' / 'bottom-left' / 'bottom-right' | 图例在画布中的相对位置，默认为 `'top'`，代表在画布正上方                                                                                                                                                                                        |\n| padding                   | number / number[]                                                                                                                                           | 图例区域内部内容到边框的距离，四位数组分别代表上、右、下、左边距                                                                                                                                                                                |\n| margin                    | number / number[]                                                                                                                                           | 图例区域与画布边界的距离，四位数组分别代表上、右、下、左边距。在 `position:'top'` 时只有上边距生效，其他情况类似                                                                                                                                |\n| offsetX                   | number                                                                                                                                                      | 图例区域离 `position` 对应的默认位置的 x 方向的偏移量，可被用于图例位置的微调                                                                                                                                                                   |\n| offsetY                   | number                                                                                                                                                      | 图例区域离 `position` 对应的默认位置的 y 方向的偏移量，可被用于图例位置的微调                                                                                                                                                                   |\n| containerStyle            | ShapeStyle                                                                                                                                                  | 图例背景框的样式，格式与 [rect 图形的样式](/zh/docs/api/shapeProperties#矩形图形-rect)相同                                                                                                                                                      |\n| horiSep                   | number                                                                                                                                                      | 图例之间的水平间距                                                                                                                                                                                                                              |\n| vertiSep                  | number                                                                                                                                                      | 图例之间的竖直间距                                                                                                                                                                                                                              |\n| layout                    | 'vertical' / 'horizontal'                                                                                                                                   | 图例的布局方式。默认为 `'horizontal'` 横向布局                                                                                                                                                                                                  |\n| align                     | 'center' / 'right' / 'left'                                                                                                                                 | 图例的对齐方式，可以是居中、右对齐、左对齐。默认为 `'center'` 居中                                                                                                                                                                              |\n| title                     | string                                                                                                                                                      | 图例的标题文本内容，样式通过 `titleConfig` 设置                                                                                                                                                                                                 |\n| titleConfig               | object                                                                                                                                                      | 图例标题的样式，具体配置项如下                                                                                                                                                                                                                  |\n| titleConfig.position      | 'center' / 'right' / 'left'                                                                                                                                 | 图例标题的对齐方式，可以是居中、右对齐、左对齐。默认为 `'center'` 居中                                                                                                                                                                          |\n| titleConfig.offsetX       | number                                                                                                                                                      | 图例标题的 x 方向偏移，用于微调标题位置                                                                                                                                                                                                         |\n| titleConfig.offsetY       | number                                                                                                                                                      | 图例标题的 y 方向偏移，用于微调标题位置                                                                                                                                                                                                         |\n| titleConfig[key]          | ShapeStyle                                                                                                                                                  | 其他对于文本本身的样式，支持的内容与 [text 图形的样式](/zh/docs/api/shapeProperties#文本-text)相同                                                                                                                                              |\n| filter                    | object                                                                                                                                                      | 通过图例的交互对主图元素进行过滤的配置项，具体配置如下                                                                                                                                                                                          |\n| filter.enable             | boolean                                                                                                                                                     | 是否允许通过图例的交互对主图元素过滤，默认为 `false`                                                                                                                                                                                            |\n| filter.multiple           | boolean                                                                                                                                                     | 是否支持多种元素过滤，默认为 `false`。当它为 `true` 时，只有 `filter.trigger` 为 `'click'` 时方可多选图例                                                                                                                                       |\n| filter.trigger            | 'click' / 'mouseenter'                                                                                                                                      | 触发主图元素过滤的图例交互方式，默认为 `click`                                                                                                                                                                                                  |\n| filter.legendStateStyles  | { active?: ShapeStyle, inactive?: ShapeStyle                                                                                                                | 在过滤时，图例本身的状态样式，包括 `filter.legendStateStyles.active` 和 `filter.legendStateStyles.inactive` 两种，每种的类型均为 ShapeStyle。类似图的 `nodeStateStyles` 配置                                                                    |\n| filter.graphActiveState   | string                                                                                                                                                      | 主图元素过滤时，被选中的主图元素的状态名，将寻找主图元素的对应的状态样式进行主图元素的更新。默认值为 `'active'`                                                                                                                                 |\n| filter.graphInactiveState | string                                                                                                                                                      | 主图元素过滤时，未被选中的主图元素的状态名，将寻找主图元素的对应的状态样式进行主图元素的更新。默认值为 `'inactive'`                                                                                                                             |\n| filter.filterFunctions    | { [key: string]: (d) => boolean; }                                                                                                                          | 由于图例的数据与主图解耦，因此需要配置每种图例对应的主图过滤函数，`key` 为图例数据的 `type`，值为函数，函数的参数为主图元素的数据，返回值为布尔型，代表是否被选中                                                                               |\n\n## SnapLine\n\nSnapLine 是 F6 内置的对齐线插件。\n\n实例化时可以通过配置项调整 SnapLine 的样式和功能。\n\n### 配置项\n\n| 名称          | 类型                                          | 描述                      |\n| ------------- | --------------------------------------------- | ------------------------- |\n| line          | ShapeStyle                                    | 辅助线的样式              |\n| itemAlignType | boolean、'horizontal' 、'vertical'、'center'; | 辅助线类型，true 表示全部 |\n\n## Grid\n\nGrid 插件在画布上绘制了网格。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*y8u6Rrc78uIAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n使用 [配置方法](#配置方法) 中代码实例化时可以通过配置项调整 Grid 的图片。\n\n### 配置项\n\n| 名称 | 类型   | 描述                         |\n| ---- | ------ | ---------------------------- |\n| img  | String | grid 图片，base64 格式字符串 |\n\n## Minimap\n\nMinimap 是用于快速预览和探索图的工具。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v1svQLkEPrUAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n实例化时可以通过配置项调整 Minimap 的样式和功能。\n\n### 配置项\n\n| 名称              | 类型   | 描述                                                                                                                                                                                                                         |\n| ----------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| container         | Object | 放置 Minimap 的 DOM 容器。若不指定则自动生成                                                                                                                                                                                 |\n| className         | String | 生成的 DOM 元素的 className                                                                                                                                                                                                  |\n| viewportClassName | String | Minimap 上视窗 DOM 元素的 className                                                                                                                                                                                          |\n| type              | String | 选项：`'default'`：渲染图上所有图形；`'keyShape'`：只渲染图上元素的 keyShape，以减少渲染成本；`'delegate'`：只渲染图上元素的大致图形，以降低渲染成本。渲染成本 `'default'` > `'keyShape'` > `'delegate'`。默认为 `'default'` |\n| size              | Array  | Minimap 的大小                                                                                                                                                                                                               |\n| delegateStyle     | Object | 在 `type` 为 `'delegate'` 时生效，代表元素大致图形的样式                                                                                                                                                                     |\n\n其中，delegateStyle 可以设置如下属性：\n\n| 名称        | 类型   | 描述       |\n| ----------- | ------ | ---------- |\n| fill        | String | 填充颜色   |\n| stroke      | String | 描边颜色   |\n| lineWidth   | Number | 描边宽度   |\n| opacity     | Number | 透明度     |\n| fillOpacity | Number | 填充透明度 |\n\n## Image Minimap\n\n由于 [Minimap](#minimap) 的原理是将主画布内容复制到 minimap 的画布上，在大数据量下可能会造成双倍的绘制效率成本。为缓解该问题，Image Minimap 采用另一种机制，根据提供的图片地址或 base64 字符串 `graphImg` 绘制 `<img />` 代替 minimap 上的 canvas。该方法可以大大减轻两倍 canvas 绘制的压力。但 `graphImg` 完全交由 F6 的用户控制，需要注意主画布更新时需要使用 `updateGraphImg` 方法替换 `graphImg`。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v1svQLkEPrUAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n实例化时可以通过配置项调整 Image inimap 的样式和功能。\n\n### 配置项\n\n| 名称              | 类型   | 是否必须 | 描述                                                                                                                                                                    |\n| ----------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| graphImg          | String | true     | minimap 的图片地址或 base64 文本                                                                                                                                        |\n| width             | Number | false    | minimap 的宽度。Image Minimap 的长宽比一定等于主图长宽比。因此，若设置了 `width`，则按照主画布容器长宽比确定 `height`，也就是说，`width` 的优先级高于 `height`。        |\n| height            | Number | false    | minimap 的高度。Image Minimap 的长宽比一定等于主图长宽比。若未设置了 `width`，但设置了 `height`，则按照主画布容器长宽比确定 `width`；若设置了 `width` 则以 `width` 为准 |\n| container         | Object | false    | 放置 Minimap 的 DOM 容器。若不指定则自动生成                                                                                                                            |\n| className         | String | false    | 生成的 DOM 元素的 className                                                                                                                                             |\n| viewportClassName | String | false    | Minimap 上视窗 DOM 元素的 className                                                                                                                                     |\n| delegateStyle     | Object | false    | 在 `type` 为 `'delegate'` 时生效，代表元素大致图形的样式                                                                                                                |\n\n其中，`delegateStyle` 可以设置如下属性：\n\n| 名称        | 类型   | 描述       |\n| ----------- | ------ | ---------- |\n| fill        | String | 填充颜色   |\n| stroke      | String | 描边颜色   |\n| lineWidth   | Number | 描边宽度   |\n| opacity     | Number | 透明度     |\n| fillOpacity | Number | 填充透明度 |\n\n### API\n\n#### updateGraphImg(img)\n\n更新 minimap 图片。建议在主画布更新时使用该方法同步更新 minimap 图片。\n\n参数：\n\n| 名称 | 类型   | 是否必须 | 描述                             |\n| ---- | ------ | -------- | -------------------------------- |\n| img  | String | true     | minimap 的图片地址或 base64 文本 |\n\n### 用法\n\n实例化 Image Minimap 插件时，`graphImg` 是必要参数。\n\n```\n// 实例化 Image Minimap 插件\nconst imageMinimap = new F6.ImageMinimap({\n  width: 200,\n  graphImg: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ'\n});\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [imageMinimap], // 配置 imageMinimap 插件\n});\n\ngraph.data(data);\ngraph.render()\n\n... // 一些主画布更新操作\nimageMinimap.updateGraphImg(img); // 使用新的图片（用户自己生成）替换 minimap 图片\n\n```\n\n## Edge Bundling\n\n在关系复杂、繁多的大规模图上，通过边绑定可以降低视觉复杂度。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*z9iXQq_kcrYAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n实例化时可以通过配置项调整边绑定的功能。\n\n### 配置项\n\n| 名称            | 类型   | 默认值    | 描述                                                                               |\n| --------------- | ------ | --------- | ---------------------------------------------------------------------------------- |\n| K               | Number | 0.1       | 边绑定的强度                                                                       |\n| lambda          | Number | 0.1       | 算法的初始步长                                                                     |\n| divisions       | Number | 1         | 初始的切割点数，即每条边将会被切割成的份数。每次迭代将会被乘以 `divRate`           |\n| divRate         | Number | 2         | 切割增长率，每次迭代都会乘以该数字。数字越大，绑定越平滑，但计算量将增大           |\n| cycles          | Number | 6         | 迭代次数                                                                           |\n| iterations      | Number | 90        | 初始的内迭代次数，每次外迭代中将会被乘以 `iterRate`                                |\n| iterRate        | Number | 0.6666667 | 迭代下降率                                                                         |\n| bundleThreshold | Number | 0.6       | 判定边是否应该绑定在一起的相似容忍度，数值越大，被绑在一起的边相似度越低，数量越多 |\n\n## Menu\n\nMenu 用于配置节点上的右键菜单。\n\n### 配置项\n\n| 名称            | 类型                                             | 默认值                                                                                                                | 描述                                                                                                                                |\n| --------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| className       | string                                           | null                                                                                                                  | menu 容器的 class 类名                                                                                                              |\n| getContent      | (evt?: IF6GraphEvent) => HTMLDivElement / string | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OtOkS4g-vrkAAAAAAAAAAABkARQnAQ' width=60 alt='img'/> | 菜单项内容，支持 DOM 元素或字符串                                                                                                   |\n| handleMenuClick | (target: HTMLElement, item: Item) => void        | undefined                                                                                                             | 点击菜单项的回调函数                                                                                                                |\n| shouldBegin     | (evt: F6Event) => boolean                        | undefined                                                                                                             | 是否允许 menu 出现，可以根据 `evt.item`（当前事件中的元素） 或 `evt.target`（当前鼠标事件中的图形）的内容判断此时是否允许 menu 出现 |\n| offsetX         | number                                           | 6                                                                                                                     | menu 的 x 方向偏移值，需要考虑父级容器的 padding                                                                                    |\n| offsetY         | number                                           | 6                                                                                                                     | menu 的 y 方向偏移值，需要考虑父级容器的 padding                                                                                    |\n| itemTypes       | string[]                                         | ['node', 'edge', 'combo']                                                                                             | menu 作用在哪些类型的元素上，若只想在节点上显示，可将其设置为 ['node']                                                              |\n\n### 用法\n\n实例化 Menu 插件时，如果不传参数，则使用 F6 默认提供的值，只能展示默认的菜单项，不能进行任何操作。\n\n```\n// 实例化 Menu 插件\nconst menu = new F6.Menu();\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [menu], // 配置 Menu 插件\n});\n```\n\n#### DOM Menu\n\n```\nconst menu = new F6.Menu({\n  offsetX: 6,\n  offsetX: 10,\n  itemTypes: ['node'],\n  getContent(e) {\n    const outDiv = document.createElement('div');\n    outDiv.style.width = '180px';\n    outDiv.innerHTML = `<ul>\n        <li>测试01</li>\n        <li>测试01</li>\n        <li>测试01</li>\n        <li>测试01</li>\n        <li>测试01</li>\n      </ul>`\n    return outDiv\n  },\n  handleMenuClick(target, item) {\n    console.log(target, item)\n  },\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [menu], // 配置 Menu 插件\n});\n```\n\n#### String Menu\n\n```\nconst menu = new F6.Menu({\n  getContent(evt) {\n    return `<ul>\n      <li title='1'>测试02</li>\n      <li title='2'>测试02</li>\n      <li>测试02</li>\n      <li>测试02</li>\n      <li>测试02</li>\n    </ul>`;\n  },\n  handleMenuClick(target, item) {\n    console.log(target, item)\n  },\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [menu], // 配置 Menu 插件\n});\n```\n\n## ToolBar\n\nToolBar 集成了以下常见的操作：\n\n- 重做；\n- 撤销；\n- 放大；\n- 缩小；\n- 适应屏幕；\n- 实际大小。\n\n### 配置项\n\n| 名称        | 类型                                  | 默认值    | 描述                                                                                                                  |\n| ----------- | ------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |\n| container   | HTMLDivElement                        | null      | ToolBar 容器，如果不设置，则默认使用 canvas 的 DOM 容器                                                               |\n| className   | string                                | null      | ToolBar 内容元素的 class 类名                                                                                         |\n| getContent  | (graph?: IGraph) => HTMLDivElement    | string    | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7QSRRJwAWxQAAAAAAAAAAABkARQnAQ' width=80 alt='img'/> | ToolBar 内容，支持 DOM 元素或字符串 |\n| handleClick | (code: string, graph: IGraph) => void | undefined | 点击 ToolBar 中每个图标的回调函数                                                                                     |\n| position    | Point                                 | null      | ToolBar 的位置坐标                                                                                                    |\n\n### 用法\n\n#### 默认用法\n\n默认的 ToolBar 提供了撤销、重做、放大等功能。\n\n```\nconst toolbar = new F6.ToolBar();\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [toolbar], // 配置 ToolBar 插件\n});\n```\n\n#### 使用 String 自定义 ToolBar 功能\n\n```\nconst tc = document.createElement('div');\ntc.id = 'toolbarContainer';\ndocument.body.appendChild(tc);\n\nconst toolbar = new F6.ToolBar({\n  container: tc,\n  getContent: () => {\n    return `\n      <ul>\n        <li code='add'>增加节点</li>\n        <li code='undo'>撤销</li>\n      </ul>\n    `\n  },\n  handleClick: (code, graph) => {\n    if (code === 'add') {\n      graph.addItem('node', {\n        id: 'node2',\n        label: 'node2',\n        x: 300,\n        y: 150\n      })\n    } else if (code === 'undo') {\n      toolbar.undo()\n    }\n  }\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [toolbar], // 配置 ToolBar 插件\n});\n```\n\n#### 使用 DOM 自定义 ToolBar 功能\n\n```\nconst toolbar = new F6.ToolBar({\n  getContent: () => {\n    const outDiv = document.createElement('div');\n    outDiv.style.width = '180px';\n    outDiv.innerHTML = `<ul>\n        <li>测试01</li>\n        <li>测试02</li>\n        <li>测试03</li>\n        <li>测试04</li>\n        <li>测试05</li>\n      </ul>`\n    return outDiv\n  },\n  handleClick: (code, graph) => {\n\n  }\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [toolbar], // 配置 ToolBar 插件\n});\n```\n\n## Tooltip\n\nTooltip 插件主要用于在节点和边上展示一些辅助信息，F6 4.0 以后，Tooltip 插件将会替换 Behavior 中的 tooltip。\n\n### 配置项\n\n| 名称        | 类型                                             | 默认值                                                                                                                | 描述                                                                                                                                                                                                                                                                                                                |\n| ----------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| className   | string                                           | null                                                                                                                  | tooltip 容器的 class 类名                                                                                                                                                                                                                                                                                           |\n| container   | HTMLDivElement                                   | null                                                                                                                  | Tooltip 容器，如果不设置，则默认使用 canvas 的 DOM 容器                                                                                                                                                                                                                                                             |\n| getContent  | (evt?: IF6GraphEvent) => HTMLDivElement / string | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aPPuQquN5Q0AAAAAAAAAAABkARQnAQ' width=80 alt='img'/> | tooltip 内容，支持 DOM 元素或字符串                                                                                                                                                                                                                                                                                 |\n| shouldBegin | (evt: F6Event) => boolean                        | undefined                                                                                                             | 是否允许 tooltip 出现，可以根据 `evt.item`（当前事件中的元素） 或 `evt.target`（当前鼠标事件中的图形）的内容判断此时是否允许 tooltip 出现                                                                                                                                                                           |\n| offsetX     | number                                           | 6                                                                                                                     | tooltip 的 x 方向偏移值，需要考虑父级容器的 padding                                                                                                                                                                                                                                                                 |\n| offsetY     | number                                           | 6                                                                                                                     | tooltip 的 y 方向偏移值，需要考虑父级容器的 padding                                                                                                                                                                                                                                                                 |\n| itemTypes   | string[]                                         | ['node', 'edge', 'combo']                                                                                             | tooltip 作用在哪些类型的元素上，若只想在节点上显示，可将其设置为 ['node']                                                                                                                                                                                                                                           |\n| trigger     | 'tap'                                            | `tap` 触发方式为点击节点/边/combo                                                                                     |\n| fixToNode   | boolean / [number, number]                       | false                                                                                                                 | v4.2.1 支持。是否固定出现在相对于目标节点的某个位置，在节点上方移动时不实时更新。`false` 代表不固定，`[number, number]` 类型的值用于指定固定位置，例如 `[1, 0.5]` 代表 tooltip 的左上角固定到目标节点的正右方（数组代表的类似 [Anchor Point](/zh/docs/manual/middle/nodes/anchorPoint) 的位置定义）。仅在节点上生效 |\n\n### 用法\n\n默认的 Tooltip 只展示元素类型和 ID，一般情况下都需要用户自己定义 Tooltip 上面展示的内容。\n\n#### Dom Tooltip\n\n```\nconst tooltip = new F6.Tooltip({\n  offsetX: 10,\n  offsetY: 20,\n  getContent(e) {\n    const outDiv = document.createElement('div');\n    outDiv.style.width = '180px';\n    outDiv.innerHTML = `\n      <h4>自定义tooltip</h4>\n      <ul>\n        <li>Label: ${e.item.getModel().label || e.item.getModel().id}</li>\n      </ul>`\n    return outDiv\n  },\n  itemTypes: ['node']\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [tooltip], // 配置 Tooltip 插件\n});\n```\n\n#### String Tooltip\n\n```\nconst tooltip = new F6.Tooltip({\n  getContent(e) {\n    return `<div style='width: 180px;'>\n      <ul id='menu'>\n        <li title='1'>测试02</li>\n        <li title='2'>测试02</li>\n        <li>测试02</li>\n        <li>测试02</li>\n        <li>测试02</li>\n      </ul>\n    </div>`;\n  },\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [tooltip], // 配置 Tooltip 插件\n});\n```\n\n### 事件监听\n\nTooltip 插件暴露除了几个时机事件，方便用户监听内部状态的变化。以下事件可通过 `graph.on('eventname', e => {})` 进行监听。\n\n| 事件名称      | 描述                   |\n| ------------- | ---------------------- |\n| tooltipchange | Tooltip 发生变化时触发 |\n\n## Fisheye\n\nFisheye 鱼眼放大镜是为 focus+context 的探索场景设计的，它能够保证在放大关注区域的同时，保证上下文以及上下文与关注中心的关系不丢失。\n\n### 配置项\n\n| 名称          | 类型                             | 默认值                                                                               | 描述                                                                                                                                                                                           |\n| ------------- | -------------------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |\n| trigger       | 'mousemove' / 'click' / 'drag'   | 'mousemove'                                                                          | 放大镜的触发事件                                                                                                                                                                               |\n| d             | Number                           | 1.5                                                                                  | 放大系数，数值越大，放大程度越大                                                                                                                                                               |\n| r             | Number                           | 300                                                                                  | 放大区域的范围半径                                                                                                                                                                             |\n| delegateStyle | Object                           | { stroke: '#000', strokeOpacity: 0.8, lineWidth: 2, fillOpacity: 0.1, fill: '#ccc' } | 放大镜蒙层样式                                                                                                                                                                                 |\n| showLabel     | Boolean                          | false                                                                                | 若 label 默认被隐藏，是否在关注区域内展示 label                                                                                                                                                |\n| maxR          | Number                           | 图的高度                                                                             | 滚轮调整缩放范围的最大半径                                                                                                                                                                     |\n| minR          | Number                           | 0.05 \\* 图的高度                                                                     | 滚轮调整缩放范围的最小半径                                                                                                                                                                     |\n| maxD          | Number                           | 5                                                                                    | `trigger` 为 `'mousemove'` / `'click'` 时，可以在放大镜上左右拖拽调整缩放系数。maxD 指定了这种调整方式的最大缩放系数，建议取值范围 [0, 5]。若使用 `minimap.updateParam` 更新参数不受该系数限制 |\n| minD          | Number                           | 0                                                                                    | `trigger` 为 `'mousemove'` / `'click'` 时，可以在放大镜上左右拖拽调整缩放系数。maxD 指定了这种调整方式的最小缩放系数，建议取值范围 [0, 5]。若使用 `minimap.updateParam` 更新参数不受该系数限制 |\n| scaleRBy      | 'wheel'/'drag'/'unset'/undefined | false                                                                                | 'unset'                                                                                                                                                                                        | 终端用户调整放大镜范围大小的方式                               |\n| scaleDBy      | 'wheel'/'drag'/'unset'/undefined | false                                                                                | 'unset'                                                                                                                                                                                        | 终端用户调整放大镜缩放系数的方式                               |\n| showDPercent  | Boolean                          | false                                                                                | true                                                                                                                                                                                           | 是否在放大镜下方显示当前缩放系数的比例值（与 minD、maxD 相较） |\n\n### 成员函数\n\n#### updateParams(cfg)\n\n用于更新该 FishEye 的部分配置项，包括 `trigger`，`d`，`r`，`maxR`，`minR`，`maxD`，`minD`，`scaleRBy`，`scaleDBy`。例如：\n\n```\nconst fisheye = new F6.Fisheye({\n  trigger: 'mousemove'\n});\n\n... // 其他操作\n\nfisheye.updateParams({\n  d: 2,\n  r: 500,\n  // ...\n})\n```\n\n### 用法\n\n```\nconst fisheye = new F6.Fisheye({\n  trigger: 'mousemove',\n  d: 1.5,\n  r: 300,\n  delegateStyle: clone(lensDelegateStyle),\n  showLabel: false\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [fisheye], // 配置 fisheye 插件\n});\n```\n\n## Edge Filter Lens\n\nEdgeFilterLens 边过滤镜可以将关注的边保留在过滤镜范围内，其他边将在该范围内不显示。\n\n### 配置项\n\n| 名称          | 类型                                           | 默认值                                                                               | 描述                                                                                                                                                                                                                                                                                                                      |\n| ------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| trigger       | 'drag' / 'mousemove' / 'click'                 | 'mousemove'                                                                          | 过滤镜的触发事件                                                                                                                                                                                                                                                                                                          |\n| type          | 'one' / 'both' / 'only-source' / 'only-target' | 'both'                                                                               | 根据边两端点作为边过滤的简单条件。`'one'`：边至少有一个端点在过滤镜区域内，则在该区域内显示该边；`'both'`：两个端点都在过滤区域内，则在该区域显示该边；`'only-source'`：只有起始端在过滤镜区域内，则在该区域显示该边；`'only-target'`：只有结束端在过滤区域内，则在该区域显示该边。更复杂的条件可以使用 `shouldShow` 指定 |\n| shouldShow    | (d?: unknown) => boolean                       | undefined                                                                            | 边过滤的自定义条件。参数 `d` 为边每条边的数据，用户可以根据边的参数返回布尔值。返回 `true` 代表该边需要在过滤镜区域内显示，`false` 反之。                                                                                                                                                                                 |\n| r             | Number                                         | 60                                                                                   | 过滤镜的范围半径                                                                                                                                                                                                                                                                                                          |\n| delegateStyle | Object                                         | { stroke: '#000', strokeOpacity: 0.8, lineWidth: 2, fillOpacity: 0.1, fill: '#ccc' } | 过滤镜蒙层样式                                                                                                                                                                                                                                                                                                            |\n| showLabel     | 'edge' / 'node' / 'both'                       | 'edge'                                                                               | 若 label 默认被隐藏，是否在关注区域内展示对应元素类型的 label。'both' 代表节点和边的 label 都在过滤镜区域显示                                                                                                                                                                                                             |\n| maxR          | Number                                         | 图的高度                                                                             | 滚轮调整过滤镜的最大半径                                                                                                                                                                                                                                                                                                  |\n| minR          | Number                                         | 0.05 \\* 图的高度                                                                     | 滚轮调整过滤镜的最小半径                                                                                                                                                                                                                                                                                                  |\n| scaleRBy      | 'wheel' / undefined                            | 'wheel'                                                                              | 终端用户调整过滤镜大小的方式，undefined 代表不允许终端用户调整                                                                                                                                                                                                                                                            |\n\n### 成员函数\n\n#### updateParams(cfg)\n\n用于更新该过滤镜的部分配置项，包括 `trigger`，`type`，`r`，`maxR`，`minR`，`scaleRBy`，`showLabel`，`shouldShow`。例如：\n\n```\nconst filterLens = new F6.EdgeFilterLens({\n  trigger: 'drag'\n});\n\n... // 其他操作\n\nfilterLens.updateParams({\n  r: 500,\n  // ...\n})\n```\n\n### 用法\n\n```\nconst filterLens = new F6.EdgeFilterLens({\n  trigger: 'mousemove',\n  r: 300,\n  shouldShow: d => {\n    return d.size > 10;\n  }\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [filterLens], // 配置 filterLens 插件\n});\n```\n\n## TimeBar\n\n[AntV F6](https://github.com/antvis/F6) 内置了三种形态的 TimeBar 组件：\n\n- 带有趋势图的 TimeBar 组件；\n- 简易版的 TimeBar 组件；\n- 刻度 TimeBar 组件。\n\n并且每种类型的 TimeBar 组件都可以配合播放、快进、后退等控制按钮组使用。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*DOo6QpfFfMUAAAAAAAAAAAAAARQnAQ' width='500' />\n<br />趋势图 TimeBar 组件<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bzGBQKkewZMAAAAAAAAAAAAAARQnAQ' width='500' />\n<br />简易版 TimeBar 组件<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kHRkQpnvBmwAAAAAAAAAAAAAARQnAQ' width='500' />\n<br />刻度 TimeBar 组件<br />\n\n<br />在趋势图 TimeBar 基础上，我们可以通过配置数据，实现更加复杂的趋势图 TimeBar 组件，如下图所示。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*17VoSoTm9o8AAAAAAAAAAAAAARQnAQ' width='500' />\n\n<br />虽然 F6 提供了各种不同类型的 TimeBar 组件，但在使用的方式却非常简单，通过配置字段就可以进行区分。\n\n### 使用 TimeBar 组件\n\n使用 F6 内置的 TimeBar 组件，和使用其他组件的方式完全相同。\n\n```javascript\nimport F6 from \"@antv/g6\";\n\nconst timebar = new F6.TimeBar({\n  width: 500,\n  height: 150,\n  padding: 10,\n  type: \"trend\",\n  trend: {\n    data: timeBarData,\n  },\n});\n\nconst graph = new F6.Graph({\n  container: \"container\",\n  width,\n  height,\n  plugins: [timebar],\n});\n```\n\n<br />通过上面的方式，我们就可以在图中使用 TimeBar 组件了，当实例化 TimeBar 时，type 参数值为 trend，表示我们实例化的是趋势图组件，效果如下图所示。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lfvIQJYbs7oAAAAAAAAAAAAAARQnAQ' width='600' />\n\n<br />当设置 type 为 simple 时，就可以使用简易版的 TimeBar。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*g2zhQqP6ruYAAAAAAAAAAAAAARQnAQ' width='600' />\n\n<br />当设置 type 为 tick 时，表示我们要使用刻度 TimeBar 组件，但此时要注意的是，**刻度时间轴的配置项是通过 tick 对象配置而不是 trend 对象**，这也是刻度时间轴和趋势即简易时间轴不同的地方。\n\n```javascript\nconst timebar = new F6.TimeBar({\n  width,\n  height: 150,\n  type: \"tick\",\n  tick: {\n    data: timeBarData,\n    width,\n    height: 42,\n    tickLabelFormatter: (d) => {\n      const dateStr = `${d.date}`;\n      if ((count - 1) % 10 === 0) {\n        return `${dateStr.substr(0, 4)}-${dateStr.substr(\n          4,\n          2,\n        )}-${dateStr.substr(6, 2)}`;\n      }\n      return false;\n    },\n    tooltipFomatter: (d) => {\n      const dateStr = `${d}`;\n      return `${dateStr.substr(0, 4)}-${dateStr.substr(4, 2)}-${dateStr.substr(\n        6,\n        2,\n      )}`;\n    },\n  },\n});\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*n6ECQ7Jn5pQAAAAAAAAAAAAAARQnAQ' width='600' />\n\n### 事件监听\n\nTimeBar 插件暴露除了几个时机事件，方便用户监听内部状态的变化。以下事件可通过 `graph.on('eventname', e => {})` 进行监听。\n\n| 事件名称         | 描述                           |\n| ---------------- | ------------------------------ |\n| valuechange      | 时间轴的时间范围发生变化时触发 |\n| timebarstartplay | 时间轴开始播放时触发           |\n| timebarendplay   | 时间轴播放结束时触发           |\n\n### 参数定义\n\n#### 接口定义\n\n完整的 TimeBar 的接口定义如下：\n\n```javascript\ninterface TimeBarConfig extends IPluginBaseConfig {\n  // position size\n  readonly x?: number;\n  readonly y?: number;\n  readonly width?: number;\n  readonly height?: number;\n  readonly padding?: number;\n\n  readonly type?: 'trend' | 'simple' | 'tick';\n  // 趋势图配置项\n  readonly trend?: TrendConfig;\n  // 滑块、及前后背景的配置\n  readonly slider?: SliderOption;\n\n  // 当 type 是 tick 时，这是 tick 类型时间轴的配置项\n  // 当 type 是 trend 或 simple 时，这是时间轴下方时间刻度文本的配置项\n  readonly tick?: TimeBarSliceOption | TickCfg;\n\n  // 控制按钮\n  readonly controllerCfg?: ControllerCfg;\n\n  // 是否过滤边，若为 true，则需要配合边数据上有 date 字段，过滤节点同时将不满足 date 在选中范围内的边也过滤出去；若为 false，则仅过滤节点以及两端节点都被过滤出去的边\n  readonly filterEdge?: boolean;\n\n  rangeChange?: (graph: IGraph, minValue: string, maxValue: string) => void;\n  valueChange?: (graph: IGraph, value: string) => void;\n}\n```\n\n#### 接口参数说明\n\n| 名称          | 类型                         | 默认值 | 描述                                                                                                                                                              |\n| ------------- | ---------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| container     | HTMLDivElement               | null   | TimeBar 容器，如果不设置，则默认创建 className 为 g6-component-timebar 的 DOM 容器                                                                                |\n| x             | number                       | 0      | TimeBar 开始 x 坐标                                                                                                                                               |\n| y             | number                       | 0      | TimeBar 开始 y 坐标                                                                                                                                               |\n| width         | number                       |        | **必选**，TimeBar 容器宽度                                                                                                                                        |\n| height        | number                       |        | **必选**，TimeBar 高度                                                                                                                                            |\n| padding       | number/number[]              | 10     | TimeBar 距离容器的间距值                                                                                                                                          |\n| type          | 'trend' / 'simple' / 'tick'  | trend  | 默认的 TimeBar 类型，默认为趋势图样式                                                                                                                             |\n| trend         | TrendConfig                  | null   | Timebar 中趋势图的配置项，当 type 为 trend 或 simple 时，该字段必选                                                                                               |\n| slider        | SliderOption                 | null   | TimeBar 组件背景及控制调节范围的滑块的配置项                                                                                                                      |\n| tick          | TimeBarSliceOption / TickCfg | null   | 当 type 是 tick 时，这是 tick 类型时间轴的配置项，该字段必须按；当 type 是 trend 或 simple 时，这是时间轴下方时间刻度文本的配置项                                 |\n| controllerCfg | ControllerCfg                | null   | 控制按钮组配置项                                                                                                                                                  |\n| filterEdge    | boolean                      | false  | 是否过滤边，若为 true，则需要配合边数据上有 date 字段，过滤节点同时将不满足 date 在选中范围内的边也过滤出去；若为 false，则仅过滤节点以及两端节点都被过滤出去的边 |\n| rangeChange   | Function                     | null   | TimeBar 时间范围变化时的回调函数，当不定义该函数时，时间范围变化时默认过滤图上的数据                                                                              |\n\n#### TrendConfig 接口定义\n\n> 暂不支持刻度文本的样式配置\n\n```javascript\ninterface TrendConfig {\n  // 数据\n  readonly data: {\n    date: string;\n    value: string;\n  }[];\n  // 位置大小\n  readonly x?: number;\n  readonly y?: number;\n  readonly width?: number;\n  readonly height?: number;\n  // 样式\n  readonly smooth?: boolean;\n  readonly isArea?: boolean;\n  readonly lineStyle?: ShapeStyle;\n  readonly areaStyle?: ShapeStyle;\n  readonly interval?: Interval;\n}\n```\n\n#### TrendConfig 参数说明\n\n| 名称      | 类型       | 默认值                                           | 描述                                                                             |\n| --------- | ---------- | ------------------------------------------------ | -------------------------------------------------------------------------------- |\n| x         | number     | 0                                                | 趋势图开始 x 坐标                                                                |\n| y         | number     | 0                                                | 趋势图开始 y 坐标                                                                |\n| width     | number     | TimeBar 容器宽度                                 | TimeBar 趋势图宽度，不建议自己设定，如果设定时需要同步设置 slider 中的 width 值  |\n| height    | number     | type=trend：默认为 28<br />type=simple：默认为 8 | TimeBar 趋势图高度，不建议自己设定，如果设定时需要同步设置 slider 中的 height 值 |\n| smooth    | boolean    | false                                            | 是否是平滑的曲线                                                                 |\n| isArea    | boolean    | false                                            | 是否显示面积图                                                                   |\n| lineStyle | ShapeStyle | null                                             | 折线的样式配置                                                                   |\n| areaStyle | ShapeStyle | null                                             | 面积的样式配置项，只有当 isArea 为 true 时生效                                   |\n| interval  | Interval   | null                                             | 柱状图配置项，当配置了该项后，趋势图上会展现为混合图样式                         |\n\n#### SliderOption 接口定义\n\n```javascript\nexport type SliderOption = Partial<{\n  readonly width?: number;\n  readonly height?: number;\n  readonly backgroundStyle?: ShapeStyle;\n  readonly foregroundStyle?: ShapeStyle;\n  // 滑块样式\n  readonly handlerStyle?: {\n    width?: number;\n    height?: number;\n    style?: ShapeStyle;\n  };\n  readonly textStyle?: ShapeStyle;\n  // 初始位置\n  readonly start: number;\n  readonly end: number;\n  // 滑块文本\n  readonly minText: string;\n  readonly maxText: string;\n}>;\n```\n\n#### SliderOption 参数说明\n\n| 名称            | 类型       | 默认值                              | 描述                                                                            |\n| --------------- | ---------- | ----------------------------------- | ------------------------------------------------------------------------------- |\n| width           | number     | TimeBar 容器宽度 - 2 \\* padding     | 趋势图背景框宽度，不建议自己设定，如果设定时要同步修改 trend 中 width 值        |\n| height          | number     | 趋势图默认为 28<br />简易版默认为 8 | TimeBar 趋势图高度，不建议自己设定，如果设定时需要同步设置 trend 中的 height 值 |\n| backgroundStyle | ShapeStyle | null                                | 背景样式配置项                                                                  |\n| foregroundStyle | ShapeStyle | null                                | 前景色样式配置，即选中范围的样式配置项                                          |\n| handlerStyle    | ShapeStyle | null                                | 滑块的样式配置项                                                                |\n| textStyle       | ShapeStyle | null                                | 滑块上文本的样式配置项                                                          |\n| start           | number     | 0.1                                 | 开始位置                                                                        |\n| end             | number     | 0.9                                 | 结束位置                                                                        |\n| minText         | string     | min                                 | 最小值文本                                                                      |\n| maxText         | string     | max                                 | 最大值文本                                                                      |\n\n#### TimeBarSliceOption\n\n```javascript\nexport interface TimeBarSliceOption {\n  // position size\n  readonly x?: number;\n  readonly y?: number;\n  readonly width?: number;\n  readonly height?: number;\n  readonly padding?: number;\n\n  // styles\n  readonly selectedTickStyle?: TickStyle;\n  readonly unselectedTickStyle?: TickStyle\n  readonly tooltipBackgroundColor?: string;\n\n  readonly start?: number;\n  readonly end?: number;\n\n  // 数据\n  readonly data: {\n    date: string;\n    value: string;\n  }[];\n\n  // 自定义标签格式化函数\n  readonly tickLabelFormatter?: (d: any) => string | boolean;\n  // 自定义 tooltip 内容格式化函数\n  readonly tooltipFomatter?: (d: any) => string;\n}\n```\n\n#### TimeBarSliceOption 参数说明\n\n| 名称                   | 类型              | 默认值 | 描述                           |\n| ---------------------- | ----------------- | ------ | ------------------------------ |\n| x                      | number            | 0      | 刻度 TimeBar 开始 x 坐标       |\n| y                      | number            | 0      | 刻度 TimeBar 开始 y 坐标       |\n| width                  | number            |        | 必选，刻度 TimeBar 宽度        |\n| height                 | number            |        | 必选，刻度 TimeBar 高度        |\n| padding                | number / number[] | 0      | 刻度 TimeBar 距离边界的间距    |\n| selectedTickStyle      | ShapeStyle        | null   | 选中刻度的样式配置项           |\n| unselectedTickStyle    | ShapeStyle        | null   | 未选中刻度的样式配置项         |\n| tooltipBackgroundColor | ShapeStyle        | null   | tooltip 背景框配置项           |\n| start                  | number            | 0.1    | 开始位置                       |\n| end                    | number            | 0.9    | 结束位置                       |\n| data                   | any[]             | []     | 必选，刻度时间轴的刻度数据     |\n| tickLabelFormatter     | Function          | null   | 刻度的格式化回调函数           |\n| tooltipFomatter        | Function          | null   | tooltip 上内容格式化的回调函数 |\n\n#### TickCfg 接口定义\n\n```javascript\nexport interface TickCfg {\n  // 时间轴下方文本的格式化函数\n  readonly tickLabelFormatter?: (d: any) => string | undefined;\n  // 时间轴下方文本的图形样式\n  readonly tickLabelStyle?: ShapeStyle;\n  // 时间轴下方文本上的竖线图形样式\n  readonly tickLineStyle?: ShapeStyle;\n}\n```\n\n#### TickCfg 参数说明\n\n| Name               | Type       | Default Value | Description                                                             |\n| ------------------ | ---------- | ------------- | ----------------------------------------------------------------------- |\n| tickLabelFormatter | Function   | null          | The formatter function for customing the labels of the ticks            |\n| tickLabelStyle     | ShapeStyle | {}            | The shape style for the time tick labels                                |\n| tickLineStyle      | ShapeStyle | {}            | The shape style for the short vertical lines uppon the time tick labels |\n\n#### ControllerCfg 接口定义\n\n> 暂不支持\n\n> 控制按钮暂不支持配置样式\n\n> 不支持循环播放\n\n```javascript\ntype ControllerCfg = Partial<{\n\n  /** 控制栏的起始位置以及宽高，width height 将不缩放内部子控制器，仅影响它们的位置分布。需要缩放请使用 scale */\n  readonly x?: number;\n  readonly y?: number;\n  readonly width: number;\n  readonly height: number;\n  /** 控制栏缩放比例 */\n  readonly scale?: number;\n  /** 控制器背景的颜色和描边色 */\n  readonly fill?: string;\n  readonly stroke?: string;\n  /** 整个控制栏的字体样式，优先级低于各个子控制器的 text 内的 fontFamily */\n  readonly fontFamily?: string;\n\n  /** 播放速度，1 个 tick 花费时间 */\n  readonly speed?: number;\n  /** 是否循环播放 */\n  readonly loop?: boolean;\n  /** 是否隐藏右下角的 ’播放时间类型切换器‘ */\n  readonly hideTimeTypeController: boolean;\n\n  /** ‘上一帧’按钮的样式，同时可以为其配置 scale、offsetX、offsetY 单独控制该控制器的缩放以及平移 */\n  readonly preBtnStyle?: ShapeStyle;\n\n  /** ‘下一帧’按钮的样式，同时可以为其配置 scale、offsetX、offsetY 单独控制该控制器的缩放以及平移 */\n  readonly nextBtnStyle?: ShapeStyle;\n\n  /** ‘播放’ 与 ‘暂停’ 按钮的样式，同时可以为其配置 scale、offsetX、offsetY 单独控制该控制器的缩放以及平移 */\n  readonly playBtnStyle?: ShapeStyle;\n\n  /** ‘速度控制器’ 的样式，包括速度的指针、速度指示滚轮（横线）、文本的样式，同时可以为 speedControllerStyle 及其子图形样式配置 scale、offsetX、offsetY 单独控制该控制器及其子图形的缩放以及平移） */\n  readonly speedControllerStyle?: {\n    offsetX?: number,\n    offsetY?: number;\n    scale?: number\n    pointer?: ShapeStyle,\n    scroller?: ShapeStyle,\n    text?: ShapeStyle\n  };\n\n  /** ‘播放时间类型切换器’ 的样式，包括 checkbox 的框、checkbox 的选中勾、文本的样式，同时可以为 timeTypeControllerStyle 及其子图形样式配置 scale、offsetX、offsetY 单独控制该控制器及其子图形的缩放以及平移  */\n  readonly timeTypeControllerStyle?: {\n    offsetX?: number,\n    offsetY?: number;\n    scale?: number\n    check?: ShapeStyle,\n    box?: ShapeStyle,\n    text?: ShapeStyle\n  };\n  /** ‘播放时间类型切换器’单一文本时的文本，默认为‘单一时间’ */\n  readonly timePointControllerText?: string;\n  /** ‘播放时间类型切换器’单一文本时的文本，默认为‘时间范围’ */\n  readonly timeRangeControllerText?: string;\n}>\n```\n\n#### ControllerCfg 参数说明\n\n| 名称                    | 类型                                                                                                                  | 默认值       | 描述                                                                                                                                                                                                           |\n| ----------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| x                       | number                                                                                                                | 0            | 控制栏开始 x 坐标                                                                                                                                                                                              |\n| y                       | number                                                                                                                | 0            | 控制栏开始 y 坐标                                                                                                                                                                                              |\n| width                   | number                                                                                                                | TimeBar 宽度 | 控制栏宽度，将不缩放内部子控制器，仅影响它们的位置分布                                                                                                                                                         |\n| height                  | number                                                                                                                | 40           | 控制栏高度，将不缩放内部子控制器，仅影响它们的位置分布                                                                                                                                                         |\n| scale                   | number                                                                                                                | 1            | 控制栏缩放比例                                                                                                                                                                                                 |\n| speed                   | number                                                                                                                | 1            | 播放速度                                                                                                                                                                                                       |\n| loop                    | boolean                                                                                                               | false        | 暂不支持，是否循环播放                                                                                                                                                                                         |\n| hideTimeTypeController  | boolean                                                                                                               | true         | 是否隐藏时间类型切换                                                                                                                                                                                           |\n| fill                    | string                                                                                                                |              | 控制栏背景框填充色                                                                                                                                                                                             |\n| stroke                  | string                                                                                                                |              | 整个控制栏的字体样式，优先级低于各个子控制器的 text 内的 fontFamily                                                                                                                                            |\n| preBtnStyle             | string                                                                                                                | null         | 控制栏背景框边框色                                                                                                                                                                                             |\n| preBtnStyle             | ShapeStyle                                                                                                            | null         | ‘上一帧’按钮的样式，同时可以为其配置 `scale`、`offsetX`、`offsetY` 单独控制该控制器的缩放以及平移                                                                                                              |\n| nextBtnStyle            | ShapeStyle                                                                                                            | null         | ‘下一帧’按钮的样式，同时可以为其配置 `scale`、`offsetX`、`offsetY` 单独控制该控制器的缩放以及平移                                                                                                              |\n| playBtnStyle            | ShapeStyle                                                                                                            | null         | ‘播放’ 与 ‘暂停’ 按钮的样式，同时可以为其配置 `scale`、`offsetX`、`offsetY` 单独控制该控制器的缩放以及平移                                                                                                     |\n| speedControllerStyle    | { offsetX?: number, offsetY?: number, scale?: number, pointer?: ShapeStyle, text?: ShapeStyle, scroller?: ShapeStyle} | null         | ‘速度控制器’ 的样式，包括速度的指针、速度指示滚轮（横线）、文本的样式，同时可以为 `speedControllerStyle` 及其子图形样式配置 `scale`、`offsetX`、`offsetY` 单独控制该控制器及其子图形的缩放以及平移             |\n| timeTypeControllerStyle | { offsetX?: number, offsetY?: number, scale?: number, box?: ShapeStyle, check?: ShapeStyle, text?: ShapeStyle }       | null         | ‘播放时间类型切换器’ 的样式，包括 checkbox 的框、checkbox 的选中勾、文本的样式，同时可以为 `timeTypeControllerStyle` 及其子图形样式配置 `scale`、`offsetX`、`offsetY` 单独控制该控制器及其子图形的缩放以及平移 |\n| timePointControllerText | string                                                                                                                | \"单一时间\"   | 右下角“单一时间”文本，默认为”单一时间“                                                                                                                                                                         |\n| timePointControllerText | string                                                                                                                | \"时间范围\"   | 右下角“单一时间”文本，默认为”时间范围时间“                                                                                                                                                                     |\n"
  },
  {
    "path": "packages/site/docs/api/TreeGraph.zh.md",
    "content": "---\ntitle: 树图配置 F6.TreeGraph(cfg)\norder: 3\n---\n\n创建 TreeGraph 实例。\n\n```ts\n// highlight-start\nnew F6.TreeGraph(cfg: GraphOptions) => TreeGraph\n// highlight-end\n\nconst treeGraph = new F6.TreeGraph({\n  ...\n  width: 800,\n  height: 600,\n  modes: {\n    default: [\n      {\n        type: 'collapse-expand',\n        onChange(item, collapsed) {\n          const icon = item.get('group').findByClassName('collapse-icon');\n          if (collapsed) {\n            icon.attr('symbol', EXPAND_ICON);\n          } else {\n            icon.attr('symbol', COLLAPSE_ICON);\n          }\n        },\n      },\n      'drag-canvas',\n      'zoom-canvas',\n    ],\n  },\n  layout: {\n    type: 'dendrogram',\n    direction: 'LR', // H / V / LR / RL / TB / BT\n    nodeSep: 50,\n    rankSep: 100,\n    radial: true,\n  },\n});\n```\n\nTreeGraph 是 F6 专门为树图场景打造的图。`F6.TreeGraph` 与 `F6.Graph` 最大的区别就是数据结构和内置布局计算。主要考虑：\n\n- 数据结构：树图的数据一般是嵌套结构，边的数据隐含在嵌套结构中，并不会特意指定 edge 。此布局要求数据中一个节点需要有 `id` 和 `children` 两个数据项，最精简的数据结构如下所示：\n\n```javascript\nconst data = {\n  id: 'root',\n  children: [\n    {\n      id: 'subTree1',\n      children: [...]\n    },\n    {\n      id: 'subTree2',\n      children: [...]\n    }\n  ]\n};\n```\n\n- 布局特殊性：\n  - 树图的布局算法一般是不改变源数据的，而是重新生成一份数据，将源数据作为新数据的一个属性。如果每次都需要做次遍历转换数据到节点和边的数据增加了用户的实现复杂度。\n  - 树图的每次新增/删除/展开/收缩节点，都需要重新计算布局。遍历一份结构化数据对应到图上每个节点去做更新操作，也很麻烦。\n\nTreeGraph 继承自 Graph，配置项参考 [F6.Graph(GraphOptions)](/zh/docs/api/Graph.zh.md)。其中， layout 配置项支持的布局类型 (`type` 属性) 和 Graph 中所支持的类型不同，TreeGraph 中 layout 目前支持 dendrogram、compactBox、mindmap 和 indeted 四种布局方式，具体配置方式见 [TreeGraph Layout](/zh/docs/api/treeGraphLayout/guide)。\n"
  },
  {
    "path": "packages/site/docs/api/Util.zh.md",
    "content": "---\ntitle: 工具方法 Util\norder: 15\n---\n\nF6 提供了一些工具方法，方便用户做数据的预处理、图形计算等。\n\n## 使用方法\n\n引入 F6 后，可通过 `F6.Util.functionName` 调用到 F6 抛出的工具方法。下面代码演示了使用 `processParallelEdges` 处理两节点之间存在多条边的情况。\n\n```javascript\nimport F6 from '@antv/f6';\n\nconst data = {\n  nodes: [\n    { id: '1' }, { id: '2' }\n  ]\n  edges: [\n    { source: '1', target: '2' },\n    { source: '1', target: '2' },\n  ];\n}\n\nconst offsetDiff = 10;\nconst multiEdgeType = 'quadratic';\nconst singleEdgeType = 'line';\nconst loopEdgeType = 'loop';\nF6.Util.processParallelEdges(data.edges, offsetDiff, multiEdgeType, singleEdgeType, loopEdgeType);\n```\n\n## 数据预处理\n\n### processParallelEdges 处理平行边\n\n若两条边的两个端点相同，则称这两条边相互平行。当一对节点节点之间存在多条边，不做处理直接绘制可能会导致边相互重叠。该 Util 方法将找到数据中的平行边，为它们计算合理的贝塞尔曲线控制点偏移量 `curveOffset`，挂载到相应的边数据上，使得平行边在渲染时可以根据 `curveOffset` 绘制贝塞尔曲线，从而不相互重叠。因此该方法适用于将平行边处理为 `quadratic` 或基于 `quadratic` 自定义的边类型。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*g2p_Qa_wZcIAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n#### 配置项\n\n| 名称           | 类型         | 是否必须 | 描述                                                                                           |\n| -------------- | ------------ | -------- | ---------------------------------------------------------------------------------------------- |\n| edges          | EdgeConfig[] | true     | 需要处理的边数据数组                                                                           |\n| offsetDiff     | number       | false    | 两条平行边的之间的距离，默认为 15                                                              |\n| multiEdgeType  | string       | false    | 两节点之间若存在多条边时，这些边的类型，默认为 'quadratic'                                     |\n| singleEdgeType | string       | false    | 两节点之间仅有一条边时，该边的类型，默认为 undefined，即不改变这种边的类型                     |\n| loopEdgeType   | string       | false    | 若一条边的起点和终点是同一个节点（自环边），该边的类型，默认为 undefined，即不改变这种边的类型 |\n\n#### 使用示例\n\n[Demo](/zh/docs/examples/item/multiEdge#multiEdges)\n\n### traverseTree 深度优先遍历树数据\n\n从根节点到叶子节点的由上至下的深度优先遍历树数据。\n\n#### 配置项\n\n| 名称 | 类型     | 是否必须 | 描述                       |\n| ---- | -------- | -------- | -------------------------- |\n| data | TreeData | true     | 需要遍历的树数据           |\n| fn   | function | true     | 遍历到每个节点时的回调函数 |\n\n#### 使用示例\n\n```javascript\nconst treeData = {\n  id: \"1\",\n  children: [\n    {\n      id: \"2\",\n      children: [{ id: \"3\" }, { id: \"4\" }],\n    },\n    {\n      id: \"5\",\n      children: [\n        { id: \"6\" },\n        {\n          id: \"7\",\n          children: [{ id: \"8\" }, { id: \"9\" }],\n        },\n      ],\n    },\n    {\n      id: \"10\",\n      children: [{ id: \"11\" }],\n    },\n  ],\n};\n\ntraverseTree(treeData, (subTree) => {\n  subTree.color = \"#f00\";\n  return true;\n});\n```\n\n### traverseTreeUp 深度优先遍历树数据\n\n从叶子节点到根节点的由下至上的深度优先遍历树数据。\n\n#### 配置项\n\n| 名称 | 类型     | 是否必须 | 描述                       |\n| ---- | -------- | -------- | -------------------------- |\n| data | TreeData | true     | 需要遍历的树数据           |\n| fn   | function | true     | 遍历到每个节点时的回调函数 |\n\n#### 使用示例\n\n```javascript\nconst treeData = {\n  id: \"1\",\n  children: [\n    {\n      id: \"2\",\n      children: [{ id: \"3\" }, { id: \"4\" }],\n    },\n    {\n      id: \"5\",\n      children: [\n        { id: \"6\" },\n        {\n          id: \"7\",\n          children: [{ id: \"8\" }, { id: \"9\" }],\n        },\n      ],\n    },\n    {\n      id: \"10\",\n      children: [{ id: \"11\" }],\n    },\n  ],\n};\n\ntraverseTreeUp(treeData, (subTree) => {\n  subTree.color = \"#f00\";\n  return true;\n});\n```\n\n## 包围盒计算\n\n### calculationItemsBBox 一组节点的总包围盒\n\n| 名称  | 类型   | 是否必须 | 描述     |\n| ----- | ------ | -------- | -------- |\n| items | Item[] | true     | 节点数组 |\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/animation.zh.md",
    "content": "---\ntitle: 动画相关方法\norder: 14\n---\n\n### graph.positionsAnimate()\n\n根据当前数据中的节点位置，动画更新节点位置。将会使用 graph 上的 `animateCfg` 配置项作为动画行为的依据。\n\n### graph.stopAnimate()\n\n停止画布上的所有动画。\n\n**用法**\n\n```javascript\ngraph.stopAnimate();\n```\n\n### graph.isAnimating()\n\n判断当前是否有正在执行的动画。\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/behaviors.zh.md",
    "content": "---\ntitle: 增删复合交互\norder: 10\n---\n\n### graph.addBehaviors(behaviors, modes)\n\n新增行为，将单个或多个行为添加到单个或多个模式中。\n\n**参数**\n\n| 名称      | 类型           | 是否必选 | 描述             |\n| --------- | -------------- | -------- | ---------------- |\n| behaviors | string / Array | true     | 添加的行为的名称 |\n| modes     | string / Array | true     | 模式的名称       |\n\n**用法**\n\n```javascript\n// 将单个 Behavior 添加到单个模式（默认的 default 模式）中\ngraph.addBehaviors(\"click-select\", \"default\");\n\n// 将多个 Behavior 添加到单个模式（默认的 default 模式）中\ngraph.addBehaviors([\"brush-select\", \"click-select\"], \"default\");\n\n// 将单个 Behavior 添加到多个模式中\ngraph.addBehaviors(\"brush-select\", [\"default\", \"select\"]);\n\n// 将多个 Behavior 添加到多个模式中\ngraph.addBehaviors([\"brush-select\", \"click-select\"], [\"default\", \"select\"]);\n```\n\n### graph.removeBehaviors(behaviors, modes)\n\n移除行为，将单个或多个行为从单个或多个模式中去除。\n\n**参数**\n\n| 名称      | 类型           | 是否必选 | 描述             |\n| --------- | -------------- | -------- | ---------------- |\n| behaviors | string / Array | true     | 删除的行为的名称 |\n| modes     | string / Array | true     | 模式的名称       |\n\n**用法**\n\n```javascript\n// 从单个模式中移除单个 Behavior\ngraph.removeBehaviors(\"click-select\", \"default\");\n\n// 从单个模式中移除多个 Behavior\ngraph.removeBehaviors([\"brush-select\", \"click-select\"], \"default\");\n\n// 从多个模式中移除单个 Behavior\ngraph.removeBehaviors(\"brush-select\", [\"default\", \"select\"]);\n\n// 从多个模式中移除多个 Behavior\ngraph.removeBehaviors([\"brush-select\", \"click-select\"], [\"default\", \"select\"]);\n```\n\n### graph.updateBehavior(behavior, mode)\n\n更新某个模式下的 behavior 的参数。\n\n**参数**\n\n| 名称     | 类型   | 是否必选 | 描述                                                 |\n| -------- | ------ | -------- | ---------------------------------------------------- |\n| behavior | string | true     | 需要更新的 behavior 类型名                           |\n| newCfg   | object | true     | 新的配置项                                           |\n| mode     | string | false    | 需要修改的 behavior 所在的模式名称，默认为 'default' |\n\n**用法**\n\n```javascript\nconst graph = new Graph({\n  ... // 其他配置项\n  modes: {\n    default: ['zoom-canvas', 'drag-canvas'],\n    select: ['click-select']\n  }\n})\n\ngraph.data(data);\ngraph.render();\n\n// 更新 'default' 模式下的 behavior 'zoom-canvas'\ngraph.updateBehavior('zoom-canvas', { sensitivity: 1.5, enableOptimize: true}, 'default');\n\n// 更新 'select' 模式下的 behavior 'click-select'\ngraph.updateBehavior('click-select', { trigger: 'ctrl' }, 'select');\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/calculation.zh.md",
    "content": "---\ntitle: 图计算相关\norder: 12\n---\n\n### graph.getNodeDegree(node, degreeType, refresh)\n\n获取节点的出度、入度、总度数，或同时获得以上三种。\n\n**参数**\n\n| 名称       | 类型                                   | 是否必选 | 描述                                                                                                                                                                                 |\n| ---------- | -------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| node       | string / INode                         | true     | 节点 ID 或实例                                                                                                                                                                       |\n| degreeType | `'in'` \\ `'out'` \\ `'total'` \\ `'all'` | false    | 获取度数的类型。设置为 `'in'` 将返回入度；`'out'` 将返回出度；`'total'` 将返回总度数；`'all'` 将返回一个含有三种度数的对象：`{ inDegree, outDegree, degree}`；若不指定，将返回总度数 |\n| refresh    | boolean                                | false    | 是否强制更新整个图的度数缓存。默认为 `false`。当通过 `addItem` 添加边后，再使用 getNodeDegree 时应当将 `refresh` 设置为 `true`                                                       |\n\n**用法**\n\n```javascript\ngraph.getNodeDegree(\"node1\", \"in\");\n```\n\n### graph.getShortestPathMatrix(cache, directed)\n\n获取图中两两节点之间的最短路径矩阵。\n\n**参数**\n\n| 名称     | 类型    | 是否必选 | 描述                                       |\n| -------- | ------- | -------- | ------------------------------------------ |\n| cache    | boolean | false    | 是否使用缓存，默认为 true                  |\n| directed | boolean | false    | 是否是有向图，默认取 graph.get('directed') |\n\n**返回值**\n\n返回图的最短路径矩阵。\n\n**用法**\n\n```javascript\nconst matrix = graph.getShortestPathMatrix();\n```\n\n### graph.getAdjMatrix(cache, directed)\n\n获取邻接矩阵。\n\n**参数**\n\n| 名称     | 类型    | 是否必选 | 描述                                       |\n| -------- | ------- | -------- | ------------------------------------------ |\n| cache    | boolean | false    | 是否使用缓存，默认为 true                  |\n| directed | boolean | false    | 是否是有向图，默认取 graph.get('directed') |\n\n**返回值**\n\n返回图的邻接矩阵。\n\n**用法**\n\n```javascript\nconst matrix = graph.getAdjMatrix();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/combo.zh.md",
    "content": "---\ntitle: Combo 操作\norder: 6\n---\n\n### graph.collapseCombo(combo)\n\n收起指定的 Combo。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                   |\n| ----- | --------------- | -------- | ---------------------- |\n| combo | string / ICombo | true     | combo ID 或 combo 实例 |\n\n**用法**\n\n```\ngraph.collapseCombo('combo1')\n```\n\n### graph.expandCombo(combo)\n\n展开指定的 Combo。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                   |\n| ----- | --------------- | -------- | ---------------------- |\n| combo | string / ICombo | true     | combo ID 或 combo 实例 |\n\n**用法**\n\n```\ngraph.expandCombo('combo1')\n```\n\n### graph.collapseExpandCombo(combo)\n\n展开或收缩指定的 Combo。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                   |\n| ----- | --------------- | -------- | ---------------------- |\n| combo | string / ICombo | true     | combo ID 或 combo 实例 |\n\n**用法**\n\n```\ngraph.collapseExpandCombo('combo1')\n```\n\n### graph.createCombo(combo, elements)\n\n根据已经存在的节点或 combo 创建新的 combo。\n\n**参数**\n\n| 名称     | 类型                 | 是否必选 | 描述                                       |\n| -------- | -------------------- | -------- | ------------------------------------------ |\n| combo    | string / ComboConfig | true     | combo ID 或 Combo 配置                     |\n| elements | string[]             | true     | 添加到 Combo 中的元素 ID，包括节点和 combo |\n\n**用法**\n\n```\n// 第一个参数为 combo ID\ngraph.createCombo('combo1', ['node1', 'node2', 'combo2'])\n\n// 第一个参数为 combo 配置\ngraph.createCombo({\n  id: 'combo1',\n  style: {\n    fill: '#f00'\n  }\n}, ['node1', 'node2', 'combo2'])\n```\n\n### graph.uncombo(combo)\n\n拆解 Combo，即拆分组/解组。调用后，combo 本身将被删除，而该分组内部的子元素将会成为该分组父分组（若存在）的子元素。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                          |\n| ----- | --------------- | -------- | ----------------------------- |\n| combo | string / ICombo | true     | 需要被拆解的 Combo item 或 id |\n\n**用法**\n\n```\ngraph.uncombo('combo1')\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/coordinate.zh.md",
    "content": "---\ntitle: 坐标转换\norder: 15\n---\n\n这部分主要是说明渲染坐标、Canvas 坐标和页面坐标之前的相互转换。三种坐标系的关系参见文档：[F6 坐标系深度解析](/zh/docs/manual/advanced/coordinate-system)。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Dzz_R5yJEooAAAAAAAAAAABkARQnAQ' alt='img' width='1000'/>\n\n### graph.getPointByClient(clientX, clientY)\n\n将屏幕/页面坐标转换为渲染坐标。\n\n**参数**\n\n| 名称    | 类型   | 是否必选 | 描述        |\n| ------- | ------ | -------- | ----------- |\n| clientX | Number | true     | 屏幕 x 坐标 |\n| clientY | Number | true     | 屏幕 y 坐标 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 包含的属性：x 和 y 属性，分别表示渲染的 x 、y 坐标。\n\n**用法**\n\n```javascript\nconst point = graph.getPointByClient(e.clientX, e.clientY);\nconsole.log(\"渲染坐标 x/y 分别为:\", point.x, point.y);\n```\n\n### graph.getClientByPoint(x, y)\n\n将渲染坐标转换为屏幕/页面坐标。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述                  |\n| ---- | ------ | -------- | --------------------- |\n| x    | Number | true     | 渲染坐标系下的 x 坐标 |\n| y    | Number | true     | 渲染坐标系下的 y 坐标 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 包含的属性：`x` 和 `y` 属性，分别表示屏幕/页面的 x、y 坐标。\n\n**用法**\n\n```javascript\nconst point = graph.getClientByPoint(100, 200);\nconsole.log(\"屏幕/页面x/y坐标分别为:\", point.x, point.y);\n```\n\n### graph.getPointByCanvas(canvasX, canvasY)\n\n将 Canvas 画布坐标转换为渲染坐标。\n\n**参数**\n\n| 名称    | 类型   | 是否必选 | 描述        |\n| ------- | ------ | -------- | ----------- |\n| canvasX | Number | true     | 画布 x 坐标 |\n| canvasY | Number | true     | 画布 y 坐标 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 包含的属性：x 和 y 属性，分别表示渲染的 x、y 坐标。\n\n**用法**\n\n```javascript\nconst point = graph.getPointByCanvas(100, 200);\nconsole.log(\"渲染坐标 x/y 分别为:\", point.x, point.y);\n```\n\n### graph.getCanvasByPoint(x, y)\n\n将渲染坐标转换为 Canvas 画布坐标。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述                  |\n| ---- | ------ | -------- | --------------------- |\n| x    | Number | true     | 渲染坐标系下的 x 坐标 |\n| y    | Number | true     | 渲染坐标系下的 y 坐标 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 包含的属性：x 和 y 属性，分别表示 Canvas 画布的 x、y 坐标。\n\n**用法**\n\n```javascript\nconst point = graph.getCanvasByPoint(100, 200);\nconsole.log(\"Canvas 画布的 x/y 坐标分别为:\", point.x, point.y);\n```\n\n### graph.getGraphCenterPoint()\n\n获取图内容的中心绘制坐标。v4.2.1 支持。\n\n**参数**\n\n无\n\n**返回值**\n\n- 返回值类型：Object；\n- 包含的属性：x 和 y 属性，分别表示渲染坐标下的 x、y 值。\n\n**用法**\n\n```javascript\nconst point = graph.getGraphCenterPoint();\nconsole.log(\"图内容中心的绘制坐标是\", point.x, point.y);\n```\n\n### graph.getViewPortCenterPoint()\n\n获取视口中心绘制坐标。\n\n**参数**\n\n无\n\n**返回值**\n\n- 返回值类型：Object；\n- 包含的属性：x 和 y 属性，分别表示渲染坐标下的 x、y 值。\n\n**用法**\n\n```javascript\nconst point = graph.getViewPortCenterPoint();\nconsole.log(\"视口中心的绘制坐标是\", point.x, point.y);\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/data.zh.md",
    "content": "---\ntitle: 数据\norder: 0\n---\n\n设置图初始化数据。\n\n### graph.data(_data_)\n\n<description> _Object_ **required** </description>\n\n初始化的图数据，是一个包括 nodes 数组和 edges 数组的对象。\n\n**用法**\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n\n// graph 是 Graph 的实例\ngraph.data(data);\n```\n\n### graph.save()\n\n获取图数据。\n\n该方法无参数。\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回值包括所有节点和边，数据结构如下下所示：\n\n```javascript\n{\n\tnodes: [],\n  edges: [],\n  groups: [],\n}\n```\n\n**用法**\n\n```javascript\ngraph.save();\n```\n\n### graph.read(data)\n\n接收数据，并进行渲染，read 方法的功能相当于 data 和 render 方法的结合。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述                                             |\n| ---- | ------ | -------- | ------------------------------------------------ |\n| data | Object | true     | 初始化的图数据，是一个包括 nodes 和 edges 的对象 |\n\n**用法**\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n\n// graph是Graph的实例\ngraph.read(data);\n```\n\n### graph.changeData(data, stack)\n\n更新数据源，根据新的数据重新渲染视图。\n\n**参数**\n\n| 名称  | 类型    | 是否必选 | 描述                                                                                                                                                                    |\n| ----- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| data  | Object  | false    | 图数据，是一个包括 nodes 和 edges 的对象。若不指定该参数，则使用当前数据重新渲染                                                                                        |\n| stack | boolean | false    | 操作是否入 undo & redo 栈，当实例化 Graph 时设置 enableStack 为 true 时，默认情况下会自动入栈，入栈以后，就支持 undo & redo 操作，如果不需要，则设置该参数为 false 即可 |\n\n**用法**\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n\n// graph是Graph的实例\ngraph.changeData(data);\n// 若不指定该参数，则使用当前图上的数据重新渲染\ngraph.changeData();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/destroy.zh.md",
    "content": "---\ntitle: 清除/销毁画布\norder: 18\n---\n\n### graph.clear()\n\n清除画布元素。该方法一般用于清空数据源，重新设置数据源，重新 render 的场景，此时所有的图形都会被清除。\n\n该方法无参数。\n\n**用法**\n\n```javascript\ngraph.clear();\n```\n\n### graph.destroy()\n\n销毁画布。\n\n该方法无参数。\n\n**用法**\n\n```javascript\ngraph.destroy();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/download.zh.md",
    "content": "---\ntitle: 导出图片\norder: 17\n---\n\n### graph.downloadFullImage(name, type, imageConfig)\n\n将画布上的元素导出为图片。\n\n**参数**\n\n| 名称        | 类型                                                            | 是否必选 | 描述                                                                                                 |\n| ----------- | --------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------- |\n| name        | String                                                          | false    | 图片的名称，不指定则为 'graph'                                                                       |\n| type        | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false    | 图片的类型。图的 `renderer` 为默认的 `'canvas'` 时生效，图的 `renderer` 为 `'svg'` 时将导出 svg 文件 |\n| imageConfig | Object                                                          | false    | 图片的配置项，可选，具体字段见下方                                                                   |\n\n其中，imageConfig 为导出图片的配置参数：\n\n| 名称            | 类型              | 是否必选 | 描述                                                                              |\n| --------------- | ----------------- | -------- | --------------------------------------------------------------------------------- |\n| backgroundColor | String            | false    | 图片的背景色，可选，不传值时将导出透明背景的图片                                  |\n| padding         | Number / Number[] | false    | 导出图片的上左下右 padding 值。当 `padding` 为 number 类型时，四周 `padding` 相等 |\n\n**用法**\n\n```javascript\ngraph.downloadFullImage(\"tree-graph\", {\n  backgroundColor: \"#ddd\",\n  padding: [30, 15, 15, 15],\n});\n```\n\n### graph.downloadImage(name, type, backgroundColor)\n\n将画布上的元素导出为图片。\n\n**参数**\n\n| 名称            | 类型                                                            | 是否必选 | 描述                                                                                                 |\n| --------------- | --------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------- |\n| name            | String                                                          | false    | 图片的名称，不指定则为 'graph'                                                                       |\n| type            | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false    | 图片的类型。图的 `renderer` 为默认的 `'canvas'` 时生效，图的 `renderer` 为 `'svg'` 时将导出 svg 文件 |\n| backgroundColor | String                                                          | false    | 图片的背景色，可选，不传值时将导出透明背景的图片                                                     |\n\n**用法**\n\n```javascript\ngraph.downloadImage();\n```\n\n### graph.toFullDataURL(callback, type, imageConfig)\n\n将画布上元素生成为图片的 URL。\n\n**参数**\n\n| 名称        | 类型                                                            | 是否必选 | 描述                                                                                                 |\n| ----------- | --------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------- |\n| callback    | Function                                                        | true     | 异步生成 dataUrl 完成后的回调函数，在这里处理生成的 dataUrl 字符串                                   |\n| type        | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false    | 图片的类型。图的 `renderer` 为默认的 `'canvas'` 时生效，图的 `renderer` 为 `'svg'` 时将导出 svg 文件 |\n| imageConfig | Object                                                          | false    | 图片的配置项，可选，具体字段见下方                                                                   |\n\n其中，imageConfig 为导出图片的配置参数：\n\n| 名称            | 类型              | 是否必选 | 描述                                                                              |\n| --------------- | ----------------- | -------- | --------------------------------------------------------------------------------- |\n| backgroundColor | String            | false    | 图片的背景色，可选，不传值时将导出透明背景的图片                                  |\n| padding         | Number / Number[] | false    | 导出图片的上左下右 padding 值。当 `padding` 为 number 类型时，四周 `padding` 相等 |\n\n无返回值，生成的结果请在 callback 中处理。如下示例：\n\n**用法**\n\n```javascript\ngraph.toFullDataUrl(\n  // 第一个参数为 callback，必须\n  (res) => {\n    // ... something\n    console.log(res); // 打印出结果\n  },\n  // 后两个参数不是必须\n  'image/jpeg',\n  (imageConfig: {\n    backgroundColor: '#fff',\n    padding: 10,\n  }),\n);\n```\n\n### graph.toDataURL(type, backgroundColor)\n\n将画布上元素生成为图片的 URL。\n\n**参数**\n\n| 名称            | 类型                                                            | 是否必选 | 描述                                                                                                 |\n| --------------- | --------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------- |\n| type            | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false    | 图片的类型。图的 `renderer` 为默认的 `'canvas'` 时生效，图的 `renderer` 为 `'svg'` 时将导出 svg 文件 |\n| backgroundColor | String                                                          | false    | 图片的背景色，可选，不传值时将导出透明背景的图片                                                     |\n\n**返回值**\n\n- 返回值类型：String；\n- 返回值表示生成的图片的 URL。\n\n**用法**\n\n```javascript\nconst dataURL = graph.toDataURL();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/find.zh.md",
    "content": "---\ntitle: 查找元素\norder: 5\n---\n\n### graph.getNodes()\n\n获取图中所有节点的实例。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 这里返回的是节点的实例，而不是节点的数据项。\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回值表示图中所有节点的实例。\n\n**用法**\n\n```javascript\nconst nodes = graph.getNodes();\n```\n\n### graph.getEdges()\n\n获取图中所有边的实例。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 这里返回的是边的实例，而不是边的数据项。\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回值表示图中所有边的实例。\n\n**用法**\n\n```javascript\nconst edges = graph.getEdges();\n```\n\n### graph.getCombos()\n\n获取当前图中所有 combo 的实例。\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回值表示图中所有 combo 的实例。\n\n**用法**\n\n```javascript\nconst combos = graph.getCombos();\n```\n\n### graph.getComboChildren(combo)\n\n获取指定 combo 中所有的子节点及子 combo。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                   |\n| ----- | --------------- | -------- | ---------------------- |\n| combo | string / ICombo | true     | Combo ID 或 combo 实例 |\n\n**返回值**\n\n- 返回值类型：Object，格式如下\n\n```javascript\n{\n    nodes: INode[],\n    edges: ICombo[]\n}\n```\n\n- 返回指定 combo 中的子元素（子节点及子 combo）。\n\n**用法**\n\n```\nconst elements: {\n  nodes: INode[],\n  combos: ICombo[]\n} = graph.getComboChildren('combo1')\n```\n\n### graph.getNeighbors(node, type)\n\n**参数**\n\n| 名称 | 类型                            | 是否必选 | 描述                                                                                                             |\n| ---- | ------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |\n| node | string / INode                  | true     | 节点 ID 或节点实例                                                                                               |\n| type | 'source' / 'target' / undefined | false    | 邻居类型， 'source' 只获取当前节点的源节点，'target' 只获取当前节点指向的目标节点， 若不指定则返回所有类型的邻居 |\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回值符合要求的节点数组。\n\n**用法**\n\n```javascript\nconst neighbors = graph.getNeighbors(\"node1\", \"source\");\n```\n\n### graph.find(type, fn)\n\n根据具体规则查找单个元素。\n\n**参数**\n\n| 名称 | 类型     | 是否必选 | 描述                                  |\n| ---- | -------- | -------- | ------------------------------------- |\n| type | string   | true     | 元素类型，可选值为 `'node'`、`'edge'` |\n| fn   | Function | true     | 查找的规则                            |\n\n**返回值**\n\n- 返回值类型：Object；\n- 如果有符合规则的元素实例，则返回第一个匹配的元素实例，否则返回 `undefined` 。\n\n**用法**\n\n```javascript\nconst findNode = graph.find(\"node\", (node) => {\n  return node.get(\"model\").x === 100;\n});\n```\n\n### graph.findById(id)\n\n根据 ID，查询对应的元素实例。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述    |\n| ---- | ------ | -------- | ------- |\n| id   | string | true     | 元素 ID |\n\n**返回值**\n\n- 返回值类型：Object；\n- 如果有符合规则的元素实例，则返回该元素实例，否则返回 `undefined`。\n\n**用法**\n\n```javascript\nconst node = graph.findById(\"node\");\n```\n\n### graph.findAll(type, fn)\n\n查询所有满足规则的元素。\n\n**参数**\n\n| 名称 | 类型     | 是否必选 | 描述                                  |\n| ---- | -------- | -------- | ------------------------------------- |\n| type | string   | true     | 元素类型，可选值为 `'node'`、`'edge'` |\n| fn   | Function | true     | 查找的规则                            |\n\n**返回值**\n\n- 返回值类型：Array；\n- 如果有符合规则的元素实例，则返回所有元素实例，否则返回 `undefined`。\n\n**用法**\n\n```javascript\nconst nodes = graph.findAll(\"node\", (node) => {\n  return node.get(\"model\").x;\n});\n```\n\n### graph.findAllByState(type, state)\n\n查找所有处于指定状态的元素。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述                                  |\n| ----- | ------ | -------- | ------------------------------------- |\n| type  | string | true     | 元素类型，可选值为 `'node'`、`'edge'` |\n| state | string | true     | 状态名称                              |\n\n**返回值**\n\n- 返回值类型：Array；\n- 返回所有指定状态的元素实例。\n\n**用法**\n\n```javascript\n// 查询所有选中的元素\nconst nodes = graph.findAllByState(\"node\", \"selected\");\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/get_set.zh.md",
    "content": "---\ntitle: 获取/设置\norder: 2\n---\n\n### graph.get(key)\n\n根据 key 获取属性值。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述     |\n| ---- | ------ | -------- | -------- |\n| key  | string | true     | 属性的键 |\n\n**用法**\n\n```javascript\n// 获取 group\nconst group = graph.get(\"group\");\n\n// 获取 canvas 实例\nconst canvas = graph.get(\"canvas\");\n\n// 获取 autoPaint 值\nconst autoPaint = graph.get(\"autoPaint\");\n```\n\n### graph.set(key, val)\n\n设置属性值。\n\n**参数**\n\n| 名称 | 类型                    | 是否必选 | 描述     |\n| ---- | ----------------------- | -------- | -------- |\n| key  | string                  | true     | 属性的键 |\n| val  | string / Object / Array | true     | 属性的值 |\n\n**用法**\n\n```javascript\n// 设置 capture 值为 false\ngraph.set(\"capture\", false);\n\n// 设置 customGroup 值为 group\ngraph.set(\"customGroup\", group);\n\n// 设置 nodeIdList 值为数组\ngraph.set(\"nodeIdList\", [1, 3, 5]);\n```\n\n### graph.getContainer()\n\n获取 Graph 的 DOM 容器。\n\n**参数**\n\n无参数\n\n**用法**\n\n```javascript\ngraph.getContainer();\n```\n\n### graph.getGroup()\n\n获取 Graph 根[图形分组](/zh/docs/manual/middle/elements/shape/graphics-group)。\n\n**参数**\n\n无参数\n\n**用法**\n\n```javascript\ngraph.getGroup();\n```\n\n### graph.getMinZoom()\n\n获取 graph 当前允许的最小缩放比例。\n\n**参数**\n\n无参数\n\n**用法**\n\n```javascript\ngraph.getMinZoom();\n```\n\n### graph.setMinZoom(ratio)\n\n设置 graph 当前允许的最小缩放比例。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述           |\n| ----- | ------ | -------- | -------------- |\n| ratio | number | true     | 最小缩放比例值 |\n\n**用法**\n\n```javascript\ngraph.setMinZoom(0.001);\n```\n\n### graph.getMaxZoom()\n\n获取 graph 当前允许的最大缩放比例。\n\n**参数**\n\n无参数\n\n**用法**\n\n```javascript\ngraph.getMaxZoom();\n```\n\n### graph.setMaxZoom(ratio)\n\n设置 graph 当前允许的最大缩放比例。\n\n**参数**\n\n| 名称  | 类型   | 是否必选 | 描述           |\n| ----- | ------ | -------- | -------------- |\n| ratio | number | true     | 最大缩放比例值 |\n\n**用法**\n\n```javascript\ngraph.setMaxZoom(1000);\n```\n\n### graph.getWidth()\n\n获取 graph 当前的宽度。\n\n**参数**\n\n无参数\n\n**用法**\n\n```javascript\ngraph.getWidth();\n```\n\n### graph.getHeight()\n\n获取 graph 当前的高度。\n\n**参数**\n\n无参数\n\n**用法**\n\n```javascript\ngraph.getHeight();\n```\n\n</div>\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/hull.zh.md",
    "content": "---\ntitle: 聚类轮廓包裹\norder: 11\n---\n\n## createHull(cfg: HullCfg)\n\n**参数**\n\n| 名称 | 类型    | 是否必选 | 描述       |\n| ---- | ------- | -------- | ---------- |\n| cfg  | HullCfg | true     | 轮廓配置项 |\n\n轮廓包裹的形状支持 `round-convex` / `smooth-convex` / `bubble` 三种类型，默认为 `round-convex` 类型。`round-convex` 为圆角凸包轮廓，smooth-convex 为平滑曲线凸包轮廓，这两种凸包轮廓不可绕开配置项中的 nonMembers；bubble 为自由凹包轮廓，可以绕开 nonMembers。配置项（ HullCfg）支持的配置参数详情如下：\n\n| 名称       | 类型                                        | 是否必选 | 描述                                                                                                                                                                                                                          |\n| ---------- | ------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| id         | string                                      | true     | 包裹的 id                                                                                                                                                                                                                     |\n| type       | `round-convex` / `smooth-convex` / `bubble` | false    | 包裹的类型：`round-convex` 生成圆角凸包轮廓，`smooth-convex` 生成平滑凸包轮廓 / `bubble` 产生一种可以避开 nonMembers 的平滑凹包轮廓（[算法](http://vialab.science.uoit.ca/portfolio/bubblesets)）。 默认值是 `round-convex`。 |\n| members    | Item[] / string[]                           | true     | 在包裹内部的节点实例或节点 Id 数组                                                                                                                                                                                            |\n| nonMembers | Item[] / string[]                           | false    | 不在轮廓内部的节点数组，只在 `bubble` 类型的包裹中生效                                                                                                                                                                        |\n| padding    | number                                      | false    | 轮廓边缘和内部成员的间距                                                                                                                                                                                                      |\n| style      | object                                      | false    | 轮廓的样式属性，属性包括 fill (填充颜色), stroke (描边颜色), opacity (透明度)                                                                                                                                                 |\n\n**用法**\n\n```javascript\nlet centerNodes = graph.getNodes().filter((node) => !node.getModel().isLeaf);\ngraph.on(\"afterlayout\", () => {\n  const hull1 = graph.createHull({\n    id: \"centerNode-hull\",\n    type: \"bubble\",\n    members: centerNodes,\n    padding: 10,\n  });\n\n  const hull2 = graph.createHull({\n    id: \"leafNode-hull1\",\n    members: [\"node6\", \"node7\"],\n    padding: 10,\n    style: {\n      fill: \"lightgreen\",\n      stroke: \"green\",\n    },\n  });\n\n  const hull3 = graph.createHull({\n    id: \"leafNode-hull2\",\n    members: [\"node8\", \"node9\", \"node10\", \"node11\", \"node12\"],\n    padding: 10,\n    style: {\n      fill: \"lightgreen\",\n      stroke: \"green\",\n    },\n  });\n\n  graph.on(\"afterupdateitem\", (e) => {\n    hull1.updateData(hull1.members);\n    hull2.updateData(hull2.members);\n    hull3.updateData(hull3.members);\n  });\n});\n```\n\n## getHulls()\n\n获取图上所有的包裹轮廓。\n\n**返回值**\n\n- 返回值类型：Object；对象中的 key 是字符串类型，代表 hull 的 ID ，对象中的 value 是对应的 hull 实例。\n- 返回值表示当前 graph 中所有轮廓 ID 到 轮廓实例的映射。\n\n**用法**\n\n```javascript\nconst hullMap = graph.getHulls();\n```\n\n## removeHull(hull: string ｜ Hull)\n\n移除指定 id 或指定实例的轮廓。\n\n**参数**\n\n| 名称 | 类型          | 是否必选 | 描述               |\n| ---- | ------------- | -------- | ------------------ |\n| hull | string / Hull | true     | 轮廓 id 或轮廓实例 |\n\n**用法**\n\n```javascript\ngraph.removeHull(\"myHull\");\n```\n\n## removeHulls()\n\n移除当前图上所有轮廓实例。\n\n**参数**\n\n无参数。\n\n**用法**\n\n```javascript\ngraph.removeHulls();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/item.zh.md",
    "content": "---\ntitle: 元素操作\norder: 4\n---\n\n## 增删\n\n### graph.addItem(type, model, stack)\n\n新增元素（节点和边）。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意: </strong></span>将会直接使用 `model` 对象作为新增元素的数据模型，F6 内部可能会对其增加或修改一些必要的字段。若不希望原始参数被修改，建议在使用深拷贝后的 `model`。\n\n**参数**\n\n| 名称  | 类型    | 是否必选 | 描述                                                                                                                                                                    |\n| ----- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| type  | string  | true     | 元素类型，可选值为 `'node'`、`'edge'`                                                                                                                                   |\n| model | Object  | true     | 元素的数据模型，具体内容参见[元素配置项](/zh/docs/api/Items/itemProperties)。                                                                                           |\n| stack | boolean | false    | 操作是否入 undo & redo 栈，当实例化 Graph 时设置 enableStack 为 true 时，默认情况下会自动入栈，入栈以后，就支持 undo & redo 操作，如果不需要，则设置该参数为 false 即可 |\n\n**用法**\n\n```javascript\nconst model = {\n  id: \"node\",\n  label: \"node\",\n  address: \"cq\",\n  x: 200,\n  y: 150,\n  style: {\n    fill: \"blue\",\n  },\n};\n\ngraph.addItem(\"node\", model);\n```\n\n### graph.removeItem(item, stack)\n\n删除元素，当 item 为 group ID 时候，则删除分组。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                                                                                                                                                                    |\n| ----- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| item  | string / Object | true     | 元素 ID 或元素实例                                                                                                                                                      |\n| stack | boolean         | false    | 操作是否入 undo & redo 栈，当实例化 Graph 时设置 enableStack 为 true 时，默认情况下会自动入栈，入栈以后，就支持 undo & redo 操作，如果不需要，则设置该参数为 false 即可 |\n\n**用法**\n\n```javascript\n// 通过 ID 查询节点实例\nconst item = graph.findById(\"node\");\ngraph.removeItem(item);\n\n// 该操作不会进入到 undo & redo 栈，即 redo & undo 操作会忽略该操作\ngraph.removeItem(item, false);\n```\n\n## 更新\n\n### graph.updateItem(item, model, stack)\n\n更新元素，包括更新数据、样式等。若图上有 combo，使用该函数更新一个节点位置后，需要调用 [updateCombo(combo)](/zh/docs/api/Graph#updatecombocombo) 以更新相关 combo 的位置。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                                                                                                                                                                    |\n| ----- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| item  | string / Object | true     | 元素 ID 或元素实例                                                                                                                                                      |\n| model | Object          | true     | 需要更新的数据模型，具体内容参见[元素配置项](/zh/docs/api/Items/itemProperties)                                                                                         |\n| stack | boolean         | false    | 操作是否入 undo & redo 栈，当实例化 Graph 时设置 enableStack 为 true 时，默认情况下会自动入栈，入栈以后，就支持 undo & redo 操作，如果不需要，则设置该参数为 false 即可 |\n\n**用法**\n\n```javascript\nconst model = {\n  id: \"node\",\n  label: \"node\",\n  address: \"cq\",\n  x: 200,\n  y: 150,\n  style: {\n    fill: \"blue\",\n  },\n};\n\n// 通过 ID 查询节点实例\nconst item = graph.findById(\"node\");\ngraph.updateItem(item, model);\n```\n\n### graph.refreshItem(item)\n\n刷新指定元素。\n\n**参数**\n\n| 名称 | 类型            | 是否必选 | 描述               |\n| ---- | --------------- | -------- | ------------------ |\n| item | string / Object | true     | 元素 ID 或元素实例 |\n\n**用法**\n\n```javascript\n// 通过 ID 查询节点实例\nconst item = graph.findById(\"node\");\ngraph.refreshItem(item);\n```\n\n### graph.refreshPositions()\n\n当节点位置发生变化时，刷新所有节点位置，并重计算边的位置。\n\n该方法无参数。\n\n**用法**\n\n```javascript\ngraph.refreshPositions();\n```\n\n### graph.updateCombos()\n\n根据子元素（子节点与子 combo）的 bbox 更新所有 combos 的绘制，包括 combos 的位置和范围。\n\n**用法**\n\n```javascript\n// 更新所有 combos\ngraph.updateCombos();\n```\n\n### graph.updateCombo(combo)\n\n仅更新 combo 及其所有祖先 combo。建议在使用 graph.updateItem 来更新节点位置时，调用该方法以更新节点的祖先 combos。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                   |\n| ----- | --------------- | -------- | ---------------------- |\n| combo | string / ICombo | true     | Combo ID 或 Combo 实例 |\n\n**用法**\n\n```javascript\n// 更新了某个节点的位置\nconst node1 = graph.findById(\"node1\");\ngraph.updateItem(node1, {\n  x: 100,\n  y: 100,\n});\nconst comboId = node1.getModel().comboId;\n\n// 更新 node1 所属的 combo 及其所有祖先 combo 的大小和位置\ngraph.updateCombo(comboId);\n```\n\n### graph.updateComboTree(item, parentId)\n\n更新 Combo 结构，例如移动子树等。\n\n**参数**\n\n| 名称     | 类型                    | 是否必选 | 描述                                        |\n| -------- | ----------------------- | -------- | ------------------------------------------- |\n| item     | string / INode / ICombo | true     | 需要被更新的 Combo 或 节点 ID               |\n| parentId | string / undefined      | false    | 新的父 combo ID，undefined 代表没有父 combo |\n\n**用法**\n\n```\n// 将 combo1 从父 combo 中移出，完成后同原父 combo 平级\ngraph.updateComboTree('combo1')\n\n// 将 combo1 移动到 Combo2 下面，作为 Combo2 的子元素\ngraph.updateComboTree('combo1', 'combo2')\n```\n\n## 配置\n\n### graph.node(nodeFn)\n\n设置各个节点样式及其他配置，以及在各个状态下节点的 KeyShape 的样式。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>提示:</strong></span> 该方法必须**在 render 之前调用**，否则不起作用。\n\n**参数**\n\n| 名称   | 类型     | 是否必选 | 描述               |\n| ------ | -------- | -------- | ------------------ |\n| nodeFn | Function | true     | 返回每个节点的配置 |\n\n**用法**\n\n```javascript\ngraph.node((node) => {\n  return {\n    id: node.id,\n    type: \"rect\",\n    style: {\n      fill: \"blue\",\n    },\n  };\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n### graph.edge(edgeFn)\n\n设置各个边样式及其他配置，以及在各个状态下节点的 KeyShape 的样式。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>提示:</strong></span> 该方法必须**在 render 之前调用**，否则不起作用。\n\n**参数**\n\n| 名称   | 类型     | 是否必选 | 描述             |\n| ------ | -------- | -------- | ---------------- |\n| edgeFn | Function | true     | 返回每条边的配置 |\n\n**用法**\n\n```javascript\ngraph.edge((edge) => {\n  return {\n    id: edge.id,\n    type: \"cubic-horizontal\",\n    style: {\n      stroke: \"green\",\n    },\n  };\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n### graph.combo(comboFn)\n\n设置各个 combo 样式及其他配置，以及在各个状态下节点的 KeyShape 的样式。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>提示:</strong></span> 该方法必须**在 render 之前调用**，否则不起作用。\n\n**参数**\n\n| 名称    | 类型     | 是否必选 | 描述                  |\n| ------- | -------- | -------- | --------------------- |\n| comboFn | Function | true     | 返回每个 combo 的配置 |\n\n**用法**\n\n```javascript\ngraph.combo((combo) => {\n  return {\n    id: combo.id,\n    type: \"rect\",\n    style: {\n      stroke: \"green\",\n    },\n  };\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n## 显示/隐藏\n\n### graph.showItem(item, stack)\n\n显示指定的元素。若 item 为节点，则相关边也会随之显示。而 [item.show()](/zh/docs/api/Items/itemMethods#itemshow) 则将只显示自身。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                                                                                                                                                                    |\n| ----- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| item  | string / Object | true     | 元素 ID 或元素实例                                                                                                                                                      |\n| stack | boolean         | false    | 操作是否入 undo & redo 栈，当实例化 Graph 时设置 enableStack 为 true 时，默认情况下会自动入栈，入栈以后，就支持 undo & redo 操作，如果不需要，则设置该参数为 false 即可 |\n\n**用法**\n\n```javascript\n// 通过 ID 查询节点实例\nconst item = graph.findById(\"nodeId\");\ngraph.showItem(item);\n\n// 等价于\ngraph.showItem(\"nodeId\");\n```\n\n### graph.hideItem(item, stack)\n\n隐藏指定元素。若 item 为节点，则相关边也会随之隐藏。而 [item.hide()](/zh/docs/api/Items/itemMethods#itemhide) 则将只隐藏自身。\n\n**参数**\n\n| 名称  | 类型            | 是否必选 | 描述                                                                                                                                                                    |\n| ----- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| item  | string / Object | true     | 元素 ID 或元素实例                                                                                                                                                      |\n| stack | boolean         | false    | 操作是否入 undo & redo 栈，当实例化 Graph 时设置 enableStack 为 true 时，默认情况下会自动入栈，入栈以后，就支持 undo & redo 操作，如果不需要，则设置该参数为 false 即可 |\n\n**用法**\n\n```javascript\n// 通过 ID 查询节点实例\nconst item = graph.findById(\"nodeId\");\ngraph.hideItem(item);\n\n// 等价于\ngraph.hideItem(\"nodeId\");\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/layout.zh.md",
    "content": "---\ntitle: 布局\norder: 10\n---\n\nF6 内置了丰富的布局。关于如何使用 F6 中内置的布局，请参考  [图布局 API](/zh/docs/api/graphLayout/guide) 或 [树图布局 API](/zh/docs/api/treeGraphLayout/guide)。\n\n### graph.layout()\n\n重新以当前配置的属性进行一次布局。\n\n**用法**\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'force',\n  },\n  modes: {\n    default: ['drag-node'],\n  },\n});\n\ngraph.data({\n  nodes: data.nodes,\n  edges: data.edges.map((edge, i) => {\n    edge.id = 'edge' + i;\n    return Object.assign({}, edge);\n  }),\n});\n\ngraph.render();\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get('model');\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\ngraph.on('node:dragstart', (e) => {\n  // 拖动节点时重新布局\n  graph.layout();\n  refreshDragedNodePosition(e);\n});\n\ngraph.on('node:drag', (e) => {\n  refreshDragedNodePosition(e);\n});\n\ngraph.on('node:dragend', (e) => {\n  e.item.get('model').fx = null;\n  e.item.get('model').fy = null;\n});\n```\n\n### graph.updateLayout(cfg)\n\n更新布局配置项。\n\n1. 如果参数 `cfg` 中含有 `type` 字段，`type` 字段类型为 String，且与现有布局方法不同，则更换布局；\n1. 如果参数 `cfg` 中不包含 `type` 字段，则保持原有布局，仅更新布局配置项。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述         |\n| ---- | ------ | -------- | ------------ |\n| cfg  | Object | true     | 新布局配置项 |\n\n**用法**\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  modes: {\n    default: ['drag-canvas', 'drag-node'],\n  },\n  layout: {\n    type: 'circular',\n    center: [500, 300],\n  },\n  animate: true,\n});\ngraph.data(data);\ngraph.render();\n\n// 实例化时通过 layout 指定布局，在合适的时候通过 updateLayout 更新布局配置\ngraph.updateLayout({\n  radius: 200,\n  startAngle: Math.PI / 4,\n  endAngle: Math.PI,\n  divisions: 5,\n  ordering: 'degree',\n});\n```\n\n### destroyLayout()\n\n销毁布局方法，在此之后调用 `changeData` 等方法将不会按照原有的布局算法进行布局。\n\n**用法**\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  modes: {\n    default: ['drag-canvas', 'drag-node'],\n  },\n  layout: {\n    type: 'circular',\n    center: [500, 300],\n  },\n  animate: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.destroyLayout();\n// 此时 changeData，若 data2 中的节点没有位置信息，将按照初始化计算方法被放置；若有位置信息，则按照该信息被放置\ngraph.changeData(data2);\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/mode.zh.md",
    "content": "---\ntitle: 行为模式\norder: 8\n---\n\n### graph.setMode(mode)\n\n切换图行为模式。主要用于不同模式下的行为切换，如从编辑模式下切换到只读模式。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述       |\n| ---- | ------ | -------- | ---------- |\n| mode | string | true     | 模式的名称 |\n\n**用法**\n\n```javascript\nconst graph = new F6.Graph({\n    container: div,\n    width: 500,\n    height: 500,\n    modes: {\n      default: [...],\n      custom: [...]\n    }\n})\n\ngraph.setMode('custom')\n```\n\n### graph.getCurrentMode()\n\n获取当前的行为模式。\n\n该方法无参数。\n\n**返回值**\n\n- 返回值类型：String；\n- 返回值表示当前的行为模式。\n\n**用法**\n\n```javascript\n// 返回值 mode 表示当前的行为模式\nconst mode = graph.getCurrentMode();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/on_off.zh.md",
    "content": "---\ntitle: 事件绑定/解绑\norder: 9\n---\n\n### graph.on(eventName, handler)\n\n为图绑定事件监听。\n\n**参数**\n\n| 名称      | 类型     | 是否必选 | 描述                                               |\n| --------- | -------- | -------- | -------------------------------------------------- |\n| eventName | string   | true     | 事件名，可选事件名参见 [Event](/zh/docs/api/Event) |\n| handler   | Function | true     | 监听函数                                           |\n\n这里对 `handler` 的参数 `evt` 中 `item` 和 `target` 参数进行解释：\n\n| 名称   | 类型     | 是否必选 | 描述                                                               |\n| ------ | -------- | -------- | ------------------------------------------------------------------ |\n| item   | string   | true     | 被操作的 item                                                      |\n| target | Function | true     | 被操作的具体[图形](/zh/docs/manual/middle/elements/shape-keyshape) |\n\n**用法**\n\n```javascript\n// 为图上的所有节点绑定点击监听\ngraph.on(\"node:tap\", (evt) => {\n  const item = evt.item; // 被操作的节点 item\n  const target = evt.target; // 被操作的具体图形\n  // ...\n});\n\n// 为画布绑定点击监听\ngraph.on(\"click\", (evt) => {\n  // ...\n});\n```\n\n### graph.off(eventName, handler)\n\n为图解除指定的事件监听。\n\n**参数**\n\n| 名称      | 类型     | 是否必选 | 描述                                               |\n| --------- | -------- | -------- | -------------------------------------------------- |\n| eventName | string   | true     | 事件名，可选事件名参见 [Event](/zh/docs/api/Event) |\n| handler   | Function | true     | 监听函数                                           |\n\n这里对 `handler` 的参数 `evt` 中 `item` 和 `target` 同 [`graph.on(eventName, handler)`](#oneventname-handler)。该 `handler` 必须与绑定该事件的 `handler` 是同一对象。\n\n**用法**\n\n```javascript\n// 监听函数\nconst fn = (evt) => {\n  const item = evt.item; // 被操作的节点 item\n  const target = evt.target; // 被操作的具体图形\n  // ...\n};\n// 为图上的所有节点绑定点击监听\ngraph.on(\"node:tap\", fn);\n\n// 解除上面的点击监听事件，注意 fn 必须是同一个对象\ngraph.off(\"node:tap\", fn);\n```\n\n### graph.off(eventName)\n\n为图解除某事件的所有监听。\n\n**参数**\n\n| 名称      | 类型   | 是否必选 | 描述                                               |\n| --------- | ------ | -------- | -------------------------------------------------- |\n| eventName | string | true     | 事件名，可选事件名参见 [Event](/zh/docs/api/Event) |\n\n**用法**\n\n```javascript\n// 监听函数\nconst fn1 = (evt) => {\n  const item = evt.item; // 被操作的节点 item\n  const target = evt.target; // 被操作的具体图形\n  // ...\n};\nconst fn2 = (evt) => {\n  // ...\n};\n// 为图上的所有节点绑定点击监听\ngraph.on(\"node:tap\", fn1);\ngraph.on(\"node:tap\", fn2);\n\n// 解除上面的所有节点点击监听事件\ngraph.off(\"node:tap\");\n```\n\n### graph.off()\n\n为图解除所有监听。该函数无参数。\n\n**用法**\n\n```javascript\n// 监听函数\nconst fn1 = (evt) => {\n  // ...\n};\nconst fn2 = (evt) => {\n  // ...\n};\n// 为图上的所有节点绑定点击监听\ngraph.on(\"node:tap\", fn1);\ngraph.on(\"afteranimate\", fn2);\n\n// 解除图上所有监听事件\ngraph.off();\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/render.zh.md",
    "content": "---\ntitle: 渲染与更新\norder: 1\n---\n\n### graph.render()\n\n根据提供的数据渲染视图。\n\n**用法**\n\n```javascript\ngraph.render();\n```\n\n### graph.refresh()\n\n当源数据中**现有**节点/边/ Combo 的数据项发生配置的变更时，根据新数据刷新视图。\n\n注意：节点/边/ Combo 数据的增删需要使用 [graph.addItem](./Graph#additemtype-model) / [graph.removeItem](./Graph#removeitemitem) 或 [graph.changeData](./Graph#changedatadata)。\n\n该方法无参数。\n\n**用法**\n\n```javascript\ngraph.refresh();\n```\n\n### graph.paint()\n\n仅重新绘制画布。当设置了元素样式或状态后，通过调用 `paint()` 方法，让修改生效。\n\n该方法无参数。\n\n**用法**\n\n```javascript\nconst item = e.item;\nconst graph = this.graph;\n\nconst autoPaint = graph.get(\"autoPaint\");\ngraph.setAutoPaint(false);\n\ngraph.setItemState(item, \"selected\", true);\n\ngraph.paint();\ngraph.setAutoPaint(autoPaint);\n```\n\n### graph.setAutoPaint(auto)\n\n设置是否在更新/删除后自动重绘，一般搭配 `paint()` 方法使用。\n\n**参数**\n\n| 名称 | 类型    | 是否必选 | 描述         |\n| ---- | ------- | -------- | ------------ |\n| auto | Boolean | true     | 是否自动重绘 |\n\n**用法**\n\n```javascript\nconst item = e.item;\nconst graph = this.graph;\n\nconst autoPaint = graph.get(\"autoPaint\");\ngraph.setAutoPaint(false);\n\ngraph.setItemState(item, \"selected\", true);\n\ngraph.paint();\ngraph.setAutoPaint(autoPaint);\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/stack.zh.md",
    "content": "---\ntitle: 操作栈\norder: 13\n---\n\n## pushStack(action, data, stackType)\n\n入栈操作。\n\n实现 undo 功能，可参考[这里](https://github.com/antvis/F6/blob/master/packages/plugin/src/toolBar/index.ts#L208)\n\n实现 redo 功能，可参考[这里](https://github.com/antvis/F6/blob/master/packages/plugin/src/toolBar/index.ts#L295)\n\n**参数**\n\n| 名称      | 类型            | 是否必选 | 描述                      |\n| --------- | --------------- | -------- | ------------------------- |\n| action    | string          | false    | 操作类型，默认值为 update |\n| data      | unknown         | false    | 入栈的数据                |\n| stackType | 'redo' / 'undo' | false    | 入栈类型，默认为 undo     |\n\n## getUndoStack()\n\n获取 undo 栈。\n\n## getRedoStack()\n\n获取 redo 栈。\n\n## getStackData()\n\n获取栈中的数据。\n\n返回值类型为：\n\n```\n{\n  undoStack: StackData[];\n  redoStack: StackData[];\n};\n```\n\n## clearStack()\n\n清空栈中的数据。\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/state.zh.md",
    "content": "---\ntitle: 元素状态\norder: 7\n---\n\n### graph.setItemState(item, state, value)\n\n设置元素状态。支持单个状态多值的情况，详情参考 [F6 状态管理最佳实践](/zh/docs/manual/middle/states/state-new)。\n\n该方法在执行过程中会触发 `beforitemstatechange`，`afteritemstatechange` 事件。\n\n**参数**\n\n| 名称  | 类型             | 是否必选 | 描述                                                 |\n| ----- | ---------------- | -------- | ---------------------------------------------------- |\n| item  | string / Item    | true     | 元素 ID 或元素实例                                   |\n| state | string           | true     | 状态值，支持自定义，如 selected、hover、actived 等。 |\n| value | Boolean / string | true     | 是否启用状态                                         |\n\n**用法**\n\n```javascript\n// 布尔状态 'selected'\ngraph.setItemState(\"node1\", \"selected\", true);\n\n// 多值状态 'body'\ngraph.setItemState(\"node1\", \"body\", \"health\");\ngraph.setItemState(\"node2\", \"body\", \"ill\");\n```\n\n### graph.clearItemStates(item, states)\n\n清除元素状态，可以一次性清除多个状态。\n\n**参数**\n\n| 名称   | 类型                  | 是否必选 | 描述                                     |\n| ------ | --------------------- | -------- | ---------------------------------------- |\n| item   | string / Object       | true     | 元素 ID 或元素实例                       |\n| states | string / Array / null | false    | 取值可以是单个状态值，也可以是状态值数组 |\n\n**用法**\n\n```javascript\n// 清除单个状态\ngraph.clearItemStates(node, \"a\");\n\n// 清除多个状态\ngraph.clearItemStates(node, [\"a\", \"b\"]);\n\n// 清除所有\ngraph.clearItemStates(node);\n```\n\n### graph.priorityState(item, state)\n\n将指定状态的优先级提升为最高优先级。\n\n**参数**\n\n| 名称   | 类型            | 是否必选 | 描述               |\n| ------ | --------------- | -------- | ------------------ |\n| item   | string / Object | true     | 元素 ID 或元素实例 |\n| states | string          | true     | 状态名称           |\n\n**用法**\n\n```javascript\n// 将 node 的 a 状态调整为优先级最高\ngraph.priorityState(node, \"a\");\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/transform.zh.md",
    "content": "---\ntitle: 视口操作\norder: 3\n---\n\n### graph.getZoom()\n\n获取当前视口的缩放比例。\n\n该方法无参数。\n\n**返回值**\n\n- 返回值类型：Number；\n- 返回值表示当前视口的缩放比例， 默认值为 `1`。\n\n**用法**\n\n```javascript\n// 返回值zoom表示当前视口的缩放比例\nconst zoom = graph.getZoom();\n```\n\n### graph.zoom(ratio, center)\n\n改变视口的缩放比例，在当前画布比例下缩放，是相对比例。\n\n**参数**\n\n| 名称   | 类型   | 是否必选 | 描述                                                                                         |\n| ------ | ------ | -------- | -------------------------------------------------------------------------------------------- |\n| ratio  | Number | true     | 缩放比例                                                                                     |\n| center | Object | false    | 以 `center` 的 `x`、`y` 坐标为中心缩放，如果省略了 `center` 参数，则以元素当前位置为中心缩放 |\n\n**用法**\n\n```javascript\n// 以 (100, 100) 为中心点，放大3倍\ngraph.zoom(3, { x: 100, y: 100 });\n\n// 以当前元素位置为中心，缩小到 0.5\ngraph.zoom(0.5);\n```\n\n### graph.zoomTo(toRatio, center)\n\n缩放视窗窗口到一个固定比例。\n\n**参数**\n\n| 名称    | 类型   | 是否必选 | 描述                                                                                         |\n| ------- | ------ | -------- | -------------------------------------------------------------------------------------------- |\n| toRatio | Number | true     | 固定比例值                                                                                   |\n| center  | Object | false    | 以 `center` 的 `x`、`y` 坐标为中心缩放，如果省略了 `center` 参数，则以元素当前位置为中心缩放 |\n\n**用法**\n\n```javascript\n// 以 (100, 100) 为中心点，放大3倍\ngraph.zoomTo(3, { x: 100, y: 100 });\n\n// 以当前元素位置为中心，缩小到 0.5\ngraph.zoomTo(0.5);\n```\n\n### graph.changeSize(width, height)\n\n改变画布大小。\n\n**参数**\n\n| 名称   | 类型   | 是否必选 | 描述     |\n| ------ | ------ | -------- | -------- |\n| width  | Number | true     | 画布宽度 |\n| height | Number | true     | 画布高度 |\n\n**用法**\n\n```javascript\ngraph.changeSize(600, 350);\n```\n\n### graph.translate(dx, dy)\n\n采用**相对位移**来平移画布。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述         |\n| ---- | ------ | -------- | ------------ |\n| dx   | Number | true     | 水平方向位移 |\n| dy   | Number | true     | 垂直方向位移 |\n\n**用法**\n\n```javascript\ngraph.translate(100, 100);\n```\n\n### graph.moveTo(x, y)\n\n采用**绝对位移**将画布移动到指定坐标。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述         |\n| ---- | ------ | -------- | ------------ |\n| x    | Number | true     | 水平方向坐标 |\n| y    | Number | true     | 垂直方向坐标 |\n\n**用法**\n\n```javascript\ngraph.moveTo(200, 300);\n```\n\n### graph.fitView(padding)\n\n让画布内容适应视口。\n\n**参数**\n\n| 名称    | 类型           | 是否必选 | 描述                                          |\n| ------- | -------------- | -------- | --------------------------------------------- |\n| padding | Number / Array | false    | [top, right, bottom, left] 四个方向上的间距值 |\n\n**用法**\n\n```javascript\n// padding 只设置为一个值，则表示 top = right = bottom = left = 20\ngraph.fitView(20);\n\n// 等价于 graph.fitView(20)\ngraph.fitView([20]);\n\n// padding 设置为数组，只传 2 个值，则 top = bottom = 20, right = left = 10\ngraph.fitView([20, 10]);\n\n// padding 设置为数组，四个方向值都指定\ngraph.fitView([20, 10, 20, 15]);\n```\n\n### graph.fitCenter()\n\n平移图到中心将对齐到画布中心，但不缩放。优先级低于 fitView。\n\n**用法**\n\n```javascript\n// 在渲染和动画完成后调用\ngraph.fitCenter();\n```\n\n### graph.focusItem(item, animate, animateCfg)\n\n移动图，使得 item 对齐到视口中心，该方法可用于做搜索后的缓动动画。\n\n**参数**\n\n| 名称       | 类型            | 是否必选 | 描述                                                                                                                                   |\n| ---------- | --------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n| item       | string / Object | true     | 元素 ID 或元素实例                                                                                                                     |\n| animate    | boolean         | false    | 是否带有动画。若未配置，则跟随 graph 的 `animate` 参数                                                                                 |\n| animateCfg | Object          | false    | 若带有动画，可配置动画，参见[基础动画教程](/zh/docs/manual/advanced/animation#animatecfg)。若未配置，则跟随 graph 的 `animateCfg` 参数 |\n\n**用法**\n\n```javascript\ngraph.focusItem(item);\n\n// 动画地移动\ngraph.focusItem(item, true);\n\n// 动画地移动，并配置动画\ngraph.focusItem(item, true, {\n  easing: \"easeCubic\",\n  duration: 400,\n});\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphFunc/watermarker.zh.md",
    "content": "---\ntitle: 增加水印\norder: 16\n---\n\n### graph.setTextWaterMarker(texts, config)\n\n为画布添加文字水印。注意，使用 `downloadImage` 或 `downloadFullImage` 下载图片将不会带有水印。\n\n**参数**\n\n| 名称   | 类型     | 是否必选 | 描述                                     |\n| ------ | -------- | -------- | ---------------------------------------- |\n| texts  | String[] | true     | 水印文字内容数组，数组中的不同项将会换行 |\n| config | Object   | false    | 文字水印配置项，可选，具体字段见下方     |\n\n其中，config 为文字水印配置项，具体字段：\n\n| 名称       | 类型    | 是否必选 | 描述                                                                                                                                                                    |\n| ---------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| width      | Number  | false    | 单个水印的宽，可控制单个水印之间的水平间距，默认 `150`                                                                                                                  |\n| height     | Number  | false    | 单个水印的高，可控制单个水印之间的竖直间距，默认 `100`                                                                                                                  |\n| compatible | Boolean | false    | 是否需要兼容不支持 `pointer-events` 属性的浏览器，默认为 `false`                                                                                                        |\n| text       | Object  | false    | 文本图形的样式属性，默认为：`{ x: 0, y: 60, lineHeight: 20, rotate: 20, fontSize: 14, fontFamily: 'Microsoft YaHei', fill: 'rgba(0, 0, 0, 0.1)', baseline: 'Middle', }` |\n\n**用法**\n\n```javascript\ngraph.setTextWaterMarker([\"AntV\", \"F6\"]);\n```\n\n### graph.setImageWaterMarker(imgURL, config)\n\n为画布添加图片水印。注意，使用 `downloadImage` 或 `downloadFullImage` 下载图片将不会带有水印。\n\n**参数**\n\n| 名称   | 类型     | 是否必选 | 描述                                                                                                 |\n| ------ | -------- | -------- | ---------------------------------------------------------------------------------------------------- |\n| imgURL | String[] | true     | 水印图片，默认为 'https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg' |\n| config | Object   | false    | 图片水印配置项，可选，具体字段见下方                                                                 |\n\n其中，config 为图片水印配置项，具体字段：\n\n| 名称       | 类型    | 是否必选 | 描述                                                                           |\n| ---------- | ------- | -------- | ------------------------------------------------------------------------------ |\n| width      | Number  | false    | 单个水印的宽，可控制单个水印之间的水平间距，默认 `150`                         |\n| height     | Number  | false    | 单个水印的高，可控制单个水印之间的竖直间距，默认 `130`                         |\n| compatible | Boolean | false    | 是否需要兼容不支持 `pointer-events` 属性的浏览器，默认为 `false`               |\n| image      | Object  | false    | 图片图形的样式属性，默认为：`{ x: 0, y: 0, width: 30, height: 20, rotate: 0 }` |\n\n**用法**\n\n```javascript\ngraph.setImageWaterMarker(\n  \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n  {\n    width: 300,\n    height: 200,\n    image: { rotate: Math.PI / 3 },\n  },\n);\n```\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/circular.zh.md",
    "content": "---\ntitle: 环形 Circular\norder: 4\n---\n\nCircular 布局将所有节点布局在一个圆环上，可以选择节点在圆环上的排列顺序。可以通过参数的配置扩展出环的分组布局、螺旋形布局等。原文链接： <a href='https://www.sciencedirect.com/science/article/pii/S1570866705000031' target='_blank'>A framework and algorithms for circular drawings of graphs</a>。\n\n<br />\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-3idTK1xa6wAAAAAAAAAAABkARQnAQ' width=270 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*_nLORItzM5QAAAAAAAAAAABkARQnAQ' width=270 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6J6BRIjmXKAAAAAAAAAAAABkARQnAQ' width=270 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'circular',\n    center: [200, 200], // 可选，默认为图的中心\n    radius: null, // 可选\n    startRadius: 10, // 可选\n    endRadius: 100, // 可选\n    clockwise: false, // 可选\n    divisions: 5, // 可选\n    ordering: 'degree', // 可选\n    angleRatio: 1, // 可选\n  },\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.radius\n\n**类型**： Number<br />**默认值**：null<br />**是否必须**：false<br />**说明**：圆的半径。若设置了 radius，则 startRadius 与 endRadius 不生效\n\n## layoutCfg.startRadius\n\n**类型**： Number<br />**默认值**：null<br />**是否必须**：false<br />**说明**：螺旋状布局的起始半径\n\n## layoutCfg.endRadius\n\n**类型**：Number<br />**默认值**：null<br />**是否必须**：false<br />**说明**：螺旋状布局的结束半径\n\n## layoutCfg.clockwise\n\n**类型**：Boolean<br />**默认值**：true<br />**是否必须**：false<br />**说明**：是否顺时针排列\n\n## layoutCfg.divisions\n\n**类型**：Number<br />**默认值**：1<br />**是否必须**：false<br />**说明**：节点在环上的分段数（几个段将均匀分布），在 endRadius - startRadius != 0 时生效\n\n## layoutCfg.ordering\n\n**类型**：String<br />**默认值**：false<br />**可选值**：null | 'topology' | 'degree'<br />**是否必须**：false<br />**说明**：节点在环上排序的依据。默认 null 代表直接使用数据中的顺序。'topology' 按照拓扑排序。'degree' 按照度数大小排序\n\n## layoutCfg.angleRatio\n\n**类型**： Number<br />**默认值**：1<br />**是否必须**：false<br />**说明**：从第一个节点到最后节点之间相隔多少个 2\\*PI\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互。\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/comboForce.zh.md",
    "content": "---\ntitle: Combo 力导向 ComboForce\norder: 11\n---\n\nComboForce 是基于力导向的专用于带有 combo 的图的布局算法。通过自研改造经典力导向算法，将根据节点的 combo 信息，施加不同的力以达到同 combo 节点尽可能聚集，不同 combo 之间尽可能无重叠的布局。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AngFRpOo4SAAAAAAAAAAAABkARQnAQ' width=650 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  groupByTypes: false, // 若希望在带有 combo 的图上，节点、边、combo 的层级符合常规逻辑，需要将 groupByTypes 设置为 false\n  layout: {\n    type: 'comboForce',\n    center: [ 200, 200 ],     // 可选，默认为图的中心\n    linkDistance: 50,         // 可选，边长\n    nodeStrength: 30,         // 可选\n    edgeStrength: 0.1,        // 可选\n    onTick: () => {           // 可选\n      console.log('ticking');\n    },\n    onLayoutEnd: () => {      // 可选\n      console.log('combo force layout done');\n    }\n  }\n);\n```\n\n### layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n### layoutCfg.maxIteration\n\n**类型**： Number<br />**默认值**：100<br />**是否必须**：false<br />**说明**：最大迭代次数\n\n### layoutCfg.linkDistance\n\n**类型**： Number / Function<br />**默认值**：10<br />**是否必须**：false<br />**说明**：边长度\n\n### layoutCfg.nodeStrength\n\n**类型**： Number / Function<br />**默认值**：30<br />**是否必须**：false<br />**说明**：节点作用力\n\n### layoutCfg.edgeStrength\n\n**类型**：Number / Function<br />**默认值**：0.2<br />**是否必须**：false<br />**说明**：边的作用力\n\n### layoutCfg.preventOverlap\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止节点之间以及 combo 之间的重叠，若开启，则 `preventNodeOverlap` 与 `preventComboOverlap` 将均被开启。详见 `preventNodeOverlap` 与 `preventComboOverlap` 介绍\n\n### layoutCfg.preventNodeOverlap\n\n**类型**：Boolean<br />**默认值**：true<br />**是否必须**：false<br />**说明**：是否防止节点之间的重叠。必须配合下面属性 `nodeSize` 或节点数据中的 `size` 属性，只有在数据中设置了 `size` 或在该布局中配置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测\n\n### layoutCfg.preventComboOverlap\n\n**类型**：Boolean<br />**默认值**：true<br />**是否必须**：false<br />**说明**：是否防止 combo 之间的重叠\n\n### layoutCfg.collideStrength\n\n**类型**：Number<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：统一设置防止节点之间以及 combo 之间重叠的力强度，范围 [0, 1]。若 `collideStrength` 不为 `undefined`，则 `nodeCollideStrength` 与 `comboCollideStrength` 将均被设置为统一的值\n\n### layoutCfg.nodeCollideStrength\n\n**类型**：Number<br />**默认值**：0.5<br />**是否必须**：false<br />**说明**：设置防止节点之间重叠的力强度，范围 [0, 1]\n\n### layoutCfg.comboCollideStrength\n\n**类型**：Number<br />**默认值**：0.5<br />**是否必须**：false<br />**说明**：防止 combo 之间重叠的力强度，范围 [0, 1]\n\n### layoutCfg.nodeSize\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：节点大小（直径）。用于碰撞检测。若不指定，则根据传入的节点的 size 属性计算。若即不指定，节点中也没有 `size`，则默认大小为 `10`\n\n### layoutCfg.nodeSpacing\n\n**类型**: Number / Function<br />**默认值**: 0<br />**是否必须**: false <br />**示例**: Example 1: 10 <br />Example 2:\n\n```javascript\n(d) => {\n  // d is a node\n  if (d.id === \"node1\") {\n    return 100;\n  }\n  return 10;\n};\n```\n\n<br />**描述**: `preventNodeOverlap` 或 `preventOverlap` 为 `true` 时生效, 防止重叠时节点边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示\n\n### layoutCfg.comboSpacing\n\n**类型**: Number / Function<br />**默认值**: 0<br />**是否必须**: false <br />**示例**: Example 1: 10 <br />Example 2:\n\n```javascript\n(d) => {\n  // d is a combo\n  if (d.id === \"combo1\") {\n    return 100;\n  }\n  return 10;\n};\n```\n\n<br />**描述**: `preventComboOverlap` 或 `preventOverlap` 为 `true` 时生效, 防止重叠时 combo 边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示\n\n### layoutCfg.comboPadding\n\n**类型**: Number / Function<br />**默认值**: 10<br />**是否必须**: false <br />**示例**: Example 1: 10 <br />Example 2:\n\n```javascript\n(d) => {\n  // d is a combo\n  if (d.id === \"combo1\") {\n    return 100;\n  }\n  return 10;\n};\n```\n\n<br />**描述**: Combo 内部的 padding 值，不用于渲染，仅用于计算力。推荐设置为与视图上 combo 内部 padding 值相同的值\n\n### layoutCfg.alpha\n\n**类型**：Number<br />**默认值**：1<br />**是否必须**：false<br />**说明**：当前的迭代收敛阈值\n\n### layoutCfg.alphaDecay\n\n**类型**：Number<br />**默认值**：0.028<br />**是否必须**：false<br />**说明**：迭代阈值的衰减率。范围 [0, 1]。0.028 对应迭代数为 300\n\n### layoutCfg.alphaMin\n\n**类型**：Number<br />**默认值**：0.001<br />**是否必须**：false<br />**说明**：停止迭代的阈值\n\n### layoutCfg.onTick\n\n**类型**：Function<br />**默认值**：{}<br />**是否必须**：false<br />**说明**：每一次迭代的回调函数\n\n### layoutCfg.onLayoutEnd\n\n**类型**：Function<br />**默认值**：{}<br />**是否必须**：false<br />**说明**：布局完成后的回调函数\n\n### layoutCfg.gravity\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：重力的大小，影响布局的紧凑程度\n\n### layoutCfg.comboGravity\n\n**类型**： Number<br />**默认值**：30<br />**是否必须**：false<br />**说明**：每个 combo 内部的重力大小，影响聚类的紧凑程度\n\n### layoutCfg.optimizeRangeFactor\n\n**类型**： Number<br />**默认值**：1<br />**是否必须**：false<br />**说明**：优化计算性能，两节点间距超过 `optimizeRangeFactor * width` 则不再计算斥力和重叠斥力。通过合理设置该参数可以较少计算量\n\n### layoutCfg.depthAttractiveForceScale\n\n**类型**： Number<br />**默认值**：0.5<br />**是否必须**：false<br />**说明**：根据边两端节点层级差距的调整引力的系数的因子，取值范围 [0, 1]。层级差距越大，引力越小\n\n### layoutCfg.depthRepulsiveForceScale\n\n**类型**： Number<br />**默认值**：2<br />**是否必须**：false<br />**说明**：根据边两端节点层级差距的调整斥力系数的因子，取值范围 [1, Infinity]。层级差距越大，斥力越大\n\n### layoutCfg.velocityDecay\n\n**类型**： Number<br />**默认值**：0.6<br />**是否必须**：false<br />**说明**：节点运动速度衰减参数\n\n### layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/concentric.zh.md",
    "content": "---\ntitle: 同心圆 Concentric\norder: 6\n---\n\nConcentric 布局为同心圆布局，用户可以指定节点某个属性为排序依据（默认为节点度数 degree），该属性值越高，则该节点布局后的位置中心。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*QpyPTbBpO2AAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'concentric',\n    center: [ 200, 200 ],     // 可选，\n    linkDistance: 50,         // 可选，边长\n    preventOverlap: true,     // 可选，必须配合 nodeSize\n    nodeSize: 30,             // 可选\n    sweep: 10,                // 可选\n    equidistant: false,       // 可选\n    startAngle: 0,            // 可选\n    clockwise: false,         // 可选\n    maxLevelDiff: 10,         // 可选\n    sortBy: 'degree'          // 可选\n    workerEnabled: true       // 可选，开启 web-worker\n  }\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.preventOverlap\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止重叠，必须配合下面属性 `nodeSize`，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测\n\n## layoutCfg.nodeSize\n\n**类型**： Number<br />**默认值**：30<br />**是否必须**：false<br />**说明**：节点大小（直径）。用于防止节点重叠时的碰撞检测\n\n## layoutCfg.minNodeSpacing\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：环与环之间最小间距，用于调整半径\n\n## layoutCfg.sweep\n\n**类型**： Number<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：第一个节点与最后一个节点之间的弧度差。若为 undefined ，则将会被设置为  2 _ Math.PI _ (1 - 1 / |level.nodes|) ，其中 level.nodes 为该算法计算出的每一层的节点，|level.nodes| 代表该层节点数量\n\n## layoutCfg.equidistant\n\n**类型**： Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：环与环之间的距离是否相等\n\n## layoutCfg.startAngle\n\n**类型**： Number<br />**默认值**：3 / 2 \\* Math.PI<br />**是否必须**：false<br />**说明**：开始方式节点的弧度\n\n## layoutCfg.clockwise\n\n**类型**： Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否按照顺时针排列\n\n## layoutCfg.maxLevelDiff\n\n**类型**： Number<br />**默认值：**undefined<br />**是否必须**：false<br />**说明**：每一层同心值的求和。若为 undefined，则将会被设置为 maxValue / 4 ，其中 maxValue 为最大的排序依据的属性值。例如，若 `sortBy` 为 `'degree'`，则 maxValue 为所有节点中度数最大的节点的度数\n\n## layoutCfg.sortBy\n\n**类型**： String<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：指定排序的依据（节点属性名），数值越高则该节点被放置得越中心。若为 undefined，则会计算节点的度数，度数越高，节点将被放置得越中心\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/dagre.zh.md",
    "content": "---\ntitle: 层次 Dagre\norder: 7\n---\n\nDagre 是一种层次布局。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2uMmRo5wYPUAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'dagre',\n    rankdir: 'LR', // 可选，默认为图的中心\n    align: 'DL', // 可选\n    nodesep: 20, // 可选\n    ranksep: 50, // 可选\n    controlPoints: true, // 可选\n  },\n});\n```\n\n## layoutCfg.rankdir\n\n**类型**： String<br />**可选值**：'TB' | 'BT' | 'LR' | 'RL'<br />**默认值**：'TB'<br />**是否必须**：false<br />**说明**：布局的方向。T：top（上）；B：bottom（下）；L：left（左）；R：right（右）。\n\n- 'TB'：从上至下布局；\n- 'BT'：从下至上布局；\n- 'LR'：从左至右布局；\n- 'RL'：从右至左布局。\n\n## layoutCfg.align\n\n**类型**： String<br />**可选值**：'UL' | 'UR' | 'DL' | 'DR' | undefined<br />**默认值**：'UL'<br />**是否必须**：false<br />**说明**：节点对齐方式。U：upper（上）；D：down（下）；L：left（左）；R：right（右）\n\n- 'UL'：对齐到左上角；\n- 'UR'：对齐到右上角；\n- 'DL'：对齐到左下角；\n- 'DR'：对齐到右下角；\n- undefined：默认，中间对齐。\n\n## layoutCfg.nodesep\n\n**类型**： Number<br />**默认值**：50<br />**是否必须**：false<br />**说明**：节点间距（px）。在`rankdir` 为 `'TB'` 或 `'BT'` 时是节点的水平间距；在`rankdir` 为 `'LR'` 或 `'RL'` 时代表节点的竖直方向间距\n\n## layoutCfg.ranksep\n\n**类型**： Number<br />**默认值**：50<br />**是否必须**：false<br />**说明**：层间距（px）。在`rankdir` 为 `'TB'` 或 `'BT'` 时是竖直方向相邻层间距；在`rankdir` 为 `'LR'` 或 `'RL'` 时代表水平方向相邻层间距\n\n## layoutCfg.nodesepFunc\n\n**类型**： Function<br />**默认值**：undefined<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 100;\n  return 10;\n};\n```\n\n<br />**是否必须**：false<br />**说明**：节点间距（px）的回调函数，通过该参数可以对不同节点设置不同的节点间距。在`rankdir` 为 'TB' 或 'BT' 时是节点的水平间距；在`rankdir` 为 'LR' 或 'RL' 时代表节点的竖直方向间距。优先级高于 `nodesep`，即若设置了 `nodesep`，则 `nodesepFunc` 不生效\n\n## layoutCfg.ranksepFunc\n\n**类型**： Function<br />**默认值**：undefined<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 100;\n  return 10;\n};\n```\n\n<br />**是否必须**：false<br />**说明**：层间距（px）的回调函数，通过该参数可以对不同节点设置不同的层间距。在`rankdir` 为 'TB' 或 'BT' 时是竖直方向相邻层间距；在`rankdir` 为 'LR' 或 'RL' 时代表水平方向相邻层间距。优先级高于 `ranksep`，即若设置了 `ranksep`，则 `ranksepFunc` 不生效\n\n## layoutCfg.controlPoints\n\n**类型**： Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否保留布局连线的控制点\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n\n## layoutCfg.sortByCombo\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 同一层节点是否根据每个节点数据中的 `comboId` 进行排序，以防止 combo 重叠\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/force.zh.md",
    "content": "---\ntitle: Force 力导向\norder: 3\n---\n\nForce 布局经典的力导向布局方法，与 d3 的力导向布局方法相对应。其属性也与 d3.js 的力导布局参数相对应。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Nt45Q6nnK2wAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'force',\n    center: [ 200, 200 ],     // 可选，默认为图的中心\n    linkDistance: 50,         // 可选，边长\n    nodeStrength: 30,         // 可选\n    edgeStrength: 0.1,        // 可选\n    collideStrength: 0.8,     // 可选\n    nodeSize: 30,             // 可选\n    alpha: 0.3,               // 可选\n    alphaDecay: 0.028,        // 可选\n    alphaMin: 0.01,           // 可选\n    forceSimulation: null,    // 可选\n    onTick: () => {           // 可选\n      console.log('ticking');\n    },\n    onLayoutEnd: () => {      // 可选\n      console.log('force layout done');\n    }\n  }\n);\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.linkDistance\n\n**类型**： Number / Function<br />**默认值**：50<br />**是否必须**：false<br />**说明**：边长度\n\n## layoutCfg.nodeStrength\n\n**类型**： Number / Function<br />**默认值**：null<br />**是否必须**：false<br />**说明**：节点作用力，正数代表节点之间的引力作用，负数代表节点之间的斥力作用\n\n## layoutCfg.edgeStrength\n\n**类型**：Number / Function<br />**默认值**：null<br />**是否必须**：false<br />**说明**：边的作用力，范围是 0 到 1，默认根据节点的出入度自适应\n\n## layoutCfg.preventOverlap\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止重叠，必须配合下面属性 `nodeSize` 或节点数据中的 `size` 属性，只有在数据中设置了 `size` 或在该布局中配置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测\n\n## layoutCfg.collideStrength\n\n**类型**：Number<br />**默认值**：1<br />**是否必须**：false<br />**说明**：防止重叠的力强度，范围 [0, 1]\n\n## layoutCfg.nodeSize\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：节点大小（直径）。用于碰撞检测。若不指定，则根据传入的节点的 size 属性计算。若即不指定，节点中也没有 `size`，则默认大小为 `10`\n\n## layoutCfg.nodeSpacing\n\n**类型**: Number / Function<br />**默认值**: 0<br />**是否必须**: false <br /> <br />**示例**: Example 1: 10 <br />Example 2:\n\n```javascript\n(d) => {\n  // d is a node\n  if (d.id === \"node1\") {\n    return 100;\n  }\n  return 10;\n};\n```\n\n<br />\n**描述**: `preventOverlap` 为 `true` 时生效, 防止重叠时节点边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示\n\n## layoutCfg.alpha\n\n**类型**：Number<br />**默认值**：0.3<br />**是否必须**：false<br />**说明**：当前的迭代收敛阈值\n\n## layoutCfg.alphaDecay\n\n**类型**：Number<br />**默认值**：0.028<br />**是否必须**：false<br />**说明**：迭代阈值的衰减率。范围 [0, 1]。0.028 对应迭代数为 300\n\n## layoutCfg.alphaMin\n\n**类型**：Number<br />**默认值**：0.001<br />**是否必须**：false<br />**说明**：停止迭代的阈值\n\n## layoutCfg.clustering\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否按照聚类信息布局\n\n## layoutCfg.clusterNodeStrength\n\n**类型**：Number<br />**默认值**：-1<br />**是否必须**：false<br />**说明**：聚类节点作用力。负数代表斥力\n\n## layoutCfg.clusterEdgeStrength\n\n**类型**：Number<br />**默认值**：0.1<br />**是否必须**：false<br />**说明**：聚类边作用力\n\n## layoutCfg.clusterEdgeDistance\n\n**类型**：Number<br />**默认值**：100<br />**是否必须**：false<br />**说明**：聚类边长度\n\n## layoutCfg.clusterNodeSize\n\n**类型**：Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：聚类节点大小 / 直径，直径越大，越分散\n\n## layoutCfg.clusterFociStrength\n\n**类型**：Number<br />**默认值**：0.8<br />**是否必须**：false<br />**说明**：用于 foci 的力\n\n## layoutCfg.forceSimulation\n\n**类型**：Object<br />**默认值**：null<br />**是否必须**：false<br />**说明**：自定义 force 方法，若不指定，则使用 d3.js 的方法\n\n## layoutCfg.onTick\n\n**类型**：Function<br />**默认值**：{}<br />**是否必须**：false<br />**说明**：每一次迭代的回调函数\n\n## layoutCfg.onLayoutEnd\n\n**类型**：Function<br />**默认值**：{}<br />**是否必须**：false<br />**说明**：布局完成后的回调函数\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/forceAtlas2.zh.md",
    "content": "---\ntitle: Force Atlas 2\norder: 11\n---\n\nForce Atlas 2 是一种力导向布局的变形，比 force 收敛地更好，更紧凑。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MqwAQZLIVPwAAAAAAAAAAAAAARQnAQ' width=430 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'forceAtlas2',\n    width: 300,\n    height: 300,\n  },\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.width\n\n**类型**： Number<br />**默认值**：图的宽度<br />**是否必须**：false<br />**说明**：布局的宽度范围\n\n## layoutCfg.height\n\n**类型**： Number<br />**默认值**：图的高度<br />**是否必须**：false<br />**说明**：布局的高度范围\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n\n## layoutCfg.kr\n\n**类型**： Number<br />**默认值**：5<br />**是否必须**：false<br />**说明**：斥力系数，可用于调整布局的紧凑程度。kr 越大，布局越松散\n\n## layoutCfg.kg\n\n**类型**： Number<br />**默认值**：5<br />**是否必须**：false<br />**说明**：重力系数。kg 越大，布局越聚集在中心\n\n## layoutCfg.ks\n\n**类型**： Number<br />**默认值**：0.1<br />**是否必须**：false<br />**说明**：控制迭代过程中，节点移动的速度\n\n## layoutCfg.tao\n\n**类型**： Number<br />**默认值**：0.1<br />**是否必须**：false<br />**说明**：迭代接近收敛时停止震荡的容忍度\n\n## layoutCfg.mode\n\n**类型**： 'normal' | 'linlog'<br />**默认值**：'normal'<br />**是否必须**：false<br />**说明**：'linlog' 模式下，聚类将更加紧凑\n\n## layoutCfg.preventOverlap\n\n**类型**： boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止节点重叠\n\n## layoutCfg.dissuadeHubs\n\n**类型**： boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否打开 hub 模式。若为 true，相比与出度大的节点，入度大的节点将会有更高的优先级被放置在中心位置\n\n## layoutCfg.barnesHut\n\n**类型**： boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否打开 barnes hut 加速，即四叉树加速。由于每次迭代需要更新构建四叉树，建议在较大规模图上打开\n\n## layoutCfg.prune\n\n**类型**： boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否开启自动剪枝模式。默认情况下，当节点数量大于 100 时它将会被激活。注意，剪枝能够提高收敛速度，但可能会降低图的布局质量\n\n## layoutCfg.maxIteration\n\n**类型**： number<br />**默认值**：0<br />**是否必须**：false<br />**说明**：最大迭代次数，若为 0 则将自动调整\n\n## layoutCfg.getWidth\n\n**类型**： function<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：节点宽度的函数，参数为节点数据\n\n## layoutCfg.getHeight\n\n**类型**： function<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：节点高度的函数，参数为节点数据\n\n## layoutCfg.onLayoutEnd\n\n**类型**： function<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：布局结束后的回调函数\n\n## layoutCfg.onTick\n\n**类型**： function<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：布局每次迭代的回调函数\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/fruchterman.zh.md",
    "content": "---\ntitle: Fruchterman\norder: 8\n---\n\nFruchterman 布局是一种力导布局。算法原文： <a href='http://www.mathe2.uni-bayreuth.de/axel/papers/reingold:graph_drawing_by_force_directed_placement.pdf' target='_blank'>Graph Drawing by Force-directed Placement</a>\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*jK3ITYqVJnQAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'fruchterman',\n    center: [200, 200], // 可选，默认为图的中心\n    gravity: 20, // 可选\n    speed: 2, // 可选\n    clustering: true, // 可选\n    clusterGravity: 30, // 可选\n    maxIteration: 2000, // 可选，迭代次数\n    workerEnabled: true, // 可选，开启 web-worker\n    gpuEnabled: true, // 可选，开启 GPU 并行计算，F6 4.0 支持\n  },\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.maxIteration\n\n**类型**： Number<br />**默认值**：1000<br />**是否必须**：false<br />**说明**：最大迭代次数\n\n## layoutCfg.gravity\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：重力的大小，影响布局的紧凑程度\n\n## layoutCfg.speed\n\n**类型**： Number<br />**默认值**：1<br />**是否必须**：false<br />**说明**：每次迭代节点移动的速度。速度太快可能会导致强烈震荡\n\n## layoutCfg.clustering\n\n**类型**： Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否按照聚类布局\n\n## layoutCfg.clusterGravity\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：聚类内部的重力大小，影响聚类的紧凑程度，在 `clustering` 为 `true` 时生效\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n\n## layoutCfg.gpuEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 GPU 并行计算。若用户的机器或浏览器不支持 GPU 计算，将会自动降级为 CPU 计算。性能提升概览： <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*4ogTQKrWhIkAAAAAAAAAAAAAARQnAQ' width='80%' alt=''/>\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/gforce.zh.md",
    "content": "---\ntitle: GForce\norder: 2\n---\n\nGForce 实现了经典的力导向算法，F6 支持。能够更加自由地支持设置节点质量、群组中心力等。更重要的是，它支持 GPU 并行计算。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lX-qSqDECrIAAAAAAAAAAAAAARQnAQ' width=600 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'gForce',\n    center: [ 200, 200 ],     // 可选，默认为图的中心\n    linkDistance: 50,         // 可选，边长\n    nodeStrength: 30,         // 可选\n    edgeStrength: 0.1,        // 可选\n    nodeSize: 30,             // 可选\n    onTick: () => {           // 可选\n      console.log('ticking');\n    },\n    onLayoutEnd: () => {      // 可选\n      console.log('force layout done');\n    },\n    workerEnabled: true,      // 可选，开启 web-worker\n    gpuEnabled: true          // 可选，开启 GPU 并行计算，F6 4.0 支持\n    ... // 更多参数见下方\n  }\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.linkDistance\n\n**类型**： Number / Function<br />**默认值**1<br />**是否必须**：false<br />**说明**：边长度\n\n## layoutCfg.nodeStrength\n\n**类型**： Number / Function<br />**默认值**：1000<br />**是否必须**：false<br />**说明**：节点作用力，正数代表节点之间的斥力作用，负数代表节点之间的引力作用（注意与 'force' 相反）\n\n## layoutCfg.edgeStrength\n\n**类型**：Number / Function<br />**默认值**：200<br />**是否必须**：false<br />**说明**：边的作用力（引力）大小\n\n## layoutCfg.preventOverlap\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止重叠，必须配合下面属性 `nodeSize` 或节点数据中的 `size` 属性，只有在数据中设置了 `size` 或在该布局中配置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测\n\n## layoutCfg.nodeSize\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：节点大小（直径）。用于碰撞检测。若不指定，则根据传入的节点的 size 属性计算。若即不指定，节点中也没有 `size`，则默认大小为 `10`\n\n## layoutCfg.nodeSpacing\n\n**类型**: Number / Function<br />**默认值**: 0<br />**是否必须**: false <br />**示例**: Example 1: 10 <br />Example 2:\n\n```javascript\n(d) => {\n  // d is a node\n  if (d.id === \"node1\") {\n    return 100;\n  }\n  return 10;\n};\n```\n\n<br />**描述**: `preventOverlap` 为 `true` 时生效, 防止重叠时节点边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示\n\n## layoutCfg.minMovement\n\n**类型**：Number<br />**默认值**：0.5<br />**是否必须**：false<br />**说明**：当一次迭代的平均移动长度小于该值时停止迭代。数字越小，布局越收敛，所用时间将越长\n\n## layoutCfg.maxIteration\n\n**类型**：Number<br />**默认值**：1000<br />**是否必须**：false<br />**说明**：最大迭代次数。当迭代次数超过该值，但平均移动长度仍然没有达到 minMovement，也将强制停止迭代\n\n## layoutCfg.damping\n\n**类型**：Number<br />**默认值**：0.9<br />**是否必须**：false<br />**说明**：阻尼系数，取值范围 [0, 1]。数字越大，速度降低得越慢\n\n## layoutCfg.maxSpeed\n\n**类型**：Number<br />**默认值**：1000<br />**是否必须**：false<br />**说明**：一次迭代的最大移动长度\n\n## layoutCfg.coulombDisScale\n\n**类型**：Number<br />**默认值**：0.005<br />**是否必须**：false<br />**说明**：库伦系数，斥力的一个系数，数字越大，节点之间的斥力越大\n\n## layoutCfg.getMass\n\n**类型**：Function<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：每个节点质量的回调函数，若不指定，则默认使用度数作为节点质量。使用方法与 `nodeSpacing` 类似，每个回调函数返回一个数值作为该节点的质量\n\n## layoutCfg.getCenter\n\n**类型**：Function<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：每个节点中心力的 x、y、强度的回调函数，若不指定，则没有额外中心力<br />**示例**:\n\n```javascript\n(d, degree) => {\n  // d is a node, degree is the degree of the node\n  if (d.clusterId === \"c1\") return [100, 100, 10]; // x, y, strength\n  if (degree === 0) return [250, 250, 15];\n  return [180, 180, 5]; // x, y, strength\n};\n```\n\n## layoutCfg.gravity\n\n**类型**：Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：中心力大小，指所有节点被吸引到 `center` 的力。数字越大，布局越紧凑\n\n## layoutCfg.onTick\n\n**类型**：Function<br />**默认值**：{}<br />**是否必须**：false<br />**说明**：每一次迭代的回调函数\n\n## layoutCfg.onLayoutEnd\n\n**类型**：Function<br />**默认值**：{}<br />**是否必须**：false<br />**说明**：布局完成后的回调函数\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n\n## layoutCfg.gpuEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 GPU 并行计算。若用户的机器或浏览器不支持 GPU 计算，将会自动降级为 CPU 计算。自 F6 4.0 起支持，性能提升概览： <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*4ogTQKrWhIkAAAAAAAAAAAAAARQnAQ' width='80%' alt=''/>\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/grid.zh.md",
    "content": "---\ntitle: 格子 Grid\norder: 10\n---\n\nGrid 布局是将所有节点通过某种指定属性排序后，整齐地放置在网格上。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Oh6mRLVEBBIAAAAAAAAAAABkARQnAQ' width=650 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'grid',\n    begin: [ 0, 0 ],          // 可选，\n    preventOverlap: true,     // 可选，必须配合 nodeSize\n    preventOverlapPdding: 20, // 可选\n    nodeSize: 30,             // 可选\n    condense: false,          // 可选\n    rows: 5,                  // 可选\n    cols: 5,                  // 可选\n    sortBy: 'degree'          // 可选\n    workerEnabled: true       // 可选，开启 web-worker\n  }\n});\n```\n\n## layoutCfg.begin\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：[ 0, 0 ]<br />**是否必须**：false<br />**说明**：网格开始位置（左上角）\n\n## layoutCfg.preventOverlap\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止重叠，必须配合下面属性 `nodeSize`，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测\n\n## layoutCfg.nodeSize\n\n**类型**： Number<br />**默认值**：30<br />**是否必须**：false<br />**说明**：节点大小（直径）。用于防止节点重叠时的碰撞检测\n\n## layoutCfg.preventOverlapPadding\n\n**类型**：Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：避免重叠时节点的间距 `padding`。`preventOverlap` 为 `true` 时生效\n\n## layoutCfg.condense\n\n**类型**： Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：为 `false` 时表示利用所有可用画布空间，为 `true` 时表示利用最小的画布空间\n\n## layoutCfg.rows\n\n**类型**： Number<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：网格的行数，为 undefined 时算法根据节点数量、布局空间、`cols`（若指定）自动计算\n\n## layoutCfg.cols\n\n**类型**： Number<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：网格的列数，为 undefined 时算法根据节点数量、布局空间、`rows`（若指定）自动计算\n\n## layoutCfg.sortBy\n\n**类型**： String<br />**默认值**：undefined<br />**是否必须**：false<br />**说明**：指定排序的依据（节点属性名），数值越高则该节点被放置得越中心。若为 undefined，则会计算节点的度数，度数越高，节点将被放置得越中心\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/guide.zh.md",
    "content": "---\ntitle: 导览及使用\norder: 0\n---\n\n## 内置布局导览\n\nF6 提供了以下内置布局算法。可以在[实例化图时配置](#实例化图时使用布局)，或[独立使用](#单独使用布局)。当内置布局算法不满足需求时，还可以[自定义布局](/zh/docs/api/registerLayout)。\n\n注意，Graph 布局与 TreeGaph 布局相互不通用。\n\n- [Random Layout](./random)：随机布局；\n- **[GForce Layout](./gforce)：F6 支持的经典力导向布局，支持 GPU 并行计算：**\n\n  > 力导向布局：一个布局网络中，粒子与粒子之间具有引力和斥力，从初始的随机无序的布局不断演变，逐渐趋于平衡稳定的布局方式称之为力导向布局。适用于描述事物间关系，比如人物关系、计算机网络关系等。\n\n- [Force Layout](./force)：引用 d3 的经典力导向布局；\n- [Force Atlas 2 Layout](./forceAtlas2)：FA2 力导向布局，比 force 收敛地更好，更紧凑；\n- [Circular Layout](./circular)：环形布局；\n- [Radial Layout](./radial)：辐射状布局；\n- [MDS Layout](./mds)：高维数据降维算法布局；\n- [Fruchterman Layout](./fruchterman)：Fruchterman 布局，一种力导布局；\n- [Dagre Layout](./dagre)：层次布局；\n- [Concentric Layout](./concentric)：同心圆布局，将重要（默认以度数为度量）的节点放置在布局中心；\n- [Grid Layout](./grid)：格子布局，将节点有序（默认是数据顺序）排列在格子上；\n- [Combo Force Layout](./combo-force)：适用于带有 combo 图的力导向布局，推荐有 combo 的图使用该布局。\n\n## 实例化图时使用布局\n\n在 F6 中使用布局，在实例化图时配置 `layout` 属性。例如：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                      // 其他配置项\n  layout: {                // Object，可选，布局的方法及其配置项，默认为 random 布局。\n    type: 'force',\n    preventOverlap: true,\n    nodeSize: 30,\n    // workerEnabled: true, // 是否启用 webworker\n    // gpuEnabled: true // 是否使用 gpu 版本的布局算法，F6 4.0 支持，目前仅支持 gForce 及 fruchterman。若用户的机器或浏览器不支持 GPU 计算，将会自动降级为 CPU 计算\n    ...                    // 其他配置\n  }\n});\n```\n\n每种布局方法的配置项不尽相同，具体参见本目录下每种布局的 API。<br />当实例化图时没有配置 `layout` 时：\n\n- 若数据中节点有位置信息（`x` 和 `y`），则按照数据的位置信息进行绘制；\n- 若数据中节点没有位置信息，则默认使用 Random Layout 进行布局。\n\n## 单独使用布局\n\n以下方法为通过 `const layout = new F6.Layout['layoutName']` 单独使用布局时，或自定义布局时可能需要复写的方法。如果上述两种情况，仅在实例化图时通过配置 `layout` 使用内置布局方法时，以下方法由 F6 控制并调用，用户不需要了解。\n\n### 初始化\n\n#### init(data)\n\n初始化布局。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述             |\n| ---- | ------ | -------- | ---------------- |\n| data | object | true     | 布局中使用的数据 |\n\n#### getDefaultCfg()\n\n返回布局的默认参数。\n\n**返回值**\n\n| 名称 | 类型   | 是否必选 | 描述           |\n| ---- | ------ | -------- | -------------- |\n| cfg  | object | true     | 布局的默认参数 |\n\n### 布局\n\n#### execute()\n\n执行布局算法。\n\n#### layout(data)\n\n根据传入的数据进行布局。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述             |\n| ---- | ------ | -------- | ---------------- |\n| data | object | true     | 布局中使用的数据 |\n\n### 更新\n\n#### updateCfg(cfg)\n\n更新布局参数。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述         |\n| ---- | ------ | -------- | ------------ |\n| cfg  | object | true     | 新的布局配置 |\n\n### 销毁\n\n#### destroy()\n\n销毁布局。\n\n## AI 智能布局推荐\n\n`markdown:docs/manual/middle/layout/ai-layout.zh.md`\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/mds.zh.md",
    "content": "---\ntitle: 高维数据降维 MDS\norder: 9\n---\n\nMDS 布局是高维数据降维算法布局，该算法全称  Multidimensional Scaling 。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aUS7TJR2NHcAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'mds',\n    workerEnabled: true, // 可选，开启 web-worker\n  },\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.linkDistance\n\n**类型**： Number<br />**默认值**：50<br />**是否必须**：false<br />**说明**：边长度\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/radial.zh.md",
    "content": "---\ntitle: 辐射形 Radial\norder: 5\n---\n\nRadial 布局是将图布局成辐射状的布局方法。以一个 focusNode 为中心，其余节点按照与 focusNode 的度数关系排列在不同距离的环上。距离 focusNode 一度的节点布局在与其最近的第一个环上，距离 focusNode 二度的节点布局在第二个环上，以此类推。算法原文链接： <a href='http://emis.ams.org/journals/JGAA/accepted/2011/BrandesPich2011.15.1.pdf' target='_blank'>More Flexible Radial Layout</a>。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GAFjRJeAoAsAAAAAAAAAAABkARQnAQ' width=450 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'radial',\n    center: [ 200, 200 ],     // 可选，默认为图的中心\n    linkDistance: 50,         // 可选，边长\n    maxIteration: 1000,       // 可选\n    focusNode: 'node11',      // 可选\n    unitRadius: 100,          // 可选\n    preventOverlap: true,     // 可选，必须配合 nodeSize\n    nodeSize: 30,             // 可选\n    strictRadial: false       // 可选\n    workerEnabled: true       // 可选，开启 web-worker\n  }\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.linkDistance\n\n**类型**： Number<br />**默认值**：50<br />**是否必须**：false<br />**说明**：边长度\n\n## layoutCfg.maxIteration\n\n**类型**： Number<br />**默认值**：1000<br />**是否必须**：false<br />**说明**：停止迭代到最大迭代数\n\n## layoutCfg.focusNode\n\n**类型**：String | Object<br />**默认值**：null<br />**是否必须**：false<br />**说明**：辐射的中心点，默认为数据中第一个节点。可以传入节点 id 或节点本身\n\n## layoutCfg.unitRadius\n\n**类型**：Number<br />**默认值**：100<br />**是否必须**：false<br />**说明**：每一圈距离上一圈的距离。默认填充整个画布，即根据图的大小决定\n\n## layoutCfg.preventOverlap\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否防止重叠，必须配合下面属性 `nodeSize`，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测\n\n## layoutCfg.nodeSize\n\n**类型**： Number<br />**默认值**：10<br />**是否必须**：false<br />**说明**：节点大小（直径）。用于防止节点重叠时的碰撞检测\n\n## layoutCfg.nodeSpacing\n\n**类型**: Number / Function<br />**默认值**: 0<br />**是否必须**: false <br />**示例**: Example 1: 10 <br />Example 2:\n\n```javascript\n(d) => {\n  // d is a node\n  if (d.id === \"node1\") {\n    return 100;\n  }\n  return 10;\n};\n```\n\n<br />**描述**: `preventOverlap` 为 `true` 时生效, 防止重叠时节点边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示\n\n## layoutCfg.maxPreventOverlapIteration\n\n**类型**： Number<br />**默认值**：200<br />**是否必须**：false<br />**说明**：防止重叠步骤的最大迭代次数\n\n## layoutCfg.strictRadial\n\n**类型**： Boolean<br />**默认值**：true<br />**是否必须**：false<br />**说明**：是否必须是严格的 radial 布局，及每一层的节点严格布局在一个环上。`preventOverlap` 为 `true` 时生效。\n\n- 当 `preventOverlap` 为 `true`，且 `strictRadial` 为 `false` 时，有重叠的节点严格沿着所在的环展开，但在一个环上若节点过多，可能无法完全避免节点重叠。\n- 当 `preventOverlap` 为 `true`，且 `strictRadial` 为 `true`  时，允许同环上重叠的节点不严格沿着该环布局，可以在该环的前后偏移以避免重叠。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cJqbRqm0h2UAAAAAAAAAAABkARQnAQ' width=270 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*PFRIRosyX7kAAAAAAAAAAABkARQnAQ' width=270 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*DPQFSqCXaIAAAAAAAAAAAABkARQnAQ' width=270 alt='img'/>\n\n> （左）preventOverlap = false。（中）preventOverlap = false，strictRadial = true。（右）preventOverlap = false，strictRadial = false。\n\n## layoutCfg.sortBy\n\n**类型**: String<br />**默认值**: undefined<br />**是否必须**: false<br />**说明**: 同层节点布局后相距远近的依据。默认 `undefined` ，表示根据数据的拓扑结构（节点间最短路径）排布，即关系越近/点对间最短路径越小的节点将会被尽可能排列在一起；`'data'` 表示按照节点在数据中的顺序排列，即在数据顺序上靠近的节点将会尽可能排列在一起；也可以指定为节点数据中的某个字段名，例如 `'cluster'`、`'name'` 等（必须在数据中存在）\n\n## layoutCfg.sortStrength\n\n**类型**: Number<br />**默认值**: 10<br />**是否必须**: false<br />**说明**: 同层节点根据 `sortBy` 排列的强度，数值越大，`sortBy` 指定的方式计算出距离越小的越靠近。`sortBy` 不为 `undefined` 时生效\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/graphLayout/random.zh.md",
    "content": "---\ntitle: Random 随机\norder: 1\n---\n\nRandom 布局是 F6 中的默认布局方法。当实例化图时没有指定布局方法，且数据中也不存在位置信息时，F6 将自动使用 Random 布局。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*G5_uRodUTaYAAAAAAAAAAABkARQnAQ' width=430 alt='img'/>\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 600,\n  layout: {\n    type: 'random',\n    width: 300,\n    height: 300,\n  },\n});\n```\n\n## layoutCfg.center\n\n**类型**： Array<br />**示例**：[ 0, 0 ]<br />**默认值**：图的中心<br />**是否必须**：false<br />**说明**：布局的中心\n\n## layoutCfg.width\n\n**类型**： Number<br />**默认值**：图的宽度<br />**是否必须**：false<br />**说明**：布局的宽度范围\n\n## layoutCfg.height\n\n**类型**： Number<br />**默认值**：图的高度<br />**是否必须**：false<br />**说明**：布局的高度范围\n\n## layoutCfg.workerEnabled\n\n**类型**: Boolean<br />**默认值**: false<br />**是否必须**: false<br />**说明**: 是否启用 web-worker 以防布局计算时间过长阻塞页面交互\n"
  },
  {
    "path": "packages/site/docs/api/registerItem.zh.md",
    "content": "---\ntitle: 自定义元素 F6.registerX\norder: 7\n---\n\n本文介绍的相关方法是在自定义节点（registerNode）或自定义边（registerEdge）的过程中需要部分实现或复写的方法。\n\n**友情提示：**以下属性和 API 方法，全部用于自定义节点和边时候使用，即作为 `F6.registerNode` / `F6.registerEdge` 的第二个参数中的方法。\n\n本文介绍 F6 的自定义机制，包括自定义节点、自定义边、自定义 combo、自定义交互行为、自定义布局的相关方法。它们都被挂载在 F6 全局上，通过 `F6.registerXXX` 进行调用。\n\n## F6.registerNode(nodeName, options, extendedNodeName)\n\n当内置节点不满足需求时，可以通过 `F6.registerNode(nodeName, options, extendedNodeName)` 方法自定义节点。\n\n### 参数\n\n| 名称           | 类型   | 是否必选 | 描述                                                                                                                                                                                     |\n| -------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| nodeName       | String | true     | 自定义节点名称，需保持唯一性。                                                                                                                                                           |\n| options        | Object | true     | 自定义节点时的配置项，配置项中包括完整的生命周期方法，具体请参考：[Shape Doc](/zh/docs/manual/middle/elements/shape/shape-keyshape) 和 [自定义节点与边 API](/zh/docs/api/registerItem)。 |\n| extendNodeName | String | false    | 自定义节点时可基于内置节点进行定义，该字段表示内置节点名称，所有内置节点请参考：[内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 教程。                                     |\n\n### 用法\n\n```javascript\nF6.registerNode(\n  \"nodeName\",\n  {\n    /**\n     * 绘制节点，包含文本\n     * @param  {Object} cfg 节点的配置项\n     * @param  {G.Group} group 图形分组，节点中的图形对象的容器\n     * @return {G.Shape} 绘制的图形，通过 node.get('keyShape') 可以获取到\n     */\n    draw(cfg, group) {},\n    /**\n     * 绘制后的附加操作，默认没有任何操作\n     * @param  {Object} cfg 节点的配置项\n     * @param  {G.Group} group 图形分组，节点中的图形对象的容器\n     */\n    afterDraw(cfg, group) {},\n    /**\n     * 更新节点，包含文本\n     * @override\n     * @param  {Object} cfg 节点的配置项\n     * @param  {Node} node 节点\n     */\n    update(cfg, node) {},\n    /**\n     * 更新节点后的操作，一般同 afterDraw 配合使用\n     * @override\n     * @param  {Object} cfg 节点的配置项\n     * @param  {Node} node 节点\n     */\n    afterUpdate(cfg, node) {},\n    /**\n     * 设置节点的状态，主要是交互状态，业务状态请在 draw 方法中实现\n     * 单图形的节点仅考虑 selected、active 状态，有其他状态需求的用户自己复写这个方法\n     * @param  {String} name 状态名称\n     * @param  {Object} value 状态值\n     * @param  {Node} node 节点\n     */\n    setState(name, value, node) {},\n    /**\n     * 获取锚点（相关边的连入点）\n     * @param  {Object} cfg 节点的配置项\n     * @return {Array|null} 锚点（相关边的连入点）的数组,如果为 null，则没有锚点\n     */\n    getAnchorPoints(cfg) {},\n  },\n  \"extendedNodeName\",\n);\n```\n\n## F6.registerEdge(edgeName, options, extendedEdgeName)\n\n当内置的边不能满足需求时，可以通过 `registerEdge(edgeName, options, extendedEdgeName)` 方法注册自定义的边。\n\n### 参数\n\n| 名称             | 类型   | 是否必选 | 描述                                                                                                                                                                                   |\n| ---------------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| edgeName         | String | true     | 自定义边的名称                                                                                                                                                                         |\n| options          | Object | true     | 自定义边时的配置项，配置项中包括完整的生命周期方法，具体请参考：[Shape Doc](/zh/docs/manual/middle/elements/shape/shape-keyshape) 和 [自定义节点与边 API](/zh/docs/api/registerItem)。 |\n| extendedEdgeName | String | false    | 自定义边时可基于内置边进行定义，该字段表示内置边的名称，所有内置边请参考：[内置边](/zh/docs/manual/middle/elements/edges/defaultEdge) 教程。                                           |\n\n### 用法\n\n```javascript\nF6.registerEdge(\n  \"edgeName\",\n  {\n    /**\n     * 绘制边，包含文本\n     * @param  {Object} cfg 边的配置项\n     * @param  {G.Group} group 图形分组，边中的图形对象的容器\n     * @return {G.Shape} 绘制的图形，通过 node.get('keyShape') 可以获取到\n     */\n    draw(cfg, group) {},\n    /**\n     * 绘制后的附加操作，默认没有任何操作\n     * @param  {Object} cfg 边的配置项\n     * @param  {G.Group} group 图形分组，边中的图形对象的容器\n     */\n    afterDraw(cfg, group) {},\n    /**\n     * 更新边，包含文本\n     * @override\n     * @param  {Object} cfg 边的配置项\n     * @param  {Edge} edge 边\n     */\n    update(cfg, edge) {},\n    /**\n     * 更新边后的操作，一般同 afterDraw 配合使用\n     * @override\n     * @param  {Object} cfg 边的配置项\n     * @param  {Edge} edge 边\n     */\n    afterUpdate(cfg, edge) {},\n    /**\n     * 设置边的状态，主要是交互状态，业务状态请在 draw 方法中实现\n     * 单图形的边仅考虑 selected、active 状态，有其他状态需求的用户自己复写这个方法\n     * @param  {String} name 状态名称\n     * @param  {Object} value 状态值\n     * @param  {Edge} edge 边\n     */\n    setState(name, value, edge) {},\n  },\n  \"extendedEdgeName\",\n);\n```\n\n## F6.registerCombo(comboName, options, extendedComboName)\n\n当内置 Combo 不满足需求时，可以通过 `F6.registerCombo(comboName, options, extendedComboName)` 方法自定义 Combo。\n\n### 参数\n\n| 名称              | 类型   | 是否必选 | 描述                                                                                                                                                                                        |\n| ----------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| comboName         | String | true     | 自定义 combo 的名称，需保持唯一性。                                                                                                                                                         |\n| options           | Object | true     | 自定义 combo 时的配置项，配置项中包括完整的生命周期方法，具体请参考：[Shape Doc](/zh/docs/manual/middle/elements/shape/shape-keyshape) 和 [自定义节点与边 API](/zh/docs/api/registerItem)。 |\n| extendedComboName | String | false    | 自定义节点时可基于内置 combo 进行定义，该字段表示内置 combo 名称，所有内置 Combo 请参考：[内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo) 教程。                           |\n\n### 用法\n\n```javascript\nF6.registerCombo(\n  \"comboName\",\n  {\n    /**\n     * 绘制 combo，包含文本\n     * @param  {Object} cfg combo 的配置项\n     * @param  {G.Group} group 图形分组，combo 中的图形对象的容器\n     * @return {G.Shape} 绘制的图形，通过 combo.get('keyShape') 可以获取到\n     */\n    draw(cfg, group) {},\n    /**\n     * 绘制后的附加操作，默认没有任何操作\n     * @param  {Object} cfg combo 的配置项\n     * @param  {G.Group} group 图形分组，combo 中的图形对象的容器\n     */\n    afterDraw(cfg, group) {},\n    /**\n     * 更新 combo ，combo 文本\n     * @override\n     * @param  {Object} cfg combo 的配置项\n     * @param  {Combo} combo combo item\n     */\n    update(cfg, combo) {},\n    /**\n     * 更新 combo 后的操作，一般同 afterDraw 配合使用\n     * @override\n     * @param  {Object} cfg combo 的配置项\n     * @param  {Combo} combo combo item\n     */\n    afterUpdate(cfg, combo) {},\n    /**\n     * 设置 combo 的状态，主要是交互状态，业务状态请在 draw 方法中实现\n     * 单图形的 combo 仅考虑 selected、active 状态，有其他状态需求的用户自己复写这个方法\n     * @param  {String} name 状态名称\n     * @param  {Object} value 状态值\n     * @param  {Combo} combo combo item\n     */\n    setState(name, value, combo) {},\n    /**\n     * 获取锚点（相关边的连入点）\n     * @param  {Object} cfg combo 的配置项\n     * @return {Array|null} 锚点（相关边的连入点）的数组,如果为 null，则没有锚点\n     */\n    getAnchorPoints(cfg) {},\n  },\n  \"extendedComboName\",\n);\n```\n\n## 用法\n\n下面以注册边为例：\n\n```javascript\nimport F6 from \"@antv/f6\";\nF6.registerEdge(\n  \"edgeName\",\n  {\n    labelPosition: \"center\",\n    labelAutoRotate: true,\n    draw(cfg, group) {\n      // 定义的其他方法，都可以在draw里面调用， 如 drawShape、drawLabel 等。\n      this.drawShape();\n      const labelStyle = this.getLabelStyle(cfg);\n      // ...\n    },\n    drawShape(cfg, group) {\n      //\n    },\n    getLabelStyle(cfg) {\n      // 根据业务返回 label 的样式\n      return {};\n    },\n    update(cfg, item) {\n      // 更新绘制的元素\n    },\n  },\n  \"line\",\n);\n```\n\n## 属性\n\n### labelPosition\n\n文本相对于图形的位置，默认值为 `'center'`。\n\n- 当使用 `registerNode` 注册节点时，`labelPosition` 可选值包括：`'top'`、`'bottom'`、`'left'`、`'right'` 和 `'center'`；\n- 当使用 `registerEdge` 注册边时，`labelPosition` 可选值包括：`'start'`、`'end'` 和 `'center'`。\n\n### labelAutoRotate\n\n> 只有在 `registerEdge` 时生效。\n\n文本是否跟着线自动旋转，默认值为 `false`。\n\n**提示：edge 特有。**\n\n## 绘制函数\n\n绘制部分四个 API 的参数完全相同，参数说明部分参考 `draw()` 方法。\n\n### draw(cfg, group)\n\n绘制节点和边，包括节点和边上的文本，返回图形的 `keyShape`。\n\n**参数**\n\n| 名称  | 类型    | 是否必选 | 描述             |\n| ----- | ------- | -------- | ---------------- |\n| cfg   | Object  | true     | 节点或边的配置项 |\n| group | G.Group | true     | 节点或边的容器   |\n\n### afterDraw(cfg, group)\n\n绘制完成以后的操作，用户可继承现有的节点或边，在 `afterDraw()` 方法中扩展图形或添加动画。可参考在 afterDraw 中添加动画的 [demo](/zh/docs/examples/scatter/edge)。图形动画 API 详见 F6 的渲染引擎 [G 的动画相关 API](https://g.antv.vision/zh/docs/api/general/element/#%E5%8A%A8%E7%94%BB%E6%96%B9%E6%B3%95)。\n\n## 更新函数\n\n### update(cfg, item)\n\n更新节点或边，包括节点或边上的文本。\n\n**参数**\n\n| 名称 | 类型    | 是否必选 | 描述             |\n| ---- | ------- | -------- | ---------------- |\n| cfg  | Object  | true     | 节点或边的配置项 |\n| item | F6.Item | true     | 节点或边的实例   |\n\n### afterUpdate(cfg, item)\n\n更新完以后的操作，如扩展图形或添加动画。可参考添加动画的 [demo](/zh/docs/examples/scatter/edge)。图形动画 API 详见 F6 的渲染引擎 [G 的动画相关 API](https://g.antv.vision/zh/docs/api/general/element/#%E5%8A%A8%E7%94%BB%E6%96%B9%E6%B3%95)。\n\n### shouldUpdate(type)\n\n是否允许更新。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述                           |\n| ---- | ------ | -------- | ------------------------------ |\n| type | String | true     | 元素类型，`'node'` 或 `'edge'` |\n\n**返回值**\n\n- 返回值类型：Boolean；\n- 返回 `true`，则允许更新，否则不允许更新。\n\n### setState(name, value, item)\n\n用于响应外部对元素状态的改变。当外部调用 [`graph.setItemState(item, state, value)`](/zh/docs/api/graphFunc/state#graphsetitemstateitem-state-value) 时，该函数作出相关响应。主要是交互状态，业务状态请在 `draw()` 方法中实现。单图形的节点仅考虑 `'selected'` 、`'active'` 状态，有其他状态需求的用户可以复写该方法。\n\n**参数**\n\n| 名称  | 类型    | 是否必选 | 描述                                       |\n| ----- | ------- | -------- | ------------------------------------------ |\n| name  | String  | true     | 状态名称                                   |\n| value | Boolean | true     | 状态是否可用，为 `true` 时可用，否则不可用 |\n| item  | F6.Item | true     | 节点或边的实例                             |\n"
  },
  {
    "path": "packages/site/docs/api/registerLayout.zh.md",
    "content": "---\ntitle: 自定义布局 F6.registerLayout\norder: 11\n---\n\n## F6.registerLayout(layoutName, layout)\n\n当内置布局不满足需求时，可以通过 `F6.registerLayout(layoutName, layout)` 方法自定义布局。\n\n### 参数\n\n| 名称       | 类型   | 是否必选 | 描述                                                                                                  |\n| ---------- | ------ | -------- | ----------------------------------------------------------------------------------------------------- |\n| layoutName | String | true     | 自定义布局名称。                                                                                      |\n| layout     | Object | true     | 自定义布局的配置项，配置项中包括的方法及作用具体请参考：[Layout API](/zh/docs/manual/middle/layout)。 |\n\n### 用法\n\n```javascript\nF6.registerLayout(\"layoutName\", {\n  /**\n   * 定义自定义行为的默认参数，会与用户传入的参数进行合并\n   */\n  getDefaultCfg() {\n    return {};\n  },\n  /**\n   * 初始化\n   * @param {Object} data 数据\n   */\n  init(data) {\n    const self = this;\n    self.nodes = data.nodes;\n    self.edges = data.edges;\n  },\n  /**\n   * 执行布局\n   */\n  execute() {\n    // TODO\n  },\n  /**\n   * 根据传入的数据进行布局\n   * @param {Object} data 数据\n   */\n  layout(data) {\n    const self = this;\n    self.init(data);\n    self.execute();\n  },\n  /**\n   * 更新布局配置，但不执行布局\n   * @param {Object} cfg 需要更新的配置项\n   */\n  updateCfg(cfg) {\n    const self = this;\n    Util.mix(self, cfg);\n  },\n  /**\n   * 销毁\n   */\n  destroy() {\n    const self = this;\n    self.positions = null;\n    self.nodes = null;\n    self.edges = null;\n    self.destroyed = true;\n  },\n});\n```\n\n以下方法为自定义布局时可能需要复写的方法。如果非自定义，使用内置布局方法时，以下方法由 F6 控制并调用，用户不需要了解。\n\n## 初始化\n\n### init(data)\n\n初始化布局。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述             |\n| ---- | ------ | -------- | ---------------- |\n| data | object | true     | 布局中使用的数据 |\n\n### getDefaultCfg()\n\n返回布局的默认参数。\n\n**返回值**\n\n| 名称 | 类型   | 是否必选 | 描述           |\n| ---- | ------ | -------- | -------------- |\n| cfg  | object | true     | 布局的默认参数 |\n\n## 布局\n\n### execute()\n\n执行布局算法。\n\n### layout(data)\n\n根据传入的数据进行布局。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述             |\n| ---- | ------ | -------- | ---------------- |\n| data | object | true     | 布局中使用的数据 |\n\n## 更新\n\n### updateCfg(cfg)\n\n更新布局参数。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述         |\n| ---- | ------ | -------- | ------------ |\n| cfg  | object | true     | 新的布局配置 |\n\n## 销毁\n\n### destroy()\n\n销毁布局。\n"
  },
  {
    "path": "packages/site/docs/api/shapeMethods.zh.md",
    "content": "---\ntitle: 各图形的通用方法 Shape Func\norder: 9\n---\n\n### attr()\n\n设置或获取实例的绘图属性。\n\n### attr(name)\n\n获取实例的属性值。\n\n```\nconst width = shape.attr('width');\n```\n\n### attr(name, value)\n\n更新实例的单个绘图属性。\n\n### attr({...})\n\n批量更新实例绘图属性。\n\n```\nrect.attr({\n    fill: '#999',\n    stroke: '#666'\n});\n```\n\n### setClip(clipCfg)\n\n设置并返回裁剪对象。\n\n`clipCfg` 配置项\n\n| 名称   | 含义               | 类型    | 备注                                                      |\n| ------ | ------------------ | ------- | --------------------------------------------------------- |\n| type   | 裁剪的图片形状     | String  | 支持 `'circle'`、`'rect'`、`'ellipse'`                    |\n| x      | 裁剪图形的 x 坐标  | Number  | 默认为 0，类型为 `'circle'`、`'rect'`、`'ellipse'` 时生效 |\n| y      | 裁剪图形的 y 坐标  | Number  | 默认为 0，类型为 `'circle'`、`'rect'`、`'ellipse'` 时生效 |\n| show   | 是否启用裁剪功能   | Boolean | 默认不裁剪，值为 `false`                                  |\n| r      | 剪裁圆形的半径     | Number  | 剪裁 type 为  `'circle'` 时生效                           |\n| width  | 剪裁矩形的宽度     | Number  | 剪裁 type 为 `'rect'` 时生效                              |\n| height | 剪裁矩形的长度     | Number  | 剪裁 type 为 `'rect'` 时生效                              |\n| rx     | 剪裁椭圆的长轴半径 | Number  | 剪裁 type 为 `'ellipse'` 时生效                           |\n| ry     | 剪裁椭圆的短轴半径 | Number  | 剪裁 type 为 `'ellipse'` 时生效                           |\n\n用法\n\n```javascript\nshape.setClip({\n  type: 'circle', // 支持 circle、rect、ellipse、Polygon 及自定义 path clip\n  attrs: {\n    r: 10,\n    x: 0,\n    y: 0,\n  },\n```\n\n### getClip()\n\n获取裁剪对象。\n"
  },
  {
    "path": "packages/site/docs/api/shapeProperties.zh.md",
    "content": "---\ntitle: 图形样式属性 Shape Attr\norder: 8\n---\n\n图形是组成图上一个元素（节点/边）的基本单位。节点/边的 `style` 属性即对应了各自 keyShape（关键图形）的图形属性。节点或边上标签 `labelCfg` 中的 `style` 属性对应了 text 图形的图形属性。除一些[通用属性](#通用属性)外，不同图形有各自的特殊属性。\n\n```javascript\ngroup.addShape(\"rect\", {\n  attrs: {\n    fill: \"red\",\n    shadowOffsetX: 10,\n    shadowOffsetY: 10,\n    shadowColor: \"blue\",\n    shadowBlur: 10,\n    opacity: 0.8,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"rect-shape\",\n});\n```\n\nF6 支持以下图形：\n\n- [circle](#圆图形-circle)：圆；\n- [rect](#矩形图形-rect)：矩形；\n- [ellipse](#椭圆图形-ellipse)：椭圆；\n- [polygon](#多边形图形-polygon)：多边形；\n- [image](#图片图形-image)：图片；\n- [marker](#标记图形-marker)：标记；\n- [path](#路径-path)：路径；\n- [text](#文本-text)：文本；\n- [dom(svg)](#dom-svg)：DOM（图渲染方式 `renderer` 为 `'svg'` 时可用）。\n\n## 通用属性\n\n### name\n\n<description> _String_ **required** </description>\n\n图形名称标识，必须配置。\n\n### fill\n\n<description> _String_ **optional** </description>\n\n设置用于填充绘画的颜色(RGB 或 16 进制)、[渐变](/zh/docs/manual/middle/elements/advanced-style/gradient)或模式，对应 Canvas 属性 `fillStyle` 。取值示例：`rgb(18, 150, 231)`，`#c193af`，`l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff`， `r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff`。\n\n### stroke\n\n<description> _String_ **optional** </description>\n\n设置用于笔触的颜色(RGB 或 16 进制)、[渐变](/zh/docs/manual/middle/elements/advanced-style/gradient)或模式，对应 Canvas 属性 `strokeStyle`。取值示例：`rgb(18, 150, 231)`，`#c193af`，`l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff`， `r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff`。\n\n### lineWidth\n\n<description> _Number_ **optional** </description>\n\n描边宽度。\n\n### lineDash\n\n<description> _Number | Number[]_ **optional** </description>\n\n描边虚线，Number[] 类型中数组元素分别代表实、虚长度。\n\n### shadowColor\n\n<description> _String_ **optional** </description>\n\n设置用于阴影的颜色。\n\n### shadowBlur\n\n<description> _Number_ **optional** </description>\n\n设置用于阴影的模糊级别，数值越大，越模糊。\n\n### shadowOffsetX\n\n<description> _Number_ **optional** </description>\n\n设置阴影距形状的水平距离。\n\n### shadowOffsetY\n\n<description> _Number_ **optional** </description>\n\n设置阴影距形状的垂直距离。\n\n### opacity\n\n<description> _Number_ **optional** </description>\n\n设置绘图的当前 alpha 或透明值，范围 [0, 1]，对应 Canvas 属性 `globalAlpha`。\n\n### fillOpacity\n\n<description> _Number_ **optional** </description>\n\n设置填充的 alpha 或透明值，优先级高于 opacity，范围 [0, 1]。\n\n### strokeOpacity\n\n<description> _Number_ **optional** </description>\n\n设置描边的 alpha 或透明值，优先级高于 opacity，范围 [0, 1]。\n\n### cursor\n\n<description> _String_ **optional** </description>\n\n鼠标在该节点上时的鼠标样式，[CSS 的 cursor](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor) 选项都支持。\n\n## 圆图形 Circle\n\n```javascript\ngroup.addShape(\"circle\", {\n  attrs: {\n    x: 100,\n    y: 100,\n    r: 50,\n    fill: \"blue\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"circle-shape\",\n});\n```\n\n### x\n\n<description> _Number_ **optional** </description>\n\n圆心的 x 坐标。\n\n### y\n\n<description> _Number_ **optional** </description>\n\n圆心的 y 坐标。\n\n### r\n\n<description> _Number_ **optional** </description>\n\n圆的半径。\n\n## 椭圆图形 Ellipse\n\n```javascript\ngroup.addShape(\"ellipse\", {\n  attrs: {\n    x: 100,\n    y: 100,\n    rx: 50,\n    ry: 50,\n    fill: \"blue\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"ellipse-shape\",\n});\n```\n\n### x\n\n<description> _Number_ **optional** </description>\n\n圆心的 x 坐标。\n\n### y\n\n<description> _Number_ **optional** </description>\n\n圆心的 y 坐标。\n\n### rx\n\n<description> _Number_ **optional** </description>\n\n水平半径。\n\n### ry\n\n<description> _Number_ **optional** </description>\n\n垂直半径。\n\n## 图片图形 Image\n\n```javascript\ngroup.addShape(\"image\", {\n  attrs: {\n    x: 0,\n    y: 0,\n    img: \"https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"image-shape\",\n});\n```\n\n### x\n\n<description> _Number_ **optional** </description>\n\n图片左上角的 x 坐标。\n\n### y\n\n<description> _Number_ **optional** </description>\n\n图片左上角的 y 坐标。\n\n### width\n\n<description> _Number_ **optional** </description>\n\n图片宽度。\n\n### height\n\n<description> _Number_ **optional** </description>\n\n图片高度。\n\n### img\n\n<description> _String_ **optional** </description>\n\n图片源，F6 支持多种格式的图片：url，ImageData，Image，canvas。\n\n## 标记图形 Marker\n\n```javascript\n// 使用内置 symbol\ngroup.addShape(\"marker\", {\n  attrs: {\n    x: 10,\n    y: 10,\n    r: 10,\n    symbol: \"triangle-down\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"marker-shape\",\n});\n\n// 使用路径自定义 symbol\ngroup.addShape(\"marker\", {\n  attrs: {\n    x: 10,\n    y: 10,\n    r: 10,\n    symbol: function (x, y, r) {\n      return [[\"M\", x, y], [\"L\", x + r, y + r], [\"L\", x + r * 2, y], [\"Z\"]];\n    },\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"marker-shape\",\n});\n```\n\n### x\n\n<description> _Number_ **optional** </description>\n\n标记图形左上角的 x 坐标。\n\n### y\n\n<description> _Number_ **optional** </description>\n\n标记图形左上角的 y 坐标。\n\n### r\n\n<description> _Number_ **optional** </description>\n\n形状半径。\n\n### symbol\n\n<description> _String | Function_ **optional** </description>\n\n指定形状。我们已经内置了一些常用形状，如圆形 `'circle'`，矩形  `'square'`，菱形  `'diamond'`，三角形  `'triangle'`，倒三角形 `'triangle-down'`，这些内置形状只需要直接将响应 String 赋值给 symbol。也可以是自定义的 path 路径的函数。\n\n## 多边形图形 Polygon\n\n### points\n\n```javascript\ngroup.addShape(\"polygon\", {\n  attrs: {\n    points: [\n      [30, 30],\n      [40, 20],\n      [30, 50],\n      [60, 100],\n    ],\n    fill: \"red\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"polygon-shape\",\n});\n```\n\n### points\n\n<description> _Array_ **optional** </description>\n\n多边形的所有端点坐标。\n\n## 矩形图形 Rect\n\n```javascript\ngroup.addShape(\"rect\", {\n  attrs: {\n    x: 150,\n    y: 150,\n    width: 150,\n    height: 150,\n    stroke: \"black\",\n    radius: [2, 4],\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"rect-shape\",\n});\n```\n\n### x\n\n<description> _Number_ **optional** </description>\n\n矩形左上角的 x 坐标。\n\n### y\n\n<description> _Number_ **optional** </description>\n\n矩形左上角的 y 坐标。\n\n### width\n\n<description> _Number_ **optional** </description>\n\n矩形的宽度。\n\n### height\n\n<description> _Number_ **optional** </description>\n\n矩形的高度。\n\n### radius\n\n<description> _Number | Number[]_ **optional** </description>\n\n定义圆角。支持整数或数组形式，分别对应左上、右上、右下、左下角的半径：<br />- radius 缩写为 1 或 [ 1 ] 相当于 [ 1, 1, 1, 1 ]<br />- radius 缩写为 [ 1, 2 ] 相当于 [ 1, 2, 1, 2 ]<br />- radius 缩写为 [ 1, 2, 3 ] 相当于 [ 1, 2, 3, 2 ]<br />。\n\n## 线条 Path\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 当边太细交互不易命中时，请设置 **lineAppendWidth** 属性值。\n\n```javascript\ngroup.addShape(\"path\", {\n  attrs: {\n    startArrow: {\n      // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n      path: \"M 0,0 L 20,10 L 20,-10 Z\",\n      // 箭头的偏移量，负值代表向 x 轴正方向移动\n      // d: -10,\n    },\n    endArrow: {\n      // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n      path: \"M 0,0 L 20,10 L 20,-10 Z\",\n      // 箭头的偏移量，负值代表向 x 轴正方向移动\n      // d: -10,\n    },\n    path: [\n      [\"M\", 100, 100],\n      [\"L\", 200, 200],\n    ],\n    stroke: \"#000\",\n    lineWidth: 8,\n    lineAppendWidth: 5,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"path-shape\",\n});\n```\n\n### path\n\n<description> _String | Array_ **optional** </description>\n\n线条路径，可以是 String 形式，也可以是线段的数组。格式参考：[SVG path](https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths)。\n\n### startArrow\n\n<description> _Boolean | Object_ **optional** </description>\n\n起始端的箭头，为 `true` 时为默认的箭头效果，也可以是一个自定义箭头。\n\n### endArrow\n\n<description> _Boolean | Object_ **optional** </description>\n\n末尾端的箭头，为 `true` 时为默认的箭头效果，也可以是一个自定义箭头。\n\n### lineAppendWidth\n\n<description> _Number_ **optional** </description>\n\n边的击中范围。提升边的击中范围，扩展响应范围，数值越大，响应范围越广。\n\n### lineCap\n\n<description> _String_ **optional** </description>\n\n设置线条的结束端点样式。可选：<br/> - `'bevel'`: 斜角 <br/> - `'round'`: 圆角 <br/> - `'miter'`: 尖角 (默认)。\n\n### lineJoin\n\n<description> _String_ **optional** </description>\n\n设置两条线相交时，所创建的拐角形状。可选：<br/> - `'bevel'`: 斜角 <br/> - `'round'`: 圆角 <br/> - `'miter'`: 尖角 (默认)。\n\n### lineWidth\n\n<description> _Number_ **optional** </description>\n\n设置当前的线条宽度。\n\n### miterLimit\n\n<description> _Number_ **optional** </description>\n\n设置最大斜接长度。\n\n### lineDash\n\n<description> _Number | Number[]_ **optional** </description>\n\n设置线的虚线样式，可以指定一个数组。一组描述交替绘制线段和间距（坐标空间单位）长度的数字。 如果数组元素的数量是奇数， 数组的元素会被复制并重复。例如， [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。可参考[setLineDash](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash)。\n\n## 文本 Text\n\n```javascript\ngroup.addShape(\"text\", {\n  attrs: {\n    text: \"test text\",\n    fill: \"red\",\n    fontWeight: 400,\n    shadowOffsetX: 10,\n    shadowOffsetY: 10,\n    shadowColor: \"blue\",\n    shadowBlur: 10,\n  },\n  // must be assigned in F6. it can be any value you wantPath\n  name: \"text-shape\",\n});\n```\n\n### text\n\n<description> _String_ **optional** </description>\n\n文本文字内容。\n\n### textAlign\n\n<description> _String_ **optional** </description>\n\n设置文本内容的当前对齐方式。支持的属性：`center` / `end` / `left` / `right` / `start`，默认值为 `start`。\n\n### textBaseline\n\n<description> _String_ **optional** </description>\n\n设置在绘制文本时使用的当前文本基线。支持的属性:<br />`top` / `middle` / `bottom` / `alphabetic` / `hanging`。默认值为 `bottom`。\n\n### fontStyle\n\n<description> _String_ **optional** </description>\n\n字体样式。对应 `font-style`。\n\n### fontVariant\n\n<description> _String_ **optional** </description>\n\n设置为小型大写字母字体。对应 `font-variant`。\n\n### fontWeight\n\n<description> _Number_ **optional** </description>\n\n字体粗细。对应 `font-weight`。\n\n### fontSize\n\n<description> _Number_ **optional** </description>\n\n字体大小。对应 `font-size`。\n\n### fontFamily\n\n<description> _String_ **optional** </description>\n\n字体系列。对应 `font-family`。\n\n### lineHeight\n\n<description> _Number_ **optional** </description>\n\n行高。对应 `line-height`。\n\n## DOM (svg)\n\n> 仅在 Graph 的 `renderer` 为 `'svg'` 时可以使用。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span>\n\n- 只支持原生 HTML DOM，不支持各类 react、vue 组件；\n- 使用 `'dom'` 进行自定义的节点或边，不支持 F6 的交互事件，请使用原生 DOM 的交互事件。\n\n```javascript\ngroup.addShape(\"dom\", {\n  attrs: {\n    width: cfg.size[0],\n    height: cfg.size[1],\n    // DOM's html\n    html: `\n    <div style=\"background-color: #fff; border: 2px solid #5B8FF9; border-radius: 5px; width: ${\n      cfg.size[0] - 5\n    }px; height: ${cfg.size[1] - 5}px; display: flex;\">\n      <div style=\"height: 100%; width: 33%; background-color: #CDDDFD\">\n        <img alt=\"img\" style=\"line-height: 100%; padding-top: 6px; padding-left: 8px;\" src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\" width=\"20\" height=\"20\" />  \n      </div>\n      <span style=\"margin:auto; padding:auto; color: #5B8FF9\">${\n        cfg.label\n      }</span>\n    </div>\n      `,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"dom-shape\",\n  draggable: true,\n});\n```\n\n### html\n\n<description> _String_ **optional** </description>\n\nDOM 的 HTML 值。\n"
  },
  {
    "path": "packages/site/docs/api/treeGraphLayout/compactBox.zh.md",
    "content": "---\ntitle: CompactBox 紧凑树\norder: 1\n---\n\n紧凑盒树布局。这是树图的默认布局，其特点是布局时统合考虑每个树节点的包围盒，由经典的 <a href='http://emr.cs.iit.edu/~reingold/tidier-drawings.pdf' target='_blank'>Reingold–Tilford tidy 布局算法</a>演进而来，适合于脑图等应用场景。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*z-ESRoHTpvIAAAAAAAAAAABkARQnAQ' width=650 alt='img'/>\n\n### layoutCfg.direction\n\n**类型**：String<br />**可选值**：'LR' | 'RL' | 'TB' | 'BT' | 'H' | 'V'<br />**默认值**：'LR'<br />**是否必须**：false<br />**说明**：树布局的方向，其他选项说明\n\n- TB —— 根节点在上，往下布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*KrAqTrFbNjMAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n- BT —— 根节点在下，往上布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*vNmOTJ4q0uwAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n- LR —— 根节点在左，往右布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ffD6S74MXw4AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n- RL —— 根节点在右，往左布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*vTg2SJbtj_sAAAAAAAAAAABkARQnAQ' width=60 alt='img'/>\n\n- H —— 根节点在中间，水平对称布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*0GsIQISvieYAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n- V —— 根节点在中间，垂直对称布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*E0c8TIYRPYoAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n### layoutCfg.getSide\n\n**类型**: Function<br />**类型**:\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"test-child-id\") return \"right\";\n  return \"left\";\n};\n```\n\n**默认值**: 'right'<br />**是否必须**: false<br />**说明**: 节点排布在根节点的左侧/右侧。若设置了该值，则所有节点会在根节点同一侧，即 direction = 'H' 不再起效。若该参数为回调函数，则可以指定每一个节点在根节点的左/右侧。\n\n### layoutCfg.getId\n\n**类型**: Function<br />**示例**:\n\n```javascript\n(d) => {\n  // d is a node\n  return d.id + \"_node\";\n};\n```\n\n**是否必须**: false<br />**说明**: 节点 id 的回调函数\n\n### layoutCfg.getWidth\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**是否必须**：false<br />**说明**：每个节点的宽度\n\n### layoutCfg.getHeight\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**是否必须**：false<br />**说明**：每个节点的高度\n\n### layoutCfg.getHGap\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**默认值**：18<br />**是否必须**：false<br />**说明**：每个节点的水平间隙\n\n### layoutCfg.getVGap\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**默认值**：18<br />**是否必须**：false<br />**说明**：每个节点的垂直间隙\n\n### layoutCfg.radial\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否按照辐射状布局。若 `radial` 为 `true`，建议 `direction` 设置为 `'LR'` 或 `'RL'`：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*E0c8TIYRPYoAAAAAAAAAAABkARQnAQ' width=200 alt='img'/>\n"
  },
  {
    "path": "packages/site/docs/api/treeGraphLayout/dendrogram.zh.md",
    "content": "---\ntitle: Dendrogram 生态树\norder: 2\n---\n\n<a href='https://en.wikipedia.org/wiki/Dendrogram' target='_blank'>生态树</a>布局的特点是所有子节点布局在同一层级，不考虑节点大小，每个节点被当成 1px 处理。适用于表示层次聚类。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zX7tSLqBvwcAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n### layoutCfg.direction\n\n**类型**：String<br />**可选值**：'LR' | 'RL' | 'TB' | 'BT' | 'H' | 'V'<br />**默认值**：'LR'<br />**是否必须**：false<br />**说明**：树布局的方向，默认为 `'LR'`，其他选项说明\n\n- TB —— 根节点在上，往下布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*krAnRrLTEnEAAAAAAAAAAABkARQnAQ' width=115 alt='img'/>\n\n- BT —— 根节点在下，往上布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*0HRyS64i7QoAAAAAAAAAAABkARQnAQ' width=115 alt='img'/>\n\n- LR —— 根节点在左，往右布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*T5KZTJdA2OUAAAAAAAAAAABkARQnAQ' width=55 alt='img'/>\n\n- RL —— 根节点在右，往左布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*q7QJQ5RbQ5kAAAAAAAAAAABkARQnAQ' width=55 alt='img'/>\n\n- H —— 根节点在中间，水平对称布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*tzIfRJ5CuR8AAAAAAAAAAABkARQnAQ' width=85 alt='img'/>\n\n- V —— 根节点在中间，垂直对称布局\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*B9sjToOzCiAAAAAAAAAAAABkARQnAQ' width=115 alt='img'/>\n\n### layoutCfg.nodeSep\n\n**类型**：Number<br />**默认值**：0<br />**是否必须**：false<br />**说明**：节点间距\n\n### layoutCfg.rankSep\n\n**类型**：Number<br />**默认值**：0<br />**是否必须**：false<br />**说明**：层与层之间的间距\n\n### layoutCfg.radial\n\n**类型**：Boolean<br />**默认值**：false<br />**是否必须**：false<br />**说明**：是否按照辐射状布局。若 `radial` 为 `true`，建议 `direction` 设置为 `'LR'` 或 `'RL'`：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AhopQI5j-bcAAAAAAAAAAABkARQnAQ' width=175 alt='img'/>\n"
  },
  {
    "path": "packages/site/docs/api/treeGraphLayout/guide.zh.md",
    "content": "---\ntitle: 导览及使用\norder: 0\n---\n\n## 树图布局总览\n\n与 [Graph 的布局](/zh/docs/api/graphLayout/guide) 类似，F6 为树图 TreeGraph 提供了一些内置布局算法。可以在[实例化图时配置](#使用方法)。与 [Graph 的布局](/zh/docs/api/graphLayout/guide) 不同的是：\n\n- 实例化树图时必须通过配置 `layout` 配置布局，而 Graph 不配置 `layout` 时将会使用数据中的位置信息或随机布局；\n- 树图布局不支持独立使用；\n- 树图布局不支持自定义。\n\n注意，Graph 布局与 TreeGaph 布局相互不通用。\n\nF6 的内置树图布局有：\n\n- [CompactBox 紧凑树布局](./compactBox)\n- [Dendrogram 生态树布局](./dendrogram)\n- [Indented 缩进树布局](./indented)\n- [Mindmap 脑图树布局](./mindmap)\n\n## 使用方法\n\n```javascript\nconst graph = new F6.TreeGraph({\n  // ...                      // 其他配置项\n  layout: {                // Object，对于 TreeGraph 为必须字段\n    type: 'dendrogram',\n    ...                    // 布局的其他配置\n  }\n});\n```\n\n每种布局方法的配置项不尽相同，具体参见本目录下每种布局的 API。\n\n## 通用配置项\n\n| 名称        | 类型     | 默认值     | 描述                                                                                                            |\n| ----------- | -------- | ---------- | --------------------------------------------------------------------------------------------------------------- |\n| type        | String   | dendrogram | 布局类型，支持 dendrogram、compactBox、mindmap 和 indeted。                                                     |\n| direction   | String   | LR         | 布局方向，有  `LR` , `RL` , `TB` , `BT` , `H` , `V`  可选。<br />L：左；R：右；T：上；B：下；H：垂直；V：水平。 |\n| getChildren | Function |            | 返回当前节点的所有子节点                                                                                        |\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 当 `type='indeted'` 时，`direction` 只能取 `'LR'`、`'RL'` 和 `'H'` 这三个值。\n"
  },
  {
    "path": "packages/site/docs/api/treeGraphLayout/indented.zh.md",
    "content": "---\ntitle: Indented 缩进树\norder: 3\n---\n\n缩进树布局。树节点的层级通过水平方向的缩进量来表示。每个元素会占一行/一列。常用场景是文件目录结构。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NBUzRonaOYMAAAAAAAAAAABkARQnAQ' width=175 alt='img'/>\n\n### layoutCfg.direction\n\n**类型**：String<br />**可选值**：'LR' | 'RL' | 'H'<br />**默认值**：'LR'<br />**是否必须**：false<br />**说明**：树布局的方向，默认为 `'LR'`，其他选项说明：\n\n- LR —— 根节点在左，往右布局（下图左）<br />\n- RL —— 根节点在右，往左布局（下图中）<br />\n- H —— 根节点在中间，水平对称布局（下图右）\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mq6YSIKrAt0AAAAAAAAAAABkARQnAQ' width=110 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VGEnRbpvxlUAAAAAAAAAAABkARQnAQ' width=90 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Vek6RqtUXNcAAAAAAAAAAABkARQnAQ' width=160 alt='img'/>\n\n> （左）LR。（中）RL。（右）H。\n\n### layoutCfg.indent\n\n**类型**：Number<br />**默认值**：20<br />**是否必须**：false<br />**说明**：列间间距\n\n### layoutCfg.getWidth\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**是否必须**：false<br />**说明**：每个节点的宽度，`direction` 为 `'H'` 时有效\n\n### layoutCfg.getHeight\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**是否必须**：false<br />**说明**：每个节点的高度\n\n### layoutCfg.getSide\n\n**类型**：Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return \"left\";\n  return \"right\";\n};\n```\n\n### layoutCfg.dropCap\n\n**类型**：Boolean\n\n<br />\n\n**是否必须**：false\n\n<br />**说明**：每个节点的第一个自节点是否位于下一行。默认为 `true`\n\n**是否必须**：false<br />**说明**：节点放置在根节点左侧或右侧的回调函数，仅对与根节点直接相连的节点有效，设置后将会影响被设置节点的所有子孙节点。\n"
  },
  {
    "path": "packages/site/docs/api/treeGraphLayout/mindmap.zh.md",
    "content": "---\ntitle: Mindmap 脑图树\norder: 4\n---\n\n深度相同的节点将会被放置在同一层，与 compactBox 不同的是，布局不会考虑节点的大小。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*J1l5RofvbP0AAAAAAAAAAABkARQnAQ' width=350 alt='img'/>\n\n### layoutCfg.direction\n\n**类型**：String<br />**可选值**：'H' | 'V'<br />**默认值**：'H'<br />**是否必须**：false<br />**说明**：树布局的方向，默认为 `'H'`，其他选项说明\n\n- H：horizontal（水平）—— 根节点的子节点分成两部分横向放置在根节点左右两侧\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*J1l5RofvbP0AAAAAAAAAAABkARQnAQ' width=170 alt='img'/>\n\n- V：vertical （竖直）—— 将根节点的所有孩子纵向排列\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AD0GTaNT5cQAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n### layoutCfg.getWidth\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**是否必须**：false<br />**说明**：每个节点的宽度\n\n### layoutCfg.getHeight\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**是否必须**：false<br />**说明**：每个节点的高度\n\n### layoutCfg.getHGap\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**默认值**：18<br />**是否必须**：false<br />**说明**：每个节点的水平间隙\n\n### layoutCfg.getVGap\n\n**类型**：Number | Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"testId\") return 50;\n  return 100;\n};\n```\n\n**默认值**：18<br />**是否必须**：false<br />**说明**：每个节点的垂直间隙\n\n### layoutCfg.getSide\n\n**类型**：Function<br />**示例**：\n\n```javascript\n(d) => {\n  // d 是一个节点\n  if (d.id === \"test-child-id\") return \"right\";\n  return \"left\";\n};\n```\n\n**默认值**：'right'<br />**是否必须**：false<br />**说明**：节点排布在根节点的左侧/右侧。若设置了该值，则所有节点会在根节点同一侧，即 direction = 'H' 不再起效。若该参数为回调函数，则可以指定每一个节点在根节点的左/右侧。\n"
  },
  {
    "path": "packages/site/docs/api/treeMethods.zh.md",
    "content": "---\ntitle: TreeGraph 实例方法\norder: 4\n---\n\n### data()\n\n### addChild(data, parent)\n\n在指定的父节点下添加子树。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 将会直接使用 `data` 对象作为新增节点/边的数据模型，F6 内部可能会对其增加或修改一些必要的字段。若不希望原始参数被修改，建议在使用深拷贝后的 `data`。\n\n**参数**\n\n| 名称   | 类型   | 是否必选 | 描述       |\n| ------ | ------ | -------- | ---------- | ----------------- |\n| data   | Object | true     | 子树的数据 |\n| parent | Node   | String   | true       | 父节点或父节点 ID |\n\n**用法**\n\n```javascript\nconst data = {\n  id: 'sub1',\n  children: [\n    {\n      id: 'subTree1',\n      children: [...]\n    },\n    {\n      id: 'subTree2',\n      children: [...]\n    }\n  ]\n};\n\ntreeGraph.addChild(data, 'root')\n```\n\n### updateChild(data, parentId)\n\n更新数据，差量更新子树。data 是一个子树数据。若该子树的根节点不存在与当前树数据中，将该子树添加到 parentId 节点的子节点中。若该子树的根节点已经存在，则更新该子树数据。若希望更新或增加 parentId 节点下所有子节点，请使用 [updateChildren]()。二者区别图示如下： <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2_78TIFt7OoAAAAAAAAAAAAAARQnAQ' alt='img' width=400 /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*h2PkRKunMokAAAAAAAAAAAAAARQnAQ' alt='img' width=400 />\n\n**参数**\n\n| 名称     | 类型     | 是否必选 | 描述       |\n| -------- | -------- | -------- | ---------- |\n| data     | TreeData | true     | 子树的数据 |\n| parentId | String   | false    | 父节点 ID  |\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 当 `parentId` 参数为空时，则全量更新。\n\n**用法**\n\n```javascript\nconst data = {\n  id: 'sub1',\n  children: [\n    {\n      id: 'subTree1',\n      children: [...]\n    },\n    {\n      id: 'subTree2',\n      children: [...]\n    }\n  ]\n};\n\ntreeGraph.updateChild(data, 'root')\n```\n\n### updateChildren(data, parentId)\n\n更新数据，差量更新子树中的所有子节点。data 是一个子树数据数组。若希望更新或增加一个 parentId 节点的子节点，请使用 [updateChild]()。二者区别图示如下： <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2_78TIFt7OoAAAAAAAAAAAAAARQnAQ' alt='img' width=400 /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*h2PkRKunMokAAAAAAAAAAAAAARQnAQ' alt='img' width=400 />\n\n**参数**\n\n| 名称     | 类型       | 是否必选 | 描述           |\n| -------- | ---------- | -------- | -------------- |\n| data     | TreeData[] | true     | 子树的数据数组 |\n| parentId | String     | true     | 父节点 ID      |\n\n**用法**\n\n```javascript\nconst data = [\n  {\n    id: 'subTree1',\n    children: [...]\n  },\n  {\n    id: 'subTree2',\n    children: [...]\n  }\n];\n\ntreeGraph.updateChildren(data, 'root')\n```\n\n### removeChild(id)\n\n删除指定的子树。\n\n**参数**\n\n| 名称 | 类型   | 是否必选 | 描述              |\n| ---- | ------ | -------- | ----------------- |\n| id   | String | true     | 要删除的子树的 ID |\n\n**用法**\n\n```javascript\ntreeGraph.removeChild(\"sub\");\n```\n\n## 布局\n\n### changeLayout(layout)\n\n更改并应用指定的布局。\n\n**参数**\n\n| 名称   | 类型   | 是否必选 | 描述                               |\n| ------ | ------ | -------- | ---------------------------------- |\n| layout | Object | false    | 指定的布局配置，如不传，则不做变更 |\n\n**用法**\n\n```javascript\nconst layout = {\n  type: \"mindmap\",\n  dirction: \"H\",\n  getSubTreeSep: () => 20,\n  getVGap: () => 25,\n  getHeight: () => 30,\n  getWidth: () => 30,\n};\ntreeGraph.changeLayout(layout);\n```\n\n### layout(fitView)\n\n数据变更后，重新布局，刷新视图，并更新到画布。v4.x 废弃了 `refreshLayout`，请使用 `layout` 替代。\n\n**参数**\n\n| 名称    | 类型    | 是否必选 | 描述                           |\n| ------- | ------- | -------- | ------------------------------ |\n| fitView | Boolean | false    | 更新布局后，是否需要自适应窗口 |\n\n**用法**\n\n```javascript\ntreeGraph.layout(true);\n```\n\n## 查找\n\n### findDataById(id, target)\n\n根据指定的 ID 获取对应的源数据。\n\n**参数**\n\n| 名称   | 类型   | 是否必选 | 描述                                         |\n| ------ | ------ | -------- | -------------------------------------------- |\n| id     | String | true     | 指定的元素 ID                                |\n| target | Object | false    | 从指定的节点开始查找，为空时从根节点开始查找 |\n\n**返回值**\n\n- 返回值类型：Object；\n- 返回值为查找到的节点的源数据。\n\n**用法**\n\n```javascript\nconst target = {\n\tid: 'sub1',\n  children: [...]\n}\n\n// 从 target 节点开始查找 sub1.1 节点\nconst subData = treeGraph.findDataById('sub1.1', target)\n\n// 从根节点开始查找 sub1.1 节点\nconst subData = treeGraph.findDataById('sub1.1')\n```\n"
  },
  {
    "path": "packages/site/docs/examples/algorithm/algoDemos/index.zh.md",
    "content": "---\ntitle: 算法示例\norder: 1\n---\n\nF6 提供了一系列图算法，为分析复杂数据提供强有力辅助。\n\n## 使用指南\n\n更多信息请参见 API 文档 [算法](/zh/docs/api/Algorithm)。\n"
  },
  {
    "path": "packages/site/docs/examples/case/customTree/decisiontree.zh.md",
    "content": "---\ntitle: 决策树\norder: 0\n---\n\n### 定义\n\n决策树是在已知各种情况的基础上，通过事项构建树状图，根据自己的上下级进行关联，挂接到对应的分支，常用于项目风险评估，可行性的决策分析等场景，是直观运用概率分析的一种图解法。支持展开、收起、悬停、点击等交互。\n\n### 何时使用\n\n一般用于决策分析场景，在金融领域，用于展示资金流向、月环比、同比等，助力高管进行决策，挖掘机会，各个分支通过不同形态展示当前节点的状态，可对关键指标进行预警、监控等操作。也常用于降本增收场景，指标展示各类降本渠道、以及运营渠道，通过分析各渠道之间的关系以及实际降本额进行渠道决策。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_decisiontree?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/customTree/knowledgetreegraph.zh.md",
    "content": "---\ntitle: 知识图谱树图\norder: 1\n---\n\n### 定义\n\n树图是一种流行的利用包含关系表达层次化数据的可视化方法。由于其呈现数据时高效的空间利用率和良好的交互性，受到众多的关注，得到深入的研究，并在科学、社会学、工程、商业等领域都得到了广泛的应用。树图能将事物或现象分解成树枝状，又称树型图或系统图。树图就是把要实现的目的与需要采取的措施或手段，系统地展开，并绘制成图，以明确问题的重点，寻找最佳手段或措施。\n\n### 何时使用\n\n- 当主题已知并且泛泛地给出，需要将其转化为具体细节时；\n- 当寻求达成一个目标的合理步骤时；\n- 当策划实行一个方案或其他计划的具体行动时；\n- 当对过程进行详细的分析时；\n- 当探究问题的根本原因时；\n- 当评估解决问题的几个可能方案时；\n- 当亲和图或关联图不能揭示关键问题时；\n- 当作为向其他人说明具体细节的交流工具时。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_knowledgetreegraph?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/newsDemo/index.zh.md",
    "content": "---\ntitle: 场景案例\norder: 1\n---\n\n对于一些定制化比较强的需求，使用 F6 内置的节点和边很难实现。下面的资金流向图是通过自定义节点和边的方式实现的。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_customflow?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/newsDemo/metroline.zh.md",
    "content": "---\ntitle: 地铁线路图\norder: 1\n---\n\n### 地铁线路图\n\n基于 F6 实现的地铁线路图。演示自定义带动画的边以实现地铁线路的流动效果。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_metrolines?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/simpleCase/customflow.zh.md",
    "content": "---\ntitle: 自定义流向图\norder: 1\n---\n\n对于一些定制化比较强的需求，使用 F6 内置的节点和边很难实现。下面的资金流向图是通过自定义节点和边的方式实现的。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_customflow?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/simpleCase/donuttransfer.zh.md",
    "content": "---\ntitle: 甜甜圈转账图\norder: 4\n---\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_donuttransfer?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/simpleCase/mindmap.zh.md",
    "content": "---\ntitle: 思维导图\norder: 3\n---\n\n思维导图是一种将思维形象化的方法。我们知道放射性思考是人类大脑的自然思考方式，每一种进入大脑的资料，不论是感觉、记忆或是想法——包括文字、数字、符码、香气、食物、线条、颜色、意象、节奏、音符等，都可以成为一个思考中心，并由此中心向外发散出成千上万的关节点，每一个关节点代表与中心主题的一个连结，而每一个连结又可以成为另一个中心主题，再向外发散出成千上万的关节点，呈现出放射性立体结构。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_mindmap?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/case/simpleCase/sankey.zh.md",
    "content": "---\ntitle: 桑基图\norder: 2\n---\n\n桑基图 (Sankey Diagram) 用来显示流向和数量（彼此之间的比例）。箭头或线的宽度用于显示大小，因此箭头越大，流量也越大。在每个流程阶段中，流向箭头或线可以组合在一起，或者往不同路径各自分开。我们可用不同颜色来区分图表中的不同类别，或表示从一个阶段到另一个阶段的转换。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_scenecase_sankey?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/gallery/gallery.zh.md",
    "content": "---\ntitle: 所有图表\norder: -1\n---\n\n## 自定义树图\n\n### [决策树](/zh/docs/examples/case/customTree)\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HS5gQ6yCiL4AAAAAAAAAAAAAARQnAQ\">\n\n### [知识图谱树](/zh/docs/examples/case/customTree#知识图谱树图)\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2J5YTbvU5FoAAAAAAAAAAAAAARQnAQ\">\n\n## 新闻图可视化\n\n### 地铁线路图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1MS4TbqujQAAAAAAAAAAAABkARQnAQ\">\n\n## 经典案例\n\n### 图表决策\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wvofQ6DuC0YAAAAAAAAAAABkARQnAQ\">\n\n### 自定义流向图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1AZTQ4oSPowAAAAAAAAAAABkARQnAQ\">\n\n### 桑基图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/zos/antfincdn/4bsADvWhSB/xiazai%252520%2811%29.png\">\n\n### 思维导图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/zos/antfincdn/N5tGvsqQR9/xiazai%252520%2812%29.png\">\n\n### 节点内容可滚动的 ER 图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/zos/antfincdn/H9Bs25IFet/xiazai%252520%2813%29.png\">\n\n### 聚类的折叠/扩展\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yU5sRLivdLIAAAAAAAAAAABkARQnAQ\">\n\n### 甜甜圈转账图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YK6yRIfKQaIAAAAAAAAAAAAAARQnAQ\">\n\n## 紧凑树\n\n### 紧凑树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*XlXOR5pmM3oAAAAAAAAAAABkARQnAQ\">\n\n### 至上而下的紧凑树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*KrAqTrFbNjMAAAAAAAAAAABkARQnAQ\">\n\n### 节点左对齐的紧凑树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*b3G-QZZekE8AAAAAAAAAAABkARQnAQ\">\n\n## 生态树\n\n### 生态树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ffD6S74MXw4AAAAAAAAAAABkARQnAQ\">\n\n### 至上而下的生态树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*nTKmRKkyUVUAAAAAAAAAAABkARQnAQ\">\n\n## 脑图树\n\n### 脑图树-子节点自动两侧分布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wRZjTL3fCbEAAAAAAAAAAABkARQnAQ\">\n\n### 脑图树-子节点右侧分布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*W6OGRLg2UJcAAAAAAAAAAABkARQnAQ\">\n\n### 脑图树-子节点左侧分布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NNUaTaN9yIgAAAAAAAAAAABkARQnAQ\">\n\n### 脑图树-自定义子节点分布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Su39QqQr9PYAAAAAAAAAAABkARQnAQ\">\n\n## 缩进树\n\n### 缩进树-文件系统\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*PJnfTKFRaCAAAAAAAAAAAABkARQnAQ\">\n\n### 缩进树-顶部对齐\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kbzRRZk2t2cAAAAAAAAAAABkARQnAQ\">\n\n### 缩进树-子节点两侧分布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*42EXSYyBcTYAAAAAAAAAAABkARQnAQ\">\n\n## 辐射树\n\n### 生态辐射树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mS3_Rb4VuPoAAAAAAAAAAABkARQnAQ\">\n\n### 紧凑辐射树\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*xENwSLuyTZ4AAAAAAAAAAABkARQnAQ\">\n\n## 定制树图元素样式\n\n### 自定义树图中的边\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AncCQ5e7XncAAAAAAAAAAABkARQnAQ\">\n\n### 树图边上的标签\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*LtTbS4D59H4AAAAAAAAAAABkARQnAQ\">\n\n### 自定义复杂树图样式\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*D8kzQYHaUiIAAAAAAAAAAABkARQnAQ\">\n\n## 力导向图布局\n\n### 基本力导向布局及节点拖拽\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Ce2WSIlo_fcAAAAAAAAAAABkARQnAQ\">\n\n### 基本 Force Atlas 2\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MqwAQZLIVPwAAAAAAAAAAAAAARQnAQ\">\n\n### 力导向布局防止节点重叠\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9VXcQLLyzHgAAAAAAAAAAABkARQnAQ\">\n\n### 力导向布局聚类\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*xonLSopPjKUAAAAAAAAAAAAAARQnAQ\">\n\n### 定制不同节点的参数\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SnVUQbXv7JAAAAAAAAAAAABkARQnAQ\">\n\n### 固定被拖拽节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*0qLJQaRFg90AAAAAAAAAAABkARQnAQ\">\n\n### 力导向布局参数动态变化\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IyK7T5MkVqUAAAAAAAAAAABkARQnAQ\">\n\n### 力导向气泡图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*prZhSI341hUAAAAAAAAAAABkARQnAQ\">\n\n### 约束在范围内布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-4H8SaV8QKwAAAAAAAAAAABkARQnAQ\">\n\n### GForce 固定被拖拽的节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YMwnTbT9NnQAAAAAAAAAAAAAARQnAQ\">\n\n## Dagre 流程图布局\n\n### Dagre 流程图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2uMmRo5wYPUAAAAAAAAAAABkARQnAQ\">\n\n### 带有 Combo 的流程图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*94EUTJ8l2QAAAAAAAAAAAABkARQnAQ\">\n\n### 自左向右的 Dagre 上对齐\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*LJpmR4G7J3YAAAAAAAAAAABkARQnAQ\">\n\n### 自左向右的 Dagre\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pdaxTpV1R0EAAAAAAAAAAABkARQnAQ\">\n\n### Dagre 布局参数动态变化\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VkwOTL2UyN0AAAAAAAAAAABkARQnAQ\">\n\n## Fruchterman 图布局\n\n### 基本 Fruchterman 布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1KY7SLEXxqMAAAAAAAAAAABkARQnAQ\">\n\n### Fruchterman 聚类布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*WO1OTbNE_ugAAAAAAAAAAABkARQnAQ\">\n\n### Fruchterman 布局参数动态变化\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*W9MoQoKaQbYAAAAAAAAAAABkARQnAQ\">\n\n### Fruchterman 固定被拖拽的节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*fQNPRKHPJRMAAAAAAAAAAAAAARQnAQ\">\n\n## Radial 辐射布局\n\n### 基本 Radial 辐射布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Ec_WQ5hqVsgAAAAAAAAAAABkARQnAQ\">\n\n### 防止节点重叠的严格辐射布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GAFjRJeAoAsAAAAAAAAAAABkARQnAQ\">\n\n### 防止节点重叠的非严格辐射布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*X8rzTZyWwUcAAAAAAAAAAABkARQnAQ\">\n\n### 交互扩展节点的辐射布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*F4OQQKc8l2IAAAAAAAAAAABkARQnAQ\">\n\n### Radial 布局参数动态变化\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ikctQb9KECAAAAAAAAAAAABkARQnAQ\">\n\n### 同层节点按照指定字段聚类\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*gzfTQKBB62IAAAAAAAAAAABkARQnAQ\">\n\n## Circular 环形布局\n\n### 基本 Circular 布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ZSuXQ4PS2F8AAAAAAAAAAABkARQnAQ\">\n\n### 按照节点度数排序的 Circular 布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MOEeS6ooB7AAAAAAAAAAAABkARQnAQ\">\n\n### 螺旋线布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bY0iSqTc3z4AAAAAAAAAAABkARQnAQ\">\n\n### 分割环形布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*u30nQahg6q0AAAAAAAAAAABkARQnAQ\">\n\n### Circular 布局参数动态变化\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*D85cS7-yqNEAAAAAAAAAAABkARQnAQ\">\n\n## Grid 网格布局\n\n### 基本 Grid 网格布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Oh6mRLVEBBIAAAAAAAAAAABkARQnAQ\">\n\n### 指定排序方式的网格布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*_ABKTptHoKoAAAAAAAAAAABkARQnAQ\">\n\n## Concentric 同心圆布局\n\n### 基本 Concentric 同心圆布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*QpyPTbBpO2AAAAAAAAAAAABkARQnAQ\">\n\n## MDS 布局\n\n### 基本 MDS 布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aUS7TJR2NHcAAAAAAAAAAABkARQnAQ\">\n\n## Arc Diagram 弧线图\n\n### 基本弧线图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*_eivQrJXt8sAAAAAAAAAAABkARQnAQ\">\n\n### 环形弧线图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*o-tESYnAAJYAAAAAAAAAAABkARQnAQ\">\n\n## Combo 力导布局\n\n### 基本 Combo 力导向布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GK34T7F1_CYAAAAAAAAAAABkARQnAQ\">\n\n## 布局机制\n\n### 布局切换\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eZRNQ4tpkecAAAAAAAAAAAAAARQnAQ\">\n\n### 子图布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*dsOISrH6tREAAAAAAAAAAABkARQnAQ\">\n\n### 流水线子图布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SQijSogATDAAAAAAAAAAAAAAARQnAQ\">\n\n### 数据动态切换\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VIXvQagCETkAAAAAAAAAAABkARQnAQ\">\n\n### 自定义二分图布局\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Vod0Q6u5dSoAAAAAAAAAAABkARQnAQ\">\n\n### 布局时机监听\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*tdRuSbgJAZ8AAAAAAAAAAABkARQnAQ\">\n\n## 内置节点\n\n### 圆形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*8QIsS5rud6oAAAAAAAAAAABkARQnAQ\">\n\n### 甜甜圈\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NRJ7RpkMPNsAAAAAAAAAAAAAARQnAQ\">\n\n### 椭圆\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*tWyKToNjzWMAAAAAAAAAAABkARQnAQ\">\n\n### 矩形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pnaTQYJ3kaQAAAAAAAAAAABkARQnAQ\">\n\n### 模态矩形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w4kQSYQ9djQAAAAAAAAAAABkARQnAQ\">\n### 模态菱形矩形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6XXCTZxhib0AAAAAAAAAAABkARQnAQ\">\n\n### 五角星\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-unkSZtlDeAAAAAAAAAAAABkARQnAQ\">\n\n### 三角形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*i2tETYnJ0dIAAAAAAAAAAABkARQnAQ\">\n\n### 图片\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*o-MuTpQaj7EAAAAAAAAAAABkARQnAQ\">\n\n## 内置边\n\n### 折线 1\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*tGX6S5r94wkAAAAAAAAAAABkARQnAQ\">\n\n### 折线 2\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*CA7oQJIkIl8AAAAAAAAAAABkARQnAQ\">\n\n### 折线 3\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*E-MJQqf9mSUAAAAAAAAAAABkARQnAQ\">\n\n### 三次贝塞尔曲线-垂直\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*UO_sQp0XftMAAAAAAAAAAABkARQnAQ\">\n\n### 三次贝塞尔曲线-水平\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*LxFySJ-uvhMAAAAAAAAAAABkARQnAQ\">\n\n### 弧线\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*xkK6QoNUszgAAAAAAAAAAABkARQnAQ\">\n\n### 自环边\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*W8wxRJk_q8wAAAAAAAAAAABkARQnAQ\">\n\n## 内置 Combo\n\n### 圆形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Rvx9SYSHGsIAAAAAAAAAAABkARQnAQ\">\n\n### 矩形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*qvmVTZc-iNcAAAAAAAAAAABkARQnAQ\">\n\n## 边的箭头\n\n### 默认和内置箭头\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mGusTo9FcCYAAAAAAAAAAABkARQnAQ\">\n\n### 自定义箭头\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*C2ODRb7E9mwAAAAAAAAAAABkARQnAQ\">\n\n## 自定义节点\n\n### 卡片\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*3cRGRb5nB_UAAAAAAAAAAABkARQnAQ\">\n\n### 卡片 2\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*b-g0RoOpI3sAAAAAAAAAAABkARQnAQ\">\n\n### 使用 JSX 自定义节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NcHWTKo3sEoAAAAAAAAAAAAAARQnAQ\">\n\n### 使用 JSX 自定义节点(带动画)\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*XfMbSZSrlREAAAAAAAAAAAAAARQnAQ\">\n\n### 节点中嵌入 G2 的折线图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ZmavSL0dRJIAAAAAAAAAAAAAARQnAQ\">\n\n### 节点中嵌入 G2 的柱状图，点击节点可切换数据\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*D00uR5wb__kAAAAAAAAAAABkARQnAQ\">\n\n### 节点中嵌入 G2 的散点图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*K7r7S7x-YhcAAAAAAAAAAAAAARQnAQ\">\n\n### 节点中嵌入 G2 的饼图\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wCxXSK4eWPoAAAAAAAAAAAAAARQnAQ\">\n\n### DOM 节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VgQlQK1MdbIAAAAAAAAAAABkARQnAQ\">\n\n### 使用 G 自定义的面积图节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YWuhR5ZjZfkAAAAAAAAAAABkARQnAQ\">\n\n### 使用 G 自定义的堆叠图节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*giZSRafSctgAAAAAAAAAAABkARQnAQ\">\n\n### 使用 G 自定义的折线图节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mKmaTIBtVAUAAAAAAAAAAABkARQnAQ\">\n\n### 使用 G 自定义的南丁格尔图节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lX3gRZWvbp4AAAAAAAAAAABkARQnAQ\">\n\n### 使用 G 自定义的点线图节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*M0ycSarMV2sAAAAAAAAAAABkARQnAQ\">\n\n### 使用 G 自定义的饼图节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*idENQpnwA1sAAAAAAAAAAABkARQnAQ\">\n\n### 列表\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pxKjQ5dZx80AAAAAAAAAAABkARQnAQ\">\n\n## 自定义边\n\n### 添加额外图形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*L4rZQbqwaRYAAAAAAAAAAAAAARQnAQ\">\n\n### 自定义折线\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FuS3Qq_lDiIAAAAAAAAAAABkARQnAQ\">\n\n### 自定义折线 2\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ACNnQLPy20EAAAAAAAAAAABkARQnAQ\">\n\n### 多标签边\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*01YORI5jRp8AAAAAAAAAAABkARQnAQ\">\n\n## 自定义 Combo\n\n### 带有 Marker 的 Circle\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1LelSq5TP9EAAAAAAAAAAABkARQnAQ\">\n\n### 带有 Marker 的 Rect\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rQGaT4kiaYoAAAAAAAAAAABkARQnAQ\">\n\n## 超长文本\n\n### 文本超长\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FNzAQKvcW1kAAAAAAAAAAABkARQnAQ\">\n\n### 使用换行符处理文本超长\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EC0-R7tAn0MAAAAAAAAAAABkARQnAQ\">\n\n## 设置文本背景\n\n### 设置节点文本背景\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*m5ABT5ra4w4AAAAAAAAAAABkARQnAQ\">\n\n### 设置边上文本背景\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w_bNSZTlPXUAAAAAAAAAAABkARQnAQ\">\n\n## 两节点间存在多条边\n\n### 两节点间存在多条边\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*g2p_Qa_wZcIAAAAAAAAAAABkARQnAQ\">\n\n## 高亮相邻节点\n\n### 内置的高亮节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*A3iMQo8L_McAAAAAAAAAAABkARQnAQ\">\n\n### 自定义高亮\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*A3iMQo8L_McAAAAAAAAAAABkARQnAQ\">\n\n## 自定义树图交互\n\n### 拖拽子树改变结构\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EU_yRa8hMJUAAAAAAAAAAABkARQnAQ\">\n\n### 合并同类兄弟节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ugs9Qad-bQMAAAAAAAAAAAAAARQnAQ\">\n\n### 使用 changeData\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wc1-QaqOPsgAAAAAAAAAAABkARQnAQ\">\n\n### 使用 addChild\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wc1-QaqOPsgAAAAAAAAAAABkARQnAQ\">\n\n## 改变标签或背景\n\n### 更新节点或边上的标签\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NJm8S4sfgp4AAAAAAAAAAABkARQnAQ\">\n\n### 切换节点背景图片\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kwp1S6PJIVUAAAAAAAAAAABkARQnAQ\">\n\n## 节点分组 Combo\n\n### 圆形 Combo\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Rvx9SYSHGsIAAAAAAAAAAABkARQnAQ\">\n\n### 矩形 Combo\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*qvmVTZc-iNcAAAAAAAAAAABkARQnAQ\">\n\n### 扩展圆形 Combo\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1LelSq5TP9EAAAAAAAAAAABkARQnAQ\">\n\n### 扩展矩形 Combo\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rQGaT4kiaYoAAAAAAAAAAABkARQnAQ\">\n\n## 节点集轮廓包裹\n\n### 用轮廓包裹节点集合\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*krsJQb6tH-oAAAAAAAAAAAAAARQnAQ\">\n\n### 修改包裹内部成员\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*TNxDRL0t0GsAAAAAAAAAAAAAARQnAQ\">\n\n## 聚焦一个节点\n\n### 点击节点带有动画地移动到画布中心\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yPb-SKNZ5YYAAAAAAAAAAABkARQnAQ\">\n\n### 点击节点移动到画布中心\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yPb-SKNZ5YYAAAAAAAAAAABkARQnAQ\">\n\n## 响应区域事件\n\n### 响应节点中部分区域\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rszjRrAopBkAAAAAAAAAAABkARQnAQ\">\n\n## 切换模式增加点和边\n\n### 设置交互模式\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*y1qkTKqhQXkAAAAAAAAAAABkARQnAQ\">\n\n## 自定义交互\n\n### 两指平移画布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eePLR7boe38AAAAAAAAAAABkARQnAQ\">\n\n## 缩放画布时固定选中元素\n\n### 缩放画布时固定元素\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*nmaeRqYi9CMAAAAAAAAAAABkARQnAQ\">\n\n## 拖拽缩放画布时隐藏元素\n\n### 拖拽画布时隐藏节点 keyShape 外所有图形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*hld6SrA4qacAAAAAAAAAAABkARQnAQ\">\n\n## 创建边\n\n### 点击端点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*B9dxR4x8UmUAAAAAAAAAAAAAARQnAQ\">\n\n### 从一个节点拖拽到另一个节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*B9dxR4x8UmUAAAAAAAAAAAAAARQnAQ\">\n\n### 按住 shift 并点击端点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*B9dxR4x8UmUAAAAAAAAAAAAAARQnAQ\">\n\n### 点击端点上的子图形\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*WAQ6T4pqCd8AAAAAAAAAAAAAARQnAQ\">\n\n### 从端点上的子图形拖拽\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*WAQ6T4pqCd8AAAAAAAAAAAAAARQnAQ\">\n\n## 选中\n\n### 点击单选或多选\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*F0RGQ67xbGYAAAAAAAAAAAAAARQnAQ\">\n\n### 框选\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ZDEiRIQRByEAAAAAAAAAAAAAARQnAQ\">\n\n### 拉索选择\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*8WwrRplTPG8AAAAAAAAAAAAAARQnAQ\">\n\n## 节点分页器\n\n### 子树节点分页\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v7yASaVZDisAAAAAAAAAAAAAARQnAQ\">\n\n### dagre 节点分页\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ztMMS5WPancAAAAAAAAAAAAAARQnAQ\">\n\n## 快捷键适应画布\n\n### 使用快捷键适配画布\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FALhS5MhAzAAAAAAAAAAAAAAARQnAQ\">\n\n### 使用快捷键移动到左上角\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7RPkSJpwzrQAAAAAAAAAAAAAARQnAQ\">\n\n## 节点动画\n\n### 节点动画\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MDDjSov7gMkAAAAAAAAAAABkARQnAQ\">\n\n## 边动画\n\n### 圆点沿边运动\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HqX_Q7lljpsAAAAAAAAAAABkARQnAQ\">\n\n### 虚线运动\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*70lpSLPAxb8AAAAAAAAAAABkARQnAQ\">\n\n### 无到有的边\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*W40_RKyCrDsAAAAAAAAAAABkARQnAQ\">\n\n## 状态切换\n\n### 状态与动画\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*WJhtR4pSJssAAAAAAAAAAABkARQnAQ\">\n\n## 节点移动动画\n\n### 节点移动动画\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*M-EGS5v6RnUAAAAAAAAAAABkARQnAQ\">\n\n## 自定义动画\n\n### 自定义动画\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*tN3KQ59_XO8AAAAAAAAAAABkARQnAQ\">\n\n## 提示框\n\n### 提示框插件\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kjsSQ5pgVmoAAAAAAAAAAABkARQnAQ\">\n\n### 固定提示框位置\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kjsSQ5pgVmoAAAAAAAAAAABkARQnAQ\">\n\n### 提示框插件局部生效\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kjsSQ5pgVmoAAAAAAAAAAABkARQnAQ\">\n\n### 点击出现提示框\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kjsSQ5pgVmoAAAAAAAAAAABkARQnAQ\">\n\n### 局部图形响应提示框 behavior-自定义节点\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bIHUToKq6OYAAAAAAAAAAABkARQnAQ\">\n## 边绑定\n\n### 边绑定\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7g4iRqVfkHQAAAAAAAAAAABkARQnAQ\">\n\n## 算法示例\n\n### 图模式匹配\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ucUBSoDw2TwAAAAAAAAAAAAAARQnAQ\">\n\n### 最短路径\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pBV2T6BU6g8AAAAAAAAAAAAAARQnAQ\">\n\n### LP 自动聚类\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NXkTSbPhEA0AAAAAAAAAAAAAARQnAQ\">\n\n### LOUVAIN 自动聚类\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OVgcSa33xBYAAAAAAAAAAAAAARQnAQ\">\n\n### 自动计算色板\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*hS7MTKlo6LsAAAAAAAAAAAAAARQnAQ\">\n\n## 性能案例\n\n### 5000+ 图元\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q6eRT7RNwBYAAAAAAAAAAABkARQnAQ\">\n\n### ~20000 图元\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mysRTLxipwMAAAAAAAAAAABkARQnAQ\">\n\n### 50000+ 图元\n\n<img width=280 height=130 src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6U-cSrdpBjYAAAAAAAAAAABkARQnAQ\">\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/combo/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 元素操作\n\n`markdown:docs/api/graphFunc/item.zh.md`\n\n# Combo 操作\n\n`markdown:docs/api/graphFunc/combo.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/combo/index.zh.md",
    "content": "---\ntitle: 节点分组 Combo\norder: 4\n---\n\n内置了 2 种不同类型的 Combo，支持通过配置（[文档](/zh/docs/manual/middle/elements/combos/built-in/circle)）进行扩展，支持自定义（[文档](/zh/docs/manual/middle/elements/combos/custom-combo)，[Demo](/zh/docs/examples/item/customCombo)）。下面两个例子允许节点和 Combo 的拖拽改变从属关系，双击收缩/展开 Combo。\n\n## 何时使用\n\n用户可根据具体的业务场景，选择合适的内置 Combo。更多内容请参考 [内置 Combo](/zh/docs/manual/middle/elements/combos/built-in/circle)。\n\n## 圆形 Combo\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_circlewithcombo?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 矩形 Combo\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_rectwithcombo?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/createEdge/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 内置复合交互\n\n请参考教程 [内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/createEdge/index.zh.md",
    "content": "---\ntitle: 创建边\norder: 13\n---\n\n支持使用内置交互 `'create-edge'`，允许终端用户通过一些操作创建新到边。\n\n## 何时使用\n\n`'create-edge'` 允许配置交互方式为点击两个节点、从一个节点拖拽到另一个节点。更多内容请参考 [create-edge](/zh/docs/manual/middle/states/defaultBehavior#create-edge)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/customBehavior/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/customBehavior/index.zh.md",
    "content": "---\ntitle: 自定义交互\norder: 10\n---\n\n当[内置 behavior](/zh/docs/manual/middle/states/defaultBehavior)不能满足需求时，可以自定义交互。\n\n## 使用指南\n\n使用 `graph.registerBehavior` 自定义交互，教程参见 [自定义交互](/zh/docs/manual/middle/states/custom-behavior)。下面示例演示了如何使用自定义交互机制实现使用鼠标滚轮或触摸板双指拖动和缩放画布。\n\n## 两指平移画布\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_canvastwofingers?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/dragCanvasHideItem/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 内置复合交互\n\n请参考教程 [内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/dragCanvasHideItem/index.zh.md",
    "content": "---\ntitle: 拖拽缩放画布时隐藏元素\norder: 13\n---\n\n拖拽画布和缩放画布频繁地全局渲染。为了提升性能，内置交互 'drag-canvas' 和 'zoom-canvas' 的布尔型配置项 `enableOptimize`。若 `enableOptimize` 为 `true`，则拖拽画布时，将隐藏除节点 keyShape 以外的所有图形。此外，当 `enableOptimize` 为 true 时，画布缩小到一定程度后（缩放值小于 `optimizeZoom`），'zoom-canvas' 将隐藏文字以提升可读性与性能。\n\n## 使用指南\n\n配置内置交互 'drag-canvas' 和 'zoom-canvas' 的布尔型配置项 `enableOptimize`。详见 [drag-canvas](/zh/docs/manual/middle/states/defaultBehavior#drag-canvas) 和 [zoom-canvas](/zh/docs/manual/middle/states/defaultBehavior#zoom-canvas)。\n\n## 拖拽画布时隐藏节点 keyShape 外所有图形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_hideitem?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/fitView/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 复合交互\n\n请参考教程 [内置 Behavior](/en/docs/manual/middle/states/defaultBehavior)。\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/en/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/fitView/index.zh.md",
    "content": "---\ntitle: 快捷键适应画布\norder: 15\n---\n\n允许终端用户使用键盘组合键调用 Graph 的函数。\n\n## 如何使用\n\n例如按下键盘上的 control 与 1，对图进行适应画布。注意：终端用户使用该功能时焦点必须在画布上才能够正确触发。详细内容参考文档 [shortcuts-call](/zh/docs/manual/middle/states/defaultBehavior/shortcuts-call)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/highlight/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 内置复合交互\n\n请参考教程 [内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/highlight/index.zh.md",
    "content": "---\ntitle: 高亮相邻节点\norder: 0\n---\n\n在图分析应用中，鼠标 hover 到某个节点后，高亮其相邻的节点及边是一种非常常见的需求。\n\n## 使用指南\n\n该示例演示了 F6 内置的 activate-relations 和自定义实现高亮相邻节点的方式。另外，如果内置高亮关注点及其邻居的行为不能满足需求，用户也可以通过使用 `graph.on` 或[自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior) 实现。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/hull/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphFunc/hull.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/hull/index.zh.md",
    "content": "---\ntitle: 节点集轮廓包裹\norder: 5\n---\n\n使用平滑的轮廓来包裹指定的一组节点集合。\n\n## 何时使用\n\n节点集轮廓包裹常用语交互过程中，对团伙标记与分析，尤其是在不希望影响原图布局的情况下。轮廓包裹的形状支持 `round-convex` / `smooth-convex` / `bubble` 三种类型，默认为 `round-convex` 类型。`round-convex` 为圆角凸包轮廓，`smooth-convex` 为平滑曲线凸包轮廓，这两种凸包轮廓不可排除配置项中的 nonMembers；`bubble` 为自由凹包轮廓，可以排除 nonMembers。可配合事件监听实现轮廓的动态更新。下面的第一个示例中，蓝色为 bubble 类型轮廓， 绿色为 round-convex 类型轮廓，轮廓监听节点变化进行更新，始终包裹节点。第二个示例中，红色气泡配合节点 drag 事件，实现节点拖进拖出，右击可以增加内部成员；蓝色凸包随节点位置更新，始终包裹节点。完整的配置项请参考 API 文档： [createHull](/zh/docs/api/graphFunc/hull#createhullcfg-hullcfg)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/label/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphFunc/item.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/label/index.zh.md",
    "content": "---\ntitle: 改变标签或背景\norder: 3\n---\n\n交互过程中动态改变节点或边上的文本。\n\n## 使用指南\n\n在有些业务场景中，需要通过交互来修改节点或边上的文本，也有可能会通过点击来切换节点的背景图片，对于这类需求，可以使用演示案例中的方式来实现。\n\nF6 中支持的所有文本属性可以参考 [节点上的标签文本](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg) 和 [边上的标签文本](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/pagination/index.zh.md",
    "content": "---\ntitle: 节点分页器\norder: 15\n---\n\n当树图或 dagre 的某一层节点数量过多时，可以参考本例中的方法，实现单层节点的分页器。\n\n## 使用指南\n\n将鼠标移入节点较多的一层节点上，该层的上下或左右会出现三角形小按钮，点击该按钮可以切换节点。\n\n- 第一个示例：树图的节点分页器；\n- 第二个示例：一般图 dagre 布局的节点分页器。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/partialResponse/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphFunc/on_off.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/partialResponse/index.zh.md",
    "content": "---\ntitle: 响应区域事件\norder: 7\n---\n\n区域响应。\n\n## 使用指南\n\nF6 的图元素中，可能只想响应部分元素的事件，如节点中的某个 icon、树图中的展开收起 icon 等。\n\n## 响应节点中部分区域\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_partialnode?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/position/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphFunc/transform.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/position/index.zh.md",
    "content": "---\ntitle: 聚焦一个节点\norder: 6\n---\n\n通过交互改变节点的位置。\n\n## 使用指南\n\n点击某个节点，让其移动到画布中心。\n\n- 第一个示例：带有动画地移动图；\n- 第二个示例：不带动画移动图。\n\n## 点击节点带有动画地移动到画布中心\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_moveanimate?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 点击节点移动到画布中心\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_move?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/select/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 内置复合交互\n\n请参考教程 [内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/select/index.zh.md",
    "content": "---\ntitle: 选中\norder: 14\n---\n\nF6 提供内置的单选、多选、框选、拉索选择四种选中元素的方式。其中，内置交互 `'lasso-select'`，允许终端用户在画布上绘制一个不规则多边形作为拉索选中几点/边/ combo。\n\n## 如何使用\n\n- 单选与多选：内置交互 `'click-select'` 的默认配置允许终端用户单击选中节点；配置 `multiple: true` 即可允许组合键盘按键进行多选，默认的键盘按键为 `Shift`，可配置 `trigger` 为 `'shift'`、`'ctrl'`、`'alt'`、`'control'` 中的一个来更换键盘按。文档参见 [click-select](/zh/docs/manual/middle/states/defaultBehavior#click-select)；\n- 框选：内置交互 `'brush-select'` 为框选交互，在默认配置下，终端用户可以按住 `shift` 并从画布空白处开始拖拽进行框选。`shift` 也可以通过配置 `trigger` 替换为 `'drag'`、`'shift'`、`'ctrl'`、`'alt'`、`'control'`。需要注意的时，当使用 `'drag'`，即无键盘组合按键直接进行拖拽框选，可能会与 `'drag-canavs'` 的交互产生冲突。因此，我们推荐使用一个键盘组合按键进行区分。文档参见 [brush-select](/zh/docs/manual/middle/states/defaultBehavior#brush-select)；\n- 拉索选择：与 `'brush-select'` 类似，内置交互 `'lasso-select'` 允许配置不同的 `trigger` 来区分拖拽画布。更多内容请参考 [lasso-select](/zh/docs/manual/middle/states/defaultBehavior#lasso-select)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/setMode/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphFunc/mode.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/setMode/index.zh.md",
    "content": "---\ntitle: 切换模式增加点和边\norder: 8\n---\n\n使用左上角的下拉框切换交互模式，在不同模式下拖动节点、增加节点、增加边，从而避免交互事件的冲突。\n\n## 使用指南\n\n使用左上角的下拉框切换交互模式：\n\n- 选择 “Default” 按钮时，切换到 default 交互模式：拖拽节点时节点跟随鼠标移动；点击节点时选中该节点；\n- 选择 “Add Node” 按钮时，切换到  addNode 交互模式：点击空白区域在点击处增加一个节点；点击节点时选中该节点；\n- 选择 “Add Edge” 按钮时，切换到 addEdge 交互模式：依次点击两个节点将会在这两个节点之间添加一条边。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_setmode?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/treeBehavior/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/treeMethods.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/treeBehavior/index.zh.md",
    "content": "---\ntitle: 自定义树图交互\norder: 1\n---\n\n## 拖拽子树改变结构。\n\n通过拖拽子树的根节点，靠近新的父节点后放下，可将该子树从原来位置删除，追加到新父节点下，从而改变树的结构。若新父节点是被拖拽子树中的一个节点，则拖拽改变结构将不会生效。\n\n## 动态加载树图数据\n\n共演示了两种动态添加数据的方式：\n\n- 使用 `graph.changeData`；\n- 使用 `graph.addChild`。\n\n## 合并同类兄弟节点\n\n展示合并同类兄弟节点的交互。\n\n## 使用 changeData\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_changedata?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 使用 addChild\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_addchild?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/zoomCanvasFixItem/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 内置复合交互\n\n请参考教程 [内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/interaction/zoomCanvasFixItem/index.zh.md",
    "content": "---\ntitle: 缩放画布时固定选中元素\norder: 12\n---\n\n为了在缩放画布时能够保持关注节点/边的高亮效果，推出了内置交互 'zoom-canvas' 的配置项 `fixSelectedItems` 以达到缩放画布时固定选中节点的需求。\n\n## 使用指南\n\n配置内置交互 'zoom-canvas' 的配置项 `fixSelectedItems`，`fixSelectedItems` 是一个对象，包括 `fixState`、`fixAll`、`fixLabel`、`fixLineWidth`，可达到在缩小画布时固定选定的元素的大小、文本大小、描边粗细。详见 [zoom-canvas](/zh/docs/manual/middle/states/defaultBehavior#zoom-canvas)。\n"
  },
  {
    "path": "packages/site/docs/examples/item/arrows/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/manual/middle/elements/edges/arrow.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/arrows/index.zh.md",
    "content": "---\ntitle: 边的箭头\norder: 3\n---\n\nF6 提供了[默认箭头和内置箭头](/zh/docs/manual/middle/elements/edges/arrow)。当这些箭头不满足条件时，可以[自定义箭头](/zh/docs/manual/middle/elements/edges/arrow#自定义箭头)。\n\n## 何时使用\n\n为内置边和自定义边配置起始端箭头和结束端箭头。\n\n## 默认和内置箭头\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_built_in_arrows?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 自定义箭头\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_customarrows?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/customCombo/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/registerItem.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/customCombo/index.zh.md",
    "content": "---\ntitle: 自定义 Combo\norder: 6\n---\n\n当 F6 的内置 Combo 不能满足需求时，F6 的自定义 Combo 机制允许用户通过扩展内置 Combo 来设计和定制新的节点类型。\n\n## 使用指南\n\n下面示例展示了通过扩展内置的 Circle 和 Rect Combo，进行 Combo 的自定义。更多信息参见[自定义 Combo 文档](/zh/docs/manual/middle/elements/combos/custom-combo)。\n\n## 带有 Marker 的 Circle\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_ccircle?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 带有 Marker 的 Rect\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_crect?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/customEdge/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/registerItem.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/customEdge/index.zh.md",
    "content": "---\ntitle: 自定义边\norder: 5\n---\n\n当 F6 的内置边不能满足需求时，F6 的自定义边机制允许用户设计和定制新的边类型。\n\n## 使用指南\n\n下面的前两个代码演示了自定义折线 polyline 边。自定义边可以通过两种方式实现：\n\n1. 继承 line，复写 `getPath` 和 `getShapeStyle` 方法；\n2. 复写 `draw` 方法。\n\n拖动边的两个端点时，常常需要动态更新折线的控制点位置。建议使用 F6 内置的 `polyline` 满足这一需求。\n\n第三个代码演示了自定义带有多个文本标签的边。\n\n更多信息参见[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)。\n\n## 添加额外图形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_extrashape?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 自定义折线\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_custompolyline?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/customNode/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/registerItem.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/customNode/index.zh.md",
    "content": "---\ntitle: 自定义节点\norder: 4\n---\n\n当 F6 的内置节点不能满足需求时，F6 的自定义节点机制允许用户设计和定制新的节点类型。\n\n## 使用指南\n\n下面示例展示了自定义统计图表、卡片、列表类的节点。更多信息参见[自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)。\n\n## 卡片\n"
  },
  {
    "path": "packages/site/docs/examples/item/defaultCombos/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# Combo 配置项\n\n`markdown:docs/api/Items/comboProperties.zh.md`\n\n# 元素通用方法\n\n`markdown:docs/api/Items/itemMethods.zh.md`\n\n# Node 实例用方法（Combo 继承 Node）\n\n`markdown:docs/api/Items/nodeMethods.zh.md`\n\n# Combo 实例方法\n\n`markdown:docs/api/Items/comboMethods.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/defaultCombos/index.zh.md",
    "content": "---\ntitle: 内置 Combo\norder: 2\n---\n\n支全新节点分组机制 Combo。内置了 2 种不同类型的 Combo，支持通过[配置](/zh/docs/manual/middle/elements/combos/defaultCombo#combo-的通用属性)进行扩展，支持[自定义](/zh/docs/manual/middle/elements/combos/custom-combo)。下面两个例子允许节点和 Combo 的拖拽改变从属关系，双击收缩/展开 Combo。\n\n## 何时使用\n\n用户可根据具体的业务场景，选择合适的内置 Combo。更多内容请参考 [内置 Combo](/zh/docs/manual/middle/elements/combos/built-in/circle)。\n\n## 圆形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_combo_circle?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 矩形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_interactive_combo_rect?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/defaultEdges/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 边配置\n\n`markdown:docs/api/Items/edgeProperties.zh.md`\n\n# 元素通用方法\n\n`markdown:docs/api/Items/itemMethods.zh.md`\n\n# 边实例方法\n\n`markdown:docs/api/Items/edgeMethods.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/defaultEdges/index.zh.md",
    "content": "---\ntitle: 内置边\norder: 1\n---\n\nF6 共内置了多种不同类型的边，包括直线、折线、曲线、自环等。\n\n## 何时使用\n\n以下代码演示了：`polyline`、`cubic`、`arc` 和 `loop` 四种内置边。\n\n更多信息参见 [F6 的内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)\n\n## 折线 1\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_polyline1?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 折线 2\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_polyline2?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 折线 3\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_polyline3?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 三次贝塞尔曲线-垂直\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_cubic1?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 三次贝塞尔曲线-水平\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_cubic2?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 弧线\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_arc?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 自环边\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_loop?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/defaultNodes/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 节点配置\n\n`markdown:docs/api/Items/nodeProperties.zh.md`\n\n# 元素通用方法\n\n`markdown:docs/api/Items/itemMethods.zh.md`\n\n# 节点实例方法\n\n`markdown:docs/api/Items/nodeMethods.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/item/defaultNodes/index.zh.md",
    "content": "---\ntitle: 内置节点\norder: 0\n---\n\nF6 共内置了 8 种不同类型的节点，支持通过配置项进行扩展。\n\n## 何时使用\n\n用户可根据具体的业务场景，选择合适的内置节点。如，矩形节点适合在流程图中使用。 `linkPoints` 用于配置相关边的连入位置。更多内容请参考 [F6 内置的节点](/zh/docs/manual/middle/elements/nodes/defaultNode)。\n\n## 圆形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_circle?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 甜甜圈\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_donut?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 椭圆\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_ellipse?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 矩形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_rect?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 模态矩形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_moderect?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n## 模态菱形矩形\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_diamond?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 五角星\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_star?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 三角形\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_triangle?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 图片\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_image?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/label/index.zh.md",
    "content": "---\ntitle: 超长文本\norder: 7\n---\n\nF6 中文本的处理。\n\n## 使用指南\n\n节点或边上的文本超长时，可以通过使用 JS 来计算文本长度，也可以通过使用 `\\n` 来进行换行。F6 提供了 `Util.getLetterWidth` 与 `Util.getTextSize` 辅助计算文本长度，但仅适用于默认字体。\n\n## 文本超长\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_labellen?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 使用换行符处理文本超长\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_labellen1?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/labelBg/index.zh.md",
    "content": "---\ntitle: 设置文本背景\norder: 8\n---\n\n设置 Node 或 Edge label 的背景。\n\n## 使用指南\n\n当节点或边上的 label 需要设置背景时，通过在 style 中增加 background 来实现。\n\n设置边的背景：\n\n```\nconst graph = new F6.Graph({\n  // ...\n  defaultNode: {\n    position: 'left',\n    style: {\n      background: {\n        fill: '#ffffff',\n        stroke: 'green',\n        padding: [3, 2, 3, 2],\n        radius: 2,\n        lineWidth: 3,\n      },\n    },\n  }\n})\n```\n\n设置节点 label 的背景：\n\n```\nconst graph = new F6.Graph({\n  // ...\n  defaultEdge: {\n    autoRotate: true,\n    style: {\n      background: {\n        fill: '#ffffff',\n        stroke: '#000000',\n        padding: [2, 2, 2, 2],\n        radius: 2,\n      },\n    },\n  }\n})\n```\n\n## 设置节点文本背景\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_nodebg?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 设置边上文本背景\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_edgebg?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/item/multiEdge/index.zh.md",
    "content": "---\ntitle: 两节点间存在多条边\norder: 9\n---\n\n两节点间存在多条边时，可以使用 F6 内置的工具函数 `F6.Util.processParallelEdges(data.edges)` 处理。它将会自动检测边数据中两端点相同的边。若为自环边，则它们的 `type` 将会被设置为 `'loop'`，并且自动计算自环高度与位置以放置重叠；若不是自环边，则它们的 `type` 将会被设置为 `'quadratic'` 二次贝塞尔曲线,并自动计算控制点位置，以避免相互重叠。为达到更好的展示效果，建议在实例化图时，将 `linkCenter` 设置为 `true`。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_elements_multiedges?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/arcDiagram/index.zh.md",
    "content": "---\ntitle: Arc Diagram 弧线图\norder: 8\n---\n\n弧线图是一种图的可视化形式。其将节点排列在一个轴上，边以弧线的形式连接节点。\n\n## 使用指南\n\n- 代码演示 1 ：通过指定节点位置，并根据节点间距计算 arc 弧线类型边的弧高度可以实现基础弧线图。\n- 代码演示 2 ：指定节点位置到圆环上，使用 quadratic 二阶贝塞尔曲线类型的边实现了弧线图的变种 —— 环形弧线图。\n\n## 基本弧线图\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicarcdiagram?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/circular/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/circular.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/circular/index.zh.md",
    "content": "---\ntitle: Circular 环形布局\norder: 4\n---\n\nCircular 环形布局根据参数指定的排序方式对节点进行排序后，将节点排列在圆环上。\n\n## 使用指南\n\nF6 内置的 Circular 环形布局可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该布局可以通过配置调整半径、起始和结束角度、节点排序方式、节点分组、螺旋线布局等。\n\n- 代码演示 1 ：基本的环形布局，节点根据在数据中的顺序逆时针排列。\n- 代码演示 2 ：节点根据其度数从大到小逆时针排列。\n- 代码演示 3 ：螺旋线布局。\n- 代码演示 4 ：分组圆环布局。\n- 代码演示 5 ：圆环布局参数动态变化。\n\n## 基本 Circular 布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basiccircular?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/comboForce/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/comboForce.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/comboForce/index.zh.md",
    "content": "---\ntitle: Combo 力导布局\norder: 10\n---\n\nCombo Force 是基于力导向的专用于带有 combo 的图的布局算法。通过自研改造经典力导向算法，将根据节点的 combo 信息，施加不同的力以达到同 combo 节点尽可能聚集，不同 combo 之间尽可能无重叠的布局。\n\n## 使用指南\n\n在有 Combo 的图上，推荐使用 `'comboForce'` 布局。其他内置布局将不会考虑 Combo 信息对布局的影响。\n\n## 基本 Combo 力导向布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basiccomboforce?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/concentricLayout/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/concentric.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/concentricLayout/index.zh.md",
    "content": "---\ntitle: Concentric 同心圆布局\norder: 6\n---\n\nConcentric 同心圆布局将所有节点放置在同心圆上。\n\n## 使用指南\n\nF6 内置的 Concentric 同心圆布局可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该算法首先根据参数指定的排序方式对节点进行排序。排序越靠前，节点将会被放置在越中心的位置。\n\n## 基本 Concentric 同心圆布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicconcentric?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/dagreFlow/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/dagre.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/dagreFlow/index.zh.md",
    "content": "---\ntitle: Dagre 流程图布局\norder: 1\n---\n\nDagre 是适合有向流程图的布局算法。其根据图数据中边的方向，自动计算节点的层级及位置。\n\n## 使用指南\n\nF6 内置的 Dagre 布局可以实现有向图的自动分层布局。如下面代码所示，可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该布局可以通过配置调整布局方向、节点对齐方式、节点间距、层高等。\n\n- 代码演示 1 ：简单的 Dagre 布局。\n- 代码演示 2 ：带有 Combo 的 Dagre 布局（目前只能处理好同层节点的 Combo 问题）。\n- 代码演示 3 ：自左向右向上对齐的 Dagre 布局。\n- 代码演示 4 ：自左向右的 Dagre 布局。\n- 代码演示 5 ：Dagre 布局参数动态变化。\n\n## Dagre 流程图\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicdagre?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/forceDirected/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# Force Layout\n\n`markdown:docs/api/graphLayout/force.zh.md`\n\n# Force Atlas 2 Layout\n\n`markdown:docs/api/graphLayout/forceAtlas2.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/forceDirected/index.zh.md",
    "content": "---\ntitle: 力导向图布局\norder: 0\n---\n\n力导向图布局作为较早被发明的一种实际应用布局算法，经过研究者多年改进、扩展，已发展成为一类算法的集合。该类算法的特点是模拟物理世界中的作用力，施加在节点上，并迭代计算以达到合理放置节点、美观布局的一类算法。\n\n## 使用指南\n\nF6 内置的经典力导向算法引用了 d3.js 的力导向算法。如下面代码所示，可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。\n\n- 代码演示 1 ：基础的经典力导向布局及节点的拖拽。\n- 代码演示 2 ：节点不重叠。\n- 代码演示 3 ：为不同节点调整边长和力。\n- 代码演示 4 ：固定被拖拽的节点。\n- 代码演示 5 ：支持布局参数的动态切换。\n- 代码演示 6 ：使用力导向算法实现气泡效果及交互。\n- 代码演示 7 ：约束在一定范围内进行力导向布局。\n\n## 基本力导向布局及节点拖拽\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicforcedirected?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/furchtermanLayout/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/fruchterman.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/furchtermanLayout/index.zh.md",
    "content": "---\ntitle: Fruchterman 图布局\norder: 2\n---\n\nFruchterman Reingold 布局算法在原理上而言属于力导向布局算法。其引力与斥力的定义方式与经典的 Force Diected 力导向图布局有少许不同。\n\n## 使用指南\n\nF6 内置的 Fruchterman 布局可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该布局可以通过配置调整迭代次数、紧凑程度、是否按照聚类布局等。\n\n- 代码演示 1 ：基本的 Fruchterman 布局。\n- 代码演示 2 ：Fruchterman 的聚类布局。\n- 代码演示 3 ：Fruchterman 布局参数动态变化。\n- 代码演示 4 ：Fruchterman 使用 web-worker 以避免阻塞页面。\n\n## 基本 Fruchterman 布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_fruchterman?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/gridLayout/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/grid.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/gridLayout/index.zh.md",
    "content": "---\ntitle: Grid 网格布局\norder: 5\n---\n\nGrid 网格布局根据参数指定的排序方式对节点进行排序后，将节点排列在网格上。\n\n## 使用指南\n\nF6 内置的 Grid 网格布局可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该布局可以通过配置调整节点排序方式、行数、列数、节点不重叠等。\n\n- 代码演示 1 ：基本的网格布局，节点根据在数据中的顺序排列。\n- 代码演示 2 ：节点根据数据中的 cluster 属性排序。\n\n## 基本 Grid 网格布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicgrid?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/layoutMechanism/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphFunc/layout.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/layoutMechanism/index.zh.md",
    "content": "---\ntitle: 布局机制\norder: 19\n---\n\nF6 为用户提供了布局参数动态切换、布局方法动态切换、数据动态切换、子图布局、布局时机监听、自定义布局等布局相关等机制。\n\n## 使用指南\n\n- 代码演示 1 ：控制子图（红色节点）使用经典力导向算法进行子图布局。\n- 代码演示 2 ：同时设置不同的子图布局。\n- 代码演示 3 ：布局数据可以动态切换。\n- 代码演示 4 ：F6 提供了自定义布局机制，可以随心所欲定制自己的布局。\n- 代码演示 5 ：F6 开放了布局的监听时机 —— `beforelayout` 与 `afterlayout`。\n\n## 布局切换\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_layouttranslate?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 子图布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_subgraphlayout?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 流水线子图布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_sublayoutpipes?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 数据动态切换\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_datachange?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 自定义二分图布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_custombigraph?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 布局时机监听\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_layouttiming?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/mdsLayout/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/mds.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/mdsLayout/index.zh.md",
    "content": "---\ntitle: MDS 布局\norder: 7\n---\n\nMDS（Multidemensional Scaling）本是用于高维数据降维的算法。关系图数据可视化中的布局可以看作是高维数据降维到二维屏幕空间中。\n\n## 使用指南\n\nF6 内置的 MDS 布局可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该算法可配置边的长度。\n\n## 基本 MDS 布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicmds?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/net/radialLayout/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/graphLayout/radial.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/net/radialLayout/index.zh.md",
    "content": "---\ntitle: Radial 辐射布局\norder: 3\n---\n\nRadial 辐射布局根据参数中指定的 focusNode 为中心点，根据其他节点与中心点的拓扑距离（最短路径长度）将其余节点放置在以中心点为圆心的同心圆上。\n\n## 使用指南\n\nF6 内置的 Radial 布局可在实例化 Graph 时使用该布局。除此之外，还可以如[子图布局](/zh/docs/manual/middle/layout/sub-layout)所示单独使用布局。该布局可以通过配置调整辐射半径、节点不重叠、不严格的辐射布局等。\n\n- 代码演示 1 ：基本的 Radial 布局。\n- 代码演示 2 ：根据不同的节点大小计算节点不重叠。\n- 代码演示 3 ：不严格的辐射布局允许同层节点有前后交错以避免节点重叠。\n- 代码演示 4 ：利用子图布局机制可以实现点击节点进行扩展的功能，请尝试点击 2 号节点。\n- 代码演示 5 ：Radial 布局参数动态变化。\n- 代码演示 6 ：同层节点按照指定字段聚类。\n\n## 基本 Radial 辐射布局\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_generalgraph_basicradial?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/changePosition/index.zh.md",
    "content": "---\ntitle: 节点移动动画\norder: 4\n---\n\n通过 `changeData` 方法不断地改变节点位置，以达到动画的效果。\n\n### 使用指南\n\n对于一些简单的动画场景，可以通过这种方式来实现。稍复杂的场景，不建议使用这种方式。\n\nF6 中更多关于动画的内容，请参考文档 [动画](/zh/docs/manual/middle/animation)。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_changeposition_default?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/customAnimate/index.zh.md",
    "content": "---\ntitle: 自定义动画\norder: 5\n---\n\n在实例化 `Graph` 时，可以通过 `animateCfg` 配置项设置全局动画。\n\n### 使用指南\n\n当需要对已有的节点，做统一的自定义动画效果时，可以使用这种方式来实现。\n\nF6 中更多关于动画的内容，请参考[动画文档](/zh/docs/manual/middle/animation)。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_customanimate_position?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/edge/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/edge/index.zh.md",
    "content": "---\ntitle: 边动画\norder: 1\n---\n\n通过自定义边，可以实现边的动画效果。\n\n### 使用指南\n\n下面代码演示了三种通过自定义边实现的边动画：\n\n- 圆点在沿着线运动；\n- 虚线运动的效果；\n- 线从无到有的效果。\n\nF6 中更多关于动画的内容，请参考[动画文档](/zh/docs/manual/middle/animation)。\n\n## 圆点沿边运动\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_pointinline?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 虚线运动\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_edge_edge?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n## 无到有的边\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_edge_linegrowth?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/node/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/node/index.zh.md",
    "content": "---\ntitle: 节点动画\norder: 0\n---\n\n通过自定义节点，可以实现节点的动画效果。\n\n### 使用指南\n\n下面代码演示了三种通过自定义边实现的边动画：\n\n- 节点上图形的动画；\n- 增加带有动画的背景图形；\n- 节点上部分图形的旋转动画。\n\nF6 中更多关于动画的内容，请参考[动画文档](/zh/docs/manual/middle/animation)。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_node_node?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/stateChange/API.zh.md",
    "content": "---\ntitle: API\n---\n\n# 自定义复合交互\n\n请参考教程 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n\n# 状态\n\n`markdown:docs/api/graphFunc/state.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/scatter/stateChange/index.zh.md",
    "content": "---\ntitle: 状态切换\norder: 2\n---\n\nF6 中的 state，指的是状态，包括交互状态和业务状态两种。\n\n### 使用指南\n\n动画是可视化中非常重要的内容。对于一些复杂的动画效果，可以通过 `onFrame` 来实现。下面代码演示展示通过结合状态，实现在交互过程中，展示单条边或多条边的动画。\n\nF6 中更多关于动画的内容，请参考[动画文档](/zh/docs/manual/middle/animation)。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_animation_statechange_hover?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/tree/compactBox/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/treeGraphLayout/compactBox.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/tree/compactBox/index.zh.md",
    "content": "---\ntitle: 紧凑树\norder: 0\nredirect_from:\n  - /zh/examples\n---\n\n从根节点开始，同一深度的节点在同一层，并且布局时会将节点大小考虑进去。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*z-ESRoHTpvIAAAAAAAAAAABkARQnAQ' alt='compactbox' width='300'/>\n\n## 使用指南\n\n紧凑树适用于展示树结构数据，配合 TreeGraph 使用。如下面代码所示，可在实例化 TreeGraph 时使用该布局。\n\n其配置项中 Function 类型的配置项可以为不同的元素配置不同的值。具体描述请查看相关教程。\n\n## 紧凑树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_compactbox?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 至上而下的紧凑树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_tbcompactbox?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 节点左对齐的紧凑树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_compactboxleftalign?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/tree/customItemTree/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/registerItem.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/tree/customItemTree/index.zh.md",
    "content": "---\ntitle: 定制树图元素样式\norder: 5\n---\n\nF6 自定义节点与边机制允许用户对树图视觉样式进行定制。\n\n## 使用指南\n\n通过结合自定义元素，可以实现较为复杂的树可视化。\n\n- 代码演示 1： 自定义树图中的节点及边，支持增加和删除节点；\n- 代码演示 2 ：为边增加文本标签。\n- 代码演示 3 ：自定义带有收缩/扩展按钮的节点。\n\n## 自定义树图中的边\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_customedgetree?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 树图边上的标签\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_treeedgelabel?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 自定义复杂树图样式\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_customtree?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/tree/dendrogram/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/treeGraphLayout/dendrogram.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/tree/dendrogram/index.zh.md",
    "content": "---\ntitle: 生态树\norder: 1\n---\n\n不管数据的深度多少，总是叶节点对齐。不考虑节点大小，布局时将节点视为 1 个像素点。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zX7tSLqBvwcAAAAAAAAAAABkARQnAQ' alt='dendrogram' width='300'/>\n\n## 使用指南\n\n生态树适用于展示树结构数据，配合 TreeGraph 使用。如下面代码所示，可在实例化 TreeGraph 时使用该布局。\n\n## 生态树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_basicdendrogram?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 至上而下的生态树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_tbdendrogram?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/tree/indented/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/treeGraphLayout/indented.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/tree/indented/index.zh.md",
    "content": "---\ntitle: 缩进树\norder: 3\n---\n\n缩进树布局。每个元素会占一行/一列。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NBUzRonaOYMAAAAAAAAAAABkARQnAQ' alt='indented' width='100'/>\n\n## 使用指南\n\n缩进树适用于展示树结构数据，配合 TreeGraph 使用。如下面代码所示，可在实例化 TreeGraph 时使用该布局。\n\n该布局有以下配置项，Function 类型的配置项可以为不同的元素配置不同的值。具体描述请查看相关教程。\n\n## 文件系统\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_filesystem?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 顶部对齐\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_intendaligntop?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 子节点两侧分布\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_hintended?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/tree/mindmap/API.zh.md",
    "content": "---\ntitle: API\n---\n\n`markdown:docs/api/treeGraphLayout/indented.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/tree/mindmap/index.zh.md",
    "content": "---\ntitle: 脑图树\norder: 2\n---\n\n深度相同的节点将会被放置在同一层，与 compactBox 不同的是，布局不会考虑节点的大小。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*J1l5RofvbP0AAAAAAAAAAABkARQnAQ' alt='mindmap' width='250'/>\n\n## 使用指南\n\n脑图树适用于展示树结构数据，配合 TreeGraph 使用。如下面代码所示，可在实例化 TreeGraph 时使用该布局。\n\n该布局有以下配置项，Function 类型的配置项可以为不同的元素配置不同的值。具体描述请查看相关教程。\n\n- **direction**: String 类型，树的布局方向。可选值有：'H'：根节点的子节点分成两部分横向放置在根节点左右两侧 ，如代码演示 1 | 'V'：将根节点的所有孩子纵向排列。\n\n- **getWidth**: Number | Function 类型，每个节点的宽度。\n\n- **getHeight**: Number | Function 类型，每个节点的高度。\n\n- **getHGap**: Number | Function 类型，每个节点的水平间隙。\n\n- **getVGap**: Number | Function 类型，每个节点的垂直间隙。\n\n- **getSide**: Function 类型，节点排布在根节点的左侧/右侧。若设置了该值，则所有节点会在根节点同一侧，即 direction = 'H' 不再起效。若该参数为回调函数，则可以指定每一个节点在根节点的左/右侧。如代码演示 2、3、4。\n\n## 脑图树-子节点自动两侧分布\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_mindmap?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 脑图树-子节点右侧分布\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_rightmindmap?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 脑图树-子节点左侧分布\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_leftmindmap?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 脑图树-自定义子节点分布\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_customsidemindmap?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/examples/tree/radialtree/API.zh.md",
    "content": "---\ntitle: API\n---\n\n## Dendrogram\n\n`markdown:docs/api/treeGraphLayout/dendrogram.zh.md`\n\n## CompactBox\n\n`markdown:docs/api/treeGraphLayout/compactBox.zh.md`\n"
  },
  {
    "path": "packages/site/docs/examples/tree/radialtree/index.zh.md",
    "content": "---\ntitle: 辐射树\norder: 4\n---\n\n生态树、紧凑树两种布局方法可以通过配置项变换为辐射型树布局。跟节点位于辐射树中心，其他分支辐射式展开。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*UTm2T67HcFkAAAAAAAAAAABkARQnAQ' alt='radialtree' width='250'/>\n\n## 使用指南\n\n辐射树是通过生态树、紧凑树布局的变形。适用于展示树结构数据，配合 TreeGraph 使用。如下面代码所示，可在实例化 TreeGraph 时使用该布局。\n\n使用方式与对应的生态树、紧凑树相同，配置 `radial` 为 `true` 时，将会以辐射形式展示树。在使用辐射树时建议将布局的 `direction` 配置为 `LR` 或 `RL`。\n\n## 生态辐射树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_radialdendrogram?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n\n## 紧凑辐射树\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo_treegraph_radialcompactbox?editorSlider=expand&previewZoom=100\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/manual/FAQ/faq.zh.md",
    "content": "---\ntitle: 常见使用问题汇总\norder: 0\n---\n\n- [如何设置节点或边的背景](/zh/docs/manual/middle/elements/advanced-style/set-label-bg)\n- [如何更新节点或边的样式](/zh/docs/manual/middle/elements/methods/updateElement)\n- [如何更新文本样式](/zh/docs/manual/middle/elements/advanced-style/updateText)\n- [如何给元素设置渐变色](/zh/docs/manual/middle/elements/advanced-style/gradient)\n- [如何给元素设置纹理](/zh/docs/manual/middle/elements/advanced-style/texture)\n- [如何设置 Edge 前置](/zh/docs/manual/middle/elements/methods/elementIndex)\n- [两点之间存在多条边](/zh/docs/manual/middle/elements/methods/multi-line)\n"
  },
  {
    "path": "packages/site/docs/manual/advanced/comboTheory.zh.md",
    "content": "---\ntitle: Combo 实现原理\norder: 3\n---\n\n## Combo 渲染视觉层级逻辑\n\n当图中只有 Node 和 Edge 而不存在 Combo 时，所有 Edge 的「视觉层级 zIndex」默认低于所有的 Node。但增加嵌套的 Combo 后，元素间的视觉层级需要较复杂的规则定义，方能符合合理的逻辑。为了方便说明，我们用 z(X) 表示 X 元素的视觉层级值。\n\n- 规则一：单层 Combo 中各元素层级关系是 z(Node) > z(Edge) > z(Combo)，如下所示：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*q96OSKiu_F8AAAAAAAAAAABkARQnAQ' width=400 alt=\"img\" />\n\n> z(a) = z(b) > z(e0) > z(Combo A)\n\n- 规则一补充：假设 Combo A 内部的子元素包括子 Combo 及节点，且节点间存在边，则：z(子 Combo) > z(Node) > z(Edge) > z(Combo A 本身)，示例如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wKcnQoN4c-MAAAAAAAAAAABkARQnAQ' width=400 alt=\"img\" />\n\n> z(b1) = z(b2) > z(e2) > z(Combo B) > z(a1) = z(a2) > z(e1) > z(Combo A)\n\n- 规则二：通过规则一，可以得到所有 Combo 及 Node 的视觉层级值。若存在某条边 E 的两个端点 a 与 b 来自不同的 Combo，已知 z(a) 与 z(b)，则 z(E) 为 max(z(a), z(b)) 所在 Combo 内边的层级，即：\n  - 当 z(a) > z(b) 时，z(E) 等于 a 所在 Combo 内边的层级；\n  - 当 z(a) <= z(b)，z(E) 等于 b 所在 Combo 内边的层级。\n\n以下图为例，图中红色标注的边属于上述情况：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*dQwAQr0lCjQAAAAAAAAAAABkARQnAQ' width=400 alt=\"img\" />\n\n> z(e4) = z(e2) z(e5) = z(e2) z(e6) = z(e1)=z(e3)\n\n- 规则二补充：在上图的基础上，Combo B 收起后，如下左图；Combo A 收起后，如下右图。可以发现，在收缩一个 Combo 后，隐藏了与该 Combo 相关的节点及边，而增加了虚拟边来表示有外部元素连接到该 Combo 内的元素。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*RTF-Q5NgVtMAAAAAAAAAAABkARQnAQ' width=350 alt=\"img\" />\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*sN2BRproFKQAAAAAAAAAAABkARQnAQ' width=350 alt=\"img\" />\n\n## Combo 布局原理\n\nCombo 使用带有不重叠约束的力导型布局方法，Combo 布局分为以下三种情况：\n\n1. 布局最细粒度所有元素；\n2. 交互展开一个 Combo；\n3. 交互收起一个 Combo。\n\n力导向布局的原则：所有点对之间存在斥力 `Fr = k/r2`，边连接的点对之间存在引力 `Fa = ks * r`，其中 `r` 为两个节点之间的距离，`k` 与 `ks` 为系数。\n\n#### 为边上的引力 Fa 添加系数 m = f(c)\n\n- 「跨组边」—— 边两端节点来自不同的 Combos，减弱其引力大小，即 `m = f(c) < 1`。图中所有标出的边都为跨组边。跨越层数越多，减弱程度越高。如 `e46`、`e23`、`e12`、`e15` 跨越了一层，`e34`、`e13` 跨越了两层。因此 `f(c)` 是关于跨越层数(c)的函数，可以是 `m = 1/c` 等；\n- 「同组边」—— 边两端节点来自相同 Combo，则引力定义方式不变，即 `m = f(c) = 1`。\n\n#### 增加 Combo 的中心力\n\n- 为方便描述，我们为 Combo X 定义层级的高低值 `P(X)`。如下图所示，A、B、C、D 四个组的层级高低：`P(A) > P(B) > P(C) > P(D)`；\n- 每个 Combo 中有由分组内节点当前的平均位置中心发出的重力，该平均中心根据每次迭代的节点位置进行更新；\n- `P(X)` 越小，其发出的重力 `G(X)` 越大。例如 `G(X) = 1/P(X)`；\n- 有些节点可能受到多个重力。例如下图 6 号节点，受到了它上层红色 Combo C 的重力 `G(C)`，绿色 Combo B 的重力 `G(B)`，黄色 Combo A 的重力 `G(A)`。`G(C) > G(B) > G(A)`。\n\n#### 迭代中的重叠检测\n\n- 每次迭代检测节点之间是否存在重叠：\n  - 若两个节点之间存在重叠，则为二者间的斥力乘以一个放大系数 `R`，使之斥开。\n- 每次迭代（或每 `q` 次迭代）检测 Combo 之间是否存在重叠：\n  - 首先计算最小能够包围该组内元素的圆形或矩形（根据 Combo Type 决定）；\n  - 计算至上而下遍历，检测每个 Combo 内层级相同的子 Combos 是否存在重叠；\n  - 若存在重叠则加大该 Combo 的重力。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Eu4FRJVqPScAAAAAAAAAAABkARQnAQ' width=400 alt=\"img\" />\n\n> 相同颜色的 border 代表了相同的层级，该图层级由高到低分别是：A > B > C > D\n"
  },
  {
    "path": "packages/site/docs/manual/advanced/coordinate-system.zh.md",
    "content": "---\ntitle: F6 坐标系深度解析\norder: 0\n---\n\n在 F6 中，实例化图时指定 `container` 字段指定了画布 `<Canvas></Canvas>` 标签的父容器。而 DOM 的坐标与真正绘制图形时的坐标并不是同一套坐标系，这可能会使得如下场景中用户指定坐标时产生困惑：\n\n- 在画布上放置一个 `position: absolute` 的 DOM 元素，如 tooltip、 menu 等时：\n  - 在点击画布上的位置放置；\n  - 点击节点时，在节点位置。上面问题在 graph 缩放、平移后更加凸显。下面，我们将深度解析这些坐标之间的关系。\n\n## 三个坐标系\n\n首先，我们要知道 F6 中有三个坐标系：clientX/clientY、canvasX/canvasY、pointX/pointY。\n\n### clientX/clientY\n\n相对于浏览器的坐标系，原点位于浏览器内容范围的左上角（坐标系位置不随滚动条变化）。如下两图中的 y 轴上页面滚动（y-scroll）位置不同，但 clientX/clientY 坐标系的原点都在左上角。因而 Container DOM 的左上角的 clientX/clientY 不同，左图 Container DOM 的左上角坐标为（100， 1000），右图 Container DOM 的左上角坐标为（100， 200）。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*WBCHS6uJSIMAAAAAAAAAAABkARQnAQ' alt='img' width='500'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yeEVR6ihc74AAAAAAAAAAABkARQnAQ' alt='img' width='500'/>\n\n### canvasX/canvasY\n\nContainer DOM 的自身坐标系。假设示例化图时设定 `width` 与 `height` 分别是 550 与 500:\n\n```\nconst Graph = new F6.Graph({\n  container: 'container',\n  width: 550,\n  height: 500\n})\n```\n\n则下图 Container DOM 的宽高即为 550\\*500。canvasX/canvsY 的原点在 Container DOM 的左上角，Container DOM 右下角的 canvasX/canvasY 坐标为（550，500）。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1wNDQI9sgRoAAAAAAAAAAABkARQnAQ' alt='img' width='1000'/>\n\n### pointX/pointY\n\n以上两种坐标系均可理解为 DOM 相关的坐标，其取值均为整数。而在真正绘制图形时，图形是根据 pointX/pointY 定位的，即节点的 (x, y) 等都是与 pointX/pointY 坐标系相对应的。图的缩放、平移其实是整个 pointX/pointY 坐标系的缩放和平移。\n\n## 三个坐标系的关系\n\n上面描述比较抽象。下面我们通过具体例子，进一步了解三种坐标系的关系。\n\n下面所有图中，灰色的坐标系表示 clientX/clientY，蓝色坐标系表示 canvasX/canvasY，红色坐标系表示 pointX/pointY。灰、蓝、红色的虚线以及数字均是相应坐标系的标注。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*8ZjgQL9GE1gAAAAAAAAAAABkARQnAQ' alt='img' width='500'/>\n\n### 图无变换\n\n下图展示了当图没有缩放和平移，也就是说其变换矩阵 matrix 为单位矩阵时，三个坐标系的关系。可以看到 canvasX/canvasY 与 pointX/pointY 两个坐标系是完全重合的，坐标轴尺度、原点位置完全一致。如下图中树图根节点（黑点标注的）位置，其 canvasX/canvasY 和 pointX/pointY 坐标值是一样的。而 clientX/clientY 的原点在浏览器内容左上角，黑点的 clientX/clientY 则需要加上 Container DOM 的左边距和上边距。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Dzz_R5yJEooAAAAAAAAAAABkARQnAQ' alt='img' width='1000'/>\n\n> 图 1：图无变换时的三种坐标系。\n\n### 图缩放\n\n当图被缩放：以 pointX/pointY 坐标系的原点为缩放中心，放大为原来的两倍，即图的变换矩阵 matrix 为：\n\n```\nmatrix =\n  2 0 0\n  0 2 0\n  0 0 1\n```\n\n很容易想到，大部分图可能会超出 Container DOM。\n\n事实上，在缩放时，是在缩放 pointX/pointY 的整个坐标系。由于这个例子中缩放中心是 pointX/pointY 坐标系的原点，缩放两倍即是 pointX/pointY 的 x 轴、y 轴的尺度变为原来的两倍。打个比方，我们把 pointX/pointY 的 x 轴、y 轴看作两根绳子，绳子上每隔 1cm 有标记 1、2、3、……这些标记就是 pointX/pointY 的坐标值，我们分别拽住绳子的一端，把它们分别沿正方向拉长一倍，那么相邻标记之间的距离变成了 2cm 。\n\ncanvasX/canvasY 和 clientX/clientY 坐标系不随图的变换而变化。换句话说，在这种情况下，canvasX/canvasY 的 (90, 0) 对应的 pointX/pointY 坐标为 (45, 0) ，canvasX/canvasY 的 (0, 250) 对应的 pointX/pointY 坐标为 (0, 125) 。而 clientX/clientY 仍然是 canvasX/canvasY 加上 Container DOM 的左/上边距。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*dbZBQKvdhYAAAAAAAAAAAABkARQnAQ' alt='img' width='1000'/>\n\n> 图 2：图缩放变换时的三种坐标系。\n\n可以看到上图中，图 1 中的树图根节点位置（黑点 A）的 canvasX/canvasY 和 clientX/clientY 坐标不变，仍然分别是 (90, 250) 和 (290, 350)。但由于 pointX/pointY 的坐标轴尺度发生了变化，所以它的 pointX/pointY 变为了 (45, 125)。而现在的根节点（黑点 B 标记）的绘制坐标不变，pointX/pointY 仍然是 (90, 250)，但黑点 B 对应的 canvasX/canvasY 和 clientX/clientY 分别变为了 (180, 500)，(380, 600)。\n\n### 图缩放 + 平移\n\n当图在上一节的基础上再进行平移：把图的左上角移动到 (50, 50) 的位置，即图的变换矩阵 matrix 为：\n\n```\nmatrix =\n  2  0  0\n  0  2  0\n  50 50 1\n```\n\n很容易想到，大部分图可能会超出 Container DOM 且左上角为出现留白。\n\n和上一节缩放相似，平移图其实是在平移 pointX/pointY 的整个坐标系。打个比方，我们把 pointX/pointY 的 x 轴、y 轴看作两根绳子，两根绳子一起向右平移 50，向下平移 50。\n\ncanvasX/canvasY 和 clientX/clientY 坐标系不随图的变换而变化。换句话说，在这种情况下，canvasX/canvasY 的 (90, 0) 对应的 pointX/pointY 坐标为 ((90-50)/2=20, 0) ，canvasX/canvasY 的 (0, 250) 对应的 pointX/pointY 坐标为 (0, (250-50)/2=100) 。而 clientX/clientY 仍然是 canvasX/canvasY 加上 Container DOM 的左/上边距。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*s35JSa1VxTsAAAAAAAAAAABkARQnAQ' alt='img' width='1000'/>\n\n> 图 3：图缩放+平移变换时的三种坐标系。\n\n可以看到上图中，图 1 中的树图根节点位置（黑点 A）的 canvasX/canvasY 和 clientX/clientY 坐标不变，仍然分别是 (90, 250) 和 (290, 350)。但由于 pointX/pointY 的坐标轴尺度、原点发生了变化，所以它的 pointX/pointY 变为了 (20, 100)。而现在的根节点（黑点 B 标记）的绘制坐标不变，pointX/pointY 仍然是 (90, 250)，但黑点 B 对应的 canvasX/canvasY 和 clientX/clientY 分别变为了 (230, 550)，(430, 650)。\n\n## 使用 API 进行转换\n\n了解了三种坐标系的含义后，我们有时需要通过相互转换使用。首先，在 F6 的事件中，event 会包含当前操作位置的三种坐标值，它们的变量名与上述三种坐标系对应关系如下：\n\n- event.x, event.y => pointX/pointY；\n- event.canvasX, event.canvasY => canvasX/canvasY；\n- event.clientX, event.clientY => clientX/clientY。\n\n可以发现后两者的名字是直接对应的，我们只需要注意 event 中的 x 和 y 对应的是 pointX/pointY 坐标系即可。\n\n### getCanvasByPoint\n\n将 pointX/pointY 坐标系的坐标值转换为 canvasX/canvasY 的坐标值。\n\n### getPointByCanvas\n\n将 canvasX/canvasY 坐标系的坐标值转换为 pointX/pointY 的坐标值。\n\n### getClientByPoint\n\n将 pointX/pointY 坐标系的坐标值转换为 clientX/clientY 的坐标值。\n\n### getPointByClient\n\n将 clientX/clientY 坐标系的坐标值转换为 pointX/pointY 的坐标值。\n\n可以发现 F6 的上述四个 API 都是围绕 point，通过上面四个 API 可以进行组合从而使得 clientX/clientY 与 canvasX/canvasY 进行转换：\n\n- clientX/clientY 转 canvasX/canvasY：\n\n```\nconst point = graph.getPointByClient(clientX, clientY)\nconst canvasXY = graph.getCanvasByPoint(point.x, point.y);\n```\n\n- canvasX/canvasY 转 clientX/clientY：\n\n```\nconst point = graph.getPointByCanvas(canvasX, canvasY)\nconst clientXY = graph.getClientByPoint(point.x, point.y);\n```\n\n## 使用三种坐标系\n\n本文开始时，我们提到了如下场景需要我们使用三种坐标系：\n\n在画布上放置一个 `position: absolute` 的悬浮 DOM 元素，如 tooltip、 menu 等时：\n\n- 在点击画布上的位置放置；\n- 点击节点时，在节点位置。\n\n如果使用了错误的坐标系来给定悬浮 DOM 元素的位置，将会出现偏移，在图有缩放、平移等变化时，偏移更加严重。在了解如何使用坐标系给悬浮 DOM 定位前，我们先定义一个悬浮 DOM 元素：\n\n```\n  const floatDOM = createDom(`\n  <div id=\"test-dom\" style=\"position: absolute; background: #f00; height: 100px; width: 200px\">\n    floating dom\n  </div>\n  `);\n```\n\n不论上述哪一种情况，我们都推荐两种挂载这个悬浮 DOM 的方式：\n\n- 方法一：挂载在 body 上：\n\n```\ndocument.body.appendChild(floatDOM);\n```\n\n- 方法二：挂载在 Container DOM 上，即与 canvas 标签同一父容器：\n\n```\nconst container = document.getElementById('container') // 假设 Container DOM 的 id 为 container\ncontainer.appendChild(floatDOM);\n```\n\n### 悬浮 DOM 挂载在 body 上\n\n众所周知，`position: absolute` 的 DOM 元素相对于父容器定位。若我们把悬浮 DOM 挂载在 body 上，它的父容器是 body，我们可以使用 `clientX/clientY` 来指定它的 `left/top`：\n\n- 在点击画布的位置上放置 DOM：\n\n```\ngraph.on('canvas:tap', event => {\n    floatDOM.style.left = event.clientX;\n  floatDOM.style.top = event.clientY;\n});\n```\n\n- 在某个节点的位置上放置 DOM：\n\n```\nconst node = graph.getNodes()[0];\nconst { x, y } = node.getModel(); // 获得该节点的位置，对应 pointX/pointY 坐标\nconst clientXY = graph.getClientByPoint(x, y);\nfloatDOM.style.left = clientXY.x;\nfloatDOM.style.top = clientXY.y;\n```\n\n### 悬浮 DOM 挂载在 Container DOM 上\n\n若我们把悬浮 DOM 挂载在 Container DOM 上，它的父容器是 Container DOM，我们可以使用 `canvasX/canvasY` 来指定它的 `marginLeft/marginTop`：\n\n- 在点击画布的位置上放置 DOM：\n\n```\ngraph.on('canvas:tap', event => {\n    floatDOM.style.marginLeft = event.canvasX;\n  floatDOM.style.marginTop = event.canvasY;\n});\n```\n\n- 在某个节点的位置上放置 DOM：\n\n```\nconst node = graph.getNodes()[0];\nconst { x, y } = node.getModel(); // 获得该节点的位置，对应 pointX/pointY 坐标\nconst canvasXY = graph.getCanvasByPoint(x, y);\nfloatDOM.style.marginLeft = canvasXY.x;\nfloatDOM.style.marginTop = canvasXY.y;\n```\n"
  },
  {
    "path": "packages/site/docs/manual/advanced/iconfont.zh.md",
    "content": "---\ntitle: 使用 Iconfont\norder: 10\n---\n\n## 简介\n\n为什么使用 iconfont？  兼容性好、种类多、多色等。在此不做过多介绍，请直接移步 <a href='https://www.iconfont.cn' target='_blank'>阿里巴巴-iconfont 平台</a>。\n\n## 效果\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rJ3lQa0HR-wAAAAAAAAAAABkARQnAQ' alt='result' width='450'/>\n\n## 下载字体图标\n\n直接到 <a href='https://www.iconfont.cn' target='_blank'>阿里巴巴字体图标库</a> 搜索下载即可，简要操作流程是：搜索图标（例如篮球）->  选择自己喜欢的图标添加入库  ->  点击页面右上角的购物车可以看到我们加入的图标 -> 添加至项目，如果没有项目到话可以新建一个  -> 在我到项目里面点击下载至本地 -> 解压。如果一切操作正常的话可以得到如下解压文件：<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EnNmQ5m7xHUAAAAAAAAAAABkARQnAQ' alt='download' width='550'/>\n\n选中红色区域的所有文件（这里面很多文件是不需要的，为了方便起见，我们全部复制即可，不需要的也不会被打包），复制到项目里面，一般放在目录 'static/icons' 或者 'assets/icons' 下面，如果没有的话可以新建目录，当然你也可以放到任意你喜欢的位置，只要引入的时候路径对即可，到此 iconfont 引入完毕。\n\nPS: 本案文件目录为 '/static/icons'。\n\n## 引入 F6\n\n多种引入方式，请移步[快速上手](/zh/docs/manual/getting-started)。 <br />PS: 本案例简单粗暴，通过 CDN 的方式引入。\n\n```html\n<script src=\"https://gw.alipayobjects.com/os/antv/pkg/_antv.f6-0.0.15/dist/f6.js\"></script>\n```\n\n## 添加字体图标\n\n引入方式可自行选择，下面为在 HTML 中引入的例子：\n\n```html\n<style>\n  @import \"/static/icons/iconfont.css\";\n</style>\n```\n\n## 使用字体\n\n```javascript\nF6.registerNode('iconfont', {\n  draw(cfg, group) {\n    const { backgroundConfig: backgroundStyle, style, labelCfg: labelStyle } = cfg;\n\n    if (backgroundStyle) {\n      group.addShape('circle', {\n        attrs: {\n          x: 0,\n          y: 0,\n          r: cfg.size,\n          ...backgroundStyle,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: 'circle-shape',\n      });\n    }\n\n    const keyShape = group.addShape('text', {\n      attrs: {\n        x: 0,\n        y: 0,\n        fontFamily: 'iconfont', // 对应css里面的font-family: \"iconfont\";\n        textAlign: 'center',\n        textBaseline: 'middle',\n        text: cfg.text,\n        fontSize: cfg.size,\n        ...style,\n      },\n      // must be assigned in F6. it can be any value you want\n      name: 'text-shape1',\n    });\n    const labelY = backgroundStyle ? cfg.size * 2 : cfg.size;\n\n    group.addShape('text', {\n      attrs: {\n        x: 0,\n        y: labelY,\n        textAlign: 'center',\n        text: cfg.label,\n        ...labelStyle.style,\n      },\n      // must be assigned in F6. it can be any value you want\n      name: 'text-shape1',\n    });\n    return keyShape;\n  },\n});\n\nconst COLOR = '#40a9ff';\nconst graph = new F6.TreeGraph({\n  ...\n  width: 800,\n  height: 600,\n  modes: {\n    default: ['collapse-expand', 'drag-canvas', 'drag-node'],\n  },\n  defaultNode: {\n    backgroundConfig: {\n      backgroundType: 'circle',\n      fill: COLOR,\n      stroke: 'LightSkyBlue',\n    },\n    type: 'iconfont',\n    size: 12,\n    style: {\n      fill: '#fff',\n    },\n    labelCfg: {\n      style: {\n        fill: COLOR,\n        fontSize: 12,\n      },\n    },\n  },\n  // 布局相关\n  layout: {\n    type: 'compactBox',\n    direction: 'LR',\n    getId(d) {\n      return d.id;\n    },\n    getHeight() {\n      return 16;\n    },\n    getWidth() {\n      return 16;\n    },\n    getVGap() {\n      return 20;\n    },\n    getHGap() {\n      return 60;\n    },\n  },\n});\n\ngraph.edge(({ target }) => {\n  const fill = target.get('model').backgroundConfig && target.get('model').backgroundConfig.fill;\n  return {\n    type: 'cubic-horizontal',\n    color: fill || COLOR,\n    label: target.get('model').relation || '',\n    labelCfg: {\n      style: {\n        fill: fill || COLOR,\n        fontSize: 12,\n      },\n    },\n  };\n});\n\nconst data = {\n  isRoot: true,\n  id: 'Root',\n  label: '可疑人员王**',\n  text: '\\ue6b2', // 对应iconfont.css 里面的content，注意加u，后面的自行修改一下。\n  style: {\n    fill: 'red',\n  },\n  labelCfg: {\n    style: {\n      fill: 'red',\n    },\n  },\n  backgroundConfig: null, // 自定义项，用于判读是否需要圆背景\n  size: 30,\n  children: [\n    {\n      id: 'SubTreeNode1',\n      label: '**网咖',\n      text: '&#xe605;',\n      relation: '上网',\n      children: [\n        {\n          id: 'SubTreeNode2',\n          label: '多伦多',\n          text: '&#xe64b;',\n        },\n        {\n          id: 'id1',\n          label: '小王',\n          text: '&#xe622;',\n          children: [\n            {\n              id: 'SubTreeNode1.2.1',\n              label: '182****2123',\n              text: '&#xe60d;',\n            },\n            {\n              id: 'SubTreeNode4',\n              label: '今晚在吗',\n              text: '&#xe629;',\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: 'SubTreeNode3',\n      label: 'subway',\n      text: '&#xe653;',\n      children: [\n        {\n          id: 'SubTreeNode3.1',\n          label: '王五',\n          text: '&#xe622;',\n        },\n        {\n          id: 'SubTreeNode3.2',\n          label: '张三',\n          text: '&#xe622;',\n        },\n      ],\n    },\n    {\n      id: 'SubTreeNode5',\n      label: '小花',\n      relation: '老婆',\n      text: '&#xe74b;',\n      backgroundConfig: {\n        fill: 'Coral',\n      },\n      style: {\n        fill: '#fff',\n      },\n      labelCfg: {\n        style: {\n          fill: 'Coral',\n        },\n      },\n      children: [\n        {\n          id: 'SubTreeNode1.2.1',\n          label: '182****2123',\n          text: '&#xe60d;',\n          relation: '通话',\n          backgroundConfig: {\n            fill: 'Coral',\n          },\n          style: {\n            fill: '#fff',\n          },\n          labelCfg: {\n            style: {\n              fill: 'Coral',\n            },\n          },\n        },\n        {\n          id: 'SubTreeNode3.3',\n          label: '凶器',\n          text: '&#xe673;',\n          relation: '指纹',\n          backgroundConfig: {\n            fill: 'Coral',\n          },\n          style: {\n            fill: '#fff',\n          },\n          labelCfg: {\n            style: {\n              fill: 'Coral',\n            },\n          },\n        },\n      ],\n    },\n    {\n      id: 'SubTreeNode6',\n      label: '马航37*',\n      relation: '乘坐',\n      text: '&#xe610;',\n    },\n  ],\n};\n\ngraph.data(data);\ngraph.render();\n```\n\n## 注意事项\n\n看了代码大家应该很清楚了，实质就是用了 text 图形，但有几个需要注意的地方：<br /> **1、text 的 `fontFamily` 必须和 iconfont.css 里面的 `font-family` 保持一致：**<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v0CoQoNIyJ8AAAAAAAAAAABkARQnAQ' alt='download' width='600'/>\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wndRQo6U-oUAAAAAAAAAAABkARQnAQ' alt='download' width='600'/>\n\n**2、data 里面的 `text` 使用的是 iconfont.css 里面的 `content`，注意加 `u` 。如有需要可自行复制。**<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*KO-IRbIXRGAAAAAAAAAAAABkARQnAQ' alt='download' width='600'/>\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*teUAQIkCffUAAAAAAAAAAABkARQnAQ' alt='download' width='600'/>\n\n**3、若出现了第一次渲染 iconfont 错误（可能显示成一个方框），可以尝试使用下面代码解决：**<br />\n\n```javascript\n// 在 graph.render() 之后调用以下语句：\nsetTimeout(() => {\n  graph.paint();\n}, 16);\n```\n\n## 工具函数 getIcon\n\n我们可以将 unicode 的转化封装成函数使用。这里注意，手动拼接 unicode 是不行的（`\\\\u${icon.unicode}`）。这里采用 iconfont.json 中的 `code_decimal` 进行转化。详细参考《[MDN String.fromCodePoint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)》。\n\n```javascript\nimport fonts from '../fonts/iconfont.json';\n\nconst icons = fonts.glyphs.map((icon) => {\n  return {\n    name: icon.name,\n    unicode: String.fromCodePoint(icon.unicode_decimal), // `\\\\u${icon.unicode}`,\n  };\n});\nconst getIcon = (type: string) => {\n  const matchIcon = icons.find((icon) => {\n    return icon.name === type;\n  }) || { unicode: '', name: 'default' };\n  return matchIcon.unicode;\n};\n```\n\n### 用法\n\n```javascript\n {\n    type: 'text',\n    attrs: {\n        id: 'node-icon',\n        x: 0,\n        y: 0,\n        fontSize: iconSize,\n        fill: primaryColor,\n        text: getIcon('logo'), // logo 为 unicode 对应的 name\n        fontFamily: 'iconfont', // 对应 CSS 里面的 font-family: \"iconfont\";\n        textAlign: 'center',\n        textBaseline: 'middle',\n    },\n  }\n```\n"
  },
  {
    "path": "packages/site/docs/manual/advanced/mode-and-custom-behavior.zh.md",
    "content": "---\ntitle: 使用多种交互模式\norder: 7\n---\n\n本章以添加节点及在两个节点之间连线为例进行介绍 F6 中的交互。在阅读本章之前，需要先熟悉以下内容：\n\n- [自定义交互行为 Behavior](/zh/docs/manual/middle/states/custom-behavior)；\n- [交互模式 Mode](/zh/docs/manual/middle/states/mode)。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*y1qkTKqhQXkAAAAAAAAAAABkARQnAQ' alt='setmode' width=400 />\n\n<br />上图是本文要实现的最终效果。完整 demo 代码参见：<a href='https://codepen.io/Yanyan-Wang/pen/qBBNaye' target='_blank'>动态添加元素</a>。<br />左上方的下拉菜单中有三个选项，用于切换交互模式 mode：\n\n- 选择 “Default” 按钮时，切换到 default 交互模式：拖拽节点时节点跟随触点移动；点击节点时选中该节点；\n- 选择 “Add Node” 按钮时，切换到  addNode 交互模式：点击空白区域在点击处增加一个节点；点击节点时选中该节点；\n- 选择 “Add Edge” 按钮时，切换到 addEdge 交互模式：依次点击两个节点将会在这两个节点之间添加一条边。\n\n**使用多个 mode 的原因**<br />  相同的操作，在不同场景下有不同的含义。例如：\n\n- 点击空白画布取消目前图上所有节点的选中状态、点击空白画布在响应位置添加节点，这两种需求都对应了用户点击画布空白处的操作；\n- 点击选中、点击两个节点添加边都涉及到了在节点上的点击操作。\n\n为了区分这些操作的含义，我们使用交互模式 mode 划分不同的场景。<br />\n\n## 前提代码\n\n下面 HTML 代码是本文的基础代码，后续功能将在这份代码中增量添加。下面代码定义了左上方的下拉菜单，以及后面将会用到图上的初始数据 `data`。\n\n```html\n<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Interactively Add</title>\n  </head>\n  <body>\n    <!-- 左上方的下拉菜单 -->\n    <select id=\"selector\">\n      <option value=\"default\">默认</option>\n      <option value=\"addNode\">添加节点</option>\n      <option value=\"addEdge\">添加边</option>\n    </select>\n    <div id=\"mountNode\"></div>\n    <script src=\"https://gw.alipayobjects.com/os/antv/pkg/_antv.f6-0.0.15/dist/f6.js\"></script>\n    <script>\n      // 初始数据\n      const data = {\n        nodes: [\n          {\n            id: \"node1\",\n            x: 100,\n            y: 200,\n          },\n          {\n            id: \"node2\",\n            x: 300,\n            y: 200,\n          },\n          {\n            id: \"node3\",\n            x: 300,\n            y: 300,\n          },\n        ],\n        edges: [\n          {\n            id: \"edge1\",\n            target: \"node2\",\n            source: \"node1\",\n          },\n        ],\n      };\n    </script>\n  </body>\n</html>\n```\n\n## 配置交互模式\n\n下面代码实例化了图，并配置了交互模式的集合 `modes`，其中包括 `default` 默认交互模式、`addNode` 增加节点交互模式、`addEdge` 增加边交互模式。每种交互模式中都包含了各自的交互行为，其中  `'drag-node'`（拖拽节点） 和  `'click-select'`（点击选中） 是 F6 内置的交互行为，`'click-add-node'`（点击空白画布添加节点） 和  `'click-add-edge'`（点击两个节点添加边） 需要我们在后面进行自定义。\n\n```javascript\n// const data = ...\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n  // 交互模式集合\n  modes: {\n    // 默认交互模式\n    default: ['drag-node', 'click-select'],\n    // 增加节点交互模式\n    addNode: ['click-add-node', 'click-select'],\n    // 增加边交互模式\n    addEdge: ['click-add-edge', 'click-select'],\n  },\n  // 节点在不同状态下的样式集合\n  nodeStateStyles: {\n    // 节点在 selected 状态下的样式，对应内置的 click-select 行为\n    selected: {\n      stroke: '#666',\n      lineWidth: 2,\n      fill: 'steelblue'\n    }\n});\n\ngraph.data(data);\ngraph.render();\n\n// 监听左上角下拉菜单的变化，根据其变化切换图的交互模式\ndocument.getElementById('selector').addEventListener('change', e => {\n  const value = e.target.value;\n  // 切换交互模式\n  graph.setMode(value);\n});\n```\n\n#### 添加节点\n\n在上面的例子中，当选中添加节点按钮时，会切换到 `addNode` 的 Mode 上。`addNode` Mode 包含了 `'click-add-node'`, `'click-select'` 两个 Behavior。`'click-add-node'` 实现了在点击空白画布时，在点击位置添加节点。这是通过使用 `F6.registerBehavior` 自定义一个名为 `'click-add-node'`（名字可以自由设定） 的 Behavior 实现的。\n\n```javascript\n// 添加的节点数量，用于生成唯一 id\nlet addedNodeCount = 0;\n\n// 封装点击添加节点的交互\nF6.registerBehavior(\"click-add-node\", {\n  // 设定该自定义行为需要监听的事件及其响应函数\n  getEvents() {\n    // 监听的事件为 canvas:tap，响应函数是 onTap\n    return {\n      \"canvas:tap\": \"onTap\",\n    };\n  },\n  // 点击事件\n  onTap(ev) {\n    const graph = this.graph;\n    // 在图上新增一个节点\n    const node = this.graph.addItem(\"node\", {\n      x: ev.canvasX,\n      y: ev.canvasY,\n      id: `node-${addedNodeCount}`, // 生成唯一的 id\n    });\n    addedNodeCount++;\n  },\n});\n```\n\n#### 添加边\n\n在上面的例子中，当需要在两个节点之间连线时，要先切换到添加边的 Mode 上。下面代码自定义了名为  `'click-add-edge'`（名字可以自由设定）的 Behavior 实现两个节点之间连线。\n\n```javascript\n// 封装点击添加边的交互\nF6.registerBehavior(\"click-add-edge\", {\n  // 设定该自定义行为需要监听的事件及其响应函数\n  getEvents() {\n    return {\n      \"node:tap\": \"onTap\", // 监听事件 node:tap，响应函数是 onTap\n      mousemove: \"onMousemove\", // 监听事件 mousemove，响应函数是 onMousemove\n      \"edge:tap\": \"onEdgeTap\", // 监听事件 edge:tap，响应函数是 onEdgeTap\n    };\n  },\n  // getEvents 中定义的 'node:tap' 的响应函数\n  onTap(ev) {\n    const node = ev.item;\n    const graph = this.graph;\n    // 当前点击的节点的位置\n    const point = { x: ev.x, y: ev.y };\n    const model = node.getModel();\n    if (this.addingEdge && this.edge) {\n      graph.updateItem(this.edge, {\n        target: model.id,\n      });\n\n      this.edge = null;\n      this.addingEdge = false;\n    } else {\n      // 在图上新增一条边，结束点是当前点击的节点的位置\n      this.edge = graph.addItem(\"edge\", {\n        source: model.id,\n        target: point,\n      });\n      this.addingEdge = true;\n    }\n  },\n  // getEvents 中定义的 mousemove 的响应函数\n  onMousemove(ev) {\n    const point = { x: ev.x, y: ev.y };\n    if (this.addingEdge && this.edge) {\n      // 更新边的结束点位置为当前触点位置\n      this.graph.updateItem(this.edge, {\n        target: point,\n      });\n    }\n  },\n  // getEvents 中定义的 'edge:tap' 的响应函数\n  onEdgeTap(ev) {\n    const currentEdge = ev.item;\n    // 拖拽过程中，点击会点击到新增的边上\n    if (this.addingEdge && this.edge == currentEdge) {\n      graph.removeItem(this.edge);\n      this.edge = null;\n      this.addingEdge = false;\n    }\n  },\n});\n```\n\n## 完整代码\n\n完整 demo 代码参见：<a href='https://codepen.io/Yanyan-Wang/pen/qBBNaye' target='_blank'>动态添加元素</a>。\n"
  },
  {
    "path": "packages/site/docs/manual/advanced/state-new.zh.md",
    "content": "---\ntitle: F6 状态管理的最佳实践\norder: 5\n---\n\n### 背景\n\n元素（节点/边）的状态（state）用于反馈用户交互、数据变化。通过状态，可以将「交互/数据变化」与视图中「元素的样式变化」快速关联。\n\n乍看之下，状态似乎很简单，但从目前业务痛点与经验来看，“状态”有许多隐藏的需求和复杂性。简单的实现方式，会造成易用性低下的问题。\n\n### 挑战\n\n要解决业务中常见的状态问题，并提供清晰明了、简单易用的方案必须要考虑以下问题：\n\n- **简单快速地设置目标状态**：当一个节点或一条边上已经设置了大量不同状态后，要再设置一个新状态时，能够快速将之前所有状态清除；\n- **状态多值**，即一个状态量存在多个不同的值，如节点代表人，有“健康”、“疑似”、“确诊”、“死亡”四种状态；\n- **状态间互斥**：“健康”、“疑似”、“确诊”、“死亡”四种状态中，“死亡”与其他三种就是互斥的，不可能同时存在“健康”和“死亡”两种状态；\n- **节点或边中所有元素的状态更新**：如一个由文本和圆组成的节点，状态变化时不仅能设置圆的样式，也可以设置文本的样式；\n- **更新状态样式**，当更新节点的样式时，能够同时更新状态的样式。\n\n### 方案\n\n为了解决以上问题，我们将 F6 的状态管理分为以下几层：\n\n- 定义状态：统一的定义方式；\n- 设置状态：`setItemState` 方法；\n- 更新状态：`updateItem` 支持更新状态；\n- 取消状态：`clearItemStates` 方法。\n\n### 定义状态\n\n#### 全局状态\n\nF6 中定义全局状态是在实例化 Graph 时通过 `nodeStateStyles` 和 `edgeStateStyles` 来定义。\n\n```javascript\nconst graph = new F6.Graph({\n  container,\n  width,\n  height,\n  nodeStateStyles: {\n    hover: {\n      fill: \"red\",\n      \"keyShape-name\": {\n        fill: \"red\",\n      },\n    },\n  },\n  edgeStateStyles: {},\n});\n```\n\n当设置 [keyShape](/zh/docs/manual/middle/elements/shape/shape-keyshape/#keyshape) 的状态时，可以直接在 `nodeStateStyles` 或 `edgeStateStyles` 中定义样式，或者将 keyShape 的 `name` 属性值作为 key 定义样式，我们建议使用后者。\n\n#### 节点/边状态\n\n除过全局状态外，F6 也支持针对不同节点定义不同的状态，使用 `graph.node(fn)` / `graph.edge(fn)` 或在数据中设置 `stateStyles` 即可。\n\n```javascript\ngraph.node((node) => {\n  return {\n    ...node,\n    stateStyles: {},\n  };\n});\n\nconst data = {\n  nodes: [\n    {\n      id: \"node\",\n      stateStyles: {},\n    },\n  ],\n};\n```\n\n#### 子元素状态\n\n在 F6 中，通常一个节点都是由多部分组成的，但 F6 之前的版本支持设置 keyShape 的状态，如果要设置其他部分元素的状态，就需要在自定义元素时复写 `setState` 方法，写过的同学都会知道有多么痛苦。F6 版本中，我们支持了定义子元素的状态，从此再也不用去复写 `setState` 方法了。\n\n子元素状态也支持两种设置方式，为了演示方便，在这里我们只演示在在全局状态中定义子元素状态。\n\n```javascript\nconst graph = new F6.Graph({\n  container,\n  width,\n  height,\n  nodeStateStyles: {\n    selected: {\n      \"sub-element\": {\n        fill: \"green\",\n      },\n      \"text-element\": {\n        stroke: \"red\",\n      },\n    },\n  },\n  edgeStateStyles: {},\n});\n```\n\n在「定义状态」部分，我们建议在 `nodeStateStyles`/`edgeStateStyles` 中定义状态时，使用 keyShape 的 `name` 属性作为 key 值来定义状态样式，因为我们在定义子元素的状态时也采用同样的方式，结构上比较统一。\n\n如上示例代码所示，我们定义了节点中 `name` 属性值为 `'sub-element'` 和 `'text-element'` 两部分的样式，当我们通过 `graph.setItemState(item, 'selected', true)` 设置指定 item 的状态时，子元素 `'sub-element'` 和 `'text-element'` 的样式也会同步更新。\n\n```javascript\n// 执行下面语句以后，name 为 sub-element 和 name 为 text-element\n// 的元素填充色和描边色都会改变\ngraph.setItemState(item, \"selected\", true);\n```\n\n另外，F6 也支持在使用 `updateItem` 更新节点或边的时候定义状态。\n\n### 设置状态\n\nF6 中状态支持多值和二值两种情况。\n\n> 二值：值只能为 `true` / `false`，无其他选择，即要么有这个状态，要么没有；多值：如节点代表人，有“健康”、“疑似”、“确诊”、“死亡”四种状态。\n\n#### 二值状态\n\n二值状态一般常用于交互过程中，如 hover、selected 等状态，当节点被选中时，节点应用 selected 状态的样式，取消选中时，去掉 selected 状态的样式。\n\n在 F6 中，使用 `graph.setItemState(item, 'selected', true)` 来设置二值状态。\n\n```javascript\nconst graph = new F6.Graph({\n  //...\n  nodeStateStyles: {\n    selected: {\n      fill: \"red\",\n    },\n  },\n});\n\ngraph.setItemState(item, \"selected\", true);\n```\n\n#### 多值状态\n\n除过像 hover、selected 这种交互状态外，还会存在很多的业务状态，如节点代表人，有“健康”、“疑似”、“确诊”、“死亡”四种状态，此时使用 `true`/`false` 的形式就不能满足，需要支持单个状态可以有多个值的情况。\n\n```javascript\nconst graph = new Graph({\n  // ... 其他配置\n  // 节点在不同状态下的样式\n  nodeStateStyles: {\n    // 实现 bodyState 的【多值】【互斥】\n    \"bodyState:healthy\": {\n      // keyShape 该状态下的样式, 可以使用三种方式指定：\n      fill: \"green\",\n    },\n    \"bodyState:suspect\": {},\n    \"bodyState:ill\": {},\n  },\n});\n\ngraph.setItemState(item, \"bodyState\", \"healthy\");\n```\n\n#### 互斥状态\n\n上面的多值状态，也很好地解决了状态互斥的问题，还以上面的 `bodyState` 状态为例，该状态共有 `healthy`、`dead`、`ill` 等值。\n\n```javascript\n//【互斥】\ngraph.setItemState(item, \"bodyState\", \"healthy\");\n// 执行下面这句话 bodyState 将会被改变成 dead，\n// item.hasState('bodyState:healthy') 为 false\ngraph.setItemState(item, \"bodyState\", \"dead\");\n```\n\n执行上面的两句后， item 只会有 `bodyState` 状态的 `dead` 一个值，而二值状态不能解决这个问题。\n\n```javascript\ngraph.setItemState(item, \"select\", true);\ngraph.setItemState(item, \"active\", true);\n```\n\n执行上面的两句设置二值状态的语句后，item 具有 select 和 active 所有的属性值，不能满足互斥需求。\n\n### 修改状态样式配置\n\n`updateItem` 支持更新 item 中所有子图形的默认样式和状态样式。\n\n#### 更新默认样式\n\n`updateItem` 可用于更新 keyShape 以及其他子图形的默认样式。使用 `updateItem` 更新子图形样式时，只需要在 `style` 中以子图形的 `name` 属性作为为 key 即可。\n\n```javascript\n// 更新 item，除过更新 keyShape 外，还更新 name 值为 node-text 的图形\ngraph.updateItem(item, {\n  style: {\n    fill: \"green\",\n    stroke: \"green\",\n    opacity: 0.5,\n    \"node-text\": {\n      stroke: \"yellow\",\n    },\n  },\n});\n```\n\n#### 更新状态样式\n\n`updateItem` 也支持更新 keyShape 与其他子图形的状态样式，使用 `stateStyles` 属性。\n\n```javascript\ngraph.updateItem(item, {\n  style: {\n    stroke: \"green\",\n    \"node-text\": {\n      stroke: \"yellow\",\n    },\n  },\n  stateStyles: {\n    hover: {\n      opacity: 0.1,\n      \"node-text\": {\n        stroke: \"blue\",\n      },\n    },\n  },\n});\ngraph.setItemState(item, \"hover\", true);\n```\n\n使用 `updateItem` 更新状态的样式时，会存在两种情况：\n\n- 使用 `updateItem` 更新时，item 已有指定状态，即 `item.hasState('hover') === true`，此时状态值对应的属性会立即生效；\n- 使用 `updateItem` 更新时，item 没有指定的状态，即 `item.hasState('hover') === false`，更新以后，当用户执行  `graph.setItemState(item, 'hover', true)` 后，hover 状态的 `stroke` 属性值为 `updateItem` 时设置的值。\n\n### 取消状态\n\n在 F6 中，我们建议使用 `graph.clearItemStates`  来取消 `graph.setItemState` 设置的状态，`graph.clearItemStates` 支持一次取消单个或多个状态。\n\n```javascript\ngraph.setItemState(item, \"bodyState\", \"healthy\");\ngraph.setItemState(item, \"selected\", true);\ngraph.setItemState(item, \"active\", true);\n\n// 取消单个状态\ngraph.clearItemStates(item, \"selected\");\ngraph.clearItemStates(item, [\"selected\"]);\n\n// 取消多个状态\ngraph.clearItemStates(item, [\"bodyState:healthy\", \"selected\", \"active\"]);\n```\n\n以上就是 F6 中状态的定义、设置和取消的全过程，很清晰明了，但总感觉缺少了点什么，没错，想必聪明的你已经发现了，缺少了更新子元素及和 `updateItem` 配合使用的方案。不要着急，接着放下看。\n\n### 状态优先级\n\nF6 中提供了 `hasState` 方法用于判断元素是否有某种状态。但具体哪个状态的优先级高，哪个状态值应该覆盖其他的类似问题我们就没有再做任何限制，完全由业务用户控制，实现这种控制也非常简单。\n\n```javascript\n// 设置节点处于 active 状态\ngraph.setItemState(item, \"active\", true);\n\nconst hasActived = item.hasState(\"active\");\n\n// 当节点没有 active 时才设置 tap 状态\nif (!hasActived) {\n  graph.setItemState(item, \"tap\", true);\n}\n```\n"
  },
  {
    "path": "packages/site/docs/manual/cases/edgeBundling.zh.md",
    "content": "---\ntitle: Edge Bundling\norder: 2\n---\n\n## 背景\n\n大多数图数据在可视化时被展示成点-线图（Node-link Diagram）的形式。点-线图特别适用于如交通网络图一类的关系数据的展示，这种数据的节点通常带有地理位置信息，例如迁徙图、移民图、航线图等。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Vzp9Q7ZA0rcAAAAAAAAAAABkARQnAQ' width=400 alt='img'/> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GRE6SrrAWnoAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n> （左）图 1. 法国航线图。（右）图 2. 美国航线图。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rC66Raf7OWwAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AwQbT7WotYwAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n> （左）图 3. 世界网络 IXP 对等图。（右）图 4. 美国移民图。\n\n## 问题\n\n虽然点-线图提供了直观的可视化，但是当数据存在大量节点和边时，视觉混乱（Visual Clutter）很快成为严重的问题。点-线图中的视觉混乱通常是边缘拥塞的直接结果，而在如交通网络一类数据中，节点位置通常具有明确定义的含义，并不总是可以修改节点位置以减少视觉混乱，如图 1 ～ 4 四个例子。因此，学术界诸多研究者设计了各种通过优化边的方式减轻上述视觉混乱，其中边绑定（Edge Bundling）方法被广泛研究和应用。各种边绑定的方法总结在「<a href='https://yuque.antfin-inc.com/shiwu.wyy/go1ec6/znmtuw' target='_blank'>链接</a>」。\n\n例如下面这一个复杂的美国航线数据集，节点代表美国城市，带有坐标和经纬度信息；一条边代表一条航线：\n\n```json\n{\n  \"nodes\": [\n    {\n      \"x\": -922.24444,\n      \"y\": 347.29444,\n      \"id\": \"0\",\n      \"lon\": -92.224444,\n      \"lat\": 34.729444\n    },\n    {\n      \"x\": -922.24444,\n      \"y\": 347.29444,\n      \"id\": \"1\",\n      \"lon\": -92.224444,\n      \"lat\": 34.729444\n    }\n    // ... 其他节点\n  ],\n  \"edges\": [\n    {\n      \"source\": \"0\",\n      \"target\": \"21\",\n      \"id\": \"e0\"\n    },\n    {\n      \"source\": \"2\",\n      \"target\": \"13\",\n      \"id\": \"e1\"\n    }\n    // ... 其他边\n  ]\n}\n```\n\n如果使用 F6 简单地将节点和边渲染出来，将会得到如下结果： <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zYUrQqDGslMAAAAAAAAAAABkARQnAQ'  width=850 alt='img'/>\n\n> 图 5. F6 渲染原始数据结果\n\n我们发现简单地将该数据渲染后的结果航线纵横交错，穿梭在密集的城市当中，视觉上十分混乱，即难以看清细节，也不能发现航线的总体趋势。\n\n## 期待效果\n\n我们希望可以通过边绑定的方法降低图 5 的视觉混乱，从而清晰图的整体走势、结构，突出航线频繁的城市，它们可能是重要的交通枢纽，并展示更多的统计信息，以便观察者进行分析。借助 F6，我们可以实现如下效果。通过边绑定，边的交错混乱情况被降低，颜色映射航班的飞行方向（出发（橙红色）与降落（青色））。节点大小表示到达与离开该城市的航班总数量，每个节点使用了饼图展示达到（橙红色）和离开（青色）航班的比例。并增加 hover 的交互，使用 tooltip 展示每个城市的经纬度。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*BC4AQbOd6HIAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n> 期待效果图及 tooltip 效果。\n\n## 实现步骤\n\n### 统计必要信息\n\n首先，我们使用简单的 JS 根据数据统计每个节点的总度数（degree，即出入该城市的航线总数）、出度（outDegree，即飞出该城市的航线数）、入度（inDegree，即飞入该城市成航线数），为后续映射到节点上做好准备。\n\n```javascript\nconst nodes = data.nodes;\nconst edges = data.edges;\nnodes.forEach((n) => {\n  n.y = -n.y;\n  n.degree = 0;\n  n.inDegree = 0;\n  n.outDegree = 0;\n});\n// compute the degree of each node\nconst nodeIdMap = new Map();\nnodes.forEach((node) => {\n  nodeIdMap.set(node.id, node);\n});\nedges.forEach((e) => {\n  const source = nodeIdMap.get(e.source);\n  const target = nodeIdMap.get(e.target);\n  source.outDegree++;\n  target.inDegree++;\n  source.degree++;\n  target.degree++;\n});\nlet maxDegree = -9999,\n  minDegree = 9999;\nnodes.forEach((n) => {\n  if (maxDegree < n.degree) maxDegree = n.degree;\n  if (minDegree > n.degree) minDegree = n.degree;\n});\nconst sizeRange = [1, 20];\nconst degreeDataRange = [minDegree, maxDegree];\n// 将范围是 degreeDataRange 的 degree 属性映射到范围 sizeRange 上后，\n// 写入到 nodes 中元素的 ‘size’ 属性中\nscaleNodeProp(nodes, \"size\", \"degree\", degreeDataRange, sizeRange);\n```\n\n`scaleNodeProp()` 方法将指定的节点属性 `refPropName` 根据给定数值范围 `outRange` 归一化，映射到另一个属性 `propName` 上：\n\n```javascript\n/**\n * 映射属性\n * @param  {array} nodes          对象数组\n * @param  {string} propName      写入的属性名称\n * @param  {string} refPropName   被归一化的属性名称\n * @param  {array} dataRange      被归一化的属性的值范围 [min, max]\n * @param  {array} outRange       写入的属性的值范围 [min, max]\n */\nfunction scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n  const outLength = outRange[1] - outRange[0];\n  const dataLength = dataRange[1] - dataRange[0];\n  nodes.forEach((n) => {\n    n[propName] =\n      ((n[refPropName] - dataRange[0]) * outLength) / dataLength + outRange[0];\n  });\n}\n```\n\n通过上面两段代码，我们已经将归一化的度数映射到节点大小 `size` 上。\n\n### 实例化边绑定插件\n\nF6 中提供的边绑定插件是基于 FEDB（<a href='http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.212.7989&rep=rep1&type=pdf' target='_blank'>Force-Directed Edge Bundling for Graph Visualization</a>）一文的实现。可以通过调节参数调整边绑定的效果。\n\n```javascript\nconst edgeBundling = new Bundling({\n  bundleThreshold: 0.6, // 绑定的容忍度。数值越低，被绑定在一起的边相似度越高，即被绑在一起的边更少。\n  K: 100, // 绑定的强度\n});\n```\n\n### 自定义饼图节点\n\n在第一步中，我们已经为节点大小 size 映射了每个节点的总度数。为了更详细展示每个城市飞出和飞入航班的比例，我们希望在每个节点上显示一个类似于饼图的效果。例如<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*stNMRLlBLMUAAAAAAAAAAABkARQnAQ' width=60 alt='img'/> ，桔红色扇形代表飞入该城市的航班比例，青色代表飞出该城市的航班比例。F6 内置的 circle 、rect 等节点形状不能满足这一需求，但 F6 提供了节点的扩展机制，通过下面的代码片段，可以在 F6 中注册一个自定义的节点：\n\n```javascript\nconst lightBlue = \"rgb(119, 243, 252)\";\nconst lightOrange = \"rgb(230, 100, 64)\";\n\n// 注册自定义名为 pie-node 的节点类型\nF6.registerNode(\n  \"pie-node\",\n  {\n    drawShape: (cfg, group) => {\n      const radius = cfg.size / 2; // 节点半径\n      const inPercentage = cfg.inDegree / cfg.degree; // 入度占总度数的比例\n      const inAngle = inPercentage * Math.PI * 2; // 入度在饼图中的夹角大小\n      const outAngle = Math.PI * 2 - inAngle; // 出度在饼图中的夹角大小\n      const inArcEnd = [radius * Math.cos(inAngle), radius * Math.sin(inAngle)]; // 入度饼图弧结束位置\n      let isInBigArc = 1,\n        isOutBigArc = 0;\n      if (inAngle > Math.PI) {\n        isInBigArc = 0;\n        isOutBigArc = 1;\n      }\n      // 定义代表入度的扇形形状\n      const fanIn = group.addShape(\"path\", {\n        attrs: {\n          path: [\n            [\"M\", radius, 0],\n            [\"A\", radius, radius, 0, isInBigArc, 0, inArcEnd[0], inArcEnd[1]],\n            [\"L\", 0, 0],\n            [\"B\"],\n          ],\n          lineWidth: 0,\n          fill: lightOrange,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"in-fan-shape\",\n      });\n      // 定义代表出度的扇形形状\n      const fanOut = group.addShape(\"path\", {\n        attrs: {\n          path: [\n            [\"M\", inArcEnd[0], inArcEnd[1]],\n            [\"A\", radius, radius, 0, isOutBigArc, 0, radius, 0],\n            [\"L\", 0, 0],\n            [\"B\"],\n          ],\n          lineWidth: 0,\n          fill: lightBlue,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"out-fan-shape\",\n      });\n      // 返回 keyshape\n      return fanIn;\n    },\n  },\n  \"single-node\",\n);\n```\n\n这样，我们就在 F6 中注册了一个名为  pie-node 的节点类型。\n\n### 实例化图\n\n在这一步中，我们在实例化图时，并为之指定边绑定插件、节点类型（刚才自定义的 pie-node）、节点样式、边样式（渐变色）。\n\n```javascript\nconst edgeBundling = new Bundling({\n  bundleThreshold: 0.6, // 绑定的容忍度。数值越低，被绑定在一起的边相似度越高，即被绑在一起的边更少。\n  K: 100, // 绑定的强度\n});\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 800,\n  plugins: [edgeBundling], // 加入插件\n  fitView: true,\n  defaultNode: {\n    size: 3,\n    color: 'steelblue',\n    fill: 'steelblue',\n  },\n  nodeStyle: {\n    default: {\n      lineWidth: 0,\n      fill: 'steelblue',\n    },\n  },\n  edgeStyle: {\n    default: {\n      lineWidth: 0.7,\n      strokeOpacity: 0.1, // 设置边透明度，在边聚集的部分透明度将会叠加，从而具备突出高密度区域的效果\n      stroke: 'l(0) 0:' + llightBlue16 + ' 1:' + llightOrange16,\n    },\n  },\n});\n```\n\n这里出发端的颜色为 `llightBlue16`，结束端的颜色为 `llightOrange16`：\n\n```javascript\nconst llightBlue16 = \"#C8FDFC\";\nconst llightOrange16 = \"#FFAA86\";\n```\n\n为了配合节点和边的颜色，这里将页面的 body 的颜色设置为黑色：\n\n```html\n<style>\n  body {\n    background: rgb(0, 0, 0);\n  }\n</style>\n```\n\n### 执行绑定和渲染\n\n有了 graph 实例和 edgeBundling 实例后，我们执行下面代码进行绑定操作和图的数据读入及渲染：\n\n```javascript\nedgeBundling.bundling(data); // 执行插件的绑定操作\ngraph.data(data);\ngraph.render();\n```\n\n#### 设置 tooltip 与交互操作\n\n使用 tooltip，可以在鼠标 hover 到节点上时展示该节点的其他属性值。首先在 HTML 中设定 tooltip 的样式：\n\n```html\n<style>\n  .g6-tooltip {\n    border: 1px solid #e2e2e2;\n    border-radius: 4px;\n    font-size: 12px;\n    color: #545454;\n    background-color: rgba(255, 255, 255, 0.9);\n    padding: 10px 8px;\n    box-shadow: rgb(174, 174, 174) 0px 0px 10px;\n  }\n</style>\n```\n\n然后，在上一步实例化 `graph` 时，增加一个名为 `modes` 的配置项到参数中，如下写法启动了 `drag-canvas` 画图拖动操作、`zoom-canvas` 画布放缩操作，以及 `tooltip`，在  `formatText` 函数中指定了 `tooltip` 显示的文本内容：\n\n```javascript\n modes: {\n   default: [ 'drag-canvas', 'zoom-canvas', {\n     type: 'tooltip',\n     formatText(model) {\n       const text = 'Longitude: ' + model.lon + '\\n Latitude: ' + model.lat;\n       return text;\n     },\n     shouldUpdate: e => {\n       return true;\n     }\n   }]\n }\n```\n\n这样，当鼠标移动到节点上时，带有经纬度信息的 `tooltip` 将会出现：<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*d3mSS6mETf8AAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n> tooltip\n\n同时，可以拖拽和放缩画布： <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*5h5tR5eDM6UAAAAAAAAAAABkARQnAQ' width=550 height=350 alt='img'/>\n\n> 缩放和拖动画布\n\n## 分析\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ePUIQZaDVecAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n> 最终效果图。节点大小代表飞入及飞出该城市航线总数。节点饼图展示飞出与飞入航线比例统计信息（橙红色为飞入，青色为飞出）。边的渐变色代表航班的飞行方向。起始端：青色；结束端：橙红色。\n\n最后，让我们一起分析如下的最终结果图给我们带来的信息：\n\n- 大节点主要集中在中偏东部，根据其经纬度，可以推测这些城市有：亚特兰大、纽约、芝加哥、休斯顿、堪萨斯等，这些城市都是美国重要的交通枢纽；\n- 美国东部的线桔红色居多，说明东部城市的飞入航班较多；\n- 相反，西部城市的飞出航班较多；\n- 整体飞行方向从东至西；\n- 东部的航线也较之于西部更加密集、频繁；\n- 西海岸由西雅图和波特兰飞往洛杉矶的航班较多。\n\n上述发现很容易被解释：美国东部是美国的经济、政治集中区域。\n"
  },
  {
    "path": "packages/site/docs/manual/cases/relations.zh.md",
    "content": "---\ntitle: 基于 F6 的图分析应用\norder: 1\n---\n\n## 背景\n\n社交网络分析是图可视化中一个重要的应用场景。<br />随着社交网络越来越流行，人与人、人与组织之间的关系变得越来越复杂，使用传统的分析手段，已经很难满足我们的分析需求。在这种情况下，图分析及图可视化显得愈发重要。\n\n## 功能概述\n\n基于 F6 实现一个图分析应用，模拟了一个关系分析场景，使用模拟数据，来展示在图分析应用中我们可以做的一些事情：\n\n- 关系扩散；\n- 关系预判；\n- 关系聚合；\n- 圈检测；\n- 圈查询；\n- 高效分析；\n  - 数据过滤；\n  - 实时标记；\n  - 隐藏 / 显示 Label；\n  - 隐藏 / 显示节点。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rPWURa-ft2QAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n## 关系扩散\n\n通过输入的方式查询到具体的个人后，可以针对个人做 1-6 度的关系扩散，也可以进一步分析与他相关的人或组织的关系。\n\n适用场景：在社交网络中，通过 A 的一度关系可以查询到他的所有朋友，通过二度关系，可以查询到他的朋友的朋友，通过分析相关动态，可以了解到关于 A 的更多的信息。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HxQMR5kqVJcAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n## 关系预判\n\n在海量数据的社交网络中，人与人、人与组织之间会存在多种类型的关系。假设已知，如 A 是 B 的朋友，B 属于 og 组织。未知：C 与 D 是否也属于 og 组织；如果加入 C 和 D 点到当前图上，网络会如何变化；为 C 和 D 增加“预测”类型的关系，网络会如何变化。为了解这些未知的信息，我们使用关系预判功能。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*nWzDSKyUjUQAAAAAAAAAAABkARQnAQ' width=450 alt='img'/>\n\n适用场景：在社交网络中，为两个原本不相关的节点增加预测边，查看网络发生的变化，以确定该操作对图产生的效果。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*O22IRIJs4FMAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n## 关系聚合\n\nA 和 B 之间可能会存在多个同事关系，如 A 和 B 在 company1 公司是同事，在 company2 公司也是同事，只是两条同事关系的时间戳不同。对于这种情况，我们没必要将全有的关系都绘制到页面上，可以将同类型的关系合并成一条关系，点击时再展开。\n\n适用场景：为了降低视觉干扰，将多条同类型的关系合并成一条。\n\n## 圈检测\n\n在社交网络数据中，假设我们已知朋友圈：A 是 B 的朋友，B 是 C 的朋友，C 又是 A 的朋友。此时，我们想知道 D 和 E 是否与我们已知的朋友圈相关。使用圈检测的功能，输入 D 或 E，若他们存在于已知的朋友圈中，则会被展示出来。\n\n适用场景：检测用户是否存在于已知的朋友圈中。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*z895QL8sBWQAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n## 圈查询\n\n对于已知的圈，我们可以查询每个圈中包含的节点，以及它们之间的关系。\n\n适用场景：查询指定朋友圈中所有的用户以及用户之间的关系。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ZFytR6C3uYIAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n## 高效分析\n\n图分析应用中，为了提升分析的效率，我们提供了数据过滤、标记重点节点和边、隐藏 / 显示 Label 等辅助功能，可帮助用户更快更好地进行分析。\n\n### 数据过滤\n\n当画布上存在大量的节点及边时，想要进行高效分析是件很困难的事情，我们可以通过过滤的功能，将暂时不需要关注的类型的节点和边先隐藏起来，以便我们将精力放在重点的节点和边上面。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MydBT7sgPHIAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n### 标记节点及边\n\n在分析过程中，将重点需要关注的节点和边进行标记，可以在复杂的网络关系中很清晰地呈现出我们需要重点关注的内容。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7V_-TJv9ZgQAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n该功能尤其适用于探索特别复杂的网络中。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cYv4RocCh34AAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n### 隐藏 / 显示节点\n\n在分析过程中，我们可以选择性地隐藏不重要的节点及其相关边，方便我们将注意力集中在重点的节点上面。当分析完成以后，可以选择将隐藏的节点全部显示出来。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2L89QI_u16AAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n### 隐藏 / 显示 Label\n\n当边的数量特别大时，边上的 label 相互重叠，影响我们进一步的分析。此时，可以选择将边上的 label 隐藏。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YXxGQIrYgxMAAAAAAAAAAABkARQnAQ' width=850 alt='img'/>\n\n## 总结\n\n本应用以模拟的社交网络数据为例，演示了使用 <a href='https://github.com/antvis/g6' target='_blank'>F6</a> 构建的一个图分析的应用。在实际的场景中，不局限于社交网络数据，任何重关系类的数据，都可使用图分析的技术进行分析，如风控、反洗钱、信用卡诈骗等金融领域；商品、商家及卖家等电商领域。<a href='https://github.com/antvis/g6' target='_blank'>F6</a> 是一款开源的图可视化引擎，专注于关系数据的展示与分析，非常适合用于构建重型的图分析应用。\n\n## 应用地址\n\n<br />F6 官网：<a href='https://g6.antv.vision/' target='_blank'>https://g6.antv.vision/</a> <br />F6 GitHub：<a href='https://github.com/antvis/g6' target='_blank'>https://github.com/antvis/g6</a>\n"
  },
  {
    "path": "packages/site/docs/manual/cases/sequenceTime.zh.md",
    "content": "---\ntitle: 基于 F6 的关系时序分析应用\norder: 0\n---\n\n## 背景分析\n\n随着互联网业务不断快速发展，业务和应用系统、中间件及其之间的关系、依赖变得越来越复杂。不论是研发、测试还是架构、运维人员，对公司线上的应用、中间件等超级复杂关系的整体把控越来越无力维护。一旦线上出现问题，从故障发生到组织应急和应急的整个过程需要多方参与并使用多个系统工具和平台来回查询、不停同步信息。过程的多个阶段之间有断裂，影响面评估和变更追溯耗时较长，且对应急人员的要求有较高的门槛。整体故障应急缺乏高效的、系统的解决方案。例如，线上告警后不能快速定位影响面和变更源，很难准确进行决策，不能迅速最小化的处理线上故障。\n\n基于这样的背景，我们尝试提一套应急方案可视化，解决应急过程中流程、影响面、应急预案等一系列应急决策辅助信息和手段，快速止血以减少和避免故障升级。\n\n## 功能设计\n\n### 1. 应急模式大图展示\n\n应急模式大图是应急模式进入后的主页面，大图应该包括的功能点有： <br />1）本次发生异常的节点、与异常节点的有调用关系的其他节点，以及其调用关系链路展示； <br />2）链路或者节点的一些备注信息展示； <br />3）节点上有交互能力：比如 hover 或者 click 之后有详细信息展示； <br />4）与左侧影响面中选择项联动展示大图； <br />5）节点的展开菜单扩展； <br />6）时序分析功能，时间轴，展示最近一小时每分钟的错误总数柱形图，点击柱形图表示选择某时间点，选择后可触发全部功能请求接口，刷新全部功能。<br />\n\n### 2. 影响面面板功能\n\n影响面的概念是指：每一次发生异常产生的影响。这个影响一方面体现在业务层面，是业务影响面；另一方面体现在更具体的前端页面上，叫前端影响面；体现在具体应用，是应用影响面。<br />影响面以悬浮面板的形式吸附在页面边缘（左侧），应该具有的功能有：<br />1）打开 / 收起影响面面板；<br />2）展示影响面列表信息；<br />3）切换业务影响面/前端影响面/应用影响面；<br />4）影响趋势图；<br />5）日志查看列表；<br />6）信息模块可折叠；<br />7）基础架构依赖。<br />\n\n### 3. 执行操作面板功能\n\n执行操作面板的入口是：点击查看影响面列表中的详情。<br />执行操作含的功能有：<br />1）概要信息列表展示和操作功能；<br />2）应急辅助的列表展示以及操作功能（有弹出展示图标）；<br />3）打开 / 收起影响面面板；<br />4）信息模块可折叠。<br />\n\n### 4. APP 详情面板扩展功能\n\n在原有的 APP 详情页上有添加一些扩展功能：<br />1）日志展示；<br />2）应急辅助。<br />\n\n### 5. 其他功能\n\n1. 链接分享，分享的链接中带有时间参数，用以回到异常现场；\n2. 可以限流；\n3. 关键字高亮，使用正则去匹配部分关键字并处理待显示的 HTML 文本。\n\n## 主要技术实现\n\n### 应急大图\n\n应急大图是一幅有状态的架构大图，主要目的是其一展示系统间关系，分析系统或接口间依赖，其二，除架构上的相关信息外，整个系统集群在某时刻的正常或异常状态的展示和分析，从运维的角度看则更具备意义。通过大图用户就能直观看到业务链路上那个节点出了问题。 <br />我们提供了两种模式的应急大图：流量视角和链路视角。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cilcQ7Z1_OYAAAAAAAAAAABkARQnAQ' width=425 height=250 alt='img'/>\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zOJzTL-l89cAAAAAAAAAAABkARQnAQ' width=425 height=250 alt='img'/>\n\n<br />流量视角的大家第一眼看起来会觉得很酷炫，但实际在应急工作中有太多的冗余信息，对快速把握问题的核心原因没有帮助，所以在应急工作台上大图的构建采用了更加清晰的链路视图。二者的核心数据是一致的，只是链路视图是将流量线做了合并。<br />\n\n### 大图的时序分析\n\n实际上，一张图上某一时刻只能映射出实际系统某一刻的状态剖面。但问题的发生不是瞬时抖动的，而更像是湖面波澜起伏的湖水时高时低。想要了解任意时刻系统的状态，这个时候我们就需要借助时序分析的能力，这个就是通过下面时序分析的工具来实现的：<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*hPxRT6SbgskAAAAAAAAAAABkARQnAQ' width=850 height=200 alt='img'/>\n\n这个工具对时间的控制分为了三个层次：分 -> 小时 -> 天。用户通过日期选择控件在不同日期间切换，通过全天的时间轴分析 24 小时波动趋势，并选择具体时段确定要进行分析分钟级切面，最终通过选择具体切面来进行分析。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pD71SJOp69YAAAAAAAAAAABkARQnAQ' width=850 height=350 alt='img'/>\n\n时序分析模块增加了时间轴，默认展示最近一小时每分钟的错误总数柱形图，点击柱形图表示选择某时间点，选择后可触发全部功能请求接口，刷新全部功能。<br />当选择出具体时间点后，页面中所有功能需要重新刷新。所以，选择时间的数据模型层在本页面模块相对全局的位置，而所有需要依据此数据而变化的子模块应该在生命周期中监听该数据。大图数据当然也需要在请求到新的数据后更新。<br />处理好以上细节后，我们的大图就有了一个非常强大的时序分析能力。\n\n### 节点信息扩展\n\n从体验上考虑，当我们处理应急工作时最想做到的是用户能够不依赖其他应用，直接在我们的图上能够找到问题最根本的原因。但是受限于目前图可视化的局限，目前所有的信息都收敛到一个“node”的色块上，能够映射上去的信息非常有限。所以，一个自然的思路是对节点表达能力进行扩展。<br />得益于 F6 的渲染能力，我们可以比较容易的在节点上扩展出我们想要的表达方式。通过下面的示例，可以看到 F6 的节点扩展能力是非常强悍的。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*vV8UR50p1ZIAAAAAAAAAAABkARQnAQ' width=850 height=400 alt='img'/>\n\n<br />我们再来看看扩展后的交互能力：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v3MhT61nn1YAAAAAAAAAAABkARQnAQ' width=850 height=300 alt='img'/>\n\n接下来，我们将使用 F6 实现下面的功能：\n\n<video src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/file/A*A2k9QKpYSswAAAAAAAAAAABkARQnAQ' controls width=350 height=350></video>\n\n<br />有了这样的基础后，节点样式不局限于简单的几何形状，而是把具有代表意义的信息映射到节点上，从而使节点的形状一眼看上就能大致反应某节点的特点。这样在某些多个节点需要对比的场景下也是具有意义的。<br /> <br />本次应急工作台，先选用一小时内的错误量数据来扩展节点信息。具体方案是，将这些时序信息分布到原有节点的圆周上，信息值的大小用放射状的柱状图来映射。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*PEFPSZwgqScAAAAAAAAAAABkARQnAQ' width=850 height=550 alt='img'/>\n\n### 完整的应用演示\n\n<video src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/file/A*7W5ZQa3KUKIAAAAAAAAAAABkARQnAQ' width=850 height=400 controls>\n  <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9NAiSJrAlYMAAAAAAAAAAABkARQnAQ' width=850 height=400 alt='img'/>\n</video>\n\n## 总结展望\n\n总体来讲，应急工作台深度聚焦业务场景，提供的功能齐备、逻辑合理、流程完整。未来可以深入的事情还有很多，比如，节点信息的扩展可以更加丰富，有更多更丰富的数据属性可以被映射到节点图形中；当前布局是基于 Dagre 的有向图层次布局，在布局复杂链路的时候可能还是存在不够清晰的情况；当前的应急工作台尽管基于此前的星云大图，但是却舍弃了节点在整个域架构中的“位置”信息。我们将持续深入优化这些问题。\n\n## 应用地址\n\n源码：<a href='https://github.com/scaletimes/g6-flow-demo.git' target='_blank'>https://github.com/scaletimes/g6-flow-demo</a> <br />F6 官网：<a href='https://g6.antv.vision/' target='_blank'>https://g6.antv.vision/</a> <br />F6 GitHub：<a href='https://github.com/antvis/g6' target='_blank'>https://github.com/antvis/g6</a>\n"
  },
  {
    "path": "packages/site/docs/manual/getting-started.zh.md",
    "content": "---\ntitle: 快速上手\norder: 1\n---\n\n## 第一个示例\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*P4PNSZbNiM4AAAAAAAAAAAAAARQnAQ' width=400 alt='img'/>\n\n## 安装\n\n### 1 在项目中使用 NPM 包引入\n\n**Step 1:** 使用命令行在项目目录下执行以下命令：\n\n```bash\n npm install --save @antv/f6\n```\n\n**Step 2:** 在需要用的 F6 的 JS 文件中导入：\n\n```javascript\nimport F6 from \"@antv/f6\";\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span>\n\n- F6 同时支持了小程序和 H5，所以在不论是小程序还是 H5，都可以使用 npm 的方式使用\n- 在小程序中需搭配使用 F6 小程序组件\n\n[支付宝小程序组件](https://www.npmjs.com/package/@antv/f6-alipay)\n\n```bash\nnpm install --save @antv/f6-alipay\n```\n\n[微信小程序组件](https://www.npmjs.com/package/@antv/f6-wx)\n\n```bash\nnpm install --save @antv/f6-wx\n```\n\n### 2 在 HTML 中使用  CDN 引入\n\n若在移动端 H5 页面中使用，则可以通过 cdn 引入\n\n```html\n<script src=\"https://gw.alipayobjects.com/os/antv/pkg/_antv.f6-{$version}/dist/f6.js\"></script>\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span>\n\n- 在  `{$version}` 中填写版本号，例如  `0.0.1`；\n- 最新版可以在  <a href='https://www.npmjs.com/package/@antv/f6' target='_blank'>NPM</a>  查看最新版本及版本号；\n- 详情参考 Github 分支：<a href='https://github.com/antvis/f6/tree/master' target='_blank'>https://github.com/antvis/f6/tree/master</a>。\n\n### 3 在 Native 应用中使用\n\n- 💗 敬请期待\n\n## 快速试用\n\n创建一个 F6 的关系图仅需要下面几个步骤：\n\n1. 创建关系图的容器；\n2. 数据准备；\n3. 创建关系图；\n4. 配置数据源，渲染。\n\n### Step 1 创建容器\n\n#### H5\n\n需要在 HTML 中创建一个用于容纳 F6 绘制的图的容器，通常为 `div`  标签。F6 在绘制时会在该容器下追加 `canvas` 标签，然后将图绘制在其中。\n\n```html\n<div id=\"mountNode\"></div>\n```\n\n#### 小程序\n\n由于小程序的特殊性，我们需要在`Axml`或者`Wxml`中使用 F6 配套的组件\n\n- 支付宝组件\n\n`/pages/index/index.json`\n\n```json\n{\n  \"defaultTitle\": \"f6-demo\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n```\n\n`/pages/index/index.axml`\n\n```\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{false}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onInit=\"onCanvasInit\"\n  onTouchEvent=\"onTouch\"\n/>\n```\n\n- 微信组件\n\n`/pages/index/index.json`\n\n```\n{\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n```\n\n`/pages/index/index.wxml`\n\n```\n\n  <f6-canvas\n    width=\"{{canvasWidth}}\"\n    height=\"{{canvasHeight}}\"\n    pixelRatio=\"{{pixelRatio}}\"\n    onInit=\"{{onCanvasInit}}\"\n    onTouchEvent=\"{{onTouch}}\" >\n  </f6-canvas>\n\n```\n\n具体在微信中使用，请参考[微信中使用 F6](/zh/docs/manual/tutorial/mini/wechat)\n\n#### Native\n\n💗 敬请期待\n\n### Step 2 数据准备\n\n引入 F6 的数据源为 JSON 格式的对象。该对象中需要有节点（`nodes`）和边（`edges`）字段，分别用数组表示：\n\n```javascript\nconst data = {\n  // 点集\n  nodes: [\n    {\n      id: \"node1\", // String，该节点存在则必须，节点的唯一标识\n      x: 100, // Number，可选，节点位置的 x 值\n      y: 200, // Number，可选，节点位置的 y 值\n    },\n    {\n      id: \"node2\", // String，该节点存在则必须，节点的唯一标识\n      x: 300, // Number，可选，节点位置的 x 值\n      y: 200, // Number，可选，节点位置的 y 值\n    },\n  ],\n  // 边集\n  edges: [\n    {\n      source: \"node1\", // String，必须，起始点 id\n      target: \"node2\", // String，必须，目标点 id\n    },\n  ],\n};\n```\n\n注意\n\n- `nodes` 数组中包含节点对象。每个节点对象中唯一的、必要的 `id` 以标识不同的节点，`x`、 `y` 指定该节点的位置；\n- `edges` 数组中包含边对象。`source` 和 `target` 是每条边的必要属性，分别代表了该边的起始点 `id` 与 目标点 `id`。\n- 点和边的其他属性参见链接：[内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 和 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)。\n\n### Step 3 创建关系图\n\n创建关系图（实例化）时，至少需要为图设置容器、宽和高。\n\n#### 小程序\n\n```javascript\nconst graph = new F6.Graph({\n  container: null, // 如果为小程序，则传null或者不传\n  renderer: \"mini\", // renderer 目前支持`mini`和`mini-native`两个值，可以通过onCanvasInit回调获取\n  context: ctx, // 由于小程序中无法直接获取canvas的context，所以需要从外部传入\n  width: 800, // Number，必须，图的宽度\n  height: 500, // Number，必须，图的高度\n});\n```\n\n⚠️ 注意：小程序依赖 f6 组件，所以无需创建容器\n\n#### H5\n\n```javascript\nconst graph = new F6.Graph({\n  container: \"container\" // String | HTMLElement，必须，在 Step 1 中创建的容器 id 或容器本身,如果为小程序，则传null或者不传\n  width: 800, // Number，必须，图的宽度\n  height: 500, // Number，必须，图的高度\n});\n```\n\n### Step 4 配置数据源，渲染\n\n```javascript\ngraph.data(data); // 读取 Step 2 中的数据源到图上\ngraph.render(); // 渲染图\n```\n\n### 最终的结果\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*srtDT5slbN8AAAAAAAAAAABkARQnAQ' width=400 alt='img' />\n\n## 完整代码\n\n⚠️ 注意：本示例通过支付宝小程序进行演示，如需在微信中使用，参考[微信中使用 F6](/zh/docs/manual/tutorial/mini/wechat)\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/simple?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800/>\n\n## 更多\n\n本章仅仅介绍了如何安装以及最简单的场景，在 F6 Tutorial 中其他的章节中我们会教会你：\n\n- 实例化图时的常见配置；\n- 设置元素（节点/边）属性、样式；\n- 设置布局；\n- 增加交互；\n- 增加动画；\n- 使用辅助组件。\n\n想了解更高阶的功能，请参见 [F6 核心概念](/zh/docs/manual/middle/graph)，[F6 扩展阅读](/zh/docs/manual/advanced/coordinate-system)。\n"
  },
  {
    "path": "packages/site/docs/manual/introduction.zh.md",
    "content": "---\ntitle: 简介\norder: 0\nredirect_from:\n  - /zh/docs/manual\n---\n\n<img src=\"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*KV1pSIPeJPAAAAAAAAAAAAAAARQnAQ\" height=\"250\" alt=\"f6 banner\" />\n\n[![](https://img.shields.io/travis/antvis/f6.svg)](https://travis-ci.org/antvis/f6) [![Coverage Status](https://coveralls.io/repos/github/antvis/F6/badge.svg)](https://coveralls.io/github/antvis/F6) ![](https://img.shields.io/badge/language-javascript-red.svg) ![](https://img.shields.io/badge/license-MIT-000000.svg) [![npm package](https://img.shields.io/npm/v/@antv/f6.svg)](https://www.npmjs.com/package/@antv/f6) [![NPM downloads](https://img.shields.io/npm/dm/@antv/f6.svg)](https://npmjs.org/package/@antv/f6) [![Percentage of issues still open](https://isitmaintained.com/badge/open/antvis/f6.svg)](https://isitmaintained.com/project/antvis/f6 \"Percentage of issues still open\")\n\n## 欢迎扫码体验\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*-VctS49Qe6QAAAAAAAAAAAAAARQnAQ' width=550 alt='img'/>\n\n## 什么是 F6\n\n<a href='https://github.com/antvis/f6' target='_blank'>F6</a> 是一款可以快速、流畅运行于移动设备中的图可视化引擎，通过丰富的布局、组件及分析能力，帮助用户落地跨平台的图可视化应用解决方案。在 H5、小程序等移动端平台上，对包体积、性能有更高的要求，也需要定义一套合适的交互模式。针对以上问题，我们在 G6 的基础上重新设计并构建了 F6。F6 不仅具有基础的关联图绘制、事件、动画，同时内置了常用的移动端交互模式、丰富的布局和分析组件，通过简单的配置即可使用。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*vSB8TolCFVYAAAAAAAAAAAAAARQnAQ' width=550 alt='img'/>\n\n## 快速上手\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/demo?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800> </iframe>\n\n更详细的内容请参考 [快速上手](/zh/docs/manual/getting-started) 文档。\n\n## F6 图可视化交流群\n\n欢迎各界 F6 使用者、图可视化爱好者加入 **F6 超级服务群**（钉钉群，使用钉钉扫一扫加入）讨论与交流。\n\n<p>\n    <img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*wEQkTKK9GgMAAAAAAAAAAAAAARQnAQ' style='width:250px;display:inline-block;vertical-align:top;' alt='' />\n</p>\n\n## 如何贡献\n\n请让我们知道您要解决或贡献什么，所以在贡献之前请先提交 <a href='https://github.com/antvis/f6/issues' target='_blank'>issues</a> 描述 bug 或建议。\n\n成为一个贡献者前请阅读 <a href='https://github.com/antvis/F6/blob/master/packages/f6/CONTRIBUTING.zh-CN.md' target='_blank'>代码贡献规范</a>。\n\n## License\n\n<a href='https://github.com/antvis/f6/blob/master/LICENSE' target='_blank'>MIT license</a>。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/animation.zh.md",
    "content": "---\ntitle: 基础动画\norder: 5\n---\n\nF6 中的动画分为两个层次：\n\n- 全局动画：全局性的动画，图整体变化时的动画过渡；\n- 元素（边和节点）动画：节点或边上的独立动画。\n\n<br />\n\n## 全局动画\n\nF6 的全局动画指通过图实例进行某些全局操作时，产生的动画效果。例如：\n\n- `graph.updateLayout(cfg)` 布局的变化\n- `graph.changeData()` 数据的变化\n\n通过实例化图时配置 `animate: true`，可以达到每次进行上述操作时，动画效果变化的目的。配合 `animateCfg` 配置动画参数，`animateCfg` 具体配置参见 [animateCfg](#animateCfg)<br />\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                   // 图的其他配置项\n  animate: true, // Boolean，切换布局时是否使用动画过度，默认为 false\n  animateCfg: {\n    duration: 500, // Number，一次动画的时长\n    easing: \"linearEasing\", // String，动画函数\n  },\n});\n```\n\n## 元素动画\n\n由于 F6 的内置节点和边是没有动画的，需要实现节点和边上的动画需要通过[自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)、[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)时复写  `afterDraw`  实现。\n\n### 节点动画\n\n节点上的动画，即每一帧发生变化的是节点上的某一个图形。关于节点动画，以下面三个动画示例进行讲解：\n\n- 节点上图形的动画（如下图左）；\n- 增加带有动画的背景图形（如下图中）；\n- 节点上部分图形的旋转动画（如下图右）。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aAjWQ4n_OOEAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FxDJQ5eY-5oAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*uFQsQqxIa_QAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n<br />\n\n以上三个动画节点的 demo 代码见： <a href='/zh/docs/examples/scatter/node' target='_blank'>节点动画</a>。\n\n#### 节点上图形的动画\n\n<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aAjWQ4n_OOEAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n本例实现节点放大缩小，通过  `group.get('children')[0]` 找到需要更新的图形（这里找到该节点上第 0 个图形），然后调用该图形的 `animate` 方法指定动画的参数及每一帧的变化（  第一个参数是返回每一帧需要变化的参数集的函数，其参数 `ratio` 是当前正在进行的一次动画的进度，范围 [0, 1]；第二个参数是动画的参数，动画参数的具体配置参见 [animateCfg](#animateCfg)）。\n\n```javascript\n// 放大、变小动画\nF6.registerNode(\n  \"circle-animate\",\n  {\n    afterDraw(cfg, group) {\n      // 获取该节点上的第一个图形\n      const shape = group.get(\"children\")[0];\n      // 该图形的动画\n      shape.animate(\n        (ratio) => {\n          // 每一帧的操作，入参 ratio：这一帧的比例值（Number）。返回值：这一帧需要变化的参数集（Object）。\n          // 先变大、再变小\n          const diff = ratio <= 0.5 ? ratio * 10 : (1 - ratio) * 10;\n          let radius = cfg.size;\n          if (isNaN(radius)) radius = radius[0];\n          // 返回这一帧需要变化的参数集，这里只包含了半径\n          return {\n            r: radius / 2 + diff,\n          };\n        },\n        {\n          // 动画重复\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      ); // 一次动画持续的时长为 3000，动画效果为 'easeCubic'\n    },\n  },\n  \"circle\",\n); // 该自定义节点继承了内置节点 'circle'，除了被复写的 afterDraw 方法外，其他按照 'circle' 里的函数执行。\n```\n\n#### 增加带有动画的背景图形\n\n在 `afterDraw` 方法中为已有节点添加额外的 shape ，并为这些新增的图形设置动画。<br />\n\n本例在 `afterDraw` 方法中，绘制了三个背景 circle ，分别使用不同的颜色填充，再调用 `animate` 方法实现这三个 circle 逐渐变大、变淡的动画。本例中没有使用函数参数的形式，直接在 `animate` 函数的第一个参数中设置每次动画结束时的最终目标样式，即半径增大 10，透明度降为 0.1。第二个参数设置动画的配置，动画参数的具体配置参见 [animateCfg](#animateCfg)。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FxDJQ5eY-5oAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n```javascript\nF6.registerNode(\n  \"background-animate\",\n  {\n    afterDraw(cfg, group) {\n      let r = cfg.size / 2;\n      if (isNaN(r)) {\n        r = cfg.size[0] / 2;\n      }\n      // 第一个背景圆\n      const back1 = group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"circle-shape1\",\n      });\n      // 第二个背景圆\n      const back2 = group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: \"blue\", // 为了显示清晰，随意设置了颜色\n          opacity: 0.6,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"circle-shape2\",\n      });\n      // 第三个背景圆\n      const back3 = group.addShape(\"circle\", {\n        zIndex: -1,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: \"green\",\n          opacity: 0.6,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"circle-shape3\",\n      });\n      group.sort(); // 排序，根据 zIndex 排序\n\n      // 第一个背景圆逐渐放大，并消失\n      back1.animate(\n        {\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          repeat: true, // 循环\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 0, // 无延迟\n        },\n      );\n\n      // 第二个背景圆逐渐放大，并消失\n      back2.animate(\n        {\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          repeat: true, // 循环\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 1000, // 1 秒延迟\n        },\n      ); // 1 秒延迟\n\n      // 第三个背景圆逐渐放大，并消失\n      back3.animate(\n        {\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          repeat: true, // 循环\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 2000, // 2 秒延迟\n        },\n      );\n    },\n  },\n  \"circle\",\n);\n```\n\n#### 部分图形旋转动画\n\n这一例也是在 `afterDraw` 方法中为已有节点添加额外的 shape （本例中为 image），并为这些新增的图形设置旋转动画。旋转动画较为复杂，需要通过矩阵的操作实现。`animate` 函数的第一个参数是返回每一帧需要变化的参数集的函数，其参数 `ratio` 是当前正在进行的一次动画的进度，范围 [0, 1]；第二个参数是动画的参数，动画参数的具体配置参见 [animateCfg](#animateCfg)。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*uFQsQqxIa_QAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n```javascript\nF6.registerNode(\n  \"inner-animate\",\n  {\n    afterDraw(cfg, group) {\n      const size = cfg.size;\n      const width = size[0] - 12;\n      const height = size[1] - 12;\n      // 添加图片 shape\n      const image = group.addShape(\"image\", {\n        attrs: {\n          x: -width / 2,\n          y: -height / 2,\n          width: width,\n          height: height,\n          img: cfg.img,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"image-shape\",\n      });\n      // 该图片 shape 的动画\n      image.animate(\n        (ratio) => {\n          // 每一帧的操作，入参 ratio：这一帧的比例值（Number）。返回值：这一帧需要变化的参数集（Object）。\n          // 旋转通过矩阵来实现\n          // 当前矩阵\n          const matrix = Util.mat3.create();\n          // 目标矩阵\n          const toMatrix = Util.transform(matrix, [[\"r\", ratio * Math.PI * 2]]);\n          // 返回这一帧需要的参数集，本例中只有目标矩阵\n          return {\n            matrix: toMatrix,\n          };\n        },\n        {\n          repeat: true, // 动画重复\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"rect\",\n);\n```\n\n### 边动画\n\n关于边动画，以下面三个动画示例进行讲解：\n\n- 圆点在沿着线运动（下图左）；\n- 虚线运动的效果（下图中，gif 图片的帧率问题导致看起来是静态的，可以访问下面的 demo 链接查看）；\n- 线从无到有的效果（下图右）。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OAGPRZbYpw4AAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VUgETK6aMzcAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-l9lQ7Ck1QcAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n以上三个边动画的 demo 代码见：<a href='/zh/docs/examples/scatter/edge' target='_blank'>边动画</a>。\n\n#### 圆点运动\n\n本例通过在 `afterDraw` 方法中为边增加了一个 circle 图形，该图形沿着线运动。沿着线运动的原理：设定每一帧中，该 circle 在线上的相对位置。`animate` 函数的第一个参数是返回每一帧需要变化的参数集的函数，其参数 `ratio` 是当前正在进行的一次动画的进度，范围 [0, 1]；第二个参数是动画的参数，动画参数的具体配置参见 [animateCfg](#animateCfg)。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OAGPRZbYpw4AAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n```javascript\nF6.registerEdge(\n  \"circle-running\",\n  {\n    afterDraw(cfg, group) {\n      // 获得当前边的第一个图形，这里是边本身的 path\n      const shape = group.get(\"children\")[0];\n      // 边 path 的起点位置\n      const startPoint = shape.getPoint(0);\n\n      // 添加红色 circle 图形\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          x: startPoint.x,\n          y: startPoint.y,\n          fill: \"red\",\n          r: 3,\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"circle-shape\",\n      });\n\n      // 对红色圆点添加动画\n      circle.animate(\n        (ratio) => {\n          // 每一帧的操作，入参 ratio：这一帧的比例值（Number）。返回值：这一帧需要变化的参数集（Object）。\n          // 根据比例值，获得在边 path 上对应比例的位置。\n          const tmpPoint = shape.getPoint(ratio);\n          // 返回需要变化的参数集，这里返回了位置 x 和 y\n          return {\n            x: tmpPoint.x,\n            y: tmpPoint.y,\n          };\n        },\n        {\n          repeat: true, // 动画重复\n          duration: 3000,\n        },\n      ); // 一次动画的时间长度\n    },\n  },\n  \"cubic\",\n); // 该自定义边继承内置三阶贝塞尔曲线 cubic\n```\n\n#### 虚线运动的效果\n\n虚线运动的效果是通过计算线的 `lineDash` ，并在每一帧中不断修改实现。`animate` 函数的第一个参数是返回每一帧需要变化的参数集的函数，其参数 `ratio` 是当前正在进行的一次动画的进度，范围 [0, 1]；第二个参数是动画的参数，动画参数的具体配置参见 [animateCfg](#animateCfg)。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VUgETK6aMzcAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n```javascript\n// lineDash 的差值，可以在后面提供 util 方法自动计算\nconst lineDash = [4, 2, 1, 2];\nF6.registerEdge(\n  \"line-dash\",\n  {\n    afterDraw(cfg, group) {\n      // 获得该边的第一个图形，这里是边的 path\n      const shape = group.get(\"children\")[0];\n      let index = 0;\n      // 边 path 图形的动画\n      shape.animate(\n        () => {\n          index++;\n          if (index > 9) {\n            index = 0;\n          }\n          const res = {\n            lineDash,\n            lineDashOffset: -index,\n          };\n          // 返回需要修改的参数集，这里修改了 lineDash,lineDashOffset\n          return res;\n        },\n        {\n          repeat: true, // 动画重复\n          duration: 3000, // 一次动画的时长为 3000\n        },\n      );\n    },\n  },\n  \"cubic\",\n); // 该自定义边继承了内置三阶贝塞尔曲线边 cubic\n```\n\n#### 线从无到有\n\n线从无到有的动画效果，同样可以通过计算 `lineDash` 来实现。`animate` 函数的第一个参数是返回每一帧需要变化的参数集的函数，其参数 `ratio` 是当前正在进行的一次动画的进度，范围 [0, 1]；第二个参数是动画的参数，动画参数的具体配置参见 [animateCfg](#animateCfg)。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-l9lQ7Ck1QcAAAAAAAAAAABkARQnAQ' alt='download' width='150'/>\n\n```javascript\nF6.registerEdge(\n  \"line-growth\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      const length = group.getTotalLength();\n      shape.animate(\n        (ratio) => {\n          const startLen = ratio * length;\n          // 计算 lineDash\n          const cfg = {\n            lineDash: [startLen, length - startLen],\n          };\n          return cfg;\n        },\n        {\n          repeat: true, // 是否重复执行\n          duration: 2000, // 一次动画持续时长\n        },\n      );\n    },\n  },\n  \"cubic\",\n); // 该自定义边继承了内置三阶贝塞尔曲线边 cubic\n```\n\n### 交互动画\n\n在交互的过程中也可以添加动画。如下图所示，当鼠标移到节点上时，所有与该节点相关联的边都展示虚线运动的动画。<br />![交互动画.gif](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-90pSrm4hkUAAAAAAAAAAABkARQnAQ)<br />上图完整 demo 即代码参见：<a href='/zh/docs/examples/scatter/stateChange' target='_blank'>状态切换动画</a>。\n\n这种动画涉及到了边的 [状态](/zh/docs/manual/middle/states/state)。在自定义边时复写 `setState` 方法，可对边的各种状态进行监听。鼠标移动到节点上，相关边的某个状态被开启，`setState` 方法中监听到后开启动画效果。步骤如下：\n\n- 自定义边中复写 `setState` 方法监听该边的状态，以及某状态下的动画效果；\n- 监听中间的节点的 `mouseenter` 和 `mouseleave` 事件，触发相关边的状态变化。\n\n下面代码节选自 demo <a href='/zh/docs/examples/scatter/stateChange' target='_blank'>状态切换动画</a>，请注意省略了部分代码，只展示了交互相关以及边动画相关的代码。`animate` 函数的第一个参数是返回每一帧需要变化的参数集的函数，其参数 `ratio` 是当前正在进行的一次动画的进度，范围 [0, 1]；第二个参数是动画的参数，动画参数的具体配置参见 [animateCfg](#animateCfg)。\n\n```javascript\n// const data = ...\n// const graph = new F6.Graph({...});\n\nconst lineDash = [4, 2, 1, 2];\n\n// 注册名为 'can-running' 的边\nF6.registerEdge(\n  \"can-running\",\n  {\n    // 复写setState方法\n    setState(name, value, item) {\n      const shape = item.get(\"keyShape\");\n      // 监听 running 状态\n      if (name === \"running\") {\n        // running 状态为 true 时\n        if (value) {\n          let index = 0; // 边 path 图形的动画\n          shape.animate(\n            () => {\n              index++;\n              if (index > 9) {\n                index = 0;\n              }\n              const res = {\n                lineDash,\n                lineDashOffset: -index,\n              };\n              // 返回需要修改的参数集，这里修改了 lineDash,lineDashOffset\n              return res;\n            },\n            {\n              repeat: true, // 动画重复\n              duration: 3000, // 一次动画的时长为 3000\n            },\n          );\n        } else {\n          // running 状态为 false 时\n          // 结束动画\n          shape.stopAnimate();\n          // 清空 lineDash\n          shape.attr(\"lineDash\", null);\n        }\n      }\n    },\n  },\n  \"cubic-horizontal\",\n); // 该自定义边继承了内置横向三阶贝塞尔曲线边 cubic-horizontal\n\n// 监听节点的 tap 事件\ngraph.on(\"node:tap\", (ev) => {\n  // 获得当前鼠标操作的目标节点\n  const node = ev.item;\n  // 获得目标节点的所有相关边\n  const edges = node.getEdges();\n  // 将所有相关边的 running 状态置为 true，此时将会触发自定义节点的 setState 函数\n  edges.forEach((edge) => graph.setItemState(edge, \"running\", true));\n});\n\n// 监听节点的 dbltap 事件\ngraph.on(\"node:dbltap\", (ev) => {\n  // 获得当前鼠标操作的目标节点\n  const node = ev.item;\n  // 获得目标节点的所有相关边\n  const edges = node.getEdges();\n  // 将所有相关边的 running 状态置为 false，此时将会触发自定义节点的 setState 函数\n  edges.forEach((edge) => graph.setItemState(edge, \"running\", false));\n});\n\n// graph.data(data);\n// graph.render();\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span> `running` 为 `false` 时，要停止动画，同时把 `lineDash` 清空。\n\n## animateCfg\n\n| 配置项         | 类型     | 默认值         | 描述                                     |\n| -------------- | -------- | -------------- | ---------------------------------------- |\n| duration       | Number   | 500            | 一次动画的时长                           |\n| easing         | boolean  | 'linearEasing' | 动画函数，见 [easing 函数](#easing-函数) |\n| delay          | Number   | 0              | 延迟一段时间后执行动画                   |\n| repeat         | boolean  | false          | 是否重复执行动画                         |\n| callback       | Function | undefined      | 动画执行完时的回调函数                   |\n| pauseCallback  | Function | undefined      | 动画暂停时（`shape.pause()`）的回调函数  |\n| resumeCallback | Function | undefined      | 动画恢复时（`shape.resume()`）的回调函数 |\n\n### easing 函数\n\neasing 函数是指动画的函数。例如线性插值、先快后慢等。<br />F6 支持所有 d3.js 中的动画函数。因此，上面代码中 `animateCfg` 配置中的 String 类型的 `easing` 可以取值有：<br />`'easeLinear'` ，<br />`'easePolyIn'` ，`'easePolyOut'` ， `'easePolyInOut'` ，<br />`'easeQuad'` ，`'easeQuadIn'` ，`'easeQuadOut'` ， `'easeQuadInOut'` 。\n\n更多取值及所有取值含义参见：<a href='https://github.com/d3/d3/blob/master/API.md#easings-d3-ease' target='_blank'>d3 Easings</a>。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/advanced-style/gradient.zh.md",
    "content": "---\ntitle: 设置渐变色\norder: 4\n---\n\nF6 提供描边的**线性渐变**和填充的**环形渐变**两种形式。\n\n### 描边线性渐变\n\n#### 示例\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lX-fSbaOrn0AAAAAAAAAAABkARQnAQ' width='750' alt='img'/>\n\n> 说明：`l` 表示使用线性渐变，绿色的字体为可变量，由用户自己填写。\n\n#### 用法\n\n在[配置节点或边](/zh/docs/manual/tutorial/mini/elements)的样式时，指定 `stroke` 属性如下：\n\n```\n// 使用渐变色描边，渐变角度为 0，渐变的起始点颜色 #ffffff，中点的渐变色为 #7ec2f3，结束的渐变色为 #1890ff\n\nstroke: 'l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'\n```\n\n### 填充环形渐变\n\n#### 示例\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*U68WTpjAqscAAAAAAAAAAABkARQnAQ' width='750' alt='img'/>\n\n> 说明：r 表示使用放射状渐变，绿色的字体为可变量，由用户自己填写，开始圆的 x y r 值均为相对值，0 至 1 范围。\n\n#### 用法\n\n在[配置节点或边](/zh/docs/manual/tutorial/mini/elements)的样式时，指定 `fill` 属性如下：\n\n```\n// 使用渐变色填充，渐变起始圆的圆心坐标为被填充物体的包围盒中心点，半径为(包围盒对角线长度 / 2) 的 0.1 倍，渐变的起始点颜色 #ffffff，中点的渐变色为 #7ec2f3，结束的渐变色为 #1890ff\n\nfill: 'r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff'\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/advanced-style/set-label-bg.zh.md",
    "content": "---\ntitle: 设置节点或边的背景\norder: 0\n---\n\n用户可以直接通过以下配置为节点或边设置背景。\n\n**特别说明：** 该功能是由 GitHub 用户 @zhanba 贡献 [feat: add label background](https://github.com/antvis/F6/pull/1354) 。\n\n```\nconst graph = new F6.Graph({\n  // ...\n  defaultNode: {\n    position: 'left',\n    style: {\n      background: {\n        fill: '#ffffff',\n        stroke: 'green',\n        padding: [3, 2, 3, 2],\n        radius: 2,\n        lineWidth: 3,\n      },\n    },\n  },\n  defaultEdge: {\n    autoRotate: true,\n    style: {\n      background: {\n        fill: '#ffffff',\n        stroke: '#000000',\n        padding: [2, 2, 2, 2],\n        radius: 2,\n      },\n    },\n  }\n})\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/advanced-style/texture.zh.md",
    "content": "---\ntitle: 设置纹理\norder: 5\n---\n\nF6 支持用特定的纹理填充图形。F6 支持的纹理内容可以直接是**图片**或者 **Data URL**。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cPgYSJ2ZfwYAAAAAAAAAAABkARQnAQ' width='750' alt='img'/>\n\n> 说明：`p` 表示使用纹理；绿色的字体为可变量，您可以修改它们以满足您的需求；`a` 表示纹理的重复方式，可选值如下：\n>\n> - `a`: 该模式在水平和垂直方向重复；\n> - `x`: 该模式只在水平方向重复；\n> - `y`: 该模式只在垂直方向重复；\n> - `n`: 该模式只显示一次（不重复）。\n\n在[配置节点或边](/zh/docs/manual/tutorial/mini/elements)的样式时，指定 `fill` 属性如下：\n\n```\nshape.attr('fill', 'p(a)https://gw.alipay.com/cube.png');\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/advanced-style/updateText.zh.md",
    "content": "---\ntitle: 更新文本样式\norder: 2\n---\n\n在 F6 中，可以通过以下三种方式更新文本样式。\n\n#### 实例化 Graph\n\n实例化 Graph 时，可以通过在 `defaultNode` 或 `defaultEdge` 中指定 `labelCfg` 属性修改文本的样式。这种方式指定了全局的文本样式。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 800,\n  defaultNode: {\n    type: 'node',\n    labelCfg: {\n      style: {\n        fill: '#fff',\n        fontSize: 14,\n      },\n    },\n  },\n  defaultEdge: {\n    type: 'line-with-arrow',\n    labelCfg: {\n      style: {\n        fill: '#fff',\n        fontSize: 14,\n      },\n    },\n  },\n});\n```\n\n#### 数据中指定 labelCfg\n\n在数据中为每个节点和边指定 `labelCfg` 可以达到为不同节点或边定制不同文本样式的目的。\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      labelCfg: {\n        style: {\n          fill: \"#fff\",\n          fontSize: 12,\n        },\n      },\n    },\n  ],\n};\n```\n\n#### 使用 update/updateItem\n\n使用 `update/updateItem` 更新节点或边时，也可以更新节点或边上的文本。该方法用于动态更新文本样式。\n\n```javascript\ngraph.updateItem(node, {\n  // 节点的样式\n  style: {\n    stroke: \"blue\",\n  },\n  // 节点上文本的样式\n  labelCfg: {\n    style: {\n      fill: \"#fff\",\n      fontSize: 12,\n    },\n  },\n});\n```\n\n想知道文本都可以设置哪些属性，请参考 [节点上的文本属性](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg) 或 [边上的文本属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/combos/built-in/circle.zh.md",
    "content": "---\ntitle: Circle\norder: 1\n---\n\nF6 内置了圆  Circle Combo，其默认样式如下。标签文本位于圆形上方。 <a href='/zh/docs/examples/item/defaultCombos#circle' target='_blank'>Demo</a> <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ijeuQoiH0JUAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo) 一节所示，配置 Combo 的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.combo(comboFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.combo(comboFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`parentId`、`label` 应当配置到每个 Combo 数据中外，其余的 [Combo 的通用属性](#/zh/docs/manual/middle/elements/combos/defaultCombo#combo-的通用属性) 以及各个 Combo 类型的特有属性（见内置 Combo 类型）均支持三种配置方式。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 使用 Combo 时，必须在示例化图时配置 `groupByTypes` 设置为 `false`，图中元素的视觉层级才能合理。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultCombo` 指定 `type` 为 `'circle'`，即可使用 `circle` Combo。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    type: 'circle', // Combo 类型\n    // ... 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同 Combo 有不同的配置，可以将配置写入到 Combo 数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [\n    ... // 边\n  ],\n  combos: [\n  {\n\t  id: 'combo1',\n    type: 'circle', // Combo 类型\n    ... // 其他配置\n  },\n    ... // 其他 Combo\n  ],\n}\n```\n\n## 配置项说明\n\nCircle Combo 支持 [Combo 通用配置](/zh/docs/manual/middle/elements/combos/defaultCombo#combo-的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：<br />\n\n| 名称            | 含义                                                         | 类型              | 备注                                                                                                                                                       |\n| --------------- | ------------------------------------------------------------ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| size            | 圆的最小直径（非固定直径），渲染大小由子元素的大小与分布决定 | number / number[] | `size` 为数组时，取第一个值                                                                                                                                |\n| fixSize         | 固定该 Combo 的直径                                          | number            | 不指定时 Combo 大小由内部元素的分布和大小来决定。若指定了 `fixSize` 而没有指定 `fixCollapseSize`，则即使该 Combo 在收起状态下仍然保持 `fixSize` 指定的尺寸 |\n| fixCollapseSize | 固定该 Combo 收起时的直径                                    | number            | 不指定时，若未指定 `fixSize` 则由 `size` 决定收起时的直径，否则统一为 `fixSize` 直径 ｜                                                                    |\n| style           | circle 默认样式                                              | Object            | 参见下文 [样式属性  style](./circle#样式属性-style) 内容                                                                                                   |\n| label           | 标签文本内容                                                 | String            |                                                                                                                                                            |\n| labelCfg        | 标签文本配置项                                               | Object            | 参见下文 [标签文本配置 labelCfg](./circle#标签文本配置-labelcfg)                                                                                           |\n| stateStyles     | 各状态下的样式                                               | Object            | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                                                    |\n\n### 样式属性  style\n\nObject 类型。支持 [Combo 通用样式](/zh/docs/manual/middle/elements/combos/defaultCombo#样式属性-style)。通过 `style` 配置来修改 Combo 的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ydTKSqv-lh4AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  combos: [\n    {\n      label: 'combo_circle',\n      type: 'circle',\n      label: 'Circle',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    // type: 'circle',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [Combo 通用标签配置](/zh/docs/manual/middle/elements/combos/defaultCombo/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultCombo` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*oQnLQZ__8K0AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    // ... Combo 其他属性\n    labelCfg: {\n      position: \"left\",\n      refX: 5,\n      style: {\n        fill: \"#bae637\",\n        fontSize: 15,\n        // ... 其他文本样式的配置\n      },\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/combos/built-in/rect.zh.md",
    "content": "---\ntitle: Rect\norder: 2\n---\n\nF6 内置了矩形 Rect Combo，其默认样式如下。标签文本位于矩形内部左上方。<a href='/zh/docs/examples/item/defaultCombos#rect' target='_blank'>Demo</a> <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Khp4QpxXVlQAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo) 一节所示，配置 Combo 的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.combo(comboFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.combo(comboFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`parentId`、`label` 应当配置到每个 Combo 数据中外，其余的 [Combo 的通用属性](#/zh/docs/manual/middle/elements/combos/defaultCombo#combo-的通用属性) 以及各个 Combo 类型的特有属性（见内置 Combo 类型）均支持三种配置方式。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 使用 Combo 时，必须在示例化图时配置 `groupByTypes` 设置为 `false`，图中元素的视觉层级才能合理。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultCombo` 指定 `type` 为 `'rect'`，即可使用 `rect` Combo。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    type: 'rect', // Combo 类型\n    // ... 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同 Combo 有不同的配置，可以将配置写入到 Combo 数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [\n    ... // 边\n  ],\n  combos: [\n  {\n\t  id: 'combo1',\n    type: 'rect', // Combo 类型\n    ... // 其他配置\n  },\n    ... // 其他 Combo\n  ],\n}\n```\n\n## 配置项说明\n\nRect Combo 支持 [Combo 通用配置](/zh/docs/manual/middle/elements/combos/defaultCombo#combo-的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：<br />\n\n| 名称            | 含义                           | 类型              | 备注                                                                                                                                                         |\n| --------------- | ------------------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| size            | 矩形的最小长与宽（非固定大小） | number / number[] | `size` 为 Number 时，长宽相等                                                                                                                                |\n| fixSize         | 固定该 Combo 的长与宽          | number            | 不指定时 Combo 大小由内部元素的分布和大小来决定。若指定了 `fixSize` 而没有指定 `fixCollapseSize`，则即使该 Combo 在收起状态下仍然保持 `fixSize` 指定的长与宽 |\n| fixCollapseSize | 固定该 Combo 收起时的直径      | number            | 不指定时，若未指定 `fixSize` 则由 `size` 决定收起时的长与宽，否则统一为 `fixSize` 长与宽 ｜                                                                  |\n| style           | rect 图形的默认样式            | Object            | 参见下文 [样式属性  style](./rect#样式属性-style) 内容                                                                                                       |\n| label           | 标签文本内容                   | String            |                                                                                                                                                              |\n| labelCfg        | 标签文本配置项                 | Object            | 参见下文 [标签文本配置 labelCfg](./rect#标签文本配置-labelcfg)                                                                                               |\n| stateStyles     | 各状态下的样式                 | Object            | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                                                      |\n\n### 样式属性  style\n\nObject 类型。支持 [Combo 通用样式](/zh/docs/manual/middle/elements/combos/defaultCombo#样式属性-style)。通过 `style` 配置来修改 Combo 的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VwLDQrjV9PkAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  combos: [\n    {\n      label: 'combo_rect',\n      type: 'rect',\n      label: 'Rect',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    // type: 'rect',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置  labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [Combo 通用标签配置](/zh/docs/manual/middle/elements/combos/defaultCombo/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultCombo` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*qAqbSLqTWSoAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    // ... Combo 其他属性\n    labelCfg: {\n      position: \"bottom\",\n      refX: -12,\n      style: {\n        fill: \"#bae637\",\n        fontSize: 15,\n        // ... 其他文本样式的配置\n      },\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/combos/custom-combo.zh.md",
    "content": "---\ntitle: 自定义 Combo\norder: 2\n---\n\nF6 提供了一系列[内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo)，包括 [circle](/zh/docs/manual/middle/elements/combos/built-in/circle)、[rect](/zh/docs/manual/middle/elements/combos/built-in/rect)。若内置 Combo 无法满足需求，用户还可以通过 `F6.registerCombo ('comboName', options, expendedComboName)` 进行**自定义扩展内置的 Combo**，方便用户开发更加定制化的 Combo，包括含有复杂图形的 Combo、复杂交互的 Combo、带有动画的 Combo 等。\n\n在本章中，我们通过两个案例，讲解通过自定义扩展现有 Combo。\n\n## Combo 接口\n\n通过 [图形 Shape](/zh/docs/manual/middle/elements/shape/shape-keyshape) 章节的学习，我们应该已经知道了自定义 Combo 时需要满足以下两点：\n\n- 控制 Combo 的生命周期；\n- 解析用户输入的数据，在图形上展示。\n\n在自定义扩展内置 'circle' 或 'rect' Combo 时，API 中可以复写的方法如下：\n\n```javascript\nF6.registerCombo(\n  \"comboName\",\n  {\n    /**\n     * 绘制 Combo 中的图形。不需要为默认的 label 增加图形，父类方法会自动增加 label\n     * @param  {Object} cfg Combo 的配置项\n     * @param  {G.Group} group 图形分组，Combo 中的图形对象的容器\n     * @return {G.Shape} 返回一个绘制的图形作为 keyShape，通过 combo.get('keyShape') 可以获取。\n     * 关于 keyShape 可参考文档 核心概念-节点/边/Combo-图形 Shape 与 keyShape\n     */\n    drawShape(cfg, group) {},\n    /**\n     * 绘制后的附加操作，默认没有任何操作\n     * @param  {Object} cfg Combo 的配置项\n     * @param  {G.Group} group 图形分组，Combo 中的图形对象的容器\n     */\n    afterDraw(cfg, group) {},\n    /**\n     * 更新节点后的操作，新增的图形需要在这里控制其更新逻辑\n     * @override\n     * @param  {Object} cfg 节点的配置项\n     * @param  {Combo} combo 节点\n     */\n    afterUpdate(cfg, combo) {},\n    /**\n     * 响应 Combo 的状态变化。\n     * 在需要使用动画来响应状态变化时需要被复写，其他样式的响应参见下文提及的 [配置状态样式] 文档\n     * @param  {String} name 状态名称\n     * @param  {Object} value 状态值\n     * @param  {Combo} combo 节点\n     */\n    setState(name, value, combo) {},\n  },\n  // 被继承的 Combo 类型名，可选：'circle' 或 'rect'\n  extendedComboName,\n);\n```\n\n## 注意事项(必读)\n\n因 Combo 更新逻辑的特殊性（需要根据其子元素信息自动更新自身位置和大小），自定义 Combo 时，与自定义节点/边有所不同：\n\n1. 不建议“从无到有”地自定义 Combo，**推荐使用继承的方式**扩展内置的 'circle' 或 'rect' Combo；\n2. 在 `drawShape` 方法中不需要为 label 增加图形，父类方法将会自动增加默认的 label，可以通过配置的方式指定 label 的位置和样式；\n3. 与自定义节点/边不同，这里**不建议复写 `update` 和 `draw` 方法**，否则会使 Combo 根据子元素更新的逻辑异常；\n4. 复写的 `drawShape` 方法返回值与推荐继承内置的 'circle'、'rect' 的 keyShape 一致。即继承 'circle' 时，`drawShape` 方法应该返回一个 circle 图形；继承 'rect' 时，`drawShape` 方法应该返回一个 rect 图形；\n5. 除 keyShape 外，自定义新增的图形需要**在 `afterUpdate` 中定义其位置更新逻辑**；\n6. `setState` 只有在需要使用动画来响应状态变化时需要被复写，一般的样式响应状态变化可以通过 [配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式) 实现。\n\n## 1. 自定义扩展内置 Rect Combo\n\n<a href='/zh/docs/examples/item/customCombo#cRect' target='_blank'>Demo</a>。\n\n### 内置 Rect Combo 位置逻辑详解\n\n首先，我们需要了解内置的 rect 类型的 Combo 内部的位置逻辑：\n\n- 下图灰色虚线框内部是子元素的分布范围，其宽高分别为 innerWidth 和 innerHeight；\n- 灰色虚线框上下左右可以配置 `padding` 值，该 Combo 的 keyShape 真实绘制大小 width 与 height 是 innerWidth 和 innerHeight 加上了 padding 后的值；\n- 一个 Combo 内部的图形以自身坐标系为参考，原点 (0, 0) 在灰色虚线框正中心；\n- padding 值的上与下、左与右可能不相等，这就导致了该矩形的左上角坐标不是简单的 (-width / 2, -height / 2)，而是通过如图标注的计算获得；\n- rect 类型 Combo 的 label 默认位于矩形内部左上角，上边距为 refY，左边距为 refX。label 的位置（`position`）、`refX`、`refY` 可以在使用该类型 Combo 时配置。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*hNHlQ7647uYAAAAAAAAAAABkARQnAQ' width='500' alt='img'/>\n\n> Rect Combo 位置说明图\n\n### 绘制图形\n\n现在，我们自己实现一个如下图所示的 Combo 类型（下图展示空 Combo）：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2-SWQKDHFygAAAAAAAAAAABkARQnAQ' width='120' alt='img'/>\n\n根据上述 [内置 Rect Combo 位置逻辑详解](./custom-combo#内置-rect-combo-位置逻辑详解)，在扩展 rect 类型 Combo 时需要注意复写方法中 `x`、`y`、`width`、`height` 的设置\n\n```javascript\nF6.registerCombo(\n  \"cRect\",\n  {\n    drawShape: function drawShape(cfg, group) {\n      const self = this;\n      // 获取配置中的 Combo 内边距\n      cfg.padding = cfg.padding || [50, 20, 20, 20];\n      // 获取样式配置，style.width 与 style.height 对应 rect Combo 位置说明图中的 width 与 height\n      const style = self.getShapeStyle(cfg);\n      // 绘制一个矩形作为 keyShape，与 'rect' Combo 的 keyShape 一致\n      const rect = group.addShape(\"rect\", {\n        attrs: {\n          ...style,\n          x: -style.width / 2 - (cfg.padding[3] - cfg.padding[1]) / 2,\n          y: -style.height / 2 - (cfg.padding[0] - cfg.padding[2]) / 2,\n          width: style.width,\n          height: style.height,\n        },\n        draggable: true,\n        name: \"combo-keyShape\",\n      });\n      // 增加右侧圆\n      group.addShape(\"circle\", {\n        attrs: {\n          ...style,\n          fill: \"#fff\",\n          opacity: 1,\n          // cfg.style.width 与 cfg.style.heigth 对应 rect Combo 位置说明图中的 innerWdth 与 innerHeight\n          x: cfg.style.width / 2 + cfg.padding[1],\n          y: (cfg.padding[2] - cfg.padding[0]) / 2,\n          r: 5,\n        },\n        draggable: true,\n        name: \"combo-circle-shape\",\n      });\n      return rect;\n    },\n    // 定义新增的右侧圆的位置更新逻辑\n    afterUpdate: function afterUpdate(cfg, combo) {\n      const group = combo.get(\"group\");\n      // 在该 Combo 的图形分组根据 name 找到右侧圆图形\n      const circle = group.find(\n        (ele) => ele.get(\"name\") === \"combo-circle-shape\",\n      );\n      // 更新右侧圆位置\n      circle.attr({\n        // cfg.style.width 与 cfg.style.heigth 对应 rect Combo 位置说明图中的 innerWdth 与 innerHeight\n        x: cfg.style.width / 2 + cfg.padding[1],\n        y: (cfg.padding[2] - cfg.padding[0]) / 2,\n      });\n    },\n  },\n  \"rect\",\n);\n```\n\n值得注意的是，F6 需要用户为自定义节点中的图形设置 `name` 和 `draggable`。其中，`name` 可以是不唯一的任意值。`draggable` 为 `true` 是表示允许该图形响应拖拽事件，只有 `draggable: true` 时，图上的交互行为 `'drag-combo'` 才能在该图形上生效。若上面代码仅在 keyShape 上设置了 `draggable: true`，而右侧圆图形上没有设置，则鼠标拖拽只能在 keyShape 上响应。\n\n### 使用自定义 Combo\n\n现在，我们使用下面的代码使用 `'cRect'` 类型的 Combo：\n\n```javascript\nconst data = {\n  nodes: [\n    { id: 'node1', x: 250, y: 100, comboId: 'combo1' },\n    { id: 'node2', x: 300, y: 100, comboId: 'combo1' },\n  ],\n  combos: [\n    { id: 'combo1', label: 'Combo 1', parentId: 'combo2' },\n    { id: 'combo2', label: 'Combo 2' },\n    { id: 'combo3', label: 'Combo 3' },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 800,\n  // 全局 Combo 配置\n  defaultCombo: {\n    // 指定 Combo 类型，也可以将 type 写到 combo 数据中\n    type: 'cRect',\n    // ... 此处可配置默认 Combo 的其他样式\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HEtYR5OUgLcAAAAAAAAAAABkARQnAQ' width='400' alt='img'/>\n\n## 2. 自定义扩展内置 Circle Combo\n\n<a href='/zh/docs/examples/item/customCombo#cCircle' target='_blank'>Demo</a>。\n\n### 内置 Circle Combo 位置逻辑详解\n\n如下面 Circle Combo 位置说明图所示，circle 类型的 Combo 内部的位置逻辑比 rect 类型简单，其 (x, y) 为圆心，`padding` 为一个数值：\n\n- 下图灰色虚线圈内部是子元素的分布范围，其半径为 innerR；\n- 与 rect 不同的是，灰色虚线圈的 `padding` 是一个数值，即灰色虚线圈外围的 padding 是均匀的，该 Combo 的 keyShape 真实绘制半径 R = innerR + padding；\n- 一个 Combo 内部的图形以自身坐标系为参考，原点 (0, 0) 在灰色虚线框正中心（由于 padding 是均匀的，所以原点也在 keyShape 正中心）；\n- circle 图形的 x 与 y 为其圆心 (0, 0)；\n- circle 类型 Combo 的 label 默认位于圆形外部正上方，距离圆形上边缘 refY。label 的位置（`position`）、`refX`、`refY` 可以在使用该类型 Combo 时配置。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NjJxRLYvCykAAAAAAAAAAABkARQnAQ' alt='img' width='300'/>\n\n> Circle Combo 位置说明图\n\n### 绘制图形\n\n现在，我们自己实现一个如下图所示的 Combo 类型（下图展示空 Combo）：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rMknSIUfjnkAAAAAAAAAAABkARQnAQ' width='120' alt='img'/>\n\n```javascript\n// 定义下面需要使用的 symbol\nconst collapseIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n  ];\n};\nconst expandIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n    [\"M\", x - r + r, y - r + 4],\n    [\"L\", x, y + r - 4],\n  ];\n};\n\nF6.registerCombo(\n  \"cCircle\",\n  {\n    drawShape: function draw(cfg, group) {\n      const self = this;\n      // 获取样式配置，style.r 是加上了 padding 的半径\n      // 对应 Circle Combo 位置说明图中的 R\n      const style = self.getShapeStyle(cfg);\n      // 绘制一个 circle 作为 keyShape，与 'circle' Combo 的 keyShape 一致\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          ...style,\n          x: 0,\n          y: 0,\n          r: style.r,\n        },\n        draggable: true,\n        name: \"combo-keyShape\",\n      });\n      // 增加下方 marker\n      const marker = group.addShape(\"marker\", {\n        attrs: {\n          ...style,\n          fill: \"#fff\",\n          opacity: 1,\n          x: 0,\n          y: style.r,\n          r: 10,\n          symbol: collapseIcon,\n        },\n        draggable: true,\n        name: \"combo-marker-shape\",\n      });\n\n      return circle;\n    },\n    // 定义新增的下方 marker 的位置更新逻辑\n    afterUpdate: function afterUpdate(cfg, combo) {\n      const self = this;\n      // 获取样式配置，style.r 是加上了 padding 的半径\n      // 对应 Circle Combo 位置说明图中的 R    const style = self.getShapeStyle(cfg);\n      const group = combo.get(\"group\");\n      // 在该 Combo 的图形分组根据 name 找到下方 marker\n      const marker = group.find(\n        (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n      );\n      // 更新 marker\n      marker.attr({\n        x: 0,\n        y: style.r,\n        // 数据中的 collapsed 代表该 Combo 是否是收缩状态，根据该字段更新 symbol\n        symbol: cfg.collapsed ? expandIcon : collapseIcon,\n      });\n    },\n  },\n  \"circle\",\n);\n```\n\n值得注意的是，F6 需要用户为自定义节点中的图形设置 `name` 和 `draggable`。其中，`name` 可以是不唯一的任意值。`draggable` 为 `true` 是表示允许该图形响应拖拽事件，只有 `draggable: true` 时，图上的交互行为 `'drag-combo'` 才能在该图形上生效。若上面代码仅在 keyShape 上设置了 `draggable: true`，而右侧圆图形上没有设置，则鼠标拖拽只能在 keyShape 上响应。\n\n### 使用自定义 Combo\n\n现在，我们使用下面的代码使用 `'cCircle'` 类型的 Combo：\n\n```javascript\nconst data = {\n  nodes: [\n    { id: 'node1', x: 250, y: 100, comboId: 'combo1' },\n    { id: 'node2', x: 300, y: 100, comboId: 'combo1' },\n  ],\n  combos: [\n    { id: 'combo1', label: 'Combo 1', parentId: 'combo2' },\n    { id: 'combo2', label: 'Combo 2' },\n    { id: 'combo3', label: 'Combo 3' },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 800,\n  // 全局 Combo 配置\n  defaultCombo: {\n    // 指定 Combo 类型，也可以将 type 写到 combo 数据中\n    type: 'cCircle',\n    labelCfg: {\n      refY: 2,\n    },\n    // ... 此处可配置默认 Combo 的其他样式\n  },\n  modes: {\n    default: [\n      // 配置展开/收缩 Combo 交互，双击 Combo 可以触发\n      // 将会修改响应 Combo 数据中的 collapsed 字段，从而标识该 Combo 是否处于收缩状态\n      'collapse-expand-combo',\n    ],\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1LelSq5TP9EAAAAAAAAAAABkARQnAQ' alt='img' width='400'/>\n\n### 自定义交互\n\n在上面代码中，实例化图时为图配置了 `'collapse-expand-combo'` 交互，即双击 Combo 可以展开和收起。若我们希望在单击 Combo 下方的 marker 时，展开/收起 Combo，则可以去掉 `'collapse-expand-combo'` 配置，并添加如下监听代码：\n\n```javascript\n// collapse/expand when click the marker\ngraph.on(\"combo:tap\", (e) => {\n  if (e.target.get(\"name\") === \"combo-marker-shape\") {\n    // Collapse or expand the combo\n    graph.collapseExpandCombo(e.item);\n\n    if (graph.get(\"layout\")) graph.layout();\n    // If there is a layout configured on the graph, relayout\n    else graph.refreshPositions(); // Refresh positions for items otherwise\n  }\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/combos/defaultCombo.zh.md",
    "content": "---\ntitle: Combo 总览\norder: 0\n---\n\n对于熟悉图可视化类库的用户来说，节点分组是非常实用的一个功能。支持带有节点分组的图布局、自定义 Combo、嵌套节点分组的均匀 padding、节点与分组的边、分组与分组的边、空的节点分组等。具体使用可以参考 <a href='/zh/docs/examples/item/defaultCombos' target='_blank'>Demo</a>。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AngFRpOo4SAAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\nF6 的内置 Combo 包括 circle 和 rect 两种类型，分别如下图所示。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*UwaHSKkwoVUAAAAAAAAAAABkARQnAQ' width='250' alt='img'/>\n\n本文将概述 F6 中的 Combo 的数据结构、各个内置 Combo 类型、内置 Combo 的通用属性、配置方法。各类型 Combo 详细配置项及配置方法见本目录下相应文档。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 使用 Combo 时，必须在示例化图时配置 `groupByTypes` 设置为 `false`，图中元素的视觉层级才能合理。\n\n## 数据结构\n\n为保持 F6 源数据数据结构的稳定性，我们在原来的数据结构上做了如下修改：\n\n1. 新增 `combos` 数组，用于定义图上所有的 Combo 及其配置。`combos` 数组中的一个数据项有如下属性：\n\n| 属性名          | 类型              | 是否必须 | 示例                     | 解释                                                                                                                                                                      |\n| --------------- | ----------------- | -------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| id              | string            | true     | 'comboA'                 | 一个 Combo 的唯一标识，**必须是 string 类型，必须唯一**                                                                                                                   |\n| parentId        | string            | false    | 'comboB'                 | 该 Combo 的父 Combo 的 ID                                                                                                                                                 |\n| padding         | Number / Number[] | false    | 10 或 [ 10, 20, 10, 20 ] | 该 Combo 内边距                                                                                                                                                           |\n| size            | number / number[] | false    | 10 或 [ 10, 20 ]         | 该 Combo 的最小尺寸（非固定尺寸），默认 'circle' 类型 Combo 的 size 为 20，'rect' 类型的为 [20, 5]                                                                        |\n| fixSize         | number / number[] | false    | 10 或 [ 10, 20 ]         | 固定该 Combo 的尺寸，不指定时 Combo 大小由内部元素的分布和大小来决定。若指定了 fixSize 而没有指定 fixCollapseSize，则即使该 Combo 在收起状态下仍然保持 fixSize 指定的尺寸 |\n| fixCollapseSize | number / number[] | false    | 10 或 [ 10, 20 ]         | 固定该 Combo 收起时的尺寸，不指定时，若未指定 fixSize 则由 size 决定收起时的尺寸，否则统一为 fixSize 尺寸                                                                 |\n| label           | string            | false    | 'combo A'                | 该 Combo 的文本标签                                                                                                                                                       |\n| style           | Object            | false    |                          | 该 Combo 的样式配置项，详见[内置 Combo 配置文档](/zh/docs/manual/middle/elements/combos/defaultCombo#样式属性-style)及各类型 Combo 的文档                                 |\n| labelCfg        | Object            | false    |                          | 该 Combo 的文本标签样式配置项，详见[内置 Combo 配置文档](/zh/docs/manual/middle/elements/combos/defaultCombo#标签文本-label-及其配置-labelcfg)及各类型 Combo 的文档       |\n\n`combos` 数组中一个数据项的示例：\n\n```javascript\n{\n  id: 'comboA',\n  label: 'A',\n  parentId: 'comboC'\n},\n```\n\n2. 在 nodes 数组中的数据项内加入 `comboId` 属性，表示该节点与某个 Combo 的从属关系。\n\n```javascript\n{\n  nodes: [\n    {\n      id: 'node1',\n      comboId: 'comboA' // node1 属于 comboA\n    },\n    {\n      id: 'node2',\n      comboId: 'comboB' // node2 属于 comboB\n    },\n    {\n      id: 'node3' // node3 不属于任何 combo\n    },\n    // ...\n  ],\n  edges: [\n    // ...\n  ],\n  combos: [\n    { // 定义 comboA\n      id: 'comboA',\n      label: 'A',\n      parentId: 'comboC'\n    },\n    { // 定义 comboB\n      id: 'comboB',\n      parentId: 'comboB'\n    },\n    { // 定义 comboC，这是一个空的 combo\n      id: 'comboC'\n    },\n    // ...\n  ]\n}\n```\n\n## 内置 Combo 类型说明\n\n下面表格中显示了内置的各类 Combo，同时对一些特殊的字段进行了说明：\n\n| 名称   | 描述                                                                                                                                                                                                                                                                                                                                                 | 默认示例                                                                                                               |\n| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| circle | 圆形：<br />- `size` 是单个数字，表示直径<br />- 圆心位置对应 Combo 的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在 Combo 正上方<br />- 更多字段见 [Circle](/zh/docs/manual/middle/elements/combos/built-in/circle) Combo 教程<br />- <a href='/zh/docs/examples/item/defaultCombos#circle' target='_blank'>Demo</a>                | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ijeuQoiH0JUAAAAAAAAAAABkARQnAQ' width=150 alt='img'/> |\n| rect   | 矩形：<br />- `size` 是数组，例如：[100, 50]<br />- 矩形的中心位置是 Combo 的位置，而不是左上角<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在 Combo 左上角<br />- 更多字段见 [Rect](/zh/docs/manual/middle/elements/combos/built-in/rect) Combo 教程<br />- <a href='/zh/docs/examples/item/defaultCombos#rect' target='_blank'>Demo</a> | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Khp4QpxXVlQAAAAAAAAAAABkARQnAQ' width=150 alt='img'/> |\n\n## Combo 的通用属性\n\n所有内置的 Combo 支持的通用属性：\n\n| 属性名          | 类型              | 是否必须       | 示例                     | 说明                                                                                                                                                                      |\n| --------------- | ----------------- | -------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| id              | string            | true           | 'comboA'                 | 一个 Combo 的唯一标识，**必须是 string 类型，必须唯一**                                                                                                                   |\n| type            | string            | false          | 'rect'                   | 指定该 Combo 的类型，可以是内置 Combo 的类型名，也可以是自定义 Combo 的类型名。默认是 `'circle'`                                                                          |\n| parentId        | string            | false          | 'comboB'                 | 该 Combo 的父 Combo 的 ID                                                                                                                                                 |\n| size            | false             | Number / Array | 30 或 [30, 20]           | Combo 的最小尺寸（非固定尺寸），默认 'circle' 类型 Combo 的 size 为 20，'rect' 类型的为 [20, 5]                                                                           |\n| fixSize         | number / number[] | false          | 10 或 [ 10, 20 ]         | 固定该 Combo 的尺寸，不指定时 Combo 大小由内部元素的分布和大小来决定。若指定了 fixSize 而没有指定 fixCollapseSize，则即使该 Combo 在收起状态下仍然保持 fixSize 指定的尺寸 |\n| fixCollapseSize | number / number[] | false          | 10 或 [ 10, 20 ]         | 固定该 Combo 收起时的尺寸，不指定时，若未指定 fixSize 则由 size 决定收起时的尺寸，否则统一为 fixSize 尺寸 ｜                                                              |\n| padding         | Number / Number[] | false          | 10 或 [ 10, 20, 10, 20 ] | 该 Combo 内边距，默认 'circle' 类型 Combo 的 padding 为 25，'rect' 类型的为 [25, 20, 15, 20]                                                                              |\n| style           | Object            | false          |                          | 该 Combo 的样式配置项                                                                                                                                                     |\n| label           | string            | false          | 'Combo A'                | 该 Combo 的文本标签                                                                                                                                                       |\n| labelCfg        | Object            | false          |                          | 该 Combo 的文本标签样式配置项                                                                                                                                             |\n\n### 样式属性 style\n\nObject 类型。通过 `style` 配置来修改 Combo 的填充色、边框颜色、阴影等属性。下表是 `style` 对象中常用的配置项：\n\n| 名称          | 是否必须 | 类型   | 备注                          |\n| ------------- | -------- | ------ | ----------------------------- |\n| fill          | false    | String | Combo 填充色                  |\n| stroke        | false    | String | Combo 的描边颜色              |\n| lineWidth     | false    | Number | 描边宽度                      |\n| shadowColor   | false    | String | 阴影颜色                      |\n| shadowBlur    | false    | Number | 阴影范围                      |\n| shadowOffsetX | false    | Number | 阴影 x 方向偏移量             |\n| shadowOffsetY | false    | Number | 阴影 y 方向偏移量             |\n| opacity       | false    | Number | 设置绘图的当前 alpha 或透明值 |\n| fillOpacity   | false    | Number | 设置填充的 alpha 或透明值     |\n\n下面代码演示在实例化图时全局配置方法中配置 `style`：\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    // ... 其他属性\n    style: {\n      fill: '#steelblue',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n      // ... 其他属性\n    },\n  },\n});\n```\n\n### 标签文本 label 及其配置 labelCfg\n\n`label` String 类型。标签文本的文字内容。<br />`labelCfg` Object 类型。配置标签文本。下面是 `labelCfg` 对象中的常用配置项：\n\n| 名称     | 是否必须 | 类型   | 备注                                                                                                             |\n| -------- | -------- | ------ | ---------------------------------------------------------------------------------------------------------------- |\n| position | false    | String | 文本相对于 Combo 的位置，目前支持的位置有:  `'center'`，`'top'`，`'left'`，`'right'`，`'bottom'`。默认为 `'top'` |\n| refX     | false    | Number | 文本的偏移，在 x 方向上的偏移量                                                                                  |\n| refY     | false    | Number | 文本的偏移，在 y 方向上的偏移量                                                                                  |\n| style    | false    | Object | 标签的样式属性。                                                                                                 |\n\n上表中的标签的样式属性 `style` 的常用配置项如下：\n\n| 名称                                                                                                          | 是否必须 | 类型   | 备注         |\n| ------------------------------------------------------------------------------------------------------------- | -------- | ------ | ------------ |\n| fill                                                                                                          | false    | String | 文本颜色     |\n| stroke                                                                                                        | false    | String | 文本描边颜色 |\n| lineWidth                                                                                                     | false    | Number | 文本描边粗细 |\n| opacity                                                                                                       | false    | Number | 文本透明度   |\n| fontSize                                                                                                      | false    | Number | 文本字体大小 |\n| fontFamily                                                                                                    | false    | String | 文字字体     |\n| ... Combo 标签与节点、边标签样式属性相同，统一整理在 [Text 图形 API](/zh/docs/api/shapeProperties/#文本-text) |\n\n下面代码演示在实例化图时全局配置方法中配置  `label` 和  `labelCfg`。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    // ... 其他属性\n    labelCfg: {\n      position: 'top',\n      offset: [10, 10, 10, 10],\n      style: {\n        fill: '#666',\n      },\n    },\n  },\n});\n```\n\n## Combo 的配置方法\n\n配置 Combo 的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.combo(comboFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.combo(comboFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n即有相同的配置项时，优先级高的方式将会覆盖优先级低的。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`parentId`、`label` 应当配置到每个 Combo 数据中外，其余的 [Combo 的通用属性](#combo-的通用属性) 以及各个 Combo 类型的特有属性（见内置 Combo 类型）均支持三种配置方式。\n\n### 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultCombo` 配置 Combo ，这里的配置是全局的配置，将会在所有 Combo 上生效。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  defaultCombo: {\n    type: 'circle',\n    // 其他配置\n  },\n});\n```\n\n### 在数据中动态配置\n\n如果需要为不同 Combo 进行不同的配置，可以将配置写入到 Combo 数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [\n    ... // 边\n  ],\n  combos: [{\n    id: 'combo0',\n    size: 100,\n    type: 'circle',\n    ...    // 其他属性\n    style: {\n      ...  // 样式属性，每种 Combo 的详细样式属性参见各类型 Combo 文档\n    }\n  },{\n    id: 'combo1',\n    size: [50, 100],\n    type: 'rect',\n    ...    // 其他属性\n    style: {\n      ...  // 样式属性，每种 Combo 的详细样式属性参见各类型 Combo 文档\n    }\n  },\n  // 其他 combo\n  ]\n}\n```\n\n### 使用 graph.combos()\n\n该方法可以为不同 combo 进行不同的配置。\n\n<br />**提示:**\n\n- 该方法必须**在 render 之前调用**，否则不起作用；\n- 由于该方法优先级最高，将覆盖其他地方对 combo 的配置，这可能将造成一些其他配置不生效的疑惑；\n- 该方法在增加元素、更新元素时会被调用，如果数据量大、每个 Combo 上需要更新的内容多时，可能会有性能问题。\n\n```javascript\n// const data = ...\n// const graph = ...\ngraph.combo((combo) => {\n  return {\n    id: combo.id,\n    type: \"rect\",\n    style: {\n      fill: \"blue\",\n    },\n  };\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n## Combo 交互\n\n只是简单地将 Combo 渲染出来，并没有多大的实用价值，只有支持一系列的交互操作后，才能最大程度地体现 Combo 的价值。\n\n在 F6 中，我们内置了 `drag-combo`、`collapse-expand-combo`、`drag-node` 三个 [Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n#### drag-combo\n\n`drag-combo` Behavior，支持拖动 Combo ，拖动 Combo 过程中，会动态改变 Combo 中节点和边的位置，在拖拽完成以后，保持 Combo 和节点的相对位置不变。还可以通过拖拽改变 Combo 的从属关系。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*0Bj-Toa2B9YAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n#### collapse-expand-combo\n\n`collapse-expand-combo` Behavior，支持双击 Combo 收起和展开 Combo ，收起 Combo 以后，隐藏 Combo 中的所有节点，外部节点和 Combo 中节点有连线的情况下，所有连接会连接到 Combo 上面。若图配置有布局且该 behavior 的 `relayout` 配置项为 `true`（默认为 `true`），则该 behavior 被触发后会触发图的重新布局。若希望避免重新布局，可以配置 `relayout` 为 `false` ，或通过监听 combo 点击事件和 [graph.collapseExpandCombo API](/zh/docs/api/Graph#collapseexpandcombocombo) 控制收缩展开逻辑。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*X0_PSYizJ4AAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n#### drag-node\n\n拖拽节点过程中，动态改变节点与父 Combo 的从属关系。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*E8MCQr5OywgAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n#### 配置交互\n\n通过下面代码在实例化图时将三个 behavior 配置到图上即可使用上述交互：\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n  modes: {\n    default: ['drag-combo', 'collapse-expand-combo', 'drag-node'],\n  },\n});\n```\n\n## 示例\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node1',\n      label: 'Node1',\n      comboId: 'rect_combo',\n    },\n    {\n      id: 'node2',\n      label: 'Node 2',\n    },\n  ],\n  combos: [\n    {\n      id: 'circle_combo',\n      type: 'circle',\n      label: 'Circle',\n    },\n    {\n      id: 'rect_combo',\n      type: 'rect',\n      label: 'Rect',\n    },\n  ],\n};\n\nconst graph = new F6.Graph({\n  ...\n  width: 1500,\n  height: 300,\n  // 必须将 groupByTypes 设置为 false，带有 combo 的图中元素的视觉层级才能合理\n  groupByTypes: false,\n});\ngraph.data(data);\ngraph.render();\n```\n\n显示结果： <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*biK0SJmQB6gAAAAAAAAAAABkARQnAQ' width='250' alt='img'/>\n\n### 调整 Combo 配置\n\n下面演示通过将配置写入数据的方式，调整 `id` 为 `'rect_combo'` 的文本位置、颜色、样式。将下面代码替换上面代码中 `id` 为  `'rect_combo'` 的 combo 数据即可生效。\n\n```javascript\n{\n  id: 'rect_combo',\n  type: 'rect',\n  label: 'Rect Combo',\n  labelCfg: {\n    position: 'bottom',\n    refX: 5,\n    refY: -12,\n    style: {\n      fill: '#fff'\n    }\n  },\n  style: {\n    fill: '#fa8c16',\n    stroke: '#000',\n    lineWidth: 2\n  }\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NF3eRLJP1DkAAAAAAAAAAABkARQnAQ' width='250' alt='img'/>\n\n## 适用场景\n\n1. 风控、反洗钱、保险骗保、网络诈骗、信用卡诈骗等场景下团伙分析；\n2. 特征分析：同一个分组中的节点在某些特征上面比较相似；\n3. 整理节点：当类似的节点放到一个分组中，只渲染分组，不渲染节点，减少干扰元素。\n\n## 相关阅读\n\n- [状态 State](/zh/docs/manual/middle/states/state) —— 交互过程中的样式变化。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/arrow.zh.md",
    "content": "---\ntitle: 箭头\norder: 2\n---\n\n无论是内置边还是[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)，都可以为其配置起始端箭头与结束端箭头。F6 中的箭头分为默认箭头、内置箭头、自定义箭头。\n\n<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GkXiSbN9JJsAAAAAAAAAAABkARQnAQ' width=500 alt='img'/>\n\n## 默认箭头\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*fthFSoNbmeAAAAAAAAAAAABkARQnAQ' width=200 alt='img'/>\n\n### 使用方法\n\n在边的样式属性 `style` 中将 `endArrow` 或 `startArrow` 配置为 `true` 即可：\n\n```javascript\nstyle: {\n  endArrow: true,\n  startArrow: true\n}\n```\n\n## 内置箭头\n\n### 各箭头概览\n\n| 名称         | 参数                                                                                                                                                                                           | 使用方法                                                                                | 效果                                                                                                                   |\n| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| triangle     | <div style=\"width: 150pt\">依次为箭头宽度（默认 10）、长度（默认 15）、偏移量（默认为 0，与 `d` 对应）</div>                                                                                    | endArrow: {<br /> path: F6.Arrow.triangle(10, 20, 25),<br /> d: 25<br />}               | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*s8LxSZoxSEsAAAAAAAAAAABkARQnAQ' width=200 alt='img'/> |\n| vee          | <div style=\"width: 150pt\">依次为箭头宽度（默认 15）、长度（默认 20）、偏移量（默认为 0，与 `d` 对应）</div>                                                                                    | endArrow: {<br /> path: F6.Arrow.vee(10, 20, 25),<br /> d: 25<br />}                    | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2DBOTJfZZS0AAAAAAAAAAABkARQnAQ' width=200 alt='img'/> |\n| circle       | <div style=\"width: 150pt\">依次为箭头半径（默认 5）、偏移量（默认为 0，与 `d` 对应）</div>                                                                                                      | endArrow: {<br /> path: F6.Arrow.circle(10, 25),<br/> d: 25<br />}                      | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*h2XSSJrdUHkAAAAAAAAAAABkARQnAQ' width=200 alt='img'/> |\n| diamond      | <div style=\"width: 150pt\">依次为箭头宽度（默认 15）、长度（默认 15）、偏移量（默认为 0，与 `d` 对应）</div>                                                                                    | endArrow: {<br /> path: F6.Arrow.diamond(10, 20, 25),<br /> d: 25<br />}                | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FIHORJpJov0AAAAAAAAAAABkARQnAQ' width=200 alt='img'/> |\n| rect         | <div style=\"width: 150pt\">依次为箭头宽度（默认 10）、长度（默认 10）、偏移量（默认为 0，与 `d` 对应）</div>                                                                                    | endArrow: {<br /> path: F6.Arrow.rect(10, 20, 25),<br /> d: 25<br />}                   | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AkBLSoxXptUAAAAAAAAAAABkARQnAQ' width=200 alt='img'/> |\n| triangleRect | <div style=\"width: 150pt\">依次为箭头三角形宽度（默认 15）、三角形长度（默认 15）、矩形宽度（默认 15）、矩形长度（默认 3）、三角形与矩形间距（默认为 5）、偏移量（默认为 0，与 `d` 对应）</div> | endArrow: {<br /> path: F6.Arrow.triangleRect(15, 15, 15, 3, 5, 25),<br /> d: 25<br />} | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rPPeT4kFVdwAAAAAAAAAAABkARQnAQ' width=200 alt='img'/> |\n\n### 使用方法\n\n调用 `F6.Arrow.arrowName` 配置边的样式属性 `style` 中 `endArrow` 或 `startArrow` 的 `path`：\n\n```javascript\nstyle: {\n  endArrow: {\n    path: F6.Arrow.triangle(10, 20, 25), // 使用内置箭头路径函数，参数为箭头的 宽度、长度、偏移量（默认为 0，与 d 对应）\n    d: 25\n  },\n  startArrow: {\n    path: F6.Arrow.vee(15, 20, 15), // 使用内置箭头路径函数，参数为箭头的 宽度、长度、偏移量（默认为 0，与 d 对应）\n    d: 15\n  },\n}\n```\n\n## 自定义箭头\n\n参见高级指引 [自定义箭头](/zh/docs/manual/middle/elements/edges/custom-edge#4-自定义箭头)。\n\n## 配置箭头样式\n\n只有内置箭头和自定义箭头可以配置样式。\n\n#### 配置项\n\n| 名称          | 是否必须 | 类型   | 备注                                                                                                                                                                                             |\n| ------------- | -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| fill          | false    | String | 填充颜色，默认无填充                                                                                                                                                                             |\n| stroke        | false    | String | 描边颜色，默认与边颜色相同                                                                                                                                                                       |\n| lineWidth     | false    | Number | 描边宽度，默认与边宽度相同                                                                                                                                                                       |\n| opacity       | false    | Number | 透明度                                                                                                                                                                                           |\n| shadowColor   | false    | String | 阴影颜色                                                                                                                                                                                         |\n| shadowBlur    | false    | Number | 阴影模糊程度                                                                                                                                                                                     |\n| shadowOffsetX | false    | Number | 阴影 x 方向偏移量                                                                                                                                                                                |\n| shadowOffsetY | false    | Number | 阴影 y 方向偏移量                                                                                                                                                                                |\n| lineDash      | false    | Array  | 描边的虚线样式，可以指定一个数组。一组描述交替绘制线段和间距（坐标空间单位）长度的数字。 如果数组元素的数量是奇数， 数组的元素会被复制并重复。例如， [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。 |\n\n#### 使用方法\n\n```javascript\n// 内置箭头\nstyle: {\n  endArrow: {\n    path: F6.Arrow.triangle(10, 20, 25), // 使用内置箭头路径函数，参数为箭头的 宽度、长度、偏移量（默认为 0，与 d 对应）\n    d: 25,\n    fill: '#f00',\n    stroke: '#0f0',\n    opacity: 0.5,\n    lineWidth: 3,\n    // ...\n  },\n}\n\n\n// 自定义箭头\nstyle: {\n  endArrow: {\n    path: 'M 0,0 L 20,10 L 20,-10 Z',\n    d: 5,\n    fill: '#f00',\n    stroke: '#0f0',\n    opacity: 0.5,\n    lineWidth: 3,\n    // ...\n  },\n}\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/built-in/arc.zh.md",
    "content": "---\ntitle: Arc\norder: 6\n---\n\nF6 内置了圆弧  arc  边，其默认样式如下。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9JBjS6bdrHMAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  一节所示，配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge` 指定 `type` 为 `'arc'`，即可使用 arc  边。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'arc',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node1'\n    type: 'arc',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n## 配置项说明\n\narc 边支持 [边通用配置项](/zh/docs/manual/middle/elements/edges/defaultEdge/#边的通用属性)，以下表格对部分常用配置项进行说明。其中 `curveOffset` 属性是 `arc` 特有的属性，它控制了圆弧的大小以及弯曲的方向。\n\n```javascript\ncolor: '#87e8de',\ncurveOffset: 20,  // 圆弧顶端距离两线中心位置的距离\nstyle: {\n  lineWidth: 2,\n  stroke: '#87e8de'\n},\nlabel: '边的标签文字',\nlabelCfg: {\n  refX: 10,  // 文本在 x 方向偏移量\n  refY: 10,  // 文本在 y 方向偏移量\n  style: {\n    fill: '#595959'\n  }\n}\n```\n\n| 名称            | 含义                               | 类型       | 备注                                                                              |\n| --------------- | ---------------------------------- | ---------- | --------------------------------------------------------------------------------- |\n| color           | 边的颜色                           | String     | 优先级低于 `style` 中的 `stroke`                                                  |\n| **curveOffset** | **圆弧顶端距离两线中心位置的距离** | **Number** | **数值绝对值大小控制圆弧的大小，正负控制圆弧弯曲的方向，默认为 `20`。arc 边特有** |\n| style           | 边的样式                           | Object     | Canvas 支持的属性                                                                 |\n| label           | 标签文本文字                       | String     |                                                                                   |\n| labelCfg        | 标签文本配置项                     | Object     |                                                                                   |\n| stateStyles     | 各状态下的样式                     | Object     | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)           |\n\n### 特殊属性：弧度  curveOffset\n\n`curveOffset` 属性是 `arc` 特有的属性，它控制了圆弧的大小以及弯曲的方向。下面代码演示在实例化图时全局配置方法中配置 `curveOffset`。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*63NxRppr3tUAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n    {\n      id: 'node1',\n      x: 200,\n      y: 200,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      source: 'node0',\n      target: 'node1',\n      type: 'arc',\n      label: 'arc',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  linkCenter: true,\n  defaultEdge: {\n    // type: 'arc',  // 在数据中已经指定 type，这里无需再次指定\n    curveOffset: -80,\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span><br /> 上面代码使用了 graph 的配置项  `linkCenter: true` 以设置 arc 边连入节点的中心，保证美观性。\n\n### 样式属性 style\n\nObject 类型。配置项与 [边通用样式属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style) 相同。基于上面 [特殊属性：弧度  curveOffset](#特殊属性：弧度-curveoffset) 中的代码，下面代码在 `defaultEdge` 中增加了  `style`  配置项进行边的样式的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*LH4lT64i304AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    style: {\n      stroke: \"#088\",\n      lineWidth: 3,\n    },\n  },\n});\n// ...\n```\n\n### 标签文本配置  labelCfg\n\nObject 类型。支持 [边通用标签配置](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。基于上面  [弧度 curveOffset](/zh/docs/manual/middle/elements/edges/built-in/arc/#特殊属性：弧度-curveoffset) 中的代码，下面代码在 `defaultEdge` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*xu0FSKNxQNUAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    labelCfg: {\n      autoRotate: true,\n      refY: -30,\n      refX: 30,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/built-in/cubic.zh.md",
    "content": "---\ntitle: Cubic\norder: 5\n---\n\nF6 内置了  cubic  边，其默认样式如下。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rcLiTa6Ih3AAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  一节所示，配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge` 指定 `type` 为 `'cubic'`，即可使用 cubic  边。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'cubic',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node1'\n    type: 'cubic',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n## 配置项说明\n\ncubic 边支持 [边通用配置项](/zh/docs/manual/middle/elements/edges/defaultEdge/#边的通用属性)，以下表格对部分常用配置项进行说明。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称           | 含义                                                                                                                                                                                | 类型              | 备注                                                                                           |\n| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------- |\n| color          | 边的颜色                                                                                                                                                                            | String            | 优先级低于 `style` 中的 `stroke`                                                               |\n| style          | 边的样式                                                                                                                                                                            | Object            | Canvas 支持的属性                                                                              |\n| label          | 标签文本文字                                                                                                                                                                        | String            |                                                                                                |\n| labelCfg       | 标签文本配置项                                                                                                                                                                      | Object            |                                                                                                |\n| controlPoints  | 控制点数组                                                                                                                                                                          | Array             | 不指定时将会使用默认的控制点：曲线 1/3 和 2/3 处。示例：`[{ x: 10, y: 20 }, { x: 15, y: 30 }]` |\n| curveOffset    | 两个控制点距离两端点连线的距离，可理解为控制边的弯曲程度。为 Number 类型时两个控制点分别在连线两侧且与连线距离相等                                                                  | Number / Number[] | cubic、quadratic、cubic-vertical、cubic-horizontal 等贝塞尔曲线特有                            |\n| minCurveOffset | 两个控制点距离两端点连线的最小距离距离，可理解为控制边的弯曲程度，用于防止过于“平缓”的曲线，当 `curveOffset` 未指定时生效。为 Number 类型时两个控制点分别在连线两侧且与连线距离相等 | Number / Number[] | cubic-vertical、cubic-horizontal 边特有                                                        |\n| curvePosition  | 两个控制点在两端点连线上的相对位置，范围 0 ～ 1                                                                                                                                     | Number / Number[] | cubic、quadratic、cubic-vertical、cubic-horizontal 等贝塞尔曲线特有                            |\n| stateStyles    | 各状态下的样式                                                                                                                                                                      | Object            | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                        |\n\n### 样式属性 style\n\nObject 类型。配置项与 [边通用样式属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style) 相同。下面代码演示在实例化图时全局配置方法中配置 `style`，以达到下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Do6IQouIA9AAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n    {\n      id: 'node1',\n      x: 200,\n      y: 200,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      source: 'node0',\n      target: 'node1',\n      type: 'cubic',\n      label: 'cubic',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // type: 'cubic',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      endArrow: true,\n      stroke: '#088',\n      lineWidth: 3,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。支持 [边通用标签配置](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style) 中的代码，下面代码在 `defaultEdge` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ySTVQ7MrMtgAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    labelCfg: {\n      autoRotate: true,\n      refY: 10,\n      refX: 40,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/built-in/line.zh.md",
    "content": "---\ntitle: Line\norder: 2\n---\n\nF6 内置了直线 line  边，其默认样式如下。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*prQjRbZtUUkAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  一节所示，配置边的方式有两种：配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge` 指定 `type` 为 `'line'`，即可使用 line  边。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'line',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node1'\n    type: 'line',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n## 配置项说明\n\nline 边支持 [边通用配置项](/zh/docs/manual/middle/elements/edges/defaultEdge/#边的通用属性)，以下表格对部分常用配置项进行说明。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称        | 含义           | 类型   | 备注                                                                    |\n| ----------- | -------------- | ------ | ----------------------------------------------------------------------- |\n| color       | 直线的颜色     | String | 优先级低于 `style` 中的 `stroke`                                        |\n| style       | 直线的样式     | Object | Canvas 支持的属性                                                       |\n| label       | 标签文本文字   | String |                                                                         |\n| labelCfg    | 标签文本配置项 | Object |                                                                         |\n| stateStyles | 各状态下的样式 | Object | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式) |\n\n### 样式属性 style\n\nObject 类型。配置项与 [边通用样式属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style) 相同。下面代码演示在实例化图时全局配置方法中配置 `style`，以达到下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cQprQJVY3c4AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n    {\n      id: 'node1',\n      x: 200,\n      y: 100,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      source: 'node0',\n      target: 'node1',\n      type: 'line',\n      label: 'line',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // type: 'line',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      stroke: 'steelblue',\n      lineWidth: 5,\n    },\n    labelCfg: {\n      position: 'end',\n      refY: -10,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。支持 [边通用标签配置](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。<br />基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultEdge` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*myWoSa1ngjgAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    labelCfg: {\n      position: \"end\",\n      refY: -10,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/built-in/loop.zh.md",
    "content": "---\ntitle: Loop\norder: 7\n---\n\nF6 内置了折线 loop  边，其默认样式如下。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*sPBIR40KLOkAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span><br /> loop 边适用于自环边，即起始点与结束点为相同节点的边，在不同端点的边上适用 loop 边将会出现异常效果。 <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*JgYrTabHWskAAAAAAAAAAABkARQnAQ' width='75' height='176' alt='img'/>\n\n## 使用方法\n\n如 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  一节所示，配置边的方式有两种：配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge` 指定 `type` 为 `'loop'`，即可使用 `loop`  边。需要注意的是，如果图上存在非自环边，loop 将会表现异常。因此不建议在存在非自环边的图上使用此全局配置方法。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'loop',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node0'\n    type: 'loop',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n## 配置项说明\n\n自环是指连接单个节点自身的边，是一种边的特殊情况。支持 [边通用配置项](/zh/docs/manual/middle/elements/edges/defaultEdge/#边的通用属性)，以下表格对部分常用配置项进行说明。在通用属性基础上，支持了特殊的配置 `loopCfg`。\n\nloop 边支持以下的配置项，对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称           | 含义               | 类型       | 备注                         |\n| -------------- | ------------------ | ---------- | ---------------------------- |\n| color          | 边的颜色           | String     | 优先级低于 style 中的 stroke |\n| style          | 边的样式           | Object     | Canvas 支持的属性            |\n| style.endArrow | 边结束端是否有箭头 | Boolean    | 默认为 false                 |\n| label          | 标签文本文字       | String     |                              |\n| labelCfg       | 标签文本配置项     | Object     |                              |\n| **loopCfg**    | **自环特殊配置**   | **Object** |                              |\n\n### 样式属性 style\n\nObject 类型。配置项与 [边通用样式属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style) 相同。下面代码演示在实例化图时全局配置方法中配置 `style`，以达到下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*dAV3QIY2ZxkAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      source: 'node0',\n      target: 'node0',\n      type: 'loop',\n      label: 'loop',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // type: 'loop',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      endArrow: true,\n      stroke: '#088',\n      lineWidth: 3,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。支持 [边通用标签配置](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultEdge` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6hcBSId1XzAAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    labelCfg: {\n      refY: -5,\n      refX: 30,\n    },\n  },\n});\n// ...\n```\n\n### 自环特殊配置  loopCfg\n\nObject 类型。通过 `loopCfg`  配置自环的方位、高度、顺逆时针。\n\n- `position`: 指定自环与节点的相对位置。默认为：`top`。支持的值有：`top`, `top-right`, `right`,`bottom-right`, `bottom`, `bottom-left`, `left`, `top-left`\n- `dist`: 从节点 keyShape 的边缘到自环最顶端的位置，用于指定自环的曲度，默认为节点的高度。\n- `clockwise`: 指定是否顺时针画环，默认为  `true`。\n\n基于上面 [样式属性 style](#XQFb2) 中的代码，下面代码在 `defaultEdge` 中增加了  `loopCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*z9dwTZvACcEAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    loopCfg: {\n      position: \"left\",\n      dist: 100,\n      clockwise: false,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/built-in/polyline.zh.md",
    "content": "---\ntitle: Polyline\norder: 3\n---\n\nF6 内置了折线 polyline  边，其默认样式如下。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aRHcQZStrPgAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  一节所示，配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge` 指定 `type` 为 `'polyline'`，即可使用 polyline  边。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'polyline',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node1'\n    type: 'polyline',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n## 配置项说明\n\npolyline 边支持 [边通用配置项](/zh/docs/manual/middle/elements/edges/defaultEdge/#边的通用属性)，以下表格对部分常用配置项进行说明：\n\n```javascript\ncolor: '#87e8de',\nstyle: {\n  offset: 20,  // 拐弯处距离节点最小距离\n  radius: 10,  // 拐弯处的圆角弧度，若不设置则为直角\n  lineWidth: 2,\n  stroke: '#87e8de'\n},\nlabel: '边的标签文字',\nlabelCfg: {\n  refX: 10,  // 文本在 x 方向偏移量\n  refY: 10,  // 文本在 y 方向偏移量\n  style: {\n    fill: '#595959'\n  }\n}\n```\n\n| 名称             | 含义                       | 类型       | 备注                                                                                                                                                                                                           |\n| ---------------- | -------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| color            | 边的颜色                   | String     | 优先级低于 style 中的 stroke                                                                                                                                                                                   |\n| style            | 边的样式                   | Object     | Canvas 支持的属性                                                                                                                                                                                              |\n| **style.radius** | **拐弯处的圆角弧度**       | **Number** | **若不设置则为直角，polyline 特有**                                                                                                                                                                            |\n| **style.offset** | **拐弯处距离节点最小距离** | **Number** | **默认为 5，polyline 特有**                                                                                                                                                                                    |\n| controlPoints    | 控制点数组                 | Array      | 不指定时根据 <a href='https://www.yuque.com/antv/blog/eyi70n' target='_blank'>A\\* 算法</a>自动生成折线。若指定了，则按照 `controlPoints` 指定的位置进行弯折。示例：`[{ x: 10, y: 20 }, { x: 20, y: 25 }, ...]` |\n| label            | 标签文本文字               | String     |                                                                                                                                                                                                                |\n| labelCfg         | 标签文本配置项             | Object     |                                                                                                                                                                                                                |\n| stateStyles      | 各状态下的样式             | Object     | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                                                                                                        |\n\n### 样式属性 style\n\nObject 类型。支持 [边通用样式属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style)。与其他类型的边不同的是，polyline 的 `style`  含有两个特殊属性：\n\n- `radius` ，弯折处的圆角半径，不设置则默认为直角；\n- `offset` ，距离端点的最小距离，默认值为 5。\n\n其它配置项与边的通用样式属性相同，见 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)<br />下面代码演示在实例化图时全局配置方法中配置 `style`，以达到下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SzMGQ70SLwEAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n    {\n      id: 'node1',\n      x: 200,\n      y: 200,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      source: 'node0',\n      target: 'node1',\n      type: 'polyline',\n      label: 'polyline',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // type: 'polyline',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      radius: 10,\n      offset: 10,\n      stroke: 'steelblue',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置  labelCfg\n\nObject 类型。支持 [边通用标签配置](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultEdge` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HT4OTobglpoAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    labelCfg: {\n      refY: -10,\n      refX: 60,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/built-in/quadratic.zh.md",
    "content": "---\ntitle: Quadratic\norder: 4\n---\n\nF6 内置了  quadratic  边，其默认样式如下。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YUOlRZaDDZgAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  一节所示，配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](/zh/docs/manual/middle/elements/edges/defaultEdge#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge` 指定 `type` 为 `'quadratic'`，即可使用 quadratic  边。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'quadratic',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node1'\n    type: 'quadratic',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n## 配置项说明\n\nquadratic 边支持 [边通用配置项](/zh/docs/manual/middle/elements/edges/defaultEdge/#边的通用属性)，以下表格对部分常用配置项进行说明。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称          | 含义                                                 | 类型              | 备注                                                                    |\n| ------------- | ---------------------------------------------------- | ----------------- | ----------------------------------------------------------------------- |\n| color         | 边的颜色                                             | String            | 优先级低于 style 中的 stroke                                            |\n| style         | 边的样式                                             | Object            | Canvas 支持的属性                                                       |\n| label         | 标签文本文字                                         | String            |                                                                         |\n| labelCfg      | 标签文本配置项                                       | Object            |                                                                         |\n| controlPoints | 控制点数组                                           | Array             | 不指定时将会使用默认的控制点：曲线中心附近。示例：`[{ x: 10, y: 20 }]`  |\n| curveOffset   | 控制点距离两端点连线的距离，可理解为控制边的弯曲程度 | Number / Number[] | cubic、horizontal、cubic-vertical、cubic-horizontal 等贝塞尔曲线特有    |\n| curvePosition | 控制点在两端点连线上的相对位置，范围 0 ～ 1          | Number / Number[] | cubic、horizontal、cubic-vertical、cubic-horizontal 等贝塞尔曲线特有    |\n| stateStyles   | 各状态下的样式                                       | Object            | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式) |\n\n### 样式属性  style\n\nObject 类型。配置项与 [边通用样式属性](/zh/docs/manual/middle/elements/edges/defaultEdge/#样式属性-style) 相同。下面代码演示在实例化图时全局配置方法中配置 `style`。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*TWjZRqKStFcAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n    {\n      id: 'node1',\n      x: 200,\n      y: 100,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      source: 'node0',\n      target: 'node1',\n      type: 'quadratic',\n      label: 'quadratic',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // type: 'quadratic',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      stroke: '#088',\n      endArrow: true,\n      lineWidth: 3,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。支持 [边通用标签配置](/zh/docs/manual/middle/elements/edges/defaultEdge/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultEdge` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*E4ZYQ7xM0IsAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultEdge: {\n    // ... 其他配置\n    labelCfg: {\n      refY: 10,\n      refX: 40,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/custom-edge.zh.md",
    "content": "---\ntitle: 自定义边\norder: 3\n---\n\nF6 除了提供丰富的 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)  外，还提供了自定义边的机制，方便用户开发更加定制化的边，包括含有复杂图形的边、复杂交互的边、带有动画的边等。\n\n用户可以通过 `F6.registerEdge(typeName: string, edgeDefinition: object, extendedTypeName?: string)` 注册一个新的边类型，其中：\n\n- `typeName`：该新边类型名称；\n- `extendedTypeName`：被继承的边类型，可以是内置边类型名，也可以是其他自定义边的类型名。`extendedTypeName` 未指定时代表不继承其他类型的边；\n- `edgeDefinition`：该新边类型的定义，其中必要函数详见 [自定义机制 API](/zh/docs/api/registerItem#g6registeredgeedgename-options-extendededgename)。当有 `extendedTypeName` 时，没被复写的函数将会继承 `extendedTypeName` 的定义。\n\n**需要注意的是**，自定义边/节点时，若给定了 `extendedTypeName`，如 `draw`，`update`，`setState` 等必要的函数若不在 `edgeDefinition` 中进行复写，将会继承 `extendedTypeName` 中的相关定义。常见问题：\n\n- Q：边/节点更新时，没有按照在 `edgeDefinition` 中自定义实现的 `draw` 或 `drawShape` 逻辑更新。例如，有些图形没有被更新，增加了没有在 `draw` 或 `drawShape` 方法中定义的图形等。\n- A：由于继承了 `extendedTypeName`，且在 `edgeDefinition` 中没有复写 `update` 方法，导致边/节点更新时执行了 `extendedTypeName` 中的 `update` 方法，从而与自定义的 `draw` 或 `drawShape` 有出入。可以通过复写 `update` 方法为 `undefined` 解决。当 `update` 方法为 `undefined` 时，边/节点的更新将会执行 `draw` 或 `drawShape` 进行重绘。\n\n在本章中我们会通过四个案例，从简单到复杂讲解边的自定义：<br />1. 从无到有的定义边；<br />2. 扩展现有边；<br />3. 增加额外图形；<br />4. 边的交互样式；<br />5. 自定义带箭头的边。\n\n## 1. 从无到有定义边\n\n我们来实现垂直的折线：<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HxY-TJ2vJFMAAAAAAAAAAABkARQnAQ' alt='img' width='150'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Ijy4QpaB-fgAAAAAAAAAAABkARQnAQ' alt='img' width='150'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*gz09R5fM-HMAAAAAAAAAAABkARQnAQ' alt='img' width='150'/>\n\n> （左）直线边。（中）默认的折线边。（右）调整了节点的锚点（连入点）后的折线边。\n\n### 自定义边\n\n```javascript\nF6.registerEdge(\"hvh\", {\n  draw(cfg, group) {\n    const startPoint = cfg.startPoint;\n    const endPoint = cfg.endPoint;\n    const shape = group.addShape(\"path\", {\n      attrs: {\n        stroke: \"#333\",\n        path: [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y], // 三分之一处\n          [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y], // 三分之二处\n          [\"L\", endPoint.x, endPoint.y],\n        ],\n      },\n      // must be assigned in F6. it can be any value you want\n      name: \"path-shape\",\n    });\n    return shape;\n  },\n});\n```\n\n- 上面自定义边中的 `startPoint` 和 `endPoint` 分别是是边两端与起始节点和结束节点的交点；\n- 可以通过修改节点的锚点（边连入点）来改变 `startPoint` 和 `endPoint` 的位置。\n\n### 在数据中修改 anchorPoints\n\n通过以下的数据，使用自定义的 hvh 边，就可以实现上图最右边的效果。\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 200,\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 100,\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node3\",\n      x: 200,\n      y: 300,\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      id: \"edge1\",\n      target: \"node2\",\n      source: \"node1\",\n      type: \"hvh\",\n    },\n    {\n      id: \"edge2\",\n      target: \"node3\",\n      source: \"node1\",\n      type: \"hvh\",\n    },\n  ],\n};\n```\n\n## 2. 扩展现有边\n\n通过 `afterDraw` 接口给现有的曲线增加动画。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-l9lQ7Ck1QcAAAAAAAAAAABkARQnAQ' alt='img' width='250'/>\n\n```javascript\nF6.registerEdge(\n  \"line-growth\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      const length = shape.getTotalLength();\n      shape.animate(\n        (ratio) => {\n          const startLen = ratio * length;\n          const cfg = {\n            lineDash: [startLen, length - startLen],\n          };\n          return cfg;\n        },\n        {\n          repeat: true,\n          duration: 2000,\n        },\n      );\n    },\n  },\n  \"cubic\",\n);\n```\n\n<br />\n\n## 3. 增加额外图形\n\n通过实现 `afterDraw` 增加额外图形，为找到边的主要图形 `path` 上的某个点，可以使用 `shape.getPoint(ratio)` 获得。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aOlcQbx2ux4AAAAAAAAAAAAAARQnAQ' alt='img' width='250'/>\n\n```javascript\nF6.registerEdge(\n  \"mid-point-edge\",\n  {\n    afterDraw(cfg, group) {\n      // 获取图形组中的第一个图形，在这里就是边的路径图形\n      const shape = group.get(\"children\")[0];\n      // 获取路径图形的中点坐标\n      const midPoint = shape.getPoint(0.5);\n      // 在中点增加一个矩形，注意矩形的原点在其左上角\n      group.addShape(\"rect\", {\n        attrs: {\n          width: 10,\n          height: 10,\n          fill: \"#f00\",\n          // x 和 y 分别减去 width / 2 与 height / 2，使矩形中心在 midPoint 上\n          x: midPoint.x - 5,\n          y: midPoint.y - 5,\n        },\n      });\n    },\n    update: undefined,\n  },\n  \"cubic\",\n);\n```\n\n<br />\n\n## 4. 边的交互样式\n\n以点击选中边为示例，实现如下需求：\n\n- 点击边时边变粗，再点击变成细；\n- 单击变成红色，双击变成 `'#333'` 。\n\n效果如下图所示。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IWLxRZomOfMAAAAAAAAAAABkARQnAQ' alt='img' width='350'/>\n<br />\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️注意:</strong></span>\n\n边过细时点击很难被击中，可以设置  `lineAppendWidth`  来提升击中范围。\n\n```javascript\n// 基于 line 扩展出新的边\nF6.registerEdge(\n  \"custom-edge\",\n  {\n    // 响应状态变化\n    setState(name, value, item) {\n      const group = item.getContainer();\n      const shape = group.get(\"children\")[0]; // 顺序根据 draw 时确定\n      if (name === \"active\") {\n        if (value) {\n          shape.attr(\"stroke\", \"red\");\n        } else {\n          shape.attr(\"stroke\", \"#333\");\n        }\n      }\n      if (name === \"selected\") {\n        if (value) {\n          shape.attr(\"lineWidth\", 3);\n        } else {\n          shape.attr(\"lineWidth\", 2);\n        }\n      }\n    },\n  },\n  \"line\",\n);\n\n// 点击时选中，再点击时取消\ngraph.on(\"edge:tap\", (ev) => {\n  const edge = ev.item;\n  graph.setItemState(edge, \"selected\", !edge.hasState(\"selected\")); // 切换选中\n});\n\ngraph.on(\"edge:tap\", (ev) => {\n  const edge = ev.item;\n  graph.setItemState(edge, \"active\", true);\n});\n\ngraph.on(\"edge:dbltap\", (ev) => {\n  const edge = ev.item;\n  graph.setItemState(edge, \"active\", false);\n});\n```\n\n<br />\n\n## 5. 自定义箭头\n\nF6 为内置边、自定义边提供了[默认箭头和内置箭头](/zh/docs/manual/middle/elements/edges/arrow)。很多时候，F6 提供的箭头并不能满足业务上的需求，这个时候，就需要我们自定义箭头。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*f1G9RJ5dE2oAAAAAAAAAAABkARQnAQ' alt='img' width='250'/>\n\n> （左）F6 内置箭头。（右）自定义边带有自定义箭头。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> F6 3.4.1 后的自定义箭头坐标系有所变化。如下图所示，左图为 F6 3.4.1 之前版本的演示，右图为 F6 3.4.1 及之后版本的演示。箭头由指向 x 轴负方向更正为指向 x 轴正方向。同时，偏移量 `d` 的方向也发生响应变化。不变的是，自定义箭头本身坐标系的原点都与相应边 / path 的端点重合，且自定义箭头的斜率与相应边 / path 端点处的微分斜率相同。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*gN_NSqjLRo0AAAAAAAAAAABkARQnAQ' width=565 alt='img'/>\n\nF6 中有三种途径在边上配置自定义箭头：\n\n- 配置自定义箭头到边的全局配置中；\n- 在数据中为单条边配置；\n- 在自定义边中配置。\n\n### 方法 1: 全局配置\n\n```javascript\nconst graph = new Graph({\n  // ... 图的其他配置项\n  defaultEdge: {\n    style: {\n      endArrow: {\n        // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n        path: \"M 0,0 L 20,10 L 20,-10 Z\",\n        // 箭头的偏移量，负值代表向 x 轴正方向移动\n        // d: -10,\n        fill: \"#333\",\n        stroke: \"#666\",\n        opacity: 0.8,\n        // ...\n      },\n    },\n  },\n});\n```\n\n### 方法 2: 在数据中配置\n\n```javascript\nconst data = {\n  nodes: [\n    { id: \"node1\" },\n    { id: \"node2\" },\n    // ... 其他节点\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      style: {\n        endArrow: {\n          // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n          path: \"M 0,0 L 20,10 L 20,-10 Z\",\n          // 箭头的偏移量，负值代表向 x 轴正方向移动\n          // d: -10,\n          fill: \"#333\",\n          stroke: \"#666\",\n          opacity: 0.8,\n          // ...\n        },\n      },\n    },\n    //... 其他边\n  ],\n};\n```\n\n### 方法 3: 自定义边中配置\n\n```javascript\n// 使用方法二：自定义边，并带有自定义箭头\nF6.registerEdge(\"line-arrow\", {\n  draw(cfg, group) {\n    const { startPoint, endPoint } = cfg;\n    const keyShape = group.addShape(\"path\", {\n      attrs: {\n        path: [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", endPoint.x, endPoint.y],\n        ],\n        stroke: \"steelblue\",\n        lineWidth: 3,\n        startArrow: {\n          // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n          path: \"M 0,0 L 20,10 L 20,-10 Z\",\n          // 箭头的偏移量，负值代表向 x 轴正方向移动\n          // d: -10,\n          fill: \"#333\",\n          stroke: \"#666\",\n          opacity: 0.8,\n          // ...\n        },\n        endArrow: {\n          // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n          path: \"M 0,0 L 20,10 L 20,-10 Z\",\n          // 箭头的偏移量，负值代表向 x 轴正方向移动\n          // d: -10,\n          fill: \"#333\",\n          stroke: \"#666\",\n          opacity: 0.8,\n          // ...\n        },\n      },\n      // must be assigned in F6. it can be any value you want\n      name: \"path-shape\",\n    });\n    return keyShape;\n  },\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/edges/defaultEdge.zh.md",
    "content": "---\ntitle: 边总览\norder: 0\n---\n\nF6 提供了 9 种内置边：\n\n- line：直线，不支持控制点；\n- polyline：折线，支持多个控制点；\n- arc：圆弧线；\n- quadratic：二阶贝塞尔曲线；\n- cubic：三阶贝塞尔曲线；\n- cubic-vertical：垂直方向的三阶贝塞尔曲线，不考虑用户从外部传入的控制点；\n- cubic-horizontal：水平方向的三阶贝塞尔曲线，不考虑用户从外部传入的控制点；\n- loop：自环。\n\n这些内置边的默认样式分别如下图所示。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*H6Y5SrPstw4AAAAAAAAAAABkARQnAQ' width='750' height='120' alt='img'/>\n\n本文将概述 F6 中的各个内置边类型、内置边的通用属性、配置方法。各类型边详细配置项及配置方法见本目录下相应文档。\n\n## 内置边类型说明\n\n下面表格中显示了内置的各类边，同时对一些特殊的字段进行了说明：\n\n| 名称             | 描述                                                                                                                                                                                                                             |                                                                                                                        |\n| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| line             | 连接两个节点的直线：<br />- `controlPoints` 不生效<br />- 更多配置详见 line 边的配置<br />                                                                                                                                       | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-LM-RJnlI20AAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| polyline         | 多段线段构成的折线，连接两个端点：<br />- `controlPoints` 表示所有线段的拐点，不指定时根据 <a href='https://www.yuque.com/antv/blog/eyi70n' target='_blank'>A\\* 算法</a>自动生成折线<br />- 更多配置详见 polyline 边的配置<br /> | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*q2pIQ6h622IAAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| arc              | 连接两个节点的一段圆弧：<br />- `controlPoints` 不生效<br />- 使用 curveOffset 指定弧的弯曲程度，其正负影响弧弯曲的方向<br />- 更多配置详见 arc 边的配置<br />                                                                   | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SmS8QZjTlEkAAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| quadratic        | 只有一个控制点的曲线：<br />- `controlPoints` 不指定时，会默认线的一半处弯曲<br />- 更多配置详见 quadratic 边的配置<br />                                                                                                        | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IADsTq4eH50AAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| cubic            | 有两个控制点的曲线：<br />- `controlPoints` 不指定时，会默认线的 1/3, 2/3 处弯曲<br />- 更多配置详见 cubic 边的配置<br />                                                                                                        | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ldiCT7xnrM4AAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| cubic-vertical   | 垂直方向的三阶贝塞尔曲线，不考虑用户从外部传入的控制点                                                                                                                                                                           | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*WtNPRKSZv1kAAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| cubic-horizontal | 水平方向的三阶贝塞尔曲线，不考虑用户从外部传入的控制点                                                                                                                                                                           | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*iNiVRIsov4MAAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| loop             | 自环。更多配置详见 loop 边的配置                                                                                                                                                                                                 | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*sPBIR40KLOkAAAAAAAAAAABkARQnAQ' width=70 alt='img'/>  |\n\n## 边的通用属性\n\n所有内置的边支持的通用属性：\n\n| 名称         | 是否必须 | 类型   | 备注                                                                          |\n| ------------ | -------- | ------ | ----------------------------------------------------------------------------- | --------- |\n| id           | false    | String | 边唯一 ID，**必须**是唯一的 string                                            |\n| source       | true     | String | Number                                                                        | 起始点 id |\n| target       | true     | String | 结束点 id                                                                     |\n| type         | false    | String | 指定边的类型，可以是内置边的类型名称，也可以是自定义边的名称。默认为 `'line'` |\n| sourceAnchor | false    | Number | 边的起始节点上的锚点的索引值                                                  |\n| targetAnchor | false    | Number | 边的终止节点上的锚点的索引值                                                  |\n| style        | false    | Object | 边的样式属性                                                                  |\n| label        | false    | String | 文本文字，如果没有则不会显示                                                  |\n| labelCfg     | false    | Object | 文本配置项                                                                    |\n\n### 样式属性  style\n\nObject 类型。通过 `style` 配置来修改边的颜色、线宽等属性。下表是 `style` 对象中常用的配置项：\n\n| 名称            | 是否必须 | 类型             | 备注                                                                                                                                                                                                                                                                                                                                                                                               |\n| --------------- | -------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| stroke          | false    | String           | 边的颜色                                                                                                                                                                                                                                                                                                                                                                                           |\n| lineWidth       | false    | Number           | 边宽度                                                                                                                                                                                                                                                                                                                                                                                             |\n| lineAppendWidth | false    | Number           | 边响应事件时的检测宽度，当 `lineWidth` 太小而不易选中时，可以通过该参数提升击中范围                                                                                                                                                                                                                                                                                                                |\n| endArrow        | false    | Boolean / Object | 为 `true` 时在边的结束端绘制默认箭头，为 `false` 时不绘制结束端箭头；也可以使用[内置箭头配置]()，例如：<br />endArrow: {<br /> path: F6.Arrow.vee(10, 20, 10), // 内置箭头，参数为箭头宽度、长度、偏移量 d（默认为 0）<br /> d: 10 // 偏移量<br />} ；或通过 path 自定义的箭头，例如：<br />endArrow: {<br /> path: 'M 0,0 L 20,10 L 20,-10 Z', // 自定义箭头路径<br /> d: -2 // 偏移量<br />}     |\n| startArrow      | false    | Boolean / Object | 为 `true` 时在边的开始端绘制默认箭头，为 `false` 时不绘制结束端箭头；也可以使用[内置箭头配置]()，例如：<br />startArrow: {<br /> path: F6.Arrow.vee(10, 20, 10), // 内置箭头，参数为箭头宽度、长度、偏移量 d（默认为 0）<br /> d: 10 // 偏移量<br />} ；或通过 path 自定义的箭头，例如：<br />startArrow: {<br /> path: 'M 0,0 L 20,10 L 20,-10 Z', // 自定义箭头路径<br /> d: -2 // 偏移量<br />} |\n| strokeOpacity   | false    | Number           | 边透明度                                                                                                                                                                                                                                                                                                                                                                                           |\n| shadowColor     | false    | String           | 阴影颜色                                                                                                                                                                                                                                                                                                                                                                                           |\n| shadowBlur      | false    | Number           | 阴影模糊程度                                                                                                                                                                                                                                                                                                                                                                                       |\n| shadowOffsetX   | false    | Number           | 阴影 x 方向偏移量                                                                                                                                                                                                                                                                                                                                                                                  |\n| shadowOffsetY   | false    | Number           | 阴影 y 方向偏移量                                                                                                                                                                                                                                                                                                                                                                                  |\n| lineDash        | false    | Array            | 设置线的虚线样式，可以指定一个数组。一组描述交替绘制线段和间距（坐标空间单位）长度的数字。 如果数组元素的数量是奇数， 数组的元素会被复制并重复。例如， [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。                                                                                                                                                                                                 |\n\n下面代码演示在实例化图时全局配置方法中配置 `style`：\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // ... 其他属性\n    style: {\n      stroke: '#eaff8f',\n      lineWidth: 5,\n      // ... 其他样式属性\n    },\n  },\n});\n```\n\n### 标签文本 label 及其配置  labelCfg\n\n`label` String 类型。标签文本的文字内容。<br />`labelCfg` Object 类型。配置标签文本。下面是 `labelCfg` 对象中的常用配置项：\n\n| 名称       | 是否必须 | 类型    | 备注                                                                                     |\n| ---------- | -------- | ------- | ---------------------------------------------------------------------------------------- |\n| refX       | false    | Number  | 标签在 x 方向的偏移量                                                                    |\n| refY       | false    | Number  | 标签在 y 方向的偏移量                                                                    |\n| position   | false    | String  | 文本相对于边的位置，目前支持的位置有：`'start'`，`'middle'`，`'end'`。默认为`'middle'`。 |\n| autoRotate | false    | Boolean | 标签文字是否跟随边旋转，默认 `false`                                                     |\n| style      | false    | Object  | 标签的样式属性                                                                           |\n\n上表中的标签的样式属性 `style` 的常用配置项如下：\n\n| 名称                                                                                                  | 是否必须 | 类型   | 备注         |\n| ----------------------------------------------------------------------------------------------------- | -------- | ------ | ------------ |\n| fill                                                                                                  | false    | String | 文本颜色     |\n| stroke                                                                                                | false    | String | 文本描边颜色 |\n| lineWidth                                                                                             | false    | Number | 文本描边粗细 |\n| opacity                                                                                               | false    | Number | 文本透明度   |\n| fontFamily                                                                                            | false    | String | 文本字体     |\n| fontSize                                                                                              | false    | Number | 文本字体大小 |\n| ... 节点标签与边标签样式属性相同，统一整理在 [Text 图形 API](/zh/docs/api/shapeProperties/#文本-text) |          |        |              |\n\n下面代码演示在实例化图时全局配置方法中配置  `label` 和  `labelCfg`。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    // ... 其他属性\n    label: 'edge-label',\n    labelCfg: {\n      refY: -10,\n      refX: 60,\n    },\n  },\n});\n```\n\n## 边的配置方法\n\n配置边的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.edge(edgeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置\n\n即有相同的配置项时，优先级高的方式将会覆盖优先级低的。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`source`、`target`、`label` 应当配置到每条边数据中外，其余的 [边的通用属性](#边的通用属性) 以及各个边类型的特有属性（见内置边类型）均支持三种配置方式。\n\n### 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultEdge`  配置边，这里的配置是全局的配置，将会在所有边上生效。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultEdge: {\n    type: 'line',\n    // ... 其他配置\n  },\n});\n```\n\n### 在数据中动态配置\n\n如果需要使不同边有不同的配置，可以将配置写入到边数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n    ... // 节点\n  ],\n  edges: [{\n    source: 'node0',\n    target: 'node1'\n    type: 'polyline',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },{\n    source: 'node1',\n    target: 'node2'\n    type: 'cubic',\n    ... // 其他配置\n    style: {\n      ...  // 样式属性，每种边的详细样式属性参见各边文档\n    }\n  },\n    ... // 其他边\n  ]\n}\n```\n\n### 使用 graph.edge()\n\n该方法可以为不同边进行不同的配置。<br />提示：\n\n- 该方法必须**在 render 之前调用**，否则不起作用；\n- 由于该方法优先级最高，将覆盖其他地方对边的配置，这可能将造成一些其他配置不生效的疑惑；\n- 该方法在增加元素、更新元素时会被调用，如果数据量大、每条边上需要更新的内容多时，可能会有性能问题。\n\n```javascript\n// const data = ...\n// const graph = ...\ngraph.edge((edge) => {\n  return {\n    id: edge.id,\n    type: \"polyline\",\n    style: {\n      fill: \"steelblue\",\n    },\n  };\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n## 实例演示\n\n```javascript\nconst data = {\n  nodes: [\n    { id: '1', x: 50, y: 50, size: 20 },\n    { id: '2', x: 150, y: 50, size: 20 },\n    { id: '3', x: 200, y: 50, size: 20 },\n    { id: '4', x: 300, y: 130, size: 20 },\n    { id: '5', x: 350, y: 50, size: 20 },\n    { id: '6', x: 450, y: 50, size: 20 },\n    { id: '7', x: 500, y: 50, size: 20 },\n    { id: '8', x: 600, y: 50, size: 20 },\n    { id: '9', x: 650, y: 50, size: 20 },\n    { id: '10', x: 750, y: 50, size: 20 },\n    { id: '11', x: 800, y: 50, size: 20 },\n    { id: '12', x: 900, y: 150, size: 20 },\n    { id: '13', x: 950, y: 50, size: 20 },\n    { id: '14', x: 1050, y: 150, size: 20 },\n    { id: '15', x: 1100, y: 50, size: 20 },\n  ],\n  edges: [\n    { source: '1', target: '2', type: 'line', label: 'line' },\n    { source: '3', target: '4', type: 'polyline', label: 'polyline' },\n    { source: '5', target: '6', type: 'arc', label: 'arc' },\n    { source: '7', target: '8', type: 'quadratic', label: 'quadratic' },\n    { source: '9', target: '10', type: 'cubic', label: 'cubic' },\n    { source: '11', target: '12', type: 'cubic-vertical', label: 'cubic-vertical' },\n    { source: '13', target: '14', type: 'cubic-horizontal', label: 'cubic-horizontal' },\n    { source: '15', target: '15', type: 'loop', label: 'loop' },\n  ],\n};\n\nconst graph = new F6.Graph({\n  ...\n  width: 1500,\n  height: 300,\n  linkCenter: true, // 使边连入节点的中心\n});\ngraph.data(data);\ngraph.render();\n```\n\n显示结果：<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*LcCzSqTqifwAAAAAAAAAAABkARQnAQ' width='750' height='120' alt='img'/>\n\n### 调整边的样式\n\n可以在边上添加文本，修改边的样式。下面演示将配置写入数据的方式配置边。使用下面代码替换上面代码中的 9-10、11-12 两条边数据，修改这两条边的样式和其文本。\n\n```javascript\n// 使 9-10 的 cubic 边文本下移 15 像素\n{\n  source: '9',\n  target: '10',\n  type: 'cubic',\n  label: 'cubic',\n  labelCfg: {\n    refY: -15 // refY 默认是顺时针方向向下，所以需要设置负值\n  }\n},\n// 设置 11-12 的 cubic-vertical 边的颜色、虚线、粗细，并设置文本样式、随边旋转\n{\n  source: '11',\n  target: '12',\n  type: 'cubic-vertical',\n  color: '#722ed1',     // 边颜色\n  size: 5,              // 边粗细\n  style: {\n  \tlineDash: [2, 2]    // 虚线边\n  },\n  label: 'cubic-vertical',\n  labelCfg: {\n  \tposition: 'center', // 其实默认就是 center，这里写出来便于理解\n    autoRotate: true,   // 使文本随边旋转\n    style: {\n      stroke: 'white',  // 给文本添加白边和白色背景\n    \tlineWidth: 5,     // 文本白边粗细\n      fill: '#722ed1',  // 文本颜色\n    }\n  }\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GxR3RaD4kH8AAAAAAAAAAABkARQnAQ' width='750' height='120' alt='img'/>\n\n## 相关阅读\n\n- [状态 State](/zh/docs/manual/middle/states/state) —— 交互过程中的样式变化。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/methods/edgeVisible.zh.md",
    "content": "---\ntitle: 显示与隐藏\norder: 5\n---\n\n## 元素的显示/隐藏\n\n使用下面六个函数可以实现节点、边、Combo 的显示/隐藏：\n\n```javascript\n// 显示节点实例 nodeItem，该节点的 visible 属性值在该方法调用后被置为 true\nnodeItem.show();\n\n// 隐藏节点实例 nodeItem，该节点的 visible 属性值在该方法调用后被置为 false\nnodeItem.hide();\n\n// 显示边实例 edgeItem，该边的 visible 属性值在该方法调用后被置为 true\nedgeItem.show();\n\n// 隐藏边实例 edgeItem，该边的 visible 属性值在该方法调用后被置为 false\nedgeItem.hide();\n\n// 显示边实例 comboItem，该 Combo 的 visible 属性值在该方法调用后被置为 true\ncomboItem.show();\n\n// 隐藏边实例 comboItem，该 Combo 的 visible 属性值在该方法调用后被置为 false\ncomboItem.hide();\n```\n\n## 示例\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*N96mRKpyYZIAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n该示例摘取了元素显示/隐藏的相关操作部分，通过监听对节点、边、画布的点击事件，显示和隐藏元素：\n\n```javascript\n// 点击节点，隐藏该节点\ngraph.on(\"node:tap\", (ev) => {\n  const node = ev.item;\n  console.log(\"before hide(), the nodevisible = \", node.get(\"visible\"));\n  node.hide();\n  graph.paint();\n  console.log(\"after hide(), the node visible = \", node.get(\"visible\"));\n});\n\n// 点击边，隐藏该边\ngraph.on(\"edge:tap\", (ev) => {\n  const edge = ev.item;\n  console.log(\"before hide(), the edge visible = \", edge.get(\"visible\"));\n  edge.hide();\n  graph.paint();\n  console.log(\"after hide(), the edge visible = \", edge.get(\"visible\"));\n});\n\n// 点击画布，显示所有节点和边\ngraph.on(\"canvas:tap\", (ev) => {\n  const nodes = graph.getNodes();\n  const edges = graph.getEdges();\n  nodes.forEach((node) => {\n    node.show();\n  });\n  edges.forEach((edge) => {\n    edge.show();\n  });\n  graph.paint();\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/methods/elementIndex.zh.md",
    "content": "---\ntitle: 节点与边的层级\norder: 4\n---\n\n节点与边在视觉上的层级涉及到了它们相对应的 [图形分组 Group](/zh/docs/manual/middle/elements/shape/graphics-group)。本文提到的所有分组 Group 都为 F6 的图形分组 Group，而非 F6 的  [节点分组 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo)，其区别在 [图形分组 Group](/zh/docs/manual/middle/elements/shape/graphics-group)  中说明。\n\n在 [图形分组 Group](/zh/docs/manual/middle/elements/shape/graphics-group) 中我们提到：在 F6 中，Graph 的一个实例中的所有节点属于同一个变量名为 `nodeGroup` 的 group，所有的边属于同一个变量名为 `edgeGroup` 的 group。节点 group 在视觉上的层级（zIndex）高于边 group，即所有节点会绘制在所有边的上层。\n\n但有时，我们需要让边在视觉上在节点上层。例如，高亮节点及其相关边和邻居、高亮一条边等。可以通过配合图实例的配置项  `groupByTypes` 以及节点和边的 `toFront()` 与 `toBack()` 函数实现。为实现如下效果：进入节点时，提升相关边以及邻居节点的层级；离开节点时恢复；点击边时，提升边及其两端点的层级；双击边时恢复。<a href='https://codepen.io/Yanyan-Wang/pen/GRRNzGN' target='_blank'>Demo 完整代码</a>。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*uWGAR5-w-TcAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n要实现上图效果，需要以下步骤：\n\n- Step 1：实例化图时配置 `groupByTypes` 为 `false`；\n- Step 2：将节点放置在边上层；\n- Step 3：监听事件并改变目标元素层级。\n\n## 前提代码\n\n下面代码完成了引入 F6、数据设置、实例化图、渲染图的命令等。后文将修改下面这份代码中以达到上图高亮效果。\n\n```javascript\n// 数据源\nconst data = {\n  nodes: [\n    {\n      id: 'node0',\n      x: 100,\n      y: 100,\n      size: 20,\n    },\n    {\n      id: 'node1',\n      x: 200,\n      y: 200,\n      size: 20,\n    },\n    {\n      id: 'node2',\n      x: 150,\n      y: 150,\n      size: 20,\n    },\n    {\n      id: 'node3',\n      x: 150,\n      y: 250,\n      size: 20,\n    },\n    {\n      id: 'node4',\n      x: 150,\n      y: 200,\n      size: 20,\n    },\n  ],\n  edges: [\n    {\n      id: 'edge0',\n      source: 'node0',\n      target: 'node1',\n    },\n    {\n      id: 'edge1',\n      source: 'node2',\n      target: 'node3',\n    },\n  ],\n};\n\n// 实例化图\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  // 为方便演示，加粗边\n  defaultEdge: {\n    style: {\n      lineWidth: 2,\n    },\n  },\n});\n\n// 读取数据\ngraph.data(data);\n// 渲染图\ngraph.render();\n```\n\n## Step 1 实例化图时的配置\n\n`groupByTypes` 是图的一个配置项，当其为默认值 `true` 时，所有节点在一个名为 `nodeGroup` 的分组，所有边在另一个名为 `edgeGroup` 的分组，且 `nodeGroup` 在 `edgeGroup` 上层。将其设置为 `false` 后，将不存在 `nodeGroup` 和 `edgeGroup`，所有节点和边在同一个分组，它们的层级根据生成的顺序决定。\n\n### 参数描述\n\n| 名称         | 类型    | 默认值 | 描述                                                                                                                                                                  |\n| ------------ | ------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| groupByTypes | Boolean | true   | 各种元素是否在一个分组内，决定节点和边的层级问题，默认情况下所有的节点在一个分组中，所有的边在一个分组中，当这个参数为 `false` 时，节点和边的层级根据生成的顺序确定。 |\n\n### 使用方式\n\n更改 前提代码 中实例化图部分代码，添加 `groupByTypes` 配置项，并设置为 `false`：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...  // 其他配置\n  groupByTypes: false,\n});\n```\n\n此时，将会得到如下效果：<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cbiwTZ5dwP0AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## Step 2 将节点放置在边上层\n\n上一步结果中节点在边的下层不符合常规，是由于 `groupByTypes` 为 `false` 时，节点和边的层级根据生成的顺序确定，而边的生成顺序在节点之后，因此所有边被绘制到了节点上方。为了使图符合常规——节点在上层，边在下层，可以在 `graph.render()` 之后将所有的节点通过 `toFront()` 函数提前。\n\n### 函数描述\n\n```javascript\n// 将节点实例 nodeItem 提前到其父级 group 的最前面\nnodeItem.toFront();\n// 将节点实例 nodeItem 放置到其父级 group 的最后面\nnodeItem.toBack();\n// 将边实例 edgeItem 提前到其父级 group 的最前面\nedgeItem.toFront();\n// 将边实例 edgeItem 放置到其父级 group 的最后面\nedgeItem.toBack();\n```\n\n### 使用方法\n\n```javascript\n// const graph = ...\ngraph.data(data);\ngraph.render();\n// 获取图上的所有节点实例\nconst nodes = graph.getNodes();\n// 遍历节点实例，将所有节点提前。\nnodes.forEach((node) => {\n  node.toFront();\n});\n// 更改层级后需要重新绘制图\ngraph.paint();\n```\n\n<br />这样，所有节点被绘制在边上层：<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*8TnuS7pkUfwAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## Step 3 监听事件并改变目标元素层级\n\n在效果图中，点击节点，相关边和节点的层级被提升到最上层，双击节点恢复。边同理。这一步将实现这一交互效果。\n\n### 函数描述\n\n```javascript\ngraph.on(\"node:tap\", (ev) => {\n  // ...\n});\n\ngraph.on(\"node:dbltap\", (ev) => {\n  // ...\n});\n```\n\n### 使用方法\n\n```javascript\ngraph.on(\"edge:tap\", (ev) => {\n  const edge = ev.item;\n  // 该边的起始点\n  const source = edge.getSource();\n  // 该边的结束点\n  const target = edge.getTarget();\n  // 先将边提前，再将端点提前。这样该边两个端点还是在该边上层，较符合常规。\n  edge.toFront();\n  source.toFront();\n  target.toFront();\n  // 注意：必须调用以根据新的层级顺序重绘\n  graph.paint();\n});\n\ngraph.on(\"edge:dbltap\", (ev) => {\n  // 获得图上所有边实例\n  const edges = graph.getEdges();\n  // 遍历边，将所有边的层级放置在后方，以恢复原样\n  edges.forEach((edge) => {\n    edge.toBack();\n  });\n  // 注意：必须调用以根据新的层级顺序重绘\n  graph.paint();\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/methods/lock-node.zh.md",
    "content": "---\ntitle: 锁定/解锁节点\norder: 11\n---\n\n`lock()`、`unlock()` 和 `hasLocked()` 三个 API，方便用户锁定某个节点。默认情况下，当锁定某个节点后，拖动节点时锁定的节点不会有任何反应，但拖动画布和缩放画布时，仍然会对锁定的节点有影响，如果不想让锁定的节点收到拖动画布和缩放画布的影响，可以通过[自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior) 的方式来实现。\n\n## 拖动画布时候不处理锁定的节点\n\nF6 内置的 `drag-canvas` 不区分节点是否锁定，全部一视同仁。绝大数情况下，这种行为是完全没问题的，但某些业务可能会要求锁定的节点，拖动画布时也不能移动，对于这种情况，可以通过重新定义拖动画布的 Behavior 来实现。\n\n```javascript\nimport F6 from \"@antv/g6\";\nconst Util = F6.Util;\nconst abs = Math.abs;\nconst DRAG_OFFSET = 10;\nconst body = document.body;\nconst ALLOW_EVENTS = [16, 17, 18];\n\nF6.registerBehavior(\"drag-canvas-exclude-lockedNode\", {\n  getDefaultCfg() {\n    return {\n      direction: \"both\",\n    };\n  },\n  getEvents() {\n    return {\n      \"canvas:mousedown\": \"onMouseDown\",\n      \"canvas:mousemove\": \"onMouseMove\",\n      \"canvas:mouseup\": \"onTap\",\n      \"canvas:tap\": \"onTap\",\n      \"canvas:mouseleave\": \"onOutOfRange\",\n      keyup: \"onKeyUp\",\n      keydown: \"onKeyDown\",\n    };\n  },\n  updateViewport(e) {\n    const origin = this.origin;\n    const clientX = +e.clientX;\n    const clientY = +e.clientY;\n    if (isNaN(clientX) || isNaN(clientY)) {\n      return;\n    }\n    let dx = clientX - origin.x;\n    let dy = clientY - origin.y;\n    if (this.get(\"direction\") === \"x\") {\n      dy = 0;\n    } else if (this.get(\"direction\") === \"y\") {\n      dx = 0;\n    }\n    this.origin = {\n      x: clientX,\n      y: clientY,\n    };\n    // 和内置 drag-canvas 不同的地方是在这里\n    const lockedNodes = this.graph.findAll(\"node\", (node) => !node.hasLocked());\n    lockedNodes.forEach((node) => {\n      node.get(\"group\").translate(dx, dy);\n    });\n    this.graph.paint();\n  },\n  onMouseDown(e) {\n    if (this.keydown) {\n      return;\n    }\n\n    this.origin = { x: e.clientX, y: e.clientY };\n    this.dragging = false;\n  },\n  onMouseMove(e) {\n    if (this.keydown) {\n      return;\n    }\n\n    e = Util.cloneEvent(e);\n    const graph = this.graph;\n    if (!this.origin) {\n      return;\n    }\n    if (this.origin && !this.dragging) {\n      if (\n        abs(this.origin.x - e.clientX) + abs(this.origin.y - e.clientY) <\n        DRAG_OFFSET\n      ) {\n        return;\n      }\n      if (this.shouldBegin.call(this, e)) {\n        e.type = \"dragstart\";\n        graph.emit(\"canvas:dragstart\", e);\n        this.dragging = true;\n      }\n    }\n    if (this.dragging) {\n      e.type = \"drag\";\n      graph.emit(\"canvas:drag\", e);\n    }\n    if (this.shouldUpdate.call(this, e)) {\n      this.updateViewport(e);\n    }\n  },\n  onTap(e) {\n    if (this.keydown) {\n      return;\n    }\n\n    if (!this.dragging) {\n      this.origin = null;\n      return;\n    }\n    e = Util.cloneEvent(e);\n    const graph = this.graph;\n    if (this.shouldEnd.call(this, e)) {\n      this.updateViewport(e);\n    }\n    e.type = \"dragend\";\n    graph.emit(\"canvas:dragend\", e);\n    this.endDrag();\n  },\n  endDrag() {\n    if (this.dragging) {\n      this.origin = null;\n      this.dragging = false;\n      // 终止时需要判断此时是否在监听画布外的 mouseup 事件，若有则解绑\n      const fn = this.fn;\n      if (fn) {\n        body.removeEventListener(\"mouseup\", fn, false);\n        this.fn = null;\n      }\n    }\n  },\n  onOutOfRange(e) {\n    if (this.dragging) {\n      const self = this;\n      const canvasElement = self.graph.get(\"canvas\").get(\"el\");\n      const fn = (ev) => {\n        if (ev.target !== canvasElement) {\n          self.onTap(e);\n        }\n      };\n      this.fn = fn;\n      body.addEventListener(\"mouseup\", fn, false);\n    }\n  },\n  onKeyDown(e) {\n    const code = e.keyCode || e.which;\n    if (!code) {\n      return;\n    }\n    if (ALLOW_EVENTS.indexOf(code) > -1) {\n      this.keydown = true;\n    } else {\n      this.keydown = false;\n    }\n  },\n  onKeyUp() {\n    this.keydown = false;\n  },\n});\n```\n\n## 缩放画布时不处理锁定的节点\n\n默认情况下，F6 内置的 `zoom-canvas` 在缩放画布时候也会对锁定的节点缩放，如果缩放过程中不需要操作锁定的节点，则可以通过下面的方式来实现。\n\n```javascript\nconst DELTA = 0.05;\n\nF6.registerBehavior(\"zoom-canvas-exclude-lockedNode\", {\n  getDefaultCfg() {\n    return {\n      sensitivity: 2,\n      minZoom: 0.1,\n      maxZoom: 10,\n    };\n  },\n  getEvents() {\n    return {\n      wheel: \"onWheel\",\n    };\n  },\n  onWheel(e) {\n    e.preventDefault();\n    if (!this.shouldUpdate.call(this, e)) {\n      return;\n    }\n    const graph = this.graph;\n    const canvas = graph.get(\"canvas\");\n    const point = canvas.getPointByClient(e.clientX, e.clientY);\n    const sensitivity = this.get(\"sensitivity\");\n    let ratio = graph.getZoom();\n    // 兼容 IE、Firefox 及 Chrome\n    if (e.wheelDelta < 0) {\n      ratio = 1 - DELTA * sensitivity;\n    } else {\n      ratio = 1 + DELTA * sensitivity;\n    }\n    const zoom = ratio * graph.getZoom();\n    if (zoom > this.get(\"maxZoom\") || zoom < this.get(\"minZoom\")) {\n      return;\n    }\n    graph.zoom(ratio, { x: point.x, y: point.y });\n    const lockedNodes = this.graph.findAll(\"node\", (node) => !node.hasLocked());\n    lockedNodes.forEach((node) => {\n      const matrix = Util.clone(node.get(\"group\").getMatrix());\n      const center = node.getModel();\n      matrix = Util.transform(matrix, [\n        [\"t\", -center.x, -center.y],\n        [\"s\", ratio, ratio],\n        [\"t\", center.x, center.y],\n      ]);\n      node.get(\"group\").setMatrix(matrix);\n    });\n    graph.paint();\n    graph.emit(\"wheelzoom\", e);\n  },\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/methods/multi-line.zh.md",
    "content": "---\ntitle: 两节点间存在多条边\norder: 8\n---\n\n## 问题\n\n有如下的一份数据，如何使用 <a href='https://github.com/antvis/g6' target=''>F6</a> 让两个节点之间显示多条边？\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 150,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 150,\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node1\",\n    },\n  ],\n};\n```\n\n由于默认的边形状是直线，使用直线绘制同样两个端点之间的多条边时，会出现重叠的情况。因此我们使用以下代码将边绘制为二阶贝塞尔曲线 `'quadratic'`。\n\n```javascript\nconst graph = new F6.Graph({\n  container: GRAPH_CONTAINER,\n  width: 500,\n  height: 500,\n  defaultNode: {\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    labelCfg: {\n      style: {\n        fontSize: 12,\n      },\n    },\n  },\n  defaultEdge: {\n    type: \"quadratic\", // 指定边的形状为二阶贝塞尔曲线\n    style: {\n      stroke: \"#e2e2e2\",\n    },\n  },\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n结果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9u0BTpCAn-4AAAAAAAAAAABkARQnAQ' width=345 alt='img'/>\n\n如果两个节点之间需要显示 3 条、4 条甚至更多条边，该怎么做呢？\n\n我们把数据改成下面这样试试：\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 150,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 150,\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node1\",\n    },\n  ],\n};\n```\n\n结果发现并不对。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9u0BTpCAn-4AAAAAAAAAAABkARQnAQ' width=345 alt='img'/>\n\n## 解决方案\n\n这个时候，需要借助 F6 的 [自定义边](/zh/docs/manual/middle/elements/edges/custom-edge) 功能。\n\n有了这个黑科技，什么样的需求，那还不是分分钟的事。\n\n在使用「自定义边」前，需要明确两件事：\n\n- **需要有个标识来区分两个节点之间是否超过一条同方向边**；\n- **需要有一个值控制边的弯曲度，以防边重叠**。\n\n因此，我们在每条边的数据中添加一个 `edgeType` 属性以区分不同的边。有了这个约定以后，就可以开始动手撸码了。\n\n完善的自定义边的代码如下。\n\n<iframe\n     src=\"https://codesandbox.io/embed/restless-breeze-fhief?fontsize=14&hidenavigation=1&theme=dark\"\n     style=\"width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;\"\n     title=\"restless-breeze-fhief\"\n     allow=\"geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb\"\n     sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"\n   ></iframe>\n\n至此，我们实现了让两个节点之间展示多条边的功能。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/methods/updateElement.zh.md",
    "content": "---\ntitle: 更新节点或边的样式\norder: 1\n---\n\nF6 提供了三种修改节点样式的方法。\n\n#### 实例化 Graph\n\n实例化 Graph 时，可以通过在 `defaultNode` 或 `defaultEdge` 中指定  `style` 分别配置全局节点和全局边的样式属性。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 1000,\n  height: 800,\n  defaultNode: {\n    type: 'circle',\n    style: {\n      fill: '#fff',\n      fontSize: 14,\n    },\n  },\n  defaultEdge: {\n    type: 'line-with-arrow',\n    style: {\n      fill: '#fff',\n      fontSize: 14,\n    },\n  },\n});\n```\n\n#### 数据中指定 style\n\n这种方式可以在数据中为不同的节点和边指定不同的样式。\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      style: {\n        fill: \"#fff\",\n        fontSize: 12,\n      },\n    },\n  ],\n};\n```\n\n#### 使用 update / updateItem\n\n使用 `update` / `updateItem` 更新节点或边。此方法用于动态更新节点或边的 [keyShape](/zh/docs/manual/middle/elements/shape/shape-keyshape)。\n\n```javascript\ngraph.updateItem(node, {\n  // 节点的样式\n  style: {\n    stroke: \"blue\",\n  },\n});\n```\n\n想要知道节点都支持哪些属性样式，请参考 [节点样式属性](/zh/docs/manual/middle/elements/nodes/defaultNode/#样式属性-style)。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/anchorpoint.zh.md",
    "content": "---\ntitle: 节点的连接点 anchorPoint\norder: 3\n---\n\n节点的连接点 anchorPoint 指的是边连入节点的相对位置，即节点与其相关边的交点位置。anchorPoints 是一个二维数组，每一项表示一个连接点的位置，在一个[图形 Shape](/zh/docs/manual/middle/elements/shape/shape-keyshape) 中，连接点的位置如下图所示，x 和 y 方向上范围都是 [0, 1]：<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EJTyR4j9VN4AAAAAAAAAAABkARQnAQ' width='600' height='300' alt='img'/>\n\n节点中有了 anchorPoints 之后，相关边可以分别选择连入起始点、结束点的哪一个 anchorPoint。当需要在节点之间连多条线时，这种机制能够使边的连入更美观。\n\n边可以通过指定 `sourceAnchor` 和 `targetAnchor`  分别选择起始点、结束点的 anchorPoint。`sourceAnchor` 和 `targetAnchor` 取的值是相对应节点上 anchorPoints 数组的索引值。\n\n下面数据演示了如何在节点上配置连接点、在边上指定连接点：\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      x: 100,\n      y: 200,\n      // 该节点可选的连接点集合，该点有两个可选的连接点\n      anchorPoints: [\n        [0, 1],\n        [0.5, 1],\n      ],\n      type: \"rect\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n      x: 300,\n      y: 400,\n      // 该节点可选的连接点集合，该点有两个可选的连接点\n      anchorPoints: [\n        [0.5, 0],\n        [1, 0.5],\n      ],\n      type: \"rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      // 该边连入 source 点的第 0 个 anchorPoint，\n      sourceAnchor: 0,\n      // 该边连入 target 点的第 0 个 anchorPoint，\n      targetAnchor: 0,\n      style: {\n        endArrow: true,\n      },\n    },\n    {\n      source: \"node2\",\n      target: \"node1\",\n      // 该边连入 source 点的第 1 个 anchorPoint，\n      sourceAnchor: 1,\n      // 该边连入 source 点的第 1 个 anchorPoint，\n      targetAnchor: 1,\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/circle.zh.md",
    "content": "---\ntitle: Circle\norder: 1\n---\n\nF6 内置了圆  Circle 节点，其默认样式如下。标签文本位于圆形中央。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wBnPTKsCY5YAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'circle'`，即可使用 `circle` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'circle', // 节点类型\n    // ... 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n  {\n\t  id: 'node0',\n    type: 'circle', // 节点类型\n    ... // 其他配置\n  },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\ncircle 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：<br />\n\n| 名称        | 含义                 | 类型           | 备注                                                                                                                                |\n| ----------- | -------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| size        | 圆的直径             | Number / Array | `size` 为数组时，取第一个值                                                                                                         |\n| style       | circle 默认样式      | Object         | Canvas 支持的属性                                                                                                                   |\n| label       | 标签文本内容         | String         |                                                                                                                                     |\n| labelCfg    | 标签文本配置项       | Object         |                                                                                                                                     |\n| stateStyles | 各状态下的样式       | Object         | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints  | **视觉上的**四个锚点 | Object         | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| icon        | 圆上 icon 配置       | Object         | 默认不显示 icon                                                                                                                     |\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*PKulQaVnv9IAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'circle',\n      label: 'circle',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'circle',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zPiMQ5vO3e4AAAAAAAAAAABkARQnAQ' width=50 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      position: \"bottom\",\n      offset: 10,\n      style: {\n        // ... 文本样式的配置\n      },\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。可以指定节点周围「上、下、左、右」四个方向上的四个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| bottom    | 是否显示底部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的描边颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点描边的宽度     | Number  | 默认为 `1`         |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rOdpQZOdQcgAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 其他属性\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      fill: \"#fff\",\n      size: 5,\n    },\n  },\n});\n// ...\n```\n\n### 图标  icon\n\nObject 类型。通过配置 `icon`，可以在节点上显示小图标。\n\n| 名称   | 含义                 | 类型    | 备注                                |\n| ------ | -------------------- | ------- | ----------------------------------- |\n| show   | 是否显示 icon        | Boolean | 默认为 `false`，不显示              |\n| width  | icon 的宽度          | Number  | 默认为 `16`                         |\n| height | icon 的高度          | Number  | 默认为 `16`                         |\n| img    | icon 的地址或 base64 | String  | 若配置则表示使用图片作为 icon       |\n| text   | icon 的 iconfont     | String  | 若配置则表示使用 iconfont 作为 icon |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了 `icon`  配置项进行图标的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YSgMTI4UUkkAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 其他属性\n    icon: {\n      show: true,\n      // img: '...', 可更换为其他图片地址\n      // text: '...', 使用 iconfont\n      width: 25,\n      height: 25,\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/diamond.zh.md",
    "content": "---\ntitle: Diamond\norder: 4\n---\n\n## Diamond\n\nF6 内置了菱形  Diamond  节点，其默认样式如下。标签文本位于菱形中央。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*xS0cQKTywjkAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'diamond'`，即可使用 `diamond` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'diamond',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n\t  id: 'node0',\n    type: 'diamond',\n    ... // 其他配置\n    },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\nDiamond 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称        | 含义                 | 类型           | 备注                                                                                                                                |\n| ----------- | -------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| size        | 菱形的宽高           | Number / Array | size 为一个数值时，宽高相同                                                                                                         |\n| style       | diamond 默认样式     | Object         | Canvas 支持的属性                                                                                                                   |\n| label       | 标签文本内容         | String         |                                                                                                                                     |\n| labelCfg    | 标签文本配置项       | Object         |                                                                                                                                     |\n| stateStyles | 各状态下的样式       | Object         | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints  | **视觉上的**四个锚点 | Object         | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| icon        | 菱形上 icon 配置     | Object         | 默认不显示 icon                                                                                                                     |\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*t7w7RpKZVGkAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'diamond',\n      label: 'diamond',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'diamond', // 数据中已指定 type，这里无需再次指定\n    size: [200, 80],\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Pmb6QITup3wAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      style: {\n        fill: \"#9254de\",\n        fontSize: 18,\n      },\n      position: \"bottom\",\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。通过配置 `linkPoints` ，可以指定菱形周围「上、下、左、右」四个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| bottom    | 是否显示底部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的边框颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点边框的宽度     | Number  | 默认为 `1`         |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HoovQZW391AAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      size: 5,\n      fill: \"#fff\",\n    },\n  },\n});\n// ...\n```\n\n### 图标  icon\n\nObject 类型。通过配置 `icon`，可以在圆上显示小图标。\n\n| 名称   | 含义                 | 类型    | 备注                                |\n| ------ | -------------------- | ------- | ----------------------------------- |\n| show   | 是否显示 icon        | Boolean | 默认为 `false`，不显示              |\n| width  | icon 的宽度          | Number  | 默认为 `16`                         |\n| height | icon 的高度          | Number  | 默认为 `16`                         |\n| img    | icon 的地址或 base64 | String  | 若配置则表示使用图片作为 icon       |\n| text   | icon 的 iconfont     | String  | 若配置则表示使用 iconfont 作为 icon |\n\n下面代码演示在实例化图时全局配置方法中配置 `icon`。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*rmsFSJd6kXUAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    icon: {\n      show: true,\n      width: 25,\n      height: 25,\n      // img: '...', 可更换为其他图片地址\n      // text: '...', 使用 iconfont\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/donut.zh.md",
    "content": "---\ntitle: Donut\norder: 9\n---\n\nF6 内置了甜甜圈  Donut 节点，其默认样式如下。标签文本位于圆形中央，圆形周围根据给定字段的占比绘制甜甜圈统计图。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NRJ7RpkMPNsAAAAAAAAAAAAAARQnAQ' width=100 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'donut'`，并为 donut 节点配置 `donutAttrs` 指定参与统计的字段（需要包含两个及以上合法字段，合法是指每个字段格式为 `[key: string]: number`），即可使用 `donut` 节点。若 `donutAttrs` 未指定，或 `donutAttrs` 中的合法字段数少于 2，则该节点将被显示为 circle 节点。甜甜圈图的颜色将会使用默认色板，若需自定义，则传入 `donutColorMap` 字段。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'donut', // 节点类型\n    donutAttrs: {  // 甜甜圈字段，每个字段必须为 [key: string]: number\n      prop1: 10,\n      prop2: 20,\n      prop3: 25,\n      prop5: 10,\n      prop6: 20,\n    },\n    // donutColorMap: { // 甜甜圈颜色映射，字段名与 donutAttrs 中的字段名对应。不指定则使用默认色板\n    //   prop1: '#8eaade',\n    //   prop2: '#55a9f2',\n    //   prop3: '#0d47b5'\n    // },\n    // ... 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [\n  {\n\t  id: 'node0',\n    type: 'donut', // 节点类型\n    donutAttrs: {  // 甜甜圈字段，每个字段必须为 [key: string]: number\n      prop1: 10,\n      prop2: 20,\n      prop3: 25,\n      prop5: 10,\n      prop6: 20,\n    },\n    // donutColorMap: { // 甜甜圈颜色映射，字段名与 donutAttrs 中的字段名对应\n    //   prop1: '#8eaade',\n    //   prop2: '#55a9f2',\n    //   prop3: '#0d47b5'\n    // },\n    ... // 其他配置\n  },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\ndonut 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：<br />\n\n| 名称          | 含义                                 | 类型                      | 备注                                                                                                                                |\n| ------------- | ------------------------------------ | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| size          | 圆的直径                             | Number / Array            | `size` 为数组时，取第一个值                                                                                                         |\n| style         | 背景圆的默认样式，与 circle 节点类似 | Object                    | Canvas 支持的属性                                                                                                                   |\n| label         | 标签文本内容                         | String                    |                                                                                                                                     |\n| labelCfg      | 标签文本配置项                       | Object                    |                                                                                                                                     |\n| donutAttrs    | 甜甜圈统计字段                       | { [key: string]: number } | donut 节点特有。必须含有两个及以上的合法字段，才能够显示出甜甜圈图                                                                  |\n| donutColorMap | 甜甜圈色板                           | { [key: string]: string } | donut 节点特有。不指定将使用默认色板。key 与 donutAttrs 中的字段名对应                                                              |\n| stateStyles   | 各状态下的样式                       | Object                    | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints    | **视觉上的**四个锚点                 | Object                    | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| icon          | 圆上 icon 配置                       | Object                    | 默认不显示 icon                                                                                                                     |\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*5aX_R5czdDAAAAAAAAAAAAAAARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'donut',\n      label: 'donut',\n      donutAttrs: {\n        prop1: 10,\n        prop2: 20,\n        prop3: 25,\n        prop5: 10,\n        prop6: 20,\n      },\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'donut',  // 在数据中已经指定 type，这里无需再次指定\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n    donutColorMap: { // 指定色板\n      prop1: '#8eaade',\n      prop2: '#55a9f2',\n      prop3: '#0d47b5',\n      prop5: '#7b8085',\n      prop6: '#003870'\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*y7HzRbfMooYAAAAAAAAAAAAAARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      position: \"bottom\",\n      offset: 10,\n      style: {\n        // ... 文本样式的配置\n      },\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。可以指定节点周围「上、下、左、右」四个方向上的四个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| bottom    | 是否显示底部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的描边颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点描边的宽度     | Number  | 默认为 `1`         |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*j-iiRZsUtLEAAAAAAAAAAAAAARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 其他属性\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      fill: \"#fff\",\n      size: 5,\n    },\n  },\n});\n// ...\n```\n\n### 图标  icon\n\nObject 类型。通过配置 `icon`，可以在节点上显示小图标。\n\n| 名称   | 含义                 | 类型    | 备注                                |\n| ------ | -------------------- | ------- | ----------------------------------- |\n| show   | 是否显示 icon        | Boolean | 默认为 `false`，不显示              |\n| width  | icon 的宽度          | Number  | 默认为 `16`                         |\n| height | icon 的高度          | Number  | 默认为 `16`                         |\n| img    | icon 的地址或 base64 | String  | 若配置则表示使用图片作为 icon       |\n| text   | icon 的 iconfont     | String  | 若配置则表示使用 iconfont 作为 icon |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了 `icon`  配置项进行图标的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AuNDSq7DTu0AAAAAAAAAAAAAARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 其他属性\n    icon: {\n      show: true,\n      //img: '...', 可更换为其他图片地址\n      width: 25,\n      height: 25,\n      // img: '...', 可更换为其他图片地址\n      // text: '...', 使用 iconfont\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/ellipse.zh.md",
    "content": "---\ntitle: Ellipse\norder: 3\n---\n\nF6 内置了  ellipse 节点，其默认样式如下。标签文本位于椭圆中央。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-K6wTriSnY8AAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/en/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'ellipse'`，即可使用 `ellipse` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'ellipse',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n\t  id: 'node0',\n    type: 'ellipse',\n    ... // 其他配置\n    },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\nellipse  节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称        | 含义                 | 类型           | 备注                                                                                                                                |\n| ----------- | -------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| size        | 椭圆的大小           | Number / Array | size 为 Number 时，效果为一个圆形。为 Array 时，size[0] 为椭圆长轴长度，size[1] 为椭圆短轴长度                                      |\n| style       | 椭圆的默认样式       | Object         | Canvas 支持的属性                                                                                                                   |\n| label       | 标签文本内容         | String         |                                                                                                                                     |\n| labelCfg    | 标签文本配置项       | Object         |                                                                                                                                     |\n| stateStyles | 各状态下的样式       | Object         | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints  | **视觉上的**四个锚点 | Object         | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| icon        | 椭圆上 icon 配置     | Object         | 默认不显示 icon                                                                                                                     |\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*5_yzRLNA81cAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'ellipse',\n      label: 'ellipse',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'ellipse',  // 在数据中已经指定 type，这里可以不用再此指定\n    size: [130, 80],\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置  labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SxAlT7QGURwAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      offset: 20,\n      style: {\n        fill: \"#9254de\",\n        fontSize: 18,\n      },\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。通过配置 `linkPoints` ，可以指定节点上「上、下、左、右」四个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| bottom    | 是否显示底部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的边框颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点边框的宽度     | Number  | 默认为 `1`         |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*paBYRq0PNqgAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      size: 5,\n      fill: \"#fff\",\n    },\n  },\n});\n// ...\n```\n\n### 图标  icon\n\nObject 类型。通过配置 `icon`，可以在圆上显示小图标。\n\n| 名称   | 含义                 | 类型    | 备注                                |\n| ------ | -------------------- | ------- | ----------------------------------- |\n| show   | 是否显示 icon        | Boolean | 默认为 `false`，不显示              |\n| width  | icon 的宽度          | Number  | 默认为 `16`                         |\n| height | icon 的高度          | Number  | 默认为 `16`                         |\n| img    | icon 的地址或 base64 | String  | 若配置则表示使用图片作为 icon       |\n| text   | icon 的 iconfont     | String  | 若配置则表示使用 iconfont 作为 icon |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了 `icon`  配置项进行图标的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*992OSK65NaUAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    icon: {\n      show: true,\n      width: 25,\n      height: 25,\n      // img: '...', 可更换为其他图片地址\n      // text: '...', 使用 iconfont\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/image.zh.md",
    "content": "---\ntitle: Image\norder: 7\n---\n\n## Image\n\nF6 内置了 image 节点，其默认样式如下。标签文本位于图片下方。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aHqIQIXL0RMAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'image'`，即可使用 `image` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'image',\n    label: 'AntV Team',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n    id: 'node0',\n  \timg: 'https://yyb.gtimg.com/aiplat/page/product/visionimgidy/img/demo6-16a47e5d31.jpg?max_age=31536000',\n    type: 'image',\n    size: 200,\n    label: 'AntV Team',\n    labelCfg: {\n      position: 'bottom'\n    },\n    // 裁剪图片配置\n    clipCfg: {\n      show: false,\n      type: 'circle',\n      r: 15\n    }\n  },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\nimage 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释：\n\n```javascript\nimg: 'https://yyb.gtimg.com/aiplat/page/product/visionimgidy/img/demo6-16a47e5d31.jpg?max_age=31536000',\nsize: 200,\n  labelCfg: {\n    position: 'bottom'\n  },\n  // 裁剪图片配置\n  clipCfg: {\n    show: false,\n    type: 'circle',\n    // circle\n    r: 15,\n    // ellipse\n    rx: 10,\n    ry: 15,\n    // rect\n    width: 15,\n    height: 15,\n    // 坐标\n    x: 0,\n    y: 0\n  }\n```\n\n| 名称        | 含义                 | 类型       | 备注                                                                                                           |\n| ----------- | -------------------- | ---------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------- |\n| **img**     | **图片 URL 地址**    | **String** | **image 节点特有**                                                                                             |\n| size        | 图片大小             | Number     | Array                                                                                                          | `size` 为单个值时，表示宽高相等 |\n| label       | 标签文本内容         | String     |                                                                                                                |\n| labelCfg    | 标签文本配置项       | Object     | 支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。 |\n| **clipCfg** | **裁剪图片的配置项** | **Object** | **默认不裁剪，image 节点特有**                                                                                 |\n\n### 剪裁\n\n`clipCfg`\n\n| 名称   | 含义               | 类型    | 备注                                                      |\n| ------ | ------------------ | ------- | --------------------------------------------------------- |\n| type   | 裁剪的图片形状     | String  | 支持 `'circle'`、`'rect'`、`'ellipse'`                    |\n| x      | 裁剪图形的 x 坐标  | Number  | 默认为 0，类型为 `'circle'`、`'rect'`、`'ellipse'` 时生效 |\n| y      | 裁剪图形的 y 坐标  | Number  | 默认为 0，类型为 `'circle'`、`'rect'`、`'ellipse'` 时生效 |\n| show   | 是否启用裁剪功能   | Boolean | 默认不裁剪，值为 `false`                                  |\n| r      | 剪裁圆形的半径     | Number  | 剪裁 type 为  `'circle'` 时生效                           |\n| width  | 剪裁矩形的宽度     | Number  | 剪裁 type 为 `'rect'` 时生效                              |\n| height | 剪裁矩形的长度     | Number  | 剪裁 type 为 `'rect'` 时生效                              |\n| rx     | 剪裁椭圆的长轴半径 | Number  | 剪裁 type 为 `'ellipse'` 时生效                           |\n| ry     | 剪裁椭圆的短轴半径 | Number  | 剪裁 type 为 `'ellipse'` 时生效                           |\n\n所有的裁剪类型都提供了默认值。下面代码演示在实例化图时全局配置 `clipCfg` 的最简形式：\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'image',\n      label: 'image',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'image',  // 在数据中已经指定 type，这里无需再次指定\n    clipCfg: {\n      show: true,\n      type: 'circle',\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n#### 裁剪类型\n\n##### 圆形剪裁\n\n`circle` 当剪裁配置 `clipCfg` 中的裁剪类型 `type` 为 `'circle'` 时，如下配置可以得到下图效果：\n\n```javascript\nclipCfg: {\n  show: true,\n  type: 'circle',\n  r: 100\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w5uESbSe430AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n##### 矩形剪裁\n\n`rect`\n\n当剪裁配置 `clipCfg` 中的裁剪类型 `type` 为 `'rect'` 时，如下配置可以得到下图效果：\n\n```javascript\nclipCfg: {\n  show: true,\n  type: 'rect',\n  x: -50,\n  y: -50,\n  width: 100,\n  height: 100\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mpPvTKdP7cIAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n##### 椭圆剪裁\n\n`ellipse`\n\n当剪裁配置 `clipCfg` 中的裁剪类型 `type` 为 `'ellipse'` 时，如下配置可以得到下图效果：\n\n```javascript\nclipCfg: {\n  show: true,\n  type: 'ellipse',\n  rx: 100,\n  ry: 60\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1kn1S4vaUrwAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/modelRect.zh.md",
    "content": "---\ntitle: ModelRect\norder: 8\n---\n\nF6 内置了方形卡片 modelRect  节点，其默认样式如下。标签文本位于卡片下方。 <br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*XZiKQbvTSS0AAAAAAAAAAABkARQnAQ' width='223' height='102' alt='img' />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*tCcvRrNkAgUAAAAAAAAAAABkARQnAQ' width='223' height='98' alt='img'/>\n\n<br />**提示：**数据中无 `description` 字段时，则不显示描述信息。\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'modelRect'`，即可使用 `modelRect` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'modelRect',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n\t  id: 'node0',\n    type: 'modelRect',\n    ... // 其他配置\n    },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\nmodelRect 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称               | 含义                           | 类型       | 备注                                                                                                                                |\n| ------------------ | ------------------------------ | ---------- | ----------------------------------------------------------------------------------------------------------------------------------- | --- |\n| size               | 卡片的大小                     | Number     | Array                                                                                                                               |     |\n| style              | 卡片的默认样式                 | Object     | Canvas 支持的属性                                                                                                                   |\n| label              | 标签文本内容                   | String     |                                                                                                                                     |\n| labelCfg           | 文本配置项                     | Object     |                                                                                                                                     |\n| stateStyles        | 各状态下的样式                 | Object     | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints         | **视觉上的**四个锚点           | Object     | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| **preRect**        | **左侧的小矩形**               | **Object** | **modelRect 节点特有**                                                                                                              |\n| **logoIcon**       | **左侧的 logo 图标**           | **Object** | **modelRect 节点特有**                                                                                                              |\n| **stateIcon**      | **右侧的状态图标**             | **Object** | **modelRect 节点特有**                                                                                                              |\n| **description**    | **节点主要文本下方的描述文本** | **String** | **modelRect 节点特有**                                                                                                              |\n| **descriptionCfg** | **描述文本的配置项**           | **Object** | **modelRect 节点特有**                                                                                                              |\n\n```javascript\n    // 节点中 icon 配置\n    logoIcon: {\n      // 是否显示 icon，值为 false 则不渲染 icon\n      show: true,\n      x: 0,\n      y: 0,\n      // icon 的地址，字符串类型\n      img: 'https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg',\n      width: 16,\n      height: 16,\n      // 用于调整图标的左右位置\n      offset: 0\n    },\n    // 节点中表示状态的 icon 配置\n    stateIcon: {\n      // 是否显示 icon，值为 false 则不渲染 icon\n      show: true,\n      x: 0,\n      y: 0,\n      // icon 的地址，字符串类型\n      img: 'https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg',\n      width: 16,\n      height: 16,\n      // 用于调整图标的左右位置\n      offset: -5\n    }\n```\n\n### 样式属性  style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cJeKS59n4FAAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'modelRect',\n      label: 'modelRect',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'modelRect',  // 在数据中已经指定 type，这里无需再次指定\n    size: [200, 80],\n    style: {\n      fill: '#f0f5ff',\n      stroke: '#adc6ff',\n      lineWidth: 2,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*x_XKQq4m3IkAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      style: {\n        fill: \"#9254de\",\n        fontSize: 18,\n      },\n    },\n  },\n});\n// ...\n```\n\n### 描述文本配置  descriptionCfg\n\nObject 类型。通过 `descriptionCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。此外，还有一个特殊属性：\n\n| 名称       | 含义                       | 类型   | 备注       |\n| ---------- | -------------------------- | ------ | ---------- |\n| paddingTop | 距离上方标签文本的垂直距离 | Number | 默认为 `0` |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `descriptionCfg`  配置项进行描述文本的配置。\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    descriptionCfg: {\n      style: {\n        fill: \"#f00\",\n      },\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。通过配置 `linkPoints` ，可以指定 modelRect 周围「上、下、左、右」四个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| bottom    | 是否显示底部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的边框颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点边框的宽度     | Number  | 默认为 1           |\n\n基于上面 [样式属性 style](#819eF) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Tp2WQ70bCGgAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      size: 5,\n      fill: \"#fff\",\n    },\n  },\n});\n// ...\n```\n\n### 左侧矩形 preRect\n\n通过 `preRect` 可以配置左侧的小矩形形状。\n\n| 名称   | 含义                 | 类型    | 备注                |\n| ------ | -------------------- | ------- | ------------------- |\n| show   | 是否显示左侧小矩形   | Boolean | 默认为 `true`       |\n| width  | 左侧小矩形的宽度     | Number  | 默认为 4            |\n| fill   | 左侧小矩形的填充色   | String  | 默认为  `'#40a9ff'` |\n| radius | 左侧小矩形的圆角弧度 | Number  | 默认为 2            |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `preRect`  配置项进行左侧小矩形的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yh43Sa3LeVcAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    preRect: {\n      // 设置为 false，则不显示\n      show: true,\n      fill: \"#f759ab\",\n      width: 8,\n    },\n  },\n});\n// ...\n```\n\n### 图标 logoIcon / stateIcon\n\n通过 `logoIcon` 和 `stateIcon` 可以配置左侧的 logo 小图标和右边的状态小图标，这两个的配置项完全相同。\n\n| 名称   | 含义             | 类型    | 备注                                                                                                                                                                                                                                                                                                                                   |\n| ------ | ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| show   | 是否显示图标     | Boolean | 默认为 `true`                                                                                                                                                                                                                                                                                                                          |\n| img    | 图标图片         | String  | <br />- 左侧图标 `logoIcon` 的图片默认为  <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*KpqSS4INnRUAAAAAAAAAAABkARQnAQ' width=25 alt='img'/><br />- 右侧图标 `stateIcon` 的图片默认为 <img src='https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg' width=25 alt='img'/><br /> |\n| width  | 图标的宽度       | Number  | 默认为 16                                                                                                                                                                                                                                                                                                                              |\n| height | 图标的高度       | Number  | 默认为 16                                                                                                                                                                                                                                                                                                                              |\n| offset | 图标的左右偏移量 | Number  | <br />- 左侧图标 `logoIcon` 的 `offset` 默认为 0<br />- 右侧图标 `stateIcon` 的 `offset`  默认为 -5<br />                                                                                                                                                                                                                              |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了 `logoIcon` 和 `stateIcon` 配置项进行左右图标的配置，使之达到如下图效果，左侧图标不显示，右侧图标更换图片。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pBsqR7McSiYAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    logoIcon: {\n      show: false,\n    },\n    stateIcon: {\n      show: true,\n      img: \"https://gw.alipayobjects.com/zos/basement_prod/c781088a-c635-452a-940c-0173663456d4.svg\",\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/rect.zh.md",
    "content": "---\ntitle: Rect\norder: 2\n---\n\nF6 内置了 rect 节点，其默认样式如下。标签文本位于矩形中央。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*k2nBTozK6XsAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'rect'`，即可使用 `rect` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'rect',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n\t  id: 'node0',\n    type: 'rect',\n    ... // 其他配置\n    },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n};\n```\n\n## 配置项说明\n\nrect 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释。对于 Object 类型的配置项将在后面有详细讲解：\n\n| 名称        | 含义                 | 类型   | 备注                                                                                                                                |\n| ----------- | -------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |\n| size        | rect 的宽高          | Number | Array                                                                                                                               | `size` 为数组时：第一个值表示宽度，第二个表示高度；<br />`size` 为一个数值时：表示宽高相等 |\n| style       | rect 默认样式        | Object | Canvas 支持的属性                                                                                                                   |\n| label       | 标签文本内容         | String |                                                                                                                                     |\n| labelCfg    | 标签配置项           | Object |                                                                                                                                     |\n| stateStyles | 各状态下的样式       | Object | 只对 `keyShape` 起作用                                                                                                              |\n| linkPoints  | **视觉上的**四个锚点 | Object | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改 `rect` 的填充色、边框颜色、阴影等属性。\n\n| 名称        | 含义     | 类型   | 备注           |\n| ----------- | -------- | ------ | -------------- |\n| radius      | 圆角半径 | Number | 默认为直角矩形 |\n| stroke      | 描边颜色 | String |                |\n| lineWidth   | 描边粗细 | Number | 默认为 `1`     |\n| fill        | 填充色   | String |                |\n| fillOpacity | 透明度   | Number | 默认为 `1`     |\n\n下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EFtLTp134y8AAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'rect',\n      label: 'rect',\n    },\n  ],\n};\n\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 300,\n  defaultNode: {\n    // type: 'rect', // 在数据中已经指定了 type，这里无需再次指定\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n      radius: 10,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bAjNR7yF1uIAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultNode: {\n    // ... 其他配置\n    labelCfg: {\n      style: {\n        fill: \"#9254de\",\n        fontSize: 18,\n      },\n      position: \"bottom\",\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。通过配置 `linkPoints` ，可以指定矩形周围「上、下、左、右」四个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| bottom    | 是否显示底部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的边框颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点边框的宽度     | Number  | 默认为 `1`         |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*vsLASZHBX88AAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他配置\n  defaultNode: {\n    // 其他配置\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      size: 5,\n      fill: \"#fff\",\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/star.zh.md",
    "content": "---\ntitle: Star\norder: 6\n---\n\nF6 内置了星形  star 节点，其默认样式如下。标签文本位于星形中央。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cJOmRqQvR5MAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'star'`，即可使用 `star` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'star',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n\t  id: 'node0',\n    type: 'star',\n    ... // 其他配置\n    },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\nstar 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释：\n\n| 名称        | 含义                 | 类型       | 备注                                                                                                                                |\n| ----------- | -------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------- |\n| size        | 五角星的大小         | number     | Array                                                                                                                               | size 表示外环的大小 |\n| **innerR**  | **五角星内环大小**   | **Number** | **默认为 size \\* 3 / 8**                                                                                                            |\n| style       | 五角星的默认样式     | Object     | Canvas 支持的属性                                                                                                                   |\n| label       | 标签文本内容         | String     |                                                                                                                                     |\n| labelCfg    | 标签文本配置项       | Object     |                                                                                                                                     |\n| stateStyles | 各状态下的样式       | Object     | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints  | **视觉上的**五个锚点 | Object     | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| icon        | 五角星上 icon 配置   | Object     | 默认不显示 icon                                                                                                                     |\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Hw05TKKFEtIAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'star',\n      label: 'star',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'star',   // 在数据中已经指定 type，这里无需再次指定\n    size: 80,\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置  labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-cSoRIyoykAAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      style: {\n        fill: \"#9254de\",\n        fontSize: 18,\n      },\n    },\n  },\n});\n// ...\n```\n\n### linkPoints\n\nObject 类型。通过配置 `linkPoints` ，可以指定圆周围「上、左下、➡ 右下、左、右」五个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称            | 含义                     | 类型        | 备注                          |\n| --------------- | ------------------------ | ----------- | ----------------------------- |\n| top             | 是否显示上部的圆点       | Boolean     | 默认为 `false`                |\n| **leftBottom**  | **是否显示左底部的圆点** | **Boolean** | **默认为 `false`，star 特有** |\n| **rightBottom** | **是否显示右底部的圆点** | **Boolean** | **默认为 `false`，star 特有** |\n| left            | 是否显示左侧的圆点       | Boolean     | 默认为 `false`                |\n| right           | 是否显示右侧的圆点       | Boolean     | 默认为 `false`                |\n| size            | 圆点的大小               | Number      | 默认为 3                      |\n| fill            | 圆点的填充色             | String      | 默认为 `'#72CC4A'`            |\n| stroke          | 圆点的边框颜色           | String      | 默认为 `'#72CC4A'`            |\n| lineWidth       | 圆点边框的宽度           | Number      | 默认为 `1`                    |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MmLYQ6cSjiYAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    linkPoints: {\n      top: true,\n      left: true,\n      right: true,\n      leftBottom: true,\n      rightBottom: true,\n      size: 5,\n      fill: \"#fff\",\n    },\n  },\n});\n// ...\n```\n\n### 图标  icon\n\nObject 类型。通过配置 `icon`，可以在圆上显示小图标。\n\n| 名称   | 含义                 | 类型    | 备注                                |\n| ------ | -------------------- | ------- | ----------------------------------- |\n| show   | 是否显示 icon        | Boolean | 默认为 false，不显示                |\n| width  | icon 的宽度          | Number  | 默认为 16                           |\n| height | icon 的高度          | Number  | 默认为 16                           |\n| img    | icon 的地址或 base64 | String  | 若配置则表示使用图片作为 icon       |\n| text   | icon 的 iconfont     | String  | 若配置则表示使用 iconfont 作为 icon |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了 `icon`  配置项进行图标的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cJ_tRITTWCoAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    icon: {\n      show: true,\n      width: 25,\n      height: 25,\n      // img: '...', 可更换为其他图片地址\n      // text: '...', 使用 iconfont\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/built-in/triangle.zh.md",
    "content": "---\ntitle: Triangle\norder: 5\n---\n\n## Triangle\n\nF6 内置了三角形  Triangle 节点，其默认样式如下。标签文本位于三角形下方。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FY1XQZHEc6YAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n## 使用方法\n\n如 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 一节所示，配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 1 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 指定 `type` 为 `'triangle'`，即可使用 `triangle` 节点。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'triangle',\n    // 其他配置\n  },\n});\n```\n\n### 2 在数据中动态配置\n\n如果需要使不同节点有不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n\t  id: 'node0',\n    type: 'triangle',\n    ... // 其他配置\n    },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n## 配置项说明\n\ntriangle 节点支持 [节点通用配置](/zh/docs/manual/middle/elements/nodes/defaultNode#节点的通用属性)，下表对部分属性进行解释：\n\n| 名称          | 含义                 | 类型       | 备注                                                                                                                                |\n| ------------- | -------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |\n| size          | 三角形的边长         | Number     | Array                                                                                                                               | size 为数组时取第一个值 |\n| **direction** | **三角形的方向**     | **String** | **可取值：`'up'`，`'down'`，`'left'`，`'right'`。默认为 `'up'`**                                                                    |\n| style         | 三角形默认样式       | Object     | Canvas 支持的属性                                                                                                                   |\n| label         | 标签文本内容         | String     |                                                                                                                                     |\n| labelCfg      | 标签文本配置项       | Object     |                                                                                                                                     |\n| stateStyles   | 各状态下的样式       | Object     | 详见[配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)                                                             |\n| linkPoints    | **视觉上的**三个锚点 | Object     | 默认不显示，应与 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint) 配合使用。二者区别请看 [linkPoints](#linkpoints) |\n| icon          | 三角形上 icon 配置   | Object     | 默认不显示 icon                                                                                                                     |\n\n### 三角形方向 direction\n\nString 类型。可取值有：`'``up'`、`'down'`、`'left'`、`'right'`。默认为  `'``up'`。通过设置 `direction`，可以修改三角形的方向。下面代码演示在实例化图时全局配置方法中配置 `direction`。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'triangle',\n    direction: 'down',\n  },\n});\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*HuGHTrWfGYsAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*hsOBSo1sFFAAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*irgPRrU3JdEAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yxEXQK-P4nsAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n> 上图分别是将 `direction` 配置为 `'up'`，`'down'`，`'left'`，`'right'` 的结果\n\n### 样式属性 style\n\nObject 类型。支持 [节点通用样式](/zh/docs/manual/middle/elements/nodes/defaultNode#样式属性-style)。通过 `style` 配置来修改节点的填充色、描边等属性。下面代码演示在实例化图时全局配置方法中配置 `style`，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6-qaTJkpsKYAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      type: 'triangle',\n      label: 'triangle',\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // type: 'triangle', // 在数据中已经指定 type，这里无需再次指定\n    direction: 'up',\n    size: 100,\n    style: {\n      fill: '#bae637',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n### 标签文本配置 labelCfg\n\nObject 类型。通过 `labelCfg` 配置标签文本。支持 [节点通用标签配置](/zh/docs/manual/middle/elements/nodes/defaultNode/#标签文本-label-及其配置-labelcfg)。基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `labelCfg`  配置项进行文本的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*5KkKRaDXqXgAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 节点其他属性\n    labelCfg: {\n      position: \"center\",\n      style: {\n        fill: \"#9254de\",\n        fontSize: 18,\n      },\n    },\n  },\n});\n// ...\n```\n\n### linkPoints Object 类型。通过配置 `linkPoints` ，可以指定节点上「上、左、右」三个小圆点。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 区分于 `anchorPoints`： `anchorPoints` 是真正用于指定该节点相关边的连入位置的「**数组**」，见 [anchorPoints](/zh/docs/manual/middle/elements/nodes/anchorpoint)；而 `linkPoints` 仅是指定是否「**绘制**」出四个圆点，不起实际的连接相关边的作用。二者常常配合使用。\n\n| 名称      | 含义               | 类型    | 备注               |\n| --------- | ------------------ | ------- | ------------------ |\n| top       | 是否显示上部的圆点 | Boolean | 默认为 `false`     |\n| left      | 是否显示左侧的圆点 | Boolean | 默认为 `false`     |\n| right     | 是否显示右侧的圆点 | Boolean | 默认为 `false`     |\n| size      | 圆点的大小         | Number  | 默认为 `3`         |\n| fill      | 圆点的填充色       | String  | 默认为 `'#72CC4A'` |\n| stroke    | 圆点的边框颜色     | String  | 默认为 `'#72CC4A'` |\n| lineWidth | 圆点边框的宽度     | Number  | 默认为 `1`         |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了  `linkPoints`  配置项进行连入点的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aB-PT4nzU_oAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 其他属性\n    linkPoints: {\n      top: true,\n      bottom: true,\n      left: true,\n      right: true,\n      fill: \"#fff\",\n      size: 5,\n    },\n  },\n});\n// ...\n```\n\n### 图标  icon\n\nObject 类型。通过配置 `icon`，可以在圆上显示小图标。\n\n| 名称       | 含义                 | 类型       | 备注                                          |\n| ---------- | -------------------- | ---------- | --------------------------------------------- |\n| show       | 是否显示 icon        | Boolean    | 默认为 false，不显示                          |\n| width      | icon 的宽度          | Number     | 默认为 16                                     |\n| height     | icon 的高度          | Number     | 默认为 16                                     |\n| img        | icon 的地址或 base64 | String     | 若配置则表示使用 iconfont 作为 icon           |\n| text       | icon 的 iconfont     | String     | 若配置则表示使用 iconfont 作为 icon           |\n| **offset** | **icon 的偏移量**    | **Number** | **默认为 0，triangle 节点的 icon 特有的配置** |\n\n基于上面 [样式属性 style](#样式属性-style) 中的代码，下面代码在 `defaultNode` 中增加了 `icon`  配置项进行图标的配置，使之达到如下图效果。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2w62R5ZYtVAAAAAAAAAAAABkARQnAQ' width=100 alt='img'/>\n\n```javascript\nconst data = {\n  // ... data 内容\n};\nconst graph = new F6.Graph({\n  // ... 图的其他属性\n  defaultNode: {\n    // ... 其他属性\n    icon: {\n      show: true,\n      width: 30,\n      height: 30,\n      offset: 20,\n      // img: '...', 可更换为其他图片地址\n      // text: '...', 使用 iconfont\n    },\n  },\n});\n// ...\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/custom-node.zh.md",
    "content": "---\ntitle: 自定义节点\norder: 2\n---\n\nF6 提供了一系列[内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode)，包括 [circle](/zh/docs/manual/middle/elements/nodes/built-in/circle)、[rect](/zh/docs/manual/middle/elements/nodes/built-in/rect)、[diamond](/zh/docs/manual/middle/elements/nodes/built-in/diamond)、[triangle](/zh/docs/manual/middle/elements/nodes/built-in/triangle)、[star](/zh/docs/manual/middle/elements/nodes/built-in/star)、[image](/zh/docs/manual/middle/elements/nodes/built-in/image)、[modelRect](/zh/docs/manual/middle/elements/nodes/built-in/modelRect)。若内置节点无法满足需求，用户还可以通过 `F6.registerNode(typeName: string, nodeDefinition: object, extendedTypeName?: string)` 进行自定义节点，方便用户开发更加定制化的节点，包括含有复杂图形的节点、复杂交互的节点、带有动画的节点等。其参数：\n\n- `typeName`：该新节点类型名称；\n- `extendedTypeName`：被继承的节点类型，可以是内置节点类型名，也可以是其他自定义节点的类型名。`extendedTypeName` 未指定时代表不继承其他类型的节点；\n- `nodeDefinition`：该新节点类型的定义，其中必要函数详见 [自定义机制 API](/zh/docs/api/registerItem#g6registernodenodename-options-extendednodename)。当有 `extendedTypeName` 时，没被复写的函数将会继承 `extendedTypeName` 的定义。\n\n**需要注意的是**，自定义节点/边时，若给定了 `extendedTypeName`，如 `draw`，`update`，`setState` 等必要的函数若不在 `nodeDefinition` 中进行复写，将会继承 `extendedTypeName` 中的相关定义。常见问题：\n\n- Q：节点/边更新时，没有按照在 `nodeDefinition` 中自定义实现的 `draw` 或 `drawShape` 逻辑更新。例如，有些图形没有被更新，增加了没有在 `draw` 或 `drawShape` 方法中定义的图形等。\n- A：由于继承了 `extendedTypeName`，且在 `nodeDefinition` 中没有复写 `update` 方法，导致节点/边更新时执行了 `extendedTypeName` 中的 `update` 方法，从而与自定义的 `draw` 或 `drawShape` 有出入。可以通过复写 `update` 方法为 `undefined` 解决。当 `update` 方法为 `undefined` 时，节点/边的更新将会执行 `draw` 或 `drawShape` 进行重绘。\n\n在本章中我们会通过五个案例，从简单到复杂讲解节点的自定义。这五个案例是： <br /> <strong>1. 从无到有的定义节点：</strong>绘制图形；优化性能。 <br /> <strong>2. 扩展现有的节点：</strong>附加图形；增加动画。 <br /> <strong>3. 调整节点的锚点；</strong> <br /> <strong>4. 调整节点的选中样式：</strong>样式变化响应；动画响应； <br /> <strong>5. 使用 DOM 自定义节点。</strong>\n\n通过 [图形 Shape](/zh/docs/manual/middle/elements/shape/shape-keyshape) 章节的学习，我们应该已经知道了自定义节点时需要满足以下两点：\n\n- 控制节点的生命周期；\n- 解析用户输入的数据，在图形上展示。\n\nF6 中自定义节点的 API 如下：\n\n```javascript\nF6.registerNode(\n  \"nodeName\",\n  {\n    options: {\n      style: {},\n      stateStyles: {\n        hover: {},\n        selected: {},\n      },\n    },\n    /**\n     * 绘制节点，包含文本\n     * @param  {Object} cfg 节点的配置项\n     * @param  {G.Group} group 图形分组，节点中图形对象的容器\n     * @return {G.Shape} 返回一个绘制的图形作为 keyShape，通过 node.get('keyShape') 可以获取。\n     * 关于 keyShape 可参考文档 核心概念-节点/边/Combo-图形 Shape 与 keyShape\n     */\n    draw(cfg, group) {},\n    /**\n     * 绘制后的附加操作，默认没有任何操作\n     * @param  {Object} cfg 节点的配置项\n     * @param  {G.Group} group 图形分组，节点中图形对象的容器\n     */\n    afterDraw(cfg, group) {},\n    /**\n     * 更新节点，包含文本\n     * @override\n     * @param  {Object} cfg 节点的配置项\n     * @param  {Node} node 节点\n     */\n    update(cfg, node) {},\n    /**\n     * 更新节点后的操作，一般同 afterDraw 配合使用\n     * @override\n     * @param  {Object} cfg 节点的配置项\n     * @param  {Node} node 节点\n     */\n    afterUpdate(cfg, node) {},\n    /**\n     * 响应节点的状态变化。\n     * 在需要使用动画来响应状态变化时需要被复写，其他样式的响应参见下文提及的 [配置状态样式] 文档\n     * @param  {String} name 状态名称\n     * @param  {Object} value 状态值\n     * @param  {Node} node 节点\n     */\n    setState(name, value, node) {},\n    /**\n     * 获取锚点（相关边的连入点）\n     * @param  {Object} cfg 节点的配置项\n     * @return {Array|null} 锚点（相关边的连入点）的数组,如果为 null，则没有控制点\n     */\n    getAnchorPoints(cfg) {},\n  },\n  // 继承内置节点类型的名字，例如基类 'single-node'，或 'circle', 'rect' 等\n  // 当不指定该参数则代表不继承任何内置节点类型\n  extendedNodeName,\n);\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span>\n\n- 如果不从任何现有的节点或从 `'single-node'` 扩展新节点时，`draw` 方法是必须的；\n- 节点内部所有图形**使用相对于节点自身的坐标系**，即 `(0, 0)` 是该节点的中心。而节点的坐标是相对于画布的，由该节点 group 上的矩阵控制，自定义节点中不需要用户感知。若在自定义节点内增加 `rect` 图形，要注意让它的 x 与 y 各减去其长与宽的一半。详见例子 [从无到有定义节点](#1-从无到有定义节点)；\n- `update` 方法可以不定义：\n  - 当 `update` 未定义：若指定了 `registerNode` 的第三个参数 `extendedNodeName`（即代表继承指定的内置节点类型），则节点更新时将执行被继承的内置节点类型的 `update` 逻辑；若未指定 `registerNode` 的第三个参数，则节点更新时会执行 `draw` 方法，所有图形清除重绘；\n  - 当定义了 `update` 方法，则不论是否指定 `registerNode` 的第三个参数，在节点更新时都会执行复写的 `update` 函数逻辑。\n- `afterDraw`，`afterUpdate` 方法一般用于扩展已有的节点，例如：在矩形节点上附加图片，圆节点增加动画等；\n- `setState` 只有在需要使用动画的方式来响应状态变化时需要复写，一般的样式响应状态变化可以通过 [配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式) 实现；\n- `getAnchorPoints` 方法仅在需要限制与边的连接点时才需要复写，也可以在数据中直接指定。\n\n## 1. 从无到有定义节点\n\n### 绘制图形\n\n我们自己来实现一个菱形的节点，如下图所示。\n\n> F6 有内置的菱形节点 diamond。为了演示，这里实现了一个自定义的菱形，相当于复写了内置的 diamond。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*LqFCRaKyr0gAAAAAAAAAAABkARQnAQ' alt='img' width='80'/>\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span> 从下面代码可以看出，自定义节点中所有通过 `addShape` 增加的图形的坐标都是**相对于节点自身的子坐标系**，即 `(0, 0)` 是该节点的中心。如 `'text'` 图形的 `x` 和 `y` 均为 0，代表该图形相对于该节点居中；`'path'` 图形 `path` 属性中的坐标也是以 `(0, 0)` 为原点计算的。换句话说，在**自定义节点时不需要感知相对于画布的节点坐标**，节点坐标由该节点所在 group 的矩阵控制。\n\n```javascript\nF6.registerNode(\"diamond\", {\n  draw(cfg, group) {\n    // 如果 cfg 中定义了 style 需要同这里的属性进行融合\n    const keyShape = group.addShape(\"path\", {\n      attrs: {\n        path: this.getPath(cfg), // 根据配置获取路径\n        stroke: cfg.color, // 颜色应用到描边上，如果应用到填充，则使用 fill: cfg.color\n      },\n      // must be assigned in F6. it can be any value you want\n      name: \"path-shape\",\n      // 设置 draggable 以允许响应图拽事件\n      draggable: true,\n    });\n    if (cfg.label) {\n      // 如果有文本\n      // 如果需要复杂的文本配置项，可以通过 labeCfg 传入\n      // const style = (cfg.labelCfg && cfg.labelCfg.style) || {};\n      // style.text = cfg.label;\n      const label = group.addShape(\"text\", {\n        // attrs: style\n        attrs: {\n          x: 0, // 居中\n          y: 0,\n          textAlign: \"center\",\n          textBaseline: \"middle\",\n          text: cfg.label,\n          fill: \"#666\",\n        },\n        // must be assigned in F6. it can be any value you want\n        name: \"text-shape\",\n        // 设置 draggable 以允许响应图拽事件\n        draggable: true,\n      });\n    }\n    return keyShape;\n  },\n  // 返回菱形的路径\n  getPath(cfg) {\n    const size = cfg.size || [40, 40]; // 如果没有 size 时的默认大小\n    const width = size[0];\n    const height = size[1];\n    //  / 1 \\\n    // 4     2\n    //  \\ 3 /\n    const path = [\n      [\"M\", 0, 0 - height / 2], // 上部顶点\n      [\"L\", width / 2, 0], // 右侧顶点\n      [\"L\", 0, height / 2], // 下部顶点\n      [\"L\", -width / 2, 0], // 左侧顶点\n      [\"Z\"], // 封闭\n    ];\n    return path;\n  },\n});\n```\n\n上面的代码自定义了一个菱形节点。值得注意的是，F6 需要用户为自定义节点中的图形设置 `name` 和 `draggable`。其中，`name` 可以是不唯一的任意值。`draggable` 为 `true` 是表示允许该图形响应拖拽事件，只有 `draggable: true` 时，图上的交互行为 `'drag-node'` 才能在该图形上生效。若上面代码仅在 keyShape 上设置了 `draggable: true`，而 label 图形上没有设置，则鼠标拖拽只能在 keyShape 上响应。\n\n现在，我们使用下面的数据输入就会绘制出 diamond 这个节点。\n\n```javascript\nconst data = {\n  nodes: [\n    { id: 'node1', x: 50, y: 100, type: 'diamond' }, // 最简单的\n    { id: 'node2', x: 150, y: 100, type: 'diamond', size: [50, 100] }, // 添加宽高\n    { id: 'node3', x: 250, y: 100, color: 'red', type: 'diamond' }, // 添加颜色\n    { id: 'node4', x: 350, y: 100, label: '菱形', type: 'diamond' }, // 附加文本\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n});\ngraph.data(data);\ngraph.render();\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*qv88SrrnmFAAAAAAAAAAAABkARQnAQ' alt='img' width='300'/>\n\n### 优化性能\n\n当图中节点或边通过  `graph.update(item, cfg)` 重绘时，默认情况下会调用节点的 `draw` 方法进行重新绘制。在数据量大或节点上图形数量非常多（特别是文本多）的情况下，`draw` 方法中对所有图形、赋予样式将会非常消耗性能。\n\n在自定义节点时，重写  `update` 方法，在更新时将会调用该方法替代 `draw`。我们可以在该方法中指定需要更新的图形，从而避免频繁调用  `draw` 、全量更新节点上的所有图形。当然，`update` 方法是可选的，如果没有性能优化的需求可以不重写该方法。\n\n在实现 diamond 的过程中，重写  `update` 方法，找到需要更新的 shape 进行更新，从而优化性能。寻找需要更新的图形可以通过：\n\n- `group.get('children')[0]` 找到 [关键图形  keyShape](/zh/docs/manual/middle/elements/shape/shape-keyshape#keyshape)，也就是 `draw` 方法返回的 shape；\n- `group.get('children')[1]` 找到 label 图形。\n\n下面代码仅更新了 diamond 的关键图形的路径和颜色。\n\n```javascript\nF6.registerNode(\"diamond\", {\n  draw(cfg, group) {\n    // ... // 见前面代码\n  },\n  getPath(cfg) {\n    // ... // 见前面代码\n  },\n  update(cfg, node) {\n    const group = node.getContainer(); // 获取容器\n    const shape = group.get(\"children\")[0]; // 按照添加的顺序\n    const style = {\n      path: this.getPath(cfg),\n      stroke: cfg.color,\n    };\n    shape.attr(style); // 更新属性\n    // 更新文本的逻辑类似，但是需要考虑 cfg.label 是否存在的问题\n    // 通过 label.attr() 更新文本属性即可\n  },\n});\n```\n\n## 2. 扩展现有节点\n\n### 扩展 Shape\n\nF6 中已经[内置了一些节点](/zh/docs/manual/middle/elements/nodes/defaultNode)，如果用户仅仅想对现有节点进行调整，复用原有的代码，则可以基于现有的节点进行扩展。同样实现 diamond ，可以基于  circle、ellipse、rect 等内置节点的进行扩展。single-node 是这些内置节点类型的基类，也可以基于它进行扩展。（single-edge 是所有内置边类型的基类。）\n\n下面以基于 single-node 为例进行扩展。`update`，`setState` 方法在  single-node 中都有实现，这里仅需要复写 `draw` 方法即可。返回的对象中包含自定义图形的路径和其他样式。\n\n```javascript\nF6.registerNode(\n  \"diamond\",\n  {\n    draw(cfg, group) {\n      const size = this.getSize(cfg); // 转换成 [width, height] 的模式\n      const color = cfg.color;\n      const width = size[0];\n      const height = size[1];\n      //  / 1 \\\n      // 4     2\n      //  \\ 3 /\n      const path = [\n        [\"M\", 0, 0 - height / 2], // 上部顶点\n        [\"L\", width / 2, 0], // 右侧顶点\n        [\"L\", 0, height / 2], // 下部顶点\n        [\"L\", -width / 2, 0], // 左侧顶点\n        [\"Z\"], // 封闭\n      ];\n      const style = F6.Util.mix(\n        {},\n        {\n          path: path,\n          stroke: color,\n        },\n        cfg.style,\n      );\n      // 增加一个 path 图形作为 keyShape\n      const keyShape = group.addShape(\"path\", {\n        attrs: {\n          ...style,\n        },\n        draggable: true,\n        name: \"diamond-keyShape\",\n      });\n      // 返回 keyShape\n      return keyShape;\n    },\n  },\n  // 注意这里继承了 'single-node'\n  \"single-node\",\n);\n```\n\n### 添加动画\n\n通过 `afterDraw` 同样可以实现扩展，下面我们来看一个节点的动画场景，如下图所示。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ga7FQLdUYjkAAAAAAAAAAABkARQnAQ' alt='img' width='350'/>\n\n上面的动画效果，可以通过以下方式实现：\n\n- 扩展内置的 rect，在 rect 中添加一个图形；\n- 反复执行新添加图形的旋转动画。\n\n```javascript\n// 自定义一个名为 inner-animate 的节点\nF6.registerNode('inner-animate', {\n  afterDraw(cfg, group) {\n    const size = cfg.size;\n    const width = size[0] - 14;\n    const height = size[1] - 14;\n    // 添加图片\n    const image = group.addShape('image', {\n      attrs: {\n        x: - width / 2,\n        y: - height / 2,\n        width: width,\n        height: height,\n        img: cfg.img\n      },\n      // must be assigned in F6. it can be any value you want\n      name: 'image-shape'\n    });\n    // 执行旋转动画\n    image.animate((ratio) => {\n      const matrix = Util.mat3.create();\n      const toMatrix = Util.transform(matrix, [\n        ['r', ratio * Math.PI * 2]\n      ]) ;\n      return {\n        matrix: toMatrix\n      };\n    }, {\n      repeat: true\n      duration: 3000,\n      easing: 'easeCubic'\n    });\n  }\n},\n// 继承了 rect 节点\n'rect');\n```\n\n更多关于动画的实现，请参考[基础动画](/zh/docs/manual/middle/animation)章节。\n\n<br />\n\n## 3. 调整锚点 anchorPoint\n\n节点上的[锚点 anchorPoint](/zh/docs/manual/middle/elements/nodes/anchorpoint) 作用是**确定节点与边的相交的位置**，看下面的场景：<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mJ85Q5WRJLwAAAAAAAAAAABkARQnAQ' alt='img' width='200'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*99aSR5zbd44AAAAAAAAAAABkARQnAQ' alt='img' width='200'/>\n\n> （左）没有设置锚点时。（右）diamond 设置了锚点后。\n\n有两种方式来调整节点上的锚点：\n\n- 在数据里面指定 `anchorPoints`。\n\n**适用场景：**可以为不同节点配置不同的锚点，更定制化。\n\n- 自定义节点中通过 `getAnchorPoints` 方法指定锚点。\n\n**适用场景：**全局配置锚点，所有该自定义节点类型的节点都相同。\n\n### 数据中指定锚点\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      anchorPoints: [\n        [0, 0.5], // 左侧中间\n        [1, 0.5], // 右侧中间\n      ],\n    },\n    //...       // 其他节点\n  ],\n  edges: [\n    //... // 边\n  ],\n};\n```\n\n### 自定义时指定锚点\n\n```javascript\nF6.registerNode(\n  \"diamond\",\n  {\n    //... // 其他方法\n    getAnchorPoints() {\n      return [\n        [0, 0.5], // 左侧中间\n        [1, 0.5], // 右侧中间\n      ];\n    },\n  },\n  \"rect\",\n);\n```\n\n## 4. 调整状态样式\n\n常见的交互都需要节点和边通过样式变化做出反馈，例如点击选中节点/边、通过交互激活边上的交互等，都需要改变节点和边的样式，有两种方式来实现这种效果：\n\n1. 在数据上添加标志字段，在自定义 shape 过程中根据约定进行渲染；\n2. 将交互状态同原始数据和绘制节点的逻辑分开，仅更新节点。\n\n我们推荐用户使用第二种方式来实现节点的状态调整，可以通过以下方式来实现：\n\n- 在 F6 中自定义节点/边时在 `setState` 方法中进行节点状态变化的响应；\n- 通过 `graph.setItemState()` 方法来设置状态。\n\n基于 rect 扩展出一个 custom 图形，默认填充色为白色，当点击时变成红色，实现这一效果的示例代码如下：\n\n```javascript\n// 基于 rect 扩展出新的图形\nF6.registerNode(\n  \"custom\",\n  {\n    // 响应状态变化\n    setState(name, value, item) {\n      const group = item.getContainer();\n      const shape = group.get(\"children\")[0]; // 顺序根据 draw 时确定\n      if (name === \"selected\") {\n        if (value) {\n          shape.attr(\"fill\", \"red\");\n        } else {\n          shape.attr(\"fill\", \"white\");\n        }\n      }\n    },\n  },\n  \"rect\",\n);\n\n// 点击时选中，再点击时取消\ngraph.on(\"node:tap\", (ev) => {\n  const node = ev.item;\n  graph.setItemState(node, \"selected\", !node.hasState(\"selected\")); // 切换选中\n});\n```\n\nF6 并未限定节点的状态，只要你在 `setState` 方法中进行处理你可以实现任何交互，如实现放到节点上后节点逐渐变大的效果。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*JhhTSJ8PMbYAAAAAAAAAAABkARQnAQ' alt='img' width='350'/>\n\n```javascript\nF6.registerNode(\n  \"custom\",\n  {\n    // 响应状态变化\n    setState(name, value, item) {\n      const group = item.getContainer();\n      const shape = group.get(\"children\")[0]; // 顺序根据 draw 时确定\n      if (name === \"running\") {\n        if (value) {\n          shape.animate(\n            {\n              r: 20,\n            },\n            {\n              repeat: true,\n              duration: 1000,\n            },\n          );\n        } else {\n          shape.stopAnimate();\n          shape.attr(\"r\", 10);\n        }\n      }\n    },\n  },\n  \"circle\",\n);\n\ngraph.on(\"node:tap\", (ev) => {\n  const node = ev.item;\n  graph.setItemState(node, \"running\", true);\n});\n\ngraph.on(\"node:dbltap\", (ev) => {\n  const node = ev.item;\n  graph.setItemState(node, \"running\", false);\n});\n```\n\n## 5. 使用 DOM 自定义节点\n\n> 小程序不支持该特性，且仅在 Graph 的 `renderer` 为 `'svg'` 时可以使用 DOM 自定义节点。\n\n这里，我们演示使用 DOM 自定义一个名为 `'dom-node'` 的节点。在 `draw` 方法中使用 `group.addShape` 增加一个 `'dom'` 类型的图形，并设置其 `html` 为 DOM 的 `html` 值。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VgQlQK1MdbIAAAAAAAAAAABkARQnAQ' alt='img' width='120'/>\n\n```javascript\nF6.registerNode(\n  'dom-node',\n  {\n    draw: (cfg: ModelConfig, group: Group) => {\n      return group.addShape('dom', {\n        attrs: {\n          width: cfg.size[0],\n          height: cfg.size[1],\n          // 传入 DOM 的 html\n          html: `\n        <div style=\"background-color: #fff; border: 2px solid #5B8FF9; border-radius: 5px; width: ${\n          cfg.size[0] - 5\n        }px; height: ${cfg.size[1] - 5}px; display: flex;\">\n          <div style=\"height: 100%; width: 33%; background-color: #CDDDFD\">\n            <img alt=\"img\" style=\"line-height: 100%; padding-top: 6px; padding-left: 8px;\" src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\" width=\"20\" height=\"20\" />\n          </div>\n          <span style=\"margin:auto; padding:auto; color: #5B8FF9\">${cfg.label}</span>\n        </div>\n          `,\n        },\n        draggable: true,\n      });\n    },\n  },\n  'single-node',\n);\n```\n\n上面的代码自定义了一个名为 `'dom-node'` 的带有 DOM 的节点。值得注意的是，F6 需要用户为自定义节点中的图形设置 `name` 和 `draggable`。其中，`name` 可以是不唯一的任意值。`draggable` 为 `true` 是表示允许该图形响应拖拽事件，只有 `draggable: true` 时，图上的交互行为 `'drag-node'` 才能在该图形上生效。\n\n现在，我们使用下面的数据输入就会绘制出带有 `'dom-node'` 节点的图。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*coxYTo3zEecAAAAAAAAAAABkARQnAQ' alt='img' width='300'/>\n\n```javascript\nconst data = {\n  nodes: [\n    { id: 'node1', x: 50, y: 100 },\n    { id: 'node2', x: 150, y: 100 },\n  ],\n  edges: [(source: 'node1'), (target: 'node2')],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n  defaultNode: {\n    type: 'dom-node',\n    size: [120, 40],\n  },\n});\ngraph.data(data);\ngraph.render();\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> F6 的节点/边事件不支持 DOM 类型的图形。如果需要为 DOM 节点绑定事件，请使用原生 DOM 事件。例如：\n\n```javascript\nF6.registerNode(\n  'dom-node',\n  {\n    draw: (cfg: ModelConfig, group: Group) => {\n      return group.addShape('dom', {\n        attrs: {\n          width: cfg.size[0],\n          height: cfg.size[1],\n          // 传入 DOM 的 html，带有原生 onclick 事件\n          html: `\n        <div onclick=\"alert('Hi')\" style=\"background-color: #fff; border: 2px solid #5B8FF9; border-radius: 5px; width: ${\n          cfg.size[0] - 5\n        }px; height: ${cfg.size[1] - 5}px; display: flex;\">\n          <div style=\"height: 100%; width: 33%; background-color: #CDDDFD\">\n            <img alt=\"img\" style=\"line-height: 100%; padding-top: 6px; padding-left: 8px;\" src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\" width=\"20\" height=\"20\" />\n          </div>\n          <span style=\"margin:auto; padding:auto; color: #5B8FF9\">${cfg.label}</span>\n        </div>\n          `,\n        },\n        draggable: true,\n      });\n    },\n  },\n  'single-node',\n);\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/defaultNode.zh.md",
    "content": "---\ntitle: 节点总览\norder: 0\n---\n\nF6 的内置节点包括 circle，rect，ellipse，diamond，triangle，star，image，modelRect，donut。这些内置节点的默认样式分别如下图所示。<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FY3RTbDCz_8AAAAAAAAAAABkARQnAQ' width='750' height='100' alt='img'/> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NRJ7RpkMPNsAAAAAAAAAAAAAARQnAQ' width='50' alt='img'/>\n\n本文将概述 F6 中的各个内置节点类型、内置节点的通用属性、配置方法。各类型节点详细配置项及配置方法见本目录下相应文档。\n\n## 内置节点类型说明\n\n下面表格中显示了内置的各类节点，同时对一些特殊的字段进行了说明：\n\n| 名称      | 描述                                                                                                                                                                                                                                                                                                                                 | 默认示例                                                                                                                                                                                                                                            |\n| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| circle    | 圆形：<br />- `size` 是单个数字，表示直径<br />- 圆心位置对应节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 更多字段见 [Circle](/zh/docs/manual/middle/elements/nodes/built-in/circle) 节点教程<br />                                                                                           | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*H9TrTIiUEegAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| rect      | 矩形：<br />- `size` 是数组，例如：[100, 50]<br />- 矩形的中心位置是节点的位置，而不是左上角<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 更多字段见 [Rect](/zh/docs/manual/middle/elements/nodes/built-in/rect) 节点教程<br />                                                                          | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SrlHQ5dcCoMAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| ellipse   | 椭圆：<br />- `size` 是数组，表示椭圆的长轴直径和短轴直径<br />- 椭圆的圆心是节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 更多字段见 [Ellipse](/zh/docs/manual/middle/elements/nodes/built-in/ellipse) 节点教程<br />                                                                         | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*RjdlRbuocDIAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| diamond   | 菱形：<br />- `size` 是数组，表示菱形的宽和高<br />- 菱形的中心位置是节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 更多字段见 [Diamond](/zh/docs/manual/middle/elements/nodes/built-in/diamond) 节点教程<br />                                                                                 | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EjiPRJacFTEAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| triangle  | 三角形：<br />- `size` 是数组，表示三角形的底和高<br />- 三角形的中心位置是节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点下方<br />- 更多字段见 [Triangle](/zh/docs/manual/middle/elements/nodes/built-in/triangle) 节点教程<br />                                                                         | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*_HqXTadbhzAAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| star      | 星形：<br />- `size` 是单个数字，表示星形的大小<br />- 星星的中心位置是节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 更多字段见 [Star](/zh/docs/manual/middle/elements/nodes/built-in/star) 节点教程<br />                                                                                     | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*_euwQpARvhMAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| image     | 图片：<br />- `size` 是数组，表示图片的宽和高<br />- 图片的中心位置是节点位置<br />- `img` 图片的路径，也可以在 `style` 里面设置<br />- `color` 字段不生效<br />- 标签文本默认在节点下方<br />- 更多字段见 [Image](/zh/docs/manual/middle/elements/nodes/built-in/image) 节点教程<br />                                              | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*gtNxQY2RvMwAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>                                                                                                                               |\n| modelRect | 卡片：<br />- `size` 是数组，表示卡片的宽和高<br />- 卡片的中心位置是节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 若有  `description` 字段则显示在标签文本下方显示  `description` 内容<br />- 更多字段见 [ModelRect](/zh/docs/manual/middle/elements/nodes/built-in/modelRect) 节点教程<br /> | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*MqR9QKfimxUAAAAAAAAAAABkARQnAQ' width=100 alt='img'/><br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9HKrSKtmNGQAAAAAAAAAAABkARQnAQ' width=100 alt='img'/> |\n| donut     | 圆形：<br />- `size` 是单个数字，表示直径<br />- 圆心位置对应节点的位置<br />- `color` 字段默认在描边上生效<br />- 标签文本默认在节点中央<br />- 必须指定合法的 `donutAttrs` 字段<br />- 更多字段见 [Donut](/zh/docs/manual/middle/elements/nodes/built-in/donut) 节点教程<br />                                                     | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*NRJ7RpkMPNsAAAAAAAAAAAAAARQnAQ' width=50 alt='img'/>                                                                                                                               |\n\n## 节点的通用属性\n\n所有内置的节点支持的通用属性：\n\n| 名称         | 是否必须 | 类型           | 备注                                                                                                                            |\n| ------------ | -------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| id           | true     | String         | 节点唯一 ID，**必须**是唯一的 string                                                                                            |\n| x            | false    | Number         | x 坐标                                                                                                                          |\n| y            | false    | Number         | y 坐标                                                                                                                          |\n| type         | false    | String         | 指定节点类型，内置节点类型名称或自定义节点的名称。默认为 `'circle'`                                                             |\n| size         | false    | Number / Array | 节点的大小                                                                                                                      |\n| anchorPoints | false    | Array          | 指定边连入节点的连接点的位置（相对于该节点而言），可以为空。例如: `[0, 0]`，代表节点左上角的锚点，`[1, 1]`,代表节点右下角的锚点 |\n| style        | false    | Object         | 节点的样式属性。                                                                                                                |\n| label        | false    | String         | 文本文字                                                                                                                        |\n| labelCfg     | false    | Object         | 文本配置项                                                                                                                      |\n\n### 样式属性 style\n\nObject 类型。通过 `style` 配置来修改节点的填充色、边框颜色、阴影等属性。下表是 `style` 对象中常用的配置项：\n\n| 名称          | 是否必须 | 类型     | 备注                          |\n| ------------- | -------- | -------- | ----------------------------- |\n| fill          | false    | String   | 节点填充色                    |\n| stroke        | false    | String   | 节点的描边颜色                |\n| lineWidth     | false    | Number   | 描边宽度                      |\n| lineDash      | false    | Number[] | 描边虚线，数组代表实、虚长度  |\n| shadowColor   | false    | String   | 阴影颜色                      |\n| shadowBlur    | false    | Number   | 阴影范围                      |\n| shadowOffsetX | false    | Number   | 阴影 x 方向偏移量             |\n| shadowOffsetY | false    | Number   | 阴影 y 方向偏移量             |\n| opacity       | false    | Number   | 设置绘图的当前 alpha 或透明值 |\n| fillOpacity   | false    | Number   | 设置填充的 alpha 或透明值     |\n\n下面代码演示在实例化图时全局配置方法中配置 `style`：\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // ... 其他属性\n    style: {\n      fill: '#steelblue',\n      stroke: '#eaff8f',\n      lineWidth: 5,\n      // ... 其他属性\n    },\n  },\n});\n```\n\n### 标签文本 label 及其配置  labelCfg\n\n`label` String 类型。标签文本的文字内容。<br />`labelCfg` Object 类型。配置标签文本。下面是 `labelCfg` 对象中的常用配置项：\n\n| 名称     | 是否必须 | 类型   | 备注                                                                                                                                                                           |\n| -------- | -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| position | false    | String | 文本相对于节点的位置，目前支持的位置有：`'center'`，`'top'`，`'left'`，`'right'`，`'bottom'`。默认为 `'center'`。modelRect 节点不支持该属性                                    |\n| offset   | false    | Number | 文本的偏移，`position` 为 `'bottom'` 时，文本的上方偏移量；`position` 为 `'left'` 时，文本的右方偏移量；以此类推在其他 `position` 时的情况。modelRect 节点的 `offset` 为左边距 |\n| style    | false    | Object | 标签的样式属性。                                                                                                                                                               |\n\n上表中的标签的样式属性 `style` 的常用配置项如下：\n\n| 名称                                                                                                  | 是否必须 | 类型   | 备注         |\n| ----------------------------------------------------------------------------------------------------- | -------- | ------ | ------------ |\n| fill                                                                                                  | false    | String | 文本颜色     |\n| stroke                                                                                                | false    | String | 文本描边颜色 |\n| lineWidth                                                                                             | false    | Number | 文本描边粗细 |\n| opacity                                                                                               | false    | Number | 文本透明度   |\n| fontFamily                                                                                            | false    | String | 文本字体     |\n| fontSize                                                                                              | false    | Number | 文本字体大小 |\n| ... 节点标签与边标签样式属性相同，统一整理在 [Text 图形 API](/zh/docs/api/shapeProperties/#文本-text) |          |        |              |\n\n下面代码演示在实例化图时全局配置方法中配置  `label` 和  `labelCfg`。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    // ... 其他属性\n    label: 'node-label',\n    labelCfg: {\n      position: 'bottom',\n      offset: 10,\n      style: {\n        fill: '#666',\n      },\n    },\n  },\n});\n```\n\n## 节点的配置方法\n\n配置节点的方式有三种：实例化图时全局配置，在数据中动态配置，使用 `graph.node(nodeFn)` 函数配置。这几种配置方法可以同时使用，优先级：\n\n使用 `graph.node(nodeFn)` 配置 > 数据中动态配置 > 实例化图时全局配置\n\n即有相同的配置项时，优先级高的方式将会覆盖优先级低的。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 除 `id`、`label` 应当配置到每个节点数据中外，其余的 [节点的通用属性](#节点的通用属性) 以及各个节点类型的特有属性（见内置节点类型）均支持这三种配置方式。\n\n### 实例化图时全局配置\n\n用户在实例化 Graph 时候可以通过 `defaultNode` 配置节点，这里的配置是全局的配置，将会在所有节点上生效。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'circle',\n    // 其他配置\n  },\n});\n```\n\n### 在数据中动态配置\n\n如果需要为不同节点进行不同的配置，可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据，也可以通过遍历数据的方式写入。\n\n```javascript\nconst data = {\n  nodes: [{\n    id: 'node0',\n    size: 100,\n    type: 'rect',\n    ...    // 其他属性\n    style: {\n      ...  // 样式属性，每种节点的详细样式属性参见各节点文档\n    }\n  },{\n    id: 'node1',\n    size: [50, 100],\n    type: 'ellipse',\n    ...    // 其他属性\n    style: {\n      ...  // 样式属性，每种节点的详细样式属性参见各节点文档\n    }\n  },\n    ... // 其他节点\n  ],\n  edges: [\n    ... // 边\n  ]\n}\n```\n\n### 使用 graph.node()\n\n该方法可以为不同节点进行不同的配置。\n\n<br />**提示:**\n\n- 该方法必须**在 render 之前调用**，否则不起作用；\n- 由于该方法优先级最高，将覆盖其他地方对节点的配置，这可能将造成一些其他配置不生效的疑惑；\n- 该方法在增加元素、更新元素时会被调用，如果数据量大、每个节点上需要更新的内容多时，可能会有性能问题。\n\n```javascript\n// const data = ...\n// const graph = ...\ngraph.node((node) => {\n  return {\n    id: node.id,\n    type: \"rect\",\n    style: {\n      fill: \"blue\",\n    },\n  };\n});\n\ngraph.data(data);\ngraph.render();\n```\n\n## 示例\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: 'node_circle',\n      x: 100,\n      y: 100,\n      type: 'circle',\n      label: 'circle',\n    },\n    {\n      id: 'node_rect',\n      x: 200,\n      y: 100,\n      type: 'rect',\n      label: 'rect',\n    },\n    {\n      id: 'node-ellipse',\n      x: 330,\n      y: 100,\n      type: 'ellipse',\n      label: 'ellipse',\n    },\n    {\n      id: 'node-diamond',\n      x: 460,\n      y: 100,\n      type: 'diamond',\n      label: 'diamond',\n    },\n    {\n      id: 'node-triangle',\n      x: 560,\n      y: 100,\n      //size: 80,\n      type: 'triangle',\n      label: 'triangle',\n    },\n    {\n      id: 'node-star',\n      x: 660,\n      y: 100,\n      //size: [60, 30],\n      type: 'star',\n      label: 'star',\n    },\n    {\n      id: 'node-image',\n      x: 760,\n      y: 100,\n      size: 50,\n      type: 'image',\n      img: 'https://gw.alipayobjects.com/zos/rmsportal/XuVpGqBFxXplzvLjJBZB.svg',\n      label: 'image',\n    },\n    {\n      id: 'node-modelRect',\n      x: 900,\n      y: 100,\n      type: 'modelRect',\n      label: 'modelRect',\n    },\n  ],\n};\n\nconst graph = new F6.Graph({\n  ...\n  width: 1500,\n  height: 300,\n});\ngraph.data(data);\ngraph.render();\n```\n\n显示结果： <br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6FzARrXBsUEAAAAAAAAAAABkARQnAQ' width='750' height='100' alt='img'/>\n\n- triangle 节点和 image 节点的标签文本默认位置为：`position:'bottom'` ，其他节点文本的默认位置都为：`position: 'center'`；\n\n### 调整节点配置\n\n下面演示通过将配置写入数据的方式，调整 `id` 为 `'node-ellipse'` 的椭圆节点的文本位置，颜色和样式。将下面代码替换上面代码中 `id` 为  `'node-ellipse'` 的节点数据即可生效。\n\n```\n{\n  id: 'node-ellipse',\n  x: 330,\n  y: 100,\n  type: 'ellipse',\n  size: [60, 30],\n  label: 'ellipse',\n  labelCfg: {\n    position: 'bottom',\n    offset: 5\n  },\n  style: {\n    fill: '#fa8c16',\n    stroke: '#000',\n    lineWidth: 2\n  }\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*fQ9yRYlo6zwAAAAAAAAAAABkARQnAQ' width='750' height='100' alt='img'/>\n\n再为  `id` 为 `'node-modelRect'` 的 modelRect 节点添加描述文字，使用下面代码替换  `id` 为  `'node-modelRect'` 的节点数据即可得到带有内容为 '描述文本 xxxxxxxxxxx' 的 modelRect 节点。\n\n```\n{\n  id: 'node-modelRect',\n  x: 900,\n  y: 100,\n  description: '描述文本xxxxxxxxxxx',\n  type: 'modelRect',\n  label: 'modelRect'\n}\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OnuCTYqfXKgAAAAAAAAAAABkARQnAQ' width='750' height='100' alt='img'/>\n\n## 相关阅读\n\n- [状态 State](/zh/docs/manual/middle/states/state) —— 交互过程中的样式变化。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/nodes/jsx-node.zh.md",
    "content": "---\ntitle: 使用类 JSX 语法定义 F6 节点\norder: 4\n---\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 小程序不支持\n\n用户以使用类似 JSX 的语法来定义节点。只需要在使用 F6.registerNode 自定义节点时，将第二个参数设置为字符串或一个返回值为 `string` 的 `function`。\n\n#### 基础语法\n\n```\n<[group|shape] [key]=\"value\" style={{ [key]: value }}>\n  <[more tag] /> ...\n  <text>value</text>\n</[group|shape]>\n```\n\n基础语法和大家熟悉的 HTML 标记语言基本相同，通过标签名来使用 shape 或者 group，同时定义 shape 需要填写 shape 的各个 attributes，而定义形状样式的 attrs 则由 style 属性来进行表达。style 里面的结构是一个 Object，对象的值可以是字符串，数字等 JSON 支持的数据类型（注意，这里不能够是函数，函数只会导致解析错误）。\n\n自定义节点的类型和 style 参考：https://f6.antv.vision/zh/docs/api/shapeProperties 其中，为了相对定位，我们新加入了 marginTop 和 marginLeft 来定义左边和上面的间隔。\n\n#### 推荐用法\n\n- 在最外层包裹 `group` 标签，保证节点里面图形树结构完整\n- 字符串最好使用单引号包裹，以免遇到解析错误\n- `style` 中随 node 变化的变量推荐使用 \\${} 的模板语法加入\n- 图形内的相对定位推荐使用 `marginTop` 和 `marginLeft` 进行设置，`x` 与 `y` 会破坏层级关系定位\n- 如果涉及到需要横向排列的元素，在上一个元素使用`next: inline`来实现下一个元素跟随在上个元素后方\n\n#### 支持的标签\n\n使用类 JSX 语法来定义 F6 节点时，支持使用以下的标签：\n\n- `<group />`\n- `<rect />`\n- `<circle />`\n- `<text />`\n- `<path />`\n- `<line />`\n- `<points />`\n- `<polygon />`\n- `<polyline />`\n- `<image />`\n\n使用标签的形式来定义节点，所有的样式属性都写到 style 里面，name、keyShape 等和 style 同级，所支持的属性和 addShape 中完全一致。\n\n**特别说明**：使用类 HTML 语法定义节点时，style 里面属性不支持 function，因此使用类 HTML 语法定义节点时，目前不支持 marker 标签。\n\n#### 案例\n\n我们先来看一下，使用类 JSX 语法来定义一个简单的矩形。\n\n```javascript\nF6.registerNode(\n  \"rect-xml\",\n  (cfg) => `\n  <rect style={{\n    width: 100, height: 20, fill: '#1890ff', stroke: '#1890ff', radius: [6, 6, 0, 0]\n  }} keyshape=\"true\" name=\"test\">\n    <text style={{ \n\t\t\tmarginTop: 2, \n\t\t\tmarginLeft: 50, \n      textAlign: 'center', \n      fontWeight: 'bold', \n      fill: '#fff' }} \n\t\t\tname=\"title\">${cfg.label || cfg.id}</text>\n    <polygon style={{\n      points:[[ 30, 30 ], [ 40, 20 ], [ 30, 50 ], [ 60, 100 ]],\n          fill: 'red'\n    }} />\n        <polyline style={{ points: [[ 30, 30 ], [ 40, 20 ], [ 60, 100 ]] }} />\n        <image style={{ img: 'https://gw.alipayobjects.com/zos/antfincdn/FLrTNDvlna/antv.png', width: 48, height: 48, marginTop: 100 }} />\n  </rect>\n`,\n);\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*E3UGRq1m-wYAAAAAAAAAAAAAARQnAQ' />\n\n我们再来看一个稍微复杂的案例。\n\n```javascript\nconst percentageBar = ({ width, used, height = 12 }) => `\n  <rect style={{\n    marginLeft: 10,\n    marginTop: 3,\n    width: ${width},\n    height: ${height},\n    fill: '#fff',\n    stroke: '#1890ff'\n  }} name=\"body\" >\n    <rect style={{\n      marginLeft: 10,\n      width: ${(width / 100) * used},\n      height: ${height},\n      fill: '#1890ff',\n      stroke: '#1890ff'\n    }}/>\n  </rect>\n`;\n\nconst textXML = (cfg) => `\n<group>\n  <rect style={{\n    width: 100, height: 20, fill: '#1890ff', stroke: '#1890ff', radius: [6, 6, 0, 0]\n  }}>\n    <text style={{ marginTop: 2, marginLeft: 50, \n\t\t\ttextAlign: 'center',\n\t\t\tfontWeight: 'bold', \n\t\t\tfill: '#fff' }}>${cfg.id}</text>\n  </rect>\n  <rect style={{ width: 100, height: 80, fill: 'rgba(24,144,255,0.15)', \n\t\tradius: [0, 0, 6, 6] }} \n\t\tkeyshape=\"true\" \n\t\tcursor=\"move\">\n    <text style={{marginLeft: 10 ,fill: \"red\"}}>${FULL}</text>\n    <text style={{ marginTop: 5, marginLeft: 10, fill: '#333'}}>${\n      cfg.metric\n    }: </text>\n    <text style={{\n      marginTop: 1,\n      marginLeft: ${cfg.cpuUsage * 0.8},\n      fontSize: 10,\n      fill: '#1890ff',\n    }}>${cfg.cpuUsage}%</text>\n    ${percentageBar({ width: 80, used: cfg.cpuUsage })}\n  </rect>\n</group>\n`;\n\nF6.registerNode(\"test\", {\n  jsx: textXML,\n});\n```\n\n效果如下图所示：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*PM5zTa1u1usAAAAAAAAAAAAAARQnAQ' />\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/overview.zh.md",
    "content": "---\ntitle: 图元素总览\norder: 0\n---\n\n图的元素（Item）包含图上的节点 Node 、边 Edge 和 Combo 三大类。每个图元素由一个或多个 [图形（Shape）](/zh/docs/manual/middle/elements/shape/shape-keyshape) 组成，且都会有自己的唯一关键图形（keyShape）。F6 内置了一系列具有不同基本图形样式的节点/边/ Combo，例如，节点可以是圆形、矩形、图片等。F6 中所有内置的元素样式详见 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode)，[内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)，[内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo)。除了使用内置的节点/边/ Combo 外，F6 还允许用户通过自己搭配和组合 shape 进行节点/边/ Combo 的自定义，详见 [自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)，[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)，[自定义 Combo](/zh/docs/manual/middle/elements/combos/custom-combo)。\n\n图元素具有公共的通用属性和通用方法。图元素的属性包括：\n\n- 样式属性，通过 `style` 字段对象进行配置，和元素的关键图形相关，例如 `fill`，`stroke`。可在[元素状态](/zh/docs/manual/middle/states/state)改变时被改变。\n- 其他属性，例如 `id`、`type`，不能在元素状态改变是进行改变，可通过 [graph.updateItem](/zh/docs/api/graphFunc/item#graphupdateitemitem-model-stack) 进行手动更新。完整的元素属性列表参考：[元素配置项](/zh/docs/api/Items/itemProperties)。除了各类元素共有的通用属性外，每种节点/边/ Combo 都有各自的特有属性。\n\n图元素实例上具有对元素进行更新、销毁、获取属性、修改状态等[通用方法](/zh/docs/api/Items/itemMethods)，同时，对于实例的变更也可以通过调用 [graph](/zh/docs/api/Graph) 上的方法进行。\n\n本章对三大类图元素的通用属性和方法进行了概览性介绍，每种图元素（节点/边/ Combo）各自的属性和使用方法将在后面章节中详述。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/shape/graphics-group.zh.md",
    "content": "---\ntitle: 图形分组 Group\norder: 2\n---\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span> <br /> 图形分组 Group 与 [节点分组 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo) 属于不同层次的概念。\n\n- 图形分组针对 [图形 Shape](/zh/docs/manual/middle/elements/shape/shape-keyshape) 层次的分组；\n- [节点分组 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo)  是针对 [节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 的分组，与数据结构中的层次、分组对应。\n\n<br />\n\n## 什么是图形分组 Group\n\n图形分组 group 类似于 <a href='https://developer.mozilla.org/zh-CN/docs/Web/SVG/Element/g' target='_blank'>SVG 中的 `<g>` 标签</a>：元素  `g`  是用来组合图形对象的容器。在 group  上添加变换（例如剪裁、旋转、放缩、平移等）会应用到其所有的子元素上。在 group  上添加属性（例如颜色、位置等）会被其所有的子元素继承。此外， group 可以多层嵌套使用，因此可以用来定义复杂的对象。\n\n在 F6 中，Graph 的一个实例中的所有节点属于同一个变量名为 `nodeGroup` 的 group，所有的边属于同一个变量名为 `edgeGroup` 的 group。节点 group 在视觉上的层级（zIndex）高于边 group，即所有节点会绘制在所有边的上层。<br />如下图（左）三个节点属于  `nodeGroup` ，两条边属于 `edgeGroup` ， `nodeGroup`  层级高于 `edgeGroup` ，三个节点绘制在两条边的上层。下图（右）是（左）图的节点降低透明度后的效果，可以更清晰看到边绘制在节点下方。<br />\n\n![image.png](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*oqKUSoRWMrcAAAAAAAAAAABkARQnAQ)![image.png](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cudnTqD-g_4AAAAAAAAAAABkARQnAQ)\n\n> （左）节点和边的图形分组 Group 演示。（右）给左图的节点降低了透明度。\n\n## 何时使用图形分组 Group\n\n[自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)、[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)时将会涉及到图形分组 Group 的概念。图形分组 Group 方便了用户对节点或边上元素的组合和管理。<br />例如，如下图中的节点 A 有一个包含节点 A 中所有图形的 group，该 group 中包含了一个 circle 图形和一个文本图形。节点 B 是一个自定义节点，有一个包含节点 B 中所有图形的 group，该 group 包含了 circle 图形、rect 图形、文本图形。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GnVoSIGkXhsAAAAAAAAAAABkARQnAQ' alt='img' width='100'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*iQXZTZCX9LEAAAAAAAAAAABkARQnAQ' alt='img' width='100'/>\n\n<br />\n\n## 如何使用图形分组 Group\n\n图形分组一般会在[自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)、[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)时用到。Group 的完整实例方法请参考 [Graphics Group API](/zh/docs/api/Group)。\n\n### 获取元素的 group\n\n```javascript\n// 获取元素(节点/边/Combo)的图形对象的容器\nconst group = item.getContainer();\n\n// 等价于\nconst group = item.get(\"group\");\n```\n\n### 实例方法\n\n- addGroup(cfgs)\n\n向分组中添加新的分组。\n\n```javascript\nconst subGroup = group.addGroup({\n  id: \"rect\",\n});\n```\n\n- addShape(type, cfgs)\n\n向分组中添加新的图形。\n\n```javascript\nconst keyShape = group.addShape(\"rect\", {\n  attrs: {\n    stroke: \"red\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"rect-shape\",\n});\n```\n\n提示：在分组上添加的 `clip`， `transform` 等会影响到该分组中的所有元素（子分组或图形）。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/shape/shape-and-properties.zh.md",
    "content": "---\ntitle: 图形 Shape 及其属性\norder: 1\n---\n\nF6 中的元素（节点/边）是**由一个或多个**[**图形 Shape**](/zh/docs/manual/middle/elements/shape/shape-keyshape) **组成**，主要通过自定义节点或自定义边时在 `draw` 方法中使用 `group.addShape` 添加，F6 中支持以下的图形 Shape：\n\n- [circle](#圆图形-circle)：圆；\n- [rect](#矩形图形-rect)：矩形；\n- [ellipse](#椭圆图形-ellipse)：椭圆；\n- [polygon](#多边形图形-polygon)：多边形；\n- [fan](#扇形图形-fan)：扇形；\n- [image](#图片图形-image)：图片；\n- [marker](#标记图形-marker)：标记；\n- [path](#路径-path)：路径；\n- [text](#文本-text)：文本；\n- [dom(svg)](#dom-svg)：DOM（图渲染方式 `renderer` 为 `'svg'` 时可用）。\n\n## 各图形 Shape 的通用属性\n\n| 属性名        | 含义                               | 备注                           |\n| ------------- | ---------------------------------- | ------------------------------ |\n| fill          | 设置用于填充绘画的颜色、渐变或模式 | 对应 Canvas 属性 `fillStyle`   |\n| stroke        | 设置用于笔触的颜色、渐变或模式     | 对应 Canvas 属性 `strokeStyle` |\n| lineWidth     | 描边宽度                           |                                |\n| lineDash      | 描边虚线                           | Number[] 类型代表实、虚长度    |\n| shadowColor   | 设置用于阴影的颜色                 |                                |\n| shadowBlur    | 设置用于阴影的模糊级别             | 数值越大，越模糊               |\n| shadowOffsetX | 设置阴影距形状的水平距离           |                                |\n| shadowOffsetY | 设置阴影距形状的垂直距离           |                                |\n| opacity       | 设置绘图的当前 alpha 或透明值      | 对应 Canvas 属性 `globalAlpha` |\n| fillOpacity   | 设置填充的 alpha 或透明值          |                                |\n\n### 用法\n\n```javascript\ngroup.addShape(\"rect\", {\n  attrs: {\n    fill: \"red\",\n    shadowOffsetX: 10,\n    shadowOffsetY: 10,\n    shadowColor: \"blue\",\n    shadowBlur: 10,\n    opacity: 0.8,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"rect-shape\",\n});\n```\n\n## 各图形 Shape 的通用方法\n\n### attr()\n\n设置或获取实例的绘图属性。\n\n### attr(name)\n\n获取实例的属性值。\n\n```\nconst width = shape.attr('width');\n```\n\n### attr(name, value)\n\n更新实例的单个绘图属性。\n\n### attr({...})\n\n批量更新实例绘图属性。\n\n```\nrect.attr({\n    fill: '#999',\n    stroke: '#666'\n});\n```\n\n## 圆图形 Circle\n\n### 属性\n\n| 属性名 | 含义          |\n| ------ | ------------- |\n| x      | 圆心的 x 坐标 |\n| y      | 圆心的 y 坐标 |\n| r      | 圆的半径      |\n\n### 用法\n\n```javascript\ngroup.addShape(\"circle\", {\n  attrs: {\n    x: 100,\n    y: 100,\n    r: 50,\n    fill: \"blue\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"circle-shape\",\n});\n```\n\n## 矩形图形 Rect\n\n### 属性\n\n| 属性名 | 含义                | 备注                                                                                                                                                                                                                                 |\n| ------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| x      | 矩形左上角的 x 坐标 |                                                                                                                                                                                                                                      |\n| y      | 矩形左上角的 y 坐标 |                                                                                                                                                                                                                                      |\n| width  | 矩形的宽度          |                                                                                                                                                                                                                                      |\n| height | 矩形的高度          |                                                                                                                                                                                                                                      |\n| radius | 定义圆角            | 支持整数或数组形式， 分别对应左上、右上、右下、左下角的半径：<br />- radius 缩写为 1 或 [ 1 ] 相当于 [ 1, 1, 1, 1 ]<br />- radius 缩写为 [ 1, 2 ] 相当于 [ 1, 2, 1, 2 ]<br />- radius 缩写为 [ 1, 2, 3 ] 相当于 [ 1, 2, 3, 2 ]<br /> |\n\n### 用法\n\n```javascript\ngroup.addShape(\"rect\", {\n  attrs: {\n    x: 150,\n    y: 150,\n    width: 150,\n    height: 150,\n    stroke: \"black\",\n    radius: [2, 4],\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"rect-shape\",\n});\n```\n\n## 椭圆图形 Ellipse\n\n### 属性\n\n| 属性名 | 含义          |\n| ------ | ------------- |\n| x      | 圆心的 x 坐标 |\n| y      | 圆心的 y 坐标 |\n| rx     | 水平半径      |\n| ry     | 垂直半径      |\n\n### 用法\n\n```javascript\ngroup.addShape(\"ellipse\", {\n  attrs: {\n    x: 100,\n    y: 100,\n    rx: 50,\n    ry: 50,\n    fill: \"blue\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"ellipse-shape\",\n});\n```\n\n## 多边形图形 Polygon\n\n### 属性\n\n| 属性名 | 含义                 | 备注     |\n| ------ | -------------------- | -------- |\n| points | 多边形的所有端点坐标 | 数组形式 |\n\n### 用法\n\n```javascript\ngroup.addShape(\"polygon\", {\n  attrs: {\n    points: [\n      [30, 30],\n      [40, 20],\n      [30, 50],\n      [60, 100],\n    ],\n    fill: \"red\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"polygon-shape\",\n});\n```\n\n## 图片图形 Image\n\n### 属性\n\n| 属性名 | 含义                | 备注                                                 |\n| ------ | ------------------- | ---------------------------------------------------- |\n| x      | 图片左上角的 x 坐标 |                                                      |\n| y      | 图片左上角的 y 坐标 |                                                      |\n| width  | 图片宽度            |                                                      |\n| height | 图片高度            |                                                      |\n| img    | 图片源              | F6 支持多种格式的图片：url、ImageData、Image、canvas |\n\n### 用法\n\n```javascript\ngroup.addShape(\"image\", {\n  attrs: {\n    x: 0,\n    y: 0,\n    img: \"https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"image-shape\",\n});\n```\n\n## 标记图形 Marker\n\n### 属性\n\n| 属性名 | 含义          | 备注                                                                                                                                                     |\n| ------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| x      | 中心的 x 坐标 |                                                                                                                                                          |\n| y      | 中心的 y 坐标 |                                                                                                                                                          |\n| r      | 形状半径      |                                                                                                                                                          |\n| symbol | 指定形状      | 内置了一些常用形状，如圆形 `circle` ， 矩形  `square` ， 菱形  `diamond` ，三角形  `triangle` ， 倒三角形 `triangle-down` ，也可以是自定义的 path 路径。 |\n\n### 用法\n\n```javascript\ngroup.addShape(\"marker\", {\n  attrs: {\n    x: 10,\n    y: 10,\n    r: 10,\n    symbol: function (x, y, r) {\n      return [[\"M\", x, y], [\"L\", x + r, y + r], [\"L\", x + r * 2, y], [\"Z\"]];\n    },\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"marker-shape\",\n});\n```\n\n## 路径 Path\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span> 当边太细交互不易命中时，请设置 `lineAppendWidth` 属性值。\n\n### 属性\n\n| 属性名          | 含义                               | 备注                                                                                                                                                           |\n| --------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| path            | 线条路径                           | 可以是 String 形式，也可以是线段的数组。                                                                                                                       |\n| startArrow      | 起始端的箭头                       | 为 `true` 时在边的结束端绘制默认箭头，为 `false` 时不绘制结束端箭头。也可以是一个通过 path 自定义的箭头                                                        |\n| endArrow        | 末尾端的箭头                       | 为 `true` 时在边的开始端绘制默认箭头，为 `false` 时不绘制开始端箭头。也可以是一个通过 path 自定义的箭头                                                        |\n| lineAppendWidth | 边的击中范围                       | 提升边的击中范围，扩展响应范围，数值越大，响应范围越广                                                                                                         |\n| lineCap         | 设置线条的结束端点样式             |                                                                                                                                                                |\n| lineJoin        | 设置两条线相交时，所创建的拐角形状 |                                                                                                                                                                |\n| lineWidth       | 设置当前的线条宽度                 |                                                                                                                                                                |\n| miterLimit      | 设置最大斜接长度                   |                                                                                                                                                                |\n| lineDash        | 设置线的虚线样式，可以指定一个数组 | 一组描述交替绘制线段和间距（坐标空间单位）长度的数字。 如果数组元素的数量是奇数， 数组的元素会被复制并重复。例如， [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。 |\n\n### 用法\n\n```javascript\ngroup.addShape(\"path\", {\n  attrs: {\n    startArrow: {\n      // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n      path: \"M 0,0 L 20,10 L 20,-10 Z\",\n      // 箭头的偏移量，负值代表向 x 轴正方向移动\n      // d: -10,\n    },\n    endArrow: {\n      // 自定义箭头指向(0, 0)，尾部朝向 x 轴正方向的 path\n      path: \"M 0,0 L 20,10 L 20,-10 Z\",\n      // 箭头的偏移量，负值代表向 x 轴正方向移动\n      // d: -10,\n    },\n    path: [\n      [\"M\", 100, 100],\n      [\"L\", 200, 200],\n    ],\n    stroke: \"#000\",\n    lineWidth: 8,\n    lineAppendWidth: 5,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"path-shape\",\n});\n```\n\n## 文本 Text\n\n### 属性\n\n| 属性名        | 含义                               | 备注                                                                                       |\n| ------------- | ---------------------------------- | ------------------------------------------------------------------------------------------ |\n| fill          | 设置用于填充绘画的颜色、渐变或模式 | 对应 Canvas 属性 `fillStyle`                                                               |\n| stroke        | 设置用于笔触的颜色、渐变或模式     | 对应 Canvas 属性 `strokeStyle`                                                             |\n| shadowColor   | 设置用于阴影的颜色                 |                                                                                            |\n| shadowBlur    | 设置用于阴影的模糊级别             | 数值越大，越模糊                                                                           |\n| shadowOffsetX | 设置阴影距形状的水平距离           |                                                                                            |\n| shadowOffsetY | 设置阴影距形状的垂直距离           |                                                                                            |\n| opacity       | 设置绘图的当前 alpha 或透明值      | 对应 Canvas 属性 `globalAlpha`                                                             |\n| textAlign     | 设置文本内容的当前对齐方式         | 支持的属性：`center` / `end` / `left` / `right` / `start`，默认值为 `start`                |\n| textBaseline  | 设置在绘制文本时使用的当前文本基线 | 支持的属性:<br />`top` / `middle` / `bottom` / `alphabetic` / `hanging`。默认值为 `bottom` |\n| fontStyle     | 字体样式                           | 对应 `font-style`                                                                          |\n| fontVariant   | 设置为小型大写字母字体             | 对应 `font-variant`                                                                        |\n| fontWeight    | 字体粗细                           | 对应 `font-weight`                                                                         |\n| fontSize      | 字体大小                           | 对应 `font-size`                                                                           |\n| fontFamily    | 字体系列                           | 对应 `font-family`                                                                         |\n| lineHeight    | 行高                               | 对应 `line-height`                                                                         |\n\n### 用法\n\n```javascript\ngroup.addShape(\"text\", {\n  attrs: {\n    text: \"test text\",\n    x: 0,\n    y: 10,\n    fontSize: 14,\n    textAlign: \"left\",\n    textBaseline: \"middle\",\n    fill: \"#0000D9\",\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"text-shape\",\n});\n```\n\n## DOM (svg)\n\n> 仅在 Graph 的 `renderer` 为 `'svg'` 时可以使用。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span>\n\n- 只支持原生 HTML DOM，不支持各类 react、vue 组件；\n- 使用 dom 进行自定义的节点或边，不支持 F6 的交互事件，请使用原生 DOM 的交互事件。\n\n### 特殊属性\n\n| 属性名 | 含义           | 备注 |\n| ------ | -------------- | ---- |\n| html   | DOM 的 html 值 |      |\n\n### 用法\n\n```javascript\ngroup.addShape(\"dom\", {\n  attrs: {\n    width: cfg.size[0],\n    height: cfg.size[1],\n    // DOM's html\n    html: `\n    <div style=\"background-color: #fff; border: 2px solid #5B8FF9; border-radius: 5px; width: ${\n      cfg.size[0] - 5\n    }px; height: ${cfg.size[1] - 5}px; display: flex;\">\n      <div style=\"height: 100%; width: 33%; background-color: #CDDDFD\">\n        <img alt=\"img\" style=\"line-height: 100%; padding-top: 6px; padding-left: 8px;\" src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\" width=\"20\" height=\"20\" />  \n      </div>\n      <span style=\"margin:auto; padding:auto; color: #5B8FF9\">${\n        cfg.label\n      }</span>\n    </div>\n      `,\n  },\n  // must be assigned in F6. it can be any value you want\n  name: \"dom-shape\",\n  draggable: true,\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/shape/shape-keyshape.zh.md",
    "content": "---\ntitle: 图形 Shape 与 keyShape\norder: 0\n---\n\n## 图形 Shape\n\nShape 指 F6 中的图形、形状，它可以是圆形、矩形、路径等。它一般与 F6 中的节点、边、Combo 相关。**F6 中的每一种节点/边/ Combo 由一个或多个 Shape 组成。节点、边、Combo、标签文本的配置都会被体现到对应的图形上。**\n\n例如下图（左）的节点包含了一个圆形图形；下图（中）的节点含有有一个圆形和一个文本图形；下图（右）的节点中含有 5 个圆形（蓝绿色的圆和上下左右四个锚点）、一个文本图形。但每种节点/边/ Combo 都会有自己的唯一关键图形 keyShape，下图中三个节点的 keyShape 都是蓝绿色的圆，keyShape 主要用于交互检测、样式随[状态](/zh/docs/manual/middle/states/state)自动更新等，见  [keyShape](#keyshape)。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OcaaTIIu_4cAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>     <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*r5M0Sowd1R8AAAAAAAAAAABkARQnAQ' width=50 alt='img'/>      <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*pHoETad75CIAAAAAAAAAAABkARQnAQ' width=50 alt='img'/>\n\n> （左）只含有一个圆形图形的节点，keyShape 是该圆形。（中）含有圆形和文本图形的节点，keyShape 是圆形。（右）含有主要圆形、文本、上下左右四个小圆形的节点，keyShape 是圆形。\n\nF6 使用不同的 shape 组合，设计了多种内置的节点/边/ Combo 。F6 内置节点的有 'circle'， 'rect'，'ellipse'，...（详见 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode)）；内置边的有 'line'，'polyline'，'cubic'，...（详见 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge)）；内置 Combo 有 'circle'，'rect'，()详见 [内置 Combo](/zh/docs/manual/middle/elements/combos/defaultCombo)）。\n\n除了使用内置的节点/边/ Combo 外，F6 还允许用户通过自己搭配和组合 shape 进行节点/边/ Combo 的自定义，详见 [自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)，[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)，[自定义 Combo](/zh/docs/manual/middle/elements/combos/custom-combo)。\n\n## KeyShape\n\n如上所述，每一种节点/边/ Combo 都有一个唯一的关键图形 keyShape。keyShape 是在节点/边/ Combo 的 `draw()` 方法或 `drawShape()` 方法中返回的图形对象。它有两个主要特点：\n\n### 响应样式\n\n内置节点/边/ Combo 配置项中的 `style` 只体现在它的 keyShape 上。而内置节点/边/ Combo 的状态样式 （图实例的 `nodeStateStyles` / `edgeStateStyles` / `comboStateStyles` 或元素自身的 `stateStyles`) 中需要体现在 keyShape 或其他图形上的写法有所不同，详见 [配置状态样式](/zh/docs/manual/middle/states/state#配置-state-样式)。\n\n想要更自由地响应样式（绘制或状态变化时），可以 [自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node) / [自定义边](/zh/docs/manual/middle/elements/edges/custom-edge) / [自定义 Combo](/zh/docs/manual/middle/elements/combos/custom-combo)。\n\n#### 示例\n\n该示例使用了内置 rect 节点，节点的 keyShape 是中间的 rect，其他 Shape 包括上下左右四个 circle 以及一个 text。代码设置了节点的样式 `style`，仅在 rect 上生效，其他 Shape 都以默认样式渲染。该节点上的其他图形需要使用其他配置项进行配置。例如，上下左右四个 circle 的样式需要在 `linkPoints` 中配置，文本样式需要在 `labelCfg` 中配置。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wWckTbi910IAAAAAAAAAAABkARQnAQ' alt='keyshape-demo' with='50'/>\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      label: 'rect',\n      type: 'rect',\n      style: {\n        // 仅在 keyShape 上生效\n        fill: 'lightblue',\n        stroke: '#888',\n        lineWidth: 1,\n        radius: 7,\n      },\n      linkPoints: {\n        top: true,\n        bottom: true,\n        left: true,\n        right: true,\n        // ... 四个圆的样式可以在这里指定\n      },\n      // labelCfg: {...} // 标签的样式可以在这里指定\n    },\n  ],\n};\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 300,\n  nodeStateStyles: {\n    // 各状态下的样式，平铺的配置项仅在 keyShape 上生效。需要在其他 shape 样式上响应状态变化则写法不同，参见上文提到的 配置状态样式 链接\n    tap: {\n      fillOpacity: 0.1,\n      lineWidth: 10,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.on('node:tap', (evt) => {\n  const node = evt.item;\n  // 激活该节点的 tap状态\n  graph.setItemState(node, 'tap', true);\n});\ngraph.on('node:dbltap', (evt) => {\n  const node = evt.item;\n  // 关闭该节点的 hover 状态\n  graph.setItemState(node, 'tap', false);\n});\n```\n\n### 包围盒确定\n\n**确定节点 / Combo 的包围盒（Bounding Box） —— bbox（x, y, width, height)** ，从而计算相关边的连入点（与相关边的交点）。若 keyShape 不同，节点与边的交点计算结果不同。\n\n#### 示例  \n\n本例中的一个节点由一个 rect 图形和一个带灰色描边、填充透明的 circle 图形构成。\n\n- 当节点的 keyShape 为 circle 时：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*CY7cSaMs4U0AAAAAAAAAAABkARQnAQ' width=220 alt='img'/>\n\n- 当节点的 keyShape 为 rect 时：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*upWTQLTvxGEAAAAAAAAAAABkARQnAQ' width=250 alt='img'/>\n\n## Shape 的生命周期\n\n> 当用户需要[自定义节点](/zh/docs/manual/middle/elements/nodes/custom-node)、[自定义边](/zh/docs/manual/middle/elements/edges/custom-edge)、[自定义 Combo](/zh/docs/manual/middle/elements/combos/custom-combo) 时，需要了解 Shape 的生命周期。使用内置节点/边/ Combo 则可以跳过这一部分内容。\n\n从整体来看，Shape 的生命周期分为：\n\n- 初始化渲染；\n- 更新；\n- 操作；\n- 销毁。\n\nShape 作为 Graph 上的核心元素，这几个阶段都需要考虑，但是销毁可以交给 Graph 来处理，所以在定义 Shape 时不需要考虑，仅需要考虑三个阶段即可：\n\n- 绘制：从无到有的绘制 Shape 及文本；\n- 更新：数据发生改变导致 Shape 及文本发生变化；\n- 操作：给 Shape 添加状态，如：selected，active 等。\n\n所以我们在设计自定义节点/边/ Combo 时，定义了三个方法，若需要自定义节点/边/ Combo ，需要有选择性地复写它们：\n\n- `draw(cfg, group)`: 绘制，提供了绘制的配置项（数据定义时透传过来）和图形容器，**必须**返回合理的图形作为 keyShape；\n- `update(cfg, n)`: 更新，更新时的配置项（更新的字段和原始字段的合并）和元素对象；\n- `setState(name, value, item)`: 响应节点/边/ Combo 状态的变化。\n\n关于自定义节点和边的更多方法请参考 [自定义节点与边 API](/zh/docs/api/registerItem)。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/elements/shape/transform.zh.md",
    "content": "---\ntitle: 图形或图形分组的变换\norder: 3\n---\n\n### F6 3.2\n\nF6 3.2 及以下版本中，实现变换可通过以下方式。\n\n#### transform(ts)\n\n实例变换方法。参数以数组形式提供，按顺序执行。\n\n例如画布上有以下的一个矩形实例。\n\n```javascript\nconst rect = group.addShape(\"rect\", {\n  attrs: {\n    width: 100,\n    height: 100,\n    x: 100,\n    y: 100,\n    fill: \"#9EC9FF\",\n    stroke: \"#5B8FF9\",\n    lineWidth: 3,\n  },\n  // must be assigned in F6 3.3 and later versions. it can be any value you want\n  name: \"rect-shape\",\n});\n```\n\n得到的结果如下图所示： <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lkUoTp5xXmoAAAAAAAAAAABkARQnAQ' width='200' alt='img'/>\n\n对其进行如下操作：\n\n```javascript\nrect.transform([\n  [\"t\", 10, 10], // x 方向平移 10, y 方向平移 10\n  [\"s\", 1.2], // 缩放 1.2 倍\n  [\"r\", Math.PI / 4], // 旋转 45 度\n]);\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*jN3HQbHZ4dIAAAAAAAAAAABkARQnAQ' width='200' />\n\n#### translate(x, y)\n\n实例的相对位移方法。\n\n#### move(x, y)\n\n实例的相对位移方法。\n\n#### rotate(radian)\n\n根据旋转弧度值对图形进行旋转。\n\n#### scale(sx, sy)\n\n对图形进行缩放。\n\n#### resetMatrix()\n\n清除图形实例的所有变换效果。\n\n#### getTotalMatrix()\n\n获取应用到实例上的所有变换的矩阵。\n\n### F6 3.3\n\n在 F6 3.3 及以上版本中，废弃了 Group / Canvas 上只适用于三阶矩阵的变换函数：\n\n- 🗑 平移函数 translate；\n- 🗑 移动函数 move；\n- 🗑 缩放函数 scale；\n- 🗑 旋转函数 rotate；\n- 🗑 以 (0, 0) 点为中心的旋转函数 rotateAtStart。\n\n在 F6 3.3 版本中要应用矩阵变换的效果，需要手动设置矩阵的值：\n\n- 获取当前矩阵：getMatrix()；\n- 设置矩阵：setMatrix(matrix) 或 attr('matrix', matrix)；\n- 重置矩阵：resetMatrix()。\n\n为了方面使用，我们提供了矩阵变换的工具方法：\n\n```javascript\nimport { transform } from \"@antv/matrix-util\";\n// 3*3 矩阵变换，用于二维渲染\ntransform(m, [\n  [\"t\", 100, 50], // translate (100, 50)\n  [\"r\", Math.PI], // rotate Math.PI\n  [\"s\", 2, 2], // scale 2 times at x-axis and y-axis\n]);\n```\n\n#### 示例\n\n以下方法实现了在自定义节点 example 中增加一个矩形，并将该矩形位移 `(100, 50)` 后，旋转 `Math.PI / 4`，最后在 x 方向放大 2 倍，并在 y 方向缩小 2 倍：\n\n```javascript\nimport { transform, mat3 } from \"@antv/matrix-util\";\nF6.registerNode(\"example\", {\n  drawShape: (cfg, group) => {\n    const rect = group.addShape(\"rect\", {\n      attrs: {\n        width: 100,\n        height: 100,\n        x: 100,\n        y: 100,\n        fill: \"#9EC9FF\",\n        stroke: \"#5B8FF9\",\n        lineWidth: 3,\n      },\n      // must be assigned in F6 3.3 and later versions. it can be any value you want\n      name: \"rect-shape\",\n      draggable: true,\n    });\n    const matrix = rect.getMatrix();\n\n    // 图形或分组的初始矩阵时 null，为了避免变换一个 null 矩阵，需要通过 mat3.create() 将其初始化为单位矩阵\n    if (!matrix) matrix = mat3.create();\n\n    // 3*3 矩阵变换，用于二维渲染\n    const newMatrix = transform(matrix, [\n      [\"t\", 100, 50], // translate\n      [\"r\", Math.PI / 4], // rotate\n      [\"s\", 2, 0.5], // scale\n    ]);\n\n    rect.setMatrix(newMatrix);\n  },\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/graph.zh.md",
    "content": "---\ntitle: Graph 图\norder: 1\n---\n\n## 什么是 Graph\n\n中文字“图”在大家的传统认知里指的是图画、图像，而图论与可视化中的“图”—— Graph 则有着更精确的定位：主体（objects）与关系（relationships）的组成。它甚至不局限于视觉，主体与关系的数据也可以称为图。<br />\n\n> —— 摘自 <a href='https://zhuanlan.zhihu.com/aiux-antv' target='_blank'>AntV 专栏</a>文章：<a href='https://zhuanlan.zhihu.com/p/83685690' target='_blank'>Graph Visualization · 知多少 之 《HelloWorld 图可视化》</a>。\n\n在 F6 中，Graph 对象是图的载体，它包含了图上的所有元素（节点、边等），同时挂载了图的相关操作（如交互监听、元素操作、渲染等）。<br />Graph 对象的生命周期为：初始化 —> 加载数据 —> 渲染 —> 更新 —> 销毁。\n\n在 [快速上手](/zh/docs/manual/getting-started) 中，我们简单介绍了 初始化、加载数据、渲染图 的使用方法。本文将主要介绍初始化/实例化图。\n\n## 前提代码\n\n本文的讲解将会基于下面这份内嵌 JavaScript 的 HTML 代码。该代码通过定义数据、实例化图、读取数据、渲染图等操作中完成了下图中简单的图：<br /> <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Lo6lT7SrhB8AAAAAAAAAAABkARQnAQ' width='200' alt='img'/>\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/simple?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800/>\n\n## 初始化/实例化图\n\n通过  `new F6.Graph(config)` 进行图的实例化。其中参数  `config` 是 Object 类型的图的配置项，图的大部分功能可以通过该配置项进行全局配置。如 [前提代码](#前提代码) 这样实例化图：\n\n```javascript\nconst graph = new F6.Graph({\n  ... // 指定图画布的容器 id，与第 9 行的容器对应\n  // 画布宽高\n  width: 800,\n  height: 500,\n});\n```\n\n### 必要配置项\n\n上面代码中实例化 Graph 的部分使用了三个必要的配置项：\n\n- `container`\n\n类型：String | Object。图的 DOM 容器。可以是 String，为 DOM 容器的 `id`。也可以是 Object ，为 DOM 对象。如果是小程序，则传递 null 或者不传即可。\n\n- `context`\n\n类型: Object。小程序中使用，由于无法动态创建 dom，所以需要手动给 F6 传递 canvasContext。\n\n- `width`、`height`\n\n类型：Number。图的画布的宽度和高度。\n\n### 常用配置项\n\n下面列举实例化图时常见的配置项，完整的配置项参见 [Graph API](/zh/docs/api/Graph)。\n\n#### 使用 canvas 或 svg 渲染\n\n- `renderer`\n\n类型：String；默认：'canvas'，可选项：'canvas' / 'svg' / 'mini' / 'mini-native' 。小程序可以通过 F6 组件默认繁华的 renderer 直接使用，小程序中优先会使用 native-canvas 以提升渲染性能，只有在不支持 native-canvas 的版本下才强制开启 mini 模式。mini 模式存在 worker 和 render 通信的额外成本，如果图过于复杂，不建议使用。\n\n#### 自适应画布\n\n- `fitView`\n\n类型：Boolean；默认：'false'。图是否自适应画布。\n\n- `fitViewPadding`\n\n类型：Number | Array；默认：0。图自适应画布时的四周留白像素值。`fitView` 为 `true` 时生效。\n\n- `fitCenter`\n\n类型：Boolean；默认：'false'。是否平移图使其中心对齐到画布中心。_v3.5.1 后支持。_\n\n#### 全局元素配置\n\n- `defaultNode`\n\n类型：Object。默认情况下全局节点的配置项，包括样式属性和其他属性。详见 [内置节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 教程。\n\n- `defaultEdge`\n\n类型：Object。默认情况下全局边的配置项，包括样式属性和其他属性。详见 [内置边](/zh/docs/manual/middle/elements/edges/defaultEdge) 教程。\n\n- `nodeStateStyles`\n\n类型：Object。除默认状态外的其他状态下节点的样式配置。详见 [状态 State](/zh/docs/manual/middle/states/state) 教程。\n\n- `edgeStateStyles`\n\n类型：Object。除默认状态外的其他状态下边的样式配置。详见  [状态 State](/zh/docs/manual/middle/states/state) 教程。\n\n#### 布局相关\n\n- `layout`\n\n类型：Object。若数据中不存在节点位置，则默认为随机布局。配置布局类型及其参数。详见 [使用布局 Layout](/zh/docs/manual/middle/layout/graph-layout) 教程，[图布局 API](/zh/docs/api/graphLayout/guide) 或 [树图布局 API](/zh/docs/api/treeGraphLayout/guide)。\n\n#### 交互行为相关\n\n- `modes`\n\n类型：Array。配置多种交互模式及其包含的交互事件的。详见 [交互模式 Mode](/zh/docs/manual/middle/states/mode)。\n\n#### 动画相关\n\n- `animate`\n\n类型：Boolean；默认：'false'。是否启用全局动画。启用后，布局变化时将会以动画形式变换节点位置。\n\n- `animateCfg`\n\n类型：Object。全局动画的配置项，包括动画效果、动画时长等。详见 [动画 Animation](/zh/docs/manual/middle/animation)。\n\n## 常用函数\n\n在前面的代码中使用了两个必要的函数：\n\n```javascript\n// 读取数据\ngraph.data(data);\n// 渲染图\ngraph.render();\n```\n\n- `data(data)`：读取数据源 `data` 到图实例 `graph` 中。\n- render()：渲染图。\n\nGraph 的完整函数参见 [Graph API](/zh/docs/api/Graph)。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/ai-layout.zh.md",
    "content": "---\ntitle: F6 智能布局预测\norder: 6\n---\n\n### 背景\n\n图可视分析应用中，如何选择合适的布局让每次查询的数据都能够很清晰地展示是一个不小的挑战，虽然我们可以像 Gephi 一样，把布局的配置切换交给用户来做，让用户自己切换布局、调整参数来选择合适的布局，但这样的效率显然太低。为了彻底解决布局选择的问题，F6 提供了智能布局预测的能力，预测引擎会根据查询到的数据，推荐最适合的布局，用户直接使用推荐的布局即可。\n\n### 定义\n\n智能布局是指在结合神经网络进行建模，通过大量的标注数据（标记布局分类）进行训练输出预测模型，业务场景中针对通过模型对真实的图数据进行预测，从而推荐出该数据最适合的布局分类的方法。\n\n### 预测引擎\n\n@antv/vis-predict-engine 定位为可视化预测引擎，短期内主要用于图布局的分类预测。常久来看，可视化预测引擎会支持布局配置参数预测、节点类别预测、chart 类别预测等。\n\nF6 中图布局预测的整体流程如下图所示。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6gsZTb6SvwYAAAAAAAAAAAAAARQnAQ' width='90%'>\n\n### 用法\n\nAntV 团队将图布局预测的能力封装成 NPM 包 @antv/vis-predict-engine，通过 predict 方法来预测提供的数据应该使用什么布局，基本用法如下。\n\n```\nimport F6 from '@antv/g6'\nimport { GraphLayoutPredict } from '@antv/vis-predict-engine'\nconst data = {\n    nodes: [],\n  edges: []\n}\n// predictLayout 表示预测的布局，如 force 或 radial\n// confidence 表示预测的可信度\nconst { predictLayout, confidence } = await GraphLayoutPredict.predict(data);\nconst graph = new F6.Graph({\n  // 省略其他配置\n    layout: {\n    type: predictLayout\n  }\n})\n```\n\n### 效果\n\n如下图所示，在一份医疗健康图谱中，通过智能布局预测引擎得出 \"Force\" 的布局效果最佳，通过对比实验，也符合预期。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*9W-4S6WyouMAAAAAAAAAAAAAARQnAQ' width='90%'>\n\n### Demo\n\n具体 Demo 参考这里：[AI 智能布局推荐 DEMO](/zh/docs/examples/net/aiLayout#layoutPrediction)\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/custom-layout.zh.md",
    "content": "---\ntitle: 自定义布局 Layout\norder: 6\n---\n\nF6 提供了一般图和树图的一些常用布局，使用方式参见：中级教程  [一般图布局 Layout](/zh/docs/manual/middle/layout/graph-layout)，[树图布局 Layout](/zh/docs/manual/middle/layout/tree-graph-layout)，[图布局 API](/zh/docs/api/graphLayout/guide) 或 [树图布局 API](/zh/docs/api/treeGraphLayout/guide)。当这些内置布局无法满足需求时，F6 还提供了一般图的自定义布局的机制，方便用户进行更定制化的扩展。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span> 树图暂时不支持自定义布局。\n\n本文将会通过自定义 Bigraph 布局的例子讲解自定义布局。\n\n## 自定义布局 API\n\nF6 中自定义布局的 API 如下：\n\n```javascript\n/**\n * 注册布局的方法\n * @param {string} type 布局类型，外部引用指定必须，不要与已有布局类型重名\n * @param {object} layout 布局方法\n */\nLayout.registerLayout = function(type, {\n  /**\n   * 定义自定义行为的默认参数，会与用户传入的参数进行合并\n   */\n  getDefaultCfg() {\n    return {};\n  },\n  /**\n   * 初始化\n   * @param {object} data 数据\n   */\n  init(data) {},\n  /**\n   * 执行布局\n   */\n  execute() {},\n  /**\n   * 根据传入的数据进行布局\n   * @param {object} data 数据\n   */\n  layout(data) {},\n  /**\n   * 更新布局配置，但不执行布局\n   * @param {object} cfg 需要更新的配置项\n   */\n  updateCfg(cfg) {},\n  /**\n   * 销毁\n   */\n  destroy() {},\n});\n```\n\n## 自定义布局\n\n下面，我们将讲解如何自定义布局如下图的二分图 Bigraph。二分图只存在两部分节点之间的边，同属于一个部分的节点之间没有边。我们希望布局能够对两部分节点分别进行排序，减少边的交叉。<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FksvTrdkqXgAAAAAAAAAAABkARQnAQ' alt='img' width='350'/>\n\n该二分图数据如下，节点根据 `cluster` 字段分为 了 `'part1'` 和 `'part2'`，代表二分图的两部分。\n\n```javascript\nconst data = {\n  nodes: [\n    { id: \"0\", label: \"A\", cluster: \"part1\" },\n    { id: \"1\", label: \"B\", cluster: \"part1\" },\n    { id: \"2\", label: \"C\", cluster: \"part1\" },\n    { id: \"3\", label: \"D\", cluster: \"part1\" },\n    { id: \"4\", label: \"E\", cluster: \"part1\" },\n    { id: \"5\", label: \"F\", cluster: \"part1\" },\n    { id: \"6\", label: \"a\", cluster: \"part2\" },\n    { id: \"7\", label: \"b\", cluster: \"part2\" },\n    { id: \"8\", label: \"c\", cluster: \"part2\" },\n    { id: \"9\", label: \"d\", cluster: \"part2\" },\n  ],\n  edges: [\n    { source: \"0\", target: \"6\" },\n    { source: \"0\", target: \"7\" },\n    { source: \"0\", target: \"9\" },\n    { source: \"1\", target: \"6\" },\n    { source: \"1\", target: \"9\" },\n    { source: \"1\", target: \"7\" },\n    { source: \"2\", target: \"8\" },\n    { source: \"2\", target: \"9\" },\n    { source: \"2\", target: \"6\" },\n    { source: \"3\", target: \"8\" },\n    { source: \"4\", target: \"6\" },\n    { source: \"4\", target: \"7\" },\n    { source: \"5\", target: \"9\" },\n  ],\n};\n```\n\n### 需求分析\n\n为了减少边的交叉，可以通过排序，将 `'part1'`  的节点 A 对齐到所有与 A 相连的 `'part2'` 中的节点的平均中心；同样将 `'part2'` 中的节点 a 对齐到所有与 a 相连的 `'part1'` 中的节点的平均中心。可以描述成如下过程：\n\n- Step 1：为  `'part1'`  和  `'part2'`  的节点初始化随机序号 index，都分别从 0 开始；\n- Step 2：遍历  `'part1'` 的节点，对每一个节点 A：\n  - 找到与 A 相连的属于  `'part2'`  的节点的集合 ![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-WOhQIGg9l8AAAAAAAAAAABkARQnAQ)，加和  ![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-WOhQIGg9l8AAAAAAAAAAABkARQnAQ) 中所有节点的 index，并除以 ![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-WOhQIGg9l8AAAAAAAAAAABkARQnAQ) 的元素个数，得数覆盖 A 的 index 值：![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VfXiSK1f02cAAAAAAAAAAABkARQnAQ)\n- Step 3：遍历  `'part2'` 的节点，对每一个节点 B（与  Step 2 相似）：\n  - 找到与 B 相连的属于  `'part1'`  的节点的集合 ![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GqZiSKI-nB8AAAAAAAAAAABkARQnAQ)，加和  ![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GqZiSKI-nB8AAAAAAAAAAABkARQnAQ)  中所有节点的 index，并除以 ![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GqZiSKI-nB8AAAAAAAAAAABkARQnAQ)  的元素个数，得数覆盖 B 的 index 值：![](https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*-8b2Spfb4HIAAAAAAAAAAABkARQnAQ)\n- Step 4：两部分节点分别按照节点的序号 index 进行排序，最终按照节点顺序安排节点位置。\n\n## 实现\n\n下面代码展示了自定义名为  `'bigraph-layout'` 的二分图布局，完整代码参见：<a href='/zh/docs/examples/net/layoutMechanism#customBigraph' target='_blank'>自定义布局-二分图</a>。使用该布局的方式与使用内置布局方式相同，都是在实例化图时将其配置到 `layout` 配置项中，详见：[一般图布局](/zh/docs/manual/middle/layout/graph-layout)。\n\n```javascript\nF6.registerLayout(\"bigraph-layout\", {\n  // 默认参数\n  getDefaultCfg: function getDefaultCfg() {\n    return {\n      center: [0, 0], // 布局的中心\n      biSep: 100, // 两部分的间距\n      nodeSep: 20, // 同一部分的节点间距\n      direction: \"horizontal\", // 两部分的分布方向\n      nodeSize: 20, // 节点大小\n    };\n  },\n  // 执行布局\n  execute: function execute() {\n    var self = this;\n    var center = self.center;\n    var biSep = self.biSep;\n    var nodeSep = self.nodeSep;\n    var nodeSize = self.nodeSize;\n    var part1Pos = 0,\n      part2Pos = 0;\n    // 若指定为横向分布\n    if (self.direction === \"horizontal\") {\n      part1Pos = center[0] - biSep / 2;\n      part2Pos = center[0] + biSep / 2;\n    }\n    var nodes = self.nodes;\n    var edges = self.edges;\n    var part1Nodes = [];\n    var part2Nodes = [];\n    var part1NodeMap = new Map();\n    var part2NodeMap = new Map();\n    // separate the nodes and init the positions\n    nodes.forEach(function (node, i) {\n      if (node.cluster === \"part1\") {\n        part1Nodes.push(node);\n        part1NodeMap.set(node.id, i);\n      } else {\n        part2Nodes.push(node);\n        part2NodeMap.set(node.id, i);\n      }\n    });\n\n    // 对 part1 的节点进行排序\n    part1Nodes.forEach(function (p1n) {\n      var index = 0;\n      var adjCount = 0;\n      edges.forEach(function (edge) {\n        var sourceId = edge.source;\n        var targetId = edge.target;\n        if (sourceId === p1n.id) {\n          index += part2NodeMap.get(targetId);\n          adjCount++;\n        } else if (targetId === p1n.id) {\n          index += part2NodeMap.get(sourceId);\n          adjCount++;\n        }\n      });\n      index /= adjCount;\n      p1n.index = index;\n    });\n    part1Nodes.sort(function (a, b) {\n      return a.index - b.index;\n    });\n\n    // 对 part2 的节点进行排序\n    part2Nodes.forEach(function (p2n) {\n      var index = 0;\n      var adjCount = 0;\n      edges.forEach(function (edge) {\n        var sourceId = edge.source;\n        var targetId = edge.target;\n        if (sourceId === p2n.id) {\n          index += part1NodeMap.get(targetId);\n          adjCount++;\n        } else if (targetId === p2n.id) {\n          index += part1NodeMap.get(sourceId);\n          adjCount++;\n        }\n      });\n      index /= adjCount;\n      p2n.index = index;\n    });\n    part2Nodes.sort(function (a, b) {\n      return a.index - b.index;\n    });\n\n    // 放置节点\n    var hLength =\n      part1Nodes.length > part2Nodes.length\n        ? part1Nodes.length\n        : part2Nodes.length;\n    var height = hLength * (nodeSep + nodeSize);\n    var begin = center[1] - height / 2;\n    if (self.direction === \"vertical\") {\n      begin = center[0] - height / 2;\n    }\n    part1Nodes.forEach(function (p1n, i) {\n      if (self.direction === \"horizontal\") {\n        p1n.x = part1Pos;\n        p1n.y = begin + i * (nodeSep + nodeSize);\n      } else {\n        p1n.x = begin + i * (nodeSep + nodeSize);\n        p1n.y = part1Pos;\n      }\n    });\n    part2Nodes.forEach(function (p2n, i) {\n      if (self.direction === \"horizontal\") {\n        p2n.x = part2Pos;\n        p2n.y = begin + i * (nodeSep + nodeSize);\n      } else {\n        p2n.x = begin + i * (nodeSep + nodeSize);\n        p2n.y = part2Pos;\n      }\n    });\n  },\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/graph-layout.zh.md",
    "content": "---\ntitle: 一般图布局 Layout\norder: 0\n---\n\n## 简介\n\n图布局是指图中节点的排布方式，根据图的数据结构不同，布局可以分为两类：一般图布局、树图布局。F6 为这两类图都内置了一些常用的图布局算法。使用内置的图布局可以完成[布局的参数、方法、数据的切换](/zh/docs/manual/middle/layout/layout-mechanism)等。F6 还提供了一般图布局的 [Web-Worker 机制](/zh/docs/manual/middle/layout/webworker)，在大规模图布局中使用该机制可以使布局计算不阻塞页面。\n\n除了内置布局方法外，一般图布局还支持 [自定义布局](/zh/docs/manual/middle/layout/custom-layout) 机制。\n\n事实上，F6 的布局是自由的，内置布局算法仅仅是操作了数据中节点的 `x` 和 `y` 值。因此，除了使用内置布局以及自定义的一般图布局外，用户还可以使用外部图布局算法，计算节点位置后赋值到数据中节点的 `x` 和 `y` 字段上，F6 便可以根据该位置信息进行绘制。\n\n本文将逐一介绍内置的布局算法，及其使用方式。\n\n## 一般图 Graph 布局方法总览\n\n- [Random Layout](#random)：随机布局；\n- [Force Layout](#gforce)：F6 支持的经典力导向布局，支持 GPU 并行计算；\n- [Force Layout](#force)：引用 d3 的经典力导向布局；\n- [Fruchterman Layout](#fruchterman)：Fruchterman 布局，一种力导布局；\n- [Circular Layout](#circular)：环形布局；\n- [Radial Layout](#radial)：辐射状布局；\n- [MDS Layout](#mds)：高维数据降维算法布局；\n- [Dagre Layout](#dagre)：层次布局；\n- [Concentric Layout](#concentric)：同心圆布局；\n- [Grid Layout](#grid)：网格布局；\n- [Combo Force Layout](#combo-force)，适用于带有 combo 图的力导向布局，推荐有 combo 的图使用该布局。\n\n## 配置一般图布局\n\n用户可以通过在实例化图时使用图的配置项 `layout` 指定布局方法。下面代码在实例化图时设置了布局方法为 `type: 'force'`，即经典力导向图布局。并设置了参数 `preventOverlap: true`  和 `nodeSize: 30`，表示希望节点不重叠。节点大小 `nodeSize` 用于算法中判断节点是否重叠，更多配置项见各布局的配置项。\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                      // 其他配置项\n  layout: {\n    // Object，可选，布局的方法及其配置项，默认为 random 布局。\n    type: \"force\",\n    preventOverlap: true,\n    nodeSize: 30,\n    // workerEnabled: true, // 是否启用 webworker\n    // gpuEnabled: true // 是否使用 gpu 版本的布局算法，F6 4.0 支持，目前仅支持 gForce 及 fruchterman\n    // ...                    // 其他配置\n  },\n});\n```\n\n除了每种布局方法各自的配置项外，所有布局方法都可以在上面代码的 `layout` 中配置 `workerEnabled: true` 以开启布局的 web-worker 机制。开启后图的布局计算过程将不会阻塞页面。\n\n当实例化图时没有配置布局时：\n\n- 若数据中节点有位置信息（`x` 和 `y`），则按照数据的位置信息进行绘制；\n- 若数据中节点没有位置信息，则默认使用 Random Layout 进行布局。\n\n## 一般图布局方法\n\n图布局通用 API：[Layout API](/zh/docs/api/graphLayout/guid)。\n\n### Random\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*M5FySIdhX4oAAAAAAAAAAABkARQnAQ' width='400' alt='img'/>\n\n<br />**描述**：随机布局。 <br />**API**：[Random API](/zh/docs/api/graphLayout/random) <br />**参数**：\n\n| 参数名        | 类型    | 示例         | 默认值   | 说明                                                 |\n| ------------- | ------- | ------------ | -------- | ---------------------------------------------------- |\n| center        | Array   | [ 0, 0 ]     | 图的中心 | 布局的中心                                           |\n| width         | Number  | 300          | 图的宽   |                                                      |\n| height        | Number  | 300          | 图的高   |                                                      |\n| workerEnabled | Boolean | true / false | false    | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互 |\n\n### GForce\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lX-qSqDECrIAAAAAAAAAAAAAARQnAQ' width=500 alt='img'/>\n\n<br /> **描述**：F6 支持的经典力导向布局。能够更加自由地支持设置节点质量、群组中心力等。更重要的是，它支持 GPU 并行计算。 <br /> **API**：[Force API](/zh/docs/api/graphLayout/gforce) <br /> **参数**：\n\n| 参数名                  | 类型              | 示例                                                                                                                                                                                                | 默认值    | 说明                                                                                                                                                                                                                                                             |\n| ----------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| center                  | Array             | [ 0, 0 ]                                                                                                                                                                                            | 图的中心  | 布局的中心                                                                                                                                                                                                                                                       |\n| linkDistance            | Number / Function | 示例 1: 50 <br />示例 2:<br />d => {<br />  // d 是一条边<br />  if (d.id === 'edge1') {<br />    return 100;<br />  }<br />  return 50;<br />}                                                     | 1         | 边长。可以使用回调函数的形式对不同对边定义不同边长（如示例 2）                                                                                                                                                                                                   |\n| nodeStrength            | Number / Function | 示例 1: -30 <br />示例 2:<br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return -100;<br />  }<br />  return -30;<br />} / 1000                                         | 1000      | 节点作用力，正数代表节点之间的斥力作用，负数代表节点之间的引力作用（注意与 'force' 相反）（如示例 2）                                                                                                                                                            |\n| edgeStrength            | Number / Function | 示例 1: 1 <br />示例 2:<br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 10;<br />  }<br />  return 1;<br />}                                                      | 200       | 边的作用力，默认根据节点的出入度自适应。可以使用回调函数的形式对不同对节点定义不同边作用力（如示例 2）                                                                                                                                                           |\n| preventOverlap          | Boolean           | false                                                                                                                                                                                               | false     | 是否防止重叠，必须配合属性 `nodeSize` ，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测。若未设置 `nodeSize` ，则根据节点数据中的 `size` 进行碰撞检测。若二者都未设置，则默认以 10 为节点大小进行碰撞检测                           |\n| nodeSize                | Array / Number    | 20                                                                                                                                                                                                  | undefined | 节点大小（直径）。用于碰撞检测。<br />若不指定，则根据传入的数据节点中的 `size`  字段计算。若即不指定，节点中也没有 `size`，则默认大小为 10                                                                                                                      |\n| nodeSpacing<br /><br /> | Number / Function | 示例 1 : 10<br />示例 2 : <br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />}                                                 | 0         | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ob0MQ5W8vk8AAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />`preventOverlap` 为 `true` 时生效，防止重叠时节点边缘间距的最小值。可以是回调函数，为不同节点设置不同的最小间距，如示例 2 所示<br /> |\n| minMovement             | Number            | 0.1                                                                                                                                                                                                 | 0.5       | 当一次迭代的平均移动长度小于该值时停止迭代。数字越小，布局越收敛，所用时间将越长                                                                                                                                                                                 |\n| maxIteration            | Number            | 500                                                                                                                                                                                                 | 1000      | 最大迭代次数。当迭代次数超过该值，但平均移动长度仍然没有达到 minMovement，也将强制停止迭代                                                                                                                                                                       |\n| damping                 | Number            | 0.99                                                                                                                                                                                                | 0.9       | 阻尼系数，取值范围 [0, 1]。数字越大，速度降低得越慢                                                                                                                                                                                                              |\n| maxSpeed                | Number            | 10                                                                                                                                                                                                  | 1000      | 一次迭代的最大移动长度                                                                                                                                                                                                                                           |\n| coulombDisScale         | Number            | 0.003                                                                                                                                                                                               | 0.005     | 库伦系数，斥力的一个系数，数字越大，节点之间的斥力越大                                                                                                                                                                                                           |\n| getMass                 | Function          | d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />}                                                                                 | undefined | 每个节点质量的回调函数，若不指定，则默认使用度数作为节点质量。使用方法与 `nodeSpacing` 类似，每个回调函数返回一个数值作为该节点的质量                                                                                                                            |\n| getCenter               | Function          | (d, degree) => {<br />  // d 是一个节点, degree 为该节点度数<br />  if (d.degree === 0') {<br />    return [100, 100, 10]; // x, y, 强度<br />  }<br />  return [210, 150, 5]; // x, y, 强度<br />} | undefined | 每个节点中心力的 x、y、强度的回调函数，若不指定，则没有额外中心力                                                                                                                                                                                                |\n| gravity                 | Number            | 20                                                                                                                                                                                                  | 10        | 中心力大小，指所有节点被吸引到 `center` 的力。数字越大，布局越紧凑                                                                                                                                                                                               |\n| onTick                  | Function          |                                                                                                                                                                                                     | {}        | 每一次迭代的回调函数                                                                                                                                                                                                                                             |\n| onLayoutEnd             | Function          |                                                                                                                                                                                                     | {}        | 布局完成后的回调函数                                                                                                                                                                                                                                             |\n| workerEnabled           | Boolean           | true / false                                                                                                                                                                                        | false     | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                                             |\n| gpuEnabled              | Boolean           | true / false                                                                                                                                                                                        | false     | 是否启用 GPU 并行计算，F6 4.0 支持。若用户的机器或浏览器不支持 GPU 计算，将会自动降级为 CPU 计算                                                                                                                                                                 |\n\n### Force\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*oDbHRJc5td8AAAAAAAAAAABkARQnAQ' width='500'  alt='img'/>\n\n<br /> **描述**：经典力导向布局。 <br /> **API**：[Force API](/zh/docs/api/graphLayout/force) <br /> **参数**：与 d3.js 的力导布局参数相对应。\n\n| 参数名                  | 类型              | 示例                                                                                                                                                        | 默认值    | 说明                                                                                                                                                                                                                                                             |\n| ----------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| center                  | Array             | [ 0, 0 ]                                                                                                                                                    | 图的中心  | 布局的中心                                                                                                                                                                                                                                                       |\n| linkDistance            | Number / Function | 示例 1: 50 <br />示例 2:<br />d => {<br />  // d 是一条边<br />  if (d.id === 'edge1') {<br />    return 100;<br />  }<br />  return 50;<br />}             | 50        | 边长。可以使用回调函数的形式对不同对边定义不同边长（如示例 2）                                                                                                                                                                                                   |\n| nodeStrength            | Number / Function | 示例 1: -30 <br />示例 2:<br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return -100;<br />  }<br />  return -30;<br />} / null | -30       | 节点作用力，正数代表节点之间的引力作用，负数代表节点之间的斥力作用。可以使用回调函数的形式对不同对节点定义不同节点作用力（如示例 2）                                                                                                                             |\n| edgeStrength            | Number / Function | 示例 1: 1 <br />示例 2:<br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 10;<br />  }<br />  return 1;<br />}              | null      | 边的作用力，范围是 0 到 1，默认根据节点的出入度自适应。可以使用回调函数的形式对不同对节点定义不同边作用力（如示例 2）                                                                                                                                            |\n| preventOverlap          | Boolean           | false                                                                                                                                                       | false     | 是否防止重叠，必须配合属性 `nodeSize` ，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测。若未设置 `nodeSize` ，则根据节点数据中的 `size` 进行碰撞检测。若二者都未设置，则默认以 10 为节点大小进行碰撞检测                           |\n| nodeSize                | Array / Number    | 20                                                                                                                                                          | undefined | 节点大小（直径）。用于碰撞检测。<br />若不指定，则根据传入的数据节点中的 `size`  字段计算。若即不指定，节点中也没有 `size`，则默认大小为 10                                                                                                                      |\n| nodeSpacing<br /><br /> | Number / Function | 示例 1 : 10<br />示例 2 : <br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />}         | 0         | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ob0MQ5W8vk8AAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />`preventOverlap` 为 `true` 时生效，防止重叠时节点边缘间距的最小值。可以是回调函数，为不同节点设置不同的最小间距，如示例 2 所示<br /> |\n| alphaDecay              | Number            | 0.03                                                                                                                                                        | 0.028     | 迭代阈值的衰减率。范围 [0, 1]，0.028 对应迭代数为 300                                                                                                                                                                                                            |\n| alphaMin                | Number            | 0.03                                                                                                                                                        | 0.001     | 停止迭代的阈值                                                                                                                                                                                                                                                   |\n| alpha                   | Number            | 0.1                                                                                                                                                         | 0.3       | 当前阈值                                                                                                                                                                                                                                                         |\n| collideStrength         | Number            | 0.8                                                                                                                                                         | 1         | 防止重叠的力强度，范围 [0, 1]                                                                                                                                                                                                                                    |\n| clustering              | Boolean           | false                                                                                                                                                       | false     | 是否按照聚类信息布局                                                                                                                                                                                                                                             |\n| clusterNodeStrength     | Number            | -1                                                                                                                                                          | -0.8      | 聚类节点作用力。负数代表斥力                                                                                                                                                                                                                                     |\n| clusterEdgeStrength     | Number            | 0.1                                                                                                                                                         | 0.2       | 聚类边作用力                                                                                                                                                                                                                                                     |\n| clusterEdgeDistance     | Number            | 100                                                                                                                                                         | 50        | 聚类边长度                                                                                                                                                                                                                                                       |\n| clusterNodeSize         | Number            | 10                                                                                                                                                          | 15        | 聚类节点大小 / 直径，直径越大，越分散                                                                                                                                                                                                                            |\n| clusterFociStrength     | Number            | 0.8                                                                                                                                                         | 0.5       | 用于 foci 的力                                                                                                                                                                                                                                                   |\n| forceSimulation         | Object            |                                                                                                                                                             | null      | 自定义 force 方法，若不指定，则使用 d3 的方法。                                                                                                                                                                                                                  |\n| onTick                  | Function          |                                                                                                                                                             | {}        | 每一次迭代的回调函数                                                                                                                                                                                                                                             |\n| onLayoutEnd             | Function          |                                                                                                                                                             | {}        | 布局完成后的回调函数                                                                                                                                                                                                                                             |\n| workerEnabled           | Boolean           | true / false                                                                                                                                                | false     | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                                             |\n\n### Fruchterman\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*DibyQYaI2qYAAAAAAAAAAABkARQnAQ' width='400'  alt='img'/>\n\n<br />**描述**：Fruchterman 布局，一种力导布局。 <br />**API**：[Fruchterman API](/zh/docs/api/graphLayout/fruchterman) <br />**参数**：\n\n| 参数名         | 类型    | 示例         | 默认值   | 说明                                                 |\n| -------------- | ------- | ------------ | -------- | ---------------------------------------------------- |\n| center         | Array   | [ 0, 0 ]     | 图的中心 | 布局的中心                                           |\n| maxIteration   | Number  | 1000         | 1000     | 最大迭代次数                                         |\n| gravity        | Number  | 10           | 10       | 重力大小，影响布局的紧凑程度                         |\n| speed          | Number  | 1            | 1        | 每次迭代节点移动的速度。速度太快可能会导致强烈震荡   |\n| clustering     | Boolean | false        | false    | 是否按照聚类布局                                     |\n| clusterGravity | Number  | 30           | 10       | 聚类内部的重力大小，影响聚类的紧凑程度               |\n| workerEnabled  | Boolean | true / false | false    | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互 |\n| gouEnabled     | Boolean | true / false | false    | 是否启用 GPU 并行计算，F6 4.0 支持                   |\n\n### Circular\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*s_29Rbja9lkAAAAAAAAAAABkARQnAQ' width='200' alt='img' />\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*qw1ES7nYvr8AAAAAAAAAAABkARQnAQ' width='200'  alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mCXwQYRV8IkAAAAAAAAAAABkARQnAQ' width='200'  alt='img'/>\n\n<br />**描述**：环形布局。 <br />**API**：[Circular API](/zh/docs/api/graphLayout/circular) <br />**参数**：\n\n| 参数名        | 类型    | 示例/可选值  | 默认值     | 说明                                                                             |\n| ------------- | ------- | ------------ | ---------- | -------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------ |\n| center        | Array   | [ 0, 0 ]     | 图的中心   | 布局的中心                                                                       |\n| radius        | Number  | 50           | null       | 圆的半径。若设置了 `radius`，则 `startRadius` 与 `endRadius` 不生效              |\n| startRadius   | Number  | 10           | null       | 螺旋状布局的起始半径                                                             |\n| endRadius     | Number  | 100          | null       | 螺旋状布局的结束半径                                                             |\n| clockwise     | Boolean | true         | true       | 是否顺时针排列                                                                   |\n| divisions     | Number  | 3            | 1          | 节点在环上的分段数（几个段将均匀分布），在 `endRadius - startRadius != 0` 时生效 |\n| ordering      | String  | null         | 'topology' | 'degree'                                                                         | null | 节点在环上排序的依据。默认 null 代表直接使用数据中的顺序。'topology' 按照拓扑排序。'degree' 按照度数大小排序 |\n| angleRatio    | Number  | 1            | 1          | 从第一个节点到最后节点之间相隔多少个 2\\*PI                                       |\n| workerEnabled | Boolean | true / false | false      | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                             |\n\n### Radial\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FZIpRKpJo_MAAAAAAAAAAABkARQnAQ' width='200' alt='img' />\n\n<br />**描述**：辐射状布局。 <br />**API**：[Radial API](/zh/docs/api/graphLayout/radial) <br />**参数**：\n\n| 参数名                     | 类型              | 示例                                                                                                                                                | 默认值    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |\n| -------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| center                     | Array             | [ 0, 0 ]                                                                                                                                            | 图的中心  | 布局的中心                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| linkDistance               | Number            | 50                                                                                                                                                  | 50        | 边长                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |\n| maxIteration               | Number            | 1000                                                                                                                                                | 1000      | 停止迭代到最大迭代数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |\n| focusNode                  | String / Object   | 'node1'                                                                                                                                             | null      | 中心点，默认为数据中第一个节点。可以传入节点 id 或节点本身。                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| unitRadius                 | Number            | 10                                                                                                                                                  | 100       | 每一圈距离上一圈的距离。默认填充整个画布，即根据图的大小决定                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| preventOverlap             | Boolean           | false                                                                                                                                               | false     | 是否防止重叠，必须配合属性 `nodeSize` ，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测。<br />：<br />若未设置 `nodeSize`，则将会根据数据中节点的 `size` 字段数值进行碰撞检测计算。若二者皆未设置，则以节点大小为 `10` 进行计算。                                                                                                                                                                                                                                            |\n| maxPreventOverlapIteration | Number            | 500                                                                                                                                                 | 200       | 防止重叠步骤的最大迭代次数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| nodeSize                   | Number            | 10                                                                                                                                                  | 10        | 节点大小（直径）。用于防止节点重叠时的碰撞检测。<br />：<br />若未设置则使用数据中节点的 `size` 字段数值进行碰撞检测计算。若二者皆未设置，则以节点大小为 `10` 进行计算。                                                                                                                                                                                                                                                                                                                                   |\n| nodeSpacing<br />          | Number / Function | 示例 1 : 10<br />示例 2 : <br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />} | 0         | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cFq4QbXVx7sAAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />`preventOverlap` 为 `true` 时生效，防止重叠时节点边缘间距的最小值。可以是回调函数，为不同节点设置不同的最小间距，如示例 2 所示<br />                                                                                                                                                                                                                                           |\n| strictRadial               | Boolean           | true                                                                                                                                                | false     | 是否必须是严格的 radial 布局，即每一层的节点严格布局在一个环上。`preventOverlap` 为 `true` 时生效。详见 [Radial-strictRadial API](/zh/docs/api/graphLayout/radial#layoutcfgstrictradial)<br />- 当 `preventOverlap` 为 `true`，且 `strictRadial` 为 `false` 时，有重叠的节点严格沿着所在的环展开，但在一个环上若节点过多，可能无法完全避免节点重叠。<br />- 当 `preventOverlap` 为 `true`，且 `strictRadial` 为 `true`  时，允许同环上重叠的节点不严格沿着该环布局，可以在该环的前后偏移以避免重叠。<br /> |\n| sortBy                     | String            | 'data' / 'cluster'                                                                                                                                  | undefined | 同层节点布局后相距远近的依据。默认 `undefined` ，表示根据数据的拓扑结构（节点间最短路径）排布，即关系越近/点对间最短路径越小的节点将会被尽可能排列在一起；`'data'` 表示按照节点在数据中的顺序排列，即在数据顺序上靠近的节点将会尽可能排列在一起；也可以指定为节点数据中的某个字段名，例如 `'cluster'`、`'name'` 等（必须在数据中存在）                                                                                                                                                                     |\n| sortStrength               | Number            | 10                                                                                                                                                  | 10        | 同层节点根据 `sortBy` 排列的强度，数值越大，`sortBy` 指定的方式计算出距离越小的越靠近。`sortBy` 不为 `undefined` 时生效                                                                                                                                                                                                                                                                                                                                                                                    |\n| workerEnabled              | Boolean           | true / false                                                                                                                                        | false     | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                                                                                                                                                                                                                                                                                       |\n\n### MDS\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6OPTT7bz5sUAAAAAAAAAAABkARQnAQ' width=400 alt='img'/><br />**描述**：高维数据降维算法布局。<br />**API**：[MDS API](/zh/docs/api/graphLayout/mds)<br />**参数**：\n\n| 参数名        | 类型    | 示例         | 默认值   | 说明                                                 |\n| ------------- | ------- | ------------ | -------- | ---------------------------------------------------- |\n| center        | Array   | [ 0, 0 ]     | 图的中心 | 布局的中心                                           |\n| linkDistance  | Number  | 50           | 50       | 边长                                                 |\n| workerEnabled | Boolean | true / false | false    | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互 |\n\n### Dagre\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*RQEORY5A_LoAAAAAAAAAAABkARQnAQ' width=250 alt='img'/><br />**描述**：层次布局。<br />**API**：[Dagre API](/zh/docs/api/graphLayout/dagre)<br />**参数**：\n\n| 参数名                  | 类型     | 示例/可选值                                                                                                         | 默认值    | 说明                                                                                                                                                                                                                                            |\n| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| rankdir                 | String   | 'TB' / 'BT' / 'LR' / 'RL'                                                                                           | 'TB'      | layout 的方向。T：top；B：bottom；L：left；R：right                                                                                                                                                                                             |\n| align                   | String   | 'UL' / 'UR' / 'DL' / 'DR' / undefined                                                                               | undefined | 节点对齐方式。默认值是 `undefined`，代表对齐到中心。U：upper；D：down；L：left；R：right                                                                                                                                                        |\n| nodesep                 | Number   | 40                                                                                                                  | 50        | 在 `rankdir` 为 `'TB'` 或 `'BT'` 时代表节点水平间距(px)；在 `rankdir` 为 `'LR'` 或 `'RL'` 时代表节点的竖直间距。优先级高于 `nodesepFunc`                                                                                                        |\n| ranksep                 | Number   | 40                                                                                                                  | 50        | 层间距（px）。在`rankdir` 为 `'TB'` 或 `'BT'` 时是竖直方向相邻层间距；在`rankdir` 为 `'LR'` 或 `'RL'` 时代表水平方向相邻层间距。优先级高于 `ranksepFunc`                                                                                        |\n| nodesepFunc<br /><br /> | Function | d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />} | undefined | 节点水平间距（px）的回调函数，通过该参数可以对不同节点设置不同的节点间距。在`rankdir` 为 'TB' 或 'BT' 时是节点的水平间距；在`rankdir` 为 'LR' 或 'RL' 时是节点的竖直间距。优先级高于 `nodesep`，即若设置了 `nodesep`，则 `nodesepFunc` 不生效   |\n| ranksepFunc<br /><br /> | Function | d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />} | undefined | 层间距（px）的回调函数，通过该参数可以对不同节点设置不同的层间距。在`rankdir` 为 'TB' 或 'BT' 时是竖直方向相邻层间距；在`rankdir` 为 'LR' 或 'RL' 时代表水平方向相邻层间距。优先级低于 `ranksep`，即若设置了 `ranksep`，则 `ranksepFunc` 不生效 |\n| controlPoints           | Boolean  | true                                                                                                                | true      | 是否保留布局连线的控制点                                                                                                                                                                                                                        |\n| workerEnabled           | Boolean  | true / false                                                                                                        | false     | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                            |\n| sortByCombo             | Boolean  | true / false                                                                                                        | false     | 同一层节点是否根据每个节点数据中的 `comboId` 进行排序，以防止 combo 重叠                                                                                                                                                                        |\n\n### Concentric\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Ux0-SYBy6Y8AAAAAAAAAAABkARQnAQ' width=300 alt='img'/><br />注：该算法参考 <a href='https://github.com/cytoscape/cytoscape.js' target='_blank'>cytoscape.js</a>，遵守 MIT 开源协议。<br />**描述**：同心圆布局。<br />**API**：[Concentric API](/zh/docs/api/graphLayout/concentric)<br />**参数**：\n\n| 参数名         | 类型    | 示例/可选值                             | 默认值           | 说明                                                                                                                                                                                                                                     |\n| -------------- | ------- | --------------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| center         | Array   | [ 0, 0 ]                                | 图的中心         | 布局的中心                                                                                                                                                                                                                               |\n| nodeSize       | Number  | 30                                      | 30               | 节点大小（直径）。用于防止节点重叠时的碰撞检测                                                                                                                                                                                           |\n| minNodeSpacing | Number  | 10                                      | 10               | 环与环之间最小间距，用于调整半径                                                                                                                                                                                                         |\n| preventOverlap | Boolean | false                                   | false            | 是否防止重叠，必须配合属性 `nodeSize` ，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测。若未设置 `nodeSize` ，则将根据节点数据中的 `size` 进行碰撞检测。若二者都未设置，则默认以 30 为节点大小进行碰撞检测 |\n| sweep          | Number  | Math.PI                                 | undefined        | 第一个节点与最后一个节点之间的弧度差                                                                                                                                                                                                     |\n| equidistant    | Boolean | false                                   | false            | 环与环之间的距离是否相等                                                                                                                                                                                                                 |\n| startAngle     | Number  | 3.14                                    | 3 / 2 \\* Math.PI | 开始放置节点的弧度                                                                                                                                                                                                                       |\n| clockwise      | Boolean | false                                   | false            | 是否按照顺时针顺序                                                                                                                                                                                                                       |\n| maxLevelDiff   | Number  | 0.5                                     | undefined        | 每一层同心值的求和。若为 undefined，则将会被设置为 maxValue / 4 ，其中 maxValue 为最大的排序依据的属性值。例如，若 sortBy='degree'，则 maxValue 为所有节点中度数最大的节点的度数                                                         |\n| sortBy         | String  | 'degree' / 'property1' / 'weight' / ... | undefined        | 指定的节点排序的依据（节点属性名）。该属性值高的放在中心。如果是 `sortBy` 为 `undefined` 则会计算节点度数，度数最高的放在中心。<br />                                                                                                    |\n| workerEnabled  | Boolean | true / false                            | false            | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                     |\n\n### Grid\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*5U3_TZVolpEAAAAAAAAAAABkARQnAQ' width=300 alt='img'/><br />注：该算法参考 <a href='https://github.com/cytoscape/cytoscape.js' target='_blank'>cytoscape.js</a>，遵守 MIT 开源协议。<br />**描述**：网格布局。<br />**API**：[Grid API](/zh/docs/api/graphLayout/grid)<br />**参数**：\n\n| 参数名                | 类型    | 示例/可选值                             | 默认值    | 说明                                                                                                                                                                                                                                     |\n| --------------------- | ------- | --------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| begin                 | Array   | [ 0, 0 ]                                | [ 0, 0 ]  | 网格开始位置（左上角）                                                                                                                                                                                                                   |\n| preventOverlap        | Boolean | false                                   | false     | 是否防止重叠，必须配合属性 `nodeSize` ，只有设置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测。若未设置 `nodeSize` ，则将根据节点数据中的 `size` 进行碰撞检测。若二者都未设置，则默认以 30 为节点大小进行碰撞检测 |\n| preventOverlapPadding | Number  | 10                                      | 10        | 避免重叠时节点的间距 padding。`preventOverlap` 为 `true` 时生效                                                                                                                                                                          |\n| nodeSize              | Number  | 30                                      | 30        | 节点大小（直径）。用于防止节点重叠时的碰撞检测                                                                                                                                                                                           |\n| condense              | Boolean | false                                   | false     | 为 `false` 时表示利用所有可用画布空间，为 `true` 时表示利用最小的画布空间                                                                                                                                                                |\n| rows                  | Number  | 5                                       | undefined | 网格的行数，为 undefined 时算法根据节点数量、布局空间、`cols`（若指定）自动计算                                                                                                                                                          |\n| cols                  | Number  | 5                                       | undefined | 网格的列数，为 undefined 时算法根据节点数量、布局空间、`rows`（若指定）自动计算                                                                                                                                                          |\n| sortBy                | String  | 'degree' / 'property1' / 'weight' / ... | 'degree'  | 指定排序的依据（节点属性名），数值越高则该节点被放置得越中心。若为 undefined，则会计算节点的度数，度数越高，节点将被放置得越中心                                                                                                         |\n| workerEnabled         | Boolean | true / false                            | false     | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                     |\n\n### Combo Force\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AngFRpOo4SAAAAAAAAAAAABkARQnAQ' width=300 alt='img' /><br />**API**：[Combo Force API](/zh/docs/api/graphLayout/comboForce)<br />**参数**：\n\n| 参数名                    | 类型              | 示例                                                                                                                                                    | 默认值    | 说明                                                                                                                                                                                                                                                                                     |\n| ------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| center                    | Array             | [ 0, 0 ]                                                                                                                                                | 图的中心  | 布局的中心                                                                                                                                                                                                                                                                               |\n| maxIteration              | Number            | 100                                                                                                                                                     | 100       | 最大迭代次数                                                                                                                                                                                                                                                                             |\n| linkDistance              | Number / Function | 示例 1: 50 <br />示例 2:<br />d => {<br />  // d 是一条边<br />  if (d.id === 'edge1') {<br />    return 100;<br />  }<br />  return 50;<br />}         | 10        | 边长。可以使用回调函数的形式对不同对边定义不同边长（如示例 2）                                                                                                                                                                                                                           |\n| nodeStrength              | Number / Function | 示例 1: 10 <br />示例 2:<br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 10;<br />  }<br />  return 30;<br />} / null | 30        | 节点作用力                                                                                                                                                                                                                                                                               |\n| edgeStrength              | Number / Function | 示例 1: 1 <br />示例 2:<br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 10;<br />  }<br />  return 1;<br />}          | 0.2       | 边的作用力                                                                                                                                                                                                                                                                               |\n| preventOverlap            | Boolean           | false                                                                                                                                                   | false     | 是否防止节点之间以及 combo 之间的重叠，若开启，则 `preventNodeOverlap` 与 `preventComboOverlap` 将均被开启。详见 `preventNodeOverlap` 与 `preventComboOverlap` 介绍                                                                                                                      |\n| preventNodeOverlap        | Boolean           | false                                                                                                                                                   | true      | 是否防止节点之间的重叠。必须配合下面属性 `nodeSize` 或节点数据中的 `size` 属性，只有在数据中设置了 `size` 或在该布局中配置了与当前图节点大小相同的 `nodeSize` 值，才能够进行节点重叠的碰撞检测                                                                                           |\n| preventComboOverlap       | Boolean           | false                                                                                                                                                   | true      | 是否防止 combo 之间的重叠                                                                                                                                                                                                                                                                |\n| collideStrength           | Number            | 0.1                                                                                                                                                     | undefined | 统一设置防止节点之间以及 combo 之间重叠的力强度，范围 [0, 1]。若 `collideStrength` 不为 `undefined`，则 `nodeCollideStrength` 与 `comboCollideStrength` 将均被设置为统一的值                                                                                                             |\n| nodeCollideStrength       | Number            | 0.4                                                                                                                                                     | 0.5       | 设置防止节点之间重叠的力强度，范围 [0, 1]                                                                                                                                                                                                                                                |\n| comboCollideStrength      | Number            | 0.4                                                                                                                                                     | 0.5       | 防止 combo 之间重叠的力强度，范围 [0, 1]                                                                                                                                                                                                                                                 |\n| nodeSize                  | Array / Number    | 10                                                                                                                                                      | 10        | 节点大小（直径）。用于碰撞检测。若不指定，则根据传入的节点的 size 属性计算。若即不指定，节点中也没有 `size`，则默认大小为 `10`                                                                                                                                                           |\n| nodeSpacing<br /><br />   | Number / Function | 示例 1 : 10<br />示例 2 : <br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />}     | 0         | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ob0MQ5W8vk8AAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />`preventNodeOverlap` 或 `preventOverlap` 为 `true` 时生效, 防止重叠时节点边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示<br /> |\n| comboSpacing<br /><br />  | Number / Function | 示例 1 : 10<br />示例 2 : <br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />}     | 0         | `preventComboOverlap` 或 `preventOverlap` 为 `true` 时生效, 防止重叠时 combo 边缘间距的最小值。可以是回调函数, 为不同节点设置不同的最小间距, 如示例 2 所示<br />                                                                                                                         |\n| comboPadding<br /><br />  | Number / Function | 示例 1 : 10<br />示例 2 : <br />d => {<br />  // d 是一个节点<br />  if (d.id === 'node1') {<br />    return 100;<br />  }<br />  return 10;<br />}     | 0         | Combo 内部的 padding 值，不用于渲染，仅用于计算力。推荐设置为与视图上 combo 内部 padding 值相同的值<br />                                                                                                                                                                                |\n| alphaDecay                | Number            | 0.03                                                                                                                                                    | 0.028     | 迭代阈值的衰减率。范围 [0, 1]，0.028 对应迭代数为 300                                                                                                                                                                                                                                    |\n| alphaMin                  | Number            | 0.03                                                                                                                                                    | 0.001     | 停止迭代的阈值                                                                                                                                                                                                                                                                           |\n| alpha                     | Number            | 0.1                                                                                                                                                     | 1         | 当前阈值                                                                                                                                                                                                                                                                                 |\n| onTick                    | Function          |                                                                                                                                                         | {}        | 每一次迭代的回调函数                                                                                                                                                                                                                                                                     |\n| onLayoutEnd               | Function          |                                                                                                                                                         | {}        | 布局完成后的回调函数                                                                                                                                                                                                                                                                     |\n| gravity                   | Number            |                                                                                                                                                         | 10        | 重力的大小，影响布局的紧凑程度                                                                                                                                                                                                                                                           |\n| comboGravity              | Number            |                                                                                                                                                         | 30        | 每个 combo 内部的重力大小，影响聚类的紧凑程度                                                                                                                                                                                                                                            |\n| optimizeRangeFactor       | Number            |                                                                                                                                                         | 1         | 优化计算性能，两节点间距超过 `optimizeRangeFactor * width` 则不再计算斥力和重叠斥力。通过合理设置该参数可以较少计算量                                                                                                                                                                    |\n| depthAttractiveForceScale | Number            |                                                                                                                                                         | 0.5       | 根据边两端节点层级差距的调整引力的系数的因子，取值范围 [0, 1]。层级差距越大，引力越小                                                                                                                                                                                                    |\n| depthRepulsiveForceScale  | Number            |                                                                                                                                                         | 2         | 根据边两端节点层级差距的调整斥力系数的因子，取值范围 [1, Infinity]。层级差距越大，斥力越大                                                                                                                                                                                               |\n| velocityDecay             | Number            | 0.4                                                                                                                                                     | 0.6       | 每个迭代节点运动速度衰减参数                                                                                                                                                                                                                                                             |\n| workerEnabled             | Boolean           | true / false                                                                                                                                            | false     | 是否启用 web-worker 以防布局计算时间过长阻塞页面交互                                                                                                                                                                                                                                     |\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/layout-mechanism.zh.md",
    "content": "---\ntitle: 布局的切换机制\norder: 2\n---\n\nF6 提供了两种关于布局的切换机制：\n\n- `updateLayout(params)`：布局方法或参数的切换；\n- `changeData()`：数据的切换。\n\n## 布局方法或参数切换\n\n**接口定义：**\n\n```javascript\n/**\n * 更换布局或布局参数\n * @param {String | object} cfg 新布局配置项\n * 若 cfg 为 String 或含有 type 字段，且与之前的布局方法不同时将会更换布局\n * 否则只是更新原有布局的参数\n */\nupdateLayout(cfg);\n```\n\n**布局方法切换：**<br />若参数  `cfg` 为 `String` 或是含有 `type` 字段的对象，且与之前的布局方法名不同时将会更换布局。\n\n**布局参数切换：**<br />若参数  `cfg`  是对象且其中不含有 `type` 字段，或指定的布局方法名称与之前的布局方法相同，则保持原有布局方法，仅更新该布局的参数。\n\n## 数据切换\n\n**接口定义：**\n\n```javascript\n/**\n * 更改源数据，根据新数据重新渲染视图\n * @param {object} data 源数据\n * @return {object} this\n */\nchangeData(data);\n```\n\n## 切换示例\n\n### 期待效果\n\n初始化时使用默认 random 布局，2000 ms 后更换为允许节点重叠的 force 布局，4000 ms 后更换为不允许节点重叠的 force 布局，6000 ms 后更换数据为 `data2`。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6k-iQ405hEEAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n### 完整代码\n\n```html\n<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Tutorial Layout Demo</title>\n  </head>\n  <body>\n    <div id=\"mountNode\"></div>\n    <script src=\"https://gw.alipayobjects.com/os/antv/pkg/_antv.f6-0.0.15/dist/f6.js\"></script>\n    <script src=\"https://gw.alipayobjects.com/os/antv/assets/lib/jquery-3.2.1.min.js\"></script>\n    <script>\n      const data = {\n        nodes: [\n          { id: '0', label: '0' },\n          { id: '1', label: '1' },\n          { id: '2', label: '2' },\n          { id: '3', label: '3' },\n          { id: '4', label: '4' },\n        ],\n        edges: [\n          { source: '0', target: '1' },\n          { source: '0', target: '2' },\n          { source: '0', target: '3' },\n          { source: '0', target: '4' },\n          { source: '1', target: '2' },\n          { source: '1', target: '3' },\n        ],\n      };\n\n      const data2 = {\n        nodes: [\n          { id: '0', label: '0' },\n          { id: '1', label: '1' },\n          { id: '2', label: '2' },\n        ],\n        edges: [\n          { source: '0', target: '1' },\n          { source: '0', target: '2' },\n        ],\n      };\n\n      const graph = new F6.Graph({\n        ... // String | HTMLElement，必须，容器 id 或容器本身\n        width: 300, // Number，必须，图的宽度\n        height: 300, // Number，必须，图的高度\n        animate: true, // Boolean，可选，切换布局时是否使用动画过度\n      });\n\n      // 读取数据和渲染\n      graph.data(data);\n      graph.render();\n\n      // 2000 ms 后切换为允许节点重叠的 force 布局\n      setTimeout(() => {\n        graph.updateLayout('force'); // 参数为 String 代表布局名称\n      }, 8000);\n\n      // 4000 ms 后切换为不允许节点重叠且边长为 100 的 force 布局。\n      setTimeout(() => {\n        graph.updateLayout({\n          type: 'force', // 布局名称\n          preventOverlap: true, // 布局参数，是否允许重叠\n          nodeSize: 40, // 布局参数，节点大小，用于判断节点是否重叠\n          linkDistance: 100, // 布局参数，边长\n        });\n      }, 10000);\n\n      // 6000 ms 后切换数据为 data2\n      setTimeout(() => {\n        graph.changeData(data2);\n      }, 12000);\n    </script>\n  </body>\n</html>\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/sub-layout-pipe.zh.md",
    "content": "---\ntitle: 流水线子图布局\norder: 4\n---\n\n## 流水线子图布局\n\n支持在 Graph.layout 中同时配置多个子图布局。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*TaymQYKOJkgAAAAAAAAAAAAAARQnAQ' alt=\"img\" width='400px'>\n\n### 使用方法\n\n在实例化图时配置 layout.pipes 数组，指定多个子图布局的布局类型（`type`）、布局参数、节点过滤函数（`nodesFilter`）。值得注意的是，若某些节点同时属于不同的子图（即这些节点在不同的子图的 `nodesFilter` 配置都返回为 true），则这些节点位置的计算将按照 pipes 数组顺序后者覆盖前者。\n\n`layout.pipes` 的数据类型如下：\n\n```javascript\ntype Pipes = {\n  // 该子图所使用的布局类型\n  type:\n    | 'random'\n    | 'radial'\n    | 'mds'\n    | 'circular'\n    | 'fruchterman'\n    | 'force'\n    | 'gForce'\n    | 'dagre'\n    | 'concentric'\n    | 'grid'\n    | 'forceAtlas2',\n  // 节点的筛选器，参数为节点数据，返回布尔值代表该节点是否在该子图中\n  nodesFilter: (node: NodeData) => boolean, // 布局对应的参数，详见各个布局的参数\n  ...\n}[];\n```\n\n使用示例：\n\n```javascript\n// 在实例化图时配置 layout.pipes\nconst graph = new F6.Graph({\n  // ...                      // 其他配置项\n  layout: {\n    pipes: [\n      {\n        // 该子图所使用的布局类型\n        type: \"circular\",\n        // 根据节点的某个字段判断是否属于该子图\n        nodesFilter: (node) => node.subGraphId === \"1\",\n        // ... 可配置该 circular 布局的参数，详见各布局文档\n      },\n      {\n        type: \"grid\",\n        nodesFilter: (node) => node.subGraphId === \"2\",\n        // 该 grid 布局的其他参数\n        begin: [100, 0],\n      },\n    ],\n  },\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/sub-layout.zh.md",
    "content": "---\ntitle: 子图布局\norder: 3\n---\n\n## 子图布局\n\n目前，子图布局独立与全局布局的思路，与 graph 不挂钩，直接使用实例化布局方法的方式，灌入子图数据，通过布局将位置写到相应数据中。这种机制还可供外部的全局布局使用，即使不用 F6 渲染，也可以计算节点布局后的位置。\n\n**新增流水线子图布局**，支持在 Graph.layout 中同时配置多个子图布局。详见[流水线子图布局教程](/zh/docs/manual/middle/layout/sub-layout-pipe)。\n\n### 使用方法\n\n```javascript\n// 实例化布局\nconst subgraphLayout = new F6.Layout[\"force\"]({\n  center: [500, 450],\n});\n\n// 初始化布局，灌入子图数据\nsubgraphLayout.init({\n  nodes: subGraphNodes,\n  edges: subGraphEdges,\n});\n\n// 执行布局\nsubgraphLayout.execute();\n\n// 图实例根据数据更新节点位置\ngraph.positionsAnimate();\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/tree-graph-layout.zh.md",
    "content": "---\ntitle: 树图布局 Layout\norder: 1\n---\n\n## 简介\n\n图布局是指图中节点的排布方式，根据图的数据结构不同，布局可以分为两类：一般图布局、树图布局。F6 为这两类图都内置了一些常用的图布局算法。使用内置的图布局可以完成[布局的参数、方法、数据的切换](/zh/docs/manual/middle/layout/layout-mechanism)等。F6 还提供了一般图布局的 [Web-Worker 机制](/zh/docs/manual/middle/layout/webworker)，在大规模图布局中使用该机制可以使布局计算不阻塞页面。\n\n除了内置布局方法外，一般图布局还支持 [自定义布局](/zh/docs/manual/middle/layout/custom-layout) 机制。\n\n事实上，F6 的布局是自由的，内置布局算法仅仅是操作了数据中节点的 `x` 和 `y` 值。因此，除了使用内置布局以及自定义的一般图布局外，用户还可以使用外部图布局算法，计算节点位置后赋值到数据中节点的 `x` 和 `y` 字段上，F6 便可以根据该位置信息进行绘制。\n\n由于树图特殊性，F6 扩展出了  TreeGraph ，详细文档请见：[TreeGraph](/zh/docs/api/treeGraphLayout/guide) API。树布局是一种能很好展示有一定层次结构数据的布局方式。推荐使用 F6.TreeGraph 实现。本文将逐一介绍内置的树图布局算法，及其使用方式。\n\n## 树图 TreeGraph 布局方法总览\n\n- [CompactBox Layout](#compactbox)：紧凑树布局；\n- [Dendrogram Layout](#dendrogram)：树状布局（叶子节点布局对齐到同一层）；\n- [Indented Layout](#indented)：缩进布局；\n- [Mindmap Layout](#mindmap)：脑图布局。\n\n## 配置树图布局\n\n与一般图 Graph 配置方法相似，通过实例化图时配置 `layout` 属性设置树的布局，还可以通过 `modes` 属性为树配置 [展开/收缩行为](/zh/docs/manual/middle/states/defaultBehavior/#collapse-expand)。以下代码声明了一个实例，定义了布局为从左到右结构的基础树图，并且定义了展开收缩行为。\n\n```javascript\nconst graph = new F6.TreeGraph({\n  ...\n  modes: {\n    default: [\n      {\n        // 定义展开/收缩行为\n        type: 'collapse-expand',\n      },\n      'drag-canvas',\n    ],\n  },\n  // 定义布局\n  layout: {\n    type: 'dendrogram', // 布局类型\n    direction: 'LR', // 自左至右布局，可选的有 H / V / LR / RL / TB / BT\n    nodeSep: 50, // 节点之间间距\n    rankSep: 100, // 每个层级之间的间距\n  },\n});\n```\n\n## 树图布局方法\n\n### compactBox\n\n**描述**：紧凑树布局。从根节点开始，同一深度的节点在同一层，并且布局时会将节点大小考虑进去。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FltbQZAa-nMAAAAAAAAAAABkARQnAQ' width=400 alt='img'/><br />**API**：[CompactBox API](/zh/docs/api/treeGraphLayout/compactBox)<br />**参数**：\n\n| 参数名    | 类型     | 示例/可选值                                                         | 默认值    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| --------- | -------- | ------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| direction | String   | 'TB' / 'BT' / 'LR' / 'RL' / 'H' / 'V'                               | 'LR'      | layout 的方向。<br />- TB —— 根节点在上，往下布局<br />- BT —— 根节点在下，往上布局<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SuygR5RZRH0AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>     <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*iJPBTJkTqssAAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />（左）TB。（右）BT。<br />- LR —— 根节点在左，往右布局<br />- RL —— 根节点在右，往左布局<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YrtaQIKLC4IAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>             <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*3fJsTYzHRHcAAAAAAAAAAABkARQnAQ' width=150 alt='img'/> <br />（左）LR。（右）RL。<br />- H —— 根节点在中间，水平对称布局<br />- V —— 根节点在中间，垂直对称布局<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*812BT4Ep15MAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>          <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*GXdZSIBOllsAAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />> （左）H。（右）V。 |\n| getId     | Function | (d) => {<br />  // d 是一个节点<br />  return d.id + 'node';<br />} | undefined | 节点 id 的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| getHeight | Function | (d) => {<br />  // d 是一个节点<br />  return 10;<br />}            | undefined | 节点高度的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| getWidth  | Function | (d) => {<br />  // d 是一个节点<br />  return 20;<br />}            | undefined | 节点宽度的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| getVGap   | Function | (d) => {<br />  // d 是一个节点<br />  return 100;<br />}           | undefined | 节点纵向间距的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| getHGap   | Function | (d) => {<br />// d 是一个节点<br />  return 50;<br />}              | undefined | 节点横向间距的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| radial    | Boolean  | true                                                                | false     | 是否按照辐射状布局。若 `radial` 为 `true`，建议 `direction` 设置为 `'LR'` 或 `'RL'`：<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*0plfTrg12FkAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |\n\n### dendrogram\n\n**描述**：生态树布局。不管数据的深度多少，总是叶节点对齐。不考虑节点大小，布局时将节点视为 1 个像素点。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*XehWSKAWdrwAAAAAAAAAAABkARQnAQ' width=300 alt='img'/><br />**API**：[Dendrogram API](/zh/docs/api/treeGraphLayout/dendrogram)<br />**参数**：\n\n| 参数名    | 类型    | 示例/可选值                           | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| --------- | ------- | ------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| direction | String  | 'TB' / 'BT' / 'LR' / 'RL' / 'H' / 'V' | 'LR'   | layout 的方向。<br />- TB —— 根节点在上，往下布局<br />- BT —— 根节点在下，往上布局<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*CN4JRZ-ws8EAAAAAAAAAAABkARQnAQ' width=150 alt='img'/><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*r0c_ToY56xkAAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />> （左）TB。（右）BT。<br />- LR —— 根节点在左，往右布局<br />- RL —— 根节点在右，往左布局<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*fvNVS73Mk40AAAAAAAAAAABkARQnAQ' width=70 alt='img'/><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ZfGGSoyO6UoAAAAAAAAAAABkARQnAQ' width=70 alt='img'/><br />> （左）LR。（右）RL。<br />- H —— 根节点在中间，水平对称布局<br />- V —— 根节点在中间，垂直对称布局<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lVDyTKOI8o4AAAAAAAAAAABkARQnAQ' width=150 alt='img'/><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*N_MmT7ZT1PIAAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />> （左）H。（右）V。 |\n| nodeSep   | Number  | 50                                    | 0      | 节点间距                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| rankSep   | Number  | 100                                   | 0      | 层与层之间的间距                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |\n| radial    | Boolean | true                                  | false  | 是否按照辐射状布局。若 `radial` 为 `true`，建议 `direction` 设置为 `'LR'` 或 `'RL'`：<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*2WUNTb6kp3MAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n\n### indented\n\n**描述**：缩进树布局。每个元素会占一行/一列。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*zuBlR4oBIE0AAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n**API**：[Indented API](/zh/docs/api/treeGraphLayout/indented)<br />**参数**：\n\n| 参数名    | 类型     | 示例/可选值                                                  | 默认值    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| --------- | -------- | ------------------------------------------------------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| direction | String   | 'LR' / 'RL' / 'H'                                            | 'LR'      | layout 的方向。<br />'LR' —— 根节点在左，往右布局（下图左）<br />'RL' —— 根节点在右，往左布局（下图中）<br />'H' —— 根节点在中间，水平对称布局（下图右）<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Hn9wT6j1tEMAAAAAAAAAAABkARQnAQ' alt='indented1' width='80' /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*dXx3QrjSsgsAAAAAAAAAAABkARQnAQ' alt='indented2' width='60' /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ULkFQqi04moAAAAAAAAAAABkARQnAQ' alt='indented3' width='120' /> |\n| indent    | Number   | 80                                                           | 20        | 列间间距                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| getHeight | Function | (d) => {<br />  // d 是一个节点<br />  return 10;<br />}     | undefined | 节点高度的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| getWidth  | Function | (d) => {<br />  // d 是一个节点<br />  return 20;<br />}     | undefined | 节点宽度的回调函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| getSide   | Function | (d) => {<br />  // d 是一个节点<br />  return 'left';<br />} | undefined | 节点放置在根节点左侧或右侧的回调函数，仅对与根节点直接相连的节点有效，设置后将会影响被设置节点的所有子孙节点                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n\n### mindmap\n\n**描述**：脑图布局。深度相同的节点将会被放置在同一层，与 compactBox 不同的是，布局不会考虑节点的大小。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*sRi6Q6Qrm-oAAAAAAAAAAABkARQnAQ' width=400 alt='img'/><br />**API**：[Mindmap API](/zh/docs/api/treeGraphLayout/mindmap)<br />**参数**：\n\n| 参数名    | 类型     | 示例/可选值                                               | 默认值                                                                 | 说明                                                                                                                                                                                                                                                                                                                                                                                                             |\n| --------- | -------- | --------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| direction | String   | 'H' / 'V'                                                 | 'H'                                                                    | layout 的方向。<br />- H：horizontal（水平）—— 根节点的子节点分成两部分横向放置在根节点左右两侧<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*EXdUT4xCVV4AAAAAAAAAAABkARQnAQ' width=150 alt='img'/><br />- V：vertical （竖直）—— 将根节点的所有孩子纵向排列<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*yOpETr8s_-kAAAAAAAAAAABkARQnAQ' width=150 alt='img'/> |\n| getHeight | Function | (d) => {<br />  // d 是一个节点<br />  return 10;<br />}  | undefined                                                              | 节点高度的回调函数                                                                                                                                                                                                                                                                                                                                                                                               |\n| getWidth  | Function | (d) => {<br />  // d 是一个节点<br />  return 20;<br />}  | undefined                                                              | 节点宽度的回调函数                                                                                                                                                                                                                                                                                                                                                                                               |\n| getVGap   | Function | (d) => {<br />  // d 是一个节点<br />  return 100;<br />} | 18                                                                     | 节点纵向间距的回调函数                                                                                                                                                                                                                                                                                                                                                                                           |\n| getHGap   | Function | (d) => {<br />  // d 是一个节点<br />  return 50;<br />}  | 18                                                                     | 节点横向间距的回调函数                                                                                                                                                                                                                                                                                                                                                                                           |\n| getSide   | String   | Function                                                  | (d) => {<br />  // d 是一个节点<br />  return 'left';<br />} / 'right' | 节点排布在根节点的左侧/右侧。若设置了该值，则所有节点会在根节点同一侧，即 direction = 'H' 不再起效。若该参数为回调函数，则可以指定每一个节点在根节点的左/右侧                                                                                                                                                                                                                                                    |\n"
  },
  {
    "path": "packages/site/docs/manual/middle/layout/webworker.zh.md",
    "content": "---\ntitle: 使用 webworker 布局\norder: 5\n---\n\n在大规模图可视化中，布局算法往往需要较大的计算量。若配置了布局，F6 需要首先完成布局才可以将图渲染出来。然而，在一些应用页面中，这一过程可能会阻塞页面的其他部分用户交互。为了让大规模图布局不阻塞页面，F6 为**一般图**布局提供了 Web-Worker 机制。只需要在配置布局时，将 `workerEnabled` 设置为 `true` 即可。如下：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                      // 其他配置项\n  layout: {\n    // Object，可选，布局的方法及其配置项，默认为 random 布局。\n    type: \"fruchterman\",\n    workerEnabled: true, // 开启 Web-Worker\n    // ...                 // 其他配置\n  },\n});\n```\n\n注意：\n\n- 树图不支持 Web-Worker 机制；\n- 子图布局机制暂不支持 Web-Worker 机制。\n"
  },
  {
    "path": "packages/site/docs/manual/middle/overview.zh.md",
    "content": "---\ntitle: F6 核心概念总览\norder: 0\n---\n\nF6 与 [G6](https://g6.antv.vision/zh/docs/manual/middle/overview) 保持了相同的设计，整体架构可以参考下图\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*I0RoTKgsvSEAAAAAAAAAAAAAARQnAQ' width='750' alt='F6 Main concepts overview'/>\n\n#### 图 Graph\n\n- 初始化和渲染\n\n#### 图形（Shape）(选读)\n\n- 图形和属性\n- 关键图形（Key Shape）\n- 图形分组（Shape group)\n- 图形变换 （Transform）\n\n#### 图元素（节点、边、Combo)\n\n- 节点\n  - 内置节点\n  - 自定义节点\n  - 节点的连接点 anchorPoints\n- 边\n  - 内置边\n  - 自定义边\n- Combo\n  - 内置 Combo\n  - 自定义 Combo\n  - Combo 机制\n  - 创建与拆分 Combo\n- 高级样式\n  - 设置元素背景\n  - 设置元素渐变色\n  - 设置纹理\n  - 更新文本样式\n- 高级操作\n  - 更新节点或边的样式\n  - 层级调整\n  - 显示隐藏\n  - 锁定/解锁\n\n#### 图布局\n\n- 内置布局\n- 自定义布局\n\n#### 交互与事件\n\n- 监听与绑定事件\n- 内置交互行为\n- 自定义交互行为（选读）\n- 交互模式 Mode\n\n#### 动画\n\n- 全局动画\n- 元素动画\n\n#### 图算法\n\n#### 插件\n"
  },
  {
    "path": "packages/site/docs/manual/middle/plugins/Plugins.zh.md",
    "content": "---\ntitle: 使用组件\norder: 0\n---\n\nF6 中支持插件提供了一些可插拔的组件，包括：\n\n- [Legend](#legend)\n- [SnapLine](#snapline)\n- [Grid](#grid)\n- [Minimap](#minimap)\n- [ImageMinimap](#image-minimap)\n- [Edge Bundling](#edge-bundling)\n- [Menu](#menu)\n- [ToolBar](#toolbar)\n- [TimeBar](#timebar)\n- [Tooltip](#tooltip)\n- [Fisheye](#fisheye)\n- [EdgeFilterLens](#edge-filter-lens)\n\n## 配置方法\n\n引入 F6 后，首先实例化需要使用的某插件对象。然后，在实例化图时将其配置到 `plugins` 中：\n\n```javascript\n// 实例化 Grid 插件\nconst grid = new F6.Grid();\nconst minimap = new F6.Minimap();\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [grid, minimap], // 配置 Grid 插件和 Minimap 插件\n});\n```\n\n## Legend\n\nLegend 是 F6 内置的图例插件。用于说明图中不同类型的节点和边所代表的含义，并可以通过与图例的交互做简单的高亮和过滤。 _v4.3.0 起支持_。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*UmXzQLF65vYAAAAAAAAAAAAAARQnAQ' alt=\"img\" width='500px'>\n\n### 配置项\n\n| 名称                      | 类型                                                                                                                                                        | 描述                                                                                                                                                                                                                                            |\n| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| data                      | GraphData                                                                                                                                                   | 图例的数据，与图数据格式相同。节点图例目前支持 `'circle'`，`'rect'`，和 `'ellipse'`，边图例目前支持 `'line'`、`'cubic'`、`'quadratic'`。通过指定每个数据项中的 `type` 字段以确定图例元素的类型，每个数据项中的 `order` 字段可用于同组图例的排序 |\n| position                  | 'top' / 'top-left' / 'top-right' / 'right' / 'right-top' / 'right-bottom' / 'left' / 'left-top' / 'left-bottom' / 'bottom' / 'bottom-left' / 'bottom-right' | 图例在画布中的相对位置，默认为 `'top'`，代表在画布正上方                                                                                                                                                                                        |\n| padding                   | number / number[]                                                                                                                                           | 图例区域内部内容到边框的距离，四位数组分别代表上、右、下、左边距                                                                                                                                                                                |\n| margin                    | number / number[]                                                                                                                                           | 图例区域与画布边界的距离，四位数组分别代表上、右、下、左边距。在 `position:'top'` 时只有上边距生效，其他情况类似                                                                                                                                |\n| offsetX                   | number                                                                                                                                                      | 图例区域离 `position` 对应的默认位置的 x 方向的偏移量，可被用于图例位置的微调                                                                                                                                                                   |\n| offsetY                   | number                                                                                                                                                      | 图例区域离 `position` 对应的默认位置的 y 方向的偏移量，可被用于图例位置的微调                                                                                                                                                                   |\n| containerStyle            | ShapeStyle                                                                                                                                                  | 图例背景框的样式，格式与 [rect 图形的样式](/zh/docs/api/shapeProperties#矩形图形-rect)相同                                                                                                                                                      |\n| horiSep                   | number                                                                                                                                                      | 图例之间的水平间距                                                                                                                                                                                                                              |\n| vertiSep                  | number                                                                                                                                                      | 图例之间的竖直间距                                                                                                                                                                                                                              |\n| layout                    | 'vertical' / 'horizontal'                                                                                                                                   | 图例的布局方式。默认为 `'horizontal'` 横向布局                                                                                                                                                                                                  |\n| align                     | 'center' / 'right' / 'left'                                                                                                                                 | 图例的对齐方式，可以是居中、右对齐、左对齐。默认为 `'center'` 居中                                                                                                                                                                              |\n| title                     | string                                                                                                                                                      | 图例的标题文本内容，样式通过 `titleConfig` 设置                                                                                                                                                                                                 |\n| titleConfig               | object                                                                                                                                                      | 图例标题的样式，具体配置项如下                                                                                                                                                                                                                  |\n| titleConfig.position      | 'center' / 'right' / 'left'                                                                                                                                 | 图例标题的对齐方式，可以是居中、右对齐、左对齐。默认为 `'center'` 居中                                                                                                                                                                          |\n| titleConfig.offsetX       | number                                                                                                                                                      | 图例标题的 x 方向偏移，用于微调标题位置                                                                                                                                                                                                         |\n| titleConfig.offsetY       | number                                                                                                                                                      | 图例标题的 y 方向偏移，用于微调标题位置                                                                                                                                                                                                         |\n| titleConfig[key]          | ShapeStyle                                                                                                                                                  | 其他对于文本本身的样式，支持的内容与 [text 图形的样式](/zh/docs/api/shapeProperties#文本-text)相同                                                                                                                                              |\n| filter                    | object                                                                                                                                                      | 通过图例的交互对主图元素进行过滤的配置项，具体配置如下                                                                                                                                                                                          |\n| filter.enable             | boolean                                                                                                                                                     | 是否允许通过图例的交互对主图元素过滤，默认为 `false`                                                                                                                                                                                            |\n| filter.multiple           | boolean                                                                                                                                                     | 是否支持多种元素过滤，默认为 `false`，只有 `filter.trigger` 为 `'click'` 时方可多选图例                                                                                                                                                         |\n| filter.trigger            | 'click' / 'mouseenter'                                                                                                                                      | 触发主图元素过滤的图例交互方式，默认为 `click`                                                                                                                                                                                                  |\n| filter.legendStateStyles  | { active?: ShapeStyle, inactive?: ShapeStyle                                                                                                                | 在过滤时，图例本身的状态样式，包括 `filter.legendStateStyles.active` 和 `filter.legendStateStyles.inactive` 两种，每种的类型均为 ShapeStyle。类似图的 `nodeStateStyles` 配置                                                                    |\n| filter.graphActiveState   | string                                                                                                                                                      | 主图元素过滤时，被选中的主图元素的状态名，将寻找主图元素的对应的状态样式进行主图元素的更新。默认值为 `'active'`                                                                                                                                 |\n| filter.graphInactiveState | string                                                                                                                                                      | 主图元素过滤时，未被选中的主图元素的状态名，将寻找主图元素的对应的状态样式进行主图元素的更新。默认值为 `'inactive'`                                                                                                                             |\n| filter.filterFunctions    | { [key: string]: (d) => boolean; }                                                                                                                          | 由于图例的数据与主图解耦，因此需要配置每种图例对应的主图过滤函数，`key` 为图例数据的 `type`，值为函数，函数的参数为主图元素的数据，返回值为布尔型，代表是否被选中                                                                               |\n\n## SnapLine\n\nSnapLine 是 F6 内置的对齐线插件。 _v4.3.0 起支持_。\n\n实例化时可以通过配置项调整 SnapLine 的样式和功能。\n\n### 配置项\n\n| 名称          | 类型                                          | 描述                      |\n| ------------- | --------------------------------------------- | ------------------------- |\n| line          | ShapeStyle                                    | 辅助线的样式              |\n| itemAlignType | boolean、'horizontal' 、'vertical'、'center'; | 辅助线类型，true 表示全部 |\n\n## Grid\n\nGrid 插件在画布上绘制了网格。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*y8u6Rrc78uIAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n使用 [配置方法](#配置方法) 中代码实例化时可以通过配置项调整 Grid 的图片。\n\n### 配置项\n\n| 名称 | 类型   | 描述                         |\n| ---- | ------ | ---------------------------- |\n| img  | String | grid 图片，base64 格式字符串 |\n\n## Minimap\n\nMinimap 是用于快速预览和探索图的工具。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v1svQLkEPrUAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n实例化时可以通过配置项调整 Minimap 的样式和功能。\n\n### 配置项\n\n| 名称              | 类型   | 描述                                                                                                                                                                                                                         |\n| ----------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| container         | Object | 放置 Minimap 的 DOM 容器。若不指定则自动生成                                                                                                                                                                                 |\n| className         | String | 生成的 DOM 元素的 className                                                                                                                                                                                                  |\n| viewportClassName | String | Minimap 上视窗 DOM 元素的 className                                                                                                                                                                                          |\n| type              | String | 选项：`'default'`：渲染图上所有图形；`'keyShape'`：只渲染图上元素的 keyShape，以减少渲染成本；`'delegate'`：只渲染图上元素的大致图形，以降低渲染成本。渲染成本 `'default'` > `'keyShape'` > `'delegate'`。默认为 `'default'` |\n| size              | Array  | Minimap 的大小                                                                                                                                                                                                               |\n| delegateStyle     | Object | 在 `type` 为 `'delegate'` 时生效，代表元素大致图形的样式                                                                                                                                                                     |\n\n其中，delegateStyle 可以设置如下属性：\n\n| 名称        | 类型   | 描述       |\n| ----------- | ------ | ---------- |\n| fill        | String | 填充颜色   |\n| stroke      | String | 描边颜色   |\n| lineWidth   | Number | 描边宽度   |\n| opacity     | Number | 透明度     |\n| fillOpacity | Number | 填充透明度 |\n\n## Image Minimap\n\n由于 [Minimap](#minimap) 的原理是将主画布内容复制到 minimap 的画布上，在大数据量下可能会造成双倍的绘制效率成本。为缓解该问题，Image Minimap 采用另一种机制，根据提供的图片地址或 base64 字符串 `graphImg` 绘制 `<img />` 代替 minimap 上的 canvas。该方法可以大大减轻两倍 canvas 绘制的压力。但 `graphImg` 完全交由 F6 的用户控制，需要注意主画布更新时需要使用 `updateGraphImg` 方法替换 `graphImg`。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*v1svQLkEPrUAAAAAAAAAAABkARQnAQ' width=300 alt='img'/>\n\n实例化时可以通过配置项调整 Image inimap 的样式和功能。\n\n### 配置项\n\n| 名称              | 类型   | 是否必须 | 描述                                                                                                                                                                    |\n| ----------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| graphImg          | String | true     | minimap 的图片地址或 base64 文本                                                                                                                                        |\n| width             | Number | false    | minimap 的宽度。Image Minimap 的长宽比一定等于主图长宽比。因此，若设置了 `width`，则按照主画布容器长宽比确定 `height`，也就是说，`width` 的优先级高于 `height`。        |\n| height            | Number | false    | minimap 的高度。Image Minimap 的长宽比一定等于主图长宽比。若未设置了 `width`，但设置了 `height`，则按照主画布容器长宽比确定 `width`；若设置了 `width` 则以 `width` 为准 |\n| container         | Object | false    | 放置 Minimap 的 DOM 容器。若不指定则自动生成                                                                                                                            |\n| className         | String | false    | 生成的 DOM 元素的 className                                                                                                                                             |\n| viewportClassName | String | false    | Minimap 上视窗 DOM 元素的 className                                                                                                                                     |\n| delegateStyle     | Object | false    | 在 `type` 为 `'delegate'` 时生效，代表元素大致图形的样式                                                                                                                |\n\n其中，`delegateStyle` 可以设置如下属性：\n\n| 名称        | 类型   | 描述       |\n| ----------- | ------ | ---------- |\n| fill        | String | 填充颜色   |\n| stroke      | String | 描边颜色   |\n| lineWidth   | Number | 描边宽度   |\n| opacity     | Number | 透明度     |\n| fillOpacity | Number | 填充透明度 |\n\n### API\n\n#### updateGraphImg(img)\n\n更新 minimap 图片。建议在主画布更新时使用该方法同步更新 minimap 图片。\n\n参数：\n\n| 名称 | 类型   | 是否必须 | 描述                             |\n| ---- | ------ | -------- | -------------------------------- |\n| img  | String | true     | minimap 的图片地址或 base64 文本 |\n\n### 用法\n\n实例化 Image Minimap 插件时，`graphImg` 是必要参数。\n\n```\n// 实例化 Image Minimap 插件\nconst imageMinimap = new F6.ImageMinimap({\n  width: 200,\n  graphImg: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ'\n});\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [imageMinimap], // 配置 imageMinimap 插件\n});\n\ngraph.data(data);\ngraph.render()\n\n... // 一些主画布更新操作\nimageMinimap.updateGraphImg(img); // 使用新的图片（用户自己生成）替换 minimap 图片\n\n```\n\n## Edge Bundling\n\n在关系复杂、繁多的大规模图上，通过边绑定可以降低视觉复杂度。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*z9iXQq_kcrYAAAAAAAAAAABkARQnAQ' width=600 alt='img'/>\n\n> 美国航线图边绑定。<a href='http://g6.antv.vision/zh/docs/examples/case/edgeBundling' target='_blank'>Demo 链接</a>。该 <a href='https://g6.antv.vision/zh/docs/manual/cases/edgeBundling' target='_blank'>Demo 教程</a>。\n\n实例化时可以通过配置项调整边绑定的功能。\n\n### 配置项\n\n| 名称            | 类型   | 默认值    | 描述                                                                               |\n| --------------- | ------ | --------- | ---------------------------------------------------------------------------------- |\n| K               | Number | 0.1       | 边绑定的强度                                                                       |\n| lambda          | Number | 0.1       | 算法的初始步长                                                                     |\n| divisions       | Number | 1         | 初始的切割点数，即每条边将会被切割成的份数。每次迭代将会被乘以 `divRate`           |\n| divRate         | Number | 2         | 切割增长率，每次迭代都会乘以该数字。数字越大，绑定越平滑，但计算量将增大           |\n| cycles          | Number | 6         | 迭代次数                                                                           |\n| iterations      | Number | 90        | 初始的内迭代次数，每次外迭代中将会被乘以 `iterRate`                                |\n| iterRate        | Number | 0.6666667 | 迭代下降率                                                                         |\n| bundleThreshold | Number | 0.6       | 判定边是否应该绑定在一起的相似容忍度，数值越大，被绑在一起的边相似度越低，数量越多 |\n\n## Menu\n\nMenu 用于配置节点上的右键菜单。\n\n### 配置项\n\n| 名称            | 类型                                                             | 默认值                                                                                                                | 描述                                                                                                                                |\n| --------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| className       | string                                                           | null                                                                                                                  | menu 容器的 class 类名                                                                                                              |\n| getContent      | (evt?: IF6GraphEvent, graph?: IGraph) => HTMLDivElement / string | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*OtOkS4g-vrkAAAAAAAAAAABkARQnAQ' width=60 alt='img'/> | 菜单项内容，支持 DOM 元素或字符串                                                                                                   |\n| handleMenuClick | (target: HTMLElement, item: Item, graph?: IGraph) => void        | undefined                                                                                                             | 点击菜单项的回调函数                                                                                                                |\n| shouldBegin     | (evt: F6Event) => boolean                                        | undefined                                                                                                             | 是否允许 menu 出现，可以根据 `evt.item`（当前事件中的元素） 或 `evt.target`（当前鼠标事件中的图形）的内容判断此时是否允许 menu 出现 |\n| offsetX         | number                                                           | 6                                                                                                                     | menu 的 x 方向偏移值，需要考虑父级容器的 padding                                                                                    |\n| offsetY         | number                                                           | 6                                                                                                                     | menu 的 y 方向偏移值，需要考虑父级容器的 padding                                                                                    |\n| itemTypes       | string[]                                                         | ['node', 'edge', 'combo']                                                                                             | menu 作用在哪些类型的元素上，若只想在节点上显示，可将其设置为 ['node']                                                              |\n\n### 用法\n\n实例化 Menu 插件时，如果不传参数，则使用 F6 默认提供的值，只能展示默认的菜单项，不能进行任何操作。\n\n```\n// 实例化 Menu 插件\nconst menu = new F6.Menu();\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [menu], // 配置 Menu 插件\n});\n```\n\n#### DOM Menu\n\n```\nconst menu = new F6.Menu({\n  offsetX: 6,\n  offsetX: 10,\n  itemTypes: ['node'],\n  getContent(e, graph) {\n    const outDiv = document.createElement('div');\n    outDiv.style.width = '180px';\n    outDiv.innerHTML = `<ul>\n        <li>测试01</li>\n        <li>测试01</li>\n        <li>测试01</li>\n        <li>测试01</li>\n        <li>测试01</li>\n      </ul>`\n    return outDiv\n  },\n  handleMenuClick(target, item, graph) {\n    console.log(target, item, graph)\n  },\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [menu], // 配置 Menu 插件\n});\n```\n\n#### String Menu\n\n```\nconst menu = new F6.Menu({\n  getContent(evt) {\n    return `<ul>\n      <li title='1'>测试02</li>\n      <li title='2'>测试02</li>\n      <li>测试02</li>\n      <li>测试02</li>\n      <li>测试02</li>\n    </ul>`;\n  },\n  handleMenuClick(target, item) {\n    console.log(target, item)\n  },\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [menu], // 配置 Menu 插件\n});\n```\n\n## ToolBar\n\nToolBar 集成了以下常见的操作：\n\n- 重做；\n- 撤销；\n- 放大；\n- 缩小；\n- 适应屏幕；\n- 实际大小。\n\n### 配置项\n\n| 名称        | 类型                                  | 默认值    | 描述                                                                                                                  |\n| ----------- | ------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |\n| container   | HTMLDivElement                        | null      | ToolBar 容器，如果不设置，则默认使用 canvas 的 DOM 容器                                                               |\n| className   | string                                | null      | ToolBar 内容元素的 class 类名                                                                                         |\n| getContent  | (graph?: IGraph) => HTMLDivElement    | string    | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7QSRRJwAWxQAAAAAAAAAAABkARQnAQ' width=80 alt='img'/> | ToolBar 内容，支持 DOM 元素或字符串 |\n| handleClick | (code: string, graph: IGraph) => void | undefined | 点击 ToolBar 中每个图标的回调函数                                                                                     |\n| position    | Point                                 | null      | ToolBar 的位置坐标                                                                                                    |\n\n### 用法\n\n#### 默认用法\n\n默认的 ToolBar 提供了撤销、重做、放大等功能。\n\n```\nconst toolbar = new F6.ToolBar();\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [toolbar], // 配置 ToolBar 插件\n});\n```\n\n#### 使用 String 自定义 ToolBar 功能\n\n```\nconst tc = document.createElement('div');\ntc.id = 'toolbarContainer';\ndocument.body.appendChild(tc);\n\nconst toolbar = new F6.ToolBar({\n  container: tc,\n  getContent: () => {\n    return `\n      <ul>\n        <li code='add'>增加节点</li>\n        <li code='undo'>撤销</li>\n      </ul>\n    `\n  },\n  handleClick: (code, graph) => {\n    if (code === 'add') {\n      graph.addItem('node', {\n        id: 'node2',\n        label: 'node2',\n        x: 300,\n        y: 150\n      })\n    } else if (code === 'undo') {\n      toolbar.undo()\n    }\n  }\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [toolbar], // 配置 ToolBar 插件\n});\n```\n\n#### 使用 DOM 自定义 ToolBar 功能\n\n```\nconst toolbar = new F6.ToolBar({\n  getContent: () => {\n    const outDiv = document.createElement('div');\n    outDiv.style.width = '180px';\n    outDiv.innerHTML = `<ul>\n        <li>测试01</li>\n        <li>测试02</li>\n        <li>测试03</li>\n        <li>测试04</li>\n        <li>测试05</li>\n      </ul>`\n    return outDiv\n  },\n  handleClick: (code, graph) => {\n\n  }\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [toolbar], // 配置 ToolBar 插件\n});\n```\n\n## ToolTip\n\nToolTip 插件主要用于在节点和边上展示一些辅助信息，F6 4.0 以后，Tooltip 插件将会替换 Behavior 中的 tooltip。\n\n### 配置项\n\n| 名称        | 类型                                             | 默认值                                                                                                                | 描述                                                                                                                                      |\n| ----------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| className   | string                                           | null                                                                                                                  | tooltip 容器的 class 类名                                                                                                                 |\n| container   | HTMLDivElement                                   | null                                                                                                                  | Tooltip 容器，如果不设置，则默认使用 canvas 的 DOM 容器                                                                                   |\n| getContent  | (evt?: IF6GraphEvent) => HTMLDivElement / string | <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*aPPuQquN5Q0AAAAAAAAAAABkARQnAQ' width=80 alt='img'/> | tooltip 内容，支持 DOM 元素或字符串                                                                                                       |\n| shouldBegin | (evt: F6Event) => boolean                        | undefined                                                                                                             | 是否允许 tooltip 出现，可以根据 `evt.item`（当前事件中的元素） 或 `evt.target`（当前鼠标事件中的图形）的内容判断此时是否允许 tooltip 出现 |\n| offsetX     | number                                           | 6                                                                                                                     | tooltip 的 x 方向偏移值，需要考虑父级容器的 padding                                                                                       |\n| offsetY     | number                                           | 6                                                                                                                     | tooltip 的 y 方向偏移值，需要考虑父级容器的 padding                                                                                       |\n| itemTypes   | string[]                                         | ['node', 'edge', 'combo']                                                                                             | tooltip 作用在哪些类型的元素上，若只想在节点上显示，可将其设置为 ['node']                                                                 |\n\n### 用法\n\n默认的 Tooltip 只展示元素类型和 ID，一般情况下都需要用户自己定义 Tooltip 上面展示的内容。\n\n#### Dom Tooltip\n\n```\nconst tooltip = new F6.Tooltip({\n  offsetX: 10,\n  offsetY: 20,\n  getContent(e) {\n    const outDiv = document.createElement('div');\n    outDiv.style.width = '180px';\n    outDiv.innerHTML = `\n      <h4>自定义tooltip</h4>\n      <ul>\n        <li>Label: ${e.item.getModel().label || e.item.getModel().id}</li>\n      </ul>`\n    return outDiv\n  },\n  itemTypes: ['node']\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [tooltip], // 配置 Tooltip 插件\n});\n```\n\n#### String Tooltip\n\n```\nconst tooltip = new F6.Tooltip({\n  getContent(e) {\n    return `<div style='width: 180px;'>\n      <ul id='menu'>\n        <li title='1'>测试02</li>\n        <li title='2'>测试02</li>\n        <li>测试02</li>\n        <li>测试02</li>\n        <li>测试02</li>\n      </ul>\n    </div>`;\n  },\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [tooltip], // 配置 Tooltip 插件\n});\n```\n\n## Fisheye\n\nFisheye 鱼眼放大镜是为 focus+context 的探索场景设计的，它能够保证在放大关注区域的同时，保证上下文以及上下文与关注中心的关系不丢失。\n\n### 配置项\n\n| 名称          | 类型                             | 默认值                                                                               | 描述                                                                                                                                                                                           |\n| ------------- | -------------------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |\n| trigger       | 'mousemove' / 'click' / 'drag'   | 'mousemove'                                                                          | 放大镜的触发事件                                                                                                                                                                               |\n| d             | Number                           | 1.5                                                                                  | 放大系数，数值越大，放大程度越大                                                                                                                                                               |\n| r             | Number                           | 300                                                                                  | 放大区域的范围半径                                                                                                                                                                             |\n| delegateStyle | Object                           | { stroke: '#000', strokeOpacity: 0.8, lineWidth: 2, fillOpacity: 0.1, fill: '#ccc' } | 放大镜蒙层样式                                                                                                                                                                                 |\n| showLabel     | Boolean                          | false                                                                                | 若 label 默认被隐藏，是否在关注区域内展示 label                                                                                                                                                |\n| maxR          | Number                           | 图的高度                                                                             | 滚轮调整缩放范围的最大半径                                                                                                                                                                     |\n| minR          | Number                           | 0.05 \\* 图的高度                                                                     | 滚轮调整缩放范围的最小半径                                                                                                                                                                     |\n| maxD          | Number                           | 5                                                                                    | `trigger` 为 `'mousemove'` / `'click'` 时，可以在放大镜上左右拖拽调整缩放系数。maxD 指定了这种调整方式的最大缩放系数，建议取值范围 [0, 5]。若使用 `minimap.updateParam` 更新参数不受该系数限制 |\n| minD          | Number                           | 0                                                                                    | `trigger` 为 `'mousemove'` / `'click'` 时，可以在放大镜上左右拖拽调整缩放系数。maxD 指定了这种调整方式的最小缩放系数，建议取值范围 [0, 5]。若使用 `minimap.updateParam` 更新参数不受该系数限制 |\n| scaleRBy      | 'wheel'/'drag'/'unset'/undefined | false                                                                                | 'unset'                                                                                                                                                                                        | 终端用户调整放大镜范围大小的方式                               |\n| scaleDBy      | 'wheel'/'drag'/'unset'/undefined | false                                                                                | 'unset'                                                                                                                                                                                        | 终端用户调整放大镜缩放系数的方式                               |\n| showDPercent  | Boolean                          | false                                                                                | true                                                                                                                                                                                           | 是否在放大镜下方显示当前缩放系数的比例值（与 minD、maxD 相较） |\n\n### 成员函数\n\n#### updateParams(cfg)\n\n用于更新该 FishEye 的部分配置项，包括 `trigger`，`d`，`r`，`maxR`，`minR`，`maxD`，`minD`，`scaleRBy`，`scaleDBy`。例如：\n\n```\nconst fisheye = new F6.Fisheye({\n  trigger: 'mousemove'\n});\n\n... // 其他操作\n\nfisheye.updateParams({\n  d: 2,\n  r: 500,\n  // ...\n})\n```\n\n### 用法\n\n```\nconst fisheye = new F6.Fisheye({\n  trigger: 'mousemove',\n  d: 1.5,\n  r: 300,\n  delegateStyle: clone(lensDelegateStyle),\n  showLabel: false\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [fisheye], // 配置 fisheye 插件\n});\n```\n\n## Edge Filter Lens\n\nEdgeFilterLens 边过滤镜可以将关注的边保留在过滤镜范围内，其他边将在该范围内不显示。\n\n### 配置项\n\n| 名称          | 类型                                           | 默认值                                                                               | 描述                                                                                                                                                                                                                                                                                                                      |\n| ------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| trigger       | 'drag' / 'mousemove' / 'click'                 | 'mousemove'                                                                          | 过滤镜的触发事件                                                                                                                                                                                                                                                                                                          |\n| type          | 'one' / 'both' / 'only-source' / 'only-target' | 'both'                                                                               | 根据边两端点作为边过滤的简单条件。`'one'`：边至少有一个端点在过滤镜区域内，则在该区域内显示该边；`'both'`：两个端点都在过滤区域内，则在该区域显示该边；`'only-source'`：只有起始端在过滤镜区域内，则在该区域显示该边；`'only-target'`：只有结束端在过滤区域内，则在该区域显示该边。更复杂的条件可以使用 `shouldShow` 指定 |\n| shouldShow    | (d?: unknown) => boolean                       | undefined                                                                            | 边过滤的自定义条件。参数 `d` 为边每条边的数据，用户可以根据边的参数返回布尔值。返回 `true` 代表该边需要在过滤镜区域内显示，`false` 反之。                                                                                                                                                                                 |\n| r             | Number                                         | 60                                                                                   | 过滤镜的范围半径                                                                                                                                                                                                                                                                                                          |\n| delegateStyle | Object                                         | { stroke: '#000', strokeOpacity: 0.8, lineWidth: 2, fillOpacity: 0.1, fill: '#ccc' } | 过滤镜蒙层样式                                                                                                                                                                                                                                                                                                            |\n| showLabel     | 'edge' / 'node' / 'both'                       | 'edge'                                                                               | 若 label 默认被隐藏，是否在关注区域内展示对应元素类型的 label。'both' 代表节点和边的 label 都在过滤镜区域显示                                                                                                                                                                                                             |\n| maxR          | Number                                         | 图的高度                                                                             | 滚轮调整过滤镜的最大半径                                                                                                                                                                                                                                                                                                  |\n| minR          | Number                                         | 0.05 \\* 图的高度                                                                     | 滚轮调整过滤镜的最小半径                                                                                                                                                                                                                                                                                                  |\n| scaleRBy      | 'wheel' / undefined                            | 'wheel'                                                                              | 终端用户调整过滤镜大小的方式，undefined 代表不允许终端用户调整                                                                                                                                                                                                                                                            |\n\n### 成员函数\n\n#### updateParams(cfg)\n\n用于更新该过滤镜的部分配置项，包括 `trigger`，`type`，`r`，`maxR`，`minR`，`scaleRBy`，`showLabel`，`shouldShow`。例如：\n\n```\nconst filterLens = new F6.EdgeFilterLens({\n  trigger: 'drag'\n});\n\n... // 其他操作\n\nfilterLens.updateParams({\n  r: 500,\n  // ...\n})\n```\n\n### 用法\n\n```\nconst filterLens = new F6.EdgeFilterLens({\n  trigger: 'mousemove',\n  r: 300,\n  shouldShow: d => {\n    return d.size > 10;\n  }\n});\n\nconst graph = new F6.Graph({\n  //... 其他配置项\n  plugins: [filterLens], // 配置 filterLens 插件\n});\n```\n\n## TimeBar\n\n[AntV F6](https://github.com/antvis/F6) 内置了三种形态的 TimeBar 组件：\n\n- 带有趋势图的 TimeBar 组件；\n- 简易版的 TimeBar 组件；\n- 刻度 TimeBar 组件。\n\n并且每种类型的 TimeBar 组件都可以配合播放、快进、后退等控制按钮组使用。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*DOo6QpfFfMUAAAAAAAAAAAAAARQnAQ' width='500' />\n<br />趋势图 TimeBar 组件<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bzGBQKkewZMAAAAAAAAAAAAAARQnAQ' width='500' />\n<br />简易版 TimeBar 组件<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*kHRkQpnvBmwAAAAAAAAAAAAAARQnAQ' width='500' />\n<br />刻度 TimeBar 组件<br />\n\n<br />在趋势图 TimeBar 基础上，我们可以通过配置数据，实现更加复杂的趋势图 TimeBar 组件，如下图所示。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*17VoSoTm9o8AAAAAAAAAAAAAARQnAQ' width='500' />\n\n<br />虽然 F6 提供了各种不同类型的 TimeBar 组件，但在使用的方式却非常简单，通过配置字段就可以进行区分。<br /> <br />关于 TimeBar 的使用案例，请参考[这里](https://g6.antv.vision/zh/docs/examples/tool/timebar#timebar)。<br />\n\n### 使用 TimeBar 组件\n\n使用 F6 内置的 TimeBar 组件，和使用其他组件的方式完全相同。\n\n```javascript\nimport F6 from \"@antv/g6\";\n\nconst timebar = new F6.TimeBar({\n  width: 500,\n  height: 150,\n  padding: 10,\n  type: \"trend\",\n  trend: {\n    data: timeBarData,\n  },\n});\n\nconst graph = new F6.Graph({\n  container: \"container\",\n  width,\n  height,\n  plugins: [timebar],\n});\n```\n\n<br />通过上面的方式，我们就可以在图中使用 TimeBar 组件了，当实例化 TimeBar 时，type 参数值为 trend，表示我们实例化的是趋势图组件，效果如下图所示。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*lfvIQJYbs7oAAAAAAAAAAAAAARQnAQ' width='600' />\n\n<br />当设置 type 为 simple 时，就可以使用简易版的 TimeBar。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*g2zhQqP6ruYAAAAAAAAAAAAAARQnAQ' width='600' />\n\n<br />当设置 type 为 tick 时，表示我们要使用刻度 TimeBar 组件，但此时要注意的是，**刻度时间轴的配置项是通过 tick 对象配置而不是 trend 对象**，这也是刻度时间轴和趋势即简易时间轴不同的地方。\n\n```javascript\nconst timebar = new F6.TimeBar({\n  width,\n  height: 150,\n  type: \"tick\",\n  tick: {\n    data: timeBarData,\n    width,\n    height: 42,\n    tickLabelFormatter: (d) => {\n      const dateStr = `${d.date}`;\n      if ((count - 1) % 10 === 0) {\n        return `${dateStr.substr(0, 4)}-${dateStr.substr(\n          4,\n          2,\n        )}-${dateStr.substr(6, 2)}`;\n      }\n      return false;\n    },\n    tooltipFomatter: (d) => {\n      const dateStr = `${d}`;\n      return `${dateStr.substr(0, 4)}-${dateStr.substr(4, 2)}-${dateStr.substr(\n        6,\n        2,\n      )}`;\n    },\n  },\n});\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*n6ECQ7Jn5pQAAAAAAAAAAAAAARQnAQ' width='600' />\n\n### 参数定义\n\n#### 接口定义\n\n完整的 TimeBar 的接口定义如下：\n\n```javascript\ninterface TimeBarConfig extends IPluginBaseConfig {\n  // position size\n  readonly x?: number;\n  readonly y?: number;\n  readonly width?: number;\n  readonly height?: number;\n  readonly padding?: number;\n\n  readonly type?: 'trend' | 'simple' | 'tick';\n  // 趋势图配置项\n  readonly trend?: TrendConfig;\n  // 滑块、及前后背景的配置\n  readonly slider?: SliderOption;\n\n  // 刻度时间轴配置项\n  readonly tick?: TimeBarSliceOption;\n\n  // 控制按钮\n  readonly controllerCfg?: ControllerCfg;\n\n  rangeChange?: (graph: IGraph, minValue: string, maxValue: string) => void;\n  valueChange?: (graph: IGraph, value: string) => void;\n}\n```\n\n#### 接口参数说明\n\n| 名称          | 类型                        | 默认值 | 描述                                                                                 |\n| ------------- | --------------------------- | ------ | ------------------------------------------------------------------------------------ |\n| container     | HTMLDivElement              | null   | TimeBar 容器，如果不设置，则默认创建 className 为 g6-component-timebar 的 DOM 容器   |\n| x             | number                      | 0      | TimeBar 开始 x 坐标                                                                  |\n| y             | number                      | 0      | TimeBar 开始 y 坐标                                                                  |\n| width         | number                      |        | 必选，TimeBar 容器宽度                                                               |\n| height        | number                      |        | 必选，TimeBar 高度                                                                   |\n| padding       | number/number[]             | 10     | TimeBar 距离容器的间距值                                                             |\n| type          | 'trend' / 'simple' / 'tick' | trend  | 默认的 TimeBar 类型，默认为趋势图样式                                                |\n| trend         | TrendConfig                 | null   | Timebar 中趋势图的配置项，当 type 为 trend 或 simple 时，该字段必选                  |\n| slider        | SliderOption                | null   | TimeBar 组件背景及控制调节范围的滑块的配置项                                         |\n| tick          | TimeBarSliceOption          | null   | 刻度 TimeBar 配置项，当 type 为 tick 时，该字段必选                                  |\n| controllerCfg | ControllerCfg               | null   | 控制按钮组配置项                                                                     |\n| rangeChange   | Function                    | null   | TimeBar 时间范围变化时的回调函数，当不定义该函数时，时间范围变化时默认过滤图上的数据 |\n\n#### TrendConfig 接口定义\n\n> 暂不支持刻度文本的样式配置\n\n```javascript\ninterface TrendConfig {\n  // 数据\n  readonly data: {\n    date: string;\n    value: string;\n  }[];\n  // 位置大小\n  readonly x?: number;\n  readonly y?: number;\n  readonly width?: number;\n  readonly height?: number;\n  // 样式\n  readonly smooth?: boolean;\n  readonly isArea?: boolean;\n  readonly lineStyle?: ShapeStyle;\n  readonly areaStyle?: ShapeStyle;\n  readonly interval?: Interval;\n}\n```\n\n#### TrendConfig 参数说明\n\n| 名称      | 类型       | 默认值                                           | 描述                                                                             |\n| --------- | ---------- | ------------------------------------------------ | -------------------------------------------------------------------------------- |\n| x         | number     | 0                                                | 趋势图开始 x 坐标                                                                |\n| y         | number     | 0                                                | 趋势图开始 y 坐标                                                                |\n| width     | number     | TimeBar 容器宽度                                 | TimeBar 趋势图宽度，不建议自己设定，如果设定时需要同步设置 slider 中的 width 值  |\n| height    | number     | type=trend：默认为 28<br />type=simple：默认为 8 | TimeBar 趋势图高度，不建议自己设定，如果设定时需要同步设置 slider 中的 height 值 |\n| smooth    | boolean    | false                                            | 是否是平滑的曲线                                                                 |\n| isArea    | boolean    | false                                            | 是否显示面积图                                                                   |\n| lineStyle | ShapeStyle | null                                             | 折线的样式配置                                                                   |\n| areaStyle | ShapeStyle | null                                             | 面积的样式配置项，只有当 isArea 为 true 时生效                                   |\n| interval  | Interval   | null                                             | 柱状图配置项，当配置了该项后，趋势图上会展现为混合图样式                         |\n\n#### SliderOption 接口定义\n\n```javascript\nexport type SliderOption = Partial<{\n  readonly width?: number;\n  readonly height?: number;\n  readonly backgroundStyle?: ShapeStyle;\n  readonly foregroundStyle?: ShapeStyle;\n  // 滑块样式\n  readonly handlerStyle?: {\n    width?: number;\n    height?: number;\n    style?: ShapeStyle;\n  };\n  readonly textStyle?: ShapeStyle;\n  // 初始位置\n  readonly start: number;\n  readonly end: number;\n  // 滑块文本\n  readonly minText: string;\n  readonly maxText: string;\n}>;\n```\n\n#### SliderOption 参数说明\n\n| 名称            | 类型       | 默认值                              | 描述                                                                            |\n| --------------- | ---------- | ----------------------------------- | ------------------------------------------------------------------------------- |\n| width           | number     | TimeBar 容器宽度 - 2 \\* padding     | 趋势图背景框宽度，不建议自己设定，如果设定时要同步修改 trend 中 width 值        |\n| height          | number     | 趋势图默认为 28<br />简易版默认为 8 | TimeBar 趋势图高度，不建议自己设定，如果设定时需要同步设置 trend 中的 height 值 |\n| backgroundStyle | ShapeStyle | null                                | 背景样式配置项                                                                  |\n| foregroundStyle | ShapeStyle | null                                | 前景色样式配置，即选中范围的样式配置项                                          |\n| handlerStyle    | ShapeStyle | null                                | 滑块的样式配置项                                                                |\n| textStyle       | ShapeStyle | null                                | 滑块上文本的样式配置项                                                          |\n| start           | number     | 0.1                                 | 开始位置                                                                        |\n| end             | number     | 0.9                                 | 结束位置                                                                        |\n| minText         | string     | min                                 | 最小值文本                                                                      |\n| maxText         | string     | max                                 | 最大值文本                                                                      |\n\n#### TimeBarSliceOption\n\n```javascript\nexport interface TimeBarSliceOption {\n  // position size\n  readonly x?: number;\n  readonly y?: number;\n  readonly width?: number;\n  readonly height?: number;\n  readonly padding?: number;\n\n  // styles\n  readonly selectedTickStyle?: TickStyle;\n  readonly unselectedTickStyle?: TickStyle\n  readonly tooltipBackgroundColor?: string;\n\n  readonly start?: number;\n  readonly end?: number;\n\n  // 数据\n  readonly data: {\n    date: string;\n    value: string;\n  }[];\n\n  // 自定义标签格式化函数\n  readonly tickLabelFormatter?: (d: any) => string | boolean;\n  // 自定义 tooltip 内容格式化函数\n  readonly tooltipFomatter?: (d: any) => string;\n}\n```\n\n#### TimeBarSliceOption 参数说明\n\n| 名称                   | 类型              | 默认值 | 描述                           |\n| ---------------------- | ----------------- | ------ | ------------------------------ |\n| x                      | number            | 0      | 刻度 TimeBar 开始 x 坐标       |\n| y                      | number            | 0      | 刻度 TimeBar 开始 y 坐标       |\n| width                  | number            |        | 必选，刻度 TimeBar 宽度        |\n| height                 | number            |        | 必选，刻度 TimeBar 高度        |\n| padding                | number / number[] | 0      | 刻度 TimeBar 距离边界的间距    |\n| selectedTickStyle      | ShapeStyle        | null   | 选中刻度的样式配置项           |\n| unselectedTickStyle    | ShapeStyle        | null   | 未选中刻度的样式配置项         |\n| tooltipBackgroundColor | ShapeStyle        | null   | tooltip 背景框配置项           |\n| start                  | number            | 0.1    | 开始位置                       |\n| end                    | number            | 0.9    | 结束位置                       |\n| data                   | any[]             | []     | 必选，刻度时间轴的刻度数据     |\n| tickLabelFormatter     | Function          | null   | 刻度的格式化回调函数           |\n| tooltipFomatter        | Function          | null   | tooltip 上内容格式化的回调函数 |\n\n#### ControllerCfg 接口定义\n\n> 暂不支持\n\n> 控制按钮暂不支持配置样式\n\n> 不支持循环播放\n\n```javascript\ntype ControllerCfg = Partial<{\n  readonly x?: number;\n  readonly y?: number;\n  readonly width: number;\n  readonly height: number;\n  /** 播放速度，1 个 tick 花费时间 */\n  readonly speed?: number;\n  /** 是否循环播放 */\n  readonly loop?: boolean;\n  readonly hiddleToggle: boolean;\n  readonly fill?: string;\n  readonly stroke?: string;\n  readonly preBtnStyle?: ShapeStyle;\n  readonly nextBtnStyle?: ShapeStyle;\n  readonly playBtnStyle?: ShapeStyle;\n}>\n```\n\n#### ControllerCfg 参数说明\n\n| 名称         | 类型       | 默认值       | 描述                   |\n| ------------ | ---------- | ------------ | ---------------------- |\n| x            | number     | 0            | 按钮控制组开始 x 坐标  |\n| y            | number     | 0            | 按钮控制组开始 y 坐标  |\n| width        | number     | TimeBar 宽度 | 控制按钮组宽度         |\n| height       | number     | 40           | 控制按钮组高度         |\n| speed        | number     | 1            | 播放速度               |\n| loop         | boolean    | false        | 暂不支持，是否循环播放 |\n| hiddleToggle | boolean    | true         | 是否隐藏时间类型切换   |\n| fill         | string     |              | 按钮控制组外层框填充色 |\n| stroke       | string     |              | 按钮控制组外层框边框色 |\n| preBtnStyle  | ShapeStyle | null         | 后退按钮样式配置项     |\n| nextBtnStyle | ShapeStyle | null         | 前进按钮样式配置项     |\n| playBtnStyle | ShapeStyle | null         | 播放按钮样式配置项     |\n"
  },
  {
    "path": "packages/site/docs/manual/middle/states/bindEvent.zh.md",
    "content": "---\ntitle: 监听和绑定事件\norder: 0\n---\n\n除了 [内置交互行为  Behavior](/zh/docs/manual/middle/states/defaultBehavior) 和 [交互模式 Mode](/zh/docs/manual/middle/states/mode) 搭配的事件管理方式外，F6 提供了直接的单个事件、时机的监听方法，可以监听画布、节点、边、以及各函数被调用的时机等。这些事件可以分为以下四个层次：\n\n- 画布、图形层次的事件，`mousedown`，`mouseup`，`click`，`mouseenter`，`mouseleave` 等；\n- 节点/边 上的事件，`node:mousedown`，`edge:tap` 等，以 `type:eventName` 为事件名称；\n- 时机事件：\n  - 节点/边增删改时的事件, 例如：`beforeadditem`，`afteradditem`  等；\n  - 节点/边状态改变时的事件：`beforerefreshitem` 与 `afterrefreshitem`；\n  - 布局时机：`beforelayout` 与 `afterlayout`。\n\n如果要了解 F6 支持的所有事件，请参考 [Event API](/zh/docs/api/Event)。\n\nF6 上所有的事件都需要在 graph 上监听。\n\n```javascript\ngraph.on(\"click\", (ev) => {\n  const shape = ev.target;\n  const item = ev.item;\n  if (item) {\n    const type = item.getType();\n  }\n});\n\ngraph.on(\"node:tap\", (ev) => {\n  const shape = ev.target;\n  const node = ev.item;\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/states/custom-behavior.zh.md",
    "content": "---\ntitle: 自定义交互 Behavior\norder: 2\n---\n\nF6 除了提供丰富的 [内置交互行为 Behavior](/zh/docs/manual/middle/states/defaultBehavior) 外，还提供了自定义交互行为的机制，方便用户开发更加定制化的交互行为。\n\n在交互行为上， F6 主要考虑了三个场景：\n\n- 展示关系数据；\n- 可视化建模；\n- 图分析。\n\n在这些场景中只要用户可能无法一眼看清楚所有需要的信息，都需要进行交互，例如：\n\n- 图太大，需要缩放；\n- 单个节点上展示的信息太少，需要通过 tooltip 显示详情；\n- 对节点进行增删改查。\n\n我们无法将所有常用的交互全部内置到 F6 中。由于场景不一样，业务不一样，同样的目的需要的交互都不一样：\n\n- 有些系统需要从工具栏上点击后添加节点，有些系统需要从面板栏上拖出出新的节点；\n- 有的业务添加边需要从锚点上拖拽出来，而有些直接点击节点后就可以拖拽出边；\n- 有些边可以连接到所有节点上，而有些边不能连接到具体某个节点的某个锚点上；\n- 所有的交互的触发、持续、结束都要允许能够进行个性化的判定；\n- ……\n\n我们可以看到在图上的交互是繁杂多变的。各种冲突、各种配置项会让用户和开发者疲于应对。出于这些考虑，F6 提供了一套非常简单而灵活的机制来实现交互。\n\n## Behavior 的生命周期\n\n为实现交互，首先需要了解交互的生命周期。交互起源于用户在系统上的所有事件，是否允许交互发生同事件密切相关。所以我们看到交互的生命周期，即操作事件的过程如下：\n\n- 绑定事件；\n- 触发事件；\n- 持续事件；\n- 结束事件；\n- 移除事件。\n\n## 自定义交互 registerBehavior\n\n通过 `F6.registerBehavior` 自定义 Behavior。下面代码实现了名为  `'activate-node'` 的交互行为，在终端用户点击节点时，置该节点的 `active` 状态为 `true`；再次点击或点击画布时，置该节点的 `active` 状态为 `false`。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"> &nbsp;&nbsp;<strong>⚠️ 注意:</strong></span>\n\n- 下面代码仅设置了不同交互后节点的状态，没有指定这些状态下节点的样式。若需要根据节点状态变化它的样式，参见 [配置不同 State 下的节点样式](/zh/docs/manual/middle/states/state)。\n- 自定义 Behavior 时，可选的方法请参数  [Behavior API](/zh/docs/api/Behavior)；\n- `getEvent` 返回该 Behavior 所需监听事件的对象，F6 中支持的所有事件，请参考  [Event API](/zh/docs/api/Event)。\n\n```javascript\nF6.registerBehavior('activate-node', {\n  getDefaultCfg() {\n    return {\n      multiple: true,\n    };\n  },\n  getEvents() {\n    return {\n      'node:tap': 'onNodeTap',\n      'canvas:tap': 'onCanvasTap',\n    };\n  },\n  onNodeTap(e) {\n    const graph = this.graph;\n    const item = e.item;\n    if (item.hasState('active')) {\n      graph.setItemState(item, 'active', false);\n      return;\n    }\n    // this 上即可取到配置，如果不允许多个 'active'，先取消其他节点的 'active' 状态\n    if (!this.multiple) {\n      this.removeNodesState();\n    }\n    // 置点击的节点状态 'active' 为 true\n    graph.setItemState(item, 'active', true);\n  },\n  onCanvasTap(e) {\n    // shouldUpdate 可以由用户复写，返回 true 时取消所有节点的 'active' 状态，即将 'active' 状态置为 false\n    if (this.shouldUpdate(e)) {\n      this.removeNodesState();\n    }\n  },\n  removeNodesState() {\n    const graph = this.graph;\n    graph.findAllByState('node', 'active').forEach((node) => {\n      graph.setItemState(node, 'active', false);\n    });\n  },\n});\n```\n\n## 使用自定义的 Behavior\n\n有了上面代码定义的名为 `'activate-node'` 的 Behavior 以后，在实例化 Graph 时，在 `modes` 中将其配置到默认或其他[行为模式](/zh/docs/manual/middle/states/mode)中。下面代码将其配置到了默认行为模式中，在默认模式下，该行为将会生效。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n  modes: {\n    // 定义的 Behavior 指定到这里，就可以支持 Behavior 中定义的交互\n    default: ['activate-node'],\n  },\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/states/defaultBehavior.zh.md",
    "content": "---\ntitle: 内置的 Behavior\norder: 1\n---\n\n## 什么是 Behavior\n\nBehavior 是 F6 提供的定义图上交互事件的机制。它与[交互模式 Mode](/zh/docs/manual/middle/states/mode) 搭配使用，如何将下文所述各种 Behavior 配置到图上，见 [交互模式](/zh/docs/manual/middle/states/mode)。\n\n## 内置 Behavior\n\n理论上， F6 上的所有基础图形、Item（节点/边）都能通过事件来进行操作。考虑到通用性，F6 目前共提供了以下 9 个内置的 Behavior。此外，用户可以注册 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)。\n\n### drag-combo\n\n- 含义：拖动 Combo；\n- 配置项：\n  - `type: 'drag-combo'`；\n  - `enableDelegate`：拖动 Combo 时候是否开启图形代理 delegate，即拖动 Combo 时候 Combo 不会实时跟随变动，拖动过程中有临时生成一个 delegate 图形，拖动结束后才更新 Combo 位置，默认为 false，不开启；\n  - `delegateStyle`：delegate 的样式；\n  - `onlyChangeComboSize`：拖动嵌套的 Combo 时，只改变父 Combo 的大小，不改变层级关系，默认为 false；\n  - `activeState`：当拖动 Combo 时，父 Combo 或进入到的 Combo 的状态值，需要用户在实例化 Graph 时在 `comboStateStyles` 里面配置，默认为空；\n  - `selectedState`：选中 Combo 的状态，默认为 selected，需要在 `comboStateStyles` 里面配置；\n  - `shouldUpdate(e)`：是否允许当前被操作的 combo 被拖拽，参见下面示例。\n\n**使用默认配置**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\"drag-combo\"],\n  },\n});\n```\n\n用户可根据实际需求，为 `activeState` 或 `selectedState` 配置样式：\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\n      {\n        type: \"drag-combo\",\n        enableDelegate: true,\n        activeState: \"actived\",\n        shouldUpdate: (e) => {\n          // 不允许 id 为 'combo1' 的 combo 被拖拽\n          if (e.item && e.item.getModel().id === \"combo1\") return false;\n          return true;\n        },\n      },\n    ],\n  },\n  comboStateStyles: {\n    actived: {\n      stroke: \"red\",\n      lineWidth: 3,\n    },\n  },\n});\n```\n\n### collapse-expand-combo\n\n- 含义：收起和展开 Combo。若图配置有布局，则该 behavior 被触发后会触发图的重新布局。若希望避免重新布局，可以通过监听 combo 点击事件和 [graph.collapseExpandCombo API](/zh/docs/api/Graph#collapseexpandcombocombo) 控制收缩展开逻辑；\n- 配置项：\n  - `type: 'collapse-expand-combo'`；\n  - `trigger`：触发方式，默认为双击收起或展示，可配置 `'click'` 和 `'dblclick'`；\n  - `relayout`：收缩或展开后是否触发重新布局，默认为 `true`。\n\n**使用默认配置**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\"collapse-expand-combo\"],\n  },\n});\n```\n\n用户可以配置成单击展示或收起：\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand-combo\",\n        trigger: \"click\",\n        relayout: false, // 收缩展开后，不重新布局\n      },\n    ],\n  },\n});\n```\n\n### drag-canvas\n\n- 含义：拖拽画布；\n- 配置项：\n\n  - `type: 'drag-canvas'`；\n  - `direction`：允许拖拽方向，支持`'x'`，`'y'`，`'both'`，默认方向为 `'both'`；\n  - `enableOptimize`：是否开启优化，开启后拖动画布过程中隐藏所有的边及节点上非 keyShape 部分，默认关闭；\n  - `shouldBegin(e)`：是否允许触发该操作；\n  - `allowDragOnItem`：是否允许用户在节点/边/ combo 上拖拽时响应，默认为 false；\n  - `scalableRange`：拖动 canvas 可扩展的范围，默认为 0，值为 -1 ～ 1 代表可超出视口的范围的比例值（相对于视口大小）。值小于 -1 或大于 1 时，为正和负数时的效果如下图所示。\n\n  <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IFfoS67_HssAAAAAAAAAAAAAARQnAQ' width='650' />\n\n- 相关时机事件：\n  - `canvas:dragstart`：画布拖拽开始时触发，使用 `graph.on('canvas:dragstart', e => {...})` 监听；\n  - `canvas:drag`：画布拖拽中触发，使用 `graph.on('canvas:drag', e => {...})` 监听；\n  - `canvas:dragend`：画布拖拽结束后触发，使用 `graph.on('canvas:drag', e => {...})` 监听。\n\n**使用默认配置**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n});\n```\n\n默认配置下，可以在 x 和 y 两个方向上拖动画布。\n\n**使用自定义参数**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\n      {\n        type: \"drag-canvas\",\n        direction: \"x\",\n      },\n    ],\n  },\n});\n```\n\n此时只能在 x 方向上面拖动，y 方向上不允许拖动。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*54yxRrW1A7sAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n### zoom-canvas\n\n- 含义：缩放画布；\n- `type: 'zoom-canvas'`；\n- 配置项：\n  - `sensitivity`：缩放灵敏度，支持 1-10 的数值，默认灵敏度为 5；\n  - `minZoom`：最小缩放比例；\n  - `maxZoom`：最大缩放比例；\n  - `enableOptimize`：是否开启性能优化，默认为 false，设置为 true 开启，开启后缩放比例小于 optimizeZoom 时自动隐藏非 keyShape；\n  - `optimizeZoom`：当 enableOptimize 为 true 时起作用，默认值为 0.7，表示当缩放到哪个比例时开始隐藏非 keyShape；\n  - `shouldUpdate(e)`：是否允许发生缩放；\n  - `fixSelectedItems`：在缩小画布时是否固定选定元素的描边粗细、文本大小、整体大小等，`fixSelectedItems` 是一个对象，有以下变量：\n    - `fixSelectedItems.fixState`：将被固定的元素状态，被设置为该状态的节点将会在画布缩小时参与固定大小的计算，默认为 `'selected'`；\n    - `fixSelectedItems.fixAll`：固定元素的整体大小，优先级高于 `fixSelectedItems.fixLineWidth` 和 `fixSelectedItems.fixLabel`；\n    - `fixSelectedItems.fixLineWidth`：固定元素的 keyShape 的描边粗细；\n    - `fixSelectedItems.fixLabel`：固定元素的文本大小。\n- 相关时机事件：\n  - `wheelzoom(e)`：当缩放发生变化时被触发。使用 `graph.on('wheelzoom', e => {...})` 监听该时机事件。\n\n**提示：若要限定缩放尺寸，请在 graph 上设置  `minZoom`  和  `maxZoom`。**\n\n### drag-node\n\n- 含义：拖拽节点，或拖动 Combo 中的节点；\n- 配置项：\n  - `type: 'drag-node'`；\n  - `delegateStyle`：节点拖拽时的绘图属性，默认为 `{ strokeOpacity: 0.6, fillOpacity: 0.6 }`；\n  - `updateEdge`：是否在拖拽节点时更新所有与之相连的边，默认为 `true` 。\n  - `enableDelegate`：拖动节点过程中是否启用 `delegate`，即在拖动过程中是否使用方框代替元素的直接移动，效果区别见下面两个动图。默认值为  `false`；\n  - `onlyChangeComboSize`：V3.5 及以上版本支持，拖动节点过程中只改变 Combo 大小，不改变 Combo 结构，即不将节点从 Combo 中拖出或将节点拖入到 Combo 中，默认为 false；\n  - `enableDebounce`：是否在拖动节点时使用 debounce 来避免频繁的更新计算。这个 boolean 类型的配置项可以为折线边的更新提高性能，减少折线边的频繁重新寻径。默认值为 `false`；\n  - `enableOptimize`：是否在拖拽节点时隐藏相关边，拖拽结束后再显示。这个 boolean 类型的配置项可以完全避免拖拽过程中相关折线边的重新寻径，默认值为 `false`；\n  - `comboActiveState`：V3.5 及以上版本支持，拖动节点过程中，如果存在 Combo，节点所在 Combo 或节点进入的 Combo 的状态，需要在实例化 Graph 时候通过 `comboStateStyles` 进行配置，默认为空；\n  - `selectedState`：V3.5 及以上版本支持，选中 Combo 的样式，需要在实例化 Graph 时候通过 `comboStateStyles` 进行配置,默认为 selected；\n  - `shouldBegin(e)`：是否允许当前被操作的节点被拖动；\n  - `shouldUpdate(e)`：是否允许当前被操作的节点在拖动过程中更新自身/ delegate 位置；\n  - `shouldEnd(e)`：是否允许当前被操作的节点在拖拽结束时更新位置。\n\n**使用默认配置**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\"drag-node\"],\n  },\n});\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*hre9Qa7yCfQAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n**启用** `delegate`\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\n      {\n        type: \"drag-node\",\n        enableDelegate: true,\n        shouldBegin: (e) => {\n          // 不允许拖拽 id 为 'node1' 的节点\n          if (e.item && e.item.getModel().id === \"node1\") return false;\n        },\n      },\n    ],\n  },\n});\n```\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*BN83QJQpU40AAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n### click-select\n\n- 含义：点击选中节点，再次点击节点或点击 Canvas 取消选中状态；\n- 配置项：\n  - `type: 'click-select'`；\n  - `multiple`：是否允许多选，默认为 `true`，当设置为 `false`，表示不允许多选；\n  - `shouldBegin(e)`：是否允许该 behavior 发生，参考下面示例；\n  - `shouldUpdate(e)`：是否允许对该 behavior 发生状态响应，参考下面示例。\n- 相关时机事件：\n  - `'nodeselectchange'`：当选中的元素集合发生变化时将会触发该时机事件。使用 `graph.on('nodeselectchange', e => {...})` 监听。其参数 `e` 有以下字段：\n    - `e.target`：当前操作的 item；\n    - `e.selectedItems`：当前操作后，所有被选中的 items 集合；\n    - `e.select`：当前操作是选中(true)还是取消选中(false)。\n\n**使用默认配置**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\"click-select\"],\n  },\n});\n\n// 当 click-select 选中的元素集合发生变化时将会触发下面时机事件，e 中包含相关信息\ngraph.on(\"nodeselectchange\", (e) => {\n  // 当前操作的 item\n  console.log(e.target);\n  // 当前操作后，所有被选中的 items 集合\n  console.log(e.selectedItems);\n  // 当前操作时选中(true)还是取消选中(false)\n  console.log(e.select);\n});\n```\n\n当允许多选时，点击节点可多选。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mOiIQqBof8sAAAAAAAAAAABkARQnAQ' width=400/>\n\n**使用自定义参数**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\n      {\n        type: \"click-select\",\n        // 是否允许该 behavior 发生。若返回 false，被操作的 item 不会被选中，也不会触发 'nodeselectchange' 时机事件\n        shouldBegin: (e) => {\n          // 当点击的图形名为 'text-shape' 时，不允许该 behavior 发生\n          if (e.target.get(\"name\") === \"text-shape\") return false;\n          // 当点击的节点/边/ combo 的 id 为 'id1' 时，不允许该 behavior 发生\n          if (e.item.getModel().id === \"id1\") return false;\n          return true;\n        },\n        // 是否允许对该 behavior 发生状态响应。若返回 false，被操作的对象的状态及相关状态样式不会被更新，但是仍然会触发 'nodeselectchange' 时机事件\n        shouldUpdate: (e) => {\n          // 当点击的节点/边/ combo 的 id 为 'id2' 时，该 item 不会发生状态的改变\n          if (e.item.getModel().id === \"id2\") return false;\n          return true;\n        },\n      },\n    ],\n  },\n});\n\n// 当 click-select 选中的元素集合发生变化时将会触发下面时机事件，evt 中包含相关信息\ngraph.on(\"nodeselectchange\", (e) => {\n  // 当前操作的 item\n  console.log(e.target);\n  // 当前操作后，所有被选中的 items 集合\n  console.log(e.selectedItems);\n  // 当前操作时选中(true)还是取消选中(false)\n  console.log(e.select);\n});\n```\n\n以上配置中，用户可按住 **Ctrl** 键进行多选，也可以配置 **Alt** 键。当配置了  `multiple` 参数为 `false`，则表示不允许多选，此时 `trigger` 参数无效。\n\n### tooltip\n\n- 含义：节点文本提示；\n- 配置项：\n  - `type: 'tooltip'`；\n  - `formatText(model)`：格式化函数，可以返回文本或者 HTML；\n  - `offset`：tooltip 距离的偏移量；\n  - `shouldBegin(e)`：是否允许 toolip 出现；\n  - `shouldUpdate(e)`：是否允许 toolip 内容更新。\n- 相关时机事件：\n  - `tooltipchange`：当 tooltip 发生变化时被触发。使用 `graph.on('tooltipchange', e => {...})` 监听。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n  modes: {\n    default: [\n      {\n        type: 'tooltip',\n        formatText(model) {\n          return model.xxx;\n        },\n        offset: 10,\n      },\n    ],\n  },\n});\n```\n\n**提示：由于 F6 没有内置任何 tooltip 的样式，用户需要自己定义样式，例如：**\n\n```css\n.g6-tooltip {\n  padding: 10px 6px;\n  color: #444;\n  background-color: rgba(255, 255, 255, 0.9);\n  border: 1px solid #e2e2e2;\n  border-radius: 4px;\n}\n```\n\n### activate-relations\n\n- 含义：当触碰某节点时，突出显示该节点以及与其直接关联的节点和连线；\n- `type: 'activate-relations'`；\n- 参数：\n  - `activeState: 'active'`。活跃节点状态。当行为被触发，需要被突出显示的节点和边都会附带此状态，默认值为  `active`；可以与 graph 实例的  `nodeStyle`  和  `edgeStyle`  结合实现丰富的视觉效果。\n  - `inactiveState: 'inactive'`。非活跃节点状态。不需要被突出显示的节点和边都会附带此状态。默认值为  `inactive`。可以与 graph 实例的  `nodeStyle`  和  `edgeStyle`  结合实现丰富的视觉效果；\n  - `resetSelected`：高亮相连节点时是否重置已经选中的节点，默认为 `false`，即选中的节点状态不会被 `activate-relations` 覆盖；\n  - `shouldUpdate(e)`：是否允许该 behavior 发生。\n- 相关时机事件：\n  - `'afteractivaterelations'`：当高亮发生改变时触发该时机事件。使用 `graph.on('afteractivaterelations', evt => {...})` 监听。其参数 `e` 有以下字段：\n    - `e.item`：当前操作的节点 item；\n    - `e.action`：当前操作是选中(`'activate'`)还是取消选中(`'deactivate'`)。\n\n<br />**使用默认配置**<br />\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\"activate-relations\"],\n  },\n});\n\ngraph.on(\"afteractivaterelations\", (e) => {\n  // 当前操作的节点 item\n  console.log(e.item);\n  // 当前操作是选中(`'activate'`)还是取消选中(`'deactivate'`)\n  console.log(e.action);\n});\n```\n\n默认情况下，选中的节点状态，在操作完以后仍然会保持选中状态。<br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bG31RqbM4JMAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n**使用自定义参数**\n\n```javascript\nconst graph = new F6.Graph({\n  modes: {\n    default: [\n      {\n        type: \"activate-relations\",\n        resetSelected: true,\n      },\n    ],\n  },\n});\n\ngraph.on(\"afteractivaterelations\", (e) => {\n  // 当前操作的节点 item\n  console.log(e.item);\n  // 当前操作是选中(`'activate'`)还是取消选中(`'deactivate'`)\n  console.log(e.action);\n});\n```\n\n配置 `resetSelected` 参数为 `true` 后，交互后会重置节点的选择状态。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*VQDrT5Qpq_sAAAAAAAAAAABkARQnAQ' width=400 alt='img'/>\n\n### collapse-expand\n\n- 含义：只适用于树图，展开或收起子树；\n- 注意：若希望在首次布局时有默认收起的子树，则可以在数据中设置子树根节点的属性 `collapsed` 为 `true`。若希望使用代码控制子树的展开/收起，同样可以在数据中设置子树根节点的 `collapsed` 属性，并调用 `treeGraph.layout()` 使之生效；\n- 配置项：\n  - `type: 'collapse-expand'`；\n  - `trigger`：收起和展开树图的方式，支持 `'tap'` 和 `'dbltap'` 两种方式。默认为 `'tap'`，即单击；\n  - `onChange`：收起或展开的回调函数。\n  - `shouldBegin(e)`：是否允许该 behavior 在当前操作的 item 上发生。\n- 相关时机事件：\n  - `itemcollapsed`：当 collapse-expand 发生时被触发。使用 `graph.on('itemcollapsed', e => {...})` 监听，参数 `e` 有以下字段：\n    - `e.item`：当前被操作的节点 item；\n    - `e.collapsed`：当前操作是收起（`true`）还是展开（`false`）。\n\n**用法**\n\n```javascript\nconst graph = new F6.TreeGraph({\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        trigger: \"tap\",\n        onChange: (item, collapsed) => {\n          const data = item.get(\"model\").data;\n          data.collapsed = collapsed;\n          return true;\n        },\n        shouldBegin: (e) => {\n          // 若当前操作的节点 id 为 'node1'，则不发生 collapse-expand\n          if (e.item && e.item.getModel().id === \"node1\") return false;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n});\n\ngraph.on(\"itemcollapsed\", (e) => {\n  // 当前被操作的节点 item\n  console.log(e.item);\n  // 当前操作是收起（`true`）还是展开（`false`）\n  console.log(e.collapsed);\n});\n```\n"
  },
  {
    "path": "packages/site/docs/manual/middle/states/mode.zh.md",
    "content": "---\ntitle: 交互模式 Mode\norder: 3\n---\n\n## 什么是 Mode\n\n用户在交互一张图时，可能由于意图不同而存在不同的交互模式，例如在编辑模式下点击节点需要弹出窗口让用户编辑，在查看模式下点击节点需要选中节点。\n\n为了解决上述问题，F6 提供了交互模式 Mode，它是图上交互行为 [Behavior](/zh/docs/manual/middle/states/defaultBehavior) 的管理机制。一个图上可以有存在多种交互模式，每个交互模式包含多种交互行为 [Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n例如，存在 default 和 edit 两种 mode（交互模式）:\n\n- default 模式中包含点击选中节点行为和拖拽画布行为;\n- edit 模式中包含点击节点弹出编辑框行为和拖拽节点行为。\n\n默认情况下，该图对 default 模式中的行为见效，即点击节点时节点被选中而不是弹出编辑框。用户可以通过简单的命令切换该图的行为模式到 edit 模式，则 default 模式中的行为失效，edit 交互模式中的行为起效，即点击节点将弹出编辑框。\n\n## 配置 Mode\n\n在实例化图时配置 `modes` 属性：\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 500,\n  height: 500,\n  modes: {\n    // 支持的 behavior\n    default: ['drag-canvas', 'zoom-canvas'],\n    edit: ['click-select'],\n  },\n});\n```\n\n以上是模式定义的一个例子。在图上定义了两个模式，分别是 `default`，`edit`。其中 `default` 包含两个  [Behavior](/zh/docs/manual/middle/states/defaultBehavior)：`'drag-canvas'` 和 '`zoom-canvas'`，都使用行为的默认参数。\n\n## 切换 Mode\n\n默认时 graph 会使用 `default` 模式 ，可以拖动和缩放画布，当需要点击选中节点时，可以通过  `graph.setMode('edit')`  来切换到 `edit` 的 Mode 。\n\n```javascript\ngraph.setMode(\"edit\");\n```\n\n此时 graph 便支持了点击选中节点，`default` 模式下的拖拽画布 `'drag-canvas'`、放缩画布行为 `'zoom-canvas'` 失效。\n\n在调用了 `setMode` 方法后，F6 内部进行了以下操作：\n\n- 解绑目前图模式的所有事件监听；\n- 生成新的 Behavior ，进行事件初始化；\n- 绑定新的行为对应的事件监听。\n\n## 编辑已有的 Mode\n\n如果有已经定义好的 Behavior （[内置 Behavior](/zh/docs/manual/middle/states/defaultBehavior) 或 [自定义 Behavior](/zh/docs/manual/middle/states/custom-behavior)），需要把它添加到某个模式下，可以通过  `graph.addBehaviors` 方法；需要从某个模式中移除一些 Behavior，可以使用  `graph.removeBehaviors` 方法。如下示例：\n\n```javascript\n// 向 default 模式中添加名为 drag-canvas 的行为，并使用行为的默认配置\ngraph.addBehaviors(\"drag-canvas\", \"default\");\n\n// 从 default 模式中移除名为 drag-canvas 的行为\ngraph.removeBehaviors(\"drag-canvas\", \"default\");\n\n// 向 edit 模式中添加名为 drag-canvas 的行为，并定义个性化配置\ngraph.addBehaviors(\n  {\n    type: \"drag-canvas\",\n    direction: \"x\",\n  },\n  \"edit\",\n);\n\n// 从 edit 模式中移除名为 drag-canvas 的行为\ngraph.removeBehaviors(\"drag-canvas\", \"edit\");\n\n// 一次向 default 模式中添加多个行为\ngraph.addBehaviors([\"drag-canvas\", \"zoom-canvas\"], \"default\");\n\n// 一次从 default 模式中移除多个行为\ngraph.removeBehaviors([\"drag-canvas\", \"zoom-canvas\"], \"default\");\n\n// --------\n\n// 更新 'default' 模式下的 behavior 'zoom-canvas'\ngraph.updateBehavior(\n  \"zoom-canvas\",\n  { sensitivity: 1.5, enableOptimize: true },\n  \"default\",\n);\n\n// 更新 'select' 模式下的 behavior 'click-select'\ngraph.updateBehavior(\"click-select\", { trigger: \"ctrl\" }, \"select\");\n```\n\n## 相关阅读\n\n- [使用多种交互模式](/zh/docs/manual/advanced/mode-and-custom-behavior)\n- [内置交互行为 Behavior](/zh/docs/manual/middle/states/defaultBehavior)\n- [自定义交互行为 Behavior](/zh/docs/manual/middle/states/custom-behavior)\n"
  },
  {
    "path": "packages/site/docs/manual/middle/states/state.zh.md",
    "content": "---\ntitle: 状态 State\norder: 4\n---\n\n## 什么是 state\n\nF6 中的 **state**，指的是节点或边的状态，包括**交互状态**和**业务状态**两种。\n\n在 F6 中，配置交互状态和业务状态的方式是相同的。对于部分只使用 F6 来完成某个需求的开发，而不想深入理解 F6 的用户，其实不用区分交互状态和业务状态的区别，使用相同的方式定义状态，完全没有理解成本。\n\n### 交互状态\n\n交互状态是与具体的交互动作密切相关的，如用户使用选中某个节点则该节点被选中，hover 到某条边则该边被高亮等。\n\nF6 中默认处理的是交互状态。\n\n### 业务状态\n\n指根据用户业务需求自定义的状态。业务状态是与交互动作无关的，与具体业务逻辑强相关的，也可理解为是强数据驱动的。如某个任务的执行状态、某条申请的审批状态等，不同的数据值代表不同的业务状态。业务状态与用户交互动作无关，但在 F6 中的处理方式同交互状态一致。\n\n## 何时使用 state\n\n判断是否该使用 state 的原则很简单，从交互和业务两个层面来看：\n\n- 某个交互动作要改变节点或边的样式及属性；\n- 呈现给用户的内容会根据数据改变（如 1 代表成功，0 代表失败）。\n\n满足上述条件其一，则应该使用 state。\n\n## 设置 state\n\n**使用 `graph.setItemState(item, stateName, stateValue)`  来使定义的状态生效**。\n\n### 状态的类型\n\n状态可以是二值的，也可以是多值的。\n\n#### 二值状态\n\n通过 `graph.setItemState(item, stateName, stateValue)` 设置状态的值。\n\n| 参数名     | 类型     | 描述                                            |\n| ---------- | -------- | ----------------------------------------------- |\n| item       | Number   | 需要被设置状态的节点/边实例                     |\n| stateName  | String   | 状态名称，可以是任意字符串                      |\n| stateValue | Booelean | true 代表该状态是被激活，false 代表该状态被灭活 |\n\n示例：\n\n```javascript\ngraph.setItemState(item, \"stateName\", true);\n```\n\n#### 多值状态\n\n多值状态在 F6 后支持。通过 `graph.setItemState(item, stateName, stateValue)` 设置状态的值。\n\n| 参数名     | 类型   | 描述                        |\n| ---------- | ------ | --------------------------- |\n| item       | Number | 需要被设置状态的节点/边实例 |\n| stateName  | String | 状态名称，可以是任意字符串  |\n| stateValue | String | 状态的值，可以是任意字符串  |\n\n示例：\n\n```javascript\ngraph.setItemState(item, \"stateName\", \"stateValue\");\n```\n\n### 调用的时机\n\n该函数可以在监听函数 `graph.on` 中被调用，也可以在自定义 Behavior 中调用，或在其他任意地方用于响应交互/业务的变化。\n\n#### graph.on\n\n在回调函数中使定义的交互状态 hover 生效。\n\n```javascript\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"tap\", true);\n});\n\ngraph.on(\"node:dbltap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"tap\", false);\n});\n```\n\n#### Behavior\n\n在自定义 Behavior 中使定义的交互状态 selected 生效。\n\n```javascript\nF6.registerBehavior(\"nodeClick\", {\n  getEvents() {\n    return {\n      \"node:tap\": \"onTap\",\n    };\n  },\n  onTap(e) {\n    e.preventDefault();\n    if (!this.shouldUpdate.call(this, e)) {\n      return;\n    }\n    const { item } = e;\n    const graph = this.graph;\n    graph.setItemState(item, \"selected\", true);\n  },\n});\n```\n\n## 配置 state 样式\n\n上小节使用 `graph.setItemState` 使某些状态在图元素（节点/边）上被激活/灭活，仅仅是为该元素做了某些状态的标识。为了将这些状态反应到终端用户所见的视觉空间中，我们需要为不同的状态设置不同的图元素样式，以响应该图元素状态的变化。\n\n在 F6 中，有两种方式配置不同状态的样式：\n\n- 在实例化 Graph 时，通过 `nodeStateStyles` 和 `edgeStateStyles` 对象定义；\n- 在节点/边数据中，在 `stateStyles` 对象中定义状态；\n- 在自定义节点/边时，在 options 配置项的 `stateStyles` 对象中定义状态。\n\n可为二值/多值状态设置 keyShape 样式以及其他子图形的样式。\n\n`nodeStateStyles` 、 `edgeStateStyles` 、 `stateStyles` 对象的格式如下：\n\n```javascript\n{\n  // 二值状态 hover 为 true 时的样式\n  hover: {\n    fill: '#d3adf7',\n    // name 为 shape-name1 的子图形在该状态值下的样式\n    'node-label': {\n      fontSize: 15\n    },\n  },\n  // 二值状态 running 为 true 时的样式\n  running: {\n    stroke: 'steelblue',\n  },\n  // 多值状态与子图形样式的设置在 F6 后支持\n  // 多值状态 bodyState 为 health 时的样式\n  'bodyState:health': {\n    // keyShape 该状态值下的样式\n    fill: 'green',\n    // ... 其他样式\n    // name 为 shape-name1 的子图形在该状态值下的样式\n    'shape-name1': {\n      stroke: '#ccc'\n      // ... 其他样式\n    },\n    // name 为 shape-name2 的子图形在该状态值下的样式\n    'shape-name2': {\n      fill: 'red'\n      // ... 其他样式\n    }\n  },\n  // 多值状态 bodyState 为 suspect 时的样式\n  'bodyState:suspect': {\n    // ...\n  },\n  // 多值状态 bodyState 为 ill 时的样式\n  'bodyState:ill': {\n    // ...\n  }\n  // ... 其他状态\n}\n```\n\n### 实例化 Graph 时定义 state 样式\n\n使用这种方式可以为图上的所有节点/边配置全局统一的 state 样式。\n\n```javascript\nconst graph = new F6.Graph({\n  ...\n  width: 800,\n  height: 600,\n  defaultNode: {\n    type: 'diamond',\n    style: {\n      // 默认状态样式\n      fill: 'blue',\n      // ... 其他样式\n    },\n  },\n  nodeStateStyles: {\n    // ...见上方例子\n  },\n  defaultEdge: {\n    // ...\n  },\n  edgeStateStyles: {\n    // ...\n  },\n});\n```\n\n上面的实例代码中，我们在实例化 Graph 时候，通过 `nodeStateStyles` 定义了交互状态 `hover` 和业务状态 `running` 的样式。当某个任务状态变为正在执行时，二值状态 `running` 被设置为 `true` 后，节点的描边色将变为 `'steelblue'`。当二值状态 `hover` 被设置为 `true` 时，节点 `keyShape` 的填充色会变为 `'#d3adf7'`；且该节点中 `name` 为 `'node-label'` 的子图形也会发生改变，这里的 `'node-label'` 即节点上的文本图形，它的 `fontSize` 将会发生改变。 <br /><img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Beu6QY_ETOgAAAAAAAAAAABkARQnAQ' width=150 alt='img'/>\n\n上面实例还指定了名为 `'bodyState'` 的多值状态各值下的样式。当一个节点的 `'bodyState'` 的值被设置为 `'health'` 时，该节点的 keyShape 样式以及 `name` 为 `'shape-name1'` 和 `'shape-name1'` 的子图形样式都会发生变化。\n\n同理，`defaultEdge` 中的 `style` 属性定义了默认状态下边的样式，使用 `edgeStateStyles`  可以定义不同状态下边的样式。\n\n### 在节点/边数据中定义 state 样式\n\n使用这种方式可以为不同的节点/边分别配置不同的 state 样式。\n\n```javascript\nconst data = {\n  nodes: [\n    {\n      id: \"node1\",\n      styles: {\n        // 默认样式\n      },\n      stateStyles: {\n        //... 见上方例子\n      },\n      // ...\n    },\n    {\n      id: \"node2\",\n      styles: {\n        // 默认样式\n      },\n      stateStyles: {\n        //... 见上方例子\n      },\n      // ...其他配置\n    },\n    // ...\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      styles: {\n        // 默认样式\n      },\n      stateStyles: {\n        //... 见上方例子\n      },\n      // ...其他配置\n    },\n    //...\n  ],\n};\n```\n\n### 自定义节点和边时定义 state 样式\n\n使用这种方式可以为自定义的节点/边类型配置 state 样式。\n\n```javascript\nF6.registerNode('customShape', {\n  // 自定义节点时的配置\n  options: {\n    size: 60,\n    style: {\n      lineWidth: 1\n    },\n    stateStyles: {\n      // ... 见上方例子\n    }\n  }\n}\n```\n\n## 更新状态样式配置\n\n更新状态样式配置是指更改在 [配置 state 样式](#配置-state-样式) 中设置的某状态下的样式配置。如下代码可以修改节点/边实例的默认样式以及各状态下的样式配置。同样，您也可以使用 [配置 state 样式](#配置-state-样式) 中的样式格式修改多值状态的样式配置。\n\n```javascript\ngraph.updateItem(item, {\n  // 修改默认样式\n  style: {\n    stroke: \"green\",\n    // 修改 name 为 'node-label' 的子图形的默认样式\n    \"node-label\": {\n      stroke: \"yellow\",\n    },\n  },\n  stateStyles: {\n    // 修改 hover 状态下的样式\n    hover: {\n      opacity: 0.1,\n      // 修改 name 为 'node-label' 的子图形 hover 状态下的样式\n      \"node-text\": {\n        stroke: \"blue\",\n      },\n    },\n  },\n});\n```\n\n使用 `graph.updateItem` 更新某状态的样式配置时，可能存在两种情况：\n\n- item 的该状态为激活状态，即 `item.hasState('hover') === true`：此时该状态值对应的修改后的样式配置会立即在 item 上生效；\n- item 的该状态为灭活状态或不存在该状态，即 `item.hasState('hover') === false`：在用户执行 `graph.setItemState(item, 'hover', true)` 后，更新后的配置在 item 上的样式。\n\n## 取消状态\n\n建议使用 `graph.clearItemStates` 来取消 `graph.setItemState` 设置的状态。`graph.clearItemStates` 支持一次取消单个或多个状态。\n\n```javascript\ngraph.setItemState(item, \"bodyState\", \"health\");\ngraph.setItemState(item, \"selected\", true);\ngraph.setItemState(item, \"active\", true);\n// 取消单个状态\ngraph.clearItemStates(item, \"selected\");\ngraph.clearItemStates(item, [\"selected\"]);\n// 取消多个状态\ngraph.clearItemStates(item, [\"bodyState:health\", \"selected\", \"active\"]);\n```\n\n## 状态优先级\n\n有时候，各个状态的样式之间可能有冲突，需要控制哪一状态的样式优先显示。F6 不提供显式设置状态优先级的方法，所有状态遵循：后设置的状态（通过 `graph.setItemState`）优先级高于前者。用户可以通过 `hasState` 方法判断元素的某种状态是否是激活态，从而判断是否应该激活另一个状态。这一逻辑完全由业务用户控制，实现这种控制也非常简单。\n\n```javascript\n// 设置节点处于 active 状态\ngraph.setItemState(item, \"active\", true);\n// 鼠标 hover\nconst hasActived = item.hasState(\"active\");\n// 当节点没有 active 时才设置 hover 状态\nif (!hasActived) {\n  graph.setItemState(item, \"hover\", true);\n}\n```\n\n## 小结\n\nF6 底层提供了状态管理的能力，通过使用 state，简化了状态管理，降低了用户的认知成本。更多关于 F6 中状态的内容请参考  <a href='https://www.yuque.com/antv/g6/xiux28' target='_blank'>F6 状态量思考</a>。\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/h5/preface.zh.md",
    "content": "---\ntitle: H5应用中使用F6\norder: 7\n---\n\n## 💗 敬请期待\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/animation.zh.md",
    "content": "---\ntitle: 动画（选读）\norder: 6\n---\n\n由于动画机制较为复杂，我们未在 Tutorial-案例 中增加动画。本文简单描述了 F6 中的动画，希望快速上手的用户可以跳过本文，希望深入了解的用户可参见：[基础动画](/zh/docs/manual/middle/animation)。\n\nF6 的动画分为两个层次：\n\n- 图全局动画：图整体变化时的动画过渡；\n- 元素动画：节点和边的动画效果。\n\n## 全局动画\n\nF6 的全局动画指通过图实例进行操作时，产生的动画效果。例如：\n\n- `graph.updateLayout(cfg)`\n\n通过实例化图时配置 `animate: true`，可以达到每次进行上述操作时，动画效果变化的目的。\n\n**例子**\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                      // 其他配置项\n  animate: true, // Boolean，可选，全局变化时否使用动画过渡\n});\n```\n\n## 元素动画\n\nF6 允许用户通过自定义节点/边的方式，给元素增加动画效果，如下：<br />\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*3IcaQrFvQU0AAAAAAAAAAAAAARQnAQ' width=330  alt='img'/>\n\n更多关于动画的案例请参考 [F6 中的动画案例](/zh/docs/examples/scatter/node)。\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/behavior.zh.md",
    "content": "---\ntitle: 图的交互 Behavior\norder: 4\n---\n\nF6 封装了一系列交互方法，方便用户直接使用。本文将为 **Tutorial 案例** 增加简单的交互：hover 节点、点击节点、点击边、放缩画布、拖拽画布。本节目标效果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*ZNTWT6DRWBgAAAAAAAAAAAAAARQnAQ' width=500 alt='img' />\n\n> 图 1 Tutorial 案例的交互效果。\n\n## 基本概念\n\n### 交互行为 Behavior\n\nF6 中的交互行为。F6 **内置**了一系列交互行为，用户可以直接使用。简单地理解，就是可以一键开启这些交互行为：\n\n- `drag-canvas`：拖拽画布；\n- `zoom-canvas`：缩放画布。\n\n更多详见：[交互行为 Behavior](/zh/docs/manual/middle/states/defaultBehavior)\n\n### 交互管理 Mode\n\nMode 是 F6 交互行为的管理机制，一个 mode 是多种行为 Behavior 的组合，允许用户通过切换不同的模式进行交互行为的管理。由于该概念较为复杂，在本入门教程中，读者不需要对该机制深入理解。如有需求，参见 [交互模式 Mode](/zh/docs/manual/middle/states/mode)。\n\n### 交互状态 State\n\n[状态 State](/zh/docs/manual/middle/states/state) 是 F6 中的状态机制。用户可以为图中的元素（节点/边）设置不同的状态及不同状态下的样式。在状态发生变化时，F6 自动更新元素的样式。例如，可以为节点设置状态 `'tap'` 为 `true` 或 `false`，并为节点设置 `'tap'` 的样式为加粗节点边框。当 `'tap'` 状态被切换为 `true` 时，节点的边框将会被加粗，`'tap'` 状态被切换为 `false` 时，节点的样式恢复到默认。在下面的使用方法中，将会有具体例子。\n\n## 使用方法\n\n### 拖拽、缩放——内置的交互行为\n\n在 F6 中使用内置 Behavior 的方式非常简单，只需要在图实例化时配置 `modes`。拖拽和缩放属于 F6 内置交互行为，修改代码如下：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                                          // 其他配置项\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"], // 允许拖拽画布、放缩画布、拖拽节点\n  },\n});\n```\n\n除了直接使用内置交互名称外，也可以为 Behavior 配置参数，例如放缩画布的敏感度、最大/最小放缩程度等，具体用法参见  [交互行为 Behavior](/zh/docs/manual/middle/states/defaultBehavior)。\n\n上面代码中的 `modes` 定义了 F6 的模式，`default` 是默认的模式，还可以允许有其他的模式，比如：编辑模式 `edit` 等。不同的模式，用户能进行的行为可以不同，比如默认模式能拖拽画布，编辑模式不允许拖拽画布：\n\n```javascript\n// 举例解释不同模式\nmodes: {\n  default: ['drag-canvas'],\n  edit: []\n}\n```\n\n更多关于模式、行为可以参考: [交互模型 Mode](/zh/docs/manual/middle/states/mode) 和 [交互行为 Behavior](/zh/docs/manual/middle/states/defaultBehavior) 文档。\n\n### Tap 改变样式——状态式交互\n\n有时我们希望通过交互可以将元素样式变成特定样式，如我们看到的图 1 中，点击节点、点击边时，样式发生了变化。这里涉及到了 F6 中 [状态 State](/zh/docs/manual/middle/states/state) 的概念。简单地说，是否 `tap` 、任何操作（可以是自己起的状态名），都可以称为一种状态（state）。用户可以自由设置不同状态下的元素样式。要达到交互更改元素样式，需要两步：\n\n- Step 1: 设置各状态下的元素样式；\n- Step 2: 监听事件并切换元素状态。\n\n#### 设置各状态下的元素样式\n\n在实例化图时，通过 `nodeStateStyles` 和 `edgeStateStyles` 两个配置项可以配置元素在不同状态下的样式。<br />为达到 **Tutorial 案例** 中的效果：\n\n- 点击节点时，该节点边框加粗变黑；\n- 点击边时，该边变成蓝色。\n\n下面代码设置了节点在 `tap` 状态为 `true` 时的样式，边在 `tap` 状态为 `true` 时的样式：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                           // 其他配置项\n  // 节点不同状态下的样式集合\n  nodeStateStyles: {\n    // 点击节点，即 tap 状态为 true 时的样式\n    tap: {\n      stroke: \"#000\",\n      lineWidth: 3,\n    },\n  },\n  // 边不同状态下的样式集合\n  edgeStateStyles: {\n    // 点击边，即 tap 状态为 true 时的样式\n    tap: {\n      stroke: \"steelblue\",\n    },\n  },\n});\n```\n\n#### 监听事件并切换元素状态\n\nF6 中所有元素监听都挂载在图实例上，如下代码中的 `graph` 对象是 F6.Graph 的实例，`graph.on()`  函数监听了某元素类型（`node` / `edge`）的某种事件（`tap` / ... 所有事件参见：[Event API](/zh/docs/api/Event)）。\n\n```javascript\n// 在图实例 graph 上监听\ngraph.on(\"元素类型:事件名\", (e) => {\n  // do something\n});\n```\n\n现在，我们通过下面代码，为 **Tutorial 案例** 增加点和边上的监听事件，并在监听函数里使用 `graph.setItemState()` 改变元素的状态：\n\n```javascript\n// 点击节点\ngraph.on(\"node:tap\", (e) => {\n  // 先将所有当前是 tap 状态的节点置为非 tap 状态\n  const tapNodes = graph.findAllByState(\"node\", \"tap\");\n  tapNodes.forEach((cn) => {\n    graph.setItemState(cn, \"tap\", false);\n  });\n  const nodeItem = e.item; // 获取被点击的节点元素对象\n  graph.setItemState(nodeItem, \"tap\", true); // 设置当前节点的 tap 状态为 true\n});\n\n// 点击边\ngraph.on(\"edge-shape:tap\", (e) => {\n  // 先将所有当前是 tap 状态的边置为非 tap 状态\n  const tapEdges = graph.findAllByState(\"edge\", \"tap\");\n  tapEdges.forEach((ce) => {\n    graph.setItemState(ce, \"tap\", false);\n  });\n  const edgeItem = e.item; // 获取被点击的边元素对象\n  graph.setItemState(edgeItem, \"tap\", true); // 设置当前边的 tap 状态为 true\n});\n```\n\n## 完整代码\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/tutorial-behavior?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/elements.zh.md",
    "content": "---\ntitle: 元素及其配置\norder: 2\n---\n\n图的元素特指图上的**节点** `Node` 和**边** `Edge` 。在上一章节中，我们已经将 **Tutorial 案例**的图绘制了出来，但是各个元素及其 `label`  在视觉上很简陋。本文通过将上一章节中简陋的元素美化成如下效果，介绍元素的属性、配置方法。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*46GdQaNFiVIAAAAAAAAAAABkARQnAQ' width=450 height=450  alt='img'/>\n\n> 图 1  元素属性配置后的 **Tutorial 案例**。\n\n## 基本概念\n\n### 图的元素\n\n图的元素特指图上的**节点** `Node` 和**边** `Edge` 。F6 内置了一系列 [内置的节点](/zh/docs/manual/middle/elements/nodes/defaultNode) 和 [内置的边](/zh/docs/manual/middle/elements/edges/defaultEdge)，供用户自由选择。F6 不同的内置节点或不同的内置边主要区别在于元素的 [图形 Shape](/zh/docs/manual/middle/elements/shape/shape-keyshape)，例如，节点可以是圆形、矩形、图片等。\n\n## 元素的属性\n\n不论是节点还是边，它们的属性分为两种：\n\n- **样式属性 `style`**：对应 Canvas 中的各种样式，在元素[状态 State](/zh/docs/manual/middle/states/state) 发生变化时，可以被改变；\n- **其他属性**：例如图形类型（ `type`）、id（`id` ）一类在元素[状态 State](/zh/docs/manual/middle/states/state) 发生变化时不能被改变的属性。\n\n例如，F6 设定 tap 节点，造成节点状态的改变，只能自动改变节点的**样式属性**（如 `fill`、`stroke` 等**）**，**其他属性**（如 `type`  等）不能被改变。如果需要改变其他属性，要通过  [graph.updateItem](/zh/docs/api/graphFunc/item#graphupdateitemitem-model-stack) 手动配置。**样式属性**是一个名为  `style`  的对象， `style` 字段与其他属性并行。\n\n### 数据结构\n\n以节点元素为例，其属性的数据结构如下：\n\n```javascript\n{\n\tid: 'node0',          // 元素的 id\n  type: 'circle',       // 元素的图形\n  size: 40,             // 元素的大小\n  label: 'node0'        // 标签文字\n  visible: true,        // 控制初次渲染显示与隐藏，若为 false，代表隐藏。默认不隐藏\n  labelCfg: {           // 标签配置属性\n    positions: 'center',// 标签的属性，标签在元素中的位置\n    style: {            // 包裹标签样式属性的字段 style 与标签其他属性在数据结构上并行\n      fontSize: 12      // 标签的样式属性，文字字体大小\n      // ...            // 标签的其他样式属性\n    }\n  }\n  // ...,               // 其他属性\n  style: {              // 包裹样式属性的字段 style 与其他属性在数据结构上并行\n    fill: '#000',       // 样式属性，元素的填充色\n    stroke: '#888',     // 样式属性，元素的描边色\n    // ...              // 其他样式属性\n  }\n}\n```\n\n边元素的属性数据结构与节点元素相似，只是其他属性中多了 `source` 和 `target` 字段，代表起始和终止节点的 `id`。<br />细化在图 1 中 **Tutorial 案例** 的视觉需求，我们需要完成：\n\n- 视觉效果：\n  - R1: 节点的描边和填充色，对应节点样式属性：`fill`，`stroke`；\n  - R2: 节点上标签文本的颜色，对应节点其他属性：`labelCfg`；\n  - R3: 边的透明度和颜色，对应边样式属性：`opacity`，`stroke`；\n  - R4: 边上标签文本的方向和颜色，对应边其他属性：`labelCfg`；\n- 数据与视觉映射：\n  - R5: 根据数据中节点的 `class` 属性映射节点的形状，对应节点其他属性：`type`；\n  - R6: 根据数据中边的 `weight` 属性映射边的粗细，对应边样式属性：`lineWidth`。\n\n## 配置属性\n\n在 F6 中，根据不同的场景需求，有 7 种配置元素属性的方式。这里，我们简单介绍其中的两种：\n\n1. 实例化图时配置元素的全局属性；\n2. 在数据中配置。\n\n### 1. 实例化图时全局配置\n\n**适用场景：**所有节点统一的属性配置，所有边统一的属性配置。<br />**使用方式：**使用图的两个配置项：\n\n- `defaultNode`：节点在默认状态下的**样式属性**（`style`）和**其他属性**；\n- `defaultEdge`：边在默认状态下的**样式属性**（`style`）和**其他属性**。\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span> 由于是统一的配置，不能根据数据中的属性（如 `class`、`weight`）等值的不同进行个性化设置，因此只能满足 R1、R2、R3、R4 需求。达到如下效果：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*bufdS75wcmMAAAAAAAAAAABkARQnAQ' width=450 height=450 alt='img' />\n\n> 图 2  全局配置元素属性后的 **Tutorial 案例**。\n\n<br />通过如下方式在实例化图时  `defaultNode` 和  `defaultEdge` ，可以完成上图效果：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                   // 图的其他配置\n  // 节点在默认状态下的样式配置（style）和其他配置\n  defaultNode: {\n    size: 30, // 节点大小\n    // ...                 // 节点的其他配置\n    // 节点样式配置\n    style: {\n      fill: \"steelblue\", // 节点填充色\n      stroke: \"#666\", // 节点描边色\n      lineWidth: 1, // 节点描边粗细\n    },\n    // 节点上的标签文本配置\n    labelCfg: {\n      // 节点上的标签文本样式配置\n      style: {\n        fill: \"#fff\", // 节点标签文字颜色\n      },\n    },\n  },\n  // 边在默认状态下的样式配置（style）和其他配置\n  defaultEdge: {\n    // ...                 // 边的其他配置\n    // 边样式配置\n    style: {\n      opacity: 0.6, // 边透明度\n      stroke: \"grey\", // 边描边颜色\n    },\n    // 边上的标签文本配置\n    labelCfg: {\n      autoRotate: true, // 边上的标签文本根据边的方向旋转\n    },\n  },\n});\n```\n\n### 2. 在数据中配置\n\n**适用场景：**不同节点/边可以有不同的个性化配置。<br />因此，这种配置方式可以满足 R5、R6 需求。<br />**使用方式：**可以直接将配置写入数据文件；也可以在读入数据后，通过遍历的方式写入配置。这里展示读入数据后，通过遍历的方式写入配置。下面代码展示了如何遍历数据进行属性的配置：\n\n```javascript\nconst nodes = remoteData.nodes;\nnodes.forEach((node) => {\n  if (!node.style) {\n    node.style = {};\n  }\n  switch (\n    node.class // 根据节点数据中的 class 属性配置图形\n  ) {\n    case \"c0\": {\n      node.type = \"circle\"; // class = 'c0' 时节点图形为 circle\n      break;\n    }\n    case \"c1\": {\n      node.type = \"rect\"; // class = 'c1' 时节点图形为 rect\n      node.size = [35, 20]; // class = 'c1' 时节点大小\n      break;\n    }\n    case \"c2\": {\n      node.type = \"ellipse\"; // class = 'c2' 时节点图形为 ellipse\n      node.size = [35, 20]; // class = 'c2' 时节点大小\n      break;\n    }\n  }\n});\n\ngraph.data(remoteData);\n```\n\n运行结果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*JU6xRZLKCjcAAAAAAAAAAABkARQnAQ' width=450 height=450 alt='img' />\n\n> 图 3\n\n可以看到，图中有一些节点被渲染成了矩形，还有一些被渲染成了椭圆形。除了设置 `type` 属性之外，我们还覆盖了上文全局配置的节点的 `size` 属性，在矩形和椭圆的情况下，`size` 是一个数组；而在默认圆形的情况下，F6 将仍然读取全局配置的 `size` 属性为数字 `30`。也就是说，动态配置属性让我们既可以根据数据的不同配置不同的属性值，也可以有能力覆盖全局静态的属性值。\n\n进一步地，我们尝试根据数据的比重不同，配置不一样边的粗细：\n\n```javascript\n// const nodes = ...\n\n// 遍历边数据\nconst edges = remoteData.edges;\nedges.forEach((edge) => {\n  if (!edge.style) {\n    edge.style = {};\n  }\n  edge.style.lineWidth = edge.weight; // 边的粗细映射边数据中的 weight 属性数值\n});\n\ngraph.data(remoteData);\n```\n\n结果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*46GdQaNFiVIAAAAAAAAAAABkARQnAQ' width=450 height=450 alt='img' />\n\n如图所示，边的粗细已经按照数据的比重成功渲染了出来，但是边原有的样式（透明度、颜色）却丢失了。这是因为我们提到过动态配置属性会覆盖全局配置属性，这里配置了 `style.lineWidth`，导致覆盖了全局的 `style` 对象。解决办法是将被覆盖的边的样式都移到动态配置里面来：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...\n  defaultEdge: {\n    // 去掉全局配置的 style\n    labelCfg: {\n      // 边上的标签文本配置\n      autoRotate: true, // 边上的标签文本根据边的方向旋转\n    },\n  },\n});\n\n// 遍历点数据\n// const nodes = ...\n// nodes.forEach ...\n\n// 遍历边数据\nconst edges = remoteData.edges;\nedges.forEach((edge) => {\n  if (!edge.style) {\n    edge.style = {};\n  }\n  edge.style.lineWidth = edge.weight; // 边的粗细映射边数据中的 weight 属性数值\n  // 移到此处\n  edge.style.opacity = 0.6;\n  edge.style.stroke = \"grey\";\n});\n\ngraph.data(remoteData);\ngraph.render();\n```\n\n## 完整代码\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/tutorial-elements?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/epilog.zh.md",
    "content": "---\ntitle: 结语\norder: 7\n---\n\n恭喜！你已经成功创建了一个基于 F6 的图可视化应用，并学会了：\n\n- 基本绘制方法\n- 远程数据加载\n- 属性配置\n- 布局运用\n- 增加交互\n- 添加辅助工具\n\n如果你希望继续学习深入的 F6 知识，请查看 [F6 核心概念](/zh/docs/manual/middle/graph)；关于 F6 的扩展内容，请查看 [F6 扩展阅读](/zh/docs/manual/advanced/coordinate-system)。\n\n开发过程中可通过 [F6 API](/zh/docs/api/Graph) 快速查询。\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/example.zh.md",
    "content": "---\ntitle: 绘制 Tutorial 案例\norder: 1\n---\n\n本文将进行 **Tutorial 案例** 的简单绘制和配置。通过本文，你将知道创建一般图时一些常用的配置项及其作用。\n\n## 基础绘制\n\n### 创建容器\n\n为了降低小程序中绘图的难度，我们封装了小程序组件，方便用户快速上手 F6。\n\n[支付宝小程序组件](https://www.npmjs.com/package/@antv/f6-alipay)\n\n```bash\nnpm install --save @antv/f6-alipay\n```\n\n`/pages/index/index.json`\n\n```json\n{\n  \"defaultTitle\": \"f6-demo\",\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-alipay/es/container/container\"\n  }\n}\n```\n\n`/pages/index/index.axml`\n\n```\n<f6-canvas\n  width=\"{{width}}\"\n  height=\"{{height}}\"\n  forceMini=\"{{false}}\"\n  pixelRatio=\"{{pixelRatio}}\"\n  onInit=\"onCanvasInit\"\n  onTouchEvent=\"onTouch\"\n/>\n```\n\n[微信小程序组件](https://www.npmjs.com/package/@antv/f6-wx)\n\n```bash\nnpm install --save @antv/f6-wx\n```\n\n`/pages/index/index.json`\n\n```\n{\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n```\n\n`/pages/index.index.wxml`\n\n```\n\n  <f6-canvas\n    width=\"{{canvasWidth}}\"\n    height=\"{{canvasHeight}}\"\n    pixelRatio=\"{{pixelRatio}}\"\n    onInit=\"{{onCanvasInit}}\"\n    onTouchEvent=\"{{onTouch}}\" >\n  </f6-canvas>\n\n```\n\n### 数据准备\n\n引入 F6 的数据源为 JSON 格式的对象。该对象中需要有节点（`nodes`）和边（`edges`）字段，分别用数组表示：\n\n```javascript\nconst initData = {\n  // 点集\n  nodes: [\n    {\n      id: \"node1\", // 节点的唯一标识\n      x: 100, // 节点横坐标\n      y: 200, // 节点纵坐标\n      label: \"起始点\", // 节点文本\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      label: \"目标点\",\n    },\n  ],\n  // 边集\n  edges: [\n    // 表示一条从 node1 节点连接到 node2 节点的边\n    {\n      source: \"node1\", // 起始点 id\n      target: \"node2\", // 目标点 id\n      label: \"我是连线\", // 边的文本\n    },\n  ],\n};\n```\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span>\n\n- `nodes` 数组中包含节点对象，唯一的 `id` 是每个节点对象中必要的属性，`x`、 `y` 用于定位；\n- `edges` 数组中包含边对象，`source` 和 `target` 是每条边的必要属性，分别代表了该边的起始点 `id` 与 目标点 `id`。\n- 点和边的更多属性参见：[内置的节点](/zh/docs/manual/middle/elements/nodes/defaultNode)，[内置的边](/zh/docs/manual/middle/elements/edges/defaultEdge) 教程。\n\n### 图实例化\n\n图实例化时，至少需要为图设置容器、宽、高：\n\n```javascript\nconst graph = new F6.Graph({\n  container: null, // 如果为小程序，则传null或者不传\n  renderer: \"mini\", // renderer 目前支持`mini`和`mini-native`两个值，可以通过onCanvasInit回调获取\n  context: ctx, // 由于小程序中无法直接获取canvas的context，所以需要从外部传入\n  width: 800, // Number，必须，图的宽度\n  height: 500, // Number，必须，图的高度\n});\n```\n\n### 图的渲染\n\n数据的加载和图的渲染是两个步骤，可以分开进行。\n\n```javascript\n// const initData = { ... }\n//  const graph = ...\ngraph.data(initData); // 加载数据\ngraph.render(); // 渲染\n```\n\n### 绘制结果\n\n调用 `graph.render()` 方法之后，F6 引擎会根据加载的数据进行图的绘制。结果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*YTfpQYVGhuEAAAAAAAAAAABkARQnAQ' width=400 alt='img' />\n\n## 真实数据加载\n\n上文中，我们使用了仅含有两个节点和一条边的数据，直接将数据定义放在了代码中。而真实场景的数据通常是远程接口请求加载的。为了方便，我们已经给读者准备好了一份 JSON 数据文件，地址如下：<br />`https://gw.alipayobjects.com/os/basement_prod/6cae02ab-4c29-44b2-b1fd-4005688febcb.json`，小程序中请求线上数据需使用`my.request(支付宝中)`或者`wx.request(微信中)`，由于请求线上数据还需设置请求白名单，所以在示例中，我们把数据放在了本地 data.js 文件中。请求相关问题参考小程序相关文档即可。\n\n运行后，我们得到了下图结果：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*KzQaSZKIsQoAAAAAAAAAAABkARQnAQ' width=550 height=350 alt='img' />\n\n乍看之下，图像有点奇怪，实际上数据已经正确的加载了进来。由于数据量比较大，节点和边都非常的多，显得内容比较杂乱。另外由于画布大小的限制，实际的图被画布截断了，目前只能看见部分内容，这个问题后文会继续解决。\n\n请看下面摘取自 tutorial-data.json 的部分数据，我们发现数据中节点定义了位置信息 `x` 与 `y`，并且很多节点的  `x` 和 `y` 不在图的宽高（`width: 800, height: 600`）范围内：\n\n```json\n{\n  \"nodes\": [\n    { \"id\": \"0\", \"label\": \"n0\", \"class\": \"c0\", \"x\": 1000, \"y\": -100 },\n    { \"id\": \"1\", \"label\": \"n1\", \"class\": \"c0\", \"x\": 300, \"y\": -10 }\n    //...\n  ],\n  \"edges\": [\n    //...\n  ]\n}\n```\n\n由于 F6 在读取数据时，发现了数据中带有位置信息（`x` 和 `y`），就会按照该位置信息进行绘制，这是为了满足按照原始数据绘制的需求设计的。但为优化超出屏幕到问题，F6 提供了图的两个相关配置项：\n\n- `fitView`：设置是否将图适配到画布中；\n- `fitViewPadding`：画布上四周的留白宽度。\n\n我们将实例化图的代码更改为如下形式：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...\n  fitView: true,\n  fitViewPadding: [20, 40, 50, 20],\n});\n```\n\n上述代码将会生成如下图： <img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*wAXzRJaNTXUAAAAAAAAAAABkARQnAQ' width=850 alt='img' />\n\n可以看到，图像已经可以自动适配画布的大小，完整的显示了出来。\n\n## 常用配置\n\n本文使用到的配置以及后续 Tutorial 将会使用到到常用配置如下：\n\n| 配置项          | 类型           | 选项 / 示例                                                                                      | 默认  | 说明                                                                                                  |\n| --------------- | -------------- | ------------------------------------------------------------------------------------------------ | ----- | ----------------------------------------------------------------------------------------------------- |\n| fitView         | Boolean        | true / false                                                                                     | false | 是否将图适配到画布大小，可以防止超出画布或留白太多。                                                  |\n| fitViewPadding  | Number / Array | 20 / [ 20, 40, 50, 20 ]                                                                          | 0     | 画布上的四周留白宽度。                                                                                |\n| animate         | Boolean        | true / false                                                                                     | false | 是否启用图的动画。                                                                                    |\n| modes           | Object         | {<br />  default: [ 'drag-node', 'drag-canvas' ]<br />}                                          | null  | 图上行为模式的集合。由于比较复杂，按需参见：[F6 中的 Mode](/zh/docs/manual/middle/states/mode) 教程。 |\n| defaultNode     | Object         | {<br />  type: 'circle',<br />  color: '#000',<br />  style: {<br />    ......<br />  }<br />}   | null  | 节点默认的属性，包括节点的一般属性和样式属性（style）。                                               |\n| defaultEdge     | Object         | {<br />  type: 'polyline',<br />  color: '#000',<br />  style: {<br />    ......<br />  }<br />} | null  | 边默认的属性，包括边的一般属性和样式属性（style）。                                                   |\n| nodeStateStyles | Object         | {<br />  hover: {<br />    ......<br />  },<br />  select: {<br />    ......<br />  }<br />}     | null  | 节点在除默认状态外，其他状态下的样式属性（style）。例如鼠标放置（hover）、选中（select）等状态。      |\n| edgeStateStyles | Object         | {<br />  hover: {<br />    ......<br />  },<br />  select: {<br />    ......<br />  }<br />}     | null  | 边在除默认状态外，其他状态下的样式属性（style）。例如鼠标放置（hover）、选中（select）等状态。        |\n\n<span style=\"background-color: rgb(251, 233, 231); color: rgb(139, 53, 56)\"><strong>⚠️ 注意:</strong></span><br />若需更换数据，请替换  `'https://gw.alipayobjects.com/os/basement_prod/6cae02ab-4c29-44b2-b1fd-4005688febcb.json'`  为新的数据文件地址。\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/layout.zh.md",
    "content": "---\ntitle: 使用图布局 Layout\norder: 3\n---\n\n当数据中没有节点位置信息，或者数据中的位置信息不满足需求时，需要借助一些布局算法对图进行布局。F6 提供了 9 种一般图的布局和 4 种树图的布局：<br />**一般图：**\n\n- Random Layout：随机布局；\n- **Force Layout：经典力导向布局：**\n\n  > 力导向布局：一个布局网络中，粒子与粒子之间具有引力和斥力，从初始的随机无序的布局不断演变，逐渐趋于平衡稳定的布局方式称之为力导向布局。适用于描述事物间关系，比如人物关系、计算机网络关系等。\n\n- Circular Layout：环形布局；\n- Radial Layout：辐射状布局；\n- MDS Layout：高维数据降维算法布局；\n- Fruchterman Layout：Fruchterman 布局，一种力导布局；\n- Dagre Layout：层次布局；\n- Concentric Layout：同心圆布局，将重要（默认以度数为度量）的节点放置在布局中心；\n- Grid Layout：格子布局，将节点有序（默认是数据顺序）排列在格子上。\n\n**树图布局：**\n\n- Dendrogram Layout：树状布局（叶子节点布局对齐到同一层）；\n- CompactBox Layout：紧凑树布局；\n- Mindmap Layout：脑图布局；\n- Indented Layout：缩进布局。\n\n各种布局方法的具体介绍及其配置参见 [图布局 API](/zh/docs/api/graphLayout/guide) 或 [树图布局 API](/zh/docs/api/treeGraphLayout/guide)。本教程中，我们使用的是力导向布局 (Force Layout)。\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*qnUwSZVjYOMAAAAAAAAAAABkARQnAQ' width=550 alt='img' />\n\n## 取消自动适配画布\n\n我们在之前的教程里面，为了能够将超出画布的图适配到视野中，在实例化图时使用了 `fitView`  配置项。这节开始我们将会去掉这个特性。因为复杂的布局系统会打破适配的规则，反而会造成更多的困扰。让我们将相关的适配代码变为注释：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...\n  // fitView: true,\n  // fitViewPadding: [ 20, 40, 50, 20 ]\n});\n```\n\n## 默认布局\n\n当实例化图时没有配置布局时：\n\n- 若数据中节点有位置信息（`x` 和 `y`），则按照数据的位置信息进行绘制；\n- 若数据中节点没有位置信息，则默认使用 Random Layout 进行布局。\n\n## 配置布局\n\nF6 使用布局的方式非常简单，在图实例化的时候，加上 layout 配置即可。下面代码在实例化图时设置了布局方法为 `type: 'force'`，即经典力导向图布局。并设置了参数 `preventOverlap: true` ，表示希望节点不重叠。力导向布局的更多配置项参见：[Layout API](/zh/docs/api/graphLayout/force)。\n\n```javascript\nconst graph = new F6.Graph({\n  // ...                      // 其他配置项\n  layout: {\n    // Object，可选，布局的方法及其配置项，默认为 random 布局。\n    type: \"force\", // 指定为力导向布局\n    preventOverlap: true, // 防止节点重叠\n    // nodeSize: 30        // 节点大小，用于算法中防止节点重叠时的碰撞检测。由于已经在上一节的元素配置中设置了每个节点的 size 属性，则不需要在此设置 nodeSize。\n  },\n});\n```\n\n结果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w4ZfRJW3b5YAAAAAAAAAAABkARQnAQ' width=350 alt='img' />\n\n如图所示，节点按照力导向布局自动平衡。但是图中的节点过于拥挤，边上的文字信息被挤占，无法看清。我们希望布局计算边的距离可以更长一些。F6 的力导向布局提供了  `linkDistance` 属性用来指定布局的时候边的距离长度：\n\n```javascript\nconst graph = new F6.Graph({\n  // ...\n  layout: {\n    type: \"force\",\n    preventOverlap: true,\n    linkDistance: 100, // 指定边距离为100\n  },\n});\n```\n\n结果如下：\n\n<img src='https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*AXrdQIm3oCIAAAAAAAAAAABkARQnAQ' width=350 alt='img' />\n<br />\n\n> 不同布局之间、相同布局不同参数允许动态切换和过渡，具体参见：[布局切换](/zh/docs/manual/middle/layout/layout-mechanism)。\n\n提示：布局将在调用  `graph.render()` 时执行计算。\n\n## 完整代码\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/tutorial-layout?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800/>\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/preface.zh.md",
    "content": "---\ntitle: 前言\norder: 0\n---\n\n## 什么是 F6\n\n<a href='https://github.com/antvis/f6' target='_blank'>F6</a> 是一个移动端图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明，简单。让用户获得关系数据的 Insight。通过 `F6` 用户可以在小程序和移动端中绘制关系图谱，更便捷的构建自己的图可视化应用。F6 延续了 G6 的 API 设计，用户只需简单改动，便可快速迁移 G6 图谱到移动端。\n\n## 入门教程简介\n\n我们在本入门教程中将会完成一个如下图所示简单的图可视化，我们将在后文中称其为 **Tutorial 案例**。\n\n<iframe src=\"https://herbox-embed.alipay.com/p/f6/tutorial?editorSlider=expand&previewZoom=100&defaultOpenedFiles=pages/index/index.js\" width=\"100%\" height=800/>\n\n## 前言\n\n我们将会通过本入门教程完成包含图的创建、渲染、元素的配置、布局、交互、动画、工具的最终的  **Tutorial 案例**。在这部分教学中，读者将会学习到 F6 中基础和核心的功能。掌握该入门教程内容后，可以帮助读者初步理解 F6 并为深度理解 F6 打好基础, F6 API 与 F6 会保持最大程度的一致性，以减少学习成本。\n\n该入门教程将会划分为以下几个章节：\n\n- 快速上手\n- 创建图\n- 元素及其配置\n- 使用图布局 Layout\n- 图的交互 Behavior\n- 插件 & 工具\n- \\*动画（选读）\n- \\*[微信中使用 F6（选读）](/zh/docs/manual/tutorial/mini/wechat)\n\n`提示` <br />该入门教程是为希望“边学边做”的读者设计的。如果您更希望从底层概念开始学习 F6，您可以参见：[核心概念](/zh/docs/manual/middle/graph)。\n\n## 基础知识\n\n本教程展示如何使用 F6 创建一个完整的图可视化应用。我们假设读者默认在小程序中绘图，并对小程序已经有了基础的了解，但并不要求对 F6 有任何基础，如果读者对 G6 的已经比较熟悉，可以跳过 F6 基础知识，我们会尽力保证两边 api 的一致性。在学习之前，我们假设读者对 HTML 和 JavaScript 有所了解，但并不要求对 F6 有任何的基础。如果读者对 F6 的基本内容已经熟知，可以适当跳过部分内容，有针对性地阅读重要的知识点。\n\n## 环境准备\n\nF6 中示例将以支付宝小程序的形式展开，所以在学习前，读者需要下载[支付宝小程序 ide](https://render.alipay.com/p/f/fd-jwq8nu2a/pages/home/index.html)，当然这些示例也很容易在微信小程序中使用，参考微信中使用 F6，仅需复制核心代码即可。\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/mini/wechat.zh.md",
    "content": "---\ntitle: 微信中使用F6\norder: 7\n---\n\n## 前言\n\n微信小程序承载了各种各样的商业模式，作为线上和线下连接的纽带，覆盖了生活中的方方面面。小程序中绘制关系图一直没有很好的解决方案，目前微信小程序中有很多应用关系图依旧使用 H5 的方式进行展示，用户体验大打折扣，作为针对移动端的图可视化引擎，F6 在微信小程序中也可以流畅使用。\n\n## 流程\n\n### 新建一个微信小程序\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*9YXpSqJ9jAkAAAAAAAAAAAAAARQnAQ)\n\n### 初始化\n\n```\nnpm init\n```\n\n⚠️：如果对微信小程序下 npm 包使用不了解，可以点击[这里](https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html)\n\n### 安装依赖\n\n首先安装 F6 和 F6 微信小程序组件，使用小程序组件可以省去很多功夫\n\n```\n➜  miniprogram-3 git:(master) ✗ npm i @antv/f6-wx -S\n\nadded 78 packages, and audited 79 packages in 14s\n\n3 packages are looking for funding\n  run `npm fund` for details\n\nfound 0 vulnerabilities\n\n```\n\n执行完安装命令后，我们可以看到以下结构\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*0tb7QrHWRn4AAAAAAAAAAAAAARQnAQ)\n\n安装完成依赖后，在微信开发者工具中需要进行一次转换\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*rL7VRpSJD10AAAAAAAAAAAAAARQnAQ)\n\n展开 `miniprogram_npm` 这个目录，可以看到类似这样的目录结构\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*Sip7RpVOvcIAAAAAAAAAAAAAARQnAQ)\n\n剩下的就是进行编码了对原有的 `pages/index/index.json`做一些简单改造\n\n```json\n{\n  \"usingComponents\": {\n    \"f6-canvas\": \"@antv/f6-wx/canvas/canvas\"\n  }\n}\n```\n\n`pages/index/index.wxml`\n\n```xml\n<view>\n  <view>width: {{canvasWidth}}</view>\n  <view>height: {{canvasHeight}}</view>\n  <view>pixelRatio: {{pixelRatio}}</view>\n  <f6-canvas\n    width=\"{{canvasWidth}}\"\n    height=\"{{canvasHeight}}\"\n    pixelRatio=\"{{pixelRatio}}\"\n    bind:onInit=\"handleCanvasInit\"\n    bind:onTouchEvent=\"handleTouch\"\n  />\n</view>\n```\n\n`pages/index/index.js`\n\n```javascript\nimport F6 from \"@antv/f6-wx\";\nimport force from \"@antv/f6-wx/extends/layout/forceLayout\";\n\n/**\n * 基本力导向布局及节点拖拽\n */\n\nPage({\n  canvas: null,\n  ctx: null,\n  renderer: \"\", // mini、mini-native等，F6需要，标记环境\n  graph: null,\n\n  data: {\n    width: 375,\n    height: 600,\n    pixelRatio: 1,\n    forceMini: false,\n  },\n\n  onLoad() {\n    F6.registerLayout(\"force\", force);\n    // 同步获取window的宽高\n    const { windowWidth, windowHeight, pixelRatio } = wx.getSystemInfoSync();\n\n    this.setData({\n      canvasWidth: windowWidth,\n      canvasHeight: windowHeight,\n      pixelRatio,\n    });\n  },\n\n  /**\n   * 初始化cnavas回调，缓存获得的context\n   * @param {*} ctx 绘图context\n   * @param {*} rect 宽高信息\n   * @param {*} canvas canvas对象，在render为mini时为null\n   * @param {*} renderer 使用canvas 1.0还是canvas 2.0，mini | mini-native\n   */\n  handleCanvasInit(event) {\n    const { ctx, canvas, renderer } = event.detail;\n    this.isCanvasInit = true;\n    this.ctx = ctx;\n    this.renderer = renderer;\n    this.canvas = canvas;\n    this.updateChart();\n  },\n\n  /**\n   * canvas派发的事件，转派给graph实例\n   */\n  handleTouch(e) {\n    this.graph && this.graph.emitEvent(e.detail);\n  },\n\n  updateChart() {\n    const { canvasWidth, canvasHeight, pixelRatio } = this.data;\n    const data = {\n      nodes: [\n        { id: \"node0\", size: 50 },\n        { id: \"node1\", size: 30 },\n        { id: \"node2\", size: 30 },\n        { id: \"node3\", size: 30 },\n        { id: \"node4\", size: 30, isLeaf: true },\n        { id: \"node5\", size: 30, isLeaf: true },\n        { id: \"node6\", size: 15, isLeaf: true },\n        { id: \"node7\", size: 15, isLeaf: true },\n        { id: \"node8\", size: 15, isLeaf: true },\n        { id: \"node9\", size: 15, isLeaf: true },\n        { id: \"node10\", size: 15, isLeaf: true },\n        { id: \"node11\", size: 15, isLeaf: true },\n        { id: \"node12\", size: 15, isLeaf: true },\n        { id: \"node13\", size: 15, isLeaf: true },\n        { id: \"node14\", size: 15, isLeaf: true },\n        { id: \"node15\", size: 15, isLeaf: true },\n        { id: \"node16\", size: 15, isLeaf: true },\n      ],\n      edges: [\n        { source: \"node0\", target: \"node1\", id: \"edge0\" },\n        { source: \"node0\", target: \"node2\", id: \"edge1\" },\n        { source: \"node0\", target: \"node3\", id: \"edge2\" },\n        { source: \"node0\", target: \"node4\", id: \"edge3\" },\n        { source: \"node0\", target: \"node5\", id: \"edge4\" },\n        { source: \"node1\", target: \"node6\", id: \"edge5\" },\n        { source: \"node1\", target: \"node7\", id: \"edge6\" },\n        { source: \"node2\", target: \"node8\", id: \"edge7\" },\n        { source: \"node2\", target: \"node9\", id: \"edge8\" },\n        { source: \"node2\", target: \"node10\", id: \"edge9\" },\n        { source: \"node2\", target: \"node11\", id: \"edge10\" },\n        { source: \"node2\", target: \"node12\", id: \"edge11\" },\n        { source: \"node2\", target: \"node13\", id: \"edge12\" },\n        { source: \"node3\", target: \"node14\", id: \"edge13\" },\n        { source: \"node3\", target: \"node15\", id: \"edge14\" },\n        { source: \"node3\", target: \"node16\", id: \"edge15\" },\n      ],\n    };\n\n    // 创建F6实例\n    this.graph = new F6.Graph({\n      container: this.canvas,\n      context: this.ctx,\n      renderer: this.renderer,\n      width: canvasWidth,\n      height: canvasHeight,\n      pixelRatio,\n      modes: {\n        default: [\"drag-canvas\", \"drag-node\", \"zoom-canvas\"],\n      },\n      layout: {\n        type: \"force\",\n      },\n      defaultNode: {\n        size: 15,\n      },\n    });\n\n    // 注册数据\n    this.graph.data(data);\n    this.graph.render();\n    this.graph.fitView();\n  },\n\n  onUnload() {\n    this.graph && this.graph.destroy();\n  },\n});\n```\n\n接下来保存看看效果吧 <br/>\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*KPjqSIAo9J4AAAAAAAAAAAAAARQnAQ)\n\n真机体验会更棒\n\n![](https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*gyGjSr9o1QQAAAAAAAAAAAAAARQnAQ)\n\n完整示例源码可以参考这里[F6 微信小程序演示](https://github.com/antvis/F6/tree/master/packages/examples-wx/package-general-graph/pages/general-graph/basic-force-directed)\n\n## 注意事项\n\n如有问题，可以加钉钉群咨询，我们会快速相应您的问题 ![]()\n\n<p>\n    <img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*wEQkTKK9GgMAAAAAAAAAAAAAARQnAQ' style='width:250px;display:inline-block;vertical-align:top;' alt='' />\n</p>\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/native/preface.zh.md",
    "content": "---\ntitle: 原生应用中使用F6\norder: 7\n---\n\n## 💗 敬请期待\n"
  },
  {
    "path": "packages/site/docs/manual/tutorial/tutorial.zh.md",
    "content": "---\ntitle: 导读\norder: 1\n---\n\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*H8u5SqR839wAAAAAAAAAAAAAARQnAQ' width=70 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*3V0kTa-G3h4AAAAAAAAAAAAAARQnAQ' width=70 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*cNvTSYC6qmYAAAAAAAAAAAAAARQnAQ' width=70 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*PbOdQagtouQAAAAAAAAAAAAAARQnAQ' width=70 alt='img'/>\n<img src='https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*wzjxQbfgt9EAAAAAAAAAAAAAARQnAQ' width=70 alt='img'/>\n\nF6 是一个移动端的渲染引擎，所以 F6 未来也会支持所有移动端的接入模式。当前 F6 已经支持了小程序和 H5 中使用关系图，Native 版本也在开发中。\n\n- [小程序](/zh/docs/manual/tutorial/mini/preface)\n- [H5](/zh/docs/manual/tutorial/h5/preface)\n- [Native](/zh/docs/manual/tutorial/native/preface)\n"
  },
  {
    "path": "packages/site/examples/demo/animation/change-position-default/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"a\",\n      x: 200,\n      y: 100,\n      style: { fill: \"#5B8FF9\", stroke: null },\n    },\n    {\n      id: \"b\",\n      x: 100,\n      y: 200,\n      style: { fill: \"#5AD8A6\", stroke: null },\n    },\n    {\n      id: \"c\",\n      x: 300,\n      y: 200,\n      style: { fill: \"#5D7092\", stroke: null },\n    },\n  ],\n  edges: [\n    {\n      id: \"a2b\",\n      source: \"a\",\n      target: \"b\",\n    },\n    {\n      id: \"a2c\",\n      source: \"a\",\n      target: \"c\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/animation/change-position-default/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  animate: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nsetInterval(() => {\n  data.nodes.forEach((node) => {\n    node.x += Math.random() * 50 - 25;\n    node.y += Math.random() * 50 - 25;\n  });\n  graph.changeData(data);\n}, 600);\n"
  },
  {
    "path": "packages/site/examples/demo/animation/custom-animate-position/index.js",
    "content": "import F6 from \"@antv/f6\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst r = 50;\nconst radius = Math.PI;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  animate: true,\n  animateCfg: {\n    duration: 1000,\n\n    onFrame(node, ratio, toAttrs, fromAttrs) {\n      const current = radius * ratio;\n      let { x } = fromAttrs;\n      let { y } = fromAttrs;\n\n      if (fromAttrs.x > toAttrs.x) {\n        x = x - r + r * Math.cos(current);\n        y += r * Math.sin(current);\n      } else {\n        x = x + r - r * Math.cos(current);\n        y -= r * Math.sin(current);\n      }\n\n      return {\n        x,\n        y,\n      };\n    },\n  },\n});\nconst node1 = graph.addItem(\"node\", {\n  id: \"node1\",\n  x: 100,\n  y: 100,\n  type: \"circle\",\n  style: {\n    fill: \"#5B8FF9\",\n    lineWidth: 0,\n  },\n});\nconst node2 = graph.addItem(\"node\", {\n  id: \"node2\",\n  x: 200,\n  y: 100,\n  type: \"circle\",\n  style: {\n    fill: \"#5AD8A6\",\n    lineWidth: 0,\n  },\n});\nlet count = 0;\nsetInterval(() => {\n  if (count % 2 === 0) {\n    node1.get(\"model\").x = 200;\n    node2.get(\"model\").x = 100;\n  } else {\n    node1.get(\"model\").x = 100;\n    node2.get(\"model\").x = 200;\n  }\n\n  count++;\n  graph.refresh();\n}, 1000);\n"
  },
  {
    "path": "packages/site/examples/demo/animation/edge-edge/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/animation/edge-edge/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst lineDash = [4, 2, 1, 2];\nF6.registerEdge(\n  \"line-dash\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      let index = 0;\n      shape.animate(\n        () => {\n          index++;\n\n          if (index > 9) {\n            index = 0;\n          }\n\n          const res = {\n            lineDash,\n            lineDashOffset: -index,\n          };\n          return res;\n        },\n        {\n          repeat: true,\n          duration: 3000,\n        },\n      );\n    },\n  },\n  \"cubic\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  defaultEdge: {\n    type: \"line-dash\",\n    style: {\n      lineWidth: 2,\n      stroke: \"#bae7ff\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/animation/edge-line-growth/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/animation/edge-line-growth/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerEdge(\n  \"line-growth\",\n  {\n    afterDraw(_, group) {\n      const shape = group.get(\"children\")[0];\n      const length = shape.getTotalLength();\n      console.log(_);\n      shape.animate(\n        (ratio) => {\n          const startLen = ratio * length;\n          const cfg = {\n            lineDash: [startLen, length - startLen],\n          };\n          return cfg;\n        },\n        {\n          repeat: true,\n          duration: 2000,\n        },\n      );\n    },\n  },\n  \"cubic\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  defaultEdge: {\n    type: \"line-growth\",\n    style: {\n      lineWidth: 2,\n      stroke: \"#bae7ff\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/animation/node-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      type: \"circle-animate\",\n      size: 20,\n      label: \"Scale Animation\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      type: \"background-animate\",\n      color: \"#40a9ff\",\n      size: 20,\n      label: \"Background Animation\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n    {\n      id: \"node3\",\n      x: 400,\n      y: 100,\n      size: [40, 40],\n      type: \"inner-animate\",\n      img: \"data:image/webp;base64,UklGRq4FAABXRUJQVlA4IKIFAABwHwCdASo8ADwAPiEMhEGhhv6rQAYAgS2NHsdCq/4D8AOoA64OEUAj/XPxVwyvRGvyO/gGxN/t3oK/1X6zesX3L/p/RP/2HCgKAB9AGeAbCB+AGwAbQBtA/8c/m/4PYHTonm+SzRH6B9sv2i/rOZC+G/ln9l/ML/GdoD7APcA/TD+09QDzAfrX+vHYM9AD+Uf0zrAPQA/bH0vv2t+CH9qf2R+A39e6X098/I7IAcLcs8Gjmc/9T7gPbX9H+wJ+rPVV9En9ZmBI5oUiYhkYHIVjRr9hzCTPcV5Rs/wjjIHkxPgtr/3ALZSuUm146HHwqQVA23hnnqH/4aJ/k4v4hU6RBZ0AAAD+//8ARPyL9yWIlAbWBAD0oKSqlYWreuRa3Oj02u+TvSQS8iwMYewUYTWLDNp9wOlFJaWnqE+za35UwUXuDAT6T0I4fwY+u+qrRVhl+S1ir4X7BQiNswug5AX+MjQcXEeUwfSIEUT+DFPCr+BUiwTbFxLni7fv61vRbmXoauLz4tiqOFTzEGP8tNXP5+H7mZVGfNjIxapT3FGUtqBdp/SD5cTOYOkn2fawkpqpCSqf2+CfiGWtIF673fEzlk/hIbWDhQ81C/ddxLn609d/5efckbdZ8HZbhhVmM82/Uat7CFmw1SH5xCxRxEEhjpf1EP1Xn5q9VZfm1+OFTab/MN67Xha8K//5oVBlMgZALE653X0fas/+2xMqiyCu5Wa7PHsCwbBwqROfNmzi4LPOTjkFPHVKDD1Nfj4/sul6cANdF68rf2jszlyZsUUoLTP7H3swSroc3ssNXSRVAcYd7+iBZpfoAYWvKgnr+Hv62fHZX5ZbjYbYzVjq6fsXkubto858NuUx4+ILb5y7dP6W3/IYVeUSF0yZseKIZhOMs9BBf5uB2Y3Ott//+1OG7hYINzcqigrzWAOJbSmVw3G0ULywkobx+rvfk8VmZFzQGgP/+4T74mp/vsZyM1NLguiTO2gNO05tcpXwveq5mrcweXrJ/bRZDmU2KBrnXhkXq+735c+UHTFq4h4jMOPm5shKioB6XaqhUf3DJlMg8937g/SKjrgD0H5sNm0/k4FfilBbcrsjc3dd6cwEYJo3CNhe3SpNJ2geNXyV4/hq/BZXZ1kiVknjmf5cUx7Tv/9Sb+fQ/DgAsRNSz1wiVodiLjP7aVrkxbWx5gJ8U/j0o1Ipm/nyDZRPrQXmbPAcy1eDDejxTDBKe42ElHpC2QlFdhOedsp4i9QVjt8EqWGy1YzPaGqZhCVg/LWt8/+4BmiCzNGtpR21MGJf4kI/n/1sbe36e1QBCBAx4EVfTM82ZM2lh0P189e7eY0A3NzXWVrUek8SEn+DYYCQeEaC5hDHGreFHT1baY6KyrFx3G9oMm3fLrCqmNjFRnZa3LB/5m8FgCpq9B/1OCLRE5GzVTZnVzj/4V38PgCIpX16Kznijf01+MkDeS9oCF2hEXQ9tr+mPLrjGy4Cg5fyLgyCj1fUq33nMf79Svli2h83m3gqkoxJcXvBetFQP8V/gRjBNGmFXK5TfwLhbolWEjDqUGK3n+hxzQLif9zreYO88EIRTUNbzE1/Sn7rBEtjB0uawNje5OubWsB62SOlMZoZpxrDbMb4UvQrODPhSafmhcYe9zm/dHxssMfUthhDKjyMhoRhngPjbzfGXmIV2Omgrn/zbefK/PawUGSH6x4Qk4HCN4/X8S+XCf51JJtOQeHST/yfwg69uMkE07SONnhGUrL6j5oQn6JI+zkaH/H/P/Ti/pfOTfAWxQNiMvWX08mqbuUweFSQ/G5YUP/uCvZAXutf1+Nhl2jj/n4/fPOihPjwvfFnnjOaQvs9PSpF33d+396LASZ3IID/4UP4pf9eOMXw82ccoUUUHX6MfBWyBDvARCrdPmerUwKwW+lBIAe1dsAAAA==\",\n      label: \"Image Rotate\",\n      labelCfg: {\n        position: \"right\",\n      },\n    },\n    {\n      id: \"node4\",\n      x: 300,\n      y: 300,\n      type: \"rect\",\n      label: \"No Animation\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node4\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/animation/node-node/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\n  \"circle-animate\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      shape.animate(\n        (ratio) => {\n          const diff = ratio <= 0.5 ? ratio * 10 : (1 - ratio) * 10;\n          return {\n            r: cfg.size / 2 + diff,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"circle\",\n);\nF6.registerNode(\n  \"background-animate\",\n  {\n    afterDraw(cfg, group) {\n      const r = cfg.size / 2;\n      const back1 = group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back1-shape\",\n      });\n      const back2 = group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back2-shape\",\n      });\n      const back3 = group.addShape(\"circle\", {\n        zIndex: -1,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back3-shape\",\n      });\n      group.sort();\n      back1.animate(\n        {\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 0,\n          repeat: true,\n        },\n      );\n      back2.animate(\n        {\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 1000,\n          repeat: true,\n        },\n      );\n      back3.animate(\n        {\n          r: r + 10,\n          opacity: 0.1,\n        },\n        {\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: 2000,\n          repeat: true,\n        },\n      );\n    },\n  },\n  \"circle\",\n);\nF6.registerNode(\n  \"inner-animate\",\n  {\n    afterDraw(cfg, group) {\n      const { size } = cfg;\n      const width = size[0] - 12;\n      const height = size[1] - 12;\n      const image = group.addShape(\"image\", {\n        attrs: {\n          x: -width / 2,\n          y: -height / 2,\n          width,\n          height,\n          img: cfg.img,\n        },\n        name: \"image-shape\",\n      });\n      image.animate(\n        (ratio) => {\n          const toMatrix = Util.transform(\n            [1, 0, 0, 0, 1, 0, 0, 0, 1],\n            [[\"r\", ratio * Math.PI * 2]],\n          );\n          return {\n            matrix: toMatrix,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n        },\n      );\n    },\n  },\n  \"rect\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  defaultNode: {\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    style: {\n      lineWidth: 1,\n      stroke: \"#b5b5b5\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/animation/point-in-line/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"Node 1\",\n      labelCfg: {\n        position: \"top\",\n      },\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 200,\n      color: \"#40a9ff\",\n      label: \"Node 2\",\n      labelCfg: {\n        position: \"left\",\n        offset: 10,\n      },\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/animation/point-in-line/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerEdge(\n  \"circle-running\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      const startPoint = shape.getPoint(0);\n      const circle = group.addShape(\"circle\", {\n        attrs: {\n          x: startPoint.x,\n          y: startPoint.y,\n          fill: \"#1890ff\",\n          r: 3,\n        },\n        name: \"circle-shape\",\n      });\n      circle.animate(\n        (ratio) => {\n          const tmpPoint = shape.getPoint(ratio);\n          return {\n            x: tmpPoint.x,\n            y: tmpPoint.y,\n          };\n        },\n        {\n          repeat: true,\n          duration: 3000,\n        },\n      );\n    },\n  },\n  \"cubic\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  defaultEdge: {\n    type: \"circle-running\",\n    style: {\n      lineWidth: 2,\n      stroke: \"#bae7ff\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/area-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeD\",\n      x: 150,\n      y: 150,\n      label: \"Area1\",\n      type: \"area\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeD2\",\n      x: 500,\n      y: 150,\n      label: \"Area2\",\n      type: \"area\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeD\",\n      target: \"nodeD2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/area-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\"area\", {\n  draw(cfg, group) {\n    const baseR = 30;\n    let refR = baseR;\n    const refInc = 10;\n\n    for (let i = 0; i < 6; i++) {\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          r: (refR += refInc),\n          stroke: \"#bae7ff\",\n          lineDash: [4, 4],\n        },\n        name: \"circle-shape\",\n      });\n    }\n\n    const everyIncAngle = (2 * Math.PI * (360 / 5)) / 360;\n    const tempIncValues = [baseR, baseR, baseR, baseR, baseR];\n    const allRs = [];\n    cfg.details.forEach((cat) => {\n      const oneRs = [];\n      cat.values.forEach((v, i) => {\n        const R = tempIncValues[i] + v * 0.4;\n        oneRs.push(R);\n        tempIncValues[i] = R;\n      });\n      allRs.push(oneRs);\n    });\n    const strokeColors = [\n      \"rgba(91, 143, 249,1)\",\n      \"rgba(90, 216, 166,1)\",\n      \"rgba(246, 189, 22,1)\",\n      \"rgba(232, 104, 74,1)\",\n      \"rgba(255, 157, 77,1)\",\n    ];\n    const fillColors = [\n      \"rgba(91, 143, 249,0.5)\",\n      \"rgba(90, 216, 166,0.5)\",\n      \"rgba(246, 189, 22,0.5)\",\n      \"rgba(232, 104, 74,0.5)\",\n      \"rgba(255, 157, 77,0.5)\",\n    ];\n    allRs.reverse().forEach((Rs, index) => {\n      let curAngle = 0;\n      const poss = [];\n      Rs.forEach((r) => {\n        const xPos = r * Math.cos(curAngle);\n        const yPos = r * Math.sin(curAngle);\n        curAngle += everyIncAngle;\n        poss.push([xPos, yPos]);\n      });\n      const Ls = poss.map((p, i) => {\n        if (i === 0) {\n          return [\"M\", ...p];\n        }\n\n        return [\"L\", ...p];\n      });\n      group.addShape(\"path\", {\n        attrs: {\n          path: [...Ls, [\"Z\"]],\n          stroke: strokeColors[index],\n          fill: fillColors[index],\n        },\n        name: \"path-shape1\",\n      });\n    });\n    let nowAngle2 = 0;\n    const everyIncAngleCat = (2 * Math.PI * (360 / 5)) / 360;\n\n    for (let i = 0; i < 5; i++) {\n      const r = 30 + 60;\n      const xPos = r * Math.cos(nowAngle2);\n      const yPos = r * Math.sin(nowAngle2);\n      group.addShape(\"path\", {\n        attrs: {\n          path: [\n            [\"M\", 0, 0],\n            [\"L\", xPos, yPos],\n          ],\n          lineDash: [4, 4],\n          stroke: \"darkgray\",\n        },\n        name: \"path-shape2\",\n      });\n      nowAngle2 += everyIncAngleCat;\n    }\n\n    group.addShape(\"circle\", {\n      attrs: {\n        x: 0,\n        y: 0,\n        r: baseR,\n        fill: cfg.centerColor,\n        stroke: \"darkgray\",\n      },\n      name: \"circle-shape\",\n    });\n\n    if (cfg.label) {\n      group.addShape(\"text\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          textAlign: \"center\",\n          textBaseline: \"middle\",\n          text: cfg.label,\n          fill: \"white\",\n          fontStyle: \"bold\",\n        },\n        name: \"text-shape\",\n      });\n    }\n\n    return group;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/built-in-arrows/data.js",
    "content": "import F6 from \"@antv/f6\";\n// 需要用到箭头\nconst data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 50,\n    },\n    {\n      id: \"2\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 100,\n    },\n    {\n      id: \"4\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"5\",\n      x: 350,\n      y: 150,\n    },\n    {\n      id: \"6\",\n      x: 150,\n      y: 200,\n    },\n    {\n      id: \"7\",\n      x: 350,\n      y: 200,\n    },\n    {\n      id: \"8\",\n      x: 150,\n      y: 250,\n    },\n    {\n      id: \"9\",\n      x: 350,\n      y: 250,\n    },\n    {\n      id: \"10\",\n      x: 150,\n      y: 300,\n    },\n    {\n      id: \"11\",\n      x: 350,\n      y: 300,\n    },\n    {\n      id: \"12\",\n      x: 150,\n      y: 350,\n    },\n    {\n      id: \"13\",\n      x: 350,\n      y: 350,\n    },\n    {\n      id: \"14\",\n      x: 150,\n      y: 400,\n    },\n    {\n      id: \"15\",\n      x: 350,\n      y: 400,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"default arrow\",\n      style: {\n        endArrow: true,\n      },\n    },\n    {\n      id: \"edge1\",\n      source: \"2\",\n      target: \"3\",\n      label: \"triangle arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.triangle(),\n        },\n      },\n    },\n    {\n      id: \"edge2\",\n      source: \"4\",\n      target: \"5\",\n      label: \"vee arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.vee(),\n        },\n      },\n    },\n    {\n      id: \"edge3\",\n      source: \"6\",\n      target: \"7\",\n      label: \"circle arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.circle(5, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge4\",\n      source: \"8\",\n      target: \"9\",\n      label: \"diamond arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.diamond(10, 10, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge5\",\n      source: \"10\",\n      target: \"11\",\n      label: \"rect arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.rect(10, 10, 3),\n          d: 3,\n        },\n      },\n    },\n    {\n      id: \"edge6\",\n      source: \"12\",\n      target: \"13\",\n      label: \"rect arrow 2\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.rect(10, 2, 5),\n          d: 5,\n        },\n      },\n    },\n    {\n      id: \"edge7\",\n      source: \"14\",\n      target: \"15\",\n      label: \"triangleRect arrow\",\n      style: {\n        endArrow: {\n          path: F6.Arrow.triangleRect(10, 10, 10, 2, 4),\n        },\n      },\n    },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.style.stroke = \"#F6BD16\";\n  console.log(edge.style.endArrow);\n  if (edge.id !== \"edge0\") edge.style.endArrow.fill = \"#F6BD16\";\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/elements/built-in-arrows/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  defaultNode: {\n    size: 15,\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/c-circle/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 250, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 300, y: 200, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/c-circle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\n\nconst collapseIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n  ];\n};\n\nconst expandIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n    [\"M\", x - r + r, y - r + 4],\n    [\"L\", x, y + r - 4],\n  ];\n};\n\nF6.registerCombo(\n  \"cCircle\",\n  {\n    drawShape: function draw(cfg, group) {\n      const self = this;\n      const style = self.getShapeStyle(cfg);\n      const circle = group.addShape(\"circle\", {\n        attrs: { ...style, x: 0, y: 0, r: style.r },\n        draggable: true,\n        name: \"combo-keyShape\",\n      });\n      group.addShape(\"marker\", {\n        attrs: {\n          ...style,\n          fill: \"#fff\",\n          opacity: 1,\n          x: 0,\n          y: style.r,\n          r: 10,\n          symbol: collapseIcon,\n        },\n        draggable: true,\n        name: \"combo-marker-shape\",\n      });\n      return circle;\n    },\n    afterUpdate: function afterUpdate(cfg, combo) {\n      const self = this;\n      const style = self.getShapeStyle(cfg);\n      const group = combo.get(\"group\");\n      const marker = group.find(\n        (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n      );\n      marker.attr({\n        x: 0,\n        y: style.r,\n        symbol: cfg.collapsed ? expandIcon : collapseIcon,\n      });\n    },\n  },\n  \"circle\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  groupByTypes: false,\n  defaultCombo: {\n    type: \"cCircle\",\n    labelCfg: {\n      refY: 2,\n    },\n  },\n  modes: {\n    default: [\"drag-combo\", \"drag-node\", \"drag-canvas\"],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"combo:tap\", (e) => {\n  if (e.target.get(\"name\") === \"combo-marker-shape\") {\n    graph.collapseExpandCombo(e.item);\n    if (graph.get(\"layout\")) graph.layout();\n    else graph.refreshPositions();\n  }\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/c-rect/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 250, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 300, y: 200, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/c-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\n\nconst collapseIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n  ];\n};\n\nconst expandIcon = (x, y, r) => {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n    [\"M\", x - r + r, y - r + 4],\n    [\"L\", x, y + r - 4],\n  ];\n};\n\nF6.registerCombo(\n  \"cRect\",\n  {\n    drawShape: function drawShape(cfg, group) {\n      const self = this;\n      cfg.padding = cfg.padding || [50, 20, 20, 20];\n      const style = self.getShapeStyle(cfg);\n      const rect = group.addShape(\"rect\", {\n        attrs: {\n          ...style,\n          x: -style.width / 2 - (cfg.padding[3] - cfg.padding[1]) / 2,\n          y: -style.height / 2 - (cfg.padding[0] - cfg.padding[2]) / 2,\n          width: style.width,\n          height: style.height,\n        },\n        draggable: true,\n        name: \"combo-keyShape\",\n      });\n      group.addShape(\"marker\", {\n        attrs: {\n          ...style,\n          fill: \"#fff\",\n          opacity: 1,\n          x: cfg.style.width / 2 + cfg.padding[1],\n          y: (cfg.padding[2] - cfg.padding[0]) / 2,\n          r: 10,\n          symbol: collapseIcon,\n        },\n        draggable: true,\n        name: \"combo-marker-shape\",\n      });\n      return rect;\n    },\n    afterUpdate: function afterUpdate(cfg, combo) {\n      const group = combo.get(\"group\");\n      const marker = group.find(\n        (ele) => ele.get(\"name\") === \"combo-marker-shape\",\n      );\n      marker.attr({\n        x: cfg.style.width / 2 + cfg.padding[1],\n        y: (cfg.padding[2] - cfg.padding[0]) / 2,\n        symbol: cfg.collapsed ? expandIcon : collapseIcon,\n      });\n    },\n  },\n  \"rect\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  groupByTypes: false,\n  defaultCombo: {\n    type: \"cRect\",\n  },\n  modes: {\n    default: [\"drag-combo\", \"drag-node\", \"drag-canvas\"],\n  },\n});\ngraph.on(\"combo:tap\", (e) => {\n  if (e.target.get(\"name\") === \"combo-marker-shape\") {\n    graph.collapseExpandCombo(e.item);\n    if (graph.get(\"layout\")) graph.layout();\n    else graph.refreshPositions();\n  }\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/card/data.js",
    "content": "export default {\n  nodes: [\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: true,\n      dataType: \"root\",\n      keyInfo: \"this is a card node info\",\n      x: 100,\n      y: 50,\n    },\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: false,\n      dataType: \"subRoot\",\n      keyInfo: \"this is sub root\",\n      x: 100,\n      y: 150,\n    },\n    {\n      name: \"cardNodeApp\",\n      ip: \"127.0.0.1\",\n      nodeError: false,\n      dataType: \"subRoot\",\n      keyInfo: \"this is sub root\",\n      x: 100,\n      y: 250,\n      children: [\n        {\n          name: \"sub\",\n        },\n      ],\n    },\n  ],\n  edges: [],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/card/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst ERROR_COLOR = \"#F5222D\";\n\nconst getNodeConfig = (node) => {\n  if (node.nodeError) {\n    return {\n      basicColor: ERROR_COLOR,\n      fontColor: \"#FFF\",\n      borderColor: ERROR_COLOR,\n      bgColor: \"#E66A6C\",\n    };\n  }\n\n  let config = {\n    basicColor: \"#5B8FF9\",\n    fontColor: \"#5B8FF9\",\n    borderColor: \"#5B8FF9\",\n    bgColor: \"#C6E5FF\",\n  };\n\n  switch (node.type) {\n    case \"root\": {\n      config = {\n        basicColor: \"#E3E6E8\",\n        fontColor: \"rgba(0,0,0,0.85)\",\n        borderColor: \"#E3E6E8\",\n        bgColor: \"#5b8ff9\",\n      };\n      break;\n    }\n\n    default:\n      break;\n  }\n\n  return config;\n};\n\nconst COLLAPSE_ICON = function COLLAPSE_ICON(x, y, r) {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n  ];\n};\n\nconst EXPAND_ICON = function EXPAND_ICON(x, y, r) {\n  return [\n    [\"M\", x - r, y],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x - r + 4, y],\n    [\"L\", x - r + 2 * r - 4, y],\n    [\"M\", x - r + r, y - r + 4],\n    [\"L\", x, y + r - 4],\n  ];\n};\n\nconst nodeBasicMethod = {\n  createNodeBox: (group, config, w, h, isRoot) => {\n    const container = group.addShape(\"rect\", {\n      attrs: {\n        x: 0,\n        y: 0,\n        width: w,\n        heigh: h,\n      },\n      name: \"big-rect-shape\",\n    });\n\n    if (!isRoot) {\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 3,\n          y: h / 2,\n          r: 6,\n          fill: config.basicColor,\n        },\n        name: \"left-dot-shape\",\n      });\n    }\n\n    group.addShape(\"rect\", {\n      attrs: {\n        x: 3,\n        y: 0,\n        width: w - 19,\n        height: h,\n        fill: config.bgColor,\n        stroke: config.borderColor,\n        radius: 2,\n        cursor: \"pointer\",\n      },\n      name: \"rect-shape\",\n    });\n    group.addShape(\"rect\", {\n      attrs: {\n        x: 3,\n        y: 0,\n        width: 3,\n        height: h,\n        fill: config.basicColor,\n        radius: 1.5,\n      },\n      name: \"left-border-shape\",\n    });\n    return container;\n  },\n  createNodeMarker: (group, collapsed, x, y) => {\n    group.addShape(\"circle\", {\n      attrs: {\n        x,\n        y,\n        r: 13,\n        fill: \"rgba(47, 84, 235, 0.05)\",\n        opacity: 0,\n        zIndex: -2,\n      },\n      name: \"collapse-icon-bg\",\n    });\n    group.addShape(\"marker\", {\n      attrs: {\n        x,\n        y,\n        r: 7,\n        symbol: collapsed ? EXPAND_ICON : COLLAPSE_ICON,\n        stroke: \"rgba(0,0,0,0.25)\",\n        fill: \"rgba(0,0,0,0)\",\n        lineWidth: 1,\n        cursor: \"pointer\",\n      },\n      name: \"collapse-icon\",\n    });\n  },\n  afterDraw: (cfg, group) => {\n    const icon = group.find(\n      (element) => element.get(\"name\") === \"collapse-icon\",\n    );\n\n    if (icon) {\n      const bg = group.find(\n        (element) => element.get(\"name\") === \"collapse-icon-bg\",\n      );\n      icon.on(\"mouseenter\", () => {\n        bg.attr(\"opacity\", 1);\n        graph.get(\"canvas\").draw();\n      });\n      icon.on(\"mouseleave\", () => {\n        bg.attr(\"opacity\", 0);\n        graph.get(\"canvas\").draw();\n      });\n    }\n\n    const ipBox = group.find((element) => element.get(\"name\") === \"ip-box\");\n\n    if (ipBox) {\n      const ipLine = group.find(\n        (element) => element.get(\"name\") === \"ip-cp-line\",\n      );\n      const ipBG = group.find((element) => element.get(\"name\") === \"ip-cp-bg\");\n      const ipIcon = group.find(\n        (element) => element.get(\"name\") === \"ip-cp-icon\",\n      );\n      const ipCPBox = group.find(\n        (element) => element.get(\"name\") === \"ip-cp-box\",\n      );\n\n      const onMouseEnter = () => {\n        ipLine.attr(\"opacity\", 1);\n        ipBG.attr(\"opacity\", 1);\n        ipIcon.attr(\"opacity\", 1);\n        graph.get(\"canvas\").draw();\n      };\n\n      const onMouseLeave = () => {\n        ipLine.attr(\"opacity\", 0);\n        ipBG.attr(\"opacity\", 0);\n        ipIcon.attr(\"opacity\", 0);\n        graph.get(\"canvas\").draw();\n      };\n\n      ipBox.on(\"mouseenter\", () => {\n        onMouseEnter();\n      });\n      ipBox.on(\"mouseleave\", () => {\n        onMouseLeave();\n      });\n      ipCPBox.on(\"mouseenter\", () => {\n        onMouseEnter();\n      });\n      ipCPBox.on(\"mouseleave\", () => {\n        onMouseLeave();\n      });\n      ipCPBox.on(\"click\", () => {});\n    }\n  },\n  setState: (name, value, item) => {\n    const hasOpacityClass = [\n      \"ip-cp-line\",\n      \"ip-cp-bg\",\n      \"ip-cp-icon\",\n      \"ip-cp-box\",\n      \"ip-box\",\n      \"collapse-icon-bg\",\n    ];\n    const group = item.getContainer();\n    const childrens = group.get(\"children\");\n    graph.setAutoPaint(false);\n\n    if (name === \"emptiness\") {\n      if (value) {\n        childrens.forEach((shape) => {\n          if (hasOpacityClass.indexOf(shape.get(\"name\")) > -1) {\n            return;\n          }\n\n          shape.attr(\"opacity\", 0.4);\n        });\n      } else {\n        childrens.forEach((shape) => {\n          if (hasOpacityClass.indexOf(shape.get(\"name\")) > -1) {\n            return;\n          }\n\n          shape.attr(\"opacity\", 1);\n        });\n      }\n    }\n\n    graph.setAutoPaint(true);\n  },\n};\nF6.registerNode(\"card-node\", {\n  draw: (cfg, group) => {\n    const config = getNodeConfig(cfg);\n    const isRoot = cfg.dataType === \"root\";\n    const { nodeError } = cfg;\n    const container = nodeBasicMethod.createNodeBox(\n      group,\n      config,\n      243,\n      64,\n      isRoot,\n    );\n\n    if (cfg.dataType !== \"root\") {\n      group.addShape(\"text\", {\n        attrs: {\n          text: cfg.dataType,\n          x: 3,\n          y: -10,\n          fontSize: 12,\n          textAlign: \"left\",\n          textBaseline: \"middle\",\n          fill: \"rgba(0,0,0,0.65)\",\n        },\n        name: \"type-text-shape\",\n      });\n    }\n\n    if (cfg.ip) {\n      const ipRect = group.addShape(\"rect\", {\n        attrs: {\n          fill: nodeError ? null : \"#FFF\",\n          stroke: nodeError ? \"rgba(255,255,255,0.65)\" : null,\n          radius: 2,\n          cursor: \"pointer\",\n        },\n        name: \"ip-container-shape\",\n      });\n      const ipText = group.addShape(\"text\", {\n        attrs: {\n          text: cfg.ip,\n          x: 0,\n          y: 19,\n          fontSize: 12,\n          textAlign: \"left\",\n          textBaseline: \"middle\",\n          fill: nodeError ? \"rgba(255,255,255,0.85)\" : \"rgba(0,0,0,0.65)\",\n          cursor: \"pointer\",\n        },\n        name: \"ip-text-shape\",\n      });\n      const ipBBox = ipText.getBBox();\n      ipText.attr({\n        x: 224 - 12 - ipBBox.width,\n      });\n      ipRect.attr({\n        x: 224 - 12 - ipBBox.width - 4,\n        y: ipBBox.minY - 5,\n        width: ipBBox.width + 8,\n        height: ipBBox.height + 10,\n      });\n      group.addShape(\"rect\", {\n        attrs: {\n          stroke: \"\",\n          cursor: \"pointer\",\n          x: 224 - 12 - ipBBox.width - 4,\n          y: ipBBox.minY - 5,\n          width: ipBBox.width + 8,\n          height: ipBBox.height + 10,\n          fill: \"#fff\",\n          opacity: 0,\n        },\n        name: \"ip-box\",\n      });\n      group.addShape(\"rect\", {\n        attrs: {\n          x: 194,\n          y: 7,\n          width: 1,\n          height: 24,\n          fill: \"#E3E6E8\",\n          opacity: 0,\n        },\n        name: \"ip-cp-line\",\n      });\n      group.addShape(\"rect\", {\n        attrs: {\n          x: 195,\n          y: 8,\n          width: 22,\n          height: 22,\n          fill: \"#FFF\",\n          cursor: \"pointer\",\n          opacity: 0,\n        },\n        name: \"ip-cp-bg\",\n      });\n      group.addShape(\"image\", {\n        attrs: {\n          x: 200,\n          y: 13,\n          height: 12,\n          width: 10,\n          img: \"https://os.alipayobjects.com/rmsportal/DFhnQEhHyPjSGYW.png\",\n          cursor: \"pointer\",\n          opacity: 0,\n        },\n        name: \"ip-cp-icon\",\n      });\n      group.addShape(\"rect\", {\n        attrs: {\n          x: 195,\n          y: 8,\n          width: 22,\n          height: 22,\n          fill: \"#FFF\",\n          cursor: \"pointer\",\n          opacity: 0,\n        },\n        name: \"ip-cp-box\",\n        tooltip: \"Copy the IP\",\n      });\n    }\n\n    group.addShape(\"text\", {\n      attrs: {\n        text: cfg.name,\n        x: 19,\n        y: 19,\n        fontSize: 14,\n        fontWeight: 700,\n        textAlign: \"left\",\n        textBaseline: \"middle\",\n        fill: config.fontColor,\n        cursor: \"pointer\",\n      },\n      name: \"name-text-shape\",\n    });\n    group.addShape(\"text\", {\n      attrs: {\n        text: cfg.keyInfo,\n        x: 19,\n        y: 45,\n        fontSize: 14,\n        textAlign: \"left\",\n        textBaseline: \"middle\",\n        fill: config.fontColor,\n        cursor: \"pointer\",\n      },\n      name: \"bottom-text-shape\",\n    });\n\n    if (nodeError) {\n      group.addShape(\"text\", {\n        attrs: {\n          x: 191,\n          y: 62,\n          text: \"⚠️\",\n          fill: \"#000\",\n          fontSize: 18,\n        },\n        name: \"error-text-shape\",\n      });\n    }\n\n    const hasChildren = cfg.children && cfg.children.length > 0;\n\n    if (hasChildren) {\n      nodeBasicMethod.createNodeMarker(group, cfg.collapsed, 236, 32);\n    }\n\n    return container;\n  },\n  afterDraw: nodeBasicMethod.afterDraw,\n  setState: nodeBasicMethod.setState,\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-node\"],\n  },\n  defaultNode: {\n    type: \"card-node\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/card-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      title: \"node1\",\n      error: true,\n      nodeType: \"a\",\n      id: \"node1\",\n      nodeLevel: 2,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      x: 100,\n      y: 100,\n    },\n    {\n      title: \"node2\",\n      error: false,\n      nodeType: \"b\",\n      id: \"node2\",\n      nodeLevel: 0,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      x: 100,\n      y: 200,\n    },\n    {\n      title: \"node3\",\n      error: false,\n      nodeType: \"a\",\n      id: \"node3\",\n      nodeLevel: 3,\n      panels: [\n        { title: \"成功率\", value: \"11%\" },\n        { title: \"耗时\", value: \"111\" },\n        { title: \"错误数\", value: \"111\" },\n      ],\n      collapse: true,\n      x: 100,\n      y: 300,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/card-node/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst ICON_MAP = {\n  a: \"https://gw.alipayobjects.com/mdn/rms_8fd2eb/afts/img/A*0HC-SawWYUoAAAAAAAAAAABkARQnAQ\",\n  b: \"https://gw.alipayobjects.com/mdn/rms_8fd2eb/afts/img/A*sxK0RJ1UhNkAAAAAAAAAAABkARQnAQ\",\n};\nF6.registerNode(\n  \"card-node\",\n  {\n    drawShape: function drawShape(cfg, group) {\n      const color = cfg.error ? \"#F4664A\" : \"#30BF78\";\n      const r = 2;\n      const shape = group.addShape(\"rect\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          width: 200,\n          height: 60,\n          stroke: color,\n          radius: r,\n        },\n        name: \"main-box\",\n        draggable: true,\n      });\n      group.addShape(\"rect\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          width: 200,\n          height: 20,\n          fill: color,\n          radius: [r, r, 0, 0],\n        },\n        name: \"title-box\",\n        draggable: true,\n      });\n      group.addShape(\"image\", {\n        attrs: {\n          x: 4,\n          y: 2,\n          height: 16,\n          width: 16,\n          cursor: \"pointer\",\n          img: ICON_MAP[cfg.nodeType || \"app\"],\n        },\n        name: \"node-icon\",\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          textBaseline: \"top\",\n          y: 2,\n          x: 24,\n          lineHeight: 20,\n          text: cfg.title,\n          fill: \"#fff\",\n        },\n        name: \"title\",\n      });\n\n      if (cfg.nodeLevel > 0) {\n        group.addShape(\"marker\", {\n          attrs: {\n            x: 184,\n            y: 30,\n            r: 6,\n            cursor: \"pointer\",\n            symbol: cfg.collapse ? F6.Marker.expand : F6.Marker.collapse,\n            stroke: \"#666\",\n            lineWidth: 1,\n          },\n          name: \"collapse-icon\",\n        });\n      }\n\n      cfg.panels.forEach((item, index) => {\n        group.addShape(\"text\", {\n          attrs: {\n            textBaseline: \"top\",\n            y: 25,\n            x: 24 + index * 60,\n            lineHeight: 20,\n            text: item.title,\n            fill: \"rgba(0,0,0, 0.4)\",\n          },\n          name: `index-title-${index}`,\n        });\n        group.addShape(\"text\", {\n          attrs: {\n            textBaseline: \"top\",\n            y: 42,\n            x: 24 + index * 60,\n            lineHeight: 20,\n            text: item.value,\n            fill: \"#595959\",\n          },\n          name: `index-title-${index}`,\n        });\n      });\n      return shape;\n    },\n  },\n  \"single-node\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"card-node\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/circle/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"circle\",\n      label: \"Circle\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/circle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"circle\",\n    size: [60],\n    labelCfg: {\n      position: \"bottom\",\n    },\n    linkPoints: {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/circle-with-combo/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 250,\n      y: 150,\n      comboId: \"combo\",\n    },\n    {\n      id: \"node2\",\n      x: 350,\n      y: 150,\n      comboId: \"combo\",\n    },\n  ],\n  combos: [\n    {\n      id: \"combo\",\n      label: \"Combo\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/circle-with-combo/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  groupByTypes: false,\n  modes: {\n    default: [\n      \"drag-canvas\",\n      \"drag-node\",\n      \"drag-combo\",\n      \"collapse-expand-combo\",\n    ],\n  },\n  defaultCombo: {\n    type: \"circle\",\n    labelCfg: {\n      position: \"top\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/cubic1/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node0\",\n      x: 200,\n      y: 10,\n      size: 20,\n    },\n    {\n      id: \"node1\",\n      x: 200,\n      y: 50,\n      label: \"1222\",\n      type: \"my-rect\",\n    },\n    {\n      id: \"node2\",\n      x: 150,\n      y: 150,\n      type: \"my-rect\",\n    },\n    {\n      id: \"node3\",\n      x: 250,\n      y: 150,\n      type: \"my-rect\",\n    },\n    {\n      id: \"node4\",\n      x: 200,\n      y: 250,\n      type: \"my-rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node0\",\n      target: \"node1\",\n    },\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n    },\n    {\n      source: \"node2\",\n      target: \"node4\",\n    },\n    {\n      source: \"node3\",\n      target: \"node4\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/cubic1/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\n  \"my-rect\",\n  {\n    getAnchorPoints: function getAnchorPoints() {\n      return [\n        [0.5, 0],\n        [0.5, 1],\n      ];\n    },\n  },\n  \"rect\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  linkCenter: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultEdge: {\n    type: \"cubic-vertical\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/cubic2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node5\",\n      x: 150,\n      y: 200,\n      label: \"5\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node6\",\n      x: 300,\n      y: 150,\n      label: \"6\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      id: \"node7\",\n      x: 300,\n      y: 250,\n      label: \"7\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node5\",\n      target: \"node6\",\n      type: \"cubic-horizontal\",\n    },\n    {\n      source: \"node5\",\n      target: \"node7\",\n      type: \"cubic-horizontal\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/cubic2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  linkCenter: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/custom-arrows/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 50,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 50,\n    },\n    {\n      id: \"2\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 100,\n    },\n  ],\n  edges: [\n    {\n      id: \"edge0\",\n      source: \"0\",\n      target: \"1\",\n      label: \"custom arrow 1\",\n      style: {\n        endArrow: {\n          path: \"M 3,-5 L 3,5 L 15,10 L 15,-10 Z\",\n        },\n      },\n    },\n    {\n      id: \"edge1\",\n      source: \"2\",\n      target: \"3\",\n      label: \"custom arrow 2\",\n      style: {\n        endArrow: {\n          path: \"M0,0 L10,4 L14,14 L18,4 L28,0 L18,-4 L14,-14 L10,-4 Z\",\n        },\n      },\n    },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.style.stroke = \"#F6BD16\";\n  console.log(edge.style.endArrow);\n  edge.style.endArrow.fill = \"#F6BD16\";\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/elements/custom-arrows/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  defaultNode: {\n    size: 15,\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/custom-polyline/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"7\",\n      x: 150,\n      y: 100,\n      size: 40,\n      anchorPoints: [\n        [1, 0.5],\n        [1, 0],\n      ],\n    },\n    {\n      id: \"8\",\n      x: 300,\n      y: 200,\n      size: 40,\n      anchorPoints: [\n        [0, 0.5],\n        [0, 1],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"7\",\n      target: \"8\",\n      sourceAnchor: 0,\n      targetAnchor: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/custom-polyline/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerEdge(\n  \"line-arrow\",\n  {\n    getPath(points) {\n      const startPoint = points[0];\n      const endPoint = points[1];\n      return [\n        [\"M\", startPoint.x, startPoint.y],\n        [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y],\n        [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y],\n        [\"L\", endPoint.x, endPoint.y],\n      ];\n    },\n\n    getShapeStyle(cfg) {\n      const { startPoint } = cfg;\n      const { endPoint } = cfg;\n      const controlPoints = this.getControlPoints(cfg);\n      let points = [startPoint];\n\n      if (controlPoints) {\n        points = points.concat(controlPoints);\n      }\n\n      points.push(endPoint);\n      const path = this.getPath(points);\n      const style = Object.assign(\n        {},\n        F6.Global.defaultEdge.style,\n        {\n          stroke: \"#BBB\",\n          lineWidth: 1,\n          path,\n        },\n        cfg.style,\n      );\n      return style;\n    },\n  },\n  \"line\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-node\", \"drag-canvas\"],\n  },\n  defaultNode: {\n    type: \"circle\",\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    linkPoints: {\n      left: true,\n      right: true,\n      fill: \"#fff\",\n      stroke: \"#1890FF\",\n      size: 3,\n    },\n  },\n  defaultEdge: {\n    type: \"line-arrow\",\n    style: {\n      stroke: \"#F6BD16\",\n      startArrow: {\n        path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n        fill: \"#F6BD16\",\n      },\n      endArrow: {\n        path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n        fill: \"#F6BD16\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/custom-polyline2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"7\",\n      x: 150,\n      y: 100,\n      size: 40,\n      anchorPoints: [\n        [1, 0.5],\n        [1, 0],\n      ],\n    },\n    {\n      id: \"8\",\n      x: 300,\n      y: 200,\n      size: 40,\n      anchorPoints: [\n        [0, 0.5],\n        [0, 1],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"7\",\n      target: \"8\",\n      sourceAnchor: 0,\n      targetAnchor: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/custom-polyline2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerEdge(\"line-arrow\", {\n  options: {\n    style: {\n      stroke: \"#ccc\",\n    },\n  },\n  draw: function draw(cfg, group) {\n    const { startPoint } = cfg;\n    const { endPoint } = cfg;\n    const stroke = (cfg.style && cfg.style.stroke) || this.options.style.stroke;\n    const startArrow = (cfg.style && cfg.style.startArrow) || undefined;\n    const endArrow = (cfg.style && cfg.style.endArrow) || undefined;\n    const keyShape = group.addShape(\"path\", {\n      attrs: {\n        path: [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, startPoint.y],\n          [\"L\", endPoint.x / 3 + (2 / 3) * startPoint.x, endPoint.y],\n          [\"L\", endPoint.x, endPoint.y],\n        ],\n        stroke,\n        lineWidth: 1,\n        startArrow,\n        endArrow,\n      },\n      className: \"edge-shape\",\n      name: \"edge-shape\",\n    });\n    return keyShape;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-node\", \"drag-canvas\"],\n  },\n  defaultNode: {\n    type: \"circle\",\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    linkPoints: {\n      left: true,\n      right: true,\n      fill: \"#fff\",\n      stroke: \"#1890FF\",\n      size: 3,\n    },\n  },\n  defaultEdge: {\n    type: \"line-arrow\",\n    style: {\n      stroke: \"#F6BD16\",\n      startArrow: {\n        path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n        fill: \"#F6BD16\",\n      },\n      endArrow: {\n        path: \"M 0,0 L 12,6 L 9,0 L 12,-6 Z\",\n        fill: \"#F6BD16\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/diamond/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"diamond\",\n      label: \"Diamond\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/diamond/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"diamond\",\n    size: [80, 60],\n    labelCfg: {\n      position: \"bottom\",\n    },\n    linkPoints: {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/donut/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"donut\",\n      label: \"Donut\",\n      x: 250,\n      y: 150,\n      // the attributes for drawing donut\n      donutAttrs: {\n        prop1: 10,\n        prop2: 20,\n        prop3: 25,\n      },\n      // the color map for drawing donut\n      donutColorMap: {\n        prop1: \"#8eaade\",\n        prop2: \"#5c7cb8\",\n        prop3: \"#1e3f7d\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/donut/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n  fitViewPadding: 60,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"donut\",\n    size: 60,\n    labelCfg: {\n      position: \"bottom\",\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/edge-bg/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 200,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 350,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"edge 1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n      label: \"edge 2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n      label: \"edge 3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/edge-bg/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  defaultNode: {\n    type: \"circle\",\n    labelCfg: {\n      position: \"bottom\",\n    },\n  },\n  defaultEdge: {\n    labelCfg: {\n      autoRotate: true,\n      style: {\n        fill: \"#1890ff\",\n        fontSize: 14,\n        background: {\n          fill: \"#ffffff\",\n          stroke: \"#9EC9FF\",\n          padding: [2, 2, 2, 2],\n          radius: 2,\n        },\n      },\n    },\n  },\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  nodeStateStyles: {\n    hover: {\n      fillOpacity: 0.8,\n    },\n    selected: {\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/edge-mul-label/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 100,\n      label: \"node2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      // The left and right labels\n      label: [\"hello\", \"world\"],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/edge-mul-label/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerEdge(\"multipleLabelsEdge\", {\n  options: {\n    style: {\n      stroke: \"#000\",\n    },\n  },\n  labelAutoRotate: true,\n\n  draw(cfg, group) {\n    const { startPoint } = cfg;\n    const { endPoint } = cfg;\n    const stroke = (cfg.style && cfg.style.stroke) || this.options.style.stroke;\n    const shape = group.addShape(\"path\", {\n      attrs: {\n        stroke,\n        path: [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", endPoint.x, endPoint.y],\n        ],\n      },\n      name: \"path-shape\",\n    });\n\n    if (cfg.label && cfg.label.length) {\n      group.addShape(\"text\", {\n        attrs: {\n          text: cfg.label[0],\n          fill: \"#595959\",\n          textAlign: \"start\",\n          textBaseline: \"middle\",\n          x: startPoint.x,\n          y: startPoint.y - 10,\n        },\n        name: \"left-text-shape\",\n      });\n\n      if (cfg.label.length > 1) {\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.label[1],\n            fill: \"#595959\",\n            textAlign: \"end\",\n            textBaseline: \"middle\",\n            x: endPoint.x,\n            y: endPoint.y - 10,\n          },\n          name: \"right-text-shape\",\n        });\n      }\n    }\n\n    return shape;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\n      {\n        type: \"drag-node\",\n        delegate: false,\n      },\n      \"drag-canvas\",\n      {\n        type: \"zoom-canvas\",\n        sensitivity: 0.5,\n      },\n    ],\n  },\n  defaultNode: {\n    type: \"circle\",\n    size: [50],\n    linkPoints: {\n      left: true,\n      right: true,\n    },\n  },\n  defaultEdge: {\n    type: \"multipleLabelsEdge\",\n    style: {\n      stroke: \"#F6BD16\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/ellipse/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"ellipse\",\n      label: \"Ellipse\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/ellipse/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"ellipse\",\n    size: [80, 50],\n    labelCfg: {\n      position: \"bottom\",\n    },\n    linkPoints: {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/extra-shape/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 100,\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 100,\n    },\n    {\n      id: \"node3\",\n      x: 300,\n      y: 200,\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      midPointColor: \"#f00\",\n      quatileColor: \"#f00\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      midPointColor: \"#0f0\",\n      quatileColor: \"#0f0\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/extra-shape/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerEdge(\n  \"extra-shape-edge\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      const midPoint = shape.getPoint(0.5);\n      const rectColor = cfg.midPointColor || \"#333\";\n      group.addShape(\"rect\", {\n        attrs: {\n          width: 10,\n          height: 10,\n          fill: rectColor || \"#333\",\n          x: midPoint.x - 5,\n          y: midPoint.y - 5,\n        },\n      });\n      const quatile = shape.getPoint(0.25);\n      const quatileColor = cfg.quatileColor || \"#333\";\n      group.addShape(\"circle\", {\n        attrs: {\n          r: 5,\n          fill: quatileColor || \"#333\",\n          x: quatile.x,\n          y: quatile.y,\n        },\n      });\n    },\n\n    update: undefined,\n  },\n  \"cubic\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-node\", \"drag-canvas\"],\n  },\n  defaultEdge: {\n    type: \"extra-shape-edge\",\n    style: {\n      stroke: \"#F6BD16\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/image/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"image\",\n      img: \"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/image/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"image\",\n    size: [260, 80],\n    clipCfg: {\n      show: false,\n      type: \"circle\",\n      r: 30,\n      style: {\n        lineWidth: 1,\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/label-len/data.js",
    "content": "import F6 from \"@antv/f6\";\n\nconst globalFontSize = 12;\n\nconst fittingString = (str, maxWidth, fontSize) => {\n  const ellipsis = \"...\";\n  const ellipsisLength = F6.Util.getTextSize(ellipsis, fontSize)[0];\n  let currentWidth = 0;\n  let res = str;\n  const pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\"); // distinguish the Chinese charactors and letters\n  str.split(\"\").forEach((letter, i) => {\n    if (currentWidth > maxWidth - ellipsisLength) return;\n    if (pattern.test(letter)) {\n      // Chinese charactors\n      currentWidth += fontSize;\n    } else {\n      // get the width of single letter according to the fontSize\n      currentWidth += F6.Util.getLetterWidth(letter, fontSize);\n    }\n    if (currentWidth > maxWidth - ellipsisLength) {\n      res = `${str.substr(0, i)}${ellipsis}`;\n    }\n  });\n  return res;\n};\n\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      size: 40,\n      label: \"This label is too long to be displayed\",\n      id: \"node1\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      x: 300,\n      y: 100,\n      size: 80,\n      label: \"This label is also too long to be displayed\",\n      id: \"node2\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"This label is too long to be displayed\",\n      labelCfg: {\n        refY: 20,\n        style: {\n          fontSize: globalFontSize,\n        },\n      },\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n\n// Modify the label in the data\ndata.nodes.forEach(function (node) {\n  node.label = fittingString(node.label, node.size, globalFontSize);\n});\ndata.edges.forEach(function (edge) {\n  edge.label = fittingString(edge.label, 120, globalFontSize);\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/elements/label-len/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  defaultNode: {\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    labelCfg: {\n      style: {\n        fontSize: 12,\n      },\n    },\n  },\n  defaultEdge: {\n    color: \"#F6BD16\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/label-len1/data.js",
    "content": "import F6 from \"@antv/f6\";\n\nconst fittingString = (str, maxWidth, fontSize) => {\n  let currentWidth = 0;\n  let res = str;\n  const pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\"); // distinguish the Chinese charactors and letters\n  str.split(\"\").forEach((letter, i) => {\n    if (currentWidth > maxWidth) return;\n    if (pattern.test(letter)) {\n      // Chinese charactors\n      currentWidth += fontSize;\n    } else {\n      // get the width of single letter according to the fontSize\n      currentWidth += F6.Util.getLetterWidth(letter, fontSize);\n    }\n    if (currentWidth > maxWidth) {\n      res = `${str.substr(0, i)}\\n${str.substr(i)}`;\n    }\n  });\n  return res;\n};\n\nconst globalFontSize = 12;\nconst data = {\n  nodes: [\n    {\n      x: 100,\n      y: 100,\n      label: fittingString(\n        \"Break the line if it is too long\",\n        80,\n        globalFontSize,\n      ),\n      id: \"node1\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n    {\n      x: 300,\n      y: 100,\n      label: fittingString(\n        \"Break the line if it is too long\",\n        80,\n        globalFontSize,\n      ),\n      id: \"node2\",\n      labelCfg: {\n        position: \"bottom\",\n      },\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: fittingString(\n        \"Break the line if it is too long\",\n        100,\n        globalFontSize,\n      ),\n      labelCfg: {\n        refY: 20,\n      },\n      style: {\n        endArrow: true,\n      },\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/elements/label-len1/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  defaultNode: {\n    type: \"rect\",\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    color: \"#F6BD16\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/line-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeB\",\n      x: 150,\n      y: 150,\n      label: \"Line1\",\n      type: \"circleLine\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeB2\",\n      x: 500,\n      y: 150,\n      label: \"Line2\",\n      type: \"circleLine\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 50, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [50, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 50, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeB\",\n      target: \"nodeB2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/line-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\"circleLine\", {\n  draw(cfg, group) {\n    const baseR = 30;\n    let nowAngle = 0;\n    let refR = baseR;\n    const refInc = 10;\n\n    for (let i = 0; i < 5; i++) {\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          r: (refR += refInc),\n          stroke: \"#bae7ff\",\n          lineDash: [4, 4],\n        },\n        name: \"circle-shape\",\n      });\n    }\n\n    const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n    cfg.details.forEach((cat) => {\n      const postions = [];\n      cat.values.forEach((item, index) => {\n        const r = baseR + item;\n        const xPos = r * Math.cos(nowAngle);\n        const yPos = r * Math.sin(nowAngle);\n        nowAngle += everyIncAngle;\n        postions.push([xPos, yPos]);\n\n        if (index === 4) {\n          const r_ = baseR + item;\n          const xPos_ = r_ * Math.cos(nowAngle);\n          const yPos_ = r_ * Math.sin(nowAngle);\n          postions.push([xPos_, yPos_]);\n        }\n      });\n      const pathArrayL = postions.map((item) => [\"L\", ...item]);\n      group.addShape(\"path\", {\n        attrs: {\n          path: [[\"M\", 0, 0], ...pathArrayL, [\"Z\"]],\n          stroke: cat.color,\n        },\n        name: \"path-shape\",\n      });\n      postions.forEach((pos, index) => {\n        if (index !== 5) {\n          const littleCircle = group.addShape(\"circle\", {\n            attrs: {\n              x: pos[0],\n              y: pos[1],\n              r: 2,\n              fill: \"black\",\n              stroke: cat.color,\n              cursor: \"pointer\",\n            },\n            name: \"circle-shape\",\n          });\n          littleCircle.on(\"mouseenter\", function () {\n            littleCircle.animate(\n              {\n                r: 5,\n              },\n              {\n                repeat: false,\n                duration: 200,\n              },\n            );\n          });\n          littleCircle.on(\"mouseleave\", function () {\n            littleCircle.animate(\n              {\n                r: 2,\n              },\n              {\n                repeat: false,\n                duration: 200,\n              },\n            );\n          });\n          littleCircle.set(\"name\", \"littleCircle\");\n        }\n      });\n    });\n    group.addShape(\"circle\", {\n      attrs: {\n        x: 0,\n        y: 0,\n        r: baseR,\n        fill: cfg.centerColor,\n        stroke: \"darkgray\",\n      },\n      name: \"circle-shape\",\n    });\n\n    if (cfg.label) {\n      group.addShape(\"text\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          textAlign: \"center\",\n          textBaseline: \"middle\",\n          text: cfg.label,\n          fill: \"white\",\n          fontStyle: \"bold\",\n        },\n        name: \"text-shape\",\n      });\n    }\n\n    return group;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/list/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"shape2\",\n      x: 0,\n      y: 0,\n      type: \"expandNode\",\n      name: \"网站引流\",\n      values: [\n        {\n          key: \"曝光率\",\n          value: \"19.09\",\n        },\n        {\n          key: \"流入UV\",\n          value: \"910\",\n        },\n        {\n          key: \"点击率\",\n          value: \"90\",\n        },\n        {\n          key: \"占比\",\n          value: \"90\",\n        },\n      ],\n      properties: [\n        {\n          name: \"搜索\",\n          value1: \"102\",\n          value2: \"102\",\n          value3: \"102\",\n          value4: \"102\",\n        },\n        {\n          name: \"扫一扫\",\n          value1: \"102\",\n          value2: \"102\",\n          value3: \"102\",\n          value4: \"102\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/list/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\"expandNode\", {\n  draw: function draw(cfg, group) {\n    const mainGroup = group.addGroup({\n      id: \"main-group\",\n    });\n    const keyShape = mainGroup.addShape(\"rect\", {\n      attrs: {\n        x: 0,\n        y: 0,\n        width: 100 + 60 * cfg.values.length,\n        height: 50,\n        fill: \"#C6E5FF\",\n      },\n      name: \"key-rect-shape\",\n    });\n    mainGroup.addShape(\"text\", {\n      attrs: {\n        text: cfg.name,\n        fill: \"#000\",\n        width: 130,\n        x: 10,\n        y: 32,\n      },\n      name: \"name-text-shape\",\n    });\n    const subGroup = group.addGroup({\n      id: \"sub-group\",\n    });\n    cfg.values.forEach(function (data, index) {\n      subGroup.addShape(\"rect\", {\n        attrs: {\n          x: 110 + index * 60,\n          y: 0,\n          width: 50,\n          height: 50,\n        },\n        name: \"rect-shape\",\n      });\n      subGroup.addShape(\"text\", {\n        attrs: {\n          text: data.key,\n          fill: \"#000\",\n          x: 130 + index * 60,\n          y: 20,\n          fontSize: 10,\n          textBaseline: \"middle\",\n          className: \"sub-group-text\",\n        },\n        name: \"sub-text-shape1\",\n      });\n      subGroup.addShape(\"text\", {\n        attrs: {\n          text: data.value,\n          fill: \"#000\",\n          x: 130 + index * 60,\n          y: 30,\n          fontSize: 10,\n          textBaseline: \"middle\",\n          textAlign: \"left\",\n          className: \"sub-group-text\",\n        },\n        name: \"name-text-shape2\",\n      });\n    });\n    const listGroup = group.addGroup({\n      id: \"detail-list-group\",\n    });\n    listGroup.addShape(\"rect\", {\n      attrs: {\n        width: 100 + 60 * cfg.values.length - 70,\n        height: 30 * cfg.properties.length + 20,\n        fill: \"#fff\",\n        x: 70,\n        y: 30,\n      },\n      name: \"list-rect-shape1\",\n    });\n    const rectWidth = 100 + 60 * cfg.values.length - 80;\n    cfg.properties.forEach(function (property, index) {\n      listGroup.addShape(\"rect\", {\n        attrs: {\n          width: rectWidth,\n          height: 30,\n          fill: \"#9EC9FF\",\n          x: 80,\n          y: 40 * index + 40,\n        },\n        name: \"list-rect-shape2\",\n      });\n      let count = 0;\n\n      for (const p in property) {\n        listGroup.addShape(\"text\", {\n          attrs: {\n            text: property[p],\n            fill: \"#000\",\n            x: 85 + count * (rectWidth / cfg.values.length) - count * 10,\n            y: 40 * index + 40 + 15,\n            fontSize: 10,\n            textBaseline: \"middle\",\n            textAlign: \"left\",\n          },\n          name: \"text-shape\",\n        });\n        count++;\n      }\n    });\n    listGroup.hide();\n    return keyShape;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n});\ngraph.on(\"node:tap\", function (evt) {\n  const { target } = evt;\n  const parentGroup = target.get(\"parent\").get(\"parent\");\n  const detailGroup = parentGroup.findById(\"detail-list-group\");\n  const subGroup = parentGroup.findById(\"sub-group\");\n  const keyTexts = subGroup.findAll(function (item) {\n    return item.attr(\"className\") === \"sub-group-text\";\n  });\n  const isVisible = detailGroup.get(\"visible\");\n\n  if (isVisible) {\n    detailGroup.hide();\n    keyTexts.forEach(function (text) {\n      const top = text.attr(\"y\");\n      text.attr(\"y\", top + 10);\n    });\n  } else {\n    keyTexts.forEach(function (text) {\n      const top = text.attr(\"y\");\n      text.attr(\"y\", top - 10);\n    });\n    detailGroup.show();\n  }\n\n  graph.paint();\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/loop/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 150,\n    },\n  ],\n  edges: [\n    // 内置 loop\n    {\n      source: \"0\",\n      target: \"0\",\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/loop/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-node\"],\n  },\n  defaultEdge: {\n    type: \"loop\",\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 20,10 L 20,-10 Z\",\n        fill: \"#eee\",\n      },\n    },\n    loopCfg: {\n      position: \"top\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/mode-rect/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"rect1\",\n      label: \"rect1\",\n      description: \"description, hidden when undefined\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/mode-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n  defaultNode: {\n    type: \"modelRect\",\n    size: [270, 80],\n    style: {\n      radius: 5,\n      stroke: \"#69c0ff\",\n      fill: \"#ffffff\",\n      lineWidth: 1,\n      fillOpacity: 1,\n    },\n    labelCfg: {\n      style: {\n        fill: \"#595959\",\n        fontSize: 14,\n      },\n      offset: 30,\n    },\n    preRect: {\n      show: true,\n      width: 4,\n      fill: \"#40a9ff\",\n      radius: 2,\n    },\n    linkPoints: {\n      top: false,\n      right: false,\n      bottom: false,\n      left: false,\n      size: 10,\n      lineWidth: 1,\n      fill: \"#72CC4A\",\n      stroke: \"#72CC4A\",\n    },\n    logoIcon: {\n      show: true,\n      x: 0,\n      y: 0,\n      img: \"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg\",\n      width: 16,\n      height: 16,\n      offset: 0,\n    },\n    stateIcon: {\n      show: true,\n      x: 0,\n      y: 0,\n      img: \"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg\",\n      width: 16,\n      height: 16,\n      offset: -5,\n    },\n  },\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  nodeStateStyles: {\n    hover: {\n      lineWidth: 2,\n      stroke: \"#1890ff\",\n      fill: \"#e6f7ff\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"hover\", true);\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/multi-edges/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 50,\n      y: 350,\n      label: \"A\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 150,\n      label: \"B\",\n    },\n    {\n      id: \"node3\",\n      x: 450,\n      y: 350,\n      label: \"C\",\n    },\n  ],\n  edges: [],\n};\n\nfor (let i = 0; i < 10; i++) {\n  data.edges.push({\n    source: \"node1\",\n    target: \"node2\",\n    label: `${i}th edge of A-B`,\n  });\n}\nfor (let i = 0; i < 5; i++) {\n  data.edges.push({\n    source: \"node2\",\n    target: \"node3\",\n    label: `${i}th edge of B-C`,\n  });\n}\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/elements/multi-edges/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.Util.processParallelEdges(data.edges);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  linkCenter: true,\n  defaultNode: {\n    type: \"circle\",\n    size: [40],\n    color: \"#5B8FF9\",\n    style: {\n      fill: \"#9EC9FF\",\n      lineWidth: 3,\n    },\n    labelCfg: {\n      style: {\n        fill: \"#000\",\n        fontSize: 14,\n      },\n    },\n  },\n  defaultEdge: {\n    type: \"quadratic\",\n    labelCfg: {\n      autoRotate: true,\n    },\n  },\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  nodeStateStyles: {\n    hover: {\n      fillOpacity: 0.8,\n    },\n    selected: {\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/node-bg/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 250,\n      y: 200,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 350,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"edge 1\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n      label: \"edge 2\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n      label: \"edge 3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/node-bg/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  defaultNode: {\n    type: \"circle\",\n    labelCfg: {\n      style: {\n        fill: \"#1890ff\",\n        fontSize: 14,\n        background: {\n          fill: \"#ffffff\",\n          stroke: \"#9EC9FF\",\n          padding: [2, 2, 2, 2],\n          radius: 2,\n        },\n      },\n      position: \"bottom\",\n    },\n  },\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  nodeStateStyles: {\n    hover: {\n      fillOpacity: 0.8,\n    },\n    selected: {\n      lineWidth: 5,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/pie-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"pie1\",\n      size: 80,\n      inDegree: 80,\n      degree: 360,\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"pie2\",\n      size: 80,\n      inDegree: 280,\n      degree: 360,\n      x: 350,\n      y: 150,\n    },\n  ],\n  edges: [\n    {\n      source: \"pie1\",\n      target: \"pie2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/pie-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst lightBlue = \"#5b8ff9\";\nconst lightOrange = \"#5ad8a6\";\nF6.registerNode(\"pie-node\", {\n  draw: (cfg, group) => {\n    const radius = cfg.size / 2;\n    const inPercentage = cfg.inDegree / cfg.degree;\n    const inAngle = inPercentage * Math.PI * 2;\n    const inArcEnd = [radius * Math.cos(inAngle), -radius * Math.sin(inAngle)];\n    let isInBigArc = 0;\n    let isOutBigArc = 1;\n\n    if (inAngle > Math.PI) {\n      isInBigArc = 1;\n      isOutBigArc = 0;\n    }\n\n    const fanIn = group.addShape(\"path\", {\n      attrs: {\n        path: [\n          [\"M\", radius, 0],\n          [\"A\", radius, radius, 0, isInBigArc, 0, inArcEnd[0], inArcEnd[1]],\n          [\"L\", 0, 0],\n          [\"Z\"],\n        ],\n        lineWidth: 0,\n        fill: lightOrange,\n      },\n      name: \"in-fan-shape\",\n    });\n    group.addShape(\"path\", {\n      attrs: {\n        path: [\n          [\"M\", inArcEnd[0], inArcEnd[1]],\n          [\"A\", radius, radius, 0, isOutBigArc, 0, radius, 0],\n          [\"L\", 0, 0],\n          [\"Z\"],\n        ],\n        lineWidth: 0,\n        fill: lightBlue,\n      },\n      name: \"out-fan-shape\",\n    });\n    return fanIn;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n  defaultNode: {\n    type: \"pie-node\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/point-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeC\",\n      x: 150,\n      y: 150,\n      label: \"Point2\",\n      type: \"justPoints\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeC2\",\n      x: 500,\n      y: 150,\n      label: \"Point2\",\n      type: \"justPoints\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 50, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [50, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 50, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeC\",\n      target: \"nodeC2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/point-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\"justPoints\", {\n  draw(cfg, group) {\n    const baseR = 30;\n    let nowAngle = 0;\n    let refR = baseR;\n    const refInc = 10;\n\n    for (let i = 0; i < 5; i++) {\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          r: (refR += refInc),\n          stroke: \"#5ad8a6\",\n          lineDash: [4, 4],\n        },\n        name: \"circle-shape\",\n      });\n    }\n\n    const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n    nowAngle += everyIncAngle / 2;\n    cfg.details.forEach((cat) => {\n      const postions = [];\n      cat.values.forEach((item, index) => {\n        const r = baseR + item;\n        const xPos = r * Math.cos(nowAngle);\n        const yPos = r * Math.sin(nowAngle);\n        nowAngle += everyIncAngle;\n        postions.push([xPos, yPos]);\n\n        if (index === 4) {\n          const r_ = baseR + item;\n          const xPos_ = r_ * Math.cos(nowAngle);\n          const yPos_ = r_ * Math.sin(nowAngle);\n          postions.push([xPos_, yPos_]);\n        }\n      });\n      postions.forEach((pos, index) => {\n        if (index !== 5) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: pos[0],\n              y: pos[1],\n              r: 3,\n              lineWidth: 2,\n              stroke: cat.color,\n            },\n            name: \"circle-marker-shape\",\n          });\n        }\n      });\n    });\n    let nowAngle2 = 0;\n    const everyIncAngleCat = (2 * Math.PI * (360 / 5)) / 360;\n\n    for (let i = 0; i < 5; i++) {\n      const r = 30 + 50;\n      const xPos = r * Math.cos(nowAngle2);\n      const yPos = r * Math.sin(nowAngle2);\n      group.addShape(\"path\", {\n        attrs: {\n          path: [\n            [\"M\", 0, 0],\n            [\"L\", xPos, yPos],\n          ],\n          lineDash: [4, 4],\n          stroke: \"#5ad8a6\",\n        },\n        name: \"path-shape\",\n      });\n      nowAngle2 += everyIncAngleCat;\n    }\n\n    group.addShape(\"circle\", {\n      attrs: {\n        x: 0,\n        y: 0,\n        r: baseR,\n        fill: cfg.centerColor,\n        stroke: \"darkgray\",\n      },\n      name: \"circle-shape\",\n    });\n\n    if (cfg.label) {\n      group.addShape(\"text\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          textAlign: \"center\",\n          textBaseline: \"middle\",\n          text: cfg.label,\n          fill: \"#fff\",\n          fontStyle: \"bold\",\n        },\n        name: \"text-shape\",\n      });\n    }\n\n    return group;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/polyline1/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"1\",\n      x: 350,\n      y: 300,\n    },\n  ],\n  edges: [\n    // Built-in polyline\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/polyline1/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultEdge: {\n    type: \"polyline\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/polyline2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"2\",\n      x: 150,\n      y: 150,\n    },\n    {\n      id: \"3\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/polyline2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultEdge: {\n    type: \"polyline\",\n    style: {\n      radius: 10,\n      offset: 30,\n      endArrow: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/polyline3/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"4\",\n      x: 150,\n      y: 100,\n    },\n    {\n      id: \"5\",\n      x: 350,\n      y: 250,\n    },\n  ],\n  edges: [\n    {\n      source: \"4\",\n      target: \"5\",\n      // assign the control points to control the bending positions\n      controlPoints: [\n        {\n          x: 260,\n          y: 80,\n        },\n        {\n          x: 320,\n          y: 50,\n        },\n        {\n          x: 390,\n          y: 110,\n        },\n        {\n          x: 420,\n          y: 110,\n        },\n        {\n          x: 420,\n          y: 140,\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/polyline3/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  linkCenter: true,\n  modes: {\n    default: [\"drag-node\"],\n  },\n  defaultEdge: {\n    type: \"polyline\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/rect/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"rect\",\n      label: \"rect\",\n      x: 250,\n      y: 150,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"rect\",\n    size: [80, 50],\n    labelCfg: {\n      position: \"center\",\n    },\n    linkPoints: {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/rect-with-combo/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 250,\n      y: 150,\n      comboId: \"combo\",\n    },\n    {\n      id: \"node2\",\n      x: 350,\n      y: 150,\n      comboId: \"combo\",\n    },\n  ],\n  combos: [\n    {\n      id: \"combo\",\n      label: \"Combo\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/rect-with-combo/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  groupByTypes: false,\n  modes: {\n    default: [\n      \"drag-canvas\",\n      \"drag-node\",\n      \"drag-combo\",\n      \"collapse-expand-combo\",\n    ],\n  },\n  defaultCombo: {\n    type: \"rect\",\n    size: [50, 50],\n    labelCfg: {\n      position: \"top\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"edge:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getEdges().forEach((edge) => {\n    graph.clearItemStates(edge);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/stack-chart/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"nodeF\",\n      x: 150,\n      y: 150,\n      label: \"StackedBar1\",\n      type: \"stacked-bar-node\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [20, 30, 40, 30, 30], color: \"#5B8FF9\" },\n        { cat: \"dal\", values: [40, 30, 20, 30, 50], color: \"#5AD8A6\" },\n        { cat: \"uv\", values: [40, 30, 30, 40, 40], color: \"#5D7092\" },\n        { cat: \"sal\", values: [20, 30, 50, 20, 20], color: \"#F6BD16\" },\n        { cat: \"cal\", values: [10, 10, 20, 20, 20], color: \"#E8684A\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n    {\n      id: \"nodeF2\",\n      x: 500,\n      y: 150,\n      label: \"StackedBar2\",\n      type: \"stacked-bar-node\",\n      anchorPoints: [\n        [0, 0.5],\n        [1, 0.5],\n      ],\n      details: [\n        { cat: \"pv\", values: [10, 10, 80, 20, 10], color: \"#5ad8a6\" },\n        { cat: \"dal\", values: [20, 30, 10, 50, 40], color: \"#ff99c3\" },\n        { cat: \"uv\", values: [10, 50, 30, 20, 30], color: \"#6dc8ec\" },\n        { cat: \"sal\", values: [70, 30, 20, 20, 20], color: \"#269a99\" },\n        { cat: \"cal\", values: [50, 10, 20, 70, 30], color: \"#9270CA\" },\n      ],\n      centerColor: \"#5b8ff9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"nodeF\",\n      target: \"nodeF2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/stack-chart/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\n\nconst getPath = (cx, cy, rs, re, startAngle, endAngle, clockwise) => {\n  const flag1 = clockwise ? 1 : 0;\n  const flag2 = clockwise ? 0 : 1;\n  return [\n    [\"M\", Math.cos(startAngle) * rs + cx, Math.sin(startAngle) * rs + cy],\n    [\"L\", Math.cos(startAngle) * re + cx, Math.sin(startAngle) * re + cy],\n    [\n      \"A\",\n      re,\n      re,\n      0,\n      0,\n      flag1,\n      Math.cos(endAngle) * re + cx,\n      Math.sin(endAngle) * re + cy,\n    ],\n    [\"L\", Math.cos(endAngle) * rs + cx, Math.sin(endAngle) * rs + cy],\n    [\n      \"A\",\n      rs,\n      rs,\n      0,\n      0,\n      flag2,\n      Math.cos(startAngle) * rs + cx,\n      Math.sin(startAngle) * rs + cy,\n    ],\n    [\"Z\"],\n  ];\n};\n\nF6.registerNode(\"stacked-bar-node\", {\n  draw(cfg, group) {\n    const baseR = 30;\n    let nowAngle = 0;\n    const everyIncAngle = (2 * Math.PI * (360 / 5 / 5)) / 360;\n    cfg.details.forEach((cat) => {\n      cat.values.forEach((item) => {\n        const baseNbr = Math.ceil(item / 10);\n        const baseIncR = 7;\n        let nowStartR = baseR;\n        const last = item % 10;\n        const endAngle = nowAngle + everyIncAngle;\n\n        for (let i = 0; i < baseNbr; i++) {\n          const path0 = getPath(\n            0,\n            0,\n            nowStartR,\n            nowStartR + baseIncR,\n            nowAngle,\n            endAngle,\n            false,\n          );\n          group.addShape(\"path\", {\n            attrs: {\n              path: path0,\n              stroke: \"darkgray\",\n              fill: cat.color,\n            },\n            name: \"path-shape1\",\n          });\n          nowStartR = nowStartR + baseIncR + 2;\n\n          if (i === baseNbr - 1 && last !== 0) {\n            const path1 = getPath(\n              0,\n              0,\n              nowStartR,\n              nowStartR + (baseIncR * last) / 10,\n              nowAngle,\n              endAngle,\n              false,\n            );\n            group.addShape(\"path\", {\n              attrs: {\n                path: path1,\n                stroke: \"darkgray\",\n                fill: cat.color,\n              },\n              name: \"path-shape2\",\n            });\n          }\n        }\n\n        nowAngle = endAngle;\n      });\n    });\n    group.addShape(\"circle\", {\n      attrs: {\n        x: 0,\n        y: 0,\n        r: baseR,\n        fill: cfg.centerColor,\n        stroke: \"darkgray\",\n      },\n      name: \"circle-shape\",\n    });\n\n    if (cfg.label) {\n      group.addShape(\"text\", {\n        attrs: {\n          x: 0,\n          y: 0,\n          textAlign: \"center\",\n          textBaseline: \"middle\",\n          text: cfg.label,\n          fill: \"white\",\n          fontStyle: \"bold\",\n        },\n        name: \"text-shape\",\n      });\n    }\n\n    return group;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/elements/star/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"star\",\n      label: \"Star\",\n      x: 250,\n      y: 200,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/star/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"star\",\n    size: [60, 60],\n    labelCfg: {\n      position: \"bottom\",\n    },\n    linkPoints: {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/elements/triangle/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"circle\",\n      label: \"Triangle\",\n      x: 250,\n      y: 200,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/elements/triangle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  fitCenter: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  defaultNode: {\n    type: \"triangle\",\n    size: [40],\n    direction: \"up\",\n    labelCfg: {\n      position: \"bottom\",\n    },\n    linkPoints: {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n    },\n    icon: {\n      show: true,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-FA2/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-FA2/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport forceAtlas2 from \"@antv/f6/dist/extends/layout/forceAtlas2Layout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"forceAtlas2\", forceAtlas2);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"forceAtlas2\",\n    preventOverlap: true,\n    kr: 10,\n    center: [250, 250],\n  },\n  defaultNode: {\n    size: 20,\n  },\n});\ndata.nodes.forEach((node) => {\n  node.x = Math.random() * 1;\n});\ngraph.on(\"afterlayout\", () => {\n  graph.fitView();\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-MDS/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-MDS/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"mds\", mds);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-node\"],\n  },\n  layout: {\n    type: \"mds\",\n    linkDistance: 100,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-arc-diagram/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      name: \"analytics.cluster\",\n      cluster: \"analytics\",\n      value: 21,\n    },\n    {\n      id: \"1\",\n      name: \"analytics.graph\",\n      cluster: \"analytics\",\n      value: 34,\n    },\n    {\n      id: \"2\",\n      name: \"analytics.optimization\",\n      cluster: \"analytics\",\n      value: 8,\n    },\n    {\n      id: \"3\",\n      name: \"animate\",\n      cluster: \"animate\",\n      value: 40,\n    },\n    {\n      id: \"4\",\n      name: \"animate.interpolate\",\n      cluster: \"animate\",\n      value: 18,\n    },\n    {\n      id: \"5\",\n      name: \"data.converters\",\n      cluster: \"data\",\n      value: 25,\n    },\n    {\n      id: \"6\",\n      name: \"data\",\n      cluster: \"data\",\n      value: 10,\n    },\n    {\n      id: \"7\",\n      name: \"display\",\n      cluster: \"display\",\n      value: 4,\n    },\n    {\n      id: \"8\",\n      name: \"flex\",\n      cluster: \"flex\",\n      value: 6,\n    },\n    {\n      id: \"9\",\n      name: \"physics\",\n      cluster: \"physics\",\n      value: 22,\n    },\n    {\n      id: \"10\",\n      name: \"query\",\n      cluster: \"query\",\n      value: 67,\n    },\n    {\n      id: \"11\",\n      name: \"query.methods\",\n      cluster: \"query\",\n      value: 71,\n    },\n    {\n      id: \"12\",\n      name: \"scale\",\n      cluster: \"scale\",\n      value: 33,\n    },\n    {\n      id: \"13\",\n      name: \"util\",\n      cluster: \"util\",\n      value: 23,\n    },\n    {\n      id: \"14\",\n      name: \"util.heap\",\n      cluster: \"util\",\n      value: 2,\n    },\n    {\n      id: \"15\",\n      cluster: \"util\",\n      name: \"util.math\",\n      value: 2,\n    },\n    {\n      id: \"16\",\n      name: \"util.palette\",\n      cluster: \"util\",\n      value: 5,\n    },\n    {\n      id: \"17\",\n      name: \"vis.axis\",\n      cluster: \"vis\",\n      value: 24,\n    },\n    {\n      id: \"18\",\n      name: \"vis.controls\",\n      cluster: \"vis\",\n      value: 28,\n    },\n    {\n      id: \"19\",\n      name: \"vis.data\",\n      cluster: \"vis\",\n      value: 70,\n    },\n    {\n      id: \"20\",\n      name: \"vis.data.render\",\n      cluster: \"vis\",\n      value: 11,\n    },\n    {\n      id: \"21\",\n      name: \"vis.events\",\n      cluster: \"vis\",\n      value: 8,\n    },\n    {\n      id: \"22\",\n      name: \"vis.legend\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"23\",\n      name: \"vis.operator.distortion\",\n      cluster: \"vis\",\n      value: 9,\n    },\n    {\n      id: \"24\",\n      name: \"vis.operator.encoder\",\n      cluster: \"vis\",\n      value: 30,\n    },\n    {\n      id: \"25\",\n      name: \"vis.operator.filter\",\n      cluster: \"vis\",\n      value: 17,\n    },\n    {\n      id: \"26\",\n      name: \"vis.operator\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"27\",\n      name: \"vis.operator.label\",\n      cluster: \"vis\",\n      value: 18,\n    },\n    {\n      id: \"28\",\n      name: \"vis.operator.layout\",\n      cluster: \"vis\",\n      value: 91,\n    },\n    {\n      id: \"29\",\n      name: \"vis\",\n      cluster: \"vis\",\n      value: 13,\n    },\n  ],\n  edges: [\n    {\n      source: \"10\",\n      target: \"10\",\n      sourceWeight: 61,\n      targetWeight: 61,\n    },\n    {\n      source: \"11\",\n      target: \"11\",\n      sourceWeight: 39,\n      targetWeight: 39,\n    },\n    {\n      source: \"3\",\n      target: \"3\",\n      sourceWeight: 30,\n      targetWeight: 30,\n    },\n    {\n      source: \"19\",\n      target: \"19\",\n      sourceWeight: 26,\n      targetWeight: 26,\n    },\n    {\n      source: \"13\",\n      target: \"13\",\n      sourceWeight: 23,\n      targetWeight: 23,\n    },\n    {\n      source: \"9\",\n      target: \"9\",\n      sourceWeight: 22,\n      targetWeight: 22,\n    },\n    {\n      source: \"12\",\n      target: \"12\",\n      sourceWeight: 19,\n      targetWeight: 19,\n    },\n    {\n      source: \"28\",\n      target: \"19\",\n      sourceWeight: 34,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"4\",\n      sourceWeight: 16,\n      targetWeight: 16,\n    },\n    {\n      source: \"11\",\n      target: \"10\",\n      sourceWeight: 32,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"28\",\n      sourceWeight: 14,\n      targetWeight: 14,\n    },\n    {\n      source: \"18\",\n      target: \"18\",\n      sourceWeight: 12,\n      targetWeight: 12,\n    },\n    {\n      source: \"26\",\n      target: \"26\",\n      sourceWeight: 11,\n      targetWeight: 11,\n    },\n    {\n      source: \"28\",\n      target: \"13\",\n      sourceWeight: 20,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      sourceWeight: 17,\n      targetWeight: 2,\n    },\n    {\n      source: \"19\",\n      target: \"13\",\n      sourceWeight: 17,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"17\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"6\",\n      target: \"6\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"19\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"5\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"21\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 4,\n    },\n    {\n      source: \"25\",\n      target: \"19\",\n      sourceWeight: 10,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"0\",\n      sourceWeight: 5,\n      targetWeight: 5,\n    },\n    {\n      source: \"3\",\n      target: \"13\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"19\",\n      sourceWeight: 5,\n      targetWeight: 4,\n    },\n    {\n      source: \"19\",\n      target: \"12\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"22\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"24\",\n      target: \"24\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"26\",\n      target: \"3\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"16\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"16\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"10\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"22\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"20\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"1\",\n      target: \"26\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"12\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"7\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"3\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"7\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 2,\n    },\n    {\n      source: \"22\",\n      target: \"16\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"21\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"23\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"29\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"28\",\n      target: \"17\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"15\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"27\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"14\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"18\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 1,\n    },\n    {\n      source: \"25\",\n      target: \"26\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"9\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"12\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"6\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"21\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"29\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"23\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"17\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"12\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"20\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"6\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"6\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-arc-diagram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"mds\", mds);\nconst colors = [\n  \"rgb(91, 143, 249)\",\n  \"rgb(90, 216, 166)\",\n  \"rgb(93, 112, 146)\",\n  \"rgb(246, 189, 22)\",\n  \"rgb(232, 104, 74)\",\n  \"rgb(109, 200, 236)\",\n  \"rgb(146, 112, 202)\",\n  \"rgb(255, 157, 77)\",\n  \"rgb(38, 154, 153)\",\n  \"rgb(227, 137, 163)\",\n];\n\nfunction scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n  const outLength = outRange[1] - outRange[0];\n  const dataLength = dataRange[1] - dataRange[0];\n  nodes.forEach(function (n) {\n    n[propName] =\n      ((n[refPropName] - dataRange[0]) * outLength) / dataLength + outRange[0];\n  });\n}\n\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  linkCenter: true,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"edge-tooltip\",\n        formatText: function formatText(model) {\n          const text = `source: ${model.sourceName}<br/> target: ${model.targetName}`;\n          return text;\n        },\n      },\n    ],\n  },\n  defaultNode: {\n    style: {\n      opacity: 0.8,\n      lineWidth: 1,\n      stroke: \"#999\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n    style: {\n      opacity: 0.6,\n      lineAppendWidth: 3,\n    },\n  },\n});\nconst { edges } = data;\nconst { nodes } = data;\nconst nodeMap = new Map();\nconst clusterMap = new Map();\nlet clusterId = 0;\nconst n = nodes.length;\nconst horiPadding = 10;\nconst begin = [horiPadding, height * 0.7];\nconst end = [width - horiPadding, height * 0.7];\nconst xLength = end[0] - begin[0];\nconst yLength = end[1] - begin[1];\nconst xSep = xLength / n;\nconst ySep = yLength / n;\nnodes.forEach(function (node, i) {\n  node.x = begin[0] + i * xSep;\n  node.y = begin[1] + i * ySep;\n  nodeMap.set(node.id, node);\n\n  if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n    clusterMap.set(node.cluster, clusterId);\n    clusterId++;\n  }\n\n  const id = clusterMap.get(node.cluster);\n\n  if (node.style) {\n    node.style.fill = colors[id % colors.length];\n  } else {\n    node.style = {\n      fill: colors[id % colors.length],\n    };\n  }\n\n  node.label = node.name;\n  node.labelCfg = {\n    position: \"bottom\",\n    offset: 5,\n    style: {\n      rotate: Math.PI / 2,\n      textAlign: \"start\",\n    },\n  };\n});\nedges.forEach((edge) => {\n  edge.type = \"arc\";\n  const source = nodeMap.get(edge.source);\n  const target = nodeMap.get(edge.target);\n  const endsSepStep = (target.x - source.x) / xSep;\n  const sign = endsSepStep < 0 ? -1 : 1;\n  const curveOffset = sign * 10 * Math.ceil(Math.abs(endsSepStep));\n  edge.curveOffset = curveOffset;\n  edge.color = source.style.fill;\n  edge.sourceName = source.name;\n  edge.targetName = target.name;\n});\nlet maxValue = -9999;\nlet minValue = 9999;\nnodes.forEach(function (k) {\n  if (maxValue < k.value) maxValue = k.value;\n  if (minValue > k.value) minValue = k.value;\n});\nconst sizeRange = [3, 25];\nconst sizeDataRange = [minValue, maxValue];\nscaleNodeProp(nodes, \"size\", \"value\", sizeDataRange, sizeRange);\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", circular);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"circular\",\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-combo-force/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-combo-force/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport comboforce from \"@antv/f6/dist/extends/layout/comboForceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"comboforce\", comboforce);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 50,\n  minZoom: 0.00000001,\n  layout: {\n    type: \"comboforce\",\n    nodeSpacing: (d) => {\n      if (d.id == \"0\") return 100;\n      return 10;\n    },\n  },\n  defaultNode: {\n    size: 15,\n    color: \"#5B8FF9\",\n    style: {\n      lineWidth: 2,\n      fill: \"#C6E5FF\",\n    },\n  },\n  defaultEdge: {\n    size: 2,\n    color: \"#e2e2e2\",\n  },\n  modes: {\n    default: [\"drag-combo\", \"drag-node\", \"drag-canvas\", \"zoom-canvas\"],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-concentric/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"HIRA\",\n      altered: 0,\n      rank: 148,\n      cited: 53,\n      uniprotdesc:\n        \"Cooperates with ASF1A to promote replication-independentchromatin assembly. Required for the periodic repression ofhistone gene transcription during the cell cycle. Required for theformation of senescence-associated heterochromatin foci (SAHF) andefficient senescence-associated cell cycle exit.\",\n      isseed: false,\n      uniprot: \"P54198\",\n      isvalid: true,\n      importance: 3,\n      ox: 539.5,\n      oy: 641.7372431003224,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SERPINE1\",\n      altered: 0,\n      rank: 5,\n      cited: 7063,\n      uniprotdesc:\n        \"Serine protease inhibitor. This inhibitor acts as 'bait'for tissue plasminogen activator, urokinase, protein C andmatriptase-3/TMPRSS7. Its rapid interaction with PLAT may functionas a major control point in the regulation of fibrinolysis.\",\n      isseed: false,\n      uniprot: \"P05121\",\n      isvalid: true,\n      importance: 3,\n      ox: 670.4301869950953,\n      oy: 229.70989985711336,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FAS\",\n      altered: 0,\n      rank: 38,\n      cited: 1011,\n      uniprotdesc:\n        \"Receptor for TNFSF6/FASLG. The adapter molecule FADDrecruits caspase-8 to the activated receptor. The resulting death-inducing signaling complex (DISC) performs caspase-8 proteolyticactivation which initiates the subsequent cascade of caspases(aspartate-specific cysteine proteases) mediating apoptosis. FAS-mediated apoptosis may have a role in the induction of peripheraltolerance, in the antigen-stimulated suicide of mature T-cells, orboth. The secreted isoforms 2 to 6 block apoptosis (in vitro).\",\n      isseed: false,\n      uniprot: \"P25445\",\n      isvalid: true,\n      importance: 3,\n      ox: 771.3915110914829,\n      oy: 613.8066148172879,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"H1F0\",\n      altered: 0,\n      rank: 179,\n      cited: 8,\n      uniprotdesc:\n        \"Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structures. The H1F0 histonesare found in cells that are in terminal stages of differentiationor that have low rates of cell division.\",\n      isseed: false,\n      uniprot: \"P07305\",\n      isvalid: true,\n      importance: 3,\n      ox: 396.564243092928,\n      oy: 545.1295331255458,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2\",\n      altered: 0,\n      rank: 42,\n      cited: 859,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase which is required forcheckpoint-mediated cell cycle arrest, activation of DNA repairand apoptosis in response to the presence of DNA double-strandbreaks. May also negatively regulate cell cycle progression duringunperturbed cell cycles. Following activation, phosphorylatesnumerous effectors preferentially at the consensus sequence [L-X-R-X-X-S/T]. Regulates cell cycle checkpoint arrest throughphosphorylation of CDC25A, CDC25B and CDC25C, inhibiting theiractivity. Inhibition of CDC25 phosphatase activity leads toincreased inhibitory tyrosine phosphorylation of CDK-cyclincomplexes and blocks cell cycle progression. May alsophosphorylate NEK6 which is involved in G2/M cell cycle arrest.Regulates DNA repair through phosphorylation of BRCA2, enhancingthe association of RAD51 with chromatin which promotes DNA repairby homologous recombination. Also stimulates the transcription ofgenes involved in DNA repair (including BRCA2) through thephosphorylation and activation of the transcription factor FOXM1.Regulates apoptosis through the phosphorylation of p53/TP53, MDM4and PML. Phosphorylation of p53/TP53 at 'Ser-20' by CHEK2 mayalleviate inhibition by MDM2, leading to accumulation of activep53/TP53. Phosphorylation of MDM4 may also reduce degradation ofp53/TP53. Also controls the transcription of pro-apoptotic genesthrough phosphorylation of the transcription factor E2F1. Tumorsuppressor, it may also have a DNA damage-independent function inmitotic spindle assembly by phosphorylating BRCA1. Its absence maybe a cause of the chromosomal instability observed in some cancercells. \",\n      isseed: false,\n      uniprot: \"O96017\",\n      isvalid: true,\n      importance: 3,\n      ox: 665.61605725324,\n      oy: 327.88536532731405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"COL18A1\",\n      altered: 0,\n      rank: 157,\n      cited: 30,\n      uniprotdesc:\n        \"COLA18A probably plays a major role in determining theretinal structure as well as in the closure of the neural tube.Endostatin potently inhibits endothelial cellproliferation and angiogenesis. May inhibit angiogenesis bybinding to the heparan sulfate proteoglycans involved in growthfactor signaling.\",\n      isseed: false,\n      uniprot: \"P39060\",\n      isvalid: true,\n      importance: 3,\n      ox: 315.495548442639,\n      oy: 356.3503242429216,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP\",\n      altered: 0,\n      rank: 24,\n      cited: 2442,\n      uniprotdesc:\n        \"Acetylates histones, giving a specific tag fortranscriptional activation. Also acetylates non-histone proteins,like NCOA3 and FOXO1. Binds specifically to phosphorylated CREBand enhances its transcriptional activity toward cAMP-responsivegenes. Acts as a coactivator of ALX1 in the presence of EP300.Acts as a circadian transcriptional coactivator which enhances theactivity of the circadian transcriptional activators: NPAS2-ARNTL/BMAL1 and CLOCK-ARNTL/BMAL1 heterodimers.\",\n      isseed: false,\n      uniprot: \"Q92793\",\n      isvalid: true,\n      importance: 3,\n      ox: 468.2392322240752,\n      oy: 311.08612174318614,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FDXR\",\n      altered: 0,\n      rank: 147,\n      cited: 54,\n      uniprotdesc:\n        \"Serves as the first electron transfer protein in all themitochondrial P450 systems. Including cholesterol side chaincleavage in all steroidogenic tissues, steroid 11-betahydroxylation in the adrenal cortex, 25-OH-vitamin D3-24hydroxylation in the kidney, and sterol C-27 hydroxylation in theliver.\",\n      isseed: false,\n      uniprot: \"P22570\",\n      isvalid: true,\n      importance: 3,\n      ox: 614.0116881932149,\n      oy: 209.57981996234878,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SMYD2\",\n      altered: 0,\n      rank: 175,\n      cited: 12,\n      uniprotdesc:\n        \"Protein-lysine N-methyltransferase that methylates bothhistones and non-histone proteins, including p53/TP53 and RB1.Specifically methylates histone H3 'Lys-4' (H3K4me) anddimethylates histone H3 'Lys-36' (H3K36me2). Shows even highermethyltransferase activity on p53/TP53. Monomethylates 'Lys-370'of p53/TP53, leading to decreased DNA-binding activity andsubsequent transcriptional regulation activity of p53/TP53.Monomethylates RB1 at 'Lys-860'. \",\n      isseed: false,\n      uniprot: \"Q9NRG4\",\n      isvalid: true,\n      importance: 3,\n      ox: 799.3458853307084,\n      oy: 560.8271840491047,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR\",\n      altered: 0,\n      rank: 52,\n      cited: 628,\n      uniprotdesc:\n        \"Serine/threonine protein kinase which activatescheckpoint signaling upon genotoxic stresses such as ionizingradiation (IR), ultraviolet light (UV), or DNA replicationstalling, thereby acting as a DNA damage sensor. Recognizes thesubstrate consensus sequence [ST]-Q. Phosphorylates BRCA1, CHEK1,MCM2, RAD17, RPA2, SMC1 and p53/TP53, which collectively inhibitDNA replication and mitosis and promote DNA repair, recombinationand apoptosis. Phosphorylates 'Ser-139' of histone variantH2AX/H2AFX at sites of DNA damage, thereby regulating DNA damageresponse mechanism. Required for FANCD2 ubiquitination. Criticalfor maintenance of fragile site stability and efficient regulationof centrosome duplication. \",\n      isseed: false,\n      uniprot: \"Q13535\",\n      isvalid: true,\n      importance: 3,\n      ox: 696.7065384003552,\n      oy: 570.6754072575451,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HGF\",\n      altered: 0,\n      rank: 4,\n      cited: 7554,\n      uniprotdesc:\n        \"Potent mitogen for mature parenchymal hepatocyte cells,seems to be a hepatotrophic factor, and acts as a growth factorfor a broad spectrum of tissues and cell types. Activating ligandfor the receptor tyrosine kinase MET by binding to it andpromoting its dimerization. \",\n      isseed: false,\n      uniprot: \"P14210\",\n      isvalid: true,\n      importance: 3,\n      ox: 732.163947642761,\n      oy: 659.0776363377252,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM\",\n      altered: 0,\n      rank: 25,\n      cited: 2298,\n      uniprotdesc:\n        \"Serine/threonine protein kinase which activatescheckpoint signaling upon double strand breaks (DSBs), apoptosisand genotoxic stresses such as ionizing ultraviolet A light (UVA),thereby acting as a DNA damage sensor. Recognizes the substrateconsensus sequence [ST]-Q. Phosphorylates 'Ser-139' of histonevariant H2AX/H2AFX at double strand breaks (DSBs), therebyregulating DNA damage response mechanism. Also plays a role inpre-B cell allelic exclusion, a process leading to expression of asingle immunoglobulin heavy chain allele to enforce clonality andmonospecific recognition by the B-cell antigen receptor (BCR)expressed on individual B-lymphocytes. After the introduction ofDNA breaks by the RAG complex on one immunoglobulin allele, actsby mediating a repositioning of the second allele topericentromeric heterochromatin, preventing accessibility to theRAG complex and recombination of the second allele. Also involvedin signal transduction and cell cycle control. May function as atumor suppressor. Necessary for activation of ABL1 and SAPK.Phosphorylates DYRK2, CHEK2, p53/TP53, FANCD2, NFKBIA, BRCA1,CTIP, nibrin (NBN), TERF1, RAD9 and DCLRE1C. May play a role invesicle and/or protein transport. Could play a role in T-celldevelopment, gonad and neurological function. Plays a role inreplication-dependent histone mRNA degradation. Binds DNA ends.Phosphorylation of DYRK2 in nucleus in response to genotoxicstress prevents its MDM2-mediated ubiquitination and subsequentproteasome degradation. Phosphorylates ATF2 which stimulates itsfunction in DNA damage response. \",\n      isseed: false,\n      uniprot: \"Q13315\",\n      isvalid: true,\n      importance: 3,\n      ox: 723.6214512404813,\n      oy: 517.2928623066505,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP63\",\n      altered: 0,\n      rank: 37,\n      cited: 1171,\n      uniprotdesc:\n        \"Acts as a sequence specific DNA binding transcriptionalactivator or repressor. The isoforms contain a varying set oftransactivation and auto-regulating transactivation inhibitingdomains thus showing an isoform specific activity. Isoform 2activates RIPK4 transcription. May be required in conjunction withTP73/p73 for initiation of p53/TP53 dependent apoptosis inresponse to genotoxic insults and the presence of activatedoncogenes. Involved in Notch signaling by probably inducing JAG1and JAG2. Plays a role in the regulation of epithelialmorphogenesis. The ratio of DeltaN-type and TA*-type isoforms maygovern the maintenance of epithelial stem cell compartments andregulate the initiation of epithelial stratification from theundifferentiated embryonal ectoderm. Required for limb formationfrom the apical ectodermal ridge. Activates transcription of thep21 promoter. \",\n      isseed: false,\n      uniprot: \"Q9H3D4\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 495.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GPX1\",\n      altered: 0,\n      rank: 13,\n      cited: 3644,\n      uniprotdesc:\n        \"Protects the hemoglobin in erythrocytes from oxidativebreakdown.\",\n      isseed: false,\n      uniprot: \"P07203\",\n      isvalid: true,\n      importance: 3,\n      ox: 412.4474306913114,\n      oy: 244.4618875964815,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TRIAP1\",\n      altered: 0,\n      rank: 183,\n      cited: 7,\n      uniprotdesc:\n        \"Involved in the modulation of the mitochondrialapoptotic pathway by ensuring the accumulation of cardiolipin (CL)in mitochondrial membranes. In vitro, the TRIAP1:PRELID1 complexmediates the transfer of phosphatidic acid (PA) between liposomesand probably functions as a PA transporter across themitochondrion intermembrane space to provide PA for CL synthesisin the inner membrane. Mediates cell survival by inhibitingactivation of caspase-9 which prevents induction of apoptosis.\",\n      isseed: false,\n      uniprot: \"O43715\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 202.751489857487,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1E\",\n      altered: 0,\n      rank: 167,\n      cited: 19,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P10412\",\n      isvalid: true,\n      importance: 3,\n      ox: 509.931522689569,\n      oy: 636.667218490667,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1D\",\n      altered: 0,\n      rank: 184,\n      cited: 6,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16402\",\n      isvalid: true,\n      importance: 3,\n      ox: 385.3785487595187,\n      oy: 517.2928623066505,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1C\",\n      altered: 0,\n      rank: 174,\n      cited: 13,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16403\",\n      isvalid: true,\n      importance: 3,\n      ox: 379.058170659647,\n      oy: 487.9662051382201,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1B\",\n      altered: 0,\n      rank: 96,\n      cited: 209,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"P16401\",\n      isvalid: true,\n      importance: 3,\n      ox: 381.59546915616875,\n      oy: 428.2362230943135,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIST1H1A\",\n      altered: 0,\n      rank: 173,\n      cited: 13,\n      uniprotdesc:\n        \"Histone H1 protein binds to linker DNA betweennucleosomes forming the macromolecular structure known as thechromatin fiber. Histones H1 are necessary for the condensation ofnucleosome chains into higher-order structured fibers. Acts alsoas a regulator of individual gene transcription through chromatinremodeling, nucleosome spacing and DNA methylation (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"Q02539\",\n      isvalid: true,\n      importance: 3,\n      ox: 443.3839427467599,\n      oy: 327.88536532731405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53\",\n      altered: 0,\n      rank: 0,\n      cited: 24824,\n      uniprotdesc:\n        \"Acts as a tumor suppressor in many tumor types; inducesgrowth arrest or apoptosis depending on the physiologicalcircumstances and cell type. Involved in cell cycle regulation asa trans-activator that acts to negatively regulate cell divisionby controlling a set of genes required for this process. One ofthe activated genes is an inhibitor of cyclin-dependent kinases.Apoptosis induction seems to be mediated either by stimulation ofBAX and FAS antigen expression, or by repression of Bcl-2expression. In cooperation with mitochondrial PPIF is involved inactivating oxidative stress-induced necrosis; the function islargely independent of transcription. Induces the transcription oflong intergenic non-coding RNA p21 (lincRNA-p21) and lincRNA-Mkln1. LincRNA-p21 participates in TP53-dependent transcriptionalrepression leading to apoptosis and seem to have to effect oncell-cycle regulation. Implicated in Notch signaling cross-over.Prevents CDK7 kinase activity when associated to CAK complex inresponse to DNA damage, thus stopping cell cycle progression.Isoform 2 enhances the transactivation activity of isoform 1 fromsome but not all TP53-inducible promoters. Isoform 4 suppressestransactivation activity and impairs growth suppression mediatedby isoform 1. Isoform 7 inhibits isoform 1-mediated apoptosis.\",\n      isseed: true,\n      uniprot: \"P04637\",\n      isvalid: true,\n      importance: 4,\n      ox: 554.5,\n      oy: 465.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GADD45A\",\n      altered: 0,\n      rank: 98,\n      cited: 198,\n      uniprotdesc:\n        \"In T-cells, functions as a regulator of p38 MAPKs byinhibiting p88 phosphorylation and activity (By similarity). Mightaffect PCNA interaction with some CDK (cell division proteinkinase) complexes; stimulates DNA excision repair in vitro andinhibits entry of cells into S phase. \",\n      isseed: false,\n      uniprot: \"P24522\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 375.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML\",\n      altered: 0,\n      rank: 35,\n      cited: 1300,\n      uniprotdesc:\n        \"Functions via its association with PML-nuclear bodies(PML-NBs) in a wide range of important cellular processes,including tumor suppression, transcriptional regulation,apoptosis, senescence, DNA damage response, and viral defensemechanisms. Acts as the scaffold of PML-NBs allowing otherproteins to shuttle in and out, a process which is regulated bySUMO-mediated modifications and interactions. Isoform PML-4 has amultifaceted role in the regulation of apoptosis and growthsuppression: activates RB1 and inhibits AKT1 via interactions withPP1 and PP2A phosphatases respectively, negatively affects thePI3K pathway by inhibiting MTOR and activating PTEN, andpositively regulates p53/TP53 by acting at different levels (bypromoting its acetylation and phosphorylation and by inhibitingits MDM2-dependent degradation). Isoform PML-4 also: acts as atranscriptional repressor of TBX2 during cellular senescence andthe repression is dependent on a functional RBL2/E2F4 repressorcomplex, regulates double-strand break repair in gamma-irradiation-induced DNA damage responses via its interaction withWRN, acts as a negative regulator of telomerase by interactingwith TERT, and regulates PER2 nuclear localization and circadianfunction. Isoform PML-6 inhibits specifically the activity of thetetrameric form of PKM. The nuclear isoforms (isoform PML-1,isoform PML-2, isoform PML-3, isoform PML-4 and isoform PML-5) inconcert with SATB1 are involved in local chromatin-loop remodelingand gene expression regulation at the MHC-I locus. Isoform PML-2is required for efficient IFN-gamma induced MHC II genetranscription via regulation of CIITA. Cytoplasmic PML is involvedin the regulation of the TGF-beta signaling pathway. PML alsoregulates transcription activity of ELF4 and can act as animportant mediator for TNF-alpha- and IFN-alpha-mediatedinhibition of endothelial cell network formation and migration.Exhibits antiviral activity against both DNA and RNAviruses. The antiviral activity can involve one or severalisoform(s) and can be enhanced by the permanent PML-NB-associatedprotein DAXX or by the recruitment of p53/TP53 within thesestructures. Isoform PML-4 restricts varicella zoster virus (VZV)via sequestration of virion capsids in PML-NBs thereby preventingtheir nuclear egress and inhibiting formation of infectious virusparticles. The sumoylated isoform PML-4 restricts rabies virus byinhibiting viral mRNA and protein synthesis. The cytoplasmicisoform PML-14 can restrict herpes simplex virus-1 (HHV-1)replication by sequestering the viral E3 ubiquitin-protein ligaseICP0 in the cytoplasm. Isoform PML-6 shows restriction activitytowards human cytomegalovirus (HCMV) and influenza A virus strainsPR8(H1N1) and ST364(H3N2). Sumoylated isoform PML-4 and isoformPML-12 show antiviral activity against encephalomyocarditis virus(EMCV) by promoting nuclear sequestration of viral polymerase(P3D-POL) within PML NBs. Isoform PML-3 exhibits antiviralactivity against poliovirus by inducing apoptosis in infectedcells through the recruitment and the activation of p53/TP53 inthe PML-NBs. Isoform PML-3 represses human foamy virus (HFV)transcription by complexing the HFV transactivator, bel1/tas,preventing its binding to viral DNA. PML may positively regulateinfectious hepatitis C viral (HCV) production and isoform PML-2may enhance adenovirus transcription.\",\n      isseed: false,\n      uniprot: \"P29590\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 555.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1\",\n      altered: 0,\n      rank: 36,\n      cited: 1235,\n      uniprotdesc:\n        \"Ubiquitin-like protein that can be covalently attachedto proteins as a monomer or a lysine-linked polymer. Covalentattachment via an isopeptide bond to its substrates requires prioractivation by the E1 complex SAE1-SAE2 and linkage to the E2enzyme UBE2I, and can be promoted by E3 ligases such as PIAS1-4,RANBP2 or CBX4. This post-translational modification on lysineresidues of proteins plays a crucial role in a number of cellularprocesses such as nuclear transport, DNA replication and repair,mitosis and signal transduction. Involved for instance intargeting RANGAP1 to the nuclear pore complex protein RANBP2.Polymeric SUMO1 chains are also susceptible to polyubiquitinationwhich functions as a signal for proteasomal degradation ofmodified proteins. May also regulate a network of genes involvedin palate development. \",\n      isseed: false,\n      uniprot: \"P63165\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 288.62556472004735,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA\",\n      altered: 0,\n      rank: 146,\n      cited: 55,\n      uniprotdesc:\n        \"PP2A is the major phosphatase for microtubule-associatedproteins (MAPs). PP2A can modulate the activity of phosphorylase Bkinase casein kinase 2, mitogen-stimulated S6 kinase, and MAP-2kinase. Cooperates with SGOL2 to protect centromeric cohesin fromseparase-mediated cleavage in oocytes specifically during meiosisI (By similarity). Can dephosphorylate SV40 large T antigen andp53/TP53. Activates RAF1 by dephosphorylating it at 'Ser-259'.\",\n      isseed: false,\n      uniprot: \"P67775\",\n      isvalid: true,\n      importance: 3,\n      ox: 727.4045308438311,\n      oy: 428.2362230943131,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB\",\n      altered: 0,\n      rank: 185,\n      cited: 6,\n      uniprotdesc:\n        \"PP2A can modulate the activity of phosphorylase B kinasecasein kinase 2, mitogen-stimulated S6 kinase, and MAP-2 kinase.\",\n      isseed: false,\n      uniprot: \"P62714\",\n      isvalid: true,\n      importance: 3,\n      ox: 584.3919246562758,\n      oy: 291.16974245431265,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1\",\n      altered: 0,\n      rank: 78,\n      cited: 330,\n      uniprotdesc:\n        \"Catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Regulates lipid synthesis byphosphorylating and inactivating lipid metabolic enzymes such asACACA, ACACB, GYS1, HMGCR and LIPE; regulates fatty acid andcholesterol synthesis by phosphorylating acetyl-CoA carboxylase(ACACA and ACACB) and hormone-sensitive lipase (LIPE) enzymes,respectively. Regulates insulin-signaling and glycolysis byphosphorylating IRS1, PFKFB2 and PFKFB3. AMPK stimulates glucoseuptake in muscle by increasing the translocation of the glucosetransporter SLC2A4/GLUT4 to the plasma membrane, possibly bymediating phosphorylation of TBC1D4/AS160. Regulates transcriptionand chromatin structure by phosphorylating transcriptionregulators involved in energy metabolism such as CRTC2/TORC2,FOXO3, histone H2B, HDAC5, MEF2C, MLXIPL/ChREBP, EP300, HNF4A,p53/TP53, SREBF1, SREBF2 and PPARGC1A. Acts as a key regulator ofglucose homeostasis in liver by phosphorylating CRTC2/TORC2,leading to CRTC2/TORC2 sequestration in the cytoplasm. In responseto stress, phosphorylates 'Ser-36' of histone H2B (H2BS36ph),leading to promote transcription. Acts as a key regulator of cellgrowth and proliferation by phosphorylating TSC2, RPTOR andATG1/ULK1: in response to nutrient limitation, negativelyregulates the mTORC1 complex by phosphorylating RPTOR component ofthe mTORC1 complex and by phosphorylating and activating TSC2. Inresponse to nutrient limitation, promotes autophagy byphosphorylating and activating ATG1/ULK1. AMPK also acts as aregulator of circadian rhythm by mediating phosphorylation ofCRY1, leading to destabilize it. May regulate the Wnt signalingpathway by phosphorylating CTNNB1, leading to stabilize it. Alsohas tau-protein kinase activity: in response to amyloid beta A4protein (APP) exposure, activated by CAMKK2, leading tophosphorylation of MAPT/TAU; however the relevance of such dataremains unclear in vivo. Also phosphorylates CFTR, EEF2K, KLC1,NOS3 and SLC12A1. \",\n      isseed: false,\n      uniprot: \"Q13131\",\n      isvalid: true,\n      importance: 3,\n      ox: 731.2150654362375,\n      oy: 457.9932361520795,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2\",\n      altered: 0,\n      rank: 29,\n      cited: 2074,\n      uniprotdesc:\n        \"Catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Regulates lipid synthesis byphosphorylating and inactivating lipid metabolic enzymes such asACACA, ACACB, GYS1, HMGCR and LIPE; regulates fatty acid andcholesterol synthesis by phosphorylating acetyl-CoA carboxylase(ACACA and ACACB) and hormone-sensitive lipase (LIPE) enzymes,respectively. Regulates insulin-signaling and glycolysis byphosphorylating IRS1, PFKFB2 and PFKFB3. AMPK stimulates glucoseuptake in muscle by increasing the translocation of the glucosetransporter SLC2A4/GLUT4 to the plasma membrane, possibly bymediating phosphorylation of TBC1D4/AS160. Regulates transcriptionand chromatin structure by phosphorylating transcriptionregulators involved in energy metabolism such as CRTC2/TORC2,FOXO3, histone H2B, HDAC5, MEF2C, MLXIPL/ChREBP, EP300, HNF4A,p53/TP53, SREBF1, SREBF2 and PPARGC1A. Acts as a key regulator ofglucose homeostasis in liver by phosphorylating CRTC2/TORC2,leading to CRTC2/TORC2 sequestration in the cytoplasm. In responseto stress, phosphorylates 'Ser-36' of histone H2B (H2BS36ph),leading to promote transcription. Acts as a key regulator of cellgrowth and proliferation by phosphorylating TSC2, RPTOR andATG1/ULK1: in response to nutrient limitation, negativelyregulates the mTORC1 complex by phosphorylating RPTOR component ofthe mTORC1 complex and by phosphorylating and activating TSC2. Inresponse to nutrient limitation, promotes autophagy byphosphorylating and activating ATG1/ULK1. AMPK also acts as aregulator of circadian rhythm by mediating phosphorylation ofCRY1, leading to destabilize it. May regulate the Wnt signalingpathway by phosphorylating CTNNB1, leading to stabilize it. Alsophosphorylates CFTR, EEF2K, KLC1, NOS3 and SLC12A1.\",\n      isseed: false,\n      uniprot: \"P54646\",\n      isvalid: true,\n      importance: 3,\n      ox: 613.4239130642807,\n      oy: 298.7290842958664,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11\",\n      altered: 0,\n      rank: 127,\n      cited: 81,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK11 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors. Accordingly, p38 MAPKsphosphorylate a broad range of proteins and it has been estimatedthat they may have approximately 200 to 300 substrates each.MAPK11 functions are mostly redundant with those of MAPK14. Someof the targets are downstream kinases which are activated throughphosphorylation and further phosphorylate additional targets.RPS6KA5/MSK1 and RPS6KA4/MSK2 can directly phosphorylate andactivate transcription factors such as CREB1, ATF1, the NF-kappa-Bisoform RELA/NFKB3, STAT1 and STAT3, but can also phosphorylatehistone H3 and the nucleosomal protein HMGN1. RPS6KA5/MSK1 andRPS6KA4/MSK2 play important roles in the rapid induction ofimmediate-early genes in response to stress or mitogenic stimuli,either by inducing chromatin remodeling or by recruiting thetranscription machinery. On the other hand, two other kinasetargets, MAPKAPK2/MK2 and MAPKAPK3/MK3, participate in the controlof gene expression mostly at the post-transcriptional level, byphosphorylating ZFP36 (tristetraprolin) and ELAVL1, and byregulating EEF2K, which is important for the elongation of mRNAduring translation. MKNK1/MNK1 and MKNK2/MNK2, two other kinasesactivated by p38 MAPKs, regulate protein synthesis byphosphorylating the initiation factor EIF4E2. In the cytoplasm,the p38 MAPK pathway is an important regulator of proteinturnover. For example, CFLAR is an inhibitor of TNF-inducedapoptosis whose proteasome-mediated degradation is regulated byp38 MAPK phosphorylation. Ectodomain shedding of transmembraneproteins is regulated by p38 MAPKs as well. In response toinflammatory stimuli, p38 MAPKs phosphorylate the membrane-associated metalloprotease ADAM17. Such phosphorylation isrequired for ADAM17-mediated ectodomain shedding of TGF-alphafamily ligands, which results in the activation of EGFR signalingand cell proliferation. Additional examples of p38 MAPK substratesare the FGFR1. FGFR1 can be translocated from the extracellularspace into the cytosol and nucleus of target cells, and regulatesprocesses such as rRNA synthesis and cell growth. FGFR1translocation requires p38 MAPK activation. In the nucleus, manytranscription factors are phosphorylated and activated by p38MAPKs in response to different stimuli. Classical examples includeATF1, ATF2, ATF6, ELK1, PTPRH, DDIT3, TP53/p53 and MEF2C andMEF2A. The p38 MAPKs are emerging as important modulators of geneexpression by regulating chromatin modifiers and remodelers. Thepromoters of several genes involved in the inflammatory response,such as IL6, IL8 and IL12B, display a p38 MAPK-dependentenrichment of histone H3 phosphorylation on 'Ser-10' (H3S10ph) inLPS-stimulated myeloid cells. This phosphorylation enhances theaccessibility of the cryptic NF-kappa-B-binding sites markingpromoters for increased NF-kappa-B recruitment.\",\n      isseed: false,\n      uniprot: \"Q15759\",\n      isvalid: true,\n      importance: 3,\n      ox: 640.7607677759248,\n      oy: 311.0861217431862,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP73\",\n      altered: 0,\n      rank: 116,\n      cited: 124,\n      uniprotdesc:\n        \"Participates in the apoptotic response to DNA damage.Isoforms containing the transactivation domain are pro-apoptotic,isoforms lacking the domain are anti-apoptotic and block thefunction of p53 and transactivating p73 isoforms. May be a tumorsuppressor protein. \",\n      isseed: false,\n      uniprot: \"O15350\",\n      isvalid: true,\n      importance: 3,\n      ox: 554.5,\n      oy: 435.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CCNB1\",\n      altered: 0,\n      rank: 62,\n      cited: 491,\n      uniprotdesc:\n        \"Essential for the control of the cell cycle at the G2/M(mitosis) transition. \",\n      isseed: false,\n      uniprot: \"P14635\",\n      isvalid: true,\n      importance: 3,\n      ox: 455.45477593090067,\n      oy: 612.0421763339963,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12\",\n      altered: 0,\n      rank: 131,\n      cited: 79,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK12 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors such as ELK1 and ATF2.Accordingly, p38 MAPKs phosphorylate a broad range of proteins andit has been estimated that they may have approximately 200 to 300substrates each. Some of the targets are downstream kinases suchas MAPKAPK2, which are activated through phosphorylation andfurther phosphorylate additional targets. Plays a role in myoblastdifferentiation and also in the down-regulation of cyclin D1 inresponse to hypoxia in adrenal cells suggesting MAPK12 may inhibitcell proliferation while promoting differentiation. PhosphorylatesDLG1. Following osmotic shock, MAPK12 in the cell nucleusincreases its association with nuclear DLG1, thereby causingdissociation of DLG1-SFPQ complexes. This function is independentof its catalytic activity and could affect mRNA processing and/orgene transcription to aid cell adaptation to osmolarity changes inthe environment. Regulates UV-induced checkpoint signaling andrepair of UV-induced DNA damage and G2 arrest after gamma-radiation exposure. MAPK12 is involved in the regulation of SLC2A1expression and basal glucose uptake in L6 myotubes; and negativelyregulates SLC2A4 expression and contraction-mediated glucoseuptake in adult skeletal muscle. C-Jun (JUN) phosphorylation isstimulated by MAPK14 and inhibited by MAPK12, leading to adistinct AP-1 regulation. MAPK12 is required for the normalkinetochore localization of PLK1, prevents chromosomal instabilityand supports mitotic cell viability. MAPK12-signaling is alsopositively regulating the expansion of transient amplifyingmyogenic precursor cells during muscle growth and regeneration.\",\n      isseed: false,\n      uniprot: \"P53778\",\n      isvalid: true,\n      importance: 3,\n      ox: 569.5000000000001,\n      oy: 641.7372431003224,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13\",\n      altered: 0,\n      rank: 126,\n      cited: 88,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK13 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors such as ELK1 and ATF2.Accordingly, p38 MAPKs phosphorylate a broad range of proteins andit has been estimated that they may have approximately 200 to 300substrates each. MAPK13 is one of the less studied p38 MAPKisoforms. Some of the targets are downstream kinases such asMAPKAPK2, which are activated through phosphorylation and furtherphosphorylate additional targets. Plays a role in the regulationof protein translation by phosphorylating and inactivating EEF2K.Involved in cytoskeletal remodeling through phosphorylation ofMAPT and STMN1. Mediates UV irradiation induced up-regulation ofthe gene expression of CXCL14. Plays an important role in theregulation of epidermal keratinocyte differentiation, apoptosisand skin tumor development. Phosphorylates the transcriptionalactivator MYB in response to stress which leads to rapid MYBdegradation via a proteasome-dependent pathway. MAPK13 alsophosphorylates and down-regulates PRKD1 during regulation ofinsulin secretion in pancreatic beta cells.\",\n      isseed: false,\n      uniprot: \"O15264\",\n      isvalid: true,\n      importance: 3,\n      ox: 687.2747400718758,\n      oy: 348.6435313966404,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14\",\n      altered: 0,\n      rank: 23,\n      cited: 2528,\n      uniprotdesc:\n        \"Serine/threonine kinase which acts as an essentialcomponent of the MAP kinase signal transduction pathway. MAPK14 isone of the four p38 MAPKs which play an important role in thecascades of cellular responses evoked by extracellular stimulisuch as proinflammatory cytokines or physical stress leading todirect activation of transcription factors. Accordingly, p38 MAPKsphosphorylate a broad range of proteins and it has been estimatedthat they may have approximately 200 to 300 substrates each. Someof the targets are downstream kinases which are activated throughphosphorylation and further phosphorylate additional targets.RPS6KA5/MSK1 and RPS6KA4/MSK2 can directly phosphorylate andactivate transcription factors such as CREB1, ATF1, the NF-kappa-Bisoform RELA/NFKB3, STAT1 and STAT3, but can also phosphorylatehistone H3 and the nucleosomal protein HMGN1. RPS6KA5/MSK1 andRPS6KA4/MSK2 play important roles in the rapid induction ofimmediate-early genes in response to stress or mitogenic stimuli,either by inducing chromatin remodeling or by recruiting thetranscription machinery. On the other hand, two other kinasetargets, MAPKAPK2/MK2 and MAPKAPK3/MK3, participate in the controlof gene expression mostly at the post-transcriptional level, byphosphorylating ZFP36 (tristetraprolin) and ELAVL1, and byregulating EEF2K, which is important for the elongation of mRNAduring translation. MKNK1/MNK1 and MKNK2/MNK2, two other kinasesactivated by p38 MAPKs, regulate protein synthesis byphosphorylating the initiation factor EIF4E2. MAPK14 interactsalso with casein kinase II, leading to its activation throughautophosphorylation and further phosphorylation of TP53/p53. Inthe cytoplasm, the p38 MAPK pathway is an important regulator ofprotein turnover. For example, CFLAR is an inhibitor of TNF-induced apoptosis whose proteasome-mediated degradation isregulated by p38 MAPK phosphorylation. In a similar way, MAPK14phosphorylates the ubiquitin ligase SIAH2, regulating its activitytowards EGLN3. MAPK14 may also inhibit the lysosomal degradationpathway of autophagy by interfering with the intracellulartrafficking of the transmembrane protein ATG9. Another function ofMAPK14 is to regulate the endocytosis of membrane receptors bydifferent mechanisms that impinge on the small GTPase RAB5A. Inaddition, clathrin-mediated EGFR internalization induced byinflammatory cytokines and UV irradiation depends on MAPK14-mediated phosphorylation of EGFR itself as well as of RAB5Aeffectors. Ectodomain shedding of transmembrane proteins isregulated by p38 MAPKs as well. In response to inflammatorystimuli, p38 MAPKs phosphorylate the membrane-associatedmetalloprotease ADAM17. Such phosphorylation is required forADAM17-mediated ectodomain shedding of TGF-alpha family ligands,which results in the activation of EGFR signaling and cellproliferation. Another p38 MAPK substrate is FGFR1. FGFR1 can betranslocated from the extracellular space into the cytosol andnucleus of target cells, and regulates processes such as rRNAsynthesis and cell growth. FGFR1 translocation requires p38 MAPKactivation. In the nucleus, many transcription factors arephosphorylated and activated by p38 MAPKs in response to differentstimuli. Classical examples include ATF1, ATF2, ATF6, ELK1, PTPRH,DDIT3, TP53/p53 and MEF2C and MEF2A. The p38 MAPKs are emerging asimportant modulators of gene expression by regulating chromatinmodifiers and remodelers. The promoters of several genes involvedin the inflammatory response, such as IL6, IL8 and IL12B, displaya p38 MAPK-dependent enrichment of histone H3 phosphorylation on'Ser-10' (H3S10ph) in LPS-stimulated myeloid cells. Thisphosphorylation enhances the accessibility of the cryptic NF-kappa-B-binding sites marking promoters for increased NF-kappa-Brecruitment. Phosphorylates CDC25B and CDC25C which is requiredfor binding to 14-3-3 proteins and leads to initiation of a G2delay after ultraviolet radiation. Phosphorylates TIAR followingDNA damage, releasing TIAR from GADD45A mRNA and preventing mRNAdegradation. The p38 MAPKs may also have kinase-independent roles,which are thought to be due to the binding to targets in theabsence of phosphorylation. Protein O-Glc-N-acylation catalyzed bythe OGT is regulated by MAPK14, and, although OGT does not seem tobe phosphorylated by MAPK14, their interaction increases uponMAPK14 activation induced by glucose deprivation. This interactionmay regulate OGT activity by recruiting it to specific targetssuch as neurofilament H, stimulating its O-Glc-N-acylation.Required in mid-fetal development for the growth of embryo-derivedblood vessels in the labyrinth layer of the placenta. Also playsan essential role in developmental and stress-inducederythropoiesis, through regulation of EPO gene expression. IsoformMXI2 activation is stimulated by mitogens and oxidative stress andonly poorly phosphorylates ELK1 and ATF2. Isoform EXIP may play arole in the early onset of apoptosis. Phosphorylates S100A9 at'Thr-113'. \",\n      isseed: false,\n      uniprot: \"Q16539\",\n      isvalid: true,\n      importance: 3,\n      ox: 705.1137353610045,\n      oy: 372.7634453076487,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2\",\n      altered: 0,\n      rank: 189,\n      cited: 4,\n      uniprotdesc:\n        \"Non-catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Beta non-catalytic subunit acts as ascaffold on which the AMPK complex assembles, via its C-terminusthat bridges alpha (PRKAA1 or PRKAA2) and gamma subunits (PRKAG1,PRKAG2 or PRKAG3).\",\n      isseed: false,\n      uniprot: \"O43741\",\n      isvalid: true,\n      importance: 3,\n      ox: 718.6198477055347,\n      oy: 399.5512210521357,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1\",\n      altered: 0,\n      rank: 73,\n      cited: 368,\n      uniprotdesc:\n        \"Non-catalytic subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Beta non-catalytic subunit acts as ascaffold on which the AMPK complex assembles, via its C-terminusthat bridges alpha (PRKAA1 or PRKAA2) and gamma subunits (PRKAG1,PRKAG2 or PRKAG3).\",\n      isseed: false,\n      uniprot: \"Q9Y478\",\n      isvalid: true,\n      importance: 3,\n      ox: 476.5577136594006,\n      oy: 420.49999999999994,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300\",\n      altered: 0,\n      rank: 19,\n      cited: 2835,\n      uniprotdesc:\n        \"Functions as histone acetyltransferase and regulatestranscription via chromatin remodeling. Acetylates all four corehistones in nucleosomes. Histone acetylation gives an epigenetictag for transcriptional activation. Mediates cAMP-gene regulationby binding specifically to phosphorylated CREB protein. Mediatesacetylation of histone H3 at 'Lys-122' (H3K122ac), a modificationthat localizes at the surface of the histone octamer andstimulates transcription, possibly by promoting nucleosomeinstability. Mediates acetylation of histone H3 at 'Lys-27'(H3K27ac). Also functions as acetyltransferase for nonhistonetargets. Acetylates 'Lys-131' of ALX1 and acts as its coactivatorin the presence of CREBBP. Acetylates SIRT2 and is proposed toindirectly increase the transcriptional activity of TP53 throughacetylation and subsequent attenuation of SIRT2 deacetylasefunction. Acetylates HDAC1 leading to its inactivation andmodulation of transcription. Acts as a TFAP2A-mediatedtranscriptional coactivator in presence of CITED2. Plays a role asa coactivator of NEUROD1-dependent transcription of the secretinand p21 genes and controls terminal differentiation of cells inthe intestinal epithelium. Promotes cardiac myocyte enlargement.Can also mediate transcriptional repression. Binds to and may beinvolved in the transforming capacity of the adenovirus E1Aprotein. In case of HIV-1 infection, it is recruited by the viralprotein Tat. Regulates Tat's transactivating activity and may helpinducing chromatin remodeling of proviral genes. Acetylates FOXO1and enhances its transcriptional activity. Acetylates BCL6 wichdisrupts its ability to recruit histone deacetylases and hindersits transcriptional repressor activity. Participates in CLOCK orNPAS2-regulated rhythmic gene transcription; exhibits a circadianassociation with CLOCK or NPAS2, correlating with increase inPER1/2 mRNA and histone H3 acetylation on the PER1/2 promoter.Acetylates MTA1 at 'Lys-626' which is essential for itstranscriptional coactivator activity (PubMed:10733570,PubMed:11430825, PubMed:11701890, PubMed:12402037,PubMed:12586840, PubMed:12929931, PubMed:14645221,PubMed:15186775, PubMed:15890677, PubMed:16617102,PubMed:16762839, PubMed:18722353, PubMed:18995842,PubMed:23415232, PubMed:23911289, PubMed:23934153,PubMed:8945521). Acetylates XBP1 isoform 2; acetylation increasesprotein stability of XBP1 isoform 2 and enhances itstranscriptional activity (By similarity).\",\n      isseed: false,\n      uniprot: \"Q09472\",\n      isvalid: true,\n      importance: 3,\n      ox: 476.5577136594005,\n      oy: 510.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1\",\n      altered: 0,\n      rank: 125,\n      cited: 89,\n      uniprotdesc:\n        \"Associated to surface IgM-receptor; may be involved insignal transduction. Involved in regulation of the catalyticactivity of the phosphatases PP2A, PP4 and PP6 by protecting theirpartially folded catalytic subunits from degradativepolyubiquitination until they associate with regulatory subunits.\",\n      isseed: false,\n      uniprot: \"P78318\",\n      isvalid: true,\n      importance: 3,\n      ox: 729.941829340353,\n      oy: 487.96620513822,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11\",\n      altered: 0,\n      rank: 188,\n      cited: 5,\n      uniprotdesc:\n        \"Substrate recognition component of a SCF (SKP1-CUL1-F-box protein) E3 ubiquitin-protein ligase complex which mediatesthe ubiquitination and subsequent proteasomal degradation oftarget proteins, such as DTL/CDT2, BCL6 and PRDM1/BLIMP1. TheSCF(FBXO11) complex mediates ubiquitination and degradation ofBCL6, thereby playing a role in the germinal center B-cellsterminal differentiation toward memory B-cells and plasma cells.The SCF(FBXO11) complex also mediates ubiquitination anddegradation of DTL, an important step for the regulation of TGF-beta signaling, cell migration and the timing of the cell-cycleprogression and exit. Binds to and neddylates phosphorylatedp53/TP53, inhibiting its transcriptional activity. SCF(FBXO11)does not seem to direct ubiquitination of p53/TP53.\",\n      isseed: false,\n      uniprot: \"Q86XK2\",\n      isvalid: true,\n      importance: 3,\n      ox: 481.64519932573637,\n      oy: 626.6730246484053,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1\",\n      altered: 0,\n      rank: 54,\n      cited: 617,\n      uniprotdesc:\n        \"DNA binding proteins that associates with chromatin andhas the ability to bend DNA. Binds preferentially single-strandedDNA. Involved in V(D)J recombination by acting as a cofactor ofthe RAG complex. Acts by stimulating cleavage and RAG proteinbinding at the 23 bp spacer of conserved recombination signalsequences (RSS). Heparin-binding protein that has a role in theextension of neurite-type cytoplasmic processes in developingcells (By similarity). \",\n      isseed: false,\n      uniprot: \"P09429\",\n      isvalid: true,\n      importance: 3,\n      ox: 712.435756907072,\n      oy: 545.1295331255459,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NEDD8\",\n      altered: 0,\n      rank: 205,\n      cited: 236,\n      uniprotdesc:\n        \"Ubiquitin-like protein which plays an important role incell cycle control and embryogenesis. Covalent attachment to itssubstrates requires prior activation by the E1 complex UBE1C-APPBP1 and linkage to the E2 enzyme UBE2M. Attachment of NEDD8 tocullins activates their associated E3 ubiquitin ligase activity,and thus promotes polyubiquitination and proteasomal degradationof cyclins and other regulatory proteins.\",\n      isseed: false,\n      uniprot: \"Q15843\",\n      isvalid: true,\n      importance: 2,\n      ox: 432.1137033013474,\n      oy: 593.195576415127,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ASF1A\",\n      altered: 0,\n      rank: 161,\n      cited: 27,\n      uniprotdesc:\n        \"Histone chaperone that facilitates histone depositionand histone exchange and removal during nucleosome assembly anddisassembly. Cooperates with chromatin assembly factor 1 (CAF-1)to promote replication-dependent chromatin assembly and with HIRAto promote replication-independent chromatin assembly. Requiredfor the formation of senescence-associated heterochromatin foci(SAHF) and efficient senescence-associated cell cycle exit.\",\n      isseed: false,\n      uniprot: \"Q9Y294\",\n      isvalid: true,\n      importance: 3,\n      ox: 412.29346159964496,\n      oy: 570.6754072575452,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT8\",\n      altered: 0,\n      rank: 199,\n      cited: 0,\n      uniprotdesc:\n        \"Histone acetyltransferase which may be involved intranscriptional activation. May influence the function of ATM. Aspart of the MSL complex it is involved in acetylation ofnucleosomal histone H4 producing specifically H4K16ac. As part ofthe NSL complex it may be involved in acetylation of nucleosomalhistone H4 on several lysine residues. That activity is lessspecific than the one of the MSL complex. Can also acetylateTP53/p53 at 'Lys-120'. \",\n      isseed: false,\n      uniprot: \"Q9H7Z6\",\n      isvalid: true,\n      importance: 3,\n      ox: 452.21985952208775,\n      oy: 707.5238675129558,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT\",\n      altered: 0,\n      rank: 43,\n      cited: 858,\n      uniprotdesc:\n        \"May play a role in microtubule-mediated transport orvesicle function.\",\n      isseed: false,\n      uniprot: \"P42858\",\n      isvalid: true,\n      importance: 3,\n      ox: 632.4422863405995,\n      oy: 510.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN\",\n      altered: 0,\n      rank: 53,\n      cited: 621,\n      uniprotdesc:\n        \"Multifunctional enzyme that has both magnesium and ATP-dependent DNA-helicase activity and 3'->5' exonuclease activitytowards double-stranded DNA with a 5'-overhang. Has no nucleaseactivity towards single-stranded DNA or blunt-ended double-stranded DNA. Binds preferentially to DNA substrates containingalternate secondary structures, such as replication forks andHolliday junctions. May play an important role in the dissociationof joint DNA molecules that can arise as products of homologousrecombination, at stalled replication forks or during DNA repair.Alleviates stalling of DNA polymerases at the site of DNA lesions.Important for genomic integrity. Plays a role in the formation ofDNA replication focal centers; stably associates with focielements generating binding sites for RP-A (By similarity). Playsa role in double-strand break repair after gamma-irradiation.\",\n      isseed: false,\n      uniprot: \"Q14191\",\n      isvalid: true,\n      importance: 3,\n      ox: 676.8862966986526,\n      oy: 593.1955764151269,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDKN1A\",\n      altered: 0,\n      rank: 9,\n      cited: 4784,\n      uniprotdesc:\n        \"May be the important intermediate by which p53/TP53mediates its role as an inhibitor of cellular proliferation inresponse to DNA damage. Binds to and inhibits cyclin-dependentkinase activity, preventing phosphorylation of critical cyclin-dependent kinase substrates and blocking cell cycle progression.Functions in the nuclear localization and assembly of cyclin D-CDK4 complex and promotes its kinase activity towards RB1. Athigher stoichiometric ratios, inhibits the kinase activity of thecyclin D-CDK4 complex. \",\n      isseed: false,\n      uniprot: \"P38936\",\n      isvalid: true,\n      importance: 3,\n      ox: 653.5452240690994,\n      oy: 612.0421763339962,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PLK3\",\n      altered: 0,\n      rank: 115,\n      cited: 130,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved in cell cycleregulation, response to stress and Golgi disassembly. Polo-likekinases act by binding and phosphorylating proteins are thatalready phosphorylated on a specific motif recognized by the POLObox domains. Phosphorylates ATF2, BCL2L1, CDC25A, CDC25C, CHEK2,HIF1A, JUN, p53/TP53, p73/TP73, PTEN, TOP2A and VRK1. Involved incell cycle regulation: required for entry into S phase andcytokinesis. Phosphorylates BCL2L1, leading to regulate the G2checkpoint and progression to cytokinesis during mitosis. Plays akey role in response to stress: rapidly activated upon stressstimulation, such as ionizing radiation, reactive oxygen species(ROS), hyperosmotic stress, UV irradiation and hypoxia. Involvedin DNA damage response and G1/S transition checkpoint byphosphorylating CDC25A, p53/TP53 and p73/TP73. Phosphorylatesp53/TP53 in response to reactive oxygen species (ROS), therebypromoting p53/TP53-mediated apoptosis. Phosphorylates CHEK2 inresponse to DNA damage, promoting the G2/M transition checkpoint.Phosphorylates the transcription factor p73/TP73 in response toDNA damage, leading to inhibit p73/TP73-mediated transcriptionalactivation and pro-apoptotic functions. Phosphorylates HIF1A andJUN is response to hypoxia. Phosphorylates ATF2 followinghyperosmotic stress in corneal epithelium. Also involved in Golgidisassembly during the cell cycle: part of a MEK1/MAP2K1-dependentpathway that induces Golgi fragmentation during mitosis bymediating phosphorylation of VRK1. May participate in endomitoticcell cycle, a form of mitosis in which both karyokinesis andcytokinesis are interrupted and is a hallmark of megakaryocytedifferentiation, via its interaction with CIB1.\",\n      isseed: false,\n      uniprot: \"Q9H4B4\",\n      isvalid: true,\n      importance: 3,\n      ox: 377.7849345637625,\n      oy: 457.9932361520796,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DYRK1A\",\n      altered: 0,\n      rank: 128,\n      cited: 81,\n      uniprotdesc:\n        \"May play a role in a signaling pathway regulatingnuclear functions of cell proliferation. Modulates alternativesplicing by phosphorylating the splice factor SRSF6 (Bysimilarity). Phosphorylates serine, threonine and tyrosineresidues in its sequence and in exogenous substrates such as CRY2,FOXO1, SRSF6 and SIRT1. Exhibits a sugstrate preference forproline at position P+1 and arginine at position P-3.\",\n      isseed: false,\n      uniprot: \"Q13627\",\n      isvalid: true,\n      importance: 3,\n      ox: 584.451073117784,\n      oy: 204.46415418337006,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1\",\n      altered: 0,\n      rank: 177,\n      cited: 11,\n      uniprotdesc:\n        \"AMP/ATP-binding subunit of AMP-activated protein kinase(AMPK), an energy sensor protein kinase that plays a key role inregulating cellular energy metabolism. In response to reduction ofintracellular ATP levels, AMPK activates energy-producing pathwaysand inhibits energy-consuming processes: inhibits protein,carbohydrate and lipid biosynthesis, as well as cell growth andproliferation. AMPK acts via direct phosphorylation of metabolicenzymes, and by longer-term effects via phosphorylation oftranscription regulators. Also acts as a regulator of cellularpolarity by remodeling the actin cytoskeleton; probably byindirectly activating myosin. Gamma non-catalytic subunit mediatesbinding to AMP, ADP and ATP, leading to activate or inhibit AMPK:AMP-binding results in allosteric activation of alpha catalyticsubunit (PRKAA1 or PRKAA2) both by inducing phosphorylation andpreventing dephosphorylation of catalytic subunits. ADP alsostimulates phosphorylation, without stimulating alreadyphosphorylated catalytic subunit. ATP promotes dephosphorylationof catalytic subunit, rendering the AMPK enzyme inactive.\",\n      isseed: false,\n      uniprot: \"P54619\",\n      isvalid: true,\n      importance: 3,\n      ox: 627.3548006742639,\n      oy: 626.6730246484052,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP6\",\n      altered: 0,\n      rank: 104,\n      cited: 161,\n      uniprotdesc:\n        \"Involved in the activation cascade of caspasesresponsible for apoptosis execution. Cleaves poly(ADP-ribose)polymerase in vitro, as well as lamins. Overexpression promotesprogrammed cell death.\",\n      isseed: false,\n      uniprot: \"P55212\",\n      isvalid: true,\n      importance: 3,\n      ox: 642.7964774016498,\n      oy: 218.03179666759164,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAX\",\n      altered: 0,\n      rank: 158,\n      cited: 28,\n      uniprotdesc:\n        \"Transcription regulator. Forms a sequence-specific DNA-binding protein complex with MYC or MAD which recognizes the coresequence 5'-CAC[GA]TG-3'. The MYC:MAX complex is a transcriptionalactivator, whereas the MAD:MAX complex is a repressor. May represstranscription via the recruitment of a chromatin remodelingcomplex containing H3 'Lys-9' histone methyltransferase activity.\",\n      isseed: false,\n      uniprot: \"P61244\",\n      isvalid: true,\n      importance: 3,\n      ox: 524.5489268822162,\n      oy: 204.46415418337,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FOS\",\n      altered: 0,\n      rank: 61,\n      cited: 496,\n      uniprotdesc:\n        \"Nuclear phosphoprotein which forms a tight but non-covalently linked complex with the JUN/AP-1 transcription factor.In the heterodimer, FOS and JUN/AP-1 basic regions each seems tointeract with symmetrical DNA half sites. On TGF-beta activation,forms a multimeric SMAD3/SMAD4/JUN/FOS complex at the AP1/SMAD-binding site to regulate TGF-beta-mediated signaling. Has acritical function in regulating the development of cells destinedto form and maintain the skeleton. It is thought to have animportant role in signal transduction, cell proliferation anddifferentiation. In growing cells, activates phospholipidsynthesis, possibly by activating CDS1 and PI4K2A. This activityrequires Tyr-dephosphorylation and association with theendoplasmic reticulum. \",\n      isseed: false,\n      uniprot: \"P01100\",\n      isvalid: true,\n      importance: 3,\n      ox: 696.5525693086885,\n      oy: 244.46188759648143,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53I3\",\n      altered: 0,\n      rank: 152,\n      cited: 39,\n      uniprotdesc:\n        \"May be involved in the generation of reactive oxygenspecies (ROS). Has low NADPH-dependent beta-naphthoquinonereductase activity, with a preference for 1,2-beta-naphthoquinoneover 1,4-beta-naphthoquinone. Has low NADPH-dependent diaminereductase activity (in vitro). \",\n      isseed: false,\n      uniprot: \"Q53FA7\",\n      isvalid: true,\n      importance: 3,\n      ox: 720.823079139937,\n      oy: 262.0954451652557,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT1\",\n      altered: 0,\n      rank: 206,\n      cited: 189,\n      uniprotdesc:\n        \"Arginine methyltransferase that methylates (mono andasymmetric dimethylation) the guanidino nitrogens of arginylresidues present in proteins such as ESR1, histone H2, H3 and H4,PIAS1, HNRNPA1, HNRNPD, NFATC2IP, SUPT5H, TAF15 and EWS.Constitutes the main enzyme that mediates monomethylation andasymmetric dimethylation of histone H4 'Arg-4' (H4R3me1 andH4R3me2a, respectively), a specific tag for epigenetictranscriptional activation. Together with dimethylated PIAS1,represses STAT1 transcriptional activity, in the late phase ofinterferon gamma (IFN-gamma) signaling. May be involved in theregulation of TAF15 transcriptional activity, act as an activatorof estrogen receptor (ER)-mediated transactivation, play a keyrole in neurite outgrowth and act as a negative regulator ofmegakaryocytic differentiation, by modulating p38 MAPK pathway.Methylates FOXO1 and retains it in the nucleus increasing itstranscriptional activity. \",\n      isseed: false,\n      uniprot: \"Q99873\",\n      isvalid: true,\n      importance: 2,\n      ox: 742.9253132762292,\n      oy: 282.3806921734763,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PCBP4\",\n      altered: 0,\n      rank: 165,\n      cited: 20,\n      uniprotdesc:\n        \"Single-stranded nucleic acid binding protein that bindspreferentially to oligo dC. \",\n      isseed: false,\n      uniprot: \"P57723\",\n      isvalid: true,\n      importance: 3,\n      ox: 762.5711352945876,\n      oy: 305.05317940410396,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT5\",\n      altered: 0,\n      rank: 118,\n      cited: 111,\n      uniprotdesc:\n        \"Arginine methyltransferase that can both catalyze theformation of omega-N monomethylarginine (MMA) and symmetricaldimethylarginine (sDMA), with a preference for the formation ofMMA. Specifically mediates the symmetrical dimethylation ofarginine residues in the small nuclear ribonucleoproteins Sm D1(SNRPD1) and Sm D3 (SNRPD3); such methylation being required forthe assembly and biogenesis of snRNP core particles. MethylatesSUPT5H. Mono- and dimethylates arginine residues of myelin basicprotein (MBP) in vitro. Plays a role in the assembly of snRNP coreparticles. May play a role in cytokine-activated transductionpathways. Negatively regulates cyclin E1 promoter activity andcellular proliferation. May regulate the SUPT5H transcriptionalelongation properties. May be part of a pathway that is connectedto a chloride current, possibly through cytoskeletalrearrangement. Methylates histone H2A and H4 'Arg-3' during germcell development. Methylates histone H3 'Arg-8', which may represstranscription. Methylates the Piwi proteins (PIWIL1, PIWIL2 andPIWIL4), methylation of Piwi proteins being required for theinteraction with Tudor domain-containing proteins and subsequentlocalization to the meiotic nuage. Methylates RPS10. AttenuatesEGF signaling through the MAPK1/MAPK3 pathway acting at 2 levels.First, monomethylates EGFR; this enhances EGFR 'Tyr-1197'phosphorylation and PTPN6 recruitment, eventually leading toreduced SOS1 phosphorylation. Second, methylates RAF1 and probablyBRAF, hence destabilizing these 2 signaling proteins and reducingtheir catalytic activity. Required for induction of E-selectin andVCAM-1, on the endothelial cells surface at sites of inflammation.Methylates HOXA9. Methylates and regulates SRGAP2 which isinvolved in cell migration and differentiation. Acts as atranscriptional corepressor in CRY1-mediated repression of thecore circadian component PER1 by regulating the H4R3 dimethylationat the PER1 promoter. \",\n      isseed: false,\n      uniprot: \"O14744\",\n      isvalid: true,\n      importance: 3,\n      ox: 779.5044318605908,\n      oy: 329.8173363129873,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"E4F1\",\n      altered: 0,\n      rank: 150,\n      cited: 47,\n      uniprotdesc:\n        \"May function as a transcriptional repressor. May alsofunction as a ubiquitin ligase mediating ubiquitination ofchromatin-associated TP53. Functions in cell survival andproliferation through control of the cell cycle. Functions in thep53 and pRB tumor suppressor pathways and regulates the cyclinCCNA2 transcription.Identified as a cellular target of the adenoviraloncoprotein E1A, it is required for both transcriptionalactivation and repression of viral genes.\",\n      isseed: false,\n      uniprot: \"Q66K89\",\n      isvalid: true,\n      importance: 3,\n      ox: 793.504451557361,\n      oy: 356.35032424292166,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP1\",\n      altered: 0,\n      rank: 64,\n      cited: 473,\n      uniprotdesc:\n        \"Thiol protease that cleaves IL-1 beta between an Asp andan Ala, releasing the mature cytokine which is involved in avariety of inflammatory processes. Important for defense againstpathogens. Cleaves and activates sterol regulatory element bindingproteins (SREBPs). Can also promote apoptosis.\",\n      isseed: false,\n      uniprot: \"P29466\",\n      isvalid: true,\n      importance: 3,\n      ox: 804.3886827178802,\n      oy: 384.3062451192652,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCA\",\n      altered: 0,\n      rank: 84,\n      cited: 275,\n      uniprotdesc:\n        \"Calcium-activated, phospholipid- and diacylglycerol(DAG)-dependent serine/threonine-protein kinase that is involvedin positive and negative regulation of cell proliferation,apoptosis, differentiation, migration and adhesion, tumorigenesis,cardiac hypertrophy, angiogenesis, platelet function andinflammation, by directly phosphorylating targets such as RAF1,BCL2, CSPG4, TNNT2/CTNT, or activating signaling cascade involvingMAPK1/3 (ERK1/2) and RAP1GAP. Involved in cell proliferation andcell growth arrest by positive and negative regulation of the cellcycle. Can promote cell growth by phosphorylating and activatingRAF1, which mediates the activation of the MAPK/ERK signalingcascade, and/or by up-regulating CDKN1A, which facilitates activecyclin-dependent kinase (CDK) complex formation in glioma cells.In intestinal cells stimulated by the phorbol ester PMA, cantrigger a cell cycle arrest program which is associated with theaccumulation of the hyper-phosphorylated growth-suppressive formof RB1 and induction of the CDK inhibitors CDKN1A and CDKN1B.Exhibits anti-apoptotic function in glioma cells and protects themfrom apoptosis by suppressing the p53/TP53-mediated activation ofIGFBP3, and in leukemia cells mediates anti-apoptotic action byphosphorylating BCL2. During macrophage differentiation induced bymacrophage colony-stimulating factor (CSF1), is translocated tothe nucleus and is associated with macrophage development. Afterwounding, translocates from focal contacts to lamellipodia andparticipates in the modulation of desmosomal adhesion. Plays arole in cell motility by phosphorylating CSPG4, which inducesassociation of CSPG4 with extensive lamellipodia at the cellperiphery and polarization of the cell accompanied by increases incell motility. Is highly expressed in a number of cancer cellswhere it can act as a tumor promoter and is implicated inmalignant phenotypes of several tumors such as gliomas and breastcancers. Negatively regulates myocardial contractility andpositively regulates angiogenesis, platelet aggregation andthrombus formation in arteries. Mediates hypertrophic growth ofneonatal cardiomyocytes, in part through a MAPK1/3 (ERK1/2)-dependent signaling pathway, and upon PMA treatment, is requiredto induce cardiomyocyte hypertrophy up to heart failure and death,by increasing protein synthesis, protein-DNA ratio and cellsurface area. Regulates cardiomyocyte function by phosphorylatingcardiac troponin T (TNNT2/CTNT), which induces significantreduction in actomyosin ATPase activity, myofilament calciumsensitivity and myocardial contractility. In angiogenesis, isrequired for full endothelial cell migration, adhesion tovitronectin (VTN), and vascular endothelial growth factor A(VEGFA)-dependent regulation of kinase activation and vasculartube formation. Involved in the stabilization of VEGFA mRNA atpost-transcriptional level and mediates VEGFA-induced cellproliferation. In the regulation of calcium-induced plateletaggregation, mediates signals from the CD36/GP4 receptor forgranule release, and activates the integrin heterodimer ITGA2B-ITGB3 through the RAP1GAP pathway for adhesion. During response tolipopolysaccharides (LPS), may regulate selective LPS-inducedmacrophage functions involved in host defense and inflammation.But in some inflammatory responses, may negatively regulate NF-kappa-B-induced genes, through IL1A-dependent induction of NF-kappa-B inhibitor alpha (NFKBIA/IKBA). Upon stimulation with 12-O-tetradecanoylphorbol-13-acetate (TPA), phosphorylates EIF4G1,which modulates EIF4G1 binding to MKNK1 and may be involved in theregulation of EIF4E phosphorylation. Phosphorylates KIT, leadingto inhibition of KIT activity. Phosphorylates ATF2 which promotescooperation between ATF2 and JUN, activating transcription.\",\n      isseed: false,\n      uniprot: \"P17252\",\n      isvalid: true,\n      importance: 3,\n      ox: 812.0152327436849,\n      oy: 413.32065076032404,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK1\",\n      altered: 0,\n      rank: 27,\n      cited: 2149,\n      uniprotdesc:\n        \"Plays a key role in the control of the eukaryotic cellcycle by modulating the centrosome cycle as well as mitotic onset;promotes G2-M transition, and regulates G1 progress and G1-Stransition via association with multiple interphase cyclins.Required in higher cells for entry into S-phase and mitosis.Phosphorylates PARVA/actopaxin, APC, AMPH, APC, BARD1, Bcl-xL/BCL2L1, BRCA2, CALD1, CASP8, CDC7, CDC20, CDC25A, CDC25C,CC2D1A, CSNK2 proteins/CKII, FZR1/CDH1, CDK7, CEBPB, CHAMP1,DMD/dystrophin, EEF1 proteins/EF-1, EZH2, KIF11/EG5, EGFR, FANCG,FOS, GFAP, GOLGA2/GM130, GRASP1, UBE2A/hHR6A, HIST1H1proteins/histone H1, HMGA1, HIVEP3/KRC, LMNA, LMNB, LMNC, LBR,LATS1, MAP1B, MAP4, MARCKS, MCM2, MCM4, MKLP1, MYB, NEFH, NFIC,NPC/nuclear pore complex, PITPNM1/NIR2, NPM1, NCL, NUCKS1,NPM1/numatrin, ORC1, PRKAR2A, EEF1E1/p18, EIF3F/p47, p53/TP53,NONO/p54NRB, PAPOLA, PLEC/plectin, RB1, UL40/R2, RAB4A, RAP1GAP,RCC1, RPS6KB1/S6K1, KHDRBS1/SAM68, ESPL1, SKI, BIRC5/survivin,STIP1, TEX14, beta-tubulins, MAPT/TAU, NEDD1, VIM/vimentin, TK1,FOXO1, RUNX1/AML1, SIRT2 and RUNX2. CDK1/CDC2-cyclin-B controlspronuclear union in interphase fertilized eggs. Essential forearly stages of embryonic development. During G2 and earlymitosis, CDC25A/B/C-mediated dephosphorylation activatesCDK1/cyclin complexes which phosphorylate several substrates thattrigger at least centrosome separation, Golgi dynamics, nuclearenvelope breakdown and chromosome condensation. Once chromosomesare condensed and aligned at the metaphase plate, CDK1 activity isswitched off by WEE1- and PKMYT1-mediated phosphorylation to allowsister chromatid separation, chromosome decondensation,reformation of the nuclear envelope and cytokinesis. Inactivatedby PKR/EIF2AK2- and WEE1-mediated phosphorylation upon DNA damageto stop cell cycle and genome replication at the G2 checkpointthus facilitating DNA repair. Reactivated after successful DNArepair through WIP1-dependent signaling leading to CDC25A/B/C-mediated dephosphorylation and restoring cell cycle progression.In proliferating cells, CDK1-mediated FOXO1 phosphorylation at theG2-M phase represses FOXO1 interaction with 14-3-3 proteins andthereby promotes FOXO1 nuclear accumulation and transcriptionfactor activity, leading to cell death of postmitotic neurons. Thephosphorylation of beta-tubulins regulates microtubule dynamicsduring mitosis. NEDD1 phosphorylation promotes PLK1-mediated NEDD1phosphorylation and subsequent targeting of the gamma-tubulin ringcomplex (gTuRC) to the centrosome, an important step for spindleformation. In addition, CC2D1A phosphorylation regulates CC2D1Aspindle pole localization and association with SCC1/RAD21 andcentriole cohesion during mitosis. The phosphorylation of Bcl-xL/BCL2L1 after prolongated G2 arrest upon DNA damage triggersapoptosis. In contrast, CASP8 phosphorylation during mitosisprevents its activation by proteolysis and subsequent apoptosis.This phosphorylation occurs in cancer cell lines, as well as inprimary breast tissues and lymphocytes. EZH2 phosphorylationpromotes H3K27me3 maintenance and epigenetic gene silencing. CALD1phosphorylation promotes Schwann cell migration during peripheralnerve regeneration. \",\n      isseed: false,\n      uniprot: \"P06493\",\n      isvalid: true,\n      importance: 3,\n      ox: 816.2846778918833,\n      oy: 443.01529401675197,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK9\",\n      altered: 0,\n      rank: 66,\n      cited: 448,\n      uniprotdesc:\n        \"Protein kinase involved in the regulation oftranscription. Member of the cyclin-dependent kinase pair(CDK9/cyclin-T) complex, also called positive transcriptionelongation factor b (P-TEFb), which facilitates the transitionfrom abortive to productive elongation by phosphorylating the CTD(C-terminal domain) of the large subunit of RNA polymerase II(RNAP II) POLR2A, SUPT5H and RDBP. This complex is inactive whenin the 7SK snRNP complex form. Phosphorylates EP300, MYOD1,RPB1/POLR2A and AR, and the negative elongation factors DSIF andNELF. Regulates cytokine inducible transcription networks byfacilitating promoter recognition of target transcription factors(e.g. TNF-inducible RELA/p65 activation and IL-6-inducible STAT3signaling). Promotes RNA synthesis in genetic programs for cellgrowth, differentiation and viral pathogenesis. P-TEFb is alsoinvolved in cotranscriptional histone modification, mRNAprocessing and mRNA export. Modulates a complex network ofchromatin modifications including histone H2B monoubiquitination(H2Bub1), H3 lysine 4 trimethylation (H3K4me3) and H3K36me3;integrates phosphorylation during transcription with chromatinmodifications to control co-transcriptional histone mRNAprocessing. The CDK9/cyclin-K complex has also a kinase activitytowards CTD of RNAP II and can substitute for CDK9/cyclin-T P-TEFbin vitro. Replication stress response protein; the CDK9/cyclin-Kcomplex is required for genome integrity maintenance, by promotingcell cycle recovery from replication arrest and limiting single-stranded DNA amount in response to replication stress, thusreducing the breakdown of stalled replication forks and avoidingDNA damage. In addition, probable function in DNA repair ofisoform 2 via interaction with KU70/XRCC6. Promotes cardiacmyocyte enlargement. RPB1/POLR2A phosphorylation on 'Ser-2' in CTDactivates transcription. AR phosphorylation modulates ARtranscription factor promoter selectivity and cell growth. DSIFand NELF phosphorylation promotes transcription by inhibitingtheir negative effect. The phosphorylation of MYOD1 enhances itstranscriptional activity and thus promotes muscle differentiation.\",\n      isseed: false,\n      uniprot: \"P50750\",\n      isvalid: true,\n      importance: 3,\n      ox: 817.1413594156943,\n      oy: 473.0030598015976,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RB1\",\n      altered: 0,\n      rank: 15,\n      cited: 3201,\n      uniprotdesc:\n        \"Key regulator of entry into cell division that acts as atumor suppressor. Promotes G0-G1 transition when phosphorylated byCDK3/cyclin-C. Acts as a transcription repressor of E2F1 targetgenes. The underphosphorylated, active form of RB1 interacts withE2F1 and represses its transcription activity, leading to cellcycle arrest. Directly involved in heterochromatin formation bymaintaining overall chromatin structure and, in particular, thatof constitutive heterochromatin by stabilizing histonemethylation. Recruits and targets histone methyltransferasesSUV39H1, SUV420H1 and SUV420H2, leading to epigenetictranscriptional repression. Controls histone H4 'Lys-20'trimethylation. Inhibits the intrinsic kinase activity of TAF1.Mediates transcriptional repression by SMARCA4/BRG1 by recruitinga histone deacetylase (HDAC) complex to the c-FOS promoter. Inresting neurons, transcription of the c-FOS promoter is inhibitedby BRG1-dependent recruitment of a phospho-RB1-HDAC1 repressorcomplex. Upon calcium influx, RB1 is dephosphorylated bycalcineurin, which leads to release of the repressor complex (Bysimilarity). In case of viral infections, interactions with SV40large T antigen, HPV E7 protein or adenovirus E1A protein inducethe disassembly of RB1-E2F1 complex thereby disrupting RB1'sactivity. \",\n      isseed: false,\n      uniprot: \"P06400\",\n      isvalid: true,\n      importance: 3,\n      ox: 814.574109161329,\n      oy: 502.89301172747827,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK7\",\n      altered: 0,\n      rank: 72,\n      cited: 372,\n      uniprotdesc:\n        \"Serine/threonine kinase involved in cell cycle controland in RNA polymerase II-mediated RNA transcription. Cyclin-dependent kinases (CDKs) are activated by the binding to a cyclinand mediate the progression through the cell cycle. Each differentcomplex controls a specific transition between 2 subsequent phasesin the cell cycle. Required for both activation and complexformation of CDK1/cyclin-B during G2-M transition, and foractivation of CDK2/cyclins during G1-S transition (but not complexformation). CDK7 is the catalytic subunit of the CDK-activatingkinase (CAK) complex. Phosphorylates SPT5/SUPT5H, SF1/NR5A1,POLR2A, p53/TP53, CDK1, CDK2, CDK4, CDK6 and CDK11B/CDK11. CAKactivates the cyclin-associated kinases CDK1, CDK2, CDK4 and CDK6by threonine phosphorylation, thus regulating cell cycleprogression. CAK complexed to the core-TFIIH basal transcriptionfactor activates RNA polymerase II by serine phosphorylation ofthe repetitive C-terminal domain (CTD) of its large subunit(POLR2A), allowing its escape from the promoter and elongation ofthe transcripts. Phosphorylation of POLR2A in complex with DNApromotes transcription initiation by triggering dissociation fromDNA. Its expression and activity are constant throughout the cellcycle. Upon DNA damage, triggers p53/TP53 activation byphosphorylation, but is inactivated in turn by p53/TP53; thisfeedback loop may lead to an arrest of the cell cycle and of thetranscription, helping in cell recovery, or to apoptosis. Requiredfor DNA-bound peptides-mediated transcription and cellular growthinhibition. \",\n      isseed: false,\n      uniprot: \"P50613\",\n      isvalid: true,\n      importance: 3,\n      ox: 808.6163951619568,\n      oy: 532.2954885602501,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGA2\",\n      altered: 0,\n      rank: 82,\n      cited: 280,\n      uniprotdesc:\n        \"Functions as a transcriptional regulator. Functions incell cycle regulation through CCNA2. Plays an important role inchromosome condensation during the meiotic G2/M transition ofspermatocytes. \",\n      isseed: false,\n      uniprot: \"P52926\",\n      isvalid: true,\n      importance: 3,\n      ox: 390.3801522944653,\n      oy: 399.55122105213593,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK3\",\n      altered: 0,\n      rank: 112,\n      cited: 146,\n      uniprotdesc:\n        \"Serine/threonine kinase which is involved in theregulation of apoptosis, autophagy, transcription, translation andactin cytoskeleton reorganization. Involved in the regulation ofsmooth muscle contraction. Regulates both type I (caspase-dependent) apoptotic and type II (caspase-independent) autophagiccell deaths signal, depending on the cellular setting. Involved inregulation of starvation-induced autophagy. Regulates myosinphosphorylation in both smooth muscle and non-muscle cells. Insmooth muscle, regulates myosin either directly by phosphorylatingMYL12B and MYL9 or through inhibition of smooth muscle myosinphosphatase (SMPP1M) via phosphorylation of PPP1R12A; theinhibition of SMPP1M functions to enhance muscle responsiveness toCa(2+) and promote a contractile state. Phosphorylates MYL12B innon-muscle cells leading to reorganization of actin cytoskeleton.Isoform 2 can phosphorylate myosin, PPP1R12A and MYL12B.Overexpression leads to condensation of actin stress fibers intothick bundles. Involved in actin filament focal adhesion dynamics.The function in both reorganization of actin cytoskeleton andfocal adhesion dissolution is modulated by RhoD. Positivelyregulates canonical Wnt/beta-catenin signaling through interactionwith NLK and TCF7L2. Phosphorylates RPL13A on 'Ser-77' uponinterferon-gamma activation which is causing RPL13A release fromthe ribosome, RPL13A association with the GAIT complex and itssubsequent involvement in transcript-selective translationinhibition. Enhances transcription from AR-responsive promoters ina hormone- and kinase-dependent manner. Involved in regulation ofcell cycle progression and cell proliferation. May be a tumorsuppressor. \",\n      isseed: false,\n      uniprot: \"O43293\",\n      isvalid: true,\n      importance: 3,\n      ox: 786.8834349406518,\n      oy: 588.1161439097402,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGA1\",\n      altered: 0,\n      rank: 111,\n      cited: 147,\n      uniprotdesc:\n        \"HMG-I/Y bind preferentially to the minor groove of A+Trich regions in double-stranded DNA. It is suggested that theseproteins could function in nucleosome phasing and in the 3'-endprocessing of mRNA transcripts. They are also involved in thetranscription regulation of genes containing, or in closeproximity to A+T-rich regions.\",\n      isseed: false,\n      uniprot: \"P17096\",\n      isvalid: true,\n      importance: 3,\n      ox: 403.8862646389955,\n      oy: 372.7634453076488,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCD\",\n      altered: 0,\n      rank: 122,\n      cited: 90,\n      uniprotdesc:\n        \"Calcium-independent, phospholipid- and diacylglycerol(DAG)-dependent serine/threonine-protein kinase that playscontrasting roles in cell death and cell survival by functioningas a pro-apoptotic protein during DNA damage-induced apoptosis,but acting as an anti-apoptotic protein during cytokine receptor-initiated cell death, is involved in tumor suppression as well assurvival of several cancers, is required for oxygen radicalproduction by NADPH oxidase and acts as positive or negativeregulator in platelet functional responses. Negatively regulates Bcell proliferation and also has an important function in self-antigen induced B cell tolerance induction. Upon DNA damage,activates the promoter of the death-promoting transcription factorBCLAF1/Btf to trigger BCLAF1-mediated p53/TP53 gene transcriptionand apoptosis. In response to oxidative stress, interact with andactivate CHUK/IKKA in the nucleus, causing the phosphorylation ofp53/TP53. In the case of ER stress or DNA damage-inducedapoptosis, can form a complex with the tyrosine-protein kinaseABL1 which trigger apoptosis independently of p53/TP53. In cytosolcan trigger apoptosis by activating MAPK11 or MAPK14, inhibitingAKT1 and decreasing the level of X-linked inhibitor of apoptosisprotein (XIAP), whereas in nucleus induces apoptosis via theactivation of MAPK8 or MAPK9. Upon ionizing radiation treatment,is required for the activation of the apoptosis regulators BAX andBAK, which trigger the mitochondrial cell death pathway. Canphosphorylate MCL1 and target it for degradation which issufficient to trigger for BAX activation and apoptosis. Isrequired for the control of cell cycle progression both at G1/Sand G2/M phases. Mediates phorbol 12-myristate 13-acetate (PMA)-induced inhibition of cell cycle progression at G1/S phase by up-regulating the CDK inhibitor CDKN1A/p21 and inhibiting the cyclinCCNA2 promoter activity. In response to UV irradiation canphosphorylate CDK1, which is important for the G2/M DNA damagecheckpoint activation. Can protect glioma cells from the apoptosisinduced by TNFSF10/TRAIL, probably by inducing increasedphosphorylation and subsequent activation of AKT1. Is highlyexpressed in a number of cancer cells and promotes cell survivaland resistance against chemotherapeutic drugs by inducing cyclinD1 (CCND1) and hyperphosphorylation of RB1, and via several pro-survival pathways, including NF-kappa-B, AKT1 and MAPK1/3(ERK1/2). Can also act as tumor suppressor upon mitogenicstimulation with PMA or TPA. In N-formyl-methionyl-leucyl-phenylalanine (fMLP)-treated cells, is required for NCF1 (p47-phox) phosphorylation and activation of NADPH oxidase activity,and regulates TNF-elicited superoxide anion production inneutrophils, by direct phosphorylation and activation of NCF1 orindirectly through MAPK1/3 (ERK1/2) signaling pathways. May alsoplay a role in the regulation of NADPH oxidase activity ineosinophil after stimulation with IL5, leukotriene B4 or PMA. Incollagen-induced platelet aggregation, acts a negative regulatorof filopodia formation and actin polymerization by interactingwith and negatively regulating VASP phosphorylation. Downstream ofPAR1, PAR4 and CD36/GP4 receptors, regulates differentiallyplatelet dense granule secretion; acts as a positive regulator inPAR-mediated granule secretion, whereas it negatively regulatesCD36/GP4-mediated granule release. Phosphorylates MUC1 in the C-terminal and regulates the interaction between MUC1 and beta-catenin. The catalytic subunit phosphorylates 14-3-3 proteins(YWHAB, YWHAZ and YWHAH) in a sphingosine-dependent fashion (Bysimilarity). \",\n      isseed: false,\n      uniprot: \"Q05655\",\n      isvalid: true,\n      importance: 3,\n      ox: 753.0720747024197,\n      oy: 637.5636821949563,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"UBN1\",\n      altered: 0,\n      rank: 180,\n      cited: 8,\n      uniprotdesc:\n        \"Acts as a novel regulator of senescence. Involved in theformation of senescence-associated heterochromatin foci (SAHF),which represses expression of proliferation-promoting genes. Bindsto proliferation-promoting genes. May be required for replication-independent chromatin assembly. \",\n      isseed: false,\n      uniprot: \"Q9NPG3\",\n      isvalid: true,\n      importance: 3,\n      ox: 421.7252599281241,\n      oy: 348.6435313966405,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK5\",\n      altered: 0,\n      rank: 44,\n      cited: 837,\n      uniprotdesc:\n        \"Proline-directed serine/threonine-protein kinaseessential for neuronal cell cycle arrest and differentiation andmay be involved in apoptotic cell death in neuronal diseases bytriggering abortive cell cycle re-entry. Interacts with D1 and D3-type G1 cyclins. Phosphorylates SRC, NOS3, VIM/vimentin,p35/CDK5R1, MEF2A, SIPA1L1, SH3GLB1, PXN, PAK1, MCAM/MUC18, SEPT5,SYN1, DNM1, AMPH, SYNJ1, CDK16, RAC1, RHOA, CDC42, TONEBP/NFAT5,MAPT/TAU, MAP1B, histone H1, p53/TP53, HDAC1, APEX1, PTK2/FAK1,huntingtin/HTT, ATM, MAP2, NEFH and NEFM. Regulates severalneuronal development and physiological processes includingneuronal survival, migration and differentiation, axonal andneurite growth, synaptogenesis, oligodendrocyte differentiation,synaptic plasticity and neurotransmission, by phosphorylating keyproteins. Activated by interaction with CDK5R1 (p35) and CDK5R2(p39), especially in post-mitotic neurons, and promotes CDK5R1(p35) expression in an autostimulation loop. Phosphorylates manydownstream substrates such as Rho and Ras family small GTPases(e.g. PAK1, RAC1, RHOA, CDC42) or microtubule-binding proteins(e.g. MAPT/TAU, MAP2, MAP1B), and modulates actin dynamics toregulate neurite growth and/or spine morphogenesis. Phosphorylatesalso exocytosis associated proteins such as MCAM/MUC18, SEPT5,SYN1, and CDK16/PCTAIRE1 as well as endocytosis associatedproteins such as DNM1, AMPH and SYNJ1 at synaptic terminals. Inthe mature central nervous system (CNS), regulatesneurotransmitter movements by phosphorylating substratesassociated with neurotransmitter release and synapse plasticity;synaptic vesicle exocytosis, vesicles fusion with the presynapticmembrane, and endocytosis. Promotes cell survival by activatinganti-apoptotic proteins BCL2 and STAT3, and negatively regulatingof JNK3/MAPK10 activity. Phosphorylation of p53/TP53 in responseto genotoxic and oxidative stresses enhances its stabilization bypreventing ubiquitin ligase-mediated proteasomal degradation, andinduces transactivation of p53/TP53 target genes, thus regulatingapoptosis. Phosphorylation of p35/CDK5R1 enhances itsstabilization by preventing calpain-mediated proteolysis producingp25/CDK5R1 and avoiding ubiquitin ligase-mediated proteasomaldegradation. During aberrant cell-cycle activity and DNA damage,p25/CDK5 activity elicits cell-cycle activity and double-strandDNA breaks that precedes neuronal death by deregulating HDAC1. DNAdamage triggered phosphorylation of huntingtin/HTT in nuclei ofneurons protects neurons against polyglutamine expansion as wellas DNA damage mediated toxicity. Phosphorylation of PXN reducesits interaction with PTK2/FAK1 in matrix-cell focal adhesions(MCFA) during oligodendrocytes (OLs) differentiation. Negativeregulator of Wnt/beta-catenin signaling pathway. Activator of theGAIT (IFN-gamma-activated inhibitor of translation) pathway, whichsuppresses expression of a post-transcriptional regulon ofproinflammatory genes in myeloid cells; phosphorylates the linkerdomain of glutamyl-prolyl tRNA synthetase (EPRS) in a IFN-gamma-dependent manner, the initial event in assembly of the GAITcomplex. Phosphorylation of SH3GLB1 is required for autophagyinduction in starved neurons. Phosphorylation of TONEBP/NFAT5 inresponse to osmotic stress mediates its rapid nuclearlocalization. MEF2 is inactivated by phosphorylation in nucleus inresponse to neurotoxin, thus leading to neuronal apoptosis. APEX1AP-endodeoxyribonuclease is repressed by phosphorylation,resulting in accumulation of DNA damage and contributing toneuronal death. NOS3 phosphorylation down regulates NOS3-derivednitrite (NO) levels. SRC phosphorylation mediates its ubiquitin-dependent degradation and thus leads to cytoskeletalreorganization. May regulate endothelial cell migration andangiogenesis via the modulation of lamellipodia formation.Involved in dendritic spine morphogenesis by mediating the EFNA1-EPHA4 signaling. The complex p35/CDK5 participates in theregulation of the circadian clock by modulating the function ofCLOCK protein: phosphorylates CLOCK at 'Thr-451' and 'Thr-461' andregulates the transcriptional activity of the CLOCK-ARNTL/BMAL1heterodimer in association with altered stability and subcellulardistribution. \",\n      isseed: false,\n      uniprot: \"Q00535\",\n      isvalid: true,\n      importance: 3,\n      ox: 708.9396993235885,\n      oy: 678.0680099519911,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK2\",\n      altered: 0,\n      rank: 34,\n      cited: 1469,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved in the controlof the cell cycle; essential for meiosis, but dispensable formitosis. Phosphorylates CTNNB1, USP37, p53/TP53, NPM1, CDK7, RB1,BRCA2, MYC, NPAT, EZH2. Interacts with cyclins A, B1, B3, D, or E.Triggers duplication of centrosomes and DNA. Acts at the G1-Stransition to promote the E2F transcriptional program and theinitiation of DNA synthesis, and modulates G2 progression;controls the timing of entry into mitosis/meiosis by controllingthe subsequent activation of cyclin B/CDK1 by phosphorylation, andcoordinates the activation of cyclin B/CDK1 at the centrosome andin the nucleus. Crucial role in orchestrating a fine balancebetween cellular proliferation, cell death, and DNA repair inhuman embryonic stem cells (hESCs). Activity of CDK2 is maximalduring S phase and G2; activated by interaction with cyclin Eduring the early stages of DNA synthesis to permit G1-Stransition, and subsequently activated by cyclin A2 (cyclin A1 ingerm cells) during the late stages of DNA replication to drive thetransition from S phase to mitosis, the G2 phase. EZH2phosphorylation promotes H3K27me3 maintenance and epigenetic genesilencing. Phosphorylates CABLES1 (By similarity). Cyclin E/CDK2prevents oxidative stress-mediated Ras-induced senescence byphosphorylating MYC. Involved in G1-S phase DNA damage checkpointthat prevents cells with damaged DNA from initiating mitosis;regulates homologous recombination-dependent repair byphosphorylating BRCA2, this phosphorylation is low in S phase whenrecombination is active, but increases as cells progress towardsmitosis. In response to DNA damage, double-strand break repair byhomologous recombination a reduction of CDK2-mediated BRCA2phosphorylation. Phosphorylation of RB1 disturbs its interactionwith E2F1. NPM1 phosphorylation by cyclin E/CDK2 promotes itsdissociates from unduplicated centrosomes, thus initiatingcentrosome duplication. Cyclin E/CDK2-mediated phosphorylation ofNPAT at G1-S transition and until prophase stimulates the NPAT-mediated activation of histone gene transcription during S phase.Required for vitamin D-mediated growth inhibition by being itselfinactivated. Involved in the nitric oxide- (NO) mediated signalingin a nitrosylation/activation-dependent manner. USP37 is activatedby phosphorylation and thus triggers G1-S transition. CTNNB1phosphorylation regulates insulin internalization. \",\n      isseed: false,\n      uniprot: \"P24941\",\n      isvalid: true,\n      importance: 3,\n      ox: 683.702093338653,\n      oy: 694.2872344756593,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK1\",\n      altered: 0,\n      rank: 49,\n      cited: 691,\n      uniprotdesc:\n        \"Calcium/calmodulin-dependent serine/threonine kinaseinvolved in multiple cellular signaling pathways that trigger cellsurvival, apoptosis, and autophagy. Regulates both type Iapoptotic and type II autophagic cell deaths signal, depending onthe cellular setting. The former is caspase-dependent, while thelatter is caspase-independent and is characterized by theaccumulation of autophagic vesicles. Phosphorylates PIN1 resultingin inhibition of its catalytic activity, nuclear localization, andcellular function. Phosphorylates TPM1, enhancing stress fiberformation in endothelial cells. Phosphorylates STX1A andsignificantly decreases its binding to STXBP1. PhosphorylatesPRKD1 and regulates JNK signaling by binding and activating PRKD1under oxidative stress. Phosphorylates BECN1, reducing itsinteraction with BCL2 and BCL2L1 and promoting the induction ofautophagy. Phosphorylates TSC2, disrupting the TSC1-TSC2 complexand stimulating mTORC1 activity in a growth factor-dependentpathway. Phosphorylates RPS6, MYL9 and DAPK3. Acts as a signalingamplifier of NMDA receptors at extrasynaptic sites for mediatingbrain damage in stroke. Cerebral ischemia recruits DAPK1 into theNMDA receptor complex and it phosphorylates GRINB at Ser-1303inducing injurious Ca(2+) influx through NMDA receptor channels,resulting in an irreversible neuronal death. Required togetherwith DAPK3 for phosphorylation of RPL13A upon interferon-gammaactivation which is causing RPL13A involvement in transcript-selective translation inhibition.Isoform 2 cannot induce apoptosis but can inducemembrane blebbing.\",\n      isseed: false,\n      uniprot: \"P53355\",\n      isvalid: true,\n      importance: 3,\n      ox: 656.7801404779123,\n      oy: 707.5238675129558,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RFWD2\",\n      altered: 0,\n      rank: 143,\n      cited: 60,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase that mediates ubiquitinationand subsequent proteasomal degradation of target proteins. E3ubiquitin ligases accept ubiquitin from an E2 ubiquitin-conjugating enzyme in the form of a thioester and then directlytransfers the ubiquitin to targeted substrates. Involved in JUNubiquitination and degradation. Directly involved in p53 (TP53)ubiquitination and degradation, thereby abolishing p53-dependenttranscription and apoptosis. Ubiquitinates p53 independently ofMDM2 or RCHY1. Probably mediates E3 ubiquitin ligase activity byfunctioning as the essential RING domain subunit of larger E3complexes. In contrast, it does not constitute the catalytic RINGsubunit in the DCX DET1-COP1 complex that negatively regulatesJUN, the ubiquitin ligase activity being mediated by RBX1.Involved in 14-3-3 protein sigma/SFN ubiquitination andproteasomal degradation, leading to AKT activation and promotionof cell survival. Ubiquitinates MTA1 leading to its proteasomaldegradation. \",\n      isseed: false,\n      uniprot: \"Q8NHY2\",\n      isvalid: true,\n      importance: 3,\n      ox: 628.5248095687266,\n      oy: 717.6053493094187,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPM1J\",\n      altered: 0,\n      rank: 191,\n      cited: 3,\n      uniprotdesc: \"\",\n      isseed: false,\n      uniprot: \"Q5JR12\",\n      isvalid: true,\n      importance: 3,\n      ox: 599.3044520604564,\n      oy: 724.4002523321917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"BTG2\",\n      altered: 0,\n      rank: 97,\n      cited: 205,\n      uniprotdesc:\n        \"Anti-proliferative protein; the function is mediated byassociation with deadenylase subunits of the CCR4-NOT complex.Activates mRNA deadenylation in a CNOT6 and CNOT7-dependentmanner. In vitro can inhibit deadenylase activity of CNOT7 andCNOT8. Involved in cell cycle regulation. Could be involved in thegrowth arrest and differentiation of the neuronal precursors (Bysimilarity). Modulates transcription regulation mediated by ESR1.Involved in mitochondrial depolarization and neurite outgrowth.\",\n      isseed: false,\n      uniprot: \"P78543\",\n      isvalid: true,\n      importance: 3,\n      ox: 569.5000000000001,\n      oy: 727.8199946289078,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CD82\",\n      altered: 0,\n      rank: 69,\n      cited: 417,\n      uniprotdesc:\n        \"Associates with CD4 or CD8 and delivers costimulatorysignals for the TCR/CD3 pathway.\",\n      isseed: false,\n      uniprot: \"P27701\",\n      isvalid: true,\n      importance: 3,\n      ox: 539.5,\n      oy: 727.8199946289078,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIPK2\",\n      altered: 0,\n      rank: 70,\n      cited: 405,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase involved intranscription regulation, p53/TP53-mediated cellular apoptosis andregulation of the cell cycle. Acts as a corepressor of severaltranscription factors, including SMAD1 and POU4F1/Brn3a andprobably NK homeodomain transcription factors. PhosphorylatesPDX1, ATF1, PML, p53/TP53, CREB1, CTBP1, CBX4, RUNX1, EP300,CTNNB1, HMGA1 and ZBTB4. Inhibits cell growth and promotesapoptosis through the activation of p53/TP53 both at thetranscription level and at the protein level (by phosphorylationand indirect acetylation). The phosphorylation of p53/TP53 may bemediated by a p53/TP53-HIPK2-AXIN1 complex. Involved in theresponse to hypoxia by acting as a transcriptional co-suppressorof HIF1A. Mediates transcriptional activation of TP73. In responseto TGFB, cooperates with DAXX to activate JNK. Negative regulatorthrough phosphorylation and subsequent proteasomal degradation ofCTNNB1 and the antiapoptotic factor CTBP1. In the Wnt/beta-cateninsignaling pathway acts as an intermediate kinase betweenMAP3K7/TAK1 and NLK to promote the proteasomal degradation of MYB.Phosphorylates CBX4 upon DNA damage and promotes its E3 SUMO-protein ligase activity. Activates CREB1 and ATF1 transcriptionfactors by phosphorylation in response to genotoxic stress. Inresponse to DNA damage, stabilizes PML by phosphorylation. PML,HIPK2 and FBXO3 may act synergically to activate p53/TP53-dependent transactivation. Promotes angiogenesis, and is involvedin erythroid differentiation, especially during fetal livererythropoiesis. Phosphorylation of RUNX1 and EP300 stimulatesEP300 transcription regulation activity. Triggers ZBTB4 proteindegradation in response to DNA damage. Modulates HMGA1 DNA-bindingaffinity. In response to high glucose, triggers phosphorylation-mediated subnuclear localization shifting of PDX1. Involved in theregulation of eye size, lens formation and retinal laminationduring late embryogenesis. \",\n      isseed: false,\n      uniprot: \"Q9H2X6\",\n      isvalid: true,\n      importance: 3,\n      ox: 509.69554793954376,\n      oy: 724.4002523321917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DDB2\",\n      altered: 0,\n      rank: 102,\n      cited: 168,\n      uniprotdesc:\n        \"Required for DNA repair. Binds to DDB1 to form the UV-damaged DNA-binding protein complex (the UV-DDB complex). The UV-DDB complex may recognize UV-induced DNA damage and recruitproteins of the nucleotide excision repair pathway (the NERpathway) to initiate DNA repair. The UV-DDB complex preferentiallybinds to cyclobutane pyrimidine dimers (CPD), 6-4 photoproducts(6-4 PP), apurinic sites and short mismatches. Also appears tofunction as the substrate recognition module for the DCX (DDB1-CUL4-X-box) E3 ubiquitin-protein ligase complex DDB1-CUL4-ROC1(also known as CUL4-DDB-ROC1 and CUL4-DDB-RBX1). The DDB1-CUL4-ROC1 complex may ubiquitinate histone H2A, histone H3 and histoneH4 at sites of UV-induced DNA damage. The ubiquitination ofhistones may facilitate their removal from the nucleosome andpromote subsequent DNA repair. The DDB1-CUL4-ROC1 complex alsoubiquitinates XPC, which may enhance DNA-binding by XPC andpromote NER. Isoform D1 and isoform D2 inhibit UV-damaged DNArepair. \",\n      isseed: false,\n      uniprot: \"Q92466\",\n      isvalid: true,\n      importance: 3,\n      ox: 480.47519043127363,\n      oy: 717.6053493094188,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2\",\n      altered: 0,\n      rank: 7,\n      cited: 5024,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase that mediates ubiquitinationof p53/TP53, leading to its degradation by the proteasome.Inhibits p53/TP53- and p73/TP73-mediated cell cycle arrest andapoptosis by binding its transcriptional activation domain. Alsoacts as a ubiquitin ligase E3 toward itself and ARRB1. Permits thenuclear export of p53/TP53. Promotes proteasome-dependentubiquitin-independent degradation of retinoblastoma RB1 protein.Inhibits DAXX-mediated apoptosis by inducing its ubiquitinationand degradation. Component of the TRIM28/KAP1-MDM2-p53/TP53complex involved in stabilizing p53/TP53. Also component of theTRIM28/KAP1-ERBB4-MDM2 complex which links growth factor and DNAdamage response pathways. Mediates ubiquitination and subsequentproteasome degradation of DYRK2 in nucleus. Ubiquitinates IGF1Rand SNAI1 and promotes them to proteasomal degradation.\",\n      isseed: false,\n      uniprot: \"Q00987\",\n      isvalid: true,\n      importance: 3,\n      ox: 599.0684773104314,\n      oy: 636.667218490667,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CTSD\",\n      altered: 0,\n      rank: 85,\n      cited: 273,\n      uniprotdesc:\n        \"Acid protease active in intracellular protein breakdown.Involved in the pathogenesis of several diseases such as breastcancer and possibly Alzheimer disease.\",\n      isseed: false,\n      uniprot: \"P07339\",\n      isvalid: true,\n      importance: 3,\n      ox: 425.2979066613468,\n      oy: 694.287234475659,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NGFR\",\n      altered: 0,\n      rank: 80,\n      cited: 313,\n      uniprotdesc:\n        \"Plays a role in the regulation of the translocation ofGLUT4 to the cell surface in adipocytes and skeletal muscle cellsin response to insulin, probably by regulating RAB31 activity, andthereby contributes to the regulation of insulin-dependent glucoseuptake (By similarity). Low affinity receptor which can bind toNGF, BDNF, NT-3, and NT-4. Can mediate cell survival as well ascell death of neural cells. Necessary for the circadianoscillation of the clock genes ARNTL/BMAL1, PER1, PER2 and NR1D1in the suprachiasmatic nucleus (SCN) of the brain and in liver andof the genes involved in glucose and lipid metabolism in theliver. \",\n      isseed: false,\n      uniprot: \"P08138\",\n      isvalid: true,\n      importance: 3,\n      ox: 400.06030067641166,\n      oy: 678.0680099519913,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CARM1\",\n      altered: 0,\n      rank: 207,\n      cited: 152,\n      uniprotdesc:\n        \"Methylates (mono- and asymmetric dimethylation) theguanidino nitrogens of arginyl residues in several proteinsinvolved in DNA packaging, transcription regulation, pre-mRNAsplicing, and mRNA stability. Recruited to promoters upon geneactivation together with histone acetyltransferases fromEP300/P300 and p160 families, methylates histone H3 at 'Arg-17'(H3R17me), forming mainly asymmetric dimethylarginine (H3R17me2a),leading to activate transcription via chromatin remodeling. Duringnuclear hormone receptor activation and TCF7L2/TCF4 activation,acts synergically with EP300/P300 and either one of the p160histone acetyltransferases NCOA1/SRC1, NCOA2/GRIP1 and NCOA3/ACTRor CTNNB1/beta-catenin to activate transcription. During myogenictranscriptional activation, acts together with NCOA3/ACTR as acoactivator for MEF2C. During monocyte inflammatory stimulation,acts together with EP300/P300 as a coactivator for NF-kappa-B.Acts as coactivator for PPARG, promotes adipocyte differentiationand the accumulation of brown fat tissue. Plays a role in theregulation of pre-mRNA alternative splicing by methylation ofsplicing factors. Also seems to be involved in p53/TP53transcriptional activation. Methylates EP300/P300, both at 'Arg-2142', which may loosen its interaction with NCOA2/GRIP1, and at'Arg-580' and 'Arg-604' in the KIX domain, which impairs itsinteraction with CREB and inhibits CREB-dependent transcriptionalactivation. Also methylates arginine residues in RNA-bindingproteins PABPC1, ELAVL1 and ELAV4, which may affect their mRNA-stabilizing properties and the half-life of their target mRNAs.\",\n      isseed: false,\n      uniprot: \"Q86X55\",\n      isvalid: true,\n      importance: 2,\n      ox: 376.83605235723905,\n      oy: 659.0776363377252,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TYRP1\",\n      altered: 0,\n      rank: 87,\n      cited: 265,\n      uniprotdesc:\n        \"Oxidation of 5,6-dihydroxyindole-2-carboxylic acid(DHICA) into indole-5,6-quinone-2-carboxylic acid. May regulate orinfluence the type of melanin synthesized.\",\n      isseed: false,\n      uniprot: \"P17643\",\n      isvalid: true,\n      importance: 3,\n      ox: 355.92792529758043,\n      oy: 637.5636821949564,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKDC\",\n      altered: 0,\n      rank: 74,\n      cited: 363,\n      uniprotdesc:\n        \"Serine/threonine-protein kinase that acts as a molecularsensor for DNA damage. Involved in DNA non-homologous end joining(NHEJ) required for double-strand break (DSB) repair and V(D)Jrecombination. Must be bound to DNA to express its catalyticproperties. Promotes processing of hairpin DNA structures in V(D)Jrecombination by activation of the hairpin endonuclease artemis(DCLRE1C). The assembly of the DNA-PK complex at DNA ends is alsorequired for the NHEJ ligation step. Required to protect and alignbroken ends of DNA. May also act as a scaffold protein to aid thelocalization of DNA repair proteins to the site of damage. Foundat the ends of chromosomes, suggesting a further role in themaintenance of telomeric stability and the prevention ofchromosomal end fusion. Also involved in modulation oftranscription. Recognizes the substrate consensus sequence [ST]-Q.Phosphorylates 'Ser-139' of histone variant H2AX/H2AFX, therebyregulating DNA damage response mechanism. Phosphorylates DCLRE1C,c-Abl/ABL1, histone H1, HSPCA, c-jun/JUN, p53/TP53, PARP1, POU2F1,DHX9, SRF, XRCC1, XRCC1, XRCC4, XRCC5, XRCC6, WRN, MYC and RFA2.Can phosphorylate C1D not only in the presence of linear DNA butalso in the presence of supercoiled DNA. Ability to phosphorylatep53/TP53 in the presence of supercoiled DNA is dependent on C1D.Contributes to the determination of the circadian period length byantagonizing phosphorylation of CRY1 'Ser-588' and increasing CRY1protein stability, most likely through an indirect machanism.Interacts with CRY1 and CRY2; negatively regulates CRY1phosphorylation. \",\n      isseed: false,\n      uniprot: \"P78527\",\n      isvalid: true,\n      importance: 3,\n      ox: 337.6084889085172,\n      oy: 613.806614817288,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIC1\",\n      altered: 0,\n      rank: 99,\n      cited: 185,\n      uniprotdesc:\n        \"Transcriptional repressor. Recognizes and binds to theconsensus sequence '5-[CG]NG[CG]GGGCA[CA]CC-3'. May act as a tumorsuppressor. May be involved in development of head, face, limbsand ventral body wall. Involved in down-regulation of SIRT1 andthereby is involved in regulation of p53/TP53-dependent apoptoticDNA-damage responses. The specific target gene promoterassociation seems to be depend on corepressors, such as CTBP1 orCTBP2 and MTA1. The regulation of SIRT1 transcription in responseto nutrient deprivation seems to involve CTBP1. In cooperationwith MTA1 (indicative for an association with the NuRD complex)represses transcription from CCND1/cyclin-D1 and CDKN1C/p57Kip2specifically in quiescent cells. Involved in regulation of the Wntsignaling pathway probably by association with TCF7L2 andpreventing TCF7L2 and CTNNB1 association with promoters of TCF-responsive genes. Seems to repress transcription from E2F1 andATOH1 which involves ARID1A, indicative for the participation of adistinct SWI/SNF-type chromatin-remodeling complex. Probablyrepresses transcription from ACKR3, FGFBP1 and EFNA1.\",\n      isseed: false,\n      uniprot: \"Q14526\",\n      isvalid: true,\n      importance: 3,\n      ox: 322.1165650593482,\n      oy: 588.1161439097402,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TAP1\",\n      altered: 0,\n      rank: 63,\n      cited: 474,\n      uniprotdesc:\n        \"Involved in the transport of antigens from the cytoplasmto the endoplasmic reticulum for association with MHC class Imolecules. Also acts as a molecular scaffold for the final stageof MHC class I folding, namely the binding of peptide. Nascent MHCclass I molecules associate with TAP via tapasin. Inhibited by thecovalent attachment of herpes simplex virus ICP47 protein, whichblocks the peptide-binding site of TAP. Inhibited by humancytomegalovirus US6 glycoprotein, which binds to the lumenal sideof the TAP complex and inhibits peptide translocation byspecifically blocking ATP-binding to TAP1 and prevents theconformational rearrangement of TAP induced by peptide binding.Inhibited by human adenovirus E3-19K glycoprotein, which binds theTAP complex and acts as a tapasin inhibitor, preventing MHC classI/TAP association. Expression of TAP1 is down-regulated by humanEpstein-Barr virus vIL-10 protein, thereby affecting the transportof peptides into the endoplasmic reticulum and subsequent peptideloading by MHC class I molecules.\",\n      isseed: false,\n      uniprot: \"Q03518\",\n      isvalid: true,\n      importance: 3,\n      ox: 309.6541146692916,\n      oy: 560.8271840491045,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PYCARD\",\n      altered: 0,\n      rank: 89,\n      cited: 244,\n      uniprotdesc:\n        \"Functions as key mediator in apoptosis and inflammation.Promotes caspase-mediated apoptosis involving predominantlycaspase-8 and also caspase-9 in a probable cell type-specificmanner. Involved in activation of the mitochondrial apoptoticpathway, promotes caspase-8-dependent proteolytic maturation ofBID independently of FADD in certain cell types and also mediatesmitochondrial translocation of BAX and activates BAX-dependentapoptosis coupled to activation of caspase-9, -2 and -3. Involvedin macrophage pyroptosis, a caspase-1-dependent inflammatory formof cell death and is the major constituent of the ASC pyroptosomewhich forms upon potassium depletion and rapidly recruits andactivates caspase-1. In innate immune response believed to act asan integral adapter in the assembly of the inflammasome whichactivates caspase-1 leading to processing and secretion ofproinflammatory cytokines. The function as activating adapter indifferent types of inflammasomes is mediated by the DAPIN and CARDdomains and their homotypic interactions. Required for recruitmentof caspase-1 to inflammasomes containing certain patternrecognition receptors, such as NLRP2, NLRP3, AIM2 and probablyIFI16. In the NLRP1 and NLRC4 inflammasomes seems not be requiredbut facilitates the processing of procaspase-1. In cooperationwith NOD2 involved in an inflammasome activated by bacterialmuramyl dipeptide leading to caspase-1 activation. May be involvedin DDX58-triggered proinflammatory responses and inflammasomeactivation. Isoform 2 may have a regulating effect on the functionas inflammasome adapter. Isoform 3 seems to inhibit inflammasome-mediated maturation of interleukin-1 beta. In collaboration withAIM2 which detects cytosolic double-stranded DNA may also beinvolved in a caspase-1-independent cell death that involvescaspase-8. In adaptive immunity may be involved in maturation ofdendritic cells to stimulate T-cell immunity and in cytoskeletalrearrangements coupled to chemotaxis and antigen uptake may beinvolved in post-transcriptional regulation of the guaninenucleotide exchange factor DOCK2; the latter function is proposedto involve the nuclear form. Also involved in transcriptionalactivation of cytokines and chemokines independent of theinflammasome; this function may involve AP-1, NF-kappa-B, MAPK andcaspase-8 signaling pathways. For regulation of NF-kappa-Bactivating and inhibiting functions have been reported. ModulatesNF-kappa-B induction at the level of the IKK complex by inhibitingkinase activity of CHUK and IKBK. Proposed to compete with RIPK2for association with CASP1 thereby down-regulating CASP1-mediatedRIPK2-dependent NF-kappa-B activation and activating interleukin-1beta processing. \",\n      isseed: false,\n      uniprot: \"Q9ULZ3\",\n      isvalid: true,\n      importance: 3,\n      ox: 300.38360483804325,\n      oy: 532.2954885602502,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"APC\",\n      altered: 0,\n      rank: 22,\n      cited: 2683,\n      uniprotdesc:\n        \"Tumor suppressor. Promotes rapid degradation of CTNNB1and participates in Wnt signaling as a negative regulator. APCactivity is correlated with its phosphorylation state. Activatesthe GEF activity of SPATA13 and ARHGEF4. Plays a role inhepatocyte growth factor (HGF)-induced cell migration. Requiredfor MMP9 up-regulation via the JNK signaling pathway in colorectaltumor cells. Acts as a mediator of ERBB2-dependent stabilizationof microtubules at the cell cortex. It is required for thelocalization of MACF1 to the cell membrane and this localizationof MACF1 is critical for its function in microtubulestabilization. \",\n      isseed: false,\n      uniprot: \"P25054\",\n      isvalid: true,\n      importance: 3,\n      ox: 294.42589083867097,\n      oy: 502.89301172747867,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"RNF144B\",\n      altered: 0,\n      rank: 190,\n      cited: 4,\n      uniprotdesc:\n        \"E3 ubiquitin-protein ligase which accepts ubiquitin fromE2 ubiquitin-conjugating enzymes UBE2L3 and UBE2L6 in the form ofa thioester and then directly transfers the ubiquitin to targetedsubstrates such as LCMT2, thereby promoting their degradation.Induces apoptosis via a p53/TP53-dependent but caspase-independentmechanism. However, its overexpression also produces a decrease ofthe ubiquitin-dependent stability of BAX, a pro-apoptotic protein,ultimately leading to protection of cell death; But, it is not ananti-apoptotic protein per se. \",\n      isseed: false,\n      uniprot: \"Q7Z419\",\n      isvalid: true,\n      importance: 3,\n      ox: 291.8586405843057,\n      oy: 473.0030598015978,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT2B\",\n      altered: 0,\n      rank: 55,\n      cited: 609,\n      uniprotdesc: null,\n      isseed: false,\n      uniprot: null,\n      isvalid: true,\n      importance: 3,\n      ox: 292.7153221081166,\n      oy: 443.0152940167519,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MSH2\",\n      altered: 0,\n      rank: 21,\n      cited: 2696,\n      uniprotdesc:\n        \"Component of the post-replicative DNA mismatch repairsystem (MMR). Forms two different heterodimers: MutS alpha (MSH2-MSH6 heterodimer) and MutS beta (MSH2-MSH3 heterodimer) whichbinds to DNA mismatches thereby initiating DNA repair. When bound,heterodimers bend the DNA helix and shields approximately 20 basepairs. MutS alpha recognizes single base mismatches anddinucleotide insertion-deletion loops (IDL) in the DNA. MutS betarecognizes larger insertion-deletion loops up to 13 nucleotideslong. After mismatch binding, MutS alpha or beta forms a ternarycomplex with the MutL alpha heterodimer, which is thought to beresponsible for directing the downstream MMR events, includingstrand discrimination, excision, and resynthesis. ATP binding andhydrolysis play a pivotal role in mismatch repair functions. TheATPase activity associated with MutS alpha regulates bindingsimilar to a molecular switch: mismatched DNA provokes ADP-->ATPexchange, resulting in a discernible conformational transitionthat converts MutS alpha into a sliding clamp capable ofhydrolysis-independent diffusion along the DNA backbone. Thistransition is crucial for mismatch repair. MutS alpha may alsoplay a role in DNA homologous recombination repair. In melanocytesmay modulate both UV-B-induced cell cycle regulation andapoptosis. \",\n      isseed: false,\n      uniprot: \"P43246\",\n      isvalid: true,\n      importance: 3,\n      ox: 296.9847672563152,\n      oy: 413.32065076032376,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP1R13L\",\n      altered: 0,\n      rank: 140,\n      cited: 63,\n      uniprotdesc:\n        \"Regulator that plays a central role in regulation ofapoptosis and transcription via its interaction with NF-kappa-Band p53/TP53 proteins. Blocks transcription of HIV-1 virus byinhibiting the action of both NF-kappa-B and SP1. Also inhibitsp53/TP53 function, possibly by preventing the association betweenp53/TP53 and ASPP1 or ASPP2, and therefore suppressing thesubsequent activation of apoptosis. \",\n      isseed: false,\n      uniprot: \"Q8WUF5\",\n      isvalid: true,\n      importance: 3,\n      ox: 304.6113172821198,\n      oy: 384.3062451192653,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1\",\n      altered: 0,\n      rank: 46,\n      cited: 799,\n      uniprotdesc:\n        \"NAD-dependent protein deacetylase that linkstranscriptional regulation directly to intracellular energeticsand participates in the coordination of several separated cellularfunctions such as cell cycle, response to DNA damage, metobolism,apoptosis and autophagy. Can modulate chromatin function throughdeacetylation of histones and can promote alterations in themethylation of histones and DNA, leading to transcriptionalrepression. Deacetylates a broad range of transcription factorsand coregulators, thereby regulating target gene expressionpositively and negatively. Serves as a sensor of the cytosolicratio of NAD(+)/NADH which is altered by glucose deprivation andmetabolic changes associated with caloric restriction. Isessential in skeletal muscle cell differentiation and in responseto low nutrients mediates the inhibitory effect on skeletalmyoblast differentiation which also involves 5'-AMP-activatedprotein kinase (AMPK) and nicotinamide phosphoribosyltransferase(NAMPT). Component of the eNoSC (energy-dependent nucleolarsilencing) complex, a complex that mediates silencing of rDNA inresponse to intracellular energy status and acts by recruitinghistone-modifying enzymes. The eNoSC complex is able to sense theenergy status of cell: upon glucose starvation, elevation ofNAD(+)/NADP(+) ratio activates SIRT1, leading to histone H3deacetylation followed by dimethylation of H3 at 'Lys-9' (H3K9me2)by SUV39H1 and the formation of silent chromatin in the rDNAlocus. Deacetylates 'Lys-266' of SUV39H1, leading to itsactivation. Inhibits skeletal muscle differentiation bydeacetylating PCAF and MYOD1. Deacetylates H2A and 'Lys-26' ofHIST1H1E. Deacetylates 'Lys-16' of histone H4 (in vitro). Involvedin NR0B2/SHP corepression function through chromatin remodeling:Recruited to LRH1 target gene promoters by NR0B2/SHP therebystimulating histone H3 and H4 deacetylation leading totranscriptional repression. Proposed to contribute to genomicintegrity via positive regulation of telomere length; however,reports on localization to pericentromeric heterochromatin areconflicting. Proposed to play a role in constitutiveheterochromatin (CH) formation and/or maintenance throughregulation of the available pool of nuclear SUV39H1. Uponoxidative/metabolic stress decreases SUV39H1 degradation byinhibiting SUV39H1 polyubiquitination by MDM2. This increase inSUV39H1 levels enhances SUV39H1 turnover in CH, which in turnseems to accelerate renewal of the heterochromatin whichcorrelates with greater genomic integrity during stress response.Deacetylates 'Lys-382' of p53/TP53 and impairs its ability toinduce transcription-dependent proapoptotic program and modulatecell senescence. Deacetylates TAF1B and thereby represses rDNAtranscription by the RNA polymerase I. Deacetylates MYC, promotesthe association of MYC with MAX and decreases MYC stabilityleading to compromised transformational capability. DeacetylatesFOXO3 in response to oxidative stress thereby increasing itsability to induce cell cycle arrest and resistance to oxidativestress but inhibiting FOXO3-mediated induction of apoptosistranscriptional activity; also leading to FOXO3 ubiquitination andprotesomal degradation. Appears to have a similar effect onMLLT7/FOXO4 in regulation of transcriptional activity andapoptosis. Deacetylates DNMT1; thereby impairs DNMT1methyltransferase-independent transcription repressor activity,modulates DNMT1 cell cycle regulatory function and DNMT1-mediatedgene silencing. Deacetylates RELA/NF-kappa-B p65 therebyinhibiting its transactivating potential and augments apoptosis inresponse to TNF-alpha. Deacetylates HIF1A, KAT5/TIP60, RB1 andHIC1. Deacetylates FOXO1 resulting in its nuclear retention andenhancement of its transcriptional activity leading to increasedgluconeogenesis in liver. Inhibits E2F1 transcriptional activityand apoptotic function, possibly by deacetylation. Involved inHES1- and HEY2-mediated transcriptional repression. In cooperationwith MYCN seems to be involved in transcriptional repression ofDUSP6/MAPK3 leading to MYCN stabilization by phosphorylation at'Ser-62'. Deacetylates MEF2D. Required for antagonist-mediatedtranscription suppression of AR-dependent genes which may belinked to local deacetylation of histone H3. Represses HNF1A-mediated transcription. Required for the repression of ESRRG byCREBZF. Modulates AP-1 transcription factor activity. DeacetylatesNR1H3 AND NR1H2 and deacetylation of NR1H3 at 'Lys-434' positivelyregulates transcription of NR1H3:RXR target genes, promotes NR1H3proteosomal degradation and results in cholesterol efflux; apromoter clearing mechanism after reach round of transcription isproposed. Involved in lipid metabolism. Implicated in regulationof adipogenesis and fat mobilization in white adipocytes byrepression of PPARG which probably involves association with NCOR1and SMRT/NCOR2. Deacetylates ACSS2 leading to its activation, andHMGCS1. Involved in liver and muscle metabolism. Throughdeacteylation and activation of PPARGC1A is required to activatefatty acid oxidation in skeletel muscle under low-glucoseconditions and is involved in glucose homeostasis. Involved inregulation of PPARA and fatty acid beta-oxidation in liver.Involved in positive regulation of insulin secretion in pancreaticbeta cells in response to glucose; the function seems to implytranscriptional repression of UCP2. Proposed to deacetylate IRS2thereby facilitating its insulin-induced tyrosine phosphorylation.Deacetylates SREBF1 isoform SREBP-1C thereby decreasing itsstability and transactivation in lipogenic gene expression.Involved in DNA damage response by repressing genes which areinvolved in DNA repair, such as XPC and TP73, deacetylatingXRCC6/Ku70, and faciliting recruitment of additional factors tosites of damaged DNA, such as SIRT1-deacetylated NBN can recruitATM to initiate DNA repair and SIRT1-deacetylated XPA interactswith RPA2. Also involved in DNA repair of DNA double-strand breaksby homologous recombination and specifically single-strandannealing independently of XRCC6/Ku70 and NBN. Transcriptionalsuppression of XPC probably involves an E2F4:RBL2 suppressorcomplex and protein kinase B (AKT) signaling. Transcriptionalsuppression of TP73 probably involves E2F4 and PCAF. DeacetylatesWRN thereby regulating its helicase and exonuclease activities andregulates WRN nuclear translocation in response to DNA damage.Deacetylates APEX1 at 'Lys-6' and 'Lys-7' and stimulates cellularAP endonuclease activity by promoting the association of APEX1 toXRCC1. Increases p53/TP53-mediated transcription-independentapoptosis by blocking nuclear translocation of cytoplasmicp53/TP53 and probably redirecting it to mitochondria. DeacetylatesXRCC6/Ku70 at 'Lys-539' and 'Lys-542' causing it to sequester BAXaway from mitochondria thereby inhibiting stress-inducedapoptosis. Is involved in autophagy, presumably by deacetylatingATG5, ATG7 and MAP1LC3B/ATG8. Deacetylates AKT1 which leads toenhanced binding of AKT1 and PDK1 to PIP3 and promotes theiractivation. Proposed to play role in regulation of STK11/LBK1-dependent AMPK signaling pathways implicated in cellularsenescence which seems to involve the regulation of theacetylation status of STK11/LBK1. Can deacetylate STK11/LBK1 andthereby increase its activity, cytoplasmic localization andassociation with STRAD; however, the relevance of such activity innormal cells is unclear. In endothelial cells is shown to inhibitSTK11/LBK1 activity and to promote its degradation. DeacetylatesSMAD7 at 'Lys-64' and 'Lys-70' thereby promoting its degradation.Deacetylates CIITA and augments its MHC class II transactivationand contributes to its stability. Deacteylates MECOM/EVI1. Isoform2 is shown to deacetylate 'Lys-382' of p53/TP53, however withlower activity than isoform 1. In combination, the two isoformsexert an additive effect. Isoform 2 regulates p53/TP53 expressionand cellular stress response and is in turn repressed by p53/TP53presenting a SIRT1 isoform-dependent auto-regulatory loop. In caseof HIV-1 infection, interacts with and deacetylates the viral Tatprotein. The viral Tat protein inhibits SIRT1 deacetylationactivity toward RELA/NF-kappa-B p65, thereby potentiates itstranscriptional activity and SIRT1 is proposed to contribute to T-cell hyperactivation during infection. Deacetylates PML at 'Lys-487' and this deacetylation promotes PML control of PER2 nuclearlocalization. During the neurogenic transition, repress selectiveNOTCH1-target genes through histone deacetylation in a BCL6-dependent manner and leading to neuronal differentiation.Regulates the circadian expression of several core clock genes,including ARNTL/BMAL1, RORC, PER2 and CRY1 and plays a criticalrole in maintaining a controlled rhythmicity in histoneacetylation, thereby contributing to circadian chromatinremodeling. Deacetylates ARNTL/BMAL1 and histones at the circadiangene promoters in order to facilitate repression by inhibitorycomponents of the circadian oscillator. Deacetylates PER2,facilitating its ubiquitination and degradation by the proteosome.Protects cardiomyocytes against palmitate-induced apoptosis(PubMed:11672523, PubMed:12006491, PubMed:14976264,PubMed:14980222, PubMed:15126506, PubMed:15152190,PubMed:15205477, PubMed:15469825, PubMed:15692560,PubMed:16079181, PubMed:16166628, PubMed:16892051,PubMed:16998810, PubMed:17283066, PubMed:17334224,PubMed:17505061, PubMed:17612497, PubMed:17620057,PubMed:17936707, PubMed:18203716, PubMed:18296641,PubMed:18662546, PubMed:18687677, PubMed:19188449,PubMed:19220062, PubMed:19364925, PubMed:19690166,PubMed:19934257, PubMed:20097625, PubMed:20100829,PubMed:20203304, PubMed:20375098, PubMed:20620956,PubMed:20670893, PubMed:20817729, PubMed:20975832,PubMed:21149730, PubMed:21245319, PubMed:21471201,PubMed:21504832, PubMed:21555002, PubMed:21698133,PubMed:21701047, PubMed:21775285, PubMed:21807113,PubMed:21841822, PubMed:21890893, PubMed:21909281,PubMed:21947282, PubMed:22274616). Deacetylates XBP1 isoform 2;deacetylation decreases protein stability of XBP1 isoform 2 andinhibits its transcriptional activity (By similarity).\",\n      isseed: false,\n      uniprot: \"Q96EB6\",\n      isvalid: true,\n      importance: 3,\n      ox: 632.4422863405995,\n      oy: 420.5,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CASP10\",\n      altered: 0,\n      rank: 100,\n      cited: 181,\n      uniprotdesc:\n        \"Involved in the activation cascade of caspasesresponsible for apoptosis execution. Recruited to both Fas- andTNFR-1 receptors in a FADD dependent manner. May participate inthe granzyme B apoptotic pathways. Cleaves and activates caspase-3, -4, -6, -7, -8, and -9. Hydrolyzes the small- moleculesubstrates, Tyr-Val-Ala-Asp-|-AMC and Asp-Glu-Val-Asp-|-AMC.\",\n      isseed: false,\n      uniprot: \"Q92851\",\n      isvalid: true,\n      importance: 3,\n      ox: 329.4955681394091,\n      oy: 329.81733631298744,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SP1\",\n      altered: 0,\n      rank: 204,\n      cited: 351,\n      uniprotdesc:\n        \"Transcription factor that can activate or represstranscription in response to physiological and pathologicalstimuli. Binds with high affinity to GC-rich motifs and regulatesthe expression of a large number of genes involved in a variety ofprocesses such as cell growth, apoptosis, differentiation andimmune responses. Highly regulated by post-translationalmodifications (phosphorylations, sumoylation, proteolyticcleavage, glycosylation and acetylation). Binds also the PDGFR-alpha G-box promoter. May have a role in modulating the cellularresponse to DNA damage. Implicated in chromatin remodeling. Playsa role in the recruitment of SMARCA4/BRG1 on the c-FOS promoter.Plays an essential role in the regulation of FE65 gene expression.In complex with ATF7IP, maintains telomerase activity in cancercells by inducing TERT and TERC gene expression. Isoform 3 is astronger activator of transcription than isoform 1. Positivelyregulates the transcription of the core clock componentARNTL/BMAL1. \",\n      isseed: false,\n      uniprot: \"P08047\",\n      isvalid: true,\n      importance: 2,\n      ox: 346.42886470541225,\n      oy: 305.05317940410407,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IRF5\",\n      altered: 0,\n      rank: 101,\n      cited: 180,\n      uniprotdesc:\n        \"Transcription factor involved in the induction ofinterferons IFNA and INFB and inflammatory cytokines upon virusinfection. Activated by TLR7 or TLR8 signaling.\",\n      isseed: false,\n      uniprot: \"Q13568\",\n      isvalid: true,\n      importance: 3,\n      ox: 366.0746867237709,\n      oy: 282.3806921734762,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"BAX\",\n      altered: 0,\n      rank: 51,\n      cited: 635,\n      uniprotdesc:\n        \"Accelerates programmed cell death by binding to, andantagonizing the apoptosis repressor BCL2 or its adenovirushomolog E1B 19k protein. Under stress conditions, undergoes aconformation change that causes translocation to the mitochondrionmembrane, leading to the release of cytochrome c that thentriggers apoptosis. Promotes activation of CASP3, and therebyapoptosis. \",\n      isseed: false,\n      uniprot: \"Q07812\",\n      isvalid: true,\n      importance: 3,\n      ox: 495.57608693571933,\n      oy: 298.7290842958664,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CABIN1\",\n      altered: 0,\n      rank: 132,\n      cited: 77,\n      uniprotdesc:\n        \"May be required for replication-independent chromatinassembly. May serve as a negative regulator of T-cell receptor(TCR) signaling via inhibition of calcineurin. Inhibition ofactivated calcineurin is dependent on both PKC and calciumsignals. Acts as a negative regulator of p53/TP53 by keeping p53in an inactive state on chromatin at promoters of a subset of it'starget genes. \",\n      isseed: false,\n      uniprot: \"Q9Y6J0\",\n      isvalid: true,\n      importance: 3,\n      ox: 524.6080753437241,\n      oy: 291.16974245431265,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD7\",\n      altered: 0,\n      rank: 156,\n      cited: 32,\n      uniprotdesc:\n        \"Histone methyltransferase that specificallymonomethylates 'Lys-4' of histone H3. H3 'Lys-4' methylationrepresents a specific tag for epigenetic transcriptionalactivation. Plays a central role in the transcriptional activationof genes such as collagenase or insulin. Recruited by IPF1/PDX-1to the insulin promoter, leading to activate transcription. Hasalso methyltransferase activity toward non-histone proteins suchas p53/TP53, TAF10, and possibly TAF7 by recognizing and bindingthe [KR]-[STA]-K in substrate proteins. Monomethylates 'Lys-189'of TAF10, leading to increase the affinity of TAF10 for RNApolymerase II. Monomethylates 'Lys-372' of p53/TP53, stabilizingp53/TP53 and increasing p53/TP53-mediated transcriptionalactivation. \",\n      isseed: false,\n      uniprot: \"Q8WTS6\",\n      isvalid: true,\n      importance: 3,\n      ox: 438.5698130049044,\n      oy: 229.70989985711353,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD8\",\n      altered: 0,\n      rank: 164,\n      cited: 22,\n      uniprotdesc:\n        \"Protein-lysine N-methyltransferase that monomethylatesboth histones and non-histone proteins. Specificallymonomethylates 'Lys-20' of histone H4 (H4K20me1). H4K20me1 isenriched during mitosis and represents a specific tag forepigenetic transcriptional repression. Mainly functions ineuchromatin regions, thereby playing a central role in thesilencing of euchromatic genes. Required for cell proliferation,probably by contributing to the maintenance of proper higher-orderstructure of DNA during mitosis. Involved in chromosomecondensation and proper cytokinesis. Nucleosomes are preferred assubstrate compared to free histones. Mediates monomethylation ofp53/TP53 at 'Lys-382', leading to repress p53/TP53-target genes.Plays a negative role in TGF-beta response regulation and apositive role in cell migration. \",\n      isseed: false,\n      uniprot: \"Q9NQR1\",\n      isvalid: true,\n      importance: 3,\n      ox: 466.2035225983501,\n      oy: 218.0317966675917,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"APAF1\",\n      altered: 0,\n      rank: 83,\n      cited: 278,\n      uniprotdesc:\n        \"Oligomeric Apaf-1 mediates the cytochrome c-dependentautocatalytic activation of pro-caspase-9 (Apaf-3), leading to theactivation of caspase-3 and apoptosis. This activation requiresATP. Isoform 6 is less effective in inducing apoptosis.\",\n      isseed: false,\n      uniprot: \"O14727\",\n      isvalid: true,\n      importance: 3,\n      ox: 494.98831180678513,\n      oy: 209.57981996234875,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"GDF15\",\n      altered: 0,\n      rank: 91,\n      cited: 232,\n      uniprotdesc: \"\",\n      isseed: false,\n      uniprot: \"Q99988\",\n      isvalid: true,\n      importance: 3,\n      ox: 388.1769208600632,\n      oy: 262.09544516525557,\n      group: \"nodes\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n  ],\n  edges: [\n    {\n      id: \"TP53-controls-state-change-of-H1F0\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"H1F0\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-IRF5\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"IRF5\",\n      pubmed: [\"11973653\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT8-controls-state-change-of-TP53\",\n      source: \"KAT8\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"17189187\", \"17534149\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11-controls-state-change-of-TP53\",\n      source: \"FBXO11\",\n      cited: 4,\n      target: \"TP53\",\n      pubmed: [\"17098746\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP53\",\n      source: \"ATR\",\n      cited: 24,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15665826\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FBXO11-controls-state-change-of-NEDD8\",\n      source: \"FBXO11\",\n      cited: 1,\n      target: \"NEDD8\",\n      pubmed: [\"17098746\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP53\",\n      source: \"ATM\",\n      cited: 237,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733514\",\n        \"9733515\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SMYD2-controls-state-change-of-TP53\",\n      source: \"SMYD2\",\n      cited: 6,\n      target: \"TP53\",\n      pubmed: [\"17108971\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"NGFR-controls-state-change-of-TP53\",\n      source: \"NGFR\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"15668238\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAX-controls-expression-of-TP53\",\n      source: \"MAX\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"8494784\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PRKAB1\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"PRKAB1\",\n      pubmed: [\"16140933\", \"17409411\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2-controls-state-change-of-TP53\",\n      source: \"MDM2\",\n      cited: 2748,\n      target: \"TP53\",\n      pubmed: [\n        \"10734067\",\n        \"11127820\",\n        \"11340074\",\n        \"11713287\",\n        \"14654783\",\n        \"14671306\",\n        \"14702041\",\n        \"15210108\",\n        \"15242646\",\n        \"16107876\",\n        \"9153395\",\n        \"9153396\",\n        \"9450543\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD8-controls-state-change-of-TP53\",\n      source: \"SETD8\",\n      cited: 8,\n      target: \"TP53\",\n      pubmed: [\"17707234\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SETD7-controls-state-change-of-TP53\",\n      source: \"SETD7\",\n      cited: 8,\n      target: \"TP53\",\n      pubmed: [\"15525938\", \"17646389\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TYRP1\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"TYRP1\",\n      pubmed: [\"10640990\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP63\",\n      source: \"ATR\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCA-controls-state-change-of-TP53\",\n      source: \"PRKCA\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\n        \"10706102\",\n        \"10733583\",\n        \"11007451\",\n        \"11423984\",\n        \"11585729\",\n        \"12080066\",\n        \"14640983\",\n        \"14744935\",\n        \"15659650\",\n        \"16227590\",\n        \"17898864\",\n        \"18812399\",\n        \"19819244\",\n        \"19933256\",\n        \"9254608\",\n        \"9315650\",\n        \"9571186\",\n        \"9620776\",\n        \"9739174\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP63\",\n      source: \"ATM\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP73\",\n      source: \"CHEK2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-DDB2\",\n      source: \"TP53\",\n      cited: 23,\n      target: \"DDB2\",\n      pubmed: [\"11971958\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKCD-controls-state-change-of-TP53\",\n      source: \"PRKCD\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11030628\",\n        \"11101524\",\n        \"11300786\",\n        \"11495913\",\n        \"11740489\",\n        \"11780126\",\n        \"11875057\",\n        \"12021785\",\n        \"12093737\",\n        \"12397361\",\n        \"12427754\",\n        \"12676607\",\n        \"12860987\",\n        \"12902982\",\n        \"12907596\",\n        \"14749479\",\n        \"15322239\",\n        \"15381073\",\n        \"15471885\",\n        \"15489221\",\n        \"15526030\",\n        \"15619621\",\n        \"15657359\",\n        \"15706352\",\n        \"15750624\",\n        \"15843377\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16247456\",\n        \"16377624\",\n        \"16601678\",\n        \"16717128\",\n        \"16738336\",\n        \"16793543\",\n        \"17105820\",\n        \"17107963\",\n        \"17210684\",\n        \"17332358\",\n        \"17349958\",\n        \"17349959\",\n        \"17380123\",\n        \"17567906\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"18056705\",\n        \"18160537\",\n        \"18216278\",\n        \"18536714\",\n        \"18560558\",\n        \"18769132\",\n        \"19465479\",\n        \"19819244\",\n        \"19828042\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19965871\",\n        \"20018442\",\n        \"20024960\",\n        \"20123963\",\n        \"20171273\",\n        \"20363803\",\n        \"20514025\",\n        \"20610713\",\n        \"20673369\",\n        \"20696760\",\n        \"20811699\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21383696\",\n        \"21394211\",\n        \"21642861\",\n        \"21660965\",\n        \"21765463\",\n        \"21765464\",\n        \"22011578\",\n        \"22797063\",\n        \"22878263\",\n        \"23149944\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24899407\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP63\",\n      source: \"TP53\",\n      cited: 257,\n      target: \"TP63\",\n      pubmed: [\"14576823\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PML\",\n      source: \"TP53\",\n      cited: 102,\n      target: \"PML\",\n      pubmed: [\"14992722\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATM-controls-state-change-of-TP73\",\n      source: \"ATM\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP63\",\n      source: \"WRN\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"ATR-controls-state-change-of-TP73\",\n      source: \"ATR\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PCBP4\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"PCBP4\",\n      pubmed: [\"10891498\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GADD45A\",\n      source: \"TP53\",\n      cited: 45,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKDC-controls-state-change-of-TP53\",\n      source: \"PRKDC\",\n      cited: 10,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10930428\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19345189\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21386980\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22496350\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GDF15\",\n      source: \"TP53\",\n      cited: 18,\n      target: \"GDF15\",\n      pubmed: [\"10618379\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP73\",\n      source: \"WRN\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-SERPINE1\",\n      source: \"TP53\",\n      cited: 35,\n      target: \"SERPINE1\",\n      pubmed: [\"7479001\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PPM1J\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"PPM1J\",\n      pubmed: [\"16260627\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP63\",\n      source: \"HTT\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"CASP1\",\n      pubmed: [\"11278253\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP63\",\n      source: \"MAPK14\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP73\",\n      source: \"HMGB1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP6\",\n      source: \"TP53\",\n      cited: 13,\n      target: \"CASP6\",\n      pubmed: [\"12089322\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP63\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP53\",\n      source: \"HTT\",\n      cited: 9,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP63\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP63\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-expression-of-CDKN1A\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"CDKN1A\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP53\",\n      source: \"PML\",\n      cited: 101,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP-controls-state-change-of-TP53\",\n      source: \"CREBBP\",\n      cited: 72,\n      target: \"TP53\",\n      pubmed: [\"18485870\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TAP1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"TAP1\",\n      pubmed: [\"10618714\", \"12857899\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP53\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP53\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP53\",\n      source: \"MAPK14\",\n      cited: 65,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10212189\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10747897\",\n        \"10958792\",\n        \"11030628\",\n        \"11078726\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11283254\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15657359\",\n        \"15665826\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16552184\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17942552\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9372954\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP53\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"10212189\", \"10747897\", \"17254968\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-BAX\",\n      source: \"TP53\",\n      cited: 95,\n      target: \"BAX\",\n      pubmed: [\"14963330\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP63\",\n      source: \"HMGB1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP73\",\n      source: \"TP53\",\n      cited: 42,\n      target: \"TP73\",\n      pubmed: [\"11314010\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP63\",\n      source: \"PML\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP73\",\n      source: \"PPP2CA\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP73\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"FOS-controls-expression-of-TP53\",\n      source: \"FOS\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\"10072388\", \"11136975\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CREBBP-controls-expression-of-GADD45A\",\n      source: \"CREBBP\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CDKN1A\",\n      source: \"TP53\",\n      cited: 1480,\n      target: \"CDKN1A\",\n      pubmed: [\n        \"11080152\",\n        \"15655109\",\n        \"17110336\",\n        \"17409421\",\n        \"17707234\",\n        \"17719541\",\n        \"17938176\",\n        \"18250150\",\n        \"18485870\",\n        \"19011621\",\n        \"7796420\",\n        \"8242752\",\n      ],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"Reactome\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PML-controls-state-change-of-TP73\",\n      source: \"PML\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HMGB1-controls-state-change-of-TP53\",\n      source: \"HMGB1\",\n      cited: 21,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP73\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HIPK2-controls-state-change-of-TP53\",\n      source: \"HIPK2\",\n      cited: 98,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11030628\",\n        \"11101524\",\n        \"11300786\",\n        \"11495913\",\n        \"11740489\",\n        \"11780126\",\n        \"11875057\",\n        \"12021785\",\n        \"12093737\",\n        \"12397361\",\n        \"12427754\",\n        \"12676607\",\n        \"12860987\",\n        \"12902982\",\n        \"12907596\",\n        \"14749479\",\n        \"15322239\",\n        \"15381073\",\n        \"15471885\",\n        \"15489221\",\n        \"15526030\",\n        \"15619621\",\n        \"15657359\",\n        \"15706352\",\n        \"15750624\",\n        \"15843377\",\n        \"15870257\",\n        \"15897882\",\n        \"16219768\",\n        \"16247456\",\n        \"16377624\",\n        \"16601678\",\n        \"16717128\",\n        \"16738336\",\n        \"16793543\",\n        \"17105820\",\n        \"17107963\",\n        \"17210684\",\n        \"17332358\",\n        \"17349958\",\n        \"17349959\",\n        \"17380123\",\n        \"17567906\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"18056705\",\n        \"18160537\",\n        \"18216278\",\n        \"18536714\",\n        \"18560558\",\n        \"18769132\",\n        \"19465479\",\n        \"19819244\",\n        \"19828042\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19965871\",\n        \"20018442\",\n        \"20024960\",\n        \"20123963\",\n        \"20171273\",\n        \"20363803\",\n        \"20514025\",\n        \"20610713\",\n        \"20673369\",\n        \"20696760\",\n        \"20811699\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21383696\",\n        \"21394211\",\n        \"21642861\",\n        \"21660965\",\n        \"21765463\",\n        \"21765464\",\n        \"22011578\",\n        \"22797063\",\n        \"22878263\",\n        \"23149944\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24899407\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RNF144B\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"RNF144B\",\n      pubmed: [\"12853982\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HIC1\",\n      source: \"TP53\",\n      cited: 22,\n      target: \"HIC1\",\n      pubmed: [\"16301995\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIRA\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"HIRA\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK14-controls-state-change-of-TP73\",\n      source: \"MAPK14\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-UBN1\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"UBN1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RB1\",\n      source: \"TP53\",\n      cited: 262,\n      target: \"RB1\",\n      pubmed: [\"8119988\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK11-controls-state-change-of-TP73\",\n      source: \"MAPK11\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HMGA2\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"HMGA2\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HMGA1\",\n      source: \"TP53\",\n      cited: 5,\n      target: \"HMGA1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK13-controls-state-change-of-TP73\",\n      source: \"MAPK13\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MAPK12-controls-state-change-of-TP73\",\n      source: \"MAPK12\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP63\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TP53I3\",\n      source: \"TP53\",\n      cited: 28,\n      target: \"TP53I3\",\n      pubmed: [\"11684014\", \"11919562\", \"17719542\", \"18485870\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DYRK1A-controls-state-change-of-TP53\",\n      source: \"DYRK1A\",\n      cited: 1,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11121242\",\n        \"11244509\",\n        \"11258706\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12860987\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15665826\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18604166\",\n        \"18614045\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20024960\",\n        \"20026654\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9733515\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP73\",\n      source: \"SUMO1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP63\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP73\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP63\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP53\",\n      source: \"CHEK2\",\n      cited: 73,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11042698\",\n        \"11096068\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11585729\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14640983\",\n        \"14665630\",\n        \"14712210\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15659650\",\n        \"15665826\",\n        \"15671037\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17234789\",\n        \"17245430\",\n        \"17254968\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17898864\",\n        \"17936559\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18097051\",\n        \"18159951\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18812399\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19477925\",\n        \"19819244\",\n        \"19828454\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19933256\",\n        \"19934315\",\n        \"19962312\",\n        \"20005840\",\n        \"20009884\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20353948\",\n        \"20372057\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21386980\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22975381\",\n        \"23148227\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9363941\",\n        \"9571186\",\n        \"9620776\",\n        \"9733515\",\n        \"9739174\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP63\",\n      source: \"PPP2CA\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK7-controls-state-change-of-TP53\",\n      source: \"CDK7\",\n      cited: 7,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10348343\",\n        \"10581258\",\n        \"10656682\",\n        \"10656795\",\n        \"10706102\",\n        \"10733583\",\n        \"10747897\",\n        \"11007451\",\n        \"11101524\",\n        \"11239457\",\n        \"11300786\",\n        \"11423984\",\n        \"11495913\",\n        \"11526498\",\n        \"11583595\",\n        \"11585729\",\n        \"11707453\",\n        \"11709713\",\n        \"11850826\",\n        \"11875057\",\n        \"12021785\",\n        \"12080066\",\n        \"12091386\",\n        \"12393879\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12519780\",\n        \"12676607\",\n        \"12776195\",\n        \"12860987\",\n        \"12959929\",\n        \"1406679\",\n        \"14640983\",\n        \"14665630\",\n        \"14744935\",\n        \"14968111\",\n        \"15064747\",\n        \"15155458\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15619621\",\n        \"15659650\",\n        \"15792956\",\n        \"15843377\",\n        \"16083285\",\n        \"16227590\",\n        \"16319070\",\n        \"16436515\",\n        \"16552184\",\n        \"16632641\",\n        \"16651424\",\n        \"16717128\",\n        \"16818520\",\n        \"17105820\",\n        \"17108107\",\n        \"17237827\",\n        \"17591690\",\n        \"17891183\",\n        \"17898864\",\n        \"17906639\",\n        \"17942552\",\n        \"17975552\",\n        \"18490454\",\n        \"18523266\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18812399\",\n        \"19251701\",\n        \"19369195\",\n        \"19413330\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"19933256\",\n        \"20009884\",\n        \"20024960\",\n        \"20123963\",\n        \"20562916\",\n        \"20663147\",\n        \"20686112\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21423215\",\n        \"21455220\",\n        \"21460857\",\n        \"21832239\",\n        \"22011578\",\n        \"22112863\",\n        \"22975381\",\n        \"23312004\",\n        \"23603988\",\n        \"23871434\",\n        \"24194938\",\n        \"24657168\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9372954\",\n        \"9467949\",\n        \"9571186\",\n        \"9620776\",\n        \"9739174\",\n        \"9744860\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK9-controls-state-change-of-TP53\",\n      source: \"CDK9\",\n      cited: 19,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10348343\",\n        \"10581258\",\n        \"10644693\",\n        \"10656682\",\n        \"10656795\",\n        \"10706102\",\n        \"10733583\",\n        \"10747897\",\n        \"11078726\",\n        \"11101524\",\n        \"11239457\",\n        \"11300786\",\n        \"11423984\",\n        \"11495913\",\n        \"11526498\",\n        \"11583595\",\n        \"11687964\",\n        \"11707453\",\n        \"11709713\",\n        \"11850826\",\n        \"11875057\",\n        \"12021785\",\n        \"12091386\",\n        \"12393879\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12519780\",\n        \"12676607\",\n        \"12776195\",\n        \"12860987\",\n        \"12959929\",\n        \"1406679\",\n        \"14640983\",\n        \"14665630\",\n        \"14702041\",\n        \"14744935\",\n        \"14968111\",\n        \"15064747\",\n        \"15155458\",\n        \"15302935\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15619621\",\n        \"15792956\",\n        \"15843377\",\n        \"16037820\",\n        \"16083285\",\n        \"16227590\",\n        \"16319070\",\n        \"16436515\",\n        \"16552184\",\n        \"16632641\",\n        \"16651424\",\n        \"16674116\",\n        \"16717128\",\n        \"16784539\",\n        \"16818520\",\n        \"17105820\",\n        \"17108107\",\n        \"17237827\",\n        \"17287340\",\n        \"17591690\",\n        \"17891183\",\n        \"17906639\",\n        \"17942552\",\n        \"17975552\",\n        \"18490454\",\n        \"18521083\",\n        \"18523266\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18847512\",\n        \"19251701\",\n        \"19369195\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20123963\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20663147\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"20962272\",\n        \"21317932\",\n        \"21383696\",\n        \"21423215\",\n        \"21455220\",\n        \"21460857\",\n        \"21659604\",\n        \"21832239\",\n        \"21983960\",\n        \"22011578\",\n        \"22112863\",\n        \"22496350\",\n        \"22547687\",\n        \"22975381\",\n        \"23201157\",\n        \"23312004\",\n        \"23603988\",\n        \"23871434\",\n        \"24194938\",\n        \"24657168\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n        \"9315650\",\n        \"9372954\",\n        \"9467949\",\n        \"9739174\",\n        \"9744860\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK2-controls-state-change-of-TP53\",\n      source: \"CDK2\",\n      cited: 26,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"10644693\",\n        \"10656795\",\n        \"11078726\",\n        \"11283254\",\n        \"11300786\",\n        \"11687964\",\n        \"11875057\",\n        \"12021785\",\n        \"12397361\",\n        \"12397362\",\n        \"12860987\",\n        \"1406679\",\n        \"14640983\",\n        \"14702041\",\n        \"14744935\",\n        \"15302935\",\n        \"15619621\",\n        \"16037820\",\n        \"16227590\",\n        \"16552184\",\n        \"16674116\",\n        \"16784539\",\n        \"17287340\",\n        \"17906639\",\n        \"17942552\",\n        \"18521083\",\n        \"18769132\",\n        \"18847512\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"21659604\",\n        \"21983960\",\n        \"22011578\",\n        \"22496350\",\n        \"22547687\",\n        \"23201157\",\n        \"23312004\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK5-controls-state-change-of-TP53\",\n      source: \"CDK5\",\n      cited: 23,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10581258\",\n        \"10606744\",\n        \"10608806\",\n        \"10611322\",\n        \"10656682\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10713094\",\n        \"10723129\",\n        \"10733583\",\n        \"10734067\",\n        \"10744722\",\n        \"10958792\",\n        \"11030628\",\n        \"11096068\",\n        \"11101524\",\n        \"11121242\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11300786\",\n        \"11313957\",\n        \"11314044\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11546806\",\n        \"11551930\",\n        \"11583595\",\n        \"11706017\",\n        \"11707453\",\n        \"11709713\",\n        \"11711532\",\n        \"11740489\",\n        \"11780126\",\n        \"11850826\",\n        \"11861384\",\n        \"11865061\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12021785\",\n        \"12049739\",\n        \"12071847\",\n        \"12080066\",\n        \"12082529\",\n        \"12091386\",\n        \"12093737\",\n        \"12151394\",\n        \"12324477\",\n        \"12384533\",\n        \"12393500\",\n        \"12397361\",\n        \"12397362\",\n        \"12427754\",\n        \"12511424\",\n        \"12518062\",\n        \"12519769\",\n        \"12519780\",\n        \"12531896\",\n        \"12588868\",\n        \"12606585\",\n        \"12637545\",\n        \"12676607\",\n        \"12702572\",\n        \"12756247\",\n        \"12771937\",\n        \"12776195\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12890678\",\n        \"12902982\",\n        \"12907596\",\n        \"12939400\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"1406679\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"14712210\",\n        \"14749479\",\n        \"14871840\",\n        \"14871926\",\n        \"14968111\",\n        \"15048074\",\n        \"15064747\",\n        \"15077171\",\n        \"15078887\",\n        \"15082766\",\n        \"15140942\",\n        \"15155458\",\n        \"15159397\",\n        \"15178764\",\n        \"15181149\",\n        \"15226429\",\n        \"15254178\",\n        \"15258567\",\n        \"15269203\",\n        \"15310764\",\n        \"15322239\",\n        \"15355354\",\n        \"15361830\",\n        \"15381073\",\n        \"15456784\",\n        \"15471885\",\n        \"15489221\",\n        \"15489892\",\n        \"15526030\",\n        \"15533933\",\n        \"15542844\",\n        \"15580310\",\n        \"15619621\",\n        \"15629715\",\n        \"15657359\",\n        \"15665826\",\n        \"15671037\",\n        \"15706352\",\n        \"15750624\",\n        \"15758953\",\n        \"15775976\",\n        \"15782130\",\n        \"15792956\",\n        \"15794754\",\n        \"15843377\",\n        \"15866171\",\n        \"15870257\",\n        \"15897882\",\n        \"15963507\",\n        \"16219768\",\n        \"16223874\",\n        \"16247456\",\n        \"16288207\",\n        \"16293623\",\n        \"16377624\",\n        \"16397295\",\n        \"16436515\",\n        \"16478990\",\n        \"16489034\",\n        \"16501611\",\n        \"16552184\",\n        \"16601678\",\n        \"16632641\",\n        \"16636671\",\n        \"16648554\",\n        \"16651424\",\n        \"16714289\",\n        \"16717128\",\n        \"16731759\",\n        \"16738336\",\n        \"16774943\",\n        \"16783362\",\n        \"16790523\",\n        \"16793543\",\n        \"16818505\",\n        \"16818520\",\n        \"16891474\",\n        \"16916644\",\n        \"16949371\",\n        \"17045821\",\n        \"17105820\",\n        \"17107963\",\n        \"17108107\",\n        \"17121812\",\n        \"17135248\",\n        \"17210684\",\n        \"17234789\",\n        \"17245430\",\n        \"17283137\",\n        \"17297446\",\n        \"17297454\",\n        \"17332358\",\n        \"17339337\",\n        \"17349958\",\n        \"17349959\",\n        \"17353187\",\n        \"17363488\",\n        \"17371838\",\n        \"17380123\",\n        \"17456577\",\n        \"17486112\",\n        \"17535811\",\n        \"17553757\",\n        \"17567906\",\n        \"17591690\",\n        \"17596534\",\n        \"17609585\",\n        \"17616578\",\n        \"17668048\",\n        \"17684018\",\n        \"17698850\",\n        \"17712528\",\n        \"17855337\",\n        \"17891183\",\n        \"17906639\",\n        \"17936559\",\n        \"17942552\",\n        \"17967874\",\n        \"17975552\",\n        \"17976513\",\n        \"17977830\",\n        \"18032786\",\n        \"18045533\",\n        \"18056442\",\n        \"18056705\",\n        \"18097051\",\n        \"18159951\",\n        \"18160537\",\n        \"18216278\",\n        \"18246126\",\n        \"18272544\",\n        \"18289945\",\n        \"18332866\",\n        \"18339864\",\n        \"18345031\",\n        \"18381438\",\n        \"18406507\",\n        \"18431490\",\n        \"18449195\",\n        \"18490454\",\n        \"18536714\",\n        \"18560558\",\n        \"18593910\",\n        \"18604166\",\n        \"18614045\",\n        \"18669630\",\n        \"18715874\",\n        \"18718914\",\n        \"18765533\",\n        \"18769132\",\n        \"18778462\",\n        \"18785202\",\n        \"18794113\",\n        \"18818083\",\n        \"18847491\",\n        \"18985806\",\n        \"18995830\",\n        \"19085961\",\n        \"19203586\",\n        \"19251701\",\n        \"19266268\",\n        \"19303885\",\n        \"19465479\",\n        \"19477925\",\n        \"19819244\",\n        \"19828042\",\n        \"19828454\",\n        \"19857493\",\n        \"19861417\",\n        \"19882354\",\n        \"19907922\",\n        \"19934315\",\n        \"19962312\",\n        \"19965871\",\n        \"20005840\",\n        \"20009884\",\n        \"20018442\",\n        \"20024960\",\n        \"20026654\",\n        \"20041275\",\n        \"20080565\",\n        \"20123963\",\n        \"20171273\",\n        \"20353948\",\n        \"20363803\",\n        \"20372057\",\n        \"20514025\",\n        \"20562916\",\n        \"20599567\",\n        \"20610713\",\n        \"20637859\",\n        \"20661218\",\n        \"20663147\",\n        \"20673369\",\n        \"20696760\",\n        \"20711232\",\n        \"20811699\",\n        \"20931131\",\n        \"20935676\",\n        \"20962272\",\n        \"21057547\",\n        \"21148320\",\n        \"21317932\",\n        \"21383696\",\n        \"21394211\",\n        \"21423215\",\n        \"21441950\",\n        \"21454683\",\n        \"21465263\",\n        \"21532626\",\n        \"21642861\",\n        \"21660965\",\n        \"21757780\",\n        \"21765463\",\n        \"21765464\",\n        \"21832239\",\n        \"22002314\",\n        \"22011578\",\n        \"22030623\",\n        \"22037398\",\n        \"22055193\",\n        \"22099307\",\n        \"22112863\",\n        \"22179839\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"22878263\",\n        \"22975381\",\n        \"23148227\",\n        \"23149944\",\n        \"23150668\",\n        \"23184057\",\n        \"23678107\",\n        \"23798621\",\n        \"23871434\",\n        \"23890999\",\n        \"23982736\",\n        \"24038750\",\n        \"24145406\",\n        \"24196445\",\n        \"24379358\",\n        \"24657168\",\n        \"24711418\",\n        \"24820418\",\n        \"24899407\",\n        \"24958101\",\n        \"25202122\",\n        \"8327466\",\n        \"9363941\",\n        \"9372954\",\n        \"9733515\",\n        \"9744860\",\n        \"9843217\",\n        \"9925639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"IGBP1-controls-state-change-of-TP53\",\n      source: \"IGBP1\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-BAX\",\n      source: \"TP53\",\n      cited: 95,\n      target: \"BAX\",\n      pubmed: [\n        \"10518217\",\n        \"11080152\",\n        \"11278953\",\n        \"11684014\",\n        \"11850816\",\n        \"15598651\",\n        \"17145718\",\n        \"17189187\",\n      ],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CCNB1\",\n      source: \"TP53\",\n      cited: 23,\n      target: \"CCNB1\",\n      pubmed: [\"15710382\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP63\",\n      source: \"SIRT1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP73\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-MDM2\",\n      source: \"TP53\",\n      cited: 2784,\n      target: \"MDM2\",\n      pubmed: [\"12138177\", \"17409421\", \"7651818\", \"8319905\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CB-controls-state-change-of-TP53\",\n      source: \"PPP2CB\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP2CA-controls-state-change-of-TP53\",\n      source: \"PPP2CA\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CHEK2-controls-state-change-of-TP63\",\n      source: \"CHEK2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CD82\",\n      source: \"TP53\",\n      cited: 44,\n      target: \"CD82\",\n      pubmed: [\"9736732\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-FDXR\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"FDXR\",\n      pubmed: [\"12370809\", \"17409421\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HTT\",\n      source: \"TP53\",\n      cited: 9,\n      target: \"HTT\",\n      pubmed: [\"16278683\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CTSD\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"CTSD\",\n      pubmed: [\"9619826\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SIRT1-controls-state-change-of-TP53\",\n      source: \"SIRT1\",\n      cited: 50,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-CASP10\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"CASP10\",\n      pubmed: [\"14688482\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-APAF1\",\n      source: \"TP53\",\n      cited: 26,\n      target: \"APAF1\",\n      pubmed: [\"11559530\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-HGF\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"HGF\",\n      pubmed: [\"9023107\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT5-controls-state-change-of-TP53\",\n      source: \"PRMT5\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\"19011621\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-APC\",\n      source: \"TP53\",\n      cited: 166,\n      target: \"APC\",\n      pubmed: [\"11279192\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-BTG2\",\n      source: \"TP53\",\n      cited: 14,\n      target: \"BTG2\",\n      pubmed: [\"11814693\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRMT1-controls-expression-of-GADD45A\",\n      source: \"PRMT1\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-ASF1A\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"ASF1A\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-FAS\",\n      source: \"TP53\",\n      cited: 114,\n      target: \"FAS\",\n      pubmed: [\"9841917\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"HTT-controls-state-change-of-TP73\",\n      source: \"HTT\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAG1-controls-state-change-of-TP53\",\n      source: \"PRKAG1\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-TRIAP1\",\n      source: \"TP53\",\n      cited: 2,\n      target: \"TRIAP1\",\n      pubmed: [\"15735003\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-RFWD2\",\n      source: \"TP53\",\n      cited: 11,\n      target: \"RFWD2\",\n      pubmed: [\"15103385\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP63\",\n      source: \"EP300\",\n      cited: 2,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-COL18A1\",\n      source: \"TP53\",\n      cited: 1,\n      target: \"COL18A1\",\n      pubmed: [\"15958553\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-expression-of-GADD45A\",\n      source: \"EP300\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP73\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP53\",\n      source: \"EP300\",\n      cited: 117,\n      target: \"TP53\",\n      pubmed: [\"18485870\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP73\",\n      source: \"PRKAB1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1B\",\n      source: \"TP53\",\n      cited: 2,\n      target: \"HIST1H1B\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"EP300-controls-state-change-of-TP73\",\n      source: \"EP300\",\n      cited: 1,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1C\",\n      source: \"TP53\",\n      cited: 4,\n      target: \"HIST1H1C\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1A\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1A\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CARM1-controls-expression-of-GADD45A\",\n      source: \"CARM1\",\n      cited: 0,\n      target: \"GADD45A\",\n      pubmed: [\"15186775\", \"18250150\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1D\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1D\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-HIST1H1E\",\n      source: \"TP53\",\n      cited: 0,\n      target: \"HIST1H1E\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"WRN-controls-state-change-of-TP53\",\n      source: \"WRN\",\n      cited: 46,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-MSH2\",\n      source: \"TP53\",\n      cited: 109,\n      target: \"MSH2\",\n      pubmed: [\"10984493\", \"11350971\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"KAT2B-controls-state-change-of-TP53\",\n      source: \"KAT2B\",\n      cited: 34,\n      target: \"TP53\",\n      pubmed: [\"17110336\", \"9744860\", \"9891054\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PYCARD\",\n      source: \"TP53\",\n      cited: 13,\n      target: \"PYCARD\",\n      pubmed: [\"14730312\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP53\",\n      source: \"PRKAA2\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SP1-controls-expression-of-CCNB1\",\n      source: \"SP1\",\n      cited: 1,\n      target: \"CCNB1\",\n      pubmed: [\"15710382\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP53\",\n      source: \"PRKAA1\",\n      cited: 1,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10606744\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10733583\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15355354\",\n        \"15471885\",\n        \"15489221\",\n        \"15542844\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18246126\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"18794113\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21386980\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-GPX1\",\n      source: \"TP53\",\n      cited: 10,\n      target: \"GPX1\",\n      pubmed: [\"16140933\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-state-change-of-CABIN1\",\n      source: \"TP53\",\n      cited: 6,\n      target: \"CABIN1\",\n      pubmed: [\n        \"15621527\",\n        \"15655109\",\n        \"16901784\",\n        \"17158953\",\n        \"17242198\",\n        \"17242207\",\n        \"23964094\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"Reactome\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"MDM2-controls-state-change-of-NEDD8\",\n      source: \"MDM2\",\n      cited: 10,\n      target: \"NEDD8\",\n      pubmed: [\"15242646\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PLK3-controls-state-change-of-TP53\",\n      source: \"PLK3\",\n      cited: 16,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\", \"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP53\",\n      source: \"PRKAB1\",\n      cited: 5,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP53\",\n      source: \"SUMO1\",\n      cited: 39,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP63\",\n      source: \"PRKAA1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PPP1R13L-controls-state-change-of-TP53\",\n      source: \"PPP1R13L\",\n      cited: 13,\n      target: \"TP53\",\n      pubmed: [\n        \"10581258\",\n        \"11740489\",\n        \"11780126\",\n        \"16377624\",\n        \"17349958\",\n        \"17906639\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"TP53-controls-expression-of-PLK3\",\n      source: \"TP53\",\n      cited: 16,\n      target: \"PLK3\",\n      pubmed: [\"16140933\"],\n      isdirected: true,\n      type: \"controls-expression-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP63\",\n      source: \"PRKAA2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP53\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK1-controls-state-change-of-TP53\",\n      source: \"DAPK1\",\n      cited: 6,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10606744\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10733583\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11883897\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15355354\",\n        \"15471885\",\n        \"15489221\",\n        \"15542844\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18246126\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"18794113\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20847049\",\n        \"20851891\",\n        \"20959462\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21386980\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"CDK1-controls-state-change-of-TP53\",\n      source: \"CDK1\",\n      cited: 47,\n      target: \"TP53\",\n      pubmed: [\n        \"10644693\",\n        \"10656795\",\n        \"11078726\",\n        \"11300786\",\n        \"11687964\",\n        \"11875057\",\n        \"12021785\",\n        \"12397361\",\n        \"12397362\",\n        \"12860987\",\n        \"1406679\",\n        \"14640983\",\n        \"14702041\",\n        \"14744935\",\n        \"15302935\",\n        \"15619621\",\n        \"16037820\",\n        \"16227590\",\n        \"16552184\",\n        \"16674116\",\n        \"16784539\",\n        \"17287340\",\n        \"17906639\",\n        \"17942552\",\n        \"18521083\",\n        \"18769132\",\n        \"18847512\",\n        \"19413330\",\n        \"19574224\",\n        \"19664995\",\n        \"20363803\",\n        \"20562916\",\n        \"20661218\",\n        \"20686112\",\n        \"20808790\",\n        \"20815410\",\n        \"21659604\",\n        \"21983960\",\n        \"22011578\",\n        \"22496350\",\n        \"22547687\",\n        \"23201157\",\n        \"23312004\",\n        \"25159151\",\n        \"7596441\",\n        \"8327466\",\n        \"9254608\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"DAPK3-controls-state-change-of-TP53\",\n      source: \"DAPK3\",\n      cited: 0,\n      target: \"TP53\",\n      pubmed: [\n        \"10202145\",\n        \"10570149\",\n        \"10656795\",\n        \"10673500\",\n        \"10673501\",\n        \"10706102\",\n        \"10710310\",\n        \"10734067\",\n        \"11030628\",\n        \"11175334\",\n        \"11244509\",\n        \"11258706\",\n        \"11397945\",\n        \"11423984\",\n        \"11447225\",\n        \"11495913\",\n        \"11526498\",\n        \"11551930\",\n        \"11583595\",\n        \"11707453\",\n        \"11850826\",\n        \"11861384\",\n        \"11875057\",\n        \"11896572\",\n        \"11896587\",\n        \"12091386\",\n        \"12384533\",\n        \"12427754\",\n        \"12531896\",\n        \"12676607\",\n        \"12756247\",\n        \"12810724\",\n        \"12860987\",\n        \"12861053\",\n        \"12902982\",\n        \"12955074\",\n        \"12959929\",\n        \"12969974\",\n        \"14517211\",\n        \"14527925\",\n        \"14612532\",\n        \"14665630\",\n        \"15064747\",\n        \"15140942\",\n        \"15254178\",\n        \"15269203\",\n        \"15322239\",\n        \"15471885\",\n        \"15489221\",\n        \"15629715\",\n        \"15671037\",\n        \"15750624\",\n        \"15843377\",\n        \"15963507\",\n        \"16377624\",\n        \"16651424\",\n        \"16731759\",\n        \"16774943\",\n        \"16818520\",\n        \"17105820\",\n        \"17121812\",\n        \"17135248\",\n        \"17245430\",\n        \"17339337\",\n        \"17353187\",\n        \"17363488\",\n        \"17698850\",\n        \"17967874\",\n        \"17977830\",\n        \"18159951\",\n        \"18593910\",\n        \"18669630\",\n        \"18718914\",\n        \"18778462\",\n        \"19819244\",\n        \"19861417\",\n        \"19882354\",\n        \"20009884\",\n        \"20024960\",\n        \"20041275\",\n        \"20562916\",\n        \"20673369\",\n        \"20696760\",\n        \"20962272\",\n        \"21148320\",\n        \"21383696\",\n        \"21454683\",\n        \"21832239\",\n        \"22030623\",\n        \"22112863\",\n        \"22285752\",\n        \"22728651\",\n        \"22797063\",\n        \"22815859\",\n        \"23798621\",\n        \"23871434\",\n        \"24657168\",\n        \"8327466\",\n      ],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PhosphoSite\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB1-controls-state-change-of-TP63\",\n      source: \"PRKAB1\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"SUMO1-controls-state-change-of-TP63\",\n      source: \"SUMO1\",\n      cited: 1,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA1-controls-state-change-of-TP73\",\n      source: \"PRKAA1\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"E4F1-controls-state-change-of-TP53\",\n      source: \"E4F1\",\n      cited: 12,\n      target: \"TP53\",\n      pubmed: [\"17110336\", \"9288740\"],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"pid\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAA2-controls-state-change-of-TP73\",\n      source: \"PRKAA2\",\n      cited: 0,\n      target: \"TP73\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n    {\n      id: \"PRKAB2-controls-state-change-of-TP63\",\n      source: \"PRKAB2\",\n      cited: 0,\n      target: \"TP63\",\n      pubmed: [],\n      isdirected: true,\n      type: \"controls-state-change-of\",\n      datasource: [\"PANTHER\"],\n      group: \"edges\",\n      removed: false,\n      selected: false,\n      selectable: true,\n      locked: false,\n      grabbable: true,\n      classes: \"\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-concentric/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport concentric from \"@antv/f6/dist/extends/layout/concentricLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"concentric\", concentric);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"concentric\",\n    maxLevelDiff: 0.5,\n    sortBy: \"degree\",\n  },\n  animate: true,\n  defaultNode: {\n    size: 5,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-dagre/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      dataType: \"alps\",\n      name: \"alps_file1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"2\",\n      dataType: \"alps\",\n      name: \"alps_file2\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"3\",\n      dataType: \"alps\",\n      name: \"alps_file3\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"4\",\n      dataType: \"sql\",\n      name: \"sql_file1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"5\",\n      dataType: \"sql\",\n      name: \"sql_file2\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"6\",\n      dataType: \"feature_etl\",\n      name: \"feature_etl_1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"7\",\n      dataType: \"feature_etl\",\n      name: \"feature_etl_1\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n    {\n      id: \"8\",\n      dataType: \"feature_extractor\",\n      name: \"feature_extractor\",\n      conf: [\n        {\n          label: \"conf\",\n          value: \"pai_graph.conf\",\n        },\n        {\n          label: \"dot\",\n          value: \"pai_graph.dot\",\n        },\n        {\n          label: \"init\",\n          value: \"init.rc\",\n        },\n      ],\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n    },\n    {\n      source: \"2\",\n      target: \"4\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"6\",\n      target: \"7\",\n    },\n    {\n      source: \"6\",\n      target: \"8\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-dagre/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nF6.registerNode(\n  \"sql\",\n  {\n    drawShape(cfg, group) {\n      const rect = group.addShape(\"rect\", {\n        attrs: {\n          x: -75,\n          y: -25,\n          width: 150,\n          height: 50,\n          radius: 10,\n          stroke: \"#5B8FF9\",\n          fill: \"#C6E5FF\",\n          lineWidth: 3,\n        },\n        name: \"rect-shape\",\n      });\n\n      if (cfg.name) {\n        group.addShape(\"text\", {\n          attrs: {\n            text: cfg.name,\n            x: 0,\n            y: 0,\n            fill: \"#00287E\",\n            fontSize: 14,\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n            fontWeight: \"bold\",\n          },\n          name: \"text-shape\",\n        });\n      }\n\n      return rect;\n    },\n  },\n  \"single-node\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  layout: {\n    type: \"dagre\",\n    nodesepFunc: (d) => {\n      if (d.id === \"3\") {\n        return 500;\n      }\n\n      return 50;\n    },\n    ranksep: 70,\n    controlPoints: true,\n  },\n  defaultNode: {\n    type: \"sql\",\n  },\n  defaultEdge: {\n    type: \"polyline\",\n    style: {\n      radius: 20,\n      offset: 45,\n      endArrow: true,\n      lineWidth: 2,\n      stroke: \"#C2C8D5\",\n    },\n  },\n  nodeStateStyles: {\n    selected: {\n      stroke: \"#d9d9d9\",\n      fill: \"#5394ef\",\n    },\n  },\n  modes: {\n    default: [\n      \"drag-canvas\",\n      \"zoom-canvas\",\n      \"click-select\",\n      {\n        type: \"tooltip\",\n\n        formatText(model) {\n          const cfg = model.conf;\n          const text = [];\n          cfg.forEach((row) => {\n            text.push(`${row.label}:${row.value}<br>`);\n          });\n          return text.join(\"\\n\");\n        },\n\n        offset: 30,\n      },\n    ],\n  },\n  fitView: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-force-directed/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-force-directed/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n  },\n  defaultNode: {\n    size: 15,\n  },\n});\nconst data = getData();\ngraph.data({\n  nodes: data.nodes,\n  edges: data.edges.map(function (edge, i) {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get(\"model\");\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\ngraph.on(\"node:dragstart\", function (e) {\n  graph.layout();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:drag\", function (e) {\n  const forceLayout = graph.get(\"layoutController\").layoutMethods[0];\n  forceLayout.execute();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:dragend\", function (e) {\n  e.item.get(\"model\").fx = null;\n  e.item.get(\"model\").fy = null;\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-force-directed-drag-fix/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-force-directed-drag-fix/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n    preventOverlap: true,\n    nodeSize: 20,\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n  defaultNode: {\n    size: 20,\n  },\n});\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get(\"model\");\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\ngraph.on(\"node:dragstart\", (e) => {\n  graph.layout();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:drag\", (e) => {\n  refreshDragedNodePosition(e);\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-grid/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-grid/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"grid\", grid);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"grid\",\n    begin: [20, 20],\n    width: width - 20,\n    height: height - 20,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-radial/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/basic-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radial);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    unitRadius: 50,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/circular-arc-diagram/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      name: \"analytics.cluster\",\n      cluster: \"analytics\",\n      value: 21,\n    },\n    {\n      id: \"1\",\n      name: \"analytics.graph\",\n      cluster: \"analytics\",\n      value: 34,\n    },\n    {\n      id: \"2\",\n      name: \"analytics.optimization\",\n      cluster: \"analytics\",\n      value: 8,\n    },\n    {\n      id: \"3\",\n      name: \"animate\",\n      cluster: \"animate\",\n      value: 40,\n    },\n    {\n      id: \"4\",\n      name: \"animate.interpolate\",\n      cluster: \"animate\",\n      value: 18,\n    },\n    {\n      id: \"5\",\n      name: \"data.converters\",\n      cluster: \"data\",\n      value: 25,\n    },\n    {\n      id: \"6\",\n      name: \"data\",\n      cluster: \"data\",\n      value: 10,\n    },\n    {\n      id: \"7\",\n      name: \"display\",\n      cluster: \"display\",\n      value: 4,\n    },\n    {\n      id: \"8\",\n      name: \"flex\",\n      cluster: \"flex\",\n      value: 6,\n    },\n    {\n      id: \"9\",\n      name: \"physics\",\n      cluster: \"physics\",\n      value: 22,\n    },\n    {\n      id: \"10\",\n      name: \"query\",\n      cluster: \"query\",\n      value: 67,\n    },\n    {\n      id: \"11\",\n      name: \"query.methods\",\n      cluster: \"query\",\n      value: 71,\n    },\n    {\n      id: \"12\",\n      name: \"scale\",\n      cluster: \"scale\",\n      value: 33,\n    },\n    {\n      id: \"13\",\n      name: \"util\",\n      cluster: \"util\",\n      value: 23,\n    },\n    {\n      id: \"14\",\n      name: \"util.heap\",\n      cluster: \"util\",\n      value: 2,\n    },\n    {\n      id: \"15\",\n      cluster: \"util\",\n      name: \"util.math\",\n      value: 2,\n    },\n    {\n      id: \"16\",\n      name: \"util.palette\",\n      cluster: \"util\",\n      value: 5,\n    },\n    {\n      id: \"17\",\n      name: \"vis.axis\",\n      cluster: \"vis\",\n      value: 24,\n    },\n    {\n      id: \"18\",\n      name: \"vis.controls\",\n      cluster: \"vis\",\n      value: 28,\n    },\n    {\n      id: \"19\",\n      name: \"vis.data\",\n      cluster: \"vis\",\n      value: 70,\n    },\n    {\n      id: \"20\",\n      name: \"vis.data.render\",\n      cluster: \"vis\",\n      value: 11,\n    },\n    {\n      id: \"21\",\n      name: \"vis.events\",\n      cluster: \"vis\",\n      value: 8,\n    },\n    {\n      id: \"22\",\n      name: \"vis.legend\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"23\",\n      name: \"vis.operator.distortion\",\n      cluster: \"vis\",\n      value: 9,\n    },\n    {\n      id: \"24\",\n      name: \"vis.operator.encoder\",\n      cluster: \"vis\",\n      value: 30,\n    },\n    {\n      id: \"25\",\n      name: \"vis.operator.filter\",\n      cluster: \"vis\",\n      value: 17,\n    },\n    {\n      id: \"26\",\n      name: \"vis.operator\",\n      cluster: \"vis\",\n      value: 27,\n    },\n    {\n      id: \"27\",\n      name: \"vis.operator.label\",\n      cluster: \"vis\",\n      value: 18,\n    },\n    {\n      id: \"28\",\n      name: \"vis.operator.layout\",\n      cluster: \"vis\",\n      value: 91,\n    },\n    {\n      id: \"29\",\n      name: \"vis\",\n      cluster: \"vis\",\n      value: 13,\n    },\n  ],\n  edges: [\n    {\n      source: \"10\",\n      target: \"10\",\n      sourceWeight: 61,\n      targetWeight: 61,\n    },\n    {\n      source: \"11\",\n      target: \"11\",\n      sourceWeight: 39,\n      targetWeight: 39,\n    },\n    {\n      source: \"3\",\n      target: \"3\",\n      sourceWeight: 30,\n      targetWeight: 30,\n    },\n    {\n      source: \"19\",\n      target: \"19\",\n      sourceWeight: 26,\n      targetWeight: 26,\n    },\n    {\n      source: \"13\",\n      target: \"13\",\n      sourceWeight: 23,\n      targetWeight: 23,\n    },\n    {\n      source: \"9\",\n      target: \"9\",\n      sourceWeight: 22,\n      targetWeight: 22,\n    },\n    {\n      source: \"12\",\n      target: \"12\",\n      sourceWeight: 19,\n      targetWeight: 19,\n    },\n    {\n      source: \"28\",\n      target: \"19\",\n      sourceWeight: 34,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"4\",\n      sourceWeight: 16,\n      targetWeight: 16,\n    },\n    {\n      source: \"11\",\n      target: \"10\",\n      sourceWeight: 32,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"28\",\n      sourceWeight: 14,\n      targetWeight: 14,\n    },\n    {\n      source: \"18\",\n      target: \"18\",\n      sourceWeight: 12,\n      targetWeight: 12,\n    },\n    {\n      source: \"26\",\n      target: \"26\",\n      sourceWeight: 11,\n      targetWeight: 11,\n    },\n    {\n      source: \"28\",\n      target: \"13\",\n      sourceWeight: 20,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      sourceWeight: 17,\n      targetWeight: 2,\n    },\n    {\n      source: \"19\",\n      target: \"13\",\n      sourceWeight: 17,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"17\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"6\",\n      target: \"6\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"19\",\n      sourceWeight: 14,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"5\",\n      sourceWeight: 7,\n      targetWeight: 7,\n    },\n    {\n      source: \"21\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 4,\n    },\n    {\n      source: \"25\",\n      target: \"19\",\n      sourceWeight: 10,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"0\",\n      sourceWeight: 5,\n      targetWeight: 5,\n    },\n    {\n      source: \"3\",\n      target: \"13\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"19\",\n      sourceWeight: 5,\n      targetWeight: 4,\n    },\n    {\n      source: \"19\",\n      target: \"12\",\n      sourceWeight: 9,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"19\",\n      sourceWeight: 8,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"22\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"24\",\n      target: \"24\",\n      sourceWeight: 4,\n      targetWeight: 4,\n    },\n    {\n      source: \"26\",\n      target: \"3\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"16\",\n      sourceWeight: 7,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"16\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"10\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"22\",\n      target: \"13\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"20\",\n      sourceWeight: 3,\n      targetWeight: 3,\n    },\n    {\n      source: \"1\",\n      target: \"26\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"19\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"12\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"7\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"3\",\n      sourceWeight: 6,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"7\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"13\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 2,\n    },\n    {\n      source: \"22\",\n      target: \"16\",\n      sourceWeight: 5,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"21\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"23\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"29\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"28\",\n      target: \"17\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"15\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"17\",\n      target: \"12\",\n      sourceWeight: 4,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"27\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"14\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 2,\n    },\n    {\n      source: \"18\",\n      target: \"29\",\n      sourceWeight: 3,\n      targetWeight: 1,\n    },\n    {\n      source: \"25\",\n      target: \"26\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"9\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"7\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"12\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"20\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"13\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"6\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"17\",\n      target: \"3\",\n      sourceWeight: 3,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"24\",\n      target: \"26\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"16\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"21\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"29\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"14\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"4\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"15\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"13\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"1\",\n      sourceWeight: 1,\n      targetWeight: 1,\n    },\n    {\n      source: \"23\",\n      target: \"17\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"19\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"3\",\n      sourceWeight: 2,\n      targetWeight: 0,\n    },\n    {\n      source: \"29\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"21\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"22\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"26\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"17\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"5\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"12\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"20\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"21\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"6\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"1\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"6\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"25\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"27\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"18\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"0\",\n      target: \"26\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"19\",\n      target: \"7\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"8\",\n      target: \"19\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n    {\n      source: \"28\",\n      target: \"29\",\n      sourceWeight: 1,\n      targetWeight: 0,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/circular-arc-diagram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"mds\", mds);\nconst colors = [\n  \"rgb(91, 143, 249)\",\n  \"rgb(90, 216, 166)\",\n  \"rgb(93, 112, 146)\",\n  \"rgb(246, 189, 22)\",\n  \"rgb(232, 104, 74)\",\n  \"rgb(109, 200, 236)\",\n  \"rgb(146, 112, 202)\",\n  \"rgb(255, 157, 77)\",\n  \"rgb(38, 154, 153)\",\n  \"rgb(227, 137, 163)\",\n];\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  linkCenter: true,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"edge-tooltip\",\n        formatText: function formatText(model) {\n          const text = `source: ${model.sourceName}<br/> target: ${model.targetName}`;\n          return text;\n        },\n      },\n    ],\n  },\n  defaultNode: {\n    style: {\n      opacity: 0.8,\n      lineWidth: 1,\n      stroke: \"#999\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n    style: {\n      opacity: 0.6,\n      lineAppendWidth: 3,\n    },\n  },\n});\n\nfunction scaleNodeProp(nodes, propName, refPropName, dataRange, outRange) {\n  const outLength = outRange[1] - outRange[0];\n  const dataLength = dataRange[1] - dataRange[0];\n  nodes.forEach(function (n) {\n    n[propName] =\n      ((n[refPropName] - dataRange[0]) * outLength) / dataLength + outRange[0];\n  });\n}\n\nconst origin = [width / 2, height / 2];\nconst radius = width < height ? width / 3 : height / 3;\nconst { edges } = data;\nconst { nodes } = data;\nconst nodeMap = new Map();\nconst clusterMap = new Map();\nlet clusterId = 0;\nconst n = nodes.length;\nconst angleSep = (Math.PI * 2) / n;\nnodes.forEach(function (node, i) {\n  const angle = i * angleSep;\n  node.x = radius * Math.cos(angle) + origin[0];\n  node.y = radius * Math.sin(angle) + origin[1];\n  node.angle = angle;\n  nodeMap.set(node.id, node);\n\n  if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n    clusterMap.set(node.cluster, clusterId);\n    clusterId++;\n  }\n\n  const id = clusterMap.get(node.cluster);\n\n  if (node.style) {\n    node.style.fill = colors[id % colors.length];\n  } else {\n    node.style = {\n      fill: colors[id % colors.length],\n    };\n  }\n\n  node.label = node.name;\n  node.labelCfg = {\n    position: \"center\",\n    style: {\n      rotate: angle,\n      rotateCenter: \"lefttop\",\n      textAlign: \"start\",\n    },\n  };\n});\nedges.forEach((edge) => {\n  edge.type = \"quadratic\";\n  const source = nodeMap.get(edge.source);\n  const target = nodeMap.get(edge.target);\n  edge.controlPoints = [\n    {\n      x: origin[0],\n      y: origin[1],\n    },\n  ];\n  edge.color = source.style.fill;\n  edge.sourceName = source.name;\n  edge.targetName = target.name;\n});\nlet maxValue = -9999;\nlet minValue = 9999;\nnodes.forEach(function (k) {\n  if (maxValue < k.value) maxValue = k.value;\n  if (minValue > k.value) minValue = k.value;\n});\nconst sizeRange = [3, 30];\nconst sizeDataRange = [minValue, maxValue];\nscaleNodeProp(nodes, \"size\", \"value\", sizeDataRange, sizeRange);\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/circular-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/circular-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", circular);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"circular\",\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\nconst me = this;\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nlayoutConfigTranslation();\nsetInterval(function () {\n  layoutConfigTranslation();\n}, 11500);\n\nfunction layoutConfigTranslation() {\n  setTimeout(function () {\n    me.setData({\n      discription:\n        \"Circular layout, radius = 200, divisions = 5, ordering: degree\",\n    });\n    me.graph.updateLayout({\n      radius: 200,\n      startAngle: Math.PI / 4,\n      endAngle: Math.PI,\n      divisions: 5,\n      ordering: \"degree\",\n    });\n  }, 1000);\n  setTimeout(function () {\n    me.setData({\n      discription:\n        \"Circular layout, radius = 200, divisions = 3, ordering: degree\",\n    });\n    me.graph.updateLayout({\n      startAngle: Math.PI / 4,\n      endAngle: Math.PI,\n      divisions: 3,\n    });\n  }, 2500);\n  setTimeout(function () {\n    me.setData({\n      discription:\n        \"Circular layout, radius = 200, divisions = 8, ordering: degree\",\n    });\n    me.graph.updateLayout({\n      radius: 200,\n      startAngle: 0,\n      endAngle: Math.PI / 2,\n      divisions: 8,\n    });\n  }, 4000);\n  setTimeout(function () {\n    me.setData({\n      discription:\n        \"Circular layout, radius = 10～300(spiral), endAngle: PI, divisions = 1, ordering: degree\",\n    });\n    me.graph.updateLayout({\n      radius: null,\n      startRadius: 10,\n      endRadius: 300,\n      divisions: 1,\n      startAngle: 0,\n      endAngle: Math.PI,\n    });\n  }, 5500);\n  setTimeout(function () {\n    me.setData({\n      discription:\n        \"Circular layout, radius = 10～300(spiral),endAngle: 2 * PI, divisions= 1, ordering: degree\",\n    });\n    me.graph.updateLayout({\n      endAngle: 2 * Math.PI,\n    });\n  }, 7000);\n  setTimeout(function () {\n    me.setData({\n      discription: \"Circular layout, radius = 200, ordering: degree\",\n    });\n    me.graph.updateLayout({\n      radius: 200,\n    });\n  }, 8500);\n  setTimeout(function () {\n    me.setData({\n      discription: \"Circular layout, radius = 200, ordering: topology\",\n    });\n    me.graph.updateLayout({\n      radius: 200,\n      ordering: \"topology\",\n    });\n  }, 10000);\n}\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/cluster-grid/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"0\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"0\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"0\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"0\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"3\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"0\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"0\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"0\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"3\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"3\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"2\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"2\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"4\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"2\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"2\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"2\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"1\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"4\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"4\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"4\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"0\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"2\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"2\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"2\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"3\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"4\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"4\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"1\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"1\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"4\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"4\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"1\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst colors = [\n  \"#BDD2FD\",\n  \"#BDEFDB\",\n  \"#C2C8D5\",\n  \"#FBE5A2\",\n  \"#F6C3B7\",\n  \"#B6E3F5\",\n  \"#D3C6EA\",\n  \"#FFD8B8\",\n  \"#AAD8D8\",\n  \"#FFD6E7\",\n];\nconst strokes = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#E8684A\",\n  \"#6DC8EC\",\n  \"#9270CA\",\n  \"#FF9D4D\",\n  \"#269A99\",\n  \"#FF99C3\",\n];\n\nconst { nodes } = data;\nconst clusterMap = new Map();\nlet clusterId = 0;\nnodes.forEach(function (node) {\n  // cluster\n  if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n    clusterMap.set(node.cluster, clusterId);\n    clusterId++;\n  }\n  const cid = clusterMap.get(node.cluster);\n  if (!node.style) node.style = {};\n  node.style.fill = colors[cid % colors.length];\n  node.style.stroke = strokes[cid % strokes.length];\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/cluster-grid/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"grid\", grid);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"grid\",\n    begin: [20, 20],\n    width: width - 20,\n    height: height - 20,\n    sortBy: \"cluster\",\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/custom-bi-graph/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"A\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"1\",\n      label: \"B\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"2\",\n      label: \"C\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"3\",\n      label: \"D\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"4\",\n      label: \"E\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"5\",\n      label: \"F\",\n      cluster: \"part1\",\n    },\n    {\n      id: \"6\",\n      label: \"a\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"7\",\n      label: \"b\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"8\",\n      label: \"c\",\n      cluster: \"part2\",\n    },\n    {\n      id: \"9\",\n      label: \"d\",\n      cluster: \"part2\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"6\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"1\",\n      target: \"6\",\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n    },\n    {\n      source: \"1\",\n      target: \"7\",\n    },\n    {\n      source: \"2\",\n      target: \"8\",\n    },\n    {\n      source: \"2\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"6\",\n    },\n    {\n      source: \"3\",\n      target: \"8\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n    },\n    {\n      source: \"5\",\n      target: \"9\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/custom-bi-graph/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"bigraphLayout\", {\n  execute() {\n    const self = this;\n    const center = self.center || [0, 0];\n    const biSep = self.biSep || 100;\n    const nodeSep = self.nodeSep || 20;\n    const nodeSize = self.nodeSize || 20;\n    const direction = self.direction || \"horizontal\";\n    let part1Pos = 0;\n    let part2Pos = 0;\n\n    if (direction === \"horizontal\") {\n      part1Pos = center[0] - biSep / 2;\n      part2Pos = center[0] + biSep / 2;\n    }\n\n    const { nodes, edges } = self;\n    const part1Nodes = [];\n    const part2Nodes = [];\n    const part1NodeMap = new Map();\n    const part2NodeMap = new Map();\n    nodes.forEach(function (node, i) {\n      if (node.cluster === \"part1\") {\n        part1Nodes.push(node);\n        part1NodeMap.set(node.id, i);\n      } else {\n        part2Nodes.push(node);\n        part2NodeMap.set(node.id, i);\n      }\n    });\n    part1Nodes.forEach(function (p1n) {\n      let index = 0;\n      let adjCount = 0;\n      edges.forEach(function (edge) {\n        const sourceId = edge.source;\n        const targetId = edge.target;\n\n        if (sourceId === p1n.id) {\n          index += part2NodeMap.get(targetId);\n          adjCount += 1;\n        } else if (targetId === p1n.id) {\n          index += part2NodeMap.get(sourceId);\n          adjCount += 1;\n        }\n      });\n      index /= adjCount;\n      p1n.index = index;\n    });\n    part1Nodes.sort(function (a, b) {\n      return a.index - b.index;\n    });\n    part2Nodes.forEach(function (p2n) {\n      let index = 0;\n      let adjCount = 0;\n      edges.forEach(function (edge) {\n        const sourceId = edge.source;\n        const targetId = edge.target;\n\n        if (sourceId === p2n.id) {\n          index += part1NodeMap.get(targetId);\n          adjCount += 1;\n        } else if (targetId === p2n.id) {\n          index += part1NodeMap.get(sourceId);\n          adjCount += 1;\n        }\n      });\n      index /= adjCount;\n      p2n.index = index;\n    });\n    part2Nodes.sort(function (a, b) {\n      return a.index - b.index;\n    });\n    const hLength =\n      part1Nodes.length > part2Nodes.length\n        ? part1Nodes.length\n        : part2Nodes.length;\n    const height = hLength * (nodeSep + nodeSize);\n    let begin = center[1] - height / 2;\n\n    if (direction === \"vertical\") {\n      begin = center[0] - height / 2;\n    }\n\n    part1Nodes.forEach(function (p1n, i) {\n      if (direction === \"horizontal\") {\n        p1n.x = part1Pos;\n        p1n.y = begin + i * (nodeSep + nodeSize);\n      } else {\n        p1n.x = begin + i * (nodeSep + nodeSize);\n        p1n.y = part1Pos;\n      }\n    });\n    part2Nodes.forEach(function (p2n, i) {\n      if (direction === \"horizontal\") {\n        p2n.x = part2Pos;\n        p2n.y = begin + i * (nodeSep + nodeSize);\n      } else {\n        p2n.x = begin + i * (nodeSep + nodeSize);\n        p2n.y = part2Pos;\n      }\n    });\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"bigraphLayout\",\n    biSep: 300,\n    nodeSep: 20,\n    nodeSize: 20,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n    style: {\n      fill: \"#C6E5FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n  },\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"dagre\",\n    rankdir: \"LR\",\n    align: \"DL\",\n    nodesepFunc: () => 1,\n    ranksepFunc: () => 1,\n  },\n  defaultNode: {\n    size: [30, 20],\n    type: \"rect\",\n    style: {\n      lineWidth: 2,\n      stroke: \"#5B8FF9\",\n      fill: \"#C6E5FF\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre-UL/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"7\",\n    },\n    {\n      source: \"5\",\n      target: \"8\",\n    },\n    {\n      source: \"8\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"9\",\n    },\n    {\n      source: \"3\",\n      target: \"9\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre-UL/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"dagre\",\n    rankdir: \"LR\",\n    align: \"UL\",\n    controlPoints: true,\n    nodesepFunc: () => 1,\n    ranksepFunc: () => 1,\n  },\n  defaultNode: {\n    size: [30, 20],\n    type: \"rect\",\n    style: {\n      lineWidth: 2,\n      stroke: \"#5B8FF9\",\n      fill: \"#C6E5FF\",\n    },\n  },\n  defaultEdge: {\n    type: \"polyline\",\n    size: 1,\n    color: \"#e2e2e2\",\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n      radius: 20,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre-combo/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      comboId: \"A\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      comboId: \"B\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      comboId: \"A\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      comboId: \"C\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      comboId: \"C\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      comboId: \"A\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      comboId: \"B\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      comboId: \"B\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"1\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n    },\n    {\n      source: \"1\",\n      target: \"6\",\n    },\n    {\n      source: \"1\",\n      target: \"7\",\n    },\n    {\n      source: \"3\",\n      target: \"8\",\n    },\n    {\n      source: \"3\",\n      target: \"9\",\n    },\n    {\n      source: \"5\",\n      target: \"10\",\n    },\n    {\n      source: \"5\",\n      target: \"11\",\n    },\n  ],\n  combos: [\n    {\n      id: \"A\",\n      label: \"combo A\",\n      style: {\n        fill: \"#C4E3B2\",\n        stroke: \"#C4E3B2\",\n      },\n    },\n    {\n      id: \"B\",\n      label: \"combo B\",\n      style: {\n        stroke: \"#99C0ED\",\n        fill: \"#99C0ED\",\n      },\n    },\n    {\n      id: \"C\",\n      label: \"combo C\",\n      style: {\n        stroke: \"#eee\",\n        fill: \"#eee\",\n      },\n    },\n  ],\n};\n\ndata.nodes.forEach((node) => {\n  switch (node.ComboId) {\n    case \"A\":\n      node.style = {\n        fill: \"#C4E3B2\",\n        stroke: \"#aaa\",\n      };\n      break;\n    case \"B\":\n      node.style = {\n        fill: \"#99C0ED\",\n        stroke: \"#aaa\",\n      };\n      break;\n    case \"C\":\n      node.style = {\n        fill: \"#eee\",\n        stroke: \"#aaa\",\n      };\n      break;\n    default:\n      node.style = {\n        fill: \"#FDE1CE\",\n        stroke: \"#aaa\",\n      };\n      break;\n  }\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre-combo/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 30,\n  animate: true,\n  groupByTypes: false,\n  modes: {\n    default: [\n      \"drag-combo\",\n      \"drag-node\",\n      \"drag-canvas\",\n      {\n        type: \"collapse-expand-combo\",\n        relayout: false,\n      },\n    ],\n  },\n  layout: {\n    type: \"dagre\",\n    sortByCombo: false,\n    ranksep: 10,\n    nodesep: 10,\n  },\n  defaultNode: {\n    size: [60, 30],\n    type: \"rect\",\n    anchorPoints: [\n      [0.5, 0],\n      [0.5, 1],\n    ],\n  },\n  defaultEdge: {\n    type: \"line\",\n  },\n  defaultCombo: {\n    type: \"rect\",\n    style: {\n      fillOpacity: 0.1,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/dagre-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 30,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"dagre\",\n    nodeSize: [40, 20],\n    nodesep: 1,\n    ranksep: 1,\n  },\n  animate: true,\n  defaultNode: {\n    size: [40, 20],\n    type: \"rect\",\n    style: {\n      lineWidth: 2,\n      stroke: \"#5B8FF9\",\n      fill: \"#C6E5FF\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\nconst me = this;\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nlayoutConfigTranslation();\n\nfunction layoutConfigTranslation() {\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Dagre layout, rank seperation: 10, node seperation in same level: 1, layout direction: Top->Bottom, alignment of nodes: DL\",\n    });\n    me.graph.updateLayout({\n      ranksep: 10,\n    });\n  }, 1000);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: DL\",\n    });\n    me.graph.updateLayout({\n      nodesep: 5,\n    });\n  }, 2500);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UL\",\n    });\n    me.graph.updateLayout({\n      align: \"UL\",\n    });\n  }, 4000);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: UR\",\n    });\n    me.graph.updateLayout({\n      align: \"UR\",\n    });\n  }, 5500);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Dagre layout, rank seperation: 10, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n    });\n    me.graph.updateLayout({\n      rankdir: \"LR\",\n      align: \"DL\",\n    });\n  }, 7000);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Dagre layout, rank seperation: 30, node seperation in same level: 5, layout direction: Left->Right, alignment of nodes: Down Right, alignment of nodes: DL\",\n    });\n    me.graph.updateLayout({\n      ranksep: 30,\n    });\n  }, 8500);\n}\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/data-change/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst data2 = {\n  nodes: [\n    {\n      id: \"b0\",\n      label: \"0\",\n    },\n    {\n      id: \"b1\",\n      label: \"1\",\n    },\n    {\n      id: \"b2\",\n      label: \"2\",\n    },\n    {\n      id: \"b3\",\n      label: \"3\",\n    },\n    {\n      id: \"b4\",\n      label: \"4\",\n    },\n    {\n      id: \"b5\",\n      label: \"5\",\n    },\n  ],\n  edges: [\n    {\n      id: \"be1\",\n      source: \"b0\",\n      target: \"b1\",\n    },\n    {\n      id: \"be2\",\n      source: \"b0\",\n      target: \"b2\",\n    },\n    {\n      id: \"be3\",\n      source: \"b0\",\n      target: \"b3\",\n    },\n    {\n      id: \"be4\",\n      source: \"b0\",\n      target: \"b4\",\n    },\n    {\n      id: \"be5\",\n      source: \"b0\",\n      target: \"b5\",\n    },\n  ],\n};\n\nexport { data, data2 };\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/data-change/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { data, data2 } from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"force\",\n  },\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nsetTimeout(() => {\n  graph.changeData(data2);\n}, 2500);\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/degree-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/degree-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", circular);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"circular\",\n    ordering: \"degree\",\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/division-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/division-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", circular);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"circular\",\n    divisions: 5,\n    radius: 200,\n    startAngle: Math.PI / 4,\n    endAngle: Math.PI,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-bubbles/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      value: 10,\n      cluster: \"a\",\n      description: \"this is node 0, \\nand the value of it is 10\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      value: 20,\n      cluster: \"b\",\n      description: \"this is node 1, \\nand the value of it is 20\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      value: 5,\n      cluster: \"a\",\n      description: \"this is node 2, \\nand the value of it is 5\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      value: 10,\n      cluster: \"a\",\n      description: \"this is node 3, \\nand the value of it is 10\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      value: 12,\n      cluster: \"c\",\n      subCluster: \"sb\",\n      description: \"this is node 4, \\nand the value of it is 12\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      value: 18,\n      cluster: \"c\",\n      subCluster: \"sa\",\n      description: \"this is node 5, \\nand the value of it is 18\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      value: 3,\n      cluster: \"c\",\n      subCluster: \"sa\",\n      description: \"this is node 6, \\nand the value of it is 3\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      value: 7,\n      cluster: \"b\",\n      subCluster: \"sa\",\n      description: \"this is node 7, \\nand the value of it is 7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      value: 21,\n      cluster: \"d\",\n      subCluster: \"sb\",\n      description: \"this is node 8, \\nand the value of it is 21\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      value: 9,\n      cluster: \"d\",\n      subCluster: \"sb\",\n      description: \"this is node 9, \\nand the value of it is 9\",\n    },\n  ],\n  edges: [],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-bubbles/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n    nodeStrength: 30,\n    collideStrength: 0.7,\n    alphaDecay: 0.01,\n    preventOverlap: true,\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n  defaultNode: {\n    size: [10, 10],\n  },\n});\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value,\n      enumerable: true,\n      configurable: true,\n      writable: true,\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nconst colors = [\n  \"#BDD2FD\",\n  \"#BDEFDB\",\n  \"#C2C8D5\",\n  \"#FBE5A2\",\n  \"#F6C3B7\",\n  \"#B6E3F5\",\n  \"#D3C6EA\",\n  \"#FFD8B8\",\n  \"#AAD8D8\",\n  \"#FFD6E7\",\n];\nconst strokes = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#E8684A\",\n  \"#6DC8EC\",\n  \"#9270CA\",\n  \"#FF9D4D\",\n  \"#269A99\",\n  \"#FF99C3\",\n];\nconst { nodes } = data;\nconst nodeMap = new Map();\nconst clusterMap = new Map();\nlet clusterId = 0;\nnodes.forEach((node) => {\n  nodeMap.set(node.id, node);\n\n  if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n    clusterMap.set(node.cluster, clusterId);\n    clusterId++;\n  }\n\n  const cid = clusterMap.get(node.cluster);\n  if (!node.style) node.style = {};\n  node.style.fill = colors[cid % colors.length];\n  node.style.stroke = strokes[cid % strokes.length];\n  node.x = width / 2 + 200 * (Math.random() - 0.5);\n  node.y = height / 2 + 200 * (Math.random() - 0.5);\n});\nlet maxNodeValue = -9999;\nlet minNodeValue = 9999;\nnodes.forEach(function (n) {\n  if (maxNodeValue < n.value) maxNodeValue = n.value;\n  if (minNodeValue > n.value) minNodeValue = n.value;\n});\nconst nodeSizeRange = [10, 30];\nconst nodeSizeDataRange = [minNodeValue, maxNodeValue];\nscaleNodeProp(nodes, \"size\", \"value\", nodeSizeDataRange, nodeSizeRange);\nnodes.forEach(function (node) {\n  node.oriSize = node.size;\n  node.oriLabel = node.label;\n});\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get(\"model\");\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\ngraph.on(\"node:dragstart\", function (e) {\n  graph.layout();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:drag\", function (e) {\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:dragend\", function (e) {\n  e.item.get(\"model\").fx = null;\n  e.item.get(\"model\").fy = null;\n});\ngraph.on(\"node:click\", function (e) {\n  const node = e.item;\n  const states = node.getStates();\n  let clicked = false;\n  const model = node.getModel();\n  let size = 200;\n  let labelText = `NODE: ${model.id}\\n${model.description}`;\n  states.forEach(function (state) {\n    if (state === \"click\") {\n      clicked = true;\n      size = model.oriSize;\n      labelText = model.oriLabel;\n    }\n  });\n  graph.setItemState(node, \"click\", !clicked);\n  graph.updateItem(node, {\n    size,\n    label: labelText,\n  });\n  graph.layout();\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n\nfunction scaleNodeProp(elements, propName, refPropName, dataRange, outRange) {\n  const outLength = outRange[1] - outRange[0];\n  const dataLength = dataRange[1] - dataRange[0];\n  elements.forEach(function (n) {\n    if (propName.split(\".\")[0] === \"style\") {\n      if (n.style) {\n        n.style[propName.split(\".\")[1]] =\n          ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n          outRange[0];\n      } else {\n        n.style = _defineProperty(\n          {},\n          propName.split(\".\")[1],\n          ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n            outRange[0],\n        );\n      }\n    } else {\n      n[propName] =\n        ((n[refPropName] - dataRange[0]) * outLength) / dataLength +\n        outRange[0];\n    }\n  });\n}\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-constrained-in-rect/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-constrained-in-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\nconst { nodes } = data;\nconst constrainBox = {\n  x: 60,\n  y: 50,\n  width: 500,\n  height: 150,\n};\n\nconst onTick = () => {\n  let minx = 99999999;\n  let maxx = -99999999;\n  let miny = 99999999;\n  let maxy = -99999999;\n  let maxsize = -9999999;\n  nodes.forEach((node) => {\n    if (minx > node.x) {\n      minx = node.x;\n    }\n\n    if (maxx < node.x) {\n      maxx = node.x;\n    }\n\n    if (miny > node.y) {\n      miny = node.y;\n    }\n\n    if (maxy < node.y) {\n      maxy = node.y;\n    }\n\n    if (maxsize < node.size) {\n      maxsize = node.size;\n    }\n  });\n  const scalex = (constrainBox.width - maxsize) / (maxx - minx);\n  const scaley = (constrainBox.height - maxsize) / (maxy - miny);\n  nodes.forEach((node) => {\n    node.x = (node.x - minx) * scalex + constrainBox.x;\n    node.y = (node.y - miny) * scaley + constrainBox.y;\n  });\n};\n\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n    onTick,\n  },\n  defaultNode: {\n    size: 15,\n  },\n});\ngraph.data({\n  nodes: data.nodes,\n  edges: data.edges.map(function (edge, i) {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-configuration-translate/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"force\",\n    linkDistance: 50,\n    center: [width / 2, height / 2],\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nconst my = this;\nsetInterval(() => {\n  layoutConfigTranslation();\n}, 5000);\n\nfunction layoutConfigTranslation() {\n  setTimeout(() => {\n    my.setData({\n      desc: \"Force layout, linkDistance = 100, preventOverlap: true\",\n    });\n    my.graph.updateLayout({\n      linkDistance: 100,\n      preventOverlap: true,\n      nodeSize: 20,\n    });\n  }, 2500);\n  setTimeout(() => {\n    my.setData({\n      desc: \"Force layout, linkDistance = 50, preventOverlap: false\",\n    });\n    my.graph.updateLayout({\n      linkDistance: 50,\n      preventOverlap: false,\n    });\n  }, 5000);\n}\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-force-clustering/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"4\",\n      sim_name: \"AFG\",\n      name: \"Afghanistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 57.847,\n      weight: 73.355,\n    },\n    {\n      id: \"8\",\n      sim_name: \"ALB\",\n      name: \"Albania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 556.3332546,\n      weight: 1214.363,\n    },\n    {\n      id: \"10\",\n      sim_name: \"ATA\",\n      name: \"Antarctica\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2829.367,\n      weight: 11113.564,\n    },\n    {\n      id: \"12\",\n      sim_name: \"DZA\",\n      name: \"Algeria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105217.8151,\n      weight: 146857.7593,\n    },\n    {\n      id: \"16\",\n      sim_name: \"ASM\",\n      name: \"American Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 97.623,\n      weight: 982.085,\n    },\n    {\n      id: \"20\",\n      sim_name: \"AND\",\n      name: \"Andorra\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 787.166,\n      weight: 1240.056,\n    },\n    {\n      id: \"24\",\n      sim_name: \"AGO\",\n      name: \"Angola\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.366,\n      weight: 0.211,\n    },\n    {\n      id: \"28\",\n      sim_name: \"ATG\",\n      name: \"Antigua and Barbuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30831.87949,\n      weight: 72065.168,\n    },\n    {\n      id: \"31\",\n      sim_name: \"AZE\",\n      name: \"Azerbaijan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46917.41553,\n      weight: 45114.87169,\n    },\n    {\n      id: \"32\",\n      sim_name: \"ARG\",\n      name: \"Argentina\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11347322.78,\n      weight: 38200326.47,\n    },\n    {\n      id: \"36\",\n      sim_name: \"AUS\",\n      name: \"Australia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10983308.38,\n      weight: 32933532.17,\n    },\n    {\n      id: \"40\",\n      sim_name: \"AUT\",\n      name: \"Austria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 714932.2545,\n      weight: 1683224.24,\n    },\n    {\n      id: \"44\",\n      sim_name: \"BHS\",\n      name: \"Bahamas\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 427.395,\n      weight: 969.33,\n    },\n    {\n      id: \"48\",\n      sim_name: \"BHR\",\n      name: \"Bahrain\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22229.96717,\n      weight: 53856.78001,\n    },\n    {\n      id: \"50\",\n      sim_name: \"BGD\",\n      name: \"Bangladesh\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22330.75971,\n      weight: 86944.1853,\n    },\n    {\n      id: \"51\",\n      sim_name: \"ARM\",\n      name: \"Armenia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 206.6709842,\n      weight: 223.5014745,\n    },\n    {\n      id: \"52\",\n      sim_name: \"BRB\",\n      name: \"Barbados\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4790.290139,\n      weight: 7428.399008,\n    },\n    {\n      id: \"56\",\n      sim_name: \"BEL\",\n      name: \"Belgium\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1896499.584,\n      weight: 3625004.302,\n    },\n    {\n      id: \"60\",\n      sim_name: \"BMU\",\n      name: \"Bermuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 100.264,\n      weight: 250,\n    },\n    {\n      id: \"64\",\n      sim_name: \"BTN\",\n      name: \"Bhutan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1100.663269,\n      weight: 3990.493739,\n    },\n    {\n      id: \"68\",\n      sim_name: \"BOL\",\n      name: \"Bolivia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 107152.4673,\n      weight: 117438.7654,\n    },\n    {\n      id: \"70\",\n      sim_name: \"BIH\",\n      name: \"Bosnia Herzegovina\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10652.90002,\n      weight: 25582.17925,\n    },\n    {\n      id: \"72\",\n      sim_name: \"BWA\",\n      name: \"Botswana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7635.744989,\n      weight: 24790.60442,\n    },\n    {\n      id: \"76\",\n      sim_name: \"BRA\",\n      name: \"Brazil\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7114534.381,\n      weight: 22441162.41,\n    },\n    {\n      id: \"84\",\n      sim_name: \"BLZ\",\n      name: \"Belize\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28037.35873,\n      weight: 77441.91463,\n    },\n    {\n      id: \"90\",\n      sim_name: \"SLB\",\n      name: \"Solomon Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"92\",\n      sim_name: \"VGB\",\n      name: \"British Virgin Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15328.77,\n      weight: 51127.16,\n    },\n    {\n      id: \"96\",\n      sim_name: \"BRN\",\n      name: \"Brunei Darussalam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46.438,\n      weight: 35.416,\n    },\n    {\n      id: \"100\",\n      sim_name: \"BGR\",\n      name: \"Bulgaria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1258892.481,\n      weight: 4147538.49,\n    },\n    {\n      id: \"104\",\n      sim_name: \"MMR\",\n      name: \"Myanmar\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 599204.3703,\n      weight: 1218435.323,\n    },\n    {\n      id: \"108\",\n      sim_name: \"BDI\",\n      name: \"Burundi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 523.644,\n      weight: 2841.873,\n    },\n    {\n      id: \"112\",\n      sim_name: \"BLR\",\n      name: \"Belarus\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 52538.61827,\n      weight: 137692.36,\n    },\n    {\n      id: \"116\",\n      sim_name: \"KHM\",\n      name: \"Cambodia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 167651.1526,\n      weight: 265914.0128,\n    },\n    {\n      id: \"120\",\n      sim_name: \"CMR\",\n      name: \"Cameroon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1263.861619,\n      weight: 2235.140891,\n    },\n    {\n      id: \"124\",\n      sim_name: \"CAN\",\n      name: \"Canada\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8982050.268,\n      weight: 24667183.74,\n    },\n    {\n      id: \"132\",\n      sim_name: \"CPV\",\n      name: \"Cabo Verde\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2344.96,\n      weight: 4095.993,\n    },\n    {\n      id: \"140\",\n      sim_name: \"CAF\",\n      name: \"Central African Rep.\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"144\",\n      sim_name: \"LKA\",\n      name: \"Sri Lanka\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 181369.2559,\n      weight: 489552.3718,\n    },\n    {\n      id: \"152\",\n      sim_name: \"CHL\",\n      name: \"Chile\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 412283.3672,\n      weight: 270900.3596,\n    },\n    {\n      id: \"156\",\n      sim_name: \"CHN\",\n      name: \"China\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1490564.833,\n      weight: 2304819.508,\n    },\n    {\n      id: \"170\",\n      sim_name: \"COL\",\n      name: \"Colombia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46615.80539,\n      weight: 52684.28073,\n    },\n    {\n      id: \"188\",\n      sim_name: \"CRI\",\n      name: \"Costa Rica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17710.68444,\n      weight: 28937.25094,\n    },\n    {\n      id: \"191\",\n      sim_name: \"HRV\",\n      name: \"Croatia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 192245.2115,\n      weight: 580710.257,\n    },\n    {\n      id: \"192\",\n      sim_name: \"CUB\",\n      name: \"Cuba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 793.321,\n      weight: 1620.825,\n    },\n    {\n      id: \"196\",\n      sim_name: \"CYP\",\n      name: \"Cyprus\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 47981.18874,\n      weight: 126474.07,\n    },\n    {\n      id: \"203\",\n      sim_name: \"CZE\",\n      name: \"Czech Rep.\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 922618.0722,\n      weight: 3054247.331,\n    },\n    {\n      id: \"204\",\n      sim_name: \"BEN\",\n      name: \"Benin\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12987.78421,\n      weight: 55672.72433,\n    },\n    {\n      id: \"208\",\n      sim_name: \"DNK\",\n      name: \"Denmark\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 701199.8922,\n      weight: 1992757.212,\n    },\n    {\n      id: \"212\",\n      sim_name: \"DMA\",\n      name: \"Dominica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.351,\n      weight: 0.692,\n    },\n    {\n      id: \"214\",\n      sim_name: \"DOM\",\n      name: \"Dominican Rep.\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105510.1813,\n      weight: 210275.29,\n    },\n    {\n      id: \"218\",\n      sim_name: \"ECU\",\n      name: \"Ecuador\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30957.4275,\n      weight: 49399.64362,\n    },\n    {\n      id: \"222\",\n      sim_name: \"SLV\",\n      name: \"El Salvador\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77105.01061,\n      weight: 129245.0661,\n    },\n    {\n      id: \"231\",\n      sim_name: \"ETH\",\n      name: \"Ethiopia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44330.31405,\n      weight: 29794.00055,\n    },\n    {\n      id: \"233\",\n      sim_name: \"EST\",\n      name: \"Estonia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 150772.6292,\n      weight: 458854.905,\n    },\n    {\n      id: \"234\",\n      sim_name: \"FRO\",\n      name: \"Faeroe Isds\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.298,\n      weight: 44.726,\n    },\n    {\n      id: \"242\",\n      sim_name: \"FJI\",\n      name: \"Fiji\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15966.92145,\n      weight: 24119.72685,\n    },\n    {\n      id: \"246\",\n      sim_name: \"FIN\",\n      name: \"Finland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 266364.4975,\n      weight: 753973.3063,\n    },\n    {\n      id: \"251\",\n      sim_name: \"FRA\",\n      name: \"France\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11027310.62,\n      weight: 31368277.85,\n    },\n    {\n      id: \"262\",\n      sim_name: \"DJI\",\n      name: \"Djibouti\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1936.537,\n      weight: 2932.238,\n    },\n    {\n      id: \"266\",\n      sim_name: \"GAB\",\n      name: \"Gabon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2624.516,\n      weight: 10407.907,\n    },\n    {\n      id: \"268\",\n      sim_name: \"GEO\",\n      name: \"Georgia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48754.57507,\n      weight: 158741.3575,\n    },\n    {\n      id: \"270\",\n      sim_name: \"GMB\",\n      name: \"Gambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 38.193,\n      weight: 24.45,\n    },\n    {\n      id: \"275\",\n      sim_name: \"PSE\",\n      name: \"State of Palestine\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16057.14949,\n      weight: 13745.84557,\n    },\n    {\n      id: \"276\",\n      sim_name: \"DEU\",\n      name: \"Germany\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4635549.458,\n      weight: 12647922.94,\n    },\n    {\n      id: \"288\",\n      sim_name: \"GHA\",\n      name: \"Ghana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8210.66114,\n      weight: 28560.44817,\n    },\n    {\n      id: \"292\",\n      sim_name: \"GIB\",\n      name: \"Gibraltar\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 728.465,\n      weight: 809.623,\n    },\n    {\n      id: \"296\",\n      sim_name: \"KIR\",\n      name: \"Kiribati\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.052,\n      weight: 18.562,\n    },\n    {\n      id: \"300\",\n      sim_name: \"GRC\",\n      name: \"Greece\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 263693.016,\n      weight: 644312.8604,\n    },\n    {\n      id: \"304\",\n      sim_name: \"GRL\",\n      name: \"Greenland\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"308\",\n      sim_name: \"GRD\",\n      name: \"Grenada\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4657.914,\n      weight: 9335.526,\n    },\n    {\n      id: \"316\",\n      sim_name: \"GUM\",\n      name: \"Guam\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 527.033,\n      weight: 982.642,\n    },\n    {\n      id: \"320\",\n      sim_name: \"GTM\",\n      name: \"Guatemala\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 20968.96314,\n      weight: 22893.23335,\n    },\n    {\n      id: \"324\",\n      sim_name: \"GIN\",\n      name: \"Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2636.849,\n      weight: 7422.12,\n    },\n    {\n      id: \"328\",\n      sim_name: \"GUY\",\n      name: \"Guyana\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 334196.3131,\n      weight: 520437.64,\n    },\n    {\n      id: \"332\",\n      sim_name: \"HTI\",\n      name: \"Haiti\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5.134,\n      weight: 16.128,\n    },\n    {\n      id: \"340\",\n      sim_name: \"HND\",\n      name: \"Honduras\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22936.79385,\n      weight: 43129.60369,\n    },\n    {\n      id: \"348\",\n      sim_name: \"HUN\",\n      name: \"Hungary\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2015665.793,\n      weight: 6379394.988,\n    },\n    {\n      id: \"352\",\n      sim_name: \"ISL\",\n      name: \"Iceland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 891.513,\n      weight: 2118.828,\n    },\n    {\n      id: \"360\",\n      sim_name: \"IDN\",\n      name: \"Indonesia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 175738.8156,\n      weight: 544860.3789,\n    },\n    {\n      id: \"364\",\n      sim_name: \"IRN\",\n      name: \"Iran\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7978.124,\n      weight: 20473.686,\n    },\n    {\n      id: \"368\",\n      sim_name: \"IRQ\",\n      name: \"Iraq\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 253.845,\n      weight: 246.151,\n    },\n    {\n      id: \"372\",\n      sim_name: \"IRL\",\n      name: \"Ireland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 166058.1767,\n      weight: 476236.2048,\n    },\n    {\n      id: \"376\",\n      sim_name: \"ISR\",\n      name: \"Israel\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 197912.4336,\n      weight: 431193.8203,\n    },\n    {\n      id: \"381\",\n      sim_name: \"ITA\",\n      name: \"Italy\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1288077.184,\n      weight: 1887032.489,\n    },\n    {\n      id: \"384\",\n      sim_name: \"CIV\",\n      name: \"Cote d'Ivoire\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77750.0467,\n      weight: 254222.8878,\n    },\n    {\n      id: \"388\",\n      sim_name: \"JAM\",\n      name: \"Jamaica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6751.46461,\n      weight: 12484.22296,\n    },\n    {\n      id: \"392\",\n      sim_name: \"JPN\",\n      name: \"Japan\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 189561.3237,\n      weight: 359553.4615,\n    },\n    {\n      id: \"398\",\n      sim_name: \"KAZ\",\n      name: \"Kazakhstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2535465.094,\n      weight: 10562777.14,\n    },\n    {\n      id: \"400\",\n      sim_name: \"JOR\",\n      name: \"Jordan\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2022.699859,\n      weight: 1810.995193,\n    },\n    {\n      id: \"404\",\n      sim_name: \"KEN\",\n      name: \"Kenya\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31813.863,\n      weight: 84144.582,\n    },\n    {\n      id: \"414\",\n      sim_name: \"KWT\",\n      name: \"Kuwait\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28509.72,\n      weight: 41425.612,\n    },\n    {\n      id: \"417\",\n      sim_name: \"KGZ\",\n      name: \"Kyrgyzstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 344.2343218,\n      weight: 452.0188439,\n    },\n    {\n      id: \"418\",\n      sim_name: \"LAO\",\n      name: \"Lao PDR\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 58500.6357,\n      weight: 212304.4463,\n    },\n    {\n      id: \"422\",\n      sim_name: \"LBN\",\n      name: \"Lebanon\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16263.18003,\n      weight: 38974.77174,\n    },\n    {\n      id: \"426\",\n      sim_name: \"LSO\",\n      name: \"Lesotho\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 19865.12276,\n      weight: 54350.43934,\n    },\n    {\n      id: \"428\",\n      sim_name: \"LVA\",\n      name: \"Latvia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 516410.4254,\n      weight: 1643243.015,\n    },\n    {\n      id: \"430\",\n      sim_name: \"LBR\",\n      name: \"Liberia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.35,\n      weight: 53.471,\n    },\n    {\n      id: \"434\",\n      sim_name: \"LBY\",\n      name: \"Libya\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 634.239,\n      weight: 2102.142,\n    },\n    {\n      id: \"440\",\n      sim_name: \"LTU\",\n      name: \"Lithuania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 871039.5602,\n      weight: 2446114.811,\n    },\n    {\n      id: \"442\",\n      sim_name: \"LUX\",\n      name: \"Luxembourg\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68969.99793,\n      weight: 178380.981,\n    },\n    {\n      id: \"450\",\n      sim_name: \"MDG\",\n      name: \"Madagascar\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 950.8530206,\n      weight: 3780.89311,\n    },\n    {\n      id: \"454\",\n      sim_name: \"MWI\",\n      name: \"Malawi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11553.98159,\n      weight: 41269.33681,\n    },\n    {\n      id: \"458\",\n      sim_name: \"MYS\",\n      name: \"Malaysia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 99255.71471,\n      weight: 142965.3262,\n    },\n    {\n      id: \"462\",\n      sim_name: \"MDV\",\n      name: \"Maldives\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.448,\n      weight: 14.6,\n    },\n    {\n      id: \"466\",\n      sim_name: \"MLI\",\n      name: \"Mali\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3143.270747,\n      weight: 11121.96188,\n    },\n    {\n      id: \"470\",\n      sim_name: \"MLT\",\n      name: \"Malta\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 35991.55686,\n      weight: 94799.54871,\n    },\n    {\n      id: \"478\",\n      sim_name: \"MRT\",\n      name: \"Mauritania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 292.538,\n      weight: 627.637,\n    },\n    {\n      id: \"480\",\n      sim_name: \"MUS\",\n      name: \"Mauritius\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17602.67917,\n      weight: 36755.35938,\n    },\n    {\n      id: \"484\",\n      sim_name: \"MEX\",\n      name: \"Mexico\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 571803.2432,\n      weight: 1234860.795,\n    },\n    {\n      id: \"496\",\n      sim_name: \"MNG\",\n      name: \"Mongolia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1328.368,\n      weight: 10672.694,\n    },\n    {\n      id: \"498\",\n      sim_name: \"MDA\",\n      name: \"Moldova\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 59072.0085,\n      weight: 188178.1824,\n    },\n    {\n      id: \"499\",\n      sim_name: \"MNE\",\n      name: \"Montenegro\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2444.455322,\n      weight: 6125.451,\n    },\n    {\n      id: \"504\",\n      sim_name: \"MAR\",\n      name: \"Morocco\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 86884.06321,\n      weight: 161631.8094,\n    },\n    {\n      id: \"508\",\n      sim_name: \"MOZ\",\n      name: \"Mozambique\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68388.81722,\n      weight: 146520.864,\n    },\n    {\n      id: \"512\",\n      sim_name: \"OMN\",\n      name: \"Oman\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 55530.66234,\n      weight: 88434.23327,\n    },\n    {\n      id: \"516\",\n      sim_name: \"NAM\",\n      name: \"Namibia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5168.27047,\n      weight: 7877.053106,\n    },\n    {\n      id: \"524\",\n      sim_name: \"NPL\",\n      name: \"Nepal\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4032.41279,\n      weight: 17770.75769,\n    },\n    {\n      id: \"528\",\n      sim_name: \"NLD\",\n      name: \"Netherlands\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1424347.018,\n      weight: 3125730.04,\n    },\n    {\n      id: \"531\",\n      sim_name: \"CUW\",\n      name: \"Curacao\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 535.691,\n      weight: 2358.613,\n    },\n    {\n      id: \"533\",\n      sim_name: \"ABW\",\n      name: \"Aruba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178879.593,\n      weight: 560431.967,\n    },\n    {\n      id: \"540\",\n      sim_name: \"NCL\",\n      name: \"New Caledonia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 205.777282,\n      weight: 363.439991,\n    },\n    {\n      id: \"548\",\n      sim_name: \"VUT\",\n      name: \"Vanuatu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 160.463,\n      weight: 440.332,\n    },\n    {\n      id: \"554\",\n      sim_name: \"NZL\",\n      name: \"New Zealand\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 33994.85867,\n      weight: 35177.57975,\n    },\n    {\n      id: \"558\",\n      sim_name: \"NIC\",\n      name: \"Nicaragua\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 41294.65615,\n      weight: 85186.87824,\n    },\n    {\n      id: \"562\",\n      sim_name: \"NER\",\n      name: \"Niger\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31152.35763,\n      weight: 44518.07202,\n    },\n    {\n      id: \"566\",\n      sim_name: \"NGA\",\n      name: \"Nigeria\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 323839.5301,\n      weight: 192057.843,\n    },\n    {\n      id: \"579\",\n      sim_name: \"NOR\",\n      name: \"Norway\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2382.344541,\n      weight: 2488.51136,\n    },\n    {\n      id: \"580\",\n      sim_name: \"MNP\",\n      name: \"N. Mariana Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.144,\n      weight: 1.864,\n    },\n    {\n      id: \"581\",\n      sim_name: \"UMI\",\n      name: \"United States Minor Outlying Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.008,\n      weight: 21,\n    },\n    {\n      id: \"585\",\n      sim_name: \"PLW\",\n      name: \"Palau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2.151,\n      weight: 0.22,\n    },\n    {\n      id: \"586\",\n      sim_name: \"PAK\",\n      name: \"Pakistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2412673.261,\n      weight: 4864111.072,\n    },\n    {\n      id: \"591\",\n      sim_name: \"PAN\",\n      name: \"Panama\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10056.54107,\n      weight: 26993.1125,\n    },\n    {\n      id: \"598\",\n      sim_name: \"PNG\",\n      name: \"Papua New Guinea\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 319.374,\n      weight: 2210.48,\n    },\n    {\n      id: \"600\",\n      sim_name: \"PRY\",\n      name: \"Paraguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1009228.641,\n      weight: 3862696.891,\n    },\n    {\n      id: \"604\",\n      sim_name: \"PER\",\n      name: \"Peru\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 91326.10676,\n      weight: 128637.0767,\n    },\n    {\n      id: \"608\",\n      sim_name: \"PHL\",\n      name: \"Philippines\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12041.64316,\n      weight: 16205.94695,\n    },\n    {\n      id: \"616\",\n      sim_name: \"POL\",\n      name: \"Poland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1028089.751,\n      weight: 3186360.963,\n    },\n    {\n      id: \"620\",\n      sim_name: \"PRT\",\n      name: \"Portugal\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92543.15766,\n      weight: 192795.3179,\n    },\n    {\n      id: \"624\",\n      sim_name: \"GNB\",\n      name: \"Guinea-Bissau\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37.268,\n      weight: 135,\n    },\n    {\n      id: \"626\",\n      sim_name: \"TLS\",\n      name: \"Timor-Leste\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.551,\n      weight: 10.883,\n    },\n    {\n      id: \"634\",\n      sim_name: \"QAT\",\n      name: \"Qatar\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6936.324,\n      weight: 11122.252,\n    },\n    {\n      id: \"642\",\n      sim_name: \"ROU\",\n      name: \"Romania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1778677.092,\n      weight: 5301402.18,\n    },\n    {\n      id: \"643\",\n      sim_name: \"RUS\",\n      name: \"Russian Federation\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7440900.086,\n      weight: 23852343.49,\n    },\n    {\n      id: \"646\",\n      sim_name: \"RWA\",\n      name: \"Rwanda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37520.31393,\n      weight: 73367.60768,\n    },\n    {\n      id: \"659\",\n      sim_name: \"KNA\",\n      name: \"Saint Kitts and Nevis\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.062,\n      weight: 0.009,\n    },\n    {\n      id: \"662\",\n      sim_name: \"LCA\",\n      name: \"Saint Lucia\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"670\",\n      sim_name: \"VCT\",\n      name: \"Saint Vincent and the Grenadines\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16002.19104,\n      weight: 17977.52343,\n    },\n    {\n      id: \"674\",\n      sim_name: \"SMR\",\n      name: \"San Marino\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"682\",\n      sim_name: \"SAU\",\n      name: \"Saudi Arabia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92568.76043,\n      weight: 56036.2484,\n    },\n    {\n      id: \"686\",\n      sim_name: \"SEN\",\n      name: \"Senegal\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44740.28095,\n      weight: 98109.85876,\n    },\n    {\n      id: \"688\",\n      sim_name: \"SRB\",\n      name: \"Serbia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 907006.831,\n      weight: 3003936.426,\n    },\n    {\n      id: \"690\",\n      sim_name: \"SYC\",\n      name: \"Seychelles\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 387.548,\n      weight: 246.84,\n    },\n    {\n      id: \"694\",\n      sim_name: \"SLE\",\n      name: \"Sierra Leone\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 147.544,\n      weight: 705.466,\n    },\n    {\n      id: \"699\",\n      sim_name: \"IND\",\n      name: \"India\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 9062980.928,\n      weight: 19031680.14,\n    },\n    {\n      id: \"702\",\n      sim_name: \"SGP\",\n      name: \"Singapore\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 193120.3466,\n      weight: 470488.3668,\n    },\n    {\n      id: \"703\",\n      sim_name: \"SVK\",\n      name: \"Slovakia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 580789.4685,\n      weight: 1589777.797,\n    },\n    {\n      id: \"704\",\n      sim_name: \"VNM\",\n      name: \"Vietnam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3558044.517,\n      weight: 7381230.275,\n    },\n    {\n      id: \"705\",\n      sim_name: \"SVN\",\n      name: \"Slovenia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 75282.28683,\n      weight: 227283.1873,\n    },\n    {\n      id: \"706\",\n      sim_name: \"SOM\",\n      name: \"Somalia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 240.399,\n      weight: 1055,\n    },\n    {\n      id: \"710\",\n      sim_name: \"ZAF\",\n      name: \"South Africa\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 938907.5758,\n      weight: 2190384.881,\n    },\n    {\n      id: \"716\",\n      sim_name: \"ZWE\",\n      name: \"Zimbabwe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6067.581387,\n      weight: 21394.92603,\n    },\n    {\n      id: \"724\",\n      sim_name: \"ESP\",\n      name: \"Spain\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 906018.1944,\n      weight: 1602797.031,\n    },\n    {\n      id: \"729\",\n      sim_name: \"SDN\",\n      name: \"Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18327.14063,\n      weight: 66310.50556,\n    },\n    {\n      id: \"740\",\n      sim_name: \"SUR\",\n      name: \"Suriname\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73211.6794,\n      weight: 83933.84802,\n    },\n    {\n      id: \"748\",\n      sim_name: \"SWZ\",\n      name: \"Swaziland\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6674.46,\n      weight: 16386.136,\n    },\n    {\n      id: \"752\",\n      sim_name: \"SWE\",\n      name: \"Sweden\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 439154.313,\n      weight: 1207272.863,\n    },\n    {\n      id: \"757\",\n      sim_name: \"CHE\",\n      name: \"Switzerland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 492516.8323,\n      weight: 1581172.074,\n    },\n    {\n      id: \"760\",\n      sim_name: \"SYR\",\n      name: \"Syria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4169.742,\n      weight: 7890.447,\n    },\n    {\n      id: \"762\",\n      sim_name: \"TJK\",\n      name: \"Tajikistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 300.162,\n      weight: 712.396,\n    },\n    {\n      id: \"764\",\n      sim_name: \"THA\",\n      name: \"Thailand\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5003324.321,\n      weight: 6926962.31,\n    },\n    {\n      id: \"768\",\n      sim_name: \"TGO\",\n      name: \"Togo\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16809.12488,\n      weight: 43975.34784,\n    },\n    {\n      id: \"772\",\n      sim_name: \"TKL\",\n      name: \"Tokelau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1012.213,\n      weight: 1926.401,\n    },\n    {\n      id: \"776\",\n      sim_name: \"TON\",\n      name: \"Tonga\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.18,\n      weight: 0.011,\n    },\n    {\n      id: \"780\",\n      sim_name: \"TTO\",\n      name: \"Trinidad and Tobago\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5731.199288,\n      weight: 9463.821332,\n    },\n    {\n      id: \"784\",\n      sim_name: \"ARE\",\n      name: \"United Arab Emirates\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 442646.1236,\n      weight: 684603.6345,\n    },\n    {\n      id: \"788\",\n      sim_name: \"TUN\",\n      name: \"Tunisia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 202627.2087,\n      weight: 121296.0689,\n    },\n    {\n      id: \"792\",\n      sim_name: \"TUR\",\n      name: \"Turkey\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1205009.52,\n      weight: 2692733.392,\n    },\n    {\n      id: \"795\",\n      sim_name: \"TKM\",\n      name: \"Turkmenistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1020.566,\n      weight: 3442.938,\n    },\n    {\n      id: \"796\",\n      sim_name: \"TCA\",\n      name: \"Turks and Caicos Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1029.474,\n      weight: 2224.885,\n    },\n    {\n      id: \"800\",\n      sim_name: \"UGA\",\n      name: \"Uganda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 153220.9856,\n      weight: 467968.0664,\n    },\n    {\n      id: \"804\",\n      sim_name: \"UKR\",\n      name: \"Ukraine\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8444175.988,\n      weight: 29508635.03,\n    },\n    {\n      id: \"818\",\n      sim_name: \"EGY\",\n      name: \"Egypt\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178849.3005,\n      weight: 310332.3386,\n    },\n    {\n      id: \"826\",\n      sim_name: \"GBR\",\n      name: \"United Kingdom\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1224264.681,\n      weight: 3079070.328,\n    },\n    {\n      id: \"834\",\n      sim_name: \"TZA\",\n      name: \"Tanzania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 152688.2977,\n      weight: 493774.3125,\n    },\n    {\n      id: \"838\",\n      sim_name: \"\",\n      name: \"Free Zones\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1488.719,\n      weight: 4904.648,\n    },\n    {\n      id: \"842\",\n      sim_name: \"USA\",\n      name: \"United States\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23694720.38,\n      weight: 66623810.06,\n    },\n    {\n      id: \"854\",\n      sim_name: \"BFA\",\n      name: \"Burkina Faso\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3861.072093,\n      weight: 17132.42303,\n    },\n    {\n      id: \"858\",\n      sim_name: \"URY\",\n      name: \"Uruguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1550881.026,\n      weight: 4155101.445,\n    },\n    {\n      id: \"860\",\n      sim_name: \"UZB\",\n      name: \"Uzbekistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2094.579,\n      weight: 7229.088,\n    },\n    {\n      id: \"862\",\n      sim_name: \"VEN\",\n      name: \"Venezuela\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73.53,\n      weight: 91.675,\n    },\n    {\n      id: \"882\",\n      sim_name: \"WSM\",\n      name: \"Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.603,\n      weight: 6.415,\n    },\n    {\n      id: \"887\",\n      sim_name: \"YEM\",\n      name: \"Yemen\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48184.79726,\n      weight: 245917.1867,\n    },\n    {\n      id: \"894\",\n      sim_name: \"ZMB\",\n      name: \"Zambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 470664.7641,\n      weight: 863829.2506,\n    },\n    {\n      id: \"86\",\n      sim_name: \"IOT\",\n      name: \"British Indian Ocean Territory\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 36.802,\n      weight: 21.33,\n    },\n    {\n      id: \"136\",\n      sim_name: \"CYM\",\n      name: \"Cayman Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"148\",\n      sim_name: \"TCD\",\n      name: \"Chad\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 24.335,\n      weight: 103.232,\n    },\n    {\n      id: \"166\",\n      sim_name: \"CCK\",\n      name: \"Cocos Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 2.417,\n      weight: 2,\n    },\n    {\n      id: \"174\",\n      sim_name: \"COM\",\n      name: \"Comoros\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 19,\n      weight: 21,\n    },\n    {\n      id: \"226\",\n      sim_name: \"GNQ\",\n      name: \"Equatorial Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"232\",\n      sim_name: \"ERI\",\n      name: \"Eritrea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"238\",\n      sim_name: \"FLK\",\n      name: \"Falkland Isds (Malvinas)\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 177.295,\n      weight: 47.1,\n    },\n    {\n      id: \"258\",\n      sim_name: \"PYF\",\n      name: \"French Polynesia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 1.65,\n      weight: 0.6,\n    },\n    {\n      id: \"534\",\n      sim_name: \"SXM\",\n      name: \"Sint Maarten (Dutch part)\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"584\",\n      sim_name: \"MHL\",\n      name: \"Marshall Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 47.581,\n      weight: 26.942,\n    },\n    {\n      id: \"612\",\n      sim_name: \"PCN\",\n      name: \"Pitcairn\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 95.892,\n      weight: 265,\n    },\n    {\n      id: \"728\",\n      sim_name: \"SSD\",\n      name: \"South Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"798\",\n      sim_name: \"TUV\",\n      name: \"Tuvalu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"184\",\n      sim_name: \"COK\",\n      name: \"Cook Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"654\",\n      sim_name: \"SHN\",\n      name: \"Saint Helena\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"660\",\n      sim_name: \"AIA\",\n      name: \"Anguilla\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"678\",\n      sim_name: \"STP\",\n      name: \"Sao Tome and Principe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 198.633,\n      weight: 350,\n    },\n    {\n      id: \"837\",\n      sim_name: \"\",\n      name: \"Bunkers\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"732\",\n      sim_name: \"ESH\",\n      name: \"Western Sahara\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2015,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"666\",\n      sim_name: \"SPM\",\n      name: \"Saint Pierre and Miquelon\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2016,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"162\",\n      sim_name: \"CXR\",\n      name: \"Christmas Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 131.818,\n      weight: 99.95,\n    },\n    {\n      id: \"336\",\n      sim_name: \"VAT\",\n      name: \"Holy See\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 24.492,\n      weight: 42.805,\n    },\n    {\n      id: \"520\",\n      sim_name: \"NRU\",\n      name: \"Nauru\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 496.386,\n      weight: 457.721,\n    },\n    {\n      id: \"535\",\n      sim_name: \"BES\",\n      name: \"Bonaire\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 326.45,\n      weight: 551.554,\n    },\n  ],\n  edges: [\n    {\n      eid: \"e16\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.049\",\n      weight: \"11.52\",\n      embodiedLand: \"4.765\",\n      embodiedWater: \"348.756\",\n    },\n    {\n      eid: \"e17\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.306\",\n      weight: \"64.74\",\n      embodiedLand: \"37.716\",\n      embodiedWater: \"726.512\",\n    },\n    {\n      eid: \"e18\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"94.052\",\n      weight: \"230.588\",\n      embodiedLand: \"141.564\",\n      embodiedWater: \"1851.16\",\n    },\n    {\n      eid: \"e19\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"13.068\",\n      weight: \"65.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e20\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"34.399\",\n      weight: \"171.996\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e21\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e22\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.812\",\n      weight: \"4.061\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e43\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e44\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e45\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.875\",\n      weight: \"1.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e48\",\n      source: \"10\",\n      sourceSimName: \"ATA\",\n      sourceRegion: \"Antarctica\",\n      sourceName: \"Other\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.837\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e85\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.886\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e86\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"23.9136184\",\n      weight: \"40.2929249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e88\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e89\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.9393726\",\n      weight: \"1.75517982\",\n      embodiedLand: \"0.38365313\",\n      embodiedWater: \"17.7067202\",\n    },\n    {\n      eid: \"e90\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e91\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e92\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.249\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e93\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e103\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e104\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e105\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e115\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e116\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"128.652\",\n      weight: \"96\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e117\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5.117\",\n      weight: \"26.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e118\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e119\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"798.871\",\n      weight: \"4322.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e128\",\n      source: \"24\",\n      sourceSimName: \"AGO\",\n      sourceRegion: \"Angola\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.401\",\n      weight: \"0.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e155\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.91\",\n      weight: \"1.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e156\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"177.885\",\n      weight: \"967.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e157\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e158\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"51.175\",\n      weight: \"76.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e159\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e160\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2456.668\",\n      weight: \"2481.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e182\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.356\",\n      weight: \"27.2\",\n      embodiedLand: \"13.377\",\n      embodiedWater: \"156.237\",\n    },\n    {\n      eid: \"e183\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.344\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e185\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"108.397\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e186\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.814\",\n      weight: \"2.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e187\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.044\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e188\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"5.8\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e351\",\n      source: \"32\",\n      sourceSimName: \"ARG\",\n      sourceRegion: \"Argentina\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.29\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e494\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"25.78\",\n      weight: \"206.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e495\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.036\",\n      weight: \"18.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e496\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.503\",\n      weight: \"101.04\",\n      embodiedLand: \"41.936\",\n      embodiedWater: \"35.869\",\n    },\n    {\n      eid: \"e497\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.141\",\n      weight: \"0.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e498\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e499\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e615\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.335\",\n      weight: \"1.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e616\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.006\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.109\",\n    },\n    {\n      eid: \"e617\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.018\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.043\",\n    },\n    {\n      eid: \"e618\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.37\",\n      weight: \"0.2\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e619\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"147.228\",\n      weight: \"490.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e620\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.761\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e621\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.19\",\n      weight: \"1.625\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e622\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e635\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e636\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"55.7439049\",\n      weight: \"55.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e637\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e638\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e694\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e696\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e697\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.929\",\n      weight: \"7.4\",\n      embodiedLand: \"2.029\",\n      embodiedWater: \"95.282\",\n    },\n    {\n      eid: \"e698\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.248\",\n      weight: \"1.862\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"18.661\",\n    },\n    {\n      eid: \"e699\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e700\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"136\",\n      targetSimName: \"CYM\",\n      targetName: \"Cayman Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e701\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.067\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e702\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"124.768\",\n      weight: \"92.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e754\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e755\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.969\",\n      weight: \"1.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e756\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.12\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e757\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.138\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e758\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.494\",\n      weight: \"0.915\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e776\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e777\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.47\",\n      weight: \"30.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e778\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"795\",\n      targetSimName: \"TKM\",\n      targetName: \"Turkmenistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"8.71\",\n      weight: \"1.675\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e798\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e799\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e800\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e801\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e802\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e803\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.199\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e804\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e805\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e990\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.472\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e992\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.178\",\n      weight: \"0.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e993\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"626\",\n      targetSimName: \"TLS\",\n      targetName: \"Timor-Leste\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.32\",\n      weight: \"357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e998\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.135\",\n      weight: \"42\",\n      embodiedLand: \"\",\n      embodiedWater: \"43.89\",\n    },\n    {\n      eid: \"e999\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"78.825\",\n      weight: \"212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1008\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.302\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1009\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.708\",\n      weight: \"25.193\",\n      embodiedLand: \"8.687\",\n      embodiedWater: \"31.29\",\n    },\n    {\n      eid: \"e1010\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.024\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1095\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.5\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1097\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.14\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1098\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1099\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.249\",\n      weight: \"0.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1100\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"40.776\",\n      weight: \"17.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1101\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.83\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1102\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"376.317\",\n      weight: \"60.619\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1103\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.19096077\",\n      weight: \"5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1104\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.406\",\n      weight: \"0.043\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1105\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.287\",\n      weight: \"2.911\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1106\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"30.2\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1107\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.4\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1108\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1109\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.683\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1141\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.132\",\n      weight: \"0.13\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"0.087\",\n    },\n    {\n      eid: \"e1142\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.356\",\n      weight: \"0.38\",\n      embodiedLand: \"0.09\",\n      embodiedWater: \"0.274\",\n    },\n    {\n      eid: \"e1143\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"111.882952\",\n      weight: \"50.4723321\",\n      embodiedLand: \"14.3646986\",\n      embodiedWater: \"12.7187331\",\n    },\n    {\n      eid: \"e1144\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1145\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1146\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1147\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.501\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1164\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1165\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1319\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"700.563\",\n      weight: \"3567.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1320\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.279294\",\n      weight: \"36.0515982\",\n      embodiedLand: \"12.9758444\",\n      embodiedWater: \"467.733115\",\n    },\n    {\n      eid: \"e1321\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1322\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"80.401\",\n      weight: \"267\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1323\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.084\",\n      weight: \"0.743\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1324\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"41.263\",\n      weight: \"73.557\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1325\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.673\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1326\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1350\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1351\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1352\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.033\",\n      weight: \"0.176\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1353\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.767\",\n      weight: \"2.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1354\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"34.953\",\n      weight: \"152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1356\",\n      source: \"86\",\n      sourceSimName: \"IOT\",\n      sourceRegion: \"British Indian Ocean Territory\",\n      sourceName: \"Oceania\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1361\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.167\",\n      weight: \"42.315\",\n      embodiedLand: \"3.486\",\n      embodiedWater: \"5.332\",\n    },\n    {\n      eid: \"e1362\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1377\",\n      source: \"92\",\n      sourceSimName: \"VGB\",\n      sourceRegion: \"British Virgin Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"101.43\",\n      weight: \"490\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1387\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1388\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1389\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38.441\",\n      weight: \"44.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1390\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.04\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1483\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24858.849\",\n      weight: \"99000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1484\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"4.755\",\n      weight: \"1.934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1485\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"93.704\",\n      weight: \"126.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1486\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"10.413\",\n      weight: \"27.25\",\n      embodiedLand: \"24.418\",\n      embodiedWater: \"8.965\",\n    },\n    {\n      eid: \"e1487\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17703.297\",\n      weight: \"77309.781\",\n      embodiedLand: \"18435.802\",\n      embodiedWater: \"20873.641\",\n    },\n    {\n      eid: \"e1489\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"18.8800973\",\n      weight: \"86.0444724\",\n      embodiedLand: \"30.7293419\",\n      embodiedWater: \"1.7204033\",\n    },\n    {\n      eid: \"e1490\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"160.110577\",\n      weight: \"483.392365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1491\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7432.909\",\n      weight: \"38483.49\",\n      embodiedLand: \"9381.188\",\n      embodiedWater: \"11121.729\",\n    },\n    {\n      eid: \"e1493\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"189.513\",\n      weight: \"314\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1494\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.029\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1495\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"12.528\",\n      weight: \"0.77\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1496\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1497\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5189.99451\",\n      weight: \"28567.1783\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1498\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14084.1964\",\n      weight: \"76915.5622\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1499\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"692.331\",\n      weight: \"4066.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1500\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"60.703\",\n      weight: \"339.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1609\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.25\",\n      weight: \"12.219\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1610\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"112\",\n      targetSimName: \"BLR\",\n      targetName: \"Belarus\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"25.7\",\n      weight: \"75\",\n      embodiedLand: \"25.54\",\n      embodiedWater: \"174.3\",\n    },\n    {\n      eid: \"e1611\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"108.75\",\n      weight: \"129.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1612\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1613\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"43.5\",\n      weight: \"52.27\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1614\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"104.4\",\n      weight: \"125.448\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1615\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"598\",\n      targetSimName: \"PNG\",\n      targetName: \"Papua New Guinea\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.75\",\n      weight: \"54.372\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1616\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1617\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1775\",\n      weight: \"1500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1619\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"103.45\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1620\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"137.5\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1621\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1622\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"44.4\",\n      weight: \"120\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1633\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.606\",\n      weight: \"0.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1634\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.844\",\n      weight: \"0.74\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1635\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"53.041\",\n      weight: \"90\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1636\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.492\",\n      weight: \"1.142\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1637\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.021\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1679\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1680\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.1\",\n      weight: \"21.96\",\n      embodiedLand: \"22.086\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1681\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"120.2641915\",\n      weight: \"207.744065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1682\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.2\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1683\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"44.5214625\",\n      weight: \"83.785883\",\n      embodiedLand: \"26.1168536\",\n      embodiedWater: \"7.20580295\",\n    },\n    {\n      eid: \"e1684\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.083\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1685\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"991.896\",\n      weight: \"5092.85\",\n      embodiedLand: \"1019.042\",\n      embodiedWater: \"6610.519\",\n    },\n    {\n      eid: \"e1686\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"165.472676\",\n      weight: \"53.1172551\",\n      embodiedLand: \"17.4316463\",\n      embodiedWater: \"2398.72164\",\n    },\n    {\n      eid: \"e1687\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.31077251\",\n      weight: \"2.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1688\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"27.5722272\",\n      weight: \"53.4685049\",\n      embodiedLand: \"19.9639795\",\n      embodiedWater: \"4.70535121\",\n    },\n    {\n      eid: \"e1689\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.773\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1690\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"10.6\",\n      weight: \"26.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1691\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"482.1\",\n      weight: \"2008.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1693\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.9\",\n      weight: \"24.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1694\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"27\",\n      weight: \"72.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1695\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.9\",\n      weight: \"43.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1696\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1.4152175\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1697\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"15.216\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1792\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.058\",\n      weight: \"1.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1793\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"19.9307517\",\n      weight: \"54.9268674\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1795\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"722.843\",\n      weight: \"2000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1796\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.05\",\n      embodiedLand: \"0.0215\",\n      embodiedWater: \"0.279\",\n    },\n    {\n      eid: \"e1797\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.5893875\",\n      weight: \"46\",\n      embodiedLand: \"22.382\",\n      embodiedWater: \"419.888\",\n    },\n    {\n      eid: \"e1798\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1799\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.49\",\n      weight: \"24.993\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1800\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"35.6075332\",\n      weight: \"62.4991805\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1801\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"87.223\",\n      weight: \"190\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1802\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"123.708\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1803\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"49.454\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1804\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.332\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1830\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1831\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1832\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.398\",\n      weight: \"0.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1833\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.09\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1834\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.031\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1835\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.069\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1836\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2006\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2007\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.816\",\n      weight: \"27.5\",\n      embodiedLand: \"11.52\",\n      embodiedWater: \"91.465\",\n    },\n    {\n      eid: \"e2008\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.942\",\n      weight: \"5.224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2009\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1549.864\",\n      weight: \"6461\",\n      embodiedLand: \"2292.263\",\n      embodiedWater: \"24648.715\",\n    },\n    {\n      eid: \"e2010\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.366\",\n      weight: \"29.392\",\n      embodiedLand: \"4.087\",\n      embodiedWater: \"203.275\",\n    },\n    {\n      eid: \"e2011\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.105\",\n      weight: \"0.346\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2012\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.087\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2013\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10.485\",\n      weight: \"23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2014\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"71.847\",\n      weight: \"90.718\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2015\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.063\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2026\",\n      source: \"136\",\n      sourceSimName: \"CYM\",\n      sourceRegion: \"Cayman Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2028\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"256.296\",\n      weight: \"584\",\n      embodiedLand: \"388.652\",\n      embodiedWater: \"3227.184\",\n    },\n    {\n      eid: \"e2029\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2030\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2122\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.617\",\n      weight: \"0.4\",\n      embodiedLand: \"0.171\",\n      embodiedWater: \"9.947\",\n    },\n    {\n      eid: \"e2123\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.022\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.074\",\n    },\n    {\n      eid: \"e2124\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.465\",\n      weight: \"4\",\n      embodiedLand: \"1.462\",\n      embodiedWater: \"24.56\",\n    },\n    {\n      eid: \"e2125\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"674.364\",\n      weight: \"998.75\",\n      embodiedLand: \"394.423\",\n      embodiedWater: \"8358.539\",\n    },\n    {\n      eid: \"e2126\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.169684\",\n      weight: \"10\",\n      embodiedLand: \"4.832\",\n      embodiedWater: \"129.36\",\n    },\n    {\n      eid: \"e2127\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.6929921\",\n      weight: \"0.39911438\",\n      embodiedLand: \"0.02313548\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2128\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2129\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"956.722\",\n      weight: \"1340\",\n      embodiedLand: \"468.637\",\n      embodiedWater: \"10142.46\",\n    },\n    {\n      eid: \"e2130\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.129\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2131\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2581.403\",\n      weight: \"1630\",\n      embodiedLand: \"593.987\",\n      embodiedWater: \"13326.88\",\n    },\n    {\n      eid: \"e2132\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01799708\",\n      weight: \"0.01963527\",\n      embodiedLand: \"0.00589058\",\n      embodiedWater: \"0.15119156\",\n    },\n    {\n      eid: \"e2133\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.055\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2135\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.797\",\n      weight: \"0.084\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2139\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2140\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.114\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2141\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2142\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2143\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.421\",\n      weight: \"2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2227\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.466\",\n      weight: \"0.804\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2228\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.644\",\n      weight: \"1\",\n      embodiedLand: \"0.016\",\n      embodiedWater: \"14.459\",\n    },\n    {\n      eid: \"e2229\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2230\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"32.659\",\n      weight: \"18.144\",\n      embodiedLand: \"2.013\",\n      embodiedWater: \"25.347\",\n    },\n    {\n      eid: \"e2231\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"50.962\",\n      weight: \"29.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2232\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.158\",\n      weight: \"0.366\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2233\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.57\",\n      weight: \"0.216\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2234\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.176\",\n      weight: \"3.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2235\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"13.32\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2236\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2237\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.426\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2238\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2239\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.899\",\n      weight: \"0.564\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2240\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2241\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2433\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"63.059\",\n      weight: \"215.408\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2434\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.045\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2435\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"9502.75\",\n      weight: \"30250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2436\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.317\",\n      weight: \"40.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2439\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2440\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2507\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2508\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.945\",\n      weight: \"5.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2509\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2510\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"1.68\",\n      embodiedLand: \"0.624\",\n      embodiedWater: \"11.764\",\n    },\n    {\n      eid: \"e2511\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.99707857\",\n      weight: \"0.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2513\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2514\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02360264\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2515\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.014\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2516\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.661\",\n      weight: \"0.55\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2517\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"24.4083904\",\n      weight: \"21.9972541\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2518\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2519\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"29.328\",\n      weight: \"9.319\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2520\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2521\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"28.266\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2522\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.253\",\n      weight: \"0.239\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2526\",\n      source: \"174\",\n      sourceSimName: \"COM\",\n      sourceRegion: \"Comoros\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"64.83\",\n      weight: \"89.969\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2562\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.003\",\n    },\n    {\n      eid: \"e2563\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.068\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2564\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"770.502\",\n      weight: \"4498.68\",\n      embodiedLand: \"242.589\",\n      embodiedWater: \"7341.846\",\n    },\n    {\n      eid: \"e2565\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2566\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"17.311\",\n      weight: \"18.402\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2630\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4009.71895\",\n      weight: \"10426.471\",\n      embodiedLand: \"4547.15483\",\n      embodiedWater: \"417.058952\",\n    },\n    {\n      eid: \"e2631\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.162\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"0.163\",\n    },\n    {\n      eid: \"e2632\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.009\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e2634\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.4225\",\n      weight: \"1.3\",\n      embodiedLand: \"0.385\",\n      embodiedWater: \"0.016\",\n    },\n    {\n      eid: \"e2635\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2636\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"36.137\",\n      weight: \"68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2637\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.947\",\n      weight: \"0.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2639\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"356.137\",\n      weight: \"742.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2640\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.272\",\n      weight: \"25.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2641\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"195.135725\",\n      weight: \"405.023926\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2642\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1927.978\",\n      weight: \"5003.87\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2653\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.015\",\n      weight: \"22\",\n      embodiedLand: \"1.121\",\n      embodiedWater: \"30.294\",\n    },\n    {\n      eid: \"e2654\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2655\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2710\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.025\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2711\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2712\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"275.094068\",\n      weight: \"518.04557\",\n      embodiedLand: \"852.454555\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2713\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.123\",\n      weight: \"0.515\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2714\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.749\",\n      weight: \"0.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2815\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.19775118\",\n      weight: \"19.4429394\",\n      embodiedLand: \"1.01453375\",\n      embodiedWater: \"6.43614933\",\n    },\n    {\n      eid: \"e2816\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"47.058\",\n      weight: \"31.738\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2817\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"465.089207\",\n      weight: \"1056.18955\",\n      embodiedLand: \"59.5149034\",\n      embodiedWater: \"349.59874\",\n    },\n    {\n      eid: \"e2818\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.53\",\n      weight: \"0.296\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2819\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2820\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1233.57708\",\n      weight: \"2500\",\n      embodiedLand: \"273.915\",\n      embodiedWater: \"302.5\",\n    },\n    {\n      eid: \"e2821\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.512\",\n      weight: \"0.287\",\n      embodiedLand: \"1.023\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2822\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.392\",\n      weight: \"50.1\",\n      embodiedLand: \"8.127\",\n      embodiedWater: \"0.601\",\n    },\n    {\n      eid: \"e2823\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.59\",\n      weight: \"1.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2824\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"53.08\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2825\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.409\",\n      weight: \"7.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2826\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2827\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12283.216\",\n      weight: \"51375.101\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2828\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6823.806\",\n      weight: \"28549.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2852\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.041\",\n      weight: \"0.125\",\n      embodiedLand: \"0.007\",\n      embodiedWater: \"1.054\",\n    },\n    {\n      eid: \"e2853\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.541\",\n      weight: \"1\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.369\",\n    },\n    {\n      eid: \"e2854\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.017\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.129\",\n    },\n    {\n      eid: \"e2855\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.19\",\n      weight: \"17.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2856\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.874\",\n      weight: \"0.506\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2857\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"17.743\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2858\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"15.773\",\n      weight: \"220\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2992\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17845.867\",\n      weight: \"88000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2994\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"21.161\",\n      weight: \"46\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2995\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2996\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2997\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.023\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.191\",\n    },\n    {\n      eid: \"e2999\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.679\",\n      weight: \"14\",\n      embodiedLand: \"3.32\",\n      embodiedWater: \"25.83\",\n    },\n    {\n      eid: \"e3000\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.035\",\n      weight: \"0.031\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.435\",\n    },\n    {\n      eid: \"e3001\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.53\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3002\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.629\",\n      weight: \"272.52\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3003\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3005\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3006\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3007\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.206\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3008\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"22.102\",\n      weight: \"41.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3009\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3020\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.813\",\n      weight: \"1.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3021\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2016\",\n      value: \"6.079\",\n      weight: \"9.869\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3022\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3073\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"62.9969656\",\n      weight: \"133.149681\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3074\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3075\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3076\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.744\",\n      weight: \"63.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3077\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3078\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.752\",\n      weight: \"0.558\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3080\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3081\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3082\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.258\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3129\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.25\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3130\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"655.12\",\n      weight: \"117.45\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3131\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.508\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3132\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.061\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3133\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3134\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.20254593\",\n      weight: \"0.0630884\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3136\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3137\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3151\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e3152\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.36\",\n      weight: \"26.04\",\n      embodiedLand: \"4.462\",\n      embodiedWater: \"131.762\",\n    },\n    {\n      eid: \"e3153\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.231\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3154\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.36\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3155\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3156\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25\",\n      weight: \"0.076\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3157\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.651\",\n      weight: \"0.464\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3158\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.55\",\n      weight: \"1.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3160\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3161\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3214\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.757\",\n      weight: \"0.78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3215\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3216\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.24744121\",\n      weight: \"0.12643068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3217\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.1\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"0.881\",\n    },\n    {\n      eid: \"e3218\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.045\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3219\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3220\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.025\",\n      embodiedLand: \"0.073\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3221\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.015\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3223\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.388\",\n      weight: \"0.705\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"0.492\",\n    },\n    {\n      eid: \"e3224\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"17.374\",\n      weight: \"40\",\n      embodiedLand: \"16.921\",\n      embodiedWater: \"2.24\",\n    },\n    {\n      eid: \"e3225\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.641\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3226\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3231\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3232\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3283\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.169\",\n      weight: \"40.581\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3284\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"12273.129\",\n      weight: \"69000\",\n      embodiedLand: \"19376.402\",\n      embodiedWater: \"3036\",\n    },\n    {\n      eid: \"e3285\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8159.47956\",\n      weight: \"44000\",\n      embodiedLand: \"12365.057\",\n      embodiedWater: \"308\",\n    },\n    {\n      eid: \"e3286\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5697.635\",\n      weight: \"31498.19\",\n      embodiedLand: \"8131.804\",\n      embodiedWater: \"10992.868\",\n    },\n    {\n      eid: \"e3287\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"19.337\",\n      weight: \"53.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3288\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6239.34\",\n      weight: \"22384.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3289\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3166.555\",\n      weight: \"15864\",\n      embodiedLand: \"4286.655\",\n      embodiedWater: \"5393.76\",\n    },\n    {\n      eid: \"e3290\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.019\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e3291\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.176\",\n      weight: \"2.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3292\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12.414\",\n      weight: \"49.122\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3293\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3294\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"629.386\",\n      weight: \"2596.853\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3295\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3296\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"31.581\",\n      weight: \"76.353\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3297\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4160.65711\",\n      weight: \"25476.5045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3338\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.068\",\n      weight: \"88.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3339\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3435\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"481.381304\",\n      weight: \"1599.203\",\n      embodiedLand: \"471.659\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3436\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.092\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3437\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3438\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.086\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3439\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.48\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3440\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.018\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e3441\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.029\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3442\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.849\",\n      weight: \"36.603\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3443\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.071\",\n      weight: \"0.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3444\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.572\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3445\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.1\",\n      weight: \"0.929\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3446\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.762\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3447\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3448\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"1.191\",\n      weight: \"0.475\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3449\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.182\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3640\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3641\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3643\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3644\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"796\",\n      targetSimName: \"TCA\",\n      targetName: \"Turks and Caicos Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3646\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.303\",\n      weight: \"0.161\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.66\",\n    },\n    {\n      eid: \"e3647\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.76\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3661\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1697.791\",\n      weight: \"4715.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3662\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3663\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.466\",\n      weight: \"5.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3674\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3675\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3676\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3677\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3707\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.048\",\n      weight: \"0.038\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3708\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4.8\",\n      weight: \"24\",\n      embodiedLand: \"18.872\",\n      embodiedWater: \"2.136\",\n    },\n    {\n      eid: \"e3709\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3710\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.678\",\n      weight: \"38.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3711\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.252\",\n      weight: \"0.455\",\n      embodiedLand: \"0.074\",\n      embodiedWater: \"1.176\",\n    },\n    {\n      eid: \"e3712\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27\",\n      weight: \"4.86\",\n      embodiedLand: \"2.151\",\n      embodiedWater: \"5.56\",\n    },\n    {\n      eid: \"e3713\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.61599203\",\n      weight: \"1.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3714\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"23.6\",\n      weight: \"47.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3715\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.179\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3716\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"9.5\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3718\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.00114478\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3719\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.278\",\n      weight: \"19.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3720\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3734\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8.156\",\n      weight: \"9\",\n      embodiedLand: \"0.265\",\n      embodiedWater: \"11.43\",\n    },\n    {\n      eid: \"e3735\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3766\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"1.468\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3767\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"6.887\",\n      weight: \"10.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3769\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.621\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3770\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.922\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3771\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.035\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3963\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.908\",\n      weight: \"23\",\n      embodiedLand: \"6.114\",\n      embodiedWater: \"87.285\",\n    },\n    {\n      eid: \"e3964\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3965\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.0348425\",\n      weight: \"26\",\n      embodiedLand: \"4.29\",\n      embodiedWater: \"0.234\",\n    },\n    {\n      eid: \"e3966\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3967\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"612\",\n      targetSimName: \"PCN\",\n      targetName: \"Pitcairn\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3968\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.096\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4026\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4028\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"427.155\",\n      weight: \"1504\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4029\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4034\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4035\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.999\",\n      weight: \"3.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4038\",\n      source: \"296\",\n      sourceSimName: \"KIR\",\n      sourceRegion: \"Kiribati\",\n      sourceName: \"Oceania\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.46\",\n      weight: \"0.327\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4130\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.592\",\n      weight: \"0.381\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4131\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.535\",\n      weight: \"0.685\",\n      embodiedLand: \"0.344\",\n      embodiedWater: \"2.925\",\n    },\n    {\n      eid: \"e4132\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.225\",\n      weight: \"0.51\",\n      embodiedLand: \"0.297\",\n      embodiedWater: \"0.907\",\n    },\n    {\n      eid: \"e4133\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4134\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.619\",\n      weight: \"0.9\",\n      embodiedLand: \"0.215\",\n      embodiedWater: \"12.695\",\n    },\n    {\n      eid: \"e4135\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.643\",\n      weight: \"0.811\",\n      embodiedLand: \"0.35\",\n      embodiedWater: \"22.782\",\n    },\n    {\n      eid: \"e4136\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9.296\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4139\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.194\",\n      weight: \"0.105\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4140\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4141\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.549\",\n      weight: \"0.33\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4144\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4145\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.094\",\n      weight: \"0.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4160\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4161\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.258\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4166\",\n      source: \"316\",\n      sourceSimName: \"GUM\",\n      sourceRegion: \"Guam\",\n      sourceName: \"Oceania\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.645\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4197\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.45\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4198\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4199\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4200\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.225\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4201\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.383\",\n      weight: \"0.959\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4222\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4223\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1121.1076\",\n      weight: \"9902.574\",\n      embodiedLand: \"74.073\",\n      embodiedWater: \"16091.683\",\n    },\n    {\n      eid: \"e4224\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"151.325\",\n      weight: \"781.716\",\n      embodiedLand: \"851.781\",\n      embodiedWater: \"8133.755\",\n    },\n    {\n      eid: \"e4225\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.702\",\n      weight: \"22.538\",\n      embodiedLand: \"26.147\",\n      embodiedWater: \"54.384\",\n    },\n    {\n      eid: \"e4226\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4227\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"514.56\",\n      weight: \"516\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4229\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4274\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.93\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4275\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"12.9452924\",\n      weight: \"80.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4276\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"79.617\",\n      weight: \"404.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4277\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"146.081\",\n      weight: \"186.97\",\n      embodiedLand: \"46.045\",\n      embodiedWater: \"1298.32\",\n    },\n    {\n      eid: \"e4278\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2751.76304\",\n      weight: \"3460.64811\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4279\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.957\",\n      weight: \"2.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4280\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4281\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"336\",\n      targetSimName: \"VAT\",\n      targetName: \"Holy See\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4282\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.016\",\n      weight: \"50.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4283\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.893\",\n      weight: \"24.705\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4284\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4285\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.422\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4298\",\n      source: \"332\",\n      sourceSimName: \"HTI\",\n      sourceRegion: \"Haiti\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4323\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"201.042\",\n      weight: \"323.82\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4324\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.24\",\n      weight: \"39.916\",\n      embodiedLand: \"24.266\",\n      embodiedWater: \"18.162\",\n    },\n    {\n      eid: \"e4326\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"47.6473533\",\n      weight: \"48.6243931\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4327\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4328\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.858\",\n      weight: \"8.732\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4329\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.64\",\n      weight: \"96.16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4428\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4429\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4430\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.109\",\n      weight: \"0.125\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4431\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"119.521\",\n      weight: \"420\",\n      embodiedLand: \"51.421\",\n      embodiedWater: \"660.66\",\n    },\n    {\n      eid: \"e4432\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"658.77\",\n      weight: \"2218.1\",\n      embodiedLand: \"206.877\",\n      embodiedWater: \"2437.692\",\n    },\n    {\n      eid: \"e4434\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"83.377\",\n      weight: \"273\",\n      embodiedLand: \"31.384\",\n      embodiedWater: \"559.377\",\n    },\n    {\n      eid: \"e4435\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.016\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e4436\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.865\",\n      weight: \"21\",\n      embodiedLand: \"2.303\",\n      embodiedWater: \"31.017\",\n    },\n    {\n      eid: \"e4437\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"13.347\",\n      weight: \"102.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4439\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"677.568524\",\n      weight: \"630.017434\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4461\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.403\",\n      weight: \"4.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4462\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"62.13\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4463\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4464\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4465\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4568\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.048\",\n      weight: \"120.8\",\n      embodiedLand: \"11.771\",\n      embodiedWater: \"164.409\",\n    },\n    {\n      eid: \"e4569\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.273\",\n      weight: \"67.74\",\n      embodiedLand: \"35.111\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4570\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.304\",\n      weight: \"0.144\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4571\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4572\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.065\",\n      weight: \"0.081\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"0.774\",\n    },\n    {\n      eid: \"e4573\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"64.711\",\n      weight: \"26.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4574\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"219\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4575\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.083\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4576\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.501\",\n      weight: \"0.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4577\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2424\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4578\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.756\",\n      weight: \"0.947\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4579\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"74.884\",\n      weight: \"270\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4581\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.437\",\n      weight: \"0.069\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4582\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.06\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4583\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.59\",\n      weight: \"0.745\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4584\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.473\",\n      weight: \"1.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4635\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4159.919\",\n      weight: \"14678.618\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4636\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.04\",\n      weight: \"0.15\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"2.752\",\n    },\n    {\n      eid: \"e4637\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.595\",\n      weight: \"6.84\",\n      embodiedLand: \"2.127\",\n      embodiedWater: \"193.278\",\n    },\n    {\n      eid: \"e4638\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"8.79\",\n      weight: \"43.87\",\n      embodiedLand: \"15.986\",\n      embodiedWater: \"396.322\",\n    },\n    {\n      eid: \"e4639\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.24\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4640\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.044\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4641\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4642\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.244\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4643\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"398.292\",\n      weight: \"821.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4644\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.079\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4645\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.62\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4646\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.157\",\n      weight: \"0.279\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4647\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.129\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4649\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4650\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.078\",\n      weight: \"1.118\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4661\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4662\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.843\",\n      weight: \"1.59\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4663\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"160.874\",\n      weight: \"36.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4664\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4731\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"159.042\",\n      weight: \"32.792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4732\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.867\",\n      weight: \"44.1\",\n      embodiedLand: \"6.096\",\n      embodiedWater: \"34.089\",\n    },\n    {\n      eid: \"e4733\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.516\",\n      weight: \"0.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4734\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"21.023\",\n      weight: \"42.5\",\n      embodiedLand: \"0.457\",\n      embodiedWater: \"48.195\",\n    },\n    {\n      eid: \"e4735\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.011\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4736\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"0.378\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4737\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.542\",\n      weight: \"0.94\",\n      embodiedLand: \"0.161\",\n      embodiedWater: \"0.968\",\n    },\n    {\n      eid: \"e4738\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.238\",\n      weight: \"2.262\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4739\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4740\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4742\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.468\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4743\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.066\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4744\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.695\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4745\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.132\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4824\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4825\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4826\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"134.901099\",\n      weight: \"54.1360357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4827\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1\",\n      weight: \"0.5\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"4.356\",\n    },\n    {\n      eid: \"e4828\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4829\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.005348\",\n      weight: \"27.7814111\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4830\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.071\",\n      weight: \"48\",\n      embodiedLand: \"2.36\",\n      embodiedWater: \"517.776\",\n    },\n    {\n      eid: \"e4831\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10\",\n      weight: \"7.385\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4832\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1\",\n      weight: \"2.895\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4833\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"121\",\n      weight: \"381.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4834\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.828\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4835\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2\",\n      weight: \"4.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5015\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.273\",\n      weight: \"1.5\",\n      embodiedLand: \"0.94\",\n      embodiedWater: \"5.117\",\n    },\n    {\n      eid: \"e5016\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"762\",\n      targetSimName: \"TJK\",\n      targetName: \"Tajikistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.747\",\n      weight: \"3.75\",\n      embodiedLand: \"1.24\",\n      embodiedWater: \"1.117\",\n    },\n    {\n      eid: \"e5017\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5018\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5019\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5065\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.837\",\n      weight: \"0.288\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5066\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.057\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5067\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.102\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5068\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"26.888\",\n      weight: \"155.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5104\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"819.786\",\n      weight: \"4674.18\",\n      embodiedLand: \"7.562\",\n      embodiedWater: \"5814.68\",\n    },\n    {\n      eid: \"e5105\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.202\",\n      weight: \"20.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5106\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.134\",\n      weight: \"0.159\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5107\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.186\",\n      weight: \"1.973\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5108\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5246\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.646\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5247\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.115\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5248\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1285.878\",\n      weight: \"3253\",\n      embodiedLand: \"695.174\",\n      embodiedWater: \"27878.21\",\n    },\n    {\n      eid: \"e5249\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.677\",\n      weight: \"2\",\n      embodiedLand: \"0.486\",\n      embodiedWater: \"17.53\",\n    },\n    {\n      eid: \"e5250\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5251\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.128\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5252\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.792\",\n      weight: \"1.676\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5253\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.33\",\n      weight: \"0.339\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5254\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1536.952\",\n      weight: \"2498.778\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5319\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.05\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5321\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5368\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.112\",\n      weight: \"6.518\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5369\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.631\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5370\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.879\",\n      weight: \"0.168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5371\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.34\",\n      weight: \"1.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5372\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5373\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5374\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.066\",\n      weight: \"0.649\",\n      embodiedLand: \"0.046\",\n      embodiedWater: \"1.955\",\n    },\n    {\n      eid: \"e5375\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.143\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5376\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15280.683\",\n      weight: \"52494.791\",\n      embodiedLand: \"49024.216\",\n      embodiedWater: \"2673717.19\",\n    },\n    {\n      eid: \"e5377\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.138\",\n      weight: \"0.053\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5378\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.011\",\n      weight: \"115\",\n      embodiedLand: \"4.942\",\n      embodiedWater: \"825.24\",\n    },\n    {\n      eid: \"e5379\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.825\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5380\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5381\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.946\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5382\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5383\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14.272\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5384\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5447\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.05\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"0.286\",\n    },\n    {\n      eid: \"e5448\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5449\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5450\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"75.807\",\n      weight: \"147.131\",\n      embodiedLand: \"88.514\",\n      embodiedWater: \"387.69\",\n    },\n    {\n      eid: \"e5451\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5452\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"21.654\",\n      weight: \"2.897\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5453\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5494\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.118\",\n      weight: \"3.342\",\n      embodiedLand: \"0.863\",\n      embodiedWater: \"4.802\",\n    },\n    {\n      eid: \"e5495\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.729\",\n    },\n    {\n      eid: \"e5496\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5497\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.364\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5498\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.66\",\n      weight: \"0.715\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"7.631\",\n    },\n    {\n      eid: \"e5499\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.079\",\n      weight: \"0.06\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e5500\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5501\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.392\",\n    },\n    {\n      eid: \"e5502\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.255\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5503\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.325\",\n      weight: \"0.708\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5504\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5505\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.309\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5506\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.636\",\n      weight: \"8.967\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5507\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.419\",\n      weight: \"1.356\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5508\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.096\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5524\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.494\",\n      weight: \"0.62\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"3.678\",\n    },\n    {\n      eid: \"e5525\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.088\",\n    },\n    {\n      eid: \"e5526\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"3\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5527\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.543\",\n      weight: \"47.935\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5528\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5529\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1391.017\",\n      weight: \"5169.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5568\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.4938257\",\n      weight: \"28.2050024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5569\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.444\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5570\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.04\",\n      embodiedLand: \"0.013\",\n      embodiedWater: \"0.105\",\n    },\n    {\n      eid: \"e5571\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"38.47\",\n      weight: \"46.226\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5573\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"25.024\",\n      weight: \"144.873\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5574\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.454\",\n      weight: \"5.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5680\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.433\",\n      weight: \"1.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5681\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5682\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.07\",\n      weight: \"0.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5683\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.736\",\n      weight: \"0.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5684\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5685\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.448\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5686\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.038\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5687\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.6\",\n      weight: \"2.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5688\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"2.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5689\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.46160548\",\n      weight: \"12.1968756\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5696\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"11.926\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5697\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.18\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5790\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"76.094\",\n      weight: \"231.535\",\n      embodiedLand: \"70.276\",\n      embodiedWater: \"42.371\",\n    },\n    {\n      eid: \"e5791\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.3954741\",\n      weight: \"17.634\",\n      embodiedLand: \"7.808\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5792\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"9.879\",\n      weight: \"16.669\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5793\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"108.18118\",\n      weight: \"282.748174\",\n      embodiedLand: \"120.980124\",\n      embodiedWater: \"113.947519\",\n    },\n    {\n      eid: \"e5794\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"55.429\",\n      weight: \"102\",\n      embodiedLand: \"50.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5795\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.519\",\n      weight: \"16.8\",\n      embodiedLand: \"5.346\",\n      embodiedWater: \"0.79\",\n    },\n    {\n      eid: \"e5796\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3040.717\",\n      weight: \"12000\",\n      embodiedLand: \"3410.976\",\n      embodiedWater: \"1416\",\n    },\n    {\n      eid: \"e5797\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.2\",\n      weight: \"22.5\",\n      embodiedLand: \"9.765\",\n      embodiedWater: \"4.14\",\n    },\n    {\n      eid: \"e5798\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5928.904\",\n      weight: \"27800\",\n      embodiedLand: \"8141.021\",\n      embodiedWater: \"5087.4\",\n    },\n    {\n      eid: \"e5799\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"12.5758647\",\n      weight: \"18.1209308\",\n      embodiedLand: \"9.21064206\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5800\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.085\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5801\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"126.649\",\n      weight: \"523.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5802\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e5803\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9979.327\",\n      weight: \"49080.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5804\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9773.51\",\n      weight: \"50317.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5805\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1120.625\",\n      weight: \"6464.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5806\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.55\",\n      weight: \"13.716\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5807\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"66.234\",\n      weight: \"130.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5808\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"59.9755096\",\n      weight: \"147.628533\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5809\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"7.622\",\n      weight: \"13.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5810\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"32.2000609\",\n      weight: \"184.508668\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5811\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3824.84552\",\n      weight: \"18150\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5812\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.014\",\n      weight: \"1.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5813\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"47.074\",\n      weight: \"169\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5814\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.9\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5823\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"72.763\",\n      weight: \"511.55\",\n      embodiedLand: \"1.752\",\n      embodiedWater: \"713.612\",\n    },\n    {\n      eid: \"e5824\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5860.639\",\n      weight: \"25633.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5825\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"43.94\",\n      weight: \"396.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5832\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5833\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.124\",\n    },\n    {\n      eid: \"e5834\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"278.215\",\n      weight: \"344.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5941\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"11.037\",\n      weight: \"21.99\",\n      embodiedLand: \"11.308\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5942\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"952.419598\",\n      weight: \"1777.69802\",\n      embodiedLand: \"536.005575\",\n      embodiedWater: \"154.659357\",\n    },\n    {\n      eid: \"e5943\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.142\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5944\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.5941818\",\n      weight: \"11.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5945\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1740.776\",\n      weight: \"4444.87\",\n      embodiedLand: \"1391.87\",\n      embodiedWater: \"902.309\",\n    },\n    {\n      eid: \"e5946\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"34.047\",\n      weight: \"75\",\n      embodiedLand: \"25.521\",\n      embodiedWater: \"8.325\",\n    },\n    {\n      eid: \"e5947\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.553\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5948\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.706\",\n      weight: \"21.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5949\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2682.98701\",\n      weight: \"9850\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5950\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.692\",\n      weight: \"0.112\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5951\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"52.1904308\",\n      weight: \"28.8378857\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5952\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"150.48433\",\n      weight: \"617.293342\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5954\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.229\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5955\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5956\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.8723332\",\n      weight: \"14.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5957\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2596.166\",\n      weight: \"14299.874\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5958\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"624\",\n      targetSimName: \"GNB\",\n      targetName: \"Guinea-Bissau\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.352\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5959\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7705.296\",\n      weight: \"32986.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5960\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18663.554\",\n      weight: \"101536.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5961\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.423\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5962\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.777\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5963\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.583\",\n      weight: \"41\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5964\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9794.196\",\n      weight: \"53649.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5997\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5998\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5999\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6000\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.32369588\",\n      weight: \"10\",\n      embodiedLand: \"2.391\",\n      embodiedWater: \"1.34\",\n    },\n    {\n      eid: \"e6002\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.9\",\n      embodiedLand: \"0.216\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6003\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1472.921\",\n      weight: \"4490.059\",\n      embodiedLand: \"819.513\",\n      embodiedWater: \"1333.547\",\n    },\n    {\n      eid: \"e6005\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6006\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6008\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6009\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.556\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6010\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.553\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6029\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6030\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6031\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.4864968\",\n      weight: \"333.932001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6032\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.432\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6033\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6054\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.078\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.068\",\n    },\n    {\n      eid: \"e6055\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.044\",\n    },\n    {\n      eid: \"e6056\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.174\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e6057\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.031\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6058\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6059\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.192\",\n      weight: \"0.072\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6060\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6167\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.033\",\n      weight: \"0.026\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.394\",\n    },\n    {\n      eid: \"e6168\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.24\",\n      weight: \"22.5\",\n      embodiedLand: \"1.165\",\n      embodiedWater: \"57.42\",\n    },\n    {\n      eid: \"e6169\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.547\",\n      weight: \"0.074\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6170\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.178\",\n      weight: \"39.34\",\n      embodiedLand: \"0.219\",\n      embodiedWater: \"24.902\",\n    },\n    {\n      eid: \"e6171\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"250.088\",\n      weight: \"313.5\",\n      embodiedLand: \"205.235\",\n      embodiedWater: \"1026.712\",\n    },\n    {\n      eid: \"e6172\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27.338\",\n      weight: \"16.94\",\n      embodiedLand: \"0.121\",\n      embodiedWater: \"0.813\",\n    },\n    {\n      eid: \"e6174\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"38.385\",\n      weight: \"44.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6175\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.444\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6176\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"39.86\",\n      weight: \"18.976\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6177\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"69.327\",\n      weight: \"39.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6178\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"9.794\",\n      weight: \"4.694\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6179\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.55\",\n      weight: \"1.246\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6180\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"143.017\",\n      weight: \"99.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6181\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6182\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6185\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6186\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6187\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"134.792\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6188\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.466\",\n      weight: \"248\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6189\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"500.517\",\n      weight: \"1376.74\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6210\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.222\",\n      weight: \"24\",\n      embodiedLand: \"11.101\",\n      embodiedWater: \"285.816\",\n    },\n    {\n      eid: \"e6211\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.201\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6212\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6213\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.127\",\n      weight: \"0.024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6214\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6215\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.948\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6216\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.006\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6270\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6113.626\",\n      weight: \"14771.565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6271\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6272\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"14.65\",\n      weight: \"9.6\",\n      embodiedLand: \"0.224\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6273\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"97.941\",\n      weight: \"48\",\n      embodiedLand: \"5.948\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6274\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.261\",\n      weight: \"3.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6275\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.207\",\n      weight: \"23.502\",\n      embodiedLand: \"0.48152987\",\n      embodiedWater: \"30.8105997\",\n    },\n    {\n      eid: \"e6276\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.151\",\n      weight: \"5.43\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6277\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18.135\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6278\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"24.9972232\",\n      weight: \"43.4084916\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6280\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.101\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6281\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.00156596\",\n      weight: \"0.00208085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6282\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.973\",\n      weight: \"1.347\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6293\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.2\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.139\",\n    },\n    {\n      eid: \"e6294\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.391\",\n      weight: \"25\",\n      embodiedLand: \"7.002\",\n      embodiedWater: \"204.525\",\n    },\n    {\n      eid: \"e6295\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.018\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6330\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6331\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.478\",\n      weight: \"30.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6332\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6333\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6334\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"353.845136\",\n      weight: \"1878.10933\",\n      embodiedLand: \"15.5904614\",\n      embodiedWater: \"3562.77322\",\n    },\n    {\n      eid: \"e6335\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.786\",\n      weight: \"42\",\n      embodiedLand: \"0.943\",\n      embodiedWater: \"91.056\",\n    },\n    {\n      eid: \"e6336\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6337\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2562.825\",\n      weight: \"4828.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6437\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.35799817\",\n      weight: \"5.965\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6438\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.96291721\",\n      weight: \"1.082\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"2.028\",\n    },\n    {\n      eid: \"e6439\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.063\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6440\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"1.881\",\n      weight: \"0.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6441\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6442\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"161.633092\",\n      weight: \"131.698943\",\n      embodiedLand: \"103.093103\",\n      embodiedWater: \"356.509274\",\n    },\n    {\n      eid: \"e6443\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.013\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6444\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"337.977\",\n      weight: \"582.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6445\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"1.526\",\n      embodiedLand: \"0.37\",\n      embodiedWater: \"84.283\",\n    },\n    {\n      eid: \"e6446\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4579.296\",\n      weight: \"12984.96\",\n      embodiedLand: \"3316.527\",\n      embodiedWater: \"366708.255\",\n    },\n    {\n      eid: \"e6447\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6448\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.24\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6449\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.862\",\n      weight: \"1.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6451\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6452\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6917.997\",\n      weight: \"32990.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6453\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3719.013\",\n      weight: \"13050\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6454\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.544\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6455\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.933\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6469\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.193\",\n      weight: \"24.894\",\n      embodiedLand: \"1.244\",\n      embodiedWater: \"132.162\",\n    },\n    {\n      eid: \"e6470\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.077\",\n      weight: \"0.186\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6471\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"88.215\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6472\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6473\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.254\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6532\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"8.045\",\n      weight: \"44\",\n      embodiedLand: \"3.73\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6533\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.21\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"0.438\",\n    },\n    {\n      eid: \"e6534\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"15.064\",\n      weight: \"43.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6535\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"326.546\",\n      weight: \"1813.443\",\n      embodiedLand: \"499.351\",\n      embodiedWater: \"223.053\",\n    },\n    {\n      eid: \"e6536\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"3.85\",\n      weight: \"25\",\n      embodiedLand: \"4.393\",\n      embodiedWater: \"5.775\",\n    },\n    {\n      eid: \"e6537\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"3.266\",\n      weight: \"21\",\n      embodiedLand: \"0.97\",\n      embodiedWater: \"69.3\",\n    },\n    {\n      eid: \"e6538\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.59555736\",\n      weight: \"0.96\",\n      embodiedLand: \"0.038\",\n      embodiedWater: \"5.211\",\n    },\n    {\n      eid: \"e6539\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.06377214\",\n      weight: \"0.08899229\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.05394042\",\n    },\n    {\n      eid: \"e6540\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"222.69\",\n      weight: \"1394.035\",\n      embodiedLand: \"436.708\",\n      embodiedWater: \"224.44\",\n    },\n    {\n      eid: \"e6541\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"988.605\",\n      weight: \"5010.909\",\n      embodiedLand: \"1241.576\",\n      embodiedWater: \"410.895\",\n    },\n    {\n      eid: \"e6542\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.986\",\n      weight: \"9.5\",\n      embodiedLand: \"0.479\",\n      embodiedWater: \"45.277\",\n    },\n    {\n      eid: \"e6543\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1092.675\",\n      weight: \"6495\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6544\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"452.602\",\n      weight: \"2038.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6545\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"6.63923657\",\n      weight: \"5.90356819\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6546\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"288.901\",\n      weight: \"2028.38\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6547\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3353.129\",\n      weight: \"19610.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6548\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"948.934454\",\n      weight: \"4372.09334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6549\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6550\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"79.648\",\n      weight: \"504.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6551\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1726.318\",\n      weight: \"9113.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6567\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.01797173\",\n      weight: \"0.839\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"0.103\",\n    },\n    {\n      eid: \"e6568\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.084\",\n      weight: \"0.085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6655\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.865\",\n      weight: \"0.451\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6656\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.841\",\n      weight: \"13.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6657\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6658\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.0198093\",\n      weight: \"10.0095949\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6659\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6660\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.221\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6661\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.444\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6662\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.732751\",\n      weight: \"37.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6663\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6664\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.389\",\n      weight: \"6.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6666\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.611\",\n      weight: \"0.722\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6667\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.014\",\n      weight: \"3.382\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6690\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"227.071\",\n      weight: \"1000.665\",\n      embodiedLand: \"616.851\",\n      embodiedWater: \"729.485\",\n    },\n    {\n      eid: \"e6691\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.486\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6692\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.194\",\n      weight: \"0.633\",\n      embodiedLand: \"0.042\",\n      embodiedWater: \"4.535\",\n    },\n    {\n      eid: \"e6693\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.126\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6694\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.043\",\n      weight: \"0.295\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6695\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.596\",\n      weight: \"6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6696\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6697\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.115\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6698\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.767\",\n      weight: \"0.573\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6739\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"30.039\",\n      weight: \"20\",\n      embodiedLand: \"0.17\",\n      embodiedWater: \"2.22\",\n    },\n    {\n      eid: \"e6740\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6741\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"187.414\",\n      weight: \"81.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6742\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"443.222\",\n      weight: \"441.628\",\n      embodiedLand: \"167.33\",\n      embodiedWater: \"7857.887\",\n    },\n    {\n      eid: \"e6743\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6744\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"49.186\",\n      weight: \"24.728\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6745\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.135\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6746\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1413.126\",\n      weight: \"572.235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6747\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.074\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6802\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6803\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6804\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.327\",\n      weight: \"19.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6805\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6806\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6807\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6808\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.212\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6809\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.228\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6810\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.019\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6811\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6812\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6833\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.219\",\n      weight: \"0.503\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e6834\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"193.924\",\n      weight: \"375\",\n      embodiedLand: \"194.083\",\n      embodiedWater: \"3776.25\",\n    },\n    {\n      eid: \"e6835\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.017\",\n      weight: \"19.5\",\n      embodiedLand: \"8.554\",\n      embodiedWater: \"382.551\",\n    },\n    {\n      eid: \"e6836\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.091\",\n      weight: \"0.02\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6837\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"64\",\n      targetSimName: \"BTN\",\n      targetName: \"Bhutan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"77.909\",\n      weight: \"306\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6838\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6839\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.403\",\n      weight: \"0.365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6840\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7020\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7021\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7022\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"238\",\n      targetSimName: \"FLK\",\n      targetName: \"Falkland Isds (Malvinas)\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7023\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7024\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7025\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7026\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.929\",\n      weight: \"3.746\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7027\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7028\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.672\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7030\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.506\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7031\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7032\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"30.968\",\n      weight: \"60\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7047\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7048\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7049\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7059\",\n      source: \"533\",\n      sourceSimName: \"ABW\",\n      sourceRegion: \"Aruba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7062\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7063\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7064\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7072\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.055\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7073\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7163\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.521\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7164\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.288\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7165\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.328\",\n      weight: \"0.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7166\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"26.252\",\n      weight: \"1.208\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7167\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7168\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7169\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.355\",\n      weight: \"23.559\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7188\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.004\",\n    },\n    {\n      eid: \"e7189\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"21.386\",\n      weight: \"136.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7190\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.379\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7191\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.356\",\n      weight: \"0.982\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7192\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.951\",\n      weight: \"141\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7193\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.256\",\n      weight: \"2.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7221\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7222\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.966\",\n      weight: \"2.817\",\n      embodiedLand: \"0.349\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7223\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"20.293\",\n      weight: \"15.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7224\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"20.609\",\n      weight: \"35\",\n      embodiedLand: \"21.084\",\n      embodiedWater: \"566.545\",\n    },\n    {\n      eid: \"e7225\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.981\",\n      weight: \"28.684\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7226\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"249.489\",\n      weight: \"370\",\n      embodiedLand: \"118.35\",\n      embodiedWater: \"54063.29\",\n    },\n    {\n      eid: \"e7227\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7228\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"177.342\",\n      weight: \"265.715\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7229\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7230\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7231\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"29.038\",\n      weight: \"39.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7305\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.338\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7306\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.014\",\n      weight: \"0.01\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7307\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"672\",\n      weight: \"3264.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7308\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.07\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.106\",\n    },\n    {\n      eid: \"e7309\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7310\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.882\",\n      weight: \"0.84\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7311\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.401\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7312\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7313\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.331\",\n      weight: \"23.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7358\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"108.657\",\n      weight: \"200.963\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7359\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"98.433\",\n      weight: \"151.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7360\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.211\",\n      weight: \"4.3\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"10.109\",\n    },\n    {\n      eid: \"e7361\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.125\",\n      weight: \"6.503\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7362\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.616\",\n      weight: \"41.331\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7363\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.125\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7364\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.165\",\n      weight: \"0.055\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7365\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7366\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.183\",\n      weight: \"0.152\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.036\",\n    },\n    {\n      eid: \"e7367\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7368\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.222\",\n      weight: \"0.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7369\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"143.971\",\n      weight: \"104.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7370\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.444\",\n      weight: \"0.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7371\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.662\",\n      weight: \"4.95\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7372\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"241.798\",\n      weight: \"172.775\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7373\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"7.72031118\",\n      weight: \"13.3129919\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7374\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.143\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7375\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.572\",\n      weight: \"0.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7379\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7380\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7384\",\n      source: \"584\",\n      sourceSimName: \"MHL\",\n      sourceRegion: \"Marshall Isds\",\n      sourceName: \"Oceania\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"173.38\",\n      weight: \"514.539\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7551\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.467\",\n      weight: \"8.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7552\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.749\",\n      weight: \"0.657\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7553\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.707\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7554\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.019\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7555\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.665\",\n      weight: \"0.191\",\n      embodiedLand: \"0.00237267\",\n      embodiedWater: \"2.86855901\",\n    },\n    {\n      eid: \"e7556\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"45.897\",\n      weight: \"108\",\n      embodiedLand: \"94.494\",\n      embodiedWater: \"993.276\",\n    },\n    {\n      eid: \"e7557\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"33.126\",\n      weight: \"85\",\n      embodiedLand: \"49.298\",\n      embodiedWater: \"519.945\",\n    },\n    {\n      eid: \"e7558\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.969\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7600\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.135\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7601\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.396\",\n      weight: \"5.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7602\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.484\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7603\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"89.077\",\n      weight: \"262\",\n      embodiedLand: \"14.9602\",\n      embodiedWater: \"24.628\",\n    },\n    {\n      eid: \"e7604\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"140.541\",\n      weight: \"1387.5\",\n      embodiedLand: \"722.268\",\n      embodiedWater: \"10034.4\",\n    },\n    {\n      eid: \"e7605\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.5\",\n      weight: \"5.26\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7606\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"58.626\",\n      weight: \"142.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7607\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.478\",\n      weight: \"0.354\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7608\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.908\",\n      weight: \"1.673\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7609\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.489\",\n      weight: \"0.251\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7610\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.519\",\n      weight: \"4.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7611\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"22\",\n      weight: \"110\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7612\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.307\",\n      weight: \"25.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7613\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7614\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2.04\",\n      weight: \"3.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7627\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7628\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7629\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7701\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.09\",\n      weight: \"0.056\",\n      embodiedLand: \"0.022\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7702\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.12\",\n      weight: \"23.76\",\n      embodiedLand: \"4.716\",\n      embodiedWater: \"141.396\",\n    },\n    {\n      eid: \"e7703\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"253.201\",\n      weight: \"2164.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7704\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"176\",\n      weight: \"2000\",\n      embodiedLand: \"512.183\",\n      embodiedWater: \"244\",\n    },\n    {\n      eid: \"e7705\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.008\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7706\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"43.718\",\n      weight: \"321.454\",\n      embodiedLand: \"99.0839337\",\n      embodiedWater: \"39.2173983\",\n    },\n    {\n      eid: \"e7707\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.926\",\n      weight: \"1.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7708\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"110\",\n      weight: \"1100\",\n      embodiedLand: \"264.036\",\n      embodiedWater: \"247.5\",\n    },\n    {\n      eid: \"e7709\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4903.23583\",\n      weight: \"30611.0521\",\n      embodiedLand: \"7784.12365\",\n      embodiedWater: \"4254.93621\",\n    },\n    {\n      eid: \"e7710\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"133.791\",\n      weight: \"200.04\",\n      embodiedLand: \"37.571\",\n      embodiedWater: \"3567.513\",\n    },\n    {\n      eid: \"e7711\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.368\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7712\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6301.54229\",\n      weight: \"39230.597\",\n      embodiedLand: \"9966.60233\",\n      embodiedWater: \"4825.3641\",\n    },\n    {\n      eid: \"e7713\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10163.8981\",\n      weight: \"51351.1604\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7714\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"145.554268\",\n      weight: \"317.548282\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7715\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14598.991\",\n      weight: \"82200.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7716\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.114\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7717\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"313.761\",\n      weight: \"653.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7718\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7820\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7821\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.728\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7822\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.665\",\n      weight: \"0.358\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7823\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.026\",\n      weight: \"5.379\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7824\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"28.047\",\n      weight: \"7.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7825\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"0.81\",\n      weight: \"0.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.023\",\n    },\n    {\n      eid: \"e7826\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.355\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7827\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.1145\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7828\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"215.438505\",\n      weight: \"23.9549268\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7829\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"73.9066099\",\n      weight: \"25.626565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7830\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.99\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7831\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.44\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"2.623\",\n    },\n    {\n      eid: \"e7832\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.51186012\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7833\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.093\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7834\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.54\",\n      weight: \"15.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7835\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"64.745\",\n      weight: \"19.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7836\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.872\",\n      weight: \"0.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7912\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.46\",\n      weight: \"0.249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7913\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.823\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7914\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7915\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.149\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7916\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.659\",\n      weight: \"0.955\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7917\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.502\",\n      weight: \"0.139\",\n      embodiedLand: \"0.045\",\n      embodiedWater: \"1.387\",\n    },\n    {\n      eid: \"e7918\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7919\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"48.872\",\n      weight: \"81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7920\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7921\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.177\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7922\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7923\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7924\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.403\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7927\",\n      source: \"612\",\n      sourceSimName: \"PCN\",\n      sourceRegion: \"Pitcairn\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8061\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.139\",\n      weight: \"0.145\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8064\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8065\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"244.824\",\n      weight: \"507.82\",\n      embodiedLand: \"154.861\",\n      embodiedWater: \"22.852\",\n    },\n    {\n      eid: \"e8066\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"70.822\",\n      weight: \"231\",\n      embodiedLand: \"31.512\",\n      embodiedWater: \"476.553\",\n    },\n    {\n      eid: \"e8067\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12161.233\",\n      weight: \"57149.4\",\n      embodiedLand: \"12254.953\",\n      embodiedWater: \"180420.656\",\n    },\n    {\n      eid: \"e8068\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.272\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8070\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"220.92779\",\n      weight: \"400.073031\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8071\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8072\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1248.54\",\n      weight: \"5500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8073\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"302.5090046\",\n      weight: \"656.733934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8074\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1502.111\",\n      weight: \"7201.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8075\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"691.763\",\n      weight: \"1537.68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8076\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8077\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1568.202\",\n      weight: \"4027.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8078\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"80.973\",\n      weight: \"434.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8162\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"56.829\",\n      weight: \"75\",\n      embodiedLand: \"21.703\",\n      embodiedWater: \"1097.55\",\n    },\n    {\n      eid: \"e8163\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"50.3339085\",\n      weight: \"45.9143482\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8164\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"58.8618795\",\n      weight: \"87.6717437\",\n      embodiedLand: \"29.8536241\",\n      embodiedWater: \"1680.66691\",\n    },\n    {\n      eid: \"e8165\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.028\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.032\",\n    },\n    {\n      eid: \"e8166\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.68987608\",\n      weight: \"0.56109969\",\n      embodiedLand: \"0.0422374\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8167\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.006\",\n      weight: \"28\",\n      embodiedLand: \"22.605\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8168\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.111\",\n      weight: \"50\",\n      embodiedLand: \"13.661\",\n      embodiedWater: \"723.6\",\n    },\n    {\n      eid: \"e8169\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"535\",\n      targetSimName: \"BES\",\n      targetName: \"Bonaire\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.166\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8170\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8172\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8173\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"267.644962\",\n      weight: \"510\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8174\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"456.64271\",\n      weight: \"587.244797\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8175\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8176\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"1.765\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8177\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.143\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8178\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8179\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8180\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.027\",\n      weight: \"34.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8182\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.009\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8183\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8184\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.272\",\n      weight: \"0.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8216\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8217\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8219\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"60.79\",\n      weight: \"74.981\",\n      embodiedLand: \"2.912\",\n      embodiedWater: \"1094.423\",\n    },\n    {\n      eid: \"e8220\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"83.636\",\n      weight: \"34.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8221\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"0.00009091\",\n      embodiedWater: \"0.00372727\",\n    },\n    {\n      eid: \"e8222\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"18.134\",\n      weight: \"45.408\",\n      embodiedLand: \"0.035\",\n      embodiedWater: \"79.873\",\n    },\n    {\n      eid: \"e8223\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.824\",\n      weight: \"10\",\n      embodiedLand: \"3.735\",\n      embodiedWater: \"104.17\",\n    },\n    {\n      eid: \"e8224\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8225\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8226\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.458\",\n      weight: \"0.054\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8227\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8324\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2595\",\n      weight: \"15000\",\n      embodiedLand: \"3360.071\",\n      embodiedWater: \"28275\",\n    },\n    {\n      eid: \"e8325\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.024\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.017\",\n    },\n    {\n      eid: \"e8326\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11237.2354\",\n      weight: \"56273.1014\",\n      embodiedLand: \"17817.2079\",\n      embodiedWater: \"134548.986\",\n    },\n    {\n      eid: \"e8327\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1985\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8329\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4093.718\",\n      weight: \"15865.57\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8330\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"214.3\",\n      weight: \"960\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8331\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1094.973\",\n      weight: \"7050.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8332\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"228.149\",\n      weight: \"1193.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8333\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3847.356\",\n      weight: \"21928.554\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8334\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1553.1\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8335\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"142.45\",\n      weight: \"230\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8468\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.432\",\n      weight: \"10.771\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8469\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1384.377\",\n      weight: \"3256\",\n      embodiedLand: \"1499.247\",\n      embodiedWater: \"5655.672\",\n    },\n    {\n      eid: \"e8470\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"301.524\",\n      weight: \"261.39\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8471\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8472\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"13.5\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8473\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8474\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.47\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8475\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1585.217\",\n      weight: \"11000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8476\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"202.572054\",\n      weight: \"1050\",\n      embodiedLand: \"269.74\",\n      embodiedWater: \"5738.25\",\n    },\n    {\n      eid: \"e8478\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1198.008\",\n      weight: \"7131\",\n      embodiedLand: \"2927.035\",\n      embodiedWater: \"11794.674\",\n    },\n    {\n      eid: \"e8480\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1798.27193\",\n      weight: \"8589.5235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8481\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1929.019\",\n      weight: \"9904\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8482\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"11.153\",\n      weight: \"45.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8483\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.0980149\",\n      weight: \"103.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8484\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1427.83359\",\n      weight: \"6406.65847\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8485\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8486\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"257.303\",\n      weight: \"957\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8506\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8507\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8508\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.177\",\n      weight: \"0.178\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8524\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8526\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8527\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"12.999\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8531\",\n      source: \"660\",\n      sourceSimName: \"AIA\",\n      sourceRegion: \"Anguilla\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8545\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"92\",\n      targetSimName: \"VGB\",\n      targetName: \"British Virgin Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8546\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8547\",\n      source: \"666\",\n      sourceSimName: \"SPM\",\n      sourceRegion: \"Saint Pierre and Miquelon\",\n      sourceName: \"North America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8565\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8566\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8567\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8568\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8573\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8574\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8575\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"838\",\n      targetSimName: \"\",\n      targetName: \"Free Zones\",\n      targetRegion: \"Other\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.26\",\n      weight: \"1.155\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8652\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8653\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8654\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.48\",\n      weight: \"21.772\",\n      embodiedLand: \"7.63664924\",\n      embodiedWater: \"109.904952\",\n    },\n    {\n      eid: \"e8655\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.859\",\n      embodiedLand: \"0.014\",\n      embodiedWater: \"0.338\",\n    },\n    {\n      eid: \"e8656\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8657\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.115\",\n      weight: \"2.5\",\n      embodiedLand: \"0.292\",\n      embodiedWater: \"34.81\",\n    },\n    {\n      eid: \"e8658\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.301\",\n    },\n    {\n      eid: \"e8659\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.838\",\n      weight: \"16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8660\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8661\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.252\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8662\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.509\",\n      weight: \"1.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8663\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8664\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"7.747\",\n      weight: \"5.335\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8718\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.062\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8720\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8721\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.085\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8722\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.302\",\n      weight: \"1.31\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8723\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.53\",\n      weight: \"1.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8724\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.214\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8725\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"666\",\n      targetSimName: \"SPM\",\n      targetName: \"Saint Pierre and Miquelon\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"84\",\n      weight: \"261.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8726\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8794\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.967\",\n      weight: \"21.5\",\n      embodiedLand: \"6.634\",\n      embodiedWater: \"5.268\",\n    },\n    {\n      eid: \"e8796\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.028\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.012\",\n    },\n    {\n      eid: \"e8797\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8798\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.2366732\",\n      weight: \"177.68999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8800\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"129.178771\",\n      weight: \"288.216749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8801\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.403\",\n      weight: \"45.042\",\n      embodiedLand: \"13.431\",\n      embodiedWater: \"10.225\",\n    },\n    {\n      eid: \"e8802\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"26.6315535\",\n      weight: \"63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8803\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8804\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"277.534\",\n      weight: \"46.233\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8805\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8806\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8807\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"61.871\",\n      weight: \"225.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8808\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.51515098\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8809\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.25833351\",\n      weight: \"0.76309616\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8810\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.96\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8817\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8818\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18.484\",\n      weight: \"75\",\n      embodiedLand: \"0.094\",\n      embodiedWater: \"95.025\",\n    },\n    {\n      eid: \"e8819\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.553\",\n      weight: \"25.427\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8820\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8821\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"15.778\",\n      weight: \"69\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8835\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.786\",\n      weight: \"2.5\",\n      embodiedLand: \"1.293\",\n      embodiedWater: \"0.832\",\n    },\n    {\n      eid: \"e8836\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.502\",\n      weight: \"2.93\",\n      embodiedLand: \"2.545\",\n      embodiedWater: \"27.483\",\n    },\n    {\n      eid: \"e8837\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8838\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8839\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.401\",\n      weight: \"0.519\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8840\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.13\",\n      weight: \"10.403\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8841\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8842\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9039\",\n      source: \"699\",\n      sourceSimName: \"IND\",\n      sourceRegion: \"India\",\n      sourceName: \"South Asia\",\n      target: \"581\",\n      targetSimName: \"UMI\",\n      targetName: \"United States Minor Outlying Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.376\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9154\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9155\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"520\",\n      targetSimName: \"NRU\",\n      targetName: \"Nauru\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.12\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9156\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.237\",\n      weight: \"63.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9157\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"40.244\",\n      weight: \"48\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9159\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9160\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.15\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9161\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"63.252\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9162\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.757\",\n      weight: \"0.209\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9224\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.768\",\n      weight: \"1.585\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9225\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e9226\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"90.739\",\n      weight: \"210.86\",\n      embodiedLand: \"23.926\",\n      embodiedWater: \"208.33\",\n    },\n    {\n      eid: \"e9227\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.27\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9228\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9230\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1729.926\",\n      weight: \"4000\",\n      embodiedLand: \"976.835\",\n      embodiedWater: \"240\",\n    },\n    {\n      eid: \"e9231\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"146.145\",\n      weight: \"460\",\n      embodiedLand: \"229.046\",\n      embodiedWater: \"1751.22\",\n    },\n    {\n      eid: \"e9232\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"31.674\",\n      weight: \"42\",\n      embodiedLand: \"27.568\",\n      embodiedWater: \"21.294\",\n    },\n    {\n      eid: \"e9233\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"344.235\",\n      weight: \"1266.178\",\n      embodiedLand: \"306.755\",\n      embodiedWater: \"4740.57\",\n    },\n    {\n      eid: \"e9234\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.173\",\n      weight: \"1.791\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9235\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.155\",\n      weight: \"1.878\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9236\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.454\",\n      weight: \"3.653\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9237\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.229\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9397\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.297\",\n      weight: \"117.657\",\n      embodiedLand: \"12.759\",\n      embodiedWater: \"163.896\",\n    },\n    {\n      eid: \"e9398\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.78\",\n      weight: \"3.285\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9399\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"100\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9400\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"580\",\n      targetSimName: \"MNP\",\n      targetName: \"N. Mariana Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"28212.429\",\n      weight: \"50643.596\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9401\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"19.732\",\n      weight: \"25.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9402\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.917\",\n      weight: \"30.866\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9403\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"767.08\",\n      weight: \"1370\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9404\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9405\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.189\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9460\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.115\",\n      weight: \"1.485\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9461\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"76.922\",\n      weight: \"78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9462\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.043\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9463\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"285.64339\",\n      weight: \"1519.634\",\n      embodiedLand: \"231.021\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9464\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"91.632\",\n      weight: \"210.82\",\n      embodiedLand: \"23.231\",\n      embodiedWater: \"116.162\",\n    },\n    {\n      eid: \"e9465\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.041\",\n      embodiedLand: \"0.01\",\n      embodiedWater: \"0.436\",\n    },\n    {\n      eid: \"e9467\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"6\",\n      weight: \"3.75\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"36.904\",\n    },\n    {\n      eid: \"e9468\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"52.7905262\",\n      weight: \"139\",\n      embodiedLand: \"46.698\",\n      embodiedWater: \"55.739\",\n    },\n    {\n      eid: \"e9469\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.906\",\n      weight: \"22\",\n      embodiedLand: \"6.456\",\n      embodiedWater: \"8.844\",\n    },\n    {\n      eid: \"e9470\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.687\",\n      weight: \"0.721\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9471\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9472\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.93823874\",\n      weight: \"7.86021619\",\n      embodiedLand: \"0.01751575\",\n      embodiedWater: \"27.1184749\",\n    },\n    {\n      eid: \"e9473\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.876\",\n      weight: \"30.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9474\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9483\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9484\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"19.298\",\n      weight: \"11.899\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9630\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9631\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9632\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9633\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.053\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9634\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.267\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9635\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9636\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9637\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"776\",\n      targetSimName: \"TON\",\n      targetName: \"Tonga\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.01\",\n      weight: \"35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9638\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"10.271\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9639\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"7.992\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9640\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"291.645\",\n      weight: \"223.789\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9641\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"406.568\",\n      weight: \"326.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9642\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9670\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"249.898\",\n      weight: \"235.45\",\n      embodiedLand: \"59.656\",\n      embodiedWater: \"250.99\",\n    },\n    {\n      eid: \"e9671\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9672\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"49.652\",\n      weight: \"10\",\n      embodiedLand: \"15.749\",\n      embodiedWater: \"1.39\",\n    },\n    {\n      eid: \"e9673\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e9674\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"262.679\",\n      weight: \"424.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9675\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9676\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e9677\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.583\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9678\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.8\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9679\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9680\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"108.245803\",\n      weight: \"74.0433696\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9681\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.073\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9682\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.04989606\",\n      weight: \"0.08321444\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9683\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9847\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.162\",\n      weight: \"49.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9848\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.104\",\n      weight: \"0.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9849\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"71.418\",\n      weight: \"180\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9850\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.3543178\",\n      weight: \"71.6911179\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9851\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9852\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9853\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.199\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9856\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9857\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9889\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.333\",\n      weight: \"0.31\",\n      embodiedLand: \"0.02\",\n      embodiedWater: \"11.447\",\n    },\n    {\n      eid: \"e9890\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.181\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9891\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"20.076\",\n      weight: \"40\",\n      embodiedLand: \"69.334\",\n      embodiedWater: \"202.56\",\n    },\n    {\n      eid: \"e9892\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.5\",\n      weight: \"5\",\n      embodiedLand: \"5.013\",\n      embodiedWater: \"44.535\",\n    },\n    {\n      eid: \"e9893\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9894\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9895\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.333\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9896\",\n      source: \"732\",\n      sourceSimName: \"ESH\",\n      sourceRegion: \"Western Sahara\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9934\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"48.174\",\n      weight: \"340.23\",\n      embodiedLand: \"96.561\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9935\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9936\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.141\",\n      weight: \"0.09\",\n      embodiedLand: \"0.034\",\n      embodiedWater: \"0.65\",\n    },\n    {\n      eid: \"e9937\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.15\",\n      embodiedLand: \"0.054\",\n      embodiedWater: \"1.152\",\n    },\n    {\n      eid: \"e9938\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.08\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9939\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"59.563\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9940\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"486\",\n      weight: \"1800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9941\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9942\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2459.276\",\n      weight: \"7800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9943\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.296\",\n      weight: \"45.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9944\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"86.553\",\n      weight: \"168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9945\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"126\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9946\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.625\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9947\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.8\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9960\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.105\",\n      weight: \"26\",\n      embodiedLand: \"14.55\",\n      embodiedWater: \"11.804\",\n    },\n    {\n      eid: \"e9961\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.963\",\n      weight: \"1.128\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9962\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.042\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9963\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.022\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9964\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"136.368\",\n      weight: \"352.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10072\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"321.247599\",\n      weight: \"594.892627\",\n      embodiedLand: \"157.689777\",\n      embodiedWater: \"218.325999\",\n    },\n    {\n      eid: \"e10073\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.166\",\n      weight: \"0.461\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10074\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.097\",\n      weight: \"6.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10075\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.949\",\n      weight: \"1\",\n      embodiedLand: \"1.187\",\n      embodiedWater: \"5.89\",\n    },\n    {\n      eid: \"e10076\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"293.17\",\n      weight: \"713\",\n      embodiedLand: \"176.112\",\n      embodiedWater: \"7.843\",\n    },\n    {\n      eid: \"e10077\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.593\",\n      weight: \"0.373\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10078\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.542\",\n      weight: \"7.661\",\n      embodiedLand: \"2.193\",\n      embodiedWater: \"28.537\",\n    },\n    {\n      eid: \"e10079\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"7903.00956\",\n      weight: \"26948.6797\",\n      embodiedLand: \"6860.2467\",\n      embodiedWater: \"1077.94733\",\n    },\n    {\n      eid: \"e10080\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.537\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10081\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10082\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2650.321\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10083\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10084\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.659\",\n      weight: \"2.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10085\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"525.239248\",\n      weight: \"1150.87085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10086\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"776.713\",\n      weight: \"2078\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10198\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10199\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10200\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10201\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.103\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10202\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"897.592\",\n      weight: \"1303.4\",\n      embodiedLand: \"445.321\",\n      embodiedWater: \"21745.926\",\n    },\n    {\n      eid: \"e10203\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.004\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10204\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e10205\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4511.886\",\n      weight: \"18900\",\n      embodiedLand: \"3534.409\",\n      embodiedWater: \"62181\",\n    },\n    {\n      eid: \"e10206\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10207\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"70.534\",\n      weight: \"150.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10208\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"6.519\",\n      weight: \"6.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10209\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.173\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10210\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10211\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10212\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.429\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10213\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"389.737\",\n      weight: \"477.087\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10214\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.041\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10215\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.1431594\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10245\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.064\",\n      weight: \"0.107\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10246\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.032\",\n      weight: \"0.21\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.014\",\n    },\n    {\n      eid: \"e10247\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10248\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8862.493\",\n      weight: \"24861.286\",\n      embodiedLand: \"1247.997\",\n      embodiedWater: \"1864.596\",\n    },\n    {\n      eid: \"e10250\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.791\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10251\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10252\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.045\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10253\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.034\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10254\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10255\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.895\",\n      weight: \"1.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10264\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"89.465\",\n      weight: \"296.215\",\n      embodiedLand: \"159.202\",\n      embodiedWater: \"74.646\",\n    },\n    {\n      eid: \"e10265\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10461\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"212\",\n      targetSimName: \"DMA\",\n      targetName: \"Dominica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"9.736\",\n      weight: \"25.006\",\n      embodiedLand: \"10.644\",\n      embodiedWater: \"105.225\",\n    },\n    {\n      eid: \"e10462\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"234\",\n      targetSimName: \"FRO\",\n      targetName: \"Faeroe Isds\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.136\",\n      weight: \"0.315\",\n      embodiedLand: \"0.178\",\n      embodiedWater: \"2.462\",\n    },\n    {\n      eid: \"e10464\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.01\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.091\",\n    },\n    {\n      eid: \"e10465\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.484\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10495\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.112\",\n      weight: \"7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10496\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.283\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10497\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5\",\n      weight: \"18.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10498\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.60547527\",\n      weight: \"2.45939658\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10499\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"17.2519049\",\n      weight: \"115.598246\",\n      embodiedLand: \"99.7718139\",\n      embodiedWater: \"58.6084014\",\n    },\n    {\n      eid: \"e10500\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.00827273\",\n    },\n    {\n      eid: \"e10501\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10502\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.981\",\n      weight: \"1.027\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10509\",\n      source: \"772\",\n      sourceSimName: \"TKL\",\n      sourceRegion: \"Tokelau\",\n      sourceName: \"Oceania\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10517\",\n      source: \"776\",\n      sourceSimName: \"TON\",\n      sourceRegion: \"Tonga\",\n      sourceName: \"Oceania\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.113\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10554\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10555\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10556\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10557\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10558\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10559\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10560\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10561\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10562\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10563\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10564\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10565\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10566\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10703\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10704\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10705\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10706\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10707\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.831\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10708\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10709\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.154\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10778\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.737\",\n      weight: \"1.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10779\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.415\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10780\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10781\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"8.223\",\n      weight: \"9.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10782\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4.469\",\n      weight: \"2.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10783\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.389\",\n      weight: \"16.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10784\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.163\",\n      weight: \"19.327\",\n      embodiedLand: \"4.211\",\n      embodiedWater: \"62.813\",\n    },\n    {\n      eid: \"e10785\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"17.492\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10786\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6.28513636\",\n      weight: \"4.23263329\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10787\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10788\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.276\",\n      weight: \"0.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10789\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"46.053\",\n      weight: \"107.5\",\n      embodiedLand: \"2.563\",\n      embodiedWater: \"48.805\",\n    },\n    {\n      eid: \"e10790\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.516\",\n      weight: \"20.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10791\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.274\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10792\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"401.922618\",\n      weight: \"985.504812\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10793\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.042\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10794\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"33.233\",\n      weight: \"41.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10795\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"388.489\",\n      weight: \"300\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10976\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10977\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14.0119386\",\n      weight: \"26.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10978\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.708\",\n      weight: \"233.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10979\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.198\",\n      weight: \"0.714\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10990\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"372.658\",\n      weight: \"1562.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10991\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.407\",\n      weight: \"2.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11003\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.403\",\n      weight: \"24.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11004\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"8.714\",\n      weight: \"21.576\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11049\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11050\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.754\",\n      weight: \"16\",\n      embodiedLand: \"4.518\",\n      embodiedWater: \"69.808\",\n    },\n    {\n      eid: \"e11051\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"8.335\",\n      weight: \"22.5\",\n      embodiedLand: \"10.227\",\n      embodiedWater: \"9.923\",\n    },\n    {\n      eid: \"e11052\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.018\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11053\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.263\",\n      weight: \"0.139\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11054\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.216\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11209\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"24.476\",\n      weight: \"20.587\",\n      embodiedLand: \"11.055\",\n      embodiedWater: \"57.644\",\n    },\n    {\n      eid: \"e11210\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"184\",\n      targetSimName: \"COK\",\n      targetName: \"Cook Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11211\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2451.982731\",\n      weight: \"16689\",\n      embodiedLand: \"2800.015\",\n      embodiedWater: \"84513.096\",\n    },\n    {\n      eid: \"e11212\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11213\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4890.88387\",\n      weight: \"20013.8008\",\n      embodiedLand: \"5001.53453\",\n      embodiedWater: \"32702.5506\",\n    },\n    {\n      eid: \"e11214\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7378.521\",\n      weight: \"27210.945\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11215\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11216\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1486.932\",\n      weight: \"4224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11217\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"6.555\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11218\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25906197\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11219\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1683.6727\",\n      weight: \"6988.48925\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11220\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11221\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11222\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.801\",\n      weight: \"190.825\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11223\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1725.40859\",\n      weight: \"3353.20792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11224\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"29.675\",\n      weight: \"111.862\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11225\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11336\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11337\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11338\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.243\",\n      weight: \"46.01\",\n      embodiedLand: \"10.002\",\n      embodiedWater: \"579.542\",\n    },\n    {\n      eid: \"e11339\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"97.433\",\n      weight: \"247.995\",\n      embodiedLand: \"119.179\",\n      embodiedWater: \"1537.817\",\n    },\n    {\n      eid: \"e11340\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"41.094\",\n      weight: \"88.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11341\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11342\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.135\",\n      weight: \"4.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11343\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.369\",\n      weight: \"0.63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11344\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"140.284\",\n      weight: \"337.113\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11345\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.159\",\n      weight: \"0.854\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11346\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"114.727\",\n      weight: \"85.648\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11347\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"23.162\",\n      weight: \"30.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11348\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.07\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11522\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"125.184\",\n      weight: \"45.6\",\n      embodiedLand: \"9.628\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11523\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11524\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11525\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.981\",\n      weight: \"0.98\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11526\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"3.556\",\n      weight: \"3.554\",\n      embodiedLand: \"0.914\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11527\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.147\",\n      weight: \"0.138\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11528\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.13\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11529\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11580\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.405\",\n      weight: \"23.6\",\n      embodiedLand: \"54.414\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11581\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"113.617\",\n      weight: \"655.96\",\n      embodiedLand: \"650.261\",\n      embodiedWater: \"1034.449\",\n    },\n    {\n      eid: \"e11582\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.097\",\n      weight: \"40\",\n      embodiedLand: \"27.575\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11583\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.054\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.463\",\n    },\n    {\n      eid: \"e11584\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.152\",\n      weight: \"40.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11585\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11586\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.563\",\n      weight: \"14.38\",\n      embodiedLand: \"9.575\",\n      embodiedWater: \"9.707\",\n    },\n    {\n      eid: \"e11587\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.496\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11588\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.863\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11589\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.13198458\",\n      weight: \"5.40716181\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11591\",\n      source: \"837\",\n      sourceSimName: \"\",\n      sourceRegion: \"Bunkers\",\n      sourceName: \"Other\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11597\",\n      source: \"838\",\n      sourceSimName: \"\",\n      sourceRegion: \"Free Zones\",\n      sourceName: \"Other\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.009\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11798\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"6.137\",\n      weight: \"1.878\",\n      embodiedLand: \"0.36\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11799\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"9.639\",\n      weight: \"19.875\",\n      embodiedLand: \"11.311\",\n      embodiedWater: \"1.848\",\n    },\n    {\n      eid: \"e11800\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.64\",\n      weight: \"20.752\",\n      embodiedLand: \"2.723\",\n      embodiedWater: \"10.999\",\n    },\n    {\n      eid: \"e11801\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"72.797\",\n      weight: \"82.805\",\n      embodiedLand: \"8.475\",\n      embodiedWater: \"106.818\",\n    },\n    {\n      eid: \"e11802\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"752.606\",\n      weight: \"2216.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11824\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.785\",\n      weight: \"69\",\n      embodiedLand: \"0.615\",\n      embodiedWater: \"8.901\",\n    },\n    {\n      eid: \"e11825\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"43.6395248\",\n      weight: \"25.096\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11826\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"429.663\",\n      weight: \"250\",\n      embodiedLand: \"111.522\",\n      embodiedWater: \"2267.75\",\n    },\n    {\n      eid: \"e11827\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11828\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"109.987\",\n      weight: \"30\",\n      embodiedLand: \"16.331\",\n      embodiedWater: \"27.69\",\n    },\n    {\n      eid: \"e11829\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.487\",\n      weight: \"2.5\",\n      embodiedLand: \"1.554\",\n      embodiedWater: \"30.817\",\n    },\n    {\n      eid: \"e11830\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11951\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18298.88\",\n      weight: \"67086.608\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11952\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.537\",\n      weight: \"27.011\",\n      embodiedLand: \"11.171\",\n      embodiedWater: \"16.396\",\n    },\n    {\n      eid: \"e11953\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24935.4179\",\n      weight: \"104332.188\",\n      embodiedLand: \"47360.4095\",\n      embodiedWater: \"68441.9161\",\n    },\n    {\n      eid: \"e11954\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"96.16\",\n      weight: \"524.11\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11955\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"13.297\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11967\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24401.666\",\n      weight: \"75279.56\",\n      embodiedLand: \"28122.882\",\n      embodiedWater: \"36209.468\",\n    },\n    {\n      eid: \"e11968\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11996\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"174.23\",\n      weight: \"454.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11997\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11998\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.294\",\n      weight: \"4.58\",\n      embodiedLand: \"1.249\",\n      embodiedWater: \"1.53\",\n    },\n    {\n      eid: \"e11999\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.025\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12000\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.889\",\n      weight: \"21.609\",\n      embodiedLand: \"5.737\",\n      embodiedWater: \"157.097\",\n    },\n    {\n      eid: \"e12001\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.367\",\n      weight: \"1.583\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12002\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.467\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12003\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12004\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"22.327\",\n      weight: \"24.749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12012\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.455\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12013\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12043\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.578\",\n      weight: \"66\",\n      embodiedLand: \"38.092\",\n      embodiedWater: \"4450.248\",\n    },\n    {\n      eid: \"e12044\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12093\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.102\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12094\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"82.825\",\n      weight: \"18.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-force-clustering/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n    clustering: true,\n    clusterNodeStrength: -5,\n    clusterEdgeDistance: 200,\n    clusterNodeSize: 20,\n    clusterFociStrength: 1.2,\n    nodeSpacing: 5,\n    preventOverlap: true,\n  },\n  defaultNode: {\n    size: 15,\n  },\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\", \"drag-node\"],\n  },\n});\nconst colorMap = {\n  2012: \"#BDD2FD\",\n  2013: \"#BDEFDB\",\n  2014: \"#F6C3B7\",\n  2015: \"#FFD8B8\",\n  2016: \"#D3C6EA\",\n};\ngraph.data(data);\ndata.nodes.forEach((i) => {\n  i.cluster = i.year;\n  i.style = Object.assign(i.style || {}, {\n    fill: colorMap[i.year],\n  });\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-functional-params/data.js",
    "content": "export default () => ({\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-functional-params/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get(\"model\");\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n    preventOverlap: true,\n    linkDistance: (d) => {\n      if (d.source.id === \"node0\") {\n        return 100;\n      }\n\n      return 30;\n    },\n    nodeStrength: (d) => {\n      if (d.isLeaf) {\n        return -50;\n      }\n\n      return -10;\n    },\n    edgeStrength: (d) => {\n      if (\n        d.source.id === \"node1\" ||\n        d.source.id === \"node2\" ||\n        d.source.id === \"node3\"\n      ) {\n        return 0.7;\n      }\n\n      return 0.1;\n    },\n  },\n  defaultNode: {\n    color: \"#5B8FF9\",\n  },\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n});\nconst { nodes } = data;\ngraph.data({\n  nodes,\n  edges: data.edges.map(function (edge, i) {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\ngraph.on(\"node:dragstart\", function (e) {\n  graph.layout();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:drag\", function (e) {\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:dragend\", function (e) {\n  e.item.get(\"model\").fx = null;\n  e.item.get(\"model\").fy = null;\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-prevent-overlap/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/force-directed-prevent-overlap/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"force\",\n    preventOverlap: true,\n  },\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n});\n\nfunction refreshDragedNodePosition(e) {\n  const model = e.item.get(\"model\");\n  model.fx = e.x;\n  model.fy = e.y;\n}\n\nconst { nodes } = data;\nnodes.forEach((node) => {\n  node.size = Math.random() * 30 + 5;\n});\ngraph.data({\n  nodes,\n  edges: data.edges.map(function (edge, i) {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\ngraph.render();\ngraph.on(\"node:dragstart\", function (e) {\n  graph.layout();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:drag\", function (e) {\n  const forceLayout = graph.get(\"layoutController\").layoutMethods[0];\n  forceLayout.execute();\n  refreshDragedNodePosition(e);\n});\ngraph.on(\"node:dragend\", function (e) {\n  e.item.get(\"model\").fx = null;\n  e.item.get(\"model\").fy = null;\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n      cluster: \"a\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n      cluster: \"a\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n      cluster: \"a\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n      cluster: \"a\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n      cluster: \"a\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n      cluster: \"a\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n      cluster: \"a\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n      cluster: \"a\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n      cluster: \"a\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n      cluster: \"a\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n      cluster: \"a\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n      cluster: \"a\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n      cluster: \"a\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n      cluster: \"b\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n      cluster: \"b\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n      cluster: \"b\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n      cluster: \"b\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n      cluster: \"b\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n      cluster: \"c\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n      cluster: \"c\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n      cluster: \"c\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n      cluster: \"c\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n      cluster: \"c\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n      cluster: \"c\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n      cluster: \"c\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n      cluster: \"c\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n      cluster: \"c\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n      cluster: \"c\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n      cluster: \"c\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n      cluster: \"c\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n      cluster: \"c\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n      cluster: \"d\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n      cluster: \"d\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n      cluster: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"fruchterman\", fruchtermanLayout);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"fruchterman\",\n    gravity: 5,\n    speed: 5,\n    tick: () => {\n      graph.refreshPositions();\n    },\n  },\n  animate: true,\n  defaultNode: {\n    size: 30,\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman-clustering/data.js",
    "content": "function getData() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n        cluster: \"a\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n        cluster: \"a\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n        cluster: \"a\",\n      },\n      {\n        id: \"3\",\n        label: \"3\",\n        cluster: \"a\",\n      },\n      {\n        id: \"4\",\n        label: \"4\",\n        cluster: \"a\",\n      },\n      {\n        id: \"5\",\n        label: \"5\",\n        cluster: \"a\",\n      },\n      {\n        id: \"6\",\n        label: \"6\",\n        cluster: \"a\",\n      },\n      {\n        id: \"7\",\n        label: \"7\",\n        cluster: \"a\",\n      },\n      {\n        id: \"8\",\n        label: \"8\",\n        cluster: \"a\",\n      },\n      {\n        id: \"9\",\n        label: \"9\",\n        cluster: \"a\",\n      },\n      {\n        id: \"10\",\n        label: \"10\",\n        cluster: \"a\",\n      },\n      {\n        id: \"11\",\n        label: \"11\",\n        cluster: \"a\",\n      },\n      {\n        id: \"12\",\n        label: \"12\",\n        cluster: \"a\",\n      },\n      {\n        id: \"13\",\n        label: \"13\",\n        cluster: \"b\",\n      },\n      {\n        id: \"14\",\n        label: \"14\",\n        cluster: \"b\",\n      },\n      {\n        id: \"15\",\n        label: \"15\",\n        cluster: \"b\",\n      },\n      {\n        id: \"16\",\n        label: \"16\",\n        cluster: \"b\",\n      },\n      {\n        id: \"17\",\n        label: \"17\",\n        cluster: \"b\",\n      },\n      {\n        id: \"18\",\n        label: \"18\",\n        cluster: \"c\",\n      },\n      {\n        id: \"19\",\n        label: \"19\",\n        cluster: \"c\",\n      },\n      {\n        id: \"20\",\n        label: \"20\",\n        cluster: \"c\",\n      },\n      {\n        id: \"21\",\n        label: \"21\",\n        cluster: \"c\",\n      },\n      {\n        id: \"22\",\n        label: \"22\",\n        cluster: \"c\",\n      },\n      {\n        id: \"23\",\n        label: \"23\",\n        cluster: \"c\",\n      },\n      {\n        id: \"24\",\n        label: \"24\",\n        cluster: \"c\",\n      },\n      {\n        id: \"25\",\n        label: \"25\",\n        cluster: \"c\",\n      },\n      {\n        id: \"26\",\n        label: \"26\",\n        cluster: \"c\",\n      },\n      {\n        id: \"27\",\n        label: \"27\",\n        cluster: \"c\",\n      },\n      {\n        id: \"28\",\n        label: \"28\",\n        cluster: \"c\",\n      },\n      {\n        id: \"29\",\n        label: \"29\",\n        cluster: \"c\",\n      },\n      {\n        id: \"30\",\n        label: \"30\",\n        cluster: \"c\",\n      },\n      {\n        id: \"31\",\n        label: \"31\",\n        cluster: \"d\",\n      },\n      {\n        id: \"32\",\n        label: \"32\",\n        cluster: \"d\",\n      },\n      {\n        id: \"33\",\n        label: \"33\",\n        cluster: \"d\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n      {\n        source: \"0\",\n        target: \"3\",\n      },\n      {\n        source: \"0\",\n        target: \"4\",\n      },\n      {\n        source: \"0\",\n        target: \"5\",\n      },\n      {\n        source: \"0\",\n        target: \"7\",\n      },\n      {\n        source: \"0\",\n        target: \"8\",\n      },\n      {\n        source: \"0\",\n        target: \"9\",\n      },\n      {\n        source: \"0\",\n        target: \"10\",\n      },\n      {\n        source: \"0\",\n        target: \"11\",\n      },\n      {\n        source: \"0\",\n        target: \"13\",\n      },\n      {\n        source: \"0\",\n        target: \"14\",\n      },\n      {\n        source: \"0\",\n        target: \"15\",\n      },\n      {\n        source: \"0\",\n        target: \"16\",\n      },\n      {\n        source: \"2\",\n        target: \"3\",\n      },\n      {\n        source: \"4\",\n        target: \"5\",\n      },\n      {\n        source: \"4\",\n        target: \"6\",\n      },\n      {\n        source: \"5\",\n        target: \"6\",\n      },\n      {\n        source: \"7\",\n        target: \"13\",\n      },\n      {\n        source: \"8\",\n        target: \"14\",\n      },\n      {\n        source: \"9\",\n        target: \"10\",\n      },\n      {\n        source: \"10\",\n        target: \"22\",\n      },\n      {\n        source: \"10\",\n        target: \"14\",\n      },\n      {\n        source: \"10\",\n        target: \"12\",\n      },\n      {\n        source: \"10\",\n        target: \"24\",\n      },\n      {\n        source: \"10\",\n        target: \"21\",\n      },\n      {\n        source: \"10\",\n        target: \"20\",\n      },\n      {\n        source: \"11\",\n        target: \"24\",\n      },\n      {\n        source: \"11\",\n        target: \"22\",\n      },\n      {\n        source: \"11\",\n        target: \"14\",\n      },\n      {\n        source: \"12\",\n        target: \"13\",\n      },\n      {\n        source: \"16\",\n        target: \"17\",\n      },\n      {\n        source: \"16\",\n        target: \"18\",\n      },\n      {\n        source: \"16\",\n        target: \"21\",\n      },\n      {\n        source: \"16\",\n        target: \"22\",\n      },\n      {\n        source: \"17\",\n        target: \"18\",\n      },\n      {\n        source: \"17\",\n        target: \"20\",\n      },\n      {\n        source: \"18\",\n        target: \"19\",\n      },\n      {\n        source: \"19\",\n        target: \"20\",\n      },\n      {\n        source: \"19\",\n        target: \"33\",\n      },\n      {\n        source: \"19\",\n        target: \"22\",\n      },\n      {\n        source: \"19\",\n        target: \"23\",\n      },\n      {\n        source: \"20\",\n        target: \"21\",\n      },\n      {\n        source: \"21\",\n        target: \"22\",\n      },\n      {\n        source: \"22\",\n        target: \"24\",\n      },\n      {\n        source: \"22\",\n        target: \"25\",\n      },\n      {\n        source: \"22\",\n        target: \"26\",\n      },\n      {\n        source: \"22\",\n        target: \"23\",\n      },\n      {\n        source: \"22\",\n        target: \"28\",\n      },\n      {\n        source: \"22\",\n        target: \"30\",\n      },\n      {\n        source: \"22\",\n        target: \"31\",\n      },\n      {\n        source: \"22\",\n        target: \"32\",\n      },\n      {\n        source: \"22\",\n        target: \"33\",\n      },\n      {\n        source: \"23\",\n        target: \"28\",\n      },\n      {\n        source: \"23\",\n        target: \"27\",\n      },\n      {\n        source: \"23\",\n        target: \"29\",\n      },\n      {\n        source: \"23\",\n        target: \"30\",\n      },\n      {\n        source: \"23\",\n        target: \"31\",\n      },\n      {\n        source: \"23\",\n        target: \"33\",\n      },\n      {\n        source: \"32\",\n        target: \"33\",\n      },\n    ],\n  };\n\n  const colors = [\n    \"#BDD2FD\",\n    \"#BDEFDB\",\n    \"#C2C8D5\",\n    \"#FBE5A2\",\n    \"#F6C3B7\",\n    \"#B6E3F5\",\n    \"#D3C6EA\",\n    \"#FFD8B8\",\n    \"#AAD8D8\",\n    \"#FFD6E7\",\n  ];\n  const strokes = [\n    \"#5B8FF9\",\n    \"#5AD8A6\",\n    \"#5D7092\",\n    \"#F6BD16\",\n    \"#E8684A\",\n    \"#6DC8EC\",\n    \"#9270CA\",\n    \"#FF9D4D\",\n    \"#269A99\",\n    \"#FF99C3\",\n  ];\n\n  const { nodes } = data;\n  const clusterMap = new Map();\n  let clusterId = 0;\n  nodes.forEach(function (node) {\n    // cluster\n    if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n      clusterMap.set(node.cluster, clusterId);\n      clusterId++;\n    }\n    const cid = clusterMap.get(node.cluster);\n    if (!node.style) {\n      node.style = {};\n    }\n    node.style.fill = colors[cid % colors.length];\n    node.style.stroke = strokes[cid % strokes.length];\n  });\n\n  return data;\n}\n\nexport default getData;\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman-clustering/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"fruchterman\", fruchtermanLayout);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"fruchterman\",\n    gravity: 10,\n    speed: 5,\n    clustering: true,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman-configuration-translate/data.js",
    "content": "function getData() {\n  const data = {\n    nodes: [\n      {\n        id: \"0\",\n        label: \"0\",\n        cluster: \"a\",\n      },\n      {\n        id: \"1\",\n        label: \"1\",\n        cluster: \"a\",\n      },\n      {\n        id: \"2\",\n        label: \"2\",\n        cluster: \"a\",\n      },\n      {\n        id: \"3\",\n        label: \"3\",\n        cluster: \"a\",\n      },\n      {\n        id: \"4\",\n        label: \"4\",\n        cluster: \"a\",\n      },\n      {\n        id: \"5\",\n        label: \"5\",\n        cluster: \"a\",\n      },\n      {\n        id: \"6\",\n        label: \"6\",\n        cluster: \"a\",\n      },\n      {\n        id: \"7\",\n        label: \"7\",\n        cluster: \"a\",\n      },\n      {\n        id: \"8\",\n        label: \"8\",\n        cluster: \"a\",\n      },\n      {\n        id: \"9\",\n        label: \"9\",\n        cluster: \"a\",\n      },\n      {\n        id: \"10\",\n        label: \"10\",\n        cluster: \"a\",\n      },\n      {\n        id: \"11\",\n        label: \"11\",\n        cluster: \"a\",\n      },\n      {\n        id: \"12\",\n        label: \"12\",\n        cluster: \"a\",\n      },\n      {\n        id: \"13\",\n        label: \"13\",\n        cluster: \"b\",\n      },\n      {\n        id: \"14\",\n        label: \"14\",\n        cluster: \"b\",\n      },\n      {\n        id: \"15\",\n        label: \"15\",\n        cluster: \"b\",\n      },\n      {\n        id: \"16\",\n        label: \"16\",\n        cluster: \"b\",\n      },\n      {\n        id: \"17\",\n        label: \"17\",\n        cluster: \"b\",\n      },\n      {\n        id: \"18\",\n        label: \"18\",\n        cluster: \"c\",\n      },\n      {\n        id: \"19\",\n        label: \"19\",\n        cluster: \"c\",\n      },\n      {\n        id: \"20\",\n        label: \"20\",\n        cluster: \"c\",\n      },\n      {\n        id: \"21\",\n        label: \"21\",\n        cluster: \"c\",\n      },\n      {\n        id: \"22\",\n        label: \"22\",\n        cluster: \"c\",\n      },\n      {\n        id: \"23\",\n        label: \"23\",\n        cluster: \"c\",\n      },\n      {\n        id: \"24\",\n        label: \"24\",\n        cluster: \"c\",\n      },\n      {\n        id: \"25\",\n        label: \"25\",\n        cluster: \"c\",\n      },\n      {\n        id: \"26\",\n        label: \"26\",\n        cluster: \"c\",\n      },\n      {\n        id: \"27\",\n        label: \"27\",\n        cluster: \"c\",\n      },\n      {\n        id: \"28\",\n        label: \"28\",\n        cluster: \"c\",\n      },\n      {\n        id: \"29\",\n        label: \"29\",\n        cluster: \"c\",\n      },\n      {\n        id: \"30\",\n        label: \"30\",\n        cluster: \"c\",\n      },\n      {\n        id: \"31\",\n        label: \"31\",\n        cluster: \"d\",\n      },\n      {\n        id: \"32\",\n        label: \"32\",\n        cluster: \"d\",\n      },\n      {\n        id: \"33\",\n        label: \"33\",\n        cluster: \"d\",\n      },\n    ],\n    edges: [\n      {\n        source: \"0\",\n        target: \"1\",\n      },\n      {\n        source: \"0\",\n        target: \"2\",\n      },\n      {\n        source: \"0\",\n        target: \"3\",\n      },\n      {\n        source: \"0\",\n        target: \"4\",\n      },\n      {\n        source: \"0\",\n        target: \"5\",\n      },\n      {\n        source: \"0\",\n        target: \"7\",\n      },\n      {\n        source: \"0\",\n        target: \"8\",\n      },\n      {\n        source: \"0\",\n        target: \"9\",\n      },\n      {\n        source: \"0\",\n        target: \"10\",\n      },\n      {\n        source: \"0\",\n        target: \"11\",\n      },\n      {\n        source: \"0\",\n        target: \"13\",\n      },\n      {\n        source: \"0\",\n        target: \"14\",\n      },\n      {\n        source: \"0\",\n        target: \"15\",\n      },\n      {\n        source: \"0\",\n        target: \"16\",\n      },\n      {\n        source: \"2\",\n        target: \"3\",\n      },\n      {\n        source: \"4\",\n        target: \"5\",\n      },\n      {\n        source: \"4\",\n        target: \"6\",\n      },\n      {\n        source: \"5\",\n        target: \"6\",\n      },\n      {\n        source: \"7\",\n        target: \"13\",\n      },\n      {\n        source: \"8\",\n        target: \"14\",\n      },\n      {\n        source: \"9\",\n        target: \"10\",\n      },\n      {\n        source: \"10\",\n        target: \"22\",\n      },\n      {\n        source: \"10\",\n        target: \"14\",\n      },\n      {\n        source: \"10\",\n        target: \"12\",\n      },\n      {\n        source: \"10\",\n        target: \"24\",\n      },\n      {\n        source: \"10\",\n        target: \"21\",\n      },\n      {\n        source: \"10\",\n        target: \"20\",\n      },\n      {\n        source: \"11\",\n        target: \"24\",\n      },\n      {\n        source: \"11\",\n        target: \"22\",\n      },\n      {\n        source: \"11\",\n        target: \"14\",\n      },\n      {\n        source: \"12\",\n        target: \"13\",\n      },\n      {\n        source: \"16\",\n        target: \"17\",\n      },\n      {\n        source: \"16\",\n        target: \"18\",\n      },\n      {\n        source: \"16\",\n        target: \"21\",\n      },\n      {\n        source: \"16\",\n        target: \"22\",\n      },\n      {\n        source: \"17\",\n        target: \"18\",\n      },\n      {\n        source: \"17\",\n        target: \"20\",\n      },\n      {\n        source: \"18\",\n        target: \"19\",\n      },\n      {\n        source: \"19\",\n        target: \"20\",\n      },\n      {\n        source: \"19\",\n        target: \"33\",\n      },\n      {\n        source: \"19\",\n        target: \"22\",\n      },\n      {\n        source: \"19\",\n        target: \"23\",\n      },\n      {\n        source: \"20\",\n        target: \"21\",\n      },\n      {\n        source: \"21\",\n        target: \"22\",\n      },\n      {\n        source: \"22\",\n        target: \"24\",\n      },\n      {\n        source: \"22\",\n        target: \"25\",\n      },\n      {\n        source: \"22\",\n        target: \"26\",\n      },\n      {\n        source: \"22\",\n        target: \"23\",\n      },\n      {\n        source: \"22\",\n        target: \"28\",\n      },\n      {\n        source: \"22\",\n        target: \"30\",\n      },\n      {\n        source: \"22\",\n        target: \"31\",\n      },\n      {\n        source: \"22\",\n        target: \"32\",\n      },\n      {\n        source: \"22\",\n        target: \"33\",\n      },\n      {\n        source: \"23\",\n        target: \"28\",\n      },\n      {\n        source: \"23\",\n        target: \"27\",\n      },\n      {\n        source: \"23\",\n        target: \"29\",\n      },\n      {\n        source: \"23\",\n        target: \"30\",\n      },\n      {\n        source: \"23\",\n        target: \"31\",\n      },\n      {\n        source: \"23\",\n        target: \"33\",\n      },\n      {\n        source: \"32\",\n        target: \"33\",\n      },\n    ],\n  };\n\n  const colors = [\n    \"#BDD2FD\",\n    \"#BDEFDB\",\n    \"#C2C8D5\",\n    \"#FBE5A2\",\n    \"#F6C3B7\",\n    \"#B6E3F5\",\n    \"#D3C6EA\",\n    \"#FFD8B8\",\n    \"#AAD8D8\",\n    \"#FFD6E7\",\n  ];\n  const strokes = [\n    \"#5B8FF9\",\n    \"#5AD8A6\",\n    \"#5D7092\",\n    \"#F6BD16\",\n    \"#E8684A\",\n    \"#6DC8EC\",\n    \"#9270CA\",\n    \"#FF9D4D\",\n    \"#269A99\",\n    \"#FF99C3\",\n  ];\n\n  const { nodes } = data;\n  const clusterMap = new Map();\n  let clusterId = 0;\n  nodes.forEach(function (node) {\n    // cluster\n    if (node.cluster && clusterMap.get(node.cluster) === undefined) {\n      clusterMap.set(node.cluster, clusterId);\n      clusterId++;\n    }\n    const cid = clusterMap.get(node.cluster);\n    if (!node.style) {\n      node.style = {};\n    }\n    node.style.fill = colors[cid % colors.length];\n    node.style.stroke = strokes[cid % strokes.length];\n  });\n  return data;\n}\n\nexport default getData;\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"fruchterman\", fruchtermanLayout);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"fruchterman\",\n    gravity: 1,\n    speed: 5,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    size: 1,\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\nconst me = this;\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nlayoutConfigTranslation();\n\nfunction layoutConfigTranslation() {\n  setTimeout(function () {\n    me.setData({\n      description: \"Fructherman layout, gravity = 5\",\n    });\n    me.graph.updateLayout({\n      gravity: 5,\n    });\n  }, 1000);\n  setTimeout(function () {\n    me.setData({\n      description: \"Fructherman layout, gravity = 10, layout by cluster\",\n    });\n    me.graph.updateLayout({\n      gravity: 10,\n      clustering: true,\n    });\n  }, 2500);\n  setTimeout(function () {\n    me.setData({\n      description: \"Fructherman layout, gravity = 20, layout by cluster\",\n    });\n    me.graph.updateLayout({\n      gravity: 20,\n    });\n  }, 4000);\n  setTimeout(function () {\n    me.setData({\n      description: \"Fructherman layout, gravity = 50, layout by cluster\",\n    });\n    me.graph.updateLayout({\n      gravity: 50,\n    });\n  }, 5500);\n  setTimeout(function () {\n    me.setData({\n      description: \"Fructherman layout, gravity = 80, layout by cluster\",\n    });\n    me.graph.updateLayout({\n      gravity: 80,\n    });\n  }, 7000);\n}\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman-worker/data.js",
    "content": "export default () => ({\n  nodes: [\n    {\n      id: \"4\",\n      sim_name: \"AFG\",\n      name: \"Afghanistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 57.847,\n      weight: 73.355,\n    },\n    {\n      id: \"8\",\n      sim_name: \"ALB\",\n      name: \"Albania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 556.3332546,\n      weight: 1214.363,\n    },\n    {\n      id: \"10\",\n      sim_name: \"ATA\",\n      name: \"Antarctica\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2829.367,\n      weight: 11113.564,\n    },\n    {\n      id: \"12\",\n      sim_name: \"DZA\",\n      name: \"Algeria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105217.8151,\n      weight: 146857.7593,\n    },\n    {\n      id: \"16\",\n      sim_name: \"ASM\",\n      name: \"American Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 97.623,\n      weight: 982.085,\n    },\n    {\n      id: \"20\",\n      sim_name: \"AND\",\n      name: \"Andorra\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 787.166,\n      weight: 1240.056,\n    },\n    {\n      id: \"24\",\n      sim_name: \"AGO\",\n      name: \"Angola\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.366,\n      weight: 0.211,\n    },\n    {\n      id: \"28\",\n      sim_name: \"ATG\",\n      name: \"Antigua and Barbuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30831.87949,\n      weight: 72065.168,\n    },\n    {\n      id: \"31\",\n      sim_name: \"AZE\",\n      name: \"Azerbaijan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46917.41553,\n      weight: 45114.87169,\n    },\n    {\n      id: \"32\",\n      sim_name: \"ARG\",\n      name: \"Argentina\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11347322.78,\n      weight: 38200326.47,\n    },\n    {\n      id: \"36\",\n      sim_name: \"AUS\",\n      name: \"Australia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10983308.38,\n      weight: 32933532.17,\n    },\n    {\n      id: \"40\",\n      sim_name: \"AUT\",\n      name: \"Austria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 714932.2545,\n      weight: 1683224.24,\n    },\n    {\n      id: \"44\",\n      sim_name: \"BHS\",\n      name: \"Bahamas\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 427.395,\n      weight: 969.33,\n    },\n    {\n      id: \"48\",\n      sim_name: \"BHR\",\n      name: \"Bahrain\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22229.96717,\n      weight: 53856.78001,\n    },\n    {\n      id: \"50\",\n      sim_name: \"BGD\",\n      name: \"Bangladesh\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22330.75971,\n      weight: 86944.1853,\n    },\n    {\n      id: \"51\",\n      sim_name: \"ARM\",\n      name: \"Armenia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 206.6709842,\n      weight: 223.5014745,\n    },\n    {\n      id: \"52\",\n      sim_name: \"BRB\",\n      name: \"Barbados\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4790.290139,\n      weight: 7428.399008,\n    },\n    {\n      id: \"56\",\n      sim_name: \"BEL\",\n      name: \"Belgium\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1896499.584,\n      weight: 3625004.302,\n    },\n    {\n      id: \"60\",\n      sim_name: \"BMU\",\n      name: \"Bermuda\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 100.264,\n      weight: 250,\n    },\n    {\n      id: \"64\",\n      sim_name: \"BTN\",\n      name: \"Bhutan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1100.663269,\n      weight: 3990.493739,\n    },\n    {\n      id: \"68\",\n      sim_name: \"BOL\",\n      name: \"Bolivia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 107152.4673,\n      weight: 117438.7654,\n    },\n    {\n      id: \"70\",\n      sim_name: \"BIH\",\n      name: \"Bosnia Herzegovina\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10652.90002,\n      weight: 25582.17925,\n    },\n    {\n      id: \"72\",\n      sim_name: \"BWA\",\n      name: \"Botswana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7635.744989,\n      weight: 24790.60442,\n    },\n    {\n      id: \"76\",\n      sim_name: \"BRA\",\n      name: \"Brazil\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7114534.381,\n      weight: 22441162.41,\n    },\n    {\n      id: \"84\",\n      sim_name: \"BLZ\",\n      name: \"Belize\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28037.35873,\n      weight: 77441.91463,\n    },\n    {\n      id: \"90\",\n      sim_name: \"SLB\",\n      name: \"Solomon Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"92\",\n      sim_name: \"VGB\",\n      name: \"British Virgin Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15328.77,\n      weight: 51127.16,\n    },\n    {\n      id: \"96\",\n      sim_name: \"BRN\",\n      name: \"Brunei Darussalam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46.438,\n      weight: 35.416,\n    },\n    {\n      id: \"100\",\n      sim_name: \"BGR\",\n      name: \"Bulgaria\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1258892.481,\n      weight: 4147538.49,\n    },\n    {\n      id: \"104\",\n      sim_name: \"MMR\",\n      name: \"Myanmar\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 599204.3703,\n      weight: 1218435.323,\n    },\n    {\n      id: \"108\",\n      sim_name: \"BDI\",\n      name: \"Burundi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 523.644,\n      weight: 2841.873,\n    },\n    {\n      id: \"112\",\n      sim_name: \"BLR\",\n      name: \"Belarus\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 52538.61827,\n      weight: 137692.36,\n    },\n    {\n      id: \"116\",\n      sim_name: \"KHM\",\n      name: \"Cambodia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 167651.1526,\n      weight: 265914.0128,\n    },\n    {\n      id: \"120\",\n      sim_name: \"CMR\",\n      name: \"Cameroon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1263.861619,\n      weight: 2235.140891,\n    },\n    {\n      id: \"124\",\n      sim_name: \"CAN\",\n      name: \"Canada\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8982050.268,\n      weight: 24667183.74,\n    },\n    {\n      id: \"132\",\n      sim_name: \"CPV\",\n      name: \"Cabo Verde\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2344.96,\n      weight: 4095.993,\n    },\n    {\n      id: \"140\",\n      sim_name: \"CAF\",\n      name: \"Central African Rep.\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"144\",\n      sim_name: \"LKA\",\n      name: \"Sri Lanka\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 181369.2559,\n      weight: 489552.3718,\n    },\n    {\n      id: \"152\",\n      sim_name: \"CHL\",\n      name: \"Chile\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 412283.3672,\n      weight: 270900.3596,\n    },\n    {\n      id: \"156\",\n      sim_name: \"CHN\",\n      name: \"China\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1490564.833,\n      weight: 2304819.508,\n    },\n    {\n      id: \"170\",\n      sim_name: \"COL\",\n      name: \"Colombia\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 46615.80539,\n      weight: 52684.28073,\n    },\n    {\n      id: \"188\",\n      sim_name: \"CRI\",\n      name: \"Costa Rica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17710.68444,\n      weight: 28937.25094,\n    },\n    {\n      id: \"191\",\n      sim_name: \"HRV\",\n      name: \"Croatia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 192245.2115,\n      weight: 580710.257,\n    },\n    {\n      id: \"192\",\n      sim_name: \"CUB\",\n      name: \"Cuba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 793.321,\n      weight: 1620.825,\n    },\n    {\n      id: \"196\",\n      sim_name: \"CYP\",\n      name: \"Cyprus\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 47981.18874,\n      weight: 126474.07,\n    },\n    {\n      id: \"203\",\n      sim_name: \"CZE\",\n      name: \"Czech Rep.\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 922618.0722,\n      weight: 3054247.331,\n    },\n    {\n      id: \"204\",\n      sim_name: \"BEN\",\n      name: \"Benin\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12987.78421,\n      weight: 55672.72433,\n    },\n    {\n      id: \"208\",\n      sim_name: \"DNK\",\n      name: \"Denmark\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 701199.8922,\n      weight: 1992757.212,\n    },\n    {\n      id: \"212\",\n      sim_name: \"DMA\",\n      name: \"Dominica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.351,\n      weight: 0.692,\n    },\n    {\n      id: \"214\",\n      sim_name: \"DOM\",\n      name: \"Dominican Rep.\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 105510.1813,\n      weight: 210275.29,\n    },\n    {\n      id: \"218\",\n      sim_name: \"ECU\",\n      name: \"Ecuador\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 30957.4275,\n      weight: 49399.64362,\n    },\n    {\n      id: \"222\",\n      sim_name: \"SLV\",\n      name: \"El Salvador\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77105.01061,\n      weight: 129245.0661,\n    },\n    {\n      id: \"231\",\n      sim_name: \"ETH\",\n      name: \"Ethiopia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44330.31405,\n      weight: 29794.00055,\n    },\n    {\n      id: \"233\",\n      sim_name: \"EST\",\n      name: \"Estonia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 150772.6292,\n      weight: 458854.905,\n    },\n    {\n      id: \"234\",\n      sim_name: \"FRO\",\n      name: \"Faeroe Isds\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.298,\n      weight: 44.726,\n    },\n    {\n      id: \"242\",\n      sim_name: \"FJI\",\n      name: \"Fiji\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 15966.92145,\n      weight: 24119.72685,\n    },\n    {\n      id: \"246\",\n      sim_name: \"FIN\",\n      name: \"Finland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 266364.4975,\n      weight: 753973.3063,\n    },\n    {\n      id: \"251\",\n      sim_name: \"FRA\",\n      name: \"France\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11027310.62,\n      weight: 31368277.85,\n    },\n    {\n      id: \"262\",\n      sim_name: \"DJI\",\n      name: \"Djibouti\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1936.537,\n      weight: 2932.238,\n    },\n    {\n      id: \"266\",\n      sim_name: \"GAB\",\n      name: \"Gabon\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2624.516,\n      weight: 10407.907,\n    },\n    {\n      id: \"268\",\n      sim_name: \"GEO\",\n      name: \"Georgia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48754.57507,\n      weight: 158741.3575,\n    },\n    {\n      id: \"270\",\n      sim_name: \"GMB\",\n      name: \"Gambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 38.193,\n      weight: 24.45,\n    },\n    {\n      id: \"275\",\n      sim_name: \"PSE\",\n      name: \"State of Palestine\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16057.14949,\n      weight: 13745.84557,\n    },\n    {\n      id: \"276\",\n      sim_name: \"DEU\",\n      name: \"Germany\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4635549.458,\n      weight: 12647922.94,\n    },\n    {\n      id: \"288\",\n      sim_name: \"GHA\",\n      name: \"Ghana\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8210.66114,\n      weight: 28560.44817,\n    },\n    {\n      id: \"292\",\n      sim_name: \"GIB\",\n      name: \"Gibraltar\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 728.465,\n      weight: 809.623,\n    },\n    {\n      id: \"296\",\n      sim_name: \"KIR\",\n      name: \"Kiribati\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.052,\n      weight: 18.562,\n    },\n    {\n      id: \"300\",\n      sim_name: \"GRC\",\n      name: \"Greece\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 263693.016,\n      weight: 644312.8604,\n    },\n    {\n      id: \"304\",\n      sim_name: \"GRL\",\n      name: \"Greenland\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"308\",\n      sim_name: \"GRD\",\n      name: \"Grenada\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4657.914,\n      weight: 9335.526,\n    },\n    {\n      id: \"316\",\n      sim_name: \"GUM\",\n      name: \"Guam\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 527.033,\n      weight: 982.642,\n    },\n    {\n      id: \"320\",\n      sim_name: \"GTM\",\n      name: \"Guatemala\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 20968.96314,\n      weight: 22893.23335,\n    },\n    {\n      id: \"324\",\n      sim_name: \"GIN\",\n      name: \"Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2636.849,\n      weight: 7422.12,\n    },\n    {\n      id: \"328\",\n      sim_name: \"GUY\",\n      name: \"Guyana\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 334196.3131,\n      weight: 520437.64,\n    },\n    {\n      id: \"332\",\n      sim_name: \"HTI\",\n      name: \"Haiti\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5.134,\n      weight: 16.128,\n    },\n    {\n      id: \"340\",\n      sim_name: \"HND\",\n      name: \"Honduras\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 22936.79385,\n      weight: 43129.60369,\n    },\n    {\n      id: \"348\",\n      sim_name: \"HUN\",\n      name: \"Hungary\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2015665.793,\n      weight: 6379394.988,\n    },\n    {\n      id: \"352\",\n      sim_name: \"ISL\",\n      name: \"Iceland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 891.513,\n      weight: 2118.828,\n    },\n    {\n      id: \"360\",\n      sim_name: \"IDN\",\n      name: \"Indonesia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 175738.8156,\n      weight: 544860.3789,\n    },\n    {\n      id: \"364\",\n      sim_name: \"IRN\",\n      name: \"Iran\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7978.124,\n      weight: 20473.686,\n    },\n    {\n      id: \"368\",\n      sim_name: \"IRQ\",\n      name: \"Iraq\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 253.845,\n      weight: 246.151,\n    },\n    {\n      id: \"372\",\n      sim_name: \"IRL\",\n      name: \"Ireland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 166058.1767,\n      weight: 476236.2048,\n    },\n    {\n      id: \"376\",\n      sim_name: \"ISR\",\n      name: \"Israel\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 197912.4336,\n      weight: 431193.8203,\n    },\n    {\n      id: \"381\",\n      sim_name: \"ITA\",\n      name: \"Italy\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1288077.184,\n      weight: 1887032.489,\n    },\n    {\n      id: \"384\",\n      sim_name: \"CIV\",\n      name: \"Cote d'Ivoire\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 77750.0467,\n      weight: 254222.8878,\n    },\n    {\n      id: \"388\",\n      sim_name: \"JAM\",\n      name: \"Jamaica\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6751.46461,\n      weight: 12484.22296,\n    },\n    {\n      id: \"392\",\n      sim_name: \"JPN\",\n      name: \"Japan\",\n      region: \"East Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 189561.3237,\n      weight: 359553.4615,\n    },\n    {\n      id: \"398\",\n      sim_name: \"KAZ\",\n      name: \"Kazakhstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2535465.094,\n      weight: 10562777.14,\n    },\n    {\n      id: \"400\",\n      sim_name: \"JOR\",\n      name: \"Jordan\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2022.699859,\n      weight: 1810.995193,\n    },\n    {\n      id: \"404\",\n      sim_name: \"KEN\",\n      name: \"Kenya\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31813.863,\n      weight: 84144.582,\n    },\n    {\n      id: \"414\",\n      sim_name: \"KWT\",\n      name: \"Kuwait\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 28509.72,\n      weight: 41425.612,\n    },\n    {\n      id: \"417\",\n      sim_name: \"KGZ\",\n      name: \"Kyrgyzstan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 344.2343218,\n      weight: 452.0188439,\n    },\n    {\n      id: \"418\",\n      sim_name: \"LAO\",\n      name: \"Lao PDR\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 58500.6357,\n      weight: 212304.4463,\n    },\n    {\n      id: \"422\",\n      sim_name: \"LBN\",\n      name: \"Lebanon\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16263.18003,\n      weight: 38974.77174,\n    },\n    {\n      id: \"426\",\n      sim_name: \"LSO\",\n      name: \"Lesotho\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 19865.12276,\n      weight: 54350.43934,\n    },\n    {\n      id: \"428\",\n      sim_name: \"LVA\",\n      name: \"Latvia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 516410.4254,\n      weight: 1643243.015,\n    },\n    {\n      id: \"430\",\n      sim_name: \"LBR\",\n      name: \"Liberia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.35,\n      weight: 53.471,\n    },\n    {\n      id: \"434\",\n      sim_name: \"LBY\",\n      name: \"Libya\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 634.239,\n      weight: 2102.142,\n    },\n    {\n      id: \"440\",\n      sim_name: \"LTU\",\n      name: \"Lithuania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 871039.5602,\n      weight: 2446114.811,\n    },\n    {\n      id: \"442\",\n      sim_name: \"LUX\",\n      name: \"Luxembourg\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68969.99793,\n      weight: 178380.981,\n    },\n    {\n      id: \"450\",\n      sim_name: \"MDG\",\n      name: \"Madagascar\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 950.8530206,\n      weight: 3780.89311,\n    },\n    {\n      id: \"454\",\n      sim_name: \"MWI\",\n      name: \"Malawi\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 11553.98159,\n      weight: 41269.33681,\n    },\n    {\n      id: \"458\",\n      sim_name: \"MYS\",\n      name: \"Malaysia\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 99255.71471,\n      weight: 142965.3262,\n    },\n    {\n      id: \"462\",\n      sim_name: \"MDV\",\n      name: \"Maldives\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12.448,\n      weight: 14.6,\n    },\n    {\n      id: \"466\",\n      sim_name: \"MLI\",\n      name: \"Mali\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3143.270747,\n      weight: 11121.96188,\n    },\n    {\n      id: \"470\",\n      sim_name: \"MLT\",\n      name: \"Malta\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 35991.55686,\n      weight: 94799.54871,\n    },\n    {\n      id: \"478\",\n      sim_name: \"MRT\",\n      name: \"Mauritania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 292.538,\n      weight: 627.637,\n    },\n    {\n      id: \"480\",\n      sim_name: \"MUS\",\n      name: \"Mauritius\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 17602.67917,\n      weight: 36755.35938,\n    },\n    {\n      id: \"484\",\n      sim_name: \"MEX\",\n      name: \"Mexico\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 571803.2432,\n      weight: 1234860.795,\n    },\n    {\n      id: \"496\",\n      sim_name: \"MNG\",\n      name: \"Mongolia\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1328.368,\n      weight: 10672.694,\n    },\n    {\n      id: \"498\",\n      sim_name: \"MDA\",\n      name: \"Moldova\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 59072.0085,\n      weight: 188178.1824,\n    },\n    {\n      id: \"499\",\n      sim_name: \"MNE\",\n      name: \"Montenegro\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2444.455322,\n      weight: 6125.451,\n    },\n    {\n      id: \"504\",\n      sim_name: \"MAR\",\n      name: \"Morocco\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 86884.06321,\n      weight: 161631.8094,\n    },\n    {\n      id: \"508\",\n      sim_name: \"MOZ\",\n      name: \"Mozambique\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 68388.81722,\n      weight: 146520.864,\n    },\n    {\n      id: \"512\",\n      sim_name: \"OMN\",\n      name: \"Oman\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 55530.66234,\n      weight: 88434.23327,\n    },\n    {\n      id: \"516\",\n      sim_name: \"NAM\",\n      name: \"Namibia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5168.27047,\n      weight: 7877.053106,\n    },\n    {\n      id: \"524\",\n      sim_name: \"NPL\",\n      name: \"Nepal\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4032.41279,\n      weight: 17770.75769,\n    },\n    {\n      id: \"528\",\n      sim_name: \"NLD\",\n      name: \"Netherlands\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1424347.018,\n      weight: 3125730.04,\n    },\n    {\n      id: \"531\",\n      sim_name: \"CUW\",\n      name: \"Curacao\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 535.691,\n      weight: 2358.613,\n    },\n    {\n      id: \"533\",\n      sim_name: \"ABW\",\n      name: \"Aruba\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178879.593,\n      weight: 560431.967,\n    },\n    {\n      id: \"540\",\n      sim_name: \"NCL\",\n      name: \"New Caledonia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 205.777282,\n      weight: 363.439991,\n    },\n    {\n      id: \"548\",\n      sim_name: \"VUT\",\n      name: \"Vanuatu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 160.463,\n      weight: 440.332,\n    },\n    {\n      id: \"554\",\n      sim_name: \"NZL\",\n      name: \"New Zealand\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 33994.85867,\n      weight: 35177.57975,\n    },\n    {\n      id: \"558\",\n      sim_name: \"NIC\",\n      name: \"Nicaragua\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 41294.65615,\n      weight: 85186.87824,\n    },\n    {\n      id: \"562\",\n      sim_name: \"NER\",\n      name: \"Niger\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 31152.35763,\n      weight: 44518.07202,\n    },\n    {\n      id: \"566\",\n      sim_name: \"NGA\",\n      name: \"Nigeria\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 323839.5301,\n      weight: 192057.843,\n    },\n    {\n      id: \"579\",\n      sim_name: \"NOR\",\n      name: \"Norway\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2382.344541,\n      weight: 2488.51136,\n    },\n    {\n      id: \"580\",\n      sim_name: \"MNP\",\n      name: \"N. Mariana Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.144,\n      weight: 1.864,\n    },\n    {\n      id: \"581\",\n      sim_name: \"UMI\",\n      name: \"United States Minor Outlying Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23.008,\n      weight: 21,\n    },\n    {\n      id: \"585\",\n      sim_name: \"PLW\",\n      name: \"Palau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2.151,\n      weight: 0.22,\n    },\n    {\n      id: \"586\",\n      sim_name: \"PAK\",\n      name: \"Pakistan\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2412673.261,\n      weight: 4864111.072,\n    },\n    {\n      id: \"591\",\n      sim_name: \"PAN\",\n      name: \"Panama\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 10056.54107,\n      weight: 26993.1125,\n    },\n    {\n      id: \"598\",\n      sim_name: \"PNG\",\n      name: \"Papua New Guinea\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 319.374,\n      weight: 2210.48,\n    },\n    {\n      id: \"600\",\n      sim_name: \"PRY\",\n      name: \"Paraguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1009228.641,\n      weight: 3862696.891,\n    },\n    {\n      id: \"604\",\n      sim_name: \"PER\",\n      name: \"Peru\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 91326.10676,\n      weight: 128637.0767,\n    },\n    {\n      id: \"608\",\n      sim_name: \"PHL\",\n      name: \"Philippines\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 12041.64316,\n      weight: 16205.94695,\n    },\n    {\n      id: \"616\",\n      sim_name: \"POL\",\n      name: \"Poland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1028089.751,\n      weight: 3186360.963,\n    },\n    {\n      id: \"620\",\n      sim_name: \"PRT\",\n      name: \"Portugal\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92543.15766,\n      weight: 192795.3179,\n    },\n    {\n      id: \"624\",\n      sim_name: \"GNB\",\n      name: \"Guinea-Bissau\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37.268,\n      weight: 135,\n    },\n    {\n      id: \"626\",\n      sim_name: \"TLS\",\n      name: \"Timor-Leste\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18.551,\n      weight: 10.883,\n    },\n    {\n      id: \"634\",\n      sim_name: \"QAT\",\n      name: \"Qatar\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6936.324,\n      weight: 11122.252,\n    },\n    {\n      id: \"642\",\n      sim_name: \"ROU\",\n      name: \"Romania\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1778677.092,\n      weight: 5301402.18,\n    },\n    {\n      id: \"643\",\n      sim_name: \"RUS\",\n      name: \"Russian Federation\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 7440900.086,\n      weight: 23852343.49,\n    },\n    {\n      id: \"646\",\n      sim_name: \"RWA\",\n      name: \"Rwanda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 37520.31393,\n      weight: 73367.60768,\n    },\n    {\n      id: \"659\",\n      sim_name: \"KNA\",\n      name: \"Saint Kitts and Nevis\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.062,\n      weight: 0.009,\n    },\n    {\n      id: \"662\",\n      sim_name: \"LCA\",\n      name: \"Saint Lucia\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"670\",\n      sim_name: \"VCT\",\n      name: \"Saint Vincent and the Grenadines\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16002.19104,\n      weight: 17977.52343,\n    },\n    {\n      id: \"674\",\n      sim_name: \"SMR\",\n      name: \"San Marino\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"682\",\n      sim_name: \"SAU\",\n      name: \"Saudi Arabia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 92568.76043,\n      weight: 56036.2484,\n    },\n    {\n      id: \"686\",\n      sim_name: \"SEN\",\n      name: \"Senegal\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 44740.28095,\n      weight: 98109.85876,\n    },\n    {\n      id: \"688\",\n      sim_name: \"SRB\",\n      name: \"Serbia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 907006.831,\n      weight: 3003936.426,\n    },\n    {\n      id: \"690\",\n      sim_name: \"SYC\",\n      name: \"Seychelles\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 387.548,\n      weight: 246.84,\n    },\n    {\n      id: \"694\",\n      sim_name: \"SLE\",\n      name: \"Sierra Leone\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 147.544,\n      weight: 705.466,\n    },\n    {\n      id: \"699\",\n      sim_name: \"IND\",\n      name: \"India\",\n      region: \"South Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 9062980.928,\n      weight: 19031680.14,\n    },\n    {\n      id: \"702\",\n      sim_name: \"SGP\",\n      name: \"Singapore\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 193120.3466,\n      weight: 470488.3668,\n    },\n    {\n      id: \"703\",\n      sim_name: \"SVK\",\n      name: \"Slovakia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 580789.4685,\n      weight: 1589777.797,\n    },\n    {\n      id: \"704\",\n      sim_name: \"VNM\",\n      name: \"Vietnam\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3558044.517,\n      weight: 7381230.275,\n    },\n    {\n      id: \"705\",\n      sim_name: \"SVN\",\n      name: \"Slovenia\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 75282.28683,\n      weight: 227283.1873,\n    },\n    {\n      id: \"706\",\n      sim_name: \"SOM\",\n      name: \"Somalia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 240.399,\n      weight: 1055,\n    },\n    {\n      id: \"710\",\n      sim_name: \"ZAF\",\n      name: \"South Africa\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 938907.5758,\n      weight: 2190384.881,\n    },\n    {\n      id: \"716\",\n      sim_name: \"ZWE\",\n      name: \"Zimbabwe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6067.581387,\n      weight: 21394.92603,\n    },\n    {\n      id: \"724\",\n      sim_name: \"ESP\",\n      name: \"Spain\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 906018.1944,\n      weight: 1602797.031,\n    },\n    {\n      id: \"729\",\n      sim_name: \"SDN\",\n      name: \"Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 18327.14063,\n      weight: 66310.50556,\n    },\n    {\n      id: \"740\",\n      sim_name: \"SUR\",\n      name: \"Suriname\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73211.6794,\n      weight: 83933.84802,\n    },\n    {\n      id: \"748\",\n      sim_name: \"SWZ\",\n      name: \"Swaziland\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 6674.46,\n      weight: 16386.136,\n    },\n    {\n      id: \"752\",\n      sim_name: \"SWE\",\n      name: \"Sweden\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 439154.313,\n      weight: 1207272.863,\n    },\n    {\n      id: \"757\",\n      sim_name: \"CHE\",\n      name: \"Switzerland\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 492516.8323,\n      weight: 1581172.074,\n    },\n    {\n      id: \"760\",\n      sim_name: \"SYR\",\n      name: \"Syria\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 4169.742,\n      weight: 7890.447,\n    },\n    {\n      id: \"762\",\n      sim_name: \"TJK\",\n      name: \"Tajikistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 300.162,\n      weight: 712.396,\n    },\n    {\n      id: \"764\",\n      sim_name: \"THA\",\n      name: \"Thailand\",\n      region: \"Southeast Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5003324.321,\n      weight: 6926962.31,\n    },\n    {\n      id: \"768\",\n      sim_name: \"TGO\",\n      name: \"Togo\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 16809.12488,\n      weight: 43975.34784,\n    },\n    {\n      id: \"772\",\n      sim_name: \"TKL\",\n      name: \"Tokelau\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1012.213,\n      weight: 1926.401,\n    },\n    {\n      id: \"776\",\n      sim_name: \"TON\",\n      name: \"Tonga\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 0.18,\n      weight: 0.011,\n    },\n    {\n      id: \"780\",\n      sim_name: \"TTO\",\n      name: \"Trinidad and Tobago\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 5731.199288,\n      weight: 9463.821332,\n    },\n    {\n      id: \"784\",\n      sim_name: \"ARE\",\n      name: \"United Arab Emirates\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 442646.1236,\n      weight: 684603.6345,\n    },\n    {\n      id: \"788\",\n      sim_name: \"TUN\",\n      name: \"Tunisia\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 202627.2087,\n      weight: 121296.0689,\n    },\n    {\n      id: \"792\",\n      sim_name: \"TUR\",\n      name: \"Turkey\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1205009.52,\n      weight: 2692733.392,\n    },\n    {\n      id: \"795\",\n      sim_name: \"TKM\",\n      name: \"Turkmenistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1020.566,\n      weight: 3442.938,\n    },\n    {\n      id: \"796\",\n      sim_name: \"TCA\",\n      name: \"Turks and Caicos Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1029.474,\n      weight: 2224.885,\n    },\n    {\n      id: \"800\",\n      sim_name: \"UGA\",\n      name: \"Uganda\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 153220.9856,\n      weight: 467968.0664,\n    },\n    {\n      id: \"804\",\n      sim_name: \"UKR\",\n      name: \"Ukraine\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 8444175.988,\n      weight: 29508635.03,\n    },\n    {\n      id: \"818\",\n      sim_name: \"EGY\",\n      name: \"Egypt\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 178849.3005,\n      weight: 310332.3386,\n    },\n    {\n      id: \"826\",\n      sim_name: \"GBR\",\n      name: \"United Kingdom\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1224264.681,\n      weight: 3079070.328,\n    },\n    {\n      id: \"834\",\n      sim_name: \"TZA\",\n      name: \"Tanzania\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 152688.2977,\n      weight: 493774.3125,\n    },\n    {\n      id: \"838\",\n      sim_name: \"\",\n      name: \"Free Zones\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1488.719,\n      weight: 4904.648,\n    },\n    {\n      id: \"842\",\n      sim_name: \"USA\",\n      name: \"United States\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 23694720.38,\n      weight: 66623810.06,\n    },\n    {\n      id: \"854\",\n      sim_name: \"BFA\",\n      name: \"Burkina Faso\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 3861.072093,\n      weight: 17132.42303,\n    },\n    {\n      id: \"858\",\n      sim_name: \"URY\",\n      name: \"Uruguay\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1550881.026,\n      weight: 4155101.445,\n    },\n    {\n      id: \"860\",\n      sim_name: \"UZB\",\n      name: \"Uzbekistan\",\n      region: \"Central and Northern Asia\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 2094.579,\n      weight: 7229.088,\n    },\n    {\n      id: \"862\",\n      sim_name: \"VEN\",\n      name: \"Venezuela\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 73.53,\n      weight: 91.675,\n    },\n    {\n      id: \"882\",\n      sim_name: \"WSM\",\n      name: \"Samoa\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 1.603,\n      weight: 6.415,\n    },\n    {\n      id: \"887\",\n      sim_name: \"YEM\",\n      name: \"Yemen\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 48184.79726,\n      weight: 245917.1867,\n    },\n    {\n      id: \"894\",\n      sim_name: \"ZMB\",\n      name: \"Zambia\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 470664.7641,\n      weight: 863829.2506,\n    },\n    {\n      id: \"86\",\n      sim_name: \"IOT\",\n      name: \"British Indian Ocean Territory\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 36.802,\n      weight: 21.33,\n    },\n    {\n      id: \"136\",\n      sim_name: \"CYM\",\n      name: \"Cayman Isds\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"148\",\n      sim_name: \"TCD\",\n      name: \"Chad\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 24.335,\n      weight: 103.232,\n    },\n    {\n      id: \"166\",\n      sim_name: \"CCK\",\n      name: \"Cocos Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 2.417,\n      weight: 2,\n    },\n    {\n      id: \"174\",\n      sim_name: \"COM\",\n      name: \"Comoros\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 19,\n      weight: 21,\n    },\n    {\n      id: \"226\",\n      sim_name: \"GNQ\",\n      name: \"Equatorial Guinea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"232\",\n      sim_name: \"ERI\",\n      name: \"Eritrea\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"238\",\n      sim_name: \"FLK\",\n      name: \"Falkland Isds (Malvinas)\",\n      region: \"South America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 177.295,\n      weight: 47.1,\n    },\n    {\n      id: \"258\",\n      sim_name: \"PYF\",\n      name: \"French Polynesia\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 1.65,\n      weight: 0.6,\n    },\n    {\n      id: \"534\",\n      sim_name: \"SXM\",\n      name: \"Sint Maarten (Dutch part)\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"584\",\n      sim_name: \"MHL\",\n      name: \"Marshall Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 47.581,\n      weight: 26.942,\n    },\n    {\n      id: \"612\",\n      sim_name: \"PCN\",\n      name: \"Pitcairn\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 95.892,\n      weight: 265,\n    },\n    {\n      id: \"728\",\n      sim_name: \"SSD\",\n      name: \"South Sudan\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"798\",\n      sim_name: \"TUV\",\n      name: \"Tuvalu\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"184\",\n      sim_name: \"COK\",\n      name: \"Cook Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"654\",\n      sim_name: \"SHN\",\n      name: \"Saint Helena\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"660\",\n      sim_name: \"AIA\",\n      name: \"Anguilla\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"678\",\n      sim_name: \"STP\",\n      name: \"Sao Tome and Principe\",\n      region: \"Sub-Saharan Africa\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 198.633,\n      weight: 350,\n    },\n    {\n      id: \"837\",\n      sim_name: \"\",\n      name: \"Bunkers\",\n      region: \"Other\",\n      resource: \"Cereals\",\n      year: 2014,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"732\",\n      sim_name: \"ESH\",\n      name: \"Western Sahara\",\n      region: \"Middle East and North Africa\",\n      resource: \"Cereals\",\n      year: 2015,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"666\",\n      sim_name: \"SPM\",\n      name: \"Saint Pierre and Miquelon\",\n      region: \"North America\",\n      resource: \"Cereals\",\n      year: 2016,\n      value: 0,\n      weight: 0,\n    },\n    {\n      id: \"162\",\n      sim_name: \"CXR\",\n      name: \"Christmas Isds\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 131.818,\n      weight: 99.95,\n    },\n    {\n      id: \"336\",\n      sim_name: \"VAT\",\n      name: \"Holy See\",\n      region: \"Europe\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 24.492,\n      weight: 42.805,\n    },\n    {\n      id: \"520\",\n      sim_name: \"NRU\",\n      name: \"Nauru\",\n      region: \"Oceania\",\n      resource: \"Cereals\",\n      year: 2012,\n      value: 496.386,\n      weight: 457.721,\n    },\n    {\n      id: \"535\",\n      sim_name: \"BES\",\n      name: \"Bonaire\",\n      region: \"Caribbean and Central America\",\n      resource: \"Cereals\",\n      year: 2013,\n      value: 326.45,\n      weight: 551.554,\n    },\n  ],\n  edges: [\n    {\n      eid: \"e16\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.049\",\n      weight: \"11.52\",\n      embodiedLand: \"4.765\",\n      embodiedWater: \"348.756\",\n    },\n    {\n      eid: \"e17\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.306\",\n      weight: \"64.74\",\n      embodiedLand: \"37.716\",\n      embodiedWater: \"726.512\",\n    },\n    {\n      eid: \"e18\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"94.052\",\n      weight: \"230.588\",\n      embodiedLand: \"141.564\",\n      embodiedWater: \"1851.16\",\n    },\n    {\n      eid: \"e19\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"13.068\",\n      weight: \"65.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e20\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"34.399\",\n      weight: \"171.996\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e21\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e22\",\n      source: \"4\",\n      sourceSimName: \"AFG\",\n      sourceRegion: \"Afghanistan\",\n      sourceName: \"South Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.812\",\n      weight: \"4.061\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e43\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e44\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e45\",\n      source: \"8\",\n      sourceSimName: \"ALB\",\n      sourceRegion: \"Albania\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.875\",\n      weight: \"1.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e48\",\n      source: \"10\",\n      sourceSimName: \"ATA\",\n      sourceRegion: \"Antarctica\",\n      sourceName: \"Other\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.837\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e85\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.886\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e86\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"23.9136184\",\n      weight: \"40.2929249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e88\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e89\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.9393726\",\n      weight: \"1.75517982\",\n      embodiedLand: \"0.38365313\",\n      embodiedWater: \"17.7067202\",\n    },\n    {\n      eid: \"e90\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e91\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e92\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.249\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e93\",\n      source: \"12\",\n      sourceSimName: \"DZA\",\n      sourceRegion: \"Algeria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e103\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e104\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e105\",\n      source: \"16\",\n      sourceSimName: \"ASM\",\n      sourceRegion: \"American Samoa\",\n      sourceName: \"Oceania\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e115\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e116\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"128.652\",\n      weight: \"96\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e117\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5.117\",\n      weight: \"26.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e118\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e119\",\n      source: \"20\",\n      sourceSimName: \"AND\",\n      sourceRegion: \"Andorra\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"798.871\",\n      weight: \"4322.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e128\",\n      source: \"24\",\n      sourceSimName: \"AGO\",\n      sourceRegion: \"Angola\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.401\",\n      weight: \"0.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e155\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.91\",\n      weight: \"1.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e156\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"177.885\",\n      weight: \"967.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e157\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e158\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"51.175\",\n      weight: \"76.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e159\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e160\",\n      source: \"28\",\n      sourceSimName: \"ATG\",\n      sourceRegion: \"Antigua and Barbuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2456.668\",\n      weight: \"2481.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e182\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.356\",\n      weight: \"27.2\",\n      embodiedLand: \"13.377\",\n      embodiedWater: \"156.237\",\n    },\n    {\n      eid: \"e183\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.344\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e185\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"108.397\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e186\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.814\",\n      weight: \"2.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e187\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.044\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e188\",\n      source: \"31\",\n      sourceSimName: \"AZE\",\n      sourceRegion: \"Azerbaijan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"5.8\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e351\",\n      source: \"32\",\n      sourceSimName: \"ARG\",\n      sourceRegion: \"Argentina\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.29\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e494\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"25.78\",\n      weight: \"206.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e495\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.036\",\n      weight: \"18.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e496\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.503\",\n      weight: \"101.04\",\n      embodiedLand: \"41.936\",\n      embodiedWater: \"35.869\",\n    },\n    {\n      eid: \"e497\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.141\",\n      weight: \"0.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e498\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e499\",\n      source: \"36\",\n      sourceSimName: \"AUS\",\n      sourceRegion: \"Australia\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e615\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.335\",\n      weight: \"1.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e616\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.006\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.109\",\n    },\n    {\n      eid: \"e617\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.018\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.043\",\n    },\n    {\n      eid: \"e618\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.37\",\n      weight: \"0.2\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e619\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"147.228\",\n      weight: \"490.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e620\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.761\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e621\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.19\",\n      weight: \"1.625\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e622\",\n      source: \"40\",\n      sourceSimName: \"AUT\",\n      sourceRegion: \"Austria\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e635\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e636\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"55.7439049\",\n      weight: \"55.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e637\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e638\",\n      source: \"44\",\n      sourceSimName: \"BHS\",\n      sourceRegion: \"Bahamas\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e694\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e696\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e697\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.929\",\n      weight: \"7.4\",\n      embodiedLand: \"2.029\",\n      embodiedWater: \"95.282\",\n    },\n    {\n      eid: \"e698\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.248\",\n      weight: \"1.862\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"18.661\",\n    },\n    {\n      eid: \"e699\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e700\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"136\",\n      targetSimName: \"CYM\",\n      targetName: \"Cayman Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e701\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.067\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e702\",\n      source: \"48\",\n      sourceSimName: \"BHR\",\n      sourceRegion: \"Bahrain\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"124.768\",\n      weight: \"92.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e754\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e755\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.969\",\n      weight: \"1.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e756\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.12\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e757\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.138\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e758\",\n      source: \"50\",\n      sourceSimName: \"BGD\",\n      sourceRegion: \"Bangladesh\",\n      sourceName: \"South Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.494\",\n      weight: \"0.915\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e776\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e777\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.47\",\n      weight: \"30.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e778\",\n      source: \"51\",\n      sourceSimName: \"ARM\",\n      sourceRegion: \"Armenia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"795\",\n      targetSimName: \"TKM\",\n      targetName: \"Turkmenistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"8.71\",\n      weight: \"1.675\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e798\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e799\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e800\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e801\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e802\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e803\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.199\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e804\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e805\",\n      source: \"52\",\n      sourceSimName: \"BRB\",\n      sourceRegion: \"Barbados\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e990\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.472\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e992\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.178\",\n      weight: \"0.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e993\",\n      source: \"56\",\n      sourceSimName: \"BEL\",\n      sourceRegion: \"Belgium\",\n      sourceName: \"Europe\",\n      target: \"626\",\n      targetSimName: \"TLS\",\n      targetName: \"Timor-Leste\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.32\",\n      weight: \"357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e998\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.135\",\n      weight: \"42\",\n      embodiedLand: \"\",\n      embodiedWater: \"43.89\",\n    },\n    {\n      eid: \"e999\",\n      source: \"60\",\n      sourceSimName: \"BMU\",\n      sourceRegion: \"Bermuda\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"78.825\",\n      weight: \"212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1008\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.302\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1009\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.708\",\n      weight: \"25.193\",\n      embodiedLand: \"8.687\",\n      embodiedWater: \"31.29\",\n    },\n    {\n      eid: \"e1010\",\n      source: \"64\",\n      sourceSimName: \"BTN\",\n      sourceRegion: \"Bhutan\",\n      sourceName: \"South Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.024\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1095\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.5\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1097\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.14\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1098\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1099\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.249\",\n      weight: \"0.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1100\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"40.776\",\n      weight: \"17.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1101\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.83\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1102\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"376.317\",\n      weight: \"60.619\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1103\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.19096077\",\n      weight: \"5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1104\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.406\",\n      weight: \"0.043\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1105\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.287\",\n      weight: \"2.911\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1106\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"30.2\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1107\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"20.4\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1108\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1109\",\n      source: \"68\",\n      sourceSimName: \"BOL\",\n      sourceRegion: \"Bolivia\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.683\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1141\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.132\",\n      weight: \"0.13\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"0.087\",\n    },\n    {\n      eid: \"e1142\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.356\",\n      weight: \"0.38\",\n      embodiedLand: \"0.09\",\n      embodiedWater: \"0.274\",\n    },\n    {\n      eid: \"e1143\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"111.882952\",\n      weight: \"50.4723321\",\n      embodiedLand: \"14.3646986\",\n      embodiedWater: \"12.7187331\",\n    },\n    {\n      eid: \"e1144\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1145\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1146\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1147\",\n      source: \"70\",\n      sourceSimName: \"BIH\",\n      sourceRegion: \"Bosnia Herzegovina\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.501\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1164\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1165\",\n      source: \"72\",\n      sourceSimName: \"BWA\",\n      sourceRegion: \"Botswana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1319\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"700.563\",\n      weight: \"3567.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1320\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.279294\",\n      weight: \"36.0515982\",\n      embodiedLand: \"12.9758444\",\n      embodiedWater: \"467.733115\",\n    },\n    {\n      eid: \"e1321\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1322\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"80.401\",\n      weight: \"267\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1323\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.084\",\n      weight: \"0.743\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1324\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"41.263\",\n      weight: \"73.557\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1325\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.673\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1326\",\n      source: \"76\",\n      sourceSimName: \"BRA\",\n      sourceRegion: \"Brazil\",\n      sourceName: \"South America\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1350\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e1351\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1352\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.033\",\n      weight: \"0.176\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1353\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.767\",\n      weight: \"2.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1354\",\n      source: \"84\",\n      sourceSimName: \"BLZ\",\n      sourceRegion: \"Belize\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"34.953\",\n      weight: \"152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1356\",\n      source: \"86\",\n      sourceSimName: \"IOT\",\n      sourceRegion: \"British Indian Ocean Territory\",\n      sourceName: \"Oceania\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1361\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.167\",\n      weight: \"42.315\",\n      embodiedLand: \"3.486\",\n      embodiedWater: \"5.332\",\n    },\n    {\n      eid: \"e1362\",\n      source: \"90\",\n      sourceSimName: \"SLB\",\n      sourceRegion: \"Solomon Isds\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1377\",\n      source: \"92\",\n      sourceSimName: \"VGB\",\n      sourceRegion: \"British Virgin Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"101.43\",\n      weight: \"490\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1387\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1388\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1389\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38.441\",\n      weight: \"44.492\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1390\",\n      source: \"96\",\n      sourceSimName: \"BRN\",\n      sourceRegion: \"Brunei Darussalam\",\n      sourceName: \"Southeast Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.04\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1483\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24858.849\",\n      weight: \"99000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1484\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"4.755\",\n      weight: \"1.934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1485\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"93.704\",\n      weight: \"126.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1486\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"10.413\",\n      weight: \"27.25\",\n      embodiedLand: \"24.418\",\n      embodiedWater: \"8.965\",\n    },\n    {\n      eid: \"e1487\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17703.297\",\n      weight: \"77309.781\",\n      embodiedLand: \"18435.802\",\n      embodiedWater: \"20873.641\",\n    },\n    {\n      eid: \"e1489\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"18.8800973\",\n      weight: \"86.0444724\",\n      embodiedLand: \"30.7293419\",\n      embodiedWater: \"1.7204033\",\n    },\n    {\n      eid: \"e1490\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"160.110577\",\n      weight: \"483.392365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1491\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7432.909\",\n      weight: \"38483.49\",\n      embodiedLand: \"9381.188\",\n      embodiedWater: \"11121.729\",\n    },\n    {\n      eid: \"e1493\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"189.513\",\n      weight: \"314\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1494\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.029\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1495\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"12.528\",\n      weight: \"0.77\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1496\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1497\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"5189.99451\",\n      weight: \"28567.1783\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1498\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14084.1964\",\n      weight: \"76915.5622\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1499\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"692.331\",\n      weight: \"4066.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1500\",\n      source: \"100\",\n      sourceSimName: \"BGR\",\n      sourceRegion: \"Bulgaria\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"60.703\",\n      weight: \"339.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1609\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.25\",\n      weight: \"12.219\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1610\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"112\",\n      targetSimName: \"BLR\",\n      targetName: \"Belarus\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"25.7\",\n      weight: \"75\",\n      embodiedLand: \"25.54\",\n      embodiedWater: \"174.3\",\n    },\n    {\n      eid: \"e1611\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"108.75\",\n      weight: \"129.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1612\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1613\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"43.5\",\n      weight: \"52.27\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1614\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"104.4\",\n      weight: \"125.448\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1615\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"598\",\n      targetSimName: \"PNG\",\n      targetName: \"Papua New Guinea\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.75\",\n      weight: \"54.372\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1616\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1617\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1775\",\n      weight: \"1500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1619\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"103.45\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1620\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"137.5\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1621\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1622\",\n      source: \"104\",\n      sourceSimName: \"MMR\",\n      sourceRegion: \"Myanmar\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"44.4\",\n      weight: \"120\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1633\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.606\",\n      weight: \"0.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1634\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.844\",\n      weight: \"0.74\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1635\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"53.041\",\n      weight: \"90\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1636\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.492\",\n      weight: \"1.142\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1637\",\n      source: \"108\",\n      sourceSimName: \"BDI\",\n      sourceRegion: \"Burundi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.021\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1679\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1680\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.1\",\n      weight: \"21.96\",\n      embodiedLand: \"22.086\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1681\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"120.2641915\",\n      weight: \"207.744065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1682\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.2\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1683\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"44.5214625\",\n      weight: \"83.785883\",\n      embodiedLand: \"26.1168536\",\n      embodiedWater: \"7.20580295\",\n    },\n    {\n      eid: \"e1684\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.083\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1685\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"991.896\",\n      weight: \"5092.85\",\n      embodiedLand: \"1019.042\",\n      embodiedWater: \"6610.519\",\n    },\n    {\n      eid: \"e1686\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"642\",\n      targetSimName: \"ROU\",\n      targetName: \"Romania\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"165.472676\",\n      weight: \"53.1172551\",\n      embodiedLand: \"17.4316463\",\n      embodiedWater: \"2398.72164\",\n    },\n    {\n      eid: \"e1687\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.31077251\",\n      weight: \"2.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1688\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"27.5722272\",\n      weight: \"53.4685049\",\n      embodiedLand: \"19.9639795\",\n      embodiedWater: \"4.70535121\",\n    },\n    {\n      eid: \"e1689\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.773\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1690\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"10.6\",\n      weight: \"26.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1691\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"482.1\",\n      weight: \"2008.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1693\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.9\",\n      weight: \"24.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1694\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"27\",\n      weight: \"72.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1695\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.9\",\n      weight: \"43.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1696\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1.4152175\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1697\",\n      source: \"112\",\n      sourceSimName: \"BLR\",\n      sourceRegion: \"Belarus\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"15.216\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1792\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2.058\",\n      weight: \"1.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1793\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"19.9307517\",\n      weight: \"54.9268674\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1795\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"722.843\",\n      weight: \"2000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1796\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.05\",\n      embodiedLand: \"0.0215\",\n      embodiedWater: \"0.279\",\n    },\n    {\n      eid: \"e1797\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.5893875\",\n      weight: \"46\",\n      embodiedLand: \"22.382\",\n      embodiedWater: \"419.888\",\n    },\n    {\n      eid: \"e1798\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1799\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.49\",\n      weight: \"24.993\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1800\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"35.6075332\",\n      weight: \"62.4991805\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1801\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"87.223\",\n      weight: \"190\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1802\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"123.708\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1803\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"49.454\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1804\",\n      source: \"116\",\n      sourceSimName: \"KHM\",\n      sourceRegion: \"Cambodia\",\n      sourceName: \"Southeast Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.332\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1830\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1831\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1832\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.398\",\n      weight: \"0.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1833\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.09\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1834\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.031\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1835\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.069\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e1836\",\n      source: \"120\",\n      sourceSimName: \"CMR\",\n      sourceRegion: \"Cameroon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2006\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2007\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.816\",\n      weight: \"27.5\",\n      embodiedLand: \"11.52\",\n      embodiedWater: \"91.465\",\n    },\n    {\n      eid: \"e2008\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.942\",\n      weight: \"5.224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2009\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1549.864\",\n      weight: \"6461\",\n      embodiedLand: \"2292.263\",\n      embodiedWater: \"24648.715\",\n    },\n    {\n      eid: \"e2010\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.366\",\n      weight: \"29.392\",\n      embodiedLand: \"4.087\",\n      embodiedWater: \"203.275\",\n    },\n    {\n      eid: \"e2011\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.105\",\n      weight: \"0.346\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2012\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.087\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2013\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10.485\",\n      weight: \"23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2014\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"71.847\",\n      weight: \"90.718\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2015\",\n      source: \"124\",\n      sourceSimName: \"CAN\",\n      sourceRegion: \"Canada\",\n      sourceName: \"North America\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.063\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2026\",\n      source: \"136\",\n      sourceSimName: \"CYM\",\n      sourceRegion: \"Cayman Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2028\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"256.296\",\n      weight: \"584\",\n      embodiedLand: \"388.652\",\n      embodiedWater: \"3227.184\",\n    },\n    {\n      eid: \"e2029\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2030\",\n      source: \"140\",\n      sourceSimName: \"CAF\",\n      sourceRegion: \"Central African Rep.\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2122\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.617\",\n      weight: \"0.4\",\n      embodiedLand: \"0.171\",\n      embodiedWater: \"9.947\",\n    },\n    {\n      eid: \"e2123\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.022\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.074\",\n    },\n    {\n      eid: \"e2124\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"4.465\",\n      weight: \"4\",\n      embodiedLand: \"1.462\",\n      embodiedWater: \"24.56\",\n    },\n    {\n      eid: \"e2125\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"674.364\",\n      weight: \"998.75\",\n      embodiedLand: \"394.423\",\n      embodiedWater: \"8358.539\",\n    },\n    {\n      eid: \"e2126\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.169684\",\n      weight: \"10\",\n      embodiedLand: \"4.832\",\n      embodiedWater: \"129.36\",\n    },\n    {\n      eid: \"e2127\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.6929921\",\n      weight: \"0.39911438\",\n      embodiedLand: \"0.02313548\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2128\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2129\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"956.722\",\n      weight: \"1340\",\n      embodiedLand: \"468.637\",\n      embodiedWater: \"10142.46\",\n    },\n    {\n      eid: \"e2130\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.129\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2131\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2581.403\",\n      weight: \"1630\",\n      embodiedLand: \"593.987\",\n      embodiedWater: \"13326.88\",\n    },\n    {\n      eid: \"e2132\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01799708\",\n      weight: \"0.01963527\",\n      embodiedLand: \"0.00589058\",\n      embodiedWater: \"0.15119156\",\n    },\n    {\n      eid: \"e2133\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.055\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2135\",\n      source: \"144\",\n      sourceSimName: \"LKA\",\n      sourceRegion: \"Sri Lanka\",\n      sourceName: \"South Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.797\",\n      weight: \"0.084\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2139\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2140\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.114\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2141\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2142\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2143\",\n      source: \"148\",\n      sourceSimName: \"TCD\",\n      sourceRegion: \"Chad\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.421\",\n      weight: \"2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2227\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.466\",\n      weight: \"0.804\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2228\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.644\",\n      weight: \"1\",\n      embodiedLand: \"0.016\",\n      embodiedWater: \"14.459\",\n    },\n    {\n      eid: \"e2229\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2230\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"32.659\",\n      weight: \"18.144\",\n      embodiedLand: \"2.013\",\n      embodiedWater: \"25.347\",\n    },\n    {\n      eid: \"e2231\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"50.962\",\n      weight: \"29.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2232\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.158\",\n      weight: \"0.366\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2233\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.57\",\n      weight: \"0.216\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2234\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.176\",\n      weight: \"3.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2235\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"13.32\",\n      weight: \"40\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2236\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2237\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.426\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2238\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2239\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.899\",\n      weight: \"0.564\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2240\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2241\",\n      source: \"152\",\n      sourceSimName: \"CHL\",\n      sourceRegion: \"Chile\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2433\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"63.059\",\n      weight: \"215.408\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2434\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.045\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2435\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"9502.75\",\n      weight: \"30250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2436\",\n      source: \"156\",\n      sourceSimName: \"CHN\",\n      sourceRegion: \"East Asia\",\n      sourceName: \"China\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.317\",\n      weight: \"40.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2439\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2440\",\n      source: \"166\",\n      sourceSimName: \"CCK\",\n      sourceRegion: \"Cocos Isds\",\n      sourceName: \"Oceania\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2507\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2508\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.945\",\n      weight: \"5.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2509\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2510\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"1.68\",\n      embodiedLand: \"0.624\",\n      embodiedWater: \"11.764\",\n    },\n    {\n      eid: \"e2511\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.99707857\",\n      weight: \"0.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2513\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2514\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02360264\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2515\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.014\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2516\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.661\",\n      weight: \"0.55\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2517\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"24.4083904\",\n      weight: \"21.9972541\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2518\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2519\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"29.328\",\n      weight: \"9.319\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2520\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2521\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"28.266\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2522\",\n      source: \"170\",\n      sourceSimName: \"COL\",\n      sourceRegion: \"Colombia\",\n      sourceName: \"South America\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.253\",\n      weight: \"0.239\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2526\",\n      source: \"174\",\n      sourceSimName: \"COM\",\n      sourceRegion: \"Comoros\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"64.83\",\n      weight: \"89.969\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2562\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.003\",\n    },\n    {\n      eid: \"e2563\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.068\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2564\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"770.502\",\n      weight: \"4498.68\",\n      embodiedLand: \"242.589\",\n      embodiedWater: \"7341.846\",\n    },\n    {\n      eid: \"e2565\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2566\",\n      source: \"188\",\n      sourceSimName: \"CRI\",\n      sourceRegion: \"Costa Rica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"17.311\",\n      weight: \"18.402\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2630\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4009.71895\",\n      weight: \"10426.471\",\n      embodiedLand: \"4547.15483\",\n      embodiedWater: \"417.058952\",\n    },\n    {\n      eid: \"e2631\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.162\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"0.163\",\n    },\n    {\n      eid: \"e2632\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.009\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e2634\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.4225\",\n      weight: \"1.3\",\n      embodiedLand: \"0.385\",\n      embodiedWater: \"0.016\",\n    },\n    {\n      eid: \"e2635\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2636\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"36.137\",\n      weight: \"68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2637\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.947\",\n      weight: \"0.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2639\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"356.137\",\n      weight: \"742.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2640\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.272\",\n      weight: \"25.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2641\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"195.135725\",\n      weight: \"405.023926\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2642\",\n      source: \"191\",\n      sourceSimName: \"HRV\",\n      sourceRegion: \"Croatia\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1927.978\",\n      weight: \"5003.87\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2653\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.015\",\n      weight: \"22\",\n      embodiedLand: \"1.121\",\n      embodiedWater: \"30.294\",\n    },\n    {\n      eid: \"e2654\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2655\",\n      source: \"192\",\n      sourceSimName: \"CUB\",\n      sourceRegion: \"Cuba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2710\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.025\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2711\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2712\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"275.094068\",\n      weight: \"518.04557\",\n      embodiedLand: \"852.454555\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2713\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.123\",\n      weight: \"0.515\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2714\",\n      source: \"196\",\n      sourceSimName: \"CYP\",\n      sourceRegion: \"Cyprus\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.749\",\n      weight: \"0.352\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2815\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.19775118\",\n      weight: \"19.4429394\",\n      embodiedLand: \"1.01453375\",\n      embodiedWater: \"6.43614933\",\n    },\n    {\n      eid: \"e2816\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"47.058\",\n      weight: \"31.738\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2817\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"465.089207\",\n      weight: \"1056.18955\",\n      embodiedLand: \"59.5149034\",\n      embodiedWater: \"349.59874\",\n    },\n    {\n      eid: \"e2818\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.53\",\n      weight: \"0.296\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2819\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2820\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1233.57708\",\n      weight: \"2500\",\n      embodiedLand: \"273.915\",\n      embodiedWater: \"302.5\",\n    },\n    {\n      eid: \"e2821\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.512\",\n      weight: \"0.287\",\n      embodiedLand: \"1.023\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2822\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.392\",\n      weight: \"50.1\",\n      embodiedLand: \"8.127\",\n      embodiedWater: \"0.601\",\n    },\n    {\n      eid: \"e2823\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.59\",\n      weight: \"1.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2824\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"53.08\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2825\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.409\",\n      weight: \"7.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2826\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.14\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2827\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12283.216\",\n      weight: \"51375.101\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2828\",\n      source: \"203\",\n      sourceSimName: \"CZE\",\n      sourceRegion: \"Czech Rep.\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6823.806\",\n      weight: \"28549.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2852\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.041\",\n      weight: \"0.125\",\n      embodiedLand: \"0.007\",\n      embodiedWater: \"1.054\",\n    },\n    {\n      eid: \"e2853\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.541\",\n      weight: \"1\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.369\",\n    },\n    {\n      eid: \"e2854\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.017\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.129\",\n    },\n    {\n      eid: \"e2855\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.19\",\n      weight: \"17.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2856\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.874\",\n      weight: \"0.506\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2857\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"17.743\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2858\",\n      source: \"204\",\n      sourceSimName: \"BEN\",\n      sourceRegion: \"Benin\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"15.773\",\n      weight: \"220\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2992\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17845.867\",\n      weight: \"88000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2994\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"21.161\",\n      weight: \"46\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2995\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2996\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e2997\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.023\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.191\",\n    },\n    {\n      eid: \"e2999\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.679\",\n      weight: \"14\",\n      embodiedLand: \"3.32\",\n      embodiedWater: \"25.83\",\n    },\n    {\n      eid: \"e3000\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.035\",\n      weight: \"0.031\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.435\",\n    },\n    {\n      eid: \"e3001\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"9.53\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3002\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"146.629\",\n      weight: \"272.52\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3003\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3005\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3006\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.058\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3007\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.206\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3008\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"22.102\",\n      weight: \"41.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3009\",\n      source: \"208\",\n      sourceSimName: \"DNK\",\n      sourceRegion: \"Denmark\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3020\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.813\",\n      weight: \"1.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3021\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Millet\",\n      year: \"2016\",\n      value: \"6.079\",\n      weight: \"9.869\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3022\",\n      source: \"212\",\n      sourceSimName: \"DMA\",\n      sourceRegion: \"Dominica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3073\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"62.9969656\",\n      weight: \"133.149681\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3074\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3075\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3076\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.744\",\n      weight: \"63.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3077\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3078\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.752\",\n      weight: \"0.558\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3080\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3081\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3082\",\n      source: \"214\",\n      sourceSimName: \"DOM\",\n      sourceRegion: \"Dominican Rep.\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.258\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3129\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.25\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3130\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"655.12\",\n      weight: \"117.45\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3131\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.508\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3132\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.061\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3133\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3134\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.20254593\",\n      weight: \"0.0630884\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3136\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3137\",\n      source: \"218\",\n      sourceSimName: \"ECU\",\n      sourceRegion: \"Ecuador\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3151\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e3152\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.36\",\n      weight: \"26.04\",\n      embodiedLand: \"4.462\",\n      embodiedWater: \"131.762\",\n    },\n    {\n      eid: \"e3153\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.231\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3154\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.36\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3155\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"218\",\n      targetSimName: \"ECU\",\n      targetName: \"Ecuador\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3156\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25\",\n      weight: \"0.076\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3157\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.651\",\n      weight: \"0.464\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3158\",\n      source: \"222\",\n      sourceSimName: \"SLV\",\n      sourceRegion: \"El Salvador\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.55\",\n      weight: \"1.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3160\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3161\",\n      source: \"226\",\n      sourceSimName: \"GNQ\",\n      sourceRegion: \"Equatorial Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3214\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.757\",\n      weight: \"0.78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3215\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.159\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3216\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.24744121\",\n      weight: \"0.12643068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3217\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.1\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"0.881\",\n    },\n    {\n      eid: \"e3218\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.045\",\n      embodiedLand: \"0.019\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3219\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3220\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.025\",\n      embodiedLand: \"0.073\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3221\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.015\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3223\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.388\",\n      weight: \"0.705\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"0.492\",\n    },\n    {\n      eid: \"e3224\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"17.374\",\n      weight: \"40\",\n      embodiedLand: \"16.921\",\n      embodiedWater: \"2.24\",\n    },\n    {\n      eid: \"e3225\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.641\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3226\",\n      source: \"231\",\n      sourceSimName: \"ETH\",\n      sourceRegion: \"Ethiopia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3231\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3232\",\n      source: \"232\",\n      sourceSimName: \"ERI\",\n      sourceRegion: \"Eritrea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3283\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.169\",\n      weight: \"40.581\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3284\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"12273.129\",\n      weight: \"69000\",\n      embodiedLand: \"19376.402\",\n      embodiedWater: \"3036\",\n    },\n    {\n      eid: \"e3285\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8159.47956\",\n      weight: \"44000\",\n      embodiedLand: \"12365.057\",\n      embodiedWater: \"308\",\n    },\n    {\n      eid: \"e3286\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5697.635\",\n      weight: \"31498.19\",\n      embodiedLand: \"8131.804\",\n      embodiedWater: \"10992.868\",\n    },\n    {\n      eid: \"e3287\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"19.337\",\n      weight: \"53.21\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3288\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6239.34\",\n      weight: \"22384.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3289\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3166.555\",\n      weight: \"15864\",\n      embodiedLand: \"4286.655\",\n      embodiedWater: \"5393.76\",\n    },\n    {\n      eid: \"e3290\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.019\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e3291\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.176\",\n      weight: \"2.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3292\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"12.414\",\n      weight: \"49.122\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3293\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3294\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"629.386\",\n      weight: \"2596.853\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3295\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3296\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"31.581\",\n      weight: \"76.353\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3297\",\n      source: \"233\",\n      sourceSimName: \"EST\",\n      sourceRegion: \"Estonia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4160.65711\",\n      weight: \"25476.5045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3338\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"162\",\n      targetSimName: \"CXR\",\n      targetName: \"Christmas Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.068\",\n      weight: \"88.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3339\",\n      source: \"242\",\n      sourceSimName: \"FJI\",\n      sourceRegion: \"Fiji\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.007\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3435\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"481.381304\",\n      weight: \"1599.203\",\n      embodiedLand: \"471.659\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3436\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.092\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3437\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3438\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.086\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3439\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.48\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3440\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.01\",\n      weight: \"0.018\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e3441\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.029\",\n      embodiedLand: \"0.008\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3442\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.849\",\n      weight: \"36.603\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3443\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.071\",\n      weight: \"0.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3444\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.572\",\n      weight: \"0.065\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3445\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.1\",\n      weight: \"0.929\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3446\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.762\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3447\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3448\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"1.191\",\n      weight: \"0.475\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3449\",\n      source: \"246\",\n      sourceSimName: \"FIN\",\n      sourceRegion: \"Finland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.182\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3640\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3641\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.075\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3643\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3644\",\n      source: \"251\",\n      sourceSimName: \"FRA\",\n      sourceRegion: \"France\",\n      sourceName: \"Europe\",\n      target: \"796\",\n      targetSimName: \"TCA\",\n      targetName: \"Turks and Caicos Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3646\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.303\",\n      weight: \"0.161\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.66\",\n    },\n    {\n      eid: \"e3647\",\n      source: \"258\",\n      sourceSimName: \"PYF\",\n      sourceRegion: \"French Polynesia\",\n      sourceName: \"Oceania\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.76\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3661\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1697.791\",\n      weight: \"4715.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3662\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3663\",\n      source: \"262\",\n      sourceSimName: \"DJI\",\n      sourceRegion: \"Djibouti\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"10.466\",\n      weight: \"5.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3674\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3675\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3676\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3677\",\n      source: \"266\",\n      sourceSimName: \"GAB\",\n      sourceRegion: \"Gabon\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3707\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.048\",\n      weight: \"0.038\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3708\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"4.8\",\n      weight: \"24\",\n      embodiedLand: \"18.872\",\n      embodiedWater: \"2.136\",\n    },\n    {\n      eid: \"e3709\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3710\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.678\",\n      weight: \"38.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3711\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.252\",\n      weight: \"0.455\",\n      embodiedLand: \"0.074\",\n      embodiedWater: \"1.176\",\n    },\n    {\n      eid: \"e3712\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27\",\n      weight: \"4.86\",\n      embodiedLand: \"2.151\",\n      embodiedWater: \"5.56\",\n    },\n    {\n      eid: \"e3713\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.61599203\",\n      weight: \"1.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3714\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"23.6\",\n      weight: \"47.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3715\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.179\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3716\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"9.5\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3718\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.00114478\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3719\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.278\",\n      weight: \"19.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3720\",\n      source: \"268\",\n      sourceSimName: \"GEO\",\n      sourceRegion: \"Georgia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3734\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8.156\",\n      weight: \"9\",\n      embodiedLand: \"0.265\",\n      embodiedWater: \"11.43\",\n    },\n    {\n      eid: \"e3735\",\n      source: \"270\",\n      sourceSimName: \"GMB\",\n      sourceRegion: \"Gambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3766\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"1.468\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3767\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"6.887\",\n      weight: \"10.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3769\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.621\",\n      weight: \"0.057\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3770\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"37.922\",\n      weight: \"50\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3771\",\n      source: \"275\",\n      sourceSimName: \"PSE\",\n      sourceRegion: \"State of Palestine\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.035\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3963\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.908\",\n      weight: \"23\",\n      embodiedLand: \"6.114\",\n      embodiedWater: \"87.285\",\n    },\n    {\n      eid: \"e3964\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.077\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3965\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.0348425\",\n      weight: \"26\",\n      embodiedLand: \"4.29\",\n      embodiedWater: \"0.234\",\n    },\n    {\n      eid: \"e3966\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3967\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"612\",\n      targetSimName: \"PCN\",\n      targetName: \"Pitcairn\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e3968\",\n      source: \"276\",\n      sourceSimName: \"DEU\",\n      sourceRegion: \"Germany\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.096\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4026\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.234\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4028\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"427.155\",\n      weight: \"1504\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4029\",\n      source: \"288\",\n      sourceSimName: \"GHA\",\n      sourceRegion: \"Ghana\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4034\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4035\",\n      source: \"292\",\n      sourceSimName: \"GIB\",\n      sourceRegion: \"Gibraltar\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"3.999\",\n      weight: \"3.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4038\",\n      source: \"296\",\n      sourceSimName: \"KIR\",\n      sourceRegion: \"Kiribati\",\n      sourceName: \"Oceania\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.46\",\n      weight: \"0.327\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4130\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.592\",\n      weight: \"0.381\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4131\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.535\",\n      weight: \"0.685\",\n      embodiedLand: \"0.344\",\n      embodiedWater: \"2.925\",\n    },\n    {\n      eid: \"e4132\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.225\",\n      weight: \"0.51\",\n      embodiedLand: \"0.297\",\n      embodiedWater: \"0.907\",\n    },\n    {\n      eid: \"e4133\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.099\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4134\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.619\",\n      weight: \"0.9\",\n      embodiedLand: \"0.215\",\n      embodiedWater: \"12.695\",\n    },\n    {\n      eid: \"e4135\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.643\",\n      weight: \"0.811\",\n      embodiedLand: \"0.35\",\n      embodiedWater: \"22.782\",\n    },\n    {\n      eid: \"e4136\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9.296\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4139\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.194\",\n      weight: \"0.105\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4140\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4141\",\n      source: \"300\",\n      sourceSimName: \"GRC\",\n      sourceRegion: \"Greece\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.549\",\n      weight: \"0.33\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4144\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4145\",\n      source: \"304\",\n      sourceSimName: \"GRL\",\n      sourceRegion: \"Greenland\",\n      sourceName: \"North America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.094\",\n      weight: \"0.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4160\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4161\",\n      source: \"308\",\n      sourceSimName: \"GRD\",\n      sourceRegion: \"Grenada\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.258\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4166\",\n      source: \"316\",\n      sourceSimName: \"GUM\",\n      sourceRegion: \"Guam\",\n      sourceName: \"Oceania\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.645\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4197\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.45\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4198\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4199\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4200\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.225\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4201\",\n      source: \"320\",\n      sourceSimName: \"GTM\",\n      sourceRegion: \"Guatemala\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.383\",\n      weight: \"0.959\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4222\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4223\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1121.1076\",\n      weight: \"9902.574\",\n      embodiedLand: \"74.073\",\n      embodiedWater: \"16091.683\",\n    },\n    {\n      eid: \"e4224\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"151.325\",\n      weight: \"781.716\",\n      embodiedLand: \"851.781\",\n      embodiedWater: \"8133.755\",\n    },\n    {\n      eid: \"e4225\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.702\",\n      weight: \"22.538\",\n      embodiedLand: \"26.147\",\n      embodiedWater: \"54.384\",\n    },\n    {\n      eid: \"e4226\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4227\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"514.56\",\n      weight: \"516\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4229\",\n      source: \"324\",\n      sourceSimName: \"GIN\",\n      sourceRegion: \"Guinea\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"418\",\n      targetSimName: \"LAO\",\n      targetName: \"Lao PDR\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4274\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.93\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4275\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"12.9452924\",\n      weight: \"80.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4276\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"79.617\",\n      weight: \"404.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4277\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"146.081\",\n      weight: \"186.97\",\n      embodiedLand: \"46.045\",\n      embodiedWater: \"1298.32\",\n    },\n    {\n      eid: \"e4278\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"2751.76304\",\n      weight: \"3460.64811\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4279\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"12.957\",\n      weight: \"2.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4280\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4281\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"336\",\n      targetSimName: \"VAT\",\n      targetName: \"Holy See\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4282\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.016\",\n      weight: \"50.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4283\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.893\",\n      weight: \"24.705\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4284\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4285\",\n      source: \"328\",\n      sourceSimName: \"GUY\",\n      sourceRegion: \"Guyana\",\n      sourceName: \"South America\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.422\",\n      weight: \"26.912\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4298\",\n      source: \"332\",\n      sourceSimName: \"HTI\",\n      sourceRegion: \"Haiti\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4323\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"201.042\",\n      weight: \"323.82\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4324\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"20.24\",\n      weight: \"39.916\",\n      embodiedLand: \"24.266\",\n      embodiedWater: \"18.162\",\n    },\n    {\n      eid: \"e4326\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"47.6473533\",\n      weight: \"48.6243931\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4327\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4328\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.858\",\n      weight: \"8.732\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4329\",\n      source: \"340\",\n      sourceSimName: \"HND\",\n      sourceRegion: \"Honduras\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.64\",\n      weight: \"96.16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4428\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4429\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4430\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.109\",\n      weight: \"0.125\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.001\",\n    },\n    {\n      eid: \"e4431\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"119.521\",\n      weight: \"420\",\n      embodiedLand: \"51.421\",\n      embodiedWater: \"660.66\",\n    },\n    {\n      eid: \"e4432\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"658.77\",\n      weight: \"2218.1\",\n      embodiedLand: \"206.877\",\n      embodiedWater: \"2437.692\",\n    },\n    {\n      eid: \"e4434\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"83.377\",\n      weight: \"273\",\n      embodiedLand: \"31.384\",\n      embodiedWater: \"559.377\",\n    },\n    {\n      eid: \"e4435\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.016\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.007\",\n    },\n    {\n      eid: \"e4436\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.865\",\n      weight: \"21\",\n      embodiedLand: \"2.303\",\n      embodiedWater: \"31.017\",\n    },\n    {\n      eid: \"e4437\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"13.347\",\n      weight: \"102.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4439\",\n      source: \"348\",\n      sourceSimName: \"HUN\",\n      sourceRegion: \"Hungary\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"677.568524\",\n      weight: \"630.017434\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4461\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.403\",\n      weight: \"4.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4462\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"62.13\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4463\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4464\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4465\",\n      source: \"352\",\n      sourceSimName: \"ISL\",\n      sourceRegion: \"Iceland\",\n      sourceName: \"Europe\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4568\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.048\",\n      weight: \"120.8\",\n      embodiedLand: \"11.771\",\n      embodiedWater: \"164.409\",\n    },\n    {\n      eid: \"e4569\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.273\",\n      weight: \"67.74\",\n      embodiedLand: \"35.111\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4570\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.304\",\n      weight: \"0.144\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4571\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4572\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.065\",\n      weight: \"0.081\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"0.774\",\n    },\n    {\n      eid: \"e4573\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"64.711\",\n      weight: \"26.777\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4574\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"219\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4575\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.083\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4576\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.501\",\n      weight: \"0.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4577\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2424\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4578\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.756\",\n      weight: \"0.947\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4579\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"270\",\n      targetSimName: \"GMB\",\n      targetName: \"Gambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"74.884\",\n      weight: \"270\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4581\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.437\",\n      weight: \"0.069\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4582\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.06\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4583\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.59\",\n      weight: \"0.745\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4584\",\n      source: \"360\",\n      sourceSimName: \"IDN\",\n      sourceRegion: \"Indonesia\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.473\",\n      weight: \"1.76\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4635\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4159.919\",\n      weight: \"14678.618\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4636\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.04\",\n      weight: \"0.15\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"2.752\",\n    },\n    {\n      eid: \"e4637\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.595\",\n      weight: \"6.84\",\n      embodiedLand: \"2.127\",\n      embodiedWater: \"193.278\",\n    },\n    {\n      eid: \"e4638\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"8.79\",\n      weight: \"43.87\",\n      embodiedLand: \"15.986\",\n      embodiedWater: \"396.322\",\n    },\n    {\n      eid: \"e4639\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.24\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4640\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.044\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4641\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4642\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.244\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4643\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"398.292\",\n      weight: \"821.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4644\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.079\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4645\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.62\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4646\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.157\",\n      weight: \"0.279\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4647\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.129\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4649\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.027\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4650\",\n      source: \"364\",\n      sourceSimName: \"IRN\",\n      sourceRegion: \"Iran\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.078\",\n      weight: \"1.118\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4661\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4662\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.843\",\n      weight: \"1.59\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4663\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"160.874\",\n      weight: \"36.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4664\",\n      source: \"368\",\n      sourceSimName: \"IRQ\",\n      sourceRegion: \"Iraq\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4731\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"159.042\",\n      weight: \"32.792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4732\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.867\",\n      weight: \"44.1\",\n      embodiedLand: \"6.096\",\n      embodiedWater: \"34.089\",\n    },\n    {\n      eid: \"e4733\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.516\",\n      weight: \"0.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4734\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"21.023\",\n      weight: \"42.5\",\n      embodiedLand: \"0.457\",\n      embodiedWater: \"48.195\",\n    },\n    {\n      eid: \"e4735\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.011\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4736\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.051\",\n      weight: \"0.378\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4737\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.542\",\n      weight: \"0.94\",\n      embodiedLand: \"0.161\",\n      embodiedWater: \"0.968\",\n    },\n    {\n      eid: \"e4738\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"2.238\",\n      weight: \"2.262\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4739\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4740\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4742\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.468\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4743\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.066\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4744\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.695\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4745\",\n      source: \"372\",\n      sourceSimName: \"IRL\",\n      sourceRegion: \"Ireland\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.132\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4824\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4825\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4826\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"134.901099\",\n      weight: \"54.1360357\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4827\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1\",\n      weight: \"0.5\",\n      embodiedLand: \"0.012\",\n      embodiedWater: \"4.356\",\n    },\n    {\n      eid: \"e4828\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4829\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.005348\",\n      weight: \"27.7814111\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4830\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.071\",\n      weight: \"48\",\n      embodiedLand: \"2.36\",\n      embodiedWater: \"517.776\",\n    },\n    {\n      eid: \"e4831\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"10\",\n      weight: \"7.385\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4832\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1\",\n      weight: \"2.895\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4833\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"121\",\n      weight: \"381.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4834\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.828\",\n      weight: \"0.575\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e4835\",\n      source: \"376\",\n      sourceSimName: \"ISR\",\n      sourceRegion: \"Israel\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2\",\n      weight: \"4.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5015\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.273\",\n      weight: \"1.5\",\n      embodiedLand: \"0.94\",\n      embodiedWater: \"5.117\",\n    },\n    {\n      eid: \"e5016\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"762\",\n      targetSimName: \"TJK\",\n      targetName: \"Tajikistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.747\",\n      weight: \"3.75\",\n      embodiedLand: \"1.24\",\n      embodiedWater: \"1.117\",\n    },\n    {\n      eid: \"e5017\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5018\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5019\",\n      source: \"381\",\n      sourceSimName: \"ITA\",\n      sourceRegion: \"Italy\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5065\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.837\",\n      weight: \"0.288\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5066\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.222\",\n      weight: \"0.057\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5067\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.102\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5068\",\n      source: \"384\",\n      sourceSimName: \"CIV\",\n      sourceRegion: \"Cote d'Ivoire\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"26.888\",\n      weight: \"155.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5104\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"819.786\",\n      weight: \"4674.18\",\n      embodiedLand: \"7.562\",\n      embodiedWater: \"5814.68\",\n    },\n    {\n      eid: \"e5105\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.202\",\n      weight: \"20.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5106\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.134\",\n      weight: \"0.159\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5107\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3.186\",\n      weight: \"1.973\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5108\",\n      source: \"388\",\n      sourceSimName: \"JAM\",\n      sourceRegion: \"Jamaica\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5246\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.646\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5247\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.115\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5248\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1285.878\",\n      weight: \"3253\",\n      embodiedLand: \"695.174\",\n      embodiedWater: \"27878.21\",\n    },\n    {\n      eid: \"e5249\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.677\",\n      weight: \"2\",\n      embodiedLand: \"0.486\",\n      embodiedWater: \"17.53\",\n    },\n    {\n      eid: \"e5250\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5251\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.128\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5252\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.792\",\n      weight: \"1.676\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5253\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.33\",\n      weight: \"0.339\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5254\",\n      source: \"392\",\n      sourceSimName: \"JPN\",\n      sourceRegion: \"Japan\",\n      sourceName: \"East Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1536.952\",\n      weight: \"2498.778\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5319\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.05\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5321\",\n      source: \"398\",\n      sourceSimName: \"KAZ\",\n      sourceRegion: \"Kazakhstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5368\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.112\",\n      weight: \"6.518\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5369\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.631\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5370\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.879\",\n      weight: \"0.168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5371\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.34\",\n      weight: \"1.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5372\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5373\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5374\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.066\",\n      weight: \"0.649\",\n      embodiedLand: \"0.046\",\n      embodiedWater: \"1.955\",\n    },\n    {\n      eid: \"e5375\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.143\",\n      weight: \"0.09\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5376\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15280.683\",\n      weight: \"52494.791\",\n      embodiedLand: \"49024.216\",\n      embodiedWater: \"2673717.19\",\n    },\n    {\n      eid: \"e5377\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.138\",\n      weight: \"0.053\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5378\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.011\",\n      weight: \"115\",\n      embodiedLand: \"4.942\",\n      embodiedWater: \"825.24\",\n    },\n    {\n      eid: \"e5379\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.825\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5380\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5381\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.946\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5382\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5383\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14.272\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5384\",\n      source: \"400\",\n      sourceSimName: \"JOR\",\n      sourceRegion: \"Jordan\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5447\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.104\",\n      weight: \"0.05\",\n      embodiedLand: \"0.015\",\n      embodiedWater: \"0.286\",\n    },\n    {\n      eid: \"e5448\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5449\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5450\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"75.807\",\n      weight: \"147.131\",\n      embodiedLand: \"88.514\",\n      embodiedWater: \"387.69\",\n    },\n    {\n      eid: \"e5451\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5452\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"21.654\",\n      weight: \"2.897\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5453\",\n      source: \"404\",\n      sourceSimName: \"KEN\",\n      sourceRegion: \"Kenya\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5494\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.118\",\n      weight: \"3.342\",\n      embodiedLand: \"0.863\",\n      embodiedWater: \"4.802\",\n    },\n    {\n      eid: \"e5495\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.729\",\n    },\n    {\n      eid: \"e5496\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5497\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.364\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5498\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.66\",\n      weight: \"0.715\",\n      embodiedLand: \"0.028\",\n      embodiedWater: \"7.631\",\n    },\n    {\n      eid: \"e5499\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.079\",\n      weight: \"0.06\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e5500\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5501\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.392\",\n    },\n    {\n      eid: \"e5502\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.255\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5503\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.325\",\n      weight: \"0.708\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5504\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.3\",\n      weight: \"0.22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5505\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.309\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5506\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"18.636\",\n      weight: \"8.967\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5507\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.419\",\n      weight: \"1.356\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5508\",\n      source: \"414\",\n      sourceSimName: \"KWT\",\n      sourceRegion: \"Kuwait\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.096\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5524\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.494\",\n      weight: \"0.62\",\n      embodiedLand: \"0.027\",\n      embodiedWater: \"3.678\",\n    },\n    {\n      eid: \"e5525\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.056\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.088\",\n    },\n    {\n      eid: \"e5526\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"3\",\n      weight: \"12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5527\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.543\",\n      weight: \"47.935\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5528\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5529\",\n      source: \"417\",\n      sourceSimName: \"KGZ\",\n      sourceRegion: \"Kyrgyzstan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1391.017\",\n      weight: \"5169.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5568\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"23.4938257\",\n      weight: \"28.2050024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5569\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.444\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5570\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.04\",\n      embodiedLand: \"0.013\",\n      embodiedWater: \"0.105\",\n    },\n    {\n      eid: \"e5571\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"38.47\",\n      weight: \"46.226\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5573\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"25.024\",\n      weight: \"144.873\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5574\",\n      source: \"418\",\n      sourceSimName: \"LAO\",\n      sourceRegion: \"Lao PDR\",\n      sourceName: \"Southeast Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.454\",\n      weight: \"5.88\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5680\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.433\",\n      weight: \"1.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5681\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5682\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.07\",\n      weight: \"0.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5683\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.736\",\n      weight: \"0.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5684\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5685\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.448\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5686\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.038\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5687\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"11.6\",\n      weight: \"2.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5688\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"2.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5689\",\n      source: \"422\",\n      sourceSimName: \"LBN\",\n      sourceRegion: \"Lebanon\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.46160548\",\n      weight: \"12.1968756\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5696\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"11.926\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5697\",\n      source: \"426\",\n      sourceSimName: \"LSO\",\n      sourceRegion: \"Lesotho\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"21.18\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5790\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"76.094\",\n      weight: \"231.535\",\n      embodiedLand: \"70.276\",\n      embodiedWater: \"42.371\",\n    },\n    {\n      eid: \"e5791\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"268\",\n      targetSimName: \"GEO\",\n      targetName: \"Georgia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"21.3954741\",\n      weight: \"17.634\",\n      embodiedLand: \"7.808\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5792\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"9.879\",\n      weight: \"16.669\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5793\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"108.18118\",\n      weight: \"282.748174\",\n      embodiedLand: \"120.980124\",\n      embodiedWater: \"113.947519\",\n    },\n    {\n      eid: \"e5794\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"55.429\",\n      weight: \"102\",\n      embodiedLand: \"50.006\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5795\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"14.519\",\n      weight: \"16.8\",\n      embodiedLand: \"5.346\",\n      embodiedWater: \"0.79\",\n    },\n    {\n      eid: \"e5796\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3040.717\",\n      weight: \"12000\",\n      embodiedLand: \"3410.976\",\n      embodiedWater: \"1416\",\n    },\n    {\n      eid: \"e5797\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.2\",\n      weight: \"22.5\",\n      embodiedLand: \"9.765\",\n      embodiedWater: \"4.14\",\n    },\n    {\n      eid: \"e5798\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5928.904\",\n      weight: \"27800\",\n      embodiedLand: \"8141.021\",\n      embodiedWater: \"5087.4\",\n    },\n    {\n      eid: \"e5799\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"12.5758647\",\n      weight: \"18.1209308\",\n      embodiedLand: \"9.21064206\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5800\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.085\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5801\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"126.649\",\n      weight: \"523.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5802\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"0.006\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e5803\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9979.327\",\n      weight: \"49080.54\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5804\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9773.51\",\n      weight: \"50317.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5805\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1120.625\",\n      weight: \"6464.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5806\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.55\",\n      weight: \"13.716\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5807\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"66.234\",\n      weight: \"130.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5808\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"59.9755096\",\n      weight: \"147.628533\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5809\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"7.622\",\n      weight: \"13.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5810\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"32.2000609\",\n      weight: \"184.508668\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5811\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3824.84552\",\n      weight: \"18150\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5812\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"1.014\",\n      weight: \"1.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5813\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"47.074\",\n      weight: \"169\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5814\",\n      source: \"428\",\n      sourceSimName: \"LVA\",\n      sourceRegion: \"Latvia\",\n      sourceName: \"Europe\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.9\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5823\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"72.763\",\n      weight: \"511.55\",\n      embodiedLand: \"1.752\",\n      embodiedWater: \"713.612\",\n    },\n    {\n      eid: \"e5824\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5860.639\",\n      weight: \"25633.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5825\",\n      source: \"430\",\n      sourceSimName: \"LBR\",\n      sourceRegion: \"Liberia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"43.94\",\n      weight: \"396.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5832\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5833\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.008\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.124\",\n    },\n    {\n      eid: \"e5834\",\n      source: \"434\",\n      sourceSimName: \"LBY\",\n      sourceRegion: \"Libya\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"278.215\",\n      weight: \"344.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5941\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"11.037\",\n      weight: \"21.99\",\n      embodiedLand: \"11.308\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5942\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"952.419598\",\n      weight: \"1777.69802\",\n      embodiedLand: \"536.005575\",\n      embodiedWater: \"154.659357\",\n    },\n    {\n      eid: \"e5943\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.142\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5944\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.5941818\",\n      weight: \"11.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5945\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1740.776\",\n      weight: \"4444.87\",\n      embodiedLand: \"1391.87\",\n      embodiedWater: \"902.309\",\n    },\n    {\n      eid: \"e5946\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"34.047\",\n      weight: \"75\",\n      embodiedLand: \"25.521\",\n      embodiedWater: \"8.325\",\n    },\n    {\n      eid: \"e5947\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.553\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5948\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10.706\",\n      weight: \"21.725\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5949\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2682.98701\",\n      weight: \"9850\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5950\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.692\",\n      weight: \"0.112\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5951\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"52.1904308\",\n      weight: \"28.8378857\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5952\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"150.48433\",\n      weight: \"617.293342\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5954\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"496\",\n      targetSimName: \"MNG\",\n      targetName: \"Mongolia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.229\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5955\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5956\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.8723332\",\n      weight: \"14.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5957\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2596.166\",\n      weight: \"14299.874\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5958\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"624\",\n      targetSimName: \"GNB\",\n      targetName: \"Guinea-Bissau\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.352\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5959\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7705.296\",\n      weight: \"32986.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5960\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18663.554\",\n      weight: \"101536.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5961\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"740\",\n      targetSimName: \"SUR\",\n      targetName: \"Suriname\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.423\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5962\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.777\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5963\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.583\",\n      weight: \"41\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5964\",\n      source: \"440\",\n      sourceSimName: \"LTU\",\n      sourceRegion: \"Lithuania\",\n      sourceName: \"Europe\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"9794.196\",\n      weight: \"53649.806\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5997\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5998\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e5999\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6000\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.32369588\",\n      weight: \"10\",\n      embodiedLand: \"2.391\",\n      embodiedWater: \"1.34\",\n    },\n    {\n      eid: \"e6002\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.9\",\n      embodiedLand: \"0.216\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6003\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1472.921\",\n      weight: \"4490.059\",\n      embodiedLand: \"819.513\",\n      embodiedWater: \"1333.547\",\n    },\n    {\n      eid: \"e6005\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6006\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6008\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"414\",\n      targetSimName: \"KWT\",\n      targetName: \"Kuwait\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6009\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.556\",\n      weight: \"0.108\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6010\",\n      source: \"442\",\n      sourceSimName: \"LUX\",\n      sourceRegion: \"Luxembourg\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.553\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6029\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.524\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6030\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6031\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.4864968\",\n      weight: \"333.932001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6032\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"4.432\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6033\",\n      source: \"450\",\n      sourceSimName: \"MDG\",\n      sourceRegion: \"Madagascar\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6054\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.078\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.068\",\n    },\n    {\n      eid: \"e6055\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.044\",\n    },\n    {\n      eid: \"e6056\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.174\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e6057\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.031\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6058\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"0.051\",\n      weight: \"0.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6059\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"2.192\",\n      weight: \"0.072\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6060\",\n      source: \"454\",\n      sourceSimName: \"MWI\",\n      sourceRegion: \"Malawi\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6167\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.033\",\n      weight: \"0.026\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.394\",\n    },\n    {\n      eid: \"e6168\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.24\",\n      weight: \"22.5\",\n      embodiedLand: \"1.165\",\n      embodiedWater: \"57.42\",\n    },\n    {\n      eid: \"e6169\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.547\",\n      weight: \"0.074\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6170\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"60.178\",\n      weight: \"39.34\",\n      embodiedLand: \"0.219\",\n      embodiedWater: \"24.902\",\n    },\n    {\n      eid: \"e6171\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"250.088\",\n      weight: \"313.5\",\n      embodiedLand: \"205.235\",\n      embodiedWater: \"1026.712\",\n    },\n    {\n      eid: \"e6172\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"27.338\",\n      weight: \"16.94\",\n      embodiedLand: \"0.121\",\n      embodiedWater: \"0.813\",\n    },\n    {\n      eid: \"e6174\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"38.385\",\n      weight: \"44.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6175\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.444\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6176\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"39.86\",\n      weight: \"18.976\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6177\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"69.327\",\n      weight: \"39.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6178\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"9.794\",\n      weight: \"4.694\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6179\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.55\",\n      weight: \"1.246\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6180\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"143.017\",\n      weight: \"99.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6181\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6182\",\n      source: \"458\",\n      sourceSimName: \"MYS\",\n      sourceRegion: \"Malaysia\",\n      sourceName: \"Southeast Asia\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6185\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6186\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6187\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"134.792\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6188\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.466\",\n      weight: \"248\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6189\",\n      source: \"462\",\n      sourceSimName: \"MDV\",\n      sourceRegion: \"Maldives\",\n      sourceName: \"South Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"500.517\",\n      weight: \"1376.74\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6210\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.222\",\n      weight: \"24\",\n      embodiedLand: \"11.101\",\n      embodiedWater: \"285.816\",\n    },\n    {\n      eid: \"e6211\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.201\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6212\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6213\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.127\",\n      weight: \"0.024\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6214\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6215\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.948\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6216\",\n      source: \"466\",\n      sourceSimName: \"MLI\",\n      sourceRegion: \"Mali\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.006\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6270\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6113.626\",\n      weight: \"14771.565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6271\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6272\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"14.65\",\n      weight: \"9.6\",\n      embodiedLand: \"0.224\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6273\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"97.941\",\n      weight: \"48\",\n      embodiedLand: \"5.948\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6274\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"5.261\",\n      weight: \"3.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6275\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.207\",\n      weight: \"23.502\",\n      embodiedLand: \"0.48152987\",\n      embodiedWater: \"30.8105997\",\n    },\n    {\n      eid: \"e6276\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.151\",\n      weight: \"5.43\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6277\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"96\",\n      targetSimName: \"BRN\",\n      targetName: \"Brunei Darussalam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"18.135\",\n      weight: \"25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6278\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"24.9972232\",\n      weight: \"43.4084916\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6280\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.101\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6281\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.00156596\",\n      weight: \"0.00208085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6282\",\n      source: \"470\",\n      sourceSimName: \"MLT\",\n      sourceRegion: \"Malta\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.973\",\n      weight: \"1.347\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6293\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.2\",\n      embodiedLand: \"0.017\",\n      embodiedWater: \"0.139\",\n    },\n    {\n      eid: \"e6294\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"16.391\",\n      weight: \"25\",\n      embodiedLand: \"7.002\",\n      embodiedWater: \"204.525\",\n    },\n    {\n      eid: \"e6295\",\n      source: \"478\",\n      sourceSimName: \"MRT\",\n      sourceRegion: \"Mauritania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.018\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6330\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6331\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"41.478\",\n      weight: \"30.58\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6332\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.029\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6333\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6334\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"353.845136\",\n      weight: \"1878.10933\",\n      embodiedLand: \"15.5904614\",\n      embodiedWater: \"3562.77322\",\n    },\n    {\n      eid: \"e6335\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"17.786\",\n      weight: \"42\",\n      embodiedLand: \"0.943\",\n      embodiedWater: \"91.056\",\n    },\n    {\n      eid: \"e6336\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6337\",\n      source: \"480\",\n      sourceSimName: \"MUS\",\n      sourceRegion: \"Mauritius\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2562.825\",\n      weight: \"4828.532\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6437\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.35799817\",\n      weight: \"5.965\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6438\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.96291721\",\n      weight: \"1.082\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"2.028\",\n    },\n    {\n      eid: \"e6439\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.063\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6440\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"1.881\",\n      weight: \"0.334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6441\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6442\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"161.633092\",\n      weight: \"131.698943\",\n      embodiedLand: \"103.093103\",\n      embodiedWater: \"356.509274\",\n    },\n    {\n      eid: \"e6443\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.013\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6444\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"337.977\",\n      weight: \"582.999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6445\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"1.526\",\n      embodiedLand: \"0.37\",\n      embodiedWater: \"84.283\",\n    },\n    {\n      eid: \"e6446\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4579.296\",\n      weight: \"12984.96\",\n      embodiedLand: \"3316.527\",\n      embodiedWater: \"366708.255\",\n    },\n    {\n      eid: \"e6447\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.017\",\n      weight: \"0.007\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6448\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.24\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6449\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.862\",\n      weight: \"1.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6451\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6452\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6917.997\",\n      weight: \"32990.35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6453\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"3719.013\",\n      weight: \"13050\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6454\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.544\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6455\",\n      source: \"484\",\n      sourceSimName: \"MEX\",\n      sourceRegion: \"Mexico\",\n      sourceName: \"North America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.933\",\n      weight: \"14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6469\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.193\",\n      weight: \"24.894\",\n      embodiedLand: \"1.244\",\n      embodiedWater: \"132.162\",\n    },\n    {\n      eid: \"e6470\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.077\",\n      weight: \"0.186\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6471\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"88.215\",\n      weight: \"250\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6472\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6473\",\n      source: \"496\",\n      sourceSimName: \"MNG\",\n      sourceRegion: \"Mongolia\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.254\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6532\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"8\",\n      targetSimName: \"ALB\",\n      targetName: \"Albania\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"8.045\",\n      weight: \"44\",\n      embodiedLand: \"3.73\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6533\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.21\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"0.438\",\n    },\n    {\n      eid: \"e6534\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"15.064\",\n      weight: \"43.85\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6535\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"326.546\",\n      weight: \"1813.443\",\n      embodiedLand: \"499.351\",\n      embodiedWater: \"223.053\",\n    },\n    {\n      eid: \"e6536\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"3.85\",\n      weight: \"25\",\n      embodiedLand: \"4.393\",\n      embodiedWater: \"5.775\",\n    },\n    {\n      eid: \"e6537\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"3.266\",\n      weight: \"21\",\n      embodiedLand: \"0.97\",\n      embodiedWater: \"69.3\",\n    },\n    {\n      eid: \"e6538\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.59555736\",\n      weight: \"0.96\",\n      embodiedLand: \"0.038\",\n      embodiedWater: \"5.211\",\n    },\n    {\n      eid: \"e6539\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.06377214\",\n      weight: \"0.08899229\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.05394042\",\n    },\n    {\n      eid: \"e6540\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"222.69\",\n      weight: \"1394.035\",\n      embodiedLand: \"436.708\",\n      embodiedWater: \"224.44\",\n    },\n    {\n      eid: \"e6541\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"988.605\",\n      weight: \"5010.909\",\n      embodiedLand: \"1241.576\",\n      embodiedWater: \"410.895\",\n    },\n    {\n      eid: \"e6542\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.986\",\n      weight: \"9.5\",\n      embodiedLand: \"0.479\",\n      embodiedWater: \"45.277\",\n    },\n    {\n      eid: \"e6543\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1092.675\",\n      weight: \"6495\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6544\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"452.602\",\n      weight: \"2038.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6545\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"6.63923657\",\n      weight: \"5.90356819\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6546\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"288.901\",\n      weight: \"2028.38\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6547\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3353.129\",\n      weight: \"19610.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6548\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"948.934454\",\n      weight: \"4372.09334\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6549\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6550\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"79.648\",\n      weight: \"504.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6551\",\n      source: \"498\",\n      sourceSimName: \"MDA\",\n      sourceRegion: \"Moldova\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1726.318\",\n      weight: \"9113.49\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6567\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.01797173\",\n      weight: \"0.839\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"0.103\",\n    },\n    {\n      eid: \"e6568\",\n      source: \"499\",\n      sourceSimName: \"MNE\",\n      sourceRegion: \"Montenegro\",\n      sourceName: \"Europe\",\n      target: \"804\",\n      targetSimName: \"UKR\",\n      targetName: \"Ukraine\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.084\",\n      weight: \"0.085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6655\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.865\",\n      weight: \"0.451\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6656\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.841\",\n      weight: \"13.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6657\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.017\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6658\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.0198093\",\n      weight: \"10.0095949\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6659\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.984\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6660\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.221\",\n      weight: \"0.175\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6661\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"7.444\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6662\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.732751\",\n      weight: \"37.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6663\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6664\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"6.389\",\n      weight: \"6.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6666\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.611\",\n      weight: \"0.722\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6667\",\n      source: \"504\",\n      sourceSimName: \"MAR\",\n      sourceRegion: \"Morocco\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.014\",\n      weight: \"3.382\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6690\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"227.071\",\n      weight: \"1000.665\",\n      embodiedLand: \"616.851\",\n      embodiedWater: \"729.485\",\n    },\n    {\n      eid: \"e6691\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.486\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6692\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.194\",\n      weight: \"0.633\",\n      embodiedLand: \"0.042\",\n      embodiedWater: \"4.535\",\n    },\n    {\n      eid: \"e6693\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.126\",\n      weight: \"0.014\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6694\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.043\",\n      weight: \"0.295\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6695\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.596\",\n      weight: \"6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6696\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6697\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.115\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6698\",\n      source: \"508\",\n      sourceSimName: \"MOZ\",\n      sourceRegion: \"Mozambique\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.767\",\n      weight: \"0.573\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6739\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"30.039\",\n      weight: \"20\",\n      embodiedLand: \"0.17\",\n      embodiedWater: \"2.22\",\n    },\n    {\n      eid: \"e6740\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6741\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"187.414\",\n      weight: \"81.513\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6742\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"443.222\",\n      weight: \"441.628\",\n      embodiedLand: \"167.33\",\n      embodiedWater: \"7857.887\",\n    },\n    {\n      eid: \"e6743\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.067\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6744\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"49.186\",\n      weight: \"24.728\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6745\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.135\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6746\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1413.126\",\n      weight: \"572.235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6747\",\n      source: \"512\",\n      sourceSimName: \"OMN\",\n      sourceRegion: \"Oman\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.074\",\n      weight: \"3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6802\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"12\",\n      targetSimName: \"DZA\",\n      targetName: \"Algeria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6803\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6804\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.327\",\n      weight: \"19.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6805\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6806\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.702\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6807\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6808\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.212\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6809\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.228\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6810\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.019\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6811\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6812\",\n      source: \"516\",\n      sourceSimName: \"NAM\",\n      sourceRegion: \"Namibia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6833\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.219\",\n      weight: \"0.503\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.015\",\n    },\n    {\n      eid: \"e6834\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"193.924\",\n      weight: \"375\",\n      embodiedLand: \"194.083\",\n      embodiedWater: \"3776.25\",\n    },\n    {\n      eid: \"e6835\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11.017\",\n      weight: \"19.5\",\n      embodiedLand: \"8.554\",\n      embodiedWater: \"382.551\",\n    },\n    {\n      eid: \"e6836\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.091\",\n      weight: \"0.02\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6837\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"64\",\n      targetSimName: \"BTN\",\n      targetName: \"Bhutan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"77.909\",\n      weight: \"306\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6838\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6839\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.403\",\n      weight: \"0.365\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e6840\",\n      source: \"524\",\n      sourceSimName: \"NPL\",\n      sourceRegion: \"Nepal\",\n      sourceName: \"South Asia\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.023\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7020\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7021\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7022\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"238\",\n      targetSimName: \"FLK\",\n      targetName: \"Falkland Isds (Malvinas)\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7023\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.009\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7024\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"308\",\n      targetSimName: \"GRD\",\n      targetName: \"Grenada\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7025\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7026\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"15.929\",\n      weight: \"3.746\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7027\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"674\",\n      targetSimName: \"SMR\",\n      targetName: \"San Marino\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7028\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.672\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7030\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"7.506\",\n      weight: \"15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7031\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7032\",\n      source: \"528\",\n      sourceSimName: \"NLD\",\n      sourceRegion: \"Netherlands\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"30.968\",\n      weight: \"60\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7047\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7048\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7049\",\n      source: \"531\",\n      sourceSimName: \"CUW\",\n      sourceRegion: \"Curacao\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7059\",\n      source: \"533\",\n      sourceSimName: \"ABW\",\n      sourceRegion: \"Aruba\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7062\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7063\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7064\",\n      source: \"534\",\n      sourceSimName: \"SXM\",\n      sourceRegion: \"Sint Maarten (Dutch part)\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7072\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.055\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7073\",\n      source: \"540\",\n      sourceSimName: \"NCL\",\n      sourceRegion: \"New Caledonia\",\n      sourceName: \"Oceania\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7163\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.521\",\n      weight: \"0.435\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7164\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.288\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7165\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.328\",\n      weight: \"0.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7166\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"26.252\",\n      weight: \"1.208\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7167\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7168\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7169\",\n      source: \"554\",\n      sourceSimName: \"NZL\",\n      sourceRegion: \"New Zealand\",\n      sourceName: \"Oceania\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"20.355\",\n      weight: \"23.559\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7188\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.004\",\n    },\n    {\n      eid: \"e7189\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"21.386\",\n      weight: \"136.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7190\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.379\",\n      weight: \"0.08\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7191\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1.356\",\n      weight: \"0.982\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7192\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"562\",\n      targetSimName: \"NER\",\n      targetName: \"Niger\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.951\",\n      weight: \"141\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7193\",\n      source: \"558\",\n      sourceSimName: \"NIC\",\n      sourceRegion: \"Nicaragua\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.256\",\n      weight: \"2.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7221\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7222\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.966\",\n      weight: \"2.817\",\n      embodiedLand: \"0.349\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7223\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"20.293\",\n      weight: \"15.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7224\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"20.609\",\n      weight: \"35\",\n      embodiedLand: \"21.084\",\n      embodiedWater: \"566.545\",\n    },\n    {\n      eid: \"e7225\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"14.981\",\n      weight: \"28.684\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7226\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"249.489\",\n      weight: \"370\",\n      embodiedLand: \"118.35\",\n      embodiedWater: \"54063.29\",\n    },\n    {\n      eid: \"e7227\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7228\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"177.342\",\n      weight: \"265.715\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7229\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7230\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"48.184\",\n      weight: \"72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7231\",\n      source: \"562\",\n      sourceSimName: \"NER\",\n      sourceRegion: \"Niger\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"29.038\",\n      weight: \"39.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7305\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.338\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7306\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.014\",\n      weight: \"0.01\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7307\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"672\",\n      weight: \"3264.727\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7308\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.07\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.106\",\n    },\n    {\n      eid: \"e7309\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.039\",\n      weight: \"0.013\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7310\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.882\",\n      weight: \"0.84\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7311\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"12.401\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7312\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7313\",\n      source: \"566\",\n      sourceSimName: \"NGA\",\n      sourceRegion: \"Nigeria\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"11.331\",\n      weight: \"23.94\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7358\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"108.657\",\n      weight: \"200.963\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7359\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"98.433\",\n      weight: \"151.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7360\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.211\",\n      weight: \"4.3\",\n      embodiedLand: \"0.062\",\n      embodiedWater: \"10.109\",\n    },\n    {\n      eid: \"e7361\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.125\",\n      weight: \"6.503\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7362\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"22.616\",\n      weight: \"41.331\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7363\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"304\",\n      targetSimName: \"GRL\",\n      targetName: \"Greenland\",\n      targetRegion: \"North America\",\n      resource: \"Buckwheat\",\n      year: \"2015\",\n      value: \"0.125\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7364\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.165\",\n      weight: \"0.055\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7365\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7366\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"643\",\n      targetSimName: \"RUS\",\n      targetName: \"Russian Federation\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.183\",\n      weight: \"0.152\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.036\",\n    },\n    {\n      eid: \"e7367\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.024\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7368\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.222\",\n      weight: \"0.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7369\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"143.971\",\n      weight: \"104.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7370\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.444\",\n      weight: \"0.939\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7371\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.662\",\n      weight: \"4.95\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7372\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"241.798\",\n      weight: \"172.775\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7373\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"7.72031118\",\n      weight: \"13.3129919\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7374\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.143\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7375\",\n      source: \"579\",\n      sourceSimName: \"NOR\",\n      sourceRegion: \"Norway\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"4.572\",\n      weight: \"0.64\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7379\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7380\",\n      source: \"581\",\n      sourceSimName: \"UMI\",\n      sourceRegion: \"United States Minor Outlying Isds\",\n      sourceName: \"Oceania\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7384\",\n      source: \"584\",\n      sourceSimName: \"MHL\",\n      sourceRegion: \"Marshall Isds\",\n      sourceName: \"Oceania\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"173.38\",\n      weight: \"514.539\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7551\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"7.467\",\n      weight: \"8.962\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7552\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.749\",\n      weight: \"0.657\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7553\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.707\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7554\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.019\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7555\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.665\",\n      weight: \"0.191\",\n      embodiedLand: \"0.00237267\",\n      embodiedWater: \"2.86855901\",\n    },\n    {\n      eid: \"e7556\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"45.897\",\n      weight: \"108\",\n      embodiedLand: \"94.494\",\n      embodiedWater: \"993.276\",\n    },\n    {\n      eid: \"e7557\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"798\",\n      targetSimName: \"TUV\",\n      targetName: \"Tuvalu\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"33.126\",\n      weight: \"85\",\n      embodiedLand: \"49.298\",\n      embodiedWater: \"519.945\",\n    },\n    {\n      eid: \"e7558\",\n      source: \"586\",\n      sourceSimName: \"PAK\",\n      sourceRegion: \"Pakistan\",\n      sourceName: \"South Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"11.969\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7600\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.135\",\n      weight: \"0.021\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7601\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"17.396\",\n      weight: \"5.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7602\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.484\",\n      weight: \"0.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7603\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"89.077\",\n      weight: \"262\",\n      embodiedLand: \"14.9602\",\n      embodiedWater: \"24.628\",\n    },\n    {\n      eid: \"e7604\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"140.541\",\n      weight: \"1387.5\",\n      embodiedLand: \"722.268\",\n      embodiedWater: \"10034.4\",\n    },\n    {\n      eid: \"e7605\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.5\",\n      weight: \"5.26\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7606\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"58.626\",\n      weight: \"142.99\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7607\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.478\",\n      weight: \"0.354\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7608\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.908\",\n      weight: \"1.673\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7609\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.489\",\n      weight: \"0.251\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7610\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2.519\",\n      weight: \"4.65\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7611\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"22\",\n      weight: \"110\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7612\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.307\",\n      weight: \"25.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7613\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7614\",\n      source: \"591\",\n      sourceSimName: \"PAN\",\n      sourceRegion: \"Panama\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2.04\",\n      weight: \"3.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7627\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7628\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7629\",\n      source: \"598\",\n      sourceSimName: \"PNG\",\n      sourceRegion: \"Papua New Guinea\",\n      sourceName: \"Oceania\",\n      target: \"702\",\n      targetSimName: \"SGP\",\n      targetName: \"Singapore\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7701\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.09\",\n      weight: \"0.056\",\n      embodiedLand: \"0.022\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7702\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.12\",\n      weight: \"23.76\",\n      embodiedLand: \"4.716\",\n      embodiedWater: \"141.396\",\n    },\n    {\n      eid: \"e7703\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"253.201\",\n      weight: \"2164.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7704\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"176\",\n      weight: \"2000\",\n      embodiedLand: \"512.183\",\n      embodiedWater: \"244\",\n    },\n    {\n      eid: \"e7705\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.008\",\n      embodiedLand: \"0.002\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e7706\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"43.718\",\n      weight: \"321.454\",\n      embodiedLand: \"99.0839337\",\n      embodiedWater: \"39.2173983\",\n    },\n    {\n      eid: \"e7707\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.926\",\n      weight: \"1.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7708\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"110\",\n      weight: \"1100\",\n      embodiedLand: \"264.036\",\n      embodiedWater: \"247.5\",\n    },\n    {\n      eid: \"e7709\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4903.23583\",\n      weight: \"30611.0521\",\n      embodiedLand: \"7784.12365\",\n      embodiedWater: \"4254.93621\",\n    },\n    {\n      eid: \"e7710\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"133.791\",\n      weight: \"200.04\",\n      embodiedLand: \"37.571\",\n      embodiedWater: \"3567.513\",\n    },\n    {\n      eid: \"e7711\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.368\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7712\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6301.54229\",\n      weight: \"39230.597\",\n      embodiedLand: \"9966.60233\",\n      embodiedWater: \"4825.3641\",\n    },\n    {\n      eid: \"e7713\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"10163.8981\",\n      weight: \"51351.1604\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7714\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"145.554268\",\n      weight: \"317.548282\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7715\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"14598.991\",\n      weight: \"82200.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7716\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.114\",\n      weight: \"0.114\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7717\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"313.761\",\n      weight: \"653.634\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7718\",\n      source: \"600\",\n      sourceSimName: \"PRY\",\n      sourceRegion: \"Paraguay\",\n      sourceName: \"South America\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"38\",\n      weight: \"100\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7820\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7821\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.728\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7822\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.665\",\n      weight: \"0.358\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7823\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"3.026\",\n      weight: \"5.379\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7824\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"440\",\n      targetSimName: \"LTU\",\n      targetName: \"Lithuania\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"28.047\",\n      weight: \"7.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7825\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"0.81\",\n      weight: \"0.252\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.023\",\n    },\n    {\n      eid: \"e7826\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.355\",\n      weight: \"0.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7827\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5.1145\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7828\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"600\",\n      targetSimName: \"PRY\",\n      targetName: \"Paraguay\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"215.438505\",\n      weight: \"23.9549268\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7829\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"73.9066099\",\n      weight: \"25.626565\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7830\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.99\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7831\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.44\",\n      weight: \"0.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"2.623\",\n    },\n    {\n      eid: \"e7832\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.51186012\",\n      weight: \"0.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7833\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.093\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7834\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"42.54\",\n      weight: \"15.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7835\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"64.745\",\n      weight: \"19.635\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7836\",\n      source: \"604\",\n      sourceSimName: \"PER\",\n      sourceRegion: \"Peru\",\n      sourceName: \"South America\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.872\",\n      weight: \"0.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7912\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.46\",\n      weight: \"0.249\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7913\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.823\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7914\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.379\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7915\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.149\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7916\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.659\",\n      weight: \"0.955\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7917\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.502\",\n      weight: \"0.139\",\n      embodiedLand: \"0.045\",\n      embodiedWater: \"1.387\",\n    },\n    {\n      eid: \"e7918\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.1\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7919\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"48.872\",\n      weight: \"81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7920\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7921\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.177\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7922\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7923\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.076\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7924\",\n      source: \"608\",\n      sourceSimName: \"PHL\",\n      sourceRegion: \"Philippines\",\n      sourceName: \"Southeast Asia\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.403\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e7927\",\n      source: \"612\",\n      sourceSimName: \"PCN\",\n      sourceRegion: \"Pitcairn\",\n      sourceName: \"Oceania\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8061\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.139\",\n      weight: \"0.145\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8064\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.047\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8065\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"244.824\",\n      weight: \"507.82\",\n      embodiedLand: \"154.861\",\n      embodiedWater: \"22.852\",\n    },\n    {\n      eid: \"e8066\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"70.822\",\n      weight: \"231\",\n      embodiedLand: \"31.512\",\n      embodiedWater: \"476.553\",\n    },\n    {\n      eid: \"e8067\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12161.233\",\n      weight: \"57149.4\",\n      embodiedLand: \"12254.953\",\n      embodiedWater: \"180420.656\",\n    },\n    {\n      eid: \"e8068\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"540\",\n      targetSimName: \"NCL\",\n      targetName: \"New Caledonia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.272\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8070\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"604\",\n      targetSimName: \"PER\",\n      targetName: \"Peru\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"220.92779\",\n      weight: \"400.073031\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8071\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8072\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1248.54\",\n      weight: \"5500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8073\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"302.5090046\",\n      weight: \"656.733934\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8074\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1502.111\",\n      weight: \"7201.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8075\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"691.763\",\n      weight: \"1537.68\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8076\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8077\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1568.202\",\n      weight: \"4027.12\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8078\",\n      source: \"616\",\n      sourceSimName: \"POL\",\n      sourceRegion: \"Poland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"80.973\",\n      weight: \"434.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8162\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"56.829\",\n      weight: \"75\",\n      embodiedLand: \"21.703\",\n      embodiedWater: \"1097.55\",\n    },\n    {\n      eid: \"e8163\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"50.3339085\",\n      weight: \"45.9143482\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8164\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"191\",\n      targetSimName: \"HRV\",\n      targetName: \"Croatia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"58.8618795\",\n      weight: \"87.6717437\",\n      embodiedLand: \"29.8536241\",\n      embodiedWater: \"1680.66691\",\n    },\n    {\n      eid: \"e8165\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.028\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.032\",\n    },\n    {\n      eid: \"e8166\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.68987608\",\n      weight: \"0.56109969\",\n      embodiedLand: \"0.0422374\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8167\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"18.006\",\n      weight: \"28\",\n      embodiedLand: \"22.605\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8168\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"36.111\",\n      weight: \"50\",\n      embodiedLand: \"13.661\",\n      embodiedWater: \"723.6\",\n    },\n    {\n      eid: \"e8169\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"535\",\n      targetSimName: \"BES\",\n      targetName: \"Bonaire\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.166\",\n      weight: \"0.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8170\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8172\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8173\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"267.644962\",\n      weight: \"510\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8174\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"456.64271\",\n      weight: \"587.244797\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8175\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"292\",\n      targetSimName: \"GIB\",\n      targetName: \"Gibraltar\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8176\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.756\",\n      weight: \"1.765\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8177\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"428\",\n      targetSimName: \"LVA\",\n      targetName: \"Latvia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.143\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8178\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"478\",\n      targetSimName: \"MRT\",\n      targetName: \"Mauritania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.004\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8179\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.046\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8180\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"531\",\n      targetSimName: \"CUW\",\n      targetName: \"Curacao\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"8.027\",\n      weight: \"34.041\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8182\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.009\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8183\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8184\",\n      source: \"620\",\n      sourceSimName: \"PRT\",\n      sourceRegion: \"Portugal\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.272\",\n      weight: \"0.204\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8216\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8217\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"276\",\n      targetSimName: \"DEU\",\n      targetName: \"Germany\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.016\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8219\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"60.79\",\n      weight: \"74.981\",\n      embodiedLand: \"2.912\",\n      embodiedWater: \"1094.423\",\n    },\n    {\n      eid: \"e8220\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"83.636\",\n      weight: \"34.8\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8221\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.007\",\n      weight: \"0.001\",\n      embodiedLand: \"0.00009091\",\n      embodiedWater: \"0.00372727\",\n    },\n    {\n      eid: \"e8222\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"18.134\",\n      weight: \"45.408\",\n      embodiedLand: \"0.035\",\n      embodiedWater: \"79.873\",\n    },\n    {\n      eid: \"e8223\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.824\",\n      weight: \"10\",\n      embodiedLand: \"3.735\",\n      embodiedWater: \"104.17\",\n    },\n    {\n      eid: \"e8224\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.059\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8225\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8226\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.458\",\n      weight: \"0.054\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8227\",\n      source: \"634\",\n      sourceSimName: \"QAT\",\n      sourceRegion: \"Qatar\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"710\",\n      targetSimName: \"ZAF\",\n      targetName: \"South Africa\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rye\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8324\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2595\",\n      weight: \"15000\",\n      embodiedLand: \"3360.071\",\n      embodiedWater: \"28275\",\n    },\n    {\n      eid: \"e8325\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.024\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.017\",\n    },\n    {\n      eid: \"e8326\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"11237.2354\",\n      weight: \"56273.1014\",\n      embodiedLand: \"17817.2079\",\n      embodiedWater: \"134548.986\",\n    },\n    {\n      eid: \"e8327\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"232\",\n      targetSimName: \"ERI\",\n      targetName: \"Eritrea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1985\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8329\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4093.718\",\n      weight: \"15865.57\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8330\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"214.3\",\n      weight: \"960\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8331\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1094.973\",\n      weight: \"7050.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8332\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"228.149\",\n      weight: \"1193.19\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8333\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3847.356\",\n      weight: \"21928.554\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8334\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"716\",\n      targetSimName: \"ZWE\",\n      targetName: \"Zimbabwe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"1553.1\",\n      weight: \"10000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8335\",\n      source: \"642\",\n      sourceSimName: \"ROU\",\n      sourceRegion: \"Romania\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"142.45\",\n      weight: \"230\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8468\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.432\",\n      weight: \"10.771\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8469\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1384.377\",\n      weight: \"3256\",\n      embodiedLand: \"1499.247\",\n      embodiedWater: \"5655.672\",\n    },\n    {\n      eid: \"e8470\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"301.524\",\n      weight: \"261.39\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8471\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8472\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"13.5\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8473\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8474\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.47\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8475\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1585.217\",\n      weight: \"11000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8476\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"202.572054\",\n      weight: \"1050\",\n      embodiedLand: \"269.74\",\n      embodiedWater: \"5738.25\",\n    },\n    {\n      eid: \"e8478\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1198.008\",\n      weight: \"7131\",\n      embodiedLand: \"2927.035\",\n      embodiedWater: \"11794.674\",\n    },\n    {\n      eid: \"e8480\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1798.27193\",\n      weight: \"8589.5235\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8481\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1929.019\",\n      weight: \"9904\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8482\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"11.153\",\n      weight: \"45.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8483\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"25.0980149\",\n      weight: \"103.92\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8484\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1427.83359\",\n      weight: \"6406.65847\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8485\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Oats\",\n      year: \"2016\",\n      value: \"0.039\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8486\",\n      source: \"643\",\n      sourceSimName: \"RUS\",\n      sourceRegion: \"Russian Federation\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"257.303\",\n      weight: \"957\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8506\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8507\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"818\",\n      targetSimName: \"EGY\",\n      targetName: \"Egypt\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8508\",\n      source: \"646\",\n      sourceSimName: \"RWA\",\n      sourceRegion: \"Rwanda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.177\",\n      weight: \"0.178\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8524\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"670\",\n      targetSimName: \"VCT\",\n      targetName: \"Saint Vincent and the Grenadines\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8526\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"332\",\n      targetSimName: \"HTI\",\n      targetName: \"Haiti\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8527\",\n      source: \"659\",\n      sourceSimName: \"KNA\",\n      sourceRegion: \"Saint Kitts and Nevis\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"12.999\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8531\",\n      source: \"660\",\n      sourceSimName: \"AIA\",\n      sourceRegion: \"Anguilla\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8545\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"92\",\n      targetSimName: \"VGB\",\n      targetName: \"British Virgin Isds\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.005\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8546\",\n      source: \"662\",\n      sourceSimName: \"LCA\",\n      sourceRegion: \"Saint Lucia\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8547\",\n      source: \"666\",\n      sourceSimName: \"SPM\",\n      sourceRegion: \"Saint Pierre and Miquelon\",\n      sourceName: \"North America\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8565\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8566\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8567\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.002\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8568\",\n      source: \"670\",\n      sourceSimName: \"VCT\",\n      sourceRegion: \"Saint Vincent and the Grenadines\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8573\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"24\",\n      targetSimName: \"AGO\",\n      targetName: \"Angola\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.172\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8574\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.09\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8575\",\n      source: \"678\",\n      sourceSimName: \"STP\",\n      sourceRegion: \"Sao Tome and Principe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"838\",\n      targetSimName: \"\",\n      targetName: \"Free Zones\",\n      targetRegion: \"Other\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.26\",\n      weight: \"1.155\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8652\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8653\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8654\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.48\",\n      weight: \"21.772\",\n      embodiedLand: \"7.63664924\",\n      embodiedWater: \"109.904952\",\n    },\n    {\n      eid: \"e8655\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"417\",\n      targetSimName: \"KGZ\",\n      targetName: \"Kyrgyzstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.067\",\n      weight: \"0.859\",\n      embodiedLand: \"0.014\",\n      embodiedWater: \"0.338\",\n    },\n    {\n      eid: \"e8656\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"659\",\n      targetSimName: \"KNA\",\n      targetName: \"Saint Kitts and Nevis\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.97\",\n      weight: \"0.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8657\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.115\",\n      weight: \"2.5\",\n      embodiedLand: \"0.292\",\n      embodiedWater: \"34.81\",\n    },\n    {\n      eid: \"e8658\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"703\",\n      targetSimName: \"SVK\",\n      targetName: \"Slovakia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.301\",\n    },\n    {\n      eid: \"e8659\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.838\",\n      weight: \"16\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8660\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8661\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.252\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8662\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.509\",\n      weight: \"1.51\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8663\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8664\",\n      source: \"682\",\n      sourceSimName: \"SAU\",\n      sourceRegion: \"Saudi Arabia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"7.747\",\n      weight: \"5.335\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8718\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"48\",\n      targetSimName: \"BHR\",\n      targetName: \"Bahrain\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.062\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8720\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.711\",\n      weight: \"0.212\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8721\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"20\",\n      targetSimName: \"AND\",\n      targetName: \"Andorra\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.085\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8722\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.302\",\n      weight: \"1.31\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8723\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.53\",\n      weight: \"1.14\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8724\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.214\",\n      weight: \"0.07\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8725\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"666\",\n      targetSimName: \"SPM\",\n      targetName: \"Saint Pierre and Miquelon\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"84\",\n      weight: \"261.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8726\",\n      source: \"686\",\n      sourceSimName: \"SEN\",\n      sourceRegion: \"Senegal\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.011\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8794\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.967\",\n      weight: \"21.5\",\n      embodiedLand: \"6.634\",\n      embodiedWater: \"5.268\",\n    },\n    {\n      eid: \"e8796\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.02\",\n      weight: \"0.028\",\n      embodiedLand: \"0.009\",\n      embodiedWater: \"0.012\",\n    },\n    {\n      eid: \"e8797\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8798\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"86.2366732\",\n      weight: \"177.68999\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8800\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"129.178771\",\n      weight: \"288.216749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8801\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.403\",\n      weight: \"45.042\",\n      embodiedLand: \"13.431\",\n      embodiedWater: \"10.225\",\n    },\n    {\n      eid: \"e8802\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"26.6315535\",\n      weight: \"63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8803\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.3\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8804\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"277.534\",\n      weight: \"46.233\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8805\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8806\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.013\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8807\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"61.871\",\n      weight: \"225.4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8808\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.51515098\",\n      weight: \"0.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8809\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.25833351\",\n      weight: \"0.76309616\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8810\",\n      source: \"688\",\n      sourceSimName: \"SRB\",\n      sourceRegion: \"Serbia\",\n      sourceName: \"Europe\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1.96\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8817\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8818\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18.484\",\n      weight: \"75\",\n      embodiedLand: \"0.094\",\n      embodiedWater: \"95.025\",\n    },\n    {\n      eid: \"e8819\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"12.553\",\n      weight: \"25.427\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8820\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8821\",\n      source: \"690\",\n      sourceSimName: \"SYC\",\n      sourceRegion: \"Seychelles\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"15.778\",\n      weight: \"69\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8835\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7.786\",\n      weight: \"2.5\",\n      embodiedLand: \"1.293\",\n      embodiedWater: \"0.832\",\n    },\n    {\n      eid: \"e8836\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"324\",\n      targetSimName: \"GIN\",\n      targetName: \"Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"1.502\",\n      weight: \"2.93\",\n      embodiedLand: \"2.545\",\n      embodiedWater: \"27.483\",\n    },\n    {\n      eid: \"e8837\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8838\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8839\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.401\",\n      weight: \"0.519\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8840\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"12.13\",\n      weight: \"10.403\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8841\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"422\",\n      targetSimName: \"LBN\",\n      targetName: \"Lebanon\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.072\",\n      weight: \"0.36\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e8842\",\n      source: \"694\",\n      sourceSimName: \"SLE\",\n      sourceRegion: \"Sierra Leone\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9039\",\n      source: \"699\",\n      sourceSimName: \"IND\",\n      sourceRegion: \"India\",\n      sourceName: \"South Asia\",\n      target: \"581\",\n      targetSimName: \"UMI\",\n      targetName: \"United States Minor Outlying Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"10.376\",\n      weight: \"18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9154\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"68\",\n      targetSimName: \"BOL\",\n      targetName: \"Bolivia\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.016\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9155\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"520\",\n      targetSimName: \"NRU\",\n      targetName: \"Nauru\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.204\",\n      weight: \"0.12\",\n      embodiedLand: \"0.037\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9156\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"39.237\",\n      weight: \"63.34\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9157\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"40.244\",\n      weight: \"48\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9159\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"316\",\n      targetSimName: \"GUM\",\n      targetName: \"Guam\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9160\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.15\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9161\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"63.252\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9162\",\n      source: \"702\",\n      sourceSimName: \"SGP\",\n      sourceRegion: \"Singapore\",\n      sourceName: \"Southeast Asia\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.757\",\n      weight: \"0.209\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9224\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.768\",\n      weight: \"1.585\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9225\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.002\",\n      embodiedLand: \"0.011\",\n      embodiedWater: \"0.01\",\n    },\n    {\n      eid: \"e9226\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"90.739\",\n      weight: \"210.86\",\n      embodiedLand: \"23.926\",\n      embodiedWater: \"208.33\",\n    },\n    {\n      eid: \"e9227\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.27\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9228\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"7\",\n      weight: \"10\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9230\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"1729.926\",\n      weight: \"4000\",\n      embodiedLand: \"976.835\",\n      embodiedWater: \"240\",\n    },\n    {\n      eid: \"e9231\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"146.145\",\n      weight: \"460\",\n      embodiedLand: \"229.046\",\n      embodiedWater: \"1751.22\",\n    },\n    {\n      eid: \"e9232\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"31.674\",\n      weight: \"42\",\n      embodiedLand: \"27.568\",\n      embodiedWater: \"21.294\",\n    },\n    {\n      eid: \"e9233\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"344.235\",\n      weight: \"1266.178\",\n      embodiedLand: \"306.755\",\n      embodiedWater: \"4740.57\",\n    },\n    {\n      eid: \"e9234\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.173\",\n      weight: \"1.791\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9235\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.155\",\n      weight: \"1.878\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9236\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"504\",\n      targetSimName: \"MAR\",\n      targetName: \"Morocco\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"20.454\",\n      weight: \"3.653\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9237\",\n      source: \"703\",\n      sourceSimName: \"SVK\",\n      sourceRegion: \"Slovakia\",\n      sourceName: \"Europe\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.332\",\n      weight: \"0.229\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9397\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"38.297\",\n      weight: \"117.657\",\n      embodiedLand: \"12.759\",\n      embodiedWater: \"163.896\",\n    },\n    {\n      eid: \"e9398\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.78\",\n      weight: \"3.285\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9399\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"100\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9400\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"580\",\n      targetSimName: \"MNP\",\n      targetName: \"N. Mariana Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"28212.429\",\n      weight: \"50643.596\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9401\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"19.732\",\n      weight: \"25.035\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9402\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.917\",\n      weight: \"30.866\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9403\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"767.08\",\n      weight: \"1370\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9404\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.161\",\n      weight: \"0.073\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9405\",\n      source: \"704\",\n      sourceSimName: \"VNM\",\n      sourceRegion: \"Vietnam\",\n      sourceName: \"Southeast Asia\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.189\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9460\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"31\",\n      targetSimName: \"AZE\",\n      targetName: \"Azerbaijan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"2.115\",\n      weight: \"1.485\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9461\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"76.922\",\n      weight: \"78\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9462\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.087\",\n      weight: \"0.043\",\n      embodiedLand: \"0.003\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9463\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"285.64339\",\n      weight: \"1519.634\",\n      embodiedLand: \"231.021\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9464\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"204\",\n      targetSimName: \"BEN\",\n      targetName: \"Benin\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"91.632\",\n      weight: \"210.82\",\n      embodiedLand: \"23.231\",\n      embodiedWater: \"116.162\",\n    },\n    {\n      eid: \"e9465\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"233\",\n      targetSimName: \"EST\",\n      targetName: \"Estonia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.156\",\n      weight: \"0.041\",\n      embodiedLand: \"0.01\",\n      embodiedWater: \"0.436\",\n    },\n    {\n      eid: \"e9467\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"6\",\n      weight: \"3.75\",\n      embodiedLand: \"0.251\",\n      embodiedWater: \"36.904\",\n    },\n    {\n      eid: \"e9468\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"52.7905262\",\n      weight: \"139\",\n      embodiedLand: \"46.698\",\n      embodiedWater: \"55.739\",\n    },\n    {\n      eid: \"e9469\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.906\",\n      weight: \"22\",\n      embodiedLand: \"6.456\",\n      embodiedWater: \"8.844\",\n    },\n    {\n      eid: \"e9470\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.687\",\n      weight: \"0.721\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9471\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.021\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9472\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"14.93823874\",\n      weight: \"7.86021619\",\n      embodiedLand: \"0.01751575\",\n      embodiedWater: \"27.1184749\",\n    },\n    {\n      eid: \"e9473\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.876\",\n      weight: \"30.093\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9474\",\n      source: \"705\",\n      sourceSimName: \"SVN\",\n      sourceRegion: \"Slovenia\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.019\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9483\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9484\",\n      source: \"706\",\n      sourceSimName: \"SOM\",\n      sourceRegion: \"Somalia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"19.298\",\n      weight: \"11.899\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9630\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9631\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.012\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9632\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"226\",\n      targetSimName: \"GNQ\",\n      targetName: \"Equatorial Guinea\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.057\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9633\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.053\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9634\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.267\",\n      weight: \"0.24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9635\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9636\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9637\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"776\",\n      targetSimName: \"TON\",\n      targetName: \"Tonga\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"21.01\",\n      weight: \"35\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9638\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"28\",\n      targetSimName: \"ATG\",\n      targetName: \"Antigua and Barbuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"10.271\",\n      weight: \"32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9639\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"7.992\",\n      weight: \"20\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9640\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"291.645\",\n      weight: \"223.789\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9641\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"406.568\",\n      weight: \"326.18\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9642\",\n      source: \"710\",\n      sourceSimName: \"ZAF\",\n      sourceRegion: \"South Africa\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9670\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"249.898\",\n      weight: \"235.45\",\n      embodiedLand: \"59.656\",\n      embodiedWater: \"250.99\",\n    },\n    {\n      eid: \"e9671\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9672\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"49.652\",\n      weight: \"10\",\n      embodiedLand: \"15.749\",\n      embodiedWater: \"1.39\",\n    },\n    {\n      eid: \"e9673\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.082\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.054\",\n    },\n    {\n      eid: \"e9674\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"646\",\n      targetSimName: \"RWA\",\n      targetName: \"Rwanda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"262.679\",\n      weight: \"424.094\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9675\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.017\",\n      weight: \"0.003\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9676\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.002\",\n    },\n    {\n      eid: \"e9677\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.583\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9678\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.8\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9679\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"392\",\n      targetSimName: \"JPN\",\n      targetName: \"Japan\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.05\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9680\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"108.245803\",\n      weight: \"74.0433696\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9681\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.073\",\n      weight: \"0.034\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9682\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"699\",\n      targetSimName: \"IND\",\n      targetName: \"India\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.04989606\",\n      weight: \"0.08321444\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9683\",\n      source: \"716\",\n      sourceSimName: \"ZWE\",\n      sourceRegion: \"Zimbabwe\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9847\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"174\",\n      targetSimName: \"COM\",\n      targetName: \"Comoros\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.162\",\n      weight: \"49.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9848\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"266\",\n      targetSimName: \"GAB\",\n      targetName: \"Gabon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.104\",\n      weight: \"0.84\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9849\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"71.418\",\n      weight: \"180\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9850\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"90\",\n      targetSimName: \"SLB\",\n      targetName: \"Solomon Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"31.3543178\",\n      weight: \"71.6911179\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9851\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.221\",\n      weight: \"0.275\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9852\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"296\",\n      targetSimName: \"KIR\",\n      targetName: \"Kiribati\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.098\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9853\",\n      source: \"724\",\n      sourceSimName: \"ESP\",\n      sourceRegion: \"Spain\",\n      sourceName: \"Europe\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.199\",\n      weight: \"0.036\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9856\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9857\",\n      source: \"728\",\n      sourceSimName: \"SSD\",\n      sourceRegion: \"South Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9889\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.333\",\n      weight: \"0.31\",\n      embodiedLand: \"0.02\",\n      embodiedWater: \"11.447\",\n    },\n    {\n      eid: \"e9890\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"43.181\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9891\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2015\",\n      value: \"20.076\",\n      weight: \"40\",\n      embodiedLand: \"69.334\",\n      embodiedWater: \"202.56\",\n    },\n    {\n      eid: \"e9892\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"434\",\n      targetSimName: \"LBY\",\n      targetName: \"Libya\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.5\",\n      weight: \"5\",\n      embodiedLand: \"5.013\",\n      embodiedWater: \"44.535\",\n    },\n    {\n      eid: \"e9893\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.13\",\n      weight: \"0.15\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9894\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9895\",\n      source: \"729\",\n      sourceSimName: \"SDN\",\n      sourceRegion: \"Sudan\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.091\",\n      weight: \"0.333\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9896\",\n      source: \"732\",\n      sourceSimName: \"ESH\",\n      sourceRegion: \"Western Sahara\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9934\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"170\",\n      targetSimName: \"COL\",\n      targetName: \"Colombia\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"48.174\",\n      weight: \"340.23\",\n      embodiedLand: \"96.561\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9935\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.073\",\n      weight: \"0.002\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9936\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"579\",\n      targetSimName: \"NOR\",\n      targetName: \"Norway\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.141\",\n      weight: \"0.09\",\n      embodiedLand: \"0.034\",\n      embodiedWater: \"0.65\",\n    },\n    {\n      eid: \"e9937\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"757\",\n      targetSimName: \"CHE\",\n      targetName: \"Switzerland\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.181\",\n      weight: \"0.15\",\n      embodiedLand: \"0.054\",\n      embodiedWater: \"1.152\",\n    },\n    {\n      eid: \"e9938\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.08\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9939\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"288\",\n      targetSimName: \"GHA\",\n      targetName: \"Ghana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"59.563\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9940\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"486\",\n      weight: \"1800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9941\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"340\",\n      targetSimName: \"HND\",\n      targetName: \"Honduras\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9942\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"2459.276\",\n      weight: \"7800\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9943\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.296\",\n      weight: \"45.9\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9944\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"688\",\n      targetSimName: \"SRB\",\n      targetName: \"Serbia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"86.553\",\n      weight: \"168\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9945\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"705\",\n      targetSimName: \"SVN\",\n      targetName: \"Slovenia\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"126\",\n      weight: \"240\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9946\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"25.625\",\n      weight: \"125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9947\",\n      source: \"740\",\n      sourceSimName: \"SUR\",\n      sourceRegion: \"Suriname\",\n      sourceName: \"South America\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"10.8\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9960\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"5.105\",\n      weight: \"26\",\n      embodiedLand: \"14.55\",\n      embodiedWater: \"11.804\",\n    },\n    {\n      eid: \"e9961\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"5.963\",\n      weight: \"1.128\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9962\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"634\",\n      targetSimName: \"QAT\",\n      targetName: \"Qatar\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.042\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9963\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.022\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e9964\",\n      source: \"748\",\n      sourceSimName: \"SWZ\",\n      sourceRegion: \"Swaziland\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"136.368\",\n      weight: \"352.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10072\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"321.247599\",\n      weight: \"594.892627\",\n      embodiedLand: \"157.689777\",\n      embodiedWater: \"218.325999\",\n    },\n    {\n      eid: \"e10073\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"258\",\n      targetSimName: \"PYF\",\n      targetName: \"French Polynesia\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"2.166\",\n      weight: \"0.461\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10074\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"7.097\",\n      weight: \"6.153\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10075\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.949\",\n      weight: \"1\",\n      embodiedLand: \"1.187\",\n      embodiedWater: \"5.89\",\n    },\n    {\n      eid: \"e10076\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"293.17\",\n      weight: \"713\",\n      embodiedLand: \"176.112\",\n      embodiedWater: \"7.843\",\n    },\n    {\n      eid: \"e10077\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.593\",\n      weight: \"0.373\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10078\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.542\",\n      weight: \"7.661\",\n      embodiedLand: \"2.193\",\n      embodiedWater: \"28.537\",\n    },\n    {\n      eid: \"e10079\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"7903.00956\",\n      weight: \"26948.6797\",\n      embodiedLand: \"6860.2467\",\n      embodiedWater: \"1077.94733\",\n    },\n    {\n      eid: \"e10080\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.537\",\n      weight: \"0.06\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10081\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10082\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"262\",\n      targetSimName: \"DJI\",\n      targetName: \"Djibouti\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"2650.321\",\n      weight: \"12000\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10083\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"328\",\n      targetSimName: \"GUY\",\n      targetName: \"Guyana\",\n      targetRegion: \"South America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10084\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"4.659\",\n      weight: \"2.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10085\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"800\",\n      targetSimName: \"UGA\",\n      targetName: \"Uganda\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"525.239248\",\n      weight: \"1150.87085\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10086\",\n      source: \"752\",\n      sourceSimName: \"SWE\",\n      sourceRegion: \"Sweden\",\n      sourceName: \"Europe\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"776.713\",\n      weight: \"2078\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10198\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.002\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10199\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"222\",\n      targetSimName: \"SLV\",\n      targetName: \"El Salvador\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.236\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10200\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"320\",\n      targetSimName: \"GTM\",\n      targetName: \"Guatemala\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10201\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.103\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10202\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"897.592\",\n      weight: \"1303.4\",\n      embodiedLand: \"445.321\",\n      embodiedWater: \"21745.926\",\n    },\n    {\n      eid: \"e10203\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.006\",\n      weight: \"0.004\",\n      embodiedLand: \"0.005\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10204\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.011\",\n      weight: \"0.011\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.152\",\n    },\n    {\n      eid: \"e10205\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"834\",\n      targetSimName: \"TZA\",\n      targetName: \"Tanzania\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4511.886\",\n      weight: \"18900\",\n      embodiedLand: \"3534.409\",\n      embodiedWater: \"62181\",\n    },\n    {\n      eid: \"e10206\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"51\",\n      targetSimName: \"ARM\",\n      targetName: \"Armenia\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10207\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"70.534\",\n      weight: \"150.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10208\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"6.519\",\n      weight: \"6.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10209\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"480\",\n      targetSimName: \"MUS\",\n      targetName: \"Mauritius\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.173\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10210\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.001\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10211\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.005\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10212\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"662\",\n      targetSimName: \"LCA\",\n      targetName: \"Saint Lucia\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.429\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10213\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"389.737\",\n      weight: \"477.087\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10214\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"788\",\n      targetSimName: \"TUN\",\n      targetName: \"Tunisia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.041\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10215\",\n      source: \"757\",\n      sourceSimName: \"CHE\",\n      sourceRegion: \"Switzerland\",\n      sourceName: \"Europe\",\n      target: \"858\",\n      targetSimName: \"URY\",\n      targetName: \"Uruguay\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.1431594\",\n      weight: \"0.04\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10245\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.064\",\n      weight: \"0.107\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10246\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"108\",\n      targetSimName: \"BDI\",\n      targetName: \"Burundi\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.032\",\n      weight: \"0.21\",\n      embodiedLand: \"0.001\",\n      embodiedWater: \"0.014\",\n    },\n    {\n      eid: \"e10247\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"120\",\n      targetSimName: \"CMR\",\n      targetName: \"Cameroon\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.084\",\n      weight: \"0.02\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10248\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"8862.493\",\n      weight: \"24861.286\",\n      embodiedLand: \"1247.997\",\n      embodiedWater: \"1864.596\",\n    },\n    {\n      eid: \"e10250\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"1.791\",\n      weight: \"1.44\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10251\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10252\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.045\",\n      weight: \"0.032\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10253\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.034\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10254\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"508\",\n      targetSimName: \"MOZ\",\n      targetName: \"Mozambique\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10255\",\n      source: \"760\",\n      sourceSimName: \"SYR\",\n      sourceRegion: \"Syria\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.895\",\n      weight: \"1.225\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10264\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"89.465\",\n      weight: \"296.215\",\n      embodiedLand: \"159.202\",\n      embodiedWater: \"74.646\",\n    },\n    {\n      eid: \"e10265\",\n      source: \"762\",\n      sourceSimName: \"TJK\",\n      sourceRegion: \"Tajikistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.061\",\n      weight: \"0.047\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10461\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"212\",\n      targetSimName: \"DMA\",\n      targetName: \"Dominica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"9.736\",\n      weight: \"25.006\",\n      embodiedLand: \"10.644\",\n      embodiedWater: \"105.225\",\n    },\n    {\n      eid: \"e10462\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"234\",\n      targetSimName: \"FRO\",\n      targetName: \"Faeroe Isds\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.136\",\n      weight: \"0.315\",\n      embodiedLand: \"0.178\",\n      embodiedWater: \"2.462\",\n    },\n    {\n      eid: \"e10464\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.015\",\n      weight: \"0.01\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.091\",\n    },\n    {\n      eid: \"e10465\",\n      source: \"764\",\n      sourceSimName: \"THA\",\n      sourceRegion: \"Thailand\",\n      sourceName: \"Southeast Asia\",\n      target: \"84\",\n      targetSimName: \"BLZ\",\n      targetName: \"Belize\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"17.484\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10495\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"156\",\n      targetSimName: \"CHN\",\n      targetName: \"China\",\n      targetRegion: \"East Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.112\",\n      weight: \"7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10496\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.283\",\n      weight: \"0.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10497\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"5\",\n      weight: \"18.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10498\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.60547527\",\n      weight: \"2.45939658\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10499\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"620\",\n      targetSimName: \"PRT\",\n      targetName: \"Portugal\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"17.2519049\",\n      weight: \"115.598246\",\n      embodiedLand: \"99.7718139\",\n      embodiedWater: \"58.6084014\",\n    },\n    {\n      eid: \"e10500\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.119\",\n      weight: \"0.026\",\n      embodiedLand: \"\",\n      embodiedWater: \"0.00827273\",\n    },\n    {\n      eid: \"e10501\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.19\",\n      weight: \"0.068\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10502\",\n      source: \"768\",\n      sourceSimName: \"TGO\",\n      sourceRegion: \"Togo\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.981\",\n      weight: \"1.027\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10509\",\n      source: \"772\",\n      sourceSimName: \"TKL\",\n      sourceRegion: \"Tokelau\",\n      sourceName: \"Oceania\",\n      target: \"52\",\n      targetSimName: \"BRB\",\n      targetName: \"Barbados\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10517\",\n      source: \"776\",\n      sourceSimName: \"TON\",\n      sourceRegion: \"Tonga\",\n      sourceName: \"Oceania\",\n      target: \"242\",\n      targetSimName: \"FJI\",\n      targetName: \"Fiji\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.113\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10554\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"44\",\n      targetSimName: \"BHS\",\n      targetName: \"Bahamas\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10555\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10556\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10557\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10558\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"208\",\n      targetSimName: \"DNK\",\n      targetName: \"Denmark\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10559\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"300\",\n      targetSimName: \"GRC\",\n      targetName: \"Greece\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10560\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.184\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10561\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10562\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"470\",\n      targetSimName: \"MLT\",\n      targetName: \"Malta\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10563\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10564\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"584\",\n      targetSimName: \"MHL\",\n      targetName: \"Marshall Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10565\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"591\",\n      targetSimName: \"PAN\",\n      targetName: \"Panama\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10566\",\n      source: \"780\",\n      sourceSimName: \"TTO\",\n      sourceRegion: \"Trinidad and Tobago\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.075\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10703\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"148\",\n      targetSimName: \"TCD\",\n      targetName: \"Chad\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10704\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10705\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"192\",\n      targetSimName: \"CUB\",\n      targetName: \"Cuba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10706\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"32\",\n      targetSimName: \"ARG\",\n      targetName: \"Argentina\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10707\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"6.831\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10708\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.074\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10709\",\n      source: \"784\",\n      sourceSimName: \"ARE\",\n      sourceRegion: \"United Arab Emirates\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"352\",\n      targetSimName: \"ISL\",\n      targetName: \"Iceland\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.154\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10778\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"40\",\n      targetSimName: \"AUT\",\n      targetName: \"Austria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7.737\",\n      weight: \"1.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10779\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"70\",\n      targetSimName: \"BIH\",\n      targetName: \"Bosnia Herzegovina\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"1.415\",\n      weight: \"1.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10780\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"152\",\n      targetSimName: \"CHL\",\n      targetName: \"Chile\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10781\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"196\",\n      targetSimName: \"CYP\",\n      targetName: \"Cyprus\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"8.223\",\n      weight: \"9.6\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10782\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"275\",\n      targetSimName: \"PSE\",\n      targetName: \"State of Palestine\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4.469\",\n      weight: \"2.876\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10783\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"348\",\n      targetSimName: \"HUN\",\n      targetName: \"Hungary\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"10.389\",\n      weight: \"16.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10784\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"368\",\n      targetSimName: \"IRQ\",\n      targetName: \"Iraq\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.163\",\n      weight: \"19.327\",\n      embodiedLand: \"4.211\",\n      embodiedWater: \"62.813\",\n    },\n    {\n      eid: \"e10785\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"17.492\",\n      weight: \"4\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10786\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"512\",\n      targetSimName: \"OMN\",\n      targetName: \"Oman\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"6.28513636\",\n      weight: \"4.23263329\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10787\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.026\",\n      weight: \"0.006\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10788\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"704\",\n      targetSimName: \"VNM\",\n      targetName: \"Vietnam\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.276\",\n      weight: \"0.72\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10789\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"729\",\n      targetSimName: \"SDN\",\n      targetName: \"Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"46.053\",\n      weight: \"107.5\",\n      embodiedLand: \"2.563\",\n      embodiedWater: \"48.805\",\n    },\n    {\n      eid: \"e10790\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"13.516\",\n      weight: \"20.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10791\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.274\",\n      weight: \"0.13\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10792\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"401.922618\",\n      weight: \"985.504812\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10793\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"0.042\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10794\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"33.233\",\n      weight: \"41.7\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10795\",\n      source: \"788\",\n      sourceSimName: \"TUN\",\n      sourceRegion: \"Tunisia\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"760\",\n      targetSimName: \"SYR\",\n      targetName: \"Syria\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"388.489\",\n      weight: \"300\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10976\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"16\",\n      targetSimName: \"ASM\",\n      targetName: \"American Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10977\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"388\",\n      targetSimName: \"JAM\",\n      targetName: \"Jamaica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"14.0119386\",\n      weight: \"26.25\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10978\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"55.708\",\n      weight: \"233.1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10979\",\n      source: \"792\",\n      sourceSimName: \"TUR\",\n      sourceRegion: \"Turkey\",\n      sourceName: \"Europe\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"1.198\",\n      weight: \"0.714\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10990\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"372.658\",\n      weight: \"1562.052\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e10991\",\n      source: \"795\",\n      sourceSimName: \"TKM\",\n      sourceRegion: \"Turkmenistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"124\",\n      targetSimName: \"CAN\",\n      targetName: \"Canada\",\n      targetRegion: \"North America\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.407\",\n      weight: \"2.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11003\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"616\",\n      targetSimName: \"POL\",\n      targetName: \"Poland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"8.403\",\n      weight: \"24.42\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11004\",\n      source: \"796\",\n      sourceSimName: \"TCA\",\n      sourceRegion: \"Turks and Caicos Isds\",\n      sourceName: \"Caribbean and Central America\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"8.714\",\n      weight: \"21.576\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11049\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"140\",\n      targetSimName: \"CAF\",\n      targetName: \"Central African Rep.\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11050\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"376\",\n      targetSimName: \"ISR\",\n      targetName: \"Israel\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"1.754\",\n      weight: \"16\",\n      embodiedLand: \"4.518\",\n      embodiedWater: \"69.808\",\n    },\n    {\n      eid: \"e11051\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"8.335\",\n      weight: \"22.5\",\n      embodiedLand: \"10.227\",\n      embodiedWater: \"9.923\",\n    },\n    {\n      eid: \"e11052\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"61.018\",\n      weight: \"200\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11053\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"372\",\n      targetSimName: \"IRL\",\n      targetName: \"Ireland\",\n      targetRegion: \"Europe\",\n      resource: \"Sorghum\",\n      year: \"2016\",\n      value: \"0.263\",\n      weight: \"0.139\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11054\",\n      source: \"800\",\n      sourceSimName: \"UGA\",\n      sourceRegion: \"Uganda\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.216\",\n      weight: \"0.086\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11209\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"24.476\",\n      weight: \"20.587\",\n      embodiedLand: \"11.055\",\n      embodiedWater: \"57.644\",\n    },\n    {\n      eid: \"e11210\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"184\",\n      targetSimName: \"COK\",\n      targetName: \"Cook Isds\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"0.043\",\n      weight: \"0.018\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11211\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"384\",\n      targetSimName: \"CIV\",\n      targetName: \"Cote d'Ivoire\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2451.982731\",\n      weight: \"16689\",\n      embodiedLand: \"2800.015\",\n      embodiedWater: \"84513.096\",\n    },\n    {\n      eid: \"e11212\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"462\",\n      targetSimName: \"MDV\",\n      targetName: \"Maldives\",\n      targetRegion: \"South Asia\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.03\",\n      weight: \"0.015\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11213\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"516\",\n      targetSimName: \"NAM\",\n      targetName: \"Namibia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"4890.88387\",\n      weight: \"20013.8008\",\n      embodiedLand: \"5001.53453\",\n      embodiedWater: \"32702.5506\",\n    },\n    {\n      eid: \"e11214\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"894\",\n      targetSimName: \"ZMB\",\n      targetName: \"Zambia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"7378.521\",\n      weight: \"27210.945\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11215\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.185\",\n      weight: \"0.056\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11216\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"72\",\n      targetSimName: \"BWA\",\n      targetName: \"Botswana\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1486.932\",\n      weight: \"4224\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11217\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"6.555\",\n      weight: \"22\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11218\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"442\",\n      targetSimName: \"LUX\",\n      targetName: \"Luxembourg\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.25906197\",\n      weight: \"0.045\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11219\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"524\",\n      targetSimName: \"NPL\",\n      targetName: \"Nepal\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"1683.6727\",\n      weight: \"6988.48925\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11220\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"548\",\n      targetSimName: \"VUT\",\n      targetName: \"Vanuatu\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11221\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Buckwheat\",\n      year: \"2016\",\n      value: \"0.01\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11222\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"728\",\n      targetSimName: \"SSD\",\n      targetName: \"South Sudan\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"40.801\",\n      weight: \"190.825\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11223\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"1725.40859\",\n      weight: \"3353.20792\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11224\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"862\",\n      targetSimName: \"VEN\",\n      targetName: \"Venezuela\",\n      targetRegion: \"South America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"29.675\",\n      weight: \"111.862\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11225\",\n      source: \"804\",\n      sourceSimName: \"UKR\",\n      sourceRegion: \"Ukraine\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"4.584\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11336\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11337\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"484\",\n      targetSimName: \"MEX\",\n      targetName: \"Mexico\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.099\",\n      weight: \"0.028\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11338\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"498\",\n      targetSimName: \"MDA\",\n      targetName: \"Moldova\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"20.243\",\n      weight: \"46.01\",\n      embodiedLand: \"10.002\",\n      embodiedWater: \"579.542\",\n    },\n    {\n      eid: \"e11339\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"608\",\n      targetSimName: \"PHL\",\n      targetName: \"Philippines\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"97.433\",\n      weight: \"247.995\",\n      embodiedLand: \"119.179\",\n      embodiedWater: \"1537.817\",\n    },\n    {\n      eid: \"e11340\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"768\",\n      targetSimName: \"TGO\",\n      targetName: \"Togo\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"41.094\",\n      weight: \"88.32\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11341\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"60\",\n      targetSimName: \"BMU\",\n      targetName: \"Bermuda\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.466\",\n      weight: \"0.125\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11342\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"116\",\n      targetSimName: \"KHM\",\n      targetName: \"Cambodia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Other cereals\",\n      year: \"2016\",\n      value: \"2.135\",\n      weight: \"4.095\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11343\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"132\",\n      targetSimName: \"CPV\",\n      targetName: \"Cabo Verde\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"0.369\",\n      weight: \"0.63\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11344\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"140.284\",\n      weight: \"337.113\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11345\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"188\",\n      targetSimName: \"CRI\",\n      targetName: \"Costa Rica\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"3.159\",\n      weight: \"0.854\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11346\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"360\",\n      targetSimName: \"IDN\",\n      targetName: \"Indonesia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"114.727\",\n      weight: \"85.648\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11347\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"364\",\n      targetSimName: \"IRN\",\n      targetName: \"Iran\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"23.162\",\n      weight: \"30.81\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11348\",\n      source: \"818\",\n      sourceSimName: \"EGY\",\n      sourceRegion: \"Egypt\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"398\",\n      targetSimName: \"KAZ\",\n      targetName: \"Kazakhstan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"2.07\",\n      weight: \"0.23\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11522\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"466\",\n      targetSimName: \"MLI\",\n      targetName: \"Mali\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"125.184\",\n      weight: \"45.6\",\n      embodiedLand: \"9.628\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11523\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"558\",\n      targetSimName: \"NIC\",\n      targetName: \"Nicaragua\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rye\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11524\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"706\",\n      targetSimName: \"SOM\",\n      targetName: \"Somalia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Barley\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11525\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"837\",\n      targetSimName: \"\",\n      targetName: \"Bunkers\",\n      targetRegion: \"Other\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.981\",\n      weight: \"0.98\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11526\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"854\",\n      targetSimName: \"BFA\",\n      targetName: \"Burkina Faso\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"3.556\",\n      weight: \"3.554\",\n      embodiedLand: \"0.914\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11527\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"882\",\n      targetSimName: \"WSM\",\n      targetName: \"Samoa\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"3.147\",\n      weight: \"0.138\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11528\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"214\",\n      targetSimName: \"DOM\",\n      targetName: \"Dominican Rep.\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"0.13\",\n      weight: \"0.241\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11529\",\n      source: \"826\",\n      sourceSimName: \"GBR\",\n      sourceRegion: \"United Kingdom\",\n      sourceName: \"Europe\",\n      target: \"585\",\n      targetSimName: \"PLW\",\n      targetName: \"Palau\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.015\",\n      weight: \"0.005\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11580\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"36\",\n      targetSimName: \"AUS\",\n      targetName: \"Australia\",\n      targetRegion: \"Oceania\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"2.405\",\n      weight: \"23.6\",\n      embodiedLand: \"54.414\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11581\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"203\",\n      targetSimName: \"CZE\",\n      targetName: \"Czech Rep.\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"113.617\",\n      weight: \"655.96\",\n      embodiedLand: \"650.261\",\n      embodiedWater: \"1034.449\",\n    },\n    {\n      eid: \"e11582\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"400\",\n      targetSimName: \"JOR\",\n      targetName: \"Jordan\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"4.097\",\n      weight: \"40\",\n      embodiedLand: \"27.575\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11583\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"566\",\n      targetSimName: \"NGA\",\n      targetName: \"Nigeria\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.054\",\n      weight: \"0.05\",\n      embodiedLand: \"0.004\",\n      embodiedWater: \"0.463\",\n    },\n    {\n      eid: \"e11584\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"682\",\n      targetSimName: \"SAU\",\n      targetName: \"Saudi Arabia\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.152\",\n      weight: \"40.012\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11585\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11586\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"887\",\n      targetSimName: \"YEM\",\n      targetName: \"Yemen\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"2.563\",\n      weight: \"14.38\",\n      embodiedLand: \"9.575\",\n      embodiedWater: \"9.707\",\n    },\n    {\n      eid: \"e11587\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"56\",\n      targetSimName: \"BEL\",\n      targetName: \"Belgium\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.496\",\n      weight: \"0.051\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11588\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"44.863\",\n      weight: \"500\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11589\",\n      source: \"834\",\n      sourceSimName: \"TZA\",\n      sourceRegion: \"Tanzania\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"251\",\n      targetSimName: \"FRA\",\n      targetName: \"France\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"4.13198458\",\n      weight: \"5.40716181\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11591\",\n      source: \"837\",\n      sourceSimName: \"\",\n      sourceRegion: \"Bunkers\",\n      sourceName: \"Other\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11597\",\n      source: \"838\",\n      sourceSimName: \"\",\n      sourceRegion: \"Free Zones\",\n      sourceName: \"Other\",\n      target: \"76\",\n      targetSimName: \"BRA\",\n      targetName: \"Brazil\",\n      targetRegion: \"South America\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"6.009\",\n      weight: \"0.2\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11798\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"654\",\n      targetSimName: \"SHN\",\n      targetName: \"Saint Helena\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"6.137\",\n      weight: \"1.878\",\n      embodiedLand: \"0.36\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11799\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"678\",\n      targetSimName: \"STP\",\n      targetName: \"Sao Tome and Principe\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Millet\",\n      year: \"2015\",\n      value: \"9.639\",\n      weight: \"19.875\",\n      embodiedLand: \"11.311\",\n      embodiedWater: \"1.848\",\n    },\n    {\n      eid: \"e11800\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"748\",\n      targetSimName: \"SWZ\",\n      targetName: \"Swaziland\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"14.64\",\n      weight: \"20.752\",\n      embodiedLand: \"2.723\",\n      embodiedWater: \"10.999\",\n    },\n    {\n      eid: \"e11801\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"860\",\n      targetSimName: \"UZB\",\n      targetName: \"Uzbekistan\",\n      targetRegion: \"Central and Northern Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"72.797\",\n      weight: \"82.805\",\n      embodiedLand: \"8.475\",\n      embodiedWater: \"106.818\",\n    },\n    {\n      eid: \"e11802\",\n      source: \"842\",\n      sourceSimName: \"USA\",\n      sourceRegion: \"United States\",\n      sourceName: \"North America\",\n      target: \"426\",\n      targetSimName: \"LSO\",\n      targetName: \"Lesotho\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"752.606\",\n      weight: \"2216.03\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11824\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"100\",\n      targetSimName: \"BGR\",\n      targetName: \"Bulgaria\",\n      targetRegion: \"Europe\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"19.785\",\n      weight: \"69\",\n      embodiedLand: \"0.615\",\n      embodiedWater: \"8.901\",\n    },\n    {\n      eid: \"e11825\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"381\",\n      targetSimName: \"ITA\",\n      targetName: \"Italy\",\n      targetRegion: \"Europe\",\n      resource: \"Other cereals\",\n      year: \"2015\",\n      value: \"43.6395248\",\n      weight: \"25.096\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11826\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"430\",\n      targetSimName: \"LBR\",\n      targetName: \"Liberia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"429.663\",\n      weight: \"250\",\n      embodiedLand: \"111.522\",\n      embodiedWater: \"2267.75\",\n    },\n    {\n      eid: \"e11827\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.004\",\n      weight: \"0.022\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11828\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"694\",\n      targetSimName: \"SLE\",\n      targetName: \"Sierra Leone\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"109.987\",\n      weight: \"30\",\n      embodiedLand: \"16.331\",\n      embodiedWater: \"27.69\",\n    },\n    {\n      eid: \"e11829\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"826\",\n      targetSimName: \"GBR\",\n      targetName: \"United Kingdom\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"3.487\",\n      weight: \"2.5\",\n      embodiedLand: \"1.554\",\n      embodiedWater: \"30.817\",\n    },\n    {\n      eid: \"e11830\",\n      source: \"854\",\n      sourceSimName: \"BFA\",\n      sourceRegion: \"Burkina Faso\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"231\",\n      targetSimName: \"ETH\",\n      targetName: \"Ethiopia\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.02\",\n      weight: \"0.025\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11951\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"50\",\n      targetSimName: \"BGD\",\n      targetName: \"Bangladesh\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"18298.88\",\n      weight: \"67086.608\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11952\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"450\",\n      targetSimName: \"MDG\",\n      targetName: \"Madagascar\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"12.537\",\n      weight: \"27.011\",\n      embodiedLand: \"11.171\",\n      embodiedWater: \"16.396\",\n    },\n    {\n      eid: \"e11953\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"764\",\n      targetSimName: \"THA\",\n      targetName: \"Thailand\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24935.4179\",\n      weight: \"104332.188\",\n      embodiedLand: \"47360.4095\",\n      embodiedWater: \"68441.9161\",\n    },\n    {\n      eid: \"e11954\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"104\",\n      targetSimName: \"MMR\",\n      targetName: \"Myanmar\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Wheat\",\n      year: \"2016\",\n      value: \"96.16\",\n      weight: \"524.11\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11955\",\n      source: \"858\",\n      sourceSimName: \"URY\",\n      sourceRegion: \"Uruguay\",\n      sourceName: \"South America\",\n      target: \"533\",\n      targetSimName: \"ABW\",\n      targetName: \"Aruba\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"13.297\",\n      weight: \"24\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11967\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"4\",\n      targetSimName: \"AFG\",\n      targetName: \"Afghanistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"24401.666\",\n      weight: \"75279.56\",\n      embodiedLand: \"28122.882\",\n      embodiedWater: \"36209.468\",\n    },\n    {\n      eid: \"e11968\",\n      source: \"860\",\n      sourceSimName: \"UZB\",\n      sourceRegion: \"Uzbekistan\",\n      sourceName: \"Central and Northern Asia\",\n      target: \"246\",\n      targetSimName: \"FIN\",\n      targetName: \"Finland\",\n      targetRegion: \"Europe\",\n      resource: \"Barley\",\n      year: \"2016\",\n      value: \"\",\n      weight: \"\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11996\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"458\",\n      targetSimName: \"MYS\",\n      targetName: \"Malaysia\",\n      targetRegion: \"Southeast Asia\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"174.23\",\n      weight: \"454.5\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11997\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"690\",\n      targetSimName: \"SYC\",\n      targetName: \"Seychelles\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"0.11\",\n      weight: \"0.01\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e11998\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"724\",\n      targetSimName: \"ESP\",\n      targetName: \"Spain\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"6.294\",\n      weight: \"4.58\",\n      embodiedLand: \"1.249\",\n      embodiedWater: \"1.53\",\n    },\n    {\n      eid: \"e11999\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"780\",\n      targetSimName: \"TTO\",\n      targetName: \"Trinidad and Tobago\",\n      targetRegion: \"Caribbean and Central America\",\n      resource: \"Oats\",\n      year: \"2015\",\n      value: \"0.025\",\n      weight: \"0.008\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12000\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Rice\",\n      year: \"2015\",\n      value: \"11.889\",\n      weight: \"21.609\",\n      embodiedLand: \"5.737\",\n      embodiedWater: \"157.097\",\n    },\n    {\n      eid: \"e12001\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"144\",\n      targetSimName: \"LKA\",\n      targetName: \"Sri Lanka\",\n      targetRegion: \"South Asia\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"1.367\",\n      weight: \"1.583\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12002\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"499\",\n      targetSimName: \"MNE\",\n      targetName: \"Montenegro\",\n      targetRegion: \"Europe\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"0.467\",\n      weight: \"0.75\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12003\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"752\",\n      targetSimName: \"SWE\",\n      targetName: \"Sweden\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.117\",\n      weight: \"0.116\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12004\",\n      source: \"862\",\n      sourceSimName: \"VEN\",\n      sourceRegion: \"Venezuela\",\n      sourceName: \"South America\",\n      target: \"784\",\n      targetSimName: \"ARE\",\n      targetName: \"United Arab Emirates\",\n      targetRegion: \"Middle East and North Africa\",\n      resource: \"Rice\",\n      year: \"2016\",\n      value: \"22.327\",\n      weight: \"24.749\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12012\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"554\",\n      targetSimName: \"NZL\",\n      targetName: \"New Zealand\",\n      targetRegion: \"Oceania\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"0.455\",\n      weight: \"0.05\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12013\",\n      source: \"882\",\n      sourceSimName: \"WSM\",\n      sourceRegion: \"Samoa\",\n      sourceName: \"Oceania\",\n      target: \"842\",\n      targetSimName: \"USA\",\n      targetName: \"United States\",\n      targetRegion: \"North America\",\n      resource: \"Wheat\",\n      year: \"2015\",\n      value: \"0.001\",\n      weight: \"0.004\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12043\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"792\",\n      targetSimName: \"TUR\",\n      targetName: \"Turkey\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2015\",\n      value: \"30.578\",\n      weight: \"66\",\n      embodiedLand: \"38.092\",\n      embodiedWater: \"4450.248\",\n    },\n    {\n      eid: \"e12044\",\n      source: \"887\",\n      sourceSimName: \"YEM\",\n      sourceRegion: \"Yemen\",\n      sourceName: \"Middle East and North Africa\",\n      target: \"528\",\n      targetSimName: \"NLD\",\n      targetName: \"Netherlands\",\n      targetRegion: \"Europe\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.003\",\n      weight: \"0.001\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12093\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"586\",\n      targetSimName: \"PAK\",\n      targetName: \"Pakistan\",\n      targetRegion: \"South Asia\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"0.102\",\n      weight: \"1\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n    {\n      eid: \"e12094\",\n      source: \"894\",\n      sourceSimName: \"ZMB\",\n      sourceRegion: \"Zambia\",\n      sourceName: \"Sub-Saharan Africa\",\n      target: \"686\",\n      targetSimName: \"SEN\",\n      targetName: \"Senegal\",\n      targetRegion: \"Sub-Saharan Africa\",\n      resource: \"Maize\",\n      year: \"2016\",\n      value: \"82.825\",\n      weight: \"18.152\",\n      embodiedLand: \"\",\n      embodiedWater: \"\",\n    },\n  ],\n});\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/fruchterman-worker/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport getData from \"./data\";\nimport fruchtermanLayout from \"@antv/f6/dist/extends/layout/fruchtermanLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"fruchterman\", fruchtermanLayout);\nconst data = getData();\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"fruchterman\",\n    maxIteration: 8000,\n    gravity: 1,\n    workerEnabled: true,\n  },\n  animate: true,\n  defaultNode: {\n    size: 10,\n  },\n  defaultEdge: {\n    size: 1,\n  },\n});\ngraph.on(\"afterlayout\", () => {});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/interact-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst data2_m = {\n  nodes: [\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"1001\",\n      label: \"1001\",\n    },\n    {\n      id: \"1002\",\n      label: \"1002\",\n    },\n    {\n      id: \"1003\",\n      label: \"1003\",\n    },\n    {\n      id: \"1004\",\n      label: \"1004\",\n    },\n    {\n      id: \"1005\",\n      label: \"1005\",\n    },\n    {\n      id: \"1006\",\n      label: \"1006\",\n    },\n    {\n      id: \"1007\",\n      label: \"1007\",\n    },\n    {\n      id: \"1008\",\n      label: \"1008\",\n    },\n    {\n      id: \"1009\",\n      label: \"1009\",\n    },\n    {\n      id: \"1010\",\n      label: \"1010\",\n    },\n    {\n      id: \"1011\",\n      label: \"1011\",\n    },\n    {\n      id: \"1012\",\n      label: \"1012\",\n    },\n    {\n      id: \"1013\",\n      label: \"1013\",\n    },\n    {\n      id: \"1014\",\n      label: \"1014\",\n    },\n    {\n      id: \"1015\",\n      label: \"1015\",\n    },\n    {\n      id: \"1016\",\n      label: \"1016\",\n    },\n    {\n      id: \"1017\",\n      label: \"1017\",\n    },\n    {\n      id: \"1018\",\n      label: \"1018\",\n    },\n    {\n      id: \"1019\",\n      label: \"1019\",\n    },\n    {\n      id: \"1020\",\n      label: \"1020\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"41\",\n      label: \"41\",\n    },\n  ],\n  edges: [\n    {\n      source: \"2\",\n      target: \"1001\",\n    },\n    {\n      source: \"2\",\n      target: \"1002\",\n    },\n    {\n      source: \"2\",\n      target: \"1003\",\n    },\n    {\n      source: \"2\",\n      target: \"1004\",\n    },\n    {\n      source: \"2\",\n      target: \"1005\",\n    },\n    {\n      source: \"1001\",\n      target: \"1006\",\n    },\n    {\n      source: \"1001\",\n      target: \"1007\",\n    },\n    {\n      source: \"1001\",\n      target: \"1008\",\n    },\n    {\n      source: \"1001\",\n      target: \"1009\",\n    },\n    {\n      source: \"1001\",\n      target: \"1010\",\n    },\n    {\n      source: \"1002\",\n      target: \"1006\",\n    },\n    {\n      source: \"1002\",\n      target: \"1007\",\n    },\n    {\n      source: \"1002\",\n      target: \"1008\",\n    },\n    {\n      source: \"1002\",\n      target: \"1009\",\n    },\n    {\n      source: \"1002\",\n      target: \"1010\",\n    },\n    {\n      source: \"1003\",\n      target: \"1006\",\n    },\n    {\n      source: \"1003\",\n      target: \"1007\",\n    },\n    {\n      source: \"1003\",\n      target: \"1008\",\n    },\n    {\n      source: \"1003\",\n      target: \"1009\",\n    },\n    {\n      source: \"1003\",\n      target: \"1010\",\n    },\n    {\n      source: \"1010\",\n      target: \"1011\",\n    },\n    {\n      source: \"1010\",\n      target: \"1012\",\n    },\n    {\n      source: \"1010\",\n      target: \"1013\",\n    },\n    {\n      source: \"1010\",\n      target: \"1014\",\n    },\n    {\n      source: \"1010\",\n      target: \"1015\",\n    },\n    {\n      source: \"1010\",\n      target: \"1016\",\n    },\n    {\n      source: \"1010\",\n      target: \"1017\",\n    },\n    {\n      source: \"1008\",\n      target: \"1014\",\n    },\n    {\n      source: \"1008\",\n      target: \"1015\",\n    },\n    {\n      source: \"1008\",\n      target: \"1016\",\n    },\n    {\n      source: \"1008\",\n      target: \"1017\",\n    },\n    {\n      source: \"1017\",\n      target: \"1018\",\n    },\n    {\n      source: \"1017\",\n      target: \"1019\",\n    },\n    {\n      source: \"1016\",\n      target: \"1020\",\n    },\n    {\n      source: \"1016\",\n      target: \"1020\",\n    },\n    {\n      source: \"5\",\n      target: \"1020\",\n    },\n    {\n      source: \"41\",\n      target: \"1020\",\n    },\n    {\n      source: \"5\",\n      target: \"1009\",\n    },\n    {\n      source: \"41\",\n      target: \"1009\",\n    },\n  ],\n};\n\nexport { data, data2_m };\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/interact-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { data, data2_m } from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radial);\nconst focusNode = data.nodes[22];\nfocusNode.style = {\n  stroke: \"#00419F\",\n  fill: \"#729FFC\",\n  lineWidth: 2,\n};\ndata.nodes[2].style = {\n  stroke: \"#00419F\",\n  fill: \"#729FFC\",\n  lineWidth: 2,\n};\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"radial\",\n    maxIteration: 200,\n    focusNode,\n    unitRadius: this.mainUnitRadius,\n    linkDistance: 100,\n    preventOverlap: true,\n    nodeSize: 20,\n  },\n  animate: true,\n  modes: {\n    default: [\"drag-node\", \"click-select\", \"click-add-node\", \"drag-canvas\"],\n  },\n  defaultNode: {\n    size: 20,\n  },\n});\ngraph.on(\"node:tap\", (ev) => {\n  const itemModel = ev.item.getModel();\n  const nodes = graph.getNodes();\n  const edges = graph.getEdges();\n  let newData;\n  if (itemModel.id === \"2\") newData = data2_m;\n  else return;\n  const newNodeModels = newData.nodes;\n  const newEdgeModels = [];\n  newData.edges.forEach(function (e) {\n    let exist = false;\n    newEdgeModels.forEach(function (ne) {\n      if (ne.source === e.source && ne.target === e.target) exist = true;\n    });\n\n    if (!exist) {\n      newEdgeModels.push(e);\n    }\n  });\n  const allNodeModels = [];\n  const allEdgeModels = [];\n  const nodeMap = new Map();\n  nodes.forEach((n) => {\n    const nModel = n.getModel();\n    nodeMap.set(nModel.id, n);\n  });\n  newNodeModels.forEach((nodeModel) => {\n    if (nodeMap.get(nodeModel.id) === undefined) {\n      nodeModel.x = itemModel.x;\n      nodeModel.y = itemModel.y;\n      graph.addItem(\"node\", nodeModel);\n    }\n  });\n  const edgeMap = new Map();\n  edges.forEach(function (e, i) {\n    const eModel = e.getModel();\n    edgeMap.set(`${eModel.source},${eModel.target}`, i);\n  });\n  const oldEdgeNum = edges.length;\n  newEdgeModels.forEach(function (em, i) {\n    const exist = edgeMap.get(`${em.source},${em.target}`);\n\n    if (exist === undefined) {\n      graph.addItem(\"edge\", em);\n      edgeMap.set(`${em.source},${em.target}`, oldEdgeNum + i);\n    }\n  });\n  edges.forEach((e) => {\n    allEdgeModels.push(e.getModel());\n  });\n  nodes.forEach((n) => {\n    allNodeModels.push(n.getModel());\n  });\n  const maxDegree = 4;\n  const oMaxDegree = 3;\n  const unitRadius = 40;\n  const vx = itemModel.x - focusNode.x;\n  const vy = itemModel.y - focusNode.y;\n  const vlength = Math.sqrt(vx * vx + vy * vy);\n  const ideallength = unitRadius * maxDegree + this.mainUnitRadius * oMaxDegree;\n  itemModel.x = (ideallength * vx) / vlength + focusNode.x;\n  itemModel.y = (ideallength * vy) / vlength + focusNode.y;\n  const Radial = F6.layout.radial;\n  const subRadialLayout = new Radial({\n    center: [itemModel.x, itemModel.y],\n    maxIteration: 200,\n    focusNode: \"2\",\n    unitRadius,\n    linkDistance: 180,\n    preventOverlap: true,\n  });\n  subRadialLayout.init({\n    nodes: newNodeModels,\n    edges: newEdgeModels,\n  });\n  subRadialLayout.execute();\n  graph.positionsAnimate();\n  graph.data({\n    nodes: allNodeModels,\n    edges: allEdgeModels,\n  });\n});\ngraph.data({\n  nodes: data.nodes,\n  edges: data.edges.map((edge, i) => {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/layout-timing/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/layout-timing/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 40,\n  layout: {\n    type: \"force\",\n    preventOverlap: true,\n    nodeSize: 20,\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n});\ngraph.on(\"beforelayout\", function () {\n  currentPage.setData({\n    message:\n      \"Doing force-directed layout... the text will be changed after the layout being done.\",\n  });\n});\ngraph.on(\"afterlayout\", function () {\n  currentPage.setData({\n    message: \"Done!\",\n  });\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/layout-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/layout-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nimport concentric from \"@antv/f6/dist/extends/layout/concentricLayout\";\nimport mds from \"@antv/f6/dist/extends/layout/mdsLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", circular);\nF6.registerLayout(\"grid\", grid);\nF6.registerLayout(\"force\", force);\nF6.registerLayout(\"radial\", radial);\nF6.registerLayout(\"concentric\", concentric);\nF6.registerLayout(\"mds\", mds);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"circular\",\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n  animate: true,\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nsetTimeout(() => {\n  graph.updateLayout({\n    type: \"circular\",\n    radius: 200,\n  });\n}, 3000);\nsetTimeout(() => {\n  graph.updateLayout({\n    type: \"grid\",\n  });\n}, 6000);\nsetTimeout(() => {\n  graph.updateLayout({\n    type: \"force\",\n    preventOverlap: true,\n    nodeSize: 20,\n  });\n}, 9000);\nsetTimeout(() => {\n  graph.updateLayout({\n    type: \"radial\",\n    preventOverlap: true,\n    nodeSize: 15,\n  });\n}, 12000);\nsetTimeout(() => {\n  graph.updateLayout({\n    type: \"concentric\",\n    minNodeSpacing: 30,\n  });\n}, 15000);\nsetTimeout(() => {\n  graph.updateLayout({\n    type: \"mds\",\n    linkDistance: 100,\n  });\n}, 18000);\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/prevent-overlap-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst { nodes } = data;\nnodes.forEach((node) => {\n  node.size = Math.random() * 20 + 10;\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/prevent-overlap-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radial);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    unitRadius: 50,\n    preventOverlap: true,\n    maxPreventOverlapIteration: 100,\n  },\n  animate: true,\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/prevent-overlap-unstrict-radial/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/prevent-overlap-unstrict-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radial);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    unitRadius: 70,\n    preventOverlap: true,\n    strictRadial: false,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/radial-configuration-translate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/radial-configuration-translate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radial);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    unitRadius: 50,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\nconst me = this;\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nlayoutConfigTranslation();\nsetInterval(function () {\n  layoutConfigTranslation();\n}, 7000);\n\nfunction layoutConfigTranslation() {\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: true\",\n    });\n    me.graph.updateLayout({\n      preventOverlap: true,\n      nodeSize: 20,\n    });\n  }, 1000);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Radial layout, focusNode =  = 0, unitRadius = 80, preventOverlap: true\",\n    });\n    me.graph.updateLayout({\n      unitRadius: 80,\n    });\n  }, 2500);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Radial layout, focusNode =  = 10, unitRadius = 80, preventOverlap: true\",\n    });\n    me.graph.updateLayout({\n      focusNode: \"10\",\n    });\n  }, 4000);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Radial layout, focusNode =  = 20, unitRadius = 80, preventOverlap: true\",\n    });\n    me.graph.updateLayout({\n      focusNode: \"20\",\n    });\n  }, 5500);\n  setTimeout(function () {\n    me.setData({\n      description:\n        \"Radial layout, focusNode =  = 0, unitRadius = 50, preventOverlap: false\",\n    });\n    me.graph.updateLayout({\n      focusNode: \"0\",\n      preventOverlap: false,\n      unitRadius: 50,\n    });\n  }, 5500);\n}\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/sort-radial/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"1\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"2\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"3\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"4\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"5\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"6\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"7\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"8\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"9\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"10\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"11\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"12\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"13\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"14\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"15\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"16\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"17\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"18\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"19\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"20\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"21\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"22\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"23\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"24\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"25\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n    {\n      id: \"26\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"27\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"28\",\n      sortAttr: 3,\n      sortAttr2: \"d\",\n    },\n    {\n      id: \"29\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"30\",\n      sortAttr: 2,\n      sortAttr2: \"c\",\n    },\n    {\n      id: \"31\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"32\",\n      sortAttr: 1,\n      sortAttr2: \"b\",\n    },\n    {\n      id: \"33\",\n      sortAttr: 0,\n      sortAttr2: \"a\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nconst colors = [\"steelblue\", \"green\", \"pink\", \"grey\"];\nconst colorsObj = { a: \"steelblue\", b: \"green\", c: \"pink\", d: \"grey\" };\ndata.nodes.forEach((node) => {\n  node.size = 20;\n  node.style = {\n    lineWidth: 4,\n    fill: \"#fff\",\n    stroke: colors[node.sortAttr2] || colorsObj[node.sortAttr2],\n  };\n});\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/sort-radial/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport radial from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radial);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 30,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    unitRadius: 70,\n    maxIteration: 1000,\n    linkDistance: 10,\n    preventOverlap: true,\n    nodeSize: 30,\n    sortBy: \"sortAttr2\",\n    sortStrength: 50,\n  },\n  animate: true,\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/spiral-circular/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/spiral-circular/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport circular from \"@antv/f6/dist/extends/layout/circularLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", circular);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"circular\",\n    startRadius: 10,\n    endRadius: 300,\n  },\n  animate: true,\n  defaultNode: {\n    size: 20,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: {\n        path: \"M 0,0 L 8,4 L 8,-4 Z\",\n        fill: \"#e2e2e2\",\n      },\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/subgraph-layout/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/subgraph-layout/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport Force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst { nodes } = data;\nnodes.forEach(function (node, i) {\n  if (i <= 16 && i !== 12) {\n    if (!node.style) {\n      node.style = {\n        fill: \"#F6C3B7\",\n        stroke: \"#E8684A\",\n      };\n    } else {\n      node.style.fill = \"lightsteelblue\";\n    }\n  }\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 40,\n  modes: {\n    default: [\"drag-node\"],\n  },\n  defaultNode: {\n    size: 20,\n    style: {\n      fill: \"#C6E5FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#e2e2e2\",\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nsetTimeout(() => {\n  const { edges } = data;\n  const newNodes = [];\n  const newEdges = [];\n  const newNodeMap = new Map();\n  nodes[0].fx = nodes[0].x;\n  nodes[0].fy = nodes[0].y;\n  nodes.forEach(function (node, i) {\n    if (i <= 16 && i !== 12) {\n      newNodes.push(node);\n      newNodeMap.set(node.id, i);\n    }\n  });\n  edges.forEach(function (edge) {\n    const sourceId = edge.source;\n    const targetId = edge.target;\n\n    if (\n      newNodeMap.get(sourceId) !== undefined &&\n      newNodeMap.get(targetId) !== undefined\n    ) {\n      newEdges.push(edge);\n    }\n  });\n  const subForceLayout = new Force({\n    center: [nodes[0].x, nodes[0].y],\n    linkDistance: 70,\n    preventOverlap: true,\n    nodeSize: 20,\n    tick: () => {\n      graph.refreshPositions();\n    },\n  });\n  subForceLayout.init({\n    nodes: newNodes,\n    edges: newEdges,\n  });\n  subForceLayout.execute();\n}, 1000);\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/sublayout-pipes/data.js",
    "content": "const data = { nodes: [], edges: [] };\nfor (let i = 0; i < 32; i++) {\n  data.nodes.push({\n    id: `${i}`,\n    label: i < 17 ? `employee-${i}` : `company-${i - 17}`,\n    dataType: i < 17 ? \"employee\" : \"company\",\n    style:\n      i < 17\n        ? { stroke: \"#5D7092\", fill: \"#5D7092\", fillOpacity: 0.5 }\n        : { stroke: \"#5B8FF9\", fill: \"#5B8FF9\", fillOpacity: 0.5 },\n  });\n}\ndata.edges = [\n  { source: \"0\", target: \"1\" },\n  { source: \"0\", target: \"2\" },\n  { source: \"0\", target: \"3\" },\n  { source: \"0\", target: \"4\" },\n  { source: \"0\", target: \"5\" },\n  { source: \"0\", target: \"6\" },\n  { source: \"1\", target: \"2\" },\n  { source: \"1\", target: \"3\" },\n  { source: \"1\", target: \"4\" },\n  { source: \"1\", target: \"5\" },\n  { source: \"1\", target: \"6\" },\n  { source: \"2\", target: \"3\" },\n  { source: \"2\", target: \"4\" },\n  { source: \"2\", target: \"5\" },\n  { source: \"2\", target: \"6\" },\n\n  { source: \"7\", target: \"8\" },\n  { source: \"8\", target: \"9\" },\n  { source: \"9\", target: \"10\" },\n\n  { source: \"11\", target: \"12\" },\n  { source: \"12\", target: \"13\" },\n  { source: \"13\", target: \"14\" },\n  { source: \"14\", target: \"15\" },\n  { source: \"15\", target: \"16\" },\n  { source: \"11\", target: \"14\" },\n\n  { source: \"31\", target: \"11\" },\n  { source: \"24\", target: \"4\" },\n  { source: \"23\", target: \"7\" },\n];\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"employee\",\n      label: \"employee\",\n      style: { stroke: \"#5D7092\", fill: \"#5D7092\" },\n    },\n    {\n      id: \"company\",\n      label: \"company\",\n      style: { stroke: \"#5B8FF9\", fill: \"#5B8FF9\" },\n    },\n  ],\n  edges: [],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/site/examples/demo/general-graph/sublayout-pipes/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { data, legendData } from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst legend = new F6.Legend({\n  data: legendData,\n  align: \"center\",\n  layout: \"horizontal\",\n  position: \"bottom-left\",\n  vertiSep: 12,\n  horiSep: 24,\n  offsetY: -24,\n  padding: [4, 16, 8, 16],\n  containerStyle: {\n    fill: \"#ccc\",\n    lineWidth: 1,\n  },\n  title: \"Legend\",\n  titleConfig: {\n    position: \"left\",\n    offsetX: 0,\n    offsetY: 12,\n  },\n  filter: {\n    enable: true,\n    multiple: true,\n    trigger: \"click\",\n    graphActiveState: \"activeByLegend\",\n    graphInactiveState: \"inactiveByLegend\",\n    filterFunctions: {\n      a: (d) => {\n        if (d.cluster === \"a\") return true;\n        return false;\n      },\n      b: (d) => {\n        if (d.cluster === \"b\") return true;\n        return false;\n      },\n      c: (d) => {\n        if (d.cluster === \"c\") return true;\n        return false;\n      },\n      d: (d) => {\n        if (d.cluster === \"d\") return true;\n        return false;\n      },\n    },\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 40,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  plugins: [legend],\n  animate: true,\n  nodeStateStyles: {\n    activeByLegend: {\n      lineWidth: 5,\n      strokeOpacity: 0.5,\n      stroke: \"#f00\",\n    },\n    inactiveByLegend: {\n      opacity: 0.5,\n    },\n  },\n  layout: {\n    pipes: [\n      {\n        type: \"circular\",\n        nodesFilter: (node) => +node.id <= 6,\n        center: [(width / 5) * 4 - 30, height / 2],\n        radius: width / 10,\n      },\n      {\n        type: \"circular\",\n        nodesFilter: (node) => +node.id >= 7 && +node.id <= 10,\n        center: [width / 20 + 30, (height / 3) * 2],\n        radius: width / 20,\n      },\n      {\n        type: \"circular\",\n        nodesFilter: (node) => +node.id >= 11 && +node.id <= 16,\n        center: [width / 20 + 30, height / 3],\n        radius: width / 20,\n      },\n      {\n        type: \"grid\",\n        nodesFilter: (node) => +node.id > 16,\n        begin: [width / 10 + 50, 20],\n        width: (width / 5) * 3 - 100,\n        height: height - 40,\n      },\n    ],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/activate-relations/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/activate-relations/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst tooltip = new F6.Tooltip({\n  offsetX: 10,\n  offsetY: 10,\n  fixToNode: [1, 0.5],\n  itemTypes: [\"node\", \"edge\"],\n  getContent: (e) => {\n    const outDiv = document.createElement(\"div\");\n    outDiv.style.width = \"fit-content\";\n    outDiv.style.height = \"fit-content\";\n    const model = e.item.getModel();\n\n    if (e.item.getType() === \"node\") {\n      outDiv.innerHTML = `${model.name}`;\n    } else {\n      const source = e.item.getSource();\n      const target = e.item.getTarget();\n      outDiv.innerHTML = `来源：${source.getModel().name}<br/>去向：${\n        target.getModel().name\n      }`;\n    }\n\n    return outDiv;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 50,\n  layout: {\n    type: \"force\",\n    edgeStrength: 0.7,\n  },\n  plugins: [tooltip],\n  modes: {\n    default: [\"drag-canvas\", \"activate-relations\"],\n  },\n  defaultNode: {\n    size: [10, 10],\n  },\n  defaultEdge: {\n    style: {\n      stroke: \"#aaa\",\n      lineAppendWidth: 2,\n      opacity: 0.3,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/add-child/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/add-child/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  modes: {\n    default: [\"collapse-expand\", \"drag-canvas\"],\n  },\n  fitView: true,\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    defalutPosition: [],\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 50;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n  },\n});\ngraph.node(function (node) {\n  return {\n    size: 16,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    label: node.id,\n    labelCfg: {\n      position: node.children && node.children.length > 0 ? \"left\" : \"right\",\n    },\n  };\n});\ngraph.edge(function () {\n  return {\n    type: \"cubic-horizontal\",\n    color: \"#A3B1BF\",\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nlet count = 0;\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  const nodeId = item.get(\"id\");\n  const model = item.getModel();\n  const { children } = model;\n\n  if (!children || children.length === 0) {\n    const childData = {\n      id: `child-data-${count}`,\n      type: \"rect\",\n      children: [\n        {\n          id: `x-${count}`,\n        },\n        {\n          id: `y-${count}`,\n        },\n      ],\n    };\n    graph.addChild(childData, nodeId);\n    count++;\n  }\n});\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/canvas-two-fingers/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"Myriel\",\n    },\n    {\n      id: \"Napoleon\",\n    },\n    {\n      id: \"Mlle.Baptistine\",\n    },\n    {\n      id: \"Mme.Magloire\",\n    },\n    {\n      id: \"CountessdeLo\",\n    },\n    {\n      id: \"Geborand\",\n    },\n    {\n      id: \"Champtercier\",\n    },\n    {\n      id: \"Cravatte\",\n    },\n    {\n      id: \"Count\",\n    },\n    {\n      id: \"OldMan\",\n    },\n    {\n      id: \"Labarre\",\n    },\n    {\n      id: \"Valjean\",\n    },\n    {\n      id: \"Marguerite\",\n    },\n    {\n      id: \"Mme.deR\",\n    },\n    {\n      id: \"Isabeau\",\n    },\n    {\n      id: \"Gervais\",\n    },\n    {\n      id: \"Tholomyes\",\n    },\n    {\n      id: \"Listolier\",\n    },\n    {\n      id: \"Fameuil\",\n    },\n    {\n      id: \"Blacheville\",\n    },\n    {\n      id: \"Favourite\",\n    },\n    {\n      id: \"Dahlia\",\n    },\n    {\n      id: \"Zephine\",\n    },\n    {\n      id: \"Fantine\",\n    },\n    {\n      id: \"Mme.Thenardier\",\n    },\n    {\n      id: \"Thenardier\",\n    },\n    {\n      id: \"Cosette\",\n    },\n    {\n      id: \"Javert\",\n    },\n    {\n      id: \"Fauchelevent\",\n    },\n    {\n      id: \"Bamatabois\",\n    },\n    {\n      id: \"Perpetue\",\n    },\n    {\n      id: \"Simplice\",\n    },\n    {\n      id: \"Scaufflaire\",\n    },\n    {\n      id: \"Woman1\",\n    },\n    {\n      id: \"Judge\",\n    },\n    {\n      id: \"Champmathieu\",\n    },\n    {\n      id: \"Brevet\",\n    },\n    {\n      id: \"Chenildieu\",\n    },\n    {\n      id: \"Cochepaille\",\n    },\n    {\n      id: \"Pontmercy\",\n    },\n    {\n      id: \"Boulatruelle\",\n    },\n    {\n      id: \"Eponine\",\n    },\n    {\n      id: \"Anzelma\",\n    },\n    {\n      id: \"Woman2\",\n    },\n    {\n      id: \"MotherInnocent\",\n    },\n    {\n      id: \"Gribier\",\n    },\n    {\n      id: \"Jondrette\",\n    },\n    {\n      id: \"Mme.Burgon\",\n    },\n    {\n      id: \"Gavroche\",\n    },\n    {\n      id: \"Gillenormand\",\n    },\n    {\n      id: \"Magnon\",\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n    },\n    {\n      id: \"Mme.Pontmercy\",\n    },\n    {\n      id: \"Mlle.Vaubois\",\n    },\n    {\n      id: \"Lt.Gillenormand\",\n    },\n    {\n      id: \"Marius\",\n    },\n    {\n      id: \"BaronessT\",\n    },\n    {\n      id: \"Mabeuf\",\n    },\n    {\n      id: \"Enjolras\",\n    },\n    {\n      id: \"Combeferre\",\n    },\n    {\n      id: \"Prouvaire\",\n    },\n    {\n      id: \"Feuilly\",\n    },\n    {\n      id: \"Courfeyrac\",\n    },\n    {\n      id: \"Bahorel\",\n    },\n    {\n      id: \"Bossuet\",\n    },\n    {\n      id: \"Joly\",\n    },\n    {\n      id: \"Grantaire\",\n    },\n    {\n      id: \"MotherPlutarch\",\n    },\n    {\n      id: \"Gueulemer\",\n    },\n    {\n      id: \"Babet\",\n    },\n    {\n      id: \"Claquesous\",\n    },\n    {\n      id: \"Montparnasse\",\n    },\n    {\n      id: \"Toussaint\",\n    },\n    {\n      id: \"Child1\",\n    },\n    {\n      id: \"Child2\",\n    },\n    {\n      id: \"Brujon\",\n    },\n    {\n      id: \"Mme.Hucheloup\",\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/canvas-two-fingers/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerBehavior(\"double-finger-drag-canvas\", {\n  getEvents: function getEvents() {\n    return {\n      \"canvas:drag\": \"onWheel\",\n    };\n  },\n  onWheel: function onWheel(ev) {\n    if (ev.ctrlKey) {\n      const canvas = graph.get(\"canvas\");\n      const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n      let ratio = graph.getZoom();\n\n      if (ev.wheelDelta > 0) {\n        ratio += ratio * 0.05;\n      } else {\n        ratio -= ratio * 0.05;\n      }\n\n      graph.zoomTo(ratio, {\n        x: point.x,\n        y: point.y,\n      });\n    } else {\n      const x = ev.deltaX || ev.movementX;\n      const y = ev.deltaY || ev.movementY;\n      graph.translate(-x, -y);\n    }\n\n    ev.preventDefault();\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  modes: {\n    default: [\"double-finger-drag-canvas\"],\n  },\n  layout: {\n    type: \"force\",\n  },\n});\ngraph.get(\"canvas\").set(\"localRefresh\", false);\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/change-data/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/change-data/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  modes: {\n    default: [\"collapse-expand\", \"drag-canvas\"],\n  },\n  fitView: true,\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    defalutPosition: [],\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 50;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n  },\n});\ngraph.node(function (node) {\n  return {\n    size: 16,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    label: node.id,\n    labelCfg: {\n      position: node.children && node.children.length > 0 ? \"left\" : \"right\",\n    },\n  };\n});\nlet i = 0;\ngraph.edge(function () {\n  i++;\n  return {\n    type: \"cubic-horizontal\",\n    color: \"#A3B1BF\",\n    label: i,\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\nlet count = 0;\ngraph.on(\"node:tap\", function (evt) {\n  const { item } = evt;\n  const nodeId = item.get(\"id\");\n  const model = item.getModel();\n  const { children } = model;\n\n  if (!children || children.length === 0) {\n    const childData = [\n      {\n        id: `child-data-${count}`,\n        type: \"rect\",\n        children: [\n          {\n            id: `x-${count}`,\n          },\n          {\n            id: `y-${count}`,\n          },\n        ],\n      },\n      {\n        id: `child-data1-${count}`,\n        children: [\n          {\n            id: `x1-${count}`,\n          },\n          {\n            id: `y1-${count}`,\n          },\n        ],\n      },\n    ];\n    const parentData = graph.findDataById(nodeId);\n\n    if (!parentData.children) {\n      parentData.children = [];\n    }\n\n    parentData.children = childData;\n    graph.changeData();\n    count++;\n  }\n});\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/change-members/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"公司1\",\n      group: 1,\n    },\n    {\n      id: \"2\",\n      label: \"公司2\",\n      group: 1,\n    },\n    {\n      id: \"3\",\n      label: \"公司3\",\n      group: 1,\n    },\n    {\n      id: \"4\",\n      label: \"公司4\",\n      group: 1,\n    },\n    {\n      id: \"5\",\n      label: \"公司5\",\n      group: 2,\n    },\n    {\n      id: \"6\",\n      label: \"公司6\",\n      group: 2,\n    },\n    {\n      id: \"7\",\n      label: \"公司7\",\n      group: 2,\n    },\n    {\n      id: \"8\",\n      label: \"公司8\",\n      group: 2,\n    },\n    {\n      id: \"9\",\n      label: \"公司9\",\n      group: 2,\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"1\",\n      type: \"loop\",\n    },\n    {\n      source: \"2\",\n      target: \"2\",\n      type: \"loop\",\n    },\n    {\n      source: \"1\",\n      target: \"2\",\n      data: {\n        type: \"A\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"8\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 元\",\n        date: \"2019-08-03\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/change-members/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport grid from \"@antv/f6/dist/extends/layout/gridLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"grid\", grid);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 50,\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"grid\",\n  },\n});\nconst hull1 = graph.createHull({\n  id: \"hull1\",\n  type: \"smooth-convex\",\n  padding: 15,\n  members: graph.getNodes().filter((node) => node.getModel().group === 1),\n});\nconst hull2 = graph.createHull({\n  id: \"hull2\",\n  members: graph.getNodes().filter((node) => node.getModel().group === 2),\n  padding: 15,\n  type: \"bubble\",\n  style: {\n    fill: \"pink\",\n    stroke: \"red\",\n  },\n  update: \"drag\",\n});\ngraph.on(\"canvas:contextmenu\", (ev) => {\n  ev.preventDefault();\n  ev.stopPropagation();\n  const item = graph.addItem(\"node\", {\n    x: ev.x,\n    y: ev.y,\n    id: Math.random(),\n    group: 2,\n  });\n  hull2.addMember(item);\n});\ngraph.on(\"afterupdateitem\", (e) => {\n  if (\n    hull1.members.indexOf(e.item) > -1 ||\n    hull1.nonMembers.indexOf(e.item) > -1\n  ) {\n    hull1.updateData(hull1.members);\n  }\n});\ngraph.on(\"node:dragend\", (e) => {\n  const { item } = e;\n  const memberIdx = hull2.members.indexOf(item);\n\n  if (memberIdx > -1) {\n    if (!hull2.contain(item)) {\n      hull2.removeMember(item);\n    } else {\n      hull2.updateData(hull2.members);\n    }\n  } else if (hull2.contain(item)) hull2.addMember(item);\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/collapse-slibing/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  cluster: \"c0\",\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      cluster: \"c0\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n          cluster: \"c1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          cluster: \"c1\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n              cluster: \"c0\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n              cluster: \"c1\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      cluster: \"c0\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n          cluster: \"c2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n          cluster: \"c2\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode5\",\n      cluster: \"c1\",\n    },\n    {\n      id: \"SubTreeNode6\",\n      cluster: \"c1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/collapse-slibing/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data.js\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nF6.registerBehavior(\"collapse-slibing\", {\n  getEvents() {\n    return {\n      \"node:click\": \"onClick\",\n    };\n  },\n\n  onClick(evt) {\n    const { item } = evt;\n    const model = item.getModel();\n    const { cluster } = model;\n    const parentData = item.get(\"parent\").getModel();\n    const me = this;\n\n    if (model.collapsedSiblings) {\n      graph.removeChild(model.id);\n      setTimeout(() => {\n        const { children } = parentData;\n\n        for (let i = model.collapsedSiblings.length - 1; i >= 0; i--) {\n          const add = model.collapsedSiblings[i];\n          children.splice(add.idx, 0, add);\n        }\n\n        delete model.collapsedSiblings;\n        me.graph.updateChildren(children, parentData.id);\n      }, 550);\n      return;\n    }\n\n    const siblingData = parentData.children;\n    if (siblingData.length <= 1) return;\n    let count = 0;\n    const aggregateNode = {\n      id: `aggregate-node-${model.id}`,\n      children: [],\n      cluster,\n      collapsedSiblings: [],\n    };\n    let modelIdx = siblingData.length - 1;\n\n    for (let i = siblingData.length - 1; i >= 0; i--) {\n      const sibling = siblingData[i];\n\n      if (sibling.id === model.id) {\n        const remove = siblingData[i];\n        remove.idx = i;\n        aggregateNode.collapsedSiblings.push(remove);\n        modelIdx = Math.min(i, modelIdx);\n        aggregateNode.children = (siblingData[i].children || []).concat(\n          aggregateNode.children,\n        );\n      } else if (sibling.cluster === cluster && sibling.id !== model.id) {\n        count++;\n        aggregateNode.children = (siblingData[i].children || []).concat(\n          aggregateNode.children,\n        );\n        const remove = siblingData.splice(i, 1)[0];\n        remove.idx = i;\n        aggregateNode.collapsedSiblings.push(remove);\n        modelIdx = Math.min(i, modelIdx);\n      }\n    }\n\n    if (!count) return;\n    aggregateNode.label = count + 1;\n    aggregateNode.size = 16 + (count + 1) * 4;\n    graph.removeChild(model.id);\n    siblingData.splice(modelIdx, 0, aggregateNode);\n    setTimeout(() => {\n      me.graph.updateChildren(siblingData, parentData.id);\n    }, 550);\n  },\n});\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"collapse-slibing\", \"drag-canvas\"],\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    defalutPosition: [],\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 50;\n    },\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    color: \"#A3B1BF\",\n  },\n});\ngraph.node(function (node) {\n  const colorSet = colorSets[+node.cluster.replace(\"c\", \"\")];\n  return {\n    size: node.size || 16,\n    style: {\n      fill: colorSet.mainFill || \"#DEE9FF\",\n      stroke: colorSet.mainStroke || \"#5B8FF9\",\n    },\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/combo-circle/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 350, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 350, y: 250, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  edges: [\n    { source: \"node1\", target: \"node2\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"combo1\", target: \"node3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\", collapsed: true },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/combo-circle/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  groupByTypes: false,\n  defaultCombo: {\n    type: \"circle\",\n    style: {\n      lineWidth: 1,\n    },\n    labelCfg: {\n      refY: 15,\n      position: \"bottom\",\n    },\n  },\n  comboStateStyles: {\n    dragenter: {\n      lineWidth: 4,\n      stroke: \"#FE9797\",\n    },\n  },\n  modes: {\n    default: [\n      \"drag-canvas\",\n      \"drag-node\",\n      \"drag-combo\",\n      \"collapse-expand-combo\",\n      \"click-select\",\n    ],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"combo:dragend\", () => {\n  graph.getCombos().forEach((combo) => {\n    graph.setItemState(combo, \"dragenter\", false);\n  });\n});\ngraph.on(\"node:dragend\", () => {\n  graph.getCombos().forEach((combo) => {\n    graph.setItemState(combo, \"dragenter\", false);\n  });\n});\ngraph.on(\"combo:dragenter\", (e) => {\n  graph.setItemState(e.item, \"dragenter\", true);\n});\ngraph.on(\"combo:dragleave\", (e) => {\n  graph.setItemState(e.item, \"dragenter\", false);\n});\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/combo-rect/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node1\", x: 350, y: 200, comboId: \"combo1\" },\n    { id: \"node2\", x: 350, y: 250, comboId: \"combo1\" },\n    { id: \"node3\", x: 100, y: 200, comboId: \"combo3\" },\n  ],\n  edges: [\n    { source: \"node1\", target: \"node2\" },\n    { source: \"node1\", target: \"node3\" },\n    { source: \"combo1\", target: \"node3\" },\n  ],\n  combos: [\n    { id: \"combo1\", label: \"Combo 1\", parentId: \"combo2\" },\n    { id: \"combo2\", label: \"Combo 2\" },\n    { id: \"combo3\", label: \"Combo 3\" },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/combo-rect/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  groupByTypes: false,\n  defaultCombo: {\n    type: \"rect\",\n    size: [40, 10],\n    padding: [30, 20, 10, 20],\n    style: {\n      lineWidth: 1,\n    },\n    labelCfg: {\n      refY: 10,\n      refX: 20,\n      position: \"bottom\",\n    },\n  },\n  comboStateStyles: {\n    dragenter: {\n      lineWidth: 4,\n      stroke: \"#FE9797\",\n    },\n  },\n  modes: {\n    default: [\n      \"drag-canvas\",\n      \"drag-node\",\n      \"drag-combo\",\n      \"collapse-expand-combo\",\n      \"click-select\",\n    ],\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"combo:dragend\", () => {\n  graph.getCombos().forEach((combo) => {\n    graph.setItemState(combo, \"dragenter\", false);\n  });\n});\ngraph.on(\"node:dragend\", () => {\n  graph.getCombos().forEach((combo) => {\n    graph.setItemState(combo, \"dragenter\", false);\n  });\n});\ngraph.on(\"combo:dragenter\", (e) => {\n  graph.setItemState(e.item, \"dragenter\", true);\n});\ngraph.on(\"combo:dragleave\", (e) => {\n  graph.setItemState(e.item, \"dragenter\", false);\n});\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/drag-subtree/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/drag-subtree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data.js\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      \"drag-canvas\",\n      \"zoom-canvas\",\n      {\n        type: \"drag-node\",\n        enableDelegate: true,\n      },\n    ],\n  },\n  defaultNode: {\n    size: [26, 26],\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n    style: {\n      fill: \"#C6E5FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      stroke: \"#A3B1BF\",\n    },\n  },\n  nodeStateStyles: {\n    closest: {\n      fill: \"#f00\",\n    },\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n  },\n});\ngraph.node(function (node) {\n  return {\n    label: node.id,\n    labelCfg: {\n      offset: 10,\n      position: node.children && node.children.length > 0 ? \"left\" : \"right\",\n    },\n  };\n});\nlet minDisNode;\ngraph.on(\"node:dragstart\", () => {\n  minDisNode = undefined;\n});\ngraph.on(\"node:drag\", (e) => {\n  minDisNode = undefined;\n  const { item } = e;\n  const model = item.getModel();\n  const nodes = graph.getNodes();\n  let minDis = Infinity;\n  nodes.forEach((inode) => {\n    graph.setItemState(inode, \"closest\", false);\n    const node = inode.getModel();\n    if (node.id === model.id) return;\n    const dis =\n      (node.x - e.x) * (node.x - e.x) + (node.y - e.y) * (node.y - e.y);\n\n    if (dis < minDis) {\n      minDis = dis;\n      minDisNode = inode;\n    }\n  });\n  console.log(\"minDis\", minDis, minDisNode);\n  if (minDis < 2000) graph.setItemState(minDisNode, \"closest\", true);\n  else minDisNode = undefined;\n});\ngraph.on(\"node:dragend\", (e) => {\n  if (!minDisNode) {\n    return;\n  }\n\n  const { item } = e;\n  const id = item.getID();\n  const data = graph.findDataById(id);\n  let isDescent = false;\n  const minDisNodeId = minDisNode.getID();\n  console.log(\"dragend\", minDisNodeId, isDescent, data, id);\n  F6.Util.traverseTree(data, (d) => {\n    if (d.id === minDisNodeId) isDescent = true;\n  });\n\n  if (isDescent) {\n    return;\n  }\n\n  graph.removeChild(id);\n  const me = this;\n  setTimeout(() => {\n    const newParentData = graph.findDataById(minDisNodeId);\n    let newChildren = newParentData.children;\n    if (newChildren) newChildren.push(data);\n    else newChildren = [data];\n    me.graph.updateChildren(newChildren, minDisNodeId);\n    me.setData({\n      discription: \"Success.\",\n    });\n  }, 600);\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/hide-item/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50, label: \"0\", x: 326, y: 268 },\n    { id: \"node1\", size: 30, label: \"1\", x: 280, y: 384 },\n    { id: \"node2\", size: 30, label: \"2\", x: 234, y: 167 },\n    { id: \"node3\", size: 30, label: \"3\", x: 391, y: 368 },\n    { id: \"node4\", size: 30, label: \"4\", x: 444, y: 209 },\n    { id: \"node5\", size: 30, label: \"5\", x: 378, y: 157 },\n    { id: \"node6\", size: 15, label: \"6\", x: 229, y: 400 },\n    { id: \"node7\", size: 15, label: \"7\", x: 281, y: 440 },\n    { id: \"node8\", size: 15, label: \"8\", x: 188, y: 119 },\n    { id: \"node9\", size: 15, label: \"9\", x: 287, y: 157 },\n    { id: \"node10\", size: 15, label: \"10\", x: 185, y: 200 },\n    { id: \"node11\", size: 15, label: \"11\", x: 238, y: 110 },\n    { id: \"node12\", size: 15, label: \"12\", x: 239, y: 221 },\n    { id: \"node13\", size: 15, label: \"13\", x: 176, y: 160 },\n    { id: \"node14\", size: 15, label: \"14\", x: 389, y: 423 },\n    { id: \"node15\", size: 15, label: \"15\", x: 441, y: 341 },\n    { id: \"node16\", size: 15, label: \"16\", x: 442, y: 398 },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\", label: \"0-1\" },\n    { source: \"node0\", target: \"node2\", label: \"0-2\" },\n    { source: \"node0\", target: \"node3\", label: \"0-3\" },\n    { source: \"node0\", target: \"node4\", label: \"0-4\" },\n    { source: \"node0\", target: \"node5\", label: \"0-5\" },\n    { source: \"node1\", target: \"node6\", label: \"1-6\" },\n    { source: \"node1\", target: \"node7\", label: \"1-7\" },\n    { source: \"node2\", target: \"node8\", label: \"2-8\" },\n    { source: \"node2\", target: \"node9\", label: \"2-9\" },\n    { source: \"node2\", target: \"node10\", label: \"2-10\" },\n    { source: \"node2\", target: \"node11\", label: \"2-11\" },\n    { source: \"node2\", target: \"node12\", label: \"2-12\" },\n    { source: \"node2\", target: \"node13\", label: \"2-13\" },\n    { source: \"node3\", target: \"node14\", label: \"3-14\" },\n    { source: \"node3\", target: \"node15\", label: \"3-15\" },\n    { source: \"node3\", target: \"node16\", label: \"3-16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/hide-item/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  modes: {\n    default: [\n      \"drag-node\",\n      {\n        type: \"drag-canvas\",\n        enableOptimize: true,\n      },\n      {\n        type: \"zoom-canvas\",\n        enableOptimize: true,\n      },\n    ],\n  },\n  defaultNode: {\n    size: [10, 10],\n    style: {\n      lineWidth: 2,\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    style: {\n      stroke: \"#e2e2e2\",\n      lineAppendWidth: 2,\n    },\n  },\n  nodeStateStyles: {\n    yourStateName: {\n      stroke: \"#f00\",\n      lineWidth: 3,\n    },\n  },\n  edgeStateStyles: {\n    yourStateName: {\n      stroke: \"#f00\",\n      lineWidth: 3,\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/highlight-dark/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"0\",\n      comboId: \"a\",\n    },\n    {\n      id: \"1\",\n      comboId: \"a\",\n    },\n    {\n      id: \"2\",\n      comboId: \"a\",\n    },\n    {\n      id: \"3\",\n      comboId: \"a\",\n    },\n    {\n      id: \"4\",\n      comboId: \"a\",\n    },\n    {\n      id: \"5\",\n      comboId: \"a\",\n    },\n    {\n      id: \"6\",\n      comboId: \"a\",\n    },\n    {\n      id: \"7\",\n      comboId: \"a\",\n    },\n    {\n      id: \"8\",\n      comboId: \"a\",\n    },\n    {\n      id: \"9\",\n      comboId: \"a\",\n    },\n    {\n      id: \"10\",\n      comboId: \"a\",\n    },\n    {\n      id: \"11\",\n      comboId: \"a\",\n    },\n    {\n      id: \"12\",\n      comboId: \"a\",\n    },\n    {\n      id: \"13\",\n      comboId: \"a\",\n    },\n    {\n      id: \"14\",\n      comboId: \"a\",\n    },\n    {\n      id: \"15\",\n      comboId: \"a\",\n    },\n    {\n      id: \"16\",\n      comboId: \"b\",\n    },\n    {\n      id: \"17\",\n      comboId: \"b\",\n    },\n    {\n      id: \"18\",\n      comboId: \"b\",\n    },\n    {\n      id: \"19\",\n      comboId: \"b\",\n    },\n    {\n      id: \"20\",\n    },\n    {\n      id: \"21\",\n    },\n    {\n      id: \"22\",\n    },\n    {\n      id: \"23\",\n      comboId: \"c\",\n    },\n    {\n      id: \"24\",\n      comboId: \"a\",\n    },\n    {\n      id: \"25\",\n    },\n    {\n      id: \"26\",\n    },\n    {\n      id: \"27\",\n      comboId: \"c\",\n    },\n    {\n      id: \"28\",\n      comboId: \"c\",\n    },\n    {\n      id: \"29\",\n      comboId: \"c\",\n    },\n    {\n      id: \"30\",\n      comboId: \"c\",\n    },\n    {\n      id: \"31\",\n      comboId: \"c\",\n    },\n    {\n      id: \"32\",\n      comboId: \"d\",\n    },\n    {\n      id: \"33\",\n      comboId: \"d\",\n    },\n  ],\n  edges: [\n    {\n      source: \"a\",\n      target: \"b\",\n      label: \"Combo A - Combo B\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"red\",\n      },\n    },\n    {\n      source: \"a\",\n      target: \"33\",\n      label: \"Combo-Node\",\n      size: 3,\n      labelCfg: {\n        autoRotate: true,\n        style: {\n          stroke: \"#fff\",\n          lineWidth: 5,\n          fontSize: 20,\n        },\n      },\n      style: {\n        stroke: \"blue\",\n      },\n    },\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n  combos: [\n    {\n      id: \"a\",\n      label: \"Combo A\",\n    },\n    {\n      id: \"b\",\n      label: \"Combo B\",\n    },\n    {\n      id: \"c\",\n      label: \"Combo D\",\n    },\n    {\n      id: \"d\",\n      label: \"Combo D\",\n      parentId: \"b\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/highlight-dark/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst tooltip = new F6.Tooltip({\n  offsetX: 10,\n  offsetY: 10,\n  fixToNode: [1, 0.5],\n  itemTypes: [\"node\", \"edge\"],\n  getContent: (e) => {\n    const outDiv = document.createElement(\"div\");\n    outDiv.style.width = \"fit-content\";\n    outDiv.style.height = \"fit-content\";\n    const model = e.item.getModel();\n\n    if (e.item.getType() === \"node\") {\n      outDiv.innerHTML = `${model.name}`;\n    } else {\n      const source = e.item.getSource();\n      const target = e.item.getTarget();\n      outDiv.innerHTML = `来源：${source.getModel().name}<br/>去向：${\n        target.getModel().name\n      }`;\n    }\n\n    return outDiv;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 50,\n  plugins: [tooltip],\n  layout: {\n    type: \"force\",\n    edgeStrength: 0.7,\n  },\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultNode: {\n    size: [10, 10],\n    style: {\n      lineWidth: 2,\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    size: 1,\n    style: {\n      stroke: \"#e2e2e2\",\n      lineAppendWidth: 2,\n    },\n  },\n  nodeStateStyles: {\n    highlight: {\n      opacity: 1,\n    },\n    dark: {\n      opacity: 0.2,\n    },\n  },\n  edgeStateStyles: {\n    highlight: {\n      stroke: \"#999\",\n    },\n  },\n});\n\nfunction clearAllStats() {\n  graph.setAutoPaint(false);\n  graph.getNodes().forEach(function (node) {\n    graph.clearItemStates(node);\n  });\n  graph.getEdges().forEach(function (edge) {\n    graph.clearItemStates(edge);\n  });\n  graph.paint();\n  graph.setAutoPaint(true);\n}\n\ngraph.on(\"node:mouseenter\", function (e) {\n  const { item } = e;\n  graph.setAutoPaint(false);\n  graph.getNodes().forEach(function (node) {\n    graph.clearItemStates(node);\n    graph.setItemState(node, \"dark\", true);\n  });\n  graph.setItemState(item, \"dark\", false);\n  graph.setItemState(item, \"highlight\", true);\n  graph.getEdges().forEach(function (edge) {\n    if (edge.getSource() === item) {\n      graph.setItemState(edge.getTarget(), \"dark\", false);\n      graph.setItemState(edge.getTarget(), \"highlight\", true);\n      graph.setItemState(edge, \"highlight\", true);\n      edge.toFront();\n    } else if (edge.getTarget() === item) {\n      graph.setItemState(edge.getSource(), \"dark\", false);\n      graph.setItemState(edge.getSource(), \"highlight\", true);\n      graph.setItemState(edge, \"highlight\", true);\n      edge.toFront();\n    } else {\n      graph.setItemState(edge, \"highlight\", false);\n    }\n  });\n  graph.paint();\n  graph.setAutoPaint(true);\n});\ngraph.on(\"node:mouseleave\", clearAllStats);\ngraph.on(\"canvas:tap\", clearAllStats);\ngraph.data({\n  nodes: data.nodes,\n  edges: data.edges.map(function (edge, i) {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/hull/data.js",
    "content": "export default {\n  nodes: [\n    { id: \"node0\", size: 50 },\n    { id: \"node1\", size: 30 },\n    { id: \"node2\", size: 30 },\n    { id: \"node3\", size: 30 },\n    { id: \"node4\", size: 30, isLeaf: true },\n    { id: \"node5\", size: 30, isLeaf: true },\n    { id: \"node6\", size: 15, isLeaf: true },\n    { id: \"node7\", size: 15, isLeaf: true },\n    { id: \"node8\", size: 15, isLeaf: true },\n    { id: \"node9\", size: 15, isLeaf: true },\n    { id: \"node10\", size: 15, isLeaf: true },\n    { id: \"node11\", size: 15, isLeaf: true },\n    { id: \"node12\", size: 15, isLeaf: true },\n    { id: \"node13\", size: 15, isLeaf: true },\n    { id: \"node14\", size: 15, isLeaf: true },\n    { id: \"node15\", size: 15, isLeaf: true },\n    { id: \"node16\", size: 15, isLeaf: true },\n  ],\n  edges: [\n    { source: \"node0\", target: \"node1\" },\n    { source: \"node0\", target: \"node2\" },\n    { source: \"node0\", target: \"node3\" },\n    { source: \"node0\", target: \"node4\" },\n    { source: \"node0\", target: \"node5\" },\n    { source: \"node1\", target: \"node6\" },\n    { source: \"node1\", target: \"node7\" },\n    { source: \"node2\", target: \"node8\" },\n    { source: \"node2\", target: \"node9\" },\n    { source: \"node2\", target: \"node10\" },\n    { source: \"node2\", target: \"node11\" },\n    { source: \"node2\", target: \"node12\" },\n    { source: \"node2\", target: \"node13\" },\n    { source: \"node3\", target: \"node14\" },\n    { source: \"node3\", target: \"node15\" },\n    { source: \"node3\", target: \"node16\" },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/hull/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport force from \"@antv/f6/dist/extends/layout/forceLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"force\", force);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 50,\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\", \"lasso-select\"],\n  },\n  layout: {\n    type: \"force\",\n    preventOverlap: true,\n    linkDistance: (d) => {\n      if (d.source.id === \"node0\") {\n        return 300;\n      }\n\n      return 60;\n    },\n    nodeStrength: (d) => {\n      if (d.isLeaf) {\n        return -50;\n      }\n\n      return -10;\n    },\n    edgeStrength: (d) => {\n      if (\n        d.source.id === \"node1\" ||\n        d.source.id === \"node2\" ||\n        d.source.id === \"node3\"\n      ) {\n        return 0.7;\n      }\n\n      return 0.1;\n    },\n  },\n});\ngraph.data({\n  nodes,\n  edges: data.edges.map(function (edge, i) {\n    edge.id = `edge${i}`;\n    return Object.assign({}, edge);\n  }),\n});\nconst centerNodes = graph.getNodes().filter((node) => !node.getModel().isLeaf);\ngraph.on(\"afterlayout\", () => {\n  const hull1 = graph.createHull({\n    id: \"centerNode-hull\",\n    type: \"bubble\",\n    members: centerNodes,\n    padding: 10,\n  });\n  const hull2 = graph.createHull({\n    id: \"leafNode-hull1\",\n    members: [\"node6\", \"node7\"],\n    padding: 10,\n    style: {\n      fill: \"lightgreen\",\n      stroke: \"green\",\n    },\n  });\n  const hull3 = graph.createHull({\n    id: \"leafNode-hull2\",\n    members: [\"node8\", \"node9\", \"node10\", \"node11\", \"node12\", \"node13\"],\n    padding: 10,\n    style: {\n      fill: \"lightgreen\",\n      stroke: \"green\",\n    },\n  });\n  graph.on(\"afterupdateitem\", () => {\n    hull1.updateData(hull1.members);\n    hull2.updateData(hull2.members);\n    hull3.updateData(hull3.members);\n  });\n});\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/move/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 150,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 150,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/move/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  defaultNode: {\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    style: {\n      stroke: \"#b5b5b5\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (event) => {\n  const { item } = event;\n  graph.focusItem(item);\n});\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/move-animate/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 150,\n      y: 50,\n      label: \"node1\",\n    },\n    {\n      id: \"node2\",\n      x: 200,\n      y: 150,\n      label: \"node2\",\n    },\n    {\n      id: \"node3\",\n      x: 100,\n      y: 150,\n      label: \"node3\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n    {\n      source: \"node2\",\n      target: \"node3\",\n    },\n    {\n      source: \"node3\",\n      target: \"node1\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/move-animate/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  defaultNode: {\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    style: {\n      stroke: \"#b5b5b5\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (event) => {\n  const { item } = event;\n  graph.focusItem(item, true, {\n    easing: \"easeCubic\",\n    duration: 500,\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/partial-node/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"node1\",\n      x: 100,\n      y: 150,\n      label: \"node1\",\n      size: 100,\n      type: \"customNode\",\n    },\n    {\n      id: \"node2\",\n      x: 300,\n      y: 150,\n      label: \"node2\",\n      size: 100,\n      type: \"customNode\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/interactive/partial-node/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\n  \"customNode\",\n  {\n    drawShape: function drawShape(cfg, group) {\n      const { shapeType } = this;\n      const style = Object.assign({}, this.getShapeStyle(cfg), {\n        x: 0,\n        y: 0,\n        r: 50,\n      });\n      const shape = group.addShape(shapeType, {\n        attrs: style,\n        name: \"key-shape\",\n      });\n      group.addShape(\"circle\", {\n        attrs: {\n          x: 0,\n          y: -30,\n          r: 10,\n          fill: \"#096dd9\",\n          cursor: \"pointer\",\n        },\n        name: \"circle-shape\",\n      });\n      return shape;\n    },\n  },\n  \"circle\",\n);\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  modes: {\n    default: [\n      {\n        type: \"drag-node\",\n        delegate: false,\n      },\n    ],\n  },\n  defaultNode: {\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n    labelCfg: {\n      style: {\n        fontSize: 12,\n      },\n    },\n  },\n  defaultEdge: {\n    style: {\n      stroke: \"#e2e2e2\",\n    },\n  },\n  nodeStateStyles: {\n    selected: {\n      stroke: \"red\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\ngraph.on(\"node:tap\", (event) => {\n  const { item } = event;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"circle-shape:tap\", (evt) => {\n  const { item } = evt;\n  graph.updateItem(item, {\n    label: \"点击了局部\",\n    labelCfg: {\n      style: {\n        fill: \"#003a8c\",\n        fontSize: 16,\n      },\n    },\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/bundling/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n    {\n      id: \"16\",\n      label: \"16\",\n    },\n    {\n      id: \"17\",\n      label: \"17\",\n    },\n    {\n      id: \"18\",\n      label: \"18\",\n    },\n    {\n      id: \"19\",\n      label: \"19\",\n    },\n    {\n      id: \"20\",\n      label: \"20\",\n    },\n    {\n      id: \"21\",\n      label: \"21\",\n    },\n    {\n      id: \"22\",\n      label: \"22\",\n    },\n    {\n      id: \"23\",\n      label: \"23\",\n    },\n    {\n      id: \"24\",\n      label: \"24\",\n    },\n    {\n      id: \"25\",\n      label: \"25\",\n    },\n    {\n      id: \"26\",\n      label: \"26\",\n    },\n    {\n      id: \"27\",\n      label: \"27\",\n    },\n    {\n      id: \"28\",\n      label: \"28\",\n    },\n    {\n      id: \"29\",\n      label: \"29\",\n    },\n    {\n      id: \"30\",\n      label: \"30\",\n    },\n    {\n      id: \"31\",\n      label: \"31\",\n    },\n    {\n      id: \"32\",\n      label: \"32\",\n    },\n    {\n      id: \"33\",\n      label: \"33\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"0\",\n      target: \"16\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"22\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"10\",\n      target: \"24\",\n    },\n    {\n      source: \"10\",\n      target: \"21\",\n    },\n    {\n      source: \"10\",\n      target: \"20\",\n    },\n    {\n      source: \"11\",\n      target: \"24\",\n    },\n    {\n      source: \"11\",\n      target: \"22\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n    {\n      source: \"16\",\n      target: \"17\",\n    },\n    {\n      source: \"16\",\n      target: \"18\",\n    },\n    {\n      source: \"16\",\n      target: \"21\",\n    },\n    {\n      source: \"16\",\n      target: \"22\",\n    },\n    {\n      source: \"17\",\n      target: \"18\",\n    },\n    {\n      source: \"17\",\n      target: \"20\",\n    },\n    {\n      source: \"18\",\n      target: \"19\",\n    },\n    {\n      source: \"19\",\n      target: \"20\",\n    },\n    {\n      source: \"19\",\n      target: \"33\",\n    },\n    {\n      source: \"19\",\n      target: \"22\",\n    },\n    {\n      source: \"19\",\n      target: \"23\",\n    },\n    {\n      source: \"20\",\n      target: \"21\",\n    },\n    {\n      source: \"21\",\n      target: \"22\",\n    },\n    {\n      source: \"22\",\n      target: \"24\",\n    },\n    {\n      source: \"22\",\n      target: \"25\",\n    },\n    {\n      source: \"22\",\n      target: \"26\",\n    },\n    {\n      source: \"22\",\n      target: \"23\",\n    },\n    {\n      source: \"22\",\n      target: \"28\",\n    },\n    {\n      source: \"22\",\n      target: \"30\",\n    },\n    {\n      source: \"22\",\n      target: \"31\",\n    },\n    {\n      source: \"22\",\n      target: \"32\",\n    },\n    {\n      source: \"22\",\n      target: \"33\",\n    },\n    {\n      source: \"23\",\n      target: \"28\",\n    },\n    {\n      source: \"23\",\n      target: \"27\",\n    },\n    {\n      source: \"23\",\n      target: \"29\",\n    },\n    {\n      source: \"23\",\n      target: \"30\",\n    },\n    {\n      source: \"23\",\n      target: \"31\",\n    },\n    {\n      source: \"23\",\n      target: \"33\",\n    },\n    {\n      source: \"32\",\n      target: \"33\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/bundling/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport CircularLayout from \"@antv/f6/dist/extends/layout/circularLayout\";\nimport { Bundling } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"circular\", CircularLayout);\nconst edgeBundling = new Bundling({\n  bundleThreshold: 0.1,\n});\nconst graph = new F6.Graph({\n  pixelRatio,\n  width,\n  height,\n  linkCenter: true,\n  fitView: true,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\"],\n  },\n  layout: {\n    type: \"circular\",\n    center: [width / 2, height / 2],\n    radius: height / 2.5,\n    ordering: null,\n  },\n  plugins: [edgeBundling],\n  defaultNode: {\n    size: [20, 20],\n    color: \"steelblue\",\n  },\n  defaultEdge: {\n    size: 1,\n    color: \"#999\",\n  },\n});\ngraph.data(data);\ngraph.render();\nsetTimeout(() => {\n  edgeBundling.bundling(data);\n}, 1000);\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/donut-transfer/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"person A\",\n      label: \"person A\",\n      // the attributes for drawing donut\n      donutAttrs: {\n        income: 10,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person B\",\n      label: \"person B\",\n      donutAttrs: {\n        income: 20,\n        outcome: 10,\n        unknown: 5,\n      },\n    },\n    {\n      id: \"person C\",\n      label: \"person C\",\n      donutAttrs: {\n        income: 200,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person D\",\n      label: \"person D\",\n      donutAttrs: {\n        income: 50,\n        outcome: 10,\n        unknown: 15,\n      },\n    },\n    {\n      id: \"person E\",\n      label: \"person E\",\n      donutAttrs: {\n        income: 80,\n        outcome: 40,\n        unknown: 45,\n      },\n    },\n    {\n      id: \"person F\",\n      label: \"person F\",\n      donutAttrs: {\n        income: 90,\n        outcome: 110,\n        unknown: 15,\n      },\n    },\n  ],\n  edges: [\n    { source: \"person C\", target: \"person F\", size: 10 },\n    { source: \"person B\", target: \"person A\", size: 5 },\n    { source: \"person D\", target: \"person E\", size: 20 },\n    { source: \"person D\", target: \"person C\", size: 5 },\n    { source: \"person B\", target: \"person C\", size: 10 },\n    { source: \"person A\", target: \"person C\", size: 5 },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.label = `Transfer $${edge.size}`;\n});\n\nconst colors = {\n  income: \"#61DDAA\",\n  outcome: \"#F08BB4\",\n  unknown: \"#65789B\",\n};\n\ndata.nodes.forEach((node) => {\n  node.donutColorMap = colors;\n  node.size = 0;\n  Object.keys(node.donutAttrs).forEach((key) => {\n    node.size += node.donutAttrs[key];\n  });\n  node.size = Math.sqrt(node.size) * 5;\n});\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"income\",\n      label: \"Income\",\n      order: 0,\n      style: {\n        fill: \"#61DDAA\",\n      },\n    },\n    {\n      id: \"outcome\",\n      label: \"Outcome\",\n      order: 2,\n      style: {\n        fill: \"#F08BB4\",\n      },\n    },\n    {\n      id: \"unknown\",\n      label: \"Unknown\",\n      order: 2,\n      style: {\n        fill: \"#65789B\",\n      },\n    },\n  ],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/donut-transfer/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { data, legendData } from \"./data\";\nimport { Legend } from \"@antv/f6-plugin\";\nimport radialLayout from \"@antv/f6/dist/extends/layout/radialLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"radial\", radialLayout);\nconst legend = new Legend({\n  width: 300,\n  height: 80,\n  offsetY: 0,\n  offsetX: 0,\n  data: legendData,\n  align: \"center\",\n  layout: \"horizontal\",\n  position: \"top-left\",\n  padding: 10,\n  margin: 0,\n  containerStyle: {\n    fill: \"#ccc\",\n    lineWidth: 1,\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: false,\n  plugins: [legend],\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    focusNode: \"li\",\n    linkDistance: 200,\n    unitRadius: 200,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: true,\n    },\n    labelCfg: {\n      autoRotate: true,\n      style: {\n        stroke: \"#fff\",\n        lineWidth: 5,\n      },\n    },\n  },\n  defaultNode: {\n    type: \"donut\",\n    style: {\n      lineWidth: 0,\n    },\n    labelCfg: {\n      position: \"bottom\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.get(\"canvas\").set(\"localRefresh\", false);\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/edge-filter/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/edge-filter/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport { EdgeFilterLens } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\ndata.edges.forEach((edge) => {\n  edge.color = \"#aaa\";\n  edge.size = 2;\n  edge.style = {\n    opacity: 0.7,\n  };\n  edge.label = \"a\";\n});\nconst filterConfigs = {\n  trigger: \"drag\",\n  showLabel: \"edge\",\n  r: 60,\n};\nconst filterLens = new EdgeFilterLens(filterConfigs);\nconst graph = new F6.Graph({\n  pixelRatio,\n  fitView: true,\n  width,\n  height,\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n  },\n  plugins: [filterLens],\n  defaultEdge: {\n    labelCfg: {\n      autoRotate: true,\n      style: {\n        stroke: \"#fff\",\n        lineWidth: 2,\n      },\n    },\n  },\n  defaultNode: {\n    size: 15,\n    color: \"#5B8FF9\",\n    style: {\n      lineWidth: 2,\n      fill: \"#C6E5FF\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.getEdges().forEach((edge) => {\n  edge\n    .getContainer()\n    .getChildren()\n    .forEach((shape) => {\n      if (shape.get(\"type\") === \"text\") shape.set(\"visible\", false);\n    });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/fisheye/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"Myriel\",\n      x: 197.13154409979438,\n      y: 58.49567372045294,\n    },\n    {\n      id: \"Napoleon\",\n      x: 147.01896389692396,\n      y: 22.47017586685877,\n    },\n    {\n      id: \"Mlle.Baptistine\",\n      x: 225.53929622396657,\n      y: 141.52203994343503,\n    },\n    {\n      id: \"Mme.Magloire\",\n      x: 255.07906424356426,\n      y: 120.2538776202175,\n    },\n    {\n      id: \"CountessdeLo\",\n      x: 151.886941377147,\n      y: -3.5440526274605024,\n    },\n    {\n      id: \"Geborand\",\n      x: 136.99780912786676,\n      y: 41.74972346367764,\n    },\n    {\n      id: \"Champtercier\",\n      x: 227.06448529213904,\n      y: 8.803245731763797,\n    },\n    {\n      id: \"Cravatte\",\n      x: 172.28712104569624,\n      y: -10.28659385020346,\n    },\n    {\n      id: \"Count\",\n      x: 172.9776128536988,\n      y: 12.515280485950003,\n    },\n    {\n      id: \"OldMan\",\n      x: 198.7549153659034,\n      y: -6.143466139379697,\n    },\n    {\n      id: \"Labarre\",\n      x: 266.5746386228216,\n      y: 203.98384539788222,\n    },\n    {\n      id: \"Valjean\",\n      x: 322.22242753596396,\n      y: 221.58991461580462,\n    },\n    {\n      id: \"Marguerite\",\n      x: 265.1218339265034,\n      y: 171.59761511302105,\n    },\n    {\n      id: \"Mme.deR\",\n      x: 299.78639359854327,\n      y: 133.57398015667923,\n    },\n    {\n      id: \"Isabeau\",\n      x: 282.69786358028415,\n      y: 191.50678051232913,\n    },\n    {\n      id: \"Gervais\",\n      x: 334.4562033716733,\n      y: 148.86340203151713,\n    },\n    {\n      id: \"Tholomyes\",\n      x: 359.6758601570104,\n      y: 158.51932058679517,\n    },\n    {\n      id: \"Listolier\",\n      x: 308.6408107258377,\n      y: 80.08978211784734,\n    },\n    {\n      id: \"Fameuil\",\n      x: 329.1208783621155,\n      y: 89.50783923513406,\n    },\n    {\n      id: \"Blacheville\",\n      x: 351.31710942912247,\n      y: 95.62381874446997,\n    },\n    {\n      id: \"Favourite\",\n      x: 284.0990966456606,\n      y: 153.6649901350214,\n    },\n    {\n      id: \"Dahlia\",\n      x: 303.2794454950651,\n      y: 170.87469919068386,\n    },\n    {\n      id: \"Zephine\",\n      x: 286.9038607953858,\n      y: 94.82364610010669,\n    },\n    {\n      id: \"Fantine\",\n      x: 337.7295856292113,\n      y: 187.2760733153313,\n    },\n    {\n      id: \"Mme.Thenardier\",\n      x: 283.8431887426204,\n      y: 267.7101161193055,\n    },\n    {\n      id: \"Thenardier\",\n      x: 317.6539018281542,\n      y: 300.0586304481375,\n    },\n    {\n      id: \"Cosette\",\n      x: 343.4495217104461,\n      y: 248.14013534143953,\n    },\n    {\n      id: \"Javert\",\n      x: 368.6281356589531,\n      y: 263.5847126845181,\n    },\n    {\n      id: \"Fauchelevent\",\n      x: 377.3520676841103,\n      y: 176.72534157485532,\n    },\n    {\n      id: \"Bamatabois\",\n      x: 391.75313851634024,\n      y: 156.5212161097912,\n    },\n    {\n      id: \"Perpetue\",\n      x: 234.8199749437348,\n      y: 195.99976079362335,\n    },\n    {\n      id: \"Simplice\",\n      x: 286.4937544345336,\n      y: 227.73420851527578,\n    },\n    {\n      id: \"Scaufflaire\",\n      x: 250.02919011143416,\n      y: 231.2513211913802,\n    },\n    {\n      id: \"Woman1\",\n      x: 375.4668487891018,\n      y: 202.783515421686,\n    },\n    {\n      id: \"Judge\",\n      x: 370.1700307319093,\n      y: 139.4810861650384,\n    },\n    {\n      id: \"Champmathieu\",\n      x: 404.6422482933774,\n      y: 216.58364918349568,\n    },\n    {\n      id: \"Brevet\",\n      x: 399.2513775912632,\n      y: 183.03026453336724,\n    },\n    {\n      id: \"Chenildieu\",\n      x: 425.90996667472837,\n      y: 194.79658513642403,\n    },\n    {\n      id: \"Cochepaille\",\n      x: 419.38361105364334,\n      y: 148.69180823448008,\n    },\n    {\n      id: \"Pontmercy\",\n      x: 375.2946100421193,\n      y: 307.66682817782345,\n    },\n    {\n      id: \"Boulatruelle\",\n      x: 260.66757416917164,\n      y: 279.0949406815367,\n    },\n    {\n      id: \"Eponine\",\n      x: 268.68796660221636,\n      y: 365.8200533034293,\n    },\n    {\n      id: \"Anzelma\",\n      x: 234.53762633403787,\n      y: 303.08504254821366,\n    },\n    {\n      id: \"Woman2\",\n      x: 304.29126463264043,\n      y: 254.05392981470945,\n    },\n    {\n      id: \"MotherInnocent\",\n      x: 350.35613429759803,\n      y: 214.42252912270644,\n    },\n    {\n      id: \"Gribier\",\n      x: 437.51920169330805,\n      y: 160.14388411785757,\n    },\n    {\n      id: \"Jondrette\",\n      x: 510.1406569699257,\n      y: 327.7456828911454,\n    },\n    {\n      id: \"Mme.Burgon\",\n      x: 466.0856874797108,\n      y: 368.0210264990602,\n    },\n    {\n      id: \"Gavroche\",\n      x: 393.6973181801981,\n      y: 380.40382743216634,\n    },\n    {\n      id: \"Gillenormand\",\n      x: 338.1148595335302,\n      y: 286.4434006942807,\n    },\n    {\n      id: \"Magnon\",\n      x: 277.12320020410266,\n      y: 317.4384382481713,\n    },\n    {\n      id: \"Mlle.Gillenormand\",\n      x: 257.52167498720337,\n      y: 306.4604520400414,\n    },\n    {\n      id: \"Mme.Pontmercy\",\n      x: 307.71325168392366,\n      y: 318.0074114921048,\n    },\n    {\n      id: \"Mlle.Vaubois\",\n      x: 197.63137784390082,\n      y: 325.2999365859076,\n    },\n    {\n      id: \"Lt.Gillenormand\",\n      x: 294.4105849543593,\n      y: 296.53686533697186,\n    },\n    {\n      id: \"Marius\",\n      x: 336.3436812430268,\n      y: 350.8376519695578,\n    },\n    {\n      id: \"BaronessT\",\n      x: 390.6807729530675,\n      y: 322.9175698803163,\n    },\n    {\n      id: \"Mabeuf\",\n      x: 366.77554563642803,\n      y: 445.26666512175433,\n    },\n    {\n      id: \"Enjolras\",\n      x: 376.9421415192702,\n      y: 371.1750781444891,\n    },\n    {\n      id: \"Combeferre\",\n      x: 397.0516872015465,\n      y: 416.38478793328625,\n    },\n    {\n      id: \"Prouvaire\",\n      x: 309.0241345496318,\n      y: 426.44215271462605,\n    },\n    {\n      id: \"Feuilly\",\n      x: 314.71137563489117,\n      y: 456.80172690673896,\n    },\n    {\n      id: \"Courfeyrac\",\n      x: 332.8405296045364,\n      y: 435.8881866127797,\n    },\n    {\n      id: \"Bahorel\",\n      x: 343.1268360879219,\n      y: 466.9404473411801,\n    },\n    {\n      id: \"Bossuet\",\n      x: 305.84814130923144,\n      y: 382.89355947309724,\n    },\n    {\n      id: \"Joly\",\n      x: 371.447442010866,\n      y: 415.99688422022257,\n    },\n    {\n      id: \"Grantaire\",\n      x: 370.72651876919826,\n      y: 466.96671298340794,\n    },\n    {\n      id: \"MotherPlutarch\",\n      x: 424.04457501182867,\n      y: 461.9373924104361,\n    },\n    {\n      id: \"Gueulemer\",\n      x: 344.1315821958891,\n      y: 323.7890765583486,\n    },\n    {\n      id: \"Babet\",\n      x: 367.3969014122835,\n      y: 319.2359576043117,\n    },\n    {\n      id: \"Claquesous\",\n      x: 303.23885194199465,\n      y: 347.8041412708572,\n    },\n    {\n      id: \"Montparnasse\",\n      x: 322.6528688110919,\n      y: 330.01757397802925,\n    },\n    {\n      id: \"Toussaint\",\n      x: 306.6921797724685,\n      y: 277.05255454452566,\n    },\n    {\n      id: \"Child1\",\n      x: 361.1652068827243,\n      y: 387.9769951347244,\n    },\n    {\n      id: \"Child2\",\n      x: 415.98942162128606,\n      y: 432.37341762016945,\n    },\n    {\n      id: \"Brujon\",\n      x: 330.44198511493056,\n      y: 394.6025799878689,\n    },\n    {\n      id: \"Mme.Hucheloup\",\n      x: 394.43875881505835,\n      y: 450.4056149101193,\n    },\n  ],\n  edges: [\n    {\n      source: \"Napoleon\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Baptistine\",\n      target: \"Myriel\",\n      value: 8,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Myriel\",\n      value: 10,\n    },\n    {\n      source: \"Mme.Magloire\",\n      target: \"Mlle.Baptistine\",\n      value: 6,\n    },\n    {\n      source: \"CountessdeLo\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Geborand\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Champtercier\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Cravatte\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Count\",\n      target: \"Myriel\",\n      value: 2,\n    },\n    {\n      source: \"OldMan\",\n      target: \"Myriel\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Labarre\",\n      value: 1,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mme.Magloire\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Mlle.Baptistine\",\n      value: 3,\n    },\n    {\n      source: \"Valjean\",\n      target: \"Myriel\",\n      value: 5,\n    },\n    {\n      source: \"Marguerite\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Mme.deR\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Isabeau\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gervais\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Listolier\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Fameuil\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Tholomyes\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Listolier\",\n      value: 4,\n    },\n    {\n      source: \"Blacheville\",\n      target: \"Fameuil\",\n      value: 4,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Favourite\",\n      target: \"Blacheville\",\n      value: 4,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Dahlia\",\n      target: \"Favourite\",\n      value: 5,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Zephine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Tholomyes\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Listolier\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Fameuil\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Blacheville\",\n      value: 3,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Favourite\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Dahlia\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Zephine\",\n      value: 4,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Marguerite\",\n      value: 2,\n    },\n    {\n      source: \"Fantine\",\n      target: \"Valjean\",\n      value: 9,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Thenardier\",\n      target: \"Valjean\",\n      value: 7,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Mme.Thenardier\",\n      value: 13,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Thenardier\",\n      target: \"Valjean\",\n      value: 12,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Mme.Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Valjean\",\n      value: 31,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Cosette\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Valjean\",\n      value: 17,\n    },\n    {\n      source: \"Javert\",\n      target: \"Fantine\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Javert\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Javert\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Valjean\",\n      value: 8,\n    },\n    {\n      source: \"Fauchelevent\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Bamatabois\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Perpetue\",\n      target: \"Fantine\",\n      value: 1,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Perpetue\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Fantine\",\n      value: 2,\n    },\n    {\n      source: \"Simplice\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Scaufflaire\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Woman1\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Judge\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Judge\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Judge\",\n      value: 3,\n    },\n    {\n      source: \"Champmathieu\",\n      target: \"Bamatabois\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Brevet\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Chenildieu\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Judge\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Champmathieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Brevet\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Chenildieu\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Cochepaille\",\n      target: \"Bamatabois\",\n      value: 1,\n    },\n    {\n      source: \"Pontmercy\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Boulatruelle\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Mme.Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Eponine\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Eponine\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Anzelma\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Valjean\",\n      value: 3,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Woman2\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Fauchelevent\",\n      value: 3,\n    },\n    {\n      source: \"MotherInnocent\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gribier\",\n      target: \"Fauchelevent\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Burgon\",\n      target: \"Jondrette\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Mme.Burgon\",\n      value: 2,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gavroche\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Cosette\",\n      value: 3,\n    },\n    {\n      source: \"Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Magnon\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 9,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Mlle.Gillenormand\",\n      target: \"Valjean\",\n      value: 2,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Pontmercy\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Mlle.Vaubois\",\n      target: \"Mlle.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Mlle.Gillenormand\",\n      value: 2,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Lt.Gillenormand\",\n      target: \"Cosette\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Mlle.Gillenormand\",\n      value: 6,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gillenormand\",\n      value: 12,\n    },\n    {\n      source: \"Marius\",\n      target: \"Pontmercy\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Lt.Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Cosette\",\n      value: 21,\n    },\n    {\n      source: \"Marius\",\n      target: \"Valjean\",\n      value: 19,\n    },\n    {\n      source: \"Marius\",\n      target: \"Tholomyes\",\n      value: 1,\n    },\n    {\n      source: \"Marius\",\n      target: \"Thenardier\",\n      value: 2,\n    },\n    {\n      source: \"Marius\",\n      target: \"Eponine\",\n      value: 5,\n    },\n    {\n      source: \"Marius\",\n      target: \"Gavroche\",\n      value: 4,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Gillenormand\",\n      value: 1,\n    },\n    {\n      source: \"BaronessT\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Mabeuf\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Marius\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Javert\",\n      value: 6,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Enjolras\",\n      target: \"Valjean\",\n      value: 4,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Enjolras\",\n      value: 15,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Gavroche\",\n      value: 6,\n    },\n    {\n      source: \"Combeferre\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Prouvaire\",\n      target: \"Combeferre\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Enjolras\",\n      value: 6,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Feuilly\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Marius\",\n      value: 9,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Enjolras\",\n      value: 17,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Combeferre\",\n      value: 13,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Gavroche\",\n      value: 7,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Courfeyrac\",\n      target: \"Prouvaire\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Courfeyrac\",\n      value: 6,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Mabeuf\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Enjolras\",\n      value: 4,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Feuilly\",\n      value: 3,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bahorel\",\n      target: \"Marius\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Marius\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Courfeyrac\",\n      value: 12,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Gavroche\",\n      value: 5,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Bahorel\",\n      value: 4,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Enjolras\",\n      value: 10,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Feuilly\",\n      value: 6,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Combeferre\",\n      value: 9,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Bossuet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bahorel\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Bossuet\",\n      value: 7,\n    },\n    {\n      source: \"Joly\",\n      target: \"Gavroche\",\n      value: 3,\n    },\n    {\n      source: \"Joly\",\n      target: \"Courfeyrac\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Enjolras\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Feuilly\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Prouvaire\",\n      value: 2,\n    },\n    {\n      source: \"Joly\",\n      target: \"Combeferre\",\n      value: 5,\n    },\n    {\n      source: \"Joly\",\n      target: \"Mabeuf\",\n      value: 1,\n    },\n    {\n      source: \"Joly\",\n      target: \"Marius\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bossuet\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Enjolras\",\n      value: 3,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Combeferre\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Courfeyrac\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Joly\",\n      value: 2,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Feuilly\",\n      value: 1,\n    },\n    {\n      source: \"Grantaire\",\n      target: \"Prouvaire\",\n      value: 1,\n    },\n    {\n      source: \"MotherPlutarch\",\n      target: \"Mabeuf\",\n      value: 3,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Thenardier\",\n      value: 5,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Gueulemer\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Thenardier\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gueulemer\",\n      value: 6,\n    },\n    {\n      source: \"Babet\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Javert\",\n      value: 2,\n    },\n    {\n      source: \"Babet\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Babet\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Thenardier\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Babet\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Gueulemer\",\n      value: 4,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Mme.Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Claquesous\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Babet\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gueulemer\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Claquesous\",\n      value: 2,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Montparnasse\",\n      target: \"Thenardier\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Cosette\",\n      value: 2,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Javert\",\n      value: 1,\n    },\n    {\n      source: \"Toussaint\",\n      target: \"Valjean\",\n      value: 1,\n    },\n    {\n      source: \"Child1\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Gavroche\",\n      value: 2,\n    },\n    {\n      source: \"Child2\",\n      target: \"Child1\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Babet\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gueulemer\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Thenardier\",\n      value: 3,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Eponine\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Claquesous\",\n      value: 1,\n    },\n    {\n      source: \"Brujon\",\n      target: \"Montparnasse\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bossuet\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Joly\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Grantaire\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Bahorel\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Courfeyrac\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Gavroche\",\n      value: 1,\n    },\n    {\n      source: \"Mme.Hucheloup\",\n      target: \"Enjolras\",\n      value: 1,\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/fisheye/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport { Fisheye } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst fisheye = new Fisheye({\n  r: 200,\n  trigger: \"drag\",\n});\nconst colors = [\n  \"#8FE9FF\",\n  \"#87EAEF\",\n  \"#FFC9E3\",\n  \"#A7C2FF\",\n  \"#FFA1E3\",\n  \"#FFE269\",\n  \"#BFCFEE\",\n  \"#FFA0C5\",\n  \"#D5FF86\",\n];\ndata.nodes.forEach((node) => {\n  node.label = node.id;\n  node.size = Math.random() * 30 + 10;\n  node.style = {\n    fill: colors[Math.floor(Math.random() * 9)],\n    lineWidth: 0,\n  };\n});\nconst graph = new F6.Graph({\n  pixelRatio,\n  width,\n  height,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n  },\n  plugins: [fisheye],\n});\ngraph.data(data);\ngraph.render();\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/menu/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"node1\",\n      label: \"node1\",\n      x: 200,\n      y: 100,\n      type: \"rect\",\n    },\n    {\n      id: \"node2\",\n      label: \"node2\",\n      x: 250,\n      y: 250,\n      type: \"rect\",\n    },\n    {\n      id: \"node3\",\n      label: \"node3\",\n      x: 350,\n      y: 100,\n      type: \"rect\",\n    },\n  ],\n  edges: [\n    {\n      source: \"node1\",\n      target: \"node2\",\n      label: \"Test Label\",\n    },\n    {\n      source: \"node1\",\n      target: \"node3\",\n      label: \"Test Label 2\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/menu/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport { Menu } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst contextMenu = new Menu({\n  getContent(evt) {\n    let header;\n\n    if (evt.target && evt.target.isCanvas && evt.target.isCanvas()) {\n      header = \"Canvas ContextMenu\";\n    } else if (evt.item) {\n      const itemType = evt.item.getType();\n      header = `${itemType.toUpperCase()} ContextMenu`;\n    }\n\n    return `\n        <div class=\"container\">\n          <div class=\"header\" title=\"header\">${header}</div>\n          <div>\n            <div class=\"li\" title=\"1\">div 1</div>\n            <div class=\"li\" title=\"2\">div 2</div>\n          </div>\n        </div>\n        `;\n  },\n\n  getCss: () => {\n    return `\n          .container {\n            opacity: 0.9;\n            width: 150;\n            padding: 10 8;\n            border: 1 solid #e2e2e2;\n          }\n          .header {\n            padding-bottom: 10;\n            font-weight: bold;\n          }\n          .li {\n            padding-bottom: 10;\n          }\n        `;\n  },\n  handleMenuClick: (target) => {\n    my.alert({\n      title: `点击了: ${target.title}`,\n    });\n  },\n  offsetX: 0,\n  offsetY: 0,\n  itemTypes: [\"node\", \"edge\", \"canvas\"],\n});\nconst graph = new F6.Graph({\n  pixelRatio,\n  width,\n  height,\n  linkCenter: true,\n  fitView: true,\n  plugins: [contextMenu],\n  defaultNode: {\n    size: [80, 40],\n    type: \"rect\",\n    style: {\n      fill: \"#DEE9FF\",\n      stroke: \"#5B8FF9\",\n    },\n  },\n  defaultEdge: {\n    style: {\n      stroke: \"#b5b5b5\",\n      lineAppendWidth: 3,\n    },\n    labelCfg: {\n      autoRotate: true,\n      style: {\n        stroke: \"white\",\n        lineWidth: 5,\n      },\n    },\n  },\n  modes: {\n    default: [\"drag-node\"],\n  },\n});\ngraph.data(data);\ngraph.render();\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/mini-map/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/mini-map/index.js",
    "content": "import { MiniMap } from \"@antv/f6-plugin\";\nimport data from \"./data\";\nimport F6 from \"@antv/f6\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst miniMap = new MiniMap({\n  className: \"custom-container\",\n  viewportClassName: \"custom-viewport\",\n  getCss: () => {\n    return `\n          .custom-container {\n            top: 0;\n            background: #eee;\n            border: 1 solid #333;\n          }\n          .custom-viewport {\n            border:1 solid blue;\n          }\n        `;\n  },\n});\nconst graph = new F6.Graph({\n  context: ctx,\n  width,\n  height,\n  pixelRatio,\n  linkCenter: true,\n  renderer,\n  defaultNode: {\n    size: 30,\n  },\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n  },\n  plugins: [miniMap],\n});\ngraph.data(data);\ngraph.render();\ngraph.get(\"canvas\").set(\"localRefresh\", false);\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/snap-line/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/snap-line/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport { SnapLine } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst snapLine = new SnapLine();\nconst graph = new F6.Graph({\n  pixelRatio,\n  width,\n  height,\n  linkCenter: true,\n  defaultNode: {\n    size: 30,\n  },\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n  },\n  plugins: [snapLine],\n});\ngraph.data(data);\ngraph.render();\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/timebar/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { TimeBar } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst data = {\n  nodes: [],\n  edges: [],\n};\n\nfor (let i = 0; i < 50; i++) {\n  const id = `node-${i}`;\n  data.nodes.push({\n    id,\n    date: Number(`2020${i}`),\n    value: Math.round(Math.random() * 300),\n  });\n  data.edges.push({\n    source: `node-${Math.round(Math.random() * 90)}`,\n    target: `node-${Math.round(Math.random() * 90)}`,\n  });\n}\n\nconst timeBarData = [];\n\nfor (let i = 0; i < 50; i++) {\n  timeBarData.push({\n    date: Number(`2020${i}`),\n    value: Math.round(Math.random() * 300),\n  });\n}\n\nconst timebar = new TimeBar({\n  x: 0,\n  y: 0,\n  width,\n  padding: 0,\n  type: \"simple\",\n  data: timeBarData,\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  localRefresh: false,\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  animate: false,\n  defaultNode: {\n    size: 30,\n  },\n  plugins: [timebar],\n});\ngraph.get(\"canvas\").set(\"localRefresh\", false);\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/tool-tip/data.js",
    "content": "export default {\n  id: \"g1\",\n  name: \"Name1\",\n  count: 123456,\n  label: \"538.90\",\n  currency: \"Yuan\",\n  rate: 1.0,\n  status: \"B\",\n  variableName: \"V1\",\n  variableValue: 0.341,\n  variableUp: false,\n  children: [\n    {\n      id: \"g12\",\n      name: \"Deal with LONG label LONG label LONG label LONG label\",\n      count: 123456,\n      label: \"338.00\",\n      rate: 0.627,\n      status: \"R\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.179,\n      variableUp: true,\n      children: [\n        {\n          id: \"g121\",\n          name: \"Name3\",\n          collapsed: true,\n          count: 123456,\n          label: \"138.00\",\n          rate: 0.123,\n          status: \"B\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.27,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1211\",\n              name: \"Name4\",\n              count: 123456,\n              label: \"138.00\",\n              rate: 1.0,\n              status: \"B\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.164,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g122\",\n          name: \"Name5\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.259,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1221\",\n              name: \"Name6\",\n              count: 123456,\n              label: \"40.00\",\n              rate: 0.4,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.135,\n              variableUp: true,\n              children: [\n                {\n                  id: \"g12211\",\n                  name: \"Name6-1\",\n                  count: 123456,\n                  label: \"40.00\",\n                  rate: 1.0,\n                  status: \"R\",\n                  currency: \"Yuan\",\n                  variableName: \"V1\",\n                  variableValue: 0.181,\n                  variableUp: true,\n                  children: [],\n                },\n              ],\n            },\n            {\n              id: \"g1222\",\n              name: \"Name7\",\n              count: 123456,\n              label: \"60.00\",\n              rate: 0.6,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.239,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g123\",\n          name: \"Name8\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"DI\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.131,\n          variableUp: false,\n          children: [\n            {\n              id: \"g1231\",\n              name: \"Name8-1\",\n              count: 123456,\n              label: \"100.00\",\n              rate: 1.0,\n              status: \"DI\",\n              currency: \"Yuan\",\n              variableName: \"V2\",\n              variableValue: 0.131,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"g13\",\n      name: \"Name9\",\n      count: 123456,\n      label: \"100.90\",\n      rate: 0.187,\n      status: \"B\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.221,\n      variableUp: true,\n      children: [\n        {\n          id: \"g131\",\n          name: \"Name10\",\n          count: 123456,\n          label: \"33.90\",\n          rate: 0.336,\n          status: \"R\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.12,\n          variableUp: true,\n          children: [],\n        },\n        {\n          id: \"g132\",\n          name: \"Name11\",\n          count: 123456,\n          label: \"67.00\",\n          rate: 0.664,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.241,\n          variableUp: false,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"g14\",\n      name: \"Name12\",\n      count: 123456,\n      label: \"100.00\",\n      rate: 0.186,\n      status: \"G\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.531,\n      variableUp: true,\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/tool-tip/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport mockData from \"./data\";\nimport { Tooltip } from \"@antv/f6-plugin\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst colors = {\n  B: \"#5B8FF9\",\n  R: \"#F46649\",\n  Y: \"#EEBC20\",\n  G: \"#5BD8A6\",\n  DI: \"#A7A7A7\",\n};\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst defaultConfig = {\n  width,\n  height,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\"],\n  },\n  fitView: true,\n  animate: true,\n  defaultNode: {\n    type: \"flow-rect\",\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      stroke: \"#CED4D9\",\n    },\n  },\n  layout: {\n    type: \"indented\",\n    direction: \"LR\",\n    dropCap: false,\n    indent: 300,\n    getHeight: () => {\n      return 60;\n    },\n  },\n};\nconst props = {\n  data: mockData,\n  config: {\n    padding: [20, 50],\n    defaultLevel: 3,\n    defaultZoom: 0.8,\n    modes: {\n      default: [\"zoom-canvas\", \"drag-canvas\"],\n    },\n  },\n};\n\nconst registerFn = () => {\n  F6.registerNode(\n    \"flow-rect\",\n    {\n      shapeType: \"flow-rect\",\n\n      draw(cfg, group) {\n        const {\n          name = \"\",\n          variableName,\n          variableValue,\n          variableUp,\n          label,\n          collapsed,\n          currency,\n          status,\n        } = cfg;\n        const grey = \"#CED4D9\";\n        const rectConfig = {\n          width: 202,\n          height: 60,\n          lineWidth: 1,\n          fontSize: 12,\n          fill: \"#fff\",\n          radius: 4,\n          stroke: grey,\n          opacity: 1,\n        };\n        const nodeOrigin = {\n          x: -rectConfig.width / 2,\n          y: -rectConfig.height / 2,\n        };\n        const textConfig = {\n          textAlign: \"left\",\n          textBaseline: \"bottom\",\n        };\n        const rect = group.addShape(\"rect\", {\n          attrs: {\n            x: nodeOrigin.x,\n            y: nodeOrigin.y,\n            ...rectConfig,\n          },\n        });\n        const rectBBox = rect.getBBox();\n        group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: 12 + nodeOrigin.x,\n            y: 20 + nodeOrigin.y,\n            text: name.length > 28 ? `${name.substr(0, 28)}...` : name,\n            fontSize: 12,\n            opacity: 0.85,\n            fill: \"#000\",\n            cursor: \"pointer\",\n          },\n          name: \"name-shape\",\n        });\n        const price = group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: 12 + nodeOrigin.x,\n            y: rectBBox.maxY - 12,\n            text: label,\n            fontSize: 16,\n            fill: \"#000\",\n            opacity: 0.85,\n          },\n        });\n        group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: price.getBBox().maxX + 5,\n            y: rectBBox.maxY - 12,\n            text: currency,\n            fontSize: 12,\n            fill: \"#000\",\n            opacity: 0.75,\n          },\n        });\n        const percentText = group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: rectBBox.maxX - 8,\n            y: rectBBox.maxY - 12,\n            text: `${((variableValue || 0) * 100).toFixed(2)}%`,\n            fontSize: 12,\n            textAlign: \"right\",\n            fill: colors[status],\n          },\n        });\n        const symbol = variableUp ? \"triangle\" : \"triangle-down\";\n        const triangle = group.addShape(\"marker\", {\n          attrs: {\n            ...textConfig,\n            x: percentText.getBBox().minX - 10,\n            y: rectBBox.maxY - 12 - 6,\n            symbol,\n            r: 6,\n            fill: colors[status],\n          },\n        });\n        group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: triangle.getBBox().minX - 4,\n            y: rectBBox.maxY - 12,\n            text: variableName,\n            fontSize: 12,\n            textAlign: \"right\",\n            fill: \"#000\",\n            opacity: 0.45,\n          },\n        });\n\n        if (cfg.children && cfg.children.length) {\n          group.addShape(\"rect\", {\n            attrs: {\n              x: rectConfig.width / 2 - 8,\n              y: -8,\n              width: 16,\n              height: 16,\n              stroke: \"rgba(0, 0, 0, 0.25)\",\n              cursor: \"pointer\",\n              fill: \"#fff\",\n            },\n            name: \"collapse-back\",\n            modelId: cfg.id,\n          });\n          group.addShape(\"text\", {\n            attrs: {\n              x: rectConfig.width / 2,\n              y: -1,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: collapsed ? \"+\" : \"-\",\n              fontSize: 16,\n              cursor: \"pointer\",\n              fill: \"rgba(0, 0, 0, 0.25)\",\n            },\n            name: \"collapse-text\",\n            modelId: cfg.id,\n          });\n        }\n\n        this.drawLinkPoints(cfg, group);\n        return rect;\n      },\n\n      update(cfg, item) {\n        const group = item.getContainer();\n        this.updateLinkPoints(cfg, group);\n      },\n\n      setState(name, value, item) {\n        if (name === \"collapse\") {\n          const group = item.getContainer();\n          const collapseText = group.find(\n            (e) => e.get(\"name\") === \"collapse-text\",\n          );\n\n          if (collapseText) {\n            if (!value) {\n              collapseText.attr({\n                text: \"-\",\n              });\n            } else {\n              collapseText.attr({\n                text: \"+\",\n              });\n            }\n          }\n        }\n      },\n\n      getAnchorPoints() {\n        return [\n          [0, 0.5],\n          [1, 0.5],\n        ];\n      },\n    },\n    \"rect\",\n  );\n  F6.registerEdge(\n    \"flow-cubic\",\n    {\n      getControlPoints(cfg) {\n        let { controlPoints } = cfg;\n\n        if (!controlPoints || !controlPoints.length) {\n          const { startPoint, endPoint, sourceNode, targetNode } = cfg;\n          const {\n            x: startX,\n            y: startY,\n            coefficientX,\n            coefficientY,\n          } = sourceNode ? sourceNode.getModel() : startPoint;\n          const { x: endX, y: endY } = targetNode\n            ? targetNode.getModel()\n            : endPoint;\n          let curveStart = (endX - startX) * coefficientX;\n          let curveEnd = (endY - startY) * coefficientY;\n          curveStart = curveStart > 40 ? 40 : curveStart;\n          curveEnd = curveEnd < -30 ? curveEnd : -30;\n          controlPoints = [\n            {\n              x: startPoint.x + curveStart,\n              y: startPoint.y,\n            },\n            {\n              x: endPoint.x + curveEnd,\n              y: endPoint.y,\n            },\n          ];\n        }\n\n        return controlPoints;\n      },\n\n      getPath(points) {\n        const path = [];\n        path.push([\"M\", points[0].x, points[0].y]);\n        path.push([\n          \"C\",\n          points[1].x,\n          points[1].y,\n          points[2].x,\n          points[2].y,\n          points[3].x,\n          points[3].y,\n        ]);\n        return path;\n      },\n    },\n    \"single-line\",\n  );\n};\n\nregisterFn();\nconst { config } = props;\nconst tooltip = new Tooltip({\n  trigger: \"press\",\n  itemTypes: [\"node\"],\n  getContent: (e) => {\n    return `\n          <div class=\"f6-tooltip-container\">\n            <div>Custom Content</div>\n            <div class='tooltip-type'>Type: ${e.item.getType()}</div>\n            <div class='tooltip-id'>Label: ${\n              e.item.getModel().label || e.item.getModel().id\n            }</div>\n          </div>\n      `;\n  },\n  getCss: () => `\n        .f6-tooltip-container {\n          position: absolute;\n          width: 150;\n          border: 1 solid #e2e2e2;\n          border-radius: 4;\n          font-size: 12;\n          color: #545454;\n          background-color: rgba(255, 255, 255, 0.9);\n          padding: 10 8;\n        }\n    \n        .f6-tooltip-container div{\n          height: 20;\n        }\n        \n        .tooltip-type {\n          padding: 0;\n          margin: 0;\n        }\n        .tooltip-id {\n          color: #531dab;\n        }\n      `,\n  shouldBegin: (e) => {\n    if (e.target.get(\"name\") === \"name-shape\") return true;\n    return true;\n  },\n});\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  ...defaultConfig,\n  ...config,\n  plugins: [tooltip],\n  extra: {\n    createImage: this.canvas && this.canvas.createImage,\n    requestAnimationFrame: this.canvas.requestAnimationFrame,\n    cancelAnimationFrame: this.canvas.cancelAnimationFrame,\n  },\n});\nconsole.log(\n  this.canvas.requestAnimationFrame,\n  this.canvas.cancelAnimationFrame,\n);\ngraph.data(mockData);\ngraph.render();\ngraph.fitView();\ngraph.zoom(config.defaultZoom || 1);\n\nconst handleCollapse = (e) => {\n  const { target } = e;\n  const id = target.get(\"modelId\");\n  const item = graph.findById(id);\n  const nodeModel = item.getModel();\n  nodeModel.collapsed = !nodeModel.collapsed;\n  graph.layout();\n  graph.setItemState(item, \"collapse\", nodeModel.collapsed);\n};\n\ngraph.on(\"collapse-text:tap\", (e) => {\n  handleCollapse(e);\n});\ngraph.on(\"collapse-back:tap\", (e) => {\n  handleCollapse(e);\n});\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/zoom-slider/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      label: \"0\",\n    },\n    {\n      id: \"1\",\n      label: \"1\",\n    },\n    {\n      id: \"2\",\n      label: \"2\",\n    },\n    {\n      id: \"3\",\n      label: \"3\",\n    },\n    {\n      id: \"4\",\n      label: \"4\",\n    },\n    {\n      id: \"5\",\n      label: \"5\",\n    },\n    {\n      id: \"6\",\n      label: \"6\",\n    },\n    {\n      id: \"7\",\n      label: \"7\",\n    },\n    {\n      id: \"8\",\n      label: \"8\",\n    },\n    {\n      id: \"9\",\n      label: \"9\",\n    },\n    {\n      id: \"10\",\n      label: \"10\",\n    },\n    {\n      id: \"11\",\n      label: \"11\",\n    },\n    {\n      id: \"12\",\n      label: \"12\",\n    },\n    {\n      id: \"13\",\n      label: \"13\",\n    },\n    {\n      id: \"14\",\n      label: \"14\",\n    },\n    {\n      id: \"15\",\n      label: \"15\",\n    },\n  ],\n  edges: [\n    {\n      source: \"0\",\n      target: \"1\",\n    },\n    {\n      source: \"0\",\n      target: \"2\",\n    },\n    {\n      source: \"0\",\n      target: \"3\",\n    },\n    {\n      source: \"0\",\n      target: \"4\",\n    },\n    {\n      source: \"0\",\n      target: \"5\",\n    },\n    {\n      source: \"0\",\n      target: \"7\",\n    },\n    {\n      source: \"0\",\n      target: \"8\",\n    },\n    {\n      source: \"0\",\n      target: \"9\",\n    },\n    {\n      source: \"0\",\n      target: \"10\",\n    },\n    {\n      source: \"0\",\n      target: \"11\",\n    },\n    {\n      source: \"0\",\n      target: \"13\",\n    },\n    {\n      source: \"0\",\n      target: \"14\",\n    },\n    {\n      source: \"0\",\n      target: \"15\",\n    },\n    {\n      source: \"2\",\n      target: \"3\",\n    },\n    {\n      source: \"4\",\n      target: \"5\",\n    },\n    {\n      source: \"4\",\n      target: \"6\",\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n    },\n    {\n      source: \"7\",\n      target: \"13\",\n    },\n    {\n      source: \"8\",\n      target: \"14\",\n    },\n    {\n      source: \"9\",\n      target: \"10\",\n    },\n    {\n      source: \"10\",\n      target: \"14\",\n    },\n    {\n      source: \"10\",\n      target: \"12\",\n    },\n    {\n      source: \"11\",\n      target: \"14\",\n    },\n    {\n      source: \"12\",\n      target: \"13\",\n    },\n  ],\n};\n\nexport default data;\n"
  },
  {
    "path": "packages/site/examples/demo/plugins/zoom-slider/index.js",
    "content": "import { ZoomSlider } from \"@antv/f6-plugin\";\nimport data from \"./data\";\nimport F6 from \"@antv/f6\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst zoomSlider = new ZoomSlider();\nconst graph = new F6.Graph({\n  context: ctx,\n  width,\n  height,\n  pixelRatio,\n  linkCenter: true,\n  renderer,\n  defaultNode: {\n    size: 30,\n  },\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"drag-node\"],\n  },\n  plugins: [zoomSlider],\n});\ngraph.data(data);\ngraph.render();\ngraph.get(\"canvas\").set(\"localRefresh\", false);\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/custom-flow/data.js",
    "content": "export default {\n  nodes: [\n    {\n      id: \"1\",\n      label: \"Company1\",\n    },\n    {\n      id: \"2\",\n      label: \"Company2\",\n    },\n    {\n      id: \"3\",\n      label: \"Company3\",\n    },\n    {\n      id: \"4\",\n      label: \"Company4\",\n    },\n    {\n      id: \"5\",\n      label: \"Company5\",\n    },\n    {\n      id: \"6\",\n      label: \"Company6\",\n    },\n    {\n      id: \"7\",\n      label: \"Company7\",\n    },\n    {\n      id: \"8\",\n      label: \"Company8\",\n    },\n    {\n      id: \"9\",\n      label: \"Company9\",\n    },\n  ],\n  edges: [\n    {\n      source: \"1\",\n      target: \"2\",\n      data: {\n        type: \"A\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"3\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"2\",\n      target: \"5\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"5\",\n      target: \"6\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"3\",\n      target: \"4\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"4\",\n      target: \"7\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"8\",\n      data: {\n        type: \"B\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n    {\n      source: \"1\",\n      target: \"9\",\n      data: {\n        type: \"C\",\n        amount: \"100,000 Yuan\",\n        date: \"2019-08-03\",\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/custom-flow/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport data from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nimport { isObject } from \"@antv/util\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nconst colorMap = {\n  A: \"#72CC4A\",\n  B: \"#1A91FF\",\n  C: \"#FFAA15\",\n};\nF6.registerNode(\n  \"round-rect\",\n  {\n    drawShape: function drawShape(cfg, group) {\n      const { width } = cfg.style;\n      const { stroke } = cfg.style;\n      const rect = group.addShape(\"rect\", {\n        attrs: {\n          x: -width / 2,\n          y: -15,\n          width,\n          height: 30,\n          radius: 15,\n          stroke,\n          lineWidth: 1.2,\n          fillOpacity: 1,\n        },\n        name: \"rect-shape\",\n      });\n      group.addShape(\"circle\", {\n        attrs: {\n          x: -width / 2,\n          y: 0,\n          r: 3,\n          fill: stroke,\n        },\n        name: \"circle-shape\",\n      });\n      group.addShape(\"circle\", {\n        attrs: {\n          x: width / 2,\n          y: 0,\n          r: 3,\n          fill: stroke,\n        },\n        name: \"circle-shape2\",\n      });\n      return rect;\n    },\n    getAnchorPoints: function getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n    update: function update(cfg, item) {\n      const group = item.getContainer();\n      const children = group.get(\"children\");\n      const node = children[0];\n      const circleLeft = children[1];\n      const circleRight = children[2];\n      const { stroke } = cfg.style;\n\n      if (stroke) {\n        node.attr(\"stroke\", stroke);\n        circleLeft.attr(\"fill\", stroke);\n        circleRight.attr(\"fill\", stroke);\n      }\n    },\n  },\n  \"single-node\",\n);\nF6.registerEdge(\"fund-polyline\", {\n  itemType: \"edge\",\n  draw: function draw(cfg, group) {\n    const { startPoint } = cfg;\n    const { endPoint } = cfg;\n    const { stroke } = cfg.style;\n    const Ydiff = endPoint.y - startPoint.y;\n    const slope = Ydiff !== 0 ? Math.min(500 / Math.abs(Ydiff), 20) : 0;\n    const cpOffset = slope > 15 ? 0 : 16;\n    const offset = Ydiff < 0 ? cpOffset : -cpOffset;\n    const line1EndPoint = {\n      x: startPoint.x + slope,\n      y: endPoint.y + offset,\n    };\n    const line2StartPoint = {\n      x: line1EndPoint.x + cpOffset,\n      y: endPoint.y,\n    };\n    const controlPoint = {\n      x:\n        ((line1EndPoint.x - startPoint.x) * (endPoint.y - startPoint.y)) /\n          (line1EndPoint.y - startPoint.y) +\n        startPoint.x,\n      y: endPoint.y,\n    };\n    let path = [\n      [\"M\", startPoint.x, startPoint.y],\n      [\"L\", line1EndPoint.x, line1EndPoint.y],\n      [\n        \"Q\",\n        controlPoint.x,\n        controlPoint.y,\n        line2StartPoint.x,\n        line2StartPoint.y,\n      ],\n      [\"L\", endPoint.x, endPoint.y],\n    ];\n\n    if (Math.abs(Ydiff) <= 5) {\n      path = [\n        [\"M\", startPoint.x, startPoint.y],\n        [\"L\", endPoint.x, endPoint.y],\n      ];\n    }\n\n    const endArrow =\n      cfg.style && cfg.style.endArrow ? cfg.style.endArrow : false;\n    if (isObject(endArrow)) endArrow.fill = stroke;\n    const line = group.addShape(\"path\", {\n      attrs: {\n        path,\n        stroke: colorMap[cfg.data && cfg.data.type],\n        lineWidth: 1.2,\n        endArrow,\n      },\n      name: \"path-shape\",\n    });\n    const labelLeftOffset = 0;\n    const labelTopOffset = 8;\n    const amount = group.addShape(\"text\", {\n      attrs: {\n        text: cfg.data && cfg.data.amount,\n        x: line2StartPoint.x + labelLeftOffset,\n        y: endPoint.y - labelTopOffset - 2,\n        fontSize: 14,\n        textAlign: \"left\",\n        textBaseline: \"middle\",\n        fill: \"#000000D9\",\n      },\n      name: \"text-shape-amount\",\n    });\n    group.addShape(\"text\", {\n      attrs: {\n        text: cfg.data && cfg.data.type,\n        x: line2StartPoint.x + labelLeftOffset,\n        y: endPoint.y - labelTopOffset - amount.getBBox().height - 2,\n        fontSize: 10,\n        textAlign: \"left\",\n        textBaseline: \"middle\",\n        fill: \"#000000D9\",\n      },\n      name: \"text-shape-type\",\n    });\n    group.addShape(\"text\", {\n      attrs: {\n        text: cfg.data && cfg.data.date,\n        x: line2StartPoint.x + labelLeftOffset,\n        y: endPoint.y + labelTopOffset + 4,\n        fontSize: 12,\n        fontWeight: 300,\n        textAlign: \"left\",\n        textBaseline: \"middle\",\n        fill: \"#000000D9\",\n      },\n      name: \"text-shape-date\",\n    });\n    return line;\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  layout: {\n    type: \"dagre\",\n    rankdir: \"LR\",\n    nodesep: 30,\n    ranksep: 100,\n  },\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultNode: {\n    type: \"round-rect\",\n    labelCfg: {\n      style: {\n        fill: \"#000000A6\",\n        fontSize: 10,\n      },\n    },\n    style: {\n      stroke: \"#72CC4A\",\n      width: 150,\n    },\n  },\n  defaultEdge: {\n    type: \"fund-polyline\",\n  },\n});\ngraph.data(data);\ngraph.render();\nconst edges = graph.getEdges();\nedges.forEach(function (edge) {\n  const line = edge.getKeyShape();\n  const stroke = line.attr(\"stroke\");\n  const targetNode = edge.getTarget();\n  targetNode.update({\n    style: {\n      stroke,\n    },\n  });\n});\ngraph.paint();\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/decision-tree/data.js",
    "content": "export default {\n  id: \"g1\",\n  name: \"Name1\",\n  count: 123456,\n  label: \"538.90\",\n  currency: \"Yuan\",\n  rate: 1.0,\n  status: \"B\",\n  variableName: \"V1\",\n  variableValue: 0.341,\n  variableUp: false,\n  children: [\n    {\n      id: \"g12\",\n      name: \"Deal with LONG label LONG label LONG label LONG label\",\n      count: 123456,\n      label: \"338.00\",\n      rate: 0.627,\n      status: \"R\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.179,\n      variableUp: true,\n      children: [\n        {\n          id: \"g121\",\n          name: \"Name3\",\n          collapsed: true,\n          count: 123456,\n          label: \"138.00\",\n          rate: 0.123,\n          status: \"B\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.27,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1211\",\n              name: \"Name4\",\n              count: 123456,\n              label: \"138.00\",\n              rate: 1.0,\n              status: \"B\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.164,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g122\",\n          name: \"Name5\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.259,\n          variableUp: true,\n          children: [\n            {\n              id: \"g1221\",\n              name: \"Name6\",\n              count: 123456,\n              label: \"40.00\",\n              rate: 0.4,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.135,\n              variableUp: true,\n              children: [\n                {\n                  id: \"g12211\",\n                  name: \"Name6-1\",\n                  count: 123456,\n                  label: \"40.00\",\n                  rate: 1.0,\n                  status: \"R\",\n                  currency: \"Yuan\",\n                  variableName: \"V1\",\n                  variableValue: 0.181,\n                  variableUp: true,\n                  children: [],\n                },\n              ],\n            },\n            {\n              id: \"g1222\",\n              name: \"Name7\",\n              count: 123456,\n              label: \"60.00\",\n              rate: 0.6,\n              status: \"G\",\n              currency: \"Yuan\",\n              variableName: \"V1\",\n              variableValue: 0.239,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"g123\",\n          name: \"Name8\",\n          collapsed: true,\n          count: 123456,\n          label: \"100.00\",\n          rate: 0.296,\n          status: \"DI\",\n          currency: \"Yuan\",\n          variableName: \"V2\",\n          variableValue: 0.131,\n          variableUp: false,\n          children: [\n            {\n              id: \"g1231\",\n              name: \"Name8-1\",\n              count: 123456,\n              label: \"100.00\",\n              rate: 1.0,\n              status: \"DI\",\n              currency: \"Yuan\",\n              variableName: \"V2\",\n              variableValue: 0.131,\n              variableUp: false,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"g13\",\n      name: \"Name9\",\n      count: 123456,\n      label: \"100.90\",\n      rate: 0.187,\n      status: \"B\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.221,\n      variableUp: true,\n      children: [\n        {\n          id: \"g131\",\n          name: \"Name10\",\n          count: 123456,\n          label: \"33.90\",\n          rate: 0.336,\n          status: \"R\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.12,\n          variableUp: true,\n          children: [],\n        },\n        {\n          id: \"g132\",\n          name: \"Name11\",\n          count: 123456,\n          label: \"67.00\",\n          rate: 0.664,\n          status: \"G\",\n          currency: \"Yuan\",\n          variableName: \"V1\",\n          variableValue: 0.241,\n          variableUp: false,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"g14\",\n      name: \"Name12\",\n      count: 123456,\n      label: \"100.00\",\n      rate: 0.186,\n      status: \"G\",\n      currency: \"Yuan\",\n      variableName: \"V2\",\n      variableValue: 0.531,\n      variableUp: true,\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/decision-tree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport mockData from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst colors = {\n  B: \"#5B8FF9\",\n  R: \"#F46649\",\n  Y: \"#EEBC20\",\n  G: \"#5BD8A6\",\n  DI: \"#A7A7A7\",\n};\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst defaultConfig = {\n  width,\n  height,\n  modes: {\n    default: [\"zoom-canvas\", \"drag-canvas\"],\n  },\n  fitView: true,\n  animate: true,\n  defaultNode: {\n    type: \"flow-rect\",\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      stroke: \"#CED4D9\",\n    },\n  },\n  layout: {\n    type: \"indented\",\n    direction: \"LR\",\n    dropCap: false,\n    indent: 300,\n    getHeight: () => {\n      return 60;\n    },\n  },\n};\nconst props = {\n  data: mockData,\n  config: {\n    padding: [20, 50],\n    defaultLevel: 3,\n    defaultZoom: 0.8,\n    modes: {\n      default: [\"zoom-canvas\", \"drag-canvas\"],\n    },\n  },\n};\n\nconst registerFn = () => {\n  F6.registerNode(\n    \"flow-rect\",\n    {\n      shapeType: \"flow-rect\",\n\n      draw(cfg, group) {\n        const {\n          name = \"\",\n          variableName,\n          variableValue,\n          variableUp,\n          label,\n          collapsed,\n          currency,\n          status,\n        } = cfg;\n        const grey = \"#CED4D9\";\n        const rectConfig = {\n          width: 202,\n          height: 60,\n          lineWidth: 1,\n          fontSize: 12,\n          fill: \"#fff\",\n          radius: 4,\n          stroke: grey,\n          opacity: 1,\n        };\n        const nodeOrigin = {\n          x: -rectConfig.width / 2,\n          y: -rectConfig.height / 2,\n        };\n        const textConfig = {\n          textAlign: \"left\",\n          textBaseline: \"bottom\",\n        };\n        const rect = group.addShape(\"rect\", {\n          attrs: {\n            x: nodeOrigin.x,\n            y: nodeOrigin.y,\n            ...rectConfig,\n          },\n        });\n        const rectBBox = rect.getBBox();\n        group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: 12 + nodeOrigin.x,\n            y: 20 + nodeOrigin.y,\n            text: name.length > 28 ? `${name.substr(0, 28)}...` : name,\n            fontSize: 12,\n            opacity: 0.85,\n            fill: \"#000\",\n            cursor: \"pointer\",\n          },\n          name: \"name-shape\",\n        });\n        const price = group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: 12 + nodeOrigin.x,\n            y: rectBBox.maxY - 12,\n            text: label,\n            fontSize: 16,\n            fill: \"#000\",\n            opacity: 0.85,\n          },\n        });\n        group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: price.getBBox().maxX + 5,\n            y: rectBBox.maxY - 12,\n            text: currency,\n            fontSize: 12,\n            fill: \"#000\",\n            opacity: 0.75,\n          },\n        });\n        const percentText = group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: rectBBox.maxX - 8,\n            y: rectBBox.maxY - 12,\n            text: `${((variableValue || 0) * 100).toFixed(2)}%`,\n            fontSize: 12,\n            textAlign: \"right\",\n            fill: colors[status],\n          },\n        });\n        const symbol = variableUp ? \"triangle\" : \"triangle-down\";\n        const triangle = group.addShape(\"marker\", {\n          attrs: {\n            ...textConfig,\n            x: percentText.getBBox().minX - 10,\n            y: rectBBox.maxY - 12 - 6,\n            symbol,\n            r: 6,\n            fill: colors[status],\n          },\n        });\n        group.addShape(\"text\", {\n          attrs: {\n            ...textConfig,\n            x: triangle.getBBox().minX - 4,\n            y: rectBBox.maxY - 12,\n            text: variableName,\n            fontSize: 12,\n            textAlign: \"right\",\n            fill: \"#000\",\n            opacity: 0.45,\n          },\n        });\n\n        if (cfg.children && cfg.children.length) {\n          group.addShape(\"rect\", {\n            attrs: {\n              x: rectConfig.width / 2 - 8,\n              y: -8,\n              width: 16,\n              height: 16,\n              stroke: \"rgba(0, 0, 0, 0.25)\",\n              cursor: \"pointer\",\n              fill: \"#fff\",\n            },\n            name: \"collapse-back\",\n            modelId: cfg.id,\n          });\n          group.addShape(\"text\", {\n            attrs: {\n              x: rectConfig.width / 2,\n              y: -1,\n              textAlign: \"center\",\n              textBaseline: \"middle\",\n              text: collapsed ? \"+\" : \"-\",\n              fontSize: 16,\n              cursor: \"pointer\",\n              fill: \"rgba(0, 0, 0, 0.25)\",\n            },\n            name: \"collapse-text\",\n            modelId: cfg.id,\n          });\n        }\n\n        this.drawLinkPoints(cfg, group);\n        return rect;\n      },\n\n      update(cfg, item) {\n        const group = item.getContainer();\n        this.updateLinkPoints(cfg, group);\n      },\n\n      setState(name, value, item) {\n        if (name === \"collapse\") {\n          const group = item.getContainer();\n          const collapseText = group.find(\n            (e) => e.get(\"name\") === \"collapse-text\",\n          );\n\n          if (collapseText) {\n            if (!value) {\n              collapseText.attr({\n                text: \"-\",\n              });\n            } else {\n              collapseText.attr({\n                text: \"+\",\n              });\n            }\n          }\n        }\n      },\n\n      getAnchorPoints() {\n        return [\n          [0, 0.5],\n          [1, 0.5],\n        ];\n      },\n    },\n    \"rect\",\n  );\n  F6.registerEdge(\n    \"flow-cubic\",\n    {\n      getControlPoints(cfg) {\n        let { controlPoints } = cfg;\n\n        if (!controlPoints || !controlPoints.length) {\n          const { startPoint, endPoint, sourceNode, targetNode } = cfg;\n          const {\n            x: startX,\n            y: startY,\n            coefficientX,\n            coefficientY,\n          } = sourceNode ? sourceNode.getModel() : startPoint;\n          const { x: endX, y: endY } = targetNode\n            ? targetNode.getModel()\n            : endPoint;\n          let curveStart = (endX - startX) * coefficientX;\n          let curveEnd = (endY - startY) * coefficientY;\n          curveStart = curveStart > 40 ? 40 : curveStart;\n          curveEnd = curveEnd < -30 ? curveEnd : -30;\n          controlPoints = [\n            {\n              x: startPoint.x + curveStart,\n              y: startPoint.y,\n            },\n            {\n              x: endPoint.x + curveEnd,\n              y: endPoint.y,\n            },\n          ];\n        }\n\n        return controlPoints;\n      },\n\n      getPath(points) {\n        const path = [];\n        path.push([\"M\", points[0].x, points[0].y]);\n        path.push([\n          \"C\",\n          points[1].x,\n          points[1].y,\n          points[2].x,\n          points[2].y,\n          points[3].x,\n          points[3].y,\n        ]);\n        return path;\n      },\n    },\n    \"single-line\",\n  );\n};\n\nregisterFn();\nconst { onInit, config } = props;\nconsole.log(onInit);\nconst tooltip = new F6.Tooltip({\n  offsetX: 20,\n  offsetY: 30,\n  itemTypes: [\"node\"],\n  getContent: (e) => {\n    const outDiv = document.createElement(\"div\");\n    const nodeName = e.item.getModel().name;\n    let formatedNodeName = \"\";\n\n    for (let i = 0; i < nodeName.length; i++) {\n      formatedNodeName = `${formatedNodeName}${nodeName[i]}`;\n      if (i !== 0 && i % 20 === 0)\n        formatedNodeName = `${formatedNodeName}<br/>`;\n    }\n\n    outDiv.innerHTML = `${formatedNodeName}`;\n    return outDiv;\n  },\n  shouldBegin: (e) => {\n    if (e.target.get(\"name\") === \"name-shape\") return true;\n    return false;\n  },\n});\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  ...defaultConfig,\n  ...config,\n  plugins: [tooltip],\n});\ngraph.data(mockData);\ngraph.render();\ngraph.fitView();\ngraph.zoom(config.defaultZoom || 1);\n\nconst handleCollapse = (e) => {\n  const { target } = e;\n  const id = target.get(\"modelId\");\n  const item = graph.findById(id);\n  const nodeModel = item.getModel();\n  nodeModel.collapsed = !nodeModel.collapsed;\n  graph.layout();\n  graph.setItemState(item, \"collapse\", nodeModel.collapsed);\n};\n\ngraph.on(\"collapse-text:tap\", (e) => {\n  handleCollapse(e);\n});\ngraph.on(\"collapse-back:tap\", (e) => {\n  handleCollapse(e);\n});\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/donut-transfer/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"person A\",\n      label: \"person A\",\n      // the attributes for drawing donut\n      donutAttrs: {\n        income: 10,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person B\",\n      label: \"person B\",\n      donutAttrs: {\n        income: 20,\n        outcome: 10,\n        unknown: 5,\n      },\n    },\n    {\n      id: \"person C\",\n      label: \"person C\",\n      donutAttrs: {\n        income: 200,\n        outcome: 20,\n        unknown: 25,\n      },\n    },\n    {\n      id: \"person D\",\n      label: \"person D\",\n      donutAttrs: {\n        income: 50,\n        outcome: 10,\n        unknown: 15,\n      },\n    },\n    {\n      id: \"person E\",\n      label: \"person E\",\n      donutAttrs: {\n        income: 80,\n        outcome: 40,\n        unknown: 45,\n      },\n    },\n    {\n      id: \"person F\",\n      label: \"person F\",\n      donutAttrs: {\n        income: 90,\n        outcome: 110,\n        unknown: 15,\n      },\n    },\n  ],\n  edges: [\n    { source: \"person C\", target: \"person F\", size: 10 },\n    { source: \"person B\", target: \"person A\", size: 5 },\n    { source: \"person D\", target: \"person E\", size: 20 },\n    { source: \"person D\", target: \"person C\", size: 5 },\n    { source: \"person B\", target: \"person C\", size: 10 },\n    { source: \"person A\", target: \"person C\", size: 5 },\n  ],\n};\n\ndata.edges.forEach((edge) => {\n  edge.label = `Transfer $${edge.size}`;\n});\n\nconst colors = {\n  income: \"#61DDAA\",\n  outcome: \"#F08BB4\",\n  unknown: \"#65789B\",\n};\n\ndata.nodes.forEach((node) => {\n  node.donutColorMap = colors;\n  node.size = 0;\n  Object.keys(node.donutAttrs).forEach((key) => {\n    node.size += node.donutAttrs[key];\n  });\n  node.size = Math.sqrt(node.size) * 5;\n});\n\nconst legendData = {\n  nodes: [\n    {\n      id: \"income\",\n      label: \"Income\",\n      order: 0,\n      style: {\n        fill: \"#61DDAA\",\n      },\n    },\n    {\n      id: \"outcome\",\n      label: \"Outcome\",\n      order: 2,\n      style: {\n        fill: \"#F08BB4\",\n      },\n    },\n    {\n      id: \"unknown\",\n      label: \"Unknown\",\n      order: 2,\n      style: {\n        fill: \"#65789B\",\n      },\n    },\n  ],\n};\n\nexport { data, legendData };\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/donut-transfer/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { data, legendData } from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst legend = new F6.Legend({\n  data: legendData,\n  align: \"center\",\n  layout: \"horizontal\",\n  position: \"bottom-left\",\n  vertiSep: 12,\n  horiSep: 24,\n  offsetY: -24,\n  padding: [4, 16, 8, 16],\n  containerStyle: {\n    fill: \"#ccc\",\n    lineWidth: 1,\n  },\n  title: \" \",\n  titleConfig: {\n    offsetY: -8,\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitCenter: true,\n  plugins: [legend],\n  modes: {\n    default: [\"drag-canvas\", \"drag-node\"],\n  },\n  layout: {\n    type: \"radial\",\n    focusNode: \"li\",\n    linkDistance: 200,\n    unitRadius: 200,\n  },\n  defaultEdge: {\n    style: {\n      endArrow: true,\n    },\n    labelCfg: {\n      autoRotate: true,\n      style: {\n        stroke: \"#fff\",\n        lineWidth: 5,\n      },\n    },\n  },\n  defaultNode: {\n    type: \"donut\",\n    style: {\n      lineWidth: 0,\n    },\n    labelCfg: {\n      position: \"bottom\",\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.on(\"node:tap\", (evt) => {\n  const { item } = evt;\n  graph.setItemState(item, \"selected\", true);\n});\ngraph.on(\"canvas:tap\", () => {\n  graph.getNodes().forEach((node) => {\n    graph.clearItemStates(node);\n  });\n});\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/knowledge-tree-graph/data.js",
    "content": "export default {\n  id: \"200000004\",\n  tooltip: \"Thing\",\n  label: \"事物\",\n  description: null,\n  descriptionZh: null,\n  depth: 3,\n  subTypeCount: 9,\n  status: 0,\n  children: [\n    {\n      id: \"500000061\",\n      tooltip: \"Person\",\n      label: \"自然人\",\n      description: null,\n      descriptionZh: null,\n      depth: 1,\n      subTypeCount: 1,\n      status: 0,\n      children: [\n        {\n          id: \"707000085\",\n          tooltip: \"FilmPerson\",\n          label: \"电影人\",\n          description: null,\n          descriptionZh: null,\n          depth: 5,\n          subTypeCount: 3,\n          status: 1,\n          children: [\n            {\n              id: \"707000090\",\n              tooltip: \"FilmDirector\",\n              label: \"电影导演\",\n              description: null,\n              descriptionZh: null,\n              depth: 0,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000091\",\n              tooltip: \"FilmWriter\",\n              label: \"电影编剧\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000092\",\n              tooltip: \"FilmStar\",\n              label: \"电影主演\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n          ],\n        },\n        {\n          id: \"707000086\",\n          tooltip: \"MusicPerson\",\n          label: \"音乐人\",\n          description: null,\n          descriptionZh: null,\n          depth: 17,\n          subTypeCount: 2,\n          status: 1,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"200000005\",\n      tooltip: \"Music\",\n      label: \"音乐\",\n      description: null,\n      descriptionZh: null,\n      depth: 3,\n      subTypeCount: 2,\n      status: 1,\n      children: [],\n    },\n    {\n      id: \"707000128\",\n      tooltip: \"Film\",\n      label: \"电影\",\n      description: null,\n      descriptionZh: null,\n      depth: 4,\n      subTypeCount: 0,\n      status: 1,\n      children: [\n        {\n          id: \"7070032328\",\n          tooltip: \"Comedy\",\n          label: \"喜剧\",\n          description: null,\n          descriptionZh: null,\n          depth: 4,\n          operation: \"C\",\n          subTypeCount: 0,\n          status: 1,\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"707000095\",\n      tooltip: \"FilmGenre\",\n      label: \"电影类别\",\n      description: null,\n      descriptionZh: null,\n      depth: 4,\n      subTypeCount: 0,\n      status: 1,\n      children: [],\n    },\n    {\n      id: \"702000021\",\n      tooltip: \"Organization\",\n      label: \"机构\",\n      description: null,\n      descriptionZh: null,\n      depth: 47,\n      subTypeCount: 1,\n      status: 0,\n      children: [\n        {\n          id: \"500000063\",\n          tooltip: \"Company\",\n          label: \"公司\",\n          description: null,\n          descriptionZh: null,\n          depth: 4,\n          subTypeCount: 2,\n          status: 1,\n          children: [\n            {\n              id: \"707000093\",\n              tooltip: \"FilmCompany\",\n              label: \"电影公司\",\n              description: null,\n              descriptionZh: null,\n              depth: 4,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n            {\n              id: \"707000094\",\n              tooltip: \"MusicCompany\",\n              label: \"音乐公司\",\n              description: null,\n              descriptionZh: null,\n              depth: 2,\n              subTypeCount: 0,\n              status: 1,\n              children: [],\n            },\n          ],\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/knowledge-tree-graph/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst minWidth = 60;\nconst BaseConfig = {\n  nameFontSize: 12,\n  childCountWidth: 22,\n  countMarginLeft: 0,\n  itemPadding: 16,\n  nameMarginLeft: 4,\n  rootPadding: 18,\n};\nF6.registerNode(\"treeNode\", {\n  draw: (cfg, group) => {\n    const { label, collapsed, selected, children, depth } = cfg;\n    const rootNode = depth === 0;\n    const hasChildren = children && children.length !== 0;\n    const {\n      childCountWidth,\n      countMarginLeft,\n      itemPadding,\n      nameMarginLeft,\n      rootPadding,\n    } = BaseConfig;\n    let width = 0;\n    const height = 28;\n    const x = 0;\n    const y = -height / 2;\n    const text = group.addShape(\"text\", {\n      attrs: {\n        text: label,\n        x: x * 2,\n        y,\n        textAlign: \"left\",\n        textBaseline: \"top\",\n        fontFamily: \"PingFangSC-Regular\",\n      },\n      cursor: \"pointer\",\n      name: \"name-text-shape\",\n    });\n    const textWidth = text.getBBox().width;\n    width = textWidth + itemPadding + nameMarginLeft;\n    width = width < minWidth ? minWidth : width;\n\n    if (!rootNode && hasChildren) {\n      width += countMarginLeft;\n      width += childCountWidth;\n    }\n\n    const keyShapeAttrs = {\n      x,\n      y,\n      width,\n      height,\n      radius: 4,\n    };\n\n    if (rootNode && selected) {\n      keyShapeAttrs.fill = \"#e8f7ff\";\n      keyShapeAttrs.stroke = \"#e8f7ff\";\n    }\n\n    const keyShape = group.addShape(\"rect\", {\n      attrs: keyShapeAttrs,\n      name: \"root-key-shape-rect-shape\",\n    });\n\n    if (!rootNode) {\n      group.addShape(\"path\", {\n        attrs: {\n          path: [\n            [\"M\", x - 1, 0],\n            [\"L\", width, 0],\n          ],\n          stroke: \"#AAB7C4\",\n          lineWidth: 1,\n        },\n        name: \"node-path-shape\",\n      });\n    }\n\n    const mainX = x - 10;\n    const mainY = -height + 15;\n\n    if (rootNode) {\n      group.addShape(\"rect\", {\n        attrs: {\n          x: mainX,\n          y: mainY,\n          width: width + 12,\n          height,\n          radius: 14,\n          fill: \"#e8f7ff\",\n          cursor: \"pointer\",\n        },\n        name: \"main-shape\",\n      });\n    }\n\n    let nameColor = \"rgba(0, 0, 0, .65)\";\n\n    if (selected) {\n      nameColor = \"#40A8FF\";\n    }\n\n    if (rootNode) {\n      group.addShape(\"text\", {\n        attrs: {\n          text: label,\n          x: mainX + rootPadding,\n          y: 1,\n          textAlign: \"left\",\n          textBaseline: \"middle\",\n          fill: nameColor,\n          fontSize: 12,\n          fontFamily: \"PingFangSC-Regular\",\n          cursor: \"pointer\",\n        },\n        name: \"root-text-shape\",\n      });\n    } else {\n      group.addShape(\"text\", {\n        attrs: {\n          text: label,\n          x: selected ? mainX + 6 + nameMarginLeft : mainX + 6,\n          y: y - 5,\n          textAlign: \"start\",\n          textBaseline: \"top\",\n          fill: nameColor,\n          fontSize: 12,\n          fontFamily: \"PingFangSC-Regular\",\n          cursor: \"pointer\",\n        },\n        name: \"not-root-text-shape\",\n      });\n    }\n\n    if (hasChildren && !rootNode) {\n      const childCountHeight = 12;\n      const childCountX = width - childCountWidth;\n      const childCountY = -childCountHeight / 2;\n      group.addShape(\"rect\", {\n        attrs: {\n          width: childCountWidth,\n          height: 12,\n          stroke: collapsed ? \"#1890ff\" : \"#5CDBD3\",\n          fill: collapsed ? \"#fff\" : \"#E6FFFB\",\n          x: childCountX,\n          y: childCountY,\n          radius: 6,\n          cursor: \"pointer\",\n        },\n        name: \"child-count-rect-shape\",\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          text: `${children.length}`,\n          fill: \"rgba(0, 0, 0, .65)\",\n          x: childCountX + childCountWidth / 2,\n          y: childCountY + 12,\n          fontSize: 10,\n          width: childCountWidth,\n          textAlign: \"center\",\n          cursor: \"pointer\",\n        },\n        name: \"child-count-text-shape\",\n      });\n    }\n\n    return keyShape;\n  },\n});\nF6.registerEdge(\"smooth\", {\n  draw(cfg, group) {\n    const { startPoint, endPoint } = cfg;\n    const hgap = Math.abs(endPoint.x - startPoint.x);\n    const path = [\n      [\"M\", startPoint.x, startPoint.y],\n      [\n        \"C\",\n        startPoint.x + hgap / 4,\n        startPoint.y,\n        endPoint.x - hgap / 2,\n        endPoint.y,\n        endPoint.x,\n        endPoint.y,\n      ],\n    ];\n    const shape = group.addShape(\"path\", {\n      attrs: {\n        stroke: \"#AAB7C4\",\n        path,\n      },\n      name: \"smooth-path-shape\",\n    });\n    return shape;\n  },\n});\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: 60,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    type: \"treeNode\",\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"smooth\",\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth(d) {\n      const labelWidth = F6.Util.getTextSize(\n        d.label,\n        BaseConfig.nameFontSize,\n      )[0];\n      const width_ =\n        BaseConfig.itemPadding +\n        BaseConfig.nameMarginLeft +\n        labelWidth +\n        BaseConfig.rootPadding +\n        BaseConfig.childCountWidth;\n      return width_;\n    },\n    getVGap: function getVGap() {\n      return 15;\n    },\n    getHGap: function getHGap() {\n      return 30;\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/metro-lines/data.js",
    "content": "const data = {\n  nodes: [\n    {\n      id: \"0\",\n      x: 12955418.07889617,\n      y: 4858516.455509626,\n      class: \"地铁二号线\",\n      name: \"地铁二号线 0\",\n    },\n    {\n      id: \"1\",\n      x: 12955418.07889617,\n      y: 4858516.455509626,\n      class: \"地铁二号线\",\n      name: \"地铁二号线 1\",\n    },\n    {\n      id: \"2\",\n      x: 12960805.702543395,\n      y: 4843623.153783939,\n      class: \"地铁五号线\",\n      name: \"地铁五号线 0\",\n    },\n    {\n      id: \"3\",\n      x: 12957909.41496727,\n      y: 4878612.7284845,\n      class: \"地铁五号线\",\n      name: \"地铁五号线 1\",\n    },\n    {\n      id: \"4\",\n      x: 12924431.591067636,\n      y: 4826881.565994551,\n      class: \"地铁房山线\",\n      name: \"地铁房山线 0\",\n    },\n    {\n      id: \"5\",\n      x: 12946675.914777644,\n      y: 4839000.571326079,\n      class: \"地铁房山线\",\n      name: \"地铁房山线 1\",\n    },\n    {\n      id: \"6\",\n      x: 12960805.702543395,\n      y: 4843623.153783939,\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 0\",\n    },\n    {\n      id: \"7\",\n      x: 12980513.522539986,\n      y: 4840611.685434834,\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 1\",\n    },\n    {\n      id: \"8\",\n      x: 12970460.425604625,\n      y: 4852660.505494347,\n      class: \"地铁一号线\",\n      name: \"地铁一号线 0\",\n    },\n    {\n      id: \"9\",\n      x: 12932857.683691781,\n      y: 4855262.558461167,\n      class: \"地铁一号线\",\n      name: \"地铁一号线 1\",\n    },\n    {\n      id: \"10\",\n      x: 12954336.341521818,\n      y: 4841957.844498525,\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 0\",\n    },\n    {\n      id: \"11\",\n      x: 12948661.393356105,\n      y: 4818156.255552412,\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 1\",\n    },\n    {\n      id: \"12\",\n      x: 12954336.341521818,\n      y: 4841957.844498525,\n      class: \"地铁四号线\",\n      name: \"地铁四号线 0\",\n    },\n    {\n      id: \"13\",\n      x: 12943094.565471629,\n      y: 4868005.960957178,\n      class: \"地铁四号线\",\n      name: \"地铁四号线 1\",\n    },\n    {\n      id: \"14\",\n      x: 12943697.439571828,\n      y: 4856096.365355702,\n      class: \"地铁六号线\",\n      name: \"地铁六号线 0\",\n    },\n    {\n      id: \"15\",\n      x: 12982538.96049167,\n      y: 4855210.774849254,\n      class: \"地铁六号线\",\n      name: \"地铁六号线 1\",\n    },\n    {\n      id: \"16\",\n      x: 12946675.914777644,\n      y: 4839000.571326079,\n      class: \"地铁九号线\",\n      name: \"地铁九号线 0\",\n    },\n    {\n      id: \"17\",\n      x: 12949261.040454354,\n      y: 4857656.700765552,\n      class: \"地铁九号线\",\n      name: \"地铁九号线 1\",\n    },\n    {\n      id: \"18\",\n      x: 12956918.23852815,\n      y: 4858529.6221339535,\n      class: \"地铁八号线\",\n      name: \"地铁八号线 0\",\n    },\n    {\n      id: \"19\",\n      x: 12957923.222643975,\n      y: 4856285.931514598,\n      class: \"地铁八号线\",\n      name: \"地铁八号线 1\",\n    },\n    {\n      id: \"20\",\n      x: 12947165.66572366,\n      y: 4873622.718414709,\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 0\",\n    },\n    {\n      id: \"21\",\n      x: 12945101.617382836,\n      y: 4896059.0154147735,\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 1\",\n    },\n    {\n      id: \"22\",\n      x: 12970460.425604625,\n      y: 4852660.505494347,\n      class: \"地铁八通线\",\n      name: \"地铁八通线 0\",\n    },\n    {\n      id: \"23\",\n      x: 12989768.23411335,\n      y: 4847232.117513346,\n      class: \"地铁八通线\",\n      name: \"地铁八通线 1\",\n    },\n    {\n      id: \"24\",\n      x: 12961385.775293019,\n      y: 4857425.3359782435,\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 0\",\n    },\n    {\n      id: \"25\",\n      x: 12952415.003097966,\n      y: 4857385.42314959,\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 1\",\n    },\n    {\n      id: \"26\",\n      x: 12964405.448829094,\n      y: 4849043.663728292,\n      class: \"地铁十号线\",\n      name: \"地铁十号线 0\",\n    },\n    {\n      id: \"27\",\n      x: 12945523.914777555,\n      y: 4862157.070927259,\n      class: \"地铁十号线\",\n      name: \"地铁十号线 1\",\n    },\n    {\n      id: \"28\",\n      x: 12937182.6004098,\n      y: 4846484.783681809,\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 0\",\n    },\n    {\n      id: \"29\",\n      x: 12946851.421569752,\n      y: 4846551.5626413245,\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 1\",\n    },\n    {\n      id: \"30\",\n      x: 12975248.324027628,\n      y: 4879080.29109743,\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 0\",\n    },\n    {\n      id: \"31\",\n      x: 12962862.26847603,\n      y: 4865214.088371204,\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 1\",\n    },\n    {\n      id: \"32\",\n      x: 12981143.037271895,\n      y: 4871509.161726701,\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 0\",\n    },\n    {\n      id: \"33\",\n      x: 12961347.967621036,\n      y: 4857396.841326526,\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 1\",\n    },\n  ],\n  edges: [\n    {\n      id: \"0\",\n      source: \"0\",\n      target: \"1\",\n      class: \"地铁二号线\",\n      name: \"地铁二号线 0\",\n      controlPoints: [\n        {\n          x: 12956158.028659772,\n          y: 4858523.099945488,\n        },\n        {\n          x: 12956181.882943347,\n          y: 4858523.313643505,\n        },\n        {\n          x: 12956333.569265882,\n          y: 4858524.675979247,\n        },\n        {\n          x: 12956722.101097316,\n          y: 4858528.426228019,\n        },\n        {\n          x: 12956892.09019568,\n          y: 4858529.577087689,\n        },\n        {\n          x: 12957092.031747662,\n          y: 4858532.537231651,\n        },\n        {\n          x: 12957285.500773665,\n          y: 4858534.624581567,\n        },\n        {\n          x: 12958025.324180173,\n          y: 4858542.359953267,\n        },\n        {\n          x: 12958025.324180173,\n          y: 4858542.359953267,\n        },\n        {\n          x: 12958040.386887064,\n          y: 4858542.398858417,\n        },\n        {\n          x: 12958051.381729262,\n          y: 4858542.39594296,\n        },\n        {\n          x: 12958077.436647858,\n          y: 4858542.626090849,\n        },\n        {\n          x: 12958156.437099922,\n          y: 4858543.794072316,\n        },\n        {\n          x: 12958189.185511772,\n          y: 4858543.944439034,\n        },\n        {\n          x: 12958309.191310784,\n          y: 4858545.279485739,\n        },\n        {\n          x: 12958458.470410347,\n          y: 4858547.406977885,\n        },\n        {\n          x: 12958499.690753505,\n          y: 4858547.988957175,\n        },\n        {\n          x: 12958505.143835366,\n          y: 4858548.099568159,\n        },\n        {\n          x: 12958552.455966821,\n          y: 4858548.335831382,\n        },\n        {\n          x: 12958768.467696369,\n          y: 4858549.399143227,\n        },\n        {\n          x: 12958859.902949648,\n          y: 4858552.977807331,\n        },\n        {\n          x: 12958924.391812265,\n          y: 4858556.413893195,\n        },\n        {\n          x: 12958993.172822965,\n          y: 4858558.959445135,\n        },\n        {\n          x: 12959013.547905065,\n          y: 4858559.7809649445,\n        },\n        {\n          x: 12959327.7774419,\n          y: 4858574.063556792,\n        },\n        {\n          x: 12959423.21800485,\n          y: 4858577.691630111,\n        },\n        {\n          x: 12959426.045447897,\n          y: 4858577.797144458,\n        },\n        {\n          x: 12959659.119375631,\n          y: 4858587.989742429,\n        },\n        {\n          x: 12959737.865294052,\n          y: 4858591.668097373,\n        },\n        {\n          x: 12959846.282077461,\n          y: 4858596.613007342,\n        },\n        {\n          x: 12959955.561247244,\n          y: 4858601.256188295,\n        },\n        {\n          x: 12960095.413179535,\n          y: 4858607.094133126,\n        },\n        {\n          x: 12960179.06451476,\n          y: 4858611.470739427,\n        },\n        {\n          x: 12960222.914558794,\n          y: 4858613.727307291,\n        },\n        {\n          x: 12960421.743963502,\n          y: 4858622.407685848,\n        },\n        {\n          x: 12960445.476249201,\n          y: 4858623.093869879,\n        },\n        {\n          x: 12960629.592854993,\n          y: 4858630.086065551,\n        },\n        {\n          x: 12960751.203872466,\n          y: 4858635.467581922,\n        },\n        {\n          x: 12960848.858819682,\n          y: 4858639.927849644,\n        },\n        {\n          x: 12960917.431335308,\n          y: 4858642.696504292,\n        },\n        {\n          x: 12960954.897539183,\n          y: 4858643.0533597935,\n        },\n        {\n          x: 12960982.959798397,\n          y: 4858642.704017011,\n        },\n        {\n          x: 12961014.781746428,\n          y: 4858640.30966017,\n        },\n        {\n          x: 12961051.662476636,\n          y: 4858634.414079347,\n        },\n        {\n          x: 12961083.478422668,\n          y: 4858626.929183689,\n        },\n        {\n          x: 12961111.532563318,\n          y: 4858617.271161616,\n        },\n        {\n          x: 12961140.594020512,\n          y: 4858604.699543408,\n        },\n        {\n          x: 12961160.7368578,\n          y: 4858593.842589348,\n        },\n        {\n          x: 12961181.649884878,\n          y: 4858581.485318099,\n        },\n        {\n          x: 12961198.850660494,\n          y: 4858569.376089524,\n        },\n        {\n          x: 12961224.140661275,\n          y: 4858547.942074989,\n        },\n        {\n          x: 12961236.424254648,\n          y: 4858536.280756947,\n        },\n        {\n          x: 12961250.296104662,\n          y: 4858521.997990917,\n        },\n        {\n          x: 12961263.585987432,\n          y: 4858506.114455221,\n        },\n        {\n          x: 12961276.44120637,\n          y: 4858488.344153348,\n        },\n        {\n          x: 12961286.408321457,\n          y: 4858473.632750297,\n        },\n        {\n          x: 12961294.63870108,\n          y: 4858460.527513578,\n        },\n        {\n          x: 12961303.735586522,\n          y: 4858443.4908795785,\n        },\n        {\n          x: 12961311.961795231,\n          y: 4858426.312269373,\n        },\n        {\n          x: 12961324.544825437,\n          y: 4858394.384768109,\n        },\n        {\n          x: 12961332.599563174,\n          y: 4858367.639883998,\n        },\n        {\n          x: 12961338.437462995,\n          y: 4858349.099767153,\n        },\n        {\n          x: 12961341.2480161,\n          y: 4858329.523211644,\n        },\n        {\n          x: 12961344.471828079,\n          y: 4858307.641213481,\n        },\n        {\n          x: 12961347.327668607,\n          y: 4858271.276643974,\n        },\n        {\n          x: 12961347.988308016,\n          y: 4858252.824580443,\n        },\n        {\n          x: 12961348.859027859,\n          y: 4858200.010594391,\n        },\n        {\n          x: 12961348.859027859,\n          y: 4858200.0103943935,\n        },\n        {\n          x: 12961347.38216376,\n          y: 4858144.4708304275,\n        },\n        {\n          x: 12961343.338631237,\n          y: 4857930.979484696,\n        },\n        {\n          x: 12961343.002661625,\n          y: 4857896.233210593,\n        },\n        {\n          x: 12961340.747563919,\n          y: 4857737.363889014,\n        },\n        {\n          x: 12961338.592553958,\n          y: 4857671.84297017,\n        },\n        {\n          x: 12961341.18922736,\n          y: 4857596.35911637,\n        },\n        {\n          x: 12961344.975191534,\n          y: 4857477.302133615,\n        },\n        {\n          x: 12961347.967621036,\n          y: 4857396.841326526,\n        },\n        {\n          x: 12961350.020733643,\n          y: 4857318.561403474,\n        },\n        {\n          x: 12961355.68061802,\n          y: 4857153.852373557,\n        },\n        {\n          x: 12961355.680618014,\n          y: 4857153.852273558,\n        },\n        {\n          x: 12961359.731217345,\n          y: 4857006.275839691,\n        },\n        {\n          x: 12961359.731017353,\n          y: 4857006.131939777,\n        },\n        {\n          x: 12961360.845305737,\n          y: 4856963.669545529,\n        },\n        {\n          x: 12961366.890092889,\n          y: 4856784.230691269,\n        },\n        {\n          x: 12961368.58851819,\n          y: 4856746.131025358,\n        },\n        {\n          x: 12961372.266035046,\n          y: 4856660.336259479,\n        },\n        {\n          x: 12961372.829975668,\n          y: 4856646.230202675,\n        },\n        {\n          x: 12961378.034419877,\n          y: 4856495.295969707,\n        },\n        {\n          x: 12961382.403443811,\n          y: 4856377.660000789,\n        },\n        {\n          x: 12961384.942063117,\n          y: 4856311.497820034,\n        },\n        {\n          x: 12961386.465992313,\n          y: 4856243.30465021,\n        },\n        {\n          x: 12961390.674716666,\n          y: 4856107.682763318,\n        },\n        {\n          x: 12961394.329897156,\n          y: 4855999.369524935,\n        },\n        {\n          x: 12961394.516375585,\n          y: 4855993.8847022,\n        },\n        {\n          x: 12961417.584882293,\n          y: 4855310.507392769,\n        },\n        {\n          x: 12961417.694868386,\n          y: 4855307.2384764915,\n        },\n        {\n          x: 12961425.988003194,\n          y: 4855061.622208351,\n        },\n        {\n          x: 12961440.215299333,\n          y: 4854643.566032893,\n        },\n        {\n          x: 12961461.215758536,\n          y: 4854015.5516425,\n        },\n        {\n          x: 12961471.471998505,\n          y: 4853691.795660701,\n        },\n        {\n          x: 12961471.611776885,\n          y: 4853686.561937957,\n        },\n        {\n          x: 12961474.998051625,\n          y: 4853601.811384682,\n        },\n        {\n          x: 12961478.809553925,\n          y: 4853507.031446198,\n        },\n        {\n          x: 12961480.521483717,\n          y: 4853483.915660419,\n        },\n        {\n          x: 12961481.521725276,\n          y: 4853474.174593727,\n        },\n        {\n          x: 12961482.954997385,\n          y: 4853459.926853736,\n        },\n        {\n          x: 12961485.39370743,\n          y: 4853441.314944552,\n        },\n        {\n          x: 12961494.966948297,\n          y: 4853364.78470371,\n        },\n        {\n          x: 12961499.936921315,\n          y: 4853336.948636642,\n        },\n        {\n          x: 12961547.758241706,\n          y: 4853069.064103569,\n        },\n        {\n          x: 12961553.642808063,\n          y: 4853027.336298535,\n        },\n        {\n          x: 12961555.648717735,\n          y: 4853011.198681677,\n        },\n        {\n          x: 12961558.402478581,\n          y: 4852968.599887655,\n        },\n        {\n          x: 12961561.595948681,\n          y: 4852886.1285595605,\n        },\n        {\n          x: 12961562.434182541,\n          y: 4852851.8992535565,\n        },\n        {\n          x: 12961567.092653673,\n          y: 4852663.388779601,\n        },\n        {\n          x: 12961567.151841797,\n          y: 4852661.004664356,\n        },\n        {\n          x: 12961571.615182877,\n          y: 4852499.601380691,\n        },\n        {\n          x: 12961570.762650162,\n          y: 4852327.846076672,\n        },\n        {\n          x: 12961554.898502,\n          y: 4852258.290511526,\n        },\n        {\n          x: 12961533.80510204,\n          y: 4852226.950476327,\n        },\n        {\n          x: 12961502.181787156,\n          y: 4852194.501877436,\n        },\n        {\n          x: 12961463.801001186,\n          y: 4852175.682708853,\n        },\n        {\n          x: 12961419.411661869,\n          y: 4852168.225375068,\n        },\n        {\n          x: 12961360.726703899,\n          y: 4852159.287636606,\n        },\n        {\n          x: 12961305.806766747,\n          y: 4852155.632147181,\n        },\n        {\n          x: 12961091.327734,\n          y: 4852150.8841911405,\n        },\n        {\n          x: 12961044.05355995,\n          y: 4852148.93802986,\n        },\n        {\n          x: 12960991.078574985,\n          y: 4852148.12380065,\n        },\n        {\n          x: 12960926.683247,\n          y: 4852147.134333183,\n        },\n        {\n          x: 12960858.046176687,\n          y: 4852148.206427826,\n        },\n        {\n          x: 12960832.258540388,\n          y: 4852148.44774515,\n        },\n        {\n          x: 12960823.161300883,\n          y: 4852148.574651271,\n        },\n        {\n          x: 12960804.266769528,\n          y: 4852149.284002013,\n        },\n        {\n          x: 12960648.459496386,\n          y: 4852144.033337599,\n        },\n        {\n          x: 12960623.783721833,\n          y: 4852142.918236917,\n        },\n        {\n          x: 12960610.08653878,\n          y: 4852142.2999238875,\n        },\n        {\n          x: 12960436.33035975,\n          y: 4852141.569412107,\n        },\n        {\n          x: 12960425.323876735,\n          y: 4852141.588789343,\n        },\n        {\n          x: 12960418.062649192,\n          y: 4852140.894469294,\n        },\n        {\n          x: 12960397.685451128,\n          y: 4852136.929909052,\n        },\n        {\n          x: 12960381.523315413,\n          y: 4852132.778561514,\n        },\n        {\n          x: 12960359.877821121,\n          y: 4852123.64158053,\n        },\n        {\n          x: 12960334.346658466,\n          y: 4852109.556173046,\n        },\n        {\n          x: 12960318.030734146,\n          y: 4852101.525721443,\n        },\n        {\n          x: 12960299.754816394,\n          y: 4852089.551346909,\n        },\n        {\n          x: 12960273.273841146,\n          y: 4852069.355692289,\n        },\n        {\n          x: 12960250.771053055,\n          y: 4852047.738776747,\n        },\n        {\n          x: 12960236.237871027,\n          y: 4852032.227379977,\n        },\n        {\n          x: 12960225.220958065,\n          y: 4852021.18490097,\n        },\n        {\n          x: 12960202.953132067,\n          y: 4851998.62513292,\n        },\n        {\n          x: 12960134.803431373,\n          y: 4851930.302729313,\n        },\n        {\n          x: 12960131.415559309,\n          y: 4851926.836000303,\n        },\n        {\n          x: 12960033.302394766,\n          y: 4851823.178699325,\n        },\n        {\n          x: 12959943.550656857,\n          y: 4851717.754021466,\n        },\n        {\n          x: 12959908.855465326,\n          y: 4851685.719289181,\n        },\n        {\n          x: 12959858.337924149,\n          y: 4851648.509466072,\n        },\n        {\n          x: 12959827.947234219,\n          y: 4851635.216304059,\n        },\n        {\n          x: 12959793.596422547,\n          y: 4851620.193270011,\n        },\n        {\n          x: 12959764.33089034,\n          y: 4851609.816513307,\n        },\n        {\n          x: 12959751.845001617,\n          y: 4851605.540422947,\n        },\n        {\n          x: 12959710.096488312,\n          y: 4851595.58055257,\n        },\n        {\n          x: 12959644.793413645,\n          y: 4851583.581423427,\n        },\n        {\n          x: 12959487.546643838,\n          y: 4851579.1003289465,\n        },\n        {\n          x: 12959322.352977112,\n          y: 4851573.1751883635,\n        },\n        {\n          x: 12959215.355539855,\n          y: 4851567.487059426,\n        },\n        {\n          x: 12958906.741867626,\n          y: 4851555.576738978,\n        },\n        {\n          x: 12958503.588496968,\n          y: 4851536.078897831,\n        },\n        {\n          x: 12958347.549098158,\n          y: 4851535.177370091,\n        },\n        {\n          x: 12958020.7967457,\n          y: 4851519.547451833,\n        },\n        {\n          x: 12958020.774536882,\n          y: 4851519.546442713,\n        },\n        {\n          x: 12957918.246551817,\n          y: 4851517.112404003,\n        },\n        {\n          x: 12957847.278726801,\n          y: 4851508.301972056,\n        },\n        {\n          x: 12957786.075293908,\n          y: 4851497.8561179675,\n        },\n        {\n          x: 12957620.930185705,\n          y: 4851464.46553163,\n        },\n        {\n          x: 12957553.206441535,\n          y: 4851451.069831951,\n        },\n        {\n          x: 12957184.967742233,\n          y: 4851438.277567215,\n        },\n        {\n          x: 12957151.372959128,\n          y: 4851442.83206844,\n        },\n        {\n          x: 12956984.39334164,\n          y: 4851457.2499878295,\n        },\n        {\n          x: 12956887.683125133,\n          y: 4851467.99801078,\n        },\n        {\n          x: 12956842.417678,\n          y: 4851471.246557499,\n        },\n        {\n          x: 12956795.847498052,\n          y: 4851471.877345327,\n        },\n        {\n          x: 12956726.805401612,\n          y: 4851470.21078116,\n        },\n        {\n          x: 12956719.005096909,\n          y: 4851470.206809098,\n        },\n        {\n          x: 12956690.032717621,\n          y: 4851466.331142748,\n        },\n        {\n          x: 12956671.745146377,\n          y: 4851465.288835637,\n        },\n        {\n          x: 12956647.92701909,\n          y: 4851464.086883708,\n        },\n        {\n          x: 12956432.678734198,\n          y: 4851457.009062028,\n        },\n        {\n          x: 12956305.238743283,\n          y: 4851452.754473514,\n        },\n        {\n          x: 12956260.077742493,\n          y: 4851451.052139781,\n        },\n        {\n          x: 12956108.520973446,\n          y: 4851442.943084553,\n        },\n        {\n          x: 12955979.955562841,\n          y: 4851437.82970239,\n        },\n        {\n          x: 12955830.878658453,\n          y: 4851433.243655892,\n        },\n        {\n          x: 12955632.99933834,\n          y: 4851425.357106182,\n        },\n        {\n          x: 12955594.773108216,\n          y: 4851423.831054184,\n        },\n        {\n          x: 12955514.958767148,\n          y: 4851420.40654864,\n        },\n        {\n          x: 12955415.916358192,\n          y: 4851415.173754157,\n        },\n        {\n          x: 12955412.341824232,\n          y: 4851415.068560076,\n        },\n        {\n          x: 12955220.500590362,\n          y: 4851409.551334249,\n        },\n        {\n          x: 12955177.214926412,\n          y: 4851406.5893032905,\n        },\n        {\n          x: 12955161.53826209,\n          y: 4851406.056397046,\n        },\n        {\n          x: 12955016.683409026,\n          y: 4851400.736845952,\n        },\n        {\n          x: 12954738.676569056,\n          y: 4851389.629311211,\n        },\n        {\n          x: 12954418.456831554,\n          y: 4851372.282889688,\n        },\n        {\n          x: 12954112.367106372,\n          y: 4851361.821497771,\n        },\n        {\n          x: 12954112.366906373,\n          y: 4851361.821497775,\n        },\n        {\n          x: 12954095.960447045,\n          y: 4851361.608137167,\n        },\n        {\n          x: 12954011.183086088,\n          y: 4851358.621103881,\n        },\n        {\n          x: 12953877.563076375,\n          y: 4851352.740857408,\n        },\n        {\n          x: 12953853.85732765,\n          y: 4851351.967020577,\n        },\n        {\n          x: 12953803.748811886,\n          y: 4851349.749490414,\n        },\n        {\n          x: 12953512.054691948,\n          y: 4851336.624567439,\n        },\n        {\n          x: 12953304.439376486,\n          y: 4851326.941645583,\n        },\n        {\n          x: 12953215.990118599,\n          y: 4851343.405356978,\n        },\n        {\n          x: 12953186.516178105,\n          y: 4851352.304914633,\n        },\n        {\n          x: 12953160.820809599,\n          y: 4851360.075985219,\n        },\n        {\n          x: 12953135.6284275,\n          y: 4851368.607839927,\n        },\n        {\n          x: 12953110.773697035,\n          y: 4851379.448142389,\n        },\n        {\n          x: 12953078.728780996,\n          y: 4851396.784940073,\n        },\n        {\n          x: 12953055.671146156,\n          y: 4851410.242045931,\n        },\n        {\n          x: 12953025.125081131,\n          y: 4851430.283492892,\n        },\n        {\n          x: 12953002.867918571,\n          y: 4851441.908865417,\n        },\n        {\n          x: 12952970.9803234,\n          y: 4851464.194335162,\n        },\n        {\n          x: 12952948.54425685,\n          y: 4851486.7574834535,\n        },\n        {\n          x: 12952924.669249073,\n          y: 4851516.663157407,\n        },\n        {\n          x: 12952893.865250975,\n          y: 4851558.425931095,\n        },\n        {\n          x: 12952868.114842031,\n          y: 4851601.291024181,\n        },\n        {\n          x: 12952849.72221334,\n          y: 4851633.9557742765,\n        },\n        {\n          x: 12952840.178024879,\n          y: 4851649.33032892,\n        },\n        {\n          x: 12952831.61507648,\n          y: 4851664.098507009,\n        },\n        {\n          x: 12952820.749844346,\n          y: 4851683.626532975,\n        },\n        {\n          x: 12952808.35960638,\n          y: 4851712.713968235,\n        },\n        {\n          x: 12952805.20735029,\n          y: 4851721.38335488,\n        },\n        {\n          x: 12952799.79260895,\n          y: 4851738.36548495,\n        },\n        {\n          x: 12952789.190178515,\n          y: 4851772.8758911565,\n        },\n        {\n          x: 12952788.761437649,\n          y: 4851774.851755323,\n        },\n        {\n          x: 12952777.120529784,\n          y: 4851828.491181396,\n        },\n        {\n          x: 12952769.442166151,\n          y: 4851865.129402015,\n        },\n        {\n          x: 12952767.325349899,\n          y: 4851875.233108534,\n        },\n        {\n          x: 12952767.225566436,\n          y: 4851887.288016115,\n        },\n        {\n          x: 12952766.931015346,\n          y: 4851923.099737246,\n        },\n        {\n          x: 12952761.952007528,\n          y: 4852049.700375895,\n        },\n        {\n          x: 12952753.300309705,\n          y: 4852305.149185844,\n        },\n        {\n          x: 12952748.81253644,\n          y: 4852466.605133841,\n        },\n        {\n          x: 12952741.572670683,\n          y: 4852644.392438163,\n        },\n        {\n          x: 12952738.74974852,\n          y: 4852719.016327442,\n        },\n        {\n          x: 12952741.79628366,\n          y: 4852826.032311127,\n        },\n        {\n          x: 12952754.022033157,\n          y: 4852951.122076449,\n        },\n        {\n          x: 12952755.67102211,\n          y: 4852968.493352729,\n        },\n        {\n          x: 12952758.734429048,\n          y: 4853002.058635834,\n        },\n        {\n          x: 12952761.031034866,\n          y: 4853033.715526356,\n        },\n        {\n          x: 12952761.5816642,\n          y: 4853041.308351835,\n        },\n        {\n          x: 12952765.105510674,\n          y: 4853089.883771956,\n        },\n        {\n          x: 12952768.26850136,\n          y: 4853131.897335772,\n        },\n        {\n          x: 12952769.995078206,\n          y: 4853158.94429872,\n        },\n        {\n          x: 12952770.288851582,\n          y: 4853209.010686412,\n        },\n        {\n          x: 12952769.71843731,\n          y: 4853247.566692912,\n        },\n        {\n          x: 12952767.145004591,\n          y: 4853346.541922129,\n        },\n        {\n          x: 12952765.253378324,\n          y: 4853436.619436339,\n        },\n        {\n          x: 12952765.214083849,\n          y: 4853437.930242571,\n        },\n        {\n          x: 12952764.052342676,\n          y: 4853458.187819974,\n        },\n        {\n          x: 12952760.168979194,\n          y: 4853554.878914973,\n        },\n        {\n          x: 12952757.95248891,\n          y: 4853628.164651818,\n        },\n        {\n          x: 12952754.901710529,\n          y: 4853716.499504081,\n        },\n        {\n          x: 12952752.129394304,\n          y: 4853804.555406498,\n        },\n        {\n          x: 12952749.6335356,\n          y: 4853872.268162026,\n        },\n        {\n          x: 12952743.72513416,\n          y: 4854014.227085098,\n        },\n        {\n          x: 12952741.487142773,\n          y: 4854096.795681505,\n        },\n        {\n          x: 12952740.271323254,\n          y: 4854189.877021544,\n        },\n        {\n          x: 12952735.244090632,\n          y: 4854295.470985418,\n        },\n        {\n          x: 12952732.246698955,\n          y: 4854403.93734809,\n        },\n        {\n          x: 12952731.594985832,\n          y: 4854421.351329048,\n        },\n        {\n          x: 12952728.21683085,\n          y: 4854497.1336529,\n        },\n        {\n          x: 12952727.968463881,\n          y: 4854504.109582829,\n        },\n        {\n          x: 12952726.933201442,\n          y: 4854533.194906944,\n        },\n        {\n          x: 12952726.57184963,\n          y: 4854544.113349503,\n        },\n        {\n          x: 12952721.050076714,\n          y: 4854688.295102883,\n        },\n        {\n          x: 12952720.966294285,\n          y: 4854713.652392979,\n        },\n        {\n          x: 12952718.064468559,\n          y: 4854769.647643217,\n        },\n        {\n          x: 12952715.044363484,\n          y: 4854852.440379618,\n        },\n        {\n          x: 12952709.221122695,\n          y: 4855060.2259299345,\n        },\n        {\n          x: 12952706.836731823,\n          y: 4855138.965809699,\n        },\n        {\n          x: 12952705.041061016,\n          y: 4855185.826583675,\n        },\n        {\n          x: 12952701.912666142,\n          y: 4855297.303072879,\n        },\n        {\n          x: 12952701.774883661,\n          y: 4855301.000993471,\n        },\n        {\n          x: 12952698.542893687,\n          y: 4855388.379772971,\n        },\n        {\n          x: 12952694.722481314,\n          y: 4855513.192139022,\n        },\n        {\n          x: 12952694.351429062,\n          y: 4855527.489094137,\n        },\n        {\n          x: 12952693.024699595,\n          y: 4855578.268289678,\n        },\n        {\n          x: 12952691.583080197,\n          y: 4855615.825893778,\n        },\n        {\n          x: 12952690.241251186,\n          y: 4855663.662486527,\n        },\n        {\n          x: 12952689.665623294,\n          y: 4855679.603567254,\n        },\n        {\n          x: 12952688.776130756,\n          y: 4855688.786687114,\n        },\n        {\n          x: 12952687.754061554,\n          y: 4855729.323832838,\n        },\n        {\n          x: 12952686.019483153,\n          y: 4855798.026277147,\n        },\n        {\n          x: 12952677.323277667,\n          y: 4856106.12994655,\n        },\n        {\n          x: 12952676.787444718,\n          y: 4856125.15381618,\n        },\n        {\n          x: 12952664.53774193,\n          y: 4856474.271753169,\n        },\n        {\n          x: 12952649.541640174,\n          y: 4856902.04310439,\n        },\n        {\n          x: 12952649.394057715,\n          y: 4856906.40602088,\n        },\n        {\n          x: 12952635.915840019,\n          y: 4857296.152572144,\n        },\n        {\n          x: 12952629.098613512,\n          y: 4857468.8577486845,\n        },\n        {\n          x: 12952638.14364149,\n          y: 4857509.197665979,\n        },\n        {\n          x: 12952650.97963757,\n          y: 4857566.931901507,\n        },\n        {\n          x: 12952656.040774604,\n          y: 4857583.179374015,\n        },\n        {\n          x: 12952668.497268757,\n          y: 4857619.1841071565,\n        },\n        {\n          x: 12952685.776569141,\n          y: 4857653.8455795515,\n        },\n        {\n          x: 12952706.290524684,\n          y: 4857693.299857913,\n        },\n        {\n          x: 12952720.33970559,\n          y: 4857717.258845025,\n        },\n        {\n          x: 12952728.768056454,\n          y: 4857729.804878156,\n        },\n        {\n          x: 12952742.39713164,\n          y: 4857747.850560737,\n        },\n        {\n          x: 12952755.039200235,\n          y: 4857761.81094819,\n        },\n        {\n          x: 12952769.509095559,\n          y: 4857774.792433353,\n        },\n        {\n          x: 12952782.996884435,\n          y: 4857785.801023545,\n        },\n        {\n          x: 12952788.77239826,\n          y: 4857789.984151489,\n        },\n        {\n          x: 12952798.589047497,\n          y: 4857797.094653569,\n        },\n        {\n          x: 12952808.39067999,\n          y: 4857802.308737876,\n        },\n        {\n          x: 12952837.452516967,\n          y: 4857817.2604270065,\n        },\n        {\n          x: 12952881.01716795,\n          y: 4857832.991883696,\n        },\n        {\n          x: 12952938.897575248,\n          y: 4857852.0831211675,\n        },\n        {\n          x: 12952998.780647367,\n          y: 4857874.054135021,\n        },\n        {\n          x: 12953258.491335763,\n          y: 4857983.238622202,\n        },\n        {\n          x: 12953413.859664995,\n          y: 4858039.332894681,\n        },\n        {\n          x: 12953461.589598283,\n          y: 4858056.89652088,\n        },\n        {\n          x: 12953597.722309152,\n          y: 4858106.241247336,\n        },\n        {\n          x: 12953667.79405445,\n          y: 4858131.433108243,\n        },\n        {\n          x: 12953748.275540665,\n          y: 4858167.149194927,\n        },\n        {\n          x: 12953812.476893716,\n          y: 4858200.790776387,\n        },\n        {\n          x: 12954043.962199515,\n          y: 4858326.647837333,\n        },\n        {\n          x: 12954069.141445398,\n          y: 4858340.297104379,\n        },\n        {\n          x: 12954072.957342735,\n          y: 4858342.340504059,\n        },\n        {\n          x: 12954114.16432913,\n          y: 4858364.427001315,\n        },\n        {\n          x: 12954137.618859049,\n          y: 4858375.535725627,\n        },\n        {\n          x: 12954295.058541333,\n          y: 4858440.811649338,\n        },\n        {\n          x: 12954302.457537467,\n          y: 4858443.441923854,\n        },\n        {\n          x: 12954310.15020407,\n          y: 4858445.926167106,\n        },\n        {\n          x: 12954332.638227137,\n          y: 4858452.508316665,\n        },\n        {\n          x: 12954353.823772585,\n          y: 4858458.21648571,\n        },\n        {\n          x: 12954389.227238271,\n          y: 4858467.144308251,\n        },\n        {\n          x: 12954466.181852238,\n          y: 4858479.982544497,\n        },\n        {\n          x: 12954466.70470393,\n          y: 4858480.069293314,\n        },\n        {\n          x: 12954681.711705219,\n          y: 4858497.4227523925,\n        },\n        {\n          x: 12954881.814571371,\n          y: 4858508.773537354,\n        },\n        {\n          x: 12954977.646000914,\n          y: 4858510.359249282,\n        },\n        {\n          x: 12955052.400974875,\n          y: 4858511.444873559,\n        },\n        {\n          x: 12955252.256507836,\n          y: 4858514.336868981,\n        },\n        {\n          x: 12955253.967495963,\n          y: 4858514.361726689,\n        },\n        {\n          x: 12955289.19954713,\n          y: 4858514.5128645515,\n        },\n        {\n          x: 12955354.90360536,\n          y: 4858516.033826125,\n        },\n        {\n          x: 12955355.483066956,\n          y: 4858516.047198033,\n        },\n      ],\n    },\n    {\n      id: \"1\",\n      source: \"2\",\n      target: \"3\",\n      class: \"地铁五号线\",\n      name: \"地铁五号线 0\",\n      controlPoints: [\n        {\n          x: 12960720.74502968,\n          y: 4843624.831892422,\n        },\n        {\n          x: 12960633.531054523,\n          y: 4843628.020999428,\n        },\n        {\n          x: 12960615.721414793,\n          y: 4843628.698697272,\n        },\n        {\n          x: 12960529.018550536,\n          y: 4843631.993865521,\n        },\n        {\n          x: 12960395.923003213,\n          y: 4843634.498433887,\n        },\n        {\n          x: 12960303.4487313,\n          y: 4843658.086022387,\n        },\n        {\n          x: 12960247.83253429,\n          y: 4843698.236051296,\n        },\n        {\n          x: 12960198.244516307,\n          y: 4843756.513927734,\n        },\n        {\n          x: 12960152.936239943,\n          y: 4843826.831983379,\n        },\n        {\n          x: 12960093.80567492,\n          y: 4844050.470482044,\n        },\n        {\n          x: 12960074.685721893,\n          y: 4844241.260554531,\n        },\n        {\n          x: 12960067.43941915,\n          y: 4844443.961097181,\n        },\n        {\n          x: 12960064.463686703,\n          y: 4844812.802009133,\n        },\n        {\n          x: 12960051.958804457,\n          y: 4845167.465485617,\n        },\n        {\n          x: 12960045.686471423,\n          y: 4845319.993679029,\n        },\n        {\n          x: 12960040.290314263,\n          y: 4845427.501735388,\n        },\n        {\n          x: 12960000.078505961,\n          y: 4846409.670004274,\n        },\n        {\n          x: 12959967.360368509,\n          y: 4847353.92871215,\n        },\n        {\n          x: 12959903.599435318,\n          y: 4849086.018465949,\n        },\n        {\n          x: 12959897.308980407,\n          y: 4849189.719214646,\n        },\n        {\n          x: 12959894.110421222,\n          y: 4849203.583410498,\n        },\n        {\n          x: 12959890.4317169,\n          y: 4849219.531068828,\n        },\n        {\n          x: 12959886.89822709,\n          y: 4849232.656139195,\n        },\n        {\n          x: 12959877.73105254,\n          y: 4849260.436420323,\n        },\n        {\n          x: 12959865.561524102,\n          y: 4849290.043697017,\n        },\n        {\n          x: 12959837.38401807,\n          y: 4849362.616048384,\n        },\n        {\n          x: 12959808.903257467,\n          y: 4849435.004427626,\n        },\n        {\n          x: 12959779.115515891,\n          y: 4849512.45632027,\n        },\n        {\n          x: 12959744.160038425,\n          y: 4849599.294323696,\n        },\n        {\n          x: 12959725.117032269,\n          y: 4849657.80245415,\n        },\n        {\n          x: 12959719.313276159,\n          y: 4849682.1804609,\n        },\n        {\n          x: 12959715.446228703,\n          y: 4849703.304149181,\n        },\n        {\n          x: 12959711.903727653,\n          y: 4849724.430177948,\n        },\n        {\n          x: 12959709.011729391,\n          y: 4849753.676989364,\n        },\n        {\n          x: 12959707.415947258,\n          y: 4849783.8967948,\n        },\n        {\n          x: 12959706.932266207,\n          y: 4849809.126489505,\n        },\n        {\n          x: 12959706.941864654,\n          y: 4849836.458652587,\n        },\n        {\n          x: 12959706.941864647,\n          y: 4849836.458852586,\n        },\n        {\n          x: 12959706.73825638,\n          y: 4849843.058438657,\n        },\n        {\n          x: 12959701.188848983,\n          y: 4850022.751749156,\n        },\n        {\n          x: 12959698.75643586,\n          y: 4850092.048955763,\n        },\n        {\n          x: 12959696.677162938,\n          y: 4850153.857703244,\n        },\n        {\n          x: 12959695.78056296,\n          y: 4850188.632551699,\n        },\n        {\n          x: 12959694.918345,\n          y: 4850201.721921542,\n        },\n        {\n          x: 12959692.002134146,\n          y: 4850243.844071576,\n        },\n        {\n          x: 12959688.713196509,\n          y: 4850307.368296433,\n        },\n        {\n          x: 12959688.399038235,\n          y: 4850412.527108991,\n        },\n        {\n          x: 12959688.405735636,\n          y: 4850420.937318844,\n        },\n        {\n          x: 12959688.343863737,\n          y: 4850445.110083258,\n        },\n        {\n          x: 12959686.127736844,\n          y: 4850539.017117742,\n        },\n        {\n          x: 12959683.968880652,\n          y: 4850587.739754507,\n        },\n        {\n          x: 12959680.875828847,\n          y: 4850658.134830053,\n        },\n        {\n          x: 12959679.529814905,\n          y: 4850705.839287117,\n        },\n        {\n          x: 12959676.829087818,\n          y: 4850793.495084584,\n        },\n        {\n          x: 12959675.815426968,\n          y: 4850823.398964908,\n        },\n        {\n          x: 12959675.182101322,\n          y: 4850846.066167584,\n        },\n        {\n          x: 12959674.637837825,\n          y: 4850881.825140678,\n        },\n        {\n          x: 12959674.600854788,\n          y: 4850900.231972202,\n        },\n        {\n          x: 12959672.17730142,\n          y: 4850971.880703524,\n        },\n        {\n          x: 12959670.889156122,\n          y: 4851002.727395804,\n        },\n        {\n          x: 12959670.698638307,\n          y: 4851010.549985337,\n        },\n        {\n          x: 12959668.117749112,\n          y: 4851106.755282467,\n        },\n        {\n          x: 12959665.56854209,\n          y: 4851184.430341829,\n        },\n        {\n          x: 12959663.290916206,\n          y: 4851257.106068522,\n        },\n        {\n          x: 12959662.369610716,\n          y: 4851304.277585146,\n        },\n        {\n          x: 12959661.413917739,\n          y: 4851326.766808909,\n        },\n        {\n          x: 12959657.931598857,\n          y: 4851433.829044472,\n        },\n        {\n          x: 12959658.028261015,\n          y: 4851474.80850299,\n        },\n        {\n          x: 12959657.267483199,\n          y: 4851488.965234568,\n        },\n        {\n          x: 12959651.951822918,\n          y: 4851544.541841047,\n        },\n        {\n          x: 12959644.793413645,\n          y: 4851583.581423427,\n        },\n        {\n          x: 12959595.684288755,\n          y: 4852619.8846618915,\n        },\n        {\n          x: 12959574.465131808,\n          y: 4853929.7776421,\n        },\n        {\n          x: 12959536.880014552,\n          y: 4854963.031257658,\n        },\n        {\n          x: 12959497.404227743,\n          y: 4856298.871464132,\n        },\n        {\n          x: 12959482.020338908,\n          y: 4856720.60653976,\n        },\n        {\n          x: 12959481.210910158,\n          y: 4856745.719910398,\n        },\n        {\n          x: 12959480.218744718,\n          y: 4856801.67083334,\n        },\n        {\n          x: 12959480.657100372,\n          y: 4856811.732979886,\n        },\n        {\n          x: 12959473.537570594,\n          y: 4857026.976625398,\n        },\n        {\n          x: 12959472.67316361,\n          y: 4857117.529377648,\n        },\n        {\n          x: 12959471.826244202,\n          y: 4857148.4116494795,\n        },\n        {\n          x: 12959471.914116398,\n          y: 4857157.0041156085,\n        },\n        {\n          x: 12959471.914116394,\n          y: 4857157.004315607,\n        },\n        {\n          x: 12959468.421265613,\n          y: 4857243.442849801,\n        },\n        {\n          x: 12959465.42503048,\n          y: 4857320.248131243,\n        },\n        {\n          x: 12959457.359831337,\n          y: 4857487.904976163,\n        },\n        {\n          x: 12959441.732397161,\n          y: 4858203.22983063,\n        },\n        {\n          x: 12959436.13624882,\n          y: 4858459.380345282,\n        },\n        {\n          x: 12959415.193417262,\n          y: 4858615.8007214,\n        },\n        {\n          x: 12959400.093169626,\n          y: 4858713.511716538,\n        },\n        {\n          x: 12959399.09985982,\n          y: 4858740.126114421,\n        },\n        {\n          x: 12959398.923112214,\n          y: 4858756.581567208,\n        },\n        {\n          x: 12959400.425177053,\n          y: 4858770.664816282,\n        },\n        {\n          x: 12959403.329731172,\n          y: 4858781.277141151,\n        },\n        {\n          x: 12959406.81271103,\n          y: 4858791.891385901,\n        },\n        {\n          x: 12959411.454041706,\n          y: 4858801.77406984,\n        },\n        {\n          x: 12959416.960302725,\n          y: 4858809.912175236,\n        },\n        {\n          x: 12959421.887523,\n          y: 4858817.179145314,\n        },\n        {\n          x: 12959428.263989503,\n          y: 4858824.297946437,\n        },\n        {\n          x: 12959438.405571558,\n          y: 4858834.467323184,\n        },\n        {\n          x: 12959446.951603249,\n          y: 4858840.418765018,\n        },\n        {\n          x: 12959453.47044277,\n          y: 4858844.047635263,\n        },\n        {\n          x: 12959461.338227013,\n          y: 4858847.889734993,\n        },\n        {\n          x: 12959468.530699532,\n          y: 4858850.719229388,\n        },\n        {\n          x: 12959476.367733365,\n          y: 4858853.206677165,\n        },\n        {\n          x: 12959486.177776907,\n          y: 4858855.242211642,\n        },\n        {\n          x: 12959498.356965585,\n          y: 4858856.501662772,\n        },\n        {\n          x: 12959543.238861157,\n          y: 4858861.103129856,\n        },\n        {\n          x: 12959564.955544673,\n          y: 4858862.823145494,\n        },\n        {\n          x: 12959585.658078235,\n          y: 4858864.541516278,\n        },\n        {\n          x: 12959595.839429364,\n          y: 4858866.740035375,\n        },\n        {\n          x: 12959604.626178885,\n          y: 4858869.753969439,\n        },\n        {\n          x: 12959619.393890884,\n          y: 4858875.118084437,\n        },\n        {\n          x: 12959634.602011,\n          y: 4858883.533997516,\n        },\n        {\n          x: 12959647.926199682,\n          y: 4858893.114601357,\n        },\n        {\n          x: 12959659.08101609,\n          y: 4858903.862660445,\n        },\n        {\n          x: 12959672.122859873,\n          y: 4858920.571917142,\n        },\n        {\n          x: 12959683.284136135,\n          y: 4858939.464230514,\n        },\n        {\n          x: 12959691.987331163,\n          y: 4858961.4122961955,\n        },\n        {\n          x: 12959695.907905033,\n          y: 4858977.986510597,\n        },\n        {\n          x: 12959696.897168944,\n          y: 4858990.458458495,\n        },\n        {\n          x: 12959696.95704519,\n          y: 4859022.197030113,\n        },\n        {\n          x: 12959693.756261105,\n          y: 4859059.590188502,\n        },\n        {\n          x: 12959690.179340184,\n          y: 4859134.214310129,\n        },\n        {\n          x: 12959685.340567466,\n          y: 4859249.237691335,\n        },\n        {\n          x: 12959685.339668898,\n          y: 4859260.445091072,\n        },\n        {\n          x: 12959679.606577044,\n          y: 4859423.720155937,\n        },\n        {\n          x: 12959665.286089724,\n          y: 4859737.709063406,\n        },\n        {\n          x: 12959643.000270054,\n          y: 4860035.900026235,\n        },\n        {\n          x: 12959632.910441214,\n          y: 4860295.517810925,\n        },\n        {\n          x: 12959592.233549183,\n          y: 4861342.088331037,\n        },\n        {\n          x: 12959588.730015729,\n          y: 4861432.225749819,\n        },\n        {\n          x: 12959556.060278306,\n          y: 4862388.960503767,\n        },\n        {\n          x: 12959545.695101015,\n          y: 4862688.364754779,\n        },\n        {\n          x: 12959518.592346862,\n          y: 4863435.743969738,\n        },\n        {\n          x: 12959485.60762339,\n          y: 4864345.2318098685,\n        },\n        {\n          x: 12959486.001310887,\n          y: 4864482.759632916,\n        },\n        {\n          x: 12959486.585650299,\n          y: 4865230.9384146165,\n        },\n        {\n          x: 12959489.44520427,\n          y: 4865436.730097548,\n        },\n        {\n          x: 12959497.988421464,\n          y: 4865529.704413291,\n        },\n        {\n          x: 12959497.988421455,\n          y: 4865529.704613299,\n        },\n        {\n          x: 12959519.200702442,\n          y: 4865741.969269226,\n        },\n        {\n          x: 12959522.357194034,\n          y: 4865776.148131042,\n        },\n        {\n          x: 12959522.573317947,\n          y: 4865778.504652967,\n        },\n        {\n          x: 12959522.916097239,\n          y: 4865782.246629099,\n        },\n        {\n          x: 12959551.022895565,\n          y: 4866071.32380023,\n        },\n        {\n          x: 12959556.838158142,\n          y: 4866160.7037429465,\n        },\n        {\n          x: 12959551.949571997,\n          y: 4866262.940886653,\n        },\n        {\n          x: 12959540.38150212,\n          y: 4866354.7103297105,\n        },\n        {\n          x: 12959539.340979226,\n          y: 4866362.459925865,\n        },\n        {\n          x: 12959513.475078186,\n          y: 4866576.75533692,\n        },\n        {\n          x: 12959513.47507818,\n          y: 4866576.755436918,\n        },\n        {\n          x: 12959497.755400725,\n          y: 4866692.268572319,\n        },\n        {\n          x: 12959497.610949984,\n          y: 4866693.40672459,\n        },\n        {\n          x: 12959483.493606979,\n          y: 4866796.261737931,\n        },\n        {\n          x: 12959466.691132883,\n          y: 4866917.22829191,\n        },\n        {\n          x: 12959461.210504338,\n          y: 4866960.1057711635,\n        },\n        {\n          x: 12959426.407796139,\n          y: 4867225.807957604,\n        },\n        {\n          x: 12959418.801394718,\n          y: 4867288.213382227,\n        },\n        {\n          x: 12959416.692326868,\n          y: 4867306.0886218455,\n        },\n        {\n          x: 12959410.47637647,\n          y: 4867351.37610048,\n        },\n        {\n          x: 12959400.148907803,\n          y: 4867462.455263302,\n        },\n        {\n          x: 12959399.112409318,\n          y: 4867478.93856583,\n        },\n        {\n          x: 12959396.256439034,\n          y: 4867556.841285077,\n        },\n        {\n          x: 12959394.84524912,\n          y: 4867623.882782224,\n        },\n        {\n          x: 12959402.914618,\n          y: 4867739.272140503,\n        },\n        {\n          x: 12959407.505976537,\n          y: 4867797.003244392,\n        },\n        {\n          x: 12959415.808022052,\n          y: 4867872.177101691,\n        },\n        {\n          x: 12959437.831136882,\n          y: 4868003.5787004335,\n        },\n        {\n          x: 12959443.098101616,\n          y: 4868036.394816039,\n        },\n        {\n          x: 12959464.101440175,\n          y: 4868167.242968876,\n        },\n        {\n          x: 12959478.37498549,\n          y: 4868261.98680037,\n        },\n        {\n          x: 12959508.23051181,\n          y: 4868432.816097544,\n        },\n        {\n          x: 12959539.922123043,\n          y: 4868629.3165109595,\n        },\n        {\n          x: 12959551.24160535,\n          y: 4868728.22086592,\n        },\n        {\n          x: 12959555.049512597,\n          y: 4868834.379861189,\n        },\n        {\n          x: 12959557.09776522,\n          y: 4869178.128956159,\n        },\n        {\n          x: 12959557.46233141,\n          y: 4869212.439258056,\n        },\n        {\n          x: 12959560.523011155,\n          y: 4869592.048363338,\n        },\n        {\n          x: 12959577.865984676,\n          y: 4869718.394291774,\n        },\n        {\n          x: 12959590.012423703,\n          y: 4869827.204686913,\n        },\n        {\n          x: 12959595.795077762,\n          y: 4869869.18333726,\n        },\n        {\n          x: 12959598.248023918,\n          y: 4869952.360503471,\n        },\n        {\n          x: 12959599.56821579,\n          y: 4870095.040123146,\n        },\n        {\n          x: 12959609.728836436,\n          y: 4870531.437161518,\n        },\n        {\n          x: 12959603.972221585,\n          y: 4870603.500963714,\n        },\n        {\n          x: 12959588.040449219,\n          y: 4870699.62726807,\n        },\n        {\n          x: 12959577.341958042,\n          y: 4870759.729165575,\n        },\n        {\n          x: 12959552.550153958,\n          y: 4870890.017106278,\n        },\n        {\n          x: 12959549.504474476,\n          y: 4870907.895185102,\n        },\n        {\n          x: 12959536.238199469,\n          y: 4870980.633462292,\n        },\n        {\n          x: 12959519.906514881,\n          y: 4871059.136581221,\n        },\n        {\n          x: 12959498.606091205,\n          y: 4871123.470002014,\n        },\n        {\n          x: 12959483.02793797,\n          y: 4871158.4458806105,\n        },\n        {\n          x: 12959398.579719294,\n          y: 4871307.904408066,\n        },\n        {\n          x: 12959372.473708287,\n          y: 4871364.923557604,\n        },\n        {\n          x: 12959355.676189639,\n          y: 4871417.85108307,\n        },\n        {\n          x: 12959345.382419249,\n          y: 4871467.110988155,\n        },\n        {\n          x: 12959337.246138988,\n          y: 4871518.719362454,\n        },\n        {\n          x: 12959331.993689496,\n          y: 4871552.047085774,\n        },\n        {\n          x: 12959329.720869558,\n          y: 4871566.954753559,\n        },\n        {\n          x: 12959309.401737848,\n          y: 4871682.640660545,\n        },\n        {\n          x: 12959284.09575571,\n          y: 4871813.104051212,\n        },\n        {\n          x: 12959272.141485408,\n          y: 4871880.577467433,\n        },\n        {\n          x: 12959212.679174809,\n          y: 4872024.938082188,\n        },\n        {\n          x: 12959122.218527583,\n          y: 4872236.515550644,\n        },\n        {\n          x: 12959101.497205438,\n          y: 4872286.842893077,\n        },\n        {\n          x: 12959082.233978389,\n          y: 4872332.857224708,\n        },\n        {\n          x: 12959064.438388105,\n          y: 4872374.568487362,\n        },\n        {\n          x: 12959002.833097033,\n          y: 4872476.910775585,\n        },\n        {\n          x: 12958978.720982237,\n          y: 4872510.998020613,\n        },\n        {\n          x: 12958934.40716439,\n          y: 4872572.781793622,\n        },\n        {\n          x: 12958888.474905616,\n          y: 4872641.302003023,\n        },\n        {\n          x: 12958847.253143456,\n          y: 4872732.877987774,\n        },\n        {\n          x: 12958840.613299651,\n          y: 4872775.301160091,\n        },\n        {\n          x: 12958826.01344493,\n          y: 4872861.8293480575,\n        },\n        {\n          x: 12958817.526527362,\n          y: 4873017.26494393,\n        },\n        {\n          x: 12958814.054718142,\n          y: 4873226.284171534,\n        },\n        {\n          x: 12958816.11193364,\n          y: 4873266.055943593,\n        },\n        {\n          x: 12958816.129135203,\n          y: 4873290.15488096,\n        },\n        {\n          x: 12958821.354560152,\n          y: 4873309.887136759,\n        },\n        {\n          x: 12958841.32562995,\n          y: 4873397.115248937,\n        },\n        {\n          x: 12958844.285408415,\n          y: 4873409.713148855,\n        },\n        {\n          x: 12958847.915875804,\n          y: 4873422.442037873,\n        },\n        {\n          x: 12958889.630321097,\n          y: 4873507.434415227,\n        },\n        {\n          x: 12958925.449787276,\n          y: 4873574.258471447,\n        },\n        {\n          x: 12959052.396737209,\n          y: 4873809.916450764,\n        },\n        {\n          x: 12959072.334776778,\n          y: 4873851.7039971035,\n        },\n        {\n          x: 12959091.382334014,\n          y: 4873912.579314463,\n        },\n        {\n          x: 12959103.205925986,\n          y: 4873994.365655067,\n        },\n        {\n          x: 12959105.049669469,\n          y: 4874040.715385412,\n        },\n        {\n          x: 12959098.781538986,\n          y: 4874130.696496499,\n        },\n        {\n          x: 12959091.653604891,\n          y: 4874277.942229356,\n        },\n        {\n          x: 12959073.762015432,\n          y: 4874560.621555201,\n        },\n        {\n          x: 12959055.88026487,\n          y: 4874851.491609374,\n        },\n        {\n          x: 12959035.313639542,\n          y: 4875190.5466335295,\n        },\n        {\n          x: 12959020.984397592,\n          y: 4875394.165125814,\n        },\n        {\n          x: 12958976.23099209,\n          y: 4876077.778969328,\n        },\n        {\n          x: 12958959.745692749,\n          y: 4876337.611516656,\n        },\n        {\n          x: 12958959.782791425,\n          y: 4876388.517880667,\n        },\n        {\n          x: 12958963.47494545,\n          y: 4876487.604684548,\n        },\n        {\n          x: 12958978.051701134,\n          y: 4876614.863733437,\n        },\n        {\n          x: 12959002.615098093,\n          y: 4876782.118274665,\n        },\n        {\n          x: 12959044.457185756,\n          y: 4877060.270620597,\n        },\n        {\n          x: 12959067.219679391,\n          y: 4877241.168949157,\n        },\n        {\n          x: 12959071.783226173,\n          y: 4877290.243072816,\n        },\n        {\n          x: 12959070.11534219,\n          y: 4877482.0814475445,\n        },\n        {\n          x: 12959050.419169253,\n          y: 4877777.579645479,\n        },\n        {\n          x: 12959032.750496056,\n          y: 4878102.221159315,\n        },\n        {\n          x: 12959032.750496058,\n          y: 4878102.221259315,\n        },\n        {\n          x: 12959003.26866052,\n          y: 4878470.802548815,\n        },\n        {\n          x: 12959000.418311324,\n          y: 4878535.557270987,\n        },\n        {\n          x: 12958996.46075172,\n          y: 4878573.393290567,\n        },\n        {\n          x: 12958986.710555336,\n          y: 4878612.325690378,\n        },\n        {\n          x: 12958984.36114175,\n          y: 4878620.285756933,\n        },\n        {\n          x: 12958979.482719835,\n          y: 4878633.567604723,\n        },\n        {\n          x: 12958971.70519758,\n          y: 4878648.669953857,\n        },\n        {\n          x: 12958960.310788708,\n          y: 4878668.732809022,\n        },\n        {\n          x: 12958954.159688484,\n          y: 4878678.6962916935,\n        },\n        {\n          x: 12958940.408512954,\n          y: 4878697.079788669,\n        },\n        {\n          x: 12958920.863620294,\n          y: 4878718.556967109,\n        },\n        {\n          x: 12958911.0902516,\n          y: 4878726.568490176,\n        },\n        {\n          x: 12958895.161451222,\n          y: 4878738.950175331,\n        },\n        {\n          x: 12958883.032721909,\n          y: 4878747.3254355155,\n        },\n        {\n          x: 12958866.73870309,\n          y: 4878756.433205192,\n        },\n        {\n          x: 12958839.217742998,\n          y: 4878769.914421513,\n        },\n        {\n          x: 12958816.400635526,\n          y: 4878777.388295637,\n        },\n        {\n          x: 12958783.623366289,\n          y: 4878784.917193882,\n        },\n        {\n          x: 12958771.309150409,\n          y: 4878786.744063957,\n        },\n        {\n          x: 12958739.429878792,\n          y: 4878788.584452175,\n        },\n        {\n          x: 12958705.738986243,\n          y: 4878786.424910058,\n        },\n        {\n          x: 12958578.932445105,\n          y: 4878772.682927707,\n        },\n        {\n          x: 12958490.16318142,\n          y: 4878762.546866739,\n        },\n        {\n          x: 12958476.030639933,\n          y: 4878759.645153562,\n        },\n        {\n          x: 12958398.482079366,\n          y: 4878738.585155731,\n        },\n        {\n          x: 12958337.60009126,\n          y: 4878723.697450009,\n        },\n        {\n          x: 12958319.258018306,\n          y: 4878717.823743411,\n        },\n        {\n          x: 12958285.414545368,\n          y: 4878706.985809459,\n        },\n        {\n          x: 12958281.24441303,\n          y: 4878706.124142206,\n        },\n        {\n          x: 12958265.300704759,\n          y: 4878704.674592208,\n        },\n        {\n          x: 12958248.322873216,\n          y: 4878700.7330124155,\n        },\n        {\n          x: 12958235.48402549,\n          y: 4878697.874149074,\n        },\n        {\n          x: 12958209.66504376,\n          y: 4878694.661718712,\n        },\n        {\n          x: 12958185.394430613,\n          y: 4878692.518259022,\n        },\n        {\n          x: 12958163.832025072,\n          y: 4878687.433936088,\n        },\n        {\n          x: 12958149.29817478,\n          y: 4878683.5722363135,\n        },\n        {\n          x: 12958127.588537483,\n          y: 4878677.8039692715,\n        },\n        {\n          x: 12958103.488411777,\n          y: 4878671.445979302,\n        },\n        {\n          x: 12958088.084013943,\n          y: 4878666.72080967,\n        },\n        {\n          x: 12958073.22210372,\n          y: 4878661.450932288,\n        },\n        {\n          x: 12958053.105073934,\n          y: 4878653.090874466,\n        },\n        {\n          x: 12958019.939165607,\n          y: 4878639.8218743205,\n        },\n        {\n          x: 12957987.498125235,\n          y: 4878626.005036278,\n        },\n        {\n          x: 12957976.804148829,\n          y: 4878622.369122046,\n        },\n        {\n          x: 12957959.95128188,\n          y: 4878618.734327142,\n        },\n        {\n          x: 12957933.674733272,\n          y: 4878614.921507571,\n        },\n      ],\n    },\n    {\n      id: \"2\",\n      source: \"4\",\n      target: \"5\",\n      class: \"地铁房山线\",\n      name: \"地铁房山线 0\",\n      controlPoints: [\n        {\n          x: 12924448.17238817,\n          y: 4826880.333482542,\n        },\n        {\n          x: 12924525.979211709,\n          y: 4826872.878344628,\n        },\n        {\n          x: 12924651.003975658,\n          y: 4826850.186382258,\n        },\n        {\n          x: 12924772.909010362,\n          y: 4826831.637862584,\n        },\n        {\n          x: 12924892.815210382,\n          y: 4826808.910764785,\n        },\n        {\n          x: 12924979.825081667,\n          y: 4826797.17955122,\n        },\n        {\n          x: 12925084.39744784,\n          y: 4826783.365645579,\n        },\n        {\n          x: 12925155.81120956,\n          y: 4826773.302022665,\n        },\n        {\n          x: 12925191.531802883,\n          y: 4826763.145386636,\n        },\n        {\n          x: 12925246.401130036,\n          y: 4826741.508641205,\n        },\n        {\n          x: 12925289.809143692,\n          y: 4826716.000219138,\n        },\n        {\n          x: 12925328.122217724,\n          y: 4826687.913828323,\n        },\n        {\n          x: 12925435.446934095,\n          y: 4826589.547291209,\n        },\n        {\n          x: 12925667.935929714,\n          y: 4826383.866700324,\n        },\n        {\n          x: 12925703.114335984,\n          y: 4826349.828286723,\n        },\n        {\n          x: 12925770.622207448,\n          y: 4826279.8993723765,\n        },\n        {\n          x: 12925812.089063462,\n          y: 4826236.363691168,\n        },\n        {\n          x: 12925860.064926796,\n          y: 4826185.624213163,\n        },\n        {\n          x: 12925972.45908047,\n          y: 4826067.695006573,\n        },\n        {\n          x: 12926072.836947165,\n          y: 4825968.627523454,\n        },\n        {\n          x: 12926117.70970191,\n          y: 4825926.122953221,\n        },\n        {\n          x: 12926163.925422803,\n          y: 4825891.864408059,\n        },\n        {\n          x: 12926224.487089904,\n          y: 4825859.005237854,\n        },\n        {\n          x: 12926272.713245494,\n          y: 4825838.833351052,\n        },\n        {\n          x: 12926306.225330409,\n          y: 4825828.247220456,\n        },\n        {\n          x: 12926323.66112753,\n          y: 4825823.471552652,\n        },\n        {\n          x: 12926342.999038229,\n          y: 4825815.638790402,\n        },\n        {\n          x: 12926395.038321048,\n          y: 4825807.019948717,\n        },\n        {\n          x: 12926456.619666297,\n          y: 4825801.386693386,\n        },\n        {\n          x: 12926771.931888463,\n          y: 4825802.616129439,\n        },\n        {\n          x: 12926851.048048986,\n          y: 4825801.631130125,\n        },\n        {\n          x: 12926918.475671358,\n          y: 4825800.789146462,\n        },\n        {\n          x: 12927029.359667536,\n          y: 4825801.827672996,\n        },\n        {\n          x: 12927182.830807276,\n          y: 4825803.048420769,\n        },\n        {\n          x: 12927499.41885292,\n          y: 4825801.064920832,\n        },\n        {\n          x: 12927985.316114604,\n          y: 4825802.302803997,\n        },\n        {\n          x: 12928151.253302878,\n          y: 4825800.059199896,\n        },\n        {\n          x: 12928748.07329185,\n          y: 4825800.240476295,\n        },\n        {\n          x: 12929111.030443402,\n          y: 4825800.274953787,\n        },\n        {\n          x: 12929262.734959431,\n          y: 4825802.042122076,\n        },\n        {\n          x: 12929411.395781256,\n          y: 4825802.035455338,\n        },\n        {\n          x: 12929506.992909838,\n          y: 4825802.706934221,\n        },\n        {\n          x: 12929650.07556503,\n          y: 4825802.544157764,\n        },\n        {\n          x: 12929720.668591391,\n          y: 4825802.142241587,\n        },\n        {\n          x: 12929772.983434387,\n          y: 4825800.887369454,\n        },\n        {\n          x: 12929857.446321096,\n          y: 4825798.160825567,\n        },\n        {\n          x: 12929912.070413183,\n          y: 4825797.961849597,\n        },\n        {\n          x: 12930020.049115648,\n          y: 4825798.40702736,\n        },\n        {\n          x: 12930163.955832295,\n          y: 4825797.372447041,\n        },\n        {\n          x: 12930397.554672962,\n          y: 4825796.54976334,\n        },\n        {\n          x: 12930475.738706259,\n          y: 4825796.886377486,\n        },\n        {\n          x: 12930546.696718559,\n          y: 4825797.190814849,\n        },\n        {\n          x: 12930678.19064345,\n          y: 4825796.767765474,\n        },\n        {\n          x: 12930758.84637836,\n          y: 4825797.611875748,\n        },\n        {\n          x: 12930844.12941692,\n          y: 4825797.184218957,\n        },\n        {\n          x: 12931658.797219362,\n          y: 4825797.407901417,\n        },\n        {\n          x: 12932033.235206187,\n          y: 4825795.320207194,\n        },\n        {\n          x: 12932233.393439343,\n          y: 4825794.180152587,\n        },\n        {\n          x: 12932721.308799969,\n          y: 4825803.219910631,\n        },\n        {\n          x: 12932928.523249036,\n          y: 4825803.557711617,\n        },\n        {\n          x: 12933053.790329,\n          y: 4825812.987185039,\n        },\n        {\n          x: 12933138.900921563,\n          y: 4825833.806609662,\n        },\n        {\n          x: 12933190.809829095,\n          y: 4825856.349271142,\n        },\n        {\n          x: 12933226.429307265,\n          y: 4825874.795930243,\n        },\n        {\n          x: 12933272.213535246,\n          y: 4825905.5475769965,\n        },\n        {\n          x: 12933330.19116232,\n          y: 4825952.706628941,\n        },\n        {\n          x: 12933394.224417783,\n          y: 4826031.661583878,\n        },\n        {\n          x: 12933434.848204572,\n          y: 4826099.343443693,\n        },\n        {\n          x: 12933457.160278024,\n          y: 4826153.699179631,\n        },\n        {\n          x: 12933477.393874265,\n          y: 4826231.651463547,\n        },\n        {\n          x: 12933483.411973838,\n          y: 4826283.965274176,\n        },\n        {\n          x: 12933484.24966211,\n          y: 4826383.467920047,\n        },\n        {\n          x: 12933484.612918697,\n          y: 4826744.564537366,\n        },\n        {\n          x: 12933484.578816487,\n          y: 4826763.36453251,\n        },\n        {\n          x: 12933483.779386565,\n          y: 4826924.895615106,\n        },\n        {\n          x: 12933482.610669505,\n          y: 4827007.992815708,\n        },\n        {\n          x: 12933492.646572754,\n          y: 4827092.110644749,\n        },\n        {\n          x: 12933513.41196703,\n          y: 4827439.884337276,\n        },\n        {\n          x: 12933543.228519833,\n          y: 4827854.75280781,\n        },\n        {\n          x: 12933566.570100563,\n          y: 4828176.552121379,\n        },\n        {\n          x: 12933594.643939137,\n          y: 4828596.572517603,\n        },\n        {\n          x: 12933629.925192222,\n          y: 4829103.087824667,\n        },\n        {\n          x: 12933645.64381434,\n          y: 4829320.597027384,\n        },\n        {\n          x: 12933649.89045366,\n          y: 4829382.144115338,\n        },\n        {\n          x: 12933667.168927083,\n          y: 4829632.556420974,\n        },\n        {\n          x: 12933676.117122944,\n          y: 4829774.023766041,\n        },\n        {\n          x: 12933682.081289982,\n          y: 4829869.157117123,\n        },\n        {\n          x: 12933689.928693485,\n          y: 4829940.817807672,\n        },\n        {\n          x: 12933703.310192509,\n          y: 4830006.297419812,\n        },\n        {\n          x: 12933719.154849395,\n          y: 4830066.214843579,\n        },\n        {\n          x: 12933755.774424188,\n          y: 4830174.310550475,\n        },\n        {\n          x: 12933810.744445253,\n          y: 4830313.90749861,\n        },\n        {\n          x: 12933922.503728205,\n          y: 4830609.788269573,\n        },\n        {\n          x: 12934038.543576436,\n          y: 4830918.028547641,\n        },\n        {\n          x: 12934058.694520555,\n          y: 4830974.859139696,\n        },\n        {\n          x: 12934069.58014834,\n          y: 4831005.072471465,\n        },\n        {\n          x: 12934119.846976575,\n          y: 4831143.433958218,\n        },\n        {\n          x: 12934149.991077174,\n          y: 4831222.949836257,\n        },\n        {\n          x: 12934198.033104936,\n          y: 4831349.678156342,\n        },\n        {\n          x: 12934223.473509623,\n          y: 4831400.412253144,\n        },\n        {\n          x: 12934259.369952803,\n          y: 4831461.028016709,\n        },\n        {\n          x: 12934309.114426302,\n          y: 4831520.072779361,\n        },\n        {\n          x: 12934377.085065225,\n          y: 4831581.991332408,\n        },\n        {\n          x: 12934396.69835483,\n          y: 4831595.164926664,\n        },\n        {\n          x: 12934437.243386144,\n          y: 4831618.212550709,\n        },\n        {\n          x: 12934478.449542966,\n          y: 4831638.623777254,\n        },\n        {\n          x: 12934524.898399867,\n          y: 4831655.075704626,\n        },\n        {\n          x: 12934580.515549589,\n          y: 4831668.889447878,\n        },\n        {\n          x: 12934636.143351322,\n          y: 4831676.770691342,\n        },\n        {\n          x: 12934666.908025475,\n          y: 4831679.39163554,\n        },\n        {\n          x: 12934765.756048232,\n          y: 4831678.685510442,\n        },\n        {\n          x: 12934930.73367185,\n          y: 4831674.651678714,\n        },\n        {\n          x: 12935250.876591342,\n          y: 4831667.251747576,\n        },\n        {\n          x: 12935499.671785736,\n          y: 4831663.187574107,\n        },\n        {\n          x: 12935746.513249094,\n          y: 4831659.130713738,\n        },\n        {\n          x: 12935815.915508969,\n          y: 4831660.42132409,\n        },\n        {\n          x: 12935908.050789848,\n          y: 4831663.982781072,\n        },\n        {\n          x: 12935967.815653212,\n          y: 4831666.293463208,\n        },\n        {\n          x: 12936241.494185515,\n          y: 4831674.4963234225,\n        },\n        {\n          x: 12936369.370711273,\n          y: 4831678.336400013,\n        },\n        {\n          x: 12936425.785732588,\n          y: 4831676.31555289,\n        },\n        {\n          x: 12936581.316240864,\n          y: 4831673.037189442,\n        },\n        {\n          x: 12936633.370649267,\n          y: 4831674.963771561,\n        },\n        {\n          x: 12936737.713978717,\n          y: 4831679.370178035,\n        },\n        {\n          x: 12936831.315349536,\n          y: 4831683.322450787,\n        },\n        {\n          x: 12936877.589160608,\n          y: 4831685.252679165,\n        },\n        {\n          x: 12936910.361308584,\n          y: 4831690.419854687,\n        },\n        {\n          x: 12936949.558532905,\n          y: 4831696.881239256,\n        },\n        {\n          x: 12936987.467610013,\n          y: 4831706.574167675,\n        },\n        {\n          x: 12937022.15788816,\n          y: 4831719.5039792955,\n        },\n        {\n          x: 12937065.199754963,\n          y: 4831736.958924886,\n        },\n        {\n          x: 12937110.158974504,\n          y: 4831760.881236912,\n        },\n        {\n          x: 12937157.036534246,\n          y: 4831793.8590075895,\n        },\n        {\n          x: 12937199.404558316,\n          y: 4831833.307823846,\n        },\n        {\n          x: 12937237.91287837,\n          y: 4831875.343509309,\n        },\n        {\n          x: 12937258.446807722,\n          y: 4831901.211682247,\n        },\n        {\n          x: 12937284.10526521,\n          y: 4831938.723324833,\n        },\n        {\n          x: 12937312.95239147,\n          y: 4831994.991182708,\n        },\n        {\n          x: 12937327.68762551,\n          y: 4832030.564244142,\n        },\n        {\n          x: 12937343.684707167,\n          y: 4832083.600788961,\n        },\n        {\n          x: 12937351.972602425,\n          y: 4832131.461705969,\n        },\n        {\n          x: 12937358.31940185,\n          y: 4832186.438225887,\n        },\n        {\n          x: 12937355.622857124,\n          y: 4832274.4059191365,\n        },\n        {\n          x: 12937339.975481886,\n          y: 4832427.060379704,\n        },\n        {\n          x: 12937324.788945852,\n          y: 4832705.848365801,\n        },\n        {\n          x: 12937293.01305762,\n          y: 4832897.32304263,\n        },\n        {\n          x: 12937270.892804373,\n          y: 4833079.740939002,\n        },\n        {\n          x: 12937248.767915612,\n          y: 4833263.455352972,\n        },\n        {\n          x: 12937209.689481642,\n          y: 4833612.138889359,\n        },\n        {\n          x: 12937165.784590699,\n          y: 4834031.900756954,\n        },\n        {\n          x: 12937138.418116648,\n          y: 4834222.711592586,\n        },\n        {\n          x: 12937083.08660543,\n          y: 4834535.844936789,\n        },\n        {\n          x: 12937052.334413424,\n          y: 4834663.757169239,\n        },\n        {\n          x: 12936994.342385216,\n          y: 4834895.126983638,\n        },\n        {\n          x: 12936953.854431149,\n          y: 4835030.737985154,\n        },\n        {\n          x: 12936869.843218748,\n          y: 4835313.3219827665,\n        },\n        {\n          x: 12936862.532161772,\n          y: 4835339.778036121,\n        },\n        {\n          x: 12936836.320704404,\n          y: 4835434.637730703,\n        },\n        {\n          x: 12936827.217503313,\n          y: 4835519.169988192,\n        },\n        {\n          x: 12936827.124637516,\n          y: 4835581.758973662,\n        },\n        {\n          x: 12936837.906126408,\n          y: 4835663.063325517,\n        },\n        {\n          x: 12936864.056538468,\n          y: 4835757.266142062,\n        },\n        {\n          x: 12936880.668495258,\n          y: 4835797.917881852,\n        },\n        {\n          x: 12936907.667939143,\n          y: 4835847.318738415,\n        },\n        {\n          x: 12936952.878761742,\n          y: 4835914.1082075,\n        },\n        {\n          x: 12937000.216170117,\n          y: 4835969.234486032,\n        },\n        {\n          x: 12937063.361933991,\n          y: 4836023.2971759755,\n        },\n        {\n          x: 12937143.36704171,\n          y: 4836079.4810301885,\n        },\n        {\n          x: 12937217.081887215,\n          y: 4836115.519519725,\n        },\n        {\n          x: 12937329.790312514,\n          y: 4836151.556748291,\n        },\n        {\n          x: 12937431.328256749,\n          y: 4836175.655924688,\n        },\n        {\n          x: 12937851.122850813,\n          y: 4836275.4876682935,\n        },\n        {\n          x: 12938154.622310877,\n          y: 4836341.2390868,\n        },\n        {\n          x: 12938362.244614977,\n          y: 4836390.037264124,\n        },\n        {\n          x: 12938503.041870078,\n          y: 4836411.664485504,\n        },\n        {\n          x: 12938564.047320768,\n          y: 4836418.793423229,\n        },\n        {\n          x: 12938988.303480383,\n          y: 4836457.009886602,\n        },\n        {\n          x: 12939480.568825236,\n          y: 4836493.208155112,\n        },\n        {\n          x: 12939792.38983277,\n          y: 4836515.385447704,\n        },\n        {\n          x: 12940262.993302846,\n          y: 4836548.909357694,\n        },\n        {\n          x: 12940393.59269819,\n          y: 4836559.504709913,\n        },\n        {\n          x: 12940478.91780255,\n          y: 4836571.822251312,\n        },\n        {\n          x: 12940790.622461848,\n          y: 4836636.837138435,\n        },\n        {\n          x: 12941203.633091165,\n          y: 4836730.122990206,\n        },\n        {\n          x: 12941712.749939607,\n          y: 4836839.200160033,\n        },\n        {\n          x: 12942167.786199445,\n          y: 4836936.5137574095,\n        },\n        {\n          x: 12942294.984682916,\n          y: 4836959.65357408,\n        },\n        {\n          x: 12942610.524821742,\n          y: 4837005.682620561,\n        },\n        {\n          x: 12942843.547300853,\n          y: 4837039.413158133,\n        },\n        {\n          x: 12943166.318173433,\n          y: 4837086.947605261,\n        },\n        {\n          x: 12943510.46784253,\n          y: 4837134.81698191,\n        },\n        {\n          x: 12943617.3707184,\n          y: 4837150.799628537,\n        },\n        {\n          x: 12943658.487001108,\n          y: 4837158.769269097,\n        },\n        {\n          x: 12943691.736804834,\n          y: 4837167.08383111,\n        },\n        {\n          x: 12943717.587123148,\n          y: 4837172.921819401,\n        },\n        {\n          x: 12943814.810048617,\n          y: 4837200.232098826,\n        },\n        {\n          x: 12943917.263605423,\n          y: 4837238.058053253,\n        },\n        {\n          x: 12943974.78713743,\n          y: 4837264.277939439,\n        },\n        {\n          x: 12944030.153658753,\n          y: 4837291.952562648,\n        },\n        {\n          x: 12944135.650915911,\n          y: 4837354.294186727,\n        },\n        {\n          x: 12944445.141549075,\n          y: 4837528.417611227,\n        },\n        {\n          x: 12944644.509050895,\n          y: 4837635.945078776,\n        },\n        {\n          x: 12944685.94060137,\n          y: 4837654.409708789,\n        },\n        {\n          x: 12944719.086739298,\n          y: 4837669.359215808,\n        },\n        {\n          x: 12944794.975247588,\n          y: 4837699.716510274,\n        },\n        {\n          x: 12944947.1976908,\n          y: 4837760.873124597,\n        },\n        {\n          x: 12945035.745333357,\n          y: 4837798.266491122,\n        },\n        {\n          x: 12945124.72566364,\n          y: 4837845.286033468,\n        },\n        {\n          x: 12945270.414963193,\n          y: 4837921.319729365,\n        },\n        {\n          x: 12945450.582071586,\n          y: 4838013.632744957,\n        },\n        {\n          x: 12945577.533408465,\n          y: 4838080.445217846,\n        },\n        {\n          x: 12945834.434212714,\n          y: 4838202.613398697,\n        },\n        {\n          x: 12946075.31690205,\n          y: 4838296.146027662,\n        },\n        {\n          x: 12946292.279576164,\n          y: 4838360.532187274,\n        },\n        {\n          x: 12946521.019224824,\n          y: 4838491.165573925,\n        },\n        {\n          x: 12946638.949600644,\n          y: 4838621.542593471,\n        },\n        {\n          x: 12946650.686066799,\n          y: 4838737.438298838,\n        },\n      ],\n    },\n    {\n      id: \"3\",\n      source: \"6\",\n      target: \"7\",\n      class: \"地铁亦庄线\",\n      name: \"地铁亦庄线 0\",\n      controlPoints: [\n        {\n          x: 12960801.92985531,\n          y: 4843268.231642703,\n        },\n        {\n          x: 12960819.048596159,\n          y: 4842751.648234617,\n        },\n        {\n          x: 12960883.71369413,\n          y: 4842268.659267911,\n        },\n        {\n          x: 12960932.9503868,\n          y: 4842163.931739517,\n        },\n        {\n          x: 12961006.927248925,\n          y: 4842097.692273121,\n        },\n        {\n          x: 12961168.66192465,\n          y: 4842014.7338780835,\n        },\n        {\n          x: 12962601.717469966,\n          y: 4841896.79575762,\n        },\n        {\n          x: 12962754.46753597,\n          y: 4841885.241291034,\n        },\n        {\n          x: 12962943.500290178,\n          y: 4841880.673982279,\n        },\n        {\n          x: 12963012.112349365,\n          y: 4841876.615867013,\n        },\n        {\n          x: 12963059.010006737,\n          y: 4841861.67650217,\n        },\n        {\n          x: 12963116.452138275,\n          y: 4841834.8158408785,\n        },\n        {\n          x: 12963210.447880082,\n          y: 4841771.47221078,\n        },\n        {\n          x: 12963235.833946913,\n          y: 4841754.363392143,\n        },\n        {\n          x: 12963662.654879957,\n          y: 4841466.647965242,\n        },\n        {\n          x: 12964038.994342858,\n          y: 4841212.831358209,\n        },\n        {\n          x: 12964154.545155134,\n          y: 4841070.441342094,\n        },\n        {\n          x: 12964171.735590378,\n          y: 4841010.993206987,\n        },\n        {\n          x: 12964339.916463993,\n          y: 4840434.314594529,\n        },\n        {\n          x: 12964343.389385078,\n          y: 4840399.329742603,\n        },\n        {\n          x: 12964334.817316562,\n          y: 4840225.397102979,\n        },\n        {\n          x: 12964331.221136974,\n          y: 4840162.554061632,\n        },\n        {\n          x: 12964328.50535713,\n          y: 4840100.593094604,\n        },\n        {\n          x: 12964332.779831221,\n          y: 4840004.0775054535,\n        },\n        {\n          x: 12964346.582668858,\n          y: 4839794.207556842,\n        },\n        {\n          x: 12964363.097590594,\n          y: 4839601.773416806,\n        },\n        {\n          x: 12964380.328964364,\n          y: 4839365.602941362,\n        },\n        {\n          x: 12964385.8482237,\n          y: 4839211.548689884,\n        },\n        {\n          x: 12964387.499547305,\n          y: 4839127.002529577,\n        },\n        {\n          x: 12964391.276917182,\n          y: 4838985.794324284,\n        },\n        {\n          x: 12964392.443018869,\n          y: 4838864.958482721,\n        },\n        {\n          x: 12964394.955731656,\n          y: 4838766.690857032,\n        },\n        {\n          x: 12964393.975998627,\n          y: 4838687.027470687,\n        },\n        {\n          x: 12964387.294707682,\n          y: 4838617.567328025,\n        },\n        {\n          x: 12964367.416052649,\n          y: 4838539.309062238,\n        },\n        {\n          x: 12964347.51619,\n          y: 4838431.650587995,\n        },\n        {\n          x: 12964322.767169563,\n          y: 4838324.645467618,\n        },\n        {\n          x: 12964313.562428541,\n          y: 4838262.541243617,\n        },\n        {\n          x: 12964310.411869453,\n          y: 4838225.729635625,\n        },\n        {\n          x: 12964309.355618041,\n          y: 4838208.017849213,\n        },\n        {\n          x: 12964309.656222237,\n          y: 4838174.319843992,\n        },\n        {\n          x: 12964311.684558112,\n          y: 4838140.960443022,\n        },\n        {\n          x: 12964317.833830703,\n          y: 4838091.9543595165,\n        },\n        {\n          x: 12964329.018005343,\n          y: 4838019.745353896,\n        },\n        {\n          x: 12964357.57037216,\n          y: 4837928.397117701,\n        },\n        {\n          x: 12964379.95742845,\n          y: 4837836.721116149,\n        },\n        {\n          x: 12964395.761376698,\n          y: 4837785.937210788,\n        },\n        {\n          x: 12964408.481659109,\n          y: 4837751.494051737,\n        },\n        {\n          x: 12964423.958059136,\n          y: 4837713.2194660455,\n        },\n        {\n          x: 12964454.929082762,\n          y: 4837651.608776794,\n        },\n        {\n          x: 12964485.908545986,\n          y: 4837599.028090593,\n        },\n        {\n          x: 12964502.078122087,\n          y: 4837575.000819509,\n        },\n        {\n          x: 12964507.944067815,\n          y: 4837566.284373945,\n        },\n        {\n          x: 12964538.941616124,\n          y: 4837526.901722564,\n        },\n        {\n          x: 12964580.623847708,\n          y: 4837481.571345544,\n        },\n        {\n          x: 12964632.30168787,\n          y: 4837432.37855521,\n        },\n        {\n          x: 12964707.289879689,\n          y: 4837377.0810903795,\n        },\n        {\n          x: 12964746.5828552,\n          y: 4837352.947415166,\n        },\n        {\n          x: 12964787.599945143,\n          y: 4837330.888655926,\n        },\n        {\n          x: 12964847.234552702,\n          y: 4837303.540100147,\n        },\n        {\n          x: 12964952.379239444,\n          y: 4837263.837261641,\n        },\n        {\n          x: 12965041.659042722,\n          y: 4837228.367036585,\n        },\n        {\n          x: 12965086.817706559,\n          y: 4837212.190291242,\n        },\n        {\n          x: 12965125.425630035,\n          y: 4837197.083091712,\n        },\n        {\n          x: 12965198.852510314,\n          y: 4837173.487209741,\n        },\n        {\n          x: 12965285.035077993,\n          y: 4837148.788444636,\n        },\n        {\n          x: 12965345.022458684,\n          y: 4837136.015256971,\n        },\n        {\n          x: 12965376.741696445,\n          y: 4837131.008352433,\n        },\n        {\n          x: 12965413.288189877,\n          y: 4837126.675422853,\n        },\n        {\n          x: 12965466.732716972,\n          y: 4837121.571415942,\n        },\n        {\n          x: 12965495.35177725,\n          y: 4837119.3559531085,\n        },\n        {\n          x: 12965530.521028334,\n          y: 4837117.112703386,\n        },\n        {\n          x: 12965593.968191253,\n          y: 4837116.473776446,\n        },\n        {\n          x: 12965649.486601945,\n          y: 4837118.648806222,\n        },\n        {\n          x: 12965697.768784914,\n          y: 4837122.941340376,\n        },\n        {\n          x: 12965780.881747998,\n          y: 4837133.843576874,\n        },\n        {\n          x: 12965906.431954557,\n          y: 4837162.43093923,\n        },\n        {\n          x: 12966118.21979879,\n          y: 4837224.64350029,\n        },\n        {\n          x: 12966330.35727124,\n          y: 4837296.215654915,\n        },\n        {\n          x: 12966430.728530029,\n          y: 4837328.721880014,\n        },\n        {\n          x: 12966526.230111593,\n          y: 4837358.910915481,\n        },\n        {\n          x: 12966643.884234305,\n          y: 4837396.097468287,\n        },\n        {\n          x: 12966715.9714909,\n          y: 4837420.053074277,\n        },\n        {\n          x: 12966775.298984269,\n          y: 4837442.68182159,\n        },\n        {\n          x: 12966834.282130612,\n          y: 4837464.615069852,\n        },\n        {\n          x: 12966877.402287401,\n          y: 4837483.848933528,\n        },\n        {\n          x: 12966941.220910013,\n          y: 4837513.053573998,\n        },\n        {\n          x: 12967048.56698116,\n          y: 4837567.953487057,\n        },\n        {\n          x: 12967160.356455721,\n          y: 4837633.033932691,\n        },\n        {\n          x: 12967341.830451151,\n          y: 4837734.223029286,\n        },\n        {\n          x: 12967598.515018187,\n          y: 4837876.520746398,\n        },\n        {\n          x: 12967695.550281677,\n          y: 4837931.8672629995,\n        },\n        {\n          x: 12967769.295083275,\n          y: 4837973.927233142,\n        },\n        {\n          x: 12967806.210225426,\n          y: 4837994.921276422,\n        },\n        {\n          x: 12967880.373314308,\n          y: 4838029.263222194,\n        },\n        {\n          x: 12967942.458581364,\n          y: 4838054.463929446,\n        },\n        {\n          x: 12968006.949619304,\n          y: 4838074.960467259,\n        },\n        {\n          x: 12968064.880156811,\n          y: 4838089.239839763,\n        },\n        {\n          x: 12968160.7317529,\n          y: 4838106.785960654,\n        },\n        {\n          x: 12968223.818423554,\n          y: 4838111.656953844,\n        },\n        {\n          x: 12968280.003925696,\n          y: 4838113.086931953,\n        },\n        {\n          x: 12968326.878944056,\n          y: 4838112.138498563,\n        },\n        {\n          x: 12968367.54589312,\n          y: 4838109.4857799625,\n        },\n        {\n          x: 12968389.51656575,\n          y: 4838106.448409635,\n        },\n        {\n          x: 12968438.187831255,\n          y: 4838099.719152986,\n        },\n        {\n          x: 12968498.833145326,\n          y: 4838088.619169914,\n        },\n        {\n          x: 12968538.110375632,\n          y: 4838079.370846887,\n        },\n        {\n          x: 12968616.314083783,\n          y: 4838057.750684839,\n        },\n        {\n          x: 12968698.633058043,\n          y: 4838023.949189746,\n        },\n        {\n          x: 12968811.931290373,\n          y: 4837966.003419178,\n        },\n        {\n          x: 12968881.824553497,\n          y: 4837922.53959489,\n        },\n        {\n          x: 12968943.430079784,\n          y: 4837870.786756742,\n        },\n        {\n          x: 12969022.924111847,\n          y: 4837800.520362136,\n        },\n        {\n          x: 12969055.9530577,\n          y: 4837765.945136667,\n        },\n        {\n          x: 12969084.843050089,\n          y: 4837731.392991392,\n        },\n        {\n          x: 12969120.958078042,\n          y: 4837688.466172142,\n        },\n        {\n          x: 12969155.332209961,\n          y: 4837635.4723625,\n        },\n        {\n          x: 12969242.285513127,\n          y: 4837496.730319538,\n        },\n        {\n          x: 12969333.712761667,\n          y: 4837355.187852096,\n        },\n        {\n          x: 12969408.647255532,\n          y: 4837235.936020544,\n        },\n        {\n          x: 12969513.801304353,\n          y: 4837064.791048047,\n        },\n        {\n          x: 12969590.779687598,\n          y: 4836941.394981127,\n        },\n        {\n          x: 12969705.899936745,\n          y: 4836755.955416486,\n        },\n        {\n          x: 12969806.238916375,\n          y: 4836594.567940544,\n        },\n        {\n          x: 12969938.533153186,\n          y: 4836382.639398942,\n        },\n        {\n          x: 12970039.8160462,\n          y: 4836217.531831086,\n        },\n        {\n          x: 12970129.245947173,\n          y: 4836071.878209337,\n        },\n        {\n          x: 12970220.246216761,\n          y: 4835926.897614078,\n        },\n        {\n          x: 12970286.073547151,\n          y: 4835822.025633852,\n        },\n        {\n          x: 12970415.07546836,\n          y: 4835612.642595116,\n        },\n        {\n          x: 12970568.870650535,\n          y: 4835365.18734994,\n        },\n        {\n          x: 12970669.724938907,\n          y: 4835202.376148994,\n        },\n        {\n          x: 12970752.484735584,\n          y: 4835070.152439515,\n        },\n        {\n          x: 12970832.895625059,\n          y: 4834939.975857269,\n        },\n        {\n          x: 12970899.569476828,\n          y: 4834832.910757041,\n        },\n        {\n          x: 12971033.918129083,\n          y: 4834616.066050077,\n        },\n        {\n          x: 12971144.158073269,\n          y: 4834433.937266104,\n        },\n        {\n          x: 12971198.069970135,\n          y: 4834344.871445297,\n        },\n        {\n          x: 12971305.26943295,\n          y: 4834167.479451596,\n        },\n        {\n          x: 12971364.235194443,\n          y: 4834074.351988931,\n        },\n        {\n          x: 12971525.71156008,\n          y: 4833814.364471716,\n        },\n        {\n          x: 12971682.679083303,\n          y: 4833562.284042895,\n        },\n        {\n          x: 12971812.288419375,\n          y: 4833350.753875024,\n        },\n        {\n          x: 12972017.979800759,\n          y: 4833021.125112385,\n        },\n        {\n          x: 12972103.744545488,\n          y: 4832885.194999167,\n        },\n        {\n          x: 12972135.257382995,\n          y: 4832846.417732776,\n        },\n        {\n          x: 12972160.077781122,\n          y: 4832821.220722371,\n        },\n        {\n          x: 12972199.662509607,\n          y: 4832785.10628778,\n        },\n        {\n          x: 12972264.123885086,\n          y: 4832742.901302573,\n        },\n        {\n          x: 12972264.12408505,\n          y: 4832742.901202536,\n        },\n        {\n          x: 12972324.21434308,\n          y: 4832713.4141902095,\n        },\n        {\n          x: 12972386.305619905,\n          y: 4832692.675651716,\n        },\n        {\n          x: 12972428.804140508,\n          y: 4832685.222868618,\n        },\n        {\n          x: 12972485.012097614,\n          y: 4832680.520476171,\n        },\n        {\n          x: 12972542.168608952,\n          y: 4832680.834396475,\n        },\n        {\n          x: 12972604.011630796,\n          y: 4832688.654398485,\n        },\n        {\n          x: 12972644.212348452,\n          y: 4832699.10386752,\n        },\n        {\n          x: 12972696.734916897,\n          y: 4832717.642597281,\n        },\n        {\n          x: 12972757.695351638,\n          y: 4832749.00336457,\n        },\n        {\n          x: 12972859.999908108,\n          y: 4832813.088811927,\n        },\n        {\n          x: 12972941.093523078,\n          y: 4832860.97338974,\n        },\n        {\n          x: 12973004.727402989,\n          y: 4832901.107069043,\n        },\n        {\n          x: 12973063.375094922,\n          y: 4832939.388312671,\n        },\n        {\n          x: 12973118.709117647,\n          y: 4832976.2564467145,\n        },\n        {\n          x: 12973157.278549964,\n          y: 4833001.955820043,\n        },\n        {\n          x: 12973287.045299167,\n          y: 4833078.76948663,\n        },\n        {\n          x: 12973336.018910544,\n          y: 4833107.376876498,\n        },\n        {\n          x: 12973532.737387815,\n          y: 4833234.050880133,\n        },\n        {\n          x: 12973711.056147737,\n          y: 4833345.140835251,\n        },\n        {\n          x: 12973939.785549805,\n          y: 4833486.730983602,\n        },\n        {\n          x: 12974177.84357694,\n          y: 4833635.477147498,\n        },\n        {\n          x: 12974448.095380764,\n          y: 4833804.380259698,\n        },\n        {\n          x: 12974616.656587714,\n          y: 4833906.469350846,\n        },\n        {\n          x: 12974744.179042902,\n          y: 4833983.66343434,\n        },\n        {\n          x: 12974848.457567113,\n          y: 4834048.738895861,\n        },\n        {\n          x: 12975023.307596708,\n          y: 4834158.038177878,\n        },\n        {\n          x: 12975344.80631824,\n          y: 4834362.369596276,\n        },\n        {\n          x: 12975542.195598783,\n          y: 4834485.718127945,\n        },\n        {\n          x: 12975589.153098417,\n          y: 4834515.976788436,\n        },\n        {\n          x: 12975743.362999665,\n          y: 4834615.341611351,\n        },\n        {\n          x: 12976018.28541726,\n          y: 4834788.58647766,\n        },\n        {\n          x: 12976156.837017762,\n          y: 4834874.4406398935,\n        },\n        {\n          x: 12976203.26410973,\n          y: 4834903.209489788,\n        },\n        {\n          x: 12976425.749449603,\n          y: 4835044.1395141035,\n        },\n        {\n          x: 12976682.803252261,\n          y: 4835209.05760146,\n        },\n        {\n          x: 12977612.288689816,\n          y: 4836078.591476348,\n        },\n        {\n          x: 12977703.538800083,\n          y: 4836157.900805114,\n        },\n        {\n          x: 12977801.888863295,\n          y: 4836235.662686368,\n        },\n        {\n          x: 12978758.33292605,\n          y: 4837259.312987513,\n        },\n        {\n          x: 12978842.971959101,\n          y: 4837349.736883194,\n        },\n        {\n          x: 12979531.54154612,\n          y: 4838049.719256911,\n        },\n        {\n          x: 12979689.378903074,\n          y: 4838256.735438744,\n        },\n        {\n          x: 12980051.853140548,\n          y: 4838731.323685468,\n        },\n        {\n          x: 12980384.15998818,\n          y: 4839120.990048823,\n        },\n        {\n          x: 12980467.93565266,\n          y: 4839255.613023306,\n        },\n        {\n          x: 12980521.623321274,\n          y: 4839397.296177998,\n        },\n        {\n          x: 12980529.827086125,\n          y: 4839430.697709363,\n        },\n        {\n          x: 12980535.501366084,\n          y: 4839564.805608976,\n        },\n        {\n          x: 12980538.135068312,\n          y: 4840222.645451332,\n        },\n        {\n          x: 12980538.379641674,\n          y: 4840283.5996034695,\n        },\n        {\n          x: 12980538.543424217,\n          y: 4840324.221498785,\n        },\n        {\n          x: 12980535.067586645,\n          y: 4840405.430398631,\n        },\n        {\n          x: 12980525.345959615,\n          y: 4840470.937074263,\n        },\n        {\n          x: 12980513.995958695,\n          y: 4840544.736949112,\n        },\n      ],\n    },\n    {\n      id: \"4\",\n      source: \"8\",\n      target: \"9\",\n      class: \"地铁一号线\",\n      name: \"地铁一号线 0\",\n      controlPoints: [\n        {\n          x: 12969787.144385956,\n          y: 4852662.477041108,\n        },\n        {\n          x: 12969236.284285808,\n          y: 4852670.237943584,\n        },\n        {\n          x: 12968944.36629118,\n          y: 4852676.464039239,\n        },\n        {\n          x: 12968472.728321342,\n          y: 4852684.58530441,\n        },\n        {\n          x: 12968414.420578972,\n          y: 4852687.842999674,\n        },\n        {\n          x: 12968235.54912727,\n          y: 4852697.8323459625,\n        },\n        {\n          x: 12968069.523958666,\n          y: 4852708.845800531,\n        },\n        {\n          x: 12967520.284252618,\n          y: 4852709.247613191,\n        },\n        {\n          x: 12967117.366149856,\n          y: 4852665.62205985,\n        },\n        {\n          x: 12966772.612022452,\n          y: 4852628.17396013,\n        },\n        {\n          x: 12966517.096762186,\n          y: 4852623.936320605,\n        },\n        {\n          x: 12966223.985369124,\n          y: 4852617.830735498,\n        },\n        {\n          x: 12964521.542056274,\n          y: 4852636.984637193,\n        },\n        {\n          x: 12964462.063732337,\n          y: 4852637.63680008,\n        },\n        {\n          x: 12964380.646967553,\n          y: 4852638.41249018,\n        },\n        {\n          x: 12964310.636384122,\n          y: 4852638.548196548,\n        },\n        {\n          x: 12964259.391907305,\n          y: 4852638.609292217,\n        },\n        {\n          x: 12964063.789477564,\n          y: 4852640.250627404,\n        },\n        {\n          x: 12964002.433399238,\n          y: 4852641.068996505,\n        },\n        {\n          x: 12963990.595935801,\n          y: 4852641.261031478,\n        },\n        {\n          x: 12963890.25903454,\n          y: 4852642.515969342,\n        },\n        {\n          x: 12963809.987625448,\n          y: 4852643.546429879,\n        },\n        {\n          x: 12963781.834338633,\n          y: 4852643.942282169,\n        },\n        {\n          x: 12963774.327120606,\n          y: 4852643.970398907,\n        },\n        {\n          x: 12963455.081045607,\n          y: 4852646.588025983,\n        },\n        {\n          x: 12963322.230220675,\n          y: 4852647.784045951,\n        },\n        {\n          x: 12963223.166991241,\n          y: 4852649.725733759,\n        },\n        {\n          x: 12963190.819152791,\n          y: 4852650.417434513,\n        },\n        {\n          x: 12963127.561328052,\n          y: 4852650.0517423265,\n        },\n        {\n          x: 12963039.607865393,\n          y: 4852649.766256757,\n        },\n        {\n          x: 12962819.058636826,\n          y: 4852651.358893755,\n        },\n        {\n          x: 12962593.866965737,\n          y: 4852653.665194887,\n        },\n        {\n          x: 12962462.408622202,\n          y: 4852654.791986625,\n        },\n        {\n          x: 12962183.756523842,\n          y: 4852657.365475698,\n        },\n        {\n          x: 12962157.173752429,\n          y: 4852659.766562548,\n        },\n        {\n          x: 12961924.104038442,\n          y: 4852660.11712501,\n        },\n        {\n          x: 12961924.059855,\n          y: 4852660.116942157,\n        },\n        {\n          x: 12961900.696391538,\n          y: 4852660.033076115,\n        },\n        {\n          x: 12961567.092653673,\n          y: 4852663.388779601,\n        },\n        {\n          x: 12961454.569802668,\n          y: 4852664.505495348,\n        },\n        {\n          x: 12961217.079500727,\n          y: 4852658.515584384,\n        },\n        {\n          x: 12961149.13715287,\n          y: 4852657.212458487,\n        },\n        {\n          x: 12961133.237071244,\n          y: 4852657.247371087,\n        },\n        {\n          x: 12961027.846655574,\n          y: 4852654.2780048065,\n        },\n        {\n          x: 12960863.900760658,\n          y: 4852649.966801163,\n        },\n        {\n          x: 12960818.644700909,\n          y: 4852648.896293183,\n        },\n        {\n          x: 12960637.184863163,\n          y: 4852644.743311257,\n        },\n        {\n          x: 12960624.025816733,\n          y: 4852644.477645673,\n        },\n        {\n          x: 12960602.480219977,\n          y: 4852643.937047354,\n        },\n        {\n          x: 12960506.031680021,\n          y: 4852641.9318091385,\n        },\n        {\n          x: 12960391.353551494,\n          y: 4852639.083787939,\n        },\n        {\n          x: 12960320.201913092,\n          y: 4852637.313773441,\n        },\n        {\n          x: 12960062.18095632,\n          y: 4852628.1362550985,\n        },\n        {\n          x: 12959904.438548937,\n          y: 4852627.023597047,\n        },\n        {\n          x: 12959595.684288755,\n          y: 4852619.8846618915,\n        },\n        {\n          x: 12959323.178066703,\n          y: 4852609.481755874,\n        },\n        {\n          x: 12958840.802221617,\n          y: 4852590.942915122,\n        },\n        {\n          x: 12957502.352622895,\n          y: 4852528.684166141,\n        },\n        {\n          x: 12956620.835296787,\n          y: 4852504.508925668,\n        },\n        {\n          x: 12955674.942021938,\n          y: 4852471.61015628,\n        },\n        {\n          x: 12955416.308852747,\n          y: 4852469.018503432,\n        },\n        {\n          x: 12954706.035138829,\n          y: 4852461.803325078,\n        },\n        {\n          x: 12953928.716739,\n          y: 4852464.489858927,\n        },\n        {\n          x: 12952788.83672684,\n          y: 4852466.54282573,\n        },\n        {\n          x: 12952748.81253644,\n          y: 4852466.605133841,\n        },\n        {\n          x: 12951563.203060223,\n          y: 4852477.671537925,\n        },\n        {\n          x: 12951199.751181506,\n          y: 4852495.122833292,\n        },\n        {\n          x: 12950198.141508736,\n          y: 4852495.025451202,\n        },\n        {\n          x: 12949965.299984097,\n          y: 4852495.077305805,\n        },\n        {\n          x: 12949129.26242653,\n          y: 4852504.598358415,\n        },\n        {\n          x: 12947838.444126923,\n          y: 4852505.90698292,\n        },\n        {\n          x: 12947589.306786017,\n          y: 4852505.320736883,\n        },\n        {\n          x: 12945901.390879856,\n          y: 4852501.577557874,\n        },\n        {\n          x: 12944980.974916212,\n          y: 4852499.625168126,\n        },\n        {\n          x: 12943548.12132782,\n          y: 4852497.380847655,\n        },\n        {\n          x: 12942376.001682293,\n          y: 4852500.03430738,\n        },\n        {\n          x: 12941203.789519304,\n          y: 4852502.985840143,\n        },\n        {\n          x: 12939774.001753055,\n          y: 4852500.299665425,\n        },\n        {\n          x: 12938324.854233196,\n          y: 4852497.834034189,\n        },\n        {\n          x: 12938281.788912078,\n          y: 4852497.828983922,\n        },\n        {\n          x: 12938058.817138307,\n          y: 4852497.810737135,\n        },\n        {\n          x: 12937898.86276059,\n          y: 4852497.3685845565,\n        },\n        {\n          x: 12937671.875809424,\n          y: 4852496.791572168,\n        },\n        {\n          x: 12937460.220387606,\n          y: 4852497.967734828,\n        },\n        {\n          x: 12937174.041187,\n          y: 4852498.731022245,\n        },\n        {\n          x: 12937173.96999806,\n          y: 4852498.730233027,\n        },\n        {\n          x: 12937136.194604035,\n          y: 4852498.300376261,\n        },\n        {\n          x: 12936946.821682766,\n          y: 4852498.918736944,\n        },\n        {\n          x: 12936849.614381388,\n          y: 4852498.356186343,\n        },\n        {\n          x: 12936692.322356569,\n          y: 4852497.959326306,\n        },\n        {\n          x: 12936587.17645106,\n          y: 4852498.5677669365,\n        },\n        {\n          x: 12934252.339824114,\n          y: 4852499.457888381,\n        },\n        {\n          x: 12934092.666854141,\n          y: 4852498.783005591,\n        },\n        {\n          x: 12933957.2920676,\n          y: 4852554.157396755,\n        },\n        {\n          x: 12933867.245068891,\n          y: 4852636.768727248,\n        },\n        {\n          x: 12933790.29537299,\n          y: 4852771.049393255,\n        },\n        {\n          x: 12933709.54499776,\n          y: 4852986.243814959,\n        },\n        {\n          x: 12933275.354659256,\n          y: 4854146.7353322515,\n        },\n      ],\n    },\n    {\n      id: \"5\",\n      source: \"10\",\n      target: \"11\",\n      class: \"地铁大兴线\",\n      name: \"地铁大兴线 0\",\n      controlPoints: [\n        {\n          x: 12954320.097829182,\n          y: 4841755.370768595,\n        },\n        {\n          x: 12954269.565863218,\n          y: 4841475.231416884,\n        },\n        {\n          x: 12954109.467427691,\n          y: 4840587.804965775,\n        },\n        {\n          x: 12953795.666789988,\n          y: 4838847.936111765,\n        },\n        {\n          x: 12953779.74076359,\n          y: 4838781.406112334,\n        },\n        {\n          x: 12953764.911988458,\n          y: 4838735.372116771,\n        },\n        {\n          x: 12953728.040718146,\n          y: 4838684.612972186,\n        },\n        {\n          x: 12953200.942060454,\n          y: 4837849.787883376,\n        },\n        {\n          x: 12953071.02731984,\n          y: 4837651.869209399,\n        },\n        {\n          x: 12952979.616992796,\n          y: 4837589.00545091,\n        },\n        {\n          x: 12952903.159508042,\n          y: 4837579.42379109,\n        },\n        {\n          x: 12952782.211602798,\n          y: 4837577.388802782,\n        },\n        {\n          x: 12952678.006507806,\n          y: 4837568.850794091,\n        },\n        {\n          x: 12952630.246652557,\n          y: 4837568.346663251,\n        },\n        {\n          x: 12952563.144880537,\n          y: 4837569.3784104185,\n        },\n        {\n          x: 12952459.727695232,\n          y: 4837576.654353493,\n        },\n        {\n          x: 12952047.259057738,\n          y: 4837602.473680529,\n        },\n        {\n          x: 12951992.11263072,\n          y: 4837607.014363404,\n        },\n        {\n          x: 12951930.600837775,\n          y: 4837607.287158209,\n        },\n        {\n          x: 12951859.333033504,\n          y: 4837604.988006545,\n        },\n        {\n          x: 12951659.950799704,\n          y: 4837590.463923004,\n        },\n        {\n          x: 12951511.86811374,\n          y: 4837581.708907432,\n        },\n        {\n          x: 12951503.592170091,\n          y: 4837581.306936129,\n        },\n        {\n          x: 12951471.758692794,\n          y: 4837579.760443551,\n        },\n        {\n          x: 12951416.434195919,\n          y: 4837581.464508876,\n        },\n        {\n          x: 12951320.836636368,\n          y: 4837591.26673181,\n        },\n        {\n          x: 12951208.471245904,\n          y: 4837608.1171654025,\n        },\n        {\n          x: 12951130.332944639,\n          y: 4837620.206020496,\n        },\n        {\n          x: 12951053.162266875,\n          y: 4837624.532130631,\n        },\n        {\n          x: 12950994.073467728,\n          y: 4837620.818036712,\n        },\n        {\n          x: 12950952.099045333,\n          y: 4837614.236065724,\n        },\n        {\n          x: 12950903.02068405,\n          y: 4837603.431351229,\n        },\n        {\n          x: 12950854.265358152,\n          y: 4837586.804646552,\n        },\n        {\n          x: 12950803.897617934,\n          y: 4837565.966975064,\n        },\n        {\n          x: 12950750.622557428,\n          y: 4837538.00750994,\n        },\n        {\n          x: 12950713.171179097,\n          y: 4837512.0295137195,\n        },\n        {\n          x: 12950613.406373397,\n          y: 4837431.864322759,\n        },\n        {\n          x: 12950473.803516785,\n          y: 4837318.037136518,\n        },\n        {\n          x: 12950224.739204535,\n          y: 4837111.815739738,\n        },\n        {\n          x: 12949781.71624435,\n          y: 4836761.283068602,\n        },\n        {\n          x: 12949728.565575039,\n          y: 4836716.7570553925,\n        },\n        {\n          x: 12949703.653419532,\n          y: 4836690.060944494,\n        },\n        {\n          x: 12949670.437469736,\n          y: 4836646.1427171705,\n        },\n        {\n          x: 12949640.546313735,\n          y: 4836599.462744173,\n        },\n        {\n          x: 12949602.355321119,\n          y: 4836518.919640969,\n        },\n        {\n          x: 12949581.32899617,\n          y: 4836447.855053628,\n        },\n        {\n          x: 12949571.933781365,\n          y: 4836366.283691224,\n        },\n        {\n          x: 12949570.99564922,\n          y: 4836297.018513739,\n        },\n        {\n          x: 12949583.773060184,\n          y: 4836131.096596216,\n        },\n        {\n          x: 12949630.95790481,\n          y: 4835587.242148269,\n        },\n        {\n          x: 12949644.605106963,\n          y: 4835427.978435933,\n        },\n        {\n          x: 12949674.069930378,\n          y: 4835084.076939791,\n        },\n        {\n          x: 12949741.123785608,\n          y: 4834412.860058607,\n        },\n        {\n          x: 12949881.255387962,\n          y: 4833114.597124276,\n        },\n        {\n          x: 12949988.167188657,\n          y: 4831634.321648644,\n        },\n        {\n          x: 12950011.8904392,\n          y: 4831024.642033773,\n        },\n        {\n          x: 12950045.949834898,\n          y: 4830169.250105037,\n        },\n        {\n          x: 12950067.86965607,\n          y: 4829187.531131907,\n        },\n        {\n          x: 12950068.411119526,\n          y: 4828643.488667632,\n        },\n        {\n          x: 12950089.439076275,\n          y: 4827012.598861079,\n        },\n        {\n          x: 12950075.332266735,\n          y: 4825735.265538567,\n        },\n        {\n          x: 12950077.6177772,\n          y: 4825610.926281617,\n        },\n        {\n          x: 12950063.743562018,\n          y: 4825551.423688702,\n        },\n        {\n          x: 12949886.484341538,\n          y: 4825355.5838901615,\n        },\n        {\n          x: 12949714.24435096,\n          y: 4825240.542840744,\n        },\n        {\n          x: 12948810.72447873,\n          y: 4824919.1962220995,\n        },\n        {\n          x: 12948630.372620959,\n          y: 4824779.957329413,\n        },\n        {\n          x: 12948551.763527192,\n          y: 4824562.001534207,\n        },\n        {\n          x: 12948571.333401924,\n          y: 4824233.799839876,\n        },\n        {\n          x: 12948851.677430334,\n          y: 4820591.681083957,\n        },\n        {\n          x: 12948856.025176648,\n          y: 4820535.340838382,\n        },\n        {\n          x: 12948857.519128771,\n          y: 4820485.531178259,\n        },\n      ],\n    },\n    {\n      id: \"6\",\n      source: \"12\",\n      target: \"13\",\n      class: \"地铁四号线\",\n      name: \"地铁四号线 0\",\n      controlPoints: [\n        {\n          x: 12954373.657756021,\n          y: 4843560.934009259,\n        },\n        {\n          x: 12954403.308395952,\n          y: 4844637.092136642,\n        },\n        {\n          x: 12954443.631939387,\n          y: 4845049.84687948,\n        },\n        {\n          x: 12954465.385927541,\n          y: 4845230.316998346,\n        },\n        {\n          x: 12954477.104733607,\n          y: 4845295.713890768,\n        },\n        {\n          x: 12954510.159202749,\n          y: 4845363.4843960125,\n        },\n        {\n          x: 12954722.716019211,\n          y: 4845628.35857464,\n        },\n        {\n          x: 12954922.594454948,\n          y: 4845874.895440882,\n        },\n        {\n          x: 12955211.028271338,\n          y: 4846209.062552702,\n        },\n        {\n          x: 12955269.78815066,\n          y: 4846334.5600019405,\n        },\n        {\n          x: 12955267.306704495,\n          y: 4846529.094981971,\n        },\n        {\n          x: 12955200.99362026,\n          y: 4846713.313157282,\n        },\n        {\n          x: 12955050.45468214,\n          y: 4846989.573067081,\n        },\n        {\n          x: 12954853.97442472,\n          y: 4847378.402945743,\n        },\n        {\n          x: 12954774.906886864,\n          y: 4847675.2444390515,\n        },\n        {\n          x: 12954731.85449024,\n          y: 4848212.883938044,\n        },\n        {\n          x: 12954744.79924884,\n          y: 4848786.391306657,\n        },\n        {\n          x: 12954747.612023802,\n          y: 4849835.643590178,\n        },\n        {\n          x: 12954747.682216099,\n          y: 4849861.774043528,\n        },\n        {\n          x: 12954741.08816034,\n          y: 4850881.230635524,\n        },\n        {\n          x: 12954737.645653786,\n          y: 4851386.201206222,\n        },\n        {\n          x: 12954721.760149185,\n          y: 4851926.74810973,\n        },\n        {\n          x: 12954706.035138829,\n          y: 4852461.803325078,\n        },\n        {\n          x: 12954661.27452527,\n          y: 4853769.120768002,\n        },\n        {\n          x: 12954633.49377667,\n          y: 4854880.847809376,\n        },\n        {\n          x: 12954587.535533391,\n          y: 4856278.18149549,\n        },\n        {\n          x: 12954557.952698175,\n          y: 4857155.485744631,\n        },\n        {\n          x: 12954557.437163154,\n          y: 4857170.770202318,\n        },\n        {\n          x: 12954537.64640468,\n          y: 4857234.798733779,\n        },\n        {\n          x: 12954507.61800925,\n          y: 4857265.498611502,\n        },\n        {\n          x: 12954448.18840873,\n          y: 4857290.387739614,\n        },\n        {\n          x: 12954389.022163786,\n          y: 4857304.787614773,\n        },\n        {\n          x: 12954302.10618948,\n          y: 4857314.253741188,\n        },\n        {\n          x: 12954046.446788153,\n          y: 4857314.448443049,\n        },\n        {\n          x: 12952788.718781503,\n          y: 4857298.136733208,\n        },\n        {\n          x: 12952635.915840019,\n          y: 4857296.152572144,\n        },\n        {\n          x: 12952564.595755607,\n          y: 4857295.107641618,\n        },\n        {\n          x: 12952364.409316596,\n          y: 4857273.12227582,\n        },\n        {\n          x: 12952154.040871462,\n          y: 4857235.468350076,\n        },\n        {\n          x: 12951969.43909615,\n          y: 4857201.456667664,\n        },\n        {\n          x: 12951808.104168849,\n          y: 4857155.825128381,\n        },\n        {\n          x: 12951795.707910977,\n          y: 4857150.112186163,\n        },\n        {\n          x: 12951672.542241815,\n          y: 4857093.348351254,\n        },\n        {\n          x: 12951530.459501661,\n          y: 4857032.392475653,\n        },\n        {\n          x: 12951457.165035697,\n          y: 4857016.611367204,\n        },\n        {\n          x: 12951413.82925054,\n          y: 4857010.241801462,\n        },\n        {\n          x: 12951362.398381047,\n          y: 4857007.948880891,\n        },\n        {\n          x: 12951289.260741765,\n          y: 4857006.283719927,\n        },\n        {\n          x: 12951243.494159421,\n          y: 4857003.966436169,\n        },\n        {\n          x: 12951198.613096055,\n          y: 4857003.604147996,\n        },\n        {\n          x: 12951191.52223199,\n          y: 4857003.216630181,\n        },\n        {\n          x: 12951176.410532618,\n          y: 4857002.724713779,\n        },\n        {\n          x: 12950664.103792224,\n          y: 4856969.636138788,\n        },\n        {\n          x: 12950490.915616779,\n          y: 4856960.604637075,\n        },\n        {\n          x: 12950376.449417142,\n          y: 4856957.730451393,\n        },\n        {\n          x: 12950275.412423559,\n          y: 4856958.095432962,\n        },\n        {\n          x: 12950197.754097624,\n          y: 4856965.795888429,\n        },\n        {\n          x: 12950087.769172028,\n          y: 4856976.7011729805,\n        },\n        {\n          x: 12949969.030407438,\n          y: 4856988.731925641,\n        },\n        {\n          x: 12949611.385620916,\n          y: 4857033.614270364,\n        },\n        {\n          x: 12949433.088418497,\n          y: 4857064.900798794,\n        },\n        {\n          x: 12949359.045249254,\n          y: 4857097.992433988,\n        },\n        {\n          x: 12949324.284422386,\n          y: 4857141.787668212,\n        },\n        {\n          x: 12949323.829516204,\n          y: 4857143.221560914,\n        },\n        {\n          x: 12949294.040752294,\n          y: 4857237.088716105,\n        },\n        {\n          x: 12949290.965819698,\n          y: 4857281.5241520675,\n        },\n        {\n          x: 12949290.844836328,\n          y: 4857284.326685918,\n        },\n        {\n          x: 12949286.84859171,\n          y: 4857363.3786635455,\n        },\n        {\n          x: 12949255.74271649,\n          y: 4857669.774620552,\n        },\n        {\n          x: 12949251.021282567,\n          y: 4857716.034187529,\n        },\n        {\n          x: 12949240.534414742,\n          y: 4857818.781418282,\n        },\n        {\n          x: 12949229.599655101,\n          y: 4857925.935052169,\n        },\n        {\n          x: 12949223.285025857,\n          y: 4857987.8014169345,\n        },\n        {\n          x: 12949218.68930698,\n          y: 4858032.839792737,\n        },\n        {\n          x: 12949202.705857255,\n          y: 4858189.081518219,\n        },\n        {\n          x: 12949201.91675542,\n          y: 4858197.081514944,\n        },\n        {\n          x: 12949188.720634252,\n          y: 4858325.005565848,\n        },\n        {\n          x: 12949171.484932527,\n          y: 4858492.101118972,\n        },\n        {\n          x: 12949140.242605533,\n          y: 4858794.965387163,\n        },\n        {\n          x: 12949128.462758997,\n          y: 4858908.105794337,\n        },\n        {\n          x: 12949119.684607878,\n          y: 4858997.242106079,\n        },\n        {\n          x: 12949117.630120248,\n          y: 4859021.712509141,\n        },\n        {\n          x: 12949113.161648553,\n          y: 4859077.167116614,\n        },\n        {\n          x: 12949110.991163222,\n          y: 4859101.470621213,\n        },\n        {\n          x: 12949110.099969309,\n          y: 4859112.821822983,\n        },\n        {\n          x: 12949108.911677599,\n          y: 4859127.083425599,\n        },\n        {\n          x: 12949101.505333235,\n          y: 4859206.231246072,\n        },\n        {\n          x: 12949098.141760852,\n          y: 4859235.087958121,\n        },\n        {\n          x: 12949086.945661454,\n          y: 4859330.204405712,\n        },\n        {\n          x: 12949080.506525062,\n          y: 4859390.090037273,\n        },\n        {\n          x: 12949072.760807924,\n          y: 4859454.574381684,\n        },\n        {\n          x: 12949053.421043288,\n          y: 4859613.1813176535,\n        },\n        {\n          x: 12949006.291508188,\n          y: 4860099.103019413,\n        },\n        {\n          x: 12948987.273876615,\n          y: 4860281.083185734,\n        },\n        {\n          x: 12948981.095505225,\n          y: 4860340.214580902,\n        },\n        {\n          x: 12948971.386815451,\n          y: 4860438.818238612,\n        },\n        {\n          x: 12948968.790673513,\n          y: 4860465.186182631,\n        },\n        {\n          x: 12948957.099444743,\n          y: 4860583.923590711,\n        },\n        {\n          x: 12948954.944696926,\n          y: 4860602.30153119,\n        },\n        {\n          x: 12948953.629329322,\n          y: 4860611.371156355,\n        },\n        {\n          x: 12948945.376137566,\n          y: 4860665.772419023,\n        },\n        {\n          x: 12948943.371389516,\n          y: 4860677.809759844,\n        },\n        {\n          x: 12948941.428640455,\n          y: 4860688.287999877,\n        },\n        {\n          x: 12948940.027077485,\n          y: 4860695.8687290335,\n        },\n        {\n          x: 12948933.979640268,\n          y: 4860726.099657515,\n        },\n        {\n          x: 12948928.21129958,\n          y: 4860754.943783897,\n        },\n        {\n          x: 12948925.53477491,\n          y: 4860767.8741438445,\n        },\n        {\n          x: 12948914.390798561,\n          y: 4860816.020402436,\n        },\n        {\n          x: 12948908.818966143,\n          y: 4860838.981437038,\n        },\n        {\n          x: 12948891.21272109,\n          y: 4860906.962985634,\n        },\n        {\n          x: 12948891.084425297,\n          y: 4860907.371989038,\n        },\n        {\n          x: 12948849.368497113,\n          y: 4861042.125295077,\n        },\n        {\n          x: 12948835.90431828,\n          y: 4861088.737227414,\n        },\n        {\n          x: 12948830.296142103,\n          y: 4861108.420813816,\n        },\n        {\n          x: 12948822.04407856,\n          y: 4861138.651794888,\n        },\n        {\n          x: 12948813.499036651,\n          y: 4861166.617294492,\n        },\n        {\n          x: 12948805.08019881,\n          y: 4861193.008798196,\n        },\n        {\n          x: 12948779.113573417,\n          y: 4861277.779889043,\n        },\n        {\n          x: 12948764.04589559,\n          y: 4861326.974101848,\n        },\n        {\n          x: 12948764.026496535,\n          y: 4861327.037202654,\n        },\n        {\n          x: 12948753.359326178,\n          y: 4861360.815953497,\n        },\n        {\n          x: 12948743.747416658,\n          y: 4861389.941771785,\n        },\n        {\n          x: 12948718.178381432,\n          y: 4861470.921841358,\n        },\n        {\n          x: 12948696.13872888,\n          y: 4861543.199816692,\n        },\n        {\n          x: 12948691.345809,\n          y: 4861558.918058851,\n        },\n        {\n          x: 12948670.805545585,\n          y: 4861626.292230624,\n        },\n        {\n          x: 12948635.660998613,\n          y: 4861741.800393923,\n        },\n        {\n          x: 12948620.137949644,\n          y: 4861792.813013884,\n        },\n        {\n          x: 12948586.362157172,\n          y: 4861900.900528574,\n        },\n        {\n          x: 12948570.146171637,\n          y: 4861955.959000696,\n        },\n        {\n          x: 12948553.55913321,\n          y: 4862007.46980901,\n        },\n        {\n          x: 12948506.607909067,\n          y: 4862151.020102147,\n        },\n        {\n          x: 12948474.477154713,\n          y: 4862249.710439044,\n        },\n        {\n          x: 12948433.854782313,\n          y: 4862372.508539395,\n        },\n        {\n          x: 12948405.896567902,\n          y: 4862457.026555028,\n        },\n        {\n          x: 12948387.467864858,\n          y: 4862540.95750102,\n        },\n        {\n          x: 12948369.72084694,\n          y: 4862608.589042327,\n        },\n        {\n          x: 12948351.287448928,\n          y: 4862705.352991365,\n        },\n        {\n          x: 12948349.399856329,\n          y: 4862717.969572795,\n        },\n        {\n          x: 12948342.9554688,\n          y: 4862761.161096935,\n        },\n        {\n          x: 12948334.103059907,\n          y: 4862815.789967469,\n        },\n        {\n          x: 12948330.745336216,\n          y: 4862847.533998459,\n        },\n        {\n          x: 12948330.324781813,\n          y: 4862857.667238568,\n        },\n        {\n          x: 12948330.719618713,\n          y: 4862923.321583864,\n        },\n        {\n          x: 12948329.271456743,\n          y: 4863030.035711758,\n        },\n        {\n          x: 12948318.983617261,\n          y: 4863152.700650098,\n        },\n        {\n          x: 12948308.624791207,\n          y: 4863323.528821448,\n        },\n        {\n          x: 12948305.573238118,\n          y: 4863383.023344128,\n        },\n        {\n          x: 12948304.882713268,\n          y: 4863410.205718649,\n        },\n        {\n          x: 12948304.34907461,\n          y: 4863418.883075538,\n        },\n        {\n          x: 12948304.349074604,\n          y: 4863418.883175537,\n        },\n        {\n          x: 12948293.57852302,\n          y: 4863594.090943488,\n        },\n        {\n          x: 12948292.26537664,\n          y: 4863615.222388438,\n        },\n        {\n          x: 12948285.911429897,\n          y: 4863694.78289179,\n        },\n        {\n          x: 12948279.888862576,\n          y: 4863721.625153882,\n        },\n        {\n          x: 12948276.328498306,\n          y: 4863738.652548549,\n        },\n        {\n          x: 12948273.0212985,\n          y: 4863779.761424982,\n        },\n        {\n          x: 12948271.391195413,\n          y: 4863804.060012918,\n        },\n        {\n          x: 12948269.44583099,\n          y: 4863833.063038297,\n        },\n        {\n          x: 12948268.544436276,\n          y: 4863862.57964908,\n        },\n        {\n          x: 12948264.951457486,\n          y: 4863980.229798113,\n        },\n        {\n          x: 12948262.743327497,\n          y: 4864012.842760259,\n        },\n        {\n          x: 12948253.95970473,\n          y: 4864163.393230665,\n        },\n        {\n          x: 12948251.540303396,\n          y: 4864206.470731608,\n        },\n        {\n          x: 12948212.079753308,\n          y: 4864794.335183325,\n        },\n        {\n          x: 12948192.775449837,\n          y: 4865057.815886522,\n        },\n        {\n          x: 12948172.296877252,\n          y: 4865301.5112607,\n        },\n        {\n          x: 12948164.786289226,\n          y: 4865392.804538419,\n        },\n        {\n          x: 12948154.255917,\n          y: 4865512.14757284,\n        },\n        {\n          x: 12948154.255917,\n          y: 4865512.1477728365,\n        },\n        {\n          x: 12948149.74303433,\n          y: 4865560.011840421,\n        },\n        {\n          x: 12948144.366829144,\n          y: 4865612.142398512,\n        },\n        {\n          x: 12948143.959623424,\n          y: 4865618.525997311,\n        },\n        {\n          x: 12948137.439734928,\n          y: 4865720.508486359,\n        },\n        {\n          x: 12948107.519605923,\n          y: 4865814.2291544955,\n        },\n        {\n          x: 12948078.069647746,\n          y: 4865856.462480031,\n        },\n        {\n          x: 12948024.306038419,\n          y: 4865884.525941556,\n        },\n        {\n          x: 12947948.793208137,\n          y: 4865895.857790665,\n        },\n        {\n          x: 12947726.110412342,\n          y: 4865901.65407643,\n        },\n        {\n          x: 12947662.03325602,\n          y: 4865903.549335554,\n        },\n        {\n          x: 12947582.728775566,\n          y: 4865884.474219018,\n        },\n        {\n          x: 12947578.428732935,\n          y: 4865883.43990478,\n        },\n        {\n          x: 12947516.084078891,\n          y: 4865861.968135664,\n        },\n        {\n          x: 12947457.991019811,\n          y: 4865841.929292836,\n        },\n        {\n          x: 12947430.320338927,\n          y: 4865825.17744688,\n        },\n        {\n          x: 12947403.34891173,\n          y: 4865801.908641243,\n        },\n        {\n          x: 12947385.583410634,\n          y: 4865783.125515066,\n        },\n        {\n          x: 12947366.462947419,\n          y: 4865758.28002787,\n        },\n        {\n          x: 12947349.636991477,\n          y: 4865736.761035594,\n        },\n        {\n          x: 12947325.434427919,\n          y: 4865705.9521581745,\n        },\n        {\n          x: 12947293.294439247,\n          y: 4865662.223273893,\n        },\n        {\n          x: 12947280.026460873,\n          y: 4865645.503535422,\n        },\n        {\n          x: 12947272.790190758,\n          y: 4865637.152186299,\n        },\n        {\n          x: 12947264.45234974,\n          y: 4865630.50206878,\n        },\n        {\n          x: 12947253.895662466,\n          y: 4865622.890310138,\n        },\n        {\n          x: 12947242.3961359,\n          y: 4865615.799413275,\n        },\n        {\n          x: 12947228.023148427,\n          y: 4865608.898160762,\n        },\n        {\n          x: 12947219.081559768,\n          y: 4865605.561492597,\n        },\n        {\n          x: 12947209.673061684,\n          y: 4865603.139115063,\n        },\n        {\n          x: 12947199.896463385,\n          y: 4865601.658737004,\n        },\n        {\n          x: 12947170.376100887,\n          y: 4865598.241728645,\n        },\n        {\n          x: 12947114.262342412,\n          y: 4865594.002744353,\n        },\n        {\n          x: 12947069.303568143,\n          y: 4865590.097302363,\n        },\n        {\n          x: 12946996.955287198,\n          y: 4865580.432522639,\n        },\n        {\n          x: 12946941.228131976,\n          y: 4865573.255125918,\n        },\n        {\n          x: 12946900.084918642,\n          y: 4865569.517658332,\n        },\n        {\n          x: 12946822.761463061,\n          y: 4865560.673446433,\n        },\n        {\n          x: 12946727.614742137,\n          y: 4865552.84563637,\n        },\n        {\n          x: 12946678.905013254,\n          y: 4865548.119018174,\n        },\n        {\n          x: 12946642.17997207,\n          y: 4865544.956115833,\n        },\n        {\n          x: 12946584.893309405,\n          y: 4865543.859270443,\n        },\n        {\n          x: 12946544.506879704,\n          y: 4865545.213818521,\n        },\n        {\n          x: 12946501.165103968,\n          y: 4865545.26638306,\n        },\n        {\n          x: 12946422.048745677,\n          y: 4865542.2614939865,\n        },\n        {\n          x: 12946366.591065088,\n          y: 4865538.478497777,\n        },\n        {\n          x: 12946343.54274385,\n          y: 4865536.796393288,\n        },\n        {\n          x: 12946313.331102742,\n          y: 4865534.072102609,\n        },\n        {\n          x: 12946276.992936801,\n          y: 4865530.295722415,\n        },\n        {\n          x: 12946044.983768271,\n          y: 4865506.53848812,\n        },\n        {\n          x: 12946044.982468616,\n          y: 4865506.538388461,\n        },\n        {\n          x: 12945999.054564236,\n          y: 4865501.51634233,\n        },\n        {\n          x: 12945939.11875475,\n          y: 4865501.919490546,\n        },\n        {\n          x: 12945842.188083762,\n          y: 4865505.838142619,\n        },\n        {\n          x: 12945841.360324211,\n          y: 4865506.238193714,\n        },\n        {\n          x: 12945718.088826543,\n          y: 4865565.803399573,\n        },\n        {\n          x: 12945361.171856038,\n          y: 4865725.241244186,\n        },\n        {\n          x: 12945288.888034362,\n          y: 4865771.876347319,\n        },\n        {\n          x: 12944971.787632536,\n          y: 4865960.501491743,\n        },\n        {\n          x: 12944694.050529143,\n          y: 4866125.748562615,\n        },\n        {\n          x: 12944571.275779925,\n          y: 4866175.496896087,\n        },\n        {\n          x: 12944486.984637886,\n          y: 4866196.026940467,\n        },\n        {\n          x: 12944376.91914833,\n          y: 4866212.279980763,\n        },\n        {\n          x: 12943875.491423381,\n          y: 4866303.184805465,\n        },\n        {\n          x: 12943715.625648474,\n          y: 4866329.140561554,\n        },\n        {\n          x: 12943691.286623739,\n          y: 4866336.782693048,\n        },\n        {\n          x: 12943666.684753045,\n          y: 4866355.700580207,\n        },\n        {\n          x: 12943647.036226608,\n          y: 4866386.77867161,\n        },\n        {\n          x: 12943618.683377,\n          y: 4866431.5171539625,\n        },\n        {\n          x: 12943575.591938026,\n          y: 4866503.065200196,\n        },\n        {\n          x: 12943549.272841655,\n          y: 4866548.372445914,\n        },\n        {\n          x: 12943513.655516205,\n          y: 4866606.664160266,\n        },\n        {\n          x: 12943464.443157,\n          y: 4866692.552688016,\n        },\n        {\n          x: 12943362.33352031,\n          y: 4866844.144888357,\n        },\n        {\n          x: 12943298.332087196,\n          y: 4866965.865469642,\n        },\n        {\n          x: 12943194.660765983,\n          y: 4867152.9265388595,\n        },\n        {\n          x: 12943140.884084987,\n          y: 4867273.386822292,\n        },\n        {\n          x: 12943114.423065275,\n          y: 4867594.932334096,\n        },\n        {\n          x: 12943113.763426922,\n          y: 4867602.948598135,\n        },\n        {\n          x: 12943108.181515867,\n          y: 4867757.799791251,\n        },\n      ],\n    },\n    {\n      id: \"7\",\n      source: \"14\",\n      target: \"15\",\n      class: \"地铁六号线\",\n      name: \"地铁六号线 0\",\n      controlPoints: [\n        {\n          x: 12944329.792132245,\n          y: 4856125.732393313,\n        },\n        {\n          x: 12944374.963417206,\n          y: 4856132.075934602,\n        },\n        {\n          x: 12944438.830775484,\n          y: 4856136.896376604,\n        },\n        {\n          x: 12944515.16641718,\n          y: 4856137.056480541,\n        },\n        {\n          x: 12944577.483953971,\n          y: 4856135.625803216,\n        },\n        {\n          x: 12944642.924413817,\n          y: 4856126.389908644,\n        },\n        {\n          x: 12944711.48482392,\n          y: 4856114.036716937,\n        },\n        {\n          x: 12944790.955263415,\n          y: 4856098.58349056,\n        },\n        {\n          x: 12944854.842780758,\n          y: 4856089.348004857,\n        },\n        {\n          x: 12944925.484679118,\n          y: 4856086.034136885,\n        },\n        {\n          x: 12944964.41973033,\n          y: 4856083.331773158,\n        },\n        {\n          x: 12944978.393002376,\n          y: 4856082.950699846,\n        },\n        {\n          x: 12945058.975743152,\n          y: 4856080.754937213,\n        },\n        {\n          x: 12945281.461997462,\n          y: 4856092.418480259,\n        },\n        {\n          x: 12945643.041754864,\n          y: 4856110.003093847,\n        },\n        {\n          x: 12945784.907202916,\n          y: 4856113.134308052,\n        },\n        {\n          x: 12946578.056629626,\n          y: 4856112.4447421245,\n        },\n        {\n          x: 12947587.39674028,\n          y: 4856115.133251456,\n        },\n        {\n          x: 12947613.274919279,\n          y: 4856115.203954564,\n        },\n        {\n          x: 12948409.558918482,\n          y: 4856120.2980670845,\n        },\n        {\n          x: 12950197.88091994,\n          y: 4856127.655709365,\n        },\n        {\n          x: 12950522.56167453,\n          y: 4856128.972474555,\n        },\n        {\n          x: 12952789.177160164,\n          y: 4856124.15803456,\n        },\n        {\n          x: 12953464.615126304,\n          y: 4856122.0006891955,\n        },\n        {\n          x: 12954530.376567366,\n          y: 4856151.814350079,\n        },\n        {\n          x: 12955417.241989752,\n          y: 4856201.3555319505,\n        },\n        {\n          x: 12956068.761834681,\n          y: 4856237.46303956,\n        },\n        {\n          x: 12956833.347700687,\n          y: 4856274.21357933,\n        },\n        {\n          x: 12958297.780383743,\n          y: 4856277.010194032,\n        },\n        {\n          x: 12958569.623250166,\n          y: 4856268.920119228,\n        },\n        {\n          x: 12958601.133725567,\n          y: 4855382.984479329,\n        },\n        {\n          x: 12958611.676282825,\n          y: 4855232.673994465,\n        },\n        {\n          x: 12958632.866942339,\n          y: 4855139.665765479,\n        },\n        {\n          x: 12958688.973578054,\n          y: 4855045.110782978,\n        },\n        {\n          x: 12958728.4139951,\n          y: 4855000.874038989,\n        },\n        {\n          x: 12958770.892719645,\n          y: 4854961.207780969,\n        },\n        {\n          x: 12958799.677543039,\n          y: 4854945.921102297,\n        },\n        {\n          x: 12959324.962061018,\n          y: 4854945.451113535,\n        },\n        {\n          x: 12959585.872160498,\n          y: 4854945.153439757,\n        },\n        {\n          x: 12961042.442201044,\n          y: 4854962.677000188,\n        },\n        {\n          x: 12961432.109595038,\n          y: 4854972.467899889,\n        },\n        {\n          x: 12961926.386577822,\n          y: 4854934.294285994,\n        },\n        {\n          x: 12962148.74759053,\n          y: 4854917.131482158,\n        },\n        {\n          x: 12962283.599321207,\n          y: 4854895.403863202,\n        },\n        {\n          x: 12962563.81989391,\n          y: 4854825.953182589,\n        },\n        {\n          x: 12962930.401073314,\n          y: 4854769.91200932,\n        },\n        {\n          x: 12963190.916752387,\n          y: 4854738.551506216,\n        },\n        {\n          x: 12964441.84613731,\n          y: 4854799.404628956,\n        },\n        {\n          x: 12964524.312877567,\n          y: 4854798.896359394,\n        },\n        {\n          x: 12965180.991672397,\n          y: 4854794.927301339,\n        },\n        {\n          x: 12965609.29152333,\n          y: 4854782.320431698,\n        },\n        {\n          x: 12965890.746902762,\n          y: 4854765.761862335,\n        },\n        {\n          x: 12966166.126872526,\n          y: 4854749.201512711,\n        },\n        {\n          x: 12966285.65860789,\n          y: 4854745.572490727,\n        },\n        {\n          x: 12966514.13404955,\n          y: 4854747.498023047,\n        },\n        {\n          x: 12967120.576418092,\n          y: 4854750.252015507,\n        },\n        {\n          x: 12968417.872233221,\n          y: 4854755.563269503,\n        },\n        {\n          x: 12968618.637517042,\n          y: 4854756.352373138,\n        },\n        {\n          x: 12969113.28223611,\n          y: 4854778.000756352,\n        },\n        {\n          x: 12969684.88717921,\n          y: 4854779.300801552,\n        },\n        {\n          x: 12970067.575502042,\n          y: 4854781.712135722,\n        },\n        {\n          x: 12970534.989097549,\n          y: 4854786.685865359,\n        },\n        {\n          x: 12970699.884643015,\n          y: 4854793.3733178545,\n        },\n        {\n          x: 12970823.931856325,\n          y: 4854795.719200881,\n        },\n        {\n          x: 12970982.830224,\n          y: 4854826.832892539,\n        },\n        {\n          x: 12971113.005257478,\n          y: 4854865.732206641,\n        },\n        {\n          x: 12971202.287273336,\n          y: 4854878.94766238,\n        },\n        {\n          x: 12971370.206297623,\n          y: 4854874.950868926,\n        },\n        {\n          x: 12972309.189289698,\n          y: 4854855.496835954,\n        },\n        {\n          x: 12973018.812017871,\n          y: 4854841.117131226,\n        },\n        {\n          x: 12973547.047963066,\n          y: 4854830.666734374,\n        },\n        {\n          x: 12974064.854700932,\n          y: 4854852.350465733,\n        },\n        {\n          x: 12974472.82455872,\n          y: 4854876.455052272,\n        },\n        {\n          x: 12975051.371356072,\n          y: 4854904.052996347,\n        },\n        {\n          x: 12975605.826026462,\n          y: 4854907.507188204,\n        },\n        {\n          x: 12975778.549655946,\n          y: 4854906.705688043,\n        },\n        {\n          x: 12976205.686714906,\n          y: 4854908.883752931,\n        },\n        {\n          x: 12977221.096053148,\n          y: 4854914.252570144,\n        },\n        {\n          x: 12977364.010499585,\n          y: 4854929.9394761175,\n        },\n        {\n          x: 12977849.475332348,\n          y: 4854987.676906845,\n        },\n        {\n          x: 12978108.4311247,\n          y: 4855013.81299573,\n        },\n        {\n          x: 12978521.22706543,\n          y: 4855058.406105899,\n        },\n        {\n          x: 12980109.377856214,\n          y: 4855165.781190299,\n        },\n        {\n          x: 12980283.977902222,\n          y: 4855177.638637634,\n        },\n        {\n          x: 12980489.227525037,\n          y: 4855187.924099469,\n        },\n        {\n          x: 12980583.71991004,\n          y: 4855179.543517038,\n        },\n        {\n          x: 12980688.925014246,\n          y: 4855138.6160322325,\n        },\n        {\n          x: 12980767.103468414,\n          y: 4855089.631526497,\n        },\n        {\n          x: 12980869.512862012,\n          y: 4855013.486901767,\n        },\n        {\n          x: 12981090.661572816,\n          y: 4854899.114190809,\n        },\n        {\n          x: 12981198.816266755,\n          y: 4854879.956045967,\n        },\n        {\n          x: 12981320.40982718,\n          y: 4854890.50993648,\n        },\n        {\n          x: 12982163.741886314,\n          y: 4855124.274679628,\n        },\n      ],\n    },\n    {\n      id: \"8\",\n      source: \"16\",\n      target: \"17\",\n      class: \"地铁九号线\",\n      name: \"地铁九号线 0\",\n      controlPoints: [\n        {\n          x: 12946648.06073432,\n          y: 4839260.025729084,\n        },\n        {\n          x: 12946544.074465087,\n          y: 4839619.202216059,\n        },\n        {\n          x: 12946445.496254807,\n          y: 4839771.777087536,\n        },\n        {\n          x: 12946363.495286731,\n          y: 4839808.518510458,\n        },\n        {\n          x: 12946292.702186562,\n          y: 4839843.812617867,\n        },\n        {\n          x: 12946221.884510016,\n          y: 4839925.221959326,\n        },\n        {\n          x: 12946200.062497655,\n          y: 4839988.63678963,\n        },\n        {\n          x: 12946126.464738874,\n          y: 4840577.558530562,\n        },\n        {\n          x: 12946154.121327115,\n          y: 4841454.65715364,\n        },\n        {\n          x: 12946159.216413628,\n          y: 4841615.166540137,\n        },\n        {\n          x: 12946163.133984758,\n          y: 4841750.3172009885,\n        },\n        {\n          x: 12946166.16397019,\n          y: 4841854.414496068,\n        },\n        {\n          x: 12946134.718988903,\n          y: 4842145.305047408,\n        },\n        {\n          x: 12946011.482648093,\n          y: 4842839.443615038,\n        },\n        {\n          x: 12945967.3702783,\n          y: 4843175.101744513,\n        },\n        {\n          x: 12945875.098454604,\n          y: 4843833.607067226,\n        },\n        {\n          x: 12945815.866086949,\n          y: 4844216.664802826,\n        },\n        {\n          x: 12945773.952396747,\n          y: 4844701.295741741,\n        },\n        {\n          x: 12945762.960414361,\n          y: 4844884.183169307,\n        },\n        {\n          x: 12945811.645641796,\n          y: 4846485.73907944,\n        },\n        {\n          x: 12945821.760873735,\n          y: 4846713.698002954,\n        },\n        {\n          x: 12945850.240499485,\n          y: 4847377.283903233,\n        },\n        {\n          x: 12945860.277378498,\n          y: 4847457.126713241,\n        },\n        {\n          x: 12945889.251105716,\n          y: 4847545.70699325,\n        },\n        {\n          x: 12946012.904132249,\n          y: 4847683.799611397,\n        },\n        {\n          x: 12946527.681154523,\n          y: 4848401.627416125,\n        },\n        {\n          x: 12946550.388778795,\n          y: 4848450.652934715,\n        },\n        {\n          x: 12946578.885636054,\n          y: 4848483.879589509,\n        },\n        {\n          x: 12946614.230164707,\n          y: 4848509.121830013,\n        },\n        {\n          x: 12946687.204717232,\n          y: 4848555.03996301,\n        },\n        {\n          x: 12946714.570161361,\n          y: 4848573.402833471,\n        },\n        {\n          x: 12946927.965178315,\n          y: 4848771.050237301,\n        },\n        {\n          x: 12947039.251749933,\n          y: 4848874.121019451,\n        },\n        {\n          x: 12947590.671676153,\n          y: 4849210.0301651545,\n        },\n        {\n          x: 12947894.176283287,\n          y: 4849394.908355361,\n        },\n        {\n          x: 12948001.161563184,\n          y: 4849454.528594686,\n        },\n        {\n          x: 12948726.115618171,\n          y: 4849833.574366419,\n        },\n        {\n          x: 12948780.697656307,\n          y: 4849859.709410215,\n        },\n        {\n          x: 12948804.10908822,\n          y: 4849909.061453937,\n        },\n        {\n          x: 12948808.591585146,\n          y: 4849968.572800762,\n        },\n        {\n          x: 12948813.15515829,\n          y: 4850598.421530288,\n        },\n        {\n          x: 12949122.850263117,\n          y: 4852505.623073113,\n        },\n        {\n          x: 12949328.200350346,\n          y: 4854831.558034923,\n        },\n        {\n          x: 12949353.269647257,\n          y: 4856109.000245334,\n        },\n        {\n          x: 12949291.632125383,\n          y: 4857143.131243851,\n        },\n      ],\n    },\n    {\n      id: \"9\",\n      source: \"18\",\n      target: \"19\",\n      class: \"地铁八号线\",\n      name: \"地铁八号线 0\",\n      controlPoints: [\n        {\n          x: 12957190.97175418,\n          y: 4856829.187045242,\n        },\n        {\n          x: 12957268.3578042,\n          y: 4856387.328711017,\n        },\n        {\n          x: 12957289.353013203,\n          y: 4856359.317449307,\n        },\n        {\n          x: 12957331.343025276,\n          y: 4856327.797491008,\n        },\n        {\n          x: 12957376.831138888,\n          y: 4856317.277947678,\n        },\n        {\n          x: 12957891.704380175,\n          y: 4856296.418069313,\n        },\n      ],\n    },\n    {\n      id: \"10\",\n      source: \"20\",\n      target: \"21\",\n      class: \"地铁昌平线\",\n      name: \"地铁昌平线 0\",\n      controlPoints: [\n        {\n          x: 12947094.115985483,\n          y: 4873731.336740117,\n        },\n        {\n          x: 12947072.54413634,\n          y: 4873784.735931892,\n        },\n        {\n          x: 12947042.017514793,\n          y: 4873859.579611177,\n        },\n        {\n          x: 12946995.4508778,\n          y: 4873970.753583026,\n        },\n        {\n          x: 12946943.109137688,\n          y: 4874095.283923113,\n        },\n        {\n          x: 12946899.787751423,\n          y: 4874206.107863865,\n        },\n        {\n          x: 12946881.01472949,\n          y: 4874253.759727108,\n        },\n        {\n          x: 12946789.68802783,\n          y: 4874467.089710582,\n        },\n        {\n          x: 12946751.78362451,\n          y: 4874555.5292996485,\n        },\n        {\n          x: 12946700.523958035,\n          y: 4874674.650758464,\n        },\n        {\n          x: 12946655.766671386,\n          y: 4874767.410641011,\n        },\n        {\n          x: 12946571.364045683,\n          y: 4874925.748577232,\n        },\n        {\n          x: 12946510.5646055,\n          y: 4875031.897509199,\n        },\n        {\n          x: 12946472.444944305,\n          y: 4875099.449536901,\n        },\n        {\n          x: 12946378.125857558,\n          y: 4875270.873813889,\n        },\n        {\n          x: 12946315.432537835,\n          y: 4875442.5781064425,\n        },\n        {\n          x: 12945987.019381497,\n          y: 4876429.405849195,\n        },\n        {\n          x: 12945494.324537683,\n          y: 4877247.425781118,\n        },\n        {\n          x: 12945212.872442825,\n          y: 4877783.708641315,\n        },\n        {\n          x: 12944881.49739096,\n          y: 4878774.737871047,\n        },\n        {\n          x: 12944906.896743502,\n          y: 4879158.180641696,\n        },\n        {\n          x: 12945532.959607262,\n          y: 4879647.417083359,\n        },\n        {\n          x: 12946150.468651066,\n          y: 4879791.647184245,\n        },\n        {\n          x: 12946905.53928399,\n          y: 4879921.626008038,\n        },\n        {\n          x: 12947757.621608311,\n          y: 4880143.70392179,\n        },\n        {\n          x: 12948030.412870025,\n          y: 4880398.632118471,\n        },\n        {\n          x: 12948052.616659699,\n          y: 4880692.773681223,\n        },\n        {\n          x: 12947846.20854383,\n          y: 4881514.465746558,\n        },\n        {\n          x: 12947597.065183768,\n          y: 4882366.221916524,\n        },\n        {\n          x: 12947351.139175126,\n          y: 4883370.132124624,\n        },\n        {\n          x: 12947176.67206149,\n          y: 4883933.272704212,\n        },\n        {\n          x: 12946774.041093351,\n          y: 4884211.771737467,\n        },\n        {\n          x: 12946459.054291379,\n          y: 4884228.537864571,\n        },\n        {\n          x: 12945934.213743346,\n          y: 4884401.946771053,\n        },\n        {\n          x: 12945765.765805947,\n          y: 4884775.110386402,\n        },\n        {\n          x: 12945765.322226081,\n          y: 4884788.004333703,\n        },\n        {\n          x: 12945769.507831955,\n          y: 4885435.210764532,\n        },\n        {\n          x: 12945706.715861775,\n          y: 4886123.159872877,\n        },\n        {\n          x: 12945619.689717943,\n          y: 4886769.72363822,\n        },\n        {\n          x: 12945442.673617564,\n          y: 4887206.479468694,\n        },\n        {\n          x: 12945265.150235325,\n          y: 4887443.841590078,\n        },\n        {\n          x: 12944956.967706354,\n          y: 4887910.572665611,\n        },\n        {\n          x: 12944764.2703165,\n          y: 4888414.954761419,\n        },\n        {\n          x: 12944490.393851373,\n          y: 4889211.049688148,\n        },\n        {\n          x: 12944158.000725761,\n          y: 4890227.3009047955,\n        },\n        {\n          x: 12943939.50054619,\n          y: 4890938.589379339,\n        },\n        {\n          x: 12943741.193033013,\n          y: 4891765.333179633,\n        },\n        {\n          x: 12943523.89343197,\n          y: 4892817.059629789,\n        },\n        {\n          x: 12943477.185800951,\n          y: 4893223.648609116,\n        },\n        {\n          x: 12943632.832055906,\n          y: 4893581.194364219,\n        },\n        {\n          x: 12944230.352351204,\n          y: 4893813.015893581,\n        },\n        {\n          x: 12944907.808217492,\n          y: 4894017.717405242,\n        },\n        {\n          x: 12945120.621122792,\n          y: 4894152.507246883,\n        },\n        {\n          x: 12945341.919177428,\n          y: 4894481.916219006,\n        },\n      ],\n    },\n    {\n      id: \"11\",\n      source: \"22\",\n      target: \"23\",\n      class: \"地铁八通线\",\n      name: \"地铁八通线 0\",\n      controlPoints: [\n        {\n          x: 12970985.252146643,\n          y: 4852637.932500459,\n        },\n        {\n          x: 12971008.063154463,\n          y: 4852637.603850775,\n        },\n        {\n          x: 12971057.7816163,\n          y: 4852638.1331448015,\n        },\n        {\n          x: 12971134.73710355,\n          y: 4852640.9154947065,\n        },\n        {\n          x: 12971179.237531189,\n          y: 4852645.416718783,\n        },\n        {\n          x: 12971201.570727265,\n          y: 4852648.649302951,\n        },\n        {\n          x: 12971249.17801756,\n          y: 4852658.196621391,\n        },\n        {\n          x: 12971255.746157914,\n          y: 4852659.512994105,\n        },\n        {\n          x: 12971346.991565293,\n          y: 4852680.378101265,\n        },\n        {\n          x: 12971465.503559206,\n          y: 4852715.45222975,\n        },\n        {\n          x: 12971556.44305453,\n          y: 4852739.194460047,\n        },\n        {\n          x: 12971603.653185746,\n          y: 4852750.417086441,\n        },\n        {\n          x: 12971652.445129333,\n          y: 4852760.353265841,\n        },\n        {\n          x: 12971690.783407204,\n          y: 4852768.115819445,\n        },\n        {\n          x: 12971748.39988629,\n          y: 4852774.830285477,\n        },\n        {\n          x: 12971832.350691043,\n          y: 4852785.209187933,\n        },\n        {\n          x: 12971909.010570884,\n          y: 4852791.801163421,\n        },\n        {\n          x: 12971924.359283764,\n          y: 4852792.523685262,\n        },\n        {\n          x: 12971999.921089781,\n          y: 4852796.079471216,\n        },\n        {\n          x: 12972107.290890923,\n          y: 4852793.567220141,\n        },\n        {\n          x: 12972304.93984065,\n          y: 4852791.354142118,\n        },\n        {\n          x: 12972304.939940628,\n          y: 4852791.354142104,\n        },\n        {\n          x: 12972558.358169641,\n          y: 4852786.198665246,\n        },\n        {\n          x: 12972686.068063304,\n          y: 4852781.700119552,\n        },\n        {\n          x: 12972843.240578711,\n          y: 4852778.233391634,\n        },\n        {\n          x: 12972922.890764125,\n          y: 4852776.13617569,\n        },\n        {\n          x: 12973043.782765854,\n          y: 4852773.582308092,\n        },\n        {\n          x: 12973160.438646115,\n          y: 4852771.291533754,\n        },\n        {\n          x: 12973301.369215274,\n          y: 4852766.977022844,\n        },\n        {\n          x: 12973376.555572206,\n          y: 4852766.575507644,\n        },\n        {\n          x: 12973483.79407899,\n          y: 4852764.105804903,\n        },\n        {\n          x: 12973602.57893526,\n          y: 4852764.972085765,\n        },\n        {\n          x: 12973986.241797326,\n          y: 4852757.068452248,\n        },\n        {\n          x: 12974216.115580516,\n          y: 4852753.700414064,\n        },\n        {\n          x: 12974536.719347281,\n          y: 4852751.372519053,\n        },\n        {\n          x: 12974901.466203645,\n          y: 4852758.063962363,\n        },\n        {\n          x: 12974983.483695555,\n          y: 4852759.700171818,\n        },\n        {\n          x: 12975075.477382166,\n          y: 4852761.366109267,\n        },\n        {\n          x: 12975146.21345055,\n          y: 4852762.740995125,\n        },\n        {\n          x: 12975252.652350875,\n          y: 4852765.001749013,\n        },\n        {\n          x: 12975418.029274665,\n          y: 4852769.231663441,\n        },\n        {\n          x: 12975512.274773095,\n          y: 4852771.693583396,\n        },\n        {\n          x: 12975667.430020995,\n          y: 4852774.665220624,\n        },\n        {\n          x: 12975945.482280165,\n          y: 4852780.652428524,\n        },\n        {\n          x: 12976048.941242512,\n          y: 4852783.088273825,\n        },\n        {\n          x: 12976157.13466884,\n          y: 4852786.1686903015,\n        },\n        {\n          x: 12976200.541262798,\n          y: 4852787.159456441,\n        },\n        {\n          x: 12976234.258291336,\n          y: 4852787.5677579185,\n        },\n        {\n          x: 12976365.991912834,\n          y: 4852790.688773559,\n        },\n        {\n          x: 12976483.576280847,\n          y: 4852793.632750944,\n        },\n        {\n          x: 12976521.657226892,\n          y: 4852795.637126801,\n        },\n        {\n          x: 12976580.431624653,\n          y: 4852800.4899075935,\n        },\n        {\n          x: 12976630.833259074,\n          y: 4852806.145179798,\n        },\n        {\n          x: 12976695.08046594,\n          y: 4852815.315654606,\n        },\n        {\n          x: 12976729.999958823,\n          y: 4852820.657543227,\n        },\n        {\n          x: 12976776.474955026,\n          y: 4852827.352541805,\n        },\n        {\n          x: 12976812.252139,\n          y: 4852833.2147945,\n        },\n        {\n          x: 12976815.968375333,\n          y: 4852833.822868197,\n        },\n        {\n          x: 12976885.429953378,\n          y: 4852844.764512234,\n        },\n        {\n          x: 12976975.596115217,\n          y: 4852858.43044723,\n        },\n        {\n          x: 12977055.606962522,\n          y: 4852871.247395306,\n        },\n        {\n          x: 12977150.103301922,\n          y: 4852886.690040669,\n        },\n        {\n          x: 12977164.484104557,\n          y: 4852889.144325767,\n        },\n        {\n          x: 12977349.452764807,\n          y: 4852911.35750741,\n        },\n        {\n          x: 12977396.826802246,\n          y: 4852914.6312842835,\n        },\n        {\n          x: 12977445.21322845,\n          y: 4852917.3740233835,\n        },\n        {\n          x: 12977499.905881032,\n          y: 4852919.653667679,\n        },\n        {\n          x: 12977561.24229945,\n          y: 4852918.623041482,\n        },\n        {\n          x: 12977618.078808535,\n          y: 4852916.964759332,\n        },\n        {\n          x: 12977670.621610347,\n          y: 4852911.879830347,\n        },\n        {\n          x: 12977751.148635335,\n          y: 4852902.670739922,\n        },\n        {\n          x: 12977786.88548381,\n          y: 4852897.948010646,\n        },\n        {\n          x: 12977824.596628416,\n          y: 4852892.215955226,\n        },\n        {\n          x: 12977838.222668163,\n          y: 4852889.785354156,\n        },\n        {\n          x: 12977897.63684129,\n          y: 4852879.987122803,\n        },\n        {\n          x: 12978112.587513769,\n          y: 4852847.147889897,\n        },\n        {\n          x: 12978212.010580407,\n          y: 4852831.849550509,\n        },\n        {\n          x: 12978289.722346092,\n          y: 4852819.825778696,\n        },\n        {\n          x: 12978376.198797919,\n          y: 4852806.369032904,\n        },\n        {\n          x: 12978443.1247446,\n          y: 4852796.941799674,\n        },\n        {\n          x: 12978511.962721677,\n          y: 4852789.040221515,\n        },\n        {\n          x: 12978556.675266935,\n          y: 4852784.800445814,\n        },\n        {\n          x: 12978603.675698506,\n          y: 4852781.445204418,\n        },\n        {\n          x: 12978657.285893984,\n          y: 4852778.451914039,\n        },\n        {\n          x: 12978800.565625936,\n          y: 4852773.68229988,\n        },\n        {\n          x: 12978914.98070244,\n          y: 4852769.67853182,\n        },\n        {\n          x: 12979058.626918213,\n          y: 4852765.050844271,\n        },\n        {\n          x: 12979117.93108979,\n          y: 4852764.395843838,\n        },\n        {\n          x: 12979200.907964638,\n          y: 4852760.896022486,\n        },\n        {\n          x: 12979376.070149522,\n          y: 4852755.492429703,\n        },\n        {\n          x: 12979821.264409432,\n          y: 4852740.865419091,\n        },\n        {\n          x: 12979869.005644636,\n          y: 4852738.659817284,\n        },\n        {\n          x: 12980006.684293807,\n          y: 4852733.642694393,\n        },\n        {\n          x: 12980010.412107708,\n          y: 4852733.505705852,\n        },\n        {\n          x: 12980102.14796544,\n          y: 4852731.09585125,\n        },\n        {\n          x: 12980102.150365561,\n          y: 4852731.095751376,\n        },\n        {\n          x: 12980241.426094191,\n          y: 4852724.458911123,\n        },\n        {\n          x: 12980383.972661799,\n          y: 4852720.275860491,\n        },\n        {\n          x: 12980452.567191115,\n          y: 4852718.295604612,\n        },\n        {\n          x: 12980501.279651301,\n          y: 4852717.168056968,\n        },\n        {\n          x: 12980511.817043953,\n          y: 4852716.940679275,\n        },\n        {\n          x: 12980527.720170368,\n          y: 4852714.900895137,\n        },\n        {\n          x: 12980546.205864942,\n          y: 4852712.0589568885,\n        },\n        {\n          x: 12980556.739903979,\n          y: 4852710.6345186,\n        },\n        {\n          x: 12980575.024717016,\n          y: 4852707.192393184,\n        },\n        {\n          x: 12980600.064811092,\n          y: 4852702.138990685,\n        },\n        {\n          x: 12980620.733107321,\n          y: 4852697.095017998,\n        },\n        {\n          x: 12980641.992123496,\n          y: 4852691.0518540675,\n        },\n        {\n          x: 12980667.422524082,\n          y: 4852682.803530873,\n        },\n        {\n          x: 12980697.81666234,\n          y: 4852671.350689514,\n        },\n        {\n          x: 12980750.44375973,\n          y: 4852646.269770028,\n        },\n        {\n          x: 12980789.758654011,\n          y: 4852625.613153645,\n        },\n        {\n          x: 12980817.158831125,\n          y: 4852610.176831961,\n        },\n        {\n          x: 12980871.562055342,\n          y: 4852579.505635189,\n        },\n        {\n          x: 12980917.628692484,\n          y: 4852553.447517574,\n        },\n        {\n          x: 12981043.583099704,\n          y: 4852484.690581212,\n        },\n        {\n          x: 12981099.336563937,\n          y: 4852456.01893319,\n        },\n        {\n          x: 12981140.890511304,\n          y: 4852432.9686271055,\n        },\n        {\n          x: 12981182.135998141,\n          y: 4852411.356320457,\n        },\n        {\n          x: 12981255.809566528,\n          y: 4852369.673110186,\n        },\n        {\n          x: 12981306.254684363,\n          y: 4852342.213287527,\n        },\n        {\n          x: 12981355.360464152,\n          y: 4852316.156478455,\n        },\n        {\n          x: 12981380.125408497,\n          y: 4852304.328818308,\n        },\n        {\n          x: 12981404.370375846,\n          y: 4852293.9445663355,\n        },\n        {\n          x: 12981411.357722916,\n          y: 4852291.019192892,\n        },\n        {\n          x: 12981429.138416857,\n          y: 4852284.705685185,\n        },\n        {\n          x: 12981449.445248626,\n          y: 4852278.144038033,\n        },\n        {\n          x: 12981466.988468504,\n          y: 4852273.038244298,\n        },\n        {\n          x: 12981483.934169278,\n          y: 4852269.01732057,\n        },\n        {\n          x: 12981501.72129354,\n          y: 4852264.633525485,\n        },\n        {\n          x: 12981521.195052542,\n          y: 4852260.970876668,\n        },\n        {\n          x: 12981540.429482171,\n          y: 4852257.912291013,\n        },\n        {\n          x: 12981556.300366443,\n          y: 4852255.823523872,\n        },\n        {\n          x: 12981570.366991611,\n          y: 4852253.983978159,\n        },\n        {\n          x: 12981590.808079034,\n          y: 4852252.37024785,\n        },\n        {\n          x: 12981606.562289793,\n          y: 4852251.488995252,\n        },\n        {\n          x: 12981636.507357743,\n          y: 4852250.579113849,\n        },\n        {\n          x: 12981656.356278451,\n          y: 4852250.896393729,\n        },\n        {\n          x: 12981692.086214192,\n          y: 4852252.868202504,\n        },\n        {\n          x: 12981714.223939104,\n          y: 4852254.872887953,\n        },\n        {\n          x: 12981755.862461897,\n          y: 4852261.416093576,\n        },\n        {\n          x: 12981787.756915031,\n          y: 4852268.344546958,\n        },\n        {\n          x: 12981824.48947952,\n          y: 4852277.740325138,\n        },\n        {\n          x: 12982006.994348593,\n          y: 4852327.843007399,\n        },\n        {\n          x: 12982014.941592565,\n          y: 4852330.480576966,\n        },\n        {\n          x: 12982026.402121745,\n          y: 4852333.381042817,\n        },\n        {\n          x: 12982040.946943458,\n          y: 4852337.063108767,\n        },\n        {\n          x: 12982067.796619976,\n          y: 4852344.124059822,\n        },\n        {\n          x: 12982082.244231999,\n          y: 4852347.351909036,\n        },\n        {\n          x: 12982111.255736986,\n          y: 4852353.085681991,\n        },\n        {\n          x: 12982129.791819442,\n          y: 4852355.941803544,\n        },\n        {\n          x: 12982150.73459613,\n          y: 4852358.6745200455,\n        },\n        {\n          x: 12982173.599064307,\n          y: 4852360.678826859,\n        },\n        {\n          x: 12982199.590729142,\n          y: 4852362.073329141,\n        },\n        {\n          x: 12982224.25684918,\n          y: 4852362.508778318,\n        },\n        {\n          x: 12982242.781496631,\n          y: 4852362.108043774,\n        },\n        {\n          x: 12982265.278136691,\n          y: 4852361.098500819,\n        },\n        {\n          x: 12982291.742691308,\n          y: 4852358.874468977,\n        },\n        {\n          x: 12982315.67474395,\n          y: 4852355.811827975,\n        },\n        {\n          x: 12982335.035976896,\n          y: 4852352.394862233,\n        },\n        {\n          x: 12982357.042847889,\n          y: 4852348.851728803,\n        },\n        {\n          x: 12982382.295058098,\n          y: 4852343.857827946,\n        },\n        {\n          x: 12982417.531268932,\n          y: 4852337.395309842,\n        },\n        {\n          x: 12982448.197524806,\n          y: 4852331.785528333,\n        },\n        {\n          x: 12982478.86330164,\n          y: 4852326.658255823,\n        },\n        {\n          x: 12982531.423479121,\n          y: 4852319.199320662,\n        },\n        {\n          x: 12982583.51522219,\n          y: 4852315.239714849,\n        },\n        {\n          x: 12982619.249260034,\n          y: 4852313.483230399,\n        },\n        {\n          x: 12982707.726446714,\n          y: 4852311.01354565,\n        },\n        {\n          x: 12982818.643484026,\n          y: 4852310.195081021,\n        },\n        {\n          x: 12982926.718911368,\n          y: 4852308.423580399,\n        },\n        {\n          x: 12982969.351654056,\n          y: 4852307.719497175,\n        },\n        {\n          x: 12983023.546593202,\n          y: 4852306.599390685,\n        },\n        {\n          x: 12983109.423810175,\n          y: 4852304.789328974,\n        },\n        {\n          x: 12983167.539974144,\n          y: 4852304.283514513,\n        },\n        {\n          x: 12983217.219463198,\n          y: 4852303.191877694,\n        },\n        {\n          x: 12983281.254377576,\n          y: 4852302.216069689,\n        },\n        {\n          x: 12983366.75675525,\n          y: 4852300.701005913,\n        },\n        {\n          x: 12983452.20281669,\n          y: 4852299.1755383825,\n        },\n        {\n          x: 12983534.11611313,\n          y: 4852296.359641885,\n        },\n        {\n          x: 12983559.667424409,\n          y: 4852295.629501179,\n        },\n        {\n          x: 12983601.161266102,\n          y: 4852294.627091015,\n        },\n        {\n          x: 12983611.984969016,\n          y: 4852293.890433964,\n        },\n        {\n          x: 12983622.368472738,\n          y: 4852292.692271228,\n        },\n        {\n          x: 12983631.964793393,\n          y: 4852291.967613732,\n        },\n        {\n          x: 12983642.347676827,\n          y: 4852290.532228432,\n        },\n        {\n          x: 12983664.288969724,\n          y: 4852286.790795176,\n        },\n        {\n          x: 12983681.665854465,\n          y: 4852283.294093203,\n        },\n        {\n          x: 12983691.650165133,\n          y: 4852280.518425564,\n        },\n        {\n          x: 12983704.937446222,\n          y: 4852276.871566698,\n        },\n        {\n          x: 12983719.485094307,\n          y: 4852271.960088485,\n        },\n        {\n          x: 12983734.576153021,\n          y: 4852266.573224977,\n        },\n        {\n          x: 12983749.349894535,\n          y: 4852260.636238543,\n        },\n        {\n          x: 12983764.356448224,\n          y: 4852253.439065454,\n        },\n        {\n          x: 12983783.229950167,\n          y: 4852243.675282068,\n        },\n        {\n          x: 12983809.54016834,\n          y: 4852227.647694631,\n        },\n        {\n          x: 12983819.177255707,\n          y: 4852221.021988448,\n        },\n        {\n          x: 12983830.24508297,\n          y: 4852212.4117375035,\n        },\n        {\n          x: 12983845.626987867,\n          y: 4852200.007109512,\n        },\n        {\n          x: 12983856.53356637,\n          y: 4852190.291205582,\n        },\n        {\n          x: 12983870.184671514,\n          y: 4852177.732756121,\n        },\n        {\n          x: 12983883.752366735,\n          y: 4852163.04569551,\n        },\n        {\n          x: 12983893.242055438,\n          y: 4852153.491082963,\n        },\n        {\n          x: 12983901.156669818,\n          y: 4852143.226680874,\n        },\n        {\n          x: 12983911.419729222,\n          y: 4852128.860448257,\n        },\n        {\n          x: 12983920.032326968,\n          y: 4852115.678436422,\n        },\n        {\n          x: 12983928.333826244,\n          y: 4852103.047421788,\n        },\n        {\n          x: 12983936.314326718,\n          y: 4852088.763105886,\n        },\n        {\n          x: 12983946.18360984,\n          y: 4852068.498493203,\n        },\n        {\n          x: 12984045.08972995,\n          y: 4851885.404455599,\n        },\n        {\n          x: 12984080.804905687,\n          y: 4851817.337034466,\n        },\n        {\n          x: 12984134.748354,\n          y: 4851706.836804487,\n        },\n        {\n          x: 12984195.8623765,\n          y: 4851591.525543062,\n        },\n        {\n          x: 12984254.587788567,\n          y: 4851478.621198026,\n        },\n        {\n          x: 12984307.768564539,\n          y: 4851379.326535712,\n        },\n        {\n          x: 12984344.27421628,\n          y: 4851308.864740265,\n        },\n        {\n          x: 12984375.225174434,\n          y: 4851249.609910724,\n        },\n        {\n          x: 12984415.701271733,\n          y: 4851172.74323114,\n        },\n        {\n          x: 12984461.729403371,\n          y: 4851084.666569579,\n        },\n        {\n          x: 12984517.277267791,\n          y: 4850976.575614915,\n        },\n        {\n          x: 12984628.35638987,\n          y: 4850756.39703862,\n        },\n        {\n          x: 12984643.441411281,\n          y: 4850729.173746353,\n        },\n        {\n          x: 12984659.718515014,\n          y: 4850700.1083314745,\n        },\n        {\n          x: 12984681.711487297,\n          y: 4850670.601281623,\n        },\n        {\n          x: 12984717.725659953,\n          y: 4850629.896011068,\n        },\n        {\n          x: 12984754.999484044,\n          y: 4850595.784380661,\n        },\n        {\n          x: 12984794.35474119,\n          y: 4850566.24036794,\n        },\n        {\n          x: 12984822.179769346,\n          y: 4850548.063337961,\n        },\n        {\n          x: 12984863.461169159,\n          y: 4850526.723240278,\n        },\n        {\n          x: 12984915.289983816,\n          y: 4850505.12020892,\n        },\n        {\n          x: 12984951.72965507,\n          y: 4850491.149559257,\n        },\n        {\n          x: 12985164.594748862,\n          y: 4850408.269419757,\n        },\n        {\n          x: 12985223.73663421,\n          y: 4850386.334720776,\n        },\n        {\n          x: 12985231.332473703,\n          y: 4850382.288306166,\n        },\n        {\n          x: 12985243.255608164,\n          y: 4850375.964354305,\n        },\n        {\n          x: 12985309.485768877,\n          y: 4850350.550316565,\n        },\n        {\n          x: 12985309.485868897,\n          y: 4850350.550316587,\n        },\n        {\n          x: 12986172.233193466,\n          y: 4850032.791403444,\n        },\n        {\n          x: 12986172.8663129,\n          y: 4850032.558329904,\n        },\n        {\n          x: 12986339.175501348,\n          y: 4849968.327595861,\n        },\n        {\n          x: 12986505.507225916,\n          y: 4849904.089056084,\n        },\n        {\n          x: 12986656.604391119,\n          y: 4849847.60963517,\n        },\n        {\n          x: 12986702.483696718,\n          y: 4849828.918664281,\n        },\n        {\n          x: 12986760.975453354,\n          y: 4849792.3676841725,\n        },\n        {\n          x: 12986797.326063676,\n          y: 4849765.012441939,\n        },\n        {\n          x: 12986830.880906345,\n          y: 4849735.181111031,\n        },\n        {\n          x: 12986886.127819829,\n          y: 4849677.217710046,\n        },\n        {\n          x: 12987120.13083682,\n          y: 4849429.888750661,\n        },\n        {\n          x: 12987545.455182405,\n          y: 4848990.56075093,\n        },\n        {\n          x: 12987572.780970717,\n          y: 4848962.972667584,\n        },\n        {\n          x: 12987750.347789623,\n          y: 4848775.995218805,\n        },\n        {\n          x: 12987812.698881118,\n          y: 4848712.132626582,\n        },\n        {\n          x: 12987888.840439832,\n          y: 4848629.514697122,\n        },\n        {\n          x: 12987922.383888729,\n          y: 4848595.374774107,\n        },\n        {\n          x: 12988054.963756831,\n          y: 4848456.434616343,\n        },\n        {\n          x: 12988203.560175221,\n          y: 4848293.895912913,\n        },\n        {\n          x: 12988250.566429619,\n          y: 4848245.193567729,\n        },\n        {\n          x: 12988306.722374829,\n          y: 4848191.552325912,\n        },\n        {\n          x: 12988429.814042207,\n          y: 4848060.358476343,\n        },\n        {\n          x: 12988509.892477134,\n          y: 4847972.732590752,\n        },\n        {\n          x: 12988516.052521963,\n          y: 4847966.473292817,\n        },\n        {\n          x: 12988531.25232795,\n          y: 4847951.020837734,\n        },\n        {\n          x: 12988547.774189414,\n          y: 4847934.22664656,\n        },\n        {\n          x: 12988684.205479793,\n          y: 4847792.520992836,\n        },\n        {\n          x: 12988709.83813206,\n          y: 4847765.978322433,\n        },\n        {\n          x: 12988751.064218508,\n          y: 4847721.917838166,\n        },\n        {\n          x: 12988806.893480845,\n          y: 4847664.753238427,\n        },\n        {\n          x: 12988838.47984446,\n          y: 4847638.4005759265,\n        },\n        {\n          x: 12988863.550537288,\n          y: 4847617.484576525,\n        },\n        {\n          x: 12988871.447747946,\n          y: 4847610.900250857,\n        },\n        {\n          x: 12988928.71596574,\n          y: 4847568.305396379,\n        },\n        {\n          x: 12989015.639990052,\n          y: 4847513.087871169,\n        },\n        {\n          x: 12989070.178705394,\n          y: 4847482.192075563,\n        },\n        {\n          x: 12989148.863691295,\n          y: 4847447.998694799,\n        },\n        {\n          x: 12989221.630766438,\n          y: 4847420.154502207,\n        },\n        {\n          x: 12989339.331564289,\n          y: 4847380.68202523,\n        },\n        {\n          x: 12989542.519483887,\n          y: 4847312.531220079,\n        },\n        {\n          x: 12989591.848173946,\n          y: 4847295.984625068,\n        },\n      ],\n    },\n    {\n      id: \"12\",\n      source: \"24\",\n      target: \"25\",\n      class: \"城铁十三号线\",\n      name: \"城铁十三号线 0\",\n      controlPoints: [\n        {\n          x: 12961384.821093876,\n          y: 4857604.895638846,\n        },\n        {\n          x: 12961379.888425605,\n          y: 4857950.407662031,\n        },\n        {\n          x: 12961378.603161972,\n          y: 4858178.984029268,\n        },\n        {\n          x: 12961378.251699504,\n          y: 4858199.941669665,\n        },\n        {\n          x: 12961362.948288757,\n          y: 4859113.050576728,\n        },\n        {\n          x: 12961351.774871988,\n          y: 4859246.305776181,\n        },\n        {\n          x: 12961344.673628464,\n          y: 4859330.995740561,\n        },\n        {\n          x: 12961338.185205506,\n          y: 4859379.136027955,\n        },\n        {\n          x: 12961326.701474292,\n          y: 4859430.3762181355,\n        },\n        {\n          x: 12961296.23872469,\n          y: 4859534.623118192,\n        },\n        {\n          x: 12961279.573160157,\n          y: 4859595.157872784,\n        },\n        {\n          x: 12961271.432916135,\n          y: 4859636.755033974,\n        },\n        {\n          x: 12961227.692613533,\n          y: 4859930.467545727,\n        },\n        {\n          x: 12961219.290961184,\n          y: 4859990.017196776,\n        },\n        {\n          x: 12961215.868152,\n          y: 4860031.195887179,\n        },\n        {\n          x: 12961213.956200192,\n          y: 4860042.603136049,\n        },\n        {\n          x: 12961206.891662417,\n          y: 4860091.520899557,\n        },\n        {\n          x: 12961188.165871859,\n          y: 4860211.789308975,\n        },\n        {\n          x: 12961182.052734978,\n          y: 4860252.9748706035,\n        },\n        {\n          x: 12961177.381970651,\n          y: 4860285.458304639,\n        },\n        {\n          x: 12961133.584798172,\n          y: 4861282.165295659,\n        },\n        {\n          x: 12961131.197062261,\n          y: 4861339.773361728,\n        },\n        {\n          x: 12961125.764970018,\n          y: 4861465.195775947,\n        },\n        {\n          x: 12961124.551248107,\n          y: 4861505.652557301,\n        },\n        {\n          x: 12961122.644612342,\n          y: 4861570.024727552,\n        },\n        {\n          x: 12961122.505511757,\n          y: 4861612.817632623,\n        },\n        {\n          x: 12961126.125387294,\n          y: 4861656.679218022,\n        },\n        {\n          x: 12961134.236030966,\n          y: 4861724.086379644,\n        },\n        {\n          x: 12961147.346890498,\n          y: 4861783.573658952,\n        },\n        {\n          x: 12961169.949061126,\n          y: 4861856.88455326,\n        },\n        {\n          x: 12961190.92239628,\n          y: 4861908.443200537,\n        },\n        {\n          x: 12961244.80679,\n          y: 4862017.212104109,\n        },\n        {\n          x: 12961785.271410704,\n          y: 4863090.557436891,\n        },\n        {\n          x: 12962406.945922375,\n          y: 4864318.974454228,\n        },\n        {\n          x: 12963018.284754738,\n          y: 4865521.493683898,\n        },\n        {\n          x: 12963018.284854762,\n          y: 4865521.493783919,\n        },\n        {\n          x: 12963224.051473433,\n          y: 4866039.3565800125,\n        },\n        {\n          x: 12963500.971012274,\n          y: 4867139.241053313,\n        },\n        {\n          x: 12963650.819367116,\n          y: 4867725.703316142,\n        },\n        {\n          x: 12963888.949552327,\n          y: 4868660.037686641,\n        },\n        {\n          x: 12964153.29996666,\n          y: 4869706.424707541,\n        },\n        {\n          x: 12964161.049777685,\n          y: 4869739.748010959,\n        },\n        {\n          x: 12964169.022003202,\n          y: 4869783.887620618,\n        },\n        {\n          x: 12964169.79918989,\n          y: 4869788.187596136,\n        },\n        {\n          x: 12964170.396725647,\n          y: 4869792.28592288,\n        },\n        {\n          x: 12964178.09229784,\n          y: 4869845.141780633,\n        },\n        {\n          x: 12964182.866363246,\n          y: 4869906.602764703,\n        },\n        {\n          x: 12964186.742670394,\n          y: 4869983.180502373,\n        },\n        {\n          x: 12964187.80107099,\n          y: 4870004.059485736,\n        },\n        {\n          x: 12964194.767189663,\n          y: 4870141.601109272,\n        },\n        {\n          x: 12964195.586355446,\n          y: 4870157.791065987,\n        },\n        {\n          x: 12964195.629143188,\n          y: 4870158.625753281,\n        },\n        {\n          x: 12964197.365642045,\n          y: 4870232.162939279,\n        },\n        {\n          x: 12964199.986983918,\n          y: 4870338.989878203,\n        },\n        {\n          x: 12964198.233979,\n          y: 4870399.4780171625,\n        },\n        {\n          x: 12964195.521848764,\n          y: 4870426.330630218,\n        },\n        {\n          x: 12964189.688597165,\n          y: 4870457.628060375,\n        },\n        {\n          x: 12964178.76505046,\n          y: 4870495.275356304,\n        },\n        {\n          x: 12964167.839258399,\n          y: 4870529.241804792,\n        },\n        {\n          x: 12964156.90262342,\n          y: 4870556.635705516,\n        },\n        {\n          x: 12964139.446759911,\n          y: 4870591.940950339,\n        },\n        {\n          x: 12964119.380342938,\n          y: 4870629.3612662265,\n        },\n        {\n          x: 12964087.063558495,\n          y: 4870686.289743977,\n        },\n        {\n          x: 12964065.951472988,\n          y: 4870723.716488513,\n        },\n        {\n          x: 12964052.918280806,\n          y: 4870746.119234959,\n        },\n        {\n          x: 12964041.187130783,\n          y: 4870764.046505531,\n        },\n        {\n          x: 12964018.239456784,\n          y: 4870796.744059516,\n        },\n        {\n          x: 12963997.373145364,\n          y: 4870821.018842714,\n        },\n        {\n          x: 12963975.979364637,\n          y: 4870842.403550631,\n        },\n        {\n          x: 12963943.620649595,\n          y: 4870869.876901368,\n        },\n        {\n          x: 12963912.565489624,\n          y: 4870894.189978186,\n        },\n        {\n          x: 12963888.553606404,\n          y: 4870910.587164291,\n        },\n        {\n          x: 12963855.921490764,\n          y: 4870928.856058391,\n        },\n        {\n          x: 12963818.847341483,\n          y: 4870946.088721298,\n        },\n        {\n          x: 12963778.372132206,\n          y: 4870961.231012497,\n        },\n        {\n          x: 12963730.060326898,\n          y: 4870976.4015065245,\n        },\n        {\n          x: 12963657.978381645,\n          y: 4870995.602780929,\n        },\n        {\n          x: 12963622.05854108,\n          y: 4871004.430416085,\n        },\n        {\n          x: 12963558.724530451,\n          y: 4871019.810885714,\n        },\n        {\n          x: 12963512.503679566,\n          y: 4871035.906957649,\n        },\n        {\n          x: 12963453.681321735,\n          y: 4871059.763481818,\n        },\n        {\n          x: 12963248.80497939,\n          y: 4871172.328870646,\n        },\n        {\n          x: 12963244.572822267,\n          y: 4871174.658396504,\n        },\n        {\n          x: 12963038.471529033,\n          y: 4871288.035313995,\n        },\n        {\n          x: 12962853.820973437,\n          y: 4871391.186996228,\n        },\n        {\n          x: 12962725.303994041,\n          y: 4871462.571934574,\n        },\n        {\n          x: 12962724.957375426,\n          y: 4871462.752610938,\n        },\n        {\n          x: 12962723.887909118,\n          y: 4871463.345629024,\n        },\n        {\n          x: 12962716.736546198,\n          y: 4871467.315161244,\n        },\n        {\n          x: 12962716.284189595,\n          y: 4871467.567097997,\n        },\n        {\n          x: 12962579.957906647,\n          y: 4871543.225352538,\n        },\n        {\n          x: 12962098.530270364,\n          y: 4871808.314025743,\n        },\n        {\n          x: 12961985.615570927,\n          y: 4871875.438409937,\n        },\n        {\n          x: 12961943.360948866,\n          y: 4871903.003423259,\n        },\n        {\n          x: 12961806.371053975,\n          y: 4871987.009769704,\n        },\n        {\n          x: 12961737.483883223,\n          y: 4872026.3265607115,\n        },\n        {\n          x: 12961633.115452316,\n          y: 4872086.751682198,\n        },\n        {\n          x: 12961545.844782017,\n          y: 4872134.320089415,\n        },\n        {\n          x: 12961361.563495556,\n          y: 4872236.98400638,\n        },\n        {\n          x: 12961327.331658702,\n          y: 4872255.833857056,\n        },\n        {\n          x: 12961251.875342408,\n          y: 4872297.087065438,\n        },\n        {\n          x: 12961204.826219695,\n          y: 4872325.325771341,\n        },\n        {\n          x: 12961132.023615833,\n          y: 4872361.658743605,\n        },\n        {\n          x: 12961052.11865231,\n          y: 4872405.144750871,\n        },\n        {\n          x: 12960972.646711243,\n          y: 4872441.930478759,\n        },\n        {\n          x: 12960858.106042854,\n          y: 4872506.91698905,\n        },\n        {\n          x: 12960760.426450621,\n          y: 4872559.359681711,\n        },\n        {\n          x: 12960724.908352494,\n          y: 4872580.416320622,\n        },\n        {\n          x: 12960641.560702814,\n          y: 4872626.948672511,\n        },\n        {\n          x: 12960409.848923735,\n          y: 4872755.68364987,\n        },\n        {\n          x: 12960214.328045709,\n          y: 4872860.212735837,\n        },\n        {\n          x: 12960127.928549424,\n          y: 4872909.2953869505,\n        },\n        {\n          x: 12960102.655544914,\n          y: 4872922.969133999,\n        },\n        {\n          x: 12960020.162988434,\n          y: 4872967.3561403835,\n        },\n        {\n          x: 12959950.134860648,\n          y: 4873006.403798974,\n        },\n        {\n          x: 12959863.03802686,\n          y: 4873054.88910155,\n        },\n        {\n          x: 12959777.644680386,\n          y: 4873104.258241601,\n        },\n        {\n          x: 12959699.508191582,\n          y: 4873147.282306783,\n        },\n        {\n          x: 12959620.328795532,\n          y: 4873191.4477808075,\n        },\n        {\n          x: 12959477.877193257,\n          y: 4873269.404125038,\n        },\n        {\n          x: 12959357.123719096,\n          y: 4873335.684058211,\n        },\n        {\n          x: 12959338.647690238,\n          y: 4873345.82380848,\n        },\n        {\n          x: 12958925.449787276,\n          y: 4873574.258471447,\n        },\n        {\n          x: 12958914.496696375,\n          y: 4873580.313011027,\n        },\n        {\n          x: 12958908.925432095,\n          y: 4873583.384761498,\n        },\n        {\n          x: 12958469.664608255,\n          y: 4873826.333185746,\n        },\n        {\n          x: 12958317.119431961,\n          y: 4873910.348894859,\n        },\n        {\n          x: 12958173.63725258,\n          y: 4873989.354939118,\n        },\n        {\n          x: 12958109.864433711,\n          y: 4874026.411209632,\n        },\n        {\n          x: 12958056.459419694,\n          y: 4874055.42987156,\n        },\n        {\n          x: 12958035.572431948,\n          y: 4874066.780988242,\n        },\n        {\n          x: 12957541.464879088,\n          y: 4874339.316503633,\n        },\n        {\n          x: 12957541.314450411,\n          y: 4874339.40007746,\n        },\n        {\n          x: 12957515.50602984,\n          y: 4874353.589680841,\n        },\n        {\n          x: 12957515.424667433,\n          y: 4874353.63521974,\n        },\n        {\n          x: 12957178.774763126,\n          y: 4874538.369890689,\n        },\n        {\n          x: 12957143.891148778,\n          y: 4874557.897348821,\n        },\n        {\n          x: 12956953.433700653,\n          y: 4874662.620502712,\n        },\n        {\n          x: 12956865.14112665,\n          y: 4874711.491226545,\n        },\n        {\n          x: 12956730.395010892,\n          y: 4874784.283691582,\n        },\n        {\n          x: 12956584.60989753,\n          y: 4874864.17479837,\n        },\n        {\n          x: 12956514.690003015,\n          y: 4874902.207189248,\n        },\n        {\n          x: 12956415.921079142,\n          y: 4874957.945257982,\n        },\n        {\n          x: 12956350.318605551,\n          y: 4874993.942196934,\n        },\n        {\n          x: 12955970.523661379,\n          y: 4875204.572856644,\n        },\n        {\n          x: 12955961.168925371,\n          y: 4875209.826648806,\n        },\n        {\n          x: 12955608.616340334,\n          y: 4875403.58048848,\n        },\n        {\n          x: 12955424.989326235,\n          y: 4875505.19312055,\n        },\n        {\n          x: 12955208.191654494,\n          y: 4875621.246472876,\n        },\n        {\n          x: 12955106.685266893,\n          y: 4875676.949542184,\n        },\n        {\n          x: 12954909.088653814,\n          y: 4875785.6214146055,\n        },\n        {\n          x: 12954898.699293226,\n          y: 4875791.33469513,\n        },\n        {\n          x: 12954809.86015897,\n          y: 4875840.183103034,\n        },\n        {\n          x: 12954515.78755851,\n          y: 4876003.857567704,\n        },\n        {\n          x: 12954425.351083811,\n          y: 4876047.515434021,\n        },\n        {\n          x: 12954361.536701877,\n          y: 4876075.173523097,\n        },\n        {\n          x: 12954318.522177251,\n          y: 4876092.11950955,\n        },\n        {\n          x: 12954285.295954525,\n          y: 4876103.586379883,\n        },\n        {\n          x: 12954230.248733655,\n          y: 4876121.545707381,\n        },\n        {\n          x: 12954175.140615348,\n          y: 4876137.686398102,\n        },\n        {\n          x: 12954117.372576779,\n          y: 4876152.031328337,\n        },\n        {\n          x: 12954117.372476779,\n          y: 4876152.031328334,\n        },\n        {\n          x: 12954063.303781305,\n          y: 4876163.662863832,\n        },\n        {\n          x: 12954007.331071056,\n          y: 4876172.399246002,\n        },\n        {\n          x: 12953967.211788474,\n          y: 4876178.65975709,\n        },\n        {\n          x: 12953802.621925015,\n          y: 4876196.237827291,\n        },\n        {\n          x: 12953668.73601341,\n          y: 4876199.186105529,\n        },\n        {\n          x: 12953503.298073018,\n          y: 4876194.053015986,\n        },\n        {\n          x: 12953435.898150826,\n          y: 4876195.031116625,\n        },\n        {\n          x: 12952907.1719517,\n          y: 4876202.110021278,\n        },\n        {\n          x: 12952854.57708836,\n          y: 4876202.818902422,\n        },\n        {\n          x: 12952810.046254802,\n          y: 4876203.418551955,\n        },\n        {\n          x: 12952736.613090457,\n          y: 4876203.294253911,\n        },\n        {\n          x: 12952624.4348891,\n          y: 4876204.555723625,\n        },\n        {\n          x: 12952552.43031391,\n          y: 4876204.964896776,\n        },\n        {\n          x: 12952497.943888191,\n          y: 4876207.608055034,\n        },\n        {\n          x: 12952468.042451413,\n          y: 4876210.829014632,\n        },\n        {\n          x: 12952437.79969268,\n          y: 4876214.509841102,\n        },\n        {\n          x: 12952375.588643614,\n          y: 4876223.886731359,\n        },\n        {\n          x: 12952301.856311196,\n          y: 4876236.1209624605,\n        },\n        {\n          x: 12952251.31522576,\n          y: 4876242.8451233655,\n        },\n        {\n          x: 12952214.021838313,\n          y: 4876246.965370512,\n        },\n        {\n          x: 12952162.807325037,\n          y: 4876250.527753233,\n        },\n        {\n          x: 12952103.452750135,\n          y: 4876251.697783142,\n        },\n        {\n          x: 12952023.611417918,\n          y: 4876253.082581543,\n        },\n        {\n          x: 12951892.55511939,\n          y: 4876253.812631988,\n        },\n        {\n          x: 12951846.328905031,\n          y: 4876253.171084735,\n        },\n        {\n          x: 12951802.992080217,\n          y: 4876249.116505366,\n        },\n        {\n          x: 12951766.843265098,\n          y: 4876244.26441203,\n        },\n        {\n          x: 12951714.743373726,\n          y: 4876233.633230178,\n        },\n        {\n          x: 12951654.073062496,\n          y: 4876222.691277131,\n        },\n        {\n          x: 12951616.46554052,\n          y: 4876216.252301995,\n        },\n        {\n          x: 12951584.63468386,\n          y: 4876213.574076274,\n        },\n        {\n          x: 12951561.015438031,\n          y: 4876212.359467597,\n        },\n        {\n          x: 12951502.289814433,\n          y: 4876212.143345088,\n        },\n        {\n          x: 12951293.085304,\n          y: 4876214.875420837,\n        },\n        {\n          x: 12951031.075470097,\n          y: 4876215.897535212,\n        },\n        {\n          x: 12950959.097605025,\n          y: 4876216.275884133,\n        },\n        {\n          x: 12950894.730929183,\n          y: 4876215.974946514,\n        },\n        {\n          x: 12950773.64057589,\n          y: 4876216.703301484,\n        },\n        {\n          x: 12950673.746751422,\n          y: 4876225.670588799,\n        },\n        {\n          x: 12950616.565179903,\n          y: 4876229.034309006,\n        },\n        {\n          x: 12950568.486162541,\n          y: 4876230.042798452,\n        },\n        {\n          x: 12950375.145719487,\n          y: 4876231.976121928,\n        },\n        {\n          x: 12950194.78158641,\n          y: 4876234.464466195,\n        },\n        {\n          x: 12950048.658437809,\n          y: 4876236.2574803205,\n        },\n        {\n          x: 12950001.4772779,\n          y: 4876235.293804152,\n        },\n        {\n          x: 12949948.747199,\n          y: 4876229.307334167,\n        },\n        {\n          x: 12949849.140274497,\n          y: 4876224.443260822,\n        },\n        {\n          x: 12948886.90103617,\n          y: 4876237.644317312,\n        },\n        {\n          x: 12948886.90093617,\n          y: 4876237.644317315,\n        },\n        {\n          x: 12948715.380098497,\n          y: 4876239.997015189,\n        },\n        {\n          x: 12948425.68643085,\n          y: 4876243.705096172,\n        },\n        {\n          x: 12948424.112088347,\n          y: 4876243.72353365,\n        },\n        {\n          x: 12948407.06491928,\n          y: 4876243.944145824,\n        },\n        {\n          x: 12948405.98243078,\n          y: 4876243.95624331,\n        },\n        {\n          x: 12948361.171213618,\n          y: 4876244.531933125,\n        },\n        {\n          x: 12948356.092076505,\n          y: 4876244.596227219,\n        },\n        {\n          x: 12948294.145588111,\n          y: 4876245.390073654,\n        },\n        {\n          x: 12948293.421376245,\n          y: 4876245.398151391,\n        },\n        {\n          x: 12948245.081662236,\n          y: 4876246.017528498,\n        },\n        {\n          x: 12948244.258669348,\n          y: 4876246.030423269,\n        },\n        {\n          x: 12948227.313400865,\n          y: 4876246.246399225,\n        },\n        {\n          x: 12948226.443416782,\n          y: 4876246.256701933,\n        },\n        {\n          x: 12948223.250043418,\n          y: 4876246.298279974,\n        },\n        {\n          x: 12947945.409350824,\n          y: 4876250.961636466,\n        },\n        {\n          x: 12947934.332267188,\n          y: 4876250.890472651,\n        },\n        {\n          x: 12947877.07401595,\n          y: 4876250.914315445,\n        },\n        {\n          x: 12947815.021065967,\n          y: 4876253.851354821,\n        },\n        {\n          x: 12947763.487477783,\n          y: 4876261.1465055365,\n        },\n        {\n          x: 12947725.059790507,\n          y: 4876269.052617193,\n        },\n        {\n          x: 12947653.430817837,\n          y: 4876293.225426714,\n        },\n        {\n          x: 12947609.2695425,\n          y: 4876314.985599062,\n        },\n        {\n          x: 12947579.101654992,\n          y: 4876329.096570221,\n        },\n        {\n          x: 12947532.916624067,\n          y: 4876357.08904473,\n        },\n        {\n          x: 12947462.2262063,\n          y: 4876393.072714213,\n        },\n        {\n          x: 12947421.555621969,\n          y: 4876408.477083252,\n        },\n        {\n          x: 12947369.78948997,\n          y: 4876424.051528886,\n        },\n        {\n          x: 12947316.08051995,\n          y: 4876430.96623273,\n        },\n        {\n          x: 12947288.108453162,\n          y: 4876433.523245403,\n        },\n        {\n          x: 12947233.34126908,\n          y: 4876432.790803788,\n        },\n        {\n          x: 12947188.401168212,\n          y: 4876429.088000529,\n        },\n        {\n          x: 12947141.165666422,\n          y: 4876420.772086076,\n        },\n        {\n          x: 12947111.803456603,\n          y: 4876412.760024161,\n        },\n        {\n          x: 12947064.825877437,\n          y: 4876399.584901326,\n        },\n        {\n          x: 12947029.14763327,\n          y: 4876383.288698463,\n        },\n        {\n          x: 12947000.45767468,\n          y: 4876366.611471653,\n        },\n        {\n          x: 12946972.12493202,\n          y: 4876348.110056718,\n        },\n        {\n          x: 12946952.979055353,\n          y: 4876335.007395409,\n        },\n        {\n          x: 12946936.827550543,\n          y: 4876323.077202845,\n        },\n        {\n          x: 12946921.333707113,\n          y: 4876310.548771458,\n        },\n        {\n          x: 12946816.8297496,\n          y: 4876219.287650481,\n        },\n        {\n          x: 12946732.699527778,\n          y: 4876127.270037018,\n        },\n        {\n          x: 12946657.488720905,\n          y: 4876045.210086455,\n        },\n        {\n          x: 12946622.587940522,\n          y: 4875983.965371542,\n        },\n        {\n          x: 12946496.471341081,\n          y: 4875762.643722024,\n        },\n        {\n          x: 12946423.522392513,\n          y: 4875557.850478406,\n        },\n        {\n          x: 12946399.995473424,\n          y: 4875459.537530149,\n        },\n        {\n          x: 12946396.978958678,\n          y: 4875437.0025600875,\n        },\n        {\n          x: 12946396.993859813,\n          y: 4875409.162322274,\n        },\n        {\n          x: 12946399.79561764,\n          y: 4875362.09033934,\n        },\n        {\n          x: 12946402.86393251,\n          y: 4875338.563648224,\n        },\n        {\n          x: 12946405.625597931,\n          y: 4875320.088412483,\n        },\n        {\n          x: 12946410.942566253,\n          y: 4875295.299492259,\n        },\n        {\n          x: 12946416.254743187,\n          y: 4875274.811186232,\n        },\n        {\n          x: 12946428.647654204,\n          y: 4875238.394850413,\n        },\n        {\n          x: 12946449.128231185,\n          y: 4875187.827926565,\n        },\n        {\n          x: 12946468.842936842,\n          y: 4875151.68413807,\n        },\n        {\n          x: 12946489.817988945,\n          y: 4875118.8342050975,\n        },\n        {\n          x: 12946522.546502326,\n          y: 4875072.470895908,\n        },\n        {\n          x: 12946570.68181112,\n          y: 4875007.932055009,\n        },\n        {\n          x: 12946590.31852286,\n          y: 4874978.982263895,\n        },\n        {\n          x: 12946617.815584973,\n          y: 4874935.88435813,\n        },\n        {\n          x: 12946646.325475948,\n          y: 4874873.520782715,\n        },\n        {\n          x: 12946820.499390153,\n          y: 4874459.418667514,\n        },\n        {\n          x: 12946888.30456704,\n          y: 4874294.857213484,\n        },\n        {\n          x: 12946930.646429846,\n          y: 4874192.6851136675,\n        },\n        {\n          x: 12946949.005201655,\n          y: 4874148.378390104,\n        },\n        {\n          x: 12947044.284756513,\n          y: 4873918.4637040915,\n        },\n        {\n          x: 12947056.289818808,\n          y: 4873889.083139696,\n        },\n        {\n          x: 12947165.66572366,\n          y: 4873622.718414709,\n        },\n        {\n          x: 12947202.737800827,\n          y: 4873531.999517411,\n        },\n        {\n          x: 12947209.63262473,\n          y: 4873515.652391753,\n        },\n        {\n          x: 12947273.282788856,\n          y: 4873364.7546024555,\n        },\n        {\n          x: 12947273.708122,\n          y: 4873363.743532597,\n        },\n        {\n          x: 12947287.460317507,\n          y: 4873331.140831067,\n        },\n        {\n          x: 12947304.830566434,\n          y: 4873289.959057868,\n        },\n        {\n          x: 12947411.8537799,\n          y: 4873054.533746381,\n        },\n        {\n          x: 12947541.50808741,\n          y: 4872842.7485984,\n        },\n        {\n          x: 12947580.982706897,\n          y: 4872777.370338213,\n        },\n        {\n          x: 12947615.711724276,\n          y: 4872723.318503141,\n        },\n        {\n          x: 12947649.183798542,\n          y: 4872667.856626571,\n        },\n        {\n          x: 12947675.12323022,\n          y: 4872624.93555951,\n        },\n        {\n          x: 12947696.263067583,\n          y: 4872593.158431816,\n        },\n        {\n          x: 12947734.29565014,\n          y: 4872530.60731087,\n        },\n        {\n          x: 12947764.795609327,\n          y: 4872480.528620551,\n        },\n        {\n          x: 12947824.300805386,\n          y: 4872380.158015446,\n        },\n        {\n          x: 12947865.335921923,\n          y: 4872300.691582129,\n        },\n        {\n          x: 12947868.4019642,\n          y: 4872293.260799115,\n        },\n        {\n          x: 12947877.607004203,\n          y: 4872273.69886109,\n        },\n        {\n          x: 12947897.445241943,\n          y: 4872226.595834379,\n        },\n        {\n          x: 12947927.647142874,\n          y: 4872153.107787066,\n        },\n        {\n          x: 12947994.798658265,\n          y: 4871994.343646774,\n        },\n        {\n          x: 12948026.296440713,\n          y: 4871921.612665893,\n        },\n        {\n          x: 12948040.948586507,\n          y: 4871894.217878682,\n        },\n        {\n          x: 12948057.308193548,\n          y: 4871865.8032324435,\n        },\n        {\n          x: 12948067.326472418,\n          y: 4871850.338413439,\n        },\n        {\n          x: 12948081.773480348,\n          y: 4871830.043075507,\n        },\n        {\n          x: 12948106.005618699,\n          y: 4871796.572364472,\n        },\n        {\n          x: 12948147.255517324,\n          y: 4871752.044003956,\n        },\n        {\n          x: 12948212.569000661,\n          y: 4871679.780786607,\n        },\n        {\n          x: 12948214.328663053,\n          y: 4871677.809478982,\n        },\n        {\n          x: 12948273.504086189,\n          y: 4871611.484093596,\n        },\n        {\n          x: 12948317.798932584,\n          y: 4871561.862160343,\n        },\n        {\n          x: 12948344.377879875,\n          y: 4871527.5162396645,\n        },\n        {\n          x: 12948380.890677512,\n          y: 4871477.605026336,\n        },\n        {\n          x: 12948413.38959998,\n          y: 4871425.5829799725,\n        },\n        {\n          x: 12948414.44249342,\n          y: 4871423.82499065,\n        },\n        {\n          x: 12948447.049964357,\n          y: 4871369.071132418,\n        },\n        {\n          x: 12948447.986775042,\n          y: 4871367.444350426,\n        },\n        {\n          x: 12948505.566148069,\n          y: 4871267.333064074,\n        },\n        {\n          x: 12948544.503004055,\n          y: 4871190.001687928,\n        },\n        {\n          x: 12948579.413090972,\n          y: 4871111.04819233,\n        },\n        {\n          x: 12948621.84723699,\n          y: 4871002.001678927,\n        },\n        {\n          x: 12948649.245005308,\n          y: 4870919.800386681,\n        },\n        {\n          x: 12948729.034075115,\n          y: 4870659.041565615,\n        },\n        {\n          x: 12948806.660201645,\n          y: 4870408.542141671,\n        },\n        {\n          x: 12948816.10369674,\n          y: 4870377.056894108,\n        },\n        {\n          x: 12948817.112454178,\n          y: 4870373.69505771,\n        },\n        {\n          x: 12948822.827115472,\n          y: 4870354.633454126,\n        },\n        {\n          x: 12948823.264697373,\n          y: 4870353.177438731,\n        },\n        {\n          x: 12948871.583647873,\n          y: 4870192.062297062,\n        },\n        {\n          x: 12948888.256377492,\n          y: 4870137.412837239,\n        },\n        {\n          x: 12948888.256477488,\n          y: 4870137.412437243,\n        },\n        {\n          x: 12948981.13241698,\n          y: 4869833.0181290535,\n        },\n        {\n          x: 12949020.38513926,\n          y: 4869703.696545276,\n        },\n        {\n          x: 12949062.757994082,\n          y: 4869570.843921744,\n        },\n        {\n          x: 12949090.169382466,\n          y: 4869479.2850293545,\n        },\n        {\n          x: 12949123.989708498,\n          y: 4869371.588525548,\n        },\n        {\n          x: 12949143.001308247,\n          y: 4869300.813594804,\n        },\n        {\n          x: 12949146.761492698,\n          y: 4869288.429210793,\n        },\n        {\n          x: 12949163.7803404,\n          y: 4869233.145301005,\n        },\n        {\n          x: 12949175.026622072,\n          y: 4869195.787679086,\n        },\n        {\n          x: 12949196.938022848,\n          y: 4869123.013569744,\n        },\n        {\n          x: 12949208.873643316,\n          y: 4869083.2070951825,\n        },\n        {\n          x: 12949223.461787153,\n          y: 4869036.1056654295,\n        },\n        {\n          x: 12949242.728116639,\n          y: 4868973.956351733,\n        },\n        {\n          x: 12949271.681629652,\n          y: 4868877.983261017,\n        },\n        {\n          x: 12949297.10128093,\n          y: 4868796.606128646,\n        },\n        {\n          x: 12949301.07802554,\n          y: 4868786.43636378,\n        },\n        {\n          x: 12949316.770515563,\n          y: 4868745.313714858,\n        },\n        {\n          x: 12949322.956596527,\n          y: 4868730.50358208,\n        },\n        {\n          x: 12949339.748933367,\n          y: 4868696.689288448,\n        },\n        {\n          x: 12949362.183788385,\n          y: 4868657.470406632,\n        },\n        {\n          x: 12949389.99988878,\n          y: 4868612.036959275,\n        },\n        {\n          x: 12949405.211090067,\n          y: 4868588.465232985,\n        },\n        {\n          x: 12949424.342096223,\n          y: 4868564.828507317,\n        },\n        {\n          x: 12949513.190764954,\n          y: 4868460.242782986,\n        },\n        {\n          x: 12949542.465744024,\n          y: 4868426.322580645,\n        },\n        {\n          x: 12949544.338502375,\n          y: 4868424.150033486,\n        },\n        {\n          x: 12949600.872280473,\n          y: 4868356.658526145,\n        },\n        {\n          x: 12949646.996273136,\n          y: 4868303.803243655,\n        },\n        {\n          x: 12949696.144125719,\n          y: 4868246.537783951,\n        },\n        {\n          x: 12949755.723785738,\n          y: 4868181.855453389,\n        },\n        {\n          x: 12949832.37526342,\n          y: 4868093.127098315,\n        },\n        {\n          x: 12949851.813717443,\n          y: 4868068.399532126,\n        },\n        {\n          x: 12949894.667583121,\n          y: 4868017.630119035,\n        },\n        {\n          x: 12949932.221547332,\n          y: 4867975.033422636,\n        },\n        {\n          x: 12949984.350867936,\n          y: 4867915.6628556745,\n        },\n        {\n          x: 12950051.280432409,\n          y: 4867836.640979047,\n        },\n        {\n          x: 12950119.532814305,\n          y: 4867759.173557603,\n        },\n        {\n          x: 12950170.049738903,\n          y: 4867700.545102677,\n        },\n        {\n          x: 12950196.18372548,\n          y: 4867669.647630281,\n        },\n        {\n          x: 12950245.012623828,\n          y: 4867612.641024118,\n        },\n        {\n          x: 12950366.341310102,\n          y: 4867472.554440256,\n        },\n        {\n          x: 12950396.016682621,\n          y: 4867437.159853344,\n        },\n        {\n          x: 12950433.41414459,\n          y: 4867388.174952161,\n        },\n        {\n          x: 12950467.047766922,\n          y: 4867337.197051575,\n        },\n        {\n          x: 12950472.727024797,\n          y: 4867327.624837841,\n        },\n        {\n          x: 12950504.43931956,\n          y: 4867270.541731104,\n        },\n        {\n          x: 12950506.66515916,\n          y: 4867265.686943075,\n        },\n        {\n          x: 12950513.328076823,\n          y: 4867251.147877864,\n        },\n        {\n          x: 12950522.125427773,\n          y: 4867231.948518946,\n        },\n        {\n          x: 12950543.25084689,\n          y: 4867180.747377998,\n        },\n        {\n          x: 12950554.610753339,\n          y: 4867148.755648968,\n        },\n        {\n          x: 12950565.938845547,\n          y: 4867113.7289358685,\n        },\n        {\n          x: 12950577.077540115,\n          y: 4867070.725547691,\n        },\n        {\n          x: 12950584.992247868,\n          y: 4867034.253515085,\n        },\n        {\n          x: 12950597.570781464,\n          y: 4866945.446932178,\n        },\n        {\n          x: 12950602.621253733,\n          y: 4866858.218872007,\n        },\n        {\n          x: 12950604.351725787,\n          y: 4866798.591035709,\n        },\n        {\n          x: 12950604.673463916,\n          y: 4866769.830411211,\n        },\n        {\n          x: 12950608.500044588,\n          y: 4866652.0108254915,\n        },\n        {\n          x: 12950610.319620667,\n          y: 4866589.554543856,\n        },\n        {\n          x: 12950610.359324489,\n          y: 4866588.2321465295,\n        },\n        {\n          x: 12950610.80126891,\n          y: 4866566.6265690895,\n        },\n        {\n          x: 12950612.409021743,\n          y: 4866522.173389596,\n        },\n        {\n          x: 12950616.621330654,\n          y: 4866372.98018754,\n        },\n        {\n          x: 12950618.97605836,\n          y: 4866293.007567341,\n        },\n        {\n          x: 12950619.842244353,\n          y: 4866255.184129226,\n        },\n        {\n          x: 12950625.910927346,\n          y: 4866063.848140013,\n        },\n        {\n          x: 12950628.387367597,\n          y: 4865977.081155829,\n        },\n        {\n          x: 12950629.753005603,\n          y: 4865908.9763710955,\n        },\n        {\n          x: 12950632.086528255,\n          y: 4865841.0262908945,\n        },\n        {\n          x: 12950632.35165354,\n          y: 4865833.33471617,\n        },\n        {\n          x: 12950633.79978892,\n          y: 4865801.28505746,\n        },\n        {\n          x: 12950635.690965662,\n          y: 4865759.427843475,\n        },\n        {\n          x: 12950637.922484085,\n          y: 4865674.26866093,\n        },\n        {\n          x: 12950641.139187874,\n          y: 4865591.213986744,\n        },\n        {\n          x: 12950643.134781921,\n          y: 4865519.6466930285,\n        },\n        {\n          x: 12950643.368005117,\n          y: 4865509.419217591,\n        },\n        {\n          x: 12950643.529421674,\n          y: 4865500.599934787,\n        },\n        {\n          x: 12950643.977363357,\n          y: 4865491.176881495,\n        },\n        {\n          x: 12950644.362001631,\n          y: 4865474.307022515,\n        },\n        {\n          x: 12950644.872350669,\n          y: 4865458.107876617,\n        },\n        {\n          x: 12950645.130576981,\n          y: 4865444.560304754,\n        },\n        {\n          x: 12950645.57682058,\n          y: 4865427.882852814,\n        },\n        {\n          x: 12950645.993461674,\n          y: 4865410.917198133,\n        },\n        {\n          x: 12950646.667225737,\n          y: 4865391.909170426,\n        },\n        {\n          x: 12950647.177975576,\n          y: 4865372.994126345,\n        },\n        {\n          x: 12950647.75493018,\n          y: 4865357.594288625,\n        },\n        {\n          x: 12950648.042257652,\n          y: 4865348.937219927,\n        },\n        {\n          x: 12950648.42689613,\n          y: 4865331.427963337,\n        },\n        {\n          x: 12950649.226270262,\n          y: 4865315.3585491525,\n        },\n        {\n          x: 12950650.507293697,\n          y: 4865273.423391737,\n        },\n        {\n          x: 12950650.697711246,\n          y: 4865269.97251224,\n        },\n        {\n          x: 12950651.401779896,\n          y: 4865244.094692232,\n        },\n        {\n          x: 12950652.233156506,\n          y: 4865229.016682226,\n        },\n        {\n          x: 12950652.74640693,\n          y: 4865208.822741665,\n        },\n        {\n          x: 12950653.64269155,\n          y: 4865185.438841808,\n        },\n        {\n          x: 12950654.09033895,\n          y: 4865156.015598994,\n        },\n        {\n          x: 12950655.11473383,\n          y: 4865135.615712103,\n        },\n        {\n          x: 12950655.81880249,\n          y: 4865109.7205952415,\n        },\n        {\n          x: 12950656.266944723,\n          y: 4865098.219646195,\n        },\n        {\n          x: 12950656.776491228,\n          y: 4865090.42570183,\n        },\n        {\n          x: 12950657.610074416,\n          y: 4865053.173004747,\n        },\n        {\n          x: 12950657.80429587,\n          y: 4865037.45393246,\n        },\n        {\n          x: 12950665.057790544,\n          y: 4864813.469608394,\n        },\n        {\n          x: 12950666.31470639,\n          y: 4864789.756353396,\n        },\n        {\n          x: 12950666.825456835,\n          y: 4864768.799620799,\n        },\n        {\n          x: 12950667.593330417,\n          y: 4864744.839817025,\n        },\n        {\n          x: 12950667.977868663,\n          y: 4864728.163469017,\n        },\n        {\n          x: 12950669.195489043,\n          y: 4864677.813533126,\n        },\n        {\n          x: 12950669.835947098,\n          y: 4864668.869905654,\n        },\n        {\n          x: 12950670.091873968,\n          y: 4864653.088344843,\n        },\n        {\n          x: 12950670.988058263,\n          y: 4864630.3428553175,\n        },\n        {\n          x: 12950670.92435391,\n          y: 4864626.509652139,\n        },\n        {\n          x: 12950671.691826217,\n          y: 4864606.63864744,\n        },\n        {\n          x: 12950672.203278288,\n          y: 4864580.504222692,\n        },\n        {\n          x: 12950673.228074549,\n          y: 4864554.884550185,\n        },\n        {\n          x: 12950673.73952671,\n          y: 4864528.497326723,\n        },\n        {\n          x: 12950674.890434487,\n          y: 4864500.769470086,\n        },\n        {\n          x: 12950675.2757754,\n          y: 4864475.593033784,\n        },\n        {\n          x: 12950675.409487799,\n          y: 4864472.776850138,\n        },\n        {\n          x: 12950676.010148842,\n          y: 4864442.529341358,\n        },\n        {\n          x: 12950677.468085546,\n          y: 4864406.737226046,\n        },\n        {\n          x: 12950678.344374934,\n          y: 4864361.629262644,\n        },\n        {\n          x: 12950681.645047376,\n          y: 4864252.127616024,\n        },\n        {\n          x: 12950682.9547692,\n          y: 4864216.335625385,\n        },\n        {\n          x: 12950683.100682352,\n          y: 4864214.154238779,\n        },\n        {\n          x: 12950684.236285895,\n          y: 4864191.999439908,\n        },\n        {\n          x: 12950685.866634507,\n          y: 4864160.1778856525,\n        },\n        {\n          x: 12950689.79278639,\n          y: 4864108.3870529765,\n        },\n        {\n          x: 12950689.938599342,\n          y: 4864106.931066905,\n        },\n        {\n          x: 12950697.064031562,\n          y: 4864036.379448896,\n        },\n        {\n          x: 12950699.534748787,\n          y: 4864019.216889406,\n        },\n        {\n          x: 12950699.680561578,\n          y: 4864018.345103669,\n        },\n        {\n          x: 12950716.396330617,\n          y: 4863888.161824789,\n        },\n        {\n          x: 12950718.57772101,\n          y: 4863874.636737837,\n        },\n        {\n          x: 12950718.577821152,\n          y: 4863874.05533762,\n        },\n        {\n          x: 12950732.387228379,\n          y: 4863767.873478454,\n        },\n        {\n          x: 12950748.375318805,\n          y: 4863648.896232093,\n        },\n        {\n          x: 12950765.67291641,\n          y: 4863514.502311158,\n        },\n        {\n          x: 12950777.731654065,\n          y: 4863426.117281793,\n        },\n        {\n          x: 12950782.448058736,\n          y: 4863391.472539309,\n        },\n        {\n          x: 12950787.587200012,\n          y: 4863348.835337318,\n        },\n        {\n          x: 12950801.256266356,\n          y: 4863250.146561549,\n        },\n        {\n          x: 12950805.275908938,\n          y: 4863217.932650578,\n        },\n        {\n          x: 12950818.28101368,\n          y: 4863113.762708521,\n        },\n        {\n          x: 12950822.999512516,\n          y: 4863078.5401642835,\n        },\n        {\n          x: 12950827.797217675,\n          y: 4863040.997227563,\n        },\n        {\n          x: 12950833.851926966,\n          y: 4862997.421011249,\n        },\n        {\n          x: 12950838.379305013,\n          y: 4862973.344145836,\n        },\n        {\n          x: 12950848.476446522,\n          y: 4862915.367113537,\n        },\n        {\n          x: 12950856.118280582,\n          y: 4862873.256843487,\n        },\n        {\n          x: 12950862.060671719,\n          y: 4862842.477409358,\n        },\n        {\n          x: 12950882.653269414,\n          y: 4862709.589368273,\n        },\n        {\n          x: 12950907.883131918,\n          y: 4862524.421459502,\n        },\n        {\n          x: 12950907.90533372,\n          y: 4862524.26986159,\n        },\n        {\n          x: 12950920.067918759,\n          y: 4862435.001208198,\n        },\n        {\n          x: 12950928.527198693,\n          y: 4862379.783399951,\n        },\n        {\n          x: 12950939.681083987,\n          y: 4862336.514125757,\n        },\n        {\n          x: 12950954.29343263,\n          y: 4862293.863553435,\n        },\n        {\n          x: 12950967.571566563,\n          y: 4862263.107846068,\n        },\n        {\n          x: 12950978.195387682,\n          y: 4862240.704492119,\n        },\n        {\n          x: 12950999.06198339,\n          y: 4862206.546426427,\n        },\n        {\n          x: 12951021.446772633,\n          y: 4862168.969866098,\n        },\n        {\n          x: 12951097.70213785,\n          y: 4862042.200138503,\n        },\n        {\n          x: 12951174.075577334,\n          y: 4861915.693221821,\n        },\n        {\n          x: 12951267.776776478,\n          y: 4861760.078948706,\n        },\n        {\n          x: 12951395.236453552,\n          y: 4861519.784399533,\n        },\n        {\n          x: 12951412.303520849,\n          y: 4861476.874540171,\n        },\n        {\n          x: 12951451.654131988,\n          y: 4861334.408202046,\n        },\n        {\n          x: 12951451.745536273,\n          y: 4861334.052106667,\n        },\n        {\n          x: 12951466.623726709,\n          y: 4861241.564646258,\n        },\n        {\n          x: 12951489.13393889,\n          y: 4861018.001826673,\n        },\n        {\n          x: 12951490.383194035,\n          y: 4860999.999285448,\n        },\n        {\n          x: 12951491.439840542,\n          y: 4860985.560035131,\n        },\n        {\n          x: 12951503.010040093,\n          y: 4860889.175072468,\n        },\n        {\n          x: 12951531.140403,\n          y: 4860680.970427163,\n        },\n        {\n          x: 12951557.758936353,\n          y: 4860485.587344637,\n        },\n        {\n          x: 12951565.10420882,\n          y: 4860453.124738692,\n        },\n        {\n          x: 12951575.364280945,\n          y: 4860406.458640103,\n        },\n        {\n          x: 12951581.065583235,\n          y: 4860384.268158007,\n        },\n        {\n          x: 12951610.884689623,\n          y: 4860288.296338669,\n        },\n        {\n          x: 12951620.19888619,\n          y: 4860261.224956072,\n        },\n        {\n          x: 12951627.274605729,\n          y: 4860242.081190622,\n        },\n        {\n          x: 12951637.413111666,\n          y: 4860215.23171692,\n        },\n        {\n          x: 12951657.721893568,\n          y: 4860163.979635463,\n        },\n        {\n          x: 12951666.949544173,\n          y: 4860142.223200858,\n        },\n        {\n          x: 12951668.869595224,\n          y: 4860137.696654858,\n        },\n        {\n          x: 12951693.982928237,\n          y: 4860078.331821876,\n        },\n        {\n          x: 12951736.262245214,\n          y: 4859972.802878212,\n        },\n        {\n          x: 12951779.310281485,\n          y: 4859859.063131411,\n        },\n        {\n          x: 12951799.296553789,\n          y: 4859804.14710355,\n        },\n        {\n          x: 12951825.224839896,\n          y: 4859739.862680752,\n        },\n        {\n          x: 12951906.509982908,\n          y: 4859546.26065336,\n        },\n        {\n          x: 12951960.443026407,\n          y: 4859429.470375646,\n        },\n        {\n          x: 12951999.771882042,\n          y: 4859335.105420177,\n        },\n        {\n          x: 12952032.435444733,\n          y: 4859254.969474848,\n        },\n        {\n          x: 12952037.41706581,\n          y: 4859242.9403781,\n        },\n        {\n          x: 12952060.923649335,\n          y: 4859187.91377235,\n        },\n        {\n          x: 12952072.317820875,\n          y: 4859160.3641980635,\n        },\n        {\n          x: 12952084.970246904,\n          y: 4859131.4834706,\n        },\n        {\n          x: 12952113.084959969,\n          y: 4859065.12985738,\n        },\n        {\n          x: 12952130.693674402,\n          y: 4859023.732486952,\n        },\n        {\n          x: 12952141.643150551,\n          y: 4858996.55370852,\n        },\n        {\n          x: 12952162.804377414,\n          y: 4858947.308924186,\n        },\n        {\n          x: 12952171.755373834,\n          y: 4858927.981571281,\n        },\n        {\n          x: 12952175.604139445,\n          y: 4858917.094515989,\n        },\n        {\n          x: 12952180.82205369,\n          y: 4858900.9651018735,\n        },\n        {\n          x: 12952184.554718394,\n          y: 4858889.243946094,\n        },\n        {\n          x: 12952190.769288482,\n          y: 4858868.280381973,\n        },\n        {\n          x: 12952193.507485226,\n          y: 4858857.610563799,\n        },\n        {\n          x: 12952195.947291974,\n          y: 4858845.681757747,\n        },\n        {\n          x: 12952197.797320686,\n          y: 4858836.642376694,\n        },\n        {\n          x: 12952199.129268397,\n          y: 4858825.304718492,\n        },\n        {\n          x: 12952203.716285268,\n          y: 4858778.431416472,\n        },\n        {\n          x: 12952205.964993557,\n          y: 4858749.46331663,\n        },\n        {\n          x: 12952207.408630643,\n          y: 4858703.901754291,\n        },\n        {\n          x: 12952205.633196818,\n          y: 4858677.13773786,\n        },\n        {\n          x: 12952200.97007183,\n          y: 4858631.018552714,\n        },\n        {\n          x: 12952196.971420817,\n          y: 4858601.209733323,\n        },\n        {\n          x: 12952192.67917836,\n          y: 4858569.843524169,\n        },\n        {\n          x: 12952188.386933465,\n          y: 4858539.217911885,\n        },\n        {\n          x: 12952168.84610709,\n          y: 4858394.254627763,\n        },\n        {\n          x: 12952159.519210786,\n          y: 4858329.002694597,\n        },\n        {\n          x: 12952158.632838566,\n          y: 4858318.547228751,\n        },\n        {\n          x: 12952157.151183436,\n          y: 4858288.818485506,\n        },\n        {\n          x: 12952156.706496444,\n          y: 4858276.218902411,\n        },\n        {\n          x: 12952157.149780104,\n          y: 4858257.685985396,\n        },\n        {\n          x: 12952159.218710119,\n          y: 4858232.933605842,\n        },\n        {\n          x: 12952159.810389748,\n          y: 4858223.449482893,\n        },\n        {\n          x: 12952162.532997137,\n          y: 4858196.9427767545,\n        },\n        {\n          x: 12952172.755045319,\n          y: 4858146.897168553,\n        },\n        {\n          x: 12952179.958089378,\n          y: 4858120.216771117,\n        },\n        {\n          x: 12952191.658258049,\n          y: 4858079.657970377,\n        },\n        {\n          x: 12952208.58059935,\n          y: 4858022.51880722,\n        },\n        {\n          x: 12952216.501576891,\n          y: 4857997.283134168,\n        },\n        {\n          x: 12952225.680391517,\n          y: 4857966.100288983,\n        },\n        {\n          x: 12952269.24519301,\n          y: 4857823.342887307,\n        },\n        {\n          x: 12952302.724863112,\n          y: 4857711.949002681,\n        },\n      ],\n    },\n    {\n      id: \"13\",\n      source: \"26\",\n      target: \"27\",\n      class: \"地铁十号线\",\n      name: \"地铁十号线 0\",\n      controlPoints: [\n        {\n          x: 12964391.173261674,\n          y: 4847959.964747035,\n        },\n        {\n          x: 12964381.421162914,\n          y: 4847238.950861313,\n        },\n        {\n          x: 12964379.013229802,\n          y: 4847130.369249381,\n        },\n        {\n          x: 12964369.707333228,\n          y: 4846953.233573841,\n        },\n        {\n          x: 12964365.098653296,\n          y: 4846899.529372901,\n        },\n        {\n          x: 12964350.271597194,\n          y: 4846844.7236321755,\n        },\n        {\n          x: 12964328.613459915,\n          y: 4846773.943192761,\n        },\n        {\n          x: 12964303.571447244,\n          y: 4846720.321707801,\n        },\n        {\n          x: 12964261.49123042,\n          y: 4846658.767114734,\n        },\n        {\n          x: 12964219.422329223,\n          y: 4846606.356004327,\n        },\n        {\n          x: 12964163.72308854,\n          y: 4846548.283066274,\n        },\n        {\n          x: 12964117.115347376,\n          y: 4846498.174184149,\n        },\n        {\n          x: 12963719.24125982,\n          y: 4846081.363070078,\n        },\n        {\n          x: 12963666.940189386,\n          y: 4846020.980269377,\n        },\n        {\n          x: 12963651.029381108,\n          y: 4846008.466281171,\n        },\n        {\n          x: 12963640.792827746,\n          y: 4845993.645627467,\n        },\n        {\n          x: 12963630.555030722,\n          y: 4845977.682026026,\n        },\n        {\n          x: 12963622.579870086,\n          y: 4845954.85254285,\n        },\n        {\n          x: 12963622.547271827,\n          y: 4845927.422297171,\n        },\n        {\n          x: 12963624.705055857,\n          y: 4845832.5516995825,\n        },\n        {\n          x: 12963605.106422728,\n          y: 4844950.156548626,\n        },\n        {\n          x: 12963600.552929461,\n          y: 4844939.887775902,\n        },\n        {\n          x: 12963641.28504856,\n          y: 4844029.840890613,\n        },\n        {\n          x: 12963635.07102118,\n          y: 4843895.785437119,\n        },\n        {\n          x: 12963592.56494142,\n          y: 4843790.304489117,\n        },\n        {\n          x: 12963515.79594813,\n          y: 4843723.544249312,\n        },\n        {\n          x: 12963437.02641232,\n          y: 4843673.039785006,\n        },\n        {\n          x: 12963372.392513098,\n          y: 4843630.608396946,\n        },\n        {\n          x: 12963273.452605404,\n          y: 4843594.387913362,\n        },\n        {\n          x: 12963212.653908446,\n          y: 4843577.914113967,\n        },\n        {\n          x: 12963206.82489125,\n          y: 4843576.334664474,\n        },\n        {\n          x: 12963057.427614385,\n          y: 4843550.431693091,\n        },\n        {\n          x: 12962954.477380954,\n          y: 4843548.741287049,\n        },\n        {\n          x: 12962788.932332132,\n          y: 4843539.119846538,\n        },\n        {\n          x: 12960734.413928954,\n          y: 4843579.436506579,\n        },\n        {\n          x: 12960615.677401308,\n          y: 4843579.296389959,\n        },\n        {\n          x: 12959224.804679275,\n          y: 4843577.132908265,\n        },\n        {\n          x: 12958165.962075146,\n          y: 4843552.786071934,\n        },\n        {\n          x: 12958015.842937116,\n          y: 4843539.299682281,\n        },\n        {\n          x: 12957633.083574392,\n          y: 4843505.052930688,\n        },\n        {\n          x: 12956758.552751072,\n          y: 4843474.381786778,\n        },\n        {\n          x: 12956086.236845858,\n          y: 4843457.686331021,\n        },\n        {\n          x: 12955417.836020822,\n          y: 4843562.642953932,\n        },\n        {\n          x: 12955413.075883733,\n          y: 4843564.0987397935,\n        },\n        {\n          x: 12955318.578314304,\n          y: 4843592.994666116,\n        },\n        {\n          x: 12955279.765356282,\n          y: 4843598.897849127,\n        },\n        {\n          x: 12955190.622782081,\n          y: 4843602.847728858,\n        },\n        {\n          x: 12953646.394080758,\n          y: 4843575.957979132,\n        },\n        {\n          x: 12953060.552869217,\n          y: 4843574.760301962,\n        },\n        {\n          x: 12952787.031931885,\n          y: 4843571.511276698,\n        },\n        {\n          x: 12951953.230827896,\n          y: 4843561.903501986,\n        },\n        {\n          x: 12951924.357645055,\n          y: 4843559.360785293,\n        },\n        {\n          x: 12951835.590379665,\n          y: 4843551.541948503,\n        },\n        {\n          x: 12951527.588141518,\n          y: 4843484.482094485,\n        },\n        {\n          x: 12951075.84273588,\n          y: 4843410.169546208,\n        },\n        {\n          x: 12950795.208394462,\n          y: 4843386.56777375,\n        },\n        {\n          x: 12950199.79003986,\n          y: 4843370.818621907,\n        },\n        {\n          x: 12950187.299179578,\n          y: 4843370.485690744,\n        },\n        {\n          x: 12948755.739655264,\n          y: 4843370.555741397,\n        },\n        {\n          x: 12948301.7684026,\n          y: 4843375.188304583,\n        },\n        {\n          x: 12948278.325845689,\n          y: 4843375.123114149,\n        },\n        {\n          x: 12947913.423896424,\n          y: 4843373.865129756,\n        },\n        {\n          x: 12947592.303468505,\n          y: 4843394.1161822025,\n        },\n        {\n          x: 12947581.215097992,\n          y: 4843394.815685296,\n        },\n        {\n          x: 12947415.424213238,\n          y: 4843437.701399312,\n        },\n        {\n          x: 12947274.850617228,\n          y: 4843509.5493655335,\n        },\n        {\n          x: 12947145.066987505,\n          y: 4843631.989033849,\n        },\n        {\n          x: 12947083.745603528,\n          y: 4843765.448522134,\n        },\n        {\n          x: 12947029.622192265,\n          y: 4843916.987015813,\n        },\n        {\n          x: 12946979.091048203,\n          y: 4844090.2070025485,\n        },\n        {\n          x: 12946955.102622215,\n          y: 4844184.990607465,\n        },\n        {\n          x: 12946945.915349547,\n          y: 4844319.830258014,\n        },\n        {\n          x: 12946923.770701075,\n          y: 4845315.372927731,\n        },\n        {\n          x: 12946851.421569752,\n          y: 4846551.5626413245,\n        },\n        {\n          x: 12946848.88594415,\n          y: 4846594.6202231655,\n        },\n        {\n          x: 12946848.609652413,\n          y: 4846598.19993173,\n        },\n        {\n          x: 12946696.54362537,\n          y: 4848569.1295227185,\n        },\n        {\n          x: 12946757.730386814,\n          y: 4848764.400754196,\n        },\n        {\n          x: 12946757.762984468,\n          y: 4848770.602855413,\n        },\n        {\n          x: 12946761.025258096,\n          y: 4849389.514336067,\n        },\n        {\n          x: 12946767.82605037,\n          y: 4850217.041711847,\n        },\n        {\n          x: 12946789.423173606,\n          y: 4850282.143556595,\n        },\n        {\n          x: 12946825.465052422,\n          y: 4850311.148186556,\n        },\n        {\n          x: 12947052.561481878,\n          y: 4850452.686121019,\n        },\n        {\n          x: 12947214.803034527,\n          y: 4850514.554585377,\n        },\n        {\n          x: 12947308.555685857,\n          y: 4850529.261912783,\n        },\n        {\n          x: 12947449.196901781,\n          y: 4850533.256072254,\n        },\n        {\n          x: 12947590.121115766,\n          y: 4850533.639384969,\n        },\n        {\n          x: 12947604.269979956,\n          y: 4850533.6780554075,\n        },\n        {\n          x: 12947595.595432382,\n          y: 4853171.930337626,\n        },\n        {\n          x: 12947588.6332791,\n          y: 4853230.507756927,\n        },\n        {\n          x: 12947570.25534986,\n          y: 4853385.134998881,\n        },\n        {\n          x: 12947534.132989677,\n          y: 4853500.7123848,\n        },\n        {\n          x: 12947451.113532243,\n          y: 4853616.16379296,\n        },\n        {\n          x: 12947332.03107398,\n          y: 4853706.215145492,\n        },\n        {\n          x: 12947133.576039799,\n          y: 4853828.591678857,\n        },\n        {\n          x: 12946866.97284939,\n          y: 4854028.085858982,\n        },\n        {\n          x: 12946608.167520212,\n          y: 4854187.260197411,\n        },\n        {\n          x: 12946364.738988684,\n          y: 4854328.7254704805,\n        },\n        {\n          x: 12946303.257037977,\n          y: 4854430.402571901,\n        },\n        {\n          x: 12946252.383757986,\n          y: 4854573.552461346,\n        },\n        {\n          x: 12946214.461752877,\n          y: 4854793.706838007,\n        },\n        {\n          x: 12946220.215499429,\n          y: 4854990.273434222,\n        },\n        {\n          x: 12946219.011349382,\n          y: 4855034.084710322,\n        },\n        {\n          x: 12946156.333146382,\n          y: 4855155.899273862,\n        },\n        {\n          x: 12946061.71710423,\n          y: 4855352.240931815,\n        },\n        {\n          x: 12946050.635431375,\n          y: 4855405.652363556,\n        },\n        {\n          x: 12946036.841429455,\n          y: 4855472.970938698,\n        },\n        {\n          x: 12945937.184814524,\n          y: 4856212.898218268,\n        },\n        {\n          x: 12945963.10362221,\n          y: 4857094.046675076,\n        },\n        {\n          x: 12945958.921351675,\n          y: 4857134.026535522,\n        },\n        {\n          x: 12945884.03047807,\n          y: 4857857.218830575,\n        },\n        {\n          x: 12945847.638054904,\n          y: 4858399.611054495,\n        },\n        {\n          x: 12945847.280553274,\n          y: 4859007.224022067,\n        },\n        {\n          x: 12945860.526034107,\n          y: 4859226.599693325,\n        },\n        {\n          x: 12945864.842806887,\n          y: 4859298.0925262105,\n        },\n        {\n          x: 12945879.5175261,\n          y: 4859405.1651427485,\n        },\n        {\n          x: 12945886.625513952,\n          y: 4859589.651325276,\n        },\n        {\n          x: 12945864.662784807,\n          y: 4859694.379973758,\n        },\n        {\n          x: 12945784.912348324,\n          y: 4859882.159043464,\n        },\n        {\n          x: 12945727.11821354,\n          y: 4859994.151868572,\n        },\n        {\n          x: 12945701.784202412,\n          y: 4860124.311216468,\n        },\n        {\n          x: 12945698.14559977,\n          y: 4860174.944243185,\n        },\n        {\n          x: 12945452.47590781,\n          y: 4860713.3477798365,\n        },\n        {\n          x: 12945196.058016783,\n          y: 4861128.770078741,\n        },\n        {\n          x: 12945092.686995683,\n          y: 4861317.482488749,\n        },\n        {\n          x: 12945051.578445194,\n          y: 4861392.531520205,\n        },\n        {\n          x: 12945015.437229244,\n          y: 4861490.129152049,\n        },\n        {\n          x: 12945008.163701242,\n          y: 4861576.939256895,\n        },\n        {\n          x: 12945015.284018965,\n          y: 4861718.049761452,\n        },\n        {\n          x: 12945022.23002506,\n          y: 4861756.836245517,\n        },\n        {\n          x: 12945035.651318152,\n          y: 4861797.3254907355,\n        },\n        {\n          x: 12945054.888690906,\n          y: 4861837.528089324,\n        },\n        {\n          x: 12945105.325637072,\n          y: 4861946.179124048,\n        },\n        {\n          x: 12945125.370065786,\n          y: 4861974.055941134,\n        },\n        {\n          x: 12945163.446826743,\n          y: 4862019.098382124,\n        },\n        {\n          x: 12945194.809906306,\n          y: 4862048.391273372,\n        },\n        {\n          x: 12945228.090067945,\n          y: 4862073.16642714,\n        },\n        {\n          x: 12945255.305523323,\n          y: 4862092.36230406,\n        },\n        {\n          x: 12945285.556679495,\n          y: 4862110.414454173,\n        },\n        {\n          x: 12945315.808265274,\n          y: 4862128.467023728,\n        },\n        {\n          x: 12945361.54760602,\n          y: 4862142.217026062,\n        },\n        {\n          x: 12945487.830327151,\n          y: 4862156.985505024,\n        },\n      ],\n    },\n    {\n      id: \"14\",\n      source: \"28\",\n      target: \"29\",\n      class: \"地铁十四号线\",\n      name: \"地铁十四号线 0\",\n      controlPoints: [\n        {\n          x: 12937234.877597623,\n          y: 4846515.674866713,\n        },\n        {\n          x: 12937368.988537306,\n          y: 4846593.191490097,\n        },\n        {\n          x: 12937461.335291399,\n          y: 4846647.398606839,\n        },\n        {\n          x: 12937532.375518117,\n          y: 4846688.019702177,\n        },\n        {\n          x: 12937591.769328088,\n          y: 4846720.059432032,\n        },\n        {\n          x: 12937621.188342465,\n          y: 4846732.002843995,\n        },\n        {\n          x: 12937671.789557256,\n          y: 4846748.737535954,\n        },\n        {\n          x: 12937709.602904188,\n          y: 4846758.320650579,\n        },\n        {\n          x: 12937735.762316125,\n          y: 4846763.326932602,\n        },\n        {\n          x: 12937752.397758542,\n          y: 4846765.615152837,\n        },\n        {\n          x: 12937773.44091199,\n          y: 4846768.332774585,\n        },\n        {\n          x: 12937804.297495496,\n          y: 4846770.764304414,\n        },\n        {\n          x: 12937827.33427437,\n          y: 4846772.051537565,\n        },\n        {\n          x: 12937868.008451082,\n          y: 4846771.479321919,\n        },\n        {\n          x: 12937892.32897584,\n          y: 4846770.33498424,\n        },\n        {\n          x: 12937918.075058706,\n          y: 4846766.901995257,\n        },\n        {\n          x: 12937940.834554123,\n          y: 4846763.6122220345,\n        },\n        {\n          x: 12937968.574529182,\n          y: 4846758.463006948,\n        },\n        {\n          x: 12937995.180239107,\n          y: 4846751.025023762,\n        },\n        {\n          x: 12938017.517118562,\n          y: 4846745.160619812,\n        },\n        {\n          x: 12938042.132414829,\n          y: 4846737.43681869,\n        },\n        {\n          x: 12938076.570282334,\n          y: 4846723.276240112,\n        },\n        {\n          x: 12938122.822349729,\n          y: 4846702.393192925,\n        },\n        {\n          x: 12938155.702757211,\n          y: 4846683.512634498,\n        },\n        {\n          x: 12938188.444042044,\n          y: 4846662.62954278,\n        },\n        {\n          x: 12938219.76602793,\n          y: 4846639.600848661,\n        },\n        {\n          x: 12938250.095861865,\n          y: 4846614.140497331,\n        },\n        {\n          x: 12938278.438376905,\n          y: 4846585.962328421,\n        },\n        {\n          x: 12938304.220769178,\n          y: 4846557.783944012,\n        },\n        {\n          x: 12938329.579807637,\n          y: 4846527.173999285,\n        },\n        {\n          x: 12938353.520818293,\n          y: 4846493.274026497,\n        },\n        {\n          x: 12938372.907309297,\n          y: 4846461.6623603245,\n        },\n        {\n          x: 12938391.017690128,\n          y: 4846427.046785262,\n        },\n        {\n          x: 12938412.561981687,\n          y: 4846377.125676343,\n        },\n        {\n          x: 12938434.974010698,\n          y: 4846316.476277426,\n        },\n        {\n          x: 12938448.248669473,\n          y: 4846281.574595996,\n        },\n        {\n          x: 12938475.656359944,\n          y: 4846207.766580478,\n        },\n        {\n          x: 12938490.211433839,\n          y: 4846172.579389068,\n        },\n        {\n          x: 12938507.041724533,\n          y: 4846137.6790905995,\n        },\n        {\n          x: 12938526.29072453,\n          y: 4846102.493274418,\n        },\n        {\n          x: 12938542.26056133,\n          y: 4846073.028826507,\n        },\n        {\n          x: 12938584.740041988,\n          y: 4846003.660309321,\n        },\n        {\n          x: 12938633.06400581,\n          y: 4845924.638571542,\n        },\n        {\n          x: 12938715.454181843,\n          y: 4845792.771941782,\n        },\n        {\n          x: 12938776.553557053,\n          y: 4845700.585488995,\n        },\n        {\n          x: 12938781.398345944,\n          y: 4845694.149817628,\n        },\n        {\n          x: 12938800.081236716,\n          y: 4845673.873968367,\n        },\n        {\n          x: 12938830.820290571,\n          y: 4845645.815687927,\n        },\n        {\n          x: 12938844.393556165,\n          y: 4845633.390067325,\n        },\n        {\n          x: 12938873.132778017,\n          y: 4845610.143030206,\n        },\n        {\n          x: 12938936.183000699,\n          y: 4845573.274183875,\n        },\n        {\n          x: 12938969.9751077,\n          y: 4845523.292870295,\n        },\n        {\n          x: 12939008.30658488,\n          y: 4845483.611718048,\n        },\n        {\n          x: 12939046.62636937,\n          y: 4845453.553428374,\n        },\n        {\n          x: 12939107.67397802,\n          y: 4845425.508528395,\n        },\n        {\n          x: 12939139.988430338,\n          y: 4845415.095566754,\n        },\n        {\n          x: 12939215.636890687,\n          y: 4845415.718690437,\n        },\n        {\n          x: 12939308.039270518,\n          y: 4845421.266472513,\n        },\n        {\n          x: 12939491.25690715,\n          y: 4845458.350894194,\n        },\n        {\n          x: 12939790.511140315,\n          y: 4845556.207267058,\n        },\n        {\n          x: 12939988.628771447,\n          y: 4845616.1622475535,\n        },\n        {\n          x: 12940117.839141306,\n          y: 4845661.911291016,\n        },\n        {\n          x: 12940686.897376765,\n          y: 4845952.2196258595,\n        },\n        {\n          x: 12941074.89764744,\n          y: 4846157.503429323,\n        },\n        {\n          x: 12941335.171058182,\n          y: 4846317.370755986,\n        },\n        {\n          x: 12941559.500148436,\n          y: 4846435.253157876,\n        },\n        {\n          x: 12941942.0737714,\n          y: 4846649.584496282,\n        },\n        {\n          x: 12942044.003008543,\n          y: 4846663.89086179,\n        },\n        {\n          x: 12942128.18335582,\n          y: 4846652.232800751,\n        },\n        {\n          x: 12942566.46418881,\n          y: 4846526.042660932,\n        },\n        {\n          x: 12942889.715147126,\n          y: 4846450.953434545,\n        },\n        {\n          x: 12943968.393642,\n          y: 4846408.250017698,\n        },\n        {\n          x: 12944809.837601995,\n          y: 4846425.649451,\n        },\n        {\n          x: 12944985.099897848,\n          y: 4846441.60822536,\n        },\n        {\n          x: 12945546.215890277,\n          y: 4846492.747584046,\n        },\n        {\n          x: 12946211.229001617,\n          y: 4846547.780306945,\n        },\n      ],\n    },\n    {\n      id: \"15\",\n      source: \"30\",\n      target: \"31\",\n      class: \"地铁十五号线\",\n      name: \"地铁十五号线 0\",\n      controlPoints: [\n        {\n          x: 12975220.360613192,\n          y: 4878868.526210992,\n        },\n        {\n          x: 12975170.101829547,\n          y: 4878482.810853661,\n        },\n        {\n          x: 12975127.393577926,\n          y: 4878166.084186471,\n        },\n        {\n          x: 12975102.3383307,\n          y: 4877971.094415046,\n        },\n        {\n          x: 12975067.230635904,\n          y: 4877703.212676576,\n        },\n        {\n          x: 12975028.196639525,\n          y: 4877408.433615002,\n        },\n        {\n          x: 12974992.782733576,\n          y: 4877135.782488413,\n        },\n        {\n          x: 12974961.616855532,\n          y: 4876898.418269849,\n        },\n        {\n          x: 12974957.635438241,\n          y: 4876867.667671654,\n        },\n        {\n          x: 12974924.692424836,\n          y: 4876613.225913413,\n        },\n        {\n          x: 12974904.122140514,\n          y: 4876457.185169152,\n        },\n        {\n          x: 12974891.114395186,\n          y: 4876358.838107704,\n        },\n        {\n          x: 12974881.80755435,\n          y: 4876318.801830084,\n        },\n        {\n          x: 12974850.30174708,\n          y: 4876128.145737729,\n        },\n        {\n          x: 12974841.600142721,\n          y: 4876060.242186066,\n        },\n        {\n          x: 12974833.693115635,\n          y: 4875993.44712488,\n        },\n        {\n          x: 12974824.851303473,\n          y: 4875896.879010218,\n        },\n        {\n          x: 12974823.581860177,\n          y: 4875861.890374971,\n        },\n        {\n          x: 12974804.231609207,\n          y: 4875717.818793602,\n        },\n        {\n          x: 12974793.363254767,\n          y: 4875644.593833729,\n        },\n        {\n          x: 12974780.733046675,\n          y: 4875579.452634726,\n        },\n        {\n          x: 12974765.457217943,\n          y: 4875526.588724708,\n        },\n        {\n          x: 12974748.090285787,\n          y: 4875469.247595661,\n        },\n        {\n          x: 12974731.657055452,\n          y: 4875430.44830189,\n        },\n        {\n          x: 12974707.759133428,\n          y: 4875374.935044397,\n        },\n        {\n          x: 12974682.982388051,\n          y: 4875324.213162166,\n        },\n        {\n          x: 12974660.60794111,\n          y: 4875285.743106426,\n        },\n        {\n          x: 12974635.85688353,\n          y: 4875245.7891169265,\n        },\n        {\n          x: 12974592.33221722,\n          y: 4875182.6007377645,\n        },\n        {\n          x: 12974565.515120054,\n          y: 4875148.641781552,\n        },\n        {\n          x: 12974477.340428105,\n          y: 4875046.200795493,\n        },\n        {\n          x: 12974324.23997027,\n          y: 4874868.727412534,\n        },\n        {\n          x: 12974285.225031873,\n          y: 4874824.06709895,\n        },\n        {\n          x: 12974250.676817749,\n          y: 4874784.765451768,\n        },\n        {\n          x: 12974226.548435159,\n          y: 4874754.982961457,\n        },\n        {\n          x: 12974179.793554721,\n          y: 4874702.287665765,\n        },\n        {\n          x: 12974152.700378012,\n          y: 4874674.611620291,\n        },\n        {\n          x: 12974102.993937358,\n          y: 4874629.4094777135,\n        },\n        {\n          x: 12974057.281876976,\n          y: 4874592.149864237,\n        },\n        {\n          x: 12974010.571259402,\n          y: 4874557.10058754,\n        },\n        {\n          x: 12973965.349593911,\n          y: 4874523.243715123,\n        },\n        {\n          x: 12973927.86306645,\n          y: 4874495.325444062,\n        },\n        {\n          x: 12973778.829987278,\n          y: 4874388.442810681,\n        },\n        {\n          x: 12973631.292726409,\n          y: 4874281.260318043,\n        },\n        {\n          x: 12973511.128084678,\n          y: 4874193.07702723,\n        },\n        {\n          x: 12973457.885669941,\n          y: 4874152.090015151,\n        },\n        {\n          x: 12973424.569167605,\n          y: 4874125.653511811,\n        },\n        {\n          x: 12973401.064728435,\n          y: 4874103.948181291,\n        },\n        {\n          x: 12973364.466450525,\n          y: 4874069.155318013,\n        },\n        {\n          x: 12973343.040548371,\n          y: 4874047.737895291,\n        },\n        {\n          x: 12973301.971003683,\n          y: 4874004.595285215,\n        },\n        {\n          x: 12973268.333740914,\n          y: 4873965.001992706,\n        },\n        {\n          x: 12973223.968151508,\n          y: 4873907.523655236,\n        },\n        {\n          x: 12973200.145078428,\n          y: 4873874.757068463,\n        },\n        {\n          x: 12973184.359140303,\n          y: 4873851.817254196,\n        },\n        {\n          x: 12973151.288220981,\n          y: 4873799.065100245,\n        },\n        {\n          x: 12973133.104508085,\n          y: 4873765.071843533,\n        },\n        {\n          x: 12973115.220516248,\n          y: 4873731.975402937,\n        },\n        {\n          x: 12973083.514099035,\n          y: 4873666.6145877475,\n        },\n        {\n          x: 12972958.272448545,\n          y: 4873409.226124313,\n        },\n        {\n          x: 12972918.910218379,\n          y: 4873326.610352403,\n        },\n        {\n          x: 12972826.476255693,\n          y: 4873134.840144364,\n        },\n        {\n          x: 12972795.763337882,\n          y: 4873070.719005933,\n        },\n        {\n          x: 12972744.76742065,\n          y: 4872959.163678453,\n        },\n        {\n          x: 12972720.60264992,\n          y: 4872901.886303345,\n        },\n        {\n          x: 12972659.997036628,\n          y: 4872735.667320859,\n        },\n        {\n          x: 12972643.299525585,\n          y: 4872699.580940345,\n        },\n        {\n          x: 12972559.100747146,\n          y: 4872455.805418115,\n        },\n        {\n          x: 12972532.783339068,\n          y: 4872369.677216135,\n        },\n        {\n          x: 12972491.590280673,\n          y: 4872256.099208747,\n        },\n        {\n          x: 12972431.316032,\n          y: 4872100.655541013,\n        },\n        {\n          x: 12972411.705557901,\n          y: 4872052.949093282,\n        },\n        {\n          x: 12972344.317184499,\n          y: 4871873.754390362,\n        },\n        {\n          x: 12972344.317084517,\n          y: 4871873.754090381,\n        },\n        {\n          x: 12972283.901539784,\n          y: 4871713.096747656,\n        },\n        {\n          x: 12972231.51025757,\n          y: 4871590.704161345,\n        },\n        {\n          x: 12972220.786418218,\n          y: 4871568.055674147,\n        },\n        {\n          x: 12972187.677583814,\n          y: 4871506.46596912,\n        },\n        {\n          x: 12972159.917606726,\n          y: 4871462.740223999,\n        },\n        {\n          x: 12972122.405523332,\n          y: 4871409.778587388,\n        },\n        {\n          x: 12972070.897276413,\n          y: 4871345.708445298,\n        },\n        {\n          x: 12972018.521820415,\n          y: 4871290.250138916,\n        },\n        {\n          x: 12971949.740475345,\n          y: 4871227.65827687,\n        },\n        {\n          x: 12971856.352377752,\n          y: 4871157.9745282065,\n        },\n        {\n          x: 12971744.543129945,\n          y: 4871096.1426233165,\n        },\n        {\n          x: 12971666.305498093,\n          y: 4871059.28347291,\n        },\n        {\n          x: 12971573.517186211,\n          y: 4871028.317100962,\n        },\n        {\n          x: 12971543.275268642,\n          y: 4871019.710796947,\n        },\n        {\n          x: 12970313.75580163,\n          y: 4871029.4038401535,\n        },\n        {\n          x: 12969743.624482477,\n          y: 4871013.157693107,\n        },\n        {\n          x: 12969526.746136123,\n          y: 4871006.97216711,\n        },\n        {\n          x: 12969268.713759044,\n          y: 4870954.619065353,\n        },\n        {\n          x: 12969027.21710455,\n          y: 4870806.293398591,\n        },\n        {\n          x: 12968695.732934553,\n          y: 4870386.919417365,\n        },\n        {\n          x: 12968267.842089783,\n          y: 4869845.614706303,\n        },\n        {\n          x: 12968041.977084596,\n          y: 4869507.853755934,\n        },\n        {\n          x: 12967897.801472468,\n          y: 4868972.889715916,\n        },\n        {\n          x: 12967878.337220326,\n          y: 4867594.394019558,\n        },\n        {\n          x: 12967868.77862341,\n          y: 4866238.919959571,\n        },\n        {\n          x: 12967801.717744218,\n          y: 4865970.777359848,\n        },\n        {\n          x: 12967494.283058798,\n          y: 4865925.768674796,\n        },\n        {\n          x: 12965837.973847104,\n          y: 4865743.023798019,\n        },\n        {\n          x: 12965348.196035301,\n          y: 4865688.751628207,\n        },\n        {\n          x: 12964443.21307059,\n          y: 4865516.203149938,\n        },\n      ],\n    },\n    {\n      id: \"16\",\n      source: \"32\",\n      target: \"33\",\n      class: \"机场轻轨线\",\n      name: \"机场轻轨线 0\",\n      controlPoints: [\n        {\n          x: 12981108.370146083,\n          y: 4871488.68313175,\n        },\n        {\n          x: 12981018.508214273,\n          y: 4871439.9092021575,\n        },\n        {\n          x: 12980902.535834748,\n          y: 4871405.203097882,\n        },\n        {\n          x: 12980821.525095403,\n          y: 4871396.07635756,\n        },\n        {\n          x: 12980751.756629316,\n          y: 4871395.085485736,\n        },\n        {\n          x: 12980685.769679295,\n          y: 4871406.921907764,\n        },\n        {\n          x: 12980609.835639,\n          y: 4871428.117243195,\n        },\n        {\n          x: 12980553.791983627,\n          y: 4871454.35924438,\n        },\n        {\n          x: 12980504.260708505,\n          y: 4871483.782440005,\n        },\n        {\n          x: 12980435.350114407,\n          y: 4871539.621344493,\n        },\n        {\n          x: 12980398.504969673,\n          y: 4871582.03131289,\n        },\n        {\n          x: 12980362.007896207,\n          y: 4871632.577822356,\n        },\n        {\n          x: 12980332.654508604,\n          y: 4871686.360369531,\n        },\n        {\n          x: 12980319.13294245,\n          y: 4871720.246401924,\n        },\n        {\n          x: 12980306.26908758,\n          y: 4871757.385237568,\n        },\n        {\n          x: 12980293.763164897,\n          y: 4871806.2405863255,\n        },\n        {\n          x: 12980277.698010115,\n          y: 4871929.260816189,\n        },\n        {\n          x: 12980261.290169481,\n          y: 4871965.0230897125,\n        },\n        {\n          x: 12980254.749320468,\n          y: 4871910.852033942,\n        },\n        {\n          x: 12980243.756181171,\n          y: 4871816.594568528,\n        },\n        {\n          x: 12980227.70573535,\n          y: 4871752.941176994,\n        },\n        {\n          x: 12980203.072226636,\n          y: 4871672.165283503,\n        },\n        {\n          x: 12980150.33990551,\n          y: 4871582.889266779,\n        },\n        {\n          x: 12980101.34029352,\n          y: 4871516.884384831,\n        },\n        {\n          x: 12980048.722460367,\n          y: 4871461.910039693,\n        },\n        {\n          x: 12979996.111785132,\n          y: 4871413.06501025,\n        },\n        {\n          x: 12979909.333892826,\n          y: 4871359.422428334,\n        },\n        {\n          x: 12979799.058829894,\n          y: 4871312.3731178045,\n        },\n        {\n          x: 12979720.936799372,\n          y: 4871295.456660487,\n        },\n        {\n          x: 12979624.500482768,\n          y: 4871274.924462654,\n        },\n        {\n          x: 12979479.39873571,\n          y: 4871277.213494264,\n        },\n        {\n          x: 12979085.453077132,\n          y: 4871280.917372964,\n        },\n        {\n          x: 12978992.156225236,\n          y: 4871279.384364794,\n        },\n        {\n          x: 12978956.177897697,\n          y: 4871277.666599098,\n        },\n        {\n          x: 12978900.674255166,\n          y: 4871271.113841657,\n        },\n        {\n          x: 12978860.293281717,\n          y: 4871262.702607095,\n        },\n        {\n          x: 12978764.752916442,\n          y: 4871245.472966051,\n        },\n        {\n          x: 12978664.480746558,\n          y: 4871226.718917767,\n        },\n        {\n          x: 12978629.714270562,\n          y: 4871220.650472208,\n        },\n        {\n          x: 12978620.414652059,\n          y: 4871219.068466421,\n        },\n        {\n          x: 12978564.580504624,\n          y: 4871213.590081386,\n        },\n        {\n          x: 12978460.737579372,\n          y: 4871195.649671084,\n        },\n        {\n          x: 12978328.733081415,\n          y: 4871172.822299577,\n        },\n        {\n          x: 12978213.58406164,\n          y: 4871153.546776074,\n        },\n        {\n          x: 12978126.884770632,\n          y: 4871139.996553964,\n        },\n        {\n          x: 12978030.808147773,\n          y: 4871127.039056859,\n        },\n        {\n          x: 12977949.096244726,\n          y: 4871117.637013953,\n        },\n        {\n          x: 12977857.7281794,\n          y: 4871107.719554274,\n        },\n        {\n          x: 12977818.256715368,\n          y: 4871103.431990254,\n        },\n        {\n          x: 12977782.926936783,\n          y: 4871099.961185381,\n        },\n        {\n          x: 12977738.76375114,\n          y: 4871094.860768784,\n        },\n        {\n          x: 12977699.015983863,\n          y: 4871089.466841593,\n        },\n        {\n          x: 12977670.034107389,\n          y: 4871085.695982234,\n        },\n        {\n          x: 12977617.58207723,\n          y: 4871075.083050405,\n        },\n        {\n          x: 12977586.096101644,\n          y: 4871069.051658005,\n        },\n        {\n          x: 12977553.816080883,\n          y: 4871065.107010753,\n        },\n        {\n          x: 12977547.258727068,\n          y: 4871063.901849335,\n        },\n        {\n          x: 12977530.618654177,\n          y: 4871060.843754747,\n        },\n        {\n          x: 12977510.63402144,\n          y: 4871057.271591576,\n        },\n        {\n          x: 12977488.410456756,\n          y: 4871052.304085646,\n        },\n        {\n          x: 12977476.108263735,\n          y: 4871049.825167599,\n        },\n        {\n          x: 12977449.974956136,\n          y: 4871043.750099359,\n        },\n        {\n          x: 12977426.211063186,\n          y: 4871036.9651420405,\n        },\n        {\n          x: 12977355.623273922,\n          y: 4871014.777517495,\n        },\n        {\n          x: 12977296.479809767,\n          y: 4870992.125603299,\n        },\n        {\n          x: 12977282.77631216,\n          y: 4870986.002440447,\n        },\n        {\n          x: 12977251.719621776,\n          y: 4870972.154493815,\n        },\n        {\n          x: 12977247.24550043,\n          y: 4870969.812148521,\n        },\n        {\n          x: 12977238.854476603,\n          y: 4870965.421079147,\n        },\n        {\n          x: 12977209.761773894,\n          y: 4870950.136411922,\n        },\n        {\n          x: 12977096.757856315,\n          y: 4870889.44525773,\n        },\n        {\n          x: 12976968.08990173,\n          y: 4870816.956775016,\n        },\n        {\n          x: 12976780.16768485,\n          y: 4870720.01310895,\n        },\n        {\n          x: 12976677.82368606,\n          y: 4870666.528023298,\n        },\n        {\n          x: 12976655.8764118,\n          y: 4870655.5205783425,\n        },\n        {\n          x: 12976529.223142704,\n          y: 4870592.317432991,\n        },\n        {\n          x: 12976428.586317737,\n          y: 4870542.427981049,\n        },\n        {\n          x: 12976366.5421185,\n          y: 4870518.407870099,\n        },\n        {\n          x: 12976329.380473636,\n          y: 4870506.354736436,\n        },\n        {\n          x: 12976271.82754423,\n          y: 4870490.321866817,\n        },\n        {\n          x: 12976228.111302977,\n          y: 4870481.388277324,\n        },\n        {\n          x: 12976188.09288433,\n          y: 4870478.038546045,\n        },\n        {\n          x: 12976149.436712662,\n          y: 4870471.373423314,\n        },\n        {\n          x: 12976071.072179394,\n          y: 4870465.607346994,\n        },\n        {\n          x: 12975965.86990555,\n          y: 4870455.646798379,\n        },\n        {\n          x: 12975917.917454332,\n          y: 4870449.027466127,\n        },\n        {\n          x: 12975868.894021038,\n          y: 4870442.773831003,\n        },\n        {\n          x: 12975820.580020344,\n          y: 4870433.638390911,\n        },\n        {\n          x: 12975790.158459982,\n          y: 4870426.94054179,\n        },\n        {\n          x: 12975775.838848663,\n          y: 4870422.328125062,\n        },\n        {\n          x: 12975751.13866662,\n          y: 4870414.524700168,\n        },\n        {\n          x: 12975725.00528259,\n          y: 4870405.648373743,\n        },\n        {\n          x: 12975714.620193584,\n          y: 4870400.657944233,\n        },\n        {\n          x: 12975694.938773984,\n          y: 4870397.150636553,\n        },\n        {\n          x: 12975674.888572035,\n          y: 4870388.966441453,\n        },\n        {\n          x: 12975636.937384691,\n          y: 4870373.667942694,\n        },\n        {\n          x: 12975612.227725828,\n          y: 4870361.187195985,\n        },\n        {\n          x: 12975582.510264473,\n          y: 4870348.370360326,\n        },\n        {\n          x: 12975500.513648823,\n          y: 4870309.887833572,\n        },\n        {\n          x: 12975383.793644667,\n          y: 4870256.097796813,\n        },\n        {\n          x: 12975133.184359929,\n          y: 4870136.739612404,\n        },\n        {\n          x: 12974949.40711058,\n          y: 4870050.794763821,\n        },\n        {\n          x: 12974941.365436705,\n          y: 4870047.009858454,\n        },\n        {\n          x: 12974724.15676446,\n          y: 4869944.777526178,\n        },\n        {\n          x: 12974559.111049827,\n          y: 4869868.410730108,\n        },\n        {\n          x: 12974550.453614099,\n          y: 4869864.520617537,\n        },\n        {\n          x: 12974441.55043712,\n          y: 4869814.212693192,\n        },\n        {\n          x: 12974270.106768792,\n          y: 4869734.071269941,\n        },\n        {\n          x: 12974091.838388277,\n          y: 4869651.027056911,\n        },\n        {\n          x: 12973885.444597295,\n          y: 4869555.245051317,\n        },\n        {\n          x: 12973766.248404168,\n          y: 4869500.831533556,\n        },\n        {\n          x: 12973540.981958374,\n          y: 4869392.930468844,\n        },\n        {\n          x: 12973391.381564768,\n          y: 4869323.244557277,\n        },\n        {\n          x: 12973283.232700225,\n          y: 4869272.859937838,\n        },\n        {\n          x: 12972573.852092165,\n          y: 4868943.251794805,\n        },\n        {\n          x: 12970368.479611576,\n          y: 4867801.281579257,\n        },\n        {\n          x: 12970186.368543653,\n          y: 4867581.247939134,\n        },\n        {\n          x: 12970138.160652429,\n          y: 4867522.999803067,\n        },\n        {\n          x: 12970014.83652081,\n          y: 4867376.428914912,\n        },\n        {\n          x: 12969982.687756885,\n          y: 4867339.028822399,\n        },\n        {\n          x: 12969938.176704682,\n          y: 4867288.1582316635,\n        },\n        {\n          x: 12969884.318320546,\n          y: 4867223.8002079725,\n        },\n        {\n          x: 12969842.279029265,\n          y: 4867174.850547206,\n        },\n        {\n          x: 12969736.51761531,\n          y: 4867052.928304552,\n        },\n        {\n          x: 12969715.618553909,\n          y: 4867028.835423228,\n        },\n        {\n          x: 12969620.004793288,\n          y: 4866917.186788599,\n        },\n        {\n          x: 12969438.04374979,\n          y: 4866711.844669058,\n        },\n        {\n          x: 12969408.156057132,\n          y: 4866677.285747163,\n        },\n        {\n          x: 12969324.820910655,\n          y: 4866578.791680055,\n        },\n        {\n          x: 12969226.67533753,\n          y: 4866469.379122947,\n        },\n        {\n          x: 12968956.364812195,\n          y: 4866149.976631404,\n        },\n        {\n          x: 12968801.20089387,\n          y: 4865953.939934027,\n        },\n        {\n          x: 12968661.628187554,\n          y: 4865774.016041136,\n        },\n        {\n          x: 12968440.203180425,\n          y: 4865520.086029257,\n        },\n        {\n          x: 12968418.752663735,\n          y: 4865496.720383862,\n        },\n        {\n          x: 12968265.16366474,\n          y: 4865329.4158122465,\n        },\n        {\n          x: 12968082.376416814,\n          y: 4865118.794538391,\n        },\n        {\n          x: 12967977.74367467,\n          y: 4865003.326373822,\n        },\n        {\n          x: 12967875.580874648,\n          y: 4864890.602510729,\n        },\n        {\n          x: 12967828.859212246,\n          y: 4864840.529032915,\n        },\n        {\n          x: 12967771.529788392,\n          y: 4864773.642307851,\n        },\n        {\n          x: 12967754.0789727,\n          y: 4864752.1729925005,\n        },\n        {\n          x: 12967615.98897636,\n          y: 4864590.439552254,\n        },\n        {\n          x: 12967559.654778784,\n          y: 4864523.543494982,\n        },\n        {\n          x: 12967512.793535465,\n          y: 4864468.1316355625,\n        },\n        {\n          x: 12967489.97373297,\n          y: 4864440.960919648,\n        },\n        {\n          x: 12967391.600998314,\n          y: 4864324.055311191,\n        },\n        {\n          x: 12967258.997379664,\n          y: 4864167.803726059,\n        },\n        {\n          x: 12967157.800077152,\n          y: 4864048.489056851,\n        },\n        {\n          x: 12967072.064892631,\n          y: 4863952.160647396,\n        },\n        {\n          x: 12966932.938263306,\n          y: 4863786.109663975,\n        },\n        {\n          x: 12966772.422852328,\n          y: 4863597.399173657,\n        },\n        {\n          x: 12966615.568496268,\n          y: 4863412.808523439,\n        },\n        {\n          x: 12966305.336633127,\n          y: 4863047.703772259,\n        },\n        {\n          x: 12966269.190687215,\n          y: 4863001.279273752,\n        },\n        {\n          x: 12965833.711641828,\n          y: 4862475.155696717,\n        },\n        {\n          x: 12965806.851898653,\n          y: 4862442.704151941,\n        },\n        {\n          x: 12964858.528949967,\n          y: 4861327.4237803,\n        },\n        {\n          x: 12964224.475284964,\n          y: 4860561.038983111,\n        },\n        {\n          x: 12963811.623681322,\n          y: 4860051.71716615,\n        },\n        {\n          x: 12963154.244359475,\n          y: 4859240.959120094,\n        },\n        {\n          x: 12962659.851017611,\n          y: 4858630.950164011,\n        },\n        {\n          x: 12962035.08051321,\n          y: 4857953.39954861,\n        },\n        {\n          x: 12961929.533509394,\n          y: 4857864.163282811,\n        },\n        {\n          x: 12961663.821656032,\n          y: 4857639.499910775,\n        },\n        {\n          x: 12961465.562880669,\n          y: 4857485.1627320545,\n        },\n        {\n          x: 12961385.775293019,\n          y: 4857425.3359782435,\n        },\n      ],\n    },\n  ],\n};\nconst colors = [\n  \"rgb(64, 174, 247)\",\n  \"rgb(108, 207, 169)\",\n  \"rgb(157, 223, 125)\",\n  \"rgb(240, 198, 74)\",\n  \"rgb(221, 158, 97)\",\n  \"rgb(141, 163, 112)\",\n  \"rgb(115, 136, 220)\",\n  \"rgb(133, 88, 219)\",\n  \"rgb(203, 135, 226)\",\n  \"rgb(227, 137, 163)\",\n];\nconst { nodes } = data;\nconst { edges } = data;\nconst classMap = new Map();\nlet classId = 0;\nnodes.forEach(function (node) {\n  node.y = -node.y;\n});\nedges.forEach(function (edge) {\n  edge.id = `edge-${edge.id}`;\n  // edge cluster\n  if (edge.class && classMap.get(edge.class) === undefined) {\n    classMap.set(edge.class, classId);\n    classId++;\n  }\n  const cid = classMap.get(edge.class);\n  edge.color = colors[cid % colors.length];\n  const { controlPoints } = edge;\n\n  controlPoints.forEach(function (cp) {\n    cp.y = -cp.y;\n  });\n});\n\nexport { nodes, edges, data };\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/metro-lines/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport { nodes, edges, data } from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerNode(\n  \"breath-node\",\n  {\n    afterDraw(cfg, group) {\n      const r = cfg.size / 2;\n      const back1 = group.addShape(\"circle\", {\n        zIndex: -3,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color || (cfg.style && cfg.style.fill),\n          opacity: 0.6,\n        },\n        name: \"back1-shape\",\n      });\n      const back2 = group.addShape(\"circle\", {\n        zIndex: -2,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back2-shape\",\n      });\n      const back3 = group.addShape(\"circle\", {\n        zIndex: -1,\n        attrs: {\n          x: 0,\n          y: 0,\n          r,\n          fill: cfg.color,\n          opacity: 0.6,\n        },\n        name: \"back3-shape\",\n      });\n      group.sort();\n      const delayBase = Math.random() * 2000;\n      back1.animate(\n        {\n          r: r + 10,\n          opacity: 0.0,\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: delayBase,\n        },\n      );\n      back2.animate(\n        {\n          r: r + 10,\n          opacity: 0.0,\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: delayBase + 1000,\n        },\n      );\n      back3.animate(\n        {\n          r: r + 10,\n          opacity: 0.0,\n        },\n        {\n          repeat: true,\n          duration: 3000,\n          easing: \"easeCubic\",\n          delay: delayBase + 2000,\n        },\n      );\n    },\n  },\n  \"circle\",\n);\nF6.registerEdge(\n  \"running-polyline\",\n  {\n    afterDraw(cfg, group) {\n      const shape = group.get(\"children\")[0];\n      const length = shape.getTotalLength();\n      let circleCount = Math.ceil(length / 20);\n      circleCount = circleCount === 0 ? 1 : circleCount;\n\n      const _loop = function _loop(i) {\n        const delay = Math.random() * 1000;\n        const start = shape.getPoint(i / circleCount);\n        const circle = group.addShape(\"circle\", {\n          attrs: {\n            x: start.x,\n            y: start.y,\n            r: 0.8,\n            fill: \"#A0F3AF\",\n            shadowColor: \"#fff\",\n            shadowBlur: 30,\n          },\n          name: \"circle-shape\",\n        });\n        circle.animate(\n          (ratio) => {\n            ratio += i / circleCount;\n\n            if (ratio > 1) {\n              ratio %= 1;\n            }\n\n            const tmpPoint = shape.getPoint(ratio);\n            return {\n              x: tmpPoint.x,\n              y: tmpPoint.y,\n            };\n          },\n          {\n            repeat: true,\n            duration: 10 * length,\n            easing: \"easeCubic\",\n            delay,\n          },\n        );\n      };\n\n      for (let i = 0; i < circleCount; i++) {\n        _loop(i);\n      }\n    },\n  },\n  \"polyline\",\n);\n\nfunction scaleNodesPoints(nodes_, edges_, graphSize) {\n  const size = graphSize[0] < graphSize[1] ? graphSize[0] : graphSize[1];\n  let minX = 99999999999999999;\n  let maxX = -99999999999999999;\n  let minY = 99999999999999999;\n  let maxY = -99999999999999999;\n  nodes_.forEach(function (node) {\n    if (node.x > maxX) maxX = node.x;\n    if (node.x < minX) minX = node.x;\n    if (node.y > maxY) maxY = node.y;\n    if (node.y < minY) minY = node.y;\n  });\n  edges_.forEach(function (edge) {\n    const { controlPoints } = edge;\n    controlPoints.forEach(function (cp) {\n      if (cp.x > maxX) maxX = cp.x;\n      if (cp.x < minX) minX = cp.x;\n      if (cp.y > maxY) maxY = cp.y;\n      if (cp.y < minY) minY = cp.y;\n    });\n  });\n  const xScale = maxX - minX;\n  const yScale = maxY - minY;\n  nodes_.forEach(function (node) {\n    node.orix = node.x;\n    node.oriy = node.y;\n    node.x = ((node.x - minX) / xScale) * size;\n    node.y = ((node.y - minY) / yScale) * size;\n  });\n  edges_.forEach(function (edge) {\n    const { controlPoints } = edge;\n    controlPoints.forEach(function (cp) {\n      cp.x = ((cp.x - minX) / xScale) * size;\n      cp.y = ((cp.y - minY) / yScale) * size;\n    });\n  });\n}\n\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  linkCenter: true,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"edge-tooltip\",\n        formatText: function formatText(model) {\n          const text = model.class;\n          return text;\n        },\n      },\n    ],\n  },\n  defaultNode: {\n    type: \"breath-node\",\n    size: 3,\n    style: {\n      lineWidth: 0,\n      fill: \"rgb(240, 223, 83)\",\n    },\n  },\n  defaultEdge: {\n    type: \"running-polyline\",\n    size: 1,\n    color: \"rgb(14,142,63)\",\n    style: {\n      opacity: 0.8,\n      lineAppendWidth: 3,\n    },\n  },\n});\nconst graphSize = [500, 500];\nscaleNodesPoints(nodes, edges, graphSize);\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/mind-map/data.js",
    "content": "const rawData = {\n  label: \"Modeling Methods\",\n  id: \"0\",\n  children: [\n    {\n      label: \"Classification\",\n      id: \"0-1\",\n      color: \"#5AD8A6\",\n      children: [\n        {\n          label: \"Logistic regression\",\n          id: \"0-1-1\",\n        },\n        {\n          label: \"Linear discriminant analysis\",\n          id: \"0-1-2\",\n        },\n        {\n          label: \"Rules\",\n          id: \"0-1-3\",\n        },\n        {\n          label: \"Decision trees\",\n          id: \"0-1-4\",\n        },\n        {\n          label: \"Naive Bayes\",\n          id: \"0-1-5\",\n        },\n        {\n          label: \"K nearest neighbor\",\n          id: \"0-1-6\",\n        },\n        {\n          label: \"Probabilistic neural network\",\n          id: \"0-1-7\",\n        },\n        {\n          label: \"Support vector machine\",\n          id: \"0-1-8\",\n        },\n      ],\n    },\n    {\n      label: \"Consensus\",\n      id: \"0-2\",\n      color: \"#F6BD16\",\n      children: [\n        {\n          label: \"Models diversity\",\n          id: \"0-2-1\",\n          children: [\n            {\n              label: \"Different initializations\",\n              id: \"0-2-1-1\",\n            },\n            {\n              label: \"Different parameter choices\",\n              id: \"0-2-1-2\",\n            },\n            {\n              label: \"Different architectures\",\n              id: \"0-2-1-3\",\n            },\n            {\n              label: \"Different modeling methods\",\n              id: \"0-2-1-4\",\n            },\n            {\n              label: \"Different training sets\",\n              id: \"0-2-1-5\",\n            },\n            {\n              label: \"Different feature sets\",\n              id: \"0-2-1-6\",\n            },\n          ],\n        },\n        {\n          label: \"Methods\",\n          id: \"0-2-2\",\n          children: [\n            {\n              label: \"Classifier selection\",\n              id: \"0-2-2-1\",\n            },\n            {\n              label: \"Classifier fusion\",\n              id: \"0-2-2-2\",\n            },\n          ],\n        },\n        {\n          label: \"Common\",\n          id: \"0-2-3\",\n          children: [\n            {\n              label: \"Bagging\",\n              id: \"0-2-3-1\",\n            },\n            {\n              label: \"Boosting\",\n              id: \"0-2-3-2\",\n            },\n            {\n              label: \"AdaBoost\",\n              id: \"0-2-3-3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      label: \"Regression\",\n      id: \"0-3\",\n      color: \"#269A99\",\n      children: [\n        {\n          label: \"Multiple linear regression\",\n          id: \"0-3-1\",\n        },\n        {\n          label: \"Partial least squares\",\n          id: \"0-3-2\",\n        },\n        {\n          label: \"Multi-layer feedforward neural network\",\n          id: \"0-3-3\",\n        },\n        {\n          label: \"General regression neural network\",\n          id: \"0-3-4\",\n        },\n        {\n          label: \"Support vector regression\",\n          id: \"0-3-5\",\n        },\n      ],\n    },\n  ],\n};\n\nconst dataTransform = (data_) => {\n  const changeData = (d, level = 0, color) => {\n    const data = {\n      ...d,\n    };\n    switch (level) {\n      case 0:\n        data.type = \"dice-mind-map-root\";\n        break;\n      case 1:\n        data.type = \"dice-mind-map-sub\";\n        break;\n      default:\n        data.type = \"dice-mind-map-leaf\";\n        break;\n    }\n\n    data.hover = false;\n\n    if (color) {\n      data.color = color;\n    }\n\n    if (level === 1 && !d.direction) {\n      if (!d.direction) {\n        data.direction =\n          d.id.charCodeAt(d.id.length - 1) % 2 === 0 ? \"right\" : \"left\";\n      }\n    }\n\n    if (d.children) {\n      data.children = d.children.map((child) =>\n        changeData(child, level + 1, data.color),\n      );\n    }\n    return data;\n  };\n  return changeData(data_);\n};\n\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport result from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nconst { Util } = F6;\nF6.registerNode(\n  \"dice-mind-map-root\",\n  {\n    jsx: (cfg) => {\n      const width = Util.getTextSize(cfg.label, 16)[0] + 24;\n      const stroke = cfg.style.stroke || \"#096dd9\";\n      return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${width}, height: 42, stroke: ${stroke}, radius: 4}} keyshape>\n              <text style={{ fontSize: 16, marginLeft: 12, marginTop: 12 }}>${\n                cfg.label\n              }</text>\n              <text style={{ marginLeft: ${\n                width - 16\n              }, marginTop: -20, stroke: '#66ccff', fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              } }} action=\"add\">+</text>\n            </rect>\n          </group>\n        `;\n    },\n\n    getAnchorPoints() {\n      return [\n        [0, 0.5],\n        [1, 0.5],\n      ];\n    },\n  },\n  \"single-node\",\n);\nF6.registerNode(\n  \"dice-mind-map-sub\",\n  {\n    jsx: (cfg) => {\n      const width = Util.getTextSize(cfg.label, 14)[0] + 24;\n      const color = cfg.color || cfg.style.stroke;\n      return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${\n              width + 24\n            }, height: 22}} keyshape>\n              <text draggable=\"true\" style={{ fontSize: 14, marginLeft: 12, marginTop: 6 }}>${\n                cfg.label\n              }</text>\n              <text style={{ marginLeft: ${\n                width - 8\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"add\">+</text>\n              <text style={{ marginLeft: ${\n                width - 4\n              }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                cfg.hover ? 0.75 : 0\n              }, next: 'inline' }} action=\"delete\">-</text>\n            </rect>\n            <rect style={{ fill: ${color}, width: ${\n              width + 24\n            }, height: 2, x: 0, y: 22 }} />\n            \n          </group>\n        `;\n    },\n\n    getAnchorPoints() {\n      return [\n        [0, 0.965],\n        [1, 0.965],\n      ];\n    },\n  },\n  \"single-node\",\n);\nF6.registerNode(\n  \"dice-mind-map-leaf\",\n  {\n    jsx: (cfg) => {\n      const width = Util.getTextSize(cfg.label, 12)[0] + 24;\n      const color = cfg.color || cfg.style.stroke;\n      return `\n          <group>\n            <rect draggable=\"true\" style={{width: ${\n              width + 20\n            }, height: 26, fill: 'transparent' }}>\n              <text style={{ fontSize: 12, marginLeft: 12, marginTop: 6 }}>${\n                cfg.label\n              }</text>\n                  <text style={{ marginLeft: ${\n                    width - 8\n                  }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                    cfg.hover ? 0.75 : 0\n                  }, next: 'inline' }} action=\"add\">+</text>\n                  <text style={{ marginLeft: ${\n                    width - 4\n                  }, marginTop: -10, stroke: ${color}, fill: '#000', cursor: 'pointer', opacity: ${\n                    cfg.hover ? 0.75 : 0\n                  }, next: 'inline' }} action=\"delete\">-</text>\n            </rect>\n            <rect style={{ fill: ${color}, width: ${\n              width + 24\n            }, height: 2, x: 0, y: 32 }} />\n            \n          </group>\n        `;\n    },\n\n    getAnchorPoints() {\n      return [\n        [0, 0.965],\n        [1, 0.965],\n      ];\n    },\n  },\n  \"single-node\",\n);\nF6.registerBehavior(\"dice-mindmap\", {\n  getEvents() {\n    return {\n      \"node:click\": \"clickNode\",\n      \"node:dblclick\": \"editNode\",\n      \"node:mouseenter\": \"hoverNode\",\n      \"node:mouseleave\": \"hoverNodeOut\",\n    };\n  },\n\n  clickNode(evt) {\n    const name = evt.target.get(\"action\");\n\n    switch (name) {\n      case \"edit\":\n        break;\n\n      default:\n    }\n  },\n\n  editNode(evt) {\n    const { item } = evt;\n    const model = item.get(\"model\");\n    const { x, y } = item.calculateBBox();\n    const graph = evt.currentTarget;\n    const realPosition = evt.currentTarget.getClientByPoint(x, y);\n    const el = document.createElement(\"div\");\n    const fontSizeMap = {\n      \"dice-mind-map-root\": 24,\n      \"dice-mind-map-sub\": 18,\n      \"dice-mind-map-leaf\": 16,\n    };\n    el.style.fontSize = `${fontSizeMap[model.type]}px`;\n    el.style.position = \"fixed\";\n    el.style.top = `${realPosition.y}px`;\n    el.style.left = `${realPosition.x}px`;\n    el.style.paddingLeft = \"12px\";\n    el.style.transformOrigin = \"top left\";\n    el.style.transform = `scale(${evt.currentTarget.getZoom()})`;\n    const input = document.createElement(\"input\");\n    input.style.border = \"none\";\n    input.value = model.label;\n    input.style.width = `${\n      Util.getTextSize(model.label, fontSizeMap[model.type])[0]\n    }px`;\n    input.className = \"dice-input\";\n    el.className = \"dice-input\";\n    el.appendChild(input);\n    document.body.appendChild(el);\n\n    const destroyEl = () => {\n      document.body.removeChild(el);\n    };\n\n    const clickEvt = (event) => {\n      if (\n        !(\n          event.target &&\n          event.target.className &&\n          event.target.className.includes(\"dice-input\")\n        )\n      ) {\n        window.removeEventListener(\"mousedown\", clickEvt);\n        window.removeEventListener(\"scroll\", clickEvt);\n        graph.updateItem(item, {\n          label: input.value,\n        });\n        graph.layout(false);\n        graph.off(\"wheelZoom\", clickEvt);\n        destroyEl();\n      }\n    };\n\n    graph.on(\"wheelZoom\", clickEvt);\n    window.addEventListener(\"mousedown\", clickEvt);\n    window.addEventListener(\"scroll\", clickEvt);\n    input.addEventListener(\"keyup\", (event) => {\n      if (event.key === \"Enter\") {\n        clickEvt({\n          target: {},\n        });\n      }\n    });\n  },\n\n  hoverNode(evt) {\n    evt.currentTarget.updateItem(evt.item, {\n      hover: true,\n    });\n  },\n\n  hoverNodeOut(evt) {\n    evt.currentTarget.updateItem(evt.item, {\n      hover: false,\n    });\n  },\n});\nF6.registerBehavior(\"scroll-canvas\", {\n  getEvents: function getEvents() {\n    return {\n      wheel: \"onWheel\",\n    };\n  },\n  onWheel: function onWheel(ev) {\n    const { graph } = this;\n\n    if (!graph) {\n      return;\n    }\n\n    if (ev.ctrlKey) {\n      const canvas = graph.get(\"canvas\");\n      const point = canvas.getPointByClient(ev.clientX, ev.clientY);\n      let ratio = graph.getZoom();\n\n      if (ev.wheelDelta > 0) {\n        ratio += ratio * 0.05;\n      } else {\n        ratio *= ratio * 0.05;\n      }\n\n      graph.zoomTo(ratio, {\n        x: point.x,\n        y: point.y,\n      });\n    } else {\n      const x = ev.deltaX || ev.movementX;\n      const y = ev.deltaY || ev.movementY || (-ev.wheelDelta * 125) / 3;\n      graph.translate(-x, -y);\n    }\n\n    ev.preventDefault();\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  fitViewPadding: [10, 20],\n  layout: {\n    type: \"mindmap\",\n    direction: \"H\",\n    getHeight: () => {\n      return 16;\n    },\n    getWidth: (node) => {\n      return node.level === 0\n        ? F6.Util.getTextSize(node.label, 16)[0] + 12\n        : F6.Util.getTextSize(node.label, 12)[0];\n    },\n    getVGap: () => {\n      return 10;\n    },\n    getHGap: () => {\n      return 60;\n    },\n    getSide: (node) => {\n      return node.data.direction;\n    },\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      lineWidth: 2,\n    },\n  },\n  minZoom: 0.5,\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\", \"dice-mindmap\"],\n  },\n});\ngraph.data(result);\ngraph.render();\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/sankey/data.js",
    "content": "const colorArr = [\n  \"#5B8FF9\",\n  \"#5AD8A6\",\n  \"#5D7092\",\n  \"#F6BD16\",\n  \"#6F5EF9\",\n  \"#6DC8EC\",\n  \"#D3EEF9\",\n  \"#DECFEA\",\n  \"#FFE0C7\",\n  \"#1E9493\",\n  \"#BBDEDE\",\n  \"#FF99C3\",\n  \"#FFE0ED\",\n  \"#CDDDFD\",\n  \"#CDF3E4\",\n  \"#CED4DE\",\n  \"#FCEBB9\",\n  \"#D3CEFD\",\n  \"#945FB9\",\n  \"#FF9845\",\n];\n\nconst rawData = [\n  {\n    label: \"A\",\n    id: \"A\",\n    to: [\n      {\n        target: \"C\",\n        value: 200,\n      },\n    ],\n  },\n  {\n    label: \"B\",\n    id: \"B\",\n    to: [\n      {\n        target: \"C\",\n        value: 400,\n      },\n    ],\n  },\n  {\n    label: \"C\",\n    id: \"C\",\n    to: [\n      {\n        target: \"D\",\n        value: 300,\n      },\n      {\n        target: \"E\",\n        value: 300,\n      },\n    ],\n  },\n  {\n    label: \"D\",\n    id: \"D\",\n    to: [\n      {\n        target: \"F\",\n        value: 100,\n      },\n      {\n        target: \"G\",\n        value: 200,\n      },\n    ],\n  },\n  {\n    label: \"E\",\n    id: \"E\",\n    to: [\n      {\n        target: \"F\",\n        value: 200,\n      },\n      {\n        target: \"G\",\n        value: 100,\n      },\n    ],\n  },\n  {\n    label: \"F\",\n    id: \"F\",\n  },\n  {\n    label: \"G\",\n    id: \"G\",\n  },\n];\n\nconst dataTransform = (data) => {\n  const nodes = [];\n  const edges = [];\n  const nodeRecvMap = {};\n\n  data.forEach((node, i) => {\n    const { id, label, color = colorArr[i % colorArr.length], to = [] } = node;\n\n    let index = 0;\n    to.forEach((rel) => {\n      edges.push({\n        source: id,\n        target: rel.target,\n        value: rel.value,\n        color,\n        sourceIndex: index,\n        targetIndex: nodeRecvMap[rel.target] || 0,\n      });\n      index += rel.value || 0;\n      if (rel.value) {\n        nodeRecvMap[rel.target] = (nodeRecvMap[rel.target] || 0) + rel.value;\n      }\n    });\n    nodes.push({\n      id,\n      label,\n      color,\n      outSize: index,\n    });\n  });\n\n  nodes.forEach((node) => {\n    node.inSize = nodeRecvMap[node.id] || 0;\n    node.size = [4, Math.max(4, node.inSize, node.outSize)];\n  });\n\n  return {\n    nodes,\n    edges,\n  };\n};\nconst result = dataTransform(rawData);\nexport default result;\n"
  },
  {
    "path": "packages/site/examples/demo/scene-case/sankey/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport result from \"./data\";\nimport dagreLayout from \"@antv/f6/dist/extends/layout/dagreLayout\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerLayout(\"dagre\", dagreLayout);\nF6.registerNode(\n  \"dice-sankey-node\",\n  {\n    jsx: (cfg) => `\n        <group>\n          <rect style={{ width: ${cfg.size[0]}, height: ${cfg.size[1]}, fill: ${cfg.color} }} />\n          <text style={{ marginLeft: 6, marginTop: 24,  fill: #333, stroke: ${cfg.color}, lineWidth: 2, fontSize: 24 }}>${cfg.label} ${cfg.size[1]}</text>\n        </group>\n      `,\n\n    getAnchorPoints() {\n      return [[0, 0]];\n    },\n  },\n  \"single-node\",\n);\nF6.registerEdge(\"dice-sankey-edge\", {\n  draw(cfg, group) {\n    const { startPoint, endPoint, color } = cfg;\n    const deltaY1 = Number(cfg.sourceIndex);\n    const deltaY2 = Number(cfg.sourceIndex) + Number(cfg.value);\n    const deltaY3 = Number(cfg.targetIndex);\n    const deltaY4 = Number(cfg.targetIndex) + Number(cfg.value);\n    const quaterX = (Math.abs(endPoint.x - startPoint.x) / 5) * 3;\n    return group.addShape(\"path\", {\n      attrs: {\n        fill: color,\n        opacity: 0.6,\n        path: [\n          [\"M\", startPoint.x, startPoint.y + deltaY1],\n          [\n            \"C\",\n            endPoint.x - quaterX,\n            startPoint.y + deltaY1,\n            startPoint.x + quaterX,\n            endPoint.y + deltaY3,\n            endPoint.x,\n            endPoint.y + deltaY3,\n          ],\n          [\"L\", endPoint.x, endPoint.y + deltaY4],\n          [\n            \"C\",\n            startPoint.x + quaterX,\n            endPoint.y + deltaY4,\n            endPoint.x - quaterX,\n            startPoint.y + deltaY2,\n            startPoint.x,\n            startPoint.y + deltaY2,\n          ],\n          [\"L\", startPoint.x, startPoint.y + deltaY1],\n          [\"Z\"],\n        ],\n      },\n    });\n  },\n});\nconst graph = new F6.Graph({\n  width,\n  height,\n  pixelRatio,\n  defaultNode: {\n    type: \"dice-sankey-node\",\n  },\n  defaultEdge: {\n    type: \"dice-sankey-edge\",\n  },\n  fitView: true,\n  fitViewPadding: 60,\n  layout: {\n    type: \"dagre\",\n    rankdir: \"LR\",\n    nodesep: 10,\n    ranksep: 130,\n    align: \"ul\",\n  },\n});\ngraph.data(result);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/basic-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/basic-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const model = item.getModel();\n          model.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"dendrogram\",\n    direction: \"LR\",\n    nodeSep: 30,\n    rankSep: 100,\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n  },\n});\ngraph.node(function (node) {\n  return {\n    label: node.id,\n    labelCfg: {\n      offset: 5,\n      position: node.children && node.children.length > 0 ? \"left\" : \"right\",\n    },\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        { id: \"Logistic regression\" },\n        { id: \"Linear discriminant analysis\" },\n        { id: \"Rules\" },\n        { id: \"Decision trees\" },\n        { id: \"Naive Bayes\" },\n        { id: \"K nearest neighbor\" },\n        { id: \"Probabilistic neural network\" },\n        { id: \"Support vector machine\" },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            { id: \"Different initializations\" },\n            { id: \"Different parameter choices\" },\n            { id: \"Different architectures\" },\n            { id: \"Different modeling methods\" },\n            { id: \"Different training sets\" },\n            { id: \"Different feature sets\" },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            { id: \"Classifier selection\" },\n            { id: \"Classifier fusion\" },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [{ id: \"Bagging\" }, { id: \"Boosting\" }, { id: \"AdaBoost\" }],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        { id: \"Multiple linear regression\" },\n        { id: \"Partial least squares\" },\n        { id: \"Multi-layer feedforward neural network\" },\n        { id: \"General regression neural network\" },\n        { id: \"Support vector regression\" },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/compact-box/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data.js\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const model = item.getModel();\n          model.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n  },\n});\ngraph.node(function (node) {\n  return {\n    label: node.id,\n    labelCfg: {\n      offset: 10,\n      position: node.children && node.children.length > 0 ? \"left\" : \"right\",\n    },\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/compact-box-left-align/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/compact-box-left-align/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data.js\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nF6.registerNode(\"crect\", {\n  draw: (cfg, group) => {\n    const width = cfg.id.length * 10;\n    const rect = group.addShape(\"rect\", {\n      attrs: {\n        x: 0,\n        y: -10,\n        ...cfg.style,\n        width,\n        height: 20,\n        lineWidth: 0,\n        opacity: 0,\n      },\n      name: \"rect-shape\",\n      draggable: true,\n    });\n    const label = group.addShape(\"text\", {\n      attrs: {\n        text: cfg.id,\n        fill: \"#ccc\",\n        fontSize,\n        x: 0,\n        y: 0,\n      },\n      name: \"label-shape\",\n      draggable: true,\n    });\n    const bboxWidth = label.getBBox().width + 20;\n    rect.attr({\n      width: bboxWidth,\n    });\n    group.addShape(\"path\", {\n      attrs: {\n        lineWidth: 1,\n        fill: \"#ccc\",\n        stroke: \"#ccc\",\n        path: [\n          [\"M\", 0, 0],\n          [\"L\", bboxWidth, 0],\n        ],\n      },\n      name: \"path-shape\",\n      draggable: true,\n    });\n    return rect;\n  },\n  getAnchorPoints: () => {\n    return [\n      [0, 0.5],\n      [1, 0.5],\n    ];\n  },\n});\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"collapse-expand\", \"drag-canvas\", \"zoom-canvas\"],\n  },\n  defaultNode: {\n    type: \"crect\",\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      stroke: \"#A3B1BF\",\n    },\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n    getWidth: function getWidth(d) {\n      return F6.Util.getTextSize(d.id, fontSize)[0] + 20;\n    },\n  },\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/custom-edge-tree/data.js",
    "content": "export default {\n  id: \"root\",\n  label: \"root\",\n  children: [\n    {\n      id: \"c1\",\n      label: \"c1\",\n      children: [\n        {\n          id: \"c1-1\",\n          label: \"c1-1\",\n        },\n        {\n          id: \"c1-2\",\n          label: \"c1-2\",\n          children: [\n            {\n              id: \"c1-2-1\",\n              label: \"c1-2-1\",\n            },\n            {\n              id: \"c1-2-2\",\n              label: \"c1-2-2\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"c2\",\n      label: \"c2\",\n    },\n    {\n      id: \"c3\",\n      label: \"c3\",\n      children: [\n        {\n          id: \"c3-1\",\n          label: \"c3-1\",\n        },\n        {\n          id: \"c3-2\",\n          label: \"c3-2\",\n          children: [\n            {\n              id: \"c3-2-1\",\n              label: \"c3-2-1\",\n            },\n            {\n              id: \"c3-2-2\",\n              label: \"c3-2-2\",\n            },\n            {\n              id: \"c3-2-3\",\n              label: \"c3-2-3\",\n            },\n          ],\n        },\n        {\n          id: \"c3-3\",\n          label: \"c3-3\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/custom-edge-tree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\n\nconst COLLAPSE_ICON = function COLLAPSE_ICON(x, y, r) {\n  return [\n    [\"M\", x - r, y - r],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x + 2 - r, y - r],\n    [\"L\", x + r - 2, y - r],\n  ];\n};\n\nconst EXPAND_ICON = function EXPAND_ICON(x, y, r) {\n  return [\n    [\"M\", x - r, y - r],\n    [\"a\", r, r, 0, 1, 0, r * 2, 0],\n    [\"a\", r, r, 0, 1, 0, -r * 2, 0],\n    [\"M\", x + 2 - r, y - r],\n    [\"L\", x + r - 2, y - r],\n    [\"M\", x, y - 2 * r + 2],\n    [\"L\", x, y - 2],\n  ];\n};\n\nF6.Util.traverseTree(data, (d) => {\n  d.leftIcon = {\n    style: {\n      fill: \"#e6fffb\",\n      stroke: \"#e6fffb\",\n    },\n    img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\",\n  };\n  return true;\n});\nF6.registerNode(\n  \"icon-node\",\n  {\n    options: {\n      size: [60, 20],\n      stroke: \"#91d5ff\",\n      fill: \"#91d5ff\",\n    },\n\n    draw(cfg, group) {\n      const styles = this.getShapeStyle(cfg);\n      const { labelCfg = {} } = cfg;\n      const w = styles.width;\n      const h = styles.height;\n      const keyShape = group.addShape(\"rect\", {\n        attrs: { ...styles, x: -w / 2, y: -h / 2 },\n      });\n      console.log(\"cfg.leftIcon\", cfg.leftIcon);\n\n      if (cfg.leftIcon) {\n        const { style, img } = cfg.leftIcon;\n        group.addShape(\"rect\", {\n          attrs: {\n            x: 1 - w / 2,\n            y: 1 - h / 2,\n            width: 38,\n            height: styles.height - 2,\n            fill: \"#8c8c8c\",\n            ...style,\n          },\n        });\n        group.addShape(\"image\", {\n          attrs: {\n            x: 8 - w / 2,\n            y: 8 - h / 2,\n            width: 24,\n            height: 24,\n            img:\n              img ||\n              \"https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png\",\n          },\n          name: \"image-shape\",\n        });\n      }\n\n      group.addShape(\"marker\", {\n        attrs: {\n          x: 40 - w / 2,\n          y: 52 - h / 2,\n          r: 6,\n          stroke: \"#73d13d\",\n          cursor: \"pointer\",\n          symbol: EXPAND_ICON,\n        },\n        name: \"add-item\",\n      });\n      group.addShape(\"marker\", {\n        attrs: {\n          x: 80 - w / 2,\n          y: 52 - h / 2,\n          r: 6,\n          stroke: \"#ff4d4f\",\n          cursor: \"pointer\",\n          symbol: COLLAPSE_ICON,\n        },\n        name: \"remove-item\",\n      });\n\n      if (cfg.label) {\n        group.addShape(\"text\", {\n          attrs: {\n            ...labelCfg.style,\n            text: cfg.label,\n            x: 50 - w / 2,\n            y: 25 - h / 2,\n          },\n        });\n      }\n\n      return keyShape;\n    },\n\n    update: undefined,\n  },\n  \"rect\",\n);\nF6.registerEdge(\"flow-line\", {\n  draw(cfg, group) {\n    const { startPoint } = cfg;\n    const { endPoint } = cfg;\n    const { style } = cfg;\n    const shape = group.addShape(\"path\", {\n      attrs: {\n        stroke: style.stroke,\n        endArrow: style.endArrow,\n        path: [\n          [\"M\", startPoint.x, startPoint.y],\n          [\"L\", startPoint.x, (startPoint.y + endPoint.y) / 2],\n          [\"L\", endPoint.x, (startPoint.y + endPoint.y) / 2],\n          [\"L\", endPoint.x, endPoint.y],\n        ],\n      },\n    });\n    return shape;\n  },\n});\nconst defaultStateStyles = {\n  hover: {\n    stroke: \"#1890ff\",\n    lineWidth: 2,\n  },\n};\nconst defaultNodeStyle = {\n  fill: \"#91d5ff\",\n  stroke: \"#40a9ff\",\n  radius: 5,\n};\nconst defaultEdgeStyle = {\n  stroke: \"#91d5ff\",\n  endArrow: {\n    path: \"M 0,0 L 12, 6 L 9,0 L 12, -6 Z\",\n    fill: \"#91d5ff\",\n    d: -20,\n  },\n};\nconst defaultLayout = {\n  type: \"compactBox\",\n  direction: \"TB\",\n  getId: function getId(d) {\n    return d.id;\n  },\n  getHeight: function getHeight() {\n    return 16;\n  },\n  getWidth: function getWidth() {\n    return 16;\n  },\n  getVGap: function getVGap() {\n    return 40;\n  },\n  getHGap: function getHGap() {\n    return 70;\n  },\n};\nconst defaultLabelCfg = {\n  style: {\n    fill: \"#000\",\n    fontSize: 12,\n  },\n};\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\", \"zoom-canvas\"],\n  },\n  defaultNode: {\n    type: \"icon-node\",\n    size: [120, 40],\n    style: defaultNodeStyle,\n    labelCfg: defaultLabelCfg,\n  },\n  defaultEdge: {\n    type: \"flow-line\",\n    style: defaultEdgeStyle,\n  },\n  nodeStateStyles: defaultStateStyles,\n  edgeStateStyles: defaultStateStyles,\n  layout: defaultLayout,\n});\ngraph.on(\"node:tap\", (evt) => {\n  const { item, target } = evt;\n  const targetType = target.get(\"type\");\n  const name = target.get(\"name\");\n\n  if (targetType === \"marker\") {\n    const model = item.getModel();\n\n    if (name === \"add-item\") {\n      if (!model.children) {\n        model.children = [];\n      }\n\n      const id = `n-${Math.random()}`;\n      model.children.push({\n        id,\n        label: id.substr(0, 8),\n        leftIcon: {\n          style: {\n            fill: \"#e6fffb\",\n            stroke: \"#e6fffb\",\n          },\n          img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ\",\n        },\n      });\n      graph.updateChild(model, model.id);\n    } else if (name === \"remove-item\") {\n      graph.removeChild(model.id);\n    }\n  }\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/custom-side-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/custom-side-mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"mindmap\",\n    direction: \"H\",\n    getHeight: () => {\n      return 16;\n    },\n    getWidth: () => {\n      return 16;\n    },\n    getVGap: () => {\n      return 10;\n    },\n    getHGap: () => {\n      return 50;\n    },\n    getSide: (d) => {\n      if (d.id === \"Classification\") {\n        return \"left\";\n      }\n\n      return \"right\";\n    },\n  },\n});\nlet centerX = 0;\ngraph.node(function (node) {\n  if (node.id === \"Modeling Methods\") {\n    centerX = node.x;\n  }\n\n  let pos = \"\";\n\n  if (node.children && node.children.length > 0) {\n    pos = \"right\";\n  } else if (node.x > centerX) pos = \"right\";\n  else pos = \"left\";\n\n  return {\n    label: node.id,\n    labelCfg: {\n      position: pos,\n      offset: 5,\n    },\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/custom-tree/data.js",
    "content": "export default {\n  name: \"Modeling Methods\",\n  children: [\n    {\n      name: \"Classification\",\n      children: [\n        {\n          name: \"Logistic regression\",\n        },\n        {\n          name: \"Linear discriminant analysis\",\n        },\n        {\n          name: \"Rules\",\n        },\n        {\n          name: \"Decision trees\",\n        },\n        {\n          name: \"Naive Bayes\",\n        },\n        {\n          name: \"K nearest neighbor\",\n        },\n        {\n          name: \"Probabilistic neural network\",\n        },\n        {\n          name: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      name: \"Consensus\",\n      children: [\n        {\n          name: \"Models diversity\",\n          children: [\n            {\n              name: \"Different initializations\",\n            },\n            {\n              name: \"Different parameter choices\",\n            },\n            {\n              name: \"Different architectures\",\n            },\n            {\n              name: \"Different modeling methods\",\n            },\n            {\n              name: \"Different training sets\",\n            },\n            {\n              name: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          name: \"Methods\",\n          children: [\n            {\n              name: \"Classifier selection\",\n            },\n            {\n              name: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          name: \"Common\",\n          children: [\n            {\n              name: \"Bagging\",\n            },\n            {\n              name: \"Boosting\",\n            },\n            {\n              name: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      name: \"Regression\",\n      children: [\n        {\n          name: \"Multiple linear regression\",\n        },\n        {\n          name: \"Partial least squares\",\n        },\n        {\n          name: \"Multi-layer feedforward neural network\",\n        },\n        {\n          name: \"General regression neural network\",\n        },\n        {\n          name: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/custom-tree/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nF6.registerNode(\n  \"tree-node\",\n  {\n    drawShape: function drawShape(cfg, group) {\n      const rect = group.addShape(\"rect\", {\n        attrs: {\n          fill: \"#fff\",\n          stroke: \"#666\",\n          x: 0,\n          y: 0,\n          width: 1,\n          height: 1,\n        },\n        name: \"rect-shape\",\n      });\n      const content = cfg.name.replace(/(.{19})/g, \"$1\\n\");\n      const text = group.addShape(\"text\", {\n        attrs: {\n          text: content,\n          x: 0,\n          y: 0,\n          textAlign: \"left\",\n          textBaseline: \"middle\",\n          fill: \"#666\",\n        },\n        name: \"text-shape\",\n      });\n      const bbox = text.getBBox();\n      const hasChildren = cfg.children && cfg.children.length > 0;\n      rect.attr({\n        x: -bbox.width / 2 - 4,\n        y: -bbox.height / 2 - 6,\n        width: bbox.width + (hasChildren ? 26 : 12),\n        height: bbox.height + 12,\n      });\n      text.attr({\n        x: -bbox.width / 2,\n        y: 0,\n      });\n\n      if (hasChildren) {\n        group.addShape(\"marker\", {\n          attrs: {\n            x: bbox.width / 2 + 12,\n            y: 0,\n            r: 6,\n            symbol: cfg.collapsed ? F6.Marker.expand : F6.Marker.collapse,\n            stroke: \"#666\",\n            lineWidth: 2,\n          },\n          name: \"collapse-icon\",\n        });\n      }\n\n      return rect;\n    },\n    update: (cfg, item) => {\n      const group = item.getContainer();\n      const icon = group.find((e) => e.get(\"name\") === \"collapse-icon\");\n      icon.attr(\n        \"symbol\",\n        cfg.collapsed ? F6.Marker.expand : F6.Marker.collapse,\n      );\n    },\n  },\n  \"single-node\",\n);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          graph.updateItem(item, {\n            collapsed,\n          });\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    type: \"tree-node\",\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      stroke: \"#A3B1BF\",\n    },\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 20;\n    },\n    getHGap: function getHGap() {\n      return 80;\n    },\n  },\n});\nF6.Util.traverseTree(data_, function (item) {\n  item.id = item.name;\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/file-system/data.js",
    "content": "export default {\n  id: \"1\",\n  name: \"src\",\n  children: [\n    {\n      id: \"1-1\",\n      name: \"behavior\",\n      children: [],\n    },\n    {\n      id: \"1-3\",\n      name: \"graph\",\n      children: [\n        {\n          id: \"1-3-1\",\n          name: \"controller\",\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"1-5\",\n      name: \"item\",\n      children: [],\n    },\n    {\n      id: \"1-6\",\n      name: \"shape\",\n      children: [\n        {\n          id: \"1-6-2\",\n          name: \"extend\",\n          children: [],\n        },\n      ],\n    },\n    {\n      id: \"1-7\",\n      name: \"util\",\n      children: [],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/file-system/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nF6.registerNode(\"file-node\", {\n  draw: function draw(cfg, group) {\n    const keyShape = group.addShape(\"rect\", {\n      attrs: {\n        x: 10,\n        y: -12,\n        fill: \"#fff\",\n        stroke: null,\n      },\n    });\n    let isLeaf = false;\n\n    if (cfg.collapsed) {\n      group.addShape(\"marker\", {\n        attrs: {\n          symbol: \"triangle\",\n          x: 4,\n          y: -2,\n          r: 4,\n          fill: \"#666\",\n        },\n        name: \"marker-shape\",\n      });\n    } else if (cfg.children && cfg.children.length > 0) {\n      group.addShape(\"marker\", {\n        attrs: {\n          symbol: \"triangle-down\",\n          x: 4,\n          y: -2,\n          r: 4,\n          fill: \"#666\",\n        },\n        name: \"marker-shape\",\n      });\n    } else {\n      isLeaf = true;\n    }\n\n    const shape = group.addShape(\"text\", {\n      attrs: {\n        x: 15,\n        y: 4,\n        text: cfg.name,\n        fill: \"#666\",\n        fontSize: 16,\n        textAlign: \"left\",\n        fontFamily:\n          typeof window !== \"undefined\"\n            ? window\n                .getComputedStyle(document.body, null)\n                .getPropertyValue(\"font-family\") || \"Arial, sans-serif\"\n            : \"Arial, sans-serif\",\n      },\n      name: \"text-shape\",\n    });\n    const bbox = shape.getBBox();\n    let backRectW = bbox.width;\n    let backRectX = keyShape.attr(\"x\");\n\n    if (!isLeaf) {\n      backRectW += 8;\n      backRectX -= 15;\n    }\n\n    keyShape.attr({\n      width: backRectW,\n      height: bbox.height + 4,\n      x: backRectX,\n    });\n    return keyShape;\n  },\n});\nF6.registerEdge(\n  \"step-line\",\n  {\n    getControlPoints: function getControlPoints(cfg) {\n      const { startPoint } = cfg;\n      const { endPoint } = cfg;\n      return [\n        startPoint,\n        {\n          x: startPoint.x,\n          y: endPoint.y,\n        },\n        endPoint,\n      ];\n    },\n  },\n  \"polyline\",\n);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        animate: false,\n        onChange: function onChange(item, collapsed) {\n          const model = item.getModel();\n          model.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultEdge: {\n    style: {\n      stroke: \"#A3B1BF\",\n    },\n  },\n  layout: {\n    type: \"indented\",\n    isHorizontal: true,\n    direction: \"LR\",\n    indent: 30,\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n  },\n});\nlet centerX = 0;\ngraph.node(function (node) {\n  if (node.id === \"Modeling Methods\") {\n    centerX = node.x;\n  }\n\n  let position_value = null;\n\n  if (node.children && node.children.length > 0) {\n    position_value = \"left\";\n  } else if (node.x > centerX) position_value = \"right\";\n  else position_value = \"left\";\n\n  return {\n    label: node.id,\n    labelCfg: {\n      offset: 5,\n      position: position_value,\n    },\n  };\n});\ngraph.node((node) => {\n  return {\n    type: \"file-node\",\n    label: node.name,\n  };\n});\ngraph.edge(() => {\n  return {\n    type: \"step-line\",\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/intend-align-top/data.js",
    "content": "export default {\n  id: \"A\",\n  children: [\n    {\n      id: \"A1\",\n      children: [{ id: \"A11\" }, { id: \"A12\" }, { id: \"A13\" }, { id: \"A14\" }],\n    },\n    {\n      id: \"A2\",\n      children: [\n        {\n          id: \"A21\",\n          children: [{ id: \"A211\" }, { id: \"A212\" }],\n        },\n        {\n          id: \"A22\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/intend-align-top/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nF6.registerNode(\"card-node\", {\n  draw: function drawShape(cfg, group) {\n    const r = 2;\n    const color = \"#5B8FF9\";\n    const w = cfg.size[0];\n    const h = cfg.size[1];\n    const shape = group.addShape(\"rect\", {\n      attrs: {\n        x: -w / 2,\n        y: -h / 2,\n        width: w,\n        height: h,\n        stroke: color,\n        radius: r,\n        fill: \"#fff\",\n      },\n      name: \"main-box\",\n      draggable: true,\n    });\n    group.addShape(\"rect\", {\n      attrs: {\n        x: -w / 2,\n        y: -h / 2,\n        width: w,\n        height: h / 2,\n        fill: color,\n        radius: [r, r, 0, 0],\n      },\n      name: \"title-box\",\n      draggable: true,\n    });\n    group.addShape(\"text\", {\n      attrs: {\n        textBaseline: \"top\",\n        x: -w / 2 + 8,\n        y: -h / 2 + 2,\n        lineHeight: 20,\n        text: cfg.id,\n        fill: \"#fff\",\n      },\n      name: \"title\",\n    });\n    cfg.children &&\n      group.addShape(\"marker\", {\n        attrs: {\n          x: w / 2,\n          y: 0,\n          r: 6,\n          cursor: \"pointer\",\n          symbol: F6.Marker.collapse,\n          stroke: \"#666\",\n          lineWidth: 1,\n          fill: \"#fff\",\n        },\n        name: \"collapse-icon\",\n      });\n    group.addShape(\"text\", {\n      attrs: {\n        textBaseline: \"top\",\n        x: -w / 2 + 8,\n        y: -h / 2 + 24,\n        lineHeight: 20,\n        text: \"description\",\n        fill: \"rgba(0,0,0, 1)\",\n      },\n      name: `description`,\n    });\n    return shape;\n  },\n\n  setState(name, value, item) {\n    if (name === \"collapsed\") {\n      const marker = item\n        .get(\"group\")\n        .find((ele) => ele.get(\"name\") === \"collapse-icon\");\n      const icon = value ? F6.Marker.expand : F6.Marker.collapse;\n      marker.attr(\"symbol\", icon);\n    }\n  },\n});\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultNode: {\n    type: \"card-node\",\n    size: [100, 40],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n    style: {\n      endArrow: true,\n    },\n  },\n  layout: {\n    type: \"indented\",\n    direction: \"LR\",\n    dropCap: false,\n    indent: 200,\n    getHeight: () => {\n      return 60;\n    },\n  },\n});\ngraph.on(\"node:tap\", (e) => {\n  if (e.target.get(\"name\") === \"collapse-icon\") {\n    e.item.getModel().collapsed = !e.item.getModel().collapsed;\n    graph.setItemState(e.item, \"collapsed\", e.item.getModel().collapsed);\n    graph.layout();\n  }\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/intended/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/intended/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\"drag-canvas\"],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"indented\",\n    direction: \"H\",\n    indent: 80,\n    getHeight: () => {\n      return 10;\n    },\n    getWidth: () => {\n      return 10;\n    },\n    getSide: (d) => {\n      if (d.id === \"Regression\" || d.id === \"Classification\") return \"left\";\n      return \"right\";\n    },\n  },\n});\nlet centerX = 0;\ngraph.node(function (node) {\n  if (node.id === \"Modeling Methods\") {\n    centerX = node.x;\n  }\n\n  let pos = \"\";\n\n  if (node.children && node.children.length > 0) {\n    pos = \"left\";\n  } else if (node.x > centerX) pos = \"right\";\n  else pos = \"left\";\n\n  return {\n    label: node.id,\n    labelCfg: {\n      position: pos,\n      offset: 5,\n    },\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/left-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/left-mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"mindmap\",\n    direction: \"H\",\n    getHeight: () => {\n      return 16;\n    },\n    getWidth: () => {\n      return 16;\n    },\n    getVGap: () => {\n      return 10;\n    },\n    getHGap: () => {\n      return 100;\n    },\n    getSide: () => {\n      return \"left\";\n    },\n  },\n});\nlet centerX = 0;\ngraph.node(function (node) {\n  if (node.id === \"Modeling Methods\") {\n    centerX = node.x;\n  }\n\n  let pos = \"\";\n\n  if (node.children && node.children.length > 0) {\n    pos = \"right\";\n  } else if (node.x > centerX) pos = \"right\";\n  else pos = \"left\";\n\n  return {\n    label: node.id,\n    labelCfg: {\n      position: pos,\n      offset: 5,\n    },\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const model = item.getModel();\n          model.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"mindmap\",\n    direction: \"H\",\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 50;\n    },\n  },\n});\nlet centerX = 0;\ngraph.node(function (node) {\n  if (node.id === \"Modeling Methods\") {\n    centerX = node.x;\n  }\n\n  let position_value = null;\n\n  if (node.children && node.children.length > 0) {\n    position_value = \"left\";\n  } else if (node.x > centerX) position_value = \"right\";\n  else position_value = \"left\";\n\n  return {\n    label: node.id,\n    labelCfg: {\n      offset: 5,\n      position: position_value,\n    },\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/radial-compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/radial-compact-box/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"RL\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: () => {\n      return 26;\n    },\n    getWidth: () => {\n      return 26;\n    },\n    getVGap: () => {\n      return 20;\n    },\n    getHGap: () => {\n      return 30;\n    },\n    radial: true,\n  },\n});\ngraph.node(function (node) {\n  return {\n    label: node.id,\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/radial-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/radial-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data from \"./data\";\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const model = item.getModel();\n          model.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n  },\n  layout: {\n    type: \"dendrogram\",\n    direction: \"LR\",\n    nodeSep: 20,\n    rankSep: 100,\n    radial: true,\n  },\n});\ngraph.node(function (node) {\n  return {\n    label: node.id,\n  };\n});\ngraph.data(data);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/right-mind-map/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/right-mind-map/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-horizontal\",\n  },\n  layout: {\n    type: \"mindmap\",\n    direction: \"H\",\n    getHeight: () => {\n      return 16;\n    },\n    getWidth: () => {\n      return 16;\n    },\n    getVGap: () => {\n      return 10;\n    },\n    getHGap: () => {\n      return 100;\n    },\n    getSide: () => {\n      return \"right\";\n    },\n  },\n});\nlet centerX = 0;\ngraph.node(function (node) {\n  if (node.id === \"Modeling Methods\") {\n    centerX = node.x;\n  }\n\n  let pos = \"\";\n\n  if (node.children && node.children.length > 0) {\n    pos = \"right\";\n  } else if (node.x > centerX) pos = \"right\";\n  else pos = \"left\";\n\n  return {\n    label: node.id,\n    labelCfg: {\n      position: pos,\n      offset: 5,\n    },\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/tb-compact-box/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/tb-compact-box/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data.js\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  linkCenter: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.getModel();\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-vertical\",\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"TB\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 80;\n    },\n    getHGap: function getHGap() {\n      return 20;\n    },\n  },\n});\ngraph.node(function (node) {\n  let position = \"right\";\n  let rotate = 0;\n\n  if (!node.children) {\n    position = \"bottom\";\n    rotate = Math.PI / 2;\n  }\n\n  return {\n    label: node.id,\n    labelCfg: {\n      position,\n      offset: 5,\n      style: {\n        rotate,\n        textAlign: \"start\",\n      },\n    },\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/tb-dendrogram/data.js",
    "content": "export default {\n  id: \"Modeling Methods\",\n  children: [\n    {\n      id: \"Classification\",\n      children: [\n        {\n          id: \"Logistic regression\",\n        },\n        {\n          id: \"Linear discriminant analysis\",\n        },\n        {\n          id: \"Rules\",\n        },\n        {\n          id: \"Decision trees\",\n        },\n        {\n          id: \"Naive Bayes\",\n        },\n        {\n          id: \"K nearest neighbor\",\n        },\n        {\n          id: \"Probabilistic neural network\",\n        },\n        {\n          id: \"Support vector machine\",\n        },\n      ],\n    },\n    {\n      id: \"Consensus\",\n      children: [\n        {\n          id: \"Models diversity\",\n          children: [\n            {\n              id: \"Different initializations\",\n            },\n            {\n              id: \"Different parameter choices\",\n            },\n            {\n              id: \"Different architectures\",\n            },\n            {\n              id: \"Different modeling methods\",\n            },\n            {\n              id: \"Different training sets\",\n            },\n            {\n              id: \"Different feature sets\",\n            },\n          ],\n        },\n        {\n          id: \"Methods\",\n          children: [\n            {\n              id: \"Classifier selection\",\n            },\n            {\n              id: \"Classifier fusion\",\n            },\n          ],\n        },\n        {\n          id: \"Common\",\n          children: [\n            {\n              id: \"Bagging\",\n            },\n            {\n              id: \"Boosting\",\n            },\n            {\n              id: \"AdaBoost\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"Regression\",\n      children: [\n        {\n          id: \"Multiple linear regression\",\n        },\n        {\n          id: \"Partial least squares\",\n        },\n        {\n          id: \"Multi-layer feedforward neural network\",\n        },\n        {\n          id: \"General regression neural network\",\n        },\n        {\n          id: \"Support vector regression\",\n        },\n      ],\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/tb-dendrogram/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  pixelRatio,\n  fitView: true,\n  linkCenter: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 26,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n  },\n  defaultEdge: {\n    type: \"cubic-vertical\",\n  },\n  layout: {\n    type: \"dendrogram\",\n    direction: \"TB\",\n    nodeSep: 40,\n    rankSep: 100,\n  },\n});\ngraph.node(function (node) {\n  let position = \"right\";\n  let rotate = 0;\n\n  if (!node.children) {\n    position = \"bottom\";\n    rotate = Math.PI / 2;\n  }\n\n  return {\n    label: node.id,\n    labelCfg: {\n      position,\n      offset: 5,\n      style: {\n        rotate,\n        textAlign: \"start\",\n      },\n    },\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/tree-edge-label/data.js",
    "content": "export default {\n  isRoot: true,\n  id: \"Root\",\n  style: {\n    fill: \"red\",\n  },\n  children: [\n    {\n      id: \"SubTreeNode1\",\n      raw: {},\n      children: [\n        {\n          id: \"SubTreeNode1.1\",\n        },\n        {\n          id: \"SubTreeNode1.2\",\n          children: [\n            {\n              id: \"SubTreeNode1.2.1\",\n            },\n            {\n              id: \"SubTreeNode1.2.2\",\n            },\n            {\n              id: \"SubTreeNode1.2.3\",\n            },\n          ],\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode2\",\n      children: [\n        {\n          id: \"SubTreeNode2.1\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode3\",\n      children: [\n        {\n          id: \"SubTreeNode3.1\",\n        },\n        {\n          id: \"SubTreeNode3.2\",\n        },\n        {\n          id: \"SubTreeNode3.3\",\n        },\n      ],\n    },\n    {\n      id: \"SubTreeNode4\",\n    },\n    {\n      id: \"SubTreeNode5\",\n    },\n    {\n      id: \"SubTreeNode6\",\n    },\n    {\n      id: \"SubTreeNode7\",\n    },\n    {\n      id: \"SubTreeNode8\",\n    },\n    {\n      id: \"SubTreeNode9\",\n    },\n    {\n      id: \"SubTreeNode10\",\n    },\n    {\n      id: \"SubTreeNode11\",\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/site/examples/demo/tree-graph/tree-edge-label/index.js",
    "content": "import F6 from \"@antv/f6\";\nimport TreeGraph from \"@antv/f6/dist/extends/graph/treeGraph\";\nimport data_ from \"./data\";\nconst width = 375;\nconst height = 600;\nconst pixelRatio = 2;\nF6.registerGraph(\"TreeGraph\", TreeGraph);\nconst graph = new F6.TreeGraph({\n  width,\n  height,\n  linkCenter: true,\n  pixelRatio,\n  fitView: true,\n  modes: {\n    default: [\n      {\n        type: \"collapse-expand\",\n        onChange: function onChange(item, collapsed) {\n          const data = item.get(\"model\");\n          data.collapsed = collapsed;\n          return true;\n        },\n      },\n      \"drag-canvas\",\n      \"zoom-canvas\",\n    ],\n  },\n  defaultNode: {\n    size: 30,\n  },\n  layout: {\n    type: \"compactBox\",\n    direction: \"LR\",\n    getId: function getId(d) {\n      return d.id;\n    },\n    getHeight: function getHeight() {\n      return 16;\n    },\n    getWidth: function getWidth() {\n      return 16;\n    },\n    getVGap: function getVGap() {\n      return 10;\n    },\n    getHGap: function getHGap() {\n      return 100;\n    },\n  },\n});\ngraph.node(function (node) {\n  return {\n    size: 16,\n    anchorPoints: [\n      [0, 0.5],\n      [1, 0.5],\n    ],\n    style: {\n      fill: \"#C6E5FF\",\n      stroke: \"#5B8FF9\",\n    },\n    label: node.id,\n    labelCfg: {\n      position: node.children && node.children.length > 0 ? \"left\" : \"right\",\n      offset: 5,\n    },\n  };\n});\nlet i = 0;\ngraph.edge(function () {\n  i++;\n  return {\n    type: \"cubic-horizontal\",\n    color: \"#A3B1BF\",\n    label: i,\n  };\n});\ngraph.data(data_);\ngraph.render();\ngraph.fitView();\n"
  },
  {
    "path": "packages/site/gatsby-browser.js",
    "content": "window.f6 = require(\"@antv/f6/dist/f6.js\"); // import the package for webworker\nwindow.insertCss = require(\"insert-css\");\nwindow.Chart = require(\"@antv/chart-node-g6\");\nwindow.AntVUtil = require(\"@antv/util\");\nwindow.GraphLayoutPredict = require(\"@antv/vis-predict-engine\");\n"
  },
  {
    "path": "packages/site/gatsby-config.js",
    "content": "const { version, homepage, repository } = require(\"./package.json\");\n\nmodule.exports = {\n  plugins: [\n    {\n      resolve: \"@antv/gatsby-theme-antv\",\n      options: {\n        GATrackingId: \"UA-148148901-4\",\n      },\n    },\n  ],\n  // Customize your site metadata:\n  siteMetadata: {\n    title: \"F6\",\n    description: \"graph visualization engine for mobile devices\",\n    siteUrl: homepage,\n    githubUrl: repository.url,\n    showAPIDoc: true,\n    isAntVSite: false,\n    showChinaMirror: true, // 是否展示国内镜像链接\n    showLanguageSwitcher: false, // 用于定义是否展示语言切换\n    versions: {\n      [version]: \"https://f6.antv.vision\",\n    },\n    navs: [\n      {\n        slug: \"docs/manual/introduction\",\n        title: {\n          zh: \"教程\",\n          en: \"Manual\",\n        },\n      },\n      {\n        slug: \"docs/api/Graph\",\n        title: {\n          zh: \"API\",\n          en: \"API\",\n        },\n      },\n      {\n        slug: \"docs/examples/tree/compactBox\",\n        title: {\n          zh: \"图表示例\",\n          en: \"Examples\",\n        },\n      },\n      {\n        slug: \"https://www.yuque.com/antv/g6-blog\",\n        title: {\n          zh: \"博客\",\n          en: \"blog\",\n        },\n      },\n    ],\n    docs: [\n      // ===========Design===================\n\n      {\n        slug: \"manual/FAQ\",\n        title: {\n          zh: \"FAQ\",\n          en: \"FAQ\",\n        },\n        order: 2,\n      },\n      {\n        slug: \"manual/tutorial\",\n        title: {\n          zh: \"入门教程\",\n          en: \"Tutorial\",\n        },\n        order: 3,\n      },\n      {\n        slug: \"manual/tutorial/mini\",\n        title: {\n          zh: \"小程序\",\n          en: \"Miniapp\",\n        },\n        order: 2,\n      },\n      {\n        slug: \"manual/tutorial/h5\",\n        title: {\n          zh: \"移动端H5\",\n          en: \"Mobile H5\",\n        },\n        order: 3,\n      },\n\n      {\n        slug: \"manual/tutorial/native\",\n        title: {\n          zh: \"Native\",\n          en: \"Native\",\n        },\n        order: 4,\n      },\n      // ===========Concepts===================\n      {\n        slug: \"manual/middle\",\n        title: {\n          zh: \"核心概念\",\n          en: \"Middle\",\n        },\n        order: 4,\n      },\n\n      {\n        slug: \"manual/middle/elements\",\n        title: {\n          zh: \"图元素：节点/边/Combo\",\n          en: \"Graph Elements\",\n        },\n        order: 2,\n      },\n\n      {\n        slug: \"manual/middle/elements/shape\",\n        title: {\n          zh: \"图形 Shape（选读）\",\n          en: \"Shape\",\n        },\n        order: 1,\n      },\n      {\n        slug: \"manual/middle/elements/nodes\",\n        title: {\n          zh: \"节点\",\n          en: \"Node\",\n        },\n        order: 2,\n      },\n      {\n        slug: \"manual/middle/elements/edges\",\n        title: {\n          zh: \"边\",\n          en: \"Edge\",\n        },\n        order: 3,\n      },\n      {\n        slug: \"manual/middle/elements/combos\",\n        title: {\n          zh: \"Combo\",\n          en: \"Combo\",\n        },\n        order: 4,\n      },\n\n      {\n        slug: \"manual/middle/elements/nodes/built-in\",\n        title: {\n          zh: \"内置节点类型\",\n          en: \"Built-in Nodes\",\n        },\n        order: 1,\n      },\n      {\n        slug: \"manual/middle/elements/edges/built-in\",\n        title: {\n          zh: \"内置边类型\",\n          en: \"Built-in Edges\",\n        },\n        order: 1,\n      },\n      {\n        slug: \"manual/middle/elements/combos/built-in\",\n        title: {\n          zh: \"内置 Combo\",\n          en: \"Built-in Combos\",\n        },\n        order: 1,\n      },\n\n      {\n        slug: \"manual/middle/elements/advanced-style\",\n        title: {\n          zh: \"高级样式\",\n          en: \"Advanced Style\",\n        },\n        order: 5,\n      },\n      {\n        slug: \"manual/middle/elements/methods\",\n        title: {\n          zh: \"高级操作\",\n          en: \"Advanced operation\",\n        },\n        order: 6,\n      },\n\n      {\n        slug: \"manual/middle/layout\",\n        title: {\n          zh: \"图布局\",\n          en: \"Graph Layouts\",\n        },\n        order: 3,\n      },\n      {\n        slug: \"manual/middle/states\",\n        title: {\n          zh: \"交互与事件\",\n          en: \"Behavior & Event\",\n        },\n        order: 4,\n      },\n      {\n        slug: \"manual/middle/plugins\",\n        title: {\n          zh: \"分析组件\",\n          en: \"Component\",\n        },\n        order: 6,\n      },\n      // ==============================\n      {\n        slug: \"manual/advanced\",\n        title: {\n          zh: \"拓展阅读\",\n          en: \"Further Reading\",\n        },\n        order: 5,\n      },\n      // ==========API====================\n      {\n        slug: \"api/graphLayout\",\n        title: {\n          zh: \"图布局 Graph Layout\",\n          en: \"Graph Layout\",\n        },\n        order: 2,\n      },\n      {\n        slug: \"api/graphFunc\",\n        title: {\n          zh: \"Graph 实例方法\",\n          en: \"Graph Functions\",\n        },\n        order: 1,\n      },\n      {\n        slug: \"api/treeGraphLayout\",\n        title: {\n          zh: \"树图布局 TreeGraph Layout\",\n          en: \"TreeGraph Layout\",\n        },\n        order: 5,\n      },\n      {\n        slug: \"api/Items\",\n        title: {\n          zh: \"元素方法和配置\",\n          en: \"Item Functions & Options\",\n        },\n        order: 6,\n      },\n      {\n        slug: \"examples/case\",\n        title: {\n          zh: \"场景案例\",\n          en: \"Case\",\n        },\n      },\n      {\n        slug: \"examples/case/customTree\",\n        title: {\n          zh: \"自定义树\",\n          en: \"customTree\",\n        },\n      },\n      {\n        slug: \"examples/case/newsDemo\",\n        title: {\n          zh: \"新闻图可视化\",\n          en: \"newsDemo\",\n        },\n      },\n      {\n        slug: \"examples/case/simpleCase\",\n        title: {\n          zh: \"经典案例\",\n          en: \"simpleCase\",\n        },\n      },\n      // 暂时隐藏起来\n      //{\n      //  slug: 'examples/gallery',\n      //  icon: 'gallery',\n      //  title: {\n      //    zh: '所有图表',\n      //    en: 'All Demos',\n      //  },\n      //},\n      {\n        slug: \"examples/tree\",\n        icon: \"tree\", // 图标名可以去 https://antv.alipay.com/zh-cn/g2/3.x/demo/index.html 打开控制台查看图标类名\n        title: {\n          zh: \"树图\",\n          en: \"Tree Graph\",\n        },\n      },\n      {\n        slug: \"examples/net\",\n        icon: \"net\",\n        title: {\n          zh: \"一般图\",\n          en: \"General Graph\",\n        },\n      },\n      {\n        slug: \"examples/graphql\",\n        icon: \"graphql\",\n        title: {\n          zh: \"其他表达形式\",\n          en: \"Net Charts\",\n        },\n      },\n      {\n        slug: \"examples/item\",\n        icon: \"shape\",\n        title: {\n          zh: \"元素\",\n          en: \"Item\",\n        },\n      },\n      {\n        slug: \"examples/interaction\",\n        icon: \"interaction\",\n        title: {\n          zh: \"交互\",\n          en: \"Interaction\",\n        },\n      },\n      {\n        slug: \"examples/scatter\",\n        icon: \"scatter\",\n        title: {\n          zh: \"动画\",\n          en: \"Animation\",\n        },\n      },\n      {\n        slug: \"examples/tool\",\n        icon: \"tool\",\n        title: {\n          zh: \"组件\",\n          en: \"Component\",\n        },\n      },\n      {\n        slug: \"examples/algorithm\",\n        icon: \"gallery\",\n        title: {\n          zh: \"算法\",\n          en: \"Algorithm\",\n        },\n      },\n      {\n        slug: \"examples/performance\",\n        icon: \"net\",\n        title: {\n          zh: \"性能测试\",\n          en: \"Performance\",\n        },\n      },\n    ],\n    playground: {\n      container: `\n        <div class=\"mobile-container\">\n          <div class=\"mobile-header\"></div>\n          <div class=\"mobile-content\">\n            <canvas id=\"container\"/>\n          </div>\n        </div>\n      `,\n    },\n    docsearchOptions: {\n      apiKey: \"9d1cd586972bb492b7b41b13a949ef30\",\n      indexName: \"antv_g6\",\n    },\n  },\n};\n"
  },
  {
    "path": "packages/site/gatsby-node.js",
    "content": "const path = require(\"path\");\n\nexports.onCreateWebpackConfig = ({ getConfig }) => {\n  const config = getConfig();\n\n  config.module.rules.push({\n    test: /\\.glsl$/,\n    use: [\n      {\n        loader: \"raw-loader\",\n        options: {\n          esModule: false,\n        },\n      },\n    ],\n  });\n\n  config.module.rules.push({\n    test: /\\.worker\\.ts$/,\n    use: {\n      loader: \"worker-loader\",\n    },\n  });\n\n  config.resolve.extensions.push(\".glsl\");\n};\n"
  },
  {
    "path": "packages/site/package.json",
    "content": "{\n  \"private\": true,\n  \"name\": \"@antv/f6-site\",\n  \"version\": \"0.0.3\",\n  \"description\": \"F6 sites deployed on gh-pages\",\n  \"keywords\": [\n    \"antv\",\n    \"f6\",\n    \"g6-mobile\",\n    \"graph\",\n    \"graph analysis\",\n    \"graph editor\",\n    \"graph visualization\",\n    \"relational data\",\n    \"site\"\n  ],\n  \"homepage\": \"https://f6.antv.vision\",\n  \"bugs\": {\n    \"url\": \"https://github.com/antvis/f6/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/antvis/f6\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"https://github.com/orgs/antvis/people\",\n  \"scripts\": {\n    \"build\": \"\",\n    \"site:build\": \"npm run site:clean && GATSBY=true gatsby build --prefix-paths\",\n    \"site:clean\": \"gatsby clean\",\n    \"site:develop\": \"GATSBY=true gatsby develop --open\",\n    \"site:deploy-github\": \"npm run site:build && gh-pages -d public\",\n    \"site:deploy\": \"npm run site:build && npm run site:copy-mirror-action && gh-pages -d public\",\n    \"site:copy-mirror-action\": \"mkdir -p public/.github/workflows && cp .github/workflows/mirror.yml public/.github/workflows\",\n    \"start\": \"npm run site:develop\"\n  },\n  \"dependencies\": {\n    \"@ant-design/icons\": \"^4.0.6\",\n    \"@antv/chart-node-g6\": \"^0.0.3\",\n    \"@antv/f6\": \"*\",\n    \"@antv/g6\": \"4.2.7\",\n    \"@antv/gatsby-theme-antv\": \"1.1.15\",\n    \"@antv/util\": \"^2.0.9\",\n    \"@antv/vis-predict-engine\": \"^0.0.7\",\n    \"@types/react\": \"^16.9.35\",\n    \"@types/react-dom\": \"^16.9.8\",\n    \"gatsby\": \"^2.24.40\",\n    \"gh-pages\": \"^2.1.1\",\n    \"react-i18next\": \"^11.1.0\",\n    \"typedoc\": \"^0.17.6\",\n    \"typedoc-plugin-markdown\": \"^2.2.11\",\n    \"typescript\": \"4.3\"\n  },\n  \"resolutions\": {\n    \"@types/react\": \"^16.9.35\"\n  },\n  \"devDependencies\": {\n    \"pre-commit\": \"^1.2.2\"\n  }\n}\n"
  },
  {
    "path": "packages/site/site/global.less",
    "content": ".mobile-container {\n  width: 395px !important;\n  height: 590px;\n  background-image: url(https://gw.alipayobjects.com/zos/rmsportal/JAxcjwaQvIsAWvXUrjbY.png);\n  background-size: 100%;\n  background-repeat: no-repeat;\n  overflow: hidden;\n}\n\n.mobile-header {\n  height: 64px;\n  overflow: hidden;\n}\n\n.mobile-content {\n  margin: 15px 10px;\n  background-color: #fff;\n  cursor:\n    url(\"https://gw.alipayobjects.com/mdn/rms_4f0ff1/afts/img/A*eRn5S6F8qVgAAAAAAAAAAABkARQnAQ\")\n      10 10,\n    auto;\n\n  canvas {\n    display: block;\n    width: 375px;\n    height: 260px;\n  }\n}\n"
  },
  {
    "path": "packages/site/site/locale.json",
    "content": "{\n  \"首页\": \"Home Page\",\n  \"F6 图可视化引擎\": \"F6 Graph Visualization Engine\",\n  \"F6 是一个简单、易用、完备的图可视化引擎，它在高定制能力的基础上，提供了一系列设计优雅、便于使用的图可视化解决方案。不论是H5还是小程序，都能帮助开发者搭建属于自己的图可视化、图分析应用。\": \"F6 is graph visualization engine with simplicity and convenience. Based on the ability of customize, it provides a set of elegant graph visualization solutions, and helps developers to build up h5 applications or mini programs for graph visualization and graph analysis.\",\n  \"图表示例\": \"Examples\",\n  \"开始使用\": \"Getting Started\",\n  \"推荐\": \"Recommand\",\n  \"更新\": \"Update\",\n  \"感谢信赖\": \"WE ARE TRUSTED BY\",\n  \"专注关系，完备基建\": \"Dedicated & Complete\",\n  \"F6·图可视化知多少\": \"F6 Graph Visualization Blog\",\n  \"F6 是一个专注于关系数据的、完备的图可视化引擎\": \"F6 is a complete graph visualization engine, which focuses on relational data\",\n  \"领域深钻，顶尖方案\": \"Top Solution\",\n  \"扎根实际具体业务场景、结合业界领先成果，沉淀顶尖解决方案\": \"According to practical bussiness scenarios, we found out the top solutions\",\n  \"简单易用，扩展灵活\": \"Simple & Extendable\",\n  \"精心设计的简单、灵活、高可拓展的接口，满足你的无限创意\": \"Well-designed simple, flexible, and extendable intefaces will satisfy your infinite originality\",\n  \"基于 F6 的关系时序分析应用\": \"Dynamic Relationships Analysis Powered by F6\",\n  \"基于 F6 的关系时序分析应用，解决应急过程中流程、影响面、应急预案等一系列应急决策辅助信息和手段，快速止血以减少和避免故障升级。\": \"This is an application for dynamic relationships analysis based on F6, which helps people deal with the flow, influence, and find out solutions to avoid losses and faults.\",\n  \"基于 F6 的图分析应用\": \"Graph Analysis App Powered by F6\",\n  \"社交网络分析是图可视化中一个重要的应用场景。随着社交网络越来越流行，人与人、人与组织之间的关系变得越来越复杂，使用传统的分析手段，已经很难满足我们的分析需求。在这种情况下，图分析及图可视化显得愈发重要。\": \"Social network is an important scenario in graph visualization. The relationships become complicate with the development of social network. Graph visualization and analysis do well on these complex cases.\",\n  \"基于 F6 的动态决策树\": \"Interactive Decision Graph Powered by F6\",\n  \"基于 F6 实现的动态决策树，辅助用户寻找合适的可视化方式。它展示了 F6 强大的自定义节点和动画的能力。\": \"It is an interactive graph for users to find out an appropriate visualization method for their requirements. The demo shows the powerful custom node and animation ability of F6.\",\n  \"展开该聚合点\": \"Exapand Node\",\n  \"聚合所属聚类\": \"Collapse the Cluster\",\n  \"扩展一度关系\": \"Find 1-Degree Neighbors\",\n  \"扩展二度关系\": \"Find 2-Degree Neighbors\",\n  \"扩展三度关系\": \"Find 3-Degree Neighbors\",\n  \"隐藏该节点\": \"Hide Node\",\n  \"隐藏该边\": \"Hide Edge\",\n  \"聚合所有聚类\": \"Collapse all Nodes\",\n  \"显示所有隐藏元素\": \"Show all Hidden Items\",\n  \"按下 Esc 键退出拉索选择模式\": \"Press Esc to Exit the Lasso Select Mode\",\n  \"按住 SHIFT 键并点选两个节点作为路径起终点\": \"Press SHIFT and Select Two Nodes as Ends of the Path\",\n  \"按下 Esc 键退出当前模式\": \"Press Esc to Exit the Mode\",\n  \"选择有且仅有两个节点作为端点，并点击 Find Path 按钮\": \"Select Only Two Nodes as Ends and Click `Find Path`\",\n  \"输入需要搜索的节点 ID，并点击 Submit 按钮\": \"Input the ID of the Interested Node and Click `Submit`\",\n  \"输入 ID 搜索节点\": \"Input the ID to Search Node\",\n  \"没有找到该节点\": \"Did not find the node\",\n  \"按下 Esc 键退出鱼眼放大镜\": \"Press Esc to Exit the Fisheye Mode\",\n  \"隐藏边标签\": \"Hide the Edge Label\",\n  \"显示边标签\": \"Show the Edge Label\",\n  \"关闭鱼眼放大镜\": \"Disable Fisheye Lens\",\n  \"打开鱼眼放大镜\": \"Enable Fisheye Lens\",\n  \"关闭拉索选择模式\": \"Disable Lasso Select Mode\",\n  \"打开拉索选择模式\": \"Enable Lasso Select Mode\",\n  \"搜索最短路径\": \"Find the Shortest Path\",\n  \"图内容适配容器，快捷键：ctrl + 1\": \"Fit View, shortcuts: ctrl + 1\",\n  \"放大\": \"Zoom in\",\n  \"缩小\": \"Zoom out\",\n  \"聚合节点\": \"Aggregated Node\",\n  \"真实节点\": \"Real Node\",\n  \"这是一个原数据中的真实节点\": \"It is a real node of source data\",\n  \"聚合边\": \"Aggregated Edge\",\n  \"至少一个端点是聚合节点\": \"At least one end node is an aggregated node\",\n  \"真实边\": \"Real Edge\",\n  \"两个端点都是真实节点\": \"Both end nodes are real nodes\",\n  \"节点中间的数字代表该聚类所含的节点数量\": \"The number on the node indicates the real nodes number \\nof this cluster\",\n  \"绿点标记：新增节点\": \"Green Dot: Newly Added Node\",\n  \"相较于上一次结果，右上方小绿点标记了\\n本次更新结果中新增的聚合节点或真实节点\": \"The green dot on the right-top of the node indicates that \\nthe node is newly added compared to last result\",\n  \"Graphin 是一款基于 F6 封装的 React 分析组件库，专注在关系可视分析领域，简单高效，开箱即用。\": \"Graphin stands for Graph Insight. It's a toolkit based on F6 and React, that focuses on relational visual analysis. It's simple, efficient, out of the box.\",\n  \"Graphin 图可视分析组件\": \"Graphin: Graph Insight\"\n}\n"
  },
  {
    "path": "packages/site/site/pages/canvas-menu.tsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n  EyeOutlined,\n  EyeInvisibleOutlined,\n  NodeIndexOutlined,\n  DisconnectOutlined,\n  TagOutlined,\n  SearchOutlined,\n  HighlightOutlined,\n} from \"@ant-design/icons\";\n\nconst isBrowser = typeof window !== \"undefined\";\nconst G6 = isBrowser ? require(\"@antv/g6\") : null;\nconst insertCss = isBrowser ? require(\"insert-css\") : null;\nconst modifyCSS = isBrowser\n  ? require(\"@antv/dom-util/lib/modify-css\").default\n  : null;\n\nif (isBrowser) {\n  insertCss(`\n  #canvas-menu {\n    position: absolute;\n    z-index: 2;\n    left: 16px;\n    top: 80px;\n    width: fit-content;\n    padding: 8px 16px;\n    background-color: rgba(54, 59, 64, 0);\n    border-radius: 24px;\n    box-shadow: 0 5px 18px 0 rgba(0, 0, 0, 0);\n    font-family: PingFangSC-Semibold;\n    transition: all 0.2s linear;\n  }\n  #canvas-menu:hover {\n    background-color: rgba(54, 59, 64, 1);\n    box-shadow: 0 5px 18px 0 rgba(0, 0, 0, 0.6);\n  }\n  .icon-span {\n    padding-left: 8px;\n    padding-right: 8px;\n    cursor: pointer;\n  }\n  #search-node-input {\n    background-color: rgba(60, 60, 60, 0.95);\n    border-radius: 21px;\n    width: 100px;\n    border-color: rgba(80, 80, 80, 0.95);\n    border-style: solid;\n    color: rgba(255, 255, 255, 0.85);\n  }\n  #submit-button {\n    background-color: rgba(82, 115, 224, 0.2);\n    border-radius: 21px;\n    border-color: rgb(82, 115, 224);\n    border-style: solid;\n    color: rgba(152, 165, 254, 1);\n    margin-left: 4px;\n  }\n  .menu-tip {\n    position: absolute;\n    right: calc(30% + 32px);\n    width: fit-content;\n    height: 40px;\n    line-height: 40px;\n    top: 80px;\n    padding-left: 16px;\n    padding-right: 16px;\n    background-color: rgba(54, 59, 64, 0.5);\n    color: rgba(255, 255, 255, 0.65);\n    border-radius: 8px;\n    transition: all 0.2s linear;\n    font-family: PingFangSC-Semibold;\n  }\n  #g6-canavs-menu-item-tip {\n    position: absolute;\n    background-color: rgba(0,0,0, 0.65);\n    padding: 10px;\n    box-shadow: rgba(0, 0, 0, 0.6) 0px 0px 10px;\n    width: fit-content;\n    color: #fff;\n    border-radius: 8px;\n    font-size: 12px;\n    height: fit-content;\n    font-family: PingFangSC-Semibold;\n    transition: all 0.2s linear;\n  }\n`);\n}\n\nlet fishEye = null;\n\nconst CanvasMenu: React.FC<{\n  graph: any;\n  clickFisheyeIcon: (onlyDisable?: boolean) => void;\n  clickLassoIcon: (onlyDisable?: boolean) => void;\n  fisheyeEnabled: boolean;\n  lassoEnabled: boolean;\n  edgeLabelVisible: boolean;\n  setEdgeLabelVisible: (vis: boolean) => void;\n  searchNode: (id: string) => boolean;\n  handleFindPath: () => void;\n  stopLayout: () => void;\n}> = ({\n  graph,\n  clickFisheyeIcon,\n  clickLassoIcon,\n  fisheyeEnabled,\n  lassoEnabled,\n  stopLayout,\n  edgeLabelVisible,\n  setEdgeLabelVisible,\n  searchNode,\n  handleFindPath,\n}) => {\n  const { t } = useTranslation();\n\n  // menu tip, 例如 “按下 ESC 退出鱼眼”\n  const [menuTip, setMenuTip] = useState({\n    text: \"\",\n    display: \"none\",\n    opacity: 0,\n  });\n\n  // menu item tip\n  const [menuItemTip, setMenuItemTip] = useState({\n    text: \"\",\n    display: \"none\",\n    opacity: 0,\n  });\n\n  const [enableSearch, setEnableSearch] = useState(false);\n\n  const [enableSelectPathEnd, setEnableSelectPathEnd] = useState(false);\n\n  const clickEdgeLabelController = () => {\n    setEdgeLabelVisible(!edgeLabelVisible);\n  };\n\n  const handleEnableSearch = () => {\n    // 关闭 lasso 框选\n    if (lassoEnabled) clickLassoIcon(true);\n    // 关闭选择路径端点\n    if (enableSelectPathEnd) setEnableSelectPathEnd(false);\n    // 关闭搜索节点框\n    if (enableSearch) setEnableSearch(false);\n    // 关闭 fisheye\n    if (fisheyeEnabled && fishEye) {\n      graph.removePlugin(fishEye);\n      clickFisheyeIcon(true);\n    }\n    setEnableSearch((old) => {\n      if (old) {\n        // 设置 menuTip\n        setMenuTip({\n          text: \"\",\n          display: \"none\",\n          opacity: 0,\n        });\n        return false;\n      }\n\n      // 设置 menuTip\n      setMenuTip({\n        text: t(\"输入需要搜索的节点 ID，并点击 Submit 按钮\"),\n        display: \"block\",\n        opacity: 1,\n      });\n      return true;\n    });\n  };\n  // 放大\n  const handleZoomOut = () => {\n    if (!graph || graph.destroyed) return;\n    const current = graph.getZoom();\n    const canvas = graph.get(\"canvas\");\n    const point = canvas.getPointByClient(\n      canvas.get(\"width\") / 2,\n      canvas.get(\"height\") / 2,\n    );\n    const pixelRatio = canvas.get(\"pixelRatio\") || 1;\n    const ratio = 1 + 0.05 * 5;\n    if (ratio * current > 5) {\n      return;\n    }\n    graph.zoom(ratio, { x: point.x / pixelRatio, y: point.y / pixelRatio });\n  };\n\n  // 缩小\n  const handleZoomIn = () => {\n    if (!graph || graph.destroyed) return;\n\n    const current = graph.getZoom();\n    const canvas = graph.get(\"canvas\");\n    const point = canvas.getPointByClient(\n      canvas.get(\"width\") / 2,\n      canvas.get(\"height\") / 2,\n    );\n    const pixelRatio = canvas.get(\"pixelRatio\") || 1;\n    const ratio = 1 - 0.05 * 5;\n    if (ratio * current < 0.3) {\n      return;\n    }\n    graph.zoom(ratio, { x: point.x / pixelRatio, y: point.y / pixelRatio });\n  };\n\n  const handleFitViw = () => {\n    if (!graph || graph.destroyed) return;\n    graph.fitView(16);\n  };\n\n  const handleSearchNode = () => {\n    const value = (\n      document.getElementById(\"search-node-input\") as HTMLInputElement\n    ).value;\n    const found = searchNode(value);\n    if (!found)\n      setMenuTip({\n        text: t(\"没有找到该节点\"),\n        display: \"block\",\n        opacity: 1,\n      });\n  };\n\n  const showItemTip = (e, text) => {\n    const { clientX: x, clientY: y } = e;\n    setMenuItemTip({\n      text,\n      display: \"block\",\n      opacity: 1,\n    });\n    const tipDom = document.getElementById(\"g6-canavs-menu-item-tip\");\n    modifyCSS(tipDom, {\n      top: `${124}px`,\n      left: `${x - 20}px`,\n      zIndex: 100,\n    });\n  };\n\n  const hideItemTip = () => {\n    setMenuItemTip({\n      text: \"\",\n      display: \"none\",\n      opacity: 0,\n    });\n    const tipDom = document.getElementById(\"g6-canavs-menu-item-tip\");\n    modifyCSS(tipDom, {\n      zIndex: -100,\n    });\n  };\n  /**\n   * 打开或关闭鱼眼放大功能\n   */\n  const toggleFishEye = () => {\n    if (!graph || graph.destroyed) return;\n\n    // 设置鼠标样式为默认\n    graph.get(\"canvas\").setCursor(\"default\");\n\n    // 关闭 FishEye\n    if (fisheyeEnabled && fishEye) {\n      graph.removePlugin(fishEye);\n      graph.setMode(\"default\");\n\n      // 设置 menuTip\n      setMenuTip({\n        text: t(\"按下 Esc 键退出鱼眼放大镜\"),\n        display: \"none\",\n        opacity: 0,\n      });\n    } else {\n      // 停止布局\n      stopLayout();\n\n      // 关闭 lasso 框选\n      if (lassoEnabled) clickLassoIcon(true);\n      // 关闭选择路径端点\n      if (enableSelectPathEnd) setEnableSelectPathEnd(false);\n      // 关闭搜索节点框\n      if (enableSearch) setEnableSearch(false);\n\n      // 设置 menuTip\n      setMenuTip({\n        text: t(\"按下 Esc 键退出鱼眼放大镜\"),\n        display: \"block\",\n        opacity: 1,\n      });\n\n      // 将交互模式切换到鱼眼只读模式，即不能缩放画布、框选节点、拉索选择节点等可能和鱼眼有冲突的操作\n      graph.setMode(\"fisheyeMode\");\n      // 开启 FishEye\n      fishEye = new G6.Fisheye({\n        r: 249,\n        scaleRByWheel: true,\n        minR: 100,\n        maxR: 500,\n        // showLabel: true,\n      });\n\n      graph.addPlugin(fishEye);\n    }\n    clickFisheyeIcon();\n  };\n\n  // 开启 lasso select 功能\n  const enabledLassoSelect = () => {\n    if (!graph || graph.destroyed) return;\n    clickLassoIcon();\n    if (!lassoEnabled) {\n      graph.setMode(\"lassoSelect\");\n\n      // 设置鼠标样式为十字形\n      graph.get(\"canvas\").setCursor(\"crosshair\");\n\n      // 关闭 fisheye\n      if (fisheyeEnabled && fishEye) {\n        graph.removePlugin(fishEye);\n        clickFisheyeIcon(true);\n      }\n      // 关闭选择路径端点\n      if (enableSelectPathEnd) setEnableSelectPathEnd(false);\n      // 关闭搜索节点框\n      if (enableSearch) setEnableSearch(false);\n\n      // 设置 menuTip\n      setMenuTip({\n        text: t(\"按下 Esc 键退出拉索选择模式\"),\n        display: \"block\",\n        opacity: 1,\n      });\n    } else {\n      graph.setMode(\"default\");\n\n      // 设置鼠标样式为默认\n      graph.get(\"canvas\").setCursor(\"default\");\n\n      // 设置 menuTip\n      setMenuTip({\n        text: t(\"按下 Esc 键退出拉索选择模式\"),\n        display: \"none\",\n        opacity: 0,\n      });\n    }\n  };\n\n  // 开启选择两个节点显示最短路径\n  const handleEnableSelectPathEnd = () => {\n    setEnableSelectPathEnd((old) => {\n      if (!old) {\n        graph.setMode(\"default\");\n        // 关闭 fisheye\n        if (fishEye) {\n          graph.removePlugin(fishEye);\n          clickFisheyeIcon(true);\n        }\n        // 关闭 lasso 框选\n        if (lassoEnabled) clickLassoIcon(true);\n\n        // 关闭搜索节点框\n        if (enableSearch) setEnableSearch(false);\n\n        // 设置 menuTip\n        setMenuTip({\n          text: t(\"按住 SHIFT 键并点选两个节点作为路径起终点\"),\n          display: \"block\",\n          opacity: 1,\n        });\n        return true;\n      }\n      // 设置 menuTip\n      setMenuTip({\n        text: \"\",\n        display: \"none\",\n        opacity: 0,\n      });\n      return false;\n    });\n  };\n\n  const escListener = (e) => {\n    if (!graph || graph.destroyed) return;\n    if (e.key !== \"Escape\") return;\n    if (fishEye) {\n      graph.removePlugin(fishEye);\n      clickFisheyeIcon(true);\n    }\n    // 关闭 lasso 框选\n    graph.setMode(\"default\");\n    // 关闭搜索节点框\n    setEnableSearch(false);\n    // 关闭选择路径端点\n    setEnableSelectPathEnd(false);\n\n    // 设置鼠标样式为默认\n    graph.get(\"canvas\").setCursor(\"default\");\n    clickLassoIcon(true);\n\n    // 设置 menuTip\n    setMenuTip({\n      text: t(\"按下 Esc 键退出当前模式\"),\n      display: \"none\",\n      opacity: 0,\n    });\n  };\n\n  useEffect(() => {\n    if (typeof window !== \"undefined\") {\n      window.addEventListener(\"keydown\", escListener.bind(this));\n      return window.removeEventListener(\"keydown\", escListener.bind(this));\n    }\n  }, []);\n\n  const iconStyle = {\n    disable: { color: \"rgba(255, 255, 255, 0.85)\" },\n    enable: { color: \"rgba(82, 115, 224, 1)\" },\n  };\n\n  return (\n    <>\n      <div id=\"canvas-menu\">\n        <div className=\"icon-container\">\n          <span\n            className=\"icon-span\"\n            style={{ backgroundColor: \"rgba(0, 0, 0, 0)\" }}\n            onClick={clickEdgeLabelController}\n            onMouseEnter={(e) =>\n              showItemTip(\n                e,\n                edgeLabelVisible ? t(\"隐藏边标签\") : t(\"显示边标签\"),\n              )\n            }\n            onMouseLeave={hideItemTip}\n          >\n            {edgeLabelVisible ? (\n              <DisconnectOutlined style={iconStyle.enable} />\n            ) : (\n              <TagOutlined style={iconStyle.disable} />\n            )}\n          </span>\n          <span\n            className=\"icon-span\"\n            onClick={toggleFishEye}\n            onMouseEnter={(e) =>\n              showItemTip(\n                e,\n                fisheyeEnabled ? t(\"关闭鱼眼放大镜\") : t(\"打开鱼眼放大镜\"),\n              )\n            }\n            onMouseLeave={hideItemTip}\n          >\n            {fisheyeEnabled ? (\n              <EyeInvisibleOutlined style={iconStyle.enable} />\n            ) : (\n              <EyeOutlined style={iconStyle.disable} />\n            )}\n          </span>\n          <span\n            className=\"icon-span\"\n            onClick={enabledLassoSelect}\n            onMouseEnter={(e) =>\n              showItemTip(\n                e,\n                lassoEnabled ? t(\"关闭拉索选择模式\") : t(\"打开拉索选择模式\"),\n              )\n            }\n            onMouseLeave={hideItemTip}\n          >\n            <HighlightOutlined\n              style={lassoEnabled ? iconStyle.enable : iconStyle.disable}\n            />\n          </span>\n          <span\n            className=\"icon-span\"\n            onClick={handleEnableSelectPathEnd}\n            onMouseEnter={(e) => showItemTip(e, t(\"搜索最短路径\"))}\n            onMouseLeave={hideItemTip}\n          >\n            <NodeIndexOutlined\n              style={enableSelectPathEnd ? iconStyle.enable : iconStyle.disable}\n            />\n          </span>\n          <span\n            className=\"icon-span\"\n            style={{ width: \"fit-content\", ...iconStyle.disable }}\n          >\n            <span\n              className=\"zoom-icon\"\n              onClick={handleZoomIn}\n              onMouseEnter={(e) => showItemTip(e, t(\"缩小\"))}\n              onMouseLeave={hideItemTip}\n            >\n              -\n            </span>\n            <span\n              className=\"zoom-icon\"\n              onClick={handleFitViw}\n              onMouseEnter={(e) =>\n                showItemTip(e, t(\"图内容适配容器，快捷键：ctrl + 1\"))\n              }\n              onMouseLeave={hideItemTip}\n              style={{ paddingLeft: \"8px\", paddingRight: \"8px\" }}\n            >\n              FIT\n            </span>\n            <span\n              className=\"zoom-icon\"\n              onClick={handleZoomOut}\n              onMouseEnter={(e) => showItemTip(e, t(\"放大\"))}\n              onMouseLeave={hideItemTip}\n            >\n              +\n            </span>\n          </span>\n          <span\n            className=\"icon-span\"\n            onClick={handleEnableSearch}\n            onMouseEnter={(e) => showItemTip(e, t(\"输入 ID 搜索节点\"))}\n            onMouseLeave={hideItemTip}\n          >\n            <SearchOutlined\n              style={enableSearch ? iconStyle.enable : iconStyle.disable}\n            />\n          </span>\n          {enableSearch && (\n            <span\n              onMouseEnter={(e) =>\n                showItemTip(e, t(\"输入需要搜索的节点 ID，并点击 Submit 按钮\"))\n              }\n              onMouseLeave={hideItemTip}\n            >\n              <input type=\"text\" id=\"search-node-input\" />\n              <button id=\"submit-button\" onClick={handleSearchNode}>\n                Submit\n              </button>\n            </span>\n          )}\n          {enableSelectPathEnd && (\n            <span\n              onMouseEnter={(e) =>\n                showItemTip(\n                  e,\n                  t(\"选择有且仅有两个节点作为端点，并点击 Find Path 按钮\"),\n                )\n              }\n              onMouseLeave={hideItemTip}\n            >\n              <button id=\"submit-button\" onClick={handleFindPath}>\n                Find Path\n              </button>\n            </span>\n          )}\n        </div>\n      </div>\n      <div className=\"menu-tip\" style={{ opacity: menuTip.opacity }}>\n        {menuTip.text}\n      </div>\n      <div\n        id=\"g6-canavs-menu-item-tip\"\n        style={{ opacity: menuItemTip.opacity }}\n      >\n        {menuItemTip.text}\n      </div>\n    </>\n  );\n};\n\nexport default CanvasMenu;\n"
  },
  {
    "path": "packages/site/site/pages/index.en.tsx",
    "content": "import Index from \"./index.zh\";\n\nexport default Index;\n"
  },
  {
    "path": "packages/site/site/pages/index.less",
    "content": "@media (max-width: 900px) {\n  .teaser {\n    left: -15% !important;\n    top: 30% !important;\n    width: 103% !important;\n  }\n}\n\n@media (max-width: 510px) {\n  .teaser {\n    left: -18% !important;\n    top: 2% !important;\n    width: 90% !important;\n    .teaser-img {\n      margin-left: 3.5% !important;\n    }\n  }\n}\n\n@media (max-width: 480px) {\n  .teaser {\n    left: -25% !important;\n    top: 7% !important;\n    .teaser-img {\n      margin-top: 10% !important;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/site/site/pages/index.zh.tsx",
    "content": "import React from \"react\";\nimport SEO from \"@antv/gatsby-theme-antv/site/components/Seo\";\nimport { useTranslation } from \"react-i18next\";\nimport Banner from \"@antv/gatsby-theme-antv/site/components/Banner\";\nimport Companies from \"@antv/gatsby-theme-antv/site/components/Companies\";\nimport Features from \"@antv/gatsby-theme-antv/site/components/Features\";\nimport Cases from \"@antv/gatsby-theme-antv/site/components/Cases\";\nimport \"./index.less\";\n\nconst IndexPage = () => {\n  const { t, i18n } = useTranslation();\n\n  const coverImage = (\n    <img\n      style={{ width: \"115%\", marginLeft: \"-8%\", marginTop: \"7%\" }}\n      src=\"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*C_4mRLBbczcAAAAAAAAAAAAAARQnAQ\"\n    />\n  ); //BannerSVG();\n\n  const features = [\n    {\n      icon: \"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*wgmPSIVhEGsAAAAAAAAAAAAAARQnAQ\",\n      title: t(\"跨端 · 全面\"),\n      description: t(\"F6 是一个专注于关系数据的、完备的移动端图可视化引擎。\"),\n    },\n    {\n      icon: \"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*7FF1Q7ioaKYAAAAAAAAAAAAAARQnAQ\",\n      title: t(\"易用 · 流畅\"),\n      description: t(\n        \"针对移动端场景定向优化，不论是小程序还是移动端网页都可以获得极致体验。\",\n      ),\n    },\n    {\n      icon: \"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*rb7FRqSOc7AAAAAAAAAAAAAAARQnAQ\",\n      title: t(\"轻量 · 强悍\"),\n      description: t(\n        \"体积小巧，但能力突出。精心设计的简单、灵活、高可拓展的接口，满足你的无限创意。\",\n      ),\n    },\n  ];\n\n  const companies = [\n    {\n      name: \"支付宝\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*6u3hTpsd7h8AAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"阿里云\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Z1NnQ6L4xCIAAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"天猫\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*BQrxRK6oemMAAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"菜鸟\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*SqmTSqj4FjEAAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"网商银行\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Fw8HTbFgUdAAAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"盒马\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*ePJMQZCb8vkAAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"Geabase\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Vi-pSbxeraIAAAAAAAAAAABkARQnAQ\",\n    },\n    {\n      name: \"滴滴\",\n      img: \"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*3UihQLQSrXoAAAAAAAAAAABkARQnAQ\",\n    },\n  ];\n\n  const cases = [\n    {\n      logo: \"https://gw.alipayobjects.com/mdn/rms_dd275a/afts/img/A*BBUESKOhtcsAAAAAAAAAAAAAARQnAQ\",\n      title: t(\"芝麻企业信用\"),\n      isAppLogo: true,\n      description: t(\n        \"帮助中小微企业建立及展示可信的信用档案，通过评级等信用服务让商业合作更简单 。\",\n      ),\n      image:\n        \"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*Elw0QZx-wOgAAAAAAAAAAAAAARQnAQ\",\n    },\n    {\n      logo: \"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*-SOyRJG53z0AAAAAAAAAAAAAARQnAQ\",\n      title: t(\"鹰寻\"),\n      isAppLogo: true,\n      description: t(\n        \"B2B智能营销解决方案-帮助B类企业打造招投标信息处理最短路径。\",\n      ),\n      image:\n        \"https://gw.alipayobjects.com/mdn/rms_5c3b4a/afts/img/A*XsxRRZ8oDVsAAAAAAAAAAAAAARQnAQ\",\n    },\n  ];\n\n  const bannerButtons = [\n    {\n      text: t(\"官方示例\"),\n      link: `/${i18n.language}/docs/examples/tree/compactBox`,\n      type: \"primary\",\n    },\n    {\n      text: t(\"开始使用\"),\n      link: `/${i18n.language}/docs/manual/introduction`,\n    },\n  ];\n\n  const insNotifications = [\n    {\n      type: t(\"推荐\"),\n      title: t(\"图可视分析如此简单\"),\n      date: \"2020.11.22\",\n      link: \"https://www.yuque.com/antv/g6-blog/zgb5d7\",\n    },\n    {\n      type: t(\"推荐\"),\n      title: t(\"G6 4.2.0 开放 · 生态\"),\n      date: \"2020.03.12\",\n      link: \"https://www.yuque.com/antv/g6-blog/xpu1zo\",\n    },\n  ];\n\n  return (\n    <>\n      <SEO\n        title={t(\"F6 移动端图可视化引擎\")}\n        titleSuffix=\"AntV\"\n        lang={i18n.language}\n      />\n      <Banner\n        notifications={insNotifications}\n        coverImage={coverImage}\n        title={t(\"F6 移动端图可视化引擎\")}\n        description={t(\n          \"F6是一款可以快速、流畅运行于移动设备中的图可视化引擎，通过丰富的布局、组件及分析能力，帮助用户落地跨平台的图可视化应用解决方案。\",\n        )}\n        className=\"banner\"\n        buttons={bannerButtons}\n      />\n      <Features features={features} style={{ width: \"100%\" }} />\n      <Cases cases={cases} />\n      <Companies title={t(\"感谢信赖\")} companies={companies} />\n    </>\n  );\n};\n\nexport default IndexPage;\n"
  },
  {
    "path": "packages/site/site/pages/large-graph-register.tsx",
    "content": "import React from \"react\";\n\nimport isArray from \"@antv/util/lib/is-array\";\nimport isNumber from \"@antv/util/lib/is-number\";\n\nconst isBrowser = typeof window !== \"undefined\";\nconst G6 = isBrowser ? require(\"@antv/g6\") : null;\n\nconst duration = 2000;\nconst animateOpacity = 0.6;\nconst animateBackOpacity = 0.1;\nconst virtualEdgeOpacity = 0.1;\nconst realEdgeOpacity = 0.2;\n\nconst darkBackColor = \"rgb(43, 47, 51)\";\nconst disableColor = \"#777\";\nconst theme = \"dark\";\nconst subjectColors = [\n  \"#3D76DD\",\n  \"#19A576\",\n  \"#65789B\",\n  \"#B98700\",\n  \"#5349E0\",\n  \"#5AB8DB\",\n  \"#7B48A1\",\n  \"#D77622\",\n  \"#008685\",\n  \"#D37099\",\n];\n\nexport const colorSets = G6\n  ? G6.Util.getColorSetsBySubjectColors(\n      subjectColors,\n      darkBackColor,\n      theme,\n      disableColor,\n    )\n  : [];\n\nexport const global = {\n  node: {\n    style: {\n      fill: \"#2B384E\",\n    },\n    labelCfg: {\n      style: {\n        fill: \"#acaeaf\",\n        stroke: \"#191b1c\",\n      },\n    },\n    stateStyles: {\n      focus: {\n        fill: \"#2B384E\",\n      },\n    },\n  },\n  edge: {\n    style: {\n      stroke: \"#acaeaf\",\n      realEdgeStroke: \"#acaeaf\", //'#f00',\n      realEdgeOpacity,\n      strokeOpacity: realEdgeOpacity,\n    },\n    labelCfg: {\n      style: {\n        fill: \"#acaeaf\",\n        realEdgeStroke: \"#acaeaf\", //'#f00',\n        realEdgeOpacity: 0.5,\n        stroke: \"#191b1c\",\n      },\n    },\n    stateStyles: {\n      focus: {\n        stroke: \"#fff\", // '#3C9AE8',\n      },\n    },\n  },\n};\n\nif (G6) {\n  // Custom super node\n  G6.registerNode(\n    \"aggregated-node\",\n    {\n      draw(cfg: any, group) {\n        let width = 53,\n          height = 27;\n        const style = cfg.style || {};\n        const colorSet = cfg.colorSet || colorSets[0];\n\n        // halo for hover\n        group.addShape(\"rect\", {\n          attrs: {\n            x: -width * 0.55,\n            y: -height * 0.6,\n            width: width * 1.1,\n            height: height * 1.2,\n            fill: colorSet.mainFill,\n            opacity: 0.9,\n            lineWidth: 0,\n            radius: (height / 2 || 13) * 1.2,\n          },\n          name: \"halo-shape\",\n          visible: false,\n        });\n\n        // focus stroke for hover\n        group.addShape(\"rect\", {\n          attrs: {\n            x: -width * 0.55,\n            y: -height * 0.6,\n            width: width * 1.1,\n            height: height * 1.2,\n            fill: colorSet.mainFill, // '#3B4043',\n            stroke: \"#AAB7C4\",\n            lineWidth: 1,\n            lineOpacty: 0.85,\n            radius: (height / 2 || 13) * 1.2,\n          },\n          name: \"stroke-shape\",\n          visible: false,\n        });\n\n        const keyShape = group.addShape(\"rect\", {\n          attrs: {\n            ...style,\n            x: -width / 2,\n            y: -height / 2,\n            width,\n            height,\n            fill: colorSet.mainFill, // || '#3B4043',\n            stroke: colorSet.mainStroke,\n            lineWidth: 2,\n            cursor: \"pointer\",\n            radius: height / 2 || 13,\n            lineDash: [2, 2],\n          },\n          name: \"aggregated-node-keyShape\",\n        });\n\n        let labelStyle = {};\n        if (cfg.labelCfg) {\n          labelStyle = Object.assign(labelStyle, cfg.labelCfg.style);\n        }\n        group.addShape(\"text\", {\n          attrs: {\n            text: `${cfg.count}`,\n            x: 0,\n            y: 0,\n            textAlign: \"center\",\n            textBaseline: \"middle\",\n            cursor: \"pointer\",\n            fontSize: 12,\n            fill: \"#fff\",\n            opacity: 0.85,\n            fontWeight: 400,\n          },\n          name: \"count-shape\",\n          className: \"count-shape\",\n          draggable: true,\n        });\n\n        // tag for new node\n        if (cfg.new) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: width / 2 - 3,\n              y: -height / 2 + 3,\n              r: 4,\n              fill: \"#6DD400\",\n              lineWidth: 0.5,\n              stroke: \"#FFFFFF\",\n            },\n            name: \"typeNode-tag-circle\",\n          });\n        }\n        return keyShape;\n      },\n      setState: (name, value, item) => {\n        const group = item.get(\"group\");\n        if (name === \"layoutEnd\" && value) {\n          const labelShape = group.find((e) => e.get(\"name\") === \"text-shape\");\n          if (labelShape) labelShape.set(\"visible\", true);\n        } else if (name === \"hover\") {\n          if (item.hasState(\"focus\")) {\n            return;\n          }\n          const halo = group.find((e) => e.get(\"name\") === \"halo-shape\");\n          const keyShape: any = item.getKeyShape();\n          const colorSet = item.getModel().colorSet || colorSets[0];\n          if (value) {\n            halo && halo.show();\n            keyShape.attr(\"fill\", colorSet.activeFill);\n          } else {\n            halo && halo.hide();\n            keyShape.attr(\"fill\", colorSet.mainFill);\n          }\n        } else if (name === \"focus\") {\n          const stroke = group.find((e) => e.get(\"name\") === \"stroke-shape\");\n          const keyShape: any = item.getKeyShape();\n          const colorSet = item.getModel().colorSet || colorSets[0];\n          if (value) {\n            stroke && stroke.show();\n            keyShape.attr(\"fill\", colorSet.selectedFill);\n          } else {\n            stroke && stroke.hide();\n            keyShape.attr(\"fill\", colorSet.mainFill);\n          }\n        }\n      },\n      update: undefined,\n    },\n    \"single-node\",\n  );\n\n  // Custom real node\n  G6.registerNode(\n    \"real-node\",\n    {\n      draw(cfg: any, group) {\n        let r = 30;\n        if (isNumber(cfg.size)) {\n          r = (cfg.size as number) / 2;\n        } else if (isArray(cfg.size)) {\n          r = cfg.size[0] / 2;\n        }\n        const style = cfg.style || {};\n        const colorSet = cfg.colorSet || colorSets[0];\n\n        // halo for hover\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: r + 5,\n            fill: style.fill || colorSet.mainFill || \"#2B384E\",\n            opacity: 0.9,\n            lineWidth: 0,\n          },\n          name: \"halo-shape\",\n          visible: false,\n        });\n\n        // focus stroke for hover\n        group.addShape(\"circle\", {\n          attrs: {\n            x: 0,\n            y: 0,\n            r: r + 5,\n            fill: style.fill || colorSet.mainFill || \"#2B384E\",\n            stroke: \"#fff\",\n            strokeOpacity: 0.85,\n            lineWidth: 1,\n          },\n          name: \"stroke-shape\",\n          visible: false,\n        });\n\n        const keyShape = group.addShape(\"circle\", {\n          attrs: {\n            ...style,\n            x: 0,\n            y: 0,\n            r,\n            fill: colorSet.mainFill,\n            stroke: colorSet.mainStroke,\n            lineWidth: 2,\n            cursor: \"pointer\",\n          },\n          name: \"aggregated-node-keyShape\",\n        });\n\n        let labelStyle = {};\n        if (cfg.labelCfg) {\n          labelStyle = Object.assign(labelStyle, cfg.labelCfg.style);\n        }\n\n        if (cfg.label) {\n          const text = cfg.label;\n          let labelStyle: any = {};\n          let refY = 0;\n          if (cfg.labelCfg) {\n            labelStyle = Object.assign(labelStyle, cfg.labelCfg.style);\n            refY += cfg.labelCfg.refY || 0;\n          }\n          let offsetY = 0;\n          const fontSize = labelStyle.fontSize < 8 ? 8 : labelStyle.fontSize;\n          const lineNum = (cfg.labelLineNum as number) || 1;\n          offsetY = lineNum * (fontSize || 12);\n          group.addShape(\"text\", {\n            attrs: {\n              text,\n              x: 0,\n              y: r + refY + offsetY + 5,\n              textAlign: \"center\",\n              textBaseLine: \"alphabetic\",\n              cursor: \"pointer\",\n              fontSize,\n              fill: \"#fff\",\n              opacity: 0.85,\n              fontWeight: 400,\n              stroke: global.edge.labelCfg.style.stroke,\n            },\n            name: \"text-shape\",\n            className: \"text-shape\",\n          });\n        }\n\n        // tag for new node\n        if (cfg.new) {\n          group.addShape(\"circle\", {\n            attrs: {\n              x: r - 3,\n              y: -r + 3,\n              r: 4,\n              fill: \"#6DD400\",\n              lineWidth: 0.5,\n              stroke: \"#FFFFFF\",\n            },\n            name: \"typeNode-tag-circle\",\n          });\n        }\n\n        return keyShape;\n      },\n      setState: (name, value, item) => {\n        const group = item.get(\"group\");\n        if (name === \"layoutEnd\" && value) {\n          const labelShape = group.find((e) => e.get(\"name\") === \"text-shape\");\n          if (labelShape) labelShape.set(\"visible\", true);\n        } else if (name === \"hover\") {\n          if (item.hasState(\"focus\")) {\n            return;\n          }\n          const halo = group.find((e) => e.get(\"name\") === \"halo-shape\");\n          const keyShape: any = item.getKeyShape();\n          const colorSet = item.getModel().colorSet || colorSets[0];\n          if (value) {\n            halo && halo.show();\n            keyShape.attr(\"fill\", colorSet.activeFill);\n          } else {\n            halo && halo.hide();\n            keyShape.attr(\"fill\", colorSet.mainFill);\n          }\n        } else if (name === \"focus\") {\n          const stroke = group.find((e) => e.get(\"name\") === \"stroke-shape\");\n          const label = group.find((e) => e.get(\"name\") === \"text-shape\");\n          const keyShape: any = item.getKeyShape();\n          const colorSet = item.getModel().colorSet || colorSets[0];\n          if (value) {\n            stroke && stroke.show();\n            keyShape.attr(\"fill\", colorSet.selectedFill);\n            label && label.attr(\"fontWeight\", 800);\n          } else {\n            stroke && stroke.hide();\n            keyShape.attr(\"fill\", colorSet.mainFill); // '#2B384E'\n            label && label.attr(\"fontWeight\", 400);\n          }\n        }\n      },\n      update: undefined,\n    },\n    \"aggregated-node\",\n  ); // 这样可以继承 aggregated-node 的 setState\n\n  // Custom the quadratic edge for multiple edges between one node pair\n  G6.registerEdge(\n    \"custom-quadratic\",\n    {\n      setState: (name, value, item) => {\n        const group = item.get(\"group\");\n        const model = item.getModel();\n        if (name === \"focus\") {\n          const back = group.find((ele) => ele.get(\"name\") === \"back-line\");\n          if (back) {\n            back.stopAnimate();\n            back.remove();\n            back.destroy();\n          }\n          const keyShape = group.find(\n            (ele) => ele.get(\"name\") === \"edge-shape\",\n          );\n          const arrow: any = model.style.endArrow;\n          if (value) {\n            if (keyShape.cfg.animation) {\n              keyShape.stopAnimate(true);\n            }\n            keyShape.attr({\n              strokeOpacity: animateOpacity,\n              opacity: animateOpacity,\n              stroke: \"#fff\",\n              endArrow: {\n                ...arrow,\n                stroke: \"#fff\",\n                fill: \"#fff\",\n              },\n            });\n            if (model.isReal) {\n              const { lineWidth, path, endArrow, stroke } = keyShape.attr();\n              const back = group.addShape(\"path\", {\n                attrs: {\n                  lineWidth,\n                  path,\n                  stroke,\n                  endArrow,\n                  opacity: animateBackOpacity,\n                },\n                name: \"back-line\",\n              });\n              back.toBack();\n              const length = keyShape.getTotalLength();\n              keyShape.animate(\n                (ratio) => {\n                  // the operations in each frame. Ratio ranges from 0 to 1 indicating the prograss of the animation. Returns the modified configurations\n                  const startLen = ratio * length;\n                  // Calculate the lineDash\n                  const cfg = {\n                    lineDash: [startLen, length - startLen],\n                  };\n                  return cfg;\n                },\n                {\n                  repeat: true, // Whether executes the animation repeatly\n                  duration, // the duration for executing once\n                },\n              );\n            } else {\n              let index = 0;\n              const lineDash = keyShape.attr(\"lineDash\");\n              const totalLength = lineDash[0] + lineDash[1];\n              keyShape.animate(\n                () => {\n                  index++;\n                  if (index > totalLength) {\n                    index = 0;\n                  }\n                  const res = {\n                    lineDash,\n                    lineDashOffset: -index,\n                  };\n                  // returns the modified configurations here, lineDash and lineDashOffset here\n                  return res;\n                },\n                {\n                  repeat: true, // whether executes the animation repeatly\n                  duration, // the duration for executing once\n                },\n              );\n            }\n          } else {\n            keyShape.stopAnimate();\n            const stroke = \"#acaeaf\";\n            const opacity = model.isReal ? realEdgeOpacity : virtualEdgeOpacity;\n            keyShape.attr({\n              stroke,\n              strokeOpacity: opacity,\n              opacity,\n              endArrow: {\n                ...arrow,\n                stroke,\n                fill: stroke,\n              },\n            });\n          }\n        }\n      },\n    },\n    \"quadratic\",\n  );\n\n  // Custom the line edge for single edge between one node pair\n  G6.registerEdge(\n    \"custom-line\",\n    {\n      setState: (name, value, item) => {\n        const group = item.get(\"group\");\n        const model = item.getModel();\n        if (name === \"focus\") {\n          const keyShape = group.find(\n            (ele) => ele.get(\"name\") === \"edge-shape\",\n          );\n          const back = group.find((ele) => ele.get(\"name\") === \"back-line\");\n          if (back) {\n            back.stopAnimate();\n            back.remove();\n            back.destroy();\n          }\n          const arrow: any = model.style.endArrow;\n          if (value) {\n            if (keyShape.cfg.animation) {\n              keyShape.stopAnimate(true);\n            }\n            keyShape.attr({\n              strokeOpacity: animateOpacity,\n              opacity: animateOpacity,\n              stroke: \"#fff\",\n              endArrow: {\n                ...arrow,\n                stroke: \"#fff\",\n                fill: \"#fff\",\n              },\n            });\n            if (model.isReal) {\n              const { path, stroke, lineWidth } = keyShape.attr();\n              const back = group.addShape(\"path\", {\n                attrs: {\n                  path,\n                  stroke,\n                  lineWidth,\n                  opacity: animateBackOpacity,\n                },\n                name: \"back-line\",\n              });\n              back.toBack();\n              const length = keyShape.getTotalLength();\n              keyShape.animate(\n                (ratio) => {\n                  // the operations in each frame. Ratio ranges from 0 to 1 indicating the prograss of the animation. Returns the modified configurations\n                  const startLen = ratio * length;\n                  // Calculate the lineDash\n                  const cfg = {\n                    lineDash: [startLen, length - startLen],\n                  };\n                  return cfg;\n                },\n                {\n                  repeat: true, // Whether executes the animation repeatly\n                  duration, // the duration for executing once\n                },\n              );\n            } else {\n              const lineDash = keyShape.attr(\"lineDash\");\n              const totalLength = lineDash[0] + lineDash[1];\n              let index = 0;\n              keyShape.animate(\n                () => {\n                  index++;\n                  if (index > totalLength) {\n                    index = 0;\n                  }\n                  const res = {\n                    lineDash,\n                    lineDashOffset: -index,\n                  };\n                  // returns the modified configurations here, lineDash and lineDashOffset here\n                  return res;\n                },\n                {\n                  repeat: true, // whether executes the animation repeatly\n                  duration, // the duration for executing once\n                },\n              );\n            }\n          } else {\n            keyShape.stopAnimate();\n            const stroke = \"#acaeaf\";\n            const opacity = model.isReal ? realEdgeOpacity : virtualEdgeOpacity;\n            keyShape.attr({\n              stroke,\n              strokeOpacity: opacity,\n              opacity: opacity,\n              endArrow: {\n                ...arrow,\n                stroke,\n                fill: stroke,\n              },\n            });\n          }\n        }\n      },\n    },\n    \"single-edge\",\n  );\n}\n\nconst reacComponent = () => {\n  return <></>;\n};\n\nexport default reacComponent;\n"
  },
  {
    "path": "packages/site/site/pages/largegraph.en.tsx",
    "content": "import LargeGraph from \"./largegraph.zh\";\n\nexport default LargeGraph;\n"
  },
  {
    "path": "packages/site/site/pages/largegraph.zh.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport { colorSets, global } from \"./large-graph-register\";\nimport { uniqueId } from \"@antv/util\";\nimport { useTranslation } from \"react-i18next\";\nimport CanvasMenu from \"./canvas-menu\";\nimport LegendPanel from \"./legend-panel\";\n\nconst isBrowser = typeof window !== \"undefined\";\nconst G6 = isBrowser ? require(\"@antv/g6\") : null;\nconst insertCss = isBrowser ? require(\"insert-css\") : null;\n\nlet labelPropagation = null;\nlet louvain = null;\nlet findShortestPath = null;\n\nif (isBrowser) {\n  labelPropagation = G6.Algorithm.labelPropagation;\n  louvain = G6.Algorithm.louvain;\n  findShortestPath = G6.Algorithm.findShortestPath;\n  insertCss(`\n\t\t.g6-component-contextmenu {\n\t\t\tposition: absolute;\n\t\t\tz-index: 2;\n\t\t\tlist-style-type: none;\n\t\t\tbackground-color: #363b40;\n\t\t\tborder-radius: 6px;\n\t\t\tfont-size: 14px;\n\t\t\tcolor: hsla(0,0%,100%,.85);\n\t\t\twidth: fit-content;\n\t\t\ttransition: opacity .2s;\n\t\t\ttext-align: center;\n\t\t\tpadding: 0px 20px 0px 20px;\n\t\t\tbox-shadow: 0 5px 18px 0 rgba(0, 0, 0, 0.6);\n\t\t\tborder: 0px;\n\t\t}\n\t\t.g6-component-contextmenu ul {\n\t\t\tpadding-left: 0px;\n\t\t\tmargin: 0;\n\t\t}\n\t\t.g6-component-contextmenu li {\n\t\t\tcursor: pointer;\n\t\t\tlist-style-type: none;\n\t\t\tlist-style: none;\n\t\t\tmargin-left: 0;\n\t\t\tline-height: 38px;\n\t}\n\t\t}\n\t\t.g6-component-contextmenu li:hover {\n\t\t\tcolor: #aaa;\n\t\t}\n\t`);\n}\n\nconst NODESIZEMAPPING = \"degree\";\nconst SMALLGRAPHLABELMAXLENGTH = 5;\nlet labelMaxLength = SMALLGRAPHLABELMAXLENGTH;\nconst DEFAULTNODESIZE = 20;\nconst DEFAULTAGGREGATEDNODESIZE = 53;\nconst NODE_LIMIT = 40; // TODO: find a proper number for maximum node number on the canvas\n\nlet graph = null;\nlet originData;\nlet currentUnproccessedData = { nodes: [], edges: [] };\nlet nodeMap = {};\nlet aggregatedNodeMap = {};\nlet hiddenItemIds = []; // \b隐藏的元素 id 数组\nlet largeGraphMode = true;\nlet cachePositions = {};\nlet manipulatePosition = undefined;\nlet descreteNodeCenter;\nlet layout = {\n  type: \"\",\n  instance: null,\n  destroyed: true,\n};\nlet expandArray = [];\nlet collapseArray = [];\nlet shiftKeydown = false;\nlet CANVAS_WIDTH = 800,\n  CANVAS_HEIGHT = 800;\n\nconst descendCompare = (p) => {\n  // 这是比较函数\n  return function (m, n) {\n    const a = m[p];\n    const b = n[p];\n    return b - a; // 降序\n  };\n};\n\nconst clearFocusItemState = (graph) => {\n  if (!graph) return;\n  clearFocusNodeState(graph);\n  clearFocusEdgeState(graph);\n};\n\n// 清除图上所有节点的 focus 状态及相应样式\nconst clearFocusNodeState = (graph) => {\n  const focusNodes = graph.findAllByState(\"node\", \"focus\");\n  focusNodes.forEach((fnode) => {\n    graph.setItemState(fnode, \"focus\", false); // false\n  });\n};\n\n// 清除图上所有边的 focus 状态及相应样式\nconst clearFocusEdgeState = (graph) => {\n  const focusEdges = graph.findAllByState(\"edge\", \"focus\");\n  focusEdges.forEach((fedge) => {\n    graph.setItemState(fedge, \"focus\", false);\n  });\n};\n\n// 截断长文本。length 为文本截断后长度，elipsis 是后缀\nconst formatText = (text, length = 5, elipsis = \"...\") => {\n  if (!text) return \"\";\n  if (text.length > length) {\n    return `${text.substr(0, length)}${elipsis}`;\n  }\n  return text;\n};\n\nconst labelFormatter = (text: string, minLength: number = 10): string => {\n  if (text && text.split(\"\").length > minLength)\n    return `${text.substr(0, minLength)}...`;\n  return text;\n};\n\nconst processNodesEdges = (\n  nodes,\n  edges,\n  width,\n  height,\n  largeGraphMode,\n  edgeLabelVisible,\n  isNewGraph = false,\n) => {\n  if (!nodes || nodes.length === 0) return {};\n  const currentNodeMap = {};\n  let maxNodeCount = -Infinity;\n  const paddingRatio = 0.3;\n  const paddingLeft = paddingRatio * width;\n  const paddingTop = paddingRatio * height;\n  nodes.forEach((node) => {\n    node.type = node.level === 0 ? \"real-node\" : \"aggregated-node\";\n    node.isReal = node.level === 0 ? true : false;\n    node.label = `${node.id}`;\n    node.labelLineNum = undefined;\n    node.oriLabel = node.label;\n    node.label = formatText(node.label, labelMaxLength, \"...\");\n    node.degree = 0;\n    node.inDegree = 0;\n    node.outDegree = 0;\n    if (currentNodeMap[node.id]) {\n      console.warn(\"node exists already!\", node.id);\n      node.id = `${node.id}${Math.random()}`;\n    }\n    currentNodeMap[node.id] = node;\n    if (node.count > maxNodeCount) maxNodeCount = node.count;\n    const cachePosition = cachePositions ? cachePositions[node.id] : undefined;\n    if (cachePosition) {\n      node.x = cachePosition.x;\n      node.y = cachePosition.y;\n      node.new = false;\n    } else {\n      node.new = isNewGraph ? false : true;\n      if (manipulatePosition && !node.x && !node.y) {\n        node.x =\n          manipulatePosition.x + 30 * Math.cos(Math.random() * Math.PI * 2);\n        node.y =\n          manipulatePosition.y + 30 * Math.sin(Math.random() * Math.PI * 2);\n      }\n    }\n  });\n\n  let maxCount = -Infinity;\n  let minCount = Infinity;\n  // let maxCount = 0;\n  edges.forEach((edge) => {\n    // to avoid the dulplicated id to nodes\n    if (!edge.id) edge.id = `edge-${uniqueId()}`;\n    else if (edge.id.split(\"-\")[0] !== \"edge\") edge.id = `edge-${edge.id}`;\n    // TODO: delete the following line after the queried data is correct\n    if (!currentNodeMap[edge.source] || !currentNodeMap[edge.target]) {\n      console.warn(\n        \"edge source target does not exist\",\n        edge.source,\n        edge.target,\n        edge.id,\n      );\n      return;\n    }\n    const sourceNode = currentNodeMap[edge.source];\n    const targetNode = currentNodeMap[edge.target];\n\n    if (!sourceNode || !targetNode)\n      console.warn(\n        \"source or target is not defined!!!\",\n        edge,\n        sourceNode,\n        targetNode,\n      );\n\n    // calculate the degree\n    sourceNode.degree++;\n    targetNode.degree++;\n    sourceNode.outDegree++;\n    targetNode.inDegree++;\n\n    if (edge.count > maxCount) maxCount = edge.count;\n    if (edge.count < minCount) minCount = edge.count;\n  });\n\n  nodes.sort(descendCompare(NODESIZEMAPPING));\n  const maxDegree = nodes[0].degree || 1;\n\n  const descreteNodes = [];\n  nodes.forEach((node, i) => {\n    // assign the size mapping to the outDegree\n    const countRatio = node.count / maxNodeCount;\n    const isRealNode = node.level === 0;\n    node.size = isRealNode ? DEFAULTNODESIZE : DEFAULTAGGREGATEDNODESIZE;\n    node.isReal = isRealNode;\n    node.labelCfg = {\n      position: \"bottom\",\n      offset: 5,\n      style: {\n        fill: global.node.labelCfg.style.fill,\n        fontSize: 6 + countRatio * 6 || 12,\n        stroke: global.node.labelCfg.style.stroke,\n        lineWidth: 3,\n      },\n    };\n\n    if (!node.degree) {\n      descreteNodes.push(node);\n    }\n  });\n\n  const countRange = maxCount - minCount;\n  const minEdgeSize = 1;\n  const maxEdgeSize = 7;\n  const edgeSizeRange = maxEdgeSize - minEdgeSize;\n  edges.forEach((edge) => {\n    // set edges' style\n    const targetNode = currentNodeMap[edge.target];\n\n    const size =\n      ((edge.count - minCount) / countRange) * edgeSizeRange + minEdgeSize || 1;\n    edge.size = size;\n\n    const arrowWidth = Math.max(size / 2 + 2, 3);\n    const arrowLength = 10;\n    const arrowBeging = targetNode.size + arrowLength;\n    let arrowPath = `M ${arrowBeging},0 L ${\n      arrowBeging + arrowLength\n    },-${arrowWidth} L ${arrowBeging + arrowLength},${arrowWidth} Z`;\n    let d = targetNode.size / 2 + arrowLength;\n    if (edge.source === edge.target) {\n      edge.type = \"loop\";\n      arrowPath = undefined;\n    }\n    const sourceNode = currentNodeMap[edge.source];\n    const isRealEdge = targetNode.isReal && sourceNode.isReal;\n    edge.isReal = isRealEdge;\n    const stroke = isRealEdge\n      ? global.edge.style.realEdgeStroke\n      : global.edge.style.stroke;\n    const opacity = isRealEdge\n      ? global.edge.style.realEdgeOpacity\n      : global.edge.style.strokeOpacity;\n    const dash = Math.max(size, 2);\n    const lineDash = isRealEdge ? undefined : [dash, dash];\n    edge.style = {\n      stroke,\n      strokeOpacity: opacity,\n      cursor: \"pointer\",\n      lineAppendWidth: Math.max(edge.size || 5, 5),\n      fillOpacity: 1,\n      lineDash,\n      endArrow: arrowPath\n        ? {\n            path: arrowPath,\n            d,\n            fill: stroke,\n            strokeOpacity: 0,\n          }\n        : false,\n    };\n    edge.labelCfg = {\n      autoRotate: true,\n      style: {\n        stroke: global.edge.labelCfg.style.stroke,\n        fill: global.edge.labelCfg.style.fill,\n        lineWidth: 4,\n        fontSize: 12,\n        lineAppendWidth: 10,\n        opacity: 1,\n      },\n    };\n    if (!edge.oriLabel) edge.oriLabel = edge.label;\n    if (largeGraphMode || !edgeLabelVisible) edge.label = \"\";\n    else {\n      edge.label = labelFormatter(edge.label, labelMaxLength);\n    }\n\n    // arrange the other nodes around the hub\n    const sourceDis = sourceNode.size / 2 + 20;\n    const targetDis = targetNode.size / 2 + 20;\n    if (sourceNode.x && !targetNode.x) {\n      targetNode.x =\n        sourceNode.x + sourceDis * Math.cos(Math.random() * Math.PI * 2);\n    }\n    if (sourceNode.y && !targetNode.y) {\n      targetNode.y =\n        sourceNode.y + sourceDis * Math.sin(Math.random() * Math.PI * 2);\n    }\n    if (targetNode.x && !sourceNode.x) {\n      sourceNode.x =\n        targetNode.x + targetDis * Math.cos(Math.random() * Math.PI * 2);\n    }\n    if (targetNode.y && !sourceNode.y) {\n      sourceNode.y =\n        targetNode.y + targetDis * Math.sin(Math.random() * Math.PI * 2);\n    }\n\n    if (!sourceNode.x && !sourceNode.y && manipulatePosition) {\n      sourceNode.x =\n        manipulatePosition.x + 30 * Math.cos(Math.random() * Math.PI * 2);\n      sourceNode.y =\n        manipulatePosition.y + 30 * Math.sin(Math.random() * Math.PI * 2);\n    }\n    if (!targetNode.x && !targetNode.y && manipulatePosition) {\n      targetNode.x =\n        manipulatePosition.x + 30 * Math.cos(Math.random() * Math.PI * 2);\n      targetNode.y =\n        manipulatePosition.y + 30 * Math.sin(Math.random() * Math.PI * 2);\n    }\n  });\n\n  descreteNodeCenter = {\n    x: width - paddingLeft,\n    y: height - paddingTop,\n  };\n  descreteNodes.forEach((node) => {\n    if (!node.x && !node.y) {\n      node.x =\n        descreteNodeCenter.x + 30 * Math.cos(Math.random() * Math.PI * 2);\n      node.y =\n        descreteNodeCenter.y + 30 * Math.sin(Math.random() * Math.PI * 2);\n    }\n  });\n\n  G6.Util.processParallelEdges(edges, 12.5, \"custom-quadratic\", \"custom-line\");\n  return {\n    maxDegree,\n    edges,\n  };\n};\n\nconst getForceLayoutConfig = (graph, largeGraphMode, configSettings?) => {\n  let {\n    linkDistance,\n    edgeStrength,\n    nodeStrength,\n    nodeSpacing,\n    preventOverlap,\n    nodeSize,\n    collideStrength,\n    alpha,\n    alphaDecay,\n    alphaMin,\n  } = configSettings || { preventOverlap: true };\n\n  if (!linkDistance && linkDistance !== 0) linkDistance = 225;\n  if (!edgeStrength && edgeStrength !== 0) edgeStrength = 50;\n  if (!nodeStrength && nodeStrength !== 0) nodeStrength = 200;\n  if (!nodeSpacing && nodeSpacing !== 0) nodeSpacing = 5;\n\n  const config = {\n    type: \"gForce\",\n    minMovement: 0.01,\n    maxIteration: 5000,\n    preventOverlap,\n    damping: 0.99,\n    gpuEnabled: largeGraphMode,\n    linkDistance: (d) => {\n      let dist = linkDistance;\n      const sourceNode = nodeMap[d.source] || aggregatedNodeMap[d.source];\n      const targetNode = nodeMap[d.target] || aggregatedNodeMap[d.target];\n      // // 两端都是聚合点\n      // if (sourceNode.level && targetNode.level) dist = linkDistance * 3;\n      // // 一端是聚合点，一端是真实节点\n      // else if (sourceNode.level || targetNode.level) dist = linkDistance * 1.5;\n      if (!sourceNode.level && !targetNode.level) dist = linkDistance * 0.3;\n      return dist;\n    },\n    edgeStrength: (d) => {\n      const sourceNode = nodeMap[d.source] || aggregatedNodeMap[d.source];\n      const targetNode = nodeMap[d.target] || aggregatedNodeMap[d.target];\n      // 聚合节点之间的引力小\n      if (sourceNode.level && targetNode.level) return edgeStrength / 2;\n      // 聚合节点与真实节点之间引力大\n      if (sourceNode.level || targetNode.level) return edgeStrength;\n      return edgeStrength;\n    },\n    nodeStrength: (d) => {\n      // 给离散点引力，让它们聚集\n      if (d.degree === 0) return -10;\n      // 聚合点的斥力大\n      if (d.level) return nodeStrength * 2;\n      return nodeStrength;\n    },\n    nodeSize: (d) => {\n      if (!nodeSize && d.size) return d.size;\n      return 50;\n    },\n    nodeSpacing: (d) => {\n      if (d.degree === 0) return nodeSpacing * 2;\n      if (d.level) return nodeSpacing;\n      return nodeSpacing;\n    },\n    onLayoutEnd: () => {\n      if (largeGraphMode) {\n        graph.getEdges().forEach((edge) => {\n          if (!edge.oriLabel) return;\n          edge.update({\n            label: labelFormatter(edge.oriLabel, labelMaxLength),\n          });\n        });\n      }\n    },\n    tick: () => {\n      graph.refreshPositions();\n    },\n  };\n\n  if (nodeSize) config[\"nodeSize\"] = nodeSize;\n  if (collideStrength) config[\"collideStrength\"] = collideStrength;\n  if (alpha) config[\"alpha\"] = alpha;\n  if (alphaDecay) config[\"alphaDecay\"] = alphaDecay;\n  if (alphaMin) config[\"alphaMin\"] = alphaMin;\n\n  return config;\n};\n\nconst hideItems = (graph) => {\n  hiddenItemIds.forEach((id) => {\n    graph.hideItem(id);\n  });\n};\n\nconst showItems = (graph) => {\n  graph.getNodes().forEach((node) => {\n    if (!node.isVisible()) graph.showItem(node);\n  });\n  graph.getEdges().forEach((edge) => {\n    if (!edge.isVisible()) edge.showItem(edge);\n  });\n  hiddenItemIds = [];\n};\n\nconst handleRefreshGraph = (\n  graph,\n  graphData,\n  width,\n  height,\n  largeGraphMode,\n  edgeLabelVisible,\n  isNewGraph,\n) => {\n  if (!graphData || !graph) return;\n  clearFocusItemState(graph);\n  // reset the filtering\n  graph.getNodes().forEach((node) => {\n    if (!node.isVisible()) node.show();\n  });\n  graph.getEdges().forEach((edge) => {\n    if (!edge.isVisible()) edge.show();\n  });\n\n  let nodes = [],\n    edges = [];\n\n  nodes = graphData?.nodes;\n  const processRes = processNodesEdges(\n    nodes,\n    graphData.edges || [],\n    width,\n    height,\n    largeGraphMode,\n    edgeLabelVisible,\n    isNewGraph,\n  );\n\n  edges = processRes.edges;\n\n  graph.changeData({ nodes, edges });\n\n  hideItems(graph);\n  graph.getNodes().forEach((node) => {\n    node.toFront();\n  });\n\n  layout.instance.stop();\n\n  // 在大数据量时，使用 GPU 布局\n  if (nodes.length > 100) {\n    layout.instance.destroy();\n    const layoutConfig: any = getForceLayoutConfig(graph, true);\n    layoutConfig.center = [width / 2, height / 2];\n    layout.instance = new G6.Layout[\"gForce\"](layoutConfig);\n  }\n\n  // force 需要使用不同 id 的对象才能进行全新的布局，否则会使用原来的引用。因此复制一份节点和边作为 force 的布局数据\n  layout.instance.init({\n    nodes: graphData.nodes,\n    edges,\n  });\n\n  layout.instance.minMovement = 0.0001;\n  layout.instance.getMass = (d) => {\n    const cachePosition = cachePositions[d.id];\n    if (cachePosition) return 5;\n    return 1;\n  };\n\n  layout.instance.execute();\n  return { nodes, edges };\n};\n\nconst getMixedGraph = (\n  aggregatedData,\n  originData,\n  nodeMap,\n  aggregatedNodeMap,\n  expandArray,\n  collapseArray,\n) => {\n  let nodes = [],\n    edges = [];\n\n  const expandMap = {},\n    collapseMap = {};\n  expandArray.forEach((expandModel) => {\n    expandMap[expandModel.id] = true;\n  });\n  collapseArray.forEach((collapseModel) => {\n    collapseMap[collapseModel.id] = true;\n  });\n\n  aggregatedData.clusters.forEach((cluster, i) => {\n    if (expandMap[cluster.id]) {\n      nodes = nodes.concat(cluster.nodes);\n      aggregatedNodeMap[cluster.id].expanded = true;\n    } else {\n      nodes.push(aggregatedNodeMap[cluster.id]);\n      aggregatedNodeMap[cluster.id].expanded = false;\n    }\n  });\n  originData.edges.forEach((edge) => {\n    const isSourceInExpandArray = expandMap[nodeMap[edge.source].clusterId];\n    const isTargetInExpandArray = expandMap[nodeMap[edge.target].clusterId];\n    if (isSourceInExpandArray && isTargetInExpandArray) {\n      edges.push(edge);\n    } else if (isSourceInExpandArray) {\n      const targetClusterId = nodeMap[edge.target].clusterId;\n      const vedge = {\n        source: edge.source,\n        target: targetClusterId,\n        id: `edge-${uniqueId()}`,\n        label: \"\",\n      };\n      edges.push(vedge);\n    } else if (isTargetInExpandArray) {\n      const sourceClusterId = nodeMap[edge.source].clusterId;\n      const vedge = {\n        target: edge.target,\n        source: sourceClusterId,\n        id: `edge-${uniqueId()}`,\n        label: \"\",\n      };\n      edges.push(vedge);\n    }\n  });\n  aggregatedData.clusterEdges.forEach((edge) => {\n    if (expandMap[edge.source] || expandMap[edge.target]) return;\n    else edges.push(edge);\n  });\n  return { nodes, edges };\n};\n\nconst getNeighborMixedGraph = (\n  centerNodeModel,\n  step,\n  originData,\n  clusteredData,\n  currentData,\n  nodeMap,\n  aggregatedNodeMap,\n  maxNeighborNumPerNode = 5,\n) => {\n  // update the manipulate position for center gravity of the new nodes\n  manipulatePosition = { x: centerNodeModel.x, y: centerNodeModel.y };\n\n  // the neighborSubGraph does not include the centerNodeModel. the elements are all generated new nodes and edges\n  const neighborSubGraph = generateNeighbors(\n    centerNodeModel,\n    step,\n    maxNeighborNumPerNode,\n  );\n  // update the origin data\n  originData.nodes = originData.nodes.concat(neighborSubGraph.nodes);\n  originData.edges = originData.edges.concat(neighborSubGraph.edges);\n  // update the origin nodeMap\n  neighborSubGraph.nodes.forEach((node) => {\n    nodeMap[node.id] = node;\n  });\n  // update the clusteredData\n  const clusterId = centerNodeModel.clusterId;\n  clusteredData.clusters.forEach((cluster) => {\n    if (cluster.id !== clusterId) return;\n    cluster.nodes = cluster.nodes.concat(neighborSubGraph.nodes);\n    cluster.sumTot += neighborSubGraph.edges.length;\n  });\n  // update the count\n  aggregatedNodeMap[clusterId].count += neighborSubGraph.nodes.length;\n\n  currentData.nodes = currentData.nodes.concat(neighborSubGraph.nodes);\n  currentData.edges = currentData.edges.concat(neighborSubGraph.edges);\n  return currentData;\n};\n\nconst generateNeighbors = (\n  centerNodeModel,\n  step,\n  maxNeighborNumPerNode = 5,\n) => {\n  if (step <= 0) return undefined;\n  let nodes = [],\n    edges = [];\n  const clusterId = centerNodeModel.clusterId;\n  const centerId = centerNodeModel.id;\n  const neighborNum = Math.ceil(Math.random() * maxNeighborNumPerNode);\n  for (let i = 0; i < neighborNum; i++) {\n    const neighborNode = {\n      id: uniqueId(),\n      clusterId,\n      level: 0,\n      colorSet: centerNodeModel.colorSet,\n    };\n    nodes.push(neighborNode);\n    const dire = Math.random() > 0.5;\n    const source = dire ? centerId : neighborNode.id;\n    const target = dire ? neighborNode.id : centerId;\n    const neighborEdge = {\n      id: uniqueId(),\n      source,\n      target,\n      label: `${source}-${target}`,\n    };\n    edges.push(neighborEdge);\n    const subNeighbors = generateNeighbors(\n      neighborNode,\n      step - 1,\n      maxNeighborNumPerNode,\n    );\n    if (subNeighbors) {\n      nodes = nodes.concat(subNeighbors.nodes);\n      edges = edges.concat(subNeighbors.edges);\n    }\n  }\n  return { nodes, edges };\n};\n\nconst getExtractNodeMixedGraph = (\n  extractNodeData,\n  originData,\n  nodeMap,\n  aggregatedNodeMap,\n  currentUnproccessedData,\n) => {\n  const extractNodeId = extractNodeData.id;\n  // const extractNodeClusterId = extractNodeData.clusterId;\n  // push to the current rendering data\n  currentUnproccessedData.nodes.push(extractNodeData);\n  // update the count of aggregatedNodeMap, when to revert?\n  // aggregatedNodeMap[extractNodeClusterId].count --;\n\n  // extract the related edges\n  originData.edges.forEach((edge) => {\n    if (edge.source === extractNodeId) {\n      const targetClusterId = nodeMap[edge.target].clusterId;\n      if (!aggregatedNodeMap[targetClusterId].expanded) {\n        // did not expand, create an virtual edge fromt he extract node to the cluster\n        currentUnproccessedData.edges.push({\n          id: uniqueId(),\n          source: extractNodeId,\n          target: targetClusterId,\n        });\n      } else {\n        // if the cluster is already expanded, push the origin edge\n        currentUnproccessedData.edges.push(edge);\n      }\n    } else if (edge.target === extractNodeId) {\n      const sourceClusterId = nodeMap[edge.source].clusterId;\n      if (!aggregatedNodeMap[sourceClusterId].expanded) {\n        // did not expand, create an virtual edge fromt he extract node to the cluster\n        currentUnproccessedData.edges.push({\n          id: uniqueId(),\n          target: extractNodeId,\n          source: sourceClusterId,\n        });\n      } else {\n        // if the cluster is already expanded, push the origin edge\n        currentUnproccessedData.edges.push(edge);\n      }\n    }\n  });\n  return currentUnproccessedData;\n};\n\nconst examAncestors = (model, expandedArray, length, keepTags) => {\n  for (let i = 0; i < length; i++) {\n    const expandedNode = expandedArray[i];\n    if (!keepTags[i] && model.parentId === expandedNode.id) {\n      keepTags[i] = true; // 需要被保留\n      examAncestors(expandedNode, expandedArray, length, keepTags);\n      break;\n    }\n  }\n};\n\nconst manageExpandCollapseArray = (\n  nodeNumber,\n  model,\n  collapseArray,\n  expandArray,\n) => {\n  manipulatePosition = { x: model.x, y: model.y };\n\n  // 维护 expandArray，若当前画布节点数高于上限，移出 expandedArray 中非 model 祖先的节点)\n  if (nodeNumber > NODE_LIMIT) {\n    // 若 keepTags[i] 为 true，则 expandedArray 的第 i 个节点需要被保留\n    const keepTags = {};\n    const expandLen = expandArray.length;\n    // 检查 X 的所有祖先并标记 keepTags\n    examAncestors(model, expandArray, expandLen, keepTags);\n    // 寻找 expandedArray 中第一个 keepTags 不为 true 的点\n    let shiftNodeIdx = -1;\n    for (let i = 0; i < expandLen; i++) {\n      if (!keepTags[i]) {\n        shiftNodeIdx = i;\n        break;\n      }\n    }\n    // 如果有符合条件的节点，将其从 expandedArray 中移除\n    if (shiftNodeIdx !== -1) {\n      let foundNode = expandArray[shiftNodeIdx];\n      if (foundNode.level === 2) {\n        let foundLevel1 = false;\n        // 找到 expandedArray 中 parentId = foundNode.id 且 level = 1 的第一个节点\n        for (let i = 0; i < expandLen; i++) {\n          const eNode = expandArray[i];\n          if (eNode.parentId === foundNode.id && eNode.level === 1) {\n            foundLevel1 = true;\n            foundNode = eNode;\n            expandArray.splice(i, 1);\n            break;\n          }\n        }\n        // 若未找到，则 foundNode 不变, 直接删去 foundNode\n        if (!foundLevel1) expandArray.splice(shiftNodeIdx, 1);\n      } else {\n        // 直接删去 foundNode\n        expandArray.splice(shiftNodeIdx, 1);\n      }\n      // const removedNode = expandedArray.splice(shiftNodeIdx, 1); // splice returns an array\n      const idSplits = foundNode.id.split(\"-\");\n      let collapseNodeId;\n      // 去掉最后一个后缀\n      for (let i = 0; i < idSplits.length - 1; i++) {\n        const str = idSplits[i];\n        if (collapseNodeId) collapseNodeId = `${collapseNodeId}-${str}`;\n        else collapseNodeId = str;\n      }\n      const collapseNode = {\n        id: collapseNodeId,\n        parentId: foundNode.id,\n        level: foundNode.level - 1,\n      };\n      collapseArray.push(collapseNode);\n    }\n  }\n\n  const currentNode = {\n    id: model.id,\n    level: model.level,\n    parentId: model.parentId,\n  };\n\n  // 加入当前需要展开的节点\n  expandArray.push(currentNode);\n\n  graph.get(\"canvas\").setCursor(\"default\");\n  return { expandArray, collapseArray };\n};\n\nconst cacheNodePositions = (nodes) => {\n  const positionMap = {};\n  const nodeLength = nodes.length;\n  for (let i = 0; i < nodeLength; i++) {\n    const node = nodes[i].getModel();\n    positionMap[node.id] = {\n      x: node.x,\n      y: node.y,\n      level: node.level,\n    };\n  }\n  return positionMap;\n};\n\nconst LargeGraph = () => {\n  const { t } = useTranslation();\n\n  const container = React.useRef<HTMLDivElement>(null);\n\n  const [fisheyeEnabled, setFisheyeEnabled] = useState(false);\n  const [lassoEnabled, setLassoEnabled] = useState(false);\n  const [edgeLabelVisible, setEdgeLabelVisible] = useState(false);\n  const [graphInstance, setGraphInstance] = useState(null);\n  const clickFisheyeIcon = (onlyDisable) => {\n    if (onlyDisable) {\n      setFisheyeEnabled(false);\n    } else {\n      setFisheyeEnabled(!fisheyeEnabled);\n    }\n  };\n  const clickLassoIcon = (onlyDisable) => {\n    if (onlyDisable) {\n      setLassoEnabled(false);\n    } else {\n      setLassoEnabled(!lassoEnabled);\n    }\n  };\n\n  const stopLayout = () => {\n    layout.instance.stop();\n  };\n\n  const bindListener = (graph) => {\n    graph.on(\"keydown\", (evt) => {\n      const code = evt.key;\n      if (!code) {\n        return;\n      }\n      if (code.toLowerCase() === \"shift\") {\n        shiftKeydown = true;\n      } else {\n        shiftKeydown = false;\n      }\n    });\n    graph.on(\"keyup\", (evt) => {\n      const code = evt.key;\n      if (!code) {\n        return;\n      }\n      if (code.toLowerCase() === \"shift\") {\n        shiftKeydown = false;\n      }\n    });\n    graph.on(\"node:mouseenter\", (evt: any) => {\n      const { item } = evt;\n      const model = item.getModel();\n      const currentLabel = model.label;\n      model.oriFontSize = model.labelCfg.style.fontSize;\n      item.update({\n        label: model.oriLabel,\n      });\n      model.oriLabel = currentLabel;\n      graph.setItemState(item, \"hover\", true);\n      item.toFront();\n    });\n\n    graph.on(\"node:mouseleave\", (evt: any) => {\n      const { item } = evt;\n      const model = item.getModel();\n      const currentLabel = model.label;\n      item.update({\n        label: model.oriLabel,\n      });\n      model.oriLabel = currentLabel;\n      graph.setItemState(item, \"hover\", false);\n    });\n\n    graph.on(\"edge:mouseenter\", (evt: any) => {\n      const { item } = evt;\n      const model = item.getModel();\n      const currentLabel = model.label;\n      item.update({\n        label: model.oriLabel,\n      });\n      model.oriLabel = currentLabel;\n      item.toFront();\n      item.getSource().toFront();\n      item.getTarget().toFront();\n    });\n\n    graph.on(\"edge:mouseleave\", (evt: any) => {\n      const { item } = evt;\n      const model = item.getModel();\n      const currentLabel = model.label;\n      item.update({\n        label: model.oriLabel,\n      });\n      model.oriLabel = currentLabel;\n    });\n    // click node to show the detail drawer\n    graph.on(\"node:click\", (evt: any) => {\n      stopLayout();\n      if (!shiftKeydown) clearFocusItemState(graph);\n      else clearFocusEdgeState(graph);\n      const { item } = evt;\n\n      // highlight the clicked node, it is down by click-select\n      graph.setItemState(item, \"focus\", true);\n\n      if (!shiftKeydown) {\n        // 将相关边也高亮\n        const relatedEdges = item.getEdges();\n        relatedEdges.forEach((edge) => {\n          graph.setItemState(edge, \"focus\", true);\n        });\n      }\n    });\n\n    // click edge to show the detail of integrated edge drawer\n    graph.on(\"edge:click\", (evt: any) => {\n      stopLayout();\n      if (!shiftKeydown) clearFocusItemState(graph);\n      const { item } = evt;\n      // highlight the clicked edge\n      graph.setItemState(item, \"focus\", true);\n    });\n\n    // click canvas to cancel all the focus state\n    graph.on(\"canvas:click\", (evt: any) => {\n      clearFocusItemState(graph);\n    });\n  };\n\n  const searchNode = (id) => {\n    if (!graph || graph.get(\"destroyed\")) return false;\n    const item = graph.findById(id);\n    const originNodeData = nodeMap[id];\n    if (!item && originNodeData) {\n      // does not exit the current mixed graph but in the origin data\n      cachePositions = cacheNodePositions(graph.getNodes());\n      currentUnproccessedData = getExtractNodeMixedGraph(\n        originNodeData,\n        originData,\n        nodeMap,\n        aggregatedNodeMap,\n        currentUnproccessedData,\n      );\n      handleRefreshGraph(\n        graph,\n        currentUnproccessedData,\n        CANVAS_WIDTH,\n        CANVAS_HEIGHT,\n        largeGraphMode,\n        true,\n        false,\n      );\n    }\n    if (!item) return false;\n    if (item && item.getType() !== \"node\") return false;\n    graph.focusItem(item, true);\n    clearFocusItemState(graph);\n    graph.setItemState(item, \"focus\", true);\n    return true;\n  };\n\n  const findPath = () => {\n    if (!graph || graph.get(\"destroyed\")) return false;\n    const selectedNodes = graph.findAllByState(\"node\", \"focus\");\n    if (selectedNodes.length !== 2) {\n      alert(\"Please Select only Two Nodes two Find the Path!\");\n      return;\n    }\n\n    // find the path and highlight the nodes and edges along the path\n    clearFocusItemState(graph);\n    const { path } = findShortestPath(\n      graph,\n      selectedNodes[0].getID(),\n      selectedNodes[1].getID(),\n    );\n    graph.getEdges().forEach((edge) => {\n      const edgeModel = edge.getModel();\n      const source = edgeModel.source;\n      const target = edgeModel.target;\n      const sourceInPathIdx = path.indexOf(source);\n      const targetInPathIdx = path.indexOf(target);\n      if (sourceInPathIdx === -1 || targetInPathIdx === -1) return;\n      if (Math.abs(sourceInPathIdx - targetInPathIdx) === 1) {\n        edge.toFront();\n        graph.setItemState(edge, \"focus\", true);\n      }\n    });\n    path.forEach((id) => {\n      const pathNode = graph.findById(id);\n      pathNode.toFront();\n      graph.setItemState(pathNode, \"focus\", true);\n    });\n  };\n\n  useEffect(() => {\n    if (!graph) {\n      fetch(\n        \"https://gw.alipayobjects.com/os/antvdemo/assets/data/relations.json\",\n      )\n        .then((res) => res.json())\n        .then((data) => {\n          if (container && container.current) {\n            CANVAS_WIDTH = container.current.offsetWidth;\n            CANVAS_HEIGHT = container.current.offsetHeight;\n          }\n\n          originData = data;\n          nodeMap = {};\n          const clusteredData = louvain(data, false, \"weight\");\n          const aggregatedData = { nodes: [], edges: [] };\n          clusteredData.clusters.forEach((cluster, i) => {\n            cluster.nodes.forEach((node) => {\n              node.level = 0;\n              node.label = node.id;\n              node.type = \"\";\n              node.colorSet = colorSets[i];\n              nodeMap[node.id] = node;\n            });\n            const cnode = {\n              id: cluster.id,\n              type: \"aggregated-node\",\n              count: cluster.nodes.length,\n              level: 1,\n              label: cluster.id,\n              colorSet: colorSets[i],\n              idx: i,\n            };\n            aggregatedNodeMap[cluster.id] = cnode;\n            aggregatedData.nodes.push(cnode);\n          });\n          clusteredData.clusterEdges.forEach((clusterEdge) => {\n            const cedge = {\n              ...clusterEdge,\n              size: Math.log(clusterEdge.count as number),\n              label: \"\",\n              id: `edge-${uniqueId()}`,\n            };\n            if (cedge.source === cedge.target) {\n              cedge.type = \"loop\";\n              cedge.loopCfg = {\n                dist: 20,\n              };\n            } else cedge.type = \"line\";\n            aggregatedData.edges.push(cedge);\n          });\n\n          data.edges.forEach((edge) => {\n            edge.label = `${edge.source}-${edge.target}`;\n            edge.id = `edge-${uniqueId()}`;\n          });\n\n          currentUnproccessedData = aggregatedData;\n\n          const { edges: processedEdges } = processNodesEdges(\n            currentUnproccessedData.nodes,\n            currentUnproccessedData.edges,\n            CANVAS_WIDTH,\n            CANVAS_HEIGHT,\n            largeGraphMode,\n            true,\n            true,\n          );\n\n          const contextMenu = new G6.Menu({\n            shouldBegin(evt) {\n              if (evt.target && evt.target.isCanvas && evt.target.isCanvas())\n                return true;\n              if (evt.item) return true;\n              return false;\n            },\n            getContent(evt) {\n              const { item } = evt;\n              if (evt.target && evt.target.isCanvas && evt.target.isCanvas()) {\n                return `<ul>\n                  <li id='show'>${t(\"显示所有隐藏元素\")}</li>\n                  <li id='collapseAll'>${t(\"聚合所有聚类\")}</li>\n                </ul>`;\n              } else if (!item) return;\n              const itemType = item?.getType();\n              const model = item?.getModel();\n              if (itemType && model) {\n                if (itemType === \"node\") {\n                  if (model.level !== 0) {\n                    return `<ul>\n                      <li id='expand'>${t(\"展开该聚合点\")}</li>\n                      <li id='hide'>${t(\"隐藏该节点\")}</li>\n                    </ul>`;\n                  } else {\n                    return `<ul>\n                      <li id='collapse'>${t(\"聚合所属聚类\")}</li>\n                      <li id='neighbor-1'>${t(\"扩展一度关系\")}</li>\n                      <li id='neighbor-2'>${t(\"扩展二度关系\")}</li>\n                      <li id='neighbor-3'>${t(\"扩展三度关系\")}</li>\n                      <li id='hide'>${t(\"隐藏该节点\")}</li>\n                    </ul>`;\n                  }\n                } else {\n                  return `<ul>\n                    <li id='hide'>${t(\"隐藏该边\")}</li>\n                  </ul>`;\n                }\n              }\n            },\n            handleMenuClick: (target, item) => {\n              const model = item?.getModel();\n              const liIdStrs = target.id.split(\"-\");\n              let mixedGraphData;\n              switch (liIdStrs[0]) {\n                case \"hide\":\n                  graph.hideItem(item);\n                  hiddenItemIds.push(model.id);\n                  break;\n                case \"expand\":\n                  const newArray = manageExpandCollapseArray(\n                    graph.getNodes().length,\n                    model,\n                    collapseArray,\n                    expandArray,\n                  );\n                  expandArray = newArray.expandArray;\n                  collapseArray = newArray.collapseArray;\n                  mixedGraphData = getMixedGraph(\n                    clusteredData,\n                    data,\n                    nodeMap,\n                    aggregatedNodeMap,\n                    expandArray,\n                    collapseArray,\n                  );\n                  break;\n                case \"collapse\":\n                  const aggregatedNode = aggregatedNodeMap[model.clusterId];\n                  manipulatePosition = {\n                    x: aggregatedNode.x,\n                    y: aggregatedNode.y,\n                  };\n                  collapseArray.push(aggregatedNode);\n                  for (let i = 0; i < expandArray.length; i++) {\n                    if (expandArray[i].id === model.clusterId) {\n                      expandArray.splice(i, 1);\n                      break;\n                    }\n                  }\n                  mixedGraphData = getMixedGraph(\n                    clusteredData,\n                    data,\n                    nodeMap,\n                    aggregatedNodeMap,\n                    expandArray,\n                    collapseArray,\n                  );\n                  break;\n                case \"collapseAll\":\n                  expandArray = [];\n                  collapseArray = [];\n                  mixedGraphData = getMixedGraph(\n                    clusteredData,\n                    data,\n                    nodeMap,\n                    aggregatedNodeMap,\n                    expandArray,\n                    collapseArray,\n                  );\n                  break;\n                case \"neighbor\":\n                  const expandNeighborSteps = parseInt(liIdStrs[1]);\n                  mixedGraphData = getNeighborMixedGraph(\n                    model,\n                    expandNeighborSteps,\n                    data,\n                    clusteredData,\n                    currentUnproccessedData,\n                    nodeMap,\n                    aggregatedNodeMap,\n                    10,\n                  );\n                  break;\n                case \"show\":\n                  showItems(graph);\n                  break;\n                default:\n                  break;\n              }\n              if (mixedGraphData) {\n                cachePositions = cacheNodePositions(graph.getNodes());\n                currentUnproccessedData = mixedGraphData;\n                handleRefreshGraph(\n                  graph,\n                  currentUnproccessedData,\n                  CANVAS_WIDTH,\n                  CANVAS_HEIGHT,\n                  largeGraphMode,\n                  true,\n                  false,\n                );\n              }\n            },\n            // offsetX and offsetY include the padding of the parent container\n            // 需要加上父级容器的 padding-left 16 与自身偏移量 10\n            offsetX: 16 + 10,\n            // 需要加上父级容器的 padding-top 24 、画布兄弟元素高度、与自身偏移量 10\n            offsetY: 0,\n            // the types of items that allow the menu show up\n            // 在哪些类型的元素上响应\n            itemTypes: [\"node\", \"edge\", \"canvas\"],\n          });\n\n          graph = new G6.Graph({\n            container: container.current as HTMLElement,\n            width: CANVAS_WIDTH,\n            height: CANVAS_HEIGHT,\n            linkCenter: true,\n            minZoom: 0.1,\n            groupByTypes: false,\n            modes: {\n              default: [\n                {\n                  type: \"drag-canvas\",\n                  enableOptimize: true,\n                },\n                {\n                  type: \"zoom-canvas\",\n                  enableOptimize: true,\n                  optimizeZoom: 0.01,\n                },\n                \"drag-node\",\n                \"shortcuts-call\",\n              ],\n              lassoSelect: [\n                {\n                  type: \"zoom-canvas\",\n                  enableOptimize: true,\n                },\n                {\n                  type: \"lasso-select\",\n                  selectedState: \"focus\",\n                  trigger: \"drag\",\n                },\n              ],\n              fisheyeMode: [],\n            },\n            defaultNode: {\n              type: \"aggregated-node\",\n              size: DEFAULTNODESIZE,\n            },\n            plugins: [contextMenu],\n          });\n\n          graph.get(\"canvas\").set(\"localRefresh\", false);\n\n          const layoutConfig: any = getForceLayoutConfig(graph, largeGraphMode);\n          layoutConfig.center = [CANVAS_WIDTH / 2, CANVAS_HEIGHT / 2];\n          layout.instance = new G6.Layout[\"gForce\"](layoutConfig);\n          layout.instance.init({\n            nodes: currentUnproccessedData.nodes,\n            edges: processedEdges,\n          });\n          layout.instance.execute();\n\n          bindListener(graph);\n          graph.data({ nodes: aggregatedData.nodes, edges: processedEdges });\n          graph.render();\n          setGraphInstance(graph);\n        });\n    }\n  });\n\n  // hide the edge label\n  useEffect(() => {\n    if (!graph || graph.get(\"destroyed\")) return;\n    graph.getEdges().forEach((edge) => {\n      const oriLabel: string = edge.getModel().oriLabel as string;\n      edge.update({\n        label: edgeLabelVisible ? labelFormatter(oriLabel, labelMaxLength) : \"\",\n      });\n    });\n  }, [edgeLabelVisible]);\n\n  if (typeof window !== \"undefined\")\n    window.onresize = () => {\n      if (container && container.current) {\n        CANVAS_WIDTH = container.current.offsetWidth;\n        CANVAS_HEIGHT = container.current.offsetHeight;\n      }\n      if (graph && layout.instance) {\n        layout.instance.center = [CANVAS_WIDTH / 2, CANVAS_HEIGHT / 2];\n        graph.changeSize(CANVAS_WIDTH, CANVAS_HEIGHT);\n      }\n    };\n  return (\n    <>\n      <div\n        ref={container}\n        style={{\n          backgroundColor: \"#2b2f33\",\n          height: \"calc(100vh - 100px)\",\n          width: \"70%\",\n        }}\n      />\n      <LegendPanel />\n      {graphInstance && (\n        <>\n          <CanvasMenu\n            graph={graph}\n            clickFisheyeIcon={clickFisheyeIcon}\n            clickLassoIcon={clickLassoIcon}\n            fisheyeEnabled={fisheyeEnabled}\n            lassoEnabled={lassoEnabled}\n            stopLayout={stopLayout}\n            edgeLabelVisible={edgeLabelVisible}\n            setEdgeLabelVisible={setEdgeLabelVisible}\n            searchNode={searchNode}\n            handleFindPath={findPath}\n          />\n        </>\n      )}\n    </>\n  );\n};\n\nexport default LargeGraph;\n"
  },
  {
    "path": "packages/site/site/pages/legend-panel.tsx",
    "content": "import React, { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { global } from \"./large-graph-register\";\n\nconst isBrowser = typeof window !== \"undefined\";\nconst G6 = isBrowser ? require(\"@antv/g6\") : null;\nconst insertCss = isBrowser ? require(\"insert-css\") : null;\n\nif (isBrowser) {\n  insertCss(`\n    #legend-panel {\n      width: 30%;\n      position: absolute;\n      right: 0px;\n      top: 64px;\n      height: 100%;\n      background-color: #34373A;\n      border-left: 2px #444 solid;\n      color: rgba(255, 255, 255, 0.85);\n      text-align: center;\n      box-shadow: 18px 5px 0 0 rgba(0, 0, 0, 0.6);\n    }\n    #legend-panel .legned-title {\n      width: 100%;\n      color: rgba(255, 255, 255, 0.85);\n      text-align: center;\n      margin-bottom: 0px;\n    }\n    #legend-panel #legend-graph-container {\n      width: 100%;\n      height: 250px;\n      background-color: #2b2f33;\n      margin-top: 8px;\n    }\n    #legend-panel #discription-container {\n      margin-top: 16px;\n      padding: 0px 16px;\n      height: calc(100% - 430px);\n      overflow-y: scroll;\n    }\n  `);\n}\n\nlet legendGraph = null;\nlet CANVAS_WIDTH = 100;\nlet CANVAS_HEIGHT = 800;\n\nconst LegendPanel = () => {\n  const { t, i18n } = useTranslation();\n  const container = React.useRef<HTMLDivElement>(null);\n  const data = {\n    nodes: [\n      {\n        id: \"aggregated-node-legend\",\n        x: 50,\n        y: 30,\n        type: \"aggregated-node\",\n        count: 10,\n      },\n      {\n        id: \"real-node-legend\",\n        x: 50,\n        y: 90,\n        size: 20,\n        type: \"real-node\",\n      },\n      {\n        id: \"aggregated-node-legend-new\",\n        x: 50,\n        y: 220,\n        type: \"aggregated-node\",\n        count: 10,\n        new: true,\n      },\n      {\n        id: \"real-node-legend-new\",\n        x: 100,\n        y: 220,\n        size: 20,\n        type: \"real-node\",\n        new: true,\n      },\n    ],\n    edges: [\n      {\n        source: \"aggregated-node-legend\",\n        target: \"real-node-legend\",\n        type: \"custom-line\",\n        isReal: false,\n        size: 4,\n      },\n      {\n        source: \"aggregated-node-legend\",\n        target: \"real-node-legend\",\n        type: \"custom-line\",\n        isReal: true,\n        size: 4,\n      },\n    ],\n  };\n  data.edges.forEach((edge: any) => {\n    const dash = edge.size;\n    const lineDash = edge.isReal ? undefined : [dash, dash];\n    const stroke = edge.isReal\n      ? global.edge.style.realEdgeStroke\n      : global.edge.style.stroke;\n    const opacity = edge.isReal\n      ? global.edge.style.realEdgeOpacity\n      : global.edge.style.strokeOpacity;\n\n    const arrowWidth = Math.max(edge.size / 2 + 2, 3);\n    const arrowLength = 10;\n    const arrowBeging = arrowLength;\n    let arrowPath = `M ${arrowBeging},0 L ${\n      arrowBeging + arrowLength\n    },-${arrowWidth} L ${arrowBeging + arrowLength},${arrowWidth} Z`;\n    let d = arrowLength;\n\n    edge.style = {\n      stroke,\n      strokeOpacity: opacity,\n      cursor: \"pointer\",\n      lineAppendWidth: Math.max(edge.size || 5, 5),\n      fillOpacity: 1,\n      lineDash,\n      endArrow: arrowPath\n        ? {\n            path: arrowPath,\n            d,\n            fill: stroke,\n            strokeOpacity: 0,\n          }\n        : false,\n    };\n  });\n  useEffect(() => {\n    if (container && container.current) {\n      CANVAS_WIDTH = container.current.offsetWidth;\n      CANVAS_HEIGHT = container.current.offsetHeight;\n    }\n    if (!legendGraph || legendGraph.get(\"destroyed\")) {\n      legendGraph = new G6.Graph({\n        container: container.current as HTMLElement,\n        width: CANVAS_WIDTH,\n        height: CANVAS_HEIGHT,\n        defaultEdge: {\n          labelCfg: {\n            style: {\n              fill: \"rgba(255, 255, 255, 0.85)\",\n            },\n          },\n        },\n      });\n      legendGraph.data(data);\n      legendGraph.render();\n\n      legendGraph.getEdges().forEach((edge) => {\n        if (!edge.getModel().isReal) {\n          legendGraph.updateItem(edge, {\n            source: { x: 20, y: 130 },\n            target: { x: 80, y: 130 },\n            count: 10,\n          });\n        } else {\n          legendGraph.updateItem(edge, {\n            source: { x: 20, y: 170 },\n            target: { x: 80, y: 170 },\n            count: 10,\n          });\n        }\n      });\n\n      const group = legendGraph.getGroup();\n      const textStyle = {\n        fill: \"rgba(255, 255, 255, 0.85)\",\n        textBaseline: \"middle\",\n        x: 100,\n        fontWeight: 800,\n        fontSize: 14,\n      };\n      const aggregatedNodeText = group.addShape(\"text\", {\n        attrs: {\n          text: t(\"聚合节点\"),\n          y: 20,\n          ...textStyle,\n        },\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          text: t(\"节点中间的数字代表该聚类所含的节点数量\"),\n          y: aggregatedNodeText.getBBox().maxY + 16,\n          ...textStyle,\n          opacity: 0.6,\n          fontSize: 10,\n        },\n      });\n\n      const realNodeText = group.addShape(\"text\", {\n        attrs: {\n          text: t(\"真实节点\"),\n          y: 80,\n          ...textStyle,\n        },\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          text: t(\"这是一个原数据中的真实节点\"),\n          y: realNodeText.getBBox().maxY + 8,\n          ...textStyle,\n          opacity: 0.6,\n          fontSize: 10,\n        },\n      });\n\n      const aggregatedEdgeText = group.addShape(\"text\", {\n        attrs: {\n          text: t(\"聚合边\"),\n          y: 130,\n          ...textStyle,\n        },\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          text: t(\"至少一个端点是聚合节点\"),\n          y: aggregatedEdgeText.getBBox().maxY + 8,\n          ...textStyle,\n          opacity: 0.6,\n          fontSize: 10,\n        },\n      });\n\n      const realEdgeText = group.addShape(\"text\", {\n        attrs: {\n          text: t(\"真实边\"),\n          y: 170,\n          ...textStyle,\n        },\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          text: t(\"两个端点都是真实节点\"),\n          y: realEdgeText.getBBox().maxY + 8,\n          ...textStyle,\n          opacity: 0.6,\n          fontSize: 10,\n        },\n      });\n\n      const newNodeText = group.addShape(\"text\", {\n        attrs: {\n          text: t(\"绿点标记：新增节点\"),\n          y: 210,\n          ...textStyle,\n          x: 130,\n        },\n      });\n      group.addShape(\"text\", {\n        attrs: {\n          text: t(\n            \"相较于上一次结果，右上方小绿点标记了\\n本次更新结果中新增的聚合节点或真实节点\",\n          ),\n          y: newNodeText.getBBox().maxY + 16,\n          ...textStyle,\n          opacity: 0.6,\n          fontSize: 10,\n          x: 130,\n        },\n      });\n    }\n  });\n\n  if (i18n.language === \"zh\") {\n    return (\n      <div id=\"legend-panel\">\n        <h1 className=\"legned-title\">图例与使用方式</h1>\n        <a\n          className=\"description\"\n          href=\"https://github.com/antvis/G6/blob/master/site/pages/largegraph.zh.tsx\"\n          target=\"_blanck\"\n        >\n          源代码\n        </a>\n        <div id=\"legend-graph-container\" ref={container} />\n        <div id=\"discription-container\">\n          <span className=\"description\">\n            一些科学研究表明，不超过 500\n            个节点的图可视化是适合终端用户阅读和交互式探索的。根据这个原则，在大规模图上，我们将元数据中的节点通过\n            LOUVAIN\n            聚类算法进行聚合。首先展示被聚合后的图，然后用户可以通过展开聚合节点进行下钻式探索。\n          </span>\n          <span className=\"description\">\n            如果一次聚合后的节点数仍然庞大，可以进行多层次的聚合。为了控制渲染节点的数量，展开多个聚类后，最早被展开的聚类将会被自动收起。这一方案除了满足上述原则，还能减少前端计算和渲染的负担。\n          </span>\n          <br />\n          <br />\n          <h3 className=\"legned-title\">{`<图交互>`}</h3>\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IgoxQ7wfjCcAAAAAAAAAAAAAARQnAQ\"\n            width=\"120\"\n          />{\" \"}\n          &nbsp; &nbsp; &nbsp; &nbsp;\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cCk4SrHVfDsAAAAAAAAAAAAAARQnAQ\"\n            width=\"150\"\n          />\n          <br />\n          <br />\n          <span className=\"description\">\n            {\" \"}\n            每个“聚合点”{\" \"}\n            <img\n              src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1y4AS7ucVXMAAAAAAAAAAAAAARQnAQ\"\n              width=\"50\"\n            />\n            代表了一个 LOUVAIN 计算出的聚类，包含多个“真实节点”{\" \"}\n            <img\n              src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IOgvSLWF1IQAAAAAAAAAAAAAARQnAQ\"\n              width=\"20\"\n            />\n            .<strong>「右击」</strong>{\" \"}\n            任意节点或边，一个相对应的上下文菜单将会出现。 右击{\" \"}\n            <img\n              src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1y4AS7ucVXMAAAAAAAAAAAAAARQnAQ\"\n              width=\"50\"\n            />{\" \"}\n            并选择“展开聚合节点”，聚合节点将会被该聚类中的真实节点替代，这就是下钻式探索。\n            你也可以通过右击{\" \"}\n            <img\n              src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IOgvSLWF1IQAAAAAAAAAAAAAARQnAQ\"\n              width=\"20\"\n            />{\" \"}\n            并选择“聚合该聚类”将已经展开的节点聚合；或选择 “寻找 k\n            度邻居”，被选中点的 k 度邻居节点将会被融合到当前图中。\n          </span>\n          <br /> <br />\n          <h3 className=\"legned-title\">{`<画布菜单>`}</h3>\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FKbFRIzj34EAAAAAAAAAAAAAARQnAQ\"\n            width=\"300\"\n          />\n          <br />\n          <span>\n            在画布左上角，有一个画布菜单，包含一系列辅助探索的工具。从左到右，它们分别是：\n          </span>\n          <br />\n          <span>\n            <strong>\n              - 显示/隐藏边标签；\n              <br />- 鱼眼放大镜；\n              <br />- 拉索选择模式；\n              <br />- 寻找最短路径（按 SHIFT 点选两个端点）；\n              <br />- 缩小；\n              <br />- 使图内容适应视窗；\n              <br />- 放大；\n              <br />- 搜索一个节点（输入 ID）。\n            </strong>\n          </span>\n          <br /> <br />\n          <h3 className=\"legned-title\">{`<注意>`}</h3>\n          <span>\n            该 demo\n            仅为展示大规模图可视化方案，因此使用的数据是一个较小的、模拟的数据集。除了上述内容外，还有很多其他的功能。愉快地探索吧。希望它对你有所帮助。\n          </span>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div id=\"legend-panel\">\n      <h1 className=\"legned-title\">Legend and Usage</h1>\n      <a\n        className=\"description\"\n        href=\"https://github.com/antvis/G6/blob/master/site/pages/largegraph.zh.tsx\"\n        target=\"_blanck\"\n      >\n        Source Code\n      </a>\n      <div id=\"legend-graph-container\" ref={container} />\n      <div id=\"discription-container\">\n        <span className=\"description\">\n          {\" \"}\n          Some research has found that the graph visulization is readable and\n          interactable for end users under 500 nodes. To reach this principle\n          for large graph, we clustering the source data by LOUVAIN algorithm,\n          and visualize the aggregated graph first. Then, end users are able to\n          do drilling down exploration.\n        </span>\n        <span className=\"description\">\n          {\" \"}\n          If the number of nodes still large on aggregated graph, we can do\n          multi-level aggregation. To control the number of rendering nodes, the\n          earliest expanded cluster will be collapsed automatically. These rules\n          also help us to avoid overloaded computation and rendering on\n          front-end.\n        </span>\n        <br />\n        <br />\n        <h3 className=\"legned-title\">{`<Graph Interaction>`}</h3>\n        <img\n          src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IgoxQ7wfjCcAAAAAAAAAAAAAARQnAQ\"\n          width=\"120\"\n        />{\" \"}\n        &nbsp; &nbsp; &nbsp; &nbsp;\n        <img\n          src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*cCk4SrHVfDsAAAAAAAAAAAAAARQnAQ\"\n          width=\"150\"\n        />\n        <br />\n        <br />\n        <span className=\"description\">\n          {\" \"}\n          Each 'Aggregated Node'{\" \"}\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1y4AS7ucVXMAAAAAAAAAAAAAARQnAQ\"\n            width=\"50\"\n          />\n          represents a cluster generated by LOUVAIN, it contains several 'Real\n          Node'{\" \"}\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IOgvSLWF1IQAAAAAAAAAAAAAARQnAQ\"\n            width=\"20\"\n          />\n          .<strong>「Right Click」</strong> any node or edge on the graph, a\n          corresponding contextmenu will show up. Right click{\" \"}\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*1y4AS7ucVXMAAAAAAAAAAAAAARQnAQ\"\n            width=\"50\"\n          />{\" \"}\n          and select 'Expand Node', the aggregated node will be replaced by the\n          real nodes of the cluster. You can also right click{\" \"}\n          <img\n            src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IOgvSLWF1IQAAAAAAAAAAAAAARQnAQ\"\n            width=\"20\"\n          />{\" \"}\n          and select 'Collapse the Cluster' to collapse it, or select 'Find\n          k-Degree Neighbor', A neighbor graph of the selected node will be\n          merged into the current graph.\n        </span>\n        <br /> <br />\n        <h3 className=\"legned-title\">{`<The Canvas Menu>`}</h3>\n        <img\n          src=\"https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*FKbFRIzj34EAAAAAAAAAAAAAARQnAQ\"\n          width=\"300\"\n        />\n        <br />\n        <span>\n          There is a set of assistant tools on the canvas menu, which is on the\n          left top of the canvas. From left to right, they are:\n        </span>\n        <br />\n        <span>\n          <strong>\n            - Show/Hide Edge Labels;\n            <br />\n            - Fisheye Lens;\n            <br />\n            - Lasso Select Mode;\n            <br />\n            - Find the Shortest Path (by clicking select two end nodes);\n            <br />\n            - Zoom-out;\n            <br />\n            - Fit the Graph to the View Port;\n            <br />\n            - Zoom-in;\n            <br />- Search a Node(by typing the id).\n          </strong>\n        </span>\n        <br /> <br />\n        <h3 className=\"legned-title\">{`<Notice>`}</h3>\n        <span>\n          The demo shows a small mocked dataset just for demonstration. Besides\n          the functions introduced above, there are lots of other functions. We\n          hope it is helpful for you. Explore it and have fun!\n        </span>\n      </div>\n    </div>\n  );\n};\n\nexport default LegendPanel;\n"
  },
  {
    "path": "rush.json",
    "content": "/**\n * This is the main configuration file for Rush.\n * For full documentation, please see https://rushjs.io\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n\n  /**\n   * (Required) This specifies the version of the Rush engine to be used in this repo.\n   * Rush's \"version selector\" feature ensures that the globally installed tool will\n   * behave like this release, regardless of which version is installed globally.\n   *\n   * The common/scripts/install-run-rush.js automation script also uses this version.\n   *\n   * NOTE: If you upgrade to a new major version of Rush, you should replace the \"v5\"\n   * path segment in the \"$schema\" field for all your Rush config files.  This will ensure\n   * correct error-underlining and tab-completion for editors such as VS Code.\n   */\n  \"rushVersion\": \"5.129.2\",\n\n  /**\n   * The next field selects which package manager should be installed and determines its version.\n   * Rush installs its own local copy of the package manager to ensure that your build process\n   * is fully isolated from whatever tools are present in the local environment.\n   *\n   * Specify one of: \"pnpmVersion\", \"npmVersion\", or \"yarnVersion\".  See the Rush documentation\n   * for details about these alternatives.\n   */\n  \"pnpmVersion\": \"8.15.8\",\n\n  //\"npmVersion\": \"6.14.15\",\n  // \"yarnVersion\": \"1.9.4\",\n\n  /**\n   * Older releases of the Node.js engine may be missing features required by your system.\n   * Other releases may have bugs.  In particular, the \"latest\" version will not be a\n   * Long Term Support (LTS) version and is likely to have regressions.\n   *\n   * Specify a SemVer range to ensure developers use a Node.js version that is appropriate\n   * for your repo.\n   *\n   * LTS schedule: https://nodejs.org/en/about/releases/\n   * LTS versions: https://nodejs.org/en/download/releases/\n   */\n  \"nodeSupportedVersionRange\": \">=18.20.3\",\n\n  /**\n   * If the version check above fails, Rush will display a message showing the current\n   * node version and the supported version range. You can use this setting to provide\n   * additional instructions that will display below the warning, if there's a specific\n   * tool or script you'd like the user to use to get in line with the expected version.\n   */\n  \"nodeSupportedVersionInstructions\": \"Run 'nvs use' to switch to the expected node version.\",\n\n  /**\n   * Odd-numbered major versions of Node.js are experimental.  Even-numbered releases\n   * spend six months in a stabilization period before the first Long Term Support (LTS) version.\n   * For example, 8.9.0 was the first LTS version of Node.js 8.  Pre-LTS versions are not recommended\n   * for production usage because they frequently have bugs.  They may cause Rush itself\n   * to malfunction.\n   *\n   * Rush normally prints a warning if it detects a pre-LTS Node.js version.  If you are testing\n   * pre-LTS versions in preparation for supporting the first LTS version, you can use this setting\n   * to disable Rush's warning.\n   */\n  // \"suppressNodeLtsWarning\": false,\n\n  /**\n   * Large monorepos can become intimidating for newcomers if project folder paths don't follow\n   * a consistent and recognizable pattern.  When the system allows nested folder trees,\n   * we've found that teams will often use subfolders to create islands that isolate\n   * their work from others (\"shipping the org\").  This hinders collaboration and code sharing.\n   *\n   * The Rush developers recommend a \"category folder\" model, where buildable project folders\n   * must always be exactly two levels below the repo root.  The parent folder acts as the category.\n   * This provides a basic facility for grouping related projects (e.g. \"apps\", \"libraries\",\n   * \"tools\", \"prototypes\") while still encouraging teams to organize their projects into\n   * a unified taxonomy.  Limiting to 2 levels seems very restrictive at first, but if you have\n   * 20 categories and 20 projects in each category, this scheme can easily accommodate hundreds\n   * of projects.  In practice, you will find that the folder hierarchy needs to be rebalanced\n   * occasionally, but if that's painful, it's a warning sign that your development style may\n   * discourage refactoring.  Reorganizing the categories should be an enlightening discussion\n   * that brings people together, and maybe also identifies poor coding practices (e.g. file\n   * references that reach into other project's folders without using Node.js module resolution).\n   *\n   * The defaults are projectFolderMinDepth=1 and projectFolderMaxDepth=2.\n   *\n   * To remove these restrictions, you could set projectFolderMinDepth=1\n   * and set projectFolderMaxDepth to a large number.\n   */\n  // \"projectFolderMinDepth\": 2,\n  // \"projectFolderMaxDepth\": 2,\n\n  /**\n   * Today the npmjs.com registry enforces fairly strict naming rules for packages, but in the early\n   * days there was no standard and hardly any enforcement.  A few large legacy projects are still using\n   * nonstandard package names, and private registries sometimes allow it.  Set \"allowMostlyStandardPackageNames\"\n   * to true to relax Rush's enforcement of package names.  This allows upper case letters and in the future may\n   * relax other rules, however we want to minimize these exceptions.  Many popular tools use certain punctuation\n   * characters as delimiters, based on the assumption that they will never appear in a package name; thus if we relax\n   * the rules too much it is likely to cause very confusing malfunctions.\n   *\n   * The default value is false.\n   */\n  // \"allowMostlyStandardPackageNames\": true,\n\n  /**\n   * This feature helps you to review and approve new packages before they are introduced\n   * to your monorepo.  For example, you may be concerned about licensing, code quality,\n   * performance, or simply accumulating too many libraries with overlapping functionality.\n   * The approvals are tracked in two config files \"browser-approved-packages.json\"\n   * and \"nonbrowser-approved-packages.json\".  See the Rush documentation for details.\n   */\n  // \"approvedPackagesPolicy\": {\n  //   /**\n  //    * The review categories allow you to say for example \"This library is approved for usage\n  //    * in prototypes, but not in production code.\"\n  //    *\n  //    * Each project can be associated with one review category, by assigning the \"reviewCategory\" field\n  //    * in the \"projects\" section of rush.json.  The approval is then recorded in the files\n  //    * \"common/config/rush/browser-approved-packages.json\" and \"nonbrowser-approved-packages.json\"\n  //    * which are automatically generated during \"rush update\".\n  //    *\n  //    * Designate categories with whatever granularity is appropriate for your review process,\n  //    * or you could just have a single category called \"default\".\n  //    */\n  //   \"reviewCategories\": [\n  //     // Some example categories:\n  //     \"production\", // projects that ship to production\n  //     \"tools\",      // non-shipping projects that are part of the developer toolchain\n  //     \"prototypes\"  // experiments that should mostly be ignored by the review process\n  //   ],\n  //\n  //   /**\n  //    * A list of NPM package scopes that will be excluded from review.\n  //    * We recommend to exclude TypeScript typings (the \"@types\" scope), because\n  //    * if the underlying package was already approved, this would imply that the typings\n  //    * are also approved.\n  //    */\n  //   // \"ignoredNpmScopes\": [\"@types\"]\n  // },\n\n  /**\n   * If you use Git as your version control system, this section has some additional\n   * optional features you can use.\n   */\n  \"gitPolicy\": {\n    /**\n     * Work at a big company?  Tired of finding Git commits at work with unprofessional Git\n     * emails such as \"beer-lover@my-college.edu\"?  Rush can validate people's Git email address\n     * before they get started.\n     *\n     * Define a list of regular expressions describing allowable e-mail patterns for Git commits.\n     * They are case-insensitive anchored JavaScript RegExps.  Example: \".*@example\\.com\"\n     *\n     * IMPORTANT: Because these are regular expressions encoded as JSON string literals,\n     * RegExp escapes need two backslashes, and ordinary periods should be \"\\\\.\".\n     */\n    // \"allowedEmailRegExps\": [\n    //   \"[^@]+@users\\\\.noreply\\\\.github\\\\.com\",\n    //   \"rush-bot@example\\\\.org\"\n    // ],\n    /**\n     * When Rush reports that the address is malformed, the notice can include an example\n     * of a recommended email.  Make sure it conforms to one of the allowedEmailRegExps\n     * expressions.\n     */\n    // \"sampleEmail\": \"example@users.noreply.github.com\",\n    /**\n     * The commit message to use when committing changes during 'rush publish'.\n     *\n     * For example, if you want to prevent these commits from triggering a CI build,\n     * you might configure your system's trigger to look for a special string such as \"[skip-ci]\"\n     * in the commit message, and then customize Rush's message to contain that string.\n     */\n    // \"versionBumpCommitMessage\": \"Bump versions [skip ci]\",\n    /**\n     * The commit message to use when committing changes during 'rush version'.\n     *\n     * For example, if you want to prevent these commits from triggering a CI build,\n     * you might configure your system's trigger to look for a special string such as \"[skip-ci]\"\n     * in the commit message, and then customize Rush's message to contain that string.\n     */\n    // \"changeLogUpdateCommitMessage\": \"Update changelogs [skip ci]\",\n    /**\n     * The commit message to use when commiting changefiles during 'rush change --commit'\n     *\n     * If no commit message is set it will default to 'Rush change'\n     */\n    // \"changefilesCommitMessage\": \"Rush change\"\n  },\n\n  \"repository\": {\n    /**\n     * The URL of this Git repository, used by \"rush change\" to determine the base branch for your PR.\n     *\n     * The \"rush change\" command needs to determine which files are affected by your PR diff.\n     * If you merged or cherry-picked commits from the main branch into your PR branch, those commits\n     * should be excluded from this diff (since they belong to some other PR).  In order to do that,\n     * Rush needs to know where to find the base branch for your PR.  This information cannot be\n     * determined from Git alone, since the \"pull request\" feature is not a Git concept.  Ideally\n     * Rush would use a vendor-specific protocol to query the information from GitHub, Azure DevOps, etc.\n     * But to keep things simple, \"rush change\" simply assumes that your PR is against the \"main\" branch\n     * of the Git remote indicated by the repository.url setting in rush.json.  If you are working in\n     * a GitHub \"fork\" of the real repo, this setting will be different from the repository URL of your\n     * your PR branch, and in this situation \"rush change\" will also automatically invoke \"git fetch\"\n     * to retrieve the latest activity for the remote main branch.\n     */\n    \"url\": \"https://github.com/antvis/f6\"\n\n    /**\n     * The default branch name. This tells \"rush change\" which remote branch to compare against.\n     * The default value is \"main\"\n     */\n    // \"defaultBranch\": \"main\",\n\n    /**\n     * The default remote. This tells \"rush change\" which remote to compare against if the remote URL is\n     * not set or if a remote matching the provided remote URL is not found.\n     */\n    // \"defaultRemote\": \"origin\"\n  },\n\n  /**\n   * Event hooks are customized script actions that Rush executes when specific events occur\n   */\n  \"eventHooks\": {\n    /**\n     * A list of shell commands to run before \"rush install\" or \"rush update\" starts installation\n     */\n    \"preRushInstall\": [\n      // \"common/scripts/pre-rush-install.js\"\n    ],\n\n    /**\n     * A list of shell commands to run after \"rush install\" or \"rush update\" finishes installation\n     */\n    \"postRushInstall\": [],\n\n    /**\n     * A list of shell commands to run before \"rush build\" or \"rush rebuild\" starts building\n     */\n    \"preRushBuild\": [],\n\n    /**\n     * A list of shell commands to run after \"rush build\" or \"rush rebuild\" finishes building\n     */\n    \"postRushBuild\": [],\n\n    /**\n     * A list of shell commands to run before the \"rushx\" command starts\n     */\n    \"preRushx\": [],\n\n    /**\n     * A list of shell commands to run after the \"rushx\" command finishes\n     */\n    \"postRushx\": []\n  },\n\n  /**\n   * Rush can collect anonymous telemetry about everyday developer activity such as\n   * success/failure of installs, builds, and other operations.  You can use this to identify\n   * problems with your toolchain or Rush itself.  THIS TELEMETRY IS NOT SHARED WITH MICROSOFT.\n   * It is written into JSON files in the common/temp folder.  It's up to you to write scripts\n   * that read these JSON files and do something with them.  These scripts are typically registered\n   * in the \"eventHooks\" section.\n   */\n  // \"telemetryEnabled\": false,\n\n  /**\n   * Allows creation of hotfix changes. This feature is experimental so it is disabled by default.\n   * If this is set, 'rush change' only allows a 'hotfix' change type to be specified. This change type\n   * will be used when publishing subsequent changes from the monorepo.\n   */\n  // \"hotfixChangeEnabled\": false,\n\n  /**\n   * This is an optional, but recommended, list of allowed tags that can be applied to Rush projects\n   * using the \"tags\" setting in this file.  This list is useful for preventing mistakes such as misspelling,\n   * and it also provides a centralized place to document your tags.  If \"allowedProjectTags\" list is\n   * not specified, then any valid tag is allowed.  A tag name must be one or more words\n   * separated by hyphens or slashes, where a word may contain lowercase ASCII letters, digits,\n   * \".\", and \"@\" characters.\n   */\n  // \"allowedProjectTags\": [ \"tools\", \"frontend-team\", \"1.0.0-release\" ],\n\n  /**\n   * (Required) This is the inventory of projects to be managed by Rush.\n   *\n   * Rush does not automatically scan for projects using wildcards, for a few reasons:\n   * 1. Depth-first scans are expensive, particularly when tools need to repeatedly collect the list.\n   * 2. On a caching CI machine, scans can accidentally pick up files left behind from a previous build.\n   * 3. It's useful to have a centralized inventory of all projects and their important metadata.\n   */\n  \"projects\": [\n    // {\n    //   /**\n    //    * The NPM package name of the project (must match package.json)\n    //    */\n    //   \"packageName\": \"my-app\",\n    //\n    //   /**\n    //    * The path to the project folder, relative to the rush.json config file.\n    //    */\n    //   \"projectFolder\": \"apps/my-app\",\n    //\n    //   /**\n    //    * This field is only used if \"subspacesEnabled\" is true in subspaces.json.\n    //    * It specifies the subspace that this project belongs to.  If omitted, then the\n    //    * project belongs to the \"default\" subspace.\n    //    */\n    //   // \"subspaceName\": \"my-subspace\",\n    //\n    //   /**\n    //    * An optional category for usage in the \"browser-approved-packages.json\"\n    //    * and \"nonbrowser-approved-packages.json\" files.  The value must be one of the\n    //    * strings from the \"reviewCategories\" defined above.\n    //    */\n    //   \"reviewCategory\": \"production\",\n    //\n    //   /**\n    //    * A list of Rush project names that are to be installed from NPM\n    //    * instead of linking to the local project.\n    //    *\n    //    * If a project's package.json specifies a dependency that is another Rush project\n    //    * in the monorepo workspace, normally Rush will locally link its folder instead of\n    //    * installing from NPM.  If you are using PNPM workspaces, this is indicated by\n    //    * a SemVer range such as \"workspace:^1.2.3\".  To prevent mistakes, Rush reports\n    //    * an error if the \"workspace:\" protocol is missing.\n    //    *\n    //    * Locally linking ensures that regressions are caught as early as possible and is\n    //    * a key benefit of monorepos.  However there are occasional situations where\n    //    * installing from NPM is needed.  A classic example is a cyclic dependency.\n    //    * Imagine three Rush projects: \"my-toolchain\" depends on \"my-tester\", which depends\n    //    * on \"my-library\".  Suppose that we add \"my-toolchain\" to the \"devDependencies\"\n    //    * of \"my-library\" so it can be built by our toolchain.  This cycle creates\n    //    * a problem -- Rush can't build a project using a not-yet-built dependency.\n    //    * We can solve it by adding \"my-toolchain\" to the \"decoupledLocalDependencies\"\n    //    * of \"my-library\", so it builds using the last published release.  Choose carefully\n    //    * which package to decouple; some choices are much easier to manage than others.\n    //    *\n    //    * (In older Rush releases, this setting was called \"cyclicDependencyProjects\".)\n    //    */\n    //   \"decoupledLocalDependencies\": [\n    //     // \"my-toolchain\"\n    //   ],\n    //\n    //   /**\n    //    * If true, then this project will be ignored by the \"rush check\" command.\n    //    * The default value is false.\n    //    */\n    //   // \"skipRushCheck\": false,\n    //\n    //   /**\n    //    * A flag indicating that changes to this project will be published to npm, which affects\n    //    * the Rush change and publish workflows. The default value is false.\n    //    * NOTE: \"versionPolicyName\" and \"shouldPublish\" are alternatives; you cannot specify them both.\n    //    */\n    //   // \"shouldPublish\": false,\n    //\n    //   /**\n    //    * Facilitates postprocessing of a project's files prior to publishing.\n    //    *\n    //    * If specified, the \"publishFolder\" is the relative path to a subfolder of the project folder.\n    //    * The \"rush publish\" command will publish the subfolder instead of the project folder.  The subfolder\n    //    * must contain its own package.json file, which is typically a build output.\n    //    */\n    //   // \"publishFolder\": \"temp/publish\",\n    //\n    //   /**\n    //    * An optional version policy associated with the project.  Version policies are defined\n    //    * in \"version-policies.json\" file.  See the \"rush publish\" documentation for more info.\n    //    * NOTE: \"versionPolicyName\" and \"shouldPublish\" are alternatives; you cannot specify them both.\n    //    */\n    //   // \"versionPolicyName\": \"\",\n    //\n    //   /**\n    //    * An optional set of custom tags that can be used to select this project.  For example,\n    //    * adding \"my-custom-tag\" will allow this project to be selected by the\n    //    * command \"rush list --only tag:my-custom-tag\".  The tag name must be one or more words\n    //    * separated by hyphens or slashes, where a word may contain lowercase ASCII letters, digits,\n    //    * \".\", and \"@\" characters.\n    //    */\n    //   // \"tags\": [ \"1.0.0-release\", \"frontend-team\" ]\n    // },\n    //\n    // {\n    //   \"packageName\": \"my-controls\",\n    //   \"projectFolder\": \"libraries/my-controls\",\n    //   \"reviewCategory\": \"production\",\n    //   \"tags\": [ \"frontend-team\" ]\n    // },\n    //\n    // {\n    //   \"packageName\": \"my-toolchain\",\n    //   \"projectFolder\": \"tools/my-toolchain\",\n    //   \"reviewCategory\": \"tools\",\n    //   \"tags\": [ \"tools\" ]\n    // }\n    {\n      \"packageName\": \"@antv/f6-core\",\n      \"projectFolder\": \"packages/core\"\n    },\n    {\n      \"packageName\": \"@antv/f6-element\",\n      \"projectFolder\": \"packages/element\"\n    },\n    {\n      \"packageName\": \"@antv/f6-ui\",\n      \"projectFolder\": \"packages/f6-ui\"\n    },\n    {\n      \"packageName\": \"@antv/f6-plugin\",\n      \"projectFolder\": \"packages/plugin\"\n    },\n    {\n      \"packageName\": \"@antv/f6\",\n      \"projectFolder\": \"packages/f6\",\n      \"decoupledLocalDependencies\": [\"@antv/f6-hammerjs\"]\n    },\n    {\n      \"packageName\": \"@antv/f6-site\",\n      \"projectFolder\": \"packages/site\",\n      \"decoupledLocalDependencies\": [\"@antv/f6\", \"@antv/f6-alipay\"]\n    },\n    {\n      \"packageName\": \"@antv/f6-alipay\",\n      \"projectFolder\": \"packages/f6-alipay\"\n    },\n    {\n      \"packageName\": \"@antv/f6-wx\",\n      \"projectFolder\": \"packages/f6-wx\"\n    },\n    {\n      \"packageName\": \"@antv/f6-rax\",\n      \"projectFolder\": \"packages/f6-rax\",\n      \"decoupledLocalDependencies\": [\n        \"@antv/f6\",\n        \"@antv/f6-alipay\",\n        \"@antv/f6-hammerjs\"\n      ]\n    },\n    {\n      \"packageName\": \"@antv/f6-hammerjs\",\n      \"projectFolder\": \"packages/hammer\"\n    }\n  ],\n  \"ensureConsistentVersions\": false\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"esNext\",\n    \"target\": \"es2015\",\n    \"jsx\": \"preserve\",\n    \"jsxFactory\": \"createElement\",\n    \"moduleResolution\": \"node\",\n    \"alwaysStrict\": true,\n    \"sourceMap\": false,\n    \"allowSyntheticDefaultImports\": true,\n    \"suppressImplicitAnyIndexErrors\": true,\n    \"removeComments\": false,\n    \"preserveConstEnums\": true,\n    \"experimentalDecorators\": true,\n    \"noImplicitReturns\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": false,\n    \"noImplicitAny\": false,\n    \"noImplicitThis\": false,\n    \"resolveJsonModule\": true,\n    \"outDir\": \"lib\",\n    \"rootDir\": \"src\",\n    \"baseUrl\": \".\"\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\", \"lib\", \"dist\", \"esm\"]\n}\n"
  }
]